<?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>168272</bug_id>
          
          <creation_ts>2017-02-13 19:32:27 -0800</creation_ts>
          <short_desc>Remove android-specific files from ThirdParty/libwebrtc</short_desc>
          <delta_ts>2017-02-14 10:54:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1276541</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-13 19:32:27 -0800</bug_when>
    <thetext>Remove android-specific files from ThirdParty/libwebrtc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276542</commentid>
    <comment_count>1</comment_count>
      <attachid>301440</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-13 19:34:01 -0800</bug_when>
    <thetext>Created attachment 301440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276818</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-02-14 10:54:50 -0800</bug_when>
    <thetext>http://trac.webkit.org/r212308</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301440</attachid>
            <date>2017-02-13 19:34:01 -0800</date>
            <delta_ts>2017-02-14 10:54:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-168272-20170213193116.patch</filename>
            <type>text/plain</type>
            <size>8232706</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5nZUxvZwkocmV2aXNpb24gMjEyMjc0
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDMyOSBAQAorMjAxNy0wMi0xMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBhbmRyb2lkLXNwZWNpZmljIGZp
bGVzIGZyb20gVGhpcmRQYXJ0eS9saWJ3ZWJydGMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODI3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMv
dGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvdGhp
cmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL0FuZHJvaWRO
ZGtHZGIuY21ha2U6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3RoaXJkX3BhcnR5L2Jvcmlu
Z3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9BbmRyb2lkTmRrTW9kdWxlcy5jbWFr
ZTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90
aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL0xJQ0VOU0U6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9N
RVRBREFUQTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3Ns
L3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL1JFQURNRS5tZDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lk
LWNtYWtlL2FuZHJvaWQudG9vbGNoYWluLmNtYWtlOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2UvbmRr
X2xpbmtzLm1kOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdz
c2wvc3JjL3V0aWwvcnVuX2FuZHJvaWRfdGVzdHMuZ286IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3RoaXJkX3BhcnR5L2xpYnl1di91dGlsL2FuZHJvaWQ6IFJlbW92ZWQuCisgICAgICAgICog
U291cmNlL3RoaXJkX3BhcnR5L2xpYnl1di91dGlsL2FuZHJvaWQvdGVzdF9ydW5uZXIucHk6IFJl
bW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQ6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQvT1dORVJTOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYzogUmVtb3ZlZC4KKyAgICAgICAg
KiBTb3VyY2Uvd2VicnRjL2FuZHJvaWRqdW5pdC9zcmMvb3JnOiBSZW1vdmVkLgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYy9vcmcvd2VicnRjOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYy9vcmcvd2VicnRjL0NhbWVyYUVu
dW1lcmF0aW9uVGVzdC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQ6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9Q
UkVTVUJNSVQucHk6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9SRUFETUU6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmM6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1NvdXJjZS5qYXZhOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRp
b1RyYWNrLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luay5qYXZh
OiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXIuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUVudW1lcmF0
b3IuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMVNlc3Npb24uamF2YTogUmVtb3ZlZC4KKyAgICAgICAg
KiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNh
cHR1cmVyLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJFbnVtZXJhdG9yLmphdmE6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0Nh
bWVyYTJTZXNzaW9uLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUNhcHR1cmVyLmphdmE6IFJlbW92ZWQu
CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0NhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdG9y
LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0NhbWVyYVNlc3Npb24uamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhVmlkZW9D
YXB0dXJlci5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNl
LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0VnbEJhc2UxMC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YTog
UmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvRWdsUmVuZGVyZXIuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRmlsZVZpZGVvQ2FwdHVyZXIuamF2
YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvR2xSZWN0RHJhd2VyLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsU2hhZGVyLmphdmE6IFJl
bW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0dsVGV4dHVyZUZyYW1lQnVmZmVyLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsVXRpbC5qYXZhOiBS
ZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9JY2VDYW5kaWRhdGUuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2Rl
ci5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmphdmE6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01l
ZGlhQ29uc3RyYWludHMuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTb3VyY2UuamF2YTogUmVtb3ZlZC4K
KyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
TWVkaWFTdHJlYW0uamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZhOiBSZW1vdmVk
LgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9NZXRyaWNzLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yLmphdmE6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL05l
dHdvcmtNb25pdG9yQXV0b0RldGVjdC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9PV05FUlM6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Bl
ZXJDb25uZWN0aW9uLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhOiBS
ZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9SZW5kZXJlckNvbW1vbi5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmE6
IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL1J0cFJlY2VpdmVyLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFNlbmRlci5qYXZhOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9TY3JlZW5DYXB0dXJlckFuZHJvaWQuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2
YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uLmphdmE6IFJlbW92ZWQuCisgICAgICAgICog
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N0YXRzT2JzZXJ2
ZXIuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvU3RhdHNSZXBvcnQuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVRleHR1
cmVIZWxwZXIuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlci5qYXZhOiBSZW1vdmVk
LgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9WaWRlb0NhcHR1cmVyLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXJBbmRyb2lkLmphdmE6
IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL1ZpZGVvRmlsZVJlbmRlcmVyLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXIu
amF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvVmlkZW9SZW5kZXJlckd1aS5qYXZhOiBSZW1vdmVkLgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1NvdXJj
ZS5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1l1dkNvbnZlcnRlci5q
YXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pOiBS
ZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL09XTkVSUzog
UmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lk
bWVkaWFjb2RlY2NvbW1vbi5oOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29kZXJfam5pLmNjOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29kZXJfam5p
Lmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5k
cm9pZG1lZGlhZW5jb2Rlcl9qbmkuY2M6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmkuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWV0cmljc19qbmku
Y2M6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5k
cm9pZG5ldHdvcmttb25pdG9yX2puaS5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbmV0d29ya21vbml0b3Jfam5pLmg6IFJlbW92ZWQu
CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZHZpZGVvdHJh
Y2tzb3VyY2Vfam5pLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmg6IFJlbW92
ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMu
Y2M6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5p
X2hlbHBlcnMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2puaS9qbmlfb25sb2FkLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1wbC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFuZGxlX2ltcGwuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9wZWVyY29ubmVjdGlv
bl9qbmkuY2M6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
bmkvc3VyZmFjZXRleHR1cmVoZWxwZXJfam5pLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3N1cmZhY2V0ZXh0dXJlaGVscGVyX2puaS5oOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0czogUmVtb3ZlZC4K
KyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvQW5kcm9pZE1hbmlmZXN0
LnhtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMv
T1dORVJTOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0
cy9hbnQucHJvcGVydGllczogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvYnVpbGQueG1sOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWR0ZXN0cy9wcm9qZWN0LnByb3BlcnRpZXM6IFJlbW92ZWQuCisgICAgICAgICog
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3JlczogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWhkcGk6IFJlbW92ZWQu
CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1o
ZHBpL2ljX2xhdW5jaGVyLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGk6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVy
LnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMv
cmVzL2RyYXdhYmxlLW1kcGk6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZzogUmVtb3ZlZC4K
KyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLXho
ZHBpOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9y
ZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nOiBSZW1vdmVkLgorICAgICAgICAqIFNv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1s
OiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmM6
IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9v
cmc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Ny
Yy9vcmcvd2VicnRjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0
LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QuamF2YTogUmVt
b3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93
ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1
cmVyVGVzdEZpeHR1cmVzLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0VnbFJlbmRlcmVyVGVzdC5qYXZhOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9HbFJlY3REcmF3ZXJUZXN0LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29k
ZXJUZXN0LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZHRlc3RzL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yVGVzdC5qYXZhOiBSZW1vdmVkLgor
ICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9Q
ZWVyQ29ubmVjdGlvblRlc3QuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb25UZXN0LmphdmE6
IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5qYXZhOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNl
Vmlld1JlbmRlcmVyT25NZWFzdXJlVGVzdC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9XZWJSdGNKbmlCb290VGVz
dC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR2aWRl
b3RyYWNrc291cmNlLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWR2aWRlb3RyYWNrc291cmNlLmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9hcGkvdGVzdC9hbmRyb2lkdGVzdGluaXRpYWxpemVyLmNjOiBSZW1vdmVkLgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvYXBpL3Rlc3QvYW5kcm9pZHRlc3Rpbml0aWFsaXplci5oOiBSZW1vdmVk
LgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYmFzZS9pZmFkZHJzLWFuZHJvaWQuY2M6IFJlbW92
ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9iYXNlL2lmYWRkcnMtYW5kcm9pZC5oOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2Uvd2VicnRjL2J1aWxkL2FuZHJvaWQvQW5kcm9pZE1hbmlmZXN0LnhtbDog
UmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2J1aWxkL2FuZHJvaWQvc3VwcHJlc3Np
b25zLnhtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2J1aWxkL2FuZHJvaWQv
dGVzdF9ydW5uZXIucHk6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9BbmRyb2lkTWFuaWZlc3QueG1sOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9PV05FUlM6IFJlbW92ZWQuCisgICAgICAgICog
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL1JFQURNRTogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvYW50LnByb3BlcnRpZXM6IFJl
bW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL2J1aWxk
LnhtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcHJvamVjdC5wcm9wZXJ0aWVzOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXM6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9k
aXNjb25uZWN0LnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZzog
UmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZzogUmVt
b3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2Ry
YXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sb29wYmFja19j
YWxsLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLWxkcGk6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2Rpc2Nvbm5lY3QucG5nOiBS
ZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
ZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9p
Y19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nOiBSZW1vdmVkLgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19s
YXVuY2hlci5wbmc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nOiBSZW1vdmVk
LgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUtbWRwaTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvZGlzY29ubmVjdC5wbmc6IFJlbW92ZWQuCisgICAgICAg
ICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2lj
X2FjdGlvbl9mdWxsX3NjcmVlbi5wbmc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9yZXR1cm5f
ZnJvbV9mdWxsX3NjcmVlbi5wbmc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZzogUmVt
b3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2Ry
YXdhYmxlLW1kcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmc6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdh
YmxlLXhoZHBpL2Rpc2Nvbm5lY3QucG5nOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Z1bGxf
c2NyZWVuLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3Nj
cmVlbi5wbmc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmc6IFJlbW92ZWQuCisgICAg
ICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRw
aS9pY19sb29wYmFja19jYWxsLnBuZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9hY3Rpdml0eV9jYWxsLnht
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2xheW91dC9hY3Rpdml0eV9jb25uZWN0LnhtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9mcmFnbWVudF9jYWxsLnht
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2xheW91dC9mcmFnbWVudF9odWQueG1sOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbWVudTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL21lbnUvY29ubmVjdF9tZW51Lnht
bDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL3ZhbHVlczogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvcmVzL3ZhbHVlcy12MTc6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMtdjE3L3N0eWxlcy54bWw6IFJlbW92ZWQu
CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMt
djIxOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvdmFsdWVzLXYyMS9zdHlsZXMueG1sOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzL2FycmF5cy54bWw6IFJlbW92ZWQu
CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMv
c3RyaW5ncy54bWw6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy94bWw6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy94bWwvcHJlZmVyZW5jZXMueG1sOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmM6IFJlbW92ZWQuCisgICAg
ICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmc6IFJlbW92ZWQu
CisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0YzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENBdWRp
b01hbmFnZXIuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENDbGllbnQuamF2YTogUmVt
b3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29y
Zy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENQcm94aW1pdHlTZW5zb3IuamF2YTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9DYWxsQWN0aXZpdHkuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYWxsRnJhZ21l
bnQuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIuamF2
YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Db25uZWN0QWN0aXZpdHkuamF2YTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9DcHVNb25pdG9yLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvRGlyZWN0UlRDQ2xp
ZW50LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvSHVkRnJhZ21lbnQuamF2YTogUmVtb3ZlZC4K
KyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9QZWVyQ29ubmVjdGlvbkNsaWVudC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L1BlcmNlbnRGcmFtZUxheW91dC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1Jvb21QYXJhbWV0
ZXJzRmV0Y2hlci5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1NldHRpbmdzQWN0aXZpdHkuamF2
YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5nc0ZyYWdtZW50LmphdmE6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3Bv
dC9hcHBydGMvVENQQ2hhbm5lbENsaWVudC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1VuaGFu
ZGxlZEV4Y2VwdGlvbkhhbmRsZXIuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRD
aGFubmVsQ2xpZW50LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29ja2V0UlRDQ2xpZW50
LmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGls
L0FwcFJUQ1V0aWxzLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9Bc3luY0h0dHBVUkxD
b25uZWN0aW9uLmphdmE6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3N0YXJ0X2xvb3BiYWNrX3N0dWJiZWRfY2FtZXJhX3NhdmVkX3ZpZGVvX291
dC5weTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvdGhpcmRfcGFydHk6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oOiBSZW1vdmVkLgorICAgICAgICAqIFNv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9CVUlM
RC5nbjogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5T
RS5tZDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTk9USUNFOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9saWI6IFJl
bW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJk
X3BhcnR5L2F1dG9iYW5oL2xpYi9hdXRvYmFuaC5qYXI6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQ6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvUkVBRE1FOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYzogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYy9v
cmcvYXBwc3BvdDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjOiBSZW1vdmVkLgorICAgICAgICAqIFNv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMv
RGlyZWN0UlRDQ2xpZW50VGVzdC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5l
bENsaWVudFRlc3QuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0czogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sOiBSZW1vdmVkLgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL1JFQURNRTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9hbnQucHJvcGVydGll
czogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0
cy9idWlsZC54bWw6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkdGVzdHMvcHJvamVjdC5wcm9wZXJ0aWVzOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYzogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3Bv
dDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0
cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdDogUmVt
b3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMv
b3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvRmlsZVZpZGVvQ2FwdHVyZXJUZXN0LmphdmE6IFJlbW92
ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29y
Zy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1BlZXJDb25uZWN0aW9uQ2xpZW50VGVzdC5qYXZhOiBSZW1v
dmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvdGVzdC9WaWRlb0ZpbGVSZW5kZXJlclRlc3QuamF2YTogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRlby55NG06IFJlbW92ZWQuCisgICAg
ICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkOiBSZW1vdmVk
LgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9h
dWRpb19jb21tb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fZGV2aWNlX3RlbXBsYXRlLmg6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlv
X2RldmljZV91bml0dGVzdC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5jYzogUmVtb3ZlZC4KKyAg
ICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9f
bWFuYWdlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyX3VuaXR0ZXN0LmNjOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19y
ZWNvcmRfam5pLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNvcmRfam5pLmg6IFJlbW92ZWQuCisgICAgICAg
ICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX3RyYWNr
X2puaS5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJhY2tfam5pLmg6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxkX2luZm8uY2M6IFJl
bW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRy
b2lkL2J1aWxkX2luZm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRpYWxpemVkLmNjOiBSZW1vdmVkLgor
ICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9lbnN1
cmVfaW5pdGlhbGl6ZWQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uv
d2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmM6IFJlbW92ZWQuCisg
ICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEv
c3JjL29yZzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0YzogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy92b2ljZWVuZ2luZTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9C
dWlsZEluZm8uamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJS
dGNBdWRpb0VmZmVjdHMuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2lu
ZS9XZWJSdGNBdWRpb01hbmFnZXIuamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2lj
ZWVuZ2luZS9XZWJSdGNBdWRpb1JlY29yZC5qYXZhOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVHJhY2suamF2YTogUmVtb3ZlZC4KKyAgICAgICAgKiBT
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1V0aWxzLmphdmE6IFJlbW92ZWQuCisgICAgICAg
ICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX2Nv
bW1vbi5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfY29tbW9uLmg6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5j
YzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3JlY29yZGVyLmNjOiBS
ZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5k
cm9pZC9vcGVuc2xlc19yZWNvcmRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3Q6IFJlbW92ZWQuCisgICAgICAgICogU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9z
aW11bGF0b3IuY2M6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9zaW11bGF0b3IuaDogUmVtb3ZlZC4K
KyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2Fu
ZHJvaWQ6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3By
b2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3Q6IFJlbW92ZWQuCisgICAgICAgICogU291cmNl
L3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvQW5k
cm9pZE1hbmlmZXN0LnhtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9kZWZhdWx0LnByb3BlcnRp
ZXM6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nl
c3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3Qvam5pOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2pu
aS9tYWluLmM6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvcmVzOiBSZW1vdmVkLgorICAgICAgICAq
IFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10
ZXN0L3Jlcy92YWx1ZXM6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvcmVzL3ZhbHVlcy9zdHJpbmdz
LnhtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L2FwbXRlc3QubTogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlvX2J1ZmZlcl90b29scy5jYzogUmVt
b3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90
ZXN0L2F1ZGlvX2J1ZmZlcl90b29scy5oOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fcHJvY2Vzc2luZ19zaW11bGF0
b3IuY2M6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3By
b2Nlc3NpbmcvdGVzdC9hdWRpb19wcm9jZXNzaW5nX3NpbXVsYXRvci5oOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9w
cm9jX2Zsb2F0LmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9h
dWRpb19wcm9jZXNzaW5nL3Rlc3QvYml0ZXhhY3RuZXNzX3Rvb2xzLmNjOiBSZW1vdmVkLgorICAg
ICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYml0ZXhh
Y3RuZXNzX3Rvb2xzLmg6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9kZWJ1Z19kdW1wX3JlcGxheWVyLmNjOiBSZW1vdmVkLgor
ICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVi
dWdfZHVtcF9yZXBsYXllci5oOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVidWdfZHVtcF90ZXN0LmNjOiBSZW1vdmVkLgor
ICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJv
dG9idWZfdXRpbHMuY2M6IFJlbW92ZWQuCisgICAgICAgICogU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9wcm90b2J1Zl91dGlscy5oOiBSZW1vdmVkLgorICAgICAg
ICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdGVzdF91dGls
cy5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L3Rlc3RfdXRpbHMuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3VuaXR0ZXN0LnByb3RvOiBSZW1vdmVk
LgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3Qv
dW5wYWNrLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19wcm9jZXNzaW5nL3Rlc3Qvd2F2X2Jhc2VkX3NpbXVsYXRvci5jYzogUmVtb3ZlZC4KKyAgICAg
ICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3dhdl9iYXNl
ZF9zaW11bGF0b3IuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMv
dXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5kcm9pZC5oOiBSZW1vdmVkLgorICAgICAgICAqIFNv
dXJjZS93ZWJydGMvbW9kdWxlcy91dGlsaXR5L2luY2x1ZGUvanZtX2FuZHJvaWQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBTb3VyY2Uvd2VicnRjL21vZHVsZXMvdXRpbGl0eS9zb3VyY2UvaGVscGVy
c19hbmRyb2lkLmNjOiBSZW1vdmVkLgorICAgICAgICAqIFNvdXJjZS93ZWJydGMvbW9kdWxlcy91
dGlsaXR5L3NvdXJjZS9qdm1fYW5kcm9pZC5jYzogUmVtb3ZlZC4KKyAgICAgICAgKiBTb3VyY2Uv
d2VicnRjL3N5c3RlbV93cmFwcGVycy9zb3VyY2UvY3B1X2ZlYXR1cmVzX2FuZHJvaWQuYzogUmVt
b3ZlZC4KKwogMjAxNy0wMi0xMCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEZpeCBpT1MgbGlid2VicnRjIGJ1aWxkIGFmdGVyIHIyMTIxMjcK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9y
aW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL0FuZHJvaWROZGtHZGIuY21ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2UvQW5kcm9pZE5ka0dk
Yi5jbWFrZQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21h
a2UvQW5kcm9pZE5ka0dkYi5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDk2ICswLDAgQEAKLSMg
Q29weXJpZ2h0IChjKSAyMDE0LCBQYXZlbCBSb2p0YmVyZwotIyBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0jCi0jIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKLSMgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMKLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotIyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0jIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUK
LSMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSMgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVzYWdl
OgotIyAxLiBwbGFjZSBBbmRyb2lkTmRrR2RiLmNtYWtlIHNvbWV3aGVyZSBpbnNpZGUgJHtDTUFL
RV9NT0RVTEVfUEFUSH0KLSMgMi4gaW5zaWRlIHlvdXIgcHJvamVjdCBhZGQKLSMKLSMgICAgaW5j
bHVkZShBbmRyb2lkTmRrR2RiKQotIyAgICBhbmRyb2lkX25ka19nZGJfZW5hYmxlKCkKLSMgICAg
IyBmb3IgZWFjaCB0YXJnZXQKLSMgICAgYWRkX2xpYnJhcnkoTXlMaWJyYXJ5IC4uLikKLSMgICAg
YW5kcm9pZF9uZGtfZ2RiX2RlYnVnZ2FibGUoTXlMaWJyYXJ5KSAgICAKLQotCi0jIGFkZCBnZGJz
ZXJ2ZXIgYW5kIGdlbmVyYWwgZ2RiIGNvbmZpZ3VyYXRpb24gdG8gcHJvamVjdAotIyBhbHNvIGNy
ZWF0ZSBhIG1pbmluYWwgTkRLIHNrZWxldG9uIHNvIG5kay1nZGIgZmluZHMgdGhlIHBhdGhzCi0j
Ci0jIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgYW5kcm9p
ZCBwcm9qZWN0LgotIyB1c2VzIFBST0pFQ1RfU09VUkNFX0RJUiBieSBkZWZhdWx0LgotbWFjcm8o
YW5kcm9pZF9uZGtfZ2RiX2VuYWJsZSkKLSAgICBpZihBTkRST0lEKQotICAgICAgICAjIGNyZWF0
ZSBjdXN0b20gdGFyZ2V0IHRoYXQgZGVwZW5kcyBvbiB0aGUgcmVhbCB0YXJnZXQgc28gaXQgZ2V0
cyBleGVjdXRlZCBhZnRlcndhcmRzCi0gICAgICAgIGFkZF9jdXN0b21fdGFyZ2V0KE5ES19HREIg
QUxMKQotICAgICAgICAKLSAgICAgICAgaWYoJHtBUkdDfSkKLSAgICAgICAgICAgIHNldChBTkRS
T0lEX1BST0pFQ1RfRElSICR7QVJHVjB9KQotICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgIHNl
dChBTkRST0lEX1BST0pFQ1RfRElSICR7UFJPSkVDVF9TT1VSQ0VfRElSfSkKLSAgICAgICAgZW5k
aWYoKQotCi0gICAgICAgIHNldChOREtfR0RCX1NPTElCX1BBVEggJHtBTkRST0lEX1BST0pFQ1Rf
RElSfS9vYmovbG9jYWwvJHtBTkRST0lEX05ES19BQklfTkFNRX0vKQotICAgICAgICBmaWxlKE1B
S0VfRElSRUNUT1JZICR7TkRLX0dEQl9TT0xJQl9QQVRIfSkKLSAgICAgICAgCi0gICAgICAgICMg
MS4gZ2VuZXJhdGUgZXNzZW50aWFsIEFuZHJvaWQgTWFrZWZpbGVzCi0gICAgICAgIGZpbGUoTUFL
RV9ESVJFQ1RPUlkgJHtBTkRST0lEX1BST0pFQ1RfRElSfS9qbmkpCi0gICAgICAgIGlmKE5PVCBF
WElTVFMgJHtBTkRST0lEX1BST0pFQ1RfRElSfS9qbmkvQW5kcm9pZC5taykKLSAgICAgICAgICAg
IGZpbGUoV1JJVEUgJHtBTkRST0lEX1BST0pFQ1RfRElSfS9qbmkvQW5kcm9pZC5tayAiQVBQX0FC
SSA6PSAke0FORFJPSURfTkRLX0FCSV9OQU1FfVxuIikKLSAgICAgICAgZW5kaWYoKQotICAgICAg
ICBpZihOT1QgRVhJU1RTICR7QU5EUk9JRF9QUk9KRUNUX0RJUn0vam5pL0FwcGxpY2F0aW9uLm1r
KQotICAgICAgICAgICAgZmlsZShXUklURSAke0FORFJPSURfUFJPSkVDVF9ESVJ9L2puaS9BcHBs
aWNhdGlvbi5tayAiQVBQX0FCSSA6PSAke0FORFJPSURfTkRLX0FCSV9OQU1FfVxuIikKLSAgICAg
ICAgZW5kaWYoKQotICAgIAotICAgICAgICAjIDIuIGdlbmVyYXRlIGdkYi5zZXR1cAotICAgICAg
ICBnZXRfZGlyZWN0b3J5X3Byb3BlcnR5KFBST0pFQ1RfSU5DTFVERVMgRElSRUNUT1JZICR7UFJP
SkVDVF9TT1VSQ0VfRElSfSBJTkNMVURFX0RJUkVDVE9SSUVTKQotICAgICAgICBzdHJpbmcoUkVH
RVggUkVQTEFDRSAiOyIgIiAiIFBST0pFQ1RfSU5DTFVERVMgIiR7UFJPSkVDVF9JTkNMVURFU30i
KQotICAgICAgICBmaWxlKFdSSVRFICR7TElCUkFSWV9PVVRQVVRfUEFUSH0vZ2RiLnNldHVwICJz
ZXQgc29saWItc2VhcmNoLXBhdGggJHtOREtfR0RCX1NPTElCX1BBVEh9XG4iKQotICAgICAgICBm
aWxlKEFQUEVORCAke0xJQlJBUllfT1VUUFVUX1BBVEh9L2dkYi5zZXR1cCAiZGlyZWN0b3J5ICR7
UFJPSkVDVF9JTkNMVURFU31cbiIpCi0gICAgCi0gICAgICAgICMgMy4gY29weSBnZGJzZXJ2ZXIg
ZXhlY3V0YWJsZQotICAgICAgICBmaWxlKENPUFkgJHtBTkRST0lEX05ES30vcHJlYnVpbHQvYW5k
cm9pZC0ke0FORFJPSURfQVJDSF9OQU1FfS9nZGJzZXJ2ZXIvZ2Ric2VydmVyIERFU1RJTkFUSU9O
ICR7TElCUkFSWV9PVVRQVVRfUEFUSH0pCi0gICAgZW5kaWYoKQotZW5kbWFjcm8oKQotCi0jIHJl
Z2lzdGVyIGEgdGFyZ2V0IGZvciByZW1vdGUgZGVidWdnaW5nCi0jIGNvcGllcyB0aGUgZGVidWcg
dmVyc2lvbiB0byBOREtfR0RCX1NPTElCX1BBVEggdGhlbiBzdHJpcHMgc3ltYm9scyBvZiBvcmln
aW5hbAotbWFjcm8oYW5kcm9pZF9uZGtfZ2RiX2RlYnVnZ2FibGUgVEFSR0VUX05BTUUpCi0gICAg
aWYoQU5EUk9JRCkKLSAgICAgICAgZ2V0X3Byb3BlcnR5KFRBUkdFVF9MT0NBVElPTiBUQVJHRVQg
JHtUQVJHRVRfTkFNRX0gUFJPUEVSVFkgTE9DQVRJT04pCi0gICAgICAgIAotICAgICAgICAjIGNy
ZWF0ZSBjdXN0b20gdGFyZ2V0IHRoYXQgZGVwZW5kcyBvbiB0aGUgcmVhbCB0YXJnZXQgc28gaXQg
Z2V0cyBleGVjdXRlZCBhZnRlcndhcmRzCi0gICAgICAgIGFkZF9kZXBlbmRlbmNpZXMoTkRLX0dE
QiAke1RBUkdFVF9OQU1FfSkKLSAgICAKLSAgICAgICAgIyA0LiBjb3B5IGxpYiB0byBvYmoKLSAg
ICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBOREtfR0RCIFBPU1RfQlVJTEQgQ09NTUFO
RCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHlfaWZfZGlmZmVyZW50ICR7VEFSR0VUX0xPQ0FUSU9O
fSAke05ES19HREJfU09MSUJfUEFUSH0pCi0gICAgCi0gICAgICAgICMgNS4gc3RyaXAgc3ltYm9s
cwotICAgICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIE5ES19HREIgUE9TVF9CVUlMRCBD
T01NQU5EICR7Q01BS0VfU1RSSVB9ICR7VEFSR0VUX0xPQ0FUSU9OfSkKLSAgICBlbmRpZigpCi1l
bmRtYWNybygpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9BbmRyb2lkTmRr
TW9kdWxlcy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFr
ZS9BbmRyb2lkTmRrTW9kdWxlcy5jbWFrZQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJk
X3BhcnR5L2FuZHJvaWQtY21ha2UvQW5kcm9pZE5ka01vZHVsZXMuY21ha2UJKG5vbmV4aXN0ZW50
KQpAQCAtMSw1OCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNCwgUGF2ZWwgUm9qdGJlcmcK
LSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgotIwotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0jIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSMg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbgotIyBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJp
Z2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0jIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTICJBUyBJUyIKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0jIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFCi0jIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tYWNybyhhbmRy
b2lkX25ka19pbXBvcnRfbW9kdWxlX2NwdWZlYXR1cmVzKQotICAgIGlmKEFORFJPSUQpCi0gICAg
ICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtBTkRST0lEX05ES30vc291cmNlcy9hbmRyb2lkL2Nw
dWZlYXR1cmVzKQotICAgICAgICBhZGRfbGlicmFyeShjcHVmZWF0dXJlcyAke0FORFJPSURfTkRL
fS9zb3VyY2VzL2FuZHJvaWQvY3B1ZmVhdHVyZXMvY3B1LWZlYXR1cmVzLmMpCi0gICAgICAgIHRh
cmdldF9saW5rX2xpYnJhcmllcyhjcHVmZWF0dXJlcyBkbCkKLSAgICBlbmRpZigpCi1lbmRtYWNy
bygpCi0KLW1hY3JvKGFuZHJvaWRfbmRrX2ltcG9ydF9tb2R1bGVfbmF0aXZlX2FwcF9nbHVlKQot
ICAgIGlmKEFORFJPSUQpCi0gICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtBTkRST0lEX05E
S30vc291cmNlcy9hbmRyb2lkL25hdGl2ZV9hcHBfZ2x1ZSkKLSAgICAgICAgYWRkX2xpYnJhcnko
bmF0aXZlX2FwcF9nbHVlICR7QU5EUk9JRF9OREt9L3NvdXJjZXMvYW5kcm9pZC9uYXRpdmVfYXBw
X2dsdWUvYW5kcm9pZF9uYXRpdmVfYXBwX2dsdWUuYykKLSAgICAgICAgdGFyZ2V0X2xpbmtfbGli
cmFyaWVzKG5hdGl2ZV9hcHBfZ2x1ZSBsb2cpCi0gICAgZW5kaWYoKQotZW5kbWFjcm8oKQotCi1t
YWNybyhhbmRyb2lkX25ka19pbXBvcnRfbW9kdWxlX25ka19oZWxwZXIpCi0gICAgaWYoQU5EUk9J
RCkKLSAgICAgICAgYW5kcm9pZF9uZGtfaW1wb3J0X21vZHVsZV9jcHVmZWF0dXJlcygpCi0gICAg
ICAgIGFuZHJvaWRfbmRrX2ltcG9ydF9tb2R1bGVfbmF0aXZlX2FwcF9nbHVlKCkKLSAgICAgICAg
Ci0gICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtBTkRST0lEX05ES30vc291cmNlcy9hbmRy
b2lkL25ka19oZWxwZXIpCi0gICAgICAgIGZpbGUoR0xPQiBfTkRLX0hFTFBFUl9TUkNTICR7QU5E
Uk9JRF9OREt9L3NvdXJjZXMvYW5kcm9pZC9uZGtfaGVscGVyLyouY3BwICR7QU5EUk9JRF9OREt9
L3NvdXJjZXMvYW5kcm9pZC9uZGtfaGVscGVyL2dsM3N0dWIuYykKLSAgICAgICAgYWRkX2xpYnJh
cnkobmRrX2hlbHBlciAke19OREtfSEVMUEVSX1NSQ1N9KQotICAgICAgICB0YXJnZXRfbGlua19s
aWJyYXJpZXMobmRrX2hlbHBlciBsb2cgYW5kcm9pZCBFR0wgR0xFU3YyIGNwdWZlYXR1cmVzIG5h
dGl2ZV9hcHBfZ2x1ZSkKLSAgICAgICAgCi0gICAgICAgIHVuc2V0KF9OREtfSEVMUEVSX1NSQ1Mp
Ci0gICAgZW5kaWYoKQotZW5kbWFjcm8oKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5n
c3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL0xJQ0VOU0UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wv
c3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2UvTElDRU5TRQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdz
c2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2UvTElDRU5TRQkobm9uZXhpc3RlbnQpCkBA
IC0xLDMwICswLDAgQEAKLUNvcHlyaWdodCAoYykgMjAxMC0yMDExLCBFdGhhbiBSdWJsZWUKLUNv
cHlyaWdodCAoYykgMjAxMS0yMDE0LCBBbmRyZXkgS2FtYWV2Ci1Db3B5cmlnaHQgKGMpIDIwMTQs
IFBhdmVsIFJvanRiZXJnCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgotCi0xLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsCi0gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0zLiAgTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMKLSAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi1BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkv
YW5kcm9pZC1jbWFrZS9NRVRBREFUQQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5k
cm9pZC1jbWFrZS9NRVRBREFUQQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5
L2FuZHJvaWQtY21ha2UvTUVUQURBVEEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNSArMCwwIEBACi1u
YW1lOiAiYW5kcm9pZC1jbWFrZSIKLWRlc2NyaXB0aW9uOgotICAgICJhbmRyb2lkLWNtYWtlIGlz
IGEgY29sbGVjdGlvbiBvZiBDTWFrZSBzY3JpcHRzIGZvciBidWlsZGluZyBhZ2FpbnN0IHRoZSAi
Ci0gICAgIkFuZHJvaWQgTkRLLiIKLQotdGhpcmRfcGFydHkgewotICB1cmwgewotICAgIHR5cGU6
IEhPTUVQQUdFCi0gICAgdmFsdWU6ICJodHRwczovL2dpdGh1Yi5jb20vdGFrYS1uby1tZS9hbmRy
b2lkLWNtYWtlLyIKLSAgfQotICB2ZXJzaW9uOiAiNTU2Y2MxNDI5NmMyMjZmNzUzYTM3NzhkOTlk
OGI2MDc3OGI3ZGY0ZiIKLSAgbGFzdF91cGdyYWRlX2RhdGUgeyB5ZWFyOiAyMDE2IG1vbnRoOiA2
IGRheTogMiB9Ci0KLSAgbG9jYWxfbW9kaWZpY2F0aW9uczogIkxJQ0VOU0UgZmlsZSBoYXMgYmVl
biBjcmVhdGVkIGZvciBjb21wbGlhbmNlIHB1cnBvc2VzLiBOb3QgaW5jbHVkZWQgaW4gb3JpZ2lu
YWwgZGlzdHJpYnV0aW9uLiIKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtl
L1JFQURNRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9S
RUFETUUubWQJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNt
YWtlL1JFQURNRS5tZAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0MCArMCwwIEBACi0jIGFuZHJvaWQt
Y21ha2UKLQotQ01ha2UgaXMgZ3JlYXQsIGFuZCBzbyBpcyBBbmRyb2lkLiBUaGlzIGlzIGEgY29s
bGVjdGlvbiBvZiBDTWFrZSBzY3JpcHRzIHRoYXQgbWF5IGJlIHVzZWZ1bCB0byB0aGUgQW5kcm9p
ZCBOREsgY29tbXVuaXR5LiBJdCBpcyBiYXNlZCBvbiBleHBlcmllbmNlIGZyb20gcG9ydGluZyBP
cGVuQ1YgbGlicmFyeSB0byBBbmRyb2lkOiBodHRwOi8vb3BlbmN2Lm9yZy9wbGF0Zm9ybXMvYW5k
cm9pZC5odG1sCi0KLU1haW4gZ29hbCBpcyB0byBzaGFyZSB0aGVzZSBzY3JpcHRzIHNvIHRoYXQg
ZGV2cyB0aGF0IHVzZSBDTWFrZSBhcyB0aGVpciBidWlsZCBzeXN0ZW0gbWF5IGVhc2lseSBjb21w
aWxlIG5hdGl2ZSBjb2RlIGZvciBBbmRyb2lkLgotCi0jIyBUTDtEUgotCi0gICAgY21ha2UgLURD
TUFLRV9UT09MQ0hBSU5fRklMRT1hbmRyb2lkLnRvb2xjaGFpbi5jbWFrZSBcCi0gICAgICAgICAg
LURBTkRST0lEX05ESz08bmRrX3BhdGg+ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgLURBTkRST0lEX0FCST0iYXJtZWFiaS12N2Egd2l0aCBORU9OIiAgICAgICAgICBcCi0g
ICAgICAgICAgPHNvdXJjZV9wYXRoPgotICAgIGNtYWtlIC0tYnVpbGQgLgotCi1PbmUtbGluZXI6
Ci0KLSAgICBjbWFrZSAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPWFuZHJvaWQudG9vbGNoYWluLmNt
YWtlIC1EQU5EUk9JRF9OREs9PG5ka19wYXRoPiAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSAt
REFORFJPSURfQUJJPSJhcm1lYWJpLXY3YSB3aXRoIE5FT04iIDxzb3VyY2VfcGF0aD4gJiYgY21h
a2UgLS1idWlsZCAuCi0KLV9hbmRyb2lkLWNtYWtlXyB3aWxsIHNlYXJjaCBmb3IgeW91ciBOREsg
aW5zdGFsbCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgotCi0xLiBWYWx1ZSBvZiBgQU5EUk9JRF9O
REtgIENNYWtlIHZhcmlhYmxlOwotMS4gVmFsdWUgb2YgYEFORFJPSURfTkRLYCBlbnZpcm9ubWVu
dCB2YXJpYWJsZTsKLTEuIFNlYXJjaCB1bmRlciBwYXRocyBmcm9tIGBBTkRST0lEX05ES19TRUFS
Q0hfUEFUSFNgIENNYWtlIHZhcmlhYmxlOwotMS4gU2VhcmNoIHBsYXRmb3JtIHNwZWNpZmljIGxv
Y2F0aW9ucyAoaG9tZSBmb2xkZXIsIFdpbmRvd3MgIlByb2dyYW0gRmlsZXMiLCBldGMpLgotCi1T
byBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIE5ESyBhcyBgfi9hbmRyb2lkLW5kay1yMTBkYCB0
aGVuIF9hbmRyb2lkLWNtYWtlXyB3aWxsIGxvY2F0ZSBpdCBhdXRvbWF0aWNhbGx5LgotCi0jIyBH
ZXR0aW5nIHN0YXJ0ZWQKLQotVG8gYnVpbGQgYSBjbWFrZS1iYXNlZCBDL0MrKyBwcm9qZWN0IGZv
ciBBbmRyb2lkIHlvdSBuZWVkOgotCi0qIEFuZHJvaWQgTkRLICg+PSByNSkgaHR0cDovL2RldmVs
b3Blci5hbmRyb2lkLmNvbS90b29scy9zZGsvbmRrL2luZGV4Lmh0bWwKLSogQ01ha2UgKD49IHYy
LjYuMywgPj0gdjIuOC45IHJlY29tbWVuZGVkKSBodHRwOi8vd3d3LmNtYWtlLm9yZy9kb3dubG9h
ZAotCi1UaGUgX2FuZHJvaWQtY21ha2VfIGlzIGFsc28gY2FwYWJsZSB0byBidWlsZCB3aXRoIE5E
SyBmcm9tIEFPU1Agb3IgTGluYXJvIEFuZHJvaWQgc291cmNlIHRyZWUsIGJ1dCB5b3UgbWF5IGJl
IHJlcXVpcmVkIHRvIG1hbnVhbGx5IHNwZWNpZnkgcGF0aCB0byBgbGlibWAgYmluYXJ5IHRvIGxp
bmsgd2l0aC4KLQotIyMgRGlmZmVyZW5jZSBmcm9tIHRyYWRpdGlvbmFsIENNYWtlCi0KLUZvbG93
aW5nIHRoZSBfbmRrLWJ1aWxkXyB0aGUgX2FuZHJvaWQtY21ha2VfIHN1cHBvcnRzICoqb25seSB0
d28gYnVpbGQgdGFyZ2V0cyoqOgotCi0qIGAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZWAKLSog
YC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1Z2AKLQotU28gZG9uJ3QgZXZlbiB0cnkgb3RoZXIgdGFy
Z2V0cyB0aGF0IGNhbiBiZSBmb3VuZCBpbiBDTWFrZSBkb2N1bWVudGF0aW9uIGFuZCBkb24ndCBm
b3JnZXQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGBSZWxlYXNlYCBvciBgRGVidWdgIGJlY2F1c2Ug
Q01ha2UgYnVpbGRzIHdpdGhvdXQgYSBidWlsZCBjb25maWd1cmF0aW9uIGJ5IGRlZmF1bHQuCi0K
LSMjIERpZmZlcmVuY2UgZnJvbSBfbmRrLWJ1aWxkXwotCi0qIExhdGVzdCBHQ0MgYXZhaWxhYmxl
IGluIE5ESyBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGNvbXBpbGVyOwotKiBgUmVsZWFzZWAgYnVp
bGRzIHdpdGggYC1PM2AgaW5zdGVhZCBvZiBgLU9zYDsKLSogYFJlbGVhc2VgIGJ1aWxkcyB3aXRo
b3V0IGRlYnVnIGluZm8gKHdpdGhvdXQgYC1nYCkgKGJlY2F1c2UgX25kay1idWlsZF8gYWx3YXlz
IGNyZWF0ZXMgYSBzdHJpcHBlZCB2ZXJzaW9uIGJ1dCBjbWFrZSBkZWxheXMgdGhpcyBmb3IgYGlu
c3RhbGwvc3RyaXBgIHRhcmdldCk7Ci0qIGAtZnNpZ25lZC1jaGFyYCBpcyBhZGRlZCB0byBjb21w
aWxlciBmbGFncyB0byBtYWtlIGBjaGFyYCBzaWduZWQgYnkgZGVmYXVsdCBhcyBpdCBpcyBvbiB4
ODYveDg2XzY0OwotKiBHQ0MncyBzdGFjayBwcm90ZWN0b3IgaXMgbm90IHVzZWQgbmVpdGhlciBp
biBgRGVidWdgIG5vciBgUmVsZWFzZWAgY29uZmlndXJhdGlvbnM7Ci0qIE5vIGJ1aWxkcyBmb3Ig
bXVsdGlwbGUgcGxhdGZvcm1zIChlLmcuIGJ1aWxkaW5nIGZvciBib3RoIGFybSBhbmQgeDg2IHJl
cXVpcmUgdG8gcnVuIGNtYWtlIHR3aWNlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMpOwotKiBO
byBmaWxlIGxldmVsIE5lb24gdmlhIGAubmVvbmAgc3VmZml4OwotCi1UaGUgZm9sbG93aW5nIGZl
YXR1cmVzIG9mIF9uZGstYnVpbGRfIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBfYW5kcm9pZC1j
bWFrZV8geWV0OgotCi0qIGBhcm1lYWJpLXY3YS1oYXJkYCBBQkkKLSogYGxpYmMrK19zdGF0aWNg
L2BsaWJjKytfc2hhcmVkYCBTVEwgcnVudGltZQotCi0jIyBCYXNpYyBvcHRpb25zCi0KLVNpbWls
YXJseSB0byB0aGUgTkRLIGJ1aWxkIHN5c3RlbSBfYW5kcm9pZC1jbWFrZV8gYWxsb3dzIHRvIHNl
bGVjdCBiZXR3ZWVuIHNldmVyYWwgY29tcGlsZXIgdG9vbGNoYWlucyBhbmQgdGFyZ2V0IHBsYXRm
b3Jtcy4gTW9zdCBvZiB0aGUgb3B0aW9ucyBjYW4gYmUgc2V0IGVpdGhlciBhcyBjbWFrZSBhcmd1
bWVudHM6IGAtRDxOQU1FPj08VkFMVUU+YCBvciBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6Ci0K
LSogKipBTkRST0lEX05ESyoqIC0gcGF0aCB0byB0aGUgQW5kcm9pZCBOREsuIElmIG5vdCBzZXQg
dGhlbiBfYW5kcm9pZC1jbWFrZV8gd2lsbCBzZWFyY2ggZm9yIHRoZSBtb3N0IHJlY2VudCB2ZXJz
aW9uIG9mIHN1cHBvcnRlZCBOREsgaW4gY29tbW9ubHkgdXNlZCBsb2NhdGlvbnM7Ci0qICoqQU5E
Uk9JRF9BQkkqKiAtIHNwZWNpZmllcyB0aGUgdGFyZ2V0IEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRl
cmZhY2UgKEFCSSkuIFRoaXMgb3B0aW9uIG5lYXJseSBtYXRjaGVzIHRvIHRoZSBBUFBfQUJJIHZh
cmlhYmxlIHVzZWQgYnkgbmRrLWJ1aWxkIHRvb2wgZnJvbSBBbmRyb2lkIE5ESy4gSWYgbm90IHNw
ZWNpZmllZCB0aGVuIHNldCB0byBgYXJtZWFiaS12N2FgLiBQb3NzaWJsZSB0YXJnZXQgbmFtZXMg
YXJlOgotICAgICogYGFybWVhYmlgIC0gQVJNdjVURSBiYXNlZCBDUFUgd2l0aCBzb2Z0d2FyZSBm
bG9hdGluZyBwb2ludCBvcGVyYXRpb25zOwotICAgICogKipgYXJtZWFiaS12N2FgKiogLSBBUk12
NyBiYXNlZCBkZXZpY2VzIHdpdGggaGFyZHdhcmUgRlBVIGluc3RydWN0aW9ucyAoVkZQdjNfRDE2
KTsKLSAgICAqIGBhcm1lYWJpLXY3YSB3aXRoIE5FT05gIC0gc2FtZSBhcyBhcm1lYWJpLXY3YSwg
YnV0IHNldHMgTkVPTiBhcyBmbG9hdGluZy1wb2ludCB1bml0OwotICAgICogYGFybWVhYmktdjdh
IHdpdGggVkZQVjNgIC0gc2FtZSBhcyBhcm1lYWJpLXY3YSwgYnV0IHNldHMgVkZQdjNfRDMyIGFz
IGZsb2F0aW5nLXBvaW50IHVuaXQ7Ci0gICAgKiBgYXJtZWFiaS12NiB3aXRoIFZGUGAgLSB0dW5l
ZCBmb3IgQVJNdjYgcHJvY2Vzc29ycyBoYXZpbmcgVkZQOwotICAgICogYHg4NmAgLSBJQS0zMiBp
bnN0cnVjdGlvbiBzZXQKLSAgICAqIGBtaXBzYCAtIE1JUFMzMiBpbnN0cnVjdGlvbiBzZXQKLSAg
ICAqIGBhcm02NC12OGFgIC0gQVJNdjggQUFyY2g2NCBpbnN0cnVjdGlvbiBzZXQgLSBvbmx5IGZv
ciBOREsgcjEwIGFuZCBuZXdlcgotICAgICogYHg4Nl82NGAgLSBJbnRlbDY0IGluc3RydWN0aW9u
IHNldCAocjEpIC0gb25seSBmb3IgTkRLIHIxMCBhbmQgbmV3ZXIKLSAgICAqIGBtaXBzNjRgIC0g
TUlQUzY0IGluc3RydWN0aW9uIHNldCAocjYpIC0gb25seSBmb3IgTkRLIHIxMCBhbmQgbmV3ZXIK
LSogKipBTkRST0lEX05BVElWRV9BUElfTEVWRUwqKiAtIGxldmVsIG9mIGFuZHJvaWQgQVBJIHRv
IGJ1aWxkIGZvci4gQ2FuIGJlIHNldCBlaXRoZXIgdG8gZnVsbCBuYW1lIChleGFtcGxlOiBgYW5k
cm9pZC04YCkgb3IgYSBudW1lcmljIHZhbHVlIChleGFtcGxlOiBgMTdgKS4gVGhlIGRlZmF1bHQg
QVBJIGxldmVsIGRlcGVuZHMgb24gdGhlIHRhcmdldCBBQkk6Ci0gICAgKiBgYW5kcm9pZC04YCBm
b3IgQVJNOwotICAgICogYGFuZHJvaWQtOWAgZm9yIHg4NiBhbmQgTUlQUzsKLSAgICAqIGBhbmRy
b2lkLTIxYCBmb3IgNjQtYml0IEFCSXMuCi0KLSAgICBCdWlsZGluZyBmb3IgYGFuZHJvaWQtTGAg
aXMgcG9zc2libGUgb25seSB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgc2VsZWN0ZWQuCi0qICoqQU5E
Uk9JRF9UT09MQ0hBSU5fTkFNRSoqIC0gdGhlIG5hbWUgb2YgY29tcGlsZXIgdG9vbGNoYWluIHRv
IGJlIHVzZWQuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzZWxlY3QgYmV0d2VlbiBkaWZmZXJlbnQg
R0NDIGFuZCBDbGFuZyB2ZXJzaW9ucy4gVGhlIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGRlcGVu
ZHMgb24gdGhlIE5ESyB2ZXJzaW9uIGFuZCB3aWxsIGJlIHByaW50ZWQgYnkgdG9vbGNoYWluIGZp
bGUgaWYgYW4gaW52YWxpZCB2YWx1ZSBpcyBzZXQuIEJ5IGRlZmF1bHQgX2FuZHJvaWQtY21ha2Vf
IHNlbGVjdHMgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgR0NDIHdoaWNoIGNhbiBidWlsZCBm
b3Igc3BlY2lmaWVkIGBBTkRST0lEX0FCSWAuCi0KLSAgICBFeGFtcGxlIHZhbHVlcyBhcmU6Ci0g
ICAgKiBgYWFyY2g2NC1saW51eC1hbmRyb2lkLTQuOWAKLSAgICAqIGBhYXJjaDY0LWxpbnV4LWFu
ZHJvaWQtY2xhbmczLjVgCi0gICAgKiBgYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOGAKLSAgICAq
IGBhcm0tbGludXgtYW5kcm9pZGVhYmktNC45YAotICAgICogYGFybS1saW51eC1hbmRyb2lkZWFi
aS1jbGFuZzMuNWAKLSAgICAqIGBtaXBzNjRlbC1saW51eC1hbmRyb2lkLTQuOWAKLSAgICAqIGBt
aXBzZWwtbGludXgtYW5kcm9pZC00LjhgCi0gICAgKiBgeDg2LTQuOWAKLSAgICAqIGB4ODZfNjQt
NC45YAotICAgICogZXRjLgotKiAqKkFORFJPSURfU1RMKiogLSB0aGUgbmFtZSBvZiBDKysgcnVu
dGltZSB0byB1c2UuIFRoZSBkZWZhdWx0IGlzIGBnbnVzdGxfc3RhdGljYC4KLSAgICAqIGBub25l
YCAtIGRvIG5vdCBjb25maWd1cmUgdGhlIHJ1bnRpbWUuCi0gICAgKiBgc3lzdGVtYCAtIHVzZSB0
aGUgZGVmYXVsdCBtaW5pbWFsIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJ5LgotICAgICAgICAq
IEltcGxpZXMgYC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNgLgotICAgICogYHN5c3RlbV9yZWAg
LSB1c2UgdGhlIGRlZmF1bHQgbWluaW1hbCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyeS4KLSAg
ICAgICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZleGNlcHRpb25zYC4KLSAgICAqIGBnYWJpKytfc3Rh
dGljYCAtIHVzZSB0aGUgR0FiaSsrIHJ1bnRpbWUgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSAgICAg
ICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZuby1leGNlcHRpb25zYC4KLSAgICAgICAgKiBBdmFpbGFi
bGUgZm9yIE5ESyByNyBhbmQgbmV3ZXIuCi0gICAgKiBgZ2FiaSsrX3NoYXJlZGAgLSB1c2UgdGhl
IEdBYmkrKyBydW50aW1lIGFzIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICogSW1wbGllcyBg
LWZydHRpIC1mbm8tZXhjZXB0aW9uc2AuCi0gICAgICAgICogQXZhaWxhYmxlIGZvciBOREsgcjcg
YW5kIG5ld2VyLgotICAgICogYHN0bHBvcnRfc3RhdGljYCAtIHVzZSB0aGUgU1RMcG9ydCBydW50
aW1lIGFzIGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICAgICogSW1wbGllcyBgLWZuby1ydHRpIC1m
bm8tZXhjZXB0aW9uc2AgZm9yIE5ESyBiZWZvcmUgcjcuCi0gICAgICAgICogSW1wbGllcyBgLWZy
dHRpIC1mbm8tZXhjZXB0aW9uc2AgZm9yIE5ESyByNyBhbmQgbmV3ZXIuCi0gICAgKiBgc3RscG9y
dF9zaGFyZWRgIC0gdXNlIHRoZSBTVExwb3J0IHJ1bnRpbWUgYXMgYSBzaGFyZWQgbGlicmFyeS4K
LSAgICAgICAgKiBJbXBsaWVzIGAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zYCBmb3IgTkRLIGJl
Zm9yZSByNy4KLSAgICAgICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZuby1leGNlcHRpb25zYCBmb3Ig
TkRLIHI3IGFuZCBuZXdlci4KLSAgICAqICoqYGdudXN0bF9zdGF0aWNgKiogLSB1c2UgdGhlIEdO
VSBTVEwgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSAgICAgICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZl
eGNlcHRpb25zYC4KLSAgICAqIGBnbnVzdGxfc2hhcmVkYCAtIHVzZSB0aGUgR05VIFNUTCBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotICAgICAgICAqIEltcGxpZXMgYC1mcnR0aSAtZm5vLWV4Y2VwdGlv
bnNgLgotICAgICAgICAqIEF2YWlsYWJsZSBmb3IgTkRLIHI3YiBhbmQgbmV3ZXIuCi0gICAgICAg
ICogU2lsZW50bHkgZGVncmFkZXMgdG8gYGdudXN0bF9zdGF0aWNgIGlmIG5vdCBhdmFpbGFibGUu
Ci0qICoqTkRLX0NDQUNIRSoqIC0gcGF0aCB0byBgY2NhY2hlYCBleGVjdXRhYmxlLiBJZiBub3Qg
c2V0IHRoZW4gaW5pdGlhbGl6ZWQgZnJvbSBgTkRLX0NDQUNIRWAgZW52aXJvbm1lbnQgdmFyaWFi
bGUuCi0KLSMjIEFkdmFuY2VkIF9hbmRyb2lkLWNtYWtlXyBvcHRpb25zCi0KLU5vcm1hbGx5IF9h
bmRyb2lkLWNtYWtlXyB1c2VycyBhcmUgbm90IHN1cHBvc2VkIHRvIHRvdWNoIHRoZXNlIHZhcmlh
YmxlcyBidXQgdGhleSBtaWdodCBiZSB1c2VmdWwgdG8gd29ya2Fyb3VuZCBzb21lIGJ1aWxkIGlz
c3VlczoKLQotKiAqKkFORFJPSURfRk9SQ0VfQVJNX0JVSUxEKiogPSBgT0ZGYCAtIGdlbmVyYXRl
IDMyLWJpdCBBUk0gaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YgVGh1bWIuIEFwcGxpY2FibGUgb25s
eSBmb3IgYXJtIEFCSXMgYW5kIGlzIGZvcmNlZCB0byBiZSBgT05gIGZvciBgYXJtZWFiaS12NiB3
aXRoIFZGUGA7Ci0qICoqQU5EUk9JRF9OT19VTkRFRklORUQqKiA9IGBPTmAgLSBzaG93IGFsbCB1
bmRlZmluZWQgc3ltYm9scyBhcyBsaW5rZXIgZXJyb3JzOwotKiAqKkFORFJPSURfU09fVU5ERUZJ
TkVEKiogPSBgT0ZGYCAtIGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzIGluIHNoYXJlZCBsaWJyYXJp
ZXM7Ci0gICAgKiBhY3R1YWxseSBpdCBpcyB0dXJuZWQgYE9OYCBieSBkZWZhdWx0IGZvciBOREsg
b2xkZXIgdGhhbiBgcjdgCi0qICoqQU5EUk9JRF9TVExfRk9SQ0VfRkVBVFVSRVMqKiA9IGBPTmAg
LSBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBydHRpIGFuZCBleGNlcHRpb25zIHN1cHBvcnQgYmFz
ZWQgb24gQysrIHJ1bnRpbWU7Ci0qICoqQU5EUk9JRF9OREtfTEFZT1VUKiogPSBgUkVMRUFTRWAg
LSBpbm5lciBsYXlvdXQgb2YgQW5kcm9pZCBOREssIHNob3VsZCBiZSBkZXRlY3RlZCBhdXRvbWF0
aWNhbGx5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgotICAgICogYFJFTEVBU0VgIC0gcHVibGljIHJl
bGVhc2VzIGZyb20gR29vZ2xlOwotICAgICogYExJTkFST2AgLSBOREsgZnJvbSBMaW5hcm8gcHJv
amVjdDsKLSAgICAqIGBBTkRST0lEYCAtIE5ESyBmcm9tIEFPU1AuCi0qICoqQU5EUk9JRF9GVU5D
VElPTl9MRVZFTF9MSU5LSU5HKiogPSBgT05gIC0gZW5hYmxlcyBzYXBhcmF0ZSBwdXR0aW5nIGVh
Y2ggZnVuY3Rpb24gYW5kIGRhdGEgaXRlbXMgaW50byBzZXBhcmF0ZSBzZWN0aW9ucyBhbmQgZW5h
YmxlIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiB1bnVzZWQgaW5wdXQgc2VjdGlvbnMgYXQgbGluayB0
aW1lIChgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLVdsLC0tZ2Mtc2VjdGlv
bnNgKTsKLSogKipBTkRST0lEX0dPTERfTElOS0VSKiogPSBgT05gIC0gdXNlIGdvbGQgbGlua2Vy
IHdpdGggR0NDIDQuNiBmb3IgTkRLIHI4YiBhbmQgbmV3ZXIgKG9ubHkgZm9yIEFSTSBhbmQgeDg2
KTsKLSogKipBTkRST0lEX05PRVhFQ1NUQUNLKiogPSBgT05gIC0gZW5hYmxlcyBvciBkaXNhYmxl
cyBzdGFjayBleGVjdXRpb24gcHJvdGVjdGlvbiBjb2RlIChgLVdsLC16LG5vZXhlY3N0YWNrYCk7
Ci0qICoqQU5EUk9JRF9SRUxSTyoqID0gYE9OYCAtIEVuYWJsZXMgUkVMUk8gLSBhIG1lbW9yeSBj
b3JydXB0aW9uIG1pdGlnYXRpb24gdGVjaG5pcXVlIChgLVdsLC16LHJlbHJvIC1XbCwteixub3dg
KTsKLSogKipBTkRST0lEX0xJQk1fUEFUSCoqIC0gcGF0aCB0byBgbGlibS5zb2AgKHNldCB0byBz
b21ldGhpbmcgbGlrZSBgJChUT1ApL291dC90YXJnZXQvcHJvZHVjdC88cHJvZHVjdF9uYW1lPi9v
YmovbGliL2xpYm0uc29gKSB0byB3b3JrYXJvdW5kIHVucmVzb2x2ZWQgYHNpbmNvc2AuCi0KLSMj
IEZpbmUtdHVuaW5nIGBDTWFrZUxpc3RzLnR4dGAgZm9yIF9hbmRyb2lkLWNtYWtlXwotCi0jIyMg
UmVjb2duaXppbmcgQW5kcm9pZCBidWlsZAotCi1fYW5kcm9pZC1jbWFrZV8gZGVmaW5lcyBgQU5E
Uk9JRGAgQ01ha2UgdmFyaWFibGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYWRkIEFuZHJvaWQtc3Bl
Y2lmaWMgc3R1ZmY6Ci0KLSAgICBpZiAoQU5EUk9JRCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMg
IkhlbGxvIGZyb20gQW5kcm9pZCBidWlsZCEiKQotICAgIGVuZGlmKCkKLQotVGhlIHJlY29tbWVu
ZGVkIHdheSB0byBpZGVudGlmeSBBUk0vTUlQUy94ODYgYXJjaGl0ZWN0dXJlIGlzIGV4YW1pbmlu
ZyBgQ01BS0VfU1lTVEVNX1BST0NFU1NPUmAgd2hpY2ggaXMgc2V0IHRvIHRoZSBhcHByb3ByaWF0
ZSB2YWx1ZToKLQotKiBgYXJtdjV0ZWAgLSBmb3IgYGFybWVhYmlgIEFCSQotKiBgYXJtdjZgIC0g
Zm9yIGBhcm1lYWJpLXY2IHdpdGggVkZQYCBBQkkKLSogYGFybXY3LWFgIC0gZm9yIGBhcm1lYWJp
LXY3YWAsIGBhcm1lYWJpLXY3YSB3aXRoIFZGUFYzYCBhbmQgYGFybWVhYmktdjdhIHdpdGggTkVP
TmAgQUJJcwotKiBgYWFyY2g2NGAgLSBmb3IgYGFybTY0LXY4YWAgQUJJCi0qIGBpNjg2YCAtIGZv
ciBgeDg2YCBBQkkKLSogYHg4Nl82NGAgLSBmb3IgYHg4Nl82NGAgQUJJCi0qIGBtaXBzYCAtIGZv
ciBgbWlwc2AgQUJJCi0qIGBtaXBzNjRgIC0gZm9yIGBtaXBzNjRgIEFCSQotCi1PdGhlciB2YXJp
YWJsZXMgdGhhdCBhcmUgc2V0IGJ5IF9hbmRyb2lkLWNtYWtlXyBhbmQgY2FuIGJlIHVzZWQgZm9y
IHRoZSBmaW5lLWdyYWluZWQgYnVpbGQgY29uZmlndXJhdGlvbiBhcmU6Ci0KLSogYE5FT05gIC0g
c2V0IGlmIHRhcmdldCBBQkkgc3VwcG9ydHMgTmVvbjsKLSogYEFORFJPSURfTkFUSVZFX0FQSV9M
RVZFTGAgLSBuYXRpdmUgQW5kcm9pZCBBUEkgbGV2ZWwgd2UgYXJlIGJ1aWxkaW5nIGZvciAobm90
ZTogSmF2YSBwYXJ0IG9mIEFuZG9pZCBhcHBsaWNhdGlvbiBjYW4gYmUgYnVpbHQgZm9yIGFub3Ro
ZXIgQVBJIGxldmVsKQotKiBgQU5EUk9JRF9OREtfUkVMRUFTRWAgLSB2ZXJzaW9uIG9mIHRoZSBB
bmRyb2lkIE5ESwotKiBgQU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRWAgLSAid2luZG93cyIs
ICJsaW51eC14ODYiIG9yICJkYXJ3aW4teDg2IiBkZXBlbmRpbmcgb24gdGhlIGhvc3QgcGxhdGZv
cm0KLSogYEFORFJPSURfUlRUSWAgLSBzZXQgaWYgcnR0aSBpcyBlbmFibGVkIGJ5IHRoZSBydW50
aW1lCi0qIGBBTkRST0lEX0VYQ0VQVElPTlNgIC0gc2V0IGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJs
ZWQgYnkgdGhlIHJ1bnRpbWUKLQotIyMjIEZpbmRpbmcgcGFja2FnZXMKLQotV2hlbiBjcm9zc2Nv
bXBpbGluZyBDTWFrZSBgZmluZF8qYCBjb21tYW5kcyBhcmUgbm9ybWFsbHkgZXhwZWN0ZWQgdG8g
ZmluZCBsaWJyYXJpZXMgYW5kIHBhY2thZ2VzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBidWlsZCB0
YXJnZXQuIFNvIF9hbmRyb2lkLWNtYWtlXyBjb25maWd1cmVzIENNYWtlIHRvIHNlYXJjaCBpbiBB
bmRyb2lkLXNwZWNpZmljIHBhdGhzIG9ubHkgYW5kIGlnbm9yZSB5b3VyIGhvc3Qgc3lzdGVtIGxv
Y2F0aW9ucy4gU28KLQotICAgIGZpbmRfcGFja2FnZShaTElCKQotCi13aWxsIHN1cmVseSBmaW5k
IGxpYnouc28gd2l0aGluIHRoZSBBbmRyb2lkIE5ESy4KLQotSG93ZXZlciBzb21ldGltZXMgeW91
IG5lZWQgdG8gbG9jYXRlIGEgaG9zdCBwYWNrYWdlIGV2ZW4gd2hlbiBjcm9zcy1jb21waWxpbmcu
IEZvciBleGFtcGxlIHlvdSBjYW4gYmUgc2VhcmNoaW5nIGZvciB5b3VyIGRvY3VtZW50YXRpb24g
Z2VuZXJhdG9yLiBUaGUgX2FuZHJvaWQtY21ha2VfIHJlY29tbWVuZHMgeW91IHRvIHVzZSBgZmlu
ZF9ob3N0X3BhY2thZ2VgIGFuZCBgZmluZF9ob3N0X3Byb2dyYW1gIG1hY3JvIGRlZmluZWQgaW4g
dGhlIGBhbmRyb2lkLnRvb2xjaGFpbi5jbWFrZWA6Ci0KLSAgICBmaW5kX2hvc3RfcGFja2FnZShE
b3h5Z2VuKQotICAgIGZpbmRfaG9zdF9wcm9ncmFtKFBERkxBVEVYIHBkZmxhdGV4KQotCi1Ib3dl
dmVyIHRoaXMgd2lsbCBicmVhayByZWd1bGFyIGJ1aWxkcyBzbyBpbnN0ZWFkIG9mIHdyYXBwaW5n
IHBhY2thZ2Ugc2VhcmNoIGludG8gcGxhdGZvcm0tc3BlY2lmaWMgbG9naWMgeW91IGNhbiBjb3B5
IHRoZSBmb2xsb3dpbmcgc25pcHBldCBpbnRvIHlvdXIgcHJvamVjdCAocHV0IGl0IGFmdGVyIHlv
dXIgdG9wLWxldmVsIGBwcm9qZWN0KClgIGNvbW1hbmQpOgotCi0gICAgIyBTZWFyY2ggcGFja2Fn
ZXMgZm9yIGhvc3Qgc3lzdGVtIGluc3RlYWQgb2YgcGFja2FnZXMgZm9yIHRhcmdldCBzeXN0ZW0K
LSAgICAjIGluIGNhc2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24gdGhlc2UgbWFjcm8gc2hvdWxkIGJl
IGRlZmluZWQgYnkgdG9vbGNoYWluIGZpbGUKLSAgICBpZihOT1QgQ09NTUFORCBmaW5kX2hvc3Rf
cGFja2FnZSkKLSAgICAgIG1hY3JvKGZpbmRfaG9zdF9wYWNrYWdlKQotICAgICAgICBmaW5kX3Bh
Y2thZ2UoJHtBUkdOfSkKLSAgICAgIGVuZG1hY3JvKCkKLSAgICBlbmRpZigpCi0gICAgaWYoTk9U
IENPTU1BTkQgZmluZF9ob3N0X3Byb2dyYW0pCi0gICAgICBtYWNybyhmaW5kX2hvc3RfcHJvZ3Jh
bSkKLSAgICAgICAgZmluZF9wcm9ncmFtKCR7QVJHTn0pCi0gICAgICBlbmRtYWNybygpCi0gICAg
ZW5kaWYoKQotCi0jIyMgQ29tcGlsZXIgZmxhZ3MgcmVjeWNsaW5nCi0KLU1ha2Ugc3VyZSB0byBk
byB0aGUgZm9sbG93aW5nIGluIHlvdXIgc2NyaXB0czoKLQotICAgIHNldChDTUFLRV9DX0ZMQUdT
ICIke0NNQUtFX0NfRkxBR1N9ICR7bXlfY3h4X2ZsYWdzfSIpCi0gICAgc2V0KENNQUtFX0NYWF9G
TEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9ICR7bXlfY3h4X2ZsYWdzfSIpCi0KLVRoZSBmbGFncyB3
aWxsIGJlIHByZXBvcHVsYXRlZCB3aXRoIGNyaXRpY2FsIGZsYWdzLCBzbyBkb24ndCBsb29zZSB0
aGVtLiBBbHNvIGJlIGF3YXJlIHRoYXQgX2FuZHJvaWQtY21ha2VfIGFsc28gc2V0cyBjb25maWd1
cmF0aW9uLXNwZWNpZmljIGNvbXBpbGVyIGFuZCBsaW5rZXIgZmxhZ3MuCi0KLSMjIFRyb3VibGVz
aG9vdGluZwotCi0jIyMgQnVpbGRpbmcgb24gV2luZG93cwotCi1GaXJzdCBvZiBhbGwgYGN5Z3dp
bmAgYnVpbGRzIGFyZSAqKk5PVCBzdXBwb3J0ZWQqKiBhbmQgd2lsbCBub3QgYmUgc3VwcG9ydGVk
IGJ5IF9hbmRyb2lkLWNtYWtlXy4gVG8gYnVpbGQgbmF0aXZlbHkgb24gV2luZG93cyB5b3UgbmVl
ZCBhIHBvcnQgb2YgbWFrZSBidXQgSSByZWNvbW1lbmQgaHR0cDovL21hcnRpbmUuZ2l0aHViLmlv
L25pbmphLyBpbnN0ZWFkLgotCi1UbyBidWlsZCB3aXRoIE5pbmphIHlvdSBuZWVkOgotCi0qIEVu
c3VyZSB5b3UgYXJlIHVzaW5nIENNYWtlIG5ld2VyIHRoYW4gMi44Ljk7Ci0qIERvd25sb2FkIHRo
ZSBsYXRlc3QgTmluamEgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFydGluZS9uaW5qYS9yZWxl
YXNlczsKLSogUHV0IHRoZSBgbmluamEuZXhlYCBpbnRvIHlvdXIgUEFUSCAob3IgYWRkIHBhdGgg
dG8gYG5pbmphLmV4ZWAgdG8geW91ciBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlKTsKLSogUGFz
cyBgLUdOaW5qYWAgdG8gYGNtYWtlYCBhbG9uZ3NpZGUgd2l0aCBvdGhlciBhcmd1bWVudHMgKG9y
IGNob29zZSBOaW5qYSBnZW5lcmF0b3IgaW4gYGNtYWtlLWd1aWApLgotKiBFbmpveSB0aGUgZmFz
dCBuYXRpdmUgbXVsdGl0aHJlYWRlZCBidWlsZCA6KQotCi1CdXQgaWYgeW91IHN0aWxsIHdhbnQg
dG8gc3RpY2sgdG8gb2xkIG1ha2UgdGhlbjoKLQotKiBHZXQgYSBXaW5kb3dzIHBvcnQgb2YgR05V
IE1ha2U6Ci0gICAgKiBBbmRyb2lkIE5ESyByNyAoYW5kIG5ld2VyKSBhbHJlYWR5IGhhcyBgbWFr
ZS5leGVgIG9uIGJvYXJkOwotICAgICogYG1pbmd3LW1ha2VgIHNob3VsZCB3b3JrIGFzIGZpbmU7
Ci0gICAgKiBEb3dubG9hZCBzb21lIG90aGVyIHBvcnQuIEZvciBleGFtcGxlLCB0aGlzIG9uZTog
aHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC9wYWNrYWdlcy9tYWtlLmh0bS4KLSogQWRk
IHBhdGggdG8geW91ciBgbWFrZS5leGVgIHRvIHN5c3RlbSBQQVRIIG9yIGFsd2F5cyB1c2UgZnVs
bCBwYXRoOwotKiBQYXNzIGAtRyJNaW5HVyBNYWtlZmlsZXMiYCBhbmQgYC1EQ01BS0VfTUFLRV9Q
Uk9HUkFNPSI8ZnVsbC9wYXRoL3RvLz5tYWtlLmV4ZSJgCi0gICAgKiBJdCBtdXN0IGJlIGBNaW5H
VyBNYWtlZmlsZXNgIGFuZCBub3QgYFVuaXggTWFrZWZpbGVzYCBldmVuIGlmIHlvdXIgYG1ha2Uu
ZXhlYCBpcyBub3QgYSBNaW5HVydzIG1ha2UuCi0qIFJ1biBgbWFrZS5leGVgIG9yIGBjbWFrZSAt
LWJ1aWxkIC5gIGZvciBzaW5nbGUtdGhyZWFkZWQgYnVpbGQuCi0KLSMjIyBQcm9qZWN0cyB3aXRo
IGFzc2VtYmxlciBmaWxlcwotCi1UaGUgX2FuZHJvaWQtY21ha2VfIHNob3VsZCBjb3JyZWN0bHkg
aGFuZGxlIHByb2plY3RzIHdpdGggYXNzZW1ibGVyIHNvdXJjZXMgKGAqLnNgIG9yIGAqLlNgKS4g
QnV0IGlmIHlvdSBzdGlsbCBmYWNpbmcgcHJvYmxlbXMgd2l0aCBhc3NlbWJsZXIgdGhlbiB0cnkg
dG8gdXBncmFkZSB5b3VyIENNYWtlIHRvIHZlcnNpb24gbmV3ZXIgdGhhbiAyLjguNQotCi0jIyBD
b3B5aW5nCi0KLV9hbmRyb2lkLWNtYWtlXyBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMg
b2YgW0JTRCAzLUNsYXVzZSBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv
QlNELTMtQ2xhdXNlKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGly
ZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL2FuZHJvaWQudG9vbGNoYWluLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5n
c3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL2FuZHJvaWQudG9vbGNoYWluLmNtYWtl
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9hbmRy
b2lkLnRvb2xjaGFpbi5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDE2OTMgKzAsMCBAQAotIyBD
b3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgRXRoYW4gUnVibGVlCi0jIENvcHlyaWdodCAoYykgMjAx
MS0yMDE0LCBBbmRyZXkgS2FtYWV2Ci0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSMKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSMgICAg
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0jICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0jICAgICBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSMgICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCi0jIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
Ci0jIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotIyAgQW5kcm9pZCBDTWFrZSB0b29sY2hhaW4gZmlsZSwgZm9yIHVzZSB3aXRoIHRoZSBBbmRy
b2lkIE5ESyByNS1yMTBkCi0jICBSZXF1aXJlcyBjbWFrZSAyLjYuMyBvciBuZXdlciAoMi44Ljkg
b3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQpLgotIyAgU2VlIGhvbWUgcGFnZTogaHR0cHM6Ly9naXRo
dWIuY29tL3Rha2Etbm8tbWUvYW5kcm9pZC1jbWFrZQotIwotIyAgVXNhZ2UgTGludXg6Ci0jICAg
JCBleHBvcnQgQU5EUk9JRF9OREs9L2Fic29sdXRlL3BhdGgvdG8vdGhlL2FuZHJvaWQtbmRrCi0j
ICAgJCBta2RpciBidWlsZCAmJiBjZCBidWlsZAotIyAgICQgY21ha2UgLURDTUFLRV9UT09MQ0hB
SU5fRklMRT1wYXRoL3RvL3RoZS9hbmRyb2lkLnRvb2xjaGFpbi5jbWFrZSAuLgotIyAgICQgbWFr
ZSAtajgKLSMKLSMgIFVzYWdlIFdpbmRvd3M6Ci0jICAgICBZb3UgbmVlZCBuYXRpdmUgcG9ydCBv
ZiBtYWtlIHRvIGJ1aWxkIHlvdXIgcHJvamVjdC4KLSMgICAgIEFuZHJvaWQgTkRLIHI3IChhbmQg
bmV3ZXIpIGFscmVhZHkgaGFzIG1ha2UuZXhlIG9uIGJvYXJkLgotIyAgICAgRm9yIG9sZGVyIE5E
SyB5b3UgaGF2ZSB0byBpbnN0YWxsIGl0IHNlcGFyYXRlbHkuCi0jICAgICBGb3IgZXhhbXBsZSwg
dGhpcyBvbmU6IGh0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQvcGFja2FnZXMvbWFrZS5o
dG0KLSMKLSMgICAkIFNFVCBBTkRST0lEX05ESz1DOlxhYnNvbHV0ZVxwYXRoXHRvXHRoZVxhbmRy
b2lkLW5kawotIyAgICQgbWtkaXIgYnVpbGQgJiYgY2QgYnVpbGQKLSMgICAkIGNtYWtlLmV4ZSAt
RyJNaW5HVyBNYWtlZmlsZXMiCi0jICAgICAgIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9cGF0aFx0
b1x0aGVcYW5kcm9pZC50b29sY2hhaW4uY21ha2UKLSMgICAgICAgLURDTUFLRV9NQUtFX1BST0dS
QU09IiVBTkRST0lEX05ESyVccHJlYnVpbHRcd2luZG93c1xiaW5cbWFrZS5leGUiIC4uCi0jICAg
JCBjbWFrZS5leGUgLS1idWlsZCAuCi0jCi0jCi0jICBPcHRpb25zIChjYW4gYmUgc2V0IGFzIGNt
YWtlIHBhcmFtZXRlcnM6IC1EPG9wdGlvbl9uYW1lPj08dmFsdWU+KToKLSMgICAgQU5EUk9JRF9O
REs9L29wdC9hbmRyb2lkLW5kayAtIHBhdGggdG8gdGhlIE5ESyByb290LgotIyAgICAgIENhbiBi
ZSBzZXQgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUuIENhbiBiZSBzZXQgb25seSBhdCBmaXJzdCBj
bWFrZSBydW4uCi0jCi0jICAgIEFORFJPSURfQUJJPWFybWVhYmktdjdhIC0gc3BlY2lmaWVzIHRo
ZSB0YXJnZXQgQXBwbGljYXRpb24gQmluYXJ5Ci0jICAgICAgSW50ZXJmYWNlIChBQkkpLiBUaGlz
IG9wdGlvbiBuZWFybHkgbWF0Y2hlcyB0byB0aGUgQVBQX0FCSSB2YXJpYWJsZQotIyAgICAgIHVz
ZWQgYnkgbmRrLWJ1aWxkIHRvb2wgZnJvbSBBbmRyb2lkIE5ESy4KLSMKLSMgICAgICBQb3NzaWJs
ZSB0YXJnZXRzIGFyZToKLSMgICAgICAgICJhcm1lYWJpIiAtIEFSTXY1VEUgYmFzZWQgQ1BVIHdp
dGggc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucwotIyAgICAgICAgImFybWVhYmkt
djdhIiAtIEFSTXY3IGJhc2VkIGRldmljZXMgd2l0aCBoYXJkd2FyZSBGUFUgaW5zdHJ1Y3Rpb25z
Ci0jICAgICAgICAgICAgdGhpcyBBQkkgdGFyZ2V0IGlzIHVzZWQgYnkgZGVmYXVsdAotIyAgICAg
ICAgImFybWVhYmktdjdhIHdpdGggTkVPTiIgLSBzYW1lIGFzIGFybWVhYmktdjdhLCBidXQKLSMg
ICAgICAgICAgICBzZXRzIE5FT04gYXMgZmxvYXRpbmctcG9pbnQgdW5pdAotIyAgICAgICAgImFy
bWVhYmktdjdhIHdpdGggVkZQVjMiIC0gc2FtZSBhcyBhcm1lYWJpLXY3YSwgYnV0Ci0jICAgICAg
ICAgICAgc2V0cyBWRlBWMyBhcyBmbG9hdGluZy1wb2ludCB1bml0IChoYXMgMzIgcmVnaXN0ZXJz
IGluc3RlYWQgb2YgMTYpCi0jICAgICAgICAiYXJtZWFiaS12NiB3aXRoIFZGUCIgLSB0dW5lZCBm
b3IgQVJNdjYgcHJvY2Vzc29ycyBoYXZpbmcgVkZQCi0jICAgICAgICAieDg2IiAtIElBLTMyIGlu
c3RydWN0aW9uIHNldAotIyAgICAgICAgIm1pcHMiIC0gTUlQUzMyIGluc3RydWN0aW9uIHNldAot
IwotIyAgICAgIDY0LWJpdCBBQklzIGZvciBOREsgcjEwIGFuZCBuZXdlcjoKLSMgICAgICAgICJh
cm02NC12OGEiIC0gQVJNdjggQUFyY2g2NCBpbnN0cnVjdGlvbiBzZXQKLSMgICAgICAgICJ4ODZf
NjQiIC0gSW50ZWw2NCBpbnN0cnVjdGlvbiBzZXQgKHIxKQotIyAgICAgICAgIm1pcHM2NCIgLSBN
SVBTNjQgaW5zdHJ1Y3Rpb24gc2V0IChyNikKLSMKLSMgICAgQU5EUk9JRF9OQVRJVkVfQVBJX0xF
VkVMPWFuZHJvaWQtOCAtIGxldmVsIG9mIEFuZHJvaWQgQVBJIGNvbXBpbGUgZm9yLgotIyAgICAg
IE9wdGlvbiBpcyByZWFkLW9ubHkgd2hlbiBzdGFuZGFsb25lIHRvb2xjaGFpbiBpcyB1c2VkLgot
IyAgICAgIE5vdGU6IGJ1aWxkaW5nIGZvciAiYW5kcm9pZC1MIiByZXF1aXJlcyBleHBsaWNpdCBj
b25maWd1cmF0aW9uLgotIwotIyAgICBBTkRST0lEX1RPT0xDSEFJTl9OQU1FPWFybS1saW51eC1h
bmRyb2lkZWFiaS00LjkgLSB0aGUgbmFtZSBvZiBjb21waWxlcgotIyAgICAgIHRvb2xjaGFpbiB0
byBiZSB1c2VkLiBUaGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZGVwZW5kcyBvbiB0aGUgTkRL
Ci0jICAgICAgdmVyc2lvbi4gRm9yIE5ESyByMTBjIHRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgot
IwotIyAgICAgICAgKiBhYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45Ci0jICAgICAgICAqIGFhcmNo
NjQtbGludXgtYW5kcm9pZC1jbGFuZzMuNAotIyAgICAgICAgKiBhYXJjaDY0LWxpbnV4LWFuZHJv
aWQtY2xhbmczLjUKLSMgICAgICAgICogYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuNgotIyAgICAg
ICAgKiBhcm0tbGludXgtYW5kcm9pZGVhYmktNC44Ci0jICAgICAgICAqIGFybS1saW51eC1hbmRy
b2lkZWFiaS00LjkgKGRlZmF1bHQpCi0jICAgICAgICAqIGFybS1saW51eC1hbmRyb2lkZWFiaS1j
bGFuZzMuNAotIyAgICAgICAgKiBhcm0tbGludXgtYW5kcm9pZGVhYmktY2xhbmczLjUKLSMgICAg
ICAgICogbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkKLSMgICAgICAgICogbWlwczY0ZWwtbGlu
dXgtYW5kcm9pZC1jbGFuZzMuNAotIyAgICAgICAgKiBtaXBzNjRlbC1saW51eC1hbmRyb2lkLWNs
YW5nMy41Ci0jICAgICAgICAqIG1pcHNlbC1saW51eC1hbmRyb2lkLTQuNgotIyAgICAgICAgKiBt
aXBzZWwtbGludXgtYW5kcm9pZC00LjgKLSMgICAgICAgICogbWlwc2VsLWxpbnV4LWFuZHJvaWQt
NC45Ci0jICAgICAgICAqIG1pcHNlbC1saW51eC1hbmRyb2lkLWNsYW5nMy40Ci0jICAgICAgICAq
IG1pcHNlbC1saW51eC1hbmRyb2lkLWNsYW5nMy41Ci0jICAgICAgICAqIHg4Ni00LjYKLSMgICAg
ICAgICogeDg2LTQuOAotIyAgICAgICAgKiB4ODYtNC45Ci0jICAgICAgICAqIHg4Ni1jbGFuZzMu
NAotIyAgICAgICAgKiB4ODYtY2xhbmczLjUKLSMgICAgICAgICogeDg2XzY0LTQuOQotIyAgICAg
ICAgKiB4ODZfNjQtY2xhbmczLjQKLSMgICAgICAgICogeDg2XzY0LWNsYW5nMy41Ci0jCi0jICAg
IEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEPU9GRiAtIHNldCBPTiB0byBnZW5lcmF0ZSAzMi1iaXQg
QVJNIGluc3RydWN0aW9ucwotIyAgICAgIGluc3RlYWQgb2YgVGh1bWIuIElzIG5vdCBhdmFpbGFi
bGUgZm9yICJhcm1lYWJpLXY2IHdpdGggVkZQIgotIyAgICAgIChpcyBmb3JjZWQgdG8gYmUgT04p
IEFCSS4KLSMKLSMgICAgQU5EUk9JRF9OT19VTkRFRklORUQ9T04gLSBzZXQgT04gdG8gc2hvdyBh
bGwgdW5kZWZpbmVkIHN5bWJvbHMgYXMgbGlua2VyCi0jICAgICAgZXJyb3JzIGV2ZW4gaWYgdGhl
eSBhcmUgbm90IHVzZWQuCi0jCi0jICAgIEFORFJPSURfU09fVU5ERUZJTkVEPU9GRiAtIHNldCBP
TiB0byBhbGxvdyB1bmRlZmluZWQgc3ltYm9scyBpbiBzaGFyZWQKLSMgICAgICBsaWJyYXJpZXMu
IEF1dG9tYXRpY2FsbHkgdHVybmVkIGZvciBOREsgcjV4IGFuZCByNnggZHVlIHRvIEdMRVN2Mgot
IyAgICAgIHByb2JsZW1zLgotIwotIyAgICBBTkRST0lEX1NUTD1nbnVzdGxfc3RhdGljIC0gc3Bl
Y2lmeSB0aGUgcnVudGltZSB0byB1c2UuCi0jCi0jICAgICAgUG9zc2libGUgdmFsdWVzIGFyZToK
LSMgICAgICAgIG5vbmUgICAgICAgICAgIC0+IERvIG5vdCBjb25maWd1cmUgdGhlIHJ1bnRpbWUu
Ci0jICAgICAgICBzeXN0ZW0gICAgICAgICAtPiBVc2UgdGhlIGRlZmF1bHQgbWluaW1hbCBzeXN0
ZW0gQysrIHJ1bnRpbWUgbGlicmFyeS4KLSMgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGxp
ZXMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4KLSMgICAgICAgICAgICAgICAgICAgICAgICAg
IElzIG5vdCBhdmFpbGFibGUgZm9yIHN0YW5kYWxvbmUgdG9vbGNoYWluLgotIyAgICAgICAgc3lz
dGVtX3JlICAgICAgLT4gVXNlIHRoZSBkZWZhdWx0IG1pbmltYWwgc3lzdGVtIEMrKyBydW50aW1l
IGxpYnJhcnkuCi0jICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBsaWVzIC1mcnR0aSAtZmV4
Y2VwdGlvbnMuCi0jICAgICAgICAgICAgICAgICAgICAgICAgICBJcyBub3QgYXZhaWxhYmxlIGZv
ciBzdGFuZGFsb25lIHRvb2xjaGFpbi4KLSMgICAgICAgIGdhYmkrK19zdGF0aWMgIC0+IFVzZSB0
aGUgR0FiaSsrIHJ1bnRpbWUgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSMgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltcGxpZXMgLWZydHRpIC1mbm8tZXhjZXB0aW9ucy4KLSMgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJsZSBmb3IgTkRLIHI3IGFuZCBuZXdlci4KLSMgICAgICAgICAg
ICAgICAgICAgICAgICAgIElzIG5vdCBhdmFpbGFibGUgZm9yIHN0YW5kYWxvbmUgdG9vbGNoYWlu
LgotIyAgICAgICAgZ2FiaSsrX3NoYXJlZCAgLT4gVXNlIHRoZSBHQWJpKysgcnVudGltZSBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAtZnJ0
dGkgLWZuby1leGNlcHRpb25zLgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxl
IGZvciBOREsgcjcgYW5kIG5ld2VyLgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgbm90
IGF2YWlsYWJsZSBmb3Igc3RhbmRhbG9uZSB0b29sY2hhaW4uCi0jICAgICAgICBzdGxwb3J0X3N0
YXRpYyAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBhIHN0YXRpYyBsaWJyYXJ5LgotIyAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25z
IGZvciBOREsgYmVmb3JlIHI3LgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAt
ZnJ0dGkgLWZuby1leGNlcHRpb25zIGZvciBOREsgcjcgYW5kIG5ld2VyLgotIyAgICAgICAgICAg
ICAgICAgICAgICAgICAgSXMgbm90IGF2YWlsYWJsZSBmb3Igc3RhbmRhbG9uZSB0b29sY2hhaW4u
Ci0jICAgICAgICBzdGxwb3J0X3NoYXJlZCAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAtZm5v
LXJ0dGkgLWZuby1leGNlcHRpb25zIGZvciBOREsgYmVmb3JlIHI3LgotIyAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW1wbGllcyAtZnJ0dGkgLWZuby1leGNlcHRpb25zIGZvciBOREsgcjcgYW5k
IG5ld2VyLgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgbm90IGF2YWlsYWJsZSBmb3Ig
c3RhbmRhbG9uZSB0b29sY2hhaW4uCi0jICAgICAgICBnbnVzdGxfc3RhdGljICAtPiBVc2UgdGhl
IEdOVSBTVEwgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSMgICAgICAgICAgICAgICAgICAgICAgICAg
IEltcGxpZXMgLWZydHRpIC1mZXhjZXB0aW9ucy4KLSMgICAgICAgIGdudXN0bF9zaGFyZWQgIC0+
IFVzZSB0aGUgR05VIFNUTCBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotIyAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW1wbGllcyAtZnJ0dGkgLWZuby1leGNlcHRpb25zLgotIyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXZhaWxhYmxlIGZvciBOREsgcjdiIGFuZCBuZXdlci4KLSMgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNpbGVudGx5IGRlZ3JhZGVzIHRvIGdudXN0bF9zdGF0aWMgaWYgbm90
IGF2YWlsYWJsZS4KLSMKLSMgICAgQU5EUk9JRF9TVExfRk9SQ0VfRkVBVFVSRVM9T04gLSB0dXJu
IHJ0dGkgYW5kIGV4Y2VwdGlvbnMgc3VwcG9ydCBiYXNlZCBvbgotIyAgICAgIGNob3NlbiBydW50
aW1lLiBJZiBkaXNhYmxlZCwgdGhlbiB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGlu
Z3MKLSMgICAgICB0aGVzZSBvcHRpb25zLgotIwotIyAgV2hhdD86Ci0jICAgIGFuZHJvaWQtY21h
a2UgdG9vbGNoYWluIHNlYXJjaGVzIGZvciBOREsvdG9vbGNoYWluIGluIHRoZSBmb2xsb3dpbmcg
b3JkZXI6Ci0jICAgICAgQU5EUk9JRF9OREsgLSBjbWFrZSBwYXJhbWV0ZXIKLSMgICAgICBBTkRS
T0lEX05ESyAtIGVudmlyb25tZW50IHZhcmlhYmxlCi0jICAgICAgQU5EUk9JRF9TVEFOREFMT05F
X1RPT0xDSEFJTiAtIGNtYWtlIHBhcmFtZXRlcgotIyAgICAgIEFORFJPSURfU1RBTkRBTE9ORV9U
T09MQ0hBSU4gLSBlbnZpcm9ubWVudCB2YXJpYWJsZQotIyAgICAgIEFORFJPSURfTkRLIC0gZGVm
YXVsdCBsb2NhdGlvbnMKLSMgICAgICBBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOIC0gZGVm
YXVsdCBsb2NhdGlvbnMKLSMKLSMgICAgTWFrZSBzdXJlIHRvIGRvIHRoZSBmb2xsb3dpbmcgaW4g
eW91ciBzY3JpcHRzOgotIyAgICAgIFNFVCggQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9G
TEFHU30gJHtteV9jeHhfZmxhZ3N9IiApCi0jICAgICAgU0VUKCBDTUFLRV9DX0ZMQUdTICIke0NN
QUtFX0NfRkxBR1N9ICR7bXlfY3h4X2ZsYWdzfSIgKQotIyAgICBUaGUgZmxhZ3Mgd2lsbCBiZSBw
cmVwb3B1bGF0ZWQgd2l0aCBjcml0aWNhbCBmbGFncywgc28gZG9uJ3QgbG9vc2UgdGhlbS4KLSMg
ICAgQWxzbyBiZSBhd2FyZSB0aGF0IHRvb2xjaGFpbiBhbHNvIHNldHMgY29uZmlndXJhdGlvbi1z
cGVjaWZpYyBjb21waWxlcgotIyAgICBmbGFncyBhbmQgbGlua2VyIGZsYWdzLgotIwotIyAgICBB
TkRST0lEIGFuZCBCVUlMRF9BTkRST0lEIHdpbGwgYmUgc2V0IHRvIHRydWUsIHlvdSBtYXkgdGVz
dCBhbnkgb2YgdGhlc2UKLSMgICAgdmFyaWFibGVzIHRvIG1ha2UgbmVjZXNzYXJ5IEFuZHJvaWQt
c3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgotIwotIyAgICBBbHNvIEFSTUVBQkkgb3Ig
QVJNRUFCSV9WN0Egb3IgWDg2IG9yIE1JUFMgb3IgQVJNNjRfVjhBIG9yIFg4Nl82NCBvciBNSVBT
NjQKLSMgICAgd2lsbCBiZSBzZXQgdHJ1ZSwgbXV0dWFsbHkgZXhjbHVzaXZlLiBORU9OIG9wdGlv
biB3aWxsIGJlIHNldCB0cnVlCi0jICAgIGlmIFZGUCBpcyBzZXQgdG8gTkVPTi4KLSMKLSMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoIFZFUlNJT04gMi42
LjMgKQotCi1pZiggREVGSU5FRCBDTUFLRV9DUk9TU0NPTVBJTElORyApCi0gIyBzdWJzZXF1ZW50
IHRvb2xjaGFpbiBsb2FkaW5nIGlzIG5vdCByZWFsbHkgbmVlZGVkCi0gcmV0dXJuKCkKLWVuZGlm
KCkKLQotaWYoIENNQUtFX1RPT0xDSEFJTl9GSUxFICkKLSAjIHRvdWNoIHRvb2xjaGFpbiB2YXJp
YWJsZSB0byBzdXBwcmVzcyAidW51c2VkIHZhcmlhYmxlIiB3YXJuaW5nCi1lbmRpZigpCi0KLSMg
aW5oZXJpdCBzZXR0aW5ncyBpbiByZWN1cnNpdmUgbG9hZHMKLWdldF9wcm9wZXJ0eSggX0NNQUtF
X0lOX1RSWV9DT01QSUxFIEdMT0JBTCBQUk9QRVJUWSBJTl9UUllfQ09NUElMRSApCi1pZiggX0NN
QUtFX0lOX1RSWV9DT01QSUxFICkKLSBpbmNsdWRlKCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9Ly4uL2FuZHJvaWQudG9vbGNoYWluLmNvbmZpZy5jbWFrZSIgT1BUSU9OQUwgKQotZW5kaWYo
KQotCi0jIHRoaXMgb25lIGlzIGltcG9ydGFudAotaWYoIENNQUtFX1ZFUlNJT04gVkVSU0lPTl9H
UkVBVEVSICIzLjAuOTkiICkKLSBzZXQoIENNQUtFX1NZU1RFTV9OQU1FIEFuZHJvaWQgKQotZWxz
ZSgpCi0gc2V0KCBDTUFLRV9TWVNURU1fTkFNRSBMaW51eCApCi1lbmRpZigpCi0KLSMgdGhpcyBv
bmUgbm90IHNvIG11Y2gKLXNldCggQ01BS0VfU1lTVEVNX1ZFUlNJT04gMSApCi0KLSMgcnBhdGgg
bWFrZXMgbG93IHNlbnNlIGZvciBBbmRyb2lkCi1zZXQoIENNQUtFX1NIQVJFRF9MSUJSQVJZX1JV
TlRJTUVfQ19GTEFHICIiICkKLXNldCggQ01BS0VfU0tJUF9SUEFUSCBUUlVFIENBQ0hFIEJPT0wg
IklmIHNldCwgcnVudGltZSBwYXRocyBhcmUgbm90IGFkZGVkIHdoZW4gdXNpbmcgc2hhcmVkIGxp
YnJhcmllcy4iICkKLQotIyBOREsgc2VhcmNoIHBhdGhzCi1zZXQoIEFORFJPSURfU1VQUE9SVEVE
X05ES19WRVJTSU9OUyAke0FORFJPSURfRVhUUkFfTkRLX1ZFUlNJT05TfSAtcjEwZCAtcjEwYyAt
cjEwYiAtcjEwIC1yOWQgLXI5YyAtcjliIC1yOSAtcjhlIC1yOGQgLXI4YyAtcjhiIC1yOCAtcjdj
IC1yN2IgLXI3IC1yNmIgLXI2IC1yNWMgLXI1YiAtcjUgIiIgKQotaWYoIE5PVCBERUZJTkVEIEFO
RFJPSURfTkRLX1NFQVJDSF9QQVRIUyApCi0gaWYoIENNQUtFX0hPU1RfV0lOMzIgKQotICBmaWxl
KCBUT19DTUFLRV9QQVRIICIkRU5We1BST0dSQU1GSUxFU30iIEFORFJPSURfTkRLX1NFQVJDSF9Q
QVRIUyApCi0gIHNldCggQU5EUk9JRF9OREtfU0VBUkNIX1BBVEhTICIke0FORFJPSURfTkRLX1NF
QVJDSF9QQVRIU30iICIkRU5We1N5c3RlbURyaXZlfS9OVlBBQ0siICkKLSBlbHNlKCkKLSAgZmls
ZSggVE9fQ01BS0VfUEFUSCAiJEVOVntIT01FfSIgQU5EUk9JRF9OREtfU0VBUkNIX1BBVEhTICkK
LSAgc2V0KCBBTkRST0lEX05ES19TRUFSQ0hfUEFUSFMgL29wdCAiJHtBTkRST0lEX05ES19TRUFS
Q0hfUEFUSFN9L05WUEFDSyIgKQotIGVuZGlmKCkKLWVuZGlmKCkKLWlmKCBOT1QgREVGSU5FRCBB
TkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOX1NFQVJDSF9QQVRIICkKLSBzZXQoIEFORFJPSURf
U1RBTkRBTE9ORV9UT09MQ0hBSU5fU0VBUkNIX1BBVEggL29wdC9hbmRyb2lkLXRvb2xjaGFpbiAp
Ci1lbmRpZigpCi0KLSMga25vd24gQUJJcwotc2V0KCBBTkRST0lEX1NVUFBPUlRFRF9BQklTX2Fy
bSAiYXJtZWFiaS12N2E7YXJtZWFiaTthcm1lYWJpLXY3YSB3aXRoIE5FT047YXJtZWFiaS12N2Eg
d2l0aCBWRlBWMzthcm1lYWJpLXY2IHdpdGggVkZQIiApCi1zZXQoIEFORFJPSURfU1VQUE9SVEVE
X0FCSVNfYXJtNjQgImFybTY0LXY4YSIgKQotc2V0KCBBTkRST0lEX1NVUFBPUlRFRF9BQklTX3g4
NiAieDg2IiApCi1zZXQoIEFORFJPSURfU1VQUE9SVEVEX0FCSVNfeDg2XzY0ICJ4ODZfNjQiICkK
LXNldCggQU5EUk9JRF9TVVBQT1JURURfQUJJU19taXBzICJtaXBzIiApCi1zZXQoIEFORFJPSURf
U1VQUE9SVEVEX0FCSVNfbWlwczY0ICJtaXBzNjQiICkKLQotIyBBUEkgbGV2ZWwgZGVmYXVsdHMK
LXNldCggQU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUwgOCApCi1zZXQoIEFORFJPSURfREVG
QVVMVF9OREtfQVBJX0xFVkVMX2FybTY0IDIxICkKLXNldCggQU5EUk9JRF9ERUZBVUxUX05ES19B
UElfTEVWRUxfeDg2IDkgKQotc2V0KCBBTkRST0lEX0RFRkFVTFRfTkRLX0FQSV9MRVZFTF94ODZf
NjQgMjEgKQotc2V0KCBBTkRST0lEX0RFRkFVTFRfTkRLX0FQSV9MRVZFTF9taXBzIDkgKQotc2V0
KCBBTkRST0lEX0RFRkFVTFRfTkRLX0FQSV9MRVZFTF9taXBzNjQgMjEgKQotCi0KLW1hY3JvKCBf
X0xJU1RfRklMVEVSIGxpc3R2YXIgcmVnZXggKQotICBpZiggJHtsaXN0dmFyfSApCi0gICAgZm9y
ZWFjaCggX192YWwgJHske2xpc3R2YXJ9fSApCi0gICAgICBpZiggX192YWwgTUFUQ0hFUyAiJHty
ZWdleH0iICkKLSAgICAgICAgbGlzdCggUkVNT1ZFX0lURU0gJHtsaXN0dmFyfSAiJHtfX3ZhbH0i
ICkKLSAgICAgIGVuZGlmKCkKLSAgICBlbmRmb3JlYWNoKCkKLSAgZW5kaWYoKQotZW5kbWFjcm8o
KQotCi1tYWNybyggX19JTklUX1ZBUklBQkxFIHZhcl9uYW1lICkKLSAgc2V0KCBfX3Rlc3RfcGF0
aCAwICkKLSAgZm9yZWFjaCggX192YXIgJHtBUkdOfSApCi0gICAgaWYoIF9fdmFyIFNUUkVRVUFM
ICJQQVRIIiApCi0gICAgICBzZXQoIF9fdGVzdF9wYXRoIDEgKQotICAgICAgYnJlYWsoKQotICAg
IGVuZGlmKCkKLSAgZW5kZm9yZWFjaCgpCi0KLSAgaWYoIF9fdGVzdF9wYXRoIEFORCBOT1QgRVhJ
U1RTICIkeyR7dmFyX25hbWV9fSIgKQotICAgIHVuc2V0KCAke3Zhcl9uYW1lfSBDQUNIRSApCi0g
IGVuZGlmKCkKLQotICBpZiggIiAkeyR7dmFyX25hbWV9fSIgU1RSRVFVQUwgIiAiICkKLSAgICBz
ZXQoIF9fdmFsdWVzIDAgKQotICAgIGZvcmVhY2goIF9fdmFyICR7QVJHTn0gKQotICAgICAgaWYo
IF9fdmFyIFNUUkVRVUFMICJWQUxVRVMiICkKLSAgICAgICAgc2V0KCBfX3ZhbHVlcyAxICkKLSAg
ICAgIGVsc2VpZiggTk9UIF9fdmFyIFNUUkVRVUFMICJQQVRIIiApCi0gICAgICAgIGlmKCBfX3Zh
ciBNQVRDSEVTICJeRU5WXy4qJCIgKQotICAgICAgICAgIHN0cmluZyggUkVQTEFDRSAiRU5WXyIg
IiIgX192YXIgIiR7X192YXJ9IiApCi0gICAgICAgICAgc2V0KCBfX3ZhbHVlICIkRU5WeyR7X192
YXJ9fSIgKQotICAgICAgICBlbHNlaWYoIERFRklORUQgJHtfX3Zhcn0gKQotICAgICAgICAgIHNl
dCggX192YWx1ZSAiJHske19fdmFyfX0iICkKLSAgICAgICAgZWxzZWlmKCBfX3ZhbHVlcyApCi0g
ICAgICAgICAgc2V0KCBfX3ZhbHVlICIke19fdmFyfSIgKQotICAgICAgICBlbHNlKCkKLSAgICAg
ICAgICBzZXQoIF9fdmFsdWUgIiIgKQotICAgICAgICBlbmRpZigpCi0KLSAgICAgICAgaWYoIE5P
VCAiICR7X192YWx1ZX0iIFNUUkVRVUFMICIgIiBBTkQgKE5PVCBfX3Rlc3RfcGF0aCBPUiBFWElT
VFMgIiR7X192YWx1ZX0iKSApCi0gICAgICAgICAgc2V0KCAke3Zhcl9uYW1lfSAiJHtfX3ZhbHVl
fSIgKQotICAgICAgICAgIGJyZWFrKCkKLSAgICAgICAgZW5kaWYoKQotICAgICAgZW5kaWYoKQot
ICAgIGVuZGZvcmVhY2goKQotICAgIHVuc2V0KCBfX3ZhbHVlICkKLSAgICB1bnNldCggX192YWx1
ZXMgKQotICBlbmRpZigpCi0KLSAgaWYoIF9fdGVzdF9wYXRoICkKLSAgICBmaWxlKCBUT19DTUFL
RV9QQVRIICIkeyR7dmFyX25hbWV9fSIgJHt2YXJfbmFtZX0gKQotICBlbmRpZigpCi0gIHVuc2V0
KCBfX3Rlc3RfcGF0aCApCi1lbmRtYWNybygpCi0KLW1hY3JvKCBfX0RFVEVDVF9OQVRJVkVfQVBJ
X0xFVkVMIF92YXIgX3BhdGggKQotICBzZXQoIF9fbmRrQXBpTGV2ZWxSZWdleCAiXltcdCBdKiNk
ZWZpbmVbXHQgXStfX0FORFJPSURfQVBJX19bXHQgXSsoWzAtOV0rKVtcdCBdKi4qJCIgKQotICBm
aWxlKCBTVFJJTkdTICR7X3BhdGh9IF9fYXBpRmlsZUNvbnRlbnQgUkVHRVggIiR7X19uZGtBcGlM
ZXZlbFJlZ2V4fSIgKQotICBpZiggTk9UIF9fYXBpRmlsZUNvbnRlbnQgKQotICAgIG1lc3NhZ2Uo
IFNFTkRfRVJST1IgIkNvdWxkIG5vdCBnZXQgQW5kcm9pZCBuYXRpdmUgQVBJIGxldmVsLiBQcm9i
YWJseSB5b3UgaGF2ZSBzcGVjaWZpZWQgaW52YWxpZCBsZXZlbCB2YWx1ZSwgb3IgeW91ciBjb3B5
IG9mIE5ESy90b29sY2hhaW4gaXMgYnJva2VuLiIgKQotICBlbmRpZigpCi0gIHN0cmluZyggUkVH
RVggUkVQTEFDRSAiJHtfX25ka0FwaUxldmVsUmVnZXh9IiAiXFwxIiAke192YXJ9ICIke19fYXBp
RmlsZUNvbnRlbnR9IiApCi0gIHVuc2V0KCBfX2FwaUZpbGVDb250ZW50ICkKLSAgdW5zZXQoIF9f
bmRrQXBpTGV2ZWxSZWdleCApCi1lbmRtYWNybygpCi0KLW1hY3JvKCBfX0RFVEVDVF9UT09MQ0hB
SU5fTUFDSElORV9OQU1FIF92YXIgX3Jvb3QgKQotIGlmKCBFWElTVFMgIiR7X3Jvb3R9IiApCi0g
ICAgZmlsZSggR0xPQiBfX2djY0V4ZVBhdGggUkVMQVRJVkUgIiR7X3Jvb3R9L2Jpbi8iICIke19y
b290fS9iaW4vKi1nY2Mke1RPT0xfT1NfU1VGRklYfSIgKQotICAgIF9fTElTVF9GSUxURVIoIF9f
Z2NjRXhlUGF0aCAiXlsuXS4qIiApCi0gICAgbGlzdCggTEVOR1RIIF9fZ2NjRXhlUGF0aCBfX2dj
Y0V4ZVBhdGhzQ291bnQgKQotICAgIGlmKCBOT1QgX19nY2NFeGVQYXRoc0NvdW50IEVRVUFMIDEg
IEFORCBOT1QgX0NNQUtFX0lOX1RSWV9DT01QSUxFICkKLSAgICAgIG1lc3NhZ2UoIFdBUk5JTkcg
IkNvdWxkIG5vdCBkZXRlcm1pbmUgbWFjaGluZSBuYW1lIGZvciBjb21waWxlciBmcm9tICR7X3Jv
b3R9IiApCi0gICAgICBzZXQoICR7X3Zhcn0gIiIgKQotICAgIGVsc2UoKQotICAgICAgZ2V0X2Zp
bGVuYW1lX2NvbXBvbmVudCggX19nY2NFeGVOYW1lICIke19fZ2NjRXhlUGF0aH0iIE5BTUVfV0Ug
KQotICAgICAgc3RyaW5nKCBSRVBMQUNFICItZ2NjIiAiIiAke192YXJ9ICIke19fZ2NjRXhlTmFt
ZX0iICkKLSAgICBlbmRpZigpCi0gICAgdW5zZXQoIF9fZ2NjRXhlUGF0aCApCi0gICAgdW5zZXQo
IF9fZ2NjRXhlUGF0aHNDb3VudCApCi0gICAgdW5zZXQoIF9fZ2NjRXhlTmFtZSApCi0gIGVsc2Uo
KQotICAgIHNldCggJHtfdmFyfSAiIiApCi0gIGVuZGlmKCkKLWVuZG1hY3JvKCkKLQotCi0jIGZp
Z2h0IGFnYWluc3QgY3lnd2luCi1zZXQoIEFORFJPSURfRk9SQklEX1NZR1dJTiBUUlVFIENBQ0hF
IEJPT0wgIlByZXZlbnQgY21ha2UgZnJvbSB3b3JraW5nIHVuZGVyIGN5Z3dpbiBhbmQgdXNpbmcg
Y3lnd2luIHRvb2xzIikKLW1hcmtfYXNfYWR2YW5jZWQoIEFORFJPSURfRk9SQklEX1NZR1dJTiAp
Ci1pZiggQU5EUk9JRF9GT1JCSURfU1lHV0lOICkKLSBpZiggQ1lHV0lOICkKLSAgbWVzc2FnZSgg
RkFUQUxfRVJST1IgIkFuZHJvaWQgTkRLIGFuZCBhbmRyb2lkLWNtYWtlIHRvb2xjaGFpbiBhcmUg
bm90IHdlbGNvbWUgQ3lnd2luLiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoaXMgY21ha2UgdG9vbGNo
YWluIHdpbGwgd29yayB1bmRlciBjeWd3aW4uIEJ1dCBpZiB5b3Ugd2FudCB0byB0cnkgdGhlbiB5
b3UgY2FuIHNldCBjbWFrZSB2YXJpYWJsZSBBTkRST0lEX0ZPUkJJRF9TWUdXSU4gdG8gRkFMU0Ug
YW5kIHJlcnVuIGNtYWtlLiIgKQotIGVuZGlmKCkKLQotIGlmKCBDTUFLRV9IT1NUX1dJTjMyICkK
LSAgIyByZW1vdmUgY3lnd2luIGZyb20gUEFUSAotICBzZXQoIF9fbmV3X3BhdGggIiRFTlZ7UEFU
SH0iKQotICBfX0xJU1RfRklMVEVSKCBfX25ld19wYXRoICJjeWd3aW4iICkKLSAgc2V0KEVOVntQ
QVRIfSAiJHtfX25ld19wYXRofSIpCi0gIHVuc2V0KF9fbmV3X3BhdGgpCi0gZW5kaWYoKQotZW5k
aWYoKQotCi0KLSMgZGV0ZWN0IGN1cnJlbnQgaG9zdCBwbGF0Zm9ybQotaWYoIE5PVCBERUZJTkVE
IEFORFJPSURfTkRLX0hPU1RfWDY0IEFORCAoQ01BS0VfSE9TVF9TWVNURU1fUFJPQ0VTU09SIE1B
VENIRVMgImFtZDY0fHg4Nl82NHxBTUQ2NCIgT1IgQ01BS0VfSE9TVF9BUFBMRSkgKQotIHNldCgg
QU5EUk9JRF9OREtfSE9TVF9YNjQgMSBDQUNIRSBCT09MICJUcnkgdG8gdXNlIDY0LWJpdCBjb21w
aWxlciB0b29sY2hhaW4iICkKLSBtYXJrX2FzX2FkdmFuY2VkKCBBTkRST0lEX05ES19IT1NUX1g2
NCApCi1lbmRpZigpCi0KLXNldCggVE9PTF9PU19TVUZGSVggIiIgKQotaWYoIENNQUtFX0hPU1Rf
QVBQTEUgKQotIHNldCggQU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRSAiZGFyd2luLXg4Nl82
NCIgKQotIHNldCggQU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRTIgImRhcndpbi14ODYiICkK
LWVsc2VpZiggQ01BS0VfSE9TVF9XSU4zMiApCi0gc2V0KCBBTkRST0lEX05ES19IT1NUX1NZU1RF
TV9OQU1FICJ3aW5kb3dzLXg4Nl82NCIgKQotIHNldCggQU5EUk9JRF9OREtfSE9TVF9TWVNURU1f
TkFNRTIgIndpbmRvd3MiICkKLSBzZXQoIFRPT0xfT1NfU1VGRklYICIuZXhlIiApCi1lbHNlaWYo
IENNQUtFX0hPU1RfVU5JWCApCi0gc2V0KCBBTkRST0lEX05ES19IT1NUX1NZU1RFTV9OQU1FICJs
aW51eC14ODZfNjQiICkKLSBzZXQoIEFORFJPSURfTkRLX0hPU1RfU1lTVEVNX05BTUUyICJsaW51
eC14ODYiICkKLWVsc2UoKQotIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJDcm9zcy1jb21waWxhdGlv
biBvbiB5b3VyIHBsYXRmb3JtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjbWFrZSB0b29sY2hh
aW4iICkKLWVuZGlmKCkKLQotaWYoIE5PVCBBTkRST0lEX05ES19IT1NUX1g2NCApCi0gc2V0KCBB
TkRST0lEX05ES19IT1NUX1NZU1RFTV9OQU1FICR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFN
RTJ9ICkKLWVuZGlmKCkKLQotIyBzZWUgaWYgd2UgaGF2ZSBwYXRoIHRvIEFuZHJvaWQgTkRLCi1p
ZiggTk9UIEFORFJPSURfTkRLIEFORCBOT1QgQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTiAp
Ci0gIF9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9OREsgUEFUSCBFTlZfQU5EUk9JRF9OREsgKQot
ZW5kaWYoKQotaWYoIE5PVCBBTkRST0lEX05ESyApCi0gIyBzZWUgaWYgd2UgaGF2ZSBwYXRoIHRv
IEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hhaW4KLSBfX0lOSVRfVkFSSUFCTEUoIEFORFJPSURf
U1RBTkRBTE9ORV9UT09MQ0hBSU4gUEFUSCBFTlZfQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJ
TiApCi0KLSBpZiggTk9UIEFORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4gKQotICAjdHJ5IHRv
IGZpbmQgQW5kcm9pZCBOREsgaW4gb25lIG9mIHRoZSB0aGUgZGVmYXVsdCBsb2NhdGlvbnMKLSAg
c2V0KCBfX25ka1NlYXJjaFBhdGhzICkKLSAgZm9yZWFjaCggX19uZGtTZWFyY2hQYXRoICR7QU5E
Uk9JRF9OREtfU0VBUkNIX1BBVEhTfSApCi0gICBmb3JlYWNoKCBzdWZmaXggJHtBTkRST0lEX1NV
UFBPUlRFRF9OREtfVkVSU0lPTlN9ICkKLSAgICBsaXN0KCBBUFBFTkQgX19uZGtTZWFyY2hQYXRo
cyAiJHtfX25ka1NlYXJjaFBhdGh9L2FuZHJvaWQtbmRrJHtzdWZmaXh9IiApCi0gICBlbmRmb3Jl
YWNoKCkKLSAgZW5kZm9yZWFjaCgpCi0gIF9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9OREsgUEFU
SCBWQUxVRVMgJHtfX25ka1NlYXJjaFBhdGhzfSApCi0gIHVuc2V0KCBfX25ka1NlYXJjaFBhdGhz
ICkKLQotICBpZiggQU5EUk9JRF9OREsgKQotICAgbWVzc2FnZSggU1RBVFVTICJVc2luZyBkZWZh
dWx0IHBhdGggZm9yIEFuZHJvaWQgTkRLOiAke0FORFJPSURfTkRLfSIgKQotICAgbWVzc2FnZSgg
U1RBVFVTICIgIElmIHlvdSBwcmVmZXIgdG8gdXNlIGEgZGlmZmVyZW50IGxvY2F0aW9uLCBwbGVh
c2UgZGVmaW5lIGEgY21ha2Ugb3IgZW52aXJvbm1lbnQgdmFyaWFibGU6IEFORFJPSURfTkRLIiAp
Ci0gIGVsc2UoKQotICAgI3RyeSB0byBmaW5kIEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hhaW4g
aW4gb25lIG9mIHRoZSB0aGUgZGVmYXVsdCBsb2NhdGlvbnMKLSAgIF9fSU5JVF9WQVJJQUJMRSgg
QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTiBQQVRIIEFORFJPSURfU1RBTkRBTE9ORV9UT09M
Q0hBSU5fU0VBUkNIX1BBVEggKQotCi0gICBpZiggQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJ
TiApCi0gICAgbWVzc2FnZSggU1RBVFVTICJVc2luZyBkZWZhdWx0IHBhdGggZm9yIHN0YW5kYWxv
bmUgdG9vbGNoYWluICR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0iICkKLSAgICBtZXNz
YWdlKCBTVEFUVVMgIiAgSWYgeW91IHByZWZlciB0byB1c2UgYSBkaWZmZXJlbnQgbG9jYXRpb24s
IHBsZWFzZSBkZWZpbmUgdGhlIHZhcmlhYmxlOiBBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlO
IiApCi0gICBlbmRpZiggQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTiApCi0gIGVuZGlmKCBB
TkRST0lEX05ESyApCi0gZW5kaWYoIE5PVCBBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOICkK
LWVuZGlmKCBOT1QgQU5EUk9JRF9OREsgKQotCi0jIHJlbWVtYmVyIGZvdW5kIHBhdGhzCi1pZigg
QU5EUk9JRF9OREsgKQotIGdldF9maWxlbmFtZV9jb21wb25lbnQoIEFORFJPSURfTkRLICIke0FO
RFJPSURfTkRLfSIgQUJTT0xVVEUgKQotIHNldCggQU5EUk9JRF9OREsgIiR7QU5EUk9JRF9OREt9
IiBDQUNIRSBJTlRFUk5BTCAiUGF0aCBvZiB0aGUgQW5kcm9pZCBOREsiIEZPUkNFICkKLSBzZXQo
IEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgVHJ1ZSApCi0gaWYoIEVYSVNUUyAiJHtBTkRST0lEX05E
S30vUkVMRUFTRS5UWFQiICkKLSAgZmlsZSggU1RSSU5HUyAiJHtBTkRST0lEX05ES30vUkVMRUFT
RS5UWFQiIEFORFJPSURfTkRLX1JFTEVBU0VfRlVMTCBMSU1JVF9DT1VOVCAxIFJFR0VYICJyWzAt
OV0rW2Etel0/IiApCi0gIHN0cmluZyggUkVHRVggTUFUQ0ggInIoWzAtOV0rKShbYS16XT8pIiBB
TkRST0lEX05ES19SRUxFQVNFICIke0FORFJPSURfTkRLX1JFTEVBU0VfRlVMTH0iICkKLSBlbHNl
KCkKLSAgc2V0KCBBTkRST0lEX05ES19SRUxFQVNFICJyMXgiICkKLSAgc2V0KCBBTkRST0lEX05E
S19SRUxFQVNFX0ZVTEwgInVucmVsZWFzZWQiICkKLSBlbmRpZigpCi0gc3RyaW5nKCBSRUdFWCBS
RVBMQUNFICJyKFswLTldKykoW2Etel0/KSIgIlxcMSoxMDAwIiBBTkRST0lEX05ES19SRUxFQVNF
X05VTSAiJHtBTkRST0lEX05ES19SRUxFQVNFfSIgKQotIHN0cmluZyggRklORCAiIGFiY2RlZmdo
aWprbG1ub3BxYXN0dXZ3eHl6IiAiJHtDTUFLRV9NQVRDSF8yfSIgX19uZGtSZWxlYXNlTGV0dGVy
TnVtICkKLSBtYXRoKCBFWFBSIEFORFJPSURfTkRLX1JFTEVBU0VfTlVNICIke0FORFJPSURfTkRL
X1JFTEVBU0VfTlVNfSske19fbmRrUmVsZWFzZUxldHRlck51bX0iICkKLWVsc2VpZiggQU5EUk9J
RF9TVEFOREFMT05FX1RPT0xDSEFJTiApCi0gZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCggQU5EUk9J
RF9TVEFOREFMT05FX1RPT0xDSEFJTiAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfSIg
QUJTT0xVVEUgKQotICMgdHJ5IHRvIGRldGVjdCBjaGFuZ2UKLSBpZiggQ01BS0VfQVIgKQotICBz
dHJpbmcoIExFTkdUSCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfSIgX19sZW5ndGgg
KQotICBzdHJpbmcoIFNVQlNUUklORyAiJHtDTUFLRV9BUn0iIDAgJHtfX2xlbmd0aH0gX19hbmRy
b2lkU3RhbmRhbG9uZVRvb2xjaGFpblByZXZpb3VzUGF0aCApCi0gIGlmKCBOT1QgX19hbmRyb2lk
U3RhbmRhbG9uZVRvb2xjaGFpblByZXZpb3VzUGF0aCBTVFJFUVVBTCBBTkRST0lEX1NUQU5EQUxP
TkVfVE9PTENIQUlOICkKLSAgIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJJdCBpcyBub3QgcG9zc2li
bGUgdG8gY2hhbmdlIHBhdGggdG8gdGhlIEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hhaW4gb24g
c3Vic2VxdWVudCBydW4uIiApCi0gIGVuZGlmKCkKLSAgdW5zZXQoIF9fYW5kcm9pZFN0YW5kYWxv
bmVUb29sY2hhaW5QcmV2aW91c1BhdGggKQotICB1bnNldCggX19sZW5ndGggKQotIGVuZGlmKCkK
LSBzZXQoIEFORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4gIiR7QU5EUk9JRF9TVEFOREFMT05F
X1RPT0xDSEFJTn0iIENBQ0hFIElOVEVSTkFMICJQYXRoIG9mIHRoZSBBbmRyb2lkIHN0YW5kYWxv
bmUgdG9vbGNoYWluIiBGT1JDRSApCi0gc2V0KCBCVUlMRF9XSVRIX1NUQU5EQUxPTkVfVE9PTENI
QUlOIFRydWUgKQotZWxzZSgpCi0gbGlzdChHRVQgQU5EUk9JRF9OREtfU0VBUkNIX1BBVEhTIDAg
QU5EUk9JRF9OREtfU0VBUkNIX1BBVEgpCi0gbWVzc2FnZSggRkFUQUxfRVJST1IgIkNvdWxkIG5v
dCBmaW5kIG5laXRoZXIgQW5kcm9pZCBOREsgbm9yIEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hh
aW4uCi0gICAgWW91IHNob3VsZCBlaXRoZXIgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlOgot
ICAgICAgZXhwb3J0IEFORFJPSURfTkRLPX4vbXktYW5kcm9pZC1uZGsKLSAgICBvcgotICAgICAg
ZXhwb3J0IEFORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU49fi9teS1hbmRyb2lkLXRvb2xjaGFp
bgotICAgIG9yIHB1dCB0aGUgdG9vbGNoYWluIG9yIE5ESyBpbiB0aGUgZGVmYXVsdCBwYXRoOgot
ICAgICAgc3VkbyBsbiAtcyB+L215LWFuZHJvaWQtbmRrICR7QU5EUk9JRF9OREtfU0VBUkNIX1BB
VEh9L2FuZHJvaWQtbmRrCi0gICAgICBzdWRvIGxuIC1zIH4vbXktYW5kcm9pZC10b29sY2hhaW4g
JHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOX1NFQVJDSF9QQVRIfSIgKQotZW5kaWYoKQot
Ci0jIGFuZHJvaWQgTkRLIGxheW91dAotaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgKQotIGlm
KCBOT1QgREVGSU5FRCBBTkRST0lEX05ES19MQVlPVVQgKQotICAjIHRyeSB0byBhdXRvbWF0aWNh
bGx5IGRldGVjdCB0aGUgbGF5b3V0Ci0gIGlmKCBFWElTVFMgIiR7QU5EUk9JRF9OREt9L1JFTEVB
U0UuVFhUIikKLSAgIHNldCggQU5EUk9JRF9OREtfTEFZT1VUICJSRUxFQVNFIiApCi0gIGVsc2Vp
ZiggRVhJU1RTICIke0FORFJPSURfTkRLfS8uLi8uLi9saW51eC14ODYvdG9vbGNoYWluLyIgKQot
ICAgc2V0KCBBTkRST0lEX05ES19MQVlPVVQgIkxJTkFSTyIgKQotICBlbHNlaWYoIEVYSVNUUyAi
JHtBTkRST0lEX05ES30vLi4vLi4vZ2NjLyIgKQotICAgc2V0KCBBTkRST0lEX05ES19MQVlPVVQg
IkFORFJPSUQiICkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLSBzZXQoIEFORFJPSURfTkRLX0xBWU9V
VCAiJHtBTkRST0lEX05ES19MQVlPVVR9IiBDQUNIRSBTVFJJTkcgIlRoZSBpbm5lciBsYXlvdXQg
b2YgTkRLIiApCi0gbWFya19hc19hZHZhbmNlZCggQU5EUk9JRF9OREtfTEFZT1VUICkKLSBpZigg
QU5EUk9JRF9OREtfTEFZT1VUIFNUUkVRVUFMICJMSU5BUk8iICkKLSAgc2V0KCBBTkRST0lEX05E
S19IT1NUX1NZU1RFTV9OQU1FICR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRTJ9ICkgIyBv
bmx5IDMyLWJpdCBhdCB0aGUgbW9tZW50Ci0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19Q
QVRIICIke0FORFJPSURfTkRLfS8uLi8uLi8ke0FORFJPSURfTkRLX0hPU1RfU1lTVEVNX05BTUV9
L3Rvb2xjaGFpbiIgKQotICBzZXQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSCAgIiIg
KQotICBzZXQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDIgIiIgKQotIGVsc2VpZigg
QU5EUk9JRF9OREtfTEFZT1VUIFNUUkVRVUFMICJBTkRST0lEIiApCi0gIHNldCggQU5EUk9JRF9O
REtfSE9TVF9TWVNURU1fTkFNRSAke0FORFJPSURfTkRLX0hPU1RfU1lTVEVNX05BTUUyfSApICMg
b25seSAzMi1iaXQgYXQgdGhlIG1vbWVudAotICBzZXQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNf
UEFUSCAiJHtBTkRST0lEX05ES30vLi4vLi4vZ2NjLyR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1f
TkFNRX0vYXJtIiApCi0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19TVUJQQVRIICAiIiAp
Ci0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19TVUJQQVRIMiAiIiApCi0gZWxzZSgpICMg
QU5EUk9JRF9OREtfTEFZT1VUIFNUUkVRVUFMICJSRUxFQVNFIgotICBzZXQoIEFORFJPSURfTkRL
X1RPT0xDSEFJTlNfUEFUSCAiJHtBTkRST0lEX05ES30vdG9vbGNoYWlucyIgKQotICBzZXQoIEFO
RFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSCAgIi9wcmVidWlsdC8ke0FORFJPSURfTkRLX0hP
U1RfU1lTVEVNX05BTUV9IiApCi0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19TVUJQQVRI
MiAiL3ByZWJ1aWx0LyR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRTJ9IiApCi0gZW5kaWYo
KQotIGdldF9maWxlbmFtZV9jb21wb25lbnQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSCAi
JHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEh9IiBBQlNPTFVURSApCi0KLSAjIHRyeSB0byBk
ZXRlY3QgY2hhbmdlIG9mIE5ESwotIGlmKCBDTUFLRV9BUiApCi0gIHN0cmluZyggTEVOR1RIICIk
e0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0iIF9fbGVuZ3RoICkKLSAgc3RyaW5nKCBTVUJT
VFJJTkcgIiR7Q01BS0VfQVJ9IiAwICR7X19sZW5ndGh9IF9fYW5kcm9pZE5ka1ByZXZpb3VzUGF0
aCApCi0gIGlmKCBOT1QgX19hbmRyb2lkTmRrUHJldmlvdXNQYXRoIFNUUkVRVUFMIEFORFJPSURf
TkRLX1RPT0xDSEFJTlNfUEFUSCApCi0gICBtZXNzYWdlKCBGQVRBTF9FUlJPUiAiSXQgaXMgbm90
IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgcGF0aCB0byB0aGUgTkRLIG9uIHN1YnNlcXVlbnQgQ01h
a2UgcnVuLiBZb3UgbXVzdCByZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcyBmcm9tIHlvdXIgYnVp
bGQgZm9sZGVyIGZpcnN0LgotICAgIiApCi0gIGVuZGlmKCkKLSAgdW5zZXQoIF9fYW5kcm9pZE5k
a1ByZXZpb3VzUGF0aCApCi0gIHVuc2V0KCBfX2xlbmd0aCApCi0gZW5kaWYoKQotZW5kaWYoKQot
Ci0KLSMgZ2V0IGFsbCB0aGUgZGV0YWlscyBhYm91dCBzdGFuZGFsb25lIHRvb2xjaGFpbgotaWYo
IEJVSUxEX1dJVEhfU1RBTkRBTE9ORV9UT09MQ0hBSU4gKQotIF9fREVURUNUX05BVElWRV9BUElf
TEVWRUwoIEFORFJPSURfU1VQUE9SVEVEX05BVElWRV9BUElfTEVWRUxTICIke0FORFJPSURfU1RB
TkRBTE9ORV9UT09MQ0hBSU59L3N5c3Jvb3QvdXNyL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwu
aCIgKQotIHNldCggQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTl9BUElfTEVWRUwgJHtBTkRS
T0lEX1NVUFBPUlRFRF9OQVRJVkVfQVBJX0xFVkVMU30gKQotIHNldCggX19hdmFpbGFibGVUb29s
Y2hhaW5zICJzdGFuZGFsb25lIiApCi0gX19ERVRFQ1RfVE9PTENIQUlOX01BQ0hJTkVfTkFNRSgg
X19hdmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENI
QUlOfSIgKQotIGlmKCBOT1QgX19hdmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyApCi0gIG1lc3Nh
Z2UoIEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1hY2hpbmUgbmFtZSBvZiB5b3Vy
IHRvb2xjaGFpbi4gUHJvYmFibHkgeW91ciBBbmRyb2lkIHN0YW5kYWxvbmUgdG9vbGNoYWluIGlz
IGJyb2tlbi4iICkKLSBlbmRpZigpCi0gaWYoIF9fYXZhaWxhYmxlVG9vbGNoYWluTWFjaGluZXMg
TUFUQ0hFUyB4ODZfNjQgKQotICBzZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgIng4Nl82
NCIgKQotIGVsc2VpZiggX19hdmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyBNQVRDSEVTIGk2ODYg
KQotICBzZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgIng4NiIgKQotIGVsc2VpZiggX19h
dmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyBNQVRDSEVTIGFhcmNoNjQgKQotICBzZXQoIF9fYXZh
aWxhYmxlVG9vbGNoYWluQXJjaHMgImFybTY0IiApCi0gZWxzZWlmKCBfX2F2YWlsYWJsZVRvb2xj
aGFpbk1hY2hpbmVzIE1BVENIRVMgYXJtICkKLSAgc2V0KCBfX2F2YWlsYWJsZVRvb2xjaGFpbkFy
Y2hzICJhcm0iICkKLSBlbHNlaWYoIF9fYXZhaWxhYmxlVG9vbGNoYWluTWFjaGluZXMgTUFUQ0hF
UyBtaXBzNjRlbCApCi0gIHNldCggX19hdmFpbGFibGVUb29sY2hhaW5BcmNocyAibWlwczY0IiAp
Ci0gZWxzZWlmKCBfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzIE1BVENIRVMgbWlwc2VsICkK
LSAgc2V0KCBfX2F2YWlsYWJsZVRvb2xjaGFpbkFyY2hzICJtaXBzIiApCi0gZW5kaWYoKQotIGV4
ZWN1dGVfcHJvY2VzcyggQ09NTUFORCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS9i
aW4vJHtfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzfS1nY2Mke1RPT0xfT1NfU1VGRklYfSIg
LWR1bXB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX19hdmFpbGFi
bGVUb29sY2hhaW5Db21waWxlclZlcnNpb25zIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQ
QUNFICkKLSBzdHJpbmcoIFJFR0VYIE1BVENIICJbMC05XStbLl1bMC05XSsoWy5dWzAtOV0rKT8i
IF9fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGlsZXJWZXJzaW9ucyAiJHtfX2F2YWlsYWJsZVRvb2xj
aGFpbkNvbXBpbGVyVmVyc2lvbnN9IiApCi0gaWYoIEVYSVNUUyAiJHtBTkRST0lEX1NUQU5EQUxP
TkVfVE9PTENIQUlOfS9iaW4vY2xhbmcke1RPT0xfT1NfU1VGRklYfSIgKQotICBsaXN0KCBBUFBF
TkQgX19hdmFpbGFibGVUb29sY2hhaW5zICJzdGFuZGFsb25lLWNsYW5nIiApCi0gIGxpc3QoIEFQ
UEVORCBfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzICR7X19hdmFpbGFibGVUb29sY2hhaW5N
YWNoaW5lc30gKQotICBsaXN0KCBBUFBFTkQgX19hdmFpbGFibGVUb29sY2hhaW5BcmNocyAke19f
YXZhaWxhYmxlVG9vbGNoYWluQXJjaHN9ICkKLSAgbGlzdCggQVBQRU5EIF9fYXZhaWxhYmxlVG9v
bGNoYWluQ29tcGlsZXJWZXJzaW9ucyAke19fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGlsZXJWZXJz
aW9uc30gKQotIGVuZGlmKCkKLWVuZGlmKCkKLQotbWFjcm8oIF9fR0xPQl9OREtfVE9PTENIQUlO
UyBfX2F2YWlsYWJsZVRvb2xjaGFpbnNWYXIgX19hdmFpbGFibGVUb29sY2hhaW5zTHN0IF9fdG9v
bGNoYWluX3N1YnBhdGggKQotIGZvcmVhY2goIF9fdG9vbGNoYWluICR7JHtfX2F2YWlsYWJsZVRv
b2xjaGFpbnNMc3R9fSApCi0gIGlmKCAiJHtfX3Rvb2xjaGFpbn0iIE1BVENIRVMgIi1jbGFuZzNb
Ll1bMC05XSQiIEFORCBOT1QgRVhJU1RTICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0v
JHtfX3Rvb2xjaGFpbn0ke19fdG9vbGNoYWluX3N1YnBhdGh9IiApCi0gICBTRVQoIF9fdG9vbGNo
YWluVmVyc2lvblJlZ2V4ICJeVE9PTENIQUlOX1ZFUlNJT05bXHQgXSs6PVtcdCBdKyguKikkIiAp
Ci0gICBGSUxFKCBTVFJJTkdTICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtfX3Rv
b2xjaGFpbn0vc2V0dXAubWsiIF9fdG9vbGNoYWluVmVyc2lvblN0ciBSRUdFWCAiJHtfX3Rvb2xj
aGFpblZlcnNpb25SZWdleH0iICkKLSAgIGlmKCBfX3Rvb2xjaGFpblZlcnNpb25TdHIgKQotICAg
IHN0cmluZyggUkVHRVggUkVQTEFDRSAiJHtfX3Rvb2xjaGFpblZlcnNpb25SZWdleH0iICJcXDEi
IF9fdG9vbGNoYWluVmVyc2lvblN0ciAiJHtfX3Rvb2xjaGFpblZlcnNpb25TdHJ9IiApCi0gICAg
c3RyaW5nKCBSRUdFWCBSRVBMQUNFICItY2xhbmczWy5dWzAtOV0kIiAiLSR7X190b29sY2hhaW5W
ZXJzaW9uU3RyfSIgX19nY2NfdG9vbGNoYWluICIke19fdG9vbGNoYWlufSIgKQotICAgZWxzZSgp
Ci0gICAgc3RyaW5nKCBSRUdFWCBSRVBMQUNFICItY2xhbmczWy5dWzAtOV0kIiAiLTQuNiIgX19n
Y2NfdG9vbGNoYWluICIke19fdG9vbGNoYWlufSIgKQotICAgZW5kaWYoKQotICAgdW5zZXQoIF9f
dG9vbGNoYWluVmVyc2lvblN0ciApCi0gICB1bnNldCggX190b29sY2hhaW5WZXJzaW9uUmVnZXgg
KQotICBlbHNlKCkKLSAgIHNldCggX19nY2NfdG9vbGNoYWluICIke19fdG9vbGNoYWlufSIgKQot
ICBlbmRpZigpCi0gIF9fREVURUNUX1RPT0xDSEFJTl9NQUNISU5FX05BTUUoIF9fbWFjaGluZSAi
JHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEh9LyR7X19nY2NfdG9vbGNoYWlufSR7X190b29s
Y2hhaW5fc3VicGF0aH0iICkKLSAgaWYoIF9fbWFjaGluZSApCi0gICBzdHJpbmcoIFJFR0VYIE1B
VENIICJbMC05XStbLl1bMC05XSsoWy5dWzAtOXhdKyk/JCIgX192ZXJzaW9uICIke19fZ2NjX3Rv
b2xjaGFpbn0iICkKLSAgIGlmKCBfX21hY2hpbmUgTUFUQ0hFUyB4ODZfNjQgKQotICAgIHNldCgg
X19hcmNoICJ4ODZfNjQiICkKLSAgIGVsc2VpZiggX19tYWNoaW5lIE1BVENIRVMgaTY4NiApCi0g
ICAgc2V0KCBfX2FyY2ggIng4NiIgKQotICAgZWxzZWlmKCBfX21hY2hpbmUgTUFUQ0hFUyBhYXJj
aDY0ICkKLSAgICBzZXQoIF9fYXJjaCAiYXJtNjQiICkKLSAgIGVsc2VpZiggX19tYWNoaW5lIE1B
VENIRVMgYXJtICkKLSAgICBzZXQoIF9fYXJjaCAiYXJtIiApCi0gICBlbHNlaWYoIF9fbWFjaGlu
ZSBNQVRDSEVTIG1pcHM2NGVsICkKLSAgICBzZXQoIF9fYXJjaCAibWlwczY0IiApCi0gICBlbHNl
aWYoIF9fbWFjaGluZSBNQVRDSEVTIG1pcHNlbCApCi0gICAgc2V0KCBfX2FyY2ggIm1pcHMiICkK
LSAgIGVsc2UoKQotICAgIHNldCggX19hcmNoICIiICkKLSAgIGVuZGlmKCkKLSAgICNtZXNzYWdl
KCJtYWNoaW5lOiAhJHtfX21hY2hpbmV9IVxuYXJjaDogISR7X19hcmNofSFcbnZlcnNpb246ICEk
e19fdmVyc2lvbn0hXG50b29sY2hhaW46ICEke19fdG9vbGNoYWlufSFcbiIpCi0gICBpZiAoX19h
cmNoKQotICAgIGxpc3QoIEFQUEVORCBfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzICIke19f
bWFjaGluZX0iICkKLSAgICBsaXN0KCBBUFBFTkQgX19hdmFpbGFibGVUb29sY2hhaW5BcmNocyAi
JHtfX2FyY2h9IiApCi0gICAgbGlzdCggQVBQRU5EIF9fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGls
ZXJWZXJzaW9ucyAiJHtfX3ZlcnNpb259IiApCi0gICAgbGlzdCggQVBQRU5EICR7X19hdmFpbGFi
bGVUb29sY2hhaW5zVmFyfSAiJHtfX3Rvb2xjaGFpbn0iICkKLSAgIGVuZGlmKCkKLSAgZW5kaWYo
KQotICB1bnNldCggX19nY2NfdG9vbGNoYWluICkKLSBlbmRmb3JlYWNoKCkKLWVuZG1hY3JvKCkK
LQotIyBnZXQgYWxsIHRoZSBkZXRhaWxzIGFib3V0IE5ESwotaWYoIEJVSUxEX1dJVEhfQU5EUk9J
RF9OREsgKQotIGZpbGUoIEdMT0IgQU5EUk9JRF9TVVBQT1JURURfTkFUSVZFX0FQSV9MRVZFTFMg
UkVMQVRJVkUgIiR7QU5EUk9JRF9OREt9L3BsYXRmb3JtcyIgIiR7QU5EUk9JRF9OREt9L3BsYXRm
b3Jtcy9hbmRyb2lkLSoiICkKLSBzdHJpbmcoIFJFUExBQ0UgImFuZHJvaWQtIiAiIiBBTkRST0lE
X1NVUFBPUlRFRF9OQVRJVkVfQVBJX0xFVkVMUyAiJHtBTkRST0lEX1NVUFBPUlRFRF9OQVRJVkVf
QVBJX0xFVkVMU30iICkKLSBzZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWlucyAiIiApCi0gc2V0KCBf
X2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzICIiICkKLSBzZXQoIF9fYXZhaWxhYmxlVG9vbGNo
YWluQXJjaHMgIiIgKQotIHNldCggX19hdmFpbGFibGVUb29sY2hhaW5Db21waWxlclZlcnNpb25z
ICIiICkKLSBpZiggQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSBBTkQgRVhJU1RTICIke0FORFJPSURf
TkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtBTkRST0lEX1RPT0xDSEFJTl9OQU1FfS8iICkKLSAgIyBk
byBub3QgZ28gdGhyb3VnaCBhbGwgdG9vbGNoYWlucyBpZiB3ZSBrbm93IHRoZSBuYW1lCi0gIHNl
dCggX19hdmFpbGFibGVUb29sY2hhaW5zTHN0ICIke0FORFJPSURfVE9PTENIQUlOX05BTUV9IiAp
Ci0gIF9fR0xPQl9OREtfVE9PTENIQUlOUyggX19hdmFpbGFibGVUb29sY2hhaW5zIF9fYXZhaWxh
YmxlVG9vbGNoYWluc0xzdCAiJHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1NVQlBBVEh9IiApCi0g
IGlmKCBOT1QgX19hdmFpbGFibGVUb29sY2hhaW5zIEFORCBOT1QgQU5EUk9JRF9OREtfVE9PTENI
QUlOU19TVUJQQVRIIFNUUkVRVUFMIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDIgKQot
ICAgX19HTE9CX05ES19UT09MQ0hBSU5TKCBfX2F2YWlsYWJsZVRvb2xjaGFpbnMgX19hdmFpbGFi
bGVUb29sY2hhaW5zTHN0ICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9IiApCi0g
ICBpZiggX19hdmFpbGFibGVUb29sY2hhaW5zICkKLSAgICBzZXQoIEFORFJPSURfTkRLX1RPT0xD
SEFJTlNfU1VCUEFUSCAke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9ICkKLSAgIGVu
ZGlmKCkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLSBpZiggTk9UIF9fYXZhaWxhYmxlVG9vbGNoYWlu
cyApCi0gIGZpbGUoIEdMT0IgX19hdmFpbGFibGVUb29sY2hhaW5zTHN0IFJFTEFUSVZFICIke0FO
RFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0iICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFU
SH0vKiIgKQotICBpZiggX19hdmFpbGFibGVUb29sY2hhaW5zTHN0ICkKLSAgIGxpc3QoU09SVCBf
X2F2YWlsYWJsZVRvb2xjaGFpbnNMc3QpICMgd2UgbmVlZCBjbGFuZyB0byBnbyBhZnRlciBnY2MK
LSAgZW5kaWYoKQotICBfX0xJU1RfRklMVEVSKCBfX2F2YWlsYWJsZVRvb2xjaGFpbnNMc3QgIl5b
Ll0iICkKLSAgX19MSVNUX0ZJTFRFUiggX19hdmFpbGFibGVUb29sY2hhaW5zTHN0ICJsbHZtIiAp
Ci0gIF9fTElTVF9GSUxURVIoIF9fYXZhaWxhYmxlVG9vbGNoYWluc0xzdCAicmVuZGVyc2NyaXB0
IiApCi0gIF9fR0xPQl9OREtfVE9PTENIQUlOUyggX19hdmFpbGFibGVUb29sY2hhaW5zIF9fYXZh
aWxhYmxlVG9vbGNoYWluc0xzdCAiJHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1NVQlBBVEh9IiAp
Ci0gIGlmKCBOT1QgX19hdmFpbGFibGVUb29sY2hhaW5zIEFORCBOT1QgQU5EUk9JRF9OREtfVE9P
TENIQUlOU19TVUJQQVRIIFNUUkVRVUFMIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDIg
KQotICAgX19HTE9CX05ES19UT09MQ0hBSU5TKCBfX2F2YWlsYWJsZVRvb2xjaGFpbnMgX19hdmFp
bGFibGVUb29sY2hhaW5zTHN0ICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9IiAp
Ci0gICBpZiggX19hdmFpbGFibGVUb29sY2hhaW5zICkKLSAgICBzZXQoIEFORFJPSURfTkRLX1RP
T0xDSEFJTlNfU1VCUEFUSCAke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9ICkKLSAg
IGVuZGlmKCkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLSBpZiggTk9UIF9fYXZhaWxhYmxlVG9vbGNo
YWlucyApCi0gIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBhbnkgd29ya2lu
ZyB0b29sY2hhaW4gaW4gdGhlIE5ESy4gUHJvYmFibHkgeW91ciBBbmRyb2lkIE5ESyBpcyBicm9r
ZW4uIiApCi0gZW5kaWYoKQotZW5kaWYoKQotCi0jIGJ1aWxkIGxpc3Qgb2YgYXZhaWxhYmxlIEFC
SXMKLXNldCggQU5EUk9JRF9TVVBQT1JURURfQUJJUyAiIiApCi1zZXQoIF9fdW5pcVRvb2xjaGFp
bkFyY2hOYW1lcyAke19fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHN9ICkKLWxpc3QoIFJFTU9WRV9E
VVBMSUNBVEVTIF9fdW5pcVRvb2xjaGFpbkFyY2hOYW1lcyApCi1saXN0KCBTT1JUIF9fdW5pcVRv
b2xjaGFpbkFyY2hOYW1lcyApCi1mb3JlYWNoKCBfX2FyY2ggJHtfX3VuaXFUb29sY2hhaW5BcmNo
TmFtZXN9ICkKLSBsaXN0KCBBUFBFTkQgQU5EUk9JRF9TVVBQT1JURURfQUJJUyAke0FORFJPSURf
U1VQUE9SVEVEX0FCSVNfJHtfX2FyY2h9fSApCi1lbmRmb3JlYWNoKCkKLXVuc2V0KCBfX3VuaXFU
b29sY2hhaW5BcmNoTmFtZXMgKQotaWYoIE5PVCBBTkRST0lEX1NVUFBPUlRFRF9BQklTICkKLSBt
ZXNzYWdlKCBGQVRBTF9FUlJPUiAiTm8gb25lIG9mIGtub3duIEFuZHJvaWQgQUJJcyBpcyBzdXBw
b3J0ZWQgYnkgdGhpcyBjbWFrZSB0b29sY2hhaW4uIiApCi1lbmRpZigpCi0KLSMgY2hvb3NlIHRh
cmdldCBBQkkKLV9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9BQkkgVkFMVUVTICR7QU5EUk9JRF9T
VVBQT1JURURfQUJJU30gKQotIyB2ZXJpZnkgdGhhdCB0YXJnZXQgQUJJIGlzIHN1cHBvcnRlZAot
bGlzdCggRklORCBBTkRST0lEX1NVUFBPUlRFRF9BQklTICIke0FORFJPSURfQUJJfSIgX19hbmRy
b2lkQWJpSWR4ICkKLWlmKCBfX2FuZHJvaWRBYmlJZHggRVFVQUwgLTEgKQotIHN0cmluZyggUkVQ
TEFDRSAiOyIgIlwiLCBcIiIgUFJJTlRBQkxFX0FORFJPSURfU1VQUE9SVEVEX0FCSVMgICIke0FO
RFJPSURfU1VQUE9SVEVEX0FCSVN9IiApCi0gbWVzc2FnZSggRkFUQUxfRVJST1IgIlNwZWNpZmll
ZCBBTkRST0lEX0FCSSA9IFwiJHtBTkRST0lEX0FCSX1cIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRo
aXMgY21ha2UgdG9vbGNoYWluIG9yIHlvdXIgTkRLL3Rvb2xjaGFpbi4KLSAgIFN1cHBvcnRlZCB2
YWx1ZXMgYXJlOiBcIiR7UFJJTlRBQkxFX0FORFJPSURfU1VQUE9SVEVEX0FCSVN9XCIKLSAgICIg
KQotZW5kaWYoKQotdW5zZXQoIF9fYW5kcm9pZEFiaUlkeCApCi0KLSMgc2V0IHRhcmdldCBBQkkg
b3B0aW9ucwotaWYoIEFORFJPSURfQUJJIFNUUkVRVUFMICJ4ODYiICkKLSBzZXQoIFg4NiB0cnVl
ICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJ4ODYiICkKLSBzZXQoIEFORFJPSURfQVJD
SF9OQU1FICJ4ODYiICkKLSBzZXQoIEFORFJPSURfTExWTV9UUklQTEUgImk2ODYtbm9uZS1saW51
eC1hbmRyb2lkIiApCi0gc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJpNjg2IiApCi1lbHNl
aWYoIEFORFJPSURfQUJJIFNUUkVRVUFMICJ4ODZfNjQiICkKLSBzZXQoIFg4NiB0cnVlICkKLSBz
ZXQoIFg4Nl82NCB0cnVlICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJ4ODZfNjQiICkK
LSBzZXQoIEFORFJPSURfQVJDSF9OQU1FICJ4ODZfNjQiICkKLSBzZXQoIENNQUtFX1NZU1RFTV9Q
Uk9DRVNTT1IgIng4Nl82NCIgKQotIHNldCggQU5EUk9JRF9MTFZNX1RSSVBMRSAieDg2XzY0LW5v
bmUtbGludXgtYW5kcm9pZCIgKQotZWxzZWlmKCBBTkRST0lEX0FCSSBTVFJFUVVBTCAibWlwczY0
IiApCi0gc2V0KCBNSVBTNjQgdHJ1ZSApCi0gc2V0KCBBTkRST0lEX05ES19BQklfTkFNRSAibWlw
czY0IiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAibWlwczY0IiApCi0gc2V0KCBBTkRST0lE
X0xMVk1fVFJJUExFICJtaXBzNjRlbC1ub25lLWxpbnV4LWFuZHJvaWQiICkKLSBzZXQoIENNQUtF
X1NZU1RFTV9QUk9DRVNTT1IgIm1pcHM2NCIgKQotZWxzZWlmKCBBTkRST0lEX0FCSSBTVFJFUVVB
TCAibWlwcyIgKQotIHNldCggTUlQUyB0cnVlICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1F
ICJtaXBzIiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAibWlwcyIgKQotIHNldCggQU5EUk9J
RF9MTFZNX1RSSVBMRSAibWlwc2VsLW5vbmUtbGludXgtYW5kcm9pZCIgKQotIHNldCggQ01BS0Vf
U1lTVEVNX1BST0NFU1NPUiAibWlwcyIgKQotZWxzZWlmKCBBTkRST0lEX0FCSSBTVFJFUVVBTCAi
YXJtNjQtdjhhIiApCi0gc2V0KCBBUk02NF9WOEEgdHJ1ZSApCi0gc2V0KCBBTkRST0lEX05ES19B
QklfTkFNRSAiYXJtNjQtdjhhIiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAiYXJtNjQiICkK
LSBzZXQoIEFORFJPSURfTExWTV9UUklQTEUgImFhcmNoNjQtbm9uZS1saW51eC1hbmRyb2lkIiAp
Ci0gc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJhYXJjaDY0IiApCi0gc2V0KCBWRlBWMyB0
cnVlICkKLSBzZXQoIE5FT04gdHJ1ZSApCi1lbHNlaWYoIEFORFJPSURfQUJJIFNUUkVRVUFMICJh
cm1lYWJpIiApCi0gc2V0KCBBUk1FQUJJIHRydWUgKQotIHNldCggQU5EUk9JRF9OREtfQUJJX05B
TUUgImFybWVhYmkiICkKLSBzZXQoIEFORFJPSURfQVJDSF9OQU1FICJhcm0iICkKLSBzZXQoIEFO
RFJPSURfTExWTV9UUklQTEUgImFybXY1dGUtbm9uZS1saW51eC1hbmRyb2lkZWFiaSIgKQotIHNl
dCggQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAiYXJtdjV0ZSIgKQotZWxzZWlmKCBBTkRST0lEX0FC
SSBTVFJFUVVBTCAiYXJtZWFiaS12NiB3aXRoIFZGUCIgKQotIHNldCggQVJNRUFCSV9WNiB0cnVl
ICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJhcm1lYWJpIiApCi0gc2V0KCBBTkRST0lE
X0FSQ0hfTkFNRSAiYXJtIiApCi0gc2V0KCBBTkRST0lEX0xMVk1fVFJJUExFICJhcm12NXRlLW5v
bmUtbGludXgtYW5kcm9pZGVhYmkiICkKLSBzZXQoIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgImFy
bXY2IiApCi0gIyBuZWVkIGFsd2F5cyBmYWxsYmFjayB0byBvbGRlciBwbGF0Zm9ybQotIHNldCgg
QVJNRUFCSSB0cnVlICkKLWVsc2VpZiggQU5EUk9JRF9BQkkgU1RSRVFVQUwgImFybWVhYmktdjdh
IikKLSBzZXQoIEFSTUVBQklfVjdBIHRydWUgKQotIHNldCggQU5EUk9JRF9OREtfQUJJX05BTUUg
ImFybWVhYmktdjdhIiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAiYXJtIiApCi0gc2V0KCBB
TkRST0lEX0xMVk1fVFJJUExFICJhcm12Ny1ub25lLWxpbnV4LWFuZHJvaWRlYWJpIiApCi0gc2V0
KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJhcm12Ny1hIiApCi1lbHNlaWYoIEFORFJPSURfQUJJ
IFNUUkVRVUFMICJhcm1lYWJpLXY3YSB3aXRoIFZGUFYzIiApCi0gc2V0KCBBUk1FQUJJX1Y3QSB0
cnVlICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJhcm1lYWJpLXY3YSIgKQotIHNldCgg
QU5EUk9JRF9BUkNIX05BTUUgImFybSIgKQotIHNldCggQU5EUk9JRF9MTFZNX1RSSVBMRSAiYXJt
djctbm9uZS1saW51eC1hbmRyb2lkZWFiaSIgKQotIHNldCggQ01BS0VfU1lTVEVNX1BST0NFU1NP
UiAiYXJtdjctYSIgKQotIHNldCggVkZQVjMgdHJ1ZSApCi1lbHNlaWYoIEFORFJPSURfQUJJIFNU
UkVRVUFMICJhcm1lYWJpLXY3YSB3aXRoIE5FT04iICkKLSBzZXQoIEFSTUVBQklfVjdBIHRydWUg
KQotIHNldCggQU5EUk9JRF9OREtfQUJJX05BTUUgImFybWVhYmktdjdhIiApCi0gc2V0KCBBTkRS
T0lEX0FSQ0hfTkFNRSAiYXJtIiApCi0gc2V0KCBBTkRST0lEX0xMVk1fVFJJUExFICJhcm12Ny1u
b25lLWxpbnV4LWFuZHJvaWRlYWJpIiApCi0gc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJh
cm12Ny1hIiApCi0gc2V0KCBWRlBWMyB0cnVlICkKLSBzZXQoIE5FT04gdHJ1ZSApCi1lbHNlKCkK
LSBtZXNzYWdlKCBTRU5EX0VSUk9SICJVbmtub3duIEFORFJPSURfQUJJPVwiJHtBTkRST0lEX0FC
SX1cIiBpcyBzcGVjaWZpZWQuIiApCi1lbmRpZigpCi0KLWlmKCBDTUFLRV9CSU5BUllfRElSIEFO
RCBFWElTVFMgIiR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01h
a2VTeXN0ZW0uY21ha2UiICkKLSAjIHJlYWxseSBkaXJ0eSBoYWNrCi0gIyBpdCBpcyBub3QgcG9z
c2libGUgdG8gY2hhbmdlIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgYWZ0ZXIgdGhlIGZpcnN0IHJ1
bi4uLgotIGZpbGUoIEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElS
RUNUT1JZfS9DTWFrZVN5c3RlbS5jbWFrZSIgIlNFVChDTUFLRV9TWVNURU1fUFJPQ0VTU09SIFwi
JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfVwiKVxuIiApCi1lbmRpZigpCi0KLWlmKCBBTkRST0lE
X0FSQ0hfTkFNRSBTVFJFUVVBTCAiYXJtIiBBTkQgTk9UIEFSTUVBQklfVjYgKQotIF9fSU5JVF9W
QVJJQUJMRSggQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgVkFMVUVTIE9GRiApCi0gc2V0KCBBTkRS
T0lEX0ZPUkNFX0FSTV9CVUlMRCAke0FORFJPSURfRk9SQ0VfQVJNX0JVSUxEfSBDQUNIRSBCT09M
ICJVc2UgMzItYml0IEFSTSBpbnN0cnVjdGlvbnMgaW5zdGVhZCBvZiBUaHVtYi0xIiBGT1JDRSAp
Ci0gbWFya19hc19hZHZhbmNlZCggQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgKQotZWxzZSgpCi0g
dW5zZXQoIEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEIENBQ0hFICkKLWVuZGlmKCkKLQotIyBjaG9v
c2UgdG9vbGNoYWluCi1pZiggQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSApCi0gbGlzdCggRklORCBf
X2F2YWlsYWJsZVRvb2xjaGFpbnMgIiR7QU5EUk9JRF9UT09MQ0hBSU5fTkFNRX0iIF9fdG9vbGNo
YWluSWR4ICkKLSBpZiggX190b29sY2hhaW5JZHggRVFVQUwgLTEgKQotICBsaXN0KCBTT1JUIF9f
YXZhaWxhYmxlVG9vbGNoYWlucyApCi0gIHN0cmluZyggUkVQTEFDRSAiOyIgIlxuICAqICIgdG9v
bGNoYWluc19saXN0ICIke19fYXZhaWxhYmxlVG9vbGNoYWluc30iICkKLSAgc2V0KCB0b29sY2hh
aW5zX2xpc3QgIiAgKiAke3Rvb2xjaGFpbnNfbGlzdH0iKQotICBtZXNzYWdlKCBGQVRBTF9FUlJP
UiAiU3BlY2lmaWVkIHRvb2xjaGFpbiBcIiR7QU5EUk9JRF9UT09MQ0hBSU5fTkFNRX1cIiBpcyBt
aXNzaW5nIGluIHlvdXIgTkRLIG9yIGJyb2tlbi4gUGxlYXNlIHZlcmlmeSB0aGF0IHlvdXIgTkRL
IGlzIHdvcmtpbmcgb3Igc2VsZWN0IGFub3RoZXIgY29tcGlsZXIgdG9vbGNoYWluLgotVG8gY29u
ZmlndXJlIHRoZSB0b29sY2hhaW4gc2V0IENNYWtlIHZhcmlhYmxlIEFORFJPSURfVE9PTENIQUlO
X05BTUUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuJHt0b29sY2hhaW5zX2xpc3R9
XG4iICkKLSBlbmRpZigpCi0gbGlzdCggR0VUIF9fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgJHtf
X3Rvb2xjaGFpbklkeH0gX190b29sY2hhaW5BcmNoICkKLSBpZiggTk9UIF9fdG9vbGNoYWluQXJj
aCBTVFJFUVVBTCBBTkRST0lEX0FSQ0hfTkFNRSApCi0gIG1lc3NhZ2UoIFNFTkRfRVJST1IgIlNl
bGVjdGVkIHRvb2xjaGFpbiBcIiR7QU5EUk9JRF9UT09MQ0hBSU5fTkFNRX1cIiBpcyBub3QgYWJs
ZSB0byBjb21waWxlIGJpbmFyaWVzIGZvciB0aGUgXCIke0FORFJPSURfQVJDSF9OQU1FfVwiIHBs
YXRmb3JtLiIgKQotIGVuZGlmKCkKLWVsc2UoKQotIHNldCggX190b29sY2hhaW5JZHggLTEgKQot
IHNldCggX19hcHBsaWNhYmxlVG9vbGNoYWlucyAiIiApCi0gc2V0KCBfX3Rvb2xjaGFpbk1heFZl
cnNpb24gIjAuMC4wIiApCi0gbGlzdCggTEVOR1RIIF9fYXZhaWxhYmxlVG9vbGNoYWlucyBfX2F2
YWlsYWJsZVRvb2xjaGFpbnNDb3VudCApCi0gbWF0aCggRVhQUiBfX2F2YWlsYWJsZVRvb2xjaGFp
bnNDb3VudCAiJHtfX2F2YWlsYWJsZVRvb2xjaGFpbnNDb3VudH0tMSIgKQotIGZvcmVhY2goIF9f
aWR4IFJBTkdFICR7X19hdmFpbGFibGVUb29sY2hhaW5zQ291bnR9ICkKLSAgbGlzdCggR0VUIF9f
YXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgJHtfX2lkeH0gX190b29sY2hhaW5BcmNoICkKLSAgaWYo
IF9fdG9vbGNoYWluQXJjaCBTVFJFUVVBTCBBTkRST0lEX0FSQ0hfTkFNRSApCi0gICBsaXN0KCBH
RVQgX19hdmFpbGFibGVUb29sY2hhaW5Db21waWxlclZlcnNpb25zICR7X19pZHh9IF9fdG9vbGNo
YWluVmVyc2lvbiApCi0gICBzdHJpbmcoIFJFUExBQ0UgIngiICI5OSIgX190b29sY2hhaW5WZXJz
aW9uICIke19fdG9vbGNoYWluVmVyc2lvbn0iKQotICAgaWYoIF9fdG9vbGNoYWluVmVyc2lvbiBW
RVJTSU9OX0dSRUFURVIgX190b29sY2hhaW5NYXhWZXJzaW9uICkKLSAgICBzZXQoIF9fdG9vbGNo
YWluTWF4VmVyc2lvbiAiJHtfX3Rvb2xjaGFpblZlcnNpb259IiApCi0gICAgc2V0KCBfX3Rvb2xj
aGFpbklkeCAke19faWR4fSApCi0gICBlbmRpZigpCi0gIGVuZGlmKCkKLSBlbmRmb3JlYWNoKCkK
LSB1bnNldCggX19hdmFpbGFibGVUb29sY2hhaW5zQ291bnQgKQotIHVuc2V0KCBfX3Rvb2xjaGFp
bk1heFZlcnNpb24gKQotIHVuc2V0KCBfX3Rvb2xjaGFpblZlcnNpb24gKQotZW5kaWYoKQotdW5z
ZXQoIF9fdG9vbGNoYWluQXJjaCApCi1pZiggX190b29sY2hhaW5JZHggRVFVQUwgLTEgKQotIG1l
c3NhZ2UoIEZBVEFMX0VSUk9SICJObyBvbmUgb2YgYXZhaWxhYmxlIGNvbXBpbGVyIHRvb2xjaGFp
bnMgaXMgYWJsZSB0byBjb21waWxlIGZvciAke0FORFJPSURfQVJDSF9OQU1FfSBwbGF0Zm9ybS4i
ICkKLWVuZGlmKCkKLWxpc3QoIEdFVCBfX2F2YWlsYWJsZVRvb2xjaGFpbnMgJHtfX3Rvb2xjaGFp
bklkeH0gQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSApCi1saXN0KCBHRVQgX19hdmFpbGFibGVUb29s
Y2hhaW5NYWNoaW5lcyAke19fdG9vbGNoYWluSWR4fSBBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5F
X05BTUUgKQotbGlzdCggR0VUIF9fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGlsZXJWZXJzaW9ucyAk
e19fdG9vbGNoYWluSWR4fSBBTkRST0lEX0NPTVBJTEVSX1ZFUlNJT04gKQotCi11bnNldCggX190
b29sY2hhaW5JZHggKQotdW5zZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWlucyApCi11bnNldCggX19h
dmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyApCi11bnNldCggX19hdmFpbGFibGVUb29sY2hhaW5B
cmNocyApCi11bnNldCggX19hdmFpbGFibGVUb29sY2hhaW5Db21waWxlclZlcnNpb25zICkKLQot
IyBjaG9vc2UgbmF0aXZlIEFQSSBsZXZlbAotX19JTklUX1ZBUklBQkxFKCBBTkRST0lEX05BVElW
RV9BUElfTEVWRUwgRU5WX0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTCBBTkRST0lEX0FQSV9MRVZF
TCBFTlZfQU5EUk9JRF9BUElfTEVWRUwgQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTl9BUElf
TEVWRUwgQU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUxfJHtBTkRST0lEX0FSQ0hfTkFNRX0g
QU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUwgKQotc3RyaW5nKCBSRVBMQUNFICJhbmRyb2lk
LSIgIiIgQU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMICIke0FORFJPSURfTkFUSVZFX0FQSV9MRVZF
TH0iICkKLXN0cmluZyggU1RSSVAgIiR7QU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMfSIgQU5EUk9J
RF9OQVRJVkVfQVBJX0xFVkVMICkKLSMgYWRqdXN0IEFQSSBsZXZlbAotc2V0KCBfX3JlYWxfYXBp
X2xldmVsICR7QU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUxfJHtBTkRST0lEX0FSQ0hfTkFN
RX19ICkKLWZvcmVhY2goIF9fbGV2ZWwgJHtBTkRST0lEX1NVUFBPUlRFRF9OQVRJVkVfQVBJX0xF
VkVMU30gKQotIGlmKCAoX19sZXZlbCBMRVNTIEFORFJPSURfTkFUSVZFX0FQSV9MRVZFTCBPUiBf
X2xldmVsIFNUUkVRVUFMIEFORFJPSURfTkFUSVZFX0FQSV9MRVZFTCkgQU5EIE5PVCBfX2xldmVs
IExFU1MgX19yZWFsX2FwaV9sZXZlbCApCi0gIHNldCggX19yZWFsX2FwaV9sZXZlbCAke19fbGV2
ZWx9ICkKLSBlbmRpZigpCi1lbmRmb3JlYWNoKCkKLWlmKCBfX3JlYWxfYXBpX2xldmVsIEFORCBO
T1QgQU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMIFNUUkVRVUFMIF9fcmVhbF9hcGlfbGV2ZWwgKQot
IG1lc3NhZ2UoIFNUQVRVUyAiQWRqdXN0aW5nIEFuZHJvaWQgQVBJIGxldmVsICdhbmRyb2lkLSR7
QU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMfScgdG8gJ2FuZHJvaWQtJHtfX3JlYWxfYXBpX2xldmVs
fSciKQotIHNldCggQU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMICR7X19yZWFsX2FwaV9sZXZlbH0g
KQotZW5kaWYoKQotdW5zZXQoX19yZWFsX2FwaV9sZXZlbCkKLSMgdmFsaWRhdGUKLWxpc3QoIEZJ
TkQgQU5EUk9JRF9TVVBQT1JURURfTkFUSVZFX0FQSV9MRVZFTFMgIiR7QU5EUk9JRF9OQVRJVkVf
QVBJX0xFVkVMfSIgX19sZXZlbElkeCApCi1pZiggX19sZXZlbElkeCBFUVVBTCAtMSApCi0gbWVz
c2FnZSggU0VORF9FUlJPUiAiU3BlY2lmaWVkIEFuZHJvaWQgbmF0aXZlIEFQSSBsZXZlbCAnYW5k
cm9pZC0ke0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTH0nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91
ciBOREsvdG9vbGNoYWluLiIgKQotZWxzZSgpCi0gaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsg
KQotICBfX0RFVEVDVF9OQVRJVkVfQVBJX0xFVkVMKCBfX3JlYWxBcGlMZXZlbCAiJHtBTkRST0lE
X05ES30vcGxhdGZvcm1zL2FuZHJvaWQtJHtBTkRST0lEX05BVElWRV9BUElfTEVWRUx9L2FyY2gt
JHtBTkRST0lEX0FSQ0hfTkFNRX0vdXNyL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaCIgKQot
ICBpZiggTk9UIF9fcmVhbEFwaUxldmVsIEVRVUFMIEFORFJPSURfTkFUSVZFX0FQSV9MRVZFTCBB
TkQgTk9UIF9fcmVhbEFwaUxldmVsIEdSRUFURVIgOTAwMCApCi0gICBtZXNzYWdlKCBTRU5EX0VS
Uk9SICJTcGVjaWZpZWQgQW5kcm9pZCBBUEkgbGV2ZWwgKCR7QU5EUk9JRF9OQVRJVkVfQVBJX0xF
VkVMfSkgZG9lcyBub3QgbWF0Y2ggdG8gdGhlIGxldmVsIGZvdW5kICgke19fcmVhbEFwaUxldmVs
fSkuIFByb2JhYmx5IHlvdXIgY29weSBvZiBOREsgaXMgYnJva2VuLiIgKQotICBlbmRpZigpCi0g
IHVuc2V0KCBfX3JlYWxBcGlMZXZlbCApCi0gZW5kaWYoKQotIHNldCggQU5EUk9JRF9OQVRJVkVf
QVBJX0xFVkVMICIke0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTH0iIENBQ0hFIFNUUklORyAiQW5k
cm9pZCBBUEkgbGV2ZWwgZm9yIG5hdGl2ZSBjb2RlIiBGT1JDRSApCi0gc2V0KCBDTUFLRV9BTkRS
T0lEX0FQSSAke0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTH0gKQotIGlmKCBDTUFLRV9WRVJTSU9O
IFZFUlNJT05fR1JFQVRFUiAiMi44IiApCi0gIGxpc3QoIFNPUlQgQU5EUk9JRF9TVVBQT1JURURf
TkFUSVZFX0FQSV9MRVZFTFMgKQotICBzZXRfcHJvcGVydHkoIENBQ0hFIEFORFJPSURfTkFUSVZF
X0FQSV9MRVZFTCBQUk9QRVJUWSBTVFJJTkdTICR7QU5EUk9JRF9TVVBQT1JURURfTkFUSVZFX0FQ
SV9MRVZFTFN9ICkKLSBlbmRpZigpCi1lbmRpZigpCi11bnNldCggX19sZXZlbElkeCApCi0KLQot
IyByZW1lbWJlciB0YXJnZXQgQUJJCi1zZXQoIEFORFJPSURfQUJJICIke0FORFJPSURfQUJJfSIg
Q0FDSEUgU1RSSU5HICJUaGUgdGFyZ2V0IEFCSSBmb3IgQW5kcm9pZC4gSWYgYXJtLCB0aGVuIGFy
bWVhYmktdjdhIGlzIHJlY29tbWVuZGVkIGZvciBoYXJkd2FyZSBmbG9hdGluZyBwb2ludC4iIEZP
UkNFICkKLWlmKCBDTUFLRV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUiAiMi44IiApCi0gbGlzdCgg
U09SVCBBTkRST0lEX1NVUFBPUlRFRF9BQklTXyR7QU5EUk9JRF9BUkNIX05BTUV9ICkKLSBzZXRf
cHJvcGVydHkoIENBQ0hFIEFORFJPSURfQUJJIFBST1BFUlRZIFNUUklOR1MgJHtBTkRST0lEX1NV
UFBPUlRFRF9BQklTXyR7QU5EUk9JRF9BUkNIX05BTUV9fSApCi1lbmRpZigpCi0KLQotIyBydW50
aW1lIGNob2ljZSAoU1RMLCBydHRpLCBleGNlcHRpb25zKQotaWYoIE5PVCBBTkRST0lEX1NUTCAp
Ci0gIHNldCggQU5EUk9JRF9TVEwgZ251c3RsX3N0YXRpYyApCi1lbmRpZigpCi1zZXQoIEFORFJP
SURfU1RMICIke0FORFJPSURfU1RMfSIgQ0FDSEUgU1RSSU5HICJDKysgcnVudGltZSIgKQotc2V0
KCBBTkRST0lEX1NUTF9GT1JDRV9GRUFUVVJFUyBPTiBDQUNIRSBCT09MICJhdXRvbWF0aWNhbGx5
IGNvbmZpZ3VyZSBydHRpIGFuZCBleGNlcHRpb25zIHN1cHBvcnQgYmFzZWQgb24gQysrIHJ1bnRp
bWUiICkKLW1hcmtfYXNfYWR2YW5jZWQoIEFORFJPSURfU1RMIEFORFJPSURfU1RMX0ZPUkNFX0ZF
QVRVUkVTICkKLQotaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgKQotIGlmKCBOT1QgIiR7QU5E
Uk9JRF9TVEx9IiBNQVRDSEVTICJeKG5vbmV8c3lzdGVtfHN5c3RlbV9yZXxnYWJpXFwrXFwrX3N0
YXRpY3xnYWJpXFwrXFwrX3NoYXJlZHxzdGxwb3J0X3N0YXRpY3xzdGxwb3J0X3NoYXJlZHxnbnVz
dGxfc3RhdGljfGdudXN0bF9zaGFyZWQpJCIpCi0gIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJBTkRS
T0lEX1NUTCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSBcIiR7QU5EUk9JRF9TVEx9XCIuCi1UaGUg
cG9zc2libGUgdmFsdWVzIGFyZToKLSAgbm9uZSAgICAgICAgICAgLT4gRG8gbm90IGNvbmZpZ3Vy
ZSB0aGUgcnVudGltZS4KLSAgc3lzdGVtICAgICAgICAgLT4gVXNlIHRoZSBkZWZhdWx0IG1pbmlt
YWwgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcnkuCi0gIHN5c3RlbV9yZSAgICAgIC0+IFNhbWUg
YXMgc3lzdGVtIGJ1dCB3aXRoIHJ0dGkgYW5kIGV4Y2VwdGlvbnMuCi0gIGdhYmkrK19zdGF0aWMg
IC0+IFVzZSB0aGUgR0FiaSsrIHJ1bnRpbWUgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSAgZ2FiaSsr
X3NoYXJlZCAgLT4gVXNlIHRoZSBHQWJpKysgcnVudGltZSBhcyBhIHNoYXJlZCBsaWJyYXJ5Lgot
ICBzdGxwb3J0X3N0YXRpYyAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBhIHN0YXRpYyBs
aWJyYXJ5LgotICBzdGxwb3J0X3NoYXJlZCAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotICBnbnVzdGxfc3RhdGljICAtPiAoZGVmYXVsdCkgVXNlIHRoZSBH
TlUgU1RMIGFzIGEgc3RhdGljIGxpYnJhcnkuCi0gIGdudXN0bF9zaGFyZWQgIC0+IFVzZSB0aGUg
R05VIFNUTCBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotIiApCi0gZW5kaWYoKQotZWxzZWlmKCBCVUlM
RF9XSVRIX1NUQU5EQUxPTkVfVE9PTENIQUlOICkKLSBpZiggTk9UICIke0FORFJPSURfU1RMfSIg
TUFUQ0hFUyAiXihub25lfGdudXN0bF9zdGF0aWN8Z251c3RsX3NoYXJlZCkkIikKLSAgbWVzc2Fn
ZSggRkFUQUxfRVJST1IgIkFORFJPSURfU1RMIGlzIHNldCB0byBpbnZhbGlkIHZhbHVlIFwiJHtB
TkRST0lEX1NUTH1cIi4KLVRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgotICBub25lICAgICAgICAg
ICAtPiBEbyBub3QgY29uZmlndXJlIHRoZSBydW50aW1lLgotICBnbnVzdGxfc3RhdGljICAtPiAo
ZGVmYXVsdCkgVXNlIHRoZSBHTlUgU1RMIGFzIGEgc3RhdGljIGxpYnJhcnkuCi0gIGdudXN0bF9z
aGFyZWQgIC0+IFVzZSB0aGUgR05VIFNUTCBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotIiApCi0gZW5k
aWYoKQotZW5kaWYoKQotCi11bnNldCggQU5EUk9JRF9SVFRJICkKLXVuc2V0KCBBTkRST0lEX0VY
Q0VQVElPTlMgKQotdW5zZXQoIEFORFJPSURfU1RMX0lOQ0xVREVfRElSUyApCi11bnNldCggX19s
aWJzdGwgKQotdW5zZXQoIF9fbGlic3VwY3h4ICkKLQotaWYoIE5PVCBfQ01BS0VfSU5fVFJZX0NP
TVBJTEUgQU5EIEFORFJPSURfTkRLX1JFTEVBU0UgU1RSRVFVQUwgInI3YiIgQU5EIEFSTUVBQklf
VjdBIEFORCBOT1QgVkZQVjMgQU5EIEFORFJPSURfU1RMIE1BVENIRVMgImdudXN0bCIgKQotIG1l
c3NhZ2UoIFdBUk5JTkcgICJUaGUgR05VIFNUTCBhcm1lYWJpLXY3YSBiaW5hcmllcyBmcm9tIE5E
SyByN2IgY2FuIGNyYXNoIG5vbi1ORU9OIGRldmljZXMuIFRoZSBmaWxlcyBwcm92aWRlZCB3aXRo
IE5ESyByN2Igd2VyZSBub3QgY29uZmlndXJlZCBwcm9wZXJseSwgcmVzdWx0aW5nIGluIGNyYXNo
ZXMgb24gVGVncmEyLWJhc2VkIGRldmljZXMgYW5kIG90aGVycyB3aGVuIHRyeWluZyB0byB1c2Ug
Y2VydGFpbiBmbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgKGUuZy4sIGNvc2YsIHNpbmYsIGV4cGYp
LgotWW91IGFyZSBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBzd2l0Y2ggdG8gYW5vdGhlciBOREsg
cmVsZWFzZS4KLSIgKQotZW5kaWYoKQotCi1pZiggTk9UIF9DTUFLRV9JTl9UUllfQ09NUElMRSBB
TkQgWDg2IEFORCBBTkRST0lEX1NUTCBNQVRDSEVTICJnbnVzdGwiIEFORCBBTkRST0lEX05ES19S
RUxFQVNFIFNUUkVRVUFMICJyNiIgKQotICBtZXNzYWdlKCBXQVJOSU5HICAiVGhlIHg4NiBzeXN0
ZW0gaGVhZGVyIGZpbGUgZnJvbSBOREsgcjYgaGFzIGluY29ycmVjdCBkZWZpbml0aW9uIGZvciBw
dHJkaWZmX3QuIFlvdSBhcmUgcmVjb21tZW5kZWQgdG8gdXBncmFkZSB0byBhIG5ld2VyIE5ESyBy
ZWxlYXNlIG9yIG1hbnVhbGx5IHBhdGNoIHRoZSBoZWFkZXI6Ci1TZWUgaHR0cHM6Ly9hbmRyb2lk
Lmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZGV2ZWxvcG1lbnQuZ2l0IGY5MDdmNGY5ZDRlNTZj
Y2M4MDkzZGY2ZmVlNTQ0NTRiOGJjYWI2YzIKLSAgZGlmZiAtLWdpdCBhL25kay9wbGF0Zm9ybXMv
YW5kcm9pZC05L2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL25kay9wbGF0Zm9y
bXMvYW5kcm9pZC05L2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaAotICBpbmRleCA1
ZTI4YzY0Li42NTg5MmExIDEwMDY0NAotICAtLS0gYS9uZGsvcGxhdGZvcm1zL2FuZHJvaWQtOS9h
cmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKLSAgKysrIGIvbmRrL3BsYXRmb3Jtcy9h
bmRyb2lkLTkvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCi0gIEBAIC01MSw3ICs1
MSwxMSBAQCB0eXBlZGVmIGxvbmcgaW50ICAgICAgIHNzaXplX3Q7Ci0gICAjZW5kaWYKLSAgICNp
Zm5kZWYgX1BUUkRJRkZfVAotICAgI2RlZmluZSBfUFRSRElGRl9UCi0gIC10eXBlZGVmIGxvbmcg
ICAgICAgICAgIHB0cmRpZmZfdDsKLSAgKyMgIGlmZGVmIF9fQU5EUk9JRF9fCi0gICsgICAgIHR5
cGVkZWYgaW50ICAgICAgICAgICAgcHRyZGlmZl90OwotICArIyAgZWxzZQotICArICAgICB0eXBl
ZGVmIGxvbmcgICAgICAgICAgIHB0cmRpZmZfdDsKLSAgKyMgIGVuZGlmCi0gICAjZW5kaWYKLSIg
KQotZW5kaWYoKQotCi0KLSMgc2V0dXAgcGF0aHMgYW5kIFNUTCBmb3Igc3RhbmRhbG9uZSB0b29s
Y2hhaW4KLWlmKCBCVUlMRF9XSVRIX1NUQU5EQUxPTkVfVE9PTENIQUlOICkKLSBzZXQoIEFORFJP
SURfVE9PTENIQUlOX1JPT1QgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0iICkKLSBz
ZXQoIEFORFJPSURfQ0xBTkdfVE9PTENIQUlOX1JPT1QgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RP
T0xDSEFJTn0iICkKLSBzZXQoIEFORFJPSURfU1lTUk9PVCAiJHtBTkRST0lEX1NUQU5EQUxPTkVf
VE9PTENIQUlOfS9zeXNyb290IiApCi0KLSBpZiggTk9UIEFORFJPSURfU1RMIFNUUkVRVUFMICJu
b25lIiApCi0gIHNldCggQU5EUk9JRF9TVExfSU5DTFVERV9ESVJTICIke0FORFJPSURfU1RBTkRB
TE9ORV9UT09MQ0hBSU59L2luY2x1ZGUvYysrLyR7QU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OfSIg
KQotICBpZiggTk9UIEVYSVNUUyAiJHtBTkRST0lEX1NUTF9JTkNMVURFX0RJUlN9IiApCi0gICAj
IG9sZCBsb2NhdGlvbiAoIHByZSByOGMgKQotICAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJ
UlMgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0vJHtBTkRST0lEX1RPT0xDSEFJTl9N
QUNISU5FX05BTUV9L2luY2x1ZGUvYysrLyR7QU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OfSIgKQot
ICBlbmRpZigpCi0gIGlmKCBBUk1FQUJJX1Y3QSBBTkQgRVhJU1RTICIke0FORFJPSURfU1RMX0lO
Q0xVREVfRElSU30vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9LyR7Q01BS0VfU1lT
VEVNX1BST0NFU1NPUn0vYml0cyIgKQotICAgbGlzdCggQVBQRU5EIEFORFJPSURfU1RMX0lOQ0xV
REVfRElSUyAiJHtBTkRST0lEX1NUTF9JTkNMVURFX0RJUlN9LyR7QU5EUk9JRF9UT09MQ0hBSU5f
TUFDSElORV9OQU1FfS8ke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9IiApCi0gIGVsc2VpZiggQVJN
RUFCSSBBTkQgTk9UIEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEIEFORCBFWElTVFMgIiR7QU5EUk9J
RF9TVExfSU5DTFVERV9ESVJTfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vdGh1
bWIvYml0cyIgKQotICAgbGlzdCggQVBQRU5EIEFORFJPSURfU1RMX0lOQ0xVREVfRElSUyAiJHtB
TkRST0lEX1NUTF9JTkNMVURFX0RJUlN9LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1F
fS90aHVtYiIgKQotICBlbHNlKCkKLSAgIGxpc3QoIEFQUEVORCBBTkRST0lEX1NUTF9JTkNMVURF
X0RJUlMgIiR7QU5EUk9JRF9TVExfSU5DTFVERV9ESVJTfS8ke0FORFJPSURfVE9PTENIQUlOX01B
Q0hJTkVfTkFNRX0iICkKLSAgZW5kaWYoKQotICAjIGFsd2F5cyBzZWFyY2ggc3RhdGljIEdOVSBT
VEwgdG8gZ2V0IHRoZSBsb2NhdGlvbiBvZiBsaWJzdXBjKysuYQotICBpZiggQVJNRUFCSV9WN0Eg
QU5EIE5PVCBBTkRST0lEX0ZPUkNFX0FSTV9CVUlMRCBBTkQgRVhJU1RTICIke0FORFJPSURfU1RB
TkRBTE9ORV9UT09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIv
JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfS90aHVtYi9saWJzdGRjKysuYSIgKQotICAgc2V0KCBf
X2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9PTENI
QUlOX01BQ0hJTkVfTkFNRX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0vdGh1bWIiICkK
LSAgZWxzZWlmKCBBUk1FQUJJX1Y3QSBBTkQgRVhJU1RTICIke0FORFJPSURfU1RBTkRBTE9ORV9U
T09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIvJHtDTUFLRV9T
WVNURU1fUFJPQ0VTU09SfS9saWJzdGRjKysuYSIgKQotICAgc2V0KCBfX2xpYnN0bCAiJHtBTkRS
T0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFN
RX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0iICkKLSAgZWxzZWlmKCBBUk1FQUJJIEFO
RCBOT1QgQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgQU5EIEVYSVNUUyAiJHtBTkRST0lEX1NUQU5E
QUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliL3Ro
dW1iL2xpYnN0ZGMrKy5hIiApCi0gICBzZXQoIF9fbGlic3RsICIke0FORFJPSURfU1RBTkRBTE9O
RV9UT09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIvdGh1bWIi
ICkKLSAgZWxzZWlmKCBFWElTVFMgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0vJHtB
TkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9L2xpYi9saWJzdGRjKysuYSIgKQotICAgc2V0
KCBfX2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9P
TENIQUlOX01BQ0hJTkVfTkFNRX0vbGliIiApCi0gIGVuZGlmKCkKLSAgaWYoIF9fbGlic3RsICkK
LSAgIHNldCggX19saWJzdXBjeHggIiR7X19saWJzdGx9L2xpYnN1cGMrKy5hIiApCi0gICBzZXQo
IF9fbGlic3RsICAgICIke19fbGlic3RsfS9saWJzdGRjKysuYSIgKQotICBlbmRpZigpCi0gIGlm
KCBOT1QgRVhJU1RTICIke19fbGlic3VwY3h4fSIgKQotICAgbWVzc2FnZSggRkFUQUxfRVJST1Ig
IlRoZSByZXF1aXJlZCBsaWJzdGRzdXBjKysuYSBpcyBtaXNzaW5nIGluIHlvdXIgc3RhbmRhbG9u
ZSB0b29sY2hhaW4uCi0gVXN1YWxseSBpdCBoYXBwZW5zIGJlY2F1c2Ugb2YgYnVnIGluIG1ha2Ut
c3RhbmRhbG9uZS10b29sY2hhaW4uc2ggc2NyaXB0IGZyb20gTkRLIHI3LCByN2IgYW5kIHI3Yy4K
LSBZb3UgbmVlZCB0byBlaXRoZXIgdXBncmFkZSB0byBuZXdlciBOREsgb3IgbWFudWFsbHkgY29w
eQotICAgICAkQU5EUk9JRF9OREsvc291cmNlcy9jeHgtc3RsL2dudS1saWJzdGRjKysvbGlicy8k
e0FORFJPSURfTkRLX0FCSV9OQU1FfS9saWJzdXBjKysuYQotIHRvCi0gICAgICR7X19saWJzdXBj
eHh9Ci0gICAiICkKLSAgZW5kaWYoKQotICBpZiggQU5EUk9JRF9TVEwgU1RSRVFVQUwgImdudXN0
bF9zaGFyZWQiICkKLSAgIGlmKCBBUk1FQUJJX1Y3QSBBTkQgRVhJU1RTICIke0FORFJPSURfU1RB
TkRBTE9ORV9UT09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIv
JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfS9saWJnbnVzdGxfc2hhcmVkLnNvIiApCi0gICAgc2V0
KCBfX2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9P
TENIQUlOX01BQ0hJTkVfTkFNRX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0vbGliZ251
c3RsX3NoYXJlZC5zbyIgKQotICAgZWxzZWlmKCBBUk1FQUJJIEFORCBOT1QgQU5EUk9JRF9GT1JD
RV9BUk1fQlVJTEQgQU5EIEVYSVNUUyAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8k
e0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliL3RodW1iL2xpYmdudXN0bF9zaGFy
ZWQuc28iICkKLSAgICBzZXQoIF9fbGlic3RsICIke0FORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hB
SU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIvdGh1bWIvbGliZ251c3Rs
X3NoYXJlZC5zbyIgKQotICAgZWxzZWlmKCBFWElTVFMgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RP
T0xDSEFJTn0vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9L2xpYi9saWJnbnVzdGxf
c2hhcmVkLnNvIiApCi0gICAgc2V0KCBfX2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9P
TENIQUlOfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliL2xpYmdudXN0bF9z
aGFyZWQuc28iICkKLSAgIGVuZGlmKCkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLWVuZGlmKCkKLQot
IyBjbGFuZwotaWYoICIke0FORFJPSURfVE9PTENIQUlOX05BTUV9IiBTVFJFUVVBTCAic3RhbmRh
bG9uZS1jbGFuZyIgKQotIHNldCggQU5EUk9JRF9DT01QSUxFUl9JU19DTEFORyAxICkKLSBleGVj
dXRlX3Byb2Nlc3MoIENPTU1BTkQgIiR7QU5EUk9JRF9DTEFOR19UT09MQ0hBSU5fUk9PVH0vYmlu
L2NsYW5nJHtUT09MX09TX1NVRkZJWH0iIC0tdmVyc2lvbiBPVVRQVVRfVkFSSUFCTEUgQU5EUk9J
RF9DTEFOR19WRVJTSU9OIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFICkKLSBzdHJp
bmcoIFJFR0VYIE1BVENIICJbMC05XStbLl1bMC05XSsiIEFORFJPSURfQ0xBTkdfVkVSU0lPTiAi
JHtBTkRST0lEX0NMQU5HX1ZFUlNJT059IikKLWVsc2VpZiggIiR7QU5EUk9JRF9UT09MQ0hBSU5f
TkFNRX0iIE1BVENIRVMgIi1jbGFuZzNbLl1bMC05XT8kIiApCi0gc3RyaW5nKCBSRUdFWCBNQVRD
SCAiM1suXVswLTldJCIgQU5EUk9JRF9DTEFOR19WRVJTSU9OICIke0FORFJPSURfVE9PTENIQUlO
X05BTUV9IikKLSBzdHJpbmcoIFJFR0VYIFJFUExBQ0UgIi1jbGFuZyR7QU5EUk9JRF9DTEFOR19W
RVJTSU9OfSQiICItJHtBTkRST0lEX0NPTVBJTEVSX1ZFUlNJT059IiBBTkRST0lEX0dDQ19UT09M
Q0hBSU5fTkFNRSAiJHtBTkRST0lEX1RPT0xDSEFJTl9OQU1FfSIgKQotIGlmKCBOT1QgRVhJU1RT
ICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0vbGx2bS0ke0FORFJPSURfQ0xBTkdfVkVS
U0lPTn0ke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSH0vYmluL2NsYW5nJHtUT09MX09T
X1NVRkZJWH0iICkKLSAgbWVzc2FnZSggRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIHRoZSBD
bGFuZyBjb21waWxlciBkcml2ZXIiICkKLSBlbmRpZigpCi0gc2V0KCBBTkRST0lEX0NPTVBJTEVS
X0lTX0NMQU5HIDEgKQotIHNldCggQU5EUk9JRF9DTEFOR19UT09MQ0hBSU5fUk9PVCAiJHtBTkRS
T0lEX05ES19UT09MQ0hBSU5TX1BBVEh9L2xsdm0tJHtBTkRST0lEX0NMQU5HX1ZFUlNJT059JHtB
TkRST0lEX05ES19UT09MQ0hBSU5TX1NVQlBBVEh9IiApCi1lbHNlKCkKLSBzZXQoIEFORFJPSURf
R0NDX1RPT0xDSEFJTl9OQU1FICIke0FORFJPSURfVE9PTENIQUlOX05BTUV9IiApCi0gdW5zZXQo
IEFORFJPSURfQ09NUElMRVJfSVNfQ0xBTkcgQ0FDSEUgKQotZW5kaWYoKQotCi1zdHJpbmcoIFJF
UExBQ0UgIi4iICIiIF9jbGFuZ19uYW1lICJjbGFuZyR7QU5EUk9JRF9DTEFOR19WRVJTSU9OfSIg
KQotaWYoIE5PVCBFWElTVFMgIiR7QU5EUk9JRF9DTEFOR19UT09MQ0hBSU5fUk9PVH0vYmluLyR7
X2NsYW5nX25hbWV9JHtUT09MX09TX1NVRkZJWH0iICkKLSBzZXQoIF9jbGFuZ19uYW1lICJjbGFu
ZyIgKQotZW5kaWYoKQotCi0KLSMgc2V0dXAgcGF0aHMgYW5kIFNUTCBmb3IgTkRLCi1pZiggQlVJ
TERfV0lUSF9BTkRST0lEX05ESyApCi0gc2V0KCBBTkRST0lEX1RPT0xDSEFJTl9ST09UICIke0FO
RFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtBTkRST0lEX0dDQ19UT09MQ0hBSU5fTkFNRX0k
e0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSH0iICkKLSBzZXQoIEFORFJPSURfU1lTUk9P
VCAiJHtBTkRST0lEX05ES30vcGxhdGZvcm1zL2FuZHJvaWQtJHtBTkRST0lEX05BVElWRV9BUElf
TEVWRUx9L2FyY2gtJHtBTkRST0lEX0FSQ0hfTkFNRX0iICkKLQotIGlmKCBBTkRST0lEX1NUTCBT
VFJFUVVBTCAibm9uZSIgKQotICAjIGRvIG5vdGhpbmcKLSBlbHNlaWYoIEFORFJPSURfU1RMIFNU
UkVRVUFMICJzeXN0ZW0iICkKLSAgc2V0KCBBTkRST0lEX1JUVEkgICAgICAgICAgICAgT0ZGICkK
LSAgc2V0KCBBTkRST0lEX0VYQ0VQVElPTlMgICAgICAgT0ZGICkKLSAgc2V0KCBBTkRST0lEX1NU
TF9JTkNMVURFX0RJUlMgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9zeXN0ZW0vaW5j
bHVkZSIgKQotIGVsc2VpZiggQU5EUk9JRF9TVEwgU1RSRVFVQUwgInN5c3RlbV9yZSIgKQotICBz
ZXQoIEFORFJPSURfUlRUSSAgICAgICAgICAgICBPTiApCi0gIHNldCggQU5EUk9JRF9FWENFUFRJ
T05TICAgICAgIE9OICkKLSAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7QU5EUk9J
RF9OREt9L3NvdXJjZXMvY3h4LXN0bC9zeXN0ZW0vaW5jbHVkZSIgKQotIGVsc2VpZiggQU5EUk9J
RF9TVEwgTUFUQ0hFUyAiZ2FiaSIgKQotICBpZiggQU5EUk9JRF9OREtfUkVMRUFTRV9OVU0gTEVT
UyA3MDAwICkgIyBiZWZvcmUgcjcKLSAgIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJnYWJpKysgaXMg
bm90IGF2YWlsYWJsZSBpbiB5b3VyIE5ESy4gWW91IGhhdmUgdG8gdXBncmFkZSB0byBOREsgcjcg
b3IgbmV3ZXIgdG8gdXNlIGdhYmkrKy4iKQotICBlbmRpZigpCi0gIHNldCggQU5EUk9JRF9SVFRJ
ICAgICAgICAgICAgIE9OICkKLSAgc2V0KCBBTkRST0lEX0VYQ0VQVElPTlMgICAgICAgT0ZGICkK
LSAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMv
Y3h4LXN0bC9nYWJpKysvaW5jbHVkZSIgKQotICBzZXQoIF9fbGlic3RsICAgICAgICAgICAgICAg
ICAiJHtBTkRST0lEX05ES30vc291cmNlcy9jeHgtc3RsL2dhYmkrKy9saWJzLyR7QU5EUk9JRF9O
REtfQUJJX05BTUV9L2xpYmdhYmkrK19zdGF0aWMuYSIgKQotIGVsc2VpZiggQU5EUk9JRF9TVEwg
TUFUQ0hFUyAic3RscG9ydCIgKQotICBpZiggTk9UIEFORFJPSURfTkRLX1JFTEVBU0VfTlVNIExF
U1MgODAwNCApICMgYmVmb3JlIHI4ZAotICAgc2V0KCBBTkRST0lEX0VYQ0VQVElPTlMgICAgICAg
T04gKQotICBlbHNlKCkKLSAgIHNldCggQU5EUk9JRF9FWENFUFRJT05TICAgICAgIE9GRiApCi0g
IGVuZGlmKCkKLSAgaWYoIEFORFJPSURfTkRLX1JFTEVBU0VfTlVNIExFU1MgNzAwMCApICMgYmVm
b3JlIHI3Ci0gICBzZXQoIEFORFJPSURfUlRUSSAgICAgICAgICAgIE9GRiApCi0gIGVsc2UoKQot
ICAgc2V0KCBBTkRST0lEX1JUVEkgICAgICAgICAgICBPTiApCi0gIGVuZGlmKCkKLSAgc2V0KCBB
TkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9z
dGxwb3J0L3N0bHBvcnQiICkKLSAgc2V0KCBfX2xpYnN0bCAgICAgICAgICAgICAgICAgIiR7QU5E
Uk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9zdGxwb3J0L2xpYnMvJHtBTkRST0lEX05ES19BQklf
TkFNRX0vbGlic3RscG9ydF9zdGF0aWMuYSIgKQotIGVsc2VpZiggQU5EUk9JRF9TVEwgTUFUQ0hF
UyAiZ251c3RsIiApCi0gIHNldCggQU5EUk9JRF9FWENFUFRJT05TICAgICAgIE9OICkKLSAgc2V0
KCBBTkRST0lEX1JUVEkgICAgICAgICAgICAgT04gKQotICBpZiggRVhJU1RTICIke0FORFJPSURf
TkRLfS9zb3VyY2VzL2N4eC1zdGwvZ251LWxpYnN0ZGMrKy8ke0FORFJPSURfQ09NUElMRVJfVkVS
U0lPTn0iICkKLSAgIGlmKCBBUk1FQUJJX1Y3QSBBTkQgQU5EUk9JRF9DT01QSUxFUl9WRVJTSU9O
IFZFUlNJT05fRVFVQUwgIjQuNyIgQU5EIEFORFJPSURfTkRLX1JFTEVBU0UgU1RSRVFVQUwgInI4
ZCIgKQotICAgICMgZ251c3RsIGJpbmFyeSBmb3IgNC43IGNvbXBpbGVyIGlzIGJ1Z2d5IDooCi0g
ICAgIyBUT0RPOiBsb29rIGZvciByaWdodCBmaXgKLSAgICBzZXQoIF9fbGlic3RsICAgICAgICAg
ICAgICAgICIke0FORFJPSURfTkRLfS9zb3VyY2VzL2N4eC1zdGwvZ251LWxpYnN0ZGMrKy80LjYi
ICkKLSAgIGVsc2UoKQotICAgIHNldCggX19saWJzdGwgICAgICAgICAgICAgICAgIiR7QU5EUk9J
RF9OREt9L3NvdXJjZXMvY3h4LXN0bC9nbnUtbGlic3RkYysrLyR7QU5EUk9JRF9DT01QSUxFUl9W
RVJTSU9OfSIgKQotICAgZW5kaWYoKQotICBlbHNlKCkKLSAgIHNldCggX19saWJzdGwgICAgICAg
ICAgICAgICAgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9nbnUtbGlic3RkYysrIiAp
Ci0gIGVuZGlmKCkKLSAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7X19saWJzdGx9
L2luY2x1ZGUiICIke19fbGlic3RsfS9saWJzLyR7QU5EUk9JRF9OREtfQUJJX05BTUV9L2luY2x1
ZGUiICIke19fbGlic3RsfS9pbmNsdWRlL2JhY2t3YXJkIiApCi0gIGlmKCBFWElTVFMgIiR7X19s
aWJzdGx9L2xpYnMvJHtBTkRST0lEX05ES19BQklfTkFNRX0vbGliZ251c3RsX3N0YXRpYy5hIiAp
Ci0gICBzZXQoIF9fbGlic3RsICAgICAgICAgICAgICAgICIke19fbGlic3RsfS9saWJzLyR7QU5E
Uk9JRF9OREtfQUJJX05BTUV9L2xpYmdudXN0bF9zdGF0aWMuYSIgKQotICBlbHNlKCkKLSAgIHNl
dCggX19saWJzdGwgICAgICAgICAgICAgICAgIiR7X19saWJzdGx9L2xpYnMvJHtBTkRST0lEX05E
S19BQklfTkFNRX0vbGlic3RkYysrLmEiICkKLSAgZW5kaWYoKQotIGVsc2UoKQotICBtZXNzYWdl
KCBGQVRBTF9FUlJPUiAiVW5rbm93biBydW50aW1lOiAke0FORFJPSURfU1RMfSIgKQotIGVuZGlm
KCkKLSAjIGZpbmQgbGlic3VwYysrLmEgLSBydHRpICYgZXhjZXB0aW9ucwotIGlmKCBBTkRST0lE
X1NUTCBTVFJFUVVBTCAic3lzdGVtX3JlIiBPUiBBTkRST0lEX1NUTCBNQVRDSEVTICJnbnVzdGwi
ICkKLSAgc2V0KCBfX2xpYnN1cGN4eCAiJHtBTkRST0lEX05ES30vc291cmNlcy9jeHgtc3RsL2du
dS1saWJzdGRjKysvJHtBTkRST0lEX0NPTVBJTEVSX1ZFUlNJT059L2xpYnMvJHtBTkRST0lEX05E
S19BQklfTkFNRX0vbGlic3VwYysrLmEiICkgIyByOGIgb3IgbmV3ZXIKLSAgaWYoIE5PVCBFWElT
VFMgIiR7X19saWJzdXBjeHh9IiApCi0gICBzZXQoIF9fbGlic3VwY3h4ICIke0FORFJPSURfTkRL
fS9zb3VyY2VzL2N4eC1zdGwvZ251LWxpYnN0ZGMrKy9saWJzLyR7QU5EUk9JRF9OREtfQUJJX05B
TUV9L2xpYnN1cGMrKy5hIiApICMgcjctcjgKLSAgZW5kaWYoKQotICBpZiggTk9UIEVYSVNUUyAi
JHtfX2xpYnN1cGN4eH0iICkgIyBiZWZvcmUgcjcKLSAgIGlmKCBBUk1FQUJJX1Y3QSApCi0gICAg
aWYoIEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEICkKLSAgICAgc2V0KCBfX2xpYnN1cGN4eCAiJHtB
TkRST0lEX1RPT0xDSEFJTl9ST09UfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0v
bGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0vbGlic3VwYysrLmEiICkKLSAgICBlbHNlKCkK
LSAgICAgc2V0KCBfX2xpYnN1cGN4eCAiJHtBTkRST0lEX1RPT0xDSEFJTl9ST09UfS8ke0FORFJP
SURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0v
dGh1bWIvbGlic3VwYysrLmEiICkKLSAgICBlbmRpZigpCi0gICBlbHNlaWYoIEFSTUVBQkkgQU5E
IE5PVCBBTkRST0lEX0ZPUkNFX0FSTV9CVUlMRCApCi0gICAgc2V0KCBfX2xpYnN1cGN4eCAiJHtB
TkRST0lEX1RPT0xDSEFJTl9ST09UfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0v
bGliL3RodW1iL2xpYnN1cGMrKy5hIiApCi0gICBlbHNlKCkKLSAgICBzZXQoIF9fbGlic3VwY3h4
ICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9O
QU1FfS9saWIvbGlic3VwYysrLmEiICkKLSAgIGVuZGlmKCkKLSAgZW5kaWYoKQotICBpZiggTk9U
IEVYSVNUUyAiJHtfX2xpYnN1cGN4eH0iKQotICAgbWVzc2FnZSggRVJST1IgIkNvdWxkIG5vdCBm
aW5kIGxpYnN1cGMrKy5hIGZvciBhIGNob3NlbiBwbGF0Zm9ybS4gRWl0aGVyIHlvdXIgTkRLIGlz
IG5vdCBzdXBwb3J0ZWQgb3IgaXMgYnJva2VuLiIpCi0gIGVuZGlmKCkKLSBlbmRpZigpCi1lbmRp
ZigpCi0KLQotIyBjYXNlIG9mIHNoYXJlZCBTVEwgbGlua2FnZQotaWYoIEFORFJPSURfU1RMIE1B
VENIRVMgInNoYXJlZCIgQU5EIERFRklORUQgX19saWJzdGwgKQotIHN0cmluZyggUkVQTEFDRSAi
X3N0YXRpYy5hIiAiX3NoYXJlZC5zbyIgX19saWJzdGwgIiR7X19saWJzdGx9IiApCi0gIyBUT0RP
OiBjaGVjayBpZiAuc28gZmlsZSBleGlzdHMgYmVmb3JlIHRoZSByZW5hbWluZwotZW5kaWYoKQot
Ci0KLSMgY2NhY2hlIHN1cHBvcnQKLV9fSU5JVF9WQVJJQUJMRSggX25ka19jY2FjaGUgTkRLX0ND
QUNIRSBFTlZfTkRLX0NDQUNIRSApCi1pZiggX25ka19jY2FjaGUgKQotIGlmKCBERUZJTkVEIE5E
S19DQ0FDSEUgQU5EIE5PVCBFWElTVFMgTkRLX0NDQUNIRSApCi0gIHVuc2V0KCBOREtfQ0NBQ0hF
IENBQ0hFICkKLSBlbmRpZigpCi0gZmluZF9wcm9ncmFtKCBOREtfQ0NBQ0hFICIke19uZGtfY2Nh
Y2hlfSIgRE9DICJUaGUgcGF0aCB0byBjY2FjaGUgYmluYXJ5IikKLWVsc2UoKQotIHVuc2V0KCBO
REtfQ0NBQ0hFIENBQ0hFICkKLWVuZGlmKCkKLXVuc2V0KCBfbmRrX2NjYWNoZSApCi0KLQotIyBz
ZXR1cCB0aGUgY3Jvc3MtY29tcGlsZXIKLWlmKCBOT1QgQ01BS0VfQ19DT01QSUxFUiApCi0gaWYo
IE5ES19DQ0FDSEUgQU5EIE5PVCBBTkRST0lEX1NZU1JPT1QgTUFUQ0hFUyAiWyA7XCJdIiApCi0g
IHNldCggQ01BS0VfQ19DT01QSUxFUiAgICIke05ES19DQ0FDSEV9IiBDQUNIRSBQQVRIICJjY2Fj
aGUgYXMgQyBjb21waWxlciIgKQotICBzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAiJHtOREtfQ0NB
Q0hFfSIgQ0FDSEUgUEFUSCAiY2NhY2hlIGFzIEMrKyBjb21waWxlciIgKQotICBpZiggQU5EUk9J
RF9DT01QSUxFUl9JU19DTEFORyApCi0gICBzZXQoIENNQUtFX0NfQ09NUElMRVJfQVJHMSAgICIk
e0FORFJPSURfQ0xBTkdfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke19jbGFuZ19uYW1lfSR7VE9PTF9P
U19TVUZGSVh9IiAgIENBQ0hFIFBBVEggIkMgY29tcGlsZXIiKQotICAgc2V0KCBDTUFLRV9DWFhf
Q09NUElMRVJfQVJHMSAiJHtBTkRST0lEX0NMQU5HX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtfY2xh
bmdfbmFtZX0rKyR7VE9PTF9PU19TVUZGSVh9IiBDQUNIRSBQQVRIICJDKysgY29tcGlsZXIiKQot
ICBlbHNlKCkKLSAgIHNldCggQ01BS0VfQ19DT01QSUxFUl9BUkcxICAgIiR7QU5EUk9JRF9UT09M
Q0hBSU5fUk9PVH0vYmluLyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS1nY2Mke1RP
T0xfT1NfU1VGRklYfSIgQ0FDSEUgUEFUSCAiQyBjb21waWxlciIpCi0gICBzZXQoIENNQUtFX0NY
WF9DT01QSUxFUl9BUkcxICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURf
VE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZysrJHtUT09MX09TX1NVRkZJWH0iIENBQ0hFIFBBVEgg
IkMrKyBjb21waWxlciIpCi0gIGVuZGlmKCkKLSBlbHNlKCkKLSAgaWYoIEFORFJPSURfQ09NUElM
RVJfSVNfQ0xBTkcgKQotICAgc2V0KCBDTUFLRV9DX0NPTVBJTEVSICAgIiR7QU5EUk9JRF9DTEFO
R19UT09MQ0hBSU5fUk9PVH0vYmluLyR7X2NsYW5nX25hbWV9JHtUT09MX09TX1NVRkZJWH0iICAg
Q0FDSEUgUEFUSCAiQyBjb21waWxlciIpCi0gICBzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAiJHtB
TkRST0lEX0NMQU5HX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtfY2xhbmdfbmFtZX0rKyR7VE9PTF9P
U19TVUZGSVh9IiBDQUNIRSBQQVRIICJDKysgY29tcGlsZXIiKQotICBlbHNlKCkKLSAgIHNldCgg
Q01BS0VfQ19DT01QSUxFUiAgICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJP
SURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZ2NjJHtUT09MX09TX1NVRkZJWH0iICAgIENBQ0hF
IFBBVEggIkMgY29tcGlsZXIiICkKLSAgIHNldCggQ01BS0VfQ1hYX0NPTVBJTEVSICIke0FORFJP
SURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0t
ZysrJHtUT09MX09TX1NVRkZJWH0iICAgIENBQ0hFIFBBVEggIkMrKyBjb21waWxlciIgKQotICBl
bmRpZigpCi0gZW5kaWYoKQotIHNldCggQ01BS0VfQVNNX0NPTVBJTEVSICIke0FORFJPSURfVE9P
TENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZ2NjJHtU
T09MX09TX1NVRkZJWH0iICAgICBDQUNIRSBQQVRIICJhc3NlbWJsZXIiICkKLSBzZXQoIENNQUtF
X1NUUklQICAgICAgICAiJHtBTkRST0lEX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtBTkRST0lEX1RP
T0xDSEFJTl9NQUNISU5FX05BTUV9LXN0cmlwJHtUT09MX09TX1NVRkZJWH0iICAgQ0FDSEUgUEFU
SCAic3RyaXAiICkKLSBpZiggRVhJU1RTICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8k
e0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZ2NjLWFyJHtUT09MX09TX1NVRkZJWH0i
ICkKLSAgIyBVc2UgZ2NjLWFyIGlmIHdlIGhhdmUgaXQgZm9yIGJldHRlciBMVE8gc3VwcG9ydC4K
LSAgc2V0KCBDTUFLRV9BUiAgICAgICAgICAgIiR7QU5EUk9JRF9UT09MQ0hBSU5fUk9PVH0vYmlu
LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS1nY2MtYXIke1RPT0xfT1NfU1VGRklY
fSIgICAgICBDQUNIRSBQQVRIICJhcmNoaXZlIiApCi0gZWxzZSgpCi0gIHNldCggQ01BS0VfQVIg
ICAgICAgICAgICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENI
QUlOX01BQ0hJTkVfTkFNRX0tYXIke1RPT0xfT1NfU1VGRklYfSIgICAgICBDQUNIRSBQQVRIICJh
cmNoaXZlIiApCi0gZW5kaWYoKQotIHNldCggQ01BS0VfTElOS0VSICAgICAgICIke0FORFJPSURf
VE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tbGQk
e1RPT0xfT1NfU1VGRklYfSIgICAgICBDQUNIRSBQQVRIICJsaW5rZXIiICkKLSBzZXQoIENNQUtF
X05NICAgICAgICAgICAiJHtBTkRST0lEX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtBTkRST0lEX1RP
T0xDSEFJTl9NQUNISU5FX05BTUV9LW5tJHtUT09MX09TX1NVRkZJWH0iICAgICAgQ0FDSEUgUEFU
SCAibm0iICkKLSBzZXQoIENNQUtFX09CSkNPUFkgICAgICAiJHtBTkRST0lEX1RPT0xDSEFJTl9S
T09UfS9iaW4vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9LW9iamNvcHkke1RPT0xf
T1NfU1VGRklYfSIgQ0FDSEUgUEFUSCAib2JqY29weSIgKQotIHNldCggQ01BS0VfT0JKRFVNUCAg
ICAgICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01B
Q0hJTkVfTkFNRX0tb2JqZHVtcCR7VE9PTF9PU19TVUZGSVh9IiBDQUNIRSBQQVRIICJvYmpkdW1w
IiApCi0gc2V0KCBDTUFLRV9SQU5MSUIgICAgICAgIiR7QU5EUk9JRF9UT09MQ0hBSU5fUk9PVH0v
YmluLyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS1yYW5saWIke1RPT0xfT1NfU1VG
RklYfSIgIENBQ0hFIFBBVEggInJhbmxpYiIgKQotZW5kaWYoKQotCi1zZXQoIF9DTUFLRV9UT09M
Q0hBSU5fUFJFRklYICIke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tIiApCi1pZigg
Q01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi44LjUgKQotIHNldCggQ01BS0VfQVNNX0NPTVBJ
TEVSX0FSRzEgIi1jIiApCi1lbmRpZigpCi1pZiggQVBQTEUgKQotIGZpbmRfcHJvZ3JhbSggQ01B
S0VfSU5TVEFMTF9OQU1FX1RPT0wgTkFNRVMgaW5zdGFsbF9uYW1lX3Rvb2wgKQotIGlmKCBOT1Qg
Q01BS0VfSU5TVEFMTF9OQU1FX1RPT0wgKQotICBtZXNzYWdlKCBGQVRBTF9FUlJPUiAiQ291bGQg
bm90IGZpbmQgaW5zdGFsbF9uYW1lX3Rvb2wsIHBsZWFzZSBjaGVjayB5b3VyIGluc3RhbGxhdGlv
bi4iICkKLSBlbmRpZigpCi0gbWFya19hc19hZHZhbmNlZCggQ01BS0VfSU5TVEFMTF9OQU1FX1RP
T0wgKQotZW5kaWYoKQotCi0jIEZvcmNlIHNldCBjb21waWxlcnMgYmVjYXVzZSBzdGFuZGFyZCBp
ZGVudGlmaWNhdGlvbiB3b3JrcyBiYWRseSBmb3IgdXMKLWluY2x1ZGUoIENNYWtlRm9yY2VDb21w
aWxlciApCi1DTUFLRV9GT1JDRV9DX0NPTVBJTEVSKCAiJHtDTUFLRV9DX0NPTVBJTEVSfSIgR05V
ICkKLWlmKCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSBzZXQoIENNQUtFX0NfQ09NUElM
RVJfSUQgQ2xhbmcgKQotZW5kaWYoKQotc2V0KCBDTUFLRV9DX1BMQVRGT1JNX0lEIExpbnV4ICkK
LWlmKCBYODZfNjQgT1IgTUlQUzY0IE9SIEFSTTY0X1Y4QSApCi0gc2V0KCBDTUFLRV9DX1NJWkVP
Rl9EQVRBX1BUUiA4ICkKLWVsc2UoKQotIHNldCggQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgNCAp
Ci1lbmRpZigpCi1zZXQoIENNQUtFX0NfSEFTX0lTWVNST09UIDEgKQotc2V0KCBDTUFLRV9DX0NP
TVBJTEVSX0FCSSBFTEYgKQotQ01BS0VfRk9SQ0VfQ1hYX0NPTVBJTEVSKCAiJHtDTUFLRV9DWFhf
Q09NUElMRVJ9IiBHTlUgKQotaWYoIEFORFJPSURfQ09NUElMRVJfSVNfQ0xBTkcgKQotIHNldCgg
Q01BS0VfQ1hYX0NPTVBJTEVSX0lEIENsYW5nKQotZW5kaWYoKQotc2V0KCBDTUFLRV9DWFhfUExB
VEZPUk1fSUQgTGludXggKQotc2V0KCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSICR7Q01BS0Vf
Q19TSVpFT0ZfREFUQV9QVFJ9ICkKLXNldCggQ01BS0VfQ1hYX0hBU19JU1lTUk9PVCAxICkKLXNl
dCggQ01BS0VfQ1hYX0NPTVBJTEVSX0FCSSBFTEYgKQotc2V0KCBDTUFLRV9DWFhfU09VUkNFX0ZJ
TEVfRVhURU5TSU9OUyBjYyBjcCBjeHggY3BwIENQUCBjKysgQyApCi0jIGZvcmNlIEFTTSBjb21w
aWxlciAocmVxdWlyZWQgZm9yIENNYWtlIDwgMi44LjUpCi1zZXQoIENNQUtFX0FTTV9DT01QSUxF
Ul9JRF9SVU4gVFJVRSApCi1zZXQoIENNQUtFX0FTTV9DT01QSUxFUl9JRCBHTlUgKQotc2V0KCBD
TUFLRV9BU01fQ09NUElMRVJfV09SS1MgVFJVRSApCi1zZXQoIENNQUtFX0FTTV9DT01QSUxFUl9G
T1JDRUQgVFJVRSApCi1zZXQoIENNQUtFX0NPTVBJTEVSX0lTX0dOVUFTTSAxKQotc2V0KCBDTUFL
RV9BU01fU09VUkNFX0ZJTEVfRVhURU5TSU9OUyBzIFMgYXNtICkKLQotZm9yZWFjaCggbGFuZyBD
IENYWCBBU00gKQotIGlmKCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSAgc2V0KCBDTUFL
RV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gJHtBTkRST0lEX0NMQU5HX1ZFUlNJT059ICkKLSBl
bHNlKCkKLSAgc2V0KCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gJHtBTkRST0lEX0NP
TVBJTEVSX1ZFUlNJT059ICkKLSBlbmRpZigpCi1lbmRmb3JlYWNoKCkKLQotIyBmbGFncyBhbmQg
ZGVmaW5pdGlvbnMKLXJlbW92ZV9kZWZpbml0aW9ucyggLURBTkRST0lEICkKLWFkZF9kZWZpbml0
aW9ucyggLURBTkRST0lEICkKLQotaWYoIEFORFJPSURfU1lTUk9PVCBNQVRDSEVTICJbIDtcIl0i
ICkKLSBpZiggQ01BS0VfSE9TVF9XSU4zMiApCi0gICMgdHJ5IHRvIGNvbnZlcnQgcGF0aCB0byA4
LjMgZm9ybQotICBmaWxlKCBXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNf
RElSRUNUT1JZfS9jdnQ4My5jbWQiICJAZWNobyAlfnMxIiApCi0gIGV4ZWN1dGVfcHJvY2Vzcygg
Q09NTUFORCAiJEVOVntDb21TcGVjfSIgL2MgIiR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJ
TEVTX0RJUkVDVE9SWX0vY3Z0ODMuY21kIiAiJHtBTkRST0lEX1NZU1JPT1R9IgotICAgICAgICAg
ICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfX3BhdGggT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dI
SVRFU1BBQ0UKLSAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX19yZXN1bHQgRVJS
T1JfUVVJRVQgKQotICBpZiggX19yZXN1bHQgRVFVQUwgMCApCi0gICBmaWxlKCBUT19DTUFLRV9Q
QVRIICIke19fcGF0aH0iIEFORFJPSURfU1lTUk9PVCApCi0gICBzZXQoIEFORFJPSURfQ1hYX0ZM
QUdTICItLXN5c3Jvb3Q9JHtBTkRST0lEX1NZU1JPT1R9IiApCi0gIGVsc2UoKQotICAgc2V0KCBB
TkRST0lEX0NYWF9GTEFHUyAiLS1zeXNyb290PVwiJHtBTkRST0lEX1NZU1JPT1R9XCIiICkKLSAg
ZW5kaWYoKQotIGVsc2UoKQotICBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICInLS1zeXNyb290PSR7
QU5EUk9JRF9TWVNST09UfSciICkKLSBlbmRpZigpCi0gaWYoIE5PVCBfQ01BS0VfSU5fVFJZX0NP
TVBJTEUgKQotICAjIHF1b3RlcyBjYW4gYnJlYWsgdHJ5X2NvbXBpbGUgYW5kIGNvbXBpbGVyIGlk
ZW50aWZpY2F0aW9uCi0gIG1lc3NhZ2UoV0FSTklORyAiUGF0aCB0byB5b3VyIEFuZHJvaWQgTkRL
IChvciB0b29sY2hhaW4pIGhhcyBub24tYWxwaGFudW1lcmljIHN5bWJvbHMuXG5UaGUgYnVpbGQg
bWlnaHQgYmUgYnJva2VuLlxuIikKLSBlbmRpZigpCi1lbHNlKCkKLSBzZXQoIEFORFJPSURfQ1hY
X0ZMQUdTICItLXN5c3Jvb3Q9JHtBTkRST0lEX1NZU1JPT1R9IiApCi1lbmRpZigpCi0KLSMgTkRL
IGZsYWdzCi1pZiAoQVJNNjRfVjhBICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICAgICAgICAg
IiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mdW53aW5kLXRhYmxlcyIgKQotIHNldCggQU5EUk9JRF9D
WFhfRkxBR1NfUkVMRUFTRSAiLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZzdHJpY3QtYWxpYXNpbmci
ICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX0RFQlVHICAgIi1mbm8tb21pdC1mcmFtZS1wb2lu
dGVyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIiApCi0gaWYoIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lT
X0NMQU5HICkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFHU19SRUxFQVNFICIke0FORFJPSURfQ1hY
X0ZMQUdTX1JFTEVBU0V9IC1mdW5zd2l0Y2gtbG9vcHMgLWZpbmxpbmUtbGltaXQ9MzAwIiApCi0g
ZW5kaWYoKQotZWxzZWlmKCBBUk1FQUJJIE9SIEFSTUVBQklfVjdBKQotIHNldCggQU5EUk9JRF9D
WFhfRkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mdW53aW5kLXRhYmxlcyIgKQotIGlmKCBO
T1QgQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgQU5EIE5PVCBBUk1FQUJJX1Y2ICkKLSAgc2V0KCBB
TkRST0lEX0NYWF9GTEFHU19SRUxFQVNFICItbXRodW1iIC1mb21pdC1mcmFtZS1wb2ludGVyIC1m
bm8tc3RyaWN0LWFsaWFzaW5nIiApCi0gIHNldCggQU5EUk9JRF9DWFhfRkxBR1NfREVCVUcgICAi
LW1hcm0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1zdHJpY3QtYWxpYXNpbmciICkKLSAg
aWYoIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSAgIHNldCggQU5EUk9JRF9DWFhf
RkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1maW5saW5lLWxpbWl0PTY0IiApCi0gIGVuZGlm
KCkKLSBlbHNlKCkKLSAgIyBhbHdheXMgY29tcGlsZSBBUk1FQUJJX1Y2IGluIGFybSBtb2RlOyBv
dGhlcndpc2UgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBmcm9tIEFSTUVBQkkKLSAgc2V0KCBBTkRS
T0lEX0NYWF9GTEFHU19SRUxFQVNFICItbWFybSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnN0cmlj
dC1hbGlhc2luZyIgKQotICBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX0RFQlVHICAgIi1tYXJtIC1m
bm8tb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIiApCi0gIGlmKCBOT1Qg
QU5EUk9JRF9DT01QSUxFUl9JU19DTEFORyApCi0gICBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIk
e0FORFJPSURfQ1hYX0ZMQUdTfSAtZnVuc3dpdGNoLWxvb3BzIC1maW5saW5lLWxpbWl0PTMwMCIg
KQotICBlbmRpZigpCi0gZW5kaWYoKQotZWxzZWlmKCBYODYgT1IgWDg2XzY0ICkKLSBzZXQoIEFO
RFJPSURfQ1hYX0ZMQUdTICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtZnVud2luZC10YWJsZXMiICkK
LSBpZiggTk9UIEFORFJPSURfQ09NUElMRVJfSVNfQ0xBTkcgKQotICBzZXQoIEFORFJPSURfQ1hY
X0ZMQUdTICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtZnVuc3dpdGNoLWxvb3BzIC1maW5saW5lLWxp
bWl0PTMwMCIgKQotIGVuZGlmKCkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX1JFTEVBU0UgIi1m
b21pdC1mcmFtZS1wb2ludGVyIC1mc3RyaWN0LWFsaWFzaW5nIiApCi0gc2V0KCBBTkRST0lEX0NY
WF9GTEFHU19ERUJVRyAgICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmljdC1hbGlh
c2luZyIgKQotZWxzZWlmKCBNSVBTIE9SIE1JUFM2NCApCi0gc2V0KCBBTkRST0lEX0NYWF9GTEFH
UyAgICAgICAgICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmlu
bGluZS1mdW5jdGlvbnMgLWZ1bndpbmQtdGFibGVzIC1mbWVzc2FnZS1sZW5ndGg9MCIgKQotIHNl
dCggQU5EUk9JRF9DWFhfRkxBR1NfUkVMRUFTRSAiLWZvbWl0LWZyYW1lLXBvaW50ZXIiICkKLSBz
ZXQoIEFORFJPSURfQ1hYX0ZMQUdTX0RFQlVHICAgIi1mbm8tb21pdC1mcmFtZS1wb2ludGVyIiAp
Ci0gaWYoIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSAgc2V0KCBBTkRST0lEX0NY
WF9GTEFHUyAiJHtBTkRST0lEX0NYWF9GTEFHU30gLWZuby1pbmxpbmUtZnVuY3Rpb25zLWNhbGxl
ZC1vbmNlIC1mZ2NzZS1hZnRlci1yZWxvYWQgLWZyZXJ1bi1jc2UtYWZ0ZXItbG9vcCAtZnJlbmFt
ZS1yZWdpc3RlcnMiICkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFHU19SRUxFQVNFICIke0FORFJP
SURfQ1hYX0ZMQUdTX1JFTEVBU0V9IC1mdW5zd2l0Y2gtbG9vcHMgLWZpbmxpbmUtbGltaXQ9MzAw
IiApCi0gZW5kaWYoKQotZWxzZWlmKCkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX1JFTEVBU0Ug
IiIgKQotIHNldCggQU5EUk9JRF9DWFhfRkxBR1NfREVCVUcgICAiIiApCi1lbmRpZigpCi0KLXNl
dCggQU5EUk9JRF9DWFhfRkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mc2lnbmVkLWNoYXIi
ICkgIyBnb29kL25lY2Vzc2FyeSB3aGVuIHBvcnRpbmcgZGVza3RvcCBsaWJyYXJpZXMKLQotaWYo
IE5PVCBYODYgQU5EIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSBzZXQoIEFORFJP
SURfQ1hYX0ZMQUdTICItV25vLXBzYWJpICR7QU5EUk9JRF9DWFhfRkxBR1N9IiApCi1lbmRpZigp
Ci0KLWlmKCBOT1QgQU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiNC42IiAp
Ci0gc2V0KCBBTkRST0lEX0NYWF9GTEFHUyAiJHtBTkRST0lEX0NYWF9GTEFHU30gLW5vLWNhbm9u
aWNhbC1wcmVmaXhlcyIgKSAjIHNlZSBodHRwczovL2FuZHJvaWQtcmV2aWV3Lmdvb2dsZXNvdXJj
ZS5jb20vIy9jLzQ3NTY0LwotZW5kaWYoKQotCi0jIEFCSS1zcGVjaWZpYyBmbGFncwotaWYoIEFS
TUVBQklfVjdBICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIke0FORFJPSURfQ1hYX0ZMQUdT
fSAtbWFyY2g9YXJtdjctYSAtbWZsb2F0LWFiaT1zb2Z0ZnAiICkKLSBpZiggTkVPTiApCi0gIHNl
dCggQU5EUk9JRF9DWFhfRkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1tZnB1PW5lb24iICkK
LSBlbHNlaWYoIFZGUFYzICkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFHUyAiJHtBTkRST0lEX0NY
WF9GTEFHU30gLW1mcHU9dmZwdjMiICkKLSBlbHNlKCkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFH
UyAiJHtBTkRST0lEX0NYWF9GTEFHU30gLW1mcHU9dmZwdjMtZDE2IiApCi0gZW5kaWYoKQotZWxz
ZWlmKCBBUk1FQUJJX1Y2ICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIke0FORFJPSURfQ1hY
X0ZMQUdTfSAtbWFyY2g9YXJtdjYgLW1mbG9hdC1hYmk9c29mdGZwIC1tZnB1PXZmcCIgKSAjIHZm
cCA9PSB2ZnB2MgotZWxzZWlmKCBBUk1FQUJJICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIk
e0FORFJPSURfQ1hYX0ZMQUdTfSAtbWFyY2g9YXJtdjV0ZSAtbXR1bmU9eHNjYWxlIC1tc29mdC1m
bG9hdCIgKQotZW5kaWYoKQotCi1pZiggQU5EUk9JRF9TVEwgTUFUQ0hFUyAiZ251c3RsIiBBTkQg
KEVYSVNUUyAiJHtfX2xpYnN0bH0iIE9SIEVYSVNUUyAiJHtfX2xpYnN1cGN4eH0iKSApCi0gc2V0
KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICI8Q01BS0VfQ19DT01QSUxFUj4gPENN
QUtFX1NIQVJFRF9MSUJSQVJZX0NYWF9GTEFHUz4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxM
SU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NYWF9GTEFHUz4gPENNQUtF
X1NIQVJFRF9MSUJSQVJZX1NPTkFNRV9DWFhfRkxBRz48VEFSR0VUX1NPTkFNRT4gLW8gPFRBUkdF
VD4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iICkKLSBzZXQoIENNQUtFX0NYWF9DUkVBVEVf
U0hBUkVEX01PRFVMRSAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllf
Q1hYX0ZMQUdTPiA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9T
SEFSRURfTElCUkFSWV9DUkVBVEVfQ1hYX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfU09O
QU1FX0NYWF9GTEFHPjxUQVJHRVRfU09OQU1FPiAtbyA8VEFSR0VUPiA8T0JKRUNUUz4gPExJTktf
TElCUkFSSUVTPiIgKQotIHNldCggQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAgICAgICAiPENN
QUtFX0NfQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFH
Uz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iICkKLWVsc2UoKQotIHNl
dCggQ01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElCUkFSWSAiPENNQUtFX0NYWF9DT01QSUxFUj4g
PENNQUtFX1NIQVJFRF9MSUJSQVJZX0NYWF9GTEFHUz4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+
IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NYWF9GTEFHUz4gPENN
QUtFX1NIQVJFRF9MSUJSQVJZX1NPTkFNRV9DWFhfRkxBRz48VEFSR0VUX1NPTkFNRT4gLW8gPFRB
UkdFVD4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iICkKLSBzZXQoIENNQUtFX0NYWF9DUkVB
VEVfU0hBUkVEX01PRFVMRSAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElC
UkFSWV9DWFhfRkxBR1M+IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gPENN
QUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV9DWFhfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFS
WV9TT05BTUVfQ1hYX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8
TElOS19MSUJSQVJJRVM+IiApCi0gc2V0KCBDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAgICAg
ICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJ
TktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IiApCi1lbmRp
ZigpCi0KLSMgU1RMCi1pZiggRVhJU1RTICIke19fbGlic3RsfSIgT1IgRVhJU1RTICIke19fbGli
c3VwY3h4fSIgKQotIGlmKCBFWElTVFMgIiR7X19saWJzdGx9IiApCi0gIHNldCggQ01BS0VfQ1hY
X0NSRUFURV9TSEFSRURfTElCUkFSWSAiJHtDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZ
fSBcIiR7X19saWJzdGx9XCIiICkKLSAgc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9NT0RV
TEUgICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRX0gXCIke19fbGlic3RsfVwiIiAp
Ci0gIHNldCggQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAgICAgICAiJHtDTUFLRV9DWFhfTElO
S19FWEVDVVRBQkxFfSBcIiR7X19saWJzdGx9XCIiICkKLSBlbmRpZigpCi0gaWYoIEVYSVNUUyAi
JHtfX2xpYnN1cGN4eH0iICkKLSAgc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZ
ICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX0xJQlJBUll9IFwiJHtfX2xpYnN1cGN4eH1cIiIg
KQotICBzZXQoIENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRSAgIiR7Q01BS0VfQ1hYX0NS
RUFURV9TSEFSRURfTU9EVUxFfSBcIiR7X19saWJzdXBjeHh9XCIiICkKLSAgc2V0KCBDTUFLRV9D
WFhfTElOS19FWEVDVVRBQkxFICAgICAgICIke0NNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEV9IFwi
JHtfX2xpYnN1cGN4eH1cIiIgKQotICAjIEMgb2JqZWN0czoKLSAgc2V0KCBDTUFLRV9DX0NSRUFU
RV9TSEFSRURfTElCUkFSWSAiPENNQUtFX0NfQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFS
WV9DX0ZMQUdTPiA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9T
SEFSRURfTElCUkFSWV9DUkVBVEVfQ19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX1NPTkFN
RV9DX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8TElOS19MSUJS
QVJJRVM+IiApCi0gIHNldCggQ01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRSAgIjxDTUFLRV9D
X0NPTVBJTEVSPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ19GTEFHUz4gPExBTkdVQUdFX0NPTVBJ
TEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NfRkxB
R1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9TT05BTUVfQ19GTEFHPjxUQVJHRVRfU09OQU1FPiAt
byA8VEFSR0VUPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIgKQotICBzZXQoIENNQUtFX0Nf
TElOS19FWEVDVVRBQkxFICAgICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0Vf
Q19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJ
QlJBUklFUz4iICkKLSAgc2V0KCBDTUFLRV9DX0NSRUFURV9TSEFSRURfTElCUkFSWSAiJHtDTUFL
RV9DX0NSRUFURV9TSEFSRURfTElCUkFSWX0gXCIke19fbGlic3VwY3h4fVwiIiApCi0gIHNldCgg
Q01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRSAgIiR7Q01BS0VfQ19DUkVBVEVfU0hBUkVEX01P
RFVMRX0gXCIke19fbGlic3VwY3h4fVwiIiApCi0gIHNldCggQ01BS0VfQ19MSU5LX0VYRUNVVEFC
TEUgICAgICAgIiR7Q01BS0VfQ19MSU5LX0VYRUNVVEFCTEV9IFwiJHtfX2xpYnN1cGN4eH1cIiIg
KQotIGVuZGlmKCkKLSBpZiggQU5EUk9JRF9TVEwgTUFUQ0hFUyAiZ251c3RsIiApCi0gIGlmKCBO
T1QgRVhJU1RTICIke0FORFJPSURfTElCTV9QQVRIfSIgKQotICAgc2V0KCBBTkRST0lEX0xJQk1f
UEFUSCAtbG0gKQotICBlbmRpZigpCi0gIHNldCggQ01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElC
UkFSWSAiJHtDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZfSAke0FORFJPSURfTElCTV9Q
QVRIfSIgKQotICBzZXQoIENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRSAgIiR7Q01BS0Vf
Q1hYX0NSRUFURV9TSEFSRURfTU9EVUxFfSAke0FORFJPSURfTElCTV9QQVRIfSIgKQotICBzZXQo
IENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgICAgICAgIiR7Q01BS0VfQ1hYX0xJTktfRVhFQ1VU
QUJMRX0gJHtBTkRST0lEX0xJQk1fUEFUSH0iICkKLSBlbmRpZigpCi1lbmRpZigpCi0KLSMgdmFy
aWFibGVzIGNvbnRyb2xsaW5nIG9wdGlvbmFsIGJ1aWxkIGZsYWdzCi1pZiggQU5EUk9JRF9OREtf
UkVMRUFTRV9OVU0gTEVTUyA3MDAwICkgIyBiZWZvcmUgcjcKLSAjIGxpYkdMRVN2Mi5zbyBpbiBO
REsncyBwcmlvciB0byByNyByZWZlcnMgdG8gbWlzc2luZyBleHRlcm5hbCBzeW1ib2xzLgotICMg
U28gdGhpcyBmbGFnIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgYWxsIHByb2plY3RzIHVzaW5nIE9w
ZW5HTCBmcm9tIG5hdGl2ZS4KLSBfX0lOSVRfVkFSSUFCTEUoIEFORFJPSURfU09fVU5ERUZJTkVE
ICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyBPTiApCi1lbHNlKCkKLSBfX0lOSVRfVkFSSUFC
TEUoIEFORFJPSURfU09fVU5ERUZJTkVEICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyBPRkYg
KQotZW5kaWYoKQotX19JTklUX1ZBUklBQkxFKCBBTkRST0lEX05PX1VOREVGSU5FRCAgICAgICAg
ICAgICAgICAgICAgICAgVkFMVUVTIE9OICkKLV9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9GVU5D
VElPTl9MRVZFTF9MSU5LSU5HICAgICAgICAgICAgIFZBTFVFUyBPTiApCi1fX0lOSVRfVkFSSUFC
TEUoIEFORFJPSURfR09MRF9MSU5LRVIgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgT04g
KQotX19JTklUX1ZBUklBQkxFKCBBTkRST0lEX05PRVhFQ1NUQUNLICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMVUVTIE9OICkKLV9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9SRUxSTyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyBPTiApCi0KLXNldCggQU5EUk9JRF9OT19VTkRF
RklORUQgICAgICAgICAgICR7QU5EUk9JRF9OT19VTkRFRklORUR9ICAgICAgICAgICBDQUNIRSBC
T09MICJTaG93IGFsbCB1bmRlZmluZWQgc3ltYm9scyBhcyBsaW5rZXIgZXJyb3JzIiApCi1zZXQo
IEFORFJPSURfU09fVU5ERUZJTkVEICAgICAgICAgICAke0FORFJPSURfU09fVU5ERUZJTkVEfSAg
ICAgICAgICAgQ0FDSEUgQk9PTCAiQWxsb3dzIG9yIGRpc2FsbG93cyB1bmRlZmluZWQgc3ltYm9s
cyBpbiBzaGFyZWQgbGlicmFyaWVzIiApCi1zZXQoIEFORFJPSURfRlVOQ1RJT05fTEVWRUxfTElO
S0lORyAke0FORFJPSURfRlVOQ1RJT05fTEVWRUxfTElOS0lOR30gQ0FDSEUgQk9PTCAiUHV0IGVh
Y2ggZnVuY3Rpb24gaW4gc2VwYXJhdGUgc2VjdGlvbiBhbmQgZW5hYmxlIGdhcmJhZ2UgY29sbGVj
dGlvbiBvZiB1bnVzZWQgaW5wdXQgc2VjdGlvbnMgYXQgbGluayB0aW1lIiApCi1zZXQoIEFORFJP
SURfR09MRF9MSU5LRVIgICAgICAgICAgICAke0FORFJPSURfR09MRF9MSU5LRVJ9ICAgICAgICAg
ICAgQ0FDSEUgQk9PTCAiRW5hYmxlcyBnb2xkIGxpbmtlciIgKQotc2V0KCBBTkRST0lEX05PRVhF
Q1NUQUNLICAgICAgICAgICAgJHtBTkRST0lEX05PRVhFQ1NUQUNLfSAgICAgICAgICAgIENBQ0hF
IEJPT0wgIkFsbG93cyBvciBkaXNhbGxvd3MgdW5kZWZpbmVkIHN5bWJvbHMgaW4gc2hhcmVkIGxp
YnJhcmllcyIgKQotc2V0KCBBTkRST0lEX1JFTFJPICAgICAgICAgICAgICAgICAgJHtBTkRST0lE
X1JFTFJPfSAgICAgICAgICAgICAgICAgIENBQ0hFIEJPT0wgIkVuYWJsZXMgUkVMUk8gLSBhIG1l
bW9yeSBjb3JydXB0aW9uIG1pdGlnYXRpb24gdGVjaG5pcXVlIiApCi1tYXJrX2FzX2FkdmFuY2Vk
KCBBTkRST0lEX05PX1VOREVGSU5FRCBBTkRST0lEX1NPX1VOREVGSU5FRCBBTkRST0lEX0ZVTkNU
SU9OX0xFVkVMX0xJTktJTkcgQU5EUk9JRF9HT0xEX0xJTktFUiBBTkRST0lEX05PRVhFQ1NUQUNL
IEFORFJPSURfUkVMUk8gKQotCi0jIGxpbmtlciBmbGFncwotc2V0KCBBTkRST0lEX0xJTktFUl9G
TEFHUyAiIiApCi0KLWlmKCBBUk1FQUJJX1Y3QSApCi0gIyB0aGlzIGlzICpyZXF1aXJlZCogdG8g
dXNlIHRoZSBmb2xsb3dpbmcgbGlua2VyIGZsYWdzIHRoYXQgcm91dGVzIGFyb3VuZAotICMgYSBD
UFUgYnVnIGluIHNvbWUgQ29ydGV4LUE4IGltcGxlbWVudGF0aW9uczoKLSBzZXQoIEFORFJPSURf
TElOS0VSX0ZMQUdTICIke0FORFJPSURfTElOS0VSX0ZMQUdTfSAtV2wsLS1maXgtY29ydGV4LWE4
IiApCi1lbmRpZigpCi0KLWlmKCBBTkRST0lEX05PX1VOREVGSU5FRCApCi0gaWYoIE1JUFMgKQot
ICAjIHRoZXJlIGlzIHNvbWUgc3lzcm9vdC1yZWxhdGVkIHByb2JsZW0gaW4gbWlwcyBsaW5rZXIu
Li4KLSAgaWYoIE5PVCBBTkRST0lEX1NZU1JPT1QgTUFUQ0hFUyAiWyA7XCJdIiApCi0gICBzZXQo
IEFORFJPSURfTElOS0VSX0ZMQUdTICIke0FORFJPSURfTElOS0VSX0ZMQUdTfSAtV2wsLS1uby11
bmRlZmluZWQgLVdsLC1ycGF0aC1saW5rLCR7QU5EUk9JRF9TWVNST09UfS91c3IvbGliIiApCi0g
IGVuZGlmKCkKLSBlbHNlKCkKLSAgc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRST0lE
X0xJTktFUl9GTEFHU30gLVdsLC0tbm8tdW5kZWZpbmVkIiApCi0gZW5kaWYoKQotZW5kaWYoKQot
Ci1pZiggQU5EUk9JRF9TT19VTkRFRklORUQgKQotIHNldCggQU5EUk9JRF9MSU5LRVJfRkxBR1Mg
IiR7QU5EUk9JRF9MSU5LRVJfRkxBR1N9IC1XbCwtYWxsb3ctc2hsaWItdW5kZWZpbmVkIiApCi1l
bmRpZigpCi0KLWlmKCBBTkRST0lEX0ZVTkNUSU9OX0xFVkVMX0xJTktJTkcgKQotIHNldCggQU5E
Uk9JRF9DWFhfRkxBR1MgICAgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mZGF0YS1zZWN0aW9ucyAt
ZmZ1bmN0aW9uLXNlY3Rpb25zIiApCi0gc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRS
T0lEX0xJTktFUl9GTEFHU30gLVdsLC0tZ2Mtc2VjdGlvbnMiICkKLWVuZGlmKCkKLQotaWYoIEFO
RFJPSURfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0VRVUFMICI0LjYiICkKLSBpZiggQU5EUk9J
RF9HT0xEX0xJTktFUiBBTkQgKENNQUtFX0hPU1RfVU5JWCBPUiBBTkRST0lEX05ES19SRUxFQVNF
X05VTSBHUkVBVEVSIDgwMDIpIEFORCAoQVJNRUFCSSBPUiBBUk1FQUJJX1Y3QSBPUiBYODYpICkK
LSAgc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRST0lEX0xJTktFUl9GTEFHU30gLWZ1
c2UtbGQ9Z29sZCIgKQotIGVsc2VpZiggQU5EUk9JRF9OREtfUkVMRUFTRV9OVU0gR1JFQVRFUiA4
MDAyICkgIyBhZnRlciByOGIKLSAgc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRST0lE
X0xJTktFUl9GTEFHU30gLWZ1c2UtbGQ9YmZkIiApCi0gZWxzZWlmKCBBTkRST0lEX05ES19SRUxF
QVNFIFNUUkVRVUFMICJyOGIiIEFORCBBUk1FQUJJIEFORCBOT1QgX0NNQUtFX0lOX1RSWV9DT01Q
SUxFICkKLSAgbWVzc2FnZSggV0FSTklORyAiVGhlIGRlZmF1bHQgYmZkIGxpbmtlciBmcm9tIGFy
bSBHQ0MgNC42IHRvb2xjaGFpbiBjYW4gZmFpbCB3aXRoICd1bnJlc29sdmFibGUgUl9BUk1fVEhN
X0NBTEwgcmVsb2NhdGlvbicgZXJyb3IgbWVzc2FnZS4gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUu
Y29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTM1MzQyCi0gIE9uIExpbnV4IGFuZCBPUyBY
IGhvc3QgcGxhdGZvcm0geW91IGNhbiB3b3JrYXJvdW5kIHRoaXMgcHJvYmxlbSB1c2luZyBnb2xk
IGxpbmtlciAoZGVmYXVsdCkuCi0gIFJlcnVuIGNtYWtlIHdpdGggLURBTkRST0lEX0dPTERfTElO
S0VSPU9OIG9wdGlvbiBpbiBjYXNlIG9mIHByb2JsZW1zLgotIiApCi0gZW5kaWYoKQotZW5kaWYo
KSAjIHZlcnNpb24gNC42Ci0KLWlmKCBBTkRST0lEX05PRVhFQ1NUQUNLICkKLSBpZiggQU5EUk9J
RF9DT01QSUxFUl9JU19DTEFORyApCi0gIHNldCggQU5EUk9JRF9DWFhfRkxBR1MgICAgIiR7QU5E
Uk9JRF9DWFhfRkxBR1N9IC1YY2xhbmcgLW1ub2V4ZWNzdGFjayIgKQotIGVsc2UoKQotICBzZXQo
IEFORFJPSURfQ1hYX0ZMQUdTICAgICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtV2EsLS1ub2V4ZWNz
dGFjayIgKQotIGVuZGlmKCkKLSBzZXQoIEFORFJPSURfTElOS0VSX0ZMQUdTICIke0FORFJPSURf
TElOS0VSX0ZMQUdTfSAtV2wsLXosbm9leGVjc3RhY2siICkKLWVuZGlmKCkKLQotaWYoIEFORFJP
SURfUkVMUk8gKQotIHNldCggQU5EUk9JRF9MSU5LRVJfRkxBR1MgIiR7QU5EUk9JRF9MSU5LRVJf
RkxBR1N9IC1XbCwteixyZWxybyAtV2wsLXosbm93IiApCi1lbmRpZigpCi0KLWlmKCBBTkRST0lE
X0NPTVBJTEVSX0lTX0NMQU5HICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICItdGFyZ2V0ICR7
QU5EUk9JRF9MTFZNX1RSSVBMRX0gLVF1bnVzZWQtYXJndW1lbnRzICR7QU5EUk9JRF9DWFhfRkxB
R1N9IiApCi0gaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgKQotICBzZXQoIEFORFJPSURfQ1hY
X0ZMQUdTICItZ2NjLXRvb2xjaGFpbiAke0FORFJPSURfVE9PTENIQUlOX1JPT1R9ICR7QU5EUk9J
RF9DWFhfRkxBR1N9IiApCi0gZW5kaWYoKQotZW5kaWYoKQotCi0jIGNhY2hlIGZsYWdzCi1zZXQo
IENNQUtFX0NYWF9GTEFHUyAgICAgICAgICAgIiIgICAgICAgICAgICAgICAgICAgICAgICBDQUNI
RSBTVFJJTkcgImMrKyBmbGFncyIgKQotc2V0KCBDTUFLRV9DX0ZMQUdTICAgICAgICAgICAgICIi
ICAgICAgICAgICAgICAgICAgICAgICAgQ0FDSEUgU1RSSU5HICJjIGZsYWdzIiApCi1zZXQoIENN
QUtFX0NYWF9GTEFHU19SRUxFQVNFICAgIi1PMyAtRE5ERUJVRyIgICAgICAgICAgICBDQUNIRSBT
VFJJTkcgImMrKyBSZWxlYXNlIGZsYWdzIiApCi1zZXQoIENNQUtFX0NfRkxBR1NfUkVMRUFTRSAg
ICAgIi1PMyAtRE5ERUJVRyIgICAgICAgICAgICBDQUNIRSBTVFJJTkcgImMgUmVsZWFzZSBmbGFn
cyIgKQotc2V0KCBDTUFLRV9DWFhfRkxBR1NfREVCVUcgICAgICItTzAgLWcgLURERUJVRyAtRF9E
RUJVRyIgQ0FDSEUgU1RSSU5HICJjKysgRGVidWcgZmxhZ3MiICkKLXNldCggQ01BS0VfQ19GTEFH
U19ERUJVRyAgICAgICAiLU8wIC1nIC1EREVCVUcgLURfREVCVUciIENBQ0hFIFNUUklORyAiYyBE
ZWJ1ZyBmbGFncyIgKQotc2V0KCBDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIiICAgICAgICAg
ICAgICAgICAgICAgICAgQ0FDSEUgU1RSSU5HICJzaGFyZWQgbGlua2VyIGZsYWdzIiApCi1zZXQo
IENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MgIiIgICAgICAgICAgICAgICAgICAgICAgICBDQUNI
RSBTVFJJTkcgIm1vZHVsZSBsaW5rZXIgZmxhZ3MiICkKLXNldCggQ01BS0VfRVhFX0xJTktFUl9G
TEFHUyAgICAiLVdsLC16LG5vY29weXJlbG9jIiAgICAgIENBQ0hFIFNUUklORyAiZXhlY3V0YWJs
ZSBsaW5rZXIgZmxhZ3MiICkKLQotIyBwdXQgZmxhZ3MgdG8gY2FjaGUgKGZvciBkZWJ1ZyBwdXJw
b3NlIG9ubHkpCi1zZXQoIEFORFJPSURfQ1hYX0ZMQUdTICAgICAgICAgIiR7QU5EUk9JRF9DWFhf
RkxBR1N9IiAgICAgICAgIENBQ0hFIElOVEVSTkFMICJBbmRyb2lkIHNwZWNpZmljIGMvYysrIGZs
YWdzIiApCi1zZXQoIEFORFJPSURfQ1hYX0ZMQUdTX1JFTEVBU0UgIiR7QU5EUk9JRF9DWFhfRkxB
R1NfUkVMRUFTRX0iIENBQ0hFIElOVEVSTkFMICJBbmRyb2lkIHNwZWNpZmljIGMvYysrIFJlbGVh
c2UgZmxhZ3MiICkKLXNldCggQU5EUk9JRF9DWFhfRkxBR1NfREVCVUcgICAiJHtBTkRST0lEX0NY
WF9GTEFHU19ERUJVR30iICAgQ0FDSEUgSU5URVJOQUwgIkFuZHJvaWQgc3BlY2lmaWMgYy9jKysg
RGVidWcgZmxhZ3MiICkKLXNldCggQU5EUk9JRF9MSU5LRVJfRkxBR1MgICAgICAiJHtBTkRST0lE
X0xJTktFUl9GTEFHU30iICAgICAgQ0FDSEUgSU5URVJOQUwgIkFuZHJvaWQgc3BlY2lmaWMgYy9j
KysgbGlua2VyIGZsYWdzIiApCi0KLSMgZmluaXNoIGZsYWdzCi1zZXQoIENNQUtFX0NYWF9GTEFH
UyAgICAgICAgICAgIiR7QU5EUk9JRF9DWFhfRkxBR1N9ICR7Q01BS0VfQ1hYX0ZMQUdTfSIgKQot
c2V0KCBDTUFLRV9DX0ZMQUdTICAgICAgICAgICAgICIke0FORFJPSURfQ1hYX0ZMQUdTfSAke0NN
QUtFX0NfRkxBR1N9IiApCi1zZXQoIENNQUtFX0NYWF9GTEFHU19SRUxFQVNFICAgIiR7QU5EUk9J
RF9DWFhfRkxBR1NfUkVMRUFTRX0gJHtDTUFLRV9DWFhfRkxBR1NfUkVMRUFTRX0iICkKLXNldCgg
Q01BS0VfQ19GTEFHU19SRUxFQVNFICAgICAiJHtBTkRST0lEX0NYWF9GTEFHU19SRUxFQVNFfSAk
e0NNQUtFX0NfRkxBR1NfUkVMRUFTRX0iICkKLXNldCggQ01BS0VfQ1hYX0ZMQUdTX0RFQlVHICAg
ICAiJHtBTkRST0lEX0NYWF9GTEFHU19ERUJVR30gJHtDTUFLRV9DWFhfRkxBR1NfREVCVUd9IiAp
Ci1zZXQoIENNQUtFX0NfRkxBR1NfREVCVUcgICAgICAgIiR7QU5EUk9JRF9DWFhfRkxBR1NfREVC
VUd9ICR7Q01BS0VfQ19GTEFHU19ERUJVR30iICkKLXNldCggQ01BS0VfU0hBUkVEX0xJTktFUl9G
TEFHUyAiJHtBTkRST0lEX0xJTktFUl9GTEFHU30gJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdT
fSIgKQotc2V0KCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTICIke0FORFJPSURfTElOS0VSX0ZM
QUdTfSAke0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1N9IiApCi1zZXQoIENNQUtFX0VYRV9MSU5L
RVJfRkxBR1MgICAgIiR7QU5EUk9JRF9MSU5LRVJfRkxBR1N9ICR7Q01BS0VfRVhFX0xJTktFUl9G
TEFHU30iICkKLQotaWYoIE1JUFMgQU5EIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgQU5EIEFORFJP
SURfTkRLX1JFTEVBU0UgU1RSRVFVQUwgInI4IiApCi0gc2V0KCBDTUFLRV9TSEFSRURfTElOS0VS
X0ZMQUdTICItV2wsLVQsJHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEh9LyR7QU5EUk9JRF9H
Q0NfVE9PTENIQUlOX05BTUV9L21pcHNlbGYueHNjICR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFH
U30iICkKLSBzZXQoIENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MgIi1XbCwtVCwke0FORFJPSURf
TkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtBTkRST0lEX0dDQ19UT09MQ0hBSU5fTkFNRX0vbWlwc2Vs
Zi54c2MgJHtDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTfSIgKQotIHNldCggQ01BS0VfRVhFX0xJ
TktFUl9GTEFHUyAgICAiLVdsLC1ULCR7QU5EUk9JRF9OREtfVE9PTENIQUlOU19QQVRIfS8ke0FO
RFJPSURfR0NDX1RPT0xDSEFJTl9OQU1FfS9taXBzZWxmLnggJHtDTUFLRV9FWEVfTElOS0VSX0ZM
QUdTfSIgKQotZW5kaWYoKQotCi0jIHBpZS9waWMKLWlmKCBOT1QgKEFORFJPSURfTkFUSVZFX0FQ
SV9MRVZFTCBMRVNTIDE2KSBBTkQgKE5PVCBERUZJTkVEIEFORFJPSURfQVBQX1BJRSBPUiBBTkRS
T0lEX0FQUF9QSUUpIEFORCAoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVIgMi44LjgpICkK
LSBzZXQoIENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgVFJVRSApCi0gc2V0KCBDTUFL
RV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC1mUElFIC1waWUi
KQotZWxzZSgpCi0gc2V0KCBDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIEZBTFNFICkK
LSBzZXQoIENNQUtFX0NYWF9GTEFHUyAiLWZwaWMgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gc2V0
KCBDTUFLRV9DX0ZMQUdTICAgIi1mcGljICR7Q01BS0VfQ19GTEFHU30iICkKLWVuZGlmKCkKLQot
IyBjb25maWd1cmUgcnR0aQotaWYoIERFRklORUQgQU5EUk9JRF9SVFRJIEFORCBBTkRST0lEX1NU
TF9GT1JDRV9GRUFUVVJFUyApCi0gaWYoIEFORFJPSURfUlRUSSApCi0gIHNldCggQ01BS0VfQ1hY
X0ZMQUdTICItZnJ0dGkgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gZWxzZSgpCi0gIHNldCggQ01B
S0VfQ1hYX0ZMQUdTICItZm5vLXJ0dGkgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gZW5kaWYoKQot
ZW5kaWYoKQotCi0jIGNvbmZpZ3VyZSBleGNlcHRpb3MKLWlmKCBERUZJTkVEIEFORFJPSURfRVhD
RVBUSU9OUyBBTkQgQU5EUk9JRF9TVExfRk9SQ0VfRkVBVFVSRVMgKQotIGlmKCBBTkRST0lEX0VY
Q0VQVElPTlMgKQotICBzZXQoIENNQUtFX0NYWF9GTEFHUyAiLWZleGNlcHRpb25zICR7Q01BS0Vf
Q1hYX0ZMQUdTfSIgKQotICBzZXQoIENNQUtFX0NfRkxBR1MgIi1mZXhjZXB0aW9ucyAke0NNQUtF
X0NfRkxBR1N9IiApCi0gZWxzZSgpCi0gIHNldCggQ01BS0VfQ1hYX0ZMQUdTICItZm5vLWV4Y2Vw
dGlvbnMgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gIHNldCggQ01BS0VfQ19GTEFHUyAiLWZuby1l
eGNlcHRpb25zICR7Q01BS0VfQ19GTEFHU30iICkKLSBlbmRpZigpCi1lbmRpZigpCi0KLSMgZ2xv
YmFsIGluY2x1ZGVzIGFuZCBsaW5rIGRpcmVjdG9yaWVzCi1pbmNsdWRlX2RpcmVjdG9yaWVzKCBT
WVNURU0gIiR7QU5EUk9JRF9TWVNST09UfS91c3IvaW5jbHVkZSIgJHtBTkRST0lEX1NUTF9JTkNM
VURFX0RJUlN9ICkKLWdldF9maWxlbmFtZV9jb21wb25lbnQoX19hbmRyb2lkX2luc3RhbGxfcGF0
aCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGlicy8ke0FORFJPSURfTkRLX0FCSV9OQU1FfSIg
QUJTT0xVVEUpICMgYXZvaWQgQ01QMDAxNSBwb2xpY3kgd2FybmluZwotbGlua19kaXJlY3Rvcmll
cyggIiR7X19hbmRyb2lkX2luc3RhbGxfcGF0aH0iICkKLQotIyBkZXRlY3QgaWYgbmVlZCBsaW5r
IGNydGJlZ2luX3NvLm8gZXhwbGljaXRseQotaWYoIE5PVCBERUZJTkVEIEFORFJPSURfRVhQTElD
SVRfQ1JUX0xJTksgKQotIHNldCggX19jbWQgIiR7Q01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElC
UkFSWX0iICkKLSBzdHJpbmcoIFJFUExBQ0UgIjxDTUFLRV9DWFhfQ09NUElMRVI+IiAiJHtDTUFL
RV9DWFhfQ09NUElMRVJ9ICR7Q01BS0VfQ1hYX0NPTVBJTEVSX0FSRzF9IiBfX2NtZCAiJHtfX2Nt
ZH0iICkKLSBzdHJpbmcoIFJFUExBQ0UgIjxDTUFLRV9DX0NPTVBJTEVSPiIgICAiJHtDTUFLRV9D
X0NPTVBJTEVSfSAke0NNQUtFX0NfQ09NUElMRVJfQVJHMX0iICAgX19jbWQgIiR7X19jbWR9IiAp
Ci0gc3RyaW5nKCBSRVBMQUNFICI8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1hYX0ZMQUdTPiIgIiR7
Q01BS0VfQ1hYX0ZMQUdTfSIgX19jbWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8
TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4iICIiIF9fY21kICIke19fY21kfSIgKQotIHN0cmluZygg
UkVQTEFDRSAiPExJTktfRkxBR1M+IiAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSIgX19j
bWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8Q01BS0VfU0hBUkVEX0xJQlJBUllf
Q1JFQVRFX0NYWF9GTEFHUz4iICItc2hhcmVkIiBfX2NtZCAiJHtfX2NtZH0iICkKLSBzdHJpbmco
IFJFUExBQ0UgIjxDTUFLRV9TSEFSRURfTElCUkFSWV9TT05BTUVfQ1hYX0ZMQUc+IiAiIiBfX2Nt
ZCAiJHtfX2NtZH0iICkKLSBzdHJpbmcoIFJFUExBQ0UgIjxUQVJHRVRfU09OQU1FPiIgIiIgX19j
bWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8VEFSR0VUPiIgIiR7Q01BS0VfQklO
QVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vdG9vbGNoYWluX2NydGxpbmtfdGVzdC5z
byIgX19jbWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8T0JKRUNUUz4iICJcIiR7
QU5EUk9JRF9TWVNST09UfS91c3IvbGliL2NydGJlZ2luX3NvLm9cIiIgX19jbWQgIiR7X19jbWR9
IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8TElOS19MSUJSQVJJRVM+IiAiIiBfX2NtZCAiJHtfX2Nt
ZH0iICkKLSBzZXBhcmF0ZV9hcmd1bWVudHMoIF9fY21kICkKLSBmb3JlYWNoKCBfX3ZhciBBTkRS
T0lEX05ESyBBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEggQU5EUk9JRF9TVEFOREFMT05FX1RP
T0xDSEFJTiApCi0gIGlmKCAke19fdmFyfSApCi0gICBzZXQoIF9fdG1wICIkeyR7X192YXJ9fSIg
KQotICAgc2VwYXJhdGVfYXJndW1lbnRzKCBfX3RtcCApCi0gICBzdHJpbmcoIFJFUExBQ0UgIiR7
X190bXB9IiAiJHske19fdmFyfX0iIF9fY21kICIke19fY21kfSIpCi0gIGVuZGlmKCkKLSBlbmRm
b3JlYWNoKCkKLSBzdHJpbmcoIFJFUExBQ0UgIiciICIiIF9fY21kICIke19fY21kfSIgKQotIHN0
cmluZyggUkVQTEFDRSAiXCIiICIiIF9fY21kICIke19fY21kfSIgKQotIGV4ZWN1dGVfcHJvY2Vz
cyggQ09NTUFORCAke19fY21kfSBSRVNVTFRfVkFSSUFCTEUgX19jbWRfcmVzdWx0IE9VVFBVVF9R
VUlFVCBFUlJPUl9RVUlFVCApCi0gaWYoIF9fY21kX3Jlc3VsdCBFUVVBTCAwICkKLSAgc2V0KCBB
TkRST0lEX0VYUExJQ0lUX0NSVF9MSU5LIE9OICkKLSBlbHNlKCkKLSAgc2V0KCBBTkRST0lEX0VY
UExJQ0lUX0NSVF9MSU5LIE9GRiApCi0gZW5kaWYoKQotZW5kaWYoKQotCi1pZiggQU5EUk9JRF9F
WFBMSUNJVF9DUlRfTElOSyApCi0gc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZ
ICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX0xJQlJBUll9IFwiJHtBTkRST0lEX1NZU1JPT1R9
L3Vzci9saWIvY3J0YmVnaW5fc28ub1wiIiApCi0gc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJF
RF9NT0RVTEUgICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRX0gXCIke0FORFJPSURf
U1lTUk9PVH0vdXNyL2xpYi9jcnRiZWdpbl9zby5vXCIiICkKLWVuZGlmKCkKLQotIyBzZXR1cCBv
dXRwdXQgZGlyZWN0b3JpZXMKLXNldCggQ01BS0VfSU5TVEFMTF9QUkVGSVggIiR7QU5EUk9JRF9U
T09MQ0hBSU5fUk9PVH0vdXNlciIgQ0FDSEUgU1RSSU5HICJwYXRoIGZvciBpbnN0YWxsaW5nIiAp
Ci0KLWlmKCBERUZJTkVEIExJQlJBUllfT1VUUFVUX1BBVEhfUk9PVAotICAgICAgT1IgRVhJU1RT
ICIke0NNQUtFX1NPVVJDRV9ESVJ9L0FuZHJvaWRNYW5pZmVzdC54bWwiCi0gICAgICBPUiAoRVhJ
U1RTICIke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL0FuZHJvaWRNYW5pZmVzdC54bWwiIEFORCBFWElT
VFMgIiR7Q01BS0VfU09VUkNFX0RJUn0vLi4vam5pLyIpICkKLSAgc2V0KCBMSUJSQVJZX09VVFBV
VF9QQVRIX1JPT1QgJHtDTUFLRV9TT1VSQ0VfRElSfSBDQUNIRSBQQVRIICJSb290IGZvciBiaW5h
cmllcyBvdXRwdXQsIHNldCB0aGlzIHRvIGNoYW5nZSB3aGVyZSBBbmRyb2lkIGxpYnMgYXJlIGlu
c3RhbGxlZCB0byIgKQotICBpZiggTk9UIF9DTUFLRV9JTl9UUllfQ09NUElMRSApCi0gICAgaWYo
IEVYSVNUUyAiJHtDTUFLRV9TT1VSQ0VfRElSfS9qbmkvQ01ha2VMaXN0cy50eHQiICkKLSAgICAg
IHNldCggRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCAiJHtMSUJSQVJZX09VVFBVVF9QQVRIX1JPT1R9
L2Jpbi8ke0FORFJPSURfTkRLX0FCSV9OQU1FfSIgQ0FDSEUgUEFUSCAiT3V0cHV0IGRpcmVjdG9y
eSBmb3IgYXBwbGljYXRpb25zIiApCi0gICAgZWxzZSgpCi0gICAgICBzZXQoIEVYRUNVVEFCTEVf
T1VUUFVUX1BBVEggIiR7TElCUkFSWV9PVVRQVVRfUEFUSF9ST09UfS9iaW4iIENBQ0hFIFBBVEgg
Ik91dHB1dCBkaXJlY3RvcnkgZm9yIGFwcGxpY2F0aW9ucyIgKQotICAgIGVuZGlmKCkKLSAgICBz
ZXQoIExJQlJBUllfT1VUUFVUX1BBVEggIiR7TElCUkFSWV9PVVRQVVRfUEFUSF9ST09UfS9saWJz
LyR7QU5EUk9JRF9OREtfQUJJX05BTUV9IiBDQUNIRSBQQVRIICJPdXRwdXQgZGlyZWN0b3J5IGZv
ciBBbmRyb2lkIGxpYnMiICkKLSAgZW5kaWYoKQotZW5kaWYoKQotCi0jIGNvcHkgc2hhZWQgc3Rs
IGxpYnJhcnkgdG8gYnVpbGQgZGlyZWN0b3J5Ci1pZiggTk9UIF9DTUFLRV9JTl9UUllfQ09NUElM
RSBBTkQgX19saWJzdGwgTUFUQ0hFUyAiWy5dc28kIiBBTkQgREVGSU5FRCBMSUJSQVJZX09VVFBV
VF9QQVRIICkKLSAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCggX19saWJzdGxuYW1lICIke19fbGli
c3RsfSIgTkFNRSApCi0gIGV4ZWN1dGVfcHJvY2VzcyggQ09NTUFORCAiJHtDTUFLRV9DT01NQU5E
fSIgLUUgY29weV9pZl9kaWZmZXJlbnQgIiR7X19saWJzdGx9IiAiJHtMSUJSQVJZX09VVFBVVF9Q
QVRIfS8ke19fbGlic3RsbmFtZX0iIFJFU1VMVF9WQVJJQUJMRSBfX2ZpbGVDb3B5UHJvY2VzcyAp
Ci0gIGlmKCBOT1QgX19maWxlQ29weVByb2Nlc3MgRVFVQUwgMCBPUiBOT1QgRVhJU1RTICIke0xJ
QlJBUllfT1VUUFVUX1BBVEh9LyR7X19saWJzdGxuYW1lfSIpCi0gICAgbWVzc2FnZSggU0VORF9F
UlJPUiAiRmFpbGVkIGNvcHlpbmcgb2YgJHtfX2xpYnN0bH0gdG8gdGhlICR7TElCUkFSWV9PVVRQ
VVRfUEFUSH0vJHtfX2xpYnN0bG5hbWV9IiApCi0gIGVuZGlmKCkKLSAgdW5zZXQoIF9fZmlsZUNv
cHlQcm9jZXNzICkKLSAgdW5zZXQoIF9fbGlic3RsbmFtZSApCi1lbmRpZigpCi0KLQotIyBzZXQg
dGhlc2UgZ2xvYmFsIGZsYWdzIGZvciBjbWFrZSBjbGllbnQgc2NyaXB0cyB0byBjaGFuZ2UgYmVo
YXZpb3IKLXNldCggQU5EUk9JRCBUcnVlICkKLXNldCggQlVJTERfQU5EUk9JRCBUcnVlICkKLQot
IyB3aGVyZSBpcyB0aGUgdGFyZ2V0IGVudmlyb25tZW50Ci1zZXQoIENNQUtFX0ZJTkRfUk9PVF9Q
QVRIICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2JpbiIgIiR7QU5EUk9JRF9UT09MQ0hBSU5f
Uk9PVH0vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9IiAiJHtBTkRST0lEX1NZU1JP
T1R9IiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9z
aGFyZSIgKQotCi0jIG9ubHkgc2VhcmNoIGZvciBsaWJyYXJpZXMgYW5kIGluY2x1ZGVzIGluIHRo
ZSBuZGsgdG9vbGNoYWluCi1zZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBP
TkxZICkKLXNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQotc2V0
KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCi0KLQotIyBtYWNybyB0
byBmaW5kIHBhY2thZ2VzIG9uIHRoZSBob3N0IE9TCi1tYWNybyggZmluZF9ob3N0X3BhY2thZ2Ug
KQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNIE5FVkVSICkKLSBzZXQo
IENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBORVZFUiApCi0gc2V0KCBDTUFLRV9G
SU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgTkVWRVIgKQotIGlmKCBDTUFLRV9IT1NUX1dJTjMy
ICkKLSAgU0VUKCBXSU4zMiAxICkKLSAgU0VUKCBVTklYICkKLSBlbHNlaWYoIENNQUtFX0hPU1Rf
QVBQTEUgKQotICBTRVQoIEFQUExFIDEgKQotICBTRVQoIFVOSVggKQotIGVuZGlmKCkKLSBmaW5k
X3BhY2thZ2UoICR7QVJHTn0gKQotIFNFVCggV0lOMzIgKQotIFNFVCggQVBQTEUgKQotIFNFVCgg
VU5JWCAxICkKLSBzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBPTkxZICkK
LSBzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBPTkxZICkKLSBzZXQoIENN
QUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZICkKLWVuZG1hY3JvKCkKLQotCi0j
IG1hY3JvIHRvIGZpbmQgcHJvZ3JhbXMgb24gdGhlIGhvc3QgT1MKLW1hY3JvKCBmaW5kX2hvc3Rf
cHJvZ3JhbSApCi0gc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gTkVWRVIg
KQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE5FVkVSICkKLSBzZXQo
IENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBORVZFUiApCi0gaWYoIENNQUtFX0hP
U1RfV0lOMzIgKQotICBTRVQoIFdJTjMyIDEgKQotICBTRVQoIFVOSVggKQotIGVsc2VpZiggQ01B
S0VfSE9TVF9BUFBMRSApCi0gIFNFVCggQVBQTEUgMSApCi0gIFNFVCggVU5JWCApCi0gZW5kaWYo
KQotIGZpbmRfcHJvZ3JhbSggJHtBUkdOfSApCi0gU0VUKCBXSU4zMiApCi0gU0VUKCBBUFBMRSAp
Ci0gU0VUKCBVTklYIDEgKQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFN
IE9OTFkgKQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQot
IHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkgKQotZW5kbWFjcm8o
KQotCi0KLSMgZXhwb3J0IHRvb2xjaGFpbiBzZXR0aW5ncyBmb3IgdGhlIHRyeV9jb21waWxlKCkg
Y29tbWFuZAotaWYoIE5PVCBfQ01BS0VfSU5fVFJZX0NPTVBJTEUgKQotIHNldCggX190b29sY2hh
aW5fY29uZmlnICIiKQotIGZvcmVhY2goIF9fdmFyIE5ES19DQ0FDSEUgIExJQlJBUllfT1VUUFVU
X1BBVEhfUk9PVCAgQU5EUk9JRF9GT1JCSURfU1lHV0lOCi0gICAgICAgICAgICAgICAgQU5EUk9J
RF9OREtfSE9TVF9YNjQKLSAgICAgICAgICAgICAgICBBTkRST0lEX05ESwotICAgICAgICAgICAg
ICAgIEFORFJPSURfTkRLX0xBWU9VVAotICAgICAgICAgICAgICAgIEFORFJPSURfU1RBTkRBTE9O
RV9UT09MQ0hBSU4KLSAgICAgICAgICAgICAgICBBTkRST0lEX1RPT0xDSEFJTl9OQU1FCi0gICAg
ICAgICAgICAgICAgQU5EUk9JRF9BQkkKLSAgICAgICAgICAgICAgICBBTkRST0lEX05BVElWRV9B
UElfTEVWRUwKLSAgICAgICAgICAgICAgICBBTkRST0lEX1NUTAotICAgICAgICAgICAgICAgIEFO
RFJPSURfU1RMX0ZPUkNFX0ZFQVRVUkVTCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9GT1JDRV9B
Uk1fQlVJTEQKLSAgICAgICAgICAgICAgICBBTkRST0lEX05PX1VOREVGSU5FRAotICAgICAgICAg
ICAgICAgIEFORFJPSURfU09fVU5ERUZJTkVECi0gICAgICAgICAgICAgICAgQU5EUk9JRF9GVU5D
VElPTl9MRVZFTF9MSU5LSU5HCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9HT0xEX0xJTktFUgot
ICAgICAgICAgICAgICAgIEFORFJPSURfTk9FWEVDU1RBQ0sKLSAgICAgICAgICAgICAgICBBTkRS
T0lEX1JFTFJPCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9MSUJNX1BBVEgKLSAgICAgICAgICAg
ICAgICBBTkRST0lEX0VYUExJQ0lUX0NSVF9MSU5LCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9B
UFBfUElFCi0gICAgICAgICAgICAgICAgKQotICBpZiggREVGSU5FRCAke19fdmFyfSApCi0gICBp
ZiggJHtfX3Zhcn0gTUFUQ0hFUyAiICIpCi0gICAgc2V0KCBfX3Rvb2xjaGFpbl9jb25maWcgIiR7
X190b29sY2hhaW5fY29uZmlnfXNldCggJHtfX3Zhcn0gXCIkeyR7X192YXJ9fVwiIENBQ0hFIElO
VEVSTkFMIFwiXCIgKVxuIiApCi0gICBlbHNlKCkKLSAgICBzZXQoIF9fdG9vbGNoYWluX2NvbmZp
ZyAiJHtfX3Rvb2xjaGFpbl9jb25maWd9c2V0KCAke19fdmFyfSAkeyR7X192YXJ9fSBDQUNIRSBJ
TlRFUk5BTCBcIlwiIClcbiIgKQotICAgZW5kaWYoKQotICBlbmRpZigpCi0gZW5kZm9yZWFjaCgp
Ci0gZmlsZSggV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9S
WX0vYW5kcm9pZC50b29sY2hhaW4uY29uZmlnLmNtYWtlIiAiJHtfX3Rvb2xjaGFpbl9jb25maWd9
IiApCi0gdW5zZXQoIF9fdG9vbGNoYWluX2NvbmZpZyApCi1lbmRpZigpCi0KLQotIyBmb3JjZSBj
bWFrZSB0byBwcm9kdWNlIC8gaW5zdGVhZCBvZiBcIGluIGJ1aWxkIGNvbW1hbmRzIGZvciBOaW5q
YSBnZW5lcmF0b3IKLWlmKCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEiIEFORCBDTUFL
RV9IT1NUX1dJTjMyICkKLSAjIGl0IGlzIGEgYmFkIGhhY2sgYWZ0ZXIgYWxsCi0gIyBDTWFrZSBn
ZW5lcmF0ZXMgTmluamEgbWFrZWZpbGVzIHdpdGggVU5JWCBwYXRocyBvbmx5IGlmIGl0IHRoaW5r
cyB0aGF0IHdlIGFyZSBnb2luZyB0byBidWlsZCB3aXRoIE1pbkdXCi0gc2V0KCBDTUFLRV9DT01Q
SUxFUl9JU19NSU5HVyBUUlVFICkgIyB0ZWxsIENNYWtlIHRoYXQgd2UgYXJlIE1pbkdXCi0gc2V0
KCBDTUFLRV9DUk9TU0NPTVBJTElORyBUUlVFICkgICAgIyBzdG9wIHJlY3Vyc2lvbgotIGVuYWJs
ZV9sYW5ndWFnZSggQyApCi0gZW5hYmxlX2xhbmd1YWdlKCBDWFggKQotICMgdW5zZXQoIENNQUtF
X0NPTVBJTEVSX0lTX01JTkdXICkgIyBjYW4ndCB1bnNldCBiZWNhdXNlIENNYWtlIGRvZXMgbm90
IGNvbnZlcnQgYmFjay1zbGFzaGVzIGluIHJlc3BvbnNlIGZpbGVzIHdpdGhvdXQgaXQKLSB1bnNl
dCggTUlOR1cgKQotZW5kaWYoKQotCi0KLSMgVmFyaWFibGVzIGNvbnRyb2xsaW5nIGJlaGF2aW9y
IG9yIHNldCBieSBjbWFrZSB0b29sY2hhaW46Ci0jICAgQU5EUk9JRF9BQkkgOiAiYXJtZWFiaS12
N2EiIChkZWZhdWx0KSwgImFybWVhYmkiLCAiYXJtZWFiaS12N2Egd2l0aCBORU9OIiwgImFybWVh
YmktdjdhIHdpdGggVkZQVjMiLCAiYXJtZWFiaS12NiB3aXRoIFZGUCIsICJ4ODYiLCAibWlwcyIs
ICJhcm02NC12OGEiLCAieDg2XzY0IiwgIm1pcHM2NCIKLSMgICBBTkRST0lEX05BVElWRV9BUElf
TEVWRUwgOiAzLDQsNSw4LDksMTQsMTUsMTYsMTcsMTgsMTksMjEgKGRlcGVuZHMgb24gTkRLIHZl
cnNpb24pCi0jICAgQU5EUk9JRF9TVEwgOiBnbnVzdGxfc3RhdGljL2dudXN0bF9zaGFyZWQvc3Rs
cG9ydF9zdGF0aWMvc3RscG9ydF9zaGFyZWQvZ2FiaSsrX3N0YXRpYy9nYWJpKytfc2hhcmVkL3N5
c3RlbV9yZS9zeXN0ZW0vbm9uZQotIyAgIEFORFJPSURfRk9SQklEX1NZR1dJTiA6IE9OL09GRgot
IyAgIEFORFJPSURfTk9fVU5ERUZJTkVEIDogT04vT0ZGCi0jICAgQU5EUk9JRF9TT19VTkRFRklO
RUQgOiBPRkYvT04gIChkZWZhdWx0IGRlcGVuZHMgb24gTkRLIHZlcnNpb24pCi0jICAgQU5EUk9J
RF9GVU5DVElPTl9MRVZFTF9MSU5LSU5HIDogT04vT0ZGCi0jICAgQU5EUk9JRF9HT0xEX0xJTktF
UiA6IE9OL09GRgotIyAgIEFORFJPSURfTk9FWEVDU1RBQ0sgOiBPTi9PRkYKLSMgICBBTkRST0lE
X1JFTFJPIDogT04vT0ZGCi0jICAgQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgOiBPTi9PRkYKLSMg
ICBBTkRST0lEX1NUTF9GT1JDRV9GRUFUVVJFUyA6IE9OL09GRgotIyAgIEFORFJPSURfTElCTV9Q
QVRIIDogcGF0aCB0byBsaWJtLnNvIChzZXQgdG8gc29tZXRoaW5nIGxpa2UgJChUT1ApL291dC90
YXJnZXQvcHJvZHVjdC88cHJvZHVjdF9uYW1lPi9vYmovbGliL2xpYm0uc28pIHRvIHdvcmthcm91
bmQgdW5yZXNvbHZlZCBgc2luY29zYAotIyBDYW4gYmUgc2V0IG9ubHkgYXQgdGhlIGZpcnN0IHJ1
bjoKLSMgICBBTkRST0lEX05ESyA6IHBhdGggdG8geW91ciBOREsgaW5zdGFsbAotIyAgIE5ES19D
Q0FDSEUgOiBwYXRoIHRvIHlvdXIgY2NhY2hlIGV4ZWN1dGFibGUKLSMgICBBTkRST0lEX1RPT0xD
SEFJTl9OQU1FIDogdGhlIE5ESyBuYW1lIG9mIGNvbXBpbGVyIHRvb2xjaGFpbgotIyAgIEFORFJP
SURfTkRLX0hPU1RfWDY0IDogdHJ5IHRvIHVzZSB4ODZfNjQgdG9vbGNoYWluIChkZWZhdWx0IGZv
ciB4NjQgaG9zdCBzeXN0ZW1zKQotIyAgIEFORFJPSURfTkRLX0xBWU9VVCA6IHRoZSBpbm5lciBO
REsgc3RydWN0dXJlIChSRUxFQVNFLCBMSU5BUk8sIEFORFJPSUQpCi0jICAgTElCUkFSWV9PVVRQ
VVRfUEFUSF9ST09UIDogPGFueSB2YWxpZCBwYXRoPgotIyAgIEFORFJPSURfU1RBTkRBTE9ORV9U
T09MQ0hBSU4KLSMKLSMgUHJpbWFyeSByZWFkLW9ubHkgdmFyaWFibGVzOgotIyAgIEFORFJPSUQg
OiBhbHdheXMgVFJVRQotIyAgIEFSTUVBQkkgOiBUUlVFIGZvciBhcm0gdjYgYW5kIG9sZGVyIGRl
dmljZXMKLSMgICBBUk1FQUJJX1Y2IDogVFJVRSBmb3IgYXJtIHY2Ci0jICAgQVJNRUFCSV9WN0Eg
OiBUUlVFIGZvciBhcm0gdjdhCi0jICAgQVJNNjRfVjhBIDogVFJVRSBmb3IgYXJtNjQtdjhhCi0j
ICAgTkVPTiA6IFRSVUUgaWYgTkVPTiB1bml0IGlzIGVuYWJsZWQKLSMgICBWRlBWMyA6IFRSVUUg
aWYgVkZQIHZlcnNpb24gMyBpcyBlbmFibGVkCi0jICAgWDg2IDogVFJVRSBpZiBjb25maWd1cmVk
IGZvciB4ODYKLSMgICBYODZfNjQgOiBUUlVFIGlmIGNvbmZpZ3VyZWQgZm9yIHg4Nl82NAotIyAg
IE1JUFMgOiBUUlVFIGlmIGNvbmZpZ3VyZWQgZm9yIG1pcHMKLSMgICBNSVBTNjQgOiBUUlVFIGlm
IGNvbmZpZ3VyZWQgZm9yIG1pcHM2NAotIyAgIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgOiBUUlVF
IGlmIE5ESyBpcyB1c2VkCi0jICAgQlVJTERfV0lUSF9TVEFOREFMT05FX1RPT0xDSEFJTiA6IFRS
VUUgaWYgc3RhbmRhbG9uZSB0b29sY2hhaW4gaXMgdXNlZAotIyAgIEFORFJPSURfTkRLX0hPU1Rf
U1lTVEVNX05BTUUgOiAid2luZG93cyIsICJsaW51eC14ODYiIG9yICJkYXJ3aW4teDg2IiBkZXBl
bmRpbmcgb24gaG9zdCBwbGF0Zm9ybQotIyAgIEFORFJPSURfTkRLX0FCSV9OQU1FIDogImFybWVh
YmkiLCAiYXJtZWFiaS12N2EiLCAieDg2IiwgIm1pcHMiLCAiYXJtNjQtdjhhIiwgIng4Nl82NCIs
ICJtaXBzNjQiIGRlcGVuZGluZyBvbiBBTkRST0lEX0FCSQotIyAgIEFORFJPSURfTkRLX1JFTEVB
U0UgOiBmcm9tIHI1IHRvIHIxMGQ7IHNldCBvbmx5IGZvciBOREsKLSMgICBBTkRST0lEX05ES19S
RUxFQVNFX05VTSA6IG51bWVyaWMgQU5EUk9JRF9OREtfUkVMRUFTRSB2ZXJzaW9uICgxMDAwKm1h
am9yK21pbm9yKQotIyAgIEFORFJPSURfQVJDSF9OQU1FIDogImFybSIsICJ4ODYiLCAibWlwcyIs
ICJhcm02NCIsICJ4ODZfNjQiLCAibWlwczY0IiBkZXBlbmRpbmcgb24gQU5EUk9JRF9BQkkKLSMg
ICBBTkRST0lEX1NZU1JPT1QgOiBwYXRoIHRvIHRoZSBjb21waWxlciBzeXNyb290Ci0jICAgVE9P
TF9PU19TVUZGSVggOiAiIiBvciAiLmV4ZSIgZGVwZW5kaW5nIG9uIGhvc3QgcGxhdGZvcm0KLSMg
ICBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HIDogVFJVRSBpZiBjbGFuZyBjb21waWxlciBpcyB1
c2VkCi0jCi0jIFNlY29uZGFyeSAobGVzcyBzdGFibGUpIHJlYWQtb25seSB2YXJpYWJsZXM6Ci0j
ICAgQU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OIDogR0NDIHZlcnNpb24gdXNlZCAobm90IENsYW5n
IHZlcnNpb24pCi0jICAgQU5EUk9JRF9DTEFOR19WRVJTSU9OIDogdmVyc2lvbiBvZiBjbGFuZyBj
b21waWxlciBpZiBjbGFuZyBpcyB1c2VkCi0jICAgQU5EUk9JRF9DWFhfRkxBR1MgOiBDL0MrKyBj
b21waWxlciBmbGFncyByZXF1aXJlZCBieSBBbmRyb2lkIHBsYXRmb3JtCi0jICAgQU5EUk9JRF9T
VVBQT1JURURfQUJJUyA6IGxpc3Qgb2YgY3VycmVudGx5IGFsbG93ZWQgdmFsdWVzIGZvciBBTkRS
T0lEX0FCSQotIyAgIEFORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRSA6ICJhcm0tbGludXgt
YW5kcm9pZGVhYmkiLCAiYXJtLWVhYmkiIG9yICJpNjg2LWFuZHJvaWQtbGludXgiCi0jICAgQU5E
Uk9JRF9UT09MQ0hBSU5fUk9PVCA6IHBhdGggdG8gdGhlIHRvcCBsZXZlbCBvZiB0b29sY2hhaW4g
KHN0YW5kYWxvbmUgb3IgcGxhY2VkIGluc2lkZSBOREspCi0jICAgQU5EUk9JRF9DTEFOR19UT09M
Q0hBSU5fUk9PVCA6IHBhdGggdG8gY2xhbmcgdG9vbHMKLSMgICBBTkRST0lEX1NVUFBPUlRFRF9O
QVRJVkVfQVBJX0xFVkVMUyA6IGxpc3Qgb2YgbmF0aXZlIEFQSSBsZXZlbHMgZm91bmQgaW5zaWRl
IE5ESwotIyAgIEFORFJPSURfU1RMX0lOQ0xVREVfRElSUyA6IHN0bCBpbmNsdWRlIHBhdGhzCi0j
ICAgQU5EUk9JRF9SVFRJIDogaWYgcnR0aSBpcyBlbmFibGVkIGJ5IHRoZSBydW50aW1lCi0jICAg
QU5EUk9JRF9FWENFUFRJT05TIDogaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBieSB0aGUgcnVu
dGltZQotIyAgIEFORFJPSURfR0NDX1RPT0xDSEFJTl9OQU1FIDogcmVhZC1vbmx5LCBkaWZmZXJz
IGZyb20gQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSBvbmx5IGlmIGNsYW5nIGlzIHVzZWQKLSMKLSMg
RGVmYXVsdHM6Ci0jICAgQU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUwKLSMgICBBTkRST0lE
X0RFRkFVTFRfTkRLX0FQSV9MRVZFTF8ke0FSQ0h9Ci0jICAgQU5EUk9JRF9OREtfU0VBUkNIX1BB
VEhTCi0jICAgQU5EUk9JRF9TVVBQT1JURURfQUJJU18ke0FSQ0h9Ci0jICAgQU5EUk9JRF9TVVBQ
T1JURURfTkRLX1ZFUlNJT05TCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9u
ZGtfbGlua3MubWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2Uv
bmRrX2xpbmtzLm1kCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9p
ZC1jbWFrZS9uZGtfbGlua3MubWQJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTEgKzAsMCBAQAotCi09
PT09PT09PT09PT09PSByMSA9PT09PT09PT09PT09PSAoZGVhZCBsaW5rcykKLQotKiBodHRwOi8v
ZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay0xLjVfcjEtd2luZG93cy56aXAK
LSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstMS41X3IxLWRh
cndpbi14ODYuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQt
bmRrLTEuNV9yMS1saW51eC14ODYuemlwCi0KLT09PT09PT09PT09PT09IHIyID09PT09PT09PT09
PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstMS42
X3IxLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLTEuNl9yMS1kYXJ3aW4teDg2LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRy
b2lkL25kay9hbmRyb2lkLW5kay0xLjZfcjEtbGludXgteDg2LnppcAotCi09PT09PT09PT09PT09
PSByMyA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRr
L2FuZHJvaWQtbmRrLXIzLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJv
aWQvbmRrL2FuZHJvaWQtbmRrLXIzLWRhcndpbi14ODYuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUu
Y29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIzLWxpbnV4LXg4Ni56aXAKLQotPT09PT09PT09
PT09PT0gcjQgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kay1yNC13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yNC1kYXJ3aW4teDg2LnppcAotKiBodHRwOi8vZGwuZ29v
Z2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNC1saW51eC14ODYuemlwCi0KLT09PT09
PT09PT09PT09IHI0YiA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2Fu
ZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI0Yi13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNGItZGFyd2luLXg4Ni56aXAKLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjRiLWxpbnV4LXg4Ni56aXAK
LQotPT09PT09PT09PT09PT0gcjUgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNS13aW5kb3dzLnppcAotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNS1kYXJ3aW4teDg2LnRhci5iejIK
LSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjUtbGludXgt
eDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjViID09PT09PT09PT09PT09Ci0KLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjViLXdpbmRvd3Muemlw
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI1Yi1kYXJ3
aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9p
ZC1uZGstcjViLWxpbnV4LXg4Ni50YXIuYnoyCi0KLT09PT09PT09PT09PT09IHI1YyA9PT09PT09
PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRr
LXI1Yy13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRy
b2lkLW5kay1yNWMtZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2Fu
ZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI1Yy1saW51eC14ODYudGFyLmJ6MgotCi09PT09PT09PT09
PT09PSByNiA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQv
bmRrL2FuZHJvaWQtbmRrLXI2LXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2Fu
ZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI2LWRhcndpbi14ODYudGFyLmJ6MgotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNi1saW51eC14ODYudGFyLmJ6Mgot
Ci09PT09PT09PT09PT09PSByNmIgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNmItd2luZG93cy56aXAKLSogaHR0cDovL2Rs
Lmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjZiLWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNmItbGlu
dXgteDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjcgPT09PT09PT09PT09PT0KLQotKiBo
dHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNy13aW5kb3dzLnpp
cAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNy1kYXJ3
aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9p
ZC1uZGstcjctbGludXgteDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjdiID09PT09PT09
PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGst
cjdiLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI3Yi1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5k
cm9pZC9uZGsvYW5kcm9pZC1uZGstcjdiLWxpbnV4LXg4Ni50YXIuYnoyCi0KLT09PT09PT09PT09
PT09IHI3YyA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQv
bmRrL2FuZHJvaWQtbmRrLXI3Yy13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yN2MtZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9k
bC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI3Yy1saW51eC14ODYudGFyLmJ6
MgotCi09PT09PT09PT09PT09PSByOCA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29n
bGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4LXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9k
bC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4LWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOC1saW51
eC14ODYudGFyLmJ6MgotCi09PT09PT09PT09PT09PSByOGIgPT09PT09PT09PT09PT0KLQotKiBo
dHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGItd2luZG93cy56
aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjhiLWRh
cndpbi14ODYudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRy
b2lkLW5kay1yOGItbGludXgteDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjhjID09PT09
PT09PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1u
ZGstcjhjLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrLXI4Yy1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20v
YW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjhjLWxpbnV4LXg4Ni50YXIuYnoyCi0KLT09PT09PT09
PT09PT09IHI4ZCA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJv
aWQvbmRrL2FuZHJvaWQtbmRrLXI4ZC13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNv
bS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGQtZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6
Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4ZC1saW51eC14ODYudGFy
LmJ6MgotCi09PT09PT09PT09PT09PSByOGUgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGUtd2luZG93cy14ODYuemlwCi0q
IGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4ZS13aW5kb3dz
LXg4Nl82NC56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1u
ZGstcjhlLWRhcndpbi14ODYudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kay1yOGUtZGFyd2luLXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4ZS1saW51eC14ODYudGFyLmJ6Mgot
KiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGUtbGludXgt
eDg2XzY0LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjkgPT09PT09PT09PT09PT0KLQotKiBo
dHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOS13aW5kb3dzLXg4
Ni56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjkt
d2luZG93cy14ODYtbGVnYWN5LXRvb2xjaGFpbnMuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LXdpbmRvd3MteDg2XzY0LnppcAotKiBodHRwOi8v
ZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOS13aW5kb3dzLXg4Nl82NC1s
ZWdhY3ktdG9vbGNoYWlucy56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsv
YW5kcm9pZC1uZGstcjktZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWRhcndpbi14ODYtbGVnYWN5LXRvb2xjaGFpbnMu
dGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1y
OS1kYXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9u
ZGsvYW5kcm9pZC1uZGstcjktZGFyd2luLXg4Nl82NC1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoy
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWxpbnV4
LXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQt
bmRrLXI5LWxpbnV4LXg4Ni1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoyCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWxpbnV4LXg4Nl82NC50YXIuYnoy
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWxpbnV4
LXg4Nl82NC1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoyCi0KLT09PT09PT09PT09PT09IHI5YiA9
PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI5Yi13aW5kb3dzLXg4Ni56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9p
ZC9uZGsvYW5kcm9pZC1uZGstcjliLXdpbmRvd3MteDg2LWxlZ2FjeS10b29sY2hhaW5zLnppcAot
KiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWItd2luZG93
cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQt
bmRrLXI5Yi13aW5kb3dzLXg4Nl82NC1sZWdhY3ktdG9vbGNoYWlucy56aXAKLSogaHR0cDovL2Rs
Lmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjliLWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWItZGFy
d2luLXg4Ni1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5Yi1kYXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjliLWRhcndpbi14ODZf
NjQtbGVnYWN5LXRvb2xjaGFpbnMudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRy
b2lkL25kay9hbmRyb2lkLW5kay1yOWItbGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdv
b2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjliLWxpbnV4LXg4Ni1sZWdhY3ktdG9v
bGNoYWlucy50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI5Yi1saW51eC14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWItbGludXgteDg2XzY0LWxlZ2FjeS10b29sY2hhaW5z
LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjljID09PT09PT09PT09PT09Ci0KLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjljLXdpbmRvd3MteDg2Lnpp
cAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWMtd2lu
ZG93cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI5Yy1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5k
cm9pZC9uZGsvYW5kcm9pZC1uZGstcjljLWRhcndpbi14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8v
ZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWMtbGludXgteDg2LnRhci5i
ejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjljLWxp
bnV4LXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrLXI5Yy1jeHgtc3RsLWxpYnMtd2l0aC1kZWJ1Z2dpbmctaW5mby56aXAKLQotPT09
PT09PT09PT09PT0gcjlkID09PT09PT09PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20v
YW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjlkLXdpbmRvd3MteDg2LnppcAotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWQtd2luZG93cy14ODZfNjQuemlw
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5ZC1kYXJ3
aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9p
ZC1uZGstcjlkLWRhcndpbi14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWQtbGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2Rs
Lmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjlkLWxpbnV4LXg4Nl82NC50YXIu
YnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5ZC1j
eHgtc3RsLWxpYnMtd2l0aC1kZWJ1Zy1pbmZvLnppcAotCi09PT09PT09PT09PT09PSByMTAgPT09
PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lk
LW5kazMyLXIxMC13aW5kb3dzLXg4Ni56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9p
ZC9uZGsvYW5kcm9pZC1uZGszMi1yMTAtd2luZG93cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrMzItcjEwLWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kazMyLXIxMC1k
YXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsv
YW5kcm9pZC1uZGszMi1yMTAtbGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5j
b20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGszMi1yMTAtbGludXgteDg2XzY0LnRhci5iejIKLSog
aHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTAtd2luZG93
cy14ODYuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRr
NjQtcjEwLXdpbmRvd3MteDg2XzY0LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kazY0LXIxMC1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdv
b2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTAtZGFyd2luLXg4Nl82NC50YXIu
YnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrNjQtcjEw
LWxpbnV4LXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrNjQtcjEwLWxpbnV4LXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUu
Y29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIxMC1jeHgtc3RsLWxpYnMtd2l0aC1kZWJ1Zy1p
bmZvLnppcAotCi09PT09PT09PT09PT09PSByMTBiID09PT09PT09PT09PT09Ci0KLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGszMi1yMTBiLXdpbmRvd3MteDg2
LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kazMyLXIx
MGItd2luZG93cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRr
L2FuZHJvaWQtbmRrMzItcjEwYi1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2ds
ZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGszMi1yMTBiLWRhcndpbi14ODZfNjQudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kazMyLXIxMGIt
bGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5k
cm9pZC1uZGszMi1yMTBiLWxpbnV4LXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUu
Y29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrNjQtcjEwYi13aW5kb3dzLXg4Ni56aXAKLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTBiLXdpbmRvd3Mt
eDg2XzY0LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5k
azY0LXIxMGItZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJv
aWQvbmRrL2FuZHJvaWQtbmRrNjQtcjEwYi1kYXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTBiLWxpbnV4LXg4Ni50
YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrNjQt
cjEwYi1saW51eC14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kay1yMTBiLWN4eC1zdGwtbGlicy13aXRoLWRlYnVnLWluZm8uemlwCi0K
LT09PT09PT09PT09PT09IHIxMGMgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yMTBjLXdpbmRvd3MteDg2LmV4ZQotKiBodHRw
Oi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yMTBjLXdpbmRvd3MteDg2
XzY0LmV4ZQotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1y
MTBjLWRhcndpbi14ODYuYmluCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrLXIxMGMtZGFyd2luLXg4Nl82NC5iaW4KLSogaHR0cDovL2RsLmdvb2dsZS5jb20v
YW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjEwYy1saW51eC14ODYuYmluCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIxMGMtbGludXgteDg2XzY0LmJpbgot
Ci09PT09PT09PT09PT09PSByMTBkID09PT09PT09PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2ds
ZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjEwZC13aW5kb3dzLXg4Ni5leGUKLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjEwZC13aW5kb3dzLXg4
Nl82NC5leGUKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGst
cjEwZC1kYXJ3aW4teDg2LmJpbgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9h
bmRyb2lkLW5kay1yMTBkLWRhcndpbi14ODZfNjQuYmluCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIxMGQtbGludXgteDg2LmJpbgotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yMTBkLWxpbnV4LXg4Nl82NC5iaW4K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9y
aW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL0FuZHJvaWROZGtHZGIuY21ha2UK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2UvQW5kcm9pZE5ka0dk
Yi5jbWFrZQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21h
a2UvQW5kcm9pZE5ka0dkYi5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDk2ICswLDAgQEAKLSMg
Q29weXJpZ2h0IChjKSAyMDE0LCBQYXZlbCBSb2p0YmVyZwotIyBBbGwgcmlnaHRzIHJlc2VydmVk
LgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0jCi0jIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKLSMgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSMKLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotIyB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0jIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIwot
IyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0jIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUK
LSMgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSMgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVzYWdl
OgotIyAxLiBwbGFjZSBBbmRyb2lkTmRrR2RiLmNtYWtlIHNvbWV3aGVyZSBpbnNpZGUgJHtDTUFL
RV9NT0RVTEVfUEFUSH0KLSMgMi4gaW5zaWRlIHlvdXIgcHJvamVjdCBhZGQKLSMKLSMgICAgaW5j
bHVkZShBbmRyb2lkTmRrR2RiKQotIyAgICBhbmRyb2lkX25ka19nZGJfZW5hYmxlKCkKLSMgICAg
IyBmb3IgZWFjaCB0YXJnZXQKLSMgICAgYWRkX2xpYnJhcnkoTXlMaWJyYXJ5IC4uLikKLSMgICAg
YW5kcm9pZF9uZGtfZ2RiX2RlYnVnZ2FibGUoTXlMaWJyYXJ5KSAgICAKLQotCi0jIGFkZCBnZGJz
ZXJ2ZXIgYW5kIGdlbmVyYWwgZ2RiIGNvbmZpZ3VyYXRpb24gdG8gcHJvamVjdAotIyBhbHNvIGNy
ZWF0ZSBhIG1pbmluYWwgTkRLIHNrZWxldG9uIHNvIG5kay1nZGIgZmluZHMgdGhlIHBhdGhzCi0j
Ci0jIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgZGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgYW5kcm9p
ZCBwcm9qZWN0LgotIyB1c2VzIFBST0pFQ1RfU09VUkNFX0RJUiBieSBkZWZhdWx0LgotbWFjcm8o
YW5kcm9pZF9uZGtfZ2RiX2VuYWJsZSkKLSAgICBpZihBTkRST0lEKQotICAgICAgICAjIGNyZWF0
ZSBjdXN0b20gdGFyZ2V0IHRoYXQgZGVwZW5kcyBvbiB0aGUgcmVhbCB0YXJnZXQgc28gaXQgZ2V0
cyBleGVjdXRlZCBhZnRlcndhcmRzCi0gICAgICAgIGFkZF9jdXN0b21fdGFyZ2V0KE5ES19HREIg
QUxMKQotICAgICAgICAKLSAgICAgICAgaWYoJHtBUkdDfSkKLSAgICAgICAgICAgIHNldChBTkRS
T0lEX1BST0pFQ1RfRElSICR7QVJHVjB9KQotICAgICAgICBlbHNlKCkKLSAgICAgICAgICAgIHNl
dChBTkRST0lEX1BST0pFQ1RfRElSICR7UFJPSkVDVF9TT1VSQ0VfRElSfSkKLSAgICAgICAgZW5k
aWYoKQotCi0gICAgICAgIHNldChOREtfR0RCX1NPTElCX1BBVEggJHtBTkRST0lEX1BST0pFQ1Rf
RElSfS9vYmovbG9jYWwvJHtBTkRST0lEX05ES19BQklfTkFNRX0vKQotICAgICAgICBmaWxlKE1B
S0VfRElSRUNUT1JZICR7TkRLX0dEQl9TT0xJQl9QQVRIfSkKLSAgICAgICAgCi0gICAgICAgICMg
MS4gZ2VuZXJhdGUgZXNzZW50aWFsIEFuZHJvaWQgTWFrZWZpbGVzCi0gICAgICAgIGZpbGUoTUFL
RV9ESVJFQ1RPUlkgJHtBTkRST0lEX1BST0pFQ1RfRElSfS9qbmkpCi0gICAgICAgIGlmKE5PVCBF
WElTVFMgJHtBTkRST0lEX1BST0pFQ1RfRElSfS9qbmkvQW5kcm9pZC5taykKLSAgICAgICAgICAg
IGZpbGUoV1JJVEUgJHtBTkRST0lEX1BST0pFQ1RfRElSfS9qbmkvQW5kcm9pZC5tayAiQVBQX0FC
SSA6PSAke0FORFJPSURfTkRLX0FCSV9OQU1FfVxuIikKLSAgICAgICAgZW5kaWYoKQotICAgICAg
ICBpZihOT1QgRVhJU1RTICR7QU5EUk9JRF9QUk9KRUNUX0RJUn0vam5pL0FwcGxpY2F0aW9uLm1r
KQotICAgICAgICAgICAgZmlsZShXUklURSAke0FORFJPSURfUFJPSkVDVF9ESVJ9L2puaS9BcHBs
aWNhdGlvbi5tayAiQVBQX0FCSSA6PSAke0FORFJPSURfTkRLX0FCSV9OQU1FfVxuIikKLSAgICAg
ICAgZW5kaWYoKQotICAgIAotICAgICAgICAjIDIuIGdlbmVyYXRlIGdkYi5zZXR1cAotICAgICAg
ICBnZXRfZGlyZWN0b3J5X3Byb3BlcnR5KFBST0pFQ1RfSU5DTFVERVMgRElSRUNUT1JZICR7UFJP
SkVDVF9TT1VSQ0VfRElSfSBJTkNMVURFX0RJUkVDVE9SSUVTKQotICAgICAgICBzdHJpbmcoUkVH
RVggUkVQTEFDRSAiOyIgIiAiIFBST0pFQ1RfSU5DTFVERVMgIiR7UFJPSkVDVF9JTkNMVURFU30i
KQotICAgICAgICBmaWxlKFdSSVRFICR7TElCUkFSWV9PVVRQVVRfUEFUSH0vZ2RiLnNldHVwICJz
ZXQgc29saWItc2VhcmNoLXBhdGggJHtOREtfR0RCX1NPTElCX1BBVEh9XG4iKQotICAgICAgICBm
aWxlKEFQUEVORCAke0xJQlJBUllfT1VUUFVUX1BBVEh9L2dkYi5zZXR1cCAiZGlyZWN0b3J5ICR7
UFJPSkVDVF9JTkNMVURFU31cbiIpCi0gICAgCi0gICAgICAgICMgMy4gY29weSBnZGJzZXJ2ZXIg
ZXhlY3V0YWJsZQotICAgICAgICBmaWxlKENPUFkgJHtBTkRST0lEX05ES30vcHJlYnVpbHQvYW5k
cm9pZC0ke0FORFJPSURfQVJDSF9OQU1FfS9nZGJzZXJ2ZXIvZ2Ric2VydmVyIERFU1RJTkFUSU9O
ICR7TElCUkFSWV9PVVRQVVRfUEFUSH0pCi0gICAgZW5kaWYoKQotZW5kbWFjcm8oKQotCi0jIHJl
Z2lzdGVyIGEgdGFyZ2V0IGZvciByZW1vdGUgZGVidWdnaW5nCi0jIGNvcGllcyB0aGUgZGVidWcg
dmVyc2lvbiB0byBOREtfR0RCX1NPTElCX1BBVEggdGhlbiBzdHJpcHMgc3ltYm9scyBvZiBvcmln
aW5hbAotbWFjcm8oYW5kcm9pZF9uZGtfZ2RiX2RlYnVnZ2FibGUgVEFSR0VUX05BTUUpCi0gICAg
aWYoQU5EUk9JRCkKLSAgICAgICAgZ2V0X3Byb3BlcnR5KFRBUkdFVF9MT0NBVElPTiBUQVJHRVQg
JHtUQVJHRVRfTkFNRX0gUFJPUEVSVFkgTE9DQVRJT04pCi0gICAgICAgIAotICAgICAgICAjIGNy
ZWF0ZSBjdXN0b20gdGFyZ2V0IHRoYXQgZGVwZW5kcyBvbiB0aGUgcmVhbCB0YXJnZXQgc28gaXQg
Z2V0cyBleGVjdXRlZCBhZnRlcndhcmRzCi0gICAgICAgIGFkZF9kZXBlbmRlbmNpZXMoTkRLX0dE
QiAke1RBUkdFVF9OQU1FfSkKLSAgICAKLSAgICAgICAgIyA0LiBjb3B5IGxpYiB0byBvYmoKLSAg
ICAgICAgYWRkX2N1c3RvbV9jb21tYW5kKFRBUkdFVCBOREtfR0RCIFBPU1RfQlVJTEQgQ09NTUFO
RCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvcHlfaWZfZGlmZmVyZW50ICR7VEFSR0VUX0xPQ0FUSU9O
fSAke05ES19HREJfU09MSUJfUEFUSH0pCi0gICAgCi0gICAgICAgICMgNS4gc3RyaXAgc3ltYm9s
cwotICAgICAgICBhZGRfY3VzdG9tX2NvbW1hbmQoVEFSR0VUIE5ES19HREIgUE9TVF9CVUlMRCBD
T01NQU5EICR7Q01BS0VfU1RSSVB9ICR7VEFSR0VUX0xPQ0FUSU9OfSkKLSAgICBlbmRpZigpCi1l
bmRtYWNybygpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9BbmRyb2lkTmRr
TW9kdWxlcy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFr
ZS9BbmRyb2lkTmRrTW9kdWxlcy5jbWFrZQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJk
X3BhcnR5L2FuZHJvaWQtY21ha2UvQW5kcm9pZE5ka01vZHVsZXMuY21ha2UJKG5vbmV4aXN0ZW50
KQpAQCAtMSw1OCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNCwgUGF2ZWwgUm9qdGJlcmcK
LSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgotIwotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0jIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSMg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUgZG9jdW1lbnRhdGlvbgotIyBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSMKLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJp
Z2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotIyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0jIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTICJBUyBJUyIKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0jIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCi0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFCi0jIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi1tYWNybyhhbmRy
b2lkX25ka19pbXBvcnRfbW9kdWxlX2NwdWZlYXR1cmVzKQotICAgIGlmKEFORFJPSUQpCi0gICAg
ICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtBTkRST0lEX05ES30vc291cmNlcy9hbmRyb2lkL2Nw
dWZlYXR1cmVzKQotICAgICAgICBhZGRfbGlicmFyeShjcHVmZWF0dXJlcyAke0FORFJPSURfTkRL
fS9zb3VyY2VzL2FuZHJvaWQvY3B1ZmVhdHVyZXMvY3B1LWZlYXR1cmVzLmMpCi0gICAgICAgIHRh
cmdldF9saW5rX2xpYnJhcmllcyhjcHVmZWF0dXJlcyBkbCkKLSAgICBlbmRpZigpCi1lbmRtYWNy
bygpCi0KLW1hY3JvKGFuZHJvaWRfbmRrX2ltcG9ydF9tb2R1bGVfbmF0aXZlX2FwcF9nbHVlKQot
ICAgIGlmKEFORFJPSUQpCi0gICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtBTkRST0lEX05E
S30vc291cmNlcy9hbmRyb2lkL25hdGl2ZV9hcHBfZ2x1ZSkKLSAgICAgICAgYWRkX2xpYnJhcnko
bmF0aXZlX2FwcF9nbHVlICR7QU5EUk9JRF9OREt9L3NvdXJjZXMvYW5kcm9pZC9uYXRpdmVfYXBw
X2dsdWUvYW5kcm9pZF9uYXRpdmVfYXBwX2dsdWUuYykKLSAgICAgICAgdGFyZ2V0X2xpbmtfbGli
cmFyaWVzKG5hdGl2ZV9hcHBfZ2x1ZSBsb2cpCi0gICAgZW5kaWYoKQotZW5kbWFjcm8oKQotCi1t
YWNybyhhbmRyb2lkX25ka19pbXBvcnRfbW9kdWxlX25ka19oZWxwZXIpCi0gICAgaWYoQU5EUk9J
RCkKLSAgICAgICAgYW5kcm9pZF9uZGtfaW1wb3J0X21vZHVsZV9jcHVmZWF0dXJlcygpCi0gICAg
ICAgIGFuZHJvaWRfbmRrX2ltcG9ydF9tb2R1bGVfbmF0aXZlX2FwcF9nbHVlKCkKLSAgICAgICAg
Ci0gICAgICAgIGluY2x1ZGVfZGlyZWN0b3JpZXMoJHtBTkRST0lEX05ES30vc291cmNlcy9hbmRy
b2lkL25ka19oZWxwZXIpCi0gICAgICAgIGZpbGUoR0xPQiBfTkRLX0hFTFBFUl9TUkNTICR7QU5E
Uk9JRF9OREt9L3NvdXJjZXMvYW5kcm9pZC9uZGtfaGVscGVyLyouY3BwICR7QU5EUk9JRF9OREt9
L3NvdXJjZXMvYW5kcm9pZC9uZGtfaGVscGVyL2dsM3N0dWIuYykKLSAgICAgICAgYWRkX2xpYnJh
cnkobmRrX2hlbHBlciAke19OREtfSEVMUEVSX1NSQ1N9KQotICAgICAgICB0YXJnZXRfbGlua19s
aWJyYXJpZXMobmRrX2hlbHBlciBsb2cgYW5kcm9pZCBFR0wgR0xFU3YyIGNwdWZlYXR1cmVzIG5h
dGl2ZV9hcHBfZ2x1ZSkKLSAgICAgICAgCi0gICAgICAgIHVuc2V0KF9OREtfSEVMUEVSX1NSQ1Mp
Ci0gICAgZW5kaWYoKQotZW5kbWFjcm8oKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5n
c3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL0xJQ0VOU0UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wv
c3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2UvTElDRU5TRQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdz
c2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2UvTElDRU5TRQkobm9uZXhpc3RlbnQpCkBA
IC0xLDMwICswLDAgQEAKLUNvcHlyaWdodCAoYykgMjAxMC0yMDExLCBFdGhhbiBSdWJsZWUKLUNv
cHlyaWdodCAoYykgMjAxMS0yMDE0LCBBbmRyZXkgS2FtYWV2Ci1Db3B5cmlnaHQgKGMpIDIwMTQs
IFBhdmVsIFJvanRiZXJnCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgotCi0xLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICAgIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0KLTIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsCi0gICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotCi0zLiAgTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwotICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMKLSAgICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLQotVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCi1BTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi1JTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQotTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLVNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi1BUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRQotUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkv
YW5kcm9pZC1jbWFrZS9NRVRBREFUQQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5k
cm9pZC1jbWFrZS9NRVRBREFUQQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5
L2FuZHJvaWQtY21ha2UvTUVUQURBVEEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNSArMCwwIEBACi1u
YW1lOiAiYW5kcm9pZC1jbWFrZSIKLWRlc2NyaXB0aW9uOgotICAgICJhbmRyb2lkLWNtYWtlIGlz
IGEgY29sbGVjdGlvbiBvZiBDTWFrZSBzY3JpcHRzIGZvciBidWlsZGluZyBhZ2FpbnN0IHRoZSAi
Ci0gICAgIkFuZHJvaWQgTkRLLiIKLQotdGhpcmRfcGFydHkgewotICB1cmwgewotICAgIHR5cGU6
IEhPTUVQQUdFCi0gICAgdmFsdWU6ICJodHRwczovL2dpdGh1Yi5jb20vdGFrYS1uby1tZS9hbmRy
b2lkLWNtYWtlLyIKLSAgfQotICB2ZXJzaW9uOiAiNTU2Y2MxNDI5NmMyMjZmNzUzYTM3NzhkOTlk
OGI2MDc3OGI3ZGY0ZiIKLSAgbGFzdF91cGdyYWRlX2RhdGUgeyB5ZWFyOiAyMDE2IG1vbnRoOiA2
IGRheTogMiB9Ci0KLSAgbG9jYWxfbW9kaWZpY2F0aW9uczogIkxJQ0VOU0UgZmlsZSBoYXMgYmVl
biBjcmVhdGVkIGZvciBjb21wbGlhbmNlIHB1cnBvc2VzLiBOb3QgaW5jbHVkZWQgaW4gb3JpZ2lu
YWwgZGlzdHJpYnV0aW9uLiIKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtl
L1JFQURNRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9S
RUFETUUubWQJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNt
YWtlL1JFQURNRS5tZAkobm9uZXhpc3RlbnQpCkBAIC0xLDI0MCArMCwwIEBACi0jIGFuZHJvaWQt
Y21ha2UKLQotQ01ha2UgaXMgZ3JlYXQsIGFuZCBzbyBpcyBBbmRyb2lkLiBUaGlzIGlzIGEgY29s
bGVjdGlvbiBvZiBDTWFrZSBzY3JpcHRzIHRoYXQgbWF5IGJlIHVzZWZ1bCB0byB0aGUgQW5kcm9p
ZCBOREsgY29tbXVuaXR5LiBJdCBpcyBiYXNlZCBvbiBleHBlcmllbmNlIGZyb20gcG9ydGluZyBP
cGVuQ1YgbGlicmFyeSB0byBBbmRyb2lkOiBodHRwOi8vb3BlbmN2Lm9yZy9wbGF0Zm9ybXMvYW5k
cm9pZC5odG1sCi0KLU1haW4gZ29hbCBpcyB0byBzaGFyZSB0aGVzZSBzY3JpcHRzIHNvIHRoYXQg
ZGV2cyB0aGF0IHVzZSBDTWFrZSBhcyB0aGVpciBidWlsZCBzeXN0ZW0gbWF5IGVhc2lseSBjb21w
aWxlIG5hdGl2ZSBjb2RlIGZvciBBbmRyb2lkLgotCi0jIyBUTDtEUgotCi0gICAgY21ha2UgLURD
TUFLRV9UT09MQ0hBSU5fRklMRT1hbmRyb2lkLnRvb2xjaGFpbi5jbWFrZSBcCi0gICAgICAgICAg
LURBTkRST0lEX05ESz08bmRrX3BhdGg+ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgICAgLURBTkRST0lEX0FCST0iYXJtZWFiaS12N2Egd2l0aCBORU9OIiAgICAgICAgICBcCi0g
ICAgICAgICAgPHNvdXJjZV9wYXRoPgotICAgIGNtYWtlIC0tYnVpbGQgLgotCi1PbmUtbGluZXI6
Ci0KLSAgICBjbWFrZSAtRENNQUtFX1RPT0xDSEFJTl9GSUxFPWFuZHJvaWQudG9vbGNoYWluLmNt
YWtlIC1EQU5EUk9JRF9OREs9PG5ka19wYXRoPiAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSAt
REFORFJPSURfQUJJPSJhcm1lYWJpLXY3YSB3aXRoIE5FT04iIDxzb3VyY2VfcGF0aD4gJiYgY21h
a2UgLS1idWlsZCAuCi0KLV9hbmRyb2lkLWNtYWtlXyB3aWxsIHNlYXJjaCBmb3IgeW91ciBOREsg
aW5zdGFsbCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyOgotCi0xLiBWYWx1ZSBvZiBgQU5EUk9JRF9O
REtgIENNYWtlIHZhcmlhYmxlOwotMS4gVmFsdWUgb2YgYEFORFJPSURfTkRLYCBlbnZpcm9ubWVu
dCB2YXJpYWJsZTsKLTEuIFNlYXJjaCB1bmRlciBwYXRocyBmcm9tIGBBTkRST0lEX05ES19TRUFS
Q0hfUEFUSFNgIENNYWtlIHZhcmlhYmxlOwotMS4gU2VhcmNoIHBsYXRmb3JtIHNwZWNpZmljIGxv
Y2F0aW9ucyAoaG9tZSBmb2xkZXIsIFdpbmRvd3MgIlByb2dyYW0gRmlsZXMiLCBldGMpLgotCi1T
byBpZiB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIE5ESyBhcyBgfi9hbmRyb2lkLW5kay1yMTBkYCB0
aGVuIF9hbmRyb2lkLWNtYWtlXyB3aWxsIGxvY2F0ZSBpdCBhdXRvbWF0aWNhbGx5LgotCi0jIyBH
ZXR0aW5nIHN0YXJ0ZWQKLQotVG8gYnVpbGQgYSBjbWFrZS1iYXNlZCBDL0MrKyBwcm9qZWN0IGZv
ciBBbmRyb2lkIHlvdSBuZWVkOgotCi0qIEFuZHJvaWQgTkRLICg+PSByNSkgaHR0cDovL2RldmVs
b3Blci5hbmRyb2lkLmNvbS90b29scy9zZGsvbmRrL2luZGV4Lmh0bWwKLSogQ01ha2UgKD49IHYy
LjYuMywgPj0gdjIuOC45IHJlY29tbWVuZGVkKSBodHRwOi8vd3d3LmNtYWtlLm9yZy9kb3dubG9h
ZAotCi1UaGUgX2FuZHJvaWQtY21ha2VfIGlzIGFsc28gY2FwYWJsZSB0byBidWlsZCB3aXRoIE5E
SyBmcm9tIEFPU1Agb3IgTGluYXJvIEFuZHJvaWQgc291cmNlIHRyZWUsIGJ1dCB5b3UgbWF5IGJl
IHJlcXVpcmVkIHRvIG1hbnVhbGx5IHNwZWNpZnkgcGF0aCB0byBgbGlibWAgYmluYXJ5IHRvIGxp
bmsgd2l0aC4KLQotIyMgRGlmZmVyZW5jZSBmcm9tIHRyYWRpdGlvbmFsIENNYWtlCi0KLUZvbG93
aW5nIHRoZSBfbmRrLWJ1aWxkXyB0aGUgX2FuZHJvaWQtY21ha2VfIHN1cHBvcnRzICoqb25seSB0
d28gYnVpbGQgdGFyZ2V0cyoqOgotCi0qIGAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZWAKLSog
YC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1Z2AKLQotU28gZG9uJ3QgZXZlbiB0cnkgb3RoZXIgdGFy
Z2V0cyB0aGF0IGNhbiBiZSBmb3VuZCBpbiBDTWFrZSBkb2N1bWVudGF0aW9uIGFuZCBkb24ndCBm
b3JnZXQgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGBSZWxlYXNlYCBvciBgRGVidWdgIGJlY2F1c2Ug
Q01ha2UgYnVpbGRzIHdpdGhvdXQgYSBidWlsZCBjb25maWd1cmF0aW9uIGJ5IGRlZmF1bHQuCi0K
LSMjIERpZmZlcmVuY2UgZnJvbSBfbmRrLWJ1aWxkXwotCi0qIExhdGVzdCBHQ0MgYXZhaWxhYmxl
IGluIE5ESyBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGNvbXBpbGVyOwotKiBgUmVsZWFzZWAgYnVp
bGRzIHdpdGggYC1PM2AgaW5zdGVhZCBvZiBgLU9zYDsKLSogYFJlbGVhc2VgIGJ1aWxkcyB3aXRo
b3V0IGRlYnVnIGluZm8gKHdpdGhvdXQgYC1nYCkgKGJlY2F1c2UgX25kay1idWlsZF8gYWx3YXlz
IGNyZWF0ZXMgYSBzdHJpcHBlZCB2ZXJzaW9uIGJ1dCBjbWFrZSBkZWxheXMgdGhpcyBmb3IgYGlu
c3RhbGwvc3RyaXBgIHRhcmdldCk7Ci0qIGAtZnNpZ25lZC1jaGFyYCBpcyBhZGRlZCB0byBjb21w
aWxlciBmbGFncyB0byBtYWtlIGBjaGFyYCBzaWduZWQgYnkgZGVmYXVsdCBhcyBpdCBpcyBvbiB4
ODYveDg2XzY0OwotKiBHQ0MncyBzdGFjayBwcm90ZWN0b3IgaXMgbm90IHVzZWQgbmVpdGhlciBp
biBgRGVidWdgIG5vciBgUmVsZWFzZWAgY29uZmlndXJhdGlvbnM7Ci0qIE5vIGJ1aWxkcyBmb3Ig
bXVsdGlwbGUgcGxhdGZvcm1zIChlLmcuIGJ1aWxkaW5nIGZvciBib3RoIGFybSBhbmQgeDg2IHJl
cXVpcmUgdG8gcnVuIGNtYWtlIHR3aWNlIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlcnMpOwotKiBO
byBmaWxlIGxldmVsIE5lb24gdmlhIGAubmVvbmAgc3VmZml4OwotCi1UaGUgZm9sbG93aW5nIGZl
YXR1cmVzIG9mIF9uZGstYnVpbGRfIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBfYW5kcm9pZC1j
bWFrZV8geWV0OgotCi0qIGBhcm1lYWJpLXY3YS1oYXJkYCBBQkkKLSogYGxpYmMrK19zdGF0aWNg
L2BsaWJjKytfc2hhcmVkYCBTVEwgcnVudGltZQotCi0jIyBCYXNpYyBvcHRpb25zCi0KLVNpbWls
YXJseSB0byB0aGUgTkRLIGJ1aWxkIHN5c3RlbSBfYW5kcm9pZC1jbWFrZV8gYWxsb3dzIHRvIHNl
bGVjdCBiZXR3ZWVuIHNldmVyYWwgY29tcGlsZXIgdG9vbGNoYWlucyBhbmQgdGFyZ2V0IHBsYXRm
b3Jtcy4gTW9zdCBvZiB0aGUgb3B0aW9ucyBjYW4gYmUgc2V0IGVpdGhlciBhcyBjbWFrZSBhcmd1
bWVudHM6IGAtRDxOQU1FPj08VkFMVUU+YCBvciBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXM6Ci0K
LSogKipBTkRST0lEX05ESyoqIC0gcGF0aCB0byB0aGUgQW5kcm9pZCBOREsuIElmIG5vdCBzZXQg
dGhlbiBfYW5kcm9pZC1jbWFrZV8gd2lsbCBzZWFyY2ggZm9yIHRoZSBtb3N0IHJlY2VudCB2ZXJz
aW9uIG9mIHN1cHBvcnRlZCBOREsgaW4gY29tbW9ubHkgdXNlZCBsb2NhdGlvbnM7Ci0qICoqQU5E
Uk9JRF9BQkkqKiAtIHNwZWNpZmllcyB0aGUgdGFyZ2V0IEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRl
cmZhY2UgKEFCSSkuIFRoaXMgb3B0aW9uIG5lYXJseSBtYXRjaGVzIHRvIHRoZSBBUFBfQUJJIHZh
cmlhYmxlIHVzZWQgYnkgbmRrLWJ1aWxkIHRvb2wgZnJvbSBBbmRyb2lkIE5ESy4gSWYgbm90IHNw
ZWNpZmllZCB0aGVuIHNldCB0byBgYXJtZWFiaS12N2FgLiBQb3NzaWJsZSB0YXJnZXQgbmFtZXMg
YXJlOgotICAgICogYGFybWVhYmlgIC0gQVJNdjVURSBiYXNlZCBDUFUgd2l0aCBzb2Z0d2FyZSBm
bG9hdGluZyBwb2ludCBvcGVyYXRpb25zOwotICAgICogKipgYXJtZWFiaS12N2FgKiogLSBBUk12
NyBiYXNlZCBkZXZpY2VzIHdpdGggaGFyZHdhcmUgRlBVIGluc3RydWN0aW9ucyAoVkZQdjNfRDE2
KTsKLSAgICAqIGBhcm1lYWJpLXY3YSB3aXRoIE5FT05gIC0gc2FtZSBhcyBhcm1lYWJpLXY3YSwg
YnV0IHNldHMgTkVPTiBhcyBmbG9hdGluZy1wb2ludCB1bml0OwotICAgICogYGFybWVhYmktdjdh
IHdpdGggVkZQVjNgIC0gc2FtZSBhcyBhcm1lYWJpLXY3YSwgYnV0IHNldHMgVkZQdjNfRDMyIGFz
IGZsb2F0aW5nLXBvaW50IHVuaXQ7Ci0gICAgKiBgYXJtZWFiaS12NiB3aXRoIFZGUGAgLSB0dW5l
ZCBmb3IgQVJNdjYgcHJvY2Vzc29ycyBoYXZpbmcgVkZQOwotICAgICogYHg4NmAgLSBJQS0zMiBp
bnN0cnVjdGlvbiBzZXQKLSAgICAqIGBtaXBzYCAtIE1JUFMzMiBpbnN0cnVjdGlvbiBzZXQKLSAg
ICAqIGBhcm02NC12OGFgIC0gQVJNdjggQUFyY2g2NCBpbnN0cnVjdGlvbiBzZXQgLSBvbmx5IGZv
ciBOREsgcjEwIGFuZCBuZXdlcgotICAgICogYHg4Nl82NGAgLSBJbnRlbDY0IGluc3RydWN0aW9u
IHNldCAocjEpIC0gb25seSBmb3IgTkRLIHIxMCBhbmQgbmV3ZXIKLSAgICAqIGBtaXBzNjRgIC0g
TUlQUzY0IGluc3RydWN0aW9uIHNldCAocjYpIC0gb25seSBmb3IgTkRLIHIxMCBhbmQgbmV3ZXIK
LSogKipBTkRST0lEX05BVElWRV9BUElfTEVWRUwqKiAtIGxldmVsIG9mIGFuZHJvaWQgQVBJIHRv
IGJ1aWxkIGZvci4gQ2FuIGJlIHNldCBlaXRoZXIgdG8gZnVsbCBuYW1lIChleGFtcGxlOiBgYW5k
cm9pZC04YCkgb3IgYSBudW1lcmljIHZhbHVlIChleGFtcGxlOiBgMTdgKS4gVGhlIGRlZmF1bHQg
QVBJIGxldmVsIGRlcGVuZHMgb24gdGhlIHRhcmdldCBBQkk6Ci0gICAgKiBgYW5kcm9pZC04YCBm
b3IgQVJNOwotICAgICogYGFuZHJvaWQtOWAgZm9yIHg4NiBhbmQgTUlQUzsKLSAgICAqIGBhbmRy
b2lkLTIxYCBmb3IgNjQtYml0IEFCSXMuCi0KLSAgICBCdWlsZGluZyBmb3IgYGFuZHJvaWQtTGAg
aXMgcG9zc2libGUgb25seSB3aGVuIGl0IGlzIGV4cGxpY2l0bHkgc2VsZWN0ZWQuCi0qICoqQU5E
Uk9JRF9UT09MQ0hBSU5fTkFNRSoqIC0gdGhlIG5hbWUgb2YgY29tcGlsZXIgdG9vbGNoYWluIHRv
IGJlIHVzZWQuIFRoaXMgb3B0aW9uIGFsbG93cyB0byBzZWxlY3QgYmV0d2VlbiBkaWZmZXJlbnQg
R0NDIGFuZCBDbGFuZyB2ZXJzaW9ucy4gVGhlIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGRlcGVu
ZHMgb24gdGhlIE5ESyB2ZXJzaW9uIGFuZCB3aWxsIGJlIHByaW50ZWQgYnkgdG9vbGNoYWluIGZp
bGUgaWYgYW4gaW52YWxpZCB2YWx1ZSBpcyBzZXQuIEJ5IGRlZmF1bHQgX2FuZHJvaWQtY21ha2Vf
IHNlbGVjdHMgdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gb2YgR0NDIHdoaWNoIGNhbiBidWlsZCBm
b3Igc3BlY2lmaWVkIGBBTkRST0lEX0FCSWAuCi0KLSAgICBFeGFtcGxlIHZhbHVlcyBhcmU6Ci0g
ICAgKiBgYWFyY2g2NC1saW51eC1hbmRyb2lkLTQuOWAKLSAgICAqIGBhYXJjaDY0LWxpbnV4LWFu
ZHJvaWQtY2xhbmczLjVgCi0gICAgKiBgYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuOGAKLSAgICAq
IGBhcm0tbGludXgtYW5kcm9pZGVhYmktNC45YAotICAgICogYGFybS1saW51eC1hbmRyb2lkZWFi
aS1jbGFuZzMuNWAKLSAgICAqIGBtaXBzNjRlbC1saW51eC1hbmRyb2lkLTQuOWAKLSAgICAqIGBt
aXBzZWwtbGludXgtYW5kcm9pZC00LjhgCi0gICAgKiBgeDg2LTQuOWAKLSAgICAqIGB4ODZfNjQt
NC45YAotICAgICogZXRjLgotKiAqKkFORFJPSURfU1RMKiogLSB0aGUgbmFtZSBvZiBDKysgcnVu
dGltZSB0byB1c2UuIFRoZSBkZWZhdWx0IGlzIGBnbnVzdGxfc3RhdGljYC4KLSAgICAqIGBub25l
YCAtIGRvIG5vdCBjb25maWd1cmUgdGhlIHJ1bnRpbWUuCi0gICAgKiBgc3lzdGVtYCAtIHVzZSB0
aGUgZGVmYXVsdCBtaW5pbWFsIHN5c3RlbSBDKysgcnVudGltZSBsaWJyYXJ5LgotICAgICAgICAq
IEltcGxpZXMgYC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNgLgotICAgICogYHN5c3RlbV9yZWAg
LSB1c2UgdGhlIGRlZmF1bHQgbWluaW1hbCBzeXN0ZW0gQysrIHJ1bnRpbWUgbGlicmFyeS4KLSAg
ICAgICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZleGNlcHRpb25zYC4KLSAgICAqIGBnYWJpKytfc3Rh
dGljYCAtIHVzZSB0aGUgR0FiaSsrIHJ1bnRpbWUgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSAgICAg
ICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZuby1leGNlcHRpb25zYC4KLSAgICAgICAgKiBBdmFpbGFi
bGUgZm9yIE5ESyByNyBhbmQgbmV3ZXIuCi0gICAgKiBgZ2FiaSsrX3NoYXJlZGAgLSB1c2UgdGhl
IEdBYmkrKyBydW50aW1lIGFzIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICogSW1wbGllcyBg
LWZydHRpIC1mbm8tZXhjZXB0aW9uc2AuCi0gICAgICAgICogQXZhaWxhYmxlIGZvciBOREsgcjcg
YW5kIG5ld2VyLgotICAgICogYHN0bHBvcnRfc3RhdGljYCAtIHVzZSB0aGUgU1RMcG9ydCBydW50
aW1lIGFzIGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICAgICogSW1wbGllcyBgLWZuby1ydHRpIC1m
bm8tZXhjZXB0aW9uc2AgZm9yIE5ESyBiZWZvcmUgcjcuCi0gICAgICAgICogSW1wbGllcyBgLWZy
dHRpIC1mbm8tZXhjZXB0aW9uc2AgZm9yIE5ESyByNyBhbmQgbmV3ZXIuCi0gICAgKiBgc3RscG9y
dF9zaGFyZWRgIC0gdXNlIHRoZSBTVExwb3J0IHJ1bnRpbWUgYXMgYSBzaGFyZWQgbGlicmFyeS4K
LSAgICAgICAgKiBJbXBsaWVzIGAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zYCBmb3IgTkRLIGJl
Zm9yZSByNy4KLSAgICAgICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZuby1leGNlcHRpb25zYCBmb3Ig
TkRLIHI3IGFuZCBuZXdlci4KLSAgICAqICoqYGdudXN0bF9zdGF0aWNgKiogLSB1c2UgdGhlIEdO
VSBTVEwgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSAgICAgICAgKiBJbXBsaWVzIGAtZnJ0dGkgLWZl
eGNlcHRpb25zYC4KLSAgICAqIGBnbnVzdGxfc2hhcmVkYCAtIHVzZSB0aGUgR05VIFNUTCBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotICAgICAgICAqIEltcGxpZXMgYC1mcnR0aSAtZm5vLWV4Y2VwdGlv
bnNgLgotICAgICAgICAqIEF2YWlsYWJsZSBmb3IgTkRLIHI3YiBhbmQgbmV3ZXIuCi0gICAgICAg
ICogU2lsZW50bHkgZGVncmFkZXMgdG8gYGdudXN0bF9zdGF0aWNgIGlmIG5vdCBhdmFpbGFibGUu
Ci0qICoqTkRLX0NDQUNIRSoqIC0gcGF0aCB0byBgY2NhY2hlYCBleGVjdXRhYmxlLiBJZiBub3Qg
c2V0IHRoZW4gaW5pdGlhbGl6ZWQgZnJvbSBgTkRLX0NDQUNIRWAgZW52aXJvbm1lbnQgdmFyaWFi
bGUuCi0KLSMjIEFkdmFuY2VkIF9hbmRyb2lkLWNtYWtlXyBvcHRpb25zCi0KLU5vcm1hbGx5IF9h
bmRyb2lkLWNtYWtlXyB1c2VycyBhcmUgbm90IHN1cHBvc2VkIHRvIHRvdWNoIHRoZXNlIHZhcmlh
YmxlcyBidXQgdGhleSBtaWdodCBiZSB1c2VmdWwgdG8gd29ya2Fyb3VuZCBzb21lIGJ1aWxkIGlz
c3VlczoKLQotKiAqKkFORFJPSURfRk9SQ0VfQVJNX0JVSUxEKiogPSBgT0ZGYCAtIGdlbmVyYXRl
IDMyLWJpdCBBUk0gaW5zdHJ1Y3Rpb25zIGluc3RlYWQgb2YgVGh1bWIuIEFwcGxpY2FibGUgb25s
eSBmb3IgYXJtIEFCSXMgYW5kIGlzIGZvcmNlZCB0byBiZSBgT05gIGZvciBgYXJtZWFiaS12NiB3
aXRoIFZGUGA7Ci0qICoqQU5EUk9JRF9OT19VTkRFRklORUQqKiA9IGBPTmAgLSBzaG93IGFsbCB1
bmRlZmluZWQgc3ltYm9scyBhcyBsaW5rZXIgZXJyb3JzOwotKiAqKkFORFJPSURfU09fVU5ERUZJ
TkVEKiogPSBgT0ZGYCAtIGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzIGluIHNoYXJlZCBsaWJyYXJp
ZXM7Ci0gICAgKiBhY3R1YWxseSBpdCBpcyB0dXJuZWQgYE9OYCBieSBkZWZhdWx0IGZvciBOREsg
b2xkZXIgdGhhbiBgcjdgCi0qICoqQU5EUk9JRF9TVExfRk9SQ0VfRkVBVFVSRVMqKiA9IGBPTmAg
LSBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBydHRpIGFuZCBleGNlcHRpb25zIHN1cHBvcnQgYmFz
ZWQgb24gQysrIHJ1bnRpbWU7Ci0qICoqQU5EUk9JRF9OREtfTEFZT1VUKiogPSBgUkVMRUFTRWAg
LSBpbm5lciBsYXlvdXQgb2YgQW5kcm9pZCBOREssIHNob3VsZCBiZSBkZXRlY3RlZCBhdXRvbWF0
aWNhbGx5LiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgotICAgICogYFJFTEVBU0VgIC0gcHVibGljIHJl
bGVhc2VzIGZyb20gR29vZ2xlOwotICAgICogYExJTkFST2AgLSBOREsgZnJvbSBMaW5hcm8gcHJv
amVjdDsKLSAgICAqIGBBTkRST0lEYCAtIE5ESyBmcm9tIEFPU1AuCi0qICoqQU5EUk9JRF9GVU5D
VElPTl9MRVZFTF9MSU5LSU5HKiogPSBgT05gIC0gZW5hYmxlcyBzYXBhcmF0ZSBwdXR0aW5nIGVh
Y2ggZnVuY3Rpb24gYW5kIGRhdGEgaXRlbXMgaW50byBzZXBhcmF0ZSBzZWN0aW9ucyBhbmQgZW5h
YmxlIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiB1bnVzZWQgaW5wdXQgc2VjdGlvbnMgYXQgbGluayB0
aW1lIChgLWZkYXRhLXNlY3Rpb25zIC1mZnVuY3Rpb24tc2VjdGlvbnMgLVdsLC0tZ2Mtc2VjdGlv
bnNgKTsKLSogKipBTkRST0lEX0dPTERfTElOS0VSKiogPSBgT05gIC0gdXNlIGdvbGQgbGlua2Vy
IHdpdGggR0NDIDQuNiBmb3IgTkRLIHI4YiBhbmQgbmV3ZXIgKG9ubHkgZm9yIEFSTSBhbmQgeDg2
KTsKLSogKipBTkRST0lEX05PRVhFQ1NUQUNLKiogPSBgT05gIC0gZW5hYmxlcyBvciBkaXNhYmxl
cyBzdGFjayBleGVjdXRpb24gcHJvdGVjdGlvbiBjb2RlIChgLVdsLC16LG5vZXhlY3N0YWNrYCk7
Ci0qICoqQU5EUk9JRF9SRUxSTyoqID0gYE9OYCAtIEVuYWJsZXMgUkVMUk8gLSBhIG1lbW9yeSBj
b3JydXB0aW9uIG1pdGlnYXRpb24gdGVjaG5pcXVlIChgLVdsLC16LHJlbHJvIC1XbCwteixub3dg
KTsKLSogKipBTkRST0lEX0xJQk1fUEFUSCoqIC0gcGF0aCB0byBgbGlibS5zb2AgKHNldCB0byBz
b21ldGhpbmcgbGlrZSBgJChUT1ApL291dC90YXJnZXQvcHJvZHVjdC88cHJvZHVjdF9uYW1lPi9v
YmovbGliL2xpYm0uc29gKSB0byB3b3JrYXJvdW5kIHVucmVzb2x2ZWQgYHNpbmNvc2AuCi0KLSMj
IEZpbmUtdHVuaW5nIGBDTWFrZUxpc3RzLnR4dGAgZm9yIF9hbmRyb2lkLWNtYWtlXwotCi0jIyMg
UmVjb2duaXppbmcgQW5kcm9pZCBidWlsZAotCi1fYW5kcm9pZC1jbWFrZV8gZGVmaW5lcyBgQU5E
Uk9JRGAgQ01ha2UgdmFyaWFibGUgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYWRkIEFuZHJvaWQtc3Bl
Y2lmaWMgc3R1ZmY6Ci0KLSAgICBpZiAoQU5EUk9JRCkKLSAgICAgICAgbWVzc2FnZShTVEFUVVMg
IkhlbGxvIGZyb20gQW5kcm9pZCBidWlsZCEiKQotICAgIGVuZGlmKCkKLQotVGhlIHJlY29tbWVu
ZGVkIHdheSB0byBpZGVudGlmeSBBUk0vTUlQUy94ODYgYXJjaGl0ZWN0dXJlIGlzIGV4YW1pbmlu
ZyBgQ01BS0VfU1lTVEVNX1BST0NFU1NPUmAgd2hpY2ggaXMgc2V0IHRvIHRoZSBhcHByb3ByaWF0
ZSB2YWx1ZToKLQotKiBgYXJtdjV0ZWAgLSBmb3IgYGFybWVhYmlgIEFCSQotKiBgYXJtdjZgIC0g
Zm9yIGBhcm1lYWJpLXY2IHdpdGggVkZQYCBBQkkKLSogYGFybXY3LWFgIC0gZm9yIGBhcm1lYWJp
LXY3YWAsIGBhcm1lYWJpLXY3YSB3aXRoIFZGUFYzYCBhbmQgYGFybWVhYmktdjdhIHdpdGggTkVP
TmAgQUJJcwotKiBgYWFyY2g2NGAgLSBmb3IgYGFybTY0LXY4YWAgQUJJCi0qIGBpNjg2YCAtIGZv
ciBgeDg2YCBBQkkKLSogYHg4Nl82NGAgLSBmb3IgYHg4Nl82NGAgQUJJCi0qIGBtaXBzYCAtIGZv
ciBgbWlwc2AgQUJJCi0qIGBtaXBzNjRgIC0gZm9yIGBtaXBzNjRgIEFCSQotCi1PdGhlciB2YXJp
YWJsZXMgdGhhdCBhcmUgc2V0IGJ5IF9hbmRyb2lkLWNtYWtlXyBhbmQgY2FuIGJlIHVzZWQgZm9y
IHRoZSBmaW5lLWdyYWluZWQgYnVpbGQgY29uZmlndXJhdGlvbiBhcmU6Ci0KLSogYE5FT05gIC0g
c2V0IGlmIHRhcmdldCBBQkkgc3VwcG9ydHMgTmVvbjsKLSogYEFORFJPSURfTkFUSVZFX0FQSV9M
RVZFTGAgLSBuYXRpdmUgQW5kcm9pZCBBUEkgbGV2ZWwgd2UgYXJlIGJ1aWxkaW5nIGZvciAobm90
ZTogSmF2YSBwYXJ0IG9mIEFuZG9pZCBhcHBsaWNhdGlvbiBjYW4gYmUgYnVpbHQgZm9yIGFub3Ro
ZXIgQVBJIGxldmVsKQotKiBgQU5EUk9JRF9OREtfUkVMRUFTRWAgLSB2ZXJzaW9uIG9mIHRoZSBB
bmRyb2lkIE5ESwotKiBgQU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRWAgLSAid2luZG93cyIs
ICJsaW51eC14ODYiIG9yICJkYXJ3aW4teDg2IiBkZXBlbmRpbmcgb24gdGhlIGhvc3QgcGxhdGZv
cm0KLSogYEFORFJPSURfUlRUSWAgLSBzZXQgaWYgcnR0aSBpcyBlbmFibGVkIGJ5IHRoZSBydW50
aW1lCi0qIGBBTkRST0lEX0VYQ0VQVElPTlNgIC0gc2V0IGlmIGV4Y2VwdGlvbnMgYXJlIGVuYWJs
ZWQgYnkgdGhlIHJ1bnRpbWUKLQotIyMjIEZpbmRpbmcgcGFja2FnZXMKLQotV2hlbiBjcm9zc2Nv
bXBpbGluZyBDTWFrZSBgZmluZF8qYCBjb21tYW5kcyBhcmUgbm9ybWFsbHkgZXhwZWN0ZWQgdG8g
ZmluZCBsaWJyYXJpZXMgYW5kIHBhY2thZ2VzIGJlbG9uZ2luZyB0byB0aGUgc2FtZSBidWlsZCB0
YXJnZXQuIFNvIF9hbmRyb2lkLWNtYWtlXyBjb25maWd1cmVzIENNYWtlIHRvIHNlYXJjaCBpbiBB
bmRyb2lkLXNwZWNpZmljIHBhdGhzIG9ubHkgYW5kIGlnbm9yZSB5b3VyIGhvc3Qgc3lzdGVtIGxv
Y2F0aW9ucy4gU28KLQotICAgIGZpbmRfcGFja2FnZShaTElCKQotCi13aWxsIHN1cmVseSBmaW5k
IGxpYnouc28gd2l0aGluIHRoZSBBbmRyb2lkIE5ESy4KLQotSG93ZXZlciBzb21ldGltZXMgeW91
IG5lZWQgdG8gbG9jYXRlIGEgaG9zdCBwYWNrYWdlIGV2ZW4gd2hlbiBjcm9zcy1jb21waWxpbmcu
IEZvciBleGFtcGxlIHlvdSBjYW4gYmUgc2VhcmNoaW5nIGZvciB5b3VyIGRvY3VtZW50YXRpb24g
Z2VuZXJhdG9yLiBUaGUgX2FuZHJvaWQtY21ha2VfIHJlY29tbWVuZHMgeW91IHRvIHVzZSBgZmlu
ZF9ob3N0X3BhY2thZ2VgIGFuZCBgZmluZF9ob3N0X3Byb2dyYW1gIG1hY3JvIGRlZmluZWQgaW4g
dGhlIGBhbmRyb2lkLnRvb2xjaGFpbi5jbWFrZWA6Ci0KLSAgICBmaW5kX2hvc3RfcGFja2FnZShE
b3h5Z2VuKQotICAgIGZpbmRfaG9zdF9wcm9ncmFtKFBERkxBVEVYIHBkZmxhdGV4KQotCi1Ib3dl
dmVyIHRoaXMgd2lsbCBicmVhayByZWd1bGFyIGJ1aWxkcyBzbyBpbnN0ZWFkIG9mIHdyYXBwaW5n
IHBhY2thZ2Ugc2VhcmNoIGludG8gcGxhdGZvcm0tc3BlY2lmaWMgbG9naWMgeW91IGNhbiBjb3B5
IHRoZSBmb2xsb3dpbmcgc25pcHBldCBpbnRvIHlvdXIgcHJvamVjdCAocHV0IGl0IGFmdGVyIHlv
dXIgdG9wLWxldmVsIGBwcm9qZWN0KClgIGNvbW1hbmQpOgotCi0gICAgIyBTZWFyY2ggcGFja2Fn
ZXMgZm9yIGhvc3Qgc3lzdGVtIGluc3RlYWQgb2YgcGFja2FnZXMgZm9yIHRhcmdldCBzeXN0ZW0K
LSAgICAjIGluIGNhc2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24gdGhlc2UgbWFjcm8gc2hvdWxkIGJl
IGRlZmluZWQgYnkgdG9vbGNoYWluIGZpbGUKLSAgICBpZihOT1QgQ09NTUFORCBmaW5kX2hvc3Rf
cGFja2FnZSkKLSAgICAgIG1hY3JvKGZpbmRfaG9zdF9wYWNrYWdlKQotICAgICAgICBmaW5kX3Bh
Y2thZ2UoJHtBUkdOfSkKLSAgICAgIGVuZG1hY3JvKCkKLSAgICBlbmRpZigpCi0gICAgaWYoTk9U
IENPTU1BTkQgZmluZF9ob3N0X3Byb2dyYW0pCi0gICAgICBtYWNybyhmaW5kX2hvc3RfcHJvZ3Jh
bSkKLSAgICAgICAgZmluZF9wcm9ncmFtKCR7QVJHTn0pCi0gICAgICBlbmRtYWNybygpCi0gICAg
ZW5kaWYoKQotCi0jIyMgQ29tcGlsZXIgZmxhZ3MgcmVjeWNsaW5nCi0KLU1ha2Ugc3VyZSB0byBk
byB0aGUgZm9sbG93aW5nIGluIHlvdXIgc2NyaXB0czoKLQotICAgIHNldChDTUFLRV9DX0ZMQUdT
ICIke0NNQUtFX0NfRkxBR1N9ICR7bXlfY3h4X2ZsYWdzfSIpCi0gICAgc2V0KENNQUtFX0NYWF9G
TEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9ICR7bXlfY3h4X2ZsYWdzfSIpCi0KLVRoZSBmbGFncyB3
aWxsIGJlIHByZXBvcHVsYXRlZCB3aXRoIGNyaXRpY2FsIGZsYWdzLCBzbyBkb24ndCBsb29zZSB0
aGVtLiBBbHNvIGJlIGF3YXJlIHRoYXQgX2FuZHJvaWQtY21ha2VfIGFsc28gc2V0cyBjb25maWd1
cmF0aW9uLXNwZWNpZmljIGNvbXBpbGVyIGFuZCBsaW5rZXIgZmxhZ3MuCi0KLSMjIFRyb3VibGVz
aG9vdGluZwotCi0jIyMgQnVpbGRpbmcgb24gV2luZG93cwotCi1GaXJzdCBvZiBhbGwgYGN5Z3dp
bmAgYnVpbGRzIGFyZSAqKk5PVCBzdXBwb3J0ZWQqKiBhbmQgd2lsbCBub3QgYmUgc3VwcG9ydGVk
IGJ5IF9hbmRyb2lkLWNtYWtlXy4gVG8gYnVpbGQgbmF0aXZlbHkgb24gV2luZG93cyB5b3UgbmVl
ZCBhIHBvcnQgb2YgbWFrZSBidXQgSSByZWNvbW1lbmQgaHR0cDovL21hcnRpbmUuZ2l0aHViLmlv
L25pbmphLyBpbnN0ZWFkLgotCi1UbyBidWlsZCB3aXRoIE5pbmphIHlvdSBuZWVkOgotCi0qIEVu
c3VyZSB5b3UgYXJlIHVzaW5nIENNYWtlIG5ld2VyIHRoYW4gMi44Ljk7Ci0qIERvd25sb2FkIHRo
ZSBsYXRlc3QgTmluamEgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbWFydGluZS9uaW5qYS9yZWxl
YXNlczsKLSogUHV0IHRoZSBgbmluamEuZXhlYCBpbnRvIHlvdXIgUEFUSCAob3IgYWRkIHBhdGgg
dG8gYG5pbmphLmV4ZWAgdG8geW91ciBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlKTsKLSogUGFz
cyBgLUdOaW5qYWAgdG8gYGNtYWtlYCBhbG9uZ3NpZGUgd2l0aCBvdGhlciBhcmd1bWVudHMgKG9y
IGNob29zZSBOaW5qYSBnZW5lcmF0b3IgaW4gYGNtYWtlLWd1aWApLgotKiBFbmpveSB0aGUgZmFz
dCBuYXRpdmUgbXVsdGl0aHJlYWRlZCBidWlsZCA6KQotCi1CdXQgaWYgeW91IHN0aWxsIHdhbnQg
dG8gc3RpY2sgdG8gb2xkIG1ha2UgdGhlbjoKLQotKiBHZXQgYSBXaW5kb3dzIHBvcnQgb2YgR05V
IE1ha2U6Ci0gICAgKiBBbmRyb2lkIE5ESyByNyAoYW5kIG5ld2VyKSBhbHJlYWR5IGhhcyBgbWFr
ZS5leGVgIG9uIGJvYXJkOwotICAgICogYG1pbmd3LW1ha2VgIHNob3VsZCB3b3JrIGFzIGZpbmU7
Ci0gICAgKiBEb3dubG9hZCBzb21lIG90aGVyIHBvcnQuIEZvciBleGFtcGxlLCB0aGlzIG9uZTog
aHR0cDovL2dudXdpbjMyLnNvdXJjZWZvcmdlLm5ldC9wYWNrYWdlcy9tYWtlLmh0bS4KLSogQWRk
IHBhdGggdG8geW91ciBgbWFrZS5leGVgIHRvIHN5c3RlbSBQQVRIIG9yIGFsd2F5cyB1c2UgZnVs
bCBwYXRoOwotKiBQYXNzIGAtRyJNaW5HVyBNYWtlZmlsZXMiYCBhbmQgYC1EQ01BS0VfTUFLRV9Q
Uk9HUkFNPSI8ZnVsbC9wYXRoL3RvLz5tYWtlLmV4ZSJgCi0gICAgKiBJdCBtdXN0IGJlIGBNaW5H
VyBNYWtlZmlsZXNgIGFuZCBub3QgYFVuaXggTWFrZWZpbGVzYCBldmVuIGlmIHlvdXIgYG1ha2Uu
ZXhlYCBpcyBub3QgYSBNaW5HVydzIG1ha2UuCi0qIFJ1biBgbWFrZS5leGVgIG9yIGBjbWFrZSAt
LWJ1aWxkIC5gIGZvciBzaW5nbGUtdGhyZWFkZWQgYnVpbGQuCi0KLSMjIyBQcm9qZWN0cyB3aXRo
IGFzc2VtYmxlciBmaWxlcwotCi1UaGUgX2FuZHJvaWQtY21ha2VfIHNob3VsZCBjb3JyZWN0bHkg
aGFuZGxlIHByb2plY3RzIHdpdGggYXNzZW1ibGVyIHNvdXJjZXMgKGAqLnNgIG9yIGAqLlNgKS4g
QnV0IGlmIHlvdSBzdGlsbCBmYWNpbmcgcHJvYmxlbXMgd2l0aCBhc3NlbWJsZXIgdGhlbiB0cnkg
dG8gdXBncmFkZSB5b3VyIENNYWtlIHRvIHZlcnNpb24gbmV3ZXIgdGhhbiAyLjguNQotCi0jIyBD
b3B5aW5nCi0KLV9hbmRyb2lkLWNtYWtlXyBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMg
b2YgW0JTRCAzLUNsYXVzZSBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMv
QlNELTMtQ2xhdXNlKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy90aGly
ZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL2FuZHJvaWQudG9vbGNoYWluLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5n
c3NsL3NyYy90aGlyZF9wYXJ0eS9hbmRyb2lkLWNtYWtlL2FuZHJvaWQudG9vbGNoYWluLmNtYWtl
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9hbmRy
b2lkLnRvb2xjaGFpbi5jbWFrZQkobm9uZXhpc3RlbnQpCkBAIC0xLDE2OTMgKzAsMCBAQAotIyBD
b3B5cmlnaHQgKGMpIDIwMTAtMjAxMSwgRXRoYW4gUnVibGVlCi0jIENvcHlyaWdodCAoYykgMjAx
MS0yMDE0LCBBbmRyZXkgS2FtYWV2Ci0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSMKLSMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSMgICAg
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0j
Ci0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0jICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0jICAgICBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMK
LSMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSMgICAgIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKLSMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCi0jIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0jIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0jIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0jIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
Ci0jIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotIyAgQW5kcm9pZCBDTWFrZSB0b29sY2hhaW4gZmlsZSwgZm9yIHVzZSB3aXRoIHRoZSBBbmRy
b2lkIE5ESyByNS1yMTBkCi0jICBSZXF1aXJlcyBjbWFrZSAyLjYuMyBvciBuZXdlciAoMi44Ljkg
b3IgbmV3ZXIgaXMgcmVjb21tZW5kZWQpLgotIyAgU2VlIGhvbWUgcGFnZTogaHR0cHM6Ly9naXRo
dWIuY29tL3Rha2Etbm8tbWUvYW5kcm9pZC1jbWFrZQotIwotIyAgVXNhZ2UgTGludXg6Ci0jICAg
JCBleHBvcnQgQU5EUk9JRF9OREs9L2Fic29sdXRlL3BhdGgvdG8vdGhlL2FuZHJvaWQtbmRrCi0j
ICAgJCBta2RpciBidWlsZCAmJiBjZCBidWlsZAotIyAgICQgY21ha2UgLURDTUFLRV9UT09MQ0hB
SU5fRklMRT1wYXRoL3RvL3RoZS9hbmRyb2lkLnRvb2xjaGFpbi5jbWFrZSAuLgotIyAgICQgbWFr
ZSAtajgKLSMKLSMgIFVzYWdlIFdpbmRvd3M6Ci0jICAgICBZb3UgbmVlZCBuYXRpdmUgcG9ydCBv
ZiBtYWtlIHRvIGJ1aWxkIHlvdXIgcHJvamVjdC4KLSMgICAgIEFuZHJvaWQgTkRLIHI3IChhbmQg
bmV3ZXIpIGFscmVhZHkgaGFzIG1ha2UuZXhlIG9uIGJvYXJkLgotIyAgICAgRm9yIG9sZGVyIE5E
SyB5b3UgaGF2ZSB0byBpbnN0YWxsIGl0IHNlcGFyYXRlbHkuCi0jICAgICBGb3IgZXhhbXBsZSwg
dGhpcyBvbmU6IGh0dHA6Ly9nbnV3aW4zMi5zb3VyY2Vmb3JnZS5uZXQvcGFja2FnZXMvbWFrZS5o
dG0KLSMKLSMgICAkIFNFVCBBTkRST0lEX05ESz1DOlxhYnNvbHV0ZVxwYXRoXHRvXHRoZVxhbmRy
b2lkLW5kawotIyAgICQgbWtkaXIgYnVpbGQgJiYgY2QgYnVpbGQKLSMgICAkIGNtYWtlLmV4ZSAt
RyJNaW5HVyBNYWtlZmlsZXMiCi0jICAgICAgIC1EQ01BS0VfVE9PTENIQUlOX0ZJTEU9cGF0aFx0
b1x0aGVcYW5kcm9pZC50b29sY2hhaW4uY21ha2UKLSMgICAgICAgLURDTUFLRV9NQUtFX1BST0dS
QU09IiVBTkRST0lEX05ESyVccHJlYnVpbHRcd2luZG93c1xiaW5cbWFrZS5leGUiIC4uCi0jICAg
JCBjbWFrZS5leGUgLS1idWlsZCAuCi0jCi0jCi0jICBPcHRpb25zIChjYW4gYmUgc2V0IGFzIGNt
YWtlIHBhcmFtZXRlcnM6IC1EPG9wdGlvbl9uYW1lPj08dmFsdWU+KToKLSMgICAgQU5EUk9JRF9O
REs9L29wdC9hbmRyb2lkLW5kayAtIHBhdGggdG8gdGhlIE5ESyByb290LgotIyAgICAgIENhbiBi
ZSBzZXQgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUuIENhbiBiZSBzZXQgb25seSBhdCBmaXJzdCBj
bWFrZSBydW4uCi0jCi0jICAgIEFORFJPSURfQUJJPWFybWVhYmktdjdhIC0gc3BlY2lmaWVzIHRo
ZSB0YXJnZXQgQXBwbGljYXRpb24gQmluYXJ5Ci0jICAgICAgSW50ZXJmYWNlIChBQkkpLiBUaGlz
IG9wdGlvbiBuZWFybHkgbWF0Y2hlcyB0byB0aGUgQVBQX0FCSSB2YXJpYWJsZQotIyAgICAgIHVz
ZWQgYnkgbmRrLWJ1aWxkIHRvb2wgZnJvbSBBbmRyb2lkIE5ESy4KLSMKLSMgICAgICBQb3NzaWJs
ZSB0YXJnZXRzIGFyZToKLSMgICAgICAgICJhcm1lYWJpIiAtIEFSTXY1VEUgYmFzZWQgQ1BVIHdp
dGggc29mdHdhcmUgZmxvYXRpbmcgcG9pbnQgb3BlcmF0aW9ucwotIyAgICAgICAgImFybWVhYmkt
djdhIiAtIEFSTXY3IGJhc2VkIGRldmljZXMgd2l0aCBoYXJkd2FyZSBGUFUgaW5zdHJ1Y3Rpb25z
Ci0jICAgICAgICAgICAgdGhpcyBBQkkgdGFyZ2V0IGlzIHVzZWQgYnkgZGVmYXVsdAotIyAgICAg
ICAgImFybWVhYmktdjdhIHdpdGggTkVPTiIgLSBzYW1lIGFzIGFybWVhYmktdjdhLCBidXQKLSMg
ICAgICAgICAgICBzZXRzIE5FT04gYXMgZmxvYXRpbmctcG9pbnQgdW5pdAotIyAgICAgICAgImFy
bWVhYmktdjdhIHdpdGggVkZQVjMiIC0gc2FtZSBhcyBhcm1lYWJpLXY3YSwgYnV0Ci0jICAgICAg
ICAgICAgc2V0cyBWRlBWMyBhcyBmbG9hdGluZy1wb2ludCB1bml0IChoYXMgMzIgcmVnaXN0ZXJz
IGluc3RlYWQgb2YgMTYpCi0jICAgICAgICAiYXJtZWFiaS12NiB3aXRoIFZGUCIgLSB0dW5lZCBm
b3IgQVJNdjYgcHJvY2Vzc29ycyBoYXZpbmcgVkZQCi0jICAgICAgICAieDg2IiAtIElBLTMyIGlu
c3RydWN0aW9uIHNldAotIyAgICAgICAgIm1pcHMiIC0gTUlQUzMyIGluc3RydWN0aW9uIHNldAot
IwotIyAgICAgIDY0LWJpdCBBQklzIGZvciBOREsgcjEwIGFuZCBuZXdlcjoKLSMgICAgICAgICJh
cm02NC12OGEiIC0gQVJNdjggQUFyY2g2NCBpbnN0cnVjdGlvbiBzZXQKLSMgICAgICAgICJ4ODZf
NjQiIC0gSW50ZWw2NCBpbnN0cnVjdGlvbiBzZXQgKHIxKQotIyAgICAgICAgIm1pcHM2NCIgLSBN
SVBTNjQgaW5zdHJ1Y3Rpb24gc2V0IChyNikKLSMKLSMgICAgQU5EUk9JRF9OQVRJVkVfQVBJX0xF
VkVMPWFuZHJvaWQtOCAtIGxldmVsIG9mIEFuZHJvaWQgQVBJIGNvbXBpbGUgZm9yLgotIyAgICAg
IE9wdGlvbiBpcyByZWFkLW9ubHkgd2hlbiBzdGFuZGFsb25lIHRvb2xjaGFpbiBpcyB1c2VkLgot
IyAgICAgIE5vdGU6IGJ1aWxkaW5nIGZvciAiYW5kcm9pZC1MIiByZXF1aXJlcyBleHBsaWNpdCBj
b25maWd1cmF0aW9uLgotIwotIyAgICBBTkRST0lEX1RPT0xDSEFJTl9OQU1FPWFybS1saW51eC1h
bmRyb2lkZWFiaS00LjkgLSB0aGUgbmFtZSBvZiBjb21waWxlcgotIyAgICAgIHRvb2xjaGFpbiB0
byBiZSB1c2VkLiBUaGUgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZGVwZW5kcyBvbiB0aGUgTkRL
Ci0jICAgICAgdmVyc2lvbi4gRm9yIE5ESyByMTBjIHRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgot
IwotIyAgICAgICAgKiBhYXJjaDY0LWxpbnV4LWFuZHJvaWQtNC45Ci0jICAgICAgICAqIGFhcmNo
NjQtbGludXgtYW5kcm9pZC1jbGFuZzMuNAotIyAgICAgICAgKiBhYXJjaDY0LWxpbnV4LWFuZHJv
aWQtY2xhbmczLjUKLSMgICAgICAgICogYXJtLWxpbnV4LWFuZHJvaWRlYWJpLTQuNgotIyAgICAg
ICAgKiBhcm0tbGludXgtYW5kcm9pZGVhYmktNC44Ci0jICAgICAgICAqIGFybS1saW51eC1hbmRy
b2lkZWFiaS00LjkgKGRlZmF1bHQpCi0jICAgICAgICAqIGFybS1saW51eC1hbmRyb2lkZWFiaS1j
bGFuZzMuNAotIyAgICAgICAgKiBhcm0tbGludXgtYW5kcm9pZGVhYmktY2xhbmczLjUKLSMgICAg
ICAgICogbWlwczY0ZWwtbGludXgtYW5kcm9pZC00LjkKLSMgICAgICAgICogbWlwczY0ZWwtbGlu
dXgtYW5kcm9pZC1jbGFuZzMuNAotIyAgICAgICAgKiBtaXBzNjRlbC1saW51eC1hbmRyb2lkLWNs
YW5nMy41Ci0jICAgICAgICAqIG1pcHNlbC1saW51eC1hbmRyb2lkLTQuNgotIyAgICAgICAgKiBt
aXBzZWwtbGludXgtYW5kcm9pZC00LjgKLSMgICAgICAgICogbWlwc2VsLWxpbnV4LWFuZHJvaWQt
NC45Ci0jICAgICAgICAqIG1pcHNlbC1saW51eC1hbmRyb2lkLWNsYW5nMy40Ci0jICAgICAgICAq
IG1pcHNlbC1saW51eC1hbmRyb2lkLWNsYW5nMy41Ci0jICAgICAgICAqIHg4Ni00LjYKLSMgICAg
ICAgICogeDg2LTQuOAotIyAgICAgICAgKiB4ODYtNC45Ci0jICAgICAgICAqIHg4Ni1jbGFuZzMu
NAotIyAgICAgICAgKiB4ODYtY2xhbmczLjUKLSMgICAgICAgICogeDg2XzY0LTQuOQotIyAgICAg
ICAgKiB4ODZfNjQtY2xhbmczLjQKLSMgICAgICAgICogeDg2XzY0LWNsYW5nMy41Ci0jCi0jICAg
IEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEPU9GRiAtIHNldCBPTiB0byBnZW5lcmF0ZSAzMi1iaXQg
QVJNIGluc3RydWN0aW9ucwotIyAgICAgIGluc3RlYWQgb2YgVGh1bWIuIElzIG5vdCBhdmFpbGFi
bGUgZm9yICJhcm1lYWJpLXY2IHdpdGggVkZQIgotIyAgICAgIChpcyBmb3JjZWQgdG8gYmUgT04p
IEFCSS4KLSMKLSMgICAgQU5EUk9JRF9OT19VTkRFRklORUQ9T04gLSBzZXQgT04gdG8gc2hvdyBh
bGwgdW5kZWZpbmVkIHN5bWJvbHMgYXMgbGlua2VyCi0jICAgICAgZXJyb3JzIGV2ZW4gaWYgdGhl
eSBhcmUgbm90IHVzZWQuCi0jCi0jICAgIEFORFJPSURfU09fVU5ERUZJTkVEPU9GRiAtIHNldCBP
TiB0byBhbGxvdyB1bmRlZmluZWQgc3ltYm9scyBpbiBzaGFyZWQKLSMgICAgICBsaWJyYXJpZXMu
IEF1dG9tYXRpY2FsbHkgdHVybmVkIGZvciBOREsgcjV4IGFuZCByNnggZHVlIHRvIEdMRVN2Mgot
IyAgICAgIHByb2JsZW1zLgotIwotIyAgICBBTkRST0lEX1NUTD1nbnVzdGxfc3RhdGljIC0gc3Bl
Y2lmeSB0aGUgcnVudGltZSB0byB1c2UuCi0jCi0jICAgICAgUG9zc2libGUgdmFsdWVzIGFyZToK
LSMgICAgICAgIG5vbmUgICAgICAgICAgIC0+IERvIG5vdCBjb25maWd1cmUgdGhlIHJ1bnRpbWUu
Ci0jICAgICAgICBzeXN0ZW0gICAgICAgICAtPiBVc2UgdGhlIGRlZmF1bHQgbWluaW1hbCBzeXN0
ZW0gQysrIHJ1bnRpbWUgbGlicmFyeS4KLSMgICAgICAgICAgICAgICAgICAgICAgICAgIEltcGxp
ZXMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4KLSMgICAgICAgICAgICAgICAgICAgICAgICAg
IElzIG5vdCBhdmFpbGFibGUgZm9yIHN0YW5kYWxvbmUgdG9vbGNoYWluLgotIyAgICAgICAgc3lz
dGVtX3JlICAgICAgLT4gVXNlIHRoZSBkZWZhdWx0IG1pbmltYWwgc3lzdGVtIEMrKyBydW50aW1l
IGxpYnJhcnkuCi0jICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBsaWVzIC1mcnR0aSAtZmV4
Y2VwdGlvbnMuCi0jICAgICAgICAgICAgICAgICAgICAgICAgICBJcyBub3QgYXZhaWxhYmxlIGZv
ciBzdGFuZGFsb25lIHRvb2xjaGFpbi4KLSMgICAgICAgIGdhYmkrK19zdGF0aWMgIC0+IFVzZSB0
aGUgR0FiaSsrIHJ1bnRpbWUgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSMgICAgICAgICAgICAgICAg
ICAgICAgICAgIEltcGxpZXMgLWZydHRpIC1mbm8tZXhjZXB0aW9ucy4KLSMgICAgICAgICAgICAg
ICAgICAgICAgICAgIEF2YWlsYWJsZSBmb3IgTkRLIHI3IGFuZCBuZXdlci4KLSMgICAgICAgICAg
ICAgICAgICAgICAgICAgIElzIG5vdCBhdmFpbGFibGUgZm9yIHN0YW5kYWxvbmUgdG9vbGNoYWlu
LgotIyAgICAgICAgZ2FiaSsrX3NoYXJlZCAgLT4gVXNlIHRoZSBHQWJpKysgcnVudGltZSBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAtZnJ0
dGkgLWZuby1leGNlcHRpb25zLgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgQXZhaWxhYmxl
IGZvciBOREsgcjcgYW5kIG5ld2VyLgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgbm90
IGF2YWlsYWJsZSBmb3Igc3RhbmRhbG9uZSB0b29sY2hhaW4uCi0jICAgICAgICBzdGxwb3J0X3N0
YXRpYyAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBhIHN0YXRpYyBsaWJyYXJ5LgotIyAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25z
IGZvciBOREsgYmVmb3JlIHI3LgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAt
ZnJ0dGkgLWZuby1leGNlcHRpb25zIGZvciBOREsgcjcgYW5kIG5ld2VyLgotIyAgICAgICAgICAg
ICAgICAgICAgICAgICAgSXMgbm90IGF2YWlsYWJsZSBmb3Igc3RhbmRhbG9uZSB0b29sY2hhaW4u
Ci0jICAgICAgICBzdGxwb3J0X3NoYXJlZCAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSW1wbGllcyAtZm5v
LXJ0dGkgLWZuby1leGNlcHRpb25zIGZvciBOREsgYmVmb3JlIHI3LgotIyAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW1wbGllcyAtZnJ0dGkgLWZuby1leGNlcHRpb25zIGZvciBOREsgcjcgYW5k
IG5ld2VyLgotIyAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgbm90IGF2YWlsYWJsZSBmb3Ig
c3RhbmRhbG9uZSB0b29sY2hhaW4uCi0jICAgICAgICBnbnVzdGxfc3RhdGljICAtPiBVc2UgdGhl
IEdOVSBTVEwgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSMgICAgICAgICAgICAgICAgICAgICAgICAg
IEltcGxpZXMgLWZydHRpIC1mZXhjZXB0aW9ucy4KLSMgICAgICAgIGdudXN0bF9zaGFyZWQgIC0+
IFVzZSB0aGUgR05VIFNUTCBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotIyAgICAgICAgICAgICAgICAg
ICAgICAgICAgSW1wbGllcyAtZnJ0dGkgLWZuby1leGNlcHRpb25zLgotIyAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXZhaWxhYmxlIGZvciBOREsgcjdiIGFuZCBuZXdlci4KLSMgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNpbGVudGx5IGRlZ3JhZGVzIHRvIGdudXN0bF9zdGF0aWMgaWYgbm90
IGF2YWlsYWJsZS4KLSMKLSMgICAgQU5EUk9JRF9TVExfRk9SQ0VfRkVBVFVSRVM9T04gLSB0dXJu
IHJ0dGkgYW5kIGV4Y2VwdGlvbnMgc3VwcG9ydCBiYXNlZCBvbgotIyAgICAgIGNob3NlbiBydW50
aW1lLiBJZiBkaXNhYmxlZCwgdGhlbiB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGlu
Z3MKLSMgICAgICB0aGVzZSBvcHRpb25zLgotIwotIyAgV2hhdD86Ci0jICAgIGFuZHJvaWQtY21h
a2UgdG9vbGNoYWluIHNlYXJjaGVzIGZvciBOREsvdG9vbGNoYWluIGluIHRoZSBmb2xsb3dpbmcg
b3JkZXI6Ci0jICAgICAgQU5EUk9JRF9OREsgLSBjbWFrZSBwYXJhbWV0ZXIKLSMgICAgICBBTkRS
T0lEX05ESyAtIGVudmlyb25tZW50IHZhcmlhYmxlCi0jICAgICAgQU5EUk9JRF9TVEFOREFMT05F
X1RPT0xDSEFJTiAtIGNtYWtlIHBhcmFtZXRlcgotIyAgICAgIEFORFJPSURfU1RBTkRBTE9ORV9U
T09MQ0hBSU4gLSBlbnZpcm9ubWVudCB2YXJpYWJsZQotIyAgICAgIEFORFJPSURfTkRLIC0gZGVm
YXVsdCBsb2NhdGlvbnMKLSMgICAgICBBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOIC0gZGVm
YXVsdCBsb2NhdGlvbnMKLSMKLSMgICAgTWFrZSBzdXJlIHRvIGRvIHRoZSBmb2xsb3dpbmcgaW4g
eW91ciBzY3JpcHRzOgotIyAgICAgIFNFVCggQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9G
TEFHU30gJHtteV9jeHhfZmxhZ3N9IiApCi0jICAgICAgU0VUKCBDTUFLRV9DX0ZMQUdTICIke0NN
QUtFX0NfRkxBR1N9ICR7bXlfY3h4X2ZsYWdzfSIgKQotIyAgICBUaGUgZmxhZ3Mgd2lsbCBiZSBw
cmVwb3B1bGF0ZWQgd2l0aCBjcml0aWNhbCBmbGFncywgc28gZG9uJ3QgbG9vc2UgdGhlbS4KLSMg
ICAgQWxzbyBiZSBhd2FyZSB0aGF0IHRvb2xjaGFpbiBhbHNvIHNldHMgY29uZmlndXJhdGlvbi1z
cGVjaWZpYyBjb21waWxlcgotIyAgICBmbGFncyBhbmQgbGlua2VyIGZsYWdzLgotIwotIyAgICBB
TkRST0lEIGFuZCBCVUlMRF9BTkRST0lEIHdpbGwgYmUgc2V0IHRvIHRydWUsIHlvdSBtYXkgdGVz
dCBhbnkgb2YgdGhlc2UKLSMgICAgdmFyaWFibGVzIHRvIG1ha2UgbmVjZXNzYXJ5IEFuZHJvaWQt
c3BlY2lmaWMgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgotIwotIyAgICBBbHNvIEFSTUVBQkkgb3Ig
QVJNRUFCSV9WN0Egb3IgWDg2IG9yIE1JUFMgb3IgQVJNNjRfVjhBIG9yIFg4Nl82NCBvciBNSVBT
NjQKLSMgICAgd2lsbCBiZSBzZXQgdHJ1ZSwgbXV0dWFsbHkgZXhjbHVzaXZlLiBORU9OIG9wdGlv
biB3aWxsIGJlIHNldCB0cnVlCi0jICAgIGlmIFZGUCBpcyBzZXQgdG8gTkVPTi4KLSMKLSMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoIFZFUlNJT04gMi42
LjMgKQotCi1pZiggREVGSU5FRCBDTUFLRV9DUk9TU0NPTVBJTElORyApCi0gIyBzdWJzZXF1ZW50
IHRvb2xjaGFpbiBsb2FkaW5nIGlzIG5vdCByZWFsbHkgbmVlZGVkCi0gcmV0dXJuKCkKLWVuZGlm
KCkKLQotaWYoIENNQUtFX1RPT0xDSEFJTl9GSUxFICkKLSAjIHRvdWNoIHRvb2xjaGFpbiB2YXJp
YWJsZSB0byBzdXBwcmVzcyAidW51c2VkIHZhcmlhYmxlIiB3YXJuaW5nCi1lbmRpZigpCi0KLSMg
aW5oZXJpdCBzZXR0aW5ncyBpbiByZWN1cnNpdmUgbG9hZHMKLWdldF9wcm9wZXJ0eSggX0NNQUtF
X0lOX1RSWV9DT01QSUxFIEdMT0JBTCBQUk9QRVJUWSBJTl9UUllfQ09NUElMRSApCi1pZiggX0NN
QUtFX0lOX1RSWV9DT01QSUxFICkKLSBpbmNsdWRlKCAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9Ly4uL2FuZHJvaWQudG9vbGNoYWluLmNvbmZpZy5jbWFrZSIgT1BUSU9OQUwgKQotZW5kaWYo
KQotCi0jIHRoaXMgb25lIGlzIGltcG9ydGFudAotaWYoIENNQUtFX1ZFUlNJT04gVkVSU0lPTl9H
UkVBVEVSICIzLjAuOTkiICkKLSBzZXQoIENNQUtFX1NZU1RFTV9OQU1FIEFuZHJvaWQgKQotZWxz
ZSgpCi0gc2V0KCBDTUFLRV9TWVNURU1fTkFNRSBMaW51eCApCi1lbmRpZigpCi0KLSMgdGhpcyBv
bmUgbm90IHNvIG11Y2gKLXNldCggQ01BS0VfU1lTVEVNX1ZFUlNJT04gMSApCi0KLSMgcnBhdGgg
bWFrZXMgbG93IHNlbnNlIGZvciBBbmRyb2lkCi1zZXQoIENNQUtFX1NIQVJFRF9MSUJSQVJZX1JV
TlRJTUVfQ19GTEFHICIiICkKLXNldCggQ01BS0VfU0tJUF9SUEFUSCBUUlVFIENBQ0hFIEJPT0wg
IklmIHNldCwgcnVudGltZSBwYXRocyBhcmUgbm90IGFkZGVkIHdoZW4gdXNpbmcgc2hhcmVkIGxp
YnJhcmllcy4iICkKLQotIyBOREsgc2VhcmNoIHBhdGhzCi1zZXQoIEFORFJPSURfU1VQUE9SVEVE
X05ES19WRVJTSU9OUyAke0FORFJPSURfRVhUUkFfTkRLX1ZFUlNJT05TfSAtcjEwZCAtcjEwYyAt
cjEwYiAtcjEwIC1yOWQgLXI5YyAtcjliIC1yOSAtcjhlIC1yOGQgLXI4YyAtcjhiIC1yOCAtcjdj
IC1yN2IgLXI3IC1yNmIgLXI2IC1yNWMgLXI1YiAtcjUgIiIgKQotaWYoIE5PVCBERUZJTkVEIEFO
RFJPSURfTkRLX1NFQVJDSF9QQVRIUyApCi0gaWYoIENNQUtFX0hPU1RfV0lOMzIgKQotICBmaWxl
KCBUT19DTUFLRV9QQVRIICIkRU5We1BST0dSQU1GSUxFU30iIEFORFJPSURfTkRLX1NFQVJDSF9Q
QVRIUyApCi0gIHNldCggQU5EUk9JRF9OREtfU0VBUkNIX1BBVEhTICIke0FORFJPSURfTkRLX1NF
QVJDSF9QQVRIU30iICIkRU5We1N5c3RlbURyaXZlfS9OVlBBQ0siICkKLSBlbHNlKCkKLSAgZmls
ZSggVE9fQ01BS0VfUEFUSCAiJEVOVntIT01FfSIgQU5EUk9JRF9OREtfU0VBUkNIX1BBVEhTICkK
LSAgc2V0KCBBTkRST0lEX05ES19TRUFSQ0hfUEFUSFMgL29wdCAiJHtBTkRST0lEX05ES19TRUFS
Q0hfUEFUSFN9L05WUEFDSyIgKQotIGVuZGlmKCkKLWVuZGlmKCkKLWlmKCBOT1QgREVGSU5FRCBB
TkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOX1NFQVJDSF9QQVRIICkKLSBzZXQoIEFORFJPSURf
U1RBTkRBTE9ORV9UT09MQ0hBSU5fU0VBUkNIX1BBVEggL29wdC9hbmRyb2lkLXRvb2xjaGFpbiAp
Ci1lbmRpZigpCi0KLSMga25vd24gQUJJcwotc2V0KCBBTkRST0lEX1NVUFBPUlRFRF9BQklTX2Fy
bSAiYXJtZWFiaS12N2E7YXJtZWFiaTthcm1lYWJpLXY3YSB3aXRoIE5FT047YXJtZWFiaS12N2Eg
d2l0aCBWRlBWMzthcm1lYWJpLXY2IHdpdGggVkZQIiApCi1zZXQoIEFORFJPSURfU1VQUE9SVEVE
X0FCSVNfYXJtNjQgImFybTY0LXY4YSIgKQotc2V0KCBBTkRST0lEX1NVUFBPUlRFRF9BQklTX3g4
NiAieDg2IiApCi1zZXQoIEFORFJPSURfU1VQUE9SVEVEX0FCSVNfeDg2XzY0ICJ4ODZfNjQiICkK
LXNldCggQU5EUk9JRF9TVVBQT1JURURfQUJJU19taXBzICJtaXBzIiApCi1zZXQoIEFORFJPSURf
U1VQUE9SVEVEX0FCSVNfbWlwczY0ICJtaXBzNjQiICkKLQotIyBBUEkgbGV2ZWwgZGVmYXVsdHMK
LXNldCggQU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUwgOCApCi1zZXQoIEFORFJPSURfREVG
QVVMVF9OREtfQVBJX0xFVkVMX2FybTY0IDIxICkKLXNldCggQU5EUk9JRF9ERUZBVUxUX05ES19B
UElfTEVWRUxfeDg2IDkgKQotc2V0KCBBTkRST0lEX0RFRkFVTFRfTkRLX0FQSV9MRVZFTF94ODZf
NjQgMjEgKQotc2V0KCBBTkRST0lEX0RFRkFVTFRfTkRLX0FQSV9MRVZFTF9taXBzIDkgKQotc2V0
KCBBTkRST0lEX0RFRkFVTFRfTkRLX0FQSV9MRVZFTF9taXBzNjQgMjEgKQotCi0KLW1hY3JvKCBf
X0xJU1RfRklMVEVSIGxpc3R2YXIgcmVnZXggKQotICBpZiggJHtsaXN0dmFyfSApCi0gICAgZm9y
ZWFjaCggX192YWwgJHske2xpc3R2YXJ9fSApCi0gICAgICBpZiggX192YWwgTUFUQ0hFUyAiJHty
ZWdleH0iICkKLSAgICAgICAgbGlzdCggUkVNT1ZFX0lURU0gJHtsaXN0dmFyfSAiJHtfX3ZhbH0i
ICkKLSAgICAgIGVuZGlmKCkKLSAgICBlbmRmb3JlYWNoKCkKLSAgZW5kaWYoKQotZW5kbWFjcm8o
KQotCi1tYWNybyggX19JTklUX1ZBUklBQkxFIHZhcl9uYW1lICkKLSAgc2V0KCBfX3Rlc3RfcGF0
aCAwICkKLSAgZm9yZWFjaCggX192YXIgJHtBUkdOfSApCi0gICAgaWYoIF9fdmFyIFNUUkVRVUFM
ICJQQVRIIiApCi0gICAgICBzZXQoIF9fdGVzdF9wYXRoIDEgKQotICAgICAgYnJlYWsoKQotICAg
IGVuZGlmKCkKLSAgZW5kZm9yZWFjaCgpCi0KLSAgaWYoIF9fdGVzdF9wYXRoIEFORCBOT1QgRVhJ
U1RTICIkeyR7dmFyX25hbWV9fSIgKQotICAgIHVuc2V0KCAke3Zhcl9uYW1lfSBDQUNIRSApCi0g
IGVuZGlmKCkKLQotICBpZiggIiAkeyR7dmFyX25hbWV9fSIgU1RSRVFVQUwgIiAiICkKLSAgICBz
ZXQoIF9fdmFsdWVzIDAgKQotICAgIGZvcmVhY2goIF9fdmFyICR7QVJHTn0gKQotICAgICAgaWYo
IF9fdmFyIFNUUkVRVUFMICJWQUxVRVMiICkKLSAgICAgICAgc2V0KCBfX3ZhbHVlcyAxICkKLSAg
ICAgIGVsc2VpZiggTk9UIF9fdmFyIFNUUkVRVUFMICJQQVRIIiApCi0gICAgICAgIGlmKCBfX3Zh
ciBNQVRDSEVTICJeRU5WXy4qJCIgKQotICAgICAgICAgIHN0cmluZyggUkVQTEFDRSAiRU5WXyIg
IiIgX192YXIgIiR7X192YXJ9IiApCi0gICAgICAgICAgc2V0KCBfX3ZhbHVlICIkRU5WeyR7X192
YXJ9fSIgKQotICAgICAgICBlbHNlaWYoIERFRklORUQgJHtfX3Zhcn0gKQotICAgICAgICAgIHNl
dCggX192YWx1ZSAiJHske19fdmFyfX0iICkKLSAgICAgICAgZWxzZWlmKCBfX3ZhbHVlcyApCi0g
ICAgICAgICAgc2V0KCBfX3ZhbHVlICIke19fdmFyfSIgKQotICAgICAgICBlbHNlKCkKLSAgICAg
ICAgICBzZXQoIF9fdmFsdWUgIiIgKQotICAgICAgICBlbmRpZigpCi0KLSAgICAgICAgaWYoIE5P
VCAiICR7X192YWx1ZX0iIFNUUkVRVUFMICIgIiBBTkQgKE5PVCBfX3Rlc3RfcGF0aCBPUiBFWElT
VFMgIiR7X192YWx1ZX0iKSApCi0gICAgICAgICAgc2V0KCAke3Zhcl9uYW1lfSAiJHtfX3ZhbHVl
fSIgKQotICAgICAgICAgIGJyZWFrKCkKLSAgICAgICAgZW5kaWYoKQotICAgICAgZW5kaWYoKQot
ICAgIGVuZGZvcmVhY2goKQotICAgIHVuc2V0KCBfX3ZhbHVlICkKLSAgICB1bnNldCggX192YWx1
ZXMgKQotICBlbmRpZigpCi0KLSAgaWYoIF9fdGVzdF9wYXRoICkKLSAgICBmaWxlKCBUT19DTUFL
RV9QQVRIICIkeyR7dmFyX25hbWV9fSIgJHt2YXJfbmFtZX0gKQotICBlbmRpZigpCi0gIHVuc2V0
KCBfX3Rlc3RfcGF0aCApCi1lbmRtYWNybygpCi0KLW1hY3JvKCBfX0RFVEVDVF9OQVRJVkVfQVBJ
X0xFVkVMIF92YXIgX3BhdGggKQotICBzZXQoIF9fbmRrQXBpTGV2ZWxSZWdleCAiXltcdCBdKiNk
ZWZpbmVbXHQgXStfX0FORFJPSURfQVBJX19bXHQgXSsoWzAtOV0rKVtcdCBdKi4qJCIgKQotICBm
aWxlKCBTVFJJTkdTICR7X3BhdGh9IF9fYXBpRmlsZUNvbnRlbnQgUkVHRVggIiR7X19uZGtBcGlM
ZXZlbFJlZ2V4fSIgKQotICBpZiggTk9UIF9fYXBpRmlsZUNvbnRlbnQgKQotICAgIG1lc3NhZ2Uo
IFNFTkRfRVJST1IgIkNvdWxkIG5vdCBnZXQgQW5kcm9pZCBuYXRpdmUgQVBJIGxldmVsLiBQcm9i
YWJseSB5b3UgaGF2ZSBzcGVjaWZpZWQgaW52YWxpZCBsZXZlbCB2YWx1ZSwgb3IgeW91ciBjb3B5
IG9mIE5ESy90b29sY2hhaW4gaXMgYnJva2VuLiIgKQotICBlbmRpZigpCi0gIHN0cmluZyggUkVH
RVggUkVQTEFDRSAiJHtfX25ka0FwaUxldmVsUmVnZXh9IiAiXFwxIiAke192YXJ9ICIke19fYXBp
RmlsZUNvbnRlbnR9IiApCi0gIHVuc2V0KCBfX2FwaUZpbGVDb250ZW50ICkKLSAgdW5zZXQoIF9f
bmRrQXBpTGV2ZWxSZWdleCApCi1lbmRtYWNybygpCi0KLW1hY3JvKCBfX0RFVEVDVF9UT09MQ0hB
SU5fTUFDSElORV9OQU1FIF92YXIgX3Jvb3QgKQotIGlmKCBFWElTVFMgIiR7X3Jvb3R9IiApCi0g
ICAgZmlsZSggR0xPQiBfX2djY0V4ZVBhdGggUkVMQVRJVkUgIiR7X3Jvb3R9L2Jpbi8iICIke19y
b290fS9iaW4vKi1nY2Mke1RPT0xfT1NfU1VGRklYfSIgKQotICAgIF9fTElTVF9GSUxURVIoIF9f
Z2NjRXhlUGF0aCAiXlsuXS4qIiApCi0gICAgbGlzdCggTEVOR1RIIF9fZ2NjRXhlUGF0aCBfX2dj
Y0V4ZVBhdGhzQ291bnQgKQotICAgIGlmKCBOT1QgX19nY2NFeGVQYXRoc0NvdW50IEVRVUFMIDEg
IEFORCBOT1QgX0NNQUtFX0lOX1RSWV9DT01QSUxFICkKLSAgICAgIG1lc3NhZ2UoIFdBUk5JTkcg
IkNvdWxkIG5vdCBkZXRlcm1pbmUgbWFjaGluZSBuYW1lIGZvciBjb21waWxlciBmcm9tICR7X3Jv
b3R9IiApCi0gICAgICBzZXQoICR7X3Zhcn0gIiIgKQotICAgIGVsc2UoKQotICAgICAgZ2V0X2Zp
bGVuYW1lX2NvbXBvbmVudCggX19nY2NFeGVOYW1lICIke19fZ2NjRXhlUGF0aH0iIE5BTUVfV0Ug
KQotICAgICAgc3RyaW5nKCBSRVBMQUNFICItZ2NjIiAiIiAke192YXJ9ICIke19fZ2NjRXhlTmFt
ZX0iICkKLSAgICBlbmRpZigpCi0gICAgdW5zZXQoIF9fZ2NjRXhlUGF0aCApCi0gICAgdW5zZXQo
IF9fZ2NjRXhlUGF0aHNDb3VudCApCi0gICAgdW5zZXQoIF9fZ2NjRXhlTmFtZSApCi0gIGVsc2Uo
KQotICAgIHNldCggJHtfdmFyfSAiIiApCi0gIGVuZGlmKCkKLWVuZG1hY3JvKCkKLQotCi0jIGZp
Z2h0IGFnYWluc3QgY3lnd2luCi1zZXQoIEFORFJPSURfRk9SQklEX1NZR1dJTiBUUlVFIENBQ0hF
IEJPT0wgIlByZXZlbnQgY21ha2UgZnJvbSB3b3JraW5nIHVuZGVyIGN5Z3dpbiBhbmQgdXNpbmcg
Y3lnd2luIHRvb2xzIikKLW1hcmtfYXNfYWR2YW5jZWQoIEFORFJPSURfRk9SQklEX1NZR1dJTiAp
Ci1pZiggQU5EUk9JRF9GT1JCSURfU1lHV0lOICkKLSBpZiggQ1lHV0lOICkKLSAgbWVzc2FnZSgg
RkFUQUxfRVJST1IgIkFuZHJvaWQgTkRLIGFuZCBhbmRyb2lkLWNtYWtlIHRvb2xjaGFpbiBhcmUg
bm90IHdlbGNvbWUgQ3lnd2luLiBJdCBpcyB1bmxpa2VseSB0aGF0IHRoaXMgY21ha2UgdG9vbGNo
YWluIHdpbGwgd29yayB1bmRlciBjeWd3aW4uIEJ1dCBpZiB5b3Ugd2FudCB0byB0cnkgdGhlbiB5
b3UgY2FuIHNldCBjbWFrZSB2YXJpYWJsZSBBTkRST0lEX0ZPUkJJRF9TWUdXSU4gdG8gRkFMU0Ug
YW5kIHJlcnVuIGNtYWtlLiIgKQotIGVuZGlmKCkKLQotIGlmKCBDTUFLRV9IT1NUX1dJTjMyICkK
LSAgIyByZW1vdmUgY3lnd2luIGZyb20gUEFUSAotICBzZXQoIF9fbmV3X3BhdGggIiRFTlZ7UEFU
SH0iKQotICBfX0xJU1RfRklMVEVSKCBfX25ld19wYXRoICJjeWd3aW4iICkKLSAgc2V0KEVOVntQ
QVRIfSAiJHtfX25ld19wYXRofSIpCi0gIHVuc2V0KF9fbmV3X3BhdGgpCi0gZW5kaWYoKQotZW5k
aWYoKQotCi0KLSMgZGV0ZWN0IGN1cnJlbnQgaG9zdCBwbGF0Zm9ybQotaWYoIE5PVCBERUZJTkVE
IEFORFJPSURfTkRLX0hPU1RfWDY0IEFORCAoQ01BS0VfSE9TVF9TWVNURU1fUFJPQ0VTU09SIE1B
VENIRVMgImFtZDY0fHg4Nl82NHxBTUQ2NCIgT1IgQ01BS0VfSE9TVF9BUFBMRSkgKQotIHNldCgg
QU5EUk9JRF9OREtfSE9TVF9YNjQgMSBDQUNIRSBCT09MICJUcnkgdG8gdXNlIDY0LWJpdCBjb21w
aWxlciB0b29sY2hhaW4iICkKLSBtYXJrX2FzX2FkdmFuY2VkKCBBTkRST0lEX05ES19IT1NUX1g2
NCApCi1lbmRpZigpCi0KLXNldCggVE9PTF9PU19TVUZGSVggIiIgKQotaWYoIENNQUtFX0hPU1Rf
QVBQTEUgKQotIHNldCggQU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRSAiZGFyd2luLXg4Nl82
NCIgKQotIHNldCggQU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRTIgImRhcndpbi14ODYiICkK
LWVsc2VpZiggQ01BS0VfSE9TVF9XSU4zMiApCi0gc2V0KCBBTkRST0lEX05ES19IT1NUX1NZU1RF
TV9OQU1FICJ3aW5kb3dzLXg4Nl82NCIgKQotIHNldCggQU5EUk9JRF9OREtfSE9TVF9TWVNURU1f
TkFNRTIgIndpbmRvd3MiICkKLSBzZXQoIFRPT0xfT1NfU1VGRklYICIuZXhlIiApCi1lbHNlaWYo
IENNQUtFX0hPU1RfVU5JWCApCi0gc2V0KCBBTkRST0lEX05ES19IT1NUX1NZU1RFTV9OQU1FICJs
aW51eC14ODZfNjQiICkKLSBzZXQoIEFORFJPSURfTkRLX0hPU1RfU1lTVEVNX05BTUUyICJsaW51
eC14ODYiICkKLWVsc2UoKQotIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJDcm9zcy1jb21waWxhdGlv
biBvbiB5b3VyIHBsYXRmb3JtIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjbWFrZSB0b29sY2hh
aW4iICkKLWVuZGlmKCkKLQotaWYoIE5PVCBBTkRST0lEX05ES19IT1NUX1g2NCApCi0gc2V0KCBB
TkRST0lEX05ES19IT1NUX1NZU1RFTV9OQU1FICR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFN
RTJ9ICkKLWVuZGlmKCkKLQotIyBzZWUgaWYgd2UgaGF2ZSBwYXRoIHRvIEFuZHJvaWQgTkRLCi1p
ZiggTk9UIEFORFJPSURfTkRLIEFORCBOT1QgQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTiAp
Ci0gIF9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9OREsgUEFUSCBFTlZfQU5EUk9JRF9OREsgKQot
ZW5kaWYoKQotaWYoIE5PVCBBTkRST0lEX05ESyApCi0gIyBzZWUgaWYgd2UgaGF2ZSBwYXRoIHRv
IEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hhaW4KLSBfX0lOSVRfVkFSSUFCTEUoIEFORFJPSURf
U1RBTkRBTE9ORV9UT09MQ0hBSU4gUEFUSCBFTlZfQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJ
TiApCi0KLSBpZiggTk9UIEFORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4gKQotICAjdHJ5IHRv
IGZpbmQgQW5kcm9pZCBOREsgaW4gb25lIG9mIHRoZSB0aGUgZGVmYXVsdCBsb2NhdGlvbnMKLSAg
c2V0KCBfX25ka1NlYXJjaFBhdGhzICkKLSAgZm9yZWFjaCggX19uZGtTZWFyY2hQYXRoICR7QU5E
Uk9JRF9OREtfU0VBUkNIX1BBVEhTfSApCi0gICBmb3JlYWNoKCBzdWZmaXggJHtBTkRST0lEX1NV
UFBPUlRFRF9OREtfVkVSU0lPTlN9ICkKLSAgICBsaXN0KCBBUFBFTkQgX19uZGtTZWFyY2hQYXRo
cyAiJHtfX25ka1NlYXJjaFBhdGh9L2FuZHJvaWQtbmRrJHtzdWZmaXh9IiApCi0gICBlbmRmb3Jl
YWNoKCkKLSAgZW5kZm9yZWFjaCgpCi0gIF9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9OREsgUEFU
SCBWQUxVRVMgJHtfX25ka1NlYXJjaFBhdGhzfSApCi0gIHVuc2V0KCBfX25ka1NlYXJjaFBhdGhz
ICkKLQotICBpZiggQU5EUk9JRF9OREsgKQotICAgbWVzc2FnZSggU1RBVFVTICJVc2luZyBkZWZh
dWx0IHBhdGggZm9yIEFuZHJvaWQgTkRLOiAke0FORFJPSURfTkRLfSIgKQotICAgbWVzc2FnZSgg
U1RBVFVTICIgIElmIHlvdSBwcmVmZXIgdG8gdXNlIGEgZGlmZmVyZW50IGxvY2F0aW9uLCBwbGVh
c2UgZGVmaW5lIGEgY21ha2Ugb3IgZW52aXJvbm1lbnQgdmFyaWFibGU6IEFORFJPSURfTkRLIiAp
Ci0gIGVsc2UoKQotICAgI3RyeSB0byBmaW5kIEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hhaW4g
aW4gb25lIG9mIHRoZSB0aGUgZGVmYXVsdCBsb2NhdGlvbnMKLSAgIF9fSU5JVF9WQVJJQUJMRSgg
QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTiBQQVRIIEFORFJPSURfU1RBTkRBTE9ORV9UT09M
Q0hBSU5fU0VBUkNIX1BBVEggKQotCi0gICBpZiggQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJ
TiApCi0gICAgbWVzc2FnZSggU1RBVFVTICJVc2luZyBkZWZhdWx0IHBhdGggZm9yIHN0YW5kYWxv
bmUgdG9vbGNoYWluICR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0iICkKLSAgICBtZXNz
YWdlKCBTVEFUVVMgIiAgSWYgeW91IHByZWZlciB0byB1c2UgYSBkaWZmZXJlbnQgbG9jYXRpb24s
IHBsZWFzZSBkZWZpbmUgdGhlIHZhcmlhYmxlOiBBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlO
IiApCi0gICBlbmRpZiggQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTiApCi0gIGVuZGlmKCBB
TkRST0lEX05ESyApCi0gZW5kaWYoIE5PVCBBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOICkK
LWVuZGlmKCBOT1QgQU5EUk9JRF9OREsgKQotCi0jIHJlbWVtYmVyIGZvdW5kIHBhdGhzCi1pZigg
QU5EUk9JRF9OREsgKQotIGdldF9maWxlbmFtZV9jb21wb25lbnQoIEFORFJPSURfTkRLICIke0FO
RFJPSURfTkRLfSIgQUJTT0xVVEUgKQotIHNldCggQU5EUk9JRF9OREsgIiR7QU5EUk9JRF9OREt9
IiBDQUNIRSBJTlRFUk5BTCAiUGF0aCBvZiB0aGUgQW5kcm9pZCBOREsiIEZPUkNFICkKLSBzZXQo
IEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgVHJ1ZSApCi0gaWYoIEVYSVNUUyAiJHtBTkRST0lEX05E
S30vUkVMRUFTRS5UWFQiICkKLSAgZmlsZSggU1RSSU5HUyAiJHtBTkRST0lEX05ES30vUkVMRUFT
RS5UWFQiIEFORFJPSURfTkRLX1JFTEVBU0VfRlVMTCBMSU1JVF9DT1VOVCAxIFJFR0VYICJyWzAt
OV0rW2Etel0/IiApCi0gIHN0cmluZyggUkVHRVggTUFUQ0ggInIoWzAtOV0rKShbYS16XT8pIiBB
TkRST0lEX05ES19SRUxFQVNFICIke0FORFJPSURfTkRLX1JFTEVBU0VfRlVMTH0iICkKLSBlbHNl
KCkKLSAgc2V0KCBBTkRST0lEX05ES19SRUxFQVNFICJyMXgiICkKLSAgc2V0KCBBTkRST0lEX05E
S19SRUxFQVNFX0ZVTEwgInVucmVsZWFzZWQiICkKLSBlbmRpZigpCi0gc3RyaW5nKCBSRUdFWCBS
RVBMQUNFICJyKFswLTldKykoW2Etel0/KSIgIlxcMSoxMDAwIiBBTkRST0lEX05ES19SRUxFQVNF
X05VTSAiJHtBTkRST0lEX05ES19SRUxFQVNFfSIgKQotIHN0cmluZyggRklORCAiIGFiY2RlZmdo
aWprbG1ub3BxYXN0dXZ3eHl6IiAiJHtDTUFLRV9NQVRDSF8yfSIgX19uZGtSZWxlYXNlTGV0dGVy
TnVtICkKLSBtYXRoKCBFWFBSIEFORFJPSURfTkRLX1JFTEVBU0VfTlVNICIke0FORFJPSURfTkRL
X1JFTEVBU0VfTlVNfSske19fbmRrUmVsZWFzZUxldHRlck51bX0iICkKLWVsc2VpZiggQU5EUk9J
RF9TVEFOREFMT05FX1RPT0xDSEFJTiApCi0gZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCggQU5EUk9J
RF9TVEFOREFMT05FX1RPT0xDSEFJTiAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfSIg
QUJTT0xVVEUgKQotICMgdHJ5IHRvIGRldGVjdCBjaGFuZ2UKLSBpZiggQ01BS0VfQVIgKQotICBz
dHJpbmcoIExFTkdUSCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfSIgX19sZW5ndGgg
KQotICBzdHJpbmcoIFNVQlNUUklORyAiJHtDTUFLRV9BUn0iIDAgJHtfX2xlbmd0aH0gX19hbmRy
b2lkU3RhbmRhbG9uZVRvb2xjaGFpblByZXZpb3VzUGF0aCApCi0gIGlmKCBOT1QgX19hbmRyb2lk
U3RhbmRhbG9uZVRvb2xjaGFpblByZXZpb3VzUGF0aCBTVFJFUVVBTCBBTkRST0lEX1NUQU5EQUxP
TkVfVE9PTENIQUlOICkKLSAgIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJJdCBpcyBub3QgcG9zc2li
bGUgdG8gY2hhbmdlIHBhdGggdG8gdGhlIEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hhaW4gb24g
c3Vic2VxdWVudCBydW4uIiApCi0gIGVuZGlmKCkKLSAgdW5zZXQoIF9fYW5kcm9pZFN0YW5kYWxv
bmVUb29sY2hhaW5QcmV2aW91c1BhdGggKQotICB1bnNldCggX19sZW5ndGggKQotIGVuZGlmKCkK
LSBzZXQoIEFORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU4gIiR7QU5EUk9JRF9TVEFOREFMT05F
X1RPT0xDSEFJTn0iIENBQ0hFIElOVEVSTkFMICJQYXRoIG9mIHRoZSBBbmRyb2lkIHN0YW5kYWxv
bmUgdG9vbGNoYWluIiBGT1JDRSApCi0gc2V0KCBCVUlMRF9XSVRIX1NUQU5EQUxPTkVfVE9PTENI
QUlOIFRydWUgKQotZWxzZSgpCi0gbGlzdChHRVQgQU5EUk9JRF9OREtfU0VBUkNIX1BBVEhTIDAg
QU5EUk9JRF9OREtfU0VBUkNIX1BBVEgpCi0gbWVzc2FnZSggRkFUQUxfRVJST1IgIkNvdWxkIG5v
dCBmaW5kIG5laXRoZXIgQW5kcm9pZCBOREsgbm9yIEFuZHJvaWQgc3RhbmRhbG9uZSB0b29sY2hh
aW4uCi0gICAgWW91IHNob3VsZCBlaXRoZXIgc2V0IGFuIGVudmlyb25tZW50IHZhcmlhYmxlOgot
ICAgICAgZXhwb3J0IEFORFJPSURfTkRLPX4vbXktYW5kcm9pZC1uZGsKLSAgICBvcgotICAgICAg
ZXhwb3J0IEFORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hBSU49fi9teS1hbmRyb2lkLXRvb2xjaGFp
bgotICAgIG9yIHB1dCB0aGUgdG9vbGNoYWluIG9yIE5ESyBpbiB0aGUgZGVmYXVsdCBwYXRoOgot
ICAgICAgc3VkbyBsbiAtcyB+L215LWFuZHJvaWQtbmRrICR7QU5EUk9JRF9OREtfU0VBUkNIX1BB
VEh9L2FuZHJvaWQtbmRrCi0gICAgICBzdWRvIGxuIC1zIH4vbXktYW5kcm9pZC10b29sY2hhaW4g
JHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOX1NFQVJDSF9QQVRIfSIgKQotZW5kaWYoKQot
Ci0jIGFuZHJvaWQgTkRLIGxheW91dAotaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgKQotIGlm
KCBOT1QgREVGSU5FRCBBTkRST0lEX05ES19MQVlPVVQgKQotICAjIHRyeSB0byBhdXRvbWF0aWNh
bGx5IGRldGVjdCB0aGUgbGF5b3V0Ci0gIGlmKCBFWElTVFMgIiR7QU5EUk9JRF9OREt9L1JFTEVB
U0UuVFhUIikKLSAgIHNldCggQU5EUk9JRF9OREtfTEFZT1VUICJSRUxFQVNFIiApCi0gIGVsc2Vp
ZiggRVhJU1RTICIke0FORFJPSURfTkRLfS8uLi8uLi9saW51eC14ODYvdG9vbGNoYWluLyIgKQot
ICAgc2V0KCBBTkRST0lEX05ES19MQVlPVVQgIkxJTkFSTyIgKQotICBlbHNlaWYoIEVYSVNUUyAi
JHtBTkRST0lEX05ES30vLi4vLi4vZ2NjLyIgKQotICAgc2V0KCBBTkRST0lEX05ES19MQVlPVVQg
IkFORFJPSUQiICkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLSBzZXQoIEFORFJPSURfTkRLX0xBWU9V
VCAiJHtBTkRST0lEX05ES19MQVlPVVR9IiBDQUNIRSBTVFJJTkcgIlRoZSBpbm5lciBsYXlvdXQg
b2YgTkRLIiApCi0gbWFya19hc19hZHZhbmNlZCggQU5EUk9JRF9OREtfTEFZT1VUICkKLSBpZigg
QU5EUk9JRF9OREtfTEFZT1VUIFNUUkVRVUFMICJMSU5BUk8iICkKLSAgc2V0KCBBTkRST0lEX05E
S19IT1NUX1NZU1RFTV9OQU1FICR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRTJ9ICkgIyBv
bmx5IDMyLWJpdCBhdCB0aGUgbW9tZW50Ci0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19Q
QVRIICIke0FORFJPSURfTkRLfS8uLi8uLi8ke0FORFJPSURfTkRLX0hPU1RfU1lTVEVNX05BTUV9
L3Rvb2xjaGFpbiIgKQotICBzZXQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSCAgIiIg
KQotICBzZXQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDIgIiIgKQotIGVsc2VpZigg
QU5EUk9JRF9OREtfTEFZT1VUIFNUUkVRVUFMICJBTkRST0lEIiApCi0gIHNldCggQU5EUk9JRF9O
REtfSE9TVF9TWVNURU1fTkFNRSAke0FORFJPSURfTkRLX0hPU1RfU1lTVEVNX05BTUUyfSApICMg
b25seSAzMi1iaXQgYXQgdGhlIG1vbWVudAotICBzZXQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNf
UEFUSCAiJHtBTkRST0lEX05ES30vLi4vLi4vZ2NjLyR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1f
TkFNRX0vYXJtIiApCi0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19TVUJQQVRIICAiIiAp
Ci0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19TVUJQQVRIMiAiIiApCi0gZWxzZSgpICMg
QU5EUk9JRF9OREtfTEFZT1VUIFNUUkVRVUFMICJSRUxFQVNFIgotICBzZXQoIEFORFJPSURfTkRL
X1RPT0xDSEFJTlNfUEFUSCAiJHtBTkRST0lEX05ES30vdG9vbGNoYWlucyIgKQotICBzZXQoIEFO
RFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSCAgIi9wcmVidWlsdC8ke0FORFJPSURfTkRLX0hP
U1RfU1lTVEVNX05BTUV9IiApCi0gIHNldCggQU5EUk9JRF9OREtfVE9PTENIQUlOU19TVUJQQVRI
MiAiL3ByZWJ1aWx0LyR7QU5EUk9JRF9OREtfSE9TVF9TWVNURU1fTkFNRTJ9IiApCi0gZW5kaWYo
KQotIGdldF9maWxlbmFtZV9jb21wb25lbnQoIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSCAi
JHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEh9IiBBQlNPTFVURSApCi0KLSAjIHRyeSB0byBk
ZXRlY3QgY2hhbmdlIG9mIE5ESwotIGlmKCBDTUFLRV9BUiApCi0gIHN0cmluZyggTEVOR1RIICIk
e0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0iIF9fbGVuZ3RoICkKLSAgc3RyaW5nKCBTVUJT
VFJJTkcgIiR7Q01BS0VfQVJ9IiAwICR7X19sZW5ndGh9IF9fYW5kcm9pZE5ka1ByZXZpb3VzUGF0
aCApCi0gIGlmKCBOT1QgX19hbmRyb2lkTmRrUHJldmlvdXNQYXRoIFNUUkVRVUFMIEFORFJPSURf
TkRLX1RPT0xDSEFJTlNfUEFUSCApCi0gICBtZXNzYWdlKCBGQVRBTF9FUlJPUiAiSXQgaXMgbm90
IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgcGF0aCB0byB0aGUgTkRLIG9uIHN1YnNlcXVlbnQgQ01h
a2UgcnVuLiBZb3UgbXVzdCByZW1vdmUgYWxsIGdlbmVyYXRlZCBmaWxlcyBmcm9tIHlvdXIgYnVp
bGQgZm9sZGVyIGZpcnN0LgotICAgIiApCi0gIGVuZGlmKCkKLSAgdW5zZXQoIF9fYW5kcm9pZE5k
a1ByZXZpb3VzUGF0aCApCi0gIHVuc2V0KCBfX2xlbmd0aCApCi0gZW5kaWYoKQotZW5kaWYoKQot
Ci0KLSMgZ2V0IGFsbCB0aGUgZGV0YWlscyBhYm91dCBzdGFuZGFsb25lIHRvb2xjaGFpbgotaWYo
IEJVSUxEX1dJVEhfU1RBTkRBTE9ORV9UT09MQ0hBSU4gKQotIF9fREVURUNUX05BVElWRV9BUElf
TEVWRUwoIEFORFJPSURfU1VQUE9SVEVEX05BVElWRV9BUElfTEVWRUxTICIke0FORFJPSURfU1RB
TkRBTE9ORV9UT09MQ0hBSU59L3N5c3Jvb3QvdXNyL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwu
aCIgKQotIHNldCggQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTl9BUElfTEVWRUwgJHtBTkRS
T0lEX1NVUFBPUlRFRF9OQVRJVkVfQVBJX0xFVkVMU30gKQotIHNldCggX19hdmFpbGFibGVUb29s
Y2hhaW5zICJzdGFuZGFsb25lIiApCi0gX19ERVRFQ1RfVE9PTENIQUlOX01BQ0hJTkVfTkFNRSgg
X19hdmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENI
QUlOfSIgKQotIGlmKCBOT1QgX19hdmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyApCi0gIG1lc3Nh
Z2UoIEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZGV0ZXJtaW5lIG1hY2hpbmUgbmFtZSBvZiB5b3Vy
IHRvb2xjaGFpbi4gUHJvYmFibHkgeW91ciBBbmRyb2lkIHN0YW5kYWxvbmUgdG9vbGNoYWluIGlz
IGJyb2tlbi4iICkKLSBlbmRpZigpCi0gaWYoIF9fYXZhaWxhYmxlVG9vbGNoYWluTWFjaGluZXMg
TUFUQ0hFUyB4ODZfNjQgKQotICBzZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgIng4Nl82
NCIgKQotIGVsc2VpZiggX19hdmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyBNQVRDSEVTIGk2ODYg
KQotICBzZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgIng4NiIgKQotIGVsc2VpZiggX19h
dmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyBNQVRDSEVTIGFhcmNoNjQgKQotICBzZXQoIF9fYXZh
aWxhYmxlVG9vbGNoYWluQXJjaHMgImFybTY0IiApCi0gZWxzZWlmKCBfX2F2YWlsYWJsZVRvb2xj
aGFpbk1hY2hpbmVzIE1BVENIRVMgYXJtICkKLSAgc2V0KCBfX2F2YWlsYWJsZVRvb2xjaGFpbkFy
Y2hzICJhcm0iICkKLSBlbHNlaWYoIF9fYXZhaWxhYmxlVG9vbGNoYWluTWFjaGluZXMgTUFUQ0hF
UyBtaXBzNjRlbCApCi0gIHNldCggX19hdmFpbGFibGVUb29sY2hhaW5BcmNocyAibWlwczY0IiAp
Ci0gZWxzZWlmKCBfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzIE1BVENIRVMgbWlwc2VsICkK
LSAgc2V0KCBfX2F2YWlsYWJsZVRvb2xjaGFpbkFyY2hzICJtaXBzIiApCi0gZW5kaWYoKQotIGV4
ZWN1dGVfcHJvY2VzcyggQ09NTUFORCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS9i
aW4vJHtfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzfS1nY2Mke1RPT0xfT1NfU1VGRklYfSIg
LWR1bXB2ZXJzaW9uCi0gICAgICAgICAgICAgICAgICBPVVRQVVRfVkFSSUFCTEUgX19hdmFpbGFi
bGVUb29sY2hhaW5Db21waWxlclZlcnNpb25zIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQ
QUNFICkKLSBzdHJpbmcoIFJFR0VYIE1BVENIICJbMC05XStbLl1bMC05XSsoWy5dWzAtOV0rKT8i
IF9fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGlsZXJWZXJzaW9ucyAiJHtfX2F2YWlsYWJsZVRvb2xj
aGFpbkNvbXBpbGVyVmVyc2lvbnN9IiApCi0gaWYoIEVYSVNUUyAiJHtBTkRST0lEX1NUQU5EQUxP
TkVfVE9PTENIQUlOfS9iaW4vY2xhbmcke1RPT0xfT1NfU1VGRklYfSIgKQotICBsaXN0KCBBUFBF
TkQgX19hdmFpbGFibGVUb29sY2hhaW5zICJzdGFuZGFsb25lLWNsYW5nIiApCi0gIGxpc3QoIEFQ
UEVORCBfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzICR7X19hdmFpbGFibGVUb29sY2hhaW5N
YWNoaW5lc30gKQotICBsaXN0KCBBUFBFTkQgX19hdmFpbGFibGVUb29sY2hhaW5BcmNocyAke19f
YXZhaWxhYmxlVG9vbGNoYWluQXJjaHN9ICkKLSAgbGlzdCggQVBQRU5EIF9fYXZhaWxhYmxlVG9v
bGNoYWluQ29tcGlsZXJWZXJzaW9ucyAke19fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGlsZXJWZXJz
aW9uc30gKQotIGVuZGlmKCkKLWVuZGlmKCkKLQotbWFjcm8oIF9fR0xPQl9OREtfVE9PTENIQUlO
UyBfX2F2YWlsYWJsZVRvb2xjaGFpbnNWYXIgX19hdmFpbGFibGVUb29sY2hhaW5zTHN0IF9fdG9v
bGNoYWluX3N1YnBhdGggKQotIGZvcmVhY2goIF9fdG9vbGNoYWluICR7JHtfX2F2YWlsYWJsZVRv
b2xjaGFpbnNMc3R9fSApCi0gIGlmKCAiJHtfX3Rvb2xjaGFpbn0iIE1BVENIRVMgIi1jbGFuZzNb
Ll1bMC05XSQiIEFORCBOT1QgRVhJU1RTICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0v
JHtfX3Rvb2xjaGFpbn0ke19fdG9vbGNoYWluX3N1YnBhdGh9IiApCi0gICBTRVQoIF9fdG9vbGNo
YWluVmVyc2lvblJlZ2V4ICJeVE9PTENIQUlOX1ZFUlNJT05bXHQgXSs6PVtcdCBdKyguKikkIiAp
Ci0gICBGSUxFKCBTVFJJTkdTICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtfX3Rv
b2xjaGFpbn0vc2V0dXAubWsiIF9fdG9vbGNoYWluVmVyc2lvblN0ciBSRUdFWCAiJHtfX3Rvb2xj
aGFpblZlcnNpb25SZWdleH0iICkKLSAgIGlmKCBfX3Rvb2xjaGFpblZlcnNpb25TdHIgKQotICAg
IHN0cmluZyggUkVHRVggUkVQTEFDRSAiJHtfX3Rvb2xjaGFpblZlcnNpb25SZWdleH0iICJcXDEi
IF9fdG9vbGNoYWluVmVyc2lvblN0ciAiJHtfX3Rvb2xjaGFpblZlcnNpb25TdHJ9IiApCi0gICAg
c3RyaW5nKCBSRUdFWCBSRVBMQUNFICItY2xhbmczWy5dWzAtOV0kIiAiLSR7X190b29sY2hhaW5W
ZXJzaW9uU3RyfSIgX19nY2NfdG9vbGNoYWluICIke19fdG9vbGNoYWlufSIgKQotICAgZWxzZSgp
Ci0gICAgc3RyaW5nKCBSRUdFWCBSRVBMQUNFICItY2xhbmczWy5dWzAtOV0kIiAiLTQuNiIgX19n
Y2NfdG9vbGNoYWluICIke19fdG9vbGNoYWlufSIgKQotICAgZW5kaWYoKQotICAgdW5zZXQoIF9f
dG9vbGNoYWluVmVyc2lvblN0ciApCi0gICB1bnNldCggX190b29sY2hhaW5WZXJzaW9uUmVnZXgg
KQotICBlbHNlKCkKLSAgIHNldCggX19nY2NfdG9vbGNoYWluICIke19fdG9vbGNoYWlufSIgKQot
ICBlbmRpZigpCi0gIF9fREVURUNUX1RPT0xDSEFJTl9NQUNISU5FX05BTUUoIF9fbWFjaGluZSAi
JHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEh9LyR7X19nY2NfdG9vbGNoYWlufSR7X190b29s
Y2hhaW5fc3VicGF0aH0iICkKLSAgaWYoIF9fbWFjaGluZSApCi0gICBzdHJpbmcoIFJFR0VYIE1B
VENIICJbMC05XStbLl1bMC05XSsoWy5dWzAtOXhdKyk/JCIgX192ZXJzaW9uICIke19fZ2NjX3Rv
b2xjaGFpbn0iICkKLSAgIGlmKCBfX21hY2hpbmUgTUFUQ0hFUyB4ODZfNjQgKQotICAgIHNldCgg
X19hcmNoICJ4ODZfNjQiICkKLSAgIGVsc2VpZiggX19tYWNoaW5lIE1BVENIRVMgaTY4NiApCi0g
ICAgc2V0KCBfX2FyY2ggIng4NiIgKQotICAgZWxzZWlmKCBfX21hY2hpbmUgTUFUQ0hFUyBhYXJj
aDY0ICkKLSAgICBzZXQoIF9fYXJjaCAiYXJtNjQiICkKLSAgIGVsc2VpZiggX19tYWNoaW5lIE1B
VENIRVMgYXJtICkKLSAgICBzZXQoIF9fYXJjaCAiYXJtIiApCi0gICBlbHNlaWYoIF9fbWFjaGlu
ZSBNQVRDSEVTIG1pcHM2NGVsICkKLSAgICBzZXQoIF9fYXJjaCAibWlwczY0IiApCi0gICBlbHNl
aWYoIF9fbWFjaGluZSBNQVRDSEVTIG1pcHNlbCApCi0gICAgc2V0KCBfX2FyY2ggIm1pcHMiICkK
LSAgIGVsc2UoKQotICAgIHNldCggX19hcmNoICIiICkKLSAgIGVuZGlmKCkKLSAgICNtZXNzYWdl
KCJtYWNoaW5lOiAhJHtfX21hY2hpbmV9IVxuYXJjaDogISR7X19hcmNofSFcbnZlcnNpb246ICEk
e19fdmVyc2lvbn0hXG50b29sY2hhaW46ICEke19fdG9vbGNoYWlufSFcbiIpCi0gICBpZiAoX19h
cmNoKQotICAgIGxpc3QoIEFQUEVORCBfX2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzICIke19f
bWFjaGluZX0iICkKLSAgICBsaXN0KCBBUFBFTkQgX19hdmFpbGFibGVUb29sY2hhaW5BcmNocyAi
JHtfX2FyY2h9IiApCi0gICAgbGlzdCggQVBQRU5EIF9fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGls
ZXJWZXJzaW9ucyAiJHtfX3ZlcnNpb259IiApCi0gICAgbGlzdCggQVBQRU5EICR7X19hdmFpbGFi
bGVUb29sY2hhaW5zVmFyfSAiJHtfX3Rvb2xjaGFpbn0iICkKLSAgIGVuZGlmKCkKLSAgZW5kaWYo
KQotICB1bnNldCggX19nY2NfdG9vbGNoYWluICkKLSBlbmRmb3JlYWNoKCkKLWVuZG1hY3JvKCkK
LQotIyBnZXQgYWxsIHRoZSBkZXRhaWxzIGFib3V0IE5ESwotaWYoIEJVSUxEX1dJVEhfQU5EUk9J
RF9OREsgKQotIGZpbGUoIEdMT0IgQU5EUk9JRF9TVVBQT1JURURfTkFUSVZFX0FQSV9MRVZFTFMg
UkVMQVRJVkUgIiR7QU5EUk9JRF9OREt9L3BsYXRmb3JtcyIgIiR7QU5EUk9JRF9OREt9L3BsYXRm
b3Jtcy9hbmRyb2lkLSoiICkKLSBzdHJpbmcoIFJFUExBQ0UgImFuZHJvaWQtIiAiIiBBTkRST0lE
X1NVUFBPUlRFRF9OQVRJVkVfQVBJX0xFVkVMUyAiJHtBTkRST0lEX1NVUFBPUlRFRF9OQVRJVkVf
QVBJX0xFVkVMU30iICkKLSBzZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWlucyAiIiApCi0gc2V0KCBf
X2F2YWlsYWJsZVRvb2xjaGFpbk1hY2hpbmVzICIiICkKLSBzZXQoIF9fYXZhaWxhYmxlVG9vbGNo
YWluQXJjaHMgIiIgKQotIHNldCggX19hdmFpbGFibGVUb29sY2hhaW5Db21waWxlclZlcnNpb25z
ICIiICkKLSBpZiggQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSBBTkQgRVhJU1RTICIke0FORFJPSURf
TkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtBTkRST0lEX1RPT0xDSEFJTl9OQU1FfS8iICkKLSAgIyBk
byBub3QgZ28gdGhyb3VnaCBhbGwgdG9vbGNoYWlucyBpZiB3ZSBrbm93IHRoZSBuYW1lCi0gIHNl
dCggX19hdmFpbGFibGVUb29sY2hhaW5zTHN0ICIke0FORFJPSURfVE9PTENIQUlOX05BTUV9IiAp
Ci0gIF9fR0xPQl9OREtfVE9PTENIQUlOUyggX19hdmFpbGFibGVUb29sY2hhaW5zIF9fYXZhaWxh
YmxlVG9vbGNoYWluc0xzdCAiJHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1NVQlBBVEh9IiApCi0g
IGlmKCBOT1QgX19hdmFpbGFibGVUb29sY2hhaW5zIEFORCBOT1QgQU5EUk9JRF9OREtfVE9PTENI
QUlOU19TVUJQQVRIIFNUUkVRVUFMIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDIgKQot
ICAgX19HTE9CX05ES19UT09MQ0hBSU5TKCBfX2F2YWlsYWJsZVRvb2xjaGFpbnMgX19hdmFpbGFi
bGVUb29sY2hhaW5zTHN0ICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9IiApCi0g
ICBpZiggX19hdmFpbGFibGVUb29sY2hhaW5zICkKLSAgICBzZXQoIEFORFJPSURfTkRLX1RPT0xD
SEFJTlNfU1VCUEFUSCAke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9ICkKLSAgIGVu
ZGlmKCkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLSBpZiggTk9UIF9fYXZhaWxhYmxlVG9vbGNoYWlu
cyApCi0gIGZpbGUoIEdMT0IgX19hdmFpbGFibGVUb29sY2hhaW5zTHN0IFJFTEFUSVZFICIke0FO
RFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0iICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFU
SH0vKiIgKQotICBpZiggX19hdmFpbGFibGVUb29sY2hhaW5zTHN0ICkKLSAgIGxpc3QoU09SVCBf
X2F2YWlsYWJsZVRvb2xjaGFpbnNMc3QpICMgd2UgbmVlZCBjbGFuZyB0byBnbyBhZnRlciBnY2MK
LSAgZW5kaWYoKQotICBfX0xJU1RfRklMVEVSKCBfX2F2YWlsYWJsZVRvb2xjaGFpbnNMc3QgIl5b
Ll0iICkKLSAgX19MSVNUX0ZJTFRFUiggX19hdmFpbGFibGVUb29sY2hhaW5zTHN0ICJsbHZtIiAp
Ci0gIF9fTElTVF9GSUxURVIoIF9fYXZhaWxhYmxlVG9vbGNoYWluc0xzdCAicmVuZGVyc2NyaXB0
IiApCi0gIF9fR0xPQl9OREtfVE9PTENIQUlOUyggX19hdmFpbGFibGVUb29sY2hhaW5zIF9fYXZh
aWxhYmxlVG9vbGNoYWluc0xzdCAiJHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1NVQlBBVEh9IiAp
Ci0gIGlmKCBOT1QgX19hdmFpbGFibGVUb29sY2hhaW5zIEFORCBOT1QgQU5EUk9JRF9OREtfVE9P
TENIQUlOU19TVUJQQVRIIFNUUkVRVUFMIEFORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDIg
KQotICAgX19HTE9CX05ES19UT09MQ0hBSU5TKCBfX2F2YWlsYWJsZVRvb2xjaGFpbnMgX19hdmFp
bGFibGVUb29sY2hhaW5zTHN0ICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9IiAp
Ci0gICBpZiggX19hdmFpbGFibGVUb29sY2hhaW5zICkKLSAgICBzZXQoIEFORFJPSURfTkRLX1RP
T0xDSEFJTlNfU1VCUEFUSCAke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSDJ9ICkKLSAg
IGVuZGlmKCkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLSBpZiggTk9UIF9fYXZhaWxhYmxlVG9vbGNo
YWlucyApCi0gIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJDb3VsZCBub3QgZmluZCBhbnkgd29ya2lu
ZyB0b29sY2hhaW4gaW4gdGhlIE5ESy4gUHJvYmFibHkgeW91ciBBbmRyb2lkIE5ESyBpcyBicm9r
ZW4uIiApCi0gZW5kaWYoKQotZW5kaWYoKQotCi0jIGJ1aWxkIGxpc3Qgb2YgYXZhaWxhYmxlIEFC
SXMKLXNldCggQU5EUk9JRF9TVVBQT1JURURfQUJJUyAiIiApCi1zZXQoIF9fdW5pcVRvb2xjaGFp
bkFyY2hOYW1lcyAke19fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHN9ICkKLWxpc3QoIFJFTU9WRV9E
VVBMSUNBVEVTIF9fdW5pcVRvb2xjaGFpbkFyY2hOYW1lcyApCi1saXN0KCBTT1JUIF9fdW5pcVRv
b2xjaGFpbkFyY2hOYW1lcyApCi1mb3JlYWNoKCBfX2FyY2ggJHtfX3VuaXFUb29sY2hhaW5BcmNo
TmFtZXN9ICkKLSBsaXN0KCBBUFBFTkQgQU5EUk9JRF9TVVBQT1JURURfQUJJUyAke0FORFJPSURf
U1VQUE9SVEVEX0FCSVNfJHtfX2FyY2h9fSApCi1lbmRmb3JlYWNoKCkKLXVuc2V0KCBfX3VuaXFU
b29sY2hhaW5BcmNoTmFtZXMgKQotaWYoIE5PVCBBTkRST0lEX1NVUFBPUlRFRF9BQklTICkKLSBt
ZXNzYWdlKCBGQVRBTF9FUlJPUiAiTm8gb25lIG9mIGtub3duIEFuZHJvaWQgQUJJcyBpcyBzdXBw
b3J0ZWQgYnkgdGhpcyBjbWFrZSB0b29sY2hhaW4uIiApCi1lbmRpZigpCi0KLSMgY2hvb3NlIHRh
cmdldCBBQkkKLV9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9BQkkgVkFMVUVTICR7QU5EUk9JRF9T
VVBQT1JURURfQUJJU30gKQotIyB2ZXJpZnkgdGhhdCB0YXJnZXQgQUJJIGlzIHN1cHBvcnRlZAot
bGlzdCggRklORCBBTkRST0lEX1NVUFBPUlRFRF9BQklTICIke0FORFJPSURfQUJJfSIgX19hbmRy
b2lkQWJpSWR4ICkKLWlmKCBfX2FuZHJvaWRBYmlJZHggRVFVQUwgLTEgKQotIHN0cmluZyggUkVQ
TEFDRSAiOyIgIlwiLCBcIiIgUFJJTlRBQkxFX0FORFJPSURfU1VQUE9SVEVEX0FCSVMgICIke0FO
RFJPSURfU1VQUE9SVEVEX0FCSVN9IiApCi0gbWVzc2FnZSggRkFUQUxfRVJST1IgIlNwZWNpZmll
ZCBBTkRST0lEX0FCSSA9IFwiJHtBTkRST0lEX0FCSX1cIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRo
aXMgY21ha2UgdG9vbGNoYWluIG9yIHlvdXIgTkRLL3Rvb2xjaGFpbi4KLSAgIFN1cHBvcnRlZCB2
YWx1ZXMgYXJlOiBcIiR7UFJJTlRBQkxFX0FORFJPSURfU1VQUE9SVEVEX0FCSVN9XCIKLSAgICIg
KQotZW5kaWYoKQotdW5zZXQoIF9fYW5kcm9pZEFiaUlkeCApCi0KLSMgc2V0IHRhcmdldCBBQkkg
b3B0aW9ucwotaWYoIEFORFJPSURfQUJJIFNUUkVRVUFMICJ4ODYiICkKLSBzZXQoIFg4NiB0cnVl
ICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJ4ODYiICkKLSBzZXQoIEFORFJPSURfQVJD
SF9OQU1FICJ4ODYiICkKLSBzZXQoIEFORFJPSURfTExWTV9UUklQTEUgImk2ODYtbm9uZS1saW51
eC1hbmRyb2lkIiApCi0gc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJpNjg2IiApCi1lbHNl
aWYoIEFORFJPSURfQUJJIFNUUkVRVUFMICJ4ODZfNjQiICkKLSBzZXQoIFg4NiB0cnVlICkKLSBz
ZXQoIFg4Nl82NCB0cnVlICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJ4ODZfNjQiICkK
LSBzZXQoIEFORFJPSURfQVJDSF9OQU1FICJ4ODZfNjQiICkKLSBzZXQoIENNQUtFX1NZU1RFTV9Q
Uk9DRVNTT1IgIng4Nl82NCIgKQotIHNldCggQU5EUk9JRF9MTFZNX1RSSVBMRSAieDg2XzY0LW5v
bmUtbGludXgtYW5kcm9pZCIgKQotZWxzZWlmKCBBTkRST0lEX0FCSSBTVFJFUVVBTCAibWlwczY0
IiApCi0gc2V0KCBNSVBTNjQgdHJ1ZSApCi0gc2V0KCBBTkRST0lEX05ES19BQklfTkFNRSAibWlw
czY0IiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAibWlwczY0IiApCi0gc2V0KCBBTkRST0lE
X0xMVk1fVFJJUExFICJtaXBzNjRlbC1ub25lLWxpbnV4LWFuZHJvaWQiICkKLSBzZXQoIENNQUtF
X1NZU1RFTV9QUk9DRVNTT1IgIm1pcHM2NCIgKQotZWxzZWlmKCBBTkRST0lEX0FCSSBTVFJFUVVB
TCAibWlwcyIgKQotIHNldCggTUlQUyB0cnVlICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1F
ICJtaXBzIiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAibWlwcyIgKQotIHNldCggQU5EUk9J
RF9MTFZNX1RSSVBMRSAibWlwc2VsLW5vbmUtbGludXgtYW5kcm9pZCIgKQotIHNldCggQ01BS0Vf
U1lTVEVNX1BST0NFU1NPUiAibWlwcyIgKQotZWxzZWlmKCBBTkRST0lEX0FCSSBTVFJFUVVBTCAi
YXJtNjQtdjhhIiApCi0gc2V0KCBBUk02NF9WOEEgdHJ1ZSApCi0gc2V0KCBBTkRST0lEX05ES19B
QklfTkFNRSAiYXJtNjQtdjhhIiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAiYXJtNjQiICkK
LSBzZXQoIEFORFJPSURfTExWTV9UUklQTEUgImFhcmNoNjQtbm9uZS1saW51eC1hbmRyb2lkIiAp
Ci0gc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJhYXJjaDY0IiApCi0gc2V0KCBWRlBWMyB0
cnVlICkKLSBzZXQoIE5FT04gdHJ1ZSApCi1lbHNlaWYoIEFORFJPSURfQUJJIFNUUkVRVUFMICJh
cm1lYWJpIiApCi0gc2V0KCBBUk1FQUJJIHRydWUgKQotIHNldCggQU5EUk9JRF9OREtfQUJJX05B
TUUgImFybWVhYmkiICkKLSBzZXQoIEFORFJPSURfQVJDSF9OQU1FICJhcm0iICkKLSBzZXQoIEFO
RFJPSURfTExWTV9UUklQTEUgImFybXY1dGUtbm9uZS1saW51eC1hbmRyb2lkZWFiaSIgKQotIHNl
dCggQ01BS0VfU1lTVEVNX1BST0NFU1NPUiAiYXJtdjV0ZSIgKQotZWxzZWlmKCBBTkRST0lEX0FC
SSBTVFJFUVVBTCAiYXJtZWFiaS12NiB3aXRoIFZGUCIgKQotIHNldCggQVJNRUFCSV9WNiB0cnVl
ICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJhcm1lYWJpIiApCi0gc2V0KCBBTkRST0lE
X0FSQ0hfTkFNRSAiYXJtIiApCi0gc2V0KCBBTkRST0lEX0xMVk1fVFJJUExFICJhcm12NXRlLW5v
bmUtbGludXgtYW5kcm9pZGVhYmkiICkKLSBzZXQoIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgImFy
bXY2IiApCi0gIyBuZWVkIGFsd2F5cyBmYWxsYmFjayB0byBvbGRlciBwbGF0Zm9ybQotIHNldCgg
QVJNRUFCSSB0cnVlICkKLWVsc2VpZiggQU5EUk9JRF9BQkkgU1RSRVFVQUwgImFybWVhYmktdjdh
IikKLSBzZXQoIEFSTUVBQklfVjdBIHRydWUgKQotIHNldCggQU5EUk9JRF9OREtfQUJJX05BTUUg
ImFybWVhYmktdjdhIiApCi0gc2V0KCBBTkRST0lEX0FSQ0hfTkFNRSAiYXJtIiApCi0gc2V0KCBB
TkRST0lEX0xMVk1fVFJJUExFICJhcm12Ny1ub25lLWxpbnV4LWFuZHJvaWRlYWJpIiApCi0gc2V0
KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJhcm12Ny1hIiApCi1lbHNlaWYoIEFORFJPSURfQUJJ
IFNUUkVRVUFMICJhcm1lYWJpLXY3YSB3aXRoIFZGUFYzIiApCi0gc2V0KCBBUk1FQUJJX1Y3QSB0
cnVlICkKLSBzZXQoIEFORFJPSURfTkRLX0FCSV9OQU1FICJhcm1lYWJpLXY3YSIgKQotIHNldCgg
QU5EUk9JRF9BUkNIX05BTUUgImFybSIgKQotIHNldCggQU5EUk9JRF9MTFZNX1RSSVBMRSAiYXJt
djctbm9uZS1saW51eC1hbmRyb2lkZWFiaSIgKQotIHNldCggQ01BS0VfU1lTVEVNX1BST0NFU1NP
UiAiYXJtdjctYSIgKQotIHNldCggVkZQVjMgdHJ1ZSApCi1lbHNlaWYoIEFORFJPSURfQUJJIFNU
UkVRVUFMICJhcm1lYWJpLXY3YSB3aXRoIE5FT04iICkKLSBzZXQoIEFSTUVBQklfVjdBIHRydWUg
KQotIHNldCggQU5EUk9JRF9OREtfQUJJX05BTUUgImFybWVhYmktdjdhIiApCi0gc2V0KCBBTkRS
T0lEX0FSQ0hfTkFNRSAiYXJtIiApCi0gc2V0KCBBTkRST0lEX0xMVk1fVFJJUExFICJhcm12Ny1u
b25lLWxpbnV4LWFuZHJvaWRlYWJpIiApCi0gc2V0KCBDTUFLRV9TWVNURU1fUFJPQ0VTU09SICJh
cm12Ny1hIiApCi0gc2V0KCBWRlBWMyB0cnVlICkKLSBzZXQoIE5FT04gdHJ1ZSApCi1lbHNlKCkK
LSBtZXNzYWdlKCBTRU5EX0VSUk9SICJVbmtub3duIEFORFJPSURfQUJJPVwiJHtBTkRST0lEX0FC
SX1cIiBpcyBzcGVjaWZpZWQuIiApCi1lbmRpZigpCi0KLWlmKCBDTUFLRV9CSU5BUllfRElSIEFO
RCBFWElTVFMgIiR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vQ01h
a2VTeXN0ZW0uY21ha2UiICkKLSAjIHJlYWxseSBkaXJ0eSBoYWNrCi0gIyBpdCBpcyBub3QgcG9z
c2libGUgdG8gY2hhbmdlIENNQUtFX1NZU1RFTV9QUk9DRVNTT1IgYWZ0ZXIgdGhlIGZpcnN0IHJ1
bi4uLgotIGZpbGUoIEFQUEVORCAiJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNfRElS
RUNUT1JZfS9DTWFrZVN5c3RlbS5jbWFrZSIgIlNFVChDTUFLRV9TWVNURU1fUFJPQ0VTU09SIFwi
JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfVwiKVxuIiApCi1lbmRpZigpCi0KLWlmKCBBTkRST0lE
X0FSQ0hfTkFNRSBTVFJFUVVBTCAiYXJtIiBBTkQgTk9UIEFSTUVBQklfVjYgKQotIF9fSU5JVF9W
QVJJQUJMRSggQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgVkFMVUVTIE9GRiApCi0gc2V0KCBBTkRS
T0lEX0ZPUkNFX0FSTV9CVUlMRCAke0FORFJPSURfRk9SQ0VfQVJNX0JVSUxEfSBDQUNIRSBCT09M
ICJVc2UgMzItYml0IEFSTSBpbnN0cnVjdGlvbnMgaW5zdGVhZCBvZiBUaHVtYi0xIiBGT1JDRSAp
Ci0gbWFya19hc19hZHZhbmNlZCggQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgKQotZWxzZSgpCi0g
dW5zZXQoIEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEIENBQ0hFICkKLWVuZGlmKCkKLQotIyBjaG9v
c2UgdG9vbGNoYWluCi1pZiggQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSApCi0gbGlzdCggRklORCBf
X2F2YWlsYWJsZVRvb2xjaGFpbnMgIiR7QU5EUk9JRF9UT09MQ0hBSU5fTkFNRX0iIF9fdG9vbGNo
YWluSWR4ICkKLSBpZiggX190b29sY2hhaW5JZHggRVFVQUwgLTEgKQotICBsaXN0KCBTT1JUIF9f
YXZhaWxhYmxlVG9vbGNoYWlucyApCi0gIHN0cmluZyggUkVQTEFDRSAiOyIgIlxuICAqICIgdG9v
bGNoYWluc19saXN0ICIke19fYXZhaWxhYmxlVG9vbGNoYWluc30iICkKLSAgc2V0KCB0b29sY2hh
aW5zX2xpc3QgIiAgKiAke3Rvb2xjaGFpbnNfbGlzdH0iKQotICBtZXNzYWdlKCBGQVRBTF9FUlJP
UiAiU3BlY2lmaWVkIHRvb2xjaGFpbiBcIiR7QU5EUk9JRF9UT09MQ0hBSU5fTkFNRX1cIiBpcyBt
aXNzaW5nIGluIHlvdXIgTkRLIG9yIGJyb2tlbi4gUGxlYXNlIHZlcmlmeSB0aGF0IHlvdXIgTkRL
IGlzIHdvcmtpbmcgb3Igc2VsZWN0IGFub3RoZXIgY29tcGlsZXIgdG9vbGNoYWluLgotVG8gY29u
ZmlndXJlIHRoZSB0b29sY2hhaW4gc2V0IENNYWtlIHZhcmlhYmxlIEFORFJPSURfVE9PTENIQUlO
X05BTUUgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuJHt0b29sY2hhaW5zX2xpc3R9
XG4iICkKLSBlbmRpZigpCi0gbGlzdCggR0VUIF9fYXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgJHtf
X3Rvb2xjaGFpbklkeH0gX190b29sY2hhaW5BcmNoICkKLSBpZiggTk9UIF9fdG9vbGNoYWluQXJj
aCBTVFJFUVVBTCBBTkRST0lEX0FSQ0hfTkFNRSApCi0gIG1lc3NhZ2UoIFNFTkRfRVJST1IgIlNl
bGVjdGVkIHRvb2xjaGFpbiBcIiR7QU5EUk9JRF9UT09MQ0hBSU5fTkFNRX1cIiBpcyBub3QgYWJs
ZSB0byBjb21waWxlIGJpbmFyaWVzIGZvciB0aGUgXCIke0FORFJPSURfQVJDSF9OQU1FfVwiIHBs
YXRmb3JtLiIgKQotIGVuZGlmKCkKLWVsc2UoKQotIHNldCggX190b29sY2hhaW5JZHggLTEgKQot
IHNldCggX19hcHBsaWNhYmxlVG9vbGNoYWlucyAiIiApCi0gc2V0KCBfX3Rvb2xjaGFpbk1heFZl
cnNpb24gIjAuMC4wIiApCi0gbGlzdCggTEVOR1RIIF9fYXZhaWxhYmxlVG9vbGNoYWlucyBfX2F2
YWlsYWJsZVRvb2xjaGFpbnNDb3VudCApCi0gbWF0aCggRVhQUiBfX2F2YWlsYWJsZVRvb2xjaGFp
bnNDb3VudCAiJHtfX2F2YWlsYWJsZVRvb2xjaGFpbnNDb3VudH0tMSIgKQotIGZvcmVhY2goIF9f
aWR4IFJBTkdFICR7X19hdmFpbGFibGVUb29sY2hhaW5zQ291bnR9ICkKLSAgbGlzdCggR0VUIF9f
YXZhaWxhYmxlVG9vbGNoYWluQXJjaHMgJHtfX2lkeH0gX190b29sY2hhaW5BcmNoICkKLSAgaWYo
IF9fdG9vbGNoYWluQXJjaCBTVFJFUVVBTCBBTkRST0lEX0FSQ0hfTkFNRSApCi0gICBsaXN0KCBH
RVQgX19hdmFpbGFibGVUb29sY2hhaW5Db21waWxlclZlcnNpb25zICR7X19pZHh9IF9fdG9vbGNo
YWluVmVyc2lvbiApCi0gICBzdHJpbmcoIFJFUExBQ0UgIngiICI5OSIgX190b29sY2hhaW5WZXJz
aW9uICIke19fdG9vbGNoYWluVmVyc2lvbn0iKQotICAgaWYoIF9fdG9vbGNoYWluVmVyc2lvbiBW
RVJTSU9OX0dSRUFURVIgX190b29sY2hhaW5NYXhWZXJzaW9uICkKLSAgICBzZXQoIF9fdG9vbGNo
YWluTWF4VmVyc2lvbiAiJHtfX3Rvb2xjaGFpblZlcnNpb259IiApCi0gICAgc2V0KCBfX3Rvb2xj
aGFpbklkeCAke19faWR4fSApCi0gICBlbmRpZigpCi0gIGVuZGlmKCkKLSBlbmRmb3JlYWNoKCkK
LSB1bnNldCggX19hdmFpbGFibGVUb29sY2hhaW5zQ291bnQgKQotIHVuc2V0KCBfX3Rvb2xjaGFp
bk1heFZlcnNpb24gKQotIHVuc2V0KCBfX3Rvb2xjaGFpblZlcnNpb24gKQotZW5kaWYoKQotdW5z
ZXQoIF9fdG9vbGNoYWluQXJjaCApCi1pZiggX190b29sY2hhaW5JZHggRVFVQUwgLTEgKQotIG1l
c3NhZ2UoIEZBVEFMX0VSUk9SICJObyBvbmUgb2YgYXZhaWxhYmxlIGNvbXBpbGVyIHRvb2xjaGFp
bnMgaXMgYWJsZSB0byBjb21waWxlIGZvciAke0FORFJPSURfQVJDSF9OQU1FfSBwbGF0Zm9ybS4i
ICkKLWVuZGlmKCkKLWxpc3QoIEdFVCBfX2F2YWlsYWJsZVRvb2xjaGFpbnMgJHtfX3Rvb2xjaGFp
bklkeH0gQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSApCi1saXN0KCBHRVQgX19hdmFpbGFibGVUb29s
Y2hhaW5NYWNoaW5lcyAke19fdG9vbGNoYWluSWR4fSBBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5F
X05BTUUgKQotbGlzdCggR0VUIF9fYXZhaWxhYmxlVG9vbGNoYWluQ29tcGlsZXJWZXJzaW9ucyAk
e19fdG9vbGNoYWluSWR4fSBBTkRST0lEX0NPTVBJTEVSX1ZFUlNJT04gKQotCi11bnNldCggX190
b29sY2hhaW5JZHggKQotdW5zZXQoIF9fYXZhaWxhYmxlVG9vbGNoYWlucyApCi11bnNldCggX19h
dmFpbGFibGVUb29sY2hhaW5NYWNoaW5lcyApCi11bnNldCggX19hdmFpbGFibGVUb29sY2hhaW5B
cmNocyApCi11bnNldCggX19hdmFpbGFibGVUb29sY2hhaW5Db21waWxlclZlcnNpb25zICkKLQot
IyBjaG9vc2UgbmF0aXZlIEFQSSBsZXZlbAotX19JTklUX1ZBUklBQkxFKCBBTkRST0lEX05BVElW
RV9BUElfTEVWRUwgRU5WX0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTCBBTkRST0lEX0FQSV9MRVZF
TCBFTlZfQU5EUk9JRF9BUElfTEVWRUwgQU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTl9BUElf
TEVWRUwgQU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUxfJHtBTkRST0lEX0FSQ0hfTkFNRX0g
QU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUwgKQotc3RyaW5nKCBSRVBMQUNFICJhbmRyb2lk
LSIgIiIgQU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMICIke0FORFJPSURfTkFUSVZFX0FQSV9MRVZF
TH0iICkKLXN0cmluZyggU1RSSVAgIiR7QU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMfSIgQU5EUk9J
RF9OQVRJVkVfQVBJX0xFVkVMICkKLSMgYWRqdXN0IEFQSSBsZXZlbAotc2V0KCBfX3JlYWxfYXBp
X2xldmVsICR7QU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUxfJHtBTkRST0lEX0FSQ0hfTkFN
RX19ICkKLWZvcmVhY2goIF9fbGV2ZWwgJHtBTkRST0lEX1NVUFBPUlRFRF9OQVRJVkVfQVBJX0xF
VkVMU30gKQotIGlmKCAoX19sZXZlbCBMRVNTIEFORFJPSURfTkFUSVZFX0FQSV9MRVZFTCBPUiBf
X2xldmVsIFNUUkVRVUFMIEFORFJPSURfTkFUSVZFX0FQSV9MRVZFTCkgQU5EIE5PVCBfX2xldmVs
IExFU1MgX19yZWFsX2FwaV9sZXZlbCApCi0gIHNldCggX19yZWFsX2FwaV9sZXZlbCAke19fbGV2
ZWx9ICkKLSBlbmRpZigpCi1lbmRmb3JlYWNoKCkKLWlmKCBfX3JlYWxfYXBpX2xldmVsIEFORCBO
T1QgQU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMIFNUUkVRVUFMIF9fcmVhbF9hcGlfbGV2ZWwgKQot
IG1lc3NhZ2UoIFNUQVRVUyAiQWRqdXN0aW5nIEFuZHJvaWQgQVBJIGxldmVsICdhbmRyb2lkLSR7
QU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMfScgdG8gJ2FuZHJvaWQtJHtfX3JlYWxfYXBpX2xldmVs
fSciKQotIHNldCggQU5EUk9JRF9OQVRJVkVfQVBJX0xFVkVMICR7X19yZWFsX2FwaV9sZXZlbH0g
KQotZW5kaWYoKQotdW5zZXQoX19yZWFsX2FwaV9sZXZlbCkKLSMgdmFsaWRhdGUKLWxpc3QoIEZJ
TkQgQU5EUk9JRF9TVVBQT1JURURfTkFUSVZFX0FQSV9MRVZFTFMgIiR7QU5EUk9JRF9OQVRJVkVf
QVBJX0xFVkVMfSIgX19sZXZlbElkeCApCi1pZiggX19sZXZlbElkeCBFUVVBTCAtMSApCi0gbWVz
c2FnZSggU0VORF9FUlJPUiAiU3BlY2lmaWVkIEFuZHJvaWQgbmF0aXZlIEFQSSBsZXZlbCAnYW5k
cm9pZC0ke0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTH0nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91
ciBOREsvdG9vbGNoYWluLiIgKQotZWxzZSgpCi0gaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsg
KQotICBfX0RFVEVDVF9OQVRJVkVfQVBJX0xFVkVMKCBfX3JlYWxBcGlMZXZlbCAiJHtBTkRST0lE
X05ES30vcGxhdGZvcm1zL2FuZHJvaWQtJHtBTkRST0lEX05BVElWRV9BUElfTEVWRUx9L2FyY2gt
JHtBTkRST0lEX0FSQ0hfTkFNRX0vdXNyL2luY2x1ZGUvYW5kcm9pZC9hcGktbGV2ZWwuaCIgKQot
ICBpZiggTk9UIF9fcmVhbEFwaUxldmVsIEVRVUFMIEFORFJPSURfTkFUSVZFX0FQSV9MRVZFTCBB
TkQgTk9UIF9fcmVhbEFwaUxldmVsIEdSRUFURVIgOTAwMCApCi0gICBtZXNzYWdlKCBTRU5EX0VS
Uk9SICJTcGVjaWZpZWQgQW5kcm9pZCBBUEkgbGV2ZWwgKCR7QU5EUk9JRF9OQVRJVkVfQVBJX0xF
VkVMfSkgZG9lcyBub3QgbWF0Y2ggdG8gdGhlIGxldmVsIGZvdW5kICgke19fcmVhbEFwaUxldmVs
fSkuIFByb2JhYmx5IHlvdXIgY29weSBvZiBOREsgaXMgYnJva2VuLiIgKQotICBlbmRpZigpCi0g
IHVuc2V0KCBfX3JlYWxBcGlMZXZlbCApCi0gZW5kaWYoKQotIHNldCggQU5EUk9JRF9OQVRJVkVf
QVBJX0xFVkVMICIke0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTH0iIENBQ0hFIFNUUklORyAiQW5k
cm9pZCBBUEkgbGV2ZWwgZm9yIG5hdGl2ZSBjb2RlIiBGT1JDRSApCi0gc2V0KCBDTUFLRV9BTkRS
T0lEX0FQSSAke0FORFJPSURfTkFUSVZFX0FQSV9MRVZFTH0gKQotIGlmKCBDTUFLRV9WRVJTSU9O
IFZFUlNJT05fR1JFQVRFUiAiMi44IiApCi0gIGxpc3QoIFNPUlQgQU5EUk9JRF9TVVBQT1JURURf
TkFUSVZFX0FQSV9MRVZFTFMgKQotICBzZXRfcHJvcGVydHkoIENBQ0hFIEFORFJPSURfTkFUSVZF
X0FQSV9MRVZFTCBQUk9QRVJUWSBTVFJJTkdTICR7QU5EUk9JRF9TVVBQT1JURURfTkFUSVZFX0FQ
SV9MRVZFTFN9ICkKLSBlbmRpZigpCi1lbmRpZigpCi11bnNldCggX19sZXZlbElkeCApCi0KLQot
IyByZW1lbWJlciB0YXJnZXQgQUJJCi1zZXQoIEFORFJPSURfQUJJICIke0FORFJPSURfQUJJfSIg
Q0FDSEUgU1RSSU5HICJUaGUgdGFyZ2V0IEFCSSBmb3IgQW5kcm9pZC4gSWYgYXJtLCB0aGVuIGFy
bWVhYmktdjdhIGlzIHJlY29tbWVuZGVkIGZvciBoYXJkd2FyZSBmbG9hdGluZyBwb2ludC4iIEZP
UkNFICkKLWlmKCBDTUFLRV9WRVJTSU9OIFZFUlNJT05fR1JFQVRFUiAiMi44IiApCi0gbGlzdCgg
U09SVCBBTkRST0lEX1NVUFBPUlRFRF9BQklTXyR7QU5EUk9JRF9BUkNIX05BTUV9ICkKLSBzZXRf
cHJvcGVydHkoIENBQ0hFIEFORFJPSURfQUJJIFBST1BFUlRZIFNUUklOR1MgJHtBTkRST0lEX1NV
UFBPUlRFRF9BQklTXyR7QU5EUk9JRF9BUkNIX05BTUV9fSApCi1lbmRpZigpCi0KLQotIyBydW50
aW1lIGNob2ljZSAoU1RMLCBydHRpLCBleGNlcHRpb25zKQotaWYoIE5PVCBBTkRST0lEX1NUTCAp
Ci0gIHNldCggQU5EUk9JRF9TVEwgZ251c3RsX3N0YXRpYyApCi1lbmRpZigpCi1zZXQoIEFORFJP
SURfU1RMICIke0FORFJPSURfU1RMfSIgQ0FDSEUgU1RSSU5HICJDKysgcnVudGltZSIgKQotc2V0
KCBBTkRST0lEX1NUTF9GT1JDRV9GRUFUVVJFUyBPTiBDQUNIRSBCT09MICJhdXRvbWF0aWNhbGx5
IGNvbmZpZ3VyZSBydHRpIGFuZCBleGNlcHRpb25zIHN1cHBvcnQgYmFzZWQgb24gQysrIHJ1bnRp
bWUiICkKLW1hcmtfYXNfYWR2YW5jZWQoIEFORFJPSURfU1RMIEFORFJPSURfU1RMX0ZPUkNFX0ZF
QVRVUkVTICkKLQotaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgKQotIGlmKCBOT1QgIiR7QU5E
Uk9JRF9TVEx9IiBNQVRDSEVTICJeKG5vbmV8c3lzdGVtfHN5c3RlbV9yZXxnYWJpXFwrXFwrX3N0
YXRpY3xnYWJpXFwrXFwrX3NoYXJlZHxzdGxwb3J0X3N0YXRpY3xzdGxwb3J0X3NoYXJlZHxnbnVz
dGxfc3RhdGljfGdudXN0bF9zaGFyZWQpJCIpCi0gIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJBTkRS
T0lEX1NUTCBpcyBzZXQgdG8gaW52YWxpZCB2YWx1ZSBcIiR7QU5EUk9JRF9TVEx9XCIuCi1UaGUg
cG9zc2libGUgdmFsdWVzIGFyZToKLSAgbm9uZSAgICAgICAgICAgLT4gRG8gbm90IGNvbmZpZ3Vy
ZSB0aGUgcnVudGltZS4KLSAgc3lzdGVtICAgICAgICAgLT4gVXNlIHRoZSBkZWZhdWx0IG1pbmlt
YWwgc3lzdGVtIEMrKyBydW50aW1lIGxpYnJhcnkuCi0gIHN5c3RlbV9yZSAgICAgIC0+IFNhbWUg
YXMgc3lzdGVtIGJ1dCB3aXRoIHJ0dGkgYW5kIGV4Y2VwdGlvbnMuCi0gIGdhYmkrK19zdGF0aWMg
IC0+IFVzZSB0aGUgR0FiaSsrIHJ1bnRpbWUgYXMgYSBzdGF0aWMgbGlicmFyeS4KLSAgZ2FiaSsr
X3NoYXJlZCAgLT4gVXNlIHRoZSBHQWJpKysgcnVudGltZSBhcyBhIHNoYXJlZCBsaWJyYXJ5Lgot
ICBzdGxwb3J0X3N0YXRpYyAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBhIHN0YXRpYyBs
aWJyYXJ5LgotICBzdGxwb3J0X3NoYXJlZCAtPiBVc2UgdGhlIFNUTHBvcnQgcnVudGltZSBhcyBh
IHNoYXJlZCBsaWJyYXJ5LgotICBnbnVzdGxfc3RhdGljICAtPiAoZGVmYXVsdCkgVXNlIHRoZSBH
TlUgU1RMIGFzIGEgc3RhdGljIGxpYnJhcnkuCi0gIGdudXN0bF9zaGFyZWQgIC0+IFVzZSB0aGUg
R05VIFNUTCBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotIiApCi0gZW5kaWYoKQotZWxzZWlmKCBCVUlM
RF9XSVRIX1NUQU5EQUxPTkVfVE9PTENIQUlOICkKLSBpZiggTk9UICIke0FORFJPSURfU1RMfSIg
TUFUQ0hFUyAiXihub25lfGdudXN0bF9zdGF0aWN8Z251c3RsX3NoYXJlZCkkIikKLSAgbWVzc2Fn
ZSggRkFUQUxfRVJST1IgIkFORFJPSURfU1RMIGlzIHNldCB0byBpbnZhbGlkIHZhbHVlIFwiJHtB
TkRST0lEX1NUTH1cIi4KLVRoZSBwb3NzaWJsZSB2YWx1ZXMgYXJlOgotICBub25lICAgICAgICAg
ICAtPiBEbyBub3QgY29uZmlndXJlIHRoZSBydW50aW1lLgotICBnbnVzdGxfc3RhdGljICAtPiAo
ZGVmYXVsdCkgVXNlIHRoZSBHTlUgU1RMIGFzIGEgc3RhdGljIGxpYnJhcnkuCi0gIGdudXN0bF9z
aGFyZWQgIC0+IFVzZSB0aGUgR05VIFNUTCBhcyBhIHNoYXJlZCBsaWJyYXJ5LgotIiApCi0gZW5k
aWYoKQotZW5kaWYoKQotCi11bnNldCggQU5EUk9JRF9SVFRJICkKLXVuc2V0KCBBTkRST0lEX0VY
Q0VQVElPTlMgKQotdW5zZXQoIEFORFJPSURfU1RMX0lOQ0xVREVfRElSUyApCi11bnNldCggX19s
aWJzdGwgKQotdW5zZXQoIF9fbGlic3VwY3h4ICkKLQotaWYoIE5PVCBfQ01BS0VfSU5fVFJZX0NP
TVBJTEUgQU5EIEFORFJPSURfTkRLX1JFTEVBU0UgU1RSRVFVQUwgInI3YiIgQU5EIEFSTUVBQklf
VjdBIEFORCBOT1QgVkZQVjMgQU5EIEFORFJPSURfU1RMIE1BVENIRVMgImdudXN0bCIgKQotIG1l
c3NhZ2UoIFdBUk5JTkcgICJUaGUgR05VIFNUTCBhcm1lYWJpLXY3YSBiaW5hcmllcyBmcm9tIE5E
SyByN2IgY2FuIGNyYXNoIG5vbi1ORU9OIGRldmljZXMuIFRoZSBmaWxlcyBwcm92aWRlZCB3aXRo
IE5ESyByN2Igd2VyZSBub3QgY29uZmlndXJlZCBwcm9wZXJseSwgcmVzdWx0aW5nIGluIGNyYXNo
ZXMgb24gVGVncmEyLWJhc2VkIGRldmljZXMgYW5kIG90aGVycyB3aGVuIHRyeWluZyB0byB1c2Ug
Y2VydGFpbiBmbG9hdGluZy1wb2ludCBmdW5jdGlvbnMgKGUuZy4sIGNvc2YsIHNpbmYsIGV4cGYp
LgotWW91IGFyZSBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBzd2l0Y2ggdG8gYW5vdGhlciBOREsg
cmVsZWFzZS4KLSIgKQotZW5kaWYoKQotCi1pZiggTk9UIF9DTUFLRV9JTl9UUllfQ09NUElMRSBB
TkQgWDg2IEFORCBBTkRST0lEX1NUTCBNQVRDSEVTICJnbnVzdGwiIEFORCBBTkRST0lEX05ES19S
RUxFQVNFIFNUUkVRVUFMICJyNiIgKQotICBtZXNzYWdlKCBXQVJOSU5HICAiVGhlIHg4NiBzeXN0
ZW0gaGVhZGVyIGZpbGUgZnJvbSBOREsgcjYgaGFzIGluY29ycmVjdCBkZWZpbml0aW9uIGZvciBw
dHJkaWZmX3QuIFlvdSBhcmUgcmVjb21tZW5kZWQgdG8gdXBncmFkZSB0byBhIG5ld2VyIE5ESyBy
ZWxlYXNlIG9yIG1hbnVhbGx5IHBhdGNoIHRoZSBoZWFkZXI6Ci1TZWUgaHR0cHM6Ly9hbmRyb2lk
Lmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZGV2ZWxvcG1lbnQuZ2l0IGY5MDdmNGY5ZDRlNTZj
Y2M4MDkzZGY2ZmVlNTQ0NTRiOGJjYWI2YzIKLSAgZGlmZiAtLWdpdCBhL25kay9wbGF0Zm9ybXMv
YW5kcm9pZC05L2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL25kay9wbGF0Zm9y
bXMvYW5kcm9pZC05L2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaAotICBpbmRleCA1
ZTI4YzY0Li42NTg5MmExIDEwMDY0NAotICAtLS0gYS9uZGsvcGxhdGZvcm1zL2FuZHJvaWQtOS9h
cmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKLSAgKysrIGIvbmRrL3BsYXRmb3Jtcy9h
bmRyb2lkLTkvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCi0gIEBAIC01MSw3ICs1
MSwxMSBAQCB0eXBlZGVmIGxvbmcgaW50ICAgICAgIHNzaXplX3Q7Ci0gICAjZW5kaWYKLSAgICNp
Zm5kZWYgX1BUUkRJRkZfVAotICAgI2RlZmluZSBfUFRSRElGRl9UCi0gIC10eXBlZGVmIGxvbmcg
ICAgICAgICAgIHB0cmRpZmZfdDsKLSAgKyMgIGlmZGVmIF9fQU5EUk9JRF9fCi0gICsgICAgIHR5
cGVkZWYgaW50ICAgICAgICAgICAgcHRyZGlmZl90OwotICArIyAgZWxzZQotICArICAgICB0eXBl
ZGVmIGxvbmcgICAgICAgICAgIHB0cmRpZmZfdDsKLSAgKyMgIGVuZGlmCi0gICAjZW5kaWYKLSIg
KQotZW5kaWYoKQotCi0KLSMgc2V0dXAgcGF0aHMgYW5kIFNUTCBmb3Igc3RhbmRhbG9uZSB0b29s
Y2hhaW4KLWlmKCBCVUlMRF9XSVRIX1NUQU5EQUxPTkVfVE9PTENIQUlOICkKLSBzZXQoIEFORFJP
SURfVE9PTENIQUlOX1JPT1QgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0iICkKLSBz
ZXQoIEFORFJPSURfQ0xBTkdfVE9PTENIQUlOX1JPT1QgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RP
T0xDSEFJTn0iICkKLSBzZXQoIEFORFJPSURfU1lTUk9PVCAiJHtBTkRST0lEX1NUQU5EQUxPTkVf
VE9PTENIQUlOfS9zeXNyb290IiApCi0KLSBpZiggTk9UIEFORFJPSURfU1RMIFNUUkVRVUFMICJu
b25lIiApCi0gIHNldCggQU5EUk9JRF9TVExfSU5DTFVERV9ESVJTICIke0FORFJPSURfU1RBTkRB
TE9ORV9UT09MQ0hBSU59L2luY2x1ZGUvYysrLyR7QU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OfSIg
KQotICBpZiggTk9UIEVYSVNUUyAiJHtBTkRST0lEX1NUTF9JTkNMVURFX0RJUlN9IiApCi0gICAj
IG9sZCBsb2NhdGlvbiAoIHByZSByOGMgKQotICAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJ
UlMgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0vJHtBTkRST0lEX1RPT0xDSEFJTl9N
QUNISU5FX05BTUV9L2luY2x1ZGUvYysrLyR7QU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OfSIgKQot
ICBlbmRpZigpCi0gIGlmKCBBUk1FQUJJX1Y3QSBBTkQgRVhJU1RTICIke0FORFJPSURfU1RMX0lO
Q0xVREVfRElSU30vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9LyR7Q01BS0VfU1lT
VEVNX1BST0NFU1NPUn0vYml0cyIgKQotICAgbGlzdCggQVBQRU5EIEFORFJPSURfU1RMX0lOQ0xV
REVfRElSUyAiJHtBTkRST0lEX1NUTF9JTkNMVURFX0RJUlN9LyR7QU5EUk9JRF9UT09MQ0hBSU5f
TUFDSElORV9OQU1FfS8ke0NNQUtFX1NZU1RFTV9QUk9DRVNTT1J9IiApCi0gIGVsc2VpZiggQVJN
RUFCSSBBTkQgTk9UIEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEIEFORCBFWElTVFMgIiR7QU5EUk9J
RF9TVExfSU5DTFVERV9ESVJTfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vdGh1
bWIvYml0cyIgKQotICAgbGlzdCggQVBQRU5EIEFORFJPSURfU1RMX0lOQ0xVREVfRElSUyAiJHtB
TkRST0lEX1NUTF9JTkNMVURFX0RJUlN9LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1F
fS90aHVtYiIgKQotICBlbHNlKCkKLSAgIGxpc3QoIEFQUEVORCBBTkRST0lEX1NUTF9JTkNMVURF
X0RJUlMgIiR7QU5EUk9JRF9TVExfSU5DTFVERV9ESVJTfS8ke0FORFJPSURfVE9PTENIQUlOX01B
Q0hJTkVfTkFNRX0iICkKLSAgZW5kaWYoKQotICAjIGFsd2F5cyBzZWFyY2ggc3RhdGljIEdOVSBT
VEwgdG8gZ2V0IHRoZSBsb2NhdGlvbiBvZiBsaWJzdXBjKysuYQotICBpZiggQVJNRUFCSV9WN0Eg
QU5EIE5PVCBBTkRST0lEX0ZPUkNFX0FSTV9CVUlMRCBBTkQgRVhJU1RTICIke0FORFJPSURfU1RB
TkRBTE9ORV9UT09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIv
JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfS90aHVtYi9saWJzdGRjKysuYSIgKQotICAgc2V0KCBf
X2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9PTENI
QUlOX01BQ0hJTkVfTkFNRX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0vdGh1bWIiICkK
LSAgZWxzZWlmKCBBUk1FQUJJX1Y3QSBBTkQgRVhJU1RTICIke0FORFJPSURfU1RBTkRBTE9ORV9U
T09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIvJHtDTUFLRV9T
WVNURU1fUFJPQ0VTU09SfS9saWJzdGRjKysuYSIgKQotICAgc2V0KCBfX2xpYnN0bCAiJHtBTkRS
T0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFN
RX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0iICkKLSAgZWxzZWlmKCBBUk1FQUJJIEFO
RCBOT1QgQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgQU5EIEVYSVNUUyAiJHtBTkRST0lEX1NUQU5E
QUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliL3Ro
dW1iL2xpYnN0ZGMrKy5hIiApCi0gICBzZXQoIF9fbGlic3RsICIke0FORFJPSURfU1RBTkRBTE9O
RV9UT09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIvdGh1bWIi
ICkKLSAgZWxzZWlmKCBFWElTVFMgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RPT0xDSEFJTn0vJHtB
TkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9L2xpYi9saWJzdGRjKysuYSIgKQotICAgc2V0
KCBfX2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9P
TENIQUlOX01BQ0hJTkVfTkFNRX0vbGliIiApCi0gIGVuZGlmKCkKLSAgaWYoIF9fbGlic3RsICkK
LSAgIHNldCggX19saWJzdXBjeHggIiR7X19saWJzdGx9L2xpYnN1cGMrKy5hIiApCi0gICBzZXQo
IF9fbGlic3RsICAgICIke19fbGlic3RsfS9saWJzdGRjKysuYSIgKQotICBlbmRpZigpCi0gIGlm
KCBOT1QgRVhJU1RTICIke19fbGlic3VwY3h4fSIgKQotICAgbWVzc2FnZSggRkFUQUxfRVJST1Ig
IlRoZSByZXF1aXJlZCBsaWJzdGRzdXBjKysuYSBpcyBtaXNzaW5nIGluIHlvdXIgc3RhbmRhbG9u
ZSB0b29sY2hhaW4uCi0gVXN1YWxseSBpdCBoYXBwZW5zIGJlY2F1c2Ugb2YgYnVnIGluIG1ha2Ut
c3RhbmRhbG9uZS10b29sY2hhaW4uc2ggc2NyaXB0IGZyb20gTkRLIHI3LCByN2IgYW5kIHI3Yy4K
LSBZb3UgbmVlZCB0byBlaXRoZXIgdXBncmFkZSB0byBuZXdlciBOREsgb3IgbWFudWFsbHkgY29w
eQotICAgICAkQU5EUk9JRF9OREsvc291cmNlcy9jeHgtc3RsL2dudS1saWJzdGRjKysvbGlicy8k
e0FORFJPSURfTkRLX0FCSV9OQU1FfS9saWJzdXBjKysuYQotIHRvCi0gICAgICR7X19saWJzdXBj
eHh9Ci0gICAiICkKLSAgZW5kaWYoKQotICBpZiggQU5EUk9JRF9TVEwgU1RSRVFVQUwgImdudXN0
bF9zaGFyZWQiICkKLSAgIGlmKCBBUk1FQUJJX1Y3QSBBTkQgRVhJU1RTICIke0FORFJPSURfU1RB
TkRBTE9ORV9UT09MQ0hBSU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIv
JHtDTUFLRV9TWVNURU1fUFJPQ0VTU09SfS9saWJnbnVzdGxfc2hhcmVkLnNvIiApCi0gICAgc2V0
KCBfX2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8ke0FORFJPSURfVE9P
TENIQUlOX01BQ0hJTkVfTkFNRX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0vbGliZ251
c3RsX3NoYXJlZC5zbyIgKQotICAgZWxzZWlmKCBBUk1FQUJJIEFORCBOT1QgQU5EUk9JRF9GT1JD
RV9BUk1fQlVJTEQgQU5EIEVYSVNUUyAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9PTENIQUlOfS8k
e0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliL3RodW1iL2xpYmdudXN0bF9zaGFy
ZWQuc28iICkKLSAgICBzZXQoIF9fbGlic3RsICIke0FORFJPSURfU1RBTkRBTE9ORV9UT09MQ0hB
SU59LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS9saWIvdGh1bWIvbGliZ251c3Rs
X3NoYXJlZC5zbyIgKQotICAgZWxzZWlmKCBFWElTVFMgIiR7QU5EUk9JRF9TVEFOREFMT05FX1RP
T0xDSEFJTn0vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9L2xpYi9saWJnbnVzdGxf
c2hhcmVkLnNvIiApCi0gICAgc2V0KCBfX2xpYnN0bCAiJHtBTkRST0lEX1NUQU5EQUxPTkVfVE9P
TENIQUlOfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliL2xpYmdudXN0bF9z
aGFyZWQuc28iICkKLSAgIGVuZGlmKCkKLSAgZW5kaWYoKQotIGVuZGlmKCkKLWVuZGlmKCkKLQot
IyBjbGFuZwotaWYoICIke0FORFJPSURfVE9PTENIQUlOX05BTUV9IiBTVFJFUVVBTCAic3RhbmRh
bG9uZS1jbGFuZyIgKQotIHNldCggQU5EUk9JRF9DT01QSUxFUl9JU19DTEFORyAxICkKLSBleGVj
dXRlX3Byb2Nlc3MoIENPTU1BTkQgIiR7QU5EUk9JRF9DTEFOR19UT09MQ0hBSU5fUk9PVH0vYmlu
L2NsYW5nJHtUT09MX09TX1NVRkZJWH0iIC0tdmVyc2lvbiBPVVRQVVRfVkFSSUFCTEUgQU5EUk9J
RF9DTEFOR19WRVJTSU9OIE9VVFBVVF9TVFJJUF9UUkFJTElOR19XSElURVNQQUNFICkKLSBzdHJp
bmcoIFJFR0VYIE1BVENIICJbMC05XStbLl1bMC05XSsiIEFORFJPSURfQ0xBTkdfVkVSU0lPTiAi
JHtBTkRST0lEX0NMQU5HX1ZFUlNJT059IikKLWVsc2VpZiggIiR7QU5EUk9JRF9UT09MQ0hBSU5f
TkFNRX0iIE1BVENIRVMgIi1jbGFuZzNbLl1bMC05XT8kIiApCi0gc3RyaW5nKCBSRUdFWCBNQVRD
SCAiM1suXVswLTldJCIgQU5EUk9JRF9DTEFOR19WRVJTSU9OICIke0FORFJPSURfVE9PTENIQUlO
X05BTUV9IikKLSBzdHJpbmcoIFJFR0VYIFJFUExBQ0UgIi1jbGFuZyR7QU5EUk9JRF9DTEFOR19W
RVJTSU9OfSQiICItJHtBTkRST0lEX0NPTVBJTEVSX1ZFUlNJT059IiBBTkRST0lEX0dDQ19UT09M
Q0hBSU5fTkFNRSAiJHtBTkRST0lEX1RPT0xDSEFJTl9OQU1FfSIgKQotIGlmKCBOT1QgRVhJU1RT
ICIke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0vbGx2bS0ke0FORFJPSURfQ0xBTkdfVkVS
U0lPTn0ke0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSH0vYmluL2NsYW5nJHtUT09MX09T
X1NVRkZJWH0iICkKLSAgbWVzc2FnZSggRkFUQUxfRVJST1IgIkNvdWxkIG5vdCBmaW5kIHRoZSBD
bGFuZyBjb21waWxlciBkcml2ZXIiICkKLSBlbmRpZigpCi0gc2V0KCBBTkRST0lEX0NPTVBJTEVS
X0lTX0NMQU5HIDEgKQotIHNldCggQU5EUk9JRF9DTEFOR19UT09MQ0hBSU5fUk9PVCAiJHtBTkRS
T0lEX05ES19UT09MQ0hBSU5TX1BBVEh9L2xsdm0tJHtBTkRST0lEX0NMQU5HX1ZFUlNJT059JHtB
TkRST0lEX05ES19UT09MQ0hBSU5TX1NVQlBBVEh9IiApCi1lbHNlKCkKLSBzZXQoIEFORFJPSURf
R0NDX1RPT0xDSEFJTl9OQU1FICIke0FORFJPSURfVE9PTENIQUlOX05BTUV9IiApCi0gdW5zZXQo
IEFORFJPSURfQ09NUElMRVJfSVNfQ0xBTkcgQ0FDSEUgKQotZW5kaWYoKQotCi1zdHJpbmcoIFJF
UExBQ0UgIi4iICIiIF9jbGFuZ19uYW1lICJjbGFuZyR7QU5EUk9JRF9DTEFOR19WRVJTSU9OfSIg
KQotaWYoIE5PVCBFWElTVFMgIiR7QU5EUk9JRF9DTEFOR19UT09MQ0hBSU5fUk9PVH0vYmluLyR7
X2NsYW5nX25hbWV9JHtUT09MX09TX1NVRkZJWH0iICkKLSBzZXQoIF9jbGFuZ19uYW1lICJjbGFu
ZyIgKQotZW5kaWYoKQotCi0KLSMgc2V0dXAgcGF0aHMgYW5kIFNUTCBmb3IgTkRLCi1pZiggQlVJ
TERfV0lUSF9BTkRST0lEX05ESyApCi0gc2V0KCBBTkRST0lEX1RPT0xDSEFJTl9ST09UICIke0FO
RFJPSURfTkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtBTkRST0lEX0dDQ19UT09MQ0hBSU5fTkFNRX0k
e0FORFJPSURfTkRLX1RPT0xDSEFJTlNfU1VCUEFUSH0iICkKLSBzZXQoIEFORFJPSURfU1lTUk9P
VCAiJHtBTkRST0lEX05ES30vcGxhdGZvcm1zL2FuZHJvaWQtJHtBTkRST0lEX05BVElWRV9BUElf
TEVWRUx9L2FyY2gtJHtBTkRST0lEX0FSQ0hfTkFNRX0iICkKLQotIGlmKCBBTkRST0lEX1NUTCBT
VFJFUVVBTCAibm9uZSIgKQotICAjIGRvIG5vdGhpbmcKLSBlbHNlaWYoIEFORFJPSURfU1RMIFNU
UkVRVUFMICJzeXN0ZW0iICkKLSAgc2V0KCBBTkRST0lEX1JUVEkgICAgICAgICAgICAgT0ZGICkK
LSAgc2V0KCBBTkRST0lEX0VYQ0VQVElPTlMgICAgICAgT0ZGICkKLSAgc2V0KCBBTkRST0lEX1NU
TF9JTkNMVURFX0RJUlMgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9zeXN0ZW0vaW5j
bHVkZSIgKQotIGVsc2VpZiggQU5EUk9JRF9TVEwgU1RSRVFVQUwgInN5c3RlbV9yZSIgKQotICBz
ZXQoIEFORFJPSURfUlRUSSAgICAgICAgICAgICBPTiApCi0gIHNldCggQU5EUk9JRF9FWENFUFRJ
T05TICAgICAgIE9OICkKLSAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7QU5EUk9J
RF9OREt9L3NvdXJjZXMvY3h4LXN0bC9zeXN0ZW0vaW5jbHVkZSIgKQotIGVsc2VpZiggQU5EUk9J
RF9TVEwgTUFUQ0hFUyAiZ2FiaSIgKQotICBpZiggQU5EUk9JRF9OREtfUkVMRUFTRV9OVU0gTEVT
UyA3MDAwICkgIyBiZWZvcmUgcjcKLSAgIG1lc3NhZ2UoIEZBVEFMX0VSUk9SICJnYWJpKysgaXMg
bm90IGF2YWlsYWJsZSBpbiB5b3VyIE5ESy4gWW91IGhhdmUgdG8gdXBncmFkZSB0byBOREsgcjcg
b3IgbmV3ZXIgdG8gdXNlIGdhYmkrKy4iKQotICBlbmRpZigpCi0gIHNldCggQU5EUk9JRF9SVFRJ
ICAgICAgICAgICAgIE9OICkKLSAgc2V0KCBBTkRST0lEX0VYQ0VQVElPTlMgICAgICAgT0ZGICkK
LSAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMv
Y3h4LXN0bC9nYWJpKysvaW5jbHVkZSIgKQotICBzZXQoIF9fbGlic3RsICAgICAgICAgICAgICAg
ICAiJHtBTkRST0lEX05ES30vc291cmNlcy9jeHgtc3RsL2dhYmkrKy9saWJzLyR7QU5EUk9JRF9O
REtfQUJJX05BTUV9L2xpYmdhYmkrK19zdGF0aWMuYSIgKQotIGVsc2VpZiggQU5EUk9JRF9TVEwg
TUFUQ0hFUyAic3RscG9ydCIgKQotICBpZiggTk9UIEFORFJPSURfTkRLX1JFTEVBU0VfTlVNIExF
U1MgODAwNCApICMgYmVmb3JlIHI4ZAotICAgc2V0KCBBTkRST0lEX0VYQ0VQVElPTlMgICAgICAg
T04gKQotICBlbHNlKCkKLSAgIHNldCggQU5EUk9JRF9FWENFUFRJT05TICAgICAgIE9GRiApCi0g
IGVuZGlmKCkKLSAgaWYoIEFORFJPSURfTkRLX1JFTEVBU0VfTlVNIExFU1MgNzAwMCApICMgYmVm
b3JlIHI3Ci0gICBzZXQoIEFORFJPSURfUlRUSSAgICAgICAgICAgIE9GRiApCi0gIGVsc2UoKQot
ICAgc2V0KCBBTkRST0lEX1JUVEkgICAgICAgICAgICBPTiApCi0gIGVuZGlmKCkKLSAgc2V0KCBB
TkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9z
dGxwb3J0L3N0bHBvcnQiICkKLSAgc2V0KCBfX2xpYnN0bCAgICAgICAgICAgICAgICAgIiR7QU5E
Uk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9zdGxwb3J0L2xpYnMvJHtBTkRST0lEX05ES19BQklf
TkFNRX0vbGlic3RscG9ydF9zdGF0aWMuYSIgKQotIGVsc2VpZiggQU5EUk9JRF9TVEwgTUFUQ0hF
UyAiZ251c3RsIiApCi0gIHNldCggQU5EUk9JRF9FWENFUFRJT05TICAgICAgIE9OICkKLSAgc2V0
KCBBTkRST0lEX1JUVEkgICAgICAgICAgICAgT04gKQotICBpZiggRVhJU1RTICIke0FORFJPSURf
TkRLfS9zb3VyY2VzL2N4eC1zdGwvZ251LWxpYnN0ZGMrKy8ke0FORFJPSURfQ09NUElMRVJfVkVS
U0lPTn0iICkKLSAgIGlmKCBBUk1FQUJJX1Y3QSBBTkQgQU5EUk9JRF9DT01QSUxFUl9WRVJTSU9O
IFZFUlNJT05fRVFVQUwgIjQuNyIgQU5EIEFORFJPSURfTkRLX1JFTEVBU0UgU1RSRVFVQUwgInI4
ZCIgKQotICAgICMgZ251c3RsIGJpbmFyeSBmb3IgNC43IGNvbXBpbGVyIGlzIGJ1Z2d5IDooCi0g
ICAgIyBUT0RPOiBsb29rIGZvciByaWdodCBmaXgKLSAgICBzZXQoIF9fbGlic3RsICAgICAgICAg
ICAgICAgICIke0FORFJPSURfTkRLfS9zb3VyY2VzL2N4eC1zdGwvZ251LWxpYnN0ZGMrKy80LjYi
ICkKLSAgIGVsc2UoKQotICAgIHNldCggX19saWJzdGwgICAgICAgICAgICAgICAgIiR7QU5EUk9J
RF9OREt9L3NvdXJjZXMvY3h4LXN0bC9nbnUtbGlic3RkYysrLyR7QU5EUk9JRF9DT01QSUxFUl9W
RVJTSU9OfSIgKQotICAgZW5kaWYoKQotICBlbHNlKCkKLSAgIHNldCggX19saWJzdGwgICAgICAg
ICAgICAgICAgIiR7QU5EUk9JRF9OREt9L3NvdXJjZXMvY3h4LXN0bC9nbnUtbGlic3RkYysrIiAp
Ci0gIGVuZGlmKCkKLSAgc2V0KCBBTkRST0lEX1NUTF9JTkNMVURFX0RJUlMgIiR7X19saWJzdGx9
L2luY2x1ZGUiICIke19fbGlic3RsfS9saWJzLyR7QU5EUk9JRF9OREtfQUJJX05BTUV9L2luY2x1
ZGUiICIke19fbGlic3RsfS9pbmNsdWRlL2JhY2t3YXJkIiApCi0gIGlmKCBFWElTVFMgIiR7X19s
aWJzdGx9L2xpYnMvJHtBTkRST0lEX05ES19BQklfTkFNRX0vbGliZ251c3RsX3N0YXRpYy5hIiAp
Ci0gICBzZXQoIF9fbGlic3RsICAgICAgICAgICAgICAgICIke19fbGlic3RsfS9saWJzLyR7QU5E
Uk9JRF9OREtfQUJJX05BTUV9L2xpYmdudXN0bF9zdGF0aWMuYSIgKQotICBlbHNlKCkKLSAgIHNl
dCggX19saWJzdGwgICAgICAgICAgICAgICAgIiR7X19saWJzdGx9L2xpYnMvJHtBTkRST0lEX05E
S19BQklfTkFNRX0vbGlic3RkYysrLmEiICkKLSAgZW5kaWYoKQotIGVsc2UoKQotICBtZXNzYWdl
KCBGQVRBTF9FUlJPUiAiVW5rbm93biBydW50aW1lOiAke0FORFJPSURfU1RMfSIgKQotIGVuZGlm
KCkKLSAjIGZpbmQgbGlic3VwYysrLmEgLSBydHRpICYgZXhjZXB0aW9ucwotIGlmKCBBTkRST0lE
X1NUTCBTVFJFUVVBTCAic3lzdGVtX3JlIiBPUiBBTkRST0lEX1NUTCBNQVRDSEVTICJnbnVzdGwi
ICkKLSAgc2V0KCBfX2xpYnN1cGN4eCAiJHtBTkRST0lEX05ES30vc291cmNlcy9jeHgtc3RsL2du
dS1saWJzdGRjKysvJHtBTkRST0lEX0NPTVBJTEVSX1ZFUlNJT059L2xpYnMvJHtBTkRST0lEX05E
S19BQklfTkFNRX0vbGlic3VwYysrLmEiICkgIyByOGIgb3IgbmV3ZXIKLSAgaWYoIE5PVCBFWElT
VFMgIiR7X19saWJzdXBjeHh9IiApCi0gICBzZXQoIF9fbGlic3VwY3h4ICIke0FORFJPSURfTkRL
fS9zb3VyY2VzL2N4eC1zdGwvZ251LWxpYnN0ZGMrKy9saWJzLyR7QU5EUk9JRF9OREtfQUJJX05B
TUV9L2xpYnN1cGMrKy5hIiApICMgcjctcjgKLSAgZW5kaWYoKQotICBpZiggTk9UIEVYSVNUUyAi
JHtfX2xpYnN1cGN4eH0iICkgIyBiZWZvcmUgcjcKLSAgIGlmKCBBUk1FQUJJX1Y3QSApCi0gICAg
aWYoIEFORFJPSURfRk9SQ0VfQVJNX0JVSUxEICkKLSAgICAgc2V0KCBfX2xpYnN1cGN4eCAiJHtB
TkRST0lEX1RPT0xDSEFJTl9ST09UfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0v
bGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0vbGlic3VwYysrLmEiICkKLSAgICBlbHNlKCkK
LSAgICAgc2V0KCBfX2xpYnN1cGN4eCAiJHtBTkRST0lEX1RPT0xDSEFJTl9ST09UfS8ke0FORFJP
SURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0vbGliLyR7Q01BS0VfU1lTVEVNX1BST0NFU1NPUn0v
dGh1bWIvbGlic3VwYysrLmEiICkKLSAgICBlbmRpZigpCi0gICBlbHNlaWYoIEFSTUVBQkkgQU5E
IE5PVCBBTkRST0lEX0ZPUkNFX0FSTV9CVUlMRCApCi0gICAgc2V0KCBfX2xpYnN1cGN4eCAiJHtB
TkRST0lEX1RPT0xDSEFJTl9ST09UfS8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0v
bGliL3RodW1iL2xpYnN1cGMrKy5hIiApCi0gICBlbHNlKCkKLSAgICBzZXQoIF9fbGlic3VwY3h4
ICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9O
QU1FfS9saWIvbGlic3VwYysrLmEiICkKLSAgIGVuZGlmKCkKLSAgZW5kaWYoKQotICBpZiggTk9U
IEVYSVNUUyAiJHtfX2xpYnN1cGN4eH0iKQotICAgbWVzc2FnZSggRVJST1IgIkNvdWxkIG5vdCBm
aW5kIGxpYnN1cGMrKy5hIGZvciBhIGNob3NlbiBwbGF0Zm9ybS4gRWl0aGVyIHlvdXIgTkRLIGlz
IG5vdCBzdXBwb3J0ZWQgb3IgaXMgYnJva2VuLiIpCi0gIGVuZGlmKCkKLSBlbmRpZigpCi1lbmRp
ZigpCi0KLQotIyBjYXNlIG9mIHNoYXJlZCBTVEwgbGlua2FnZQotaWYoIEFORFJPSURfU1RMIE1B
VENIRVMgInNoYXJlZCIgQU5EIERFRklORUQgX19saWJzdGwgKQotIHN0cmluZyggUkVQTEFDRSAi
X3N0YXRpYy5hIiAiX3NoYXJlZC5zbyIgX19saWJzdGwgIiR7X19saWJzdGx9IiApCi0gIyBUT0RP
OiBjaGVjayBpZiAuc28gZmlsZSBleGlzdHMgYmVmb3JlIHRoZSByZW5hbWluZwotZW5kaWYoKQot
Ci0KLSMgY2NhY2hlIHN1cHBvcnQKLV9fSU5JVF9WQVJJQUJMRSggX25ka19jY2FjaGUgTkRLX0ND
QUNIRSBFTlZfTkRLX0NDQUNIRSApCi1pZiggX25ka19jY2FjaGUgKQotIGlmKCBERUZJTkVEIE5E
S19DQ0FDSEUgQU5EIE5PVCBFWElTVFMgTkRLX0NDQUNIRSApCi0gIHVuc2V0KCBOREtfQ0NBQ0hF
IENBQ0hFICkKLSBlbmRpZigpCi0gZmluZF9wcm9ncmFtKCBOREtfQ0NBQ0hFICIke19uZGtfY2Nh
Y2hlfSIgRE9DICJUaGUgcGF0aCB0byBjY2FjaGUgYmluYXJ5IikKLWVsc2UoKQotIHVuc2V0KCBO
REtfQ0NBQ0hFIENBQ0hFICkKLWVuZGlmKCkKLXVuc2V0KCBfbmRrX2NjYWNoZSApCi0KLQotIyBz
ZXR1cCB0aGUgY3Jvc3MtY29tcGlsZXIKLWlmKCBOT1QgQ01BS0VfQ19DT01QSUxFUiApCi0gaWYo
IE5ES19DQ0FDSEUgQU5EIE5PVCBBTkRST0lEX1NZU1JPT1QgTUFUQ0hFUyAiWyA7XCJdIiApCi0g
IHNldCggQ01BS0VfQ19DT01QSUxFUiAgICIke05ES19DQ0FDSEV9IiBDQUNIRSBQQVRIICJjY2Fj
aGUgYXMgQyBjb21waWxlciIgKQotICBzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAiJHtOREtfQ0NB
Q0hFfSIgQ0FDSEUgUEFUSCAiY2NhY2hlIGFzIEMrKyBjb21waWxlciIgKQotICBpZiggQU5EUk9J
RF9DT01QSUxFUl9JU19DTEFORyApCi0gICBzZXQoIENNQUtFX0NfQ09NUElMRVJfQVJHMSAgICIk
e0FORFJPSURfQ0xBTkdfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke19jbGFuZ19uYW1lfSR7VE9PTF9P
U19TVUZGSVh9IiAgIENBQ0hFIFBBVEggIkMgY29tcGlsZXIiKQotICAgc2V0KCBDTUFLRV9DWFhf
Q09NUElMRVJfQVJHMSAiJHtBTkRST0lEX0NMQU5HX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtfY2xh
bmdfbmFtZX0rKyR7VE9PTF9PU19TVUZGSVh9IiBDQUNIRSBQQVRIICJDKysgY29tcGlsZXIiKQot
ICBlbHNlKCkKLSAgIHNldCggQ01BS0VfQ19DT01QSUxFUl9BUkcxICAgIiR7QU5EUk9JRF9UT09M
Q0hBSU5fUk9PVH0vYmluLyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS1nY2Mke1RP
T0xfT1NfU1VGRklYfSIgQ0FDSEUgUEFUSCAiQyBjb21waWxlciIpCi0gICBzZXQoIENNQUtFX0NY
WF9DT01QSUxFUl9BUkcxICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURf
VE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZysrJHtUT09MX09TX1NVRkZJWH0iIENBQ0hFIFBBVEgg
IkMrKyBjb21waWxlciIpCi0gIGVuZGlmKCkKLSBlbHNlKCkKLSAgaWYoIEFORFJPSURfQ09NUElM
RVJfSVNfQ0xBTkcgKQotICAgc2V0KCBDTUFLRV9DX0NPTVBJTEVSICAgIiR7QU5EUk9JRF9DTEFO
R19UT09MQ0hBSU5fUk9PVH0vYmluLyR7X2NsYW5nX25hbWV9JHtUT09MX09TX1NVRkZJWH0iICAg
Q0FDSEUgUEFUSCAiQyBjb21waWxlciIpCi0gICBzZXQoIENNQUtFX0NYWF9DT01QSUxFUiAiJHtB
TkRST0lEX0NMQU5HX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtfY2xhbmdfbmFtZX0rKyR7VE9PTF9P
U19TVUZGSVh9IiBDQUNIRSBQQVRIICJDKysgY29tcGlsZXIiKQotICBlbHNlKCkKLSAgIHNldCgg
Q01BS0VfQ19DT01QSUxFUiAgICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJP
SURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZ2NjJHtUT09MX09TX1NVRkZJWH0iICAgIENBQ0hF
IFBBVEggIkMgY29tcGlsZXIiICkKLSAgIHNldCggQ01BS0VfQ1hYX0NPTVBJTEVSICIke0FORFJP
SURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0t
ZysrJHtUT09MX09TX1NVRkZJWH0iICAgIENBQ0hFIFBBVEggIkMrKyBjb21waWxlciIgKQotICBl
bmRpZigpCi0gZW5kaWYoKQotIHNldCggQ01BS0VfQVNNX0NPTVBJTEVSICIke0FORFJPSURfVE9P
TENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZ2NjJHtU
T09MX09TX1NVRkZJWH0iICAgICBDQUNIRSBQQVRIICJhc3NlbWJsZXIiICkKLSBzZXQoIENNQUtF
X1NUUklQICAgICAgICAiJHtBTkRST0lEX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtBTkRST0lEX1RP
T0xDSEFJTl9NQUNISU5FX05BTUV9LXN0cmlwJHtUT09MX09TX1NVRkZJWH0iICAgQ0FDSEUgUEFU
SCAic3RyaXAiICkKLSBpZiggRVhJU1RTICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8k
e0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tZ2NjLWFyJHtUT09MX09TX1NVRkZJWH0i
ICkKLSAgIyBVc2UgZ2NjLWFyIGlmIHdlIGhhdmUgaXQgZm9yIGJldHRlciBMVE8gc3VwcG9ydC4K
LSAgc2V0KCBDTUFLRV9BUiAgICAgICAgICAgIiR7QU5EUk9JRF9UT09MQ0hBSU5fUk9PVH0vYmlu
LyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS1nY2MtYXIke1RPT0xfT1NfU1VGRklY
fSIgICAgICBDQUNIRSBQQVRIICJhcmNoaXZlIiApCi0gZWxzZSgpCi0gIHNldCggQ01BS0VfQVIg
ICAgICAgICAgICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENI
QUlOX01BQ0hJTkVfTkFNRX0tYXIke1RPT0xfT1NfU1VGRklYfSIgICAgICBDQUNIRSBQQVRIICJh
cmNoaXZlIiApCi0gZW5kaWYoKQotIHNldCggQ01BS0VfTElOS0VSICAgICAgICIke0FORFJPSURf
VE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tbGQk
e1RPT0xfT1NfU1VGRklYfSIgICAgICBDQUNIRSBQQVRIICJsaW5rZXIiICkKLSBzZXQoIENNQUtF
X05NICAgICAgICAgICAiJHtBTkRST0lEX1RPT0xDSEFJTl9ST09UfS9iaW4vJHtBTkRST0lEX1RP
T0xDSEFJTl9NQUNISU5FX05BTUV9LW5tJHtUT09MX09TX1NVRkZJWH0iICAgICAgQ0FDSEUgUEFU
SCAibm0iICkKLSBzZXQoIENNQUtFX09CSkNPUFkgICAgICAiJHtBTkRST0lEX1RPT0xDSEFJTl9S
T09UfS9iaW4vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9LW9iamNvcHkke1RPT0xf
T1NfU1VGRklYfSIgQ0FDSEUgUEFUSCAib2JqY29weSIgKQotIHNldCggQ01BS0VfT0JKRFVNUCAg
ICAgICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2Jpbi8ke0FORFJPSURfVE9PTENIQUlOX01B
Q0hJTkVfTkFNRX0tb2JqZHVtcCR7VE9PTF9PU19TVUZGSVh9IiBDQUNIRSBQQVRIICJvYmpkdW1w
IiApCi0gc2V0KCBDTUFLRV9SQU5MSUIgICAgICAgIiR7QU5EUk9JRF9UT09MQ0hBSU5fUk9PVH0v
YmluLyR7QU5EUk9JRF9UT09MQ0hBSU5fTUFDSElORV9OQU1FfS1yYW5saWIke1RPT0xfT1NfU1VG
RklYfSIgIENBQ0hFIFBBVEggInJhbmxpYiIgKQotZW5kaWYoKQotCi1zZXQoIF9DTUFLRV9UT09M
Q0hBSU5fUFJFRklYICIke0FORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRX0tIiApCi1pZigg
Q01BS0VfVkVSU0lPTiBWRVJTSU9OX0xFU1MgMi44LjUgKQotIHNldCggQ01BS0VfQVNNX0NPTVBJ
TEVSX0FSRzEgIi1jIiApCi1lbmRpZigpCi1pZiggQVBQTEUgKQotIGZpbmRfcHJvZ3JhbSggQ01B
S0VfSU5TVEFMTF9OQU1FX1RPT0wgTkFNRVMgaW5zdGFsbF9uYW1lX3Rvb2wgKQotIGlmKCBOT1Qg
Q01BS0VfSU5TVEFMTF9OQU1FX1RPT0wgKQotICBtZXNzYWdlKCBGQVRBTF9FUlJPUiAiQ291bGQg
bm90IGZpbmQgaW5zdGFsbF9uYW1lX3Rvb2wsIHBsZWFzZSBjaGVjayB5b3VyIGluc3RhbGxhdGlv
bi4iICkKLSBlbmRpZigpCi0gbWFya19hc19hZHZhbmNlZCggQ01BS0VfSU5TVEFMTF9OQU1FX1RP
T0wgKQotZW5kaWYoKQotCi0jIEZvcmNlIHNldCBjb21waWxlcnMgYmVjYXVzZSBzdGFuZGFyZCBp
ZGVudGlmaWNhdGlvbiB3b3JrcyBiYWRseSBmb3IgdXMKLWluY2x1ZGUoIENNYWtlRm9yY2VDb21w
aWxlciApCi1DTUFLRV9GT1JDRV9DX0NPTVBJTEVSKCAiJHtDTUFLRV9DX0NPTVBJTEVSfSIgR05V
ICkKLWlmKCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSBzZXQoIENNQUtFX0NfQ09NUElM
RVJfSUQgQ2xhbmcgKQotZW5kaWYoKQotc2V0KCBDTUFLRV9DX1BMQVRGT1JNX0lEIExpbnV4ICkK
LWlmKCBYODZfNjQgT1IgTUlQUzY0IE9SIEFSTTY0X1Y4QSApCi0gc2V0KCBDTUFLRV9DX1NJWkVP
Rl9EQVRBX1BUUiA4ICkKLWVsc2UoKQotIHNldCggQ01BS0VfQ19TSVpFT0ZfREFUQV9QVFIgNCAp
Ci1lbmRpZigpCi1zZXQoIENNQUtFX0NfSEFTX0lTWVNST09UIDEgKQotc2V0KCBDTUFLRV9DX0NP
TVBJTEVSX0FCSSBFTEYgKQotQ01BS0VfRk9SQ0VfQ1hYX0NPTVBJTEVSKCAiJHtDTUFLRV9DWFhf
Q09NUElMRVJ9IiBHTlUgKQotaWYoIEFORFJPSURfQ09NUElMRVJfSVNfQ0xBTkcgKQotIHNldCgg
Q01BS0VfQ1hYX0NPTVBJTEVSX0lEIENsYW5nKQotZW5kaWYoKQotc2V0KCBDTUFLRV9DWFhfUExB
VEZPUk1fSUQgTGludXggKQotc2V0KCBDTUFLRV9DWFhfU0laRU9GX0RBVEFfUFRSICR7Q01BS0Vf
Q19TSVpFT0ZfREFUQV9QVFJ9ICkKLXNldCggQ01BS0VfQ1hYX0hBU19JU1lTUk9PVCAxICkKLXNl
dCggQ01BS0VfQ1hYX0NPTVBJTEVSX0FCSSBFTEYgKQotc2V0KCBDTUFLRV9DWFhfU09VUkNFX0ZJ
TEVfRVhURU5TSU9OUyBjYyBjcCBjeHggY3BwIENQUCBjKysgQyApCi0jIGZvcmNlIEFTTSBjb21w
aWxlciAocmVxdWlyZWQgZm9yIENNYWtlIDwgMi44LjUpCi1zZXQoIENNQUtFX0FTTV9DT01QSUxF
Ul9JRF9SVU4gVFJVRSApCi1zZXQoIENNQUtFX0FTTV9DT01QSUxFUl9JRCBHTlUgKQotc2V0KCBD
TUFLRV9BU01fQ09NUElMRVJfV09SS1MgVFJVRSApCi1zZXQoIENNQUtFX0FTTV9DT01QSUxFUl9G
T1JDRUQgVFJVRSApCi1zZXQoIENNQUtFX0NPTVBJTEVSX0lTX0dOVUFTTSAxKQotc2V0KCBDTUFL
RV9BU01fU09VUkNFX0ZJTEVfRVhURU5TSU9OUyBzIFMgYXNtICkKLQotZm9yZWFjaCggbGFuZyBD
IENYWCBBU00gKQotIGlmKCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSAgc2V0KCBDTUFL
RV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gJHtBTkRST0lEX0NMQU5HX1ZFUlNJT059ICkKLSBl
bHNlKCkKLSAgc2V0KCBDTUFLRV8ke2xhbmd9X0NPTVBJTEVSX1ZFUlNJT04gJHtBTkRST0lEX0NP
TVBJTEVSX1ZFUlNJT059ICkKLSBlbmRpZigpCi1lbmRmb3JlYWNoKCkKLQotIyBmbGFncyBhbmQg
ZGVmaW5pdGlvbnMKLXJlbW92ZV9kZWZpbml0aW9ucyggLURBTkRST0lEICkKLWFkZF9kZWZpbml0
aW9ucyggLURBTkRST0lEICkKLQotaWYoIEFORFJPSURfU1lTUk9PVCBNQVRDSEVTICJbIDtcIl0i
ICkKLSBpZiggQ01BS0VfSE9TVF9XSU4zMiApCi0gICMgdHJ5IHRvIGNvbnZlcnQgcGF0aCB0byA4
LjMgZm9ybQotICBmaWxlKCBXUklURSAiJHtDTUFLRV9CSU5BUllfRElSfSR7Q01BS0VfRklMRVNf
RElSRUNUT1JZfS9jdnQ4My5jbWQiICJAZWNobyAlfnMxIiApCi0gIGV4ZWN1dGVfcHJvY2Vzcygg
Q09NTUFORCAiJEVOVntDb21TcGVjfSIgL2MgIiR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJ
TEVTX0RJUkVDVE9SWX0vY3Z0ODMuY21kIiAiJHtBTkRST0lEX1NZU1JPT1R9IgotICAgICAgICAg
ICAgICAgICAgIE9VVFBVVF9WQVJJQUJMRSBfX3BhdGggT1VUUFVUX1NUUklQX1RSQUlMSU5HX1dI
SVRFU1BBQ0UKLSAgICAgICAgICAgICAgICAgICBSRVNVTFRfVkFSSUFCTEUgX19yZXN1bHQgRVJS
T1JfUVVJRVQgKQotICBpZiggX19yZXN1bHQgRVFVQUwgMCApCi0gICBmaWxlKCBUT19DTUFLRV9Q
QVRIICIke19fcGF0aH0iIEFORFJPSURfU1lTUk9PVCApCi0gICBzZXQoIEFORFJPSURfQ1hYX0ZM
QUdTICItLXN5c3Jvb3Q9JHtBTkRST0lEX1NZU1JPT1R9IiApCi0gIGVsc2UoKQotICAgc2V0KCBB
TkRST0lEX0NYWF9GTEFHUyAiLS1zeXNyb290PVwiJHtBTkRST0lEX1NZU1JPT1R9XCIiICkKLSAg
ZW5kaWYoKQotIGVsc2UoKQotICBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICInLS1zeXNyb290PSR7
QU5EUk9JRF9TWVNST09UfSciICkKLSBlbmRpZigpCi0gaWYoIE5PVCBfQ01BS0VfSU5fVFJZX0NP
TVBJTEUgKQotICAjIHF1b3RlcyBjYW4gYnJlYWsgdHJ5X2NvbXBpbGUgYW5kIGNvbXBpbGVyIGlk
ZW50aWZpY2F0aW9uCi0gIG1lc3NhZ2UoV0FSTklORyAiUGF0aCB0byB5b3VyIEFuZHJvaWQgTkRL
IChvciB0b29sY2hhaW4pIGhhcyBub24tYWxwaGFudW1lcmljIHN5bWJvbHMuXG5UaGUgYnVpbGQg
bWlnaHQgYmUgYnJva2VuLlxuIikKLSBlbmRpZigpCi1lbHNlKCkKLSBzZXQoIEFORFJPSURfQ1hY
X0ZMQUdTICItLXN5c3Jvb3Q9JHtBTkRST0lEX1NZU1JPT1R9IiApCi1lbmRpZigpCi0KLSMgTkRL
IGZsYWdzCi1pZiAoQVJNNjRfVjhBICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICAgICAgICAg
IiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mdW53aW5kLXRhYmxlcyIgKQotIHNldCggQU5EUk9JRF9D
WFhfRkxBR1NfUkVMRUFTRSAiLWZvbWl0LWZyYW1lLXBvaW50ZXIgLWZzdHJpY3QtYWxpYXNpbmci
ICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX0RFQlVHICAgIi1mbm8tb21pdC1mcmFtZS1wb2lu
dGVyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIiApCi0gaWYoIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lT
X0NMQU5HICkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFHU19SRUxFQVNFICIke0FORFJPSURfQ1hY
X0ZMQUdTX1JFTEVBU0V9IC1mdW5zd2l0Y2gtbG9vcHMgLWZpbmxpbmUtbGltaXQ9MzAwIiApCi0g
ZW5kaWYoKQotZWxzZWlmKCBBUk1FQUJJIE9SIEFSTUVBQklfVjdBKQotIHNldCggQU5EUk9JRF9D
WFhfRkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mdW53aW5kLXRhYmxlcyIgKQotIGlmKCBO
T1QgQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgQU5EIE5PVCBBUk1FQUJJX1Y2ICkKLSAgc2V0KCBB
TkRST0lEX0NYWF9GTEFHU19SRUxFQVNFICItbXRodW1iIC1mb21pdC1mcmFtZS1wb2ludGVyIC1m
bm8tc3RyaWN0LWFsaWFzaW5nIiApCi0gIHNldCggQU5EUk9JRF9DWFhfRkxBR1NfREVCVUcgICAi
LW1hcm0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWZuby1zdHJpY3QtYWxpYXNpbmciICkKLSAg
aWYoIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSAgIHNldCggQU5EUk9JRF9DWFhf
RkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1maW5saW5lLWxpbWl0PTY0IiApCi0gIGVuZGlm
KCkKLSBlbHNlKCkKLSAgIyBhbHdheXMgY29tcGlsZSBBUk1FQUJJX1Y2IGluIGFybSBtb2RlOyBv
dGhlcndpc2UgdGhlcmUgaXMgbm8gZGlmZmVyZW5jZSBmcm9tIEFSTUVBQkkKLSAgc2V0KCBBTkRS
T0lEX0NYWF9GTEFHU19SRUxFQVNFICItbWFybSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZnN0cmlj
dC1hbGlhc2luZyIgKQotICBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX0RFQlVHICAgIi1tYXJtIC1m
bm8tb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tc3RyaWN0LWFsaWFzaW5nIiApCi0gIGlmKCBOT1Qg
QU5EUk9JRF9DT01QSUxFUl9JU19DTEFORyApCi0gICBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIk
e0FORFJPSURfQ1hYX0ZMQUdTfSAtZnVuc3dpdGNoLWxvb3BzIC1maW5saW5lLWxpbWl0PTMwMCIg
KQotICBlbmRpZigpCi0gZW5kaWYoKQotZWxzZWlmKCBYODYgT1IgWDg2XzY0ICkKLSBzZXQoIEFO
RFJPSURfQ1hYX0ZMQUdTICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtZnVud2luZC10YWJsZXMiICkK
LSBpZiggTk9UIEFORFJPSURfQ09NUElMRVJfSVNfQ0xBTkcgKQotICBzZXQoIEFORFJPSURfQ1hY
X0ZMQUdTICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtZnVuc3dpdGNoLWxvb3BzIC1maW5saW5lLWxp
bWl0PTMwMCIgKQotIGVuZGlmKCkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX1JFTEVBU0UgIi1m
b21pdC1mcmFtZS1wb2ludGVyIC1mc3RyaWN0LWFsaWFzaW5nIiApCi0gc2V0KCBBTkRST0lEX0NY
WF9GTEFHU19ERUJVRyAgICItZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmljdC1hbGlh
c2luZyIgKQotZWxzZWlmKCBNSVBTIE9SIE1JUFM2NCApCi0gc2V0KCBBTkRST0lEX0NYWF9GTEFH
UyAgICAgICAgICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtZm5vLXN0cmljdC1hbGlhc2luZyAtZmlu
bGluZS1mdW5jdGlvbnMgLWZ1bndpbmQtdGFibGVzIC1mbWVzc2FnZS1sZW5ndGg9MCIgKQotIHNl
dCggQU5EUk9JRF9DWFhfRkxBR1NfUkVMRUFTRSAiLWZvbWl0LWZyYW1lLXBvaW50ZXIiICkKLSBz
ZXQoIEFORFJPSURfQ1hYX0ZMQUdTX0RFQlVHICAgIi1mbm8tb21pdC1mcmFtZS1wb2ludGVyIiAp
Ci0gaWYoIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSAgc2V0KCBBTkRST0lEX0NY
WF9GTEFHUyAiJHtBTkRST0lEX0NYWF9GTEFHU30gLWZuby1pbmxpbmUtZnVuY3Rpb25zLWNhbGxl
ZC1vbmNlIC1mZ2NzZS1hZnRlci1yZWxvYWQgLWZyZXJ1bi1jc2UtYWZ0ZXItbG9vcCAtZnJlbmFt
ZS1yZWdpc3RlcnMiICkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFHU19SRUxFQVNFICIke0FORFJP
SURfQ1hYX0ZMQUdTX1JFTEVBU0V9IC1mdW5zd2l0Y2gtbG9vcHMgLWZpbmxpbmUtbGltaXQ9MzAw
IiApCi0gZW5kaWYoKQotZWxzZWlmKCkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTX1JFTEVBU0Ug
IiIgKQotIHNldCggQU5EUk9JRF9DWFhfRkxBR1NfREVCVUcgICAiIiApCi1lbmRpZigpCi0KLXNl
dCggQU5EUk9JRF9DWFhfRkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mc2lnbmVkLWNoYXIi
ICkgIyBnb29kL25lY2Vzc2FyeSB3aGVuIHBvcnRpbmcgZGVza3RvcCBsaWJyYXJpZXMKLQotaWYo
IE5PVCBYODYgQU5EIE5PVCBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HICkKLSBzZXQoIEFORFJP
SURfQ1hYX0ZMQUdTICItV25vLXBzYWJpICR7QU5EUk9JRF9DWFhfRkxBR1N9IiApCi1lbmRpZigp
Ci0KLWlmKCBOT1QgQU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiNC42IiAp
Ci0gc2V0KCBBTkRST0lEX0NYWF9GTEFHUyAiJHtBTkRST0lEX0NYWF9GTEFHU30gLW5vLWNhbm9u
aWNhbC1wcmVmaXhlcyIgKSAjIHNlZSBodHRwczovL2FuZHJvaWQtcmV2aWV3Lmdvb2dsZXNvdXJj
ZS5jb20vIy9jLzQ3NTY0LwotZW5kaWYoKQotCi0jIEFCSS1zcGVjaWZpYyBmbGFncwotaWYoIEFS
TUVBQklfVjdBICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIke0FORFJPSURfQ1hYX0ZMQUdT
fSAtbWFyY2g9YXJtdjctYSAtbWZsb2F0LWFiaT1zb2Z0ZnAiICkKLSBpZiggTkVPTiApCi0gIHNl
dCggQU5EUk9JRF9DWFhfRkxBR1MgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1tZnB1PW5lb24iICkK
LSBlbHNlaWYoIFZGUFYzICkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFHUyAiJHtBTkRST0lEX0NY
WF9GTEFHU30gLW1mcHU9dmZwdjMiICkKLSBlbHNlKCkKLSAgc2V0KCBBTkRST0lEX0NYWF9GTEFH
UyAiJHtBTkRST0lEX0NYWF9GTEFHU30gLW1mcHU9dmZwdjMtZDE2IiApCi0gZW5kaWYoKQotZWxz
ZWlmKCBBUk1FQUJJX1Y2ICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIke0FORFJPSURfQ1hY
X0ZMQUdTfSAtbWFyY2g9YXJtdjYgLW1mbG9hdC1hYmk9c29mdGZwIC1tZnB1PXZmcCIgKSAjIHZm
cCA9PSB2ZnB2MgotZWxzZWlmKCBBUk1FQUJJICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICIk
e0FORFJPSURfQ1hYX0ZMQUdTfSAtbWFyY2g9YXJtdjV0ZSAtbXR1bmU9eHNjYWxlIC1tc29mdC1m
bG9hdCIgKQotZW5kaWYoKQotCi1pZiggQU5EUk9JRF9TVEwgTUFUQ0hFUyAiZ251c3RsIiBBTkQg
KEVYSVNUUyAiJHtfX2xpYnN0bH0iIE9SIEVYSVNUUyAiJHtfX2xpYnN1cGN4eH0iKSApCi0gc2V0
KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZICI8Q01BS0VfQ19DT01QSUxFUj4gPENN
QUtFX1NIQVJFRF9MSUJSQVJZX0NYWF9GTEFHUz4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+IDxM
SU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NYWF9GTEFHUz4gPENNQUtF
X1NIQVJFRF9MSUJSQVJZX1NPTkFNRV9DWFhfRkxBRz48VEFSR0VUX1NPTkFNRT4gLW8gPFRBUkdF
VD4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iICkKLSBzZXQoIENNQUtFX0NYWF9DUkVBVEVf
U0hBUkVEX01PRFVMRSAgIjxDTUFLRV9DX0NPTVBJTEVSPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllf
Q1hYX0ZMQUdTPiA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9T
SEFSRURfTElCUkFSWV9DUkVBVEVfQ1hYX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfU09O
QU1FX0NYWF9GTEFHPjxUQVJHRVRfU09OQU1FPiAtbyA8VEFSR0VUPiA8T0JKRUNUUz4gPExJTktf
TElCUkFSSUVTPiIgKQotIHNldCggQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAgICAgICAiPENN
QUtFX0NfQ09NUElMRVI+IDxGTEFHUz4gPENNQUtFX0NYWF9MSU5LX0ZMQUdTPiA8TElOS19GTEFH
Uz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJQlJBUklFUz4iICkKLWVsc2UoKQotIHNl
dCggQ01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElCUkFSWSAiPENNQUtFX0NYWF9DT01QSUxFUj4g
PENNQUtFX1NIQVJFRF9MSUJSQVJZX0NYWF9GTEFHUz4gPExBTkdVQUdFX0NPTVBJTEVfRkxBR1M+
IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NYWF9GTEFHUz4gPENN
QUtFX1NIQVJFRF9MSUJSQVJZX1NPTkFNRV9DWFhfRkxBRz48VEFSR0VUX1NPTkFNRT4gLW8gPFRB
UkdFVD4gPE9CSkVDVFM+IDxMSU5LX0xJQlJBUklFUz4iICkKLSBzZXQoIENNQUtFX0NYWF9DUkVB
VEVfU0hBUkVEX01PRFVMRSAgIjxDTUFLRV9DWFhfQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElC
UkFSWV9DWFhfRkxBR1M+IDxMQU5HVUFHRV9DT01QSUxFX0ZMQUdTPiA8TElOS19GTEFHUz4gPENN
QUtFX1NIQVJFRF9MSUJSQVJZX0NSRUFURV9DWFhfRkxBR1M+IDxDTUFLRV9TSEFSRURfTElCUkFS
WV9TT05BTUVfQ1hYX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8
TElOS19MSUJSQVJJRVM+IiApCi0gc2V0KCBDTUFLRV9DWFhfTElOS19FWEVDVVRBQkxFICAgICAg
ICI8Q01BS0VfQ1hYX0NPTVBJTEVSPiA8RkxBR1M+IDxDTUFLRV9DWFhfTElOS19GTEFHUz4gPExJ
TktfRkxBR1M+IDxPQkpFQ1RTPiAtbyA8VEFSR0VUPiA8TElOS19MSUJSQVJJRVM+IiApCi1lbmRp
ZigpCi0KLSMgU1RMCi1pZiggRVhJU1RTICIke19fbGlic3RsfSIgT1IgRVhJU1RTICIke19fbGli
c3VwY3h4fSIgKQotIGlmKCBFWElTVFMgIiR7X19saWJzdGx9IiApCi0gIHNldCggQ01BS0VfQ1hY
X0NSRUFURV9TSEFSRURfTElCUkFSWSAiJHtDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZ
fSBcIiR7X19saWJzdGx9XCIiICkKLSAgc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9NT0RV
TEUgICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRX0gXCIke19fbGlic3RsfVwiIiAp
Ci0gIHNldCggQ01BS0VfQ1hYX0xJTktfRVhFQ1VUQUJMRSAgICAgICAiJHtDTUFLRV9DWFhfTElO
S19FWEVDVVRBQkxFfSBcIiR7X19saWJzdGx9XCIiICkKLSBlbmRpZigpCi0gaWYoIEVYSVNUUyAi
JHtfX2xpYnN1cGN4eH0iICkKLSAgc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZ
ICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX0xJQlJBUll9IFwiJHtfX2xpYnN1cGN4eH1cIiIg
KQotICBzZXQoIENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRSAgIiR7Q01BS0VfQ1hYX0NS
RUFURV9TSEFSRURfTU9EVUxFfSBcIiR7X19saWJzdXBjeHh9XCIiICkKLSAgc2V0KCBDTUFLRV9D
WFhfTElOS19FWEVDVVRBQkxFICAgICAgICIke0NNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEV9IFwi
JHtfX2xpYnN1cGN4eH1cIiIgKQotICAjIEMgb2JqZWN0czoKLSAgc2V0KCBDTUFLRV9DX0NSRUFU
RV9TSEFSRURfTElCUkFSWSAiPENNQUtFX0NfQ09NUElMRVI+IDxDTUFLRV9TSEFSRURfTElCUkFS
WV9DX0ZMQUdTPiA8TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4gPExJTktfRkxBR1M+IDxDTUFLRV9T
SEFSRURfTElCUkFSWV9DUkVBVEVfQ19GTEFHUz4gPENNQUtFX1NIQVJFRF9MSUJSQVJZX1NPTkFN
RV9DX0ZMQUc+PFRBUkdFVF9TT05BTUU+IC1vIDxUQVJHRVQ+IDxPQkpFQ1RTPiA8TElOS19MSUJS
QVJJRVM+IiApCi0gIHNldCggQ01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRSAgIjxDTUFLRV9D
X0NPTVBJTEVSPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ19GTEFHUz4gPExBTkdVQUdFX0NPTVBJ
TEVfRkxBR1M+IDxMSU5LX0ZMQUdTPiA8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1JFQVRFX0NfRkxB
R1M+IDxDTUFLRV9TSEFSRURfTElCUkFSWV9TT05BTUVfQ19GTEFHPjxUQVJHRVRfU09OQU1FPiAt
byA8VEFSR0VUPiA8T0JKRUNUUz4gPExJTktfTElCUkFSSUVTPiIgKQotICBzZXQoIENNQUtFX0Nf
TElOS19FWEVDVVRBQkxFICAgICAgICI8Q01BS0VfQ19DT01QSUxFUj4gPEZMQUdTPiA8Q01BS0Vf
Q19MSU5LX0ZMQUdTPiA8TElOS19GTEFHUz4gPE9CSkVDVFM+IC1vIDxUQVJHRVQ+IDxMSU5LX0xJ
QlJBUklFUz4iICkKLSAgc2V0KCBDTUFLRV9DX0NSRUFURV9TSEFSRURfTElCUkFSWSAiJHtDTUFL
RV9DX0NSRUFURV9TSEFSRURfTElCUkFSWX0gXCIke19fbGlic3VwY3h4fVwiIiApCi0gIHNldCgg
Q01BS0VfQ19DUkVBVEVfU0hBUkVEX01PRFVMRSAgIiR7Q01BS0VfQ19DUkVBVEVfU0hBUkVEX01P
RFVMRX0gXCIke19fbGlic3VwY3h4fVwiIiApCi0gIHNldCggQ01BS0VfQ19MSU5LX0VYRUNVVEFC
TEUgICAgICAgIiR7Q01BS0VfQ19MSU5LX0VYRUNVVEFCTEV9IFwiJHtfX2xpYnN1cGN4eH1cIiIg
KQotIGVuZGlmKCkKLSBpZiggQU5EUk9JRF9TVEwgTUFUQ0hFUyAiZ251c3RsIiApCi0gIGlmKCBO
T1QgRVhJU1RTICIke0FORFJPSURfTElCTV9QQVRIfSIgKQotICAgc2V0KCBBTkRST0lEX0xJQk1f
UEFUSCAtbG0gKQotICBlbmRpZigpCi0gIHNldCggQ01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElC
UkFSWSAiJHtDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZfSAke0FORFJPSURfTElCTV9Q
QVRIfSIgKQotICBzZXQoIENNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRSAgIiR7Q01BS0Vf
Q1hYX0NSRUFURV9TSEFSRURfTU9EVUxFfSAke0FORFJPSURfTElCTV9QQVRIfSIgKQotICBzZXQo
IENNQUtFX0NYWF9MSU5LX0VYRUNVVEFCTEUgICAgICAgIiR7Q01BS0VfQ1hYX0xJTktfRVhFQ1VU
QUJMRX0gJHtBTkRST0lEX0xJQk1fUEFUSH0iICkKLSBlbmRpZigpCi1lbmRpZigpCi0KLSMgdmFy
aWFibGVzIGNvbnRyb2xsaW5nIG9wdGlvbmFsIGJ1aWxkIGZsYWdzCi1pZiggQU5EUk9JRF9OREtf
UkVMRUFTRV9OVU0gTEVTUyA3MDAwICkgIyBiZWZvcmUgcjcKLSAjIGxpYkdMRVN2Mi5zbyBpbiBO
REsncyBwcmlvciB0byByNyByZWZlcnMgdG8gbWlzc2luZyBleHRlcm5hbCBzeW1ib2xzLgotICMg
U28gdGhpcyBmbGFnIG9wdGlvbiBpcyByZXF1aXJlZCBmb3IgYWxsIHByb2plY3RzIHVzaW5nIE9w
ZW5HTCBmcm9tIG5hdGl2ZS4KLSBfX0lOSVRfVkFSSUFCTEUoIEFORFJPSURfU09fVU5ERUZJTkVE
ICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyBPTiApCi1lbHNlKCkKLSBfX0lOSVRfVkFSSUFC
TEUoIEFORFJPSURfU09fVU5ERUZJTkVEICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyBPRkYg
KQotZW5kaWYoKQotX19JTklUX1ZBUklBQkxFKCBBTkRST0lEX05PX1VOREVGSU5FRCAgICAgICAg
ICAgICAgICAgICAgICAgVkFMVUVTIE9OICkKLV9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9GVU5D
VElPTl9MRVZFTF9MSU5LSU5HICAgICAgICAgICAgIFZBTFVFUyBPTiApCi1fX0lOSVRfVkFSSUFC
TEUoIEFORFJPSURfR09MRF9MSU5LRVIgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgT04g
KQotX19JTklUX1ZBUklBQkxFKCBBTkRST0lEX05PRVhFQ1NUQUNLICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMVUVTIE9OICkKLV9fSU5JVF9WQVJJQUJMRSggQU5EUk9JRF9SRUxSTyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyBPTiApCi0KLXNldCggQU5EUk9JRF9OT19VTkRF
RklORUQgICAgICAgICAgICR7QU5EUk9JRF9OT19VTkRFRklORUR9ICAgICAgICAgICBDQUNIRSBC
T09MICJTaG93IGFsbCB1bmRlZmluZWQgc3ltYm9scyBhcyBsaW5rZXIgZXJyb3JzIiApCi1zZXQo
IEFORFJPSURfU09fVU5ERUZJTkVEICAgICAgICAgICAke0FORFJPSURfU09fVU5ERUZJTkVEfSAg
ICAgICAgICAgQ0FDSEUgQk9PTCAiQWxsb3dzIG9yIGRpc2FsbG93cyB1bmRlZmluZWQgc3ltYm9s
cyBpbiBzaGFyZWQgbGlicmFyaWVzIiApCi1zZXQoIEFORFJPSURfRlVOQ1RJT05fTEVWRUxfTElO
S0lORyAke0FORFJPSURfRlVOQ1RJT05fTEVWRUxfTElOS0lOR30gQ0FDSEUgQk9PTCAiUHV0IGVh
Y2ggZnVuY3Rpb24gaW4gc2VwYXJhdGUgc2VjdGlvbiBhbmQgZW5hYmxlIGdhcmJhZ2UgY29sbGVj
dGlvbiBvZiB1bnVzZWQgaW5wdXQgc2VjdGlvbnMgYXQgbGluayB0aW1lIiApCi1zZXQoIEFORFJP
SURfR09MRF9MSU5LRVIgICAgICAgICAgICAke0FORFJPSURfR09MRF9MSU5LRVJ9ICAgICAgICAg
ICAgQ0FDSEUgQk9PTCAiRW5hYmxlcyBnb2xkIGxpbmtlciIgKQotc2V0KCBBTkRST0lEX05PRVhF
Q1NUQUNLICAgICAgICAgICAgJHtBTkRST0lEX05PRVhFQ1NUQUNLfSAgICAgICAgICAgIENBQ0hF
IEJPT0wgIkFsbG93cyBvciBkaXNhbGxvd3MgdW5kZWZpbmVkIHN5bWJvbHMgaW4gc2hhcmVkIGxp
YnJhcmllcyIgKQotc2V0KCBBTkRST0lEX1JFTFJPICAgICAgICAgICAgICAgICAgJHtBTkRST0lE
X1JFTFJPfSAgICAgICAgICAgICAgICAgIENBQ0hFIEJPT0wgIkVuYWJsZXMgUkVMUk8gLSBhIG1l
bW9yeSBjb3JydXB0aW9uIG1pdGlnYXRpb24gdGVjaG5pcXVlIiApCi1tYXJrX2FzX2FkdmFuY2Vk
KCBBTkRST0lEX05PX1VOREVGSU5FRCBBTkRST0lEX1NPX1VOREVGSU5FRCBBTkRST0lEX0ZVTkNU
SU9OX0xFVkVMX0xJTktJTkcgQU5EUk9JRF9HT0xEX0xJTktFUiBBTkRST0lEX05PRVhFQ1NUQUNL
IEFORFJPSURfUkVMUk8gKQotCi0jIGxpbmtlciBmbGFncwotc2V0KCBBTkRST0lEX0xJTktFUl9G
TEFHUyAiIiApCi0KLWlmKCBBUk1FQUJJX1Y3QSApCi0gIyB0aGlzIGlzICpyZXF1aXJlZCogdG8g
dXNlIHRoZSBmb2xsb3dpbmcgbGlua2VyIGZsYWdzIHRoYXQgcm91dGVzIGFyb3VuZAotICMgYSBD
UFUgYnVnIGluIHNvbWUgQ29ydGV4LUE4IGltcGxlbWVudGF0aW9uczoKLSBzZXQoIEFORFJPSURf
TElOS0VSX0ZMQUdTICIke0FORFJPSURfTElOS0VSX0ZMQUdTfSAtV2wsLS1maXgtY29ydGV4LWE4
IiApCi1lbmRpZigpCi0KLWlmKCBBTkRST0lEX05PX1VOREVGSU5FRCApCi0gaWYoIE1JUFMgKQot
ICAjIHRoZXJlIGlzIHNvbWUgc3lzcm9vdC1yZWxhdGVkIHByb2JsZW0gaW4gbWlwcyBsaW5rZXIu
Li4KLSAgaWYoIE5PVCBBTkRST0lEX1NZU1JPT1QgTUFUQ0hFUyAiWyA7XCJdIiApCi0gICBzZXQo
IEFORFJPSURfTElOS0VSX0ZMQUdTICIke0FORFJPSURfTElOS0VSX0ZMQUdTfSAtV2wsLS1uby11
bmRlZmluZWQgLVdsLC1ycGF0aC1saW5rLCR7QU5EUk9JRF9TWVNST09UfS91c3IvbGliIiApCi0g
IGVuZGlmKCkKLSBlbHNlKCkKLSAgc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRST0lE
X0xJTktFUl9GTEFHU30gLVdsLC0tbm8tdW5kZWZpbmVkIiApCi0gZW5kaWYoKQotZW5kaWYoKQot
Ci1pZiggQU5EUk9JRF9TT19VTkRFRklORUQgKQotIHNldCggQU5EUk9JRF9MSU5LRVJfRkxBR1Mg
IiR7QU5EUk9JRF9MSU5LRVJfRkxBR1N9IC1XbCwtYWxsb3ctc2hsaWItdW5kZWZpbmVkIiApCi1l
bmRpZigpCi0KLWlmKCBBTkRST0lEX0ZVTkNUSU9OX0xFVkVMX0xJTktJTkcgKQotIHNldCggQU5E
Uk9JRF9DWFhfRkxBR1MgICAgIiR7QU5EUk9JRF9DWFhfRkxBR1N9IC1mZGF0YS1zZWN0aW9ucyAt
ZmZ1bmN0aW9uLXNlY3Rpb25zIiApCi0gc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRS
T0lEX0xJTktFUl9GTEFHU30gLVdsLC0tZ2Mtc2VjdGlvbnMiICkKLWVuZGlmKCkKLQotaWYoIEFO
RFJPSURfQ09NUElMRVJfVkVSU0lPTiBWRVJTSU9OX0VRVUFMICI0LjYiICkKLSBpZiggQU5EUk9J
RF9HT0xEX0xJTktFUiBBTkQgKENNQUtFX0hPU1RfVU5JWCBPUiBBTkRST0lEX05ES19SRUxFQVNF
X05VTSBHUkVBVEVSIDgwMDIpIEFORCAoQVJNRUFCSSBPUiBBUk1FQUJJX1Y3QSBPUiBYODYpICkK
LSAgc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRST0lEX0xJTktFUl9GTEFHU30gLWZ1
c2UtbGQ9Z29sZCIgKQotIGVsc2VpZiggQU5EUk9JRF9OREtfUkVMRUFTRV9OVU0gR1JFQVRFUiA4
MDAyICkgIyBhZnRlciByOGIKLSAgc2V0KCBBTkRST0lEX0xJTktFUl9GTEFHUyAiJHtBTkRST0lE
X0xJTktFUl9GTEFHU30gLWZ1c2UtbGQ9YmZkIiApCi0gZWxzZWlmKCBBTkRST0lEX05ES19SRUxF
QVNFIFNUUkVRVUFMICJyOGIiIEFORCBBUk1FQUJJIEFORCBOT1QgX0NNQUtFX0lOX1RSWV9DT01Q
SUxFICkKLSAgbWVzc2FnZSggV0FSTklORyAiVGhlIGRlZmF1bHQgYmZkIGxpbmtlciBmcm9tIGFy
bSBHQ0MgNC42IHRvb2xjaGFpbiBjYW4gZmFpbCB3aXRoICd1bnJlc29sdmFibGUgUl9BUk1fVEhN
X0NBTEwgcmVsb2NhdGlvbicgZXJyb3IgbWVzc2FnZS4gU2VlIGh0dHBzOi8vY29kZS5nb29nbGUu
Y29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTM1MzQyCi0gIE9uIExpbnV4IGFuZCBPUyBY
IGhvc3QgcGxhdGZvcm0geW91IGNhbiB3b3JrYXJvdW5kIHRoaXMgcHJvYmxlbSB1c2luZyBnb2xk
IGxpbmtlciAoZGVmYXVsdCkuCi0gIFJlcnVuIGNtYWtlIHdpdGggLURBTkRST0lEX0dPTERfTElO
S0VSPU9OIG9wdGlvbiBpbiBjYXNlIG9mIHByb2JsZW1zLgotIiApCi0gZW5kaWYoKQotZW5kaWYo
KSAjIHZlcnNpb24gNC42Ci0KLWlmKCBBTkRST0lEX05PRVhFQ1NUQUNLICkKLSBpZiggQU5EUk9J
RF9DT01QSUxFUl9JU19DTEFORyApCi0gIHNldCggQU5EUk9JRF9DWFhfRkxBR1MgICAgIiR7QU5E
Uk9JRF9DWFhfRkxBR1N9IC1YY2xhbmcgLW1ub2V4ZWNzdGFjayIgKQotIGVsc2UoKQotICBzZXQo
IEFORFJPSURfQ1hYX0ZMQUdTICAgICIke0FORFJPSURfQ1hYX0ZMQUdTfSAtV2EsLS1ub2V4ZWNz
dGFjayIgKQotIGVuZGlmKCkKLSBzZXQoIEFORFJPSURfTElOS0VSX0ZMQUdTICIke0FORFJPSURf
TElOS0VSX0ZMQUdTfSAtV2wsLXosbm9leGVjc3RhY2siICkKLWVuZGlmKCkKLQotaWYoIEFORFJP
SURfUkVMUk8gKQotIHNldCggQU5EUk9JRF9MSU5LRVJfRkxBR1MgIiR7QU5EUk9JRF9MSU5LRVJf
RkxBR1N9IC1XbCwteixyZWxybyAtV2wsLXosbm93IiApCi1lbmRpZigpCi0KLWlmKCBBTkRST0lE
X0NPTVBJTEVSX0lTX0NMQU5HICkKLSBzZXQoIEFORFJPSURfQ1hYX0ZMQUdTICItdGFyZ2V0ICR7
QU5EUk9JRF9MTFZNX1RSSVBMRX0gLVF1bnVzZWQtYXJndW1lbnRzICR7QU5EUk9JRF9DWFhfRkxB
R1N9IiApCi0gaWYoIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgKQotICBzZXQoIEFORFJPSURfQ1hY
X0ZMQUdTICItZ2NjLXRvb2xjaGFpbiAke0FORFJPSURfVE9PTENIQUlOX1JPT1R9ICR7QU5EUk9J
RF9DWFhfRkxBR1N9IiApCi0gZW5kaWYoKQotZW5kaWYoKQotCi0jIGNhY2hlIGZsYWdzCi1zZXQo
IENNQUtFX0NYWF9GTEFHUyAgICAgICAgICAgIiIgICAgICAgICAgICAgICAgICAgICAgICBDQUNI
RSBTVFJJTkcgImMrKyBmbGFncyIgKQotc2V0KCBDTUFLRV9DX0ZMQUdTICAgICAgICAgICAgICIi
ICAgICAgICAgICAgICAgICAgICAgICAgQ0FDSEUgU1RSSU5HICJjIGZsYWdzIiApCi1zZXQoIENN
QUtFX0NYWF9GTEFHU19SRUxFQVNFICAgIi1PMyAtRE5ERUJVRyIgICAgICAgICAgICBDQUNIRSBT
VFJJTkcgImMrKyBSZWxlYXNlIGZsYWdzIiApCi1zZXQoIENNQUtFX0NfRkxBR1NfUkVMRUFTRSAg
ICAgIi1PMyAtRE5ERUJVRyIgICAgICAgICAgICBDQUNIRSBTVFJJTkcgImMgUmVsZWFzZSBmbGFn
cyIgKQotc2V0KCBDTUFLRV9DWFhfRkxBR1NfREVCVUcgICAgICItTzAgLWcgLURERUJVRyAtRF9E
RUJVRyIgQ0FDSEUgU1RSSU5HICJjKysgRGVidWcgZmxhZ3MiICkKLXNldCggQ01BS0VfQ19GTEFH
U19ERUJVRyAgICAgICAiLU8wIC1nIC1EREVCVUcgLURfREVCVUciIENBQ0hFIFNUUklORyAiYyBE
ZWJ1ZyBmbGFncyIgKQotc2V0KCBDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTICIiICAgICAgICAg
ICAgICAgICAgICAgICAgQ0FDSEUgU1RSSU5HICJzaGFyZWQgbGlua2VyIGZsYWdzIiApCi1zZXQo
IENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MgIiIgICAgICAgICAgICAgICAgICAgICAgICBDQUNI
RSBTVFJJTkcgIm1vZHVsZSBsaW5rZXIgZmxhZ3MiICkKLXNldCggQ01BS0VfRVhFX0xJTktFUl9G
TEFHUyAgICAiLVdsLC16LG5vY29weXJlbG9jIiAgICAgIENBQ0hFIFNUUklORyAiZXhlY3V0YWJs
ZSBsaW5rZXIgZmxhZ3MiICkKLQotIyBwdXQgZmxhZ3MgdG8gY2FjaGUgKGZvciBkZWJ1ZyBwdXJw
b3NlIG9ubHkpCi1zZXQoIEFORFJPSURfQ1hYX0ZMQUdTICAgICAgICAgIiR7QU5EUk9JRF9DWFhf
RkxBR1N9IiAgICAgICAgIENBQ0hFIElOVEVSTkFMICJBbmRyb2lkIHNwZWNpZmljIGMvYysrIGZs
YWdzIiApCi1zZXQoIEFORFJPSURfQ1hYX0ZMQUdTX1JFTEVBU0UgIiR7QU5EUk9JRF9DWFhfRkxB
R1NfUkVMRUFTRX0iIENBQ0hFIElOVEVSTkFMICJBbmRyb2lkIHNwZWNpZmljIGMvYysrIFJlbGVh
c2UgZmxhZ3MiICkKLXNldCggQU5EUk9JRF9DWFhfRkxBR1NfREVCVUcgICAiJHtBTkRST0lEX0NY
WF9GTEFHU19ERUJVR30iICAgQ0FDSEUgSU5URVJOQUwgIkFuZHJvaWQgc3BlY2lmaWMgYy9jKysg
RGVidWcgZmxhZ3MiICkKLXNldCggQU5EUk9JRF9MSU5LRVJfRkxBR1MgICAgICAiJHtBTkRST0lE
X0xJTktFUl9GTEFHU30iICAgICAgQ0FDSEUgSU5URVJOQUwgIkFuZHJvaWQgc3BlY2lmaWMgYy9j
KysgbGlua2VyIGZsYWdzIiApCi0KLSMgZmluaXNoIGZsYWdzCi1zZXQoIENNQUtFX0NYWF9GTEFH
UyAgICAgICAgICAgIiR7QU5EUk9JRF9DWFhfRkxBR1N9ICR7Q01BS0VfQ1hYX0ZMQUdTfSIgKQot
c2V0KCBDTUFLRV9DX0ZMQUdTICAgICAgICAgICAgICIke0FORFJPSURfQ1hYX0ZMQUdTfSAke0NN
QUtFX0NfRkxBR1N9IiApCi1zZXQoIENNQUtFX0NYWF9GTEFHU19SRUxFQVNFICAgIiR7QU5EUk9J
RF9DWFhfRkxBR1NfUkVMRUFTRX0gJHtDTUFLRV9DWFhfRkxBR1NfUkVMRUFTRX0iICkKLXNldCgg
Q01BS0VfQ19GTEFHU19SRUxFQVNFICAgICAiJHtBTkRST0lEX0NYWF9GTEFHU19SRUxFQVNFfSAk
e0NNQUtFX0NfRkxBR1NfUkVMRUFTRX0iICkKLXNldCggQ01BS0VfQ1hYX0ZMQUdTX0RFQlVHICAg
ICAiJHtBTkRST0lEX0NYWF9GTEFHU19ERUJVR30gJHtDTUFLRV9DWFhfRkxBR1NfREVCVUd9IiAp
Ci1zZXQoIENNQUtFX0NfRkxBR1NfREVCVUcgICAgICAgIiR7QU5EUk9JRF9DWFhfRkxBR1NfREVC
VUd9ICR7Q01BS0VfQ19GTEFHU19ERUJVR30iICkKLXNldCggQ01BS0VfU0hBUkVEX0xJTktFUl9G
TEFHUyAiJHtBTkRST0lEX0xJTktFUl9GTEFHU30gJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdT
fSIgKQotc2V0KCBDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTICIke0FORFJPSURfTElOS0VSX0ZM
QUdTfSAke0NNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1N9IiApCi1zZXQoIENNQUtFX0VYRV9MSU5L
RVJfRkxBR1MgICAgIiR7QU5EUk9JRF9MSU5LRVJfRkxBR1N9ICR7Q01BS0VfRVhFX0xJTktFUl9G
TEFHU30iICkKLQotaWYoIE1JUFMgQU5EIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgQU5EIEFORFJP
SURfTkRLX1JFTEVBU0UgU1RSRVFVQUwgInI4IiApCi0gc2V0KCBDTUFLRV9TSEFSRURfTElOS0VS
X0ZMQUdTICItV2wsLVQsJHtBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEh9LyR7QU5EUk9JRF9H
Q0NfVE9PTENIQUlOX05BTUV9L21pcHNlbGYueHNjICR7Q01BS0VfU0hBUkVEX0xJTktFUl9GTEFH
U30iICkKLSBzZXQoIENNQUtFX01PRFVMRV9MSU5LRVJfRkxBR1MgIi1XbCwtVCwke0FORFJPSURf
TkRLX1RPT0xDSEFJTlNfUEFUSH0vJHtBTkRST0lEX0dDQ19UT09MQ0hBSU5fTkFNRX0vbWlwc2Vs
Zi54c2MgJHtDTUFLRV9NT0RVTEVfTElOS0VSX0ZMQUdTfSIgKQotIHNldCggQ01BS0VfRVhFX0xJ
TktFUl9GTEFHUyAgICAiLVdsLC1ULCR7QU5EUk9JRF9OREtfVE9PTENIQUlOU19QQVRIfS8ke0FO
RFJPSURfR0NDX1RPT0xDSEFJTl9OQU1FfS9taXBzZWxmLnggJHtDTUFLRV9FWEVfTElOS0VSX0ZM
QUdTfSIgKQotZW5kaWYoKQotCi0jIHBpZS9waWMKLWlmKCBOT1QgKEFORFJPSURfTkFUSVZFX0FQ
SV9MRVZFTCBMRVNTIDE2KSBBTkQgKE5PVCBERUZJTkVEIEFORFJPSURfQVBQX1BJRSBPUiBBTkRS
T0lEX0FQUF9QSUUpIEFORCAoQ01BS0VfVkVSU0lPTiBWRVJTSU9OX0dSRUFURVIgMi44LjgpICkK
LSBzZXQoIENNQUtFX1BPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgVFJVRSApCi0gc2V0KCBDTUFL
RV9FWEVfTElOS0VSX0ZMQUdTICIke0NNQUtFX0VYRV9MSU5LRVJfRkxBR1N9IC1mUElFIC1waWUi
KQotZWxzZSgpCi0gc2V0KCBDTUFLRV9QT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFIEZBTFNFICkK
LSBzZXQoIENNQUtFX0NYWF9GTEFHUyAiLWZwaWMgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gc2V0
KCBDTUFLRV9DX0ZMQUdTICAgIi1mcGljICR7Q01BS0VfQ19GTEFHU30iICkKLWVuZGlmKCkKLQot
IyBjb25maWd1cmUgcnR0aQotaWYoIERFRklORUQgQU5EUk9JRF9SVFRJIEFORCBBTkRST0lEX1NU
TF9GT1JDRV9GRUFUVVJFUyApCi0gaWYoIEFORFJPSURfUlRUSSApCi0gIHNldCggQ01BS0VfQ1hY
X0ZMQUdTICItZnJ0dGkgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gZWxzZSgpCi0gIHNldCggQ01B
S0VfQ1hYX0ZMQUdTICItZm5vLXJ0dGkgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gZW5kaWYoKQot
ZW5kaWYoKQotCi0jIGNvbmZpZ3VyZSBleGNlcHRpb3MKLWlmKCBERUZJTkVEIEFORFJPSURfRVhD
RVBUSU9OUyBBTkQgQU5EUk9JRF9TVExfRk9SQ0VfRkVBVFVSRVMgKQotIGlmKCBBTkRST0lEX0VY
Q0VQVElPTlMgKQotICBzZXQoIENNQUtFX0NYWF9GTEFHUyAiLWZleGNlcHRpb25zICR7Q01BS0Vf
Q1hYX0ZMQUdTfSIgKQotICBzZXQoIENNQUtFX0NfRkxBR1MgIi1mZXhjZXB0aW9ucyAke0NNQUtF
X0NfRkxBR1N9IiApCi0gZWxzZSgpCi0gIHNldCggQ01BS0VfQ1hYX0ZMQUdTICItZm5vLWV4Y2Vw
dGlvbnMgJHtDTUFLRV9DWFhfRkxBR1N9IiApCi0gIHNldCggQ01BS0VfQ19GTEFHUyAiLWZuby1l
eGNlcHRpb25zICR7Q01BS0VfQ19GTEFHU30iICkKLSBlbmRpZigpCi1lbmRpZigpCi0KLSMgZ2xv
YmFsIGluY2x1ZGVzIGFuZCBsaW5rIGRpcmVjdG9yaWVzCi1pbmNsdWRlX2RpcmVjdG9yaWVzKCBT
WVNURU0gIiR7QU5EUk9JRF9TWVNST09UfS91c3IvaW5jbHVkZSIgJHtBTkRST0lEX1NUTF9JTkNM
VURFX0RJUlN9ICkKLWdldF9maWxlbmFtZV9jb21wb25lbnQoX19hbmRyb2lkX2luc3RhbGxfcGF0
aCAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0vbGlicy8ke0FORFJPSURfTkRLX0FCSV9OQU1FfSIg
QUJTT0xVVEUpICMgYXZvaWQgQ01QMDAxNSBwb2xpY3kgd2FybmluZwotbGlua19kaXJlY3Rvcmll
cyggIiR7X19hbmRyb2lkX2luc3RhbGxfcGF0aH0iICkKLQotIyBkZXRlY3QgaWYgbmVlZCBsaW5r
IGNydGJlZ2luX3NvLm8gZXhwbGljaXRseQotaWYoIE5PVCBERUZJTkVEIEFORFJPSURfRVhQTElD
SVRfQ1JUX0xJTksgKQotIHNldCggX19jbWQgIiR7Q01BS0VfQ1hYX0NSRUFURV9TSEFSRURfTElC
UkFSWX0iICkKLSBzdHJpbmcoIFJFUExBQ0UgIjxDTUFLRV9DWFhfQ09NUElMRVI+IiAiJHtDTUFL
RV9DWFhfQ09NUElMRVJ9ICR7Q01BS0VfQ1hYX0NPTVBJTEVSX0FSRzF9IiBfX2NtZCAiJHtfX2Nt
ZH0iICkKLSBzdHJpbmcoIFJFUExBQ0UgIjxDTUFLRV9DX0NPTVBJTEVSPiIgICAiJHtDTUFLRV9D
X0NPTVBJTEVSfSAke0NNQUtFX0NfQ09NUElMRVJfQVJHMX0iICAgX19jbWQgIiR7X19jbWR9IiAp
Ci0gc3RyaW5nKCBSRVBMQUNFICI8Q01BS0VfU0hBUkVEX0xJQlJBUllfQ1hYX0ZMQUdTPiIgIiR7
Q01BS0VfQ1hYX0ZMQUdTfSIgX19jbWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8
TEFOR1VBR0VfQ09NUElMRV9GTEFHUz4iICIiIF9fY21kICIke19fY21kfSIgKQotIHN0cmluZygg
UkVQTEFDRSAiPExJTktfRkxBR1M+IiAiJHtDTUFLRV9TSEFSRURfTElOS0VSX0ZMQUdTfSIgX19j
bWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8Q01BS0VfU0hBUkVEX0xJQlJBUllf
Q1JFQVRFX0NYWF9GTEFHUz4iICItc2hhcmVkIiBfX2NtZCAiJHtfX2NtZH0iICkKLSBzdHJpbmco
IFJFUExBQ0UgIjxDTUFLRV9TSEFSRURfTElCUkFSWV9TT05BTUVfQ1hYX0ZMQUc+IiAiIiBfX2Nt
ZCAiJHtfX2NtZH0iICkKLSBzdHJpbmcoIFJFUExBQ0UgIjxUQVJHRVRfU09OQU1FPiIgIiIgX19j
bWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8VEFSR0VUPiIgIiR7Q01BS0VfQklO
QVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9SWX0vdG9vbGNoYWluX2NydGxpbmtfdGVzdC5z
byIgX19jbWQgIiR7X19jbWR9IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8T0JKRUNUUz4iICJcIiR7
QU5EUk9JRF9TWVNST09UfS91c3IvbGliL2NydGJlZ2luX3NvLm9cIiIgX19jbWQgIiR7X19jbWR9
IiApCi0gc3RyaW5nKCBSRVBMQUNFICI8TElOS19MSUJSQVJJRVM+IiAiIiBfX2NtZCAiJHtfX2Nt
ZH0iICkKLSBzZXBhcmF0ZV9hcmd1bWVudHMoIF9fY21kICkKLSBmb3JlYWNoKCBfX3ZhciBBTkRS
T0lEX05ESyBBTkRST0lEX05ES19UT09MQ0hBSU5TX1BBVEggQU5EUk9JRF9TVEFOREFMT05FX1RP
T0xDSEFJTiApCi0gIGlmKCAke19fdmFyfSApCi0gICBzZXQoIF9fdG1wICIkeyR7X192YXJ9fSIg
KQotICAgc2VwYXJhdGVfYXJndW1lbnRzKCBfX3RtcCApCi0gICBzdHJpbmcoIFJFUExBQ0UgIiR7
X190bXB9IiAiJHske19fdmFyfX0iIF9fY21kICIke19fY21kfSIpCi0gIGVuZGlmKCkKLSBlbmRm
b3JlYWNoKCkKLSBzdHJpbmcoIFJFUExBQ0UgIiciICIiIF9fY21kICIke19fY21kfSIgKQotIHN0
cmluZyggUkVQTEFDRSAiXCIiICIiIF9fY21kICIke19fY21kfSIgKQotIGV4ZWN1dGVfcHJvY2Vz
cyggQ09NTUFORCAke19fY21kfSBSRVNVTFRfVkFSSUFCTEUgX19jbWRfcmVzdWx0IE9VVFBVVF9R
VUlFVCBFUlJPUl9RVUlFVCApCi0gaWYoIF9fY21kX3Jlc3VsdCBFUVVBTCAwICkKLSAgc2V0KCBB
TkRST0lEX0VYUExJQ0lUX0NSVF9MSU5LIE9OICkKLSBlbHNlKCkKLSAgc2V0KCBBTkRST0lEX0VY
UExJQ0lUX0NSVF9MSU5LIE9GRiApCi0gZW5kaWYoKQotZW5kaWYoKQotCi1pZiggQU5EUk9JRF9F
WFBMSUNJVF9DUlRfTElOSyApCi0gc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJFRF9MSUJSQVJZ
ICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX0xJQlJBUll9IFwiJHtBTkRST0lEX1NZU1JPT1R9
L3Vzci9saWIvY3J0YmVnaW5fc28ub1wiIiApCi0gc2V0KCBDTUFLRV9DWFhfQ1JFQVRFX1NIQVJF
RF9NT0RVTEUgICIke0NNQUtFX0NYWF9DUkVBVEVfU0hBUkVEX01PRFVMRX0gXCIke0FORFJPSURf
U1lTUk9PVH0vdXNyL2xpYi9jcnRiZWdpbl9zby5vXCIiICkKLWVuZGlmKCkKLQotIyBzZXR1cCBv
dXRwdXQgZGlyZWN0b3JpZXMKLXNldCggQ01BS0VfSU5TVEFMTF9QUkVGSVggIiR7QU5EUk9JRF9U
T09MQ0hBSU5fUk9PVH0vdXNlciIgQ0FDSEUgU1RSSU5HICJwYXRoIGZvciBpbnN0YWxsaW5nIiAp
Ci0KLWlmKCBERUZJTkVEIExJQlJBUllfT1VUUFVUX1BBVEhfUk9PVAotICAgICAgT1IgRVhJU1RT
ICIke0NNQUtFX1NPVVJDRV9ESVJ9L0FuZHJvaWRNYW5pZmVzdC54bWwiCi0gICAgICBPUiAoRVhJ
U1RTICIke0NNQUtFX1NPVVJDRV9ESVJ9Ly4uL0FuZHJvaWRNYW5pZmVzdC54bWwiIEFORCBFWElT
VFMgIiR7Q01BS0VfU09VUkNFX0RJUn0vLi4vam5pLyIpICkKLSAgc2V0KCBMSUJSQVJZX09VVFBV
VF9QQVRIX1JPT1QgJHtDTUFLRV9TT1VSQ0VfRElSfSBDQUNIRSBQQVRIICJSb290IGZvciBiaW5h
cmllcyBvdXRwdXQsIHNldCB0aGlzIHRvIGNoYW5nZSB3aGVyZSBBbmRyb2lkIGxpYnMgYXJlIGlu
c3RhbGxlZCB0byIgKQotICBpZiggTk9UIF9DTUFLRV9JTl9UUllfQ09NUElMRSApCi0gICAgaWYo
IEVYSVNUUyAiJHtDTUFLRV9TT1VSQ0VfRElSfS9qbmkvQ01ha2VMaXN0cy50eHQiICkKLSAgICAg
IHNldCggRVhFQ1VUQUJMRV9PVVRQVVRfUEFUSCAiJHtMSUJSQVJZX09VVFBVVF9QQVRIX1JPT1R9
L2Jpbi8ke0FORFJPSURfTkRLX0FCSV9OQU1FfSIgQ0FDSEUgUEFUSCAiT3V0cHV0IGRpcmVjdG9y
eSBmb3IgYXBwbGljYXRpb25zIiApCi0gICAgZWxzZSgpCi0gICAgICBzZXQoIEVYRUNVVEFCTEVf
T1VUUFVUX1BBVEggIiR7TElCUkFSWV9PVVRQVVRfUEFUSF9ST09UfS9iaW4iIENBQ0hFIFBBVEgg
Ik91dHB1dCBkaXJlY3RvcnkgZm9yIGFwcGxpY2F0aW9ucyIgKQotICAgIGVuZGlmKCkKLSAgICBz
ZXQoIExJQlJBUllfT1VUUFVUX1BBVEggIiR7TElCUkFSWV9PVVRQVVRfUEFUSF9ST09UfS9saWJz
LyR7QU5EUk9JRF9OREtfQUJJX05BTUV9IiBDQUNIRSBQQVRIICJPdXRwdXQgZGlyZWN0b3J5IGZv
ciBBbmRyb2lkIGxpYnMiICkKLSAgZW5kaWYoKQotZW5kaWYoKQotCi0jIGNvcHkgc2hhZWQgc3Rs
IGxpYnJhcnkgdG8gYnVpbGQgZGlyZWN0b3J5Ci1pZiggTk9UIF9DTUFLRV9JTl9UUllfQ09NUElM
RSBBTkQgX19saWJzdGwgTUFUQ0hFUyAiWy5dc28kIiBBTkQgREVGSU5FRCBMSUJSQVJZX09VVFBV
VF9QQVRIICkKLSAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudCggX19saWJzdGxuYW1lICIke19fbGli
c3RsfSIgTkFNRSApCi0gIGV4ZWN1dGVfcHJvY2VzcyggQ09NTUFORCAiJHtDTUFLRV9DT01NQU5E
fSIgLUUgY29weV9pZl9kaWZmZXJlbnQgIiR7X19saWJzdGx9IiAiJHtMSUJSQVJZX09VVFBVVF9Q
QVRIfS8ke19fbGlic3RsbmFtZX0iIFJFU1VMVF9WQVJJQUJMRSBfX2ZpbGVDb3B5UHJvY2VzcyAp
Ci0gIGlmKCBOT1QgX19maWxlQ29weVByb2Nlc3MgRVFVQUwgMCBPUiBOT1QgRVhJU1RTICIke0xJ
QlJBUllfT1VUUFVUX1BBVEh9LyR7X19saWJzdGxuYW1lfSIpCi0gICAgbWVzc2FnZSggU0VORF9F
UlJPUiAiRmFpbGVkIGNvcHlpbmcgb2YgJHtfX2xpYnN0bH0gdG8gdGhlICR7TElCUkFSWV9PVVRQ
VVRfUEFUSH0vJHtfX2xpYnN0bG5hbWV9IiApCi0gIGVuZGlmKCkKLSAgdW5zZXQoIF9fZmlsZUNv
cHlQcm9jZXNzICkKLSAgdW5zZXQoIF9fbGlic3RsbmFtZSApCi1lbmRpZigpCi0KLQotIyBzZXQg
dGhlc2UgZ2xvYmFsIGZsYWdzIGZvciBjbWFrZSBjbGllbnQgc2NyaXB0cyB0byBjaGFuZ2UgYmVo
YXZpb3IKLXNldCggQU5EUk9JRCBUcnVlICkKLXNldCggQlVJTERfQU5EUk9JRCBUcnVlICkKLQot
IyB3aGVyZSBpcyB0aGUgdGFyZ2V0IGVudmlyb25tZW50Ci1zZXQoIENNQUtFX0ZJTkRfUk9PVF9Q
QVRIICIke0FORFJPSURfVE9PTENIQUlOX1JPT1R9L2JpbiIgIiR7QU5EUk9JRF9UT09MQ0hBSU5f
Uk9PVH0vJHtBTkRST0lEX1RPT0xDSEFJTl9NQUNISU5FX05BTUV9IiAiJHtBTkRST0lEX1NZU1JP
T1R9IiAiJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iICIke0NNQUtFX0lOU1RBTExfUFJFRklYfS9z
aGFyZSIgKQotCi0jIG9ubHkgc2VhcmNoIGZvciBsaWJyYXJpZXMgYW5kIGluY2x1ZGVzIGluIHRo
ZSBuZGsgdG9vbGNoYWluCi1zZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBP
TkxZICkKLXNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQotc2V0
KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgT05MWSApCi0KLQotIyBtYWNybyB0
byBmaW5kIHBhY2thZ2VzIG9uIHRoZSBob3N0IE9TCi1tYWNybyggZmluZF9ob3N0X3BhY2thZ2Ug
KQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFNIE5FVkVSICkKLSBzZXQo
IENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBORVZFUiApCi0gc2V0KCBDTUFLRV9G
SU5EX1JPT1RfUEFUSF9NT0RFX0lOQ0xVREUgTkVWRVIgKQotIGlmKCBDTUFLRV9IT1NUX1dJTjMy
ICkKLSAgU0VUKCBXSU4zMiAxICkKLSAgU0VUKCBVTklYICkKLSBlbHNlaWYoIENNQUtFX0hPU1Rf
QVBQTEUgKQotICBTRVQoIEFQUExFIDEgKQotICBTRVQoIFVOSVggKQotIGVuZGlmKCkKLSBmaW5k
X3BhY2thZ2UoICR7QVJHTn0gKQotIFNFVCggV0lOMzIgKQotIFNFVCggQVBQTEUgKQotIFNFVCgg
VU5JWCAxICkKLSBzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfUFJPR1JBTSBPTkxZICkK
LSBzZXQoIENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfTElCUkFSWSBPTkxZICkKLSBzZXQoIENN
QUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBPTkxZICkKLWVuZG1hY3JvKCkKLQotCi0j
IG1hY3JvIHRvIGZpbmQgcHJvZ3JhbXMgb24gdGhlIGhvc3QgT1MKLW1hY3JvKCBmaW5kX2hvc3Rf
cHJvZ3JhbSApCi0gc2V0KCBDTUFLRV9GSU5EX1JPT1RfUEFUSF9NT0RFX1BST0dSQU0gTkVWRVIg
KQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE5FVkVSICkKLSBzZXQo
IENNQUtFX0ZJTkRfUk9PVF9QQVRIX01PREVfSU5DTFVERSBORVZFUiApCi0gaWYoIENNQUtFX0hP
U1RfV0lOMzIgKQotICBTRVQoIFdJTjMyIDEgKQotICBTRVQoIFVOSVggKQotIGVsc2VpZiggQ01B
S0VfSE9TVF9BUFBMRSApCi0gIFNFVCggQVBQTEUgMSApCi0gIFNFVCggVU5JWCApCi0gZW5kaWYo
KQotIGZpbmRfcHJvZ3JhbSggJHtBUkdOfSApCi0gU0VUKCBXSU4zMiApCi0gU0VUKCBBUFBMRSAp
Ci0gU0VUKCBVTklYIDEgKQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9QUk9HUkFN
IE9OTFkgKQotIHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9MSUJSQVJZIE9OTFkgKQot
IHNldCggQ01BS0VfRklORF9ST09UX1BBVEhfTU9ERV9JTkNMVURFIE9OTFkgKQotZW5kbWFjcm8o
KQotCi0KLSMgZXhwb3J0IHRvb2xjaGFpbiBzZXR0aW5ncyBmb3IgdGhlIHRyeV9jb21waWxlKCkg
Y29tbWFuZAotaWYoIE5PVCBfQ01BS0VfSU5fVFJZX0NPTVBJTEUgKQotIHNldCggX190b29sY2hh
aW5fY29uZmlnICIiKQotIGZvcmVhY2goIF9fdmFyIE5ES19DQ0FDSEUgIExJQlJBUllfT1VUUFVU
X1BBVEhfUk9PVCAgQU5EUk9JRF9GT1JCSURfU1lHV0lOCi0gICAgICAgICAgICAgICAgQU5EUk9J
RF9OREtfSE9TVF9YNjQKLSAgICAgICAgICAgICAgICBBTkRST0lEX05ESwotICAgICAgICAgICAg
ICAgIEFORFJPSURfTkRLX0xBWU9VVAotICAgICAgICAgICAgICAgIEFORFJPSURfU1RBTkRBTE9O
RV9UT09MQ0hBSU4KLSAgICAgICAgICAgICAgICBBTkRST0lEX1RPT0xDSEFJTl9OQU1FCi0gICAg
ICAgICAgICAgICAgQU5EUk9JRF9BQkkKLSAgICAgICAgICAgICAgICBBTkRST0lEX05BVElWRV9B
UElfTEVWRUwKLSAgICAgICAgICAgICAgICBBTkRST0lEX1NUTAotICAgICAgICAgICAgICAgIEFO
RFJPSURfU1RMX0ZPUkNFX0ZFQVRVUkVTCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9GT1JDRV9B
Uk1fQlVJTEQKLSAgICAgICAgICAgICAgICBBTkRST0lEX05PX1VOREVGSU5FRAotICAgICAgICAg
ICAgICAgIEFORFJPSURfU09fVU5ERUZJTkVECi0gICAgICAgICAgICAgICAgQU5EUk9JRF9GVU5D
VElPTl9MRVZFTF9MSU5LSU5HCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9HT0xEX0xJTktFUgot
ICAgICAgICAgICAgICAgIEFORFJPSURfTk9FWEVDU1RBQ0sKLSAgICAgICAgICAgICAgICBBTkRS
T0lEX1JFTFJPCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9MSUJNX1BBVEgKLSAgICAgICAgICAg
ICAgICBBTkRST0lEX0VYUExJQ0lUX0NSVF9MSU5LCi0gICAgICAgICAgICAgICAgQU5EUk9JRF9B
UFBfUElFCi0gICAgICAgICAgICAgICAgKQotICBpZiggREVGSU5FRCAke19fdmFyfSApCi0gICBp
ZiggJHtfX3Zhcn0gTUFUQ0hFUyAiICIpCi0gICAgc2V0KCBfX3Rvb2xjaGFpbl9jb25maWcgIiR7
X190b29sY2hhaW5fY29uZmlnfXNldCggJHtfX3Zhcn0gXCIkeyR7X192YXJ9fVwiIENBQ0hFIElO
VEVSTkFMIFwiXCIgKVxuIiApCi0gICBlbHNlKCkKLSAgICBzZXQoIF9fdG9vbGNoYWluX2NvbmZp
ZyAiJHtfX3Rvb2xjaGFpbl9jb25maWd9c2V0KCAke19fdmFyfSAkeyR7X192YXJ9fSBDQUNIRSBJ
TlRFUk5BTCBcIlwiIClcbiIgKQotICAgZW5kaWYoKQotICBlbmRpZigpCi0gZW5kZm9yZWFjaCgp
Ci0gZmlsZSggV1JJVEUgIiR7Q01BS0VfQklOQVJZX0RJUn0ke0NNQUtFX0ZJTEVTX0RJUkVDVE9S
WX0vYW5kcm9pZC50b29sY2hhaW4uY29uZmlnLmNtYWtlIiAiJHtfX3Rvb2xjaGFpbl9jb25maWd9
IiApCi0gdW5zZXQoIF9fdG9vbGNoYWluX2NvbmZpZyApCi1lbmRpZigpCi0KLQotIyBmb3JjZSBj
bWFrZSB0byBwcm9kdWNlIC8gaW5zdGVhZCBvZiBcIGluIGJ1aWxkIGNvbW1hbmRzIGZvciBOaW5q
YSBnZW5lcmF0b3IKLWlmKCBDTUFLRV9HRU5FUkFUT1IgTUFUQ0hFUyAiTmluamEiIEFORCBDTUFL
RV9IT1NUX1dJTjMyICkKLSAjIGl0IGlzIGEgYmFkIGhhY2sgYWZ0ZXIgYWxsCi0gIyBDTWFrZSBn
ZW5lcmF0ZXMgTmluamEgbWFrZWZpbGVzIHdpdGggVU5JWCBwYXRocyBvbmx5IGlmIGl0IHRoaW5r
cyB0aGF0IHdlIGFyZSBnb2luZyB0byBidWlsZCB3aXRoIE1pbkdXCi0gc2V0KCBDTUFLRV9DT01Q
SUxFUl9JU19NSU5HVyBUUlVFICkgIyB0ZWxsIENNYWtlIHRoYXQgd2UgYXJlIE1pbkdXCi0gc2V0
KCBDTUFLRV9DUk9TU0NPTVBJTElORyBUUlVFICkgICAgIyBzdG9wIHJlY3Vyc2lvbgotIGVuYWJs
ZV9sYW5ndWFnZSggQyApCi0gZW5hYmxlX2xhbmd1YWdlKCBDWFggKQotICMgdW5zZXQoIENNQUtF
X0NPTVBJTEVSX0lTX01JTkdXICkgIyBjYW4ndCB1bnNldCBiZWNhdXNlIENNYWtlIGRvZXMgbm90
IGNvbnZlcnQgYmFjay1zbGFzaGVzIGluIHJlc3BvbnNlIGZpbGVzIHdpdGhvdXQgaXQKLSB1bnNl
dCggTUlOR1cgKQotZW5kaWYoKQotCi0KLSMgVmFyaWFibGVzIGNvbnRyb2xsaW5nIGJlaGF2aW9y
IG9yIHNldCBieSBjbWFrZSB0b29sY2hhaW46Ci0jICAgQU5EUk9JRF9BQkkgOiAiYXJtZWFiaS12
N2EiIChkZWZhdWx0KSwgImFybWVhYmkiLCAiYXJtZWFiaS12N2Egd2l0aCBORU9OIiwgImFybWVh
YmktdjdhIHdpdGggVkZQVjMiLCAiYXJtZWFiaS12NiB3aXRoIFZGUCIsICJ4ODYiLCAibWlwcyIs
ICJhcm02NC12OGEiLCAieDg2XzY0IiwgIm1pcHM2NCIKLSMgICBBTkRST0lEX05BVElWRV9BUElf
TEVWRUwgOiAzLDQsNSw4LDksMTQsMTUsMTYsMTcsMTgsMTksMjEgKGRlcGVuZHMgb24gTkRLIHZl
cnNpb24pCi0jICAgQU5EUk9JRF9TVEwgOiBnbnVzdGxfc3RhdGljL2dudXN0bF9zaGFyZWQvc3Rs
cG9ydF9zdGF0aWMvc3RscG9ydF9zaGFyZWQvZ2FiaSsrX3N0YXRpYy9nYWJpKytfc2hhcmVkL3N5
c3RlbV9yZS9zeXN0ZW0vbm9uZQotIyAgIEFORFJPSURfRk9SQklEX1NZR1dJTiA6IE9OL09GRgot
IyAgIEFORFJPSURfTk9fVU5ERUZJTkVEIDogT04vT0ZGCi0jICAgQU5EUk9JRF9TT19VTkRFRklO
RUQgOiBPRkYvT04gIChkZWZhdWx0IGRlcGVuZHMgb24gTkRLIHZlcnNpb24pCi0jICAgQU5EUk9J
RF9GVU5DVElPTl9MRVZFTF9MSU5LSU5HIDogT04vT0ZGCi0jICAgQU5EUk9JRF9HT0xEX0xJTktF
UiA6IE9OL09GRgotIyAgIEFORFJPSURfTk9FWEVDU1RBQ0sgOiBPTi9PRkYKLSMgICBBTkRST0lE
X1JFTFJPIDogT04vT0ZGCi0jICAgQU5EUk9JRF9GT1JDRV9BUk1fQlVJTEQgOiBPTi9PRkYKLSMg
ICBBTkRST0lEX1NUTF9GT1JDRV9GRUFUVVJFUyA6IE9OL09GRgotIyAgIEFORFJPSURfTElCTV9Q
QVRIIDogcGF0aCB0byBsaWJtLnNvIChzZXQgdG8gc29tZXRoaW5nIGxpa2UgJChUT1ApL291dC90
YXJnZXQvcHJvZHVjdC88cHJvZHVjdF9uYW1lPi9vYmovbGliL2xpYm0uc28pIHRvIHdvcmthcm91
bmQgdW5yZXNvbHZlZCBgc2luY29zYAotIyBDYW4gYmUgc2V0IG9ubHkgYXQgdGhlIGZpcnN0IHJ1
bjoKLSMgICBBTkRST0lEX05ESyA6IHBhdGggdG8geW91ciBOREsgaW5zdGFsbAotIyAgIE5ES19D
Q0FDSEUgOiBwYXRoIHRvIHlvdXIgY2NhY2hlIGV4ZWN1dGFibGUKLSMgICBBTkRST0lEX1RPT0xD
SEFJTl9OQU1FIDogdGhlIE5ESyBuYW1lIG9mIGNvbXBpbGVyIHRvb2xjaGFpbgotIyAgIEFORFJP
SURfTkRLX0hPU1RfWDY0IDogdHJ5IHRvIHVzZSB4ODZfNjQgdG9vbGNoYWluIChkZWZhdWx0IGZv
ciB4NjQgaG9zdCBzeXN0ZW1zKQotIyAgIEFORFJPSURfTkRLX0xBWU9VVCA6IHRoZSBpbm5lciBO
REsgc3RydWN0dXJlIChSRUxFQVNFLCBMSU5BUk8sIEFORFJPSUQpCi0jICAgTElCUkFSWV9PVVRQ
VVRfUEFUSF9ST09UIDogPGFueSB2YWxpZCBwYXRoPgotIyAgIEFORFJPSURfU1RBTkRBTE9ORV9U
T09MQ0hBSU4KLSMKLSMgUHJpbWFyeSByZWFkLW9ubHkgdmFyaWFibGVzOgotIyAgIEFORFJPSUQg
OiBhbHdheXMgVFJVRQotIyAgIEFSTUVBQkkgOiBUUlVFIGZvciBhcm0gdjYgYW5kIG9sZGVyIGRl
dmljZXMKLSMgICBBUk1FQUJJX1Y2IDogVFJVRSBmb3IgYXJtIHY2Ci0jICAgQVJNRUFCSV9WN0Eg
OiBUUlVFIGZvciBhcm0gdjdhCi0jICAgQVJNNjRfVjhBIDogVFJVRSBmb3IgYXJtNjQtdjhhCi0j
ICAgTkVPTiA6IFRSVUUgaWYgTkVPTiB1bml0IGlzIGVuYWJsZWQKLSMgICBWRlBWMyA6IFRSVUUg
aWYgVkZQIHZlcnNpb24gMyBpcyBlbmFibGVkCi0jICAgWDg2IDogVFJVRSBpZiBjb25maWd1cmVk
IGZvciB4ODYKLSMgICBYODZfNjQgOiBUUlVFIGlmIGNvbmZpZ3VyZWQgZm9yIHg4Nl82NAotIyAg
IE1JUFMgOiBUUlVFIGlmIGNvbmZpZ3VyZWQgZm9yIG1pcHMKLSMgICBNSVBTNjQgOiBUUlVFIGlm
IGNvbmZpZ3VyZWQgZm9yIG1pcHM2NAotIyAgIEJVSUxEX1dJVEhfQU5EUk9JRF9OREsgOiBUUlVF
IGlmIE5ESyBpcyB1c2VkCi0jICAgQlVJTERfV0lUSF9TVEFOREFMT05FX1RPT0xDSEFJTiA6IFRS
VUUgaWYgc3RhbmRhbG9uZSB0b29sY2hhaW4gaXMgdXNlZAotIyAgIEFORFJPSURfTkRLX0hPU1Rf
U1lTVEVNX05BTUUgOiAid2luZG93cyIsICJsaW51eC14ODYiIG9yICJkYXJ3aW4teDg2IiBkZXBl
bmRpbmcgb24gaG9zdCBwbGF0Zm9ybQotIyAgIEFORFJPSURfTkRLX0FCSV9OQU1FIDogImFybWVh
YmkiLCAiYXJtZWFiaS12N2EiLCAieDg2IiwgIm1pcHMiLCAiYXJtNjQtdjhhIiwgIng4Nl82NCIs
ICJtaXBzNjQiIGRlcGVuZGluZyBvbiBBTkRST0lEX0FCSQotIyAgIEFORFJPSURfTkRLX1JFTEVB
U0UgOiBmcm9tIHI1IHRvIHIxMGQ7IHNldCBvbmx5IGZvciBOREsKLSMgICBBTkRST0lEX05ES19S
RUxFQVNFX05VTSA6IG51bWVyaWMgQU5EUk9JRF9OREtfUkVMRUFTRSB2ZXJzaW9uICgxMDAwKm1h
am9yK21pbm9yKQotIyAgIEFORFJPSURfQVJDSF9OQU1FIDogImFybSIsICJ4ODYiLCAibWlwcyIs
ICJhcm02NCIsICJ4ODZfNjQiLCAibWlwczY0IiBkZXBlbmRpbmcgb24gQU5EUk9JRF9BQkkKLSMg
ICBBTkRST0lEX1NZU1JPT1QgOiBwYXRoIHRvIHRoZSBjb21waWxlciBzeXNyb290Ci0jICAgVE9P
TF9PU19TVUZGSVggOiAiIiBvciAiLmV4ZSIgZGVwZW5kaW5nIG9uIGhvc3QgcGxhdGZvcm0KLSMg
ICBBTkRST0lEX0NPTVBJTEVSX0lTX0NMQU5HIDogVFJVRSBpZiBjbGFuZyBjb21waWxlciBpcyB1
c2VkCi0jCi0jIFNlY29uZGFyeSAobGVzcyBzdGFibGUpIHJlYWQtb25seSB2YXJpYWJsZXM6Ci0j
ICAgQU5EUk9JRF9DT01QSUxFUl9WRVJTSU9OIDogR0NDIHZlcnNpb24gdXNlZCAobm90IENsYW5n
IHZlcnNpb24pCi0jICAgQU5EUk9JRF9DTEFOR19WRVJTSU9OIDogdmVyc2lvbiBvZiBjbGFuZyBj
b21waWxlciBpZiBjbGFuZyBpcyB1c2VkCi0jICAgQU5EUk9JRF9DWFhfRkxBR1MgOiBDL0MrKyBj
b21waWxlciBmbGFncyByZXF1aXJlZCBieSBBbmRyb2lkIHBsYXRmb3JtCi0jICAgQU5EUk9JRF9T
VVBQT1JURURfQUJJUyA6IGxpc3Qgb2YgY3VycmVudGx5IGFsbG93ZWQgdmFsdWVzIGZvciBBTkRS
T0lEX0FCSQotIyAgIEFORFJPSURfVE9PTENIQUlOX01BQ0hJTkVfTkFNRSA6ICJhcm0tbGludXgt
YW5kcm9pZGVhYmkiLCAiYXJtLWVhYmkiIG9yICJpNjg2LWFuZHJvaWQtbGludXgiCi0jICAgQU5E
Uk9JRF9UT09MQ0hBSU5fUk9PVCA6IHBhdGggdG8gdGhlIHRvcCBsZXZlbCBvZiB0b29sY2hhaW4g
KHN0YW5kYWxvbmUgb3IgcGxhY2VkIGluc2lkZSBOREspCi0jICAgQU5EUk9JRF9DTEFOR19UT09M
Q0hBSU5fUk9PVCA6IHBhdGggdG8gY2xhbmcgdG9vbHMKLSMgICBBTkRST0lEX1NVUFBPUlRFRF9O
QVRJVkVfQVBJX0xFVkVMUyA6IGxpc3Qgb2YgbmF0aXZlIEFQSSBsZXZlbHMgZm91bmQgaW5zaWRl
IE5ESwotIyAgIEFORFJPSURfU1RMX0lOQ0xVREVfRElSUyA6IHN0bCBpbmNsdWRlIHBhdGhzCi0j
ICAgQU5EUk9JRF9SVFRJIDogaWYgcnR0aSBpcyBlbmFibGVkIGJ5IHRoZSBydW50aW1lCi0jICAg
QU5EUk9JRF9FWENFUFRJT05TIDogaWYgZXhjZXB0aW9ucyBhcmUgZW5hYmxlZCBieSB0aGUgcnVu
dGltZQotIyAgIEFORFJPSURfR0NDX1RPT0xDSEFJTl9OQU1FIDogcmVhZC1vbmx5LCBkaWZmZXJz
IGZyb20gQU5EUk9JRF9UT09MQ0hBSU5fTkFNRSBvbmx5IGlmIGNsYW5nIGlzIHVzZWQKLSMKLSMg
RGVmYXVsdHM6Ci0jICAgQU5EUk9JRF9ERUZBVUxUX05ES19BUElfTEVWRUwKLSMgICBBTkRST0lE
X0RFRkFVTFRfTkRLX0FQSV9MRVZFTF8ke0FSQ0h9Ci0jICAgQU5EUk9JRF9OREtfU0VBUkNIX1BB
VEhTCi0jICAgQU5EUk9JRF9TVVBQT1JURURfQUJJU18ke0FSQ0h9Ci0jICAgQU5EUk9JRF9TVVBQ
T1JURURfTkRLX1ZFUlNJT05TCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9pZC1jbWFrZS9u
ZGtfbGlua3MubWQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL3RoaXJkX3BhcnR5L2FuZHJvaWQtY21ha2Uv
bmRrX2xpbmtzLm1kCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdGhpcmRfcGFydHkvYW5kcm9p
ZC1jbWFrZS9uZGtfbGlua3MubWQJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTEgKzAsMCBAQAotCi09
PT09PT09PT09PT09PSByMSA9PT09PT09PT09PT09PSAoZGVhZCBsaW5rcykKLQotKiBodHRwOi8v
ZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay0xLjVfcjEtd2luZG93cy56aXAK
LSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstMS41X3IxLWRh
cndpbi14ODYuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQt
bmRrLTEuNV9yMS1saW51eC14ODYuemlwCi0KLT09PT09PT09PT09PT09IHIyID09PT09PT09PT09
PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstMS42
X3IxLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLTEuNl9yMS1kYXJ3aW4teDg2LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRy
b2lkL25kay9hbmRyb2lkLW5kay0xLjZfcjEtbGludXgteDg2LnppcAotCi09PT09PT09PT09PT09
PSByMyA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRr
L2FuZHJvaWQtbmRrLXIzLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJv
aWQvbmRrL2FuZHJvaWQtbmRrLXIzLWRhcndpbi14ODYuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUu
Y29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIzLWxpbnV4LXg4Ni56aXAKLQotPT09PT09PT09
PT09PT0gcjQgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kay1yNC13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yNC1kYXJ3aW4teDg2LnppcAotKiBodHRwOi8vZGwuZ29v
Z2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNC1saW51eC14ODYuemlwCi0KLT09PT09
PT09PT09PT09IHI0YiA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2Fu
ZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI0Yi13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNGItZGFyd2luLXg4Ni56aXAKLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjRiLWxpbnV4LXg4Ni56aXAK
LQotPT09PT09PT09PT09PT0gcjUgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNS13aW5kb3dzLnppcAotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNS1kYXJ3aW4teDg2LnRhci5iejIK
LSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjUtbGludXgt
eDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjViID09PT09PT09PT09PT09Ci0KLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjViLXdpbmRvd3Muemlw
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI1Yi1kYXJ3
aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9p
ZC1uZGstcjViLWxpbnV4LXg4Ni50YXIuYnoyCi0KLT09PT09PT09PT09PT09IHI1YyA9PT09PT09
PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRr
LXI1Yy13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRy
b2lkLW5kay1yNWMtZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2Fu
ZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI1Yy1saW51eC14ODYudGFyLmJ6MgotCi09PT09PT09PT09
PT09PSByNiA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQv
bmRrL2FuZHJvaWQtbmRrLXI2LXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2Fu
ZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI2LWRhcndpbi14ODYudGFyLmJ6MgotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNi1saW51eC14ODYudGFyLmJ6Mgot
Ci09PT09PT09PT09PT09PSByNmIgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNmItd2luZG93cy56aXAKLSogaHR0cDovL2Rs
Lmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjZiLWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNmItbGlu
dXgteDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjcgPT09PT09PT09PT09PT0KLQotKiBo
dHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNy13aW5kb3dzLnpp
cAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yNy1kYXJ3
aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9p
ZC1uZGstcjctbGludXgteDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjdiID09PT09PT09
PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGst
cjdiLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI3Yi1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5k
cm9pZC9uZGsvYW5kcm9pZC1uZGstcjdiLWxpbnV4LXg4Ni50YXIuYnoyCi0KLT09PT09PT09PT09
PT09IHI3YyA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQv
bmRrL2FuZHJvaWQtbmRrLXI3Yy13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yN2MtZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9k
bC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI3Yy1saW51eC14ODYudGFyLmJ6
MgotCi09PT09PT09PT09PT09PSByOCA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29n
bGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4LXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9k
bC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4LWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOC1saW51
eC14ODYudGFyLmJ6MgotCi09PT09PT09PT09PT09PSByOGIgPT09PT09PT09PT09PT0KLQotKiBo
dHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGItd2luZG93cy56
aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjhiLWRh
cndpbi14ODYudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRy
b2lkLW5kay1yOGItbGludXgteDg2LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjhjID09PT09
PT09PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1u
ZGstcjhjLXdpbmRvd3MuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrLXI4Yy1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20v
YW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjhjLWxpbnV4LXg4Ni50YXIuYnoyCi0KLT09PT09PT09
PT09PT09IHI4ZCA9PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJv
aWQvbmRrL2FuZHJvaWQtbmRrLXI4ZC13aW5kb3dzLnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNv
bS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGQtZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6
Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4ZC1saW51eC14ODYudGFy
LmJ6MgotCi09PT09PT09PT09PT09PSByOGUgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGUtd2luZG93cy14ODYuemlwCi0q
IGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4ZS13aW5kb3dz
LXg4Nl82NC56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1u
ZGstcjhlLWRhcndpbi14ODYudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kay1yOGUtZGFyd2luLXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI4ZS1saW51eC14ODYudGFyLmJ6Mgot
KiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOGUtbGludXgt
eDg2XzY0LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjkgPT09PT09PT09PT09PT0KLQotKiBo
dHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOS13aW5kb3dzLXg4
Ni56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjkt
d2luZG93cy14ODYtbGVnYWN5LXRvb2xjaGFpbnMuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LXdpbmRvd3MteDg2XzY0LnppcAotKiBodHRwOi8v
ZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOS13aW5kb3dzLXg4Nl82NC1s
ZWdhY3ktdG9vbGNoYWlucy56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsv
YW5kcm9pZC1uZGstcjktZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWRhcndpbi14ODYtbGVnYWN5LXRvb2xjaGFpbnMu
dGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1y
OS1kYXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9u
ZGsvYW5kcm9pZC1uZGstcjktZGFyd2luLXg4Nl82NC1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoy
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWxpbnV4
LXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQt
bmRrLXI5LWxpbnV4LXg4Ni1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoyCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWxpbnV4LXg4Nl82NC50YXIuYnoy
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5LWxpbnV4
LXg4Nl82NC1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoyCi0KLT09PT09PT09PT09PT09IHI5YiA9
PT09PT09PT09PT09PQotCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI5Yi13aW5kb3dzLXg4Ni56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9p
ZC9uZGsvYW5kcm9pZC1uZGstcjliLXdpbmRvd3MteDg2LWxlZ2FjeS10b29sY2hhaW5zLnppcAot
KiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWItd2luZG93
cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQt
bmRrLXI5Yi13aW5kb3dzLXg4Nl82NC1sZWdhY3ktdG9vbGNoYWlucy56aXAKLSogaHR0cDovL2Rs
Lmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjliLWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWItZGFy
d2luLXg4Ni1sZWdhY3ktdG9vbGNoYWlucy50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5Yi1kYXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjliLWRhcndpbi14ODZf
NjQtbGVnYWN5LXRvb2xjaGFpbnMudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRy
b2lkL25kay9hbmRyb2lkLW5kay1yOWItbGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdv
b2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjliLWxpbnV4LXg4Ni1sZWdhY3ktdG9v
bGNoYWlucy50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI5Yi1saW51eC14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWItbGludXgteDg2XzY0LWxlZ2FjeS10b29sY2hhaW5z
LnRhci5iejIKLQotPT09PT09PT09PT09PT0gcjljID09PT09PT09PT09PT09Ci0KLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjljLXdpbmRvd3MteDg2Lnpp
cAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWMtd2lu
ZG93cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJv
aWQtbmRrLXI5Yy1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5k
cm9pZC9uZGsvYW5kcm9pZC1uZGstcjljLWRhcndpbi14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8v
ZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWMtbGludXgteDg2LnRhci5i
ejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjljLWxp
bnV4LXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrLXI5Yy1jeHgtc3RsLWxpYnMtd2l0aC1kZWJ1Z2dpbmctaW5mby56aXAKLQotPT09
PT09PT09PT09PT0gcjlkID09PT09PT09PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2dsZS5jb20v
YW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjlkLXdpbmRvd3MteDg2LnppcAotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWQtd2luZG93cy14ODZfNjQuemlw
Ci0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5ZC1kYXJ3
aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9p
ZC1uZGstcjlkLWRhcndpbi14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9h
bmRyb2lkL25kay9hbmRyb2lkLW5kay1yOWQtbGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2Rs
Lmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjlkLWxpbnV4LXg4Nl82NC50YXIu
YnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXI5ZC1j
eHgtc3RsLWxpYnMtd2l0aC1kZWJ1Zy1pbmZvLnppcAotCi09PT09PT09PT09PT09PSByMTAgPT09
PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lk
LW5kazMyLXIxMC13aW5kb3dzLXg4Ni56aXAKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9p
ZC9uZGsvYW5kcm9pZC1uZGszMi1yMTAtd2luZG93cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrMzItcjEwLWRhcndpbi14ODYudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kazMyLXIxMC1k
YXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsv
YW5kcm9pZC1uZGszMi1yMTAtbGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5j
b20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGszMi1yMTAtbGludXgteDg2XzY0LnRhci5iejIKLSog
aHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTAtd2luZG93
cy14ODYuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRr
NjQtcjEwLXdpbmRvd3MteDg2XzY0LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kazY0LXIxMC1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdv
b2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTAtZGFyd2luLXg4Nl82NC50YXIu
YnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrNjQtcjEw
LWxpbnV4LXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrNjQtcjEwLWxpbnV4LXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUu
Y29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIxMC1jeHgtc3RsLWxpYnMtd2l0aC1kZWJ1Zy1p
bmZvLnppcAotCi09PT09PT09PT09PT09PSByMTBiID09PT09PT09PT09PT09Ci0KLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGszMi1yMTBiLXdpbmRvd3MteDg2
LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kazMyLXIx
MGItd2luZG93cy14ODZfNjQuemlwCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRr
L2FuZHJvaWQtbmRrMzItcjEwYi1kYXJ3aW4teDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2ds
ZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGszMi1yMTBiLWRhcndpbi14ODZfNjQudGFyLmJ6
MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kazMyLXIxMGIt
bGludXgteDg2LnRhci5iejIKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5k
cm9pZC1uZGszMi1yMTBiLWxpbnV4LXg4Nl82NC50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUu
Y29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrNjQtcjEwYi13aW5kb3dzLXg4Ni56aXAKLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTBiLXdpbmRvd3Mt
eDg2XzY0LnppcAotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5k
azY0LXIxMGItZGFyd2luLXg4Ni50YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJv
aWQvbmRrL2FuZHJvaWQtbmRrNjQtcjEwYi1kYXJ3aW4teDg2XzY0LnRhci5iejIKLSogaHR0cDov
L2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGs2NC1yMTBiLWxpbnV4LXg4Ni50
YXIuYnoyCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrNjQt
cjEwYi1saW51eC14ODZfNjQudGFyLmJ6MgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lk
L25kay9hbmRyb2lkLW5kay1yMTBiLWN4eC1zdGwtbGlicy13aXRoLWRlYnVnLWluZm8uemlwCi0K
LT09PT09PT09PT09PT09IHIxMGMgPT09PT09PT09PT09PT0KLQotKiBodHRwOi8vZGwuZ29vZ2xl
LmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yMTBjLXdpbmRvd3MteDg2LmV4ZQotKiBodHRw
Oi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yMTBjLXdpbmRvd3MteDg2
XzY0LmV4ZQotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1y
MTBjLWRhcndpbi14ODYuYmluCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29tL2FuZHJvaWQvbmRrL2Fu
ZHJvaWQtbmRrLXIxMGMtZGFyd2luLXg4Nl82NC5iaW4KLSogaHR0cDovL2RsLmdvb2dsZS5jb20v
YW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjEwYy1saW51eC14ODYuYmluCi0qIGh0dHA6Ly9kbC5n
b29nbGUuY29tL2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIxMGMtbGludXgteDg2XzY0LmJpbgot
Ci09PT09PT09PT09PT09PSByMTBkID09PT09PT09PT09PT09Ci0KLSogaHR0cDovL2RsLmdvb2ds
ZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjEwZC13aW5kb3dzLXg4Ni5leGUKLSogaHR0
cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGstcjEwZC13aW5kb3dzLXg4
Nl82NC5leGUKLSogaHR0cDovL2RsLmdvb2dsZS5jb20vYW5kcm9pZC9uZGsvYW5kcm9pZC1uZGst
cjEwZC1kYXJ3aW4teDg2LmJpbgotKiBodHRwOi8vZGwuZ29vZ2xlLmNvbS9hbmRyb2lkL25kay9h
bmRyb2lkLW5kay1yMTBkLWRhcndpbi14ODZfNjQuYmluCi0qIGh0dHA6Ly9kbC5nb29nbGUuY29t
L2FuZHJvaWQvbmRrL2FuZHJvaWQtbmRrLXIxMGQtbGludXgteDg2LmJpbgotKiBodHRwOi8vZGwu
Z29vZ2xlLmNvbS9hbmRyb2lkL25kay9hbmRyb2lkLW5kay1yMTBkLWxpbnV4LXg4Nl82NC5iaW4K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9y
aW5nc3NsL3NyYy91dGlsL3J1bl9hbmRyb2lkX3Rlc3RzLmdvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy91
dGlsL3J1bl9hbmRyb2lkX3Rlc3RzLmdvCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvdXRpbC9y
dW5fYW5kcm9pZF90ZXN0cy5nbwkobm9uZXhpc3RlbnQpCkBAIC0xLDMyMSArMCwwIEBACi0vLyBD
b3B5cmlnaHQgKGMpIDIwMTYsIEdvb2dsZSBJbmMuCi0vLwotLy8gUGVybWlzc2lvbiB0byB1c2Us
IGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55Ci0v
LyBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVk
IHRoYXQgdGhlIGFib3ZlCi0vLyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g
bm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgotLy8KLS8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUwotLy8g
V0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFO
VElFUyBPRgotLy8gTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZCi0vLyBTUEVDSUFMLCBESVJFQ1QsIElORElS
RUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKLS8vIFdIQVRTT0VW
RVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJ
TiBBTiBBQ1RJT04KLS8vIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VT
IEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KLS8vIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNF
IE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLXBhY2thZ2UgbWFpbgotCi1pbXBv
cnQgKAotCSJieXRlcyIKLQkiZW5jb2RpbmcvanNvbiIKLQkiZmxhZyIKLQkiZm10IgotCSJpbyIK
LQkiaW8vaW91dGlsIgotCSJvcyIKLQkib3MvZXhlYyIKLQkicGF0aC9maWxlcGF0aCIKLQkic3Ry
Y29udiIKLQkic3RyaW5ncyIKLSkKLQotdmFyICgKLQlidWlsZERpciAgICAgPSBmbGFnLlN0cmlu
ZygiYnVpbGQtZGlyIiwgImJ1aWxkIiwgIlNwZWNpZmllcyB0aGUgYnVpbGQgZGlyZWN0b3J5IHRv
IHB1c2guIikKLQlhZGJQYXRoICAgICAgPSBmbGFnLlN0cmluZygiYWRiIiwgImFkYiIsICJTcGVj
aWZpZXMgdGhlIGFkYiBiaW5hcnkgdG8gdXNlLiBEZWZhdWx0cyB0byBsb29raW5nIGluIFBBVEgu
IikKLQlkZXZpY2UgICAgICAgPSBmbGFnLlN0cmluZygiZGV2aWNlIiwgIiIsICJTcGVjaWZpZXMg
dGhlIGRldmljZSBvciBlbXVsYXRvci4gU2VlIGFkYidzIC1zIGFyZ3VtZW50LiIpCi0JYWFyY2g2
NCAgICAgID0gZmxhZy5Cb29sKCJhYXJjaDY0IiwgZmFsc2UsICJCdWlsZCB0aGUgdGVzdCBydW5u
ZXJzIGZvciBhYXJjaDY0IGluc3RlYWQgb2YgYXJtLiIpCi0JYXJtICAgICAgICAgID0gZmxhZy5J
bnQoImFybSIsIDcsICJXaGljaCBhcm0gcmV2aXNpb24gdG8gYnVpbGQgZm9yLiIpCi0Jc3VpdGUg
ICAgICAgID0gZmxhZy5TdHJpbmcoInN1aXRlIiwgImFsbCIsICJTcGVjaWZpZXMgdGhlIHRlc3Qg
c3VpdGVzIHRvIHJ1biAoYWxsLCB1bml0LCBvciBzc2wpLiIpCi0JYWxsVGVzdHNBcmdzID0gZmxh
Zy5TdHJpbmcoImFsbC10ZXN0cy1hcmdzIiwgIiIsICJTcGVjaWZpZXMgc3BhY2Utc2VwYXJhdGVk
IGFyZ3VtZW50cyB0byBwYXNzIHRvIGFsbF90ZXN0cy5nbyIpCi0JcnVubmVyQXJncyAgID0gZmxh
Zy5TdHJpbmcoInJ1bm5lci1hcmdzIiwgIiIsICJTcGVjaWZpZXMgc3BhY2Utc2VwYXJhdGVkIGFy
Z3VtZW50cyB0byBwYXNzIHRvIHNzbC90ZXN0L3J1bm5lciIpCi0JanNvbk91dHB1dCAgID0gZmxh
Zy5TdHJpbmcoImpzb24tb3V0cHV0IiwgIiIsICJUaGUgZmlsZSB0byBvdXRwdXQgSlNPTiByZXN1
bHRzIHRvLiIpCi0pCi0KLWZ1bmMgZW5hYmxlVW5pdFRlc3RzKCkgYm9vbCB7Ci0JcmV0dXJuICpz
dWl0ZSA9PSAiYWxsIiB8fCAqc3VpdGUgPT0gInVuaXQiCi19Ci0KLWZ1bmMgZW5hYmxlU1NMVGVz
dHMoKSBib29sIHsKLQlyZXR1cm4gKnN1aXRlID09ICJhbGwiIHx8ICpzdWl0ZSA9PSAic3NsIgot
fQotCi1mdW5jIGFkYihhcmdzIC4uLnN0cmluZykgZXJyb3IgewotCWlmIGxlbigqZGV2aWNlKSA+
IDAgewotCQlhcmdzID0gYXBwZW5kKFtdc3RyaW5neyItcyIsICpkZXZpY2V9LCBhcmdzLi4uKQot
CX0KLQljbWQgOj0gZXhlYy5Db21tYW5kKCphZGJQYXRoLCBhcmdzLi4uKQotCWNtZC5TdGRvdXQg
PSBvcy5TdGRvdXQKLQljbWQuU3RkZXJyID0gb3MuU3RkZXJyCi0JcmV0dXJuIGNtZC5SdW4oKQot
fQotCi1mdW5jIGFkYlNoZWxsKHNoZWxsQ21kIHN0cmluZykgKGludCwgZXJyb3IpIHsKLQl2YXIg
YXJncyBbXXN0cmluZwotCWlmIGxlbigqZGV2aWNlKSA+IDAgewotCQlhcmdzID0gYXBwZW5kKFtd
c3RyaW5neyItcyIsICpkZXZpY2V9LCBhcmdzLi4uKQotCX0KLQlhcmdzID0gYXBwZW5kKGFyZ3Ms
ICJzaGVsbCIpCi0KLQljb25zdCBkZWxpbWl0ZXIgPSAiX19fRVhJVF9DT0RFX19fIgotCi0JLy8g
T2xkZXIgdmVyc2lvbnMgb2YgYWRiIGFuZCBBbmRyb2lkIGRvIG5vdCBwcmVzZXJ2ZSB0aGUgZXhp
dAotCS8vIGNvZGUsIHNvIHdvcmsgYXJvdW5kIHRoaXMuCi0JLy8gaHR0cHM6Ly9jb2RlLmdvb2ds
ZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MzI1NAotCXNoZWxsQ21kICs9ICI7IGVj
aG8gIiArIGRlbGltaXRlciArICIgJD8iCi0JYXJncyA9IGFwcGVuZChhcmdzLCBzaGVsbENtZCkK
LQotCWNtZCA6PSBleGVjLkNvbW1hbmQoKmFkYlBhdGgsIGFyZ3MuLi4pCi0Jc3Rkb3V0LCBlcnIg
Oj0gY21kLlN0ZG91dFBpcGUoKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gMCwgZXJyCi0J
fQotCWNtZC5TdGRlcnIgPSBvcy5TdGRlcnIKLQlpZiBlcnIgOj0gY21kLlN0YXJ0KCk7IGVyciAh
PSBuaWwgewotCQlyZXR1cm4gMCwgZXJyCi0JfQotCi0JdmFyIHN0ZG91dEJ5dGVzIGJ5dGVzLkJ1
ZmZlcgotCWZvciB7Ci0JCXZhciBidWYgWzEwMjRdYnl0ZQotCQluLCBlcnIgOj0gc3Rkb3V0LlJl
YWQoYnVmWzpdKQotCQlzdGRvdXRCeXRlcy5Xcml0ZShidWZbOm5dKQotCQlvcy5TdGRvdXQuV3Jp
dGUoYnVmWzpuXSkKLQkJaWYgZXJyICE9IG5pbCB7Ci0JCQlicmVhawotCQl9Ci0JfQotCi0JaWYg
ZXJyIDo9IGNtZC5XYWl0KCk7IGVyciAhPSBuaWwgewotCQlyZXR1cm4gMCwgZXJyCi0JfQotCi0J
c3Rkb3V0U3RyIDo9IHN0ZG91dEJ5dGVzLlN0cmluZygpCi0JaWR4IDo9IHN0cmluZ3MuTGFzdElu
ZGV4KHN0ZG91dFN0ciwgZGVsaW1pdGVyKQotCWlmIGlkeCA8IDAgewotCQlyZXR1cm4gMCwgZm10
LkVycm9yZigiQ291bGQgbm90IGZpbmQgZGVsaW1pdGVyIGluIG91dHB1dC4iKQotCX0KLQotCXJl
dHVybiBzdHJjb252LkF0b2koc3RyaW5ncy5UcmltU3BhY2Uoc3Rkb3V0U3RyW2lkeCtsZW4oZGVs
aW1pdGVyKTpdKSkKLX0KLQotZnVuYyBnb1Rvb2woYXJncyAuLi5zdHJpbmcpIGVycm9yIHsKLQlj
bWQgOj0gZXhlYy5Db21tYW5kKCJnbyIsIGFyZ3MuLi4pCi0JY21kLlN0ZG91dCA9IG9zLlN0ZG91
dAotCWNtZC5TdGRlcnIgPSBvcy5TdGRlcnIKLQotCWNtZC5FbnYgPSBvcy5FbnZpcm9uKCkKLQlp
ZiAqYWFyY2g2NCB7Ci0JCWNtZC5FbnYgPSBhcHBlbmQoY21kLkVudiwgIkdPQVJDSD1hcm02NCIp
Ci0JfSBlbHNlIHsKLQkJY21kLkVudiA9IGFwcGVuZChjbWQuRW52LCAiR09BUkNIPWFybSIpCi0J
CWNtZC5FbnYgPSBhcHBlbmQoY21kLkVudiwgZm10LlNwcmludGYoIkdPQVJNPSVkIiwgKmFybSkp
Ci0JfQotCXJldHVybiBjbWQuUnVuKCkKLX0KLQotLy8gc2V0V29ya2luZ0RpcmVjdG9yeSB3YWxr
cyB1cCBkaXJlY3RvcmllcyBhcyBuZWVkZWQgdW50aWwgdGhlIGN1cnJlbnQgd29ya2luZwotLy8g
ZGlyZWN0b3J5IGlzIHRoZSB0b3Agb2YgYSBCb3JpbmdTU0wgY2hlY2tvdXQuCi1mdW5jIHNldFdv
cmtpbmdEaXJlY3RvcnkoKSB7Ci0JZm9yIGkgOj0gMDsgaSA8IDY0OyBpKysgewotCQlpZiBfLCBl
cnIgOj0gb3MuU3RhdCgiQlVJTERJTkcubWQiKTsgZXJyID09IG5pbCB7Ci0JCQlyZXR1cm4KLQkJ
fQotCQlvcy5DaGRpcigiLi4iKQotCX0KLQotCXBhbmljKCJDb3VsZG4ndCBmaW5kIEJVSUxESU5H
Lm1kIGluIGEgcGFyZW50IGRpcmVjdG9yeSEiKQotfQotCi10eXBlIHRlc3QgW11zdHJpbmcKLQot
ZnVuYyBwYXJzZVRlc3RDb25maWcoZmlsZW5hbWUgc3RyaW5nKSAoW110ZXN0LCBlcnJvcikgewot
CWluLCBlcnIgOj0gb3MuT3BlbihmaWxlbmFtZSkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJu
IG5pbCwgZXJyCi0JfQotCWRlZmVyIGluLkNsb3NlKCkKLQotCWRlY29kZXIgOj0ganNvbi5OZXdE
ZWNvZGVyKGluKQotCXZhciByZXN1bHQgW110ZXN0Ci0JaWYgZXJyIDo9IGRlY29kZXIuRGVjb2Rl
KCZyZXN1bHQpOyBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuIG5pbCwgZXJyCi0JfQotCXJldHVybiBy
ZXN1bHQsIG5pbAotfQotCi1mdW5jIGNvcHlGaWxlKGRzdCwgc3JjIHN0cmluZykgZXJyb3Igewot
CXNyY0ZpbGUsIGVyciA6PSBvcy5PcGVuKHNyYykKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJu
IGVycgotCX0KLQlkZWZlciBzcmNGaWxlLkNsb3NlKCkKLQotCXNyY0luZm8sIGVyciA6PSBzcmNG
aWxlLlN0YXQoKQotCWlmIGVyciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCi0JZGlyIDo9
IGZpbGVwYXRoLkRpcihkc3QpCi0JaWYgZXJyIDo9IG9zLk1rZGlyQWxsKGRpciwgMDc3Nyk7IGVy
ciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCi0JZHN0RmlsZSwgZXJyIDo9IG9zLk9wZW5G
aWxlKGRzdCwgb3MuT19DUkVBVEV8b3MuT19XUk9OTFksIHNyY0luZm8uTW9kZSgpKQotCWlmIGVy
ciAhPSBuaWwgewotCQlyZXR1cm4gZXJyCi0JfQotCWRlZmVyIGRzdEZpbGUuQ2xvc2UoKQotCi0J
XywgZXJyID0gaW8uQ29weShkc3RGaWxlLCBzcmNGaWxlKQotCXJldHVybiBlcnIKLX0KLQotZnVu
YyBtYWluKCkgewotCWZsYWcuUGFyc2UoKQotCi0JaWYgKnN1aXRlID09ICJhbGwiICYmICpqc29u
T3V0cHV0ICE9ICIiIHsKLQkJZm10LlByaW50ZigiVG8gdXNlIC1qc29uLW91dHB1dCBmbGFnLCBz
ZWxlY3Qgb25seSBvbmUgdGVzdCBzdWl0ZSB3aXRoIC1zdWl0ZS5cbiIpCi0JCW9zLkV4aXQoMSkK
LQl9Ci0KLQlzZXRXb3JraW5nRGlyZWN0b3J5KCkKLQotCS8vIENsZWFyIHRoZSB0YXJnZXQgZGly
ZWN0b3J5LgotCWlmIGVyciA6PSBhZGIoInNoZWxsIiwgInJtIC1SZiAvZGF0YS9sb2NhbC90bXAv
Ym9yaW5nc3NsLXRtcCIpOyBlcnIgIT0gbmlsIHsKLQkJZm10LlByaW50ZigiRmFpbGVkIHRvIGNs
ZWFyIHRhcmdldCBkaXJlY3Rvcnk6ICVzXG4iLCBlcnIpCi0JCW9zLkV4aXQoMSkKLQl9Ci0KLQkv
LyBTdGFnZSBldmVyeXRoaW5nIGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4KLQl0bXBEaXIsIGVy
ciA6PSBpb3V0aWwuVGVtcERpcigiIiwgImJvcmluZ3NzbC1hbmRyb2lkIikKLQlpZiBlcnIgIT0g
bmlsIHsKLQkJZm10LlByaW50ZigiRXJyb3IgbWFraW5nIHRlbXBvcmFyeSBkaXJlY3Rvcnk6ICVz
XG4iLCBlcnIpCi0JCW9zLkV4aXQoMSkKLQl9Ci0JZGVmZXIgb3MuUmVtb3ZlQWxsKHRtcERpcikK
LQotCXZhciBiaW5hcmllcywgZmlsZXMgW11zdHJpbmcKLQotCWlmIGVuYWJsZVVuaXRUZXN0cygp
IHsKLQkJZmlsZXMgPSBhcHBlbmQoZmlsZXMsCi0JCQkidXRpbC9hbGxfdGVzdHMuanNvbiIsCi0J
CQkiQlVJTERJTkcubWQiLAotCQkpCi0KLQkJdGVzdHMsIGVyciA6PSBwYXJzZVRlc3RDb25maWco
InV0aWwvYWxsX3Rlc3RzLmpzb24iKQotCQlpZiBlcnIgIT0gbmlsIHsKLQkJCWZtdC5QcmludGYo
IkZhaWxlZCB0byBwYXJzZSBpbnB1dDogJXNcbiIsIGVycikKLQkJCW9zLkV4aXQoMSkKLQkJfQot
Ci0JCXNlZW5CaW5hcnkgOj0gbWFrZShtYXBbc3RyaW5nXXN0cnVjdHt9KQotCQlmb3IgXywgdGVz
dCA6PSByYW5nZSB0ZXN0cyB7Ci0JCQlpZiBfLCBvayA6PSBzZWVuQmluYXJ5W3Rlc3RbMF1dOyAh
b2sgewotCQkJCWJpbmFyaWVzID0gYXBwZW5kKGJpbmFyaWVzLCB0ZXN0WzBdKQotCQkJCXNlZW5C
aW5hcnlbdGVzdFswXV0gPSBzdHJ1Y3R7fXt9Ci0JCQl9Ci0JCQlmb3IgXywgYXJnIDo9IHJhbmdl
IHRlc3RbMTpdIHsKLQkJCQlpZiBzdHJpbmdzLkNvbnRhaW5zKGFyZywgIi8iKSB7Ci0JCQkJCWZp
bGVzID0gYXBwZW5kKGZpbGVzLCBhcmcpCi0JCQkJfQotCQkJfQotCQl9Ci0KLQkJZm10LlByaW50
ZigiQnVpbGRpbmcgYWxsX3Rlc3RzLi4uXG4iKQotCQlpZiBlcnIgOj0gZ29Ub29sKCJidWlsZCIs
ICItbyIsIGZpbGVwYXRoLkpvaW4odG1wRGlyLCAidXRpbC9hbGxfdGVzdHMiKSwgInV0aWwvYWxs
X3Rlc3RzLmdvIik7IGVyciAhPSBuaWwgewotCQkJZm10LlByaW50ZigiRXJyb3IgYnVpbGRpbmcg
YWxsX3Rlc3RzLmdvOiAlc1xuIiwgZXJyKQotCQkJb3MuRXhpdCgxKQotCQl9Ci0JfQotCi0JaWYg
ZW5hYmxlU1NMVGVzdHMoKSB7Ci0JCWJpbmFyaWVzID0gYXBwZW5kKGJpbmFyaWVzLCAic3NsL3Rl
c3QvYnNzbF9zaGltIikKLQkJZmlsZXMgPSBhcHBlbmQoZmlsZXMsCi0JCQkiQlVJTERJTkcubWQi
LAotCQkJInV0aWwvYWxsX3Rlc3RzLmpzb24iLAotCQkJInNzbC90ZXN0L3J1bm5lci9jZXJ0LnBl
bSIsCi0JCQkic3NsL3Rlc3QvcnVubmVyL2NoYW5uZWxfaWRfa2V5LnBlbSIsCi0JCQkic3NsL3Rl
c3QvcnVubmVyL2VjZHNhX3AyNTZfY2VydC5wZW0iLAotCQkJInNzbC90ZXN0L3J1bm5lci9lY2Rz
YV9wMjU2X2tleS5wZW0iLAotCQkJInNzbC90ZXN0L3J1bm5lci9lY2RzYV9wMzg0X2NlcnQucGVt
IiwKLQkJCSJzc2wvdGVzdC9ydW5uZXIvZWNkc2FfcDM4NF9rZXkucGVtIiwKLQkJCSJzc2wvdGVz
dC9ydW5uZXIvZWNkc2FfcDUyMV9jZXJ0LnBlbSIsCi0JCQkic3NsL3Rlc3QvcnVubmVyL2VjZHNh
X3A1MjFfa2V5LnBlbSIsCi0JCQkic3NsL3Rlc3QvcnVubmVyL2tleS5wZW0iLAotCQkJInNzbC90
ZXN0L3J1bm5lci9yc2FfMTAyNF9jZXJ0LnBlbSIsCi0JCQkic3NsL3Rlc3QvcnVubmVyL3JzYV8x
MDI0X2tleS5wZW0iLAotCQkpCi0KLQkJZm10LlByaW50ZigiQnVpbGRpbmcgcnVubmVyLi4uXG4i
KQotCQlpZiBlcnIgOj0gZ29Ub29sKCJ0ZXN0IiwgIi1jIiwgIi1vIiwgZmlsZXBhdGguSm9pbih0
bXBEaXIsICJzc2wvdGVzdC9ydW5uZXIvcnVubmVyIiksICIuL3NzbC90ZXN0L3J1bm5lci8iKTsg
ZXJyICE9IG5pbCB7Ci0JCQlmbXQuUHJpbnRmKCJFcnJvciBidWlsZGluZyBydW5uZXI6ICVzXG4i
LCBlcnIpCi0JCQlvcy5FeGl0KDEpCi0JCX0KLQl9Ci0KLQlmbXQuUHJpbnRmKCJDb3B5aW5nIHRl
c3QgYmluYXJpZXMuLi5cbiIpCi0JZm9yIF8sIGJpbmFyeSA6PSByYW5nZSBiaW5hcmllcyB7Ci0J
CWlmIGVyciA6PSBjb3B5RmlsZShmaWxlcGF0aC5Kb2luKHRtcERpciwgImJ1aWxkIiwgYmluYXJ5
KSwgZmlsZXBhdGguSm9pbigqYnVpbGREaXIsIGJpbmFyeSkpOyBlcnIgIT0gbmlsIHsKLQkJCWZt
dC5QcmludGYoIkZhaWxlZCB0byBjb3B5ICVzOiAlc1xuIiwgYmluYXJ5LCBlcnIpCi0JCQlvcy5F
eGl0KDEpCi0JCX0KLQl9Ci0KLQlmbXQuUHJpbnRmKCJDb3B5aW5nIGRhdGEgZmlsZXMuLi5cbiIp
Ci0JZm9yIF8sIGZpbGUgOj0gcmFuZ2UgZmlsZXMgewotCQlpZiBlcnIgOj0gY29weUZpbGUoZmls
ZXBhdGguSm9pbih0bXBEaXIsIGZpbGUpLCBmaWxlKTsgZXJyICE9IG5pbCB7Ci0JCQlmbXQuUHJp
bnRmKCJGYWlsZWQgdG8gY29weSAlczogJXNcbiIsIGZpbGUsIGVycikKLQkJCW9zLkV4aXQoMSkK
LQkJfQotCX0KLQotCWZtdC5QcmludGYoIlVwbG9hZGluZyBmaWxlcy4uLlxuIikKLQlpZiBlcnIg
Oj0gYWRiKCJwdXNoIiwgIi1wIiwgdG1wRGlyLCAiL2RhdGEvbG9jYWwvdG1wL2JvcmluZ3NzbC10
bXAiKTsgZXJyICE9IG5pbCB7Ci0JCWZtdC5QcmludGYoIkZhaWxlZCB0byBwdXNoIHJ1bm5lcjog
JXNcbiIsIGVycikKLQkJb3MuRXhpdCgxKQotCX0KLQotCXZhciB1bml0VGVzdEV4aXQgaW50Ci0J
aWYgZW5hYmxlVW5pdFRlc3RzKCkgewotCQlmbXQuUHJpbnRmKCJSdW5uaW5nIHVuaXQgdGVzdHMu
Li5cbiIpCi0JCXVuaXRUZXN0RXhpdCwgZXJyID0gYWRiU2hlbGwoZm10LlNwcmludGYoImNkIC9k
YXRhL2xvY2FsL3RtcC9ib3Jpbmdzc2wtdG1wICYmIC4vdXRpbC9hbGxfdGVzdHMgLWpzb24tb3V0
cHV0IHJlc3VsdHMuanNvbiAlcyIsICphbGxUZXN0c0FyZ3MpKQotCQlpZiBlcnIgIT0gbmlsIHsK
LQkJCWZtdC5QcmludGYoIkZhaWxlZCB0byBydW4gdW5pdCB0ZXN0czogJXNcbiIsIGVycikKLQkJ
CW9zLkV4aXQoMSkKLQkJfQotCX0KLQotCXZhciBzc2xUZXN0RXhpdCBpbnQKLQlpZiBlbmFibGVT
U0xUZXN0cygpIHsKLQkJZm10LlByaW50ZigiUnVubmluZyBTU0wgdGVzdHMuLi5cbiIpCi0JCXNz
bFRlc3RFeGl0LCBlcnIgPSBhZGJTaGVsbChmbXQuU3ByaW50ZigiY2QgL2RhdGEvbG9jYWwvdG1w
L2JvcmluZ3NzbC10bXAvc3NsL3Rlc3QvcnVubmVyICYmIC4vcnVubmVyIC1qc29uLW91dHB1dCAu
Li8uLi8uLi9yZXN1bHRzLmpzb24gJXMiLCAqcnVubmVyQXJncykpCi0JCWlmIGVyciAhPSBuaWwg
ewotCQkJZm10LlByaW50ZigiRmFpbGVkIHRvIHJ1biBTU0wgdGVzdHM6ICVzXG4iLCBlcnIpCi0J
CQlvcy5FeGl0KDEpCi0JCX0KLQl9Ci0KLQlpZiAqanNvbk91dHB1dCAhPSAiIiB7Ci0JCWlmIGVy
ciA6PSBhZGIoInB1bGwiLCAiLXAiLCAiL2RhdGEvbG9jYWwvdG1wL2JvcmluZ3NzbC10bXAvcmVz
dWx0cy5qc29uIiwgKmpzb25PdXRwdXQpOyBlcnIgIT0gbmlsIHsKLQkJCWZtdC5QcmludGYoIkZh
aWxlZCB0byBleHRyYWN0IHJlc3VsdHMuanNvbjogJXNcbiIsIGVycikKLQkJCW9zLkV4aXQoMSkK
LQkJfQotCX0KLQotCWlmIHVuaXRUZXN0RXhpdCAhPSAwIHsKLQkJb3MuRXhpdCh1bml0VGVzdEV4
aXQpCi0JfQotCi0JaWYgc3NsVGVzdEV4aXQgIT0gMCB7Ci0JCW9zLkV4aXQoc3NsVGVzdEV4aXQp
Ci0JfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS9saWJ5dXYvdXRpbC9hbmRyb2lkL3Rlc3RfcnVubmVyLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvbGlieXV2L3V0aWwv
YW5kcm9pZC90ZXN0X3J1bm5lci5weQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9saWJ5dXYvdXRpbC9hbmRyb2lkL3Rl
c3RfcnVubmVyLnB5CShub25leGlzdGVudCkKQEAgLTEsMzcgKzAsMCBAQAotIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCi0jIENvcHlyaWdodCAyMDE0IFRoZSBMaWJZdXYgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0jIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotIyB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0jIGlu
IHRoZSBmaWxlIFBBVEVOVFMuIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
IyBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLQotIiIiCi1SdW5zIHRlc3RzIG9uIEFuZHJvaWQgZGV2aWNlcy4KLQotVGhpcyBzY3Jp
cHQgZXhpc3RzIHRvIGF2b2lkIExpYnl1diBiZWluZyBicm9rZW4gYnkgY2hhbmdlcyBpbiB0aGUg
Q2hyb21lIEFuZHJvaWQKLXRlc3QgZXhlY3V0aW9uIHRvb2xjaGFpbi4gSXQgYWxzbyBjb252ZW5p
ZW50bHkgc2V0cyB0aGUgQ0hFQ0tPVVRfU09VUkNFX1JPT1QKLWVudmlyb25tZW50IHZhcmlhYmxl
LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1TQ1JJUFRfRElSID0gb3MucGF0aC5k
aXJuYW1lKF9fZmlsZV9fKQotUk9PVF9ESVIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2lu
KFNDUklQVF9ESVIsIG9zLnBhcmRpciwgb3MucGFyZGlyKSkKLUNIUk9NSVVNX0JVSUxEX0FORFJP
SURfRElSID0gb3MucGF0aC5qb2luKFJPT1RfRElSLCAnYnVpbGQnLCAnYW5kcm9pZCcpCi1zeXMu
cGF0aC5pbnNlcnQoMCwgQ0hST01JVU1fQlVJTERfQU5EUk9JRF9ESVIpCi0KLQotaW1wb3J0IHRl
c3RfcnVubmVyICAjIHB5bGludDogZGlzYWJsZT1XMDQwNgotCi1kZWYgbWFpbigpOgotICAjIE92
ZXJyaWRlIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG1ha2UgaXQgcG9zc2libGUgZm9yIHRoZSBz
Y3JpcHRzIHRvIGZpbmQKLSAgIyB0aGUgcm9vdCBkaXJlY3RvcnkgKG91ciBzeW1saW5raW5nIG9m
IHRoZSBDaHJvbWl1bSBidWlsZCB0b29sY2hhaW4gd291bGQKLSAgIyBvdGhlcndpc2UgbWFrZSB0
aGVtIGZhaWwgdG8gZG8gc28pLgotICBvcy5lbnZpcm9uWydDSEVDS09VVF9TT1VSQ0VfUk9PVCdd
ID0gUk9PVF9ESVIKLSAgcmV0dXJuIHRlc3RfcnVubmVyLm1haW4oKQotCi1pZiBfX25hbWVfXyA9
PSAnX19tYWluX18nOgotICBzeXMuZXhpdChtYWluKCkpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2xpYnl1di91dGls
L2FuZHJvaWQvdGVzdF9ydW5uZXIucHkKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZXhlY3V0YWJs
ZQojIyAtMSArMCwwICMjCi0qClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvbGlieXV2L3V0
aWwvYW5kcm9pZC90ZXN0X3J1bm5lci5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L2xpYnl1di91dGlsL2FuZHJvaWQvdGVzdF9y
dW5uZXIucHkJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvbGlieXV2L3V0aWwvYW5kcm9pZC90ZXN0X3J1bm5lci5weQko
bm9uZXhpc3RlbnQpCkBAIC0xLDM3ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBD
b3B5cmlnaHQgMjAxNCBUaGUgTGliWXV2IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSMKLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotIyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSMgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotIyBpbiB0aGUgZmlsZSBQQVRF
TlRTLiBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSMgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0KLSIiIgot
UnVucyB0ZXN0cyBvbiBBbmRyb2lkIGRldmljZXMuCi0KLVRoaXMgc2NyaXB0IGV4aXN0cyB0byBh
dm9pZCBMaWJ5dXYgYmVpbmcgYnJva2VuIGJ5IGNoYW5nZXMgaW4gdGhlIENocm9tZSBBbmRyb2lk
Ci10ZXN0IGV4ZWN1dGlvbiB0b29sY2hhaW4uIEl0IGFsc28gY29udmVuaWVudGx5IHNldHMgdGhl
IENIRUNLT1VUX1NPVVJDRV9ST09UCi1lbnZpcm9ubWVudCB2YXJpYWJsZS4KLSIiIgotCi1pbXBv
cnQgb3MKLWltcG9ydCBzeXMKLQotU0NSSVBUX0RJUiA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVf
XykKLVJPT1RfRElSID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihTQ1JJUFRfRElSLCBv
cy5wYXJkaXIsIG9zLnBhcmRpcikpCi1DSFJPTUlVTV9CVUlMRF9BTkRST0lEX0RJUiA9IG9zLnBh
dGguam9pbihST09UX0RJUiwgJ2J1aWxkJywgJ2FuZHJvaWQnKQotc3lzLnBhdGguaW5zZXJ0KDAs
IENIUk9NSVVNX0JVSUxEX0FORFJPSURfRElSKQotCi0KLWltcG9ydCB0ZXN0X3J1bm5lciAgIyBw
eWxpbnQ6IGRpc2FibGU9VzA0MDYKLQotZGVmIG1haW4oKToKLSAgIyBPdmVycmlkZSBlbnZpcm9u
bWVudCB2YXJpYWJsZSB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciB0aGUgc2NyaXB0cyB0byBmaW5k
Ci0gICMgdGhlIHJvb3QgZGlyZWN0b3J5IChvdXIgc3ltbGlua2luZyBvZiB0aGUgQ2hyb21pdW0g
YnVpbGQgdG9vbGNoYWluIHdvdWxkCi0gICMgb3RoZXJ3aXNlIG1ha2UgdGhlbSBmYWlsIHRvIGRv
IHNvKS4KLSAgb3MuZW52aXJvblsnQ0hFQ0tPVVRfU09VUkNFX1JPT1QnXSA9IFJPT1RfRElSCi0g
IHJldHVybiB0ZXN0X3J1bm5lci5tYWluKCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoK
LSAgc3lzLmV4aXQobWFpbigpKQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS9saWJ5dXYvdXRpbC9hbmRyb2lkL3Rlc3Rf
cnVubmVyLnB5Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTEgKzAsMCAj
IwotKgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQvT1dORVJTCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FuZHJvaWRq
dW5pdC9PV05FUlMJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FuZHJvaWRqdW5pdC9PV05FUlMJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyICswLDAgQEAKLW1hZ2plZEB3ZWJydGMub3JnCi1zYWthbEB3ZWJydGMub3JnCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQvc3Jj
L29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25UZXN0LmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYy9v
cmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQv
c3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25UZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSw1MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQg
c3RhdGljIG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBw
b3J0ZWRGcmFtZXJhdGVSYW5nZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkLkNhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U7Ci0KLWltcG9ydCBvcmcuY2hy
b21pdW0udGVzdGluZy5sb2NhbC5Mb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lcjsKLWltcG9ydCBv
cmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQg
b3JnLnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotCi1pbXBvcnQgamF2YS51dGlsLkFy
cmF5czsKLQotLyoqCi0gKiBUZXN0cyBmb3IgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLgotICov
Ci1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFzcykKLUBDb25maWcobWFu
aWZlc3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBDYW1lcmFFbnVtZXJhdGlvblRlc3Qg
ewotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0
ZVJhbmdlKCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDMw
MDAwKSwKLSAgICAgICAgZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKEFycmF5cy5h
c0xpc3QobmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAzMDAwMCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZyYW1lcmF0ZVJhbmdlKDMwMDAwLCAz
MDAwMCkpLAotICAgICAgICAgICAgICAgICAgICAgMzAgLyogcmVxdWVzdGVkRnBzICovKSk7Ci0K
LSAgICBhc3NlcnRFcXVhbHMobmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAyMDAwMCksCi0gICAg
ICAgIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZSgKLSAgICAgICAgICAgICAgICAg
ICAgIEFycmF5cy5hc0xpc3QobmV3IEZyYW1lcmF0ZVJhbmdlKDAsIDMwMDAwKSwgbmV3IEZyYW1l
cmF0ZVJhbmdlKDEwMDAwLCAyMDAwMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZy
YW1lcmF0ZVJhbmdlKDE0MDAwLCAxNjAwMCksIG5ldyBGcmFtZXJhdGVSYW5nZSgxNTAwMCwgMTUw
MDApKSwKLSAgICAgICAgICAgICAgICAgICAgIDE1IC8qIHJlcXVlc3RlZEZwcyAqLykpOwotCi0g
ICAgYXNzZXJ0RXF1YWxzKG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMjAwMDApLAotICAgICAg
ICBnZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAg
ICBBcnJheXMuYXNMaXN0KG5ldyBGcmFtZXJhdGVSYW5nZSgxNTAwMCwgMTUwMDApLAotICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMjAwMDApLCBuZXcg
RnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDMwMDAwKSksCi0gICAgICAgICAgICAgICAgICAgICAxMCAv
KiByZXF1ZXN0ZWRGcHMgKi8pKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L09XTkVSUwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQvT1dO
RVJTCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQvT1dORVJTCShub25leGlzdGVudCkKQEAgLTEsMiArMCww
IEBACi1tYWdqZWRAd2VicnRjLm9yZwotc2FrYWxAd2VicnRjLm9yZwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYy9vcmcvd2Vi
cnRjL0NhbWVyYUVudW1lcmF0aW9uVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FuZHJvaWRqdW5pdC9zcmMvb3JnL3dlYnJ0
Yy9DYW1lcmFFbnVtZXJhdGlvblRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYy9vcmcv
d2VicnRjL0NhbWVyYUVudW1lcmF0aW9uVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTAg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBv
cmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkRnJh
bWVyYXRlUmFuZ2U7Ci0KLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9p
ZC5DYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlOwotCi1pbXBvcnQgb3JnLmNocm9taXVtLnRl
c3RpbmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0
LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5yb2Jv
bGVjdHJpYy5hbm5vdGF0aW9uLkNvbmZpZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0K
LS8qKgotICogVGVzdHMgZm9yIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC4KLSAqLwotQFJ1bldp
dGgoTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXIuY2xhc3MpCi1AQ29uZmlnKG1hbmlmZXN0ID0g
Q29uZmlnLk5PTkUpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhRW51bWVyYXRpb25UZXN0IHsKLSAgQFRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdEdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZSgp
IHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAzMDAwMCksCi0g
ICAgICAgIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZShBcnJheXMuYXNMaXN0KG5l
dyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMzAwMDApLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldyBGcmFtZXJhdGVSYW5nZSgzMDAwMCwgMzAwMDApKSwK
LSAgICAgICAgICAgICAgICAgICAgIDMwIC8qIHJlcXVlc3RlZEZwcyAqLykpOwotCi0gICAgYXNz
ZXJ0RXF1YWxzKG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMjAwMDApLAotICAgICAgICBnZXRD
bG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICBBcnJh
eXMuYXNMaXN0KG5ldyBGcmFtZXJhdGVSYW5nZSgwLCAzMDAwMCksIG5ldyBGcmFtZXJhdGVSYW5n
ZSgxMDAwMCwgMjAwMDApLAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGcmFtZXJhdGVS
YW5nZSgxNDAwMCwgMTYwMDApLCBuZXcgRnJhbWVyYXRlUmFuZ2UoMTUwMDAsIDE1MDAwKSksCi0g
ICAgICAgICAgICAgICAgICAgICAxNSAvKiByZXF1ZXN0ZWRGcHMgKi8pKTsKLQotICAgIGFzc2Vy
dEVxdWFscyhuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwKLSAgICAgICAgZ2V0Q2xv
c2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKAotICAgICAgICAgICAgICAgICAgICAgQXJyYXlz
LmFzTGlzdChuZXcgRnJhbWVyYXRlUmFuZ2UoMTUwMDAsIDE1MDAwKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwgbmV3IEZyYW1lcmF0
ZVJhbmdlKDEwMDAwLCAzMDAwMCkpLAotICAgICAgICAgICAgICAgICAgICAgMTAgLyogcmVxdWVz
dGVkRnBzICovKSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FuZHJvaWRqdW5pdC9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlv
blRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hbmRyb2lkanVuaXQvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25U
ZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FuZHJvaWRqdW5pdC9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJh
dGlvblRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQu
QXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5DYW1lcmFFbnVt
ZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlOwotCi1pbXBv
cnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdC5GcmFt
ZXJhdGVSYW5nZTsKLQotaW1wb3J0IG9yZy5jaHJvbWl1bS50ZXN0aW5nLmxvY2FsLkxvY2FsUm9i
b2xlY3RyaWNUZXN0UnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5q
dW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcucm9ib2xlY3RyaWMuYW5ub3RhdGlvbi5D
b25maWc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi0vKioKLSAqIFRlc3RzIGZvciBD
YW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuCi0gKi8KLUBSdW5XaXRoKExvY2FsUm9ib2xlY3RyaWNU
ZXN0UnVubmVyLmNsYXNzKQotQENvbmZpZyhtYW5pZmVzdCA9IENvbmZpZy5OT05FKQotcHVibGlj
IGNsYXNzIENhbWVyYUVudW1lcmF0aW9uVGVzdCB7Ci0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RHZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoKSB7Ci0gICAgYXNzZXJ0RXF1YWxz
KG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMzAwMDApLAotICAgICAgICBnZXRDbG9zZXN0U3Vw
cG9ydGVkRnJhbWVyYXRlUmFuZ2UoQXJyYXlzLmFzTGlzdChuZXcgRnJhbWVyYXRlUmFuZ2UoMTAw
MDAsIDMwMDAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXcgRnJhbWVyYXRlUmFuZ2UoMzAwMDAsIDMwMDAwKSksCi0gICAgICAgICAgICAgICAgICAg
ICAzMCAvKiByZXF1ZXN0ZWRGcHMgKi8pKTsKLQotICAgIGFzc2VydEVxdWFscyhuZXcgRnJhbWVy
YXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwKLSAgICAgICAgZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1l
cmF0ZVJhbmdlKAotICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdChuZXcgRnJhbWVy
YXRlUmFuZ2UoMCwgMzAwMDApLCBuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXcgRnJhbWVyYXRlUmFuZ2UoMTQwMDAsIDE2MDAwKSwg
bmV3IEZyYW1lcmF0ZVJhbmdlKDE1MDAwLCAxNTAwMCkpLAotICAgICAgICAgICAgICAgICAgICAg
MTUgLyogcmVxdWVzdGVkRnBzICovKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobmV3IEZyYW1lcmF0
ZVJhbmdlKDEwMDAwLCAyMDAwMCksCi0gICAgICAgIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJh
dGVSYW5nZSgKLSAgICAgICAgICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QobmV3IEZyYW1lcmF0
ZVJhbmdlKDE1MDAwLCAxNTAwMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZyYW1l
cmF0ZVJhbmdlKDEwMDAwLCAyMDAwMCksIG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMzAwMDAp
KSwKLSAgICAgICAgICAgICAgICAgICAgIDEwIC8qIHJlcXVlc3RlZEZwcyAqLykpOwotICB9Ci19
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hbmRyb2lk
anVuaXQvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25UZXN0LmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYW5kcm9pZGp1
bml0L3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uVGVzdC5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hbmRy
b2lkanVuaXQvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25UZXN0LmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSw1MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJS
VEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7
Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENs
b3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJh
RW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U7Ci0KLWltcG9y
dCBvcmcuY2hyb21pdW0udGVzdGluZy5sb2NhbC5Mb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lcjsK
LWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7
Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotCi1pbXBvcnQgamF2
YS51dGlsLkFycmF5czsKLQotLyoqCi0gKiBUZXN0cyBmb3IgQ2FtZXJhRW51bWVyYXRpb25BbmRy
b2lkLgotICovCi1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFzcykKLUBD
b25maWcobWFuaWZlc3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBDYW1lcmFFbnVtZXJh
dGlvblRlc3QgewotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q2xvc2VzdFN1cHBvcnRl
ZEZyYW1lcmF0ZVJhbmdlKCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgRnJhbWVyYXRlUmFuZ2Uo
MTAwMDAsIDMwMDAwKSwKLSAgICAgICAgZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdl
KEFycmF5cy5hc0xpc3QobmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAzMDAwMCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZyYW1lcmF0ZVJhbmdl
KDMwMDAwLCAzMDAwMCkpLAotICAgICAgICAgICAgICAgICAgICAgMzAgLyogcmVxdWVzdGVkRnBz
ICovKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMobmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAyMDAw
MCksCi0gICAgICAgIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZSgKLSAgICAgICAg
ICAgICAgICAgICAgIEFycmF5cy5hc0xpc3QobmV3IEZyYW1lcmF0ZVJhbmdlKDAsIDMwMDAwKSwg
bmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAyMDAwMCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3IEZyYW1lcmF0ZVJhbmdlKDE0MDAwLCAxNjAwMCksIG5ldyBGcmFtZXJhdGVSYW5nZSgx
NTAwMCwgMTUwMDApKSwKLSAgICAgICAgICAgICAgICAgICAgIDE1IC8qIHJlcXVlc3RlZEZwcyAq
LykpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMjAwMDAp
LAotICAgICAgICBnZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoCi0gICAgICAgICAg
ICAgICAgICAgICBBcnJheXMuYXNMaXN0KG5ldyBGcmFtZXJhdGVSYW5nZSgxNTAwMCwgMTUwMDAp
LAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMjAw
MDApLCBuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDMwMDAwKSksCi0gICAgICAgICAgICAgICAg
ICAgICAxMCAvKiByZXF1ZXN0ZWRGcHMgKi8pKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYy9vcmcvd2VicnRj
L0NhbWVyYUVudW1lcmF0aW9uVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FuZHJvaWRqdW5pdC9zcmMvb3JnL3dlYnJ0Yy9D
YW1lcmFFbnVtZXJhdGlvblRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYW5kcm9pZGp1bml0L3NyYy9vcmcvd2Vi
cnRjL0NhbWVyYUVudW1lcmF0aW9uVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTAgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
c3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwotaW1wb3J0IHN0YXRpYyBvcmcu
d2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVy
YXRlUmFuZ2U7Ci0KLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5D
YXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlOwotCi1pbXBvcnQgb3JnLmNocm9taXVtLnRlc3Rp
bmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LlRl
c3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5yb2JvbGVj
dHJpYy5hbm5vdGF0aW9uLkNvbmZpZzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLS8q
KgotICogVGVzdHMgZm9yIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC4KLSAqLwotQFJ1bldpdGgo
TG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXIuY2xhc3MpCi1AQ29uZmlnKG1hbmlmZXN0ID0gQ29u
ZmlnLk5PTkUpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhRW51bWVyYXRpb25UZXN0IHsKLSAgQFRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdEdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZSgpIHsK
LSAgICBhc3NlcnRFcXVhbHMobmV3IEZyYW1lcmF0ZVJhbmdlKDEwMDAwLCAzMDAwMCksCi0gICAg
ICAgIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZShBcnJheXMuYXNMaXN0KG5ldyBG
cmFtZXJhdGVSYW5nZSgxMDAwMCwgMzAwMDApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5ldyBGcmFtZXJhdGVSYW5nZSgzMDAwMCwgMzAwMDApKSwKLSAg
ICAgICAgICAgICAgICAgICAgIDMwIC8qIHJlcXVlc3RlZEZwcyAqLykpOwotCi0gICAgYXNzZXJ0
RXF1YWxzKG5ldyBGcmFtZXJhdGVSYW5nZSgxMDAwMCwgMjAwMDApLAotICAgICAgICBnZXRDbG9z
ZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoCi0gICAgICAgICAgICAgICAgICAgICBBcnJheXMu
YXNMaXN0KG5ldyBGcmFtZXJhdGVSYW5nZSgwLCAzMDAwMCksIG5ldyBGcmFtZXJhdGVSYW5nZSgx
MDAwMCwgMjAwMDApLAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGcmFtZXJhdGVSYW5n
ZSgxNDAwMCwgMTYwMDApLCBuZXcgRnJhbWVyYXRlUmFuZ2UoMTUwMDAsIDE1MDAwKSksCi0gICAg
ICAgICAgICAgICAgICAgICAxNSAvKiByZXF1ZXN0ZWRGcHMgKi8pKTsKLQotICAgIGFzc2VydEVx
dWFscyhuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwKLSAgICAgICAgZ2V0Q2xvc2Vz
dFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKAotICAgICAgICAgICAgICAgICAgICAgQXJyYXlzLmFz
TGlzdChuZXcgRnJhbWVyYXRlUmFuZ2UoMTUwMDAsIDE1MDAwKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXcgRnJhbWVyYXRlUmFuZ2UoMTAwMDAsIDIwMDAwKSwgbmV3IEZyYW1lcmF0ZVJh
bmdlKDEwMDAwLCAzMDAwMCkpLAotICAgICAgICAgICAgICAgICAgICAgMTAgLyogcmVxdWVzdGVk
RnBzICovKSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL1BSRVNVQk1JVC5weQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9QUkVTVUJNSVQu
cHkJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL1BSRVNVQk1JVC5weQkobm9uZXhpc3RlbnQpCkBAIC0xLDI4
ICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0jIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotIyB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0j
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSMgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0KLWRlZiBDaGVja0NoYW5nZU9uVXBsb2FkKGlucHV0X2FwaSwgb3V0cHV0X2Fw
aSk6Ci0gIHJlc3VsdHMgPSBbXQotICByZXN1bHRzLmV4dGVuZChDaGVja1BhdGNoRm9ybWF0dGVk
KGlucHV0X2FwaSwgb3V0cHV0X2FwaSkpCi0gIHJldHVybiByZXN1bHRzCi0KLWRlZiBDaGVja1Bh
dGNoRm9ybWF0dGVkKGlucHV0X2FwaSwgb3V0cHV0X2FwaSk6Ci0gIGltcG9ydCBnaXRfY2wKLSAg
Y21kID0gWydjbCcsICdmb3JtYXQnLCAnLS1kcnktcnVuJywgaW5wdXRfYXBpLlByZXN1Ym1pdExv
Y2FsUGF0aCgpXQotICBjb2RlLCBfID0gZ2l0X2NsLlJ1bkdpdFdpdGhDb2RlKGNtZCwgc3VwcHJl
c3Nfc3RkZXJyPVRydWUpCi0gIGlmIGNvZGUgPT0gMjoKLSAgICBzaG9ydF9wYXRoID0gaW5wdXRf
YXBpLmJhc2VuYW1lKGlucHV0X2FwaS5QcmVzdWJtaXRMb2NhbFBhdGgoKSkKLSAgICBmdWxsX3Bh
dGggPSBpbnB1dF9hcGkub3NfcGF0aC5yZWxwYXRoKGlucHV0X2FwaS5QcmVzdWJtaXRMb2NhbFBh
dGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2Fw
aS5jaGFuZ2UuUmVwb3NpdG9yeVJvb3QoKSkKLSAgICByZXR1cm4gW291dHB1dF9hcGkuUHJlc3Vi
bWl0UHJvbXB0V2FybmluZygKLSAgICAgICdUaGUgJXMgZGlyZWN0b3J5IHJlcXVpcmVzIHNvdXJj
ZSBmb3JtYXR0aW5nLiAnCi0gICAgICAnUGxlYXNlIHJ1biBnaXQgY2wgZm9ybWF0ICVzJyAlCi0g
ICAgICAoc2hvcnRfcGF0aCwgZnVsbF9wYXRoKSldCi0gICMgQXMgdGhpcyBpcyBqdXN0IGEgd2Fy
bmluZywgaWdub3JlIGFsbCBvdGhlciBlcnJvcnMgaWYgdGhlIHVzZXIKLSAgIyBoYXBwZW5zIHRv
IGhhdmUgYSBicm9rZW4gY2xhbmctZm9ybWF0LCBkb2Vzbid0IHVzZSBnaXQsIGV0YyBldGMuCi0g
IHJldHVybiBbXQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvUkVBRE1FCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL1JFQURNRQkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvUkVBRE1FCShub25leGlzdGVudCkKQEAgLTEsMTEgKzAsMCBAQAotVGhpcyBkaXJlY3Rvcnkg
aG9sZHMgYSBKYXZhIGltcGxlbWVudGF0aW9uIG9mIHRoZSB3ZWJydGM6OlBlZXJDb25uZWN0aW9u
IEFQSSwgYXMKLXdlbGwgYXMgdGhlIEpOSSBnbHVlIEMrKyBjb2RlIHRoYXQgbGV0cyB0aGUgSmF2
YSBpbXBsZW1lbnRhdGlvbiByZXVzZSB0aGUgQysrCi1pbXBsZW1lbnRhdGlvbiBvZiB0aGUgc2Ft
ZSBBUEkuCi0KLVRvIGJ1aWxkIHRoZSBKYXZhIEFQSSBhbmQgcmVsYXRlZCB0ZXN0cywgZ2VuZXJh
dGUgR04gcHJvamVjdHMgd2l0aDoKLS0tYXJncz0ndGFyZ2V0X29zPSJhbmRyb2lkIicKLQotVG8g
dXNlIHRoZSBKYXZhIEFQSSwgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgcHVibGljIGludGVyZmFj
ZSBvZgotb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbnssRmFjdG9yeX0gYW5kIHRoZSBvcmcud2Vi
cnRjLlBlZXJDb25uZWN0aW9uVGVzdC4KLQotVG8gdW5kZXJzdGFuZCB0aGUgaW1wbGVtZW50YXRp
b24gb2YgdGhlIEFQSSwgc2VlIHRoZSBuYXRpdmUgY29kZSBpbiBqbmkvLgpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9BdWRpb1NvdXJjZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvQXVkaW9Tb3VyY2UuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9BdWRpb1NvdXJjZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEphdmEgd3JhcHBl
ciBmb3IgYSBDKysgQXVkaW9Tb3VyY2VJbnRlcmZhY2UuICBVc2VkIGFzIHRoZSBzb3VyY2UgZm9y
IG9uZSBvcgotICogbW9yZSB7QGNvZGUgQXVkaW9UcmFja30gb2JqZWN0cy4KLSAqLwotcHVibGlj
IGNsYXNzIEF1ZGlvU291cmNlIGV4dGVuZHMgTWVkaWFTb3VyY2UgewotICBwdWJsaWMgQXVkaW9T
b3VyY2UobG9uZyBuYXRpdmVTb3VyY2UpIHsKLSAgICBzdXBlcihuYXRpdmVTb3VyY2UpOwotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0F1ZGlvVHJhY2suamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL0F1ZGlvVHJhY2suamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1RyYWNrLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxOCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBK
YXZhIHdyYXBwZXIgZm9yIGEgQysrIEF1ZGlvVHJhY2tJbnRlcmZhY2UgKi8KLXB1YmxpYyBjbGFz
cyBBdWRpb1RyYWNrIGV4dGVuZHMgTWVkaWFTdHJlYW1UcmFjayB7Ci0gIHB1YmxpYyBBdWRpb1Ry
YWNrKGxvbmcgbmF0aXZlVHJhY2spIHsKLSAgICBzdXBlcihuYXRpdmVUcmFjayk7Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYWxsU2Vzc2lvbkZpbGVSb3RhdGlu
Z0xvZ1NpbmsuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYWxs
U2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM5ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotcHVibGlj
IGNsYXNzIENhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luayB7Ci0gIHN0YXRpYyB7Ci0gICAg
U3lzdGVtLmxvYWRMaWJyYXJ5KCJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fc28iKTsKLSAgfQotCi0g
IHByaXZhdGUgbG9uZyBuYXRpdmVTaW5rOwotCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldExv
Z0RhdGEoU3RyaW5nIGRpclBhdGgpIHsKLSAgICByZXR1cm4gbmF0aXZlR2V0TG9nRGF0YShkaXJQ
YXRoKTsKLSAgfQotCi0gIHB1YmxpYyBDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsoCi0g
ICAgICBTdHJpbmcgZGlyUGF0aCwgaW50IG1heEZpbGVTaXplLCBMb2dnaW5nLlNldmVyaXR5IHNl
dmVyaXR5KSB7Ci0gICAgbmF0aXZlU2luayA9IG5hdGl2ZUFkZFNpbmsoZGlyUGF0aCwgbWF4Rmls
ZVNpemUsIHNldmVyaXR5Lm9yZGluYWwoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3Nl
KCkgewotICAgIGlmIChuYXRpdmVTaW5rICE9IDApIHsKLSAgICAgIG5hdGl2ZURlbGV0ZVNpbmso
bmF0aXZlU2luayk7Ci0gICAgICBuYXRpdmVTaW5rID0gMDsKLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVBZGRTaW5rKFN0cmluZyBkaXJQYXRoLCBpbnQg
bWF4RmlsZVNpemUsIGludCBzZXZlcml0eSk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lk
IG5hdGl2ZURlbGV0ZVNpbmsobG9uZyBuYXRpdmVTaW5rKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIGJ5dGVbXSBuYXRpdmVHZXRMb2dEYXRhKFN0cmluZyBkaXJQYXRoKTsKLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM4
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci0K
LWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0
OwotCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMUNhcHR1cmVyIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZXIg
ewotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZTsKLQotICBwdWJsaWMg
Q2FtZXJhMUNhcHR1cmVyKAotICAgICAgU3RyaW5nIGNhbWVyYU5hbWUsIENhbWVyYUV2ZW50c0hh
bmRsZXIgZXZlbnRzSGFuZGxlciwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgc3Vw
ZXIoY2FtZXJhTmFtZSwgZXZlbnRzSGFuZGxlciwgbmV3IENhbWVyYTFFbnVtZXJhdG9yKGNhcHR1
cmVUb1RleHR1cmUpKTsKLQotICAgIHRoaXMuY2FwdHVyZVRvVGV4dHVyZSA9IGNhcHR1cmVUb1Rl
eHR1cmU7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2FtZXJh
U2Vzc2lvbihDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjayBjcmVhdGVTZXNzaW9u
Q2FsbGJhY2ssCi0gICAgICBDYW1lcmFTZXNzaW9uLkV2ZW50cyBldmVudHMsIENvbnRleHQgYXBw
bGljYXRpb25Db250ZXh0LAotICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1
cmVIZWxwZXIsIFN0cmluZyBjYW1lcmFOYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAg
ICBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgQ2FtZXJhMVNlc3Npb24uY3JlYXRlKGNyZWF0ZVNlc3Np
b25DYWxsYmFjaywgZXZlbnRzLCBjYXB0dXJlVG9UZXh0dXJlLCBhcHBsaWNhdGlvbkNvbnRleHQs
Ci0gICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDYW1lcmExRW51bWVyYXRvci5nZXRDYW1l
cmFJbmRleChjYW1lcmFOYW1lKSwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgZnJhbWVyYXRlKTsK
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExRW51bWVyYXRvci5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUVudW1lcmF0b3IuamF2YQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExRW51bWVyYXRvci5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBv
cnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBv
cmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotCi1AU3Vw
cHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIENhbWVyYTFFbnVtZXJh
dG9yIGltcGxlbWVudHMgQ2FtZXJhRW51bWVyYXRvciB7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGlj
IFN0cmluZyBUQUcgPSAiQ2FtZXJhMUVudW1lcmF0b3IiOwotICAvLyBFYWNoIGVudHJ5IGNvbnRh
aW5zIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY29ycmVzcG9uZGluZyBjYW1lcmEgaW5kZXgu
IFRoZSBmb3JtYXRzIGZvciBhbGwKLSAgLy8gY2FtZXJhcyBhcmUgZW51bWVyYXRlZCBvbiB0aGUg
Zmlyc3QgY2FsbCB0byBnZXRTdXBwb3J0ZWRGb3JtYXRzKCksIGFuZCBjYWNoZWQgZm9yIGZ1dHVy
ZQotICAvLyByZWZlcmVuY2UuCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8TGlzdDxDYXB0dXJlRm9y
bWF0Pj4gY2FjaGVkU3VwcG9ydGVkRm9ybWF0czsKLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4g
Y2FwdHVyZVRvVGV4dHVyZTsKLQotICBwdWJsaWMgQ2FtZXJhMUVudW1lcmF0b3IoKSB7Ci0gICAg
dGhpcyh0cnVlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgcHVibGljIENhbWVy
YTFFbnVtZXJhdG9yKGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSkgewotICAgIHRoaXMuY2FwdHVy
ZVRvVGV4dHVyZSA9IGNhcHR1cmVUb1RleHR1cmU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGRldmlj
ZSBuYW1lcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBWaWRlb0NhcHR1cmVyQW5k
cm9pZC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZXZpY2VOYW1lcygpIHsK
LSAgICBBcnJheUxpc3Q8U3RyaW5nPiBuYW1lc0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9m
Q2FtZXJhcygpOyArK2kpIHsKLSAgICAgIFN0cmluZyBuYW1lID0gZ2V0RGV2aWNlTmFtZShpKTsK
LSAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKLSAgICAgICAgbmFtZXNMaXN0LmFkZChuYW1lKTsK
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkluZGV4OiAiICsgaSArICIuICIgKyBuYW1lKTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJJbmRleDogIiArIGkgKyAiLiBG
YWlsZWQgdG8gcXVlcnkgY2FtZXJhIG5hbWUuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIFN0cmlu
Z1tdIG5hbWVzQXJyYXkgPSBuZXcgU3RyaW5nW25hbWVzTGlzdC5zaXplKCldOwotICAgIHJldHVy
biBuYW1lc0xpc3QudG9BcnJheShuYW1lc0FycmF5KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgYm9vbGVhbiBpc0Zyb250RmFjaW5nKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvID0gZ2V0Q2FtZXJhSW5mbyhnZXRD
YW1lcmFJbmRleChkZXZpY2VOYW1lKSk7Ci0gICAgcmV0dXJuIGluZm8gIT0gbnVsbCAmJiBpbmZv
LmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJ
TkdfRlJPTlQ7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNCYWNrRmFj
aW5nKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2Ft
ZXJhSW5mbyBpbmZvID0gZ2V0Q2FtZXJhSW5mbyhnZXRDYW1lcmFJbmRleChkZXZpY2VOYW1lKSk7
Ci0gICAgcmV0dXJuIGluZm8gIT0gbnVsbCAmJiBpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3
YXJlLkNhbWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfQkFDSzsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgTGlzdDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKFN0
cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgcmV0dXJuIGdldFN1cHBvcnRlZEZvcm1hdHMoZ2V0Q2Ft
ZXJhSW5kZXgoZGV2aWNlTmFtZSkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBDYW1l
cmFWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAgU3RyaW5nIGRldmljZU5hbWUs
IENhbWVyYVZpZGVvQ2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyKSB7
Ci0gICAgcmV0dXJuIG5ldyBDYW1lcmExQ2FwdHVyZXIoZGV2aWNlTmFtZSwgZXZlbnRzSGFuZGxl
ciwgY2FwdHVyZVRvVGV4dHVyZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGdldENhbWVyYUluZm8oaW50IGluZGV4KSB7Ci0gICAg
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvID0gbmV3IGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8oKTsKLSAgICB0cnkgewotICAgICAgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuZ2V0Q2FtZXJhSW5mbyhpbmRleCwgaW5mbyk7Ci0gICAgfSBjYXRjaCAoRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJnZXRDYW1lcmFJbmZvIGZhaWxlZCBv
biBpbmRleCAiICsgaW5kZXgsIGUpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJl
dHVybiBpbmZvOwotICB9Ci0KLSAgc3RhdGljIHN5bmNocm9uaXplZCBMaXN0PENhcHR1cmVGb3Jt
YXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoaW50IGNhbWVyYUlkKSB7Ci0gICAgaWYgKGNhY2hlZFN1
cHBvcnRlZEZvcm1hdHMgPT0gbnVsbCkgewotICAgICAgY2FjaGVkU3VwcG9ydGVkRm9ybWF0cyA9
IG5ldyBBcnJheUxpc3Q8TGlzdDxDYXB0dXJlRm9ybWF0Pj4oKTsKLSAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCk7ICsr
aSkgewotICAgICAgICBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzLmFkZChlbnVtZXJhdGVGb3JtYXRz
KGkpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMu
Z2V0KGNhbWVyYUlkKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1h
dD4gZW51bWVyYXRlRm9ybWF0cyhpbnQgY2FtZXJhSWQpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
R2V0IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjYW1lcmEgaW5kZXggIiArIGNhbWVyYUlkICsgIi4i
KTsKLSAgICBmaW5hbCBsb25nIHN0YXJ0VGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0
aW1lKCk7Ci0gICAgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJh
bWV0ZXJzOwotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSA9IG51bGw7Ci0gICAg
dHJ5IHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJPcGVuaW5nIGNhbWVyYSB3aXRoIGluZGV4ICIg
KyBjYW1lcmFJZCk7Ci0gICAgICBjYW1lcmEgPSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5vcGVu
KGNhbWVyYUlkKTsKLSAgICAgIHBhcmFtZXRlcnMgPSBjYW1lcmEuZ2V0UGFyYW1ldGVycygpOwot
ICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
Ik9wZW4gY2FtZXJhIGZhaWxlZCBvbiBjYW1lcmEgaW5kZXggIiArIGNhbWVyYUlkLCBlKTsKLSAg
ICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQ+KCk7Ci0gICAgfSBmaW5hbGx5
IHsKLSAgICAgIGlmIChjYW1lcmEgIT0gbnVsbCkgewotICAgICAgICBjYW1lcmEucmVsZWFzZSgp
OwotICAgICAgfQotICAgIH0KLQotICAgIGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZm9ybWF0
TGlzdCA9IG5ldyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4oKTsKLSAgICB0cnkgewotICAgICAg
aW50IG1pbkZwcyA9IDA7Ci0gICAgICBpbnQgbWF4RnBzID0gMDsKLSAgICAgIGZpbmFsIExpc3Q8
aW50W10+IGxpc3RGcHNSYW5nZSA9IHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld0Zwc1Jh
bmdlKCk7Ci0gICAgICBpZiAobGlzdEZwc1JhbmdlICE9IG51bGwpIHsKLSAgICAgICAgLy8gZ2V0
U3VwcG9ydGVkUHJldmlld0Zwc1JhbmdlKCkgcmV0dXJucyBhIHNvcnRlZCBsaXN0LiBUYWtlIHRo
ZSBmcHMgcmFuZ2UKLSAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgaGlnaGVzdCBmcHMu
Ci0gICAgICAgIGZpbmFsIGludFtdIHJhbmdlID0gbGlzdEZwc1JhbmdlLmdldChsaXN0RnBzUmFu
Z2Uuc2l6ZSgpIC0gMSk7Ci0gICAgICAgIG1pbkZwcyA9IHJhbmdlW2FuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLlBhcmFtZXRlcnMuUFJFVklFV19GUFNfTUlOX0lOREVYXTsKLSAgICAgICAgbWF4RnBz
ID0gcmFuZ2VbYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycy5QUkVWSUVXX0ZQU19N
QVhfSU5ERVhdOwotICAgICAgfQotICAgICAgZm9yIChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5T
aXplIHNpemUgOiBwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZFByZXZpZXdTaXplcygpKSB7Ci0gICAg
ICAgIGZvcm1hdExpc3QuYWRkKG5ldyBDYXB0dXJlRm9ybWF0KHNpemUud2lkdGgsIHNpemUuaGVp
Z2h0LCBtaW5GcHMsIG1heEZwcykpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZ2V0U3VwcG9ydGVkRm9ybWF0cygpIGZhaWxlZCBv
biBjYW1lcmEgaW5kZXggIiArIGNhbWVyYUlkLCBlKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBsb25n
IGVuZFRpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgIExvZ2dpbmcu
ZChUQUcsICJHZXQgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRleCAiICsgY2FtZXJh
SWQgKyAiIGRvbmUuIgotICAgICAgICAgICAgKyAiIFRpbWUgc3BlbnQ6ICIgKyAoZW5kVGltZU1z
IC0gc3RhcnRUaW1lTXMpICsgIiBtcy4iKTsKLSAgICByZXR1cm4gZm9ybWF0TGlzdDsKLSAgfQot
Ci0gIC8vIENvbnZlcnQgZnJvbSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5TaXplIHRvIFNpemUu
Ci0gIHN0YXRpYyBMaXN0PFNpemU+IGNvbnZlcnRTaXplcyhMaXN0PGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLlNpemU+IGNhbWVyYVNpemVzKSB7Ci0gICAgZmluYWwgTGlzdDxTaXplPiBzaXplcyA9
IG5ldyBBcnJheUxpc3Q8U2l6ZT4oKTsKLSAgICBmb3IgKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LlNpemUgc2l6ZSA6IGNhbWVyYVNpemVzKSB7Ci0gICAgICBzaXplcy5hZGQobmV3IFNpemUoc2l6
ZS53aWR0aCwgc2l6ZS5oZWlnaHQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpemVzOwotICB9Ci0K
LSAgLy8gQ29udmVydCBmcm9tIGludFsyXSB0byBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdl
LgotICBzdGF0aWMgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBjb252ZXJ0RnJh
bWVyYXRlcyhMaXN0PGludFtdPiBhcnJheVJhbmdlcykgewotICAgIGZpbmFsIExpc3Q8Q2FwdHVy
ZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gcmFuZ2VzID0gbmV3IEFycmF5TGlzdDxDYXB0dXJlRm9y
bWF0LkZyYW1lcmF0ZVJhbmdlPigpOwotICAgIGZvciAoaW50W10gcmFuZ2UgOiBhcnJheVJhbmdl
cykgewotICAgICAgcmFuZ2VzLmFkZChuZXcgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSgK
LSAgICAgICAgICByYW5nZVthbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLlBSRVZJ
RVdfRlBTX01JTl9JTkRFWF0sCi0gICAgICAgICAgcmFuZ2VbYW5kcm9pZC5oYXJkd2FyZS5DYW1l
cmEuUGFyYW1ldGVycy5QUkVWSUVXX0ZQU19NQVhfSU5ERVhdKSk7Ci0gICAgfQotICAgIHJldHVy
biByYW5nZXM7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBjYW1lcmEgaW5kZXggZm9yIGNhbWVy
YSB3aXRoIG5hbWUgfGRldmljZU5hbWV8LCBvciB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uCi0gIC8vIGlmIG5vIHN1Y2ggY2FtZXJhIGNhbiBiZSBmb3VuZC4KLSAgc3RhdGljIGludCBn
ZXRDYW1lcmFJbmRleChTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJn
ZXRDYW1lcmFJbmRleDogIiArIGRldmljZU5hbWUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCk7ICsraSkgewotICAg
ICAgaWYgKGRldmljZU5hbWUuZXF1YWxzKGdldERldmljZU5hbWUoaSkpKSB7Ci0gICAgICAgIHJl
dHVybiBpOwotICAgICAgfQotICAgIH0KLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKCJObyBzdWNoIGNhbWVyYTogIiArIGRldmljZU5hbWUpOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0aGUgbmFtZSBvZiB0aGUgY2FtZXJhIHdpdGggY2FtZXJhIGluZGV4LiBSZXR1cm5zIG51
bGwgaWYgdGhlCi0gIC8vIGNhbWVyYSBjYW4gbm90IGJlIHVzZWQuCi0gIHN0YXRpYyBTdHJpbmcg
Z2V0RGV2aWNlTmFtZShpbnQgaW5kZXgpIHsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5D
YW1lcmFJbmZvIGluZm8gPSBnZXRDYW1lcmFJbmZvKGluZGV4KTsKLSAgICBpZiAoaW5mbyA9PSBu
dWxsKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZmFjaW5nID0K
LSAgICAgICAgKGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUlu
Zm8uQ0FNRVJBX0ZBQ0lOR19GUk9OVCkgPyAiZnJvbnQiIDogImJhY2siOwotICAgIHJldHVybiAi
Q2FtZXJhICIgKyBpbmRleCArICIsIEZhY2luZyAiICsgZmFjaW5nICsgIiwgT3JpZW50YXRpb24g
IiArIGluZm8ub3JpZW50YXRpb247Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2Ft
ZXJhMVNlc3Npb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFT
ZXNzaW9uLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJh
MVNlc3Npb24uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM0NCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQu
Q29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5T
eXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lk
LnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0
IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVt
ZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLk1ldHJpY3Mu
SGlzdG9ncmFtOwotCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNs
YXNzIENhbWVyYTFTZXNzaW9uIGltcGxlbWVudHMgQ2FtZXJhU2Vzc2lvbiB7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJhMVNlc3Npb24iOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgTlVNQkVSX09GX0NBUFRVUkVfQlVGRkVSUyA9IDM7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTFTdGFydFRpbWVNc0hpc3RvZ3JhbSA9Ci0g
ICAgICBIaXN0b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmExLlN0YXJ0
VGltZU1zIiwgMSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFt
IGNhbWVyYTFTdG9wVGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3Vu
dHMoIldlYlJUQy5BbmRyb2lkLkNhbWVyYTEuU3RvcFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmExUmVzb2x1dGlvbkhpc3RvZ3Jh
bSA9IEhpc3RvZ3JhbS5jcmVhdGVFbnVtZXJhdGlvbigKLSAgICAgICJXZWJSVEMuQW5kcm9pZC5D
YW1lcmExLlJlc29sdXRpb24iLCBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ09NTU9OX1JFU09M
VVRJT05TLnNpemUoKSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZW51bSBTZXNzaW9uU3RhdGUgeyBS
VU5OSU5HLCBTVE9QUEVEIH0KLQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgY2FtZXJhVGhyZWFk
SGFuZGxlcjsKLSAgcHJpdmF0ZSBmaW5hbCBFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIGZpbmFs
IGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZTsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcGxp
Y2F0aW9uQ29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJm
YWNlVGV4dHVyZUhlbHBlcjsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgY2FtZXJhSWQ7Ci0gIHByaXZh
dGUgZmluYWwgaW50IHdpZHRoOwotICBwcml2YXRlIGZpbmFsIGludCBoZWlnaHQ7Ci0gIHByaXZh
dGUgZmluYWwgaW50IGZyYW1lcmF0ZTsKLSAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYSBjYW1lcmE7Ci0gIHByaXZhdGUgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
Q2FtZXJhSW5mbyBpbmZvOwotICBwcml2YXRlIGZpbmFsIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZv
cm1hdDsKLSAgLy8gVXNlZCBvbmx5IGZvciBzdGF0cy4gT25seSB1c2VkIG9uIHRoZSBjYW1lcmEg
dGhyZWFkLgotICBwcml2YXRlIGZpbmFsIGxvbmcgY29uc3RydWN0aW9uVGltZU5zOyAvLyBDb25z
dHJ1Y3Rpb24gdGltZSBvZiB0aGlzIGNsYXNzLgotCi0gIHByaXZhdGUgU2Vzc2lvblN0YXRlIHN0
YXRlOwotICBwcml2YXRlIGJvb2xlYW4gZmlyc3RGcmFtZVJlcG9ydGVkID0gZmFsc2U7Ci0KLSAg
cHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZShmaW5hbCBDcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIGZpbmFsIEV2ZW50cyBldmVudHMsCi0gICAgICBmaW5hbCBib29sZWFuIGNhcHR1cmVU
b1RleHR1cmUsIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgZmluYWwg
U3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIGZpbmFsIGludCBjYW1l
cmFJZCwgZmluYWwgaW50IHdpZHRoLAotICAgICAgZmluYWwgaW50IGhlaWdodCwgZmluYWwgaW50
IGZyYW1lcmF0ZSkgewotICAgIGZpbmFsIGxvbmcgY29uc3RydWN0aW9uVGltZU5zID0gU3lzdGVt
Lm5hbm9UaW1lKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIk9wZW4gY2FtZXJhICIgKyBjYW1lcmFJ
ZCk7Ci0gICAgZXZlbnRzLm9uQ2FtZXJhT3BlbmluZygpOwotCi0gICAgZmluYWwgYW5kcm9pZC5o
YXJkd2FyZS5DYW1lcmEgY2FtZXJhOwotICAgIHRyeSB7Ci0gICAgICBjYW1lcmEgPSBhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5vcGVuKGNhbWVyYUlkKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZShlLmdldE1lc3NhZ2UoKSk7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3
VGV4dHVyZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICB9
IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBjYW1lcmEucmVsZWFzZSgpOwotICAgICAg
Y2FsbGJhY2sub25GYWlsdXJlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8gPSBu
ZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbygpOwotICAgIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLmdldENhbWVyYUluZm8oY2FtZXJhSWQsIGluZm8pOwotCi0gICAgZmluYWwg
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gY2FtZXJhLmdl
dFBhcmFtZXRlcnMoKTsKLSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQgPQot
ICAgICAgICBmaW5kQ2xvc2VzdENhcHR1cmVGb3JtYXQocGFyYW1ldGVycywgd2lkdGgsIGhlaWdo
dCwgZnJhbWVyYXRlKTsKLSAgICBmaW5hbCBTaXplIHBpY3R1cmVTaXplID0gZmluZENsb3Nlc3RQ
aWN0dXJlU2l6ZShwYXJhbWV0ZXJzLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHVwZGF0ZUNhbWVy
YVBhcmFtZXRlcnMoY2FtZXJhLCBwYXJhbWV0ZXJzLCBjYXB0dXJlRm9ybWF0LCBwaWN0dXJlU2l6
ZSwgY2FwdHVyZVRvVGV4dHVyZSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBjYXB0dXJlIGJ1
ZmZlcnMuCi0gICAgaWYgKCFjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgICBmaW5hbCBpbnQgZnJh
bWVTaXplID0gY2FwdHVyZUZvcm1hdC5mcmFtZVNpemUoKTsKLSAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgTlVNQkVSX09GX0NBUFRVUkVfQlVGRkVSUzsgKytpKSB7Ci0gICAgICAgIGZpbmFsIEJ5
dGVCdWZmZXIgYnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChmcmFtZVNpemUpOwot
ICAgICAgICBjYW1lcmEuYWRkQ2FsbGJhY2tCdWZmZXIoYnVmZmVyLmFycmF5KCkpOwotICAgICAg
fQotICAgIH0KLQotICAgIC8vIENhbGN1bGF0ZSBvcmllbnRhdGlvbiBtYW51YWxseSBhbmQgc2Vu
ZCBpdCBhcyBDVk8gaW5zdGVkLgotICAgIGNhbWVyYS5zZXREaXNwbGF5T3JpZW50YXRpb24oMCAv
KiBkZWdyZWVzICovKTsKLQotICAgIGNhbGxiYWNrLm9uRG9uZSgKLSAgICAgICAgbmV3IENhbWVy
YTFTZXNzaW9uKGV2ZW50cywgY2FwdHVyZVRvVGV4dHVyZSwgYXBwbGljYXRpb25Db250ZXh0LCBz
dXJmYWNlVGV4dHVyZUhlbHBlciwKLSAgICAgICAgICAgIGNhbWVyYUlkLCB3aWR0aCwgaGVpZ2h0
LCBmcmFtZXJhdGUsIGNhbWVyYSwgaW5mbywgY2FwdHVyZUZvcm1hdCwgY29uc3RydWN0aW9uVGlt
ZU5zKSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHVwZGF0ZUNhbWVyYVBhcmFtZXRl
cnMoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhLAotICAgICAgYW5kcm9pZC5oYXJkd2Fy
ZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzLCBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3Jt
YXQsIFNpemUgcGljdHVyZVNpemUsCi0gICAgICBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsK
LSAgICBmaW5hbCBMaXN0PFN0cmluZz4gZm9jdXNNb2RlcyA9IHBhcmFtZXRlcnMuZ2V0U3VwcG9y
dGVkRm9jdXNNb2RlcygpOwotCi0gICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3RnBzUmFuZ2UoY2Fw
dHVyZUZvcm1hdC5mcmFtZXJhdGUubWluLCBjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXgpOwot
ICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld1NpemUoY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVy
ZUZvcm1hdC5oZWlnaHQpOwotICAgIHBhcmFtZXRlcnMuc2V0UGljdHVyZVNpemUocGljdHVyZVNp
emUud2lkdGgsIHBpY3R1cmVTaXplLmhlaWdodCk7Ci0gICAgaWYgKCFjYXB0dXJlVG9UZXh0dXJl
KSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdGb3JtYXQoY2FwdHVyZUZvcm1hdC5pbWFn
ZUZvcm1hdCk7Ci0gICAgfQotCi0gICAgaWYgKHBhcmFtZXRlcnMuaXNWaWRlb1N0YWJpbGl6YXRp
b25TdXBwb3J0ZWQoKSkgewotICAgICAgcGFyYW1ldGVycy5zZXRWaWRlb1N0YWJpbGl6YXRpb24o
dHJ1ZSk7Ci0gICAgfQotICAgIGlmIChmb2N1c01vZGVzLmNvbnRhaW5zKGFuZHJvaWQuaGFyZHdh
cmUuQ2FtZXJhLlBhcmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKSkgewotICAg
ICAgcGFyYW1ldGVycy5zZXRGb2N1c01vZGUoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1l
dGVycy5GT0NVU19NT0RFX0NPTlRJTlVPVVNfVklERU8pOwotICAgIH0KLSAgICBjYW1lcmEuc2V0
UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIENhcHR1cmVG
b3JtYXQgZmluZENsb3Nlc3RDYXB0dXJlRm9ybWF0KAotICAgICAgYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBm
cmFtZXJhdGUpIHsKLSAgICAvLyBGaW5kIGNsb3Nlc3Qgc3VwcG9ydGVkIGZvcm1hdCBmb3IgfHdp
ZHRofCB4IHxoZWlnaHR8IEAgfGZyYW1lcmF0ZXwuCi0gICAgZmluYWwgTGlzdDxDYXB0dXJlRm9y
bWF0LkZyYW1lcmF0ZVJhbmdlPiBzdXBwb3J0ZWRGcmFtZXJhdGVzID0KLSAgICAgICAgQ2FtZXJh
MUVudW1lcmF0b3IuY29udmVydEZyYW1lcmF0ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2
aWV3RnBzUmFuZ2UoKSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF2YWlsYWJsZSBmcHMgcmFuZ2Vz
OiAiICsgc3VwcG9ydGVkRnJhbWVyYXRlcyk7Ci0KLSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0LkZy
YW1lcmF0ZVJhbmdlIGZwc1JhbmdlID0KLSAgICAgICAgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lk
LmdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZShzdXBwb3J0ZWRGcmFtZXJhdGVzLCBm
cmFtZXJhdGUpOwotCi0gICAgZmluYWwgU2l6ZSBwcmV2aWV3U2l6ZSA9IENhbWVyYUVudW1lcmF0
aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgICAgQ2FtZXJhMUVudW1l
cmF0b3IuY29udmVydFNpemVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld1NpemVzKCkp
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQucmVwb3J0Q2Ft
ZXJhUmVzb2x1dGlvbihjYW1lcmExUmVzb2x1dGlvbkhpc3RvZ3JhbSwgcHJldmlld1NpemUpOwot
Ci0gICAgcmV0dXJuIG5ldyBDYXB0dXJlRm9ybWF0KHByZXZpZXdTaXplLndpZHRoLCBwcmV2aWV3
U2l6ZS5oZWlnaHQsIGZwc1JhbmdlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFNpemUgZmlu
ZENsb3Nlc3RQaWN0dXJlU2l6ZSgKLSAgICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFt
ZXRlcnMgcGFyYW1ldGVycywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgcmV0dXJuIENh
bWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgICAg
Q2FtZXJhMUVudW1lcmF0b3IuY29udmVydFNpemVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUGlj
dHVyZVNpemVzKCkpLCB3aWR0aCwgaGVpZ2h0KTsKLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhMVNl
c3Npb24oRXZlbnRzIGV2ZW50cywgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlLCBDb250ZXh0IGFw
cGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0
dXJlSGVscGVyLCBpbnQgY2FtZXJhSWQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1l
cmF0ZSwKLSAgICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSwgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvLAotICAgICAgQ2FwdHVyZUZvcm1hdCBjYXB0dXJl
Rm9ybWF0LCBsb25nIGNvbnN0cnVjdGlvblRpbWVOcykgewotICAgIExvZ2dpbmcuZChUQUcsICJD
cmVhdGUgbmV3IGNhbWVyYTEgc2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNhbWVyYUlkKTsKLQotICAg
IHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7Ci0gICAgdGhpcy5ldmVu
dHMgPSBldmVudHM7Ci0gICAgdGhpcy5jYXB0dXJlVG9UZXh0dXJlID0gY2FwdHVyZVRvVGV4dHVy
ZTsKLSAgICB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAg
ICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAg
dGhpcy5jYW1lcmFJZCA9IGNhbWVyYUlkOwotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0
aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICB0aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKLSAg
ICB0aGlzLmNhbWVyYSA9IGNhbWVyYTsKLSAgICB0aGlzLmluZm8gPSBpbmZvOwotICAgIHRoaXMu
Y2FwdHVyZUZvcm1hdCA9IGNhcHR1cmVGb3JtYXQ7Ci0gICAgdGhpcy5jb25zdHJ1Y3Rpb25UaW1l
TnMgPSBjb25zdHJ1Y3Rpb25UaW1lTnM7Ci0KLSAgICBzdGFydENhcHR1cmluZygpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywg
IlN0b3AgY2FtZXJhMSBzZXNzaW9uIG9uIGNhbWVyYSAiICsgY2FtZXJhSWQpOwotICAgIGNoZWNr
SXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmIChzdGF0ZSAhPSBTZXNzaW9uU3RhdGUuU1RPUFBF
RCkgewotICAgICAgZmluYWwgbG9uZyBzdG9wU3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7
Ci0gICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwotICAgICAgc3RvcEludGVybmFs
KCk7Ci0gICAgICBmaW5hbCBpbnQgc3RvcFRpbWVNcyA9IChpbnQpIFRpbWVVbml0Lk5BTk9TRUNP
TkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RvcFN0YXJ0VGltZSk7Ci0gICAgICBj
YW1lcmExU3RvcFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RvcFRpbWVNcyk7Ci0gICAgfQot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0Q2FwdHVyaW5nKCkgewotICAgIExvZ2dpbmcuZChU
QUcsICJTdGFydCBjYXB0dXJpbmciKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQot
ICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlJVTk5JTkc7Ci0KLSAgICBjYW1lcmEuc2V0RXJyb3JD
YWxsYmFjayhuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuRXJyb3JDYWxsYmFjaygpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25FcnJvcihpbnQgZXJyb3IsIGFuZHJv
aWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdl
OwotICAgICAgICBpZiAoZXJyb3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ0FNRVJBX0VS
Uk9SX1NFUlZFUl9ESUVEKSB7Ci0gICAgICAgICAgZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBzZXJ2
ZXIgZGllZCEiOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJD
YW1lcmEgZXJyb3I6ICIgKyBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmUoVEFH
LCBlcnJvck1lc3NhZ2UpOwotICAgICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwot
ICAgICAgICBzdG9wSW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKGVycm9yID09IGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLkNBTUVSQV9FUlJPUl9FVklDVEVEKSB7Ci0gICAgICAgICAgZXZlbnRzLm9u
Q2FtZXJhRGlzY29ubmVjdGVkKENhbWVyYTFTZXNzaW9uLnRoaXMpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIGV2ZW50cy5vbkNhbWVyYUVycm9yKENhbWVyYTFTZXNzaW9uLnRoaXMsIGVy
cm9yTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLQotICAgIGlmIChjYXB0
dXJlVG9UZXh0dXJlKSB7Ci0gICAgICBsaXN0ZW5Gb3JUZXh0dXJlRnJhbWVzKCk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgIGxpc3RlbkZvckJ5dGVidWZmZXJGcmFtZXMoKTsKLSAgICB9Ci0gICAgdHJ5
IHsKLSAgICAgIGNhbWVyYS5zdGFydFByZXZpZXcoKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICBz
dG9wSW50ZXJuYWwoKTsKLSAgICAgIGV2ZW50cy5vbkNhbWVyYUVycm9yKHRoaXMsIGUuZ2V0TWVz
c2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RvcEludGVybmFsKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGludGVybmFsIik7Ci0gICAgY2hlY2tJc09uQ2FtZXJh
VGhyZWFkKCk7Ci0KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0K
LSAgICAvLyBOb3RlOiBzdG9wUHJldmlldyBvciBvdGhlciBkcml2ZXIgY29kZSBtaWdodCBkZWFk
bG9jay4gRGVhZGxvY2sgaW4KLSAgICAvLyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5fc3RvcFBy
ZXZpZXcoTmF0aXZlIE1ldGhvZCkgaGFzIGJlZW4gb2JzZXJ2ZWQgb24KLSAgICAvLyBOZXh1cyA1
IChoYW1tZXJoZWFkKSwgT1MgdmVyc2lvbiBMTVk0OEkuCi0gICAgY2FtZXJhLnN0b3BQcmV2aWV3
KCk7Ci0gICAgY2FtZXJhLnJlbGVhc2UoKTsKLSAgICBldmVudHMub25DYW1lcmFDbG9zZWQodGhp
cyk7Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBkb25lIik7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgbGlzdGVuRm9yVGV4dHVyZUZyYW1lcygpIHsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5zdGFydExpc3RlbmluZyhuZXcgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVB
dmFpbGFibGVMaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
b25UZXh0dXJlRnJhbWVBdmFpbGFibGUoCi0gICAgICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxv
YXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICAgICAgY2hlY2tJ
c09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICAgICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5S
VU5OSU5HKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlRleHR1cmUgZnJhbWUgY2FwdHVy
ZWQgYnV0IGNhbWVyYSBpcyBubyBsb25nZXIgcnVubmluZy4iKTsKLSAgICAgICAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIWZpcnN0RnJhbWVSZXBvcnRlZCkgewotICAgICAgICAg
IGZpbmFsIGludCBzdGFydFRpbWVNcyA9Ci0gICAgICAgICAgICAgIChpbnQpIFRpbWVVbml0Lk5B
Tk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gY29uc3RydWN0aW9uVGltZU5z
KTsKLSAgICAgICAgICBjYW1lcmExU3RhcnRUaW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0YXJ0
VGltZU1zKTsKLSAgICAgICAgICBmaXJzdEZyYW1lUmVwb3J0ZWQgPSB0cnVlOwotICAgICAgICB9
Ci0KLSAgICAgICAgaW50IHJvdGF0aW9uID0gZ2V0RnJhbWVPcmllbnRhdGlvbigpOwotICAgICAg
ICBpZiAoaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5D
QU1FUkFfRkFDSU5HX0ZST05UKSB7Ci0gICAgICAgICAgLy8gVW5kbyB0aGUgbWlycm9yIHRoYXQg
dGhlIE9TICJoZWxwcyIgdXMgd2l0aC4KLSAgICAgICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFu
ZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5odG1sI3NldERpc3Bs
YXlPcmllbnRhdGlvbihpbnQpCi0gICAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gUmVuZGVyZXJD
b21tb24ubXVsdGlwbHlNYXRyaWNlcygKLSAgICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4LCBS
ZW5kZXJlckNvbW1vbi5ob3Jpem9udGFsRmxpcE1hdHJpeCgpKTsKLSAgICAgICAgfQotICAgICAg
ICBldmVudHMub25UZXh0dXJlRnJhbWVDYXB0dXJlZChDYW1lcmExU2Vzc2lvbi50aGlzLCBjYXB0
dXJlRm9ybWF0LndpZHRoLAotICAgICAgICAgICAgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIG9lc1Rl
eHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wTnMpOwotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxpc3RlbkZvckJ5dGVidWZmZXJGcmFt
ZXMoKSB7Ci0gICAgY2FtZXJhLnNldFByZXZpZXdDYWxsYmFja1dpdGhCdWZmZXIobmV3IGFuZHJv
aWQuaGFyZHdhcmUuQ2FtZXJhLlByZXZpZXdDYWxsYmFjaygpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgb25QcmV2aWV3RnJhbWUoYnl0ZVtdIGRhdGEsIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhIGNhbGxiYWNrQ2FtZXJhKSB7Ci0gICAgICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotCi0gICAgICAgIGlmIChjYWxsYmFja0NhbWVyYSAhPSBjYW1lcmEpIHsKLSAgICAg
ICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FsbGJhY2sgZnJvbSBhIGRpZmZlcmVudCBjYW1lcmEuIFRo
aXMgc2hvdWxkIG5ldmVyIGhhcHBlbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoc3RhdGUgIT0gU2Vzc2lvblN0YXRlLlJVTk5JTkcpIHsKLSAgICAgICAg
ICBMb2dnaW5nLmQoVEFHLCAiQnl0ZWJ1ZmZlciBmcmFtZSBjYXB0dXJlZCBidXQgY2FtZXJhIGlz
IG5vIGxvbmdlciBydW5uaW5nLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGZpbmFsIGxvbmcgY2FwdHVyZVRpbWVOcyA9IFRpbWVVbml0Lk1JTExJU0VDT05EUy50
b05hbm9zKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsKLQotICAgICAgICBpZiAoIWZp
cnN0RnJhbWVSZXBvcnRlZCkgewotICAgICAgICAgIGZpbmFsIGludCBzdGFydFRpbWVNcyA9Ci0g
ICAgICAgICAgICAgIChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5u
YW5vVGltZSgpIC0gY29uc3RydWN0aW9uVGltZU5zKTsKLSAgICAgICAgICBjYW1lcmExU3RhcnRU
aW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0YXJ0VGltZU1zKTsKLSAgICAgICAgICBmaXJzdEZy
YW1lUmVwb3J0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZXZlbnRzLm9uQnl0ZUJ1
ZmZlckZyYW1lQ2FwdHVyZWQoQ2FtZXJhMVNlc3Npb24udGhpcywgZGF0YSwgY2FwdHVyZUZvcm1h
dC53aWR0aCwKLSAgICAgICAgICAgIGNhcHR1cmVGb3JtYXQuaGVpZ2h0LCBnZXRGcmFtZU9yaWVu
dGF0aW9uKCksIGNhcHR1cmVUaW1lTnMpOwotICAgICAgICBjYW1lcmEuYWRkQ2FsbGJhY2tCdWZm
ZXIoZGF0YSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXREZXZp
Y2VPcmllbnRhdGlvbigpIHsKLSAgICBpbnQgb3JpZW50YXRpb24gPSAwOwotCi0gICAgV2luZG93
TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKSBhcHBsaWNhdGlvbkNvbnRleHQuZ2V0U3lzdGVt
U2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAgICBzd2l0Y2ggKHdtLmdldERlZmF1
bHREaXNwbGF5KCkuZ2V0Um90YXRpb24oKSkgewotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9O
XzkwOgotICAgICAgICBvcmllbnRhdGlvbiA9IDkwOwotICAgICAgICBicmVhazsKLSAgICAgIGNh
c2UgU3VyZmFjZS5ST1RBVElPTl8xODA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMTgwOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8yNzA6Ci0gICAgICAgIG9y
aWVudGF0aW9uID0gMjcwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RB
VElPTl8wOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAwOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWVudGF0aW9uOwotICB9Ci0KLSAgcHJpdmF0
ZSBpbnQgZ2V0RnJhbWVPcmllbnRhdGlvbigpIHsKLSAgICBpbnQgcm90YXRpb24gPSBnZXREZXZp
Y2VPcmllbnRhdGlvbigpOwotICAgIGlmIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfQkFDSykgewotICAgICAgcm90YXRpb24g
PSAzNjAgLSByb3RhdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIChpbmZvLm9yaWVudGF0aW9uICsg
cm90YXRpb24pICUgMzYwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpIHsKLSAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBjYW1lcmFUaHJlYWRI
YW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJlYWQiKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmEyQ2FwdHVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmEyQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM3
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50
LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7
Ci0KLUBUYXJnZXRBcGkoMjEpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMkNhcHR1cmVyIGV4dGVuZHMg
Q2FtZXJhQ2FwdHVyZXIgewotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgcHJp
dmF0ZSBmaW5hbCBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXI7Ci0KLSAgcHVibGljIENhbWVy
YTJDYXB0dXJlcihDb250ZXh0IGNvbnRleHQsIFN0cmluZyBjYW1lcmFOYW1lLCBDYW1lcmFFdmVu
dHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICBzdXBlcihjYW1lcmFOYW1lLCBldmVudHNI
YW5kbGVyLCBuZXcgQ2FtZXJhMkVudW1lcmF0b3IoY29udGV4dCkpOwotCi0gICAgdGhpcy5jb250
ZXh0ID0gY29udGV4dDsKLSAgICBjYW1lcmFNYW5hZ2VyID0gKENhbWVyYU1hbmFnZXIpIGNvbnRl
eHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNBTUVSQV9TRVJWSUNFKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDYW1lcmFTZXNzaW9uKENhbWVyYVNlc3Np
b24uQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNyZWF0ZVNlc3Npb25DYWxsYmFjaywKLSAgICAgIENh
bWVyYVNlc3Npb24uRXZlbnRzIGV2ZW50cywgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0g
ICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3RyaW5nIGNh
bWVyYU5hbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIGludCBmcmFtZXJhdGUpIHsK
LSAgICBDYW1lcmEyU2Vzc2lvbi5jcmVhdGUoY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLCBldmVudHMs
IGFwcGxpY2F0aW9uQ29udGV4dCwgY2FtZXJhTWFuYWdlciwKLSAgICAgICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIsIGNhbWVyYU5hbWUsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3IuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJFbnVtZXJhdG9yLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3IuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDI0OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5D
YXB0dXJlRm9ybWF0OwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJl
Y3Q7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRy
b2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzOwotaW1wb3J0IGFuZHJv
aWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdh
cmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVy
YTIucGFyYW1zLlN0cmVhbUNvbmZpZ3VyYXRpb25NYXA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWls
ZDsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudXRpbC5B
bmRyb2lkRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5SYW5nZTsKLQotaW1wb3J0IGph
dmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2
YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotQFRhcmdldEFwaSgyMSkKLXB1
YmxpYyBjbGFzcyBDYW1lcmEyRW51bWVyYXRvciBpbXBsZW1lbnRzIENhbWVyYUVudW1lcmF0b3Ig
ewotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNhbWVyYTJFbnVtZXJhdG9y
IjsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgZG91YmxlIE5BTk9fU0VDT05EU19QRVJfU0VDT05E
ID0gMS4wZTk7Ci0KLSAgLy8gRWFjaCBlbnRyeSBjb250YWlucyB0aGUgc3VwcG9ydGVkIGZvcm1h
dHMgZm9yIGEgZ2l2ZW4gY2FtZXJhIGluZGV4LiBUaGUgZm9ybWF0cyBhcmUgZW51bWVyYXRlZAot
ICAvLyBsYXppbHkgaW4gZ2V0U3VwcG9ydGVkRm9ybWF0cygpLCBhbmQgY2FjaGVkIGZvciBmdXR1
cmUgcmVmZXJlbmNlLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PENh
cHR1cmVGb3JtYXQ+PiBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzID0KLSAgICAgIG5ldyBIYXNoTWFw
PFN0cmluZywgTGlzdDxDYXB0dXJlRm9ybWF0Pj4oKTsKLQotICBmaW5hbCBDb250ZXh0IGNvbnRl
eHQ7Ci0gIGZpbmFsIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsKLQotICBwdWJsaWMgQ2Ft
ZXJhMkVudW1lcmF0b3IoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgdGhpcy5jb250ZXh0ID0gY29u
dGV4dDsKLSAgICB0aGlzLmNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5n
ZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZXZpY2VOYW1lcygpIHsKLSAgICB0cnkgewotICAg
ICAgcmV0dXJuIGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhSWRMaXN0KCk7Ci0gICAgICAvLyBPbiBB
bmRyb2lkIE9TIHByZSA0LjQuMiwgYSBjbGFzcyB3aWxsIG5vdCBsb2FkIGJlY2F1c2Ugb2YgVmVy
aWZ5RXJyb3IgaWYgaXQgY29udGFpbnMgYQotICAgICAgLy8gY2F0Y2ggc3RhdGVtZW50IHdpdGgg
YW4gRXhjZXB0aW9uIGZyb20gYSBuZXdlciBBUEksIGV2ZW4gaWYgdGhlIGNvZGUgaXMgbmV2ZXIg
ZXhlY3V0ZWQuCi0gICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNz
dWVzL2RldGFpbD9pZD0yMDkxMjkKLSAgICB9IGNhdGNoICgvKiBDYW1lcmFBY2Nlc3NFeGNlcHRp
b24gKi8gQW5kcm9pZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJh
IGFjY2VzcyBleGNlcHRpb246ICIgKyBlKTsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10ge307
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzRnJvbnRGYWNp
bmcoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2hhcmFj
dGVyaXN0aWNzID0gZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGRldmljZU5hbWUpOwotCi0gICAg
cmV0dXJuIGNoYXJhY3RlcmlzdGljcyAhPSBudWxsCi0gICAgICAgICYmIGNoYXJhY3RlcmlzdGlj
cy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFDSU5HKQotICAgICAgICA9PSBDYW1l
cmFNZXRhZGF0YS5MRU5TX0ZBQ0lOR19GUk9OVDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgYm9vbGVhbiBpc0JhY2tGYWNpbmcoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzID0gZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNz
KGRldmljZU5hbWUpOwotCi0gICAgcmV0dXJuIGNoYXJhY3RlcmlzdGljcyAhPSBudWxsCi0gICAg
ICAgICYmIGNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFD
SU5HKQotICAgICAgICA9PSBDYW1lcmFNZXRhZGF0YS5MRU5TX0ZBQ0lOR19CQUNLOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBMaXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1cHBvcnRlZEZv
cm1hdHMoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICByZXR1cm4gZ2V0U3VwcG9ydGVkRm9ybWF0
cyhjb250ZXh0LCBkZXZpY2VOYW1lKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQ2Ft
ZXJhVmlkZW9DYXB0dXJlciBjcmVhdGVDYXB0dXJlcigKLSAgICAgIFN0cmluZyBkZXZpY2VOYW1l
LCBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikg
ewotICAgIHJldHVybiBuZXcgQ2FtZXJhMkNhcHR1cmVyKGNvbnRleHQsIGRldmljZU5hbWUsIGV2
ZW50c0hhbmRsZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgZ2V0
Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgdHJ5IHsKLSAg
ICAgIHJldHVybiBjYW1lcmFNYW5hZ2VyLmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhkZXZpY2VO
YW1lKTsKLSAgICAgIC8vIE9uIEFuZHJvaWQgT1MgcHJlIDQuNC4yLCBhIGNsYXNzIHdpbGwgbm90
IGxvYWQgYmVjYXVzZSBvZiBWZXJpZnlFcnJvciBpZiBpdCBjb250YWlucyBhCi0gICAgICAvLyBj
YXRjaCBzdGF0ZW1lbnQgd2l0aCBhbiBFeGNlcHRpb24gZnJvbSBhIG5ld2VyIEFQSSwgZXZlbiBp
ZiB0aGUgY29kZSBpcyBuZXZlciBleGVjdXRlZC4KLSAgICAgIC8vIGh0dHBzOi8vY29kZS5nb29n
bGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwOTEyOQotICAgIH0gY2F0Y2ggKC8q
IENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiAqLyBBbmRyb2lkRXhjZXB0aW9uIGUpIHsKLSAgICAgIExv
Z2dpbmcuZShUQUcsICJDYW1lcmEgYWNjZXNzIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBpZiBBUEkgaXMgc3Vw
cG9ydGVkIGFuZCBhbGwgY2FtZXJhcyBoYXZlIGJldHRlciB0aGFuIGxlZ2FjeSBzdXBwb3J0Lgot
ICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzU3VwcG9ydGVkKENvbnRleHQgY29udGV4
dCkgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVT
LkxPTExJUE9QKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ2FtZXJhTWFu
YWdlciBjYW1lcmFNYW5hZ2VyID0gKENhbWVyYU1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2Vy
dmljZShDb250ZXh0LkNBTUVSQV9TRVJWSUNFKTsKLSAgICB0cnkgewotICAgICAgU3RyaW5nW10g
Y2FtZXJhSWRzID0gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFJZExpc3QoKTsKLSAgICAgIGZvciAo
U3RyaW5nIGlkIDogY2FtZXJhSWRzKSB7Ci0gICAgICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcyBj
aGFyYWN0ZXJpc3RpY3MgPSBjYW1lcmFNYW5hZ2VyLmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhp
ZCk7Ci0gICAgICAgIGlmIChjaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGlj
cy5JTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTCkKLSAgICAgICAgICAgID09IENhbWVyYUNo
YXJhY3RlcmlzdGljcy5JTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9MRUdBQ1kpIHsKLSAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIE9uIEFu
ZHJvaWQgT1MgcHJlIDQuNC4yLCBhIGNsYXNzIHdpbGwgbm90IGxvYWQgYmVjYXVzZSBvZiBWZXJp
ZnlFcnJvciBpZiBpdCBjb250YWlucyBhCi0gICAgICAvLyBjYXRjaCBzdGF0ZW1lbnQgd2l0aCBh
biBFeGNlcHRpb24gZnJvbSBhIG5ld2VyIEFQSSwgZXZlbiBpZiB0aGUgY29kZSBpcyBuZXZlciBl
eGVjdXRlZC4KLSAgICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1
ZXMvZGV0YWlsP2lkPTIwOTEyOQotICAgIH0gY2F0Y2ggKC8qIENhbWVyYUFjY2Vzc0V4Y2VwdGlv
biAqLyBBbmRyb2lkRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEg
YWNjZXNzIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHN0YXRpYyBpbnQgZ2V0RnBzVW5pdEZhY3RvcihSYW5n
ZTxJbnRlZ2VyPltdIGZwc1JhbmdlcykgewotICAgIGlmIChmcHNSYW5nZXMubGVuZ3RoID09IDAp
IHsKLSAgICAgIHJldHVybiAxMDAwOwotICAgIH0KLSAgICByZXR1cm4gZnBzUmFuZ2VzWzBdLmdl
dFVwcGVyKCkgPCAxMDAwID8gMTAwMCA6IDE7Ci0gIH0KLQotICBzdGF0aWMgTGlzdDxTaXplPiBn
ZXRTdXBwb3J0ZWRTaXplcyhDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2FtZXJhQ2hhcmFjdGVyaXN0
aWNzKSB7Ci0gICAgZmluYWwgU3RyZWFtQ29uZmlndXJhdGlvbk1hcCBzdHJlYW1NYXAgPQotICAg
ICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5TQ0FM
RVJfU1RSRUFNX0NPTkZJR1VSQVRJT05fTUFQKTsKLSAgICBmaW5hbCBpbnQgc3VwcG9ydExldmVs
ID0KLSAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3MuSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUwpOwotCi0gICAgZmluYWwgYW5kcm9pZC51
dGlsLlNpemVbXSBuYXRpdmVTaXplcyA9IHN0cmVhbU1hcC5nZXRPdXRwdXRTaXplcyhTdXJmYWNl
VGV4dHVyZS5jbGFzcyk7Ci0gICAgZmluYWwgTGlzdDxTaXplPiBzaXplcyA9IGNvbnZlcnRTaXpl
cyhuYXRpdmVTaXplcyk7Ci0KLSAgICAvLyBWaWRlbyBtYXkgYmUgc3RyZXRjaGVkIHByZSBMTVIx
IG9uIGxlZ2FjeSBpbXBsZW1lbnRhdGlvbnMuCi0gICAgLy8gRmlsdGVyIG91dCBmb3JtYXRzIHRo
YXQgaGF2ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvIHRoYW4gdGhlIHNlbnNvciBhcnJheS4KLSAg
ICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBP
UF9NUjEKLSAgICAgICAgJiYgc3VwcG9ydExldmVsID09IENhbWVyYUNoYXJhY3RlcmlzdGljcy5J
TkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9MRUdBQ1kpIHsKLSAgICAgIGZpbmFsIFJlY3Qg
YWN0aXZlQXJyYXlTaXplID0KLSAgICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENh
bWVyYUNoYXJhY3RlcmlzdGljcy5TRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSk7Ci0gICAg
ICBmaW5hbCBBcnJheUxpc3Q8U2l6ZT4gZmlsdGVyZWRTaXplcyA9IG5ldyBBcnJheUxpc3Q8U2l6
ZT4oKTsKLQotICAgICAgZm9yIChTaXplIHNpemUgOiBzaXplcykgewotICAgICAgICBpZiAoYWN0
aXZlQXJyYXlTaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCA9PSBhY3RpdmVBcnJheVNpemUuaGVp
Z2h0KCkgKiBzaXplLndpZHRoKSB7Ci0gICAgICAgICAgZmlsdGVyZWRTaXplcy5hZGQoc2l6ZSk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGZpbHRlcmVkU2l6ZXM7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHJldHVybiBzaXplczsKLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgTGlz
dDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKENvbnRleHQgY29udGV4dCwgU3Ry
aW5nIGNhbWVyYUlkKSB7Ci0gICAgcmV0dXJuIGdldFN1cHBvcnRlZEZvcm1hdHMoCi0gICAgICAg
IChDYW1lcmFNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFf
U0VSVklDRSksIGNhbWVyYUlkKTsKLSAgfQotCi0gIHN0YXRpYyBMaXN0PENhcHR1cmVGb3JtYXQ+
IGdldFN1cHBvcnRlZEZvcm1hdHMoQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyLCBTdHJpbmcg
Y2FtZXJhSWQpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMpIHsK
LSAgICAgIGlmIChjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzLmNvbnRhaW5zS2V5KGNhbWVyYUlkKSkg
ewotICAgICAgICByZXR1cm4gY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5nZXQoY2FtZXJhSWQpOwot
ICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiR2V0IHN1cHBvcnRlZCBmb3JtYXRzIGZv
ciBjYW1lcmEgaW5kZXggIiArIGNhbWVyYUlkICsgIi4iKTsKLSAgICAgIGZpbmFsIGxvbmcgc3Rh
cnRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLQotICAgICAgZmluYWwg
Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNhbWVyYUNoYXJhY3RlcmlzdGljczsKLSAgICAgIHRyeSB7
Ci0gICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJh
Q2hhcmFjdGVyaXN0aWNzKGNhbWVyYUlkKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkg
ewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKCk6ICIg
KyBleCk7Ci0gICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQ+KCk7Ci0g
ICAgICB9Ci0KLSAgICAgIGZpbmFsIFN0cmVhbUNvbmZpZ3VyYXRpb25NYXAgc3RyZWFtTWFwID0K
LSAgICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGlj
cy5TQ0FMRVJfU1RSRUFNX0NPTkZJR1VSQVRJT05fTUFQKTsKLQotICAgICAgUmFuZ2U8SW50ZWdl
cj5bXSBmcHNSYW5nZXMgPQotICAgICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2Ft
ZXJhQ2hhcmFjdGVyaXN0aWNzLkNPTlRST0xfQUVfQVZBSUxBQkxFX1RBUkdFVF9GUFNfUkFOR0VT
KTsKLSAgICAgIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gZnJhbWVyYXRlUmFu
Z2VzID0KLSAgICAgICAgICBjb252ZXJ0RnJhbWVyYXRlcyhmcHNSYW5nZXMsIGdldEZwc1VuaXRG
YWN0b3IoZnBzUmFuZ2VzKSk7Ci0gICAgICBMaXN0PFNpemU+IHNpemVzID0gZ2V0U3VwcG9ydGVk
U2l6ZXMoY2FtZXJhQ2hhcmFjdGVyaXN0aWNzKTsKLQotICAgICAgaW50IGRlZmF1bHRNYXhGcHMg
PSAwOwotICAgICAgZm9yIChDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIGZyYW1lcmF0ZVJh
bmdlIDogZnJhbWVyYXRlUmFuZ2VzKSB7Ci0gICAgICAgIGRlZmF1bHRNYXhGcHMgPSBNYXRoLm1h
eChkZWZhdWx0TWF4RnBzLCBmcmFtZXJhdGVSYW5nZS5tYXgpOwotICAgICAgfQotCi0gICAgICBm
aW5hbCBMaXN0PENhcHR1cmVGb3JtYXQ+IGZvcm1hdExpc3QgPSBuZXcgQXJyYXlMaXN0PENhcHR1
cmVGb3JtYXQ+KCk7Ci0gICAgICBmb3IgKFNpemUgc2l6ZSA6IHNpemVzKSB7Ci0gICAgICAgIGxv
bmcgbWluRnJhbWVEdXJhdGlvbk5zID0gMDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBtaW5G
cmFtZUR1cmF0aW9uTnMgPSBzdHJlYW1NYXAuZ2V0T3V0cHV0TWluRnJhbWVEdXJhdGlvbigKLSAg
ICAgICAgICAgICAgU3VyZmFjZVRleHR1cmUuY2xhc3MsIG5ldyBhbmRyb2lkLnV0aWwuU2l6ZShz
aXplLndpZHRoLCBzaXplLmhlaWdodCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkg
ewotICAgICAgICAgIC8vIGdldE91dHB1dE1pbkZyYW1lRHVyYXRpb24oKSBpcyBub3Qgc3VwcG9y
dGVkIG9uIGFsbCBkZXZpY2VzLiBJZ25vcmUgc2lsZW50bHkuCi0gICAgICAgIH0KLSAgICAgICAg
ZmluYWwgaW50IG1heEZwcyA9IChtaW5GcmFtZUR1cmF0aW9uTnMgPT0gMCkKLSAgICAgICAgICAg
ID8gZGVmYXVsdE1heEZwcwotICAgICAgICAgICAgOiAoaW50KSBNYXRoLnJvdW5kKE5BTk9fU0VD
T05EU19QRVJfU0VDT05EIC8gbWluRnJhbWVEdXJhdGlvbk5zKSAqIDEwMDA7Ci0gICAgICAgIGZv
cm1hdExpc3QuYWRkKG5ldyBDYXB0dXJlRm9ybWF0KHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCAw
LCBtYXhGcHMpKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkZvcm1hdDogIiArIHNpemUud2lk
dGggKyAieCIgKyBzaXplLmhlaWdodCArICJAIiArIG1heEZwcyk7Ci0gICAgICB9Ci0KLSAgICAg
IGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMucHV0KGNhbWVyYUlkLCBmb3JtYXRMaXN0KTsKLSAgICAg
IGZpbmFsIGxvbmcgZW5kVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0g
ICAgICBMb2dnaW5nLmQoVEFHLCAiR2V0IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjYW1lcmEgaW5k
ZXggIiArIGNhbWVyYUlkICsgIiBkb25lLiIKLSAgICAgICAgICAgICAgKyAiIFRpbWUgc3BlbnQ6
ICIgKyAoZW5kVGltZU1zIC0gc3RhcnRUaW1lTXMpICsgIiBtcy4iKTsKLSAgICAgIHJldHVybiBm
b3JtYXRMaXN0OwotICAgIH0KLSAgfQotCi0gIC8vIENvbnZlcnQgZnJvbSBhbmRyb2lkLnV0aWwu
U2l6ZSB0byBTaXplLgotICBwcml2YXRlIHN0YXRpYyBMaXN0PFNpemU+IGNvbnZlcnRTaXplcyhh
bmRyb2lkLnV0aWwuU2l6ZVtdIGNhbWVyYVNpemVzKSB7Ci0gICAgZmluYWwgTGlzdDxTaXplPiBz
aXplcyA9IG5ldyBBcnJheUxpc3Q8U2l6ZT4oKTsKLSAgICBmb3IgKGFuZHJvaWQudXRpbC5TaXpl
IHNpemUgOiBjYW1lcmFTaXplcykgewotICAgICAgc2l6ZXMuYWRkKG5ldyBTaXplKHNpemUuZ2V0
V2lkdGgoKSwgc2l6ZS5nZXRIZWlnaHQoKSkpOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZXM7Ci0g
IH0KLQotICAvLyBDb252ZXJ0IGZyb20gYW5kcm9pZC51dGlsLlJhbmdlPEludGVnZXI+IHRvIENh
cHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UuCi0gIHN0YXRpYyBMaXN0PENhcHR1cmVGb3JtYXQu
RnJhbWVyYXRlUmFuZ2U+IGNvbnZlcnRGcmFtZXJhdGVzKAotICAgICAgUmFuZ2U8SW50ZWdlcj5b
XSBhcnJheVJhbmdlcywgaW50IHVuaXRGYWN0b3IpIHsKLSAgICBmaW5hbCBMaXN0PENhcHR1cmVG
b3JtYXQuRnJhbWVyYXRlUmFuZ2U+IHJhbmdlcyA9IG5ldyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1h
dC5GcmFtZXJhdGVSYW5nZT4oKTsKLSAgICBmb3IgKFJhbmdlPEludGVnZXI+IHJhbmdlIDogYXJy
YXlSYW5nZXMpIHsKLSAgICAgIHJhbmdlcy5hZGQobmV3IENhcHR1cmVGb3JtYXQuRnJhbWVyYXRl
UmFuZ2UoCi0gICAgICAgICAgcmFuZ2UuZ2V0TG93ZXIoKSAqIHVuaXRGYWN0b3IsIHJhbmdlLmdl
dFVwcGVyKCkgKiB1bml0RmFjdG9yKSk7Ci0gICAgfQotICAgIHJldHVybiByYW5nZXM7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMlNlc3Npb24uamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJTZXNzaW9uLmphdmEJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMlNlc3Npb24uamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDQ1MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1
cmU7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlv
bjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQ2FwdHVyZVNlc3Npb247
Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUNoYXJhY3RlcmlzdGljczsK
LWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlOwotaW1wb3J0IGFu
ZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuaGFy
ZHdhcmUuY2FtZXJhMi5DYW1lcmFNZXRhZGF0YTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNh
bWVyYTIuQ2FwdHVyZUZhaWx1cmU7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNh
cHR1cmVSZXF1ZXN0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lk
LnV0aWwuUmFuZ2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9p
ZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBq
YXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWlt
cG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0Owot
aW1wb3J0IG9yZy53ZWJydGMuTWV0cmljcy5IaXN0b2dyYW07Ci0KLUBUYXJnZXRBcGkoMjEpCi1w
dWJsaWMgY2xhc3MgQ2FtZXJhMlNlc3Npb24gaW1wbGVtZW50cyBDYW1lcmFTZXNzaW9uIHsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmEyU2Vzc2lvbiI7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTJTdGFydFRpbWVNc0hpc3RvZ3Jh
bSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmEy
LlN0YXJ0VGltZU1zIiwgMSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlz
dG9ncmFtIGNhbWVyYTJTdG9wVGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVh
dGVDb3VudHMoIldlYlJUQy5BbmRyb2lkLkNhbWVyYTIuU3RvcFRpbWVNcyIsIDEsIDEwMDAwLCA1
MCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmEyUmVzb2x1dGlvbkhp
c3RvZ3JhbSA9IEhpc3RvZ3JhbS5jcmVhdGVFbnVtZXJhdGlvbigKLSAgICAgICJXZWJSVEMuQW5k
cm9pZC5DYW1lcmEyLlJlc29sdXRpb24iLCBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ09NTU9O
X1JFU09MVVRJT05TLnNpemUoKSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZW51bSBTZXNzaW9uU3Rh
dGUgeyBSVU5OSU5HLCBTVE9QUEVEIH0KLQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgY2FtZXJh
VGhyZWFkSGFuZGxlcjsKLSAgcHJpdmF0ZSBmaW5hbCBDcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY2Fs
bGJhY2s7Ci0gIHByaXZhdGUgZmluYWwgRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBmaW5hbCBD
b250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFNYW5hZ2Vy
IGNhbWVyYU1hbmFnZXI7Ci0gIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3Vy
ZmFjZVRleHR1cmVIZWxwZXI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGNhbWVyYUlkOwotICBw
cml2YXRlIGZpbmFsIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgaGVpZ2h0OwotICBw
cml2YXRlIGZpbmFsIGludCBmcmFtZXJhdGU7Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgYXQgc3RhcnQK
LSAgcHJpdmF0ZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzOwot
ICBwcml2YXRlIGludCBjYW1lcmFPcmllbnRhdGlvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2Ft
ZXJhRnJvbnRGYWNpbmc7Ci0gIHByaXZhdGUgaW50IGZwc1VuaXRGYWN0b3I7Ci0gIHByaXZhdGUg
Q2FwdHVyZUZvcm1hdCBjYXB0dXJlRm9ybWF0OwotCi0gIC8vIEluaXRpYWxpemVkIHdoZW4gY2Ft
ZXJhIG9wZW5zCi0gIHByaXZhdGUgQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZTsKLSAgcHJpdmF0
ZSBTdXJmYWNlIHN1cmZhY2U7Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgd2hlbiBjYXB0dXJlIHNlc3Np
b24gaXMgY3JlYXRlZAotICBwcml2YXRlIENhbWVyYUNhcHR1cmVTZXNzaW9uIGNhcHR1cmVTZXNz
aW9uOwotCi0gIC8vIFN0YXRlCi0gIHByaXZhdGUgU2Vzc2lvblN0YXRlIHN0YXRlID0gU2Vzc2lv
blN0YXRlLlJVTk5JTkc7Ci0gIHByaXZhdGUgYm9vbGVhbiBmaXJzdEZyYW1lUmVwb3J0ZWQgPSBm
YWxzZTsKLQotICAvLyBVc2VkIG9ubHkgZm9yIHN0YXRzLiBPbmx5IHVzZWQgb24gdGhlIGNhbWVy
YSB0aHJlYWQuCi0gIHByaXZhdGUgZmluYWwgbG9uZyBjb25zdHJ1Y3Rpb25UaW1lTnM7IC8vIENv
bnN0cnVjdGlvbiB0aW1lIG9mIHRoaXMgY2xhc3MuCi0KLSAgcHJpdmF0ZSBjbGFzcyBDYW1lcmFT
dGF0ZUNhbGxiYWNrIGV4dGVuZHMgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2sgewotICAgIHBy
aXZhdGUgU3RyaW5nIGdldEVycm9yRGVzY3JpcHRpb24oaW50IGVycm9yQ29kZSkgewotICAgICAg
c3dpdGNoIChlcnJvckNvZGUpIHsKLSAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxs
YmFjay5FUlJPUl9DQU1FUkFfREVWSUNFOgotICAgICAgICAgIHJldHVybiAiQ2FtZXJhIGRldmlj
ZSBoYXMgZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvci4iOwotICAgICAgICBjYXNlIENhbWVyYURl
dmljZS5TdGF0ZUNhbGxiYWNrLkVSUk9SX0NBTUVSQV9ESVNBQkxFRDoKLSAgICAgICAgICByZXR1
cm4gIkNhbWVyYSBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCBkdWUgdG8gYSBkZXZpY2UgcG9s
aWN5LiI7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2suRVJST1JfQ0FN
RVJBX0lOX1VTRToKLSAgICAgICAgICByZXR1cm4gIkNhbWVyYSBkZXZpY2UgaXMgaW4gdXNlIGFs
cmVhZHkuIjsKLSAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJPUl9D
QU1FUkFfU0VSVklDRToKLSAgICAgICAgICByZXR1cm4gIkNhbWVyYSBzZXJ2aWNlIGhhcyBlbmNv
dW50ZXJlZCBhIGZhdGFsIGVycm9yLiI7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRl
Q2FsbGJhY2suRVJST1JfTUFYX0NBTUVSQVNfSU5fVVNFOgotICAgICAgICAgIHJldHVybiAiQ2Ft
ZXJhIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIGJlY2F1c2UiCi0gICAgICAgICAgICAgICsg
IiB0aGVyZSBhcmUgdG9vIG1hbnkgb3RoZXIgb3BlbiBjYW1lcmEgZGV2aWNlcy4iOwotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgIHJldHVybiAiVW5rbm93biBjYW1lcmEgZXJyb3I6ICIgKyBl
cnJvckNvZGU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgb25EaXNjb25uZWN0ZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYSkgewotICAgICAgY2hlY2tJc09u
Q2FtZXJhVGhyZWFkKCk7Ci0gICAgICBmaW5hbCBib29sZWFuIHN0YXJ0RmFpbHVyZSA9IChjYXB0
dXJlU2Vzc2lvbiA9PSBudWxsKTsKLSAgICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7
Ci0gICAgICBzdG9wSW50ZXJuYWwoKTsKLSAgICAgIGlmIChzdGFydEZhaWx1cmUpIHsKLSAgICAg
ICAgY2FsbGJhY2sub25GYWlsdXJlKCJDYW1lcmEgZGlzY29ubmVjdGVkIC8gZXZpY3RlZC4iKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGV2ZW50cy5vbkNhbWVyYURpc2Nvbm5lY3RlZChDYW1l
cmEyU2Vzc2lvbi50aGlzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbkVycm9yKENhbWVyYURldmljZSBjYW1lcmEsIGludCBlcnJvckNvZGUpIHsK
LSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgcmVwb3J0RXJyb3IoZ2V0RXJy
b3JEZXNjcmlwdGlvbihlcnJvckNvZGUpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbk9wZW5lZChDYW1lcmFEZXZpY2UgY2FtZXJhKSB7Ci0gICAgICBjaGVja0lz
T25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBvcGVuZWQu
Iik7Ci0gICAgICBjYW1lcmFEZXZpY2UgPSBjYW1lcmE7Ci0KLSAgICAgIGZpbmFsIFN1cmZhY2VU
ZXh0dXJlIHN1cmZhY2VUZXh0dXJlID0gc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRl
eHR1cmUoKTsKLSAgICAgIHN1cmZhY2VUZXh0dXJlLnNldERlZmF1bHRCdWZmZXJTaXplKGNhcHR1
cmVGb3JtYXQud2lkdGgsIGNhcHR1cmVGb3JtYXQuaGVpZ2h0KTsKLSAgICAgIHN1cmZhY2UgPSBu
ZXcgU3VyZmFjZShzdXJmYWNlVGV4dHVyZSk7Ci0gICAgICB0cnkgewotICAgICAgICBjYW1lcmEu
Y3JlYXRlQ2FwdHVyZVNlc3Npb24oCi0gICAgICAgICAgICBBcnJheXMuYXNMaXN0KHN1cmZhY2Up
LCBuZXcgQ2FwdHVyZVNlc3Npb25DYWxsYmFjaygpLCBjYW1lcmFUaHJlYWRIYW5kbGVyKTsKLSAg
ICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVy
cm9yKCJGYWlsZWQgdG8gY3JlYXRlIGNhcHR1cmUgc2Vzc2lvbi4gIiArIGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25DbG9zZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYSkgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEgZGV2aWNlIGNsb3NlZC4iKTsK
LSAgICAgIGV2ZW50cy5vbkNhbWVyYUNsb3NlZChDYW1lcmEyU2Vzc2lvbi50aGlzKTsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIENhcHR1cmVTZXNzaW9uQ2FsbGJhY2sgZXh0ZW5kcyBD
YW1lcmFDYXB0dXJlU2Vzc2lvbi5TdGF0ZUNhbGxiYWNrIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbkNvbmZpZ3VyZUZhaWxlZChDYW1lcmFDYXB0dXJlU2Vzc2lvbiBzZXNzaW9u
KSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHNlc3Npb24uY2xvc2Uo
KTsKLSAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gY29uZmlndXJlIGNhcHR1cmUgc2Vzc2lv
bi4iKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNvbmZpZ3Vy
ZWQoQ2FtZXJhQ2FwdHVyZVNlc3Npb24gc2Vzc2lvbikgewotICAgICAgY2hlY2tJc09uQ2FtZXJh
VGhyZWFkKCk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIGNhcHR1cmUgc2Vzc2lvbiBj
b25maWd1cmVkLiIpOwotICAgICAgY2FwdHVyZVNlc3Npb24gPSBzZXNzaW9uOwotICAgICAgdHJ5
IHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhlIHZpYWJsZSBvcHRpb25zIGZvciB2aWRlbyBj
YXB0dXJlIHJlcXVlc3RzIGFyZToKLSAgICAgICAgICogVEVNUExBVEVfUFJFVklFVzogSGlnaCBm
cmFtZSByYXRlIGlzIGdpdmVuIHByaW9yaXR5IG92ZXIgdGhlIGhpZ2hlc3QtcXVhbGl0eQotICAg
ICAgICAgKiAgIHBvc3QtcHJvY2Vzc2luZy4KLSAgICAgICAgICogVEVNUExBVEVfUkVDT1JEOiBT
dGFibGUgZnJhbWUgcmF0ZSBpcyB1c2VkLCBhbmQgcG9zdC1wcm9jZXNzaW5nIGlzIHNldCBmb3Ig
cmVjb3JkaW5nCi0gICAgICAgICAqICAgcXVhbGl0eS4KLSAgICAgICAgICovCi0gICAgICAgIGZp
bmFsIENhcHR1cmVSZXF1ZXN0LkJ1aWxkZXIgY2FwdHVyZVJlcXVlc3RCdWlsZGVyID0KLSAgICAg
ICAgICAgIGNhbWVyYURldmljZS5jcmVhdGVDYXB0dXJlUmVxdWVzdChDYW1lcmFEZXZpY2UuVEVN
UExBVEVfUkVDT1JEKTsKLSAgICAgICAgLy8gU2V0IGF1dG8gZXhwb3N1cmUgZnBzIHJhbmdlLgot
ICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRST0xf
QUVfVEFSR0VUX0ZQU19SQU5HRSwKLSAgICAgICAgICAgIG5ldyBSYW5nZTxJbnRlZ2VyPihjYXB0
dXJlRm9ybWF0LmZyYW1lcmF0ZS5taW4gLyBmcHNVbml0RmFjdG9yLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXggLyBmcHNV
bml0RmFjdG9yKSk7Ci0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoCi0gICAgICAg
ICAgICBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FFX01PREUsIENhcHR1cmVSZXF1ZXN0LkNPTlRS
T0xfQUVfTU9ERV9PTik7Ci0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVy
ZVJlcXVlc3QuQ09OVFJPTF9BRV9MT0NLLCBmYWxzZSk7Ci0gICAgICAgIGNob29zZVN0YWJpbGl6
YXRpb25Nb2RlKGNhcHR1cmVSZXF1ZXN0QnVpbGRlcik7Ci0gICAgICAgIGNob29zZUZvY3VzTW9k
ZShjYXB0dXJlUmVxdWVzdEJ1aWxkZXIpOwotCi0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRl
ci5hZGRUYXJnZXQoc3VyZmFjZSk7Ci0gICAgICAgIHNlc3Npb24uc2V0UmVwZWF0aW5nUmVxdWVz
dCgKLSAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5idWlsZCgpLCBuZXcgQ2FtZXJh
Q2FwdHVyZUNhbGxiYWNrKCksIGNhbWVyYVRocmVhZEhhbmRsZXIpOwotICAgICAgfSBjYXRjaCAo
Q2FtZXJhQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0
byBzdGFydCBjYXB0dXJlIHJlcXVlc3QuICIgKyBlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotCi0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZygKLSAgICAgICAg
ICBuZXcgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5l
cigpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25U
ZXh0dXJlRnJhbWVBdmFpbGFibGUoCi0gICAgICAgICAgICAgICAgaW50IG9lc1RleHR1cmVJZCwg
ZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICAgICAgICAg
ICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKHN0YXRlICE9
IFNlc3Npb25TdGF0ZS5SVU5OSU5HKSB7Ci0gICAgICAgICAgICAgICAgTG9nZ2luZy5kKFRBRywg
IlRleHR1cmUgZnJhbWUgY2FwdHVyZWQgYnV0IGNhbWVyYSBpcyBubyBsb25nZXIgcnVubmluZy4i
KTsKLSAgICAgICAgICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJh
bWUoKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICBpZiAoIWZpcnN0RnJhbWVSZXBvcnRlZCkgewotICAgICAgICAgICAgICAgIGZpcnN0
RnJhbWVSZXBvcnRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHN0YXJ0VGlt
ZU1zID0KLSAgICAgICAgICAgICAgICAgICAgKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9N
aWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBjb25zdHJ1Y3Rpb25UaW1lTnMpOwotICAgICAgICAg
ICAgICAgIGNhbWVyYTJTdGFydFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMp
OwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgaW50IHJvdGF0aW9uID0gZ2V0RnJh
bWVPcmllbnRhdGlvbigpOwotICAgICAgICAgICAgICBpZiAoaXNDYW1lcmFGcm9udEZhY2luZykg
ewotICAgICAgICAgICAgICAgIC8vIFVuZG8gdGhlIG1pcnJvciB0aGF0IHRoZSBPUyAiaGVscHMi
IHVzIHdpdGguCi0gICAgICAgICAgICAgICAgLy8gaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNv
bS9yZWZlcmVuY2UvYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEuaHRtbCNzZXREaXNwbGF5T3JpZW50
YXRpb24oaW50KQotICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeCA9IFJlbmRlcmVyQ29t
bW9uLm11bHRpcGx5TWF0cmljZXMoCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJp
eCwgUmVuZGVyZXJDb21tb24uaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSk7Ci0gICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAvLyBVbmRvIGNhbWVyYSBvcmllbnRhdGlvbiAtIHdlIHJlcG9y
dCBpdCBhcyByb3RhdGlvbiBpbnN0ZWFkLgotICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXgg
PQotICAgICAgICAgICAgICAgICAgUmVuZGVyZXJDb21tb24ucm90YXRlVGV4dHVyZU1hdHJpeCh0
cmFuc2Zvcm1NYXRyaXgsIC1jYW1lcmFPcmllbnRhdGlvbik7Ci0KLSAgICAgICAgICAgICAgZXZl
bnRzLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoQ2FtZXJhMlNlc3Npb24udGhpcywgY2FwdHVyZUZv
cm1hdC53aWR0aCwKLSAgICAgICAgICAgICAgICAgIGNhcHR1cmVGb3JtYXQuaGVpZ2h0LCBvZXNU
ZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgcm90YXRpb24sIHRpbWVzdGFtcE5zKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9KTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEgZGV2
aWNlIHN1Y2Nlc3NmdWxseSBzdGFydGVkLiIpOwotICAgICAgY2FsbGJhY2sub25Eb25lKENhbWVy
YTJTZXNzaW9uLnRoaXMpOwotICAgIH0KLQotICAgIC8vIFByZWZlcnMgb3B0aWNhbCBzdGFiaWxp
emF0aW9uIG92ZXIgc29mdHdhcmUgc3RhYmlsaXphdGlvbiBpZiBhdmFpbGFibGUuIE9ubHkgZW5h
YmxlcyBvbmUgb2YKLSAgICAvLyB0aGUgc3RhYmlsaXphdGlvbiBtb2RlcyBhdCBhIHRpbWUgYmVj
YXVzZSBoYXZpbmcgYm90aCBlbmFibGVkIGNhbiBjYXVzZSBzdHJhbmdlIHJlc3VsdHMuCi0gICAg
cHJpdmF0ZSB2b2lkIGNob29zZVN0YWJpbGl6YXRpb25Nb2RlKENhcHR1cmVSZXF1ZXN0LkJ1aWxk
ZXIgY2FwdHVyZVJlcXVlc3RCdWlsZGVyKSB7Ci0gICAgICBmaW5hbCBpbnRbXSBhdmFpbGFibGVP
cHRpY2FsU3RhYmlsaXphdGlvbiA9IGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoCi0gICAgICAg
ICAgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfSU5GT19BVkFJTEFCTEVfT1BUSUNBTF9TVEFC
SUxJWkFUSU9OKTsKLSAgICAgIGlmIChhdmFpbGFibGVPcHRpY2FsU3RhYmlsaXphdGlvbiAhPSBu
dWxsKSB7Ci0gICAgICAgIGZvciAoaW50IG1vZGUgOiBhdmFpbGFibGVPcHRpY2FsU3RhYmlsaXph
dGlvbikgewotICAgICAgICAgIGlmIChtb2RlID09IENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BUSUNB
TF9TVEFCSUxJWkFUSU9OX01PREVfT04pIHsKLSAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVp
bGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERSwK
LSAgICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElP
Tl9NT0RFX09OKTsKLSAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVy
ZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREUsCi0gICAgICAgICAgICAg
ICAgQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREVfT0ZGKTsK
LSAgICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJVc2luZyBvcHRpY2FsIHN0YWJpbGl6YXRpb24u
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICAvLyBJZiBubyBvcHRpY2FsIG1vZGUgaXMgYXZhaWxhYmxlLCB0cnkgc29mdHdhcmUu
Ci0gICAgICBmaW5hbCBpbnRbXSBhdmFpbGFibGVWaWRlb1N0YWJpbGl6YXRpb24gPSBjYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuZ2V0KAotICAgICAgICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05U
Uk9MX0FWQUlMQUJMRV9WSURFT19TVEFCSUxJWkFUSU9OX01PREVTKTsKLSAgICAgIGZvciAoaW50
IG1vZGUgOiBhdmFpbGFibGVWaWRlb1N0YWJpbGl6YXRpb24pIHsKLSAgICAgICAgaWYgKG1vZGUg
PT0gQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREVfT04pIHsK
LSAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRS
T0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RFLAotICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVz
dC5DT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERV9PTik7Ci0gICAgICAgICAgY2FwdHVy
ZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RBQklMSVpB
VElPTl9NT0RFLAotICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RB
QklMSVpBVElPTl9NT0RFX09GRik7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlVzaW5nIHZp
ZGVvIHN0YWJpbGl6YXRpb24uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiU3RhYmlsaXphdGlvbiBub3QgYXZhaWxhYmxlLiIp
OwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaG9vc2VGb2N1c01vZGUoQ2FwdHVyZVJlcXVl
c3QuQnVpbGRlciBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIpIHsKLSAgICAgIGZpbmFsIGludFtdIGF2
YWlsYWJsZUZvY3VzTW9kZXMgPQotICAgICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQo
Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkNPTlRST0xfQUZfQVZBSUxBQkxFX01PREVTKTsKLSAgICAg
IGZvciAoaW50IG1vZGUgOiBhdmFpbGFibGVGb2N1c01vZGVzKSB7Ci0gICAgICAgIGlmIChtb2Rl
ID09IENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1ZJREVPKSB7Ci0g
ICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldCgKLSAgICAgICAgICAgICAgQ2FwdHVy
ZVJlcXVlc3QuQ09OVFJPTF9BRl9NT0RFLCBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FGX01PREVf
Q09OVElOVU9VU19WSURFTyk7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlVzaW5nIGNvbnRp
bnVvdXMgdmlkZW8gYXV0by1mb2N1cy4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJBdXRvLWZvY3VzIGlzIG5vdCBhdmFpbGFi
bGUuIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDYW1lcmFDYXB0dXJlQ2FsbGJh
Y2sgZXh0ZW5kcyBDYW1lcmFDYXB0dXJlU2Vzc2lvbi5DYXB0dXJlQ2FsbGJhY2sgewotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZUZhaWxlZCgKLSAgICAgICAgQ2FtZXJh
Q2FwdHVyZVNlc3Npb24gc2Vzc2lvbiwgQ2FwdHVyZVJlcXVlc3QgcmVxdWVzdCwgQ2FwdHVyZUZh
aWx1cmUgZmFpbHVyZSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhcHR1cmUgZmFpbGVkOiAi
ICsgZmFpbHVyZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZShD
cmVhdGVTZXNzaW9uQ2FsbGJhY2sgY2FsbGJhY2ssIEV2ZW50cyBldmVudHMsCi0gICAgICBDb250
ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyLAotICAg
ICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFN0cmluZyBjYW1l
cmFJZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgaW50IGZyYW1lcmF0ZSkgewotICAg
IG5ldyBDYW1lcmEyU2Vzc2lvbihjYWxsYmFjaywgZXZlbnRzLCBhcHBsaWNhdGlvbkNvbnRleHQs
IGNhbWVyYU1hbmFnZXIsIHN1cmZhY2VUZXh0dXJlSGVscGVyLAotICAgICAgICBjYW1lcmFJZCwg
d2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhMlNlc3Np
b24oQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNhbGxiYWNrLCBFdmVudHMgZXZlbnRzLCBDb250ZXh0
IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlciwg
U3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFN0cmluZyBjYW1lcmFJ
ZCwKLSAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAgIExv
Z2dpbmcuZChUQUcsICJDcmVhdGUgbmV3IGNhbWVyYTIgc2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNh
bWVyYUlkKTsKLQotICAgIGNvbnN0cnVjdGlvblRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwot
Ci0gICAgdGhpcy5jYW1lcmFUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKLSAgICB0aGlz
LmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0gICAgdGhp
cy5hcHBsaWNhdGlvbkNvbnRleHQgPSBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gICAgdGhpcy5jYW1l
cmFNYW5hZ2VyID0gY2FtZXJhTWFuYWdlcjsKLSAgICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVscGVy
ID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgdGhpcy5jYW1lcmFJZCA9IGNhbWVyYUlkOwot
ICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICB0
aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKLQotICAgIHN0YXJ0KCk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgc3RhcnQoKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgTG9n
Z2luZy5kKFRBRywgInN0YXJ0Iik7Ci0KLSAgICB0cnkgewotICAgICAgY2FtZXJhQ2hhcmFjdGVy
aXN0aWNzID0gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2FtZXJhSWQp
OwotICAgIH0gY2F0Y2ggKGZpbmFsIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBy
ZXBvcnRFcnJvcigiZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKCk6ICIgKyBlLmdldE1lc3NhZ2Uo
KSk7Ci0gICAgfQotICAgIGNhbWVyYU9yaWVudGF0aW9uID0gY2FtZXJhQ2hhcmFjdGVyaXN0aWNz
LmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuU0VOU09SX09SSUVOVEFUSU9OKTsKLSAgICBpc0Nh
bWVyYUZyb250RmFjaW5nID0gY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuTEVOU19GQUNJTkcpCi0gICAgICAgID09IENhbWVyYU1ldGFkYXRhLkxFTlNfRkFD
SU5HX0ZST05UOwotCi0gICAgZmluZENhcHR1cmVGb3JtYXQoKTsKLSAgICBvcGVuQ2FtZXJhKCk7
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZmluZENhcHR1cmVGb3JtYXQoKSB7Ci0gICAgY2hlY2tJ
c09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICBSYW5nZTxJbnRlZ2VyPltdIGZwc1JhbmdlcyA9Ci0g
ICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkNP
TlRST0xfQUVfQVZBSUxBQkxFX1RBUkdFVF9GUFNfUkFOR0VTKTsKLSAgICBmcHNVbml0RmFjdG9y
ID0gQ2FtZXJhMkVudW1lcmF0b3IuZ2V0RnBzVW5pdEZhY3RvcihmcHNSYW5nZXMpOwotICAgIExp
c3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gZnJhbWVyYXRlUmFuZ2VzID0KLSAgICAg
ICAgQ2FtZXJhMkVudW1lcmF0b3IuY29udmVydEZyYW1lcmF0ZXMoZnBzUmFuZ2VzLCBmcHNVbml0
RmFjdG9yKTsKLSAgICBMaXN0PFNpemU+IHNpemVzID0gQ2FtZXJhMkVudW1lcmF0b3IuZ2V0U3Vw
cG9ydGVkU2l6ZXMoY2FtZXJhQ2hhcmFjdGVyaXN0aWNzKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
QXZhaWxhYmxlIHByZXZpZXcgc2l6ZXM6ICIgKyBzaXplcyk7Ci0gICAgTG9nZ2luZy5kKFRBRywg
IkF2YWlsYWJsZSBmcHMgcmFuZ2VzOiAiICsgZnJhbWVyYXRlUmFuZ2VzKTsKLQotICAgIGlmIChm
cmFtZXJhdGVSYW5nZXMuaXNFbXB0eSgpIHx8IHNpemVzLmlzRW1wdHkoKSkgewotICAgICAgcmVw
b3J0RXJyb3IoIk5vIHN1cHBvcnRlZCBjYXB0dXJlIGZvcm1hdHMuIik7Ci0gICAgfQotCi0gICAg
ZmluYWwgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBiZXN0RnBzUmFuZ2UgPQotICAgICAg
ICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJh
bmdlKGZyYW1lcmF0ZVJhbmdlcywgZnJhbWVyYXRlKTsKLQotICAgIGZpbmFsIFNpemUgYmVzdFNp
emUgPSBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoc2l6
ZXMsIHdpZHRoLCBoZWlnaHQpOwotICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5yZXBvcnRD
YW1lcmFSZXNvbHV0aW9uKGNhbWVyYTJSZXNvbHV0aW9uSGlzdG9ncmFtLCBiZXN0U2l6ZSk7Ci0K
LSAgICBjYXB0dXJlRm9ybWF0ID0gbmV3IENhcHR1cmVGb3JtYXQoYmVzdFNpemUud2lkdGgsIGJl
c3RTaXplLmhlaWdodCwgYmVzdEZwc1JhbmdlKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiVXNpbmcg
Y2FwdHVyZSBmb3JtYXQ6ICIgKyBjYXB0dXJlRm9ybWF0KTsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBvcGVuQ2FtZXJhKCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgTG9n
Z2luZy5kKFRBRywgIk9wZW5pbmcgY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0gICAgZXZlbnRzLm9u
Q2FtZXJhT3BlbmluZygpOwotCi0gICAgdHJ5IHsKLSAgICAgIGNhbWVyYU1hbmFnZXIub3BlbkNh
bWVyYShjYW1lcmFJZCwgbmV3IENhbWVyYVN0YXRlQ2FsbGJhY2soKSwgY2FtZXJhVGhyZWFkSGFu
ZGxlcik7Ci0gICAgfSBjYXRjaCAoQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJl
cG9ydEVycm9yKCJGYWlsZWQgdG8gb3BlbiBjYW1lcmE6ICIgKyBlKTsKLSAgICB9Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
U3RvcCBjYW1lcmEyIHNlc3Npb24gb24gY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0gICAgY2hlY2tJ
c09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5TVE9QUEVE
KSB7Ci0gICAgICBmaW5hbCBsb25nIHN0b3BTdGFydFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsK
LSAgICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICBzdG9wSW50ZXJuYWwo
KTsKLSAgICAgIGZpbmFsIGludCBzdG9wVGltZU1zID0gKGludCkgVGltZVVuaXQuTkFOT1NFQ09O
RFMudG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBzdG9wU3RhcnRUaW1lKTsKLSAgICAgIGNh
bWVyYTJTdG9wVGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdG9wVGltZU1zKTsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgc3RvcEludGVybmFsKCkgewotICAgIExvZ2dpbmcuZChUQUcs
ICJTdG9wIGludGVybmFsIik7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0KLSAgICBpZiAoY2FwdHVyZVNl
c3Npb24gIT0gbnVsbCkgewotICAgICAgY2FwdHVyZVNlc3Npb24uY2xvc2UoKTsKLSAgICAgIGNh
cHR1cmVTZXNzaW9uID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHN1cmZhY2UgIT0gbnVsbCkgewot
ICAgICAgc3VyZmFjZS5yZWxlYXNlKCk7Ci0gICAgICBzdXJmYWNlID0gbnVsbDsKLSAgICB9Ci0g
ICAgaWYgKGNhbWVyYURldmljZSAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmFEZXZpY2UuY2xvc2Uo
KTsKLSAgICAgIGNhbWVyYURldmljZSA9IG51bGw7Ci0gICAgfQotCi0gICAgTG9nZ2luZy5kKFRB
RywgIlN0b3AgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKFN0cmlu
ZyBlcnJvcikgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIExvZ2dpbmcuZShU
QUcsICJFcnJvcjogIiArIGVycm9yKTsKLQotICAgIGZpbmFsIGJvb2xlYW4gc3RhcnRGYWlsdXJl
ID0gKGNhcHR1cmVTZXNzaW9uID09IG51bGwpOwotICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNU
T1BQRUQ7Ci0gICAgc3RvcEludGVybmFsKCk7Ci0gICAgaWYgKHN0YXJ0RmFpbHVyZSkgewotICAg
ICAgY2FsbGJhY2sub25GYWlsdXJlKGVycm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgZXZlbnRz
Lm9uQ2FtZXJhRXJyb3IodGhpcywgZXJyb3IpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgaW50
IGdldERldmljZU9yaWVudGF0aW9uKCkgewotICAgIGludCBvcmllbnRhdGlvbiA9IDA7Ci0KLSAg
ICBXaW5kb3dNYW5hZ2VyIHdtID0gKFdpbmRvd01hbmFnZXIpIGFwcGxpY2F0aW9uQ29udGV4dC5n
ZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwotICAgIHN3aXRjaCAod20u
Z2V0RGVmYXVsdERpc3BsYXkoKS5nZXRSb3RhdGlvbigpKSB7Ci0gICAgICBjYXNlIFN1cmZhY2Uu
Uk9UQVRJT05fOTA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gOTA7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzE4MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAx
ODA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzI3MDoKLSAg
ICAgICAgb3JpZW50YXRpb24gPSAyNzA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJm
YWNlLlJPVEFUSU9OXzA6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBvcmllbnRhdGlvbiA9IDA7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gb3JpZW50YXRpb247Ci0gIH0KLQot
ICBwcml2YXRlIGludCBnZXRGcmFtZU9yaWVudGF0aW9uKCkgewotICAgIGludCByb3RhdGlvbiA9
IGdldERldmljZU9yaWVudGF0aW9uKCk7Ci0gICAgaWYgKCFpc0NhbWVyYUZyb250RmFjaW5nKSB7
Ci0gICAgICByb3RhdGlvbiA9IDM2MCAtIHJvdGF0aW9uOwotICAgIH0KLSAgICByZXR1cm4gKGNh
bWVyYU9yaWVudGF0aW9uICsgcm90YXRpb24pICUgMzYwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpIHsKLSAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQo
KSAhPSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAg
ICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJlYWQiKTsKLSAgICB9
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhQ2FwdHVyZXIuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUNhcHR1cmVyLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhQ2FwdHVyZXIuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDQ0MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRy
b2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci0KLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlzOwotCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGlj
IGFic3RyYWN0IGNsYXNzIENhbWVyYUNhcHR1cmVyIGltcGxlbWVudHMgQ2FtZXJhVmlkZW9DYXB0
dXJlciB7Ci0gIGVudW0gU3dpdGNoU3RhdGUgewotICAgIElETEUsIC8vIE5vIHN3aXRjaCByZXF1
ZXN0ZWQuCi0gICAgUEVORElORywgLy8gV2FpdGluZyBmb3IgcHJldmlvdXMgY2FwdHVyZSBzZXNz
aW9uIHRvIG9wZW4uCi0gICAgSU5fUFJPR1JFU1MsIC8vIFdhaXRpbmcgZm9yIG5ldyBzd2l0Y2hl
ZCBjYXB0dXJlIHNlc3Npb24gdG8gc3RhcnQuCi0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIkNhbWVyYUNhcHR1cmVyIjsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMg
aW50IE1BWF9PUEVOX0NBTUVSQV9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGlj
IGludCBPUEVOX0NBTUVSQV9ERUxBWV9NUyA9IDUwMDsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMg
aW50IE9QRU5fQ0FNRVJBX1RJTUVPVVQgPSAxMDAwMDsKLQotICBwcml2YXRlIGZpbmFsIENhbWVy
YUVudW1lcmF0b3IgY2FtZXJhRW51bWVyYXRvcjsKLSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFFdmVu
dHNIYW5kbGVyIGV2ZW50c0hhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgSGFuZGxlciB1aVRocmVh
ZEhhbmRsZXI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25D
YWxsYmFjayBjcmVhdGVTZXNzaW9uQ2FsbGJhY2sgPQotICAgICAgbmV3IENhbWVyYVNlc3Npb24u
Q3JlYXRlU2Vzc2lvbkNhbGxiYWNrKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVi
bGljIHZvaWQgb25Eb25lKENhbWVyYVNlc3Npb24gc2Vzc2lvbikgewotICAgICAgICAgIGNoZWNr
SXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGUgc2Vz
c2lvbiBkb25lIik7Ci0gICAgICAgICAgdWlUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhv
cGVuQ2FtZXJhVGltZW91dFJ1bm5hYmxlKTsKLSAgICAgICAgICBzeW5jaHJvbml6ZWQgKHN0YXRl
TG9jaykgewotICAgICAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZCh0
cnVlIC8qIHN1Y2Nlc3MgKi8pOwotICAgICAgICAgICAgc2Vzc2lvbk9wZW5pbmcgPSBmYWxzZTsK
LSAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uID0gc2Vzc2lvbjsKLSAgICAgICAgICAgIGNhbWVy
YVN0YXRpc3RpY3MgPSBuZXcgQ2FtZXJhU3RhdGlzdGljcyhzdXJmYWNlSGVscGVyLCBldmVudHNI
YW5kbGVyKTsKLSAgICAgICAgICAgIGZpcnN0RnJhbWVPYnNlcnZlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgc3RhdGVMb2NrLm5vdGlmeUFsbCgpOwotCi0gICAgICAgICAgICBpZiAoc3dpdGNoU3Rh
dGUgPT0gU3dpdGNoU3RhdGUuSU5fUFJPR1JFU1MpIHsKLSAgICAgICAgICAgICAgaWYgKHN3aXRj
aEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50c0hh
bmRsZXIub25DYW1lcmFTd2l0Y2hEb25lKGNhbWVyYUVudW1lcmF0b3IuaXNGcm9udEZhY2luZyhj
YW1lcmFOYW1lKSk7Ci0gICAgICAgICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlciA9IG51bGw7
Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0
ZS5JRExFOwotICAgICAgICAgICAgfSBlbHNlIGlmIChzd2l0Y2hTdGF0ZSA9PSBTd2l0Y2hTdGF0
ZS5QRU5ESU5HKSB7Ci0gICAgICAgICAgICAgIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUuSURM
RTsKLSAgICAgICAgICAgICAgc3dpdGNoQ2FtZXJhSW50ZXJuYWwoc3dpdGNoRXZlbnRzSGFuZGxl
cik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92
ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRmFpbHVyZShTdHJpbmcgZXJyb3IpIHsKLSAg
ICAgICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgICAgICB1aVRocmVhZEhhbmRs
ZXIucmVtb3ZlQ2FsbGJhY2tzKG9wZW5DYW1lcmFUaW1lb3V0UnVubmFibGUpOwotICAgICAgICAg
IHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBjYXB0dXJlck9ic2VydmVy
Lm9uQ2FwdHVyZXJTdGFydGVkKGZhbHNlIC8qIHN1Y2Nlc3MgKi8pOwotICAgICAgICAgICAgb3Bl
bkF0dGVtcHRzUmVtYWluaW5nLS07Ci0KLSAgICAgICAgICAgIGlmIChvcGVuQXR0ZW1wdHNSZW1h
aW5pbmcgPD0gMCkgewotICAgICAgICAgICAgICBMb2dnaW5nLncoVEFHLCAiT3BlbmluZyBjYW1l
cmEgZmFpbGVkLCBwYXNzaW5nOiAiICsgZXJyb3IpOwotICAgICAgICAgICAgICBzZXNzaW9uT3Bl
bmluZyA9IGZhbHNlOwotICAgICAgICAgICAgICBzdGF0ZUxvY2subm90aWZ5QWxsKCk7Ci0KLSAg
ICAgICAgICAgICAgaWYgKHN3aXRjaFN0YXRlICE9IFN3aXRjaFN0YXRlLklETEUpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAg
ICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoZXJyb3IpOwot
ICAgICAgICAgICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlciA9IG51bGw7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUuSURMRTsK
LSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFF
cnJvcihlcnJvcik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBMb2dnaW5n
LncoVEFHLCAiT3BlbmluZyBjYW1lcmEgZmFpbGVkLCByZXRyeTogIiArIGVycm9yKTsKLQotICAg
ICAgICAgICAgICBjcmVhdGVTZXNzaW9uSW50ZXJuYWwoT1BFTl9DQU1FUkFfREVMQVlfTVMpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLQotICBwcml2
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
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVy
ZWQoCi0gICAgICAgIENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgYnl0ZVtdIGRhdGEsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCkgewotICAgICAgY2hl
Y2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewot
ICAgICAgICBpZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lvbikgewotICAgICAgICAgIExvZ2dp
bmcudyhUQUcsICJvbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkIGZyb20gYW5vdGhlciBzZXNzaW9u
LiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZpcnN0RnJh
bWVPYnNlcnZlZCkgewotICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25GaXJzdEZyYW1lQXZhaWxh
YmxlKCk7Ci0gICAgICAgICAgZmlyc3RGcmFtZU9ic2VydmVkID0gdHJ1ZTsKLSAgICAgICAgfQot
ICAgICAgICBjYW1lcmFTdGF0aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgICAgIGNhcHR1cmVyT2Jz
ZXJ2ZXIub25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZChkYXRhLCB3aWR0aCwgaGVpZ2h0LCByb3Rh
dGlvbiwgdGltZXN0YW1wKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYVNlc3Npb24gc2Vzc2lvbiwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtd
IHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCkgewotICAgICAg
Y2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykg
ewotICAgICAgICBpZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lvbikgewotICAgICAgICAgIExv
Z2dpbmcudyhUQUcsICJvblRleHR1cmVGcmFtZUNhcHR1cmVkIGZyb20gYW5vdGhlciBzZXNzaW9u
LiIpOwotICAgICAgICAgIHN1cmZhY2VIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZmlyc3RGcmFtZU9ic2VydmVk
KSB7Ci0gICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkZpcnN0RnJhbWVBdmFpbGFibGUoKTsKLSAg
ICAgICAgICBmaXJzdEZyYW1lT2JzZXJ2ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNh
bWVyYVN0YXRpc3RpY3MuYWRkRnJhbWUoKTsKLSAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vblRl
eHR1cmVGcmFtZUNhcHR1cmVkKAotICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgb2VzVGV4dHVy
ZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIHJvdGF0aW9uLCB0aW1lc3RhbXApOwotICAgICAgfQotICAg
IH0KLSAgfTsKLQotICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG9wZW5DYW1lcmFUaW1lb3V0UnVu
bmFibGUgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKCJDYW1lcmEgZmFpbGVk
IHRvIHN0YXJ0IHdpdGhpbiB0aW1lb3V0LiIpOwotICAgIH0KLSAgfTsKLQotICAvLyBJbml0aWFs
aXplZCBvbiBpbml0aWFsaXplCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgcHJp
dmF0ZSBIYW5kbGVyIGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgQ29udGV4dCBhcHBs
aWNhdGlvbkNvbnRleHQ7Ci0gIHByaXZhdGUgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2Vy
dmVyOwotICBwcml2YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VIZWxwZXI7Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBPYmplY3Qgc3RhdGVMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRl
IGJvb2xlYW4gc2Vzc2lvbk9wZW5pbmc7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHBy
aXZhdGUgQ2FtZXJhU2Vzc2lvbiBjdXJyZW50U2Vzc2lvbjsgLyogZ3VhcmRlZCBieSBzdGF0ZUxv
Y2sgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgY2FtZXJhTmFtZTsgLyogZ3VhcmRlZCBieSBzdGF0ZUxv
Y2sgKi8KLSAgcHJpdmF0ZSBpbnQgd2lkdGg7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0g
IHByaXZhdGUgaW50IGhlaWdodDsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0
ZSBpbnQgZnJhbWVyYXRlOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2YXRlIGlu
dCBvcGVuQXR0ZW1wdHNSZW1haW5pbmc7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHBy
aXZhdGUgU3dpdGNoU3RhdGUgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5JRExFOyAvKiBndWFy
ZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2YXRlIENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNo
RXZlbnRzSGFuZGxlcjsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgLy8gVmFsaWQgZnJv
bSBvbkRvbmUgY2FsbCB1bnRpbCBzdG9wQ2FwdHVyZSwgb3RoZXJ3aXNlIG51bGwuCi0gIHByaXZh
dGUgQ2FtZXJhU3RhdGlzdGljcyBjYW1lcmFTdGF0aXN0aWNzOyAvKiBndWFyZGVkIGJ5IHN0YXRl
TG9jayAqLwotICBwcml2YXRlIGJvb2xlYW4gZmlyc3RGcmFtZU9ic2VydmVkOyAvKiBndWFyZGVk
IGJ5IHN0YXRlTG9jayAqLwotCi0gIHB1YmxpYyBDYW1lcmFDYXB0dXJlcigKLSAgICAgIFN0cmlu
ZyBjYW1lcmFOYW1lLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIENhbWVyYUVu
dW1lcmF0b3IgY2FtZXJhRW51bWVyYXRvcikgewotICAgIGlmIChldmVudHNIYW5kbGVyID09IG51
bGwpIHsKLSAgICAgIGV2ZW50c0hhbmRsZXIgPSBuZXcgQ2FtZXJhRXZlbnRzSGFuZGxlcigpIHsK
LSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRXJyb3IoU3Ry
aW5nIGVycm9yRGVzY3JpcHRpb24pIHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJs
aWMgdm9pZCBvbkNhbWVyYURpc2Nvbm5lY3RlZCgpIHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAg
ICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYUZyZWV6ZWQoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24p
IHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYU9wZW5p
bmcoU3RyaW5nIGNhbWVyYU5hbWUpIHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJs
aWMgdm9pZCBvbkZpcnN0RnJhbWVBdmFpbGFibGUoKSB7fQotICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFDbG9zZWQoKSB7fQotICAgICAgfTsKLSAgICB9Ci0K
LSAgICB0aGlzLmV2ZW50c0hhbmRsZXIgPSBldmVudHNIYW5kbGVyOwotICAgIHRoaXMuY2FtZXJh
RW51bWVyYXRvciA9IGNhbWVyYUVudW1lcmF0b3I7Ci0gICAgdGhpcy5jYW1lcmFOYW1lID0gY2Ft
ZXJhTmFtZTsKLSAgICB1aVRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihMb29wZXIuZ2V0TWFp
bkxvb3BlcigpKTsKLQotICAgIGZpbmFsIFN0cmluZ1tdIGRldmljZU5hbWVzID0gY2FtZXJhRW51
bWVyYXRvci5nZXREZXZpY2VOYW1lcygpOwotCi0gICAgaWYgKGRldmljZU5hbWVzLmxlbmd0aCA9
PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gY2FtZXJhcyBhdHRh
Y2hlZC4iKTsKLSAgICB9Ci0gICAgaWYgKCFBcnJheXMuYXNMaXN0KGRldmljZU5hbWVzKS5jb250
YWlucyh0aGlzLmNhbWVyYU5hbWUpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uKAotICAgICAgICAgICJDYW1lcmEgbmFtZSAiICsgdGhpcy5jYW1lcmFOYW1lICsg
IiBkb2VzIG5vdCBtYXRjaCBhbnkga25vd24gY2FtZXJhIGRldmljZS4iKTsKLSAgICB9Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0g
ICAgICBDYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIpIHsKLSAgICB0aGlzLmFwcGxp
Y2F0aW9uQ29udGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICB0aGlzLmNhcHR1cmVyT2Jz
ZXJ2ZXIgPSBjYXB0dXJlck9ic2VydmVyOwotICAgIHRoaXMuc3VyZmFjZUhlbHBlciA9IHN1cmZh
Y2VUZXh0dXJlSGVscGVyOwotICAgIHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9Ci0gICAgICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyID09IG51bGwgPyBudWxsIDogc3VyZmFjZVRleHR1cmVIZWxw
ZXIuZ2V0SGFuZGxlcigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0YXJ0
Q2FwdHVyZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAic3RhcnRDYXB0dXJlOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIg
KyBmcmFtZXJhdGUpOwotCi0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgIGlm
IChzZXNzaW9uT3BlbmluZyB8fCBjdXJyZW50U2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgIExv
Z2dpbmcudyhUQUcsICJTZXNzaW9uIGFscmVhZHkgb3BlbiIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0KLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0KLSAgICAgIHNlc3Np
b25PcGVuaW5nID0gdHJ1ZTsKLSAgICAgIG9wZW5BdHRlbXB0c1JlbWFpbmluZyA9IE1BWF9PUEVO
X0NBTUVSQV9BVFRFTVBUUzsKLSAgICAgIGNyZWF0ZVNlc3Npb25JbnRlcm5hbCgwKTsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlU2Vzc2lvbkludGVybmFsKGludCBkZWxheU1z
KSB7Ci0gICAgdWlUaHJlYWRIYW5kbGVyLnBvc3REZWxheWVkKG9wZW5DYW1lcmFUaW1lb3V0UnVu
bmFibGUsIGRlbGF5TXMgKyBPUEVOX0NBTUVSQV9USU1FT1VUKTsKLSAgICBjYW1lcmFUaHJlYWRI
YW5kbGVyLnBvc3REZWxheWVkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjcmVhdGVDYW1lcmFTZXNzaW9uKGNyZWF0
ZVNlc3Npb25DYWxsYmFjaywgY2FtZXJhU2Vzc2lvbkV2ZW50c0hhbmRsZXIsIGFwcGxpY2F0aW9u
Q29udGV4dCwKLSAgICAgICAgICAgIHN1cmZhY2VIZWxwZXIsIGNhbWVyYU5hbWUsIHdpZHRoLCBo
ZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgICB9Ci0gICAgfSwgZGVsYXlNcyk7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3RvcENhcHR1cmUoKSB7Ci0gICAgTG9nZ2luZy5kKFRB
RywgIlN0b3AgY2FwdHVyZSIpOwotCi0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAg
ICAgIHdoaWxlIChzZXNzaW9uT3BlbmluZykgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3Rv
cCBjYXB0dXJlOiBXYWl0aW5nIGZvciBzZXNzaW9uIHRvIG9wZW4iKTsKLSAgICAgICAgVGhyZWFk
VXRpbHMud2FpdFVuaW50ZXJydXB0aWJseShzdGF0ZUxvY2spOwotICAgICAgfQotCi0gICAgICBp
ZiAoY3VycmVudFNlc3Npb24gIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3Rv
cCBjYXB0dXJlOiBOdWxsaW5nIHNlc3Npb24iKTsKLSAgICAgICAgY2FtZXJhU3RhdGlzdGljcy5y
ZWxlYXNlKCk7Ci0gICAgICAgIGNhbWVyYVN0YXRpc3RpY3MgPSBudWxsOwotICAgICAgICBmaW5h
bCBDYW1lcmFTZXNzaW9uIG9sZFNlc3Npb24gPSBjdXJyZW50U2Vzc2lvbjsKLSAgICAgICAgY2Ft
ZXJhVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJp
ZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBvbGRTZXNzaW9u
LnN0b3AoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBjdXJyZW50U2Vzc2lv
biA9IG51bGw7Ci0gICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0b3BwZWQoKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmU6IE5v
IHNlc3Npb24gb3BlbiIpOwotICAgICAgfQotICAgIH0KLQotICAgIExvZ2dpbmcuZChUQUcsICJT
dG9wIGNhcHR1cmUgZG9uZSIpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNo
YW5nZUNhcHR1cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgImNoYW5nZUNhcHR1cmVGb3JtYXQ6ICIgKyB3aWR0aCArICJ4
IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZSk7Ci0gICAgc3luY2hyb25pemVkIChzdGF0ZUxv
Y2spIHsKLSAgICAgIHN0b3BDYXB0dXJlKCk7Ci0gICAgICBzdGFydENhcHR1cmUod2lkdGgsIGhl
aWdodCwgZnJhbWVyYXRlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgZGlzcG9zZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSIpOwotICAgIHN0b3BD
YXB0dXJlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJh
KGZpbmFsIENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxlcikgewotICAgIExv
Z2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmEiKTsKLSAgICBjYW1lcmFUaHJlYWRIYW5kbGVyLnBv
c3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIHN3aXRjaENhbWVyYUludGVybmFsKHN3aXRjaEV2ZW50c0hhbmRsZXIp
OwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFu
IGlzU2NyZWVuY2FzdCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBwcmludFN0YWNrVHJhY2UoKSB7Ci0gICAgVGhyZWFkIGNhbWVyYVRocmVhZCA9IG51bGw7Ci0g
ICAgaWYgKGNhbWVyYVRocmVhZEhhbmRsZXIgIT0gbnVsbCkgewotICAgICAgY2FtZXJhVGhyZWFk
ID0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKTsKLSAgICB9Ci0g
ICAgaWYgKGNhbWVyYVRocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxlbWVudFtd
IGNhbWVyYVN0YWNrVHJhY2UgPSBjYW1lcmFUaHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAg
aWYgKGNhbWVyYVN0YWNrVHJhY2UubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFH
LCAiQ2FtZXJhQ2FwdHVyZXIgc3RhY2sgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFj
ZUVsZW1lbnQgdHJhY2VFbGVtIDogY2FtZXJhU3RhY2tUcmFjZSkgewotICAgICAgICAgIExvZ2dp
bmcuZChUQUcsIHRyYWNlRWxlbS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzd2l0Y2hDYW1lcmFJbnRlcm5hbChmaW5hbCBDYW1l
cmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFH
LCAic3dpdGNoQ2FtZXJhIGludGVybmFsIik7Ci0KLSAgICBmaW5hbCBTdHJpbmdbXSBkZXZpY2VO
YW1lcyA9IGNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKTsKLQotICAgIGlmIChkZXZp
Y2VOYW1lcy5sZW5ndGggPCAyKSB7Ci0gICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBu
dWxsKSB7Ci0gICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigi
Tm8gY2FtZXJhIHRvIHN3aXRjaCB0by4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgaWYgKHN3aXRjaFN0YXRl
ICE9IFN3aXRjaFN0YXRlLklETEUpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENh
bWVyYSBzd2l0Y2hJblByb2dyZXNzIik7Ci0gICAgICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVy
ICE9IG51bGwpIHsKLSAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNo
RXJyb3IoIkNhbWVyYSBzd2l0Y2ggYWxyZWFkeSBpbiBwcm9ncmVzcy4iKTsKLSAgICAgICAgfQot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc2Vzc2lvbk9wZW5pbmcgJiYg
Y3VycmVudFNlc3Npb24gPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNo
Q2FtZXJhOiBObyBzZXNzaW9uIG9wZW4iKTsKLSAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRs
ZXIgIT0gbnVsbCkgewotICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0
Y2hFcnJvcigiQ2FtZXJhIGlzIG5vdCBydW5uaW5nLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLQotICAgICAgdGhpcy5zd2l0Y2hFdmVudHNIYW5kbGVyID0gc3dpdGNo
RXZlbnRzSGFuZGxlcjsKLSAgICAgIGlmIChzZXNzaW9uT3BlbmluZykgewotICAgICAgICBzd2l0
Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLlBFTkRJTkc7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUuSU5fUFJPR1JFU1M7Ci0g
ICAgICB9Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmE6IFN0b3BwaW5nIHNl
c3Npb24iKTsKLSAgICAgIGNhbWVyYVN0YXRpc3RpY3MucmVsZWFzZSgpOwotICAgICAgY2FtZXJh
U3RhdGlzdGljcyA9IG51bGw7Ci0gICAgICBmaW5hbCBDYW1lcmFTZXNzaW9uIG9sZFNlc3Npb24g
PSBjdXJyZW50U2Vzc2lvbjsKLSAgICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdChuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgICAgb2xkU2Vzc2lvbi5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAg
ICAgY3VycmVudFNlc3Npb24gPSBudWxsOwotCi0gICAgICBpbnQgY2FtZXJhTmFtZUluZGV4ID0g
QXJyYXlzLmFzTGlzdChkZXZpY2VOYW1lcykuaW5kZXhPZihjYW1lcmFOYW1lKTsKLSAgICAgIGNh
bWVyYU5hbWUgPSBkZXZpY2VOYW1lc1soY2FtZXJhTmFtZUluZGV4ICsgMSkgJSBkZXZpY2VOYW1l
cy5sZW5ndGhdOwotCi0gICAgICBzZXNzaW9uT3BlbmluZyA9IHRydWU7Ci0gICAgICBvcGVuQXR0
ZW1wdHNSZW1haW5pbmcgPSAxOwotICAgICAgY3JlYXRlU2Vzc2lvbkludGVybmFsKDApOwotICAg
IH0KLSAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhIGRvbmUiKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBjaGVja0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgaWYgKFRocmVhZC5jdXJy
ZW50VGhyZWFkKCkgIT0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQo
KSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNoZWNrIGlzIG9uIGNhbWVyYSB0aHJlYWQgZmFp
bGVkLiIpOwotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBvbiBjYW1lcmEg
dGhyZWFkLiIpOwotICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q2FtZXJhTmFt
ZSgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgcmV0dXJuIGNhbWVy
YU5hbWU7Ci0gICAgfQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2Ft
ZXJhU2Vzc2lvbigKLSAgICAgIENhbWVyYVNlc3Npb24uQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNy
ZWF0ZVNlc3Npb25DYWxsYmFjaywgQ2FtZXJhU2Vzc2lvbi5FdmVudHMgZXZlbnRzLAotICAgICAg
Q29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLCBTdHJpbmcgY2FtZXJhTmFtZSwKLSAgICAgIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IGZyYW1lcmF0ZSk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVu
dW1lcmF0aW9uQW5kcm9pZC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2Ft
ZXJhRW51bWVyYXRpb25BbmRyb2lkLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyMDcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwot
Ci1pbXBvcnQgc3RhdGljIGphdmEubGFuZy5NYXRoLmFiczsKLQotaW1wb3J0IGFuZHJvaWQuZ3Jh
cGhpY3MuSW1hZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBq
YXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcu
d2VicnRjLk1ldHJpY3MuSGlzdG9ncmFtOwotCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRp
b24iKQotcHVibGljIGNsYXNzIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZCB7Ci0gIHByaXZhdGUg
ZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkIjsKLQot
ICBzdGF0aWMgZmluYWwgQXJyYXlMaXN0PFNpemU+IENPTU1PTl9SRVNPTFVUSU9OUyA9IG5ldyBB
cnJheUxpc3Q8U2l6ZT4oQXJyYXlzLmFzTGlzdCgKLSAgICAgIC8vIDAsIFVua25vd24gcmVzb2x1
dGlvbgotICAgICAgbmV3IFNpemUoMTYwLCAxMjApLCAvLyAxLCBRUVZHQQotICAgICAgbmV3IFNp
emUoMjQwLCAxNjApLCAvLyAyLCBIUVZHQQotICAgICAgbmV3IFNpemUoMzIwLCAyNDApLCAvLyAz
LCBRVkdBCi0gICAgICBuZXcgU2l6ZSg0MDAsIDI0MCksIC8vIDQsIFdRVkdBCi0gICAgICBuZXcg
U2l6ZSg0ODAsIDMyMCksIC8vIDUsIEhWR0EKLSAgICAgIG5ldyBTaXplKDY0MCwgMzYwKSwgLy8g
NiwgbkhECi0gICAgICBuZXcgU2l6ZSg2NDAsIDQ4MCksIC8vIDcsIFZHQQotICAgICAgbmV3IFNp
emUoNzY4LCA0ODApLCAvLyA4LCBXVkdBCi0gICAgICBuZXcgU2l6ZSg4NTQsIDQ4MCksIC8vIDks
IEZXVkdBCi0gICAgICBuZXcgU2l6ZSg4MDAsIDYwMCksIC8vIDEwLCBTVkdBCi0gICAgICBuZXcg
U2l6ZSg5NjAsIDU0MCksIC8vIDExLCBxSEQKLSAgICAgIG5ldyBTaXplKDk2MCwgNjQwKSwgLy8g
MTIsIERWR0EKLSAgICAgIG5ldyBTaXplKDEwMjQsIDU3NiksIC8vIDEzLCBXU1ZHQQotICAgICAg
bmV3IFNpemUoMTAyNCwgNjAwKSwgLy8gMTQsIFdWU0dBCi0gICAgICBuZXcgU2l6ZSgxMjgwLCA3
MjApLCAvLyAxNSwgSEQKLSAgICAgIG5ldyBTaXplKDEyODAsIDEwMjQpLCAvLyAxNiwgU1hHQQot
ICAgICAgbmV3IFNpemUoMTkyMCwgMTA4MCksIC8vIDE3LCBGdWxsIEhECi0gICAgICBuZXcgU2l6
ZSgxOTIwLCAxNDQwKSwgLy8gMTgsIEZ1bGwgSEQgNDozCi0gICAgICBuZXcgU2l6ZSgyNTYwLCAx
NDQwKSwgLy8gMTksIFFIRAotICAgICAgbmV3IFNpemUoMzg0MCwgMjE2MCkgLy8gMjAsIFVIRAot
ICAgICAgKSk7Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDYXB0dXJlRm9ybWF0IHsKLSAgICAv
LyBDbGFzcyB0byByZXByZXNlbnQgYSBmcmFtZXJhdGUgcmFuZ2UuIFRoZSBmcmFtZXJhdGUgdmFy
aWVzIGJlY2F1c2Ugb2YgbGlnaHRuaW5nIGNvbmRpdGlvbnMuCi0gICAgLy8gVGhlIHZhbHVlcyBh
cmUgbXVsdGlwbGllZCBieSAxMDAwLCBzbyAxMDAwIHJlcHJlc2VudHMgb25lIGZyYW1lIHBlciBz
ZWNvbmQuCi0gICAgcHVibGljIHN0YXRpYyBjbGFzcyBGcmFtZXJhdGVSYW5nZSB7Ci0gICAgICBw
dWJsaWMgaW50IG1pbjsKLSAgICAgIHB1YmxpYyBpbnQgbWF4OwotCi0gICAgICBwdWJsaWMgRnJh
bWVyYXRlUmFuZ2UoaW50IG1pbiwgaW50IG1heCkgewotICAgICAgICB0aGlzLm1pbiA9IG1pbjsK
LSAgICAgICAgdGhpcy5tYXggPSBtYXg7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuICJbIiArIChtaW4g
LyAxMDAwLjBmKSArICI6IiArIChtYXggLyAxMDAwLjBmKSArICJdIjsKLSAgICAgIH0KLQotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7
Ci0gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgRnJhbWVyYXRlUmFuZ2UpKSB7Ci0gICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIEZyYW1lcmF0ZVJh
bmdlIG90aGVyRnJhbWVyYXRlID0gKEZyYW1lcmF0ZVJhbmdlKSBvdGhlcjsKLSAgICAgICAgcmV0
dXJuIG1pbiA9PSBvdGhlckZyYW1lcmF0ZS5taW4gJiYgbWF4ID09IG90aGVyRnJhbWVyYXRlLm1h
eDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgaW50IGhhc2hDb2Rl
KCkgewotICAgICAgICAvLyBVc2UgcHJpbWUgY2xvc2UgdG8gMl4xNiB0byBhdm9pZCBjb2xsaXNp
b25zIGZvciBub3JtYWwgdmFsdWVzIGxlc3MgdGhhbiAyXjE2LgotICAgICAgICByZXR1cm4gMSAr
IDY1NTM3ICogbWluICsgbWF4OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBp
bnQgd2lkdGg7Ci0gICAgcHVibGljIGZpbmFsIGludCBoZWlnaHQ7Ci0gICAgcHVibGljIGZpbmFs
IEZyYW1lcmF0ZVJhbmdlIGZyYW1lcmF0ZTsKLQotICAgIC8vIFRPRE8oaGJvcyk6IElmIFZpZGVv
Q2FwdHVyZXIuc3RhcnRDYXB0dXJlIGlzIHVwZGF0ZWQgdG8gc3VwcG9ydCBvdGhlciBpbWFnZSBm
b3JtYXRzIHRoZW4gdGhpcwotICAgIC8vIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYW5kIFZpZGVvQ2Fw
dHVyZXIuZ2V0U3VwcG9ydGVkRm9ybWF0cyBuZWVkIHRvIHJldHVybiBDYXB0dXJlRm9ybWF0cyBv
ZgotICAgIC8vIGFsbCBpbWFnZUZvcm1hdHMuCi0gICAgcHVibGljIGZpbmFsIGludCBpbWFnZUZv
cm1hdCA9IEltYWdlRm9ybWF0Lk5WMjE7Ci0KLSAgICBwdWJsaWMgQ2FwdHVyZUZvcm1hdChpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBtaW5GcmFtZXJhdGUsIGludCBtYXhGcmFtZXJhdGUpIHsK
LSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0Owot
ICAgICAgdGhpcy5mcmFtZXJhdGUgPSBuZXcgRnJhbWVyYXRlUmFuZ2UobWluRnJhbWVyYXRlLCBt
YXhGcmFtZXJhdGUpOwotICAgIH0KLQotICAgIHB1YmxpYyBDYXB0dXJlRm9ybWF0KGludCB3aWR0
aCwgaW50IGhlaWdodCwgRnJhbWVyYXRlUmFuZ2UgZnJhbWVyYXRlKSB7Ci0gICAgICB0aGlzLndp
ZHRoID0gd2lkdGg7Ci0gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHRoaXMuZnJh
bWVyYXRlID0gZnJhbWVyYXRlOwotICAgIH0KLQotICAgIC8vIENhbGN1bGF0ZXMgdGhlIGZyYW1l
IHNpemUgb2YgdGhpcyBjYXB0dXJlIGZvcm1hdC4KLSAgICBwdWJsaWMgaW50IGZyYW1lU2l6ZSgp
IHsKLSAgICAgIHJldHVybiBmcmFtZVNpemUod2lkdGgsIGhlaWdodCwgaW1hZ2VGb3JtYXQpOwot
ICAgIH0KLQotICAgIC8vIENhbGN1bGF0ZXMgdGhlIGZyYW1lIHNpemUgb2YgdGhlIHNwZWNpZmll
ZCBpbWFnZSBmb3JtYXQuIEN1cnJlbnRseSBvbmx5Ci0gICAgLy8gc3VwcG9ydGluZyBJbWFnZUZv
cm1hdC5OVjIxLgotICAgIC8vIFRoZSBzaXplIGlzIHdpZHRoICogaGVpZ2h0ICogbnVtYmVyIG9m
IGJ5dGVzIHBlciBwaXhlbC4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Jl
ZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5odG1sI2FkZENhbGxiYWNrQnVmZmVyKGJ5
dGVbXSkKLSAgICBwdWJsaWMgc3RhdGljIGludCBmcmFtZVNpemUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBpbnQgaW1hZ2VGb3JtYXQpIHsKLSAgICAgIGlmIChpbWFnZUZvcm1hdCAhPSBJbWFnZUZv
cm1hdC5OVjIxKSB7Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2Vw
dGlvbigiRG9uJ3Qga25vdyBob3cgdG8gY2FsY3VsYXRlICIKLSAgICAgICAgICAgICsgInRoZSBm
cmFtZSBzaXplIG9mIG5vbi1OVjIxIGltYWdlIGZvcm1hdHMuIik7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gKHdpZHRoICogaGVpZ2h0ICogSW1hZ2VGb3JtYXQuZ2V0Qml0c1BlclBpeGVsKGltYWdl
Rm9ybWF0KSkgLyA4OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcg
dG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBm
cmFtZXJhdGU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1
YWxzKE9iamVjdCBvdGhlcikgewotICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBDYXB0dXJl
Rm9ybWF0KSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBD
YXB0dXJlRm9ybWF0IG90aGVyRm9ybWF0ID0gKENhcHR1cmVGb3JtYXQpIG90aGVyOwotICAgICAg
cmV0dXJuIHdpZHRoID09IG90aGVyRm9ybWF0LndpZHRoICYmIGhlaWdodCA9PSBvdGhlckZvcm1h
dC5oZWlnaHQKLSAgICAgICAgICAmJiBmcmFtZXJhdGUuZXF1YWxzKG90aGVyRm9ybWF0LmZyYW1l
cmF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgp
IHsKLSAgICAgIHJldHVybiAxICsgKHdpZHRoICogNjU0OTcgKyBoZWlnaHQpICogMjUxICsgZnJh
bWVyYXRlLmhhc2hDb2RlKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIGNsYXNzIGZvciBm
aW5kaW5nIHRoZSBjbG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQgZm9yIHRoZSB0d28gZnVuY3Rpb25z
IGJlbG93LiBJdCBjcmVhdGVzIGEKLSAgLy8gY29tcGFyYXRvciBiYXNlZCBvbiB0aGUgZGlmZmVy
ZW5jZSB0byBzb21lIHJlcXVlc3RlZCBwYXJhbWV0ZXJzLCB3aGVyZSB0aGUgZWxlbWVudCB3aXRo
IHRoZQotICAvLyBtaW5pbXVtIGRpZmZlcmVuY2UgaXMgdGhlIGVsZW1lbnQgdGhhdCBpcyBjbG9z
ZXN0IHRvIHRoZSByZXF1ZXN0ZWQgcGFyYW1ldGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgYWJzdHJh
Y3QgY2xhc3MgQ2xvc2VzdENvbXBhcmF0b3I8VD4gaW1wbGVtZW50cyBDb21wYXJhdG9yPFQ+IHsK
LSAgICAvLyBEaWZmZXJlbmNlIGJldHdlZW4gc3VwcG9ydGVkIGFuZCByZXF1ZXN0ZWQgcGFyYW1l
dGVyLgotICAgIGFic3RyYWN0IGludCBkaWZmKFQgc3VwcG9ydGVkUGFyYW1ldGVyKTsKLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY29tcGFyZShUIHQxLCBUIHQyKSB7Ci0gICAgICBy
ZXR1cm4gZGlmZih0MSkgLSBkaWZmKHQyKTsKLSAgICB9Ci0gIH0KLQotICAvLyBQcmVmZXIgYSBm
cHMgcmFuZ2Ugd2l0aCBhbiB1cHBlciBib3VuZCBjbG9zZSB0byB8ZnJhbWVyYXRlfC4gQWxzbyBw
cmVmZXIgYSBmcHMgcmFuZ2Ugd2l0aCBhIGxvdwotICAvLyBsb3dlciBib3VuZCwgdG8gYWxsb3cg
dGhlIGZyYW1lcmF0ZSB0byBmbHVjdHVhdGUgYmFzZWQgb24gbGlnaHRuaW5nIGNvbmRpdGlvbnMu
Ci0gIHB1YmxpYyBzdGF0aWMgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBnZXRDbG9zZXN0
U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoCi0gICAgICBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVy
YXRlUmFuZ2U+IHN1cHBvcnRlZEZyYW1lcmF0ZXMsIGZpbmFsIGludCByZXF1ZXN0ZWRGcHMpIHsK
LSAgICByZXR1cm4gQ29sbGVjdGlvbnMubWluKAotICAgICAgICBzdXBwb3J0ZWRGcmFtZXJhdGVz
LCBuZXcgQ2xvc2VzdENvbXBhcmF0b3I8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4oKSB7
Ci0gICAgICAgICAgLy8gUHJvZ3Jlc3NpdmUgcGVuYWx0eSBpZiB0aGUgdXBwZXIgYm91bmQgaXMg
ZnVydGhlciBhd2F5IHRoYW4gfE1BWF9GUFNfRElGRl9USFJFU0hPTER8Ci0gICAgICAgICAgLy8g
ZnJvbSByZXF1ZXN0ZWQuCi0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9G
UFNfRElGRl9USFJFU0hPTEQgPSA1MDAwOwotICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBNQVhfRlBTX0xPV19ESUZGX1dFSUdIVCA9IDE7Ci0gICAgICAgICAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IE1BWF9GUFNfSElHSF9ESUZGX1dFSUdIVCA9IDM7Ci0KLSAgICAgICAgICAv
LyBQcm9ncmVzc2l2ZSBwZW5hbHR5IGlmIHRoZSBsb3dlciBib3VuZCBpcyBiaWdnZXIgdGhhbiB8
TUlOX0ZQU19USFJFU0hPTER8LgotICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBN
SU5fRlBTX1RIUkVTSE9MRCA9IDgwMDA7Ci0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IE1JTl9GUFNfTE9XX1ZBTFVFX1dFSUdIVCA9IDE7Ci0gICAgICAgICAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IE1JTl9GUFNfSElHSF9WQUxVRV9XRUlHSFQgPSA0OwotCi0gICAgICAgICAg
Ly8gVXNlIG9uZSB3ZWlnaHQgZm9yIHNtYWxsIHx2YWx1ZXwgbGVzcyB0aGFuIHx0aHJlc2hvbGR8
LCBhbmQgYW5vdGhlciB3ZWlnaHQgYWJvdmUuCi0gICAgICAgICAgcHJpdmF0ZSBpbnQgcHJvZ3Jl
c3NpdmVQZW5hbHR5KGludCB2YWx1ZSwgaW50IHRocmVzaG9sZCwgaW50IGxvd1dlaWdodCwgaW50
IGhpZ2hXZWlnaHQpIHsKLSAgICAgICAgICAgIHJldHVybiAodmFsdWUgPCB0aHJlc2hvbGQpID8g
dmFsdWUgKiBsb3dXZWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogdGhyZXNob2xkICogbG93V2VpZ2h0ICsgKHZhbHVlIC0gdGhyZXNob2xkKSAqIGhpZ2hXZWln
aHQ7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgaW50IGRp
ZmYoQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSByYW5nZSkgewotICAgICAgICAgICAgZmlu
YWwgaW50IG1pbkZwc0Vycm9yID0gcHJvZ3Jlc3NpdmVQZW5hbHR5KAotICAgICAgICAgICAgICAg
IHJhbmdlLm1pbiwgTUlOX0ZQU19USFJFU0hPTEQsIE1JTl9GUFNfTE9XX1ZBTFVFX1dFSUdIVCwg
TUlOX0ZQU19ISUdIX1ZBTFVFX1dFSUdIVCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbWF4RnBz
RXJyb3IgPSBwcm9ncmVzc2l2ZVBlbmFsdHkoTWF0aC5hYnMocmVxdWVzdGVkRnBzICogMTAwMCAt
IHJhbmdlLm1heCksCi0gICAgICAgICAgICAgICAgTUFYX0ZQU19ESUZGX1RIUkVTSE9MRCwgTUFY
X0ZQU19MT1dfRElGRl9XRUlHSFQsIE1BWF9GUFNfSElHSF9ESUZGX1dFSUdIVCk7Ci0gICAgICAg
ICAgICByZXR1cm4gbWluRnBzRXJyb3IgKyBtYXhGcHNFcnJvcjsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTaXplIGdldENsb3Nlc3RTdXBwb3J0ZWRT
aXplKAotICAgICAgTGlzdDxTaXplPiBzdXBwb3J0ZWRTaXplcywgZmluYWwgaW50IHJlcXVlc3Rl
ZFdpZHRoLCBmaW5hbCBpbnQgcmVxdWVzdGVkSGVpZ2h0KSB7Ci0gICAgcmV0dXJuIENvbGxlY3Rp
b25zLm1pbihzdXBwb3J0ZWRTaXplcywgbmV3IENsb3Nlc3RDb21wYXJhdG9yPFNpemU+KCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBpbnQgZGlmZihTaXplIHNpemUpIHsKLSAgICAgICAgcmV0
dXJuIGFicyhyZXF1ZXN0ZWRXaWR0aCAtIHNpemUud2lkdGgpICsgYWJzKHJlcXVlc3RlZEhlaWdo
dCAtIHNpemUuaGVpZ2h0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIEhlbHBlciBt
ZXRob2QgZm9yIGNhbWVyYSBjbGFzc2VzLgotICBzdGF0aWMgdm9pZCByZXBvcnRDYW1lcmFSZXNv
bHV0aW9uKEhpc3RvZ3JhbSBoaXN0b2dyYW0sIFNpemUgcmVzb2x1dGlvbikgewotICAgIGludCBp
bmRleCA9IENPTU1PTl9SRVNPTFVUSU9OUy5pbmRleE9mKHJlc29sdXRpb24pOwotICAgIC8vIDAg
aXMgcmVzZXJ2ZWQgZm9yIHVua25vd24gcmVzb2x1dGlvbiwgc28gYWRkIDEuCi0gICAgLy8gaW5k
ZXhPZiByZXR1cm5zIC0xIGZvciB1bmtub3duIHJlc29sdXRpb25zIHNvIGl0IGJlY29tZXMgMCBh
dXRvbWF0aWNhbGx5LgotICAgIGhpc3RvZ3JhbS5hZGRTYW1wbGUoaW5kZXggKyAxKTsKLSAgfQot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdG9yLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdG9yLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRvci5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2Fw
dHVyZUZvcm1hdDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNl
IENhbWVyYUVudW1lcmF0b3IgewotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGV2aWNlTmFtZXMoKTsK
LSAgcHVibGljIGJvb2xlYW4gaXNGcm9udEZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSk7Ci0gIHB1
YmxpYyBib29sZWFuIGlzQmFja0ZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSk7Ci0gIHB1YmxpYyBM
aXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoU3RyaW5nIGRldmljZU5hbWUp
OwotCi0gIHB1YmxpYyBDYW1lcmFWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAg
U3RyaW5nIGRldmljZU5hbWUsIENhbWVyYVZpZGVvQ2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxl
ciBldmVudHNIYW5kbGVyKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhU2Vzc2lv
bi5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhU2Vzc2lvbi5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYVNlc3Npb24uamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotcHVibGljIGludGVyZmFjZSBDYW1lcmFTZXNzaW9uIHsKLSAg
Ly8gQ2FsbGJhY2tzIGFyZSBmaXJlZCBvbiB0aGUgY2FtZXJhIHRocmVhZC4KLSAgcHVibGljIGlu
dGVyZmFjZSBDcmVhdGVTZXNzaW9uQ2FsbGJhY2sgewotICAgIHZvaWQgb25Eb25lKENhbWVyYVNl
c3Npb24gc2Vzc2lvbik7Ci0gICAgdm9pZCBvbkZhaWx1cmUoU3RyaW5nIGVycm9yKTsKLSAgfQot
Ci0gIC8vIEV2ZW50cyBhcmUgZmlyZWQgb24gdGhlIGNhbWVyYSB0aHJlYWQuCi0gIHB1YmxpYyBp
bnRlcmZhY2UgRXZlbnRzIHsKLSAgICB2b2lkIG9uQ2FtZXJhT3BlbmluZygpOwotICAgIHZvaWQg
b25DYW1lcmFFcnJvcihDYW1lcmFTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBlcnJvcik7Ci0gICAg
dm9pZCBvbkNhbWVyYURpc2Nvbm5lY3RlZChDYW1lcmFTZXNzaW9uIHNlc3Npb24pOwotICAgIHZv
aWQgb25DYW1lcmFDbG9zZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKTsKLSAgICB2b2lkIG9uQnl0
ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgYnl0
ZVtdIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVz
dGFtcCk7Ci0gICAgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYVNlc3Npb24gc2Vz
c2lvbiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb2VzVGV4dHVyZUlkLAotICAgICAgICBm
bG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCk7Ci0g
IH0KLQotICAvKioKLSAgICogU3RvcHMgdGhlIGNhcHR1cmUuIFdhaXRzIHVudGlsIG5vIG1vcmUg
Y2FsbHMgdG8gY2FwdHVyZSBvYnNlcnZlciB3aWxsIGJlIG1hZGUuCi0gICAqIElmIHdhaXRDYW1l
cmFTdG9wIGlzIHRydWUsIGFsc28gd2FpdHMgZm9yIHRoZSBjYW1lcmEgdG8gc3RvcC4KLSAgICov
Ci0gIHZvaWQgc3RvcCgpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0Nh
cHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0Nh
cHR1cmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJh
VmlkZW9DYXB0dXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBCYXNlIGludGVy
ZmFjZSBmb3IgY2FtZXJhMSBhbmQgY2FtZXJhMiBpbXBsZW1lbnRhdGlvbnMuIEV4dGVuZHMgVmlk
ZW9DYXB0dXJlciB3aXRoIGEKLSAqIHN3aXRjaENhbWVyYSgpIGZ1bmN0aW9uLiBBbHNvIHByb3Zp
ZGVzIHN1YmludGVyZmFjZXMgZm9yIGhhbmRsaW5nIGNhbWVyYSBldmVudHMsIGFuZCBhIGhlbHBl
cgotICogY2xhc3MgZm9yIGRldGVjdGluZyBjYW1lcmEgZnJlZXplcy4KLSAqLwotcHVibGljIGlu
dGVyZmFjZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGV4dGVuZHMgVmlkZW9DYXB0dXJlciB7Ci0gIC8q
KgotICAgKiBDYW1lcmEgZXZlbnRzIGhhbmRsZXIgLSBjYW4gYmUgdXNlZCB0byBiZSBub3RpZmVk
IGFib3V0IGNhbWVyYSBldmVudHMuIFRoZSBjYWxsYmFja3MgYXJlCi0gICAqIGV4ZWN1dGVkIGZy
b20gYW4gYXJiaXRyYXJ5IHRocmVhZC4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJh
RXZlbnRzSGFuZGxlciB7Ci0gICAgLy8gQ2FtZXJhIGVycm9yIGhhbmRsZXIgLSBpbnZva2VkIHdo
ZW4gY2FtZXJhIGNhbiBub3QgYmUgb3BlbmVkCi0gICAgLy8gb3IgYW55IGNhbWVyYSBleGNlcHRp
b24gaGFwcGVucyBvbiBjYW1lcmEgdGhyZWFkLgotICAgIHZvaWQgb25DYW1lcmFFcnJvcihTdHJp
bmcgZXJyb3JEZXNjcmlwdGlvbik7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBjYW1lcmEgaXMgZGlz
Y29ubmVjdGVkLgotICAgIHZvaWQgb25DYW1lcmFEaXNjb25uZWN0ZWQoKTsKLQotICAgIC8vIElu
dm9rZWQgd2hlbiBjYW1lcmEgc3RvcHMgcmVjZWl2aW5nIGZyYW1lcy4KLSAgICB2b2lkIG9uQ2Ft
ZXJhRnJlZXplZChTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbik7Ci0KLSAgICAvLyBDYWxsYmFjayBp
bnZva2VkIHdoZW4gY2FtZXJhIGlzIG9wZW5pbmcuCi0gICAgdm9pZCBvbkNhbWVyYU9wZW5pbmco
U3RyaW5nIGNhbWVyYU5hbWUpOwotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGZpcnN0
IGNhbWVyYSBmcmFtZSBpcyBhdmFpbGFibGUgYWZ0ZXIgY2FtZXJhIGlzIHN0YXJ0ZWQuCi0gICAg
dm9pZCBvbkZpcnN0RnJhbWVBdmFpbGFibGUoKTsKLQotICAgIC8vIENhbGxiYWNrIGludm9rZWQg
d2hlbiBjYW1lcmEgaXMgY2xvc2VkLgotICAgIHZvaWQgb25DYW1lcmFDbG9zZWQoKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBDYW1lcmEgc3dpdGNoIGhhbmRsZXIgLSBvbmUgb2YgdGhlc2UgZnVuY3Rp
b25zIGFyZSBpbnZva2VkIHdpdGggdGhlIHJlc3VsdCBvZiBzd2l0Y2hDYW1lcmEoKS4KLSAgICog
VGhlIGNhbGxiYWNrIG1heSBiZSBjYWxsZWQgb24gYW4gYXJiaXRyYXJ5IHRocmVhZC4KLSAgICov
Ci0gIHB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJhU3dpdGNoSGFuZGxlciB7Ci0gICAgLy8gSW52b2tl
ZCBvbiBzdWNjZXNzLiB8aXNGcm9udENhbWVyYXwgaXMgdHJ1ZSBpZiB0aGUgbmV3IGNhbWVyYSBp
cyBmcm9udCBmYWNpbmcuCi0gICAgdm9pZCBvbkNhbWVyYVN3aXRjaERvbmUoYm9vbGVhbiBpc0Zy
b250Q2FtZXJhKTsKLQotICAgIC8vIEludm9rZWQgb24gZmFpbHVyZSwgZS5nLiBjYW1lcmEgaXMg
c3RvcHBlZCBvciBvbmx5IG9uZSBjYW1lcmEgYXZhaWxhYmxlLgotICAgIHZvaWQgb25DYW1lcmFT
d2l0Y2hFcnJvcihTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICog
U3dpdGNoIGNhbWVyYSB0byB0aGUgbmV4dCB2YWxpZCBjYW1lcmEgaWQuIFRoaXMgY2FuIG9ubHkg
YmUgY2FsbGVkIHdoaWxlIHRoZSBjYW1lcmEgaXMgcnVubmluZy4KLSAgICogVGhpcyBmdW5jdGlv
biBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KLSAgICovCi0gIHZvaWQgc3dpdGNoQ2Ft
ZXJhKENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxlcik7Ci0KLSAgLyoqCi0g
ICAqIEhlbHBlciBjbGFzcyB0byBsb2cgZnJhbWVyYXRlIGFuZCBkZXRlY3QgaWYgdGhlIGNhbWVy
YSBmcmVlemVzLiBJdCB3aWxsIHJ1biBwZXJpb2RpYyBjYWxsYmFja3MKLSAgICogb24gdGhlIFN1
cmZhY2VUZXh0dXJlSGVscGVyIHRocmVhZCBwYXNzZWQgaW4gdGhlIGN0b3IsIGFuZCBzaG91bGQg
b25seSBiZSBvcGVyYXRlZCBmcm9tIHRoYXQKLSAgICogdGhyZWFkLgotICAgKi8KLSAgcHVibGlj
IHN0YXRpYyBjbGFzcyBDYW1lcmFTdGF0aXN0aWNzIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRp
YyBTdHJpbmcgVEFHID0gIkNhbWVyYVN0YXRpc3RpY3MiOwotICAgIHByaXZhdGUgZmluYWwgc3Rh
dGljIGludCBDQU1FUkFfT0JTRVJWRVJfUEVSSU9EX01TID0gMjAwMDsKLSAgICBwcml2YXRlIGZp
bmFsIHN0YXRpYyBpbnQgQ0FNRVJBX0ZSRUVaRV9SRVBPUlRfVElNT1VUX01TID0gNDAwMDsKLQot
ICAgIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxw
ZXI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXI7
Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVDb3VudDsKLSAgICBwcml2YXRlIGludCBmcmVlemVQZXJp
b2RDb3VudDsKLSAgICAvLyBDYW1lcmEgb2JzZXJ2ZXIgLSBtb25pdG9ycyBjYW1lcmEgZnJhbWVy
YXRlLiBPYnNlcnZlciBpcyBleGVjdXRlZCBvbiBjYW1lcmEgdGhyZWFkLgotICAgIHByaXZhdGUg
ZmluYWwgUnVubmFibGUgY2FtZXJhT2JzZXJ2ZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZmluYWwgaW50IGNh
bWVyYUZwcyA9IE1hdGgucm91bmQoZnJhbWVDb3VudCAqIDEwMDAuMGYgLyBDQU1FUkFfT0JTRVJW
RVJfUEVSSU9EX01TKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBmcHM6ICIgKyBj
YW1lcmFGcHMgKyAiLiIpOwotICAgICAgICBpZiAoZnJhbWVDb3VudCA9PSAwKSB7Ci0gICAgICAg
ICAgKytmcmVlemVQZXJpb2RDb3VudDsKLSAgICAgICAgICBpZiAoQ0FNRVJBX09CU0VSVkVSX1BF
UklPRF9NUyAqIGZyZWV6ZVBlcmlvZENvdW50ID49IENBTUVSQV9GUkVFWkVfUkVQT1JUX1RJTU9V
VF9NUwotICAgICAgICAgICAgICAmJiBldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAg
ICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgZnJlZXplZC4iKTsKLSAgICAgICAgICAgIGlmIChz
dXJmYWNlVGV4dHVyZUhlbHBlci5pc1RleHR1cmVJblVzZSgpKSB7Ci0gICAgICAgICAgICAgIC8v
IFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHdlIGFyZSBjYXB0dXJpbmcgdG8gdGV4dHVyZXMuCi0g
ICAgICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFGcmVlemVkKCJDYW1lcmEgZmFpbHVy
ZS4gQ2xpZW50IG11c3QgcmV0dXJuIHZpZGVvIGJ1ZmZlcnMuIik7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRnJlZXplZCgiQ2FtZXJh
IGZhaWx1cmUuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZyZWV6ZVBlcmlvZENvdW50ID0gMDsK
LSAgICAgICAgfQotICAgICAgICBmcmFtZUNvdW50ID0gMDsKLSAgICAgICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnBvc3REZWxheWVkKHRoaXMsIENBTUVSQV9PQlNFUlZFUl9Q
RVJJT0RfTVMpOwotICAgICAgfQotICAgIH07Ci0KLSAgICBwdWJsaWMgQ2FtZXJhU3RhdGlzdGlj
cygKLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENh
bWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgICAgaWYgKHN1cmZhY2VUZXh0
dXJlSGVscGVyID09IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigiU3VyZmFjZVRleHR1cmVIZWxwZXIgaXMgbnVsbCIpOwotICAgICAgfQotICAgICAg
dGhpcy5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAgICAg
dGhpcy5ldmVudHNIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjsKLSAgICAgIHRoaXMuZnJhbWVDb3Vu
dCA9IDA7Ci0gICAgICB0aGlzLmZyZWV6ZVBlcmlvZENvdW50ID0gMDsKLSAgICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKS5wb3N0RGVsYXllZChjYW1lcmFPYnNlcnZlciwgQ0FN
RVJBX09CU0VSVkVSX1BFUklPRF9NUyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNr
VGhyZWFkKCkgewotICAgICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0gc3VyZmFjZVRl
eHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZCIpOwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEZyYW1lKCkgewotICAgICAgY2hlY2tU
aHJlYWQoKTsKLSAgICAgICsrZnJhbWVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBy
ZWxlYXNlKCkgewotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnJlbW92
ZUNhbGxiYWNrcyhjYW1lcmFPYnNlcnZlcik7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0RhdGFDaGFubmVsLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9EYXRhQ2hhbm5lbC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0RhdGFDaGFubmVsLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0
ZUJ1ZmZlcjsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgRGF0YUNoYW5uZWxJbnRlcmZh
Y2UuICovCi1wdWJsaWMgY2xhc3MgRGF0YUNoYW5uZWwgewotICAvKiogSmF2YSB3cmFwcGVyIGZv
ciBXZWJJREwgUlRDRGF0YUNoYW5uZWwuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5pdCB7
Ci0gICAgcHVibGljIGJvb2xlYW4gb3JkZXJlZCA9IHRydWU7Ci0gICAgLy8gT3B0aW9uYWwgdW5z
aWduZWQgc2hvcnQgaW4gV2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmllZC4KLSAgICBwdWJsaWMg
aW50IG1heFJldHJhbnNtaXRUaW1lTXMgPSAtMTsKLSAgICAvLyBPcHRpb25hbCB1bnNpZ25lZCBz
aG9ydCBpbiBXZWJJREwsIC0xIG1lYW5zIHVuc3BlY2lmaWVkLgotICAgIHB1YmxpYyBpbnQgbWF4
UmV0cmFuc21pdHMgPSAtMTsKLSAgICBwdWJsaWMgU3RyaW5nIHByb3RvY29sID0gIiI7Ci0gICAg
cHVibGljIGJvb2xlYW4gbmVnb3RpYXRlZCA9IGZhbHNlOwotICAgIC8vIE9wdGlvbmFsIHVuc2ln
bmVkIHNob3J0IGluIFdlYklETCwgLTEgbWVhbnMgdW5zcGVjaWZpZWQuCi0gICAgcHVibGljIGlu
dCBpZCA9IC0xOwotCi0gICAgcHVibGljIEluaXQoKSB7fQotCi0gICAgLy8gQ2FsbGVkIG9ubHkg
YnkgbmF0aXZlIGNvZGUuCi0gICAgcHJpdmF0ZSBJbml0KGJvb2xlYW4gb3JkZXJlZCwgaW50IG1h
eFJldHJhbnNtaXRUaW1lTXMsIGludCBtYXhSZXRyYW5zbWl0cywgU3RyaW5nIHByb3RvY29sLAot
ICAgICAgICBib29sZWFuIG5lZ290aWF0ZWQsIGludCBpZCkgewotICAgICAgdGhpcy5vcmRlcmVk
ID0gb3JkZXJlZDsKLSAgICAgIHRoaXMubWF4UmV0cmFuc21pdFRpbWVNcyA9IG1heFJldHJhbnNt
aXRUaW1lTXM7Ci0gICAgICB0aGlzLm1heFJldHJhbnNtaXRzID0gbWF4UmV0cmFuc21pdHM7Ci0g
ICAgICB0aGlzLnByb3RvY29sID0gcHJvdG9jb2w7Ci0gICAgICB0aGlzLm5lZ290aWF0ZWQgPSBu
ZWdvdGlhdGVkOwotICAgICAgdGhpcy5pZCA9IGlkOwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZh
IHZlcnNpb24gb2YgQysrIERhdGFCdWZmZXIuICBUaGUgYXRvbSBvZiBkYXRhIGluIGEgRGF0YUNo
YW5uZWwuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVmZmVyIHsKLSAgICAvKiogVGhlIHVu
ZGVybHlpbmcgZGF0YS4gKi8KLSAgICBwdWJsaWMgZmluYWwgQnl0ZUJ1ZmZlciBkYXRhOwotCi0g
ICAgLyoqCi0gICAgICogSW5kaWNhdGVzIHdoZXRoZXIgfGRhdGF8IGNvbnRhaW5zIFVURi04IHRl
eHQgb3IgImJpbmFyeSBkYXRhIgotICAgICAqIChpLmUuIGFueXRoaW5nIGVsc2UpLgotICAgICAq
LwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGJpbmFyeTsKLQotICAgIHB1YmxpYyBCdWZmZXIo
Qnl0ZUJ1ZmZlciBkYXRhLCBib29sZWFuIGJpbmFyeSkgewotICAgICAgdGhpcy5kYXRhID0gZGF0
YTsKLSAgICAgIHRoaXMuYmluYXJ5ID0gYmluYXJ5OwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZh
IHZlcnNpb24gb2YgQysrIERhdGFDaGFubmVsT2JzZXJ2ZXIuICovCi0gIHB1YmxpYyBpbnRlcmZh
Y2UgT2JzZXJ2ZXIgewotICAgIC8qKiBUaGUgZGF0YSBjaGFubmVsJ3MgYnVmZmVyZWRBbW91bnQg
aGFzIGNoYW5nZWQuICovCi0gICAgcHVibGljIHZvaWQgb25CdWZmZXJlZEFtb3VudENoYW5nZShs
b25nIHByZXZpb3VzQW1vdW50KTsKLSAgICAvKiogVGhlIGRhdGEgY2hhbm5lbCBzdGF0ZSBoYXMg
Y2hhbmdlZC4gKi8KLSAgICBwdWJsaWMgdm9pZCBvblN0YXRlQ2hhbmdlKCk7Ci0gICAgLyoqCi0g
ICAgICogQSBkYXRhIGJ1ZmZlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLiAgTk9URTogfGJ1
ZmZlci5kYXRhfCB3aWxsIGJlCi0gICAgICogZnJlZWQgb25jZSB0aGlzIGZ1bmN0aW9uIHJldHVy
bnMgc28gY2FsbGVycyB3aG8gd2FudCB0byB1c2UgdGhlIGRhdGEKLSAgICAgKiBhc3luY2hyb25v
dXNseSBtdXN0IG1ha2Ugc3VyZSB0byBjb3B5IGl0IGZpcnN0LgotICAgICAqLwotICAgIHB1Ymxp
YyB2b2lkIG9uTWVzc2FnZShCdWZmZXIgYnVmZmVyKTsKLSAgfQotCi0gIC8qKiBLZWVwIGluIHN5
bmMgd2l0aCBEYXRhQ2hhbm5lbEludGVyZmFjZTo6RGF0YVN0YXRlLiAqLwotICBwdWJsaWMgZW51
bSBTdGF0ZSB7IENPTk5FQ1RJTkcsIE9QRU4sIENMT1NJTkcsIENMT1NFRCB9Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBsb25nIG5hdGl2ZURhdGFDaGFubmVsOwotICBwcml2YXRlIGxvbmcgbmF0aXZlT2Jz
ZXJ2ZXI7Ci0KLSAgcHVibGljIERhdGFDaGFubmVsKGxvbmcgbmF0aXZlRGF0YUNoYW5uZWwpIHsK
LSAgICB0aGlzLm5hdGl2ZURhdGFDaGFubmVsID0gbmF0aXZlRGF0YUNoYW5uZWw7Ci0gIH0KLQot
ICAvKiogUmVnaXN0ZXIgfG9ic2VydmVyfCwgcmVwbGFjaW5nIGFueSBwcmV2aW91c2x5LXJlZ2lz
dGVyZWQgb2JzZXJ2ZXIuICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2
ZXIgb2JzZXJ2ZXIpIHsKLSAgICBpZiAobmF0aXZlT2JzZXJ2ZXIgIT0gMCkgewotICAgICAgdW5y
ZWdpc3Rlck9ic2VydmVyTmF0aXZlKG5hdGl2ZU9ic2VydmVyKTsKLSAgICB9Ci0gICAgbmF0aXZl
T2JzZXJ2ZXIgPSByZWdpc3Rlck9ic2VydmVyTmF0aXZlKG9ic2VydmVyKTsKLSAgfQotICBwcml2
YXRlIG5hdGl2ZSBsb25nIHJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUoT2JzZXJ2ZXIgb2JzZXJ2ZXIp
OwotCi0gIC8qKiBVbnJlZ2lzdGVyIHRoZSAob25seSkgb2JzZXJ2ZXIuICovCi0gIHB1YmxpYyB2
b2lkIHVucmVnaXN0ZXJPYnNlcnZlcigpIHsKLSAgICB1bnJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUo
bmF0aXZlT2JzZXJ2ZXIpOwotICB9Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgdW5yZWdpc3Rlck9i
c2VydmVyTmF0aXZlKGxvbmcgbmF0aXZlT2JzZXJ2ZXIpOwotCi0gIHB1YmxpYyBuYXRpdmUgU3Ry
aW5nIGxhYmVsKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBpbnQgaWQoKTsKLQotICBwdWJsaWMgbmF0
aXZlIFN0YXRlIHN0YXRlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5
dGVzIG9mIGFwcGxpY2F0aW9uIGRhdGEgKFVURi04IHRleHQgYW5kIGJpbmFyeSBkYXRhKQotICAg
KiB0aGF0IGhhdmUgYmVlbiBxdWV1ZWQgdXNpbmcgU2VuZEJ1ZmZlciBidXQgaGF2ZSBub3QgeWV0
IGJlZW4gdHJhbnNtaXR0ZWQKLSAgICogdG8gdGhlIG5ldHdvcmsuCi0gICAqLwotICBwdWJsaWMg
bmF0aXZlIGxvbmcgYnVmZmVyZWRBbW91bnQoKTsKLQotICAvKiogQ2xvc2UgdGhlIGNoYW5uZWwu
ICovCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBjbG9zZSgpOwotCi0gIC8qKiBTZW5kIHxkYXRhfCB0
byB0aGUgcmVtb3RlIHBlZXI7IHJldHVybiBzdWNjZXNzLiAqLwotICBwdWJsaWMgYm9vbGVhbiBz
ZW5kKEJ1ZmZlciBidWZmZXIpIHsKLSAgICAvLyBUT0RPKGZpc2NobWFuKTogdGhpcyBjb3VsZCBi
ZSBjbGV2ZXJlciBhYm91dCBhdm9pZGluZyBjb3BpZXMgaWYgdGhlCi0gICAgLy8gQnl0ZUJ1ZmZl
ciBpcyBkaXJlY3QgYW5kL29yIGlzIGJhY2tlZCBieSBhbiBhcnJheS4KLSAgICBieXRlW10gZGF0
YSA9IG5ldyBieXRlW2J1ZmZlci5kYXRhLnJlbWFpbmluZygpXTsKLSAgICBidWZmZXIuZGF0YS5n
ZXQoZGF0YSk7Ci0gICAgcmV0dXJuIHNlbmROYXRpdmUoZGF0YSwgYnVmZmVyLmJpbmFyeSk7Ci0g
IH0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBzZW5kTmF0aXZlKGJ5dGVbXSBkYXRhLCBib29s
ZWFuIGJpbmFyeSk7Ci0KLSAgLyoqIERpc3Bvc2Ugb2YgbmF0aXZlIHJlc291cmNlcyBhdHRhY2hl
ZCB0byB0aGlzIGNoYW5uZWwuICovCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBkaXNwb3NlKCk7Ci19
OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlLmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvRWdsQmFzZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTI4ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
Z3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci0K
LWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTA7Ci0KLS8qKgotICog
SG9sZHMgRUdMIHN0YXRlIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIGhhbmRsaW5nIGFuIGVnbCAx
LjAgRUdMQ29udGV4dCwgYW4gRUdMRGlzcGxheSwKLSAqIGFuZCBhbiBFR0xTdXJmYWNlLgotICov
Ci1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgRWdsQmFzZSB7Ci0gIC8vIEVHTCB3cmFwcGVyIGZvciBh
biBhY3R1YWwgRUdMQ29udGV4dC4KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250ZXh0IHt9Ci0K
LSAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uLCBFR0wgY2FuIGJlIHVzZWQgZnJv
bSBtdWx0aXBsZSB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUgaWYgZWFjaAotICAvLyB0aHJlYWQg
aGFzIGl0cyBvd24gRUdMQ29udGV4dCwgYnV0IGluIHByYWN0aWNlIGl0IGRlYWRsb2NrcyBvbiBz
b21lIGRldmljZXMgd2hlbiBkb2luZyB0aGlzLgotICAvLyBUaGVyZWZvcmUsIHN5bmNocm9uaXpl
IG9uIHRoaXMgZ2xvYmFsIGxvY2sgYmVmb3JlIGNhbGxpbmcgZGFuZ2Vyb3VzIEVHTCBmdW5jdGlv
bnMgdGhhdCBtaWdodAotICAvLyBkZWFkbG9jay4gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5v
cmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD01NzAyIGZvciBtb3JlIGluZm8uCi0gIHB1Ymxp
YyBzdGF0aWMgZmluYWwgT2JqZWN0IGxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0KLSAgLy8gVGhlc2Ug
Y29uc3RhbnRzIGFyZSB0YWtlbiBmcm9tIEVHTDE0LkVHTF9PUEVOR0xfRVMyX0JJVCBhbmQgRUdM
MTQuRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04uCi0gIC8vIGh0dHBzOi8vYW5kcm9pZC5nb29n
bGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9vcGVuZ2wvamF2
YS9hbmRyb2lkL29wZW5nbC9FR0wxNC5qYXZhCi0gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBob3cg
R2xTdXJmYWNlVmlldyBkb2VzOgotICAvLyBodHRwOi8vZ3JlcGNvZGUuY29tL2ZpbGUvcmVwb3Np
dG9yeS5ncmVwY29kZS5jb20vamF2YS9leHQvY29tLmdvb2dsZS5hbmRyb2lkL2FuZHJvaWQvNS4x
LjFfcjEvYW5kcm9pZC9vcGVuZ2wvR0xTdXJmYWNlVmlldy5qYXZhIzc2MAotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgRUdMX09QRU5HTF9FUzJfQklUID0gNDsKLSAgLy8gQW5kcm9pZC1zcGVj
aWZpYyBleHRlbnNpb24uCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFR0xfUkVDT1JEQUJM
RV9BTkRST0lEID0gMHgzMTQyOwotCi0gIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnRbXSBDT05GSUdfUExBSU4gPSB7Ci0gICAgRUdMMTAuRUdMX1JFRF9TSVpF
LCA4LAotICAgIEVHTDEwLkVHTF9HUkVFTl9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9CTFVFX1NJ
WkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklU
LAotICAgIEVHTDEwLkVHTF9OT05FCi0gIH07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10g
Q09ORklHX1JHQkEgPSB7Ci0gICAgRUdMMTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTDEwLkVH
TF9HUkVFTl9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMMTAu
RUdMX0FMUEhBX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09Q
RU5HTF9FUzJfQklULAotICAgIEVHTDEwLkVHTF9OT05FCi0gIH07Ci0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgaW50W10gQ09ORklHX1BJWEVMX0JVRkZFUiA9IHsKLSAgICBFR0wxMC5FR0xfUkVEX1NJ
WkUsIDgsCi0gICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0JMVUVf
U0laRSwgOCwKLSAgICBFR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9C
SVQsCi0gICAgRUdMMTAuRUdMX1NVUkZBQ0VfVFlQRSwgRUdMMTAuRUdMX1BCVUZGRVJfQklULAot
ICAgIEVHTDEwLkVHTF9OT05FCi0gIH07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09O
RklHX1BJWEVMX1JHQkFfQlVGRkVSID0gewotICAgIEVHTDEwLkVHTF9SRURfU0laRSwgOCwKLSAg
ICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQkxVRV9TSVpFLCA4LAot
ICAgIEVHTDEwLkVHTF9BTFBIQV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZ
UEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICBFR0wxMC5FR0xfU1VSRkFDRV9UWVBFLCBFR0wx
MC5FR0xfUEJVRkZFUl9CSVQsCi0gICAgRUdMMTAuRUdMX05PTkUKLSAgfTsKLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBpbnRbXSBDT05GSUdfUkVDT1JEQUJMRSA9IHsKLSAgICBFR0wxMC5FR0xfUkVE
X1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0JM
VUVfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VT
Ml9CSVQsCi0gICAgRUdMX1JFQ09SREFCTEVfQU5EUk9JRCwgMSwKLSAgICBFR0wxMC5FR0xfTk9O
RQotICB9OwotICAvLyBjbGFuZy1mb3JtYXQgb24KLQotICAvLyBDcmVhdGUgYSBuZXcgY29udGV4
dCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnIGF0dHJpYnV0ZXMsIHNoYXJpbmcgZGF0YSB3aXRo
IHNoYXJlZENvbnRleHQuCi0gIC8vIHxzaGFyZWRDb250ZXh0fCBjYW4gYmUgbnVsbC4KLSAgcHVi
bGljIHN0YXRpYyBFZ2xCYXNlIGNyZWF0ZShDb250ZXh0IHNoYXJlZENvbnRleHQsIGludFtdIGNv
bmZpZ0F0dHJpYnV0ZXMpIHsKLSAgICByZXR1cm4gKEVnbEJhc2UxNC5pc0VHTDE0U3VwcG9ydGVk
KCkKLSAgICAgICAgICAgICAgICYmIChzaGFyZWRDb250ZXh0ID09IG51bGwgfHwgc2hhcmVkQ29u
dGV4dCBpbnN0YW5jZW9mIEVnbEJhc2UxNC5Db250ZXh0KSkKLSAgICAgICAgPyBuZXcgRWdsQmFz
ZTE0KChFZ2xCYXNlMTQuQ29udGV4dCkgc2hhcmVkQ29udGV4dCwgY29uZmlnQXR0cmlidXRlcykK
LSAgICAgICAgOiBuZXcgRWdsQmFzZTEwKChFZ2xCYXNlMTAuQ29udGV4dCkgc2hhcmVkQ29udGV4
dCwgY29uZmlnQXR0cmlidXRlcyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UgY3Jl
YXRlKCkgewotICAgIHJldHVybiBjcmVhdGUobnVsbCwgQ09ORklHX1BMQUlOKTsKLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgRWdsQmFzZSBjcmVhdGUoQ29udGV4dCBzaGFyZWRDb250ZXh0KSB7Ci0g
ICAgcmV0dXJuIGNyZWF0ZShzaGFyZWRDb250ZXh0LCBDT05GSUdfUExBSU4pOwotICB9Ci0KLSAg
cHVibGljIGFic3RyYWN0IHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpOwotCi0g
IC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhlIEFuZHJvaWQgU3VyZmFjZVRleHR1cmUuCi0g
IHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZVRleHR1cmUgc3VyZmFj
ZVRleHR1cmUpOwotCi0gIC8vIENyZWF0ZSBkdW1teSAxeDEgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ug
c28gdGhlIGNvbnRleHQgY2FuIGJlIG1hZGUgY3VycmVudC4KLSAgcHVibGljIGFic3RyYWN0IHZv
aWQgY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lk
IGNyZWF0ZVBidWZmZXJTdXJmYWNlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgcHVibGlj
IGFic3RyYWN0IENvbnRleHQgZ2V0RWdsQmFzZUNvbnRleHQoKTsKLQotICBwdWJsaWMgYWJzdHJh
Y3QgYm9vbGVhbiBoYXNTdXJmYWNlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IGludCBzdXJmYWNl
V2lkdGgoKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgaW50IHN1cmZhY2VIZWlnaHQoKTsKLQotICBw
dWJsaWMgYWJzdHJhY3Qgdm9pZCByZWxlYXNlU3VyZmFjZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFj
dCB2b2lkIHJlbGVhc2UoKTsKLQotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBtYWtlQ3VycmVudCgp
OwotCi0gIC8vIERldGFjaCB0aGUgY3VycmVudCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4g
YmUgbWFkZSBjdXJyZW50IG9uIGFub3RoZXIgdGhyZWFkLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9p
ZCBkZXRhY2hDdXJyZW50KCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgc3dhcEJ1ZmZlcnMo
KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTAuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTAuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMwNyAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmdyYXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7
Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lk
LnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLQotaW1w
b3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMDsKLWltcG9ydCBqYXZheC5t
aWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRp
dGlvbi5raHJvbm9zLmVnbC5FR0xDb250ZXh0OwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5r
aHJvbm9zLmVnbC5FR0xEaXNwbGF5OwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9z
LmVnbC5FR0xTdXJmYWNlOwotCi0vKioKLSAqIEhvbGRzIEVHTCBzdGF0ZSBhbmQgdXRpbGl0eSBt
ZXRob2RzIGZvciBoYW5kbGluZyBhbiBlZ2wgMS4wIEVHTENvbnRleHQsIGFuIEVHTERpc3BsYXks
Ci0gKiBhbmQgYW4gRUdMU3VyZmFjZS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEVnbEJhc2Ux
MCBleHRlbmRzIEVnbEJhc2UgewotICAvLyBUaGlzIGNvbnN0YW50IGlzIHRha2VuIGZyb20gRUdM
MTQuRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04uCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiA9IDB4MzA5ODsKLQotICBwcml2YXRlIGZpbmFs
IEVHTDEwIGVnbDsKLSAgcHJpdmF0ZSBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gIHByaXZhdGUg
RUdMQ29uZmlnIGVnbENvbmZpZzsKLSAgcHJpdmF0ZSBFR0xEaXNwbGF5IGVnbERpc3BsYXk7Ci0g
IHByaXZhdGUgRUdMU3VyZmFjZSBlZ2xTdXJmYWNlID0gRUdMMTAuRUdMX05PX1NVUkZBQ0U7Ci0K
LSAgLy8gRUdMIHdyYXBwZXIgZm9yIGFuIGFjdHVhbCBFR0xDb250ZXh0LgotICBwdWJsaWMgc3Rh
dGljIGNsYXNzIENvbnRleHQgZXh0ZW5kcyBFZ2xCYXNlLkNvbnRleHQgewotICAgIHByaXZhdGUg
ZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0OwotCi0gICAgcHVibGljIENvbnRleHQoRUdMQ29u
dGV4dCBlZ2xDb250ZXh0KSB7Ci0gICAgICB0aGlzLmVnbENvbnRleHQgPSBlZ2xDb250ZXh0Owot
ICAgIH0KLSAgfQotCi0gIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmll
ZCBjb25maWcgdHlwZSwgc2hhcmluZyBkYXRhIHdpdGggc2hhcmVkQ29udGV4dC4KLSAgcHVibGlj
IEVnbEJhc2UxMChDb250ZXh0IHNoYXJlZENvbnRleHQsIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMp
IHsKLSAgICB0aGlzLmVnbCA9IChFR0wxMCkgRUdMQ29udGV4dC5nZXRFR0woKTsKLSAgICBlZ2xE
aXNwbGF5ID0gZ2V0RWdsRGlzcGxheSgpOwotICAgIGVnbENvbmZpZyA9IGdldEVnbENvbmZpZyhl
Z2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgICBlZ2xDb250ZXh0ID0gY3JlYXRlRWds
Q29udGV4dChzaGFyZWRDb250ZXh0LCBlZ2xEaXNwbGF5LCBlZ2xDb25maWcpOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB7
Ci0gICAgLyoqCi0gICAgICogV2UgaGF2ZSB0byB3cmFwIFN1cmZhY2UgaW4gYSBTdXJmYWNlSG9s
ZGVyIGJlY2F1c2UgZm9yIHNvbWUgcmVhc29uIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UKLSAgICAg
KiBjb3VsZG4ndCBhY3R1YWxseSB0YWtlIGEgU3VyZmFjZSBvYmplY3QgdW50aWwgQVBJIDE3LiBP
bGRlciB2ZXJzaW9ucyBmb3J0dW5hdGVseSBqdXN0IGNhbGwKLSAgICAgKiBTdXJmYWNlSG9sZGVy
LmdldFN1cmZhY2UoKSwgc28gd2UnbGwgZG8gdGhhdC4gTm8gb3RoZXIgbWV0aG9kcyBhcmUgcmVs
ZXZhbnQuCi0gICAgICovCi0gICAgY2xhc3MgRmFrZVN1cmZhY2VIb2xkZXIgaW1wbGVtZW50cyBT
dXJmYWNlSG9sZGVyIHsKLSAgICAgIHByaXZhdGUgZmluYWwgU3VyZmFjZSBzdXJmYWNlOwotCi0g
ICAgICBGYWtlU3VyZmFjZUhvbGRlcihTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICAgICAgdGhpcy5z
dXJmYWNlID0gc3VyZmFjZTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBhZGRDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykge30KLQotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCByZW1vdmVDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykg
e30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0aW5nKCkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIEBEZXByZWNhdGVkCi0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoaW50IGkpIHt9Ci0KLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0Rml4ZWRTaXplKGludCBpLCBpbnQg
aTIpIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0U2l6ZUZyb21M
YXlvdXQoKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldEZvcm1h
dChpbnQgaSkge30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXRLZWVw
U2NyZWVuT24oYm9vbGVhbiBiKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBD
YW52YXMgbG9ja0NhbnZhcygpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIENhbnZhcyBsb2NrQ2FudmFzKFJlY3QgcmVjdCkg
ewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCB1bmxvY2tDYW52YXNBbmRQb3N0KENhbnZhcyBjYW52YXMpIHt9Ci0KLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFJlY3QgZ2V0U3VyZmFjZUZyYW1lKCkgewotICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgU3VyZmFjZSBnZXRTdXJmYWNlKCkgewotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwobmV3IEZha2VTdXJmYWNlSG9s
ZGVyKHN1cmZhY2UpKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhlIEFu
ZHJvaWQgU3VyZmFjZVRleHR1cmUuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVT
dXJmYWNlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgY3JlYXRlU3VyZmFj
ZUludGVybmFsKHN1cmZhY2VUZXh0dXJlKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNl
IGZyb20gZWl0aGVyIGEgU3VyZmFjZUhvbGRlciBvciBhIFN1cmZhY2VUZXh0dXJlLgotICBwcml2
YXRlIHZvaWQgY3JlYXRlU3VyZmFjZUludGVybmFsKE9iamVjdCBuYXRpdmVXaW5kb3cpIHsKLSAg
ICBpZiAoIShuYXRpdmVXaW5kb3cgaW5zdGFuY2VvZiBTdXJmYWNlSG9sZGVyKSAmJiAhKG5hdGl2
ZVdpbmRvdyBpbnN0YW5jZW9mIFN1cmZhY2VUZXh0dXJlKSkgewotICAgICAgdGhyb3cgbmV3IEls
bGVnYWxTdGF0ZUV4Y2VwdGlvbigiSW5wdXQgbXVzdCBiZSBlaXRoZXIgYSBTdXJmYWNlSG9sZGVy
IG9yIFN1cmZhY2VUZXh0dXJlIik7Ci0gICAgfQotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwot
ICAgIGlmIChlZ2xTdXJmYWNlICE9IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQWxyZWFkeSBoYXMgYW4gRUdMU3VyZmFjZSIpOwotICAg
IH0KLSAgICBpbnRbXSBzdXJmYWNlQXR0cmlicyA9IHtFR0wxMC5FR0xfTk9ORX07Ci0gICAgZWds
U3VyZmFjZSA9IGVnbC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGVnbERpc3BsYXksIGVnbENvbmZp
ZywgbmF0aXZlV2luZG93LCBzdXJmYWNlQXR0cmlicyk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0g
RUdMMTAuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KAotICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHdpbmRvdyBzdXJmYWNlOiAweCIgKyBJbnRl
Z2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8g
Q3JlYXRlIGR1bW15IDF4MSBwaXhlbCBidWZmZXIgc3VyZmFjZSBzbyB0aGUgY29udGV4dCBjYW4g
YmUgbWFkZSBjdXJyZW50LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlRHVtbXlQ
YnVmZmVyU3VyZmFjZSgpIHsKLSAgICBjcmVhdGVQYnVmZmVyU3VyZmFjZSgxLCAxKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVQYnVmZmVyU3VyZmFjZShpbnQgd2lk
dGgsIGludCBoZWlnaHQpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWds
U3VyZmFjZSAhPSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRp
bWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2UiKTsKLSAgICB9Ci0gICAgaW50
W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTAuRUdMX1dJRFRILCB3aWR0aCwgRUdMMTAuRUdMX0hF
SUdIVCwgaGVpZ2h0LCBFR0wxMC5FR0xfTk9ORX07Ci0gICAgZWdsU3VyZmFjZSA9IGVnbC5lZ2xD
cmVhdGVQYnVmZmVyU3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJz
KTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgcGl4ZWwgYnVmZmVy
IHN1cmZhY2Ugd2l0aCBzaXplICIgKyB3aWR0aCArICJ4IgotICAgICAgICAgICsgaGVpZ2h0ICsg
IjogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgb3JnLndlYnJ0Yy5FZ2xCYXNlLkNvbnRleHQg
Z2V0RWdsQmFzZUNvbnRleHQoKSB7Ci0gICAgcmV0dXJuIG5ldyBFZ2xCYXNlMTAuQ29udGV4dChl
Z2xDb250ZXh0KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBoYXNTdXJm
YWNlKCkgewotICAgIHJldHVybiBlZ2xTdXJmYWNlICE9IEVHTDEwLkVHTF9OT19TVVJGQUNFOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZVdpZHRoKCkgewotICAgIGZp
bmFsIGludCB3aWR0aEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIGVnbC5lZ2xRdWVyeVN1cmZh
Y2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwgRUdMMTAuRUdMX1dJRFRILCB3aWR0aEFycmF5KTsK
LSAgICByZXR1cm4gd2lkdGhBcnJheVswXTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
aW50IHN1cmZhY2VIZWlnaHQoKSB7Ci0gICAgZmluYWwgaW50IGhlaWdodEFycmF5W10gPSBuZXcg
aW50WzFdOwotICAgIGVnbC5lZ2xRdWVyeVN1cmZhY2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwg
RUdMMTAuRUdMX0hFSUdIVCwgaGVpZ2h0QXJyYXkpOwotICAgIHJldHVybiBoZWlnaHRBcnJheVsw
XTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxlYXNlU3VyZmFjZSgpIHsK
LSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgZWds
LmVnbERlc3Ryb3lTdXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZhY2UpOwotICAgICAgZWdsU3Vy
ZmFjZSA9IEVHTDEwLkVHTF9OT19TVVJGQUNFOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBjaGVja0lzTm90UmVsZWFzZWQoKSB7Ci0gICAgaWYgKGVnbERpc3BsYXkgPT0gRUdMMTAuRUdM
X05PX0RJU1BMQVkgfHwgZWdsQ29udGV4dCA9PSBFR0wxMC5FR0xfTk9fQ09OVEVYVAotICAgICAg
ICB8fCBlZ2xDb25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oIlRoaXMgb2JqZWN0IGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0gICAgfQotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2Vk
KCk7Ci0gICAgcmVsZWFzZVN1cmZhY2UoKTsKLSAgICBkZXRhY2hDdXJyZW50KCk7Ci0gICAgZWds
LmVnbERlc3Ryb3lDb250ZXh0KGVnbERpc3BsYXksIGVnbENvbnRleHQpOwotICAgIGVnbC5lZ2xU
ZXJtaW5hdGUoZWdsRGlzcGxheSk7Ci0gICAgZWdsQ29udGV4dCA9IEVHTDEwLkVHTF9OT19DT05U
RVhUOwotICAgIGVnbERpc3BsYXkgPSBFR0wxMC5FR0xfTk9fRElTUExBWTsKLSAgICBlZ2xDb25m
aWcgPSBudWxsOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG1ha2VDdXJyZW50
KCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlID09IEVH
TDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigi
Tm8gRUdMU3VyZmFjZSAtIGNhbid0IG1ha2UgY3VycmVudCIpOwotICAgIH0KLSAgICBzeW5jaHJv
bml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFlZ2wuZWdsTWFrZUN1cnJlbnQoZWds
RGlzcGxheSwgZWdsU3VyZmFjZSwgZWdsU3VyZmFjZSwgZWdsQ29udGV4dCkpIHsKLSAgICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiZWdsTWFrZUN1cnJlbnQg
ZmFpbGVkOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gRGV0YWNoIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0
LCBzbyB0aGF0IGl0IGNhbiBiZSBtYWRlIGN1cnJlbnQgb24gYW5vdGhlciB0aHJlYWQuCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBkZXRhY2hDdXJyZW50KCkgewotICAgIHN5bmNocm9uaXpl
ZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBpZiAoIWVnbC5lZ2xNYWtlQ3VycmVudCgKLSAgICAg
ICAgICAgICAgZWdsRGlzcGxheSwgRUdMMTAuRUdMX05PX1NVUkZBQ0UsIEVHTDEwLkVHTF9OT19T
VVJGQUNFLCBFR0wxMC5FR0xfTk9fQ09OVEVYVCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRp
bWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiZWdsRGV0YWNoQ3VycmVudCBmYWlsZWQ6IDB4IiAr
IEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3dhcEJ1ZmZlcnMoKSB7Ci0gICAg
Y2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05P
X1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBFR0xTdXJm
YWNlIC0gY2FuJ3Qgc3dhcCBidWZmZXJzIik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoRWds
QmFzZS5sb2NrKSB7Ci0gICAgICBlZ2wuZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwgZWdsU3Vy
ZmFjZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTERpc3BsYXksIG9yIGRpZSB0
cnlpbmcuCi0gIHByaXZhdGUgRUdMRGlzcGxheSBnZXRFZ2xEaXNwbGF5KCkgewotICAgIEVHTERp
c3BsYXkgZWdsRGlzcGxheSA9IGVnbC5lZ2xHZXREaXNwbGF5KEVHTDEwLkVHTF9ERUZBVUxUX0RJ
U1BMQVkpOwotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDEwLkVHTF9OT19ESVNQTEFZKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGdl
dCBFR0wxMCBkaXNwbGF5OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJv
cigpKSk7Ci0gICAgfQotICAgIGludFtdIHZlcnNpb24gPSBuZXcgaW50WzJdOwotICAgIGlmICgh
ZWdsLmVnbEluaXRpYWxpemUoZWdsRGlzcGxheSwgdmVyc2lvbikpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBFR0wx
MDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0K
LSAgICByZXR1cm4gZWdsRGlzcGxheTsKLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xDb25maWcs
IG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgRUdMQ29uZmlnIGdldEVnbENvbmZpZyhFR0xEaXNw
bGF5IGVnbERpc3BsYXksIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMpIHsKLSAgICBFR0xDb25maWdb
XSBjb25maWdzID0gbmV3IEVHTENvbmZpZ1sxXTsKLSAgICBpbnRbXSBudW1Db25maWdzID0gbmV3
IGludFsxXTsKLSAgICBpZiAoIWVnbC5lZ2xDaG9vc2VDb25maWcoZWdsRGlzcGxheSwgY29uZmln
QXR0cmlidXRlcywgY29uZmlncywgY29uZmlncy5sZW5ndGgsIG51bUNvbmZpZ3MpKSB7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiZWdsQ2hvb3NlQ29uZmln
IGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwot
ICAgIH0KLSAgICBpZiAobnVtQ29uZmlnc1swXSA8PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGZpbmQgYW55IG1hdGNoaW5nIEVHTCBjb25maWciKTsK
LSAgICB9Ci0gICAgZmluYWwgRUdMQ29uZmlnIGVnbENvbmZpZyA9IGNvbmZpZ3NbMF07Ci0gICAg
aWYgKGVnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiZWdsQ2hvb3NlQ29uZmlnIHJldHVybmVkIG51bGwiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVn
bENvbmZpZzsKLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlpbmcu
Ci0gIHByaXZhdGUgRUdMQ29udGV4dCBjcmVhdGVFZ2xDb250ZXh0KAotICAgICAgQ29udGV4dCBz
aGFyZWRDb250ZXh0LCBFR0xEaXNwbGF5IGVnbERpc3BsYXksIEVHTENvbmZpZyBlZ2xDb25maWcp
IHsKLSAgICBpZiAoc2hhcmVkQ29udGV4dCAhPSBudWxsICYmIHNoYXJlZENvbnRleHQuZWdsQ29u
dGV4dCA9PSBFR0wxMC5FR0xfTk9fQ09OVEVYVCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oIkludmFsaWQgc2hhcmVkQ29udGV4dCIpOwotICAgIH0KLSAgICBpbnRbXSBjb250
ZXh0QXR0cmlidXRlcyA9IHtFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMiwgRUdMMTAuRUdM
X05PTkV9OwotICAgIEVHTENvbnRleHQgcm9vdENvbnRleHQgPQotICAgICAgICBzaGFyZWRDb250
ZXh0ID09IG51bGwgPyBFR0wxMC5FR0xfTk9fQ09OVEVYVCA6IHNoYXJlZENvbnRleHQuZWdsQ29u
dGV4dDsKLSAgICBmaW5hbCBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gICAgc3luY2hyb25pemVk
IChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIGVnbENvbnRleHQgPSBlZ2wuZWdsQ3JlYXRlQ29udGV4
dChlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHJvb3RDb250ZXh0LCBjb250ZXh0QXR0cmlidXRlcyk7
Ci0gICAgfQotICAgIGlmIChlZ2xDb250ZXh0ID09IEVHTDEwLkVHTF9OT19DT05URVhUKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNy
ZWF0ZSBFR0wgY29udGV4dDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJy
b3IoKSkpOwotICAgIH0KLSAgICByZXR1cm4gZWdsQ29udGV4dDsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0VnbEJhc2UxNC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0VnbEJhc2UxNC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjY0ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3Rh
dGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsK
LWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0wxNDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0xD
b25maWc7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMQ29udGV4dDsKLWltcG9ydCBhbmRyb2lk
Lm9wZW5nbC5FR0xEaXNwbGF5OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTEV4dDsKLWltcG9y
dCBhbmRyb2lkLm9wZW5nbC5FR0xTdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNl
OwotCi0vKioKLSAqIEhvbGRzIEVHTCBzdGF0ZSBhbmQgdXRpbGl0eSBtZXRob2RzIGZvciBoYW5k
bGluZyBhbiBFR0wxNCBFR0xDb250ZXh0LCBhbiBFR0xEaXNwbGF5LAotICogYW5kIGFuIEVHTFN1
cmZhY2UuCi0gKi8KLUBUYXJnZXRBcGkoMTgpCi1wdWJsaWMgZmluYWwgY2xhc3MgRWdsQmFzZTE0
IGV4dGVuZHMgRWdsQmFzZSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAi
RWdsQmFzZTE0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVHTEV4dF9TREtfVkVSU0lP
TiA9IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMjsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IENVUlJFTlRfU0RLX1ZFUlNJT04gPSBhbmRyb2lkLm9zLkJ1
aWxkLlZFUlNJT04uU0RLX0lOVDsKLSAgcHJpdmF0ZSBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0g
IHByaXZhdGUgRUdMQ29uZmlnIGVnbENvbmZpZzsKLSAgcHJpdmF0ZSBFR0xEaXNwbGF5IGVnbERp
c3BsYXk7Ci0gIHByaXZhdGUgRUdMU3VyZmFjZSBlZ2xTdXJmYWNlID0gRUdMMTQuRUdMX05PX1NV
UkZBQ0U7Ci0KLSAgLy8gRUdMIDEuNCBpcyBzdXBwb3J0ZWQgZnJvbSBBUEkgMTcuIEJ1dCBFR0xF
eHQgdGhhdCBpcyB1c2VkIGZvciBzZXR0aW5nIHByZXNlbnRhdGlvbgotICAvLyB0aW1lIHN0YW1w
IG9uIGEgc3VyZmFjZSBpcyBzdXBwb3J0ZWQgZnJvbSAxOCBzbyB3ZSByZXF1aXJlIDE4LgotICBw
dWJsaWMgc3RhdGljIGJvb2xlYW4gaXNFR0wxNFN1cHBvcnRlZCgpIHsKLSAgICBMb2dnaW5nLmQo
VEFHLCAiU0RLIHZlcnNpb246ICIgKyBDVVJSRU5UX1NES19WRVJTSU9OICsgIi4gaXNFR0wxNFN1
cHBvcnRlZDogIgotICAgICAgICAgICAgKyAoQ1VSUkVOVF9TREtfVkVSU0lPTiA+PSBFR0xFeHRf
U0RLX1ZFUlNJT04pKTsKLSAgICByZXR1cm4gKENVUlJFTlRfU0RLX1ZFUlNJT04gPj0gRUdMRXh0
X1NES19WRVJTSU9OKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udGV4dCBleHRl
bmRzIEVnbEJhc2UuQ29udGV4dCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lkLm9wZW5nbC5F
R0xDb250ZXh0IGVnbDE0Q29udGV4dDsKLQotICAgIHB1YmxpYyBDb250ZXh0KGFuZHJvaWQub3Bl
bmdsLkVHTENvbnRleHQgZWdsQ29udGV4dCkgewotICAgICAgdGhpcy5lZ2wxNENvbnRleHQgPSBl
Z2xDb250ZXh0OwotICAgIH0KLSAgfQotCi0gIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IHdpdGgg
dGhlIHNwZWNpZmllZCBjb25maWcgdHlwZSwgc2hhcmluZyBkYXRhIHdpdGggc2hhcmVkQ29udGV4
dC4KLSAgLy8gfHNoYXJlZENvbnRleHR8IG1heSBiZSBudWxsLgotICBwdWJsaWMgRWdsQmFzZTE0
KEVnbEJhc2UxNC5Db250ZXh0IHNoYXJlZENvbnRleHQsIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMp
IHsKLSAgICBlZ2xEaXNwbGF5ID0gZ2V0RWdsRGlzcGxheSgpOwotICAgIGVnbENvbmZpZyA9IGdl
dEVnbENvbmZpZyhlZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgICBlZ2xDb250ZXh0
ID0gY3JlYXRlRWdsQ29udGV4dChzaGFyZWRDb250ZXh0LCBlZ2xEaXNwbGF5LCBlZ2xDb25maWcp
OwotICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNl
LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZh
Y2UpIHsKLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwoc3VyZmFjZSk7Ci0gIH0KLQotICAvLyBD
cmVhdGUgRUdMU3VyZmFjZSBmcm9tIHRoZSBBbmRyb2lkIFN1cmZhY2VUZXh0dXJlLgotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNl
VGV4dHVyZSkgewotICAgIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChzdXJmYWNlVGV4dHVyZSk7Ci0g
IH0KLQotICAvLyBDcmVhdGUgRUdMU3VyZmFjZSBmcm9tIGVpdGhlciBTdXJmYWNlIG9yIFN1cmZh
Y2VUZXh0dXJlLgotICBwcml2YXRlIHZvaWQgY3JlYXRlU3VyZmFjZUludGVybmFsKE9iamVjdCBz
dXJmYWNlKSB7Ci0gICAgaWYgKCEoc3VyZmFjZSBpbnN0YW5jZW9mIFN1cmZhY2UpICYmICEoc3Vy
ZmFjZSBpbnN0YW5jZW9mIFN1cmZhY2VUZXh0dXJlKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbigiSW5wdXQgbXVzdCBiZSBlaXRoZXIgYSBTdXJmYWNlIG9yIFN1cmZh
Y2VUZXh0dXJlIik7Ci0gICAgfQotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChl
Z2xTdXJmYWNlICE9IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiQWxyZWFkeSBoYXMgYW4gRUdMU3VyZmFjZSIpOwotICAgIH0KLSAgICBp
bnRbXSBzdXJmYWNlQXR0cmlicyA9IHtFR0wxNC5FR0xfTk9ORX07Ci0gICAgZWdsU3VyZmFjZSA9
IEVHTDE0LmVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCBzdXJm
YWNlLCBzdXJmYWNlQXR0cmlicywgMCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTQuRUdM
X05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAg
ICAgICJGYWlsZWQgdG8gY3JlYXRlIHdpbmRvdyBzdXJmYWNlOiAweCIgKyBJbnRlZ2VyLnRvSGV4
U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgpIHsKLSAgICBjcmVhdGVQ
YnVmZmVyU3VyZmFjZSgxLCAxKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBj
cmVhdGVQYnVmZmVyU3VyZmFjZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBjaGVja0lz
Tm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFD
RSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVH
TFN1cmZhY2UiKTsKLSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTQuRUdM
X1dJRFRILCB3aWR0aCwgRUdMMTQuRUdMX0hFSUdIVCwgaGVpZ2h0LCBFR0wxNC5FR0xfTk9ORX07
Ci0gICAgZWdsU3VyZmFjZSA9IEVHTDE0LmVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKGVnbERpc3Bs
YXksIGVnbENvbmZpZywgc3VyZmFjZUF0dHJpYnMsIDApOwotICAgIGlmIChlZ2xTdXJmYWNlID09
IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiRmFpbGVkIHRvIGNyZWF0ZSBwaXhlbCBidWZmZXIgc3VyZmFjZSB3aXRoIHNpemUgIiArIHdp
ZHRoICsgIngiCi0gICAgICAgICAgKyBoZWlnaHQgKyAiOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3Ry
aW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIENvbnRleHQgZ2V0RWdsQmFzZUNvbnRleHQoKSB7Ci0gICAgcmV0dXJuIG5ldyBFZ2xC
YXNlMTQuQ29udGV4dChlZ2xDb250ZXh0KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
Ym9vbGVhbiBoYXNTdXJmYWNlKCkgewotICAgIHJldHVybiBlZ2xTdXJmYWNlICE9IEVHTDE0LkVH
TF9OT19TVVJGQUNFOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZVdp
ZHRoKCkgewotICAgIGZpbmFsIGludCB3aWR0aEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIEVH
TDE0LmVnbFF1ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxNC5FR0xfV0lE
VEgsIHdpZHRoQXJyYXksIDApOwotICAgIHJldHVybiB3aWR0aEFycmF5WzBdOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZUhlaWdodCgpIHsKLSAgICBmaW5hbCBpbnQg
aGVpZ2h0QXJyYXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgRUdMMTQuZWdsUXVlcnlTdXJmYWNlKGVn
bERpc3BsYXksIGVnbFN1cmZhY2UsIEVHTDE0LkVHTF9IRUlHSFQsIGhlaWdodEFycmF5LCAwKTsK
LSAgICByZXR1cm4gaGVpZ2h0QXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgcmVsZWFzZVN1cmZhY2UoKSB7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTQuRUdM
X05PX1NVUkZBQ0UpIHsKLSAgICAgIEVHTDE0LmVnbERlc3Ryb3lTdXJmYWNlKGVnbERpc3BsYXks
IGVnbFN1cmZhY2UpOwotICAgICAgZWdsU3VyZmFjZSA9IEVHTDE0LkVHTF9OT19TVVJGQUNFOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja0lzTm90UmVsZWFzZWQoKSB7Ci0gICAg
aWYgKGVnbERpc3BsYXkgPT0gRUdMMTQuRUdMX05PX0RJU1BMQVkgfHwgZWdsQ29udGV4dCA9PSBF
R0wxNC5FR0xfTk9fQ09OVEVYVAotICAgICAgICB8fCBlZ2xDb25maWcgPT0gbnVsbCkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoaXMgb2JqZWN0IGhhcyBiZWVuIHJlbGVh
c2VkIik7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2Uo
KSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgcmVsZWFzZVN1cmZhY2UoKTsKLSAg
ICBkZXRhY2hDdXJyZW50KCk7Ci0gICAgRUdMMTQuZWdsRGVzdHJveUNvbnRleHQoZWdsRGlzcGxh
eSwgZWdsQ29udGV4dCk7Ci0gICAgRUdMMTQuZWdsUmVsZWFzZVRocmVhZCgpOwotICAgIEVHTDE0
LmVnbFRlcm1pbmF0ZShlZ2xEaXNwbGF5KTsKLSAgICBlZ2xDb250ZXh0ID0gRUdMMTQuRUdMX05P
X0NPTlRFWFQ7Ci0gICAgZWdsRGlzcGxheSA9IEVHTDE0LkVHTF9OT19ESVNQTEFZOwotICAgIGVn
bENvbmZpZyA9IG51bGw7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgbWFrZUN1
cnJlbnQoKSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2Ug
PT0gRUdMMTQuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJObyBFR0xTdXJmYWNlIC0gY2FuJ3QgbWFrZSBjdXJyZW50Iik7Ci0gICAgfQotICAgIHN5
bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBpZiAoIUVHTDE0LmVnbE1ha2VDdXJy
ZW50KGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIGVnbFN1cmZhY2UsIGVnbENvbnRleHQpKSB7Ci0g
ICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVnbE1ha2VD
dXJyZW50IGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJv
cigpKSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gRGV0YWNoIHRoZSBjdXJyZW50IEVH
TCBjb250ZXh0LCBzbyB0aGF0IGl0IGNhbiBiZSBtYWRlIGN1cnJlbnQgb24gYW5vdGhlciB0aHJl
YWQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBkZXRhY2hDdXJyZW50KCkgewotICAgIHN5
bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBpZiAoIUVHTDE0LmVnbE1ha2VDdXJy
ZW50KAotICAgICAgICAgICAgICBlZ2xEaXNwbGF5LCBFR0wxNC5FR0xfTk9fU1VSRkFDRSwgRUdM
MTQuRUdMX05PX1NVUkZBQ0UsIEVHTDE0LkVHTF9OT19DT05URVhUKSkgewotICAgICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJlZ2xEZXRhY2hDdXJyZW50IGZh
aWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3YXBCdWZm
ZXJzKCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlID09
IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIpOwotICAgIH0KLSAgICBzeW5j
aHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgRUdMMTQuZWdsU3dhcEJ1ZmZlcnMoZWds
RGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc3dhcEJ1
ZmZlcnMobG9uZyB0aW1lU3RhbXBOcykgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAg
IGlmIChlZ2xTdXJmYWNlID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIp
OwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgLy8gU2Vl
Ci0gICAgICAvLyBodHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9mcmFt
ZXdvcmtzL25hdGl2ZS8rL3Rvb2xzX3IyMi4yL29wZW5nbC9zcGVjcy9FR0xfQU5EUk9JRF9wcmVz
ZW50YXRpb25fdGltZS50eHQKLSAgICAgIEVHTEV4dC5lZ2xQcmVzZW50YXRpb25UaW1lQU5EUk9J
RChlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCB0aW1lU3RhbXBOcyk7Ci0gICAgICBFR0wxNC5lZ2xT
d2FwQnVmZmVycyhlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsKLSAgICB9Ci0gIH0KLQotICAvLyBS
ZXR1cm4gYW4gRUdMRGlzcGxheSwgb3IgZGllIHRyeWluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgRUdM
RGlzcGxheSBnZXRFZ2xEaXNwbGF5KCkgewotICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSA9IEVH
TDE0LmVnbEdldERpc3BsYXkoRUdMMTQuRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0gICAgaWYgKGVn
bERpc3BsYXkgPT0gRUdMMTQuRUdMX05PX0RJU1BMQVkpIHsKLSAgICAgIHRocm93IG5ldyBSdW50
aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJVbmFibGUgdG8gZ2V0IEVHTDE0IGRpc3BsYXk6IDB4
IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAg
ICBpbnRbXSB2ZXJzaW9uID0gbmV3IGludFsyXTsKLSAgICBpZiAoIUVHTDE0LmVnbEluaXRpYWxp
emUoZWdsRGlzcGxheSwgdmVyc2lvbiwgMCwgdmVyc2lvbiwgMSkpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBFR0wx
NDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAg
fQotICAgIHJldHVybiBlZ2xEaXNwbGF5OwotICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTENvbmZp
Zywgb3IgZGllIHRyeWluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgRUdMQ29uZmlnIGdldEVnbENvbmZp
ZyhFR0xEaXNwbGF5IGVnbERpc3BsYXksIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMpIHsKLSAgICBF
R0xDb25maWdbXSBjb25maWdzID0gbmV3IEVHTENvbmZpZ1sxXTsKLSAgICBpbnRbXSBudW1Db25m
aWdzID0gbmV3IGludFsxXTsKLSAgICBpZiAoIUVHTDE0LmVnbENob29zZUNvbmZpZygKLSAgICAg
ICAgICAgIGVnbERpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsIDAsIGNvbmZpZ3MsIDAsIGNvbmZp
Z3MubGVuZ3RoLCBudW1Db25maWdzLCAwKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oCi0gICAgICAgICAgImVnbENob29zZUNvbmZpZyBmYWlsZWQ6IDB4IiArIEludGVnZXIu
dG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBpZiAobnVtQ29u
Zmlnc1swXSA8PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5hYmxl
IHRvIGZpbmQgYW55IG1hdGNoaW5nIEVHTCBjb25maWciKTsKLSAgICB9Ci0gICAgZmluYWwgRUdM
Q29uZmlnIGVnbENvbmZpZyA9IGNvbmZpZ3NbMF07Ci0gICAgaWYgKGVnbENvbmZpZyA9PSBudWxs
KSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ2hvb3NlQ29uZmlnIHJl
dHVybmVkIG51bGwiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbmZpZzsKLSAgfQotCi0gIC8v
IFJldHVybiBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgc3RhdGljIEVH
TENvbnRleHQgY3JlYXRlRWdsQ29udGV4dCgKLSAgICAgIEVnbEJhc2UxNC5Db250ZXh0IHNoYXJl
ZENvbnRleHQsIEVHTERpc3BsYXkgZWdsRGlzcGxheSwgRUdMQ29uZmlnIGVnbENvbmZpZykgewot
ICAgIGlmIChzaGFyZWRDb250ZXh0ICE9IG51bGwgJiYgc2hhcmVkQ29udGV4dC5lZ2wxNENvbnRl
eHQgPT0gRUdMMTQuRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJJbnZhbGlkIHNoYXJlZENvbnRleHQiKTsKLSAgICB9Ci0gICAgaW50W10gY29udGV4
dEF0dHJpYnV0ZXMgPSB7RUdMMTQuRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsIEVHTDE0
LkVHTF9OT05FfTsKLSAgICBFR0xDb250ZXh0IHJvb3RDb250ZXh0ID0KLSAgICAgICAgc2hhcmVk
Q29udGV4dCA9PSBudWxsID8gRUdMMTQuRUdMX05PX0NPTlRFWFQgOiBzaGFyZWRDb250ZXh0LmVn
bDE0Q29udGV4dDsKLSAgICBmaW5hbCBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gICAgc3luY2hy
b25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIGVnbENvbnRleHQgPSBFR0wxNC5lZ2xDcmVh
dGVDb250ZXh0KGVnbERpc3BsYXksIGVnbENvbmZpZywgcm9vdENvbnRleHQsIGNvbnRleHRBdHRy
aWJ1dGVzLCAwKTsKLSAgICB9Ci0gICAgaWYgKGVnbENvbnRleHQgPT0gRUdMMTQuRUdMX05PX0NP
TlRFWFQpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJG
YWlsZWQgdG8gY3JlYXRlIEVHTCBjb250ZXh0OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVH
TDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbnRleHQ7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXIuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL0VnbFJlbmRlcmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDY3
NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1
cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRy
b2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0
IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotaW1wb3J0
IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnRE
b3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8qKgot
ICogSW1wbGVtZW50cyBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGJ5IGRpc3Bs
YXlpbmcgdGhlIHZpZGVvIHN0cmVhbSBvbiBhbiBFR0wgU3VyZmFjZS4KLSAqIFRoaXMgY2xhc3Mg
aXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIGhlbHBlciBjbGFzcyBmb3IgcmVuZGVyaW5nIG9u
IFN1cmZhY2VWaWV3cyBhbmQKLSAqIFRleHR1cmVWaWV3cy4KLSAqLwotcHVibGljIGNsYXNzIEVn
bFJlbmRlcmVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkVnbFJlbmRlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgbG9uZyBMT0dfSU5URVJWQUxfU0VDID0gNDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IE1BWF9TVVJGQUNFX0NMRUFSX0NPVU5UID0gMzsKLQotICBwdWJsaWMgaW50ZXJmYWNl
IEZyYW1lTGlzdGVuZXIgeyB2b2lkIG9uRnJhbWUoQml0bWFwIGZyYW1lKTsgfQotCi0gIHByaXZh
dGUgc3RhdGljIGNsYXNzIFNjYWxlQW5kRnJhbWVMaXN0ZW5lciB7Ci0gICAgcHVibGljIGZpbmFs
IGZsb2F0IHNjYWxlOwotICAgIHB1YmxpYyBmaW5hbCBGcmFtZUxpc3RlbmVyIGxpc3RlbmVyOwot
Ci0gICAgcHVibGljIFNjYWxlQW5kRnJhbWVMaXN0ZW5lcihmbG9hdCBzY2FsZSwgRnJhbWVMaXN0
ZW5lciBsaXN0ZW5lcikgewotICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlOwotICAgICAgdGhpcy5s
aXN0ZW5lciA9IGxpc3RlbmVyOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgRWdsU3Vy
ZmFjZUNyZWF0aW9uIGltcGxlbWVudHMgUnVubmFibGUgewotICAgIHByaXZhdGUgT2JqZWN0IHN1
cmZhY2U7Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0U3VyZmFjZShPYmplY3Qg
c3VyZmFjZSkgewotICAgICAgdGhpcy5zdXJmYWNlID0gc3VyZmFjZTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcnVuKCkgewotICAgICAgaWYg
KHN1cmZhY2UgIT0gbnVsbCAmJiBlZ2xCYXNlICE9IG51bGwgJiYgIWVnbEJhc2UuaGFzU3VyZmFj
ZSgpKSB7Ci0gICAgICAgIGlmIChzdXJmYWNlIGluc3RhbmNlb2YgU3VyZmFjZSkgewotICAgICAg
ICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZSgoU3VyZmFjZSkgc3VyZmFjZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc3VyZmFjZSBpbnN0YW5jZW9mIFN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgICAgICAg
ZWdsQmFzZS5jcmVhdGVTdXJmYWNlKChTdXJmYWNlVGV4dHVyZSkgc3VyZmFjZSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSW52
YWxpZCBzdXJmYWNlOiAiICsgc3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWdsQmFzZS5t
YWtlQ3VycmVudCgpOwotICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIFlVViBmcmFtZXMgd2l0aCBv
ZGQgd2lkdGguCi0gICAgICAgIEdMRVMyMC5nbFBpeGVsU3RvcmVpKEdMRVMyMC5HTF9VTlBBQ0tf
QUxJR05NRU5ULCAxKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFN0
cmluZyBuYW1lOwotCi0gIC8vIHxyZW5kZXJUaHJlYWRIYW5kbGVyfCBpcyBhIGhhbmRsZXIgZm9y
IGNvbW11bmljYXRpbmcgd2l0aCB8cmVuZGVyVGhyZWFkfCwgYW5kIGlzIHN5bmNocm9uaXplZAot
ICAvLyBvbiB8aGFuZGxlckxvY2t8LgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBoYW5kbGVyTG9j
ayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBIYW5kbGVyIHJlbmRlclRocmVhZEhhbmRsZXI7
Ci0KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgZnJhbWVMaXN0ZW5lckxvY2sgPSBuZXcgT2JqZWN0
KCk7Ci0gIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFNjYWxlQW5kRnJhbWVMaXN0ZW5lcj4gZnJh
bWVMaXN0ZW5lcnMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAvLyBWYXJpYWJsZXMgZm9yIGZw
cyByZWR1Y3Rpb24uCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGZwc1JlZHVjdGlvbkxvY2sgPSBu
ZXcgT2JqZWN0KCk7Ci0gIC8vIFRpbWUgZm9yIHdoZW4gbmV4dCBmcmFtZSBzaG91bGQgYmUgcmVu
ZGVyZWQuCi0gIHByaXZhdGUgbG9uZyBuZXh0RnJhbWVUaW1lTnM7Ci0gIC8vIE1pbmltdW0gZHVy
YXRpb24gYmV0d2VlbiBmcmFtZXMgd2hlbiBmcHMgcmVkdWN0aW9uIGlzIGFjdGl2ZSwgb3IgLTEg
aWYgdmlkZW8gaXMgY29tcGxldGVseQotICAvLyBwYXVzZWQuCi0gIHByaXZhdGUgbG9uZyBtaW5S
ZW5kZXJQZXJpb2ROczsKLQotICAvLyBFR0wgYW5kIEdMIHJlc291cmNlcyBmb3IgZHJhd2luZyBZ
VVYvT0VTIHRleHR1cmVzLiBBZnRlciBpbml0aWxpemF0aW9uLCB0aGVzZSBhcmUgb25seSBhY2Nl
c3NlZAotICAvLyBmcm9tIHRoZSByZW5kZXIgdGhyZWFkLgotICBwcml2YXRlIEVnbEJhc2UgZWds
QmFzZTsKLSAgcHJpdmF0ZSBmaW5hbCBSZW5kZXJlckNvbW1vbi5ZdXZVcGxvYWRlciB5dXZVcGxv
YWRlciA9IG5ldyBSZW5kZXJlckNvbW1vbi5ZdXZVcGxvYWRlcigpOwotICBwcml2YXRlIFJlbmRl
cmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcjsKLSAgLy8gVGV4dHVyZSBpZHMgZm9yIFlVViBmcmFt
ZXMuIEFsbG9jYXRlZCBvbiBmaXJzdCBhcnJpdmFsIG9mIGEgWVVWIGZyYW1lLgotICBwcml2YXRl
IGludFtdIHl1dlRleHR1cmVzID0gbnVsbDsKLQotICAvLyBQZW5kaW5nIGZyYW1lIHRvIHJlbmRl
ci4gU2VydmVzIGFzIGEgcXVldWUgd2l0aCBzaXplIDEuIFN5bmNocm9uaXplZCBvbiB8ZnJhbWVM
b2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgZnJhbWVMb2NrID0gbmV3IE9iamVjdCgpOwot
ICBwcml2YXRlIFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIHBlbmRpbmdGcmFtZTsKLQotICAvLyBU
aGVzZSB2YXJpYWJsZXMgYXJlIHN5bmNocm9uaXplZCBvbiB8bGF5b3V0TG9ja3wuCi0gIHByaXZh
dGUgZmluYWwgT2JqZWN0IGxheW91dExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgaW50
IHN1cmZhY2VXaWR0aDsKLSAgcHJpdmF0ZSBpbnQgc3VyZmFjZUhlaWdodDsKLSAgcHJpdmF0ZSBm
bG9hdCBsYXlvdXRBc3BlY3RSYXRpbzsKLSAgLy8gSWYgdHJ1ZSwgbWlycm9ycyB0aGUgdmlkZW8g
c3RyZWFtIGhvcml6b250YWxseS4KLSAgcHJpdmF0ZSBib29sZWFuIG1pcnJvcjsKLQotICAvLyBU
aGVzZSB2YXJpYWJsZXMgYXJlIHN5bmNocm9uaXplZCBvbiB8c3RhdGlzdGljc0xvY2t8LgotICBw
cml2YXRlIGZpbmFsIE9iamVjdCBzdGF0aXN0aWNzTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgLy8g
VG90YWwgbnVtYmVyIG9mIHZpZGVvIGZyYW1lcyByZWNlaXZlZCBpbiByZW5kZXJGcmFtZSgpIGNh
bGwuCi0gIHByaXZhdGUgaW50IGZyYW1lc1JlY2VpdmVkOwotICAvLyBOdW1iZXIgb2YgdmlkZW8g
ZnJhbWVzIGRyb3BwZWQgYnkgcmVuZGVyRnJhbWUoKSBiZWNhdXNlIHByZXZpb3VzIGZyYW1lIGhh
cyBub3QgYmVlbiByZW5kZXJlZAotICAvLyB5ZXQuCi0gIHByaXZhdGUgaW50IGZyYW1lc0Ryb3Bw
ZWQ7Ci0gIC8vIE51bWJlciBvZiByZW5kZXJlZCB2aWRlbyBmcmFtZXMuCi0gIHByaXZhdGUgaW50
IGZyYW1lc1JlbmRlcmVkOwotICAvLyBTdGFydCB0aW1lIGZvciBjb3VudGluZyB0aGVzZSBzdGF0
aXN0aWNzLCBvciAwIGlmIHdlIGhhdmVuJ3Qgc3RhcnRlZCBtZWFzdXJpbmcgeWV0LgotICBwcml2
YXRlIGxvbmcgc3RhdGlzdGljc1N0YXJ0VGltZU5zOwotICAvLyBUaW1lIGluIG5zIHNwZW50IGlu
IHJlbmRlckZyYW1lT25SZW5kZXJUaHJlYWQoKSBmdW5jdGlvbi4KLSAgcHJpdmF0ZSBsb25nIHJl
bmRlclRpbWVOczsKLSAgLy8gVGltZSBpbiBucyBzcGVudCBieSB0aGUgcmVuZGVyIHRocmVhZCBp
biB0aGUgc3dhcEJ1ZmZlcnMoKSBmdW5jdGlvbi4KLSAgcHJpdmF0ZSBsb25nIHJlbmRlclN3YXBC
dWZmZXJUaW1lTnM7Ci0KLSAgLy8gVXNlZCBmb3IgYml0bWFwIGNhcHR1cmluZy4KLSAgcHJpdmF0
ZSBHbFRleHR1cmVGcmFtZUJ1ZmZlciBiaXRtYXBUZXh0dXJlRnJhbWVidWZmZXI7Ci0KLSAgLy8g
UnVubmFibGUgZm9yIHBvc3RpbmcgZnJhbWVzIHRvIHJlbmRlciB0aHJlYWQuCi0gIHByaXZhdGUg
ZmluYWwgUnVubmFibGUgcmVuZGVyRnJhbWVSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICByZW5kZXJGcmFtZU9u
UmVuZGVyVGhyZWFkKCk7Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgZmluYWwgUnVubmFibGUg
bG9nU3RhdGlzdGljc1J1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIGxvZ1N0YXRpc3RpY3MoKTsKLSAgICAgIHN5
bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRs
ZXIgIT0gbnVsbCkgewotICAgICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJh
Y2tzKGxvZ1N0YXRpc3RpY3NSdW5uYWJsZSk7Ci0gICAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxl
ci5wb3N0RGVsYXllZCgKLSAgICAgICAgICAgICAgbG9nU3RhdGlzdGljc1J1bm5hYmxlLCBUaW1l
VW5pdC5TRUNPTkRTLnRvTWlsbGlzKExPR19JTlRFUlZBTF9TRUMpKTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIGZpbmFsIEVnbFN1cmZhY2VDcmVhdGlvbiBl
Z2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZSA9IG5ldyBFZ2xTdXJmYWNlQ3JlYXRpb24oKTsKLQot
ICAvKioKLSAgICogU3RhbmRhcmQgY29uc3RydWN0b3IuIFRoZSBuYW1lIHdpbGwgYmUgdXNlZCBm
b3IgdGhlIHJlbmRlciB0aHJlYWQgbmFtZSBhbmQgaW5jbHVkZWQgd2hlbgotICAgKiBsb2dnaW5n
LiBJbiBvcmRlciB0byByZW5kZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBmaXJzdCBjYWxsIGluaXQo
KSBhbmQgY3JlYXRlRWdsU3VyZmFjZS4KLSAgICovCi0gIHB1YmxpYyBFZ2xSZW5kZXJlcihTdHJp
bmcgbmFtZSkgewotICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogSW5p
dGlhbGl6ZSB0aGlzIGNsYXNzLCBzaGFyaW5nIHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0
fC4gVGhlIGN1c3RvbSB8ZHJhd2VyfCB3aWxsIGJlIHVzZWQKLSAgICogZm9yIGRyYXdpbmcgZnJh
bWVzIG9uIHRoZSBFR0xTdXJmYWNlLiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxs
aW5nIHJlbGVhc2UoKSBvbgotICAgKiB8ZHJhd2VyfC4gSXQgaXMgYWxsb3dlZCB0byBjYWxsIGlu
aXQoKSB0byByZWluaXRpYWxpemUgdGhlIHJlbmRlcmVyIGFmdGVyIGEgcHJldmlvdXMKLSAgICog
aW5pdCgpL3JlbGVhc2UoKSBjeWNsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoZmluYWwg
RWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsIGZpbmFsIGludFtdIGNvbmZpZ0F0dHJpYnV0
ZXMsCi0gICAgICBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXIpIHsKLSAgICBzeW5jaHJv
bml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciAhPSBu
dWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24obmFtZSArICJB
bHJlYWR5IGluaXRpYWxpemVkIik7Ci0gICAgICB9Ci0gICAgICBsb2dEKCJJbml0aWFsaXppbmcg
RWdsUmVuZGVyZXIiKTsKLSAgICAgIHRoaXMuZHJhd2VyID0gZHJhd2VyOwotCi0gICAgICBmaW5h
bCBIYW5kbGVyVGhyZWFkIHJlbmRlclRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKG5hbWUgKyAi
RWdsUmVuZGVyZXIiKTsKLSAgICAgIHJlbmRlclRocmVhZC5zdGFydCgpOwotICAgICAgcmVuZGVy
VGhyZWFkSGFuZGxlciA9IG5ldyBIYW5kbGVyKHJlbmRlclRocmVhZC5nZXRMb29wZXIoKSk7Ci0g
ICAgICAvLyBDcmVhdGUgRUdMIGNvbnRleHQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgcmVuZGVyIHRo
cmVhZC4gSXQgc2hvdWxkIGJlIHBvc3NpYmx5IHRvIGNyZWF0ZSB0aGUKLSAgICAgIC8vIGNvbnRl
eHQgb24gdGhpcyB0aHJlYWQgYW5kIG1ha2UgaXQgY3VycmVudCBvbiB0aGUgcmVuZGVyIHRocmVh
ZCwgYnV0IHRoaXMgY2F1c2VzIGZhaWx1cmUgb24KLSAgICAgIC8vIHNvbWUgTWFydmVsIGJhc2Vk
IEpCIGRldmljZXMuIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93ZWJydGMvaXNzdWVzL2Rl
dGFpbD9pZD02MzUwLgotICAgICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0
aWJseShyZW5kZXJUaHJlYWRIYW5kbGVyLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVy
cmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgLy8gSWYgc2hhcmVk
Q29udGV4dCBpcyBudWxsLCB0aGVuIHRleHR1cmUgZnJhbWVzIGFyZSBkaXNhYmxlZC4gVGhpcyBp
cyB0eXBpY2FsbHkgZm9yIG9sZAotICAgICAgICAgIC8vIGRldmljZXMgdGhhdCBtaWdodCBub3Qg
YmUgZnVsbHkgc3BlYyBjb21wbGlhbnQsIHNvIGZvcmNlIEVHTCAxLjAgc2luY2UgRUdMIDEuNCBo
YXMKLSAgICAgICAgICAvLyBjYXVzZWQgdHJvdWJsZSBvbiBzb21lIHdlaXJkIGRldmljZXMuCi0g
ICAgICAgICAgaWYgKHNoYXJlZENvbnRleHQgPT0gbnVsbCkgewotICAgICAgICAgICAgbG9nRCgi
RWdsQmFzZTEwLmNyZWF0ZSBjb250ZXh0Iik7Ci0gICAgICAgICAgICBlZ2xCYXNlID0gbmV3IEVn
bEJhc2UxMChudWxsIC8qIHNoYXJlZENvbnRleHQgKi8sIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBsb2dEKCJFZ2xCYXNlLmNyZWF0ZSBzaGFyZWQg
Y29udGV4dCIpOwotICAgICAgICAgICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKHNoYXJlZENv
bnRleHQsIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fSk7Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QoZWdsU3VyZmFjZUNyZWF0aW9uUnVu
bmFibGUpOwotICAgICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU5zID0gU3lzdGVtLm5hbm9UaW1l
KCk7Ci0gICAgICByZXNldFN0YXRpc3RpY3MoY3VycmVudFRpbWVOcyk7Ci0gICAgICByZW5kZXJU
aHJlYWRIYW5kbGVyLnBvc3REZWxheWVkKAotICAgICAgICAgIGxvZ1N0YXRpc3RpY3NSdW5uYWJs
ZSwgVGltZVVuaXQuU0VDT05EUy50b01pbGxpcyhMT0dfSU5URVJWQUxfU0VDKSk7Ci0gICAgfQot
ICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHsK
LSAgICBjcmVhdGVFZ2xTdXJmYWNlSW50ZXJuYWwoc3VyZmFjZSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBjcmVhdGVFZ2xTdXJmYWNlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0g
ICAgY3JlYXRlRWdsU3VyZmFjZUludGVybmFsKHN1cmZhY2VUZXh0dXJlKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBjcmVhdGVFZ2xTdXJmYWNlSW50ZXJuYWwoT2JqZWN0IHN1cmZhY2UpIHsKLSAg
ICBlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZS5zZXRTdXJmYWNlKHN1cmZhY2UpOwotICAgIHBv
c3RUb1JlbmRlclRocmVhZChlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZSk7Ci0gIH0KLQotICAv
KioKLSAgICogQmxvY2sgdW50aWwgYW55IHBlbmRpbmcgZnJhbWUgaXMgcmV0dXJuZWQgYW5kIGFs
bCBHTCByZXNvdXJjZXMgcmVsZWFzZWQsIGV2ZW4gaWYgYW4gaW50ZXJydXB0Ci0gICAqIG9jY3Vy
cy4gSWYgYW4gaW50ZXJydXB0IG9jY3VycyBkdXJpbmcgcmVsZWFzZSgpLCB0aGUgaW50ZXJydXB0
IGZsYWcgd2lsbCBiZSBzZXQuIFRoaXMgZnVuY3Rpb24KLSAgICogc2hvdWxkIGJlIGNhbGxlZCBi
ZWZvcmUgdGhlIEFjdGl2aXR5IGlzIGRlc3Ryb3llZCBhbmQgdGhlIEVHTENvbnRleHQgaXMgc3Rp
bGwgdmFsaWQuIElmIHlvdQotICAgKiBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZSBHTCBy
ZXNvdXJjZXMgbWlnaHQgbGVhay4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0g
ICAgbG9nRCgiUmVsZWFzaW5nLiIpOwotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGVnbENsZWFu
dXBCYXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIHN5bmNocm9uaXplZCAoaGFu
ZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpIHsKLSAg
ICAgICAgbG9nRCgiQWxyZWFkeSByZWxlYXNlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhsb2dTdGF0aXN0aWNz
UnVubmFibGUpOwotICAgICAgLy8gUmVsZWFzZSBFR0wgYW5kIEdMIHJlc291cmNlcyBvbiByZW5k
ZXIgdGhyZWFkLgotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0QXRGcm9udE9mUXVldWUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICAgIGlmIChkcmF3ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgZHJh
d2VyLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGRyYXdlciA9IG51bGw7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGlmICh5dXZUZXh0dXJlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBHTEVTMjAu
Z2xEZWxldGVUZXh0dXJlcygzLCB5dXZUZXh0dXJlcywgMCk7Ci0gICAgICAgICAgICB5dXZUZXh0
dXJlcyA9IG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChiaXRtYXBUZXh0dXJlRnJh
bWVidWZmZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVy
LnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlciA9IG51bGw7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgICAg
ICAgIGxvZ0QoImVnbEJhc2UgZGV0YWNoIGFuZCByZWxlYXNlLiIpOwotICAgICAgICAgICAgZWds
QmFzZS5kZXRhY2hDdXJyZW50KCk7Ci0gICAgICAgICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAg
ICAgICAgICAgIGVnbEJhc2UgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBlZ2xDbGVh
bnVwQmFycmllci5jb3VudERvd24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBmaW5h
bCBMb29wZXIgcmVuZGVyTG9vcGVyID0gcmVuZGVyVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKTsK
LSAgICAgIC8vIFRPRE8obWFnamVkKTogUmVwbGFjZSB0aGlzIHBvc3QoKSB3aXRoIHJlbmRlckxv
b3Blci5xdWl0U2FmZWx5KCkgd2hlbiBBUEkgc3VwcG9ydCA+PSAxOC4KLSAgICAgIHJlbmRlclRo
cmVhZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAg
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgbG9nRCgiUXVpdHRpbmcgcmVuZGVy
IHRocmVhZC4iKTsKLSAgICAgICAgICByZW5kZXJMb29wZXIucXVpdCgpOwotICAgICAgICB9Ci0g
ICAgICB9KTsKLSAgICAgIC8vIERvbid0IGFjY2VwdCBhbnkgbW9yZSBmcmFtZXMgb3IgbWVzc2Fn
ZXMgdG8gdGhlIHJlbmRlciB0aHJlYWQuCi0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyID0gbnVs
bDsKLSAgICB9Ci0gICAgLy8gTWFrZSBzdXJlIHRoZSBFR0wvR0wgY2xlYW51cCBwb3N0ZWQgYWJv
dmUgaXMgZXhlY3V0ZWQuCi0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoZWds
Q2xlYW51cEJhcnJpZXIpOwotICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICBp
ZiAocGVuZGluZ0ZyYW1lICE9IG51bGwpIHsKLSAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJG
cmFtZURvbmUocGVuZGluZ0ZyYW1lKTsKLSAgICAgICAgcGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgbG9nRCgiUmVsZWFzaW5nIGRvbmUuIik7Ci0gIH0KLQotICAvKioK
LSAgICogUmVzZXQgdGhlIHN0YXRpc3RpY3MgbG9nZ2VkIGluIGxvZ1N0YXRpc3RpY3MoKS4KLSAg
ICovCi0gIHByaXZhdGUgdm9pZCByZXNldFN0YXRpc3RpY3MobG9uZyBjdXJyZW50VGltZU5zKSB7
Ci0gICAgc3luY2hyb25pemVkIChzdGF0aXN0aWNzTG9jaykgewotICAgICAgc3RhdGlzdGljc1N0
YXJ0VGltZU5zID0gY3VycmVudFRpbWVOczsKLSAgICAgIGZyYW1lc1JlY2VpdmVkID0gMDsKLSAg
ICAgIGZyYW1lc0Ryb3BwZWQgPSAwOwotICAgICAgZnJhbWVzUmVuZGVyZWQgPSAwOwotICAgICAg
cmVuZGVyVGltZU5zID0gMDsKLSAgICAgIHJlbmRlclN3YXBCdWZmZXJUaW1lTnMgPSAwOwotICAg
IH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHByaW50U3RhY2tUcmFjZSgpIHsKLSAgICBzeW5jaHJv
bml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBmaW5hbCBUaHJlYWQgcmVuZGVyVGhyZWFkID0K
LSAgICAgICAgICAocmVuZGVyVGhyZWFkSGFuZGxlciA9PSBudWxsKSA/IG51bGwgOiByZW5kZXJU
aHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpOwotICAgICAgaWYgKHJlbmRlclRo
cmVhZCAhPSBudWxsKSB7Ci0gICAgICAgIGZpbmFsIFN0YWNrVHJhY2VFbGVtZW50W10gcmVuZGVy
U3RhY2tUcmFjZSA9IHJlbmRlclRocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICAgIGlmIChy
ZW5kZXJTdGFja1RyYWNlLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICBsb2dEKCJFZ2xSZW5kZXJl
ciBzdGFjayB0cmFjZToiKTsKLSAgICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHRyYWNl
RWxlbSA6IHJlbmRlclN0YWNrVHJhY2UpIHsKLSAgICAgICAgICAgIGxvZ0QodHJhY2VFbGVtLnRv
U3RyaW5nKCkpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIC8qKgotICAgKiBTZXQgaWYgdGhlIHZpZGVvIHN0cmVhbSBzaG91bGQgYmUgbWlycm9yZWQg
b3Igbm90LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TWlycm9yKGZpbmFsIGJvb2xlYW4gbWly
cm9yKSB7Ci0gICAgbG9nRCgic2V0TWlycm9yOiAiICsgbWlycm9yKTsKLSAgICBzeW5jaHJvbml6
ZWQgKGxheW91dExvY2spIHsKLSAgICAgIHRoaXMubWlycm9yID0gbWlycm9yOwotICAgIH0KLSAg
fQotCi0gIC8qKgotICAgKiBTZXQgbGF5b3V0IGFzcGVjdCByYXRpby4gVGhpcyBpcyB1c2VkIHRv
IGNyb3AgZnJhbWVzIHdoZW4gcmVuZGVyaW5nIHRvIGF2b2lkIHN0cmV0Y2hlZCB2aWRlby4KLSAg
ICogU2V0IHRoaXMgdG8gMCB0byBkaXNhYmxlIGNyb3BwaW5nLgotICAgKi8KLSAgcHVibGljIHZv
aWQgc2V0TGF5b3V0QXNwZWN0UmF0aW8oZmxvYXQgbGF5b3V0QXNwZWN0UmF0aW8pIHsKLSAgICBs
b2dEKCJzZXRMYXlvdXRBc3BlY3RSYXRpbzogIiArIGxheW91dEFzcGVjdFJhdGlvKTsKLSAgICBz
eW5jaHJvbml6ZWQgKGxheW91dExvY2spIHsKLSAgICAgIHRoaXMubGF5b3V0QXNwZWN0UmF0aW8g
PSBsYXlvdXRBc3BlY3RSYXRpbzsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTGltaXQgcmVu
ZGVyIGZyYW1lcmF0ZS4KLSAgICoKLSAgICogQHBhcmFtIGZwcyBMaW1pdCByZW5kZXIgZnJhbWVy
YXRlIHRvIHRoaXMgdmFsdWUsIG9yIHVzZSBGbG9hdC5QT1NJVElWRV9JTkZJTklUWSB0byBkaXNh
YmxlIGZwcwotICAgKiAgICAgICAgICAgIHJlZHVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lk
IHNldEZwc1JlZHVjdGlvbihmbG9hdCBmcHMpIHsKLSAgICBsb2dEKCJzZXRGcHNSZWR1Y3Rpb246
ICIgKyBmcHMpOwotICAgIHN5bmNocm9uaXplZCAoZnBzUmVkdWN0aW9uTG9jaykgewotICAgICAg
ZmluYWwgbG9uZyBwcmV2aW91c1JlbmRlclBlcmlvZE5zID0gbWluUmVuZGVyUGVyaW9kTnM7Ci0g
ICAgICBpZiAoZnBzIDw9IDApIHsKLSAgICAgICAgbWluUmVuZGVyUGVyaW9kTnMgPSBMb25nLk1B
WF9WQUxVRTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG1pblJlbmRlclBlcmlvZE5zID0gKGxv
bmcpIChUaW1lVW5pdC5TRUNPTkRTLnRvTmFub3MoMSkgLyBmcHMpOwotICAgICAgfQotICAgICAg
aWYgKG1pblJlbmRlclBlcmlvZE5zICE9IHByZXZpb3VzUmVuZGVyUGVyaW9kTnMpIHsKLSAgICAg
ICAgLy8gRnBzIHJlZHVjdGlvbiBjaGFuZ2VkIC0gcmVzZXQgZnJhbWUgdGltZS4KLSAgICAgICAg
bmV4dEZyYW1lVGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0KLSAgcHVibGljIHZvaWQgZGlzYWJsZUZwc1JlZHVjdGlvbigpIHsKLSAgICBzZXRGcHNSZWR1
Y3Rpb24oRmxvYXQuUE9TSVRJVkVfSU5GSU5JVFkgLyogZnBzICovKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHBhdXNlVmlkZW8oKSB7Ci0gICAgc2V0RnBzUmVkdWN0aW9uKDAgLyogZnBzICovKTsK
LSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hl
biBhIG5ldyB2aWRlbyBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZC4KLSAgICoKLSAgICogQHBhcmFt
IGxpc3RlbmVyIFRoZSBjYWxsYmFjayB0byBiZSBpbnZva2VkLgotICAgKiBAcGFyYW0gc2NhbGUg
ICAgVGhlIHNjYWxlIG9mIHRoZSBCaXRtYXAgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgb3IgMCBp
ZiBubyBCaXRtYXAgaXMKLSAgICogICAgICAgICAgICAgICAgIHJlcXVpcmVkLgotICAgKi8KLSAg
cHVibGljIHZvaWQgYWRkRnJhbWVMaXN0ZW5lcihGcmFtZUxpc3RlbmVyIGxpc3RlbmVyLCBmbG9h
dCBzY2FsZSkgewotICAgIHN5bmNocm9uaXplZCAoZnJhbWVMaXN0ZW5lckxvY2spIHsKLSAgICAg
IGZyYW1lTGlzdGVuZXJzLmFkZChuZXcgU2NhbGVBbmRGcmFtZUxpc3RlbmVyKHNjYWxlLCBsaXN0
ZW5lcikpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmUgYW55IHBlbmRpbmcgY2Fs
bGJhY2sgdGhhdCB3YXMgYWRkZWQgd2l0aCBhZGRGcmFtZUxpc3RlbmVyLiBJZiB0aGUgY2FsbGJh
Y2sgaXMgbm90IGluCi0gICAqIHRoZSBxdWV1ZSwgbm90aGluZyBoYXBwZW5zLgotICAgKgotICAg
KiBAcGFyYW0gcnVubmFibGUgVGhlIGNhbGxiYWNrIHRvIHJlbW92ZS4KLSAgICovCi0gIHB1Ymxp
YyB2b2lkIHJlbW92ZUZyYW1lTGlzdGVuZXIoRnJhbWVMaXN0ZW5lciBsaXN0ZW5lcikgewotICAg
IHN5bmNocm9uaXplZCAoZnJhbWVMaXN0ZW5lckxvY2spIHsKLSAgICAgIGZpbmFsIEl0ZXJhdG9y
PFNjYWxlQW5kRnJhbWVMaXN0ZW5lcj4gaXRlciA9IGZyYW1lTGlzdGVuZXJzLml0ZXJhdG9yKCk7
Ci0gICAgICB3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgICAgICAgaWYgKGl0ZXIubmV4dCgp
Lmxpc3RlbmVyID09IGxpc3RlbmVyKSB7Ci0gICAgICAgICAgaXRlci5yZW1vdmUoKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tz
IGludGVyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1lKFZpZGVv
UmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgc3luY2hyb25pemVkIChzdGF0aXN0aWNz
TG9jaykgewotICAgICAgKytmcmFtZXNSZWNlaXZlZDsKLSAgICB9Ci0gICAgZmluYWwgYm9vbGVh
biBkcm9wT2xkRnJhbWU7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAg
aWYgKHJlbmRlclRocmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgICBsb2dEKCJEcm9wcGlu
ZyBmcmFtZSAtIE5vdCBpbml0aWFsaXplZCBvciBhbHJlYWR5IHJlbGVhc2VkLiIpOwotICAgICAg
ICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLSAgICAgIC8vIENoZWNrIGlmIGZwcyByZWR1Y3Rpb24gaXMgYWN0aXZlLgotICAg
ICAgc3luY2hyb25pemVkIChmcHNSZWR1Y3Rpb25Mb2NrKSB7Ci0gICAgICAgIGlmIChtaW5SZW5k
ZXJQZXJpb2ROcyA+IDApIHsKLSAgICAgICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTnMgPSBT
eXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICBpZiAoY3VycmVudFRpbWVOcyA8IG5leHRGcmFt
ZVRpbWVOcykgewotICAgICAgICAgICAgbG9nRCgiRHJvcHBpbmcgZnJhbWUgLSBmcHMgcmVkdWN0
aW9uIGlzIGFjdGl2ZS4iKTsKLSAgICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVE
b25lKGZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
bmV4dEZyYW1lVGltZU5zICs9IG1pblJlbmRlclBlcmlvZE5zOwotICAgICAgICAgIC8vIFRoZSB0
aW1lIGZvciB0aGUgbmV4dCBmcmFtZSBzaG91bGQgYWx3YXlzIGJlIGluIHRoZSBmdXR1cmUuCi0g
ICAgICAgICAgbmV4dEZyYW1lVGltZU5zID0gTWF0aC5tYXgobmV4dEZyYW1lVGltZU5zLCBjdXJy
ZW50VGltZU5zKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgc3luY2hyb25pemVkIChmcmFt
ZUxvY2spIHsKLSAgICAgICAgZHJvcE9sZEZyYW1lID0gKHBlbmRpbmdGcmFtZSAhPSBudWxsKTsK
LSAgICAgICAgaWYgKGRyb3BPbGRGcmFtZSkgewotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVu
ZGVyRnJhbWVEb25lKHBlbmRpbmdGcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGVuZGluZ0Zy
YW1lID0gZnJhbWU7Ci0gICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdChyZW5kZXJGcmFt
ZVJ1bm5hYmxlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGRyb3BPbGRGcmFtZSkgewotICAg
ICAgc3luY2hyb25pemVkIChzdGF0aXN0aWNzTG9jaykgewotICAgICAgICArK2ZyYW1lc0Ryb3Bw
ZWQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgRUdMIHN1cmZh
Y2UuIFRoaXMgZnVuY3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgRUdMIHN1cmZhY2UgaXMgcmVs
ZWFzZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWxlYXNlRWdsU3VyZmFjZShmaW5hbCBSdW5u
YWJsZSBjb21wbGV0aW9uQ2FsbGJhY2spIHsKLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcmVuZGVy
IHRocmVhZCBpcyBubyBsb25nZXIgdG91Y2hpbmcgdGhlIFN1cmZhY2UgYmVmb3JlIHJldHVybmlu
ZyBmcm9tIHRoaXMKLSAgICAvLyBmdW5jdGlvbi4KLSAgICBlZ2xTdXJmYWNlQ3JlYXRpb25SdW5u
YWJsZS5zZXRTdXJmYWNlKG51bGwgLyogc3VyZmFjZSAqLyk7Ci0gICAgc3luY2hyb25pemVkICho
YW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgIT0gbnVsbCkgewot
ICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhlZ2xTdXJmYWNlQ3Jl
YXRpb25SdW5uYWJsZSk7Ci0gICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdEF0RnJvbnRP
ZlF1ZXVlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBpZiAoZWdsQmFzZSAhPSBudWxsKSB7Ci0g
ICAgICAgICAgICAgIGVnbEJhc2UuZGV0YWNoQ3VycmVudCgpOwotICAgICAgICAgICAgICBlZ2xC
YXNlLnJlbGVhc2VTdXJmYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb21wbGV0
aW9uQ2FsbGJhY2sucnVuKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgIH0KLSAgICBjb21wbGV0aW9uQ2FsbGJhY2sucnVuKCk7Ci0gIH0K
LQotICAvKioKLSAgICogTm90aWZ5IHRoYXQgdGhlIHN1cmZhY2Ugc2l6ZSBoYXMgY2hhbmdlZC4K
LSAgICovCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VTaXplQ2hhbmdlZChpbnQgc3VyZmFjZVdpZHRo
LCBpbnQgc3VyZmFjZUhlaWdodCkgewotICAgIGxvZ0QoIlN1cmZhY2Ugc2l6ZSBjaGFuZ2VkOiAi
ICsgc3VyZmFjZVdpZHRoICsgIngiICsgc3VyZmFjZUhlaWdodCk7Ci0gICAgc3luY2hyb25pemVk
IChsYXlvdXRMb2NrKSB7Ci0gICAgICB0aGlzLnN1cmZhY2VXaWR0aCA9IHN1cmZhY2VXaWR0aDsK
LSAgICAgIHRoaXMuc3VyZmFjZUhlaWdodCA9IHN1cmZhY2VIZWlnaHQ7Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIFByaXZhdGUgaGVscGVyIGZ1bmN0aW9uIHRvIHBvc3QgdGFza3Mgc2FmZWx5
LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHBvc3RUb1JlbmRlclRocmVhZChSdW5uYWJsZSBydW5u
YWJsZSkgewotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5k
ZXJUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5w
b3N0KHJ1bm5hYmxlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2xl
YXJTdXJmYWNlT25SZW5kZXJUaHJlYWQoKSB7Ci0gICAgaWYgKGVnbEJhc2UgIT0gbnVsbCAmJiBl
Z2xCYXNlLmhhc1N1cmZhY2UoKSkgewotICAgICAgbG9nRCgiY2xlYXJTdXJmYWNlIik7Ci0gICAg
ICBHTEVTMjAuZ2xDbGVhckNvbG9yKDAgLyogcmVkICovLCAwIC8qIGdyZWVuICovLCAwIC8qIGJs
dWUgKi8sIDAgLyogYWxwaGEgKi8pOwotICAgICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NP
TE9SX0JVRkZFUl9CSVQpOwotICAgICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIH0KLSAg
fQotCi0gIC8qKgotICAgKiBQb3N0IGEgdGFzayB0byBjbGVhciB0aGUgVGV4dHVyZVZpZXcgdG8g
YSB0cmFuc3BhcmVudCB1bmlmb3JtIGNvbG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYXJJ
bWFnZSgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVu
ZGVyVGhyZWFkSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAg
ICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdEF0RnJvbnRPZlF1ZXVlKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgICBjbGVhclN1cmZhY2VPblJlbmRlclRocmVhZCgpOwotICAgICAgICB9Ci0gICAgICB9KTsK
LSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVuZGVycyBhbmQgcmVsZWFzZXMgfHBlbmRpbmdG
cmFtZXwuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVuZGVyRnJhbWVPblJlbmRlclRocmVhZCgp
IHsKLSAgICAvLyBGZXRjaCBhbmQgcmVuZGVyIHxwZW5kaW5nRnJhbWV8LgotICAgIGZpbmFsIFZp
ZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lOwotICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2Nr
KSB7Ci0gICAgICBpZiAocGVuZGluZ0ZyYW1lID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgfQotICAgICAgZnJhbWUgPSBwZW5kaW5nRnJhbWU7Ci0gICAgICBwZW5kaW5nRnJhbWUg
PSBudWxsOwotICAgIH0KLSAgICBpZiAoZWdsQmFzZSA9PSBudWxsIHx8ICFlZ2xCYXNlLmhhc1N1
cmZhY2UoKSkgewotICAgICAgbG9nRCgiRHJvcHBpbmcgZnJhbWUgLSBObyBzdXJmYWNlIik7Ci0g
ICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZmluYWwgbG9uZyBzdGFydFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgp
OwotICAgIGZpbmFsIGZsb2F0W10gdGV4TWF0cml4ID0KLSAgICAgICAgUmVuZGVyZXJDb21tb24u
cm90YXRlVGV4dHVyZU1hdHJpeChmcmFtZS5zYW1wbGluZ01hdHJpeCwgZnJhbWUucm90YXRpb25E
ZWdyZWUpOwotICAgIGZpbmFsIGZsb2F0W10gZHJhd01hdHJpeDsKLQotICAgIC8vIEFmdGVyIGEg
c3VyZmFjZSBzaXplIGNoYW5nZSwgdGhlIEVHTFN1cmZhY2UgbWlnaHQgc3RpbGwgaGF2ZSBhIGJ1
ZmZlciBvZiB0aGUgb2xkIHNpemUgaW4gdGhlCi0gICAgLy8gcGlwZWxpbmUuIFF1ZXJ5aW5nIHRo
ZSBFR0xTdXJmYWNlIHdpbGwgc2hvdyBpZiB0aGUgdW5kZXJseWluZyBidWZmZXIgZGltZW5zaW9u
cyBoYXZlbid0IHlldAotICAgIC8vIGNoYW5nZWQuIFN1Y2ggYSBidWZmZXIgd2lsbCBiZSByZW5k
ZXJlZCBpbmNvcnJlY3RseSwgc28gZmx1c2ggaXQgd2l0aCBhIGJsYWNrIGZyYW1lLgotICAgIHN5
bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAgICAgaW50IHN1cmZhY2VDbGVhckNvdW50ID0g
MDsKLSAgICAgIHdoaWxlIChlZ2xCYXNlLnN1cmZhY2VXaWR0aCgpICE9IHN1cmZhY2VXaWR0aCB8
fCBlZ2xCYXNlLnN1cmZhY2VIZWlnaHQoKSAhPSBzdXJmYWNlSGVpZ2h0KSB7Ci0gICAgICAgICsr
c3VyZmFjZUNsZWFyQ291bnQ7Ci0gICAgICAgIGlmIChzdXJmYWNlQ2xlYXJDb3VudCA+IE1BWF9T
VVJGQUNFX0NMRUFSX0NPVU5UKSB7Ci0gICAgICAgICAgbG9nRCgiRmFpbGVkIHRvIGdldCBzdXJm
YWNlIG9mIGV4cGVjdGVkIHNpemUgLSBkcm9wcGluZyBmcmFtZS4iKTsKLSAgICAgICAgICBWaWRl
b1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGxvZ0QoIlN1cmZhY2Ugc2l6ZSBtaXNtYXRjaCAtIGNsZWFyaW5nIHN1
cmZhY2UuIFNpemU6ICIgKyBlZ2xCYXNlLnN1cmZhY2VXaWR0aCgpICsgIngiCi0gICAgICAgICAg
ICArIGVnbEJhc2Uuc3VyZmFjZUhlaWdodCgpICsgIiBFeHBlY3RlZDogIiArIHN1cmZhY2VXaWR0
aCArICJ4IiArIHN1cmZhY2VIZWlnaHQpOwotICAgICAgICBjbGVhclN1cmZhY2VPblJlbmRlclRo
cmVhZCgpOwotICAgICAgfQotICAgICAgZmluYWwgZmxvYXRbXSBsYXlvdXRNYXRyaXg7Ci0gICAg
ICBpZiAobGF5b3V0QXNwZWN0UmF0aW8gPiAwKSB7Ci0gICAgICAgIGxheW91dE1hdHJpeCA9IFJl
bmRlcmVyQ29tbW9uLmdldExheW91dE1hdHJpeCgKLSAgICAgICAgICAgIG1pcnJvciwgZnJhbWUu
cm90YXRlZFdpZHRoKCkgLyAoZmxvYXQpIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSwgbGF5b3V0QXNw
ZWN0UmF0aW8pOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGF5b3V0TWF0cml4ID0KLSAgICAg
ICAgICAgIG1pcnJvciA/IFJlbmRlcmVyQ29tbW9uLmhvcml6b250YWxGbGlwTWF0cml4KCkgOiBS
ZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpOwotICAgICAgfQotICAgICAgZHJhd01hdHJp
eCA9IFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXModGV4TWF0cml4LCBsYXlvdXRNYXRy
aXgpOwotICAgIH0KLQotICAgIEdMRVMyMC5nbENsZWFyQ29sb3IoMCAvKiByZWQgKi8sIDAgLyog
Z3JlZW4gKi8sIDAgLyogYmx1ZSAqLywgMCAvKiBhbHBoYSAqLyk7Ci0gICAgR0xFUzIwLmdsQ2xl
YXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGlmIChmcmFtZS55dXZGcmFtZSkg
ewotICAgICAgLy8gTWFrZSBzdXJlIFlVViB0ZXh0dXJlcyBhcmUgYWxsb2NhdGVkLgotICAgICAg
aWYgKHl1dlRleHR1cmVzID09IG51bGwpIHsKLSAgICAgICAgeXV2VGV4dHVyZXMgPSBuZXcgaW50
WzNdOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgIHl1
dlRleHR1cmVzW2ldID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8y
RCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHl1dlVwbG9hZGVyLnVwbG9hZFl1dkRhdGEo
Ci0gICAgICAgICAgeXV2VGV4dHVyZXMsIGZyYW1lLndpZHRoLCBmcmFtZS5oZWlnaHQsIGZyYW1l
Lnl1dlN0cmlkZXMsIGZyYW1lLnl1dlBsYW5lcyk7Ci0gICAgICBkcmF3ZXIuZHJhd1l1dih5dXZU
ZXh0dXJlcywgZHJhd01hdHJpeCwgZnJhbWUucm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0ZWRI
ZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICBzdXJmYWNlV2lkdGgsIHN1cmZhY2VIZWlnaHQpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBkcmF3ZXIuZHJhd09lcyhmcmFtZS50ZXh0dXJlSWQsIGRyYXdN
YXRyaXgsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCksIDAsIDAs
Ci0gICAgICAgICAgc3VyZmFjZVdpZHRoLCBzdXJmYWNlSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBm
aW5hbCBsb25nIHN3YXBCdWZmZXJzU3RhcnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAg
ICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0KLSAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTnMg
PSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7
Ci0gICAgICArK2ZyYW1lc1JlbmRlcmVkOwotICAgICAgcmVuZGVyVGltZU5zICs9IChjdXJyZW50
VGltZU5zIC0gc3RhcnRUaW1lTnMpOwotICAgICAgcmVuZGVyU3dhcEJ1ZmZlclRpbWVOcyArPSAo
Y3VycmVudFRpbWVOcyAtIHN3YXBCdWZmZXJzU3RhcnRUaW1lTnMpOwotICAgIH0KLQotICAgIG5v
dGlmeUNhbGxiYWNrcyhmcmFtZSwgdGV4TWF0cml4KTsKLSAgICBWaWRlb1JlbmRlcmVyLnJlbmRl
ckZyYW1lRG9uZShmcmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbm90aWZ5Q2FsbGJhY2tz
KFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lLCBmbG9hdFtdIHRleE1hdHJpeCkgewotICAg
IC8vIE1ha2UgdGVtcG9yYXJ5IGNvcHkgb2YgY2FsbGJhY2sgbGlzdCB0byBhdm9pZCBDb25jdXJy
ZW50TW9kaWZpY2F0aW9uRXhjZXB0aW9uLCBpbiBjYXNlCi0gICAgLy8gY2FsbGJhY2tzIGNhbGwg
YWRkRnJhbWVsaXN0ZW5lciBvciByZW1vdmVGcmFtZUxpc3RlbmVyLgotICAgIGZpbmFsIEFycmF5
TGlzdDxTY2FsZUFuZEZyYW1lTGlzdGVuZXI+IHRtcExpc3Q7Ci0gICAgc3luY2hyb25pemVkIChm
cmFtZUxpc3RlbmVyTG9jaykgewotICAgICAgaWYgKGZyYW1lTGlzdGVuZXJzLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgICAgdG1wTGlzdCA9IG5ldyBBcnJheUxpc3Q8PihmcmFtZUxp
c3RlbmVycyk7Ci0gICAgICBmcmFtZUxpc3RlbmVycy5jbGVhcigpOwotICAgIH0KLQotICAgIGZp
bmFsIGZsb2F0W10gYml0bWFwTWF0cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNl
cygKLSAgICAgICAgUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNlcyh0ZXhNYXRyaXgsCi0g
ICAgICAgICAgICBtaXJyb3IgPyBSZW5kZXJlckNvbW1vbi5ob3Jpem9udGFsRmxpcE1hdHJpeCgp
IDogUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKSksCi0gICAgICAgIFJlbmRlcmVyQ29t
bW9uLnZlcnRpY2FsRmxpcE1hdHJpeCgpKTsKLQotICAgIGZvciAoU2NhbGVBbmRGcmFtZUxpc3Rl
bmVyIHNjYWxlQW5kTGlzdGVuZXIgOiB0bXBMaXN0KSB7Ci0gICAgICBmaW5hbCBpbnQgc2NhbGVk
V2lkdGggPSAoaW50KSAoc2NhbGVBbmRMaXN0ZW5lci5zY2FsZSAqIGZyYW1lLnJvdGF0ZWRXaWR0
aCgpKTsKLSAgICAgIGZpbmFsIGludCBzY2FsZWRIZWlnaHQgPSAoaW50KSAoc2NhbGVBbmRMaXN0
ZW5lci5zY2FsZSAqIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7Ci0KLSAgICAgIGlmIChzY2FsZWRX
aWR0aCA9PSAwIHx8IHNjYWxlZEhlaWdodCA9PSAwKSB7Ci0gICAgICAgIHNjYWxlQW5kTGlzdGVu
ZXIubGlzdGVuZXIub25GcmFtZShudWxsKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0K
LSAgICAgIGlmIChiaXRtYXBUZXh0dXJlRnJhbWVidWZmZXIgPT0gbnVsbCkgewotICAgICAgICBi
aXRtYXBUZXh0dXJlRnJhbWVidWZmZXIgPSBuZXcgR2xUZXh0dXJlRnJhbWVCdWZmZXIoR0xFUzIw
LkdMX1JHQkEpOwotICAgICAgfQotICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyLnNldFNp
emUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0KLSAgICAgIEdMRVMyMC5nbEJpbmRGcmFt
ZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlci5n
ZXRGcmFtZUJ1ZmZlcklkKCkpOwotICAgICAgR0xFUzIwLmdsRnJhbWVidWZmZXJUZXh0dXJlMkQo
R0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBHTEVTMjAuR0xfQ09MT1JfQVRUQUNITUVOVDAsCi0gICAg
ICAgICAgR0xFUzIwLkdMX1RFWFRVUkVfMkQsIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlci5nZXRU
ZXh0dXJlSWQoKSwgMCk7Ci0KLSAgICAgIGlmIChmcmFtZS55dXZGcmFtZSkgewotICAgICAgICBk
cmF3ZXIuZHJhd1l1dih5dXZUZXh0dXJlcywgYml0bWFwTWF0cml4LCBmcmFtZS5yb3RhdGVkV2lk
dGgoKSwgZnJhbWUucm90YXRlZEhlaWdodCgpLAotICAgICAgICAgICAgMCAvKiB2aWV3cG9ydFgg
Ki8sIDAgLyogdmlld3BvcnRZICovLCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIGRyYXdlci5kcmF3T2VzKGZyYW1lLnRleHR1cmVJZCwgYml0bWFw
TWF0cml4LCBmcmFtZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUucm90YXRlZEhlaWdodCgpLAotICAg
ICAgICAgICAgMCAvKiB2aWV3cG9ydFggKi8sIDAgLyogdmlld3BvcnRZICovLCBzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICAgIH0KLQotICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBiaXRt
YXBCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KHNjYWxlZFdpZHRoICogc2NhbGVk
SGVpZ2h0ICogNCk7Ci0gICAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCAwLCBzY2FsZWRXaWR0aCwg
c2NhbGVkSGVpZ2h0KTsKLSAgICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoCi0gICAgICAgICAgMCwg
MCwgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9V
TlNJR05FRF9CWVRFLCBiaXRtYXBCdWZmZXIpOwotCi0gICAgICBHTEVTMjAuZ2xCaW5kRnJhbWVi
dWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgICAgIEdsVXRpbC5jaGVja05vR0xF
UzJFcnJvcigiRWdsUmVuZGVyZXIubm90aWZ5Q2FsbGJhY2tzIik7Ci0KLSAgICAgIGZpbmFsIEJp
dG1hcCBiaXRtYXAgPSBCaXRtYXAuY3JlYXRlQml0bWFwKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQsIEJpdG1hcC5Db25maWcuQVJHQl84ODg4KTsKLSAgICAgIGJpdG1hcC5jb3B5UGl4ZWxzRnJv
bUJ1ZmZlcihiaXRtYXBCdWZmZXIpOwotICAgICAgc2NhbGVBbmRMaXN0ZW5lci5saXN0ZW5lci5v
bkZyYW1lKGJpdG1hcCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgYXZlcmFnZVRp
bWVBc1N0cmluZyhsb25nIHN1bVRpbWVOcywgaW50IGNvdW50KSB7Ci0gICAgcmV0dXJuIChjb3Vu
dCA8PSAwKSA/ICJOQSIgOiBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pY3JvcyhzdW1UaW1lTnMg
LyBjb3VudCkgKyAiIM68cyI7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nU3RhdGlzdGljcygp
IHsKLSAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAg
ICBzeW5jaHJvbml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAgICBmaW5hbCBsb25nIGVsYXBz
ZWRUaW1lTnMgPSBjdXJyZW50VGltZU5zIC0gc3RhdGlzdGljc1N0YXJ0VGltZU5zOwotICAgICAg
aWYgKGVsYXBzZWRUaW1lTnMgPD0gMCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAg
ICBmaW5hbCBmbG9hdCByZW5kZXJGcHMgPSBmcmFtZXNSZW5kZXJlZCAqIFRpbWVVbml0LlNFQ09O
RFMudG9OYW5vcygxKSAvIChmbG9hdCkgZWxhcHNlZFRpbWVOczsKLSAgICAgIGxvZ0QoIkR1cmF0
aW9uOiAiICsgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoZWxhcHNlZFRpbWVOcykgKyAi
IG1zLiIKLSAgICAgICAgICArICIgRnJhbWVzIHJlY2VpdmVkOiAiICsgZnJhbWVzUmVjZWl2ZWQg
KyAiLiIKLSAgICAgICAgICArICIgRHJvcHBlZDogIiArIGZyYW1lc0Ryb3BwZWQgKyAiLiIKLSAg
ICAgICAgICArICIgUmVuZGVyZWQ6ICIgKyBmcmFtZXNSZW5kZXJlZCArICIuIgotICAgICAgICAg
ICsgIiBSZW5kZXIgZnBzOiAiICsgU3RyaW5nLmZvcm1hdCgiJS4xZiIsIHJlbmRlckZwcykgKyAi
LiIKLSAgICAgICAgICArICIgQXZlcmFnZSByZW5kZXIgdGltZTogIiArIGF2ZXJhZ2VUaW1lQXNT
dHJpbmcocmVuZGVyVGltZU5zLCBmcmFtZXNSZW5kZXJlZCkgKyAiLiIKLSAgICAgICAgICArICIg
QXZlcmFnZSBzd2FwQnVmZmVyIHRpbWU6ICIKLSAgICAgICAgICArIGF2ZXJhZ2VUaW1lQXNTdHJp
bmcocmVuZGVyU3dhcEJ1ZmZlclRpbWVOcywgZnJhbWVzUmVuZGVyZWQpICsgIi4iKTsKLSAgICAg
IHJlc2V0U3RhdGlzdGljcyhjdXJyZW50VGltZU5zKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgbG9nRChTdHJpbmcgc3RyaW5nKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgbmFtZSArIHN0
cmluZyk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRmlsZVZpZGVvQ2FwdHVyZXIu
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ZpbGVWaWRlb0NhcHR1cmVyLmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRmlsZVZpZGVvQ2FwdHVy
ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4
dDsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotCi1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyOwotaW1wb3J0IGphdmEu
dXRpbC5UaW1lclRhc2s7Ci1pbXBvcnQgamF2YS5pby5SYW5kb21BY2Nlc3NGaWxlOwotaW1wb3J0
IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVmlkZW9DYXB0dXJlciBp
bXBsZW1lbnRzIFZpZGVvQ2FwdHVyZXIgewotICBwcml2YXRlIGludGVyZmFjZSBWaWRlb1JlYWRl
ciB7Ci0gICAgaW50IGdldEZyYW1lV2lkdGgoKTsKLSAgICBpbnQgZ2V0RnJhbWVIZWlnaHQoKTsK
LSAgICBieXRlW10gZ2V0TmV4dEZyYW1lKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFJlYWQgdmlkZW8gZGF0YSBmcm9tIGZpbGUgZm9yIHRoZSAueTRtIGNvbnRhaW5l
ci4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFZpZGVvUmVhZGVyWTRNIGltcGxlbWVu
dHMgVmlkZW9SZWFkZXIgewotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAi
VmlkZW9SZWFkZXJZNE0iOwotICAgIHByaXZhdGUgZmluYWwgaW50IGZyYW1lV2lkdGg7Ci0gICAg
cHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVIZWlnaHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJh
bWVTaXplOwotCi0gICAgLy8gRmlyc3QgY2hhciBhZnRlciBoZWFkZXIKLSAgICBwcml2YXRlIGZp
bmFsIGxvbmcgdmlkZW9TdGFydDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBZ
NE1fRlJBTUVfREVMSU1FVEVSID0gIkZSQU1FIjsKLQotICAgIHByaXZhdGUgZmluYWwgUmFuZG9t
QWNjZXNzRmlsZSBtZWRpYUZpbGVTdHJlYW07Ci0KLSAgICBwdWJsaWMgaW50IGdldEZyYW1lV2lk
dGgoKSB7Ci0gICAgICByZXR1cm4gZnJhbWVXaWR0aDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50
IGdldEZyYW1lSGVpZ2h0KCkgewotICAgICAgcmV0dXJuIGZyYW1lSGVpZ2h0OwotICAgIH0KLQot
ICAgIHB1YmxpYyBWaWRlb1JlYWRlclk0TShTdHJpbmcgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9u
IHsKLSAgICAgIG1lZGlhRmlsZVN0cmVhbSA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKGZpbGUsICJy
Iik7Ci0gICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwot
ICAgICAgZm9yICg7OykgewotICAgICAgICBpbnQgYyA9IG1lZGlhRmlsZVN0cmVhbS5yZWFkKCk7
Ci0gICAgICAgIGlmIChjID09IC0xKSB7Ci0gICAgICAgICAgLy8gRW5kIG9mIGZpbGUgcmVhY2hl
ZC4KLSAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRm91bmQgZW5kIG9mIGZp
bGUgYmVmb3JlIGVuZCBvZiBoZWFkZXIgZm9yIGZpbGU6ICIgKyBmaWxlKTsKLSAgICAgICAgfQot
ICAgICAgICBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgLy8gRW5kIG9mIGhlYWRlciBmb3Vu
ZC4KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLmFwcGVuZCgo
Y2hhcikgYyk7Ci0gICAgICB9Ci0gICAgICB2aWRlb1N0YXJ0ID0gbWVkaWFGaWxlU3RyZWFtLmdl
dEZpbGVQb2ludGVyKCk7Ci0gICAgICBTdHJpbmcgaGVhZGVyID0gYnVpbGRlci50b1N0cmluZygp
OwotICAgICAgU3RyaW5nW10gaGVhZGVyVG9rZW5zID0gaGVhZGVyLnNwbGl0KCJbIF0iKTsKLSAg
ICAgIGludCB3ID0gMDsKLSAgICAgIGludCBoID0gMDsKLSAgICAgIFN0cmluZyBjb2xvclNwYWNl
ID0gIiI7Ci0gICAgICBmb3IgKFN0cmluZyB0b2sgOiBoZWFkZXJUb2tlbnMpIHsKLSAgICAgICAg
Y2hhciBjID0gdG9rLmNoYXJBdCgwKTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAg
Y2FzZSAnVyc6Ci0gICAgICAgICAgICB3ID0gSW50ZWdlci5wYXJzZUludCh0b2suc3Vic3RyaW5n
KDEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAg
ICAgaCA9IEludGVnZXIucGFyc2VJbnQodG9rLnN1YnN0cmluZygxKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlICdDJzoKLSAgICAgICAgICAgIGNvbG9yU3BhY2UgPSB0b2su
c3Vic3RyaW5nKDEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJDb2xvciBzcGFjZTogIiArIGNvbG9yU3BhY2UpOwotICAgICAg
aWYgKCFjb2xvclNwYWNlLmVxdWFscygiNDIwIikgJiYgIWNvbG9yU3BhY2UuZXF1YWxzKCI0MjBt
cGVnMiIpKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0g
ICAgICAgICAgICAiRG9lcyBub3Qgc3VwcG9ydCBhbnkgb3RoZXIgY29sb3Igc3BhY2UgdGhhbiBJ
NDIwIG9yIEk0MjBtcGVnMiIpOwotICAgICAgfQotICAgICAgaWYgKCh3ICUgMikgPT0gMSB8fCAo
aCAlIDIpID09IDEpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlv
bigiRG9lcyBub3Qgc3VwcG9ydCBvZGQgd2lkdGggb3IgaGVpZ2h0Iik7Ci0gICAgICB9Ci0gICAg
ICBmcmFtZVdpZHRoID0gdzsKLSAgICAgIGZyYW1lSGVpZ2h0ID0gaDsKLSAgICAgIGZyYW1lU2l6
ZSA9IHcgKiBoICogMyAvIDI7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiZnJhbWUgZGltOiAoIiAr
IHcgKyAiLCAiICsgaCArICIpIGZyYW1lU2l6ZTogIiArIGZyYW1lU2l6ZSk7Ci0gICAgfQotCi0g
ICAgcHVibGljIGJ5dGVbXSBnZXROZXh0RnJhbWUoKSB7Ci0gICAgICBieXRlW10gZnJhbWUgPSBu
ZXcgYnl0ZVtmcmFtZVNpemVdOwotICAgICAgdHJ5IHsKLSAgICAgICAgYnl0ZVtdIGZyYW1lRGVs
aW0gPSBuZXcgYnl0ZVtZNE1fRlJBTUVfREVMSU1FVEVSLmxlbmd0aCgpICsgMV07Ci0gICAgICAg
IGlmIChtZWRpYUZpbGVTdHJlYW0ucmVhZChmcmFtZURlbGltKSA8IGZyYW1lRGVsaW0ubGVuZ3Ro
KSB7Ci0gICAgICAgICAgLy8gV2UgcmVhY2ggZW5kIG9mIGZpbGUsIGxvb3AKLSAgICAgICAgICBt
ZWRpYUZpbGVTdHJlYW0uc2Vlayh2aWRlb1N0YXJ0KTsKLSAgICAgICAgICBpZiAobWVkaWFGaWxl
U3RyZWFtLnJlYWQoZnJhbWVEZWxpbSkgPCBmcmFtZURlbGltLmxlbmd0aCkgewotICAgICAgICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yIGxvb3BpbmcgdmlkZW8iKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGZyYW1lRGVsaW1TdHIgPSBuZXcg
U3RyaW5nKGZyYW1lRGVsaW0pOwotICAgICAgICBpZiAoIWZyYW1lRGVsaW1TdHIuZXF1YWxzKFk0
TV9GUkFNRV9ERUxJTUVURVIgKyAiXG4iKSkgewotICAgICAgICAgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKAotICAgICAgICAgICAgICAiRnJhbWVzIHNob3VsZCBiZSBkZWxpbWl0ZWQgYnkg
RlJBTUUgcGx1cyBuZXdsaW5lLCBmb3VuZCBkZWxpbXRlciB3YXM6ICciCi0gICAgICAgICAgICAg
ICsgZnJhbWVEZWxpbVN0ciArICInIik7Ci0gICAgICAgIH0KLSAgICAgICAgbWVkaWFGaWxlU3Ry
ZWFtLnJlYWRGdWxseShmcmFtZSk7Ci0gICAgICAgIGJ5dGVbXSBudjIxRnJhbWUgPSBuZXcgYnl0
ZVtmcmFtZVNpemVdOwotICAgICAgICBuYXRpdmVJNDIwVG9OVjIxKGZyYW1lLCBmcmFtZVdpZHRo
LCBmcmFtZUhlaWdodCwgbnYyMUZyYW1lKTsKLSAgICAgICAgcmV0dXJuIG52MjFGcmFtZTsKLSAg
ICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB7
Ci0gICAgICB0cnkgewotICAgICAgICBtZWRpYUZpbGVTdHJlYW0uY2xvc2UoKTsKLSAgICAgIH0g
Y2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIlByb2JsZW0g
Y2xvc2luZyBmaWxlIiwgZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5h
bCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJGaWxlVmlkZW9DYXB0dXJlciI7Ci0gIHByaXZhdGUgZmlu
YWwgVmlkZW9SZWFkZXIgdmlkZW9SZWFkZXI7Ci0gIHByaXZhdGUgQ2FwdHVyZXJPYnNlcnZlciBj
YXB0dXJlck9ic2VydmVyOwotICBwcml2YXRlIGZpbmFsIFRpbWVyIHRpbWVyID0gbmV3IFRpbWVy
KCk7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBUaW1lclRhc2sgdGlja1Rhc2sgPSBuZXcgVGltZXJUYXNr
KCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIHRpY2so
KTsKLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RnJhbWVXaWR0aCgpIHsKLSAgICBy
ZXR1cm4gdmlkZW9SZWFkZXIuZ2V0RnJhbWVXaWR0aCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQg
Z2V0RnJhbWVIZWlnaHQoKSB7Ci0gICAgcmV0dXJuIHZpZGVvUmVhZGVyLmdldEZyYW1lSGVpZ2h0
KCk7Ci0gIH0KLQotICBwdWJsaWMgRmlsZVZpZGVvQ2FwdHVyZXIoU3RyaW5nIGlucHV0RmlsZSkg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgdmlkZW9SZWFkZXIgPSBuZXcg
VmlkZW9SZWFkZXJZNE0oaW5wdXRGaWxlKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ291bGQgbm90IG9wZW4gdmlkZW8gZmlsZTogIiArIGlu
cHV0RmlsZSk7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYnl0ZVtd
IGdldE5leHRGcmFtZSgpIHsKLSAgICByZXR1cm4gdmlkZW9SZWFkZXIuZ2V0TmV4dEZyYW1lKCk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0aWNrKCkgewotICAgIGZpbmFsIGxvbmcgY2FwdHVyZVRp
bWVOcyA9IFRpbWVVbml0Lk1JTExJU0VDT05EUy50b05hbm9zKFN5c3RlbUNsb2NrLmVsYXBzZWRS
ZWFsdGltZSgpKTsKLQotICAgIGJ5dGVbXSBmcmFtZURhdGEgPSBnZXROZXh0RnJhbWUoKTsKLSAg
ICBjYXB0dXJlck9ic2VydmVyLm9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIGZy
YW1lRGF0YSwgZ2V0RnJhbWVXaWR0aCgpLCBnZXRGcmFtZUhlaWdodCgpLCAwLCBjYXB0dXJlVGlt
ZU5zKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN1cmZh
Y2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDb250ZXh0IGFwcGxpY2F0aW9u
Q29udGV4dCwKLSAgICAgIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcikgewotICAg
IHRoaXMuY2FwdHVyZXJPYnNlcnZlciA9IGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgc3RhcnRDYXB0dXJlKGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IGZyYW1lcmF0ZSkgewotICAgIHRpbWVyLnNjaGVkdWxlKHRpY2tUYXNrLCAwLCAxMDAwIC8g
ZnJhbWVyYXRlKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wQ2FwdHVy
ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgdGltZXIuY2FuY2VsKCk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdChpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICAvLyBFbXB0eSBvbiBwdXJw
b3NlCi0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB2
aWRlb1JlYWRlci5jbG9zZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFu
IGlzU2NyZWVuY2FzdCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUk0MjBUb05WMjEoYnl0ZVtdIHNyYywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBieXRlW10gZHN0KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xSZWN0
RHJhd2VyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXIu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXIu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMTFFeHQ7
Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGphdmEubmlvLkZsb2F0QnVm
ZmVyOwotaW1wb3J0IGphdmEudXRpbC5JZGVudGl0eUhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGls
Lk1hcDsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgdG8gZHJhdyBhbiBvcGFxdWUgcXVhZCBvbiB0
aGUgdGFyZ2V0IHZpZXdwb3J0IGxvY2F0aW9uLiBSb3RhdGlvbiwgbWlycm9yLCBhbmQKLSAqIGNy
b3BwaW5nIGlzIHNwZWNpZmllZCB1c2luZyBhIDR4NCB0ZXh0dXJlIGNvb3JkaW5hdGUgdHJhbnNm
b3JtIG1hdHJpeC4gVGhlIGZyYW1lIGlucHV0IGNhbiBlaXRoZXIKLSAqIGJlIGFuIE9FUyB0ZXh0
dXJlIG9yIFlVViB0ZXh0dXJlcyBpbiBJNDIwIGZvcm1hdC4gVGhlIEdMIHN0YXRlIG11c3QgYmUg
cHJlc2VydmVkIGJldHdlZW4gZHJhdwotICogY2FsbHMsIHRoaXMgaXMgaW50ZW50aW9uYWwgdG8g
bWF4aW1pemUgcGVyZm9ybWFuY2UuIFRoZSBmdW5jdGlvbiByZWxlYXNlKCkgbXVzdCBiZSBjYWxs
ZWQKLSAqIG1hbnVhbGx5IHRvIGZyZWUgdGhlIHJlc291cmNlcyBoZWxkIGJ5IHRoaXMgb2JqZWN0
LgotICovCi1wdWJsaWMgY2xhc3MgR2xSZWN0RHJhd2VyIGltcGxlbWVudHMgUmVuZGVyZXJDb21t
b24uR2xEcmF3ZXIgewotICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gIC8vIFNpbXBsZSB2ZXJ0ZXgg
c2hhZGVyLCB1c2VkIGZvciBib3RoIFlVViBhbmQgT0VTLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVkVSVEVYX1NIQURFUl9TVFJJTkcgPQotICAgICAgICAidmFyeWluZyB2ZWMyIGlu
dGVycF90YztcbiIKLSAgICAgICsgImF0dHJpYnV0ZSB2ZWM0IGluX3BvcztcbiIKLSAgICAgICsg
ImF0dHJpYnV0ZSB2ZWM0IGluX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ1bmlmb3Jt
IG1hdDQgdGV4TWF0cml4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4oKSB7
XG4iCi0gICAgICArICIgICAgZ2xfUG9zaXRpb24gPSBpbl9wb3M7XG4iCi0gICAgICArICIgICAg
aW50ZXJwX3RjID0gKHRleE1hdHJpeCAqIGluX3RjKS54eTtcbiIKLSAgICAgICsgIn1cbiI7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFlVVl9GUkFHTUVOVF9TSEFERVJfU1RSSU5H
ID0KLSAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgotICAgICAgKyAidmFyeWlu
ZyB2ZWMyIGludGVycF90YztcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBzYW1w
bGVyMkQgeV90ZXg7XG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleDtcbiIKLSAg
ICAgICsgInVuaWZvcm0gc2FtcGxlcjJEIHZfdGV4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICAr
ICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAvLyBDU0MgYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cu
Zm91cmNjLm9yZy9mY2N5dnJnYi5waHAKLSAgICAgICsgIiAgZmxvYXQgeSA9IHRleHR1cmUyRCh5
X3RleCwgaW50ZXJwX3RjKS5yO1xuIgotICAgICAgKyAiICBmbG9hdCB1ID0gdGV4dHVyZTJEKHVf
dGV4LCBpbnRlcnBfdGMpLnIgLSAwLjU7XG4iCi0gICAgICArICIgIGZsb2F0IHYgPSB0ZXh0dXJl
MkQodl90ZXgsIGludGVycF90YykuciAtIDAuNTtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNCh5ICsgMS40MDMgKiB2LCAiCi0gICAgICArICIgICAgICAgICAgICAgICAgICAgICAg
eSAtIDAuMzQ0ICogdSAtIDAuNzE0ICogdiwgIgotICAgICAgKyAiICAgICAgICAgICAgICAgICAg
ICAgIHkgKyAxLjc3ICogdSwgMSk7XG4iCi0gICAgICArICJ9XG4iOwotCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIFN0cmluZyBSR0JfRlJBR01FTlRfU0hBREVSX1NUUklORyA9Ci0gICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICsgInZhcnlpbmcgdmVjMiBpbnRlcnBf
dGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gc2FtcGxlcjJEIHJnYl90ZXg7
XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICsgIiAg
Z2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKHJnYl90ZXgsIGludGVycF90Yyk7XG4iCi0gICAgICAr
ICJ9XG4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPRVNfRlJBR01FTlRfU0hB
REVSX1NUUklORyA9Ci0gICAgICAgICIjZXh0ZW5zaW9uIEdMX09FU19FR0xfaW1hZ2VfZXh0ZXJu
YWwgOiByZXF1aXJlXG4iCi0gICAgICArICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAg
ICAgICsgInZhcnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsg
InVuaWZvcm0gc2FtcGxlckV4dGVybmFsT0VTIG9lc190ZXg7XG4iCi0gICAgICArICJcbiIKLSAg
ICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVy
ZTJEKG9lc190ZXgsIGludGVycF90Yyk7XG4iCi0gICAgICArICJ9XG4iOwotICAvLyBjbGFuZy1m
b3JtYXQgb24KLQotICAvLyBWZXJ0ZXggY29vcmRpbmF0ZXMgaW4gTm9ybWFsaXplZCBEZXZpY2Ug
Q29vcmRpbmF0ZXMsIGkuZS4gKC0xLCAtMSkgaXMgYm90dG9tLWxlZnQgYW5kICgxLCAxKSBpcwot
ICAvLyB0b3AtcmlnaHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0QnVmZmVyIEZVTExf
UkVDVEFOR0xFX0JVRiA9IEdsVXRpbC5jcmVhdGVGbG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0g
ICAgICAtMS4wZiwgLTEuMGYsIC8vIEJvdHRvbSBsZWZ0LgotICAgICAgMS4wZiwgLTEuMGYsIC8v
IEJvdHRvbSByaWdodC4KLSAgICAgIC0xLjBmLCAxLjBmLCAvLyBUb3AgbGVmdC4KLSAgICAgIDEu
MGYsIDEuMGYsIC8vIFRvcCByaWdodC4KLSAgfSk7Ci0KLSAgLy8gVGV4dHVyZSBjb29yZGluYXRl
cyAtICgwLCAwKSBpcyBib3R0b20tbGVmdCBhbmQgKDEsIDEpIGlzIHRvcC1yaWdodC4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgRmxvYXRCdWZmZXIgRlVMTF9SRUNUQU5HTEVfVEVYX0JVRiA9IEds
VXRpbC5jcmVhdGVGbG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0gICAgICAwLjBmLCAwLjBmLCAv
LyBCb3R0b20gbGVmdC4KLSAgICAgIDEuMGYsIDAuMGYsIC8vIEJvdHRvbSByaWdodC4KLSAgICAg
IDAuMGYsIDEuMGYsIC8vIFRvcCBsZWZ0LgotICAgICAgMS4wZiwgMS4wZiAvLyBUb3AgcmlnaHQu
Ci0gIH0pOwotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFNoYWRlciB7Ci0gICAgcHVibGljIGZp
bmFsIEdsU2hhZGVyIGdsU2hhZGVyOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdGV4TWF0cml4TG9j
YXRpb247Ci0KLSAgICBwdWJsaWMgU2hhZGVyKFN0cmluZyBmcmFnbWVudFNoYWRlcikgewotICAg
ICAgdGhpcy5nbFNoYWRlciA9IG5ldyBHbFNoYWRlcihWRVJURVhfU0hBREVSX1NUUklORywgZnJh
Z21lbnRTaGFkZXIpOwotICAgICAgdGhpcy50ZXhNYXRyaXhMb2NhdGlvbiA9IGdsU2hhZGVyLmdl
dFVuaWZvcm1Mb2NhdGlvbigidGV4TWF0cml4Iik7Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhlIGtl
eXMgYXJlIG9uZSBvZiB0aGUgZnJhZ21lbnRzIHNoYWRlcnMgYWJvdmUuCi0gIHByaXZhdGUgZmlu
YWwgTWFwPFN0cmluZywgU2hhZGVyPiBzaGFkZXJzID0gbmV3IElkZW50aXR5SGFzaE1hcDxTdHJp
bmcsIFNoYWRlcj4oKTsKLQotICAvKioKLSAgICogRHJhdyBhbiBPRVMgdGV4dHVyZSBmcmFtZSB3
aXRoIHNwZWNpZmllZCB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gUmVxdWlyZWQgcmVz
b3VyY2VzIGFyZQotICAgKiBhbGxvY2F0ZWQgYXQgdGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5j
dGlvbi4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBkcmF3T2VzKGludCBvZXNU
ZXh0dXJlSWQsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVp
Z2h0LAotICAgICAgaW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lk
dGgsIGludCB2aWV3cG9ydEhlaWdodCkgewotICAgIHByZXBhcmVTaGFkZXIoT0VTX0ZSQUdNRU5U
X1NIQURFUl9TVFJJTkcsIHRleE1hdHJpeCk7Ci0gICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShH
TEVTMjAuR0xfVEVYVFVSRTApOwotICAgIC8vIHVwZGF0ZVRleEltYWdlKCkgbWF5IGJlIGNhbGxl
ZCBmcm9tIGFub3RoZXIgdGhyZWFkIGluIGFub3RoZXIgRUdMIGNvbnRleHQsIHNvIHdlIG5lZWQg
dG8KLSAgICAvLyBiaW5kL3VuYmluZCB0aGUgdGV4dHVyZSBpbiBlYWNoIGRyYXcgY2FsbCBzbyB0
aGF0IEdMRVMgdW5kZXJzdGFkcyBpdCdzIGEgbmV3IHRleHR1cmUuCi0gICAgR0xFUzIwLmdsQmlu
ZFRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCBvZXNUZXh0dXJlSWQp
OwotICAgIGRyYXdSZWN0YW5nbGUodmlld3BvcnRYLCB2aWV3cG9ydFksIHZpZXdwb3J0V2lkdGgs
IHZpZXdwb3J0SGVpZ2h0KTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMTFFeHQuR0xf
VEVYVFVSRV9FWFRFUk5BTF9PRVMsIDApOwotICB9Ci0KLSAgLyoqCi0gICAqIERyYXcgYSBSR0Io
QSkgdGV4dHVyZSBmcmFtZSB3aXRoIHNwZWNpZmllZCB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uIG1h
dHJpeC4gUmVxdWlyZWQgcmVzb3VyY2VzCi0gICAqIGFyZSBhbGxvY2F0ZWQgYXQgdGhlIGZpcnN0
IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBkcmF3UmdiKGludCB0ZXh0dXJlSWQsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVXaWR0
aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAgaW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0WSwg
aW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCkgewotICAgIHByZXBhcmVTaGFk
ZXIoUkdCX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcsIHRleE1hdHJpeCk7Ci0gICAgR0xFUzIwLmds
QWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0
dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIGRyYXdSZWN0YW5nbGUo
dmlld3BvcnRYLCB2aWV3cG9ydFksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTsKLSAg
ICAvLyBVbmJpbmQgdGhlIHRleHR1cmUgYXMgYSBwcmVjYXV0aW9uLgotICAgIEdMRVMyMC5nbEJp
bmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwKTsKLSAgfQotCi0gIC8qKgotICAgKiBE
cmF3IGEgWVVWIGZyYW1lIHdpdGggc3BlY2lmaWVkIHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0
cml4LiBSZXF1aXJlZCByZXNvdXJjZXMgYXJlCi0gICAqIGFsbG9jYXRlZCBhdCB0aGUgZmlyc3Qg
Y2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IGRyYXdZdXYoaW50W10geXV2VGV4dHVyZXMsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVX
aWR0aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAgaW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0
WSwgaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCkgewotICAgIHByZXBhcmVT
aGFkZXIoWVVWX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcsIHRleE1hdHJpeCk7Ci0gICAgLy8gQmlu
ZCB0aGUgdGV4dHVyZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAg
IEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICBH
TEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgeXV2VGV4dHVyZXNbaV0p
OwotICAgIH0KLSAgICBkcmF3UmVjdGFuZ2xlKHZpZXdwb3J0WCwgdmlld3BvcnRZLCB2aWV3cG9y
dFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgLy8gVW5iaW5kIHRoZSB0ZXh0dXJlcyBhcyBh
IHByZWNhdXRpb24uLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICBH
TEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCArIGkpOwotICAgICAgR0xF
UzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBkcmF3UmVjdGFuZ2xlKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KSB7Ci0gICAgLy8gRHJhdyBxdWFkLgotICAgIEdMRVMyMC5nbFZpZXdwb3J0KHgs
IHksIHdpZHRoLCBoZWlnaHQpOwotICAgIEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RS
SUFOR0xFX1NUUklQLCAwLCA0KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmVwYXJlU2hhZGVy
KFN0cmluZyBmcmFnbWVudFNoYWRlciwgZmxvYXRbXSB0ZXhNYXRyaXgpIHsKLSAgICBmaW5hbCBT
aGFkZXIgc2hhZGVyOwotICAgIGlmIChzaGFkZXJzLmNvbnRhaW5zS2V5KGZyYWdtZW50U2hhZGVy
KSkgewotICAgICAgc2hhZGVyID0gc2hhZGVycy5nZXQoZnJhZ21lbnRTaGFkZXIpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAvLyBMYXp5IGFsbG9jYXRpb24uCi0gICAgICBzaGFkZXIgPSBuZXcgU2hh
ZGVyKGZyYWdtZW50U2hhZGVyKTsKLSAgICAgIHNoYWRlcnMucHV0KGZyYWdtZW50U2hhZGVyLCBz
aGFkZXIpOwotICAgICAgc2hhZGVyLmdsU2hhZGVyLnVzZVByb2dyYW0oKTsKLSAgICAgIC8vIElu
aXRpYWxpemUgZnJhZ21lbnQgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLgotICAgICAgaWYgKGZyYWdt
ZW50U2hhZGVyID09IFlVVl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HKSB7Ci0gICAgICAgIEdMRVMy
MC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ5X3RleCIp
LCAwKTsKLSAgICAgICAgR0xFUzIwLmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlm
b3JtTG9jYXRpb24oInVfdGV4IiksIDEpOwotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hh
ZGVyLmdsU2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigidl90ZXgiKSwgMik7Ci0gICAgICB9IGVs
c2UgaWYgKGZyYWdtZW50U2hhZGVyID09IFJHQl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HKSB7Ci0g
ICAgICAgIEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0
aW9uKCJyZ2JfdGV4IiksIDApOwotICAgICAgfSBlbHNlIGlmIChmcmFnbWVudFNoYWRlciA9PSBP
RVNfRlJBR01FTlRfU0hBREVSX1NUUklORykgewotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWko
c2hhZGVyLmdsU2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigib2VzX3RleCIpLCAwKTsKLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVua25v
d24gZnJhZ21lbnQgc2hhZGVyOiAiICsgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgfQotICAgICAg
R2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJJbml0aWFsaXplIGZyYWdtZW50IHNoYWRlciB1bmlm
b3JtIHZhbHVlcy4iKTsKLSAgICAgIC8vIEluaXRpYWxpemUgdmVydGV4IHNoYWRlciBhdHRyaWJ1
dGVzLgotICAgICAgc2hhZGVyLmdsU2hhZGVyLnNldFZlcnRleEF0dHJpYkFycmF5KCJpbl9wb3Mi
LCAyLCBGVUxMX1JFQ1RBTkdMRV9CVUYpOwotICAgICAgc2hhZGVyLmdsU2hhZGVyLnNldFZlcnRl
eEF0dHJpYkFycmF5KCJpbl90YyIsIDIsIEZVTExfUkVDVEFOR0xFX1RFWF9CVUYpOwotICAgIH0K
LSAgICBzaGFkZXIuZ2xTaGFkZXIudXNlUHJvZ3JhbSgpOwotICAgIC8vIENvcHkgdGhlIHRleHR1
cmUgdHJhbnNmb3JtYXRpb24gbWF0cml4IG92ZXIuCi0gICAgR0xFUzIwLmdsVW5pZm9ybU1hdHJp
eDRmdihzaGFkZXIudGV4TWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCB0ZXhNYXRyaXgsIDApOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgYWxsIEdMRVMgcmVzb3VyY2VzLiBUaGlzIG5lZWRz
IHRvIGJlIGRvbmUgbWFudWFsbHksIG90aGVyd2lzZSB0aGUgcmVzb3VyY2VzIGFyZSBsZWFrZWQu
Ci0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBmb3Ig
KFNoYWRlciBzaGFkZXIgOiBzaGFkZXJzLnZhbHVlcygpKSB7Ci0gICAgICBzaGFkZXIuZ2xTaGFk
ZXIucmVsZWFzZSgpOwotICAgIH0KLSAgICBzaGFkZXJzLmNsZWFyKCk7Ci0gIH0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvR2xTaGFkZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0dsU2hhZGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvR2xTaGFkZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5n
bC5HTEVTMjA7Ci0KLWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLQotLy8gSGVscGVyIGNs
YXNzIGZvciBoYW5kbGluZyBPcGVuR0wgc2hhZGVycyBhbmQgc2hhZGVyIHByb2dyYW1zLgotcHVi
bGljIGNsYXNzIEdsU2hhZGVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9
ICJHbFNoYWRlciI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvbXBpbGVTaGFkZXIoaW50IHNo
YWRlclR5cGUsIFN0cmluZyBzb3VyY2UpIHsKLSAgICBmaW5hbCBpbnQgc2hhZGVyID0gR0xFUzIw
LmdsQ3JlYXRlU2hhZGVyKHNoYWRlclR5cGUpOwotICAgIGlmIChzaGFkZXIgPT0gMCkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImdsQ3JlYXRlU2hhZGVyKCkgZmFpbGVkLiBH
TEVTMjAgZXJyb3I6ICIgKyBHTEVTMjAuZ2xHZXRFcnJvcigpKTsKLSAgICB9Ci0gICAgR0xFUzIw
LmdsU2hhZGVyU291cmNlKHNoYWRlciwgc291cmNlKTsKLSAgICBHTEVTMjAuZ2xDb21waWxlU2hh
ZGVyKHNoYWRlcik7Ci0gICAgaW50W10gY29tcGlsZVN0YXR1cyA9IG5ldyBpbnRbXSB7R0xFUzIw
LkdMX0ZBTFNFfTsKLSAgICBHTEVTMjAuZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMRVMyMC5HTF9D
T01QSUxFX1NUQVRVUywgY29tcGlsZVN0YXR1cywgMCk7Ci0gICAgaWYgKGNvbXBpbGVTdGF0dXNb
MF0gIT0gR0xFUzIwLkdMX1RSVUUpIHsKLSAgICAgIExvZ2dpbmcuZSgKLSAgICAgICAgICBUQUcs
ICJDb3VsZCBub3QgY29tcGlsZSBzaGFkZXIgIiArIHNoYWRlclR5cGUgKyAiOiIgKyBHTEVTMjAu
Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpOwotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oR0xFUzIwLmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTsKLSAgICB9Ci0gICAgR2xV
dGlsLmNoZWNrTm9HTEVTMkVycm9yKCJjb21waWxlU2hhZGVyIik7Ci0gICAgcmV0dXJuIHNoYWRl
cjsKLSAgfQotCi0gIHByaXZhdGUgaW50IHByb2dyYW07Ci0KLSAgcHVibGljIEdsU2hhZGVyKFN0
cmluZyB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyBmcmFnbWVudFNvdXJjZSkgewotICAgIGZpbmFsIGlu
dCB2ZXJ0ZXhTaGFkZXIgPSBjb21waWxlU2hhZGVyKEdMRVMyMC5HTF9WRVJURVhfU0hBREVSLCB2
ZXJ0ZXhTb3VyY2UpOwotICAgIGZpbmFsIGludCBmcmFnbWVudFNoYWRlciA9IGNvbXBpbGVTaGFk
ZXIoR0xFUzIwLkdMX0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRTb3VyY2UpOwotICAgIHByb2dy
YW0gPSBHTEVTMjAuZ2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgaWYgKHByb2dyYW0gPT0gMCkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImdsQ3JlYXRlUHJvZ3JhbSgpIGZhaWxl
ZC4gR0xFUzIwIGVycm9yOiAiICsgR0xFUzIwLmdsR2V0RXJyb3IoKSk7Ci0gICAgfQotICAgIEdM
RVMyMC5nbEF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwotICAgIEdMRVMyMC5n
bEF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgR0xFUzIwLmdsTGlu
a1Byb2dyYW0ocHJvZ3JhbSk7Ci0gICAgaW50W10gbGlua1N0YXR1cyA9IG5ldyBpbnRbXSB7R0xF
UzIwLkdMX0ZBTFNFfTsKLSAgICBHTEVTMjAuZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xFUzIw
LkdMX0xJTktfU1RBVFVTLCBsaW5rU3RhdHVzLCAwKTsKLSAgICBpZiAobGlua1N0YXR1c1swXSAh
PSBHTEVTMjAuR0xfVFJVRSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNvdWxkIG5vdCBsaW5r
IHByb2dyYW06ICIgKyBHTEVTMjAuZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihHTEVTMjAuZ2xHZXRQcm9ncmFtSW5mb0xvZyhw
cm9ncmFtKSk7Ci0gICAgfQotICAgIC8vIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiBv
ZiBnbExpbmtQcm9ncmFtKCk6Ci0gICAgLy8gIkFmdGVyIHRoZSBsaW5rIG9wZXJhdGlvbiwgYXBw
bGljYXRpb25zIGFyZSBmcmVlIHRvIG1vZGlmeSBhdHRhY2hlZCBzaGFkZXIgb2JqZWN0cywgY29t
cGlsZQotICAgIC8vIGF0dGFjaGVkIHNoYWRlciBvYmplY3RzLCBkZXRhY2ggc2hhZGVyIG9iamVj
dHMsIGRlbGV0ZSBzaGFkZXIgb2JqZWN0cywgYW5kIGF0dGFjaCBhZGRpdGlvbmFsCi0gICAgLy8g
c2hhZGVyIG9iamVjdHMuIE5vbmUgb2YgdGhlc2Ugb3BlcmF0aW9ucyBhZmZlY3RzIHRoZSBpbmZv
cm1hdGlvbiBsb2cgb3IgdGhlIHByb2dyYW0gdGhhdCBpcwotICAgIC8vIHBhcnQgb2YgdGhlIHBy
b2dyYW0gb2JqZWN0LiIKLSAgICAvLyBCdXQgaW4gcHJhY3RpY2UsIGRldGFjaGluZyBzaGFkZXJz
IGZyb20gdGhlIHByb2dyYW0gc2VlbXMgdG8gYnJlYWsgc29tZSBkZXZpY2VzLiBEZWxldGluZyB0
aGUKLSAgICAvLyBzaGFkZXJzIGFyZSBmaW5lIGhvd2V2ZXIgLSBpdCB3aWxsIGRlbGV0ZSB0aGVt
IHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgcHJvZ3JhbS4KLSAgICBHTEVT
MjAuZ2xEZWxldGVTaGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBHTEVTMjAuZ2xEZWxldGVTaGFk
ZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiQ3JlYXRp
bmcgR2xTaGFkZXIiKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0QXR0cmliTG9jYXRpb24oU3Ry
aW5nIGxhYmVsKSB7Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0K
LSAgICBpbnQgbG9jYXRpb24gPSBHTEVTMjAuZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBs
YWJlbCk7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgJyIgKyBsYWJlbCArICInIGluIHByb2dyYW0iKTsK
LSAgICB9Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEVuYWJsZSBh
bmQgdXBsb2FkIGEgdmVydGV4IGFycmF5IGZvciBhdHRyaWJ1dGUgfGxhYmVsfC4gVGhlIHZlcnRl
eCBkYXRhIGlzIHNwZWNpZmllZCBpbgotICAgKiB8YnVmZmVyfCB3aXRoIHxkaW1lbnNpb258IG51
bWJlciBvZiBjb21wb25lbnRzIHBlciB2ZXJ0ZXguCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRW
ZXJ0ZXhBdHRyaWJBcnJheShTdHJpbmcgbGFiZWwsIGludCBkaW1lbnNpb24sIEZsb2F0QnVmZmVy
IGJ1ZmZlcikgewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVsZWFzZWQiKTsKLSAgICB9Ci0g
ICAgaW50IGxvY2F0aW9uID0gZ2V0QXR0cmliTG9jYXRpb24obGFiZWwpOwotICAgIEdMRVMyMC5n
bEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGxvY2F0aW9uKTsKLSAgICBHTEVTMjAuZ2xWZXJ0ZXhB
dHRyaWJQb2ludGVyKGxvY2F0aW9uLCBkaW1lbnNpb24sIEdMRVMyMC5HTF9GTE9BVCwgZmFsc2Us
IDAsIGJ1ZmZlcik7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJzZXRWZXJ0ZXhBdHRy
aWJBcnJheSIpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRVbmlmb3JtTG9jYXRpb24oU3RyaW5n
IGxhYmVsKSB7Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50
aW1lRXhjZXB0aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAg
ICBpbnQgbG9jYXRpb24gPSBHTEVTMjAuZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbGFi
ZWwpOwotICAgIGlmIChsb2NhdGlvbiA8IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlIHVuaWZvcm0gJyIgKyBsYWJlbCArICInIGluIHByb2dy
YW0iKTsKLSAgICB9Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
dXNlUHJvZ3JhbSgpIHsKLSAgICBpZiAocHJvZ3JhbSA9PSAtMSkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oIlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0gICAg
fQotICAgIEdMRVMyMC5nbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJnbFVzZVByb2dyYW0iKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2Uo
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkRlbGV0aW5nIHNoYWRlci4iKTsKLSAgICAvLyBEZWxl
dGUgcHJvZ3JhbSwgYXV0b21hdGljYWxseSBkZXRhY2hpbmcgYW55IHNoYWRlcnMgZnJvbSBpdC4K
LSAgICBpZiAocHJvZ3JhbSAhPSAtMSkgewotICAgICAgR0xFUzIwLmdsRGVsZXRlUHJvZ3JhbShw
cm9ncmFtKTsKLSAgICAgIHByb2dyYW0gPSAtMTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvR2xUZXh0dXJlRnJhbWVCdWZmZXIuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL0dsVGV4dHVyZUZyYW1lQnVmZmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvR2xUZXh0dXJlRnJhbWVCdWZmZXIuamF2YQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDEyNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci0KLS8qKgotICogSGVscGVy
IGNsYXNzIGZvciBoYW5kbGluZyBPcGVuR0wgZnJhbWVidWZmZXIgd2l0aCBvbmx5IGNvbG9yIGF0
dGFjaG1lbnQgYW5kIG5vIGRlcHRoIG9yIHN0ZW5jaWwKLSAqIGJ1ZmZlci4gSW50ZW5kZWQgZm9y
IHNpbXBsZSB0YXNrcyBzdWNoIGFzIHRleHR1cmUgY29weSwgdGV4dHVyZSBkb3duc2NhbGluZywg
YW5kIHRleHR1cmUgY29sb3IKLSAqIGNvbnZlcnNpb24uCi0gKi8KLS8vIFRPRE8obWFnamVkKTog
QWRkIHVuaXR0ZXN0cyBmb3IgdGhpcyBjbGFzcy4KLXB1YmxpYyBjbGFzcyBHbFRleHR1cmVGcmFt
ZUJ1ZmZlciB7Ci0gIHByaXZhdGUgZmluYWwgaW50IGZyYW1lQnVmZmVySWQ7Ci0gIHByaXZhdGUg
ZmluYWwgaW50IHRleHR1cmVJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgcGl4ZWxGb3JtYXQ7Ci0g
IHByaXZhdGUgaW50IHdpZHRoOwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0KLSAgLyoqCi0gICAq
IEdlbmVyYXRlIHRleHR1cmUgYW5kIGZyYW1lYnVmZmVyIHJlc291cmNlcy4gQW4gRUdMQ29udGV4
dCBtdXN0IGJlIGJvdW5kIG9uIHRoZSBjdXJyZW50IHRocmVhZAotICAgKiB3aGVuIGNhbGxpbmcg
dGhpcyBmdW5jdGlvbi4gVGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSB1bnRpbCBzZXRT
aXplKCkgaXMgY2FsbGVkLgotICAgKi8KLSAgcHVibGljIEdsVGV4dHVyZUZyYW1lQnVmZmVyKGlu
dCBwaXhlbEZvcm1hdCkgewotICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKLSAgICAgIGNhc2Ug
R0xFUzIwLkdMX0xVTUlOQU5DRToKLSAgICAgIGNhc2UgR0xFUzIwLkdMX1JHQjoKLSAgICAgIGNh
c2UgR0xFUzIwLkdMX1JHQkE6Ci0gICAgICAgIHRoaXMucGl4ZWxGb3JtYXQgPSBwaXhlbEZvcm1h
dDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxs
ZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHBpeGVsIGZvcm1hdDogIiArIHBpeGVsRm9y
bWF0KTsKLSAgICB9Ci0KLSAgICB0ZXh0dXJlSWQgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICB0aGlzLndpZHRoID0gMDsKLSAgICB0aGlzLmhlaWdo
dCA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBiaW5kIGl0Lgot
ICAgIGZpbmFsIGludCBmcmFtZUJ1ZmZlcnNbXSA9IG5ldyBpbnRbMV07Ci0gICAgR0xFUzIwLmds
R2VuRnJhbWVidWZmZXJzKDEsIGZyYW1lQnVmZmVycywgMCk7Ci0gICAgZnJhbWVCdWZmZXJJZCA9
IGZyYW1lQnVmZmVyc1swXTsKLSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdM
X0ZSQU1FQlVGRkVSLCBmcmFtZUJ1ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJy
b3IoIkdlbmVyYXRlIGZyYW1lYnVmZmVyIik7Ci0KLSAgICAvLyBBdHRhY2ggdGhlIHRleHR1cmUg
dG8gdGhlIGZyYW1lYnVmZmVyIGFzIGNvbG9yIGF0dGFjaG1lbnQuCi0gICAgR0xFUzIwLmdsRnJh
bWVidWZmZXJUZXh0dXJlMkQoCi0gICAgICAgIEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgR0xFUzIw
LkdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTEVTMjAuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkLCAw
KTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkF0dGFjaCB0ZXh0dXJlIHRvIGZyYW1l
YnVmZmVyIik7Ci0KLSAgICAvLyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAgICBHTEVT
MjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgfQotCi0g
IC8qKgotICAgKiAoUmUpYWxsb2NhdGUgdGV4dHVyZS4gV2lsbCBkbyBub3RoaW5nIGlmIHRoZSBy
ZXF1ZXN0ZWQgc2l6ZSBlcXVhbHMgdGhlIGN1cnJlbnQgc2l6ZS4gQW4KLSAgICogRUdMQ29udGV4
dCBtdXN0IGJlIGJvdW5kIG9uIHRoZSBjdXJyZW50IHRocmVhZCB3aGVuIGNhbGxpbmcgdGhpcyBm
dW5jdGlvbi4gTXVzdCBiZSBjYWxsZWQgYXQKLSAgICogbGVhc3Qgb25jZSBiZWZvcmUgdXNpbmcg
dGhlIGZyYW1lYnVmZmVyLiBNYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGNoYW5nZSBz
aXplLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
IHsKLSAgICBpZiAod2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkgewotICAgICAgdGhyb3cgbmV3
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzaXplOiAiICsgd2lkdGggKyAieCIg
KyBoZWlnaHQpOwotICAgIH0KLSAgICBpZiAod2lkdGggPT0gdGhpcy53aWR0aCAmJiBoZWlnaHQg
PT0gdGhpcy5oZWlnaHQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy53aWR0aCA9
IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgLy8gQmluZCBvdXIgZnJh
bWVidWZmZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJV
RkZFUiwgZnJhbWVCdWZmZXJJZCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbEJp
bmRGcmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gQWxsb2NhdGUgdGV4dHVyZS4KLSAgICBHTEVTMjAu
Z2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgR0xFUzIwLmdsQmluZFRl
eHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0gICAgR0xFUzIwLmdsVGV4
SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgcGl4ZWxGb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIHBpeGVsRm9ybWF0LAotICAgICAgICBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgbnVs
bCk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyBpbiBhIGdvb2Qgc3Rh
dGUuCi0gICAgZmluYWwgaW50IHN0YXR1cyA9IEdMRVMyMC5nbENoZWNrRnJhbWVidWZmZXJTdGF0
dXMoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMRVMyMC5HTF9G
UkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2Vw
dGlvbigiRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLCBzdGF0dXM6ICIgKyBzdGF0dXMpOwotICAg
IH0KLQotICAgIC8vIFJlc3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJp
bmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIEdMRVMyMC5nbEJp
bmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQg
Z2V0V2lkdGgoKSB7Ci0gICAgcmV0dXJuIHdpZHRoOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRI
ZWlnaHQoKSB7Ci0gICAgcmV0dXJuIGhlaWdodDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0RnJh
bWVCdWZmZXJJZCgpIHsKLSAgICByZXR1cm4gZnJhbWVCdWZmZXJJZDsKLSAgfQotCi0gIHB1Ymxp
YyBpbnQgZ2V0VGV4dHVyZUlkKCkgewotICAgIHJldHVybiB0ZXh0dXJlSWQ7Ci0gIH0KLQotICAv
KioKLSAgICogUmVsZWFzZSB0ZXh0dXJlIGFuZCBmcmFtZWJ1ZmZlci4gQW4gRUdMQ29udGV4dCBt
dXN0IGJlIGJvdW5kIG9uIHRoZSBjdXJyZW50IHRocmVhZCB3aGVuIGNhbGxpbmcKLSAgICogdGhp
cyBmdW5jdGlvbi4gVGhpcyBvYmplY3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2Fs
bC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgR0xFUzIwLmdsRGVsZXRl
VGV4dHVyZXMoMSwgbmV3IGludFtdIHt0ZXh0dXJlSWR9LCAwKTsKLSAgICBHTEVTMjAuZ2xEZWxl
dGVGcmFtZWJ1ZmZlcnMoMSwgbmV3IGludFtdIHtmcmFtZUJ1ZmZlcklkfSwgMCk7Ci0gICAgd2lk
dGggPSAwOwotICAgIGhlaWdodCA9IDA7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
R2xVdGlsLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFV0aWwuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFV0aWwuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLQotaW1wb3J0IGphdmEu
bmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwotaW1wb3J0IGphdmEu
bmlvLkZsb2F0QnVmZmVyOwotCi0vKioKLSAqIFNvbWUgT3BlbkdMIHN0YXRpYyB1dGlsaXR5IGZ1
bmN0aW9ucy4KLSAqLwotcHVibGljIGNsYXNzIEdsVXRpbCB7Ci0gIHByaXZhdGUgR2xVdGlsKCkg
e30KLQotICAvLyBBc3NlcnQgdGhhdCBubyBPcGVuR0wgRVMgMi4wIGVycm9yIGhhcyBiZWVuIHJh
aXNlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrTm9HTEVTMkVycm9yKFN0cmluZyBtc2cp
IHsKLSAgICBpbnQgZXJyb3IgPSBHTEVTMjAuZ2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAh
PSBHTEVTMjAuR0xfTk9fRVJST1IpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KG1zZyArICI6IEdMRVMyMCBlcnJvcjogIiArIGVycm9yKTsKLSAgICB9Ci0gIH0KLQotICBwdWJs
aWMgc3RhdGljIEZsb2F0QnVmZmVyIGNyZWF0ZUZsb2F0QnVmZmVyKGZsb2F0W10gY29vcmRzKSB7
Ci0gICAgLy8gQWxsb2NhdGUgYSBkaXJlY3QgQnl0ZUJ1ZmZlciwgdXNpbmcgNCBieXRlcyBwZXIg
ZmxvYXQsIGFuZCBjb3B5IGNvb3JkcyBpbnRvIGl0LgotICAgIEJ5dGVCdWZmZXIgYmIgPSBCeXRl
QnVmZmVyLmFsbG9jYXRlRGlyZWN0KGNvb3Jkcy5sZW5ndGggKiA0KTsKLSAgICBiYi5vcmRlcihC
eXRlT3JkZXIubmF0aXZlT3JkZXIoKSk7Ci0gICAgRmxvYXRCdWZmZXIgZmIgPSBiYi5hc0Zsb2F0
QnVmZmVyKCk7Ci0gICAgZmIucHV0KGNvb3Jkcyk7Ci0gICAgZmIucG9zaXRpb24oMCk7Ci0gICAg
cmV0dXJuIGZiOwotICB9Ci0KLSAgLyoqCi0gICAqIEdlbmVyYXRlIHRleHR1cmUgd2l0aCBzdGFu
ZGFyZCBwYXJhbWV0ZXJzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2VuZXJhdGVUZXh0
dXJlKGludCB0YXJnZXQpIHsKLSAgICBmaW5hbCBpbnQgdGV4dHVyZUFycmF5W10gPSBuZXcgaW50
WzFdOwotICAgIEdMRVMyMC5nbEdlblRleHR1cmVzKDEsIHRleHR1cmVBcnJheSwgMCk7Ci0gICAg
ZmluYWwgaW50IHRleHR1cmVJZCA9IHRleHR1cmVBcnJheVswXTsKLSAgICBHTEVTMjAuZ2xCaW5k
VGV4dHVyZSh0YXJnZXQsIHRleHR1cmVJZCk7Ci0gICAgR0xFUzIwLmdsVGV4UGFyYW1ldGVyZih0
YXJnZXQsIEdMRVMyMC5HTF9URVhUVVJFX01JTl9GSUxURVIsIEdMRVMyMC5HTF9MSU5FQVIpOwot
ICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAuR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTEVTMjAuR0xfTElORUFSKTsKLSAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKHRh
cmdldCwgR0xFUzIwLkdMX1RFWFRVUkVfV1JBUF9TLCBHTEVTMjAuR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgR0xFUzIwLmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMRVMyMC5HTF9URVhUVVJFX1dS
QVBfVCwgR0xFUzIwLkdMX0NMQU1QX1RPX0VER0UpOwotICAgIGNoZWNrTm9HTEVTMkVycm9yKCJn
ZW5lcmF0ZVRleHR1cmUiKTsKLSAgICByZXR1cm4gdGV4dHVyZUlkOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0ljZUNhbmRpZGF0ZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvSWNlQ2FuZGlkYXRlLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvSWNlQ2FuZGlkYXRlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogUmVw
cmVzZW50YXRpb24gb2YgYSBzaW5nbGUgSUNFIENhbmRpZGF0ZSwgbWlycm9yaW5nCi0gKiB7QGNv
ZGUgSWNlQ2FuZGlkYXRlSW50ZXJmYWNlfSBpbiB0aGUgQysrIEFQSS4KLSAqLwotcHVibGljIGNs
YXNzIEljZUNhbmRpZGF0ZSB7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgc2RwTWlkOwotICBwdWJs
aWMgZmluYWwgaW50IHNkcE1MaW5lSW5kZXg7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgc2RwOwot
Ci0gIHB1YmxpYyBJY2VDYW5kaWRhdGUoU3RyaW5nIHNkcE1pZCwgaW50IHNkcE1MaW5lSW5kZXgs
IFN0cmluZyBzZHApIHsKLSAgICB0aGlzLnNkcE1pZCA9IHNkcE1pZDsKLSAgICB0aGlzLnNkcE1M
aW5lSW5kZXggPSBzZHBNTGluZUluZGV4OwotICAgIHRoaXMuc2RwID0gc2RwOwotICB9Ci0KLSAg
cHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gc2RwTWlkICsgIjoiICsgc2Rw
TUxpbmVJbmRleCArICI6IiArIHNkcDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9N
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsNzEwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlYzsKLWltcG9ydCBhbmRyb2lkLm1lZGlh
Lk1lZGlhQ29kZWNJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm8uQ29k
ZWNDYXBhYmlsaXRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjTGlzdDsKLWlt
cG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7
Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3Vy
ZmFjZTsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFy
cmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2Vk
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUXVldWU7Ci1p
bXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERv
d25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLy8gSmF2
YS1zaWRlIG9mIHBlZXJjb25uZWN0aW9uX2puaS5jYzpNZWRpYUNvZGVjVmlkZW9EZWNvZGVyLgot
Ly8gVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIEphdmEgUGVl
ckNvbm5lY3Rpb24gQVBJLgotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1Ymxp
YyBjbGFzcyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIHsKLSAgLy8gVGhpcyBjbGFzcyBpcyBjb25z
dHJ1Y3RlZCwgb3BlcmF0ZWQsIGFuZCBkZXN0cm95ZWQgYnkgaXRzIEMrKyBpbmNhcm5hdGlvbiwK
LSAgLy8gc28gdGhlIGNsYXNzIGFuZCBpdHMgbWV0aG9kcyBoYXZlIG5vbi1wdWJsaWMgdmlzaWJp
bGl0eS4gIFRoZSBBUEkgdGhpcwotICAvLyBjbGFzcyBleHBvc2VzIGFpbXMgdG8gbWltaWMgdGhl
IHdlYnJ0Yzo6VmlkZW9EZWNvZGVyIEFQSSBhcyBjbG9zZWx5IGFzCi0gIC8vIHBvc3NpYmx5IHRv
IG1pbmltaXplIHRoZSBhbW91bnQgb2YgdHJhbnNsYXRpb24gd29yayBuZWNlc3NhcnkuCi0KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVy
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBNQVhfREVDT0RFX1RJTUVfTVMgPSAyMDA7
Ci0KLSAgLy8gVHJhY2tzIHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGUuCi0gIHB1YmxpYyBlbnVtIFZp
ZGVvQ29kZWNUeXBlIHsgVklERU9fQ09ERUNfVlA4LCBWSURFT19DT0RFQ19WUDksIFZJREVPX0NP
REVDX0gyNjQgfQotCi0gIC8vIFRpbWVvdXQgZm9yIGlucHV0IGJ1ZmZlciBkZXF1ZXVlLgotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVRVUVVRV9JTlBVVF9USU1FT1VUID0gNTAwMDAwOwot
ICAvLyBUaW1lb3V0IGZvciBjb2RlYyByZWxlYXNpbmcuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBNRURJQV9DT0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMgPSA1MDAwOwotICAvLyBNYXggbnVt
YmVyIG9mIG91dHB1dCBidWZmZXJzIHF1ZXVlZCBiZWZvcmUgc3RhcnRpbmcgdG8gZHJvcCBkZWNv
ZGVkIGZyYW1lcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9RVUVVRURfT1VUUFVU
QlVGRkVSUyA9IDM7Ci0gIC8vIEFjdGl2ZSBydW5uaW5nIGRlY29kZXIgaW5zdGFuY2UuIFNldCBp
biBpbml0RGVjb2RlKCkgKGNhbGxlZCBmcm9tIG5hdGl2ZSBjb2RlKQotICAvLyBhbmQgcmVzZXQg
dG8gbnVsbCBpbiByZWxlYXNlKCkgY2FsbC4KLSAgcHJpdmF0ZSBzdGF0aWMgTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlciBydW5uaW5nSW5zdGFuY2UgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBNZWRp
YUNvZGVjVmlkZW9EZWNvZGVyRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrID0gbnVsbDsKLSAg
cHJpdmF0ZSBzdGF0aWMgaW50IGNvZGVjRXJyb3JzID0gMDsKLSAgLy8gTGlzdCBvZiBkaXNhYmxl
ZCBjb2RlYyB0eXBlcyAtIGNhbiBiZSBzZXQgZnJvbSBhcHBsaWNhdGlvbi4KLSAgcHJpdmF0ZSBz
dGF0aWMgU2V0PFN0cmluZz4gaHdEZWNvZGVyRGlzYWJsZWRUeXBlcyA9IG5ldyBIYXNoU2V0PFN0
cmluZz4oKTsKLQotICBwcml2YXRlIFRocmVhZCBtZWRpYUNvZGVjVGhyZWFkOwotICBwcml2YXRl
IE1lZGlhQ29kZWMgbWVkaWFDb2RlYzsKLSAgcHJpdmF0ZSBCeXRlQnVmZmVyW10gaW5wdXRCdWZm
ZXJzOwotICBwcml2YXRlIEJ5dGVCdWZmZXJbXSBvdXRwdXRCdWZmZXJzOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgVlA4X01JTUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA4IjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOV9NSU1FX1RZUEUgPSAidmlkZW8veC12
bmQub24yLnZwOSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0X01JTUVfVFlQ
RSA9ICJ2aWRlby9hdmMiOwotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBWUDggZGVjb2RlcnMu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1cHBvcnRlZFZwOEh3Q29kZWNQcmVm
aXhlcyA9IHsKLSAgICAgICJPTVgucWNvbS4iLCAiT01YLk52aWRpYS4iLCAiT01YLkV4eW5vcy4i
LCAiT01YLkludGVsLiJ9OwotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBWUDkgZGVjb2RlcnMu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1cHBvcnRlZFZwOUh3Q29kZWNQcmVm
aXhlcyA9IHsiT01YLnFjb20uIiwgIk9NWC5FeHlub3MuIn07Ci0gIC8vIExpc3Qgb2Ygc3VwcG9y
dGVkIEhXIEguMjY0IGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBz
dXBwb3J0ZWRIMjY0SHdDb2RlY1ByZWZpeGVzID0gewotICAgICAgIk9NWC5xY29tLiIsICJPTVgu
SW50ZWwuIiwgIk9NWC5FeHlub3MuIn07Ci0KLSAgLy8gTlYxMiBjb2xvciBmb3JtYXQgc3VwcG9y
dGVkIGJ5IFFDT00gY29kZWMsIGJ1dCBub3QgZGVjbGFyZWQgaW4gTWVkaWFDb2RlYyAtCi0gIC8v
IHNlZSAvaGFyZHdhcmUvcWNvbS9tZWRpYS9tbS1jb3JlL2luYy9PTVhfUUNPTUV4dG5zLmgKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2Vt
aVBsYW5hcjMybTRrYSA9IDB4N0ZBMzBDMDE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBD
T0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXIxNm00a2EgPSAweDdGQTMwQzAy
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNr
ZWRTZW1pUGxhbmFyNjR4MzJUaWxlMm04a2EgPSAweDdGQTMwQzAzOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtID0g
MHg3RkEzMEMwNDsKLSAgLy8gQWxsb3dhYmxlIGNvbG9yIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IGNv
ZGVjIC0gaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlz
dDxJbnRlZ2VyPiBzdXBwb3J0ZWRDb2xvckxpc3QgPSBBcnJheXMuYXNMaXN0KAotICAgICAgQ29k
ZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyLCBDb2RlY0NhcGFiaWxpdGll
cy5DT0xPUl9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyLAotICAgICAgQ29kZWNDYXBhYmlsaXRpZXMu
Q09MT1JfUUNPTV9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyLAotICAgICAgQ09MT1JfUUNPTV9GT1JN
QVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMzJtNGthLCBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBh
Y2tlZFNlbWlQbGFuYXIxNm00a2EsCi0gICAgICBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tl
ZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYSwKLSAgICAgIENPTE9SX1FDT01fRk9STUFUWVVWNDIw
UGFja2VkU2VtaVBsYW5hcjMybSk7Ci0KLSAgcHJpdmF0ZSBpbnQgY29sb3JGb3JtYXQ7Ci0gIHBy
aXZhdGUgaW50IHdpZHRoOwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgaW50IHN0
cmlkZTsKLSAgcHJpdmF0ZSBpbnQgc2xpY2VIZWlnaHQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBoYXNE
ZWNvZGVkRmlyc3RGcmFtZTsKLSAgcHJpdmF0ZSBmaW5hbCBRdWV1ZTxUaW1lU3RhbXBzPiBkZWNv
ZGVTdGFydFRpbWVNcyA9IG5ldyBMaW5rZWRMaXN0PFRpbWVTdGFtcHM+KCk7Ci0gIHByaXZhdGUg
Ym9vbGVhbiB1c2VTdXJmYWNlOwotCi0gIC8vIFRoZSBiZWxvdyB2YXJpYWJsZXMgYXJlIG9ubHkg
dXNlZCB3aGVuIGRlY29kaW5nIHRvIGEgU3VyZmFjZS4KLSAgcHJpdmF0ZSBUZXh0dXJlTGlzdGVu
ZXIgdGV4dHVyZUxpc3RlbmVyOwotICBwcml2YXRlIGludCBkcm9wcGVkRnJhbWVzOwotICBwcml2
YXRlIFN1cmZhY2Ugc3VyZmFjZSA9IG51bGw7Ci0gIHByaXZhdGUgZmluYWwgUXVldWU8RGVjb2Rl
ZE91dHB1dEJ1ZmZlcj4gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycyA9Ci0gICAgICBuZXcg
TGlua2VkTGlzdDxEZWNvZGVkT3V0cHV0QnVmZmVyPigpOwotCi0gIC8vIE1lZGlhQ29kZWMgZXJy
b3IgaGFuZGxlciAtIGludm9rZWQgd2hlbiBjcml0aWNhbCBlcnJvciBoYXBwZW5zIHdoaWNoIG1h
eSBwcmV2ZW50Ci0gIC8vIGZ1cnRoZXIgdXNlIG9mIG1lZGlhIGNvZGVjIEFQSS4gTm93IGl0IG1l
YW5zIHRoYXQgb25lIG9mIG1lZGlhIGNvZGVjIGluc3RhbmNlcwotICAvLyBpcyBoYW5naW5nIGFu
ZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgaW4gdGhlIG5leHQgY2FsbC4KLSAgcHVibGljIHN0YXRp
YyBpbnRlcmZhY2UgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckVycm9yQ2FsbGJhY2sgewotICAgIHZv
aWQgb25NZWRpYUNvZGVjVmlkZW9EZWNvZGVyQ3JpdGljYWxFcnJvcihpbnQgY29kZWNFcnJvcnMp
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEVycm9yQ2FsbGJhY2soTWVkaWFDb2Rl
Y1ZpZGVvRGVjb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykgewotICAgIExvZ2dpbmcu
ZChUQUcsICJTZXQgZXJyb3IgY2FsbGJhY2siKTsKLSAgICBNZWRpYUNvZGVjVmlkZW9EZWNvZGVy
LmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOwotICB9Ci0KLSAgLy8gRnVuY3Rpb25zIHRv
IGRpc2FibGUgSFcgZGVjb2RpbmcgLSBjYW4gYmUgY2FsbGVkIGZyb20gYXBwbGljYXRpb25zIGZv
ciBwbGF0Zm9ybXMKLSAgLy8gd2hpY2ggaGF2ZSBrbm93biBIVyBkZWNvZGluZyBwcm9ibGVtcy4K
LSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVWcDhId0NvZGVjKCkgewotICAgIExvZ2dpbmcu
dyhUQUcsICJWUDggZGVjb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAg
aHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoVlA4X01JTUVfVFlQRSk7Ci0gIH0KLQotICBwdWJs
aWMgc3RhdGljIHZvaWQgZGlzYWJsZVZwOUh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywg
IlZQOSBkZWNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAgICBod0RlY29k
ZXJEaXNhYmxlZFR5cGVzLmFkZChWUDlfTUlNRV9UWVBFKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgdm9pZCBkaXNhYmxlSDI2NEh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIkguMjY0
IGRlY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RGVjb2RlckRp
c2FibGVkVHlwZXMuYWRkKEgyNjRfTUlNRV9UWVBFKTsKLSAgfQotCi0gIC8vIEZ1bmN0aW9ucyB0
byBxdWVyeSBpZiBIVyBkZWNvZGluZyBpcyBzdXBwb3J0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgYm9v
bGVhbiBpc1ZwOEh3U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdEZWNvZGVyRGlzYWJsZWRU
eXBlcy5jb250YWlucyhWUDhfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZERlY29kZXIoVlA4
X01JTUVfVFlQRSwgc3VwcG9ydGVkVnA4SHdDb2RlY1ByZWZpeGVzKSAhPSBudWxsKTsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOUh3U3VwcG9ydGVkKCkgewotICAgIHJldHVy
biAhaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDlfTUlNRV9UWVBFKQotICAgICAg
ICAmJiAoZmluZERlY29kZXIoVlA5X01JTUVfVFlQRSwgc3VwcG9ydGVkVnA5SHdDb2RlY1ByZWZp
eGVzKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0gyNjRId1N1
cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gIWh3RGVjb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMo
SDI2NF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kRGVjb2RlcihIMjY0X01JTUVfVFlQRSwg
c3VwcG9ydGVkSDI2NEh3Q29kZWNQcmVmaXhlcykgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMg
c3RhdGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAgIGlmIChydW5uaW5nSW5zdGFuY2Ug
IT0gbnVsbCAmJiBydW5uaW5nSW5zdGFuY2UubWVkaWFDb2RlY1RocmVhZCAhPSBudWxsKSB7Ci0g
ICAgICBTdGFja1RyYWNlRWxlbWVudFtdIG1lZGlhQ29kZWNTdGFja1RyYWNlcyA9IHJ1bm5pbmdJ
bnN0YW5jZS5tZWRpYUNvZGVjVGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChtZWRp
YUNvZGVjU3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
TWVkaWFDb2RlY1ZpZGVvRGVjb2RlciBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3Rh
Y2tUcmFjZUVsZW1lbnQgc3RhY2tUcmFjZSA6IG1lZGlhQ29kZWNTdGFja1RyYWNlcykgewotICAg
ICAgICAgIExvZ2dpbmcuZChUQUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZvciBmaW5kRGVjb2Rl
cigpIGJlbG93LgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWNvZGVyUHJvcGVydGllcyB7Ci0g
ICAgcHVibGljIERlY29kZXJQcm9wZXJ0aWVzKFN0cmluZyBjb2RlY05hbWUsIGludCBjb2xvckZv
cm1hdCkgewotICAgICAgdGhpcy5jb2RlY05hbWUgPSBjb2RlY05hbWU7Ci0gICAgICB0aGlzLmNv
bG9yRm9ybWF0ID0gY29sb3JGb3JtYXQ7Ci0gICAgfQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcg
Y29kZWNOYW1lOyAvLyBPcGVuTWF4IGNvbXBvbmVudCBuYW1lIGZvciBWUDggY29kZWMuCi0gICAg
cHVibGljIGZpbmFsIGludCBjb2xvckZvcm1hdDsgLy8gQ29sb3IgZm9ybWF0IHN1cHBvcnRlZCBi
eSBjb2RlYy4KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIERlY29kZXJQcm9wZXJ0aWVzIGZpbmRE
ZWNvZGVyKFN0cmluZyBtaW1lLCBTdHJpbmdbXSBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzKSB7Ci0g
ICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FU
KSB7Ci0gICAgICByZXR1cm4gbnVsbDsgLy8gTWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzIGlzIG1p
c3NpbmcuCi0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJUcnlpbmcgdG8gZmluZCBIVyBkZWNv
ZGVyIGZvciBtaW1lICIgKyBtaW1lKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1lZGlhQ29k
ZWNMaXN0LmdldENvZGVjQ291bnQoKTsgKytpKSB7Ci0gICAgICBNZWRpYUNvZGVjSW5mbyBpbmZv
ID0gbnVsbDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGluZm8gPSBNZWRpYUNvZGVjTGlzdC5nZXRD
b2RlY0luZm9BdChpKTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZGVjb2RlciBjb2Rl
YyBpbmZvIiwgZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoaW5mbyA9PSBudWxsIHx8IGluZm8uaXNF
bmNvZGVyKCkpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgbmFt
ZSA9IG51bGw7Ci0gICAgICBmb3IgKFN0cmluZyBtaW1lVHlwZSA6IGluZm8uZ2V0U3VwcG9ydGVk
VHlwZXMoKSkgewotICAgICAgICBpZiAobWltZVR5cGUuZXF1YWxzKG1pbWUpKSB7Ci0gICAgICAg
ICAgbmFtZSA9IGluZm8uZ2V0TmFtZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICBpZiAobmFtZSA9PSBudWxsKSB7Ci0gICAgICAgIGNvbnRpbnVlOyAvLyBO
byBIVyBzdXBwb3J0IGluIHRoaXMgY29kZWM7IHRyeSB0aGUgbmV4dCBvbmUuCi0gICAgICB9Ci0g
ICAgICBMb2dnaW5nLmQoVEFHLCAiRm91bmQgY2FuZGlkYXRlIGRlY29kZXIgIiArIG5hbWUpOwot
Ci0gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHN1cHBvcnRlZCBkZWNvZGVyLgotICAgICAgYm9v
bGVhbiBzdXBwb3J0ZWRDb2RlYyA9IGZhbHNlOwotICAgICAgZm9yIChTdHJpbmcgY29kZWNQcmVm
aXggOiBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzKSB7Ci0gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dp
dGgoY29kZWNQcmVmaXgpKSB7Ci0gICAgICAgICAgc3VwcG9ydGVkQ29kZWMgPSB0cnVlOwotICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXN1cHBvcnRlZENv
ZGVjKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiBj
b2RlYyBzdXBwb3J0cyBlaXRoZXIgeXV2NDIwIG9yIG52MTIuCi0gICAgICBDb2RlY0NhcGFiaWxp
dGllcyBjYXBhYmlsaXRpZXM7Ci0gICAgICB0cnkgewotICAgICAgICBjYXBhYmlsaXRpZXMgPSBp
bmZvLmdldENhcGFiaWxpdGllc0ZvclR5cGUobWltZSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJl
dHJpZXZlIGRlY29kZXIgY2FwYWJpbGl0aWVzIiwgZSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAg
ICAgfQotICAgICAgZm9yIChpbnQgY29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3Jt
YXRzKSB7Ci0gICAgICAgIExvZ2dpbmcudihUQUcsICIgICBDb2xvcjogMHgiICsgSW50ZWdlci50
b0hleFN0cmluZyhjb2xvckZvcm1hdCkpOwotICAgICAgfQotICAgICAgZm9yIChpbnQgc3VwcG9y
dGVkQ29sb3JGb3JtYXQgOiBzdXBwb3J0ZWRDb2xvckxpc3QpIHsKLSAgICAgICAgZm9yIChpbnQg
Y29kZWNDb2xvckZvcm1hdCA6IGNhcGFiaWxpdGllcy5jb2xvckZvcm1hdHMpIHsKLSAgICAgICAg
ICBpZiAoY29kZWNDb2xvckZvcm1hdCA9PSBzdXBwb3J0ZWRDb2xvckZvcm1hdCkgewotICAgICAg
ICAgICAgLy8gRm91bmQgc3VwcG9ydGVkIEhXIGRlY29kZXIuCi0gICAgICAgICAgICBMb2dnaW5n
LmQoVEFHLCAiRm91bmQgdGFyZ2V0IGRlY29kZXIgIiArIG5hbWUgKyAiLiBDb2xvcjogMHgiCi0g
ICAgICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhjb2RlY0NvbG9yRm9ybWF0
KSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IERlY29kZXJQcm9wZXJ0aWVzKG5hbWUsIGNvZGVj
Q29sb3JGb3JtYXQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAg
ICBMb2dnaW5nLmQoVEFHLCAiTm8gSFcgZGVjb2RlciBmb3VuZCBmb3IgbWltZSAiICsgbWltZSk7
Ci0gICAgcmV0dXJuIG51bGw7IC8vIE5vIEhXIGRlY29kZXIuCi0gIH0KLQotICBwcml2YXRlIHZv
aWQgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9u
IHsKLSAgICBpZiAobWVkaWFDb2RlY1RocmVhZC5nZXRJZCgpICE9IFRocmVhZC5jdXJyZW50VGhy
ZWFkKCkuZ2V0SWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigi
TWVkaWFDb2RlY1ZpZGVvRGVjb2RlciBwcmV2aW91c2x5IG9wZXJhdGVkIG9uICIKLSAgICAgICAg
ICArIG1lZGlhQ29kZWNUaHJlYWQgKyAiIGJ1dCBpcyBub3cgY2FsbGVkIG9uICIgKyBUaHJlYWQu
Y3VycmVudFRocmVhZCgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBQYXNzIG51bGwgaW4gfHN1cmZh
Y2VUZXh0dXJlSGVscGVyfCB0byBjb25maWd1cmUgdGhlIGNvZGVjIGZvciBCeXRlQnVmZmVyIG91
dHB1dC4KLSAgcHJpdmF0ZSBib29sZWFuIGluaXREZWNvZGUoCi0gICAgICBWaWRlb0NvZGVjVHlw
ZSB0eXBlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZh
Y2VUZXh0dXJlSGVscGVyKSB7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQgIT0gbnVsbCkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImluaXREZWNvZGU6IEZvcmdvdCB0byBy
ZWxlYXNlKCk/Iik7Ci0gICAgfQotCi0gICAgU3RyaW5nIG1pbWUgPSBudWxsOwotICAgIHVzZVN1
cmZhY2UgPSAoc3VyZmFjZVRleHR1cmVIZWxwZXIgIT0gbnVsbCk7Ci0gICAgU3RyaW5nW10gc3Vw
cG9ydGVkQ29kZWNQcmVmaXhlcyA9IG51bGw7Ci0gICAgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5
cGUuVklERU9fQ09ERUNfVlA4KSB7Ci0gICAgICBtaW1lID0gVlA4X01JTUVfVFlQRTsKLSAgICAg
IHN1cHBvcnRlZENvZGVjUHJlZml4ZXMgPSBzdXBwb3J0ZWRWcDhId0NvZGVjUHJlZml4ZXM7Ci0g
ICAgfSBlbHNlIGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOSkgewot
ICAgICAgbWltZSA9IFZQOV9NSU1FX1RZUEU7Ci0gICAgICBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVz
ID0gc3VwcG9ydGVkVnA5SHdDb2RlY1ByZWZpeGVzOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBW
aWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19IMjY0KSB7Ci0gICAgICBtaW1lID0gSDI2NF9NSU1F
X1RZUEU7Ci0gICAgICBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzID0gc3VwcG9ydGVkSDI2NEh3Q29k
ZWNQcmVmaXhlczsKLSAgICB9IGVsc2UgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oImluaXREZWNvZGU6IE5vbi1zdXBwb3J0ZWQgY29kZWMgIiArIHR5cGUpOwotICAgIH0KLSAg
ICBEZWNvZGVyUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gZmluZERlY29kZXIobWltZSwgc3VwcG9y
dGVkQ29kZWNQcmVmaXhlcyk7Ci0gICAgaWYgKHByb3BlcnRpZXMgPT0gbnVsbCkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbm5vdCBmaW5kIEhXIGRlY29kZXIgZm9yICIg
KyB0eXBlKTsKLSAgICB9Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSBpbml0RGVjb2RlOiAi
ICsgdHlwZSArICIgOiAiICsgd2lkdGggKyAiIHggIiArIGhlaWdodCArICIuIENvbG9yOiAweCIK
LSAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhwcm9wZXJ0aWVzLmNvbG9yRm9ybWF0
KSArICIuIFVzZSBTdXJmYWNlOiAiICsgdXNlU3VyZmFjZSk7Ci0KLSAgICBydW5uaW5nSW5zdGFu
Y2UgPSB0aGlzOyAvLyBEZWNvZGVyIGlzIG5vdyBydW5uaW5nIGFuZCBjYW4gYmUgcXVlcmllZCBm
b3Igc3RhY2sgdHJhY2VzLgotICAgIG1lZGlhQ29kZWNUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRo
cmVhZCgpOwotICAgIHRyeSB7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0aGlz
LmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHN0cmlkZSA9IHdpZHRoOwotICAgICAgc2xpY2VIZWln
aHQgPSBoZWlnaHQ7Ci0KLSAgICAgIGlmICh1c2VTdXJmYWNlKSB7Ci0gICAgICAgIHRleHR1cmVM
aXN0ZW5lciA9IG5ldyBUZXh0dXJlTGlzdGVuZXIoc3VyZmFjZVRleHR1cmVIZWxwZXIpOwotICAg
ICAgICBzdXJmYWNlID0gbmV3IFN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFj
ZVRleHR1cmUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIE1lZGlhRm9ybWF0IGZvcm1hdCA9IE1lZGlh
Rm9ybWF0LmNyZWF0ZVZpZGVvRm9ybWF0KG1pbWUsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgaWYg
KCF1c2VTdXJmYWNlKSB7Ci0gICAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktF
WV9DT0xPUl9GT1JNQVQsIHByb3BlcnRpZXMuY29sb3JGb3JtYXQpOwotICAgICAgfQotICAgICAg
TG9nZ2luZy5kKFRBRywgIiAgRm9ybWF0OiAiICsgZm9ybWF0KTsKLSAgICAgIG1lZGlhQ29kZWMg
PSBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmNyZWF0ZUJ5Q29kZWNOYW1lKHByb3BlcnRpZXMuY29k
ZWNOYW1lKTsKLSAgICAgIGlmIChtZWRpYUNvZGVjID09IG51bGwpIHsKLSAgICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkNhbiBub3QgY3JlYXRlIG1lZGlhIGRlY29kZXIiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfQotICAgICAgbWVkaWFDb2RlYy5jb25maWd1cmUoZm9ybWF0LCBzdXJm
YWNlLCBudWxsLCAwKTsKLSAgICAgIG1lZGlhQ29kZWMuc3RhcnQoKTsKLQotICAgICAgY29sb3JG
b3JtYXQgPSBwcm9wZXJ0aWVzLmNvbG9yRm9ybWF0OwotICAgICAgb3V0cHV0QnVmZmVycyA9IG1l
ZGlhQ29kZWMuZ2V0T3V0cHV0QnVmZmVycygpOwotICAgICAgaW5wdXRCdWZmZXJzID0gbWVkaWFD
b2RlYy5nZXRJbnB1dEJ1ZmZlcnMoKTsKLSAgICAgIGRlY29kZVN0YXJ0VGltZU1zLmNsZWFyKCk7
Ci0gICAgICBoYXNEZWNvZGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgICAgZGVxdWV1ZWRTdXJm
YWNlT3V0cHV0QnVmZmVycy5jbGVhcigpOwotICAgICAgZHJvcHBlZEZyYW1lcyA9IDA7Ci0gICAg
ICBMb2dnaW5nLmQoVEFHLAotICAgICAgICAgICJJbnB1dCBidWZmZXJzOiAiICsgaW5wdXRCdWZm
ZXJzLmxlbmd0aCArICIuIE91dHB1dCBidWZmZXJzOiAiICsgb3V0cHV0QnVmZmVycy5sZW5ndGgp
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9u
IGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJpbml0RGVjb2RlIGZhaWxlZCIsIGUpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8vIFJlc2V0cyB0aGUgZGVjb2RlciBz
byBpdCBjYW4gc3RhcnQgZGVjb2RpbmcgZnJhbWVzIHdpdGggbmV3IHJlc29sdXRpb24uCi0gIC8v
IEZsdXNoZXMgTWVkaWFDb2RlYyBhbmQgY2xlYXJzIGRlY29kZXIgb3V0cHV0IGJ1ZmZlcnMuCi0g
IHByaXZhdGUgdm9pZCByZXNldChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBpZiAobWVk
aWFDb2RlY1RocmVhZCA9PSBudWxsIHx8IG1lZGlhQ29kZWMgPT0gbnVsbCkgewotICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCByZXNldCBjYWxsIGZvciBub24taW5p
dGlhbGl6ZWQgZGVjb2Rlci4iKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVz
ZXQ6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0KTsKLQotICAgIG1lZGlhQ29kZWMuZmx1c2go
KTsKLQotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsK
LSAgICBkZWNvZGVTdGFydFRpbWVNcy5jbGVhcigpOwotICAgIGRlcXVldWVkU3VyZmFjZU91dHB1
dEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICBoYXNEZWNvZGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAg
IGRyb3BwZWRGcmFtZXMgPSAwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbGVhc2UoKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZURlY29kZXIuIFRvdGFsIG51bWJlciBvZiBk
cm9wcGVkIGZyYW1lczogIiArIGRyb3BwZWRGcmFtZXMpOwotICAgIGNoZWNrT25NZWRpYUNvZGVj
VGhyZWFkKCk7Ci0KLSAgICAvLyBSdW4gTWVkaWFjb2RlYyBzdG9wKCkgYW5kIHJlbGVhc2UoKSBv
biBzZXBhcmF0ZSB0aHJlYWQgc2luY2Ugc29tZXRpbWUKLSAgICAvLyBNZWRpYWNvZGVjLnN0b3Ao
KSBtYXkgaGFuZy4KLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCByZWxlYXNlRG9uZSA9IG5ldyBD
b3VudERvd25MYXRjaCgxKTsKLQotICAgIFJ1bm5hYmxlIHJ1bk1lZGlhQ29kZWNSZWxlYXNlID0g
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFz
ZURlY29kZXIgb24gcmVsZWFzZSB0aHJlYWQiKTsKLSAgICAgICAgICBtZWRpYUNvZGVjLnN0b3Ao
KTsKLSAgICAgICAgICBtZWRpYUNvZGVjLnJlbGVhc2UoKTsKLSAgICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiSmF2YSByZWxlYXNlRGVjb2RlciBvbiByZWxlYXNlIHRocmVhZCBkb25lIik7Ci0gICAg
ICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIk1l
ZGlhIGRlY29kZXIgcmVsZWFzZSBmYWlsZWQiLCBlKTsKLSAgICAgICAgfQotICAgICAgICByZWxl
YXNlRG9uZS5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9OwotICAgIG5ldyBUaHJlYWQocnVu
TWVkaWFDb2RlY1JlbGVhc2UpLnN0YXJ0KCk7Ci0KLSAgICBpZiAoIVRocmVhZFV0aWxzLmF3YWl0
VW5pbnRlcnJ1cHRpYmx5KHJlbGVhc2VEb25lLCBNRURJQV9DT0RFQ19SRUxFQVNFX1RJTUVPVVRf
TVMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZGVjb2RlciByZWxlYXNlIHRpbWVv
dXQiKTsKLSAgICAgIGNvZGVjRXJyb3JzKys7Ci0gICAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBu
dWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJJbnZva2UgY29kZWMgZXJyb3IgY2FsbGJh
Y2suIEVycm9yczogIiArIGNvZGVjRXJyb3JzKTsKLSAgICAgICAgZXJyb3JDYWxsYmFjay5vbk1l
ZGlhQ29kZWNWaWRlb0RlY29kZXJDcml0aWNhbEVycm9yKGNvZGVjRXJyb3JzKTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBtZWRpYUNvZGVjID0gbnVsbDsKLSAgICBtZWRpYUNvZGVjVGhyZWFkID0g
bnVsbDsKLSAgICBydW5uaW5nSW5zdGFuY2UgPSBudWxsOwotICAgIGlmICh1c2VTdXJmYWNlKSB7
Ci0gICAgICBzdXJmYWNlLnJlbGVhc2UoKTsKLSAgICAgIHN1cmZhY2UgPSBudWxsOwotICAgICAg
dGV4dHVyZUxpc3RlbmVyLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkph
dmEgcmVsZWFzZURlY29kZXIgZG9uZSIpOwotICB9Ci0KLSAgLy8gRGVxdWV1ZSBhbiBpbnB1dCBi
dWZmZXIgYW5kIHJldHVybiBpdHMgaW5kZXgsIC0xIGlmIG5vIGlucHV0IGJ1ZmZlciBpcwotICAv
LyBhdmFpbGFibGUsIG9yIC0yIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIgb3BlcmF0aXZlLgot
ICBwcml2YXRlIGludCBkZXF1ZXVlSW5wdXRCdWZmZXIoKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29k
ZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIG1lZGlhQ29kZWMuZGVxdWV1ZUlu
cHV0QnVmZmVyKERFUVVFVUVfSU5QVVRfVElNRU9VVCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0
YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZXF1ZXVlSW50cHV0QnVm
ZmVyIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIC0yOwotICAgIH0KLSAgfQotCi0gIHByaXZh
dGUgYm9vbGVhbiBxdWV1ZUlucHV0QnVmZmVyKGludCBpbnB1dEJ1ZmZlckluZGV4LCBpbnQgc2l6
ZSwgbG9uZyBwcmVzZW50YXRpb25UaW1lU3RhbVVzLAotICAgICAgbG9uZyB0aW1lU3RhbXBNcywg
bG9uZyBudHBUaW1lU3RhbXApIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAg
IHRyeSB7Ci0gICAgICBpbnB1dEJ1ZmZlcnNbaW5wdXRCdWZmZXJJbmRleF0ucG9zaXRpb24oMCk7
Ci0gICAgICBpbnB1dEJ1ZmZlcnNbaW5wdXRCdWZmZXJJbmRleF0ubGltaXQoc2l6ZSk7Ci0gICAg
ICBkZWNvZGVTdGFydFRpbWVNcy5hZGQoCi0gICAgICAgICAgbmV3IFRpbWVTdGFtcHMoU3lzdGVt
Q2xvY2suZWxhcHNlZFJlYWx0aW1lKCksIHRpbWVTdGFtcE1zLCBudHBUaW1lU3RhbXApKTsKLSAg
ICAgIG1lZGlhQ29kZWMucXVldWVJbnB1dEJ1ZmZlcihpbnB1dEJ1ZmZlckluZGV4LCAwLCBzaXpl
LCBwcmVzZW50YXRpb25UaW1lU3RhbVVzLCAwKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
Y2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAi
ZGVjb2RlIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIGNsYXNzIFRpbWVTdGFtcHMgewotICAgIHB1YmxpYyBUaW1lU3RhbXBz
KGxvbmcgZGVjb2RlU3RhcnRUaW1lTXMsIGxvbmcgdGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0
YW1wTXMpIHsKLSAgICAgIHRoaXMuZGVjb2RlU3RhcnRUaW1lTXMgPSBkZWNvZGVTdGFydFRpbWVN
czsKLSAgICAgIHRoaXMudGltZVN0YW1wTXMgPSB0aW1lU3RhbXBNczsKLSAgICAgIHRoaXMubnRw
VGltZVN0YW1wTXMgPSBudHBUaW1lU3RhbXBNczsKLSAgICB9Ci0gICAgLy8gVGltZSB3aGVuIHRo
aXMgZnJhbWUgd2FzIHF1ZXVlZCBmb3IgZGVjb2RpbmcuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25n
IGRlY29kZVN0YXJ0VGltZU1zOwotICAgIC8vIE9ubHkgdXNlZCBmb3IgYm9va2tlZXBpbmcgaW4g
SmF2YS4gU3RvcmVzIEMrKyBpbnB1dEltYWdlLl90aW1lU3RhbXAgdmFsdWUgZm9yIGlucHV0IGZy
YW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyB0aW1lU3RhbXBNczsKLSAgICAvLyBPbmx5IHVz
ZWQgZm9yIGJvb2trZWVwaW5nIGluIEphdmEuIFN0b3JlcyBDKysgaW5wdXRJbWFnZS5udHBfdGlt
ZV9tc18gdmFsdWUgZm9yIGlucHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBudHBU
aW1lU3RhbXBNczsKLSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGRlcXVldWVPdXRwdXRC
dWZmZXIoKSBiZWxvdy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVjb2RlZE91dHB1dEJ1ZmZl
ciB7Ci0gICAgcHVibGljIERlY29kZWRPdXRwdXRCdWZmZXIoaW50IGluZGV4LCBpbnQgb2Zmc2V0
LCBpbnQgc2l6ZSwgbG9uZyBwcmVzZW50YXRpb25UaW1lU3RhbXBNcywKLSAgICAgICAgbG9uZyB0
aW1lU3RhbXBNcywgbG9uZyBudHBUaW1lU3RhbXBNcywgbG9uZyBkZWNvZGVUaW1lLCBsb25nIGVu
ZERlY29kZVRpbWUpIHsKLSAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgIHRoaXMub2Zm
c2V0ID0gb2Zmc2V0OwotICAgICAgdGhpcy5zaXplID0gc2l6ZTsKLSAgICAgIHRoaXMucHJlc2Vu
dGF0aW9uVGltZVN0YW1wTXMgPSBwcmVzZW50YXRpb25UaW1lU3RhbXBNczsKLSAgICAgIHRoaXMu
dGltZVN0YW1wTXMgPSB0aW1lU3RhbXBNczsKLSAgICAgIHRoaXMubnRwVGltZVN0YW1wTXMgPSBu
dHBUaW1lU3RhbXBNczsKLSAgICAgIHRoaXMuZGVjb2RlVGltZU1zID0gZGVjb2RlVGltZTsKLSAg
ICAgIHRoaXMuZW5kRGVjb2RlVGltZU1zID0gZW5kRGVjb2RlVGltZTsKLSAgICB9Ci0KLSAgICBw
cml2YXRlIGZpbmFsIGludCBpbmRleDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBvZmZzZXQ7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBpbnQgc2l6ZTsKLSAgICAvLyBQcmVzZW50YXRpb24gdGltZXN0YW1w
IHJldHVybmVkIGluIGRlcXVldWVPdXRwdXRCdWZmZXIgY2FsbC4KLSAgICBwcml2YXRlIGZpbmFs
IGxvbmcgcHJlc2VudGF0aW9uVGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UuX3Rp
bWVTdGFtcCB2YWx1ZSBmb3Igb3V0cHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyB0
aW1lU3RhbXBNczsKLSAgICAvLyBDKysgaW5wdXRJbWFnZS5udHBfdGltZV9tc18gdmFsdWUgZm9y
IG91dHB1dCBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgbnRwVGltZVN0YW1wTXM7Ci0g
ICAgLy8gTnVtYmVyIG9mIG1zIGl0IHRvb2sgdG8gZGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgcHJp
dmF0ZSBmaW5hbCBsb25nIGRlY29kZVRpbWVNczsKLSAgICAvLyBTeXN0ZW0gdGltZSB3aGVuIHRo
aXMgZnJhbWUgZGVjb2RpbmcgZmluaXNoZWQuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIGVuZERl
Y29kZVRpbWVNczsKLSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGRlcXVldWVUZXh0dXJl
QnVmZmVyKCkgYmVsb3cuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIERlY29kZWRUZXh0dXJlQnVm
ZmVyIHsKLSAgICBwcml2YXRlIGZpbmFsIGludCB0ZXh0dXJlSUQ7Ci0gICAgcHJpdmF0ZSBmaW5h
bCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeDsKLSAgICAvLyBQcmVzZW50YXRpb24gdGltZXN0YW1w
IHJldHVybmVkIGluIGRlcXVldWVPdXRwdXRCdWZmZXIgY2FsbC4KLSAgICBwcml2YXRlIGZpbmFs
IGxvbmcgcHJlc2VudGF0aW9uVGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UuX3Rp
bWVTdGFtcCB2YWx1ZSBmb3Igb3V0cHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyB0
aW1lU3RhbXBNczsKLSAgICAvLyBDKysgaW5wdXRJbWFnZS5udHBfdGltZV9tc18gdmFsdWUgZm9y
IG91dHB1dCBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgbnRwVGltZVN0YW1wTXM7Ci0g
ICAgLy8gTnVtYmVyIG9mIG1zIGl0IHRvb2sgdG8gZGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgcHJp
dmF0ZSBmaW5hbCBsb25nIGRlY29kZVRpbWVNczsKLSAgICAvLyBJbnRlcnZhbCBmcm9tIHdoZW4g
dGhlIGZyYW1lIGZpbmlzaGVkIGRlY29kaW5nIHVudGlsIHRoaXMgYnVmZmVyIGhhcyBiZWVuIGNy
ZWF0ZWQuCi0gICAgLy8gU2luY2UgdGhlcmUgaXMgb25seSBvbmUgdGV4dHVyZSwgdGhpcyBpbnRl
cnZhbCBkZXBlbmQgb24gdGhlIHRpbWUgZnJvbSB3aGVuCi0gICAgLy8gYSBmcmFtZSBpcyBkZWNv
ZGVkIGFuZCBwcm92aWRlZCB0byBDKysgYW5kIHVudGlsIHRoYXQgZnJhbWUgaXMgcmV0dXJuZWQg
dG8gdGhlIE1lZGlhQ29kZWMKLSAgICAvLyBzbyB0aGF0IHRoZSB0ZXh0dXJlIGNhbiBiZSB1cGRh
dGVkIHdpdGggdGhlIG5leHQgZGVjb2RlZCBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcg
ZnJhbWVEZWxheU1zOwotCi0gICAgLy8gQSBEZWNvZGVkVGV4dHVyZUJ1ZmZlciB3aXRoIHplcm8g
fHRleHR1cmVJRHwgaGFzIHNwZWNpYWwgbWVhbmluZyBhbmQgcmVwcmVzZW50cyBhIGZyYW1lCi0g
ICAgLy8gdGhhdCB3YXMgZHJvcHBlZC4KLSAgICBwdWJsaWMgRGVjb2RlZFRleHR1cmVCdWZmZXIo
aW50IHRleHR1cmVJRCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsCi0gICAgICAgIGxvbmcgcHJl
c2VudGF0aW9uVGltZVN0YW1wTXMsIGxvbmcgdGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0YW1w
TXMsIGxvbmcgZGVjb2RlVGltZU1zLAotICAgICAgICBsb25nIGZyYW1lRGVsYXkpIHsKLSAgICAg
IHRoaXMudGV4dHVyZUlEID0gdGV4dHVyZUlEOwotICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXgg
PSB0cmFuc2Zvcm1NYXRyaXg7Ci0gICAgICB0aGlzLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zID0g
cHJlc2VudGF0aW9uVGltZVN0YW1wTXM7Ci0gICAgICB0aGlzLnRpbWVTdGFtcE1zID0gdGltZVN0
YW1wTXM7Ci0gICAgICB0aGlzLm50cFRpbWVTdGFtcE1zID0gbnRwVGltZVN0YW1wTXM7Ci0gICAg
ICB0aGlzLmRlY29kZVRpbWVNcyA9IGRlY29kZVRpbWVNczsKLSAgICAgIHRoaXMuZnJhbWVEZWxh
eU1zID0gZnJhbWVEZWxheTsKLSAgICB9Ci0gIH0KLQotICAvLyBQb2xsIGJhc2VkIHRleHR1cmUg
bGlzdGVuZXIuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFRleHR1cmVMaXN0ZW5lcgotICAgICAg
aW1wbGVtZW50cyBTdXJmYWNlVGV4dHVyZUhlbHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxp
c3RlbmVyIHsKLSAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VU
ZXh0dXJlSGVscGVyOwotICAgIC8vIHxuZXdGcmFtZUxvY2t8IGlzIHVzZWQgdG8gc3luY2hyb25p
emUgYXJyaXZhbCBvZiBuZXcgZnJhbWVzIHdpdGggd2FpdCgpL25vdGlmeUFsbCgpLgotICAgIHBy
aXZhdGUgZmluYWwgT2JqZWN0IG5ld0ZyYW1lTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICAvLyB8
YnVmZmVyVG9SZW5kZXJ8IGlzIG5vbi1udWxsIHdoZW4gd2FpdGluZyBmb3IgdHJhbnNpdGlvbiBi
ZXR3ZWVuIGFkZEJ1ZmZlclRvUmVuZGVyKCkgdG8KLSAgICAvLyBvblRleHR1cmVGcmFtZUF2YWls
YWJsZSgpLgotICAgIHByaXZhdGUgRGVjb2RlZE91dHB1dEJ1ZmZlciBidWZmZXJUb1JlbmRlcjsK
LSAgICBwcml2YXRlIERlY29kZWRUZXh0dXJlQnVmZmVyIHJlbmRlcmVkQnVmZmVyOwotCi0gICAg
cHVibGljIFRleHR1cmVMaXN0ZW5lcihTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVy
ZUhlbHBlcikgewotICAgICAgdGhpcy5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0
dXJlSGVscGVyOwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcodGhp
cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkQnVmZmVyVG9SZW5kZXIoRGVjb2RlZE91
dHB1dEJ1ZmZlciBidWZmZXIpIHsKLSAgICAgIGlmIChidWZmZXJUb1JlbmRlciAhPSBudWxsKSB7
Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJVbmV4cGVjdGVkIGFkZEJ1ZmZlclRvUmVuZGVyKCkg
Y2FsbGVkIHdoaWxlIHdhaXRpbmcgZm9yIGEgdGV4dHVyZS4iKTsKLSAgICAgICAgdGhyb3cgbmV3
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV2FpdGluZyBmb3IgYSB0ZXh0dXJlLiIpOwotICAgICAg
fQotICAgICAgYnVmZmVyVG9SZW5kZXIgPSBidWZmZXI7Ci0gICAgfQotCi0gICAgcHVibGljIGJv
b2xlYW4gaXNXYWl0aW5nRm9yVGV4dHVyZSgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJh
bWVMb2NrKSB7Ci0gICAgICAgIHJldHVybiBidWZmZXJUb1JlbmRlciAhPSBudWxsOwotICAgICAg
fQotICAgIH0KLQotICAgIC8vIENhbGxiYWNrIGZyb20gfHN1cmZhY2VUZXh0dXJlSGVscGVyfC4g
TWF5IGJlIGNhbGxlZCBvbiBhbiBhcmJpdHJhcnkgdGhyZWFkLgotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICBpbnQgb2VzVGV4
dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAg
ICAgc3luY2hyb25pemVkIChuZXdGcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlcmVkQnVm
ZmVyICE9IG51bGwpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoCi0gICAgICAgICAgICAgIFRBRywg
IlVuZXhwZWN0ZWQgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBjYWxsZWQgd2hpbGUgYWxyZWFk
eSBob2xkaW5nIGEgdGV4dHVyZS4iKTsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJBbHJlYWR5IGhvbGRpbmcgYSB0ZXh0dXJlLiIpOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIHx0aW1lc3RhbXBOc3wgaXMgYWx3YXlzIHplcm8gb24gc29tZSBBbmRyb2lkIHZlcnNp
b25zLgotICAgICAgICByZW5kZXJlZEJ1ZmZlciA9IG5ldyBEZWNvZGVkVGV4dHVyZUJ1ZmZlcihv
ZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwKLSAgICAgICAgICAgIGJ1ZmZlclRvUmVuZGVy
LnByZXNlbnRhdGlvblRpbWVTdGFtcE1zLCBidWZmZXJUb1JlbmRlci50aW1lU3RhbXBNcywKLSAg
ICAgICAgICAgIGJ1ZmZlclRvUmVuZGVyLm50cFRpbWVTdGFtcE1zLCBidWZmZXJUb1JlbmRlci5k
ZWNvZGVUaW1lTXMsCi0gICAgICAgICAgICBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAt
IGJ1ZmZlclRvUmVuZGVyLmVuZERlY29kZVRpbWVNcyk7Ci0gICAgICAgIGJ1ZmZlclRvUmVuZGVy
ID0gbnVsbDsKLSAgICAgICAgbmV3RnJhbWVMb2NrLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAg
IH0KLQotICAgIC8vIERlcXVldWVzIGFuZCByZXR1cm5zIGEgRGVjb2RlZFRleHR1cmVCdWZmZXIg
aWYgYXZhaWxhYmxlLCBvciBudWxsIG90aGVyd2lzZS4KLSAgICBwdWJsaWMgRGVjb2RlZFRleHR1
cmVCdWZmZXIgZGVxdWV1ZVRleHR1cmVCdWZmZXIoaW50IHRpbWVvdXRNcykgewotICAgICAgc3lu
Y2hyb25pemVkIChuZXdGcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlcmVkQnVmZmVyID09
IG51bGwgJiYgdGltZW91dE1zID4gMCAmJiBpc1dhaXRpbmdGb3JUZXh0dXJlKCkpIHsKLSAgICAg
ICAgICB0cnkgewotICAgICAgICAgICAgbmV3RnJhbWVMb2NrLndhaXQodGltZW91dE1zKTsKLSAg
ICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAv
LyBSZXN0b3JlIHRoZSBpbnRlcnJ1cHRlZCBzdGF0dXMgYnkgcmVpbnRlcnJ1cHRpbmcgdGhlIHRo
cmVhZC4KLSAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJydXB0KCk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIERlY29kZWRUZXh0dXJlQnVmZmVyIHJldHVy
bmVkQnVmZmVyID0gcmVuZGVyZWRCdWZmZXI7Ci0gICAgICAgIHJlbmRlcmVkQnVmZmVyID0gbnVs
bDsKLSAgICAgICAgcmV0dXJuIHJldHVybmVkQnVmZmVyOwotICAgICAgfQotICAgIH0KLQotICAg
IHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICAvLyBTdXJmYWNlVGV4dHVyZUhlbHBlci5z
dG9wTGlzdGVuaW5nKCkgd2lsbCBibG9jayB1bnRpbCBhbnkgb25UZXh0dXJlRnJhbWVBdmFpbGFi
bGUoKSBpbgotICAgICAgLy8gcHJvZ3Jlc3MgaXMgZG9uZS4gVGhlcmVmb3JlLCB0aGUgY2FsbCBt
dXN0IGJlIG91dHNpZGUgYW55IHN5bmNocm9uaXplZAotICAgICAgLy8gc3RhdGVtZW50IHRoYXQg
aXMgYWxzbyB1c2VkIGluIHRoZSBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGFib3ZlIHRvIGF2
b2lkIGRlYWRsb2Nrcy4KLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmco
KTsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0gICAgICAgIGlmIChyZW5k
ZXJlZEJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0
dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBudWxsOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyBudWxsIGlmIG5vIGRl
Y29kZWQgYnVmZmVyIGlzIGF2YWlsYWJsZSwgYW5kIG90aGVyd2lzZSBhIERlY29kZWRCeXRlQnVm
ZmVyLgotICAvLyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGNhbGwgaXMgbWFkZSBv
biB0aGUgd3JvbmcgdGhyZWFkLCBpZiBjb2xvciBmb3JtYXQgY2hhbmdlcyB0byBhbgotICAvLyB1
bnN1cHBvcnRlZCBmb3JtYXQsIG9yIGlmIHxtZWRpYUNvZGVjfCBpcyBub3QgaW4gdGhlIEV4ZWN1
dGluZyBzdGF0ZS4gVGhyb3dzIENvZGVjRXhjZXB0aW9uCi0gIC8vIHVwb24gY29kZWMgZXJyb3Iu
Ci0gIHByaXZhdGUgRGVjb2RlZE91dHB1dEJ1ZmZlciBkZXF1ZXVlT3V0cHV0QnVmZmVyKGludCBk
ZXF1ZXVlVGltZW91dE1zKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICBp
ZiAoZGVjb2RlU3RhcnRUaW1lTXMuaXNFbXB0eSgpKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci0gICAgLy8gRHJhaW4gdGhlIGRlY29kZXIgdW50aWwgcmVjZWl2aW5nIGEgZGVjb2RlZCBi
dWZmZXIgb3IgaGl0dGluZwotICAgIC8vIE1lZGlhQ29kZWMuSU5GT19UUllfQUdBSU5fTEFURVIu
Ci0gICAgZmluYWwgTWVkaWFDb2RlYy5CdWZmZXJJbmZvIGluZm8gPSBuZXcgTWVkaWFDb2RlYy5C
dWZmZXJJbmZvKCk7Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGZpbmFsIGludCByZXN1bHQg
PQotICAgICAgICAgIG1lZGlhQ29kZWMuZGVxdWV1ZU91dHB1dEJ1ZmZlcihpbmZvLCBUaW1lVW5p
dC5NSUxMSVNFQ09ORFMudG9NaWNyb3MoZGVxdWV1ZVRpbWVvdXRNcykpOwotICAgICAgc3dpdGNo
IChyZXN1bHQpIHsKLSAgICAgICAgY2FzZSBNZWRpYUNvZGVjLklORk9fT1VUUFVUX0JVRkZFUlNf
Q0hBTkdFRDoKLSAgICAgICAgICBvdXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRC
dWZmZXJzKCk7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkRlY29kZXIgb3V0cHV0IGJ1ZmZl
cnMgY2hhbmdlZDogIiArIG91dHB1dEJ1ZmZlcnMubGVuZ3RoKTsKLSAgICAgICAgICBpZiAoaGFz
RGVjb2RlZEZpcnN0RnJhbWUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJVbmV4cGVjdGVkIG91dHB1dCBidWZmZXIgY2hhbmdlIGV2ZW50LiIpOwotICAgICAgICAg
IH0KLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNZWRpYUNvZGVjLklORk9fT1VUUFVU
X0ZPUk1BVF9DSEFOR0VEOgotICAgICAgICAgIE1lZGlhRm9ybWF0IGZvcm1hdCA9IG1lZGlhQ29k
ZWMuZ2V0T3V0cHV0Rm9ybWF0KCk7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkRlY29kZXIg
Zm9ybWF0IGNoYW5nZWQ6ICIgKyBmb3JtYXQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaW50IG5l
d193aWR0aCA9IGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9XSURUSCk7Ci0gICAg
ICAgICAgaW50IG5ld19oZWlnaHQgPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlf
SEVJR0hUKTsKLSAgICAgICAgICBpZiAoaGFzRGVjb2RlZEZpcnN0RnJhbWUgJiYgKG5ld193aWR0
aCAhPSB3aWR0aCB8fCBuZXdfaGVpZ2h0ICE9IGhlaWdodCkpIHsKLSAgICAgICAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHNpemUgY2hhbmdlLiBDb25maWd1cmVk
ICIgKyB3aWR0aCArICIqIiArIGhlaWdodAotICAgICAgICAgICAgICAgICsgIi4gTmV3ICIgKyBu
ZXdfd2lkdGggKyAiKiIgKyBuZXdfaGVpZ2h0KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgd2lk
dGggPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfV0lEVEgpOwotICAgICAgICAg
IGhlaWdodCA9IGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9IRUlHSFQpOwotCi0g
ICAgICAgICAgaWYgKCF1c2VTdXJmYWNlICYmIGZvcm1hdC5jb250YWluc0tleShNZWRpYUZvcm1h
dC5LRVlfQ09MT1JfRk9STUFUKSkgewotICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBmb3JtYXQu
Z2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfQ09MT1JfRk9STUFUKTsKLSAgICAgICAgICAgIExv
Z2dpbmcuZChUQUcsICJDb2xvcjogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhjb2xvckZvcm1h
dCkpOwotICAgICAgICAgICAgaWYgKCFzdXBwb3J0ZWRDb2xvckxpc3QuY29udGFpbnMoY29sb3JG
b3JtYXQpKSB7Ci0gICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24o
Ik5vbiBzdXBwb3J0ZWQgY29sb3IgZm9ybWF0OiAiICsgY29sb3JGb3JtYXQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KCJzdHJp
ZGUiKSkgewotICAgICAgICAgICAgc3RyaWRlID0gZm9ybWF0LmdldEludGVnZXIoInN0cmlkZSIp
OwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KCJzbGljZS1o
ZWlnaHQiKSkgewotICAgICAgICAgICAgc2xpY2VIZWlnaHQgPSBmb3JtYXQuZ2V0SW50ZWdlcigi
c2xpY2UtaGVpZ2h0Iik7Ci0gICAgICAgICAgfQotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJG
cmFtZSBzdHJpZGUgYW5kIHNsaWNlIGhlaWdodDogIiArIHN0cmlkZSArICIgeCAiICsgc2xpY2VI
ZWlnaHQpOwotICAgICAgICAgIHN0cmlkZSA9IE1hdGgubWF4KHdpZHRoLCBzdHJpZGUpOwotICAg
ICAgICAgIHNsaWNlSGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCBzbGljZUhlaWdodCk7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVkaWFDb2RlYy5JTkZPX1RSWV9BR0FJTl9MQVRF
UjoKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBo
YXNEZWNvZGVkRmlyc3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgVGltZVN0YW1wcyB0aW1lU3Rh
bXBzID0gZGVjb2RlU3RhcnRUaW1lTXMucmVtb3ZlKCk7Ci0gICAgICAgICAgbG9uZyBkZWNvZGVU
aW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIHRpbWVTdGFtcHMuZGVjb2Rl
U3RhcnRUaW1lTXM7Ci0gICAgICAgICAgaWYgKGRlY29kZVRpbWVNcyA+IE1BWF9ERUNPREVfVElN
RV9NUykgewotICAgICAgICAgICAgTG9nZ2luZy5lKFRBRywgIlZlcnkgaGlnaCBkZWNvZGUgdGlt
ZTogIiArIGRlY29kZVRpbWVNcyArICJtcyIKLSAgICAgICAgICAgICAgICAgICAgKyAiLiBRIHNp
emU6ICIgKyBkZWNvZGVTdGFydFRpbWVNcy5zaXplKCkKLSAgICAgICAgICAgICAgICAgICAgKyAi
LiBNaWdodCBiZSBjYXVzZWQgYnkgcmVzdW1pbmcgSDI2NCBkZWNvZGluZyBhZnRlciBhIHBhdXNl
LiIpOwotICAgICAgICAgICAgZGVjb2RlVGltZU1zID0gTUFYX0RFQ09ERV9USU1FX01TOwotICAg
ICAgICAgIH0KLSAgICAgICAgICByZXR1cm4gbmV3IERlY29kZWRPdXRwdXRCdWZmZXIocmVzdWx0
LCBpbmZvLm9mZnNldCwgaW5mby5zaXplLAotICAgICAgICAgICAgICBUaW1lVW5pdC5NSUNST1NF
Q09ORFMudG9NaWxsaXMoaW5mby5wcmVzZW50YXRpb25UaW1lVXMpLCB0aW1lU3RhbXBzLnRpbWVT
dGFtcE1zLAotICAgICAgICAgICAgICB0aW1lU3RhbXBzLm50cFRpbWVTdGFtcE1zLCBkZWNvZGVU
aW1lTXMsIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICAvLyBSZXR1cm5zIG51bGwgaWYgbm8gZGVjb2RlZCBidWZmZXIgaXMgYXZhaWxhYmxl
LCBhbmQgb3RoZXJ3aXNlIGEgRGVjb2RlZFRleHR1cmVCdWZmZXIuCi0gIC8vIFRocm93cyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb24gaWYgY2FsbCBpcyBtYWRlIG9uIHRoZSB3cm9uZyB0aHJlYWQsIGlm
IGNvbG9yIGZvcm1hdCBjaGFuZ2VzIHRvIGFuCi0gIC8vIHVuc3VwcG9ydGVkIGZvcm1hdCwgb3Ig
aWYgfG1lZGlhQ29kZWN8IGlzIG5vdCBpbiB0aGUgRXhlY3V0aW5nIHN0YXRlLiBUaHJvd3MgQ29k
ZWNFeGNlcHRpb24KLSAgLy8gdXBvbiBjb2RlYyBlcnJvci4gSWYgfGRlcXVldWVUaW1lb3V0TXN8
ID4gMCwgdGhlIG9sZGVzdCBkZWNvZGVkIGZyYW1lIHdpbGwgYmUgZHJvcHBlZCBpZgotICAvLyBh
IGZyYW1lIGNhbid0IGJlIHJldHVybmVkLgotICBwcml2YXRlIERlY29kZWRUZXh0dXJlQnVmZmVy
IGRlcXVldWVUZXh0dXJlQnVmZmVyKGludCBkZXF1ZXVlVGltZW91dE1zKSB7Ci0gICAgY2hlY2tP
bk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICBpZiAoIXVzZVN1cmZhY2UpIHsKLSAgICAgIHRocm93
IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImRlcXVldWVUZXh0dXJlKCkgY2FsbGVkIGZvciBi
eXRlIGJ1ZmZlciBkZWNvZGluZy4iKTsKLSAgICB9Ci0gICAgRGVjb2RlZE91dHB1dEJ1ZmZlciBv
dXRwdXRCdWZmZXIgPSBkZXF1ZXVlT3V0cHV0QnVmZmVyKGRlcXVldWVUaW1lb3V0TXMpOwotICAg
IGlmIChvdXRwdXRCdWZmZXIgIT0gbnVsbCkgewotICAgICAgZGVxdWV1ZWRTdXJmYWNlT3V0cHV0
QnVmZmVycy5hZGQob3V0cHV0QnVmZmVyKTsKLSAgICB9Ci0KLSAgICBNYXliZVJlbmRlckRlY29k
ZWRUZXh0dXJlQnVmZmVyKCk7Ci0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgdGV4dHVyZSByZWFk
eSBub3cgYnkgd2FpdGluZyBtYXggfGRlcXVldWVUaW1lb3V0TXN8LgotICAgIERlY29kZWRUZXh0
dXJlQnVmZmVyIHJlbmRlcmVkQnVmZmVyID0gdGV4dHVyZUxpc3RlbmVyLmRlcXVldWVUZXh0dXJl
QnVmZmVyKGRlcXVldWVUaW1lb3V0TXMpOwotICAgIGlmIChyZW5kZXJlZEJ1ZmZlciAhPSBudWxs
KSB7Ci0gICAgICBNYXliZVJlbmRlckRlY29kZWRUZXh0dXJlQnVmZmVyKCk7Ci0gICAgICByZXR1
cm4gcmVuZGVyZWRCdWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKChkZXF1ZXVlZFN1cmZhY2VPdXRw
dXRCdWZmZXJzLnNpemUoKQotICAgICAgICAgICAgICAgID49IE1hdGgubWluKE1BWF9RVUVVRURf
T1VUUFVUQlVGRkVSUywgb3V0cHV0QnVmZmVycy5sZW5ndGgpCi0gICAgICAgICAgICB8fCAoZGVx
dWV1ZVRpbWVvdXRNcyA+IDAgJiYgIWRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuaXNFbXB0
eSgpKSkpIHsKLSAgICAgICsrZHJvcHBlZEZyYW1lczsKLSAgICAgIC8vIERyb3AgdGhlIG9sZGVz
dCBmcmFtZSBzdGlsbCBpbiBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLgotICAgICAgLy8g
VGhlIG9sZGVzdCBmcmFtZSBpcyBvd25lZCBieSB8dGV4dHVyZUxpc3RlbmVyfCBhbmQgY2FuJ3Qg
YmUgZHJvcHBlZCBzaW5jZQotICAgICAgLy8gbWVkaWFDb2RlYy5yZWxlYXNlT3V0cHV0QnVmZmVy
IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLgotICAgICAgZmluYWwgRGVjb2RlZE91dHB1dEJ1ZmZl
ciBkcm9wcGVkRnJhbWUgPSBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLnJlbW92ZSgpOwot
ICAgICAgaWYgKGRlcXVldWVUaW1lb3V0TXMgPiAwKSB7Ci0gICAgICAgIC8vIFRPRE8ocGVya2op
OiBSZS1hZGQgdGhlIGJlbG93IGxvZyB3aGVuIFZpZGVvUmVuZGVyR1VJIGhhcyBiZWVuIHJlbW92
ZWQgb3IgZml4ZWQgdG8KLSAgICAgICAgLy8gcmV0dXJuIHRoZSBvbmUgYW5kIG9ubHkgdGV4dHVy
ZSBldmVuIGlmIGl0IGRvZXMgbm90IHJlbmRlci4KLSAgICAgICAgTG9nZ2luZy53KFRBRywgIkRy
YWluaW5nIGRlY29kZXIuIERyb3BwaW5nIGZyYW1lIHdpdGggVFM6ICIKLSAgICAgICAgICAgICAg
ICArIGRyb3BwZWRGcmFtZS5wcmVzZW50YXRpb25UaW1lU3RhbXBNcyArICIuIFRvdGFsIG51bWJl
ciBvZiBkcm9wcGVkIGZyYW1lczogIgotICAgICAgICAgICAgICAgICsgZHJvcHBlZEZyYW1lcyk7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiVG9vIG1hbnkgb3V0cHV0
IGJ1ZmZlcnMgIiArIGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuc2l6ZSgpCi0gICAgICAg
ICAgICAgICAgKyAiLiBEcm9wcGluZyBmcmFtZSB3aXRoIFRTOiAiICsgZHJvcHBlZEZyYW1lLnBy
ZXNlbnRhdGlvblRpbWVTdGFtcE1zCi0gICAgICAgICAgICAgICAgKyAiLiBUb3RhbCBudW1iZXIg
b2YgZHJvcHBlZCBmcmFtZXM6ICIgKyBkcm9wcGVkRnJhbWVzKTsKLSAgICAgIH0KLQotICAgICAg
bWVkaWFDb2RlYy5yZWxlYXNlT3V0cHV0QnVmZmVyKGRyb3BwZWRGcmFtZS5pbmRleCwgZmFsc2Ug
LyogcmVuZGVyICovKTsKLSAgICAgIHJldHVybiBuZXcgRGVjb2RlZFRleHR1cmVCdWZmZXIoMCwg
bnVsbCwgZHJvcHBlZEZyYW1lLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zLAotICAgICAgICAgIGRy
b3BwZWRGcmFtZS50aW1lU3RhbXBNcywgZHJvcHBlZEZyYW1lLm50cFRpbWVTdGFtcE1zLCBkcm9w
cGVkRnJhbWUuZGVjb2RlVGltZU1zLAotICAgICAgICAgIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFs
dGltZSgpIC0gZHJvcHBlZEZyYW1lLmVuZERlY29kZVRpbWVNcyk7Ci0gICAgfQotICAgIHJldHVy
biBudWxsOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIE1heWJlUmVuZGVyRGVjb2RlZFRleHR1cmVC
dWZmZXIoKSB7Ci0gICAgaWYgKGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuaXNFbXB0eSgp
IHx8IHRleHR1cmVMaXN0ZW5lci5pc1dhaXRpbmdGb3JUZXh0dXJlKCkpIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gR2V0IHRoZSBmaXJzdCBmcmFtZSBpbiB0aGUgcXVldWUgYW5kIHJl
bmRlciB0byB0aGUgZGVjb2RlciBvdXRwdXQgc3VyZmFjZS4KLSAgICBmaW5hbCBEZWNvZGVkT3V0
cHV0QnVmZmVyIGJ1ZmZlciA9IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMucmVtb3ZlKCk7
Ci0gICAgdGV4dHVyZUxpc3RlbmVyLmFkZEJ1ZmZlclRvUmVuZGVyKGJ1ZmZlcik7Ci0gICAgbWVk
aWFDb2RlYy5yZWxlYXNlT3V0cHV0QnVmZmVyKGJ1ZmZlci5pbmRleCwgdHJ1ZSAvKiByZW5kZXIg
Ki8pOwotICB9Ci0KLSAgLy8gUmVsZWFzZSBhIGRlcXVldWVkIG91dHB1dCBieXRlIGJ1ZmZlciBi
YWNrIHRvIHRoZSBjb2RlYyBmb3IgcmUtdXNlLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZm9yCi0g
IC8vIG5vbi1zdXJmYWNlIGRlY29kaW5nLgotICAvLyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0
aW9uIGlmIHRoZSBjYWxsIGlzIG1hZGUgb24gdGhlIHdyb25nIHRocmVhZCwgaWYgY29kZWMgaXMg
Y29uZmlndXJlZAotICAvLyBmb3Igc3VyZmFjZSBkZWNvZGluZywgb3IgaWYgfG1lZGlhQ29kZWN8
IGlzIG5vdCBpbiB0aGUgRXhlY3V0aW5nIHN0YXRlLiBUaHJvd3MKLSAgLy8gTWVkaWFDb2RlYy5D
b2RlY0V4Y2VwdGlvbiB1cG9uIGNvZGVjIGVycm9yLgotICBwcml2YXRlIHZvaWQgcmV0dXJuRGVj
b2RlZE91dHB1dEJ1ZmZlcihpbnQgaW5kZXgpCi0gICAgICB0aHJvd3MgSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uLCBNZWRpYUNvZGVjLkNvZGVjRXhjZXB0aW9uIHsKLSAgICBjaGVja09uTWVkaWFDb2Rl
Y1RocmVhZCgpOwotICAgIGlmICh1c2VTdXJmYWNlKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bFN0YXRlRXhjZXB0aW9uKCJyZXR1cm5EZWNvZGVkT3V0cHV0QnVmZmVyKCkgY2FsbGVkIGZvciBz
dXJmYWNlIGRlY29kaW5nLiIpOwotICAgIH0KLSAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRC
dWZmZXIoaW5kZXgsIGZhbHNlIC8qIHJlbmRlciAqLyk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDczOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0
IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlYzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29k
ZWNJbmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmls
aXRpZXM7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjTGlzdDsKLWltcG9ydCBhbmRy
b2lkLm1lZGlhLk1lZGlhRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWlt
cG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0
IGFuZHJvaWQudmlldy5TdXJmYWNlOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0
IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGls
LmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQu
VGltZVVuaXQ7Ci0KLS8vIEphdmEtc2lkZSBvZiBwZWVyY29ubmVjdGlvbl9qbmkuY2M6TWVkaWFD
b2RlY1ZpZGVvRW5jb2Rlci4KLS8vIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0
YWlsIG9mIHRoZSBKYXZhIFBlZXJDb25uZWN0aW9uIEFQSS4KLUBUYXJnZXRBcGkoMTkpCi1AU3Vw
cHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIE1lZGlhQ29kZWNWaWRl
b0VuY29kZXIgewotICAvLyBUaGlzIGNsYXNzIGlzIGNvbnN0cnVjdGVkLCBvcGVyYXRlZCwgYW5k
IGRlc3Ryb3llZCBieSBpdHMgQysrIGluY2FybmF0aW9uLAotICAvLyBzbyB0aGUgY2xhc3MgYW5k
IGl0cyBtZXRob2RzIGhhdmUgbm9uLXB1YmxpYyB2aXNpYmlsaXR5LiAgVGhlIEFQSSB0aGlzCi0g
IC8vIGNsYXNzIGV4cG9zZXMgYWltcyB0byBtaW1pYyB0aGUgd2VicnRjOjpWaWRlb0VuY29kZXIg
QVBJIGFzIGNsb3NlbHkgYXMKLSAgLy8gcG9zc2libHkgdG8gbWluaW1pemUgdGhlIGFtb3VudCBv
ZiB0cmFuc2xhdGlvbiB3b3JrIG5lY2Vzc2FyeS4KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIk1lZGlhQ29kZWNWaWRlb0VuY29kZXIiOwotCi0gIC8vIFRyYWNrcyB3ZWJy
dGM6OlZpZGVvQ29kZWNUeXBlLgotICBwdWJsaWMgZW51bSBWaWRlb0NvZGVjVHlwZSB7IFZJREVP
X0NPREVDX1ZQOCwgVklERU9fQ09ERUNfVlA5LCBWSURFT19DT0RFQ19IMjY0IH0KLQotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VUX01TID0gNTAw
MDsgLy8gVGltZW91dCBmb3IgY29kZWMgcmVsZWFzaW5nLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgREVRVUVVRV9USU1FT1VUID0gMDsgLy8gTm9uLWJsb2NraW5nLCBubyB3YWl0LgotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUUkFURV9BREpVU1RNRU5UX0ZQUyA9IDMwOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYSU1VTV9JTklUSUFMX0ZQUyA9IDMwOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgQklUUkFURV9DT1JSRUNUSU9OX1NFQyA9IDMuMDsKLSAg
Ly8gTWF4aW11bSBiaXRyYXRlIGNvcnJlY3Rpb24gc2NhbGUgLSBubyBtb3JlIHRoYW4gMiB0aW1l
cy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEJJVFJBVEVfQ09SUkVDVElPTl9NQVhf
U0NBTEUgPSAyOwotICAvLyBBbW91bnQgb2YgY29ycmVjdGlvbiBzdGVwcyB0byByZWFjaCBjb3Jy
ZWN0aW9uIG1heGltdW0gc2NhbGUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCSVRSQVRF
X0NPUlJFQ1RJT05fU1RFUFMgPSAxMDsKLQotICAvLyBBY3RpdmUgcnVubmluZyBlbmNvZGVyIGlu
c3RhbmNlLiBTZXQgaW4gaW5pdEVuY29kZSgpIChjYWxsZWQgZnJvbSBuYXRpdmUgY29kZSkKLSAg
Ly8gYW5kIHJlc2V0IHRvIG51bGwgaW4gcmVsZWFzZSgpIGNhbGwuCi0gIHByaXZhdGUgc3RhdGlj
IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgcnVubmluZ0luc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0
ZSBzdGF0aWMgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFj
ayA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIGludCBjb2RlY0Vycm9ycyA9IDA7Ci0gIC8vIExp
c3Qgb2YgZGlzYWJsZWQgY29kZWMgdHlwZXMgLSBjYW4gYmUgc2V0IGZyb20gYXBwbGljYXRpb24u
Ci0gIHByaXZhdGUgc3RhdGljIFNldDxTdHJpbmc+IGh3RW5jb2RlckRpc2FibGVkVHlwZXMgPSBu
ZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0KLSAgcHJpdmF0ZSBUaHJlYWQgbWVkaWFDb2RlY1RocmVh
ZDsKLSAgcHJpdmF0ZSBNZWRpYUNvZGVjIG1lZGlhQ29kZWM7Ci0gIHByaXZhdGUgQnl0ZUJ1ZmZl
cltdIG91dHB1dEJ1ZmZlcnM7Ci0gIHByaXZhdGUgRWdsQmFzZTE0IGVnbEJhc2U7Ci0gIHByaXZh
dGUgaW50IHdpZHRoOwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgU3VyZmFjZSBp
bnB1dFN1cmZhY2U7Ci0gIHByaXZhdGUgR2xSZWN0RHJhd2VyIGRyYXdlcjsKLQotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVlA4X01JTUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA4
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOV9NSU1FX1RZUEUgPSAidmlkZW8v
eC12bmQub24yLnZwOSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0X01JTUVf
VFlQRSA9ICJ2aWRlby9hdmMiOwotCi0gIC8vIFR5cGUgb2YgYml0cmF0ZSBhZGp1c3RtZW50IGZv
ciB2aWRlbyBlbmNvZGVyLgotICBwdWJsaWMgZW51bSBCaXRyYXRlQWRqdXN0bWVudFR5cGUgewot
ICAgIC8vIE5vIGFkanVzdG1lbnQgLSB2aWRlbyBlbmNvZGVyIGhhcyBubyBrbm93biBiaXRyYXRl
IHByb2JsZW0uCi0gICAgTk9fQURKVVNUTUVOVCwKLSAgICAvLyBGcmFtZXJhdGUgYmFzZWQgYml0
cmF0ZSBhZGp1c3RtZW50IGlzIHJlcXVpcmVkIC0gSFcgZW5jb2RlciBkb2VzIG5vdCB1c2UgZnJh
bWUKLSAgICAvLyB0aW1lc3RhbXBzIHRvIGNhbGN1bGF0ZSBmcmFtZSBiaXRyYXRlIGJ1ZGdldCBh
bmQgaW5zdGVhZCBpcyByZWx5aW5nIG9uIGluaXRpYWwKLSAgICAvLyBmcHMgY29uZmlndXJhdGlv
biBhc3N1bWluZyB0aGF0IGFsbCBmcmFtZXMgYXJlIGNvbWluZyBhdCBmaXhlZCBpbml0aWFsIGZy
YW1lIHJhdGUuCi0gICAgRlJBTUVSQVRFX0FESlVTVE1FTlQsCi0gICAgLy8gRHluYW1pYyBiaXRy
YXRlIGFkanVzdG1lbnQgaXMgcmVxdWlyZWQgLSBIVyBlbmNvZGVyIHVzZWQgZnJhbWUgdGltZXN0
YW1wcywgYnV0IGFjdHVhbAotICAgIC8vIGJpdHJhdGUgZGV2aWF0ZXMgdG9vIG11Y2ggZnJvbSB0
aGUgdGFyZ2V0IHZhbHVlLgotICAgIERZTkFNSUNfQURKVVNUTUVOVAotICB9Ci0KLSAgLy8gQ2xh
c3MgZGVzY3JpYmluZyBzdXBwb3J0ZWQgbWVkaWEgY29kZWMgcHJvcGVydGllcy4KLSAgcHJpdmF0
ZSBzdGF0aWMgY2xhc3MgTWVkaWFDb2RlY1Byb3BlcnRpZXMgewotICAgIHB1YmxpYyBmaW5hbCBT
dHJpbmcgY29kZWNQcmVmaXg7Ci0gICAgLy8gTWluaW11bSBBbmRyb2lkIFNESyByZXF1aXJlZCBm
b3IgdGhpcyBjb2RlYyB0byBiZSB1c2VkLgotICAgIHB1YmxpYyBmaW5hbCBpbnQgbWluU2RrOwot
ICAgIC8vIEZsYWcgaWYgZW5jb2RlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB1c2UgZnJhbWUg
dGltZXN0YW1wcyB0byBjYWxjdWxhdGUgZnJhbWUgYml0cmF0ZQotICAgIC8vIGJ1ZGdldCBhbmQg
aW5zdGVhZCBpcyByZWx5aW5nIG9uIGluaXRpYWwgZnBzIGNvbmZpZ3VyYXRpb24gYXNzdW1pbmcg
dGhhdCBhbGwgZnJhbWVzIGFyZQotICAgIC8vIGNvbWluZyBhdCBmaXhlZCBpbml0aWFsIGZyYW1l
IHJhdGUuIEJpdHJhdGUgYWRqdXN0bWVudCBpcyByZXF1aXJlZCBmb3IgdGhpcyBjYXNlLgotICAg
IHB1YmxpYyBmaW5hbCBCaXRyYXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBl
OwotCi0gICAgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAgIFN0cmluZyBjb2RlY1ByZWZp
eCwgaW50IG1pblNkaywgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3RtZW50VHlw
ZSkgewotICAgICAgdGhpcy5jb2RlY1ByZWZpeCA9IGNvZGVjUHJlZml4OwotICAgICAgdGhpcy5t
aW5TZGsgPSBtaW5TZGs7Ci0gICAgICB0aGlzLmJpdHJhdGVBZGp1c3RtZW50VHlwZSA9IGJpdHJh
dGVBZGp1c3RtZW50VHlwZTsKLSAgICB9Ci0gIH0KLQotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBI
VyBWUDggZW5jb2RlcnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0
aWVzIHFjb21WcDhId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAg
ICAiT01YLnFjb20uIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQsIEJpdHJhdGVBZGp1c3Rt
ZW50VHlwZS5OT19BREpVU1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2Rl
Y1Byb3BlcnRpZXMgZXh5bm9zVnA4SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQcm9wZXJ0
aWVzKAotICAgICAgIk9NWC5FeHlub3MuIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5NLCBCaXRyYXRl
QWRqdXN0bWVudFR5cGUuRFlOQU1JQ19BREpVU1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB2cDhId0xpc3QgPQotICAgICAgbmV3IE1lZGlhQ29k
ZWNQcm9wZXJ0aWVzW10ge3Fjb21WcDhId1Byb3BlcnRpZXMsIGV4eW5vc1ZwOEh3UHJvcGVydGll
c307Ci0KLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcgVlA5IGVuY29kZXJzLgotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllcyBxY29tVnA5SHdQcm9wZXJ0aWVzID0g
bmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgIk9NWC5xY29tLiIsIEJ1aWxkLlZFUlNJ
T05fQ09ERVMuTSwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllcyBleHlub3NWcDlId1Byb3BlcnRp
ZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAiT01YLkV4eW5vcy4iLCBCdWls
ZC5WRVJTSU9OX0NPREVTLk0sIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UKTsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB2cDlId0xpc3Qg
PQotICAgICAgbmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10ge3Fjb21WcDlId1Byb3BlcnRpZXMs
IGV4eW5vc1ZwOUh3UHJvcGVydGllc307Ci0KLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcgSC4y
NjQgZW5jb2RlcnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVz
IHFjb21IMjY0SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAg
Ik9NWC5xY29tLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FULCBCaXRyYXRlQWRqdXN0bWVu
dFR5cGUuTk9fQURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQ
cm9wZXJ0aWVzIGV4eW5vc0gyNjRId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRp
ZXMoCi0gICAgICAiT01YLkV4eW5vcy4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QLCBC
aXRyYXRlQWRqdXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllc1tdIGgyNjRId0xpc3QgPQotICAgICAgbmV3
IE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10ge3Fjb21IMjY0SHdQcm9wZXJ0aWVzLCBleHlub3NIMjY0
SHdQcm9wZXJ0aWVzfTsKLQotICAvLyBMaXN0IG9mIGRldmljZXMgd2l0aCBwb29yIEguMjY0IGVu
Y29kZXIgcXVhbGl0eS4KLSAgLy8gSFcgSC4yNjQgZW5jb2RlciBvbiBiZWxvdyBkZXZpY2VzIGhh
cyBwb29yIGJpdHJhdGUgY29udHJvbCAtIGFjdHVhbAotICAvLyBiaXRyYXRlcyBkZXZpYXRlcyBh
IGxvdCBmcm9tIHRoZSB0YXJnZXQgdmFsdWUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
Z1tdIEgyNjRfSFdfRVhDRVBUSU9OX01PREVMUyA9Ci0gICAgICBuZXcgU3RyaW5nW10geyJTQU1T
VU5HLVNHSC1JMzM3IiwgIk5leHVzIDciLCAiTmV4dXMgNCJ9OwotCi0gIC8vIEJpdHJhdGUgbW9k
ZXMgLSBzaG91bGQgYmUgaW4gc3luYyB3aXRoIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgZGVm
aW5lZAotICAvLyBpbiBPTVhfVmlkZW8uaAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklE
RU9fQ29udHJvbFJhdGVDb25zdGFudCA9IDI7Ci0gIC8vIE5WMTIgY29sb3IgZm9ybWF0IHN1cHBv
cnRlZCBieSBRQ09NIGNvZGVjLCBidXQgbm90IGRlY2xhcmVkIGluIE1lZGlhQ29kZWMgLQotICAv
LyBzZWUgL2hhcmR3YXJlL3Fjb20vbWVkaWEvbW0tY29yZS9pbmMvT01YX1FDT01FeHRucy5oCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNl
bWlQbGFuYXIzMm0gPSAweDdGQTMwQzA0OwotICAvLyBBbGxvd2FibGUgY29sb3IgZm9ybWF0cyBz
dXBwb3J0ZWQgYnkgY29kZWMgLSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnRbXSBzdXBwb3J0ZWRDb2xvckxpc3QgPSB7Q29kZWNDYXBhYmlsaXRpZXMu
Q09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyLAotICAgICAgQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1Jf
Rm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX1FD
T01fRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAgIENPTE9SX1FDT01fRk9STUFUWVVWNDIw
UGFja2VkU2VtaVBsYW5hcjMybX07Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIHN1cHBv
cnRlZFN1cmZhY2VDb2xvckxpc3QgPSB7Q29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0U3Vy
ZmFjZX07Ci0gIHByaXZhdGUgVmlkZW9Db2RlY1R5cGUgdHlwZTsKLSAgcHJpdmF0ZSBpbnQgY29s
b3JGb3JtYXQ7IC8vIFVzZWQgYnkgbmF0aXZlIGNvZGUuCi0KLSAgLy8gVmFyaWFibGVzIHVzZWQg
Zm9yIGR5bmFtaWMgYml0cmF0ZSBhZGp1c3RtZW50LgotICBwcml2YXRlIEJpdHJhdGVBZGp1c3Rt
ZW50VHlwZSBiaXRyYXRlQWRqdXN0bWVudFR5cGUgPSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9f
QURKVVNUTUVOVDsKLSAgcHJpdmF0ZSBkb3VibGUgYml0cmF0ZUFjY3VtdWxhdG9yOwotICBwcml2
YXRlIGRvdWJsZSBiaXRyYXRlQWNjdW11bGF0b3JNYXg7Ci0gIHByaXZhdGUgZG91YmxlIGJpdHJh
dGVPYnNlcnZhdGlvblRpbWVNczsKLSAgcHJpdmF0ZSBpbnQgYml0cmF0ZUFkanVzdG1lbnRTY2Fs
ZUV4cDsKLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0Qml0cmF0ZUJwczsKLSAgcHJpdmF0ZSBpbnQgdGFy
Z2V0RnBzOwotCi0gIC8vIFNQUyBhbmQgUFBTIE5BTHMgKENvbmZpZyBmcmFtZSkgZm9yIEguMjY0
LgotICBwcml2YXRlIEJ5dGVCdWZmZXIgY29uZmlnRGF0YSA9IG51bGw7Ci0KLSAgLy8gTWVkaWFD
b2RlYyBlcnJvciBoYW5kbGVyIC0gaW52b2tlZCB3aGVuIGNyaXRpY2FsIGVycm9yIGhhcHBlbnMg
d2hpY2ggbWF5IHByZXZlbnQKLSAgLy8gZnVydGhlciB1c2Ugb2YgbWVkaWEgY29kZWMgQVBJLiBO
b3cgaXQgbWVhbnMgdGhhdCBvbmUgb2YgbWVkaWEgY29kZWMgaW5zdGFuY2VzCi0gIC8vIGlzIGhh
bmdpbmcgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCBpbiB0aGUgbmV4dCBjYWxsLgotICBwdWJs
aWMgc3RhdGljIGludGVyZmFjZSBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRXJyb3JDYWxsYmFjayB7
Ci0gICAgdm9pZCBvbk1lZGlhQ29kZWNWaWRlb0VuY29kZXJDcml0aWNhbEVycm9yKGludCBjb2Rl
Y0Vycm9ycyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RXJyb3JDYWxsYmFjayhN
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIlNldCBlcnJvciBjYWxsYmFjayIpOwotICAgIE1lZGlhQ29kZWNWaWRl
b0VuY29kZXIuZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2s7Ci0gIH0KLQotICAvLyBGdW5j
dGlvbnMgdG8gZGlzYWJsZSBIVyBlbmNvZGluZyAtIGNhbiBiZSBjYWxsZWQgZnJvbSBhcHBsaWNh
dGlvbnMgZm9yIHBsYXRmb3JtcwotICAvLyB3aGljaCBoYXZlIGtub3duIEhXIGRlY29kaW5nIHBy
b2JsZW1zLgotICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVZwOEh3Q29kZWMoKSB7Ci0gICAg
TG9nZ2luZy53KFRBRywgIlZQOCBlbmNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4i
KTsKLSAgICBod0VuY29kZXJEaXNhYmxlZFR5cGVzLmFkZChWUDhfTUlNRV9UWVBFKTsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlVnA5SHdDb2RlYygpIHsKLSAgICBMb2dnaW5n
LncoVEFHLCAiVlA5IGVuY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9uLiIpOwotICAg
IGh3RW5jb2RlckRpc2FibGVkVHlwZXMuYWRkKFZQOV9NSU1FX1RZUEUpOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyB2b2lkIGRpc2FibGVIMjY0SHdDb2RlYygpIHsKLSAgICBMb2dnaW5nLncoVEFH
LCAiSC4yNjQgZW5jb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdF
bmNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoSDI2NF9NSU1FX1RZUEUpOwotICB9Ci0KLSAgLy8gRnVu
Y3Rpb25zIHRvIHF1ZXJ5IGlmIEhXIGVuY29kaW5nIGlzIHN1cHBvcnRlZC4KLSAgcHVibGljIHN0
YXRpYyBib29sZWFuIGlzVnA4SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJE
aXNhYmxlZFR5cGVzLmNvbnRhaW5zKFZQOF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdF
bmNvZGVyKFZQOF9NSU1FX1RZUEUsIHZwOEh3TGlzdCwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBu
dWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOUh3U3VwcG9ydGVkKCkg
ewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDlfTUlNRV9U
WVBFKQotICAgICAgICAmJiAoZmluZEh3RW5jb2RlcihWUDlfTUlNRV9UWVBFLCB2cDlId0xpc3Qs
IHN1cHBvcnRlZENvbG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJv
b2xlYW4gaXNIMjY0SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxl
ZFR5cGVzLmNvbnRhaW5zKEgyNjRfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZEh3RW5jb2Rl
cihIMjY0X01JTUVfVFlQRSwgaDI2NEh3TGlzdCwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBudWxs
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOEh3U3VwcG9ydGVkVXNpbmdU
ZXh0dXJlcygpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMo
VlA4X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA4X01JTUVfVFlQRSwg
dnA4SHdMaXN0LCBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOUh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpIHsK
LSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA5X01JTUVfVFlQ
RSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA5X01JTUVfVFlQRSwgdnA5SHdMaXN0LCBz
dXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgYm9vbGVhbiBpc0gyNjRId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSB7Ci0gICAgcmV0dXJu
ICFod0VuY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRhaW5zKEgyNjRfTUlNRV9UWVBFKQotICAgICAg
ICAmJiAoZmluZEh3RW5jb2RlcihIMjY0X01JTUVfVFlQRSwgaDI2NEh3TGlzdCwgc3VwcG9ydGVk
U3VyZmFjZUNvbG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZv
ciBmaW5kSHdFbmNvZGVyKCkgYmVsb3cuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEVuY29kZXJQ
cm9wZXJ0aWVzIHsKLSAgICBwdWJsaWMgRW5jb2RlclByb3BlcnRpZXMoCi0gICAgICAgIFN0cmlu
ZyBjb2RlY05hbWUsIGludCBjb2xvckZvcm1hdCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJh
dGVBZGp1c3RtZW50VHlwZSkgewotICAgICAgdGhpcy5jb2RlY05hbWUgPSBjb2RlY05hbWU7Ci0g
ICAgICB0aGlzLmNvbG9yRm9ybWF0ID0gY29sb3JGb3JtYXQ7Ci0gICAgICB0aGlzLmJpdHJhdGVB
ZGp1c3RtZW50VHlwZSA9IGJpdHJhdGVBZGp1c3RtZW50VHlwZTsKLSAgICB9Ci0gICAgcHVibGlj
IGZpbmFsIFN0cmluZyBjb2RlY05hbWU7IC8vIE9wZW5NYXggY29tcG9uZW50IG5hbWUgZm9yIEhX
IGNvZGVjLgotICAgIHB1YmxpYyBmaW5hbCBpbnQgY29sb3JGb3JtYXQ7IC8vIENvbG9yIGZvcm1h
dCBzdXBwb3J0ZWQgYnkgY29kZWMuCi0gICAgcHVibGljIGZpbmFsIEJpdHJhdGVBZGp1c3RtZW50
VHlwZSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7IC8vIEJpdHJhdGUgYWRqdXN0bWVudCB0eXBlCi0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyBFbmNvZGVyUHJvcGVydGllcyBmaW5kSHdFbmNvZGVyKAot
ICAgICAgU3RyaW5nIG1pbWUsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10gc3VwcG9ydGVkSHdDb2Rl
Y1Byb3BlcnRpZXMsIGludFtdIGNvbG9yTGlzdCkgewotICAgIC8vIE1lZGlhQ29kZWMuc2V0UGFy
YW1ldGVycyBpcyBtaXNzaW5nIGZvciBKQiBhbmQgYmVsb3csIHNvIGJpdHJhdGUKLSAgICAvLyBj
YW4gbm90IGJlIGFkanVzdGVkIGR5bmFtaWNhbGx5LgotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNE
S19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgZGV2aWNlIGlzIGluIEguMjY0IGV4Y2VwdGlvbiBs
aXN0LgotICAgIGlmIChtaW1lLmVxdWFscyhIMjY0X01JTUVfVFlQRSkpIHsKLSAgICAgIExpc3Q8
U3RyaW5nPiBleGNlcHRpb25Nb2RlbHMgPSBBcnJheXMuYXNMaXN0KEgyNjRfSFdfRVhDRVBUSU9O
X01PREVMUyk7Ci0gICAgICBpZiAoZXhjZXB0aW9uTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVM
KSkgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiTW9kZWw6ICIgKyBCdWlsZC5NT0RFTCArICIg
aGFzIGJsYWNrIGxpc3RlZCBILjI2NCBlbmNvZGVyLiIpOwotICAgICAgICByZXR1cm4gbnVsbDsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1lZGlhQ29kZWNMaXN0
LmdldENvZGVjQ291bnQoKTsgKytpKSB7Ci0gICAgICBNZWRpYUNvZGVjSW5mbyBpbmZvID0gbnVs
bDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGluZm8gPSBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0lu
Zm9BdChpKTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZW5jb2RlciBjb2RlYyBpbmZv
IiwgZSk7Ci0gICAgICB9Ci0gICAgICBpZiAoaW5mbyA9PSBudWxsIHx8ICFpbmZvLmlzRW5jb2Rl
cigpKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgU3RyaW5nIG5hbWUgPSBu
dWxsOwotICAgICAgZm9yIChTdHJpbmcgbWltZVR5cGUgOiBpbmZvLmdldFN1cHBvcnRlZFR5cGVz
KCkpIHsKLSAgICAgICAgaWYgKG1pbWVUeXBlLmVxdWFscyhtaW1lKSkgewotICAgICAgICAgIG5h
bWUgPSBpbmZvLmdldE5hbWUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg
fQotICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewotICAgICAgICBjb250aW51ZTsgLy8gTm8gSFcg
c3VwcG9ydCBpbiB0aGlzIGNvZGVjOyB0cnkgdGhlIG5leHQgb25lLgotICAgICAgfQotICAgICAg
TG9nZ2luZy52KFRBRywgIkZvdW5kIGNhbmRpZGF0ZSBlbmNvZGVyICIgKyBuYW1lKTsKLQotICAg
ICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBzdXBwb3J0ZWQgSFcgZW5jb2Rlci4KLSAgICAgIGJvb2xl
YW4gc3VwcG9ydGVkQ29kZWMgPSBmYWxzZTsKLSAgICAgIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBi
aXRyYXRlQWRqdXN0bWVudFR5cGUgPSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURKVVNUTUVO
VDsKLSAgICAgIGZvciAoTWVkaWFDb2RlY1Byb3BlcnRpZXMgY29kZWNQcm9wZXJ0aWVzIDogc3Vw
cG9ydGVkSHdDb2RlY1Byb3BlcnRpZXMpIHsKLSAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChj
b2RlY1Byb3BlcnRpZXMuY29kZWNQcmVmaXgpKSB7Ci0gICAgICAgICAgaWYgKEJ1aWxkLlZFUlNJ
T04uU0RLX0lOVCA8IGNvZGVjUHJvcGVydGllcy5taW5TZGspIHsKLSAgICAgICAgICAgIExvZ2dp
bmcudygKLSAgICAgICAgICAgICAgICBUQUcsICJDb2RlYyAiICsgbmFtZSArICIgaXMgZGlzYWJs
ZWQgZHVlIHRvIFNESyB2ZXJzaW9uICIgKyBCdWlsZC5WRVJTSU9OLlNES19JTlQpOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChjb2RlY1Byb3BlcnRp
ZXMuYml0cmF0ZUFkanVzdG1lbnRUeXBlICE9IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpV
U1RNRU5UKSB7Ci0gICAgICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFR5cGUgPSBjb2RlY1Byb3Bl
cnRpZXMuYml0cmF0ZUFkanVzdG1lbnRUeXBlOwotICAgICAgICAgICAgTG9nZ2luZy53KAotICAg
ICAgICAgICAgICAgIFRBRywgIkNvZGVjICIgKyBuYW1lICsgIiByZXF1aXJlcyBiaXRyYXRlIGFk
anVzdG1lbnQ6ICIgKyBiaXRyYXRlQWRqdXN0bWVudFR5cGUpOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBzdXBwb3J0ZWRDb2RlYyA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGlmICghc3VwcG9ydGVkQ29kZWMpIHsKLSAgICAgICAgY29udGludWU7
Ci0gICAgICB9Ci0KLSAgICAgIC8vIENoZWNrIGlmIEhXIGNvZGVjIHN1cHBvcnRzIGtub3duIGNv
bG9yIGZvcm1hdC4KLSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKLSAgICAg
IHRyeSB7Ci0gICAgICAgIGNhcGFiaWxpdGllcyA9IGluZm8uZ2V0Q2FwYWJpbGl0aWVzRm9yVHlw
ZShtaW1lKTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZW5jb2RlciBjYXBhYmlsaXRp
ZXMiLCBlKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBjb2xv
ckZvcm1hdCA6IGNhcGFiaWxpdGllcy5jb2xvckZvcm1hdHMpIHsKLSAgICAgICAgTG9nZ2luZy52
KFRBRywgIiAgIENvbG9yOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvbG9yRm9ybWF0KSk7
Ci0gICAgICB9Ci0KLSAgICAgIGZvciAoaW50IHN1cHBvcnRlZENvbG9yRm9ybWF0IDogY29sb3JM
aXN0KSB7Ci0gICAgICAgIGZvciAoaW50IGNvZGVjQ29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMu
Y29sb3JGb3JtYXRzKSB7Ci0gICAgICAgICAgaWYgKGNvZGVjQ29sb3JGb3JtYXQgPT0gc3VwcG9y
dGVkQ29sb3JGb3JtYXQpIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIHN1cHBvcnRlZCBIVyBlbmNv
ZGVyLgotICAgICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkZvdW5kIHRhcmdldCBlbmNvZGVyIGZv
ciBtaW1lICIgKyBtaW1lICsgIiA6ICIgKyBuYW1lICsgIi4gQ29sb3I6IDB4IgotICAgICAgICAg
ICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoY29kZWNDb2xvckZvcm1hdCkgKyAiLiBC
aXRyYXRlIGFkanVzdG1lbnQ6ICIKLSAgICAgICAgICAgICAgICAgICAgKyBiaXRyYXRlQWRqdXN0
bWVudFR5cGUpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBFbmNvZGVyUHJvcGVydGllcyhuYW1l
LCBjb2RlY0NvbG9yRm9ybWF0LCBiaXRyYXRlQWRqdXN0bWVudFR5cGUpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgLy8gTm8gSFcgZW5j
b2Rlci4KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpIHsK
LSAgICBpZiAobWVkaWFDb2RlY1RocmVhZC5nZXRJZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFk
KCkuZ2V0SWQoKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk1lZGlhQ29k
ZWNWaWRlb0VuY29kZXIgcHJldmlvdXNseSBvcGVyYXRlZCBvbiAiICsgbWVkaWFDb2RlY1RocmVh
ZAotICAgICAgICAgICsgIiBidXQgaXMgbm93IGNhbGxlZCBvbiAiICsgVGhyZWFkLmN1cnJlbnRU
aHJlYWQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3RhY2tU
cmFjZSgpIHsKLSAgICBpZiAocnVubmluZ0luc3RhbmNlICE9IG51bGwgJiYgcnVubmluZ0luc3Rh
bmNlLm1lZGlhQ29kZWNUaHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFjZUVsZW1lbnRb
XSBtZWRpYUNvZGVjU3RhY2tUcmFjZXMgPSBydW5uaW5nSW5zdGFuY2UubWVkaWFDb2RlY1RocmVh
ZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICBpZiAobWVkaWFDb2RlY1N0YWNrVHJhY2VzLmxlbmd0
aCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIk1lZGlhQ29kZWNWaWRlb0VuY29kZXIg
c3RhY2tzIHRyYWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJh
Y2UgOiBtZWRpYUNvZGVjU3RhY2tUcmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBz
dGFja1RyYWNlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgc3RhdGljIE1lZGlhQ29kZWMgY3JlYXRlQnlDb2RlY05hbWUoU3RyaW5nIGNvZGVjTmFtZSkg
ewotICAgIHRyeSB7Ci0gICAgICAvLyBJbiB0aGUgTC1TREsgdGhpcyBjYWxsIGNhbiB0aHJvdyBJ
T0V4Y2VwdGlvbiBzbyBpbiBvcmRlciB0byB3b3JrIGluCi0gICAgICAvLyBib3RoIGNhc2VzIGNh
dGNoIGFuIGV4Y2VwdGlvbi4KLSAgICAgIHJldHVybiBNZWRpYUNvZGVjLmNyZWF0ZUJ5Q29kZWNO
YW1lKGNvZGVjTmFtZSk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVy
biBudWxsOwotICAgIH0KLSAgfQotCi0gIGJvb2xlYW4gaW5pdEVuY29kZShWaWRlb0NvZGVjVHlw
ZSB0eXBlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBrYnBzLCBpbnQgZnBzLAotICAgICAg
RWdsQmFzZTE0LkNvbnRleHQgc2hhcmVkQ29udGV4dCkgewotICAgIGZpbmFsIGJvb2xlYW4gdXNl
U3VyZmFjZSA9IHNoYXJlZENvbnRleHQgIT0gbnVsbDsKLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2
YSBpbml0RW5jb2RlOiAiICsgdHlwZSArICIgOiAiICsgd2lkdGggKyAiIHggIiArIGhlaWdodCAr
ICIuIEAgIiArIGticHMKLSAgICAgICAgICAgICsgIiBrYnBzLiBGcHM6ICIgKyBmcHMgKyAiLiBF
bmNvZGUgZnJvbSB0ZXh0dXJlIDogIiArIHVzZVN1cmZhY2UpOwotCi0gICAgdGhpcy53aWR0aCA9
IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGlmIChtZWRpYUNvZGVjVGhy
ZWFkICE9IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb3Jnb3Qg
dG8gcmVsZWFzZSgpPyIpOwotICAgIH0KLSAgICBFbmNvZGVyUHJvcGVydGllcyBwcm9wZXJ0aWVz
ID0gbnVsbDsKLSAgICBTdHJpbmcgbWltZSA9IG51bGw7Ci0gICAgaW50IGtleUZyYW1lSW50ZXJ2
YWxTZWMgPSAwOwotICAgIGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQ
OCkgewotICAgICAgbWltZSA9IFZQOF9NSU1FX1RZUEU7Ci0gICAgICBwcm9wZXJ0aWVzID0gZmlu
ZEh3RW5jb2RlcigKLSAgICAgICAgICBWUDhfTUlNRV9UWVBFLCB2cDhId0xpc3QsIHVzZVN1cmZh
Y2UgPyBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0IDogc3VwcG9ydGVkQ29sb3JMaXN0KTsKLSAg
ICAgIGtleUZyYW1lSW50ZXJ2YWxTZWMgPSAxMDA7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFZp
ZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOSkgewotICAgICAgbWltZSA9IFZQOV9NSU1FX1RZ
UEU7Ci0gICAgICBwcm9wZXJ0aWVzID0gZmluZEh3RW5jb2RlcigKLSAgICAgICAgICBWUDlfTUlN
RV9UWVBFLCB2cDlId0xpc3QsIHVzZVN1cmZhY2UgPyBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0
IDogc3VwcG9ydGVkQ29sb3JMaXN0KTsKLSAgICAgIGtleUZyYW1lSW50ZXJ2YWxTZWMgPSAxMDA7
Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX0gyNjQp
IHsKLSAgICAgIG1pbWUgPSBIMjY0X01JTUVfVFlQRTsKLSAgICAgIHByb3BlcnRpZXMgPSBmaW5k
SHdFbmNvZGVyKAotICAgICAgICAgIEgyNjRfTUlNRV9UWVBFLCBoMjY0SHdMaXN0LCB1c2VTdXJm
YWNlID8gc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCA6IHN1cHBvcnRlZENvbG9yTGlzdCk7Ci0g
ICAgICBrZXlGcmFtZUludGVydmFsU2VjID0gMjA7Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0aWVz
ID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW4gbm90IGZp
bmQgSFcgZW5jb2RlciBmb3IgIiArIHR5cGUpOwotICAgIH0KLSAgICBydW5uaW5nSW5zdGFuY2Ug
PSB0aGlzOyAvLyBFbmNvZGVyIGlzIG5vdyBydW5uaW5nIGFuZCBjYW4gYmUgcXVlcmllZCBmb3Ig
c3RhY2sgdHJhY2VzLgotICAgIGNvbG9yRm9ybWF0ID0gcHJvcGVydGllcy5jb2xvckZvcm1hdDsK
LSAgICBiaXRyYXRlQWRqdXN0bWVudFR5cGUgPSBwcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50
VHlwZTsKLSAgICBpZiAoYml0cmF0ZUFkanVzdG1lbnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50
VHlwZS5GUkFNRVJBVEVfQURKVVNUTUVOVCkgewotICAgICAgZnBzID0gQklUUkFURV9BREpVU1RN
RU5UX0ZQUzsKLSAgICB9IGVsc2UgewotICAgICAgZnBzID0gTWF0aC5taW4oZnBzLCBNQVhJTVVN
X0lOSVRJQUxfRlBTKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkNvbG9yIGZvcm1hdDog
IiArIGNvbG9yRm9ybWF0ICsgIi4gQml0cmF0ZSBhZGp1c3RtZW50OiAiICsgYml0cmF0ZUFkanVz
dG1lbnRUeXBlCi0gICAgICAgICAgICArICIuIEluaXRpYWwgZnBzOiAiICsgZnBzKTsKLSAgICB0
YXJnZXRCaXRyYXRlQnBzID0gMTAwMCAqIGticHM7Ci0gICAgdGFyZ2V0RnBzID0gZnBzOwotICAg
IGJpdHJhdGVBY2N1bXVsYXRvck1heCA9IHRhcmdldEJpdHJhdGVCcHMgLyA4LjA7Ci0gICAgYml0
cmF0ZUFjY3VtdWxhdG9yID0gMDsKLSAgICBiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgPSAwOwot
ICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAgPSAwOwotCi0gICAgbWVkaWFDb2RlY1RocmVh
ZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIE1lZGlhRm9ybWF0
IGZvcm1hdCA9IE1lZGlhRm9ybWF0LmNyZWF0ZVZpZGVvRm9ybWF0KG1pbWUsIHdpZHRoLCBoZWln
aHQpOwotICAgICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0JJVF9SQVRFLCB0
YXJnZXRCaXRyYXRlQnBzKTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKCJiaXRyYXRlLW1vZGUi
LCBWSURFT19Db250cm9sUmF0ZUNvbnN0YW50KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1l
ZGlhRm9ybWF0LktFWV9DT0xPUl9GT1JNQVQsIHByb3BlcnRpZXMuY29sb3JGb3JtYXQpOwotICAg
ICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0ZSQU1FX1JBVEUsIHRhcmdldEZw
cyk7Ci0gICAgICBmb3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfSV9GUkFNRV9JTlRF
UlZBTCwga2V5RnJhbWVJbnRlcnZhbFNlYyk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiICBGb3Jt
YXQ6ICIgKyBmb3JtYXQpOwotICAgICAgbWVkaWFDb2RlYyA9IGNyZWF0ZUJ5Q29kZWNOYW1lKHBy
b3BlcnRpZXMuY29kZWNOYW1lKTsKLSAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgICBpZiAo
bWVkaWFDb2RlYyA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW4gbm90IGNy
ZWF0ZSBtZWRpYSBlbmNvZGVyIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICAgIG1lZGlhQ29kZWMuY29uZmlndXJlKGZvcm1hdCwgbnVsbCwgbnVsbCwgTWVkaWFDb2RlYy5D
T05GSUdVUkVfRkxBR19FTkNPREUpOwotCi0gICAgICBpZiAodXNlU3VyZmFjZSkgewotICAgICAg
ICBlZ2xCYXNlID0gbmV3IEVnbEJhc2UxNChzaGFyZWRDb250ZXh0LCBFZ2xCYXNlLkNPTkZJR19S
RUNPUkRBQkxFKTsKLSAgICAgICAgLy8gQ3JlYXRlIGFuIGlucHV0IHN1cmZhY2UgYW5kIGtlZXAg
YSByZWZlcmVuY2Ugc2luY2Ugd2UgbXVzdCByZWxlYXNlIHRoZSBzdXJmYWNlIHdoZW4gZG9uZS4K
LSAgICAgICAgaW5wdXRTdXJmYWNlID0gbWVkaWFDb2RlYy5jcmVhdGVJbnB1dFN1cmZhY2UoKTsK
LSAgICAgICAgZWdsQmFzZS5jcmVhdGVTdXJmYWNlKGlucHV0U3VyZmFjZSk7Ci0gICAgICAgIGRy
YXdlciA9IG5ldyBHbFJlY3REcmF3ZXIoKTsKLSAgICAgIH0KLSAgICAgIG1lZGlhQ29kZWMuc3Rh
cnQoKTsKLSAgICAgIG91dHB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldE91dHB1dEJ1ZmZlcnMo
KTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJPdXRwdXQgYnVmZmVyczogIiArIG91dHB1dEJ1ZmZl
cnMubGVuZ3RoKTsKLQotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICBMb2dnaW5nLmUoVEFHLCAiaW5pdEVuY29kZSBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBCeXRlQnVmZmVyW10g
Z2V0SW5wdXRCdWZmZXJzKCkgewotICAgIEJ5dGVCdWZmZXJbXSBpbnB1dEJ1ZmZlcnMgPSBtZWRp
YUNvZGVjLmdldElucHV0QnVmZmVycygpOwotICAgIExvZ2dpbmcuZChUQUcsICJJbnB1dCBidWZm
ZXJzOiAiICsgaW5wdXRCdWZmZXJzLmxlbmd0aCk7Ci0gICAgcmV0dXJuIGlucHV0QnVmZmVyczsK
LSAgfQotCi0gIGJvb2xlYW4gZW5jb2RlQnVmZmVyKAotICAgICAgYm9vbGVhbiBpc0tleWZyYW1l
LCBpbnQgaW5wdXRCdWZmZXIsIGludCBzaXplLCBsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVz
KSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgaWYg
KGlzS2V5ZnJhbWUpIHsKLSAgICAgICAgLy8gSWRlYWxseSBNZWRpYUNvZGVjIHdvdWxkIGhvbm9y
IEJVRkZFUl9GTEFHX1NZTkNfRlJBTUUgc28gd2UgY291bGQKLSAgICAgICAgLy8gaW5kaWNhdGUg
dGhpcyBpbiBxdWV1ZUlucHV0QnVmZmVyKCkgYmVsb3cgYW5kIGd1YXJhbnRlZSBfdGhpc18gZnJh
bWUKLSAgICAgICAgLy8gYmUgZW5jb2RlZCBhcyBhIGtleSBmcmFtZSwgYnV0IHNhZGx5IHRoYXQg
ZmxhZyBpcyBpZ25vcmVkLiAgSW5zdGVhZCwKLSAgICAgICAgLy8gd2UgcmVxdWVzdCBhIGtleSBm
cmFtZSAic29vbiIuCi0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTeW5jIGZyYW1lIHJlcXVlc3Qi
KTsKLSAgICAgICAgQnVuZGxlIGIgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIGIucHV0SW50KE1l
ZGlhQ29kZWMuUEFSQU1FVEVSX0tFWV9SRVFVRVNUX1NZTkNfRlJBTUUsIDApOwotICAgICAgICBt
ZWRpYUNvZGVjLnNldFBhcmFtZXRlcnMoYik7Ci0gICAgICB9Ci0gICAgICBtZWRpYUNvZGVjLnF1
ZXVlSW5wdXRCdWZmZXIoaW5wdXRCdWZmZXIsIDAsIHNpemUsIHByZXNlbnRhdGlvblRpbWVzdGFt
cFVzLCAwKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZW5jb2RlQnVmZmVyIGZhaWxlZCIs
IGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGJvb2xlYW4gZW5jb2Rl
VGV4dHVyZShib29sZWFuIGlzS2V5ZnJhbWUsIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJh
bnNmb3JtYXRpb25NYXRyaXgsCi0gICAgICBsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSB7
Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgaWYgKGlz
S2V5ZnJhbWUpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlN5bmMgZnJhbWUgcmVxdWVzdCIp
OwotICAgICAgICBCdW5kbGUgYiA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgYi5wdXRJbnQoTWVk
aWFDb2RlYy5QQVJBTUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSwgMCk7Ci0gICAgICAgIG1l
ZGlhQ29kZWMuc2V0UGFyYW1ldGVycyhiKTsKLSAgICAgIH0KLSAgICAgIGVnbEJhc2UubWFrZUN1
cnJlbnQoKTsKLSAgICAgIC8vIFRPRE8ocGVya2opOiBnbENsZWFyKCkgc2hvdWxkbid0IGJlIG5l
Y2Vzc2FyeSBzaW5jZSBldmVyeSBwaXhlbCBpcyBjb3ZlcmVkIGFueXdheSwKLSAgICAgIC8vIGJ1
dCBpdCdzIGEgd29ya2Fyb3VuZCBmb3IgYnVnIHdlYnJ0Yzo1MTQ3LgotICAgICAgR0xFUzIwLmds
Q2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgICAgZHJhd2VyLmRyYXdPZXMo
b2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1hdGlvbk1hdHJpeCwgd2lkdGgsIGhlaWdodCwgMCwgMCwg
d2lkdGgsIGhlaWdodCk7Ci0gICAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKFRpbWVVbml0Lk1JQ1JP
U0VDT05EUy50b05hbm9zKHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJlbmNvZGVUZXh0dXJlIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgfQotCi0gIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2
YSByZWxlYXNlRW5jb2RlciIpOwotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0KLSAg
ICAvLyBSdW4gTWVkaWFjb2RlYyBzdG9wKCkgYW5kIHJlbGVhc2UoKSBvbiBzZXBhcmF0ZSB0aHJl
YWQgc2luY2Ugc29tZXRpbWUKLSAgICAvLyBNZWRpYWNvZGVjLnN0b3AoKSBtYXkgaGFuZy4KLSAg
ICBmaW5hbCBDb3VudERvd25MYXRjaCByZWxlYXNlRG9uZSA9IG5ldyBDb3VudERvd25MYXRjaCgx
KTsKLQotICAgIFJ1bm5hYmxlIHJ1bk1lZGlhQ29kZWNSZWxlYXNlID0gbmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIgb24gcmVs
ZWFzZSB0aHJlYWQiKTsKLSAgICAgICAgICBtZWRpYUNvZGVjLnN0b3AoKTsKLSAgICAgICAgICBt
ZWRpYUNvZGVjLnJlbGVhc2UoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxl
YXNlRW5jb2RlciBvbiByZWxlYXNlIHRocmVhZCBkb25lIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGVuY29kZXIgcmVs
ZWFzZSBmYWlsZWQiLCBlKTsKLSAgICAgICAgfQotICAgICAgICByZWxlYXNlRG9uZS5jb3VudERv
d24oKTsKLSAgICAgIH0KLSAgICB9OwotICAgIG5ldyBUaHJlYWQocnVuTWVkaWFDb2RlY1JlbGVh
c2UpLnN0YXJ0KCk7Ci0KLSAgICBpZiAoIVRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5
KHJlbGVhc2VEb25lLCBNRURJQV9DT0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMpKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAiTWVkaWEgZW5jb2RlciByZWxlYXNlIHRpbWVvdXQiKTsKLSAgICAgIGNv
ZGVjRXJyb3JzKys7Ci0gICAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAg
IExvZ2dpbmcuZShUQUcsICJJbnZva2UgY29kZWMgZXJyb3IgY2FsbGJhY2suIEVycm9yczogIiAr
IGNvZGVjRXJyb3JzKTsKLSAgICAgICAgZXJyb3JDYWxsYmFjay5vbk1lZGlhQ29kZWNWaWRlb0Vu
Y29kZXJDcml0aWNhbEVycm9yKGNvZGVjRXJyb3JzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBt
ZWRpYUNvZGVjID0gbnVsbDsKLSAgICBtZWRpYUNvZGVjVGhyZWFkID0gbnVsbDsKLSAgICBpZiAo
ZHJhd2VyICE9IG51bGwpIHsKLSAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgICBkcmF3ZXIg
PSBudWxsOwotICAgIH0KLSAgICBpZiAoZWdsQmFzZSAhPSBudWxsKSB7Ci0gICAgICBlZ2xCYXNl
LnJlbGVhc2UoKTsKLSAgICAgIGVnbEJhc2UgPSBudWxsOwotICAgIH0KLSAgICBpZiAoaW5wdXRT
dXJmYWNlICE9IG51bGwpIHsKLSAgICAgIGlucHV0U3VyZmFjZS5yZWxlYXNlKCk7Ci0gICAgICBp
bnB1dFN1cmZhY2UgPSBudWxsOwotICAgIH0KLSAgICBydW5uaW5nSW5zdGFuY2UgPSBudWxsOwot
ICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VFbmNvZGVyIGRvbmUiKTsKLSAgfQotCi0g
IHByaXZhdGUgYm9vbGVhbiBzZXRSYXRlcyhpbnQga2JwcywgaW50IGZyYW1lUmF0ZSkgewotICAg
IGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0KLSAgICBpbnQgY29kZWNCaXRyYXRlQnBzID0g
MTAwMCAqIGticHM7Ci0gICAgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRq
dXN0bWVudFR5cGUuRFlOQU1JQ19BREpVU1RNRU5UKSB7Ci0gICAgICBiaXRyYXRlQWNjdW11bGF0
b3JNYXggPSBjb2RlY0JpdHJhdGVCcHMgLyA4LjA7Ci0gICAgICBpZiAodGFyZ2V0Qml0cmF0ZUJw
cyA+IDAgJiYgY29kZWNCaXRyYXRlQnBzIDwgdGFyZ2V0Qml0cmF0ZUJwcykgewotICAgICAgICAv
LyBSZXNjYWxlIHRoZSBhY2N1bXVsYXRvciBsZXZlbCBpZiB0aGUgYWNjdW11bGF0b3IgbWF4IGRl
Y3JlYXNlcwotICAgICAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBiaXRyYXRlQWNjdW11bGF0b3Ig
KiBjb2RlY0JpdHJhdGVCcHMgLyB0YXJnZXRCaXRyYXRlQnBzOwotICAgICAgfQotICAgIH0KLSAg
ICB0YXJnZXRCaXRyYXRlQnBzID0gY29kZWNCaXRyYXRlQnBzOwotICAgIHRhcmdldEZwcyA9IGZy
YW1lUmF0ZTsKLQotICAgIC8vIEFkanVzdCBhY3R1YWwgZW5jb2RlciBiaXRyYXRlIGJhc2VkIG9u
IGJpdHJhdGUgYWRqdXN0bWVudCB0eXBlLgotICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFR5cGUg
PT0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLkZSQU1FUkFURV9BREpVU1RNRU5UICYmIHRhcmdldEZw
cyA+IDApIHsKLSAgICAgIGNvZGVjQml0cmF0ZUJwcyA9IEJJVFJBVEVfQURKVVNUTUVOVF9GUFMg
KiB0YXJnZXRCaXRyYXRlQnBzIC8gdGFyZ2V0RnBzOwotICAgICAgTG9nZ2luZy52KFRBRywKLSAg
ICAgICAgICAic2V0UmF0ZXM6ICIgKyBrYnBzICsgIiAtPiAiICsgKGNvZGVjQml0cmF0ZUJwcyAv
IDEwMDApICsgIiBrYnBzLiBGcHM6ICIgKyB0YXJnZXRGcHMpOwotICAgIH0gZWxzZSBpZiAoYml0
cmF0ZUFkanVzdG1lbnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5EWU5BTUlDX0FESlVT
VE1FTlQpIHsKLSAgICAgIExvZ2dpbmcudihUQUcsICJzZXRSYXRlczogIiArIGticHMgKyAiIGti
cHMuIEZwczogIiArIHRhcmdldEZwcyArICIuIEV4cFNjYWxlOiAiCi0gICAgICAgICAgICAgICsg
Yml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCk7Ci0gICAgICBpZiAoYml0cmF0ZUFkanVzdG1lbnRT
Y2FsZUV4cCAhPSAwKSB7Ci0gICAgICAgIGNvZGVjQml0cmF0ZUJwcyA9IChpbnQpIChjb2RlY0Jp
dHJhdGVCcHMgKiBnZXRCaXRyYXRlU2NhbGUoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCkpOwot
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBMb2dnaW5nLnYoVEFHLCAic2V0UmF0ZXM6ICIg
KyBrYnBzICsgIiBrYnBzLiBGcHM6ICIgKyB0YXJnZXRGcHMpOwotICAgIH0KLQotICAgIHRyeSB7
Ci0gICAgICBCdW5kbGUgcGFyYW1zID0gbmV3IEJ1bmRsZSgpOwotICAgICAgcGFyYW1zLnB1dElu
dChNZWRpYUNvZGVjLlBBUkFNRVRFUl9LRVlfVklERU9fQklUUkFURSwgY29kZWNCaXRyYXRlQnBz
KTsKLSAgICAgIG1lZGlhQ29kZWMuc2V0UGFyYW1ldGVycyhwYXJhbXMpOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExv
Z2dpbmcuZShUQUcsICJzZXRSYXRlcyBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gIH0KLQotICAvLyBEZXF1ZXVlIGFuIGlucHV0IGJ1ZmZlciBhbmQgcmV0dXJuIGl0
cyBpbmRleCwgLTEgaWYgbm8gaW5wdXQgYnVmZmVyIGlzCi0gIC8vIGF2YWlsYWJsZSwgb3IgLTIg
aWYgdGhlIGNvZGVjIGlzIG5vIGxvbmdlciBvcGVyYXRpdmUuCi0gIGludCBkZXF1ZXVlSW5wdXRC
dWZmZXIoKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAg
ICAgcmV0dXJuIG1lZGlhQ29kZWMuZGVxdWV1ZUlucHV0QnVmZmVyKERFUVVFVUVfVElNRU9VVCk7
Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJkZXF1ZXVlSW50cHV0QnVmZmVyIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIC0y
OwotICAgIH0KLSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGRlcXVldWVPdXRwdXRCdWZm
ZXIoKSBiZWxvdy4KLSAgc3RhdGljIGNsYXNzIE91dHB1dEJ1ZmZlckluZm8gewotICAgIHB1Ymxp
YyBPdXRwdXRCdWZmZXJJbmZvKAotICAgICAgICBpbnQgaW5kZXgsIEJ5dGVCdWZmZXIgYnVmZmVy
LCBib29sZWFuIGlzS2V5RnJhbWUsIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMpIHsKLSAg
ICAgIHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAg
ICAgdGhpcy5pc0tleUZyYW1lID0gaXNLZXlGcmFtZTsKLSAgICAgIHRoaXMucHJlc2VudGF0aW9u
VGltZXN0YW1wVXMgPSBwcmVzZW50YXRpb25UaW1lc3RhbXBVczsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgZmluYWwgaW50IGluZGV4OwotICAgIHB1YmxpYyBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlcjsK
LSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpc0tleUZyYW1lOwotICAgIHB1YmxpYyBmaW5hbCBs
b25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzOwotICB9Ci0KLSAgLy8gRGVxdWV1ZSBhbmQgcmV0
dXJuIGFuIG91dHB1dCBidWZmZXIsIG9yIG51bGwgaWYgbm8gb3V0cHV0IGlzIHJlYWR5LiAgUmV0
dXJuCi0gIC8vIGEgZmFrZSBPdXRwdXRCdWZmZXJJbmZvIHdpdGggaW5kZXggLTEgaWYgdGhlIGNv
ZGVjIGlzIG5vIGxvbmdlciBvcGVyYWJsZS4KLSAgT3V0cHV0QnVmZmVySW5mbyBkZXF1ZXVlT3V0
cHV0QnVmZmVyKCkgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsK
LSAgICAgIE1lZGlhQ29kZWMuQnVmZmVySW5mbyBpbmZvID0gbmV3IE1lZGlhQ29kZWMuQnVmZmVy
SW5mbygpOwotICAgICAgaW50IHJlc3VsdCA9IG1lZGlhQ29kZWMuZGVxdWV1ZU91dHB1dEJ1ZmZl
cihpbmZvLCBERVFVRVVFX1RJTUVPVVQpOwotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBjb25m
aWcgZnJhbWUgYW5kIHNhdmUgY29uZmlndXJhdGlvbiBkYXRhLgotICAgICAgaWYgKHJlc3VsdCA+
PSAwKSB7Ci0gICAgICAgIGJvb2xlYW4gaXNDb25maWdGcmFtZSA9IChpbmZvLmZsYWdzICYgTWVk
aWFDb2RlYy5CVUZGRVJfRkxBR19DT0RFQ19DT05GSUcpICE9IDA7Ci0gICAgICAgIGlmIChpc0Nv
bmZpZ0ZyYW1lKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNvbmZpZyBmcmFtZSBnZW5l
cmF0ZWQuIE9mZnNldDogIiArIGluZm8ub2Zmc2V0ICsgIi4gU2l6ZTogIiArIGluZm8uc2l6ZSk7
Ci0gICAgICAgICAgY29uZmlnRGF0YSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoaW5mby5z
aXplKTsKLSAgICAgICAgICBvdXRwdXRCdWZmZXJzW3Jlc3VsdF0ucG9zaXRpb24oaW5mby5vZmZz
ZXQpOwotICAgICAgICAgIG91dHB1dEJ1ZmZlcnNbcmVzdWx0XS5saW1pdChpbmZvLm9mZnNldCAr
IGluZm8uc2l6ZSk7Ci0gICAgICAgICAgY29uZmlnRGF0YS5wdXQob3V0cHV0QnVmZmVyc1tyZXN1
bHRdKTsKLSAgICAgICAgICAvLyBSZWxlYXNlIGJ1ZmZlciBiYWNrLgotICAgICAgICAgIG1lZGlh
Q29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihyZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgICAvLyBR
dWVyeSBuZXh0IG91dHB1dC4KLSAgICAgICAgICByZXN1bHQgPSBtZWRpYUNvZGVjLmRlcXVldWVP
dXRwdXRCdWZmZXIoaW5mbywgREVRVUVVRV9USU1FT1VUKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgaWYgKHJlc3VsdCA+PSAwKSB7Ci0gICAgICAgIC8vIE1lZGlhQ29kZWMgZG9lc24ndCBj
YXJlIGFib3V0IEJ1ZmZlciBwb3NpdGlvbi9yZW1haW5pbmcvZXRjIHNvIHdlIGNhbgotICAgICAg
ICAvLyBtZXNzIHdpdGggdGhlbSB0byBnZXQgYSBzbGljZSBhbmQgYXZvaWQgaGF2aW5nIHRvIHBh
c3MgZXh0cmEKLSAgICAgICAgLy8gKEJ1ZmZlckluZm8tcmVsYXRlZCkgcGFyYW1ldGVycyBiYWNr
IHRvIEMrKy4KLSAgICAgICAgQnl0ZUJ1ZmZlciBvdXRwdXRCdWZmZXIgPSBvdXRwdXRCdWZmZXJz
W3Jlc3VsdF0uZHVwbGljYXRlKCk7Ci0gICAgICAgIG91dHB1dEJ1ZmZlci5wb3NpdGlvbihpbmZv
Lm9mZnNldCk7Ci0gICAgICAgIG91dHB1dEJ1ZmZlci5saW1pdChpbmZvLm9mZnNldCArIGluZm8u
c2l6ZSk7Ci0gICAgICAgIHJlcG9ydEVuY29kZWRGcmFtZShpbmZvLnNpemUpOwotCi0gICAgICAg
IC8vIENoZWNrIGtleSBmcmFtZSBmbGFnLgotICAgICAgICBib29sZWFuIGlzS2V5RnJhbWUgPSAo
aW5mby5mbGFncyAmIE1lZGlhQ29kZWMuQlVGRkVSX0ZMQUdfU1lOQ19GUkFNRSkgIT0gMDsKLSAg
ICAgICAgaWYgKGlzS2V5RnJhbWUpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3luYyBm
cmFtZSBnZW5lcmF0ZWQiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNLZXlGcmFtZSAmJiB0
eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX0gyNjQpIHsKLSAgICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiQXBwZW5kaW5nIGNvbmZpZyBmcmFtZSBvZiBzaXplICIgKyBjb25maWdEYXRh
LmNhcGFjaXR5KCkKLSAgICAgICAgICAgICAgICAgICsgIiB0byBvdXRwdXQgYnVmZmVyIHdpdGgg
b2Zmc2V0ICIgKyBpbmZvLm9mZnNldCArICIsIHNpemUgIiArIGluZm8uc2l6ZSk7Ci0gICAgICAg
ICAgLy8gRm9yIEguMjY0IGtleSBmcmFtZSBhcHBlbmQgU1BTIGFuZCBQUFMgTkFMcyBhdCB0aGUg
c3RhcnQKLSAgICAgICAgICBCeXRlQnVmZmVyIGtleUZyYW1lQnVmZmVyID0gQnl0ZUJ1ZmZlci5h
bGxvY2F0ZURpcmVjdChjb25maWdEYXRhLmNhcGFjaXR5KCkgKyBpbmZvLnNpemUpOwotICAgICAg
ICAgIGNvbmZpZ0RhdGEucmV3aW5kKCk7Ci0gICAgICAgICAga2V5RnJhbWVCdWZmZXIucHV0KGNv
bmZpZ0RhdGEpOwotICAgICAgICAgIGtleUZyYW1lQnVmZmVyLnB1dChvdXRwdXRCdWZmZXIpOwot
ICAgICAgICAgIGtleUZyYW1lQnVmZmVyLnBvc2l0aW9uKDApOwotICAgICAgICAgIHJldHVybiBu
ZXcgT3V0cHV0QnVmZmVySW5mbyhyZXN1bHQsIGtleUZyYW1lQnVmZmVyLCBpc0tleUZyYW1lLCBp
bmZvLnByZXNlbnRhdGlvblRpbWVVcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0
dXJuIG5ldyBPdXRwdXRCdWZmZXJJbmZvKAotICAgICAgICAgICAgICByZXN1bHQsIG91dHB1dEJ1
ZmZlci5zbGljZSgpLCBpc0tleUZyYW1lLCBpbmZvLnByZXNlbnRhdGlvblRpbWVVcyk7Ci0gICAg
ICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IE1lZGlhQ29kZWMuSU5GT19PVVRQVVRf
QlVGRkVSU19DSEFOR0VEKSB7Ci0gICAgICAgIG91dHB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdl
dE91dHB1dEJ1ZmZlcnMoKTsKLSAgICAgICAgcmV0dXJuIGRlcXVldWVPdXRwdXRCdWZmZXIoKTsK
LSAgICAgIH0gZWxzZSBpZiAocmVzdWx0ID09IE1lZGlhQ29kZWMuSU5GT19PVVRQVVRfRk9STUFU
X0NIQU5HRUQpIHsKLSAgICAgICAgcmV0dXJuIGRlcXVldWVPdXRwdXRCdWZmZXIoKTsKLSAgICAg
IH0gZWxzZSBpZiAocmVzdWx0ID09IE1lZGlhQ29kZWMuSU5GT19UUllfQUdBSU5fTEFURVIpIHsK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigiZGVxdWV1ZU91dHB1dEJ1ZmZlcjogIiArIHJlc3VsdCk7Ci0gICAgfSBjYXRjaCAo
SWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZXF1ZXVl
T3V0cHV0QnVmZmVyIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIG5ldyBPdXRwdXRCdWZmZXJJ
bmZvKC0xLCBudWxsLCBmYWxzZSwgLTEpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZG91Ymxl
IGdldEJpdHJhdGVTY2FsZShpbnQgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCkgewotICAgIHJl
dHVybiBNYXRoLnBvdyhCSVRSQVRFX0NPUlJFQ1RJT05fTUFYX1NDQUxFLAotICAgICAgICAoZG91
YmxlKSBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwIC8gQklUUkFURV9DT1JSRUNUSU9OX1NURVBT
KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFbmNvZGVkRnJhbWUoaW50IHNpemUpIHsK
LSAgICBpZiAodGFyZ2V0RnBzID09IDAgfHwgYml0cmF0ZUFkanVzdG1lbnRUeXBlICE9IEJpdHJh
dGVBZGp1c3RtZW50VHlwZS5EWU5BTUlDX0FESlVTVE1FTlQpIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBBY2N1bXVsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWN0aWFsIGFu
ZCBleHBlY3RlZCBmcmFtZSBzaXplcy4KLSAgICBkb3VibGUgZXhwZWN0ZWRCeXRlc1BlckZyYW1l
ID0gdGFyZ2V0Qml0cmF0ZUJwcyAvICg4LjAgKiB0YXJnZXRGcHMpOwotICAgIGJpdHJhdGVBY2N1
bXVsYXRvciArPSAoc2l6ZSAtIGV4cGVjdGVkQnl0ZXNQZXJGcmFtZSk7Ci0gICAgYml0cmF0ZU9i
c2VydmF0aW9uVGltZU1zICs9IDEwMDAuMCAvIHRhcmdldEZwczsKLQotICAgIC8vIFB1dCBhIGNh
cCBvbiB0aGUgYWNjdW11bGF0b3IsIGkuZS4sIGRvbid0IGxldCBpdCBncm93IGJleW9uZCBzb21l
IGxldmVsIHRvIGF2b2lkCi0gICAgLy8gdXNpbmcgdG9vIG9sZCBkYXRhIGZvciBiaXRyYXRlIGFk
anVzdG1lbnQuCi0gICAgZG91YmxlIGJpdHJhdGVBY2N1bXVsYXRvckNhcCA9IEJJVFJBVEVfQ09S
UkVDVElPTl9TRUMgKiBiaXRyYXRlQWNjdW11bGF0b3JNYXg7Ci0gICAgYml0cmF0ZUFjY3VtdWxh
dG9yID0gTWF0aC5taW4oYml0cmF0ZUFjY3VtdWxhdG9yLCBiaXRyYXRlQWNjdW11bGF0b3JDYXAp
OwotICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IE1hdGgubWF4KGJpdHJhdGVBY2N1bXVsYXRvciwg
LWJpdHJhdGVBY2N1bXVsYXRvckNhcCk7Ci0KLSAgICAvLyBEbyBiaXRyYXRlIGFkanVzdG1lbnQg
ZXZlcnkgMyBzZWNvbmRzIGlmIGFjdHVhbCBlbmNvZGVyIGJpdHJhdGUgZGV2aWF0ZXMgdG9vIG11
Y2gKLSAgICAvLyBmb3JtIHRoZSB0YXJnZXQgdmFsdWUuCi0gICAgaWYgKGJpdHJhdGVPYnNlcnZh
dGlvblRpbWVNcyA+IDEwMDAgKiBCSVRSQVRFX0NPUlJFQ1RJT05fU0VDKSB7Ci0gICAgICBMb2dn
aW5nLmQoVEFHLCAiQWNjOiAiICsgKGludCkgYml0cmF0ZUFjY3VtdWxhdG9yICsgIi4gTWF4OiAi
ICsgKGludCkgYml0cmF0ZUFjY3VtdWxhdG9yTWF4Ci0gICAgICAgICAgICAgICsgIi4gRXhwU2Nh
bGU6ICIgKyBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKTsKLSAgICAgIGJvb2xlYW4gYml0cmF0
ZUFkanVzdG1lbnRTY2FsZUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgIGlmIChiaXRyYXRlQWNjdW11
bGF0b3IgPiBiaXRyYXRlQWNjdW11bGF0b3JNYXgpIHsKLSAgICAgICAgLy8gRW5jb2RlciBnZW5l
cmF0ZXMgdG9vIGhpZ2ggYml0cmF0ZSAtIG5lZWQgdG8gcmVkdWNlIHRoZSBzY2FsZS4KLSAgICAg
ICAgYml0cmF0ZUFjY3VtdWxhdG9yID0gYml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICAgICAgICBi
aXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwLS07Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2Nh
bGVDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgIH0gZWxzZSBpZiAoYml0cmF0ZUFjY3VtdWxhdG9yIDwg
LWJpdHJhdGVBY2N1bXVsYXRvck1heCkgewotICAgICAgICAvLyBFbmNvZGVyIGdlbmVyYXRlcyB0
b28gbG93IGJpdHJhdGUgLSBuZWVkIHRvIGluY3JlYXNlIHRoZSBzY2FsZS4KLSAgICAgICAgYml0
cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCsrOwotICAgICAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSAt
Yml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlQ2hh
bmdlZCA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUNo
YW5nZWQpIHsKLSAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCA9IE1hdGgubWluKGJp
dHJhdGVBZGp1c3RtZW50U2NhbGVFeHAsIEJJVFJBVEVfQ09SUkVDVElPTl9TVEVQUyk7Ci0gICAg
ICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAgPSBNYXRoLm1heChiaXRyYXRlQWRqdXN0bWVu
dFNjYWxlRXhwLCAtQklUUkFURV9DT1JSRUNUSU9OX1NURVBTKTsKLSAgICAgICAgTG9nZ2luZy5k
KFRBRywgIkFkanVzdGluZyBiaXRyYXRlIHNjYWxlIHRvICIgKyBiaXRyYXRlQWRqdXN0bWVudFNj
YWxlRXhwICsgIi4gVmFsdWU6ICIKLSAgICAgICAgICAgICAgICArIGdldEJpdHJhdGVTY2FsZShi
aXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKSk7Ci0gICAgICAgIHNldFJhdGVzKHRhcmdldEJpdHJh
dGVCcHMgLyAxMDAwLCB0YXJnZXRGcHMpOwotICAgICAgfQotICAgICAgYml0cmF0ZU9ic2VydmF0
aW9uVGltZU1zID0gMDsKLSAgICB9Ci0gIH0KLQotICAvLyBSZWxlYXNlIGEgZGVxdWV1ZWQgb3V0
cHV0IGJ1ZmZlciBiYWNrIHRvIHRoZSBjb2RlYyBmb3IgcmUtdXNlLiAgUmV0dXJuCi0gIC8vIGZh
bHNlIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIgb3BlcmFibGUuCi0gIGJvb2xlYW4gcmVsZWFz
ZU91dHB1dEJ1ZmZlcihpbnQgaW5kZXgpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgp
OwotICAgIHRyeSB7Ci0gICAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgs
IGZhbHNlKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAicmVsZWFzZU91dHB1dEJ1ZmZlciBm
YWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvTWVkaWFDb25zdHJhaW50cy5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvTWVkaWFDb25zdHJhaW50cy5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL01lZGlhQ29uc3RyYWludHMuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0v
KioKLSAqIERlc2NyaXB0aW9uIG9mIG1lZGlhIGNvbnN0cmFpbnRzIGZvciB7QGNvZGUgTWVkaWFT
dHJlYW19IGFuZAotICoge0Bjb2RlIFBlZXJDb25uZWN0aW9ufS4KLSAqLwotcHVibGljIGNsYXNz
IE1lZGlhQ29uc3RyYWludHMgewotICAvKiogU2ltcGxlIFN0cmluZyBrZXkvdmFsdWUgcGFpci4g
Ki8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBLZXlWYWx1ZVBhaXIgewotICAgIHByaXZhdGUgZmlu
YWwgU3RyaW5nIGtleTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2YWx1ZTsKLQotICAgIHB1
YmxpYyBLZXlWYWx1ZVBhaXIoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgICB0aGlz
LmtleSA9IGtleTsKLSAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgU3RyaW5nIGdldEtleSgpIHsKLSAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgcHVi
bGljIFN0cmluZyBnZXRWYWx1ZSgpIHsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIGtleSArICI6ICIgKyB2
YWx1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMo
T2JqZWN0IG90aGVyKSB7Ci0gICAgICBpZiAodGhpcyA9PSBvdGhlcikgewotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdGhlciA9PSBudWxsIHx8IGdldENsYXNzKCkg
IT0gb3RoZXIuZ2V0Q2xhc3MoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0g
ICAgICBLZXlWYWx1ZVBhaXIgdGhhdCA9IChLZXlWYWx1ZVBhaXIpIG90aGVyOwotICAgICAgcmV0
dXJuIGtleS5lcXVhbHModGhhdC5rZXkpICYmIHZhbHVlLmVxdWFscyh0aGF0LnZhbHVlKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAg
cmV0dXJuIGtleS5oYXNoQ29kZSgpICsgdmFsdWUuaGFzaENvZGUoKTsKLSAgICB9Ci0gIH0KLQot
ICBwdWJsaWMgZmluYWwgTGlzdDxLZXlWYWx1ZVBhaXI+IG1hbmRhdG9yeTsKLSAgcHVibGljIGZp
bmFsIExpc3Q8S2V5VmFsdWVQYWlyPiBvcHRpb25hbDsKLQotICBwdWJsaWMgTWVkaWFDb25zdHJh
aW50cygpIHsKLSAgICBtYW5kYXRvcnkgPSBuZXcgTGlua2VkTGlzdDxLZXlWYWx1ZVBhaXI+KCk7
Ci0gICAgb3B0aW9uYWwgPSBuZXcgTGlua2VkTGlzdDxLZXlWYWx1ZVBhaXI+KCk7Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc3RyaW5naWZ5S2V5VmFsdWVQYWlyTGlzdChMaXN0PEtl
eVZhbHVlUGFpcj4gbGlzdCkgewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJp
bmdCdWlsZGVyKCJbIik7Ci0gICAgZm9yIChLZXlWYWx1ZVBhaXIgcGFpciA6IGxpc3QpIHsKLSAg
ICAgIGlmIChidWlsZGVyLmxlbmd0aCgpID4gMSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZCgi
LCAiKTsKLSAgICAgIH0KLSAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhaXIudG9TdHJpbmcoKSk7Ci0g
ICAgfQotICAgIHJldHVybiBidWlsZGVyLmFwcGVuZCgiXSIpLnRvU3RyaW5nKCk7Ci0gIH0KLQot
ICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiAibWFuZGF0b3J5OiAiICsg
c3RyaW5naWZ5S2V5VmFsdWVQYWlyTGlzdChtYW5kYXRvcnkpICsgIiwgb3B0aW9uYWw6ICIKLSAg
ICAgICAgKyBzdHJpbmdpZnlLZXlWYWx1ZVBhaXJMaXN0KG9wdGlvbmFsKTsKLSAgfQotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVNvdXJjZS5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvTWVkaWFTb3VyY2UuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9NZWRpYVNvdXJjZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzUgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2YSB3
cmFwcGVyIGZvciBhIEMrKyBNZWRpYVNvdXJjZUludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBN
ZWRpYVNvdXJjZSB7Ci0gIC8qKiBUcmFja3MgTWVkaWFTb3VyY2VJbnRlcmZhY2UuU291cmNlU3Rh
dGUgKi8KLSAgcHVibGljIGVudW0gU3RhdGUgeyBJTklUSUFMSVpJTkcsIExJVkUsIEVOREVELCBN
VVRFRCB9Ci0KLSAgZmluYWwgbG9uZyBuYXRpdmVTb3VyY2U7IC8vIFBhY2thZ2UtcHJvdGVjdGVk
IGZvciBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuCi0KLSAgcHVibGljIE1lZGlhU291cmNlKGxvbmcg
bmF0aXZlU291cmNlKSB7Ci0gICAgdGhpcy5uYXRpdmVTb3VyY2UgPSBuYXRpdmVTb3VyY2U7Ci0g
IH0KLQotICBwdWJsaWMgU3RhdGUgc3RhdGUoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVN0YXRlKG5h
dGl2ZVNvdXJjZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGZyZWUo
bmF0aXZlU291cmNlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdGF0ZSBuYXRp
dmVTdGF0ZShsb25nIHBvaW50ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZy
ZWUobG9uZyBuYXRpdmVTb3VyY2UpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0
cmVhbS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW0uamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbS5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0vKiog
SmF2YSB3cmFwcGVyIGZvciBhIEMrKyBNZWRpYVN0cmVhbUludGVyZmFjZS4gKi8KLXB1YmxpYyBj
bGFzcyBNZWRpYVN0cmVhbSB7Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRMaXN0PEF1ZGlvVHJhY2s+
IGF1ZGlvVHJhY2tzOwotICBwdWJsaWMgZmluYWwgTGlua2VkTGlzdDxWaWRlb1RyYWNrPiB2aWRl
b1RyYWNrczsKLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8VmlkZW9UcmFjaz4gcHJlc2VydmVk
VmlkZW9UcmFja3M7Ci0gIC8vIFBhY2thZ2UtcHJvdGVjdGVkIGZvciBQZWVyQ29ubmVjdGlvbi4K
LSAgZmluYWwgbG9uZyBuYXRpdmVTdHJlYW07Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtKGxvbmcg
bmF0aXZlU3RyZWFtKSB7Ci0gICAgYXVkaW9UcmFja3MgPSBuZXcgTGlua2VkTGlzdDxBdWRpb1Ry
YWNrPigpOwotICAgIHZpZGVvVHJhY2tzID0gbmV3IExpbmtlZExpc3Q8VmlkZW9UcmFjaz4oKTsK
LSAgICBwcmVzZXJ2ZWRWaWRlb1RyYWNrcyA9IG5ldyBMaW5rZWRMaXN0PFZpZGVvVHJhY2s+KCk7
Ci0gICAgdGhpcy5uYXRpdmVTdHJlYW0gPSBuYXRpdmVTdHJlYW07Ci0gIH0KLQotICBwdWJsaWMg
Ym9vbGVhbiBhZGRUcmFjayhBdWRpb1RyYWNrIHRyYWNrKSB7Ci0gICAgaWYgKG5hdGl2ZUFkZEF1
ZGlvVHJhY2sobmF0aXZlU3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjaykpIHsKLSAgICAgIGF1ZGlv
VHJhY2tzLmFkZCh0cmFjayk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkVHJhY2soVmlkZW9UcmFjayB0cmFj
aykgewotICAgIGlmIChuYXRpdmVBZGRWaWRlb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0
aXZlVHJhY2spKSB7Ci0gICAgICB2aWRlb1RyYWNrcy5hZGQodHJhY2spOwotICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFRyYWNrcyBhZGRl
ZCBpbiBhZGRUcmFjaygpIGNhbGwgd2lsbCBiZSBhdXRvIHJlbGVhc2VkIG9uY2UgTWVkaWFTdHJl
YW0uZGlzcG9zZSgpCi0gIC8vIGlzIGNhbGxlZC4gSWYgdmlkZW8gdHJhY2sgbmVlZCB0byBiZSBw
cmVzZXJ2ZWQgYWZ0ZXIgTWVkaWFTdHJlYW0gaXMgZGVzdHJveWVkIGl0Ci0gIC8vIHNob3VsZCBi
ZSBhZGRlZCB0byBNZWRpYVN0cmVhbSB1c2luZyBhZGRQcmVzZXJ2ZWRUcmFjaygpIGNhbGwuCi0g
IHB1YmxpYyBib29sZWFuIGFkZFByZXNlcnZlZFRyYWNrKFZpZGVvVHJhY2sgdHJhY2spIHsKLSAg
ICBpZiAobmF0aXZlQWRkVmlkZW9UcmFjayhuYXRpdmVTdHJlYW0sIHRyYWNrLm5hdGl2ZVRyYWNr
KSkgewotICAgICAgcHJlc2VydmVkVmlkZW9UcmFja3MuYWRkKHRyYWNrKTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVh
biByZW1vdmVUcmFjayhBdWRpb1RyYWNrIHRyYWNrKSB7Ci0gICAgYXVkaW9UcmFja3MucmVtb3Zl
KHRyYWNrKTsKLSAgICByZXR1cm4gbmF0aXZlUmVtb3ZlQXVkaW9UcmFjayhuYXRpdmVTdHJlYW0s
IHRyYWNrLm5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZVRyYWNr
KFZpZGVvVHJhY2sgdHJhY2spIHsKLSAgICB2aWRlb1RyYWNrcy5yZW1vdmUodHJhY2spOwotICAg
IHByZXNlcnZlZFZpZGVvVHJhY2tzLnJlbW92ZSh0cmFjayk7Ci0gICAgcmV0dXJuIG5hdGl2ZVJl
bW92ZVZpZGVvVHJhY2sobmF0aXZlU3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjayk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIC8vIFJlbW92ZSBhbmQgcmVsZWFzZSBwcmV2
aW91c2x5IGFkZGVkIGF1ZGlvIGFuZCB2aWRlbyB0cmFja3MuCi0gICAgd2hpbGUgKCFhdWRpb1Ry
YWNrcy5pc0VtcHR5KCkpIHsKLSAgICAgIEF1ZGlvVHJhY2sgdHJhY2sgPSBhdWRpb1RyYWNrcy5n
ZXRGaXJzdCgpOwotICAgICAgcmVtb3ZlVHJhY2sodHJhY2spOwotICAgICAgdHJhY2suZGlzcG9z
ZSgpOwotICAgIH0KLSAgICB3aGlsZSAoIXZpZGVvVHJhY2tzLmlzRW1wdHkoKSkgewotICAgICAg
VmlkZW9UcmFjayB0cmFjayA9IHZpZGVvVHJhY2tzLmdldEZpcnN0KCk7Ci0gICAgICByZW1vdmVU
cmFjayh0cmFjayk7Ci0gICAgICB0cmFjay5kaXNwb3NlKCk7Ci0gICAgfQotICAgIC8vIFJlbW92
ZSwgYnV0IGRvIG5vdCByZWxlYXNlIHByZXNlcnZlZCB2aWRlbyB0cmFja3MuCi0gICAgd2hpbGUg
KCFwcmVzZXJ2ZWRWaWRlb1RyYWNrcy5pc0VtcHR5KCkpIHsKLSAgICAgIHJlbW92ZVRyYWNrKHBy
ZXNlcnZlZFZpZGVvVHJhY2tzLmdldEZpcnN0KCkpOwotICAgIH0KLSAgICBmcmVlKG5hdGl2ZVN0
cmVhbSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGxhYmVsKCkgewotICAgIHJldHVybiBuYXRp
dmVMYWJlbChuYXRpdmVTdHJlYW0pOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygp
IHsKLSAgICByZXR1cm4gIlsiICsgbGFiZWwoKSArICI6QT0iICsgYXVkaW9UcmFja3Muc2l6ZSgp
ICsgIjpWPSIgKyB2aWRlb1RyYWNrcy5zaXplKCkgKyAiXSI7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRBdWRpb1RyYWNrKGxvbmcgbmF0aXZlU3RyZWFt
LCBsb25nIG5hdGl2ZUF1ZGlvVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29s
ZWFuIG5hdGl2ZUFkZFZpZGVvVHJhY2sobG9uZyBuYXRpdmVTdHJlYW0sIGxvbmcgbmF0aXZlVmlk
ZW9UcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlUmVtb3Zl
QXVkaW9UcmFjayhsb25nIG5hdGl2ZVN0cmVhbSwgbG9uZyBuYXRpdmVBdWRpb1RyYWNrKTsKLQot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVSZW1vdmVWaWRlb1RyYWNrKGxv
bmcgbmF0aXZlU3RyZWFtLCBsb25nIG5hdGl2ZVZpZGVvVHJhY2spOwotCi0gIHByaXZhdGUgc3Rh
dGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlTGFiZWwobG9uZyBuYXRpdmVTdHJlYW0pOwotCi0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBuYXRpdmVTdHJlYW0pOwotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbVRyYWNrLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbVRyYWNrLmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNl
LiAqLwotcHVibGljIGNsYXNzIE1lZGlhU3RyZWFtVHJhY2sgewotICAvKiogVHJhY2tzIE1lZGlh
U3RyZWFtVHJhY2tJbnRlcmZhY2UuVHJhY2tTdGF0ZSAqLwotICBwdWJsaWMgZW51bSBTdGF0ZSB7
IExJVkUsIEVOREVEIH0KLQotICBmaW5hbCBsb25nIG5hdGl2ZVRyYWNrOwotCi0gIHB1YmxpYyBN
ZWRpYVN0cmVhbVRyYWNrKGxvbmcgbmF0aXZlVHJhY2spIHsKLSAgICB0aGlzLm5hdGl2ZVRyYWNr
ID0gbmF0aXZlVHJhY2s7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGlkKCkgewotICAgIHJldHVy
biBuYXRpdmVJZChuYXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGtpbmQoKSB7
Ci0gICAgcmV0dXJuIG5hdGl2ZUtpbmQobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIGJv
b2xlYW4gZW5hYmxlZCgpIHsKLSAgICByZXR1cm4gbmF0aXZlRW5hYmxlZChuYXRpdmVUcmFjayk7
Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0g
ICAgcmV0dXJuIG5hdGl2ZVNldEVuYWJsZWQobmF0aXZlVHJhY2ssIGVuYWJsZSk7Ci0gIH0KLQot
ICBwdWJsaWMgU3RhdGUgc3RhdGUoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVN0YXRlKG5hdGl2ZVRy
YWNrKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgZnJlZShuYXRpdmVU
cmFjayk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIG5hdGl2ZUlkKGxv
bmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZl
S2luZChsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVh
biBuYXRpdmVFbmFibGVkKGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBib29sZWFuIG5hdGl2ZVNldEVuYWJsZWQobG9uZyBuYXRpdmVUcmFjaywgYm9vbGVhbiBl
bmFibGVkKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RhdGUgbmF0aXZlU3RhdGUobG9u
ZyBuYXRpdmVUcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25n
IG5hdGl2ZVRyYWNrKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWV0cmljcy5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWV0cmljcy5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01ldHJpY3MuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDExNCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vLyBK
YXZhLXNpZGUgb2YgYW5kcm9pZG1ldHJpY3Nfam5pLmNjLgotLy8KLS8vIFJ0YyBoaXN0b2dyYW1z
IGNhbiBiZSBxdWVyaWVkIHRocm91Z2ggdGhlIEFQSSwgZ2V0QW5kUmVzZXQoKS4KLS8vIFRoZSBy
ZXR1cm5lZCBtYXAgaG9sZHMgdGhlIG5hbWUgb2YgYSBoaXN0b2dyYW0gYW5kIGl0cyBzYW1wbGVz
LgotLy8KLS8vIEV4YW1wbGUgb2YgfG1hcHwgd2l0aCBvbmUgaGlzdG9ncmFtOgotLy8gfG5hbWV8
OiAiV2ViUlRDLlZpZGVvLklucHV0RnJhbWVzUGVyU2Vjb25kIgotLy8gICAgIHxtaW58OiAxCi0v
LyAgICAgfG1heHw6IDEwMAotLy8gICAgIHxidWNrZXRDb3VudHw6IDUwCi0vLyAgICAgfHNhbXBs
ZXN8OiBbMzBdOjEKLS8vCi0vLyBNb3N0IGhpc3RvZ3JhbXMgYXJlIG5vdCB1cGRhdGVkIGZyZXF1
ZW50bHkgKGUuZy4gbW9zdCB2aWRlbyBtZXRyaWNzIGFyZSBhbgotLy8gYXZlcmFnZSBvdmVyIHRo
ZSBjYWxsIGFuZCByZWNvcmRlZCB3aGVuIGEgc3RyZWFtIGlzIHJlbW92ZWQpLgotLy8gVGhlIG1l
dHJpY3MgY2FuIGZvciBleGFtcGxlIGJlIHJldHJpZXZlZCB3aGVuIGEgcGVlciBjb25uZWN0aW9u
IGlzIGNsb3NlZC4KLQotcHVibGljIGNsYXNzIE1ldHJpY3MgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIk1ldHJpY3MiOwotCi0gIHN0YXRpYyB7Ci0gICAgU3lzdGVtLmxv
YWRMaWJyYXJ5KCJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fc28iKTsKLSAgfQotICBwdWJsaWMgZmlu
YWwgTWFwPFN0cmluZywgSGlzdG9ncmFtSW5mbz4gbWFwID0KLSAgICAgIG5ldyBIYXNoTWFwPFN0
cmluZywgSGlzdG9ncmFtSW5mbz4oKTsgLy8gPG5hbWUsIEhpc3RvZ3JhbUluZm8+Ci0KLSAgLyoq
Ci0gICAqIENsYXNzIGhvbGRpbmcgaGlzdG9ncmFtIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyBjbGFzcyBIaXN0b2dyYW1JbmZvIHsKLSAgICBwdWJsaWMgZmluYWwgaW50IG1p
bjsKLSAgICBwdWJsaWMgZmluYWwgaW50IG1heDsKLSAgICBwdWJsaWMgZmluYWwgaW50IGJ1Y2tl
dENvdW50OwotICAgIHB1YmxpYyBmaW5hbCBNYXA8SW50ZWdlciwgSW50ZWdlcj4gc2FtcGxlcyA9
Ci0gICAgICAgIG5ldyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7IC8vIDx2YWx1ZSwgIyBv
ZiBldmVudHM+Ci0KLSAgICBwdWJsaWMgSGlzdG9ncmFtSW5mbyhpbnQgbWluLCBpbnQgbWF4LCBp
bnQgYnVja2V0Q291bnQpIHsKLSAgICAgIHRoaXMubWluID0gbWluOwotICAgICAgdGhpcy5tYXgg
PSBtYXg7Ci0gICAgICB0aGlzLmJ1Y2tldENvdW50ID0gYnVja2V0Q291bnQ7Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgYWRkU2FtcGxlKGludCB2YWx1ZSwgaW50IG51bUV2ZW50cykgewotICAg
ICAgc2FtcGxlcy5wdXQodmFsdWUsIG51bUV2ZW50cyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIENsYXNzIGZvciBob2xkaW5nIHRoZSBuYXRpdmUgcG9pbnRlciBvZiBhIGhpc3RvZ3JhbS4g
U2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvIGRlc3Ryb3kgYQotICAgKiBoaXN0b2dyYW0sIHBsZWFz
ZSBkb24ndCBjcmVhdGUgdW5uZWNlc3NhcnkgaW5zdGFuY2VzIG9mIHRoaXMgb2JqZWN0LiBUaGlz
IGNsYXNzIGlzIHRocmVhZCBzYWZlLgotICAgKgotICAgKiBVc2FnZSBleGFtcGxlOgotICAgKiBw
cml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gc29tZU1ldHJpY0hpc3RvZ3JhbSA9Ci0gICAq
ICAgICBIaXN0b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuVmlkZW8uU29tZU1ldHJpYyIsIDEs
IDEwMDAwLCA1MCk7Ci0gICAqIHNvbWVNZXRyaWNIaXN0b2dyYW0uYWRkU2FtcGxlKHNvbWVWYXJp
YWJsZSk7Ci0gICAqLwotICBzdGF0aWMgY2xhc3MgSGlzdG9ncmFtIHsKLSAgICBwcml2YXRlIGZp
bmFsIGxvbmcgaGFuZGxlOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7IC8vIE9ubHkg
dXNlZCBmb3IgbG9nZ2luZy4KLQotICAgIHByaXZhdGUgSGlzdG9ncmFtKGxvbmcgaGFuZGxlLCBT
dHJpbmcgbmFtZSkgewotICAgICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7Ci0gICAgICB0aGlzLm5h
bWUgPSBuYW1lOwotICAgIH0KLQotICAgIHN0YXRpYyBwdWJsaWMgSGlzdG9ncmFtIGNyZWF0ZUNv
dW50cyhTdHJpbmcgbmFtZSwgaW50IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KSB7Ci0g
ICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbShuYXRpdmVDcmVhdGVDb3VudHMobmFtZSwgbWluLCBt
YXgsIGJ1Y2tldENvdW50KSwgbmFtZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHB1YmxpYyBIaXN0
b2dyYW0gY3JlYXRlRW51bWVyYXRpb24oU3RyaW5nIG5hbWUsIGludCBtYXgpIHsKLSAgICAgIHJl
dHVybiBuZXcgSGlzdG9ncmFtKG5hdGl2ZUNyZWF0ZUVudW1lcmF0aW9uKG5hbWUsIG1heCksIG5h
bWUpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZFNhbXBsZShpbnQgc2FtcGxlKSB7Ci0g
ICAgICBuYXRpdmVBZGRTYW1wbGUoaGFuZGxlLCBzYW1wbGUpOwotICAgIH0KLQotICAgIHByaXZh
dGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUNvdW50cyhTdHJpbmcgbmFtZSwgaW50
IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgbG9uZyBuYXRpdmVDcmVhdGVFbnVtZXJhdGlvbihTdHJpbmcgbmFtZSwgaW50IG1heCk7Ci0g
ICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlQWRkU2FtcGxlKGxvbmcgaGFuZGxl
LCBpbnQgc2FtcGxlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGQoU3RyaW5nIG5hbWUsIEhp
c3RvZ3JhbUluZm8gaW5mbykgewotICAgIG1hcC5wdXQobmFtZSwgaW5mbyk7Ci0gIH0KLQotICAv
LyBFbmFibGVzIGdhdGhlcmluZyBvZiBtZXRyaWNzICh3aGljaCBjYW4gYmUgZmV0Y2hlZCB3aXRo
IGdldEFuZFJlc2V0KCkpLgotICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgUGVlckNvbm5lY3Rp
b25GYWN0b3J5IGlzIGNyZWF0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBlbmFibGUoKSB7Ci0g
ICAgbmF0aXZlRW5hYmxlKCk7Ci0gIH0KLQotICAvLyBHZXRzIGFuZCBjbGVhcnMgbmF0aXZlIGhp
c3RvZ3JhbXMuCi0gIHB1YmxpYyBzdGF0aWMgTWV0cmljcyBnZXRBbmRSZXNldCgpIHsKLSAgICBy
ZXR1cm4gbmF0aXZlR2V0QW5kUmVzZXQoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSB2b2lkIG5hdGl2ZUVuYWJsZSgpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgTWV0cmljcyBu
YXRpdmVHZXRBbmRSZXNldCgpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9u
aXRvci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3Iu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRv
ci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjU0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdv
cmtNb25pdG9yQXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZTsKLWltcG9ydCBzdGF0aWMgb3JnLndl
YnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuSU5WQUxJRF9ORVRfSUQ7Ci1pbXBvcnQgc3Rh
dGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtJbmZvcm1hdGlv
bjsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3Mu
QnVpbGQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5M
aXN0OwotCi0vKioKLSAqIEJvcnJvd2VkIGZyb20gQ2hyb21pdW0ncyBzcmMvbmV0L2FuZHJvaWQv
amF2YS9zcmMvb3JnL2Nocm9taXVtL25ldC9OZXR3b3JrQ2hhbmdlTm90aWZpZXIuamF2YQotICoK
LSAqIFRyaWdnZXJzIHVwZGF0ZXMgdG8gdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGF0ZSBmcm9t
IE9TIG5ldHdvcmtpbmcgZXZlbnRzLgotICoKLSAqIFdBUk5JTkc6IFRoaXMgY2xhc3MgaXMgbm90
IHRocmVhZC1zYWZlLgotICovCi1wdWJsaWMgY2xhc3MgTmV0d29ya01vbml0b3IgewotICAvKioK
LSAgICogQWxlcnRlZCB3aGVuIHRoZSBjb25uZWN0aW9uIHR5cGUgb2YgdGhlIG5ldHdvcmsgY2hh
bmdlcy4KLSAgICogVGhlIGFsZXJ0IGlzIGZpcmVkIG9uIHRoZSBVSSB0aHJlYWQuCi0gICAqLwot
ICBwdWJsaWMgaW50ZXJmYWNlIE5ldHdvcmtPYnNlcnZlciB7Ci0gICAgcHVibGljIHZvaWQgb25D
b25uZWN0aW9uVHlwZUNoYW5nZWQoQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpOwotICB9
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOZXR3b3JrTW9uaXRvciI7
Ci0gIHByaXZhdGUgc3RhdGljIE5ldHdvcmtNb25pdG9yIGluc3RhbmNlOwotCi0gIHByaXZhdGUg
ZmluYWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0KLSAgLy8gTmF0aXZlIG9ic2VydmVy
cyBvZiB0aGUgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gIHByaXZhdGUgZmluYWwgQXJyYXlM
aXN0PExvbmc+IG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnM7Ci0gIC8vIEphdmEgb2JzZXJ2ZXJzIG9m
IHRoZSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8
TmV0d29ya09ic2VydmVyPiBuZXR3b3JrT2JzZXJ2ZXJzOwotCi0gIC8vIE9iamVjdCB0aGF0IGRl
dGVjdHMgdGhlIGNvbm5lY3Rpb24gdHlwZSBjaGFuZ2VzLgotICBwcml2YXRlIE5ldHdvcmtNb25p
dG9yQXV0b0RldGVjdCBhdXRvRGV0ZWN0b3I7Ci0KLSAgcHJpdmF0ZSBDb25uZWN0aW9uVHlwZSBj
dXJyZW50Q29ubmVjdGlvblR5cGUgPSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV047
Ci0KLSAgcHJpdmF0ZSBOZXR3b3JrTW9uaXRvcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICBhc3Nl
cnRJc1RydWUoY29udGV4dCAhPSBudWxsKTsKLSAgICBhcHBsaWNhdGlvbkNvbnRleHQgPQotICAg
ICAgICBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpID09IG51bGwgPyBjb250ZXh0IDog
Y29udGV4dC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKTsKLQotICAgIG5hdGl2ZU5ldHdvcmtPYnNl
cnZlcnMgPSBuZXcgQXJyYXlMaXN0PExvbmc+KCk7Ci0gICAgbmV0d29ya09ic2VydmVycyA9IG5l
dyBBcnJheUxpc3Q8TmV0d29ya09ic2VydmVyPigpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRp
YWxpemVzIHRoZSBzaW5nbGV0b24gb25jZS4KLSAgICogQ2FsbGVkIGZyb20gdGhlIG5hdGl2ZSBj
b2RlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBOZXR3b3JrTW9uaXRvciBpbml0KENvbnRleHQg
Y29udGV4dCkgewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICBpbnN0YW5jZSA9
IG5ldyBOZXR3b3JrTW9uaXRvcihjb250ZXh0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNl
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7Ci0gICAg
cmV0dXJuIGluc3RhbmNlICE9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUg
c2luZ2xldG9uIGluc3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBOZXR3b3JrTW9uaXRv
ciBnZXRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAg
ICogRW5hYmxlcyBhdXRvIGRldGVjdGlvbiBvZiB0aGUgY3VycmVudCBuZXR3b3JrIHN0YXRlIGJh
c2VkIG9uIG5vdGlmaWNhdGlvbnMgZnJvbSB0aGUgc3lzdGVtLgotICAgKiBOb3RlIHRoYXQgcGFz
c2luZyB0cnVlIGhlcmUgcmVxdWlyZXMgdGhlIGVtYmVkZGluZyBhcHAgaGF2ZSB0aGUgcGxhdGZv
cm0gQUNDRVNTX05FVFdPUktfU1RBVEUKLSAgICogcGVybWlzc2lvbi4KLSAgICoKLSAgICogQHBh
cmFtIHNob3VsZEF1dG9EZXRlY3QgdHJ1ZSBpZiB0aGUgTmV0d29ya01vbml0b3Igc2hvdWxkIGxp
c3RlbiBmb3Igc3lzdGVtIGNoYW5nZXMgaW4KLSAgICogIG5ldHdvcmsgY29ubmVjdGl2aXR5Lgot
ICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEF1dG9EZXRlY3RDb25uZWN0aXZpdHlTdGF0
ZShib29sZWFuIHNob3VsZEF1dG9EZXRlY3QpIHsKLSAgICBnZXRJbnN0YW5jZSgpLnNldEF1dG9E
ZXRlY3RDb25uZWN0aXZpdHlTdGF0ZUludGVybmFsKHNob3VsZEF1dG9EZXRlY3QpOwotICB9Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRJc1RydWUoYm9vbGVhbiBjb25kaXRpb24pIHsK
LSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJF
eHBlY3RlZCB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ2FsbGVkIGJ5IHRoZSBu
YXRpdmUgY29kZS4KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0TW9uaXRvcmluZyhsb25nIG5hdGl2ZU9i
c2VydmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0YXJ0IG1vbml0b3JpbmcgZnJvbSBuYXRp
dmUgb2JzZXJ2ZXIgIiArIG5hdGl2ZU9ic2VydmVyKTsKLSAgICBuYXRpdmVOZXR3b3JrT2JzZXJ2
ZXJzLmFkZChuYXRpdmVPYnNlcnZlcik7Ci0gICAgc2V0QXV0b0RldGVjdENvbm5lY3Rpdml0eVN0
YXRlSW50ZXJuYWwodHJ1ZSk7Ci0gIH0KLQotICAvLyBDYWxsZWQgYnkgdGhlIG5hdGl2ZSBjb2Rl
LgotICBwcml2YXRlIHZvaWQgc3RvcE1vbml0b3JpbmcobG9uZyBuYXRpdmVPYnNlcnZlcikgewot
ICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIG1vbml0b3JpbmcgZnJvbSBuYXRpdmUgb2JzZXJ2ZXIg
IiArIG5hdGl2ZU9ic2VydmVyKTsKLSAgICBzZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5U3RhdGVJ
bnRlcm5hbChmYWxzZSk7Ci0gICAgbmF0aXZlTmV0d29ya09ic2VydmVycy5yZW1vdmUobmF0aXZl
T2JzZXJ2ZXIpOwotICB9Ci0KLSAgLy8gQ2FsbGVkIGJ5IHRoZSBuYXRpdmUgY29kZSB0byBnZXQg
dGhlIEFuZHJvaWQgU0RLIHZlcnNpb24uCi0gIHByaXZhdGUgc3RhdGljIGludCBhbmRyb2lkU2Rr
SW50KCkgewotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0gIH0KLQotICBwcml2
YXRlIENvbm5lY3Rpb25UeXBlIGdldEN1cnJlbnRDb25uZWN0aW9uVHlwZSgpIHsKLSAgICByZXR1
cm4gY3VycmVudENvbm5lY3Rpb25UeXBlOwotICB9Ci0KLSAgcHJpdmF0ZSBsb25nIGdldEN1cnJl
bnREZWZhdWx0TmV0SWQoKSB7Ci0gICAgcmV0dXJuIGF1dG9EZXRlY3RvciA9PSBudWxsID8gSU5W
QUxJRF9ORVRfSUQgOiBhdXRvRGV0ZWN0b3IuZ2V0RGVmYXVsdE5ldElkKCk7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgZGVzdHJveUF1dG9EZXRlY3RvcigpIHsKLSAgICBpZiAoYXV0b0RldGVjdG9y
ICE9IG51bGwpIHsKLSAgICAgIGF1dG9EZXRlY3Rvci5kZXN0cm95KCk7Ci0gICAgICBhdXRvRGV0
ZWN0b3IgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRBdXRvRGV0ZWN0
Q29ubmVjdGl2aXR5U3RhdGVJbnRlcm5hbChib29sZWFuIHNob3VsZEF1dG9EZXRlY3QpIHsKLSAg
ICBpZiAoIXNob3VsZEF1dG9EZXRlY3QpIHsKLSAgICAgIGRlc3Ryb3lBdXRvRGV0ZWN0b3IoKTsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGF1dG9EZXRlY3RvciA9PSBudWxsKSB7Ci0g
ICAgICBhdXRvRGV0ZWN0b3IgPSBuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KG5ldyBOZXR3
b3JrTW9uaXRvckF1dG9EZXRlY3QuT2JzZXJ2ZXIoKSB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0g
ICAgICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKENvbm5lY3Rpb25UeXBl
IG5ld0Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgICAgICAgdXBkYXRlQ3VycmVudENvbm5lY3Rpb25U
eXBlKG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQot
ICAgICAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtDb25uZWN0KE5ldHdvcmtJbmZvcm1hdGlvbiBu
ZXR3b3JrSW5mbykgewotICAgICAgICAgIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Nvbm5lY3Qo
bmV0d29ya0luZm8pOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1
YmxpYyB2b2lkIG9uTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBuZXR3b3JrSGFuZGxlKSB7Ci0gICAg
ICAgICAgbm90aWZ5T2JzZXJ2ZXJzT2ZOZXR3b3JrRGlzY29ubmVjdChuZXR3b3JrSGFuZGxlKTsK
LSAgICAgICAgfQotICAgICAgfSwgYXBwbGljYXRpb25Db250ZXh0KTsKLSAgICAgIGZpbmFsIE5l
dHdvcmtNb25pdG9yQXV0b0RldGVjdC5OZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0KLSAgICAg
ICAgICBhdXRvRGV0ZWN0b3IuZ2V0Q3VycmVudE5ldHdvcmtTdGF0ZSgpOwotICAgICAgdXBkYXRl
Q3VycmVudENvbm5lY3Rpb25UeXBlKE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5nZXRDb25uZWN0
aW9uVHlwZShuZXR3b3JrU3RhdGUpKTsKLSAgICAgIHVwZGF0ZUFjdGl2ZU5ldHdvcmtMaXN0KCk7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUN1cnJlbnRDb25uZWN0aW9uVHlw
ZShDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSkgewotICAgIGN1cnJlbnRDb25uZWN0
aW9uVHlwZSA9IG5ld0Nvbm5lY3Rpb25UeXBlOwotICAgIG5vdGlmeU9ic2VydmVyc09mQ29ubmVj
dGlvblR5cGVDaGFuZ2UobmV3Q29ubmVjdGlvblR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFs
ZXJ0cyBhbGwgb2JzZXJ2ZXJzIG9mIGEgY29ubmVjdGlvbiBjaGFuZ2UuCi0gICAqLwotICBwcml2
YXRlIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzT2ZDb25uZWN0aW9uVHlwZUNoYW5nZShDb25uZWN0aW9u
VHlwZSBuZXdDb25uZWN0aW9uVHlwZSkgewotICAgIGZvciAobG9uZyBuYXRpdmVPYnNlcnZlciA6
IG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5vdGlmeUNvbm5lY3Rpb25U
eXBlQ2hhbmdlZChuYXRpdmVPYnNlcnZlcik7Ci0gICAgfQotICAgIGZvciAoTmV0d29ya09ic2Vy
dmVyIG9ic2VydmVyIDogbmV0d29ya09ic2VydmVycykgewotICAgICAgb2JzZXJ2ZXIub25Db25u
ZWN0aW9uVHlwZUNoYW5nZWQobmV3Q29ubmVjdGlvblR5cGUpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBub3RpZnlPYnNlcnZlcnNPZk5ldHdvcmtDb25uZWN0KE5ldHdvcmtJbmZvcm1h
dGlvbiBuZXR3b3JrSW5mbykgewotICAgIGZvciAobG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2
ZU5ldHdvcmtPYnNlcnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5vdGlmeU9mTmV0d29ya0Nvbm5lY3Qo
bmF0aXZlT2JzZXJ2ZXIsIG5ldHdvcmtJbmZvKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgbm90aWZ5T2JzZXJ2ZXJzT2ZOZXR3b3JrRGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUp
IHsKLSAgICBmb3IgKGxvbmcgbmF0aXZlT2JzZXJ2ZXIgOiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJz
KSB7Ci0gICAgICBuYXRpdmVOb3RpZnlPZk5ldHdvcmtEaXNjb25uZWN0KG5hdGl2ZU9ic2VydmVy
LCBuZXR3b3JrSGFuZGxlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlQWN0
aXZlTmV0d29ya0xpc3QoKSB7Ci0gICAgTGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+IG5ldHdvcmtJ
bmZvTGlzdCA9IGF1dG9EZXRlY3Rvci5nZXRBY3RpdmVOZXR3b3JrTGlzdCgpOwotICAgIGlmIChu
ZXR3b3JrSW5mb0xpc3QgPT0gbnVsbCB8fCBuZXR3b3JrSW5mb0xpc3Quc2l6ZSgpID09IDApIHsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBOZXR3b3JrSW5mb3JtYXRpb25bXSBuZXR3b3Jr
SW5mb3MgPSBuZXcgTmV0d29ya0luZm9ybWF0aW9uW25ldHdvcmtJbmZvTGlzdC5zaXplKCldOwot
ICAgIG5ldHdvcmtJbmZvcyA9IG5ldHdvcmtJbmZvTGlzdC50b0FycmF5KG5ldHdvcmtJbmZvcyk7
Ci0gICAgZm9yIChsb25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlTmV0d29ya09ic2VydmVycykg
ewotICAgICAgbmF0aXZlTm90aWZ5T2ZBY3RpdmVOZXR3b3JrTGlzdChuYXRpdmVPYnNlcnZlciwg
bmV0d29ya0luZm9zKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBhbiBvYnNlcnZl
ciBmb3IgYW55IGNvbm5lY3Rpb24gdHlwZSBjaGFuZ2VzLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyB2b2lkIGFkZE5ldHdvcmtPYnNlcnZlcihOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAg
ICBnZXRJbnN0YW5jZSgpLmFkZE5ldHdvcmtPYnNlcnZlckludGVybmFsKG9ic2VydmVyKTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBhZGROZXR3b3JrT2JzZXJ2ZXJJbnRlcm5hbChOZXR3b3JrT2Jz
ZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBuZXR3b3JrT2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7Ci0g
IH0KLQotICAvKioKLSAgICogUmVtb3ZlcyBhbiBvYnNlcnZlciBmb3IgYW55IGNvbm5lY3Rpb24g
dHlwZSBjaGFuZ2VzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZU5ldHdvcmtP
YnNlcnZlcihOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBnZXRJbnN0YW5jZSgpLnJl
bW92ZU5ldHdvcmtPYnNlcnZlckludGVybmFsKG9ic2VydmVyKTsKLSAgfQotCi0gIHByaXZhdGUg
dm9pZCByZW1vdmVOZXR3b3JrT2JzZXJ2ZXJJbnRlcm5hbChOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2
ZXIpIHsKLSAgICBuZXR3b3JrT2JzZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7Ci0gIH0KLQotICAv
KioKLSAgICogQ2hlY2tzIGlmIHRoZXJlIGN1cnJlbnRseSBpcyBjb25uZWN0aXZpdHkuCi0gICAq
LwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNPbmxpbmUoKSB7Ci0gICAgQ29ubmVjdGlvblR5
cGUgY29ubmVjdGlvblR5cGUgPSBnZXRJbnN0YW5jZSgpLmdldEN1cnJlbnRDb25uZWN0aW9uVHlw
ZSgpOwotICAgIHJldHVybiBjb25uZWN0aW9uVHlwZSAhPSBDb25uZWN0aW9uVHlwZS5DT05ORUNU
SU9OX05PTkU7Ci0gIH0KLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeUNvbm5l
Y3Rpb25UeXBlQ2hhbmdlZChsb25nIG5hdGl2ZVB0cik7Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQg
bmF0aXZlTm90aWZ5T2ZOZXR3b3JrQ29ubmVjdChsb25nIG5hdGl2ZVB0ciwgTmV0d29ya0luZm9y
bWF0aW9uIG5ldHdvcmtJbmZvKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVOb3RpZnlP
Zk5ldHdvcmtEaXNjb25uZWN0KGxvbmcgbmF0aXZlUHRyLCBsb25nIG5ldHdvcmtIYW5kbGUpOwot
ICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeU9mQWN0aXZlTmV0d29ya0xpc3QoCi0g
ICAgICBsb25nIG5hdGl2ZVB0ciwgTmV0d29ya0luZm9ybWF0aW9uW10gbmV0d29ya0luZm9zKTsK
LQotICAvLyBGb3IgdGVzdGluZyBvbmx5LgotICBzdGF0aWMgdm9pZCByZXNldEluc3RhbmNlRm9y
VGVzdHMoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgaW5zdGFuY2UgPSBuZXcgTmV0d29ya01vbml0
b3IoY29udGV4dCk7Ci0gIH0KLQotICAvLyBGb3IgdGVzdGluZyBvbmx5LgotICBwdWJsaWMgc3Rh
dGljIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCBnZXRBdXRvRGV0ZWN0b3JGb3JUZXN0KCkgewot
ICAgIHJldHVybiBnZXRJbnN0YW5jZSgpLmF1dG9EZXRlY3RvcjsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsNjIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC5OZXR3b3Jr
Q2FwYWJpbGl0aWVzLk5FVF9DQVBBQklMSVRZX0lOVEVSTkVUOwotaW1wb3J0IHN0YXRpYyBhbmRy
b2lkLm5ldC5OZXR3b3JrQ2FwYWJpbGl0aWVzLlRSQU5TUE9SVF9DRUxMVUxBUjsKLQotaW1wb3J0
IGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbjsKLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24u
U3VwcHJlc3NMaW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsK
LWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQu
SW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5k
cm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0
aXZpdHlNYW5hZ2VyLk5ldHdvcmtDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRk
cmVzczsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lk
Lm5ldC5OZXR3b3JrOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtDYXBhYmlsaXRpZXM7Ci1p
bXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0luZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29y
a1JlcXVlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpSW5mbzsKLWltcG9ydCBhbmRy
b2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBv
cnQgYW5kcm9pZC50ZWxlcGhvbnkuVGVsZXBob255TWFuYWdlcjsKLQotaW1wb3J0IGphdmEudXRp
bC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQm9ycm93ZWQg
ZnJvbSBDaHJvbWl1bSdzCi0gKiBzcmMvbmV0L2FuZHJvaWQvamF2YS9zcmMvb3JnL2Nocm9taXVt
L25ldC9OZXR3b3JrQ2hhbmdlTm90aWZpZXJBdXRvRGV0ZWN0LmphdmEKLSAqCi0gKiBVc2VkIGJ5
IHRoZSBOZXR3b3JrTW9uaXRvciB0byBsaXN0ZW4gdG8gcGxhdGZvcm0gY2hhbmdlcyBpbiBjb25u
ZWN0aXZpdHkuCi0gKiBOb3RlIHRoYXQgdXNlIG9mIHRoaXMgY2xhc3MgcmVxdWlyZXMgdGhhdCB0
aGUgYXBwIGhhdmUgdGhlIHBsYXRmb3JtCi0gKiBBQ0NFU1NfTkVUV09SS19TVEFURSBwZXJtaXNz
aW9uLgotICovCi1wdWJsaWMgY2xhc3MgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGV4dGVuZHMg
QnJvYWRjYXN0UmVjZWl2ZXIgewotICBwdWJsaWMgc3RhdGljIGVudW0gQ29ubmVjdGlvblR5cGUg
ewotICAgIENPTk5FQ1RJT05fVU5LTk9XTiwKLSAgICBDT05ORUNUSU9OX0VUSEVSTkVULAotICAg
IENPTk5FQ1RJT05fV0lGSSwKLSAgICBDT05ORUNUSU9OXzRHLAotICAgIENPTk5FQ1RJT05fM0cs
Ci0gICAgQ09OTkVDVElPTl8yRywKLSAgICBDT05ORUNUSU9OX1VOS05PV05fQ0VMTFVMQVIsCi0g
ICAgQ09OTkVDVElPTl9CTFVFVE9PVEgsCi0gICAgQ09OTkVDVElPTl9OT05FCi0gIH0KLQotICBw
dWJsaWMgc3RhdGljIGNsYXNzIElQQWRkcmVzcyB7Ci0gICAgcHVibGljIGZpbmFsIGJ5dGVbXSBh
ZGRyZXNzOwotICAgIHB1YmxpYyBJUEFkZHJlc3MoYnl0ZVtdIGFkZHJlc3MpIHsKLSAgICAgIHRo
aXMuYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBv
ZiBOZXR3b3JrTW9uaXRvci5OZXR3b3JrSW5mb3JtYXRpb24gKi8KLSAgcHVibGljIHN0YXRpYyBj
bGFzcyBOZXR3b3JrSW5mb3JtYXRpb24gewotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZTsK
LSAgICBwdWJsaWMgZmluYWwgQ29ubmVjdGlvblR5cGUgdHlwZTsKLSAgICBwdWJsaWMgZmluYWwg
bG9uZyBoYW5kbGU7Ci0gICAgcHVibGljIGZpbmFsIElQQWRkcmVzc1tdIGlwQWRkcmVzc2VzOwot
ICAgIHB1YmxpYyBOZXR3b3JrSW5mb3JtYXRpb24oCi0gICAgICAgIFN0cmluZyBuYW1lLCBDb25u
ZWN0aW9uVHlwZSB0eXBlLCBsb25nIGhhbmRsZSwgSVBBZGRyZXNzW10gYWRkcmVzc2VzKSB7Ci0g
ICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICAgIHRo
aXMuaGFuZGxlID0gaGFuZGxlOwotICAgICAgdGhpcy5pcEFkZHJlc3NlcyA9IGFkZHJlc3NlczsK
LSAgICB9Ci0gIH07Ci0KLSAgc3RhdGljIGNsYXNzIE5ldHdvcmtTdGF0ZSB7Ci0gICAgcHJpdmF0
ZSBmaW5hbCBib29sZWFuIGNvbm5lY3RlZDsKLSAgICAvLyBEZWZpbmVkIGZyb20gQ29ubmVjdGl2
aXR5TWFuYWdlci5UWVBFX1hYWCBmb3Igbm9uLW1vYmlsZTsgZm9yIG1vYmlsZSwgaXQgaXMKLSAg
ICAvLyBmdXJ0aGVyIGRpdmlkZWQgaW50byAyRywgM0csIG9yIDRHIGZyb20gdGhlIHN1YnR5cGUu
Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgdHlwZTsKLSAgICAvLyBEZWZpbmVkIGZyb20gTmV0d29y
a0luZm8uc3VidHlwZSwgd2hpY2ggaXMgb25lIG9mIHRoZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdP
UktfVFlQRV9YWFhzLgotICAgIC8vIFdpbGwgYmUgdXNlZnVsIHRvIGZpbmQgdGhlIG1heGltdW0g
YmFuZHdpZHRoLgotICAgIHByaXZhdGUgZmluYWwgaW50IHN1YnR5cGU7Ci0KLSAgICBwdWJsaWMg
TmV0d29ya1N0YXRlKGJvb2xlYW4gY29ubmVjdGVkLCBpbnQgdHlwZSwgaW50IHN1YnR5cGUpIHsK
LSAgICAgIHRoaXMuY29ubmVjdGVkID0gY29ubmVjdGVkOwotICAgICAgdGhpcy50eXBlID0gdHlw
ZTsKLSAgICAgIHRoaXMuc3VidHlwZSA9IHN1YnR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIGJv
b2xlYW4gaXNDb25uZWN0ZWQoKSB7Ci0gICAgICByZXR1cm4gY29ubmVjdGVkOwotICAgIH0KLQot
ICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1R5cGUoKSB7Ci0gICAgICByZXR1cm4gdHlwZTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtTdWJUeXBlKCkgewotICAgICAgcmV0dXJu
IHN1YnR5cGU7Ci0gICAgfQotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kcyBpbiB0aGlzIGNs
YXNzIGdldCBjYWxsZWQgd2hlbiB0aGUgbmV0d29yayBjaGFuZ2VzIGlmIHRoZSBjYWxsYmFjawot
ICAgKiBpcyByZWdpc3RlcmVkIHdpdGggYSBwcm9wZXIgbmV0d29yayByZXF1ZXN0LiBJdCBpcyBv
bmx5IGF2YWlsYWJsZSBpbiBBbmRyb2lkIExvbGxpcG9wCi0gICAqIGFuZCBhYm92ZS4KLSAgICov
Ci0gIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gIHByaXZhdGUgY2xhc3MgU2ltcGxlTmV0d29y
a0NhbGxiYWNrIGV4dGVuZHMgTmV0d29ya0NhbGxiYWNrIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbkF2YWlsYWJsZShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJOZXR3b3JrIGJlY29tZXMgYXZhaWxhYmxlOiAiICsgbmV0d29yay50b1N0cmluZygp
KTsKLSAgICAgIG9uTmV0d29ya0NoYW5nZWQobmV0d29yayk7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgb25DYXBhYmlsaXRpZXNDaGFuZ2VkKE5ldHdvcmsgbmV0d29y
aywgTmV0d29ya0NhcGFiaWxpdGllcyBuZXR3b3JrQ2FwYWJpbGl0aWVzKSB7Ci0gICAgICAvLyBB
IGNhcGFiaWxpdGllcyBjaGFuZ2UgbWF5IGluZGljYXRlIHRoZSBDb25uZWN0aW9uVHlwZSBoYXMg
Y2hhbmdlZCwKLSAgICAgIC8vIHNvIGZvcndhcmQgdGhlIG5ldyBOZXR3b3JrSW5mb3JtYXRpb24g
YWxvbmcgdG8gdGhlIG9ic2VydmVyLgotICAgICAgTG9nZ2luZy5kKFRBRywgImNhcGFiaWxpdGll
cyBjaGFuZ2VkOiAiICsgbmV0d29ya0NhcGFiaWxpdGllcy50b1N0cmluZygpKTsKLSAgICAgIG9u
TmV0d29ya0NoYW5nZWQobmV0d29yayk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25MaW5rUHJvcGVydGllc0NoYW5nZWQoTmV0d29yayBuZXR3b3JrLCBMaW5rUHJv
cGVydGllcyBsaW5rUHJvcGVydGllcykgewotICAgICAgLy8gQSBsaW5rIHByb3BlcnR5IGNoYW5n
ZSBtYXkgaW5kaWNhdGUgdGhlIElQIGFkZHJlc3MgY2hhbmdlcy4KLSAgICAgIC8vIHNvIGZvcndh
cmQgdGhlIG5ldyBOZXR3b3JrSW5mb3JtYXRpb24gdG8gdGhlIG9ic2VydmVyLgotICAgICAgTG9n
Z2luZy5kKFRBRywgImxpbmsgcHJvcGVydGllcyBjaGFuZ2VkOiAiICsgbGlua1Byb3BlcnRpZXMu
dG9TdHJpbmcoKSk7Ci0gICAgICBvbk5ldHdvcmtDaGFuZ2VkKG5ldHdvcmspOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTG9zaW5nKE5ldHdvcmsgbmV0d29yaywg
aW50IG1heE1zVG9MaXZlKSB7Ci0gICAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIGlzIGdvaW5nIHRv
IGxvc2UgaW4gTWF4TXNUb0xpdmUgbWlsbGlzZWNvbmRzLgotICAgICAgLy8gV2UgbWF5IHVzZSB0
aGlzIHNpZ25hbCBsYXRlci4KLSAgICAgIExvZ2dpbmcuZCgKLSAgICAgICAgICBUQUcsICJOZXR3
b3JrICIgKyBuZXR3b3JrLnRvU3RyaW5nKCkgKyAiIGlzIGFib3V0IHRvIGxvc2UgaW4gIiArIG1h
eE1zVG9MaXZlICsgIm1zIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgb25Mb3N0KE5ldHdvcmsgbmV0d29yaykgewotICAgICAgTG9nZ2luZy5kKFRBRywgIk5ldHdv
cmsgIiArIG5ldHdvcmsudG9TdHJpbmcoKSArICIgaXMgZGlzY29ubmVjdGVkIik7Ci0gICAgICBv
YnNlcnZlci5vbk5ldHdvcmtEaXNjb25uZWN0KG5ldHdvcmtUb05ldElkKG5ldHdvcmspKTsKLSAg
ICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgb25OZXR3b3JrQ2hhbmdlZChOZXR3b3JrIG5ldHdvcmsp
IHsKLSAgICAgIE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mb3JtYXRpb24gPSBjb25uZWN0
aXZpdHlNYW5hZ2VyRGVsZWdhdGUubmV0d29ya1RvSW5mbyhuZXR3b3JrKTsKLSAgICAgIGlmIChu
ZXR3b3JrSW5mb3JtYXRpb24gIT0gbnVsbCkgewotICAgICAgICBvYnNlcnZlci5vbk5ldHdvcmtD
b25uZWN0KG5ldHdvcmtJbmZvcm1hdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoq
IFF1ZXJpZXMgdGhlIENvbm5lY3Rpdml0eU1hbmFnZXIgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBjdXJyZW50IGNvbm5lY3Rpb24uICovCi0gIHN0YXRpYyBjbGFzcyBDb25uZWN0aXZpdHlNYW5h
Z2VyRGVsZWdhdGUgewotICAgIC8qKgotICAgICAqICBOb3RlOiBJbiBzb21lIHJhcmUgQW5kcm9p
ZCBzeXN0ZW1zIGNvbm5lY3Rpdml0eU1hbmFnZXIgaXMgbnVsbC4gIFdlIGhhbmRsZSB0aGF0Ci0g
ICAgICogIGdyYWNlZnVsbHkgYmVsb3cuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBDb25u
ZWN0aXZpdHlNYW5hZ2VyIGNvbm5lY3Rpdml0eU1hbmFnZXI7Ci0KLSAgICBDb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5h
Z2VyID0KLSAgICAgICAgICAoQ29ubmVjdGl2aXR5TWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1T
ZXJ2aWNlKENvbnRleHQuQ09OTkVDVElWSVRZX1NFUlZJQ0UpOwotICAgIH0KLQotICAgIC8vIEZv
ciB0ZXN0aW5nLgotICAgIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSgpIHsKLSAgICAgIC8v
IEFsbCB0aGUgbWV0aG9kcyBiZWxvdyBzaG91bGQgYmUgb3ZlcnJpZGRlbi4KLSAgICAgIGNvbm5l
Y3Rpdml0eU1hbmFnZXIgPSBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMg
Y29ubmVjdGlvbiB0eXBlIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQK
LSAgICAgKiBkZWZhdWx0IG5ldHdvcmsuCi0gICAgICovCi0gICAgTmV0d29ya1N0YXRlIGdldE5l
dHdvcmtTdGF0ZSgpIHsKLSAgICAgIGlmIChjb25uZWN0aXZpdHlNYW5hZ2VyID09IG51bGwpIHsK
LSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUoZmFsc2UsIC0xLCAtMSk7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gZ2V0TmV0d29ya1N0YXRlKGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0QWN0
aXZlTmV0d29ya0luZm8oKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBjb25u
ZWN0aW9uIHR5cGUgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB8bmV0d29ya3wuCi0gICAg
ICogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuCi0gICAgICov
Ci0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBOZXR3b3JrU3RhdGUgZ2V0TmV0d29y
a1N0YXRlKE5ldHdvcmsgbmV0d29yaykgewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXIg
PT0gbnVsbCkgewotICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwgLTEsIC0x
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBnZXROZXR3b3JrU3RhdGUoY29ubmVjdGl2aXR5TWFu
YWdlci5nZXROZXR3b3JrSW5mbyhuZXR3b3JrKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICog
UmV0dXJucyBjb25uZWN0aW9uIHR5cGUgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiBnbGVhbmVkIGZy
b20gbmV0d29ya0luZm8uCi0gICAgICovCi0gICAgTmV0d29ya1N0YXRlIGdldE5ldHdvcmtTdGF0
ZShOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbykgewotICAgICAgaWYgKG5ldHdvcmtJbmZvID09IG51
bGwgfHwgIW5ldHdvcmtJbmZvLmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBO
ZXR3b3JrU3RhdGUoZmFsc2UsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3IE5l
dHdvcmtTdGF0ZSh0cnVlLCBuZXR3b3JrSW5mby5nZXRUeXBlKCksIG5ldHdvcmtJbmZvLmdldFN1
YnR5cGUoKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbGwgY29ubmVjdGVk
IG5ldHdvcmtzLgotICAgICAqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJl
bGVhc2VzLgotICAgICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgTmV0d29y
a1tdIGdldEFsbE5ldHdvcmtzKCkgewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXIgPT0g
bnVsbCkgewotICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtbMF07Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gY29ubmVjdGl2aXR5TWFuYWdlci5nZXRBbGxOZXR3b3JrcygpOwotICAgIH0KLQotICAg
IExpc3Q8TmV0d29ya0luZm9ybWF0aW9uPiBnZXRBY3RpdmVOZXR3b3JrTGlzdCgpIHsKLSAgICAg
IGlmICghc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgfQotICAgICAgQXJyYXlMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4gbmV0SW5mb0xpc3Qg
PSBuZXcgQXJyYXlMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4oKTsKLSAgICAgIGZvciAoTmV0d29y
ayBuZXR3b3JrIDogZ2V0QWxsTmV0d29ya3MoKSkgewotICAgICAgICBOZXR3b3JrSW5mb3JtYXRp
b24gaW5mbyA9IG5ldHdvcmtUb0luZm8obmV0d29yayk7Ci0gICAgICAgIGlmIChpbmZvICE9IG51
bGwpIHsKLSAgICAgICAgICBuZXRJbmZvTGlzdC5hZGQoaW5mbyk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICAgIHJldHVybiBuZXRJbmZvTGlzdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBS
ZXR1cm5zIHRoZSBOZXRJRCBvZiB0aGUgY3VycmVudCBkZWZhdWx0IG5ldHdvcmsuIFJldHVybnMK
LSAgICAgKiBJTlZBTElEX05FVF9JRCBpZiBubyBjdXJyZW50IGRlZmF1bHQgbmV0d29yayBjb25u
ZWN0ZWQuCi0gICAgICogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFz
ZXMuCi0gICAgICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBsb25nIGdldERl
ZmF1bHROZXRJZCgpIHsKLSAgICAgIGlmICghc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0g
ICAgICAgIHJldHVybiBJTlZBTElEX05FVF9JRDsKLSAgICAgIH0KLSAgICAgIC8vIEFuZHJvaWQg
TG9sbGlwb3AgaGFkIG5vIEFQSSB0byBnZXQgdGhlIGRlZmF1bHQgbmV0d29yazsgb25seSBhbgot
ICAgICAgLy8gQVBJIHRvIHJldHVybiB0aGUgTmV0d29ya0luZm8gZm9yIHRoZSBkZWZhdWx0IG5l
dHdvcmsuIFRvCi0gICAgICAvLyBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgbmV0d29yayBvbmUgY2Fu
IGZpbmQgdGhlIG5ldHdvcmsgd2l0aAotICAgICAgLy8gdHlwZSBtYXRjaGluZyB0aGF0IG9mIHRo
ZSBkZWZhdWx0IG5ldHdvcmsuCi0gICAgICBmaW5hbCBOZXR3b3JrSW5mbyBkZWZhdWx0TmV0d29y
a0luZm8gPSBjb25uZWN0aXZpdHlNYW5hZ2VyLmdldEFjdGl2ZU5ldHdvcmtJbmZvKCk7Ci0gICAg
ICBpZiAoZGVmYXVsdE5ldHdvcmtJbmZvID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIElOVkFM
SURfTkVUX0lEOwotICAgICAgfQotICAgICAgZmluYWwgTmV0d29ya1tdIG5ldHdvcmtzID0gZ2V0
QWxsTmV0d29ya3MoKTsKLSAgICAgIGxvbmcgZGVmYXVsdE5ldElkID0gSU5WQUxJRF9ORVRfSUQ7
Ci0gICAgICBmb3IgKE5ldHdvcmsgbmV0d29yayA6IG5ldHdvcmtzKSB7Ci0gICAgICAgIGlmICgh
aGFzSW50ZXJuZXRDYXBhYmlsaXR5KG5ldHdvcmspKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgZmluYWwgTmV0d29ya0luZm8gbmV0d29ya0luZm8gPSBjb25uZWN0
aXZpdHlNYW5hZ2VyLmdldE5ldHdvcmtJbmZvKG5ldHdvcmspOwotICAgICAgICBpZiAobmV0d29y
a0luZm8gIT0gbnVsbCAmJiBuZXR3b3JrSW5mby5nZXRUeXBlKCkgPT0gZGVmYXVsdE5ldHdvcmtJ
bmZvLmdldFR5cGUoKSkgewotICAgICAgICAgIC8vIFRoZXJlIHNob3VsZCBub3QgYmUgbXVsdGlw
bGUgY29ubmVjdGVkIG5ldHdvcmtzIG9mIHRoZQotICAgICAgICAgIC8vIHNhbWUgdHlwZS4gQXQg
bGVhc3QgYXMgb2YgQW5kcm9pZCBNYXJzaG1hbGxvdyB0aGlzIGlzCi0gICAgICAgICAgLy8gbm90
IHN1cHBvcnRlZC4gSWYgdGhpcyBiZWNvbWVzIHN1cHBvcnRlZCB0aGlzIGFzc2VydGlvbgotICAg
ICAgICAgIC8vIG1heSB0cmlnZ2VyLiBBdCB0aGF0IHBvaW50IHdlIGNvdWxkIGNvbnNpZGVyIHVz
aW5nCi0gICAgICAgICAgLy8gQ29ubmVjdGl2aXR5TWFuYWdlci5nZXREZWZhdWx0TmV0d29yaygp
IHRob3VnaCB0aGlzCi0gICAgICAgICAgLy8gbWF5IGdpdmUgY29uZnVzaW5nIHJlc3VsdHMgd2l0
aCBWUE5zIGFuZCBpcyBvbmx5Ci0gICAgICAgICAgLy8gYXZhaWxhYmxlIHdpdGggQW5kcm9pZCBN
YXJzaG1hbGxvdy4KLSAgICAgICAgICBhc3NlcnQgZGVmYXVsdE5ldElkID09IElOVkFMSURfTkVU
X0lEOwotICAgICAgICAgIGRlZmF1bHROZXRJZCA9IG5ldHdvcmtUb05ldElkKG5ldHdvcmspOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZGVmYXVsdE5ldElkOwotICAgIH0KLQot
ICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgcHJpdmF0ZSBOZXR3b3JrSW5mb3JtYXRp
b24gbmV0d29ya1RvSW5mbyhOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIExpbmtQcm9wZXJ0aWVz
IGxpbmtQcm9wZXJ0aWVzID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXRMaW5rUHJvcGVydGllcyhu
ZXR3b3JrKTsKLSAgICAgIC8vIGdldExpbmtQcm9wZXJ0aWVzIHdpbGwgcmV0dXJuIG51bGwgaWYg
dGhlIG5ldHdvcmsgaXMgdW5rbm93bi4KLSAgICAgIGlmIChsaW5rUHJvcGVydGllcyA9PSBudWxs
KSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJEZXRlY3RlZCB1bmtub3duIG5ldHdvcms6ICIg
KyBuZXR3b3JrLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAg
ICAgIGlmIChsaW5rUHJvcGVydGllcy5nZXRJbnRlcmZhY2VOYW1lKCkgPT0gbnVsbCkgewotICAg
ICAgICBMb2dnaW5nLncoVEFHLCAiTnVsbCBpbnRlcmZhY2UgbmFtZSBmb3IgbmV0d29yayAiICsg
bmV0d29yay50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAg
ICAgIE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUgPSBnZXROZXR3b3JrU3RhdGUobmV0d29yayk7
Ci0gICAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBl
KG5ldHdvcmtTdGF0ZSk7Ci0gICAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gQ29ubmVjdGlvblR5
cGUuQ09OTkVDVElPTl9OT05FKSB7Ci0gICAgICAgIC8vIFRoaXMgbWF5IG5vdCBiZSBhbiBlcnJv
ci4gVGhlIE9TIG1heSBzaWduYWwgYSBuZXR3b3JrIGV2ZW50IHdpdGggY29ubmVjdGlvbiB0eXBl
Ci0gICAgICAgIC8vIE5PTkUgd2hlbiB0aGUgbmV0d29yayBkaXNjb25uZWN0cy4KLSAgICAgICAg
TG9nZ2luZy5kKFRBRywgIk5ldHdvcmsgIiArIG5ldHdvcmsudG9TdHJpbmcoKSArICIgaXMgZGlz
Y29ubmVjdGVkIik7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotCi0gICAgICAvLyBT
b21lIGFuZHJvaWQgZGV2aWNlIG1heSByZXR1cm4gYSBDT05ORUNUSU9OX1VOS05PV05fQ0VMTFVM
QVIgb3IgQ09OTkVDVElPTl9VTktOT1dOIHR5cGUsCi0gICAgICAvLyB3aGljaCBhcHBlYXJzIHRv
IGJlIHVzYWJsZS4gSnVzdCBsb2cgdGhlbSBoZXJlLgotICAgICAgaWYgKGNvbm5lY3Rpb25UeXBl
ID09IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTgotICAgICAgICAgIHx8IGNvbm5l
Y3Rpb25UeXBlID09IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTl9DRUxMVUxBUikg
ewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTmV0d29yayAiICsgbmV0d29yay50b1N0cmluZygp
ICsgIiBjb25uZWN0aW9uIHR5cGUgaXMgIiArIGNvbm5lY3Rpb25UeXBlCi0gICAgICAgICAgICAg
ICAgKyAiIGJlY2F1c2UgaXQgaGFzIHR5cGUgIiArIG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrVHlw
ZSgpICsgIiBhbmQgc3VidHlwZSAiCi0gICAgICAgICAgICAgICAgKyBuZXR3b3JrU3RhdGUuZ2V0
TmV0d29ya1N1YlR5cGUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIE5ldHdvcmtJbmZvcm1hdGlvbiBu
ZXR3b3JrSW5mb3JtYXRpb24gPQotICAgICAgICAgIG5ldyBOZXR3b3JrSW5mb3JtYXRpb24obGlu
a1Byb3BlcnRpZXMuZ2V0SW50ZXJmYWNlTmFtZSgpLCBjb25uZWN0aW9uVHlwZSwKLSAgICAgICAg
ICAgICAgbmV0d29ya1RvTmV0SWQobmV0d29yayksIGdldElQQWRkcmVzc2VzKGxpbmtQcm9wZXJ0
aWVzKSk7Ci0gICAgICByZXR1cm4gbmV0d29ya0luZm9ybWF0aW9uOwotICAgIH0KLQotICAgIC8q
KgotICAgICAqIFJldHVybnMgdHJ1ZSBpZiB7QGNvZGUgbmV0d29ya30gY2FuIHByb3ZpZGUgSW50
ZXJuZXQgYWNjZXNzLiBDYW4gYmUgdXNlZCB0bwotICAgICAqIGlnbm9yZSBzcGVjaWFsaXplZCBu
ZXR3b3JrcyAoZS5nLiBJTVMsIEZPVEEpLgotICAgICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5l
d0FwaSIpCi0gICAgYm9vbGVhbiBoYXNJbnRlcm5ldENhcGFiaWxpdHkoTmV0d29yayBuZXR3b3Jr
KSB7Ci0gICAgICBpZiAoY29ubmVjdGl2aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZpbmFsIE5ldHdvcmtDYXBhYmlsaXRpZXMgY2Fw
YWJpbGl0aWVzID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXROZXR3b3JrQ2FwYWJpbGl0aWVzKG5l
dHdvcmspOwotICAgICAgcmV0dXJuIGNhcGFiaWxpdGllcyAhPSBudWxsICYmIGNhcGFiaWxpdGll
cy5oYXNDYXBhYmlsaXR5KE5FVF9DQVBBQklMSVRZX0lOVEVSTkVUKTsKLSAgICB9Ci0KLSAgICAv
KiogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuICovCi0gICAg
QFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBwdWJsaWMgdm9pZCByZWdpc3Rlck5ldHdvcmtD
YWxsYmFjayhOZXR3b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0gICAgICBjb25uZWN0
aXZpdHlNYW5hZ2VyLnJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKAotICAgICAgICAgIG5ldyBOZXR3
b3JrUmVxdWVzdC5CdWlsZGVyKCkuYWRkQ2FwYWJpbGl0eShORVRfQ0FQQUJJTElUWV9JTlRFUk5F
VCkuYnVpbGQoKSwKLSAgICAgICAgICBuZXR3b3JrQ2FsbGJhY2spOwotICAgIH0KLQotICAgIC8q
KiBPbmx5IGNhbGxhYmxlIG9uIExvbGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcy4gKi8KLSAgICBA
U3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RNb2JpbGVOZXR3
b3JrKE5ldHdvcmtDYWxsYmFjayBuZXR3b3JrQ2FsbGJhY2spIHsKLSAgICAgIE5ldHdvcmtSZXF1
ZXN0LkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBOZXR3b3JrUmVxdWVzdC5CdWlsZGVyKCk7Ci0gICAg
ICBidWlsZGVyLmFkZENhcGFiaWxpdHkoTkVUX0NBUEFCSUxJVFlfSU5URVJORVQpLmFkZFRyYW5z
cG9ydFR5cGUoVFJBTlNQT1JUX0NFTExVTEFSKTsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXIu
cmVxdWVzdE5ldHdvcmsoYnVpbGRlci5idWlsZCgpLCBuZXR3b3JrQ2FsbGJhY2spOwotICAgIH0K
LQotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgSVBBZGRyZXNzW10gZ2V0SVBBZGRy
ZXNzZXMoTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMpIHsKLSAgICAgIElQQWRkcmVzc1td
IGlwQWRkcmVzc2VzID0gbmV3IElQQWRkcmVzc1tsaW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVz
c2VzKCkuc2l6ZSgpXTsKLSAgICAgIGludCBpID0gMDsKLSAgICAgIGZvciAoTGlua0FkZHJlc3Mg
bGlua0FkZHJlc3MgOiBsaW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkpIHsKLSAgICAg
ICAgaXBBZGRyZXNzZXNbaV0gPSBuZXcgSVBBZGRyZXNzKGxpbmtBZGRyZXNzLmdldEFkZHJlc3Mo
KS5nZXRBZGRyZXNzKCkpOwotICAgICAgICArK2k7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaXBB
ZGRyZXNzZXM7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBwdWJs
aWMgdm9pZCByZWxlYXNlQ2FsbGJhY2soTmV0d29ya0NhbGxiYWNrIG5ldHdvcmtDYWxsYmFjaykg
ewotICAgICAgaWYgKHN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKSkgewotICAgICAgICBMb2dnaW5n
LmQoVEFHLCAiVW5yZWdpc3RlciBuZXR3b3JrIGNhbGxiYWNrIik7Ci0gICAgICAgIGNvbm5lY3Rp
dml0eU1hbmFnZXIudW5yZWdpc3Rlck5ldHdvcmtDYWxsYmFjayhuZXR3b3JrQ2FsbGJhY2spOwot
ICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnROZXR3b3JrQ2FsbGJh
Y2soKSB7Ci0gICAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJ
T05fQ09ERVMuTE9MTElQT1AgJiYgY29ubmVjdGl2aXR5TWFuYWdlciAhPSBudWxsOwotICAgIH0K
LSAgfQotCi0gIC8qKiBRdWVyaWVzIHRoZSBXaWZpTWFuYWdlciBmb3IgU1NJRCBvZiB0aGUgY3Vy
cmVudCBXaWZpIGNvbm5lY3Rpb24uICovCi0gIHN0YXRpYyBjbGFzcyBXaWZpTWFuYWdlckRlbGVn
YXRlIHsKLSAgICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgICBXaWZpTWFuYWdl
ckRlbGVnYXRlKENvbnRleHQgY29udGV4dCkgewotICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4
dDsKLSAgICB9Ci0KLSAgICAvLyBGb3IgdGVzdGluZy4KLSAgICBXaWZpTWFuYWdlckRlbGVnYXRl
KCkgewotICAgICAgLy8gQWxsIHRoZSBtZXRob2RzIGJlbG93IHNob3VsZCBiZSBvdmVycmlkZGVu
LgotICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgfQotCi0gICAgU3RyaW5nIGdldFdpZmlTU0lE
KCkgewotICAgICAgZmluYWwgSW50ZW50IGludGVudCA9IGNvbnRleHQucmVnaXN0ZXJSZWNlaXZl
cigKLSAgICAgICAgICBudWxsLCBuZXcgSW50ZW50RmlsdGVyKFdpZmlNYW5hZ2VyLk5FVFdPUktf
U1RBVEVfQ0hBTkdFRF9BQ1RJT04pKTsKLSAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCkgewotICAg
ICAgICBmaW5hbCBXaWZpSW5mbyB3aWZpSW5mbyA9IGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEo
V2lmaU1hbmFnZXIuRVhUUkFfV0lGSV9JTkZPKTsKLSAgICAgICAgaWYgKHdpZmlJbmZvICE9IG51
bGwpIHsKLSAgICAgICAgICBmaW5hbCBTdHJpbmcgc3NpZCA9IHdpZmlJbmZvLmdldFNTSUQoKTsK
LSAgICAgICAgICBpZiAoc3NpZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3NpZDsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiAiIjsKLSAgICB9
Ci0gIH0KLQotICBzdGF0aWMgZmluYWwgbG9uZyBJTlZBTElEX05FVF9JRCA9IC0xOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCI7
Ci0KLSAgLy8gT2JzZXJ2ZXIgZm9yIHRoZSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlLgotICBwcml2
YXRlIGZpbmFsIE9ic2VydmVyIG9ic2VydmVyOwotICBwcml2YXRlIGZpbmFsIEludGVudEZpbHRl
ciBpbnRlbnRGaWx0ZXI7Ci0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotICAvLyBV
c2VkIHRvIHJlcXVlc3QgbW9iaWxlIG5ldHdvcmsuIEl0IGRvZXMgbm90IGRvIGFueXRoaW5nIGV4
Y2VwdCBmb3Iga2VlcGluZwotICAvLyB0aGUgY2FsbGJhY2sgZm9yIHJlbGVhc2luZyB0aGUgcmVx
dWVzdC4KLSAgcHJpdmF0ZSBmaW5hbCBOZXR3b3JrQ2FsbGJhY2sgbW9iaWxlTmV0d29ya0NhbGxi
YWNrOwotICAvLyBVc2VkIHRvIHJlY2VpdmUgdXBkYXRlcyBvbiBhbGwgbmV0d29ya3MuCi0gIHBy
aXZhdGUgZmluYWwgTmV0d29ya0NhbGxiYWNrIGFsbE5ldHdvcmtDYWxsYmFjazsKLSAgLy8gY29u
bmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGFuZCB3aWZpTWFuYWdlckRlbGVnYXRlIGFyZSBvbmx5
IG5vbi1maW5hbCBmb3IgdGVzdGluZy4KLSAgcHJpdmF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyRGVs
ZWdhdGUgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlOwotICBwcml2YXRlIFdpZmlNYW5hZ2Vy
RGVsZWdhdGUgd2lmaU1hbmFnZXJEZWxlZ2F0ZTsKLQotICBwcml2YXRlIGJvb2xlYW4gaXNSZWdp
c3RlcmVkOwotICBwcml2YXRlIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlOwotICBwcml2
YXRlIFN0cmluZyB3aWZpU1NJRDsKLQotICAvKioKLSAgICogT2JzZXJ2ZXIgaW50ZXJmYWNlIGJ5
IHdoaWNoIG9ic2VydmVyIGlzIG5vdGlmaWVkIG9mIG5ldHdvcmsgY2hhbmdlcy4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE9ic2VydmVyIHsKLSAgICAvKioKLSAgICAgKiBDYWxs
ZWQgd2hlbiBkZWZhdWx0IG5ldHdvcmsgY2hhbmdlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9p
ZCBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlw
ZSk7Ci0gICAgcHVibGljIHZvaWQgb25OZXR3b3JrQ29ubmVjdChOZXR3b3JrSW5mb3JtYXRpb24g
bmV0d29ya0luZm8pOwotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBu
ZXR3b3JrSGFuZGxlKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgTmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0LiBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gVUkgdGhyZWFkLgotICAg
Ki8KLSAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgcHVibGljIE5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdChPYnNlcnZlciBvYnNlcnZlciwgQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgdGhpcy5v
YnNlcnZlciA9IG9ic2VydmVyOwotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgY29u
bmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlID0gbmV3IENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZShjb250ZXh0KTsKLSAgICB3aWZpTWFuYWdlckRlbGVnYXRlID0gbmV3IFdpZmlNYW5hZ2VyRGVs
ZWdhdGUoY29udGV4dCk7Ci0KLSAgICBmaW5hbCBOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0g
Y29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLmdldE5ldHdvcmtTdGF0ZSgpOwotICAgIGNvbm5l
Y3Rpb25UeXBlID0gZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRlKTsKLSAgICB3aWZpU1NJ
RCA9IGdldFdpZmlTU0lEKG5ldHdvcmtTdGF0ZSk7Ci0gICAgaW50ZW50RmlsdGVyID0gbmV3IElu
dGVudEZpbHRlcihDb25uZWN0aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9BQ1RJT04pOwotCi0g
ICAgcmVnaXN0ZXJSZWNlaXZlcigpOwotICAgIGlmIChjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdh
dGUuc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAvLyBPbiBBbmRyb2lkIDYuMC4w
LCB0aGUgV1JJVEVfU0VUVElOR1MgcGVybWlzc2lvbiBpcyBuZWNlc3NhcnkgZm9yCi0gICAgICAv
LyByZXF1ZXN0TmV0d29yaywgc28gaXQgd2lsbCBmYWlsLiBUaGlzIHdhcyBmaXhlZCBpbiBBbmRy
b2lkIDYuMC4xLgotICAgICAgTmV0d29ya0NhbGxiYWNrIHRlbXBOZXR3b3JrQ2FsbGJhY2sgPSBu
ZXcgTmV0d29ya0NhbGxiYWNrKCk7Ci0gICAgICB0cnkgewotICAgICAgICBjb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUucmVxdWVzdE1vYmlsZU5ldHdvcmsodGVtcE5ldHdvcmtDYWxsYmFjayk7
Ci0gICAgICB9IGNhdGNoIChqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb24gZSkgewotICAgICAg
ICBMb2dnaW5nLncoVEFHLCAiVW5hYmxlIHRvIG9idGFpbiBwZXJtaXNzaW9uIHRvIHJlcXVlc3Qg
YSBjZWxsdWxhciBuZXR3b3JrLiIpOwotICAgICAgICB0ZW1wTmV0d29ya0NhbGxiYWNrID0gbnVs
bDsKLSAgICAgIH0KLSAgICAgIG1vYmlsZU5ldHdvcmtDYWxsYmFjayA9IHRlbXBOZXR3b3JrQ2Fs
bGJhY2s7Ci0gICAgICBhbGxOZXR3b3JrQ2FsbGJhY2sgPSBuZXcgU2ltcGxlTmV0d29ya0NhbGxi
YWNrKCk7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUucmVnaXN0ZXJOZXR3b3Jr
Q2FsbGJhY2soYWxsTmV0d29ya0NhbGxiYWNrKTsKLSAgICB9IGVsc2UgewotICAgICAgbW9iaWxl
TmV0d29ya0NhbGxiYWNrID0gbnVsbDsKLSAgICAgIGFsbE5ldHdvcmtDYWxsYmFjayA9IG51bGw7
Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFsbG93cyBvdmVycmlkaW5nIHRoZSBDb25uZWN0
aXZpdHlNYW5hZ2VyRGVsZWdhdGUgZm9yIHRlc3RzLgotICAgKi8KLSAgdm9pZCBzZXRDb25uZWN0
aXZpdHlNYW5hZ2VyRGVsZWdhdGVGb3JUZXN0cyhDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUg
ZGVsZWdhdGUpIHsKLSAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgPSBkZWxlZ2F0ZTsK
LSAgfQotCi0gIC8qKgotICAgKiBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgV2lmaU1hbmFnZXJEZWxl
Z2F0ZSBmb3IgdGVzdHMuCi0gICAqLwotICB2b2lkIHNldFdpZmlNYW5hZ2VyRGVsZWdhdGVGb3JU
ZXN0cyhXaWZpTWFuYWdlckRlbGVnYXRlIGRlbGVnYXRlKSB7Ci0gICAgd2lmaU1hbmFnZXJEZWxl
Z2F0ZSA9IGRlbGVnYXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGUg
b2JqZWN0IGhhcyByZWdpc3RlcmVkIHRvIHJlY2VpdmUgbmV0d29yayBjb25uZWN0aXZpdHkgaW50
ZW50cy4KLSAgICogVmlzaWJsZSBmb3IgdGVzdGluZy4KLSAgICovCi0gIGJvb2xlYW4gaXNSZWNl
aXZlclJlZ2lzdGVyZWRGb3JUZXN0aW5nKCkgewotICAgIHJldHVybiBpc1JlZ2lzdGVyZWQ7Ci0g
IH0KLQotICBMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4gZ2V0QWN0aXZlTmV0d29ya0xpc3QoKSB7
Ci0gICAgcmV0dXJuIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5nZXRBY3RpdmVOZXR3b3Jr
TGlzdCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICBpZiAoYWxsTmV0
d29ya0NhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZS5yZWxlYXNlQ2FsbGJhY2soYWxsTmV0d29ya0NhbGxiYWNrKTsKLSAgICB9Ci0gICAgaWYgKG1v
YmlsZU5ldHdvcmtDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2Vy
RGVsZWdhdGUucmVsZWFzZUNhbGxiYWNrKG1vYmlsZU5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfQot
ICAgIHVucmVnaXN0ZXJSZWNlaXZlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVycyBh
IEJyb2FkY2FzdFJlY2VpdmVyIGluIHRoZSBnaXZlbiBjb250ZXh0LgotICAgKi8KLSAgcHJpdmF0
ZSB2b2lkIHJlZ2lzdGVyUmVjZWl2ZXIoKSB7Ci0gICAgaWYgKGlzUmVnaXN0ZXJlZCkKLSAgICAg
IHJldHVybjsKLQotICAgIGlzUmVnaXN0ZXJlZCA9IHRydWU7Ci0gICAgY29udGV4dC5yZWdpc3Rl
clJlY2VpdmVyKHRoaXMsIGludGVudEZpbHRlcik7Ci0gIH0KLQotICAvKioKLSAgICogVW5yZWdp
c3RlcnMgdGhlIEJyb2FkY2FzdFJlY2VpdmVyIGluIHRoZSBnaXZlbiBjb250ZXh0LgotICAgKi8K
LSAgcHJpdmF0ZSB2b2lkIHVucmVnaXN0ZXJSZWNlaXZlcigpIHsKLSAgICBpZiAoIWlzUmVnaXN0
ZXJlZCkKLSAgICAgIHJldHVybjsKLQotICAgIGlzUmVnaXN0ZXJlZCA9IGZhbHNlOwotICAgIGNv
bnRleHQudW5yZWdpc3RlclJlY2VpdmVyKHRoaXMpOwotICB9Ci0KLSAgcHVibGljIE5ldHdvcmtT
dGF0ZSBnZXRDdXJyZW50TmV0d29ya1N0YXRlKCkgewotICAgIHJldHVybiBjb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUuZ2V0TmV0d29ya1N0YXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0
dXJucyBOZXRJRCBvZiBkZXZpY2UncyBjdXJyZW50IGRlZmF1bHQgY29ubmVjdGVkIG5ldHdvcmsg
dXNlZCBmb3IKLSAgICogY29tbXVuaWNhdGlvbi4KLSAgICogT25seSBpbXBsZW1lbnRlZCBvbiBM
b2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMsIHJldHVybnMgSU5WQUxJRF9ORVRfSUQKLSAgICog
d2hlbiBub3QgaW1wbGVtZW50ZWQuCi0gICAqLwotICBwdWJsaWMgbG9uZyBnZXREZWZhdWx0TmV0
SWQoKSB7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5nZXREZWZhdWx0
TmV0SWQoKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgQ29ubmVjdGlvblR5cGUgZ2V0Q29ubmVj
dGlvblR5cGUoTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSkgewotICAgIGlmICghbmV0d29ya1N0
YXRlLmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNU
SU9OX05PTkU7Ci0gICAgfQotCi0gICAgc3dpdGNoIChuZXR3b3JrU3RhdGUuZ2V0TmV0d29ya1R5
cGUoKSkgewotICAgICAgY2FzZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfRVRIRVJORVQ6Ci0g
ICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX0VUSEVSTkVUOwotICAgICAg
Y2FzZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSToKLSAgICAgICAgcmV0dXJuIENvbm5l
Y3Rpb25UeXBlLkNPTk5FQ1RJT05fV0lGSTsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdl
ci5UWVBFX1dJTUFYOgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl80
RzsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX0JMVUVUT09USDoKLSAgICAg
ICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fQkxVRVRPT1RIOwotICAgICAgY2Fz
ZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfTU9CSUxFOgotICAgICAgICAvLyBVc2UgaW5mb3Jt
YXRpb24gZnJvbSBUZWxlcGhvbnlNYW5hZ2VyIHRvIGNsYXNzaWZ5IHRoZSBjb25uZWN0aW9uLgot
ICAgICAgICBzd2l0Y2ggKG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrU3ViVHlwZSgpKSB7Ci0gICAg
ICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9HUFJTOgotICAgICAgICAg
IGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfRURHRToKLSAgICAgICAgICBjYXNl
IFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0NETUE6Ci0gICAgICAgICAgY2FzZSBUZWxl
cGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV8xeFJUVDoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9u
eU1hbmFnZXIuTkVUV09SS19UWVBFX0lERU46Ci0gICAgICAgICAgICByZXR1cm4gQ29ubmVjdGlv
blR5cGUuQ09OTkVDVElPTl8yRzsKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVU
V09SS19UWVBFX1VNVFM6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktf
VFlQRV9FVkRPXzA6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQ
RV9FVkRPX0E6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9I
U0RQQToKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTVVBB
OgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNQQToKLSAg
ICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fQjoKLSAgICAg
ICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VIUlBEOgotICAgICAgICAg
IGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNQQVA6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl8zRzsKLSAgICAgICAgICBjYXNlIFRlbGVw
aG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0xURToKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0
aW9uVHlwZS5DT05ORUNUSU9OXzRHOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9VTktOT1dOX0NFTExVTEFSOwotICAgICAg
ICB9Ci0gICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVD
VElPTl9VTktOT1dOOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFdpZmlTU0lE
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
c2VJbnQobmV0d29yay50b1N0cmluZygpKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9PV05FUlMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9PV05FUlMJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvT1dORVJTCShub25leGlzdGVudCkKQEAgLTEs
NCArMCwwIEBACi1tYWdqZWRAd2VicnRjLm9yZwotCi1wZXItZmlsZSBDYW1lcmEqPXNha2FsQHdl
YnJ0Yy5vcmcKLXBlci1maWxlIE1ldHJpY3MuamF2YT1zYWthbEB3ZWJydGMub3JnCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMTYg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0Owot
aW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEphdmEtbGFuZCB2ZXJzaW9uIG9mIHRo
ZSBQZWVyQ29ubmVjdGlvbiBBUElzOyB3cmFwcyB0aGUgQysrIEFQSQotICogaHR0cDovL3d3dy53
ZWJydGMub3JnL3JlZmVyZW5jZS9uYXRpdmUtYXBpcywgd2hpY2ggaW4gdHVybiBpcyBpbnNwaXJl
ZCBieSB0aGUKLSAqIEpTIEFQSXM6IGh0dHA6Ly9kZXYudzMub3JnLzIwMTEvd2VicnRjL2VkaXRv
ci93ZWJydGMuaHRtbCBhbmQKLSAqIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhY2FwdHVyZS1z
dHJlYW1zLwotICovCi1wdWJsaWMgY2xhc3MgUGVlckNvbm5lY3Rpb24gewotICBzdGF0aWMgewot
ICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiamluZ2xlX3BlZXJjb25uZWN0aW9uX3NvIik7Ci0gIH0K
LQotICAvKiogVHJhY2tzIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VHYXRoZXJpbmdTdGF0
ZSAqLwotICBwdWJsaWMgZW51bSBJY2VHYXRoZXJpbmdTdGF0ZSB7IE5FVywgR0FUSEVSSU5HLCBD
T01QTEVURSB9Ci0KLSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6SWNlQ29u
bmVjdGlvblN0YXRlICovCi0gIHB1YmxpYyBlbnVtIEljZUNvbm5lY3Rpb25TdGF0ZSB7Ci0gICAg
TkVXLAotICAgIENIRUNLSU5HLAotICAgIENPTk5FQ1RFRCwKLSAgICBDT01QTEVURUQsCi0gICAg
RkFJTEVELAotICAgIERJU0NPTk5FQ1RFRCwKLSAgICBDTE9TRUQKLSAgfQotCi0gIC8qKiBUcmFj
a3MgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlNpZ25hbGluZ1N0YXRlICovCi0gIHB1YmxpYyBl
bnVtIFNpZ25hbGluZ1N0YXRlIHsKLSAgICBTVEFCTEUsCi0gICAgSEFWRV9MT0NBTF9PRkZFUiwK
LSAgICBIQVZFX0xPQ0FMX1BSQU5TV0VSLAotICAgIEhBVkVfUkVNT1RFX09GRkVSLAotICAgIEhB
VkVfUkVNT1RFX1BSQU5TV0VSLAotICAgIENMT1NFRAotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lv
biBvZiBQZWVyQ29ubmVjdGlvbk9ic2VydmVyLiAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFj
ZSBPYnNlcnZlciB7Ci0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHRoZSBTaWduYWxpbmdTdGF0ZSBj
aGFuZ2VzLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uU2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0
YXRlIG5ld1N0YXRlKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgSWNlQ29ubmVjdGlv
blN0YXRlIGNoYW5nZXMuICovCi0gICAgcHVibGljIHZvaWQgb25JY2VDb25uZWN0aW9uQ2hhbmdl
KEljZUNvbm5lY3Rpb25TdGF0ZSBuZXdTdGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4g
dGhlIElDRSBjb25uZWN0aW9uIHJlY2VpdmluZyBzdGF0dXMgY2hhbmdlcy4gKi8KLSAgICBwdWJs
aWMgdm9pZCBvbkljZUNvbm5lY3Rpb25SZWNlaXZpbmdDaGFuZ2UoYm9vbGVhbiByZWNlaXZpbmcp
OwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHRoZSBJY2VHYXRoZXJpbmdTdGF0ZSBjaGFuZ2Vz
LiAqLwotICAgIHB1YmxpYyB2b2lkIG9uSWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0
YXRlIG5ld1N0YXRlKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiBhIG5ldyBJQ0UgY2FuZGlk
YXRlIGhhcyBiZWVuIGZvdW5kLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlKElj
ZUNhbmRpZGF0ZSBjYW5kaWRhdGUpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHNvbWUgSUNF
IGNhbmRpZGF0ZXMgaGF2ZSBiZWVuIHJlbW92ZWQuICovCi0gICAgcHVibGljIHZvaWQgb25JY2VD
YW5kaWRhdGVzUmVtb3ZlZChJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKTsKLQotICAgIC8qKiBU
cmlnZ2VyZWQgd2hlbiBtZWRpYSBpcyByZWNlaXZlZCBvbiBhIG5ldyBzdHJlYW0gZnJvbSByZW1v
dGUgcGVlci4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkFkZFN0cmVhbShNZWRpYVN0cmVhbSBzdHJl
YW0pOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIGEgcmVtb3RlIHBlZXIgY2xvc2UgYSBzdHJl
YW0uICovCi0gICAgcHVibGljIHZvaWQgb25SZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFt
KTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiBhIHJlbW90ZSBwZWVyIG9wZW5zIGEgRGF0YUNo
YW5uZWwuICovCi0gICAgcHVibGljIHZvaWQgb25EYXRhQ2hhbm5lbChEYXRhQ2hhbm5lbCBkYXRh
Q2hhbm5lbCk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gcmVuZWdvdGlhdGlvbiBpcyBuZWNl
c3NhcnkuICovCi0gICAgcHVibGljIHZvaWQgb25SZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gIH0K
LQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkljZVNlcnZl
ci4gKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJY2VTZXJ2ZXIgewotICAgIHB1YmxpYyBmaW5h
bCBTdHJpbmcgdXJpOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgdXNlcm5hbWU7Ci0gICAgcHVi
bGljIGZpbmFsIFN0cmluZyBwYXNzd29yZDsKLQotICAgIC8qKiBDb252ZW5pZW5jZSBjb25zdHJ1
Y3RvciBmb3IgU1RVTiBzZXJ2ZXJzLiAqLwotICAgIHB1YmxpYyBJY2VTZXJ2ZXIoU3RyaW5nIHVy
aSkgewotICAgICAgdGhpcyh1cmksICIiLCAiIik7Ci0gICAgfQotCi0gICAgcHVibGljIEljZVNl
cnZlcihTdHJpbmcgdXJpLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgewotICAg
ICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAg
ICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0
b1N0cmluZygpIHsKLSAgICAgIHJldHVybiB1cmkgKyAiWyIgKyB1c2VybmFtZSArICI6IiArIHBh
c3N3b3JkICsgIl0iOwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNv
bm5lY3Rpb25JbnRlcmZhY2UuSWNlVHJhbnNwb3J0c1R5cGUgKi8KLSAgcHVibGljIGVudW0gSWNl
VHJhbnNwb3J0c1R5cGUgeyBOT05FLCBSRUxBWSwgTk9IT1NULCBBTEwgfQotCi0gIC8qKiBKYXZh
IHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuQnVuZGxlUG9saWN5ICovCi0gIHB1
YmxpYyBlbnVtIEJ1bmRsZVBvbGljeSB7IEJBTEFOQ0VELCBNQVhCVU5ETEUsIE1BWENPTVBBVCB9
Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5SdGNwTXV4
UG9saWN5ICovCi0gIHB1YmxpYyBlbnVtIFJ0Y3BNdXhQb2xpY3kgeyBORUdPVElBVEUsIFJFUVVJ
UkUgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuVGNw
Q2FuZGlkYXRlUG9saWN5ICovCi0gIHB1YmxpYyBlbnVtIFRjcENhbmRpZGF0ZVBvbGljeSB7IEVO
QUJMRUQsIERJU0FCTEVEIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlLkNhbmRpZGF0ZU5ldHdvcmtQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gQ2FuZGlk
YXRlTmV0d29ya1BvbGljeSB7IEFMTCwgTE9XX0NPU1QgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24g
b2YgcnRjOjpLZXlUeXBlICovCi0gIHB1YmxpYyBlbnVtIEtleVR5cGUgeyBSU0EsIEVDRFNBIH0K
LQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkNvbnRpbnVh
bEdhdGhlcmluZ1BvbGljeSAqLwotICBwdWJsaWMgZW51bSBDb250aW51YWxHYXRoZXJpbmdQb2xp
Y3kgeyBHQVRIRVJfT05DRSwgR0FUSEVSX0NPTlRJTlVBTExZIH0KLQotICAvKiogSmF2YSB2ZXJz
aW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLlJUQ0NvbmZpZ3VyYXRpb24gKi8KLSAgcHVi
bGljIHN0YXRpYyBjbGFzcyBSVENDb25maWd1cmF0aW9uIHsKLSAgICBwdWJsaWMgSWNlVHJhbnNw
b3J0c1R5cGUgaWNlVHJhbnNwb3J0c1R5cGU7Ci0gICAgcHVibGljIExpc3Q8SWNlU2VydmVyPiBp
Y2VTZXJ2ZXJzOwotICAgIHB1YmxpYyBCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5OwotICAgIHB1
YmxpYyBSdGNwTXV4UG9saWN5IHJ0Y3BNdXhQb2xpY3k7Ci0gICAgcHVibGljIFRjcENhbmRpZGF0
ZVBvbGljeSB0Y3BDYW5kaWRhdGVQb2xpY3k7Ci0gICAgcHVibGljIENhbmRpZGF0ZU5ldHdvcmtQ
b2xpY3kgY2FuZGlkYXRlTmV0d29ya1BvbGljeTsKLSAgICBwdWJsaWMgaW50IGF1ZGlvSml0dGVy
QnVmZmVyTWF4UGFja2V0czsKLSAgICBwdWJsaWMgYm9vbGVhbiBhdWRpb0ppdHRlckJ1ZmZlckZh
c3RBY2NlbGVyYXRlOwotICAgIHB1YmxpYyBpbnQgaWNlQ29ubmVjdGlvblJlY2VpdmluZ1RpbWVv
dXQ7Ci0gICAgcHVibGljIGludCBpY2VCYWNrdXBDYW5kaWRhdGVQYWlyUGluZ0ludGVydmFsOwot
ICAgIHB1YmxpYyBLZXlUeXBlIGtleVR5cGU7Ci0gICAgcHVibGljIENvbnRpbnVhbEdhdGhlcmlu
Z1BvbGljeSBjb250aW51YWxHYXRoZXJpbmdQb2xpY3k7Ci0gICAgcHVibGljIGludCBpY2VDYW5k
aWRhdGVQb29sU2l6ZTsKLSAgICBwdWJsaWMgYm9vbGVhbiBwcnVuZVR1cm5Qb3J0czsKLSAgICBw
dWJsaWMgYm9vbGVhbiBwcmVzdW1lV3JpdGFibGVXaGVuRnVsbHlSZWxheWVkOwotCi0gICAgcHVi
bGljIFJUQ0NvbmZpZ3VyYXRpb24oTGlzdDxJY2VTZXJ2ZXI+IGljZVNlcnZlcnMpIHsKLSAgICAg
IGljZVRyYW5zcG9ydHNUeXBlID0gSWNlVHJhbnNwb3J0c1R5cGUuQUxMOwotICAgICAgYnVuZGxl
UG9saWN5ID0gQnVuZGxlUG9saWN5LkJBTEFOQ0VEOwotICAgICAgcnRjcE11eFBvbGljeSA9IFJ0
Y3BNdXhQb2xpY3kuTkVHT1RJQVRFOwotICAgICAgdGNwQ2FuZGlkYXRlUG9saWN5ID0gVGNwQ2Fu
ZGlkYXRlUG9saWN5LkVOQUJMRUQ7Ci0gICAgICBjYW5kaWRhdGVOZXR3b3JrUG9saWN5ID0gY2Fu
ZGlkYXRlTmV0d29ya1BvbGljeS5BTEw7Ci0gICAgICB0aGlzLmljZVNlcnZlcnMgPSBpY2VTZXJ2
ZXJzOwotICAgICAgYXVkaW9KaXR0ZXJCdWZmZXJNYXhQYWNrZXRzID0gNTA7Ci0gICAgICBhdWRp
b0ppdHRlckJ1ZmZlckZhc3RBY2NlbGVyYXRlID0gZmFsc2U7Ci0gICAgICBpY2VDb25uZWN0aW9u
UmVjZWl2aW5nVGltZW91dCA9IC0xOwotICAgICAgaWNlQmFja3VwQ2FuZGlkYXRlUGFpclBpbmdJ
bnRlcnZhbCA9IC0xOwotICAgICAga2V5VHlwZSA9IEtleVR5cGUuRUNEU0E7Ci0gICAgICBjb250
aW51YWxHYXRoZXJpbmdQb2xpY3kgPSBDb250aW51YWxHYXRoZXJpbmdQb2xpY3kuR0FUSEVSX09O
Q0U7Ci0gICAgICBpY2VDYW5kaWRhdGVQb29sU2l6ZSA9IDA7Ci0gICAgICBwcnVuZVR1cm5Qb3J0
cyA9IGZhbHNlOwotICAgICAgcHJlc3VtZVdyaXRhYmxlV2hlbkZ1bGx5UmVsYXllZCA9IGZhbHNl
OwotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIGZpbmFsIExpc3Q8TWVkaWFTdHJlYW0+IGxvY2Fs
U3RyZWFtczsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZVBlZXJDb25uZWN0aW9uOwotICBw
cml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlT2JzZXJ2ZXI7Ci0gIHByaXZhdGUgTGlzdDxSdHBTZW5k
ZXI+IHNlbmRlcnM7Ci0gIHByaXZhdGUgTGlzdDxSdHBSZWNlaXZlcj4gcmVjZWl2ZXJzOwotCi0g
IFBlZXJDb25uZWN0aW9uKGxvbmcgbmF0aXZlUGVlckNvbm5lY3Rpb24sIGxvbmcgbmF0aXZlT2Jz
ZXJ2ZXIpIHsKLSAgICB0aGlzLm5hdGl2ZVBlZXJDb25uZWN0aW9uID0gbmF0aXZlUGVlckNvbm5l
Y3Rpb247Ci0gICAgdGhpcy5uYXRpdmVPYnNlcnZlciA9IG5hdGl2ZU9ic2VydmVyOwotICAgIGxv
Y2FsU3RyZWFtcyA9IG5ldyBMaW5rZWRMaXN0PE1lZGlhU3RyZWFtPigpOwotICAgIHNlbmRlcnMg
PSBuZXcgTGlua2VkTGlzdDxSdHBTZW5kZXI+KCk7Ci0gICAgcmVjZWl2ZXJzID0gbmV3IExpbmtl
ZExpc3Q8UnRwUmVjZWl2ZXI+KCk7Ci0gIH0KLQotICAvLyBKc2VwSW50ZXJmYWNlLgotICBwdWJs
aWMgbmF0aXZlIFNlc3Npb25EZXNjcmlwdGlvbiBnZXRMb2NhbERlc2NyaXB0aW9uKCk7Ci0KLSAg
cHVibGljIG5hdGl2ZSBTZXNzaW9uRGVzY3JpcHRpb24gZ2V0UmVtb3RlRGVzY3JpcHRpb24oKTsK
LQotICBwdWJsaWMgbmF0aXZlIERhdGFDaGFubmVsIGNyZWF0ZURhdGFDaGFubmVsKFN0cmluZyBs
YWJlbCwgRGF0YUNoYW5uZWwuSW5pdCBpbml0KTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgY3Jl
YXRlT2ZmZXIoU2RwT2JzZXJ2ZXIgb2JzZXJ2ZXIsIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWlu
dHMpOwotCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBjcmVhdGVBbnN3ZXIoU2RwT2JzZXJ2ZXIgb2Jz
ZXJ2ZXIsIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMpOwotCi0gIHB1YmxpYyBuYXRpdmUg
dm9pZCBzZXRMb2NhbERlc2NyaXB0aW9uKFNkcE9ic2VydmVyIG9ic2VydmVyLCBTZXNzaW9uRGVz
Y3JpcHRpb24gc2RwKTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgc2V0UmVtb3RlRGVzY3JpcHRp
b24oU2RwT2JzZXJ2ZXIgb2JzZXJ2ZXIsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gIHB1
YmxpYyBuYXRpdmUgYm9vbGVhbiBzZXRDb25maWd1cmF0aW9uKFJUQ0NvbmZpZ3VyYXRpb24gY29u
ZmlnKTsKLQotICBwdWJsaWMgYm9vbGVhbiBhZGRJY2VDYW5kaWRhdGUoSWNlQ2FuZGlkYXRlIGNh
bmRpZGF0ZSkgewotICAgIHJldHVybiBuYXRpdmVBZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlLnNk
cE1pZCwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZS5zZHApOwotICB9Ci0KLSAg
cHVibGljIGJvb2xlYW4gcmVtb3ZlSWNlQ2FuZGlkYXRlcyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBj
YW5kaWRhdGVzKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVJlbW92ZUljZUNhbmRpZGF0ZXMoY2FuZGlk
YXRlcyk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRTdHJlYW0oTWVkaWFTdHJlYW0gc3Ry
ZWFtKSB7Ci0gICAgYm9vbGVhbiByZXQgPSBuYXRpdmVBZGRMb2NhbFN0cmVhbShzdHJlYW0ubmF0
aXZlU3RyZWFtKTsKLSAgICBpZiAoIXJldCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBsb2NhbFN0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCByZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAgbmF0
aXZlUmVtb3ZlTG9jYWxTdHJlYW0oc3RyZWFtLm5hdGl2ZVN0cmVhbSk7Ci0gICAgbG9jYWxTdHJl
YW1zLnJlbW92ZShzdHJlYW0pOwotICB9Ci0KLSAgcHVibGljIFJ0cFNlbmRlciBjcmVhdGVTZW5k
ZXIoU3RyaW5nIGtpbmQsIFN0cmluZyBzdHJlYW1faWQpIHsKLSAgICBSdHBTZW5kZXIgbmV3X3Nl
bmRlciA9IG5hdGl2ZUNyZWF0ZVNlbmRlcihraW5kLCBzdHJlYW1faWQpOwotICAgIGlmIChuZXdf
c2VuZGVyICE9IG51bGwpIHsKLSAgICAgIHNlbmRlcnMuYWRkKG5ld19zZW5kZXIpOwotICAgIH0K
LSAgICByZXR1cm4gbmV3X3NlbmRlcjsKLSAgfQotCi0gIC8vIE5vdGUgdGhhdCBjYWxsaW5nIGdl
dFNlbmRlcnMgd2lsbCBkaXNwb3NlIG9mIHRoZSBzZW5kZXJzIHByZXZpb3VzbHkKLSAgLy8gcmV0
dXJuZWQgKGFuZCBzYW1lIGdvZXMgZm9yIGdldFJlY2VpdmVycykuCi0gIHB1YmxpYyBMaXN0PFJ0
cFNlbmRlcj4gZ2V0U2VuZGVycygpIHsKLSAgICBmb3IgKFJ0cFNlbmRlciBzZW5kZXIgOiBzZW5k
ZXJzKSB7Ci0gICAgICBzZW5kZXIuZGlzcG9zZSgpOwotICAgIH0KLSAgICBzZW5kZXJzID0gbmF0
aXZlR2V0U2VuZGVycygpOwotICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0
KHNlbmRlcnMpOwotICB9Ci0KLSAgcHVibGljIExpc3Q8UnRwUmVjZWl2ZXI+IGdldFJlY2VpdmVy
cygpIHsKLSAgICBmb3IgKFJ0cFJlY2VpdmVyIHJlY2VpdmVyIDogcmVjZWl2ZXJzKSB7Ci0gICAg
ICByZWNlaXZlci5kaXNwb3NlKCk7Ci0gICAgfQotICAgIHJlY2VpdmVycyA9IG5hdGl2ZUdldFJl
Y2VpdmVycygpOwotICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHJlY2Vp
dmVycyk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGF0cyhTdGF0c09ic2VydmVyIG9i
c2VydmVyLCBNZWRpYVN0cmVhbVRyYWNrIHRyYWNrKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldFN0
YXRzKG9ic2VydmVyLCAodHJhY2sgPT0gbnVsbCkgPyAwIDogdHJhY2submF0aXZlVHJhY2spOwot
ICB9Ci0KLSAgLy8gU3RhcnRzIHJlY29yZGluZyBhbiBSVEMgZXZlbnQgbG9nLiBPd25lcnNoaXAg
b2YgdGhlIGZpbGUgaXMgdHJhbnNmZXJlZCB0bwotICAvLyB0aGUgbmF0aXZlIGNvZGUuIElmIGFu
IFJUQyBldmVudCBsb2cgaXMgYWxyZWFkeSBiZWluZyByZWNvcmRlZCwgaXQgd2lsbCBiZQotICAv
LyBzdG9wcGVkIGFuZCBhIG5ldyBvbmUgd2lsbCBzdGFydCB1c2luZyB0aGUgcHJvdmlkZWQgZmls
ZS4gTG9nZ2luZyB3aWxsCi0gIC8vIGNvbnRpbnVlIHVudGlsIHRoZSBzdG9wUnRjRXZlbnRMb2cg
ZnVuY3Rpb24gaXMgY2FsbGVkLiBUaGUgbWF4X3NpemVfYnl0ZXMKLSAgLy8gYXJndW1lbnQgaXMg
aWdub3JlZCwgaXQgaXMgYWRkZWQgZm9yIGZ1dHVyZSB1c2UuCi0gIHB1YmxpYyBib29sZWFuIHN0
YXJ0UnRjRXZlbnRMb2coaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IG1heF9zaXplX2J5dGVzKSB7
Ci0gICAgcmV0dXJuIG5hdGl2ZVN0YXJ0UnRjRXZlbnRMb2coZmlsZV9kZXNjcmlwdG9yLCBtYXhf
c2l6ZV9ieXRlcyk7Ci0gIH0KLQotICAvLyBTdG9wcyByZWNvcmRpbmcgYW4gUlRDIGV2ZW50IGxv
Zy4gSWYgbm8gUlRDIGV2ZW50IGxvZyBpcyBjdXJyZW50bHkgYmVpbmcKLSAgLy8gcmVjb3JkZWQs
IHRoaXMgY2FsbCB3aWxsIGhhdmUgbm8gZWZmZWN0LgotICBwdWJsaWMgdm9pZCBzdG9wUnRjRXZl
bnRMb2coKSB7Ci0gICAgbmF0aXZlU3RvcFJ0Y0V2ZW50TG9nKCk7Ci0gIH0KLQotICAvLyBUT0RP
KGZpc2NobWFuKTogYWRkIHN1cHBvcnQgZm9yIERUTUYtcmVsYXRlZCBtZXRob2RzIG9uY2UgdGhh
dCBBUEkKLSAgLy8gc3RhYmlsaXplcy4KLSAgcHVibGljIG5hdGl2ZSBTaWduYWxpbmdTdGF0ZSBz
aWduYWxpbmdTdGF0ZSgpOwotCi0gIHB1YmxpYyBuYXRpdmUgSWNlQ29ubmVjdGlvblN0YXRlIGlj
ZUNvbm5lY3Rpb25TdGF0ZSgpOwotCi0gIHB1YmxpYyBuYXRpdmUgSWNlR2F0aGVyaW5nU3RhdGUg
aWNlR2F0aGVyaW5nU3RhdGUoKTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgY2xvc2UoKTsKLQot
ICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNsb3NlKCk7Ci0gICAgZm9yIChNZWRpYVN0
cmVhbSBzdHJlYW0gOiBsb2NhbFN0cmVhbXMpIHsKLSAgICAgIG5hdGl2ZVJlbW92ZUxvY2FsU3Ry
ZWFtKHN0cmVhbS5uYXRpdmVTdHJlYW0pOwotICAgICAgc3RyZWFtLmRpc3Bvc2UoKTsKLSAgICB9
Ci0gICAgbG9jYWxTdHJlYW1zLmNsZWFyKCk7Ci0gICAgZm9yIChSdHBTZW5kZXIgc2VuZGVyIDog
c2VuZGVycykgewotICAgICAgc2VuZGVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgc2VuZGVycy5j
bGVhcigpOwotICAgIGZvciAoUnRwUmVjZWl2ZXIgcmVjZWl2ZXIgOiByZWNlaXZlcnMpIHsKLSAg
ICAgIHJlY2VpdmVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgcmVjZWl2ZXJzLmNsZWFyKCk7Ci0g
ICAgZnJlZVBlZXJDb25uZWN0aW9uKG5hdGl2ZVBlZXJDb25uZWN0aW9uKTsKLSAgICBmcmVlT2Jz
ZXJ2ZXIobmF0aXZlT2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgZnJlZVBlZXJDb25uZWN0aW9uKGxvbmcgbmF0aXZlUGVlckNvbm5lY3Rpb24pOwotCi0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWVPYnNlcnZlcihsb25nIG5hdGl2ZU9ic2VydmVy
KTsKLQotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUFkZEljZUNhbmRpZGF0ZSgKLSAg
ICAgIFN0cmluZyBzZHBNaWQsIGludCBzZHBNTGluZUluZGV4LCBTdHJpbmcgaWNlQ2FuZGlkYXRl
U2RwKTsKLQotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVJlbW92ZUljZUNhbmRpZGF0
ZXMoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUg
Ym9vbGVhbiBuYXRpdmVBZGRMb2NhbFN0cmVhbShsb25nIG5hdGl2ZVN0cmVhbSk7Ci0KLSAgcHJp
dmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVSZW1vdmVMb2NhbFN0cmVhbShsb25nIG5hdGl2ZVN0cmVh
bSk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVHZXRTdGF0cyhTdGF0c09ic2Vy
dmVyIG9ic2VydmVyLCBsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIG5hdGl2ZSBSdHBT
ZW5kZXIgbmF0aXZlQ3JlYXRlU2VuZGVyKFN0cmluZyBraW5kLCBTdHJpbmcgc3RyZWFtX2lkKTsK
LQotICBwcml2YXRlIG5hdGl2ZSBMaXN0PFJ0cFNlbmRlcj4gbmF0aXZlR2V0U2VuZGVycygpOwot
Ci0gIHByaXZhdGUgbmF0aXZlIExpc3Q8UnRwUmVjZWl2ZXI+IG5hdGl2ZUdldFJlY2VpdmVycygp
OwotCi0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU3RhcnRSdGNFdmVudExvZyhpbnQg
ZmlsZV9kZXNjcmlwdG9yLCBpbnQgbWF4X3NpemVfYnl0ZXMpOwotCi0gIHByaXZhdGUgbmF0aXZl
IHZvaWQgbmF0aXZlU3RvcFJ0Y0V2ZW50TG9nKCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L1BlZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyNTYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwot
Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogSmF2YSB3cmFwcGVyIGZvciBhIEMr
KyBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UuICBNYWluIGVudHJ5IHBvaW50IHRvCi0g
KiB0aGUgUGVlckNvbm5lY3Rpb24gQVBJIGZvciBjbGllbnRzLgotICovCi1wdWJsaWMgY2xhc3Mg
UGVlckNvbm5lY3Rpb25GYWN0b3J5IHsKLSAgc3RhdGljIHsKLSAgICBTeXN0ZW0ubG9hZExpYnJh
cnkoImppbmdsZV9wZWVyY29ubmVjdGlvbl9zbyIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFRBRyA9ICJQZWVyQ29ubmVjdGlvbkZhY3RvcnkiOwotICBwcml2YXRlIGZp
bmFsIGxvbmcgbmF0aXZlRmFjdG9yeTsKLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkIG5ldHdvcmtU
aHJlYWQ7Ci0gIHByaXZhdGUgc3RhdGljIFRocmVhZCB3b3JrZXJUaHJlYWQ7Ci0gIHByaXZhdGUg
c3RhdGljIFRocmVhZCBzaWduYWxpbmdUaHJlYWQ7Ci0gIHByaXZhdGUgRWdsQmFzZSBsb2NhbEVn
bGJhc2U7Ci0gIHByaXZhdGUgRWdsQmFzZSByZW1vdGVFZ2xiYXNlOwotCi0gIHB1YmxpYyBzdGF0
aWMgY2xhc3MgT3B0aW9ucyB7Ci0gICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggd2VicnRjL2Jhc2Uv
bmV0d29yay5oIQotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX1VOS05PV04gPSAw
OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX0VUSEVSTkVUID0gMSA8PCAwOwot
ICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX1dJRkkgPSAxIDw8IDE7Ci0gICAgc3Rh
dGljIGZpbmFsIGludCBBREFQVEVSX1RZUEVfQ0VMTFVMQVIgPSAxIDw8IDI7Ci0gICAgc3RhdGlj
IGZpbmFsIGludCBBREFQVEVSX1RZUEVfVlBOID0gMSA8PCAzOwotICAgIHN0YXRpYyBmaW5hbCBp
bnQgQURBUFRFUl9UWVBFX0xPT1BCQUNLID0gMSA8PCA0OwotCi0gICAgcHVibGljIGludCBuZXR3
b3JrSWdub3JlTWFzazsKLSAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlRW5jcnlwdGlvbjsKLSAg
ICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlTmV0d29ya01vbml0b3I7Ci0gIH0KLQotICAvLyB8Y29u
dGV4dHwgaXMgYW4gYW5kcm9pZC5jb250ZW50LkNvbnRleHQgb2JqZWN0LCBidXQgd2Uga2VlcCBp
dCB1bnR5cGVkIGhlcmUKLSAgLy8gdG8gYWxsb3cgYnVpbGRpbmcgb24gbm9uLUFuZHJvaWQgcGxh
dGZvcm1zLgotICAvLyBDYWxsZXJzIG1heSBzcGVjaWZ5IGVpdGhlciB8aW5pdGlhbGl6ZUF1ZGlv
fCBvciB8aW5pdGlhbGl6ZVZpZGVvfCBhcyBmYWxzZQotICAvLyB0byBza2lwIGluaXRpYWxpemlu
ZyB0aGUgcmVzcGVjdGl2ZSBlbmdpbmUgKGFuZCBhdm9pZCB0aGUgbmVlZCBmb3IgdGhlCi0gIC8v
IHJlc3BlY3RpdmUgcGVybWlzc2lvbnMpLgotICAvLyB8cmVuZGVyRUdMQ29udGV4dHwgY2FuIGJl
IHByb3ZpZGVkIHRvIHN1cG9ydCBIVyB2aWRlbyBkZWNvZGluZyB0bwotICAvLyB0ZXh0dXJlIGFu
ZCB3aWxsIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2hhcmVkIEVHTCBjb250ZXh0IG9uIHZpZGVvCi0g
IC8vIGRlY29kaW5nIHRocmVhZC4KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBpbml0
aWFsaXplQW5kcm9pZEdsb2JhbHMoT2JqZWN0IGNvbnRleHQsIGJvb2xlYW4gaW5pdGlhbGl6ZUF1
ZGlvLAotICAgICAgYm9vbGVhbiBpbml0aWFsaXplVmlkZW8sIGJvb2xlYW4gdmlkZW9Id0FjY2Vs
ZXJhdGlvbik7Ci0KLSAgLy8gRmllbGQgdHJpYWwgaW5pdGlhbGl6YXRpb24uIE11c3QgYmUgY2Fs
bGVkIGJlZm9yZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkKLSAgLy8gaXMgY3JlYXRlZC4KLSAgcHVi
bGljIHN0YXRpYyBuYXRpdmUgdm9pZCBpbml0aWFsaXplRmllbGRUcmlhbHMoU3RyaW5nIGZpZWxk
VHJpYWxzSW5pdFN0cmluZyk7Ci0gIC8vIEludGVybmFsIHRyYWNpbmcgaW5pdGlhbGl6YXRpb24u
IE11c3QgYmUgY2FsbGVkIGJlZm9yZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaXMgY3JlYXRlZCB0
bwotICAvLyBwcmV2ZW50IHJhY2luZyB3aXRoIHRyYWNpbmcgY29kZS4KLSAgcHVibGljIHN0YXRp
YyBuYXRpdmUgdm9pZCBpbml0aWFsaXplSW50ZXJuYWxUcmFjZXIoKTsKLSAgLy8gSW50ZXJuYWwg
dHJhY2luZyBzaHV0ZG93biwgY2FsbGVkIHRvIHByZXZlbnQgcmVzb3VyY2UgbGVha3MuIE11c3Qg
YmUgY2FsbGVkIGFmdGVyCi0gIC8vIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBpcyBnb25lIHRvIHBy
ZXZlbnQgcmFjZXMgd2l0aCBjb2RlIHBlcmZvcm1pbmcgdHJhY2luZy4KLSAgcHVibGljIHN0YXRp
YyBuYXRpdmUgdm9pZCBzaHV0ZG93bkludGVybmFsVHJhY2VyKCk7Ci0gIC8vIFN0YXJ0L3N0b3Ag
aW50ZXJuYWwgY2FwdHVyaW5nIG9mIGludGVybmFsIHRyYWNpbmcuCi0gIHB1YmxpYyBzdGF0aWMg
bmF0aXZlIGJvb2xlYW4gc3RhcnRJbnRlcm5hbFRyYWNpbmdDYXB0dXJlKFN0cmluZyB0cmFjaW5n
X2ZpbGVuYW1lKTsKLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBzdG9wSW50ZXJuYWxUcmFj
aW5nQ2FwdHVyZSgpOwotCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkoKSB7Ci0gICAgdGhpcyhudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBQZWVyQ29ubmVjdGlv
bkZhY3RvcnkoT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgbmF0aXZlRmFjdG9yeSA9IG5hdGl2ZUNy
ZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeShvcHRpb25zKTsKLSAgICBpZiAobmF0aXZlRmFjdG9y
eSA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIGlu
aXRpYWxpemUgUGVlckNvbm5lY3Rpb25GYWN0b3J5ISIpOwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyBQZWVyQ29ubmVjdGlvbiBjcmVhdGVQZWVyQ29ubmVjdGlvbihQZWVyQ29ubmVjdGlvbi5SVEND
b25maWd1cmF0aW9uIHJ0Y0NvbmZpZywKLSAgICAgIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWlu
dHMsIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgbG9uZyBuYXRpdmVP
YnNlcnZlciA9IG5hdGl2ZUNyZWF0ZU9ic2VydmVyKG9ic2VydmVyKTsKLSAgICBpZiAobmF0aXZl
T2JzZXJ2ZXIgPT0gMCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGxvbmcgbmF0
aXZlUGVlckNvbm5lY3Rpb24gPQotICAgICAgICBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbihu
YXRpdmVGYWN0b3J5LCBydGNDb25maWcsIGNvbnN0cmFpbnRzLCBuYXRpdmVPYnNlcnZlcik7Ci0g
ICAgaWYgKG5hdGl2ZVBlZXJDb25uZWN0aW9uID09IDApIHsKLSAgICAgIHJldHVybiBudWxsOwot
ICAgIH0KLSAgICByZXR1cm4gbmV3IFBlZXJDb25uZWN0aW9uKG5hdGl2ZVBlZXJDb25uZWN0aW9u
LCBuYXRpdmVPYnNlcnZlcik7Ci0gIH0KLQotICBwdWJsaWMgUGVlckNvbm5lY3Rpb24gY3JlYXRl
UGVlckNvbm5lY3Rpb24oTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnMs
Ci0gICAgICBNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzLCBQZWVyQ29ubmVjdGlvbi5PYnNl
cnZlciBvYnNlcnZlcikgewotICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gcnRj
Q29uZmlnID0gbmV3IFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24oaWNlU2VydmVycyk7
Ci0gICAgcmV0dXJuIGNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZywgY29uc3RyYWludHMs
IG9ic2VydmVyKTsKLSAgfQotCi0gIHB1YmxpYyBNZWRpYVN0cmVhbSBjcmVhdGVMb2NhbE1lZGlh
U3RyZWFtKFN0cmluZyBsYWJlbCkgewotICAgIHJldHVybiBuZXcgTWVkaWFTdHJlYW0obmF0aXZl
Q3JlYXRlTG9jYWxNZWRpYVN0cmVhbShuYXRpdmVGYWN0b3J5LCBsYWJlbCkpOwotICB9Ci0KLSAg
cHVibGljIFZpZGVvU291cmNlIGNyZWF0ZVZpZGVvU291cmNlKFZpZGVvQ2FwdHVyZXIgY2FwdHVy
ZXIpIHsKLSAgICBmaW5hbCBFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCA9Ci0gICAgICAgIGxv
Y2FsRWdsYmFzZSA9PSBudWxsID8gbnVsbCA6IGxvY2FsRWdsYmFzZS5nZXRFZ2xCYXNlQ29udGV4
dCgpOwotICAgIGxvbmcgbmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UgPQotICAgICAgICBu
YXRpdmVDcmVhdGVWaWRlb1NvdXJjZShuYXRpdmVGYWN0b3J5LCBlZ2xDb250ZXh0LCBjYXB0dXJl
ci5pc1NjcmVlbmNhc3QoKSk7Ci0gICAgVmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2VydmVyIGNh
cHR1cmVyT2JzZXJ2ZXIgPQotICAgICAgICBuZXcgVmlkZW9DYXB0dXJlci5BbmRyb2lkVmlkZW9U
cmFja1NvdXJjZU9ic2VydmVyKG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlKTsKLSAgICBu
YXRpdmVJbml0aWFsaXplVmlkZW9DYXB0dXJlcigKLSAgICAgICAgbmF0aXZlRmFjdG9yeSwgY2Fw
dHVyZXIsIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLCBjYXB0dXJlck9ic2VydmVyKTsK
LSAgICByZXR1cm4gbmV3IFZpZGVvU291cmNlKG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNl
KTsKLSAgfQotCi0gIHB1YmxpYyBWaWRlb1RyYWNrIGNyZWF0ZVZpZGVvVHJhY2soU3RyaW5nIGlk
LCBWaWRlb1NvdXJjZSBzb3VyY2UpIHsKLSAgICByZXR1cm4gbmV3IFZpZGVvVHJhY2sobmF0aXZl
Q3JlYXRlVmlkZW9UcmFjayhuYXRpdmVGYWN0b3J5LCBpZCwgc291cmNlLm5hdGl2ZVNvdXJjZSkp
OwotICB9Ci0KLSAgcHVibGljIEF1ZGlvU291cmNlIGNyZWF0ZUF1ZGlvU291cmNlKE1lZGlhQ29u
c3RyYWludHMgY29uc3RyYWludHMpIHsKLSAgICByZXR1cm4gbmV3IEF1ZGlvU291cmNlKG5hdGl2
ZUNyZWF0ZUF1ZGlvU291cmNlKG5hdGl2ZUZhY3RvcnksIGNvbnN0cmFpbnRzKSk7Ci0gIH0KLQot
ICBwdWJsaWMgQXVkaW9UcmFjayBjcmVhdGVBdWRpb1RyYWNrKFN0cmluZyBpZCwgQXVkaW9Tb3Vy
Y2Ugc291cmNlKSB7Ci0gICAgcmV0dXJuIG5ldyBBdWRpb1RyYWNrKG5hdGl2ZUNyZWF0ZUF1ZGlv
VHJhY2sobmF0aXZlRmFjdG9yeSwgaWQsIHNvdXJjZS5uYXRpdmVTb3VyY2UpKTsKLSAgfQotCi0g
IC8vIFN0YXJ0cyByZWNvcmRpbmcgYW4gQUVDIGR1bXAuIE93bmVyc2hpcCBvZiB0aGUgZmlsZSBp
cyB0cmFuc2ZlcmVkIHRvIHRoZQotICAvLyBuYXRpdmUgY29kZS4gSWYgYW4gQUVDIGR1bXAgaXMg
YWxyZWFkeSBpbiBwcm9ncmVzcywgaXQgd2lsbCBiZSBzdG9wcGVkIGFuZAotICAvLyBhIG5ldyBv
bmUgd2lsbCBzdGFydCB1c2luZyB0aGUgcHJvdmlkZWQgZmlsZS4KLSAgcHVibGljIGJvb2xlYW4g
c3RhcnRBZWNEdW1wKGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBmaWxlc2l6ZV9saW1pdF9ieXRl
cykgewotICAgIHJldHVybiBuYXRpdmVTdGFydEFlY0R1bXAobmF0aXZlRmFjdG9yeSwgZmlsZV9k
ZXNjcmlwdG9yLCBmaWxlc2l6ZV9saW1pdF9ieXRlcyk7Ci0gIH0KLQotICAvLyBTdG9wcyByZWNv
cmRpbmcgYW4gQUVDIGR1bXAuIElmIG5vIEFFQyBkdW1wIGlzIGN1cnJlbnRseSBiZWluZyByZWNv
cmRlZCwKLSAgLy8gdGhpcyBjYWxsIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gIHB1YmxpYyB2b2lk
IHN0b3BBZWNEdW1wKCkgewotICAgIG5hdGl2ZVN0b3BBZWNEdW1wKG5hdGl2ZUZhY3RvcnkpOwot
ICB9Ci0KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHZvaWQgc2V0T3B0aW9ucyhPcHRpb25zIG9w
dGlvbnMpIHsKLSAgICBuYXRpdmVTZXRPcHRpb25zKG5hdGl2ZUZhY3RvcnksIG9wdGlvbnMpOwot
ICB9Ci0KLSAgLyoqIFNldCB0aGUgRUdMIGNvbnRleHQgdXNlZCBieSBIVyBWaWRlbyBlbmNvZGlu
ZyBhbmQgZGVjb2RpbmcuCi0gICAqCi0gICAqIEBwYXJhbSBsb2NhbEVnbENvbnRleHQgICBNdXN0
IGJlIHRoZSBzYW1lIGFzIHVzZWQgYnkgVmlkZW9DYXB0dXJlckFuZHJvaWQgYW5kIGFueSBsb2Nh
bCB2aWRlbwotICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuCi0gICAqIEBw
YXJhbSByZW1vdGVFZ2xDb250ZXh0ICBNdXN0IGJlIHRoZSBzYW1lIGFzIHVzZWQgYnkgYW55IHJl
bW90ZSB2aWRlbyByZW5kZXJlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZpZGVvSHdBY2Nl
bGVyYXRpb25PcHRpb25zKAotICAgICAgRWdsQmFzZS5Db250ZXh0IGxvY2FsRWdsQ29udGV4dCwg
RWdsQmFzZS5Db250ZXh0IHJlbW90ZUVnbENvbnRleHQpIHsKLSAgICBpZiAobG9jYWxFZ2xiYXNl
ICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJFZ2wgY29udGV4dCBhbHJlYWR5IHNl
dC4iKTsKLSAgICAgIGxvY2FsRWdsYmFzZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChyZW1v
dGVFZ2xiYXNlICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJFZ2wgY29udGV4dCBh
bHJlYWR5IHNldC4iKTsKLSAgICAgIHJlbW90ZUVnbGJhc2UucmVsZWFzZSgpOwotICAgIH0KLSAg
ICBsb2NhbEVnbGJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShsb2NhbEVnbENvbnRleHQpOwotICAgIHJl
bW90ZUVnbGJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShyZW1vdGVFZ2xDb250ZXh0KTsKLSAgICBuYXRp
dmVTZXRWaWRlb0h3QWNjZWxlcmF0aW9uT3B0aW9ucygKLSAgICAgICAgbmF0aXZlRmFjdG9yeSwg
bG9jYWxFZ2xiYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIHJlbW90ZUVnbGJhc2UuZ2V0RWdsQmFz
ZUNvbnRleHQoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIG5hdGl2
ZUZyZWVGYWN0b3J5KG5hdGl2ZUZhY3RvcnkpOwotICAgIG5ldHdvcmtUaHJlYWQgPSBudWxsOwot
ICAgIHdvcmtlclRocmVhZCA9IG51bGw7Ci0gICAgc2lnbmFsaW5nVGhyZWFkID0gbnVsbDsKLSAg
ICBpZiAobG9jYWxFZ2xiYXNlICE9IG51bGwpCi0gICAgICBsb2NhbEVnbGJhc2UucmVsZWFzZSgp
OwotICAgIGlmIChyZW1vdGVFZ2xiYXNlICE9IG51bGwpCi0gICAgICByZW1vdGVFZ2xiYXNlLnJl
bGVhc2UoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRocmVhZHNDYWxsYmFja3MoKSB7Ci0gICAg
bmF0aXZlVGhyZWFkc0NhbGxiYWNrcyhuYXRpdmVGYWN0b3J5KTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKFRocmVhZCB0aHJlYWQsIFN0cmluZyB0aHJlYWRO
YW1lKSB7Ci0gICAgaWYgKHRocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxlbWVu
dFtdIHN0YWNrVHJhY2VzID0gdGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChzdGFj
a1RyYWNlcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsIHRocmVhZE5hbWUg
KyAiIHN0YWNrcyB0cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCBzdGFj
a1RyYWNlIDogc3RhY2tUcmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1Ry
YWNlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZXMoKSB7Ci0gICAgcHJpbnRTdGFja1RyYWNl
KG5ldHdvcmtUaHJlYWQsICJOZXR3b3JrIHRocmVhZCIpOwotICAgIHByaW50U3RhY2tUcmFjZSh3
b3JrZXJUaHJlYWQsICJXb3JrZXIgdGhyZWFkIik7Ci0gICAgcHJpbnRTdGFja1RyYWNlKHNpZ25h
bGluZ1RocmVhZCwgIlNpZ25hbGluZyB0aHJlYWQiKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGlj
IHZvaWQgb25OZXR3b3JrVGhyZWFkUmVhZHkoKSB7Ci0gICAgbmV0d29ya1RocmVhZCA9IFRocmVh
ZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm9uTmV0d29ya1RocmVhZFJl
YWR5Iik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIG9uV29ya2VyVGhyZWFkUmVhZHko
KSB7Ci0gICAgd29ya2VyVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICBMb2dn
aW5nLmQoVEFHLCAib25Xb3JrZXJUaHJlYWRSZWFkeSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBvblNpZ25hbGluZ1RocmVhZFJlYWR5KCkgewotICAgIHNpZ25hbGluZ1RocmVhZCA9
IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm9uU2lnbmFsaW5n
VGhyZWFkUmVhZHkiKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2
ZUNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeShPcHRpb25zIG9wdGlvbnMpOwotCi0gIHByaXZh
dGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZU9ic2VydmVyKFBlZXJDb25uZWN0aW9u
Lk9ic2VydmVyIG9ic2VydmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRp
dmVDcmVhdGVQZWVyQ29ubmVjdGlvbihsb25nIG5hdGl2ZUZhY3RvcnksCi0gICAgICBQZWVyQ29u
bmVjdGlvbi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZywgTWVkaWFDb25zdHJhaW50cyBjb25z
dHJhaW50cywgbG9uZyBuYXRpdmVPYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZl
IGxvbmcgbmF0aXZlQ3JlYXRlTG9jYWxNZWRpYVN0cmVhbShsb25nIG5hdGl2ZUZhY3RvcnksIFN0
cmluZyBsYWJlbCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRl
VmlkZW9Tb3VyY2UoCi0gICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIEVnbEJhc2UuQ29udGV4dCBl
Z2xDb250ZXh0LCBib29sZWFuIGlzX3NjcmVlbmNhc3QpOwotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSB2b2lkIG5hdGl2ZUluaXRpYWxpemVWaWRlb0NhcHR1cmVyKGxvbmcgbmF0aXZlX2ZhY3Rv
cnksCi0gICAgICBWaWRlb0NhcHR1cmVyIGpfdmlkZW9fY2FwdHVyZXIsIGxvbmcgbmF0aXZlX3Nv
dXJjZSwKLSAgICAgIFZpZGVvQ2FwdHVyZXIuQ2FwdHVyZXJPYnNlcnZlciBqX2ZyYW1lX29ic2Vy
dmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVWaWRlb1Ry
YWNrKAotICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBTdHJpbmcgaWQsIGxvbmcgbmF0aXZlVmlk
ZW9Tb3VyY2UpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUF1
ZGlvU291cmNlKAotICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBNZWRpYUNvbnN0cmFpbnRzIGNv
bnN0cmFpbnRzKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVB
dWRpb1RyYWNrKAotICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBTdHJpbmcgaWQsIGxvbmcgbmF0
aXZlU291cmNlKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTdGFy
dEFlY0R1bXAoCi0gICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIGludCBmaWxlX2Rlc2NyaXB0b3Is
IGludCBmaWxlc2l6ZV9saW1pdF9ieXRlcyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlU3RvcEFlY0R1bXAobG9uZyBuYXRpdmVGYWN0b3J5KTsKLQotICBARGVwcmVjYXRl
ZCBwdWJsaWMgbmF0aXZlIHZvaWQgbmF0aXZlU2V0T3B0aW9ucyhsb25nIG5hdGl2ZUZhY3Rvcnks
IE9wdGlvbnMgb3B0aW9ucyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZl
U2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlvbnMoCi0gICAgICBsb25nIG5hdGl2ZUZhY3Rvcnks
IE9iamVjdCBsb2NhbEVHTENvbnRleHQsIE9iamVjdCByZW1vdGVFR0xDb250ZXh0KTsKLQotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVUaHJlYWRzQ2FsbGJhY2tzKGxvbmcgbmF0
aXZlRmFjdG9yeSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlRnJlZUZh
Y3RvcnkobG9uZyBuYXRpdmVGYWN0b3J5KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUmVu
ZGVyZXJDb21tb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1JlbmRlcmVy
Q29tbW9uLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUmVuZGVy
ZXJDb21tb24uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNz
LlBvaW50OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLm9w
ZW5nbC5NYXRyaXg7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLWltcG9ydCBqYXZhLm5p
by5CeXRlQnVmZmVyOwotCi0vKioKLSAqIFN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGZvciByZW5k
ZXJlciBpbXBsZW1lbnRhdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW5kZXJlckNvbW1vbiB7
Ci0gIC8qKiBJbnRlcmZhY2UgZm9yIHJlcG9ydGluZyByZW5kZXJpbmcgZXZlbnRzLiAqLwotICBw
dWJsaWMgc3RhdGljIGludGVyZmFjZSBSZW5kZXJlckV2ZW50cyB7Ci0gICAgLyoqCi0gICAgICog
Q2FsbGJhY2sgZmlyZWQgb25jZSBmaXJzdCBmcmFtZSBpcyByZW5kZXJlZC4KLSAgICAgKi8KLSAg
ICBwdWJsaWMgdm9pZCBvbkZpcnN0RnJhbWVSZW5kZXJlZCgpOwotCi0gICAgLyoqCi0gICAgICog
Q2FsbGJhY2sgZmlyZWQgd2hlbiByZW5kZXJlZCBmcmFtZSByZXNvbHV0aW9uIG9yIHJvdGF0aW9u
IGhhcyBjaGFuZ2VkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uRnJhbWVSZXNvbHV0aW9u
Q2hhbmdlZChpbnQgdmlkZW9XaWR0aCwgaW50IHZpZGVvSGVpZ2h0LCBpbnQgcm90YXRpb24pOwot
ICB9Ci0KLSAgLyoqIEludGVyZmFjZSBmb3IgcmVuZGVyaW5nIGZyYW1lcyBvbiBhbiBFR0xTdXJm
YWNlLiAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBHbERyYXdlciB7Ci0gICAgLyoqCi0g
ICAgICogRnVuY3Rpb25zIGZvciBkcmF3aW5nIGZyYW1lcyB3aXRoIGRpZmZlcmVudCBzb3VyY2Vz
LiBUaGUgcmVuZGVyaW5nIHN1cmZhY2UgdGFyZ2V0IGlzCi0gICAgICogaW1wbGllZCBieSB0aGUg
Y3VycmVudCBFR0wgY29udGV4dCBvZiB0aGUgY2FsbGluZyB0aHJlYWQgYW5kIHJlcXVpcmVzIG5v
IGV4cGxpY2l0IGFyZ3VtZW50LgotICAgICAqIFRoZSBjb29yZGluYXRlcyBzcGVjaWZ5IHRoZSB2
aWV3cG9ydCBsb2NhdGlvbiBvbiB0aGUgc3VyZmFjZSB0YXJnZXQuCi0gICAgICovCi0gICAgdm9p
ZCBkcmF3T2VzKGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVX
aWR0aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAgICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3Bv
cnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KTsKLSAgICB2b2lkIGRy
YXdSZ2IoaW50IHRleHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBp
bnQgZnJhbWVIZWlnaHQsIGludCB2aWV3cG9ydFgsCi0gICAgICAgIGludCB2aWV3cG9ydFksIGlu
dCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpOwotICAgIHZvaWQgZHJhd1l1dihp
bnRbXSB5dXZUZXh0dXJlcywgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQg
ZnJhbWVIZWlnaHQsCi0gICAgICAgIGludCB2aWV3cG9ydFgsIGludCB2aWV3cG9ydFksIGludCB2
aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpOwotCi0gICAgLyoqCi0gICAgICogUmVs
ZWFzZSBhbGwgR0wgcmVzb3VyY2VzLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgbWFudWFsbHksIG90
aGVyd2lzZSByZXNvdXJjZXMgbWF5IGxlYWsuCi0gICAgICovCi0gICAgdm9pZCByZWxlYXNlKCk7
Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIGNsYXNzIGZvciB1cGxvYWRpbmcgWVVWIGJ5dGVi
dWZmZXIgZnJhbWVzIHRvIHRleHR1cmVzIHRoYXQgaGFuZGxlcyBzdHJpZGUgPiB3aWR0aC4gVGhp
cwotICAgKiBjbGFzcyBrZWVwcyBhbiBpbnRlcm5hbCBCeXRlQnVmZmVyIHRvIGF2b2lkIHVubmVj
ZXNzYXJ5IGFsbG9jYXRpb25zIGZvciBpbnRlcm1lZGlhdGUgY29waWVzLgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyBjbGFzcyBZdXZVcGxvYWRlciB7Ci0gICAgLy8gSW50ZXJtZWRpYXRlIGNvcHkg
YnVmZmVyIGZvciB1cGxvYWRpbmcgeXV2IGZyYW1lcyB0aGF0IGFyZSBub3QgcGFja2VkLCBpLmUu
IHN0cmlkZSA+IHdpZHRoLgotICAgIC8vIFRPRE8obWFnamVkKTogSW52ZXN0aWdhdGUgd2hlbiBH
TF9VTlBBQ0tfUk9XX0xFTkdUSCBpcyBhdmFpbGFibGUsIG9yIG1ha2UgYSBjdXN0b20gc2hhZGVy
Ci0gICAgLy8gdGhhdCBoYW5kbGVzIHN0cmlkZSBhbmQgY29tcGFyZSBwZXJmb3JtYW5jZSB3aXRo
IGludGVybWVkaWF0ZSBjb3B5LgotICAgIHByaXZhdGUgQnl0ZUJ1ZmZlciBjb3B5QnVmZmVyOwot
Ci0gICAgLyoqCi0gICAgICogVXBsb2FkIHxwbGFuZXN8IGludG8gfG91dHB1dFl1dlRleHR1cmVz
fCwgdGFraW5nIHN0cmlkZSBpbnRvIGNvbnNpZGVyYXRpb24uCi0gICAgICogfG91dHB1dFl1dlRl
eHR1cmVzfCBtdXN0IGhhdmUgYmVlbiBnZW5lcmF0ZWQgaW4gYWR2YW5jZS4KLSAgICAgKi8KLSAg
ICBwdWJsaWMgdm9pZCB1cGxvYWRZdXZEYXRhKAotICAgICAgICBpbnRbXSBvdXRwdXRZdXZUZXh0
dXJlcywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnRbXSBzdHJpZGVzLCBCeXRlQnVmZmVyW10g
cGxhbmVzKSB7Ci0gICAgICBmaW5hbCBpbnRbXSBwbGFuZVdpZHRocyA9IG5ldyBpbnRbXSB7d2lk
dGgsIHdpZHRoIC8gMiwgd2lkdGggLyAyfTsKLSAgICAgIGZpbmFsIGludFtdIHBsYW5lSGVpZ2h0
cyA9IG5ldyBpbnRbXSB7aGVpZ2h0LCBoZWlnaHQgLyAyLCBoZWlnaHQgLyAyfTsKLSAgICAgIC8v
IE1ha2UgYSBmaXJzdCBwYXNzIHRvIHNlZSBpZiB3ZSBuZWVkIGEgdGVtcG9yYXJ5IGNvcHkgYnVm
ZmVyLgotICAgICAgaW50IGNvcHlDYXBhY2l0eU5lZWRlZCA9IDA7Ci0gICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBpZiAoc3RyaWRlc1tpXSA+IHBsYW5lV2lkdGhz
W2ldKSB7Ci0gICAgICAgICAgY29weUNhcGFjaXR5TmVlZGVkID0gTWF0aC5tYXgoY29weUNhcGFj
aXR5TmVlZGVkLCBwbGFuZVdpZHRoc1tpXSAqIHBsYW5lSGVpZ2h0c1tpXSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIC8vIEFsbG9jYXRlIGNvcHkgYnVmZmVyIGlmIG5lY2Vzc2FyeS4KLSAg
ICAgIGlmIChjb3B5Q2FwYWNpdHlOZWVkZWQgPiAwCi0gICAgICAgICAgJiYgKGNvcHlCdWZmZXIg
PT0gbnVsbCB8fCBjb3B5QnVmZmVyLmNhcGFjaXR5KCkgPCBjb3B5Q2FwYWNpdHlOZWVkZWQpKSB7
Ci0gICAgICAgIGNvcHlCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGNvcHlDYXBh
Y2l0eU5lZWRlZCk7Ci0gICAgICB9Ci0gICAgICAvLyBVcGxvYWQgZWFjaCBwbGFuZS4KLSAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIEdMRVMyMC5nbEFjdGl2ZVRl
eHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICAgIEdMRVMyMC5nbEJpbmRUZXh0
dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCBvdXRwdXRZdXZUZXh0dXJlc1tpXSk7Ci0gICAgICAg
IC8vIEdMRVMgb25seSBhY2NlcHRzIHBhY2tlZCBkYXRhLCBpLmUuIHN0cmlkZSA9PSBwbGFuZVdp
ZHRoLgotICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIHBhY2tlZEJ5dGVCdWZmZXI7Ci0gICAgICAg
IGlmIChzdHJpZGVzW2ldID09IHBsYW5lV2lkdGhzW2ldKSB7Ci0gICAgICAgICAgLy8gSW5wdXQg
aXMgcGFja2VkIGFscmVhZHkuCi0gICAgICAgICAgcGFja2VkQnl0ZUJ1ZmZlciA9IHBsYW5lc1tp
XTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLm5hdGl2ZUNvcHlQ
bGFuZSgKLSAgICAgICAgICAgICAgcGxhbmVzW2ldLCBwbGFuZVdpZHRoc1tpXSwgcGxhbmVIZWln
aHRzW2ldLCBzdHJpZGVzW2ldLCBjb3B5QnVmZmVyLCBwbGFuZVdpZHRoc1tpXSk7Ci0gICAgICAg
ICAgcGFja2VkQnl0ZUJ1ZmZlciA9IGNvcHlCdWZmZXI7Ci0gICAgICAgIH0KLSAgICAgICAgR0xF
UzIwLmdsVGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgR0xFUzIwLkdMX0xVTUlO
QU5DRSwgcGxhbmVXaWR0aHNbaV0sCi0gICAgICAgICAgICBwbGFuZUhlaWdodHNbaV0sIDAsIEdM
RVMyMC5HTF9MVU1JTkFOQ0UsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCBwYWNrZWRCeXRlQnVm
ZmVyKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIGNsYXNzIGZv
ciBkZXRlcm1pbmluZyBsYXlvdXQgc2l6ZSBiYXNlZCBvbiBsYXlvdXQgcmVxdWlyZW1lbnRzLCBz
Y2FsaW5nIHR5cGUsIGFuZCB2aWRlbwotICAgKiBhc3BlY3QgcmF0aW8uCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIGNsYXNzIFZpZGVvTGF5b3V0TWVhc3VyZSB7Ci0gICAgLy8gVGhlIHNjYWxpbmcg
dHlwZSBkZXRlcm1pbmVzIGhvdyB0aGUgdmlkZW8gd2lsbCBmaWxsIHRoZSBhbGxvd2VkIGxheW91
dCBhcmVhIGluIG1lYXN1cmUoKS4gSXQKLSAgICAvLyBjYW4gYmUgc3BlY2lmaWVkIHNlcGFyYXRl
bHkgZm9yIHRoZSBjYXNlIHdoZW4gdmlkZW8gaGFzIG1hdGNoZWQgb3JpZW50YXRpb24gd2l0aCBs
YXlvdXQgc2l6ZQotICAgIC8vIGFuZCB3aGVuIHRoZXJlIGlzIGFuIG9yaWVudGF0aW9uIG1pc21h
dGNoLgotICAgIHByaXZhdGUgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9u
ID0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0JBTEFOQ0VEOwotICAgIHByaXZhdGUgU2NhbGlu
Z1R5cGUgc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uID0gU2NhbGluZ1R5cGUuU0NBTEVf
QVNQRUNUX0JBTEFOQ0VEOwotCi0gICAgcHVibGljIHZvaWQgc2V0U2NhbGluZ1R5cGUoU2NhbGlu
Z1R5cGUgc2NhbGluZ1R5cGUpIHsKLSAgICAgIHRoaXMuc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0
aW9uID0gc2NhbGluZ1R5cGU7Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRh
dGlvbiA9IHNjYWxpbmdUeXBlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNjYWxpbmdU
eXBlKAotICAgICAgICBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24sIFNj
YWxpbmdUeXBlIHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbikgewotICAgICAgdGhpcy5z
Y2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24gPSBzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb247
Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbiA9IHNjYWxpbmdUeXBl
TWlzbWF0Y2hPcmllbnRhdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUG9pbnQgbWVhc3VyZShp
bnQgd2lkdGhTcGVjLCBpbnQgaGVpZ2h0U3BlYywgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhl
aWdodCkgewotICAgICAgLy8gQ2FsY3VsYXRlIG1heCBhbGxvd2VkIGxheW91dCBzaXplLgotICAg
ICAgZmluYWwgaW50IG1heFdpZHRoID0gVmlldy5nZXREZWZhdWx0U2l6ZShJbnRlZ2VyLk1BWF9W
QUxVRSwgd2lkdGhTcGVjKTsKLSAgICAgIGZpbmFsIGludCBtYXhIZWlnaHQgPSBWaWV3LmdldERl
ZmF1bHRTaXplKEludGVnZXIuTUFYX1ZBTFVFLCBoZWlnaHRTcGVjKTsKLSAgICAgIGlmIChmcmFt
ZVdpZHRoID09IDAgfHwgZnJhbWVIZWlnaHQgPT0gMCB8fCBtYXhXaWR0aCA9PSAwIHx8IG1heEhl
aWdodCA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUG9pbnQobWF4V2lkdGgsIG1heEhlaWdo
dCk7Ci0gICAgICB9Ci0gICAgICAvLyBDYWxjdWxhdGUgZGVzaXJlZCBkaXNwbGF5IHNpemUgYmFz
ZWQgb24gc2NhbGluZyB0eXBlLCB2aWRlbyBhc3BlY3QgcmF0aW8sCi0gICAgICAvLyBhbmQgbWF4
aW11bSBsYXlvdXQgc2l6ZS4KLSAgICAgIGZpbmFsIGZsb2F0IGZyYW1lQXNwZWN0ID0gZnJhbWVX
aWR0aCAvIChmbG9hdCkgZnJhbWVIZWlnaHQ7Ci0gICAgICBmaW5hbCBmbG9hdCBkaXNwbGF5QXNw
ZWN0ID0gbWF4V2lkdGggLyAoZmxvYXQpIG1heEhlaWdodDsKLSAgICAgIGZpbmFsIFNjYWxpbmdU
eXBlIHNjYWxpbmdUeXBlID0gKGZyYW1lQXNwZWN0ID4gMS4wZikgPT0gKGRpc3BsYXlBc3BlY3Qg
PiAxLjBmKQotICAgICAgICAgID8gc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uCi0gICAgICAg
ICAgOiBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb247Ci0gICAgICBmaW5hbCBQb2ludCBs
YXlvdXRTaXplID0gZ2V0RGlzcGxheVNpemUoc2NhbGluZ1R5cGUsIGZyYW1lQXNwZWN0LCBtYXhX
aWR0aCwgbWF4SGVpZ2h0KTsKLQotICAgICAgLy8gSWYgdGhlIG1lYXN1cmUgc3BlY2lmaWNhdGlv
biBpcyBmb3JjaW5nIGEgc3BlY2lmaWMgc2l6ZSAtIHlpZWxkLgotICAgICAgaWYgKFZpZXcuTWVh
c3VyZVNwZWMuZ2V0TW9kZSh3aWR0aFNwZWMpID09IFZpZXcuTWVhc3VyZVNwZWMuRVhBQ1RMWSkg
ewotICAgICAgICBsYXlvdXRTaXplLnggPSBtYXhXaWR0aDsKLSAgICAgIH0KLSAgICAgIGlmIChW
aWV3Lk1lYXN1cmVTcGVjLmdldE1vZGUoaGVpZ2h0U3BlYykgPT0gVmlldy5NZWFzdXJlU3BlYy5F
WEFDVExZKSB7Ci0gICAgICAgIGxheW91dFNpemUueSA9IG1heEhlaWdodDsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBsYXlvdXRTaXplOwotICAgIH0KLSAgfQotCi0gIC8vIFR5cGVzIG9mIHZpZGVv
IHNjYWxpbmc6Ci0gIC8vIFNDQUxFX0FTUEVDVF9GSVQgLSB2aWRlbyBmcmFtZSBpcyBzY2FsZWQg
dG8gZml0IHRoZSBzaXplIG9mIHRoZSB2aWV3IGJ5Ci0gIC8vICAgIG1haW50YWluaW5nIHRoZSBh
c3BlY3QgcmF0aW8gKGJsYWNrIGJvcmRlcnMgbWF5IGJlIGRpc3BsYXllZCkuCi0gIC8vIFNDQUxF
X0FTUEVDVF9GSUxMIC0gdmlkZW8gZnJhbWUgaXMgc2NhbGVkIHRvIGZpbGwgdGhlIHNpemUgb2Yg
dGhlIHZpZXcgYnkKLSAgLy8gICAgbWFpbnRhaW5pbmcgdGhlIGFzcGVjdCByYXRpby4gU29tZSBw
b3J0aW9uIG9mIHRoZSB2aWRlbyBmcmFtZSBtYXkgYmUKLSAgLy8gICAgY2xpcHBlZC4KLSAgLy8g
U0NBTEVfQVNQRUNUX0JBTEFOQ0VEIC0gQ29tcHJvbWlzZSBiZXR3ZWVuIEZJVCBhbmQgRklMTC4g
VmlkZW8gZnJhbWUgd2lsbCBmaWxsIGFzIG11Y2ggYXMKLSAgLy8gcG9zc2libGUgb2YgdGhlIHZp
ZXcgd2hpbGUgbWFpbnRhaW5pbmcgYXNwZWN0IHJhdGlvLCB1bmRlciB0aGUgY29uc3RyYWludCB0
aGF0IGF0IGxlYXN0Ci0gIC8vIHxCQUxBTkNFRF9WSVNJQkxFX0ZSQUNUSU9OfCBvZiB0aGUgZnJh
bWUgY29udGVudCB3aWxsIGJlIHNob3duLgotICBwdWJsaWMgc3RhdGljIGVudW0gU2NhbGluZ1R5
cGUgeyBTQ0FMRV9BU1BFQ1RfRklULCBTQ0FMRV9BU1BFQ1RfRklMTCwgU0NBTEVfQVNQRUNUX0JB
TEFOQ0VEIH0KLSAgLy8gVGhlIG1pbmltdW0gZnJhY3Rpb24gb2YgdGhlIGZyYW1lIGNvbnRlbnQg
dGhhdCB3aWxsIGJlIHNob3duIGZvciB8U0NBTEVfQVNQRUNUX0JBTEFOQ0VEfC4KLSAgLy8gVGhp
cyBsaW1pdHMgZXhjZXNzaXZlIGNyb3BwaW5nIHdoZW4gYWRqdXN0aW5nIGRpc3BsYXkgc2l6ZS4K
LSAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgQkFMQU5DRURfVklTSUJMRV9GUkFDVElPTiA9IDAuNTYy
NWY7Ci0gIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdFtd
IGlkZW50aXR5TWF0cml4KCkgewotICAgIHJldHVybiBuZXcgZmxvYXRbXSB7Ci0gICAgICAgIDEs
IDAsIDAsIDAsCi0gICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAgIDAsIDAsIDEsIDAsCi0gICAg
ICAgIDAsIDAsIDAsIDF9OwotICB9Ci0gIC8vIE1hdHJpeCB3aXRoIHRyYW5zZm9ybSB5JyA9IDEg
LSB5LgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGZsb2F0W10gdmVydGljYWxGbGlwTWF0cml4KCkg
ewotICAgIHJldHVybiBuZXcgZmxvYXRbXSB7Ci0gICAgICAgIDEsICAwLCAwLCAwLAotICAgICAg
ICAwLCAtMSwgMCwgMCwKLSAgICAgICAgMCwgIDAsIDEsIDAsCi0gICAgICAgIDAsICAxLCAwLCAx
fTsKLSAgfQotCi0gIC8vIE1hdHJpeCB3aXRoIHRyYW5zZm9ybSB4JyA9IDEgLSB4LgotICBwdWJs
aWMgc3RhdGljIGZpbmFsIGZsb2F0W10gaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSB7Ci0gICAgcmV0
dXJuIG5ldyBmbG9hdFtdIHsKLSAgICAgICAgLTEsIDAsIDAsIDAsCi0gICAgICAgICAwLCAxLCAw
LCAwLAotICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgIDEsIDAsIDAsIDF9OwotICB9Ci0g
IC8vIGNsYW5nLWZvcm1hdCBvbgotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRleHR1cmUgbWF0cml4
IHRoYXQgd2lsbCBoYXZlIHRoZSBlZmZlY3Qgb2Ygcm90YXRpbmcgdGhlIGZyYW1lIHxyb3RhdGlv
bkRlZ3JlZXwKLSAgICogY2xvY2t3aXNlIHdoZW4gcmVuZGVyZWQuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIGZsb2F0W10gcm90YXRlVGV4dHVyZU1hdHJpeChmbG9hdFtdIHRleHR1cmVNYXRyaXgs
IGZsb2F0IHJvdGF0aW9uRGVncmVlKSB7Ci0gICAgZmluYWwgZmxvYXRbXSByb3RhdGlvbk1hdHJp
eCA9IG5ldyBmbG9hdFsxNl07Ci0gICAgTWF0cml4LnNldFJvdGF0ZU0ocm90YXRpb25NYXRyaXgs
IDAsIHJvdGF0aW9uRGVncmVlLCAwLCAwLCAxKTsKLSAgICBhZGp1c3RPcmlnaW4ocm90YXRpb25N
YXRyaXgpOwotICAgIHJldHVybiBtdWx0aXBseU1hdHJpY2VzKHRleHR1cmVNYXRyaXgsIHJvdGF0
aW9uTWF0cml4KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIG5ldyBtYXRyaXggd2l0aCB0
aGUgcmVzdWx0IG9mIGEgKiBiLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmbG9hdFtdIG11bHRp
cGx5TWF0cmljZXMoZmxvYXRbXSBhLCBmbG9hdFtdIGIpIHsKLSAgICBmaW5hbCBmbG9hdFtdIHJl
c3VsdE1hdHJpeCA9IG5ldyBmbG9hdFsxNl07Ci0gICAgTWF0cml4Lm11bHRpcGx5TU0ocmVzdWx0
TWF0cml4LCAwLCBhLCAwLCBiLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0TWF0cml4OwotICB9Ci0K
LSAgLyoqCi0gICAqIFJldHVybnMgbGF5b3V0IHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0aGF0IGFw
cGxpZXMgYW4gb3B0aW9uYWwgbWlycm9yIGVmZmVjdCBhbmQgY29tcGVuc2F0ZXMKLSAgICogZm9y
IHZpZGVvIHZzIGRpc3BsYXkgYXNwZWN0IHJhdGlvLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBm
bG9hdFtdIGdldExheW91dE1hdHJpeCgKLSAgICAgIGJvb2xlYW4gbWlycm9yLCBmbG9hdCB2aWRl
b0FzcGVjdFJhdGlvLCBmbG9hdCBkaXNwbGF5QXNwZWN0UmF0aW8pIHsKLSAgICBmbG9hdCBzY2Fs
ZVggPSAxOwotICAgIGZsb2F0IHNjYWxlWSA9IDE7Ci0gICAgLy8gU2NhbGUgWCBvciBZIGRpbWVu
c2lvbiBzbyB0aGF0IHZpZGVvIGFuZCBkaXNwbGF5IHNpemUgaGF2ZSBzYW1lIGFzcGVjdCByYXRp
by4KLSAgICBpZiAoZGlzcGxheUFzcGVjdFJhdGlvID4gdmlkZW9Bc3BlY3RSYXRpbykgewotICAg
ICAgc2NhbGVZID0gdmlkZW9Bc3BlY3RSYXRpbyAvIGRpc3BsYXlBc3BlY3RSYXRpbzsKLSAgICB9
IGVsc2UgewotICAgICAgc2NhbGVYID0gZGlzcGxheUFzcGVjdFJhdGlvIC8gdmlkZW9Bc3BlY3RS
YXRpbzsKLSAgICB9Ci0gICAgLy8gQXBwbHkgb3B0aW9uYWwgaG9yaXpvbnRhbCBmbGlwLgotICAg
IGlmIChtaXJyb3IpIHsKLSAgICAgIHNjYWxlWCAqPSAtMTsKLSAgICB9Ci0gICAgZmluYWwgZmxv
YXQgbWF0cml4W10gPSBuZXcgZmxvYXRbMTZdOwotICAgIE1hdHJpeC5zZXRJZGVudGl0eU0obWF0
cml4LCAwKTsKLSAgICBNYXRyaXguc2NhbGVNKG1hdHJpeCwgMCwgc2NhbGVYLCBzY2FsZVksIDEp
OwotICAgIGFkanVzdE9yaWdpbihtYXRyaXgpOwotICAgIHJldHVybiBtYXRyaXg7Ci0gIH0KLQot
ICAvKioKLSAgICogQ2FsY3VsYXRlIGRpc3BsYXkgc2l6ZSBiYXNlZCBvbiBzY2FsaW5nIHR5cGUs
IHZpZGVvIGFzcGVjdCByYXRpbywgYW5kIG1heGltdW0gZGlzcGxheSBzaXplLgotICAgKi8KLSAg
cHVibGljIHN0YXRpYyBQb2ludCBnZXREaXNwbGF5U2l6ZSgKLSAgICAgIFNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlLCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvLCBpbnQgbWF4RGlzcGxheVdpZHRoLCBp
bnQgbWF4RGlzcGxheUhlaWdodCkgewotICAgIHJldHVybiBnZXREaXNwbGF5U2l6ZShjb252ZXJ0
U2NhbGluZ1R5cGVUb1Zpc2libGVGcmFjdGlvbihzY2FsaW5nVHlwZSksIHZpZGVvQXNwZWN0UmF0
aW8sCi0gICAgICAgIG1heERpc3BsYXlXaWR0aCwgbWF4RGlzcGxheUhlaWdodCk7Ci0gIH0KLQot
ICAvKioKLSAgICogTW92ZSB8bWF0cml4fCB0cmFuc2Zvcm1hdGlvbiBvcmlnaW4gdG8gKDAuNSwg
MC41KS4gVGhpcyBpcyB0aGUgb3JpZ2luIGZvciB0ZXh0dXJlIGNvb3JkaW5hdGVzCi0gICAqIHRo
YXQgYXJlIGluIHRoZSByYW5nZSAwIHRvIDEuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lk
IGFkanVzdE9yaWdpbihmbG9hdFtdIG1hdHJpeCkgewotICAgIC8vIE5vdGUgdGhhdCBPcGVuR0wg
aXMgdXNpbmcgY29sdW1uLW1ham9yIG9yZGVyLgotICAgIC8vIFByZSB0cmFuc2xhdGUgd2l0aCAt
MC41IHRvIG1vdmUgY29vcmRpbmF0ZXMgdG8gcmFuZ2UgWy0wLjUsIDAuNV0uCi0gICAgbWF0cml4
WzEyXSAtPSAwLjVmICogKG1hdHJpeFswXSArIG1hdHJpeFs0XSk7Ci0gICAgbWF0cml4WzEzXSAt
PSAwLjVmICogKG1hdHJpeFsxXSArIG1hdHJpeFs1XSk7Ci0gICAgLy8gUG9zdCB0cmFuc2xhdGUg
d2l0aCAwLjUgdG8gbW92ZSBjb29yZGluYXRlcyB0byByYW5nZSBbMCwgMV0uCi0gICAgbWF0cml4
WzEyXSArPSAwLjVmOwotICAgIG1hdHJpeFsxM10gKz0gMC41ZjsKLSAgfQotCi0gIC8qKgotICAg
KiBFYWNoIHNjYWxpbmcgdHlwZSBoYXMgYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlIHRvIGEg
bnVtZXJpYyBtaW5pbXVtIGZyYWN0aW9uIG9mIHRoZSB2aWRlbwotICAgKiB0aGF0IG11c3QgcmVt
YWluIHZpc2libGUuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmbG9hdCBjb252ZXJ0U2NhbGlu
Z1R5cGVUb1Zpc2libGVGcmFjdGlvbihTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSkgewotICAgIHN3
aXRjaCAoc2NhbGluZ1R5cGUpIHsKLSAgICAgIGNhc2UgU0NBTEVfQVNQRUNUX0ZJVDoKLSAgICAg
ICAgcmV0dXJuIDEuMGY7Ci0gICAgICBjYXNlIFNDQUxFX0FTUEVDVF9GSUxMOgotICAgICAgICBy
ZXR1cm4gMC4wZjsKLSAgICAgIGNhc2UgU0NBTEVfQVNQRUNUX0JBTEFOQ0VEOgotICAgICAgICBy
ZXR1cm4gQkFMQU5DRURfVklTSUJMRV9GUkFDVElPTjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0gIH0KLQotICAv
KioKLSAgICogQ2FsY3VsYXRlIGRpc3BsYXkgc2l6ZSBiYXNlZCBvbiBtaW5pbXVtIGZyYWN0aW9u
IG9mIHRoZSB2aWRlbyB0aGF0IG11c3QgcmVtYWluIHZpc2libGUsCi0gICAqIHZpZGVvIGFzcGVj
dCByYXRpbywgYW5kIG1heGltdW0gZGlzcGxheSBzaXplLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0
aWMgUG9pbnQgZ2V0RGlzcGxheVNpemUoCi0gICAgICBmbG9hdCBtaW5WaXNpYmxlRnJhY3Rpb24s
IGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8sIGludCBtYXhEaXNwbGF5V2lkdGgsIGludCBtYXhEaXNw
bGF5SGVpZ2h0KSB7Ci0gICAgLy8gSWYgdGhlcmUgaXMgbm8gY29uc3RyYWludCBvbiB0aGUgYW1v
dW50IG9mIGNyb3BwaW5nLCBmaWxsIHRoZSBhbGxvd2VkIGRpc3BsYXkgYXJlYS4KLSAgICBpZiAo
bWluVmlzaWJsZUZyYWN0aW9uID09IDAgfHwgdmlkZW9Bc3BlY3RSYXRpbyA9PSAwKSB7Ci0gICAg
ICByZXR1cm4gbmV3IFBvaW50KG1heERpc3BsYXlXaWR0aCwgbWF4RGlzcGxheUhlaWdodCk7Ci0g
ICAgfQotICAgIC8vIEVhY2ggZGltZW5zaW9uIGlzIGNvbnN0cmFpbmVkIG9uIG1heCBkaXNwbGF5
IHNpemUgYW5kIGhvdyBtdWNoIHdlIGFyZSBhbGxvd2VkIHRvIGNyb3AuCi0gICAgZmluYWwgaW50
IHdpZHRoID0gTWF0aC5taW4oCi0gICAgICAgIG1heERpc3BsYXlXaWR0aCwgTWF0aC5yb3VuZCht
YXhEaXNwbGF5SGVpZ2h0IC8gbWluVmlzaWJsZUZyYWN0aW9uICogdmlkZW9Bc3BlY3RSYXRpbykp
OwotICAgIGZpbmFsIGludCBoZWlnaHQgPSBNYXRoLm1pbigKLSAgICAgICAgbWF4RGlzcGxheUhl
aWdodCwgTWF0aC5yb3VuZChtYXhEaXNwbGF5V2lkdGggLyBtaW5WaXNpYmxlRnJhY3Rpb24gLyB2
aWRlb0FzcGVjdFJhdGlvKSk7Ci0gICAgcmV0dXJuIG5ldyBQb2ludCh3aWR0aCwgaGVpZ2h0KTsK
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmEKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUGFyYW1ldGVycy5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci0KLS8qKgotICogVGhlIHBhcmFt
ZXRlcnMgZm9yIGFuIHtAY29kZSBSdHBTZW5kZXJ9LCBhcyBkZWZpbmVkIGluCi0gKiBodHRwOi8v
dzNjLmdpdGh1Yi5pby93ZWJydGMtcGMvI3J0Y3J0cHNlbmRlci1pbnRlcmZhY2UuCi0gKi8KLXB1
YmxpYyBjbGFzcyBSdHBQYXJhbWV0ZXJzIHsKLSAgcHVibGljIHN0YXRpYyBjbGFzcyBFbmNvZGlu
ZyB7Ci0gICAgcHVibGljIGJvb2xlYW4gYWN0aXZlID0gdHJ1ZTsKLSAgICAvLyBBIG51bGwgdmFs
dWUgbWVhbnMgIm5vIG1heGltdW0gYml0cmF0ZSIuCi0gICAgcHVibGljIEludGVnZXIgbWF4Qml0
cmF0ZUJwczsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29kZWMgewotICAgIGludCBw
YXlsb2FkVHlwZTsKLSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgaW50IGNsb2NrUmF0ZTsKLSAg
ICBpbnQgY2hhbm5lbHMgPSAxOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8RW5j
b2Rpbmc+IGVuY29kaW5nczsKLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8Q29kZWM+IGNvZGVj
czsKLQotICBwdWJsaWMgUnRwUGFyYW1ldGVycygpIHsKLSAgICBlbmNvZGluZ3MgPSBuZXcgTGlu
a2VkTGlzdDxFbmNvZGluZz4oKTsKLSAgICBjb2RlY3MgPSBuZXcgTGlua2VkTGlzdDxDb2RlYz4o
KTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUmVjZWl2ZXIuamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBSdHBSZWNlaXZlckludGVyZmFjZS4gKi8K
LXB1YmxpYyBjbGFzcyBSdHBSZWNlaXZlciB7Ci0gIGZpbmFsIGxvbmcgbmF0aXZlUnRwUmVjZWl2
ZXI7Ci0KLSAgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrIGNhY2hlZFRyYWNrOwotCi0gIHB1Ymxp
YyBSdHBSZWNlaXZlcihsb25nIG5hdGl2ZVJ0cFJlY2VpdmVyKSB7Ci0gICAgdGhpcy5uYXRpdmVS
dHBSZWNlaXZlciA9IG5hdGl2ZVJ0cFJlY2VpdmVyOwotICAgIGxvbmcgdHJhY2sgPSBuYXRpdmVH
ZXRUcmFjayhuYXRpdmVSdHBSZWNlaXZlcik7Ci0gICAgLy8gV2UgY2FuIGFzc3VtZSB0aGF0IGFu
IFJ0cFJlY2VpdmVyIGFsd2F5cyBoYXMgYW4gYXNzb2NpYXRlZCB0cmFjay4KLSAgICBjYWNoZWRU
cmFjayA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrKHRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyBNZWRp
YVN0cmVhbVRyYWNrIHRyYWNrKCkgewotICAgIHJldHVybiBjYWNoZWRUcmFjazsKLSAgfQotCi0g
IHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRlcnMoUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzKSB7
Ci0gICAgcmV0dXJuIG5hdGl2ZVNldFBhcmFtZXRlcnMobmF0aXZlUnRwUmVjZWl2ZXIsIHBhcmFt
ZXRlcnMpOwotICB9Ci0KLSAgcHVibGljIFJ0cFBhcmFtZXRlcnMgZ2V0UGFyYW1ldGVycygpIHsK
LSAgICByZXR1cm4gbmF0aXZlR2V0UGFyYW1ldGVycyhuYXRpdmVSdHBSZWNlaXZlcik7Ci0gIH0K
LQotICBwdWJsaWMgU3RyaW5nIGlkKCkgewotICAgIHJldHVybiBuYXRpdmVJZChuYXRpdmVSdHBS
ZWNlaXZlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNhY2hlZFRy
YWNrLmRpc3Bvc2UoKTsKLSAgICBmcmVlKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAgfQotCi0gIC8v
IFRoaXMgc2hvdWxkIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB0cmFjay4K
LSAgLy8gV2lsbCBiZSByZWxlYXNlZCBpbiBkaXNwb3NlKCkuCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBsb25nIG5hdGl2ZUdldFRyYWNrKGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpOwotCi0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVNldFBhcmFtZXRlcnMoCi0gICAgICBs
b25nIG5hdGl2ZVJ0cFJlY2VpdmVyLCBSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpOwotCi0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSBSdHBQYXJhbWV0ZXJzIG5hdGl2ZUdldFBhcmFtZXRlcnMobG9u
ZyBuYXRpdmVSdHBSZWNlaXZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0cmluZyBu
YXRpdmVJZChsb25nIG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpOwotfTsKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvUnRwU2VuZGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9S
dHBTZW5kZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBT
ZW5kZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysg
UnRwU2VuZGVySW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIFJ0cFNlbmRlciB7Ci0gIGZpbmFs
IGxvbmcgbmF0aXZlUnRwU2VuZGVyOwotCi0gIHByaXZhdGUgTWVkaWFTdHJlYW1UcmFjayBjYWNo
ZWRUcmFjazsKLSAgcHJpdmF0ZSBib29sZWFuIG93bnNUcmFjayA9IHRydWU7Ci0KLSAgcHVibGlj
IFJ0cFNlbmRlcihsb25nIG5hdGl2ZVJ0cFNlbmRlcikgewotICAgIHRoaXMubmF0aXZlUnRwU2Vu
ZGVyID0gbmF0aXZlUnRwU2VuZGVyOwotICAgIGxvbmcgdHJhY2sgPSBuYXRpdmVHZXRUcmFjayhu
YXRpdmVSdHBTZW5kZXIpOwotICAgIC8vIEl0IG1heSBiZSBwb3NzaWJsZSBmb3IgYW4gUnRwU2Vu
ZGVyIHRvIGJlIGNyZWF0ZWQgd2l0aG91dCBhIHRyYWNrLgotICAgIGNhY2hlZFRyYWNrID0gKHRy
YWNrID09IDApID8gbnVsbCA6IG5ldyBNZWRpYVN0cmVhbVRyYWNrKHRyYWNrKTsKLSAgfQotCi0g
IC8vIElmIHx0YWtlT3duZXJzaGlwfCBpcyB0cnVlLCB0aGUgUnRwU2VuZGVyIHRha2VzIG93bmVy
c2hpcCBvZiB0aGUgdHJhY2sKLSAgLy8gZnJvbSB0aGUgY2FsbGVyLCBhbmQgd2lsbCBhdXRvLWRp
c3Bvc2Ugb2YgaXQgd2hlbiBubyBsb25nZXIgbmVlZGVkLgotICAvLyB8dGFrZU93bmVyc2hpcHwg
c2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUgY2FsbGVyIG93bnMgdGhlIHRyYWNrOyBpdCBpcwot
ICAvLyBub3QgYXBwcm9wcmlhdGUgd2hlbiB0aGUgdHJhY2sgaXMgb3duZWQgYnksIGZvciBleGFt
cGxlLCBhbm90aGVyIFJ0cFNlbmRlcgotICAvLyBvciBhIE1lZGlhU3RyZWFtLgotICBwdWJsaWMg
Ym9vbGVhbiBzZXRUcmFjayhNZWRpYVN0cmVhbVRyYWNrIHRyYWNrLCBib29sZWFuIHRha2VPd25l
cnNoaXApIHsKLSAgICBpZiAoIW5hdGl2ZVNldFRyYWNrKG5hdGl2ZVJ0cFNlbmRlciwgKHRyYWNr
ID09IG51bGwpID8gMCA6IHRyYWNrLm5hdGl2ZVRyYWNrKSkgewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpZiAoY2FjaGVkVHJhY2sgIT0gbnVsbCAmJiBvd25zVHJhY2spIHsKLSAg
ICAgIGNhY2hlZFRyYWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgY2FjaGVkVHJhY2sgPSB0cmFj
azsKLSAgICBvd25zVHJhY2sgPSB0YWtlT3duZXJzaGlwOwotICAgIHJldHVybiB0cnVlOwotICB9
Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtVHJhY2sgdHJhY2soKSB7Ci0gICAgcmV0dXJuIGNhY2hl
ZFRyYWNrOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVycyhSdHBQYXJhbWV0
ZXJzIHBhcmFtZXRlcnMpIHsKLSAgICByZXR1cm4gbmF0aXZlU2V0UGFyYW1ldGVycyhuYXRpdmVS
dHBTZW5kZXIsIHBhcmFtZXRlcnMpOwotICB9Ci0KLSAgcHVibGljIFJ0cFBhcmFtZXRlcnMgZ2V0
UGFyYW1ldGVycygpIHsKLSAgICByZXR1cm4gbmF0aXZlR2V0UGFyYW1ldGVycyhuYXRpdmVSdHBT
ZW5kZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBpZCgpIHsKLSAgICByZXR1cm4gbmF0aXZl
SWQobmF0aXZlUnRwU2VuZGVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0g
ICAgaWYgKGNhY2hlZFRyYWNrICE9IG51bGwgJiYgb3duc1RyYWNrKSB7Ci0gICAgICBjYWNoZWRU
cmFjay5kaXNwb3NlKCk7Ci0gICAgfQotICAgIGZyZWUobmF0aXZlUnRwU2VuZGVyKTsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVNldFRyYWNrKGxvbmcgbmF0
aXZlUnRwU2VuZGVyLCBsb25nIG5hdGl2ZVRyYWNrKTsKLQotICAvLyBUaGlzIHNob3VsZCBpbmNy
ZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgdHJhY2suCi0gIC8vIFdpbGwgYmUgcmVs
ZWFzZWQgaW4gZGlzcG9zZSgpIG9yIHNldFRyYWNrKCkuCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSBsb25nIG5hdGl2ZUdldFRyYWNrKGxvbmcgbmF0aXZlUnRwU2VuZGVyKTsKLQotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRQYXJhbWV0ZXJzKGxvbmcgbmF0aXZlUnRw
U2VuZGVyLCBSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpOwotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBSdHBQYXJhbWV0ZXJzIG5hdGl2ZUdldFBhcmFtZXRlcnMobG9uZyBuYXRpdmVSdHBTZW5k
ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlSWQobG9uZyBuYXRp
dmVSdHBTZW5kZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBu
YXRpdmVSdHBTZW5kZXIpOwotfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2NyZWVuQ2FwdHVy
ZXJBbmRyb2lkLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TY3JlZW5DYXB0
dXJlckFuZHJvaWQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9T
Y3JlZW5DYXB0dXJlckFuZHJvaWQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMyArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRy
b2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5J
bnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyOwot
aW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuZGlzcGxheS5WaXJ0dWFsRGlzcGxheTsKLWltcG9ydCBh
bmRyb2lkLm1lZGlhLnByb2plY3Rpb24uTWVkaWFQcm9qZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQu
bWVkaWEucHJvamVjdGlvbi5NZWRpYVByb2plY3Rpb25NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQu
dmlldy5TdXJmYWNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBWaWRlb0NhcHR1cmVy
IHRvIGNhcHR1cmUgdGhlIHNjcmVlbiBjb250ZW50IGFzIGEgdmlkZW8gc3RyZWFtLgotICogQ2Fw
dHVyaW5nIGlzIGRvbmUgYnkge0Bjb2RlIE1lZGlhUHJvamVjdGlvbn0gb24gYSB7QGNvZGUgU3Vy
ZmFjZVRleHR1cmV9LiBXZSBpbnRlcmFjdCB3aXRoIHRoaXMKLSAqIHtAY29kZSBTdXJmYWNlVGV4
dHVyZX0gdXNpbmcgYSB7QGNvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9LgotICogVGhlIHtAY29k
ZSBTdXJmYWNlVGV4dHVyZUhlbHBlcn0gaXMgY3JlYXRlZCBieSB0aGUgbmF0aXZlIGNvZGUgYW5k
IHBhc3NlZCB0byB0aGlzIGNhcHR1cmVyIGluCi0gKiB7QGNvZGUgVmlkZW9DYXB0dXJlci5pbml0
aWFsaXplKCl9LiBPbiByZWNlaXZpbmcgYSBuZXcgZnJhbWUsIHRoaXMgY2FwdHVyZXIgcGFzc2Vz
IGl0Ci0gKiBhcyBhIHRleHR1cmUgdG8gdGhlIG5hdGl2ZSBjb2RlIHZpYSB7QGNvZGUgQ2FwdHVy
ZXJPYnNlcnZlci5vblRleHR1cmVGcmFtZUNhcHR1cmVkKCl9LiBUaGlzIHRha2VzCi0gKiBwbGFj
ZSBvbiB0aGUgSGFuZGxlclRocmVhZCBvZiB0aGUgZ2l2ZW4ge0Bjb2RlIFN1cmZhY2VUZXh0dXJl
SGVscGVyfS4gV2hlbiBkb25lIHdpdGggZWFjaCBmcmFtZSwKLSAqIHRoZSBuYXRpdmUgY29kZSBy
ZXR1cm5zIHRoZSBidWZmZXIgdG8gdGhlICB7QGNvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9IHRv
IGJlIHVzZWQgZm9yIG5ldwotICogZnJhbWVzLiBBdCBhbnkgdGltZSwgYXQgbW9zdCBvbmUgZnJh
bWUgaXMgYmVpbmcgcHJvY2Vzc2VkLgotICovCi1AVGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNz
IFNjcmVlbkNhcHR1cmVyQW5kcm9pZAotICAgIGltcGxlbWVudHMgVmlkZW9DYXB0dXJlciwgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5lciB7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNQTEFZX0ZMQUdTID0KLSAgICAgIERpc3BsYXlNYW5h
Z2VyLlZJUlRVQUxfRElTUExBWV9GTEFHX1BVQkxJQyB8IERpc3BsYXlNYW5hZ2VyLlZJUlRVQUxf
RElTUExBWV9GTEFHX1BSRVNFTlRBVElPTjsKLSAgLy8gRFBJIGZvciBWaXJ0dWFsRGlzcGxheSwg
ZG9lcyBub3Qgc2VlbSB0byBtYXR0ZXIgZm9yIHVzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgVklSVFVBTF9ESVNQTEFZX0RQSSA9IDQwMDsKLQotICBwcml2YXRlIGZpbmFsIEludGVudCBt
ZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YTsKLSAgcHJpdmF0ZSBmaW5hbCBNZWRp
YVByb2plY3Rpb24uQ2FsbGJhY2sgbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2s7Ci0KLSAgcHJpdmF0
ZSBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAgcHJpdmF0ZSBWaXJ0dWFsRGlz
cGxheSB2aXJ0dWFsRGlzcGxheTsKLSAgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJm
YWNlVGV4dHVyZUhlbHBlcjsKLSAgcHJpdmF0ZSBDYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2Jz
ZXJ2ZXI7Ci0gIHByaXZhdGUgbG9uZyBudW1DYXB0dXJlZEZyYW1lcyA9IDA7Ci0gIHByaXZhdGUg
TWVkaWFQcm9qZWN0aW9uIG1lZGlhUHJvamVjdGlvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRGlz
cG9zZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBNZWRpYVByb2plY3Rpb25NYW5hZ2VyIG1lZGlhUHJv
amVjdGlvbk1hbmFnZXI7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBuZXcgU2NyZWVuIENh
cHR1cmVyLgotICAgKgotICAgKiBAcGFyYW0gbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3Vs
dERhdGEgdGhlIHJlc3VsdCBkYXRhIG9mIE1lZGlhUHJvamVjdGlvbiBwZXJtaXNzaW9uCi0gICAq
ICAgICBhY3Rpdml0eTsgdGhlIGNhbGxpbmcgYXBwIG11c3QgdmFsaWRhdGUgdGhhdCByZXN1bHQg
Y29kZSBpcyBBY3Rpdml0eS5SRVNVTFRfT0sgYmVmb3JlCi0gICAqICAgICBjYWxsaW5nIHRoaXMg
bWV0aG9kLgotICAgKiBAcGFyYW0gbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2sgTWVkaWFQcm9qZWN0
aW9uIGNhbGxiYWNrIHRvIGltcGxlbWVudCBhcHBsaWNhdGlvbiBzcGVjaWZpYwotICAgKiAgICAg
bG9naWMgaW4gZXZlbnRzIHN1Y2ggYXMgd2hlbiB0aGUgdXNlciByZXZva2VzIGEgcHJldmlvdXNs
eSBncmFudGVkIGNhcHR1cmUgcGVybWlzc2lvbi4KLSAgKiovCi0gIHB1YmxpYyBTY3JlZW5DYXB0
dXJlckFuZHJvaWQoSW50ZW50IG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhLAot
ICAgICAgTWVkaWFQcm9qZWN0aW9uLkNhbGxiYWNrIG1lZGlhUHJvamVjdGlvbkNhbGxiYWNrKSB7
Ci0gICAgdGhpcy5tZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YSA9IG1lZGlhUHJv
amVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhOwotICAgIHRoaXMubWVkaWFQcm9qZWN0aW9uQ2Fs
bGJhY2sgPSBtZWRpYVByb2plY3Rpb25DYWxsYmFjazsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBj
aGVja05vdERpc3Bvc2VkKCkgewotICAgIGlmIChpc0Rpc3Bvc2VkKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiY2FwdHVyZXIgaXMgZGlzcG9zZWQuIik7Ci0gICAgfQotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBpbml0aWFsaXplKGZp
bmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLAotICAgICAgZmlu
YWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsIGZpbmFsIFZpZGVvQ2FwdHVyZXIuQ2FwdHVy
ZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyKSB7Ci0gICAgY2hlY2tOb3REaXNwb3NlZCgpOwot
Ci0gICAgaWYgKGNhcHR1cmVyT2JzZXJ2ZXIgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oImNhcHR1cmVyT2JzZXJ2ZXIgbm90IHNldC4iKTsKLSAgICB9Ci0gICAg
dGhpcy5jYXB0dXJlck9ic2VydmVyID0gY2FwdHVyZXJPYnNlcnZlcjsKLQotICAgIGlmIChzdXJm
YWNlVGV4dHVyZUhlbHBlciA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigic3VyZmFjZVRleHR1cmVIZWxwZXIgbm90IHNldC4iKTsKLSAgICB9Ci0gICAgdGhpcy5z
dXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotCi0gICAgbWVkaWFQ
cm9qZWN0aW9uTWFuYWdlciA9IChNZWRpYVByb2plY3Rpb25NYW5hZ2VyKSBhcHBsaWNhdGlvbkNv
bnRleHQuZ2V0U3lzdGVtU2VydmljZSgKLSAgICAgICAgQ29udGV4dC5NRURJQV9QUk9KRUNUSU9O
X1NFUlZJQ0UpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9p
ZCBzdGFydENhcHR1cmUoCi0gICAgICBmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQs
IGZpbmFsIGludCBpZ25vcmVkRnJhbWVyYXRlKSB7Ci0gICAgY2hlY2tOb3REaXNwb3NlZCgpOwot
Ci0gICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotCi0g
ICAgbWVkaWFQcm9qZWN0aW9uID0gbWVkaWFQcm9qZWN0aW9uTWFuYWdlci5nZXRNZWRpYVByb2pl
Y3Rpb24oCi0gICAgICAgIEFjdGl2aXR5LlJFU1VMVF9PSywgbWVkaWFQcm9qZWN0aW9uUGVybWlz
c2lvblJlc3VsdERhdGEpOwotCi0gICAgLy8gTGV0IE1lZGlhUHJvamVjdGlvbiBjYWxsYmFjayB1
c2UgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyIHRocmVhZC4KLSAgICBtZWRpYVByb2plY3Rpb24u
cmVnaXN0ZXJDYWxsYmFjayhtZWRpYVByb2plY3Rpb25DYWxsYmFjaywgc3VyZmFjZVRleHR1cmVI
ZWxwZXIuZ2V0SGFuZGxlcigpKTsKLQotICAgIGNyZWF0ZVZpcnR1YWxEaXNwbGF5KCk7Ci0gICAg
Y2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZCh0cnVlKTsKLSAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhTY3JlZW5DYXB0dXJlckFuZHJvaWQudGhpcyk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0b3BDYXB0dXJl
KCkgewotICAgIGNoZWNrTm90RGlzcG9zZWQoKTsKLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZy
b250VW5pbnRlcnJ1cHRpYmx5KHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKSwgbmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLSAgICAgICAg
Y2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RvcHBlZCgpOwotCi0gICAgICAgIGlmICh2aXJ0
dWFsRGlzcGxheSAhPSBudWxsKSB7Ci0gICAgICAgICAgdmlydHVhbERpc3BsYXkucmVsZWFzZSgp
OwotICAgICAgICAgIHZpcnR1YWxEaXNwbGF5ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtZWRpYVByb2plY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgIC8vIFVucmVnaXN0ZXIg
dGhlIGNhbGxiYWNrIGJlZm9yZSBzdG9wcGluZywgb3RoZXJ3aXNlIHRoZSBjYWxsYmFjayByZWN1
cnNpdmVseQotICAgICAgICAgIC8vIGNhbGxzIHRoaXMgbWV0aG9kLgotICAgICAgICAgIG1lZGlh
UHJvamVjdGlvbi51bnJlZ2lzdGVyQ2FsbGJhY2sobWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2spOwot
ICAgICAgICAgIG1lZGlhUHJvamVjdGlvbi5zdG9wKCk7Ci0gICAgICAgICAgbWVkaWFQcm9qZWN0
aW9uID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBkaXNwb3NlKCkgewotICAgIGlzRGlzcG9z
ZWQgPSB0cnVlOwotICB9Ci0KLSAgLyoqCi0gICAqIENoYW5nZXMgb3V0cHV0IHZpZGVvIGZvcm1h
dC4gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gc2NhbGUgdGhlIG91dHB1dAotICAgKiB2aWRl
bywgb3IgdG8gY2hhbmdlIG9yaWVudGF0aW9uIHdoZW4gdGhlIGNhcHR1cmVkIHNjcmVlbiBpcyBy
b3RhdGVkIGZvciBleGFtcGxlLgotICAgKgotICAgKiBAcGFyYW0gd2lkdGggbmV3IG91dHB1dCB2
aWRlbyB3aWR0aAotICAgKiBAcGFyYW0gaGVpZ2h0IG5ldyBvdXRwdXQgdmlkZW8gaGVpZ2h0Ci0g
ICAqIEBwYXJhbSBpZ25vcmVkRnJhbWVyYXRlIGlnbm9yZWQKLSAgICovCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdCgKLSAgICAgIGZp
bmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwgZmluYWwgaW50IGlnbm9yZWRGcmFtZXJh
dGUpIHsKLSAgICBjaGVja05vdERpc3Bvc2VkKCk7Ci0KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7
Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBpZiAodmlydHVhbERpc3BsYXkgPT0g
bnVsbCkgewotICAgICAgLy8gQ2FwdHVyZXIgaXMgc3RvcHBlZCwgdGhlIHZpcnR1YWwgZGlzcGxh
eSB3aWxsIGJlIGNyZWF0ZWQgaW4gc3RhcnRDYXB0dWVyKCkuCi0gICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gQ3JlYXRlIGEgbmV3IHZpcnR1YWwgZGlzcGxheSBvbiB0aGUgc3VyZmFjZVRl
eHR1cmVIZWxwZXIgdGhyZWFkIHRvIGF2b2lkIGludGVyZmVyZW5jZQotICAgIC8vIHdpdGggZnJh
bWUgcHJvY2Vzc2luZywgd2hpY2ggaGFwcGVucyBvbiB0aGUgc2FtZSB0aHJlYWQgKHdlIHNlcmlh
bGl6ZSBldmVudHMgYnkgcnVubmluZwotICAgIC8vIHRoZW0gb24gdGhlIHNhbWUgdGhyZWFkKS4K
LSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KHN1cmZhY2VUZXh0
dXJlSGVscGVyLmdldEhhbmRsZXIoKSwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHZpcnR1YWxEaXNwbGF5LnJlbGVh
c2UoKTsKLSAgICAgICAgY3JlYXRlVmlydHVhbERpc3BsYXkoKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVWaXJ0dWFsRGlzcGxheSgpIHsKLSAgICBzdXJm
YWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpLnNldERlZmF1bHRCdWZmZXJTaXpl
KHdpZHRoLCBoZWlnaHQpOwotICAgIHZpcnR1YWxEaXNwbGF5ID0gbWVkaWFQcm9qZWN0aW9uLmNy
ZWF0ZVZpcnR1YWxEaXNwbGF5KCJXZWJSVENfU2NyZWVuQ2FwdHVyZSIsIHdpZHRoLCBoZWlnaHQs
Ci0gICAgICAgIFZJUlRVQUxfRElTUExBWV9EUEksIERJU1BMQVlfRkxBR1MsIG5ldyBTdXJmYWNl
KHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpLAotICAgICAgICBudWxs
IC8qIGNhbGxiYWNrICovLCBudWxsIC8qIGNhbGxiYWNrIGhhbmRsZXIgKi8pOwotICB9Ci0KLSAg
Ly8gVGhpcyBpcyBjYWxsZWQgb24gdGhlIGludGVybmFsIGxvb3BlciB0aHJlYWQgb2Yge0BDb2Rl
IFN1cmZhY2VUZXh0dXJlSGVscGVyfS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVGV4
dHVyZUZyYW1lQXZhaWxhYmxlKGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0
cml4LCBsb25nIHRpbWVzdGFtcE5zKSB7Ci0gICAgbnVtQ2FwdHVyZWRGcmFtZXMrKzsKLSAgICBj
YXB0dXJlck9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIHdpZHRoLCBo
ZWlnaHQsIG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LCAwIC8qIHJvdGF0aW9uICovLCB0
aW1lc3RhbXBOcyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNTY3Jl
ZW5jYXN0KCkgewotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGxvbmcgZ2V0TnVt
Q2FwdHVyZWRGcmFtZXMoKSB7Ci0gICAgcmV0dXJuIG51bUNhcHR1cmVkRnJhbWVzOwotICB9Ci19
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1NkcE9ic2VydmVyLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9TZHBPYnNlcnZlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1NkcE9ic2VydmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNiAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBJ
bnRlcmZhY2UgZm9yIG9ic2VydmluZyBTRFAtcmVsYXRlZCBldmVudHMuICovCi1wdWJsaWMgaW50
ZXJmYWNlIFNkcE9ic2VydmVyIHsKLSAgLyoqIENhbGxlZCBvbiBzdWNjZXNzIG9mIENyZWF0ZXtP
ZmZlcixBbnN3ZXJ9KCkuICovCi0gIHB1YmxpYyB2b2lkIG9uQ3JlYXRlU3VjY2VzcyhTZXNzaW9u
RGVzY3JpcHRpb24gc2RwKTsKLQotICAvKiogQ2FsbGVkIG9uIHN1Y2Nlc3Mgb2YgU2V0e0xvY2Fs
LFJlbW90ZX1EZXNjcmlwdGlvbigpLiAqLwotICBwdWJsaWMgdm9pZCBvblNldFN1Y2Nlc3MoKTsK
LQotICAvKiogQ2FsbGVkIG9uIGVycm9yIG9mIENyZWF0ZXtPZmZlcixBbnN3ZXJ9KCkuICovCi0g
IHB1YmxpYyB2b2lkIG9uQ3JlYXRlRmFpbHVyZShTdHJpbmcgZXJyb3IpOwotCi0gIC8qKiBDYWxs
ZWQgb24gZXJyb3Igb2YgU2V0e0xvY2FsLFJlbW90ZX1EZXNjcmlwdGlvbigpLiAqLwotICBwdWJs
aWMgdm9pZCBvblNldEZhaWx1cmUoU3RyaW5nIGVycm9yKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQx
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoq
Ci0gKiBEZXNjcmlwdGlvbiBvZiBhbiBSRkMgNDU2NiBTZXNzaW9uLgotICogU0RQcyBhcmUgcGFz
c2VkIGFzIHNlcmlhbGl6ZWQgU3RyaW5ncyBpbiBKYXZhLWxhbmQgYW5kIGFyZSBtYXRlcmlhbGl6
ZWQKLSAqIHRvIFNlc3Npb25EZXNjcmlwdGlvbkludGVyZmFjZSBhcyBhcHByb3ByaWF0ZSBpbiB0
aGUgSk5JIGxheWVyLgotICovCi1wdWJsaWMgY2xhc3MgU2Vzc2lvbkRlc2NyaXB0aW9uIHsKLSAg
LyoqIEphdmEtbGFuZCBlbnVtIHZlcnNpb24gb2YgU2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNl
J3MgdHlwZSgpIHN0cmluZy4gKi8KLSAgcHVibGljIHN0YXRpYyBlbnVtIFR5cGUgewotICAgIE9G
RkVSLAotICAgIFBSQU5TV0VSLAotICAgIEFOU1dFUjsKLQotICAgIHB1YmxpYyBTdHJpbmcgY2Fu
b25pY2FsRm9ybSgpIHsKLSAgICAgIHJldHVybiBuYW1lKCkudG9Mb3dlckNhc2UoKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgc3RhdGljIFR5cGUgZnJvbUNhbm9uaWNhbEZvcm0oU3RyaW5nIGNhbm9u
aWNhbCkgewotICAgICAgcmV0dXJuIFR5cGUudmFsdWVPZihUeXBlLmNsYXNzLCBjYW5vbmljYWwu
dG9VcHBlckNhc2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFR5cGUgdHlwZTsK
LSAgcHVibGljIGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbjsKLQotICBwdWJsaWMgU2Vzc2lvbkRl
c2NyaXB0aW9uKFR5cGUgdHlwZSwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgdGhpcy50eXBl
ID0gdHlwZTsKLSAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvU3RhdHNPYnNlcnZlci5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvU3RhdHNPYnNlcnZlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1N0YXRzT2JzZXJ2ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoq
IEludGVyZmFjZSBmb3Igb2JzZXJ2aW5nIFN0YXRzIHJlcG9ydHMgKHNlZSB3ZWJydGM6OlN0YXRz
T2JzZXJ2ZXJzKS4gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHNPYnNlcnZlciB7Ci0gIC8qKiBD
YWxsZWQgd2hlbiB0aGUgcmVwb3J0cyBhcmUgcmVhZHkuKi8KLSAgcHVibGljIHZvaWQgb25Db21w
bGV0ZShTdGF0c1JlcG9ydFtdIHJlcG9ydHMpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9T
dGF0c1JlcG9ydC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3RhdHNSZXBv
cnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c1JlcG9y
dC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2YSB2ZXJzaW9uIG9mIHdlYnJ0Yzo6U3Rh
dHNSZXBvcnQuICovCi1wdWJsaWMgY2xhc3MgU3RhdHNSZXBvcnQgewotICAvKiogSmF2YSB2ZXJz
aW9uIG9mIHdlYnJ0Yzo6U3RhdHNSZXBvcnQ6OlZhbHVlLiAqLwotICBwdWJsaWMgc3RhdGljIGNs
YXNzIFZhbHVlIHsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIG5hbWU7Ci0gICAgcHVibGljIGZp
bmFsIFN0cmluZyB2YWx1ZTsKLQotICAgIHB1YmxpYyBWYWx1ZShTdHJpbmcgbmFtZSwgU3RyaW5n
IHZhbHVlKSB7Ci0gICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgdGhpcy52YWx1ZSA9IHZh
bHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgYnVpbGRlci5h
cHBlbmQoIlsiKS5hcHBlbmQobmFtZSkuYXBwZW5kKCI6ICIpLmFwcGVuZCh2YWx1ZSkuYXBwZW5k
KCJdIik7Ci0gICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KLSAgfQotCi0g
IHB1YmxpYyBmaW5hbCBTdHJpbmcgaWQ7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgdHlwZTsKLSAg
Ly8gVGltZSBzaW5jZSAxOTcwLTAxLTAxVDAwOjAwOjAwWiBpbiBtaWxsaXNlY29uZHMuCi0gIHB1
YmxpYyBmaW5hbCBkb3VibGUgdGltZXN0YW1wOwotICBwdWJsaWMgZmluYWwgVmFsdWVbXSB2YWx1
ZXM7Ci0KLSAgcHVibGljIFN0YXRzUmVwb3J0KFN0cmluZyBpZCwgU3RyaW5nIHR5cGUsIGRvdWJs
ZSB0aW1lc3RhbXAsIFZhbHVlW10gdmFsdWVzKSB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICAgIHRo
aXMudHlwZSA9IHR5cGU7Ci0gICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgdGhp
cy52YWx1ZXMgPSB2YWx1ZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewot
ICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgYnVp
bGRlci5hcHBlbmQoImlkOiAiKQotICAgICAgICAuYXBwZW5kKGlkKQotICAgICAgICAuYXBwZW5k
KCIsIHR5cGU6ICIpCi0gICAgICAgIC5hcHBlbmQodHlwZSkKLSAgICAgICAgLmFwcGVuZCgiLCB0
aW1lc3RhbXA6ICIpCi0gICAgICAgIC5hcHBlbmQodGltZXN0YW1wKQotICAgICAgICAuYXBwZW5k
KCIsIHZhbHVlczogIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlc1tpXS50b1N0cmluZygpKS5hcHBlbmQo
IiwgIik7Ci0gICAgfQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXIuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXIuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDI4MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJl
OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMxMUV4dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5n
bC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9zLkhh
bmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQu
b3MuU3lzdGVtQ2xvY2s7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGph
dmEubmlvLkZsb2F0QnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNhbGxhYmxl
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vKioKLSAqIEhlbHBl
ciBjbGFzcyB0byBjcmVhdGUgYW5kIHN5bmNocm9uaXplIGFjY2VzcyB0byBhIFN1cmZhY2VUZXh0
dXJlLiBUaGUgY2FsbGVyIHdpbGwgZ2V0IG5vdGlmaWVkCi0gKiBvZiBuZXcgZnJhbWVzIGluIG9u
VGV4dHVyZUZyYW1lQXZhaWxhYmxlKCksIGFuZCBzaG91bGQgY2FsbCByZXR1cm5UZXh0dXJlRnJh
bWUoKSB3aGVuIGRvbmUgd2l0aAotICogdGhlIGZyYW1lLiBPbmx5IG9uZSB0ZXh0dXJlIGZyYW1l
IGNhbiBiZSBpbiBmbGlnaHQgYXQgb25jZSwgc28gcmV0dXJuVGV4dHVyZUZyYW1lKCkgbXVzdCBi
ZQotICogY2FsbGVkIGluIG9yZGVyIHRvIHJlY2VpdmUgYSBuZXcgZnJhbWUuIENhbGwgc3RvcExp
c3RlbmluZygpIHRvIHN0b3AgcmVjZWl2ZWluZyBuZXcgZnJhbWVzLiBDYWxsCi0gKiBkaXNwb3Nl
IHRvIHJlbGVhc2UgYWxsIHJlc291cmNlcyBvbmNlIHRoZSB0ZXh0dXJlIGZyYW1lIGlzIHJldHVy
bmVkLgotICogTm90ZSB0aGF0IHRoZXJlIGlzIGEgQysrIGNvdW50ZXIgcGFydCBvZiB0aGlzIGNs
YXNzIHRoYXQgb3B0aW9uYWxseSBjYW4gYmUgdXNlZC4gSXQgaXMgdXNlZCBmb3IKLSAqIHdyYXBw
aW5nIHRleHR1cmUgZnJhbWVzIGludG8gd2VicnRjOjpWaWRlb0ZyYW1lcyBhbmQgYWxzbyBoYW5k
bGVzIGNhbGxpbmcgcmV0dXJuVGV4dHVyZUZyYW1lKCkKLSAqIHdoZW4gdGhlIHdlYnJ0Yzo6Vmlk
ZW9GcmFtZSBpcyBubyBsb25nZXIgdXNlZC4KLSAqLwotY2xhc3MgU3VyZmFjZVRleHR1cmVIZWxw
ZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1cmZhY2VUZXh0dXJl
SGVscGVyIjsKLSAgLyoqCi0gICAqIENhbGxiYWNrIGludGVyZmFjZSBmb3IgYmVpbmcgbm90aWZp
ZWQgdGhhdCBhIG5ldyB0ZXh0dXJlIGZyYW1lIGlzIGF2YWlsYWJsZS4gVGhlIGNhbGxzIHdpbGwg
YmUKLSAgICogbWFkZSBvbiBhIGRlZGljYXRlZCB0aHJlYWQgd2l0aCBhIGJvdW5kIEVHTENvbnRl
eHQuIFRoZSB0aHJlYWQgd2lsbCBiZSB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZQotICAgKiBsaWZl
dGltZSBvZiB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgaW5zdGFuY2UsIGJ1dCBkaWZmZXJlbnQg
ZnJvbSB0aGUgdGhyZWFkIGNhbGxpbmcgdGhlCi0gICAqIFN1cmZhY2VUZXh0dXJlSGVscGVyIGNv
bnN0cnVjdG9yLiBUaGUgY2FsbGVlIGlzIG5vdCBhbGxvd2VkIHRvIG1ha2UgYW5vdGhlciBFR0xD
b250ZXh0IGN1cnJlbnQKLSAgICogb24gdGhlIGNhbGxpbmcgdGhyZWFkLgotICAgKi8KLSAgcHVi
bGljIGludGVyZmFjZSBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHsKLSAgICBhYnN0
cmFjdCB2b2lkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICBpbnQgb2VzVGV4dHVy
ZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcyk7Ci0gIH0KLQot
ICAvKioKLSAgICogQ29uc3RydWN0IGEgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyIHNoYXJpbmcg
T3BlbkdMIHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gQSBkZWRpY2F0ZWQKLSAgICog
dGhyZWFkIGFuZCBoYW5kbGVyIGlzIGNyZWF0ZWQgZm9yIGhhbmRsaW5nIHRoZSBTdXJmYWNlVGV4
dHVyZS4gTWF5IHJldHVybiBudWxsIGlmIEVHTCBmYWlscyB0bwotICAgKiBpbml0aWFsaXplIGEg
cGl4ZWwgYnVmZmVyIHN1cmZhY2UgYW5kIG1ha2UgaXQgY3VycmVudC4KLSAgICovCi0gIHB1Ymxp
YyBzdGF0aWMgU3VyZmFjZVRleHR1cmVIZWxwZXIgY3JlYXRlKAotICAgICAgZmluYWwgU3RyaW5n
IHRocmVhZE5hbWUsIGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0KSB7Ci0gICAg
ZmluYWwgSGFuZGxlclRocmVhZCB0aHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZCh0aHJlYWROYW1l
KTsKLSAgICB0aHJlYWQuc3RhcnQoKTsKLSAgICBmaW5hbCBIYW5kbGVyIGhhbmRsZXIgPSBuZXcg
SGFuZGxlcih0aHJlYWQuZ2V0TG9vcGVyKCkpOwotCi0gICAgLy8gVGhlIG9uRnJhbWVBdmFpbGFi
bGUoKSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBTdXJmYWNlVGV4dHVyZSBjdG9y
IHRocmVhZC4gU2VlOgotICAgIC8vIGh0dHA6Ly9ncmVwY29kZS5jb20vZmlsZS9yZXBvc2l0b3J5
LmdyZXBjb2RlLmNvbS9qYXZhL2V4dC9jb20uZ29vZ2xlLmFuZHJvaWQvYW5kcm9pZC81LjEuMV9y
MS9hbmRyb2lkL2dyYXBoaWNzL1N1cmZhY2VUZXh0dXJlLmphdmEjMTk1LgotICAgIC8vIFRoZXJl
Zm9yZSwgaW4gb3JkZXIgdG8gY29udHJvbCB0aGUgY2FsbGJhY2sgdGhyZWFkIG9uIEFQSSBsdmwg
PCAyMSwgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyCi0gICAgLy8gaXMgY29uc3RydWN0ZWQgb24g
dGhlIHxoYW5kbGVyfCB0aHJlYWQuCi0gICAgcmV0dXJuIFRocmVhZFV0aWxzLmludm9rZUF0RnJv
bnRVbmludGVycnVwdGlibHkoaGFuZGxlciwgbmV3IENhbGxhYmxlPFN1cmZhY2VUZXh0dXJlSGVs
cGVyPigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN1cmZhY2VUZXh0dXJlSGVs
cGVyIGNhbGwoKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBTdXJmYWNl
VGV4dHVyZUhlbHBlcihzaGFyZWRDb250ZXh0LCBoYW5kbGVyKTsKLSAgICAgICAgfSBjYXRjaCAo
UnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgdGhyZWFkTmFt
ZSArICIgY3JlYXRlIGZhaWx1cmUiLCBlKTsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIGhh
bmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgRWdsQmFzZSBlZ2xCYXNlOwotICBwcml2YXRlIGZpbmFs
IFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlOwotICBwcml2YXRlIGZpbmFsIGludCBvZXNU
ZXh0dXJlSWQ7Ci0gIHByaXZhdGUgWXV2Q29udmVydGVyIHl1dkNvbnZlcnRlcjsKLQotICAvLyBU
aGVzZSB2YXJpYWJsZXMgYXJlIG9ubHkgYWNjZXNzZWQgZnJvbSB0aGUgfGhhbmRsZXJ8IHRocmVh
ZC4KLSAgcHJpdmF0ZSBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIGxpc3RlbmVyOwot
ICAvLyBUaGUgcG9zc2libGUgc3RhdGVzIG9mIHRoaXMgY2xhc3MuCi0gIHByaXZhdGUgYm9vbGVh
biBoYXNQZW5kaW5nVGV4dHVyZSA9IGZhbHNlOwotICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4g
aXNUZXh0dXJlSW5Vc2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzUXVpdHRpbmcgPSBm
YWxzZTsKLSAgLy8gfHBlbmRpbmdMaXN0ZW5lcnwgaXMgc2V0IGluIHNldExpc3RlbmVyKCkgYW5k
IHRoZSBydW5uYWJsZSBpcyBwb3N0ZWQgdG8gdGhlIGhhbmRsZXIgdGhyZWFkLgotICAvLyBzZXRM
aXN0ZW5lcigpIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGNhbGxlZCBhZ2FpbiBiZWZvcmUgc3RvcExp
c3RlbmluZygpLCBzbyB0aGlzIGlzIHRocmVhZCBzYWZlLgotICBwcml2YXRlIE9uVGV4dHVyZUZy
YW1lQXZhaWxhYmxlTGlzdGVuZXIgcGVuZGluZ0xpc3RlbmVyOwotICBmaW5hbCBSdW5uYWJsZSBz
ZXRMaXN0ZW5lclJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJTZXR0aW5nIGxpc3Rl
bmVyIHRvICIgKyBwZW5kaW5nTGlzdGVuZXIpOwotICAgICAgbGlzdGVuZXIgPSBwZW5kaW5nTGlz
dGVuZXI7Ci0gICAgICBwZW5kaW5nTGlzdGVuZXIgPSBudWxsOwotICAgICAgLy8gTWF5IGhhdmUg
YSBwZW5kaW5nIGZyYW1lIGZyb20gdGhlIHByZXZpb3VzIGNhcHR1cmUgc2Vzc2lvbiAtIGRyb3Ag
aXQuCi0gICAgICBpZiAoaGFzUGVuZGluZ1RleHR1cmUpIHsKLSAgICAgICAgLy8gQ2FsbGluZyB1
cGRhdGVUZXhJbWFnZSgpIGlzIG5lY2Nlc3NhcnkgaW4gb3JkZXIgdG8gcmVjZWl2ZSBuZXcgZnJh
bWVzLgotICAgICAgICB1cGRhdGVUZXhJbWFnZSgpOwotICAgICAgICBoYXNQZW5kaW5nVGV4dHVy
ZSA9IGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIFN1cmZhY2VUZXh0
dXJlSGVscGVyKEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBIYW5kbGVyIGhhbmRsZXIp
IHsKLSAgICBpZiAoaGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSAhPSBUaHJlYWQuY3Vy
cmVudFRocmVhZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJT
dXJmYWNlVGV4dHVyZUhlbHBlciBtdXN0IGJlIGNyZWF0ZWQgb24gdGhlIGhhbmRsZXIgdGhyZWFk
Iik7Ci0gICAgfQotICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7Ci0KLSAgICBlZ2xCYXNlID0g
RWdsQmFzZS5jcmVhdGUoc2hhcmVkQ29udGV4dCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVS
KTsKLSAgICB0cnkgewotICAgICAgLy8gQm90aCB0aGVzZSBzdGF0ZW1lbnRzIGhhdmUgYmVlbiBv
YnNlcnZlZCB0byBmYWlsIG9uIHJhcmUgb2NjYXNpb25zLCBzZWUgQlVHPXdlYnJ0Yzo1NjgyLgot
ICAgICAgZWdsQmFzZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0gICAgICBlZ2xCYXNl
Lm1ha2VDdXJyZW50KCk7Ci0gICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAvLyBDbGVhbiB1cCBiZWZvcmUgcmV0aHJvd2luZyB0aGUgZXhjZXB0aW9uLgotICAgICAgZWds
QmFzZS5yZWxlYXNlKCk7Ci0gICAgICBoYW5kbGVyLmdldExvb3BlcigpLnF1aXQoKTsKLSAgICAg
IHRocm93IGU7Ci0gICAgfQotCi0gICAgb2VzVGV4dHVyZUlkID0gR2xVdGlsLmdlbmVyYXRlVGV4
dHVyZShHTEVTMTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMpOwotICAgIHN1cmZhY2VUZXh0
dXJlID0gbmV3IFN1cmZhY2VUZXh0dXJlKG9lc1RleHR1cmVJZCk7Ci0gICAgc3VyZmFjZVRleHR1
cmUuc2V0T25GcmFtZUF2YWlsYWJsZUxpc3RlbmVyKG5ldyBTdXJmYWNlVGV4dHVyZS5PbkZyYW1l
QXZhaWxhYmxlTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IG9uRnJhbWVBdmFpbGFibGUoU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKLSAgICAg
ICAgaGFzUGVuZGluZ1RleHR1cmUgPSB0cnVlOwotICAgICAgICB0cnlEZWxpdmVyVGV4dHVyZUZy
YW1lKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogU3RhcnQgdG8gc3Ry
ZWFtIHRleHR1cmVzIHRvIHRoZSBnaXZlbiB8bGlzdGVuZXJ8LiBJZiB5b3UgbmVlZCB0byBjaGFu
Z2UgbGlzdGVuZXIsIHlvdSBuZWVkIHRvCi0gICAqIGNhbGwgc3RvcExpc3RlbmluZygpIGZpcnN0
LgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RhcnRMaXN0ZW5pbmcoZmluYWwgT25UZXh0dXJlRnJh
bWVBdmFpbGFibGVMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgIGlmICh0aGlzLmxpc3RlbmVyICE9
IG51bGwgfHwgdGhpcy5wZW5kaW5nTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiU3VyZmFjZVRleHR1cmVIZWxwZXIgbGlzdGVuZXIgaGFz
IGFscmVhZHkgYmVlbiBzZXQuIik7Ci0gICAgfQotICAgIHRoaXMucGVuZGluZ0xpc3RlbmVyID0g
bGlzdGVuZXI7Ci0gICAgaGFuZGxlci5wb3N0KHNldExpc3RlbmVyUnVubmFibGUpOwotICB9Ci0K
LSAgLyoqCi0gICAqIFN0b3AgbGlzdGVuaW5nLiBUaGUgbGlzdGVuZXIgc2V0IGluIHN0YXJ0TGlz
dGVuaW5nKCkgaXMgZ3VhcmFudGVkZWQgdG8gbm90IHJlY2VpdmUgYW55IG1vcmUKLSAgICogb25U
ZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBjYWxsYmFja3MgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1
cm5zLgotICAgKi8KLSAgcHVibGljIHZvaWQgc3RvcExpc3RlbmluZygpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAic3RvcExpc3RlbmluZygpIik7Ci0gICAgaGFuZGxlci5yZW1vdmVDYWxsYmFja3Mo
c2V0TGlzdGVuZXJSdW5uYWJsZSk7Ci0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50
ZXJydXB0aWJseShoYW5kbGVyLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgbGlzdGVuZXIgPSBudWxsOwotICAgICAg
ICBwZW5kaW5nTGlzdGVuZXIgPSBudWxsOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFJldHJpZXZlIHRoZSB1bmRlcmx5aW5nIFN1cmZhY2VUZXh0dXJlLiBUaGUgU3VyZmFj
ZVRleHR1cmUgc2hvdWxkIGJlIHBhc3NlZCBpbiB0byBhIHZpZGVvCi0gICAqIHByb2R1Y2VyIHN1
Y2ggYXMgYSBjYW1lcmEgb3IgZGVjb2Rlci4KLSAgICovCi0gIHB1YmxpYyBTdXJmYWNlVGV4dHVy
ZSBnZXRTdXJmYWNlVGV4dHVyZSgpIHsKLSAgICByZXR1cm4gc3VyZmFjZVRleHR1cmU7Ci0gIH0K
LQotICAvKioKLSAgICogUmV0cmlldmUgdGhlIGhhbmRsZXIgdGhhdCBjYWxscyBvblRleHR1cmVG
cmFtZUF2YWlsYWJsZSgpLiBUaGlzIGhhbmRsZXIgaXMgdmFsaWQgdW50aWwKLSAgICogZGlzcG9z
ZSgpIGlzIGNhbGxlZC4KLSAgICovCi0gIHB1YmxpYyBIYW5kbGVyIGdldEhhbmRsZXIoKSB7Ci0g
ICAgcmV0dXJuIGhhbmRsZXI7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbCB0aGlzIGZ1bmN0aW9u
IHRvIHNpZ25hbCB0aGF0IHlvdSBhcmUgZG9uZSB3aXRoIHRoZSBmcmFtZSByZWNlaXZlZCBpbgot
ICAgKiBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLiBPbmx5IG9uZSB0ZXh0dXJlIGZyYW1lIGNh
biBiZSBpbiBmbGlnaHQgYXQgb25jZSwgc28geW91IG11c3QgY2FsbAotICAgKiB0aGlzIGZ1bmN0
aW9uIGluIG9yZGVyIHRvIHJlY2VpdmUgYSBuZXcgZnJhbWUuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCByZXR1cm5UZXh0dXJlRnJhbWUoKSB7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBp
c1RleHR1cmVJblVzZSA9IGZhbHNlOwotICAgICAgICBpZiAoaXNRdWl0dGluZykgewotICAgICAg
ICAgIHJlbGVhc2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0cnlEZWxpdmVyVGV4
dHVyZUZyYW1lKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1Ymxp
YyBib29sZWFuIGlzVGV4dHVyZUluVXNlKCkgewotICAgIHJldHVybiBpc1RleHR1cmVJblVzZTsK
LSAgfQotCi0gIC8qKgotICAgKiBDYWxsIGRpc2Nvbm5lY3QoKSB0byBzdG9wIHJlY2VpdmluZyBm
cmFtZXMuIE9wZW5HTCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGFuZCB0aGUgaGFuZGxlciBpcwot
ICAgKiBzdG9wcGVkIHdoZW4gdGhlIHRleHR1cmUgZnJhbWUgaGFzIGJlZW4gcmV0dXJuZWQgYnkg
YSBjYWxsIHRvIHJldHVyblRleHR1cmVGcmFtZSgpLiBZb3UgYXJlCi0gICAqIGd1YXJhbnRlZWQg
dG8gbm90IHJlY2VpdmUgYW55IG1vcmUgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBhZnRlciB0
aGlzIGZ1bmN0aW9uIHJldHVybnMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJkaXNwb3NlKCkiKTsKLSAgICBUaHJlYWRVdGlscy5pbnZva2VB
dEZyb250VW5pbnRlcnJ1cHRpYmx5KGhhbmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpc1F1aXR0aW5nID0g
dHJ1ZTsKLSAgICAgICAgaWYgKCFpc1RleHR1cmVJblVzZSkgewotICAgICAgICAgIHJlbGVhc2Uo
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGV4
dHVyZVRvWVVWKGZpbmFsIEJ5dGVCdWZmZXIgYnVmLCBmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGlu
dCBoZWlnaHQsCi0gICAgICBmaW5hbCBpbnQgc3RyaWRlLCBmaW5hbCBpbnQgdGV4dHVyZUlkLCBm
aW5hbCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCkgewotICAgIGlmICh0ZXh0dXJlSWQgIT0gb2Vz
VGV4dHVyZUlkKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJ0ZXh0
dXJlVG9CeXRlQnVmZmVyIGNhbGxlZCB3aXRoIHVuZXhwZWN0ZWQgdGV4dHVyZUlkIik7Ci0gICAg
fQotCi0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShoYW5kbGVy
LCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgaWYgKHl1dkNvbnZlcnRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgeXV2
Q29udmVydGVyID0gbmV3IFl1dkNvbnZlcnRlcigpOwotICAgICAgICB9Ci0gICAgICAgIHl1dkNv
bnZlcnRlci5jb252ZXJ0KGJ1Ziwgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCB0ZXh0dXJlSWQsIHRy
YW5zZm9ybU1hdHJpeCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
dXBkYXRlVGV4SW1hZ2UoKSB7Ci0gICAgLy8gU3VyZmFjZVRleHR1cmUudXBkYXRlVGV4SW1hZ2Ug
YXBwYXJlbnRseSBjYW4gY29tcGV0ZSBhbmQgZGVhZGxvY2sgd2l0aCBlZ2xTd2FwQnVmZmVycywK
LSAgICAvLyBhcyBvYnNlcnZlZCBvbiBOZXh1cyA1LiBUaGVyZWZvcmUsIHN5bmNocm9uaXplIGl0
IHdpdGggdGhlIEVHTCBmdW5jdGlvbnMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1
bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD01NzAyIGZvciBtb3JlIGluZm8uCi0gICAg
c3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIHN1cmZhY2VUZXh0dXJlLnVwZGF0
ZVRleEltYWdlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyeURlbGl2ZXJUZXh0
dXJlRnJhbWUoKSB7Ci0gICAgaWYgKGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkgIT0g
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbigiV3JvbmcgdGhyZWFkLiIpOwotICAgIH0KLSAgICBpZiAoaXNRdWl0dGluZyB8fCAh
aGFzUGVuZGluZ1RleHR1cmUgfHwgaXNUZXh0dXJlSW5Vc2UgfHwgbGlzdGVuZXIgPT0gbnVsbCkg
ewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpc1RleHR1cmVJblVzZSA9IHRydWU7Ci0gICAg
aGFzUGVuZGluZ1RleHR1cmUgPSBmYWxzZTsKLQotICAgIHVwZGF0ZVRleEltYWdlKCk7Ci0KLSAg
ICBmaW5hbCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCA9IG5ldyBmbG9hdFsxNl07Ci0gICAgc3Vy
ZmFjZVRleHR1cmUuZ2V0VHJhbnNmb3JtTWF0cml4KHRyYW5zZm9ybU1hdHJpeCk7Ci0gICAgZmlu
YWwgbG9uZyB0aW1lc3RhbXBOcyA9IChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVS
U0lPTl9DT0RFUy5JQ0VfQ1JFQU1fU0FORFdJQ0gpCi0gICAgICAgID8gc3VyZmFjZVRleHR1cmUu
Z2V0VGltZXN0YW1wKCkKLSAgICAgICAgOiBUaW1lVW5pdC5NSUxMSVNFQ09ORFMudG9OYW5vcyhT
eXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0gICAgbGlzdGVuZXIub25UZXh0dXJlRnJh
bWVBdmFpbGFibGUob2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIHRpbWVzdGFtcE5zKTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCByZWxlYXNlKCkgewotICAgIGlmIChoYW5kbGVyLmdldExv
b3BlcigpLmdldFRocmVhZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZC4iKTsKLSAgICB9Ci0g
ICAgaWYgKGlzVGV4dHVyZUluVXNlIHx8ICFpc1F1aXR0aW5nKSB7Ci0gICAgICB0aHJvdyBuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlbGVhc2UuIik7Ci0gICAgfQotICAg
IGlmICh5dXZDb252ZXJ0ZXIgIT0gbnVsbCkgewotICAgICAgeXV2Q29udmVydGVyLnJlbGVhc2Uo
KTsKLSAgICB9Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwgbmV3IGludFtdIHtvZXNU
ZXh0dXJlSWR9LCAwKTsKLSAgICBzdXJmYWNlVGV4dHVyZS5yZWxlYXNlKCk7Ci0gICAgZWdsQmFz
ZS5yZWxlYXNlKCk7Ci0gICAgaGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlci5qYXZhCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlci5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXIuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDIyMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBh
bmRyb2lkLmNvbnRlbnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBh
bmRyb2lkLmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3
LlN1cmZhY2VWaWV3OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNo
OwotCi0vKioKLSAqIEltcGxlbWVudHMgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyLkNhbGxiYWNr
cyBieSBkaXNwbGF5aW5nIHRoZSB2aWRlbyBzdHJlYW0gb24gYSBTdXJmYWNlVmlldy4KLSAqIHJl
bmRlckZyYW1lKCkgaXMgYXN5bmNocm9ub3VzIHRvIGF2b2lkIGJsb2NraW5nIHRoZSBjYWxsaW5n
IHRocmVhZC4KLSAqIFRoaXMgY2xhc3MgaXMgdGhyZWFkIHNhZmUgYW5kIGhhbmRsZXMgYWNjZXNz
IGZyb20gcG90ZW50aWFsbHkgZm91ciBkaWZmZXJlbnQgdGhyZWFkczoKLSAqIEludGVyYWN0aW9u
IGZyb20gdGhlIG1haW4gYXBwIGluIGluaXQsIHJlbGVhc2UsIHNldE1pcnJvciwgYW5kIHNldFNj
YWxpbmd0eXBlLgotICogSW50ZXJhY3Rpb24gZnJvbSBDKysgcnRjOjpWaWRlb1NpbmtJbnRlcmZh
Y2UgaW4gcmVuZGVyRnJhbWUuCi0gKiBJbnRlcmFjdGlvbiBmcm9tIHRoZSBBY3Rpdml0eSBsaWZl
Y3ljbGUgaW4gc3VyZmFjZUNyZWF0ZWQsIHN1cmZhY2VDaGFuZ2VkLCBhbmQgc3VyZmFjZURlc3Ry
b3llZC4KLSAqIEludGVyYWN0aW9uIHdpdGggdGhlIGxheW91dCBmcmFtZXdvcmsgaW4gb25NZWFz
dXJlIGFuZCBvblNpemVDaGFuZ2VkLgotICovCi1wdWJsaWMgY2xhc3MgU3VyZmFjZVZpZXdSZW5k
ZXJlcgotICAgIGV4dGVuZHMgU3VyZmFjZVZpZXcgaW1wbGVtZW50cyBTdXJmYWNlSG9sZGVyLkNh
bGxiYWNrLCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBUQUcgPSAiU3VyZmFjZVZpZXdSZW5kZXJlciI7Ci0KLSAgLy8gQ2FjaGVkIHJlc291
cmNlIG5hbWUuCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZTsKLSAgcHJpdmF0
ZSBmaW5hbCBSZW5kZXJlckNvbW1vbi5WaWRlb0xheW91dE1lYXN1cmUgdmlkZW9MYXlvdXRNZWFz
dXJlID0KLSAgICAgIG5ldyBSZW5kZXJlckNvbW1vbi5WaWRlb0xheW91dE1lYXN1cmUoKTsKLSAg
cHJpdmF0ZSBmaW5hbCBFZ2xSZW5kZXJlciBlZ2xSZW5kZXJlcjsKLQotICAvLyBDYWxsYmFjayBm
b3IgcmVwb3J0aW5nIHJlbmRlcmVyIGV2ZW50cy4gUmVhZC1vbmx5IGFmdGVyIGluaXRpbGl6YXRp
b24gc28gbm8gbG9jayByZXF1aXJlZC4KLSAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5SZW5kZXJl
ckV2ZW50cyByZW5kZXJlckV2ZW50czsKLQotICBwcml2YXRlIGZpbmFsIE9iamVjdCBsYXlvdXRM
b2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGJvb2xlYW4gaXNGaXJzdEZyYW1lUmVuZGVy
ZWQ7Ci0gIHByaXZhdGUgaW50IHJvdGF0ZWRGcmFtZVdpZHRoOwotICBwcml2YXRlIGludCByb3Rh
dGVkRnJhbWVIZWlnaHQ7Ci0gIHByaXZhdGUgaW50IGZyYW1lUm90YXRpb247Ci0KLSAgLyoqCi0g
ICAqIFN0YW5kYXJkIFZpZXcgY29uc3RydWN0b3IuIEluIG9yZGVyIHRvIHJlbmRlciBzb21ldGhp
bmcsIHlvdSBtdXN0IGZpcnN0IGNhbGwgaW5pdCgpLgotICAgKi8KLSAgcHVibGljIFN1cmZhY2VW
aWV3UmVuZGVyZXIoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgc3VwZXIoY29udGV4dCk7Ci0gICAg
dGhpcy5yZXNvdXJjZU5hbWUgPSBnZXRSZXNvdXJjZU5hbWUoKTsKLSAgICBlZ2xSZW5kZXJlciA9
IG5ldyBFZ2xSZW5kZXJlcihyZXNvdXJjZU5hbWUpOwotICAgIGdldEhvbGRlcigpLmFkZENhbGxi
YWNrKHRoaXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFN0YW5kYXJkIFZpZXcgY29uc3RydWN0b3Iu
IEluIG9yZGVyIHRvIHJlbmRlciBzb21ldGhpbmcsIHlvdSBtdXN0IGZpcnN0IGNhbGwgaW5pdCgp
LgotICAgKi8KLSAgcHVibGljIFN1cmZhY2VWaWV3UmVuZGVyZXIoQ29udGV4dCBjb250ZXh0LCBB
dHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgdGhp
cy5yZXNvdXJjZU5hbWUgPSBnZXRSZXNvdXJjZU5hbWUoKTsKLSAgICBlZ2xSZW5kZXJlciA9IG5l
dyBFZ2xSZW5kZXJlcihyZXNvdXJjZU5hbWUpOwotICAgIGdldEhvbGRlcigpLmFkZENhbGxiYWNr
KHRoaXMpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgdGhpcyBjbGFzcywgc2hhcmlu
ZyByZXNvdXJjZXMgd2l0aCB8c2hhcmVkQ29udGV4dHwuIEl0IGlzIGFsbG93ZWQgdG8gY2FsbCBp
bml0KCkgdG8KLSAgICogcmVpbml0aWFsaXplIHRoZSByZW5kZXJlciBhZnRlciBhIHByZXZpb3Vz
IGluaXQoKS9yZWxlYXNlKCkgY3ljbGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KEVnbEJh
c2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBSZW5kZXJlckNvbW1vbi5SZW5kZXJlckV2ZW50cyBy
ZW5kZXJlckV2ZW50cykgewotICAgIGluaXQoc2hhcmVkQ29udGV4dCwgcmVuZGVyZXJFdmVudHMs
IEVnbEJhc2UuQ09ORklHX1BMQUlOLCBuZXcgR2xSZWN0RHJhd2VyKCkpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEluaXRpYWxpemUgdGhpcyBjbGFzcywgc2hhcmluZyByZXNvdXJjZXMgd2l0aCB8c2hh
cmVkQ29udGV4dHwuIFRoZSBjdXN0b20gfGRyYXdlcnwgd2lsbCBiZSB1c2VkCi0gICAqIGZvciBk
cmF3aW5nIGZyYW1lcyBvbiB0aGUgRUdMU3VyZmFjZS4gVGhpcyBjbGFzcyBpcyByZXNwb25zaWJs
ZSBmb3IgY2FsbGluZyByZWxlYXNlKCkgb24KLSAgICogfGRyYXdlcnwuIEl0IGlzIGFsbG93ZWQg
dG8gY2FsbCBpbml0KCkgdG8gcmVpbml0aWFsaXplIHRoZSByZW5kZXJlciBhZnRlciBhIHByZXZp
b3VzCi0gICAqIGluaXQoKS9yZWxlYXNlKCkgY3ljbGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBp
bml0KGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LAotICAgICAgUmVuZGVyZXJD
b21tb24uUmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHMsIGZpbmFsIGludFtdIGNvbmZpZ0F0
dHJpYnV0ZXMsCi0gICAgICBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXIpIHsKLSAgICBU
aHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgdGhpcy5yZW5kZXJlckV2ZW50
cyA9IHJlbmRlcmVyRXZlbnRzOwotICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAg
ICAgcm90YXRlZEZyYW1lV2lkdGggPSAwOwotICAgICAgcm90YXRlZEZyYW1lSGVpZ2h0ID0gMDsK
LSAgICAgIGZyYW1lUm90YXRpb24gPSAwOwotICAgIH0KLSAgICBlZ2xSZW5kZXJlci5pbml0KHNo
YXJlZENvbnRleHQsIGNvbmZpZ0F0dHJpYnV0ZXMsIGRyYXdlcik7Ci0gIH0KLQotICAvKioKLSAg
ICogQmxvY2sgdW50aWwgYW55IHBlbmRpbmcgZnJhbWUgaXMgcmV0dXJuZWQgYW5kIGFsbCBHTCBy
ZXNvdXJjZXMgcmVsZWFzZWQsIGV2ZW4gaWYgYW4gaW50ZXJydXB0Ci0gICAqIG9jY3Vycy4gSWYg
YW4gaW50ZXJydXB0IG9jY3VycyBkdXJpbmcgcmVsZWFzZSgpLCB0aGUgaW50ZXJydXB0IGZsYWcg
d2lsbCBiZSBzZXQuIFRoaXMgZnVuY3Rpb24KLSAgICogc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUg
dGhlIEFjdGl2aXR5IGlzIGRlc3Ryb3llZCBhbmQgdGhlIEVHTENvbnRleHQgaXMgc3RpbGwgdmFs
aWQuIElmIHlvdQotICAgKiBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZSBHTCByZXNvdXJj
ZXMgbWlnaHQgbGVhay4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgZWds
UmVuZGVyZXIucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBpZiB0aGUgdmlkZW8g
c3RyZWFtIHNob3VsZCBiZSBtaXJyb3JlZCBvciBub3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBz
ZXRNaXJyb3IoZmluYWwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBlZ2xSZW5kZXJlci5zZXRNaXJy
b3IobWlycm9yKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQgaG93IHRoZSB2aWRlbyB3aWxsIGZp
bGwgdGhlIGFsbG93ZWQgbGF5b3V0IGFyZWEuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTY2Fs
aW5nVHlwZShSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSkgewotICAgIFRo
cmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICB2aWRlb0xheW91dE1lYXN1cmUu
c2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2Nh
bGluZ1R5cGUoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNYXRjaE9yaWVu
dGF0aW9uLAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNaXNt
YXRjaE9yaWVudGF0aW9uKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgp
OwotICAgIHZpZGVvTGF5b3V0TWVhc3VyZS5zZXRTY2FsaW5nVHlwZShzY2FsaW5nVHlwZU1hdGNo
T3JpZW50YXRpb24sIHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbik7Ci0gIH0KLQotICAv
LyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBpbnRlcmZhY2UuCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCByZW5kZXJGcmFtZShWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAg
IHVwZGF0ZUZyYW1lRGltZW5zaW9uc0FuZFJlcG9ydEV2ZW50cyhmcmFtZSk7Ci0gICAgZWdsUmVu
ZGVyZXIucmVuZGVyRnJhbWUoZnJhbWUpOwotICB9Ci0KLSAgLy8gVmlldyBsYXlvdXQgaW50ZXJm
YWNlLgotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aFNw
ZWMsIGludCBoZWlnaHRTcGVjKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVh
ZCgpOwotICAgIGZpbmFsIFBvaW50IHNpemU7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2Nr
KSB7Ci0gICAgICBzaXplID0KLSAgICAgICAgICB2aWRlb0xheW91dE1lYXN1cmUubWVhc3VyZSh3
aWR0aFNwZWMsIGhlaWdodFNwZWMsIHJvdGF0ZWRGcmFtZVdpZHRoLCByb3RhdGVkRnJhbWVIZWln
aHQpOwotICAgIH0KLSAgICBzZXRNZWFzdXJlZERpbWVuc2lvbihzaXplLngsIHNpemUueSk7Ci0g
ICAgbG9nRCgib25NZWFzdXJlKCkuIE5ldyBzaXplOiAiICsgc2l6ZS54ICsgIngiICsgc2l6ZS55
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFu
IGNoYW5nZWQsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKLSAg
ICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZWdsUmVuZGVyZXIuc2V0
TGF5b3V0QXNwZWN0UmF0aW8oKHJpZ2h0IC0gbGVmdCkgLyAoZmxvYXQpIChib3R0b20gLSB0b3Ap
KTsKLSAgfQotCi0gIC8vIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgaW50ZXJmYWNlLgotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgc3VyZmFjZUNyZWF0ZWQoZmluYWwgU3VyZmFjZUhvbGRlciBo
b2xkZXIpIHsKLSAgICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZWds
UmVuZGVyZXIuY3JlYXRlRWdsU3VyZmFjZShob2xkZXIuZ2V0U3VyZmFjZSgpKTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdXJmYWNlRGVzdHJveWVkKFN1cmZhY2VIb2xkZXIg
aG9sZGVyKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIGZp
bmFsIENvdW50RG93bkxhdGNoIGNvbXBsZXRpb25MYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgx
KTsKLSAgICBlZ2xSZW5kZXJlci5yZWxlYXNlRWdsU3VyZmFjZShuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY29tcGxl
dGlvbkxhdGNoLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0pOwotICAgIFRocmVhZFV0aWxz
LmF3YWl0VW5pbnRlcnJ1cHRpYmx5KGNvbXBsZXRpb25MYXRjaCk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGlu
dCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIFRocmVhZFV0aWxzLmNoZWNr
SXNPbk1haW5UaHJlYWQoKTsKLSAgICBlZ2xSZW5kZXJlci5zdXJmYWNlU2l6ZUNoYW5nZWQod2lk
dGgsIGhlaWdodCk7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRSZXNvdXJjZU5hbWUoKSB7
Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBnZXRSZXNvdXJjZXMoKS5nZXRSZXNvdXJjZUVudHJ5
TmFtZShnZXRJZCgpKSArICI6ICI7Ci0gICAgfSBjYXRjaCAoTm90Rm91bmRFeGNlcHRpb24gZSkg
ewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgfQotCi0gIC8vIFVwZGF0ZSBmcmFtZSBkaW1l
bnNpb25zIGFuZCByZXBvcnQgYW55IGNoYW5nZXMgdG8gfHJlbmRlcmVyRXZlbnRzfC4KLSAgcHJp
dmF0ZSB2b2lkIHVwZGF0ZUZyYW1lRGltZW5zaW9uc0FuZFJlcG9ydEV2ZW50cyhWaWRlb1JlbmRl
cmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewot
ICAgICAgaWYgKCFpc0ZpcnN0RnJhbWVSZW5kZXJlZCkgewotICAgICAgICBpc0ZpcnN0RnJhbWVS
ZW5kZXJlZCA9IHRydWU7Ci0gICAgICAgIGxvZ0QoIlJlcG9ydGluZyBmaXJzdCByZW5kZXJlZCBm
cmFtZS4iKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyRXZlbnRzICE9IG51bGwpIHsKLSAgICAgICAg
ICByZW5kZXJlckV2ZW50cy5vbkZpcnN0RnJhbWVSZW5kZXJlZCgpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgICBpZiAocm90YXRlZEZyYW1lV2lkdGggIT0gZnJhbWUucm90YXRlZFdpZHRoKCkg
fHwgcm90YXRlZEZyYW1lSGVpZ2h0ICE9IGZyYW1lLnJvdGF0ZWRIZWlnaHQoKQotICAgICAgICAg
IHx8IGZyYW1lUm90YXRpb24gIT0gZnJhbWUucm90YXRpb25EZWdyZWUpIHsKLSAgICAgICAgbG9n
RCgiUmVwb3J0aW5nIGZyYW1lIHJlc29sdXRpb24gY2hhbmdlZCB0byAiICsgZnJhbWUud2lkdGgg
KyAieCIgKyBmcmFtZS5oZWlnaHQKLSAgICAgICAgICAgICsgIiB3aXRoIHJvdGF0aW9uICIgKyBm
cmFtZS5yb3RhdGlvbkRlZ3JlZSk7Ci0gICAgICAgIGlmIChyZW5kZXJlckV2ZW50cyAhPSBudWxs
KSB7Ci0gICAgICAgICAgcmVuZGVyZXJFdmVudHMub25GcmFtZVJlc29sdXRpb25DaGFuZ2VkKGZy
YW1lLndpZHRoLCBmcmFtZS5oZWlnaHQsIGZyYW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICAgICAg
fQotICAgICAgICByb3RhdGVkRnJhbWVXaWR0aCA9IGZyYW1lLnJvdGF0ZWRXaWR0aCgpOwotICAg
ICAgICByb3RhdGVkRnJhbWVIZWlnaHQgPSBmcmFtZS5yb3RhdGVkSGVpZ2h0KCk7Ci0gICAgICAg
IGZyYW1lUm90YXRpb24gPSBmcmFtZS5yb3RhdGlvbkRlZ3JlZTsKLSAgICAgICAgcG9zdChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICAgICAgcmVxdWVzdExheW91dCgpOwotICAgICAgICAgIH0KLSAgICAg
ICAgfSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ0QoU3RyaW5n
IHN0cmluZykgewotICAgIExvZ2dpbmcuZChUQUcsIHJlc291cmNlTmFtZSArIHN0cmluZyk7Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9DYXB0dXJlci5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9DYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDExMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLQotaW1wb3J0IGphdmEudXRp
bC5MaXN0OwotCi0vLyBCYXNlIGludGVyZmFjZSBmb3IgYWxsIFZpZGVvQ2FwdHVyZXJzIHRvIGlt
cGxlbWVudC4KLXB1YmxpYyBpbnRlcmZhY2UgVmlkZW9DYXB0dXJlciB7Ci0gIC8vIEludGVyZmFj
ZSB1c2VkIGZvciBwcm92aWRpbmcgY2FsbGJhY2tzIHRvIGFuIG9ic2VydmVyLgotICBwdWJsaWMg
aW50ZXJmYWNlIENhcHR1cmVyT2JzZXJ2ZXIgewotICAgIC8vIE5vdGlmeSBpZiB0aGUgY2FtZXJh
IGhhdmUgYmVlbiBzdGFydGVkIHN1Y2Nlc3NmdWxseSBvciBub3QuCi0gICAgLy8gQ2FsbGVkIG9u
IGEgSmF2YSB0aHJlYWQgb3duZWQgYnkgVmlkZW9DYXB0dXJlci4KLSAgICB2b2lkIG9uQ2FwdHVy
ZXJTdGFydGVkKGJvb2xlYW4gc3VjY2Vzcyk7Ci0gICAgdm9pZCBvbkNhcHR1cmVyU3RvcHBlZCgp
OwotCi0gICAgLy8gRGVsaXZlcnMgYSBjYXB0dXJlZCBmcmFtZS4gQ2FsbGVkIG9uIGEgSmF2YSB0
aHJlYWQgb3duZWQgYnkgVmlkZW9DYXB0dXJlci4KLSAgICB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1l
Q2FwdHVyZWQoCi0gICAgICAgIGJ5dGVbXSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGlu
dCByb3RhdGlvbiwgbG9uZyB0aW1lU3RhbXApOwotCi0gICAgLy8gRGVsaXZlcnMgYSBjYXB0dXJl
ZCBmcmFtZSBpbiBhIHRleHR1cmUgd2l0aCBpZCB8b2VzVGV4dHVyZUlkfC4gQ2FsbGVkIG9uIGEg
SmF2YSB0aHJlYWQKLSAgICAvLyBvd25lZCBieSBWaWRlb0NhcHR1cmVyLgotICAgIHZvaWQgb25U
ZXh0dXJlRnJhbWVDYXB0dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJl
SWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LAotICAgICAgICBpbnQgcm90YXRpb24sIGxvbmcg
dGltZXN0YW1wKTsKLSAgfQotCi0gIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIENhcHR1cmVyT2Jz
ZXJ2ZXIgdGhhdCBmb3J3YXJkcyBhbGwgY2FsbHMgZnJvbQotICAvLyBKYXZhIHRvIHRoZSBDIGxh
eWVyLgotICBzdGF0aWMgY2xhc3MgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VPYnNlcnZlciBpbXBs
ZW1lbnRzIENhcHR1cmVyT2JzZXJ2ZXIgewotICAgIC8vIFBvaW50ZXIgdG8gVmlkZW9UcmFja1Nv
dXJjZVByb3h5IHByb3h5aW5nIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlLgotICAgIHByaXZhdGUg
ZmluYWwgbG9uZyBuYXRpdmVTb3VyY2U7Ci0KLSAgICBwdWJsaWMgQW5kcm9pZFZpZGVvVHJhY2tT
b3VyY2VPYnNlcnZlcihsb25nIG5hdGl2ZVNvdXJjZSkgewotICAgICAgdGhpcy5uYXRpdmVTb3Vy
Y2UgPSBuYXRpdmVTb3VyY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgb25DYXB0dXJlclN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKSB7Ci0gICAgICBuYXRpdmVDYXB0
dXJlclN0YXJ0ZWQobmF0aXZlU291cmNlLCBzdWNjZXNzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVyU3RvcHBlZCgpIHsKLSAgICAgIG5hdGl2ZUNh
cHR1cmVyU3RvcHBlZChuYXRpdmVTb3VyY2UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIGJ5dGVbXSBk
YXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lU3RhbXAp
IHsKLSAgICAgIG5hdGl2ZU9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgICAgbmF0
aXZlU291cmNlLCBkYXRhLCBkYXRhLmxlbmd0aCwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24sIHRp
bWVTdGFtcCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0
dXJlRnJhbWVDYXB0dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQs
Ci0gICAgICAgIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGlt
ZXN0YW1wKSB7Ci0gICAgICBuYXRpdmVPblRleHR1cmVGcmFtZUNhcHR1cmVkKAotICAgICAgICAg
IG5hdGl2ZVNvdXJjZSwgd2lkdGgsIGhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRy
aXgsIHJvdGF0aW9uLCB0aW1lc3RhbXApOwotICAgIH0KLQotICAgIHByaXZhdGUgbmF0aXZlIHZv
aWQgbmF0aXZlQ2FwdHVyZXJTdGFydGVkKGxvbmcgbmF0aXZlU291cmNlLCBib29sZWFuIHN1Y2Nl
c3MpOwotICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2FwdHVyZXJTdG9wcGVkKGxvbmcg
bmF0aXZlU291cmNlKTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU9uQnl0ZUJ1ZmZl
ckZyYW1lQ2FwdHVyZWQobG9uZyBuYXRpdmVTb3VyY2UsIGJ5dGVbXSBkYXRhLCBpbnQgbGVuZ3Ro
LAotICAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1l
U3RhbXApOwotICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlT25UZXh0dXJlRnJhbWVDYXB0
dXJlZChsb25nIG5hdGl2ZVNvdXJjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICBp
bnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBs
b25nIHRpbWVzdGFtcCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2Vk
IHRvIGluaXRpYWxpemUgdGhlIGNhbWVyYSB0aHJlYWQsIHRoZSBhbmRyb2lkIGFwcGxpY2F0aW9u
IGNvbnRleHQsIGFuZCB0aGUKLSAgICogY2FwdHVyZSBvYnNlcnZlci4gSXQgd2lsbCBiZSBjYWxs
ZWQgb25seSBvbmNlIGFuZCBiZWZvcmUgYW55IHN0YXJ0Q2FwdHVyZSgpIHJlcXVlc3QuIFRoZQot
ICAgKiBjYW1lcmEgdGhyZWFkIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgdW50aWwgZGlzcG9z
ZSgpIGlzIGNhbGxlZC4gSWYgdGhlIFZpZGVvQ2FwdHVyZXIgd2FudHMKLSAgICogdG8gZGVsaXZl
ciB0ZXh0dXJlIGZyYW1lcywgaXQgc2hvdWxkIGRvIHRoaXMgYnkgcmVuZGVyaW5nIG9uIHRoZSBT
dXJmYWNlVGV4dHVyZSBpbgotICAgKiB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8LCByZWdpc3RlciBp
dHNlbGYgYXMgYSBsaXN0ZW5lciwgYW5kIGZvcndhcmQgdGhlIHRleHR1cmUgZnJhbWVzIHRvCi0g
ICAqIENhcHR1cmVyT2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgpLgotICAgKi8KLSAg
dm9pZCBpbml0aWFsaXplKFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVy
LCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIENhcHR1cmVyT2JzZXJ2ZXIgY2Fw
dHVyZXJPYnNlcnZlcik7Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGNhcHR1cmluZyBmcmFtZXMgaW4g
YSBmb3JtYXQgdGhhdCBpcyBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB8d2lkdGh8IHggfGhlaWdo
dHwgYW5kCi0gICAqIHxmcmFtZXJhdGV8LgotICAgKi8KLSAgdm9pZCBzdGFydENhcHR1cmUoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKTsKLQotICAvKioKLSAgICogU3RvcCBj
YXB0dXJpbmcuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJsb2NrIHVudGlsIGNhcHR1cmUgaXMgYWN0
dWFsbHkgc3RvcHBlZC4KLSAgICovCi0gIHZvaWQgc3RvcENhcHR1cmUoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb247Ci0KLSAgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSk7Ci0KLSAgLyoqCi0gICAqIFBlcmZvcm0gYW55IGZp
bmFsIGNsZWFudXAgaGVyZS4gTm8gbW9yZSBjYXB0dXJpbmcgd2lsbCBiZSBkb25lIGFmdGVyIHRo
aXMgY2FsbC4KLSAgICovCi0gIHZvaWQgZGlzcG9zZSgpOwotCi0gIC8qKgotICAgKiBAcmV0dXJu
IHRydWUgaWYtYW5kLW9ubHktaWYgdGhpcyBpcyBhIHNjcmVlbiBjYXB0dXJlci4KLSAgICovCi0g
IGJvb2xlYW4gaXNTY3JlZW5jYXN0KCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVv
Q2FwdHVyZXJBbmRyb2lkLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRl
b0NhcHR1cmVyQW5kcm9pZC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1ZpZGVvQ2FwdHVyZXJBbmRyb2lkLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NTAgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1w
b3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5I
YXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1p
bXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51
dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRv
bWljLkF0b21pY0Jvb2xlYW47Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFu
ZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLk1ldHJpY3MuSGlzdG9ncmFt
OwotCi0vLyBBbmRyb2lkIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIFZpZGVvQ2FwdHVyZXIu
Ci0vLyBBbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIGNhbiBiZSBjcmVhdGVkIGJ5IGFuIGFwcGxp
Y2F0aW9uIHVzaW5nCi0vLyBWaWRlb0NhcHR1cmVyQW5kcm9pZC5jcmVhdGUoKTsKLS8vIFRoaXMg
Y2xhc3MgZXh0ZW5kcyBWaWRlb0NhcHR1cmVyIHdpdGggYSBtZXRob2QgdG8gZWFzaWx5IHN3aXRj
aCBiZXR3ZWVuIHRoZQotLy8gZnJvbnQgYW5kIGJhY2sgY2FtZXJhLiBJdCBhbHNvIHByb3ZpZGVz
IG1ldGhvZHMgZm9yIGVudW1lcmF0aW5nIHZhbGlkIGRldmljZQotLy8gbmFtZXMuCi0vLwotLy8g
VGhyZWFkaW5nIG5vdGVzOiB0aGlzIGNsYXNzIGlzIGNhbGxlZCBmcm9tIEMrKyBjb2RlLCBBbmRy
b2lkIENhbWVyYSBjYWxsYmFja3MsIGFuZCBwb3NzaWJseQotLy8gYXJiaXRyYXJ5IEphdmEgdGhy
ZWFkcy4gQWxsIHB1YmxpYyBlbnRyeSBwb2ludHMgYXJlIHRocmVhZCBzYWZlLCBhbmQgZGVsZWdh
dGUgdGhlIHdvcmsgdG8gdGhlCi0vLyBjYW1lcmEgdGhyZWFkLiBUaGUgaW50ZXJuYWwgKk9uQ2Ft
ZXJhVGhyZWFkKCkgbWV0aG9kcyBtdXN0IGNoZWNrIHxjYW1lcmF8IGZvciBudWxsIHRvIGNoZWNr
IGlmCi0vLyB0aGUgY2FtZXJhIGhhcyBiZWVuIHN0b3BwZWQuCi0vLwotLy8gVGhpcyBjbGFzcyBp
cyBkZXByZWNhdGVkIGFuZCB3aWxsIG9ubHkgYmUgdXNlZCBpZiB5b3UgbWFudWFsbHkgY3JlYXRl
IGl0LiBQbGVhc2UgdXNlCi0vLyBDYW1lcmExQ2FwdHVyZXIgaW5zdGVhZC4KLUBEZXByZWNhdGVk
Ci1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIFZpZGVvQ2Fw
dHVyZXJBbmRyb2lkCi0gICAgaW1wbGVtZW50cyBDYW1lcmFWaWRlb0NhcHR1cmVyLCBhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5QcmV2aWV3Q2FsbGJhY2ssCi0gICAgICAgICAgICAgICBTdXJmYWNl
VGV4dHVyZUhlbHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJWaWRlb0NhcHR1cmVyQW5kcm9pZCI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBDQU1FUkFfU1RPUF9USU1FT1VUX01TID0gNzAwMDsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIHZpZGVvQ2FwdHVyZXJBbmRyb2lkU3RhcnRU
aW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFu
ZHJvaWQuVmlkZW9DYXB0dXJlckFuZHJvaWQuU3RhcnRUaW1lTXMiLCAxLCAxMDAwMCwgNTApOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gdmlkZW9DYXB0dXJlckFuZHJvaWRTdG9w
VGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5B
bmRyb2lkLlZpZGVvQ2FwdHVyZXJBbmRyb2lkLlN0b3BUaW1lTXMiLCAxLCAxMDAwMCwgNTApOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gdmlkZW9DYXB0dXJlckFuZHJvaWRSZXNv
bHV0aW9uSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVFbnVtZXJhdGlvbigiV2Vi
UlRDLkFuZHJvaWQuVmlkZW9DYXB0dXJlckFuZHJvaWQuUmVzb2x1dGlvbiIsCi0gICAgICAgICAg
Q2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNPTU1PTl9SRVNPTFVUSU9OUy5zaXplKCkpOwotCi0g
IHByaXZhdGUgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhOyAvLyBPbmx5IG5vbi1udWxs
IHdoaWxlIGNhcHR1cmluZy4KLSAgcHJpdmF0ZSBmaW5hbCBBdG9taWNCb29sZWFuIGlzQ2FtZXJh
UnVubmluZyA9IG5ldyBBdG9taWNCb29sZWFuKCk7Ci0gIC8vIFVzZSBtYXliZVBvc3RPbkNhbWVy
YVRocmVhZCgpIGluc3RlYWQgb2YgcG9zdGluZyBkaXJlY3RseSB0byB0aGUgaGFuZGxlciAtIHRo
aXMgd2F5IGFsbAotICAvLyBjYWxsYmFja3Mgd2l0aCBhIHNwZWNpZmVkIHRva2VuIGNhbiBiZSBy
ZW1vdmVkIGF0IG9uY2UuCi0gIHByaXZhdGUgdm9sYXRpbGUgSGFuZGxlciBjYW1lcmFUaHJlYWRI
YW5kbGVyOwotICBwcml2YXRlIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICAvLyBTeW5j
aHJvbml6YXRpb24gbG9jayBmb3IgfGlkfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgY2FtZXJh
SWRMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGludCBpZDsKLSAgcHJpdmF0ZSBhbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm87Ci0gIHByaXZhdGUgQ2FtZXJhU3Rh
dGlzdGljcyBjYW1lcmFTdGF0aXN0aWNzOwotICAvLyBSZW1lbWJlciB0aGUgcmVxdWVzdGVkIGZv
cm1hdCBpbiBjYXNlIHdlIHdhbnQgdG8gc3dpdGNoIGNhbWVyYXMuCi0gIHByaXZhdGUgaW50IHJl
cXVlc3RlZFdpZHRoOwotICBwcml2YXRlIGludCByZXF1ZXN0ZWRIZWlnaHQ7Ci0gIHByaXZhdGUg
aW50IHJlcXVlc3RlZEZyYW1lcmF0ZTsKLSAgLy8gVGhlIGNhcHR1cmUgZm9ybWF0IHdpbGwgYmUg
dGhlIGNsb3Nlc3Qgc3VwcG9ydGVkIGZvcm1hdCB0byB0aGUgcmVxdWVzdGVkIGZvcm1hdC4KLSAg
cHJpdmF0ZSBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQ7Ci0gIHByaXZhdGUgZmluYWwgT2Jq
ZWN0IHBlbmRpbmdDYW1lcmFTd2l0Y2hMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIHZv
bGF0aWxlIGJvb2xlYW4gcGVuZGluZ0NhbWVyYVN3aXRjaDsKLSAgcHJpdmF0ZSBDYXB0dXJlck9i
c2VydmVyIGZyYW1lT2JzZXJ2ZXIgPSBudWxsOwotICBwcml2YXRlIGZpbmFsIENhbWVyYUV2ZW50
c0hhbmRsZXIgZXZlbnRzSGFuZGxlcjsKLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVSZXBv
cnRlZDsKLSAgLy8gQXJiaXRyYXJ5IHF1ZXVlIGRlcHRoLiAgSGlnaGVyIG51bWJlciBtZWFucyBt
b3JlIG1lbW9yeSBhbGxvY2F0ZWQgJiBoZWxkLAotICAvLyBsb3dlciBudW1iZXIgbWVhbnMgbW9y
ZSBzZW5zaXRpdml0eSB0byBwcm9jZXNzaW5nIHRpbWUgaW4gdGhlIGNsaWVudCAoYW5kCi0gIC8v
IHBvdGVudGlhbGx5IHN0YWxsaW5nIHRoZSBjYXB0dXJlciBpZiBpdCBydW5zIG91dCBvZiBidWZm
ZXJzIHRvIHdyaXRlIHRvKS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9D
QVBUVVJFX0JVRkZFUlMgPSAzOwotICBwcml2YXRlIGZpbmFsIFNldDxieXRlW10+IHF1ZXVlZEJ1
ZmZlcnMgPSBuZXcgSGFzaFNldDxieXRlW10+KCk7Ci0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBp
c0NhcHR1cmluZ1RvVGV4dHVyZTsKLSAgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJm
YWNlSGVscGVyOwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTUFYX09QRU5fQ0FNRVJBX0FU
VEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE9QRU5fQ0FNRVJBX0RFTEFZ
X01TID0gNTAwOwotICBwcml2YXRlIGludCBvcGVuQ2FtZXJhQXR0ZW1wdHM7Ci0KLSAgLy8gVXNl
ZCBmb3Igc3RhdGlzdGljcy4KLSAgcHJpdmF0ZSBsb25nIHN0YXJ0U3RhcnRUaW1lTnM7IC8vIFRo
ZSB0aW1lIGluIG5hbm9zZWNvbmRzIHdoZW4gc3RhcnRpbmcgdGhlIGNhbWVyYSBiZWdhbi4KLQot
ICAvLyBDYW1lcmEgZXJyb3IgY2FsbGJhY2suCi0gIHByaXZhdGUgZmluYWwgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuRXJyb3JDYWxsYmFjayBjYW1lcmFFcnJvckNhbGxiYWNrID0KLSAgICAgIG5l
dyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5FcnJvckNhbGxiYWNrKCkgewotICAgICAgICBAT3Zl
cnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25FcnJvcihpbnQgZXJyb3IsIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhIGNhbWVyYSkgewotICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0g
ICAgICAgICAgaWYgKGVycm9yID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNBTUVSQV9FUlJP
Ul9TRVJWRVJfRElFRCkgewotICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBzZXJ2
ZXIgZGllZCEiOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2Ug
PSAiQ2FtZXJhIGVycm9yOiAiICsgZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICAgIExvZ2dp
bmcuZShUQUcsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0g
bnVsbCkgewotICAgICAgICAgICAgaWYgKGVycm9yID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LkNBTUVSQV9FUlJPUl9FVklDVEVEKSB7Ci0gICAgICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25D
YW1lcmFEaXNjb25uZWN0ZWQoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
IGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLQotICBwdWJsaWMgc3RhdGljIFZp
ZGVvQ2FwdHVyZXJBbmRyb2lkIGNyZWF0ZShTdHJpbmcgbmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxl
ciBldmVudHNIYW5kbGVyKSB7Ci0gICAgcmV0dXJuIFZpZGVvQ2FwdHVyZXJBbmRyb2lkLmNyZWF0
ZShuYW1lLCBldmVudHNIYW5kbGVyLCBmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKTsKLSAg
fQotCi0gIC8vIFVzZSBjdG9yIGRpcmVjdGx5IGluc3RlYWQuCi0gIEBEZXByZWNhdGVkCi0gIHB1
YmxpYyBzdGF0aWMgVmlkZW9DYXB0dXJlckFuZHJvaWQgY3JlYXRlKAotICAgICAgU3RyaW5nIG5h
bWUsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlciwgYm9vbGVhbiBjYXB0dXJlVG9U
ZXh0dXJlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBuZXcgVmlkZW9DYXB0dXJlckFuZHJv
aWQobmFtZSwgZXZlbnRzSGFuZGxlciwgY2FwdHVyZVRvVGV4dHVyZSk7Ci0gICAgfSBjYXRjaCAo
UnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ291bGRuJ3QgY3Jl
YXRlIGNhbWVyYS4iLCBlKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHByaW50U3RhY2tUcmFjZSgpIHsKLSAgICBUaHJlYWQgY2FtZXJhVGhyZWFkID0g
bnVsbDsKLSAgICBpZiAoY2FtZXJhVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBjYW1l
cmFUaHJlYWQgPSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpOwot
ICAgIH0KLSAgICBpZiAoY2FtZXJhVGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNrVHJhY2VF
bGVtZW50W10gY2FtZXJhU3RhY2tUcmFjZXMgPSBjYW1lcmFUaHJlYWQuZ2V0U3RhY2tUcmFjZSgp
OwotICAgICAgaWYgKGNhbWVyYVN0YWNrVHJhY2VzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgTG9n
Z2luZy5kKFRBRywgIlZpZGVvQ2FwdHVyZXJBbmRyb2lkIHN0YWNrcyB0cmFjZToiKTsKLSAgICAg
ICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCBzdGFja1RyYWNlIDogY2FtZXJhU3RhY2tUcmFjZXMp
IHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRvU3RyaW5nKCkpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gU3dpdGNoIGNhbWVyYSB0byB0aGUg
bmV4dCB2YWxpZCBjYW1lcmEgaWQuIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIHdoaWxlCi0gIC8v
IHRoZSBjYW1lcmEgaXMgcnVubmluZy4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3aXRj
aENhbWVyYShmaW5hbCBDYW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXIpIHsK
LSAgICBpZiAoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCkgPCAy
KSB7Ci0gICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIHN3
aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiTm8gY2FtZXJhIHRvIHN3aXRj
aCB0by4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3luY2hyb25pemVk
IChwZW5kaW5nQ2FtZXJhU3dpdGNoTG9jaykgewotICAgICAgaWYgKHBlbmRpbmdDYW1lcmFTd2l0
Y2gpIHsKLSAgICAgICAgLy8gRG8gbm90IGhhbmRsZSBtdWx0aXBsZSBjYW1lcmEgc3dpdGNoIHJl
cXVlc3QgdG8gYXZvaWQgYmxvY2tpbmcKLSAgICAgICAgLy8gY2FtZXJhIHRocmVhZCBieSBoYW5k
bGluZyB0b28gbWFueSBzd2l0Y2ggcmVxdWVzdCBmcm9tIGEgcXVldWUuCi0gICAgICAgIExvZ2dp
bmcudyhUQUcsICJJZ25vcmluZyBjYW1lcmEgc3dpdGNoIHJlcXVlc3QuIik7Ci0gICAgICAgIGlm
IChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICBzd2l0Y2hFdmVudHNI
YW5kbGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoIlBlbmRpbmcgY2FtZXJhIHN3aXRjaCBhbHJlYWR5
IGluIHByb2dyZXNzLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAg
ICAgIHBlbmRpbmdDYW1lcmFTd2l0Y2ggPSB0cnVlOwotICAgIH0KLSAgICBmaW5hbCBib29sZWFu
IGRpZFBvc3QgPSBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc3dpdGNoQ2Ft
ZXJhT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgICAgc3luY2hyb25pemVkIChwZW5kaW5nQ2FtZXJh
U3dpdGNoTG9jaykgewotICAgICAgICAgIHBlbmRpbmdDYW1lcmFTd2l0Y2ggPSBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAg
ICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaERvbmUoCi0gICAgICAgICAg
ICAgIGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FN
RVJBX0ZBQ0lOR19GUk9OVCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAo
IWRpZFBvc3QgJiYgc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBzd2l0Y2hF
dmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoIkNhbWVyYSBpcyBzdG9wcGVkLiIpOwot
ICAgIH0KLSAgfQotCi0gIC8vIFJlY29uZmlndXJlIHRoZSBjYW1lcmEgdG8gY2FwdHVyZSBpbiBh
IG5ldyBmb3JtYXQuIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZSBjYW1lcmEK
LSAgLy8gaXMgcnVubmluZy4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNoYW5nZUNhcHR1
cmVGb3JtYXQoZmluYWwgaW50IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgZnJh
bWVyYXRlKSB7Ci0gICAgbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHN0YXJ0
UHJldmlld09uQ2FtZXJhVGhyZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1
cnJlbnQgY2FtZXJhIGlkIHN5bmNocm9ub3VzbHkuIE5vdGUgdGhhdCB0aGUgY2FtZXJhIGlkIG1p
Z2h0Ci0gIC8vIGNoYW5nZSBhdCBhbnkgcG9pbnQgYnkgc3dpdGNoQ2FtZXJhKCkgY2FsbHMuCi0g
IHByaXZhdGUgaW50IGdldEN1cnJlbnRDYW1lcmFJZCgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGNh
bWVyYUlkTG9jaykgewotICAgICAgcmV0dXJuIGlkOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIFZpZGVvQ2FwdHVyZXIgaXMgc2V0dXAgdG8gY2FwdHVyZSB2aWRlbyBm
cmFtZXMgdG8gYSBTdXJmYWNlVGV4dHVyZS4KLSAgcHVibGljIGJvb2xlYW4gaXNDYXB0dXJpbmdU
b1RleHR1cmUoKSB7Ci0gICAgcmV0dXJuIGlzQ2FwdHVyaW5nVG9UZXh0dXJlOwotICB9Ci0KLSAg
cHVibGljIFZpZGVvQ2FwdHVyZXJBbmRyb2lkKAotICAgICAgU3RyaW5nIGNhbWVyYU5hbWUsIENh
bWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlciwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJl
KSB7Ci0gICAgaWYgKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9mQ2FtZXJhcygp
ID09IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBjYW1lcmFzIGF2
YWlsYWJsZSIpOwotICAgIH0KLSAgICBpZiAoY2FtZXJhTmFtZSA9PSBudWxsIHx8IGNhbWVyYU5h
bWUuZXF1YWxzKCIiKSkgewotICAgICAgdGhpcy5pZCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHRoaXMuaWQgPSBDYW1lcmExRW51bWVyYXRvci5nZXRDYW1lcmFJbmRleChjYW1lcmFOYW1lKTsK
LSAgICB9Ci0gICAgdGhpcy5ldmVudHNIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjsKLSAgICBpc0Nh
cHR1cmluZ1RvVGV4dHVyZSA9IGNhcHR1cmVUb1RleHR1cmU7Ci0gICAgTG9nZ2luZy5kKFRBRywg
IlZpZGVvQ2FwdHVyZXJBbmRyb2lkIGlzQ2FwdHVyaW5nVG9UZXh0dXJlIDogIiArIGlzQ2FwdHVy
aW5nVG9UZXh0dXJlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja0lzT25DYW1lcmFUaHJl
YWQoKSB7Ci0gICAgaWYgKGNhbWVyYVRocmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgIkNhbWVyYSBpcyBub3QgaW5pdGlhbGl6ZWQgLSBjYW4ndCBjaGVjayB0aHJl
YWQuIik7Ci0gICAgfSBlbHNlIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRo
cmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZCIpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgYm9vbGVhbiBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChSdW5uYWJsZSBydW5uYWJsZSkg
ewotICAgIHJldHVybiBtYXliZVBvc3REZWxheWVkT25DYW1lcmFUaHJlYWQoMCAvKiBkZWxheU1z
ICovLCBydW5uYWJsZSk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gbWF5YmVQb3N0RGVsYXll
ZE9uQ2FtZXJhVGhyZWFkKGludCBkZWxheU1zLCBSdW5uYWJsZSBydW5uYWJsZSkgewotICAgIHJl
dHVybiBjYW1lcmFUaHJlYWRIYW5kbGVyICE9IG51bGwgJiYgaXNDYW1lcmFSdW5uaW5nLmdldCgp
Ci0gICAgICAgICYmIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdEF0VGltZSgKLSAgICAgICAgICAg
ICAgIHJ1bm5hYmxlLCB0aGlzIC8qIHRva2VuICovLCBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMo
KSArIGRlbGF5TXMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2Uo
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImRpc3Bvc2UiKTsKLSAgfQotCi0gIHByaXZhdGUgYm9v
bGVhbiBpc0luaXRpYWxpemVkKCkgewotICAgIHJldHVybiBhcHBsaWNhdGlvbkNvbnRleHQgIT0g
bnVsbCAmJiBmcmFtZU9ic2VydmVyICE9IG51bGw7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgaW5pdGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhl
bHBlciwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYXB0dXJlck9ic2VydmVy
IGZyYW1lT2JzZXJ2ZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdGlhbGl6ZSIpOwotICAg
IGlmIChhcHBsaWNhdGlvbkNvbnRleHQgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IElsbGVn
YWxBcmd1bWVudEV4Y2VwdGlvbigiYXBwbGljYXRpb25Db250ZXh0IG5vdCBzZXQuIik7Ci0gICAg
fQotICAgIGlmIChmcmFtZU9ic2VydmVyID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJbGxl
Z2FsQXJndW1lbnRFeGNlcHRpb24oImZyYW1lT2JzZXJ2ZXIgbm90IHNldC4iKTsKLSAgICB9Ci0g
ICAgaWYgKGlzSW5pdGlhbGl6ZWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbigiQWxyZWFkeSBpbml0aWFsaXplZCIpOwotICAgIH0KLSAgICB0aGlzLmFwcGxpY2F0
aW9uQ29udGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICB0aGlzLmZyYW1lT2JzZXJ2ZXIg
PSBmcmFtZU9ic2VydmVyOwotICAgIHRoaXMuc3VyZmFjZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJl
SGVscGVyOwotICAgIHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9Ci0gICAgICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyID09IG51bGwgPyBudWxsIDogc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFu
ZGxlcigpOwotICB9Ci0KLSAgLy8gTm90ZSB0aGF0IHRoaXMgYWN0dWFsbHkgb3BlbnMgdGhlIGNh
bWVyYSwgYW5kIENhbWVyYSBjYWxsYmFja3MgcnVuIG9uIHRoZQotICAvLyB0aHJlYWQgdGhhdCBj
YWxscyBvcGVuKCksIHNvIHRoaXMgaXMgZG9uZSBvbiB0aGUgQ2FtZXJhVGhyZWFkLgotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgc3RhcnRDYXB0dXJlKGZpbmFsIGludCB3aWR0aCwgZmluYWwg
aW50IGhlaWdodCwgZmluYWwgaW50IGZyYW1lcmF0ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJz
dGFydENhcHR1cmUgcmVxdWVzdGVkOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBm
cmFtZXJhdGUpOwotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJzdGFydENhcHR1cmUgY2FsbGVkIGluIHVuaW5pdGlhbGl6
ZWQgc3RhdGUiKTsKLSAgICB9Ci0gICAgaWYgKHN1cmZhY2VIZWxwZXIgPT0gbnVsbCkgewotICAg
ICAgZnJhbWVPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZChmYWxzZSAvKiBzdWNjZXNzICovKTsK
LSAgICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgZXZlbnRzSGFuZGxl
ci5vbkNhbWVyYUVycm9yKCJObyBTdXJmYWNlVGV4dHVyZSBjcmVhdGVkLiIpOwotICAgICAgfQot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNDYW1lcmFSdW5uaW5nLmdldEFuZFNldCh0
cnVlKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBoYXMgYWxyZWFkeSBiZWVuIHN0
YXJ0ZWQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGZpbmFsIGJvb2xlYW4gZGlkUG9z
dCA9IG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBvcGVuQ2FtZXJhQXR0ZW1w
dHMgPSAwOwotICAgICAgICBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZCh3aWR0aCwgaGVpZ2h0
LCBmcmFtZXJhdGUpOwotICAgICAgfQotICAgIH0pOwotICAgIGlmICghZGlkUG9zdCkgewotICAg
ICAgZnJhbWVPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZChmYWxzZSk7Ci0gICAgICBpZiAoZXZl
bnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJv
cigiQ291bGQgbm90IHBvc3QgdGFzayB0byBjYW1lcmEgdGhyZWFkLiIpOwotICAgICAgfQotICAg
ICAgaXNDYW1lcmFSdW5uaW5nLnNldChmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhyZWFkKGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50
IGhlaWdodCwgZmluYWwgaW50IGZyYW1lcmF0ZSkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVh
ZCgpOwotICAgIHN0YXJ0U3RhcnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICBpZiAo
IWlzQ2FtZXJhUnVubmluZy5nZXQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInN0YXJ0Q2Fw
dHVyZU9uQ2FtZXJhVGhyZWFkOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoY2FtZXJhICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJz
dGFydENhcHR1cmVPbkNhbWVyYVRocmVhZDogQ2FtZXJhIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRl
ZC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy5maXJzdEZyYW1lUmVwb3J0ZWQg
PSBmYWxzZTsKLQotICAgIHRyeSB7Ci0gICAgICB0cnkgewotICAgICAgICBzeW5jaHJvbml6ZWQg
KGNhbWVyYUlkTG9jaykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJPcGVuaW5nIGNhbWVy
YSAiICsgaWQpOwotICAgICAgICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAg
ICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFPcGVuaW5nKENhbWVyYTFFbnVtZXJhdG9yLmdl
dERldmljZU5hbWUoaWQpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FtZXJhID0gYW5kcm9p
ZC5oYXJkd2FyZS5DYW1lcmEub3BlbihpZCk7Ci0gICAgICAgICAgaW5mbyA9IG5ldyBhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvKCk7Ci0gICAgICAgICAgYW5kcm9pZC5oYXJkd2Fy
ZS5DYW1lcmEuZ2V0Q2FtZXJhSW5mbyhpZCwgaW5mbyk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0
Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICBvcGVuQ2FtZXJhQXR0ZW1wdHMrKzsK
LSAgICAgICAgaWYgKG9wZW5DYW1lcmFBdHRlbXB0cyA8IE1BWF9PUEVOX0NBTUVSQV9BVFRFTVBU
UykgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEub3BlbiBmYWlsZWQsIHJldHJ5
aW5nIiwgZSk7Ci0gICAgICAgICAgbWF5YmVQb3N0RGVsYXllZE9uQ2FtZXJhVGhyZWFkKE9QRU5f
Q0FNRVJBX0RFTEFZX01TLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUK
LSAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgc3RhcnRDYXB0
dXJlT25DYW1lcmFUaHJlYWQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9KTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
dGhyb3cgZTsKLSAgICAgIH0KLQotICAgICAgY2FtZXJhLnNldFByZXZpZXdUZXh0dXJlKHN1cmZh
Y2VIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJD
YW1lcmEgb3JpZW50YXRpb246ICIgKyBpbmZvLm9yaWVudGF0aW9uICsgIiAuRGV2aWNlIG9yaWVu
dGF0aW9uOiAiCi0gICAgICAgICAgICAgICsgZ2V0RGV2aWNlT3JpZW50YXRpb24oKSk7Ci0gICAg
ICBjYW1lcmEuc2V0RXJyb3JDYWxsYmFjayhjYW1lcmFFcnJvckNhbGxiYWNrKTsKLSAgICAgIHN0
YXJ0UHJldmlld09uQ2FtZXJhVGhyZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAg
ICBmcmFtZU9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKHRydWUpOwotICAgICAgaWYgKGlzQ2Fw
dHVyaW5nVG9UZXh0dXJlKSB7Ci0gICAgICAgIHN1cmZhY2VIZWxwZXIuc3RhcnRMaXN0ZW5pbmco
dGhpcyk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFN0YXJ0IGNhbWVyYSBvYnNlcnZlci4KLSAgICAg
IGNhbWVyYVN0YXRpc3RpY3MgPSBuZXcgQ2FtZXJhU3RhdGlzdGljcyhzdXJmYWNlSGVscGVyLCBl
dmVudHNIYW5kbGVyKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiB8IFJ1bnRpbWVFeGNlcHRp
b24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInN0YXJ0Q2FwdHVyZSBmYWlsZWQiLCBlKTsK
LSAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2FtZXJhIGlzIHJlbGVhc2VkLgotICAgICAgc3RvcENh
cHR1cmVPbkNhbWVyYVRocmVhZCh0cnVlIC8qIHN0b3BIYW5kbGVyICovKTsKLSAgICAgIGZyYW1l
T2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQoZmFsc2UpOwotICAgICAgaWYgKGV2ZW50c0hhbmRs
ZXIgIT0gbnVsbCkgewotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoIkNhbWVy
YSBjYW4gbm90IGJlIHN0YXJ0ZWQuIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gKFJl
KXN0YXJ0IHByZXZpZXcgd2l0aCB0aGUgY2xvc2VzdCBzdXBwb3J0ZWQgZm9ybWF0IHRvIHx3aWR0
aHwgeCB8aGVpZ2h0fCBAIHxmcmFtZXJhdGV8LgotICBwcml2YXRlIHZvaWQgc3RhcnRQcmV2aWV3
T25DYW1lcmFUaHJlYWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0g
ICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgaWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0
KCkgfHwgY2FtZXJhID09IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJzdGFydFByZXZp
ZXdPbkNhbWVyYVRocmVhZDogQ2FtZXJhIGlzIHN0b3BwZWQiKTsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgTG9nZ2luZy5kKAotICAgICAgICBUQUcsICJzdGFydFByZXZpZXdPbkNhbWVyYVRo
cmVhZCByZXF1ZXN0ZWQ6ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0
ZSk7Ci0KLSAgICByZXF1ZXN0ZWRXaWR0aCA9IHdpZHRoOwotICAgIHJlcXVlc3RlZEhlaWdodCA9
IGhlaWdodDsKLSAgICByZXF1ZXN0ZWRGcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0KLSAgICAvLyBG
aW5kIGNsb3Nlc3Qgc3VwcG9ydGVkIGZvcm1hdCBmb3IgfHdpZHRofCB4IHxoZWlnaHR8IEAgfGZy
YW1lcmF0ZXwuCi0gICAgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycyBw
YXJhbWV0ZXJzID0gY2FtZXJhLmdldFBhcmFtZXRlcnMoKTsKLSAgICBmaW5hbCBMaXN0PENhcHR1
cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IHN1cHBvcnRlZEZyYW1lcmF0ZXMgPQotICAgICAgICBD
YW1lcmExRW51bWVyYXRvci5jb252ZXJ0RnJhbWVyYXRlcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRl
ZFByZXZpZXdGcHNSYW5nZSgpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIGZwcyBy
YW5nZXM6ICIgKyBzdXBwb3J0ZWRGcmFtZXJhdGVzKTsKLQotICAgIGZpbmFsIENhcHR1cmVGb3Jt
YXQuRnJhbWVyYXRlUmFuZ2UgZnBzUmFuZ2UgPQotICAgICAgICBDYW1lcmFFbnVtZXJhdGlvbkFu
ZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKHN1cHBvcnRlZEZyYW1lcmF0
ZXMsIGZyYW1lcmF0ZSk7Ci0KLSAgICBmaW5hbCBMaXN0PFNpemU+IHN1cHBvcnRlZFByZXZpZXdT
aXplcyA9Ci0gICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJz
LmdldFN1cHBvcnRlZFByZXZpZXdTaXplcygpKTsKLSAgICBmaW5hbCBTaXplIHByZXZpZXdTaXpl
ID0KLSAgICAgICAgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRT
aXplKHN1cHBvcnRlZFByZXZpZXdTaXplcywgd2lkdGgsIGhlaWdodCk7Ci0gICAgQ2FtZXJhRW51
bWVyYXRpb25BbmRyb2lkLnJlcG9ydENhbWVyYVJlc29sdXRpb24oCi0gICAgICAgIHZpZGVvQ2Fw
dHVyZXJBbmRyb2lkUmVzb2x1dGlvbkhpc3RvZ3JhbSwgcHJldmlld1NpemUpOwotICAgIExvZ2dp
bmcuZChUQUcsICJBdmFpbGFibGUgcHJldmlldyBzaXplczogIiArIHN1cHBvcnRlZFByZXZpZXdT
aXplcyk7Ci0KLSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQgPQotICAgICAg
ICBuZXcgQ2FwdHVyZUZvcm1hdChwcmV2aWV3U2l6ZS53aWR0aCwgcHJldmlld1NpemUuaGVpZ2h0
LCBmcHNSYW5nZSk7Ci0KLSAgICAvLyBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSB1c2luZyB0aGlz
IGNhcHR1cmUgZm9ybWF0LCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAg
aWYgKGNhcHR1cmVGb3JtYXQuZXF1YWxzKHRoaXMuY2FwdHVyZUZvcm1hdCkpIHsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgY2FtZXJhIHBhcmFtZXRlcnMuCi0gICAgTG9n
Z2luZy5kKFRBRywgImlzVmlkZW9TdGFiaWxpemF0aW9uU3VwcG9ydGVkOiAiICsgcGFyYW1ldGVy
cy5pc1ZpZGVvU3RhYmlsaXphdGlvblN1cHBvcnRlZCgpKTsKLSAgICBpZiAocGFyYW1ldGVycy5p
c1ZpZGVvU3RhYmlsaXphdGlvblN1cHBvcnRlZCgpKSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldFZp
ZGVvU3RhYmlsaXphdGlvbih0cnVlKTsKLSAgICB9Ci0gICAgLy8gTm90ZTogc2V0UmVjb3JkaW5n
SGludCh0cnVlKSBhY3R1YWxseSBkZWNyZWFzZSBmcmFtZSByYXRlIG9uIE41LgotICAgIC8vIHBh
cmFtZXRlcnMuc2V0UmVjb3JkaW5nSGludCh0cnVlKTsKLSAgICBpZiAoY2FwdHVyZUZvcm1hdC5m
cmFtZXJhdGUubWF4ID4gMCkgewotICAgICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3RnBzUmFuZ2Uo
Y2FwdHVyZUZvcm1hdC5mcmFtZXJhdGUubWluLCBjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXgp
OwotICAgIH0KLSAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdTaXplKHByZXZpZXdTaXplLndpZHRo
LCBwcmV2aWV3U2l6ZS5oZWlnaHQpOwotCi0gICAgaWYgKCFpc0NhcHR1cmluZ1RvVGV4dHVyZSkg
ewotICAgICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3Rm9ybWF0KGNhcHR1cmVGb3JtYXQuaW1hZ2VG
b3JtYXQpOwotICAgIH0KLSAgICAvLyBQaWN0dXJlIHNpemUgaXMgZm9yIHRha2luZyBwaWN0dXJl
cyBhbmQgbm90IGZvciBwcmV2aWV3L3ZpZGVvLCBidXQgd2UgbmVlZCB0byBzZXQgaXQgYW55d2F5
Ci0gICAgLy8gYXMgYSB3b3JrYXJvdW5kIGZvciBhbiBhc3BlY3QgcmF0aW8gcHJvYmxlbSBvbiBO
ZXh1cyA3LgotICAgIGZpbmFsIFNpemUgcGljdHVyZVNpemUgPSBDYW1lcmFFbnVtZXJhdGlvbkFu
ZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0gICAgICAgIENhbWVyYTFFbnVtZXJhdG9y
LmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZFBpY3R1cmVTaXplcygpKSwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgcGFyYW1ldGVycy5zZXRQaWN0dXJlU2l6ZShwaWN0dXJlU2l6ZS53
aWR0aCwgcGljdHVyZVNpemUuaGVpZ2h0KTsKLQotICAgIC8vIFRlbXBvcmFyaWx5IHN0b3AgcHJl
dmlldyBpZiBpdCdzIGFscmVhZHkgcnVubmluZy4KLSAgICBpZiAodGhpcy5jYXB0dXJlRm9ybWF0
ICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYS5zdG9wUHJldmlldygpOwotICAgICAgLy8gQ2FsbGlu
ZyB8c2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcnwgd2l0aCBudWxsIHNob3VsZCBjbGVhciB0
aGUgaW50ZXJuYWwgY2FtZXJhIGJ1ZmZlcgotICAgICAgLy8gcXVldWUsIGJ1dCBzb21ldGltZXMg
d2UgcmVjZWl2ZSBhIGZyYW1lIHdpdGggdGhlIG9sZCByZXNvbHV0aW9uIGFmdGVyIHRoaXMgY2Fs
bCBhbnl3YXkuCi0gICAgICBjYW1lcmEuc2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcihudWxs
KTsKLSAgICB9Ci0KLSAgICBMaXN0PFN0cmluZz4gZm9jdXNNb2RlcyA9IHBhcmFtZXRlcnMuZ2V0
U3VwcG9ydGVkRm9jdXNNb2RlcygpOwotICAgIGlmIChmb2N1c01vZGVzLmNvbnRhaW5zKGFuZHJv
aWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVP
KSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkVuYWJsZSBjb250aW51b3VzIGF1dG8gZm9jdXMg
bW9kZS4iKTsKLSAgICAgIHBhcmFtZXRlcnMuc2V0Rm9jdXNNb2RlKGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLlBhcmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKTsKLSAgICB9Ci0K
LSAgICAvLyAoUmUpc3RhcnQgcHJldmlldy4KLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RhcnQgY2Fw
dHVyaW5nOiAiICsgY2FwdHVyZUZvcm1hdCk7Ci0gICAgdGhpcy5jYXB0dXJlRm9ybWF0ID0gY2Fw
dHVyZUZvcm1hdDsKLQotICAgIGNhbWVyYS5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotICAg
IC8vIENhbGN1bGF0ZSBvcmllbnRhdGlvbiBtYW51YWxseSBhbmQgc2VuZCBpdCBhcyBDVk8gaW5z
dGVhZC4KLSAgICBjYW1lcmEuc2V0RGlzcGxheU9yaWVudGF0aW9uKDAgLyogZGVncmVlcyAqLyk7
Ci0gICAgaWYgKCFpc0NhcHR1cmluZ1RvVGV4dHVyZSkgewotICAgICAgcXVldWVkQnVmZmVycy5j
bGVhcigpOwotICAgICAgZmluYWwgaW50IGZyYW1lU2l6ZSA9IGNhcHR1cmVGb3JtYXQuZnJhbWVT
aXplKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9DQVBUVVJFX0JVRkZF
UlM7ICsraSkgewotICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIu
YWxsb2NhdGVEaXJlY3QoZnJhbWVTaXplKTsKLSAgICAgICAgcXVldWVkQnVmZmVycy5hZGQoYnVm
ZmVyLmFycmF5KCkpOwotICAgICAgICBjYW1lcmEuYWRkQ2FsbGJhY2tCdWZmZXIoYnVmZmVyLmFy
cmF5KCkpOwotICAgICAgfQotICAgICAgY2FtZXJhLnNldFByZXZpZXdDYWxsYmFja1dpdGhCdWZm
ZXIodGhpcyk7Ci0gICAgfQotICAgIGNhbWVyYS5zdGFydFByZXZpZXcoKTsKLSAgfQotCi0gIC8v
IEJsb2NrcyB1bnRpbCBjYW1lcmEgaXMga25vd24gdG8gYmUgc3RvcHBlZC4KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHN0b3BDYXB0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RvcENhcHR1cmUiKTsKLSAgICBmaW5hbCBDb3VudERv
d25MYXRjaCBiYXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIGZpbmFsIGJvb2xl
YW4gZGlkUG9zdCA9IG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBzdG9wQ2Fw
dHVyZU9uQ2FtZXJhVGhyZWFkKHRydWUgLyogc3RvcEhhbmRsZXIgKi8pOwotICAgICAgICBiYXJy
aWVyLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0pOwotICAgIGlmICghZGlkUG9zdCkgewot
ICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbGxpbmcgc3RvcENhcHR1cmUoKSBmb3IgYWxyZWFkeSBz
dG9wcGVkIGNhbWVyYS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFiYXJyaWVy
LmF3YWl0KENBTUVSQV9TVE9QX1RJTUVPVVRfTVMsIFRpbWVVbml0Lk1JTExJU0VDT05EUykpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgc3RvcCB0aW1lb3V0Iik7Ci0gICAgICBwcmlu
dFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAg
ICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKCJDYW1lcmEgc3RvcCB0aW1lb3V0Iik7Ci0g
ICAgICB9Ci0gICAgfQotICAgIGZyYW1lT2JzZXJ2ZXIub25DYXB0dXJlclN0b3BwZWQoKTsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAic3RvcENhcHR1cmUgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQoYm9vbGVhbiBzdG9wSGFuZGxlcikgewotICAg
IGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wQ2FwdHVy
ZU9uQ2FtZXJhVGhyZWFkIik7Ci0gICAgZmluYWwgbG9uZyBzdG9wU3RhcnRUaW1lID0gU3lzdGVt
Lm5hbm9UaW1lKCk7Ci0gICAgLy8gTm90ZSB0aGF0IHRoZSBjYW1lcmEgbWlnaHQgc3RpbGwgbm90
IGJlIHN0YXJ0ZWQgaGVyZSBpZiBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZCBmYWlsZWQKLSAg
ICAvLyBhbmQgd2UgcG9zdGVkIGEgcmV0cnkuCi0KLSAgICAvLyBNYWtlIHN1cmUgb25UZXh0dXJl
RnJhbWVBdmFpbGFibGUoKSBpcyBub3QgY2FsbGVkIGFueW1vcmUuCi0gICAgaWYgKHN1cmZhY2VI
ZWxwZXIgIT0gbnVsbCkgewotICAgICAgc3VyZmFjZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0g
ICAgfQotICAgIGlmIChzdG9wSGFuZGxlcikgewotICAgICAgLy8gQ2xlYXIgdGhlIGNhbWVyYVRo
cmVhZEhhbmRsZXIgZmlyc3QsIGluIGNhc2Ugc3RvcFByZXZpZXcgb3IKLSAgICAgIC8vIG90aGVy
IGRyaXZlciBjb2RlIGRlYWRsb2Nrcy4gRGVhZGxvY2sgaW4KLSAgICAgIC8vIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLl9zdG9wUHJldmlldyhOYXRpdmUgTWV0aG9kKSBoYXMKLSAgICAgIC8vIGJl
ZW4gb2JzZXJ2ZWQgb24gTmV4dXMgNSAoaGFtbWVyaGVhZCksIE9TIHZlcnNpb24gTE1ZNDhJLgot
ICAgICAgLy8gVGhlIGNhbWVyYSBtaWdodCBwb3N0IGFub3RoZXIgb25lIG9yIHR3byBwcmV2aWV3
IGZyYW1lcwotICAgICAgLy8gYmVmb3JlIHN0b3BwZWQsIHNvIHdlIGhhdmUgdG8gY2hlY2sgfGlz
Q2FtZXJhUnVubmluZ3wuCi0gICAgICAvLyBSZW1vdmUgYWxsIHBlbmRpbmcgUnVubmFibGVzIHBv
c3RlZCBmcm9tIHx0aGlzfC4KLSAgICAgIGlzQ2FtZXJhUnVubmluZy5zZXQoZmFsc2UpOwotICAg
ICAgY2FtZXJhVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFja3NBbmRNZXNzYWdlcyh0aGlzIC8q
IHRva2VuICovKTsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYVN0YXRpc3RpY3MgIT0gbnVsbCkgewot
ICAgICAgY2FtZXJhU3RhdGlzdGljcy5yZWxlYXNlKCk7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNz
ID0gbnVsbDsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgcHJldmlldy4iKTsKLSAg
ICBpZiAoY2FtZXJhICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYS5zdG9wUHJldmlldygpOwotICAg
ICAgY2FtZXJhLnNldFByZXZpZXdDYWxsYmFja1dpdGhCdWZmZXIobnVsbCk7Ci0gICAgfQotICAg
IHF1ZXVlZEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICBjYXB0dXJlRm9ybWF0ID0gbnVsbDsKLQotICAg
IExvZ2dpbmcuZChUQUcsICJSZWxlYXNlIGNhbWVyYS4iKTsKLSAgICBpZiAoY2FtZXJhICE9IG51
bGwpIHsKLSAgICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgICBjYW1lcmEgPSBudWxsOwotICAg
IH0KLSAgICBpZiAoZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBldmVudHNIYW5kbGVy
Lm9uQ2FtZXJhQ2xvc2VkKCk7Ci0gICAgfQotICAgIGZpbmFsIGludCBzdG9wVGltZU1zID0gKGlu
dCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBzdG9w
U3RhcnRUaW1lKTsKLSAgICB2aWRlb0NhcHR1cmVyQW5kcm9pZFN0b3BUaW1lTXNIaXN0b2dyYW0u
YWRkU2FtcGxlKHN0b3BUaW1lTXMpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wQ2FwdHVyZU9u
Q2FtZXJhVGhyZWFkIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzd2l0Y2hDYW1lcmFP
bkNhbWVyYVRocmVhZCgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAo
IWlzQ2FtZXJhUnVubmluZy5nZXQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInN3aXRjaENh
bWVyYU9uQ2FtZXJhVGhyZWFkOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhT25DYW1lcmFUaHJlYWQiKTsK
LSAgICBzdG9wQ2FwdHVyZU9uQ2FtZXJhVGhyZWFkKGZhbHNlIC8qIHN0b3BIYW5kbGVyICovKTsK
LSAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUlkTG9jaykgewotICAgICAgaWQgPSAoaWQgKyAxKSAl
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9mQ2FtZXJhcygpOwotICAgIH0KLSAg
ICBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZChyZXF1ZXN0ZWRXaWR0aCwgcmVxdWVzdGVkSGVp
Z2h0LCByZXF1ZXN0ZWRGcmFtZXJhdGUpOwotICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1l
cmFPbkNhbWVyYVRocmVhZCBkb25lIik7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXREZXZpY2VP
cmllbnRhdGlvbigpIHsKLSAgICBpbnQgb3JpZW50YXRpb24gPSAwOwotCi0gICAgV2luZG93TWFu
YWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKSBhcHBsaWNhdGlvbkNvbnRleHQuZ2V0U3lzdGVtU2Vy
dmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAgICBzd2l0Y2ggKHdtLmdldERlZmF1bHRE
aXNwbGF5KCkuZ2V0Um90YXRpb24oKSkgewotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzkw
OgotICAgICAgICBvcmllbnRhdGlvbiA9IDkwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
U3VyZmFjZS5ST1RBVElPTl8xODA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMTgwOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8yNzA6Ci0gICAgICAgIG9yaWVu
dGF0aW9uID0gMjcwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElP
Tl8wOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAwOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWVudGF0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBp
bnQgZ2V0RnJhbWVPcmllbnRhdGlvbigpIHsKLSAgICBpbnQgcm90YXRpb24gPSBnZXREZXZpY2VP
cmllbnRhdGlvbigpOwotICAgIGlmIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfQkFDSykgewotICAgICAgcm90YXRpb24gPSAz
NjAgLSByb3RhdGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIChpbmZvLm9yaWVudGF0aW9uICsgcm90
YXRpb24pICUgMzYwOwotICB9Ci0KLSAgLy8gQ2FsbGVkIG9uIGNhbWVyYVRocmVhZCBzbyBtdXN0
IG5vdCAic3luY2hyb25pemVkIi4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUHJldmll
d0ZyYW1lKGJ5dGVbXSBkYXRhLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYWxsYmFja0NhbWVy
YSkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmICghaXNDYW1lcmFSdW5u
aW5nLmdldCgpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAib25QcmV2aWV3RnJhbWU6IENhbWVy
YSBpcyBzdG9wcGVkIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghcXVldWVkQnVm
ZmVycy5jb250YWlucyhkYXRhKSkgewotICAgICAgLy8gfGRhdGF8IGlzIGFuIG9sZCBpbnZhbGlk
IGJ1ZmZlci4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYSAhPSBjYWxsYmFj
a0NhbWVyYSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQg
Y2FtZXJhIGluIGNhbGxiYWNrISIpOwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgY2FwdHVyZVRp
bWVOcyA9IFRpbWVVbml0Lk1JTExJU0VDT05EUy50b05hbm9zKFN5c3RlbUNsb2NrLmVsYXBzZWRS
ZWFsdGltZSgpKTsKLQotICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICBvbkZp
cnN0RnJhbWVBdmFpbGFibGUoKTsKLSAgICB9Ci0gICAgY2FtZXJhU3RhdGlzdGljcy5hZGRGcmFt
ZSgpOwotICAgIGZyYW1lT2JzZXJ2ZXIub25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAg
ICAgZGF0YSwgY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIGdldEZy
YW1lT3JpZW50YXRpb24oKSwgY2FwdHVyZVRpbWVOcyk7Ci0gICAgY2FtZXJhLmFkZENhbGxiYWNr
QnVmZmVyKGRhdGEpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVGV4dHVy
ZUZyYW1lQXZhaWxhYmxlKGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4
LCBsb25nIHRpbWVzdGFtcE5zKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAg
aWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJvblRl
eHR1cmVGcmFtZUF2YWlsYWJsZTogQ2FtZXJhIGlzIHN0b3BwZWQiKTsKLSAgICAgIHN1cmZhY2VI
ZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlu
dCByb3RhdGlvbiA9IGdldEZyYW1lT3JpZW50YXRpb24oKTsKLSAgICBpZiAoaW5mby5mYWNpbmcg
PT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0ZST05U
KSB7Ci0gICAgICAvLyBVbmRvIHRoZSBtaXJyb3IgdGhhdCB0aGUgT1MgImhlbHBzIiB1cyB3aXRo
LgotICAgICAgLy8gaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9p
ZC9oYXJkd2FyZS9DYW1lcmEuaHRtbCNzZXREaXNwbGF5T3JpZW50YXRpb24oaW50KQotICAgICAg
dHJhbnNmb3JtTWF0cml4ID0KLSAgICAgICAgICBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJp
Y2VzKHRyYW5zZm9ybU1hdHJpeCwgUmVuZGVyZXJDb21tb24uaG9yaXpvbnRhbEZsaXBNYXRyaXgo
KSk7Ci0gICAgfQotICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICBvbkZpcnN0
RnJhbWVBdmFpbGFibGUoKTsKLSAgICB9Ci0gICAgY2FtZXJhU3RhdGlzdGljcy5hZGRGcmFtZSgp
OwotICAgIGZyYW1lT2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZChjYXB0dXJlRm9ybWF0
LndpZHRoLCBjYXB0dXJlRm9ybWF0LmhlaWdodCwgb2VzVGV4dHVyZUlkLAotICAgICAgICB0cmFu
c2Zvcm1NYXRyaXgsIHJvdGF0aW9uLCB0aW1lc3RhbXBOcyk7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCkgewotICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51
bGwpIHsKLSAgICAgIGV2ZW50c0hhbmRsZXIub25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAg
fQotICAgIGZpbmFsIGludCBzdGFydFRpbWVNcyA9Ci0gICAgICAgIChpbnQpIFRpbWVVbml0Lk5B
Tk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnRTdGFydFRpbWVOcyk7
Ci0gICAgdmlkZW9DYXB0dXJlckFuZHJvaWRTdGFydFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUo
c3RhcnRUaW1lTXMpOwotICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9IHRydWU7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNTY3JlZW5jYXN0KCkgewotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0ZpbGVSZW5kZXJlci5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9GaWxlUmVuZGVyZXIuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0ZpbGVSZW5kZXJl
ci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBv
cnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0
cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLkJ5dGVC
dWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci0KLS8q
KgotICogQ2FuIGJlIHVzZWQgdG8gc2F2ZSB0aGUgdmlkZW8gZnJhbWVzIHRvIGZpbGUuCi0gKi8K
LXB1YmxpYyBjbGFzcyBWaWRlb0ZpbGVSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIu
Q2FsbGJhY2tzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJWaWRlb0Zp
bGVSZW5kZXJlciI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyVGhyZWFkIHJlbmRlclRocmVh
ZDsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgaGFuZGxlckxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0g
IHByaXZhdGUgZmluYWwgSGFuZGxlciByZW5kZXJUaHJlYWRIYW5kbGVyOwotICBwcml2YXRlIGZp
bmFsIEZpbGVPdXRwdXRTdHJlYW0gdmlkZW9PdXRGaWxlOwotICBwcml2YXRlIGZpbmFsIGludCBv
dXRwdXRGaWxlV2lkdGg7Ci0gIHByaXZhdGUgZmluYWwgaW50IG91dHB1dEZpbGVIZWlnaHQ7Ci0g
IHByaXZhdGUgZmluYWwgaW50IG91dHB1dEZyYW1lU2l6ZTsKLSAgcHJpdmF0ZSBmaW5hbCBCeXRl
QnVmZmVyIG91dHB1dEZyYW1lQnVmZmVyOwotICBwcml2YXRlIEVnbEJhc2UgZWdsQmFzZTsKLSAg
cHJpdmF0ZSBZdXZDb252ZXJ0ZXIgeXV2Q29udmVydGVyOwotCi0gIHB1YmxpYyBWaWRlb0ZpbGVS
ZW5kZXJlcihTdHJpbmcgb3V0cHV0RmlsZSwgaW50IG91dHB1dEZpbGVXaWR0aCwgaW50IG91dHB1
dEZpbGVIZWlnaHQsCi0gICAgICBmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCkg
dGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICBpZiAoKG91dHB1dEZpbGVXaWR0aCAlIDIpID09IDEg
fHwgKG91dHB1dEZpbGVIZWlnaHQgJSAyKSA9PSAxKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uKCJEb2VzIG5vdCBzdXBwb3J0IHVuZXZlbiB3aWR0aCBvciBoZWln
aHQiKTsKLSAgICB9Ci0KLSAgICB0aGlzLm91dHB1dEZpbGVXaWR0aCA9IG91dHB1dEZpbGVXaWR0
aDsKLSAgICB0aGlzLm91dHB1dEZpbGVIZWlnaHQgPSBvdXRwdXRGaWxlSGVpZ2h0OwotCi0gICAg
b3V0cHV0RnJhbWVTaXplID0gb3V0cHV0RmlsZVdpZHRoICogb3V0cHV0RmlsZUhlaWdodCAqIDMg
LyAyOwotICAgIG91dHB1dEZyYW1lQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChv
dXRwdXRGcmFtZVNpemUpOwotCi0gICAgdmlkZW9PdXRGaWxlID0gbmV3IEZpbGVPdXRwdXRTdHJl
YW0ob3V0cHV0RmlsZSk7Ci0gICAgdmlkZW9PdXRGaWxlLndyaXRlKAotICAgICAgICAoIllVVjRN
UEVHMiBDNDIwIFciICsgb3V0cHV0RmlsZVdpZHRoICsgIiBIIiArIG91dHB1dEZpbGVIZWlnaHQg
KyAiIElwIEYzMDoxIEExOjFcbiIpCi0gICAgICAgICAgICAuZ2V0Qnl0ZXMoKSk7Ci0KLSAgICBy
ZW5kZXJUaHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZChUQUcpOwotICAgIHJlbmRlclRocmVhZC5z
dGFydCgpOwotICAgIHJlbmRlclRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihyZW5kZXJUaHJl
YWQuZ2V0TG9vcGVyKCkpOwotCi0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJy
dXB0aWJseShyZW5kZXJUaHJlYWRIYW5kbGVyLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZWdsQmFzZSA9IEVnbEJh
c2UuY3JlYXRlKHNoYXJlZENvbnRleHQsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0g
ICAgICAgIGVnbEJhc2UuY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgpOwotICAgICAgICBlZ2xC
YXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICAgIHl1dkNvbnZlcnRlciA9IG5ldyBZdXZDb252ZXJ0
ZXIoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCByZW5kZXJGcmFtZShmaW5hbCBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAg
IHJlbmRlclRocmVhZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgcmVuZGVyRnJhbWVPblJlbmRl
clRocmVhZChmcmFtZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
cmVuZGVyRnJhbWVPblJlbmRlclRocmVhZChWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkg
ewotICAgIGZpbmFsIGZsb2F0IGZyYW1lQXNwZWN0UmF0aW8gPSAoZmxvYXQpIGZyYW1lLnJvdGF0
ZWRXaWR0aCgpIC8gKGZsb2F0KSBmcmFtZS5yb3RhdGVkSGVpZ2h0KCk7Ci0KLSAgICBmaW5hbCBm
bG9hdFtdIHJvdGF0ZWRTYW1wbGluZ01hdHJpeCA9Ci0gICAgICAgIFJlbmRlcmVyQ29tbW9uLnJv
dGF0ZVRleHR1cmVNYXRyaXgoZnJhbWUuc2FtcGxpbmdNYXRyaXgsIGZyYW1lLnJvdGF0aW9uRGVn
cmVlKTsKLSAgICBmaW5hbCBmbG9hdFtdIGxheW91dE1hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLmdl
dExheW91dE1hdHJpeCgKLSAgICAgICAgZmFsc2UsIGZyYW1lQXNwZWN0UmF0aW8sIChmbG9hdCkg
b3V0cHV0RmlsZVdpZHRoIC8gb3V0cHV0RmlsZUhlaWdodCk7Ci0gICAgZmluYWwgZmxvYXRbXSB0
ZXhNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHJvdGF0ZWRTYW1wbGlu
Z01hdHJpeCwgbGF5b3V0TWF0cml4KTsKLQotICAgIHRyeSB7Ci0gICAgICB2aWRlb091dEZpbGUu
d3JpdGUoIkZSQU1FXG4iLmdldEJ5dGVzKCkpOwotICAgICAgaWYgKCFmcmFtZS55dXZGcmFtZSkg
ewotICAgICAgICB5dXZDb252ZXJ0ZXIuY29udmVydChvdXRwdXRGcmFtZUJ1ZmZlciwgb3V0cHV0
RmlsZVdpZHRoLCBvdXRwdXRGaWxlSGVpZ2h0LCBvdXRwdXRGaWxlV2lkdGgsCi0gICAgICAgICAg
ICBmcmFtZS50ZXh0dXJlSWQsIHRleE1hdHJpeCk7Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IG91
dHB1dEZpbGVXaWR0aDsKLSAgICAgICAgYnl0ZVtdIGRhdGEgPSBvdXRwdXRGcmFtZUJ1ZmZlci5h
cnJheSgpOwotICAgICAgICBpbnQgb2Zmc2V0ID0gb3V0cHV0RnJhbWVCdWZmZXIuYXJyYXlPZmZz
ZXQoKTsKLQotICAgICAgICAvLyBXcml0ZSBZCi0gICAgICAgIHZpZGVvT3V0RmlsZS53cml0ZShk
YXRhLCBvZmZzZXQsIG91dHB1dEZpbGVXaWR0aCAqIG91dHB1dEZpbGVIZWlnaHQpOwotCi0gICAg
ICAgIC8vIFdyaXRlIFUKLSAgICAgICAgZm9yIChpbnQgciA9IG91dHB1dEZpbGVIZWlnaHQ7IHIg
PCBvdXRwdXRGaWxlSGVpZ2h0ICogMyAvIDI7ICsrcikgewotICAgICAgICAgIHZpZGVvT3V0Rmls
ZS53cml0ZShkYXRhLCBvZmZzZXQgKyByICogc3RyaWRlLCBzdHJpZGUgLyAyKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFdyaXRlIFYKLSAgICAgICAgZm9yIChpbnQgciA9IG91dHB1dEZpbGVI
ZWlnaHQ7IHIgPCBvdXRwdXRGaWxlSGVpZ2h0ICogMyAvIDI7ICsrcikgewotICAgICAgICAgIHZp
ZGVvT3V0RmlsZS53cml0ZShkYXRhLCBvZmZzZXQgKyByICogc3RyaWRlICsgc3RyaWRlIC8gMiwg
c3RyaWRlIC8gMik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hdGl2ZUk0
MjBTY2FsZShmcmFtZS55dXZQbGFuZXNbMF0sIGZyYW1lLnl1dlN0cmlkZXNbMF0sIGZyYW1lLnl1
dlBsYW5lc1sxXSwKLSAgICAgICAgICAgIGZyYW1lLnl1dlN0cmlkZXNbMV0sIGZyYW1lLnl1dlBs
YW5lc1syXSwgZnJhbWUueXV2U3RyaWRlc1syXSwgZnJhbWUud2lkdGgsIGZyYW1lLmhlaWdodCwK
LSAgICAgICAgICAgIG91dHB1dEZyYW1lQnVmZmVyLCBvdXRwdXRGaWxlV2lkdGgsIG91dHB1dEZp
bGVIZWlnaHQpOwotICAgICAgICB2aWRlb091dEZpbGUud3JpdGUoCi0gICAgICAgICAgICBvdXRw
dXRGcmFtZUJ1ZmZlci5hcnJheSgpLCBvdXRwdXRGcmFtZUJ1ZmZlci5hcnJheU9mZnNldCgpLCBv
dXRwdXRGcmFtZVNpemUpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gd3JpdGUgdG8gZmlsZSBmb3IgdmlkZW8g
b3V0Iik7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICB9IGZpbmFs
bHkgewotICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgIH0K
LSAgfQotCi0gIC8qKgotICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMuIEFsbCBhbHJlYWR5IHBv
c3RlZCBmcmFtZXMgd2lsbCBiZSByZW5kZXJlZCBmaXJzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lk
IHJlbGVhc2UoKSB7Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggY2xlYW51cEJhcnJpZXIgPSBu
ZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICB0cnkgewotICAgICAgICAgIHZpZGVvT3V0RmlsZS5jbG9zZSgpOwotICAgICAgICB9
IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkVycm9y
IGNsb3Npbmcgb3V0cHV0IHZpZGVvIGZpbGUiKTsKLSAgICAgICAgfQotICAgICAgICB5dXZDb252
ZXJ0ZXIucmVsZWFzZSgpOwotICAgICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICAgICAgcmVu
ZGVyVGhyZWFkLnF1aXQoKTsKLSAgICAgICAgY2xlYW51cEJhcnJpZXIuY291bnREb3duKCk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoY2xl
YW51cEJhcnJpZXIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVJ
NDIwU2NhbGUoQnl0ZUJ1ZmZlciBzcmNZLCBpbnQgc3RyaWRlWSwgQnl0ZUJ1ZmZlciBzcmNVLAot
ICAgICAgaW50IHN0cmlkZVUsIEJ5dGVCdWZmZXIgc3JjViwgaW50IHN0cmlkZVYsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgQnl0ZUJ1ZmZlciBkc3QsCi0gICAgICBpbnQgZHN0V2lkdGgsIGludCBk
c3RIZWlnaHQpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyLmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5kZXJlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogSmF2
YSB2ZXJzaW9uIG9mIFZpZGVvU2lua0ludGVyZmFjZS4gIEluIGFkZGl0aW9uIHRvIGFsbG93aW5n
IGNsaWVudHMgdG8KLSAqIGRlZmluZSB0aGVpciBvd24gcmVuZGVyaW5nIGJlaGF2aW9yIChieSBw
YXNzaW5nIGluIGEgQ2FsbGJhY2tzIG9iamVjdCksIHRoaXMKLSAqIGNsYXNzIGFsc28gcHJvdmlk
ZXMgYSBjcmVhdGVHdWkoKSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgR1VJLXJlbmRlcmluZyB3aW5k
b3cKLSAqIG9uIHZhcmlvdXMgcGxhdGZvcm1zLgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9SZW5k
ZXJlciB7Ci0gIC8qKgotICAgKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRjOjpWaWRlb0ZyYW1lLiBG
cmFtZXMgYXJlIG9ubHkgY29uc3RydWN0ZWQgZnJvbSBuYXRpdmUgY29kZSBhbmQgdGVzdAotICAg
KiBjb2RlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJNDIwRnJhbWUgewotICAgIHB1
YmxpYyBmaW5hbCBpbnQgd2lkdGg7Ci0gICAgcHVibGljIGZpbmFsIGludCBoZWlnaHQ7Ci0gICAg
cHVibGljIGZpbmFsIGludFtdIHl1dlN0cmlkZXM7Ci0gICAgcHVibGljIEJ5dGVCdWZmZXJbXSB5
dXZQbGFuZXM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4geXV2RnJhbWU7Ci0gICAgLy8gTWF0
cml4IHRoYXQgdHJhbnNmb3JtcyBzdGFuZGFyZCBjb29yZGluYXRlcyB0byB0aGVpciBwcm9wZXIg
c2FtcGxpbmcgbG9jYXRpb25zIGluCi0gICAgLy8gdGhlIHRleHR1cmUuIFRoaXMgdHJhbnNmb3Jt
IGNvbXBlbnNhdGVzIGZvciBhbnkgcHJvcGVydGllcyBvZiB0aGUgdmlkZW8gc291cmNlIHRoYXQK
LSAgICAvLyBjYXVzZSBpdCB0byBhcHBlYXIgZGlmZmVyZW50IGZyb20gYSBub3JtYWxpemVkIHRl
eHR1cmUuIFRoaXMgbWF0cml4IGRvZXMgbm90IHRha2UKLSAgICAvLyB8cm90YXRpb25EZWdyZWV8
IGludG8gYWNjb3VudC4KLSAgICBwdWJsaWMgZmluYWwgZmxvYXRbXSBzYW1wbGluZ01hdHJpeDsK
LSAgICBwdWJsaWMgaW50IHRleHR1cmVJZDsKLSAgICAvLyBGcmFtZSBwb2ludGVyIGluIEMrKy4K
LSAgICBwcml2YXRlIGxvbmcgbmF0aXZlRnJhbWVQb2ludGVyOwotCi0gICAgLy8gcm90YXRpb25E
ZWdyZWUgaXMgdGhlIGRlZ3JlZSB0aGF0IHRoZSBmcmFtZSBtdXN0IGJlIHJvdGF0ZWQgY2xvY2t3
aXNlbHkKLSAgICAvLyB0byBiZSByZW5kZXJlZCBjb3JyZWN0bHkuCi0gICAgcHVibGljIGludCBy
b3RhdGlvbkRlZ3JlZTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIGZyYW1lIG9mIHRo
ZSBnaXZlbiBkaW1lbnNpb25zIHdpdGggdGhlIHNwZWNpZmllZCBwbGFuYXIgZGF0YS4KLSAgICAg
Ki8KLSAgICBJNDIwRnJhbWUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb25EZWdy
ZWUsIGludFtdIHl1dlN0cmlkZXMsIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMsCi0gICAgICAgIGxv
bmcgbmF0aXZlRnJhbWVQb2ludGVyKSB7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAg
ICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHRoaXMueXV2U3RyaWRlcyA9IHl1dlN0cmlk
ZXM7Ci0gICAgICB0aGlzLnl1dlBsYW5lcyA9IHl1dlBsYW5lczsKLSAgICAgIHRoaXMueXV2RnJh
bWUgPSB0cnVlOwotICAgICAgdGhpcy5yb3RhdGlvbkRlZ3JlZSA9IHJvdGF0aW9uRGVncmVlOwot
ICAgICAgdGhpcy5uYXRpdmVGcmFtZVBvaW50ZXIgPSBuYXRpdmVGcmFtZVBvaW50ZXI7Ci0gICAg
ICBpZiAocm90YXRpb25EZWdyZWUgJSA5MCAhPSAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxl
Z2FsQXJndW1lbnRFeGNlcHRpb24oIlJvdGF0aW9uIGRlZ3JlZSBub3QgbXVsdGlwbGUgb2YgOTA6
ICIgKyByb3RhdGlvbkRlZ3JlZSk7Ci0gICAgICB9Ci0gICAgICAvLyBUaGUgY29udmVudGlvbiBp
biBXZWJSVEMgaXMgdGhhdCB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIEJ5dGVCdWZmZXIgY29ycmVz
cG9uZHMgdG8gdGhlCi0gICAgICAvLyB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlLCBidXQg
aW4gZ2xUZXhJbWFnZTJEKCkgdGhlIGZpcnN0IGVsZW1lbnQgY29ycmVzcG9uZHMgdG8gdGhlCi0g
ICAgICAvLyBib3R0b20tbGVmdCBjb3JuZXIuIFRoaXMgZGlzY3JlcGFuY3kgaXMgY29ycmVjdGVk
IGJ5IHNldHRpbmcgYSB2ZXJ0aWNhbCBmbGlwIGFzIHNhbXBsaW5nCi0gICAgICAvLyBtYXRyaXgu
Ci0gICAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgICBzYW1wbGluZ01hdHJpeCA9IG5ldyBm
bG9hdFtdIHsKLSAgICAgICAgICAxLCAgMCwgMCwgMCwKLSAgICAgICAgICAwLCAtMSwgMCwgMCwK
LSAgICAgICAgICAwLCAgMCwgMSwgMCwKLSAgICAgICAgICAwLCAgMSwgMCwgMX07Ci0gICAgICAv
LyBjbGFuZy1mb3JtYXQgb24KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSB0
ZXh0dXJlIGZyYW1lIG9mIHRoZSBnaXZlbiBkaW1lbnNpb25zIHdpdGggZGF0YSBpbiBTdXJmYWNl
VGV4dHVyZQotICAgICAqLwotICAgIEk0MjBGcmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGlu
dCByb3RhdGlvbkRlZ3JlZSwgaW50IHRleHR1cmVJZCwgZmxvYXRbXSBzYW1wbGluZ01hdHJpeCwK
LSAgICAgICAgbG9uZyBuYXRpdmVGcmFtZVBvaW50ZXIpIHsKLSAgICAgIHRoaXMud2lkdGggPSB3
aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgdGhpcy55dXZTdHJpZGVz
ID0gbnVsbDsKLSAgICAgIHRoaXMueXV2UGxhbmVzID0gbnVsbDsKLSAgICAgIHRoaXMuc2FtcGxp
bmdNYXRyaXggPSBzYW1wbGluZ01hdHJpeDsKLSAgICAgIHRoaXMudGV4dHVyZUlkID0gdGV4dHVy
ZUlkOwotICAgICAgdGhpcy55dXZGcmFtZSA9IGZhbHNlOwotICAgICAgdGhpcy5yb3RhdGlvbkRl
Z3JlZSA9IHJvdGF0aW9uRGVncmVlOwotICAgICAgdGhpcy5uYXRpdmVGcmFtZVBvaW50ZXIgPSBu
YXRpdmVGcmFtZVBvaW50ZXI7Ci0gICAgICBpZiAocm90YXRpb25EZWdyZWUgJSA5MCAhPSAwKSB7
Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlJvdGF0aW9uIGRl
Z3JlZSBub3QgbXVsdGlwbGUgb2YgOTA6ICIgKyByb3RhdGlvbkRlZ3JlZSk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcHVibGljIGludCByb3RhdGVkV2lkdGgoKSB7Ci0gICAgICByZXR1cm4gKHJv
dGF0aW9uRGVncmVlICUgMTgwID09IDApID8gd2lkdGggOiBoZWlnaHQ7Ci0gICAgfQotCi0gICAg
cHVibGljIGludCByb3RhdGVkSGVpZ2h0KCkgewotICAgICAgcmV0dXJuIChyb3RhdGlvbkRlZ3Jl
ZSAlIDE4MCA9PSAwKSA/IGhlaWdodCA6IHdpZHRoOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gd2lkdGggKyAieCIg
KyBoZWlnaHQgKyAiOiIgKyB5dXZTdHJpZGVzWzBdICsgIjoiICsgeXV2U3RyaWRlc1sxXSArICI6
IiArIHl1dlN0cmlkZXNbMl07Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIG5hdGl2ZSBmdW5j
dGlvbiB0byBkbyBhIHZpZGVvIGZyYW1lIHBsYW5lIGNvcHlpbmcuCi0gIHB1YmxpYyBzdGF0aWMg
bmF0aXZlIHZvaWQgbmF0aXZlQ29weVBsYW5lKAotICAgICAgQnl0ZUJ1ZmZlciBzcmMsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IHNyY1N0cmlkZSwgQnl0ZUJ1ZmZlciBkc3QsIGludCBkc3RT
dHJpZGUpOwotCi0gIC8qKiBUaGUgcmVhbCBtZWF0IG9mIFZpZGVvU2lua0ludGVyZmFjZS4gKi8K
LSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgQ2FsbGJhY2tzIHsKLSAgICAvLyB8ZnJhbWV8IG1p
Z2h0IGhhdmUgcGVuZGluZyByb3RhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgQ2FsbGJhY2tz
Ci0gICAgLy8gc2hvdWxkIGhhbmRsZSB0aGF0IGJ5IGFwcGx5aW5nIHJvdGF0aW9uIGR1cmluZyBy
ZW5kZXJpbmcuIFRoZSBjYWxsZWUKLSAgICAvLyBpcyByZXNwb25zaWJsZSBmb3Igc2lnbmFsaW5n
IHdoZW4gaXQgaXMgZG9uZSB3aXRoIHxmcmFtZXwgYnkgY2FsbGluZwotICAgIC8vIHJlbmRlckZy
YW1lRG9uZShmcmFtZSkuCi0gICAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoSTQyMEZyYW1lIGZy
YW1lKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIGV2ZXJ5
IHJlbmRlckZyYW1lKCkgdG8gcmVsZWFzZSB0aGUgZnJhbWUuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIHZvaWQgcmVuZGVyRnJhbWVEb25lKEk0MjBGcmFtZSBmcmFtZSkgewotICAgIGZyYW1lLnl1
dlBsYW5lcyA9IG51bGw7Ci0gICAgZnJhbWUudGV4dHVyZUlkID0gMDsKLSAgICBpZiAoZnJhbWUu
bmF0aXZlRnJhbWVQb2ludGVyICE9IDApIHsKLSAgICAgIHJlbGVhc2VOYXRpdmVGcmFtZShmcmFt
ZS5uYXRpdmVGcmFtZVBvaW50ZXIpOwotICAgICAgZnJhbWUubmF0aXZlRnJhbWVQb2ludGVyID0g
MDsKLSAgICB9Ci0gIH0KLQotICBsb25nIG5hdGl2ZVZpZGVvUmVuZGVyZXI7Ci0KLSAgcHVibGlj
IFZpZGVvUmVuZGVyZXIoQ2FsbGJhY2tzIGNhbGxiYWNrcykgewotICAgIG5hdGl2ZVZpZGVvUmVu
ZGVyZXIgPSBuYXRpdmVXcmFwVmlkZW9SZW5kZXJlcihjYWxsYmFja3MpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBpZiAobmF0aXZlVmlkZW9SZW5kZXJlciA9PSAwKSB7
Ci0gICAgICAvLyBBbHJlYWR5IGRpc3Bvc2VkLgotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGZyZWVXcmFwcGVkVmlkZW9SZW5kZXJlcihuYXRpdmVWaWRlb1JlbmRlcmVyKTsKLSAgICBuYXRp
dmVWaWRlb1JlbmRlcmVyID0gMDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25n
IG5hdGl2ZVdyYXBWaWRlb1JlbmRlcmVyKENhbGxiYWNrcyBjYWxsYmFja3MpOwotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlV3JhcHBlZFZpZGVvUmVuZGVyZXIobG9uZyBuYXRpdmVW
aWRlb1JlbmRlcmVyKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgcmVsZWFzZU5hdGl2
ZUZyYW1lKGxvbmcgbmF0aXZlRnJhbWVQb2ludGVyKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvVmlkZW9SZW5kZXJlckd1aS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
VmlkZW9SZW5kZXJlckd1aS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1ZpZGVvUmVuZGVyZXJHdWkuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDYyOCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBvcmcu
d2VicnRjLlZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0
aW9uLlN1cHByZXNzTGludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwotaW1wb3J0
IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0wxNDsKLWlt
cG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJm
YWNlVmlldzsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGls
LmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci0KLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24u
a2hyb25vcy5lZ2wuRUdMMTA7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWds
LkVHTENvbmZpZzsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29u
dGV4dDsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDEwOwot
Ci0vKioKLSAqIEVmZmljaWVudGx5IHJlbmRlcnMgWVVWIGZyYW1lcyB1c2luZyB0aGUgR1BVIGZv
ciBDU0MuCi0gKiBDbGllbnRzIHdpbGwgd2FudCBmaXJzdCB0byBjYWxsIHNldFZpZXcoKSB0byBw
YXNzIEdMU3VyZmFjZVZpZXcKLSAqIGFuZCB0aGVuIGZvciBlYWNoIHZpZGVvIHN0cmVhbSBlaXRo
ZXIgY3JlYXRlIGluc3RhbmNlIG9mIFZpZGVvUmVuZGVyZXIgdXNpbmcKLSAqIGNyZWF0ZUd1aSgp
IGNhbGwgb3IgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgaW50ZXJmYWNlIHVzaW5nIGNyZWF0ZSgp
IGNhbGwuCi0gKiBPbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgY2FuIGJlIGNyZWF0ZWQu
Ci0gKi8KLXB1YmxpYyBjbGFzcyBWaWRlb1JlbmRlcmVyR3VpIGltcGxlbWVudHMgR0xTdXJmYWNl
Vmlldy5SZW5kZXJlciB7Ci0gIC8vIHxpbnN0YW5jZXwsIHxpbnN0YW5jZS5zdXJmYWNlfCwgfGVn
bENvbnRleHR8LCBhbmQgfGVnbENvbnRleHRSZWFkeXwgYXJlIHN5bmNocm9uaXplZCBvbgotICAv
LyB8VmlkZW9SZW5kZXJlckd1aS5jbGFzc3wuCi0gIHByaXZhdGUgc3RhdGljIFZpZGVvUmVuZGVy
ZXJHdWkgaW5zdGFuY2UgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBSdW5uYWJsZSBlZ2xDb250
ZXh0UmVhZHkgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZp
ZGVvUmVuZGVyZXJHdWkiOwotICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgc3VyZmFjZTsKLSAgcHJp
dmF0ZSBzdGF0aWMgRWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQgPSBudWxsOwotICAvLyBJbmRp
Y2F0ZXMgaWYgU3VyZmFjZVZpZXcuUmVuZGVyZXIub25TdXJmYWNlQ3JlYXRlZCB3YXMgY2FsbGVk
LgotICAvLyBJZiB0cnVlIHRoZW4gZm9yIGV2ZXJ5IG5ld2x5IGNyZWF0ZWQgeXV2IGltYWdlIHJl
bmRlcmVyIGNyZWF0ZVRleHR1cmUoKQotICAvLyBzaG91bGQgYmUgY2FsbGVkLiBUaGUgdmFyaWFi
bGUgaXMgYWNjZXNzZWQgb24gbXVsdGlwbGUgdGhyZWFkcyBhbmQKLSAgLy8gYWxsIGFjY2Vzc2Vz
IGFyZSBzeW5jaHJvbml6ZWQgb24geXV2SW1hZ2VSZW5kZXJlcnMnIG9iamVjdCBsb2NrLgotICBw
cml2YXRlIGJvb2xlYW4gb25TdXJmYWNlQ3JlYXRlZENhbGxlZDsKLSAgcHJpdmF0ZSBpbnQgc2Ny
ZWVuV2lkdGg7Ci0gIHByaXZhdGUgaW50IHNjcmVlbkhlaWdodDsKLSAgLy8gTGlzdCBvZiB5dXYg
cmVuZGVyZXJzLgotICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxZdXZJbWFnZVJlbmRlcmVyPiB5
dXZJbWFnZVJlbmRlcmVyczsKLSAgLy8gUmVuZGVyIGFuZCBkcmF3IHRocmVhZHMuCi0gIHByaXZh
dGUgc3RhdGljIFRocmVhZCByZW5kZXJGcmFtZVRocmVhZDsKLSAgcHJpdmF0ZSBzdGF0aWMgVGhy
ZWFkIGRyYXdUaHJlYWQ7Ci0KLSAgcHJpdmF0ZSBWaWRlb1JlbmRlcmVyR3VpKEdMU3VyZmFjZVZp
ZXcgc3VyZmFjZSkgewotICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgLy8gQ3JlYXRl
IGFuIE9wZW5HTCBFUyAyLjAgY29udGV4dC4KLSAgICBzdXJmYWNlLnNldFByZXNlcnZlRUdMQ29u
dGV4dE9uUGF1c2UodHJ1ZSk7Ci0gICAgc3VyZmFjZS5zZXRFR0xDb250ZXh0Q2xpZW50VmVyc2lv
bigyKTsKLSAgICBzdXJmYWNlLnNldFJlbmRlcmVyKHRoaXMpOwotICAgIHN1cmZhY2Uuc2V0UmVu
ZGVyTW9kZShHTFN1cmZhY2VWaWV3LlJFTkRFUk1PREVfV0hFTl9ESVJUWSk7Ci0KLSAgICB5dXZJ
bWFnZVJlbmRlcmVycyA9IG5ldyBBcnJheUxpc3Q8WXV2SW1hZ2VSZW5kZXJlcj4oKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBDbGFzcyB1c2VkIHRvIGRpc3BsYXkgc3RyZWFtIG9mIFlVVjQyMCBmcmFt
ZXMgYXQgcGFydGljdWxhciBsb2NhdGlvbgotICAgKiBvbiBhIHNjcmVlbi4gTmV3IHZpZGVvIGZy
YW1lcyBhcmUgc2VudCB0byBkaXNwbGF5IHVzaW5nIHJlbmRlckZyYW1lKCkKLSAgICogY2FsbC4K
LSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFl1dkltYWdlUmVuZGVyZXIgaW1wbGVtZW50
cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gICAgLy8gfHN1cmZhY2V8IGlzIHN5bmNocm9u
aXplZCBvbiB8dGhpc3wuCi0gICAgcHJpdmF0ZSBHTFN1cmZhY2VWaWV3IHN1cmZhY2U7Ci0gICAg
cHJpdmF0ZSBpbnQgaWQ7Ci0gICAgLy8gVE9ETyhtYWdqZWQpOiBEZWxldGUgR0wgcmVzb3VyY2Vz
IGluIHJlbGVhc2UoKS4gTXVzdCBiZSBzeW5jaHJvbml6ZWQgd2l0aCBkcmF3KCkuIFdlIGFyZQot
ICAgIC8vIGN1cnJlbnRseSBsZWFraW5nIHJlc291cmNlcyB0byBhdm9pZCBhIHJhcmUgY3Jhc2gg
aW4gcmVsZWFzZSgpIHdoZXJlIHRoZSBFR0xDb250ZXh0IGhhcwotICAgIC8vIGJlY29tZSBpbnZh
bGlkIGJlZm9yZWhhbmQuCi0gICAgcHJpdmF0ZSBpbnRbXSB5dXZUZXh0dXJlcyA9IHswLCAwLCAw
fTsKLSAgICBwcml2YXRlIGZpbmFsIFJlbmRlcmVyQ29tbW9uLll1dlVwbG9hZGVyIHl1dlVwbG9h
ZGVyID0gbmV3IFJlbmRlcmVyQ29tbW9uLll1dlVwbG9hZGVyKCk7Ci0gICAgcHJpdmF0ZSBmaW5h
bCBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXI7Ci0gICAgLy8gUmVzb3VyY2VzIGZvciBt
YWtpbmcgYSBkZWVwIGNvcHkgb2YgaW5jb21pbmcgT0VTIHRleHR1cmUgZnJhbWUuCi0gICAgcHJp
dmF0ZSBHbFRleHR1cmVGcmFtZUJ1ZmZlciB0ZXh0dXJlQ29weTsKLQotICAgIC8vIFBlbmRpbmcg
ZnJhbWUgdG8gcmVuZGVyLiBTZXJ2ZXMgYXMgYSBxdWV1ZSB3aXRoIHNpemUgMS4gfHBlbmRpbmdG
cmFtZXwgaXMgYWNjZXNzZWQgYnkgdHdvCi0gICAgLy8gdGhyZWFkcyAtIGZyYW1lcyBhcmUgcmVj
ZWl2ZWQgaW4gcmVuZGVyRnJhbWUoKSBhbmQgY29uc3VtZWQgaW4gZHJhdygpLiBGcmFtZXMgYXJl
IGRyb3BwZWQgaW4KLSAgICAvLyByZW5kZXJGcmFtZSgpIGlmIHRoZSBwcmV2aW91cyBmcmFtZSBo
YXMgbm90IGJlZW4gcmVuZGVyZWQgeWV0LgotICAgIHByaXZhdGUgSTQyMEZyYW1lIHBlbmRpbmdG
cmFtZTsKLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBwZW5kaW5nRnJhbWVMb2NrID0gbmV3IE9i
amVjdCgpOwotICAgIC8vIFR5cGUgb2YgdmlkZW8gZnJhbWUgdXNlZCBmb3IgcmVjZW50IGZyYW1l
IHJlbmRlcmluZy4KLSAgICBwcml2YXRlIHN0YXRpYyBlbnVtIFJlbmRlcmVyVHlwZSB7IFJFTkRF
UkVSX1lVViwgUkVOREVSRVJfVEVYVFVSRSB9Ci0KLSAgICBwcml2YXRlIFJlbmRlcmVyVHlwZSBy
ZW5kZXJlclR5cGU7Ci0gICAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2Fs
aW5nVHlwZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gbWlycm9yOwotICAgIHByaXZhdGUgUmVuZGVy
ZXJDb21tb24uUmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHM7Ci0gICAgLy8gRmxhZyBpZiBy
ZW5kZXJGcmFtZSgpIHdhcyBldmVyIGNhbGxlZC4KLSAgICBib29sZWFuIHNlZW5GcmFtZTsKLSAg
ICAvLyBUb3RhbCBudW1iZXIgb2YgdmlkZW8gZnJhbWVzIHJlY2VpdmVkIGluIHJlbmRlckZyYW1l
KCkgY2FsbC4KLSAgICBwcml2YXRlIGludCBmcmFtZXNSZWNlaXZlZDsKLSAgICAvLyBOdW1iZXIg
b2YgdmlkZW8gZnJhbWVzIGRyb3BwZWQgYnkgcmVuZGVyRnJhbWUoKSBiZWNhdXNlIHByZXZpb3Vz
Ci0gICAgLy8gZnJhbWUgaGFzIG5vdCBiZWVuIHJlbmRlcmVkIHlldC4KLSAgICBwcml2YXRlIGlu
dCBmcmFtZXNEcm9wcGVkOwotICAgIC8vIE51bWJlciBvZiByZW5kZXJlZCB2aWRlbyBmcmFtZXMu
Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVuZGVyZWQ7Ci0gICAgLy8gVGltZSBpbiBucyB3aGVu
IHRoZSBmaXJzdCB2aWRlbyBmcmFtZSB3YXMgcmVuZGVyZWQuCi0gICAgcHJpdmF0ZSBsb25nIHN0
YXJ0VGltZU5zID0gLTE7Ci0gICAgLy8gVGltZSBpbiBucyBzcGVudCBpbiBkcmF3KCkgZnVuY3Rp
b24uCi0gICAgcHJpdmF0ZSBsb25nIGRyYXdUaW1lTnM7Ci0gICAgLy8gVGltZSBpbiBucyBzcGVu
dCBpbiBkcmF3KCkgY29weWluZyByZXNvdXJjZXMgZnJvbSB8cGVuZGluZ0ZyYW1lfCAtIGluY2x1
ZGluZyB1cGxvYWRpbmcgZnJhbWUKLSAgICAvLyBkYXRhIHRvIHJlbmRlcmluZyBwbGFuZXMuCi0g
ICAgcHJpdmF0ZSBsb25nIGNvcHlUaW1lTnM7Ci0gICAgLy8gVGhlIGFsbG93ZWQgdmlldyBhcmVh
IGluIHBlcmNlbnRhZ2Ugb2Ygc2NyZWVuIHNpemUuCi0gICAgcHJpdmF0ZSBmaW5hbCBSZWN0IGxh
eW91dEluUGVyY2VudGFnZTsKLSAgICAvLyBUaGUgYWN0dWFsIHZpZXcgYXJlYSBpbiBwaXhlbHMu
IEl0IGlzIGEgY2VudGVyZWQgc3VicmVjdGFuZ2xlIG9mIHRoZSByZWN0YW5nbGUgZGVmaW5lZCBi
eQotICAgIC8vIHxsYXlvdXRJblBlcmNlbnRhZ2V8LgotICAgIHByaXZhdGUgZmluYWwgUmVjdCBk
aXNwbGF5TGF5b3V0ID0gbmV3IFJlY3QoKTsKLSAgICAvLyBDYWNoZWQgbGF5b3V0IHRyYW5zZm9y
bWF0aW9uIG1hdHJpeCwgY2FsY3VsYXRlZCBmcm9tIGN1cnJlbnQgbGF5b3V0IHBhcmFtZXRlcnMu
Ci0gICAgcHJpdmF0ZSBmbG9hdFtdIGxheW91dE1hdHJpeDsKLSAgICAvLyBGbGFnIGlmIGxheW91
dCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdXBkYXRlIGlzIG5lZWRlZC4KLSAgICBwcml2YXRlIGJv
b2xlYW4gdXBkYXRlTGF5b3V0UHJvcGVydGllczsKLSAgICAvLyBMYXlvdXQgcHJvcGVydGllcyB1
cGRhdGUgbG9jay4gR3VhcmRzIHx1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzfCwgfHNjcmVlbldpZHRo
fCwKLSAgICAvLyB8c2NyZWVuSGVpZ2h0fCwgfHZpZGVvV2lkdGh8LCB8dmlkZW9IZWlnaHR8LCB8
cm90YXRpb25EZWdyZWV8LCB8c2NhbGluZ1R5cGV8LCBhbmQgfG1pcnJvcnwuCi0gICAgcHJpdmF0
ZSBmaW5hbCBPYmplY3QgdXBkYXRlTGF5b3V0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICAvLyBU
ZXh0dXJlIHNhbXBsaW5nIG1hdHJpeC4KLSAgICBwcml2YXRlIGZsb2F0W10gcm90YXRlZFNhbXBs
aW5nTWF0cml4OwotICAgIC8vIFZpZXdwb3J0IGRpbWVuc2lvbnMuCi0gICAgcHJpdmF0ZSBpbnQg
c2NyZWVuV2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgc2NyZWVuSGVpZ2h0OwotICAgIC8vIFZpZGVv
IGRpbWVuc2lvbi4KLSAgICBwcml2YXRlIGludCB2aWRlb1dpZHRoOwotICAgIHByaXZhdGUgaW50
IHZpZGVvSGVpZ2h0OwotCi0gICAgLy8gVGhpcyBpcyB0aGUgZGVncmVlIHRoYXQgdGhlIGZyYW1l
IHNob3VsZCBiZSByb3RhdGVkIGNsb2Nrd2lzZWx5IHRvIGhhdmUKLSAgICAvLyBpdCByZW5kZXJl
ZCB1cCByaWdodC4KLSAgICBwcml2YXRlIGludCByb3RhdGlvbkRlZ3JlZTsKLQotICAgIHByaXZh
dGUgWXV2SW1hZ2VSZW5kZXJlcihHTFN1cmZhY2VWaWV3IHN1cmZhY2UsIGludCBpZCwgaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgIFJlbmRlcmVyQ29tbW9uLlNj
YWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvciwgUmVuZGVyZXJDb21tb24uR2xE
cmF3ZXIgZHJhd2VyKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiWXV2SW1hZ2VSZW5kZXJlci5D
cmVhdGUgaWQ6ICIgKyBpZCk7Ci0gICAgICB0aGlzLnN1cmZhY2UgPSBzdXJmYWNlOwotICAgICAg
dGhpcy5pZCA9IGlkOwotICAgICAgdGhpcy5zY2FsaW5nVHlwZSA9IHNjYWxpbmdUeXBlOwotICAg
ICAgdGhpcy5taXJyb3IgPSBtaXJyb3I7Ci0gICAgICB0aGlzLmRyYXdlciA9IGRyYXdlcjsKLSAg
ICAgIGxheW91dEluUGVyY2VudGFnZSA9IG5ldyBSZWN0KHgsIHksIE1hdGgubWluKDEwMCwgeCAr
IHdpZHRoKSwgTWF0aC5taW4oMTAwLCB5ICsgaGVpZ2h0KSk7Ci0gICAgICB1cGRhdGVMYXlvdXRQ
cm9wZXJ0aWVzID0gZmFsc2U7Ci0gICAgICByb3RhdGlvbkRlZ3JlZSA9IDA7Ci0gICAgfQotCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgewotICAgICAgc2VlbkZyYW1lID0g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCByZWxlYXNlKCkg
ewotICAgICAgc3VyZmFjZSA9IG51bGw7Ci0gICAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgICAg
c3luY2hyb25pemVkIChwZW5kaW5nRnJhbWVMb2NrKSB7Ci0gICAgICAgIGlmIChwZW5kaW5nRnJh
bWUgIT0gbnVsbCkgewotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKHBl
bmRpbmdGcmFtZSk7Ci0gICAgICAgICAgcGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVUZXh0dXJlcygpIHsKLSAg
ICAgIExvZ2dpbmcuZChUQUcsICIgIFl1dkltYWdlUmVuZGVyZXIuY3JlYXRlVGV4dHVyZXMgIiAr
IGlkICsgIiBvbiBHTCB0aHJlYWQ6IgotICAgICAgICAgICAgICArIFRocmVhZC5jdXJyZW50VGhy
ZWFkKCkuZ2V0SWQoKSk7Ci0KLSAgICAgIC8vIEdlbmVyYXRlIDMgdGV4dHVyZSBpZHMgZm9yIFkv
VS9WIGFuZCBwbGFjZSB0aGVtIGludG8gfHl1dlRleHR1cmVzfC4KLSAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgIHl1dlRleHR1cmVzW2ldID0gR2xVdGlsLmdlbmVy
YXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgICB9Ci0gICAgICAvLyBHZW5l
cmF0ZSB0ZXh0dXJlIGFuZCBmcmFtZWJ1ZmZlciBmb3Igb2Zmc2NyZWVuIHRleHR1cmUgY29weS4K
LSAgICAgIHRleHR1cmVDb3B5ID0gbmV3IEdsVGV4dHVyZUZyYW1lQnVmZmVyKEdMRVMyMC5HTF9S
R0IpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVMYXlvdXRNYXRyaXgoKSB7Ci0g
ICAgICBzeW5jaHJvbml6ZWQgKHVwZGF0ZUxheW91dExvY2spIHsKLSAgICAgICAgaWYgKCF1cGRh
dGVMYXlvdXRQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIEluaXRpYWxpemUgdG8gbWF4aW11bSBhbGxvd2VkIGFyZWEuIFJvdW5kIHRvIGludGVn
ZXIgY29vcmRpbmF0ZXMgaW53YXJkcyB0aGUgbGF5b3V0Ci0gICAgICAgIC8vIGJvdW5kaW5nIGJv
eCAoY2VpbCBsZWZ0L3RvcCBhbmQgZmxvb3IgcmlnaHQvYm90dG9tKSB0byBub3QgYnJlYWsgY29u
c3RyYWludHMuCi0gICAgICAgIGRpc3BsYXlMYXlvdXQuc2V0KChzY3JlZW5XaWR0aCAqIGxheW91
dEluUGVyY2VudGFnZS5sZWZ0ICsgOTkpIC8gMTAwLAotICAgICAgICAgICAgKHNjcmVlbkhlaWdo
dCAqIGxheW91dEluUGVyY2VudGFnZS50b3AgKyA5OSkgLyAxMDAsCi0gICAgICAgICAgICAoc2Ny
ZWVuV2lkdGggKiBsYXlvdXRJblBlcmNlbnRhZ2UucmlnaHQpIC8gMTAwLAotICAgICAgICAgICAg
KHNjcmVlbkhlaWdodCAqIGxheW91dEluUGVyY2VudGFnZS5ib3R0b20pIC8gMTAwKTsKLSAgICAg
ICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBBZGp1c3RUZXh0dXJlQ29vcmRzLiBB
bGxvd2VkIGRpc3BsYXkgc2l6ZTogIgotICAgICAgICAgICAgICAgICsgZGlzcGxheUxheW91dC53
aWR0aCgpICsgIiB4ICIgKyBkaXNwbGF5TGF5b3V0LmhlaWdodCgpICsgIi4gVmlkZW86ICIgKyB2
aWRlb1dpZHRoCi0gICAgICAgICAgICAgICAgKyAiIHggIiArIHZpZGVvSGVpZ2h0ICsgIi4gUm90
YXRpb246ICIgKyByb3RhdGlvbkRlZ3JlZSArICIuIE1pcnJvcjogIiArIG1pcnJvcik7Ci0gICAg
ICAgIGZpbmFsIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSAocm90YXRpb25EZWdyZWUgJSAxODAg
PT0gMCkKLSAgICAgICAgICAgID8gKGZsb2F0KSB2aWRlb1dpZHRoIC8gdmlkZW9IZWlnaHQKLSAg
ICAgICAgICAgIDogKGZsb2F0KSB2aWRlb0hlaWdodCAvIHZpZGVvV2lkdGg7Ci0gICAgICAgIC8v
IEFkanVzdCBkaXNwbGF5IHNpemUgYmFzZWQgb24gfHNjYWxpbmdUeXBlfC4KLSAgICAgICAgZmlu
YWwgUG9pbnQgZGlzcGxheVNpemUgPSBSZW5kZXJlckNvbW1vbi5nZXREaXNwbGF5U2l6ZSgKLSAg
ICAgICAgICAgIHNjYWxpbmdUeXBlLCB2aWRlb0FzcGVjdFJhdGlvLCBkaXNwbGF5TGF5b3V0Lndp
ZHRoKCksIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkpOwotICAgICAgICBkaXNwbGF5TGF5b3V0Lmlu
c2V0KChkaXNwbGF5TGF5b3V0LndpZHRoKCkgLSBkaXNwbGF5U2l6ZS54KSAvIDIsCi0gICAgICAg
ICAgICAoZGlzcGxheUxheW91dC5oZWlnaHQoKSAtIGRpc3BsYXlTaXplLnkpIC8gMik7Ci0gICAg
ICAgIExvZ2dpbmcuZChUQUcsCi0gICAgICAgICAgICAiICBBZGp1c3RlZCBkaXNwbGF5IHNpemU6
ICIgKyBkaXNwbGF5TGF5b3V0LndpZHRoKCkgKyAiIHggIiArIGRpc3BsYXlMYXlvdXQuaGVpZ2h0
KCkpOwotICAgICAgICBsYXlvdXRNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5nZXRMYXlvdXRNYXRy
aXgoCi0gICAgICAgICAgICBtaXJyb3IsIHZpZGVvQXNwZWN0UmF0aW8sIChmbG9hdCkgZGlzcGxh
eUxheW91dC53aWR0aCgpIC8gZGlzcGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICAgIHVwZGF0
ZUxheW91dFByb3BlcnRpZXMgPSBmYWxzZTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIiAgQWRq
dXN0VGV4dHVyZUNvb3JkcyBkb25lIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2
b2lkIGRyYXcoKSB7Ci0gICAgICBpZiAoIXNlZW5GcmFtZSkgewotICAgICAgICAvLyBObyBmcmFt
ZSByZWNlaXZlZCB5ZXQgLSBub3RoaW5nIHRvIHJlbmRlci4KLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgICAgbG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLQotICAgICAgZmluYWwg
Ym9vbGVhbiBpc05ld0ZyYW1lOwotICAgICAgc3luY2hyb25pemVkIChwZW5kaW5nRnJhbWVMb2Nr
KSB7Ci0gICAgICAgIGlzTmV3RnJhbWUgPSAocGVuZGluZ0ZyYW1lICE9IG51bGwpOwotICAgICAg
ICBpZiAoaXNOZXdGcmFtZSAmJiBzdGFydFRpbWVOcyA9PSAtMSkgewotICAgICAgICAgIHN0YXJ0
VGltZU5zID0gbm93OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzTmV3RnJhbWUpIHsKLSAg
ICAgICAgICByb3RhdGVkU2FtcGxpbmdNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5yb3RhdGVUZXh0
dXJlTWF0cml4KAotICAgICAgICAgICAgICBwZW5kaW5nRnJhbWUuc2FtcGxpbmdNYXRyaXgsIHBl
bmRpbmdGcmFtZS5yb3RhdGlvbkRlZ3JlZSk7Ci0gICAgICAgICAgaWYgKHBlbmRpbmdGcmFtZS55
dXZGcmFtZSkgewotICAgICAgICAgICAgcmVuZGVyZXJUeXBlID0gUmVuZGVyZXJUeXBlLlJFTkRF
UkVSX1lVVjsKLSAgICAgICAgICAgIHl1dlVwbG9hZGVyLnVwbG9hZFl1dkRhdGEoeXV2VGV4dHVy
ZXMsIHBlbmRpbmdGcmFtZS53aWR0aCwgcGVuZGluZ0ZyYW1lLmhlaWdodCwKLSAgICAgICAgICAg
ICAgICBwZW5kaW5nRnJhbWUueXV2U3RyaWRlcywgcGVuZGluZ0ZyYW1lLnl1dlBsYW5lcyk7Ci0g
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlbmRlcmVyVHlwZSA9IFJlbmRlcmVyVHlw
ZS5SRU5ERVJFUl9URVhUVVJFOwotICAgICAgICAgICAgLy8gRXh0ZXJuYWwgdGV4dHVyZSByZW5k
ZXJpbmcuIE1ha2UgYSBkZWVwIGNvcHkgb2YgdGhlIGV4dGVybmFsIHRleHR1cmUuCi0gICAgICAg
ICAgICAvLyBSZWFsbG9jYXRlIG9mZnNjcmVlbiB0ZXh0dXJlIGlmIG5lY2Vzc2FyeS4KLSAgICAg
ICAgICAgIHRleHR1cmVDb3B5LnNldFNpemUocGVuZGluZ0ZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBw
ZW5kaW5nRnJhbWUucm90YXRlZEhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gQmluZCBvdXIg
b2Zmc2NyZWVuIGZyYW1lYnVmZmVyLgotICAgICAgICAgICAgR0xFUzIwLmdsQmluZEZyYW1lYnVm
ZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgdGV4dHVyZUNvcHkuZ2V0RnJhbWVCdWZmZXJJZCgp
KTsKLSAgICAgICAgICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xCaW5kRnJhbWVidWZm
ZXIiKTsKLQotICAgICAgICAgICAgLy8gQ29weSB0aGUgT0VTIHRleHR1cmUgY29udGVudC4gVGhp
cyB3aWxsIGFsc28gbm9ybWFsaXplIHRoZSBzYW1wbGluZyBtYXRyaXguCi0gICAgICAgICAgICBk
cmF3ZXIuZHJhd09lcyhwZW5kaW5nRnJhbWUudGV4dHVyZUlkLCByb3RhdGVkU2FtcGxpbmdNYXRy
aXgsIHRleHR1cmVDb3B5LmdldFdpZHRoKCksCi0gICAgICAgICAgICAgICAgdGV4dHVyZUNvcHku
Z2V0SGVpZ2h0KCksIDAsIDAsIHRleHR1cmVDb3B5LmdldFdpZHRoKCksIHRleHR1cmVDb3B5Lmdl
dEhlaWdodCgpKTsKLSAgICAgICAgICAgIHJvdGF0ZWRTYW1wbGluZ01hdHJpeCA9IFJlbmRlcmVy
Q29tbW9uLmlkZW50aXR5TWF0cml4KCk7Ci0KLSAgICAgICAgICAgIC8vIFJlc3RvcmUgbm9ybWFs
IGZyYW1lYnVmZmVyLgotICAgICAgICAgICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMy
MC5HTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgICAgICAgICBHTEVTMjAuZ2xGaW5pc2goKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgY29weVRpbWVOcyArPSAoU3lzdGVtLm5hbm9UaW1lKCkgLSBu
b3cpOwotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKHBlbmRpbmdGcmFt
ZSk7Ci0gICAgICAgICAgcGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQot
Ci0gICAgICB1cGRhdGVMYXlvdXRNYXRyaXgoKTsKLSAgICAgIGZpbmFsIGZsb2F0W10gdGV4TWF0
cml4ID0KLSAgICAgICAgICBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHJvdGF0ZWRT
YW1wbGluZ01hdHJpeCwgbGF5b3V0TWF0cml4KTsKLSAgICAgIC8vIE9wZW5HTCBkZWZhdWx0cyB0
byBsb3dlciBsZWZ0IG9yaWdpbiAtIGZsaXAgdmlld3BvcnQgcG9zaXRpb24gdmVydGljYWxseS4K
LSAgICAgIGZpbmFsIGludCB2aWV3cG9ydFkgPSBzY3JlZW5IZWlnaHQgLSBkaXNwbGF5TGF5b3V0
LmJvdHRvbTsKLSAgICAgIGlmIChyZW5kZXJlclR5cGUgPT0gUmVuZGVyZXJUeXBlLlJFTkRFUkVS
X1lVVikgewotICAgICAgICBkcmF3ZXIuZHJhd1l1dih5dXZUZXh0dXJlcywgdGV4TWF0cml4LCB2
aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwgZGlzcGxheUxheW91dC5sZWZ0LAotICAgICAgICAgICAg
dmlld3BvcnRZLCBkaXNwbGF5TGF5b3V0LndpZHRoKCksIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZHJhd2VyLmRyYXdSZ2IodGV4dHVyZUNvcHkuZ2V0
VGV4dHVyZUlkKCksIHRleE1hdHJpeCwgdmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsCi0gICAgICAg
ICAgICBkaXNwbGF5TGF5b3V0LmxlZnQsIHZpZXdwb3J0WSwgZGlzcGxheUxheW91dC53aWR0aCgp
LCBkaXNwbGF5TGF5b3V0LmhlaWdodCgpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGlzTmV3RnJh
bWUpIHsKLSAgICAgICAgZnJhbWVzUmVuZGVyZWQrKzsKLSAgICAgICAgZHJhd1RpbWVOcyArPSAo
U3lzdGVtLm5hbm9UaW1lKCkgLSBub3cpOwotICAgICAgICBpZiAoKGZyYW1lc1JlbmRlcmVkICUg
MzAwKSA9PSAwKSB7Ci0gICAgICAgICAgbG9nU3RhdGlzdGljcygpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGxvZ1N0YXRpc3RpY3MoKSB7Ci0gICAgICBs
b25nIHRpbWVTaW5jZUZpcnN0RnJhbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnRUaW1l
TnM7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCArICIuIFR5cGU6ICIgKyByZW5k
ZXJlclR5cGUgKyAiLiBGcmFtZXMgcmVjZWl2ZWQ6ICIKLSAgICAgICAgICAgICAgKyBmcmFtZXNS
ZWNlaXZlZCArICIuIERyb3BwZWQ6ICIgKyBmcmFtZXNEcm9wcGVkICsgIi4gUmVuZGVyZWQ6ICIg
KyBmcmFtZXNSZW5kZXJlZCk7Ci0gICAgICBpZiAoZnJhbWVzUmVjZWl2ZWQgPiAwICYmIGZyYW1l
c1JlbmRlcmVkID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRHVyYXRpb246ICIgKyAo
aW50KSAodGltZVNpbmNlRmlyc3RGcmFtZU5zIC8gMWU2KSArICIgbXMuIEZQUzogIgotICAgICAg
ICAgICAgICAgICsgZnJhbWVzUmVuZGVyZWQgKiAxZTkgLyB0aW1lU2luY2VGaXJzdEZyYW1lTnMp
OwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRHJhdyB0aW1lOiAiICsgKGludCkgKGRyYXdUaW1l
TnMgLyAoMTAwMCAqIGZyYW1lc1JlbmRlcmVkKSkKLSAgICAgICAgICAgICAgICArICIgdXMuIENv
cHkgdGltZTogIiArIChpbnQpIChjb3B5VGltZU5zIC8gKDEwMDAgKiBmcmFtZXNSZWNlaXZlZCkp
ICsgIiB1cyIpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNjcmVlblNp
emUoZmluYWwgaW50IHNjcmVlbldpZHRoLCBmaW5hbCBpbnQgc2NyZWVuSGVpZ2h0KSB7Ci0gICAg
ICBzeW5jaHJvbml6ZWQgKHVwZGF0ZUxheW91dExvY2spIHsKLSAgICAgICAgaWYgKHNjcmVlbldp
ZHRoID09IHRoaXMuc2NyZWVuV2lkdGggJiYgc2NyZWVuSGVpZ2h0ID09IHRoaXMuc2NyZWVuSGVp
Z2h0KSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZChU
QUcsICJJRDogIiArIGlkICsgIi4gWXV2SW1hZ2VSZW5kZXJlci5zZXRTY3JlZW5TaXplOiAiICsg
c2NyZWVuV2lkdGggKyAiIHggIgotICAgICAgICAgICAgICAgICsgc2NyZWVuSGVpZ2h0KTsKLSAg
ICAgICAgdGhpcy5zY3JlZW5XaWR0aCA9IHNjcmVlbldpZHRoOwotICAgICAgICB0aGlzLnNjcmVl
bkhlaWdodCA9IHNjcmVlbkhlaWdodDsKLSAgICAgICAgdXBkYXRlTGF5b3V0UHJvcGVydGllcyA9
IHRydWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zaXRpb24oaW50
IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgIFJlbmRlcmVyQ29tbW9u
LlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgewotICAgICAgZmluYWwg
UmVjdCBsYXlvdXRJblBlcmNlbnRhZ2UgPQotICAgICAgICAgIG5ldyBSZWN0KHgsIHksIE1hdGgu
bWluKDEwMCwgeCArIHdpZHRoKSwgTWF0aC5taW4oMTAwLCB5ICsgaGVpZ2h0KSk7Ci0gICAgICBz
eW5jaHJvbml6ZWQgKHVwZGF0ZUxheW91dExvY2spIHsKLSAgICAgICAgaWYgKGxheW91dEluUGVy
Y2VudGFnZS5lcXVhbHModGhpcy5sYXlvdXRJblBlcmNlbnRhZ2UpICYmIHNjYWxpbmdUeXBlID09
IHRoaXMuc2NhbGluZ1R5cGUKLSAgICAgICAgICAgICYmIG1pcnJvciA9PSB0aGlzLm1pcnJvcikg
ewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
SUQ6ICIgKyBpZCArICIuIFl1dkltYWdlUmVuZGVyZXIuc2V0UG9zaXRpb246ICgiICsgeCArICIs
ICIgKyB5ICsgIikgIgotICAgICAgICAgICAgICAgICsgd2lkdGggKyAiIHggIiArIGhlaWdodCAr
ICIuIFNjYWxpbmc6ICIgKyBzY2FsaW5nVHlwZSArICIuIE1pcnJvcjogIiArIG1pcnJvcik7Ci0g
ICAgICAgIHRoaXMubGF5b3V0SW5QZXJjZW50YWdlLnNldChsYXlvdXRJblBlcmNlbnRhZ2UpOwot
ICAgICAgICB0aGlzLnNjYWxpbmdUeXBlID0gc2NhbGluZ1R5cGU7Ci0gICAgICAgIHRoaXMubWly
cm9yID0gbWlycm9yOwotICAgICAgICB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0U2l6ZShmaW5hbCBpbnQgdmlkZW9X
aWR0aCwgZmluYWwgaW50IHZpZGVvSGVpZ2h0LCBmaW5hbCBpbnQgcm90YXRpb24pIHsKLSAgICAg
IGlmICh2aWRlb1dpZHRoID09IHRoaXMudmlkZW9XaWR0aCAmJiB2aWRlb0hlaWdodCA9PSB0aGlz
LnZpZGVvSGVpZ2h0Ci0gICAgICAgICAgJiYgcm90YXRpb24gPT0gcm90YXRpb25EZWdyZWUpIHsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKHJlbmRlcmVyRXZlbnRzICE9IG51
bGwpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBSZXBvcnRpbmcg
ZnJhbWUgcmVzb2x1dGlvbiBjaGFuZ2VkIHRvICIgKyB2aWRlb1dpZHRoICsgIiB4ICIKLSAgICAg
ICAgICAgICAgICArIHZpZGVvSGVpZ2h0KTsKLSAgICAgICAgcmVuZGVyZXJFdmVudHMub25GcmFt
ZVJlc29sdXRpb25DaGFuZ2VkKHZpZGVvV2lkdGgsIHZpZGVvSGVpZ2h0LCByb3RhdGlvbik7Ci0g
ICAgICB9Ci0KLSAgICAgIHN5bmNocm9uaXplZCAodXBkYXRlTGF5b3V0TG9jaykgewotICAgICAg
ICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCArICIuIFl1dkltYWdlUmVuZGVyZXIuc2V0U2l6
ZTogIiArIHZpZGVvV2lkdGggKyAiIHggIgotICAgICAgICAgICAgICAgICsgdmlkZW9IZWlnaHQg
KyAiIHJvdGF0aW9uICIgKyByb3RhdGlvbik7Ci0KLSAgICAgICAgdGhpcy52aWRlb1dpZHRoID0g
dmlkZW9XaWR0aDsKLSAgICAgICAgdGhpcy52aWRlb0hlaWdodCA9IHZpZGVvSGVpZ2h0OwotICAg
ICAgICByb3RhdGlvbkRlZ3JlZSA9IHJvdGF0aW9uOwotICAgICAgICB1cGRhdGVMYXlvdXRQcm9w
ZXJ0aWVzID0gdHJ1ZTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIiAgWXV2SW1hZ2VSZW5kZXJl
ci5zZXRTaXplIGRvbmUuIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlbmRlckZyYW1lKEk0MjBGcmFtZSBmcmFtZSkgewot
ICAgICAgaWYgKHN1cmZhY2UgPT0gbnVsbCkgewotICAgICAgICAvLyBUaGlzIG9iamVjdCBoYXMg
YmVlbiByZWxlYXNlZC4KLSAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJh
bWUpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAocmVuZGVyRnJhbWVUaHJl
YWQgPT0gbnVsbCkgewotICAgICAgICByZW5kZXJGcmFtZVRocmVhZCA9IFRocmVhZC5jdXJyZW50
VGhyZWFkKCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIXNlZW5GcmFtZSAmJiByZW5kZXJlckV2ZW50
cyAhPSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsgIi4gUmVw
b3J0aW5nIGZpcnN0IHJlbmRlcmVkIGZyYW1lLiIpOwotICAgICAgICByZW5kZXJlckV2ZW50cy5v
bkZpcnN0RnJhbWVSZW5kZXJlZCgpOwotICAgICAgfQotICAgICAgZnJhbWVzUmVjZWl2ZWQrKzsK
LSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0ZyYW1lTG9jaykgewotICAgICAgICAvLyBDaGVj
ayBpbnB1dCBmcmFtZSBwYXJhbWV0ZXJzLgotICAgICAgICBpZiAoZnJhbWUueXV2RnJhbWUpIHsK
LSAgICAgICAgICBpZiAoZnJhbWUueXV2U3RyaWRlc1swXSA8IGZyYW1lLndpZHRoIHx8IGZyYW1l
Lnl1dlN0cmlkZXNbMV0gPCBmcmFtZS53aWR0aCAvIDIKLSAgICAgICAgICAgICAgfHwgZnJhbWUu
eXV2U3RyaWRlc1syXSA8IGZyYW1lLndpZHRoIC8gMikgewotICAgICAgICAgICAgTG9nZ2luZy5l
KFRBRywgIkluY29ycmVjdCBzdHJpZGVzICIgKyBmcmFtZS55dXZTdHJpZGVzWzBdICsgIiwgIiAr
IGZyYW1lLnl1dlN0cmlkZXNbMV0KLSAgICAgICAgICAgICAgICAgICAgKyAiLCAiICsgZnJhbWUu
eXV2U3RyaWRlc1syXSk7Ci0gICAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9u
ZShmcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKHBlbmRpbmdGcmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgLy8gU2tpcCBy
ZW5kZXJpbmcgb2YgdGhpcyBmcmFtZSBpZiBwcmV2aW91cyBmcmFtZSB3YXMgbm90IHJlbmRlcmVk
IHlldC4KLSAgICAgICAgICBmcmFtZXNEcm9wcGVkKys7Ci0gICAgICAgICAgVmlkZW9SZW5kZXJl
ci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgICAgIHNlZW5GcmFtZSA9IHRydWU7Ci0g
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHBlbmRpbmdGcmFtZSA9IGZyYW1l
OwotICAgICAgfQotICAgICAgc2V0U2l6ZShmcmFtZS53aWR0aCwgZnJhbWUuaGVpZ2h0LCBmcmFt
ZS5yb3RhdGlvbkRlZ3JlZSk7Ci0gICAgICBzZWVuRnJhbWUgPSB0cnVlOwotCi0gICAgICAvLyBS
ZXF1ZXN0IHJlbmRlcmluZy4KLSAgICAgIHN1cmZhY2UucmVxdWVzdFJlbmRlcigpOwotICAgIH0K
LSAgfQotCi0gIC8qKiBQYXNzZXMgR0xTdXJmYWNlVmlldyB0byB2aWRlbyByZW5kZXJlci4gKi8K
LSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRWaWV3KEdMU3VyZmFjZVZpZXcg
c3VyZmFjZSwgUnVubmFibGUgZWdsQ29udGV4dFJlYWR5Q2FsbGJhY2spIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5zZXRWaWV3Iik7Ci0gICAgaW5zdGFuY2UgPSBuZXcg
VmlkZW9SZW5kZXJlckd1aShzdXJmYWNlKTsKLSAgICBlZ2xDb250ZXh0UmVhZHkgPSBlZ2xDb250
ZXh0UmVhZHlDYWxsYmFjazsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIEVn
bEJhc2UuQ29udGV4dCBnZXRFZ2xCYXNlQ29udGV4dCgpIHsKLSAgICByZXR1cm4gZWdsQ29udGV4
dDsKLSAgfQotCi0gIC8qKiBSZWxlYXNlcyBHTFN1cmZhY2VWaWV3IHZpZGVvIHJlbmRlcmVyLiAq
LwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaWYg
KGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nZ2luZy5k
KFRBRywgIlZpZGVvUmVuZGVyZXJHdWkuZGlzcG9zZSIpOwotICAgIHN5bmNocm9uaXplZCAoaW5z
dGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5
dXZJbWFnZVJlbmRlcmVyIDogaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgICAg
eXV2SW1hZ2VSZW5kZXJlci5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgICBpbnN0YW5jZS55dXZJ
bWFnZVJlbmRlcmVycy5jbGVhcigpOwotICAgIH0KLSAgICByZW5kZXJGcmFtZVRocmVhZCA9IG51
bGw7Ci0gICAgZHJhd1RocmVhZCA9IG51bGw7Ci0gICAgaW5zdGFuY2Uuc3VyZmFjZSA9IG51bGw7
Ci0gICAgZWdsQ29udGV4dCA9IG51bGw7Ci0gICAgZWdsQ29udGV4dFJlYWR5ID0gbnVsbDsKLSAg
ICBpbnN0YW5jZSA9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBWaWRlb1JlbmRl
cmVyIHdpdGggdG9wIGxlZnQgY29ybmVyIGF0ICh4LCB5KSBhbmQgcmVzb2x1dGlvbgotICAgKiAo
d2lkdGgsIGhlaWdodCkuIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbiBwZXJjZW50YWdlIG9mIHNjcmVl
biByZXNvbHV0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBWaWRlb1JlbmRlcmVyIGNyZWF0
ZUd1aShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIFJlbmRlcmVy
Q29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgWXV2SW1hZ2VSZW5kZXJlciBqYXZhR3VpUmVuZGVyZXIgPSBjcmVhdGUo
eCwgeSwgd2lkdGgsIGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvcik7Ci0gICAgcmV0dXJuIG5l
dyBWaWRlb1JlbmRlcmVyKGphdmFHdWlSZW5kZXJlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGlj
IFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGNyZWF0ZUd1aVJlbmRlcmVyKAotICAgICAgaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBl
IHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgewotICAgIHJldHVybiBjcmVhdGUoeCwgeSwg
d2lkdGgsIGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvcik7Ci0gIH0KLQotICAvKioKLSAgICog
Q3JlYXRlcyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB3aXRoIHRvcCBsZWZ0IGNvcm5lciBhdCAo
eCwgeSkgYW5kCi0gICAqIHJlc29sdXRpb24gKHdpZHRoLCBoZWlnaHQpLiBBbGwgcGFyYW1ldGVy
cyBhcmUgaW4gcGVyY2VudGFnZSBvZgotICAgKiBzY3JlZW4gcmVzb2x1dGlvbi4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFl1dkltYWdlUmVuZGVyZXIgY3JlYXRlKAotICAg
ICAgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlcmVyQ29tbW9uLlNj
YWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgewotICAgIHJldHVybiBjcmVh
dGUoeCwgeSwgd2lkdGgsIGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvciwgbmV3IEdsUmVjdERy
YXdlcigpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIFZpZGVvUmVuZGVyZXIuQ2FsbGJh
Y2tzIHdpdGggdG9wIGxlZnQgY29ybmVyIGF0ICh4LCB5KSBhbmQgcmVzb2x1dGlvbiAod2lkdGgs
IGhlaWdodCkuCi0gICAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbiBwZXJjZW50YWdlIG9mIHNjcmVl
biByZXNvbHV0aW9uLiBUaGUgY3VzdG9tIHxkcmF3ZXJ8IHdpbGwgYmUgdXNlZCBmb3IKLSAgICog
ZHJhd2luZyBmcmFtZXMgb24gdGhlIEVHTFN1cmZhY2UuIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2li
bGUgZm9yIGNhbGxpbmcgcmVsZWFzZSgpIG9uIHxkcmF3ZXJ8LgotICAgKi8KLSAgcHVibGljIHN0
YXRpYyBzeW5jaHJvbml6ZWQgWXV2SW1hZ2VSZW5kZXJlciBjcmVhdGUoaW50IHgsIGludCB5LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBz
Y2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IsIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdl
cikgewotICAgIC8vIENoZWNrIGRpc3BsYXkgcmVnaW9uIHBhcmFtZXRlcnMuCi0gICAgaWYgKHgg
PCAwIHx8IHggPiAxMDAgfHwgeSA8IDAgfHwgeSA+IDEwMCB8fCB3aWR0aCA8IDAgfHwgd2lkdGgg
PiAxMDAgfHwgaGVpZ2h0IDwgMAotICAgICAgICB8fCBoZWlnaHQgPiAxMDAgfHwgeCArIHdpZHRo
ID4gMTAwIHx8IHkgKyBoZWlnaHQgPiAxMDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJJbmNvcnJlY3Qgd2luZG93IHBhcmFtZXRlcnMuIik7Ci0gICAgfQotCi0gICAgaWYg
KGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJB
dHRlbXB0IHRvIGNyZWF0ZSB5dXYgcmVuZGVyZXIgYmVmb3JlIHNldHRpbmcgR0xTdXJmYWNlVmll
dyIpOwotICAgIH0KLSAgICBmaW5hbCBZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIg
PSBuZXcgWXV2SW1hZ2VSZW5kZXJlcihpbnN0YW5jZS5zdXJmYWNlLAotICAgICAgICBpbnN0YW5j
ZS55dXZJbWFnZVJlbmRlcmVycy5zaXplKCksIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdU
eXBlLCBtaXJyb3IsIGRyYXdlcik7Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFn
ZVJlbmRlcmVycykgewotICAgICAgaWYgKGluc3RhbmNlLm9uU3VyZmFjZUNyZWF0ZWRDYWxsZWQp
IHsKLSAgICAgICAgLy8gb25TdXJmYWNlQ3JlYXRlZCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBm
b3IgVmlkZW9SZW5kZXJlckd1aSAtCi0gICAgICAgIC8vIG5lZWQgdG8gY3JlYXRlIHRleHR1cmUg
Zm9yIG5ldyBpbWFnZSBhbmQgYWRkIGltYWdlIHRvIHRoZQotICAgICAgICAvLyByZW5kZXJpbmcg
bGlzdC4KLSAgICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggY291bnREb3duTGF0Y2ggPSBuZXcg
Q291bnREb3duTGF0Y2goMSk7Ci0gICAgICAgIGluc3RhbmNlLnN1cmZhY2UucXVldWVFdmVudChu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5jcmVhdGVUZXh0dXJlcygp
OwotICAgICAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5zZXRTY3JlZW5TaXplKGluc3RhbmNlLnNj
cmVlbldpZHRoLCBpbnN0YW5jZS5zY3JlZW5IZWlnaHQpOwotICAgICAgICAgICAgY291bnREb3du
TGF0Y2guY291bnREb3duKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgLy8g
V2FpdCBmb3IgdGFzayBjb21wbGV0aW9uLgotICAgICAgICB0cnkgewotICAgICAgICAgIGNvdW50
RG93bkxhdGNoLmF3YWl0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgLy8gQWRkIHl1diByZW5kZXJlciB0byByZW5kZXJpbmcgbGlzdC4K
LSAgICAgIGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzLmFkZCh5dXZJbWFnZVJlbmRlcmVyKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHl1dkltYWdlUmVuZGVyZXI7Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIHN5bmNocm9uaXplZCB2b2lkIHVwZGF0ZShWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5k
ZXJlciwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsCi0gICAgICBpbnQgaGVpZ2h0LCBSZW5kZXJl
ckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS51cGRhdGUiKTsKLSAgICBpZiAoaW5zdGFu
Y2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkF0dGVtcHQg
dG8gdXBkYXRlIHl1diByZW5kZXJlciBiZWZvcmUgc2V0dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0g
ICAgfQotICAgIHN5bmNocm9uaXplZCAoaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAg
ICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogaW5zdGFuY2UueXV2
SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgICAgaWYgKHl1dkltYWdlUmVuZGVyZXIgPT0gcmVuZGVy
ZXIpIHsKLSAgICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLnNldFBvc2l0aW9uKHgsIHksIHdpZHRo
LCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJyb3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRSZW5kZXJlckV2
ZW50cygKLSAgICAgIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbmRlcmVyLCBSZW5kZXJlckNv
bW1vbi5SZW5kZXJlckV2ZW50cyByZW5kZXJlckV2ZW50cykgewotICAgIExvZ2dpbmcuZChUQUcs
ICJWaWRlb1JlbmRlcmVyR3VpLnNldFJlbmRlcmVyRXZlbnRzIik7Ci0gICAgaWYgKGluc3RhbmNl
ID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBdHRlbXB0IHRv
IHNldCByZW5kZXJlciBldmVudHMgYmVmb3JlIHNldHRpbmcgR0xTdXJmYWNlVmlldyIpOwotICAg
IH0KLSAgICBzeW5jaHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAg
ICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IGluc3RhbmNlLnl1dklt
YWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIGlmICh5dXZJbWFnZVJlbmRlcmVyID09IHJlbmRlcmVy
KSB7Ci0gICAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5yZW5kZXJlckV2ZW50cyA9IHJlbmRlcmVy
RXZlbnRzOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBzeW5jaHJvbml6ZWQgdm9pZCByZW1vdmUoVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVuZGVy
ZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5yZW1vdmUiKTsKLSAg
ICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oIkF0dGVtcHQgdG8gcmVtb3ZlIHJlbmRlcmVyIGJlZm9yZSBzZXR0aW5nIEdMU3VyZmFjZVZp
ZXciKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVy
cykgewotICAgICAgZmluYWwgaW50IGluZGV4ID0gaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMu
aW5kZXhPZihyZW5kZXJlcik7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpIHsKLSAgICAgICAgTG9n
Z2luZy53KFRBRywgIkNvdWxkbid0IHJlbW92ZSByZW5kZXJlciAobm90IHByZXNlbnQgaW4gY3Vy
cmVudCBsaXN0KSIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaW5zdGFuY2UueXV2SW1hZ2VS
ZW5kZXJlcnMucmVtb3ZlKGluZGV4KS5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldChWaWRlb1JlbmRlcmVyLkNh
bGxiYWNrcyByZW5kZXJlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3Vp
LnJlc2V0Iik7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCJBdHRlbXB0IHRvIHJlc2V0IHJlbmRlcmVyIGJlZm9yZSBzZXR0aW5n
IEdMU3VyZmFjZVZpZXciKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJ
bWFnZVJlbmRlcmVycykgewotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVu
ZGVyZXIgOiBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICBpZiAoeXV2SW1h
Z2VSZW5kZXJlciA9PSByZW5kZXJlcikgewotICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIucmVz
ZXQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGlj
IHZvaWQgcHJpbnRTdGFja1RyYWNlKFRocmVhZCB0aHJlYWQsIFN0cmluZyB0aHJlYWROYW1lKSB7
Ci0gICAgaWYgKHRocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxlbWVudFtdIHN0
YWNrVHJhY2VzID0gdGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChzdGFja1RyYWNl
cy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsIHRocmVhZE5hbWUgKyAiIHN0
YWNrcyB0cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCBzdGFja1RyYWNl
IDogc3RhY2tUcmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRv
U3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBwcmludFN0YWNrVHJhY2VzKCkgewotICAgIGlmIChpbnN0
YW5jZSA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHByaW50U3RhY2tUcmFj
ZShyZW5kZXJGcmFtZVRocmVhZCwgIlJlbmRlciBmcmFtZSB0aHJlYWQiKTsKLSAgICBwcmludFN0
YWNrVHJhY2UoZHJhd1RocmVhZCwgIkRyYXcgdGhyZWFkIik7Ci0gIH0KLQotICBAU3VwcHJlc3NM
aW50KCJOZXdBcGkiKQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25TdXJmYWNlQ3JlYXRl
ZChHTDEwIHVudXNlZCwgRUdMQ29uZmlnIGNvbmZpZykgewotICAgIExvZ2dpbmcuZChUQUcsICJW
aWRlb1JlbmRlcmVyR3VpLm9uU3VyZmFjZUNyZWF0ZWQiKTsKLSAgICAvLyBTdG9yZSByZW5kZXIg
RUdMIGNvbnRleHQuCi0gICAgc3luY2hyb25pemVkIChWaWRlb1JlbmRlcmVyR3VpLmNsYXNzKSB7
Ci0gICAgICBpZiAoRWdsQmFzZTE0LmlzRUdMMTRTdXBwb3J0ZWQoKSkgewotICAgICAgICBlZ2xD
b250ZXh0ID0gbmV3IEVnbEJhc2UxNC5Db250ZXh0KEVHTDE0LmVnbEdldEN1cnJlbnRDb250ZXh0
KCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZWdsQ29udGV4dCA9IG5ldyBFZ2xCYXNlMTAu
Q29udGV4dCgoKEVHTDEwKSBFR0xDb250ZXh0LmdldEVHTCgpKS5lZ2xHZXRDdXJyZW50Q29udGV4
dCgpKTsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkg
RUdMIENvbnRleHQ6ICIgKyBlZ2xDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBzeW5jaHJvbml6ZWQg
KHl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIGFsbCBp
bWFnZXMuCi0gICAgICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IHl1
dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIHl1dkltYWdlUmVuZGVyZXIuY3JlYXRlVGV4dHVy
ZXMoKTsKLSAgICAgIH0KLSAgICAgIG9uU3VyZmFjZUNyZWF0ZWRDYWxsZWQgPSB0cnVlOwotICAg
IH0KLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIm9uU3VyZmFjZUNyZWF0ZWQgZG9uZSIp
OwotICAgIEdMRVMyMC5nbFBpeGVsU3RvcmVpKEdMRVMyMC5HTF9VTlBBQ0tfQUxJR05NRU5ULCAx
KTsKLSAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKDAuMTVmLCAwLjE1ZiwgMC4xNWYsIDEuMGYpOwot
Ci0gICAgLy8gRmlyZSBFR0wgY29udGV4dCByZWFkeSBldmVudC4KLSAgICBzeW5jaHJvbml6ZWQg
KFZpZGVvUmVuZGVyZXJHdWkuY2xhc3MpIHsKLSAgICAgIGlmIChlZ2xDb250ZXh0UmVhZHkgIT0g
bnVsbCkgewotICAgICAgICBlZ2xDb250ZXh0UmVhZHkucnVuKCk7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNoYW5nZWQoR0wxMCB1
bnVzZWQsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRl
b1JlbmRlcmVyR3VpLm9uU3VyZmFjZUNoYW5nZWQ6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0
ICsgIiAgIik7Ci0gICAgc2NyZWVuV2lkdGggPSB3aWR0aDsKLSAgICBzY3JlZW5IZWlnaHQgPSBo
ZWlnaHQ7Ci0gICAgc3luY2hyb25pemVkICh5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgZm9y
IChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiB5dXZJbWFnZVJlbmRlcmVycykg
ewotICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLnNldFNjcmVlblNpemUoc2NyZWVuV2lkdGgsIHNj
cmVlbkhlaWdodCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG9uRHJhd0ZyYW1lKEdMMTAgdW51c2VkKSB7Ci0gICAgaWYgKGRyYXdUaHJlYWQgPT0g
bnVsbCkgewotICAgICAgZHJhd1RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAg
fQotICAgIEdMRVMyMC5nbFZpZXdwb3J0KDAsIDAsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQp
OwotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICBz
eW5jaHJvbml6ZWQgKHl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVu
ZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IHl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIHl1
dkltYWdlUmVuZGVyZXIuZHJhdygpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9WaWRlb1NvdXJjZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvVmlkZW9Tb3VyY2UuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9WaWRlb1NvdXJjZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzMgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEphdmEgd3Jh
cHBlciBvZiBuYXRpdmUgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuCi0gKi8KLXB1YmxpYyBjbGFz
cyBWaWRlb1NvdXJjZSBleHRlbmRzIE1lZGlhU291cmNlIHsKLSAgcHVibGljIFZpZGVvU291cmNl
KGxvbmcgbmF0aXZlU291cmNlKSB7Ci0gICAgc3VwZXIobmF0aXZlU291cmNlKTsKLSAgfQotCi0g
IC8qKgotICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSBmcmFtZXMgdG8gYmUg
c2NhbGVkIGRvd24gdG8gdGhlIHJlcXVlc3RlZCByZXNvbHV0aW9uLiBBbHNvLAotICAgKiBmcmFt
ZXMgd2lsbCBiZSBjcm9wcGVkIHRvIG1hdGNoIHRoZSByZXF1ZXN0ZWQgYXNwZWN0IHJhdGlvLCBh
bmQgZnJhbWVzIHdpbGwgYmUgZHJvcHBlZCB0byBtYXRjaAotICAgKiB0aGUgcmVxdWVzdGVkIGZw
cy4gVGhlIHJlcXVlc3RlZCBhc3BlY3QgcmF0aW8gaXMgb3JpZW50YXRpb24gYWdub3N0aWMgYW5k
IHdpbGwgYmUgYWRqdXN0ZWQgdG8KLSAgICogbWFpbnRhaW4gdGhlIGlucHV0IG9yaWVudGF0aW9u
LCBzbyBpdCBkb2Vzbid0IG1hdHRlciBpZiBlLmcuIDEyODB4NzIwIG9yIDcyMHgxMjgwIGlzIHJl
cXVlc3RlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkYXB0T3V0cHV0Rm9ybWF0KGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IGZwcykgewotICAgIG5hdGl2ZUFkYXB0T3V0cHV0Rm9ybWF0KG5h
dGl2ZVNvdXJjZSwgd2lkdGgsIGhlaWdodCwgZnBzKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSB2b2lkIG5hdGl2ZUFkYXB0T3V0cHV0Rm9ybWF0KAotICAgICAgbG9uZyBuYXRpdmVT
b3VyY2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZwcyk7Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL1ZpZGVvVHJhY2suamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L1ZpZGVvVHJhY2suamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9W
aWRlb1RyYWNrLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2Vk
TGlzdDsKLQotLyoqIEphdmEgdmVyc2lvbiBvZiBWaWRlb1RyYWNrSW50ZXJmYWNlLiAqLwotcHVi
bGljIGNsYXNzIFZpZGVvVHJhY2sgZXh0ZW5kcyBNZWRpYVN0cmVhbVRyYWNrIHsKLSAgcHJpdmF0
ZSBmaW5hbCBMaW5rZWRMaXN0PFZpZGVvUmVuZGVyZXI+IHJlbmRlcmVycyA9IG5ldyBMaW5rZWRM
aXN0PFZpZGVvUmVuZGVyZXI+KCk7Ci0KLSAgcHVibGljIFZpZGVvVHJhY2sobG9uZyBuYXRpdmVU
cmFjaykgewotICAgIHN1cGVyKG5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFk
ZFJlbmRlcmVyKFZpZGVvUmVuZGVyZXIgcmVuZGVyZXIpIHsKLSAgICByZW5kZXJlcnMuYWRkKHJl
bmRlcmVyKTsKLSAgICBuYXRpdmVBZGRSZW5kZXJlcihuYXRpdmVUcmFjaywgcmVuZGVyZXIubmF0
aXZlVmlkZW9SZW5kZXJlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVSZW5kZXJlcihW
aWRlb1JlbmRlcmVyIHJlbmRlcmVyKSB7Ci0gICAgaWYgKCFyZW5kZXJlcnMucmVtb3ZlKHJlbmRl
cmVyKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBuYXRpdmVSZW1vdmVSZW5kZXJlcihu
YXRpdmVUcmFjaywgcmVuZGVyZXIubmF0aXZlVmlkZW9SZW5kZXJlcik7Ci0gICAgcmVuZGVyZXIu
ZGlzcG9zZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB3aGlsZSAo
IXJlbmRlcmVycy5pc0VtcHR5KCkpIHsKLSAgICAgIHJlbW92ZVJlbmRlcmVyKHJlbmRlcmVycy5n
ZXRGaXJzdCgpKTsKLSAgICB9Ci0gICAgc3VwZXIuZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVBZGRSZW5kZXJlcihsb25nIG5hdGl2ZVRyYWNrLCBs
b25nIG5hdGl2ZVJlbmRlcmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRp
dmVSZW1vdmVSZW5kZXJlcihsb25nIG5hdGl2ZVRyYWNrLCBsb25nIG5hdGl2ZVJlbmRlcmVyKTsK
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvWXV2Q29udmVydGVyLmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9ZdXZDb252ZXJ0ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9ZdXZDb252ZXJ0ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDI1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMTFFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wu
R0xFUzIwOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uRmxv
YXRCdWZmZXI7Ci0KLS8qKgotICogQ2xhc3MgZm9yIGNvbnZlcnRpbmcgT0VTIHRleHR1cmVzIHRv
IGEgWVVWIEJ5dGVCdWZmZXIuIEl0IHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBvbiBhIHRocmVhZCB3
aXRoCi0gKiBhbiBhY3RpdmUgRUdMIGNvbnRleHQsIGFuZCBvbmx5IGJlIHVzZWQgZnJvbSB0aGF0
IHRocmVhZC4KLSAqLwotY2xhc3MgWXV2Q29udmVydGVyIHsKLSAgLy8gVmVydGV4IGNvb3JkaW5h
dGVzIGluIE5vcm1hbGl6ZWQgRGV2aWNlIENvb3JkaW5hdGVzLCBpLmUuCi0gIC8vICgtMSwgLTEp
IGlzIGJvdHRvbS1sZWZ0IGFuZCAoMSwgMSkgaXMgdG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBGbG9hdEJ1ZmZlciBERVZJQ0VfUkVDVEFOR0xFID0gR2xVdGlsLmNyZWF0ZUZsb2F0
QnVmZmVyKG5ldyBmbG9hdFtdIHsKLSAgICAgIC0xLjBmLCAtMS4wZiwgLy8gQm90dG9tIGxlZnQu
Ci0gICAgICAxLjBmLCAtMS4wZiwgLy8gQm90dG9tIHJpZ2h0LgotICAgICAgLTEuMGYsIDEuMGYs
IC8vIFRvcCBsZWZ0LgotICAgICAgMS4wZiwgMS4wZiwgLy8gVG9wIHJpZ2h0LgotICB9KTsKLQot
ICAvLyBUZXh0dXJlIGNvb3JkaW5hdGVzIC0gKDAsIDApIGlzIGJvdHRvbS1sZWZ0IGFuZCAoMSwg
MSkgaXMgdG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGbG9hdEJ1ZmZlciBURVhU
VVJFX1JFQ1RBTkdMRSA9IEdsVXRpbC5jcmVhdGVGbG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0g
ICAgICAwLjBmLCAwLjBmLCAvLyBCb3R0b20gbGVmdC4KLSAgICAgIDEuMGYsIDAuMGYsIC8vIEJv
dHRvbSByaWdodC4KLSAgICAgIDAuMGYsIDEuMGYsIC8vIFRvcCBsZWZ0LgotICAgICAgMS4wZiwg
MS4wZiAvLyBUb3AgcmlnaHQuCi0gIH0pOwotCi0gIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlRFWF9TSEFERVIgPQotICAgICAgICAidmFyeWlu
ZyB2ZWMyIGludGVycF90YztcbiIKLSAgICAgICsgImF0dHJpYnV0ZSB2ZWM0IGluX3BvcztcbiIK
LSAgICAgICsgImF0dHJpYnV0ZSB2ZWM0IGluX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICAr
ICJ1bmlmb3JtIG1hdDQgdGV4TWF0cml4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lk
IG1haW4oKSB7XG4iCi0gICAgICArICIgICAgZ2xfUG9zaXRpb24gPSBpbl9wb3M7XG4iCi0gICAg
ICArICIgICAgaW50ZXJwX3RjID0gKHRleE1hdHJpeCAqIGluX3RjKS54eTtcbiIKLSAgICAgICsg
In1cbiI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1NIQURFUiA9
Ci0gICAgICAgICIjZXh0ZW5zaW9uIEdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgOiByZXF1aXJl
XG4iCi0gICAgICArICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICsgInZhcnlp
bmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gc2Ft
cGxlckV4dGVybmFsT0VTIG9lc1RleDtcbiIKLSAgICAgIC8vIERpZmZlcmVuY2UgaW4gdGV4dHVy
ZSBjb29yZGluYXRlIGNvcnJlc3BvbmRpbmcgdG8gb25lCi0gICAgICAvLyBzdWItcGl4ZWwgaW4g
dGhlIHggZGlyZWN0aW9uLgotICAgICAgKyAidW5pZm9ybSB2ZWMyIHhVbml0O1xuIgotICAgICAg
Ly8gQ29sb3IgY29udmVyc2lvbiBjb2VmZmljaWVudHMsIGluY2x1ZGluZyBjb25zdGFudCB0ZXJt
Ci0gICAgICArICJ1bmlmb3JtIHZlYzQgY29lZmZzO1xuIgotICAgICAgKyAiXG4iCi0gICAgICAr
ICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAvLyBTaW5jZSB0aGUgYWxwaGEgcmVhZCBmcm9tIHRo
ZSB0ZXh0dXJlIGlzIGFsd2F5cyAxLCB0aGlzIGNvdWxkCi0gICAgICAvLyBiZSB3cml0dGVuIGFz
IGEgbWF0NCB4IHZlYzQgbXVsdGlwbHkuIEhvd2V2ZXIsIHRoYXQgc2VlbXMgdG8KLSAgICAgIC8v
IGdpdmUgYSB3b3JzZSBmcmFtZXJhdGUsIHBvc3NpYmx5IGJlY2F1c2UgdGhlIGFkZGl0aW9uYWwK
LSAgICAgIC8vIG11bHRpcGxpZXMgYnkgMS4wIGNvbnN1bWUgcmVzb3VyY2VzLiBUT0RPKG5pc3Nl
KTogQ291bGQgYWxzbwotICAgICAgLy8gdHJ5IHRvIGRvIGl0IGFzIGEgdmVjMyB4IG1hdDN4NCwg
Zm9sbG93ZWQgYnkgYW4gYWRkIGluIG9mIGEKLSAgICAgIC8vIGNvbnN0YW50IHZlY3Rvci4KLSAg
ICAgICsgIiAgZ2xfRnJhZ0NvbG9yLnIgPSBjb2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgot
ICAgICAgKyAiICAgICAgdGV4dHVyZTJEKG9lc1RleCwgaW50ZXJwX3RjIC0gMS41ICogeFVuaXQp
LnJnYik7XG4iCi0gICAgICArICIgIGdsX0ZyYWdDb2xvci5nID0gY29lZmZzLmEgKyBkb3QoY29l
ZmZzLnJnYixcbiIKLSAgICAgICsgIiAgICAgIHRleHR1cmUyRChvZXNUZXgsIGludGVycF90YyAt
IDAuNSAqIHhVbml0KS5yZ2IpO1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IuYiA9IGNvZWZm
cy5hICsgZG90KGNvZWZmcy5yZ2IsXG4iCi0gICAgICArICIgICAgICB0ZXh0dXJlMkQob2VzVGV4
LCBpbnRlcnBfdGMgKyAwLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0Nv
bG9yLmEgPSBjb2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgotICAgICAgKyAiICAgICAgdGV4
dHVyZTJEKG9lc1RleCwgaW50ZXJwX3RjICsgMS41ICogeFVuaXQpLnJnYik7XG4iCi0gICAgICAr
ICJ9XG4iOwotICAvLyBjbGFuZy1mb3JtYXQgb24KLQotICBwcml2YXRlIGZpbmFsIGludCBmcmFt
ZUJ1ZmZlcklkOwotICBwcml2YXRlIGZpbmFsIGludCBmcmFtZVRleHR1cmVJZDsKLSAgcHJpdmF0
ZSBmaW5hbCBHbFNoYWRlciBzaGFkZXI7Ci0gIHByaXZhdGUgZmluYWwgaW50IHRleE1hdHJpeExv
YzsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgeFVuaXRMb2M7Ci0gIHByaXZhdGUgZmluYWwgaW50IGNv
ZWZmc0xvYzsKLSAgcHJpdmF0ZSBmaW5hbCBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyIHRocmVh
ZENoZWNrZXIgPSBuZXcgVGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlcigpOwotICBwcml2YXRlIGlu
dCBmcmFtZUJ1ZmZlcldpZHRoOwotICBwcml2YXRlIGludCBmcmFtZUJ1ZmZlckhlaWdodDsKLSAg
cHJpdmF0ZSBib29sZWFuIHJlbGVhc2VkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoaXMgY2xh
c3Mgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIG9uIGEgdGhyZWFkIHRoYXQgaGFzIGFuIGFjdGl2ZSBF
R0wgY29udGV4dC4KLSAgICovCi0gIHB1YmxpYyBZdXZDb252ZXJ0ZXIoKSB7Ci0gICAgdGhyZWFk
Q2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIGZyYW1lVGV4dHVyZUlkID0gR2xV
dGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgdGhpcy5mcmFt
ZUJ1ZmZlcldpZHRoID0gMDsKLSAgICB0aGlzLmZyYW1lQnVmZmVySGVpZ2h0ID0gMDsKLQotICAg
IC8vIENyZWF0ZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGJpbmQgaXQuCi0gICAgZmluYWwgaW50
IGZyYW1lQnVmZmVyc1tdID0gbmV3IGludFsxXTsKLSAgICBHTEVTMjAuZ2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgZnJhbWVCdWZmZXJzLCAwKTsKLSAgICBmcmFtZUJ1ZmZlcklkID0gZnJhbWVCdWZmZXJz
WzBdOwotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIs
IGZyYW1lQnVmZmVySWQpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiR2VuZXJhdGUg
ZnJhbWVidWZmZXIiKTsKLQotICAgIC8vIEF0dGFjaCB0aGUgdGV4dHVyZSB0byB0aGUgZnJhbWVi
dWZmZXIgYXMgY29sb3IgYXR0YWNobWVudC4KLSAgICBHTEVTMjAuZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIEdMRVMyMC5HTF9DT0xPUl9BVFRBQ0hNRU5UMCwK
LSAgICAgICAgR0xFUzIwLkdMX1RFWFRVUkVfMkQsIGZyYW1lVGV4dHVyZUlkLCAwKTsKLSAgICBH
bFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkF0dGFjaCB0ZXh0dXJlIHRvIGZyYW1lYnVmZmVyIik7
Ci0KLSAgICAvLyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAgICBHTEVTMjAuZ2xCaW5k
RnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLQotICAgIHNoYWRlciA9IG5l
dyBHbFNoYWRlcihWRVJURVhfU0hBREVSLCBGUkFHTUVOVF9TSEFERVIpOwotICAgIHNoYWRlci51
c2VQcm9ncmFtKCk7Ci0gICAgdGV4TWF0cml4TG9jID0gc2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlv
bigidGV4TWF0cml4Iik7Ci0gICAgeFVuaXRMb2MgPSBzaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9u
KCJ4VW5pdCIpOwotICAgIGNvZWZmc0xvYyA9IHNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oImNv
ZWZmcyIpOwotICAgIEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9u
KCJvZXNUZXgiKSwgMCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJJbml0aWFsaXpl
IGZyYWdtZW50IHNoYWRlciB1bmlmb3JtIHZhbHVlcy4iKTsKLSAgICAvLyBJbml0aWFsaXplIHZl
cnRleCBzaGFkZXIgYXR0cmlidXRlcy4KLSAgICBzaGFkZXIuc2V0VmVydGV4QXR0cmliQXJyYXko
ImluX3BvcyIsIDIsIERFVklDRV9SRUNUQU5HTEUpOwotICAgIC8vIElmIHRoZSB3aWR0aCBpcyBu
b3QgYSBtdWx0aXBsZSBvZiA0IHBpeGVscywgdGhlIHRleHR1cmUKLSAgICAvLyB3aWxsIGJlIHNj
YWxlZCB1cCBzbGlnaHRseSBhbmQgY2xpcHBlZCBhdCB0aGUgcmlnaHQgYm9yZGVyLgotICAgIHNo
YWRlci5zZXRWZXJ0ZXhBdHRyaWJBcnJheSgiaW5fdGMiLCAyLCBURVhUVVJFX1JFQ1RBTkdMRSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjb252ZXJ0KEJ5dGVCdWZmZXIgYnVmLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBzdHJpZGUsIGludCBzcmNUZXh0dXJlSWQsCi0gICAgICBmbG9hdFtd
IHRyYW5zZm9ybU1hdHJpeCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJl
YWQoKTsKLSAgICBpZiAocmVsZWFzZWQpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVF
eGNlcHRpb24oIll1dkNvbnZlcnRlci5jb252ZXJ0IGNhbGxlZCBvbiByZWxlYXNlZCBvYmplY3Qi
KTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkcmF3IGludG8gYSBidWZmZXIgbGFpZCBvdXQgbGlrZQot
ICAgIC8vCi0gICAgLy8gICAgKy0tLS0tLS0tLSsKLSAgICAvLyAgICB8ICAgICAgICAgfAotICAg
IC8vICAgIHwgIFkgICAgICB8Ci0gICAgLy8gICAgfCAgICAgICAgIHwKLSAgICAvLyAgICB8ICAg
ICAgICAgfAotICAgIC8vICAgICstLS0tKy0tLS0rCi0gICAgLy8gICAgfCBVICB8IFYgIHwKLSAg
ICAvLyAgICB8ICAgIHwgICAgfAotICAgIC8vICAgICstLS0tKy0tLS0rCi0gICAgLy8KLSAgICAv
LyBJbiBtZW1vcnksIHdlIHVzZSB0aGUgc2FtZSBzdHJpZGUgZm9yIGFsbCBvZiBZLCBVIGFuZCBW
LiBUaGUKLSAgICAvLyBVIGRhdGEgc3RhcnRzIGF0IG9mZnNldCB8aGVpZ2h0fCAqIHxzdHJpZGV8
IGZyb20gdGhlIFkgZGF0YSwKLSAgICAvLyBhbmQgdGhlIFYgZGF0YSBzdGFydHMgYXQgYXQgb2Zm
c2V0IHxzdHJpZGUvMnwgZnJvbSB0aGUgVQotICAgIC8vIGRhdGEsIHdpdGggcm93cyBvZiBVIGFu
ZCBWIGRhdGEgYWx0ZXJuYXRpbmcuCi0gICAgLy8KLSAgICAvLyBOb3csIGl0IHdvdWxkIGhhdmUg
bWFkZSBzZW5zZSB0byBhbGxvY2F0ZSBhIHBpeGVsIGJ1ZmZlciB3aXRoCi0gICAgLy8gYSBzaW5n
bGUgYnl0ZSBwZXIgcGl4ZWwgKEVHTDEwLkVHTF9DT0xPUl9CVUZGRVJfVFlQRSwKLSAgICAvLyBF
R0wxMC5FR0xfTFVNSU5BTkNFX0JVRkZFUiwpLCBidXQgdGhhdCBzZWVtcyB0byBiZQotICAgIC8v
IHVuc3VwcG9ydGVkIGJ5IGRldmljZXMuIFNvIGRvIHRoZSBmb2xsb3dpbmcgaGFjazogQWxsb2Nh
dGUgYW4KLSAgICAvLyBSR0JBIGJ1ZmZlciwgb2Ygd2lkdGggfHN0cmlkZXwvNC4gVG8gcmVuZGVy
IGVhY2ggb2YgdGhlc2UKLSAgICAvLyBsYXJnZSBwaXhlbHMsIHNhbXBsZSB0aGUgdGV4dHVyZSBh
dCA0IGRpZmZlcmVudCB4IGNvb3JkaW5hdGVzCi0gICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHRz
IGluIHRoZSBmb3VyIGNvbXBvbmVudHMuCi0gICAgLy8KLSAgICAvLyBTaW5jZSB0aGUgViBkYXRh
IG5lZWRzIHRvIHN0YXJ0IG9uIGEgYm91bmRhcnkgb2Ygc3VjaCBhCi0gICAgLy8gbGFyZ2VyIHBp
eGVsLCBpdCBpcyBub3Qgc3VmZmljaWVudCB0aGF0IHxzdHJpZGV8IGlzIGV2ZW4sIGl0Ci0gICAg
Ly8gaGFzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOCBwaXhlbHMuCi0KLSAgICBpZiAoc3RyaWRlICUg
OCAhPSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZh
bGlkIHN0cmlkZSwgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDgiKTsKLSAgICB9Ci0gICAgaWYgKHN0
cmlkZSA8IHdpZHRoKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
KCJJbnZhbGlkIHN0cmlkZSwgbXVzdCA+PSB3aWR0aCIpOwotICAgIH0KLQotICAgIGludCB5X3dp
ZHRoID0gKHdpZHRoICsgMykgLyA0OwotICAgIGludCB1dl93aWR0aCA9ICh3aWR0aCArIDcpIC8g
ODsKLSAgICBpbnQgdXZfaGVpZ2h0ID0gKGhlaWdodCArIDEpIC8gMjsKLSAgICBpbnQgdG90YWxf
aGVpZ2h0ID0gaGVpZ2h0ICsgdXZfaGVpZ2h0OwotICAgIGludCBzaXplID0gc3RyaWRlICogdG90
YWxfaGVpZ2h0OwotCi0gICAgaWYgKGJ1Zi5jYXBhY2l0eSgpIDwgc2l6ZSkgewotICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiWXV2Q29udmVydGVyLmNvbnZlcnQgY2Fs
bGVkIHdpdGggdG9vIHNtYWxsIGJ1ZmZlciIpOwotICAgIH0KLSAgICAvLyBQcm9kdWNlIGEgZnJh
bWUgYnVmZmVyIHN0YXJ0aW5nIGF0IHRvcC1sZWZ0IGNvcm5lciwgbm90Ci0gICAgLy8gYm90dG9t
LWxlZnQuCi0gICAgdHJhbnNmb3JtTWF0cml4ID0KLSAgICAgICAgUmVuZGVyZXJDb21tb24ubXVs
dGlwbHlNYXRyaWNlcyh0cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9uLnZlcnRpY2FsRmxp
cE1hdHJpeCgpKTsKLQotICAgIC8vIEJpbmQgb3VyIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5n
bEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVySWQpOwot
ICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xCaW5kRnJhbWVidWZmZXIiKTsKLQotICAg
IGlmIChmcmFtZUJ1ZmZlcldpZHRoICE9IHN0cmlkZSAvIDQgfHwgZnJhbWVCdWZmZXJIZWlnaHQg
IT0gdG90YWxfaGVpZ2h0KSB7Ci0gICAgICBmcmFtZUJ1ZmZlcldpZHRoID0gc3RyaWRlIC8gNDsK
LSAgICAgIGZyYW1lQnVmZmVySGVpZ2h0ID0gdG90YWxfaGVpZ2h0OwotICAgICAgLy8gKFJlKS1B
bGxvY2F0ZSB0ZXh0dXJlLgotICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xf
VEVYVFVSRTApOwotICAgICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVf
MkQsIGZyYW1lVGV4dHVyZUlkKTsKLSAgICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdM
X1RFWFRVUkVfMkQsIDAsIEdMRVMyMC5HTF9SR0JBLCBmcmFtZUJ1ZmZlcldpZHRoLAotICAgICAg
ICAgIGZyYW1lQnVmZmVySGVpZ2h0LCAwLCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lH
TkVEX0JZVEUsIG51bGwpOwotCi0gICAgICAvLyBDaGVjayB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBp
cyBpbiBhIGdvb2Qgc3RhdGUuCi0gICAgICBmaW5hbCBpbnQgc3RhdHVzID0gR0xFUzIwLmdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHTEVTMjAuR0xfRlJBTUVCVUZGRVIpOwotICAgICAgaWYgKHN0
YXR1cyAhPSBHTEVTMjAuR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgdGhyb3cg
bmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLCBzdGF0
dXM6ICIgKyBzdGF0dXMpOwotICAgICAgfQotICAgIH0KLQotICAgIEdMRVMyMC5nbEFjdGl2ZVRl
eHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVT
MTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMsIHNyY1RleHR1cmVJZCk7Ci0gICAgR0xFUzIw
LmdsVW5pZm9ybU1hdHJpeDRmdih0ZXhNYXRyaXhMb2MsIDEsIGZhbHNlLCB0cmFuc2Zvcm1NYXRy
aXgsIDApOwotCi0gICAgLy8gRHJhdyBZCi0gICAgR0xFUzIwLmdsVmlld3BvcnQoMCwgMCwgeV93
aWR0aCwgaGVpZ2h0KTsKLSAgICAvLyBNYXRyaXggKiAoMTswOzA7MCkgLyB3aWR0aC4gTm90ZSB0
aGF0IG9wZW5nbCB1c2VzIGNvbHVtbiBtYWpvciBvcmRlci4KLSAgICBHTEVTMjAuZ2xVbmlmb3Jt
MmYoeFVuaXRMb2MsIHRyYW5zZm9ybU1hdHJpeFswXSAvIHdpZHRoLCB0cmFuc2Zvcm1NYXRyaXhb
MV0gLyB3aWR0aCk7Ci0gICAgLy8gWSdVVjQ0NCB0byBSR0I4ODgsIHNlZQotICAgIC8vIGh0dHBz
Oi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1lVViNZLjI3VVY0NDRfdG9fUkdCODg4X2NvbnZlcnNp
b24uCi0gICAgLy8gV2UgdXNlIHRoZSBJVFUtUiBjb2VmZmljaWVudHMgZm9yIFUgYW5kIFYgKi8K
LSAgICBHTEVTMjAuZ2xVbmlmb3JtNGYoY29lZmZzTG9jLCAwLjI5OWYsIDAuNTg3ZiwgMC4xMTRm
LCAwLjBmKTsKLSAgICBHTEVTMjAuZ2xEcmF3QXJyYXlzKEdMRVMyMC5HTF9UUklBTkdMRV9TVFJJ
UCwgMCwgNCk7Ci0KLSAgICAvLyBEcmF3IFUKLSAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCBoZWln
aHQsIHV2X3dpZHRoLCB1dl9oZWlnaHQpOwotICAgIC8vIE1hdHJpeCAqICgxOzA7MDswKSAvICh3
aWR0aCAvIDIpLiBOb3RlIHRoYXQgb3BlbmdsIHVzZXMgY29sdW1uIG1ham9yIG9yZGVyLgotICAg
IEdMRVMyMC5nbFVuaWZvcm0yZigKLSAgICAgICAgeFVuaXRMb2MsIDIuMGYgKiB0cmFuc2Zvcm1N
YXRyaXhbMF0gLyB3aWR0aCwgMi4wZiAqIHRyYW5zZm9ybU1hdHJpeFsxXSAvIHdpZHRoKTsKLSAg
ICBHTEVTMjAuZ2xVbmlmb3JtNGYoY29lZmZzTG9jLCAtMC4xNjlmLCAtMC4zMzFmLCAwLjQ5OWYs
IDAuNWYpOwotICAgIEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RSSUFOR0xFX1NUUklQ
LCAwLCA0KTsKLQotICAgIC8vIERyYXcgVgotICAgIEdMRVMyMC5nbFZpZXdwb3J0KHN0cmlkZSAv
IDgsIGhlaWdodCwgdXZfd2lkdGgsIHV2X2hlaWdodCk7Ci0gICAgR0xFUzIwLmdsVW5pZm9ybTRm
KGNvZWZmc0xvYywgMC40OTlmLCAtMC40MThmLCAtMC4wODEzZiwgMC41Zik7Ci0gICAgR0xFUzIw
LmdsRHJhd0FycmF5cyhHTEVTMjAuR0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotCi0gICAgR0xF
UzIwLmdsUmVhZFBpeGVscygKLSAgICAgICAgMCwgMCwgZnJhbWVCdWZmZXJXaWR0aCwgZnJhbWVC
dWZmZXJIZWlnaHQsIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgYnVm
KTsKLQotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiWXV2Q29udmVydGVyLmNvbnZlcnQi
KTsKLQotICAgIC8vIFJlc3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJp
bmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIEdMRVMyMC5nbEJp
bmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwKTsKLQotICAgIC8vIFVuYmluZCB0ZXh0
dXJlLiBSZXBvcnRlZGx5IG5lZWRlZCBvbiBzb21lIGRldmljZXMgdG8gZ2V0Ci0gICAgLy8gdGhl
IHRleHR1cmUgdXBkYXRlZCBmcm9tIHRoZSBjYW1lcmEuCi0gICAgR0xFUzIwLmdsQmluZFRleHR1
cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCAwKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVh
ZCgpOwotICAgIHJlbGVhc2VkID0gdHJ1ZTsKLSAgICBzaGFkZXIucmVsZWFzZSgpOwotICAgIEdM
RVMyMC5nbERlbGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7ZnJhbWVUZXh0dXJlSWR9LCAwKTsK
LSAgICBHTEVTMjAuZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgbmV3IGludFtdIHtmcmFtZUJ1ZmZl
cklkfSwgMCk7Ci0gICAgZnJhbWVCdWZmZXJXaWR0aCA9IDA7Ci0gICAgZnJhbWVCdWZmZXJIZWln
aHQgPSAwOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvT1dORVJTCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9PV05FUlMJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2puaS9PV05FUlMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMSArMCwwIEBA
Ci1wZXItZmlsZSBhbmRyb2lkdmlkZW9jYXB0dXJlcio9bWFnamVkQHdlYnJ0Yy5vcmcKLXBlci1m
aWxlIGFuZHJvaWRtZWRpYWVuY29kZXIqPW1hZ2plZEB3ZWJydGMub3JnCi1wZXItZmlsZSBhbmRy
b2lkbWVkaWFkZWNvZGVyKj1tYWdqZWRAd2VicnRjLm9yZwotcGVyLWZpbGUgYW5kcm9pZG1lZGlh
Y29kZWNjb21tb24uaD1tYWdqZWRAd2VicnRjLm9yZwotcGVyLWZpbGUgYW5kcm9pZG1ldHJpY3Nf
am5pLmNjPXNha2FsQHdlYnJ0Yy5vcmcKLXBlci1maWxlIGFuZHJvaWR2aWRlb3RyYWNrc291cmNl
X2puaS5jYz1tYWdqZWRAd2VicnRjLm9yZwotcGVyLWZpbGUgYW5kcm9pZHZpZGVvdHJhY2tzb3Vy
Y2Vfam5pLmNjPXNha2FsQHdlYnJ0Yy5vcmcKLXBlci1maWxlIHN1cmZhY2V0ZXh0dXJlaGVscGVy
Kj1tYWdqZWRAd2VicnRjLm9yZwotcGVyLWZpbGUgbmF0aXZlX2hhbmRsZV9pbXBsKj1tYWdqZWRA
d2VicnRjLm9yZwotIyBWaWRlbyByZWxhdGVkIHBhcnRzIG9mIHBlZXJjb25uZWN0aW9uIG9ubHku
Ci1wZXItZmlsZSBwZWVyY29ubmVjdGlvbl9qbmkuY2M9bWFnamVkQHdlYnJ0Yy5vcmcKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2pu
aS9hbmRyb2lkbWVkaWFjb2RlY2NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFj
b2RlY2NvbW1vbi5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhY29kZWNjb21t
b24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpZm5kZWYgV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lETUVESUFDT0RFQ0NPTU1PTl9IXwot
I2RlZmluZSBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURNRURJQUNPREVDQ09NTU9OX0hfCi0K
LSNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUg
IndlYnJ0Yy9iYXNlL3RocmVhZC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
Y2xhc3NyZWZlcmVuY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5p
L2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9iYXNlL3RocmVhZC5oIgotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8v
IFVuY29tbWVudCB0aGlzIGRlZmluZSB0byBlbmFibGUgdmVyYm9zZSBsb2dnaW5nIGZvciBldmVy
eSBlbmNvZGVkL2RlY29kZWQKLS8vIHZpZGVvIGZyYW1lLgotLy8jZGVmaW5lIFRSQUNLX0JVRkZF
Ul9USU1JTkcKLQotI2RlZmluZSBUQUdfQ09NTU9OICJNZWRpYUNvZGVjVmlkZW8iCi0KLS8vIENv
bG9yIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IGVuY29kZXIgb3IgZGVjb2RlciAtIHNob3VsZCBpbmNs
dWRlIGFsbAotLy8gY29sb3JzIGZyb20gc3VwcG9ydGVkQ29sb3JMaXN0IGluIE1lZGlhQ29kZWNW
aWRlb0VuY29kZXIuamF2YSBhbmQKLS8vIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIuamF2YS4gU3Vw
cG9ydGVkIGNvbG9yIGZvcm1hdCBzZXQgaW4gZW5jb2RlcgotLy8gYW5kIGRlY29kZXIgY291bGQg
YmUgZGlmZmVyZW50LgotZW51bSBDT0xPUl9GT1JNQVRUWVBFIHsKLSAgQ09MT1JfRm9ybWF0WVVW
NDIwUGxhbmFyID0gMHgxMywKLSAgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciA9IDB4MTUs
Ci0gIENPTE9SX1FDT01fRm9ybWF0WVVWNDIwU2VtaVBsYW5hciA9IDB4N0ZBMzBDMDAsCi0gIC8v
IE5WMTIgY29sb3IgZm9ybWF0IHN1cHBvcnRlZCBieSBRQ09NIGNvZGVjLCBidXQgbm90IGRlY2xh
cmVkIGluIE1lZGlhQ29kZWMgLQotICAvLyBzZWUgL2hhcmR3YXJlL3Fjb20vbWVkaWEvbW0tY29y
ZS9pbmMvT01YX1FDT01FeHRucy5oCi0gIC8vIFRoaXMgZm9ybWF0IGlzIHByZXN1bWFibHkgc2lt
aWxhciB0byBDT0xPUl9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyLAotICAvLyBidXQgcmVxdWlyZXMg
c29tZSAoMTYsIDMyPykgYnl0ZSBhbGlnbm1lbnQuCi0gIENPTE9SX1FDT01fRk9STUFUWVZVNDIw
UGFja2VkU2VtaVBsYW5hcjMybTRrYSA9IDB4N0ZBMzBDMDEsCi0gIENPTE9SX1FDT01fRk9STUFU
WVZVNDIwUGFja2VkU2VtaVBsYW5hcjE2bTRrYSA9IDB4N0ZBMzBDMDIsCi0gIENPTE9SX1FDT01f
Rk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjY0eDMyVGlsZTJtOGthID0gMHg3RkEzMEMwMywK
LSAgQ09MT1JfUUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtID0gMHg3RkEzMEMw
NAotfTsKLQotLy8gQXJiaXRyYXJ5IGludGVydmFsIHRvIHBvbGwgdGhlIGNvZGVjIGZvciBuZXcg
b3V0cHV0cy4KLWVudW0geyBrTWVkaWFDb2RlY1BvbGxNcyA9IDEwIH07Ci0vLyBBcmJpdHJhcnkg
aW50ZXJ2YWwgdG8gcG9sbCBhdCB3aGVuIHRoZXJlIHNob3VsZCBiZSBubyBtb3JlIGZyYW1lcy4K
LWVudW0geyBrTWVkaWFDb2RlY1BvbGxOb0ZyYW1lc01zID0gMTAwIH07Ci0vLyBNZWRpYSBjb2Rl
YyBtYXhpbXVtIG91dHB1dCBidWZmZXIgcmVhZHkgdGltZW91dC4KLWVudW0geyBrTWVkaWFDb2Rl
Y1RpbWVvdXRNcyA9IDEwMDAgfTsKLS8vIEludGVydmFsIHRvIHByaW50IGNvZGVjIHN0YXRpc3Rp
Y3MgKGJpdHJhdGUsIGZwcywgZW5jb2RpbmcvZGVjb2RpbmcgdGltZSkuCi1lbnVtIHsga01lZGlh
Q29kZWNTdGF0aXN0aWNzSW50ZXJ2YWxNcyA9IDMwMDAgfTsKLS8vIE1heGltdW0gYW1vdW50IG9m
IHBlbmRpbmcgZnJhbWVzIGZvciBWUDggZGVjb2Rlci4KLWVudW0geyBrTWF4UGVuZGluZ0ZyYW1l
c1ZwOCA9IDEgfTsKLS8vIE1heGltdW0gYW1vdW50IG9mIHBlbmRpbmcgZnJhbWVzIGZvciBWUDkg
ZGVjb2Rlci4KLWVudW0geyBrTWF4UGVuZGluZ0ZyYW1lc1ZwOSA9IDEgfTsKLS8vIE1heGltdW0g
YW1vdW50IG9mIHBlbmRpbmcgZnJhbWVzIGZvciBILjI2NCBkZWNvZGVyLgotZW51bSB7IGtNYXhQ
ZW5kaW5nRnJhbWVzSDI2NCA9IDQgfTsKLS8vIE1heGltdW0gYW1vdW50IG9mIGRlY29kZWQgZnJh
bWVzIGZvciB3aGljaCBwZXItZnJhbWUgbG9nZ2luZyBpcyBlbmFibGVkLgotZW51bSB7IGtNYXhE
ZWNvZGVkTG9nRnJhbWVzID0gMTAgfTsKLS8vIE1heGltdW0gYW1vdW50IG9mIGVuY29kZWQgZnJh
bWVzIGZvciB3aGljaCBwZXItZnJhbWUgbG9nZ2luZyBpcyBlbmFibGVkLgotZW51bSB7IGtNYXhF
bmNvZGVkTG9nRnJhbWVzID0gMTAgfTsKLQotc3RhdGljIGlubGluZSB2b2lkIEFsbG93QmxvY2tp
bmdDYWxscygpIHsKLSAgcnRjOjpUaHJlYWQqIGN1cnJlbnRfdGhyZWFkID0gcnRjOjpUaHJlYWQ6
OkN1cnJlbnQoKTsKLSAgaWYgKGN1cnJlbnRfdGhyZWFkICE9IE5VTEwpCi0gICAgY3VycmVudF90
aHJlYWQtPlNldEFsbG93QmxvY2tpbmdDYWxscyh0cnVlKTsKLX0KLQotLy8gUmV0dXJuIHRoZSAo
c2luZ2xldG9uKSBKYXZhIEVudW0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gfGluZGV4fDsKLS8v
IHxzdGF0ZV9jbGFzc19mcmFnbWVudHwgaXMgc29tZXRoaW5nIGxpa2UgIk1lZGlhU291cmNlJFN0
YXRlIi4KLXN0YXRpYyBpbmxpbmUgam9iamVjdCBKYXZhRW51bUZyb21JbmRleEFuZENsYXNzTmFt
ZSgKLSAgICBKTklFbnYqIGpuaSwgY29uc3Qgc3RkOjpzdHJpbmcmIHN0YXRlX2NsYXNzX2ZyYWdt
ZW50LCBpbnQgaW5kZXgpIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgc3RhdGVfY2xhc3MgPSAib3Jn
L3dlYnJ0Yy8iICsgc3RhdGVfY2xhc3NfZnJhZ21lbnQ7Ci0gIHJldHVybiBKYXZhRW51bUZyb21J
bmRleChqbmksIEZpbmRDbGFzcyhqbmksIHN0YXRlX2NsYXNzLmNfc3RyKCkpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGVfY2xhc3MsIGluZGV4KTsKLX0KLQotLy8gQ2hlY2tzIGZv
ciBhbnkgSmF2YSBleGNlcHRpb24sIHByaW50cyBzdGFjayBiYWNrdHJhY2UgYW5kIGNsZWFycwot
Ly8gY3VycmVudGx5IHRocm93biBleGNlcHRpb24uCi1zdGF0aWMgaW5saW5lIGJvb2wgQ2hlY2tF
eGNlcHRpb24oSk5JRW52KiBqbmkpIHsKLSAgaWYgKGpuaS0+RXhjZXB0aW9uQ2hlY2soKSkgewot
ICAgIExPR19UQUcocnRjOjpMU19FUlJPUiwgVEFHX0NPTU1PTikgPDwgIkphdmEgSk5JIGV4Y2Vw
dGlvbi4iOwotICAgIGpuaS0+RXhjZXB0aW9uRGVzY3JpYmUoKTsKLSAgICBqbmktPkV4Y2VwdGlv
bkNsZWFyKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi19
ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQotCi0jZW5kaWYgIC8vIFdFQlJUQ19BUElfSkFWQV9K
TklfQU5EUk9JRE1FRElBQ09ERUNDT01NT05fSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFkZWNvZGVy
X2puaS5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZGVjb2Rlcl9qbmkuY2MJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFkZWNvZGVyX2puaS5jYwkobm9uZXhpc3RlbnQp
CkBAIC0xLDk4OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLS8vIE5PVElDRTog
YW5kcm9pZG1lZGlhZGVjb2Rlcl9qbmkuaCBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQotLy8gYW5k
cm9pZG1lZGlhY29kZWNjb21tb24uaCB0byBhdm9pZCBidWlsZCBlcnJvcnMuCi0jaW5jbHVkZSAi
d2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFkZWNvZGVyX2puaS5oIgotCi0jaW5j
bHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L2NvbnZlcnQuaCIKLSNpbmNs
dWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvY29udmVydF9mcm9tLmgiCi0j
aW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L3ZpZGVvX2NvbW1vbi5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhY29kZWNjb21t
b24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9s
ZGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFuZGxlX2lt
cGwuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL3N1cmZhY2V0ZXh0dXJlaGVs
cGVyX2puaS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9sb2dnaW5nLmgiCi0jaW5j
bHVkZSAid2VicnRjL2Jhc2Uvc2NvcGVkX3JlZl9wdHIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFz
ZS90aHJlYWQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aW1ldXRpbHMuaCIKLSNpbmNsdWRl
ICJ3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9vbC5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy9pbmNsdWRlL3ZpZGVvX2NvZGVjX2ludGVy
ZmFjZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZS9sb2djYXRf
dHJhY2VfY29udGV4dC5oIgotCi11c2luZyBydGM6OkJpbmQ7Ci11c2luZyBydGM6OlRocmVhZDsK
LXVzaW5nIHJ0Yzo6VGhyZWFkTWFuYWdlcjsKLQotdXNpbmcgd2VicnRjOjpDb2RlY1NwZWNpZmlj
SW5mbzsKLXVzaW5nIHdlYnJ0Yzo6RGVjb2RlZEltYWdlQ2FsbGJhY2s7Ci11c2luZyB3ZWJydGM6
OkVuY29kZWRJbWFnZTsKLXVzaW5nIHdlYnJ0Yzo6VmlkZW9GcmFtZTsKLXVzaW5nIHdlYnJ0Yzo6
UlRQRnJhZ21lbnRhdGlvbkhlYWRlcjsKLXVzaW5nIHdlYnJ0Yzo6VmlkZW9Db2RlYzsKLXVzaW5n
IHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGU7Ci11c2luZyB3ZWJydGM6OmtWaWRlb0NvZGVjSDI2NDsK
LXVzaW5nIHdlYnJ0Yzo6a1ZpZGVvQ29kZWNWUDg7Ci11c2luZyB3ZWJydGM6OmtWaWRlb0NvZGVj
VlA5OwotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIExvZ2dpbmcgbWFjcm9zLgotI2Rl
ZmluZSBUQUdfREVDT0RFUiAiTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciIKLSNpZmRlZiBUUkFDS19C
VUZGRVJfVElNSU5HCi0jZGVmaW5lIEFMT0dWKC4uLikKLSAgX19hbmRyb2lkX2xvZ19wcmludChB
TkRST0lEX0xPR19WRVJCT1NFLCBUQUdfREVDT0RFUiwgX19WQV9BUkdTX18pCi0jZWxzZQotI2Rl
ZmluZSBBTE9HViguLi4pCi0jZW5kaWYKLSNkZWZpbmUgQUxPR0QgTE9HX1RBRyhydGM6OkxTX0lO
Rk8sIFRBR19ERUNPREVSKQotI2RlZmluZSBBTE9HVyBMT0dfVEFHKHJ0Yzo6TFNfV0FSTklORywg
VEFHX0RFQ09ERVIpCi0jZGVmaW5lIEFMT0dFIExPR19UQUcocnRjOjpMU19FUlJPUiwgVEFHX0RF
Q09ERVIpCi0KLWVudW0geyBrTWF4V2FybmluZ0xvZ0ZyYW1lcyA9IDIgfTsKLQotY2xhc3MgTWVk
aWFDb2RlY1ZpZGVvRGVjb2RlciA6IHB1YmxpYyB3ZWJydGM6OlZpZGVvRGVjb2RlciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgcnRjOjpNZXNzYWdlSGFuZGxlciB7Ci0g
cHVibGljOgotICBleHBsaWNpdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyKAotICAgICAgSk5JRW52
KiBqbmksIFZpZGVvQ29kZWNUeXBlIGNvZGVjVHlwZSwgam9iamVjdCByZW5kZXJfZWdsX2NvbnRl
eHQpOwotICB2aXJ0dWFsIH5NZWRpYUNvZGVjVmlkZW9EZWNvZGVyKCk7Ci0KLSAgaW50MzJfdCBJ
bml0RGVjb2RlKGNvbnN0IFZpZGVvQ29kZWMqIGNvZGVjU2V0dGluZ3MsIGludDMyX3QgbnVtYmVy
T2ZDb3JlcykKLSAgICAgIG92ZXJyaWRlOwotCi0gIGludDMyX3QgRGVjb2RlKAotICAgICAgY29u
c3QgRW5jb2RlZEltYWdlJiBpbnB1dEltYWdlLCBib29sIG1pc3NpbmdGcmFtZXMsCi0gICAgICBj
b25zdCBSVFBGcmFnbWVudGF0aW9uSGVhZGVyKiBmcmFnbWVudGF0aW9uLAotICAgICAgY29uc3Qg
Q29kZWNTcGVjaWZpY0luZm8qIGNvZGVjU3BlY2lmaWNJbmZvID0gTlVMTCwKLSAgICAgIGludDY0
X3QgcmVuZGVyVGltZU1zID0gLTEpIG92ZXJyaWRlOwotCi0gIGludDMyX3QgUmVnaXN0ZXJEZWNv
ZGVDb21wbGV0ZUNhbGxiYWNrKERlY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFjaykKLSAgICAg
IG92ZXJyaWRlOwotCi0gIGludDMyX3QgUmVsZWFzZSgpIG92ZXJyaWRlOwotCi0gIGJvb2wgUHJl
ZmVyc0xhdGVEZWNvZGluZygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAv
LyBydGM6Ok1lc3NhZ2VIYW5kbGVyIGltcGxlbWVudGF0aW9uLgotICB2b2lkIE9uTWVzc2FnZShy
dGM6Ok1lc3NhZ2UqIG1zZykgb3ZlcnJpZGU7Ci0KLSAgY29uc3QgY2hhciogSW1wbGVtZW50YXRp
b25OYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICAvLyBDSEVDSy1mYWlsIGlm
IG5vdCBydW5uaW5nIG9uIHxjb2RlY190aHJlYWRffC4KLSAgdm9pZCBDaGVja09uQ29kZWNUaHJl
YWQoKTsKLQotICBpbnQzMl90IEluaXREZWNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0gIGludDMyX3Qg
UmVzZXREZWNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0gIGludDMyX3QgUmVsZWFzZU9uQ29kZWNUaHJl
YWQoKTsKLSAgaW50MzJfdCBEZWNvZGVPbkNvZGVjVGhyZWFkKGNvbnN0IEVuY29kZWRJbWFnZSYg
aW5wdXRJbWFnZSk7Ci0gIC8vIERlbGl2ZXIgYW55IG91dHB1dHMgcGVuZGluZyBpbiB0aGUgTWVk
aWFDb2RlYyB0byBvdXIgfGNhbGxiYWNrX3wgYW5kIHJldHVybgotICAvLyB0cnVlIG9uIHN1Y2Nl
c3MuCi0gIGJvb2wgRGVsaXZlclBlbmRpbmdPdXRwdXRzKEpOSUVudiogam5pLCBpbnQgZGVxdWV1
ZV90aW1lb3V0X3VzKTsKLSAgaW50MzJfdCBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsK
LSAgdm9pZCBFbmFibGVGcmFtZUxvZ09uV2FybmluZygpOwotICB2b2lkIFJlc2V0VmFyaWFibGVz
KCk7Ci0KLSAgLy8gVHlwZSBvZiB2aWRlbyBjb2RlYy4KLSAgVmlkZW9Db2RlY1R5cGUgY29kZWNU
eXBlXzsKLQotICAvLyBSZW5kZXIgRUdMIGNvbnRleHQgLSBvd25lZCBieSBmYWN0b3J5LCBzaG91
bGQgbm90IGJlIGFsbG9jYXRlZC9kZXN0cm95ZWQKLSAgLy8gYnkgVmlkZW9EZWNvZGVyLgotICBq
b2JqZWN0IHJlbmRlcl9lZ2xfY29udGV4dF87Ci0KLSAgYm9vbCBrZXlfZnJhbWVfcmVxdWlyZWRf
OwotICBib29sIGluaXRlZF87Ci0gIGJvb2wgc3dfZmFsbGJhY2tfcmVxdWlyZWRfOwotICBib29s
IHVzZV9zdXJmYWNlXzsKLSAgVmlkZW9Db2RlYyBjb2RlY187Ci0gIHdlYnJ0Yzo6STQyMEJ1ZmZl
clBvb2wgZGVjb2RlZF9mcmFtZV9wb29sXzsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFN1cmZhY2VU
ZXh0dXJlSGVscGVyPiBzdXJmYWNlX3RleHR1cmVfaGVscGVyXzsKLSAgRGVjb2RlZEltYWdlQ2Fs
bGJhY2sqIGNhbGxiYWNrXzsKLSAgaW50IGZyYW1lc19yZWNlaXZlZF87ICAvLyBOdW1iZXIgb2Yg
ZnJhbWVzIHJlY2VpdmVkIGJ5IGRlY29kZXIuCi0gIGludCBmcmFtZXNfZGVjb2RlZF87ICAvLyBO
dW1iZXIgb2YgZnJhbWVzIGRlY29kZWQgYnkgZGVjb2Rlci4KLSAgLy8gTnVtYmVyIG9mIGRlY29k
ZWQgZnJhbWVzIGZvciB3aGljaCBsb2cgaW5mb3JtYXRpb24gaXMgZGlzcGxheWVkLgotICBpbnQg
ZnJhbWVzX2RlY29kZWRfbG9nZ2VkXzsKLSAgaW50NjRfdCBzdGFydF90aW1lX21zXzsgIC8vIFN0
YXJ0IHRpbWUgZm9yIHN0YXRpc3RpY3MuCi0gIGludCBjdXJyZW50X2ZyYW1lc187ICAvLyBOdW1i
ZXIgb2YgZnJhbWVzIGluIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgaW50ZXJ2YWwuCi0gIGludCBj
dXJyZW50X2J5dGVzXzsgIC8vIEVuY29kZWQgYnl0ZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGlzdGlj
cyBpbnRlcnZhbC4KLSAgaW50IGN1cnJlbnRfZGVjb2RpbmdfdGltZV9tc187ICAvLyBPdmVyYWxs
IGRlY29kaW5nIHRpbWUgaW4gdGhlIGN1cnJlbnQgc2Vjb25kCi0gIGludCBjdXJyZW50X2RlbGF5
X3RpbWVfbXNfOyAgLy8gT3ZlcmFsbCBkZWxheSB0aW1lIGluIHRoZSBjdXJyZW50IHNlY29uZC4K
LSAgdWludDMyX3QgbWF4X3BlbmRpbmdfZnJhbWVzXzsgIC8vIE1heGltdW0gbnVtYmVyIG9mIHBl
bmRpbmcgaW5wdXQgZnJhbWVzLgotCi0gIC8vIFN0YXRlIHRoYXQgaXMgY29uc3RhbnQgZm9yIHRo
ZSBsaWZldGltZSBvZiB0aGlzIG9iamVjdCBvbmNlIHRoZSBjdG9yCi0gIC8vIHJldHVybnMuCi0g
IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+Ci0gICAgICBjb2RlY190aHJlYWRfOyAgLy8gVGhyZWFk
IG9uIHdoaWNoIHRvIG9wZXJhdGUgTWVkaWFDb2RlYy4KLSAgU2NvcGVkR2xvYmFsUmVmPGpjbGFz
cz4gal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXzsKLSAgU2NvcGVkR2xvYmFsUmVm
PGpvYmplY3Q+IGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl87Ci0gIGptZXRob2RJRCBqX2lu
aXRfZGVjb2RlX21ldGhvZF87Ci0gIGptZXRob2RJRCBqX3Jlc2V0X21ldGhvZF87Ci0gIGptZXRo
b2RJRCBqX3JlbGVhc2VfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfZGVxdWV1ZV9pbnB1dF9idWZm
ZXJfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfcXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF87Ci0g
IGptZXRob2RJRCBqX2RlcXVldWVfYnl0ZV9idWZmZXJfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpf
ZGVxdWV1ZV90ZXh0dXJlX2J1ZmZlcl9tZXRob2RfOwotICBqbWV0aG9kSUQgal9yZXR1cm5fZGVj
b2RlZF9ieXRlX2J1ZmZlcl9tZXRob2RfOwotICAvLyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIGZp
ZWxkcy4KLSAgamZpZWxkSUQgal9pbnB1dF9idWZmZXJzX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9v
dXRwdXRfYnVmZmVyc19maWVsZF87Ci0gIGpmaWVsZElEIGpfY29sb3JfZm9ybWF0X2ZpZWxkXzsK
LSAgamZpZWxkSUQgal93aWR0aF9maWVsZF87Ci0gIGpmaWVsZElEIGpfaGVpZ2h0X2ZpZWxkXzsK
LSAgamZpZWxkSUQgal9zdHJpZGVfZmllbGRfOwotICBqZmllbGRJRCBqX3NsaWNlX2hlaWdodF9m
aWVsZF87Ci0gIC8vIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIuRGVjb2RlZFRleHR1cmVCdWZmZXIg
ZmllbGRzLgotICBqZmllbGRJRCBqX3RleHR1cmVfaWRfZmllbGRfOwotICBqZmllbGRJRCBqX3Ry
YW5zZm9ybV9tYXRyaXhfZmllbGRfOwotICBqZmllbGRJRCBqX3RleHR1cmVfcHJlc2VudGF0aW9u
X3RpbWVzdGFtcF9tc19maWVsZF87Ci0gIGpmaWVsZElEIGpfdGV4dHVyZV90aW1lc3RhbXBfbXNf
ZmllbGRfOwotICBqZmllbGRJRCBqX3RleHR1cmVfbnRwX3RpbWVzdGFtcF9tc19maWVsZF87Ci0g
IGpmaWVsZElEIGpfdGV4dHVyZV9kZWNvZGVfdGltZV9tc19maWVsZF87Ci0gIGpmaWVsZElEIGpf
dGV4dHVyZV9mcmFtZV9kZWxheV9tc19maWVsZF87Ci0gIC8vIE1lZGlhQ29kZWNWaWRlb0RlY29k
ZXIuRGVjb2RlZE91dHB1dEJ1ZmZlciBmaWVsZHMuCi0gIGpmaWVsZElEIGpfaW5mb19pbmRleF9m
aWVsZF87Ci0gIGpmaWVsZElEIGpfaW5mb19vZmZzZXRfZmllbGRfOwotICBqZmllbGRJRCBqX2lu
Zm9fc2l6ZV9maWVsZF87Ci0gIGpmaWVsZElEIGpfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF9tc19m
aWVsZF87Ci0gIGpmaWVsZElEIGpfdGltZXN0YW1wX21zX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9u
dHBfdGltZXN0YW1wX21zX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9ieXRlX2J1ZmZlcl9kZWNvZGVf
dGltZV9tc19maWVsZF87Ci0KLSAgLy8gR2xvYmFsIHJlZmVyZW5jZXM7IG11c3QgYmUgZGVsZXRl
ZCBpbiBSZWxlYXNlKCkuCi0gIHN0ZDo6dmVjdG9yPGpvYmplY3Q+IGlucHV0X2J1ZmZlcnNfOwot
fTsKLQotTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6TWVkaWFDb2RlY1ZpZGVvRGVjb2RlcigKLSAg
ICBKTklFbnYqIGpuaSwgVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBqb2JqZWN0IHJlbmRlcl9l
Z2xfY29udGV4dCkgOgotICAgIGNvZGVjVHlwZV8oY29kZWNUeXBlKSwKLSAgICByZW5kZXJfZWds
X2NvbnRleHRfKHJlbmRlcl9lZ2xfY29udGV4dCksCi0gICAga2V5X2ZyYW1lX3JlcXVpcmVkXyh0
cnVlKSwKLSAgICBpbml0ZWRfKGZhbHNlKSwKLSAgICBzd19mYWxsYmFja19yZXF1aXJlZF8oZmFs
c2UpLAotICAgIGNvZGVjX3RocmVhZF8obmV3IFRocmVhZCgpKSwKLSAgICBqX21lZGlhX2NvZGVj
X3ZpZGVvX2RlY29kZXJfY2xhc3NfKAotICAgICAgICBqbmksCi0gICAgICAgIEZpbmRDbGFzcyhq
bmksICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIiKSksCi0gICAgICAgICAgal9t
ZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXygKLSAgICAgICAgICAgICAgam5pLAotICAgICAgICAg
ICAgICBqbmktPk5ld09iamVjdCgqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywK
LSAgICAgICAgICAgICAgICAgICBHZXRNZXRob2RJRChqbmksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICI8aW5pdD4iLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIigpViIpKSkgewotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShq
bmkpOwotICBjb2RlY190aHJlYWRfLT5TZXROYW1lKCJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIiwg
TlVMTCk7Ci0gIFJUQ19DSEVDSyhjb2RlY190aHJlYWRfLT5TdGFydCgpKSA8PCAiRmFpbGVkIHRv
IHN0YXJ0IE1lZGlhQ29kZWNWaWRlb0RlY29kZXIiOwotCi0gIGpfaW5pdF9kZWNvZGVfbWV0aG9k
XyA9IEdldE1ldGhvZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVy
X2NsYXNzXywgImluaXREZWNvZGUiLAotICAgICAgIihMb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlk
ZW9EZWNvZGVyJFZpZGVvQ29kZWNUeXBlOyIKLSAgICAgICJJSUxvcmcvd2VicnRjL1N1cmZhY2VU
ZXh0dXJlSGVscGVyOylaIik7Ci0gIGpfcmVzZXRfbWV0aG9kXyA9Ci0gICAgICBHZXRNZXRob2RJ
RChqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAicmVzZXQiLCAiKElJ
KVYiKTsKLSAgal9yZWxlYXNlX21ldGhvZF8gPQotICAgICAgR2V0TWV0aG9kSUQoam5pLCAqal9t
ZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywgInJlbGVhc2UiLCAiKClWIik7Ci0gIGpf
ZGVxdWV1ZV9pbnB1dF9idWZmZXJfbWV0aG9kXyA9IEdldE1ldGhvZElEKAotICAgICAgam5pLCAq
al9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywgImRlcXVldWVJbnB1dEJ1ZmZlciIs
ICIoKUkiKTsKLSAgal9xdWV1ZV9pbnB1dF9idWZmZXJfbWV0aG9kXyA9IEdldE1ldGhvZElEKAot
ICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywgInF1ZXVlSW5w
dXRCdWZmZXIiLCAiKElJSkpKKVoiKTsKLSAgal9kZXF1ZXVlX2J5dGVfYnVmZmVyX21ldGhvZF8g
PSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9j
bGFzc18sICJkZXF1ZXVlT3V0cHV0QnVmZmVyIiwKLSAgICAgICIoSSlMb3JnL3dlYnJ0Yy9NZWRp
YUNvZGVjVmlkZW9EZWNvZGVyJERlY29kZWRPdXRwdXRCdWZmZXI7Iik7Ci0gIGpfZGVxdWV1ZV90
ZXh0dXJlX2J1ZmZlcl9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAgICBqbmksICpqX21lZGlh
X2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAiZGVxdWV1ZVRleHR1cmVCdWZmZXIiLAotICAg
ICAgIihJKUxvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIkRGVjb2RlZFRleHR1cmVC
dWZmZXI7Iik7Ci0gIGpfcmV0dXJuX2RlY29kZWRfYnl0ZV9idWZmZXJfbWV0aG9kXyA9Ci0gICAg
ICBHZXRNZXRob2RJRChqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLAot
ICAgICAgICAgICAgICAgICAgInJldHVybkRlY29kZWRPdXRwdXRCdWZmZXIiLCAiKEkpViIpOwot
Ci0gIGpfaW5wdXRfYnVmZmVyc19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCAqal9t
ZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywKLSAgICAgICJpbnB1dEJ1ZmZlcnMiLCAi
W0xqYXZhL25pby9CeXRlQnVmZmVyOyIpOwotICBqX291dHB1dF9idWZmZXJzX2ZpZWxkXyA9IEdl
dEZpZWxkSUQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3Nf
LAotICAgICAgIm91dHB1dEJ1ZmZlcnMiLCAiW0xqYXZhL25pby9CeXRlQnVmZmVyOyIpOwotICBq
X2NvbG9yX2Zvcm1hdF9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCAqal9tZWRpYV9j
b2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywgImNvbG9yRm9ybWF0IiwgIkkiKTsKLSAgal93aWR0
aF9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19k
ZWNvZGVyX2NsYXNzXywgIndpZHRoIiwgIkkiKTsKLSAgal9oZWlnaHRfZmllbGRfID0gR2V0Rmll
bGRJRCgKLSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJo
ZWlnaHQiLCAiSSIpOwotICBqX3N0cmlkZV9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5p
LCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywgInN0cmlkZSIsICJJIik7Ci0g
IGpfc2xpY2VfaGVpZ2h0X2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksICpqX21lZGlh
X2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAic2xpY2VIZWlnaHQiLCAiSSIpOwotCi0gIGpj
bGFzcyBqX2RlY29kZWRfdGV4dHVyZV9idWZmZXJfY2xhc3MgPSBGaW5kQ2xhc3Moam5pLAotICAg
ICAgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciREZWNvZGVkVGV4dHVyZUJ1ZmZl
ciIpOwotICBqX3RleHR1cmVfaWRfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9k
ZWNvZGVkX3RleHR1cmVfYnVmZmVyX2NsYXNzLCAidGV4dHVyZUlEIiwgIkkiKTsKLSAgal90cmFu
c2Zvcm1fbWF0cml4X2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF90
ZXh0dXJlX2J1ZmZlcl9jbGFzcywgInRyYW5zZm9ybU1hdHJpeCIsICJbRiIpOwotICBqX3RleHR1
cmVfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF9tc19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAg
am5pLCBqX2RlY29kZWRfdGV4dHVyZV9idWZmZXJfY2xhc3MsICJwcmVzZW50YXRpb25UaW1lU3Rh
bXBNcyIsICJKIik7Ci0gIGpfdGV4dHVyZV90aW1lc3RhbXBfbXNfZmllbGRfID0gR2V0RmllbGRJ
RCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX3RleHR1cmVfYnVmZmVyX2NsYXNzLCAidGltZVN0YW1w
TXMiLCAiSiIpOwotICBqX3RleHR1cmVfbnRwX3RpbWVzdGFtcF9tc19maWVsZF8gPSBHZXRGaWVs
ZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfdGV4dHVyZV9idWZmZXJfY2xhc3MsICJudHBUaW1l
U3RhbXBNcyIsICJKIik7Ci0gIGpfdGV4dHVyZV9kZWNvZGVfdGltZV9tc19maWVsZF8gPSBHZXRG
aWVsZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfdGV4dHVyZV9idWZmZXJfY2xhc3MsICJkZWNv
ZGVUaW1lTXMiLCAiSiIpOwotICBqX3RleHR1cmVfZnJhbWVfZGVsYXlfbXNfZmllbGRfID0gR2V0
RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX3RleHR1cmVfYnVmZmVyX2NsYXNzLCAiZnJh
bWVEZWxheU1zIiwgIkoiKTsKLQotICBqY2xhc3Mgal9kZWNvZGVkX291dHB1dF9idWZmZXJfY2xh
c3MgPSBGaW5kQ2xhc3Moam5pLAotICAgICAgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVj
b2RlciREZWNvZGVkT3V0cHV0QnVmZmVyIik7Ci0gIGpfaW5mb19pbmRleF9maWVsZF8gPSBHZXRG
aWVsZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfb3V0cHV0X2J1ZmZlcl9jbGFzcywgImluZGV4
IiwgIkkiKTsKLSAgal9pbmZvX29mZnNldF9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5p
LCBqX2RlY29kZWRfb3V0cHV0X2J1ZmZlcl9jbGFzcywgIm9mZnNldCIsICJJIik7Ci0gIGpfaW5m
b19zaXplX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF9vdXRwdXRf
YnVmZmVyX2NsYXNzLCAic2l6ZSIsICJJIik7Ci0gIGpfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF9t
c19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfb3V0cHV0X2J1ZmZl
cl9jbGFzcywgInByZXNlbnRhdGlvblRpbWVTdGFtcE1zIiwgIkoiKTsKLSAgal90aW1lc3RhbXBf
bXNfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX291dHB1dF9idWZm
ZXJfY2xhc3MsICJ0aW1lU3RhbXBNcyIsICJKIik7Ci0gIGpfbnRwX3RpbWVzdGFtcF9tc19maWVs
ZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfb3V0cHV0X2J1ZmZlcl9jbGFz
cywgIm50cFRpbWVTdGFtcE1zIiwgIkoiKTsKLSAgal9ieXRlX2J1ZmZlcl9kZWNvZGVfdGltZV9t
c19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfb3V0cHV0X2J1ZmZl
cl9jbGFzcywgImRlY29kZVRpbWVNcyIsICJKIik7Ci0KLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkg
PDwgIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIgY3RvciBmYWlsZWQiOwotICB1c2Vfc3VyZmFjZV8g
PSAocmVuZGVyX2VnbF9jb250ZXh0XyAhPSBOVUxMKTsKLSAgQUxPR0QgPDwgIk1lZGlhQ29kZWNW
aWRlb0RlY29kZXIgY3Rvci4gVXNlIHN1cmZhY2U6ICIgPDwgdXNlX3N1cmZhY2VfOwotICBtZW1z
ZXQoJmNvZGVjXywgMCwgc2l6ZW9mKGNvZGVjXykpOwotICBBbGxvd0Jsb2NraW5nQ2FsbHMoKTsK
LX0KLQotTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6fk1lZGlhQ29kZWNWaWRlb0RlY29kZXIoKSB7
Ci0gIC8vIENhbGwgUmVsZWFzZSgpIHRvIGVuc3VyZSBubyBtb3JlIGNhbGxiYWNrcyB0byB1cyBh
ZnRlciB3ZSBhcmUgZGVsZXRlZC4KLSAgUmVsZWFzZSgpOwotfQotCi1pbnQzMl90IE1lZGlhQ29k
ZWNWaWRlb0RlY29kZXI6OkluaXREZWNvZGUoY29uc3QgVmlkZW9Db2RlYyogaW5zdCwKLSAgICBp
bnQzMl90IG51bWJlck9mQ29yZXMpIHsKLSAgQUxPR0QgPDwgIkluaXREZWNvZGUuIjsKLSAgaWYg
KGluc3QgPT0gTlVMTCkgewotICAgIEFMT0dFIDw8ICJOVUxMIFZpZGVvQ29kZWMgaW5zdGFuY2Ui
OwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJSX1BBUkFNRVRFUjsKLSAgfQotICAv
LyBGYWN0b3J5IHNob3VsZCBndWFyZCBhZ2FpbnN0IG90aGVyIGNvZGVjcyBiZWluZyB1c2VkIHdp
dGggdXMuCi0gIFJUQ19DSEVDSyhpbnN0LT5jb2RlY1R5cGUgPT0gY29kZWNUeXBlXykKLSAgICAg
IDw8ICJVbnN1cHBvcnRlZCBjb2RlYyAiIDw8IGluc3QtPmNvZGVjVHlwZSA8PCAiIGZvciAiIDw8
IGNvZGVjVHlwZV87Ci0KLSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVkXykgewotICAgIEFMT0dF
IDw8ICJJbml0RGVjb2RlKCkgLSBmYWxsYmFjayB0byBTVyBkZWNvZGVyIjsKLSAgICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX09LOwotICB9Ci0gIC8vIFNhdmUgVmlkZW9Db2RlYyBpbnN0YW5j
ZSBmb3IgbGF0ZXIuCi0gIGlmICgmY29kZWNfICE9IGluc3QpIHsKLSAgICBjb2RlY18gPSAqaW5z
dDsKLSAgfQotICAvLyBJZiBtYXhGcmFtZXJhdGUgaXMgbm90IHNldCB0aGVuIGFzc3VtZSAzMCBm
cHMuCi0gIGNvZGVjXy5tYXhGcmFtZXJhdGUgPSAoY29kZWNfLm1heEZyYW1lcmF0ZSA+PSAxKSA/
IGNvZGVjXy5tYXhGcmFtZXJhdGUgOiAzMDsKLQotICAvLyBDYWxsIEphdmEgaW5pdC4KLSAgcmV0
dXJuIGNvZGVjX3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAgIFJUQ19GUk9NX0hFUkUs
Ci0gICAgICBCaW5kKCZNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpJbml0RGVjb2RlT25Db2RlY1Ro
cmVhZCwgdGhpcykpOwotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlc2V0VmFy
aWFibGVzKCkgewotICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLQotICBrZXlfZnJhbWVfcmVxdWly
ZWRfID0gdHJ1ZTsKLSAgZnJhbWVzX3JlY2VpdmVkXyA9IDA7Ci0gIGZyYW1lc19kZWNvZGVkXyA9
IDA7Ci0gIGZyYW1lc19kZWNvZGVkX2xvZ2dlZF8gPSBrTWF4RGVjb2RlZExvZ0ZyYW1lczsKLSAg
c3RhcnRfdGltZV9tc18gPSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgY3VycmVudF9mcmFtZXNfID0g
MDsKLSAgY3VycmVudF9ieXRlc18gPSAwOwotICBjdXJyZW50X2RlY29kaW5nX3RpbWVfbXNfID0g
MDsKLSAgY3VycmVudF9kZWxheV90aW1lX21zXyA9IDA7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2Rl
Y1ZpZGVvRGVjb2Rlcjo6SW5pdERlY29kZU9uQ29kZWNUaHJlYWQoKSB7Ci0gIENoZWNrT25Db2Rl
Y1RocmVhZCgpOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgp
OwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBBTE9HRCA8
PCAiSW5pdERlY29kZU9uQ29kZWNUaHJlYWQgVHlwZTogIiA8PCAoaW50KWNvZGVjVHlwZV8gPDwg
Ii4gIgotICAgICAgPDwgY29kZWNfLndpZHRoIDw8ICIgeCAiIDw8IGNvZGVjXy5oZWlnaHQgPDwg
Ii4gRnBzOiAiIDw8Ci0gICAgICAoaW50KWNvZGVjXy5tYXhGcmFtZXJhdGU7Ci0KLSAgLy8gUmVs
ZWFzZSBwcmV2aW91cyBjb2RlYyBmaXJzdCBpZiBpdCB3YXMgYWxsb2NhdGVkIGJlZm9yZS4KLSAg
aW50IHJldF92YWwgPSBSZWxlYXNlT25Db2RlY1RocmVhZCgpOwotICBpZiAocmV0X3ZhbCA8IDAp
IHsKLSAgICBBTE9HRSA8PCAiUmVsZWFzZSBmYWlsdXJlOiAiIDw8IHJldF92YWwgPDwgIiAtIGZh
bGxiYWNrIHRvIFNXIGNvZGVjIjsKLSAgICBzd19mYWxsYmFja19yZXF1aXJlZF8gPSB0cnVlOwot
ICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gIH0KLQotICBSZXNldFZhcmlh
YmxlcygpOwotCi0gIGlmICh1c2Vfc3VyZmFjZV8pIHsKLSAgICBzdXJmYWNlX3RleHR1cmVfaGVs
cGVyXyA9IFN1cmZhY2VUZXh0dXJlSGVscGVyOjpjcmVhdGUoCi0gICAgICAgIGpuaSwgIkRlY29k
ZXIgU3VyZmFjZVRleHR1cmVIZWxwZXIiLCByZW5kZXJfZWdsX2NvbnRleHRfKTsKLSAgICBpZiAo
IXN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfKSB7Ci0gICAgICBBTE9HRSA8PCAiQ291bGRuJ3QgY3Jl
YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMiOwotICAgICAg
c3dfZmFsbGJhY2tfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgICAgIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfRVJST1I7Ci0gICAgfQotICB9Ci0KLSAgam9iamVjdCBqX3ZpZGVvX2NvZGVjX2VudW0g
PSBKYXZhRW51bUZyb21JbmRleEFuZENsYXNzTmFtZSgKLSAgICAgIGpuaSwgIk1lZGlhQ29kZWNW
aWRlb0RlY29kZXIkVmlkZW9Db2RlY1R5cGUiLCBjb2RlY1R5cGVfKTsKLSAgYm9vbCBzdWNjZXNz
ID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZCgKLSAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2Rl
Y29kZXJfLAotICAgICAgal9pbml0X2RlY29kZV9tZXRob2RfLAotICAgICAgal92aWRlb19jb2Rl
Y19lbnVtLAotICAgICAgY29kZWNfLndpZHRoLAotICAgICAgY29kZWNfLmhlaWdodCwKLSAgICAg
IHVzZV9zdXJmYWNlXyA/IHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfLT5HZXRKYXZhU3VyZmFjZVRl
eHR1cmVIZWxwZXIoKQotICAgICAgICAgICAgICAgICAgIDogbnVsbHB0cik7Ci0KLSAgaWYgKENo
ZWNrRXhjZXB0aW9uKGpuaSkgfHwgIXN1Y2Nlc3MpIHsKLSAgICBBTE9HRSA8PCAiQ29kZWMgaW5p
dGlhbGl6YXRpb24gZXJyb3IgLSBmYWxsYmFjayB0byBTVyBjb2RlYy4iOwotICAgIHN3X2ZhbGxi
YWNrX3JlcXVpcmVkXyA9IHRydWU7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJP
UjsKLSAgfQotICBpbml0ZWRfID0gdHJ1ZTsKLQotICBzd2l0Y2ggKGNvZGVjVHlwZV8pIHsKLSAg
ICBjYXNlIGtWaWRlb0NvZGVjVlA4OgotICAgICAgbWF4X3BlbmRpbmdfZnJhbWVzXyA9IGtNYXhQ
ZW5kaW5nRnJhbWVzVnA4OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmlkZW9Db2RlY1ZQOToK
LSAgICAgIG1heF9wZW5kaW5nX2ZyYW1lc18gPSBrTWF4UGVuZGluZ0ZyYW1lc1ZwOTsKLSAgICAg
IGJyZWFrOwotICAgIGNhc2Uga1ZpZGVvQ29kZWNIMjY0OgotICAgICAgbWF4X3BlbmRpbmdfZnJh
bWVzXyA9IGtNYXhQZW5kaW5nRnJhbWVzSDI2NDsKLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICBtYXhfcGVuZGluZ19mcmFtZXNfID0gMDsKLSAgfQotICBBTE9HRCA8PCAiTWF4aW11
bSBhbW91bnQgb2YgcGVuZGluZyBmcmFtZXM6ICIgPDwgbWF4X3BlbmRpbmdfZnJhbWVzXzsKLQot
ICBqb2JqZWN0QXJyYXkgaW5wdXRfYnVmZmVycyA9IChqb2JqZWN0QXJyYXkpR2V0T2JqZWN0Rmll
bGQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLCBqX2lucHV0X2J1
ZmZlcnNfZmllbGRfKTsKLSAgc2l6ZV90IG51bV9pbnB1dF9idWZmZXJzID0gam5pLT5HZXRBcnJh
eUxlbmd0aChpbnB1dF9idWZmZXJzKTsKLSAgaW5wdXRfYnVmZmVyc18ucmVzaXplKG51bV9pbnB1
dF9idWZmZXJzKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1faW5wdXRfYnVmZmVyczsg
KytpKSB7Ci0gICAgaW5wdXRfYnVmZmVyc19baV0gPQotICAgICAgICBqbmktPk5ld0dsb2JhbFJl
ZihqbmktPkdldE9iamVjdEFycmF5RWxlbWVudChpbnB1dF9idWZmZXJzLCBpKSk7Ci0gICAgaWYg
KENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICAgIEFMT0dFIDw8ICJOZXdHbG9iYWxSZWYgZXJy
b3IgLSBmYWxsYmFjayB0byBTVyBjb2RlYy4iOwotICAgICAgc3dfZmFsbGJhY2tfcmVxdWlyZWRf
ID0gdHJ1ZTsKLSAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgfQot
ICB9Ci0KLSAgY29kZWNfdGhyZWFkXy0+UG9zdERlbGF5ZWQoUlRDX0ZST01fSEVSRSwga01lZGlh
Q29kZWNQb2xsTXMsIHRoaXMpOwotCi0gIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19
Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6UmVzZXREZWNvZGVPbkNvZGVjVGhy
ZWFkKCkgewotICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hD
dXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZf
ZnJhbWUoam5pKTsKLSAgQUxPR0QgPDwgIlJlc2V0RGVjb2RlT25Db2RlY1RocmVhZCBUeXBlOiAi
IDw8IChpbnQpY29kZWNUeXBlXyA8PCAiLiAiCi0gICAgICA8PCBjb2RlY18ud2lkdGggPDwgIiB4
ICIgPDwgY29kZWNfLmhlaWdodDsKLSAgQUxPR0QgPDwgIiAgRnJhbWVzIHJlY2VpdmVkOiAiIDw8
IGZyYW1lc19yZWNlaXZlZF8gPDwKLSAgICAgICIuIEZyYW1lcyBkZWNvZGVkOiAiIDw8IGZyYW1l
c19kZWNvZGVkXzsKLQotICBpbml0ZWRfID0gZmFsc2U7Ci0gIHJ0Yzo6TWVzc2FnZVF1ZXVlTWFu
YWdlcjo6Q2xlYXIodGhpcyk7Ci0gIFJlc2V0VmFyaWFibGVzKCk7Ci0KLSAgam5pLT5DYWxsVm9p
ZE1ldGhvZCgKLSAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLAotICAgICAgal9y
ZXNldF9tZXRob2RfLAotICAgICAgY29kZWNfLndpZHRoLAotICAgICAgY29kZWNfLmhlaWdodCk7
Ci0KLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8PCAiU29mdCByZXNl
dCBlcnJvciAtIGZhbGxiYWNrIHRvIFNXIGNvZGVjLiI7Ci0gICAgc3dfZmFsbGJhY2tfcmVxdWly
ZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0g
IGluaXRlZF8gPSB0cnVlOwotCi0gIGNvZGVjX3RocmVhZF8tPlBvc3REZWxheWVkKFJUQ19GUk9N
X0hFUkUsIGtNZWRpYUNvZGVjUG9sbE1zLCB0aGlzKTsKLQotICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX09LOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlbGVhc2Uo
KSB7Ci0gIEFMT0dEIDw8ICJEZWNvZGVyUmVsZWFzZSByZXF1ZXN0IjsKLSAgcmV0dXJuIGNvZGVj
X3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAgIFJUQ19GUk9NX0hFUkUsIEJpbmQoJk1l
ZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlbGVhc2VPbkNvZGVjVGhyZWFkLCB0aGlzKSk7Ci19Ci0K
LWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6UmVsZWFzZU9uQ29kZWNUaHJlYWQoKSB7
Ci0gIGlmICghaW5pdGVkXykgewotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0g
IH0KLSAgQ2hlY2tPbkNvZGVjVGhyZWFkKCk7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVu
dFRocmVhZElmTmVlZGVkKCk7Ci0gIEFMT0dEIDw8ICJEZWNvZGVyUmVsZWFzZU9uQ29kZWNUaHJl
YWQ6IEZyYW1lcyByZWNlaXZlZDogIiA8PAotICAgICAgZnJhbWVzX3JlY2VpdmVkXyA8PCAiLiBG
cmFtZXMgZGVjb2RlZDogIiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0gIFNjb3BlZExvY2FsUmVmRnJh
bWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5wdXRf
YnVmZmVyc18uc2l6ZSgpOyBpKyspIHsKLSAgICBqbmktPkRlbGV0ZUdsb2JhbFJlZihpbnB1dF9i
dWZmZXJzX1tpXSk7Ci0gIH0KLSAgaW5wdXRfYnVmZmVyc18uY2xlYXIoKTsKLSAgam5pLT5DYWxs
Vm9pZE1ldGhvZCgqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywgal9yZWxlYXNlX21ldGhv
ZF8pOwotICBzdXJmYWNlX3RleHR1cmVfaGVscGVyXyA9IG51bGxwdHI7Ci0gIGluaXRlZF8gPSBm
YWxzZTsKLSAgcnRjOjpNZXNzYWdlUXVldWVNYW5hZ2VyOjpDbGVhcih0aGlzKTsKLSAgaWYgKENo
ZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8PCAiRGVjb2RlciByZWxlYXNlIGV4Y2Vw
dGlvbiI7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgfQotICBBTE9H
RCA8PCAiRGVjb2RlclJlbGVhc2VPbkNvZGVjVGhyZWFkIGRvbmUiOwotICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX09LOwotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OkNoZWNr
T25Db2RlY1RocmVhZCgpIHsKLSAgUlRDX0NIRUNLKGNvZGVjX3RocmVhZF8uZ2V0KCkgPT0gVGhy
ZWFkTWFuYWdlcjo6SW5zdGFuY2UoKS0+Q3VycmVudFRocmVhZCgpKQotICAgICAgPDwgIlJ1bm5p
bmcgb24gd3JvbmcgdGhyZWFkISI7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6
RW5hYmxlRnJhbWVMb2dPbldhcm5pbmcoKSB7Ci0gIC8vIExvZyBuZXh0IDIgb3V0cHV0IGZyYW1l
cy4KLSAgZnJhbWVzX2RlY29kZWRfbG9nZ2VkXyA9IHN0ZDo6bWF4KAotICAgICAgZnJhbWVzX2Rl
Y29kZWRfbG9nZ2VkXywgZnJhbWVzX2RlY29kZWRfICsga01heFdhcm5pbmdMb2dGcmFtZXMpOwot
fQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OlByb2Nlc3NIV0Vycm9yT25Db2Rl
Y1RocmVhZCgpIHsKLSAgQ2hlY2tPbkNvZGVjVGhyZWFkKCk7Ci0gIGludCByZXRfdmFsID0gUmVs
ZWFzZU9uQ29kZWNUaHJlYWQoKTsKLSAgaWYgKHJldF92YWwgPCAwKSB7Ci0gICAgQUxPR0UgPDwg
IlByb2Nlc3NIV0Vycm9yOiBSZWxlYXNlIGZhaWx1cmUiOwotICB9Ci0gIGlmIChjb2RlY1R5cGVf
ID09IGtWaWRlb0NvZGVjSDI2NCkgewotICAgIC8vIEZvciBub3cgdGhlcmUgaXMgbm8gU1cgSC4y
NjQgd2hpY2ggY2FuIGJlIHVzZWQgYXMgZmFsbGJhY2sgY29kZWMuCi0gICAgLy8gU28gdHJ5IHRv
IHJlc3RhcnQgaHcgY29kZWMgZm9yIG5vdy4KLSAgICByZXRfdmFsID0gSW5pdERlY29kZU9uQ29k
ZWNUaHJlYWQoKTsKLSAgICBBTE9HRSA8PCAiUmVzZXQgSC4yNjQgY29kZWMgZG9uZS4gU3RhdHVz
OiAiIDw8IHJldF92YWw7Ci0gICAgaWYgKHJldF92YWwgPT0gV0VCUlRDX1ZJREVPX0NPREVDX09L
KSB7Ci0gICAgICAvLyBILjI2NCBjb2RlYyB3YXMgc3VjY2VzZnVsbHkgcmVzZXQgLSByZXR1cm4g
cmVndWxhciBlcnJvciBjb2RlLgotICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJP
UjsKLSAgICB9IGVsc2UgewotICAgICAgLy8gRmFpbCB0byByZXN0YXJ0IEguMjY0IGNvZGVjIC0g
cmV0dXJuIGVycm9yIGNvZGUgd2hpY2ggc2hvdWxkIHN0b3AgdGhlCi0gICAgICAvLyBjYWxsLgot
ICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRTsKLSAgICB9
Ci0gIH0gZWxzZSB7Ci0gICAgc3dfZmFsbGJhY2tfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgICBBTE9H
RSA8PCAiUmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRSI7Ci0gICAg
cmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRTsKLSAgfQotfQotCi1p
bnQzMl90IE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OkRlY29kZSgKLSAgICBjb25zdCBFbmNvZGVk
SW1hZ2UmIGlucHV0SW1hZ2UsCi0gICAgYm9vbCBtaXNzaW5nRnJhbWVzLAotICAgIGNvbnN0IFJU
UEZyYWdtZW50YXRpb25IZWFkZXIqIGZyYWdtZW50YXRpb24sCi0gICAgY29uc3QgQ29kZWNTcGVj
aWZpY0luZm8qIGNvZGVjU3BlY2lmaWNJbmZvLAotICAgIGludDY0X3QgcmVuZGVyVGltZU1zKSB7
Ci0gIGlmIChzd19mYWxsYmFja19yZXF1aXJlZF8pIHsKLSAgICBBTE9HRSA8PCAiRGVjb2RlKCkg
LSBmYWxsYmFjayB0byBTVyBjb2RlYyI7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19G
QUxMQkFDS19TT0ZUV0FSRTsKLSAgfQotICBpZiAoY2FsbGJhY2tfID09IE5VTEwpIHsKLSAgICBB
TE9HRSA8PCAiRGVjb2RlKCkgLSBjYWxsYmFja18gaXMgTlVMTCI7Ci0gICAgcmV0dXJuIFdFQlJU
Q19WSURFT19DT0RFQ19VTklOSVRJQUxJWkVEOwotICB9Ci0gIGlmIChpbnB1dEltYWdlLl9idWZm
ZXIgPT0gTlVMTCAmJiBpbnB1dEltYWdlLl9sZW5ndGggPiAwKSB7Ci0gICAgQUxPR0UgPDwgIkRl
Y29kZSgpIC0gaW5wdXRJbWFnZSBpcyBpbmNvcnJlY3QiOwotICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRVJSX1BBUkFNRVRFUjsKLSAgfQotICBpZiAoIWluaXRlZF8pIHsKLSAgICBBTE9H
RSA8PCAiRGVjb2RlKCkgLSBkZWNvZGVyIGlzIG5vdCBpbml0aWFsaXplZCI7Ci0gICAgcmV0dXJu
IFdFQlJUQ19WSURFT19DT0RFQ19VTklOSVRJQUxJWkVEOwotICB9Ci0KLSAgLy8gQ2hlY2sgaWYg
ZW5jb2RlZCBmcmFtZSBkaW1lbnNpb24gaGFzIGNoYW5nZWQuCi0gIGlmICgoaW5wdXRJbWFnZS5f
ZW5jb2RlZFdpZHRoICogaW5wdXRJbWFnZS5fZW5jb2RlZEhlaWdodCA+IDApICYmCi0gICAgICAo
aW5wdXRJbWFnZS5fZW5jb2RlZFdpZHRoICE9IGNvZGVjXy53aWR0aCB8fAotICAgICAgaW5wdXRJ
bWFnZS5fZW5jb2RlZEhlaWdodCAhPSBjb2RlY18uaGVpZ2h0KSkgewotICAgIEFMT0dXIDw8ICJJ
bnB1dCByZXNvbHV0aW9uIGNoYW5nZWQgZnJvbSAiIDw8Ci0gICAgICAgIGNvZGVjXy53aWR0aCA8
PCAiIHggIiA8PCBjb2RlY18uaGVpZ2h0IDw8ICIgdG8gIiA8PAotICAgICAgICBpbnB1dEltYWdl
Ll9lbmNvZGVkV2lkdGggPDwgIiB4ICIgPDwgaW5wdXRJbWFnZS5fZW5jb2RlZEhlaWdodDsKLSAg
ICBjb2RlY18ud2lkdGggPSBpbnB1dEltYWdlLl9lbmNvZGVkV2lkdGg7Ci0gICAgY29kZWNfLmhl
aWdodCA9IGlucHV0SW1hZ2UuX2VuY29kZWRIZWlnaHQ7Ci0gICAgaW50MzJfdCByZXQ7Ci0gICAg
aWYgKHVzZV9zdXJmYWNlXyAmJgotICAgICAgICAoY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY1ZQ
OCB8fCBjb2RlY1R5cGVfID09IGtWaWRlb0NvZGVjSDI2NCkpIHsKLSAgICAgIC8vIFNvZnQgY29k
ZWMgcmVzZXQgLSBvbmx5IGZvciBzdXJmYWNlIGRlY29kaW5nLgotICAgICAgcmV0ID0gY29kZWNf
dGhyZWFkXy0+SW52b2tlPGludDMyX3Q+KAotICAgICAgICAgIFJUQ19GUk9NX0hFUkUsCi0gICAg
ICAgICAgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6UmVzZXREZWNvZGVPbkNvZGVjVGhy
ZWFkLCB0aGlzKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEhhcmQgY29kZWMgcmVzZXQuCi0g
ICAgICByZXQgPSBJbml0RGVjb2RlKCZjb2RlY18sIDEpOwotICAgIH0KLSAgICBpZiAocmV0IDwg
MCkgewotICAgICAgQUxPR0UgPDwgIkluaXREZWNvZGUgZmFpbHVyZTogIiA8PCByZXQgPDwgIiAt
IGZhbGxiYWNrIHRvIFNXIGNvZGVjIjsKLSAgICAgIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA9IHRy
dWU7Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwot
ICAgIH0KLSAgfQotCi0gIC8vIEFsd2F5cyBzdGFydCB3aXRoIGEgY29tcGxldGUga2V5IGZyYW1l
LgotICBpZiAoa2V5X2ZyYW1lX3JlcXVpcmVkXykgewotICAgIGlmIChpbnB1dEltYWdlLl9mcmFt
ZVR5cGUgIT0gd2VicnRjOjprVmlkZW9GcmFtZUtleSkgewotICAgICAgQUxPR0UgPDwgIkRlY29k
ZSgpIC0ga2V5IGZyYW1lIGlzIHJlcXVpcmVkIjsKLSAgICAgIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfRVJST1I7Ci0gICAgfQotICAgIGlmICghaW5wdXRJbWFnZS5fY29tcGxldGVGcmFtZSkg
ewotICAgICAgQUxPR0UgPDwgIkRlY29kZSgpIC0gY29tcGxldGUgZnJhbWUgaXMgcmVxdWlyZWQi
OwotICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0gICAga2V5
X2ZyYW1lX3JlcXVpcmVkXyA9IGZhbHNlOwotICB9Ci0gIGlmIChpbnB1dEltYWdlLl9sZW5ndGgg
PT0gMCkgewotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gIH0KLQotICBy
ZXR1cm4gY29kZWNfdGhyZWFkXy0+SW52b2tlPGludDMyX3Q+KAotICAgICAgUlRDX0ZST01fSEVS
RSwKLSAgICAgIEJpbmQoJk1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OkRlY29kZU9uQ29kZWNUaHJl
YWQsIHRoaXMsIGlucHV0SW1hZ2UpKTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyOjpEZWNvZGVPbkNvZGVjVGhyZWFkKAotICAgIGNvbnN0IEVuY29kZWRJbWFnZSYgaW5wdXRJ
bWFnZSkgewotICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hD
dXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZf
ZnJhbWUoam5pKTsKLQotICAvLyBUcnkgdG8gZHJhaW4gdGhlIGRlY29kZXIgYW5kIHdhaXQgdW50
aWwgb3V0cHV0IGlzIG5vdCB0b28KLSAgLy8gbXVjaCBiZWhpbmQgdGhlIGlucHV0LgotICBpZiAo
Y29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY0gyNjQgJiYKLSAgICAgIGZyYW1lc19yZWNlaXZlZF8g
PiBmcmFtZXNfZGVjb2RlZF8gKyBtYXhfcGVuZGluZ19mcmFtZXNfKSB7Ci0gICAgLy8gUHJpbnQg
d2FybmluZyBmb3IgSC4yNjQgb25seSAtIGZvciBWUDgvVlA5IG9uZSBmcmFtZSBkZWxheSBpcyBv
ay4KLSAgICBBTE9HVyA8PCAiRGVjb2RlciBpcyB0b28gZmFyIGJlaGluZC4gVHJ5IHRvIGRyYWlu
LiBSZWNlaXZlZDogIiA8PAotICAgICAgICBmcmFtZXNfcmVjZWl2ZWRfIDw8ICIuIERlY29kZWQ6
ICIgPDwgZnJhbWVzX2RlY29kZWRfOwotICAgIEVuYWJsZUZyYW1lTG9nT25XYXJuaW5nKCk7Ci0g
IH0KLSAgY29uc3QgaW50NjQgZHJhaW5fc3RhcnQgPSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgd2hp
bGUgKChmcmFtZXNfcmVjZWl2ZWRfID4gZnJhbWVzX2RlY29kZWRfICsgbWF4X3BlbmRpbmdfZnJh
bWVzXykgJiYKLSAgICAgICAgIChydGM6OlRpbWVNaWxsaXMoKSAtIGRyYWluX3N0YXJ0KSA8IGtN
ZWRpYUNvZGVjVGltZW91dE1zKSB7Ci0gICAgaWYgKCFEZWxpdmVyUGVuZGluZ091dHB1dHMoam5p
LCBrTWVkaWFDb2RlY1BvbGxNcykpIHsKLSAgICAgIEFMT0dFIDw8ICJEZWxpdmVyUGVuZGluZ091
dHB1dHMgZXJyb3IuIEZyYW1lcyByZWNlaXZlZDogIiA8PAotICAgICAgICAgIGZyYW1lc19yZWNl
aXZlZF8gPDwgIi4gRnJhbWVzIGRlY29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfOwotICAgICAg
cmV0dXJuIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICAgIH0KLSAgfQotICBpZiAo
ZnJhbWVzX3JlY2VpdmVkXyA+IGZyYW1lc19kZWNvZGVkXyArIG1heF9wZW5kaW5nX2ZyYW1lc18p
IHsKLSAgICBBTE9HRSA8PCAiT3V0cHV0IGJ1ZmZlciBkZXF1ZXVlIHRpbWVvdXQuIEZyYW1lcyBy
ZWNlaXZlZDogIiA8PAotICAgICAgICBmcmFtZXNfcmVjZWl2ZWRfIDw8ICIuIEZyYW1lcyBkZWNv
ZGVkOiAiIDw8IGZyYW1lc19kZWNvZGVkXzsKLSAgICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkNv
ZGVjVGhyZWFkKCk7Ci0gIH0KLQotICAvLyBHZXQgaW5wdXQgYnVmZmVyLgotICBpbnQgal9pbnB1
dF9idWZmZXJfaW5kZXggPSBqbmktPkNhbGxJbnRNZXRob2QoCi0gICAgICAqal9tZWRpYV9jb2Rl
Y192aWRlb19kZWNvZGVyXywgal9kZXF1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2RfKTsKLSAgaWYg
KENoZWNrRXhjZXB0aW9uKGpuaSkgfHwgal9pbnB1dF9idWZmZXJfaW5kZXggPCAwKSB7Ci0gICAg
QUxPR0UgPDwgImRlcXVldWVJbnB1dEJ1ZmZlciBlcnJvcjogIiA8PCBqX2lucHV0X2J1ZmZlcl9p
bmRleCA8PAotICAgICAgICAiLiBSZXRyeSBEZWxpdmVyUGVuZGluZ091dHB1dHMuIjsKLSAgICBF
bmFibGVGcmFtZUxvZ09uV2FybmluZygpOwotICAgIC8vIFRyeSB0byBkcmFpbiB0aGUgZGVjb2Rl
ci4KLSAgICBpZiAoIURlbGl2ZXJQZW5kaW5nT3V0cHV0cyhqbmksIGtNZWRpYUNvZGVjUG9sbE1z
KSkgewotICAgICAgQUxPR0UgPDwgIkRlbGl2ZXJQZW5kaW5nT3V0cHV0cyBlcnJvci4gRnJhbWVz
IHJlY2VpdmVkOiAiIDw8Ci0gICAgICAgICAgZnJhbWVzX3JlY2VpdmVkXyA8PCAiLiBGcmFtZXMg
ZGVjb2RlZDogIiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0gICAgICByZXR1cm4gUHJvY2Vzc0hXRXJy
b3JPbkNvZGVjVGhyZWFkKCk7Ci0gICAgfQotICAgIC8vIFRyeSBkZXF1ZXVlIGlucHV0IGJ1ZmZl
ciBvbmUgbGFzdCB0aW1lLgotICAgIGpfaW5wdXRfYnVmZmVyX2luZGV4ID0gam5pLT5DYWxsSW50
TWV0aG9kKAotICAgICAgICAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywgal9kZXF1ZXVl
X2lucHV0X2J1ZmZlcl9tZXRob2RfKTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSB8fCBq
X2lucHV0X2J1ZmZlcl9pbmRleCA8IDApIHsKLSAgICAgIEFMT0dFIDw8ICJkZXF1ZXVlSW5wdXRC
dWZmZXIgY3JpdGljYWwgZXJyb3I6ICIgPDwgal9pbnB1dF9idWZmZXJfaW5kZXg7Ci0gICAgICBy
ZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8g
Q29weSBlbmNvZGVkIGRhdGEgdG8gSmF2YSBCeXRlQnVmZmVyLgotICBqb2JqZWN0IGpfaW5wdXRf
YnVmZmVyID0gaW5wdXRfYnVmZmVyc19bal9pbnB1dF9idWZmZXJfaW5kZXhdOwotICB1aW50OF90
KiBidWZmZXIgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJl
Y3RCdWZmZXJBZGRyZXNzKGpfaW5wdXRfYnVmZmVyKSk7Ci0gIFJUQ19DSEVDSyhidWZmZXIpIDw8
ICJJbmRpcmVjdCBidWZmZXI/PyI7Ci0gIGludDY0X3QgYnVmZmVyX2NhcGFjaXR5ID0gam5pLT5H
ZXREaXJlY3RCdWZmZXJDYXBhY2l0eShqX2lucHV0X2J1ZmZlcik7Ci0gIGlmIChDaGVja0V4Y2Vw
dGlvbihqbmkpIHx8IGJ1ZmZlcl9jYXBhY2l0eSA8IGlucHV0SW1hZ2UuX2xlbmd0aCkgewotICAg
IEFMT0dFIDw8ICJJbnB1dCBmcmFtZSBzaXplICI8PCAgaW5wdXRJbWFnZS5fbGVuZ3RoIDw8Ci0g
ICAgICAgICIgaXMgYmlnZ2VyIHRoYW4gYnVmZmVyIHNpemUgIiA8PCBidWZmZXJfY2FwYWNpdHk7
Ci0gICAgcmV0dXJuIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICB9Ci0gIGpsb25n
IHByZXNlbnRhdGlvbl90aW1lc3RhbXBfdXMgPSBzdGF0aWNfY2FzdDxqbG9uZz4oCi0gICAgICBz
dGF0aWNfY2FzdDxpbnQ2NF90PihmcmFtZXNfcmVjZWl2ZWRfKSAqIDEwMDAwMDAgLyBjb2RlY18u
bWF4RnJhbWVyYXRlKTsKLSAgbWVtY3B5KGJ1ZmZlciwgaW5wdXRJbWFnZS5fYnVmZmVyLCBpbnB1
dEltYWdlLl9sZW5ndGgpOwotCi0gIGlmIChmcmFtZXNfZGVjb2RlZF8gPCBmcmFtZXNfZGVjb2Rl
ZF9sb2dnZWRfKSB7Ci0gICAgQUxPR0QgPDwgIkRlY29kZXIgZnJhbWUgaW4gIyAiIDw8IGZyYW1l
c19yZWNlaXZlZF8gPDwKLSAgICAgICAgIi4gVHlwZTogIiA8PCBpbnB1dEltYWdlLl9mcmFtZVR5
cGUgPDwKLSAgICAgICAgIi4gQnVmZmVyICMgIiA8PCBqX2lucHV0X2J1ZmZlcl9pbmRleCA8PAot
ICAgICAgICAiLiBUUzogIiA8PCBwcmVzZW50YXRpb25fdGltZXN0YW1wX3VzIC8gMTAwMCA8PAot
ICAgICAgICAiLiBTaXplOiAiIDw8IGlucHV0SW1hZ2UuX2xlbmd0aDsKLSAgfQotCi0gIC8vIFNh
dmUgaW5wdXQgaW1hZ2UgdGltZXN0YW1wcyBmb3IgbGF0ZXIgb3V0cHV0LgotICBmcmFtZXNfcmVj
ZWl2ZWRfKys7Ci0gIGN1cnJlbnRfYnl0ZXNfICs9IGlucHV0SW1hZ2UuX2xlbmd0aDsKLQotICAv
LyBGZWVkIGlucHV0IHRvIGRlY29kZXIuCi0gIGJvb2wgc3VjY2VzcyA9IGpuaS0+Q2FsbEJvb2xl
YW5NZXRob2QoCi0gICAgICAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywKLSAgICAgIGpf
cXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF8sCi0gICAgICBqX2lucHV0X2J1ZmZlcl9pbmRleCwK
LSAgICAgIGlucHV0SW1hZ2UuX2xlbmd0aCwKLSAgICAgIHByZXNlbnRhdGlvbl90aW1lc3RhbXBf
dXMsCi0gICAgICBzdGF0aWNfY2FzdDxpbnQ2NF90PiAoaW5wdXRJbWFnZS5fdGltZVN0YW1wKSwK
LSAgICAgIGlucHV0SW1hZ2UubnRwX3RpbWVfbXNfKTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpu
aSkgfHwgIXN1Y2Nlc3MpIHsKLSAgICBBTE9HRSA8PCAicXVldWVJbnB1dEJ1ZmZlciBlcnJvciI7
Ci0gICAgcmV0dXJuIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICB9Ci0KLSAgLy8g
VHJ5IHRvIGRyYWluIHRoZSBkZWNvZGVyCi0gIGlmICghRGVsaXZlclBlbmRpbmdPdXRwdXRzKGpu
aSwgMCkpIHsKLSAgICBBTE9HRSA8PCAiRGVsaXZlclBlbmRpbmdPdXRwdXRzIGVycm9yIjsKLSAg
ICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKCk7Ci0gIH0KLQotICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX09LOwotfQotCi1ib29sIE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6
OkRlbGl2ZXJQZW5kaW5nT3V0cHV0cygKLSAgICBKTklFbnYqIGpuaSwgaW50IGRlcXVldWVfdGlt
ZW91dF9tcykgewotICBpZiAoZnJhbWVzX3JlY2VpdmVkXyA8PSBmcmFtZXNfZGVjb2RlZF8pIHsK
LSAgICAvLyBObyBuZWVkIHRvIHF1ZXJ5IGZvciBvdXRwdXQgYnVmZmVycyAtIGRlY29kZXIgaXMg
ZHJhaW5lZC4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICAvLyBHZXQgZGVjb2RlciBvdXRwdXQu
Ci0gIGpvYmplY3Qgal9kZWNvZGVyX291dHB1dF9idWZmZXIgPQotICAgICAgam5pLT5DYWxsT2Jq
ZWN0TWV0aG9kKCpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLAotICAgICAgICAgIHVzZV9z
dXJmYWNlXyA/IGpfZGVxdWV1ZV90ZXh0dXJlX2J1ZmZlcl9tZXRob2RfCi0gICAgICAgICAgICAg
ICAgICAgICAgIDogal9kZXF1ZXVlX2J5dGVfYnVmZmVyX21ldGhvZF8sCi0gICAgICAgICAgZGVx
dWV1ZV90aW1lb3V0X21zKTsKLQotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFM
T0dFIDw8ICJkZXF1ZXVlT3V0cHV0QnVmZmVyKCkgZXJyb3IiOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotICBpZiAoSXNOdWxsKGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIpKSB7Ci0gICAg
Ly8gTm8gZGVjb2RlZCBmcmFtZSByZWFkeS4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8v
IEdldCBkZWNvZGVkIHZpZGVvIGZyYW1lIHByb3BlcnRpZXMuCi0gIGludCBjb2xvcl9mb3JtYXQg
PSBHZXRJbnRGaWVsZChqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLAotICAgICAg
al9jb2xvcl9mb3JtYXRfZmllbGRfKTsKLSAgaW50IHdpZHRoID0gR2V0SW50RmllbGQoam5pLCAq
al9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywgal93aWR0aF9maWVsZF8pOwotICBpbnQgaGVp
Z2h0ID0gR2V0SW50RmllbGQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywgal9o
ZWlnaHRfZmllbGRfKTsKLSAgaW50IHN0cmlkZSA9IEdldEludEZpZWxkKGpuaSwgKmpfbWVkaWFf
Y29kZWNfdmlkZW9fZGVjb2Rlcl8sIGpfc3RyaWRlX2ZpZWxkXyk7Ci0gIGludCBzbGljZV9oZWln
aHQgPSBHZXRJbnRGaWVsZChqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLAotICAg
ICAgal9zbGljZV9oZWlnaHRfZmllbGRfKTsKLQotICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb0ZyYW1lQnVmZmVyPiBmcmFtZV9idWZmZXI7Ci0gIGludDY0X3QgcHJlc2VudGF0aW9u
X3RpbWVzdGFtcHNfbXMgPSAwOwotICBpbnQ2NF90IG91dHB1dF90aW1lc3RhbXBzX21zID0gMDsK
LSAgaW50NjRfdCBvdXRwdXRfbnRwX3RpbWVzdGFtcHNfbXMgPSAwOwotICBpbnQgZGVjb2RlX3Rp
bWVfbXMgPSAwOwotICBpbnQ2NF90IGZyYW1lX2RlbGF5ZWRfbXMgPSAwOwotICBpZiAodXNlX3N1
cmZhY2VfKSB7Ci0gICAgLy8gRXh0cmFjdCBkYXRhIGZyb20gSmF2YSBEZWNvZGVkVGV4dHVyZUJ1
ZmZlci4KLSAgICBwcmVzZW50YXRpb25fdGltZXN0YW1wc19tcyA9IEdldExvbmdGaWVsZCgKLSAg
ICAgICAgam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwKLSAgICAgICAgal90ZXh0dXJlX3By
ZXNlbnRhdGlvbl90aW1lc3RhbXBfbXNfZmllbGRfKTsKLSAgICBvdXRwdXRfdGltZXN0YW1wc19t
cyA9IEdldExvbmdGaWVsZCgKLSAgICAgICAgam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwg
al90ZXh0dXJlX3RpbWVzdGFtcF9tc19maWVsZF8pOwotICAgIG91dHB1dF9udHBfdGltZXN0YW1w
c19tcyA9IEdldExvbmdGaWVsZCgKLSAgICAgICAgam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZl
ciwgal90ZXh0dXJlX250cF90aW1lc3RhbXBfbXNfZmllbGRfKTsKLSAgICBkZWNvZGVfdGltZV9t
cyA9IEdldExvbmdGaWVsZCgKLSAgICAgICAgam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwg
al90ZXh0dXJlX2RlY29kZV90aW1lX21zX2ZpZWxkXyk7Ci0KLSAgICBjb25zdCBpbnQgdGV4dHVy
ZV9pZCA9Ci0gICAgICAgIEdldEludEZpZWxkKGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIs
IGpfdGV4dHVyZV9pZF9maWVsZF8pOwotICAgIGlmICh0ZXh0dXJlX2lkICE9IDApIHsgIC8vIHx0
ZXh0dXJlX2lkfCA9PSAwIHJlcHJlc2VudHMgYSBkcm9wcGVkIGZyYW1lLgotICAgICAgY29uc3Qg
amZsb2F0QXJyYXkgal90cmFuc2Zvcm1fbWF0cml4ID0KLSAgICAgICAgICByZWludGVycHJldF9j
YXN0PGpmbG9hdEFycmF5PihHZXRPYmplY3RGaWVsZCgKLSAgICAgICAgICAgICAgam5pLCBqX2Rl
Y29kZXJfb3V0cHV0X2J1ZmZlciwgal90cmFuc2Zvcm1fbWF0cml4X2ZpZWxkXykpOwotICAgICAg
ZnJhbWVfZGVsYXllZF9tcyA9IEdldExvbmdGaWVsZCgKLSAgICAgICAgICBqbmksIGpfZGVjb2Rl
cl9vdXRwdXRfYnVmZmVyLCBqX3RleHR1cmVfZnJhbWVfZGVsYXlfbXNfZmllbGRfKTsKLQotICAg
ICAgLy8gQ3JlYXRlIHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlciB3aXRoIG5hdGl2ZSB0ZXh0dXJl
IGhhbmRsZS4KLSAgICAgIGZyYW1lX2J1ZmZlciA9IHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfLT5D
cmVhdGVUZXh0dXJlRnJhbWUoCi0gICAgICAgICAgd2lkdGgsIGhlaWdodCwgTmF0aXZlSGFuZGxl
SW1wbChqbmksIHRleHR1cmVfaWQsIGpfdHJhbnNmb3JtX21hdHJpeCkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBFbmFibGVGcmFtZUxvZ09uV2FybmluZygpOwotICAgIH0KLSAgfSBlbHNlIHsKLSAg
ICAvLyBFeHRyYWN0IGRhdGEgZnJvbSBKYXZhIEJ5dGVCdWZmZXIgYW5kIGNyZWF0ZSBvdXRwdXQg
eXV2NDIwIGZyYW1lIC0KLSAgICAvLyBmb3Igbm9uIHN1cmZhY2UgZGVjb2Rpbmcgb25seS4KLSAg
ICBjb25zdCBpbnQgb3V0cHV0X2J1ZmZlcl9pbmRleCA9IEdldEludEZpZWxkKAotICAgICAgICBq
bmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyLCBqX2luZm9faW5kZXhfZmllbGRfKTsKLSAgICBj
b25zdCBpbnQgb3V0cHV0X2J1ZmZlcl9vZmZzZXQgPSBHZXRJbnRGaWVsZCgKLSAgICAgICAgam5p
LCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwgal9pbmZvX29mZnNldF9maWVsZF8pOwotICAgIGNv
bnN0IGludCBvdXRwdXRfYnVmZmVyX3NpemUgPSBHZXRJbnRGaWVsZCgKLSAgICAgICAgam5pLCBq
X2RlY29kZXJfb3V0cHV0X2J1ZmZlciwgal9pbmZvX3NpemVfZmllbGRfKTsKLSAgICBwcmVzZW50
YXRpb25fdGltZXN0YW1wc19tcyA9IEdldExvbmdGaWVsZCgKLSAgICAgICAgam5pLCBqX2RlY29k
ZXJfb3V0cHV0X2J1ZmZlciwgal9wcmVzZW50YXRpb25fdGltZXN0YW1wX21zX2ZpZWxkXyk7Ci0g
ICAgb3V0cHV0X3RpbWVzdGFtcHNfbXMgPSBHZXRMb25nRmllbGQoCi0gICAgICAgIGpuaSwgal9k
ZWNvZGVyX291dHB1dF9idWZmZXIsIGpfdGltZXN0YW1wX21zX2ZpZWxkXyk7Ci0gICAgb3V0cHV0
X250cF90aW1lc3RhbXBzX21zID0gR2V0TG9uZ0ZpZWxkKAotICAgICAgICBqbmksIGpfZGVjb2Rl
cl9vdXRwdXRfYnVmZmVyLCBqX250cF90aW1lc3RhbXBfbXNfZmllbGRfKTsKLQotICAgIGRlY29k
ZV90aW1lX21zID0gR2V0TG9uZ0ZpZWxkKGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal9ieXRlX2J1ZmZlcl9kZWNvZGVfdGlt
ZV9tc19maWVsZF8pOwotCi0gICAgaWYgKG91dHB1dF9idWZmZXJfc2l6ZSA8IHdpZHRoICogaGVp
Z2h0ICogMyAvIDIpIHsKLSAgICAgIEFMT0dFIDw8ICJJbnN1ZmZpY2llbnQgb3V0cHV0IGJ1ZmZl
ciBzaXplOiAiIDw8IG91dHB1dF9idWZmZXJfc2l6ZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKG91dHB1dF9idWZmZXJfc2l6ZSA8IHN0cmlkZSAqIGhlaWdodCAqIDMgLyAy
ICYmCi0gICAgICAgIHNsaWNlX2hlaWdodCA9PSBoZWlnaHQgJiYgc3RyaWRlID4gd2lkdGgpIHsK
LSAgICAgIC8vIFNvbWUgY29kZWNzIChFeHlub3MpIGluY29ycmVjdGx5IHJlcG9ydCBzdHJpZGUg
aW5mb3JtYXRpb24gZm9yCi0gICAgICAvLyBvdXRwdXQgYnl0ZSBidWZmZXIsIHNvIGFjdHVhbCBz
dHJpZGUgdmFsdWUgbmVlZCB0byBiZSBjb3JyZWN0ZWQuCi0gICAgICBzdHJpZGUgPSBvdXRwdXRf
YnVmZmVyX3NpemUgKiAyIC8gKGhlaWdodCAqIDMpOwotICAgIH0KLSAgICBqb2JqZWN0QXJyYXkg
b3V0cHV0X2J1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGpvYmplY3RBcnJheT4oR2V0T2JqZWN0
RmllbGQoCi0gICAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8sIGpfb3V0
cHV0X2J1ZmZlcnNfZmllbGRfKSk7Ci0gICAgam9iamVjdCBvdXRwdXRfYnVmZmVyID0KLSAgICAg
ICAgam5pLT5HZXRPYmplY3RBcnJheUVsZW1lbnQob3V0cHV0X2J1ZmZlcnMsIG91dHB1dF9idWZm
ZXJfaW5kZXgpOwotICAgIHVpbnQ4X3QqIHBheWxvYWQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3MoCi0gICAgICAgIG91dHB1dF9idWZmZXIp
KTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBwYXlsb2FkICs9IG91dHB1dF9idWZmZXJfb2Zmc2V0OwotCi0gICAgLy8gQ3Jl
YXRlIHl1djQyMCBmcmFtZS4KLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpJNDIwQnVm
ZmVyPiBpNDIwX2J1ZmZlcjsKLQotICAgIGk0MjBfYnVmZmVyID0gZGVjb2RlZF9mcmFtZV9wb29s
Xy5DcmVhdGVCdWZmZXIod2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKGNvbG9yX2Zvcm1hdCA9PSBD
T0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIpIHsKLSAgICAgIFJUQ19DSEVDS19FUSgwLCBzdHJpZGUg
JSAyKTsKLSAgICAgIFJUQ19DSEVDS19FUSgwLCBzbGljZV9oZWlnaHQgJSAyKTsKLSAgICAgIGNv
bnN0IGludCB1dl9zdHJpZGUgPSBzdHJpZGUgLyAyOwotICAgICAgY29uc3QgaW50IHVfc2xpY2Vf
aGVpZ2h0ID0gc2xpY2VfaGVpZ2h0IC8gMjsKLSAgICAgIGNvbnN0IHVpbnQ4X3QqIHlfcHRyID0g
cGF5bG9hZDsKLSAgICAgIGNvbnN0IHVpbnQ4X3QqIHVfcHRyID0geV9wdHIgKyBzdHJpZGUgKiBz
bGljZV9oZWlnaHQ7Ci0gICAgICBjb25zdCB1aW50OF90KiB2X3B0ciA9IHVfcHRyICsgdXZfc3Ry
aWRlICogdV9zbGljZV9oZWlnaHQ7Ci0gICAgICBsaWJ5dXY6Okk0MjBDb3B5KHlfcHRyLCBzdHJp
ZGUsIHVfcHRyLCB1dl9zdHJpZGUsIHZfcHRyLCB1dl9zdHJpZGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgIGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVkoKSwgaTQyMF9idWZmZXItPlN0cmlkZVko
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgaTQyMF9idWZmZXItPk11dGFibGVEYXRhVSgpLCBp
NDIwX2J1ZmZlci0+U3RyaWRlVSgpLAotICAgICAgICAgICAgICAgICAgICAgICBpNDIwX2J1ZmZl
ci0+TXV0YWJsZURhdGFWKCksIGk0MjBfYnVmZmVyLT5TdHJpZGVWKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBBbGwgb3Ro
ZXIgc3VwcG9ydGVkIGZvcm1hdHMgYXJlIG52MTIuCi0gICAgICBjb25zdCB1aW50OF90KiB5X3B0
ciA9IHBheWxvYWQ7Ci0gICAgICBjb25zdCB1aW50OF90KiB1dl9wdHIgPSB5X3B0ciArIHN0cmlk
ZSAqIHNsaWNlX2hlaWdodDsKLSAgICAgIGxpYnl1djo6TlYxMlRvSTQyMCh5X3B0ciwgc3RyaWRl
LCB1dl9wdHIsIHN0cmlkZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpNDIwX2J1ZmZlci0+
TXV0YWJsZURhdGFZKCksIGk0MjBfYnVmZmVyLT5TdHJpZGVZKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgaTQyMF9idWZmZXItPk11dGFibGVEYXRhVSgpLCBpNDIwX2J1ZmZlci0+U3RyaWRl
VSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVYo
KSwgaTQyMF9idWZmZXItPlN0cmlkZVYoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0
aCwgaGVpZ2h0KTsKLSAgICB9Ci0gICAgZnJhbWVfYnVmZmVyID0gaTQyMF9idWZmZXI7Ci0KLSAg
ICAvLyBSZXR1cm4gb3V0cHV0IGJ5dGUgYnVmZmVyIGJhY2sgdG8gY29kZWMuCi0gICAgam5pLT5D
YWxsVm9pZE1ldGhvZCgKLSAgICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8sCi0g
ICAgICAgIGpfcmV0dXJuX2RlY29kZWRfYnl0ZV9idWZmZXJfbWV0aG9kXywKLSAgICAgICAgb3V0
cHV0X2J1ZmZlcl9pbmRleCk7Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICAg
IEFMT0dFIDw8ICJyZXR1cm5EZWNvZGVkT3V0cHV0QnVmZmVyIGVycm9yIjsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyYW1lc19kZWNvZGVkXyA8IGZyYW1lc19kZWNv
ZGVkX2xvZ2dlZF8pIHsKLSAgICBBTE9HRCA8PCAiRGVjb2RlciBmcmFtZSBvdXQgIyAiIDw8IGZy
YW1lc19kZWNvZGVkXyA8PAotICAgICAgICAiLiAiIDw8IHdpZHRoIDw8ICIgeCAiIDw8IGhlaWdo
dCA8PAotICAgICAgICAiLiAiIDw8IHN0cmlkZSA8PCAiIHggIiA8PCAgc2xpY2VfaGVpZ2h0IDw8
Ci0gICAgICAgICIuIENvbG9yOiAiIDw8IGNvbG9yX2Zvcm1hdCA8PAotICAgICAgICAiLiBUUzog
IiA8PCBwcmVzZW50YXRpb25fdGltZXN0YW1wc19tcyA8PAotICAgICAgICAiLiBEZWNUaW1lOiAi
IDw8IChpbnQpZGVjb2RlX3RpbWVfbXMgPDwKLSAgICAgICAgIi4gRGVsYXlUaW1lOiAiIDw8IChp
bnQpZnJhbWVfZGVsYXllZF9tczsKLSAgfQotCi0gIC8vIENhbGN1bGF0ZSBhbmQgcHJpbnQgZGVj
b2Rpbmcgc3RhdGlzdGljcyAtIGV2ZXJ5IDMgc2Vjb25kcy4KLSAgZnJhbWVzX2RlY29kZWRfKys7
Ci0gIGN1cnJlbnRfZnJhbWVzXysrOwotICBjdXJyZW50X2RlY29kaW5nX3RpbWVfbXNfICs9IGRl
Y29kZV90aW1lX21zOwotICBjdXJyZW50X2RlbGF5X3RpbWVfbXNfICs9IGZyYW1lX2RlbGF5ZWRf
bXM7Ci0gIGludCBzdGF0aXN0aWNfdGltZV9tcyA9IHJ0Yzo6VGltZU1pbGxpcygpIC0gc3RhcnRf
dGltZV9tc187Ci0gIGlmIChzdGF0aXN0aWNfdGltZV9tcyA+PSBrTWVkaWFDb2RlY1N0YXRpc3Rp
Y3NJbnRlcnZhbE1zICYmCi0gICAgICBjdXJyZW50X2ZyYW1lc18gPiAwKSB7Ci0gICAgaW50IGN1
cnJlbnRfYml0cmF0ZSA9IGN1cnJlbnRfYnl0ZXNfICogOCAvIHN0YXRpc3RpY190aW1lX21zOwot
ICAgIGludCBjdXJyZW50X2ZwcyA9Ci0gICAgICAgIChjdXJyZW50X2ZyYW1lc18gKiAxMDAwICsg
c3RhdGlzdGljX3RpbWVfbXMgLyAyKSAvIHN0YXRpc3RpY190aW1lX21zOwotICAgIEFMT0dEIDw8
ICJGcmFtZXMgZGVjb2RlZDogIiA8PCBmcmFtZXNfZGVjb2RlZF8gPDwKLSAgICAgICAgIi4gUmVj
ZWl2ZWQ6ICIgPDwgIGZyYW1lc19yZWNlaXZlZF8gPDwKLSAgICAgICAgIi4gQml0cmF0ZTogIiA8
PCBjdXJyZW50X2JpdHJhdGUgPDwgIiBrYnBzIiA8PAotICAgICAgICAiLiBGcHM6ICIgPDwgY3Vy
cmVudF9mcHMgPDwKLSAgICAgICAgIi4gRGVjVGltZTogIiA8PCAoY3VycmVudF9kZWNvZGluZ190
aW1lX21zXyAvIGN1cnJlbnRfZnJhbWVzXykgPDwKLSAgICAgICAgIi4gRGVsYXlUaW1lOiAiIDw8
IChjdXJyZW50X2RlbGF5X3RpbWVfbXNfIC8gY3VycmVudF9mcmFtZXNfKSA8PAotICAgICAgICAi
IGZvciBsYXN0ICIgPDwgc3RhdGlzdGljX3RpbWVfbXMgPDwgIiBtcy4iOwotICAgIHN0YXJ0X3Rp
bWVfbXNfID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gICAgY3VycmVudF9mcmFtZXNfID0gMDsKLSAg
ICBjdXJyZW50X2J5dGVzXyA9IDA7Ci0gICAgY3VycmVudF9kZWNvZGluZ190aW1lX21zXyA9IDA7
Ci0gICAgY3VycmVudF9kZWxheV90aW1lX21zXyA9IDA7Ci0gIH0KLQotICAvLyBJZiB0aGUgZnJh
bWUgd2FzIGRyb3BwZWQsIGZyYW1lX2J1ZmZlciBpcyBsZWZ0IGFzIG51bGxwdHIuCi0gIGlmIChm
cmFtZV9idWZmZXIpIHsKLSAgICBWaWRlb0ZyYW1lIGRlY29kZWRfZnJhbWUoZnJhbWVfYnVmZmVy
LCAwLCAwLCB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApOwotICAgIGRlY29kZWRfZnJhbWUuc2V0
X3RpbWVzdGFtcChvdXRwdXRfdGltZXN0YW1wc19tcyk7Ci0gICAgZGVjb2RlZF9mcmFtZS5zZXRf
bnRwX3RpbWVfbXMob3V0cHV0X250cF90aW1lc3RhbXBzX21zKTsKLQotICAgIGNvbnN0IGludDMy
X3QgY2FsbGJhY2tfc3RhdHVzID0KLSAgICAgICAgY2FsbGJhY2tfLT5EZWNvZGVkKGRlY29kZWRf
ZnJhbWUsIGRlY29kZV90aW1lX21zKTsKLSAgICBpZiAoY2FsbGJhY2tfc3RhdHVzID4gMCkgewot
ICAgICAgQUxPR0UgPDwgImNhbGxiYWNrIGVycm9yIjsKLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6UmVnaXN0ZXJEZWNvZGVD
b21wbGV0ZUNhbGxiYWNrKAotICAgIERlY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFjaykgewot
ICBjYWxsYmFja18gPSBjYWxsYmFjazsKLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsK
LX0KLQotdm9pZCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpPbk1lc3NhZ2UocnRjOjpNZXNzYWdl
KiBtc2cpIHsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsK
LSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgaWYgKCFpbml0
ZWRfKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIC8vIFdlIG9ubHkgZXZlciBzZW5kIG9uZSBtZXNz
YWdlIHRvIHx0aGlzfCBkaXJlY3RseSAobm90IHRocm91Z2ggYSBCaW5kKCknZAotICAvLyBmdW5j
dG9yKSwgc28gZXhwZWN0IG5vIElEL2RhdGEuCi0gIFJUQ19DSEVDSyghbXNnLT5tZXNzYWdlX2lk
KSA8PCAiVW5leHBlY3RlZCBtZXNzYWdlISI7Ci0gIFJUQ19DSEVDSyghbXNnLT5wZGF0YSkgPDwg
IlVuZXhwZWN0ZWQgbWVzc2FnZSEiOwotICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLQotICBpZiAo
IURlbGl2ZXJQZW5kaW5nT3V0cHV0cyhqbmksIDApKSB7Ci0gICAgQUxPR0UgPDwgIk9uTWVzc2Fn
ZTogRGVsaXZlclBlbmRpbmdPdXRwdXRzIGVycm9yIjsKLSAgICBQcm9jZXNzSFdFcnJvck9uQ29k
ZWNUaHJlYWQoKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgY29kZWNfdGhyZWFkXy0+UG9zdERlbGF5
ZWQoUlRDX0ZST01fSEVSRSwga01lZGlhQ29kZWNQb2xsTXMsIHRoaXMpOwotfQotCi1NZWRpYUNv
ZGVjVmlkZW9EZWNvZGVyRmFjdG9yeTo6TWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkoKQot
ICAgIDogZWdsX2NvbnRleHRfKG51bGxwdHIpIHsKLSAgQUxPR0QgPDwgIk1lZGlhQ29kZWNWaWRl
b0RlY29kZXJGYWN0b3J5IGN0b3IiOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJl
YWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkp
OwotICBqY2xhc3Mgal9kZWNvZGVyX2NsYXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMv
TWVkaWFDb2RlY1ZpZGVvRGVjb2RlciIpOwotICBzdXBwb3J0ZWRfY29kZWNfdHlwZXNfLmNsZWFy
KCk7Ci0KLSAgYm9vbCBpc192cDhfaHdfc3VwcG9ydGVkID0gam5pLT5DYWxsU3RhdGljQm9vbGVh
bk1ldGhvZCgKLSAgICAgIGpfZGVjb2Rlcl9jbGFzcywKLSAgICAgIEdldFN0YXRpY01ldGhvZElE
KGpuaSwgal9kZWNvZGVyX2NsYXNzLCAiaXNWcDhId1N1cHBvcnRlZCIsICIoKVoiKSk7Ci0gIGlm
IChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgaXNfdnA4X2h3X3N1cHBvcnRlZCA9IGZhbHNl
OwotICB9Ci0gIGlmIChpc192cDhfaHdfc3VwcG9ydGVkKSB7Ci0gICAgQUxPR0QgPDwgIlZQOCBI
VyBEZWNvZGVyIHN1cHBvcnRlZC4iOwotICAgIHN1cHBvcnRlZF9jb2RlY190eXBlc18ucHVzaF9i
YWNrKGtWaWRlb0NvZGVjVlA4KTsKLSAgfQotCi0gIGJvb2wgaXNfdnA5X2h3X3N1cHBvcnRlZCA9
IGpuaS0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2QoCi0gICAgICBqX2RlY29kZXJfY2xhc3MsCi0g
ICAgICBHZXRTdGF0aWNNZXRob2RJRChqbmksIGpfZGVjb2Rlcl9jbGFzcywgImlzVnA5SHdTdXBw
b3J0ZWQiLCAiKClaIikpOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIGlzX3Zw
OV9od19zdXBwb3J0ZWQgPSBmYWxzZTsKLSAgfQotICBpZiAoaXNfdnA5X2h3X3N1cHBvcnRlZCkg
ewotICAgIEFMT0dEIDw8ICJWUDkgSFcgRGVjb2RlciBzdXBwb3J0ZWQuIjsKLSAgICBzdXBwb3J0
ZWRfY29kZWNfdHlwZXNfLnB1c2hfYmFjayhrVmlkZW9Db2RlY1ZQOSk7Ci0gIH0KLQotICBib29s
IGlzX2gyNjRfaHdfc3VwcG9ydGVkID0gam5pLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZCgKLSAg
ICAgIGpfZGVjb2Rlcl9jbGFzcywKLSAgICAgIEdldFN0YXRpY01ldGhvZElEKGpuaSwgal9kZWNv
ZGVyX2NsYXNzLCAiaXNIMjY0SHdTdXBwb3J0ZWQiLCAiKClaIikpOwotICBpZiAoQ2hlY2tFeGNl
cHRpb24oam5pKSkgewotICAgIGlzX2gyNjRfaHdfc3VwcG9ydGVkID0gZmFsc2U7Ci0gIH0KLSAg
aWYgKGlzX2gyNjRfaHdfc3VwcG9ydGVkKSB7Ci0gICAgQUxPR0QgPDwgIkgyNjQgSFcgRGVjb2Rl
ciBzdXBwb3J0ZWQuIjsKLSAgICBzdXBwb3J0ZWRfY29kZWNfdHlwZXNfLnB1c2hfYmFjayhrVmlk
ZW9Db2RlY0gyNjQpOwotICB9Ci19Ci0KLU1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5Ojp+
TWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkoKSB7Ci0gIEFMT0dEIDw8ICJNZWRpYUNvZGVj
VmlkZW9EZWNvZGVyRmFjdG9yeSBkdG9yIjsKLSAgaWYgKGVnbF9jb250ZXh0XykgewotICAgIEpO
SUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gICAgam5pLT5EZWxl
dGVHbG9iYWxSZWYoZWdsX2NvbnRleHRfKTsKLSAgfQotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRl
b0RlY29kZXJGYWN0b3J5OjpTZXRFR0xDb250ZXh0KAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0
IGVnbF9jb250ZXh0KSB7Ci0gIEFMT0dEIDw8ICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9y
eTo6U2V0RUdMQ29udGV4dCI7Ci0gIGlmIChlZ2xfY29udGV4dF8pIHsKLSAgICBqbmktPkRlbGV0
ZUdsb2JhbFJlZihlZ2xfY29udGV4dF8pOwotICAgIGVnbF9jb250ZXh0XyA9IG51bGxwdHI7Ci0g
IH0KLSAgZWdsX2NvbnRleHRfID0gam5pLT5OZXdHbG9iYWxSZWYoZWdsX2NvbnRleHQpOwotICBp
ZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFMT0dFIDw8ICJlcnJvciBjYWxsaW5nIE5l
d0dsb2JhbFJlZiBmb3IgRUdMIENvbnRleHQuIjsKLSAgfQotfQotCi13ZWJydGM6OlZpZGVvRGVj
b2RlciogTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3Rvcnk6OkNyZWF0ZVZpZGVvRGVjb2RlcigK
LSAgICBWaWRlb0NvZGVjVHlwZSB0eXBlKSB7Ci0gIGlmIChzdXBwb3J0ZWRfY29kZWNfdHlwZXNf
LmVtcHR5KCkpIHsKLSAgICBBTE9HVyA8PCAiTm8gSFcgdmlkZW8gZGVjb2RlciBmb3IgdHlwZSAi
IDw8IChpbnQpdHlwZTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICBmb3IgKFZpZGVvQ29k
ZWNUeXBlIGNvZGVjX3R5cGUgOiBzdXBwb3J0ZWRfY29kZWNfdHlwZXNfKSB7Ci0gICAgaWYgKGNv
ZGVjX3R5cGUgPT0gdHlwZSkgewotICAgICAgQUxPR0QgPDwgIkNyZWF0ZSBIVyB2aWRlbyBkZWNv
ZGVyIGZvciB0eXBlICIgPDwgKGludCl0eXBlOwotICAgICAgcmV0dXJuIG5ldyBNZWRpYUNvZGVj
VmlkZW9EZWNvZGVyKEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpLCB0eXBlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVnbF9jb250ZXh0Xyk7Ci0gICAgfQot
ICB9Ci0gIEFMT0dXIDw8ICJDYW4gbm90IGZpbmQgSFcgdmlkZW8gZGVjb2RlciBmb3IgdHlwZSAi
IDw8IChpbnQpdHlwZTsKLSAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlckZhY3Rvcnk6OkRlc3Ryb3lWaWRlb0RlY29kZXIoCi0gICAgd2VicnRjOjpWaWRl
b0RlY29kZXIqIGRlY29kZXIpIHsKLSAgQUxPR0QgPDwgIkRlc3Ryb3kgdmlkZW8gZGVjb2Rlci4i
OwotICBkZWxldGUgZGVjb2RlcjsKLX0KLQotY29uc3QgY2hhciogTWVkaWFDb2RlY1ZpZGVvRGVj
b2Rlcjo6SW1wbGVtZW50YXRpb25OYW1lKCkgY29uc3QgewotICByZXR1cm4gIk1lZGlhQ29kZWMi
OwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRl
Y29kZXJfam5pLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29kZXJfam5pLmgJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFkZWNvZGVyX2puaS5oCShub25leGlzdGVu
dCkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENf
QVBJX0pBVkFfSk5JX0FORFJPSURNRURJQURFQ09ERVJfSk5JX0hfCi0jZGVmaW5lIFdFQlJUQ19B
UElfSkFWQV9KTklfQU5EUk9JRE1FRElBREVDT0RFUl9KTklfSF8KLQotI2luY2x1ZGUgIndlYnJ0
Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbWVkaWEv
ZW5naW5lL3dlYnJ0Y3ZpZGVvZGVjb2RlcmZhY3RvcnkuaCIKLQotbmFtZXNwYWNlIHdlYnJ0Y19q
bmkgewotCi0vLyBJbXBsZW1lbnRhdGlvbiBvZiBBbmRyb2lkIE1lZGlhQ29kZWMgYmFzZWQgZGVj
b2RlciBmYWN0b3J5LgotY2xhc3MgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkKLSAgICA6
IHB1YmxpYyBjcmlja2V0OjpXZWJSdGNWaWRlb0RlY29kZXJGYWN0b3J5IHsKLSBwdWJsaWM6Ci0g
IE1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5KCk7Ci0gIHZpcnR1YWwgfk1lZGlhQ29kZWNW
aWRlb0RlY29kZXJGYWN0b3J5KCk7Ci0KLSAgdm9pZCBTZXRFR0xDb250ZXh0KEpOSUVudiogam5p
LCBqb2JqZWN0IHJlbmRlcl9lZ2xfY29udGV4dCk7Ci0KLSAgLy8gV2ViUnRjVmlkZW9EZWNvZGVy
RmFjdG9yeSBpbXBsZW1lbnRhdGlvbi4KLSAgd2VicnRjOjpWaWRlb0RlY29kZXIqIENyZWF0ZVZp
ZGVvRGVjb2Rlcih3ZWJydGM6OlZpZGVvQ29kZWNUeXBlIHR5cGUpCi0gICAgICBvdmVycmlkZTsK
LQotICB2b2lkIERlc3Ryb3lWaWRlb0RlY29kZXIod2VicnRjOjpWaWRlb0RlY29kZXIqIGRlY29k
ZXIpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgam9iamVjdCBlZ2xfY29udGV4dF87Ci0gIHN0
ZDo6dmVjdG9yPHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGU+IHN1cHBvcnRlZF9jb2RlY190eXBlc187
Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQotCi0jZW5kaWYgIC8vIFdFQlJUQ19B
UElfSkFWQV9KTklfQU5EUk9JRE1FRElBREVDT0RFUl9KTklfSF8KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVk
aWFlbmNvZGVyX2puaS5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmku
Y2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFlbmNvZGVyX2puaS5jYwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEzNzkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotLy8gTk9U
SUNFOiBhbmRyb2lkbWVkaWFlbmNvZGVyX2puaS5oIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlCi0v
LyBhbmRyb2lkbWVkaWFjb2RlY2NvbW1vbi5oIHRvIGF2b2lkIGJ1aWxkIGVycm9ycy4KLSNpbmNs
dWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWVuY29kZXJfam5pLmgiCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPGxpc3Q+
Ci0KLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvY29udmVydC5o
IgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di9jb252ZXJ0X2Zy
b20uaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvdmlkZW9f
Y29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFj
b2RlY2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZl
cmVuY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9o
YW5kbGVfaW1wbC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9sb2dnaW5nLmgiCi0j
aW5jbHVkZSAid2VicnRjL2Jhc2UvdGhyZWFkLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGhy
ZWFkX2NoZWNrZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aW1ldXRpbHMuaCIKLSNpbmNs
dWRlICJ3ZWJydGMvY29tbW9uX3R5cGVzLmgiCi0jaW5jbHVkZSAid2VicnRjL2NvbW1vbl92aWRl
by9oMjY0L2gyNjRfYml0c3RyZWFtX3BhcnNlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVz
L3ZpZGVvX2NvZGluZy9pbmNsdWRlL3ZpZGVvX2NvZGVjX2ludGVyZmFjZS5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy91dGlsaXR5L3F1YWxpdHlfc2NhbGVyLmgiCi0j
aW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL3V0aWxpdHkvdnA4X2hlYWRlcl9w
YXJzZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvZmllbGRf
dHJpYWwuaCIKLSNpbmNsdWRlICJ3ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvbG9nY2F0
X3RyYWNlX2NvbnRleHQuaCIKLQotdXNpbmcgcnRjOjpCaW5kOwotdXNpbmcgcnRjOjpUaHJlYWQ7
Ci11c2luZyBydGM6OlRocmVhZE1hbmFnZXI7Ci0KLXVzaW5nIHdlYnJ0Yzo6Q29kZWNTcGVjaWZp
Y0luZm87Ci11c2luZyB3ZWJydGM6OkVuY29kZWRJbWFnZTsKLXVzaW5nIHdlYnJ0Yzo6VmlkZW9G
cmFtZTsKLXVzaW5nIHdlYnJ0Yzo6UlRQRnJhZ21lbnRhdGlvbkhlYWRlcjsKLXVzaW5nIHdlYnJ0
Yzo6VmlkZW9Db2RlYzsKLXVzaW5nIHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGU7Ci11c2luZyB3ZWJy
dGM6OmtWaWRlb0NvZGVjSDI2NDsKLXVzaW5nIHdlYnJ0Yzo6a1ZpZGVvQ29kZWNWUDg7Ci11c2lu
ZyB3ZWJydGM6OmtWaWRlb0NvZGVjVlA5OwotdXNpbmcgd2VicnRjOjpRdWFsaXR5U2NhbGVyOwot
Ci1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIEguMjY0IHN0YXJ0IGNvZGUgbGVuZ3RoLgot
I2RlZmluZSBIMjY0X1NDX0xFTkdUSCA0Ci0vLyBNYXhpbXVtIGFsbG93ZWQgTkFMVXMgaW4gb25l
IG91dHB1dCBmcmFtZS4KLSNkZWZpbmUgTUFYX05BTFVTX1BFUkZSQU1FIDMyCi0vLyBNYXhpbXVt
IHN1cHBvcnRlZCBIVyB2aWRlbyBlbmNvZGVyIGZwcy4KLSNkZWZpbmUgTUFYX1ZJREVPX0ZQUyAz
MAotLy8gTWF4aW11bSBhbGxvd2VkIGZwcyB2YWx1ZSBpbiBTZXRSYXRlcygpIGNhbGwuCi0jZGVm
aW5lIE1BWF9BTExPV0VEX1ZJREVPX0ZQUyA2MAotLy8gTWF4aW11bSBhbGxvd2VkIGZyYW1lcyBp
biBlbmNvZGVyIGlucHV0IHF1ZXVlLgotI2RlZmluZSBNQVhfRU5DT0RFUl9RX1NJWkUgMgotLy8g
TWF4aW11bSBhbW91bnQgb2YgZHJvcHBlZCBmcmFtZXMgY2F1c2VkIGJ5IGZ1bGwgZW5jb2RlciBx
dWV1ZSAtIGV4Y2VlZGluZwotLy8gdGhpcyB0aHJlc2hvbGQgbWVhbnMgdGhhdCBlbmNvZGVyIHBy
b2JhYmx5IGdvdCBzdHVjayBhbmQgbmVlZCB0byBiZSByZXNldC4KLSNkZWZpbmUgRU5DT0RFUl9T
VEFMTF9GUkFNRURST1BfVEhSRVNIT0xEIDYwCi0KLS8vIExvZ2dpbmcgbWFjcm9zLgotI2RlZmlu
ZSBUQUdfRU5DT0RFUiAiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciIKLSNpZmRlZiBUUkFDS19CVUZG
RVJfVElNSU5HCi0jZGVmaW5lIEFMT0dWKC4uLikKLSAgX19hbmRyb2lkX2xvZ19wcmludChBTkRS
T0lEX0xPR19WRVJCT1NFLCBUQUdfRU5DT0RFUiwgX19WQV9BUkdTX18pCi0jZWxzZQotI2RlZmlu
ZSBBTE9HViguLi4pCi0jZW5kaWYKLSNkZWZpbmUgQUxPR0QgTE9HX1RBRyhydGM6OkxTX0lORk8s
IFRBR19FTkNPREVSKQotI2RlZmluZSBBTE9HVyBMT0dfVEFHKHJ0Yzo6TFNfV0FSTklORywgVEFH
X0VOQ09ERVIpCi0jZGVmaW5lIEFMT0dFIExPR19UQUcocnRjOjpMU19FUlJPUiwgVEFHX0VOQ09E
RVIpCi0KLW5hbWVzcGFjZSB7Ci0vLyBNYXhpbXVtIHRpbWUgbGltaXQgYmV0d2VlbiBpbmNvbWlu
ZyBmcmFtZXMgYmVmb3JlIHJlcXVlc3RpbmcgYSBrZXkgZnJhbWUuCi1jb25zdCBzaXplX3Qga0Zy
YW1lRGlmZlRocmVzaG9sZE1zID0gMzUwOwotY29uc3QgaW50IGtNaW5LZXlGcmFtZUludGVydmFs
ID0gNjsKLX0gIC8vIG5hbWVzcGFjZQotCi0vLyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGlzIGEg
d2VicnRjOjpWaWRlb0VuY29kZXIgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzCi0vLyBBbmRyb2lk
J3MgTWVkaWFDb2RlYyBTREsgQVBJIGJlaGluZCB0aGUgc2NlbmVzIHRvIGltcGxlbWVudCAoaG9w
ZWZ1bGx5KQotLy8gSFctYmFja2VkIHZpZGVvIGVuY29kZS4gIFRoaXMgQysrIGNsYXNzIGlzIGlt
cGxlbWVudGVkIGFzIGEgdmVyeSB0aGluIHNoaW0sCi0vLyBkZWxlZ2F0aW5nIGFsbCBvZiB0aGUg
aW50ZXJlc3Rpbmcgd29yayB0byBvcmcud2VicnRjLk1lZGlhQ29kZWNWaWRlb0VuY29kZXIuCi0v
LyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGlzIGNyZWF0ZWQsIG9wZXJhdGVkLCBhbmQgZGVzdHJv
eWVkIG9uIGEgc2luZ2xlCi0vLyB0aHJlYWQsIGN1cnJlbnRseSB0aGUgbGliamluZ2xlIFdvcmtl
ciB0aHJlYWQuCi1jbGFzcyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIDogcHVibGljIHdlYnJ0Yzo6
VmlkZW9FbmNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBydGM6
Ok1lc3NhZ2VIYW5kbGVyIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgfk1lZGlhQ29kZWNWaWRlb0Vu
Y29kZXIoKTsKLSAgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcihKTklFbnYqIGpuaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBWaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgam9iamVjdCBlZ2xfY29udGV4dCk7Ci0KLSAgLy8gd2VicnRjOjpWaWRlb0Vu
Y29kZXIgaW1wbGVtZW50YXRpb24uICBFdmVyeXRoaW5nIHRyYW1wb2xpbmVzIHRvCi0gIC8vIHxj
b2RlY190aHJlYWRffCBmb3IgZXhlY3V0aW9uLgotICBpbnQzMl90IEluaXRFbmNvZGUoY29uc3Qg
d2VicnRjOjpWaWRlb0NvZGVjKiBjb2RlY19zZXR0aW5ncywKLSAgICAgICAgICAgICAgICAgICAg
IGludDMyX3QgLyogbnVtYmVyX29mX2NvcmVzICovLAotICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IC8qIG1heF9wYXlsb2FkX3NpemUgKi8pIG92ZXJyaWRlOwotICBpbnQzMl90IEVuY29kZShj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGlucHV0X2ltYWdlLAotICAgICAgICAgICAgICAgICBj
b25zdCB3ZWJydGM6OkNvZGVjU3BlY2lmaWNJbmZvKiAvKiBjb2RlY19zcGVjaWZpY19pbmZvICov
LAotICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx3ZWJydGM6OkZyYW1lVHlwZT4q
IGZyYW1lX3R5cGVzKSBvdmVycmlkZTsKLSAgaW50MzJfdCBSZWdpc3RlckVuY29kZUNvbXBsZXRl
Q2FsbGJhY2soCi0gICAgICB3ZWJydGM6OkVuY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFjaykg
b3ZlcnJpZGU7Ci0gIGludDMyX3QgUmVsZWFzZSgpIG92ZXJyaWRlOwotICBpbnQzMl90IFNldENo
YW5uZWxQYXJhbWV0ZXJzKHVpbnQzMl90IC8qIHBhY2tldF9sb3NzICovLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludDY0X3QgLyogcnR0ICovKSBvdmVycmlkZTsKLSAgaW50MzJf
dCBTZXRSYXRlcyh1aW50MzJfdCBuZXdfYml0X3JhdGUsIHVpbnQzMl90IGZyYW1lX3JhdGUpIG92
ZXJyaWRlOwotCi0gIC8vIHJ0Yzo6TWVzc2FnZUhhbmRsZXIgaW1wbGVtZW50YXRpb24uCi0gIHZv
aWQgT25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSogbXNnKSBvdmVycmlkZTsKLQotICB2b2lkIE9uRHJv
cHBlZEZyYW1lKCkgb3ZlcnJpZGU7Ci0KLSAgYm9vbCBTdXBwb3J0c05hdGl2ZUhhbmRsZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVnbF9jb250ZXh0XyAhPSBudWxscHRyOyB9Ci0gIGNvbnN0
IGNoYXIqIEltcGxlbWVudGF0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gcHJpdmF0ZToK
LSAgLy8gUmVzZXRDb2RlY09uQ29kZWNUaHJlYWQoKSBjYWxscyBSZWxlYXNlT25Db2RlY1RocmVh
ZCgpIGFuZAotICAvLyBJbml0RW5jb2RlT25Db2RlY1RocmVhZCgpIGluIGFuIGF0dGVtcHQgdG8g
cmVzdG9yZSB0aGUgY29kZWMgdG8gYW4KLSAgLy8gb3BlcmFibGUgc3RhdGUuICBOZWNlc3Nhcnkg
YWZ0ZXIgYWxsIG1hbm5lciBvZiBPTVgtbGF5ZXIgZXJyb3JzLgotICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIGNvZGVjIHdhcyByZXNldCBzdWNjZXNzZnVsbHkuCi0gIGJvb2wgUmVzZXRDb2RlY09u
Q29kZWNUaHJlYWQoKTsKLQotICAvLyBGYWxsYmFjayB0byBhIHNvZnR3YXJlIGVuY29kZXIgaWYg
b25lIGlzIHN1cHBvcnRlZCBlbHNlIHRyeSB0byByZXNldCB0aGUKLSAgLy8gZW5jb2Rlci4gQ2Fs
bGVkIHdpdGggfHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlfCBlcXVhbCB0byBmYWxzZSBm
cm9tCi0gIC8vIGluaXQvcmVsZWFzZSBlbmNvZGVyIHNvIHRoYXQgd2UgZG9uJ3QgZ28gaW50byBp
bmZpbml0ZSByZWN1cnNpb24uCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29kZWMgd2FzIHJl
c2V0IHN1Y2Nlc3NmdWxseS4KLSAgYm9vbCBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoYm9v
bCByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSk7Ci0KLSAgLy8gQ2FsbHMgUHJvY2Vzc0hX
RXJyb3JPbkNvZGVjVGhyZWFkKHRydWUpLiBSZXR1cm5zCi0gIC8vIFdFQlJUQ19WSURFT19DT0RF
Q19GQUxMQkFDS19TT0ZUV0FSRSBpZiBzd19mYWxsYmFja19yZXF1aXJlZF8gd2FzIHNldCBvcgot
ICAvLyBXRUJSVENfVklERU9fQ09ERUNfRVJST1Igb3RoZXJ3aXNlLgotICBpbnQzMl90IFByb2Nl
c3NIV0Vycm9yT25FbmNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24g
b2Ygd2VicnRjOjpWaWRlb0VuY29kZXIgbWV0aG9kcyBhYm92ZSwgYWxsIHJ1bm5pbmcgb24gdGhl
Ci0gIC8vIGNvZGVjIHRocmVhZCBleGNsdXNpdmVseS4KLSAgLy8KLSAgLy8gSWYgd2lkdGg9PTAg
dGhlbiB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgYSByZS1pbml0aWFsaXphdGlvbiBhbmQgdGhlCi0g
IC8vIHByZXZpb3VzbHktY3VycmVudCB2YWx1ZXMgYXJlIHJldXNlZCBpbnN0ZWFkIG9mIHRoZSBw
YXNzZWQgcGFyYW1ldGVycwotICAvLyAobWFrZXMgaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dCB0
aHJlYWQtc2FmZXR5KS4KLSAgaW50MzJfdCBJbml0RW5jb2RlT25Db2RlY1RocmVhZChpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludCBrYnBzLCBpbnQgZnBzLAotICAgICAgYm9vbCB1c2Vfc3VyZmFj
ZSk7Ci0gIC8vIFJlY29uZmlndXJlIHRvIG1hdGNoIHxmcmFtZXwgaW4gd2lkdGgsIGhlaWdodC4g
QWxzbyByZWNvbmZpZ3VyZXMgdGhlCi0gIC8vIGVuY29kZXIgaWYgfGZyYW1lfCBpcyBhIHRleHR1
cmUvYnl0ZSBidWZmZXIgYW5kIHRoZSBlbmNvZGVyIGlzIGluaXRpYWxpemVkCi0gIC8vIGZvciBi
eXRlIGJ1ZmZlci90ZXh0dXJlLiBSZXR1cm5zIGZhbHNlIGlmIHJlY29uZmlndXJpbmcgZmFpbHMu
Ci0gIGJvb2wgTWF5YmVSZWNvbmZpZ3VyZUVuY29kZXJPbkNvZGVjVGhyZWFkKGNvbnN0IHdlYnJ0
Yzo6VmlkZW9GcmFtZSYgZnJhbWUpOwotICBpbnQzMl90IEVuY29kZU9uQ29kZWNUaHJlYWQoCi0g
ICAgICBjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGlucHV0X2ltYWdlLAotICAgICAgY29uc3Qg
c3RkOjp2ZWN0b3I8d2VicnRjOjpGcmFtZVR5cGU+KiBmcmFtZV90eXBlcywKLSAgICAgIGNvbnN0
IGludDY0X3QgZnJhbWVfaW5wdXRfdGltZV9tcyk7Ci0gIGJvb2wgRW5jb2RlQnl0ZUJ1ZmZlck9u
Q29kZWNUaHJlYWQoSk5JRW52KiBqbmksCi0gICAgICBib29sIGtleV9mcmFtZSwgY29uc3Qgd2Vi
cnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSwgaW50IGlucHV0X2J1ZmZlcl9pbmRleCk7Ci0gIGJvb2wg
RW5jb2RlVGV4dHVyZU9uQ29kZWNUaHJlYWQoSk5JRW52KiBqbmksCi0gICAgICBib29sIGtleV9m
cmFtZSwgY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSk7Ci0KLSAgaW50MzJfdCBSZWdp
c3RlckVuY29kZUNvbXBsZXRlQ2FsbGJhY2tPbkNvZGVjVGhyZWFkKAotICAgICAgd2VicnRjOjpF
bmNvZGVkSW1hZ2VDYWxsYmFjayogY2FsbGJhY2spOwotICBpbnQzMl90IFJlbGVhc2VPbkNvZGVj
VGhyZWFkKCk7Ci0gIGludDMyX3QgU2V0UmF0ZXNPbkNvZGVjVGhyZWFkKHVpbnQzMl90IG5ld19i
aXRfcmF0ZSwgdWludDMyX3QgZnJhbWVfcmF0ZSk7Ci0gIHZvaWQgT25Ecm9wcGVkRnJhbWVPbkNv
ZGVjVGhyZWFkKCk7Ci0KLSAgLy8gSGVscGVyIGFjY2Vzc29ycyBmb3IgTWVkaWFDb2RlY1ZpZGVv
RW5jb2RlciRPdXRwdXRCdWZmZXJJbmZvIG1lbWJlcnMuCi0gIGludCBHZXRPdXRwdXRCdWZmZXJJ
bmZvSW5kZXgoSk5JRW52KiBqbmksIGpvYmplY3Qgal9vdXRwdXRfYnVmZmVyX2luZm8pOwotICBq
b2JqZWN0IEdldE91dHB1dEJ1ZmZlckluZm9CdWZmZXIoSk5JRW52KiBqbmksIGpvYmplY3Qgal9v
dXRwdXRfYnVmZmVyX2luZm8pOwotICBib29sIEdldE91dHB1dEJ1ZmZlckluZm9Jc0tleUZyYW1l
KEpOSUVudiogam5pLCBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZlcl9pbmZvKTsKLSAgamxvbmcgR2V0
T3V0cHV0QnVmZmVySW5mb1ByZXNlbnRhdGlvblRpbWVzdGFtcFVzKAotICAgICAgSk5JRW52KiBq
bmksIGpvYmplY3Qgal9vdXRwdXRfYnVmZmVyX2luZm8pOwotCi0gIC8vIERlbGl2ZXIgYW55IG91
dHB1dHMgcGVuZGluZyBpbiB0aGUgTWVkaWFDb2RlYyB0byBvdXIgfGNhbGxiYWNrX3wgYW5kIHJl
dHVybgotICAvLyB0cnVlIG9uIHN1Y2Nlc3MuCi0gIGJvb2wgRGVsaXZlclBlbmRpbmdPdXRwdXRz
KEpOSUVudiogam5pKTsKLQotICAvLyBTZWFyY2ggZm9yIEguMjY0IHN0YXJ0IGNvZGVzLgotICBp
bnQzMl90IE5leHROYWx1UG9zaXRpb24odWludDhfdCAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3Np
emUpOwotCi0gIC8vIERpc3BsYXlzIGVuY29kZXIgc3RhdGlzdGljcy4KLSAgdm9pZCBMb2dTdGF0
aXN0aWNzKGJvb2wgZm9yY2VfbG9nKTsKLQotICAvLyBUeXBlIG9mIHZpZGVvIGNvZGVjLgotICBW
aWRlb0NvZGVjVHlwZSBjb2RlY1R5cGVfOwotCi0gIC8vIFZhbGlkIGFsbCB0aGUgdGltZSBzaW5j
ZSBSZWdpc3RlckVuY29kZUNvbXBsZXRlQ2FsbGJhY2soKSBJbnZva2UoKXMgdG8KLSAgLy8gfGNv
ZGVjX3RocmVhZF98IHN5bmNocm9ub3VzbHkuCi0gIHdlYnJ0Yzo6RW5jb2RlZEltYWdlQ2FsbGJh
Y2sqIGNhbGxiYWNrXzsKLQotICAvLyBTdGF0ZSB0aGF0IGlzIGNvbnN0YW50IGZvciB0aGUgbGlm
ZXRpbWUgb2YgdGhpcyBvYmplY3Qgb25jZSB0aGUgY3RvcgotICAvLyByZXR1cm5zLgotICBzdGQ6
OnVuaXF1ZV9wdHI8VGhyZWFkPgotICAgICAgY29kZWNfdGhyZWFkXzsgIC8vIFRocmVhZCBvbiB3
aGljaCB0byBvcGVyYXRlIE1lZGlhQ29kZWMuCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciBjb2RlY190
aHJlYWRfY2hlY2tlcl87Ci0gIFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfbWVkaWFfY29kZWNf
dmlkZW9fZW5jb2Rlcl9jbGFzc187Ci0gIFNjb3BlZEdsb2JhbFJlZjxqb2JqZWN0PiBqX21lZGlh
X2NvZGVjX3ZpZGVvX2VuY29kZXJfOwotICBqbWV0aG9kSUQgal9pbml0X2VuY29kZV9tZXRob2Rf
OwotICBqbWV0aG9kSUQgal9nZXRfaW5wdXRfYnVmZmVyc19tZXRob2RfOwotICBqbWV0aG9kSUQg
al9kZXF1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2RfOwotICBqbWV0aG9kSUQgal9lbmNvZGVfYnVm
ZmVyX21ldGhvZF87Ci0gIGptZXRob2RJRCBqX2VuY29kZV90ZXh0dXJlX21ldGhvZF87Ci0gIGpt
ZXRob2RJRCBqX3JlbGVhc2VfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfc2V0X3JhdGVzX21ldGhv
ZF87Ci0gIGptZXRob2RJRCBqX2RlcXVldWVfb3V0cHV0X2J1ZmZlcl9tZXRob2RfOwotICBqbWV0
aG9kSUQgal9yZWxlYXNlX291dHB1dF9idWZmZXJfbWV0aG9kXzsKLSAgamZpZWxkSUQgal9jb2xv
cl9mb3JtYXRfZmllbGRfOwotICBqZmllbGRJRCBqX2luZm9faW5kZXhfZmllbGRfOwotICBqZmll
bGRJRCBqX2luZm9fYnVmZmVyX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9pbmZvX2lzX2tleV9mcmFt
ZV9maWVsZF87Ci0gIGpmaWVsZElEIGpfaW5mb19wcmVzZW50YXRpb25fdGltZXN0YW1wX3VzX2Zp
ZWxkXzsKLQotICAvLyBTdGF0ZSB0aGF0IGlzIHZhbGlkIG9ubHkgYmV0d2VlbiBJbml0RW5jb2Rl
KCkgYW5kIHRoZSBuZXh0IFJlbGVhc2UoKS4KLSAgLy8gVG91Y2hlZCBvbmx5IG9uIGNvZGVjX3Ro
cmVhZF8gc28gbm8gZXhwbGljaXQgc3luY2hyb25pemF0aW9uIG5lY2Vzc2FyeS4KLSAgaW50IHdp
ZHRoXzsgICAvLyBGcmFtZSB3aWR0aCBpbiBwaXhlbHMuCi0gIGludCBoZWlnaHRfOyAgLy8gRnJh
bWUgaGVpZ2h0IGluIHBpeGVscy4KLSAgYm9vbCBpbml0ZWRfOwotICBib29sIHVzZV9zdXJmYWNl
XzsKLSAgdWludDE2X3QgcGljdHVyZV9pZF87Ci0gIGVudW0gbGlieXV2OjpGb3VyQ0MgZW5jb2Rl
cl9mb3VyY2NfOyAgLy8gRW5jb2RlciBjb2xvciBzcGFjZSBmb3JtYXQuCi0gIGludCBsYXN0X3Nl
dF9iaXRyYXRlX2ticHNfOyAgLy8gTGFzdC1yZXF1ZXN0ZWQgYml0cmF0ZSBpbiBrYnBzLgotICBp
bnQgbGFzdF9zZXRfZnBzXzsgIC8vIExhc3QtcmVxdWVzdGVkIGZyYW1lIHJhdGUuCi0gIGludDY0
X3QgY3VycmVudF90aW1lc3RhbXBfdXNfOyAgLy8gQ3VycmVudCBmcmFtZSB0aW1lc3RhbXBzIGlu
IHVzLgotICBpbnQgZnJhbWVzX3JlY2VpdmVkXzsgIC8vIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2
ZWQgYnkgZW5jb2Rlci4KLSAgaW50IGZyYW1lc19lbmNvZGVkXzsgIC8vIE51bWJlciBvZiBmcmFt
ZXMgZW5jb2RlZCBieSBlbmNvZGVyLgotICBpbnQgZnJhbWVzX2Ryb3BwZWRfbWVkaWFfZW5jb2Rl
cl87ICAvLyBOdW1iZXIgb2YgZnJhbWVzIGRyb3BwZWQgYnkgZW5jb2Rlci4KLSAgLy8gTnVtYmVy
IG9mIGRyb3BwZWQgZnJhbWVzIGNhdXNlZCBieSBmdWxsIHF1ZXVlLgotICBpbnQgY29uc2VjdXRp
dmVfZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc187Ci0gIGludDY0X3Qgc3RhdF9zdGFydF90aW1lX21z
XzsgIC8vIFN0YXJ0IHRpbWUgZm9yIHN0YXRpc3RpY3MuCi0gIGludCBjdXJyZW50X2ZyYW1lc187
ICAvLyBOdW1iZXIgb2YgZnJhbWVzIGluIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgaW50ZXJ2YWwu
Ci0gIGludCBjdXJyZW50X2J5dGVzXzsgIC8vIEVuY29kZWQgYnl0ZXMgaW4gdGhlIGN1cnJlbnQg
c3RhdGlzdGljcyBpbnRlcnZhbC4KLSAgaW50IGN1cnJlbnRfYWNjX3FwXzsgLy8gQWNjdW11bGF0
ZWQgUVAgaW4gdGhlIGN1cnJlbnQgc3RhdGlzdGljcyBpbnRlcnZhbC4KLSAgaW50IGN1cnJlbnRf
ZW5jb2RpbmdfdGltZV9tc187ICAvLyBPdmVyYWxsIGVuY29kaW5nIHRpbWUgaW4gdGhlIGN1cnJl
bnQgc2Vjb25kCi0gIGludDY0X3QgbGFzdF9pbnB1dF90aW1lc3RhbXBfbXNfOyAgLy8gVGltZXN0
YW1wIG9mIGxhc3QgcmVjZWl2ZWQgeXV2IGZyYW1lLgotICBpbnQ2NF90IGxhc3Rfb3V0cHV0X3Rp
bWVzdGFtcF9tc187ICAvLyBUaW1lc3RhbXAgb2YgbGFzdCBlbmNvZGVkIGZyYW1lLgotCi0gIHN0
cnVjdCBJbnB1dEZyYW1lSW5mbyB7Ci0gICAgSW5wdXRGcmFtZUluZm8oaW50NjRfdCBlbmNvZGVf
c3RhcnRfdGltZSwKLSAgICAgICAgICAgICAgICAgICBpbnQzMl90IGZyYW1lX3RpbWVzdGFtcCwK
LSAgICAgICAgICAgICAgICAgICBpbnQ2NF90IGZyYW1lX3JlbmRlcl90aW1lX21zLAotICAgICAg
ICAgICAgICAgICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikKLSAgICAgICAgOiBl
bmNvZGVfc3RhcnRfdGltZShlbmNvZGVfc3RhcnRfdGltZSksCi0gICAgICAgICAgZnJhbWVfdGlt
ZXN0YW1wKGZyYW1lX3RpbWVzdGFtcCksCi0gICAgICAgICAgZnJhbWVfcmVuZGVyX3RpbWVfbXMo
ZnJhbWVfcmVuZGVyX3RpbWVfbXMpLAotICAgICAgICAgIHJvdGF0aW9uKHJvdGF0aW9uKSB7fQot
ICAgIC8vIFRpbWUgd2hlbiB2aWRlbyBmcmFtZSBpcyBzZW50IHRvIGVuY29kZXIgaW5wdXQuCi0g
ICAgY29uc3QgaW50NjRfdCBlbmNvZGVfc3RhcnRfdGltZTsKLQotICAgIC8vIElucHV0IGZyYW1l
IGluZm9ybWF0aW9uLgotICAgIGNvbnN0IGludDMyX3QgZnJhbWVfdGltZXN0YW1wOwotICAgIGNv
bnN0IGludDY0X3QgZnJhbWVfcmVuZGVyX3RpbWVfbXM7Ci0gICAgY29uc3Qgd2VicnRjOjpWaWRl
b1JvdGF0aW9uIHJvdGF0aW9uOwotICB9OwotICBzdGQ6Omxpc3Q8SW5wdXRGcmFtZUluZm8+IGlu
cHV0X2ZyYW1lX2luZm9zXzsKLSAgaW50MzJfdCBvdXRwdXRfdGltZXN0YW1wXzsgICAgICAvLyBM
YXN0IG91dHB1dCBmcmFtZSB0aW1lc3RhbXAgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIHxpbnB1dF9mcmFtZV9pbmZvc198LgotICBpbnQ2NF90IG91dHB1dF9yZW5k
ZXJfdGltZV9tc187IC8vIExhc3Qgb3V0cHV0IGZyYW1lIHJlbmRlciB0aW1lIGZyb20KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB8aW5wdXRfZnJhbWVfaW5mb3NffC4KLSAg
d2VicnRjOjpWaWRlb1JvdGF0aW9uIG91dHB1dF9yb3RhdGlvbl87ICAvLyBMYXN0IG91dHB1dCBm
cmFtZSByb3RhdGlvbiBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gfGlucHV0X2ZyYW1lX2luZm9zX3wuCi0gIC8vIEZyYW1lIHNpemUgaW4gYnl0ZXMg
ZmVkIHRvIE1lZGlhQ29kZWMuCi0gIGludCB5dXZfc2l6ZV87Ci0gIC8vIFRydWUgb25seSB3aGVu
IGJldHdlZW4gYSBjYWxsYmFja18tPk9uRW5jb2RlZEltYWdlKCkgY2FsbCByZXR1cm4gYSBwb3Np
dGl2ZQotICAvLyB2YWx1ZSBhbmQgdGhlIG5leHQgRW5jb2RlKCkgY2FsbCBiZWluZyBpZ25vcmVk
LgotICBib29sIGRyb3BfbmV4dF9pbnB1dF9mcmFtZV87Ci0gIC8vIEdsb2JhbCByZWZlcmVuY2Vz
OyBtdXN0IGJlIGRlbGV0ZWQgaW4gUmVsZWFzZSgpLgotICBzdGQ6OnZlY3Rvcjxqb2JqZWN0PiBp
bnB1dF9idWZmZXJzXzsKLSAgUXVhbGl0eVNjYWxlciBxdWFsaXR5X3NjYWxlcl87Ci0gIC8vIER5
bmFtaWMgcmVzb2x1dGlvbiBjaGFuZ2UsIG9mZiBieSBkZWZhdWx0LgotICBib29sIHNjYWxlXzsK
LQotICAvLyBIMjY0IGJpdHN0cmVhbSBwYXJzZXIsIHVzZWQgdG8gZXh0cmFjdCBRUCBmcm9tIGVu
Y29kZWQgYml0c3RyZWFtcy4KLSAgd2VicnRjOjpIMjY0Qml0c3RyZWFtUGFyc2VyIGgyNjRfYml0
c3RyZWFtX3BhcnNlcl87Ci0KLSAgLy8gVlA5IHZhcmlhYmxlcyB0byBwb3B1bGF0ZSBjb2RlYyBz
cGVjaWZpYyBzdHJ1Y3R1cmUuCi0gIHdlYnJ0Yzo6R29mSW5mb1ZQOSBnb2ZfOyAvLyBDb250YWlu
cyBlYWNoIGZyYW1lJ3MgdGVtcG9yYWwgaW5mb3JtYXRpb24gZm9yCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBub24tZmxleGlibGUgVlA5IG1vZGUuCi0gIHVpbnQ4X3QgdGwwX3BpY19p
ZHhfOwotICBzaXplX3QgZ29mX2lkeF87Ci0KLSAgLy8gRUdMIGNvbnRleHQgLSBvd25lZCBieSBm
YWN0b3J5LCBzaG91bGQgbm90IGJlIGFsbG9jYXRlZC9kZXN0cm95ZWQKLSAgLy8gYnkgTWVkaWFD
b2RlY1ZpZGVvRW5jb2Rlci4KLSAgam9iamVjdCBlZ2xfY29udGV4dF87Ci0KLSAgLy8gVGVtcG9y
YXJ5IGZpeCBmb3IgVlA4LgotICAvLyBTZW5kcyBhIGtleSBmcmFtZSBpZiBmcmFtZXMgYXJlIGxh
cmdlbHkgc3BhY2VkIGFwYXJ0IChwb3NzaWJseQotICAvLyBjb3JyZXNwb25kaW5nIHRvIGEgbGFy
Z2UgaW1hZ2UgY2hhbmdlKS4KLSAgaW50NjRfdCBsYXN0X2ZyYW1lX3JlY2VpdmVkX21zXzsKLSAg
aW50IGZyYW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0X2tleV87Ci0gIHdlYnJ0Yzo6VmlkZW9Db2Rl
Y01vZGUgY29kZWNfbW9kZV87Ci0KLSAgYm9vbCBzd19mYWxsYmFja19yZXF1aXJlZF87Ci19Owot
Ci1NZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjp+TWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpIHsKLSAg
Ly8gQ2FsbCBSZWxlYXNlKCkgdG8gZW5zdXJlIG5vIG1vcmUgY2FsbGJhY2tzIHRvIHVzIGFmdGVy
IHdlIGFyZSBkZWxldGVkLgotICBSZWxlYXNlKCk7Ci19Ci0KLU1lZGlhQ29kZWNWaWRlb0VuY29k
ZXI6Ok1lZGlhQ29kZWNWaWRlb0VuY29kZXIoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvQ29kZWNUeXBlIGNvZGVjVHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBl
Z2xfY29udGV4dCkKLSAgICA6IGNvZGVjVHlwZV8oY29kZWNUeXBlKSwKLSAgICAgIGNhbGxiYWNr
XyhOVUxMKSwKLSAgICAgIGNvZGVjX3RocmVhZF8obmV3IFRocmVhZCgpKSwKLSAgICAgIGpfbWVk
aWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18oCi0gICAgICAgICAgam5pLAotICAgICAgICAg
IEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIiKSksCi0g
ICAgICBqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfKAotICAgICAgICAgIGpuaSwKLSAgICAg
ICAgICBqbmktPk5ld09iamVjdCgqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywK
LSAgICAgICAgICAgICAgICAgICAgICAgICBHZXRNZXRob2RJRChqbmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFz
c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxpbml0PiIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIigpViIpKSksCi0gICAgICBpbml0ZWRf
KGZhbHNlKSwKLSAgICAgIHVzZV9zdXJmYWNlXyhmYWxzZSksCi0gICAgICBwaWN0dXJlX2lkXygw
KSwKLSAgICAgIGVnbF9jb250ZXh0XyhlZ2xfY29udGV4dCksCi0gICAgICBzd19mYWxsYmFja19y
ZXF1aXJlZF8oZmFsc2UpIHsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUo
am5pKTsKLSAgLy8gSXQgd291bGQgYmUgbmljZSB0byBhdm9pZCBzcGlubmluZyB1cCBhIG5ldyB0
aHJlYWQgcGVyIE1lZGlhQ29kZWMsIGFuZAotICAvLyBpbnN0ZWFkIHJlLXVzZSBlLmcuIHRoZSBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkncyB8d29ya2VyX3RocmVhZF98LCBidXQgYnVnCi0gIC8vIDI3
MzIgbWVhbnMgdGhhdCBkZWFkbG9ja3MgYWJvdW5kLiAgVGhpcyBjbGFzcyBzeW5jaHJvbm91c2x5
IHRyYW1wb2xpbmVzCi0gIC8vIHRvIHxjb2RlY190aHJlYWRffCwgc28gaWYgYW55dGhpbmcgZWxz
ZSBjYW4gYmUgY29taW5nIHRvIF91c18gZnJvbQotICAvLyB8Y29kZWNfdGhyZWFkX3wsIG9yIGZy
b20gYW55IHRocmVhZCBob2xkaW5nIHRoZSB8X3NlbmRDcml0U2VjdHwgZGVzY3JpYmVkCi0gIC8v
IGluIHRoZSBidWcsIHdlIGhhdmUgYSBwcm9ibGVtLiAgRm9yIG5vdyB3b3JrIGFyb3VuZCB0aGF0
IHdpdGggYSBkZWRpY2F0ZWQKLSAgLy8gdGhyZWFkLgotICBjb2RlY190aHJlYWRfLT5TZXROYW1l
KCJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIiwgTlVMTCk7Ci0gIFJUQ19DSEVDSyhjb2RlY190aHJl
YWRfLT5TdGFydCgpKSA8PCAiRmFpbGVkIHRvIHN0YXJ0IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIi
OwotICBjb2RlY190aHJlYWRfY2hlY2tlcl8uRGV0YWNoRnJvbVRocmVhZCgpOwotICBqY2xhc3Mg
al9vdXRwdXRfYnVmZmVyX2luZm9fY2xhc3MgPQotICAgICAgRmluZENsYXNzKGpuaSwgIm9yZy93
ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciRPdXRwdXRCdWZmZXJJbmZvIik7Ci0gIGpfaW5p
dF9lbmNvZGVfbWV0aG9kXyA9IEdldE1ldGhvZElEKAotICAgICAgam5pLAotICAgICAgKmpfbWVk
aWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sCi0gICAgICAiaW5pdEVuY29kZSIsCi0gICAg
ICAiKExvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIkVmlkZW9Db2RlY1R5cGU7Igot
ICAgICAgIklJSUlMb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQkQ29udGV4dDspWiIpOwotICBqX2dldF9p
bnB1dF9idWZmZXJzX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwKLSAgICAgICpq
X21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLAotICAgICAgImdldElucHV0QnVmZmVy
cyIsCi0gICAgICAiKClbTGphdmEvbmlvL0J5dGVCdWZmZXI7Iik7Ci0gIGpfZGVxdWV1ZV9pbnB1
dF9idWZmZXJfbWV0aG9kXyA9IEdldE1ldGhvZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2Rl
Y192aWRlb19lbmNvZGVyX2NsYXNzXywgImRlcXVldWVJbnB1dEJ1ZmZlciIsICIoKUkiKTsKLSAg
al9lbmNvZGVfYnVmZmVyX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwgKmpfbWVk
aWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sICJlbmNvZGVCdWZmZXIiLCAiKFpJSUopWiIp
OwotICBqX2VuY29kZV90ZXh0dXJlX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgICAgam5p
LCAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywgImVuY29kZVRleHR1cmUiLAot
ICAgICAgICAiKFpJW0ZKKVoiKTsKLSAgal9yZWxlYXNlX21ldGhvZF8gPQotICAgICAgR2V0TWV0
aG9kSUQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywgInJlbGVhc2Ui
LCAiKClWIik7Ci0gIGpfc2V0X3JhdGVzX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgIGpu
aSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sICJzZXRSYXRlcyIsICIoSUkp
WiIpOwotICBqX2RlcXVldWVfb3V0cHV0X2J1ZmZlcl9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0g
ICAgICBqbmksCi0gICAgICAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywKLSAg
ICAgICJkZXF1ZXVlT3V0cHV0QnVmZmVyIiwKLSAgICAgICIoKUxvcmcvd2VicnRjL01lZGlhQ29k
ZWNWaWRlb0VuY29kZXIkT3V0cHV0QnVmZmVySW5mbzsiKTsKLSAgal9yZWxlYXNlX291dHB1dF9i
dWZmZXJfbWV0aG9kXyA9IEdldE1ldGhvZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192
aWRlb19lbmNvZGVyX2NsYXNzXywgInJlbGVhc2VPdXRwdXRCdWZmZXIiLCAiKEkpWiIpOwotCi0g
IGpfY29sb3JfZm9ybWF0X2ZpZWxkXyA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgKmpfbWVkaWFf
Y29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sICJjb2xvckZvcm1hdCIsICJJIik7Ci0gIGpfaW5m
b19pbmRleF9maWVsZF8gPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfb3V0cHV0X2J1ZmZlcl9p
bmZvX2NsYXNzLCAiaW5kZXgiLCAiSSIpOwotICBqX2luZm9fYnVmZmVyX2ZpZWxkXyA9IEdldEZp
ZWxkSUQoCi0gICAgICBqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZvX2NsYXNzLCAiYnVmZmVyIiwg
IkxqYXZhL25pby9CeXRlQnVmZmVyOyIpOwotICBqX2luZm9faXNfa2V5X2ZyYW1lX2ZpZWxkXyA9
Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm9fY2xhc3MsICJpc0tl
eUZyYW1lIiwgIloiKTsKLSAgal9pbmZvX3ByZXNlbnRhdGlvbl90aW1lc3RhbXBfdXNfZmllbGRf
ID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm9fY2xhc3MsICJw
cmVzZW50YXRpb25UaW1lc3RhbXBVcyIsICJKIik7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkp
KSB7Ci0gICAgQUxPR1cgPDwgIk1lZGlhQ29kZWNWaWRlb0VuY29kZXIgY3RvciBmYWlsZWQuIjsK
LSAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFj
a191bmF2YWlsYWJsZSAqLyk7Ci0gIH0KLSAgc3JhbmQodGltZShOVUxMKSk7Ci0gIEFsbG93Qmxv
Y2tpbmdDYWxscygpOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkluaXRF
bmNvZGUoCi0gICAgY29uc3Qgd2VicnRjOjpWaWRlb0NvZGVjKiBjb2RlY19zZXR0aW5ncywKLSAg
ICBpbnQzMl90IC8qIG51bWJlcl9vZl9jb3JlcyAqLywKLSAgICBzaXplX3QgLyogbWF4X3BheWxv
YWRfc2l6ZSAqLykgewotICBpZiAoY29kZWNfc2V0dGluZ3MgPT0gTlVMTCkgewotICAgIEFMT0dF
IDw8ICJOVUxMIFZpZGVvQ29kZWMgaW5zdGFuY2UiOwotICAgIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfRVJSX1BBUkFNRVRFUjsKLSAgfQotICAvLyBGYWN0b3J5IHNob3VsZCBndWFyZCBhZ2Fp
bnN0IG90aGVyIGNvZGVjcyBiZWluZyB1c2VkIHdpdGggdXMuCi0gIFJUQ19DSEVDSyhjb2RlY19z
ZXR0aW5ncy0+Y29kZWNUeXBlID09IGNvZGVjVHlwZV8pCi0gICAgICA8PCAiVW5zdXBwb3J0ZWQg
Y29kZWMgIiA8PCBjb2RlY19zZXR0aW5ncy0+Y29kZWNUeXBlIDw8ICIgZm9yICIKLSAgICAgIDw8
IGNvZGVjVHlwZV87Ci0gIGlmIChzd19mYWxsYmFja19yZXF1aXJlZF8pIHsKLSAgICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX09LOwotICB9Ci0gIGNvZGVjX21vZGVfID0gY29kZWNfc2V0dGlu
Z3MtPm1vZGU7Ci0gIGludCBpbml0X3dpZHRoID0gY29kZWNfc2V0dGluZ3MtPndpZHRoOwotICBp
bnQgaW5pdF9oZWlnaHQgPSBjb2RlY19zZXR0aW5ncy0+aGVpZ2h0OwotICAvLyBTY2FsaW5nIGlz
IGRpc2FibGVkIGZvciBWUDksIGJ1dCBvcHRpb25hbGx5IGVuYWJsZWQgZm9yIFZQOC4KLSAgLy8g
VE9ETyhwYm9zKTogRXh0cmFjdCBhdXRvbWF0aWNSZXNpemVPbiBvdXQgb2YgVlA4IHNldHRpbmdz
LgotICBzY2FsZV8gPSBmYWxzZTsKLSAgaWYgKGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNWUDgp
IHsKLSAgICBzY2FsZV8gPSBjb2RlY19zZXR0aW5ncy0+Y29kZWNTcGVjaWZpYy5WUDguYXV0b21h
dGljUmVzaXplT247Ci0gIH0gZWxzZSBpZiAoY29kZWNUeXBlXyAhPSBrVmlkZW9Db2RlY1ZQOSkg
ewotICAgIHNjYWxlXyA9IHRydWU7Ci0gIH0KLQotICBBTE9HRCA8PCAiSW5pdEVuY29kZSByZXF1
ZXN0OiAiIDw8IGluaXRfd2lkdGggPDwgIiB4ICIgPDwgaW5pdF9oZWlnaHQ7Ci0gIEFMT0dEIDw8
ICJFbmNvZGVyIGF1dG9tYXRpYyByZXNpemUgIiA8PCAoc2NhbGVfID8gImVuYWJsZWQiIDogImRp
c2FibGVkIik7Ci0KLSAgaWYgKHNjYWxlXykgewotICAgIGlmIChjb2RlY1R5cGVfID09IGtWaWRl
b0NvZGVjVlA4IHx8IGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNIMjY0KSB7Ci0gICAgICBxdWFs
aXR5X3NjYWxlcl8uSW5pdChjb2RlY1R5cGVfLCBjb2RlY19zZXR0aW5ncy0+c3RhcnRCaXRyYXRl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNfc2V0dGluZ3MtPndpZHRoLCBjb2Rl
Y19zZXR0aW5ncy0+aGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWNfc2V0
dGluZ3MtPm1heEZyYW1lcmF0ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIFdoZW4gYWRkaW5n
IGNvZGVjIHN1cHBvcnQgdG8gYWRkaXRpb25hbCBoYXJkd2FyZSBjb2RlY3MsIGFsc28gY29uZmln
dXJlCi0gICAgICAvLyB0aGVpciBRUCB0aHJlc2hvbGRzIGZvciBzY2FsaW5nLgotICAgICAgUlRD
X05PVFJFQUNIRUQoKSA8PCAiVW5zdXBwb3J0ZWQgY29kZWMgd2l0aG91dCBjb25maWd1cmVkIFFQ
IHRocmVzaG9sZHMuIjsKLSAgICAgIHNjYWxlXyA9IGZhbHNlOwotICAgIH0KLSAgICBRdWFsaXR5
U2NhbGVyOjpSZXNvbHV0aW9uIHJlcyA9IHF1YWxpdHlfc2NhbGVyXy5HZXRTY2FsZWRSZXNvbHV0
aW9uKCk7Ci0gICAgaW5pdF93aWR0aCA9IHJlcy53aWR0aDsKLSAgICBpbml0X2hlaWdodCA9IHJl
cy5oZWlnaHQ7Ci0gICAgQUxPR0QgPDwgIlNjYWxlZCByZXNvbHV0aW9uOiAiIDw8IGluaXRfd2lk
dGggPDwgIiB4ICIgPDwgaW5pdF9oZWlnaHQ7Ci0gIH0KLQotICByZXR1cm4gY29kZWNfdGhyZWFk
Xy0+SW52b2tlPGludDMyX3Q+KAotICAgICAgUlRDX0ZST01fSEVSRSwKLSAgICAgIEJpbmQoJk1l
ZGlhQ29kZWNWaWRlb0VuY29kZXI6OkluaXRFbmNvZGVPbkNvZGVjVGhyZWFkLCB0aGlzLCBpbml0
X3dpZHRoLAotICAgICAgICAgICBpbml0X2hlaWdodCwgY29kZWNfc2V0dGluZ3MtPnN0YXJ0Qml0
cmF0ZSwKLSAgICAgICAgICAgY29kZWNfc2V0dGluZ3MtPm1heEZyYW1lcmF0ZSwKLSAgICAgICAg
ICAgY29kZWNfc2V0dGluZ3MtPmV4cGVjdF9lbmNvZGVfZnJvbV90ZXh0dXJlKSk7Ci19Ci0KLWlu
dDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6RW5jb2RlKAotICAgIGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYgZnJhbWUsCi0gICAgY29uc3Qgd2VicnRjOjpDb2RlY1NwZWNpZmljSW5mbyog
LyogY29kZWNfc3BlY2lmaWNfaW5mbyAqLywKLSAgICBjb25zdCBzdGQ6OnZlY3Rvcjx3ZWJydGM6
OkZyYW1lVHlwZT4qIGZyYW1lX3R5cGVzKSB7Ci0gIHJldHVybiBjb2RlY190aHJlYWRfLT5JbnZv
a2U8aW50MzJfdD4oCi0gICAgICBSVENfRlJPTV9IRVJFLCBCaW5kKCZNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyOjpFbmNvZGVPbkNvZGVjVGhyZWFkLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBmcmFtZSwgZnJhbWVfdHlwZXMsIHJ0Yzo6VGltZU1pbGxpcygpKSk7Ci19Ci0KLWludDMy
X3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxiYWNr
KAotICAgIHdlYnJ0Yzo6RW5jb2RlZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrKSB7Ci0gIHJldHVy
biBjb2RlY190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0gICAgICBSVENfRlJPTV9IRVJFLAot
ICAgICAgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UmVnaXN0ZXJFbmNvZGVDb21wbGV0
ZUNhbGxiYWNrT25Db2RlY1RocmVhZCwKLSAgICAgICAgICAgdGhpcywgY2FsbGJhY2spKTsKLX0K
LQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpSZWxlYXNlKCkgewotICBBTE9HRCA8
PCAiRW5jb2RlclJlbGVhc2UgcmVxdWVzdCI7Ci0gIHJldHVybiBjb2RlY190aHJlYWRfLT5JbnZv
a2U8aW50MzJfdD4oCi0gICAgICBSVENfRlJPTV9IRVJFLCBCaW5kKCZNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyOjpSZWxlYXNlT25Db2RlY1RocmVhZCwgdGhpcykpOwotfQotCi1pbnQzMl90IE1lZGlh
Q29kZWNWaWRlb0VuY29kZXI6OlNldENoYW5uZWxQYXJhbWV0ZXJzKHVpbnQzMl90IC8qIHBhY2tl
dF9sb3NzICovLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ2NF90IC8qIHJ0dCAqLykgewotICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVD
X09LOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlNldFJhdGVzKHVpbnQz
Ml90IG5ld19iaXRfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgZnJhbWVfcmF0ZSkgewotICByZXR1cm4gY29kZWNfdGhyZWFkXy0+SW52b2tl
PGludDMyX3Q+KAotICAgICAgUlRDX0ZST01fSEVSRSwgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlcjo6U2V0UmF0ZXNPbkNvZGVjVGhyZWFkLCB0aGlzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBuZXdfYml0X3JhdGUsIGZyYW1lX3JhdGUpKTsKLX0KLQotdm9pZCBNZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyOjpPbk1lc3NhZ2UocnRjOjpNZXNzYWdlKiBtc2cpIHsKLSAgUlRDX0RDSEVDSyhj
b2RlY190aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgSk5JRW52KiBq
bmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFt
ZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLQotICAvLyBXZSBvbmx5IGV2ZXIgc2VuZCBvbmUgbWVz
c2FnZSB0byB8dGhpc3wgZGlyZWN0bHkgKG5vdCB0aHJvdWdoIGEgQmluZCgpJ2QKLSAgLy8gZnVu
Y3RvciksIHNvIGV4cGVjdCBubyBJRC9kYXRhLgotICBSVENfQ0hFQ0soIW1zZy0+bWVzc2FnZV9p
ZCkgPDwgIlVuZXhwZWN0ZWQgbWVzc2FnZSEiOwotICBSVENfQ0hFQ0soIW1zZy0+cGRhdGEpIDw8
ICJVbmV4cGVjdGVkIG1lc3NhZ2UhIjsKLSAgaWYgKCFpbml0ZWRfKSB7Ci0gICAgcmV0dXJuOwot
ICB9Ci0KLSAgLy8gSXQgd291bGQgYmUgbmljZSB0byByZWNvdmVyIGZyb20gYSBmYWlsdXJlIGhl
cmUgaWYgb25lIGhhcHBlbmVkLCBidXQgaXQncwotICAvLyB1bmNsZWFyIGhvdyB0byBzaWduYWwg
c3VjaCBhIGZhaWx1cmUgdG8gdGhlIGFwcCwgc28gaW5zdGVhZCB3ZSBzdGF5IHNpbGVudAotICAv
LyBhYm91dCBpdCBhbmQgbGV0IHRoZSBuZXh0IGFwcC1jYWxsZWQgQVBJIG1ldGhvZCByZXZlYWwg
dGhlIGJvcmtlZG5lc3MuCi0gIERlbGl2ZXJQZW5kaW5nT3V0cHV0cyhqbmkpOwotCi0gIC8vIElm
IHRoZXJlIGFyZW4ndCBtb3JlIGZyYW1lcyB0byBkZWxpdmVyLCB3ZSBjYW4gc3RhcnQgcG9sbGlu
ZyBhdCBsb3dlciByYXRlLgotICBpZiAoaW5wdXRfZnJhbWVfaW5mb3NfLmVtcHR5KCkpIHsKLSAg
ICBjb2RlY190aHJlYWRfLT5Qb3N0RGVsYXllZChSVENfRlJPTV9IRVJFLCBrTWVkaWFDb2RlY1Bv
bGxOb0ZyYW1lc01zLCB0aGlzKTsKLSAgfSBlbHNlIHsKLSAgICBjb2RlY190aHJlYWRfLT5Qb3N0
RGVsYXllZChSVENfRlJPTV9IRVJFLCBrTWVkaWFDb2RlY1BvbGxNcywgdGhpcyk7Ci0gIH0KLQot
ICAvLyBDYWxsIGxvZyBzdGF0aXN0aWNzIGhlcmUgc28gaXQncyBjYWxsZWQgZXZlbiBpZiBubyBm
cmFtZXMgYXJlIGJlaW5nCi0gIC8vIGRlbGl2ZXJlZC4KLSAgTG9nU3RhdGlzdGljcyhmYWxzZSk7
Ci19Ci0KLWJvb2wgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UmVzZXRDb2RlY09uQ29kZWNUaHJl
YWQoKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7Ci0gIEFMT0dFIDw8ICJSZXNldE9uQ29kZWNUaHJlYWQiOwotICBpZiAoUmVsZWFz
ZU9uQ29kZWNUaHJlYWQoKSAhPSBXRUJSVENfVklERU9fQ09ERUNfT0spIHsKLSAgICBBTE9HRSA8
PCAiUmVsZWFzaW5nIGNvZGVjIGZhaWxlZCBkdXJpbmcgcmVzZXQuIjsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgaWYgKEluaXRFbmNvZGVPbkNvZGVjVGhyZWFkKHdpZHRoXywgaGVpZ2h0Xywg
MCwgMCwgZmFsc2UpICE9Ci0gICAgICBXRUJSVENfVklERU9fQ09ERUNfT0spIHsKLSAgICBBTE9H
RSA8PCAiSW5pdGlhbGl6aW5nIGVuY29kZXIgZmFpbGVkIGR1cmluZyByZXNldC4iOwotICAgIHJl
dHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyOjpQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoCi0gICAgYm9vbCByZXNldF9p
Zl9mYWxsYmFja191bmF2YWlsYWJsZSkgewotICBBTE9HRSA8PCAiUHJvY2Vzc0hXRXJyb3JPbkNv
ZGVjVGhyZWFkIjsKLSAgaWYgKFZpZGVvRW5jb2Rlcjo6SXNTdXBwb3J0ZWRTb2Z0d2FyZSgKLSAg
ICAgICAgICBWaWRlb0VuY29kZXI6OkNvZGVjVG9FbmNvZGVyVHlwZShjb2RlY1R5cGVfKSkpIHsK
LSAgICBBTE9HRSA8PCAiRmFsbGJhY2sgdG8gU1cgZW5jb2Rlci4iOwotICAgIHN3X2ZhbGxiYWNr
X3JlcXVpcmVkXyA9IHRydWU7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgaWYgKHJlc2V0
X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlKSB7Ci0gICAgQUxPR0UgPDwgIlJlc2V0IGVuY29kZXIu
IjsKLSAgICByZXR1cm4gUmVzZXRDb2RlY09uQ29kZWNUaHJlYWQoKTsKLSAgfQotICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UHJvY2Vzc0hXRXJy
b3JPbkVuY29kZU9uQ29kZWNUaHJlYWQoKSB7Ci0gIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVh
ZCh0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgcmV0dXJuIHN3
X2ZhbGxiYWNrX3JlcXVpcmVkXyA/IFdFQlJUQ19WSURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FS
RQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV0VCUlRDX1ZJREVPX0NPREVDX0VS
Uk9SOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkluaXRFbmNvZGVPbkNv
ZGVjVGhyZWFkKAotICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGticHMsIGludCBmcHMs
IGJvb2wgdXNlX3N1cmZhY2UpIHsKLSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tlcl8u
Q2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVkXykgewot
ICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0gIH0KLSAgUlRDX0NIRUNLKCF1c2Vf
c3VyZmFjZSB8fCBlZ2xfY29udGV4dF8gIT0gbnVsbHB0cikgPDwgIkVHTCBjb250ZXh0IG5vdCBz
ZXQuIjsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAg
U2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLQotICBBTE9HRCA8PCAi
SW5pdEVuY29kZU9uQ29kZWNUaHJlYWQgVHlwZTogIiA8PCAgKGludCljb2RlY1R5cGVfIDw8ICIs
ICIgPDwKLSAgICAgIHdpZHRoIDw8ICIgeCAiIDw8IGhlaWdodCA8PCAiLiBCaXRyYXRlOiAiIDw8
IGticHMgPDwKLSAgICAgICIga2Jwcy4gRnBzOiAiIDw8IGZwczsKLSAgaWYgKGticHMgPT0gMCkg
ewotICAgIGticHMgPSBsYXN0X3NldF9iaXRyYXRlX2ticHNfOwotICB9Ci0gIGlmIChmcHMgPT0g
MCkgewotICAgIGZwcyA9IE1BWF9WSURFT19GUFM7Ci0gIH0KLQotICB3aWR0aF8gPSB3aWR0aDsK
LSAgaGVpZ2h0XyA9IGhlaWdodDsKLSAgbGFzdF9zZXRfYml0cmF0ZV9rYnBzXyA9IGticHM7Ci0g
IGxhc3Rfc2V0X2Zwc18gPSAoZnBzIDwgTUFYX1ZJREVPX0ZQUykgPyBmcHMgOiBNQVhfVklERU9f
RlBTOwotICB5dXZfc2l6ZV8gPSB3aWR0aF8gKiBoZWlnaHRfICogMyAvIDI7Ci0gIGZyYW1lc19y
ZWNlaXZlZF8gPSAwOwotICBmcmFtZXNfZW5jb2RlZF8gPSAwOwotICBmcmFtZXNfZHJvcHBlZF9t
ZWRpYV9lbmNvZGVyXyA9IDA7Ci0gIGNvbnNlY3V0aXZlX2Z1bGxfcXVldWVfZnJhbWVfZHJvcHNf
ID0gMDsKLSAgY3VycmVudF90aW1lc3RhbXBfdXNfID0gMDsKLSAgc3RhdF9zdGFydF90aW1lX21z
XyA9IHJ0Yzo6VGltZU1pbGxpcygpOwotICBjdXJyZW50X2ZyYW1lc18gPSAwOwotICBjdXJyZW50
X2J5dGVzXyA9IDA7Ci0gIGN1cnJlbnRfYWNjX3FwXyA9IDA7Ci0gIGN1cnJlbnRfZW5jb2Rpbmdf
dGltZV9tc18gPSAwOwotICBsYXN0X2lucHV0X3RpbWVzdGFtcF9tc18gPSAtMTsKLSAgbGFzdF9v
dXRwdXRfdGltZXN0YW1wX21zXyA9IC0xOwotICBvdXRwdXRfdGltZXN0YW1wXyA9IDA7Ci0gIG91
dHB1dF9yZW5kZXJfdGltZV9tc18gPSAwOwotICBpbnB1dF9mcmFtZV9pbmZvc18uY2xlYXIoKTsK
LSAgZHJvcF9uZXh0X2lucHV0X2ZyYW1lXyA9IGZhbHNlOwotICB1c2Vfc3VyZmFjZV8gPSB1c2Vf
c3VyZmFjZTsKLSAgcGljdHVyZV9pZF8gPSBzdGF0aWNfY2FzdDx1aW50MTZfdD4ocmFuZCgpKSAm
IDB4N0ZGRjsKLSAgZ29mXy5TZXRHb2ZJbmZvVlA5KHdlYnJ0Yzo6VGVtcG9yYWxTdHJ1Y3R1cmVN
b2RlOjprVGVtcG9yYWxTdHJ1Y3R1cmVNb2RlMSk7Ci0gIHRsMF9waWNfaWR4XyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3Q+KHJhbmQoKSk7Ci0gIGdvZl9pZHhfID0gMDsKLSAgbGFzdF9mcmFtZV9yZWNl
aXZlZF9tc18gPSAtMTsKLSAgZnJhbWVzX3JlY2VpdmVkX3NpbmNlX2xhc3Rfa2V5XyA9IGtNaW5L
ZXlGcmFtZUludGVydmFsOwotCi0gIC8vIFdlIGVuZm9yY2Ugbm8gZXh0cmEgc3RyaWRlL3BhZGRp
bmcgaW4gdGhlIGZvcm1hdCBjcmVhdGlvbiBzdGVwLgotICBqb2JqZWN0IGpfdmlkZW9fY29kZWNf
ZW51bSA9IEphdmFFbnVtRnJvbUluZGV4QW5kQ2xhc3NOYW1lKAotICAgICAgam5pLCAiTWVkaWFD
b2RlY1ZpZGVvRW5jb2RlciRWaWRlb0NvZGVjVHlwZSIsIGNvZGVjVHlwZV8pOwotICBjb25zdCBi
b29sIGVuY29kZV9zdGF0dXMgPSBqbmktPkNhbGxCb29sZWFuTWV0aG9kKAotICAgICAgKmpfbWVk
aWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sIGpfaW5pdF9lbmNvZGVfbWV0aG9kXywKLSAgICAgIGpf
dmlkZW9fY29kZWNfZW51bSwgd2lkdGgsIGhlaWdodCwga2JwcywgZnBzLAotICAgICAgKHVzZV9z
dXJmYWNlID8gZWdsX2NvbnRleHRfIDogbnVsbHB0cikpOwotICBpZiAoIWVuY29kZV9zdGF0dXMp
IHsKLSAgICBBTE9HRSA8PCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBlbmNvZGVyLiI7Ci0gICAgUHJv
Y2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZh
aWxhYmxlICovKTsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0g
IGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBp
bml0IGVuY29kZS4iOwotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZChmYWxzZSAvKiBy
ZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURF
T19DT0RFQ19FUlJPUjsKLSAgfQotCi0gIGlmICghdXNlX3N1cmZhY2UpIHsKLSAgICBqb2JqZWN0
QXJyYXkgaW5wdXRfYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8am9iamVjdEFycmF5PigKLSAg
ICAgICAgam5pLT5DYWxsT2JqZWN0TWV0aG9kKCpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJf
LAotICAgICAgICAgICAgal9nZXRfaW5wdXRfYnVmZmVyc19tZXRob2RfKSk7Ci0gICAgaWYgKENo
ZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICAgIEFMT0dFIDw8ICJFeGNlcHRpb24gaW4gZ2V0IGlu
cHV0IGJ1ZmZlcnMuIjsKLSAgICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZChmYWxzZSAv
KiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0KLQotICAgIGlmIChJc051bGwoam5pLCBpbnB1dF9i
dWZmZXJzKSkgewotICAgICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKGZhbHNlIC8qIHJl
c2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRVJST1I7Ci0gICAgfQotCi0gICAgc3dpdGNoIChHZXRJbnRGaWVsZChqbmksICpq
X21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfLAotICAgICAgICBqX2NvbG9yX2Zvcm1hdF9maWVs
ZF8pKSB7Ci0gICAgICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hcjoKLSAgICAgICAgZW5j
b2Rlcl9mb3VyY2NfID0gbGlieXV2OjpGT1VSQ0NfWVUxMjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIENPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXI6Ci0gICAgICBjYXNlIENPTE9SX1FD
T01fRm9ybWF0WVVWNDIwU2VtaVBsYW5hcjoKLSAgICAgIGNhc2UgQ09MT1JfUUNPTV9GT1JNQVRZ
VVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtOgotICAgICAgICBlbmNvZGVyX2ZvdXJjY18gPSBsaWJ5
dXY6OkZPVVJDQ19OVjEyOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IExPRyhMU19FUlJPUikgPDwgIldyb25nIGNvbG9yIGZvcm1hdC4iOwotICAgICAgICBQcm9jZXNz
SFdFcnJvck9uQ29kZWNUaHJlYWQoZmFsc2UgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFi
bGUgKi8pOwotICAgICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0K
LSAgICBzaXplX3QgbnVtX2lucHV0X2J1ZmZlcnMgPSBqbmktPkdldEFycmF5TGVuZ3RoKGlucHV0
X2J1ZmZlcnMpOwotICAgIFJUQ19DSEVDSyhpbnB1dF9idWZmZXJzXy5lbXB0eSgpKQotICAgICAg
ICA8PCAiVW5leHBlY3RlZCBkb3VibGUgSW5pdEVuY29kZSB3aXRob3V0IFJlbGVhc2UiOwotICAg
IGlucHV0X2J1ZmZlcnNfLnJlc2l6ZShudW1faW5wdXRfYnVmZmVycyk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1faW5wdXRfYnVmZmVyczsgKytpKSB7Ci0gICAgICBpbnB1dF9idWZm
ZXJzX1tpXSA9Ci0gICAgICAgICAgam5pLT5OZXdHbG9iYWxSZWYoam5pLT5HZXRPYmplY3RBcnJh
eUVsZW1lbnQoaW5wdXRfYnVmZmVycywgaSkpOwotICAgICAgaW50NjRfdCB5dXZfYnVmZmVyX2Nh
cGFjaXR5ID0KLSAgICAgICAgICBqbmktPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KGlucHV0X2J1
ZmZlcnNfW2ldKTsKLSAgICAgIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgICAgIEFM
T0dFIDw8ICJFeGNlcHRpb24gaW4gZ2V0IGRpcmVjdCBidWZmZXIgY2FwYWNpdHkuIjsKLSAgICAg
ICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxiYWNr
X3VuYXZhaWxhYmxlICovKTsKLSAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJP
UjsKLSAgICAgIH0KLSAgICAgIFJUQ19DSEVDSyh5dXZfYnVmZmVyX2NhcGFjaXR5ID49IHl1dl9z
aXplXykgPDwgIkluc3VmZmljaWVudCBjYXBhY2l0eSI7Ci0gICAgfQotICB9Ci0KLSAgaW5pdGVk
XyA9IHRydWU7Ci0gIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0KLWludDMyX3Qg
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6RW5jb2RlT25Db2RlY1RocmVhZCgKLSAgICBjb25zdCB3
ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lLAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6
RnJhbWVUeXBlPiogZnJhbWVfdHlwZXMsCi0gICAgY29uc3QgaW50NjRfdCBmcmFtZV9pbnB1dF90
aW1lX21zKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFs
aWRUaHJlYWQoKSk7Ci0gIGlmIChzd19mYWxsYmFja19yZXF1aXJlZF8pCi0gICAgcmV0dXJuIFdF
QlJUQ19WSURFT19DT0RFQ19GQUxMQkFDS19TT0ZUV0FSRTsKLSAgSk5JRW52KiBqbmkgPSBBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9y
ZWZfZnJhbWUoam5pKTsKLQotICBpZiAoIWluaXRlZF8pIHsKLSAgICByZXR1cm4gV0VCUlRDX1ZJ
REVPX0NPREVDX1VOSU5JVElBTElaRUQ7Ci0gIH0KLQotICBib29sIHNlbmRfa2V5X2ZyYW1lID0g
ZmFsc2U7Ci0gIGlmIChjb2RlY19tb2RlXyA9PSB3ZWJydGM6OmtSZWFsdGltZVZpZGVvKSB7Ci0g
ICAgKytmcmFtZXNfcmVjZWl2ZWRfc2luY2VfbGFzdF9rZXlfOwotICAgIGludDY0X3Qgbm93X21z
ID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gICAgaWYgKGxhc3RfZnJhbWVfcmVjZWl2ZWRfbXNfICE9
IC0xICYmCi0gICAgICAgIChub3dfbXMgLSBsYXN0X2ZyYW1lX3JlY2VpdmVkX21zXykgPiBrRnJh
bWVEaWZmVGhyZXNob2xkTXMpIHsKLSAgICAgIC8vIEFkZCBsaW1pdCB0byBwcmV2ZW50IHRyaWdn
ZXJpbmcgYSBrZXkgZm9yIGV2ZXJ5IGZyYW1lIGZvciB2ZXJ5IGxvdwotICAgICAgLy8gZnJhbWVy
YXRlcyAoZS5nLiBpZiBmcmFtZSBkaWZmID4ga0ZyYW1lRGlmZlRocmVzaG9sZE1zKS4KLSAgICAg
IGlmIChmcmFtZXNfcmVjZWl2ZWRfc2luY2VfbGFzdF9rZXlfID4ga01pbktleUZyYW1lSW50ZXJ2
YWwpIHsKLSAgICAgICAgQUxPR0QgPDwgIlNlbmQga2V5LCBmcmFtZSBkaWZmOiAiIDw8IChub3df
bXMgLSBsYXN0X2ZyYW1lX3JlY2VpdmVkX21zXyk7Ci0gICAgICAgIHNlbmRfa2V5X2ZyYW1lID0g
dHJ1ZTsKLSAgICAgIH0KLSAgICAgIGZyYW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0X2tleV8gPSAw
OwotICAgIH0KLSAgICBsYXN0X2ZyYW1lX3JlY2VpdmVkX21zXyA9IG5vd19tczsKLSAgfQotCi0g
IGZyYW1lc19yZWNlaXZlZF8rKzsKLSAgaWYgKCFEZWxpdmVyUGVuZGluZ091dHB1dHMoam5pKSkg
ewotICAgIGlmICghUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKAotICAgICAgICAgICAgdHJ1
ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLykpIHsKLSAgICAgIHJldHVybiBz
d19mYWxsYmFja19yZXF1aXJlZF8gPyBXRUJSVENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdB
UkUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBXRUJSVENfVklERU9fQ09E
RUNfRVJST1I7Ci0gICAgfQotICB9Ci0gIGlmIChmcmFtZXNfZW5jb2RlZF8gPCBrTWF4RW5jb2Rl
ZExvZ0ZyYW1lcykgewotICAgIEFMT0dEIDw8ICJFbmNvZGVyIGZyYW1lIGluICMgIiA8PCAoZnJh
bWVzX3JlY2VpdmVkXyAtIDEpCi0gICAgICAgICAgPDwgIi4gVFM6ICIgPDwgKGludCkoY3VycmVu
dF90aW1lc3RhbXBfdXNfIC8gMTAwMCkKLSAgICAgICAgICA8PCAiLiBROiAiIDw8IGlucHV0X2Zy
YW1lX2luZm9zXy5zaXplKCkgPDwgIi4gRnBzOiAiIDw8IGxhc3Rfc2V0X2Zwc18KLSAgICAgICAg
ICA8PCAiLiBLYnBzOiAiIDw8IGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc187Ci0gIH0KLQotICBpZiAo
ZHJvcF9uZXh0X2lucHV0X2ZyYW1lXykgewotICAgIEFMT0dXIDw8ICJFbmNvZGVyIGRyb3AgZnJh
bWUgLSBmYWlsZWQgY2FsbGJhY2suIjsKLSAgICBkcm9wX25leHRfaW5wdXRfZnJhbWVfID0gZmFs
c2U7Ci0gICAgY3VycmVudF90aW1lc3RhbXBfdXNfICs9IHJ0Yzo6a051bU1pY3Jvc2Vjc1BlclNl
YyAvIGxhc3Rfc2V0X2Zwc187Ci0gICAgZnJhbWVzX2Ryb3BwZWRfbWVkaWFfZW5jb2Rlcl8rKzsK
LSAgICBPbkRyb3BwZWRGcmFtZU9uQ29kZWNUaHJlYWQoKTsKLSAgICByZXR1cm4gV0VCUlRDX1ZJ
REVPX0NPREVDX09LOwotICB9Ci0KLSAgUlRDX0NIRUNLKGZyYW1lX3R5cGVzLT5zaXplKCkgPT0g
MSkgPDwgIlVuZXhwZWN0ZWQgc3RyZWFtIGNvdW50IjsKLQotICAvLyBDaGVjayBpZiB3ZSBhY2N1
bXVsYXRlZCB0b28gbWFueSBmcmFtZXMgaW4gZW5jb2RlciBpbnB1dCBidWZmZXJzIGFuZCBkcm9w
Ci0gIC8vIGZyYW1lIGlmIHNvLgotICBpZiAoaW5wdXRfZnJhbWVfaW5mb3NfLnNpemUoKSA+IE1B
WF9FTkNPREVSX1FfU0laRSkgewotICAgIEFMT0dEIDw8ICJBbHJlYWR5ICIgPDwgaW5wdXRfZnJh
bWVfaW5mb3NfLnNpemUoKQotICAgICAgICAgIDw8ICIgZnJhbWVzIGluIHRoZSBxdWV1ZSwgZHJv
cHBpbmciCi0gICAgICAgICAgPDwgIi4gVFM6ICIgPDwgKGludCkoY3VycmVudF90aW1lc3RhbXBf
dXNfIC8gMTAwMCkKLSAgICAgICAgICA8PCAiLiBGcHM6ICIgPDwgbGFzdF9zZXRfZnBzXwotICAg
ICAgICAgIDw8ICIuIENvbnNlY3V0aXZlIGRyb3BzOiAiIDw8IGNvbnNlY3V0aXZlX2Z1bGxfcXVl
dWVfZnJhbWVfZHJvcHNfOwotICAgIGN1cnJlbnRfdGltZXN0YW1wX3VzXyArPSBydGM6OmtOdW1N
aWNyb3NlY3NQZXJTZWMgLyBsYXN0X3NldF9mcHNfOwotICAgIGNvbnNlY3V0aXZlX2Z1bGxfcXVl
dWVfZnJhbWVfZHJvcHNfKys7Ci0gICAgaWYgKGNvbnNlY3V0aXZlX2Z1bGxfcXVldWVfZnJhbWVf
ZHJvcHNfID49Ci0gICAgICAgIEVOQ09ERVJfU1RBTExfRlJBTUVEUk9QX1RIUkVTSE9MRCkgewot
ICAgICAgQUxPR0UgPDwgIkVuY29kZXIgZ290IHN0dWNrLiI7Ci0gICAgICByZXR1cm4gUHJvY2Vz
c0hXRXJyb3JPbkVuY29kZU9uQ29kZWNUaHJlYWQoKTsKLSAgICB9Ci0gICAgZnJhbWVzX2Ryb3Bw
ZWRfbWVkaWFfZW5jb2Rlcl8rKzsKLSAgICBPbkRyb3BwZWRGcmFtZU9uQ29kZWNUaHJlYWQoKTsK
LSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotICB9Ci0gIGNvbnNlY3V0aXZlX2Z1
bGxfcXVldWVfZnJhbWVfZHJvcHNfID0gMDsKLQotICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRj
OjpWaWRlb0ZyYW1lQnVmZmVyPiBpbnB1dF9idWZmZXIoCi0gICAgICBmcmFtZS52aWRlb19mcmFt
ZV9idWZmZXIoKSk7Ci0gIGlmIChzY2FsZV8pIHsKLSAgICAvLyBDaGVjayBmcmFtZXJhdGUgYmVm
b3JlIHNwYXRpYWwgcmVzb2x1dGlvbiBjaGFuZ2UuCi0gICAgcXVhbGl0eV9zY2FsZXJfLk9uRW5j
b2RlRnJhbWUoZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCkpOwotICAgIGNvbnN0IHdlYnJ0
Yzo6UXVhbGl0eVNjYWxlcjo6UmVzb2x1dGlvbiBzY2FsZWRfcmVzb2x1dGlvbiA9Ci0gICAgICAg
IHF1YWxpdHlfc2NhbGVyXy5HZXRTY2FsZWRSZXNvbHV0aW9uKCk7Ci0gICAgaWYgKHNjYWxlZF9y
ZXNvbHV0aW9uLndpZHRoICE9IGZyYW1lLndpZHRoKCkgfHwKLSAgICAgICAgc2NhbGVkX3Jlc29s
dXRpb24uaGVpZ2h0ICE9IGZyYW1lLmhlaWdodCgpKSB7Ci0gICAgICBpZiAoaW5wdXRfYnVmZmVy
LT5uYXRpdmVfaGFuZGxlKCkgIT0gbnVsbHB0cikgewotICAgICAgICBpbnB1dF9idWZmZXIgPSBz
dGF0aWNfY2FzdDxBbmRyb2lkVGV4dHVyZUJ1ZmZlcio+KGlucHV0X2J1ZmZlci5nZXQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0+Q3JvcFNjYWxlQW5kUm90YXRlKGZyYW1lLndpZHRo
KCksIGZyYW1lLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjYWxlZF9yZXNvbHV0aW9uLndpZHRoLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkX3Jlc29sdXRpb24uaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VicnRjOjprVmlk
ZW9Sb3RhdGlvbl8wKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlucHV0X2J1ZmZlciA9IHF1
YWxpdHlfc2NhbGVyXy5HZXRTY2FsZWRCdWZmZXIoaW5wdXRfYnVmZmVyKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICBWaWRlb0ZyYW1lIGlucHV0X2ZyYW1lKGlucHV0X2J1ZmZlciwgZnJhbWUu
dGltZXN0YW1wKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUucmVuZGVyX3RpbWVf
bXMoKSwgZnJhbWUucm90YXRpb24oKSk7Ci0KLSAgaWYgKCFNYXliZVJlY29uZmlndXJlRW5jb2Rl
ck9uQ29kZWNUaHJlYWQoaW5wdXRfZnJhbWUpKSB7Ci0gICAgQUxPR0UgPDwgIkZhaWxlZCB0byBy
ZWNvbmZpZ3VyZSBlbmNvZGVyLiI7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJP
UjsKLSAgfQotCi0gIGNvbnN0IGJvb2wga2V5X2ZyYW1lID0KLSAgICAgIGZyYW1lX3R5cGVzLT5m
cm9udCgpICE9IHdlYnJ0Yzo6a1ZpZGVvRnJhbWVEZWx0YSB8fCBzZW5kX2tleV9mcmFtZTsKLSAg
Ym9vbCBlbmNvZGVfc3RhdHVzID0gdHJ1ZTsKLSAgaWYgKCFpbnB1dF9mcmFtZS52aWRlb19mcmFt
ZV9idWZmZXIoKS0+bmF0aXZlX2hhbmRsZSgpKSB7Ci0gICAgaW50IGpfaW5wdXRfYnVmZmVyX2lu
ZGV4ID0gam5pLT5DYWxsSW50TWV0aG9kKCpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfLAot
ICAgICAgICBqX2RlcXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF8pOwotICAgIGlmIChDaGVja0V4
Y2VwdGlvbihqbmkpKSB7Ci0gICAgICBBTE9HRSA8PCAiRXhjZXB0aW9uIGluIGRlcXVldSBpbnB1
dCBidWZmZXIuIjsKLSAgICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uRW5jb2RlT25Db2RlY1Ro
cmVhZCgpOwotICAgIH0KLSAgICBpZiAoal9pbnB1dF9idWZmZXJfaW5kZXggPT0gLTEpIHsKLSAg
ICAgIC8vIFZpZGVvIGNvZGVjIGZhbGxzIGJlaGluZCAtIG5vIGlucHV0IGJ1ZmZlciBhdmFpbGFi
bGUuCi0gICAgICBBTE9HVyA8PCAiRW5jb2RlciBkcm9wIGZyYW1lIC0gbm8gaW5wdXQgYnVmZmVy
cyBhdmFpbGFibGUiOwotICAgICAgaWYgKGZyYW1lc19yZWNlaXZlZF8gPiAxKSB7Ci0gICAgICAg
IGN1cnJlbnRfdGltZXN0YW1wX3VzXyArPSBydGM6OmtOdW1NaWNyb3NlY3NQZXJTZWMgLyBsYXN0
X3NldF9mcHNfOwotICAgICAgICBmcmFtZXNfZHJvcHBlZF9tZWRpYV9lbmNvZGVyXysrOwotICAg
ICAgICBPbkRyb3BwZWRGcmFtZU9uQ29kZWNUaHJlYWQoKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIC8vIElucHV0IGJ1ZmZlcnMgYXJlIG5vdCByZWFkeSBhZnRlciBjb2RlYyBpbml0aWFsaXph
dGlvbiwgSFcgaXMgc3RpbGwKLSAgICAgICAgLy8gYWxsb2NhdGluZyB0aG1lIC0gdGhpcyBpcyBl
eHBlY3RlZCBhbmQgc2hvdWxkIG5vdCByZXN1bHQgaW4gZHJvcAotICAgICAgICAvLyBmcmFtZSBy
ZXBvcnQuCi0gICAgICAgIGZyYW1lc19yZWNlaXZlZF8gPSAwOwotICAgICAgfQotICAgICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsgIC8vIFRPRE8oZmlzY2htYW4pOiBzZWUgd2VicnRj
IGJ1ZyAyODg3LgotICAgIH0gZWxzZSBpZiAoal9pbnB1dF9idWZmZXJfaW5kZXggPT0gLTIpIHsK
LSAgICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uRW5jb2RlT25Db2RlY1RocmVhZCgpOwotICAg
IH0KLSAgICBlbmNvZGVfc3RhdHVzID0gRW5jb2RlQnl0ZUJ1ZmZlck9uQ29kZWNUaHJlYWQoam5p
LCBrZXlfZnJhbWUsIGlucHV0X2ZyYW1lLAotICAgICAgICBqX2lucHV0X2J1ZmZlcl9pbmRleCk7
Ci0gIH0gZWxzZSB7Ci0gICAgZW5jb2RlX3N0YXR1cyA9IEVuY29kZVRleHR1cmVPbkNvZGVjVGhy
ZWFkKGpuaSwga2V5X2ZyYW1lLCBpbnB1dF9mcmFtZSk7Ci0gIH0KLQotICBpZiAoIWVuY29kZV9z
dGF0dXMpIHsKLSAgICBBTE9HRSA8PCAiRmFpbGVkIGVuY29kZSBmcmFtZSB3aXRoIHRpbWVzdGFt
cDogIiA8PCBpbnB1dF9mcmFtZS50aW1lc3RhbXAoKTsKLSAgICByZXR1cm4gUHJvY2Vzc0hXRXJy
b3JPbkVuY29kZU9uQ29kZWNUaHJlYWQoKTsKLSAgfQotCi0gIC8vIFNhdmUgaW5wdXQgaW1hZ2Ug
dGltZXN0YW1wcyBmb3IgbGF0ZXIgb3V0cHV0LgotICBpbnB1dF9mcmFtZV9pbmZvc18uZW1wbGFj
ZV9iYWNrKAotICAgICAgZnJhbWVfaW5wdXRfdGltZV9tcywgaW5wdXRfZnJhbWUudGltZXN0YW1w
KCksCi0gICAgICBpbnB1dF9mcmFtZS5yZW5kZXJfdGltZV9tcygpLCBpbnB1dF9mcmFtZS5yb3Rh
dGlvbigpKTsKLQotICBsYXN0X2lucHV0X3RpbWVzdGFtcF9tc18gPQotICAgICAgY3VycmVudF90
aW1lc3RhbXBfdXNfIC8gcnRjOjprTnVtTWljcm9zZWNzUGVyTWlsbGlzZWM7Ci0KLSAgY3VycmVu
dF90aW1lc3RhbXBfdXNfICs9IHJ0Yzo6a051bU1pY3Jvc2Vjc1BlclNlYyAvIGxhc3Rfc2V0X2Zw
c187Ci0KLSAgY29kZWNfdGhyZWFkXy0+Q2xlYXIodGhpcyk7Ci0gIGNvZGVjX3RocmVhZF8tPlBv
c3REZWxheWVkKFJUQ19GUk9NX0hFUkUsIGtNZWRpYUNvZGVjUG9sbE1zLCB0aGlzKTsKLQotICBp
ZiAoIURlbGl2ZXJQZW5kaW5nT3V0cHV0cyhqbmkpKSB7Ci0gICAgcmV0dXJuIFByb2Nlc3NIV0Vy
cm9yT25FbmNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0gIH0KLSAgcmV0dXJuIFdFQlJUQ19WSURFT19D
T0RFQ19PSzsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpNYXliZVJlY29uZmln
dXJlRW5jb2Rlck9uQ29kZWNUaHJlYWQoCi0gICAgY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBm
cmFtZSkgewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlk
VGhyZWFkKCkpOwotCi0gIGNvbnN0IGJvb2wgaXNfdGV4dHVyZV9mcmFtZSA9Ci0gICAgICBmcmFt
ZS52aWRlb19mcmFtZV9idWZmZXIoKS0+bmF0aXZlX2hhbmRsZSgpICE9IG51bGxwdHI7Ci0gIGNv
bnN0IGJvb2wgcmVjb25maWd1cmVfZHVlX3RvX2Zvcm1hdCA9IGlzX3RleHR1cmVfZnJhbWUgIT0g
dXNlX3N1cmZhY2VfOwotICBjb25zdCBib29sIHJlY29uZmlndXJlX2R1ZV90b19zaXplID0KLSAg
ICAgIGZyYW1lLndpZHRoKCkgIT0gd2lkdGhfIHx8IGZyYW1lLmhlaWdodCgpICE9IGhlaWdodF87
Ci0KLSAgaWYgKHJlY29uZmlndXJlX2R1ZV90b19mb3JtYXQpIHsKLSAgICAgIEFMT0dEIDw8ICJS
ZWNvbmZpZ3VyZSBlbmNvZGVyIGR1ZSB0byBmb3JtYXQgY2hhbmdlLiAiCi0gICAgICAgICAgICA8
PCAodXNlX3N1cmZhY2VfID8KLSAgICAgICAgICAgICAgICAiUmVjb25maWd1cmluZyB0byBlbmNv
ZGUgZnJvbSBieXRlIGJ1ZmZlci4iIDoKLSAgICAgICAgICAgICAgICAiUmVjb25maWd1cmluZyB0
byBlbmNvZGUgZnJvbSB0ZXh0dXJlLiIpOwotICAgICAgTG9nU3RhdGlzdGljcyh0cnVlKTsKLSAg
fQotICBpZiAocmVjb25maWd1cmVfZHVlX3RvX3NpemUpIHsKLSAgICBBTE9HVyA8PCAiUmVjb25m
aWd1cmUgZW5jb2RlciBkdWUgdG8gZnJhbWUgcmVzb2x1dGlvbiBjaGFuZ2UgZnJvbSAiCi0gICAg
ICAgIDw8IHdpZHRoXyA8PCAiIHggIiA8PCBoZWlnaHRfIDw8ICIgdG8gIiA8PCBmcmFtZS53aWR0
aCgpIDw8ICIgeCAiCi0gICAgICAgIDw8IGZyYW1lLmhlaWdodCgpOwotICAgIExvZ1N0YXRpc3Rp
Y3ModHJ1ZSk7Ci0gICAgd2lkdGhfID0gZnJhbWUud2lkdGgoKTsKLSAgICBoZWlnaHRfID0gZnJh
bWUuaGVpZ2h0KCk7Ci0gIH0KLQotICBpZiAoIXJlY29uZmlndXJlX2R1ZV90b19mb3JtYXQgJiYg
IXJlY29uZmlndXJlX2R1ZV90b19zaXplKQotICAgIHJldHVybiB0cnVlOwotCi0gIFJlbGVhc2VP
bkNvZGVjVGhyZWFkKCk7Ci0KLSAgcmV0dXJuIEluaXRFbmNvZGVPbkNvZGVjVGhyZWFkKHdpZHRo
XywgaGVpZ2h0XywgMCwgMCAsIGlzX3RleHR1cmVfZnJhbWUpID09Ci0gICAgICBXRUJSVENfVklE
RU9fQ09ERUNfT0s7Ci19Ci0KLWJvb2wgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6RW5jb2RlQnl0
ZUJ1ZmZlck9uQ29kZWNUaHJlYWQoSk5JRW52KiBqbmksCi0gICAgYm9vbCBrZXlfZnJhbWUsIGNv
bnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUsIGludCBpbnB1dF9idWZmZXJfaW5kZXgpIHsK
LSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKLSAgUlRDX0NIRUNLKCF1c2Vfc3VyZmFjZV8pOwotCi0gIGpvYmplY3Qgal9pbnB1dF9idWZm
ZXIgPSBpbnB1dF9idWZmZXJzX1tpbnB1dF9idWZmZXJfaW5kZXhdOwotICB1aW50OF90KiB5dXZf
YnVmZmVyID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0
QnVmZmVyQWRkcmVzcyhqX2lucHV0X2J1ZmZlcikpOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5p
KSkgewotICAgIEFMT0dFIDw8ICJFeGNlcHRpb24gaW4gZ2V0IGRpcmVjdCBidWZmZXIgYWRkcmVz
cy4iOwotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCh0cnVlIC8qIHJlc2V0X2lmX2Zh
bGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgUlRDX0NI
RUNLKHl1dl9idWZmZXIpIDw8ICJJbmRpcmVjdCBidWZmZXI/PyI7Ci0gIFJUQ19DSEVDSyghbGli
eXV2OjpDb252ZXJ0RnJvbUk0MjAoCi0gICAgICBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS0+
RGF0YVkoKSwKLSAgICAgIGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJpZGVZKCksCi0g
ICAgICBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS0+RGF0YVUoKSwKLSAgICAgIGZyYW1lLnZp
ZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJpZGVVKCksCi0gICAgICBmcmFtZS52aWRlb19mcmFtZV9i
dWZmZXIoKS0+RGF0YVYoKSwKLSAgICAgIGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJp
ZGVWKCksCi0gICAgICB5dXZfYnVmZmVyLCB3aWR0aF8sIHdpZHRoXywgaGVpZ2h0XywgZW5jb2Rl
cl9mb3VyY2NfKSkKLSAgICAgIDw8ICJDb252ZXJ0RnJvbUk0MjAgZmFpbGVkIjsKLQotICBib29s
IGVuY29kZV9zdGF0dXMgPSBqbmktPkNhbGxCb29sZWFuTWV0aG9kKCpqX21lZGlhX2NvZGVjX3Zp
ZGVvX2VuY29kZXJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpfZW5jb2RlX2J1ZmZlcl9tZXRob2RfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtleV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnB1dF9idWZmZXJfaW5kZXgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXV2X3NpemVfLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZXN0YW1wX3VzXyk7Ci0g
IGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBl
bmNvZGUgYnVmZmVyLiI7Ci0gICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKHRydWUgLyog
cmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotICByZXR1cm4gZW5jb2RlX3N0YXR1czsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyOjpFbmNvZGVUZXh0dXJlT25Db2RlY1RocmVhZChKTklFbnYqIGpuaSwKLSAgICBib29sIGtl
eV9mcmFtZSwgY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSkgewotICBSVENfRENIRUNL
KGNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfQ0hF
Q0sodXNlX3N1cmZhY2VfKTsKLSAgTmF0aXZlSGFuZGxlSW1wbCogaGFuZGxlID0gc3RhdGljX2Nh
c3Q8TmF0aXZlSGFuZGxlSW1wbCo+KAotICAgICAgZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCkt
Pm5hdGl2ZV9oYW5kbGUoKSk7Ci0gIGpmbG9hdEFycmF5IHNhbXBsaW5nX21hdHJpeCA9IGhhbmRs
ZS0+c2FtcGxpbmdfbWF0cml4LlRvSmF2YShqbmkpOwotICBib29sIGVuY29kZV9zdGF0dXMgPSBq
bmktPkNhbGxCb29sZWFuTWV0aG9kKCpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfZW5jb2RlX3RleHR1
cmVfbWV0aG9kXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrZXlfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaGFuZGxlLT5vZXNfdGV4dHVyZV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzYW1wbGluZ19tYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF90aW1lc3RhbXBfdXNfKTsKLSAgaWYgKENo
ZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8PCAiRXhjZXB0aW9uIGluIGVuY29kZSB0
ZXh0dXJlLiI7Ci0gICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKHRydWUgLyogcmVzZXRf
aWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBy
ZXR1cm4gZW5jb2RlX3N0YXR1czsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVy
OjpSZWdpc3RlckVuY29kZUNvbXBsZXRlQ2FsbGJhY2tPbkNvZGVjVGhyZWFkKAotICAgIHdlYnJ0
Yzo6RW5jb2RlZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNf
dGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIEpOSUVudiogam5pID0g
QXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9j
YWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGNhbGxiYWNrXyA9IGNhbGxiYWNrOwotICByZXR1cm4gV0VC
UlRDX1ZJREVPX0NPREVDX09LOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6
OlJlbGVhc2VPbkNvZGVjVGhyZWFkKCkgewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVj
a2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoIWluaXRlZF8pIHsKLSAgICByZXR1
cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotICB9Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3Vy
cmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIEFMT0dEIDw8ICJFbmNvZGVyUmVsZWFzZU9uQ29kZWNU
aHJlYWQ6IEZyYW1lcyByZWNlaXZlZDogIiA8PAotICAgICAgZnJhbWVzX3JlY2VpdmVkXyA8PCAi
LiBFbmNvZGVkOiAiIDw8IGZyYW1lc19lbmNvZGVkXyA8PAotICAgICAgIi4gRHJvcHBlZDogIiA8
PCBmcmFtZXNfZHJvcHBlZF9tZWRpYV9lbmNvZGVyXzsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBs
b2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnB1dF9idWZm
ZXJzXy5zaXplKCk7ICsraSkKLSAgICBqbmktPkRlbGV0ZUdsb2JhbFJlZihpbnB1dF9idWZmZXJz
X1tpXSk7Ci0gIGlucHV0X2J1ZmZlcnNfLmNsZWFyKCk7Ci0gIGpuaS0+Q2FsbFZvaWRNZXRob2Qo
KmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sIGpfcmVsZWFzZV9tZXRob2RfKTsKLSAgaWYg
KENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8PCAiRXhjZXB0aW9uIGluIHJlbGVh
c2UuIjsKLSAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoZmFsc2UgLyogcmVzZXRfaWZf
ZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNf
RVJST1I7Ci0gIH0KLSAgcnRjOjpNZXNzYWdlUXVldWVNYW5hZ2VyOjpDbGVhcih0aGlzKTsKLSAg
aW5pdGVkXyA9IGZhbHNlOwotICB1c2Vfc3VyZmFjZV8gPSBmYWxzZTsKLSAgQUxPR0QgPDwgIkVu
Y29kZXJSZWxlYXNlT25Db2RlY1RocmVhZCBkb25lLiI7Ci0gIHJldHVybiBXRUJSVENfVklERU9f
Q09ERUNfT0s7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6U2V0UmF0ZXNP
bkNvZGVjVGhyZWFkKHVpbnQzMl90IG5ld19iaXRfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGZyYW1lX3JhdGUpIHsK
LSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKLSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVkXykKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX09LOwotICBmcmFtZV9yYXRlID0gKGZyYW1lX3JhdGUgPCBNQVhfQUxMT1dFRF9WSURF
T19GUFMpID8KLSAgICAgIGZyYW1lX3JhdGUgOiBNQVhfQUxMT1dFRF9WSURFT19GUFM7Ci0gIGlm
IChsYXN0X3NldF9iaXRyYXRlX2ticHNfID09IG5ld19iaXRfcmF0ZSAmJgotICAgICAgbGFzdF9z
ZXRfZnBzXyA9PSBmcmFtZV9yYXRlKSB7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19P
SzsKLSAgfQotICBpZiAoc2NhbGVfKSB7Ci0gICAgcXVhbGl0eV9zY2FsZXJfLlJlcG9ydEZyYW1l
cmF0ZShmcmFtZV9yYXRlKTsKLSAgfQotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJl
YWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkp
OwotICBpZiAobmV3X2JpdF9yYXRlID4gMCkgewotICAgIGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc18g
PSBuZXdfYml0X3JhdGU7Ci0gIH0KLSAgaWYgKGZyYW1lX3JhdGUgPiAwKSB7Ci0gICAgbGFzdF9z
ZXRfZnBzXyA9IGZyYW1lX3JhdGU7Ci0gIH0KLSAgYm9vbCByZXQgPSBqbmktPkNhbGxCb29sZWFu
TWV0aG9kKCpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgal9zZXRfcmF0ZXNfbWV0aG9kXywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc18sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3NldF9mcHNfKTsKLSAgaWYgKENo
ZWNrRXhjZXB0aW9uKGpuaSkgfHwgIXJldCkgewotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1Ro
cmVhZCh0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICByZXR1
cm4gc3dfZmFsbGJhY2tfcmVxdWlyZWRfID8gV0VCUlRDX1ZJREVPX0NPREVDX09LCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAg
fQotICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotfQotCi1pbnQgTWVkaWFDb2RlY1Zp
ZGVvRW5jb2Rlcjo6R2V0T3V0cHV0QnVmZmVySW5mb0luZGV4KAotICAgIEpOSUVudiogam5pLAot
ICAgIGpvYmplY3Qgal9vdXRwdXRfYnVmZmVyX2luZm8pIHsKLSAgcmV0dXJuIEdldEludEZpZWxk
KGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8sIGpfaW5mb19pbmRleF9maWVsZF8pOwotfQotCi1q
b2JqZWN0IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkdldE91dHB1dEJ1ZmZlckluZm9CdWZmZXIo
Ci0gICAgSk5JRW52KiBqbmksCi0gICAgam9iamVjdCBqX291dHB1dF9idWZmZXJfaW5mbykgewot
ICByZXR1cm4gR2V0T2JqZWN0RmllbGQoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbywgal9pbmZv
X2J1ZmZlcl9maWVsZF8pOwotfQotCi1ib29sIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkdldE91
dHB1dEJ1ZmZlckluZm9Jc0tleUZyYW1lKAotICAgIEpOSUVudiogam5pLAotICAgIGpvYmplY3Qg
al9vdXRwdXRfYnVmZmVyX2luZm8pIHsKLSAgcmV0dXJuIEdldEJvb2xlYW5GaWVsZChqbmksIGpf
b3V0cHV0X2J1ZmZlcl9pbmZvLCBqX2luZm9faXNfa2V5X2ZyYW1lX2ZpZWxkXyk7Ci19Ci0KLWps
b25nIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkdldE91dHB1dEJ1ZmZlckluZm9QcmVzZW50YXRp
b25UaW1lc3RhbXBVcygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqb2JqZWN0IGpfb3V0cHV0X2J1
ZmZlcl9pbmZvKSB7Ci0gIHJldHVybiBHZXRMb25nRmllbGQoCi0gICAgICBqbmksIGpfb3V0cHV0
X2J1ZmZlcl9pbmZvLCBqX2luZm9fcHJlc2VudGF0aW9uX3RpbWVzdGFtcF91c19maWVsZF8pOwot
fQotCi1ib29sIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkRlbGl2ZXJQZW5kaW5nT3V0cHV0cyhK
TklFbnYqIGpuaSkgewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxsZWRP
blZhbGlkVGhyZWFkKCkpOwotCi0gIHdoaWxlICh0cnVlKSB7Ci0gICAgam9iamVjdCBqX291dHB1
dF9idWZmZXJfaW5mbyA9IGpuaS0+Q2FsbE9iamVjdE1ldGhvZCgKLSAgICAgICAgKmpfbWVkaWFf
Y29kZWNfdmlkZW9fZW5jb2Rlcl8sIGpfZGVxdWV1ZV9vdXRwdXRfYnVmZmVyX21ldGhvZF8pOwot
ICAgIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgICBBTE9HRSA8PCAiRXhjZXB0aW9u
IGluIHNldCBkZXF1ZXVlIG91dHB1dCBidWZmZXIuIjsKLSAgICAgIFByb2Nlc3NIV0Vycm9yT25D
b2RlY1RocmVhZCh0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAg
ICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgfQotICAgIGlmIChJc051
bGwoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbykpIHsKLSAgICAgIGJyZWFrOwotICAgIH0KLQot
ICAgIGludCBvdXRwdXRfYnVmZmVyX2luZGV4ID0KLSAgICAgICAgR2V0T3V0cHV0QnVmZmVySW5m
b0luZGV4KGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8pOwotICAgIGlmIChvdXRwdXRfYnVmZmVy
X2luZGV4ID09IC0xKSB7Ci0gICAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQodHJ1ZSAv
KiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gR2V0IGtleSBhbmQgY29uZmlnIGZyYW1lIGZsYWdzLgotICAgIGpv
YmplY3Qgal9vdXRwdXRfYnVmZmVyID0KLSAgICAgICAgR2V0T3V0cHV0QnVmZmVySW5mb0J1ZmZl
cihqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZvKTsKLSAgICBib29sIGtleV9mcmFtZSA9IEdldE91
dHB1dEJ1ZmZlckluZm9Jc0tleUZyYW1lKGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8pOwotCi0g
ICAgLy8gR2V0IGZyYW1lIHRpbWVzdGFtcHMgZnJvbSBhIHF1ZXVlIC0gZm9yIG5vbiBjb25maWcg
ZnJhbWVzIG9ubHkuCi0gICAgaW50NjRfdCBlbmNvZGluZ19zdGFydF90aW1lX21zID0gMDsKLSAg
ICBpbnQ2NF90IGZyYW1lX2VuY29kaW5nX3RpbWVfbXMgPSAwOwotICAgIGxhc3Rfb3V0cHV0X3Rp
bWVzdGFtcF9tc18gPQotICAgICAgICBHZXRPdXRwdXRCdWZmZXJJbmZvUHJlc2VudGF0aW9uVGlt
ZXN0YW1wVXMoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbykgLwotICAgICAgICBydGM6OmtOdW1N
aWNyb3NlY3NQZXJNaWxsaXNlYzsKLSAgICBpZiAoIWlucHV0X2ZyYW1lX2luZm9zXy5lbXB0eSgp
KSB7Ci0gICAgICBjb25zdCBJbnB1dEZyYW1lSW5mbyYgZnJhbWVfaW5mbyA9IGlucHV0X2ZyYW1l
X2luZm9zXy5mcm9udCgpOwotICAgICAgb3V0cHV0X3RpbWVzdGFtcF8gPSBmcmFtZV9pbmZvLmZy
YW1lX3RpbWVzdGFtcDsKLSAgICAgIG91dHB1dF9yZW5kZXJfdGltZV9tc18gPSBmcmFtZV9pbmZv
LmZyYW1lX3JlbmRlcl90aW1lX21zOwotICAgICAgb3V0cHV0X3JvdGF0aW9uXyA9IGZyYW1lX2lu
Zm8ucm90YXRpb247Ci0gICAgICBlbmNvZGluZ19zdGFydF90aW1lX21zID0gZnJhbWVfaW5mby5l
bmNvZGVfc3RhcnRfdGltZTsKLSAgICAgIGlucHV0X2ZyYW1lX2luZm9zXy5wb3BfZnJvbnQoKTsK
LSAgICB9Ci0KLSAgICAvLyBFeHRyYWN0IHBheWxvYWQuCi0gICAgc2l6ZV90IHBheWxvYWRfc2l6
ZSA9IGpuaS0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoal9vdXRwdXRfYnVmZmVyKTsKLSAgICB1
aW50OF90KiBwYXlsb2FkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oCi0gICAgICAgIGpu
aS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX291dHB1dF9idWZmZXIpKTsKLSAgICBpZiAoQ2hl
Y2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBnZXQgZGly
ZWN0IGJ1ZmZlciBhZGRyZXNzLiI7Ci0gICAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQo
dHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0KLQotICAgIC8vIENhbGxiYWNrIC0gcmV0
dXJuIGVuY29kZWQgZnJhbWUuCi0gICAgd2VicnRjOjpFbmNvZGVkSW1hZ2VDYWxsYmFjazo6UmVz
dWx0IGNhbGxiYWNrX3Jlc3VsdCgKLSAgICAgICAgd2VicnRjOjpFbmNvZGVkSW1hZ2VDYWxsYmFj
azo6UmVzdWx0OjpPSyk7Ci0gICAgaWYgKGNhbGxiYWNrXykgewotICAgICAgc3RkOjp1bmlxdWVf
cHRyPHdlYnJ0Yzo6RW5jb2RlZEltYWdlPiBpbWFnZSgKLSAgICAgICAgICBuZXcgd2VicnRjOjpF
bmNvZGVkSW1hZ2UocGF5bG9hZCwgcGF5bG9hZF9zaXplLCBwYXlsb2FkX3NpemUpKTsKLSAgICAg
IGltYWdlLT5fZW5jb2RlZFdpZHRoID0gd2lkdGhfOwotICAgICAgaW1hZ2UtPl9lbmNvZGVkSGVp
Z2h0ID0gaGVpZ2h0XzsKLSAgICAgIGltYWdlLT5fdGltZVN0YW1wID0gb3V0cHV0X3RpbWVzdGFt
cF87Ci0gICAgICBpbWFnZS0+Y2FwdHVyZV90aW1lX21zXyA9IG91dHB1dF9yZW5kZXJfdGltZV9t
c187Ci0gICAgICBpbWFnZS0+cm90YXRpb25fID0gb3V0cHV0X3JvdGF0aW9uXzsKLSAgICAgIGlt
YWdlLT5fZnJhbWVUeXBlID0KLSAgICAgICAgICAoa2V5X2ZyYW1lID8gd2VicnRjOjprVmlkZW9G
cmFtZUtleSA6IHdlYnJ0Yzo6a1ZpZGVvRnJhbWVEZWx0YSk7Ci0gICAgICBpbWFnZS0+X2NvbXBs
ZXRlRnJhbWUgPSB0cnVlOwotICAgICAgaW1hZ2UtPmFkYXB0X3JlYXNvbl8ucXVhbGl0eV9yZXNv
bHV0aW9uX2Rvd25zY2FsZXMgPQotICAgICAgICAgIHNjYWxlXyA/IHF1YWxpdHlfc2NhbGVyXy5k
b3duc2NhbGVfc2hpZnQoKSA6IC0xOwotCi0gICAgICB3ZWJydGM6OkNvZGVjU3BlY2lmaWNJbmZv
IGluZm87Ci0gICAgICBtZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0gICAgICBpbmZv
LmNvZGVjVHlwZSA9IGNvZGVjVHlwZV87Ci0gICAgICBpZiAoY29kZWNUeXBlXyA9PSBrVmlkZW9D
b2RlY1ZQOCkgewotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4LnBpY3R1cmVJZCA9IHBp
Y3R1cmVfaWRfOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4Lm5vblJlZmVyZW5jZSA9
IGZhbHNlOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4LnNpbXVsY2FzdElkeCA9IDA7
Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDgudGVtcG9yYWxJZHggPSB3ZWJydGM6OmtO
b1RlbXBvcmFsSWR4OwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4LmxheWVyU3luYyA9
IGZhbHNlOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4LnRsMFBpY0lkeCA9IHdlYnJ0
Yzo6a05vVGwwUGljSWR4OwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4LmtleUlkeCA9
IHdlYnJ0Yzo6a05vS2V5SWR4OwotICAgICAgfSBlbHNlIGlmIChjb2RlY1R5cGVfID09IGtWaWRl
b0NvZGVjVlA5KSB7Ci0gICAgICAgIGlmIChrZXlfZnJhbWUpIHsKLSAgICAgICAgICBnb2ZfaWR4
XyA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5waWN0dXJl
X2lkID0gcGljdHVyZV9pZF87Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkuaW50ZXJf
cGljX3ByZWRpY3RlZCA9IGtleV9mcmFtZSA/IGZhbHNlIDogdHJ1ZTsKLSAgICAgICAgaW5mby5j
b2RlY1NwZWNpZmljLlZQOS5mbGV4aWJsZV9tb2RlID0gZmFsc2U7Ci0gICAgICAgIGluZm8uY29k
ZWNTcGVjaWZpYy5WUDkuc3NfZGF0YV9hdmFpbGFibGUgPSBrZXlfZnJhbWUgPyB0cnVlIDogZmFs
c2U7Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkudGwwX3BpY19pZHggPSB0bDBfcGlj
X2lkeF8rKzsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS50ZW1wb3JhbF9pZHggPSB3
ZWJydGM6OmtOb1RlbXBvcmFsSWR4OwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNw
YXRpYWxfaWR4ID0gd2VicnRjOjprTm9TcGF0aWFsSWR4OwotICAgICAgICBpbmZvLmNvZGVjU3Bl
Y2lmaWMuVlA5LnRlbXBvcmFsX3VwX3N3aXRjaCA9IHRydWU7Ci0gICAgICAgIGluZm8uY29kZWNT
cGVjaWZpYy5WUDkuaW50ZXJfbGF5ZXJfcHJlZGljdGVkID0gZmFsc2U7Ci0gICAgICAgIGluZm8u
Y29kZWNTcGVjaWZpYy5WUDkuZ29mX2lkeCA9Ci0gICAgICAgICAgICBzdGF0aWNfY2FzdDx1aW50
OF90Pihnb2ZfaWR4XysrICUgZ29mXy5udW1fZnJhbWVzX2luX2dvZik7Ci0gICAgICAgIGluZm8u
Y29kZWNTcGVjaWZpYy5WUDkubnVtX3NwYXRpYWxfbGF5ZXJzID0gMTsKLSAgICAgICAgaW5mby5j
b2RlY1NwZWNpZmljLlZQOS5zcGF0aWFsX2xheWVyX3Jlc29sdXRpb25fcHJlc2VudCA9IGZhbHNl
OwotICAgICAgICBpZiAoaW5mby5jb2RlY1NwZWNpZmljLlZQOS5zc19kYXRhX2F2YWlsYWJsZSkg
ewotICAgICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkuc3BhdGlhbF9sYXllcl9yZXNvbHV0
aW9uX3ByZXNlbnQgPSB0cnVlOwotICAgICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkud2lk
dGhbMF0gPSB3aWR0aF87Ci0gICAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5oZWlnaHRb
MF0gPSBoZWlnaHRfOwotICAgICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkuZ29mLkNvcHlH
b2ZJbmZvVlA5KGdvZl8pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBwaWN0dXJlX2lkXyA9
IChwaWN0dXJlX2lkXyArIDEpICYgMHg3RkZGOwotCi0gICAgICAvLyBHZW5lcmF0ZSBhIGhlYWRl
ciBkZXNjcmliaW5nIGEgc2luZ2xlIGZyYWdtZW50LgotICAgICAgd2VicnRjOjpSVFBGcmFnbWVu
dGF0aW9uSGVhZGVyIGhlYWRlcjsKLSAgICAgIG1lbXNldCgmaGVhZGVyLCAwLCBzaXplb2YoaGVh
ZGVyKSk7Ci0gICAgICBpZiAoY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY1ZQOCB8fCBjb2RlY1R5
cGVfID09IGtWaWRlb0NvZGVjVlA5KSB7Ci0gICAgICAgIGhlYWRlci5WZXJpZnlBbmRBbGxvY2F0
ZUZyYWdtZW50YXRpb25IZWFkZXIoMSk7Ci0gICAgICAgIGhlYWRlci5mcmFnbWVudGF0aW9uT2Zm
c2V0WzBdID0gMDsKLSAgICAgICAgaGVhZGVyLmZyYWdtZW50YXRpb25MZW5ndGhbMF0gPSBpbWFn
ZS0+X2xlbmd0aDsKLSAgICAgICAgaGVhZGVyLmZyYWdtZW50YXRpb25QbFR5cGVbMF0gPSAwOwot
ICAgICAgICBoZWFkZXIuZnJhZ21lbnRhdGlvblRpbWVEaWZmWzBdID0gMDsKLSAgICAgICAgaWYg
KGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNWUDggJiYgc2NhbGVfKSB7Ci0gICAgICAgICAgaW50
IHFwOwotICAgICAgICAgIGlmICh3ZWJydGM6OnZwODo6R2V0UXAocGF5bG9hZCwgcGF5bG9hZF9z
aXplLCAmcXApKSB7Ci0gICAgICAgICAgICBjdXJyZW50X2FjY19xcF8gKz0gcXA7Ci0gICAgICAg
ICAgICBxdWFsaXR5X3NjYWxlcl8uUmVwb3J0UVAocXApOwotICAgICAgICAgICAgaW1hZ2UtPnFw
XyA9IHFwOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChjb2RlY1R5
cGVfID09IGtWaWRlb0NvZGVjSDI2NCkgewotICAgICAgICBpZiAoc2NhbGVfKSB7Ci0gICAgICAg
ICAgaDI2NF9iaXRzdHJlYW1fcGFyc2VyXy5QYXJzZUJpdHN0cmVhbShwYXlsb2FkLCBwYXlsb2Fk
X3NpemUpOwotICAgICAgICAgIGludCBxcDsKLSAgICAgICAgICBpZiAoaDI2NF9iaXRzdHJlYW1f
cGFyc2VyXy5HZXRMYXN0U2xpY2VRcCgmcXApKSB7Ci0gICAgICAgICAgICBjdXJyZW50X2FjY19x
cF8gKz0gcXA7Ci0gICAgICAgICAgICBxdWFsaXR5X3NjYWxlcl8uUmVwb3J0UVAocXApOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBGb3IgSC4yNjQgc2VhcmNoIGZvciBzdGFy
dCBjb2Rlcy4KLSAgICAgICAgaW50MzJfdCBzY1Bvc2l0aW9uc1tNQVhfTkFMVVNfUEVSRlJBTUUg
KyAxXSA9IHt9OwotICAgICAgICBpbnQzMl90IHNjUG9zaXRpb25zTGVuZ3RoID0gMDsKLSAgICAg
ICAgaW50MzJfdCBzY1Bvc2l0aW9uID0gMDsKLSAgICAgICAgd2hpbGUgKHNjUG9zaXRpb25zTGVu
Z3RoIDwgTUFYX05BTFVTX1BFUkZSQU1FKSB7Ci0gICAgICAgICAgaW50MzJfdCBuYWx1UG9zaXRp
b24gPSBOZXh0TmFsdVBvc2l0aW9uKAotICAgICAgICAgICAgICBwYXlsb2FkICsgc2NQb3NpdGlv
biwgcGF5bG9hZF9zaXplIC0gc2NQb3NpdGlvbik7Ci0gICAgICAgICAgaWYgKG5hbHVQb3NpdGlv
biA8IDApIHsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIH0KLSAgICAgICAgICBzY1Bv
c2l0aW9uICs9IG5hbHVQb3NpdGlvbjsKLSAgICAgICAgICBzY1Bvc2l0aW9uc1tzY1Bvc2l0aW9u
c0xlbmd0aCsrXSA9IHNjUG9zaXRpb247Ci0gICAgICAgICAgc2NQb3NpdGlvbiArPSBIMjY0X1ND
X0xFTkdUSDsKLSAgICAgICAgfQotICAgICAgICBpZiAoc2NQb3NpdGlvbnNMZW5ndGggPT0gMCkg
ewotICAgICAgICAgIEFMT0dFIDw8ICJTdGFydCBjb2RlIGlzIG5vdCBmb3VuZCEiOwotICAgICAg
ICAgIEFMT0dFIDw8ICJEYXRhOiIgPDwgIGltYWdlLT5fYnVmZmVyWzBdIDw8ICIgIiA8PCBpbWFn
ZS0+X2J1ZmZlclsxXQotICAgICAgICAgICAgICA8PCAiICIgPDwgaW1hZ2UtPl9idWZmZXJbMl0g
PDwgIiAiIDw8IGltYWdlLT5fYnVmZmVyWzNdCi0gICAgICAgICAgICAgIDw8ICIgIiA8PCBpbWFn
ZS0+X2J1ZmZlcls0XSA8PCAiICIgPDwgaW1hZ2UtPl9idWZmZXJbNV07Ci0gICAgICAgICAgUHJv
Y2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFp
bGFibGUgKi8pOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBz
Y1Bvc2l0aW9uc1tzY1Bvc2l0aW9uc0xlbmd0aF0gPSBwYXlsb2FkX3NpemU7Ci0gICAgICAgIGhl
YWRlci5WZXJpZnlBbmRBbGxvY2F0ZUZyYWdtZW50YXRpb25IZWFkZXIoc2NQb3NpdGlvbnNMZW5n
dGgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjUG9zaXRpb25zTGVuZ3RoOyBp
KyspIHsKLSAgICAgICAgICBoZWFkZXIuZnJhZ21lbnRhdGlvbk9mZnNldFtpXSA9IHNjUG9zaXRp
b25zW2ldICsgSDI2NF9TQ19MRU5HVEg7Ci0gICAgICAgICAgaGVhZGVyLmZyYWdtZW50YXRpb25M
ZW5ndGhbaV0gPQotICAgICAgICAgICAgICBzY1Bvc2l0aW9uc1tpICsgMV0gLSBoZWFkZXIuZnJh
Z21lbnRhdGlvbk9mZnNldFtpXTsKLSAgICAgICAgICBoZWFkZXIuZnJhZ21lbnRhdGlvblBsVHlw
ZVtpXSA9IDA7Ci0gICAgICAgICAgaGVhZGVyLmZyYWdtZW50YXRpb25UaW1lRGlmZltpXSA9IDA7
Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgY2FsbGJhY2tfcmVzdWx0ID0gY2FsbGJhY2tf
LT5PbkVuY29kZWRJbWFnZSgqaW1hZ2UsICZpbmZvLCAmaGVhZGVyKTsKLSAgICB9Ci0KLSAgICAv
LyBSZXR1cm4gb3V0cHV0IGJ1ZmZlciBiYWNrIHRvIHRoZSBlbmNvZGVyLgotICAgIGJvb2wgc3Vj
Y2VzcyA9IGpuaS0+Q2FsbEJvb2xlYW5NZXRob2QoKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rl
cl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX3JlbGVhc2Vf
b3V0cHV0X2J1ZmZlcl9tZXRob2RfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0X2J1ZmZlcl9pbmRleCk7Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpu
aSkgfHwgIXN1Y2Nlc3MpIHsKLSAgICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCh0cnVl
IC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBQcmludCBwZXIgZnJhbWUgc3RhdGlzdGljcy4KLSAgICBpZiAo
ZW5jb2Rpbmdfc3RhcnRfdGltZV9tcyA+IDApIHsKLSAgICAgIGZyYW1lX2VuY29kaW5nX3RpbWVf
bXMgPSBydGM6OlRpbWVNaWxsaXMoKSAtIGVuY29kaW5nX3N0YXJ0X3RpbWVfbXM7Ci0gICAgfQot
ICAgIGlmIChmcmFtZXNfZW5jb2RlZF8gPCBrTWF4RW5jb2RlZExvZ0ZyYW1lcykgewotICAgICAg
aW50IGN1cnJlbnRfbGF0ZW5jeSA9Ci0gICAgICAgICAgKGludCkobGFzdF9pbnB1dF90aW1lc3Rh
bXBfbXNfIC0gbGFzdF9vdXRwdXRfdGltZXN0YW1wX21zXyk7Ci0gICAgICBBTE9HRCA8PCAiRW5j
b2RlciBmcmFtZSBvdXQgIyAiIDw8IGZyYW1lc19lbmNvZGVkXyA8PAotICAgICAgICAgICIuIEtl
eTogIiA8PCBrZXlfZnJhbWUgPDwKLSAgICAgICAgICAiLiBTaXplOiAiIDw8IHBheWxvYWRfc2l6
ZSA8PAotICAgICAgICAgICIuIFRTOiAiIDw8IChpbnQpbGFzdF9vdXRwdXRfdGltZXN0YW1wX21z
XyA8PAotICAgICAgICAgICIuIExhdGVuY3k6ICIgPDwgY3VycmVudF9sYXRlbmN5IDw8Ci0gICAg
ICAgICAgIi4gRW5jVGltZTogIiA8PCBmcmFtZV9lbmNvZGluZ190aW1lX21zOwotICAgIH0KLQot
ICAgIC8vIENhbGN1bGF0ZSBhbmQgcHJpbnQgZW5jb2Rpbmcgc3RhdGlzdGljcyAtIGV2ZXJ5IDMg
c2Vjb25kcy4KLSAgICBmcmFtZXNfZW5jb2RlZF8rKzsKLSAgICBjdXJyZW50X2ZyYW1lc18rKzsK
LSAgICBjdXJyZW50X2J5dGVzXyArPSBwYXlsb2FkX3NpemU7Ci0gICAgY3VycmVudF9lbmNvZGlu
Z190aW1lX21zXyArPSBmcmFtZV9lbmNvZGluZ190aW1lX21zOwotICAgIExvZ1N0YXRpc3RpY3Mo
ZmFsc2UpOwotCi0gICAgLy8gRXJyb3JzIGluIGNhbGxiYWNrX3Jlc3VsdCBhcmUgY3VycmVudGx5
IGlnbm9yZWQuCi0gICAgaWYgKGNhbGxiYWNrX3Jlc3VsdC5kcm9wX25leHRfZnJhbWUpCi0gICAg
ICBkcm9wX25leHRfaW5wdXRfZnJhbWVfID0gdHJ1ZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpMb2dTdGF0aXN0aWNzKGJvb2wgZm9yY2Vf
bG9nKSB7Ci0gIGludCBzdGF0aXN0aWNfdGltZV9tcyA9IHJ0Yzo6VGltZU1pbGxpcygpIC0gc3Rh
dF9zdGFydF90aW1lX21zXzsKLSAgaWYgKChzdGF0aXN0aWNfdGltZV9tcyA+PSBrTWVkaWFDb2Rl
Y1N0YXRpc3RpY3NJbnRlcnZhbE1zIHx8IGZvcmNlX2xvZykKLSAgICAgICYmIHN0YXRpc3RpY190
aW1lX21zID4gMCkgewotICAgIC8vIFByZXZlbnQgZGl2aXNpb24gYnkgemVyby4KLSAgICBpbnQg
Y3VycmVudF9mcmFtZXNfZGl2aWRlciA9IGN1cnJlbnRfZnJhbWVzXyAhPSAwID8gY3VycmVudF9m
cmFtZXNfIDogMTsKLQotICAgIGludCBjdXJyZW50X2JpdHJhdGUgPSBjdXJyZW50X2J5dGVzXyAq
IDggLyBzdGF0aXN0aWNfdGltZV9tczsKLSAgICBpbnQgY3VycmVudF9mcHMgPQotICAgICAgICAo
Y3VycmVudF9mcmFtZXNfICogMTAwMCArIHN0YXRpc3RpY190aW1lX21zIC8gMikgLyBzdGF0aXN0
aWNfdGltZV9tczsKLSAgICBBTE9HRCA8PCAiRW5jb2RlZCBmcmFtZXM6ICIgPDwgZnJhbWVzX2Vu
Y29kZWRfIDw8Ci0gICAgICAgICIuIEJpdHJhdGU6ICIgPDwgY3VycmVudF9iaXRyYXRlIDw8Ci0g
ICAgICAgICIsIHRhcmdldDogIiA8PCBsYXN0X3NldF9iaXRyYXRlX2ticHNfIDw8ICIga2JwcyIg
PDwKLSAgICAgICAgIiwgZnBzOiAiIDw8IGN1cnJlbnRfZnBzIDw8Ci0gICAgICAgICIsIGVuY1Rp
bWU6ICIgPDwgKGN1cnJlbnRfZW5jb2RpbmdfdGltZV9tc18gLyBjdXJyZW50X2ZyYW1lc19kaXZp
ZGVyKSA8PAotICAgICAgICAiLiBRUDogIiA8PCAoY3VycmVudF9hY2NfcXBfIC8gY3VycmVudF9m
cmFtZXNfZGl2aWRlcikgPDwKLSAgICAgICAgIiBmb3IgbGFzdCAiIDw8IHN0YXRpc3RpY190aW1l
X21zIDw8ICIgbXMuIjsKLSAgICBzdGF0X3N0YXJ0X3RpbWVfbXNfID0gcnRjOjpUaW1lTWlsbGlz
KCk7Ci0gICAgY3VycmVudF9mcmFtZXNfID0gMDsKLSAgICBjdXJyZW50X2J5dGVzXyA9IDA7Ci0g
ICAgY3VycmVudF9hY2NfcXBfID0gMDsKLSAgICBjdXJyZW50X2VuY29kaW5nX3RpbWVfbXNfID0g
MDsKLSAgfQotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6Ok5leHROYWx1UG9z
aXRpb24oCi0gICAgdWludDhfdCAqYnVmZmVyLCBzaXplX3QgYnVmZmVyX3NpemUpIHsKLSAgaWYg
KGJ1ZmZlcl9zaXplIDwgSDI2NF9TQ19MRU5HVEgpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAg
dWludDhfdCAqaGVhZCA9IGJ1ZmZlcjsKLSAgLy8gU2V0IGVuZCBidWZmZXIgcG9pbnRlciB0byA0
IGJ5dGVzIGJlZm9yZSBhY3R1YWwgYnVmZmVyIGVuZCBzbyB3ZSBjYW4KLSAgLy8gYWNjZXNzIGhl
YWRbMV0sIGhlYWRbMl0gYW5kIGhlYWRbM10gaW4gYSBsb29wIHdpdGhvdXQgYnVmZmVyIG92ZXJy
dW4uCi0gIHVpbnQ4X3QgKmVuZCA9IGJ1ZmZlciArIGJ1ZmZlcl9zaXplIC0gSDI2NF9TQ19MRU5H
VEg7Ci0KLSAgd2hpbGUgKGhlYWQgPCBlbmQpIHsKLSAgICBpZiAoaGVhZFswXSkgewotICAgICAg
aGVhZCsrOwotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIGlmIChoZWFkWzFdKSB7IC8vIGdv
dCAwMHh4Ci0gICAgICBoZWFkICs9IDI7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYg
KGhlYWRbMl0pIHsgLy8gZ290IDAwMDB4eAotICAgICAgaGVhZCArPSAzOwotICAgICAgY29udGlu
dWU7Ci0gICAgfQotICAgIGlmIChoZWFkWzNdICE9IDB4MDEpIHsgLy8gZ290IDAwMDAwMHh4Ci0g
ICAgICBoZWFkKys7IC8vIHh4ICE9IDEsIGNvbnRpbnVlIHNlYXJjaGluZy4KLSAgICAgIGNvbnRp
bnVlOwotICAgIH0KLSAgICByZXR1cm4gKGludDMyX3QpKGhlYWQgLSBidWZmZXIpOwotICB9Ci0g
IHJldHVybiAtMTsKLX0KLQotdm9pZCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpPbkRyb3BwZWRG
cmFtZSgpIHsKLSAgLy8gTWV0aG9kcyBydW5uaW5nIG9uIHRoZSBjb2RlYyB0aHJlYWQgc2hvdWxk
IGNhbGwgT25Ecm9wcGVkRnJhbWVPbkNvZGVjVGhyZWFkCi0gIC8vIGRpcmVjdGx5LgotICBSVENf
RENIRUNLKCFjb2RlY190aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAg
Y29kZWNfdGhyZWFkXy0+SW52b2tlPHZvaWQ+KAotICAgICAgUlRDX0ZST01fSEVSRSwKLSAgICAg
IEJpbmQoJk1lZGlhQ29kZWNWaWRlb0VuY29kZXI6Ok9uRHJvcHBlZEZyYW1lT25Db2RlY1RocmVh
ZCwgdGhpcykpOwotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6Ok9uRHJvcHBlZEZy
YW1lT25Db2RlY1RocmVhZCgpIHsKLSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tlcl8u
Q2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgLy8gUmVwb3J0IGRyb3BwZWQgZnJhbWUgdG8gcXVh
bGl0eV9zY2FsZXJfLgotICBpZiAoc2NhbGVfKQotICAgIHF1YWxpdHlfc2NhbGVyXy5SZXBvcnRE
cm9wcGVkRnJhbWUoKTsKLX0KLQotY29uc3QgY2hhciogTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6
SW1wbGVtZW50YXRpb25OYW1lKCkgY29uc3QgewotICByZXR1cm4gIk1lZGlhQ29kZWMiOwotfQot
Ci1NZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeTo6TWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZh
Y3RvcnkoKQotICAgIDogZWdsX2NvbnRleHRfKG51bGxwdHIpIHsKLSAgSk5JRW52KiBqbmkgPSBB
dHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2Nh
bF9yZWZfZnJhbWUoam5pKTsKLSAgamNsYXNzIGpfZW5jb2Rlcl9jbGFzcyA9IEZpbmRDbGFzcyhq
bmksICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIiKTsKLSAgc3VwcG9ydGVkX2Nv
ZGVjc18uY2xlYXIoKTsKLQotICBib29sIGlzX3ZwOF9od19zdXBwb3J0ZWQgPSBqbmktPkNhbGxT
dGF0aWNCb29sZWFuTWV0aG9kKAotICAgICAgal9lbmNvZGVyX2NsYXNzLAotICAgICAgR2V0U3Rh
dGljTWV0aG9kSUQoam5pLCBqX2VuY29kZXJfY2xhc3MsICJpc1ZwOEh3U3VwcG9ydGVkIiwgIigp
WiIpKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSk7Ci0gIGlmIChpc192cDhfaHdfc3VwcG9ydGVk
KSB7Ci0gICAgQUxPR0QgPDwgIlZQOCBIVyBFbmNvZGVyIHN1cHBvcnRlZC4iOwotICAgIHN1cHBv
cnRlZF9jb2RlY3NfLnB1c2hfYmFjayhjcmlja2V0OjpWaWRlb0NvZGVjKCJWUDgiKSk7Ci0gIH0K
LQotICBib29sIGlzX3ZwOV9od19zdXBwb3J0ZWQgPSBqbmktPkNhbGxTdGF0aWNCb29sZWFuTWV0
aG9kKAotICAgICAgal9lbmNvZGVyX2NsYXNzLAotICAgICAgR2V0U3RhdGljTWV0aG9kSUQoam5p
LCBqX2VuY29kZXJfY2xhc3MsICJpc1ZwOUh3U3VwcG9ydGVkIiwgIigpWiIpKTsKLSAgQ0hFQ0tf
RVhDRVBUSU9OKGpuaSk7Ci0gIGlmIChpc192cDlfaHdfc3VwcG9ydGVkKSB7Ci0gICAgQUxPR0Qg
PDwgIlZQOSBIVyBFbmNvZGVyIHN1cHBvcnRlZC4iOwotICAgIHN1cHBvcnRlZF9jb2RlY3NfLnB1
c2hfYmFjayhjcmlja2V0OjpWaWRlb0NvZGVjKCJWUDkiKSk7Ci0gIH0KLQotICBib29sIGlzX2gy
NjRfaHdfc3VwcG9ydGVkID0gam5pLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZCgKLSAgICAgIGpf
ZW5jb2Rlcl9jbGFzcywKLSAgICAgIEdldFN0YXRpY01ldGhvZElEKGpuaSwgal9lbmNvZGVyX2Ns
YXNzLCAiaXNIMjY0SHdTdXBwb3J0ZWQiLCAiKClaIikpOwotICBDSEVDS19FWENFUFRJT04oam5p
KTsKLSAgaWYgKGlzX2gyNjRfaHdfc3VwcG9ydGVkKSB7Ci0gICAgQUxPR0QgPDwgIkguMjY0IEhX
IEVuY29kZXIgc3VwcG9ydGVkLiI7Ci0gICAgc3VwcG9ydGVkX2NvZGVjc18ucHVzaF9iYWNrKGNy
aWNrZXQ6OlZpZGVvQ29kZWMoIkgyNjQiKSk7Ci0gIH0KLX0KLQotTWVkaWFDb2RlY1ZpZGVvRW5j
b2RlckZhY3Rvcnk6On5NZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeSgpIHsKLSAgQUxPR0Qg
PDwgIk1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0b3J5IGR0b3IiOwotICBpZiAoZWdsX2NvbnRl
eHRfKSB7Ci0gICAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsK
LSAgICBqbmktPkRlbGV0ZUdsb2JhbFJlZihlZ2xfY29udGV4dF8pOwotICB9Ci19Ci0KLXZvaWQg
TWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3Rvcnk6OlNldEVHTENvbnRleHQoCi0gICAgSk5JRW52
KiBqbmksIGpvYmplY3QgZWdsX2NvbnRleHQpIHsKLSAgQUxPR0QgPDwgIk1lZGlhQ29kZWNWaWRl
b0VuY29kZXJGYWN0b3J5OjpTZXRFR0xDb250ZXh0IjsKLSAgaWYgKGVnbF9jb250ZXh0Xykgewot
ICAgIGpuaS0+RGVsZXRlR2xvYmFsUmVmKGVnbF9jb250ZXh0Xyk7Ci0gICAgZWdsX2NvbnRleHRf
ID0gbnVsbHB0cjsKLSAgfQotICBlZ2xfY29udGV4dF8gPSBqbmktPk5ld0dsb2JhbFJlZihlZ2xf
Y29udGV4dCk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgImVy
cm9yIGNhbGxpbmcgTmV3R2xvYmFsUmVmIGZvciBFR0wgQ29udGV4dC4iOwotICB9Ci19Ci0KLXdl
YnJ0Yzo6VmlkZW9FbmNvZGVyKiBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeTo6Q3JlYXRl
VmlkZW9FbmNvZGVyKAotICAgIGNvbnN0IGNyaWNrZXQ6OlZpZGVvQ29kZWMmIGNvZGVjKSB7Ci0g
IGlmIChzdXBwb3J0ZWRfY29kZWNzXy5lbXB0eSgpKSB7Ci0gICAgQUxPR1cgPDwgIk5vIEhXIHZp
ZGVvIGVuY29kZXIgZm9yIGNvZGVjICIgPDwgY29kZWMubmFtZTsKLSAgICByZXR1cm4gbnVsbHB0
cjsKLSAgfQotICBpZiAoRmluZE1hdGNoaW5nQ29kZWMoc3VwcG9ydGVkX2NvZGVjc18sIGNvZGVj
KSkgewotICAgIEFMT0dEIDw8ICJDcmVhdGUgSFcgdmlkZW8gZW5jb2RlciBmb3IgIiA8PCBjb2Rl
Yy5uYW1lOwotICAgIGNvbnN0IFZpZGVvQ29kZWNUeXBlIHR5cGUgPSBjcmlja2V0OjpDb2RlY1R5
cGVGcm9tTmFtZShjb2RlYy5uYW1lKTsKLSAgICByZXR1cm4gbmV3IE1lZGlhQ29kZWNWaWRlb0Vu
Y29kZXIoQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCksIHR5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVnbF9jb250ZXh0Xyk7Ci0gIH0KLSAgQUxPR1cgPDwg
IkNhbiBub3QgZmluZCBIVyB2aWRlbyBlbmNvZGVyIGZvciB0eXBlICIgPDwgY29kZWMubmFtZTsK
LSAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWNvbnN0IHN0ZDo6dmVjdG9yPGNyaWNrZXQ6OlZpZGVv
Q29kZWM+JgotTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3Rvcnk6OnN1cHBvcnRlZF9jb2RlY3Mo
KSBjb25zdCB7Ci0gIHJldHVybiBzdXBwb3J0ZWRfY29kZWNzXzsKLX0KLQotdm9pZCBNZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyRmFjdG9yeTo6RGVzdHJveVZpZGVvRW5jb2RlcigKLSAgICB3ZWJydGM6
OlZpZGVvRW5jb2RlciogZW5jb2RlcikgewotICBBTE9HRCA8PCAiRGVzdHJveSB2aWRlbyBlbmNv
ZGVyLiI7Ci0gIGRlbGV0ZSBlbmNvZGVyOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2pu
aQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvam5pL2FuZHJvaWRtZWRpYWVuY29kZXJfam5pLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJv
aWRtZWRpYWVuY29kZXJfam5pLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFl
bmNvZGVyX2puaS5oCShub25leGlzdGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2lmbmRlZiBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURNRURJQUVOQ09ERVJf
Sk5JX0hfCi0jZGVmaW5lIFdFQlJUQ19BUElfSkFWQV9KTklfQU5EUk9JRE1FRElBRU5DT0RFUl9K
TklfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9p
ZC9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0
Y3ZpZGVvZW5jb2RlcmZhY3RvcnkuaCIKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi0vLyBJ
bXBsZW1lbnRhdGlvbiBvZiBBbmRyb2lkIE1lZGlhQ29kZWMgYmFzZWQgZW5jb2RlciBmYWN0b3J5
LgotY2xhc3MgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3RvcnkKLSAgICA6IHB1YmxpYyBjcmlj
a2V0OjpXZWJSdGNWaWRlb0VuY29kZXJGYWN0b3J5IHsKLSBwdWJsaWM6Ci0gIE1lZGlhQ29kZWNW
aWRlb0VuY29kZXJGYWN0b3J5KCk7Ci0gIHZpcnR1YWwgfk1lZGlhQ29kZWNWaWRlb0VuY29kZXJG
YWN0b3J5KCk7Ci0KLSAgdm9pZCBTZXRFR0xDb250ZXh0KEpOSUVudiogam5pLCBqb2JqZWN0IGVn
bF9jb250ZXh0KTsKLQotICAvLyBXZWJSdGNWaWRlb0VuY29kZXJGYWN0b3J5IGltcGxlbWVudGF0
aW9uLgotICB3ZWJydGM6OlZpZGVvRW5jb2RlciogQ3JlYXRlVmlkZW9FbmNvZGVyKAotICAgICAg
Y29uc3QgY3JpY2tldDo6VmlkZW9Db2RlYyYgY29kZWMpIG92ZXJyaWRlOwotICBjb25zdCBzdGQ6
OnZlY3Rvcjxjcmlja2V0OjpWaWRlb0NvZGVjPiYgc3VwcG9ydGVkX2NvZGVjcygpIGNvbnN0IG92
ZXJyaWRlOwotICB2b2lkIERlc3Ryb3lWaWRlb0VuY29kZXIod2VicnRjOjpWaWRlb0VuY29kZXIq
IGVuY29kZXIpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgLy8gRGlzYWJsZSBvdmVybG9hZGVk
IHZpcnR1YWwgZnVuY3Rpb24gd2FybmluZy4gVE9ETyhtYWdqZWQpOiBSZW1vdmUgb25jZQotICAv
LyBodHRwOi8vY3JidWcvd2VicnRjLzY0MDIgaXMgZml4ZWQuCi0gIHVzaW5nIGNyaWNrZXQ6Oldl
YlJ0Y1ZpZGVvRW5jb2RlckZhY3Rvcnk6OkNyZWF0ZVZpZGVvRW5jb2RlcjsKLQotICBqb2JqZWN0
IGVnbF9jb250ZXh0XzsKLQotICAvLyBFbXB0eSBpZiBwbGF0Zm9ybSBzdXBwb3J0IGlzIGxhY2tp
bmcsIGNvbnN0IGFmdGVyIGN0b3IgcmV0dXJucy4KLSAgc3RkOjp2ZWN0b3I8Y3JpY2tldDo6Vmlk
ZW9Db2RlYz4gc3VwcG9ydGVkX2NvZGVjc187Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
X2puaQotCi0jZW5kaWYgIC8vIFdFQlJUQ19BUElfSkFWQV9KTklfQU5EUk9JRE1FRElBRU5DT0RF
Ul9KTklfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWV0cmljc19qbmkuY2MKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2Fu
ZHJvaWRtZXRyaWNzX2puaS5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZXRyaWNz
X2puaS5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAid2VicnRj
L2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2Fu
ZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1wbC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1f
d3JhcHBlcnMvaW5jbHVkZS9tZXRyaWNzLmgiCi0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFw
cGVycy9pbmNsdWRlL21ldHJpY3NfZGVmYXVsdC5oIgotCi0vLyBFbmFibGVzIGNvbGxlY3Rpb24g
b2YgbmF0aXZlIGhpc3RvZ3JhbXMgYW5kIGNyZWF0aW5nIHRoZW0uCi1uYW1lc3BhY2Ugd2VicnRj
X2puaSB7Ci0KLUpPVyh2b2lkLCBNZXRyaWNzX25hdGl2ZUVuYWJsZSkoSk5JRW52KiBqbmksIGpj
bGFzcykgewotICB3ZWJydGM6Om1ldHJpY3M6OkVuYWJsZSgpOwotfQotCi0vLyBHZXRzIGFuZCBj
bGVhcnMgbmF0aXZlIGhpc3RvZ3JhbXMuCi1KT1coam9iamVjdCwgTWV0cmljc19uYXRpdmVHZXRB
bmRSZXNldCkoSk5JRW52KiBqbmksIGpjbGFzcykgewotICBqY2xhc3Mgal9tZXRyaWNzX2NsYXNz
ID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWV0cmljcyIpOwotICBqbWV0aG9kSUQgal9h
ZGQgPQotICAgICAgR2V0TWV0aG9kSUQoam5pLCBqX21ldHJpY3NfY2xhc3MsICJhZGQiLAotICAg
ICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztMb3JnL3dlYnJ0Yy9NZXRyaWNzJEhp
c3RvZ3JhbUluZm87KVYiKTsKLSAgamNsYXNzIGpfaW5mb19jbGFzcyA9IEZpbmRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL01ldHJpY3MkSGlzdG9ncmFtSW5mbyIpOwotICBqbWV0aG9kSUQgal9hZGRf
c2FtcGxlID0gR2V0TWV0aG9kSUQoam5pLCBqX2luZm9fY2xhc3MsICJhZGRTYW1wbGUiLCAiKElJ
KVYiKTsKLQotICAvLyBDcmVhdGUgfE1ldHJpY3N8LgotICBqb2JqZWN0IGpfbWV0cmljcyA9IGpu
aS0+TmV3T2JqZWN0KAotICAgICAgal9tZXRyaWNzX2NsYXNzLCBHZXRNZXRob2RJRChqbmksIGpf
bWV0cmljc19jbGFzcywgIjxpbml0PiIsICIoKVYiKSk7Ci0KLSAgc3RkOjptYXA8c3RkOjpzdHJp
bmcsIHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6Om1ldHJpY3M6OlNhbXBsZUluZm8+PgotICAgICAg
aGlzdG9ncmFtczsKLSAgd2VicnRjOjptZXRyaWNzOjpHZXRBbmRSZXNldCgmaGlzdG9ncmFtcyk7
Ci0gIGZvciAoY29uc3QgYXV0byYga3YgOiBoaXN0b2dyYW1zKSB7Ci0gICAgLy8gQ3JlYXRlIGFu
ZCBhZGQgc2FtcGxlcyB0byB8SGlzdG9ncmFtSW5mb3wuCi0gICAgam9iamVjdCBqX2luZm8gPSBq
bmktPk5ld09iamVjdCgKLSAgICAgICAgal9pbmZvX2NsYXNzLCBHZXRNZXRob2RJRChqbmksIGpf
aW5mb19jbGFzcywgIjxpbml0PiIsICIoSUlJKVYiKSwKLSAgICAgICAga3Yuc2Vjb25kLT5taW4s
IGt2LnNlY29uZC0+bWF4LAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGt2LnNlY29uZC0+YnVj
a2V0X2NvdW50KSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBzYW1wbGUgOiBrdi5zZWNvbmQtPnNh
bXBsZXMpIHsKLSAgICAgIGpuaS0+Q2FsbFZvaWRNZXRob2Qoal9pbmZvLCBqX2FkZF9zYW1wbGUs
IHNhbXBsZS5maXJzdCwgc2FtcGxlLnNlY29uZCk7Ci0gICAgfQotICAgIC8vIEFkZCB8SGlzdG9n
cmFtSW5mb3wgdG8gfE1ldHJpY3N8LgotICAgIGpzdHJpbmcgal9uYW1lID0gam5pLT5OZXdTdHJp
bmdVVEYoa3YuZmlyc3QuY19zdHIoKSk7Ci0gICAgam5pLT5DYWxsVm9pZE1ldGhvZChqX21ldHJp
Y3MsIGpfYWRkLCBqX25hbWUsIGpfaW5mbyk7Ci0gICAgam5pLT5EZWxldGVMb2NhbFJlZihqX25h
bWUpOwotICAgIGpuaS0+RGVsZXRlTG9jYWxSZWYoal9pbmZvKTsKLSAgfQotICBDSEVDS19FWENF
UFRJT04oam5pKTsKLSAgcmV0dXJuIGpfbWV0cmljczsKLX0KLQotSk9XKGpsb25nLCBNZXRyaWNz
XzAwMDI0SGlzdG9ncmFtX25hdGl2ZUNyZWF0ZUNvdW50cykKLShKTklFbnYqIGpuaSwgamNsYXNz
LCBqc3RyaW5nIGpfbmFtZSwgamludCBtaW4sIGppbnQgbWF4LCBqaW50IGJ1Y2tldHMpIHsKLSAg
c3RkOjpzdHJpbmcgbmFtZSA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfbmFtZSk7Ci0gIHJldHVy
biBqbG9uZ0Zyb21Qb2ludGVyKAotICAgICAgd2VicnRjOjptZXRyaWNzOjpIaXN0b2dyYW1GYWN0
b3J5R2V0Q291bnRzKG5hbWUsIG1pbiwgbWF4LCBidWNrZXRzKSk7Ci19Ci0KLUpPVyhqbG9uZywg
TWV0cmljc18wMDAyNEhpc3RvZ3JhbV9uYXRpdmVDcmVhdGVFbnVtZXJhdGlvbikKLShKTklFbnYq
IGpuaSwgamNsYXNzLCBqc3RyaW5nIGpfbmFtZSwgamludCBtYXgpIHsKLSAgc3RkOjpzdHJpbmcg
bmFtZSA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfbmFtZSk7Ci0gIHJldHVybiBqbG9uZ0Zyb21Q
b2ludGVyKAotICAgICAgd2VicnRjOjptZXRyaWNzOjpIaXN0b2dyYW1GYWN0b3J5R2V0RW51bWVy
YXRpb24obmFtZSwgbWF4KSk7Ci19Ci0KLUpPVyh2b2lkLCBNZXRyaWNzXzAwMDI0SGlzdG9ncmFt
X25hdGl2ZUFkZFNhbXBsZSkKLShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBoaXN0b2dyYW0s
IGppbnQgc2FtcGxlKSB7Ci0gIGlmIChoaXN0b2dyYW0pIHsKLSAgICBIaXN0b2dyYW1BZGQocmVp
bnRlcnByZXRfY2FzdDx3ZWJydGM6Om1ldHJpY3M6Okhpc3RvZ3JhbSo+KGhpc3RvZ3JhbSksCi0g
ICAgICAgICAgICAgICAgIHNhbXBsZSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0
Y19qbmkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2puaS9hbmRyb2lkbmV0d29ya21vbml0b3Jfam5pLmNjCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2pu
aS9hbmRyb2lkbmV0d29ya21vbml0b3Jfam5pLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5k
cm9pZG5ldHdvcmttb25pdG9yX2puaS5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDQzNSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9h
bmRyb2lkbmV0d29ya21vbml0b3Jfam5pLmgiCi0KLSNpbmNsdWRlIDxkbGZjbi5oPgotLy8gVGhp
cyB3YXMgYWRkZWQgaW4gTG9sbGlwb3AgdG8gZGxmY24uaAotI2RlZmluZSBSVExEX05PTE9BRCA0
Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVy
LmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9iYXNlL2JpbmQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jb21tb24u
aCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9pcGFkZHJlc3MuaCIKLQotbmFtZXNwYWNlIHdlYnJ0
Y19qbmkgewotCi1lbnVtIEFuZHJvaWRTZGtWZXJzaW9uIHsKLSAgU0RLX1ZFUlNJT05fTE9MTElQ
T1AgPSAyMSwKLSAgU0RLX1ZFUlNJT05fTUFSU0hNQUxMT1cgPSAyMwotfTsKLQotam9iamVjdCBB
bmRyb2lkTmV0d29ya01vbml0b3I6OmFwcGxpY2F0aW9uX2NvbnRleHRfID0gbnVsbHB0cjsKLWlu
dCBBbmRyb2lkTmV0d29ya01vbml0b3I6OmFuZHJvaWRfc2RrX2ludF8gPSAwOwotCi1zdGF0aWMg
TmV0d29ya1R5cGUgR2V0TmV0d29ya1R5cGVGcm9tSmF2YShKTklFbnYqIGpuaSwgam9iamVjdCBq
X25ldHdvcmtfdHlwZSkgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPQotICAgICAgR2V0SmF2
YUVudW1OYW1lKGpuaSwgIm9yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0JENvbm5l
Y3Rpb25UeXBlIiwKLSAgICAgICAgICAgICAgICAgICAgICBqX25ldHdvcmtfdHlwZSk7Ci0gIGlm
IChlbnVtX25hbWUgPT0gIkNPTk5FQ1RJT05fVU5LTk9XTiIpIHsKLSAgICByZXR1cm4gTmV0d29y
a1R5cGU6Ok5FVFdPUktfVU5LTk9XTjsKLSAgfQotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNU
SU9OX0VUSEVSTkVUIikgewotICAgIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS19FVEhFUk5F
VDsKLSAgfQotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9OX1dJRkkiKSB7Ci0gICAgcmV0
dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLX1dJRkk7Ci0gIH0KLSAgaWYgKGVudW1fbmFtZSA9PSAi
Q09OTkVDVElPTl80RyIpIHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktfNEc7Ci0g
IH0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl8zRyIpIHsKLSAgICByZXR1cm4gTmV0
d29ya1R5cGU6Ok5FVFdPUktfM0c7Ci0gIH0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElP
Tl8yRyIpIHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktfMkc7Ci0gIH0KLSAgaWYg
KGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl9VTktOT1dOX0NFTExVTEFSIikgewotICAgIHJldHVy
biBOZXR3b3JrVHlwZTo6TkVUV09SS19VTktOT1dOX0NFTExVTEFSOwotICB9Ci0gIGlmIChlbnVt
X25hbWUgPT0gIkNPTk5FQ1RJT05fQkxVRVRPT1RIIikgewotICAgIHJldHVybiBOZXR3b3JrVHlw
ZTo6TkVUV09SS19CTFVFVE9PVEg7Ci0gIH0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElP
Tl9OT05FIikgewotICAgIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS19OT05FOwotICB9Ci0g
IEFTU0VSVChmYWxzZSk7Ci0gIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS19VTktOT1dOOwot
fQotCi1zdGF0aWMgcnRjOjpBZGFwdGVyVHlwZSBBZGFwdGVyVHlwZUZyb21OZXR3b3JrVHlwZShO
ZXR3b3JrVHlwZSBuZXR3b3JrX3R5cGUpIHsKLSAgc3dpdGNoIChuZXR3b3JrX3R5cGUpIHsKLSAg
ICBjYXNlIE5FVFdPUktfVU5LTk9XTjoKLSAgICAgIHJldHVybiBydGM6OkFEQVBURVJfVFlQRV9V
TktOT1dOOwotICAgIGNhc2UgTkVUV09SS19FVEhFUk5FVDoKLSAgICAgIHJldHVybiBydGM6OkFE
QVBURVJfVFlQRV9FVEhFUk5FVDsKLSAgICBjYXNlIE5FVFdPUktfV0lGSToKLSAgICAgIHJldHVy
biBydGM6OkFEQVBURVJfVFlQRV9XSUZJOwotICAgIGNhc2UgTkVUV09SS180RzoKLSAgICBjYXNl
IE5FVFdPUktfM0c6Ci0gICAgY2FzZSBORVRXT1JLXzJHOgotICAgIGNhc2UgTkVUV09SS19VTktO
T1dOX0NFTExVTEFSOgotICAgICAgcmV0dXJuIHJ0Yzo6QURBUFRFUl9UWVBFX0NFTExVTEFSOwot
ICAgIGNhc2UgTkVUV09SS19CTFVFVE9PVEg6Ci0gICAgICAvLyBUaGVyZSBpcyBubyBjb3JyZXNw
b25kaW5nIG1hcHBpbmcgZm9yIGJsdWV0b290aCBuZXR3b3Jrcy4KLSAgICAgIC8vIE1hcCBpdCB0
byBWUE4gZm9yIG5vdy4KLSAgICAgIHJldHVybiBydGM6OkFEQVBURVJfVFlQRV9WUE47Ci0gICAg
ZGVmYXVsdDoKLSAgICAgIFJUQ19EQ0hFQ0soZmFsc2UpIDw8ICJJbnZhbGlkIG5ldHdvcmsgdHlw
ZSAiIDw8IG5ldHdvcmtfdHlwZTsKLSAgICAgIHJldHVybiBydGM6OkFEQVBURVJfVFlQRV9VTktO
T1dOOwotICB9Ci19Ci0KLXN0YXRpYyBydGM6OklQQWRkcmVzcyBHZXRJUEFkZHJlc3NGcm9tSmF2
YShKTklFbnYqIGpuaSwgam9iamVjdCBqX2lwX2FkZHJlc3MpIHsKLSAgamNsYXNzIGpfaXBfYWRk
cmVzc19jbGFzcyA9IEdldE9iamVjdENsYXNzKGpuaSwgal9pcF9hZGRyZXNzKTsKLSAgamZpZWxk
SUQgal9hZGRyZXNzX2lkID0gR2V0RmllbGRJRChqbmksIGpfaXBfYWRkcmVzc19jbGFzcywgImFk
ZHJlc3MiLCAiW0IiKTsKLSAgamJ5dGVBcnJheSBqX2FkZHJlc3NlcyA9Ci0gICAgICBzdGF0aWNf
Y2FzdDxqYnl0ZUFycmF5PihHZXRPYmplY3RGaWVsZChqbmksIGpfaXBfYWRkcmVzcywgal9hZGRy
ZXNzX2lkKSk7Ci0gIHNpemVfdCBhZGRyZXNzX2xlbmd0aCA9IGpuaS0+R2V0QXJyYXlMZW5ndGgo
al9hZGRyZXNzZXMpOwotICBqYnl0ZSogYWRkcl9hcnJheSA9IGpuaS0+R2V0Qnl0ZUFycmF5RWxl
bWVudHMoal9hZGRyZXNzZXMsIG51bGxwdHIpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAi
RXJyb3IgZHVyaW5nIEdldElQQWRkcmVzc0Zyb21KYXZhIjsKLSAgaWYgKGFkZHJlc3NfbGVuZ3Ro
ID09IDQpIHsKLSAgICAvLyBJUDQKLSAgICBzdHJ1Y3QgaW5fYWRkciBpcDRfYWRkcjsKLSAgICBt
ZW1jcHkoJmlwNF9hZGRyLnNfYWRkciwgYWRkcl9hcnJheSwgNCk7Ci0gICAgam5pLT5SZWxlYXNl
Qnl0ZUFycmF5RWxlbWVudHMoal9hZGRyZXNzZXMsIGFkZHJfYXJyYXksIEpOSV9BQk9SVCk7Ci0g
ICAgcmV0dXJuIHJ0Yzo6SVBBZGRyZXNzKGlwNF9hZGRyKTsKLSAgfQotICAvLyBJUDYKLSAgUlRD
X0NIRUNLKGFkZHJlc3NfbGVuZ3RoID09IDE2KTsKLSAgc3RydWN0IGluNl9hZGRyIGlwNl9hZGRy
OwotICBtZW1jcHkoaXA2X2FkZHIuczZfYWRkciwgYWRkcl9hcnJheSwgYWRkcmVzc19sZW5ndGgp
OwotICBqbmktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhqX2FkZHJlc3NlcywgYWRkcl9hcnJh
eSwgSk5JX0FCT1JUKTsKLSAgcmV0dXJuIHJ0Yzo6SVBBZGRyZXNzKGlwNl9hZGRyKTsKLX0KLQot
c3RhdGljIHZvaWQgR2V0SVBBZGRyZXNzZXNGcm9tSmF2YShKTklFbnYqIGpuaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdEFycmF5IGpfaXBfYWRkcmVzc2VzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3RvcjxydGM6OklQQWRk
cmVzcz4qIGlwX2FkZHJlc3NlcykgewotICBpcF9hZGRyZXNzZXMtPmNsZWFyKCk7Ci0gIHNpemVf
dCBudW1fYWRkcmVzc2VzID0gam5pLT5HZXRBcnJheUxlbmd0aChqX2lwX2FkZHJlc3Nlcyk7Ci0g
IENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJFcnJvciBkdXJpbmcgR2V0QXJyYXlMZW5ndGgiOwot
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9hZGRyZXNzZXM7ICsraSkgewotICAgIGpvYmpl
Y3Qgal9pcF9hZGRyZXNzID0gam5pLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoal9pcF9hZGRyZXNz
ZXMsIGkpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJFcnJvciBkdXJpbmcgR2V0T2Jq
ZWN0QXJyYXlFbGVtZW50IjsKLSAgICBydGM6OklQQWRkcmVzcyBpcCA9IEdldElQQWRkcmVzc0Zy
b21KYXZhKGpuaSwgal9pcF9hZGRyZXNzKTsKLSAgICBpcF9hZGRyZXNzZXMtPnB1c2hfYmFjayhp
cCk7Ci0gIH0KLX0KLQotc3RhdGljIE5ldHdvcmtJbmZvcm1hdGlvbiBHZXROZXR3b3JrSW5mb3Jt
YXRpb25Gcm9tSmF2YSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqb2JqZWN0IGpfbmV0d29ya19p
bmZvKSB7Ci0gIGpjbGFzcyBqX25ldHdvcmtfaW5mb19jbGFzcyA9IEdldE9iamVjdENsYXNzKGpu
aSwgal9uZXR3b3JrX2luZm8pOwotICBqZmllbGRJRCBqX2ludGVyZmFjZV9uYW1lX2lkID0KLSAg
ICAgIEdldEZpZWxkSUQoam5pLCBqX25ldHdvcmtfaW5mb19jbGFzcywgIm5hbWUiLCAiTGphdmEv
bGFuZy9TdHJpbmc7Iik7Ci0gIGpmaWVsZElEIGpfaGFuZGxlX2lkID0gR2V0RmllbGRJRChqbmks
IGpfbmV0d29ya19pbmZvX2NsYXNzLCAiaGFuZGxlIiwgIkoiKTsKLSAgamZpZWxkSUQgal90eXBl
X2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX25ldHdvcmtfaW5mb19jbGFzcywgInR5cGUi
LAotICAgICAgICAgICAgICAgICAiTG9yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0
JENvbm5lY3Rpb25UeXBlOyIpOwotICBqZmllbGRJRCBqX2lwX2FkZHJlc3Nlc19pZCA9Ci0gICAg
ICBHZXRGaWVsZElEKGpuaSwgal9uZXR3b3JrX2luZm9fY2xhc3MsICJpcEFkZHJlc3NlcyIsCi0g
ICAgICAgICAgICAgICAgICJbTG9yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0JElQ
QWRkcmVzczsiKTsKLQotICBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya19pbmZvOwotICBuZXR3
b3JrX2luZm8uaW50ZXJmYWNlX25hbWUgPSBKYXZhVG9TdGRTdHJpbmcoCi0gICAgICBqbmksIEdl
dFN0cmluZ0ZpZWxkKGpuaSwgal9uZXR3b3JrX2luZm8sIGpfaW50ZXJmYWNlX25hbWVfaWQpKTsK
LSAgbmV0d29ya19pbmZvLmhhbmRsZSA9IHN0YXRpY19jYXN0PE5ldHdvcmtIYW5kbGU+KAotICAg
ICAgR2V0TG9uZ0ZpZWxkKGpuaSwgal9uZXR3b3JrX2luZm8sIGpfaGFuZGxlX2lkKSk7Ci0gIG5l
dHdvcmtfaW5mby50eXBlID0gR2V0TmV0d29ya1R5cGVGcm9tSmF2YSgKLSAgICAgIGpuaSwgR2V0
T2JqZWN0RmllbGQoam5pLCBqX25ldHdvcmtfaW5mbywgal90eXBlX2lkKSk7Ci0gIGpvYmplY3RB
cnJheSBqX2lwX2FkZHJlc3NlcyA9IHN0YXRpY19jYXN0PGpvYmplY3RBcnJheT4oCi0gICAgICBH
ZXRPYmplY3RGaWVsZChqbmksIGpfbmV0d29ya19pbmZvLCBqX2lwX2FkZHJlc3Nlc19pZCkpOwot
ICBHZXRJUEFkZHJlc3Nlc0Zyb21KYXZhKGpuaSwgal9pcF9hZGRyZXNzZXMsICZuZXR3b3JrX2lu
Zm8uaXBfYWRkcmVzc2VzKTsKLSAgcmV0dXJuIG5ldHdvcmtfaW5mbzsKLX0KLQotc3RkOjpzdHJp
bmcgTmV0d29ya0luZm9ybWF0aW9uOjpUb1N0cmluZygpIGNvbnN0IHsKLSAgc3RkOjpzdHJpbmdz
dHJlYW0gc3M7Ci0gIHNzIDw8ICJOZXRJbmZvW25hbWUgIiA8PCBpbnRlcmZhY2VfbmFtZSA8PCAi
OyBoYW5kbGUgIiA8PCBoYW5kbGUgPDwgIjsgdHlwZSAiCi0gICAgIDw8IHR5cGUgPDwgIjsgYWRk
cmVzcyI7Ci0gIGZvciAoY29uc3QgcnRjOjpJUEFkZHJlc3MgYWRkcmVzcyA6IGlwX2FkZHJlc3Nl
cykgewotICAgIHNzIDw8ICIgIiA8PCBhZGRyZXNzLlRvU3RyaW5nKCk7Ci0gIH0KLSAgc3MgPDwg
Il0iOwotICByZXR1cm4gc3Muc3RyKCk7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBBbmRyb2lkTmV0
d29ya01vbml0b3I6OlNldEFuZHJvaWRDb250ZXh0KEpOSUVudiogam5pLCBqb2JqZWN0IGNvbnRl
eHQpIHsKLSAgaWYgKGFwcGxpY2F0aW9uX2NvbnRleHRfKSB7Ci0gICAgam5pLT5EZWxldGVHbG9i
YWxSZWYoYXBwbGljYXRpb25fY29udGV4dF8pOwotICB9Ci0gIGFwcGxpY2F0aW9uX2NvbnRleHRf
ID0gTmV3R2xvYmFsUmVmKGpuaSwgY29udGV4dCk7Ci19Ci0KLUFuZHJvaWROZXR3b3JrTW9uaXRv
cjo6QW5kcm9pZE5ldHdvcmtNb25pdG9yKCkKLSAgICA6IGpfbmV0d29ya19tb25pdG9yX2NsYXNz
XyhqbmkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaW5kQ2xhc3Moam5pKCks
ICJvcmcvd2VicnRjL05ldHdvcmtNb25pdG9yIikpLAotICAgICAgal9uZXR3b3JrX21vbml0b3Jf
KAotICAgICAgICAgIGpuaSgpLAotICAgICAgICAgIGpuaSgpLT5DYWxsU3RhdGljT2JqZWN0TWV0
aG9kKAotICAgICAgICAgICAgICAqal9uZXR3b3JrX21vbml0b3JfY2xhc3NfLAotICAgICAgICAg
ICAgICBHZXRTdGF0aWNNZXRob2RJRCgKLSAgICAgICAgICAgICAgICAgIGpuaSgpLAotICAgICAg
ICAgICAgICAgICAgKmpfbmV0d29ya19tb25pdG9yX2NsYXNzXywKLSAgICAgICAgICAgICAgICAg
ICJpbml0IiwKLSAgICAgICAgICAgICAgICAgICIoTGFuZHJvaWQvY29udGVudC9Db250ZXh0OylM
b3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvcjsiKSwKLSAgICAgICAgICAgICAgYXBwbGljYXRpb25f
Y29udGV4dF8pKSB7Ci0gIEFTU0VSVChhcHBsaWNhdGlvbl9jb250ZXh0XyAhPSBudWxscHRyKTsK
LSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiRXJyb3IgZHVyaW5nIE5ldHdvcmtNb25pdG9y
LmluaXQiOwotICBpZiAoYW5kcm9pZF9zZGtfaW50XyA8PSAwKSB7Ci0gICAgam1ldGhvZElEIG0g
PSBHZXRTdGF0aWNNZXRob2RJRChqbmkoKSwgKmpfbmV0d29ya19tb25pdG9yX2NsYXNzXywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbmRyb2lkU2RrSW50IiwgIigpSSIp
OwotICAgIGFuZHJvaWRfc2RrX2ludF8gPSBqbmkoKS0+Q2FsbFN0YXRpY0ludE1ldGhvZCgqal9u
ZXR3b3JrX21vbml0b3JfY2xhc3NfLCBtKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8
ICJFcnJvciBkdXJpbmcgTmV0d29ya01vbml0b3IuYW5kcm9pZFNka0ludCI7Ci0gIH0KLX0KLQot
dm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6OlN0YXJ0KCkgewotICBSVENfQ0hFQ0sodGhyZWFk
X2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGlmIChzdGFydGVkXykgewotICAg
IHJldHVybjsKLSAgfQotICBzdGFydGVkXyA9IHRydWU7Ci0KLSAgLy8gVGhpcyBpcyBraW5kIG9m
IG1hZ2ljIGJlaGF2aW9yLCBidXQgZG9pbmcgdGhpcyBhbGxvd3MgdGhlIFNvY2tldFNlcnZlciB0
bwotICAvLyB1c2UgdGhpcyBhcyBhIE5ldHdvcmtCaW5kZXIgdG8gYmluZCBzb2NrZXRzIG9uIGEg
cGFydGljdWxhciBuZXR3b3JrIHdoZW4KLSAgLy8gaXQgY3JlYXRlcyBzb2NrZXRzLgotICB3b3Jr
ZXJfdGhyZWFkKCktPnNvY2tldHNlcnZlcigpLT5zZXRfbmV0d29ya19iaW5kZXIodGhpcyk7Ci0K
LSAgam1ldGhvZElEIG0gPQotICAgICAgR2V0TWV0aG9kSUQoam5pKCksICpqX25ldHdvcmtfbW9u
aXRvcl9jbGFzc18sICJzdGFydE1vbml0b3JpbmciLCAiKEopViIpOwotICBqbmkoKS0+Q2FsbFZv
aWRNZXRob2QoKmpfbmV0d29ya19tb25pdG9yXywgbSwgamxvbmdGcm9tUG9pbnRlcih0aGlzKSk7
Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgIkVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhv
ZCI7Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpTdG9wKCkgewotICBSVENfQ0hF
Q0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGlmICghc3RhcnRl
ZF8pIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgc3RhcnRlZF8gPSBmYWxzZTsKLQotICAvLyBPbmNl
IHRoZSBuZXR3b3JrIG1vbml0b3Igc3RvcHMsIGl0IHdpbGwgY2xlYXIgYWxsIG5ldHdvcmsgaW5m
b3JtYXRpb24gYW5kCi0gIC8vIGl0IHdvbid0IGZpbmQgdGhlIG5ldHdvcmsgaGFuZGxlIHRvIGJp
bmQgYW55d2F5LgotICBpZiAod29ya2VyX3RocmVhZCgpLT5zb2NrZXRzZXJ2ZXIoKS0+bmV0d29y
a19iaW5kZXIoKSA9PSB0aGlzKSB7Ci0gICAgd29ya2VyX3RocmVhZCgpLT5zb2NrZXRzZXJ2ZXIo
KS0+c2V0X25ldHdvcmtfYmluZGVyKG51bGxwdHIpOwotICB9Ci0KLSAgam1ldGhvZElEIG0gPQot
ICAgICAgR2V0TWV0aG9kSUQoam5pKCksICpqX25ldHdvcmtfbW9uaXRvcl9jbGFzc18sICJzdG9w
TW9uaXRvcmluZyIsICIoSilWIik7Ci0gIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9uZXR3b3Jr
X21vbml0b3JfLCBtLCBqbG9uZ0Zyb21Qb2ludGVyKHRoaXMpKTsKLSAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSgpKSA8PCAiRXJyb3IgZHVyaW5nIE5ldHdvcmtNb25pdG9yLnN0b3BNb25pdG9yaW5nIjsK
LQotICBuZXR3b3JrX2hhbmRsZV9ieV9hZGRyZXNzXy5jbGVhcigpOwotICBuZXR3b3JrX2luZm9f
YnlfaGFuZGxlXy5jbGVhcigpOwotfQotCi0vLyBUaGUgaW1wbGVtZW50YXRpb24gaXMgbGFyZ2Vs
eSB0YWtlbiBmcm9tIFVEUFNvY2tldFBvc2l4OjpCaW5kVG9OZXR3b3JrIGluCi0vLyBodHRwczov
L2NzLmNocm9taXVtLm9yZy9jaHJvbWl1bS9zcmMvbmV0L3VkcC91ZHBfc29ja2V0X3Bvc2l4LmNj
Ci1pbnQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpCaW5kU29ja2V0VG9OZXR3b3JrKGludCBzb2Nr
ZXRfZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IHJ0Yzo6SVBBZGRyZXNzJiBhZGRyZXNzKSB7Ci0gIFJUQ19DSEVDSyh0aHJlYWRfY2hlY2tl
cl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgLy8gQW5kcm9pZCBwcmlvciB0byBMb2xsaXBv
cCBkaWRuJ3QgaGF2ZSBzdXBwb3J0IGZvciBiaW5kaW5nIHNvY2tldHMgdG8KLSAgLy8gbmV0d29y
a3MuIEluIHRoYXQgY2FzZSBpdCBzaG91bGQgbm90IGhhdmUgcmVhY2hlZCBoZXJlIGJlY2F1c2UK
LSAgLy8gfG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJlc3NffCBpcyBvbmx5IHBvcHVsYXRlZCBpbiBB
bmRyb2lkIExvbGxpcG9wCi0gIC8vIGFuZCBhYm92ZS4KLSAgaWYgKGFuZHJvaWRfc2RrX2ludF8g
PCBTREtfVkVSU0lPTl9MT0xMSVBPUCkgewotICAgIExPRyhMU19FUlJPUikgPDwgIkJpbmRTb2Nr
ZXRUb05ldHdvcmsgaXMgbm90IHN1cHBvcnRlZCBpbiBBbmRyb2lkIFNESyAiCi0gICAgICAgICAg
ICAgICAgICA8PCBhbmRyb2lkX3Nka19pbnRfOwotICAgIHJldHVybiBydGM6Ok5FVFdPUktfQklO
RF9OT1RfSU1QTEVNRU5URUQ7Ci0gIH0KLQotICBhdXRvIGl0ZXIgPSBuZXR3b3JrX2hhbmRsZV9i
eV9hZGRyZXNzXy5maW5kKGFkZHJlc3MpOwotICBpZiAoaXRlciA9PSBuZXR3b3JrX2hhbmRsZV9i
eV9hZGRyZXNzXy5lbmQoKSkgewotICAgIHJldHVybiBydGM6Ok5FVFdPUktfQklORF9BRERSRVNT
X05PVF9GT1VORDsKLSAgfQotICBOZXR3b3JrSGFuZGxlIG5ldHdvcmtfaGFuZGxlID0gaXRlci0+
c2Vjb25kOwotCi0gIGludCBydiA9IDA7Ci0gIGlmIChhbmRyb2lkX3Nka19pbnRfID49IFNES19W
RVJTSU9OX01BUlNITUFMTE9XKSB7Ci0gICAgLy8gU2VlIGRlY2xhcmF0aW9uIG9mIGFuZHJvaWRf
c2V0c29ja25ldHdvcmsoKSBoZXJlOgotICAgIC8vIGh0dHA6Ly9hbmRyb2lkeHJlZi5jb20vNi4w
LjBfcjEveHJlZi9kZXZlbG9wbWVudC9uZGsvcGxhdGZvcm1zL2FuZHJvaWQtTS9pbmNsdWRlL2Fu
ZHJvaWQvbXVsdGluZXR3b3JrLmgjNjUKLSAgICAvLyBGdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVk
IGRpcmVjdGx5IGFzIGl0IHdpbGwgY2F1c2UgYXBwIHRvIGZhaWwgdG8gbG9hZAotICAgIC8vIG9u
IHByZS1tYXJzaG1hbGxvdyBkZXZpY2VzLgotICAgIHR5cGVkZWYgaW50ICgqTWFyc2htYWxsb3dT
ZXROZXR3b3JrRm9yU29ja2V0KShOZXR3b3JrSGFuZGxlIG5ldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvY2tldCk7Ci0gICAgc3RhdGlj
IE1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCBtYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JT
b2NrZXQ7Ci0gICAgLy8gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsIGJ1dCB3ZSBhcmUgcnVubmlu
ZyB0aGlzIG9ubHkgb24gdGhlIHdvcmtlcgotICAgIC8vIHRocmVhZC4KLSAgICBpZiAoIW1hcnNo
bWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCkgewotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgYW5k
cm9pZF9uYXRpdmVfbGliX3BhdGggPSAibGliYW5kcm9pZC5zbyI7Ci0gICAgICB2b2lkKiBsaWIg
PSBkbG9wZW4oYW5kcm9pZF9uYXRpdmVfbGliX3BhdGguY19zdHIoKSwgUlRMRF9OT1cpOwotICAg
ICAgaWYgKGxpYiA9PSBudWxscHRyKSB7Ci0gICAgICAgIExPRyhMU19FUlJPUikgPDwgIkxpYnJh
cnkgIiA8PCBhbmRyb2lkX25hdGl2ZV9saWJfcGF0aCA8PCAiIG5vdCBmb3VuZCEiOwotICAgICAg
ICByZXR1cm4gcnRjOjpORVRXT1JLX0JJTkRfTk9UX0lNUExFTUVOVEVEOwotICAgICAgfQotICAg
ICAgbWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0ID0KLSAgICAgICAgICByZWludGVycHJl
dF9jYXN0PE1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldD4oCi0gICAgICAgICAgICAgIGRs
c3ltKGxpYiwgImFuZHJvaWRfc2V0c29ja25ldHdvcmsiKSk7Ci0gICAgfQotICAgIGlmICghbWFy
c2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0KSB7Ci0gICAgICBMT0coTFNfRVJST1IpIDw8ICJT
eW1ib2wgbWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0IGlzIG5vdCBmb3VuZCI7Ci0gICAg
ICByZXR1cm4gcnRjOjpORVRXT1JLX0JJTkRfTk9UX0lNUExFTUVOVEVEOwotICAgIH0KLSAgICBy
diA9IG1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldChuZXR3b3JrX2hhbmRsZSwgc29ja2V0
X2ZkKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiBBbmRyb2lkIGlt
cGxlbWVudGF0aW9uIGRldGFpbHMsIGJ1dCBpdCB3b24ndCBjaGFuZ2UKLSAgICAvLyBiZWNhdXNl
IExvbGxpcG9wIGlzIGFscmVhZHkgcmVsZWFzZWQuCi0gICAgdHlwZWRlZiBpbnQgKCpMb2xsaXBv
cFNldE5ldHdvcmtGb3JTb2NrZXQpKHVuc2lnbmVkIG5ldCwgaW50IHNvY2tldCk7Ci0gICAgc3Rh
dGljIExvbGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldCBsb2xsaXBvcFNldE5ldHdvcmtGb3JTb2Nr
ZXQ7Ci0gICAgLy8gVGhpcyBpcyBub3QgdGhyZWFkc2FmZSwgYnV0IHdlIGFyZSBydW5uaW5nIHRo
aXMgb25seSBvbiB0aGUgd29ya2VyCi0gICAgLy8gdGhyZWFkLgotICAgIGlmICghbG9sbGlwb3BT
ZXROZXR3b3JrRm9yU29ja2V0KSB7Ci0gICAgICAvLyBBbmRyb2lkJ3MgbmV0ZCBjbGllbnQgbGli
cmFyeSBzaG91bGQgYWx3YXlzIGJlIGxvYWRlZCBpbiBvdXIgYWRkcmVzcwotICAgICAgLy8gc3Bh
Y2UgYXMgaXQgc2hpbXMgbGliYyBmdW5jdGlvbnMgbGlrZSBjb25uZWN0KCkuCi0gICAgICBjb25z
dCBzdGQ6OnN0cmluZyBuZXRfbGlicmFyeV9wYXRoID0gImxpYm5ldGRfY2xpZW50LnNvIjsKLSAg
ICAgIC8vIFVzZSBSVExEX05PVyB0byBtYXRjaCBBbmRyb2lkJ3MgcHJpb3IgbG9hZGluZyBvZiB0
aGUgbGlicmFyeToKLSAgICAgIC8vIGh0dHA6Ly9hbmRyb2lkeHJlZi5jb20vNi4wLjBfcjUveHJl
Zi9iaW9uaWMvbGliYy9iaW9uaWMvTmV0ZENsaWVudC5jcHAjMzcKLSAgICAgIC8vIFVzZSBSVExE
X05PTE9BRCB0byBhc3NlcnQgdGhhdCB0aGUgbGlicmFyeSBpcyBhbHJlYWR5IGxvYWRlZCBhbmQK
LSAgICAgIC8vIGF2b2lkIGRvaW5nIGFueSBkaXNrIElPLgotICAgICAgdm9pZCogbGliID0gZGxv
cGVuKG5ldF9saWJyYXJ5X3BhdGguY19zdHIoKSwgUlRMRF9OT1cgfCBSVExEX05PTE9BRCk7Ci0g
ICAgICBpZiAobGliID09IG51bGxwdHIpIHsKLSAgICAgICAgTE9HKExTX0VSUk9SKSA8PCAiTGli
cmFyeSAiIDw8IG5ldF9saWJyYXJ5X3BhdGggPDwgIiBub3QgZm91bmQhIjsKLSAgICAgICAgcmV0
dXJuIHJ0Yzo6TkVUV09SS19CSU5EX05PVF9JTVBMRU1FTlRFRDsKLSAgICAgIH0KLSAgICAgIGxv
bGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldCA9Ci0gICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxM
b2xsaXBvcFNldE5ldHdvcmtGb3JTb2NrZXQ+KAotICAgICAgICAgICAgICBkbHN5bShsaWIsICJz
ZXROZXR3b3JrRm9yU29ja2V0IikpOwotICAgIH0KLSAgICBpZiAoIWxvbGxpcG9wU2V0TmV0d29y
a0ZvclNvY2tldCkgewotICAgICAgTE9HKExTX0VSUk9SKSA8PCAiU3ltYm9sIGxvbGxpcG9wU2V0
TmV0d29ya0ZvclNvY2tldCBpcyBub3QgZm91bmQgIjsKLSAgICAgIHJldHVybiBydGM6Ok5FVFdP
UktfQklORF9OT1RfSU1QTEVNRU5URUQ7Ci0gICAgfQotICAgIHJ2ID0gbG9sbGlwb3BTZXROZXR3
b3JrRm9yU29ja2V0KG5ldHdvcmtfaGFuZGxlLCBzb2NrZXRfZmQpOwotICB9Ci0KLSAgLy8gSWYg
fG5ldHdvcmt8IGhhcyBzaW5jZSBkaXNjb25uZWN0ZWQsIHxydnwgd2lsbCBiZSBFTk9ORVQuICBT
dXJmYWNlIHRoaXMgYXMKLSAgLy8gRVJSX05FVFdPUktfQ0hBTkdFRCwgcmF0aGVyIHRoYW4gTWFw
U3lzdGVtRXJyb3IoRU5PTkVUKSB3aGljaCBnaXZlcyBiYWNrCi0gIC8vIHRoZSBsZXNzIGRlc2Ny
aXB0aXZlIEVSUl9GQUlMRUQuCi0gIGlmIChydiA9PSAwKSB7Ci0gICAgcmV0dXJuIHJ0Yzo6TkVU
V09SS19CSU5EX1NVQ0NFU1M7Ci0gIH0KLSAgaWYgKHJ2ID09IEVOT05FVCkgewotICAgIHJldHVy
biBydGM6Ok5FVFdPUktfQklORF9ORVRXT1JLX0NIQU5HRUQ7Ci0gIH0KLSAgcmV0dXJuIHJ0Yzo6
TkVUV09SS19CSU5EX0ZBSUxVUkU7Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpP
bk5ldHdvcmtDb25uZWN0ZWQoCi0gICAgY29uc3QgTmV0d29ya0luZm9ybWF0aW9uJiBuZXR3b3Jr
X2luZm8pIHsKLSAgd29ya2VyX3RocmVhZCgpLT5JbnZva2U8dm9pZD4oCi0gICAgICBSVENfRlJP
TV9IRVJFLCBydGM6OkJpbmQoJkFuZHJvaWROZXR3b3JrTW9uaXRvcjo6T25OZXR3b3JrQ29ubmVj
dGVkX3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywgbmV0d29ya19pbmZv
KSk7Ci0gIC8vIEZpcmUgU2lnbmFsTmV0d29ya3NDaGFuZ2VkIHRvIHVwZGF0ZSB0aGUgbGlzdCBv
ZiBuZXR3b3Jrcy4KLSAgT25OZXR3b3Jrc0NoYW5nZWQoKTsKLX0KLQotdm9pZCBBbmRyb2lkTmV0
d29ya01vbml0b3I6Ok9uTmV0d29ya0Nvbm5lY3RlZF93KAotICAgIGNvbnN0IE5ldHdvcmtJbmZv
cm1hdGlvbiYgbmV0d29ya19pbmZvKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiTmV0d29yayBjb25u
ZWN0ZWQ6ICIgPDwgbmV0d29ya19pbmZvLlRvU3RyaW5nKCk7Ci0gIGFkYXB0ZXJfdHlwZV9ieV9u
YW1lX1tuZXR3b3JrX2luZm8uaW50ZXJmYWNlX25hbWVdID0KLSAgICAgIEFkYXB0ZXJUeXBlRnJv
bU5ldHdvcmtUeXBlKG5ldHdvcmtfaW5mby50eXBlKTsKLSAgbmV0d29ya19pbmZvX2J5X2hhbmRs
ZV9bbmV0d29ya19pbmZvLmhhbmRsZV0gPSBuZXR3b3JrX2luZm87Ci0gIGZvciAoY29uc3QgcnRj
OjpJUEFkZHJlc3MmIGFkZHJlc3MgOiBuZXR3b3JrX2luZm8uaXBfYWRkcmVzc2VzKSB7Ci0gICAg
bmV0d29ya19oYW5kbGVfYnlfYWRkcmVzc19bYWRkcmVzc10gPSBuZXR3b3JrX2luZm8uaGFuZGxl
OwotICB9Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpPbk5ldHdvcmtEaXNjb25u
ZWN0ZWQoTmV0d29ya0hhbmRsZSBoYW5kbGUpIHsKLSAgTE9HKExTX0lORk8pIDw8ICJOZXR3b3Jr
IGRpc2Nvbm5lY3RlZCBmb3IgaGFuZGxlICIgPDwgaGFuZGxlOwotICB3b3JrZXJfdGhyZWFkKCkt
Pkludm9rZTx2b2lkPigKLSAgICAgIFJUQ19GUk9NX0hFUkUsCi0gICAgICBydGM6OkJpbmQoJkFu
ZHJvaWROZXR3b3JrTW9uaXRvcjo6T25OZXR3b3JrRGlzY29ubmVjdGVkX3csIHRoaXMsIGhhbmRs
ZSkpOwotfQotCi12b2lkIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6T25OZXR3b3JrRGlzY29ubmVj
dGVkX3coTmV0d29ya0hhbmRsZSBoYW5kbGUpIHsKLSAgYXV0byBpdGVyID0gbmV0d29ya19pbmZv
X2J5X2hhbmRsZV8uZmluZChoYW5kbGUpOwotICBpZiAoaXRlciAhPSBuZXR3b3JrX2luZm9fYnlf
aGFuZGxlXy5lbmQoKSkgewotICAgIGZvciAoY29uc3QgcnRjOjpJUEFkZHJlc3MmIGFkZHJlc3Mg
OiBpdGVyLT5zZWNvbmQuaXBfYWRkcmVzc2VzKSB7Ci0gICAgICBuZXR3b3JrX2hhbmRsZV9ieV9h
ZGRyZXNzXy5lcmFzZShhZGRyZXNzKTsKLSAgICB9Ci0gICAgbmV0d29ya19pbmZvX2J5X2hhbmRs
ZV8uZXJhc2UoaXRlcik7Ci0gIH0KLX0KLQotdm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6OlNl
dE5ldHdvcmtJbmZvcygKLSAgICBjb25zdCBzdGQ6OnZlY3RvcjxOZXR3b3JrSW5mb3JtYXRpb24+
JiBuZXR3b3JrX2luZm9zKSB7Ci0gIFJUQ19DSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25W
YWxpZFRocmVhZCgpKTsKLSAgbmV0d29ya19oYW5kbGVfYnlfYWRkcmVzc18uY2xlYXIoKTsKLSAg
bmV0d29ya19pbmZvX2J5X2hhbmRsZV8uY2xlYXIoKTsKLSAgTE9HKExTX0lORk8pIDw8ICJBbmRy
b2lkIG5ldHdvcmsgbW9uaXRvciBmb3VuZCAiIDw8IG5ldHdvcmtfaW5mb3Muc2l6ZSgpCi0gICAg
ICAgICAgICAgICA8PCAiIG5ldHdvcmtzIjsKLSAgZm9yIChOZXR3b3JrSW5mb3JtYXRpb24gbmV0
d29yayA6IG5ldHdvcmtfaW5mb3MpIHsKLSAgICBPbk5ldHdvcmtDb25uZWN0ZWRfdyhuZXR3b3Jr
KTsKLSAgfQotfQotCi1ydGM6OkFkYXB0ZXJUeXBlIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6R2V0
QWRhcHRlclR5cGUoCi0gICAgY29uc3Qgc3RkOjpzdHJpbmcmIGlmX25hbWUpIHsKLSAgYXV0byBp
dGVyID0gYWRhcHRlcl90eXBlX2J5X25hbWVfLmZpbmQoaWZfbmFtZSk7Ci0gIHJ0Yzo6QWRhcHRl
clR5cGUgdHlwZSA9IChpdGVyID09IGFkYXB0ZXJfdHlwZV9ieV9uYW1lXy5lbmQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gcnRjOjpBREFQVEVSX1RZUEVfVU5LTk9XTgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpdGVyLT5zZWNvbmQ7Ci0gIGlmICh0eXBlID09
IHJ0Yzo6QURBUFRFUl9UWVBFX1VOS05PV04pIHsKLSAgICBMT0coTFNfV0FSTklORykgPDwgIkdl
dCBhbiB1bmtub3duIHR5cGUgZm9yIHRoZSBpbnRlcmZhY2UgIiA8PCBpZl9uYW1lOwotICB9Ci0g
IHJldHVybiB0eXBlOwotfQotCi1ydGM6Ok5ldHdvcmtNb25pdG9ySW50ZXJmYWNlKgotQW5kcm9p
ZE5ldHdvcmtNb25pdG9yRmFjdG9yeTo6Q3JlYXRlTmV0d29ya01vbml0b3IoKSB7Ci0gIHJldHVy
biBuZXcgQW5kcm9pZE5ldHdvcmtNb25pdG9yKCk7Ci19Ci0KLUpPVyh2b2lkLCBOZXR3b3JrTW9u
aXRvcl9uYXRpdmVOb3RpZnlDb25uZWN0aW9uVHlwZUNoYW5nZWQpKAotICAgIEpOSUVudiogam5p
LCBqb2JqZWN0IGpfbW9uaXRvciwgamxvbmcgal9uYXRpdmVfbW9uaXRvcikgewotICBydGM6Ok5l
dHdvcmtNb25pdG9ySW50ZXJmYWNlKiBuZXR3b3JrX21vbml0b3IgPQotICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxydGM6Ok5ldHdvcmtNb25pdG9ySW50ZXJmYWNlKj4oal9uYXRpdmVfbW9uaXRvcik7
Ci0gIG5ldHdvcmtfbW9uaXRvci0+T25OZXR3b3Jrc0NoYW5nZWQoKTsKLX0KLQotSk9XKHZvaWQs
IE5ldHdvcmtNb25pdG9yX25hdGl2ZU5vdGlmeU9mQWN0aXZlTmV0d29ya0xpc3QpKAotICAgIEpO
SUVudiogam5pLCBqb2JqZWN0IGpfbW9uaXRvciwgamxvbmcgal9uYXRpdmVfbW9uaXRvciwKLSAg
ICBqb2JqZWN0QXJyYXkgal9uZXR3b3JrX2luZm9zKSB7Ci0gIEFuZHJvaWROZXR3b3JrTW9uaXRv
ciogbmV0d29ya19tb25pdG9yID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QW5kcm9pZE5ldHdv
cmtNb25pdG9yKj4oal9uYXRpdmVfbW9uaXRvcik7Ci0gIHN0ZDo6dmVjdG9yPE5ldHdvcmtJbmZv
cm1hdGlvbj4gbmV0d29ya19pbmZvczsKLSAgc2l6ZV90IG51bV9uZXR3b3JrcyA9IGpuaS0+R2V0
QXJyYXlMZW5ndGgoal9uZXR3b3JrX2luZm9zKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1fbmV0d29ya3M7ICsraSkgewotICAgIGpvYmplY3Qgal9uZXR3b3JrX2luZm8gPSBqbmktPkdl
dE9iamVjdEFycmF5RWxlbWVudChqX25ldHdvcmtfaW5mb3MsIGkpOwotICAgIENIRUNLX0VYQ0VQ
VElPTihqbmkpIDw8ICJFcnJvciBkdXJpbmcgR2V0T2JqZWN0QXJyYXlFbGVtZW50IjsKLSAgICBu
ZXR3b3JrX2luZm9zLnB1c2hfYmFjayhHZXROZXR3b3JrSW5mb3JtYXRpb25Gcm9tSmF2YShqbmks
IGpfbmV0d29ya19pbmZvKSk7Ci0gIH0KLSAgbmV0d29ya19tb25pdG9yLT5TZXROZXR3b3JrSW5m
b3MobmV0d29ya19pbmZvcyk7Ci19Ci0KLUpPVyh2b2lkLCBOZXR3b3JrTW9uaXRvcl9uYXRpdmVO
b3RpZnlPZk5ldHdvcmtDb25uZWN0KSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX21vbml0
b3IsIGpsb25nIGpfbmF0aXZlX21vbml0b3IsCi0gICAgam9iamVjdCBqX25ldHdvcmtfaW5mbykg
ewotICBBbmRyb2lkTmV0d29ya01vbml0b3IqIG5ldHdvcmtfbW9uaXRvciA9Ci0gICAgICByZWlu
dGVycHJldF9jYXN0PEFuZHJvaWROZXR3b3JrTW9uaXRvcio+KGpfbmF0aXZlX21vbml0b3IpOwot
ICBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya19pbmZvID0KLSAgICAgIEdldE5ldHdvcmtJbmZv
cm1hdGlvbkZyb21KYXZhKGpuaSwgal9uZXR3b3JrX2luZm8pOwotICBuZXR3b3JrX21vbml0b3It
Pk9uTmV0d29ya0Nvbm5lY3RlZChuZXR3b3JrX2luZm8pOwotfQotCi1KT1codm9pZCwgTmV0d29y
a01vbml0b3JfbmF0aXZlTm90aWZ5T2ZOZXR3b3JrRGlzY29ubmVjdCkoCi0gICAgSk5JRW52KiBq
bmksIGpvYmplY3Qgal9tb25pdG9yLCBqbG9uZyBqX25hdGl2ZV9tb25pdG9yLAotICAgIGpsb25n
IG5ldHdvcmtfaGFuZGxlKSB7Ci0gIEFuZHJvaWROZXR3b3JrTW9uaXRvciogbmV0d29ya19tb25p
dG9yID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QW5kcm9pZE5ldHdvcmtNb25pdG9yKj4oal9u
YXRpdmVfbW9uaXRvcik7Ci0gIG5ldHdvcmtfbW9uaXRvci0+T25OZXR3b3JrRGlzY29ubmVjdGVk
KAotICAgICAgc3RhdGljX2Nhc3Q8TmV0d29ya0hhbmRsZT4obmV0d29ya19oYW5kbGUpKTsKLX0K
LQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbmV0d29ya21vbml0
b3Jfam5pLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRuZXR3b3JrbW9uaXRvcl9qbmkuaAkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRuZXR3b3JrbW9uaXRvcl9qbmkuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRD
X0FQSV9KQVZBX0pOSV9BTkRST0lETkVUV09SS01PTklUT1JfSk5JX0hfCi0jZGVmaW5lIFdFQlJU
Q19BUElfSkFWQV9KTklfQU5EUk9JRE5FVFdPUktNT05JVE9SX0pOSV9IXwotCi0jaW5jbHVkZSAi
d2VicnRjL2Jhc2UvbmV0d29ya21vbml0b3IuaCIKLQotI2luY2x1ZGUgPG1hcD4KLQotI2luY2x1
ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvYmFzZS9iYXNpY3R5cGVzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGhyZWFkX2NoZWNr
ZXIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi10eXBlZGVmIGludDY0X3QgTmV0d29y
a0hhbmRsZTsKLQotLy8gYysrIGVxdWl2YWxlbnQgb2YgamF2YSBOZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QuQ29ubmVjdGlvblR5cGUuCi1lbnVtIE5ldHdvcmtUeXBlIHsKLSAgTkVUV09SS19VTktO
T1dOLAotICBORVRXT1JLX0VUSEVSTkVULAotICBORVRXT1JLX1dJRkksCi0gIE5FVFdPUktfNEcs
Ci0gIE5FVFdPUktfM0csCi0gIE5FVFdPUktfMkcsCi0gIE5FVFdPUktfVU5LTk9XTl9DRUxMVUxB
UiwKLSAgTkVUV09SS19CTFVFVE9PVEgsCi0gIE5FVFdPUktfTk9ORQotfTsKLQotLy8gVGhlIGlu
Zm9ybWF0aW9uIGlzIGNvbGxlY3RlZCBmcm9tIEFuZHJvaWQgT1Mgc28gdGhhdCB0aGUgbmF0aXZl
IGNvZGUgY2FuIGdldAotLy8gdGhlIG5ldHdvcmsgdHlwZSBhbmQgaGFuZGxlIChBbmRyb2lkIG5l
dHdvcmsgSUQpIGZvciBlYWNoIGludGVyZmFjZS4KLXN0cnVjdCBOZXR3b3JrSW5mb3JtYXRpb24g
ewotICBzdGQ6OnN0cmluZyBpbnRlcmZhY2VfbmFtZTsKLSAgTmV0d29ya0hhbmRsZSBoYW5kbGU7
Ci0gIE5ldHdvcmtUeXBlIHR5cGU7Ci0gIHN0ZDo6dmVjdG9yPHJ0Yzo6SVBBZGRyZXNzPiBpcF9h
ZGRyZXNzZXM7Ci0KLSAgc3RkOjpzdHJpbmcgVG9TdHJpbmcoKSBjb25zdDsKLX07Ci0KLWNsYXNz
IEFuZHJvaWROZXR3b3JrTW9uaXRvciA6IHB1YmxpYyBydGM6Ok5ldHdvcmtNb25pdG9yQmFzZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBydGM6Ok5ldHdvcmtCaW5kZXJJ
bnRlcmZhY2UgewotIHB1YmxpYzoKLSAgQW5kcm9pZE5ldHdvcmtNb25pdG9yKCk7Ci0KLSAgc3Rh
dGljIHZvaWQgU2V0QW5kcm9pZENvbnRleHQoSk5JRW52KiBqbmksIGpvYmplY3QgY29udGV4dCk7
Ci0KLSAgdm9pZCBTdGFydCgpIG92ZXJyaWRlOwotICB2b2lkIFN0b3AoKSBvdmVycmlkZTsKLQot
ICBpbnQgQmluZFNvY2tldFRvTmV0d29yayhpbnQgc29ja2V0X2ZkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBydGM6OklQQWRkcmVzcyYgYWRkcmVzcykgb3ZlcnJpZGU7Ci0gIHJ0
Yzo6QWRhcHRlclR5cGUgR2V0QWRhcHRlclR5cGUoY29uc3Qgc3RkOjpzdHJpbmcmIGlmX25hbWUp
IG92ZXJyaWRlOwotICB2b2lkIE9uTmV0d29ya0Nvbm5lY3RlZChjb25zdCBOZXR3b3JrSW5mb3Jt
YXRpb24mIG5ldHdvcmtfaW5mbyk7Ci0gIHZvaWQgT25OZXR3b3JrRGlzY29ubmVjdGVkKE5ldHdv
cmtIYW5kbGUgbmV0d29ya19oYW5kbGUpOwotICB2b2lkIFNldE5ldHdvcmtJbmZvcyhjb25zdCBz
dGQ6OnZlY3RvcjxOZXR3b3JrSW5mb3JtYXRpb24+JiBuZXR3b3JrX2luZm9zKTsKLQotIHByaXZh
dGU6Ci0gIHN0YXRpYyBqb2JqZWN0IGFwcGxpY2F0aW9uX2NvbnRleHRfOwotICBzdGF0aWMgaW50
IGFuZHJvaWRfc2RrX2ludF87Ci0gIEpOSUVudiogam5pKCkgeyByZXR1cm4gQXR0YWNoQ3VycmVu
dFRocmVhZElmTmVlZGVkKCk7IH0KLQotICB2b2lkIE9uTmV0d29ya0Nvbm5lY3RlZF93KGNvbnN0
IE5ldHdvcmtJbmZvcm1hdGlvbiYgbmV0d29ya19pbmZvKTsKLSAgdm9pZCBPbk5ldHdvcmtEaXNj
b25uZWN0ZWRfdyhOZXR3b3JrSGFuZGxlIG5ldHdvcmtfaGFuZGxlKTsKLQotICBTY29wZWRHbG9i
YWxSZWY8amNsYXNzPiBqX25ldHdvcmtfbW9uaXRvcl9jbGFzc187Ci0gIFNjb3BlZEdsb2JhbFJl
Zjxqb2JqZWN0PiBqX25ldHdvcmtfbW9uaXRvcl87Ci0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJl
YWRfY2hlY2tlcl87Ci0gIGJvb2wgc3RhcnRlZF8gPSBmYWxzZTsKLSAgc3RkOjptYXA8c3RkOjpz
dHJpbmcsIHJ0Yzo6QWRhcHRlclR5cGU+IGFkYXB0ZXJfdHlwZV9ieV9uYW1lXzsKLSAgc3RkOjpt
YXA8cnRjOjpJUEFkZHJlc3MsIE5ldHdvcmtIYW5kbGU+IG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJl
c3NfOwotICBzdGQ6Om1hcDxOZXR3b3JrSGFuZGxlLCBOZXR3b3JrSW5mb3JtYXRpb24+IG5ldHdv
cmtfaW5mb19ieV9oYW5kbGVfOwotfTsKLQotY2xhc3MgQW5kcm9pZE5ldHdvcmtNb25pdG9yRmFj
dG9yeSA6IHB1YmxpYyBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSB7Ci0gcHVibGljOgotICBB
bmRyb2lkTmV0d29ya01vbml0b3JGYWN0b3J5KCkge30KLQotICBydGM6Ok5ldHdvcmtNb25pdG9y
SW50ZXJmYWNlKiBDcmVhdGVOZXR3b3JrTW9uaXRvcigpIG92ZXJyaWRlOwotfTsKLQotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2VuZGlmICAvLyBXRUJSVENfQVBJX0pBVkFfSk5JX0FO
RFJPSURORVRXT1JLTU9OSVRPUl9KTklfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkdmlkZW90cmFja3NvdXJj
ZV9qbmkuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWR2aWRlb3RyYWNrc291cmNlX2puaS5jYwko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWR2aWRlb3RyYWNrc291cmNlX2puaS5jYwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5j
bHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZHZpZGVvdHJhY2tzb3VyY2UuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvYXBpL3ZpZGVvc291cmNlcHJveHkuaCIKLQotLy8gSWRlbnRpZmllcnMgYXJlIG92ZXIg
ODAgY2hhcmFjdGVycyBsb25nIHNvIHRoaXMgaXMgbmVlZGVkIHRvIGZpdCB0aGVtIG9uIG9uZQot
Ly8gbGluZS4KLSNkZWZpbmUgSk9XX09CU0VSVkVSX01FVEhPRChyZXR0eXBlLCBuYW1lKSBcCi0g
IEpPVyhyZXR0eXBlLCBWaWRlb0NhcHR1cmVyXzAwMDI0QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VP
YnNlcnZlcl8jI25hbWUpCi0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotc3RhdGljIHdlYnJ0
Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UqIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlRnJvbUph
dmFQcm94eSgKLSAgICBqbG9uZyBqX3Byb3h5KSB7Ci0gIGF1dG8gcHJveHlfc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDx3ZWJydGM6OlZpZGVvVHJhY2tTb3VyY2VQcm94eSo+KGpfcHJveHkpOwot
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx3ZWJydGM6OkFuZHJvaWRWaWRlb1RyYWNrU291cmNl
Kj4oCi0gICAgICBwcm94eV9zb3VyY2UtPmludGVybmFsKCkpOwotfQotCi1KT1dfT0JTRVJWRVJf
TUVUSE9EKHZvaWQsIG5hdGl2ZU9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQpCi0oSk5JRW52KiBq
bmksCi0gamNsYXNzLAotIGpsb25nIGpfc291cmNlLAotIGpieXRlQXJyYXkgal9mcmFtZSwKLSBq
aW50IGxlbmd0aCwKLSBqaW50IHdpZHRoLAotIGppbnQgaGVpZ2h0LAotIGppbnQgcm90YXRpb24s
Ci0gamxvbmcgdGltZXN0YW1wKSB7Ci0gIHdlYnJ0Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2Uq
IHNvdXJjZSA9Ci0gICAgICBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZUZyb21KYXZhUHJveHkoal9z
b3VyY2UpOwotICBqYnl0ZSogYnl0ZXMgPSBqbmktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGpfZnJh
bWUsIG51bGxwdHIpOwotICBzb3VyY2UtPk9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoYnl0ZXMs
IGxlbmd0aCwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lc3RhbXApOwotICBqbmktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50
cyhqX2ZyYW1lLCBieXRlcywgSk5JX0FCT1JUKTsKLX0KLQotSk9XX09CU0VSVkVSX01FVEhPRCh2
b2lkLCBuYXRpdmVPblRleHR1cmVGcmFtZUNhcHR1cmVkKQotKEpOSUVudiogam5pLAotIGpjbGFz
cywKLSBqbG9uZyBqX3NvdXJjZSwKLSBqaW50IGpfd2lkdGgsCi0gamludCBqX2hlaWdodCwKLSBq
aW50IGpfb2VzX3RleHR1cmVfaWQsCi0gamZsb2F0QXJyYXkgal90cmFuc2Zvcm1fbWF0cml4LAot
IGppbnQgal9yb3RhdGlvbiwKLSBqbG9uZyBqX3RpbWVzdGFtcCkgewotICB3ZWJydGM6OkFuZHJv
aWRWaWRlb1RyYWNrU291cmNlKiBzb3VyY2UgPQotICAgICAgQW5kcm9pZFZpZGVvVHJhY2tTb3Vy
Y2VGcm9tSmF2YVByb3h5KGpfc291cmNlKTsKLSAgc291cmNlLT5PblRleHR1cmVGcmFtZUNhcHR1
cmVkKAotICAgICAgal93aWR0aCwgal9oZWlnaHQsIGpfcm90YXRpb24sIGpfdGltZXN0YW1wLAot
ICAgICAgTmF0aXZlSGFuZGxlSW1wbChqbmksIGpfb2VzX3RleHR1cmVfaWQsIGpfdHJhbnNmb3Jt
X21hdHJpeCkpOwotfQotCi1KT1dfT0JTRVJWRVJfTUVUSE9EKHZvaWQsIG5hdGl2ZUNhcHR1cmVy
U3RhcnRlZCkKLShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3NvdXJjZSwgamJvb2xlYW4g
al9zdWNjZXNzKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VP
YnNlcnZlX25hdGl2ZUNhcHR1cmVyU3RhcnRlZCI7Ci0gIHdlYnJ0Yzo6QW5kcm9pZFZpZGVvVHJh
Y2tTb3VyY2UqIHNvdXJjZSA9Ci0gICAgICBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZUZyb21KYXZh
UHJveHkoal9zb3VyY2UpOwotICBzb3VyY2UtPlNldFN0YXRlKGpfc3VjY2VzcwotICAgICAgICAg
ICAgICAgICAgICAgICA/IHdlYnJ0Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U6OlNvdXJjZVN0
YXRlOjprTGl2ZQotICAgICAgICAgICAgICAgICAgICAgICA6IHdlYnJ0Yzo6QW5kcm9pZFZpZGVv
VHJhY2tTb3VyY2U6OlNvdXJjZVN0YXRlOjprRW5kZWQpOwotfQotCi1KT1dfT0JTRVJWRVJfTUVU
SE9EKHZvaWQsIG5hdGl2ZUNhcHR1cmVyU3RvcHBlZCkKLShKTklFbnYqIGpuaSwgamNsYXNzLCBq
bG9uZyBqX3NvdXJjZSkgewotICBMT0coTFNfSU5GTykgPDwgIkFuZHJvaWRWaWRlb1RyYWNrU291
cmNlT2JzZXJ2ZV9uYXRpdmVDYXB0dXJlclN0b3BwZWQiOwotICB3ZWJydGM6OkFuZHJvaWRWaWRl
b1RyYWNrU291cmNlKiBzb3VyY2UgPQotICAgICAgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VGcm9t
SmF2YVByb3h5KGpfc291cmNlKTsKLSAgc291cmNlLT5TZXRTdGF0ZSh3ZWJydGM6OkFuZHJvaWRW
aWRlb1RyYWNrU291cmNlOjpTb3VyY2VTdGF0ZTo6a0VuZGVkKTsKLX0KLQotSk9XKHZvaWQsIFZp
ZGVvU291cmNlX25hdGl2ZUFkYXB0T3V0cHV0Rm9ybWF0KQotKEpOSUVudiogam5pLCBqY2xhc3Ms
IGpsb25nIGpfc291cmNlLCBqaW50IGpfd2lkdGgsIGppbnQgal9oZWlnaHQsIGppbnQgal9mcHMp
IHsKLSAgTE9HKExTX0lORk8pIDw8ICJWaWRlb1NvdXJjZV9uYXRpdmVBZGFwdE91dHB1dEZvcm1h
dCI7Ci0gIHdlYnJ0Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UqIHNvdXJjZSA9Ci0gICAgICBB
bmRyb2lkVmlkZW9UcmFja1NvdXJjZUZyb21KYXZhUHJveHkoal9zb3VyY2UpOwotICBzb3VyY2Ut
Pk9uT3V0cHV0Rm9ybWF0UmVxdWVzdChqX3dpZHRoLCBqX2hlaWdodCwgal9mcHMpOwotfQotCi19
ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmNj
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5jYwkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmNjCShub25leGlzdGVudCkKQEAgLTEsMTM2ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2pu
aS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oIgotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lk
L2puaS9qbmlfaGVscGVycy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIENsYXNz
UmVmZXJlbmNlSG9sZGVyIGhvbGRzIGdsb2JhbCByZWZlcmVuY2UgdG8gSmF2YSBjbGFzc2VzIGlu
IGFwcC93ZWJydGMuCi1jbGFzcyBDbGFzc1JlZmVyZW5jZUhvbGRlciB7Ci0gcHVibGljOgotICBl
eHBsaWNpdCBDbGFzc1JlZmVyZW5jZUhvbGRlcihKTklFbnYqIGpuaSk7Ci0gIH5DbGFzc1JlZmVy
ZW5jZUhvbGRlcigpOwotCi0gIHZvaWQgRnJlZVJlZmVyZW5jZXMoSk5JRW52KiBqbmkpOwotICBq
Y2xhc3MgR2V0Q2xhc3MoY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpOwotCi0gcHJpdmF0ZToKLSAg
dm9pZCBMb2FkQ2xhc3MoSk5JRW52KiBqbmksIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKLQot
ICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgamNsYXNzPiBjbGFzc2VzXzsKLX07Ci0KLS8vIEFsbG9j
YXRlZCBpbiBMb2FkR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIoKSwKLS8vIGZyZWVkIGluIEZy
ZWVHbG9iYWxDbGFzc1JlZmVyZW5jZUhvbGRlcigpLgotc3RhdGljIENsYXNzUmVmZXJlbmNlSG9s
ZGVyKiBnX2NsYXNzX3JlZmVyZW5jZV9ob2xkZXIgPSBudWxscHRyOwotCi12b2lkIExvYWRHbG9i
YWxDbGFzc1JlZmVyZW5jZUhvbGRlcigpIHsKLSAgUlRDX0NIRUNLKGdfY2xhc3NfcmVmZXJlbmNl
X2hvbGRlciA9PSBudWxscHRyKTsKLSAgZ19jbGFzc19yZWZlcmVuY2VfaG9sZGVyID0gbmV3IENs
YXNzUmVmZXJlbmNlSG9sZGVyKEdldEVudigpKTsKLX0KLQotdm9pZCBGcmVlR2xvYmFsQ2xhc3NS
ZWZlcmVuY2VIb2xkZXIoKSB7Ci0gIGdfY2xhc3NfcmVmZXJlbmNlX2hvbGRlci0+RnJlZVJlZmVy
ZW5jZXMoQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCkpOwotICBkZWxldGUgZ19jbGFzc19y
ZWZlcmVuY2VfaG9sZGVyOwotICBnX2NsYXNzX3JlZmVyZW5jZV9ob2xkZXIgPSBudWxscHRyOwot
fQotCi1DbGFzc1JlZmVyZW5jZUhvbGRlcjo6Q2xhc3NSZWZlcmVuY2VIb2xkZXIoSk5JRW52KiBq
bmkpIHsKLSAgTG9hZENsYXNzKGpuaSwgImFuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmUi
KTsKLSAgTG9hZENsYXNzKGpuaSwgImphdmEvbmlvL0J5dGVCdWZmZXIiKTsKLSAgTG9hZENsYXNz
KGpuaSwgImphdmEvdXRpbC9BcnJheUxpc3QiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJy
dGMvQXVkaW9UcmFjayIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9DYW1lcmExRW51
bWVyYXRvciIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9DYW1lcmEyRW51bWVyYXRv
ciIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlvbkFuZHJv
aWQiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvRGF0YUNoYW5uZWwiKTsKLSAgTG9h
ZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvRGF0YUNoYW5uZWwkQnVmZmVyIik7Ci0gIExvYWRDbGFz
cyhqbmksICJvcmcvd2VicnRjL0RhdGFDaGFubmVsJEluaXQiKTsKLSAgTG9hZENsYXNzKGpuaSwg
Im9yZy93ZWJydGMvRGF0YUNoYW5uZWwkU3RhdGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93
ZWJydGMvRWdsQmFzZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9FZ2xCYXNlJENv
bnRleHQiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvRWdsQmFzZTE0JENvbnRleHQi
KTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvSWNlQ2FuZGlkYXRlIik7Ci0gIExvYWRD
bGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIiKTsKLSAgTG9hZENs
YXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciRPdXRwdXRCdWZmZXJJ
bmZvIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29k
ZXIkVmlkZW9Db2RlY1R5cGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFD
b2RlY1ZpZGVvRGVjb2RlciIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNv
ZGVjVmlkZW9EZWNvZGVyJERlY29kZWRUZXh0dXJlQnVmZmVyIik7Ci0gIExvYWRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIkRGVjb2RlZE91dHB1dEJ1ZmZlciIp
OwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyJFZp
ZGVvQ29kZWNUeXBlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhU291cmNl
JFN0YXRlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhU3RyZWFtIik7Ci0g
IExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhU3RyZWFtVHJhY2skU3RhdGUiKTsKLSAg
TG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWV0cmljcyIpOwotICBMb2FkQ2xhc3Moam5pLCAi
b3JnL3dlYnJ0Yy9NZXRyaWNzJEhpc3RvZ3JhbUluZm8iKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9y
Zy93ZWJydGMvTmV0d29ya01vbml0b3IiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMv
TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0JENvbm5lY3Rpb25UeXBlIik7Ci0gIExvYWRDbGFzcyhq
bmksICJvcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0b0RldGVjdCRJUEFkZHJlc3MiKTsKLSAg
TG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0JE5ldHdv
cmtJbmZvcm1hdGlvbiIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVj
dGlvbkZhY3RvcnkiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rp
b24kQnVuZGxlUG9saWN5Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1BlZXJDb25u
ZWN0aW9uJENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3Jn
L3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRSdGNwTXV4UG9saWN5Iik7Ci0gIExvYWRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJEljZUNvbm5lY3Rpb25TdGF0ZSIpOwotICBMb2Fk
Q2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRJY2VHYXRoZXJpbmdTdGF0ZSIp
OwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRJY2VUcmFuc3Bv
cnRzVHlwZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRU
Y3BDYW5kaWRhdGVQb2xpY3kiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNv
bm5lY3Rpb24kQ2FuZGlkYXRlTmV0d29ya1BvbGljeSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3Jn
L3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRLZXlUeXBlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcv
d2VicnRjL1BlZXJDb25uZWN0aW9uJFNpZ25hbGluZ1N0YXRlIik7Ci0gIExvYWRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL1J0cFJlY2VpdmVyIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRj
L1J0cFNlbmRlciIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3Jp
cHRpb24iKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9u
JFR5cGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU3RhdHNSZXBvcnQiKTsKLSAg
TG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU3RhdHNSZXBvcnQkVmFsdWUiKTsKLSAgTG9hZENs
YXNzKGpuaSwgIm9yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXIiKTsKLSAgTG9hZENsYXNz
KGpuaSwgIm9yZy93ZWJydGMvVmlkZW9DYXB0dXJlciIpOwotICBMb2FkQ2xhc3Moam5pLCAib3Jn
L3dlYnJ0Yy9WaWRlb1JlbmRlcmVyJEk0MjBGcmFtZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3Jn
L3dlYnJ0Yy9WaWRlb1RyYWNrIik7Ci19Ci0KLUNsYXNzUmVmZXJlbmNlSG9sZGVyOjp+Q2xhc3NS
ZWZlcmVuY2VIb2xkZXIoKSB7Ci0gIFJUQ19DSEVDSyhjbGFzc2VzXy5lbXB0eSgpKSA8PCAiTXVz
dCBjYWxsIEZyZWVSZWZlcmVuY2VzKCkgYmVmb3JlIGR0b3IhIjsKLX0KLQotdm9pZCBDbGFzc1Jl
ZmVyZW5jZUhvbGRlcjo6RnJlZVJlZmVyZW5jZXMoSk5JRW52KiBqbmkpIHsKLSAgZm9yIChzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgamNsYXNzPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjbGFzc2VzXy5i
ZWdpbigpOwotICAgICAgaXQgIT0gY2xhc3Nlc18uZW5kKCk7ICsraXQpIHsKLSAgICBqbmktPkRl
bGV0ZUdsb2JhbFJlZihpdC0+c2Vjb25kKTsKLSAgfQotICBjbGFzc2VzXy5jbGVhcigpOwotfQot
Ci1qY2xhc3MgQ2xhc3NSZWZlcmVuY2VIb2xkZXI6OkdldENsYXNzKGNvbnN0IHN0ZDo6c3RyaW5n
JiBuYW1lKSB7Ci0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBqY2xhc3M+OjppdGVyYXRvciBpdCA9
IGNsYXNzZXNfLmZpbmQobmFtZSk7Ci0gIFJUQ19DSEVDSyhpdCAhPSBjbGFzc2VzXy5lbmQoKSkg
PDwgIlVuZXhwZWN0ZWQgR2V0Q2xhc3MoKSBjYWxsIGZvcjogIiA8PCBuYW1lOwotICByZXR1cm4g
aXQtPnNlY29uZDsKLX0KLQotdm9pZCBDbGFzc1JlZmVyZW5jZUhvbGRlcjo6TG9hZENsYXNzKEpO
SUVudiogam5pLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSkgewotICBqY2xhc3MgbG9jYWxSZWYg
PSBqbmktPkZpbmRDbGFzcyhuYW1lLmNfc3RyKCkpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8
PCAiZXJyb3IgZHVyaW5nIEZpbmRDbGFzczogIiA8PCBuYW1lOwotICBSVENfQ0hFQ0sobG9jYWxS
ZWYpIDw8IG5hbWU7Ci0gIGpjbGFzcyBnbG9iYWxSZWYgPSByZWludGVycHJldF9jYXN0PGpjbGFz
cz4oam5pLT5OZXdHbG9iYWxSZWYobG9jYWxSZWYpKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkg
PDwgImVycm9yIGR1cmluZyBOZXdHbG9iYWxSZWY6ICIgPDwgbmFtZTsKLSAgUlRDX0NIRUNLKGds
b2JhbFJlZikgPDwgbmFtZTsKLSAgYm9vbCBpbnNlcnRlZCA9IGNsYXNzZXNfLmluc2VydChzdGQ6
Om1ha2VfcGFpcihuYW1lLCBnbG9iYWxSZWYpKS5zZWNvbmQ7Ci0gIFJUQ19DSEVDSyhpbnNlcnRl
ZCkgPDwgIkR1cGxpY2F0ZSBjbGFzcyBuYW1lOiAiIDw8IG5hbWU7Ci19Ci0KLS8vIFJldHVybnMg
YSBnbG9iYWwgcmVmZXJlbmNlIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgZm9yIHRoZSBsaWZldGlt
ZSBvZiB0aGUKLS8vIHByb2Nlc3MuCi1qY2xhc3MgRmluZENsYXNzKEpOSUVudiogam5pLCBjb25z
dCBjaGFyKiBuYW1lKSB7Ci0gIHJldHVybiBnX2NsYXNzX3JlZmVyZW5jZV9ob2xkZXItPkdldENs
YXNzKG5hbWUpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNz
cmVmZXJlbmNlaG9sZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmgJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oCShub25leGlzdGVu
dCkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotLy8gQW5kcm9pZCdzIEZp
bmRDbGFzcygpIGlzIHRyaWNraWVyIHRoYW4gdXN1YWwgYmVjYXVzZSB0aGUgYXBwLXNwZWNpZmlj
Ci0vLyBDbGFzc0xvYWRlciBpcyBub3QgY29uc3VsdGVkIHdoZW4gdGhlcmUgaXMgbm8gYXBwLXNw
ZWNpZmljIGZyYW1lIG9uIHRoZQotLy8gc3RhY2suICBDb25zZXF1ZW50bHksIHdlIG9ubHkgbG9v
ayB1cCBhbGwgY2xhc3NlcyBvbmNlIGluIGFwcC93ZWJydGMuCi0vLyBodHRwOi8vZGV2ZWxvcGVy
LmFuZHJvaWQuY29tL3RyYWluaW5nL2FydGljbGVzL3BlcmYtam5pLmh0bWwjZmFxX0ZpbmRDbGFz
cwotCi0jaWZuZGVmIFdFQlJUQ19BUElfSkFWQV9KTklfQ0xBU1NSRUZFUkVOQ0VIT0xERVJfSF8K
LSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9DTEFTU1JFRkVSRU5DRUhPTERFUl9IXwotCi0j
aW5jbHVkZSA8am5pLmg+Ci0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPHN0cmluZz4KLQotbmFt
ZXNwYWNlIHdlYnJ0Y19qbmkgewotCi0vLyBMb2FkR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIg
bXVzdCBiZSBjYWxsZWQgaW4gSk5JX09uTG9hZC4KLXZvaWQgTG9hZEdsb2JhbENsYXNzUmVmZXJl
bmNlSG9sZGVyKCk7Ci0vLyBGcmVlR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIgbXVzdCBiZSBj
YWxsZWQgaW4gSk5JX1VuTG9hZC4KLXZvaWQgRnJlZUdsb2JhbENsYXNzUmVmZXJlbmNlSG9sZGVy
KCk7Ci0KLS8vIFJldHVybnMgYSBnbG9iYWwgcmVmZXJlbmNlIGd1YXJhbnRlZWQgdG8gYmUgdmFs
aWQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUKLS8vIHByb2Nlc3MuCi1qY2xhc3MgRmluZENsYXNz
KEpOSUVudiogam5pLCBjb25zdCBjaGFyKiBuYW1lKTsKLQotLy8gQ29udmVuaWVuY2UgbWFjcm8g
ZGVmaW5pbmcgSk5JLWFjY2Vzc2libGUgbWV0aG9kcyBpbiB0aGUgb3JnLndlYnJ0YyBwYWNrYWdl
LgotLy8gRWxpbWluYXRlcyB1bm5lY2Vzc2FyeSBib2lsZXJwbGF0ZSBhbmQgbGluZS13cmFwcywg
cmVkdWNpbmcgdmlzdWFsIGNsdXR0ZXIuCi0jZGVmaW5lIEpPVyhyZXR0eXBlLCBuYW1lKSBleHRl
cm4gIkMiIHJldHR5cGUgSk5JRVhQT1JUIEpOSUNBTEwgXAotICBKYXZhX29yZ193ZWJydGNfIyNu
YW1lCi0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCi0KLSNlbmRpZiAgLy8gV0VCUlRDX0FQ
SV9KQVZBX0pOSV9DTEFTU1JFRkVSRU5DRUhPTERFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmNj
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2pu
aV9oZWxwZXJzLmNjCShub25leGlzdGVudCkKQEAgLTEsMzUwICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgot
Ci0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5o
IgotCi0jaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgotI2luY2x1ZGUgPHN5cy9wcmN0bC5oPgotI2lu
Y2x1ZGUgPHN5cy9zeXNjYWxsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLW5hbWVzcGFjZSB3
ZWJydGNfam5pIHsKLQotc3RhdGljIEphdmFWTSogZ19qdm0gPSBudWxscHRyOwotCi1zdGF0aWMg
cHRocmVhZF9vbmNlX3QgZ19qbmlfcHRyX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKLQotLy8g
S2V5IGZvciBwZXItdGhyZWFkIEpOSUVudiogZGF0YS4gIE5vbi1OVUxMIGluIHRocmVhZHMgYXR0
YWNoZWQgdG8gfGdfanZtfCBieQotLy8gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCksIE5V
TEwgaW4gdW5hdHRhY2hlZCB0aHJlYWRzIGFuZCB0aHJlYWRzIHRoYXQKLS8vIHdlcmUgYXR0YWNo
ZWQgYnkgdGhlIEpWTSBiZWNhdXNlIG9mIGEgSmF2YS0+bmF0aXZlIGNhbGwuCi1zdGF0aWMgcHRo
cmVhZF9rZXlfdCBnX2puaV9wdHI7Ci0KLUphdmFWTSAqR2V0SlZNKCkgewotICBSVENfQ0hFQ0so
Z19qdm0pIDw8ICJKTklfT25Mb2FkIGZhaWxlZCB0byBydW4/IjsKLSAgcmV0dXJuIGdfanZtOwot
fQotCi0vLyBSZXR1cm4gYSB8Sk5JRW52KnwgdXNhYmxlIG9uIHRoaXMgdGhyZWFkIG9yIE5VTEwg
aWYgdGhpcyB0aHJlYWQgaXMgZGV0YWNoZWQuCi1KTklFbnYqIEdldEVudigpIHsKLSAgdm9pZCog
ZW52ID0gbnVsbHB0cjsKLSAgamludCBzdGF0dXMgPSBnX2p2bS0+R2V0RW52KCZlbnYsIEpOSV9W
RVJTSU9OXzFfNik7Ci0gIFJUQ19DSEVDSygoKGVudiAhPSBudWxscHRyKSAmJiAoc3RhdHVzID09
IEpOSV9PSykpIHx8Ci0gICAgICAgICAgICAoKGVudiA9PSBudWxscHRyKSAmJiAoc3RhdHVzID09
IEpOSV9FREVUQUNIRUQpKSkKLSAgICAgIDw8ICJVbmV4cGVjdGVkIEdldEVudiByZXR1cm46ICIg
PDwgc3RhdHVzIDw8ICI6IiA8PCBlbnY7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PEpOSUVu
dio+KGVudik7Ci19Ci0KLXN0YXRpYyB2b2lkIFRocmVhZERlc3RydWN0b3Iodm9pZCogcHJldl9q
bmlfcHRyKSB7Ci0gIC8vIFRoaXMgZnVuY3Rpb24gb25seSBydW5zIG9uIHRocmVhZHMgd2hlcmUg
fGdfam5pX3B0cnwgaXMgbm9uLU5VTEwsIG1lYW5pbmcKLSAgLy8gd2Ugd2VyZSByZXNwb25zaWJs
ZSBmb3Igb3JpZ2luYWxseSBhdHRhY2hpbmcgdGhlIHRocmVhZCwgc28gYXJlIHJlc3BvbnNpYmxl
Ci0gIC8vIGZvciBkZXRhY2hpbmcgaXQgbm93LiAgSG93ZXZlciwgYmVjYXVzZSBzb21lIEpWTSBp
bXBsZW1lbnRhdGlvbnMgKG5vdGFibHkKLSAgLy8gT3JhY2xlJ3MgaHR0cDovL2dvby5nbC9lSEFw
WVQpIGFsc28gdXNlIHRoZSBwdGhyZWFkX2tleV9jcmVhdGUgbWVjaGFuaXNtLAotICAvLyB0aGUg
SlZNcyBhY2NvdW50aW5nIGluZm8gZm9yIHRoaXMgdGhyZWFkIG1heSBhbHJlYWR5IGJlIHdpcGVk
IG91dCBieSB0aGUKLSAgLy8gdGltZSB0aGlzIGlzIGNhbGxlZC4gVGh1cyBpdCBtYXkgYXBwZWFy
IHdlIGFyZSBhbHJlYWR5IGRldGFjaGVkIGV2ZW4gdGhvdWdoCi0gIC8vIGl0IHdhcyBvdXIgcmVz
cG9uc2liaWxpdHkgdG8gZGV0YWNoISAgT2ggd2VsbC4KLSAgaWYgKCFHZXRFbnYoKSkKLSAgICBy
ZXR1cm47Ci0KLSAgUlRDX0NIRUNLKEdldEVudigpID09IHByZXZfam5pX3B0cikKLSAgICAgIDw8
ICJEZXRhY2hpbmcgZnJvbSBhbm90aGVyIHRocmVhZDogIiA8PCBwcmV2X2puaV9wdHIgPDwgIjoi
IDw8IEdldEVudigpOwotICBqaW50IHN0YXR1cyA9IGdfanZtLT5EZXRhY2hDdXJyZW50VGhyZWFk
KCk7Ci0gIFJUQ19DSEVDSyhzdGF0dXMgPT0gSk5JX09LKSA8PCAiRmFpbGVkIHRvIGRldGFjaCB0
aHJlYWQ6ICIgPDwgc3RhdHVzOwotICBSVENfQ0hFQ0soIUdldEVudigpKSA8PCAiRGV0YWNoaW5n
IHdhcyBhIHN1Y2Nlc3NmdWwgbm8tb3A/Pz8iOwotfQotCi1zdGF0aWMgdm9pZCBDcmVhdGVKTklQ
dHJLZXkoKSB7Ci0gIFJUQ19DSEVDSyghcHRocmVhZF9rZXlfY3JlYXRlKCZnX2puaV9wdHIsICZU
aHJlYWREZXN0cnVjdG9yKSkKLSAgICAgIDw8ICJwdGhyZWFkX2tleV9jcmVhdGUiOwotfQotCi1q
aW50IEluaXRHbG9iYWxKbmlWYXJpYWJsZXMoSmF2YVZNICpqdm0pIHsKLSAgUlRDX0NIRUNLKCFn
X2p2bSkgPDwgIkluaXRHbG9iYWxKbmlWYXJpYWJsZXMhIjsKLSAgZ19qdm0gPSBqdm07Ci0gIFJU
Q19DSEVDSyhnX2p2bSkgPDwgIkluaXRHbG9iYWxKbmlWYXJpYWJsZXMgaGFuZGVkIE5VTEw/IjsK
LQotICBSVENfQ0hFQ0soIXB0aHJlYWRfb25jZSgmZ19qbmlfcHRyX29uY2UsICZDcmVhdGVKTklQ
dHJLZXkpKSA8PCAicHRocmVhZF9vbmNlIjsKLQotICBKTklFbnYqIGpuaSA9IG51bGxwdHI7Ci0g
IGlmIChqdm0tPkdldEVudihyZWludGVycHJldF9jYXN0PHZvaWQqKj4oJmpuaSksIEpOSV9WRVJT
SU9OXzFfNikgIT0gSk5JX09LKQotICAgIHJldHVybiAtMTsKLQotICByZXR1cm4gSk5JX1ZFUlNJ
T05fMV82OwotfQotCi0vLyBSZXR1cm4gdGhyZWFkIElEIGFzIGEgc3RyaW5nLgotc3RhdGljIHN0
ZDo6c3RyaW5nIEdldFRocmVhZElkKCkgewotICBjaGFyIGJ1ZlsyMV07ICAvLyBCaWcgZW5vdWdo
IHRvIGhvbGQgYSBrdWludDY0bWF4IHBsdXMgdGVybWluYXRpbmcgTlVMTC4KLSAgUlRDX0NIRUNL
X0xUKHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlbGQiLAotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8bG9uZz4oc3lzY2FsbChfX05SX2dldHRpZCkpKSwKLSAgICAgICAg
ICAgICAgIHNpemVvZihidWYpKQotICAgICAgPDwgIlRocmVhZCBpZCBpcyBiaWdnZXIgdGhhbiB1
aW50NjQ/PyI7Ci0gIHJldHVybiBzdGQ6OnN0cmluZyhidWYpOwotfQotCi0vLyBSZXR1cm4gdGhl
IGN1cnJlbnQgdGhyZWFkJ3MgbmFtZS4KLXN0YXRpYyBzdGQ6OnN0cmluZyBHZXRUaHJlYWROYW1l
KCkgewotICBjaGFyIG5hbWVbMTddID0gezB9OwotICBpZiAocHJjdGwoUFJfR0VUX05BTUUsIG5h
bWUpICE9IDApCi0gICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCI8bm9uYW1lPiIpOwotICByZXR1cm4g
c3RkOjpzdHJpbmcobmFtZSk7Ci19Ci0KLS8vIFJldHVybiBhIHxKTklFbnYqfCB1c2FibGUgb24g
dGhpcyB0aHJlYWQuICBBdHRhY2hlcyB0byB8Z19qdm18IGlmIG5lY2Vzc2FyeS4KLUpOSUVudiog
QXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCkgewotICBKTklFbnYqIGpuaSA9IEdldEVudigp
OwotICBpZiAoam5pKQotICAgIHJldHVybiBqbmk7Ci0gIFJUQ19DSEVDSyghcHRocmVhZF9nZXRz
cGVjaWZpYyhnX2puaV9wdHIpKQotICAgICAgPDwgIlRMUyBoYXMgYSBKTklFbnYqIGJ1dCBub3Qg
YXR0YWNoZWQ/IjsKLQotICBzdGQ6OnN0cmluZyBuYW1lKEdldFRocmVhZE5hbWUoKSArICIgLSAi
ICsgR2V0VGhyZWFkSWQoKSk7Ci0gIEphdmFWTUF0dGFjaEFyZ3MgYXJnczsKLSAgYXJncy52ZXJz
aW9uID0gSk5JX1ZFUlNJT05fMV82OwotICBhcmdzLm5hbWUgPSAmbmFtZVswXTsKLSAgYXJncy5n
cm91cCA9IG51bGxwdHI7Ci0gIC8vIERlYWwgd2l0aCBkaWZmZXJlbmNlIGluIHNpZ25hdHVyZXMg
YmV0d2VlbiBPcmFjbGUncyBqbmkuaCBhbmQgQW5kcm9pZCdzLgotI2lmZGVmIF9KQVZBU09GVF9K
TklfSF8gIC8vIE9yYWNsZSdzIGpuaS5oIHZpb2xhdGVzIHRoZSBKTkkgc3BlYyEKLSAgdm9pZCog
ZW52ID0gbnVsbHB0cjsKLSNlbHNlCi0gIEpOSUVudiogZW52ID0gbnVsbHB0cjsKLSNlbmRpZgot
ICBSVENfQ0hFQ0soIWdfanZtLT5BdHRhY2hDdXJyZW50VGhyZWFkKCZlbnYsICZhcmdzKSkKLSAg
ICAgIDw8ICJGYWlsZWQgdG8gYXR0YWNoIHRocmVhZCI7Ci0gIFJUQ19DSEVDSyhlbnYpIDw8ICJB
dHRhY2hDdXJyZW50VGhyZWFkIGhhbmRlZCBiYWNrIE5VTEwhIjsKLSAgam5pID0gcmVpbnRlcnBy
ZXRfY2FzdDxKTklFbnYqPihlbnYpOwotICBSVENfQ0hFQ0soIXB0aHJlYWRfc2V0c3BlY2lmaWMo
Z19qbmlfcHRyLCBqbmkpKSA8PCAicHRocmVhZF9zZXRzcGVjaWZpYyI7Ci0gIHJldHVybiBqbmk7
Ci19Ci0KLS8vIFJldHVybiBhIHxqbG9uZ3wgdGhhdCB3aWxsIGNvcnJlY3RseSBjb252ZXJ0IGJh
Y2sgdG8gfHB0cnwuICBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUg
KG9mIHNpbGVudGx5IHBhc3NpbmcgYSAzMi1iaXQgcG9pbnRlciB0byBhIHZhcmFyZwotLy8gZnVu
Y3Rpb24gZXhwZWN0aW5nIGEgNjQtYml0IHBhcmFtKSBwaWNrcyB1cCBnYXJiYWdlIGluIHRoZSBo
aWdoIDMyIGJpdHMuCi1qbG9uZyBqbG9uZ0Zyb21Qb2ludGVyKHZvaWQqIHB0cikgewotICBzdGF0
aWNfYXNzZXJ0KHNpemVvZihpbnRwdHJfdCkgPD0gc2l6ZW9mKGpsb25nKSwKLSAgICAgICAgICAg
ICAgICAiVGltZSB0byByZXRoaW5rIHRoZSB1c2Ugb2YgamxvbmdzIik7Ci0gIC8vIEdvaW5nIHRo
cm91Z2ggaW50cHRyX3QgdG8gYmUgb2J2aW91cyBhYm91dCB0aGUgZGVmaW5lZG5lc3Mgb2YgdGhl
Ci0gIC8vIGNvbnZlcnNpb24gZnJvbSBwb2ludGVyIHRvIGludGVncmFsIHR5cGUuICBpbnRwdHJf
dCB0byBqbG9uZyBpcyBhIHN0YW5kYXJkCi0gIC8vIHdpZGVuaW5nIGJ5IHRoZSBzdGF0aWNfYXNz
ZXJ0IGFib3ZlLgotICBqbG9uZyByZXQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90PihwdHIp
OwotICBSVENfRENIRUNLKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJldCkgPT0gcHRyKTsKLSAg
cmV0dXJuIHJldDsKLX0KLQotLy8gSk5JRW52LWhlbHBlciBtZXRob2RzIHRoYXQgUlRDX0NIRUNL
IHN1Y2Nlc3M6IG5vIEphdmEgZXhjZXB0aW9uIHRocm93biBhbmQKLS8vIGZvdW5kIG9iamVjdC9j
bGFzcy9tZXRob2QvZmllbGQgaXMgbm9uLW51bGwuCi1qbWV0aG9kSUQgR2V0TWV0aG9kSUQoCi0g
ICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwgY29uc3Qg
Y2hhciogc2lnbmF0dXJlKSB7Ci0gIGptZXRob2RJRCBtID0gam5pLT5HZXRNZXRob2RJRChjLCBu
YW1lLmNfc3RyKCksIHNpZ25hdHVyZSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJv
ciBkdXJpbmcgR2V0TWV0aG9kSUQ6ICIgPDwgbmFtZSA8PCAiLCAiCi0gICAgICAgICAgICAgICAg
ICAgICAgIDw8IHNpZ25hdHVyZTsKLSAgUlRDX0NIRUNLKG0pIDw8IG5hbWUgPDwgIiwgIiA8PCBz
aWduYXR1cmU7Ci0gIHJldHVybiBtOwotfQotCi1qbWV0aG9kSUQgR2V0U3RhdGljTWV0aG9kSUQo
Ci0gICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFy
KiBzaWduYXR1cmUpIHsKLSAgam1ldGhvZElEIG0gPSBqbmktPkdldFN0YXRpY01ldGhvZElEKGMs
IG5hbWUsIHNpZ25hdHVyZSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJp
bmcgR2V0U3RhdGljTWV0aG9kSUQ6ICIgPDwgbmFtZSA8PCAiLCAiCi0gICAgICAgICAgICAgICAg
ICAgICAgIDw8IHNpZ25hdHVyZTsKLSAgUlRDX0NIRUNLKG0pIDw8IG5hbWUgPDwgIiwgIiA8PCBz
aWduYXR1cmU7Ci0gIHJldHVybiBtOwotfQotCi1qZmllbGRJRCBHZXRGaWVsZElEKAotICAgIEpO
SUVudiogam5pLCBqY2xhc3MgYywgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnbmF0
dXJlKSB7Ci0gIGpmaWVsZElEIGYgPSBqbmktPkdldEZpZWxkSUQoYywgbmFtZSwgc2lnbmF0dXJl
KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBHZXRGaWVsZElEIjsK
LSAgUlRDX0NIRUNLKGYpIDw8IG5hbWUgPDwgIiwgIiA8PCBzaWduYXR1cmU7Ci0gIHJldHVybiBm
OwotfQotCi1qY2xhc3MgR2V0T2JqZWN0Q2xhc3MoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0
KSB7Ci0gIGpjbGFzcyBjID0gam5pLT5HZXRPYmplY3RDbGFzcyhvYmplY3QpOwotICBDSEVDS19F
WENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIEdldE9iamVjdENsYXNzIjsKLSAgUlRDX0NI
RUNLKGMpIDw8ICJHZXRPYmplY3RDbGFzcyByZXR1cm5lZCBOVUxMIjsKLSAgcmV0dXJuIGM7Ci19
Ci0KLWpvYmplY3QgR2V0T2JqZWN0RmllbGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBq
ZmllbGRJRCBpZCkgewotICBqb2JqZWN0IG8gPSBqbmktPkdldE9iamVjdEZpZWxkKG9iamVjdCwg
aWQpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIEdldE9iamVjdEZp
ZWxkIjsKLSAgUlRDX0NIRUNLKCFJc051bGwoam5pLCBvKSkgPDwgIkdldE9iamVjdEZpZWxkIHJl
dHVybmVkIE5VTEwiOwotICByZXR1cm4gbzsKLX0KLQotam9iamVjdCBHZXROdWxsYWJsZU9iamVj
dEZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpIHsKLSAgam9i
amVjdCBvID0gam5pLT5HZXRPYmplY3RGaWVsZChvYmplY3QsIGlkKTsKLSAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBHZXRPYmplY3RGaWVsZCI7Ci0gIHJldHVybiBvOwot
fQotCi1qc3RyaW5nIEdldFN0cmluZ0ZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwg
amZpZWxkSUQgaWQpIHsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGpzdHJpbmc+KEdldE9iamVjdEZp
ZWxkKGpuaSwgb2JqZWN0LCBpZCkpOwotfQotCi1qbG9uZyBHZXRMb25nRmllbGQoSk5JRW52KiBq
bmksIGpvYmplY3Qgb2JqZWN0LCBqZmllbGRJRCBpZCkgewotICBqbG9uZyBsID0gam5pLT5HZXRM
b25nRmllbGQob2JqZWN0LCBpZCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBk
dXJpbmcgR2V0TG9uZ0ZpZWxkIjsKLSAgcmV0dXJuIGw7Ci19Ci0KLWppbnQgR2V0SW50RmllbGQo
Sk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBqZmllbGRJRCBpZCkgewotICBqaW50IGkgPSBq
bmktPkdldEludEZpZWxkKG9iamVjdCwgaWQpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAi
ZXJyb3IgZHVyaW5nIEdldEludEZpZWxkIjsKLSAgcmV0dXJuIGk7Ci19Ci0KLWJvb2wgR2V0Qm9v
bGVhbkZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpIHsKLSAg
amJvb2xlYW4gYiA9IGpuaS0+R2V0Qm9vbGVhbkZpZWxkKG9iamVjdCwgaWQpOwotICBDSEVDS19F
WENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIEdldEJvb2xlYW5GaWVsZCI7Ci0gIHJldHVy
biBiOwotfQotCi1ib29sIElzTnVsbChKTklFbnYqIGpuaSwgam9iamVjdCBvYmopIHsKLSAgcmV0
dXJuIGpuaS0+SXNTYW1lT2JqZWN0KG9iaiwgbnVsbHB0cik7Ci19Ci0KLS8vIEdpdmVuIGEgVVRG
LTggZW5jb2RlZCB8bmF0aXZlfCBzdHJpbmcgcmV0dXJuIGEgbmV3IChVVEYtMTYpIGpzdHJpbmcu
Ci1qc3RyaW5nIEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKEpOSUVudiogam5pLCBjb25zdCBzdGQ6
OnN0cmluZyYgbmF0aXZlKSB7Ci0gIGpzdHJpbmcganN0ciA9IGpuaS0+TmV3U3RyaW5nVVRGKG5h
dGl2ZS5jX3N0cigpKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBO
ZXdTdHJpbmdVVEYiOwotICByZXR1cm4ganN0cjsKLX0KLQotLy8gR2l2ZW4gYSAoVVRGLTE2KSBq
c3RyaW5nIHJldHVybiBhIG5ldyBVVEYtOCBuYXRpdmUgc3RyaW5nLgotc3RkOjpzdHJpbmcgSmF2
YVRvU3RkU3RyaW5nKEpOSUVudiogam5pLCBjb25zdCBqc3RyaW5nJiBqX3N0cmluZykgewotICBj
b25zdCBjaGFyKiBjaGFycyA9IGpuaS0+R2V0U3RyaW5nVVRGQ2hhcnMoal9zdHJpbmcsIG51bGxw
dHIpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiRXJyb3IgZHVyaW5nIEdldFN0cmluZ1VU
RkNoYXJzIjsKLSAgc3RkOjpzdHJpbmcgc3RyKGNoYXJzLCBqbmktPkdldFN0cmluZ1VURkxlbmd0
aChqX3N0cmluZykpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiRXJyb3IgZHVyaW5nIEdl
dFN0cmluZ1VURkxlbmd0aCI7Ci0gIGpuaS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGpfc3RyaW5n
LCBjaGFycyk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJFcnJvciBkdXJpbmcgUmVsZWFz
ZVN0cmluZ1VURkNoYXJzIjsKLSAgcmV0dXJuIHN0cjsKLX0KLQotLy8gUmV0dXJuIHRoZSAoc2lu
Z2xldG9uKSBKYXZhIEVudW0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gfGluZGV4fDsKLWpvYmpl
Y3QgSmF2YUVudW1Gcm9tSW5kZXgoSk5JRW52KiBqbmksIGpjbGFzcyBzdGF0ZV9jbGFzcywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHN0YXRlX2NsYXNzX25h
bWUsIGludCBpbmRleCkgewotICBqbWV0aG9kSUQgc3RhdGVfdmFsdWVzX2lkID0gR2V0U3RhdGlj
TWV0aG9kSUQoCi0gICAgICBqbmksIHN0YXRlX2NsYXNzLCAidmFsdWVzIiwgKCIoKVtMIiArIHN0
YXRlX2NsYXNzX25hbWUgICsgIjsiKS5jX3N0cigpKTsKLSAgam9iamVjdEFycmF5IHN0YXRlX3Zh
bHVlcyA9IHN0YXRpY19jYXN0PGpvYmplY3RBcnJheT4oCi0gICAgICBqbmktPkNhbGxTdGF0aWNP
YmplY3RNZXRob2Qoc3RhdGVfY2xhc3MsIHN0YXRlX3ZhbHVlc19pZCkpOwotICBDSEVDS19FWENF
UFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxTdGF0aWNPYmplY3RNZXRob2QiOwotICBq
b2JqZWN0IHJldCA9IGpuaS0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KHN0YXRlX3ZhbHVlcywgaW5k
ZXgpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIEdldE9iamVjdEFy
cmF5RWxlbWVudCI7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXN0ZDo6c3RyaW5nIEdldEphdmFFbnVt
TmFtZShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6
OnN0cmluZyYgY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3Qg
al9lbnVtKSB7Ci0gIGpjbGFzcyBlbnVtQ2xhc3MgPSBGaW5kQ2xhc3Moam5pLCBjbGFzc05hbWUu
Y19zdHIoKSk7Ci0gIGptZXRob2RJRCBuYW1lTWV0aG9kID0KLSAgICAgIEdldE1ldGhvZElEKGpu
aSwgZW51bUNsYXNzLCAibmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBqc3RyaW5n
IG5hbWUgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxqc3RyaW5nPihqbmktPkNhbGxPYmplY3RN
ZXRob2Qoal9lbnVtLCBuYW1lTWV0aG9kKSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJl
cnJvciBkdXJpbmcgQ2FsbE9iamVjdE1ldGhvZCBmb3IgIiA8PCBjbGFzc05hbWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgPDwgIi5uYW1lIjsKLSAgcmV0dXJuIEphdmFUb1N0ZFN0cmluZyhqbmks
IG5hbWUpOwotfQotCi1qb2JqZWN0IE5ld0dsb2JhbFJlZihKTklFbnYqIGpuaSwgam9iamVjdCBv
KSB7Ci0gIGpvYmplY3QgcmV0ID0gam5pLT5OZXdHbG9iYWxSZWYobyk7Ci0gIENIRUNLX0VYQ0VQ
VElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3R2xvYmFsUmVmIjsKLSAgUlRDX0NIRUNLKHJl
dCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLXZvaWQgRGVsZXRlR2xvYmFsUmVmKEpOSUVudiogam5p
LCBqb2JqZWN0IG8pIHsKLSAgam5pLT5EZWxldGVHbG9iYWxSZWYobyk7Ci0gIENIRUNLX0VYQ0VQ
VElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgRGVsZXRlR2xvYmFsUmVmIjsKLX0KLQotLy8gU2Nv
cGUgSmF2YSBsb2NhbCByZWZlcmVuY2VzIHRvIHRoZSBsaWZldGltZSBvZiB0aGlzIG9iamVjdC4g
IFVzZSBpbiBhbGwgQysrCi0vLyBjYWxsYmFja3MgKGkuZS4gZW50cnkgcG9pbnRzIHRoYXQgZG9u
J3Qgb3JpZ2luYXRlIGluIGEgSmF2YSBjYWxsc3RhY2sKLS8vIHRocm91Z2ggYSAibmF0aXZlIiBt
ZXRob2QgY2FsbCkuCi1TY29wZWRMb2NhbFJlZkZyYW1lOjpTY29wZWRMb2NhbFJlZkZyYW1lKEpO
SUVudiogam5pKSA6IGpuaV8oam5pKSB7Ci0gIFJUQ19DSEVDSygham5pXy0+UHVzaExvY2FsRnJh
bWUoMCkpIDw8ICJGYWlsZWQgdG8gUHVzaExvY2FsRnJhbWUiOwotfQotU2NvcGVkTG9jYWxSZWZG
cmFtZTo6flNjb3BlZExvY2FsUmVmRnJhbWUoKSB7Ci0gIGpuaV8tPlBvcExvY2FsRnJhbWUobnVs
bHB0cik7Ci19Ci0KLS8vIENyZWF0ZXMgYW4gaXRlcmF0b3IgcmVwcmVzZW50aW5nIHRoZSBlbmQg
b2YgYW55IGNvbGxlY3Rpb24uCi1JdGVyYWJsZTo6SXRlcmF0b3I6Okl0ZXJhdG9yKCkgOiBpdGVy
YXRvcl8obnVsbHB0cikge30KLQotLy8gQ3JlYXRlcyBhbiBpdGVyYXRvciBwb2ludGluZyB0byB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBzcGVjaWZpZWQgY29sbGVjdGlvbi4KLUl0ZXJhYmxlOjpJdGVy
YXRvcjo6SXRlcmF0b3IoSk5JRW52KiBqbmksIGpvYmplY3QgaXRlcmFibGUpIDogam5pXyhqbmkp
IHsKLSAgamNsYXNzIGpfY2xhc3MgPSBHZXRPYmplY3RDbGFzcyhqbmksIGl0ZXJhYmxlKTsKLSAg
am1ldGhvZElEIGl0ZXJhdG9yX2lkID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9jbGFzcywg
Iml0ZXJhdG9yIiwgIigpTGphdmEvdXRpbC9JdGVyYXRvcjsiKTsKLSAgaXRlcmF0b3JfID0gam5p
LT5DYWxsT2JqZWN0TWV0aG9kKGl0ZXJhYmxlLCBpdGVyYXRvcl9pZCk7Ci0gIENIRUNLX0VYQ0VQ
VElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbE9iamVjdE1ldGhvZCI7Ci0gIFJUQ19DSEVD
SyhpdGVyYXRvcl8gIT0gbnVsbHB0cik7Ci0KLSAgamNsYXNzIGl0ZXJhdG9yX2NsYXNzID0gR2V0
T2JqZWN0Q2xhc3Moam5pLCBpdGVyYXRvcl8pOwotICBoYXNfbmV4dF9pZF8gPSBHZXRNZXRob2RJ
RChqbmksIGl0ZXJhdG9yX2NsYXNzLCAiaGFzTmV4dCIsICIoKVoiKTsKLSAgbmV4dF9pZF8gPSBH
ZXRNZXRob2RJRChqbmksIGl0ZXJhdG9yX2NsYXNzLCAibmV4dCIsICIoKUxqYXZhL2xhbmcvT2Jq
ZWN0OyIpOwotCi0gIC8vIFN0YXJ0IGF0IHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBjb2xsZWN0
aW9uLgotICArKygqdGhpcyk7Ci19Ci0KLS8vIE1vdmUgY29uc3RydWN0b3IgLSBuZWNlc3Nhcnkg
dG8gYmUgYWJsZSB0byByZXR1cm4gaXRlcmF0b3IgdHlwZXMgZnJvbQotLy8gZnVuY3Rpb25zLgot
SXRlcmFibGU6Okl0ZXJhdG9yOjpJdGVyYXRvcihJdGVyYXRvciYmIG90aGVyKQotICAgIDogam5p
XyhzdGQ6Om1vdmUob3RoZXIuam5pXykpLAotICAgICAgaXRlcmF0b3JfKHN0ZDo6bW92ZShvdGhl
ci5pdGVyYXRvcl8pKSwKLSAgICAgIHZhbHVlXyhzdGQ6Om1vdmUob3RoZXIudmFsdWVfKSksCi0g
ICAgICBoYXNfbmV4dF9pZF8oc3RkOjptb3ZlKG90aGVyLmhhc19uZXh0X2lkXykpLAotICAgICAg
bmV4dF9pZF8oc3RkOjptb3ZlKG90aGVyLm5leHRfaWRfKSksCi0gICAgICB0aHJlYWRfY2hlY2tl
cl8oc3RkOjptb3ZlKG90aGVyLnRocmVhZF9jaGVja2VyXykpe307Ci0KLS8vIEFkdmFuY2VzIHRo
ZSBpdGVyYXRvciBvbmUgc3RlcC4KLUl0ZXJhYmxlOjpJdGVyYXRvciYgSXRlcmFibGU6Okl0ZXJh
dG9yOjpvcGVyYXRvcisrKCkgewotICBSVENfQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9u
VmFsaWRUaHJlYWQoKSk7Ci0gIGlmIChBdEVuZCgpKSB7Ci0gICAgLy8gQ2FuJ3QgbW92ZSBwYXN0
IHRoZSBlbmQuCi0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0gIGJvb2wgaGFzX25leHQgPSBqbmlf
LT5DYWxsQm9vbGVhbk1ldGhvZChpdGVyYXRvcl8sIGhhc19uZXh0X2lkXyk7Ci0gIENIRUNLX0VY
Q0VQVElPTihqbmlfKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAgaWYg
KCFoYXNfbmV4dCkgewotICAgIGl0ZXJhdG9yXyA9IG51bGxwdHI7Ci0gICAgdmFsdWVfID0gbnVs
bHB0cjsKLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLQotICB2YWx1ZV8gPSBqbmlfLT5DYWxsT2Jq
ZWN0TWV0aG9kKGl0ZXJhdG9yXywgbmV4dF9pZF8pOwotICBDSEVDS19FWENFUFRJT04oam5pXykg
PDwgImVycm9yIGR1cmluZyBDYWxsT2JqZWN0TWV0aG9kIjsKLSAgcmV0dXJuICp0aGlzOwotfQot
Ci0vLyBQcm92aWRlcyBhIHdheSB0byBjb21wYXJlIHRoZSBpdGVyYXRvciB3aXRoIGl0c2VsZiBh
bmQgd2l0aCB0aGUgZW5kIGl0ZXJhdG9yLgotLy8gTm90ZTogYWxsIG90aGVyIGNvbXBhcmlzb24g
cmVzdWx0cyBhcmUgdW5kZWZpbmVkLCBqdXN0IGxpa2UgZm9yIEMrKyBpbnB1dAotLy8gaXRlcmF0
b3JzLgotYm9vbCBJdGVyYWJsZTo6SXRlcmF0b3I6Om9wZXJhdG9yPT0oY29uc3QgSXRlcmFibGU6
Okl0ZXJhdG9yJiBvdGhlcikgewotICAvLyBUd28gZGlmZmVyZW50IGFjdGl2ZSBpdGVyYXRvcnMg
c2hvdWxkIG5ldmVyIGJlIGNvbXBhcmVkLgotICBSVENfRENIRUNLKHRoaXMgPT0gJm90aGVyIHx8
IEF0RW5kKCkgfHwgb3RoZXIuQXRFbmQoKSk7Ci0gIHJldHVybiBBdEVuZCgpID09IG90aGVyLkF0
RW5kKCk7Ci19Ci0KLWpvYmplY3QgSXRlcmFibGU6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSB7Ci0g
IFJUQ19DSEVDSyghQXRFbmQoKSk7Ci0gIHJldHVybiB2YWx1ZV87Ci19Ci0KLWJvb2wgSXRlcmFi
bGU6Okl0ZXJhdG9yOjpBdEVuZCgpIGNvbnN0IHsKLSAgUlRDX0NIRUNLKHRocmVhZF9jaGVja2Vy
Xy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1cm4gam5pXyA9PSBudWxscHRyIHx8IElz
TnVsbChqbmlfLCBpdGVyYXRvcl8pOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvam5pL2puaV9oZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oCShub25leGlzdGVudCkKQEAgLTEsMTkxICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLS8vIFRoaXMgZmlsZSBjb250YWluIGNvbnZlbmll
bmNlIGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyBmb3IgSk5JLgotLy8gQmVmb3JlIHVzaW5nIGFueSBv
ZiB0aGUgbWV0aG9kcywgSW5pdEdsb2JhbEpuaVZhcmlhYmxlcyBtdXN0IGJlIGNhbGxlZC4KLQot
I2lmbmRlZiBXRUJSVENfQVBJX0pBVkFfSk5JX0pOSV9IRUxQRVJTX0hfCi0jZGVmaW5lIFdFQlJU
Q19BUElfSkFWQV9KTklfSk5JX0hFTFBFUlNfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotI2luY2x1
ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NvbnN0cnVjdG9ybWFnaWMuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90
aHJlYWRfY2hlY2tlci5oIgotCi0vLyBBYm9ydCB0aGUgcHJvY2VzcyBpZiB8am5pfCBoYXMgYSBK
YXZhIGV4Y2VwdGlvbiBwZW5kaW5nLgotLy8gVGhpcyBtYWNyb3MgdXNlcyB0aGUgY29tbWEgb3Bl
cmF0b3IgdG8gZXhlY3V0ZSBFeGNlcHRpb25EZXNjcmliZQotLy8gYW5kIEV4Y2VwdGlvbkNsZWFy
IGlnbm9yaW5nIHRoZWlyIHJldHVybiB2YWx1ZXMgYW5kIHNlbmRpbmcgIiIKLS8vIHRvIHRoZSBl
cnJvciBzdHJlYW0uCi0jZGVmaW5lIENIRUNLX0VYQ0VQVElPTihqbmkpICAgICAgICBcCi0gIFJU
Q19DSEVDSygham5pLT5FeGNlcHRpb25DaGVjaygpKSBcCi0gICAgICA8PCAoam5pLT5FeGNlcHRp
b25EZXNjcmliZSgpLCBqbmktPkV4Y2VwdGlvbkNsZWFyKCksICIiKQotCi0vLyBIZWxwZXIgdGhh
dCBjYWxscyBwdHItPlJlbGVhc2UoKSBhbmQgYWJvcnRzIHRoZSBwcm9jZXNzIHdpdGggYSB1c2Vm
dWwKLS8vIG1lc3NhZ2UgaWYgdGhhdCBkaWRuJ3QgYWN0dWFsbHkgZGVsZXRlICpwdHIgYmVjYXVz
ZSBvZiBleHRyYSByZWZjb3VudHMuCi0jZGVmaW5lIENIRUNLX1JFTEVBU0UocHRyKSBcCi0gIFJU
Q19DSEVDS19FUSgwLCAocHRyKS0+UmVsZWFzZSgpKSA8PCAiVW5leHBlY3RlZCByZWZjb3VudC4i
Ci0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotamludCBJbml0R2xvYmFsSm5pVmFyaWFibGVz
KEphdmFWTSAqanZtKTsKLQotLy8gUmV0dXJuIGEgfEpOSUVudip8IHVzYWJsZSBvbiB0aGlzIHRo
cmVhZCBvciBOVUxMIGlmIHRoaXMgdGhyZWFkIGlzIGRldGFjaGVkLgotSk5JRW52KiBHZXRFbnYo
KTsKLQotSmF2YVZNICpHZXRKVk0oKTsKLQotLy8gUmV0dXJuIGEgfEpOSUVudip8IHVzYWJsZSBv
biB0aGlzIHRocmVhZC4gIEF0dGFjaGVzIHRvIHxnX2p2bXwgaWYgbmVjZXNzYXJ5LgotSk5JRW52
KiBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLQotLy8gUmV0dXJuIGEgfGpsb25nfCB0
aGF0IHdpbGwgY29ycmVjdGx5IGNvbnZlcnQgYmFjayB0byB8cHRyfC4gIFRoaXMgaXMgbmVlZGVk
Ci0vLyBiZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSAob2Ygc2lsZW50bHkgcGFzc2luZyBhIDMyLWJp
dCBwb2ludGVyIHRvIGEgdmFyYXJnCi0vLyBmdW5jdGlvbiBleHBlY3RpbmcgYSA2NC1iaXQgcGFy
YW0pIHBpY2tzIHVwIGdhcmJhZ2UgaW4gdGhlIGhpZ2ggMzIgYml0cy4KLWpsb25nIGpsb25nRnJv
bVBvaW50ZXIodm9pZCogcHRyKTsKLQotLy8gSk5JRW52LWhlbHBlciBtZXRob2RzIHRoYXQgUlRD
X0NIRUNLIHN1Y2Nlc3M6IG5vIEphdmEgZXhjZXB0aW9uIHRocm93biBhbmQKLS8vIGZvdW5kIG9i
amVjdC9jbGFzcy9tZXRob2QvZmllbGQgaXMgbm9uLW51bGwuCi1qbWV0aG9kSUQgR2V0TWV0aG9k
SUQoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSwg
Y29uc3QgY2hhciogc2lnbmF0dXJlKTsKLQotam1ldGhvZElEIEdldFN0YXRpY01ldGhvZElEKAot
ICAgIEpOSUVudiogam5pLCBqY2xhc3MgYywgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciog
c2lnbmF0dXJlKTsKLQotamZpZWxkSUQgR2V0RmllbGRJRChKTklFbnYqIGpuaSwgamNsYXNzIGMs
IGNvbnN0IGNoYXIqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHNpZ25h
dHVyZSk7Ci0KLWpjbGFzcyBHZXRPYmplY3RDbGFzcyhKTklFbnYqIGpuaSwgam9iamVjdCBvYmpl
Y3QpOwotCi0vLyBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBvYmplY3QgZmllbGQgaXMgbnVs
bC4KLWpvYmplY3QgR2V0T2JqZWN0RmllbGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBq
ZmllbGRJRCBpZCk7Ci0KLWpvYmplY3QgR2V0TnVsbGFibGVPYmplY3RGaWVsZChKTklFbnYqIGpu
aSwgam9iamVjdCBvYmplY3QsIGpmaWVsZElEIGlkKTsKLQotanN0cmluZyBHZXRTdHJpbmdGaWVs
ZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QsIGpmaWVsZElEIGlkKTsKLQotamxvbmcgR2V0
TG9uZ0ZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpOwotCi1q
aW50IEdldEludEZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQp
OwotCi1ib29sIEdldEJvb2xlYW5GaWVsZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QsIGpm
aWVsZElEIGlkKTsKLQotLy8gUmV0dXJucyB0cnVlIGlmIHxvYmp8ID09IG51bGwgaW4gSmF2YS4K
LWJvb2wgSXNOdWxsKEpOSUVudiogam5pLCBqb2JqZWN0IG9iaik7Ci0KLS8vIEdpdmVuIGEgVVRG
LTggZW5jb2RlZCB8bmF0aXZlfCBzdHJpbmcgcmV0dXJuIGEgbmV3IChVVEYtMTYpIGpzdHJpbmcu
Ci1qc3RyaW5nIEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKEpOSUVudiogam5pLCBjb25zdCBzdGQ6
OnN0cmluZyYgbmF0aXZlKTsKLQotLy8gR2l2ZW4gYSAoVVRGLTE2KSBqc3RyaW5nIHJldHVybiBh
IG5ldyBVVEYtOCBuYXRpdmUgc3RyaW5nLgotc3RkOjpzdHJpbmcgSmF2YVRvU3RkU3RyaW5nKEpO
SUVudiogam5pLCBjb25zdCBqc3RyaW5nJiBqX3N0cmluZyk7Ci0KLS8vIFJldHVybiB0aGUgKHNp
bmdsZXRvbikgSmF2YSBFbnVtIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHxpbmRleHw7Ci1qb2Jq
ZWN0IEphdmFFbnVtRnJvbUluZGV4KEpOSUVudiogam5pLCBqY2xhc3Mgc3RhdGVfY2xhc3MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdGF0ZV9jbGFzc19u
YW1lLCBpbnQgaW5kZXgpOwotCi0vLyBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgSmF2YSBlbnVtLgot
c3RkOjpzdHJpbmcgR2V0SmF2YUVudW1OYW1lKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjbGFzc05hbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgam9iamVjdCBqX2VudW0pOwotCi1qb2JqZWN0IE5ld0dsb2JhbFJlZihK
TklFbnYqIGpuaSwgam9iamVjdCBvKTsKLQotdm9pZCBEZWxldGVHbG9iYWxSZWYoSk5JRW52KiBq
bmksIGpvYmplY3Qgbyk7Ci0KLS8vIFNjb3BlIEphdmEgbG9jYWwgcmVmZXJlbmNlcyB0byB0aGUg
bGlmZXRpbWUgb2YgdGhpcyBvYmplY3QuICBVc2UgaW4gYWxsIEMrKwotLy8gY2FsbGJhY2tzIChp
LmUuIGVudHJ5IHBvaW50cyB0aGF0IGRvbid0IG9yaWdpbmF0ZSBpbiBhIEphdmEgY2FsbHN0YWNr
Ci0vLyB0aHJvdWdoIGEgIm5hdGl2ZSIgbWV0aG9kIGNhbGwpLgotY2xhc3MgU2NvcGVkTG9jYWxS
ZWZGcmFtZSB7Ci0gcHVibGljOgotICBleHBsaWNpdCBTY29wZWRMb2NhbFJlZkZyYW1lKEpOSUVu
diogam5pKTsKLSAgflNjb3BlZExvY2FsUmVmRnJhbWUoKTsKLQotIHByaXZhdGU6Ci0gIEpOSUVu
diogam5pXzsKLX07Ci0KLS8vIFNjb3BlZCBob2xkZXIgZm9yIGdsb2JhbCBKYXZhIHJlZnMuCi10
ZW1wbGF0ZTxjbGFzcyBUPiAgLy8gVCBpcyBqY2xhc3MsIGpvYmplY3QsIGppbnRBcnJheSwgZXRj
LgotY2xhc3MgU2NvcGVkR2xvYmFsUmVmIHsKLSBwdWJsaWM6Ci0gIFNjb3BlZEdsb2JhbFJlZihK
TklFbnYqIGpuaSwgVCBvYmopCi0gICAgICA6IG9ial8oc3RhdGljX2Nhc3Q8VD4oam5pLT5OZXdH
bG9iYWxSZWYob2JqKSkpIHt9Ci0gIH5TY29wZWRHbG9iYWxSZWYoKSB7Ci0gICAgRGVsZXRlR2xv
YmFsUmVmKEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpLCBvYmpfKTsKLSAgfQotICBUIG9w
ZXJhdG9yKigpIGNvbnN0IHsKLSAgICByZXR1cm4gb2JqXzsKLSAgfQotIHByaXZhdGU6Ci0gIFQg
b2JqXzsKLX07Ci0KLS8vIFByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgdG8gaXRlcmF0ZSBvdmVy
IGEgSmF2YSBJdGVyYWJsZSB1c2luZyB0aGUKLS8vIEMrKyByYW5nZS1mb3IgbG9vcC4KLS8vIEUu
Zy4gZm9yIChqb2JqZWN0IHZhbHVlIDogSXRlcmFibGUoam5pLCBqX2l0ZXJhYmxlKSkgeyAuLi4g
fQotLy8gTm90ZTogU2luY2UgSmF2YSBpdGVyYXRvcnMgY2Fubm90IGJlIGR1cGxpY2F0ZWQsIHRo
ZSBpdGVyYXRvciBjbGFzcyBpcyBub3QKLS8vIGNvcHlhYmxlIHRvIHByZXZlbnQgY3JlYXRpbmcg
bXVsdGlwbGUgQysrIGl0ZXJhdG9ycyB0aGF0IHJlZmVyIHRvIHRoZSBzYW1lCi0vLyBKYXZhIGl0
ZXJhdG9yLgotY2xhc3MgSXRlcmFibGUgewotIHB1YmxpYzoKLSAgSXRlcmFibGUoSk5JRW52KiBq
bmksIGpvYmplY3QgaXRlcmFibGUpIDogam5pXyhqbmkpLCBpdGVyYWJsZV8oaXRlcmFibGUpIHt9
Ci0KLSAgY2xhc3MgSXRlcmF0b3IgewotICAgcHVibGljOgotICAgIC8vIENyZWF0ZXMgYW4gaXRl
cmF0b3IgcmVwcmVzZW50aW5nIHRoZSBlbmQgb2YgYW55IGNvbGxlY3Rpb24uCi0gICAgSXRlcmF0
b3IoKTsKLSAgICAvLyBDcmVhdGVzIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBiZWdpbm5p
bmcgb2YgdGhlIHNwZWNpZmllZAotICAgIC8vIGNvbGxlY3Rpb24uCi0gICAgSXRlcmF0b3IoSk5J
RW52KiBqbmksIGpvYmplY3QgaXRlcmFibGUpOwotCi0gICAgLy8gTW92ZSBjb25zdHJ1Y3RvciAt
IG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIHJldHVybiBpdGVyYXRvciB0eXBlcyBmcm9tCi0gICAg
Ly8gZnVuY3Rpb25zLgotICAgIEl0ZXJhdG9yKEl0ZXJhdG9yJiYgb3RoZXIpOwotCi0gICAgLy8g
TW92ZSBhc3NpZ25tZW50IHNob3VsZCBub3QgYmUgdXNlZC4KLSAgICBJdGVyYXRvciYgb3BlcmF0
b3I9KEl0ZXJhdG9yJiYpID0gZGVsZXRlOwotCi0gICAgLy8gQWR2YW5jZXMgdGhlIGl0ZXJhdG9y
IG9uZSBzdGVwLgotICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0KLSAgICAvLyBQcm92aWRl
cyBhIHdheSB0byBjb21wYXJlIHRoZSBpdGVyYXRvciB3aXRoIGl0c2VsZiBhbmQgd2l0aCB0aGUg
ZW5kCi0gICAgLy8gaXRlcmF0b3IuCi0gICAgLy8gTm90ZTogYWxsIG90aGVyIGNvbXBhcmlzb24g
cmVzdWx0cyBhcmUgdW5kZWZpbmVkLCBqdXN0IGxpa2UgZm9yIEMrKyBpbnB1dAotICAgIC8vIGl0
ZXJhdG9ycy4KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKTsKLSAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSB7IHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsgfQotICAgIGpvYmplY3Qgb3BlcmF0b3IqKCk7Ci0KLSAgIHByaXZhdGU6Ci0g
ICAgYm9vbCBBdEVuZCgpIGNvbnN0OwotCi0gICAgSk5JRW52KiBqbmlfID0gbnVsbHB0cjsKLSAg
ICBqb2JqZWN0IGl0ZXJhdG9yXyA9IG51bGxwdHI7Ci0gICAgam9iamVjdCB2YWx1ZV8gPSBudWxs
cHRyOwotICAgIGptZXRob2RJRCBoYXNfbmV4dF9pZF8gPSBudWxscHRyOwotICAgIGptZXRob2RJ
RCBuZXh0X2lkXyA9IG51bGxwdHI7Ci0gICAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVj
a2VyXzsKLQotICAgIFJUQ19ESVNBTExPV19DT1BZX0FORF9BU1NJR04oSXRlcmF0b3IpOwotICB9
OwotCi0gIEl0ZXJhYmxlOjpJdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIEl0ZXJhYmxlOjpJdGVy
YXRvcihqbmlfLCBpdGVyYWJsZV8pOyB9Ci0gIEl0ZXJhYmxlOjpJdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBJdGVyYWJsZTo6SXRlcmF0b3IoKTsgfQotCi0gcHJpdmF0ZToKLSAgSk5JRW52KiBqbmlf
OwotICBqb2JqZWN0IGl0ZXJhYmxlXzsKLQotICBSVENfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdO
KEl0ZXJhYmxlKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCi0KLSNlbmRpZiAg
Ly8gV0VCUlRDX0FQSV9KQVZBX0pOSV9KTklfSEVMUEVSU19IXwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9vbmxvYWQu
Y2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL2puaV9vbmxvYWQuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9q
bmlfb25sb2FkLmNjCShub25leGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2luY2x1ZGUgPGpuaS5oPgotI3VuZGVmIEpOSUVYUE9SVAotI2RlZmluZSBKTklF
WFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQotI2luY2x1ZGUg
IndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIuaCIKLSNpbmNsdWRl
ICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAid2VicnRj
L2Jhc2Uvc3NsYWRhcHRlci5oIgotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLWV4dGVybiAi
QyIgamludCBKTklFWFBPUlQgSk5JQ0FMTCBKTklfT25Mb2FkKEphdmFWTSAqanZtLCB2b2lkICpy
ZXNlcnZlZCkgewotICBqaW50IHJldCA9IEluaXRHbG9iYWxKbmlWYXJpYWJsZXMoanZtKTsKLSAg
UlRDX0RDSEVDS19HRShyZXQsIDApOwotICBpZiAocmV0IDwgMCkKLSAgICByZXR1cm4gLTE7Ci0K
LSAgUlRDX0NIRUNLKHJ0Yzo6SW5pdGlhbGl6ZVNTTCgpKSA8PCAiRmFpbGVkIHRvIEluaXRpYWxp
emVTU0woKSI7Ci0gIExvYWRHbG9iYWxDbGFzc1JlZmVyZW5jZUhvbGRlcigpOwotCi0gIHJldHVy
biByZXQ7Ci19Ci0KLWV4dGVybiAiQyIgdm9pZCBKTklFWFBPUlQgSk5JQ0FMTCBKTklfT25Vbkxv
YWQoSmF2YVZNICpqdm0sIHZvaWQgKnJlc2VydmVkKSB7Ci0gIEZyZWVHbG9iYWxDbGFzc1JlZmVy
ZW5jZUhvbGRlcigpOwotICBSVENfQ0hFQ0socnRjOjpDbGVhbnVwU1NMKCkpIDw8ICJGYWlsZWQg
dG8gQ2xlYW51cFNTTCgpIjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2pu
aS9uYXRpdmVfaGFuZGxlX2ltcGwuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1w
bC5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1wbC5jYwkobm9uZXhp
c3RlbnQpCkBAIC0xLDIxNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAi
d2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFuZGxlX2ltcGwuaCIKLQotI2luY2x1ZGUg
PG1lbW9yeT4KLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2Uv
Y2hlY2tzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2Uva2VlcF9yZWZfdW50aWxfZG9uZS5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9z
Y29wZWRfcmVmX3B0ci5oIgotCi11c2luZyB3ZWJydGM6Ok5hdGl2ZUhhbmRsZUJ1ZmZlcjsKLQot
bmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi1NYXRyaXg6Ok1hdHJpeChKTklFbnYqIGpuaSwgamZs
b2F0QXJyYXkgYSkgewotICBSVENfQ0hFQ0tfRVEoMTYsIGpuaS0+R2V0QXJyYXlMZW5ndGgoYSkp
OwotICBqZmxvYXQqIHB0ciA9IGpuaS0+R2V0RmxvYXRBcnJheUVsZW1lbnRzKGEsIG51bGxwdHIp
OwotICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICBlbGVtX1tpXSA9IHB0cltp
XTsKLSAgfQotICBqbmktPlJlbGVhc2VGbG9hdEFycmF5RWxlbWVudHMoYSwgcHRyLCAwKTsKLX0K
LQotamZsb2F0QXJyYXkgTWF0cml4OjpUb0phdmEoSk5JRW52KiBqbmkpIHsKLSAgamZsb2F0QXJy
YXkgbWF0cml4ID0gam5pLT5OZXdGbG9hdEFycmF5KDE2KTsKLSAgam5pLT5TZXRGbG9hdEFycmF5
UmVnaW9uKG1hdHJpeCwgMCwgMTYsIGVsZW1fKTsKLSAgcmV0dXJuIG1hdHJpeDsKLX0KLQotdm9p
ZCBNYXRyaXg6OlJvdGF0ZSh3ZWJydGM6OlZpZGVvUm90YXRpb24gcm90YXRpb24pIHsKLSAgLy8g
VGV4dHVyZSBjb29yZGluYXRlcyBhcmUgaW4gdGhlIHJhbmdlIDAgdG8gMS4gVGhlIHRyYW5zZm9y
bWF0aW9uIG9mIHRoZSBsYXN0Ci0gIC8vIHJvdyBpbiBlYWNoIHJvdGF0aW9uIG1hdHJpeCBpcyBu
ZWVkZWQgZm9yIHByb3BlciB0cmFuc2xhdGlvbiwgZS5nLCB0bwotICAvLyBtaXJyb3IgeCwgd2Ug
ZG9uJ3QgcmVwbGFjZSB4IGJ5IC14LCBidXQgYnkgMS14LgotICBzd2l0Y2ggKHJvdGF0aW9uKSB7
Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzA6Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTA6IHsKLSAgICAgIGNvbnN0IGZsb2F0IFJPVEFU
RV85MFsxNl0gPQotICAgICAgICAgIHsgZWxlbV9bNF0sIGVsZW1fWzVdLCBlbGVtX1s2XSwgZWxl
bV9bN10sCi0gICAgICAgICAgICAtZWxlbV9bMF0sIC1lbGVtX1sxXSwgLWVsZW1fWzJdLCAtZWxl
bV9bM10sCi0gICAgICAgICAgICBlbGVtX1s4XSwgZWxlbV9bOV0sIGVsZW1fWzEwXSwgZWxlbV9b
MTFdLAotICAgICAgICAgICAgZWxlbV9bMF0gKyBlbGVtX1sxMl0sIGVsZW1fWzFdICsgZWxlbV9b
MTNdLAotICAgICAgICAgICAgZWxlbV9bMl0gKyBlbGVtX1sxNF0sIGVsZW1fWzNdICsgZWxlbV9b
MTVdfTsKLSAgICAgIG1lbWNweShlbGVtXywgUk9UQVRFXzkwLCBzaXplb2YoZWxlbV8pKTsKLSAg
ICB9IGJyZWFrOwotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8xODA6IHsKLSAgICAg
IGNvbnN0IGZsb2F0IFJPVEFURV8xODBbMTZdID0KLSAgICAgICAgICB7IC1lbGVtX1swXSwgLWVs
ZW1fWzFdLCAtZWxlbV9bMl0sIC1lbGVtX1szXSwKLSAgICAgICAgICAgIC1lbGVtX1s0XSwgLWVs
ZW1fWzVdLCAtZWxlbV9bNl0sIC1lbGVtX1s3XSwKLSAgICAgICAgICAgIGVsZW1fWzhdLCBlbGVt
X1s5XSwgZWxlbV9bMTBdLCBlbGVtX1sxMV0sCi0gICAgICAgICAgICBlbGVtX1swXSArIGVsZW1f
WzRdICsgZWxlbV9bMTJdLCBlbGVtX1sxXSArIGVsZW1fWzVdICsgZWxlbV9bMTNdLAotICAgICAg
ICAgICAgZWxlbV9bMl0gKyBlbGVtX1s2XSArIGVsZW1fWzE0XSwgZWxlbV9bM10gKyBlbGVtX1sx
MV0rIGVsZW1fWzE1XX07Ci0gICAgICAgIG1lbWNweShlbGVtXywgUk9UQVRFXzE4MCwgc2l6ZW9m
KGVsZW1fKSk7Ci0gICAgfSBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MjcwOiB7Ci0gICAgICBjb25zdCBmbG9hdCBST1RBVEVfMjcwWzE2XSA9Ci0gICAgICAgICAgeyAt
ZWxlbV9bNF0sIC1lbGVtX1s1XSwgLWVsZW1fWzZdLCAtZWxlbV9bN10sCi0gICAgICAgICAgICBl
bGVtX1swXSwgZWxlbV9bMV0sIGVsZW1fWzJdLCBlbGVtX1szXSwKLSAgICAgICAgICAgIGVsZW1f
WzhdLCBlbGVtX1s5XSwgZWxlbV9bMTBdLCBlbGVtX1sxMV0sCi0gICAgICAgICAgICBlbGVtX1s0
XSArIGVsZW1fWzEyXSwgZWxlbV9bNV0gKyBlbGVtX1sxM10sCi0gICAgICAgICAgICBlbGVtX1s2
XSArIGVsZW1fWzE0XSwgZWxlbV9bN10gKyBlbGVtX1sxNV19OwotICAgICAgbWVtY3B5KGVsZW1f
LCBST1RBVEVfMjcwLCBzaXplb2YoZWxlbV8pKTsKLSAgICB9IGJyZWFrOwotICB9Ci19Ci0KLS8v
IENhbGN1bGF0ZXMgcmVzdWx0ID0gYSAqIGIsIGluIGNvbHVtbi1tYWpvciBvcmRlci4KLXZvaWQg
TWF0cml4OjpNdWx0aXBseShjb25zdCBmbG9hdCBhWzE2XSwgY29uc3QgZmxvYXQgYlsxNl0sIGZs
b2F0IHJlc3VsdFsxNl0pIHsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKLSAgICBm
b3IgKGludCBqID0gMDsgaiA8IDQ7ICsraikgewotICAgICAgZmxvYXQgc3VtID0gMDsKLSAgICAg
IGZvciAoaW50IGsgPSAwOyBrIDwgNDsgKytrKSB7Ci0gICAgICAgIHN1bSArPSBhW2sgKiA0ICsg
al0gKiBiW2kgKiA0ICsga107Ci0gICAgICB9Ci0gICAgICByZXN1bHRbaSAqIDQgKyBqXSA9IHN1
bTsKLSAgICB9Ci0gIH0KLX0KLQotLy8gQ2VudGVyIGNyb3AgYnkga2VlcGluZyB4RnJhY3Rpb24g
b2YgdGhlIHdpZHRoIGFuZCB5RnJhY3Rpb24gb2YgdGhlIGhlaWdodCwKLS8vIHNvIGUuZy4gY3Jv
cHBpbmcgZnJvbSA2NDB4NDgwIHRvIDY0MHgzNjAgd291bGQgdXNlCi0vLyB4RnJhY3Rpb249MSwg
eUZyYWN0aW9uPTM2MC80ODAuCi12b2lkIE1hdHJpeDo6Q3JvcChmbG9hdCB4RnJhY3Rpb24sCi0g
ICAgICAgICAgICAgICAgICBmbG9hdCB5RnJhY3Rpb24sCi0gICAgICAgICAgICAgICAgICBmbG9h
dCB4T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgZmxvYXQgeU9mZnNldCkgewotICBjb25zdCBm
bG9hdCBjcm9wX21hdHJpeFsxNl0gPQotICAgICAge3hGcmFjdGlvbiwgMCwgMCwgMCwKLSAgICAg
ICAwLCB5RnJhY3Rpb24sIDAsIDAsCi0gICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICB4T2Zmc2V0
LCB5T2Zmc2V0LCAwLCAxfTsKLSAgY29uc3QgTWF0cml4IG9sZCA9ICp0aGlzOwotICBNdWx0aXBs
eShjcm9wX21hdHJpeCwgb2xkLmVsZW1fLCB0aGlzLT5lbGVtXyk7Ci19Ci0KLS8vIEFsaWduaW5n
IHBvaW50ZXIgdG8gNjQgYnl0ZXMgZm9yIGltcHJvdmVkIHBlcmZvcm1hbmNlLCBlLmcuIHVzZSBT
SU1ELgotc3RhdGljIGNvbnN0IGludCBrQnVmZmVyQWxpZ25tZW50ID0gNjQ7Ci0KLU5hdGl2ZUhh
bmRsZUltcGw6Ok5hdGl2ZUhhbmRsZUltcGwoaW50IGlkLCBjb25zdCBNYXRyaXgmIG1hdHJpeCkK
LSAgICA6IG9lc190ZXh0dXJlX2lkKGlkKSwgc2FtcGxpbmdfbWF0cml4KG1hdHJpeCkge30KLQot
TmF0aXZlSGFuZGxlSW1wbDo6TmF0aXZlSGFuZGxlSW1wbChKTklFbnYqIGpuaSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBqX29lc190ZXh0dXJlX2lkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZmxvYXRBcnJheSBqX3RyYW5zZm9ybV9tYXRy
aXgpCi0gICAgOiBvZXNfdGV4dHVyZV9pZChqX29lc190ZXh0dXJlX2lkKSwKLSAgICAgIHNhbXBs
aW5nX21hdHJpeChqbmksIGpfdHJhbnNmb3JtX21hdHJpeCkge30KLQotQW5kcm9pZFRleHR1cmVC
dWZmZXI6OkFuZHJvaWRUZXh0dXJlQnVmZmVyKAotICAgIGludCB3aWR0aCwKLSAgICBpbnQgaGVp
Z2h0LAotICAgIGNvbnN0IE5hdGl2ZUhhbmRsZUltcGwmIG5hdGl2ZV9oYW5kbGUsCi0gICAgam9i
amVjdCBzdXJmYWNlX3RleHR1cmVfaGVscGVyLAotICAgIGNvbnN0IHJ0Yzo6Q2FsbGJhY2swPHZv
aWQ+JiBub19sb25nZXJfdXNlZCkKLSAgICA6IHdlYnJ0Yzo6TmF0aXZlSGFuZGxlQnVmZmVyKCZu
YXRpdmVfaGFuZGxlXywgd2lkdGgsIGhlaWdodCksCi0gICAgICBuYXRpdmVfaGFuZGxlXyhuYXRp
dmVfaGFuZGxlKSwKLSAgICAgIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfKHN1cmZhY2VfdGV4dHVy
ZV9oZWxwZXIpLAotICAgICAgbm9fbG9uZ2VyX3VzZWRfY2JfKG5vX2xvbmdlcl91c2VkKSB7fQot
Ci1BbmRyb2lkVGV4dHVyZUJ1ZmZlcjo6fkFuZHJvaWRUZXh0dXJlQnVmZmVyKCkgewotICBub19s
b25nZXJfdXNlZF9jYl8oKTsKLX0KLQotcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9G
cmFtZUJ1ZmZlcj4KLUFuZHJvaWRUZXh0dXJlQnVmZmVyOjpOYXRpdmVUb0k0MjBCdWZmZXIoKSB7
Ci0gIGludCB1dl93aWR0aCA9ICh3aWR0aCgpKzcpIC8gODsKLSAgaW50IHN0cmlkZSA9IDggKiB1
dl93aWR0aDsKLSAgaW50IHV2X2hlaWdodCA9IChoZWlnaHQoKSsxKS8yOwotICBzaXplX3Qgc2l6
ZSA9IHN0cmlkZSAqIChoZWlnaHQoKSArIHV2X2hlaWdodCk7Ci0gIC8vIFRoZSBkYXRhIGlzIG93
bmVkIGJ5IHRoZSBmcmFtZSwgYW5kIHRoZSBub3JtYWwgY2FzZSBpcyB0aGF0IHRoZQotICAvLyBk
YXRhIGlzIGRlbGV0ZWQgYnkgdGhlIGZyYW1lJ3MgZGVzdHJ1Y3RvciBjYWxsYmFjay4KLSAgLy8K
LSAgLy8gVE9ETyhuaXNzZSk6IFVzZSBhbiBJNDIwQnVmZmVyUG9vbC4gV2UgdGhlbiBuZWVkIHRv
IGV4dGVuZCB0aGF0Ci0gIC8vIGNsYXNzLCBhbmQgSTQyMEJ1ZmZlciwgdG8gc3VwcG9ydCBvdXIg
bWVtb3J5IGxheW91dC4KLSAgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3QsIHdlYnJ0Yzo6QWxpZ25l
ZEZyZWVEZWxldGVyPiB5dXZfZGF0YSgKLSAgICAgIHN0YXRpY19jYXN0PHVpbnQ4X3QqPih3ZWJy
dGM6OkFsaWduZWRNYWxsb2Moc2l6ZSwga0J1ZmZlckFsaWdubWVudCkpKTsKLSAgLy8gU2VlIFl1
dkNvbnZlcnRlci5qYXZhIGZvciB0aGUgcmVxdWlyZWQgbGF5b3V0LgotICB1aW50OF90KiB5X2Rh
dGEgPSB5dXZfZGF0YS5nZXQoKTsKLSAgdWludDhfdCogdV9kYXRhID0geV9kYXRhICsgaGVpZ2h0
KCkgKiBzdHJpZGU7Ci0gIHVpbnQ4X3QqIHZfZGF0YSA9IHVfZGF0YSArIHN0cmlkZS8yOwotCi0g
IHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IGNvcHkgPQotICAg
IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8d2VicnRjOjpXcmFwcGVkSTQyMEJ1ZmZlcj4oCi0g
ICAgICAgIHdpZHRoKCksIGhlaWdodCgpLAotICAgICAgICB5X2RhdGEsIHN0cmlkZSwKLSAgICAg
ICAgdV9kYXRhLCBzdHJpZGUsCi0gICAgICAgIHZfZGF0YSwgc3RyaWRlLAotICAgICAgICBydGM6
OkJpbmQoJndlYnJ0Yzo6QWxpZ25lZEZyZWUsIHl1dl9kYXRhLnJlbGVhc2UoKSkpOwotCi0gIEpO
SUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2Fs
UmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0KLSAgam1ldGhvZElEIHRyYW5zZm9ybV9t
aWQgPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwKLSAgICAgIEdldE9iamVjdENsYXNzKGpuaSwg
c3VyZmFjZV90ZXh0dXJlX2hlbHBlcl8pLAotICAgICAgInRleHR1cmVUb1lVViIsCi0gICAgICAi
KExqYXZhL25pby9CeXRlQnVmZmVyO0lJSUlbRilWIik7Ci0KLSAgam9iamVjdCBieXRlX2J1ZmZl
ciA9IGpuaS0+TmV3RGlyZWN0Qnl0ZUJ1ZmZlcih5X2RhdGEsIHNpemUpOwotCi0gIGpmbG9hdEFy
cmF5IHNhbXBsaW5nX21hdHJpeCA9IG5hdGl2ZV9oYW5kbGVfLnNhbXBsaW5nX21hdHJpeC5Ub0ph
dmEoam5pKTsKLSAgam5pLT5DYWxsVm9pZE1ldGhvZChzdXJmYWNlX3RleHR1cmVfaGVscGVyXywK
LSAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1fbWlkLAotICAgICAgICAgICAgICAgICAg
ICAgIGJ5dGVfYnVmZmVyLCB3aWR0aCgpLCBoZWlnaHQoKSwgc3RyaWRlLAotICAgICAgICAgICAg
ICAgICAgICAgIG5hdGl2ZV9oYW5kbGVfLm9lc190ZXh0dXJlX2lkLCBzYW1wbGluZ19tYXRyaXgp
OwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAidGV4dHVyZVRvWVVWIHRocm93ZWQgYW4gZXhj
ZXB0aW9uIjsKLQotICByZXR1cm4gY29weTsKLX0KLQotcnRjOjpzY29wZWRfcmVmcHRyPEFuZHJv
aWRUZXh0dXJlQnVmZmVyPgotQW5kcm9pZFRleHR1cmVCdWZmZXI6OkNyb3BTY2FsZUFuZFJvdGF0
ZShpbnQgY3JvcHBlZF93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGNyb3BwZWRfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgY3JvcF94LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgY3JvcF95LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZHN0X3dpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgZHN0X2hlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uKSB7Ci0gIGlmIChjcm9wcGVkX3dp
ZHRoID09IGRzdF93aWR0aCAmJiBjcm9wcGVkX2hlaWdodCA9PSBkc3RfaGVpZ2h0ICYmCi0gICAg
ICB3aWR0aCgpID09IGRzdF93aWR0aCAmJiBoZWlnaHQoKSA9PSBkc3RfaGVpZ2h0ICYmCi0gICAg
ICByb3RhdGlvbiA9PSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApIHsKLSAgICByZXR1cm4gdGhp
czsKLSAgfQotICBpbnQgcm90YXRlZF93aWR0aCA9IChyb3RhdGlvbiAlIDE4MCA9PSAwKSA/IGRz
dF93aWR0aCA6IGRzdF9oZWlnaHQ7Ci0gIGludCByb3RhdGVkX2hlaWdodCA9IChyb3RhdGlvbiAl
IDE4MCA9PSAwKSA/IGRzdF9oZWlnaHQgOiBkc3Rfd2lkdGg7Ci0KLSAgLy8gSGVyZSB3ZSB1c2Ug
QmluZCBtYWdpYyB0byBhZGQgYSByZWZlcmVuY2UgY291bnQgdG8gfHRoaXN8IHVudGlsIHRoZSBu
ZXdseQotICAvLyBjcmVhdGVkIEFuZHJvaWRUZXh0dXJlQnVmZmVyIGlzIGRlc3RydWN0ZWQKLSAg
cnRjOjpzY29wZWRfcmVmcHRyPEFuZHJvaWRUZXh0dXJlQnVmZmVyPiBidWZmZXIoCi0gICAgICBu
ZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PEFuZHJvaWRUZXh0dXJlQnVmZmVyPigKLSAgICAgICAg
ICByb3RhdGVkX3dpZHRoLCByb3RhdGVkX2hlaWdodCwgbmF0aXZlX2hhbmRsZV8sCi0gICAgICAg
ICAgc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl8sIHJ0Yzo6S2VlcFJlZlVudGlsRG9uZSh0aGlzKSkp
OwotCi0gIGlmIChjcm9wcGVkX3dpZHRoICE9IHdpZHRoKCkgfHwgY3JvcHBlZF9oZWlnaHQgIT0g
aGVpZ2h0KCkpIHsKLSAgICBidWZmZXItPm5hdGl2ZV9oYW5kbGVfLnNhbXBsaW5nX21hdHJpeC5D
cm9wKAotICAgICAgICBjcm9wcGVkX3dpZHRoIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoKCkp
LAotICAgICAgICBjcm9wcGVkX2hlaWdodCAvIHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQoKSks
Ci0gICAgICAgIGNyb3BfeCAvIHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCgpKSwKLSAgICAgICAg
Y3JvcF95IC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCgpKSk7Ci0gIH0KLSAgYnVmZmVyLT5u
YXRpdmVfaGFuZGxlXy5zYW1wbGluZ19tYXRyaXguUm90YXRlKHJvdGF0aW9uKTsKLSAgcmV0dXJu
IGJ1ZmZlcjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVf
aGFuZGxlX2ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFuZGxlX2ltcGwuaAkobm9uZXhpc3RlbnQpCkBAIC0x
LDg3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX0FQSV9KQVZB
X0pOSV9OQVRJVkVfSEFORExFX0lNUExfSF8KLSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9O
QVRJVkVfSEFORExFX0lNUExfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAid2Vi
cnRjL2NvbW1vbl92aWRlby9pbmNsdWRlL3ZpZGVvX2ZyYW1lX2J1ZmZlci5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9jb21tb25fdmlkZW8vcm90YXRpb24uaCIKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkg
ewotCi0vLyBPcGVuIGdsIHRleHR1cmUgbWF0cml4LCBpbiBjb2x1bW4tbWFqb3Igb3JkZXIuIE9w
ZXJhdGlvbnMgYXJlCi0vLyBpbi1wbGFjZS4KLWNsYXNzIE1hdHJpeCB7Ci0gcHVibGljOgotICBN
YXRyaXgoSk5JRW52KiBqbmksIGpmbG9hdEFycmF5IGEpOwotCi0gIGpmbG9hdEFycmF5IFRvSmF2
YShKTklFbnYqIGpuaSk7Ci0KLSAgLy8gQ3JvcCBhcmd1bWVudHMgYXJlIHJlbGF0aXZlIHRvIG9y
aWdpbmFsIHNpemUuCi0gIHZvaWQgQ3JvcChmbG9hdCBjcm9wcGVkX3dpZHRoLAotICAgICAgICAg
ICAgZmxvYXQgY3JvcHBlZF9oZWlnaHQsCi0gICAgICAgICAgICBmbG9hdCBjcm9wX3gsCi0gICAg
ICAgICAgICBmbG9hdCBjcm9wX3kpOwotCi0gIHZvaWQgUm90YXRlKHdlYnJ0Yzo6VmlkZW9Sb3Rh
dGlvbiByb3RhdGlvbik7Ci0KLSBwcml2YXRlOgotICBzdGF0aWMgdm9pZCBNdWx0aXBseShjb25z
dCBmbG9hdCBhWzE2XSwgY29uc3QgZmxvYXQgYlsxNl0sIGZsb2F0IHJlc3VsdFsxNl0pOwotICBm
bG9hdCBlbGVtX1sxNl07Ci19OwotCi0vLyBXcmFwcGVyIGZvciB0ZXh0dXJlIG9iamVjdC4KLXN0
cnVjdCBOYXRpdmVIYW5kbGVJbXBsIHsKLSAgTmF0aXZlSGFuZGxlSW1wbChKTklFbnYqIGpuaSwK
LSAgICAgICAgICAgICAgICAgICBqaW50IGpfb2VzX3RleHR1cmVfaWQsCi0gICAgICAgICAgICAg
ICAgICAgamZsb2F0QXJyYXkgal90cmFuc2Zvcm1fbWF0cml4KTsKLQotICBOYXRpdmVIYW5kbGVJ
bXBsKGludCBpZCwgY29uc3QgTWF0cml4JiBtYXRyaXgpOwotCi0gIGNvbnN0IGludCBvZXNfdGV4
dHVyZV9pZDsKLSAgTWF0cml4IHNhbXBsaW5nX21hdHJpeDsKLX07Ci0KLWNsYXNzIEFuZHJvaWRU
ZXh0dXJlQnVmZmVyIDogcHVibGljIHdlYnJ0Yzo6TmF0aXZlSGFuZGxlQnVmZmVyIHsKLSBwdWJs
aWM6Ci0gIEFuZHJvaWRUZXh0dXJlQnVmZmVyKGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmF0aXZlSGFu
ZGxlSW1wbCYgbmF0aXZlX2hhbmRsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBz
dXJmYWNlX3RleHR1cmVfaGVscGVyLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBydGM6
OkNhbGxiYWNrMDx2b2lkPiYgbm9fbG9uZ2VyX3VzZWQpOwotICB+QW5kcm9pZFRleHR1cmVCdWZm
ZXIoKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFZpZGVvRnJhbWVCdWZmZXI+IE5hdGl2ZVRvSTQy
MEJ1ZmZlcigpIG92ZXJyaWRlOwotCi0gIC8vIEZpcnN0IGNyb3AsIHRoZW4gc2NhbGUgdG8gZHN0
IHJlc29sdXRpb24sIGFuZCB0aGVuIHJvdGF0ZS4KLSAgcnRjOjpzY29wZWRfcmVmcHRyPEFuZHJv
aWRUZXh0dXJlQnVmZmVyPiBDcm9wU2NhbGVBbmRSb3RhdGUoCi0gICAgICBpbnQgY3JvcHBlZF93
aWR0aCwKLSAgICAgIGludCBjcm9wcGVkX2hlaWdodCwKLSAgICAgIGludCBjcm9wX3gsCi0gICAg
ICBpbnQgY3JvcF95LAotICAgICAgaW50IGRzdF93aWR0aCwKLSAgICAgIGludCBkc3RfaGVpZ2h0
LAotICAgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uKTsKLQotIHByaXZhdGU6Ci0g
IE5hdGl2ZUhhbmRsZUltcGwgbmF0aXZlX2hhbmRsZV87Ci0gIC8vIFJhdyBvYmplY3QgcG9pbnRl
ciwgcmVseWluZyBvbiB0aGUgY2FsbGVyLCBpLmUuLAotICAvLyBBbmRyb2lkVmlkZW9DYXB0dXJl
ckpuaSBvciB0aGUgQysrIFN1cmZhY2VUZXh0dXJlSGVscGVyLCB0byBrZWVwCi0gIC8vIGEgZ2xv
YmFsIHJlZmVyZW5jZS4gVE9ETyhuaXNzZSk6IE1ha2UgdGhpcyBhIHJlZmVyZW5jZSB0byB0aGUg
QysrCi0gIC8vIFN1cmZhY2VUZXh0dXJlSGVscGVyIGluc3RlYWQsIGJ1dCB0aGF0IHJlcXVpcmVz
IHNvbWUgcmVmYWN0b3JpbmcKLSAgLy8gb2YgQW5kcm9pZFZpZGVvQ2FwdHVyZXJKbmkuCi0gIGpv
YmplY3Qgc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl87Ci0gIHJ0Yzo6Q2FsbGJhY2swPHZvaWQ+IG5v
X2xvbmdlcl91c2VkX2NiXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCi0KLSNl
bmRpZiAgLy8gV0VCUlRDX0FQSV9KQVZBX0pOSV9OQVRJVkVfSEFORExFX0lNUExfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2pu
aS9wZWVyY29ubmVjdGlvbl9qbmkuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3BlZXJjb25uZWN0aW9uX2pu
aS5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3BlZXJjb25uZWN0aW9uX2puaS5jYwkobm9uZXhp
c3RlbnQpCkBAIC0xLDI0MTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotLy8gSGludHMg
Zm9yIGZ1dHVyZSB2aXNpdG9yczoKLS8vIFRoaXMgZW50aXJlIGZpbGUgaXMgYW4gaW1wbGVtZW50
YXRpb24gZGV0YWlsIG9mIHRoZSBvcmcud2VicnRjIEphdmEgcGFja2FnZSwKLS8vIHRoZSBtb3N0
IGludGVyZXN0aW5nIGJpdHMgb2Ygd2hpY2ggYXJlIG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb257
LEZhY3Rvcnl9LgotLy8gVGhlIGxheW91dCBvZiB0aGlzIGZpbGUgaXMgcm91Z2hseToKLS8vIC0g
dmFyaW91cyBoZWxwZXIgQysrIGZ1bmN0aW9ucyAmIGNsYXNzZXMgdGhhdCB3cmFwIEphdmEgY291
bnRlcnBhcnRzIGFuZAotLy8gICBleHBvc2UgYSBDKysgaW50ZXJmYWNlIHRoYXQgY2FuIGJlIHBh
c3NlZCB0byB0aGUgQysrIFBlZXJDb25uZWN0aW9uIEFQSXMKLS8vIC0gaW1wbGVtZW50YXRpb25z
IG9mIG1ldGhvZHMgZGVjbGFyZWQgInN0YXRpYyIgaW4gdGhlIEphdmEgcGFja2FnZSAobmFtZWQK
LS8vICAgdGhpbmdzIGxpa2UgSmF2YV9vcmdfd2VicnRjX09NR19DYW5fVGhpc19OYW1lX0JlX0Fu
eV9Mb25nZXIsIHByZXNjcmliZWQgYnkKLS8vICAgdGhlIEpOSSBzcGVjKS4KLS8vCi0vLyBMaWZl
Y3ljbGUgbm90ZXM6IG9iamVjdHMgYXJlIG93bmVkIHdoZXJlIHRoZXkgd2lsbCBiZSBjYWxsZWQ7
IGluIG90aGVyIHdvcmRzCi0vLyBGb29PYnNlcnZlcnMgYXJlIG93bmVkIGJ5IEMrKy1sYW5kLCBh
bmQgdXNlci1jYWxsYWJsZSBvYmplY3RzIChlLmcuCi0vLyBQZWVyQ29ubmVjdGlvbiBhbmQgVmlk
ZW9UcmFjaykgYXJlIG93bmVkIGJ5IEphdmEtbGFuZC4KLS8vIFdoZW4gdGhpcyBmaWxlIGFsbG9j
YXRlcyBDKysgUmVmQ291bnRJbnRlcmZhY2VzIGl0IEFkZFJlZigpcyBhbiBhcnRpZmljaWFsCi0v
LyByZWYgc2ltdWxhdGluZyB0aGUgamxvbmcgaGVsZCBpbiBKYXZhLWxhbmQsIGFuZCB0aGVuIFJl
bGVhc2UoKXMgdGhlIHJlZiBpbgotLy8gdGhlIHJlc3BlY3RpdmUgZnJlZSBjYWxsLiAgU29tZXRp
bWVzIHRoaXMgQWRkUmVmIGlzIGltcGxpY2l0IGluIHRoZQotLy8gY29uc3RydWN0aW9uIG9mIGEg
c2NvcGVkX3JlZnB0cjw+IHdoaWNoIGlzIHRoZW4gLnJlbGVhc2UoKWQuCi0vLyBBbnkgcGVyc2lz
dGVudCAobm9uLWxvY2FsKSByZWZlcmVuY2VzIGZyb20gQysrIHRvIEphdmEgbXVzdCBiZSBnbG9i
YWwgb3Igd2VhawotLy8gKGluIHdoaWNoIGNhc2UgdGhleSBtdXN0IGJlIGNoZWNrZWQgYmVmb3Jl
IHVzZSkhCi0vLwotLy8gRXhjZXB0aW9uIG5vdGVzOiBwcmV0dHkgbXVjaCBhbGwgSk5JIGNhbGxz
IGNhbiB0aHJvdyBKYXZhIGV4Y2VwdGlvbnMsIHNvIGVhY2gKLS8vIGNhbGwgdGhyb3VnaCBhIEpO
SUVudiogcG9pbnRlciBuZWVkcyB0byBiZSBmb2xsb3dlZCBieSBhbiBFeGNlcHRpb25DaGVjaygp
Ci0vLyBjYWxsLiAgSW4gdGhpcyBmaWxlIHRoaXMgaXMgZG9uZSBpbiBDSEVDS19FWENFUFRJT04s
IG1ha2luZyBmb3IgbXVjaCBlYXNpZXIKLS8vIGRlYnVnZ2luZyBpbiBjYXNlIG9mIGZhaWx1cmUg
KHRoZSBhbHRlcm5hdGl2ZSBpcyB0byB3YWl0IGZvciBjb250cm9sIHRvCi0vLyByZXR1cm4gdG8g
dGhlIEphdmEgZnJhbWUgdGhhdCBjYWxsZWQgY29kZSBpbiB0aGlzIGZpbGUsIGF0IHdoaWNoIHBv
aW50IGl0J3MKLS8vIGltcG9zc2libGUgdG8gdGVsbCB3aGljaCBKTkkgY2FsbCBicm9rZSkuCi0K
LSNpbmNsdWRlIDxqbmkuaD4KLSN1bmRlZiBKTklFWFBPUlQKLSNkZWZpbmUgSk5JRVhQT1JUIF9f
YXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCi0KLSNpbmNsdWRlIDxsaW1pdHM+
Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJ0aGly
ZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvY29udmVydF9mcm9tLmgiCi0jaW5jbHVkZSAi
dGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L3NjYWxlLmgiCi0jaW5jbHVkZSAid2Vi
cnRjL2FwaS9hbmRyb2lkdmlkZW90cmFja3NvdXJjZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkv
YW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZGVjb2Rlcl9qbmkuaCIKLSNpbmNsdWRlICJ3ZWJydGMv
YXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWVuY29kZXJfam5pLmgiCi0jaW5jbHVkZSAid2Vi
cnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbmV0d29ya21vbml0b3Jfam5pLmgiCi0jaW5jbHVk
ZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1wbC5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9hcGkvbWVkaWFjb25zdHJhaW50c2ludGVyZmFjZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkv
cGVlcmNvbm5lY3Rpb25pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL3J0cHJlY2Vp
dmVyaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9ydHBzZW5kZXJpbnRlcmZhY2Uu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL3ZpZGVvc291cmNlcHJveHkuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvYXBpL3dlYnJ0Y3NkcC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2JpbmQuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9ldmVu
dF90cmFjZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAi
d2VicnRjL2Jhc2UvbG9nc2lua3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9tZXNzYWdlcXVl
dWUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9uZXR3b3JrbW9uaXRvci5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9iYXNlL3J0Y2NlcnRpZmljYXRlZ2VuZXJhdG9yLmgiCi0jaW5jbHVkZSAid2VicnRj
L2Jhc2Uvc3NsYWRhcHRlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3N0cmluZ3V0aWxzLmgi
Ci0jaW5jbHVkZSAid2VicnRjL21lZGlhL2Jhc2UvdmlkZW9jYXB0dXJlci5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9kZWNvZGVyZmFjdG9yeS5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9lbmNvZGVyZmFjdG9yeS5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZS9maWVsZF90cmlhbF9kZWZhdWx0
LmgiCi0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFwcGVycy9pbmNsdWRlL2xvZ2NhdF90cmFj
ZV9jb250ZXh0LmgiCi0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFwcGVycy9pbmNsdWRlL3Ry
YWNlLmgiCi0jaW5jbHVkZSAid2VicnRjL3ZvaWNlX2VuZ2luZS9pbmNsdWRlL3ZvZV9iYXNlLmgi
Ci0KLXVzaW5nIGNyaWNrZXQ6OldlYlJ0Y1ZpZGVvRGVjb2RlckZhY3Rvcnk7Ci11c2luZyBjcmlj
a2V0OjpXZWJSdGNWaWRlb0VuY29kZXJGYWN0b3J5OwotdXNpbmcgcnRjOjpCaW5kOwotdXNpbmcg
cnRjOjpUaHJlYWQ7Ci11c2luZyBydGM6OlRocmVhZE1hbmFnZXI7Ci11c2luZyB3ZWJydGM6OkF1
ZGlvU291cmNlSW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpBdWRpb1RyYWNrSW50ZXJmYWNlOwot
dXNpbmcgd2VicnRjOjpBdWRpb1RyYWNrVmVjdG9yOwotdXNpbmcgd2VicnRjOjpDcmVhdGVTZXNz
aW9uRGVzY3JpcHRpb25PYnNlcnZlcjsKLXVzaW5nIHdlYnJ0Yzo6RGF0YUJ1ZmZlcjsKLXVzaW5n
IHdlYnJ0Yzo6RGF0YUNoYW5uZWxJbml0OwotdXNpbmcgd2VicnRjOjpEYXRhQ2hhbm5lbEludGVy
ZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6RGF0YUNoYW5uZWxPYnNlcnZlcjsKLXVzaW5nIHdlYnJ0Yzo6
SWNlQ2FuZGlkYXRlSW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpMb2djYXRUcmFjZUNvbnRleHQ7
Ci11c2luZyB3ZWJydGM6Ok1lZGlhQ29uc3RyYWludHNJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6
Ok1lZGlhU291cmNlSW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpNZWRpYVN0cmVhbUludGVyZmFj
ZTsKLXVzaW5nIHdlYnJ0Yzo6TWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZTsKLXVzaW5nIHdlYnJ0
Yzo6UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpQZWVyQ29u
bmVjdGlvbkludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6UGVlckNvbm5lY3Rpb25PYnNlcnZlcjsK
LXVzaW5nIHdlYnJ0Yzo6UnRwUmVjZWl2ZXJJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OlJ0cFNl
bmRlckludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6U2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNl
OwotdXNpbmcgd2VicnRjOjpTZXRTZXNzaW9uRGVzY3JpcHRpb25PYnNlcnZlcjsKLXVzaW5nIHdl
YnJ0Yzo6U3RhdHNPYnNlcnZlcjsKLXVzaW5nIHdlYnJ0Yzo6U3RhdHNSZXBvcnQ7Ci11c2luZyB3
ZWJydGM6OlN0YXRzUmVwb3J0czsKLXVzaW5nIHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZUludGVy
ZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6VmlkZW9UcmFja0ludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6
VmlkZW9UcmFja1ZlY3RvcjsKLXVzaW5nIHdlYnJ0Yzo6a1ZpZGVvQ29kZWNWUDg7Ci0KLW5hbWVz
cGFjZSB3ZWJydGNfam5pIHsKLQotLy8gRmllbGQgdHJpYWxzIGluaXRpYWxpemF0aW9uIHN0cmlu
Zwotc3RhdGljIGNoYXIgKmZpZWxkX3RyaWFsc19pbml0X3N0cmluZyA9IE5VTEw7Ci0KLS8vIFNl
dCBpbiBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKCkuCi1z
dGF0aWMgYm9vbCBmYWN0b3J5X3N0YXRpY19pbml0aWFsaXplZCA9IGZhbHNlOwotc3RhdGljIGJv
b2wgdmlkZW9faHdfYWNjZWxlcmF0aW9uX2VuYWJsZWQgPSB0cnVlOwotc3RhdGljIGpvYmplY3Qg
al9hcHBsaWNhdGlvbl9jb250ZXh0ID0gbnVsbHB0cjsKLQotLy8gUmV0dXJuIHRoZSAoc2luZ2xl
dG9uKSBKYXZhIEVudW0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gfGluZGV4fDsKLS8vIHxzdGF0
ZV9jbGFzc19mcmFnbWVudHwgaXMgc29tZXRoaW5nIGxpa2UgIk1lZGlhU291cmNlJFN0YXRlIi4K
LXN0YXRpYyBqb2JqZWN0IEphdmFFbnVtRnJvbUluZGV4KAotICAgIEpOSUVudiogam5pLCBjb25z
dCBzdGQ6OnN0cmluZyYgc3RhdGVfY2xhc3NfZnJhZ21lbnQsIGludCBpbmRleCkgewotICBjb25z
dCBzdGQ6OnN0cmluZyBzdGF0ZV9jbGFzcyA9ICJvcmcvd2VicnRjLyIgKyBzdGF0ZV9jbGFzc19m
cmFnbWVudDsKLSAgcmV0dXJuIEphdmFFbnVtRnJvbUluZGV4KGpuaSwgRmluZENsYXNzKGpuaSwg
c3RhdGVfY2xhc3MuY19zdHIoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9j
bGFzcywgaW5kZXgpOwotfQotCi1zdGF0aWMgRGF0YUNoYW5uZWxJbml0IEphdmFEYXRhQ2hhbm5l
bEluaXRUb05hdGl2ZSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX2luaXQpIHsKLSAgRGF0
YUNoYW5uZWxJbml0IGluaXQ7Ci0KLSAgamNsYXNzIGpfaW5pdF9jbGFzcyA9IEZpbmRDbGFzcyhq
bmksICJvcmcvd2VicnRjL0RhdGFDaGFubmVsJEluaXQiKTsKLSAgamZpZWxkSUQgb3JkZXJlZF9p
ZCA9IEdldEZpZWxkSUQoam5pLCBqX2luaXRfY2xhc3MsICJvcmRlcmVkIiwgIloiKTsKLSAgamZp
ZWxkSUQgbWF4X3JldHJhbnNtaXRfdGltZV9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9p
bml0X2NsYXNzLCAibWF4UmV0cmFuc21pdFRpbWVNcyIsICJJIik7Ci0gIGpmaWVsZElEIG1heF9y
ZXRyYW5zbWl0c19pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9pbml0X2NsYXNzLCAibWF4
UmV0cmFuc21pdHMiLCAiSSIpOwotICBqZmllbGRJRCBwcm90b2NvbF9pZCA9Ci0gICAgICBHZXRG
aWVsZElEKGpuaSwgal9pbml0X2NsYXNzLCAicHJvdG9jb2wiLCAiTGphdmEvbGFuZy9TdHJpbmc7
Iik7Ci0gIGpmaWVsZElEIG5lZ290aWF0ZWRfaWQgPSBHZXRGaWVsZElEKGpuaSwgal9pbml0X2Ns
YXNzLCAibmVnb3RpYXRlZCIsICJaIik7Ci0gIGpmaWVsZElEIGlkX2lkID0gR2V0RmllbGRJRChq
bmksIGpfaW5pdF9jbGFzcywgImlkIiwgIkkiKTsKLQotICBpbml0Lm9yZGVyZWQgPSBHZXRCb29s
ZWFuRmllbGQoam5pLCBqX2luaXQsIG9yZGVyZWRfaWQpOwotICBpbml0Lm1heFJldHJhbnNtaXRU
aW1lID0gR2V0SW50RmllbGQoam5pLCBqX2luaXQsIG1heF9yZXRyYW5zbWl0X3RpbWVfaWQpOwot
ICBpbml0Lm1heFJldHJhbnNtaXRzID0gR2V0SW50RmllbGQoam5pLCBqX2luaXQsIG1heF9yZXRy
YW5zbWl0c19pZCk7Ci0gIGluaXQucHJvdG9jb2wgPSBKYXZhVG9TdGRTdHJpbmcoCi0gICAgICBq
bmksIEdldFN0cmluZ0ZpZWxkKGpuaSwgal9pbml0LCBwcm90b2NvbF9pZCkpOwotICBpbml0Lm5l
Z290aWF0ZWQgPSBHZXRCb29sZWFuRmllbGQoam5pLCBqX2luaXQsIG5lZ290aWF0ZWRfaWQpOwot
ICBpbml0LmlkID0gR2V0SW50RmllbGQoam5pLCBqX2luaXQsIGlkX2lkKTsKLQotICByZXR1cm4g
aW5pdDsKLX0KLQotY2xhc3MgQ29uc3RyYWludHNXcmFwcGVyOwotCi0vLyBBZGFwdGVyIGJldHdl
ZW4gdGhlIEMrKyBQZWVyQ29ubmVjdGlvbk9ic2VydmVyIGludGVyZmFjZSBhbmQgdGhlIEphdmEK
LS8vIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIGludGVyZmFjZS4gIFdyYXBzIGFuIGluc3RhbmNl
IG9mIHRoZSBKYXZhIGludGVyZmFjZQotLy8gYW5kIGRpc3BhdGNoZXMgQysrIGNhbGxiYWNrcyB0
byBKYXZhLgotY2xhc3MgUENPSmF2YSA6IHB1YmxpYyBQZWVyQ29ubmVjdGlvbk9ic2VydmVyIHsK
LSBwdWJsaWM6Ci0gIC8vIFdlIG5lZWQgdGhlc2UgdXNpbmcgZGVjbGFyYXRpb25zIGJlY2F1c2Ug
dGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiBlYWNoIG9mCi0gIC8vIHRoZSBiZWxvdyBtZXRob2Rz
IGFuZCB3ZSBvbmx5IG92ZXJyaWRlIG9uZSBvZiB0aGVtLgotICAvLyBUT0RPKGRlYWRiZWVmKTog
UmVtb3ZlIG9uY2UgdGhlcmUncyBvbmx5IG9uZSB2ZXJzaW9uIG9mIHRoZSBtZXRob2RzLgotICB1
c2luZyBQZWVyQ29ubmVjdGlvbk9ic2VydmVyOjpPbkFkZFN0cmVhbTsKLSAgdXNpbmcgUGVlckNv
bm5lY3Rpb25PYnNlcnZlcjo6T25SZW1vdmVTdHJlYW07Ci0gIHVzaW5nIFBlZXJDb25uZWN0aW9u
T2JzZXJ2ZXI6Ok9uRGF0YUNoYW5uZWw7Ci0KLSAgUENPSmF2YShKTklFbnYqIGpuaSwgam9iamVj
dCBqX29ic2VydmVyKQotICAgICAgOiBqX29ic2VydmVyX2dsb2JhbF8oam5pLCBqX29ic2VydmVy
KSwKLSAgICAgICAgal9vYnNlcnZlcl9jbGFzc18oam5pLCBHZXRPYmplY3RDbGFzcyhqbmksICpq
X29ic2VydmVyX2dsb2JhbF8pKSwKLSAgICAgICAgal9tZWRpYV9zdHJlYW1fY2xhc3NfKGpuaSwg
RmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFTdHJlYW0iKSksCi0gICAgICAgIGpfbWVk
aWFfc3RyZWFtX2N0b3JfKEdldE1ldGhvZElEKAotICAgICAgICAgICAgam5pLCAqal9tZWRpYV9z
dHJlYW1fY2xhc3NfLCAiPGluaXQ+IiwgIihKKVYiKSksCi0gICAgICAgIGpfYXVkaW9fdHJhY2tf
Y2xhc3NfKGpuaSwgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvQXVkaW9UcmFjayIpKSwKLSAg
ICAgICAgal9hdWRpb190cmFja19jdG9yXyhHZXRNZXRob2RJRCgKLSAgICAgICAgICAgIGpuaSwg
KmpfYXVkaW9fdHJhY2tfY2xhc3NfLCAiPGluaXQ+IiwgIihKKVYiKSksCi0gICAgICAgIGpfdmlk
ZW9fdHJhY2tfY2xhc3NfKGpuaSwgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvVmlkZW9UcmFj
ayIpKSwKLSAgICAgICAgal92aWRlb190cmFja19jdG9yXyhHZXRNZXRob2RJRCgKLSAgICAgICAg
ICAgIGpuaSwgKmpfdmlkZW9fdHJhY2tfY2xhc3NfLCAiPGluaXQ+IiwgIihKKVYiKSksCi0gICAg
ICAgIGpfZGF0YV9jaGFubmVsX2NsYXNzXyhqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRj
L0RhdGFDaGFubmVsIikpLAotICAgICAgICBqX2RhdGFfY2hhbm5lbF9jdG9yXyhHZXRNZXRob2RJ
RCgKLSAgICAgICAgICAgIGpuaSwgKmpfZGF0YV9jaGFubmVsX2NsYXNzXywgIjxpbml0PiIsICIo
SilWIikpIHsKLSAgfQotCi0gIHZpcnR1YWwgflBDT0phdmEoKSB7Ci0gICAgU2NvcGVkTG9jYWxS
ZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIHdoaWxlICghcmVtb3RlX3N0cmVh
bXNfLmVtcHR5KCkpCi0gICAgICBEaXNwb3NlUmVtb3RlU3RyZWFtKHJlbW90ZV9zdHJlYW1zXy5i
ZWdpbigpKTsKLSAgfQotCi0gIHZvaWQgT25JY2VDYW5kaWRhdGUoY29uc3QgSWNlQ2FuZGlkYXRl
SW50ZXJmYWNlKiBjYW5kaWRhdGUpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1l
IGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgc3RkOjpzdHJpbmcgc2RwOwotICAgIFJUQ19D
SEVDSyhjYW5kaWRhdGUtPlRvU3RyaW5nKCZzZHApKSA8PCAiZ290IHNvIGZhcjogIiA8PCBzZHA7
Ci0gICAgamNsYXNzIGNhbmRpZGF0ZV9jbGFzcyA9IEZpbmRDbGFzcyhqbmkoKSwgIm9yZy93ZWJy
dGMvSWNlQ2FuZGlkYXRlIik7Ci0gICAgam1ldGhvZElEIGN0b3IgPSBHZXRNZXRob2RJRChqbmko
KSwgY2FuZGlkYXRlX2NsYXNzLAotICAgICAgICAiPGluaXQ+IiwgIihMamF2YS9sYW5nL1N0cmlu
ZztJTGphdmEvbGFuZy9TdHJpbmc7KVYiKTsKLSAgICBqc3RyaW5nIGpfbWlkID0gSmF2YVN0cmlu
Z0Zyb21TdGRTdHJpbmcoam5pKCksIGNhbmRpZGF0ZS0+c2RwX21pZCgpKTsKLSAgICBqc3RyaW5n
IGpfc2RwID0gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5pKCksIHNkcCk7Ci0gICAgam9iamVj
dCBqX2NhbmRpZGF0ZSA9IGpuaSgpLT5OZXdPYmplY3QoY2FuZGlkYXRlX2NsYXNzLCBjdG9yLCBq
X21pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRh
dGUtPnNkcF9tbGluZV9pbmRleCgpLCBqX3NkcCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgp
KSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgam1ldGhvZElEIG0gPSBHZXRNZXRo
b2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm9uSWNlQ2FuZGlkYXRlIiwgIihMb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGU7KVYiKTsK
LSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgal9jYW5k
aWRhdGUpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxs
Vm9pZE1ldGhvZCI7Ci0gIH0KLQotICB2b2lkIE9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoCi0gICAg
ICBjb25zdCBzdGQ6OnZlY3Rvcjxjcmlja2V0OjpDYW5kaWRhdGU+JiBjYW5kaWRhdGVzKSBvdmVy
cmlkZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwot
ICAgIGpvYmplY3RBcnJheSBjYW5kaWRhdGVzX2FycmF5ID0gVG9KYXZhQ2FuZGlkYXRlQXJyYXko
am5pKCksIGNhbmRpZGF0ZXMpOwotICAgIGptZXRob2RJRCBtID0KLSAgICAgICAgR2V0TWV0aG9k
SUQoam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQiLAot
ICAgICAgICAgICAgICAgICAgICAiKFtMb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGU7KVYiKTsKLSAg
ICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgY2FuZGlkYXRl
c19hcnJheSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiRXJyb3IgZHVyaW5nIENh
bGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIHZvaWQgT25TaWduYWxpbmdDaGFuZ2UoCi0gICAgICBQ
ZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6U2lnbmFsaW5nU3RhdGUgbmV3X3N0YXRlKSBvdmVycmlk
ZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAg
IGptZXRob2RJRCBtID0gR2V0TWV0aG9kSUQoCi0gICAgICAgIGpuaSgpLCAqal9vYnNlcnZlcl9j
bGFzc18sICJvblNpZ25hbGluZ0NoYW5nZSIsCi0gICAgICAgICIoTG9yZy93ZWJydGMvUGVlckNv
bm5lY3Rpb24kU2lnbmFsaW5nU3RhdGU7KVYiKTsKLSAgICBqb2JqZWN0IG5ld19zdGF0ZV9lbnVt
ID0KLSAgICAgICAgSmF2YUVudW1Gcm9tSW5kZXgoam5pKCksICJQZWVyQ29ubmVjdGlvbiRTaWdu
YWxpbmdTdGF0ZSIsIG5ld19zdGF0ZSk7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29i
c2VydmVyX2dsb2JhbF8sIG0sIG5ld19zdGF0ZV9lbnVtKTsKLSAgICBDSEVDS19FWENFUFRJT04o
am5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAgdm9pZCBP
bkljZUNvbm5lY3Rpb25DaGFuZ2UoCi0gICAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6SWNl
Q29ubmVjdGlvblN0YXRlIG5ld19zdGF0ZSkgb3ZlcnJpZGUgewotICAgIFNjb3BlZExvY2FsUmVm
RnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBqbWV0aG9kSUQgbSA9IEdldE1ldGhv
ZElEKAotICAgICAgICBqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25JY2VDb25uZWN0aW9u
Q2hhbmdlIiwKLSAgICAgICAgIihMb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRJY2VDb25uZWN0
aW9uU3RhdGU7KVYiKTsKLSAgICBqb2JqZWN0IG5ld19zdGF0ZV9lbnVtID0gSmF2YUVudW1Gcm9t
SW5kZXgoCi0gICAgICAgIGpuaSgpLCAiUGVlckNvbm5lY3Rpb24kSWNlQ29ubmVjdGlvblN0YXRl
IiwgbmV3X3N0YXRlKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xv
YmFsXywgbSwgbmV3X3N0YXRlX2VudW0pOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwg
ImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotICB2b2lkIE9uSWNlQ29ubmVj
dGlvblJlY2VpdmluZ0NoYW5nZShib29sIHJlY2VpdmluZykgb3ZlcnJpZGUgewotICAgIFNjb3Bl
ZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBqbWV0aG9kSUQgbSA9
IEdldE1ldGhvZElEKAotICAgICAgICBqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25JY2VD
b25uZWN0aW9uUmVjZWl2aW5nQ2hhbmdlIiwgIihaKVYiKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRN
ZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgcmVjZWl2aW5nKTsKLSAgICBDSEVDS19FWENF
UFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAg
dm9pZCBPbkljZUdhdGhlcmluZ0NoYW5nZSgKLSAgICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNl
OjpJY2VHYXRoZXJpbmdTdGF0ZSBuZXdfc3RhdGUpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2Nh
bFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam1ldGhvZElEIG0gPSBHZXRN
ZXRob2RJRCgKLSAgICAgICAgam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uSWNlR2F0aGVy
aW5nQ2hhbmdlIiwKLSAgICAgICAgIihMb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRJY2VHYXRo
ZXJpbmdTdGF0ZTspViIpOwotICAgIGpvYmplY3QgbmV3X3N0YXRlX2VudW0gPSBKYXZhRW51bUZy
b21JbmRleCgKLSAgICAgICAgam5pKCksICJQZWVyQ29ubmVjdGlvbiRJY2VHYXRoZXJpbmdTdGF0
ZSIsIG5ld19zdGF0ZSk7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2ds
b2JhbF8sIG0sIG5ld19zdGF0ZV9lbnVtKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8
ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAgdm9pZCBPbkFkZFN0cmVh
bShydGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSkgb3ZlcnJp
ZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAg
ICAvLyBKYXZhIE1lZGlhU3RyZWFtIGhvbGRzIG9uZSByZWZlcmVuY2UuIENvcnJlc3BvbmRpbmcg
UmVsZWFzZSgpIGlzIGluCi0gICAgLy8gTWVkaWFTdHJlYW1fZnJlZSwgdHJpZ2dlcmVkIGJ5IE1l
ZGlhU3RyZWFtLmRpc3Bvc2UoKS4KLSAgICBzdHJlYW0tPkFkZFJlZigpOwotICAgIGpvYmplY3Qg
al9zdHJlYW0gPQotICAgICAgICBqbmkoKS0+TmV3T2JqZWN0KCpqX21lZGlhX3N0cmVhbV9jbGFz
c18sIGpfbWVkaWFfc3RyZWFtX2N0b3JfLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8amxvbmc+KHN0cmVhbS5nZXQoKSkpOwotICAgIENIRUNLX0VYQ0VQVElPTihq
bmkoKSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotCi0gICAgZm9yIChjb25zdCBhdXRv
JiB0cmFjayA6IHN0cmVhbS0+R2V0QXVkaW9UcmFja3MoKSkgewotICAgICAganN0cmluZyBpZCA9
IEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSgpLCB0cmFjay0+aWQoKSk7Ci0gICAgICAvLyBK
YXZhIEF1ZGlvVHJhY2sgaG9sZHMgb25lIHJlZmVyZW5jZS4gQ29ycmVzcG9uZGluZyBSZWxlYXNl
KCkgaXMgaW4KLSAgICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tfZnJlZSwgdHJpZ2dlcmVkIGJ5IEF1
ZGlvVHJhY2suZGlzcG9zZSgpLgotICAgICAgdHJhY2stPkFkZFJlZigpOwotICAgICAgam9iamVj
dCBqX3RyYWNrID0KLSAgICAgICAgICBqbmkoKS0+TmV3T2JqZWN0KCpqX2F1ZGlvX3RyYWNrX2Ns
YXNzXywgal9hdWRpb190cmFja19jdG9yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8amxvbmc+KHRyYWNrLmdldCgpKSwgaWQpOwotICAgICAgQ0hFQ0tfRVhD
RVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgICBqZmllbGRJ
RCBhdWRpb190cmFja3NfaWQgPSBHZXRGaWVsZElEKGpuaSgpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqal9tZWRpYV9zdHJlYW1fY2xhc3NfLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXVkaW9UcmFja3MiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGphdmEvdXRpbC9MaW5r
ZWRMaXN0OyIpOwotICAgICAgam9iamVjdCBhdWRpb190cmFja3MgPSBHZXRPYmplY3RGaWVsZChq
bmkoKSwgal9zdHJlYW0sIGF1ZGlvX3RyYWNrc19pZCk7Ci0gICAgICBqbWV0aG9kSUQgYWRkID0g
R2V0TWV0aG9kSUQoam5pKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0
T2JqZWN0Q2xhc3Moam5pKCksIGF1ZGlvX3RyYWNrcyksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImFkZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihM
amF2YS9sYW5nL09iamVjdDspWiIpOwotICAgICAgamJvb2xlYW4gYWRkZWQgPSBqbmkoKS0+Q2Fs
bEJvb2xlYW5NZXRob2QoYXVkaW9fdHJhY2tzLCBhZGQsIGpfdHJhY2spOwotICAgICAgQ0hFQ0tf
RVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAg
ICAgIFJUQ19DSEVDSyhhZGRlZCk7Ci0gICAgfQotCi0gICAgZm9yIChjb25zdCBhdXRvJiB0cmFj
ayA6IHN0cmVhbS0+R2V0VmlkZW9UcmFja3MoKSkgewotICAgICAganN0cmluZyBpZCA9IEphdmFT
dHJpbmdGcm9tU3RkU3RyaW5nKGpuaSgpLCB0cmFjay0+aWQoKSk7Ci0gICAgICAvLyBKYXZhIFZp
ZGVvVHJhY2sgaG9sZHMgb25lIHJlZmVyZW5jZS4gQ29ycmVzcG9uZGluZyBSZWxlYXNlKCkgaXMg
aW4KLSAgICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tfZnJlZSwgdHJpZ2dlcmVkIGJ5IFZpZGVvVHJh
Y2suZGlzcG9zZSgpLgotICAgICAgdHJhY2stPkFkZFJlZigpOwotICAgICAgam9iamVjdCBqX3Ry
YWNrID0KLSAgICAgICAgICBqbmkoKS0+TmV3T2JqZWN0KCpqX3ZpZGVvX3RyYWNrX2NsYXNzXywg
al92aWRlb190cmFja19jdG9yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8amxvbmc+KHRyYWNrLmdldCgpKSwgaWQpOwotICAgICAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgICBqZmllbGRJRCB2aWRl
b190cmFja3NfaWQgPSBHZXRGaWVsZElEKGpuaSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqal9tZWRpYV9zdHJlYW1fY2xhc3NfLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmlkZW9UcmFja3MiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTGphdmEvdXRpbC9MaW5rZWRMaXN0
OyIpOwotICAgICAgam9iamVjdCB2aWRlb190cmFja3MgPSBHZXRPYmplY3RGaWVsZChqbmkoKSwg
al9zdHJlYW0sIHZpZGVvX3RyYWNrc19pZCk7Ci0gICAgICBqbWV0aG9kSUQgYWRkID0gR2V0TWV0
aG9kSUQoam5pKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0T2JqZWN0
Q2xhc3Moam5pKCksIHZpZGVvX3RyYWNrcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImFkZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihMamF2YS9s
YW5nL09iamVjdDspWiIpOwotICAgICAgamJvb2xlYW4gYWRkZWQgPSBqbmkoKS0+Q2FsbEJvb2xl
YW5NZXRob2QodmlkZW9fdHJhY2tzLCBhZGQsIGpfdHJhY2spOwotICAgICAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAgICAgIFJU
Q19DSEVDSyhhZGRlZCk7Ci0gICAgfQotICAgIHJlbW90ZV9zdHJlYW1zX1tzdHJlYW1dID0gTmV3
R2xvYmFsUmVmKGpuaSgpLCBqX3N0cmVhbSk7Ci0KLSAgICBqbWV0aG9kSUQgbSA9IEdldE1ldGhv
ZElEKGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18sICJvbkFkZFN0cmVhbSIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiKExvcmcvd2VicnRjL01lZGlhU3RyZWFtOylWIik7Ci0gICAg
am5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIG0sIGpfc3RyZWFtKTsK
LSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRo
b2QiOwotICB9Ci0KLSAgdm9pZCBPblJlbW92ZVN0cmVhbSgKLSAgICAgIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjxNZWRpYVN0cmVhbUludGVyZmFjZT4gc3RyZWFtKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVk
TG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIE5hdGl2ZVRvSmF2YVN0
cmVhbXNNYXA6Oml0ZXJhdG9yIGl0ID0gcmVtb3RlX3N0cmVhbXNfLmZpbmQoc3RyZWFtKTsKLSAg
ICBSVENfQ0hFQ0soaXQgIT0gcmVtb3RlX3N0cmVhbXNfLmVuZCgpKSA8PCAidW5leHBlY3RlZCBz
dHJlYW06ICIgPDwgc3RkOjpoZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCBzdHJlYW07Ci0gICAgam9iamVjdCBqX3N0cmVhbSA9IGl0LT5zZWNvbmQ7Ci0g
ICAgam1ldGhvZElEIG0gPSBHZXRNZXRob2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAi
b25SZW1vdmVTdHJlYW0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihMb3JnL3dl
YnJ0Yy9NZWRpYVN0cmVhbTspViIpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNl
cnZlcl9nbG9iYWxfLCBtLCBqX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8
PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAgICAvLyBSZWxlYXNlIHRoZSByZWZw
dHIgcmVmZXJlbmNlIHNvIHRoYXQgRGlzcG9zZVJlbW90ZVN0cmVhbSBjYW4gYXNzZXJ0Ci0gICAg
Ly8gaXQgcmVtb3ZlcyB0aGUgZmluYWwgcmVmZXJlbmNlLgotICAgIHN0cmVhbSA9IG51bGxwdHI7
Ci0gICAgRGlzcG9zZVJlbW90ZVN0cmVhbShpdCk7Ci0gIH0KLQotICB2b2lkIE9uRGF0YUNoYW5u
ZWwoCi0gICAgICBydGM6OnNjb3BlZF9yZWZwdHI8RGF0YUNoYW5uZWxJbnRlcmZhY2U+IGNoYW5u
ZWwpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShq
bmkoKSk7Ci0gICAgam9iamVjdCBqX2NoYW5uZWwgPSBqbmkoKS0+TmV3T2JqZWN0KAotICAgICAg
ICAqal9kYXRhX2NoYW5uZWxfY2xhc3NfLCBqX2RhdGFfY2hhbm5lbF9jdG9yXywgKGpsb25nKWNo
YW5uZWwuZ2V0KCkpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmlu
ZyBOZXdPYmplY3QiOwotCi0gICAgam1ldGhvZElEIG0gPSBHZXRNZXRob2RJRChqbmkoKSwgKmpf
b2JzZXJ2ZXJfY2xhc3NfLCAib25EYXRhQ2hhbm5lbCIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiKExvcmcvd2VicnRjL0RhdGFDaGFubmVsOylWIik7Ci0gICAgam5pKCktPkNhbGxW
b2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIG0sIGpfY2hhbm5lbCk7Ci0KLSAgICAvLyBD
aGFubmVsIGlzIG5vdyBvd25lZCBieSBKYXZhIG9iamVjdCwgYW5kIHdpbGwgYmUgZnJlZWQgZnJv
bQotICAgIC8vIERhdGFDaGFubmVsLmRpc3Bvc2UoKS4gIEltcG9ydGFudCB0aGF0IHRoaXMgYmUg
ZG9uZSBfYWZ0ZXJfIHRoZQotICAgIC8vIENhbGxWb2lkTWV0aG9kIGFib3ZlIGFzIEphdmEgY29k
ZSBtaWdodCBjYWxsIGJhY2sgaW50byBuYXRpdmUgY29kZSBhbmQgYmUKLSAgICAvLyBzdXJwcmlz
ZWQgdG8gc2VlIGEgcmVmY291bnQgb2YgMi4KLSAgICBpbnQgYnVtcGVkX2NvdW50ID0gY2hhbm5l
bC0+QWRkUmVmKCk7Ci0gICAgUlRDX0NIRUNLKGJ1bXBlZF9jb3VudCA9PSAyKSA8PCAiVW5leHBl
Y3RlZCByZWZjb3VudCBPbkRhdGFDaGFubmVsIjsKLQotICAgIENIRUNLX0VYQ0VQVElPTihqbmko
KSkgPDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotICB2b2lkIE9uUmVu
ZWdvdGlhdGlvbk5lZWRlZCgpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxv
Y2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam1ldGhvZElEIG0gPQotICAgICAgICBHZXRNZXRo
b2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25SZW5lZ290aWF0aW9uTmVlZGVkIiwg
IigpViIpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBt
KTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRN
ZXRob2QiOwotICB9Ci0KLSAgdm9pZCBTZXRDb25zdHJhaW50cyhDb25zdHJhaW50c1dyYXBwZXIq
IGNvbnN0cmFpbnRzKSB7Ci0gICAgUlRDX0NIRUNLKCFjb25zdHJhaW50c18uZ2V0KCkpIDw8ICJj
b25zdHJhaW50cyBhbHJlYWR5IHNldCEiOwotICAgIGNvbnN0cmFpbnRzXy5yZXNldChjb25zdHJh
aW50cyk7Ci0gIH0KLQotICBjb25zdCBDb25zdHJhaW50c1dyYXBwZXIqIGNvbnN0cmFpbnRzKCkg
eyByZXR1cm4gY29uc3RyYWludHNfLmdldCgpOyB9Ci0KLSBwcml2YXRlOgotICB0eXBlZGVmIHN0
ZDo6bWFwPE1lZGlhU3RyZWFtSW50ZXJmYWNlKiwgam9iamVjdD4gTmF0aXZlVG9KYXZhU3RyZWFt
c01hcDsKLQotICB2b2lkIERpc3Bvc2VSZW1vdGVTdHJlYW0oY29uc3QgTmF0aXZlVG9KYXZhU3Ry
ZWFtc01hcDo6aXRlcmF0b3ImIGl0KSB7Ci0gICAgam9iamVjdCBqX3N0cmVhbSA9IGl0LT5zZWNv
bmQ7Ci0gICAgcmVtb3RlX3N0cmVhbXNfLmVyYXNlKGl0KTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRN
ZXRob2QoCi0gICAgICAgIGpfc3RyZWFtLCBHZXRNZXRob2RJRChqbmkoKSwgKmpfbWVkaWFfc3Ry
ZWFtX2NsYXNzXywgImRpc3Bvc2UiLCAiKClWIikpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmko
KSkgPDwgImVycm9yIGR1cmluZyBNZWRpYVN0cmVhbS5kaXNwb3NlKCkiOwotICAgIERlbGV0ZUds
b2JhbFJlZihqbmkoKSwgal9zdHJlYW0pOwotICB9Ci0KLSAgam9iamVjdCBUb0phdmFDYW5kaWRh
dGUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGpjbGFzcyogY2FuZGlk
YXRlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjcmlja2V0OjpDYW5k
aWRhdGUmIGNhbmRpZGF0ZSkgewotICAgIHN0ZDo6c3RyaW5nIHNkcCA9IHdlYnJ0Yzo6U2RwU2Vy
aWFsaXplQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgUlRDX0NIRUNLKCFzZHAuZW1wdHkoKSkg
PDwgImdvdCBhbiBlbXB0eSBJQ0UgY2FuZGlkYXRlIjsKLSAgICBqbWV0aG9kSUQgY3RvciA9IEdl
dE1ldGhvZElEKGpuaSwgKmNhbmRpZGF0ZV9jbGFzcywgIjxpbml0PiIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmlu
ZzspViIpOwotICAgIGpzdHJpbmcgal9taWQgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmks
IGNhbmRpZGF0ZS50cmFuc3BvcnRfbmFtZSgpKTsKLSAgICBqc3RyaW5nIGpfc2RwID0gSmF2YVN0
cmluZ0Zyb21TdGRTdHJpbmcoam5pLCBzZHApOwotICAgIC8vIHNkcF9tbGluZV9pbmRleCBpcyBu
b3QgdXNlZCwgcGFzcyBhbiBpbnZhbGlkIHZhbHVlIC0xLgotICAgIGpvYmplY3Qgal9jYW5kaWRh
dGUgPQotICAgICAgICBqbmktPk5ld09iamVjdCgqY2FuZGlkYXRlX2NsYXNzLCBjdG9yLCBqX21p
ZCwgLTEsIGpfc2RwKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5n
IEphdmEgQ2FuZGlkYXRlIE5ld09iamVjdCI7Ci0gICAgcmV0dXJuIGpfY2FuZGlkYXRlOwotICB9
Ci0KLSAgam9iamVjdEFycmF5IFRvSmF2YUNhbmRpZGF0ZUFycmF5KAotICAgICAgSk5JRW52KiBq
bmksCi0gICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxjcmlja2V0OjpDYW5kaWRhdGU+JiBjYW5kaWRh
dGVzKSB7Ci0gICAgamNsYXNzIGNhbmRpZGF0ZV9jbGFzcyA9IEZpbmRDbGFzcyhqbmksICJvcmcv
d2VicnRjL0ljZUNhbmRpZGF0ZSIpOwotICAgIGpvYmplY3RBcnJheSBqYXZhX2NhbmRpZGF0ZXMg
PQotICAgICAgICBqbmktPk5ld09iamVjdEFycmF5KGNhbmRpZGF0ZXMuc2l6ZSgpLCBjYW5kaWRh
dGVfY2xhc3MsIE5VTEwpOwotICAgIGludCBpID0gMDsKLSAgICBmb3IgKGNvbnN0IGNyaWNrZXQ6
OkNhbmRpZGF0ZSYgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgewotICAgICAgam9iamVjdCBqX2Nh
bmRpZGF0ZSA9IFRvSmF2YUNhbmRpZGF0ZShqbmksICZjYW5kaWRhdGVfY2xhc3MsIGNhbmRpZGF0
ZSk7Ci0gICAgICBqbmktPlNldE9iamVjdEFycmF5RWxlbWVudChqYXZhX2NhbmRpZGF0ZXMsIGkr
Kywgal9jYW5kaWRhdGUpOwotICAgIH0KLSAgICByZXR1cm4gamF2YV9jYW5kaWRhdGVzOwotICB9
Ci0KLSAgSk5JRW52KiBqbmkoKSB7Ci0gICAgcmV0dXJuIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5l
ZWRlZCgpOwotICB9Ci0KLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpvYmplY3Q+IGpfb2JzZXJ2
ZXJfZ2xvYmFsXzsKLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9vYnNlcnZlcl9j
bGFzc187Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfbWVkaWFfc3RyZWFtX2Ns
YXNzXzsKLSAgY29uc3Qgam1ldGhvZElEIGpfbWVkaWFfc3RyZWFtX2N0b3JfOwotICBjb25zdCBT
Y29wZWRHbG9iYWxSZWY8amNsYXNzPiBqX2F1ZGlvX3RyYWNrX2NsYXNzXzsKLSAgY29uc3Qgam1l
dGhvZElEIGpfYXVkaW9fdHJhY2tfY3Rvcl87Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqY2xh
c3M+IGpfdmlkZW9fdHJhY2tfY2xhc3NfOwotICBjb25zdCBqbWV0aG9kSUQgal92aWRlb190cmFj
a19jdG9yXzsKLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9kYXRhX2NoYW5uZWxf
Y2xhc3NfOwotICBjb25zdCBqbWV0aG9kSUQgal9kYXRhX2NoYW5uZWxfY3Rvcl87Ci0gIC8vIEMr
KyAtPiBKYXZhIHJlbW90ZSBzdHJlYW1zLiBUaGUgc3RvcmVkIGpvYmVjdHMgYXJlIGdsb2JhbCBy
ZWZzIGFuZCBtdXN0IGJlCi0gIC8vIG1hbnVhbGx5IGRlbGV0ZWQgdXBvbiByZW1vdmFsLiBVc2Ug
RGlzcG9zZVJlbW90ZVN0cmVhbSgpLgotICBOYXRpdmVUb0phdmFTdHJlYW1zTWFwIHJlbW90ZV9z
dHJlYW1zXzsKLSAgc3RkOjp1bmlxdWVfcHRyPENvbnN0cmFpbnRzV3JhcHBlcj4gY29uc3RyYWlu
dHNfOwotfTsKLQotLy8gV3JhcHBlciBmb3IgYSBKYXZhIE1lZGlhQ29uc3RyYWludHMgb2JqZWN0
LiAgQ29waWVzIGFsbCBuZWVkZWQgZGF0YSBzbyB3aGVuCi0vLyB0aGUgY29uc3RydWN0b3IgcmV0
dXJucyB0aGUgSmF2YSBvYmplY3QgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLWNsYXNzIENvbnN0cmFp
bnRzV3JhcHBlciA6IHB1YmxpYyBNZWRpYUNvbnN0cmFpbnRzSW50ZXJmYWNlIHsKLSBwdWJsaWM6
Ci0gIENvbnN0cmFpbnRzV3JhcHBlcihKTklFbnYqIGpuaSwgam9iamVjdCBqX2NvbnN0cmFpbnRz
KSB7Ci0gICAgUG9wdWxhdGVDb25zdHJhaW50c0Zyb21KYXZhUGFpckxpc3QoCi0gICAgICAgIGpu
aSwgal9jb25zdHJhaW50cywgIm1hbmRhdG9yeSIsICZtYW5kYXRvcnlfKTsKLSAgICBQb3B1bGF0
ZUNvbnN0cmFpbnRzRnJvbUphdmFQYWlyTGlzdCgKLSAgICAgICAgam5pLCBqX2NvbnN0cmFpbnRz
LCAib3B0aW9uYWwiLCAmb3B0aW9uYWxfKTsKLSAgfQotCi0gIHZpcnR1YWwgfkNvbnN0cmFpbnRz
V3JhcHBlcigpIHt9Ci0KLSAgLy8gTWVkaWFDb25zdHJhaW50c0ludGVyZmFjZS4KLSAgY29uc3Qg
Q29uc3RyYWludHMmIEdldE1hbmRhdG9yeSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1hbmRh
dG9yeV87IH0KLQotICBjb25zdCBDb25zdHJhaW50cyYgR2V0T3B0aW9uYWwoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBvcHRpb25hbF87IH0KLQotIHByaXZhdGU6Ci0gIC8vIEhlbHBlciBmb3Ig
dHJhbnNsYXRpbmcgYSBMaXN0PFBhaXI8U3RyaW5nLCBTdHJpbmc+PiB0byBhIENvbnN0cmFpbnRz
LgotICBzdGF0aWMgdm9pZCBQb3B1bGF0ZUNvbnN0cmFpbnRzRnJvbUphdmFQYWlyTGlzdCgKLSAg
ICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfY29uc3RyYWludHMsCi0gICAgICBjb25zdCBjaGFy
KiBmaWVsZF9uYW1lLCBDb25zdHJhaW50cyogZmllbGQpIHsKLSAgICBqZmllbGRJRCBqX2lkID0g
R2V0RmllbGRJRChqbmksCi0gICAgICAgIEdldE9iamVjdENsYXNzKGpuaSwgal9jb25zdHJhaW50
cyksIGZpZWxkX25hbWUsICJMamF2YS91dGlsL0xpc3Q7Iik7Ci0gICAgam9iamVjdCBqX2xpc3Qg
PSBHZXRPYmplY3RGaWVsZChqbmksIGpfY29uc3RyYWludHMsIGpfaWQpOwotICAgIGZvciAoam9i
amVjdCBlbnRyeSA6IEl0ZXJhYmxlKGpuaSwgal9saXN0KSkgewotICAgICAgam1ldGhvZElEIGdl
dF9rZXkgPSBHZXRNZXRob2RJRChqbmksCi0gICAgICAgICAgR2V0T2JqZWN0Q2xhc3Moam5pLCBl
bnRyeSksICJnZXRLZXkiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgICAgIGpzdHJpbmcg
al9rZXkgPSByZWludGVycHJldF9jYXN0PGpzdHJpbmc+KAotICAgICAgICAgIGpuaS0+Q2FsbE9i
amVjdE1ldGhvZChlbnRyeSwgZ2V0X2tleSkpOwotICAgICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkg
PDwgImVycm9yIGR1cmluZyBDYWxsT2JqZWN0TWV0aG9kIjsKLSAgICAgIGptZXRob2RJRCBnZXRf
dmFsdWUgPSBHZXRNZXRob2RJRChqbmksCi0gICAgICAgICAgR2V0T2JqZWN0Q2xhc3Moam5pLCBl
bnRyeSksICJnZXRWYWx1ZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgICAganN0cmlu
ZyBqX3ZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDxqc3RyaW5nPigKLSAgICAgICAgICBqbmktPkNh
bGxPYmplY3RNZXRob2QoZW50cnksIGdldF92YWx1ZSkpOwotICAgICAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsT2JqZWN0TWV0aG9kIjsKLSAgICAgIGZpZWxkLT5w
dXNoX2JhY2soQ29uc3RyYWludChKYXZhVG9TdGRTdHJpbmcoam5pLCBqX2tleSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSmF2YVRvU3RkU3RyaW5nKGpuaSwgal92YWx1ZSkp
KTsKLSAgICB9Ci0gIH0KLQotICBDb25zdHJhaW50cyBtYW5kYXRvcnlfOwotICBDb25zdHJhaW50
cyBvcHRpb25hbF87Ci19OwotCi1zdGF0aWMgam9iamVjdCBKYXZhU2RwRnJvbU5hdGl2ZVNkcCgK
LSAgICBKTklFbnYqIGpuaSwgY29uc3QgU2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlKiBkZXNj
KSB7Ci0gIHN0ZDo6c3RyaW5nIHNkcDsKLSAgUlRDX0NIRUNLKGRlc2MtPlRvU3RyaW5nKCZzZHAp
KSA8PCAiZ290IHNvIGZhcjogIiA8PCBzZHA7Ci0gIGpzdHJpbmcgal9kZXNjcmlwdGlvbiA9IEph
dmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSwgc2RwKTsKLQotICBqY2xhc3Mgal90eXBlX2NsYXNz
ID0gRmluZENsYXNzKAotICAgICAgam5pLCAib3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24k
VHlwZSIpOwotICBqbWV0aG9kSUQgal90eXBlX2Zyb21fY2Fub25pY2FsID0gR2V0U3RhdGljTWV0
aG9kSUQoCi0gICAgICBqbmksIGpfdHlwZV9jbGFzcywgImZyb21DYW5vbmljYWxGb3JtIiwKLSAg
ICAgICIoTGphdmEvbGFuZy9TdHJpbmc7KUxvcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbiRU
eXBlOyIpOwotICBqc3RyaW5nIGpfdHlwZV9zdHJpbmcgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmlu
ZyhqbmksIGRlc2MtPnR5cGUoKSk7Ci0gIGpvYmplY3Qgal90eXBlID0gam5pLT5DYWxsU3RhdGlj
T2JqZWN0TWV0aG9kKAotICAgICAgal90eXBlX2NsYXNzLCBqX3R5cGVfZnJvbV9jYW5vbmljYWws
IGpfdHlwZV9zdHJpbmcpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5n
IENhbGxPYmplY3RNZXRob2QiOwotCi0gIGpjbGFzcyBqX3NkcF9jbGFzcyA9IEZpbmRDbGFzcyhq
bmksICJvcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbiIpOwotICBqbWV0aG9kSUQgal9zZHBf
Y3RvciA9IEdldE1ldGhvZElEKAotICAgICAgam5pLCBqX3NkcF9jbGFzcywgIjxpbml0PiIsCi0g
ICAgICAiKExvcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbiRUeXBlO0xqYXZhL2xhbmcvU3Ry
aW5nOylWIik7Ci0gIGpvYmplY3Qgal9zZHAgPSBqbmktPk5ld09iamVjdCgKLSAgICAgIGpfc2Rw
X2NsYXNzLCBqX3NkcF9jdG9yLCBqX3R5cGUsIGpfZGVzY3JpcHRpb24pOwotICBDSEVDS19FWENF
UFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gIHJldHVybiBqX3NkcDsK
LX0KLQotdGVtcGxhdGUgPGNsYXNzIFQ+ICAvLyBUIGlzIG9uZSBvZiB7Q3JlYXRlLFNldH1TZXNz
aW9uRGVzY3JpcHRpb25PYnNlcnZlci4KLWNsYXNzIFNkcE9ic2VydmVyV3JhcHBlciA6IHB1Ymxp
YyBUIHsKLSBwdWJsaWM6Ci0gIFNkcE9ic2VydmVyV3JhcHBlcihKTklFbnYqIGpuaSwgam9iamVj
dCBqX29ic2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludHNXcmFwcGVyKiBj
b25zdHJhaW50cykKLSAgICAgIDogY29uc3RyYWludHNfKGNvbnN0cmFpbnRzKSwKLSAgICAgICAg
al9vYnNlcnZlcl9nbG9iYWxfKGpuaSwgal9vYnNlcnZlciksCi0gICAgICAgIGpfb2JzZXJ2ZXJf
Y2xhc3NfKGpuaSwgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX29ic2VydmVyKSkgewotICB9Ci0KLSAg
dmlydHVhbCB+U2RwT2JzZXJ2ZXJXcmFwcGVyKCkge30KLQotICAvLyBDYW4ndCBtYXJrIG92ZXJy
aWRlIGJlY2F1c2Ugb2YgdGVtcGxhdGluZy4KLSAgdmlydHVhbCB2b2lkIE9uU3VjY2VzcygpIHsK
LSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam1l
dGhvZElEIG0gPSBHZXRNZXRob2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25TZXRT
dWNjZXNzIiwgIigpViIpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9n
bG9iYWxfLCBtKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcg
Q2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAgLy8gQ2FuJ3QgbWFyayBvdmVycmlkZSBiZWNhdXNl
IG9mIHRlbXBsYXRpbmcuCi0gIHZpcnR1YWwgdm9pZCBPblN1Y2Nlc3MoU2Vzc2lvbkRlc2NyaXB0
aW9uSW50ZXJmYWNlKiBkZXNjKSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZf
ZnJhbWUoam5pKCkpOwotICAgIGptZXRob2RJRCBtID0gR2V0TWV0aG9kSUQoCi0gICAgICAgIGpu
aSgpLCAqal9vYnNlcnZlcl9jbGFzc18sICJvbkNyZWF0ZVN1Y2Nlc3MiLAotICAgICAgICAiKExv
cmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbjspViIpOwotICAgIGpvYmplY3Qgal9zZHAgPSBK
YXZhU2RwRnJvbU5hdGl2ZVNkcChqbmkoKSwgZGVzYyk7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0
aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIG0sIGpfc2RwKTsKLSAgICBDSEVDS19FWENFUFRJT04o
am5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSBwcm90ZWN0
ZWQ6Ci0gIC8vIENvbW1vbiBpbXBsZW1lbnRhdGlvbiBmb3IgZmFpbHVyZSBvZiBTZXQgJiBDcmVh
dGUgdHlwZXMsIGRpc3Rpbmd1aXNoZWQgYnkKLSAgLy8gfG9wfCBiZWluZyAiU2V0IiBvciAiQ3Jl
YXRlIi4KLSAgdm9pZCBEb09uRmFpbHVyZShjb25zdCBzdGQ6OnN0cmluZyYgb3AsIGNvbnN0IHN0
ZDo6c3RyaW5nJiBlcnJvcikgewotICAgIGptZXRob2RJRCBtID0gR2V0TWV0aG9kSUQoam5pKCks
ICpqX29ic2VydmVyX2NsYXNzXywgIm9uIiArIG9wICsgIkZhaWx1cmUiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZzspViIpOwotICAgIGpzdHJpbmcg
al9lcnJvcl9zdHJpbmcgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmkoKSwgZXJyb3IpOwot
ICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBtLCBqX2Vycm9y
X3N0cmluZyk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENh
bGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIEpOSUVudiogam5pKCkgewotICAgIHJldHVybiBBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgc3RkOjp1bmlx
dWVfcHRyPENvbnN0cmFpbnRzV3JhcHBlcj4gY29uc3RyYWludHNfOwotICBjb25zdCBTY29wZWRH
bG9iYWxSZWY8am9iamVjdD4gal9vYnNlcnZlcl9nbG9iYWxfOwotICBjb25zdCBTY29wZWRHbG9i
YWxSZWY8amNsYXNzPiBqX29ic2VydmVyX2NsYXNzXzsKLX07Ci0KLWNsYXNzIENyZWF0ZVNkcE9i
c2VydmVyV3JhcHBlcgotICAgIDogcHVibGljIFNkcE9ic2VydmVyV3JhcHBlcjxDcmVhdGVTZXNz
aW9uRGVzY3JpcHRpb25PYnNlcnZlcj4gewotIHB1YmxpYzoKLSAgQ3JlYXRlU2RwT2JzZXJ2ZXJX
cmFwcGVyKEpOSUVudiogam5pLCBqb2JqZWN0IGpfb2JzZXJ2ZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb25zdHJhaW50c1dyYXBwZXIqIGNvbnN0cmFpbnRzKQotICAgICAgOiBTZHBP
YnNlcnZlcldyYXBwZXIoam5pLCBqX29ic2VydmVyLCBjb25zdHJhaW50cykge30KLQotICB2b2lk
IE9uRmFpbHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZXJyb3IpIG92ZXJyaWRlIHsKLSAgICBTY29w
ZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgU2RwT2JzZXJ2ZXJX
cmFwcGVyOjpEb09uRmFpbHVyZShzdGQ6OnN0cmluZygiQ3JlYXRlIiksIGVycm9yKTsKLSAgfQot
fTsKLQotY2xhc3MgU2V0U2RwT2JzZXJ2ZXJXcmFwcGVyCi0gICAgOiBwdWJsaWMgU2RwT2JzZXJ2
ZXJXcmFwcGVyPFNldFNlc3Npb25EZXNjcmlwdGlvbk9ic2VydmVyPiB7Ci0gcHVibGljOgotICBT
ZXRTZHBPYnNlcnZlcldyYXBwZXIoSk5JRW52KiBqbmksIGpvYmplY3Qgal9vYnNlcnZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIENvbnN0cmFpbnRzV3JhcHBlciogY29uc3RyYWludHMpCi0g
ICAgICA6IFNkcE9ic2VydmVyV3JhcHBlcihqbmksIGpfb2JzZXJ2ZXIsIGNvbnN0cmFpbnRzKSB7
fQotCi0gIHZvaWQgT25GYWlsdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvcikgb3ZlcnJpZGUg
ewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBT
ZHBPYnNlcnZlcldyYXBwZXI6OkRvT25GYWlsdXJlKHN0ZDo6c3RyaW5nKCJTZXQiKSwgZXJyb3Ip
OwotICB9Ci19OwotCi0vLyBBZGFwdGVyIGZvciBhIEphdmEgRGF0YUNoYW5uZWwkT2JzZXJ2ZXIg
cHJlc2VudGluZyBhIEMrKyBEYXRhQ2hhbm5lbE9ic2VydmVyCi0vLyBhbmQgZGlzcGF0Y2hpbmcg
dGhlIGNhbGxiYWNrIGZyb20gQysrIGJhY2sgdG8gSmF2YS4KLWNsYXNzIERhdGFDaGFubmVsT2Jz
ZXJ2ZXJXcmFwcGVyIDogcHVibGljIERhdGFDaGFubmVsT2JzZXJ2ZXIgewotIHB1YmxpYzoKLSAg
RGF0YUNoYW5uZWxPYnNlcnZlcldyYXBwZXIoSk5JRW52KiBqbmksIGpvYmplY3Qgal9vYnNlcnZl
cikKLSAgICAgIDogal9vYnNlcnZlcl9nbG9iYWxfKGpuaSwgal9vYnNlcnZlciksCi0gICAgICAg
IGpfb2JzZXJ2ZXJfY2xhc3NfKGpuaSwgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX29ic2VydmVyKSks
Ci0gICAgICAgIGpfYnVmZmVyX2NsYXNzXyhqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRj
L0RhdGFDaGFubmVsJEJ1ZmZlciIpKSwKLSAgICAgICAgal9vbl9idWZmZXJlZF9hbW91bnRfY2hh
bmdlX21pZF8oR2V0TWV0aG9kSUQoCi0gICAgICAgICAgICBqbmksICpqX29ic2VydmVyX2NsYXNz
XywgIm9uQnVmZmVyZWRBbW91bnRDaGFuZ2UiLCAiKEopViIpKSwKLSAgICAgICAgal9vbl9zdGF0
ZV9jaGFuZ2VfbWlkXygKLSAgICAgICAgICAgIEdldE1ldGhvZElEKGpuaSwgKmpfb2JzZXJ2ZXJf
Y2xhc3NfLCAib25TdGF0ZUNoYW5nZSIsICIoKVYiKSksCi0gICAgICAgIGpfb25fbWVzc2FnZV9t
aWRfKEdldE1ldGhvZElEKGpuaSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25NZXNzYWdlIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihMb3JnL3dlYnJ0Yy9EYXRhQ2hh
bm5lbCRCdWZmZXI7KVYiKSksCi0gICAgICAgIGpfYnVmZmVyX2N0b3JfKEdldE1ldGhvZElEKGpu
aSwgKmpfYnVmZmVyX2NsYXNzXywgIjxpbml0PiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIoTGphdmEvbmlvL0J5dGVCdWZmZXI7WilWIikpIHt9Ci0KLSAgdmlydHVhbCB+
RGF0YUNoYW5uZWxPYnNlcnZlcldyYXBwZXIoKSB7fQotCi0gIHZvaWQgT25CdWZmZXJlZEFtb3Vu
dENoYW5nZSh1aW50NjRfdCBwcmV2aW91c19hbW91bnQpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRM
b2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam5pKCktPkNhbGxWb2lk
TWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIGpfb25fYnVmZmVyZWRfYW1vdW50X2NoYW5nZV9t
aWRfLAotICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c19hbW91bnQpOwotICAgIENI
RUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0g
IH0KLQotICB2b2lkIE9uU3RhdGVDaGFuZ2UoKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVkTG9jYWxS
ZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhv
ZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBqX29uX3N0YXRlX2NoYW5nZV9taWRfKTsKLSAgICBDSEVD
S19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9
Ci0KLSAgdm9pZCBPbk1lc3NhZ2UoY29uc3QgRGF0YUJ1ZmZlciYgYnVmZmVyKSBvdmVycmlkZSB7
Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGpv
YmplY3QgYnl0ZV9idWZmZXIgPSBqbmkoKS0+TmV3RGlyZWN0Qnl0ZUJ1ZmZlcigKLSAgICAgICAg
Y29uc3RfY2FzdDxjaGFyKj4oYnVmZmVyLmRhdGEuZGF0YTxjaGFyPigpKSwgYnVmZmVyLmRhdGEu
c2l6ZSgpKTsKLSAgICBqb2JqZWN0IGpfYnVmZmVyID0gam5pKCktPk5ld09iamVjdCgqal9idWZm
ZXJfY2xhc3NfLCBqX2J1ZmZlcl9jdG9yXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBieXRlX2J1ZmZlciwgYnVmZmVyLmJpbmFyeSk7Ci0gICAgam5pKCktPkNhbGxW
b2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIGpfb25fbWVzc2FnZV9taWRfLCBqX2J1ZmZl
cik7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lk
TWV0aG9kIjsKLSAgfQotCi0gcHJpdmF0ZToKLSAgSk5JRW52KiBqbmkoKSB7Ci0gICAgcmV0dXJu
IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICB9Ci0KLSAgY29uc3QgU2NvcGVkR2xv
YmFsUmVmPGpvYmplY3Q+IGpfb2JzZXJ2ZXJfZ2xvYmFsXzsKLSAgY29uc3QgU2NvcGVkR2xvYmFs
UmVmPGpjbGFzcz4gal9vYnNlcnZlcl9jbGFzc187Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxq
Y2xhc3M+IGpfYnVmZmVyX2NsYXNzXzsKLSAgY29uc3Qgam1ldGhvZElEIGpfb25fYnVmZmVyZWRf
YW1vdW50X2NoYW5nZV9taWRfOwotICBjb25zdCBqbWV0aG9kSUQgal9vbl9zdGF0ZV9jaGFuZ2Vf
bWlkXzsKLSAgY29uc3Qgam1ldGhvZElEIGpfb25fbWVzc2FnZV9taWRfOwotICBjb25zdCBqbWV0
aG9kSUQgal9idWZmZXJfY3Rvcl87Ci19OwotCi0vLyBBZGFwdGVyIGZvciBhIEphdmEgU3RhdHNP
YnNlcnZlciBwcmVzZW50aW5nIGEgQysrIFN0YXRzT2JzZXJ2ZXIgYW5kCi0vLyBkaXNwYXRjaGlu
ZyB0aGUgY2FsbGJhY2sgZnJvbSBDKysgYmFjayB0byBKYXZhLgotY2xhc3MgU3RhdHNPYnNlcnZl
cldyYXBwZXIgOiBwdWJsaWMgU3RhdHNPYnNlcnZlciB7Ci0gcHVibGljOgotICBTdGF0c09ic2Vy
dmVyV3JhcHBlcihKTklFbnYqIGpuaSwgam9iamVjdCBqX29ic2VydmVyKQotICAgICAgOiBqX29i
c2VydmVyX2dsb2JhbF8oam5pLCBqX29ic2VydmVyKSwKLSAgICAgICAgal9vYnNlcnZlcl9jbGFz
c18oam5pLCBHZXRPYmplY3RDbGFzcyhqbmksIGpfb2JzZXJ2ZXIpKSwKLSAgICAgICAgal9zdGF0
c19yZXBvcnRfY2xhc3NfKGpuaSwgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU3RhdHNSZXBv
cnQiKSksCi0gICAgICAgIGpfc3RhdHNfcmVwb3J0X2N0b3JfKEdldE1ldGhvZElEKAotICAgICAg
ICAgICAgam5pLCAqal9zdGF0c19yZXBvcnRfY2xhc3NfLCAiPGluaXQ+IiwKLSAgICAgICAgICAg
ICIoTGphdmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7RCIKLSAgICAgICAgICAgICJb
TG9yZy93ZWJydGMvU3RhdHNSZXBvcnQkVmFsdWU7KVYiKSksCi0gICAgICAgIGpfdmFsdWVfY2xh
c3NfKGpuaSwgRmluZENsYXNzKAotICAgICAgICAgICAgam5pLCAib3JnL3dlYnJ0Yy9TdGF0c1Jl
cG9ydCRWYWx1ZSIpKSwKLSAgICAgICAgal92YWx1ZV9jdG9yXyhHZXRNZXRob2RJRCgKLSAgICAg
ICAgICAgIGpuaSwgKmpfdmFsdWVfY2xhc3NfLCAiPGluaXQ+IiwKLSAgICAgICAgICAgICIoTGph
dmEvbGFuZy9TdHJpbmc7TGphdmEvbGFuZy9TdHJpbmc7KVYiKSkgewotICB9Ci0KLSAgdmlydHVh
bCB+U3RhdHNPYnNlcnZlcldyYXBwZXIoKSB7fQotCi0gIHZvaWQgT25Db21wbGV0ZShjb25zdCBT
dGF0c1JlcG9ydHMmIHJlcG9ydHMpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1l
IGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam9iamVjdEFycmF5IGpfcmVwb3J0cyA9IFJl
cG9ydHNUb0phdmEoam5pKCksIHJlcG9ydHMpOwotICAgIGptZXRob2RJRCBtID0gR2V0TWV0aG9k
SUQoam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uQ29tcGxldGUiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIihbTG9yZy93ZWJydGMvU3RhdHNSZXBvcnQ7KVYiKTsKLSAgICBq
bmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgal9yZXBvcnRzKTsK
LSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRo
b2QiOwotICB9Ci0KLSBwcml2YXRlOgotICBqb2JqZWN0QXJyYXkgUmVwb3J0c1RvSmF2YSgKLSAg
ICAgIEpOSUVudiogam5pLCBjb25zdCBTdGF0c1JlcG9ydHMmIHJlcG9ydHMpIHsKLSAgICBqb2Jq
ZWN0QXJyYXkgcmVwb3J0c19hcnJheSA9IGpuaS0+TmV3T2JqZWN0QXJyYXkoCi0gICAgICAgIHJl
cG9ydHMuc2l6ZSgpLCAqal9zdGF0c19yZXBvcnRfY2xhc3NfLCBOVUxMKTsKLSAgICBpbnQgaSA9
IDA7Ci0gICAgZm9yIChjb25zdCBhdXRvKiByZXBvcnQgOiByZXBvcnRzKSB7Ci0gICAgICBTY29w
ZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICAgICAganN0cmluZyBqX2lk
ID0gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5pLCByZXBvcnQtPmlkKCktPlRvU3RyaW5nKCkp
OwotICAgICAganN0cmluZyBqX3R5cGUgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmksIHJl
cG9ydC0+VHlwZVRvU3RyaW5nKCkpOwotICAgICAgam9iamVjdEFycmF5IGpfdmFsdWVzID0gVmFs
dWVzVG9KYXZhKGpuaSwgcmVwb3J0LT52YWx1ZXMoKSk7Ci0gICAgICBqb2JqZWN0IGpfcmVwb3J0
ID0gam5pLT5OZXdPYmplY3QoKmpfc3RhdHNfcmVwb3J0X2NsYXNzXywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqX3N0YXRzX3JlcG9ydF9jdG9yXywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX2lkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXBvcnQtPnRpbWVzdGFtcCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpfdmFsdWVzKTsKLSAgICAgIGpuaS0+U2V0T2JqZWN0QXJyYXlF
bGVtZW50KHJlcG9ydHNfYXJyYXksIGkrKywgal9yZXBvcnQpOwotICAgIH0KLSAgICByZXR1cm4g
cmVwb3J0c19hcnJheTsKLSAgfQotCi0gIGpvYmplY3RBcnJheSBWYWx1ZXNUb0phdmEoSk5JRW52
KiBqbmksIGNvbnN0IFN0YXRzUmVwb3J0OjpWYWx1ZXMmIHZhbHVlcykgewotICAgIGpvYmplY3RB
cnJheSBqX3ZhbHVlcyA9IGpuaS0+TmV3T2JqZWN0QXJyYXkoCi0gICAgICAgIHZhbHVlcy5zaXpl
KCksICpqX3ZhbHVlX2NsYXNzXywgTlVMTCk7Ci0gICAgaW50IGkgPSAwOwotICAgIGZvciAoY29u
c3QgYXV0byYgaXQgOiB2YWx1ZXMpIHsKLSAgICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxf
cmVmX2ZyYW1lKGpuaSk7Ci0gICAgICAvLyBTaG91bGQgd2UgdXNlIHRoZSAnLm5hbWUnIGVudW0g
dmFsdWUgaGVyZSBpbnN0ZWFkIG9mIGNvbnZlcnRpbmcgdGhlCi0gICAgICAvLyBuYW1lIHRvIGEg
c3RyaW5nPwotICAgICAganN0cmluZyBqX25hbWUgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhq
bmksIGl0LnNlY29uZC0+ZGlzcGxheV9uYW1lKCkpOwotICAgICAganN0cmluZyBqX3ZhbHVlID0g
SmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5pLCBpdC5zZWNvbmQtPlRvU3RyaW5nKCkpOwotICAg
ICAgam9iamVjdCBqX2VsZW1lbnRfdmFsdWUgPQotICAgICAgICAgIGpuaS0+TmV3T2JqZWN0KCpq
X3ZhbHVlX2NsYXNzXywgal92YWx1ZV9jdG9yXywgal9uYW1lLCBqX3ZhbHVlKTsKLSAgICAgIGpu
aS0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGpfdmFsdWVzLCBpKyssIGpfZWxlbWVudF92YWx1ZSk7
Ci0gICAgfQotICAgIHJldHVybiBqX3ZhbHVlczsKLSAgfQotCi0gIEpOSUVudiogam5pKCkgewot
ICAgIHJldHVybiBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgfQotCi0gIGNvbnN0
IFNjb3BlZEdsb2JhbFJlZjxqb2JqZWN0PiBqX29ic2VydmVyX2dsb2JhbF87Ci0gIGNvbnN0IFNj
b3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfb2JzZXJ2ZXJfY2xhc3NfOwotICBjb25zdCBTY29wZWRH
bG9iYWxSZWY8amNsYXNzPiBqX3N0YXRzX3JlcG9ydF9jbGFzc187Ci0gIGNvbnN0IGptZXRob2RJ
RCBqX3N0YXRzX3JlcG9ydF9jdG9yXzsKLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4g
al92YWx1ZV9jbGFzc187Ci0gIGNvbnN0IGptZXRob2RJRCBqX3ZhbHVlX2N0b3JfOwotfTsKLQot
Ly8gV3JhcHBlciBkaXNwYXRjaGluZyBydGM6OlZpZGVvU2lua0ludGVyZmFjZSB0byBhIEphdmEg
VmlkZW9SZW5kZXJlcgotLy8gaW5zdGFuY2UuCi1jbGFzcyBKYXZhVmlkZW9SZW5kZXJlcldyYXBw
ZXIKLSAgICA6IHB1YmxpYyBydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJh
bWU+IHsKLSBwdWJsaWM6Ci0gIEphdmFWaWRlb1JlbmRlcmVyV3JhcHBlcihKTklFbnYqIGpuaSwg
am9iamVjdCBqX2NhbGxiYWNrcykKLSAgICAgIDogal9jYWxsYmFja3NfKGpuaSwgal9jYWxsYmFj
a3MpLAotICAgICAgICBqX3JlbmRlcl9mcmFtZV9pZF8oR2V0TWV0aG9kSUQoCi0gICAgICAgICAg
ICBqbmksIEdldE9iamVjdENsYXNzKGpuaSwgal9jYWxsYmFja3MpLCAicmVuZGVyRnJhbWUiLAot
ICAgICAgICAgICAgIihMb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyJEk0MjBGcmFtZTspViIpKSwK
LSAgICAgICAgal9mcmFtZV9jbGFzc18oam5pLAotICAgICAgICAgICAgICAgICAgICAgICBGaW5k
Q2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyJEk0MjBGcmFtZSIpKSwKLSAgICAg
ICAgal9pNDIwX2ZyYW1lX2N0b3JfaWRfKEdldE1ldGhvZElEKAotICAgICAgICAgICAgam5pLCAq
al9mcmFtZV9jbGFzc18sICI8aW5pdD4iLCAiKElJSVtJW0xqYXZhL25pby9CeXRlQnVmZmVyO0op
ViIpKSwKLSAgICAgICAgal90ZXh0dXJlX2ZyYW1lX2N0b3JfaWRfKEdldE1ldGhvZElEKAotICAg
ICAgICAgICAgam5pLCAqal9mcmFtZV9jbGFzc18sICI8aW5pdD4iLAotICAgICAgICAgICAgIihJ
SUlJW0ZKKVYiKSksCi0gICAgICAgIGpfYnl0ZV9idWZmZXJfY2xhc3NfKGpuaSwgRmluZENsYXNz
KGpuaSwgImphdmEvbmlvL0J5dGVCdWZmZXIiKSkgewotICAgIENIRUNLX0VYQ0VQVElPTihqbmkp
OwotICB9Ci0KLSAgdmlydHVhbCB+SmF2YVZpZGVvUmVuZGVyZXJXcmFwcGVyKCkge30KLQotICB2
b2lkIE9uRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiB2aWRlb19mcmFtZSkgb3ZlcnJp
ZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAg
ICBqb2JqZWN0IGpfZnJhbWUgPQotICAgICAgICAodmlkZW9fZnJhbWUudmlkZW9fZnJhbWVfYnVm
ZmVyKCktPm5hdGl2ZV9oYW5kbGUoKSAhPSBudWxscHRyKQotICAgICAgICAgICAgPyBDcmlja2V0
VG9KYXZhVGV4dHVyZUZyYW1lKCZ2aWRlb19mcmFtZSkKLSAgICAgICAgICAgIDogQ3JpY2tldFRv
SmF2YUk0MjBGcmFtZSgmdmlkZW9fZnJhbWUpOwotICAgIC8vIHxqX2NhbGxiYWNrc198IGlzIHJl
c3BvbnNpYmxlIGZvciByZWxlYXNpbmcgfGpfZnJhbWV8IHdpdGgKLSAgICAvLyBWaWRlb1JlbmRl
cmVyLnJlbmRlckZyYW1lRG9uZSgpLgotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9jYWxs
YmFja3NfLCBqX3JlbmRlcl9mcmFtZV9pZF8sIGpfZnJhbWUpOwotICAgIENIRUNLX0VYQ0VQVElP
TihqbmkoKSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIC8vIE1ha2UgYSBzaGFsbG93IGNvcHkgb2Yg
fGZyYW1lfCB0byBiZSB1c2VkIHdpdGggSmF2YS4gVGhlIGNhbGxlZSBoYXMKLSAgLy8gb3duZXJz
aGlwIG9mIHRoZSBmcmFtZSwgYW5kIHRoZSBmcmFtZSBzaG91bGQgYmUgcmVsZWFzZWQgd2l0aAot
ICAvLyBWaWRlb1JlbmRlcmVyLnJlbGVhc2VOYXRpdmVGcmFtZSgpLgotICBzdGF0aWMgamxvbmcg
amF2YVNoYWxsb3dDb3B5KGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSogZnJhbWUpIHsKLSAgICBy
ZXR1cm4gamxvbmdGcm9tUG9pbnRlcihuZXcgd2VicnRjOjpWaWRlb0ZyYW1lKCpmcmFtZSkpOwot
ICB9Ci0KLSAgLy8gUmV0dXJuIGEgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgcmVmZXJyaW5nIHRv
IHRoZSBkYXRhIGluIHxmcmFtZXwuCi0gIGpvYmplY3QgQ3JpY2tldFRvSmF2YUk0MjBGcmFtZShj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUqIGZyYW1lKSB7Ci0gICAgamludEFycmF5IHN0cmlkZXMg
PSBqbmkoKS0+TmV3SW50QXJyYXkoMyk7Ci0gICAgamludCogc3RyaWRlc19hcnJheSA9IGpuaSgp
LT5HZXRJbnRBcnJheUVsZW1lbnRzKHN0cmlkZXMsIE5VTEwpOwotICAgIHN0cmlkZXNfYXJyYXlb
MF0gPSBmcmFtZS0+dmlkZW9fZnJhbWVfYnVmZmVyKCktPlN0cmlkZVkoKTsKLSAgICBzdHJpZGVz
X2FycmF5WzFdID0gZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJpZGVVKCk7Ci0gICAg
c3RyaWRlc19hcnJheVsyXSA9IGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+U3RyaWRlVigp
OwotICAgIGpuaSgpLT5SZWxlYXNlSW50QXJyYXlFbGVtZW50cyhzdHJpZGVzLCBzdHJpZGVzX2Fy
cmF5LCAwKTsKLSAgICBqb2JqZWN0QXJyYXkgcGxhbmVzID0gam5pKCktPk5ld09iamVjdEFycmF5
KDMsICpqX2J5dGVfYnVmZmVyX2NsYXNzXywgTlVMTCk7Ci0gICAgam9iamVjdCB5X2J1ZmZlciA9
IGpuaSgpLT5OZXdEaXJlY3RCeXRlQnVmZmVyKAotICAgICAgICBjb25zdF9jYXN0PHVpbnQ4X3Qq
PihmcmFtZS0+dmlkZW9fZnJhbWVfYnVmZmVyKCktPkRhdGFZKCkpLAotICAgICAgICBmcmFtZS0+
dmlkZW9fZnJhbWVfYnVmZmVyKCktPlN0cmlkZVkoKSAqCi0gICAgICAgICAgICBmcmFtZS0+dmlk
ZW9fZnJhbWVfYnVmZmVyKCktPmhlaWdodCgpKTsKLSAgICBzaXplX3QgY2hyb21hX2hlaWdodCA9
IChmcmFtZS0+aGVpZ2h0KCkgKyAxKSAvIDI7Ci0gICAgam9iamVjdCB1X2J1ZmZlciA9IGpuaSgp
LT5OZXdEaXJlY3RCeXRlQnVmZmVyKAotICAgICAgICBjb25zdF9jYXN0PHVpbnQ4X3QqPihmcmFt
ZS0+dmlkZW9fZnJhbWVfYnVmZmVyKCktPkRhdGFVKCkpLAotICAgICAgICBmcmFtZS0+dmlkZW9f
ZnJhbWVfYnVmZmVyKCktPlN0cmlkZVUoKSAqIGNocm9tYV9oZWlnaHQpOwotICAgIGpvYmplY3Qg
dl9idWZmZXIgPSBqbmkoKS0+TmV3RGlyZWN0Qnl0ZUJ1ZmZlcigKLSAgICAgICAgY29uc3RfY2Fz
dDx1aW50OF90Kj4oZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5EYXRhVigpKSwKLSAgICAg
ICAgZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJpZGVWKCkgKiBjaHJvbWFfaGVpZ2h0
KTsKLQotICAgIGpuaSgpLT5TZXRPYmplY3RBcnJheUVsZW1lbnQocGxhbmVzLCAwLCB5X2J1ZmZl
cik7Ci0gICAgam5pKCktPlNldE9iamVjdEFycmF5RWxlbWVudChwbGFuZXMsIDEsIHVfYnVmZmVy
KTsKLSAgICBqbmkoKS0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KHBsYW5lcywgMiwgdl9idWZmZXIp
OwotICAgIHJldHVybiBqbmkoKS0+TmV3T2JqZWN0KAotICAgICAgICAqal9mcmFtZV9jbGFzc18s
IGpfaTQyMF9mcmFtZV9jdG9yX2lkXywKLSAgICAgICAgZnJhbWUtPndpZHRoKCksIGZyYW1lLT5o
ZWlnaHQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihmcmFtZS0+cm90YXRpb24oKSksCi0g
ICAgICAgIHN0cmlkZXMsIHBsYW5lcywgamF2YVNoYWxsb3dDb3B5KGZyYW1lKSk7Ci0gIH0KLQot
ICAvLyBSZXR1cm4gYSBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSByZWZlcnJpbmcgdGV4dHVyZSBv
YmplY3QgaW4gfGZyYW1lfC4KLSAgam9iamVjdCBDcmlja2V0VG9KYXZhVGV4dHVyZUZyYW1lKGNv
bnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSogZnJhbWUpIHsKLSAgICBOYXRpdmVIYW5kbGVJbXBsKiBo
YW5kbGUgPSByZWludGVycHJldF9jYXN0PE5hdGl2ZUhhbmRsZUltcGwqPigKLSAgICAgICAgZnJh
bWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5uYXRpdmVfaGFuZGxlKCkpOwotICAgIGpmbG9hdEFy
cmF5IHNhbXBsaW5nX21hdHJpeCA9IGhhbmRsZS0+c2FtcGxpbmdfbWF0cml4LlRvSmF2YShqbmko
KSk7Ci0KLSAgICByZXR1cm4gam5pKCktPk5ld09iamVjdCgKLSAgICAgICAgKmpfZnJhbWVfY2xh
c3NfLCBqX3RleHR1cmVfZnJhbWVfY3Rvcl9pZF8sCi0gICAgICAgIGZyYW1lLT53aWR0aCgpLCBm
cmFtZS0+aGVpZ2h0KCksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4oZnJhbWUtPnJvdGF0aW9u
KCkpLAotICAgICAgICBoYW5kbGUtPm9lc190ZXh0dXJlX2lkLCBzYW1wbGluZ19tYXRyaXgsIGph
dmFTaGFsbG93Q29weShmcmFtZSkpOwotICB9Ci0KLSAgSk5JRW52KiBqbmkoKSB7Ci0gICAgcmV0
dXJuIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICB9Ci0KLSAgU2NvcGVkR2xvYmFs
UmVmPGpvYmplY3Q+IGpfY2FsbGJhY2tzXzsKLSAgam1ldGhvZElEIGpfcmVuZGVyX2ZyYW1lX2lk
XzsKLSAgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9mcmFtZV9jbGFzc187Ci0gIGptZXRob2RJ
RCBqX2k0MjBfZnJhbWVfY3Rvcl9pZF87Ci0gIGptZXRob2RJRCBqX3RleHR1cmVfZnJhbWVfY3Rv
cl9pZF87Ci0gIFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfYnl0ZV9idWZmZXJfY2xhc3NfOwot
fTsKLQotCi1zdGF0aWMgRGF0YUNoYW5uZWxJbnRlcmZhY2UqIEV4dHJhY3ROYXRpdmVEQyhKTklF
bnYqIGpuaSwgam9iamVjdCBqX2RjKSB7Ci0gIGpmaWVsZElEIG5hdGl2ZV9kY19pZCA9IEdldEZp
ZWxkSUQoam5pLAotICAgICAgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX2RjKSwgIm5hdGl2ZURhdGFD
aGFubmVsIiwgIkoiKTsKLSAgamxvbmcgal9kID0gR2V0TG9uZ0ZpZWxkKGpuaSwgal9kYywgbmF0
aXZlX2RjX2lkKTsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RGF0YUNoYW5uZWxJbnRlcmZh
Y2UqPihqX2QpOwotfQotCi1KT1coamxvbmcsIERhdGFDaGFubmVsX3JlZ2lzdGVyT2JzZXJ2ZXJO
YXRpdmUpKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMsIGpvYmplY3Qgal9vYnNlcnZl
cikgewotICBzdGQ6OnVuaXF1ZV9wdHI8RGF0YUNoYW5uZWxPYnNlcnZlcldyYXBwZXI+IG9ic2Vy
dmVyKAotICAgICAgbmV3IERhdGFDaGFubmVsT2JzZXJ2ZXJXcmFwcGVyKGpuaSwgal9vYnNlcnZl
cikpOwotICBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+UmVnaXN0ZXJPYnNlcnZlcihvYnNl
cnZlci5nZXQoKSk7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKG9ic2VydmVyLnJlbGVhc2Uo
KSk7Ci19Ci0KLUpPVyh2b2lkLCBEYXRhQ2hhbm5lbF91bnJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUp
KAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMsIGpsb25nIG5hdGl2ZV9vYnNlcnZlcikg
ewotICBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+VW5yZWdpc3Rlck9ic2VydmVyKCk7Ci0g
IGRlbGV0ZSByZWludGVycHJldF9jYXN0PERhdGFDaGFubmVsT2JzZXJ2ZXJXcmFwcGVyKj4obmF0
aXZlX29ic2VydmVyKTsKLX0KLQotSk9XKGpzdHJpbmcsIERhdGFDaGFubmVsX2xhYmVsKShKTklF
bnYqIGpuaSwgam9iamVjdCBqX2RjKSB7Ci0gIHJldHVybiBKYXZhU3RyaW5nRnJvbVN0ZFN0cmlu
ZyhqbmksIEV4dHJhY3ROYXRpdmVEQyhqbmksIGpfZGMpLT5sYWJlbCgpKTsKLX0KLQotSk9XKGpp
bnQsIERhdGFDaGFubmVsX2lkKShKTklFbnYqIGpuaSwgam9iamVjdCBqX2RjKSB7Ci0gIGludCBp
ZCA9IEV4dHJhY3ROYXRpdmVEQyhqbmksIGpfZGMpLT5pZCgpOwotICBSVENfQ0hFQ0tfTEUoaWQs
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKQotICAgICAgPDwgImlkIG92ZXJm
bG93ZWQgamludCEiOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8amludD4oaWQpOwotfQotCi1KT1co
am9iamVjdCwgRGF0YUNoYW5uZWxfc3RhdGUpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMpIHsK
LSAgcmV0dXJuIEphdmFFbnVtRnJvbUluZGV4KAotICAgICAgam5pLCAiRGF0YUNoYW5uZWwkU3Rh
dGUiLCBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+c3RhdGUoKSk7Ci19Ci0KLUpPVyhqbG9u
ZywgRGF0YUNoYW5uZWxfYnVmZmVyZWRBbW91bnQpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMp
IHsKLSAgdWludDY0X3QgYnVmZmVyZWRfYW1vdW50ID0gRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9k
YyktPmJ1ZmZlcmVkX2Ftb3VudCgpOwotICBSVENfQ0hFQ0tfTEUoYnVmZmVyZWRfYW1vdW50LCBz
dGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkKLSAgICAgIDw8ICJidWZmZXJlZF9h
bW91bnQgb3ZlcmZsb3dlZCBqbG9uZyEiOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8amxvbmc+KGJ1
ZmZlcmVkX2Ftb3VudCk7Ci19Ci0KLUpPVyh2b2lkLCBEYXRhQ2hhbm5lbF9jbG9zZSkoSk5JRW52
KiBqbmksIGpvYmplY3Qgal9kYykgewotICBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+Q2xv
c2UoKTsKLX0KLQotSk9XKGpib29sZWFuLCBEYXRhQ2hhbm5lbF9zZW5kTmF0aXZlKShKTklFbnYq
IGpuaSwgam9iamVjdCBqX2RjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqYnl0ZUFycmF5IGRhdGEsIGpib29sZWFuIGJpbmFyeSkgewotICBqYnl0ZSogYnl0ZXMgPSBq
bmktPkdldEJ5dGVBcnJheUVsZW1lbnRzKGRhdGEsIE5VTEwpOwotICBib29sIHJldCA9IEV4dHJh
Y3ROYXRpdmVEQyhqbmksIGpfZGMpLT5TZW5kKERhdGFCdWZmZXIoCi0gICAgICBydGM6OkNvcHlP
bldyaXRlQnVmZmVyKGJ5dGVzLCBqbmktPkdldEFycmF5TGVuZ3RoKGRhdGEpKSwKLSAgICAgIGJp
bmFyeSkpOwotICBqbmktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBieXRlcywgSk5J
X0FCT1JUKTsKLSAgcmV0dXJuIHJldDsKLX0KLQotSk9XKHZvaWQsIERhdGFDaGFubmVsX2Rpc3Bv
c2UpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMpIHsKLSAgQ0hFQ0tfUkVMRUFTRShFeHRyYWN0
TmF0aXZlREMoam5pLCBqX2RjKSk7Ci19Ci0KLUpPVyh2b2lkLCBMb2dnaW5nX25hdGl2ZUVuYWJs
ZVRyYWNpbmcpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpzdHJpbmcgal9wYXRoLCBqaW50
IG5hdGl2ZUxldmVscykgewotICBzdGQ6OnN0cmluZyBwYXRoID0gSmF2YVRvU3RkU3RyaW5nKGpu
aSwgal9wYXRoKTsKLSAgaWYgKG5hdGl2ZUxldmVscyAhPSB3ZWJydGM6OmtUcmFjZU5vbmUpIHsK
LSAgICB3ZWJydGM6OlRyYWNlOjpzZXRfbGV2ZWxfZmlsdGVyKG5hdGl2ZUxldmVscyk7Ci0gICAg
aWYgKHBhdGggIT0gImxvZ2NhdDoiKSB7Ci0gICAgICBSVENfQ0hFQ0tfRVEoMCwgd2VicnRjOjpU
cmFjZTo6U2V0VHJhY2VGaWxlKHBhdGguY19zdHIoKSwgZmFsc2UpKQotICAgICAgICAgIDw8ICJT
ZXRUcmFjZUZpbGUgZmFpbGVkIjsKLSAgICB9IGVsc2UgewotICAgICAgLy8gSW50ZW50aW9uYWxs
eSBsZWFrIHRoaXMgdG8gYXZvaWQgbmVlZGluZyB0byByZWFzb24gYWJvdXQgaXRzIGxpZmVjeWNs
ZS4KLSAgICAgIC8vIEl0IGtlZXBzIG5vIHN0YXRlIGFuZCBmdW5jdGlvbnMgb25seSBhcyBhIGRp
c3BhdGNoIHBvaW50LgotICAgICAgc3RhdGljIExvZ2NhdFRyYWNlQ29udGV4dCogZ190cmFjZV9j
YWxsYmFjayA9IG5ldyBMb2djYXRUcmFjZUNvbnRleHQoKTsKLSAgICB9Ci0gIH0KLX0KLQotSk9X
KHZvaWQsIExvZ2dpbmdfbmF0aXZlRW5hYmxlTG9nVG9EZWJ1Z091dHB1dCkKLSAgICAoSk5JRW52
ICpqbmksIGpjbGFzcywgamludCBuYXRpdmVTZXZlcml0eSkgewotICBpZiAobmF0aXZlU2V2ZXJp
dHkgPj0gcnRjOjpMU19TRU5TSVRJVkUgJiYgbmF0aXZlU2V2ZXJpdHkgPD0gcnRjOjpMU19OT05F
KSB7Ci0gICAgcnRjOjpMb2dNZXNzYWdlOjpMb2dUb0RlYnVnKAotICAgICAgICBzdGF0aWNfY2Fz
dDxydGM6OkxvZ2dpbmdTZXZlcml0eT4obmF0aXZlU2V2ZXJpdHkpKTsKLSAgfQotfQotCi1KT1co
dm9pZCwgTG9nZ2luZ19uYXRpdmVFbmFibGVMb2dUaHJlYWRzKShKTklFbnYqIGpuaSwgamNsYXNz
KSB7Ci0gIHJ0Yzo6TG9nTWVzc2FnZTo6TG9nVGhyZWFkcyh0cnVlKTsKLX0KLQotSk9XKHZvaWQs
IExvZ2dpbmdfbmF0aXZlRW5hYmxlTG9nVGltZVN0YW1wcykoSk5JRW52KiBqbmksIGpjbGFzcykg
ewotICBydGM6OkxvZ01lc3NhZ2U6OkxvZ1RpbWVzdGFtcHModHJ1ZSk7Ci19Ci0KLUpPVyh2b2lk
LCBMb2dnaW5nX25hdGl2ZUxvZykoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamludCBqX3Nl
dmVyaXR5LCBqc3RyaW5nIGpfdGFnLCBqc3RyaW5nIGpfbWVzc2FnZSkgewotICBzdGQ6OnN0cmlu
ZyBtZXNzYWdlID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9tZXNzYWdlKTsKLSAgc3RkOjpzdHJp
bmcgdGFnID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal90YWcpOwotICBMT0dfVEFHKHN0YXRpY19j
YXN0PHJ0Yzo6TG9nZ2luZ1NldmVyaXR5PihqX3NldmVyaXR5KSwgdGFnKSA8PCBtZXNzYWdlOwot
fQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25fZnJlZVBlZXJDb25uZWN0aW9uKShKTklFbnYq
LCBqY2xhc3MsIGpsb25nIGpfcCkgewotICBDSEVDS19SRUxFQVNFKHJlaW50ZXJwcmV0X2Nhc3Q8
UGVlckNvbm5lY3Rpb25JbnRlcmZhY2UqPihqX3ApKTsKLX0KLQotSk9XKHZvaWQsIFBlZXJDb25u
ZWN0aW9uX2ZyZWVPYnNlcnZlcikoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgUENP
SmF2YSogcCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UENPSmF2YSo+KGpfcCk7Ci0gIGRlbGV0ZSBwOwot
fQotCi1KT1codm9pZCwgTWVkaWFTb3VyY2VfZnJlZSkoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBq
X3ApIHsKLSAgcmVpbnRlcnByZXRfY2FzdDxydGM6OlJlZkNvdW50SW50ZXJmYWNlKj4oal9wKS0+
UmVsZWFzZSgpOwotfQotCi1KT1codm9pZCwgVmlkZW9SZW5kZXJlcl9mcmVlV3JhcHBlZFZpZGVv
UmVuZGVyZXIpKEpOSUVudiosIGpjbGFzcywgamxvbmcgal9wKSB7Ci0gIGRlbGV0ZSByZWludGVy
cHJldF9jYXN0PEphdmFWaWRlb1JlbmRlcmVyV3JhcHBlcio+KGpfcCk7Ci19Ci0KLUpPVyh2b2lk
LCBWaWRlb1JlbmRlcmVyX3JlbGVhc2VOYXRpdmVGcmFtZSkoCi0gICAgSk5JRW52KiBqbmksIGpj
bGFzcywgamxvbmcgal9mcmFtZV9wdHIpIHsKLSAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3Qgd2VicnRjOjpWaWRlb0ZyYW1lKj4oal9mcmFtZV9wdHIpOwotfQotCi1KT1codm9pZCwgTWVk
aWFTdHJlYW1UcmFja19mcmVlKShKTklFbnYqLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICByZWlu
dGVycHJldF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqPihqX3ApLT5SZWxlYXNlKCk7
Ci19Ci0KLUpPVyhqYm9vbGVhbiwgTWVkaWFTdHJlYW1fbmF0aXZlQWRkQXVkaW9UcmFjaykoCi0g
ICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgcG9pbnRlciwgamxvbmcgal9hdWRpb190cmFj
a19wb2ludGVyKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtSW50ZXJm
YWNlKj4ocG9pbnRlciktPkFkZFRyYWNrKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxBdWRpb1Ry
YWNrSW50ZXJmYWNlKj4oal9hdWRpb190cmFja19wb2ludGVyKSk7Ci19Ci0KLUpPVyhqYm9vbGVh
biwgTWVkaWFTdHJlYW1fbmF0aXZlQWRkVmlkZW9UcmFjaykoCi0gICAgSk5JRW52KiBqbmksIGpj
bGFzcywgamxvbmcgcG9pbnRlciwgamxvbmcgal92aWRlb190cmFja19wb2ludGVyKSB7Ci0gIHJl
dHVybiByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtSW50ZXJmYWNlKj4ocG9pbnRlcikKLSAg
ICAgIC0+QWRkVHJhY2socmVpbnRlcnByZXRfY2FzdDxWaWRlb1RyYWNrSW50ZXJmYWNlKj4oal92
aWRlb190cmFja19wb2ludGVyKSk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgTWVkaWFTdHJlYW1fbmF0
aXZlUmVtb3ZlQXVkaW9UcmFjaykoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgcG9p
bnRlciwgamxvbmcgal9hdWRpb190cmFja19wb2ludGVyKSB7Ci0gIHJldHVybiByZWludGVycHJl
dF9jYXN0PE1lZGlhU3RyZWFtSW50ZXJmYWNlKj4ocG9pbnRlciktPlJlbW92ZVRyYWNrKAotICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxBdWRpb1RyYWNrSW50ZXJmYWNlKj4oal9hdWRpb190cmFja19w
b2ludGVyKSk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgTWVkaWFTdHJlYW1fbmF0aXZlUmVtb3ZlVmlk
ZW9UcmFjaykoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgcG9pbnRlciwgamxvbmcg
al92aWRlb190cmFja19wb2ludGVyKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PE1lZGlh
U3RyZWFtSW50ZXJmYWNlKj4ocG9pbnRlciktPlJlbW92ZVRyYWNrKAotICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxWaWRlb1RyYWNrSW50ZXJmYWNlKj4oal92aWRlb190cmFja19wb2ludGVyKSk7Ci19
Ci0KLUpPVyhqc3RyaW5nLCBNZWRpYVN0cmVhbV9uYXRpdmVMYWJlbCkoSk5JRW52KiBqbmksIGpj
bGFzcywgamxvbmcgal9wKSB7Ci0gIHJldHVybiBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZygKLSAg
ICAgIGpuaSwgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+KGpfcCktPmxh
YmVsKCkpOwotfQotCi1KT1codm9pZCwgTWVkaWFTdHJlYW1fZnJlZSkoSk5JRW52KiwgamNsYXNz
LCBqbG9uZyBqX3ApIHsKLSAgQ0hFQ0tfUkVMRUFTRShyZWludGVycHJldF9jYXN0PE1lZGlhU3Ry
ZWFtSW50ZXJmYWNlKj4oal9wKSk7Ci19Ci0KLUpPVyhqbG9uZywgUGVlckNvbm5lY3Rpb25GYWN0
b3J5X25hdGl2ZUNyZWF0ZU9ic2VydmVyKSgKLSAgICBKTklFbnYgKiBqbmksIGpjbGFzcywgam9i
amVjdCBqX29ic2VydmVyKSB7Ci0gIHJldHVybiAoamxvbmcpbmV3IFBDT0phdmEoam5pLCBqX29i
c2VydmVyKTsKLX0KLQotSk9XKGpib29sZWFuLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfaW5pdGlh
bGl6ZUFuZHJvaWRHbG9iYWxzKQotKEpOSUVudiogam5pLAotIGpjbGFzcywKLSBqb2JqZWN0IGNv
bnRleHQsCi0gamJvb2xlYW4gaW5pdGlhbGl6ZV9hdWRpbywKLSBqYm9vbGVhbiBpbml0aWFsaXpl
X3ZpZGVvLAotIGpib29sZWFuIHZpZGVvX2h3X2FjY2VsZXJhdGlvbikgewotICBib29sIGZhaWx1
cmUgPSBmYWxzZTsKLSAgdmlkZW9faHdfYWNjZWxlcmF0aW9uX2VuYWJsZWQgPSB2aWRlb19od19h
Y2NlbGVyYXRpb247Ci0gIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6U2V0QW5kcm9pZENvbnRleHQo
am5pLCBjb250ZXh0KTsKLSAgaWYgKCFmYWN0b3J5X3N0YXRpY19pbml0aWFsaXplZCkgewotICAg
IFJUQ19EQ0hFQ0soal9hcHBsaWNhdGlvbl9jb250ZXh0ID09IG51bGxwdHIpOwotICAgIGpfYXBw
bGljYXRpb25fY29udGV4dCA9IE5ld0dsb2JhbFJlZihqbmksIGNvbnRleHQpOwotCi0gICAgaWYg
KGluaXRpYWxpemVfYXVkaW8pCi0gICAgICBmYWlsdXJlIHw9IHdlYnJ0Yzo6Vm9pY2VFbmdpbmU6
OlNldEFuZHJvaWRPYmplY3RzKEdldEpWTSgpLCBjb250ZXh0KTsKLSAgICBmYWN0b3J5X3N0YXRp
Y19pbml0aWFsaXplZCA9IHRydWU7Ci0gIH0KLSAgcmV0dXJuICFmYWlsdXJlOwotfQotCi1KT1co
dm9pZCwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X2luaXRpYWxpemVGaWVsZFRyaWFscykoCi0gICAg
Sk5JRW52KiBqbmksIGpjbGFzcywganN0cmluZyBqX3RyaWFsc19pbml0X3N0cmluZykgewotICBm
aWVsZF90cmlhbHNfaW5pdF9zdHJpbmcgPSBOVUxMOwotICBpZiAoal90cmlhbHNfaW5pdF9zdHJp
bmcgIT0gTlVMTCkgewotICAgIGNvbnN0IGNoYXIqIGluaXRfc3RyaW5nID0KLSAgICAgICAgam5p
LT5HZXRTdHJpbmdVVEZDaGFycyhqX3RyaWFsc19pbml0X3N0cmluZywgTlVMTCk7Ci0gICAgaW50
IGluaXRfc3RyaW5nX2xlbmd0aCA9IGpuaS0+R2V0U3RyaW5nVVRGTGVuZ3RoKGpfdHJpYWxzX2lu
aXRfc3RyaW5nKTsKLSAgICBmaWVsZF90cmlhbHNfaW5pdF9zdHJpbmcgPSBuZXcgY2hhcltpbml0
X3N0cmluZ19sZW5ndGggKyAxXTsKLSAgICBydGM6OnN0cmNweW4oZmllbGRfdHJpYWxzX2luaXRf
c3RyaW5nLCBpbml0X3N0cmluZ19sZW5ndGggKyAxLCBpbml0X3N0cmluZyk7Ci0gICAgam5pLT5S
ZWxlYXNlU3RyaW5nVVRGQ2hhcnMoal90cmlhbHNfaW5pdF9zdHJpbmcsIGluaXRfc3RyaW5nKTsK
LSAgICBMT0coTFNfSU5GTykgPDwgImluaXRpYWxpemVGaWVsZFRyaWFsczogIiA8PCBmaWVsZF90
cmlhbHNfaW5pdF9zdHJpbmc7Ci0gIH0KLSAgd2VicnRjOjpmaWVsZF90cmlhbDo6SW5pdEZpZWxk
VHJpYWxzRnJvbVN0cmluZyhmaWVsZF90cmlhbHNfaW5pdF9zdHJpbmcpOwotfQotCi1KT1codm9p
ZCwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X2luaXRpYWxpemVJbnRlcm5hbFRyYWNlcikoSk5JRW52
KiBqbmksIGpjbGFzcykgewotICBydGM6OnRyYWNpbmc6OlNldHVwSW50ZXJuYWxUcmFjZXIoKTsK
LX0KLQotSk9XKGpib29sZWFuLCBQZWVyQ29ubmVjdGlvbkZhY3Rvcnlfc3RhcnRJbnRlcm5hbFRy
YWNpbmdDYXB0dXJlKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqc3RyaW5nIGpfZXZlbnRf
dHJhY2luZ19maWxlbmFtZSkgewotICBpZiAoIWpfZXZlbnRfdHJhY2luZ19maWxlbmFtZSkKLSAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgY29uc3QgY2hhciogaW5pdF9zdHJpbmcgPQotICAgICAgam5p
LT5HZXRTdHJpbmdVVEZDaGFycyhqX2V2ZW50X3RyYWNpbmdfZmlsZW5hbWUsIE5VTEwpOwotICBM
T0coTFNfSU5GTykgPDwgIlN0YXJ0aW5nIGludGVybmFsIHRyYWNpbmcgdG86ICIgPDwgaW5pdF9z
dHJpbmc7Ci0gIGJvb2wgcmV0ID0gcnRjOjp0cmFjaW5nOjpTdGFydEludGVybmFsQ2FwdHVyZShp
bml0X3N0cmluZyk7Ci0gIGpuaS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGpfZXZlbnRfdHJhY2lu
Z19maWxlbmFtZSwgaW5pdF9zdHJpbmcpOwotICByZXR1cm4gcmV0OwotfQotCi1KT1codm9pZCwg
UGVlckNvbm5lY3Rpb25GYWN0b3J5X3N0b3BJbnRlcm5hbFRyYWNpbmdDYXB0dXJlKSgKLSAgICBK
TklFbnYqIGpuaSwgamNsYXNzKSB7Ci0gIHJ0Yzo6dHJhY2luZzo6U3RvcEludGVybmFsQ2FwdHVy
ZSgpOwotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X3NodXRkb3duSW50ZXJu
YWxUcmFjZXIpKEpOSUVudiogam5pLCBqY2xhc3MpIHsKLSAgcnRjOjp0cmFjaW5nOjpTaHV0ZG93
bkludGVybmFsVHJhY2VyKCk7Ci19Ci0KLS8vIEhlbHBlciBzdHJ1Y3QgZm9yIHdvcmtpbmcgYXJv
dW5kIHRoZSBmYWN0IHRoYXQgQ3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkKLS8vIGNvbWVz
IGluIHR3byBmbGF2b3JzOiBlaXRoZXIgZW50aXJlbHkgYXV0b21hZ2ljYWwgKGNvbnN0cnVjdGlu
ZyBpdHMgb3duCi0vLyB0aHJlYWRzIGFuZCBkZWxldGluZyB0aGVtIG9uIHRlYXJkb3duLCBidXQg
bm8gZXh0ZXJuYWwgY29kZWMgZmFjdG9yeSBzdXBwb3J0KQotLy8gb3IgZW50aXJlbHkgbWFudWFs
IChyZXF1aXJlcyBjYWxsZXIgdG8gZGVsZXRlIHRocmVhZHMgYWZ0ZXIgZmFjdG9yeQotLy8gdGVh
cmRvd24pLiAgVGhpcyBzdHJ1Y3QgdGFrZXMgb3duZXJzaGlwIG9mIGl0cyBjdG9yJ3MgYXJndW1l
bnRzIHRvIHByZXNlbnQgYQotLy8gc2luZ2xlIHRoaW5nIGZvciBKYXZhIHRvIGhvbGQgYW5kIGV2
ZW50dWFsbHkgZnJlZS4KLWNsYXNzIE93bmVkRmFjdG9yeUFuZFRocmVhZHMgewotIHB1YmxpYzoK
LSAgT3duZWRGYWN0b3J5QW5kVGhyZWFkcyhzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPiBuZXR3b3Jr
X3RocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFk
PiB3b3JrZXJfdGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxUaHJlYWQ+IHNpZ25hbGluZ190aHJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
UnRjVmlkZW9FbmNvZGVyRmFjdG9yeSogZW5jb2Rlcl9mYWN0b3J5LAotICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlJ0Y1ZpZGVvRGVjb2RlckZhY3RvcnkqIGRlY29kZXJfZmFjdG9yeSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSogbmV0d29y
a19tb25pdG9yX2ZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgUGVlckNvbm5lY3Rp
b25GYWN0b3J5SW50ZXJmYWNlKiBmYWN0b3J5KQotICAgICAgOiBuZXR3b3JrX3RocmVhZF8oc3Rk
Ojptb3ZlKG5ldHdvcmtfdGhyZWFkKSksCi0gICAgICAgIHdvcmtlcl90aHJlYWRfKHN0ZDo6bW92
ZSh3b3JrZXJfdGhyZWFkKSksCi0gICAgICAgIHNpZ25hbGluZ190aHJlYWRfKHN0ZDo6bW92ZShz
aWduYWxpbmdfdGhyZWFkKSksCi0gICAgICAgIGVuY29kZXJfZmFjdG9yeV8oZW5jb2Rlcl9mYWN0
b3J5KSwKLSAgICAgICAgZGVjb2Rlcl9mYWN0b3J5XyhkZWNvZGVyX2ZhY3RvcnkpLAotICAgICAg
ICBuZXR3b3JrX21vbml0b3JfZmFjdG9yeV8obmV0d29ya19tb25pdG9yX2ZhY3RvcnkpLAotICAg
ICAgICBmYWN0b3J5XyhmYWN0b3J5KSB7fQotCi0gIH5Pd25lZEZhY3RvcnlBbmRUaHJlYWRzKCkg
ewotICAgIENIRUNLX1JFTEVBU0UoZmFjdG9yeV8pOwotICAgIGlmIChuZXR3b3JrX21vbml0b3Jf
ZmFjdG9yeV8gIT0gbnVsbHB0cikgewotICAgICAgcnRjOjpOZXR3b3JrTW9uaXRvckZhY3Rvcnk6
OlJlbGVhc2VGYWN0b3J5KG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5Xyk7Ci0gICAgfQotICB9Ci0K
LSAgUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlKiBmYWN0b3J5KCkgeyByZXR1cm4gZmFj
dG9yeV87IH0KLSAgVGhyZWFkKiBzaWduYWxpbmdfdGhyZWFkKCkgeyByZXR1cm4gc2lnbmFsaW5n
X3RocmVhZF8uZ2V0KCk7IH0KLSAgVGhyZWFkKiB3b3JrZXJfdGhyZWFkKCkgeyByZXR1cm4gd29y
a2VyX3RocmVhZF8uZ2V0KCk7IH0KLSAgV2ViUnRjVmlkZW9FbmNvZGVyRmFjdG9yeSogZW5jb2Rl
cl9mYWN0b3J5KCkgeyByZXR1cm4gZW5jb2Rlcl9mYWN0b3J5XzsgfQotICBXZWJSdGNWaWRlb0Rl
Y29kZXJGYWN0b3J5KiBkZWNvZGVyX2ZhY3RvcnkoKSB7IHJldHVybiBkZWNvZGVyX2ZhY3Rvcnlf
OyB9Ci0gIHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5KiBuZXR3b3JrX21vbml0b3JfZmFjdG9y
eSgpIHsKLSAgICByZXR1cm4gbmV0d29ya19tb25pdG9yX2ZhY3RvcnlfOwotICB9Ci0gIHZvaWQg
Y2xlYXJfbmV0d29ya19tb25pdG9yX2ZhY3RvcnkoKSB7IG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5
XyA9IG51bGxwdHI7IH0KLSAgdm9pZCBJbnZva2VKYXZhQ2FsbGJhY2tzT25GYWN0b3J5VGhyZWFk
cygpOwotCi0gcHJpdmF0ZToKLSAgdm9pZCBKYXZhQ2FsbGJhY2tPbkZhY3RvcnlUaHJlYWRzKCk7
Ci0KLSAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFRocmVhZD4gbmV0d29ya190aHJlYWRfOwotICBj
b25zdCBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPiB3b3JrZXJfdGhyZWFkXzsKLSAgY29uc3Qgc3Rk
Ojp1bmlxdWVfcHRyPFRocmVhZD4gc2lnbmFsaW5nX3RocmVhZF87Ci0gIFdlYlJ0Y1ZpZGVvRW5j
b2RlckZhY3RvcnkqIGVuY29kZXJfZmFjdG9yeV87Ci0gIFdlYlJ0Y1ZpZGVvRGVjb2RlckZhY3Rv
cnkqIGRlY29kZXJfZmFjdG9yeV87Ci0gIHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5KiBuZXR3
b3JrX21vbml0b3JfZmFjdG9yeV87Ci0gIFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZSog
ZmFjdG9yeV87ICAvLyBDb25zdCBhZnRlciBjdG9yIGV4Y2VwdCBkdG9yLgotfTsKLQotdm9pZCBP
d25lZEZhY3RvcnlBbmRUaHJlYWRzOjpKYXZhQ2FsbGJhY2tPbkZhY3RvcnlUaHJlYWRzKCkgewot
ICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRM
b2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBqY2xhc3Mgal9mYWN0b3J5X2Ns
YXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5Iik7
Ci0gIGptZXRob2RJRCBtID0gbnVsbHB0cjsKLSAgaWYgKG5ldHdvcmtfdGhyZWFkXy0+SXNDdXJy
ZW50KCkpIHsKLSAgICBMT0coTFNfSU5GTykgPDwgIk5ldHdvcmsgdGhyZWFkIEphdmFDYWxsYmFj
ayI7Ci0gICAgbSA9IEdldFN0YXRpY01ldGhvZElEKGpuaSwgal9mYWN0b3J5X2NsYXNzLCAib25O
ZXR3b3JrVGhyZWFkUmVhZHkiLCAiKClWIik7Ci0gIH0KLSAgaWYgKHdvcmtlcl90aHJlYWRfLT5J
c0N1cnJlbnQoKSkgewotICAgIExPRyhMU19JTkZPKSA8PCAiV29ya2VyIHRocmVhZCBKYXZhQ2Fs
bGJhY2siOwotICAgIG0gPSBHZXRTdGF0aWNNZXRob2RJRChqbmksIGpfZmFjdG9yeV9jbGFzcywg
Im9uV29ya2VyVGhyZWFkUmVhZHkiLCAiKClWIik7Ci0gIH0KLSAgaWYgKHNpZ25hbGluZ190aHJl
YWRfLT5Jc0N1cnJlbnQoKSkgewotICAgIExPRyhMU19JTkZPKSA8PCAiU2lnbmFsaW5nIHRocmVh
ZCBKYXZhQ2FsbGJhY2siOwotICAgIG0gPSBHZXRTdGF0aWNNZXRob2RJRCgKLSAgICAgICAgam5p
LCBqX2ZhY3RvcnlfY2xhc3MsICJvblNpZ25hbGluZ1RocmVhZFJlYWR5IiwgIigpViIpOwotICB9
Ci0gIGlmIChtICE9IG51bGxwdHIpIHsKLSAgICBqbmktPkNhbGxTdGF0aWNWb2lkTWV0aG9kKGpf
ZmFjdG9yeV9jbGFzcywgbSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1
cmluZyBKYXZhQ2FsbGJhY2s6OkNhbGxTdGF0aWNWb2lkTWV0aG9kIjsKLSAgfQotfQotCi12b2lk
IE93bmVkRmFjdG9yeUFuZFRocmVhZHM6Okludm9rZUphdmFDYWxsYmFja3NPbkZhY3RvcnlUaHJl
YWRzKCkgewotICBMT0coTFNfSU5GTykgPDwgIkludm9rZUphdmFDYWxsYmFja3NPbkZhY3RvcnlU
aHJlYWRzLiI7Ci0gIG5ldHdvcmtfdGhyZWFkXy0+SW52b2tlPHZvaWQ+KFJUQ19GUk9NX0hFUkUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aGlzXSB7IEphdmFDYWxsYmFja09u
RmFjdG9yeVRocmVhZHMoKTsgfSk7Ci0gIHdvcmtlcl90aHJlYWRfLT5JbnZva2U8dm9pZD4oUlRD
X0ZST01fSEVSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpc10geyBKYXZh
Q2FsbGJhY2tPbkZhY3RvcnlUaHJlYWRzKCk7IH0pOwotICBzaWduYWxpbmdfdGhyZWFkXy0+SW52
b2tlPHZvaWQ+KFJUQ19GUk9NX0hFUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgW3RoaXNdIHsgSmF2YUNhbGxiYWNrT25GYWN0b3J5VGhyZWFkcygpOyB9KTsKLX0KLQotUGVl
ckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlOjpPcHRpb25zIFBhcnNlT3B0aW9uc0Zyb21KYXZh
KEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpvYmplY3Qgb3B0aW9ucykgewotICBqY2xhc3Mgb3B0aW9uc19j
bGFzcyA9IGpuaS0+R2V0T2JqZWN0Q2xhc3Mob3B0aW9ucyk7Ci0gIGpmaWVsZElEIG5ldHdvcmtf
aWdub3JlX21hc2tfZmllbGQgPQotICAgICAgam5pLT5HZXRGaWVsZElEKG9wdGlvbnNfY2xhc3Ms
ICJuZXR3b3JrSWdub3JlTWFzayIsICJJIik7Ci0gIGludCBuZXR3b3JrX2lnbm9yZV9tYXNrID0K
LSAgICAgIGpuaS0+R2V0SW50RmllbGQob3B0aW9ucywgbmV0d29ya19pZ25vcmVfbWFza19maWVs
ZCk7Ci0KLSAgamZpZWxkSUQgZGlzYWJsZV9lbmNyeXB0aW9uX2ZpZWxkID0KLSAgICAgIGpuaS0+
R2V0RmllbGRJRChvcHRpb25zX2NsYXNzLCAiZGlzYWJsZUVuY3J5cHRpb24iLCAiWiIpOwotICBi
b29sIGRpc2FibGVfZW5jcnlwdGlvbiA9Ci0gICAgICBqbmktPkdldEJvb2xlYW5GaWVsZChvcHRp
b25zLCBkaXNhYmxlX2VuY3J5cHRpb25fZmllbGQpOwotCi0gIGpmaWVsZElEIGRpc2FibGVfbmV0
d29ya19tb25pdG9yX2ZpZWxkID0KLSAgICAgIGpuaS0+R2V0RmllbGRJRChvcHRpb25zX2NsYXNz
LCAiZGlzYWJsZU5ldHdvcmtNb25pdG9yIiwgIloiKTsKLSAgYm9vbCBkaXNhYmxlX25ldHdvcmtf
bW9uaXRvciA9Ci0gICAgICBqbmktPkdldEJvb2xlYW5GaWVsZChvcHRpb25zLCBkaXNhYmxlX25l
dHdvcmtfbW9uaXRvcl9maWVsZCk7Ci0KLSAgUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNl
OjpPcHRpb25zIG5hdGl2ZV9vcHRpb25zOwotCi0gIC8vIFRoaXMgZG9lc24ndCBuZWNlc3Nhcmls
eSBtYXRjaCB0aGUgYysrIHZlcnNpb24gb2YgdGhpcyBzdHJ1Y3Q7IGZlZWwgZnJlZQotICAvLyB0
byBhZGQgbW9yZSBwYXJhbWV0ZXJzIGFzIG5lY2Vzc2FyeS4KLSAgbmF0aXZlX29wdGlvbnMubmV0
d29ya19pZ25vcmVfbWFzayA9IG5ldHdvcmtfaWdub3JlX21hc2s7Ci0gIG5hdGl2ZV9vcHRpb25z
LmRpc2FibGVfZW5jcnlwdGlvbiA9IGRpc2FibGVfZW5jcnlwdGlvbjsKLSAgbmF0aXZlX29wdGlv
bnMuZGlzYWJsZV9uZXR3b3JrX21vbml0b3IgPSBkaXNhYmxlX25ldHdvcmtfbW9uaXRvcjsKLSAg
cmV0dXJuIG5hdGl2ZV9vcHRpb25zOwotfQotCi1KT1coamxvbmcsIFBlZXJDb25uZWN0aW9uRmFj
dG9yeV9uYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkpKAotICAgIEpOSUVudiogam5p
LCBqY2xhc3MsIGpvYmplY3Qgam9wdGlvbnMpIHsKLSAgLy8gdGFsay8gYXNzdW1lcyBwcmV0dHkg
d2lkZWx5IHRoYXQgdGhlIGN1cnJlbnQgVGhyZWFkIGlzIFRocmVhZE1hbmFnZXInZCwgYnV0Ci0g
IC8vIFRocmVhZE1hbmFnZXIgb25seSBXcmFwQ3VycmVudFRocmVhZCgpcyB0aGUgdGhyZWFkIHdo
ZXJlIGl0IGlzIGZpcnN0Ci0gIC8vIGNyZWF0ZWQuICBTaW5jZSB0aGUgc2VtYW50aWNzIGFyb3Vu
ZCB3aGVuIGF1dG8td3JhcHBpbmcgaGFwcGVucyBpbgotICAvLyB3ZWJydGMvYmFzZS8gYXJlIGNv
bnZvbHV0ZWQsIHdlIHNpbXBseSB3cmFwIGhlcmUgdG8gYXZvaWQgaGF2aW5nIHRvIHRoaW5rCi0g
IC8vIGFib3V0IHJhbWlmaWNhdGlvbnMgb2YgYXV0by13cmFwcGluZyB0aGVyZS4KLSAgcnRjOjpU
aHJlYWRNYW5hZ2VyOjpJbnN0YW5jZSgpLT5XcmFwQ3VycmVudFRocmVhZCgpOwotICB3ZWJydGM6
OlRyYWNlOjpDcmVhdGVUcmFjZSgpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+IG5ldHdv
cmtfdGhyZWFkID0KLSAgICAgIHJ0Yzo6VGhyZWFkOjpDcmVhdGVXaXRoU29ja2V0U2VydmVyKCk7
Ci0gIG5ldHdvcmtfdGhyZWFkLT5TZXROYW1lKCJuZXR3b3JrX3RocmVhZCIsIG51bGxwdHIpOwot
ICBSVENfQ0hFQ0sobmV0d29ya190aHJlYWQtPlN0YXJ0KCkpIDw8ICJGYWlsZWQgdG8gc3RhcnQg
dGhyZWFkIjsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPiB3b3JrZXJfdGhyZWFkID0gcnRj
OjpUaHJlYWQ6OkNyZWF0ZSgpOwotICB3b3JrZXJfdGhyZWFkLT5TZXROYW1lKCJ3b3JrZXJfdGhy
ZWFkIiwgbnVsbHB0cik7Ci0gIFJUQ19DSEVDSyh3b3JrZXJfdGhyZWFkLT5TdGFydCgpKSA8PCAi
RmFpbGVkIHRvIHN0YXJ0IHRocmVhZCI7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZD4gc2ln
bmFsaW5nX3RocmVhZCA9IHJ0Yzo6VGhyZWFkOjpDcmVhdGUoKTsKLSAgc2lnbmFsaW5nX3RocmVh
ZC0+U2V0TmFtZSgic2lnbmFsaW5nX3RocmVhZCIsIE5VTEwpOwotICBSVENfQ0hFQ0soc2lnbmFs
aW5nX3RocmVhZC0+U3RhcnQoKSkgPDwgIkZhaWxlZCB0byBzdGFydCB0aHJlYWQiOwotCi0gIFdl
YlJ0Y1ZpZGVvRW5jb2RlckZhY3RvcnkqIGVuY29kZXJfZmFjdG9yeSA9IG51bGxwdHI7Ci0gIFdl
YlJ0Y1ZpZGVvRGVjb2RlckZhY3RvcnkqIGRlY29kZXJfZmFjdG9yeSA9IG51bGxwdHI7Ci0gIHJ0
Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5KiBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSA9IG51bGxw
dHI7Ci0KLSAgUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlOjpPcHRpb25zIG9wdGlvbnM7
Ci0gIGJvb2wgaGFzX29wdGlvbnMgPSBqb3B0aW9ucyAhPSBOVUxMOwotICBpZiAoaGFzX29wdGlv
bnMpIHsKLSAgICBvcHRpb25zID0gUGFyc2VPcHRpb25zRnJvbUphdmEoam5pLCBqb3B0aW9ucyk7
Ci0gIH0KLQotICBpZiAodmlkZW9faHdfYWNjZWxlcmF0aW9uX2VuYWJsZWQpIHsKLSAgICBlbmNv
ZGVyX2ZhY3RvcnkgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3RvcnkoKTsKLSAgICBk
ZWNvZGVyX2ZhY3RvcnkgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkoKTsKLSAg
fQotICAvLyBEbyBub3QgY3JlYXRlIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5IG9ubHkgaWYgdGhl
IG9wdGlvbnMgYXJlCi0gIC8vIHByb3ZpZGVkIGFuZCBkaXNhYmxlX25ldHdvcmtfbW9uaXRvciB0
aGVyZWluIGlzIHNldCB0byB0cnVlLgotICBpZiAoIShoYXNfb3B0aW9ucyAmJiBvcHRpb25zLmRp
c2FibGVfbmV0d29ya19tb25pdG9yKSkgewotICAgIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5ID0g
bmV3IEFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKTsKLSAgICBydGM6Ok5ldHdvcmtNb25p
dG9yRmFjdG9yeTo6U2V0RmFjdG9yeShuZXR3b3JrX21vbml0b3JfZmFjdG9yeSk7Ci0gIH0KLQot
ICBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0
b3J5KAotICAgICAgd2VicnRjOjpDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoCi0gICAgICAg
ICAgbmV0d29ya190aHJlYWQuZ2V0KCksIHdvcmtlcl90aHJlYWQuZ2V0KCksIHNpZ25hbGluZ190
aHJlYWQuZ2V0KCksCi0gICAgICAgICAgbnVsbHB0ciwgZW5jb2Rlcl9mYWN0b3J5LCBkZWNvZGVy
X2ZhY3RvcnkpKTsKLSAgUlRDX0NIRUNLKGZhY3RvcnkpIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHRo
ZSBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeTsgIgotICAgICAgICAgICAgICAgICAgICAgPDwgIldl
YlJUQy9saWJqaW5nbGUgaW5pdCBsaWtlbHkgZmFpbGVkIG9uIHRoaXMgZGV2aWNlIjsKLSAgLy8g
VE9ETyhob25naGFpeik6IE1heWJlIHB1dCB0aGUgb3B0aW9ucyBhcyB0aGUgYXJndW1lbnQgb2YK
LSAgLy8gQ3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5LgotICBpZiAoaGFzX29wdGlvbnMpIHsK
LSAgICBmYWN0b3J5LT5TZXRPcHRpb25zKG9wdGlvbnMpOwotICB9Ci0gIE93bmVkRmFjdG9yeUFu
ZFRocmVhZHMqIG93bmVkX2ZhY3RvcnkgPSBuZXcgT3duZWRGYWN0b3J5QW5kVGhyZWFkcygKLSAg
ICAgIHN0ZDo6bW92ZShuZXR3b3JrX3RocmVhZCksIHN0ZDo6bW92ZSh3b3JrZXJfdGhyZWFkKSwK
LSAgICAgIHN0ZDo6bW92ZShzaWduYWxpbmdfdGhyZWFkKSwgZW5jb2Rlcl9mYWN0b3J5LCBkZWNv
ZGVyX2ZhY3RvcnksCi0gICAgICBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSwgZmFjdG9yeS5yZWxl
YXNlKCkpOwotICBvd25lZF9mYWN0b3J5LT5JbnZva2VKYXZhQ2FsbGJhY2tzT25GYWN0b3J5VGhy
ZWFkcygpOwotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcihvd25lZF9mYWN0b3J5KTsKLX0KLQot
Sk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVGcmVlRmFjdG9yeSkoSk5JRW52
KiwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8T3duZWRG
YWN0b3J5QW5kVGhyZWFkcyo+KGpfcCk7Ci0gIGlmIChmaWVsZF90cmlhbHNfaW5pdF9zdHJpbmcp
IHsKLSAgICB3ZWJydGM6OmZpZWxkX3RyaWFsOjpJbml0RmllbGRUcmlhbHNGcm9tU3RyaW5nKE5V
TEwpOwotICAgIGRlbGV0ZSBmaWVsZF90cmlhbHNfaW5pdF9zdHJpbmc7Ci0gICAgZmllbGRfdHJp
YWxzX2luaXRfc3RyaW5nID0gTlVMTDsKLSAgfQotICB3ZWJydGM6OlRyYWNlOjpSZXR1cm5UcmFj
ZSgpOwotfQotCi1zdGF0aWMgUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlKiBmYWN0b3J5
RnJvbUphdmEoamxvbmcgal9wKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PE93bmVkRmFj
dG9yeUFuZFRocmVhZHMqPihqX3ApLT5mYWN0b3J5KCk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29u
bmVjdGlvbkZhY3RvcnlfbmF0aXZlVGhyZWFkc0NhbGxiYWNrcykoCi0gICAgSk5JRW52KiwgamNs
YXNzLCBqbG9uZyBqX3ApIHsKLSAgT3duZWRGYWN0b3J5QW5kVGhyZWFkcyAqZmFjdG9yeSA9Ci0g
ICAgICByZWludGVycHJldF9jYXN0PE93bmVkRmFjdG9yeUFuZFRocmVhZHMqPihqX3ApOwotICBm
YWN0b3J5LT5JbnZva2VKYXZhQ2FsbGJhY2tzT25GYWN0b3J5VGhyZWFkcygpOwotfQotCi1KT1co
amxvbmcsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVDcmVhdGVMb2NhbE1lZGlhU3RyZWFt
KSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9yeSwganN0cmlu
ZyBsYWJlbCkgewotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50
ZXJmYWNlPiBmYWN0b3J5KAotICAgICAgZmFjdG9yeUZyb21KYXZhKG5hdGl2ZV9mYWN0b3J5KSk7
Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0cmVhbUludGVyZmFjZT4gc3RyZWFtKAotICAg
ICAgZmFjdG9yeS0+Q3JlYXRlTG9jYWxNZWRpYVN0cmVhbShKYXZhVG9TdGRTdHJpbmcoam5pLCBs
YWJlbCkpKTsKLSAgcmV0dXJuIChqbG9uZylzdHJlYW0ucmVsZWFzZSgpOwotfQotCi1KT1coamxv
bmcsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVDcmVhdGVWaWRlb1NvdXJjZSkKLShKTklF
bnYqIGpuaSwgamNsYXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9yeSwgam9iamVjdCBqX2VnbF9jb250
ZXh0LAotICAgIGpib29sZWFuIGlzX3NjcmVlbmNhc3QpIHsKLSAgT3duZWRGYWN0b3J5QW5kVGhy
ZWFkcyogZmFjdG9yeSA9Ci0gICAgICByZWludGVycHJldF9jYXN0PE93bmVkRmFjdG9yeUFuZFRo
cmVhZHMqPihuYXRpdmVfZmFjdG9yeSk7Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U+IHNvdXJjZSgKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50
ZWRPYmplY3Q8d2VicnRjOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZT4oCi0gICAgICAgICAgZmFj
dG9yeS0+c2lnbmFsaW5nX3RocmVhZCgpLCBqbmksIGpfZWdsX2NvbnRleHQsIGlzX3NjcmVlbmNh
c3QpKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZVByb3h5
PiBwcm94eV9zb3VyY2UgPQotICAgICAgd2VicnRjOjpWaWRlb1RyYWNrU291cmNlUHJveHk6OkNy
ZWF0ZShmYWN0b3J5LT5zaWduYWxpbmdfdGhyZWFkKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcnktPndvcmtlcl90aHJlYWQoKSwgc291cmNlKTsK
LQotICByZXR1cm4gKGpsb25nKXByb3h5X3NvdXJjZS5yZWxlYXNlKCk7Ci19Ci0KLUpPVyh2b2lk
LCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlSW5pdGlhbGl6ZVZpZGVvQ2FwdHVyZXIpCi0o
Sk5JRW52KiBqbmksCi0gamNsYXNzLAotIGpsb25nIG5hdGl2ZV9mYWN0b3J5LAotIGpvYmplY3Qg
al92aWRlb19jYXB0dXJlciwKLSBqbG9uZyBuYXRpdmVfc291cmNlLAotIGpvYmplY3Qgal9mcmFt
ZV9vYnNlcnZlcikgewotICBMT0coTFNfSU5GTykgPDwgIlBlZXJDb25uZWN0aW9uRmFjdG9yeV9u
YXRpdmVJbml0aWFsaXplVmlkZW9DYXB0dXJlciI7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVy
Q29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICBmYWN0b3J5RnJvbUph
dmEobmF0aXZlX2ZhY3RvcnkpKTsKLSAgYXV0byBwcm94eV9zb3VyY2UgPQotICAgICAgcmVpbnRl
cnByZXRfY2FzdDx3ZWJydGM6OlZpZGVvVHJhY2tTb3VyY2VQcm94eSo+KG5hdGl2ZV9zb3VyY2Up
OwotICBhdXRvIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpBbmRyb2lkVmlkZW9U
cmFja1NvdXJjZSo+KAotICAgICAgcHJveHlfc291cmNlLT5pbnRlcm5hbCgpKTsKLSAgcnRjOjpz
Y29wZWRfcmVmcHRyPFN1cmZhY2VUZXh0dXJlSGVscGVyPiBzdXJmYWNlX3RleHR1cmVfaGVscGVy
ID0KLSAgICAgIHNvdXJjZS0+c3VyZmFjZV90ZXh0dXJlX2hlbHBlcigpOwotICBqbmktPkNhbGxW
b2lkTWV0aG9kKAotICAgICAgal92aWRlb19jYXB0dXJlciwKLSAgICAgIEdldE1ldGhvZElEKGpu
aSwgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvVmlkZW9DYXB0dXJlciIpLCAiaW5pdGlhbGl6
ZSIsCi0gICAgICAgICAgICAgICAgICAiKExvcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVy
O0xhbmRyb2lkL2NvbnRlbnQvIgotICAgICAgICAgICAgICAgICAgIkNvbnRleHQ7TG9yZy93ZWJy
dGMvVmlkZW9DYXB0dXJlciRDYXB0dXJlck9ic2VydmVyOylWIiksCi0gICAgICBzdXJmYWNlX3Rl
eHR1cmVfaGVscGVyCi0gICAgICAgICAgPyBzdXJmYWNlX3RleHR1cmVfaGVscGVyLT5HZXRKYXZh
U3VyZmFjZVRleHR1cmVIZWxwZXIoKQotICAgICAgICAgIDogbnVsbHB0ciwKLSAgICAgIGpfYXBw
bGljYXRpb25fY29udGV4dCwgal9mcmFtZV9vYnNlcnZlcik7Ci0gIENIRUNLX0VYQ0VQVElPTihq
bmkpIDw8ICJlcnJvciBkdXJpbmcgVmlkZW9DYXB0dXJlci5pbml0aWFsaXplKCkiOwotfQotCi1K
T1coamxvbmcsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVDcmVhdGVWaWRlb1RyYWNrKSgK
LSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9yeSwganN0cmluZyBp
ZCwKLSAgICBqbG9uZyBuYXRpdmVfc291cmNlKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVy
Q29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICBmYWN0b3J5RnJvbUph
dmEobmF0aXZlX2ZhY3RvcnkpKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFZpZGVvVHJhY2tJbnRl
cmZhY2U+IHRyYWNrKGZhY3RvcnktPkNyZWF0ZVZpZGVvVHJhY2soCi0gICAgICBKYXZhVG9TdGRT
dHJpbmcoam5pLCBpZCksCi0gICAgICByZWludGVycHJldF9jYXN0PFZpZGVvVHJhY2tTb3VyY2VJ
bnRlcmZhY2UqPihuYXRpdmVfc291cmNlKSkpOwotICByZXR1cm4gKGpsb25nKXRyYWNrLnJlbGVh
c2UoKTsKLX0KLQotSk9XKGpsb25nLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlQ3JlYXRl
QXVkaW9Tb3VyY2UpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2ZV9mYWN0
b3J5LCBqb2JqZWN0IGpfY29uc3RyYWludHMpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPENvbnN0cmFp
bnRzV3JhcHBlcj4gY29uc3RyYWludHMoCi0gICAgICBuZXcgQ29uc3RyYWludHNXcmFwcGVyKGpu
aSwgal9jb25zdHJhaW50cykpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25G
YWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5KAotICAgICAgZmFjdG9yeUZyb21KYXZhKG5hdGl2ZV9m
YWN0b3J5KSk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb1NvdXJjZUludGVyZmFjZT4gc291
cmNlKAotICAgICAgZmFjdG9yeS0+Q3JlYXRlQXVkaW9Tb3VyY2UoY29uc3RyYWludHMuZ2V0KCkp
KTsKLSAgcmV0dXJuIChqbG9uZylzb3VyY2UucmVsZWFzZSgpOwotfQotCi1KT1coamxvbmcsIFBl
ZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVDcmVhdGVBdWRpb1RyYWNrKSgKLSAgICBKTklFbnYq
IGpuaSwgamNsYXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9yeSwganN0cmluZyBpZCwKLSAgICBqbG9u
ZyBuYXRpdmVfc291cmNlKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICBmYWN0b3J5RnJvbUphdmEobmF0aXZlX2Zh
Y3RvcnkpKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvVHJhY2tJbnRlcmZhY2U+IHRyYWNr
KGZhY3RvcnktPkNyZWF0ZUF1ZGlvVHJhY2soCi0gICAgICBKYXZhVG9TdGRTdHJpbmcoam5pLCBp
ZCksCi0gICAgICByZWludGVycHJldF9jYXN0PEF1ZGlvU291cmNlSW50ZXJmYWNlKj4obmF0aXZl
X3NvdXJjZSkpKTsKLSAgcmV0dXJuIChqbG9uZyl0cmFjay5yZWxlYXNlKCk7Ci19Ci0KLUpPVyhq
Ym9vbGVhbiwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZVN0YXJ0QWVjRHVtcCkoCi0gICAg
Sk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2ZhY3RvcnksIGppbnQgZmlsZSwKLSAg
ICBqaW50IGZpbGVzaXplX2xpbWl0X2J5dGVzKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVy
Q29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICBmYWN0b3J5RnJvbUph
dmEobmF0aXZlX2ZhY3RvcnkpKTsKLSAgcmV0dXJuIGZhY3RvcnktPlN0YXJ0QWVjRHVtcChmaWxl
LCBmaWxlc2l6ZV9saW1pdF9ieXRlcyk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlfbmF0aXZlU3RvcEFlY0R1bXApKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25n
IG5hdGl2ZV9mYWN0b3J5KSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICBmYWN0b3J5RnJvbUphdmEobmF0aXZlX2Zh
Y3RvcnkpKTsKLSAgZmFjdG9yeS0+U3RvcEFlY0R1bXAoKTsKLX0KLQotSk9XKHZvaWQsIFBlZXJD
b25uZWN0aW9uRmFjdG9yeV9uYXRpdmVTZXRPcHRpb25zKSgKLSAgICBKTklFbnYqIGpuaSwgamNs
YXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9yeSwgam9iamVjdCBvcHRpb25zKSB7Ci0gIHJ0Yzo6c2Nv
cGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAg
ICBmYWN0b3J5RnJvbUphdmEobmF0aXZlX2ZhY3RvcnkpKTsKLSAgUGVlckNvbm5lY3Rpb25GYWN0
b3J5SW50ZXJmYWNlOjpPcHRpb25zIG9wdGlvbnNfdG9fc2V0ID0KLSAgICAgIFBhcnNlT3B0aW9u
c0Zyb21KYXZhKGpuaSwgb3B0aW9ucyk7Ci0gIGZhY3RvcnktPlNldE9wdGlvbnMob3B0aW9uc190
b19zZXQpOwotCi0gIGlmIChvcHRpb25zX3RvX3NldC5kaXNhYmxlX25ldHdvcmtfbW9uaXRvcikg
ewotICAgIE93bmVkRmFjdG9yeUFuZFRocmVhZHMqIG93bmVyID0KLSAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxPd25lZEZhY3RvcnlBbmRUaHJlYWRzKj4obmF0aXZlX2ZhY3RvcnkpOwotICAgIGlm
IChvd25lci0+bmV0d29ya19tb25pdG9yX2ZhY3RvcnkoKSkgewotICAgICAgcnRjOjpOZXR3b3Jr
TW9uaXRvckZhY3Rvcnk6OlJlbGVhc2VGYWN0b3J5KAotICAgICAgICAgIG93bmVyLT5uZXR3b3Jr
X21vbml0b3JfZmFjdG9yeSgpKTsKLSAgICAgIG93bmVyLT5jbGVhcl9uZXR3b3JrX21vbml0b3Jf
ZmFjdG9yeSgpOwotICAgIH0KLSAgfQotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25GYWN0
b3J5X25hdGl2ZVNldFZpZGVvSHdBY2NlbGVyYXRpb25PcHRpb25zKSgKLSAgICBKTklFbnYqIGpu
aSwgamNsYXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9yeSwgam9iamVjdCBsb2NhbF9lZ2xfY29udGV4
dCwKLSAgICBqb2JqZWN0IHJlbW90ZV9lZ2xfY29udGV4dCkgewotICBPd25lZEZhY3RvcnlBbmRU
aHJlYWRzKiBvd25lZF9mYWN0b3J5ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8T3duZWRGYWN0
b3J5QW5kVGhyZWFkcyo+KG5hdGl2ZV9mYWN0b3J5KTsKLQotICBqY2xhc3Mgal9lZ2xiYXNlMTRf
Y29udGV4dF9jbGFzcyA9Ci0gICAgICBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9FZ2xCYXNl
MTQkQ29udGV4dCIpOwotCi0gIE1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0b3J5KiBlbmNvZGVy
X2ZhY3RvcnkgPQotICAgICAgc3RhdGljX2Nhc3Q8TWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3Rv
cnkqPgotICAgICAgICAgIChvd25lZF9mYWN0b3J5LT5lbmNvZGVyX2ZhY3RvcnkoKSk7Ci0gIGlm
IChlbmNvZGVyX2ZhY3RvcnkgJiYKLSAgICAgIGpuaS0+SXNJbnN0YW5jZU9mKGxvY2FsX2VnbF9j
b250ZXh0LCBqX2VnbGJhc2UxNF9jb250ZXh0X2NsYXNzKSkgewotICAgIExPRyhMU19JTkZPKSA8
PCAiU2V0IEVHTCBjb250ZXh0IGZvciBIVyBlbmNvZGluZy4iOwotICAgIGVuY29kZXJfZmFjdG9y
eS0+U2V0RUdMQ29udGV4dChqbmksIGxvY2FsX2VnbF9jb250ZXh0KTsKLSAgfQotCi0gIE1lZGlh
Q29kZWNWaWRlb0RlY29kZXJGYWN0b3J5KiBkZWNvZGVyX2ZhY3RvcnkgPQotICAgICAgc3RhdGlj
X2Nhc3Q8TWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkqPgotICAgICAgICAgIChvd25lZF9m
YWN0b3J5LT5kZWNvZGVyX2ZhY3RvcnkoKSk7Ci0gIGlmIChkZWNvZGVyX2ZhY3RvcnkpIHsKLSAg
ICBMT0coTFNfSU5GTykgPDwgIlNldCBFR0wgY29udGV4dCBmb3IgSFcgZGVjb2RpbmcuIjsKLSAg
ICBkZWNvZGVyX2ZhY3RvcnktPlNldEVHTENvbnRleHQoam5pLCByZW1vdGVfZWdsX2NvbnRleHQp
OwotICB9Ci19Ci0KLXN0YXRpYyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6SWNlVHJhbnNwb3J0
c1R5cGUKLUphdmFJY2VUcmFuc3BvcnRzVHlwZVRvTmF0aXZlVHlwZShKTklFbnYqIGpuaSwgam9i
amVjdCBqX2ljZV90cmFuc3BvcnRzX3R5cGUpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9uYW1lID0g
R2V0SmF2YUVudW1OYW1lKAotICAgICAgam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRJ
Y2VUcmFuc3BvcnRzVHlwZSIsCi0gICAgICBqX2ljZV90cmFuc3BvcnRzX3R5cGUpOwotCi0gIGlm
IChlbnVtX25hbWUgPT0gIkFMTCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNl
OjprQWxsOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIlJFTEFZIikKLSAgICByZXR1cm4gUGVlckNv
bm5lY3Rpb25JbnRlcmZhY2U6OmtSZWxheTsKLQotICBpZiAoZW51bV9uYW1lID09ICJOT0hPU1Qi
KQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a05vSG9zdDsKLQotICBpZiAo
ZW51bV9uYW1lID09ICJOT05FIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6
OmtOb25lOwotCi0gIFJUQ19DSEVDSyhmYWxzZSkgPDwgIlVuZXhwZWN0ZWQgSWNlVHJhbnNwb3J0
c1R5cGUgZW51bV9uYW1lICIgPDwgZW51bV9uYW1lOwotICByZXR1cm4gUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2U6OmtBbGw7Ci19Ci0KLXN0YXRpYyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6QnVu
ZGxlUG9saWN5Ci1KYXZhQnVuZGxlUG9saWN5VG9OYXRpdmVUeXBlKEpOSUVudiogam5pLCBqb2Jq
ZWN0IGpfYnVuZGxlX3BvbGljeSkgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPSBHZXRKYXZh
RW51bU5hbWUoCi0gICAgICBqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJEJ1bmRsZVBv
bGljeSIsCi0gICAgICBqX2J1bmRsZV9wb2xpY3kpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkJB
TEFOQ0VEIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtCdW5kbGVQb2xp
Y3lCYWxhbmNlZDsKLQotICBpZiAoZW51bV9uYW1lID09ICJNQVhCVU5ETEUiKQotICAgIHJldHVy
biBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a0J1bmRsZVBvbGljeU1heEJ1bmRsZTsKLQotICBp
ZiAoZW51bV9uYW1lID09ICJNQVhDT01QQVQiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbklu
dGVyZmFjZTo6a0J1bmRsZVBvbGljeU1heENvbXBhdDsKLQotICBSVENfQ0hFQ0soZmFsc2UpIDw8
ICJVbmV4cGVjdGVkIEJ1bmRsZVBvbGljeSBlbnVtX25hbWUgIiA8PCBlbnVtX25hbWU7Ci0gIHJl
dHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a0J1bmRsZVBvbGljeUJhbGFuY2VkOwotfQot
Ci1zdGF0aWMgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlJ0Y3BNdXhQb2xpY3kKLUphdmFSdGNw
TXV4UG9saWN5VG9OYXRpdmVUeXBlKEpOSUVudiogam5pLCBqb2JqZWN0IGpfcnRjcF9tdXhfcG9s
aWN5KSB7Ci0gIHN0ZDo6c3RyaW5nIGVudW1fbmFtZSA9IEdldEphdmFFbnVtTmFtZSgKLSAgICAg
IGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kUnRjcE11eFBvbGljeSIsCi0gICAgICBq
X3J0Y3BfbXV4X3BvbGljeSk7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTkVHT1RJQVRFIikKLSAg
ICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtSdGNwTXV4UG9saWN5TmVnb3RpYXRl
OwotCi0gIGlmIChlbnVtX25hbWUgPT0gIlJFUVVJUkUiKQotICAgIHJldHVybiBQZWVyQ29ubmVj
dGlvbkludGVyZmFjZTo6a1J0Y3BNdXhQb2xpY3lSZXF1aXJlOwotCi0gIFJUQ19DSEVDSyhmYWxz
ZSkgPDwgIlVuZXhwZWN0ZWQgUnRjcE11eFBvbGljeSBlbnVtX25hbWUgIiA8PCBlbnVtX25hbWU7
Ci0gIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a1J0Y3BNdXhQb2xpY3lOZWdvdGlh
dGU7Ci19Ci0KLXN0YXRpYyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6VGNwQ2FuZGlkYXRlUG9s
aWN5Ci1KYXZhVGNwQ2FuZGlkYXRlUG9saWN5VG9OYXRpdmVUeXBlKAotICAgIEpOSUVudiogam5p
LCBqb2JqZWN0IGpfdGNwX2NhbmRpZGF0ZV9wb2xpY3kpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9u
YW1lID0gR2V0SmF2YUVudW1OYW1lKAotICAgICAgam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVj
dGlvbiRUY3BDYW5kaWRhdGVQb2xpY3kiLAotICAgICAgal90Y3BfY2FuZGlkYXRlX3BvbGljeSk7
Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiRU5BQkxFRCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjprVGNwQ2FuZGlkYXRlUG9saWN5RW5hYmxlZDsKLQotICBpZiAoZW51bV9u
YW1lID09ICJESVNBQkxFRCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpr
VGNwQ2FuZGlkYXRlUG9saWN5RGlzYWJsZWQ7Ci0KLSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5l
eHBlY3RlZCBUY3BDYW5kaWRhdGVQb2xpY3kgZW51bV9uYW1lICIgPDwgZW51bV9uYW1lOwotICBy
ZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtUY3BDYW5kaWRhdGVQb2xpY3lFbmFibGVk
OwotfQotCi1zdGF0aWMgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkNhbmRpZGF0ZU5ldHdvcmtQ
b2xpY3kKLUphdmFDYW5kaWRhdGVOZXR3b3JrUG9saWN5VG9OYXRpdmVUeXBlKEpOSUVudiogam5p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBqX2NhbmRp
ZGF0ZV9uZXR3b3JrX3BvbGljeSkgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPQotICAgICAg
R2V0SmF2YUVudW1OYW1lKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kQ2FuZGlkYXRl
TmV0d29ya1BvbGljeSIsCi0gICAgICAgICAgICAgICAgICAgICAgal9jYW5kaWRhdGVfbmV0d29y
a19wb2xpY3kpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkFMTCIpCi0gICAgcmV0dXJuIFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlOjprQ2FuZGlkYXRlTmV0d29ya1BvbGljeUFsbDsKLQotICBpZiAo
ZW51bV9uYW1lID09ICJMT1dfQ09TVCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJm
YWNlOjprQ2FuZGlkYXRlTmV0d29ya1BvbGljeUxvd0Nvc3Q7Ci0KLSAgUlRDX0NIRUNLKGZhbHNl
KSA8PCAiVW5leHBlY3RlZCBDYW5kaWRhdGVOZXR3b3JrUG9saWN5IGVudW1fbmFtZSAiCi0gICAg
ICAgICAgICAgICAgICAgPDwgZW51bV9uYW1lOwotICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRl
cmZhY2U6OmtDYW5kaWRhdGVOZXR3b3JrUG9saWN5QWxsOwotfQotCi1zdGF0aWMgcnRjOjpLZXlU
eXBlIEphdmFLZXlUeXBlVG9OYXRpdmVUeXBlKEpOSUVudiogam5pLCBqb2JqZWN0IGpfa2V5X3R5
cGUpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9uYW1lID0gR2V0SmF2YUVudW1OYW1lKAotICAgICAg
am5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRLZXlUeXBlIiwgal9rZXlfdHlwZSk7Ci0K
LSAgaWYgKGVudW1fbmFtZSA9PSAiUlNBIikKLSAgICByZXR1cm4gcnRjOjpLVF9SU0E7Ci0gIGlm
IChlbnVtX25hbWUgPT0gIkVDRFNBIikKLSAgICByZXR1cm4gcnRjOjpLVF9FQ0RTQTsKLQotICBS
VENfQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIEtleVR5cGUgZW51bV9uYW1lICIgPDwgZW51
bV9uYW1lOwotICByZXR1cm4gcnRjOjpLVF9FQ0RTQTsKLX0KLQotc3RhdGljIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjpDb250aW51YWxHYXRoZXJpbmdQb2xpY3kKLSAgICBKYXZhQ29udGludWFs
R2F0aGVyaW5nUG9saWN5VG9OYXRpdmVUeXBlKAotICAgICAgICBKTklFbnYqIGpuaSwgam9iamVj
dCBqX2dhdGhlcmluZ19wb2xpY3kpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9uYW1lID0gR2V0SmF2
YUVudW1OYW1lKAotICAgICAgam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRDb250aW51
YWxHYXRoZXJpbmdQb2xpY3kiLAotICAgICAgal9nYXRoZXJpbmdfcG9saWN5KTsKLSAgaWYgKGVu
dW1fbmFtZSA9PSAiR0FUSEVSX09OQ0UiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZTo6R0FUSEVSX09OQ0U7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiR0FUSEVSX0NPTlRJTlVB
TExZIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkdBVEhFUl9DT05USU5V
QUxMWTsKLQotICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIENvbnRpbnVhbEdhdGhl
cmluZ1BvbGljeSBlbnVtIG5hbWUgIgotICAgICAgICAgICAgICAgICAgIDw8IGVudW1fbmFtZTsK
LSAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpHQVRIRVJfT05DRTsKLX0KLQotc3Rh
dGljIHZvaWQgSmF2YUljZVNlcnZlcnNUb0pzZXBJY2VTZXJ2ZXJzKAotICAgIEpOSUVudiogam5p
LCBqb2JqZWN0IGpfaWNlX3NlcnZlcnMsCi0gICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6Oklj
ZVNlcnZlcnMqIGljZV9zZXJ2ZXJzKSB7Ci0gIGZvciAoam9iamVjdCBqX2ljZV9zZXJ2ZXIgOiBJ
dGVyYWJsZShqbmksIGpfaWNlX3NlcnZlcnMpKSB7Ci0gICAgamNsYXNzIGpfaWNlX3NlcnZlcl9j
bGFzcyA9IEdldE9iamVjdENsYXNzKGpuaSwgal9pY2Vfc2VydmVyKTsKLSAgICBqZmllbGRJRCBq
X2ljZV9zZXJ2ZXJfdXJpX2lkID0KLSAgICAgICAgR2V0RmllbGRJRChqbmksIGpfaWNlX3NlcnZl
cl9jbGFzcywgInVyaSIsICJMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgICBqZmllbGRJRCBqX2lj
ZV9zZXJ2ZXJfdXNlcm5hbWVfaWQgPQotICAgICAgICBHZXRGaWVsZElEKGpuaSwgal9pY2Vfc2Vy
dmVyX2NsYXNzLCAidXNlcm5hbWUiLCAiTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gICAgamZpZWxk
SUQgal9pY2Vfc2VydmVyX3Bhc3N3b3JkX2lkID0KLSAgICAgICAgR2V0RmllbGRJRChqbmksIGpf
aWNlX3NlcnZlcl9jbGFzcywgInBhc3N3b3JkIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAg
IGpzdHJpbmcgdXJpID0gcmVpbnRlcnByZXRfY2FzdDxqc3RyaW5nPigKLSAgICAgICAgR2V0T2Jq
ZWN0RmllbGQoam5pLCBqX2ljZV9zZXJ2ZXIsIGpfaWNlX3NlcnZlcl91cmlfaWQpKTsKLSAgICBq
c3RyaW5nIHVzZXJuYW1lID0gcmVpbnRlcnByZXRfY2FzdDxqc3RyaW5nPigKLSAgICAgICAgR2V0
T2JqZWN0RmllbGQoam5pLCBqX2ljZV9zZXJ2ZXIsIGpfaWNlX3NlcnZlcl91c2VybmFtZV9pZCkp
OwotICAgIGpzdHJpbmcgcGFzc3dvcmQgPSByZWludGVycHJldF9jYXN0PGpzdHJpbmc+KAotICAg
ICAgICBHZXRPYmplY3RGaWVsZChqbmksIGpfaWNlX3NlcnZlciwgal9pY2Vfc2VydmVyX3Bhc3N3
b3JkX2lkKSk7Ci0gICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkljZVNlcnZlciBzZXJ2ZXI7
Ci0gICAgc2VydmVyLnVyaSA9IEphdmFUb1N0ZFN0cmluZyhqbmksIHVyaSk7Ci0gICAgc2VydmVy
LnVzZXJuYW1lID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgdXNlcm5hbWUpOwotICAgIHNlcnZlci5w
YXNzd29yZCA9IEphdmFUb1N0ZFN0cmluZyhqbmksIHBhc3N3b3JkKTsKLSAgICBpY2Vfc2VydmVy
cy0+cHVzaF9iYWNrKHNlcnZlcik7Ci0gIH0KLX0KLQotc3RhdGljIHZvaWQgSmF2YVJUQ0NvbmZp
Z3VyYXRpb25Ub0pzZXBSVENDb25maWd1cmF0aW9uKAotICAgIEpOSUVudiogam5pLAotICAgIGpv
YmplY3Qgal9ydGNfY29uZmlnLAotICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSVENDb25m
aWd1cmF0aW9uKiBydGNfY29uZmlnKSB7Ci0gIGpjbGFzcyBqX3J0Y19jb25maWdfY2xhc3MgPSBH
ZXRPYmplY3RDbGFzcyhqbmksIGpfcnRjX2NvbmZpZyk7Ci0KLSAgamZpZWxkSUQgal9pY2VfdHJh
bnNwb3J0c190eXBlX2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9ydGNfY29uZmlnX2Ns
YXNzLCAiaWNlVHJhbnNwb3J0c1R5cGUiLAotICAgICAgIkxvcmcvd2VicnRjL1BlZXJDb25uZWN0
aW9uJEljZVRyYW5zcG9ydHNUeXBlOyIpOwotICBqb2JqZWN0IGpfaWNlX3RyYW5zcG9ydHNfdHlw
ZSA9IEdldE9iamVjdEZpZWxkKAotICAgICAgam5pLCBqX3J0Y19jb25maWcsIGpfaWNlX3RyYW5z
cG9ydHNfdHlwZV9pZCk7Ci0KLSAgamZpZWxkSUQgal9idW5kbGVfcG9saWN5X2lkID0gR2V0Rmll
bGRJRCgKLSAgICAgIGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAiYnVuZGxlUG9saWN5IiwKLSAg
ICAgICJMb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRCdW5kbGVQb2xpY3k7Iik7Ci0gIGpvYmpl
Y3Qgal9idW5kbGVfcG9saWN5ID0gR2V0T2JqZWN0RmllbGQoCi0gICAgICBqbmksIGpfcnRjX2Nv
bmZpZywgal9idW5kbGVfcG9saWN5X2lkKTsKLQotICBqZmllbGRJRCBqX3J0Y3BfbXV4X3BvbGlj
eV9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZpZ19jbGFzcywgInJ0Y3BN
dXhQb2xpY3kiLAotICAgICAgIkxvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJFJ0Y3BNdXhQb2xp
Y3k7Iik7Ci0gIGpvYmplY3Qgal9ydGNwX211eF9wb2xpY3kgPSBHZXRPYmplY3RGaWVsZCgKLSAg
ICAgIGpuaSwgal9ydGNfY29uZmlnLCBqX3J0Y3BfbXV4X3BvbGljeV9pZCk7Ci0KLSAgamZpZWxk
SUQgal90Y3BfY2FuZGlkYXRlX3BvbGljeV9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpf
cnRjX2NvbmZpZ19jbGFzcywgInRjcENhbmRpZGF0ZVBvbGljeSIsCi0gICAgICAiTG9yZy93ZWJy
dGMvUGVlckNvbm5lY3Rpb24kVGNwQ2FuZGlkYXRlUG9saWN5OyIpOwotICBqb2JqZWN0IGpfdGNw
X2NhbmRpZGF0ZV9wb2xpY3kgPSBHZXRPYmplY3RGaWVsZCgKLSAgICAgIGpuaSwgal9ydGNfY29u
ZmlnLCBqX3RjcF9jYW5kaWRhdGVfcG9saWN5X2lkKTsKLQotICBqZmllbGRJRCBqX2NhbmRpZGF0
ZV9uZXR3b3JrX3BvbGljeV9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZp
Z19jbGFzcywgImNhbmRpZGF0ZU5ldHdvcmtQb2xpY3kiLAotICAgICAgIkxvcmcvd2VicnRjL1Bl
ZXJDb25uZWN0aW9uJENhbmRpZGF0ZU5ldHdvcmtQb2xpY3k7Iik7Ci0gIGpvYmplY3Qgal9jYW5k
aWRhdGVfbmV0d29ya19wb2xpY3kgPSBHZXRPYmplY3RGaWVsZCgKLSAgICAgIGpuaSwgal9ydGNf
Y29uZmlnLCBqX2NhbmRpZGF0ZV9uZXR3b3JrX3BvbGljeV9pZCk7Ci0KLSAgamZpZWxkSUQgal9p
Y2Vfc2VydmVyc19pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZpZ19jbGFz
cywgImljZVNlcnZlcnMiLCAiTGphdmEvdXRpbC9MaXN0OyIpOwotICBqb2JqZWN0IGpfaWNlX3Nl
cnZlcnMgPSBHZXRPYmplY3RGaWVsZChqbmksIGpfcnRjX2NvbmZpZywgal9pY2Vfc2VydmVyc19p
ZCk7Ci0KLSAgamZpZWxkSUQgal9hdWRpb19qaXR0ZXJfYnVmZmVyX21heF9wYWNrZXRzX2lkID0K
LSAgICAgIEdldEZpZWxkSUQoam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJhdWRpb0ppdHRlckJ1
ZmZlck1heFBhY2tldHMiLCAiSSIpOwotICBqZmllbGRJRCBqX2F1ZGlvX2ppdHRlcl9idWZmZXJf
ZmFzdF9hY2NlbGVyYXRlX2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9ydGNfY29uZmln
X2NsYXNzLCAiYXVkaW9KaXR0ZXJCdWZmZXJGYXN0QWNjZWxlcmF0ZSIsICJaIik7Ci0KLSAgamZp
ZWxkSUQgal9pY2VfY29ubmVjdGlvbl9yZWNlaXZpbmdfdGltZW91dF9pZCA9Ci0gICAgICBHZXRG
aWVsZElEKGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAiaWNlQ29ubmVjdGlvblJlY2VpdmluZ1Rp
bWVvdXQiLCAiSSIpOwotCi0gIGpmaWVsZElEIGpfaWNlX2JhY2t1cF9jYW5kaWRhdGVfcGFpcl9w
aW5nX2ludGVydmFsX2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9ydGNfY29uZmlnX2Ns
YXNzLCAiaWNlQmFja3VwQ2FuZGlkYXRlUGFpclBpbmdJbnRlcnZhbCIsICJJIik7Ci0KLSAgamZp
ZWxkSUQgal9jb250aW51YWxfZ2F0aGVyaW5nX3BvbGljeV9pZCA9Ci0gICAgICBHZXRGaWVsZElE
KGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAiY29udGludWFsR2F0aGVyaW5nUG9saWN5IiwKLSAg
ICAgICAgICAgICAgICAgIkxvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJENvbnRpbnVhbEdhdGhl
cmluZ1BvbGljeTsiKTsKLSAgam9iamVjdCBqX2NvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5ID0K
LSAgICAgIEdldE9iamVjdEZpZWxkKGpuaSwgal9ydGNfY29uZmlnLCBqX2NvbnRpbnVhbF9nYXRo
ZXJpbmdfcG9saWN5X2lkKTsKLQotICBqZmllbGRJRCBqX2ljZV9jYW5kaWRhdGVfcG9vbF9zaXpl
X2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJpY2VDYW5k
aWRhdGVQb29sU2l6ZSIsICJJIik7Ci0gIGpmaWVsZElEIGpfcHJlc3VtZV93cml0YWJsZV93aGVu
X2Z1bGx5X3JlbGF5ZWRfaWQgPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX3J0Y19jb25maWdf
Y2xhc3MsICJwcmVzdW1lV3JpdGFibGVXaGVuRnVsbHlSZWxheWVkIiwgIloiKTsKLQotICBqZmll
bGRJRCBqX3BydW5lX3R1cm5fcG9ydHNfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfcnRj
X2NvbmZpZ19jbGFzcywgInBydW5lVHVyblBvcnRzIiwgIloiKTsKLQotICBydGNfY29uZmlnLT50
eXBlID0KLSAgICAgIEphdmFJY2VUcmFuc3BvcnRzVHlwZVRvTmF0aXZlVHlwZShqbmksIGpfaWNl
X3RyYW5zcG9ydHNfdHlwZSk7Ci0gIHJ0Y19jb25maWctPmJ1bmRsZV9wb2xpY3kgPQotICAgICAg
SmF2YUJ1bmRsZVBvbGljeVRvTmF0aXZlVHlwZShqbmksIGpfYnVuZGxlX3BvbGljeSk7Ci0gIHJ0
Y19jb25maWctPnJ0Y3BfbXV4X3BvbGljeSA9Ci0gICAgICBKYXZhUnRjcE11eFBvbGljeVRvTmF0
aXZlVHlwZShqbmksIGpfcnRjcF9tdXhfcG9saWN5KTsKLSAgcnRjX2NvbmZpZy0+dGNwX2NhbmRp
ZGF0ZV9wb2xpY3kgPQotICAgICAgSmF2YVRjcENhbmRpZGF0ZVBvbGljeVRvTmF0aXZlVHlwZShq
bmksIGpfdGNwX2NhbmRpZGF0ZV9wb2xpY3kpOwotICBydGNfY29uZmlnLT5jYW5kaWRhdGVfbmV0
d29ya19wb2xpY3kgPQotICAgICAgSmF2YUNhbmRpZGF0ZU5ldHdvcmtQb2xpY3lUb05hdGl2ZVR5
cGUoam5pLCBqX2NhbmRpZGF0ZV9uZXR3b3JrX3BvbGljeSk7Ci0gIEphdmFJY2VTZXJ2ZXJzVG9K
c2VwSWNlU2VydmVycyhqbmksIGpfaWNlX3NlcnZlcnMsICZydGNfY29uZmlnLT5zZXJ2ZXJzKTsK
LSAgcnRjX2NvbmZpZy0+YXVkaW9faml0dGVyX2J1ZmZlcl9tYXhfcGFja2V0cyA9Ci0gICAgICBH
ZXRJbnRGaWVsZChqbmksIGpfcnRjX2NvbmZpZywgal9hdWRpb19qaXR0ZXJfYnVmZmVyX21heF9w
YWNrZXRzX2lkKTsKLSAgcnRjX2NvbmZpZy0+YXVkaW9faml0dGVyX2J1ZmZlcl9mYXN0X2FjY2Vs
ZXJhdGUgPSBHZXRCb29sZWFuRmllbGQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZpZywgal9hdWRp
b19qaXR0ZXJfYnVmZmVyX2Zhc3RfYWNjZWxlcmF0ZV9pZCk7Ci0gIHJ0Y19jb25maWctPmljZV9j
b25uZWN0aW9uX3JlY2VpdmluZ190aW1lb3V0ID0KLSAgICAgIEdldEludEZpZWxkKGpuaSwgal9y
dGNfY29uZmlnLCBqX2ljZV9jb25uZWN0aW9uX3JlY2VpdmluZ190aW1lb3V0X2lkKTsKLSAgcnRj
X2NvbmZpZy0+aWNlX2JhY2t1cF9jYW5kaWRhdGVfcGFpcl9waW5nX2ludGVydmFsID0gR2V0SW50
RmllbGQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZpZywgal9pY2VfYmFja3VwX2NhbmRpZGF0ZV9w
YWlyX3BpbmdfaW50ZXJ2YWxfaWQpOwotICBydGNfY29uZmlnLT5jb250aW51YWxfZ2F0aGVyaW5n
X3BvbGljeSA9Ci0gICAgICBKYXZhQ29udGludWFsR2F0aGVyaW5nUG9saWN5VG9OYXRpdmVUeXBl
KAotICAgICAgICAgIGpuaSwgal9jb250aW51YWxfZ2F0aGVyaW5nX3BvbGljeSk7Ci0gIHJ0Y19j
b25maWctPmljZV9jYW5kaWRhdGVfcG9vbF9zaXplID0KLSAgICAgIEdldEludEZpZWxkKGpuaSwg
al9ydGNfY29uZmlnLCBqX2ljZV9jYW5kaWRhdGVfcG9vbF9zaXplX2lkKTsKLSAgcnRjX2NvbmZp
Zy0+cHJ1bmVfdHVybl9wb3J0cyA9Ci0gICAgICBHZXRCb29sZWFuRmllbGQoam5pLCBqX3J0Y19j
b25maWcsIGpfcHJ1bmVfdHVybl9wb3J0c19pZCk7Ci0gIHJ0Y19jb25maWctPnByZXN1bWVfd3Jp
dGFibGVfd2hlbl9mdWxseV9yZWxheWVkID0gR2V0Qm9vbGVhbkZpZWxkKAotICAgICAgam5pLCBq
X3J0Y19jb25maWcsIGpfcHJlc3VtZV93cml0YWJsZV93aGVuX2Z1bGx5X3JlbGF5ZWRfaWQpOwot
fQotCi1KT1coamxvbmcsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVDcmVhdGVQZWVyQ29u
bmVjdGlvbikoCi0gICAgSk5JRW52ICpqbmksIGpjbGFzcywgamxvbmcgZmFjdG9yeSwgam9iamVj
dCBqX3J0Y19jb25maWcsCi0gICAgam9iamVjdCBqX2NvbnN0cmFpbnRzLCBqbG9uZyBvYnNlcnZl
cl9wKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZh
Y2U+IGYoCi0gICAgICByZWludGVycHJldF9jYXN0PFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVy
ZmFjZSo+KAotICAgICAgICAgIGZhY3RvcnlGcm9tSmF2YShmYWN0b3J5KSkpOwotCi0gIFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlOjpSVENDb25maWd1cmF0aW9uIHJ0Y19jb25maWcoCi0gICAgICBQ
ZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UlRDQ29uZmlndXJhdGlvblR5cGU6OmtBZ2dyZXNzaXZl
KTsKLSAgSmF2YVJUQ0NvbmZpZ3VyYXRpb25Ub0pzZXBSVENDb25maWd1cmF0aW9uKGpuaSwgal9y
dGNfY29uZmlnLCAmcnRjX2NvbmZpZyk7Ci0KLSAgamNsYXNzIGpfcnRjX2NvbmZpZ19jbGFzcyA9
IEdldE9iamVjdENsYXNzKGpuaSwgal9ydGNfY29uZmlnKTsKLSAgamZpZWxkSUQgal9rZXlfdHlw
ZV9pZCA9IEdldEZpZWxkSUQoam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJrZXlUeXBlIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvcmcvd2VicnRjL1BlZXJDb25u
ZWN0aW9uJEtleVR5cGU7Iik7Ci0gIGpvYmplY3Qgal9rZXlfdHlwZSA9IEdldE9iamVjdEZpZWxk
KGpuaSwgal9ydGNfY29uZmlnLCBqX2tleV90eXBlX2lkKTsKLQotICAvLyBHZW5lcmF0ZSBub24t
ZGVmYXVsdCBjZXJ0aWZpY2F0ZS4KLSAgcnRjOjpLZXlUeXBlIGtleV90eXBlID0gSmF2YUtleVR5
cGVUb05hdGl2ZVR5cGUoam5pLCBqX2tleV90eXBlKTsKLSAgaWYgKGtleV90eXBlICE9IHJ0Yzo6
S1RfREVGQVVMVCkgewotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxydGM6OlJUQ0NlcnRpZmljYXRl
PiBjZXJ0aWZpY2F0ZSA9Ci0gICAgICAgIHJ0Yzo6UlRDQ2VydGlmaWNhdGVHZW5lcmF0b3I6Okdl
bmVyYXRlQ2VydGlmaWNhdGUoCi0gICAgICAgICAgICBydGM6OktleVBhcmFtcyhrZXlfdHlwZSks
IHJ0Yzo6T3B0aW9uYWw8dWludDY0X3Q+KCkpOwotICAgIGlmICghY2VydGlmaWNhdGUpIHsKLSAg
ICAgIExPRyhMU19FUlJPUikgPDwgIkZhaWxlZCB0byBnZW5lcmF0ZSBjZXJ0aWZpY2F0ZS4gS2V5
VHlwZTogIiA8PCBrZXlfdHlwZTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBydGNfY29u
ZmlnLmNlcnRpZmljYXRlcy5wdXNoX2JhY2soY2VydGlmaWNhdGUpOwotICB9Ci0KLSAgUENPSmF2
YSogb2JzZXJ2ZXIgPSByZWludGVycHJldF9jYXN0PFBDT0phdmEqPihvYnNlcnZlcl9wKTsKLSAg
b2JzZXJ2ZXItPlNldENvbnN0cmFpbnRzKG5ldyBDb25zdHJhaW50c1dyYXBwZXIoam5pLCBqX2Nv
bnN0cmFpbnRzKSk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkludGVyZmFj
ZT4gcGMoZi0+Q3JlYXRlUGVlckNvbm5lY3Rpb24oCi0gICAgICBydGNfY29uZmlnLCBvYnNlcnZl
ci0+Y29uc3RyYWludHMoKSwgTlVMTCwgTlVMTCwgb2JzZXJ2ZXIpKTsKLSAgcmV0dXJuIChqbG9u
ZylwYy5yZWxlYXNlKCk7Ci19Ci0KLXN0YXRpYyBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5l
Y3Rpb25JbnRlcmZhY2U+IEV4dHJhY3ROYXRpdmVQQygKLSAgICBKTklFbnYqIGpuaSwgam9iamVj
dCBqX3BjKSB7Ci0gIGpmaWVsZElEIG5hdGl2ZV9wY19pZCA9IEdldEZpZWxkSUQoam5pLAotICAg
ICAgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX3BjKSwgIm5hdGl2ZVBlZXJDb25uZWN0aW9uIiwgIkoi
KTsKLSAgamxvbmcgal9wID0gR2V0TG9uZ0ZpZWxkKGpuaSwgal9wYywgbmF0aXZlX3BjX2lkKTsK
LSAgcmV0dXJuIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkludGVyZmFjZT4oCi0g
ICAgICByZWludGVycHJldF9jYXN0PFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlKj4oal9wKSk7Ci19
Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9nZXRMb2NhbERlc2NyaXB0aW9uKShKTklF
bnYqIGpuaSwgam9iamVjdCBqX3BjKSB7Ci0gIGNvbnN0IFNlc3Npb25EZXNjcmlwdGlvbkludGVy
ZmFjZSogc2RwID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5sb2NhbF9kZXNj
cmlwdGlvbigpOwotICByZXR1cm4gc2RwID8gSmF2YVNkcEZyb21OYXRpdmVTZHAoam5pLCBzZHAp
IDogTlVMTDsKLX0KLQotSk9XKGpvYmplY3QsIFBlZXJDb25uZWN0aW9uX2dldFJlbW90ZURlc2Ny
aXB0aW9uKShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjKSB7Ci0gIGNvbnN0IFNlc3Npb25EZXNj
cmlwdGlvbkludGVyZmFjZSogc2RwID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMp
LT5yZW1vdGVfZGVzY3JpcHRpb24oKTsKLSAgcmV0dXJuIHNkcCA/IEphdmFTZHBGcm9tTmF0aXZl
U2RwKGpuaSwgc2RwKSA6IE5VTEw7Ci19Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9j
cmVhdGVEYXRhQ2hhbm5lbCkoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywganN0cmlu
ZyBqX2xhYmVsLCBqb2JqZWN0IGpfaW5pdCkgewotICBEYXRhQ2hhbm5lbEluaXQgaW5pdCA9IEph
dmFEYXRhQ2hhbm5lbEluaXRUb05hdGl2ZShqbmksIGpfaW5pdCk7Ci0gIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjxEYXRhQ2hhbm5lbEludGVyZmFjZT4gY2hhbm5lbCgKLSAgICAgIEV4dHJhY3ROYXRpdmVQ
QyhqbmksIGpfcGMpLT5DcmVhdGVEYXRhQ2hhbm5lbCgKLSAgICAgICAgICBKYXZhVG9TdGRTdHJp
bmcoam5pLCBqX2xhYmVsKSwgJmluaXQpKTsKLSAgLy8gTXVzdG4ndCBwYXNzIGNoYW5uZWwuZ2V0
KCkgZGlyZWN0bHkgdGhyb3VnaCBOZXdPYmplY3QgdG8gYXZvaWQgcmVhZGluZyBpdHMKLSAgLy8g
dmFyYXJnIHBhcmFtZXRlciBhcyA2NC1iaXQgYW5kIHJlYWRpbmcgbWVtb3J5IHRoYXQgZG9lc24n
dCBiZWxvbmcgdG8gdGhlCi0gIC8vIDMyLWJpdCBwYXJhbWV0ZXIuCi0gIGpsb25nIG5hdGl2ZUNo
YW5uZWxQdHIgPSBqbG9uZ0Zyb21Qb2ludGVyKGNoYW5uZWwuZ2V0KCkpOwotICBpZiAoIW5hdGl2
ZUNoYW5uZWxQdHIpIHsKLSAgICBMT0coTFNfRVJST1IpIDw8ICJGYWlsZWQgdG8gY3JlYXRlIERh
dGFDaGFubmVsIjsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICBqY2xhc3Mgal9kYXRhX2No
YW5uZWxfY2xhc3MgPSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbCIpOwot
ICBqbWV0aG9kSUQgal9kYXRhX2NoYW5uZWxfY3RvciA9IEdldE1ldGhvZElEKAotICAgICAgam5p
LCBqX2RhdGFfY2hhbm5lbF9jbGFzcywgIjxpbml0PiIsICIoSilWIik7Ci0gIGpvYmplY3Qgal9j
aGFubmVsID0gam5pLT5OZXdPYmplY3QoCi0gICAgICBqX2RhdGFfY2hhbm5lbF9jbGFzcywgal9k
YXRhX2NoYW5uZWxfY3RvciwgbmF0aXZlQ2hhbm5lbFB0cik7Ci0gIENIRUNLX0VYQ0VQVElPTihq
bmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLSAgLy8gQ2hhbm5lbCBpcyBub3cgb3du
ZWQgYnkgSmF2YSBvYmplY3QsIGFuZCB3aWxsIGJlIGZyZWVkIGZyb20gdGhlcmUuCi0gIGludCBi
dW1wZWRfY291bnQgPSBjaGFubmVsLT5BZGRSZWYoKTsKLSAgUlRDX0NIRUNLKGJ1bXBlZF9jb3Vu
dCA9PSAyKSA8PCAiVW5leHBlY3RlZCByZWZjb3VudCI7Ci0gIHJldHVybiBqX2NoYW5uZWw7Ci19
Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbl9jcmVhdGVPZmZlcikoCi0gICAgSk5JRW52KiBq
bmksIGpvYmplY3Qgal9wYywgam9iamVjdCBqX29ic2VydmVyLCBqb2JqZWN0IGpfY29uc3RyYWlu
dHMpIHsKLSAgQ29uc3RyYWludHNXcmFwcGVyKiBjb25zdHJhaW50cyA9Ci0gICAgICBuZXcgQ29u
c3RyYWludHNXcmFwcGVyKGpuaSwgal9jb25zdHJhaW50cyk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0
cjxDcmVhdGVTZHBPYnNlcnZlcldyYXBwZXI+IG9ic2VydmVyKAotICAgICAgbmV3IHJ0Yzo6UmVm
Q291bnRlZE9iamVjdDxDcmVhdGVTZHBPYnNlcnZlcldyYXBwZXI+KAotICAgICAgICAgIGpuaSwg
al9vYnNlcnZlciwgY29uc3RyYWludHMpKTsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYykt
PkNyZWF0ZU9mZmVyKG9ic2VydmVyLCBjb25zdHJhaW50cyk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVy
Q29ubmVjdGlvbl9jcmVhdGVBbnN3ZXIpKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMs
IGpvYmplY3Qgal9vYnNlcnZlciwgam9iamVjdCBqX2NvbnN0cmFpbnRzKSB7Ci0gIENvbnN0cmFp
bnRzV3JhcHBlciogY29uc3RyYWludHMgPQotICAgICAgbmV3IENvbnN0cmFpbnRzV3JhcHBlcihq
bmksIGpfY29uc3RyYWludHMpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8Q3JlYXRlU2RwT2JzZXJ2
ZXJXcmFwcGVyPiBvYnNlcnZlcigKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8Q3Jl
YXRlU2RwT2JzZXJ2ZXJXcmFwcGVyPigKLSAgICAgICAgICBqbmksIGpfb2JzZXJ2ZXIsIGNvbnN0
cmFpbnRzKSk7Ci0gIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5DcmVhdGVBbnN3ZXIob2Jz
ZXJ2ZXIsIGNvbnN0cmFpbnRzKTsKLX0KLQotLy8gSGVscGVyIHRvIGNyZWF0ZSBhIFNlc3Npb25E
ZXNjcmlwdGlvbkludGVyZmFjZSBmcm9tIGEgU2Vzc2lvbkRlc2NyaXB0aW9uLgotc3RhdGljIFNl
c3Npb25EZXNjcmlwdGlvbkludGVyZmFjZSogSmF2YVNkcFRvTmF0aXZlU2RwKAotICAgIEpOSUVu
diogam5pLCBqb2JqZWN0IGpfc2RwKSB7Ci0gIGpmaWVsZElEIGpfdHlwZV9pZCA9IEdldEZpZWxk
SUQoCi0gICAgICBqbmksIEdldE9iamVjdENsYXNzKGpuaSwgal9zZHApLCAidHlwZSIsCi0gICAg
ICAiTG9yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uJFR5cGU7Iik7Ci0gIGpvYmplY3Qgal90
eXBlID0gR2V0T2JqZWN0RmllbGQoam5pLCBqX3NkcCwgal90eXBlX2lkKTsKLSAgam1ldGhvZElE
IGpfY2Fub25pY2FsX2Zvcm1faWQgPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwgR2V0T2JqZWN0
Q2xhc3Moam5pLCBqX3R5cGUpLCAiY2Fub25pY2FsRm9ybSIsCi0gICAgICAiKClMamF2YS9sYW5n
L1N0cmluZzsiKTsKLSAganN0cmluZyBqX3R5cGVfc3RyaW5nID0gKGpzdHJpbmcpam5pLT5DYWxs
T2JqZWN0TWV0aG9kKAotICAgICAgal90eXBlLCBqX2Nhbm9uaWNhbF9mb3JtX2lkKTsKLSAgQ0hF
Q0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsT2JqZWN0TWV0aG9kIjsKLSAg
c3RkOjpzdHJpbmcgc3RkX3R5cGUgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX3R5cGVfc3RyaW5n
KTsKLQotICBqZmllbGRJRCBqX2Rlc2NyaXB0aW9uX2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpu
aSwgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX3NkcCksICJkZXNjcmlwdGlvbiIsICJMamF2YS9sYW5n
L1N0cmluZzsiKTsKLSAganN0cmluZyBqX2Rlc2NyaXB0aW9uID0gKGpzdHJpbmcpR2V0T2JqZWN0
RmllbGQoam5pLCBqX3NkcCwgal9kZXNjcmlwdGlvbl9pZCk7Ci0gIHN0ZDo6c3RyaW5nIHN0ZF9k
ZXNjcmlwdGlvbiA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfZGVzY3JpcHRpb24pOwotCi0gIHJl
dHVybiB3ZWJydGM6OkNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgIHN0ZF90eXBlLCBz
dGRfZGVzY3JpcHRpb24sIE5VTEwpOwotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25fc2V0
TG9jYWxEZXNjcmlwdGlvbikoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywKLSAgICBq
b2JqZWN0IGpfb2JzZXJ2ZXIsIGpvYmplY3Qgal9zZHApIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRy
PFNldFNkcE9ic2VydmVyV3JhcHBlcj4gb2JzZXJ2ZXIoCi0gICAgICBuZXcgcnRjOjpSZWZDb3Vu
dGVkT2JqZWN0PFNldFNkcE9ic2VydmVyV3JhcHBlcj4oCi0gICAgICAgICAgam5pLCBqX29ic2Vy
dmVyLCByZWludGVycHJldF9jYXN0PENvbnN0cmFpbnRzV3JhcHBlcio+KE5VTEwpKSk7Ci0gIEV4
dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5TZXRMb2NhbERlc2NyaXB0aW9uKAotICAgICAgb2Jz
ZXJ2ZXIsIEphdmFTZHBUb05hdGl2ZVNkcChqbmksIGpfc2RwKSk7Ci19Ci0KLUpPVyh2b2lkLCBQ
ZWVyQ29ubmVjdGlvbl9zZXRSZW1vdGVEZXNjcmlwdGlvbikoCi0gICAgSk5JRW52KiBqbmksIGpv
YmplY3Qgal9wYywKLSAgICBqb2JqZWN0IGpfb2JzZXJ2ZXIsIGpvYmplY3Qgal9zZHApIHsKLSAg
cnRjOjpzY29wZWRfcmVmcHRyPFNldFNkcE9ic2VydmVyV3JhcHBlcj4gb2JzZXJ2ZXIoCi0gICAg
ICBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PFNldFNkcE9ic2VydmVyV3JhcHBlcj4oCi0gICAg
ICAgICAgam5pLCBqX29ic2VydmVyLCByZWludGVycHJldF9jYXN0PENvbnN0cmFpbnRzV3JhcHBl
cio+KE5VTEwpKSk7Ci0gIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5TZXRSZW1vdGVEZXNj
cmlwdGlvbigKLSAgICAgIG9ic2VydmVyLCBKYXZhU2RwVG9OYXRpdmVTZHAoam5pLCBqX3NkcCkp
OwotfQotCi1KT1coamJvb2xlYW4sIFBlZXJDb25uZWN0aW9uX3NldENvbmZpZ3VyYXRpb24pKAot
ICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMsIGpvYmplY3Qgal9ydGNfY29uZmlnKSB7Ci0g
IFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSVENDb25maWd1cmF0aW9uIHJ0Y19jb25maWcoCi0g
ICAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UlRDQ29uZmlndXJhdGlvblR5cGU6OmtBZ2dy
ZXNzaXZlKTsKLSAgSmF2YVJUQ0NvbmZpZ3VyYXRpb25Ub0pzZXBSVENDb25maWd1cmF0aW9uKGpu
aSwgal9ydGNfY29uZmlnLCAmcnRjX2NvbmZpZyk7Ci0gIHJldHVybiBFeHRyYWN0TmF0aXZlUEMo
am5pLCBqX3BjKS0+U2V0Q29uZmlndXJhdGlvbihydGNfY29uZmlnKTsKLX0KLQotSk9XKGpib29s
ZWFuLCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVBZGRJY2VDYW5kaWRhdGUpKAotICAgIEpOSUVudiog
am5pLCBqb2JqZWN0IGpfcGMsIGpzdHJpbmcgal9zZHBfbWlkLAotICAgIGppbnQgal9zZHBfbWxp
bmVfaW5kZXgsIGpzdHJpbmcgal9jYW5kaWRhdGVfc2RwKSB7Ci0gIHN0ZDo6c3RyaW5nIHNkcF9t
aWQgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX3NkcF9taWQpOwotICBzdGQ6OnN0cmluZyBzZHAg
PSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX2NhbmRpZGF0ZV9zZHApOwotICBzdGQ6OnVuaXF1ZV9w
dHI8SWNlQ2FuZGlkYXRlSW50ZXJmYWNlPiBjYW5kaWRhdGUoCi0gICAgICB3ZWJydGM6OkNyZWF0
ZUljZUNhbmRpZGF0ZShzZHBfbWlkLCBqX3NkcF9tbGluZV9pbmRleCwgc2RwLCBOVUxMKSk7Ci0g
IHJldHVybiBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+QWRkSWNlQ2FuZGlkYXRlKGNhbmRp
ZGF0ZS5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBjcmlja2V0OjpDYW5kaWRhdGUgR2V0Q2FuZGlkYXRl
RnJvbUphdmEoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpvYmplY3Qgal9jYW5kaWRhdGUpIHsKLSAgamNsYXNzIGpfY2FuZGlkYXRl
X2NsYXNzID0gR2V0T2JqZWN0Q2xhc3Moam5pLCBqX2NhbmRpZGF0ZSk7Ci0gIGpmaWVsZElEIGpf
c2RwX21pZF9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9jYW5kaWRhdGVfY2xhc3MsICJz
ZHBNaWQiLCAiTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gIHN0ZDo6c3RyaW5nIHNkcF9taWQgPQot
ICAgICAgSmF2YVRvU3RkU3RyaW5nKGpuaSwgR2V0U3RyaW5nRmllbGQoam5pLCBqX2NhbmRpZGF0
ZSwgal9zZHBfbWlkX2lkKSk7Ci0gIGpmaWVsZElEIGpfc2RwX2lkID0KLSAgICAgIEdldEZpZWxk
SUQoam5pLCBqX2NhbmRpZGF0ZV9jbGFzcywgInNkcCIsICJMamF2YS9sYW5nL1N0cmluZzsiKTsK
LSAgc3RkOjpzdHJpbmcgc2RwID0KLSAgICAgIEphdmFUb1N0ZFN0cmluZyhqbmksIEdldFN0cmlu
Z0ZpZWxkKGpuaSwgal9jYW5kaWRhdGUsIGpfc2RwX2lkKSk7Ci0gIGNyaWNrZXQ6OkNhbmRpZGF0
ZSBjYW5kaWRhdGU7Ci0gIGlmICghd2VicnRjOjpTZHBEZXNlcmlhbGl6ZUNhbmRpZGF0ZShzZHBf
bWlkLCBzZHAsICZjYW5kaWRhdGUsIE5VTEwpKSB7Ci0gICAgTE9HKExTX0VSUk9SKSA8PCAiU2Rw
RGVzY3JpYWxpemVDYW5kaWRhdGUgZmFpbGVkIHdpdGggc2RwICIgPDwgc2RwOwotICB9Ci0gIHJl
dHVybiBjYW5kaWRhdGU7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUGVlckNvbm5lY3Rpb25fbmF0aXZl
UmVtb3ZlSWNlQ2FuZGlkYXRlcykKLShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjLCBqb2JqZWN0
QXJyYXkgal9jYW5kaWRhdGVzKSB7Ci0gIHN0ZDo6dmVjdG9yPGNyaWNrZXQ6OkNhbmRpZGF0ZT4g
Y2FuZGlkYXRlczsKLSAgc2l6ZV90IG51bV9jYW5kaWRhdGVzID0gam5pLT5HZXRBcnJheUxlbmd0
aChqX2NhbmRpZGF0ZXMpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9jYW5kaWRhdGVz
OyArK2kpIHsKLSAgICBqb2JqZWN0IGpfY2FuZGlkYXRlID0gam5pLT5HZXRPYmplY3RBcnJheUVs
ZW1lbnQoal9jYW5kaWRhdGVzLCBpKTsKLSAgICBjYW5kaWRhdGVzLnB1c2hfYmFjayhHZXRDYW5k
aWRhdGVGcm9tSmF2YShqbmksIGpfY2FuZGlkYXRlKSk7Ci0gIH0KLSAgcmV0dXJuIEV4dHJhY3RO
YXRpdmVQQyhqbmksIGpfcGMpLT5SZW1vdmVJY2VDYW5kaWRhdGVzKGNhbmRpZGF0ZXMpOwotfQot
Ci1KT1coamJvb2xlYW4sIFBlZXJDb25uZWN0aW9uX25hdGl2ZUFkZExvY2FsU3RyZWFtKSgKLSAg
ICBKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjLCBqbG9uZyBuYXRpdmVfc3RyZWFtKSB7Ci0gIHJl
dHVybiBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+QWRkU3RyZWFtKAotICAgICAgcmVpbnRl
cnByZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+KG5hdGl2ZV9zdHJlYW0pKTsKLX0KLQot
Sk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uX25hdGl2ZVJlbW92ZUxvY2FsU3RyZWFtKSgKLSAgICBK
TklFbnYqIGpuaSwgam9iamVjdCBqX3BjLCBqbG9uZyBuYXRpdmVfc3RyZWFtKSB7Ci0gIEV4dHJh
Y3ROYXRpdmVQQyhqbmksIGpfcGMpLT5SZW1vdmVTdHJlYW0oCi0gICAgICByZWludGVycHJldF9j
YXN0PE1lZGlhU3RyZWFtSW50ZXJmYWNlKj4obmF0aXZlX3N0cmVhbSkpOwotfQotCi1KT1coam9i
amVjdCwgUGVlckNvbm5lY3Rpb25fbmF0aXZlQ3JlYXRlU2VuZGVyKSgKLSAgICBKTklFbnYqIGpu
aSwgam9iamVjdCBqX3BjLCBqc3RyaW5nIGpfa2luZCwganN0cmluZyBqX3N0cmVhbV9pZCkgewot
ICBqY2xhc3Mgal9ydHBfc2VuZGVyX2NsYXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMv
UnRwU2VuZGVyIik7Ci0gIGptZXRob2RJRCBqX3J0cF9zZW5kZXJfY3RvciA9Ci0gICAgICBHZXRN
ZXRob2RJRChqbmksIGpfcnRwX3NlbmRlcl9jbGFzcywgIjxpbml0PiIsICIoSilWIik7Ci0KLSAg
c3RkOjpzdHJpbmcga2luZCA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfa2luZCk7Ci0gIHN0ZDo6
c3RyaW5nIHN0cmVhbV9pZCA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfc3RyZWFtX2lkKTsKLSAg
cnRjOjpzY29wZWRfcmVmcHRyPFJ0cFNlbmRlckludGVyZmFjZT4gc2VuZGVyID0KLSAgICAgIEV4
dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5DcmVhdGVTZW5kZXIoa2luZCwgc3RyZWFtX2lkKTsK
LSAgaWYgKCFzZW5kZXIuZ2V0KCkpIHsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICBqbG9u
ZyBuYXRpdmVTZW5kZXJQdHIgPSBqbG9uZ0Zyb21Qb2ludGVyKHNlbmRlci5nZXQoKSk7Ci0gIGpv
YmplY3Qgal9zZW5kZXIgPQotICAgICAgam5pLT5OZXdPYmplY3Qoal9ydHBfc2VuZGVyX2NsYXNz
LCBqX3J0cF9zZW5kZXJfY3RvciwgbmF0aXZlU2VuZGVyUHRyKTsKLSAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotICAvLyBTZW5kZXIgaXMgbm93IG93
bmVkIGJ5IHRoZSBKYXZhIG9iamVjdCwgYW5kIHdpbGwgYmUgZnJlZWQgZnJvbQotICAvLyBSdHBT
ZW5kZXIuZGlzcG9zZSgpLCBjYWxsZWQgYnkgUGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpIG9yIGdl
dFNlbmRlcnMoKS4KLSAgc2VuZGVyLT5BZGRSZWYoKTsKLSAgcmV0dXJuIGpfc2VuZGVyOwotfQot
Ci1KT1coam9iamVjdCwgUGVlckNvbm5lY3Rpb25fbmF0aXZlR2V0U2VuZGVycykoSk5JRW52KiBq
bmksIGpvYmplY3Qgal9wYykgewotICBqY2xhc3Mgal9hcnJheV9saXN0X2NsYXNzID0gRmluZENs
YXNzKGpuaSwgImphdmEvdXRpbC9BcnJheUxpc3QiKTsKLSAgam1ldGhvZElEIGpfYXJyYXlfbGlz
dF9jdG9yID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9hcnJheV9saXN0X2NsYXNzLCAiPGlu
aXQ+IiwgIigpViIpOwotICBqbWV0aG9kSUQgal9hcnJheV9saXN0X2FkZCA9Ci0gICAgICBHZXRN
ZXRob2RJRChqbmksIGpfYXJyYXlfbGlzdF9jbGFzcywgImFkZCIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7KVoiKTsKLSAgam9iamVjdCBqX3NlbmRlcnMgPSBqbmktPk5ld09iamVjdChqX2FycmF5X2xp
c3RfY2xhc3MsIGpfYXJyYXlfbGlzdF9jdG9yKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwg
ImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotCi0gIGpjbGFzcyBqX3J0cF9zZW5kZXJfY2xhc3Mg
PSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9SdHBTZW5kZXIiKTsKLSAgam1ldGhvZElEIGpf
cnRwX3NlbmRlcl9jdG9yID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9ydHBfc2VuZGVyX2Ns
YXNzLCAiPGluaXQ+IiwgIihKKVYiKTsKLQotICBhdXRvIHNlbmRlcnMgPSBFeHRyYWN0TmF0aXZl
UEMoam5pLCBqX3BjKS0+R2V0U2VuZGVycygpOwotICBmb3IgKGNvbnN0IGF1dG8mIHNlbmRlciA6
IHNlbmRlcnMpIHsKLSAgICBqbG9uZyBuYXRpdmVTZW5kZXJQdHIgPSBqbG9uZ0Zyb21Qb2ludGVy
KHNlbmRlci5nZXQoKSk7Ci0gICAgam9iamVjdCBqX3NlbmRlciA9Ci0gICAgICAgIGpuaS0+TmV3
T2JqZWN0KGpfcnRwX3NlbmRlcl9jbGFzcywgal9ydHBfc2VuZGVyX2N0b3IsIG5hdGl2ZVNlbmRl
clB0cik7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmpl
Y3QiOwotICAgIC8vIFNlbmRlciBpcyBub3cgb3duZWQgYnkgdGhlIEphdmEgb2JqZWN0LCBhbmQg
d2lsbCBiZSBmcmVlZCBmcm9tCi0gICAgLy8gUnRwU2VuZGVyLmRpc3Bvc2UoKSwgY2FsbGVkIGJ5
IFBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKSBvciBnZXRTZW5kZXJzKCkuCi0gICAgc2VuZGVyLT5B
ZGRSZWYoKTsKLSAgICBqbmktPkNhbGxCb29sZWFuTWV0aG9kKGpfc2VuZGVycywgal9hcnJheV9s
aXN0X2FkZCwgal9zZW5kZXIpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBk
dXJpbmcgQ2FsbEJvb2xlYW5NZXRob2QiOwotICB9Ci0gIHJldHVybiBqX3NlbmRlcnM7Ci19Ci0K
LUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVHZXRSZWNlaXZlcnMpKEpOSUVudiog
am5pLCBqb2JqZWN0IGpfcGMpIHsKLSAgamNsYXNzIGpfYXJyYXlfbGlzdF9jbGFzcyA9IEZpbmRD
bGFzcyhqbmksICJqYXZhL3V0aWwvQXJyYXlMaXN0Iik7Ci0gIGptZXRob2RJRCBqX2FycmF5X2xp
c3RfY3RvciA9Ci0gICAgICBHZXRNZXRob2RJRChqbmksIGpfYXJyYXlfbGlzdF9jbGFzcywgIjxp
bml0PiIsICIoKVYiKTsKLSAgam1ldGhvZElEIGpfYXJyYXlfbGlzdF9hZGQgPQotICAgICAgR2V0
TWV0aG9kSUQoam5pLCBqX2FycmF5X2xpc3RfY2xhc3MsICJhZGQiLCAiKExqYXZhL2xhbmcvT2Jq
ZWN0OylaIik7Ci0gIGpvYmplY3Qgal9yZWNlaXZlcnMgPSBqbmktPk5ld09iamVjdChqX2FycmF5
X2xpc3RfY2xhc3MsIGpfYXJyYXlfbGlzdF9jdG9yKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkg
PDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotCi0gIGpjbGFzcyBqX3J0cF9yZWNlaXZlcl9j
bGFzcyA9IEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL1J0cFJlY2VpdmVyIik7Ci0gIGptZXRo
b2RJRCBqX3J0cF9yZWNlaXZlcl9jdG9yID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9ydHBf
cmVjZWl2ZXJfY2xhc3MsICI8aW5pdD4iLCAiKEopViIpOwotCi0gIGF1dG8gcmVjZWl2ZXJzID0g
RXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkdldFJlY2VpdmVycygpOwotICBmb3IgKGNvbnN0
IGF1dG8mIHJlY2VpdmVyIDogcmVjZWl2ZXJzKSB7Ci0gICAgamxvbmcgbmF0aXZlUmVjZWl2ZXJQ
dHIgPSBqbG9uZ0Zyb21Qb2ludGVyKHJlY2VpdmVyLmdldCgpKTsKLSAgICBqb2JqZWN0IGpfcmVj
ZWl2ZXIgPSBqbmktPk5ld09iamVjdChqX3J0cF9yZWNlaXZlcl9jbGFzcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX3J0cF9yZWNlaXZlcl9jdG9yLCBuYXRpdmVS
ZWNlaXZlclB0cik7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBO
ZXdPYmplY3QiOwotICAgIC8vIFJlY2VpdmVyIGlzIG5vdyBvd25lZCBieSBKYXZhIG9iamVjdCwg
YW5kIHdpbGwgYmUgZnJlZWQgZnJvbSB0aGVyZS4KLSAgICByZWNlaXZlci0+QWRkUmVmKCk7Ci0g
ICAgam5pLT5DYWxsQm9vbGVhbk1ldGhvZChqX3JlY2VpdmVycywgal9hcnJheV9saXN0X2FkZCwg
al9yZWNlaXZlcik7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBD
YWxsQm9vbGVhbk1ldGhvZCI7Ci0gIH0KLSAgcmV0dXJuIGpfcmVjZWl2ZXJzOwotfQotCi1KT1co
Ym9vbCwgUGVlckNvbm5lY3Rpb25fbmF0aXZlR2V0U3RhdHMpKAotICAgIEpOSUVudiogam5pLCBq
b2JqZWN0IGpfcGMsIGpvYmplY3Qgal9vYnNlcnZlciwgamxvbmcgbmF0aXZlX3RyYWNrKSB7Ci0g
IHJ0Yzo6c2NvcGVkX3JlZnB0cjxTdGF0c09ic2VydmVyV3JhcHBlcj4gb2JzZXJ2ZXIoCi0gICAg
ICBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PFN0YXRzT2JzZXJ2ZXJXcmFwcGVyPihqbmksIGpf
b2JzZXJ2ZXIpKTsKLSAgcmV0dXJuIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5HZXRTdGF0
cygKLSAgICAgIG9ic2VydmVyLAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRy
YWNrSW50ZXJmYWNlKj4obmF0aXZlX3RyYWNrKSwKLSAgICAgIFBlZXJDb25uZWN0aW9uSW50ZXJm
YWNlOjprU3RhdHNPdXRwdXRMZXZlbFN0YW5kYXJkKTsKLX0KLQotSk9XKGJvb2wsIFBlZXJDb25u
ZWN0aW9uX25hdGl2ZVN0YXJ0UnRjRXZlbnRMb2cpKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0
IGpfcGMsIGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBtYXhfc2l6ZV9ieXRlcykgewotICByZXR1
cm4gRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlN0YXJ0UnRjRXZlbnRMb2coZmlsZV9kZXNj
cmlwdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF4X3NpemVfYnl0ZXMpOwotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25fbmF0
aXZlU3RvcFJ0Y0V2ZW50TG9nKShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjKSB7Ci0gIEV4dHJh
Y3ROYXRpdmVQQyhqbmksIGpfcGMpLT5TdG9wUnRjRXZlbnRMb2coKTsKLX0KLQotSk9XKGpvYmpl
Y3QsIFBlZXJDb25uZWN0aW9uX3NpZ25hbGluZ1N0YXRlKShKTklFbnYqIGpuaSwgam9iamVjdCBq
X3BjKSB7Ci0gIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpTaWduYWxpbmdTdGF0ZSBzdGF0ZSA9
Ci0gICAgICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+c2lnbmFsaW5nX3N0YXRlKCk7Ci0g
IHJldHVybiBKYXZhRW51bUZyb21JbmRleChqbmksICJQZWVyQ29ubmVjdGlvbiRTaWduYWxpbmdT
dGF0ZSIsIHN0YXRlKTsKLX0KLQotSk9XKGpvYmplY3QsIFBlZXJDb25uZWN0aW9uX2ljZUNvbm5l
Y3Rpb25TdGF0ZSkoSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYykgewotICBQZWVyQ29ubmVjdGlv
bkludGVyZmFjZTo6SWNlQ29ubmVjdGlvblN0YXRlIHN0YXRlID0KLSAgICAgIEV4dHJhY3ROYXRp
dmVQQyhqbmksIGpfcGMpLT5pY2VfY29ubmVjdGlvbl9zdGF0ZSgpOwotICByZXR1cm4gSmF2YUVu
dW1Gcm9tSW5kZXgoam5pLCAiUGVlckNvbm5lY3Rpb24kSWNlQ29ubmVjdGlvblN0YXRlIiwgc3Rh
dGUpOwotfQotCi1KT1coam9iamVjdCwgUGVlckNvbm5lY3Rpb25faWNlR2F0aGVyaW5nU3RhdGUp
KEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMpIHsKLSAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6
OkljZUdhdGhlcmluZ1N0YXRlIHN0YXRlID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpf
cGMpLT5pY2VfZ2F0aGVyaW5nX3N0YXRlKCk7Ci0gIHJldHVybiBKYXZhRW51bUZyb21JbmRleChq
bmksICJQZWVyQ29ubmVjdGlvbiRJY2VHYXRoZXJpbmdTdGF0ZSIsIHN0YXRlKTsKLX0KLQotSk9X
KHZvaWQsIFBlZXJDb25uZWN0aW9uX2Nsb3NlKShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjKSB7
Ci0gIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5DbG9zZSgpOwotICByZXR1cm47Ci19Ci0K
LUpPVyhqb2JqZWN0LCBNZWRpYVNvdXJjZV9uYXRpdmVTdGF0ZSkoSk5JRW52KiBqbmksIGpjbGFz
cywgamxvbmcgal9wKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVNvdXJjZUludGVyZmFj
ZT4gcCgKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTb3VyY2VJbnRlcmZhY2UqPihqX3Ap
KTsKLSAgcmV0dXJuIEphdmFFbnVtRnJvbUluZGV4KGpuaSwgIk1lZGlhU291cmNlJFN0YXRlIiwg
cC0+c3RhdGUoKSk7Ci19Ci0KLUpPVyhqbG9uZywgVmlkZW9SZW5kZXJlcl9uYXRpdmVXcmFwVmlk
ZW9SZW5kZXJlcikoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgam9iamVjdCBqX2NhbGxiYWNr
cykgewotICBzdGQ6OnVuaXF1ZV9wdHI8SmF2YVZpZGVvUmVuZGVyZXJXcmFwcGVyPiByZW5kZXJl
cigKLSAgICAgIG5ldyBKYXZhVmlkZW9SZW5kZXJlcldyYXBwZXIoam5pLCBqX2NhbGxiYWNrcykp
OwotICByZXR1cm4gKGpsb25nKXJlbmRlcmVyLnJlbGVhc2UoKTsKLX0KLQotSk9XKHZvaWQsIFZp
ZGVvUmVuZGVyZXJfbmF0aXZlQ29weVBsYW5lKSgKLSAgICBKTklFbnYgKmpuaSwgamNsYXNzLCBq
b2JqZWN0IGpfc3JjX2J1ZmZlciwgamludCB3aWR0aCwgamludCBoZWlnaHQsCi0gICAgamludCBz
cmNfc3RyaWRlLCBqb2JqZWN0IGpfZHN0X2J1ZmZlciwgamludCBkc3Rfc3RyaWRlKSB7Ci0gIHNp
emVfdCBzcmNfc2l6ZSA9IGpuaS0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoal9zcmNfYnVmZmVy
KTsKLSAgc2l6ZV90IGRzdF9zaXplID0gam5pLT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShqX2Rz
dF9idWZmZXIpOwotICBSVENfQ0hFQ0soc3JjX3N0cmlkZSA+PSB3aWR0aCkgPDwgIldyb25nIHNv
dXJjZSBzdHJpZGUgIiA8PCBzcmNfc3RyaWRlOwotICBSVENfQ0hFQ0soZHN0X3N0cmlkZSA+PSB3
aWR0aCkgPDwgIldyb25nIGRlc3RpbmF0aW9uIHN0cmlkZSAiIDw8IGRzdF9zdHJpZGU7Ci0gIFJU
Q19DSEVDSyhzcmNfc2l6ZSA+PSBzcmNfc3RyaWRlICogaGVpZ2h0KQotICAgICAgPDwgIkluc3Vm
ZmljaWVudCBzb3VyY2UgYnVmZmVyIGNhcGFjaXR5ICIgPDwgc3JjX3NpemU7Ci0gIFJUQ19DSEVD
Syhkc3Rfc2l6ZSA+PSBkc3Rfc3RyaWRlICogaGVpZ2h0KQotICAgICAgPDwgIkluc3VmZmljaWVu
dCBkZXN0aW5hdGlvbiBidWZmZXIgY2FwYWNpdHkgIiA8PCBkc3Rfc2l6ZTsKLSAgdWludDhfdCAq
c3JjID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVm
ZmVyQWRkcmVzcyhqX3NyY19idWZmZXIpKTsKLSAgdWludDhfdCAqZHN0ID0KLSAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2RzdF9i
dWZmZXIpKTsKLSAgaWYgKHNyY19zdHJpZGUgPT0gZHN0X3N0cmlkZSkgewotICAgIG1lbWNweShk
c3QsIHNyYywgc3JjX3N0cmlkZSAqIGhlaWdodCk7Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCk7
Ci0gICAgICBzcmMgKz0gc3JjX3N0cmlkZTsKLSAgICAgIGRzdCArPSBkc3Rfc3RyaWRlOwotICAg
IH0KLSAgfQotfQotCi1KT1codm9pZCwgRmlsZVZpZGVvQ2FwdHVyZXJfbmF0aXZlSTQyMFRvTlYy
MSkoCi0gICAgSk5JRW52ICpqbmksIGpjbGFzcywgamJ5dGVBcnJheSBqX3NyY19idWZmZXIsIGpp
bnQgd2lkdGgsIGppbnQgaGVpZ2h0LAotICAgIGpieXRlQXJyYXkgal9kc3RfYnVmZmVyKSB7Ci0g
IHNpemVfdCBzcmNfc2l6ZSA9IGpuaS0+R2V0QXJyYXlMZW5ndGgoal9zcmNfYnVmZmVyKTsKLSAg
c2l6ZV90IGRzdF9zaXplID0gam5pLT5HZXRBcnJheUxlbmd0aChqX2RzdF9idWZmZXIpOwotICBp
bnQgc3JjX3N0cmlkZSA9IHdpZHRoOwotICBpbnQgZHN0X3N0cmlkZSA9IHdpZHRoOwotICBSVENf
Q0hFQ0tfR0Uoc3JjX3NpemUsIHNyY19zdHJpZGUgKiBoZWlnaHQgKiAzIC8gMik7Ci0gIFJUQ19D
SEVDS19HRShkc3Rfc2l6ZSwgZHN0X3N0cmlkZSAqIGhlaWdodCAqIDMgLyAyKTsKLQotICBqYnl0
ZSogc3JjX2J5dGVzID0gam5pLT5HZXRCeXRlQXJyYXlFbGVtZW50cyhqX3NyY19idWZmZXIsIDAp
OwotICB1aW50OF90KiBzcmMgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihzcmNfYnl0ZXMp
OwotICBqYnl0ZSogZHN0X2J5dGVzID0gam5pLT5HZXRCeXRlQXJyYXlFbGVtZW50cyhqX2RzdF9i
dWZmZXIsIDApOwotICB1aW50OF90KiBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihk
c3RfYnl0ZXMpOwotCi0gIHVpbnQ4X3QqIHNyY195ID0gc3JjOwotICBzaXplX3Qgc3JjX3N0cmlk
ZV95ID0gc3JjX3N0cmlkZTsKLSAgdWludDhfdCogc3JjX3UgPSBzcmMgKyBzcmNfc3RyaWRlICog
aGVpZ2h0OwotICBzaXplX3Qgc3JjX3N0cmlkZV91ID0gc3JjX3N0cmlkZSAvIDI7Ci0gIHVpbnQ4
X3QqIHNyY192ID0gc3JjICsgc3JjX3N0cmlkZSAqIGhlaWdodCAqIDUgLyA0OwotICBzaXplX3Qg
c3JjX3N0cmlkZV92ID0gc3JjX3N0cmlkZSAvIDI7Ci0KLSAgdWludDhfdCogZHN0X3kgPSBkc3Q7
Ci0gIHNpemVfdCBkc3Rfc3RyaWRlX3kgPSBkc3Rfc3RyaWRlOwotICBzaXplX3QgZHN0X3N0cmlk
ZV91diA9IGRzdF9zdHJpZGU7Ci0gIHVpbnQ4X3QqIGRzdF91diA9IGRzdCArIGRzdF9zdHJpZGUg
KiBoZWlnaHQ7Ci0KLSAgaW50IHJldCA9IGxpYnl1djo6STQyMFRvTlYyMShzcmNfeSwgc3JjX3N0
cmlkZV95LCBzcmNfdSwgc3JjX3N0cmlkZV91LCBzcmNfdiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzcmNfc3RyaWRlX3YsIGRzdF95LCBkc3Rfc3RyaWRlX3ksIGRzdF91diwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3Rfc3RyaWRlX3V2LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgam5pLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoal9zcmNfYnVmZmVyLCBzcmNfYnl0
ZXMsIDApOwotICBqbmktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhqX2RzdF9idWZmZXIsIGRz
dF9ieXRlcywgMCk7Ci0gIGlmIChyZXQpIHsKLSAgICBMT0coTFNfRVJST1IpIDw8ICJFcnJvciBj
b252ZXJ0aW5nIEk0MjAgZnJhbWUgdG8gTlYyMTogIiA8PCByZXQ7Ci0gIH0KLX0KLQotSk9XKHZv
aWQsIFZpZGVvRmlsZVJlbmRlcmVyX25hdGl2ZUk0MjBTY2FsZSkoCi0gICAgSk5JRW52ICpqbmks
IGpjbGFzcywKLSAgICBqb2JqZWN0IGpfc3JjX2J1ZmZlcl95LCBqaW50IGpfc3JjX3N0cmlkZV95
LAotICAgIGpvYmplY3Qgal9zcmNfYnVmZmVyX3UsIGppbnQgal9zcmNfc3RyaWRlX3UsCi0gICAg
am9iamVjdCBqX3NyY19idWZmZXJfdiwgamludCBqX3NyY19zdHJpZGVfdiwKLSAgICBqaW50IHdp
ZHRoLCBqaW50IGhlaWdodCwKLSAgICBqYnl0ZUFycmF5IGpfZHN0X2J1ZmZlciwgamludCBkc3RX
aWR0aCwgamludCBkc3RIZWlnaHQpIHsKLSAgc2l6ZV90IHNyY19zaXplX3kgPSBqbmktPkdldERp
cmVjdEJ1ZmZlckNhcGFjaXR5KGpfc3JjX2J1ZmZlcl95KTsKLSAgc2l6ZV90IHNyY19zaXplX3Ug
PSBqbmktPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KGpfc3JjX2J1ZmZlcl91KTsKLSAgc2l6ZV90
IHNyY19zaXplX3YgPSBqbmktPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KGpfc3JjX2J1ZmZlcl92
KTsKLSAgc2l6ZV90IGRzdF9zaXplID0gam5pLT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShqX2Rz
dF9idWZmZXIpOwotICBpbnQgZHN0X3N0cmlkZSA9IGRzdFdpZHRoOwotICBSVENfQ0hFQ0tfR0Uo
c3JjX3NpemVfeSwgal9zcmNfc3RyaWRlX3kgKiBoZWlnaHQpOwotICBSVENfQ0hFQ0tfR0Uoc3Jj
X3NpemVfdSwgal9zcmNfc3RyaWRlX3UgKiBoZWlnaHQgLyA0KTsKLSAgUlRDX0NIRUNLX0dFKHNy
Y19zaXplX3YsIGpfc3JjX3N0cmlkZV92ICogaGVpZ2h0IC8gNCk7Ci0gIFJUQ19DSEVDS19HRShk
c3Rfc2l6ZSwgZHN0X3N0cmlkZSAqIGhlaWdodCAqIDMgLyAyKTsKLSAgdWludDhfdCogc3JjX3kg
PQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJB
ZGRyZXNzKGpfc3JjX2J1ZmZlcl95KSk7Ci0gIHVpbnQ4X3QqIHNyY191ID0KLSAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX3NyY19i
dWZmZXJfdSkpOwotICB1aW50OF90KiBzcmNfdiA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9zcmNfYnVmZmVyX3YpKTsKLSAg
dWludDhfdCogZHN0ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0
RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2RzdF9idWZmZXIpKTsKLQotICB1aW50OF90KiBkc3RfeSA9
IGRzdDsKLSAgc2l6ZV90IGRzdF9zdHJpZGVfeSA9IGRzdF9zdHJpZGU7Ci0gIHVpbnQ4X3QqIGRz
dF91ID0gZHN0ICsgZHN0X3N0cmlkZSAqIGRzdEhlaWdodDsKLSAgc2l6ZV90IGRzdF9zdHJpZGVf
dSA9IGRzdF9zdHJpZGUgLyAyOwotICB1aW50OF90KiBkc3RfdiA9IGRzdCArIGRzdF9zdHJpZGUg
KiBkc3RIZWlnaHQgKiA1IC8gNDsKLSAgc2l6ZV90IGRzdF9zdHJpZGVfdiA9IGRzdF9zdHJpZGUg
LyAyOwotCi0gIGludCByZXQgPSBsaWJ5dXY6Okk0MjBTY2FsZSgKLSAgICAgIHNyY195LCBqX3Ny
Y19zdHJpZGVfeSwgc3JjX3UsIGpfc3JjX3N0cmlkZV91LCBzcmNfdiwgal9zcmNfc3RyaWRlX3Ys
Ci0gICAgICB3aWR0aCwgaGVpZ2h0LCBkc3RfeSwgZHN0X3N0cmlkZV95LCBkc3RfdSwgZHN0X3N0
cmlkZV91LCBkc3RfdiwKLSAgICAgIGRzdF9zdHJpZGVfdiwgZHN0V2lkdGgsIGRzdEhlaWdodCwg
bGlieXV2OjprRmlsdGVyQmlsaW5lYXIpOwotICBpZiAocmV0KSB7Ci0gICAgTE9HKExTX0VSUk9S
KSA8PCAiRXJyb3Igc2NhbGluZyBJNDIwIGZyYW1lOiAiIDw8IHJldDsKLSAgfQotfQotCi1KT1co
anN0cmluZywgTWVkaWFTdHJlYW1UcmFja19uYXRpdmVJZCkoSk5JRW52KiBqbmksIGpjbGFzcywg
amxvbmcgal9wKSB7Ci0gIHJldHVybiBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZygKLSAgICAgIGpu
aSwgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4oal9wKS0+aWQo
KSk7Ci19Ci0KLUpPVyhqc3RyaW5nLCBNZWRpYVN0cmVhbVRyYWNrX25hdGl2ZUtpbmQpKEpOSUVu
diogam5pLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICByZXR1cm4gSmF2YVN0cmluZ0Zyb21TdGRT
dHJpbmcoCi0gICAgICBqbmksIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1UcmFja0ludGVy
ZmFjZSo+KGpfcCktPmtpbmQoKSk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgTWVkaWFTdHJlYW1UcmFj
a19uYXRpdmVFbmFibGVkKShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSo+KGpfcCktPmVu
YWJsZWQoKTsKLX0KLQotSk9XKGpvYmplY3QsIE1lZGlhU3RyZWFtVHJhY2tfbmF0aXZlU3RhdGUp
KEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICByZXR1cm4gSmF2YUVudW1Gcm9t
SW5kZXgoCi0gICAgICBqbmksCi0gICAgICAiTWVkaWFTdHJlYW1UcmFjayRTdGF0ZSIsCi0gICAg
ICByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqPihqX3ApLT5zdGF0
ZSgpKTsKLX0KLQotSk9XKGpib29sZWFuLCBNZWRpYVN0cmVhbVRyYWNrX25hdGl2ZVNldEVuYWJs
ZWQpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfcCwgamJvb2xlYW4gZW5hYmxl
ZCkgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNl
Kj4oal9wKQotICAgICAgLT5zZXRfZW5hYmxlZChlbmFibGVkKTsKLX0KLQotSk9XKHZvaWQsIFZp
ZGVvVHJhY2tfbmF0aXZlQWRkUmVuZGVyZXIpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsCi0g
ICAgamxvbmcgal92aWRlb190cmFja19wb2ludGVyLCBqbG9uZyBqX3JlbmRlcmVyX3BvaW50ZXIp
IHsKLSAgTE9HKExTX0lORk8pIDw8ICJWaWRlb1RyYWNrOjpuYXRpdmVBZGRSZW5kZXJlciI7Ci0g
IHJlaW50ZXJwcmV0X2Nhc3Q8VmlkZW9UcmFja0ludGVyZmFjZSo+KGpfdmlkZW9fdHJhY2tfcG9p
bnRlcikKLSAgICAgIC0+QWRkT3JVcGRhdGVTaW5rKAotICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8cnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPio+KAotICAgICAg
ICAgICAgICBqX3JlbmRlcmVyX3BvaW50ZXIpLAotICAgICAgICAgIHJ0Yzo6VmlkZW9TaW5rV2Fu
dHMoKSk7Ci19Ci0KLUpPVyh2b2lkLCBWaWRlb1RyYWNrX25hdGl2ZVJlbW92ZVJlbmRlcmVyKSgK
LSAgICBKTklFbnYqIGpuaSwgamNsYXNzLAotICAgIGpsb25nIGpfdmlkZW9fdHJhY2tfcG9pbnRl
ciwgamxvbmcgal9yZW5kZXJlcl9wb2ludGVyKSB7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8VmlkZW9U
cmFja0ludGVyZmFjZSo+KGpfdmlkZW9fdHJhY2tfcG9pbnRlcikKLSAgICAgIC0+UmVtb3ZlU2lu
aygKLSAgICAgICAgICByZWludGVycHJldF9jYXN0PHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdl
YnJ0Yzo6VmlkZW9GcmFtZT4qPigKLSAgICAgICAgICAgICAgal9yZW5kZXJlcl9wb2ludGVyKSk7
Ci19Ci0KLUpPVyhqbG9uZywgQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rX25hdGl2ZUFk
ZFNpbmspKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsCi0gICAganN0cmluZyBqX2RpclBhdGgs
IGppbnQgal9tYXhGaWxlU2l6ZSwgamludCBqX3NldmVyaXR5KSB7Ci0gIHN0ZDo6c3RyaW5nIGRp
cl9wYXRoID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9kaXJQYXRoKTsKLSAgcnRjOjpDYWxsU2Vz
c2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsqIHNpbmsgPQotICAgICAgbmV3IHJ0Yzo6Q2FsbFNlc3Np
b25GaWxlUm90YXRpbmdMb2dTaW5rKGRpcl9wYXRoLCBqX21heEZpbGVTaXplKTsKLSAgaWYgKCFz
aW5rLT5Jbml0KCkpIHsKLSAgICBMT0dfVihydGM6OkxvZ2dpbmdTZXZlcml0eTo6TFNfV0FSTklO
RykgPDwKLSAgICAgICAgIkZhaWxlZCB0byBpbml0IENhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9n
U2luayBmb3IgcGF0aCAiIDw8IGRpcl9wYXRoOwotICAgIGRlbGV0ZSBzaW5rOwotICAgIHJldHVy
biAwOwotICB9Ci0gIHJ0Yzo6TG9nTWVzc2FnZTo6QWRkTG9nVG9TdHJlYW0oCi0gICAgICBzaW5r
LCBzdGF0aWNfY2FzdDxydGM6OkxvZ2dpbmdTZXZlcml0eT4oal9zZXZlcml0eSkpOwotICByZXR1
cm4gKGpsb25nKSBzaW5rOwotfQotCi1KT1codm9pZCwgQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdM
b2dTaW5rX25hdGl2ZURlbGV0ZVNpbmspKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25n
IGpfc2luaykgewotICBydGM6OkNhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luayogc2luayA9
Ci0gICAgICByZWludGVycHJldF9jYXN0PHJ0Yzo6Q2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dT
aW5rKj4oal9zaW5rKTsKLSAgcnRjOjpMb2dNZXNzYWdlOjpSZW1vdmVMb2dUb1N0cmVhbShzaW5r
KTsKLSAgZGVsZXRlIHNpbms7Ci19Ci0KLUpPVyhqYnl0ZUFycmF5LCBDYWxsU2Vzc2lvbkZpbGVS
b3RhdGluZ0xvZ1NpbmtfbmF0aXZlR2V0TG9nRGF0YSkoCi0gICAgSk5JRW52KiBqbmksIGpjbGFz
cywganN0cmluZyBqX2RpclBhdGgpIHsKLSAgc3RkOjpzdHJpbmcgZGlyX3BhdGggPSBKYXZhVG9T
dGRTdHJpbmcoam5pLCBqX2RpclBhdGgpOwotICBzdGQ6OnVuaXF1ZV9wdHI8cnRjOjpDYWxsU2Vz
c2lvbkZpbGVSb3RhdGluZ1N0cmVhbT4gc3RyZWFtKAotICAgICAgbmV3IHJ0Yzo6Q2FsbFNlc3Np
b25GaWxlUm90YXRpbmdTdHJlYW0oZGlyX3BhdGgpKTsKLSAgaWYgKCFzdHJlYW0tPk9wZW4oKSkg
ewotICAgIExPR19WKHJ0Yzo6TG9nZ2luZ1NldmVyaXR5OjpMU19XQVJOSU5HKSA8PAotICAgICAg
ICAiRmFpbGVkIHRvIG9wZW4gQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdTdHJlYW0gZm9yIHBhdGgg
IiA8PCBkaXJfcGF0aDsKLSAgICByZXR1cm4gam5pLT5OZXdCeXRlQXJyYXkoMCk7Ci0gIH0KLSAg
c2l6ZV90IGxvZ19zaXplID0gMDsKLSAgaWYgKCFzdHJlYW0tPkdldFNpemUoJmxvZ19zaXplKSB8
fCBsb2dfc2l6ZSA9PSAwKSB7Ci0gICAgTE9HX1YocnRjOjpMb2dnaW5nU2V2ZXJpdHk6OkxTX1dB
Uk5JTkcpIDw8Ci0gICAgICAgICJDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ1N0cmVhbSByZXR1cm5z
IDAgc2l6ZSBmb3IgcGF0aCAiIDw8IGRpcl9wYXRoOwotICAgIHJldHVybiBqbmktPk5ld0J5dGVB
cnJheSgwKTsKLSAgfQotCi0gIHNpemVfdCByZWFkID0gMDsKLSAgc3RkOjp1bmlxdWVfcHRyPGpi
eXRlPiBidWZmZXIoc3RhdGljX2Nhc3Q8amJ5dGUqPihtYWxsb2MobG9nX3NpemUpKSk7Ci0gIHN0
cmVhbS0+UmVhZEFsbChidWZmZXIuZ2V0KCksIGxvZ19zaXplLCAmcmVhZCwgbnVsbHB0cik7Ci0K
LSAgamJ5dGVBcnJheSByZXN1bHQgPSBqbmktPk5ld0J5dGVBcnJheShyZWFkKTsKLSAgam5pLT5T
ZXRCeXRlQXJyYXlSZWdpb24ocmVzdWx0LCAwLCByZWFkLCBidWZmZXIuZ2V0KCkpOwotCi0gIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUnRwU2VuZGVyX25hdGl2ZVNldFRyYWNr
KShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpjbGFz
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfcnRwX3NlbmRl
cl9wb2ludGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal90
cmFja19wb2ludGVyKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFJ0cFNlbmRlckludGVy
ZmFjZSo+KGpfcnRwX3NlbmRlcl9wb2ludGVyKQotICAgICAgLT5TZXRUcmFjayhyZWludGVycHJl
dF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqPihqX3RyYWNrX3BvaW50ZXIpKTsKLX0K
LQotSk9XKGpsb25nLCBSdHBTZW5kZXJfbmF0aXZlR2V0VHJhY2spKEpOSUVudiogam5pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpjbGFzcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqbG9uZyBqX3J0cF9zZW5kZXJfcG9pbnRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBqX3RyYWNrX3BvaW50ZXIpIHsKLSAgcmV0dXJu
IGpsb25nRnJvbVBvaW50ZXIoCi0gICAgICByZWludGVycHJldF9jYXN0PFJ0cFNlbmRlckludGVy
ZmFjZSo+KGpfcnRwX3NlbmRlcl9wb2ludGVyKQotICAgICAgICAgIC0+dHJhY2soKQotICAgICAg
ICAgIC5yZWxlYXNlKCkpOwotfQotCi1zdGF0aWMgdm9pZCBKYXZhUnRwUGFyYW1ldGVyc1RvSnNl
cFJ0cFBhcmFtZXRlcnMoCi0gICAgSk5JRW52KiBqbmksCi0gICAgam9iamVjdCBqX3BhcmFtZXRl
cnMsCi0gICAgd2VicnRjOjpSdHBQYXJhbWV0ZXJzKiBwYXJhbWV0ZXJzKSB7Ci0gIFJUQ19DSEVD
SyhwYXJhbWV0ZXJzICE9IG51bGxwdHIpOwotICBqY2xhc3MgcGFyYW1ldGVyc19jbGFzcyA9IGpu
aS0+RmluZENsYXNzKCJvcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMiKTsKLSAgamZpZWxkSUQgZW5j
b2RpbmdzX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBwYXJhbWV0ZXJzX2NsYXNzLCAiZW5j
b2RpbmdzIiwgIkxqYXZhL3V0aWwvTGlua2VkTGlzdDsiKTsKLSAgamZpZWxkSUQgY29kZWNzX2lk
ID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBwYXJhbWV0ZXJzX2NsYXNzLCAiY29kZWNzIiwgIkxq
YXZhL3V0aWwvTGlua2VkTGlzdDsiKTsKLQotICAvLyBDb252ZXJ0IGVuY29kaW5ncy4KLSAgam9i
amVjdCBqX2VuY29kaW5ncyA9IEdldE9iamVjdEZpZWxkKGpuaSwgal9wYXJhbWV0ZXJzLCBlbmNv
ZGluZ3NfaWQpOwotICBjb25zdCBpbnQga0JpdHJhdGVVbmxpbWl0ZWQgPSAtMTsKLSAgamNsYXNz
IGpfZW5jb2RpbmdfcGFyYW1ldGVyc19jbGFzcyA9Ci0gICAgICBqbmktPkZpbmRDbGFzcygib3Jn
L3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzJEVuY29kaW5nIik7Ci0gIGpmaWVsZElEIGFjdGl2ZV9pZCA9
Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9lbmNvZGluZ19wYXJhbWV0ZXJzX2NsYXNzLCAiYWN0
aXZlIiwgIloiKTsKLSAgamZpZWxkSUQgYml0cmF0ZV9pZCA9IEdldEZpZWxkSUQoam5pLCBqX2Vu
Y29kaW5nX3BhcmFtZXRlcnNfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJtYXhCaXRyYXRlQnBzIiwgIkxqYXZhL2xhbmcvSW50ZWdlcjsiKTsKLSAgamNsYXNzIGpf
aW50ZWdlcl9jbGFzcyA9IGpuaS0+RmluZENsYXNzKCJqYXZhL2xhbmcvSW50ZWdlciIpOwotICBq
bWV0aG9kSUQgaW50X3ZhbHVlX2lkID0gR2V0TWV0aG9kSUQoam5pLCBqX2ludGVnZXJfY2xhc3Ms
ICJpbnRWYWx1ZSIsICIoKUkiKTsKLQotICBmb3IgKGpvYmplY3Qgal9lbmNvZGluZ19wYXJhbWV0
ZXJzIDogSXRlcmFibGUoam5pLCBqX2VuY29kaW5ncykpIHsKLSAgICB3ZWJydGM6OlJ0cEVuY29k
aW5nUGFyYW1ldGVycyBlbmNvZGluZzsKLSAgICBlbmNvZGluZy5hY3RpdmUgPSBHZXRCb29sZWFu
RmllbGQoam5pLCBqX2VuY29kaW5nX3BhcmFtZXRlcnMsIGFjdGl2ZV9pZCk7Ci0gICAgam9iamVj
dCBqX2JpdHJhdGUgPQotICAgICAgICBHZXROdWxsYWJsZU9iamVjdEZpZWxkKGpuaSwgal9lbmNv
ZGluZ19wYXJhbWV0ZXJzLCBiaXRyYXRlX2lkKTsKLSAgICBpZiAoIUlzTnVsbChqbmksIGpfYml0
cmF0ZSkpIHsKLSAgICAgIGludCBiaXRyYXRlX3ZhbHVlID0gam5pLT5DYWxsSW50TWV0aG9kKGpf
Yml0cmF0ZSwgaW50X3ZhbHVlX2lkKTsKLSAgICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJl
cnJvciBkdXJpbmcgQ2FsbEludE1ldGhvZCI7Ci0gICAgICBlbmNvZGluZy5tYXhfYml0cmF0ZV9i
cHMgPSBiaXRyYXRlX3ZhbHVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBlbmNvZGluZy5tYXhfYml0
cmF0ZV9icHMgPSBrQml0cmF0ZVVubGltaXRlZDsKLSAgICB9Ci0gICAgcGFyYW1ldGVycy0+ZW5j
b2RpbmdzLnB1c2hfYmFjayhlbmNvZGluZyk7Ci0gIH0KLQotICAvLyBDb252ZXJ0IGNvZGVjcy4K
LSAgam9iamVjdCBqX2NvZGVjcyA9IEdldE9iamVjdEZpZWxkKGpuaSwgal9wYXJhbWV0ZXJzLCBj
b2RlY3NfaWQpOwotICBqY2xhc3MgY29kZWNfY2xhc3MgPSBqbmktPkZpbmRDbGFzcygib3JnL3dl
YnJ0Yy9SdHBQYXJhbWV0ZXJzJENvZGVjIik7Ci0gIGpmaWVsZElEIHBheWxvYWRfdHlwZV9pZCA9
IEdldEZpZWxkSUQoam5pLCBjb2RlY19jbGFzcywgInBheWxvYWRUeXBlIiwgIkkiKTsKLSAgamZp
ZWxkSUQgbWltZV90eXBlX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBjb2RlY19jbGFzcywg
Im1pbWVUeXBlIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBqZmllbGRJRCBjbG9ja19yYXRl
X2lkID0gR2V0RmllbGRJRChqbmksIGNvZGVjX2NsYXNzLCAiY2xvY2tSYXRlIiwgIkkiKTsKLSAg
amZpZWxkSUQgY2hhbm5lbHNfaWQgPSBHZXRGaWVsZElEKGpuaSwgY29kZWNfY2xhc3MsICJjaGFu
bmVscyIsICJJIik7Ci0KLSAgZm9yIChqb2JqZWN0IGpfY29kZWMgOiBJdGVyYWJsZShqbmksIGpf
Y29kZWNzKSkgewotICAgIHdlYnJ0Yzo6UnRwQ29kZWNQYXJhbWV0ZXJzIGNvZGVjOwotICAgIGNv
ZGVjLnBheWxvYWRfdHlwZSA9IEdldEludEZpZWxkKGpuaSwgal9jb2RlYywgcGF5bG9hZF90eXBl
X2lkKTsKLSAgICBjb2RlYy5taW1lX3R5cGUgPQotICAgICAgICBKYXZhVG9TdGRTdHJpbmcoam5p
LCBHZXRTdHJpbmdGaWVsZChqbmksIGpfY29kZWMsIG1pbWVfdHlwZV9pZCkpOwotICAgIGNvZGVj
LmNsb2NrX3JhdGUgPSBHZXRJbnRGaWVsZChqbmksIGpfY29kZWMsIGNsb2NrX3JhdGVfaWQpOwot
ICAgIGNvZGVjLmNoYW5uZWxzID0gR2V0SW50RmllbGQoam5pLCBqX2NvZGVjLCBjaGFubmVsc19p
ZCk7Ci0gICAgcGFyYW1ldGVycy0+Y29kZWNzLnB1c2hfYmFjayhjb2RlYyk7Ci0gIH0KLX0KLQot
c3RhdGljIGpvYmplY3QgSnNlcFJ0cFBhcmFtZXRlcnNUb0phdmFSdHBQYXJhbWV0ZXJzKAotICAg
IEpOSUVudiogam5pLAotICAgIGNvbnN0IHdlYnJ0Yzo6UnRwUGFyYW1ldGVycyYgcGFyYW1ldGVy
cykgewotICBqY2xhc3MgcGFyYW1ldGVyc19jbGFzcyA9IGpuaS0+RmluZENsYXNzKCJvcmcvd2Vi
cnRjL1J0cFBhcmFtZXRlcnMiKTsKLSAgam1ldGhvZElEIHBhcmFtZXRlcnNfY3RvciA9Ci0gICAg
ICBHZXRNZXRob2RJRChqbmksIHBhcmFtZXRlcnNfY2xhc3MsICI8aW5pdD4iLCAiKClWIik7Ci0g
IGpvYmplY3Qgal9wYXJhbWV0ZXJzID0gam5pLT5OZXdPYmplY3QocGFyYW1ldGVyc19jbGFzcywg
cGFyYW1ldGVyc19jdG9yKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmlu
ZyBOZXdPYmplY3QiOwotCi0gIC8vIEFkZCBlbmNvZGluZ3MuCi0gIGpjbGFzcyBlbmNvZGluZ19j
bGFzcyA9IGpuaS0+RmluZENsYXNzKCJvcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMkRW5jb2Rpbmci
KTsKLSAgam1ldGhvZElEIGVuY29kaW5nX2N0b3IgPSBHZXRNZXRob2RJRChqbmksIGVuY29kaW5n
X2NsYXNzLCAiPGluaXQ+IiwgIigpViIpOwotICBqZmllbGRJRCBlbmNvZGluZ3NfaWQgPQotICAg
ICAgR2V0RmllbGRJRChqbmksIHBhcmFtZXRlcnNfY2xhc3MsICJlbmNvZGluZ3MiLCAiTGphdmEv
dXRpbC9MaW5rZWRMaXN0OyIpOwotICBqb2JqZWN0IGpfZW5jb2RpbmdzID0gR2V0T2JqZWN0Rmll
bGQoam5pLCBqX3BhcmFtZXRlcnMsIGVuY29kaW5nc19pZCk7Ci0gIGptZXRob2RJRCBlbmNvZGlu
Z3NfYWRkID0gR2V0TWV0aG9kSUQoam5pLCBHZXRPYmplY3RDbGFzcyhqbmksIGpfZW5jb2Rpbmdz
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkIiwgIihMamF2
YS9sYW5nL09iamVjdDspWiIpOwotICBqZmllbGRJRCBhY3RpdmVfaWQgPQotICAgICAgR2V0Rmll
bGRJRChqbmksIGVuY29kaW5nX2NsYXNzLCAiYWN0aXZlIiwgIloiKTsKLSAgamZpZWxkSUQgYml0
cmF0ZV9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgZW5jb2RpbmdfY2xhc3MsICJtYXhCaXRy
YXRlQnBzIiwgIkxqYXZhL2xhbmcvSW50ZWdlcjsiKTsKLQotICBqY2xhc3MgaW50ZWdlcl9jbGFz
cyA9IGpuaS0+RmluZENsYXNzKCJqYXZhL2xhbmcvSW50ZWdlciIpOwotICBqbWV0aG9kSUQgaW50
ZWdlcl9jdG9yID0gR2V0TWV0aG9kSUQoam5pLCBpbnRlZ2VyX2NsYXNzLCAiPGluaXQ+IiwgIihJ
KVYiKTsKLQotICBmb3IgKGNvbnN0IHdlYnJ0Yzo6UnRwRW5jb2RpbmdQYXJhbWV0ZXJzJiBlbmNv
ZGluZyA6IHBhcmFtZXRlcnMuZW5jb2RpbmdzKSB7Ci0gICAgam9iamVjdCBqX2VuY29kaW5nX3Bh
cmFtZXRlcnMgPQotICAgICAgICBqbmktPk5ld09iamVjdChlbmNvZGluZ19jbGFzcywgZW5jb2Rp
bmdfY3Rvcik7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdP
YmplY3QiOwotICAgIGpuaS0+U2V0Qm9vbGVhbkZpZWxkKGpfZW5jb2RpbmdfcGFyYW1ldGVycywg
YWN0aXZlX2lkLCBlbmNvZGluZy5hY3RpdmUpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8
ICJlcnJvciBkdXJpbmcgU2V0Qm9vbGVhbkZpZWxkIjsKLSAgICBpZiAoZW5jb2RpbmcubWF4X2Jp
dHJhdGVfYnBzID4gMCkgewotICAgICAgam9iamVjdCBqX2JpdHJhdGVfdmFsdWUgPQotICAgICAg
ICAgIGpuaS0+TmV3T2JqZWN0KGludGVnZXJfY2xhc3MsIGludGVnZXJfY3RvciwgZW5jb2Rpbmcu
bWF4X2JpdHJhdGVfYnBzKTsKLSAgICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBk
dXJpbmcgTmV3T2JqZWN0IjsKLSAgICAgIGpuaS0+U2V0T2JqZWN0RmllbGQoal9lbmNvZGluZ19w
YXJhbWV0ZXJzLCBiaXRyYXRlX2lkLCBqX2JpdHJhdGVfdmFsdWUpOwotICAgICAgQ0hFQ0tfRVhD
RVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBTZXRPYmplY3RGaWVsZCI7Ci0gICAgfQotICAg
IGpib29sZWFuIGFkZGVkID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZChqX2VuY29kaW5ncywgZW5j
b2RpbmdzX2FkZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
al9lbmNvZGluZ19wYXJhbWV0ZXJzKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJy
b3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAgICBSVENfQ0hFQ0soYWRkZWQpOwotICB9
Ci0KLSAgLy8gQWRkIGNvZGVjcy4KLSAgamNsYXNzIGNvZGVjX2NsYXNzID0gam5pLT5GaW5kQ2xh
c3MoIm9yZy93ZWJydGMvUnRwUGFyYW1ldGVycyRDb2RlYyIpOwotICBqbWV0aG9kSUQgY29kZWNf
Y3RvciA9IEdldE1ldGhvZElEKGpuaSwgY29kZWNfY2xhc3MsICI8aW5pdD4iLCAiKClWIik7Ci0g
IGpmaWVsZElEIGNvZGVjc19pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgcGFyYW1ldGVyc19j
bGFzcywgImNvZGVjcyIsICJMamF2YS91dGlsL0xpbmtlZExpc3Q7Iik7Ci0gIGpvYmplY3Qgal9j
b2RlY3MgPSBHZXRPYmplY3RGaWVsZChqbmksIGpfcGFyYW1ldGVycywgY29kZWNzX2lkKTsKLSAg
am1ldGhvZElEIGNvZGVjc19hZGQgPSBHZXRNZXRob2RJRChqbmksIEdldE9iamVjdENsYXNzKGpu
aSwgal9jb2RlY3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGQi
LCAiKExqYXZhL2xhbmcvT2JqZWN0OylaIik7Ci0gIGpmaWVsZElEIHBheWxvYWRfdHlwZV9pZCA9
IEdldEZpZWxkSUQoam5pLCBjb2RlY19jbGFzcywgInBheWxvYWRUeXBlIiwgIkkiKTsKLSAgamZp
ZWxkSUQgbWltZV90eXBlX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBjb2RlY19jbGFzcywg
Im1pbWVUeXBlIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBqZmllbGRJRCBjbG9ja19yYXRl
X2lkID0gR2V0RmllbGRJRChqbmksIGNvZGVjX2NsYXNzLCAiY2xvY2tSYXRlIiwgIkkiKTsKLSAg
amZpZWxkSUQgY2hhbm5lbHNfaWQgPSBHZXRGaWVsZElEKGpuaSwgY29kZWNfY2xhc3MsICJjaGFu
bmVscyIsICJJIik7Ci0KLSAgZm9yIChjb25zdCB3ZWJydGM6OlJ0cENvZGVjUGFyYW1ldGVycyYg
Y29kZWMgOiBwYXJhbWV0ZXJzLmNvZGVjcykgewotICAgIGpvYmplY3Qgal9jb2RlYyA9IGpuaS0+
TmV3T2JqZWN0KGNvZGVjX2NsYXNzLCBjb2RlY19jdG9yKTsKLSAgICBDSEVDS19FWENFUFRJT04o
am5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgam5pLT5TZXRJbnRGaWVsZChq
X2NvZGVjLCBwYXlsb2FkX3R5cGVfaWQsIGNvZGVjLnBheWxvYWRfdHlwZSk7Ci0gICAgQ0hFQ0tf
RVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBTZXRJbnRGaWVsZCI7Ci0gICAgam5pLT5T
ZXRPYmplY3RGaWVsZChqX2NvZGVjLCBtaW1lX3R5cGVfaWQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmksIGNvZGVjLm1pbWVfdHlwZSkpOwotICAg
IENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgU2V0T2JqZWN0RmllbGQiOwot
ICAgIGpuaS0+U2V0SW50RmllbGQoal9jb2RlYywgY2xvY2tfcmF0ZV9pZCwgY29kZWMuY2xvY2tf
cmF0ZSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBTZXRJbnRG
aWVsZCI7Ci0gICAgam5pLT5TZXRJbnRGaWVsZChqX2NvZGVjLCBjaGFubmVsc19pZCwgY29kZWMu
Y2hhbm5lbHMpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgU2V0
SW50RmllbGQiOwotICAgIGpib29sZWFuIGFkZGVkID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZChq
X2NvZGVjcywgY29kZWNzX2FkZCwgal9jb2RlYyk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkg
PDwgImVycm9yIGR1cmluZyBDYWxsQm9vbGVhbk1ldGhvZCI7Ci0gICAgUlRDX0NIRUNLKGFkZGVk
KTsKLSAgfQotCi0gIHJldHVybiBqX3BhcmFtZXRlcnM7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUnRw
U2VuZGVyX25hdGl2ZVNldFBhcmFtZXRlcnMpCi0oSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcg
al9ydHBfc2VuZGVyX3BvaW50ZXIsIGpvYmplY3Qgal9wYXJhbWV0ZXJzKSB7Ci0gIGlmIChJc051
bGwoam5pLCBqX3BhcmFtZXRlcnMpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHdlYnJ0
Yzo6UnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICBKYXZhUnRwUGFyYW1ldGVyc1RvSnNlcFJ0
cFBhcmFtZXRlcnMoam5pLCBqX3BhcmFtZXRlcnMsICZwYXJhbWV0ZXJzKTsKLSAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8UnRwU2VuZGVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIp
Ci0gICAgICAtPlNldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci19Ci0KLUpPVyhqb2JqZWN0LCBS
dHBTZW5kZXJfbmF0aXZlR2V0UGFyYW1ldGVycykKLShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9u
ZyBqX3J0cF9zZW5kZXJfcG9pbnRlcikgewotICB3ZWJydGM6OlJ0cFBhcmFtZXRlcnMgcGFyYW1l
dGVycyA9Ci0gICAgICByZWludGVycHJldF9jYXN0PFJ0cFNlbmRlckludGVyZmFjZSo+KGpfcnRw
X3NlbmRlcl9wb2ludGVyKQotICAgICAgICAgIC0+R2V0UGFyYW1ldGVycygpOwotICByZXR1cm4g
SnNlcFJ0cFBhcmFtZXRlcnNUb0phdmFSdHBQYXJhbWV0ZXJzKGpuaSwgcGFyYW1ldGVycyk7Ci19
Ci0KLUpPVyhqc3RyaW5nLCBSdHBTZW5kZXJfbmF0aXZlSWQpKAotICAgIEpOSUVudiogam5pLCBq
Y2xhc3MsIGpsb25nIGpfcnRwX3NlbmRlcl9wb2ludGVyKSB7Ci0gIHJldHVybiBKYXZhU3RyaW5n
RnJvbVN0ZFN0cmluZygKLSAgICAgIGpuaSwgcmVpbnRlcnByZXRfY2FzdDxSdHBTZW5kZXJJbnRl
cmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlciktPmlkKCkpOwotfQotCi1KT1codm9pZCwgUnRw
U2VuZGVyX2ZyZWUpKEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfcnRwX3NlbmRlcl9wb2lu
dGVyKSB7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwU2VuZGVySW50ZXJmYWNlKj4oal9ydHBfc2Vu
ZGVyX3BvaW50ZXIpLT5SZWxlYXNlKCk7Ci19Ci0KLUpPVyhqbG9uZywgUnRwUmVjZWl2ZXJfbmF0
aXZlR2V0VHJhY2spKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgamNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcg
al9ydHBfcmVjZWl2ZXJfcG9pbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpsb25nIGpfdHJhY2tfcG9pbnRlcikgewotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcigK
LSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwUmVjZWl2ZXJJbnRlcmZhY2UqPihqX3J0cF9yZWNl
aXZlcl9wb2ludGVyKQotICAgICAgICAgIC0+dHJhY2soKQotICAgICAgICAgIC5yZWxlYXNlKCkp
OwotfQotCi1KT1coamJvb2xlYW4sIFJ0cFJlY2VpdmVyX25hdGl2ZVNldFBhcmFtZXRlcnMpCi0o
Sk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIsIGpvYmplY3Qg
al9wYXJhbWV0ZXJzKSB7Ci0gIGlmIChJc051bGwoam5pLCBqX3BhcmFtZXRlcnMpKSB7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0gIHdlYnJ0Yzo6UnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwot
ICBKYXZhUnRwUGFyYW1ldGVyc1RvSnNlcFJ0cFBhcmFtZXRlcnMoam5pLCBqX3BhcmFtZXRlcnMs
ICZwYXJhbWV0ZXJzKTsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwUmVjZWl2ZXJJbnRl
cmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgIC0+U2V0UGFyYW1ldGVycyhwYXJh
bWV0ZXJzKTsKLX0KLQotSk9XKGpvYmplY3QsIFJ0cFJlY2VpdmVyX25hdGl2ZUdldFBhcmFtZXRl
cnMpCi0oSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIpIHsK
LSAgd2VicnRjOjpSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPQotICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxSdHBSZWNlaXZlckludGVyZmFjZSo+KGpfcnRwX3NlbmRlcl9wb2ludGVyKQotICAgICAg
ICAgIC0+R2V0UGFyYW1ldGVycygpOwotICByZXR1cm4gSnNlcFJ0cFBhcmFtZXRlcnNUb0phdmFS
dHBQYXJhbWV0ZXJzKGpuaSwgcGFyYW1ldGVycyk7Ci19Ci0KLUpPVyhqc3RyaW5nLCBSdHBSZWNl
aXZlcl9uYXRpdmVJZCkoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9ydHBfcmVj
ZWl2ZXJfcG9pbnRlcikgewotICByZXR1cm4gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoCi0gICAg
ICBqbmksCi0gICAgICByZWludGVycHJldF9jYXN0PFJ0cFJlY2VpdmVySW50ZXJmYWNlKj4oal9y
dHBfcmVjZWl2ZXJfcG9pbnRlciktPmlkKCkpOwotfQotCi1KT1codm9pZCwgUnRwUmVjZWl2ZXJf
ZnJlZSkoSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9ydHBfcmVjZWl2ZXJfcG9pbnRlcikg
ewotICByZWludGVycHJldF9jYXN0PFJ0cFJlY2VpdmVySW50ZXJmYWNlKj4oal9ydHBfcmVjZWl2
ZXJfcG9pbnRlciktPlJlbGVhc2UoKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2puaS9zdXJmYWNldGV4dHVyZWhlbHBlcl9qbmkuY2MKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3N1cmZh
Y2V0ZXh0dXJlaGVscGVyX2puaS5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3N1cmZhY2V0ZXh0
dXJlaGVscGVyX2puaS5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDgyICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvc3VyZmFjZXRl
eHR1cmVoZWxwZXJfam5pLmgiCi0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2Ns
YXNzcmVmZXJlbmNlaG9sZGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYmluZC5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2xvZ2dp
bmcuaCIKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi1ydGM6OnNjb3BlZF9yZWZwdHI8U3Vy
ZmFjZVRleHR1cmVIZWxwZXI+IFN1cmZhY2VUZXh0dXJlSGVscGVyOjpjcmVhdGUoCi0gICAgSk5J
RW52KiBqbmksCi0gICAgY29uc3QgY2hhciogdGhyZWFkX25hbWUsCi0gICAgam9iamVjdCBqX2Vn
bF9jb250ZXh0KSB7Ci0gIGpvYmplY3Qgal9zdXJmYWNlX3RleHR1cmVfaGVscGVyID0gam5pLT5D
YWxsU3RhdGljT2JqZWN0TWV0aG9kKAotICAgICAgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMv
U3VyZmFjZVRleHR1cmVIZWxwZXIiKSwKLSAgICAgIEdldFN0YXRpY01ldGhvZElEKGpuaSwgRmlu
ZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXIiKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICJjcmVhdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgIihMamF2
YS9sYW5nL1N0cmluZztMb3JnL3dlYnJ0Yy9FZ2xCYXNlJENvbnRleHQ7KSIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICJMb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlcjsiKSwKLSAgICAg
IGpuaS0+TmV3U3RyaW5nVVRGKHRocmVhZF9uYW1lKSwgal9lZ2xfY29udGV4dCk7Ci0gIENIRUNL
X0VYQ0VQVElPTihqbmkpCi0gICAgICA8PCAiZXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uIG9m
IEphdmEgU3VyZmFjZVRleHR1cmVIZWxwZXIiOwotICBpZiAoSXNOdWxsKGpuaSwgal9zdXJmYWNl
X3RleHR1cmVfaGVscGVyKSkKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgcmV0dXJuIG5ldyBydGM6
OlJlZkNvdW50ZWRPYmplY3Q8U3VyZmFjZVRleHR1cmVIZWxwZXI+KAotICAgICAgam5pLCBqX3N1
cmZhY2VfdGV4dHVyZV9oZWxwZXIpOwotfQotCi1TdXJmYWNlVGV4dHVyZUhlbHBlcjo6U3VyZmFj
ZVRleHR1cmVIZWxwZXIoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgam9iamVjdCBqX3N1cmZhY2VfdGV4dHVyZV9oZWxwZXIpCi0gICAgOiBq
X3N1cmZhY2VfdGV4dHVyZV9oZWxwZXJfKGpuaSwgal9zdXJmYWNlX3RleHR1cmVfaGVscGVyKSwK
LSAgICAgIGpfcmV0dXJuX3RleHR1cmVfbWV0aG9kXygKLSAgICAgICAgICBHZXRNZXRob2RJRChq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU3Vy
ZmFjZVRleHR1cmVIZWxwZXIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuVGV4dHVy
ZUZyYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgICAiKClWIikpIHsKLSAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBpbml0aWFsaXphdGlvbiBvZiBTdXJmYWNlVGV4dHVy
ZUhlbHBlciI7Ci19Ci0KLVN1cmZhY2VUZXh0dXJlSGVscGVyOjp+U3VyZmFjZVRleHR1cmVIZWxw
ZXIoKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiU3VyZmFjZVRleHR1cmVIZWxwZXIgZHRvciI7Ci0g
IEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIGpuaS0+Q2Fs
bFZvaWRNZXRob2QoCi0gICAgICAqal9zdXJmYWNlX3RleHR1cmVfaGVscGVyXywKLSAgICAgIEdl
dE1ldGhvZElEKGpuaSwgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVI
ZWxwZXIiKSwKLSAgICAgICAgICAgICAgICAgICJkaXNwb3NlIiwgIigpViIpKTsKLQotICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIFN1cmZhY2VUZXh0dXJlSGVscGVyLmRp
c3Bvc2UoKSI7Ci19Ci0KLWpvYmplY3QgU3VyZmFjZVRleHR1cmVIZWxwZXI6OkdldEphdmFTdXJm
YWNlVGV4dHVyZUhlbHBlcigpIGNvbnN0IHsKLSAgcmV0dXJuICpqX3N1cmZhY2VfdGV4dHVyZV9o
ZWxwZXJfOwotfQotCi12b2lkIFN1cmZhY2VUZXh0dXJlSGVscGVyOjpSZXR1cm5UZXh0dXJlRnJh
bWUoKSBjb25zdCB7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVk
KCk7Ci0gIGpuaS0+Q2FsbFZvaWRNZXRob2QoKmpfc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl8sIGpf
cmV0dXJuX3RleHR1cmVfbWV0aG9kXyk7Ci0KLSAgQ0hFQ0tfRVhDRVBUSU9OKAotICAgICAgam5p
KSA8PCAiZXJyb3IgZHVyaW5nIFN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFt
ZSI7Ci19Ci0KLXJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+Ci1T
dXJmYWNlVGV4dHVyZUhlbHBlcjo6Q3JlYXRlVGV4dHVyZUZyYW1lKGludCB3aWR0aCwgaW50IGhl
aWdodCwKLSAgICBjb25zdCBOYXRpdmVIYW5kbGVJbXBsJiBuYXRpdmVfaGFuZGxlKSB7Ci0gIHJl
dHVybiBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PEFuZHJvaWRUZXh0dXJlQnVmZmVyPigKLSAg
ICAgIHdpZHRoLCBoZWlnaHQsIG5hdGl2ZV9oYW5kbGUsICpqX3N1cmZhY2VfdGV4dHVyZV9oZWxw
ZXJfLAotICAgICAgcnRjOjpCaW5kKCZTdXJmYWNlVGV4dHVyZUhlbHBlcjo6UmV0dXJuVGV4dHVy
ZUZyYW1lLCB0aGlzKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
c3VyZmFjZXRleHR1cmVoZWxwZXJfam5pLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3N1cmZhY2V0ZXh0dXJl
aGVscGVyX2puaS5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvc3VyZmFjZXRleHR1cmVoZWxwZXJf
am5pLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaWZuZGVmIFdFQlJUQ19BUElfSkFWQV9KTklfU1VSRkFDRVRFWFRVUkVIRUxQRVJfSk5JX0hf
Ci0jZGVmaW5lIFdFQlJUQ19BUElfSkFWQV9KTklfU1VSRkFDRVRFWFRVUkVIRUxQRVJfSk5JX0hf
Ci0KLSNpbmNsdWRlIDxqbmkuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
am5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9o
YW5kbGVfaW1wbC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3JlZmNvdW50LmgiCi0jaW5jbHVk
ZSAid2VicnRjL2Jhc2Uvc2NvcGVkX3JlZl9wdHIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvY29tbW9u
X3ZpZGVvL2luY2x1ZGUvdmlkZW9fZnJhbWVfYnVmZmVyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGNf
am5pIHsKLQotLy8gSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhbmQgc3luY2hyb25pemUgYWNjZXNz
IHRvIGFuIEFuZHJvaWQgU3VyZmFjZVRleHR1cmUuCi0vLyBJdCBpcyB1c2VkIGZvciBjcmVhdGlu
ZyB3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXJzIGZyb20gYSBTdXJmYWNlVGV4dHVyZSB3aGVuCi0v
LyB0aGUgU3VyZmFjZVRleHR1cmUgaGFzIGJlZW4gdXBkYXRlZC4KLS8vIFdoZW4gdGhlIFZpZGVv
RnJhbWVCdWZmZXIgaXMgcmVsZWFzZWQsIHRoaXMgY2xhc3MgcmV0dXJucyB0aGUgYnVmZmVyIHRv
IHRoZQotLy8gamF2YSBTdXJmYWNlVGV4dHVyZUhlbHBlciBzbyBpdCBjYW4gYmUgdXBkYXRlZCBz
YWZlbHkuIFRoZSBWaWRlb0ZyYW1lQnVmZmVyCi0vLyBjYW4gYmUgcmVsZWFzZWQgb24gYW4gYXJi
aXRyYXJ5IHRocmVhZC4KLS8vIFN1cmZhY2VUZXh0dXJlSGVscGVyIGlzIHJlZmVyZW5jZSBjb3Vu
dGVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG5vdAotLy8gZGVzdHJveWVkIHdoaWxlIGEgVmlk
ZW9GcmFtZUJ1ZmZlciBpcyBpbiB1c2UuCi0vLyBUaGlzIGNsYXNzIGlzIHRoZSBDKysgY291bnRl
cnBhcnQgb2YgdGhlIGphdmEgY2xhc3MgU3VyZmFjZVRleHR1cmVIZWxwZXIuCi0vLyBJdCBvd25z
IHRoZSBjb3JyZXNwb25kaW5nIGphdmEgb2JqZWN0LCBhbmQgY2FsbHMgdGhlIGphdmEgZGlzcG9z
ZQotLy8gbWV0aG9kIHdoZW4gZGVzdHJveWVkLgotLy8gVXNhZ2U6Ci0vLyAxLiBDcmVhdGUgYW4g
aW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4KLS8vIDIuIEdldCB0aGUgSmF2YSBTdXJmYWNlVGV4dHVy
ZUhlbHBlciB3aXRoIEdldEphdmFTdXJmYWNlVGV4dHVyZUhlbHBlcigpLgotLy8gMy4gUmVnaXN0
ZXIgYSBsaXN0ZW5lciB0byB0aGUgSmF2YSBTdXJmYWNlTGlzdGVuZXIgYW5kIHN0YXJ0IHByb2R1
Y2luZwotLy8gbmV3IGJ1ZmZlcnMuCi0vLyA0LiBDYWxsIENyZWF0ZVRleHR1cmVGcmFtZSB0byB3
cmFwIHRoZSBKYXZhIHRleHR1cmUgaW4gYSBWaWRlb0ZyYW1lQnVmZmVyLgotY2xhc3MgU3VyZmFj
ZVRleHR1cmVIZWxwZXIgOiBwdWJsaWMgcnRjOjpSZWZDb3VudEludGVyZmFjZSB7Ci0gcHVibGlj
OgotICAvLyBNaWdodCByZXR1cm4gbnVsbCBpZiBjcmVhdGluZyB0aGUgSmF2YSBTdXJmYWNlVGV4
dHVyZUhlbHBlciBmYWlscy4KLSAgc3RhdGljIHJ0Yzo6c2NvcGVkX3JlZnB0cjxTdXJmYWNlVGV4
dHVyZUhlbHBlcj4gY3JlYXRlKAotICAgICAgSk5JRW52KiBqbmksIGNvbnN0IGNoYXIqIHRocmVh
ZF9uYW1lLCBqb2JqZWN0IGpfZWdsX2NvbnRleHQpOwotCi0gIGpvYmplY3QgR2V0SmF2YVN1cmZh
Y2VUZXh0dXJlSGVscGVyKCkgY29uc3Q7Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6
VmlkZW9GcmFtZUJ1ZmZlcj4gQ3JlYXRlVGV4dHVyZUZyYW1lKAotICAgICAgaW50IHdpZHRoLAot
ICAgICAgaW50IGhlaWdodCwKLSAgICAgIGNvbnN0IE5hdGl2ZUhhbmRsZUltcGwmIG5hdGl2ZV9o
YW5kbGUpOwotCi0gIC8vIE1heSBiZSBjYWxsZWQgb24gYXJiaXRyYXJ5IHRocmVhZC4KLSAgdm9p
ZCBSZXR1cm5UZXh0dXJlRnJhbWUoKSBjb25zdDsKLQotIHByb3RlY3RlZDoKLSAgflN1cmZhY2VU
ZXh0dXJlSGVscGVyKCk7Ci0gIFN1cmZhY2VUZXh0dXJlSGVscGVyKEpOSUVudiogam5pLCBqb2Jq
ZWN0IGpfc3VyZmFjZV90ZXh0dXJlX2hlbHBlcik7Ci0KLSBwcml2YXRlOgotICBjb25zdCBTY29w
ZWRHbG9iYWxSZWY8am9iamVjdD4gal9zdXJmYWNlX3RleHR1cmVfaGVscGVyXzsKLSAgY29uc3Qg
am1ldGhvZElEIGpfcmV0dXJuX3RleHR1cmVfbWV0aG9kXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFj
ZSB3ZWJydGNfam5pCi0KLSNlbmRpZiAgLy8gV0VCUlRDX0FQSV9KQVZBX0pOSV9TVVJGQUNFVEVY
VFVSRUhFTFBFUl9KTklfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZHRlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvQW5kcm9p
ZE1hbmlmZXN0LnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDI5ICswLDAgQEAKLTw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0
cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIHBhY2thZ2U9Im9y
Zy53ZWJydGMudGVzdCIKLSAgICBhbmRyb2lkOnZlcnNpb25Db2RlPSIxIgotICAgIGFuZHJvaWQ6
dmVyc2lvbk5hbWU9IjEuMCIgPgotICAgIDx1c2VzLWZlYXR1cmUgYW5kcm9pZDpuYW1lPSJhbmRy
b2lkLmhhcmR3YXJlLmNhbWVyYSIgLz4KLSAgICA8dXNlcy1mZWF0dXJlIGFuZHJvaWQ6bmFtZT0i
YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuYXV0b2ZvY3VzIiAvPgotICAgIDx1c2VzLWZlYXR1cmUg
YW5kcm9pZDpnbEVzVmVyc2lvbj0iMHgwMDAyMDAwMCIgYW5kcm9pZDpyZXF1aXJlZD0idHJ1ZSIg
Lz4KLQotICAgIDx1c2VzLXNkayBhbmRyb2lkOm1pblNka1ZlcnNpb249IjE0IiBhbmRyb2lkOnRh
cmdldFNka1ZlcnNpb249IjIxIiAvPgotCi0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5h
bWU9ImFuZHJvaWQucGVybWlzc2lvbi5DQU1FUkEiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBh
bmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MiIC8+
Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5S
RUNPUkRfQVVESU8iIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJv
aWQucGVybWlzc2lvbi5JTlRFUk5FVCIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6
bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldSSVRFX0VYVEVSTkFMX1NUT1JBR0UiLz4KLSAgICA8
dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19O
RVRXT1JLX1NUQVRFIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRy
b2lkLnBlcm1pc3Npb24uQ0hBTkdFX05FVFdPUktfU1RBVEUiIC8+Ci0KLSAgICA8aW5zdHJ1bWVu
dGF0aW9uCi0gICAgICAgIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlv
blRlc3RSdW5uZXIiCi0gICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0ib3JnLndlYnJ0Yy50
ZXN0IiAvPgotCi0gICAgPGFwcGxpY2F0aW9uCi0gICAgICAgIGFuZHJvaWQ6bGFiZWw9IkFuZHJv
aWRQZWVyY29ubmVjdGlvblRlc3RzIiA+Ci0gICAgICAgIDx1c2VzLWxpYnJhcnkgYW5kcm9pZDpu
YW1lPSJhbmRyb2lkLnRlc3QucnVubmVyIiAvPgotICAgIDwvYXBwbGljYXRpb24+Ci0KLTwvbWFu
aWZlc3Q+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL09XTkVSUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL09XTkVSUwkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWR0ZXN0cy9PV05FUlMJKG5vbmV4aXN0ZW50KQpAQCAtMSArMCwwIEBACi1tYWdqZWRA
d2VicnRjLm9yZwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWR0ZXN0cy9hbnQucHJvcGVydGllcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL2FudC5w
cm9wZXJ0aWVzCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL2FudC5wcm9wZXJ0aWVzCShub25leGlz
dGVudCkKQEAgLTEsMTggKzAsMCBAQAotIyBUaGlzIGZpbGUgaXMgdXNlZCB0byBvdmVycmlkZSBk
ZWZhdWx0IHZhbHVlcyB1c2VkIGJ5IHRoZSBBbnQgYnVpbGQgc3lzdGVtLgotIwotIyBUaGlzIGZp
bGUgbXVzdCBiZSBjaGVja2VkIGludG8gVmVyc2lvbiBDb250cm9sIFN5c3RlbXMsIGFzIGl0IGlz
Ci0jIGludGVncmFsIHRvIHRoZSBidWlsZCBzeXN0ZW0gb2YgeW91ciBwcm9qZWN0LgotCi0jIFRo
aXMgZmlsZSBpcyBvbmx5IHVzZWQgYnkgdGhlIEFudCBzY3JpcHQuCi0KLSMgWW91IGNhbiB1c2Ug
dGhpcyB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBzdWNoIGFzCi0jICAnc291cmNlLmRpcicg
Zm9yIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGphdmEgc291cmNlIGZvbGRlciBhbmQKLSMgICdvdXQu
ZGlyJyBmb3IgdGhlIGxvY2F0aW9uIG9mIHlvdXIgb3V0cHV0IGZvbGRlci4KLQotIyBZb3UgY2Fu
IGFsc28gdXNlIGl0IGRlZmluZSBob3cgdGhlIHJlbGVhc2UgYnVpbGRzIGFyZSBzaWduZWQgYnkg
ZGVjbGFyaW5nCi0jIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKLSMgICdrZXkuc3RvcmUnIGZv
ciB0aGUgbG9jYXRpb24gb2YgeW91ciBrZXlzdG9yZSBhbmQKLSMgICdrZXkuYWxpYXMnIGZvciB0
aGUgbmFtZSBvZiB0aGUga2V5IHRvIHVzZS4KLSMgVGhlIHBhc3N3b3JkIHdpbGwgYmUgYXNrZWQg
ZHVyaW5nIHRoZSBidWlsZCB3aGVuIHlvdSB1c2UgdGhlICdyZWxlYXNlJyB0YXJnZXQuCi0KLXNv
dXJjZS5kaXI9Li4vamF2YS90ZXN0Y29tbW9uL3NyYztzcmMKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL2J1aWxkLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL2J1aWxkLnhtbAkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWR0ZXN0cy9idWlsZC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MiArMCww
IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QgbmFt
ZT0ibGliamluZ2xlX3BlZXJjb25uZWN0aW9uX2FuZHJvaWRfdW5pdHRlc3QiIGRlZmF1bHQ9Imhl
bHAiPgotCi0gICAgPCEtLSBUaGUgbG9jYWwucHJvcGVydGllcyBmaWxlIGlzIGNyZWF0ZWQgYW5k
IHVwZGF0ZWQgYnkgdGhlICdhbmRyb2lkJyB0b29sLgotICAgICAgICAgSXQgY29udGFpbnMgdGhl
IHBhdGggdG8gdGhlIFNESy4gSXQgc2hvdWxkICpOT1QqIGJlIGNoZWNrZWQgaW50bwotICAgICAg
ICAgVmVyc2lvbiBDb250cm9sIFN5c3RlbXMuIC0tPgotICAgIDxwcm9wZXJ0eSBmaWxlPSJsb2Nh
bC5wcm9wZXJ0aWVzIiAvPgotCi0gICAgPCEtLSBUaGUgYW50LnByb3BlcnRpZXMgZmlsZSBjYW4g
YmUgY3JlYXRlZCBieSB5b3UuIEl0IGlzIG9ubHkgZWRpdGVkIGJ5IHRoZQotICAgICAgICAgJ2Fu
ZHJvaWQnIHRvb2wgdG8gYWRkIHByb3BlcnRpZXMgdG8gaXQuCi0gICAgICAgICBUaGlzIGlzIHRo
ZSBwbGFjZSB0byBjaGFuZ2Ugc29tZSBBbnQgc3BlY2lmaWMgYnVpbGQgcHJvcGVydGllcy4KLSAg
ICAgICAgIEhlcmUgYXJlIHNvbWUgcHJvcGVydGllcyB5b3UgbWF5IHdhbnQgdG8gY2hhbmdlL3Vw
ZGF0ZToKLQotICAgICAgICAgc291cmNlLmRpcgotICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRo
ZSBzb3VyY2UgZGlyZWN0b3J5LiBEZWZhdWx0IGlzICdzcmMnLgotICAgICAgICAgb3V0LmRpcgot
ICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiBEZWZhdWx0IGlz
ICdiaW4nLgotCi0gICAgICAgICBGb3Igb3RoZXIgb3ZlcnJpZGFibGUgcHJvcGVydGllcywgbG9v
ayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydWxlcwotICAgICAgICAgZmlsZXMgaW4gdGhlIFNE
SywgYXQgdG9vbHMvYW50L2J1aWxkLnhtbAotCi0gICAgICAgICBQcm9wZXJ0aWVzIHJlbGF0ZWQg
dG8gdGhlIFNESyBsb2NhdGlvbiBvciB0aGUgcHJvamVjdCB0YXJnZXQgc2hvdWxkCi0gICAgICAg
ICBiZSB1cGRhdGVkIHVzaW5nIHRoZSAnYW5kcm9pZCcgdG9vbCB3aXRoIHRoZSAndXBkYXRlJyBh
Y3Rpb24uCi0KLSAgICAgICAgIFRoaXMgZmlsZSBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBi
dWlsZCBzeXN0ZW0gZm9yIHlvdXIKLSAgICAgICAgIGFwcGxpY2F0aW9uIGFuZCBzaG91bGQgYmUg
Y2hlY2tlZCBpbnRvIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zLgotCi0gICAgICAgICAtLT4KLSAg
ICA8cHJvcGVydHkgZmlsZT0iYW50LnByb3BlcnRpZXMiIC8+Ci0KLSAgICA8IS0tIGlmIHNkay5k
aXIgd2FzIG5vdCBzZXQgZnJvbSBvbmUgb2YgdGhlIHByb3BlcnR5IGZpbGUsIHRoZW4KLSAgICAg
ICAgIGdldCBpdCBmcm9tIHRoZSBBTkRST0lEX0hPTUUgZW52IHZhci4KLSAgICAgICAgIFRoaXMg
bXVzdCBiZSBkb25lIGJlZm9yZSB3ZSBsb2FkIHByb2plY3QucHJvcGVydGllcyBzaW5jZQotICAg
ICAgICAgdGhlIHByb2d1YXJkIGNvbmZpZyBjYW4gdXNlIHNkay5kaXIgLS0+Ci0gICAgPHByb3Bl
cnR5IGVudmlyb25tZW50PSJlbnYiIC8+Ci0gICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ic2RrLmRp
ciIgdmFsdWU9IiR7ZW52LkFORFJPSURfU0RLX1JPT1R9Ij4KLSAgICAgICAgPGlzc2V0IHByb3Bl
cnR5PSJlbnYuQU5EUk9JRF9TREtfUk9PVCIgLz4KLSAgICA8L2NvbmRpdGlvbj4KLQotICAgIDwh
LS0gVGhlIHByb2plY3QucHJvcGVydGllcyBmaWxlIGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZWQgYnkg
dGhlICdhbmRyb2lkJwotICAgICAgICAgdG9vbCwgYXMgd2VsbCBhcyBBRFQuCi0KLSAgICAgICAg
IFRoaXMgY29udGFpbnMgcHJvamVjdCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHN1Y2ggYXMgcHJvamVj
dCB0YXJnZXQsIGFuZCBsaWJyYXJ5Ci0gICAgICAgICBkZXBlbmRlbmNpZXMuIExvd2VyIGxldmVs
IGJ1aWxkIHByb3BlcnRpZXMgYXJlIHN0b3JlZCBpbiBhbnQucHJvcGVydGllcwotICAgICAgICAg
KG9yIGluIC5jbGFzc3BhdGggZm9yIEVjbGlwc2UgcHJvamVjdHMpLgotCi0gICAgICAgICBUaGlz
IGZpbGUgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgYnVpbGQgc3lzdGVtIGZvciB5b3VyCi0g
ICAgICAgICBhcHBsaWNhdGlvbiBhbmQgc2hvdWxkIGJlIGNoZWNrZWQgaW50byBWZXJzaW9uIENv
bnRyb2wgU3lzdGVtcy4gLS0+Ci0gICAgPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InByb2plY3Qu
cHJvcGVydGllcyIgLz4KLQotICAgIDwhLS0gcXVpY2sgY2hlY2sgb24gc2RrLmRpciAtLT4KLSAg
ICA8ZmFpbAotICAgICAgICAgICAgbWVzc2FnZT0ic2RrLmRpciBpcyBtaXNzaW5nLiBNYWtlIHN1
cmUgdG8gZ2VuZXJhdGUgbG9jYWwucHJvcGVydGllcyB1c2luZyAnYW5kcm9pZCB1cGRhdGUgcHJv
amVjdCcgb3IgdG8gaW5qZWN0IGl0IHRocm91Z2ggdGhlIEFORFJPSURfSE9NRSBlbnZpcm9ubWVu
dCB2YXJpYWJsZS4iCi0gICAgICAgICAgICB1bmxlc3M9InNkay5kaXIiCi0gICAgLz4KLQotICAg
IDwhLS0KLSAgICAgICAgSW1wb3J0IHBlciBwcm9qZWN0IGN1c3RvbSBidWlsZCBydWxlcyBpZiBw
cmVzZW50IGF0IHRoZSByb290IG9mIHRoZSBwcm9qZWN0LgotICAgICAgICBUaGlzIGlzIHRoZSBw
bGFjZSB0byBwdXQgY3VzdG9tIGludGVybWVkaWFyeSB0YXJnZXRzIHN1Y2ggYXM6Ci0gICAgICAg
ICAgICAtcHJlLWJ1aWxkCi0gICAgICAgICAgICAtcHJlLWNvbXBpbGUKLSAgICAgICAgICAgIC1w
b3N0LWNvbXBpbGUgKFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGNvZGUgb2JmdXNjYXRpb24u
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxlZCBjb2RlIGxvY2F0aW9uOiAke291
dC5jbGFzc2VzLmFic29sdXRlLmRpcn0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRo
aXMgaXMgbm90IGRvbmUgaW4gcGxhY2UsIG92ZXJyaWRlICR7b3V0LmRleC5pbnB1dC5hYnNvbHV0
ZS5kaXJ9KQotICAgICAgICAgICAgLXBvc3QtcGFja2FnZQotICAgICAgICAgICAgLXBvc3QtYnVp
bGQKLSAgICAgICAgICAgIC1wcmUtY2xlYW4KLSAgICAtLT4KLSAgICA8aW1wb3J0IGZpbGU9ImN1
c3RvbV9ydWxlcy54bWwiIG9wdGlvbmFsPSJ0cnVlIiAvPgotCi0gICAgPCEtLSBJbXBvcnQgdGhl
IGFjdHVhbCBidWlsZCBmaWxlLgotCi0gICAgICAgICBUbyBjdXN0b21pemUgZXhpc3RpbmcgdGFy
Z2V0cywgdGhlcmUgYXJlIHR3byBvcHRpb25zOgotICAgICAgICAgLSBDdXN0b21pemUgb25seSBv
bmUgdGFyZ2V0OgotICAgICAgICAgICAgIC0gY29weS9wYXN0ZSB0aGUgdGFyZ2V0IGludG8gdGhp
cyBmaWxlLCAqYmVmb3JlKiB0aGUKLSAgICAgICAgICAgICAgIDxpbXBvcnQ+IHRhc2suCi0gICAg
ICAgICAgICAgLSBjdXN0b21pemUgaXQgdG8geW91ciBuZWVkcy4KLSAgICAgICAgIC0gQ3VzdG9t
aXplIHRoZSB3aG9sZSBjb250ZW50IG9mIGJ1aWxkLnhtbAotICAgICAgICAgICAgIC0gY29weS9w
YXN0ZSB0aGUgY29udGVudCBvZiB0aGUgcnVsZXMgZmlsZXMgKG1pbnVzIHRoZSB0b3Agbm9kZSkK
LSAgICAgICAgICAgICAgIGludG8gdGhpcyBmaWxlLCByZXBsYWNpbmcgdGhlIDxpbXBvcnQ+IHRh
c2suCi0gICAgICAgICAgICAgLSBjdXN0b21pemUgdG8geW91ciBuZWVkcy4KLQotICAgICAgICAg
KioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICoqKioqKiBJTVBPUlRBTlQgKioqKioq
Ci0gICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgSW4gYWxsIGNhc2Vz
IHlvdSBtdXN0IHVwZGF0ZSB0aGUgdmFsdWUgb2YgdmVyc2lvbi10YWcgYmVsb3cgdG8gcmVhZCAn
Y3VzdG9tJyBpbnN0ZWFkIG9mIGFuIGludGVnZXIsCi0gICAgICAgICBpbiBvcmRlciB0byBhdm9p
ZCBoYXZpbmcgeW91ciBmaWxlIGJlIG92ZXJyaWRkZW4gYnkgdG9vbHMgc3VjaCBhcyAiYW5kcm9p
ZCB1cGRhdGUgcHJvamVjdCIKLSAgICAtLT4KLSAgICA8IS0tIHZlcnNpb24tdGFnOiAxIC0tPgot
ICAgIDxpbXBvcnQgZmlsZT0iJHtzZGsuZGlyfS90b29scy9hbnQvYnVpbGQueG1sIiAvPgotCi08
L3Byb2plY3Q+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3Byb2plY3QucHJvcGVydGllcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3By
b2plY3QucHJvcGVydGllcwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9wcm9qZWN0LnByb3BlcnRp
ZXMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNiArMCwwIEBACi0jIFRoaXMgZmlsZSBpcyBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBieSBBbmRyb2lkIFRvb2xzLgotIyBEbyBub3QgbW9kaWZ5IHRoaXMg
ZmlsZSAtLSBZT1VSIENIQU5HRVMgV0lMTCBCRSBFUkFTRUQhCi0jCi0jIFRoaXMgZmlsZSBtdXN0
IGJlIGNoZWNrZWQgaW4gVmVyc2lvbiBDb250cm9sIFN5c3RlbXMuCi0jCi0jIFRvIGN1c3RvbWl6
ZSBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIEFudCBidWlsZCBzeXN0ZW0gZWRpdAotIyAiYW50LnBy
b3BlcnRpZXMiLCBhbmQgb3ZlcnJpZGUgdmFsdWVzIHRvIGFkYXB0IHRoZSBzY3JpcHQgdG8geW91
cgotIyBwcm9qZWN0IHN0cnVjdHVyZS4KLSMKLSMgVG8gZW5hYmxlIFByb0d1YXJkIHRvIHNocmlu
ayBhbmQgb2JmdXNjYXRlIHlvdXIgY29kZSwgdW5jb21tZW50IHRoaXMgKGF2YWlsYWJsZSBwcm9w
ZXJ0aWVzOiBzZGsuZGlyLCB1c2VyLmhvbWUpOgotI3Byb2d1YXJkLmNvbmZpZz0ke3Nkay5kaXJ9
L3Rvb2xzL3Byb2d1YXJkL3Byb2d1YXJkLWFuZHJvaWQudHh0OnByb2d1YXJkLXByb2plY3QudHh0
Ci0KLSMgUHJvamVjdCB0YXJnZXQuCi10YXJnZXQ9YW5kcm9pZC0yMgotCi1qYXZhLmNvbXBpbGVy
YXJncz0tWGxpbnQ6YWxsIC1XZXJyb3IKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1
bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVz
dHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVz
L2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jl
cy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdh
YmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUg
bWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhpc3Rl
bnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVy
LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
dGVzdHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90
IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1
bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIu
cG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVy
LnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1t
ZHBpL2ljX2xhdW5jaGVyLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMg
LTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3
YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUt
eGhkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJs
ZS14aGRwaS9pY19sYXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0
ZXN0cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRl
ZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzL3N0cmlu
Z3MueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCShub25leGlzdGVudCkKQEAgLTEs
NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHJlc291
cmNlcz4KLQotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPkFuZHJvaWRQZWVyQ29ubmVjdGlv
blRlc3RzPC9zdHJpbmc+Ci0KLTwvcmVzb3VyY2VzPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9D
YW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0LmphdmEJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdC
eXRlQnVmZmVyVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29u
dGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2Fz
ZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTGFyZ2VUZXN0
OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0
OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7
Ci0KLXB1YmxpYyBjbGFzcyBDYW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0IGV4dGVu
ZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9
ICJDYW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0IjsKLQotICBwcml2YXRlIGNsYXNz
IFRlc3RPYmplY3RGYWN0b3J5IGV4dGVuZHMgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJl
cy5UZXN0T2JqZWN0RmFjdG9yeSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4g
aXNDYXB0dXJpbmdUb1RleHR1cmUoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENhbWVyYUVudW1lcmF0b3IgZ2V0Q2FtZXJhRW51bWVy
YXRvcigpIHsKLSAgICAgIHJldHVybiBuZXcgQ2FtZXJhMUVudW1lcmF0b3IoZmFsc2UpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKSB7
Ci0gICAgICByZXR1cm4gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpOwot
ICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIE9iamVjdCByYXdPcGVuQ2FtZXJhKFN0cmluZyBjYW1lcmFOYW1lKSB7
Ci0gICAgICByZXR1cm4gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEub3BlbihDYW1lcmExRW51bWVy
YXRvci5nZXRDYW1lcmFJbmRleChjYW1lcmFOYW1lKSk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNz
V2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBy
YXdDbG9zZUNhbWVyYShPYmplY3QgY2FtZXJhKSB7Ci0gICAgICAoKGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhKSBjYW1lcmEpLnJlbGVhc2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIENhbWVy
YVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMgZml4dHVyZXM7Ci0KLSAgQE92ZXJyaWRlCi0gIHBy
b3RlY3RlZCB2b2lkIHNldFVwKCkgewotICAgIGZpeHR1cmVzID0gbmV3IENhbWVyYVZpZGVvQ2Fw
dHVyZXJUZXN0Rml4dHVyZXMobmV3IFRlc3RPYmplY3RGYWN0b3J5KCkpOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotICAgIGZpeHR1cmVzLmRpc3Bv
c2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUFuZERp
c3Bvc2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0
ZUNhcHR1cmVyQW5kRGlzcG9zZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0Q3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGZpeHR1cmVzLmNyZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCk7Ci0gIH0KLQotICAv
LyBUaGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBm
cmFtZXMgYXJlIGZvcndhcmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcg
YSAiZGVmYXVsdCIgY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRo
ZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVDYXB0
dXJlckFuZFJlbmRlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVy
ZXMuY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0
IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2Fy
ZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyB0aGUgZnJvbnQgZmFjaW5n
IHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysr
IGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRGcm9udEZhY2lu
Z1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLmNyZWF0ZUZyb250RmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRo
aXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1l
cyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyB0aGUg
YmFjayBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEg
YW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFy
dEJhY2tGYWNpbmdWaWRlb0NhcHR1cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBmaXh0dXJlcy5jcmVhdGVCYWNrRmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQot
Ci0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBkZWZhdWx0IGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBh
bmQgdGhhdCB0aGUgY2FtZXJhIGNhbgotICAvLyBsYXRlciBiZSBzd2l0Y2hlZCB0byBhbm90aGVy
IGNhbWVyYS4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4K
LSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN3aXRjaFZpZGVvQ2FwdHVyZXIoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN3aXRjaENhbWVyYSgp
OwotICB9Ci0KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYUV2ZW50cygp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY2FtZXJhRXZlbnRz
SW52b2tlZCgpOwotICB9Ci0KLSAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiBhdHRlbXB0aW5n
IHRvIGNhbGwgZS5nLiBzd2l0Y2hDYW1lcmEoKSBhZnRlciBjYW1lcmEgaGFzIGJlZW4gc3RvcHBl
ZC4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYUNhbGxzQWZ0ZXJTdG9w
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFDYWxs
c0FmdGVyU3RvcCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIFZpZGVvU291cmNl
IHRoYXQgdGhlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgY29ubmVjdGVkIHRvIGNhbgotICAvLyBi
ZSBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQuIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBD
KysgbGF5ZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0b3BSZXN0YXJ0Vmlk
ZW9Tb3VyY2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0
b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBj
YW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYXQgZGlmZmVyZW50IHJlc29sdXRpb25zLgotICAvLyBJdCBk
b2VzIG5vdCB0ZXN0IG9yIHVzZSB0aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RTdGFydFN0b3BXaXRoRGlmZmVyZW50UmVzb2x1dGlvbnMoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRS
ZXNvbHV0aW9ucygpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHdoYXQgaGFwcGVucyBpZiBidWZm
ZXJzIGFyZSByZXR1cm5lZCBhZnRlciB0aGUgY2FwdHVyZXIgaGF2ZQotICAvLyBiZWVuIHN0b3Bw
ZWQgYW5kIHJlc3RhcnRlZC4gSXQgZG9lcyBub3QgdGVzdCBvciB1c2UgdGhlIEMrKyBsYXllci4K
LSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZSgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZSgp
OwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgd2UgY2FuIGNhcHR1cmUgZnJhbWVzLCBrZWVw
IHRoZSBmcmFtZXMgaW4gYSBsb2NhbCByZW5kZXJlciwgc3RvcCBjYXB0dXJpbmcsCi0gIC8vIGFu
ZCB0aGVuIHJldHVybiB0aGUgZnJhbWVzLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0ZXN0
IHRlc3RSZXR1cm5CdWZmZXJMYXRlKCkgaXMgdGhhdCB3ZQotICAvLyBhbHNvIHRlc3QgdGhlIEpO
SSBhbmQgQysrIEFuZHJvaWRWaWRlb0NhcHR1cmVyIHBhcnRzLgotICBATWVkaXVtVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZUVuZFRvRW5kKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKTsK
LSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGZyYW1lcyBmb3J3YXJkZWQgdG8gYSByZW5kZXJl
ciBpcyBzY2FsZWQgaWYgYWRhcHRPdXRwdXRGb3JtYXQgaXMKLSAgLy8gY2FsbGVkLiBUaGlzIHRl
c3QgYm90aCBKYXZhIGFuZCBDKysgcGFydHMgb2Ygb2YgdGhlIHN0YWNrLgotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0U2NhbGVDYW1lcmFPdXRwdXQoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnNjYWxlQ2FtZXJhT3V0cHV0KCk7Ci0gIH0KLQot
ICAvLyBUaGlzIHRlc3QgdGhhdCBhbiBlcnJvciBpcyByZXBvcnRlZCBpZiB0aGUgY2FtZXJhIGlz
IGFscmVhZHkgb3BlbmVkCi0gIC8vIHdoZW4gQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBzdGFydGVk
LgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJl
YWR5T3BlbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3Rh
cnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0
IENhbWVyYVZpZGVvQ2FwdHVyZXIgY2FuIGJlIHN0YXJ0ZWQsIGV2ZW4gaWYgdGhlIGNhbWVyYSBp
cyBhbHJlYWR5IG9wZW5lZAotICAvLyBpZiB0aGUgY2FtZXJhIGlzIGNsb3NlZCB3aGlsZSBDYW1l
cmFWaWRlb0NhcHR1cmVyIGlzIHJlLXRyeWluZyB0byBzdGFydC4KLSAgQExhcmdlVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVy
YSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGls
ZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlci5zdG9wIGNhbiBiZSBjYWxsZWQgd2hpbGUgQ2Ft
ZXJhVmlkZW9DYXB0dXJlciBpcwotICAvLyByZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBNZWRpdW1U
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0
b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hp
bGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kU3RvcCgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcv
d2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRl
c3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2lu
Z1RleHR1cmVUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250
ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNl
OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5MYXJnZVRlc3Q7
Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7
Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsK
LQotcHVibGljIGNsYXNzIENhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QgZXh0ZW5kcyBJ
bnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNh
bWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QiOwotCi0gIHByaXZhdGUgY2xhc3MgVGVzdE9i
amVjdEZhY3RvcnkgZXh0ZW5kcyBDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzLlRlc3RP
YmplY3RGYWN0b3J5IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2FtZXJhRW51bWVyYXRv
ciBnZXRDYW1lcmFFbnVtZXJhdG9yKCkgewotICAgICAgcmV0dXJuIG5ldyBDYW1lcmExRW51bWVy
YXRvcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGdldEFw
cENvbnRleHQoKSB7Ci0gICAgICByZXR1cm4gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0
Q29udGV4dCgpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIp
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCByYXdPcGVuQ2FtZXJhKFN0cmluZyBj
YW1lcmFOYW1lKSB7Ci0gICAgICByZXR1cm4gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEub3BlbihD
YW1lcmExRW51bWVyYXRvci5nZXRDYW1lcmFJbmRleChjYW1lcmFOYW1lKSk7Ci0gICAgfQotCi0g
ICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCByYXdDbG9zZUNhbWVyYShPYmplY3QgY2FtZXJhKSB7Ci0gICAgICAoKGFuZHJv
aWQuaGFyZHdhcmUuQ2FtZXJhKSBjYW1lcmEpLnJlbGVhc2UoKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMgZml4dHVyZXM7Ci0KLSAgQE92
ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotICAgIGZpeHR1cmVzID0gbmV3IENh
bWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMobmV3IFRlc3RPYmplY3RGYWN0b3J5KCkpOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgewotICAgIGZp
eHR1cmVzLmRpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dENyZWF0ZUFuZERpc3Bvc2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZp
eHR1cmVzLmNyZWF0ZUNhcHR1cmVyQW5kRGlzcG9zZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCk7
Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFu
ZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndhcmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVu
ZGVyZXIgdXNpbmcgYSAiZGVmYXVsdCIgY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhl
IEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RDcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRo
aXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1l
cyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyB0aGUg
ZnJvbnQgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZh
IGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3Rh
cnRGcm9udEZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpeHR1cmVzLmNyZWF0ZUZyb250RmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAg
fQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRo
YXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJl
ciB1c2luZyB0aGUgYmFjayBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJv
dGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2
b2lkIHRlc3RTdGFydEJhY2tGYWNpbmdWaWRlb0NhcHR1cmVyKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVCYWNrRmFjaW5nQ2FwdHVyZXJBbmRSZW5k
ZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBkZWZhdWx0IGNhbWVyYSBjYW4g
YmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgY2FtZXJhIGNhbgotICAvLyBsYXRlciBiZSBzd2l0Y2hl
ZCB0byBhbm90aGVyIGNhbWVyYS4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhl
IEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN3aXRjaFZpZGVv
Q2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN3
aXRjaENhbWVyYSgpOwotICB9Ci0KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENh
bWVyYUV2ZW50cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
Y2FtZXJhRXZlbnRzSW52b2tlZCgpOwotICB9Ci0KLSAgLy8gVGVzdCB3aGF0IGhhcHBlbnMgd2hl
biBhdHRlbXB0aW5nIHRvIGNhbGwgZS5nLiBzd2l0Y2hDYW1lcmEoKSBhZnRlciBjYW1lcmEgaGFz
IGJlZW4gc3RvcHBlZC4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYUNh
bGxzQWZ0ZXJTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJl
cy5jYW1lcmFDYWxsc0FmdGVyU3RvcCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhl
IFZpZGVvU291cmNlIHRoYXQgdGhlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgY29ubmVjdGVkIHRv
IGNhbgotICAvLyBiZSBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQuIEl0IHRlc3RzIGJvdGggdGhlIEph
dmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0
b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGZpeHR1cmVzLnN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYXQgZGlmZmVyZW50IHJlc29sdXRpb25z
LgotICAvLyBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0aGUgQysrIGxheWVyLgotICBATGFyZ2VU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFN0b3BXaXRoRGlmZmVyZW50UmVzb2x1dGlvbnMo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0U3RvcFdp
dGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHdoYXQgaGFw
cGVucyBpZiBidWZmZXJzIGFyZSByZXR1cm5lZCBhZnRlciB0aGUgY2FwdHVyZXIgaGF2ZQotICAv
LyBiZWVuIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQgZG9lcyBub3QgdGVzdCBvciB1c2UgdGhl
IEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVy
TGF0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMucmV0dXJu
QnVmZmVyTGF0ZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgd2UgY2FuIGNhcHR1cmUg
ZnJhbWVzLCBrZWVwIHRoZSBmcmFtZXMgaW4gYSBsb2NhbCByZW5kZXJlciwgc3RvcCBjYXB0dXJp
bmcsCi0gIC8vIGFuZCB0aGVuIHJldHVybiB0aGUgZnJhbWVzLiBUaGUgZGlmZmVyZW5jZSBiZXR3
ZWVuIHRoZSB0ZXN0IHRlc3RSZXR1cm5CdWZmZXJMYXRlKCkgaXMgdGhhdCB3ZQotICAvLyBhbHNv
IHRlc3QgdGhlIEpOSSBhbmQgQysrIEFuZHJvaWRWaWRlb0NhcHR1cmVyIHBhcnRzLgotICBATWVk
aXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZUVuZFRvRW5kKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRl
RW5kVG9FbmQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENhbWVyYUV2ZW50c0hhbmRs
ZXIub25FcnJvciBpcyB0cmlnZ2VyZWQgaWYgdmlkZW8gYnVmZmVycyBhcmUgbm90IHJldHVybmVk
IHRvCi0gIC8vIHRoZSBjYXB0dXJlci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
Q2FtZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0aW9uKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFGcmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2
YXRpb24oKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGZyYW1lcyBmb3J3YXJkZWQgdG8g
YSByZW5kZXJlciBpcyBzY2FsZWQgaWYgYWRhcHRPdXRwdXRGb3JtYXQgaXMKLSAgLy8gY2FsbGVk
LiBUaGlzIHRlc3QgYm90aCBKYXZhIGFuZCBDKysgcGFydHMgb2Ygb2YgdGhlIHN0YWNrLgotICBA
TWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2NhbGVDYW1lcmFPdXRwdXQoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnNjYWxlQ2FtZXJhT3V0cHV0KCk7
Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBhbiBlcnJvciBpcyByZXBvcnRlZCBpZiB0aGUg
Y2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIHdoZW4gQ2FtZXJhVmlkZW9DYXB0dXJlciBp
cyBzdGFydGVkLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2Ft
ZXJhSXNBbHJlYWR5T3BlbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4
dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKTsKLSAgfQotCi0gIC8vIFRoaXMg
dGVzdCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVyZXIgY2FuIGJlIHN0YXJ0ZWQsIGV2ZW4gaWYgdGhl
IGNhbWVyYSBpcyBhbHJlYWR5IG9wZW5lZAotICAvLyBpZiB0aGUgY2FtZXJhIGlzIGNsb3NlZCB3
aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIHJlLXRyeWluZyB0byBzdGFydC4KLSAgQExhcmdl
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRD
bG9zZUNhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
c3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYSgpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlci5zdG9wIGNhbiBiZSBjYWxsZWQg
d2hpbGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcwotICAvLyByZS10cnlpbmcgdG8gc3RhcnQuCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5
T3BlbkFuZFN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVz
LnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kU3RvcCgpOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRlc3QuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyQ2FwdHVyZXJUZXN0LmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyOTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9p
ZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lk
LmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUu
Y2FtZXJhMi5DYW1lcmFNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9y
dCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9u
VGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLkxh
cmdlVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTWVk
aXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21h
bGxUZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci0K
LXB1YmxpYyBjbGFzcyBDYW1lcmEyQ2FwdHVyZXJUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9u
VGVzdENhc2UgewotICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmEyQ2FwdHVyZXJU
ZXN0IjsKLQotICAvKioKLSAgICogU2ltcGxlIGNhbWVyYTIgaW1wbGVtZW50YXRpb24gdGhhdCBv
bmx5IGtub3dzIGhvdyB0byBvcGVuIHRoZSBjYW1lcmEgYW5kIGNsb3NlIGl0LgotICAgKi8KLSAg
cHJpdmF0ZSBjbGFzcyBTaW1wbGVDYW1lcmEyIHsKLSAgICBmaW5hbCBDYW1lcmFNYW5hZ2VyIGNh
bWVyYU1hbmFnZXI7Ci0gICAgZmluYWwgTG9vcGVyVGhyZWFkIGxvb3BlclRocmVhZDsKLSAgICBm
aW5hbCBDb3VudERvd25MYXRjaCBvcGVuRG9uZVNpZ25hbDsKLSAgICBmaW5hbCBPYmplY3QgY2Ft
ZXJhRGV2aWNlTG9jazsKLSAgICBDYW1lcmFEZXZpY2UgY2FtZXJhRGV2aWNlOyAvLyBHdWFyZGVk
IGJ5IGNhbWVyYURldmljZUxvY2sKLSAgICBib29sZWFuIG9wZW5TdWNjZWVkZWQ7IC8vIEd1YXJk
ZWQgYnkgY2FtZXJhRGV2aWNlTG9jawotCi0gICAgcHJpdmF0ZSBjbGFzcyBMb29wZXJUaHJlYWQg
ZXh0ZW5kcyBUaHJlYWQgewotICAgICAgZmluYWwgQ291bnREb3duTGF0Y2ggc3RhcnRlZFNpZ25h
bCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICAgIHByaXZhdGUgSGFuZGxlciBoYW5kbGVy
OwotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
TG9vcGVyLnByZXBhcmUoKTsKLSAgICAgICAgaGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7Ci0gICAg
ICAgIHN0YXJ0ZWRTaWduYWwuY291bnREb3duKCk7Ci0gICAgICAgIExvb3Blci5sb29wKCk7Ci0g
ICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdhaXRUb1N0YXJ0KCkgewotICAgICAgICBUaHJl
YWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShzdGFydGVkU2lnbmFsKTsKLSAgICAgIH0KLQot
ICAgICAgcHVibGljIHZvaWQgcmVxdWVzdFN0b3AoKSB7Ci0gICAgICAgIGhhbmRsZXIuZ2V0TG9v
cGVyKCkucXVpdCgpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgSGFuZGxlciBnZXRIYW5kbGVy
KCkgewotICAgICAgICByZXR1cm4gaGFuZGxlcjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2
YXRlIGNsYXNzIENhbWVyYVN0YXRlQ2FsbGJhY2sgZXh0ZW5kcyBDYW1lcmFEZXZpY2UuU3RhdGVD
YWxsYmFjayB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xvc2VkKENh
bWVyYURldmljZSBjYW1lcmFEZXZpY2UpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlNpbXBs
ZSBjYW1lcmEyIGNsb3NlZC4iKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYURldmlj
ZUxvY2spIHsKLSAgICAgICAgICBTaW1wbGVDYW1lcmEyLnRoaXMuY2FtZXJhRGV2aWNlID0gbnVs
bDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIG9uRGlzY29ubmVjdGVkKENhbWVyYURldmljZSBjYW1lcmFEZXZpY2UpIHsKLSAgICAgICAg
TG9nZ2luZy5kKFRBRywgIlNpbXBsZSBjYW1lcmEyIGRpc2Nvbm5lY3RlZC4iKTsKLQotICAgICAg
ICBzeW5jaHJvbml6ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAgICBTaW1wbGVDYW1l
cmEyLnRoaXMuY2FtZXJhRGV2aWNlID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoQ2FtZXJhRGV2aWNlIGNhbWVy
YURldmljZSwgaW50IGVycm9yQ29kZSkgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiU2ltcGxl
IGNhbWVyYTIgZXJyb3I6ICIgKyBlcnJvckNvZGUpOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAo
Y2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICAgIFNpbXBsZUNhbWVyYTIudGhpcy5jYW1lcmFE
ZXZpY2UgPSBjYW1lcmFEZXZpY2U7Ci0gICAgICAgICAgb3BlblN1Y2NlZWRlZCA9IGZhbHNlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgb3BlbkRvbmVTaWduYWwuY291bnREb3duKCk7Ci0gICAgICB9
Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25PcGVuZWQoQ2FtZXJhRGV2
aWNlIGNhbWVyYURldmljZSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU2ltcGxlIGNhbWVy
YTIgb3BlbmVkLiIpOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhRGV2aWNlTG9jaykg
ewotICAgICAgICAgIFNpbXBsZUNhbWVyYTIudGhpcy5jYW1lcmFEZXZpY2UgPSBjYW1lcmFEZXZp
Y2U7Ci0gICAgICAgICAgb3BlblN1Y2NlZWRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBvcGVuRG9uZVNpZ25hbC5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTaW1w
bGVDYW1lcmEyKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICAgIGNh
bWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENv
bnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICAgICAgbG9vcGVyVGhyZWFkID0gbmV3IExvb3BlclRo
cmVhZCgpOwotICAgICAgbG9vcGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAgICBsb29wZXJUaHJlYWQu
d2FpdFRvU3RhcnQoKTsKLSAgICAgIGNhbWVyYURldmljZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0g
ICAgICBvcGVuRG9uZVNpZ25hbCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICAgIGNhbWVy
YURldmljZSA9IG51bGw7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiT3BlbmluZyBzaW1wbGUgY2Ft
ZXJhMi4iKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGNhbWVyYU1hbmFnZXIub3BlbkNhbWVyYShk
ZXZpY2VOYW1lLCBuZXcgQ2FtZXJhU3RhdGVDYWxsYmFjaygpLCBsb29wZXJUaHJlYWQuZ2V0SGFu
ZGxlcigpKTsKLSAgICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAgIGZhaWwoIlNpbXBsZSBjYW1lcmEyIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbjogIiArIGUuZ2V0
TWVzc2FnZSgpKTsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9y
IHNpbXBsZSBjYW1lcmEyIHRvIG9wZW4uIik7Ci0gICAgICBUaHJlYWRVdGlscy5hd2FpdFVuaW50
ZXJydXB0aWJseShvcGVuRG9uZVNpZ25hbCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYURl
dmljZUxvY2spIHsKLSAgICAgICAgaWYgKCFvcGVuU3VjY2VlZGVkKSB7Ci0gICAgICAgICAgZmFp
bCgiT3BlbmluZyBzaW1wbGUgY2FtZXJhMiBmYWlsZWQuIik7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcs
ICJDbG9zaW5nIHNpbXBsZSBjYW1lcmEyLiIpOwotICAgICAgc3luY2hyb25pemVkIChjYW1lcmFE
ZXZpY2VMb2NrKSB7Ci0gICAgICAgIGlmIChjYW1lcmFEZXZpY2UgIT0gbnVsbCkgewotICAgICAg
ICAgIGNhbWVyYURldmljZS5jbG9zZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGxv
b3BlclRocmVhZC5yZXF1ZXN0U3RvcCgpOwotICAgICAgVGhyZWFkVXRpbHMuam9pblVuaW50ZXJy
dXB0aWJseShsb29wZXJUaHJlYWQpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgVGVz
dE9iamVjdEZhY3RvcnkgZXh0ZW5kcyBDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzLlRl
c3RPYmplY3RGYWN0b3J5IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2FtZXJhRW51bWVy
YXRvciBnZXRDYW1lcmFFbnVtZXJhdG9yKCkgewotICAgICAgcmV0dXJuIG5ldyBDYW1lcmEyRW51
bWVyYXRvcihnZXRBcHBDb250ZXh0KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKSB7Ci0gICAgICByZXR1cm4gZ2V0SW5zdHJ1bWVu
dGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5p
bmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCByYXdP
cGVuQ2FtZXJhKFN0cmluZyBjYW1lcmFOYW1lKSB7Ci0gICAgICByZXR1cm4gbmV3IFNpbXBsZUNh
bWVyYTIoZ2V0QXBwQ29udGV4dCgpLCBjYW1lcmFOYW1lKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJl
c3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IHJhd0Nsb3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEpIHsKLSAgICAgICgoU2ltcGxlQ2FtZXJhMikg
Y2FtZXJhKS5jbG9zZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhVmlkZW9DYXB0
dXJlclRlc3RGaXh0dXJlcyBmaXh0dXJlczsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZv
aWQgc2V0VXAoKSB7Ci0gICAgZml4dHVyZXMgPSBuZXcgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RG
aXh0dXJlcyhuZXcgVGVzdE9iamVjdEZhY3RvcnkoKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0gICAgZml4dHVyZXMuZGlzcG9zZSgpOwotICB9
Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQW5kRGlzcG9zZSgpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJB
bmREaXNwb3NlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVh
dGVOb25FeGlzdGluZ0NhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
Zml4dHVyZXMuY3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUg
Zm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyBhICJkZWZhdWx0
IiBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXll
ci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUNhcHR1cmVyQW5kUmVu
ZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVD
YXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVy
YSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8g
dG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBmcm9udCBmYWNpbmcgdmlkZW8gY2Fw
dHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEZyb250RmFjaW5nVmlkZW9DYXB0
dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRl
RnJvbnRGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRo
YXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3
YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBiYWNrIGZhY2lu
ZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMr
KyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0QmFja0ZhY2lu
Z1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLmNyZWF0ZUJhY2tGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhp
cyB0ZXN0IHRoYXQgdGhlIGRlZmF1bHQgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRo
ZSBjYW1lcmEgY2FuCi0gIC8vIGxhdGVyIGJlIHN3aXRjaGVkIHRvIGFub3RoZXIgY2FtZXJhLgot
ICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVt
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3dpdGNoQ2FtZXJhKCk7Ci0gIH0KLQot
ICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhRXZlbnRzKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFFdmVudHNJbnZva2VkKCk7
Ci0gIH0KLQotICAvLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBl
LmcuIHN3aXRjaENhbWVyYSgpIGFmdGVyIGNhbWVyYSBoYXMgYmVlbiBzdG9wcGVkLgotICBATWVk
aXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhQ2FsbHNBZnRlclN0b3AoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUNhbGxzQWZ0ZXJTdG9w
KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgVmlkZW9Tb3VyY2UgdGhhdCB0aGUg
Q2FtZXJhVmlkZW9DYXB0dXJlciBpcyBjb25uZWN0ZWQgdG8gY2FuCi0gIC8vIGJlIHN0b3BwZWQg
YW5kIHJlc3RhcnRlZC4gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4K
LSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RvcFJlc3RhcnRW
aWRlb1NvdXJjZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4g
YmUgc3RhcnRlZCBhdCBkaWZmZXJlbnQgcmVzb2x1dGlvbnMuCi0gIC8vIEl0IGRvZXMgbm90IHRl
c3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dFN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25z
KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3Qgd2hhdCBoYXBwZW5zIGlmIGJ1ZmZlcnMgYXJlIHJl
dHVybmVkIGFmdGVyIHRoZSBjYXB0dXJlciBoYXZlCi0gIC8vIGJlZW4gc3RvcHBlZCBhbmQgcmVz
dGFydGVkLiBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0aGUgQysrIGxheWVyLgotICBATGFyZ2VU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJMYXRlKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRlKCk7Ci0gIH0KLQot
ICAvLyBUaGlzIHRlc3QgdGhhdCB3ZSBjYW4gY2FwdHVyZSBmcmFtZXMsIGtlZXAgdGhlIGZyYW1l
cyBpbiBhIGxvY2FsIHJlbmRlcmVyLCBzdG9wIGNhcHR1cmluZywKLSAgLy8gYW5kIHRoZW4gcmV0
dXJuIHRoZSBmcmFtZXMuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRlc3QgdGVzdFJldHVy
bkJ1ZmZlckxhdGUoKSBpcyB0aGF0IHdlCi0gIC8vIGFsc28gdGVzdCB0aGUgSk5JIGFuZCBDKysg
QW5kcm9pZFZpZGVvQ2FwdHVyZXIgcGFydHMuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lk
IHRlc3RSZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhRXZlbnRzSGFuZGxlci5vbkVycm9yIGlzIHRyaWdnZXJl
ZCBpZiB2aWRlbyBidWZmZXJzIGFyZSBub3QgcmV0dXJuZWQgdG8KLSAgLy8gdGhlIGNhcHR1cmVy
LgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFGcmVlemVkRXZlbnRPbkJ1
ZmZlclN0YXJ2YXRpb24oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLmNhbWVyYUZyZWV6ZWRFdmVudE9uQnVmZmVyU3RhcnZhdGlvbigpOwotICB9Ci0KLSAgLy8g
VGhpcyB0ZXN0IHRoYXQgZnJhbWVzIGZvcndhcmRlZCB0byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBp
ZiBhZGFwdE91dHB1dEZvcm1hdCBpcwotICAvLyBjYWxsZWQuIFRoaXMgdGVzdCBib3RoIEphdmEg
YW5kIEMrKyBwYXJ0cyBvZiBvZiB0aGUgc3RhY2suCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2
b2lkIHRlc3RTY2FsZUNhbWVyYU91dHB1dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuc2NhbGVDYW1lcmFPdXRwdXQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IGFuIGVycm9yIGlzIHJlcG9ydGVkIGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVu
ZWQKLSAgLy8gd2hlbiBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIHN0YXJ0ZWQuCi0gIEBMYXJnZVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJh
SXNBbHJlYWR5T3BlbigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9D
YXB0dXJlciBjYW4gYmUgc3RhcnRlZCwgZXZlbiBpZiB0aGUgY2FtZXJhIGlzIGFscmVhZHkgb3Bl
bmVkCi0gIC8vIGlmIHRoZSBjYW1lcmEgaXMgY2xvc2VkIHdoaWxlIENhbWVyYVZpZGVvQ2FwdHVy
ZXIgaXMgcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJl
YWR5T3BlbkFuZENsb3NlQ2FtZXJhKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1l
cmFWaWRlb0NhcHR1cmVyLnN0b3AgY2FuIGJlIGNhbGxlZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1
cmVyIGlzCi0gIC8vIHJlLXRyeWluZyB0byBzdGFydC4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kU3RvcCgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxy
ZWFkeU9wZW5BbmRTdG9wKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJh
VmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93
ZWJydGMvQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcy5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDczMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
cGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGp1bml0LmZyYW1ld29yay5Bc3Nl
cnQuKjsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1
cmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyLkk0MjBGcmFtZTsKLQot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVu
dC5Db3VudERvd25MYXRjaDsKLQotY2xhc3MgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJl
cyB7Ci0gIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0
Rml4dHVyZXMiOwotICAvLyBEZWZhdWx0IHZhbHVlcyB1c2VkIGZvciBzdGFydGluZyBjYXB0dXJp
bmcKLSAgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1dJRFRIID0gNjQwOwotICBzdGF0aWMgZmlu
YWwgaW50IERFRkFVTFRfSEVJR0hUID0gNDgwOwotICBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRf
RlBTID0gMTU7Ci0KLSAgc3RhdGljIHByaXZhdGUgY2xhc3MgUmVuZGVyZXJDYWxsYmFja3MgaW1w
bGVtZW50cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVz
UmVuZGVyZWQgPSAwOwotICAgIHByaXZhdGUgT2JqZWN0IGZyYW1lTG9jayA9IDA7Ci0gICAgcHJp
dmF0ZSBpbnQgd2lkdGggPSAwOwotICAgIHByaXZhdGUgaW50IGhlaWdodCA9IDA7Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW5kZXJGcmFtZShJNDIwRnJhbWUgZnJhbWUpIHsK
LSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgICsrZnJhbWVzUmVuZGVy
ZWQ7Ci0gICAgICAgIHdpZHRoID0gZnJhbWUucm90YXRlZFdpZHRoKCk7Ci0gICAgICAgIGhlaWdo
dCA9IGZyYW1lLnJvdGF0ZWRIZWlnaHQoKTsKLSAgICAgICAgZnJhbWVMb2NrLm5vdGlmeSgpOwot
ICAgICAgfQotICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAg
IH0KLQotICAgIHB1YmxpYyBpbnQgZnJhbWVXaWR0aCgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAo
ZnJhbWVMb2NrKSB7Ci0gICAgICAgIHJldHVybiB3aWR0aDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgaW50IGZyYW1lSGVpZ2h0KCkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxv
Y2spIHsKLSAgICAgICAgcmV0dXJuIGhlaWdodDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgaW50IHdhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2FpdGluZyBmb3IgdGhlIG5leHQgZnJhbWUg
dG8gcmVuZGVyIik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICBm
cmFtZUxvY2sud2FpdCgpOwotICAgICAgICByZXR1cm4gZnJhbWVzUmVuZGVyZWQ7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIHByaXZhdGUgY2xhc3MgRmFrZUFzeW5jUmVuZGVyZXIg
aW1wbGVtZW50cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBM
aXN0PEk0MjBGcmFtZT4gcGVuZGluZ0ZyYW1lcyA9IG5ldyBBcnJheUxpc3Q8STQyMEZyYW1lPigp
OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoSTQyMEZyYW1l
IGZyYW1lKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdGcmFtZXMpIHsKLSAgICAgICAg
cGVuZGluZ0ZyYW1lcy5hZGQoZnJhbWUpOwotICAgICAgICBwZW5kaW5nRnJhbWVzLm5vdGlmeUFs
bCgpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFdhaXQgdW50aWwgYXQgbGVhc3Qgb25lIGZy
YW1lIGhhdmUgYmVlbiByZWNlaXZlZCwgYmVmb3JlIHJldHVybmluZyB0aGVtLgotICAgIHB1Ymxp
YyBMaXN0PEk0MjBGcmFtZT4gd2FpdEZvclBlbmRpbmdGcmFtZXMoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHBlbmRpbmcg
ZnJhbWVzIik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdGcmFtZXMpIHsKLSAgICAgICAg
d2hpbGUgKHBlbmRpbmdGcmFtZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgcGVuZGluZ0ZyYW1l
cy53YWl0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8STQyMEZy
YW1lPihwZW5kaW5nRnJhbWVzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgcHJp
dmF0ZSBjbGFzcyBGYWtlQ2FwdHVyZXJPYnNlcnZlciBpbXBsZW1lbnRzIENhbWVyYVZpZGVvQ2Fw
dHVyZXIuQ2FwdHVyZXJPYnNlcnZlciB7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzQ2FwdHVyZWQg
PSAwOwotICAgIHByaXZhdGUgaW50IGZyYW1lU2l6ZSA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZnJh
bWVXaWR0aCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVIZWlnaHQgPSAwOwotICAgIGZpbmFs
IHByaXZhdGUgT2JqZWN0IGZyYW1lTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBmaW5hbCBwcml2
YXRlIE9iamVjdCBjYXB0dXJlclN0YXJ0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRl
IGJvb2xlYW4gY2FwdHVyZXJTdGFydFJlc3VsdCA9IGZhbHNlOwotICAgIGZpbmFsIHByaXZhdGUg
TGlzdDxMb25nPiB0aW1lc3RhbXBzID0gbmV3IEFycmF5TGlzdDxMb25nPigpOwotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJlclN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNz
KSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAib25DYXB0dXJlclN0YXJ0ZWQ6ICIgKyBzdWNjZXNz
KTsKLQotICAgICAgc3luY2hyb25pemVkIChjYXB0dXJlclN0YXJ0TG9jaykgewotICAgICAgICBj
YXB0dXJlclN0YXJ0UmVzdWx0ID0gc3VjY2VzczsKLSAgICAgICAgY2FwdHVyZXJTdGFydExvY2su
bm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25DYXB0dXJlclN0b3BwZWQoKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAib25DYXB0
dXJlclN0b3BwZWQiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBieXRlW10gZnJhbWUsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVTdGFtcCkgewotICAgICAgc3lu
Y2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgKytmcmFtZXNDYXB0dXJlZDsKLSAgICAg
ICAgZnJhbWVTaXplID0gZnJhbWUubGVuZ3RoOwotICAgICAgICBmcmFtZVdpZHRoID0gd2lkdGg7
Ci0gICAgICAgIGZyYW1lSGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICB0aW1lc3RhbXBzLmFkZCh0
aW1lU3RhbXApOwotICAgICAgICBmcmFtZUxvY2subm90aWZ5KCk7Ci0gICAgICB9Ci0gICAgfQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb2VzVGV4dHVyZUlkLAotICAgICAgICBmbG9hdFtdIHRy
YW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVTdGFtcCkgewotICAgICAgc3lu
Y2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgKytmcmFtZXNDYXB0dXJlZDsKLSAgICAg
ICAgZnJhbWVXaWR0aCA9IHdpZHRoOwotICAgICAgICBmcmFtZUhlaWdodCA9IGhlaWdodDsKLSAg
ICAgICAgZnJhbWVTaXplID0gMDsKLSAgICAgICAgdGltZXN0YW1wcy5hZGQodGltZVN0YW1wKTsK
LSAgICAgICAgZnJhbWVMb2NrLm5vdGlmeSgpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1Ymxp
YyBib29sZWFuIHdhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBjYXB0dXJlciB0
byBzdGFydCIpOwotICAgICAgc3luY2hyb25pemVkIChjYXB0dXJlclN0YXJ0TG9jaykgewotICAg
ICAgICBjYXB0dXJlclN0YXJ0TG9jay53YWl0KCk7Ci0gICAgICAgIHJldHVybiBjYXB0dXJlclN0
YXJ0UmVzdWx0OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgd2FpdEZvck5leHRD
YXB0dXJlZEZyYW1lKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICJXYWl0aW5nIGZvciB0aGUgbmV4dCBjYXB0dXJlZCBmcmFtZSIpOwotICAgICAg
c3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgZnJhbWVMb2NrLndhaXQoKTsKLSAg
ICAgICAgcmV0dXJuIGZyYW1lc0NhcHR1cmVkOwotICAgICAgfQotICAgIH0KLQotICAgIGludCBm
cmFtZVNpemUoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICBy
ZXR1cm4gZnJhbWVTaXplOwotICAgICAgfQotICAgIH0KLQotICAgIGludCBmcmFtZVdpZHRoKCkg
ewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgcmV0dXJuIGZyYW1l
V2lkdGg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaW50IGZyYW1lSGVpZ2h0KCkgewotICAgICAg
c3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgcmV0dXJuIGZyYW1lSGVpZ2h0Owot
ICAgICAgfQotICAgIH0KLQotICAgIExpc3Q8TG9uZz4gZ2V0Q29weUFuZFJlc2V0TGlzdE9mdGlt
ZVN0YW1wcygpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIEFy
cmF5TGlzdDxMb25nPiBsaXN0ID0gbmV3IEFycmF5TGlzdDxMb25nPih0aW1lc3RhbXBzKTsKLSAg
ICAgICAgdGltZXN0YW1wcy5jbGVhcigpOwotICAgICAgICByZXR1cm4gbGlzdDsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLQotICBzdGF0aWMgY2xhc3MgQ2FtZXJhRXZlbnRzIGltcGxlbWVudHMgQ2Ft
ZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVyIHsKLSAgICBwdWJsaWMgYm9vbGVh
biBvbkNhbWVyYU9wZW5pbmdDYWxsZWQ7Ci0gICAgcHVibGljIGJvb2xlYW4gb25GaXJzdEZyYW1l
QXZhaWxhYmxlQ2FsbGVkOwotICAgIHB1YmxpYyBmaW5hbCBPYmplY3Qgb25DYW1lcmFGcmVlemVk
TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIFN0cmluZyBvbkNhbWVyYUZyZWV6ZWRE
ZXNjcmlwdGlvbjsKLSAgICBwdWJsaWMgZmluYWwgT2JqZWN0IGNhbWVyYUNsb3NlZExvY2sgPSBu
ZXcgT2JqZWN0KCk7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGNhbWVyYUNsb3NlZCA9IHRydWU7Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYUVycm9yKFN0cmluZyBlcnJv
ckRlc2NyaXB0aW9uKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiQ2FtZXJhIGVycm9yOiAiICsg
ZXJyb3JEZXNjcmlwdGlvbik7Ci0gICAgICBjYW1lcmFDbG9zZWQgPSB0cnVlOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRGlzY29ubmVjdGVkKCkge30K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRnJlZXplZChTdHJpbmcg
ZXJyb3JEZXNjcmlwdGlvbikgewotICAgICAgc3luY2hyb25pemVkIChvbkNhbWVyYUZyZWV6ZWRM
b2NrKSB7Ci0gICAgICAgIG9uQ2FtZXJhRnJlZXplZERlc2NyaXB0aW9uID0gZXJyb3JEZXNjcmlw
dGlvbjsKLSAgICAgICAgb25DYW1lcmFGcmVlemVkTG9jay5ub3RpZnlBbGwoKTsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYU9wZW5pbmco
U3RyaW5nIGNhbWVyYU5hbWUpIHsKLSAgICAgIG9uQ2FtZXJhT3BlbmluZ0NhbGxlZCA9IHRydWU7
Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUNsb3NlZExvY2spIHsKLSAgICAgICAgY2FtZXJh
Q2xvc2VkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCkgewotICAgICAgb25GaXJzdEZyYW1lQXZh
aWxhYmxlQ2FsbGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvbkNhbWVyYUNsb3NlZCgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhQ2xvc2Vk
TG9jaykgewotICAgICAgICBjYW1lcmFDbG9zZWQgPSB0cnVlOwotICAgICAgICBjYW1lcmFDbG9z
ZWRMb2NrLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcg
d2FpdEZvckNhbWVyYUZyZWV6ZWQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
ICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBjYW1lcmEgdG8gZnJlZXplIik7Ci0g
ICAgICBzeW5jaHJvbml6ZWQgKG9uQ2FtZXJhRnJlZXplZExvY2spIHsKLSAgICAgICAgb25DYW1l
cmFGcmVlemVkTG9jay53YWl0KCk7Ci0gICAgICAgIHJldHVybiBvbkNhbWVyYUZyZWV6ZWREZXNj
cmlwdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB3YWl0Rm9yQ2FtZXJh
Q2xvc2VkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIHN5bmNocm9uaXpl
ZCAoY2FtZXJhQ2xvc2VkTG9jaykgewotICAgICAgICB3aGlsZSAoIWNhbWVyYUNsb3NlZCkgewot
ICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZvciB0aGUgY2FtZXJhIHRvIGNsb3Nl
LiIpOwotICAgICAgICAgIGNhbWVyYUNsb3NlZExvY2sud2FpdCgpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENsYXNzIHRvIGNvbGxlY3QgYWxsIGNsYXNz
ZXMgcmVsYXRlZCB0byBzaW5nbGUgY2FwdHVyZXIgaW5zdGFuY2UuCi0gICAqLwotICBzdGF0aWMg
cHJpdmF0ZSBjbGFzcyBDYXB0dXJlckluc3RhbmNlIHsKLSAgICBwdWJsaWMgQ2FtZXJhVmlkZW9D
YXB0dXJlciBjYXB0dXJlcjsKLSAgICBwdWJsaWMgQ2FtZXJhRXZlbnRzIGNhbWVyYUV2ZW50czsK
LSAgICBwdWJsaWMgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0g
ICAgcHVibGljIEZha2VDYXB0dXJlck9ic2VydmVyIG9ic2VydmVyOwotICAgIHB1YmxpYyBMaXN0
PENhcHR1cmVGb3JtYXQ+IHN1cHBvcnRlZEZvcm1hdHM7Ci0gICAgcHVibGljIENhcHR1cmVGb3Jt
YXQgZm9ybWF0OwotICB9Ci0KLSAgLyoqCi0gICAqIENsYXNzIHVzZWQgZm9yIGNvbGxlY3Rpbmcg
YSBWaWRlb1NvdXJjZSwgYSBWaWRlb1RyYWNrIGFuZCBhIHJlbmRlcmVyLiBUaGUgY2xhc3MKLSAg
ICogaXMgdXNlZCBmb3IgdGVzdGluZyBsb2NhbCByZW5kZXJpbmcgZnJvbSBhIGNhcHR1cmVyLgot
ICAgKi8KLSAgc3RhdGljIHByaXZhdGUgY2xhc3MgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB7Ci0g
ICAgcHVibGljIFZpZGVvU291cmNlIHNvdXJjZTsKLSAgICBwdWJsaWMgVmlkZW9UcmFjayB0cmFj
azsKLSAgICBwdWJsaWMgUmVuZGVyZXJDYWxsYmFja3MgcmVuZGVyZXJDYWxsYmFja3M7Ci0gICAg
cHVibGljIEZha2VBc3luY1JlbmRlcmVyIGZha2VBc3luY1JlbmRlcmVyOwotICB9Ci0KLSAgcHVi
bGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBUZXN0T2JqZWN0RmFjdG9yeSB7Ci0gICAgZmluYWwg
Q2FtZXJhRW51bWVyYXRvciBjYW1lcmFFbnVtZXJhdG9yOwotCi0gICAgVGVzdE9iamVjdEZhY3Rv
cnkoKSB7Ci0gICAgICBjYW1lcmFFbnVtZXJhdG9yID0gZ2V0Q2FtZXJhRW51bWVyYXRvcigpOwot
ICAgIH0KLQotICAgIHB1YmxpYyBDYW1lcmFWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAot
ICAgICAgICBTdHJpbmcgbmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5k
bGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICAgIHJldHVybiBjYW1lcmFFbnVtZXJhdG9yLmNyZWF0
ZUNhcHR1cmVyKG5hbWUsIGV2ZW50c0hhbmRsZXIpOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJp
bmcgZ2V0TmFtZU9mRnJvbnRGYWNpbmdEZXZpY2UoKSB7Ci0gICAgICBmb3IgKFN0cmluZyBkZXZp
Y2VOYW1lIDogY2FtZXJhRW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpKSB7Ci0gICAgICAgIGlm
IChjYW1lcmFFbnVtZXJhdG9yLmlzRnJvbnRGYWNpbmcoZGV2aWNlTmFtZSkpIHsKLSAgICAgICAg
ICByZXR1cm4gZGV2aWNlTmFtZTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4g
bnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVPZkJhY2tGYWNpbmdEZXZp
Y2UoKSB7Ci0gICAgICBmb3IgKFN0cmluZyBkZXZpY2VOYW1lIDogY2FtZXJhRW51bWVyYXRvci5n
ZXREZXZpY2VOYW1lcygpKSB7Ci0gICAgICAgIGlmIChjYW1lcmFFbnVtZXJhdG9yLmlzQmFja0Zh
Y2luZyhkZXZpY2VOYW1lKSkgewotICAgICAgICAgIHJldHVybiBkZXZpY2VOYW1lOwotICAgICAg
ICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBi
b29sZWFuIGhhdmVUd29DYW1lcmFzKCkgewotICAgICAgcmV0dXJuIGNhbWVyYUVudW1lcmF0b3Iu
Z2V0RGV2aWNlTmFtZXMoKS5sZW5ndGggPj0gMjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVh
biBpc0NhcHR1cmluZ1RvVGV4dHVyZSgpIHsKLSAgICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIHBs
YW4gdG8gb25seSBzdXBwb3J0IGNhcHR1cmluZyB0byB0ZXh0dXJlLCBzbyBkZWZhdWx0IHRvIHRy
dWUKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIGFic3RyYWN0IHB1YmxpYyBDYW1l
cmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3IoKTsKLSAgICBhYnN0cmFjdCBwdWJsaWMg
Q29udGV4dCBnZXRBcHBDb250ZXh0KCk7Ci0KLSAgICAvLyBDYW1lcmFWaWRlb0NhcHR1cmVyIEFQ
SSBpcyB0b28gc2xvdyBmb3Igc29tZSBvZiBvdXIgdGVzdHMgd2hlcmUgd2UgbmVlZCB0byBvcGVu
IGEgY29tcGV0aW5nCi0gICAgLy8gY2FtZXJhLiBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGluc3Rl
YWQuCi0gICAgYWJzdHJhY3QgcHVibGljIE9iamVjdCByYXdPcGVuQ2FtZXJhKFN0cmluZyBjYW1l
cmFOYW1lKTsKLSAgICBhYnN0cmFjdCBwdWJsaWMgdm9pZCByYXdDbG9zZUNhbWVyYShPYmplY3Qg
Y2FtZXJhKTsKLSAgfQotCi0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25GYWN0b3J5IHBlZXJDb25u
ZWN0aW9uRmFjdG9yeTsKLSAgcHJpdmF0ZSBUZXN0T2JqZWN0RmFjdG9yeSB0ZXN0T2JqZWN0RmFj
dG9yeTsKLQotICBDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzKFRlc3RPYmplY3RGYWN0
b3J5IHRlc3RPYmplY3RGYWN0b3J5KSB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRp
YWxpemVBbmRyb2lkR2xvYmFscygKLSAgICAgICAgdGVzdE9iamVjdEZhY3RvcnkuZ2V0QXBwQ29u
dGV4dCgpLCB0cnVlLCB0cnVlLCB0cnVlKTsKLQotICAgIHRoaXMucGVlckNvbm5lY3Rpb25GYWN0
b3J5ID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeShudWxsIC8qIG9wdGlvbnMgKi8pOwotICAg
IHRoaXMudGVzdE9iamVjdEZhY3RvcnkgPSB0ZXN0T2JqZWN0RmFjdG9yeTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgdGhpcy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkuZGlz
cG9zZSgpOwotICB9Ci0KLSAgLy8gSW50ZXJuYWwgaGVscGVyIG1ldGhvZHMKLSAgcHJpdmF0ZSBD
YXB0dXJlckluc3RhbmNlIGNyZWF0ZUNhcHR1cmVyKFN0cmluZyBuYW1lLCBib29sZWFuIGluaXRp
YWxpemUpIHsKLSAgICBDYXB0dXJlckluc3RhbmNlIGluc3RhbmNlID0gbmV3IENhcHR1cmVySW5z
dGFuY2UoKTsKLSAgICBpbnN0YW5jZS5jYW1lcmFFdmVudHMgPSBuZXcgQ2FtZXJhRXZlbnRzKCk7
Ci0gICAgaW5zdGFuY2UuY2FwdHVyZXIgPSB0ZXN0T2JqZWN0RmFjdG9yeS5jcmVhdGVDYXB0dXJl
cihuYW1lLCBpbnN0YW5jZS5jYW1lcmFFdmVudHMpOwotICAgIGluc3RhbmNlLnN1cmZhY2VUZXh0
dXJlSGVscGVyID0gU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKAotICAgICAgICAiU3VyZmFj
ZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCAvKiBzaGFyZWRDb250
ZXh0ICovKTsKLSAgICBpbnN0YW5jZS5vYnNlcnZlciA9IG5ldyBGYWtlQ2FwdHVyZXJPYnNlcnZl
cigpOwotICAgIGlmIChpbml0aWFsaXplKSB7Ci0gICAgICBpbnN0YW5jZS5jYXB0dXJlci5pbml0
aWFsaXplKAotICAgICAgICAgIGluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLCB0ZXN0T2Jq
ZWN0RmFjdG9yeS5nZXRBcHBDb250ZXh0KCksIGluc3RhbmNlLm9ic2VydmVyKTsKLSAgICB9Ci0g
ICAgaW5zdGFuY2Uuc3VwcG9ydGVkRm9ybWF0cyA9IHRlc3RPYmplY3RGYWN0b3J5LmNhbWVyYUVu
dW1lcmF0b3IuZ2V0U3VwcG9ydGVkRm9ybWF0cyhuYW1lKTsKLSAgICByZXR1cm4gaW5zdGFuY2U7
Ci0gIH0KLQotICBwcml2YXRlIENhcHR1cmVySW5zdGFuY2UgY3JlYXRlQ2FwdHVyZXIoYm9vbGVh
biBpbml0aWFsaXplKSB7Ci0gICAgU3RyaW5nIG5hbWUgPSB0ZXN0T2JqZWN0RmFjdG9yeS5jYW1l
cmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF07Ci0gICAgcmV0dXJuIGNyZWF0ZUNhcHR1
cmVyKG5hbWUsIGluaXRpYWxpemUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0Q2FwdHVy
ZShDYXB0dXJlckluc3RhbmNlIGluc3RhbmNlKSB7Ci0gICAgc3RhcnRDYXB0dXJlKGluc3RhbmNl
LCAwKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFydENhcHR1cmUoQ2FwdHVyZXJJbnN0YW5j
ZSBpbnN0YW5jZSwgaW50IGZvcm1hdEluZGV4KSB7Ci0gICAgZmluYWwgQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkLkNhcHR1cmVGb3JtYXQgZm9ybWF0ID0KLSAgICAgICAgaW5zdGFuY2Uuc3VwcG9y
dGVkRm9ybWF0cy5nZXQoZm9ybWF0SW5kZXgpOwotCi0gICAgaW5zdGFuY2UuY2FwdHVyZXIuc3Rh
cnRDYXB0dXJlKGZvcm1hdC53aWR0aCwgZm9ybWF0LmhlaWdodCwgZm9ybWF0LmZyYW1lcmF0ZS5t
YXgpOwotICAgIGluc3RhbmNlLmZvcm1hdCA9IGZvcm1hdDsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBkaXNwb3NlQ2FwdHVyZXIoQ2FwdHVyZXJJbnN0YW5jZSBpbnN0YW5jZSkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpbnN0YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwot
ICAgIGluc3RhbmNlLmNhbWVyYUV2ZW50cy53YWl0Rm9yQ2FtZXJhQ2xvc2VkKCk7Ci0gICAgaW5z
dGFuY2UuY2FwdHVyZXIuZGlzcG9zZSgpOwotICAgIGluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVs
cGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgIGluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVs
cGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9UcmFja1dpdGhSZW5kZXJlciBj
cmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKAotICAgICAgQ2FtZXJhVmlkZW9DYXB0dXJlciBj
YXB0dXJlciwgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVuZGVyZXJDYWxsYmFja3MpIHsKLSAg
ICBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgPSBuZXcgVmlk
ZW9UcmFja1dpdGhSZW5kZXJlcigpOwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuc291cmNl
ID0gcGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVZpZGVvU291cmNlKGNhcHR1cmVyKTsKLSAg
ICBjYXB0dXJlci5zdGFydENhcHR1cmUoREVGQVVMVF9XSURUSCwgREVGQVVMVF9IRUlHSFQsIERF
RkFVTFRfRlBTKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnRyYWNrID0KLSAgICAgICAg
cGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVZpZGVvVHJhY2soImR1bW15IiwgdmlkZW9UcmFj
a1dpdGhSZW5kZXJlci5zb3VyY2UpOwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIudHJhY2su
YWRkUmVuZGVyZXIobmV3IFZpZGVvUmVuZGVyZXIocmVuZGVyZXJDYWxsYmFja3MpKTsKLSAgICBy
ZXR1cm4gdmlkZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9UcmFj
a1dpdGhSZW5kZXJlciBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKENhbWVyYVZpZGVvQ2Fw
dHVyZXIgY2FwdHVyZXIpIHsKLSAgICBSZW5kZXJlckNhbGxiYWNrcyByZW5kZXJlckNhbGxiYWNr
cyA9IG5ldyBSZW5kZXJlckNhbGxiYWNrcygpOwotICAgIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIg
dmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVu
ZGVyZXIoY2FwdHVyZXIsIHJlbmRlcmVyQ2FsbGJhY2tzKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJl
bmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzID0gcmVuZGVyZXJDYWxsYmFja3M7Ci0gICAgcmV0dXJu
IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXI7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIgY3JlYXRlVmlkZW9UcmFja1dpdGhGYWtlQXN5bmNSZW5kZXJlcigKLSAgICAgIENh
bWVyYVZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIpIHsKLSAgICBGYWtlQXN5bmNSZW5kZXJlciBmYWtl
QXN5bmNSZW5kZXJlciA9IG5ldyBGYWtlQXN5bmNSZW5kZXJlcigpOwotICAgIFZpZGVvVHJhY2tX
aXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXIsIGZha2VBc3luY1JlbmRlcmVyKTsKLSAgICB2aWRl
b1RyYWNrV2l0aFJlbmRlcmVyLmZha2VBc3luY1JlbmRlcmVyID0gZmFrZUFzeW5jUmVuZGVyZXI7
Ci0gICAgcmV0dXJuIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXI7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgZGlzcG9zZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2
aWRlb1RyYWNrV2l0aFJlbmRlcmVyKSB7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci50cmFj
ay5kaXNwb3NlKCk7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5zb3VyY2UuZGlzcG9zZSgp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdhaXRVbnRpbElkbGUoQ2FwdHVyZXJJbnN0YW5jZSBj
YXB0dXJlckluc3RhbmNlKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFs
IENvdW50RG93bkxhdGNoIGJhcnJpZXIgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgY2Fw
dHVyZXJJbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgYmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBiYXJy
aWVyLmF3YWl0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlQ2FwdHVyZXJBbmRSZW5k
ZXIoU3RyaW5nIG5hbWUpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKG5h
bWUgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy53KFRBRywgIlNraXBwaW5nIHZpZGVvIGNhcHR1
cmVyIHRlc3QgYmVjYXVzZSBkZXZpY2UgbmFtZSBpcyBudWxsLiIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNy
ZWF0ZUNhcHR1cmVyKG5hbWUsIGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZp
ZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNy
ZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0g
ICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndh
aXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1
cmVySW5zdGFuY2UpOwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJh
Y2tXaXRoUmVuZGVyZXIpOwotICB9Ci0KLSAgLy8gVGVzdCBtZXRob2RzCi0gIHB1YmxpYyB2b2lk
IGNyZWF0ZUNhcHR1cmVyQW5kRGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNyZWF0ZUNhcHR1cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAq
LykpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIHRyeSB7Ci0gICAgICBkaXNwb3NlQ2FwdHVy
ZXIoY3JlYXRlQ2FwdHVyZXIoIm5vbi1leGlzdGluZyBjYW1lcmEiLCBmYWxzZSAvKiBpbml0aWFs
aXplICovKSk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmYWlsKCJFeHBlY3RlZCBpbGxlZ2FsIGFyZ3VtZW50
IGV4Y2VwdGlvbiB3aGVuIGNyZWF0aW5nIG5vbi1leGlzdGluZyBjYW1lcmEuIik7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCBjcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIG5hbWUgPSB0ZXN0T2JqZWN0RmFjdG9yeS5jYW1lcmFF
bnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF07Ci0gICAgY3JlYXRlQ2FwdHVyZXJBbmRSZW5k
ZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVGcm9udEZhY2luZ0NhcHR1cmVy
QW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBjcmVhdGVDYXB0
dXJlckFuZFJlbmRlcih0ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZGcm9udEZhY2luZ0Rldmlj
ZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUJhY2tGYWNpbmdDYXB0dXJlckFuZFJl
bmRlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgY3JlYXRlQ2FwdHVyZXJB
bmRSZW5kZXIodGVzdE9iamVjdEZhY3RvcnkuZ2V0TmFtZU9mQmFja0ZhY2luZ0RldmljZSgpKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHN3aXRjaENhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgaWYgKCF0ZXN0T2JqZWN0RmFjdG9yeS5oYXZlVHdvQ2FtZXJhcygpKSB7
Ci0gICAgICBMb2dnaW5nLncoCi0gICAgICAgICAgVEFHLCAiU2tpcHBpbmcgdGVzdCBzd2l0Y2gg
dmlkZW8gY2FwdHVyZXIgYmVjYXVzZSB0aGUgZGV2aWNlIGRvZXNuJ3QgaGF2ZSB0d28gY2FtZXJh
cy4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNl
IGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihmYWxzZSAvKiBpbml0aWFsaXplICov
KTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKGNhcHR1cmVySW5zdGFu
Y2UuY2FwdHVyZXIpOwotICAgIC8vIFdhaXQgZm9yIHRoZSBjYW1lcmEgdG8gc3RhcnQgc28gd2Ug
Y2FuIHN3aXRjaCBpdAotICAgIGFzc2VydFRydWUodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5k
ZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKSA+IDApOwotCi0gICAgLy8g
QXJyYXkgd2l0aCBvbmUgZWxlbWVudCB0byBhdm9pZCBmaW5hbCBwcm9ibGVtIGluIG5lc3RlZCBj
bGFzc2VzLgotICAgIGZpbmFsIGJvb2xlYW5bXSBjYW1lcmFTd2l0Y2hTdWNjZXNzZnVsID0gbmV3
IGJvb2xlYW5bMV07Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggYmFycmllciA9IG5ldyBDb3Vu
dERvd25MYXRjaCgxKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN3aXRjaENhbWVy
YShuZXcgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFTd2l0Y2hIYW5kbGVyKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYVN3aXRjaERvbmUoYm9vbGVhbiBp
c0Zyb250Q2FtZXJhKSB7Ci0gICAgICAgIGNhbWVyYVN3aXRjaFN1Y2Nlc3NmdWxbMF0gPSB0cnVl
OwotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgfQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYVN3aXRjaEVycm9yKFN0cmluZyBlcnJvckRlc2Ny
aXB0aW9uKSB7Ci0gICAgICAgIGNhbWVyYVN3aXRjaFN1Y2Nlc3NmdWxbMF0gPSBmYWxzZTsKLSAg
ICAgICAgYmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAvLyBXYWl0
IHVudGlsIHRoZSBjYW1lcmEgaGFzIGJlZW4gc3dpdGNoZWQuCi0gICAgYmFycmllci5hd2FpdCgp
OwotCi0gICAgLy8gQ2hlY2sgcmVzdWx0LgotICAgIGFzc2VydFRydWUoY2FtZXJhU3dpdGNoU3Vj
Y2Vzc2Z1bFswXSk7Ci0gICAgLy8gRW5zdXJlIHRoYXQgZnJhbWVzIGFyZSByZWNlaXZlZC4KLSAg
ICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2Fp
dEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVy
ZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIodmlkZW9UcmFj
a1dpdGhSZW5kZXJlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjYW1lcmFFdmVudHNJbnZva2Vk
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3Rh
bmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcih0cnVlIC8qIGluaXRpYWxpemUg
Ki8pOwotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLSAgICAvLyBNYWtlIHN1
cmUgY2FtZXJhIGlzIHN0YXJ0ZWQgYW5kIGZpcnN0IGZyYW1lIGlzIHJlY2VpdmVkIGFuZCB0aGVu
IHN0b3AgaXQuCi0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRG
b3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0
Rm9yTmV4dENhcHR1cmVkRnJhbWUoKTsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0
YW5jZSk7Ci0KLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2UuY2FtZXJhRXZlbnRzLm9u
Q2FtZXJhT3BlbmluZ0NhbGxlZCk7Ci0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLmNh
bWVyYUV2ZW50cy5vbkZpcnN0RnJhbWVBdmFpbGFibGVDYWxsZWQpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgY2FtZXJhQ2FsbHNBZnRlclN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNh
cHR1cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVy
SW5zdGFuY2UpOwotICAgIC8vIE1ha2Ugc3VyZSBjYW1lcmEgaXMgc3RhcnRlZCBhbmQgdGhlbiBz
dG9wIGl0LgotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9y
Q2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuc3RvcENh
cHR1cmUoKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVy
blRleHR1cmVGcmFtZSgpOwotCi0gICAgLy8gV2UgY2FuJ3QgY2hhbmdlIHxjYXB0dXJlcnwgYXQg
dGhpcyBwb2ludCwgYnV0IHdlIHNob3VsZCBub3QgY3Jhc2guCi0gICAgY2FwdHVyZXJJbnN0YW5j
ZS5jYXB0dXJlci5zd2l0Y2hDYW1lcmEobnVsbCAvKiBzd2l0Y2hFdmVudHNIYW5kbGVyICovKTsK
LSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLmNoYW5nZUNhcHR1cmVGb3JtYXQoREVGQVVM
VF9XSURUSCwgREVGQVVMVF9IRUlHSFQsIERFRkFVTFRfRlBTKTsKLQotICAgIGRpc3Bvc2VDYXB0
dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0b3BSZXN0YXJ0
VmlkZW9Tb3VyY2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENh
cHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGZhbHNlIC8q
IGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9U
cmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIo
Y2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0KLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tX
aXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkg
PiAwKTsKLSAgICBhc3NlcnRFcXVhbHMoTWVkaWFTb3VyY2UuU3RhdGUuTElWRSwgdmlkZW9UcmFj
a1dpdGhSZW5kZXJlci5zb3VyY2Uuc3RhdGUoKSk7Ci0KLSAgICBjYXB0dXJlckluc3RhbmNlLmNh
cHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKE1lZGlhU291cmNlLlN0YXRl
LkVOREVELCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZS5zdGF0ZSgpKTsKLQotICAgIHN0
YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tX
aXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkg
PiAwKTsKLSAgICBhc3NlcnRFcXVhbHMoTWVkaWFTb3VyY2UuU3RhdGUuTElWRSwgdmlkZW9UcmFj
a1dpdGhSZW5kZXJlci5zb3VyY2Uuc3RhdGUoKSk7Ci0KLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2Fw
dHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIodmlkZW9U
cmFja1dpdGhSZW5kZXJlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdGFydFN0b3BXaXRoRGlm
ZmVyZW50UmVzb2x1dGlvbnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZp
bmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKHRy
dWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkg
ewotICAgICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UsIGkpOwotICAgICAgYXNzZXJ0
VHJ1ZShjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7
Ci0gICAgICBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JOZXh0Q2FwdHVyZWRGcmFt
ZSgpOwotCi0gICAgICAvLyBDaGVjayB0aGUgZnJhbWUgc2l6ZS4gVGhlIGFjdHVhbCB3aWR0aCBh
bmQgaGVpZ2h0IGRlcGVuZCBvbiBob3cgdGhlIGNhcHR1cmVyIGlzIG1vdW50ZWQuCi0gICAgICBm
aW5hbCBib29sZWFuIGlkZW50aWNhbFJlc29sdXRpb24gPQotICAgICAgICAgIChjYXB0dXJlcklu
c3RhbmNlLm9ic2VydmVyLmZyYW1lV2lkdGgoKSA9PSBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC53
aWR0aAotICAgICAgICAgICAgICAmJiBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZyYW1lSGVp
Z2h0KCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQuaGVpZ2h0KTsKLSAgICAgIGZpbmFsIGJv
b2xlYW4gZmxpcHBlZFJlc29sdXRpb24gPQotICAgICAgICAgIChjYXB0dXJlckluc3RhbmNlLm9i
c2VydmVyLmZyYW1lV2lkdGgoKSA9PSBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC5oZWlnaHQKLSAg
ICAgICAgICAgICAgJiYgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZUhlaWdodCgpID09
IGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0LndpZHRoKTsKLSAgICAgIGlmICghaWRlbnRpY2FsUmVz
b2x1dGlvbiAmJiAhZmxpcHBlZFJlc29sdXRpb24pIHsKLSAgICAgICAgZmFpbCgiV3JvbmcgcmVz
b2x1dGlvbiwgZ290OiAiICsgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZVdpZHRoKCkg
KyAieCIKLSAgICAgICAgICAgICsgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZUhlaWdo
dCgpICsgIiBleHBlY3RlZDogIgotICAgICAgICAgICAgKyBjYXB0dXJlckluc3RhbmNlLmZvcm1h
dC53aWR0aCArICJ4IiArIGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0LmhlaWdodCArICIgb3IgIgot
ICAgICAgICAgICAgKyBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC5oZWlnaHQgKyAieCIgKyBjYXB0
dXJlckluc3RhbmNlLmZvcm1hdC53aWR0aCk7Ci0gICAgICB9Ci0KLSAgICAgIGlmICh0ZXN0T2Jq
ZWN0RmFjdG9yeS5pc0NhcHR1cmluZ1RvVGV4dHVyZSgpKSB7Ci0gICAgICAgIGFzc2VydEVxdWFs
cygwLCBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZyYW1lU2l6ZSgpKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQuZnJhbWVTaXpl
KCkgPD0gY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZVNpemUoKSk7Ci0gICAgICB9Ci0g
ICAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgICBjYXB0
dXJlckluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwot
ICAgIH0KLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCByZXR1cm5CdWZmZXJMYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVD
YXB0dXJlcih0cnVlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJl
ckluc3RhbmNlKTsKLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2Fp
dEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLQotICAgIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIu
d2FpdEZvck5leHRDYXB0dXJlZEZyYW1lKCk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJl
ci5zdG9wQ2FwdHVyZSgpOwotICAgIExpc3Q8TG9uZz4gbGlzdE9mdGltZXN0YW1wcyA9IGNhcHR1
cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZ2V0Q29weUFuZFJlc2V0TGlzdE9mdGltZVN0YW1wcygpOwot
ICAgIGFzc2VydFRydWUobGlzdE9mdGltZXN0YW1wcy5zaXplKCkgPj0gMSk7Ci0KLSAgICBzdGFy
dENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSwgMSk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5vYnNl
cnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5zdXJm
YWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgIGNhcHR1cmVySW5z
dGFuY2Uub2JzZXJ2ZXIud2FpdEZvck5leHRDYXB0dXJlZEZyYW1lKCk7Ci0gICAgY2FwdHVyZXJJ
bnN0YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotCi0gICAgbGlzdE9mdGltZXN0YW1wcyA9
IGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZ2V0Q29weUFuZFJlc2V0TGlzdE9mdGltZVN0YW1w
cygpOwotICAgIGFzc2VydFRydWUobGlzdE9mdGltZXN0YW1wcy5zaXplKCkgPj0gMSk7Ci0KLSAg
ICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCByZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNh
cHR1cmVyKGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJh
Y2tXaXRoRmFrZUFzeW5jUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAg
Ly8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGZyYW1lIHRoYXQgaGFzIG5vdCBiZWVuIHJldHVybmVk
LgotICAgIGFzc2VydEZhbHNlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVy
ZXIud2FpdEZvclBlbmRpbmdGcmFtZXMoKS5pc0VtcHR5KCkpOwotCi0gICAgY2FwdHVyZXJJbnN0
YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotCi0gICAgLy8gRGlzcG9zZSBldmVyeXRoaW5n
LgotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3NlVmlk
ZW9UcmFja1dpdGhSZW5kZXJlcih2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKTsKLQotICAgIC8vIFJl
dHVybiB0aGUgZnJhbWUocyksIG9uIGEgZGlmZmVyZW50IHRocmVhZCBvdXQgb2Ygc3BpdGUuCi0g
ICAgZmluYWwgTGlzdDxJNDIwRnJhbWU+IHBlbmRpbmdGcmFtZXMgPQotICAgICAgICB2aWRlb1Ry
YWNrV2l0aFJlbmRlcmVyLmZha2VBc3luY1JlbmRlcmVyLndhaXRGb3JQZW5kaW5nRnJhbWVzKCk7
Ci0gICAgZmluYWwgVGhyZWFkIHJldHVyblRocmVhZCA9IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGZvciAoSTQyMEZyYW1lIGZyYW1lIDogcGVuZGluZ0ZyYW1lcykgewotICAgICAgICAgIFZpZGVv
UmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0pOwotICAgIHJldHVyblRocmVhZC5zdGFydCgpOwotICAgIHJldHVyblRocmVhZC5qb2luKCk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjYW1lcmFGcmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRp
b24oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5z
dGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKHRydWUgLyogaW5pdGlhbGl6
ZSAqLyk7Ci0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotICAgIC8vIE1ha2Ug
c3VyZSBjYW1lcmEgaXMgc3RhcnRlZC4KLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uu
b2JzZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLSAgICAvLyBTaW5jZSB3ZSBkb24n
dCByZXR1cm4gdGhlIGJ1ZmZlciwgd2Ugc2hvdWxkIGdldCBhIHN0YXJ2YXRpb24gbWVzc2FnZSBp
ZiB3ZSBhcmUKLSAgICAvLyBjYXB0dXJpbmcgdG8gYSB0ZXh0dXJlLgotICAgIGFzc2VydEVxdWFs
cygiQ2FtZXJhIGZhaWx1cmUuIENsaWVudCBtdXN0IHJldHVybiB2aWRlbyBidWZmZXJzLiIsCi0g
ICAgICAgIGNhcHR1cmVySW5zdGFuY2UuY2FtZXJhRXZlbnRzLndhaXRGb3JDYW1lcmFGcmVlemVk
KCkpOwotCi0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAg
IGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHNjYWxlQ2FtZXJhT3V0cHV0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBm
aW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihm
YWxzZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVy
IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJl
bmRlcmVyKGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIpOwotICAgIGFzc2VydFRydWUodmlkZW9U
cmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5k
ZXIoKSA+IDApOwotCi0gICAgZmluYWwgaW50IHN0YXJ0V2lkdGggPSB2aWRlb1RyYWNrV2l0aFJl
bmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lV2lkdGgoKTsKLSAgICBmaW5hbCBpbnQgc3Rh
cnRIZWlnaHQgPSB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1l
SGVpZ2h0KCk7Ci0gICAgZmluYWwgaW50IGZyYW1lUmF0ZSA9IDMwOwotICAgIGZpbmFsIGludCBz
Y2FsZWRXaWR0aCA9IHN0YXJ0V2lkdGggLyAyOwotICAgIGZpbmFsIGludCBzY2FsZWRIZWlnaHQg
PSBzdGFydEhlaWdodCAvIDI7Ci0KLSAgICAvLyBSZXF1ZXN0IHRoZSBjYXB0dXJlZCBmcmFtZXMg
dG8gYmUgc2NhbGVkLgotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuc291cmNlLmFkYXB0T3V0
cHV0Rm9ybWF0KHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQsIGZyYW1lUmF0ZSk7Ci0KLSAgICBi
b29sZWFuIGdvdEV4cGVjdGVkUmVzb2x1dGlvbiA9IGZhbHNlOwotICAgIGludCBudW1iZXJPZklu
c3BlY3RlZEZyYW1lcyA9IDA7Ci0KLSAgICBkbyB7Ci0gICAgICB2aWRlb1RyYWNrV2l0aFJlbmRl
cmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpOwotICAgICAg
KytudW1iZXJPZkluc3BlY3RlZEZyYW1lczsKLQotICAgICAgZ290RXhwZWN0ZWRSZXNvbHV0aW9u
ID0gKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3MuZnJhbWVXaWR0aCgp
ID09IHNjYWxlZFdpZHRoCi0gICAgICAgICAgJiYgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5k
ZXJlckNhbGxiYWNrcy5mcmFtZUhlaWdodCgpID09IHNjYWxlZEhlaWdodCk7Ci0gICAgfSB3aGls
ZSAoIWdvdEV4cGVjdGVkUmVzb2x1dGlvbiAmJiBudW1iZXJPZkluc3BlY3RlZEZyYW1lcyA8IDMw
KTsKLQotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3Nl
VmlkZW9UcmFja1dpdGhSZW5kZXJlcih2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKTsKLQotICAgIGFz
c2VydFRydWUoZ290RXhwZWN0ZWRSZXNvbHV0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0
YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBmaW5hbCBTdHJpbmcgY2FtZXJhTmFtZSA9IHRlc3RPYmplY3RGYWN0b3J5LmdldE5h
bWVPZkJhY2tGYWNpbmdEZXZpY2UoKTsKLSAgICAvLyBBdCB0aGlzIHBvaW50IGNhbWVyYSBpcyBu
b3QgYWN0dWFsbHkgb3BlbmVkLgotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJ
bnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGNhbWVyYU5hbWUsIHRydWUgLyogaW5pdGlhbGl6ZSAq
Lyk7Ci0KLSAgICBmaW5hbCBPYmplY3QgY29tcGV0aW5nQ2FtZXJhID0gdGVzdE9iamVjdEZhY3Rv
cnkucmF3T3BlbkNhbWVyYShjYW1lcmFOYW1lKTsKLQotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJl
ckluc3RhbmNlKTsKLQotICAgIGlmIChhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+
IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUF9NUjEpIHsKLSAgICAgIC8v
IFRoZSBmaXJzdCBvcGVuZWQgY2FtZXJhIGNsaWVudCB3aWxsIGJlIGV2aWN0ZWQuCi0gICAgICBh
c3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFy
dCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgYXNzZXJ0RmFsc2UoY2FwdHVyZXJJbnN0YW5jZS5v
YnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgIH0KLQotICAgIHRlc3RPYmpl
Y3RGYWN0b3J5LnJhd0Nsb3NlQ2FtZXJhKGNvbXBldGluZ0NhbWVyYSk7Ci0gICAgZGlzcG9zZUNh
cHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3RhcnRXaGls
ZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZmluYWwgU3RyaW5nIGNhbWVyYU5hbWUgPSB0ZXN0T2JqZWN0RmFjdG9y
eS5nZXROYW1lT2ZCYWNrRmFjaW5nRGV2aWNlKCk7Ci0gICAgLy8gQXQgdGhpcyBwb2ludCBjYW1l
cmEgaXMgbm90IGFjdHVhbGx5IG9wZW5lZC4KLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNh
cHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihjYW1lcmFOYW1lLCBmYWxzZSAvKiBpbml0
aWFsaXplICovKTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFdoaWxlQ2FtZXJhSXNBbHJl
YWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBPcGVuaW5nIGNvbXBldGluZyBjYW1lcmEuIik7Ci0gICAg
ZmluYWwgT2JqZWN0IGNvbXBldGluZ0NhbWVyYSA9IHRlc3RPYmplY3RGYWN0b3J5LnJhd09wZW5D
YW1lcmEoY2FtZXJhTmFtZSk7Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRXaGlsZUNhbWVy
YUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYTogT3BlbmluZyBjYW1lcmEuIik7Ci0gICAgZmlu
YWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAg
ICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVy
KTsKLSAgICB3YWl0VW50aWxJZGxlKGNhcHR1cmVySW5zdGFuY2UpOwotCi0gICAgTG9nZ2luZy5k
KFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmE6IENsb3Np
bmcgY29tcGV0aW5nIGNhbWVyYS4iKTsKLSAgICB0ZXN0T2JqZWN0RmFjdG9yeS5yYXdDbG9zZUNh
bWVyYShjb21wZXRpbmdDYW1lcmEpOwotCi0gICAgLy8gTWFrZSBzdXJlIGNhbWVyYSBpcyBzdGFy
dGVkIGFuZCBmaXJzdCBmcmFtZSBpcyByZWNlaXZlZCBhbmQgdGhlbiBzdG9wIGl0LgotICAgIExv
Z2dpbmcuZChUQUcsICJzdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJh
OiBXYWl0aW5nIGZvciBjYXB0dXJlIHRvIHN0YXJ0LiIpOwotICAgIHZpZGVvVHJhY2tXaXRoUmVu
ZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCk7Ci0gICAg
TG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1l
cmE6IFN0b3BwaW5nIGNhcHR1cmUuIik7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5z
dGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9w
ZW5BbmRTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdHJp
bmcgY2FtZXJhTmFtZSA9IHRlc3RPYmplY3RGYWN0b3J5LmdldE5hbWVPZkJhY2tGYWNpbmdEZXZp
Y2UoKTsKLSAgICAvLyBBdCB0aGlzIHBvaW50IGNhbWVyYSBpcyBub3QgYWN0dWFsbHkgb3BlbmVk
LgotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNh
cHR1cmVyKGNhbWVyYU5hbWUsIHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0KLSAgICBmaW5hbCBP
YmplY3QgY29tcGV0aW5nQ2FtZXJhID0gdGVzdE9iamVjdEZhY3RvcnkucmF3T3BlbkNhbWVyYShj
YW1lcmFOYW1lKTsKLQotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLSAgICBk
aXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0KLSAgICB0ZXN0T2JqZWN0RmFjdG9y
eS5yYXdDbG9zZUNhbWVyYShjb21wZXRpbmdDYW1lcmEpOwotICB9Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvd2VicnRjL0VnbFJlbmRlcmVyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93
ZWJydGMvRWdsUmVuZGVyZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29y
Zy93ZWJydGMvRWdsUmVuZGVyZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNjcgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNl
VGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMTFFeHQ7Ci1pbXBvcnQgYW5kcm9p
ZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0
Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxU
ZXN0OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJy
ZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0
OwotCi0vLyBFbXB0eUFjdGl2aXR5IGlzIG5lZWRlZCBmb3IgdGhlIHN1cmZhY2UuCi1wdWJsaWMg
Y2xhc3MgRWdsUmVuZGVyZXJUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2Ugewot
ICBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJFZ2xSZW5kZXJlclRlc3QiOwotICBmaW5hbCBz
dGF0aWMgaW50IFJFTkRFUl9XQUlUX01TID0gMTAwMDsKLSAgZmluYWwgc3RhdGljIGludCBTVVJG
QUNFX1dBSVRfTVMgPSAxMDAwOwotICBmaW5hbCBzdGF0aWMgaW50IFRFU1RfRlJBTUVfV0lEVEgg
PSA0OwotICBmaW5hbCBzdGF0aWMgaW50IFRFU1RfRlJBTUVfSEVJR0hUID0gNDsKLSAgLy8gU29t
ZSBhcmJpdHJhcnkgZnJhbWVzLgotICBmaW5hbCBzdGF0aWMgQnl0ZUJ1ZmZlcltdW10gVEVTVF9G
UkFNRVMgPSB7Ci0gICAgICB7Ci0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10g
ewotICAgICAgICAgICAgICAxMSwgLTEyLCAxMywgLTE0LCAtMTUsIDE2LCAtMTcsIDE4LCAxOSwg
LTExMCwgMTExLCAtMTEyLCAtMTEzLCAxMTQsIC0xMTUsIDExNn0pLAotICAgICAgICAgIEJ5dGVC
dWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMTcsIDExOCwgMTE5LCAxMjB9KSwKLSAgICAgICAgICBC
eXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7MTIxLCAxMjIsIDEyMywgMTI0fSksCi0gICAgICB9
LAotICAgICAgewotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHstMTEsIC0x
MiwgLTEzLCAtMTQsIC0xNSwgLTE2LCAtMTcsIC0xOCwgLTE5LCAtMTEwLCAtMTExLCAtMTEyLAot
ICAgICAgICAgICAgICAtMTEzLCAtMTE0LCAtMTE1LCAtMTE2fSksCi0gICAgICAgICAgQnl0ZUJ1
ZmZlci53cmFwKG5ldyBieXRlW10gey0xMjEsIC0xMjIsIC0xMjMsIC0xMjR9KSwKLSAgICAgICAg
ICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7LTExNywgLTExOCwgLTExOSwgLTEyMH0pLAot
ICAgICAgfSwKLSAgICAgIHsKLSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7
LTExLCAtMTIsIC0xMywgLTE0LCAtMTUsIC0xNiwgLTE3LCAtMTgsIC0xOSwgLTExMCwgLTExMSwg
LTExMiwKLSAgICAgICAgICAgICAgLTExMywgLTExNCwgLTExNSwgLTExNn0pLAotICAgICAgICAg
IEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMTcsIDExOCwgMTE5LCAxMjB9KSwKLSAgICAg
ICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7MTIxLCAxMjIsIDEyMywgMTI0fSksCi0g
ICAgICB9LAotICB9OwotCi0gIHByaXZhdGUgY2xhc3MgVGVzdEZyYW1lTGlzdGVuZXIgaW1wbGVt
ZW50cyBFZ2xSZW5kZXJlci5GcmFtZUxpc3RlbmVyIHsKLSAgICBmaW5hbCBwcml2YXRlIEFycmF5
TGlzdDxCaXRtYXA+IGJpdG1hcHMgPSBuZXcgQXJyYXlMaXN0PEJpdG1hcD4oKTsKLSAgICBib29s
ZWFuIGJpdG1hcFJlY2VpdmVkOwotICAgIEJpdG1hcCBzdG9yZWRCaXRtYXA7Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25GcmFtZShCaXRtYXAgYml0bWFw
KSB7Ci0gICAgICBpZiAoYml0bWFwUmVjZWl2ZWQpIHsKLSAgICAgICAgZmFpbCgiVW5leHBlY3Rl
ZCBiaXRtYXAgd2FzIHJlY2VpdmVkLiIpOwotICAgICAgfQotCi0gICAgICBiaXRtYXBSZWNlaXZl
ZCA9IHRydWU7Ci0gICAgICBzdG9yZWRCaXRtYXAgPSBiaXRtYXA7Ci0gICAgICBub3RpZnkoKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIGJvb2xlYW4gd2FpdEZvckJpdG1hcChp
bnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgaWYgKCFi
aXRtYXBSZWNlaXZlZCkgewotICAgICAgICB3YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm4gYml0bWFwUmVjZWl2ZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXpl
ZCBCaXRtYXAgcmVzZXRBbmRHZXRCaXRtYXAoKSB7Ci0gICAgICBiaXRtYXBSZWNlaXZlZCA9IGZh
bHNlOwotICAgICAgcmV0dXJuIHN0b3JlZEJpdG1hcDsKLSAgICB9Ci0gIH0KLQotICBmaW5hbCBU
ZXN0RnJhbWVMaXN0ZW5lciB0ZXN0RnJhbWVMaXN0ZW5lciA9IG5ldyBUZXN0RnJhbWVMaXN0ZW5l
cigpOwotCi0gIEVnbFJlbmRlcmVyIGVnbFJlbmRlcmVyOwotICBDb3VudERvd25MYXRjaCBzdXJm
YWNlUmVhZHlMYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgaW50IG9lc1RleHR1cmVJ
ZDsKLSAgU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmU7Ci0KLSAgQE92ZXJyaWRlCi0gIHBy
b3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgUGVlckNvbm5lY3Rp
b25GYWN0b3J5LmluaXRpYWxpemVBbmRyb2lkR2xvYmFscyhnZXRJbnN0cnVtZW50YXRpb24oKS5n
ZXRUYXJnZXRDb250ZXh0KCksCi0gICAgICAgIHRydWUgLyogaW5pdGlhbGl6ZUF1ZGlvICovLCB0
cnVlIC8qIGluaXRpYWxpemVWaWRlbyAqLywgdHJ1ZSAvKiB2aWRlb0h3QWNjZWxlcmF0aW9uICov
KTsKLSAgICBlZ2xSZW5kZXJlciA9IG5ldyBFZ2xSZW5kZXJlcigiVGVzdFJlbmRlcmVyOiAiKTsK
LSAgICBlZ2xSZW5kZXJlci5pbml0KG51bGwgLyogc2hhcmVkQ29udGV4dCAqLywgRWdsQmFzZS5D
T05GSUdfUkdCQSwgbmV3IEdsUmVjdERyYXdlcigpKTsKLSAgICBvZXNUZXh0dXJlSWQgPSBHbFV0
aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7Ci0g
ICAgc3VyZmFjZVRleHR1cmUgPSBuZXcgU3VyZmFjZVRleHR1cmUob2VzVGV4dHVyZUlkKTsKLSAg
ICBzdXJmYWNlVGV4dHVyZS5zZXREZWZhdWx0QnVmZmVyU2l6ZSgxIC8qIHdpZHRoICovLCAxIC8q
IGhlaWdodCAqLyk7Ci0gICAgZWdsUmVuZGVyZXIuY3JlYXRlRWdsU3VyZmFjZShzdXJmYWNlVGV4
dHVyZSk7Ci0gICAgZWdsUmVuZGVyZXIuc3VyZmFjZVNpemVDaGFuZ2VkKDEgLyogd2lkdGggKi8s
IDEgLyogaGVpZ2h0ICovKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCB0ZWFy
RG93bigpIHsKLSAgICBzdXJmYWNlVGV4dHVyZS5yZWxlYXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVs
ZXRlVGV4dHVyZXMoMSAvKiBuICovLCBuZXcgaW50W10ge29lc1RleHR1cmVJZH0sIDAgLyogb2Zm
c2V0ICovKTsKLSAgICBlZ2xSZW5kZXJlci5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKiogQ2hlY2tz
IHRoZSBiaXRtYXAgaXMgbm90IG51bGwgYW5kIHRoZSBjb3JyZWN0IHNpemUuICovCi0gIHByaXZh
dGUgc3RhdGljIHZvaWQgY2hlY2tCaXRtYXAoQml0bWFwIGJpdG1hcCwgZmxvYXQgc2NhbGUpIHsK
LSAgICBhc3NlcnROb3ROdWxsKGJpdG1hcCk7Ci0gICAgYXNzZXJ0RXF1YWxzKChpbnQpIChURVNU
X0ZSQU1FX1dJRFRIICogc2NhbGUpLCBiaXRtYXAuZ2V0V2lkdGgoKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKChpbnQpIChURVNUX0ZSQU1FX0hFSUdIVCAqIHNjYWxlKSwgYml0bWFwLmdldEhlaWdodCgp
KTsKLSAgfQotCi0gIC8qKgotICAgKiBEb2VzIGxpbmVhciBzYW1wbGluZyBvbiBVL1YgcGxhbmUg
b2YgdGVzdCBkYXRhLgotICAgKgotICAgKiBAcGFyYW0gZGF0YSBQbGFuZSBkYXRhIHRvIGJlIHNh
bXBsZWQgZnJvbS4KLSAgICogQHBhcmFtIHBsYW5lV2lkdGggV2lkdGggb2YgdGhlIHBsYW5lIGRh
dGEuIFRoaXMgaXMgYWxzbyBhc3N1bWVkIHRvIGJlIHRoZSBzdHJpZGUuCi0gICAqIEBwYXJhbSBw
bGFuZUhlaWdodCBIZWlnaHQgb2YgdGhlIHBsYW5lIGRhdGEuCi0gICAqIEBwYXJhbSB4IFgtY29v
cmRpbmF0ZSBpbiByYW5nZSBbMCwgMV0uCi0gICAqIEBwYXJhbSB5IFktY29vcmRpbmF0ZSBpbiBy
YW5nZSBbMCwgMV0uCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmbG9hdCBsaW5lYXJTYW1wbGUo
Ci0gICAgICBCeXRlQnVmZmVyIHBsYW5lLCBpbnQgcGxhbmVXaWR0aCwgaW50IHBsYW5lSGVpZ2h0
LCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgZmluYWwgaW50IHN0cmlkZSA9IHBsYW5lV2lkdGg7
Ci0KLSAgICBmaW5hbCBmbG9hdCBjb29yZFggPSB4ICogcGxhbmVXaWR0aDsKLSAgICBmaW5hbCBm
bG9hdCBjb29yZFkgPSB5ICogcGxhbmVIZWlnaHQ7Ci0KLSAgICBpbnQgbG93SW5kZXhYID0gKGlu
dCkgTWF0aC5mbG9vcihjb29yZFggLSAwLjVmKTsKLSAgICBpbnQgbG93SW5kZXhZID0gKGludCkg
TWF0aC5mbG9vcihjb29yZFkgLSAwLjVmKTsKLSAgICBpbnQgaGlnaEluZGV4WCA9IGxvd0luZGV4
WCArIDE7Ci0gICAgaW50IGhpZ2hJbmRleFkgPSBsb3dJbmRleFkgKyAxOwotCi0gICAgZmluYWwg
ZmxvYXQgaGlnaFdlaWdodFggPSBjb29yZFggLSBsb3dJbmRleFggLSAwLjVmOwotICAgIGZpbmFs
IGZsb2F0IGhpZ2hXZWlnaHRZID0gY29vcmRZIC0gbG93SW5kZXhZIC0gMC41ZjsKLSAgICBmaW5h
bCBmbG9hdCBsb3dXZWlnaHRYID0gMWYgLSBoaWdoV2VpZ2h0WDsKLSAgICBmaW5hbCBmbG9hdCBs
b3dXZWlnaHRZID0gMWYgLSBoaWdoV2VpZ2h0WTsKLQotICAgIC8vIENsYW1wIG9uIHRoZSBlZGdl
cy4KLSAgICBsb3dJbmRleFggPSBNYXRoLm1heCgwLCBsb3dJbmRleFgpOwotICAgIGxvd0luZGV4
WSA9IE1hdGgubWF4KDAsIGxvd0luZGV4WSk7Ci0gICAgaGlnaEluZGV4WCA9IE1hdGgubWluKHBs
YW5lV2lkdGggLSAxLCBoaWdoSW5kZXhYKTsKLSAgICBoaWdoSW5kZXhZID0gTWF0aC5taW4ocGxh
bmVIZWlnaHQgLSAxLCBoaWdoSW5kZXhZKTsKLQotICAgIGZsb2F0IGxvd1lWYWx1ZSA9IChwbGFu
ZS5nZXQobG93SW5kZXhZICogc3RyaWRlICsgbG93SW5kZXhYKSAmIDB4RkYpICogbG93V2VpZ2h0
WAotICAgICAgICArIChwbGFuZS5nZXQobG93SW5kZXhZICogc3RyaWRlICsgaGlnaEluZGV4WCkg
JiAweEZGKSAqIGhpZ2hXZWlnaHRYOwotICAgIGZsb2F0IGhpZ2hZVmFsdWUgPSAocGxhbmUuZ2V0
KGhpZ2hJbmRleFkgKiBzdHJpZGUgKyBsb3dJbmRleFgpICYgMHhGRikgKiBsb3dXZWlnaHRYCi0g
ICAgICAgICsgKHBsYW5lLmdldChoaWdoSW5kZXhZICogc3RyaWRlICsgaGlnaEluZGV4WCkgJiAw
eEZGKSAqIGhpZ2hXZWlnaHRYOwotCi0gICAgcmV0dXJuIChsb3dXZWlnaHRZICogbG93WVZhbHVl
ICsgaGlnaFdlaWdodFkgKiBoaWdoWVZhbHVlKSAvIDI1NWY7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBieXRlIHNhdHVyYXRlZEZsb2F0VG9CeXRlKGZsb2F0IGMpIHsKLSAgICByZXR1cm4gKGJ5
dGUpIE1hdGgucm91bmQoMjU1ZiAqIE1hdGgubWF4KDBmLCBNYXRoLm1pbigxZiwgYykpKTsKLSAg
fQotCi0gIC8qKgotICAgKiBDb252ZXJ0cyB0ZXN0IGRhdGEgWVVWIGZyYW1lIHRvIGV4cGVjdGVk
IFJHQkEgZnJhbWUuIFRyaWVzIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBvZiBPcGVuR0wKLSAgICog
WVVWIGRyYXdlciBzaGFkZXIuIERvZXMgbGluZWFyIHNhbXBsaW5nIG9uIHRoZSBVLSBhbmQgVi1w
bGFuZXMuCi0gICAqCi0gICAqIEBwYXJhbSB5dXZGcmFtZSBBcnJheSBvZiBzaXplIDMgY29udGFp
bmluZyBZLSwgVS0sIFYtcGxhbmVzIGZvciBpbWFnZSBvZiBzaXplCi0gICAqICAgICAgICAgICAg
ICAgICAoVEVTVF9GUkFNRV9XSURUSCwgVEVTVF9GUkFNRV9IRUlHSFQpLiBVLSBhbmQgVi1wbGFu
ZXMgc2hvdWxkIGJlIGhhbGYgdGhlIHNpemUKLSAgICogICAgICAgICAgICAgICAgIG9mIHRoZSBZ
LXBsYW5lLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgYnl0ZVtdIGNvbnZlcnRZVVZGcmFtZVRv
UkdCQShCeXRlQnVmZmVyW10geXV2RnJhbWUpIHsKLSAgICBmaW5hbCBieXRlW10gYXJnYkZyYW1l
ID0gbmV3IGJ5dGVbVEVTVF9GUkFNRV9XSURUSCAqIFRFU1RfRlJBTUVfSEVJR0hUICogNF07Ci0g
ICAgZmluYWwgaW50IGFyZ2JTdHJpZGUgPSBURVNUX0ZSQU1FX1dJRFRIICogNDsKLSAgICBmaW5h
bCBpbnQgeVN0cmlkZSA9IFRFU1RfRlJBTUVfV0lEVEg7Ci0KLSAgICBmaW5hbCBpbnQgdlN0cmlk
ZSA9IFRFU1RfRlJBTUVfV0lEVEggLyAyOwotCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBURVNU
X0ZSQU1FX0hFSUdIVDsgeSsrKSB7Ci0gICAgICBmb3IgKGludCB4ID0gMDsgeCA8IFRFU1RfRlJB
TUVfV0lEVEg7IHgrKykgewotICAgICAgICBmaW5hbCBpbnQgeDIgPSB4IC8gMjsKLSAgICAgICAg
ZmluYWwgaW50IHkyID0geSAvIDI7Ci0KLSAgICAgICAgZmluYWwgZmxvYXQgeUMgPSAoeXV2RnJh
bWVbMF0uZ2V0KHkgKiB5U3RyaWRlICsgeCkgJiAweEZGKSAvIDI1NWY7Ci0gICAgICAgIGZpbmFs
IGZsb2F0IHVDID0gbGluZWFyU2FtcGxlKHl1dkZyYW1lWzFdLCBURVNUX0ZSQU1FX1dJRFRIIC8g
MiwgVEVTVF9GUkFNRV9IRUlHSFQgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
eCArIDAuNWYpIC8gVEVTVF9GUkFNRV9XSURUSCwgKHkgKyAwLjVmKSAvIFRFU1RfRlJBTUVfSEVJ
R0hUKQotICAgICAgICAgICAgLSAwLjVmOwotICAgICAgICBmaW5hbCBmbG9hdCB2QyA9IGxpbmVh
clNhbXBsZSh5dXZGcmFtZVsyXSwgVEVTVF9GUkFNRV9XSURUSCAvIDIsIFRFU1RfRlJBTUVfSEVJ
R0hUIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHggKyAwLjVmKSAvIFRFU1Rf
RlJBTUVfV0lEVEgsICh5ICsgMC41ZikgLyBURVNUX0ZSQU1FX0hFSUdIVCkKLSAgICAgICAgICAg
IC0gMC41ZjsKLSAgICAgICAgZmluYWwgZmxvYXQgckMgPSB5QyArIDEuNDAzZiAqIHZDOwotICAg
ICAgICBmaW5hbCBmbG9hdCBnQyA9IHlDIC0gMC4zNDRmICogdUMgLSAwLjcxNGYgKiB2QzsKLSAg
ICAgICAgZmluYWwgZmxvYXQgYkMgPSB5QyArIDEuNzdmICogdUM7Ci0KLSAgICAgICAgYXJnYkZy
YW1lW3kgKiBhcmdiU3RyaWRlICsgeCAqIDQgKyAwXSA9IHNhdHVyYXRlZEZsb2F0VG9CeXRlKHJD
KTsKLSAgICAgICAgYXJnYkZyYW1lW3kgKiBhcmdiU3RyaWRlICsgeCAqIDQgKyAxXSA9IHNhdHVy
YXRlZEZsb2F0VG9CeXRlKGdDKTsKLSAgICAgICAgYXJnYkZyYW1lW3kgKiBhcmdiU3RyaWRlICsg
eCAqIDQgKyAyXSA9IHNhdHVyYXRlZEZsb2F0VG9CeXRlKGJDKTsKLSAgICAgICAgYXJnYkZyYW1l
W3kgKiBhcmdiU3RyaWRlICsgeCAqIDQgKyAzXSA9IChieXRlKSAyNTU7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcmV0dXJuIGFyZ2JGcmFtZTsKLSAgfQotCi0gIC8qKiBDaGVja3MgdGhhdCB0aGUg
Yml0bWFwIGNvbnRlbnQgbWF0Y2hlcyB0aGUgdGVzdCBmcmFtZSB3aXRoIHRoZSBnaXZlbiBpbmRl
eC4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0JpdG1hcENvbnRlbnQoQml0bWFwIGJp
dG1hcCwgaW50IGZyYW1lKSB7Ci0gICAgY2hlY2tCaXRtYXAoYml0bWFwLCAxZik7Ci0KLSAgICBi
eXRlW10gZXhwZWN0ZWRSR0JBID0gY29udmVydFlVVkZyYW1lVG9SR0JBKFRFU1RfRlJBTUVTW2Zy
YW1lXSk7Ci0gICAgQnl0ZUJ1ZmZlciBiaXRtYXBCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRl
RGlyZWN0KGJpdG1hcC5nZXRCeXRlQ291bnQoKSk7Ci0gICAgYml0bWFwLmNvcHlQaXhlbHNUb0J1
ZmZlcihiaXRtYXBCdWZmZXIpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFJH
QkEubGVuZ3RoOyBpKyspIHsKLSAgICAgIGludCBleHBlY3RlZCA9IGV4cGVjdGVkUkdCQVtpXSAm
IDB4RkY7Ci0gICAgICBpbnQgdmFsdWUgPSBiaXRtYXBCdWZmZXIuZ2V0KGkpICYgMHhGRjsKLSAg
ICAgIC8vIER1ZSB0byB1bmtub3duIGNvbnZlcnNpb24gZGlmZmVyZW5jZXMgY2hlY2sgdmFsdWUg
bWF0Y2hlcyArLTEuCi0gICAgICBpZiAoTWF0aC5hYnModmFsdWUgLSBleHBlY3RlZCkgPiAxKSB7
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJFeHBlY3RlZCBiaXRtYXAgY29udGVudDogIiArIEFy
cmF5cy50b1N0cmluZyhleHBlY3RlZFJHQkEpKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkJp
dG1hcCBjb250ZW50OiAiICsgQXJyYXlzLnRvU3RyaW5nKGJpdG1hcEJ1ZmZlci5hcnJheSgpKSk7
Ci0gICAgICAgIGZhaWwoIkZyYW1lIGRvZXNuJ3QgbWF0Y2ggb3JpZ2luYWwgZnJhbWUgb24gYnl0
ZSAiICsgaSArICIuIEV4cGVjdGVkOiAiICsgZXhwZWN0ZWQKLSAgICAgICAgICAgICsgIiBSZXN1
bHQ6ICIgKyB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqIFRlbGxzIGVnbFJl
bmRlcmVyIHRvIHJlbmRlciB0ZXN0IGZyYW1lIHdpdGggZ2l2ZW4gaW5kZXguICovCi0gIHByaXZh
dGUgdm9pZCBmZWVkRnJhbWUoaW50IGkpIHsKLSAgICBlZ2xSZW5kZXJlci5yZW5kZXJGcmFtZShu
ZXcgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUoVEVTVF9GUkFNRV9XSURUSCwgVEVTVF9GUkFNRV9I
RUlHSFQsIDAsCi0gICAgICAgIG5ldyBpbnRbXSB7VEVTVF9GUkFNRV9XSURUSCwgVEVTVF9GUkFN
RV9XSURUSCAvIDIsIFRFU1RfRlJBTUVfV0lEVEggLyAyfSwgVEVTVF9GUkFNRVNbaV0sCi0gICAg
ICAgIDApKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEFkZEZyYW1l
TGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxp
c3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCAwZiAvKiBzY2FsZUZhY3RvciAqLyk7Ci0gICAgZmVl
ZEZyYW1lKDApOwotICAgIGFzc2VydFRydWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1h
cChSRU5ERVJfV0FJVF9NUykpOwotICAgIGFzc2VydE51bGwodGVzdEZyYW1lTGlzdGVuZXIucmVz
ZXRBbmRHZXRCaXRtYXAoKSk7Ci0gICAgZWdsUmVuZGVyZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0
RnJhbWVMaXN0ZW5lciwgMGYgLyogc2NhbGVGYWN0b3IgKi8pOwotICAgIGZlZWRGcmFtZSgxKTsK
LSAgICBhc3NlcnRUcnVlKHRlc3RGcmFtZUxpc3RlbmVyLndhaXRGb3JCaXRtYXAoUkVOREVSX1dB
SVRfTVMpKTsKLSAgICBhc3NlcnROdWxsKHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0
bWFwKCkpOwotICAgIGZlZWRGcmFtZSgyKTsKLSAgICAvLyBDaGVjayB3ZSBnZXQgbm8gbW9yZSBi
aXRtYXBzIHRoYW4gdHdvLgotICAgIGFzc2VydEZhbHNlKHRlc3RGcmFtZUxpc3RlbmVyLndhaXRG
b3JCaXRtYXAoUkVOREVSX1dBSVRfTVMpKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdEFkZEZyYW1lTGlzdGVuZXJCaXRtYXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCAxZiAvKiBz
Y2FsZUZhY3RvciAqLyk7Ci0gICAgZmVlZEZyYW1lKDApOwotICAgIGFzc2VydFRydWUodGVzdEZy
YW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICAgIGNoZWNrQml0
bWFwQ29udGVudCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpLCAwKTsKLSAg
ICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCAxZiAvKiBz
Y2FsZUZhY3RvciAqLyk7Ci0gICAgZmVlZEZyYW1lKDEpOwotICAgIGFzc2VydFRydWUodGVzdEZy
YW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICAgIGNoZWNrQml0
bWFwQ29udGVudCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpLCAxKTsKLSAg
fQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEFkZEZyYW1lTGlzdGVuZXJCaXRt
YXBTY2FsZSgpIHRocm93cyBFeGNlcHRpb24gewotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsg
KytpKSB7Ci0gICAgICBmbG9hdCBzY2FsZSA9IGkgKiAwLjVmICsgMC41ZjsKLSAgICAgIGVnbFJl
bmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVuZXIsIHNjYWxlKTsKLSAgICAg
IGZlZWRGcmFtZShpKTsKLSAgICAgIGFzc2VydFRydWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZv
ckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICAgICAgY2hlY2tCaXRtYXAodGVzdEZyYW1lTGlz
dGVuZXIucmVzZXRBbmRHZXRCaXRtYXAoKSwgc2NhbGUpOwotICAgIH0KLSAgfQotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0
cy9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9z
cmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVz
dHMvc3JjL29yZy93ZWJydGMvR2xSZWN0RHJhd2VyVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMjk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQu
b3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWlt
cG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTWVkaXVtVGVzdDsKLWlt
cG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotCi1p
bXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotCi1w
dWJsaWMgZmluYWwgY2xhc3MgR2xSZWN0RHJhd2VyVGVzdCBleHRlbmRzIEFjdGl2aXR5VGVzdENh
c2UgewotICAvLyBSZXNvbHV0aW9uIG9mIHRoZSB0ZXN0IGltYWdlLgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgV0lEVEggPSAxNjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFSUdI
VCA9IDE2OwotICAvLyBTZWVkIGZvciByYW5kb20gcGl4ZWwgY3JlYXRpb24uCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBTRUVEID0gNDI7Ci0gIC8vIFdoZW4gY29tcGFyaW5nIHBpeGVscywg
YWxsb3cgc29tZSBzbGFjayBmb3IgZmxvYXQgYXJpdGhtZXRpYyBhbmQgaW50ZWdlciByb3VuZGlu
Zy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQgTUFYX0RJRkYgPSAxLjVmOwotCi0gIHBy
aXZhdGUgc3RhdGljIGZsb2F0IG5vcm1hbGl6ZWRCeXRlKGJ5dGUgYikgewotICAgIHJldHVybiAo
YiAmIDB4RkYpIC8gMjU1LjBmOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgc2F0dXJh
dGVkQ29udmVydChmbG9hdCBjKSB7Ci0gICAgcmV0dXJuIDI1NS4wZiAqIE1hdGgubWF4KDAsIE1h
dGgubWluKGMsIDEpKTsKLSAgfQotCi0gIC8vIEFzc2VydCBSR0IgQnl0ZUJ1ZmZlcnMgYXJlIHBp
eGVsIHBlcmZlY3QgaWRlbnRpY2FsLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFs
cyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIEJ5dGVCdWZmZXIgYWN0dWFsLCBCeXRlQnVmZmVyIGV4
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
biByZ2JCdWZmZXI7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZ2JS
ZW5kZXJpbmcoKSB7Ci0gICAgLy8gQ3JlYXRlIEVHTCBiYXNlIHdpdGggYSBwaXhlbCBidWZmZXIg
YXMgZGlzcGxheSBvdXRwdXQuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5j
cmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICBlZ2xCYXNlLmNy
ZWF0ZVBidWZmZXJTdXJmYWNlKFdJRFRILCBIRUlHSFQpOwotICAgIGVnbEJhc2UubWFrZUN1cnJl
bnQoKTsKLQotICAgIC8vIENyZWF0ZSBSR0IgYnl0ZSBidWZmZXIgcGxhbmUgd2l0aCByYW5kb20g
Y29udGVudC4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYlBsYW5lID0gQnl0ZUJ1ZmZlci5hbGxv
Y2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDMpOwotICAgIGZpbmFsIFJhbmRvbSByYW5kb20g
PSBuZXcgUmFuZG9tKFNFRUQpOwotICAgIHJhbmRvbS5uZXh0Qnl0ZXMocmdiUGxhbmUuYXJyYXko
KSk7Ci0KLSAgICAvLyBVcGxvYWQgdGhlIFJHQiBieXRlIGJ1ZmZlciBkYXRhIGFzIGEgdGV4dHVy
ZS4KLSAgICBmaW5hbCBpbnQgcmdiVGV4dHVyZSA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xF
UzIwLkdMX1RFWFRVUkVfMkQpOwotICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdM
X1RFWFRVUkUwKTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8y
RCwgcmdiVGV4dHVyZSk7Ci0gICAgR0xFUzIwLmdsVGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVS
RV8yRCwgMCwgR0xFUzIwLkdMX1JHQiwgV0lEVEgsIEhFSUdIVCwgMCwgR0xFUzIwLkdMX1JHQiwK
LSAgICAgICAgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYlBsYW5lKTsKLSAgICBHbFV0aWwu
Y2hlY2tOb0dMRVMyRXJyb3IoImdsVGV4SW1hZ2UyRCIpOwotCi0gICAgLy8gRHJhdyB0aGUgUkdC
IGZyYW1lIG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICBmaW5hbCBHbFJlY3REcmF3ZXIgZHJh
d2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotICAgIGRyYXdlci5kcmF3UmdiKHJnYlRleHR1cmUs
IFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCksIFdJRFRILCBIRUlHSFQsIDAgLyogdmll
d3BvcnRYICovLAotICAgICAgICAwIC8qIHZpZXdwb3J0WSAqLywgV0lEVEgsIEhFSUdIVCk7Ci0K
LSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4g
Tm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUuZy4gTmV4dXMgOS4KLSAgICBmaW5hbCBC
eXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhF
SUdIVCAqIDQpOwotICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwgMCwgV0lEVEgsIEhFSUdIVCwg
R0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JhRGF0YSk7Ci0gICAg
R2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJlYWRQaXhlbHMiKTsKLQotICAgIC8vIEFzc2Vy
dCByZW5kZXJlZCBpbWFnZSBpcyBwaXhlbCBwZXJmZWN0IHRvIHNvdXJjZSBSR0IuCi0gICAgYXNz
ZXJ0RXF1YWxzKFdJRFRILCBIRUlHSFQsIHN0cmlwQWxwaGFDaGFubmVsKHJnYmFEYXRhKSwgcmdi
UGxhbmUpOwotCi0gICAgZHJhd2VyLnJlbGVhc2UoKTsKLSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0
dXJlcygxLCBuZXcgaW50W10ge3JnYlRleHR1cmV9LCAwKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2Uo
KTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFl1dlJlbmRlcmluZygp
IHsKLSAgICAvLyBDcmVhdGUgRUdMIGJhc2Ugd2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5
IG91dHB1dC4KLSAgICBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xC
YXNlLkNPTkZJR19QSVhFTF9CVUZGRVIpOwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZh
Y2UoV0lEVEgsIEhFSUdIVCk7Ci0gICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotCi0gICAgLy8g
Q3JlYXRlIFlVViBieXRlIGJ1ZmZlciBwbGFuZXMgd2l0aCByYW5kb20gY29udGVudC4KLSAgICBm
aW5hbCBCeXRlQnVmZmVyW10geXV2UGxhbmVzID0gbmV3IEJ5dGVCdWZmZXJbM107Ci0gICAgZmlu
YWwgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oU0VFRCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCAzOyArK2kpIHsKLSAgICAgIHl1dlBsYW5lc1tpXSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVE
aXJlY3QoV0lEVEggKiBIRUlHSFQpOwotICAgICAgcmFuZG9tLm5leHRCeXRlcyh5dXZQbGFuZXNb
aV0uYXJyYXkoKSk7Ci0gICAgfQotCi0gICAgLy8gR2VuZXJhdGUgMyB0ZXh0dXJlIGlkcyBmb3Ig
WS9VL1YuCi0gICAgZmluYWwgaW50IHl1dlRleHR1cmVzW10gPSBuZXcgaW50WzNdOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICB5dXZUZXh0dXJlc1tpXSA9IEdsVXRp
bC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgIH0KLQotICAgIC8v
IFVwbG9hZCB0aGUgWVVWIGJ5dGUgYnVmZmVyIGRhdGEgYXMgdGV4dHVyZXMuCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xF
UzIwLkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAu
R0xfVEVYVFVSRV8yRCwgeXV2VGV4dHVyZXNbaV0pOwotICAgICAgR0xFUzIwLmdsVGV4SW1hZ2Uy
RChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgR0xFUzIwLkdMX0xVTUlOQU5DRSwgV0lEVEgsIEhF
SUdIVCwgMCwKLSAgICAgICAgICBHTEVTMjAuR0xfTFVNSU5BTkNFLCBHTEVTMjAuR0xfVU5TSUdO
RURfQllURSwgeXV2UGxhbmVzW2ldKTsKLSAgICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigi
Z2xUZXhJbWFnZTJEIik7Ci0gICAgfQotCi0gICAgLy8gRHJhdyB0aGUgWVVWIGZyYW1lIG9udG8g
dGhlIHBpeGVsIGJ1ZmZlci4KLSAgICBmaW5hbCBHbFJlY3REcmF3ZXIgZHJhd2VyID0gbmV3IEds
UmVjdERyYXdlcigpOwotICAgIGRyYXdlci5kcmF3WXV2KHl1dlRleHR1cmVzLCBSZW5kZXJlckNv
bW1vbi5pZGVudGl0eU1hdHJpeCgpLCBXSURUSCwgSEVJR0hULCAwIC8qIHZpZXdwb3J0WCAqLywK
LSAgICAgICAgMCAvKiB2aWV3cG9ydFkgKi8sIFdJRFRILCBIRUlHSFQpOwotCi0gICAgLy8gRG93
bmxvYWQgdGhlIHBpeGVscyBpbiB0aGUgcGl4ZWwgYnVmZmVyIGFzIFJHQkEuIE5vdCBhbGwgcGxh
dGZvcm1zIHN1cHBvcnQgUkdCLCBlLmcuIE5leHVzIDkuCi0gICAgZmluYWwgQnl0ZUJ1ZmZlciBk
YXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDQpOwotICAg
IEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwgMCwgV0lEVEgsIEhFSUdIVCwgR0xFUzIwLkdMX1JHQkEs
IEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCBkYXRhKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMy
RXJyb3IoImdsUmVhZFBpeGVscyIpOwotCi0gICAgLy8gQ29tcGFyZSB0aGUgWVVWIGRhdGEgd2l0
aCB0aGUgUkdCQSByZXN1bHQuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBIRUlHSFQ7ICsreSkg
ewotICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBXSURUSDsgKyt4KSB7Ci0gICAgICAgIC8vIFlV
ViBjb2xvciBzcGFjZS4gWSBpbiBbMCwgMV0sIFVWIGluIFstMC41LCAwLjVdLiBUaGUgY29uc3Rh
bnRzIGFyZSB0YWtlbiBmcm9tIHRoZSBZVVYKLSAgICAgICAgLy8gZnJhZ21lbnQgc2hhZGVyIGNv
ZGUgaW4gR2xSZWN0RHJhd2VyLgotICAgICAgICBmaW5hbCBmbG9hdCB5X2x1bWEgPSBub3JtYWxp
emVkQnl0ZSh5dXZQbGFuZXNbMF0uZ2V0KCkpOwotICAgICAgICBmaW5hbCBmbG9hdCB1X2Nocm9t
YSA9IG5vcm1hbGl6ZWRCeXRlKHl1dlBsYW5lc1sxXS5nZXQoKSkgLSAwLjVmOwotICAgICAgICBm
aW5hbCBmbG9hdCB2X2Nocm9tYSA9IG5vcm1hbGl6ZWRCeXRlKHl1dlBsYW5lc1syXS5nZXQoKSkg
LSAwLjVmOwotICAgICAgICAvLyBFeHBlY3RlZCBjb2xvciBpbiB1bnJvdW5kZWQgUkdCIFswLjBm
LCAyNTUuMGZdLgotICAgICAgICBmaW5hbCBmbG9hdCBleHBlY3RlZFJlZCA9IHNhdHVyYXRlZENv
bnZlcnQoeV9sdW1hICsgMS40MDNmICogdl9jaHJvbWEpOwotICAgICAgICBmaW5hbCBmbG9hdCBl
eHBlY3RlZEdyZWVuID0KLSAgICAgICAgICAgIHNhdHVyYXRlZENvbnZlcnQoeV9sdW1hIC0gMC4z
NDRmICogdV9jaHJvbWEgLSAwLjcxNGYgKiB2X2Nocm9tYSk7Ci0gICAgICAgIGZpbmFsIGZsb2F0
IGV4cGVjdGVkQmx1ZSA9IHNhdHVyYXRlZENvbnZlcnQoeV9sdW1hICsgMS43N2YgKiB1X2Nocm9t
YSk7Ci0KLSAgICAgICAgLy8gQWN0dWFsIGNvbG9yIGluIFJHQjg4ODguCi0gICAgICAgIGZpbmFs
IGludCBhY3R1YWxSZWQgPSBkYXRhLmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwgaW50IGFj
dHVhbEdyZWVuID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBhY3R1YWxC
bHVlID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBhY3R1YWxBbHBoYSA9
IGRhdGEuZ2V0KCkgJiAweEZGOwotCi0gICAgICAgIC8vIEFzc2VydCByZW5kZXJlZCBpbWFnZSBp
cyBjbG9zZSB0byBwaXhlbCBwZXJmZWN0IGZyb20gc291cmNlIFlVVi4KLSAgICAgICAgYXNzZXJ0
VHJ1ZShNYXRoLmFicyhhY3R1YWxSZWQgLSBleHBlY3RlZFJlZCkgPCBNQVhfRElGRik7Ci0gICAg
ICAgIGFzc2VydFRydWUoTWF0aC5hYnMoYWN0dWFsR3JlZW4gLSBleHBlY3RlZEdyZWVuKSA8IE1B
WF9ESUZGKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShNYXRoLmFicyhhY3R1YWxCbHVlIC0gZXhwZWN0
ZWRCbHVlKSA8IE1BWF9ESUZGKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGFjdHVhbEFscGhhLCAy
NTUpOwotICAgICAgfQotICAgIH0KLQotICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgR0xFUzIw
LmdsRGVsZXRlVGV4dHVyZXMoMywgeXV2VGV4dHVyZXMsIDApOwotICAgIGVnbEJhc2UucmVsZWFz
ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBwdXJwb3NlIGhlcmUgaXMgdG8gdGVzdCBHbFJl
Y3REcmF3ZXIub2VzRHJhdygpLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBubyBlYXN5IHdheSB0
bwotICAgKiBjcmVhdGUgYW4gT0VTIHRleHR1cmUsIHdoaWNoIGlzIG5lZWRlZCBmb3IgaW5wdXQg
dG8gb2VzRHJhdygpLiBNb3N0IG9mIHRoZSB0ZXN0IGlzIGNvbmNlcm5lZAotICAgKiB3aXRoIGNy
ZWF0aW5nIE9FUyB0ZXh0dXJlcyBpbiB0aGUgZm9sbG93aW5nIHdheToKLSAgICogIC0gQ3JlYXRl
IFN1cmZhY2VUZXh0dXJlIHdpdGggaGVscCBmcm9tIFN1cmZhY2VUZXh0dXJlSGVscGVyLgotICAg
KiAgLSBDcmVhdGUgYW4gRWdsQmFzZSB3aXRoIHRoZSBTdXJmYWNlVGV4dHVyZSBhcyBFR0xTdXJm
YWNlLgotICAgKiAgLSBVcGxvYWQgUkdCIHRleHR1cmUgd2l0aCBrbm93biBjb250ZW50LgotICAg
KiAgLSBEcmF3IHRoZSBSR0IgdGV4dHVyZSBvbnRvIHRoZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZh
Y2VUZXh0dXJlIGFzIHRhcmdldC4KLSAgICogIC0gV2FpdCBmb3IgYW4gT0VTIHRleHR1cmUgdG8g
YmUgcHJvZHVjZWQuCi0gICAqIFRoZSBhY3R1YWwgb2VzRHJhdygpIHRlc3QgaXMgdGhpczoKLSAg
ICogIC0gQ3JlYXRlIGFuIEVnbEJhc2Ugd2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyB0YXJnZXQuCi0g
ICAqICAtIFJlbmRlciB0aGUgT0VTIHRleHR1cmUgb250byB0aGUgcGl4ZWwgYnVmZmVyLgotICAg
KiAgLSBSZWFkIGJhY2sgdGhlIHBpeGVsIGJ1ZmZlciBhbmQgY29tcGFyZSBpdCB3aXRoIHRoZSBr
bm93biBSR0IgZGF0YS4KLSAgICovCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RP
ZXNSZW5kZXJpbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIC8qKgotICAg
ICAqIFN0dWIgY2xhc3MgdG8gY29udmVydCBSR0IgQnl0ZUJ1ZmZlcnMgdG8gT0VTIHRleHR1cmVz
IGJ5IGRyYXdpbmcgb250byBhIFN1cmZhY2VUZXh0dXJlLgotICAgICAqLwotICAgIGNsYXNzIFN0
dWJPZXNUZXh0dXJlUHJvZHVjZXIgewotICAgICAgcHJpdmF0ZSBmaW5hbCBFZ2xCYXNlIGVnbEJh
c2U7Ci0gICAgICBwcml2YXRlIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3ZXI7Ci0gICAgICBwcml2
YXRlIGZpbmFsIGludCByZ2JUZXh0dXJlOwotCi0gICAgICBwdWJsaWMgU3R1Yk9lc1RleHR1cmVQ
cm9kdWNlcigKLSAgICAgICAgICBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwgU3VyZmFj
ZVRleHR1cmUgc3VyZmFjZVRleHR1cmUsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAg
ICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoc2hhcmVkQ29udGV4dCwgRWdsQmFzZS5DT05GSUdf
UExBSU4pOwotICAgICAgICBzdXJmYWNlVGV4dHVyZS5zZXREZWZhdWx0QnVmZmVyU2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKLSAgICAgICAgZWdsQmFzZS5jcmVhdGVTdXJmYWNlKHN1cmZhY2VUZXh0dXJl
KTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGVnbEJhc2Uuc3VyZmFjZVdpZHRoKCksIHdpZHRoKTsK
LSAgICAgICAgYXNzZXJ0RXF1YWxzKGVnbEJhc2Uuc3VyZmFjZUhlaWdodCgpLCBoZWlnaHQpOwot
Ci0gICAgICAgIGRyYXdlciA9IG5ldyBHbFJlY3REcmF3ZXIoKTsKLQotICAgICAgICBlZ2xCYXNl
Lm1ha2VDdXJyZW50KCk7Ci0gICAgICAgIHJnYlRleHR1cmUgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0
dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQg
ZHJhdyhCeXRlQnVmZmVyIHJnYlBsYW5lKSB7Ci0gICAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQo
KTsKLQotICAgICAgICAvLyBVcGxvYWQgUkdCIGRhdGEgdG8gdGV4dHVyZS4KLSAgICAgICAgR0xF
UzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAgICAgICBHTEVTMjAu
Z2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgcmdiVGV4dHVyZSk7Ci0gICAgICAg
IEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDAsIEdMRVMyMC5HTF9S
R0IsIFdJRFRILCBIRUlHSFQsIDAsIEdMRVMyMC5HTF9SR0IsCi0gICAgICAgICAgICBHTEVTMjAu
R0xfVU5TSUdORURfQllURSwgcmdiUGxhbmUpOwotICAgICAgICAvLyBEcmF3IHRoZSBSR0IgZGF0
YSBvbnRvIHRoZSBTdXJmYWNlVGV4dHVyZS4KLSAgICAgICAgZHJhd2VyLmRyYXdSZ2IocmdiVGV4
dHVyZSwgUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKSwgV0lEVEgsIEhFSUdIVCwKLSAg
ICAgICAgICAgIDAgLyogdmlld3BvcnRYICovLCAwIC8qIHZpZXdwb3J0WSAqLywgV0lEVEgsIEhF
SUdIVCk7Ci0gICAgICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAgICAgIH0KLQotICAgICAg
cHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwot
ICAgICAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgICAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJl
cygxLCBuZXcgaW50W10ge3JnYlRleHR1cmV9LCAwKTsKLSAgICAgICAgZWdsQmFzZS5yZWxlYXNl
KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIEVHTCBiYXNlIHdpdGggYSBwaXhl
bCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0g
RWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICBl
Z2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKFdJRFRILCBIRUlHSFQpOwotCi0gICAgLy8gQ3Jl
YXRlIHJlc291cmNlcyBmb3IgZ2VuZXJhdGluZyBPRVMgdGV4dHVyZXMuCi0gICAgZmluYWwgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhl
bHBlci5jcmVhdGUoCi0gICAgICAgICJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJl
YWROYW1lICovLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotICAgIGZpbmFsIFN0dWJP
ZXNUZXh0dXJlUHJvZHVjZXIgb2VzUHJvZHVjZXIgPSBuZXcgU3R1Yk9lc1RleHR1cmVQcm9kdWNl
cigKLSAgICAgICAgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBzdXJmYWNlVGV4dHVyZUhl
bHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpLCBXSURUSCwgSEVJR0hUKTsKLSAgICBmaW5hbCBTdXJm
YWNlVGV4dHVyZUhlbHBlclRlc3QuTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9Ci0gICAg
ICAgIG5ldyBTdXJmYWNlVGV4dHVyZUhlbHBlclRlc3QuTW9ja1RleHR1cmVMaXN0ZW5lcigpOwot
ICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLQotICAg
IC8vIENyZWF0ZSBSR0IgYnl0ZSBidWZmZXIgcGxhbmUgd2l0aCByYW5kb20gY29udGVudC4KLSAg
ICBmaW5hbCBCeXRlQnVmZmVyIHJnYlBsYW5lID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChX
SURUSCAqIEhFSUdIVCAqIDMpOwotICAgIGZpbmFsIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9t
KFNFRUQpOwotICAgIHJhbmRvbS5uZXh0Qnl0ZXMocmdiUGxhbmUuYXJyYXkoKSk7Ci0KLSAgICAv
LyBEcmF3IHRoZSBmcmFtZSBhbmQgYmxvY2sgdW50aWwgYW4gT0VTIHRleHR1cmUgaXMgZGVsaXZl
cmVkLgotICAgIG9lc1Byb2R1Y2VyLmRyYXcocmdiUGxhbmUpOwotICAgIGxpc3RlbmVyLndhaXRG
b3JOZXdGcmFtZSgpOwotCi0gICAgLy8gUmVhbCB0ZXN0IHN0YXJ0cyBoZXJlLgotICAgIC8vIERy
YXcgdGhlIE9FUyB0ZXh0dXJlIG9uIHRoZSBwaXhlbCBidWZmZXIuCi0gICAgZWdsQmFzZS5tYWtl
Q3VycmVudCgpOwotICAgIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJh
d2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdPZXMobGlzdGVuZXIub2VzVGV4dHVyZUlkLCBsaXN0ZW5l
ci50cmFuc2Zvcm1NYXRyaXgsIFdJRFRILCBIRUlHSFQsCi0gICAgICAgIDAgLyogdmlld3BvcnRY
ICovLCAwIC8qIHZpZXdwb3J0WSAqLywgV0lEVEgsIEhFSUdIVCk7Ci0KLSAgICAvLyBEb3dubG9h
ZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4gTm90IGFsbCBwbGF0Zm9y
bXMgc3VwcG9ydCBSR0IsIGUuZy4gTmV4dXMgOS4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFE
YXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDQpOwotICAg
IEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwgMCwgV0lEVEgsIEhFSUdIVCwgR0xFUzIwLkdMX1JHQkEs
IEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JhRGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJnbFJlYWRQaXhlbHMiKTsKLQotICAgIC8vIEFzc2VydCByZW5kZXJlZCBpbWFn
ZSBpcyBwaXhlbCBwZXJmZWN0IHRvIHNvdXJjZSBSR0IuCi0gICAgYXNzZXJ0RXF1YWxzKFdJRFRI
LCBIRUlHSFQsIHN0cmlwQWxwaGFDaGFubmVsKHJnYmFEYXRhKSwgcmdiUGxhbmUpOwotCi0gICAg
ZHJhd2VyLnJlbGVhc2UoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJl
RnJhbWUoKTsKLSAgICBvZXNQcm9kdWNlci5yZWxlYXNlKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVI
ZWxwZXIuZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXJUZXN0LmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyVGVzdC5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29k
ZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2Rlci5PdXRwdXRCdWZmZXJJbmZvOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0
aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMTFFeHQ7Ci1pbXBvcnQg
YW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQg
YW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRl
YnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwot
Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLQotQFRhcmdldEFwaShCdWlsZC5WRVJTSU9O
X0NPREVTLklDRV9DUkVBTV9TQU5EV0lDSF9NUjEpCi1wdWJsaWMgZmluYWwgY2xhc3MgTWVkaWFD
b2RlY1ZpZGVvRW5jb2RlclRlc3QgZXh0ZW5kcyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgZmluYWwg
c3RhdGljIFN0cmluZyBUQUcgPSAiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlclRlc3QiOwotCi0gIEBT
bWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RJbml0aWFsaXplVXNpbmdCeXRlQnVm
ZmVyKCkgewotICAgIGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVk
KCkpIHsKLSAgICAgIExvZy5pKFRBRywgIkhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgVlA4IGVu
Y29kaW5nLCBza2lwcGluZyB0ZXN0SW5pdFJlbGVhc2VVc2luZ0J5dGVCdWZmZXIiKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3
IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsKLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVu
Y29kZSgKLSAgICAgICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5WaWRlb0NvZGVjVHlwZS5WSURF
T19DT0RFQ19WUDgsIDY0MCwgNDgwLCAzMDAsIDMwLCBudWxsKSk7Ci0gICAgZW5jb2Rlci5yZWxl
YXNlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0SW5p
dGlsaXplVXNpbmdUZXh0dXJlcygpIHsKLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIu
aXNWcDhId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkgewotICAgICAgTG9nLmkoVEFHLCAiaGFy
ZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBWUDggZW5jb2RpbmcsIHNraXBwaW5nIHRlc3RFbmNvZGVy
VXNpbmdUZXh0dXJlcyIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBFZ2xCYXNlMTQgZWds
QmFzZSA9IG5ldyBFZ2xCYXNlMTQobnVsbCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgIE1l
ZGlhQ29kZWNWaWRlb0VuY29kZXIgZW5jb2RlciA9IG5ldyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVy
KCk7Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmluaXRFbmNvZGUoTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlci5WaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgsIDY0MCwgNDgwLAotICAgICAgICAz
MDAsIDMwLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpKTsKLSAgICBlbmNvZGVyLnJlbGVh
c2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVi
bGljIHN0YXRpYyB2b2lkIHRlc3RJbml0aWFsaXplVXNpbmdCeXRlQnVmZmVyUmVJbml0aWxpemVV
c2luZ1RleHR1cmVzKCkgewotICAgIGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3
U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpKSB7Ci0gICAgICBMb2cuaShUQUcsICJoYXJkd2FyZSBk
b2VzIG5vdCBzdXBwb3J0IFZQOCBlbmNvZGluZywgc2tpcHBpbmcgdGVzdEVuY29kZXJVc2luZ1Rl
eHR1cmVzIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29k
ZXIgZW5jb2RlciA9IG5ldyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKCk7Ci0gICAgYXNzZXJ0VHJ1
ZShlbmNvZGVyLmluaXRFbmNvZGUoCi0gICAgICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlk
ZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4LCA2NDAsIDQ4MCwgMzAwLCAzMCwgbnVsbCkpOwot
ICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAgIEVnbEJhc2UxNCBlZ2xCYXNlID0gbmV3IEVnbEJh
c2UxNChudWxsLCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVy
LmluaXRFbmNvZGUoTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5WaWRlb0NvZGVjVHlwZS5WSURFT19D
T0RFQ19WUDgsIDY0MCwgNDgwLAotICAgICAgICAzMDAsIDMwLCBlZ2xCYXNlLmdldEVnbEJhc2VD
b250ZXh0KCkpKTsKLSAgICBlbmNvZGVyLnJlbGVhc2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2Uo
KTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RFbmNvZGVy
VXNpbmdCeXRlQnVmZmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAo
IU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1cHBvcnRlZCgpKSB7Ci0gICAgICBMb2cu
aShUQUcsICJIYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFZQOCBlbmNvZGluZywgc2tpcHBpbmcg
dGVzdEVuY29kZXJVc2luZ0J5dGVCdWZmZXIiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBmaW5hbCBpbnQgd2lkdGggPSA2NDA7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IDQ4MDsKLSAg
ICBmaW5hbCBpbnQgbWluX3NpemUgPSB3aWR0aCAqIGhlaWdodCAqIDMgLyAyOwotICAgIGZpbmFs
IGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMgPSAyOwotCi0gICAgTWVkaWFDb2RlY1ZpZGVv
RW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsKLQotICAgIGFz
c2VydFRydWUoZW5jb2Rlci5pbml0RW5jb2RlKAotICAgICAgICBNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyLlZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCwgd2lkdGgsIGhlaWdodCwgMzAwLCAz
MCwgbnVsbCkpOwotICAgIEJ5dGVCdWZmZXJbXSBpbnB1dEJ1ZmZlcnMgPSBlbmNvZGVyLmdldElu
cHV0QnVmZmVycygpOwotICAgIGFzc2VydE5vdE51bGwoaW5wdXRCdWZmZXJzKTsKLSAgICBhc3Nl
cnRUcnVlKG1pbl9zaXplIDw9IGlucHV0QnVmZmVyc1swXS5jYXBhY2l0eSgpKTsKLQotICAgIGlu
dCBidWZmZXJJbmRleDsKLSAgICBkbyB7Ci0gICAgICBUaHJlYWQuc2xlZXAoMTApOwotICAgICAg
YnVmZmVySW5kZXggPSBlbmNvZGVyLmRlcXVldWVJbnB1dEJ1ZmZlcigpOwotICAgIH0gd2hpbGUg
KGJ1ZmZlckluZGV4ID09IC0xKTsgLy8gfC0xfCBpcyByZXR1cm5lZCB3aGVuIHRoZXJlIGlzIG5v
IGJ1ZmZlciBhdmFpbGFibGUgeWV0LgotCi0gICAgYXNzZXJ0VHJ1ZShidWZmZXJJbmRleCA+PSAw
KTsKLSAgICBhc3NlcnRUcnVlKGJ1ZmZlckluZGV4IDwgaW5wdXRCdWZmZXJzLmxlbmd0aCk7Ci0g
ICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmVuY29kZUJ1ZmZlcih0cnVlLCBidWZmZXJJbmRleCwgbWlu
X3NpemUsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSk7Ci0KLSAgICBPdXRwdXRCdWZmZXJJbmZv
IGluZm87Ci0gICAgZG8gewotICAgICAgaW5mbyA9IGVuY29kZXIuZGVxdWV1ZU91dHB1dEJ1ZmZl
cigpOwotICAgICAgVGhyZWFkLnNsZWVwKDEwKTsKLSAgICB9IHdoaWxlIChpbmZvID09IG51bGwp
OwotICAgIGFzc2VydFRydWUoaW5mby5pbmRleCA+PSAwKTsKLSAgICBhc3NlcnRFcXVhbHMocHJl
c2VudGF0aW9uVGltZXN0YW1wVXMsIGluZm8ucHJlc2VudGF0aW9uVGltZXN0YW1wVXMpOwotICAg
IGFzc2VydFRydWUoaW5mby5idWZmZXIuY2FwYWNpdHkoKSA+IDApOwotICAgIGVuY29kZXIucmVs
ZWFzZU91dHB1dEJ1ZmZlcihpbmZvLmluZGV4KTsKLQotICAgIGVuY29kZXIucmVsZWFzZSgpOwot
ICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEVuY29kZXJVc2lu
Z1RleHR1cmVzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoIU1lZGlh
Q29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkgewotICAg
ICAgTG9nLmkoVEFHLCAiSGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBWUDggZW5jb2RpbmcsIHNr
aXBwaW5nIHRlc3RFbmNvZGVyVXNpbmdUZXh0dXJlcyIpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGZpbmFsIGludCB3aWR0aCA9IDY0MDsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gNDgw
OwotICAgIGZpbmFsIGxvbmcgcHJlc2VudGF0aW9uVHMgPSAyOwotCi0gICAgZmluYWwgRWdsQmFz
ZTE0IGVnbE9lc0Jhc2UgPSBuZXcgRWdsQmFzZTE0KG51bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVM
X0JVRkZFUik7Ci0gICAgZWdsT2VzQmFzZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0g
ICAgZWdsT2VzQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIGludCBvZXNUZXh0dXJlSWQgPSBHbFV0
aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7Ci0K
LSAgICAvLyBUT0RPKHBlcmtqKTogVGhpcyB0ZXN0IGlzIHdlZWsgc2luY2Ugd2UgZG9uJ3QgZmls
bCB0aGUgdGV4dHVyZSB3aXRoIHZhbGlkIGRhdGEgd2l0aCBjb3JyZWN0Ci0gICAgLy8gd2lkdGgg
YW5kIGhlaWdodCBhbmQgdmVyaWZ5IHRoZSBlbmNvZGVkIGRhdGEuIEZpbGwgdGhlIE9FUyB0ZXh0
dXJlIGFuZCBmaWd1cmUgb3V0IGEgd2F5IHRvCi0gICAgLy8gdmVyaWZ5IHRoYXQgdGhlIG91dHB1
dCBtYWtlIHNlbnNlLgotCi0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3
IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsKLQotICAgIGFzc2VydFRydWUoZW5jb2Rlci5pbml0
RW5jb2RlKE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNf
VlA4LCB3aWR0aCwKLSAgICAgICAgaGVpZ2h0LCAzMDAsIDMwLCBlZ2xPZXNCYXNlLmdldEVnbEJh
c2VDb250ZXh0KCkpKTsKLSAgICBhc3NlcnRUcnVlKAotICAgICAgICBlbmNvZGVyLmVuY29kZVRl
eHR1cmUodHJ1ZSwgb2VzVGV4dHVyZUlkLCBSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgp
LCBwcmVzZW50YXRpb25UcykpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZW5jb2Rl
VGV4dHVyZSIpOwotCi0gICAgLy8gSXQgc2hvdWxkIGJlIE9rIHRvIGRlbGV0ZSB0aGUgdGV4dHVy
ZSBhZnRlciBjYWxsaW5nIGVuY29kZVRleHR1cmUuCi0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVy
ZXMoMSwgbmV3IGludFtdIHtvZXNUZXh0dXJlSWR9LCAwKTsKLQotICAgIE91dHB1dEJ1ZmZlcklu
Zm8gaW5mbyA9IGVuY29kZXIuZGVxdWV1ZU91dHB1dEJ1ZmZlcigpOwotICAgIHdoaWxlIChpbmZv
ID09IG51bGwpIHsKLSAgICAgIGluZm8gPSBlbmNvZGVyLmRlcXVldWVPdXRwdXRCdWZmZXIoKTsK
LSAgICAgIFRocmVhZC5zbGVlcCgyMCk7Ci0gICAgfQotICAgIGFzc2VydFRydWUoaW5mby5pbmRl
eCAhPSAtMSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbmZvLmJ1ZmZlci5jYXBhY2l0eSgpID4gMCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKHByZXNlbnRhdGlvblRzLCBpbmZvLnByZXNlbnRhdGlvblRpbWVzdGFt
cFVzKTsKLSAgICBlbmNvZGVyLnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5mby5pbmRleCk7Ci0KLSAg
ICBlbmNvZGVyLnJlbGVhc2UoKTsKLSAgICBlZ2xPZXNCYXNlLnJlbGVhc2UoKTsKLSAgfQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvclRlc3QuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZHRlc3RzL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yVGVzdC5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yVGVzdC5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMjc0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QuQ29ubmVjdGlvblR5cGU7Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZTsKLWltcG9ydCBzdGF0
aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuSU5WQUxJRF9ORVRfSUQ7Ci1p
bXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtJ
bmZvcm1hdGlvbjsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QuTmV0d29ya1N0YXRlOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN1cHByZXNz
TGludDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNv
bnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1p
bXBvcnQgYW5kcm9pZC5uZXQuTmV0d29yazsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlN
YW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5k
bGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rp
dml0eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5VaVRocmVhZFRlc3Q7Ci1pbXBvcnQg
YW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQg
YW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotLyoqCi0g
KiBUZXN0cyBmb3Igb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvci4KLSAqLwotQFN1cHByZXNzTGlu
dCgiTmV3QXBpIikKLXB1YmxpYyBjbGFzcyBOZXR3b3JrTW9uaXRvclRlc3QgZXh0ZW5kcyBBY3Rp
dml0eVRlc3RDYXNlIHsKLSAgLyoqCi0gICAqIExpc3RlbnMgZm9yIGFsZXJ0cyBmaXJlZCBieSB0
aGUgTmV0d29ya01vbml0b3Igd2hlbiBuZXR3b3JrIHN0YXR1cyBjaGFuZ2VzLgotICAgKi8KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgTmV0d29ya01vbml0b3JUZXN0T2JzZXJ2ZXIgaW1wbGVtZW50
cyBOZXR3b3JrTW9uaXRvci5OZXR3b3JrT2JzZXJ2ZXIgewotICAgIHByaXZhdGUgYm9vbGVhbiBy
ZWNlaXZlZE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5
cGUpIHsKLSAgICAgIHJlY2VpdmVkTm90aWZpY2F0aW9uID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgYm9vbGVhbiBoYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpIHsKLSAgICAgIHJldHVybiBy
ZWNlaXZlZE5vdGlmaWNhdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNldEhhc1Jl
Y2VpdmVkTm90aWZpY2F0aW9uKCkgewotICAgICAgcmVjZWl2ZWROb3RpZmljYXRpb24gPSBmYWxz
ZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTW9ja3Mgb3V0IGNhbGxzIHRvIHRoZSBDb25u
ZWN0aXZpdHlNYW5hZ2VyLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW9ja0Nvbm5l
Y3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBleHRlbmRzIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZSB7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZU5ldHdvcmtFeGlzdHM7Ci0gICAgcHJpdmF0
ZSBpbnQgbmV0d29ya1R5cGU7Ci0gICAgcHJpdmF0ZSBpbnQgbmV0d29ya1N1YnR5cGU7Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTmV0d29ya1N0YXRlIGdldE5ldHdvcmtTdGF0ZSgpIHsK
LSAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGFjdGl2ZU5ldHdvcmtFeGlzdHMsIG5ldHdv
cmtUeXBlLCBuZXR3b3JrU3VidHlwZSk7Ci0gICAgfQotCi0gICAgLy8gRHVtbXkgaW1wbGVtZW50
YXRpb25zIHRvIGF2b2lkIE51bGxQb2ludGVyRXhjZXB0aW9ucyBpbiBkZWZhdWx0IGltcGxlbWVu
dGF0aW9uczoKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBsb25nIGdldERlZmF1bHROZXRJ
ZCgpIHsKLSAgICAgIHJldHVybiBJTlZBTElEX05FVF9JRDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgTmV0d29ya1tdIGdldEFsbE5ldHdvcmtzKCkgewotICAgICAgcmV0dXJu
IG5ldyBOZXR3b3JrWzBdOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBOZXR3
b3JrU3RhdGUgZ2V0TmV0d29ya1N0YXRlKE5ldHdvcmsgbmV0d29yaykgewotICAgICAgcmV0dXJu
IG5ldyBOZXR3b3JrU3RhdGUoZmFsc2UsIC0xLCAtMSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgc2V0QWN0aXZlTmV0d29ya0V4aXN0cyhib29sZWFuIG5ldHdvcmtFeGlzdHMpIHsKLSAgICAg
IGFjdGl2ZU5ldHdvcmtFeGlzdHMgPSBuZXR3b3JrRXhpc3RzOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIHNldE5ldHdvcmtUeXBlKGludCBuZXR3b3JrVHlwZSkgewotICAgICAgdGhpcy5uZXR3
b3JrVHlwZSA9IG5ldHdvcmtUeXBlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE5ldHdv
cmtTdWJ0eXBlKGludCBuZXR3b3JrU3VidHlwZSkgewotICAgICAgdGhpcy5uZXR3b3JrU3VidHlw
ZSA9IG5ldHdvcmtTdWJ0eXBlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNb2NrcyBvdXQg
Y2FsbHMgdG8gdGhlIFdpZmlNYW5hZ2VyLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3Mg
TW9ja1dpZmlNYW5hZ2VyRGVsZWdhdGUKLSAgICAgIGV4dGVuZHMgTmV0d29ya01vbml0b3JBdXRv
RGV0ZWN0LldpZmlNYW5hZ2VyRGVsZWdhdGUgewotICAgIHByaXZhdGUgU3RyaW5nIHdpZmlTU0lE
OwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyBnZXRXaWZpU1NJRCgpIHsKLSAg
ICAgIHJldHVybiB3aWZpU1NJRDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRXaWZpU1NJ
RChTdHJpbmcgd2lmaVNTSUQpIHsKLSAgICAgIHRoaXMud2lmaVNTSUQgPSB3aWZpU1NJRDsKLSAg
ICB9Ci0gIH0KLQotICAvLyBBIGR1bW15IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5PYnNlcnZl
ci4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdE9i
c2VydmVyCi0gICAgICBpbXBsZW1lbnRzIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5PYnNlcnZl
ciB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5n
ZWQoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpIHt9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtDb25uZWN0KE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3
b3JrSW5mbykge30KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Rp
c2Nvbm5lY3QobG9uZyBuZXR3b3JrSGFuZGxlKSB7fQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgT2JqZWN0IGxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgc3RhdGljIEhhbmRs
ZXIgdWlUaHJlYWRIYW5kbGVyID0gbnVsbDsKLQotICBwcml2YXRlIE5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdCByZWNlaXZlcjsKLSAgcHJpdmF0ZSBNb2NrQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVn
YXRlIGNvbm5lY3Rpdml0eURlbGVnYXRlOwotICBwcml2YXRlIE1vY2tXaWZpTWFuYWdlckRlbGVn
YXRlIHdpZmlEZWxlZ2F0ZTsKLQotICBwcml2YXRlIHN0YXRpYyBIYW5kbGVyIGdldFVpVGhyZWFk
SGFuZGxlcigpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGxvY2spIHsKLSAgICAgIGlmICh1aVRocmVh
ZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgICB1aVRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxl
cihMb29wZXIuZ2V0TWFpbkxvb3BlcigpKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB1aVRocmVh
ZEhhbmRsZXI7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBtZXRob2QgdG8gY3Jl
YXRlIGEgbmV0d29yayBtb25pdG9yIGFuZCBkZWxlZ2F0ZXMgZm9yIHRlc3RpbmcuCi0gICAqLwot
ICBwcml2YXRlIHZvaWQgY3JlYXRlVGVzdE1vbml0b3IoKSB7Ci0gICAgQ29udGV4dCBjb250ZXh0
ID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpOwotICAgIE5ldHdvcmtN
b25pdG9yLnJlc2V0SW5zdGFuY2VGb3JUZXN0cyhjb250ZXh0KTsKLSAgICBOZXR3b3JrTW9uaXRv
ci5zZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5U3RhdGUodHJ1ZSk7Ci0gICAgcmVjZWl2ZXIgPSBO
ZXR3b3JrTW9uaXRvci5nZXRBdXRvRGV0ZWN0b3JGb3JUZXN0KCk7Ci0gICAgYXNzZXJ0Tm90TnVs
bChyZWNlaXZlcik7Ci0KLSAgICBjb25uZWN0aXZpdHlEZWxlZ2F0ZSA9IG5ldyBNb2NrQ29ubmVj
dGl2aXR5TWFuYWdlckRlbGVnYXRlKCk7Ci0gICAgY29ubmVjdGl2aXR5RGVsZWdhdGUuc2V0QWN0
aXZlTmV0d29ya0V4aXN0cyh0cnVlKTsKLSAgICByZWNlaXZlci5zZXRDb25uZWN0aXZpdHlNYW5h
Z2VyRGVsZWdhdGVGb3JUZXN0cyhjb25uZWN0aXZpdHlEZWxlZ2F0ZSk7Ci0KLSAgICB3aWZpRGVs
ZWdhdGUgPSBuZXcgTW9ja1dpZmlNYW5hZ2VyRGVsZWdhdGUoKTsKLSAgICByZWNlaXZlci5zZXRX
aWZpTWFuYWdlckRlbGVnYXRlRm9yVGVzdHMod2lmaURlbGVnYXRlKTsKLSAgICB3aWZpRGVsZWdh
dGUuc2V0V2lmaVNTSUQoImZvbyIpOwotICB9Ci0KLSAgcHJpdmF0ZSBOZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QuQ29ubmVjdGlvblR5cGUgZ2V0Q3VycmVudENvbm5lY3Rpb25UeXBlKCkgewotICAg
IGZpbmFsIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5OZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRl
ID0gcmVjZWl2ZXIuZ2V0Q3VycmVudE5ldHdvcmtTdGF0ZSgpOwotICAgIHJldHVybiByZWNlaXZl
ci5nZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgc3VwZXIuc2V0
VXAoKTsKLSAgICBnZXRVaVRocmVhZEhhbmRsZXIoKS5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY3JlYXRlVGVzdE1vbml0b3IoKTsKLSAg
ICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB0aGF0IHRoZSByZWNlaXZl
ciByZWdpc3RlcnMgZm9yIGNvbm5lY3Rpdml0eSBpbnRlbnRzIGR1cmluZyBjb25zdHJ1Y3Rpb24u
Ci0gICAqLwotICBAVWlUaHJlYWRUZXN0Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dE5ldHdvcmtNb25pdG9yUmVnaXN0ZXJzSW5Db25zdHJ1Y3RvcigpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgQ29udGV4dCBjb250ZXh0ID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCku
Z2V0VGFyZ2V0Q29udGV4dCgpOwotCi0gICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk9ic2Vy
dmVyIG9ic2VydmVyID0gbmV3IFRlc3ROZXR3b3JrTW9uaXRvckF1dG9EZXRlY3RPYnNlcnZlcigp
OwotCi0gICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IHJlY2VpdmVyID0gbmV3IE5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdChvYnNlcnZlciwgY29udGV4dCk7Ci0KLSAgICBhc3NlcnRUcnVlKHJl
Y2VpdmVyLmlzUmVjZWl2ZXJSZWdpc3RlcmVkRm9yVGVzdGluZygpKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBUZXN0cyB0aGF0IHdoZW4gdGhlcmUgaXMgYW4gaW50ZW50IGluZGljYXRpbmcgYSBjaGFu
Z2UgaW4gbmV0d29yayBjb25uZWN0aXZpdHksIGl0IHNlbmRzIGEKLSAgICogbm90aWZpY2F0aW9u
IHRvIEphdmEgb2JzZXJ2ZXJzLgotICAgKi8KLSAgQFVpVGhyZWFkVGVzdAotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0TmV0d29ya01vbml0b3JKYXZhT2JzZXJ2ZXJzKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAvLyBJbml0aWFsaXplIHRoZSBOZXR3b3JrTW9u
aXRvciB3aXRoIGEgY29ubmVjdGlvbi4KLSAgICBJbnRlbnQgY29ubmVjdGl2aXR5SW50ZW50ID0g
bmV3IEludGVudChDb25uZWN0aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9BQ1RJT04pOwotICAg
IHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0
KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0KLSAgICAvLyBXZSBzaG91bGRuJ3QgYmUgcmUtbm90
aWZpZWQgaWYgdGhlIGNvbm5lY3Rpb24gaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQuCi0gICAgTmV0
d29ya01vbml0b3JUZXN0T2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBuZXcgTmV0d29ya01vbml0b3JUZXN0
T2JzZXJ2ZXIoKTsKLSAgICBOZXR3b3JrTW9uaXRvci5hZGROZXR3b3JrT2JzZXJ2ZXIob2JzZXJ2
ZXIpOwotICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJn
ZXRDb250ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0RmFsc2Uob2JzZXJ2
ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0KLSAgICAvLyBXZSBzaG91bGRuJ3QgYmUg
bm90aWZpZWQgaWYgd2UncmUgY29ubmVjdGVkIHRvIG5vbi1XaWZpIGFuZCB0aGUgV2lmaSBTU0lE
IGNoYW5nZXMuCi0gICAgd2lmaURlbGVnYXRlLnNldFdpZmlTU0lEKCJiYXIiKTsKLSAgICByZWNl
aXZlci5vblJlY2VpdmUoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBj
b25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFzc2VydEZhbHNlKG9ic2VydmVyLmhhc1JlY2VpdmVk
Tm90aWZpY2F0aW9uKCkpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGJlIG5vdGlmaWVkIHdoZW4gd2Ug
Y2hhbmdlIHRvIFdpZmkuCi0gICAgY29ubmVjdGl2aXR5RGVsZWdhdGUuc2V0TmV0d29ya1R5cGUo
Q29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1dJRkkpOwotICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShn
ZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksIGNvbm5lY3Rpdml0eUludGVu
dCk7Ci0gICAgYXNzZXJ0VHJ1ZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpKTsK
LSAgICBvYnNlcnZlci5yZXNldEhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCk7Ci0KLSAgICAvLyBX
ZSBzaG91bGQgYmUgbm90aWZpZWQgd2hlbiB0aGUgV2lmaSBTU0lEIGNoYW5nZXMuCi0gICAgd2lm
aURlbGVnYXRlLnNldFdpZmlTU0lEKCJmb28iKTsKLSAgICByZWNlaXZlci5vblJlY2VpdmUoZ2V0
SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQp
OwotICAgIGFzc2VydFRydWUob2JzZXJ2ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0g
ICAgb2JzZXJ2ZXIucmVzZXRIYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpOwotCi0gICAgLy8gV2Ug
c2hvdWxkbid0IGJlIHJlLW5vdGlmaWVkIGlmIHRoZSBXaWZpIFNTSUQgaGFzbid0IGFjdHVhbGx5
IGNoYW5nZWQuCi0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlvbigpLmdl
dFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBhc3NlcnRGYWxzZShv
YnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpKTsKLQotICAgIC8vIE1pbWljIHRoYXQg
Y29ubmVjdGl2aXR5IGhhcyBiZWVuIGxvc3QgYW5kIGVuc3VyZSB0aGF0IHRoZSBvYnNlcnZlciBn
ZXRzIHRoZSBub3RpZmljYXRpb24uCi0gICAgY29ubmVjdGl2aXR5RGVsZWdhdGUuc2V0QWN0aXZl
TmV0d29ya0V4aXN0cyhmYWxzZSk7Ci0gICAgSW50ZW50IG5vQ29ubmVjdGl2aXR5SW50ZW50ID0g
bmV3IEludGVudChDb25uZWN0aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9BQ1RJT04pOwotICAg
IHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0
KCksIG5vQ29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBhc3NlcnRUcnVlKG9ic2VydmVyLmhhc1Jl
Y2VpdmVkTm90aWZpY2F0aW9uKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgQ29u
bmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGRvZXNuJ3QgY3Jhc2guIFRoaXMgdGVzdCBjYW5ub3Qg
cmVseSBvbiBoYXZpbmcgYW55Ci0gICAqIGFjdGl2ZSBuZXR3b3JrIGNvbm5lY3Rpb25zIHNvIGl0
IGNhbm5vdCB1c2VmdWxseSBjaGVjayByZXN1bHRzLCBidXQgaXQgY2FuIGF0IGxlYXN0IGNoZWNr
Ci0gICAqIHRoYXQgdGhlIGZ1bmN0aW9ucyBkb24ndCBjcmFzaC4KLSAgICovCi0gIEBVaVRocmVh
ZFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29ubmVjdGl2aXR5TWFuYWdl
ckRlbGVnYXRlRG9lc05vdENyYXNoKCkgewotICAgIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZSBkZWxlZ2F0ZSA9Ci0gICAgICAgIG5ldyBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUoZ2V0
SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpKTsKLSAgICBkZWxlZ2F0ZS5nZXRO
ZXR3b3JrU3RhdGUoKTsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZF
UlNJT05fQ09ERVMuTE9MTElQT1ApIHsKLSAgICAgIE5ldHdvcmtbXSBuZXR3b3JrcyA9IGRlbGVn
YXRlLmdldEFsbE5ldHdvcmtzKCk7Ci0gICAgICBpZiAobmV0d29ya3MubGVuZ3RoID49IDEpIHsK
LSAgICAgICAgZGVsZWdhdGUuZ2V0TmV0d29ya1N0YXRlKG5ldHdvcmtzWzBdKTsKLSAgICAgICAg
ZGVsZWdhdGUuaGFzSW50ZXJuZXRDYXBhYmlsaXR5KG5ldHdvcmtzWzBdKTsKLSAgICAgIH0KLSAg
ICAgIGRlbGVnYXRlLmdldERlZmF1bHROZXRJZCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBUZXN0cyB0aGF0IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCBxdWVyeWFibGUgQVBJcyBkb24n
dCBjcmFzaC4gVGhpcyB0ZXN0IGNhbm5vdCByZWx5Ci0gICAqIG9uIGhhdmluZyBhbnkgYWN0aXZl
IG5ldHdvcmsgY29ubmVjdGlvbnMgc28gaXQgY2Fubm90IHVzZWZ1bGx5IGNoZWNrIHJlc3VsdHMs
IGJ1dCBpdCBjYW4gYXQKLSAgICogbGVhc3QgY2hlY2sgdGhhdCB0aGUgZnVuY3Rpb25zIGRvbid0
IGNyYXNoLgotICAgKi8KLSAgQFVpVGhyZWFkVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2
b2lkIHRlc3RRdWVyeWFibGVBUElzRG9Ob3RDcmFzaCgpIHsKLSAgICBOZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QuT2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBuZXcgVGVzdE5ldHdvcmtNb25pdG9yQXV0b0Rl
dGVjdE9ic2VydmVyKCk7Ci0gICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IG5jbiA9Ci0gICAg
ICAgIG5ldyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3Qob2JzZXJ2ZXIsIGdldEluc3RydW1lbnRh
dGlvbigpLmdldFRhcmdldENvbnRleHQoKSk7Ci0gICAgbmNuLmdldERlZmF1bHROZXRJZCgpOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uVGVzdC5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25UZXN0LmphdmEJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25UZXN0Lmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuTWV0cmljcy5IaXN0b2dy
YW1JbmZvOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb24uSWNlQ29ubmVjdGlvblN0
YXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb24uSWNlR2F0aGVyaW5nU3RhdGU7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZTsKLQotaW1w
b3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5z
dWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxl
OwotaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVyZW5jZTsKLWltcG9ydCBqYXZhLm5pby5C
eXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRp
bC5JZGVudGl0eUhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQg
amF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLWltcG9ydCBqYXZhLnV0aWwu
VHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWlt
cG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLyoqIEVuZC10by1lbmQgdGVz
dHMgZm9yIFBlZXJDb25uZWN0aW9uLmphdmEuICovCi1wdWJsaWMgY2xhc3MgUGVlckNvbm5lY3Rp
b25UZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0Q2FzZSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBUSU1FT1VUX1NFQ09ORFMgPSAyMDsKLSAgcHJpdmF0ZSBUcmVlU2V0PFN0cmluZz4gdGhy
ZWFkc0JlZm9yZVRlc3QgPSBudWxsOwotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBz
ZXRVcCgpIHsKLSAgICBhc3NlcnRUcnVlKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXpl
QW5kcm9pZEdsb2JhbHMoCi0gICAgICAgIGdldEluc3RydW1lbnRhdGlvbigpLmdldENvbnRleHQo
KSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgT2Jz
ZXJ2ZXJFeHBlY3RhdGlvbnMgaW1wbGVtZW50cyBQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRl
b1JlbmRlcmVyLkNhbGxiYWNrcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBEYXRhQ2hhbm5lbC5PYnNlcnZlciwgU3RhdHNPYnNlcnZlciB7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwcml2YXRlIGludCBleHBlY3Rl
ZEljZUNhbmRpZGF0ZXMgPSAwOwotICAgIHByaXZhdGUgaW50IGV4cGVjdGVkRXJyb3JzID0gMDsK
LSAgICBwcml2YXRlIGludCBleHBlY3RlZFJlbmVnb3RpYXRpb25zID0gMDsKLSAgICBwcml2YXRl
IGludCBleHBlY3RlZFdpZHRoID0gMDsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZEhlaWdodCA9
IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQgPSAwOwotICAgIHBy
aXZhdGUgTGlua2VkTGlzdDxTaWduYWxpbmdTdGF0ZT4gZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2Vz
ID0gbmV3IExpbmtlZExpc3Q8U2lnbmFsaW5nU3RhdGU+KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRM
aXN0PEljZUNvbm5lY3Rpb25TdGF0ZT4gZXhwZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdlcyA9Ci0g
ICAgICAgIG5ldyBMaW5rZWRMaXN0PEljZUNvbm5lY3Rpb25TdGF0ZT4oKTsKLSAgICBwcml2YXRl
IExpbmtlZExpc3Q8SWNlR2F0aGVyaW5nU3RhdGU+IGV4cGVjdGVkSWNlR2F0aGVyaW5nQ2hhbmdl
cyA9Ci0gICAgICAgIG5ldyBMaW5rZWRMaXN0PEljZUdhdGhlcmluZ1N0YXRlPigpOwotICAgIHBy
aXZhdGUgTGlua2VkTGlzdDxTdHJpbmc+IGV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzID0gbmV3IExp
bmtlZExpc3Q8U3RyaW5nPigpOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxTdHJpbmc+IGV4cGVj
dGVkUmVtb3ZlU3RyZWFtTGFiZWxzID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOwotICAgIHBy
aXZhdGUgZmluYWwgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+IGdvdEljZUNhbmRpZGF0ZXMgPSBu
ZXcgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+KCk7Ci0gICAgcHJpdmF0ZSBNYXA8TWVkaWFTdHJl
YW0sIFdlYWtSZWZlcmVuY2U8VmlkZW9SZW5kZXJlcj4+IHJlbmRlcmVycyA9Ci0gICAgICAgIG5l
dyBJZGVudGl0eUhhc2hNYXA8TWVkaWFTdHJlYW0sIFdlYWtSZWZlcmVuY2U8VmlkZW9SZW5kZXJl
cj4+KCk7Ci0gICAgcHJpdmF0ZSBEYXRhQ2hhbm5lbCBkYXRhQ2hhbm5lbDsKLSAgICBwcml2YXRl
IExpbmtlZExpc3Q8RGF0YUNoYW5uZWwuQnVmZmVyPiBleHBlY3RlZEJ1ZmZlcnMgPSBuZXcgTGlu
a2VkTGlzdDxEYXRhQ2hhbm5lbC5CdWZmZXI+KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PERh
dGFDaGFubmVsLlN0YXRlPiBleHBlY3RlZFN0YXRlQ2hhbmdlcyA9Ci0gICAgICAgIG5ldyBMaW5r
ZWRMaXN0PERhdGFDaGFubmVsLlN0YXRlPigpOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxTdHJp
bmc+IGV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMgPSBuZXcgTGlua2VkTGlzdDxTdHJp
bmc+KCk7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRTdGF0c0NhbGxiYWNrcyA9IDA7Ci0gICAg
cHJpdmF0ZSBMaW5rZWRMaXN0PFN0YXRzUmVwb3J0W10+IGdvdFN0YXRzUmVwb3J0cyA9IG5ldyBM
aW5rZWRMaXN0PFN0YXRzUmVwb3J0W10+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBIYXNoU2V0PE1l
ZGlhU3RyZWFtPiBnb3RSZW1vdGVTdHJlYW1zID0gbmV3IEhhc2hTZXQ8TWVkaWFTdHJlYW0+KCk7
Ci0KLSAgICBwdWJsaWMgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMoU3RyaW5nIG5hbWUpIHsKLSAgICAg
IHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lk
IHNldERhdGFDaGFubmVsKERhdGFDaGFubmVsIGRhdGFDaGFubmVsKSB7Ci0gICAgICBhc3NlcnRO
dWxsKHRoaXMuZGF0YUNoYW5uZWwpOwotICAgICAgdGhpcy5kYXRhQ2hhbm5lbCA9IGRhdGFDaGFu
bmVsOwotICAgICAgdGhpcy5kYXRhQ2hhbm5lbC5yZWdpc3Rlck9ic2VydmVyKHRoaXMpOwotICAg
ICAgYXNzZXJ0Tm90TnVsbCh0aGlzLmRhdGFDaGFubmVsKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
c3luY2hyb25pemVkIHZvaWQgZXhwZWN0SWNlQ2FuZGlkYXRlcyhpbnQgY291bnQpIHsKLSAgICAg
IGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyArPSBjb3VudDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25JY2VDYW5kaWRhdGUoSWNlQ2FuZGlkYXRl
IGNhbmRpZGF0ZSkgewotICAgICAgLS1leHBlY3RlZEljZUNhbmRpZGF0ZXM7Ci0KLSAgICAgIC8v
IFdlIGRvbid0IGFzc2VydCBleHBlY3RlZEljZUNhbmRpZGF0ZXMgPj0gMCBiZWNhdXNlIGl0J3Mg
aGFyZCB0byBrbm93Ci0gICAgICAvLyBob3cgbWFueSB0byBleHBlY3QsIGluIGdlbmVyYWwuICBX
ZSBvbmx5IHVzZSBleHBlY3RJY2VDYW5kaWRhdGVzIHRvCi0gICAgICAvLyBhc3NlcnQgYSBtaW5p
bWFsIGNvdW50LgotICAgICAgc3luY2hyb25pemVkIChnb3RJY2VDYW5kaWRhdGVzKSB7Ci0gICAg
ICAgIGdvdEljZUNhbmRpZGF0ZXMuYWRkKGNhbmRpZGF0ZSk7Ci0gICAgICAgIGdvdEljZUNhbmRp
ZGF0ZXMubm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGVzUmVtb3ZlZChJY2VDYW5kaWRhdGVbXSBjYW5kaWRh
dGVzKSB7fQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldEV4cGVjdGVkUmVzb2x1
dGlvbihpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgIGV4cGVjdGVkV2lkdGggPSB3aWR0
aDsKLSAgICAgIGV4cGVjdGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAgIH0KLQotICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCBleHBlY3RGcmFtZXNEZWxpdmVyZWQoaW50IGNvdW50KSB7Ci0gICAg
ICBleHBlY3RlZEZyYW1lc0RlbGl2ZXJlZCArPSBjb3VudDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVuZGVyRnJhbWUoVmlkZW9SZW5kZXJl
ci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIGFzc2VydFRydWUoZXhwZWN0ZWRXaWR0aCA+IDAp
OwotICAgICAgYXNzZXJ0VHJ1ZShleHBlY3RlZEhlaWdodCA+IDApOwotICAgICAgYXNzZXJ0RXF1
YWxzKGV4cGVjdGVkV2lkdGgsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpKTsKLSAgICAgIGFzc2VydEVx
dWFscyhleHBlY3RlZEhlaWdodCwgZnJhbWUucm90YXRlZEhlaWdodCgpKTsKLSAgICAgIC0tZXhw
ZWN0ZWRGcmFtZXNEZWxpdmVyZWQ7Ci0gICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9u
ZShmcmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdFNp
Z25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgZXhwZWN0ZWRT
aWduYWxpbmdDaGFuZ2VzLmFkZChuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uU2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0
YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTaWduYWxpbmdDaGFu
Z2VzLnJlbW92ZUZpcnN0KCksIG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hy
b25pemVkIHZvaWQgZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUg
bmV3U3RhdGUpIHsKLSAgICAgIGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuYWRkKG5ld1N0
YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZv
aWQgb25JY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZSBuZXdTdGF0ZSkgewot
ICAgICAgLy8gVE9ETyhiZW1hc2MpOiByZW1vdmUgb25jZSBkZWxpdmVyeSBvZiBJQ0VDb21wbGV0
ZWQgaXMgcmVsaWFibGUKLSAgICAgIC8vIChodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3dlYnJ0
Yy9pc3N1ZXMvZGV0YWlsP2lkPTMwMjEpLgotICAgICAgaWYgKG5ld1N0YXRlLmVxdWFscyhJY2VD
b25uZWN0aW9uU3RhdGUuQ09NUExFVEVEKSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0K
LSAgICAgIGlmIChleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFuZ2VzLmlzRW1wdHkoKSkgewotICAg
ICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICJHb3QgYW4gdW5leHBlY3RlZCBpY2UgY29u
bmVjdGlvbiBjaGFuZ2UgIiArIG5ld1N0YXRlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdlcy5yZW1vdmVG
aXJzdCgpLCBuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5
bmNocm9uaXplZCB2b2lkIG9uSWNlQ29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZShib29sZWFuIHJl
Y2VpdmluZykgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUgKyAiR290IGFuIGljZSBj
b25uZWN0aW9uIHJlY2VpdmluZyBjaGFuZ2UgIiArIHJlY2VpdmluZyk7Ci0gICAgfQotCi0gICAg
cHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdEljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRo
ZXJpbmdTdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2Vz
LmFkZChuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNo
cm9uaXplZCB2b2lkIG9uSWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0YXRlIG5ld1N0
YXRlKSB7Ci0gICAgICAvLyBJdCdzIGZpbmUgdG8gZ2V0IGEgdmFyaWFibGUgbnVtYmVyIG9mIEdB
VEhFUklORyBtZXNzYWdlcyBiZWZvcmUKLSAgICAgIC8vIENPTVBMRVRFIGZpcmVzIChkZXBlbmRp
bmcgb24gaG93IGxvbmcgdGhlIHRlc3QgcnVucykgc28gd2UgZG9uJ3QgYXNzZXJ0Ci0gICAgICAv
LyBhbnkgcGFydGljdWxhciBjb3VudC4KLSAgICAgIGlmIChuZXdTdGF0ZSA9PSBJY2VHYXRoZXJp
bmdTdGF0ZS5HQVRIRVJJTkcpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgYXNz
ZXJ0RXF1YWxzKGV4cGVjdGVkSWNlR2F0aGVyaW5nQ2hhbmdlcy5yZW1vdmVGaXJzdCgpLCBuZXdT
dGF0ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdEFkZFN0
cmVhbShTdHJpbmcgbGFiZWwpIHsKLSAgICAgIGV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzLmFkZChs
YWJlbCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2
b2lkIG9uQWRkU3RyZWFtKE1lZGlhU3RyZWFtIHN0cmVhbSkgewotICAgICAgYXNzZXJ0RXF1YWxz
KGV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzLnJlbW92ZUZpcnN0KCksIHN0cmVhbS5sYWJlbCgpKTsK
LSAgICAgIGFzc2VydEVxdWFscygxLCBzdHJlYW0udmlkZW9UcmFja3Muc2l6ZSgpKTsKLSAgICAg
IGFzc2VydEVxdWFscygxLCBzdHJlYW0uYXVkaW9UcmFja3Muc2l6ZSgpKTsKLSAgICAgIGFzc2Vy
dFRydWUoc3RyZWFtLnZpZGVvVHJhY2tzLmdldCgwKS5pZCgpLmVuZHNXaXRoKCJWaWRlb1RyYWNr
IikpOwotICAgICAgYXNzZXJ0VHJ1ZShzdHJlYW0uYXVkaW9UcmFja3MuZ2V0KDApLmlkKCkuZW5k
c1dpdGgoIkF1ZGlvVHJhY2siKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoInZpZGVvIiwgc3RyZWFt
LnZpZGVvVHJhY2tzLmdldCgwKS5raW5kKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJhdWRpbyIs
IHN0cmVhbS5hdWRpb1RyYWNrcy5nZXQoMCkua2luZCgpKTsKLSAgICAgIFZpZGVvUmVuZGVyZXIg
cmVuZGVyZXIgPSBjcmVhdGVWaWRlb1JlbmRlcmVyKHRoaXMpOwotICAgICAgc3RyZWFtLnZpZGVv
VHJhY2tzLmdldCgwKS5hZGRSZW5kZXJlcihyZW5kZXJlcik7Ci0gICAgICBhc3NlcnROdWxsKHJl
bmRlcmVycy5wdXQoc3RyZWFtLCBuZXcgV2Vha1JlZmVyZW5jZTxWaWRlb1JlbmRlcmVyPihyZW5k
ZXJlcikpKTsKLSAgICAgIGdvdFJlbW90ZVN0cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgfQotCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdFJlbW92ZVN0cmVhbShTdHJpbmcgbGFi
ZWwpIHsKLSAgICAgIGV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFiZWxzLmFkZChsYWJlbCk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uUmVtb3Zl
U3RyZWFtKE1lZGlhU3RyZWFtIHN0cmVhbSkgewotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVk
UmVtb3ZlU3RyZWFtTGFiZWxzLnJlbW92ZUZpcnN0KCksIHN0cmVhbS5sYWJlbCgpKTsKLSAgICAg
IFdlYWtSZWZlcmVuY2U8VmlkZW9SZW5kZXJlcj4gcmVuZGVyZXIgPSByZW5kZXJlcnMucmVtb3Zl
KHN0cmVhbSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHJlbmRlcmVyKTsKLSAgICAgIGFzc2VydE5v
dE51bGwocmVuZGVyZXIuZ2V0KCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN0cmVhbS52aWRl
b1RyYWNrcy5zaXplKCkpOwotICAgICAgc3RyZWFtLnZpZGVvVHJhY2tzLmdldCgwKS5yZW1vdmVS
ZW5kZXJlcihyZW5kZXJlci5nZXQoKSk7Ci0gICAgICBnb3RSZW1vdGVTdHJlYW1zLnJlbW92ZShz
dHJlYW0pOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3REYXRh
Q2hhbm5lbChTdHJpbmcgbGFiZWwpIHsKLSAgICAgIGV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxM
YWJlbHMuYWRkKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3lu
Y2hyb25pemVkIHZvaWQgb25EYXRhQ2hhbm5lbChEYXRhQ2hhbm5lbCByZW1vdGVEYXRhQ2hhbm5l
bCkgewotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMu
cmVtb3ZlRmlyc3QoKSwgcmVtb3RlRGF0YUNoYW5uZWwubGFiZWwoKSk7Ci0gICAgICBzZXREYXRh
Q2hhbm5lbChyZW1vdGVEYXRhQ2hhbm5lbCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoRGF0YUNoYW5u
ZWwuU3RhdGUuQ09OTkVDVElORywgZGF0YUNoYW5uZWwuc3RhdGUoKSk7Ci0gICAgfQotCi0gICAg
cHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKSB7Ci0g
ICAgICArK2V4cGVjdGVkUmVuZWdvdGlhdGlvbnM7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uUmVuZWdvdGlhdGlvbk5lZWRlZCgpIHsKLSAg
ICAgIGFzc2VydFRydWUoLS1leHBlY3RlZFJlbmVnb3RpYXRpb25zID49IDApOwotICAgIH0KLQot
ICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RNZXNzYWdlKEJ5dGVCdWZmZXIgZXhw
ZWN0ZWRCdWZmZXIsIGJvb2xlYW4gZXhwZWN0ZWRCaW5hcnkpIHsKLSAgICAgIGV4cGVjdGVkQnVm
ZmVycy5hZGQobmV3IERhdGFDaGFubmVsLkJ1ZmZlcihleHBlY3RlZEJ1ZmZlciwgZXhwZWN0ZWRC
aW5hcnkpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVk
IHZvaWQgb25NZXNzYWdlKERhdGFDaGFubmVsLkJ1ZmZlciBidWZmZXIpIHsKLSAgICAgIERhdGFD
aGFubmVsLkJ1ZmZlciBleHBlY3RlZCA9IGV4cGVjdGVkQnVmZmVycy5yZW1vdmVGaXJzdCgpOwot
ICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmJpbmFyeSwgYnVmZmVyLmJpbmFyeSk7Ci0gICAg
ICBhc3NlcnRUcnVlKGV4cGVjdGVkLmRhdGEuZXF1YWxzKGJ1ZmZlci5kYXRhKSk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uQnVmZmVyZWRB
bW91bnRDaGFuZ2UobG9uZyBwcmV2aW91c0Ftb3VudCkgewotICAgICAgYXNzZXJ0RmFsc2UocHJl
dmlvdXNBbW91bnQgPT0gZGF0YUNoYW5uZWwuYnVmZmVyZWRBbW91bnQoKSk7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uU3RhdGVDaGFuZ2Uo
KSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdGF0ZUNoYW5nZXMucmVtb3ZlRmlyc3Qo
KSwgZGF0YUNoYW5uZWwuc3RhdGUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXpl
ZCB2b2lkIGV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlIHN0YXRlKSB7Ci0gICAg
ICBleHBlY3RlZFN0YXRlQ2hhbmdlcy5hZGQoc3RhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkNvbXBsZXRlKFN0YXRzUmVwb3J0W10g
cmVwb3J0cykgewotICAgICAgaWYgKC0tZXhwZWN0ZWRTdGF0c0NhbGxiYWNrcyA8IDApIHsKLSAg
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc3RhdHMgcmVwb3J0
OiAiICsgcmVwb3J0cyk7Ci0gICAgICB9Ci0gICAgICBnb3RTdGF0c1JlcG9ydHMuYWRkKHJlcG9y
dHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RTdGF0c0Nh
bGxiYWNrKCkgewotICAgICAgKytleHBlY3RlZFN0YXRzQ2FsbGJhY2tzOwotICAgIH0KLQotICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgTGlua2VkTGlzdDxTdGF0c1JlcG9ydFtdPiB0YWtlU3RhdHNS
ZXBvcnRzKCkgewotICAgICAgTGlua2VkTGlzdDxTdGF0c1JlcG9ydFtdPiBnb3QgPSBnb3RTdGF0
c1JlcG9ydHM7Ci0gICAgICBnb3RTdGF0c1JlcG9ydHMgPSBuZXcgTGlua2VkTGlzdDxTdGF0c1Jl
cG9ydFtdPigpOwotICAgICAgcmV0dXJuIGdvdDsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gYSBz
ZXQgb2YgZXhwZWN0YXRpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIHNhdGlzZmllZCB5ZXQsIHBvc3Np
Ymx5Ci0gICAgLy8gZW1wdHkgaWYgbm8gc3VjaCBleHBlY3RhdGlvbnMgZXhpc3QuCi0gICAgcHVi
bGljIHN5bmNocm9uaXplZCBUcmVlU2V0PFN0cmluZz4gdW5zYXRpc2ZpZWRFeHBlY3RhdGlvbnMo
KSB7Ci0gICAgICBUcmVlU2V0PFN0cmluZz4gc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zID0g
bmV3IFRyZWVTZXQ8U3RyaW5nPigpOwotICAgICAgaWYgKGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyA+
IDApIHsgLy8gU2VlIGNvbW1lbnQgaW4gb25JY2VDYW5kaWRhdGUuCi0gICAgICAgIHN0aWxsV2Fp
dGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVkSWNlQ2FuZGlkYXRlcyIpOwotICAgICAg
fQotICAgICAgaWYgKGV4cGVjdGVkRXJyb3JzICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5n
Rm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRFcnJvcnM6ICIgKyBleHBlY3RlZEVycm9ycyk7
Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2VzLnNpemUoKSAhPSAw
KSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAg
ICAiZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2VzOiAiICsgZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2Vz
LnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdl
cy5zaXplKCkgIT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRk
KAotICAgICAgICAgICAgImV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXM6ICIgKyBleHBlY3Rl
ZEljZUNvbm5lY3Rpb25DaGFuZ2VzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0
ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGlu
Z0ZvckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRJY2VHYXRoZXJpbmdD
aGFuZ2VzOiAiICsgZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzLnNpemUoKSk7Ci0gICAgICB9
Ci0gICAgICBpZiAoZXhwZWN0ZWRBZGRTdHJlYW1MYWJlbHMuc2l6ZSgpICE9IDApIHsKLSAgICAg
ICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgKLSAgICAgICAgICAgICJleHBlY3Rl
ZEFkZFN0cmVhbUxhYmVsczogIiArIGV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzLnNpemUoKSk7Ci0g
ICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMuc2l6ZSgpICE9IDAp
IHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgKLSAgICAgICAgICAg
ICJleHBlY3RlZFJlbW92ZVN0cmVhbUxhYmVsczogIiArIGV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFi
ZWxzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQg
PiAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVk
RnJhbWVzRGVsaXZlcmVkOiAiICsgZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQpOwotICAgICAgfQot
ICAgICAgaWYgKCFleHBlY3RlZEJ1ZmZlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0aWxsV2Fp
dGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVkQnVmZmVyczogIiArIGV4cGVjdGVkQnVm
ZmVycy5zaXplKCkpOwotICAgICAgfQotICAgICAgaWYgKCFleHBlY3RlZFN0YXRlQ2hhbmdlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhw
ZWN0ZWRTdGF0ZUNoYW5nZXM6ICIgKyBleHBlY3RlZFN0YXRlQ2hhbmdlcy5zaXplKCkpOwotICAg
ICAgfQotICAgICAgaWYgKCFleHBlY3RlZFJlbW90ZURhdGFDaGFubmVsTGFiZWxzLmlzRW1wdHko
KSkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKAotICAgICAgICAg
ICAgImV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHM6ICIgKyBleHBlY3RlZFJlbW90ZURh
dGFDaGFubmVsTGFiZWxzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRTdGF0
c0NhbGxiYWNrcyAhPSAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5h
ZGQoImV4cGVjdGVkU3RhdHNDYWxsYmFja3M6ICIgKyBleHBlY3RlZFN0YXRzQ2FsbGJhY2tzKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnM7Ci0gICAg
fQotCi0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2Zp
ZWQoaW50IHRpbWVvdXRTZWNvbmRzKSB7Ci0gICAgICAvLyBUT0RPKGZpc2NobWFuKTogcHJvYmxl
bXMgd2l0aCB0aGlzIGFwcHJvYWNoOgotICAgICAgLy8gLSBjb21lIHVwIHdpdGggc29tZXRoaW5n
IGJldHRlciB0aGFuIGEgcG9sbCBsb29wCi0gICAgICAvLyAtIGF2b2lkIHNlcmlhbGl6aW5nIGV4
cGVjdGF0aW9ucyBleHBsaWNpdGx5OyB0aGUgdGVzdCBpcyBub3QgYXMgcm9idXN0Ci0gICAgICAv
LyAgIGFzIGl0IGNvdWxkIGJlIGJlY2F1c2UgaXQgbXVzdCBwbGFjZSBleHBlY3RhdGlvbnMgYmV0
d2VlbiB3YWl0Ci0gICAgICAvLyAgIHN0YXRlbWVudHMgdmVyeSBwcmVjaXNlbHkgKGUuZy4gZnJh
bWUgbXVzdCBub3QgYXJyaXZlIGJlZm9yZSBpdHMKLSAgICAgIC8vICAgZXhwZWN0YXRpb24sIGFu
ZCBleHBlY3RhdGlvbiBtdXN0IG5vdCBiZSByZWdpc3RlcmVkIHNvIGVhcmx5IGFzIHRvCi0gICAg
ICAvLyAgIHN0YWxsIGEgd2FpdCkuICBVc2UgY2FsbGJhY2tzIHRvIGZpcmUgb2ZmIGRlcGVuZGVu
dCBzdGVwcyBpbnN0ZWFkIG9mCi0gICAgICAvLyAgIGV4cGxpY2l0bHkgd2FpdGluZywgc28gdGhl
cmUgY2FuIGJlIGp1c3QgYSBzaW5nbGUgd2FpdCBhdCB0aGUgZW5kIG9mCi0gICAgICAvLyAgIHRo
ZSB0ZXN0LgotICAgICAgbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkg
KyAxMDAwICogdGltZW91dFNlY29uZHM7Ci0gICAgICBUcmVlU2V0PFN0cmluZz4gcHJldiA9IG51
bGw7Ci0gICAgICBUcmVlU2V0PFN0cmluZz4gc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zID0g
dW5zYXRpc2ZpZWRFeHBlY3RhdGlvbnMoKTsKLSAgICAgIHdoaWxlICghc3RpbGxXYWl0aW5nRm9y
RXhwZWN0YXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoIXN0aWxsV2FpdGluZ0ZvckV4
cGVjdGF0aW9ucy5lcXVhbHMocHJldikpIHsKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4o
bmFtZSArICIgc3RpbGwgd2FpdGluZyBhdFxuICAgICIgKyAobmV3IFRocm93YWJsZSgpKS5nZXRT
dGFja1RyYWNlKClbMV0KLSAgICAgICAgICAgICAgKyAiXG4gICAgZm9yOiAiICsgQXJyYXlzLnRv
U3RyaW5nKHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy50b0FycmF5KCkpKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoZW5kVGltZSA8IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKSB7Ci0g
ICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUgKyAiIHRpbWVkIG91dCB3YWl0aW5nIGZv
cjogIgotICAgICAgICAgICAgICArIEFycmF5cy50b1N0cmluZyhzdGlsbFdhaXRpbmdGb3JFeHBl
Y3RhdGlvbnMudG9BcnJheSgpKSk7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgVGhyZWFkLnNsZWVwKDEwKTsKLSAgICAgICAgfSBj
YXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgIHRocm93IG5ldyBSdW50
aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICAgIHByZXYgPSBzdGlsbFdhaXRpbmdG
b3JFeHBlY3RhdGlvbnM7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucyA9IHVu
c2F0aXNmaWVkRXhwZWN0YXRpb25zKCk7Ci0gICAgICB9Ci0gICAgICBpZiAocHJldiA9PSBudWxs
KSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigKLSAgICAgICAgICAgIG5hbWUgKyAiIGRp
ZG4ndCBuZWVkIHRvIHdhaXQgYXRcbiAgICAiICsgKG5ldyBUaHJvd2FibGUoKSkuZ2V0U3RhY2tU
cmFjZSgpWzFdKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIC8v
IFRoaXMgbWV0aG9kcyByZXR1cm4gYSBsaXN0IG9mIGFsbCBjdXJyZW50bHkgZ2F0aGVyZWQgaWNl
IGNhbmRpZGF0ZXMgb3Igd2FpdHMgdW50aWwKLSAgICAvLyAxIGNhbmRpZGF0ZSBoYXZlIGJlZW4g
Z2F0aGVyZWQuCi0gICAgcHVibGljIExpc3Q8SWNlQ2FuZGlkYXRlPiBnZXRBdExlYXN0T25lSWNl
Q2FuZGlkYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIHN5bmNocm9u
aXplZCAoZ290SWNlQ2FuZGlkYXRlcykgewotICAgICAgICB3aGlsZSAoZ290SWNlQ2FuZGlkYXRl
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICBnb3RJY2VDYW5kaWRhdGVzLndhaXQoKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbmV3IExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPihnb3RJY2VD
YW5kaWRhdGVzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBTZXRzIHRoZSBleHBlY3Rl
ZCByZXNvbHV0aW9uIGZvciBhbiBPYnNlcnZlckV4cGVjdGF0aW9ucyBvbmNlIGEgZnJhbWUKLSAg
Ly8gaGFzIGJlZW4gY2FwdHVyZWQuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEV4cGVjdGVkUmVz
b2x1dGlvblNldHRlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgICBw
cml2YXRlIE9ic2VydmVyRXhwZWN0YXRpb25zIG9ic2VydmVyOwotCi0gICAgcHVibGljIEV4cGVj
dGVkUmVzb2x1dGlvblNldHRlcihPYnNlcnZlckV4cGVjdGF0aW9ucyBvYnNlcnZlcikgewotICAg
ICAgdGhpcy5vYnNlcnZlciA9IG9ic2VydmVyOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW5kZXJGcmFtZShWaWRlb1JlbmRlcmVyLkk0MjBG
cmFtZSBmcmFtZSkgewotICAgICAgLy8gQmVjYXVzZSBkaWZmZXJlbnQgY2FtZXJhIGRldmljZXMg
KGZha2UgJiBwaHlzaWNhbCkgcHJvZHVjZSBkaWZmZXJlbnQKLSAgICAgIC8vIHJlc29sdXRpb25z
LCB3ZSBvbmx5IHNhbml0eS1jaGVjayB0aGUgc2V0IHNpemVzLAotICAgICAgYXNzZXJ0VHJ1ZShm
cmFtZS5yb3RhdGVkV2lkdGgoKSA+IDApOwotICAgICAgYXNzZXJ0VHJ1ZShmcmFtZS5yb3RhdGVk
SGVpZ2h0KCkgPiAwKTsKLSAgICAgIG9ic2VydmVyLnNldEV4cGVjdGVkUmVzb2x1dGlvbihmcmFt
ZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUucm90YXRlZEhlaWdodCgpKTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTZHBPYnNlcnZlckxhdGNoIGltcGxlbWVudHMgU2RwT2Jz
ZXJ2ZXIgewotICAgIHByaXZhdGUgYm9vbGVhbiBzdWNjZXNzID0gZmFsc2U7Ci0gICAgcHJpdmF0
ZSBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbnVsbDsKLSAgICBwcml2YXRlIFN0cmluZyBlcnJv
ciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBDb3VudERvd25MYXRjaCBsYXRjaCA9IG5ldyBDb3VudERv
d25MYXRjaCgxKTsKLQotICAgIHB1YmxpYyBTZHBPYnNlcnZlckxhdGNoKCkge30KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlU3VjY2VzcyhTZXNzaW9uRGVzY3JpcHRp
b24gc2RwKSB7Ci0gICAgICB0aGlzLnNkcCA9IHNkcDsKLSAgICAgIG9uU2V0U3VjY2VzcygpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2V0U3VjY2VzcygpIHsK
LSAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGVGYWlsdXJlKFN0cmluZyBl
cnJvcikgewotICAgICAgb25TZXRGYWlsdXJlKGVycm9yKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvblNldEZhaWx1cmUoU3RyaW5nIGVycm9yKSB7Ci0gICAgICB0
aGlzLmVycm9yID0gZXJyb3I7Ci0gICAgICBsYXRjaC5jb3VudERvd24oKTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgYm9vbGVhbiBhd2FpdCgpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGFzc2VydFRy
dWUobGF0Y2guYXdhaXQoMTAwMCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKSk7Ci0gICAgICAgIHJl
dHVybiBnZXRTdWNjZXNzKCk7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgYm9vbGVhbiBnZXRTdWNjZXNzKCkgewotICAgICAgcmV0dXJuIHN1Y2Nlc3M7Ci0gICAg
fQotCi0gICAgcHVibGljIFNlc3Npb25EZXNjcmlwdGlvbiBnZXRTZHAoKSB7Ci0gICAgICByZXR1
cm4gc2RwOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0RXJyb3IoKSB7Ci0gICAgICBy
ZXR1cm4gZXJyb3I7Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIGludCB2aWRlb1dpbmRvd3NNYXBw
ZWQgPSAtMTsKLQotICBwcml2YXRlIHN0YXRpYyBWaWRlb1JlbmRlcmVyIGNyZWF0ZVZpZGVvUmVu
ZGVyZXIoVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgdmlkZW9DYWxsYmFja3MpIHsKLSAgICByZXR1
cm4gbmV3IFZpZGVvUmVuZGVyZXIodmlkZW9DYWxsYmFja3MpOwotICB9Ci0KLSAgLy8gUmV0dXJu
IGEgd2VhayByZWZlcmVuY2UgdG8gdGVzdCB0aGF0IG93bmVyc2hpcCBpcyBjb3JyZWN0bHkgaGVs
ZCBieQotICAvLyBQZWVyQ29ubmVjdGlvbiwgbm90IGJ5IHRlc3QgY29kZS4KLSAgcHJpdmF0ZSBz
dGF0aWMgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVhbT4gYWRkVHJhY2tzVG9QQyhQZWVyQ29ubmVj
dGlvbkZhY3RvcnkgZmFjdG9yeSwKLSAgICAgIFBlZXJDb25uZWN0aW9uIHBjLCBWaWRlb1NvdXJj
ZSB2aWRlb1NvdXJjZSwgU3RyaW5nIHN0cmVhbUxhYmVsLCBTdHJpbmcgdmlkZW9UcmFja0lkLAot
ICAgICAgU3RyaW5nIGF1ZGlvVHJhY2tJZCwgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgdmlkZW9D
YWxsYmFja3MpIHsKLSAgICBNZWRpYVN0cmVhbSBsTVMgPSBmYWN0b3J5LmNyZWF0ZUxvY2FsTWVk
aWFTdHJlYW0oc3RyZWFtTGFiZWwpOwotICAgIFZpZGVvVHJhY2sgdmlkZW9UcmFjayA9IGZhY3Rv
cnkuY3JlYXRlVmlkZW9UcmFjayh2aWRlb1RyYWNrSWQsIHZpZGVvU291cmNlKTsKLSAgICBhc3Nl
cnROb3ROdWxsKHZpZGVvVHJhY2spOwotICAgIFZpZGVvUmVuZGVyZXIgdmlkZW9SZW5kZXJlciA9
IGNyZWF0ZVZpZGVvUmVuZGVyZXIodmlkZW9DYWxsYmFja3MpOwotICAgIGFzc2VydE5vdE51bGwo
dmlkZW9SZW5kZXJlcik7Ci0gICAgdmlkZW9UcmFjay5hZGRSZW5kZXJlcih2aWRlb1JlbmRlcmVy
KTsKLSAgICBsTVMuYWRkVHJhY2sodmlkZW9UcmFjayk7Ci0gICAgLy8gSnVzdCBmb3IgZnVuLCBs
ZXQncyByZW1vdmUgYW5kIHJlLWFkZCB0aGUgdHJhY2suCi0gICAgbE1TLnJlbW92ZVRyYWNrKHZp
ZGVvVHJhY2spOwotICAgIGxNUy5hZGRUcmFjayh2aWRlb1RyYWNrKTsKLSAgICBsTVMuYWRkVHJh
Y2soCi0gICAgICAgIGZhY3RvcnkuY3JlYXRlQXVkaW9UcmFjayhhdWRpb1RyYWNrSWQsIGZhY3Rv
cnkuY3JlYXRlQXVkaW9Tb3VyY2UobmV3IE1lZGlhQ29uc3RyYWludHMoKSkpKTsKLSAgICBwYy5h
ZGRTdHJlYW0obE1TKTsKLSAgICByZXR1cm4gbmV3IFdlYWtSZWZlcmVuY2U8TWVkaWFTdHJlYW0+
KGxNUyk7Ci0gIH0KLQotICAvLyBVc2VkIGZvciBtYWtpbmcgc3VyZSB0aHJlYWQgaGFuZGxlcyBh
cmUgbm90IGxlYWtlZC4KLSAgLy8gQ2FsbCBpbml0aWFsaXplVGhyZWFkQ2hlY2sgYmVmb3JlIGEg
dGVzdCBhbmQgZmluYWxpemVUaHJlYWRDaGVjayBhZnRlcgotICAvLyBhIHRlc3QuCi0gIHZvaWQg
aW5pdGlhbGl6ZVRocmVhZENoZWNrKCkgewotICAgIFN5c3RlbS5nYygpOyAvLyBFbmNvdXJhZ2Ug
YW55IEdDLXJlbGF0ZWQgdGhyZWFkcyB0byBzdGFydCB1cC4KLSAgICB0aHJlYWRzQmVmb3JlVGVz
dCA9IGFsbFRocmVhZHMoKTsKLSAgfQotCi0gIHZvaWQgZmluYWxpemVUaHJlYWRDaGVjaygpIHRo
cm93cyBFeGNlcHRpb24gewotICAgIC8vIFRyZWVTZXQ8U3RyaW5nPiB0aHJlYWRzQWZ0ZXJUZXN0
ID0gYWxsVGhyZWFkcygpOwotCi0gICAgLy8gVE9ETyh0b21taSk6IEZpZ3VyZSBvdXQgYSBtb3Jl
IHJlbGlhYmxlIHdheSB0byBkbyB0aGlzIHRlc3QuICBBcyBpcwotICAgIC8vIHdlJ3JlIHNlZWlu
ZyB0aHJlZSBwb3NzaWJsZSAnbm9ybWFsJyBzaXR1YXRpb25zOgotICAgIC8vIDEuICBiZWZvcmUg
YW5kIGFmdGVyIHNldHMgYXJlIGVxdWFsLgotICAgIC8vIDIuICBiZWZvcmUgY29udGFpbnMgMyB0
aHJlYWRzIHRoYXQgZG8gbm90IGV4aXN0IGluIGFmdGVyLgotICAgIC8vIDMuICBhZnRlciBjb250
YWlucyAzIHRocmVhZHMgdGhhdCBkbyBub3QgZXhpc3QgaW4gYmVmb3JlLgotICAgIC8vCi0gICAg
Ly8gTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIHRvIGRvIHRoZSB0aHJlYWQgZW51bWVyYXRpb24g
ZnJvbSBDKysgYW5kIGdldAotICAgIC8vIHRoZSB0aHJlYWQgbmFtZXMgYXMgd2VsbCwgaW4gb3Jk
ZXIgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlc2UgMyB0aHJlYWRzIGFyZS4KLQotICAgIC8vIGFzc2Vy
dEVxdWFscyh0aHJlYWRzQmVmb3JlVGVzdCwgdGhyZWFkc0FmdGVyVGVzdCk7Ci0gICAgLy8gVGhy
ZWFkLnNsZWVwKDEwMCk7Ci0gIH0KLQotICAvLyBUT0RPKGZpc2NobWFuKSBNT0FSIHRlc3QgaWRl
YXM6Ci0gIC8vIC0gVGVzdCB0aGF0IFBDLnJlbW92ZVN0cmVhbSgpIHdvcmtzOyByZXF1aXJlcyBh
IHNlY29uZAotICAvLyAgIGNyZWF0ZU9mZmVyL2NyZWF0ZUFuc3dlciBkYW5jZS4KLSAgLy8gLSBh
dWRpdCBlYWNoIHBsYWNlIHRoYXQgdXNlcyB8Y29uc3RyYWludHN8IGZvciBzcGVjaWZ5aW5nIG5v
bi10cml2aWFsCi0gIC8vICAgY29uc3RyYWludHMgKGFuZCBlbnN1cmUgdGhleSdyZSBob25vcmVk
KS4KLSAgLy8gLSB0ZXN0IGVycm9yIGNhc2VzCi0gIC8vIC0gZW5zdXJlIHJlYXNvbmFibGUgY292
ZXJhZ2Ugb2YgX2puaS5jYyBpcyBhY2hpZXZlZC4gIENvdmVyYWdlIGlzCi0gIC8vICAgZXh0cmEt
aW1wb3J0YW50IGJlY2F1c2Ugb2YgYWxsIHRoZSBmcmVlLXRleHQgKGNsYXNzL21ldGhvZCBuYW1l
cywgZXRjKQotICAvLyAgIGluIEpOSS1zdHlsZSBwcm9ncmFtbWluZzsgbWFrZSBzdXJlIG5vIHR5
cG9zIQotICAvLyAtIFRlc3QgdGhhdCBzaHV0ZG93biBtaWQtaW50ZXJhY3Rpb24gaXMgY3Jhc2gt
ZnJlZS4KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxldGVTZXNzaW9u
KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTWV0cmljcy5lbmFibGUoKTsKLSAgICAvLyBBbGxv
dyBsb29wYmFjayBpbnRlcmZhY2VzIHRvbyBzaW5jZSBvdXIgQW5kcm9pZCBkZXZpY2VzIG9mdGVu
IGRvbid0Ci0gICAgLy8gaGF2ZSB0aG9zZS4KLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0
aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAg
b3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9IDA7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5
IGZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5KG9wdGlvbnMpOwotICAgIC8vIFVu
Y29tbWVudCB0byBnZXQgQUxMIFdlYlJUQyB0cmFjaW5nIGFuZCBTRU5TSVRJVkUgbGliamluZ2xl
IGxvZ2dpbmcuCi0gICAgLy8gTk9URTogdGhpcyBfbXVzdF8gaGFwcGVuIHdoaWxlIHxmYWN0b3J5
fCBpcyBhbGl2ZSEKLSAgICAvLyBMb2dnaW5nLmVuYWJsZVRyYWNpbmcoCi0gICAgLy8gICAgICIv
dG1wL1BlZXJDb25uZWN0aW9uVGVzdC1sb2cudHh0IiwKLSAgICAvLyAgICAgRW51bVNldC5vZihM
b2dnaW5nLlRyYWNlTGV2ZWwuVFJBQ0VfQUxMKSwKLSAgICAvLyAgICAgTG9nZ2luZy5TZXZlcml0
eS5MU19TRU5TSVRJVkUpOwotCi0gICAgTWVkaWFDb25zdHJhaW50cyBwY0NvbnN0cmFpbnRzID0g
bmV3IE1lZGlhQ29uc3RyYWludHMoKTsKLSAgICBwY0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQo
bmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKCJEdGxzU3J0cEtleUFncmVlbWVudCIs
ICJ0cnVlIikpOwotCi0gICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGlj
ZVNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+KCk7Ci0g
ICAgaWNlU2VydmVycy5hZGQobmV3IFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcigic3R1bjpzdHVu
LmwuZ29vZ2xlLmNvbToxOTMwMiIpKTsKLSAgICBpY2VTZXJ2ZXJzLmFkZCgKLSAgICAgICAgbmV3
IFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcigidHVybjpmYWtlLmV4YW1wbGUuY29tIiwgImZha2VV
c2VybmFtZSIsICJmYWtlUGFzc3dvcmQiKSk7Ci0gICAgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2Zm
ZXJpbmdFeHBlY3RhdGlvbnMgPSBuZXcgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMoIlBDVGVzdDpvZmZl
cmVyIik7Ci0gICAgUGVlckNvbm5lY3Rpb24gb2ZmZXJpbmdQQyA9Ci0gICAgICAgIGZhY3Rvcnku
Y3JlYXRlUGVlckNvbm5lY3Rpb24oaWNlU2VydmVycywgcGNDb25zdHJhaW50cywgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMpOwotICAgIGFzc2VydE5vdE51bGwob2ZmZXJpbmdQQyk7Ci0KLSAgICBPYnNl
cnZlckV4cGVjdGF0aW9ucyBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMgPSBuZXcgT2JzZXJ2ZXJFeHBl
Y3RhdGlvbnMoIlBDVGVzdDphbnN3ZXJlciIpOwotICAgIFBlZXJDb25uZWN0aW9uIGFuc3dlcmlu
Z1BDID0KLSAgICAgICAgZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihpY2VTZXJ2ZXJzLCBw
Y0NvbnN0cmFpbnRzLCBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIGFzc2VydE5vdE51bGwo
YW5zd2VyaW5nUEMpOwotCi0gICAgLy8gV2Ugd2FudCB0byB1c2UgdGhlIHNhbWUgY2FtZXJhIGZv
ciBvZmZlcmVyICYgYW5zd2VyZXIsIHNvIGNyZWF0ZSBpdCBoZXJlCi0gICAgLy8gaW5zdGVhZCBv
ZiBpbiBhZGRUcmFja3NUb1BDLgotICAgIGZpbmFsIENhbWVyYUVudW1lcmF0b3IgZW51bWVyYXRv
ciA9IG5ldyBDYW1lcmExRW51bWVyYXRvcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKTsK
LSAgICBmaW5hbCBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIgPQotICAgICAgICBlbnVtZXJh
dG9yLmNyZWF0ZUNhcHR1cmVyKGVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKVswXSwgbnVsbCk7
Ci0gICAgZmluYWwgVmlkZW9Tb3VyY2UgdmlkZW9Tb3VyY2UgPSBmYWN0b3J5LmNyZWF0ZVZpZGVv
U291cmNlKHZpZGVvQ2FwdHVyZXIpOwotICAgIHZpZGVvQ2FwdHVyZXIuc3RhcnRDYXB0dXJlKDY0
MCwgNDgwLCAzMCk7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290aWF0
aW9uTmVlZGVkKCk7Ci0gICAgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVhbT4gb0xNUyA9Ci0gICAg
ICAgIGFkZFRyYWNrc1RvUEMoZmFjdG9yeSwgb2ZmZXJpbmdQQywgdmlkZW9Tb3VyY2UsICJvZmZl
cmVkTWVkaWFTdHJlYW0iLCAib2ZmZXJlZFZpZGVvVHJhY2siLAotICAgICAgICAgICAgIm9mZmVy
ZWRBdWRpb1RyYWNrIiwgbmV3IEV4cGVjdGVkUmVzb2x1dGlvblNldHRlcihhbnN3ZXJpbmdFeHBl
Y3RhdGlvbnMpKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRp
b25OZWVkZWQoKTsKLSAgICBEYXRhQ2hhbm5lbCBvZmZlcmluZ0RDID0gb2ZmZXJpbmdQQy5jcmVh
dGVEYXRhQ2hhbm5lbCgib2ZmZXJpbmdEQyIsIG5ldyBEYXRhQ2hhbm5lbC5Jbml0KCkpOwotICAg
IGFzc2VydEVxdWFscygib2ZmZXJpbmdEQyIsIG9mZmVyaW5nREMubGFiZWwoKSk7Ci0KLSAgICBv
ZmZlcmluZ0V4cGVjdGF0aW9ucy5zZXREYXRhQ2hhbm5lbChvZmZlcmluZ0RDKTsKLSAgICBTZHBP
YnNlcnZlckxhdGNoIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZl
cmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAg
ICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiBv
ZmZlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFscyhvZmZlclNkcC50
eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5PRkZFUik7Ci0gICAgYXNzZXJ0RmFsc2Uob2Zm
ZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIHNkcExhdGNoID0gbmV3IFNkcE9i
c2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5n
Q2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfUkVNT1RFX09GRkVSKTsKLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0QWRkU3RyZWFtKCJvZmZlcmVkTWVkaWFTdHJlYW0iKTsKLSAgICAv
LyBTQ1RQIERhdGFDaGFubmVscyBhcmUgYW5ub3VuY2VkIHZpYSBPUEVOIG1lc3NhZ2VzIG92ZXIg
dGhlIGVzdGFibGlzaGVkCi0gICAgLy8gY29ubmVjdGlvbiAobm90IHZpYSBTRFApLCBzbyBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMgY2FuIG9ubHkgcmVnaXN0ZXIKLSAgICAvLyBleHBlY3RpbmcgdGhl
IGNoYW5uZWwgZHVyaW5nIElDRSwgYmVsb3cuCi0gICAgYW5zd2VyaW5nUEMuc2V0UmVtb3RlRGVz
Y3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAgICBhc3NlcnRFcXVhbHMoUGVlckNvbm5l
Y3Rpb24uU2lnbmFsaW5nU3RhdGUuU1RBQkxFLCBvZmZlcmluZ1BDLnNpZ25hbGluZ1N0YXRlKCkp
OwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBM
YXRjaC5nZXRTZHAoKSk7Ci0KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVuZWdv
dGlhdGlvbk5lZWRlZCgpOwotICAgIFdlYWtSZWZlcmVuY2U8TWVkaWFTdHJlYW0+IGFMTVMgPSBh
ZGRUcmFja3NUb1BDKGZhY3RvcnksIGFuc3dlcmluZ1BDLCB2aWRlb1NvdXJjZSwKLSAgICAgICAg
ImFuc3dlcmVkTWVkaWFTdHJlYW0iLCAiYW5zd2VyZWRWaWRlb1RyYWNrIiwgImFuc3dlcmVkQXVk
aW9UcmFjayIsCi0gICAgICAgIG5ldyBFeHBlY3RlZFJlc29sdXRpb25TZXR0ZXIob2ZmZXJpbmdF
eHBlY3RhdGlvbnMpKTsKLQotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsK
LSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVBbnN3ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFp
bnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRl
c2NyaXB0aW9uIGFuc3dlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFs
cyhhbnN3ZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSKTsKLSAgICBh
c3NlcnRGYWxzZShhbnN3ZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIG9mZmVy
aW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0gICAgYW5zd2VyaW5nRXhw
ZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUuQ09NUExFVEUp
OwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNl
R2F0aGVyaW5nU3RhdGUuQ09NUExFVEUpOwotCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2
ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFu
Z2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRMb2NhbERlc2Ny
aXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdh
aXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICBzZHBMYXRj
aCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfTE9DQUxfT0ZGRVIpOwotICAg
IG9mZmVyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAg
IGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5n
ZXRTZHAoKSk7Ci0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9m
ZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5T
VEFCTEUpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEFkZFN0cmVhbSgiYW5zd2Vy
ZWRNZWRpYVN0cmVhbSIpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29u
bmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIG9mZmVyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRl
LkNPTk5FQ1RFRCk7Ci0gICAgLy8gVE9ETyhiZW1hc2MpOiB1bmNvbW1lbnQgb25jZSBkZWxpdmVy
eSBvZiBJQ0VDb21wbGV0ZWQgaXMgcmVsaWFibGUKLSAgICAvLyAoaHR0cHM6Ly9jb2RlLmdvb2ds
ZS5jb20vcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD0zMDIxKS4KLSAgICAvLwotICAgIC8vIG9m
ZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoCi0gICAgLy8gICAg
IEljZUNvbm5lY3Rpb25TdGF0ZS5DT01QTEVURUQpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9u
cy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DSEVDS0lORyk7
Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNl
Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0KLSAgICBvZmZlcmluZ1BDLnNldFJlbW90ZURl
c2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2gu
YXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRMb2NhbERlc2NyaXB0aW9uKCkudHlwZSwgb2ZmZXJTZHAu
dHlwZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9mZmVyaW5nUEMuZ2V0UmVtb3RlRGVzY3JpcHRpb24o
KS50eXBlLCBhbnN3ZXJTZHAudHlwZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlcmluZ1BDLmdl
dExvY2FsRGVzY3JpcHRpb24oKS50eXBlLCBhbnN3ZXJTZHAudHlwZSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKGFuc3dlcmluZ1BDLmdldFJlbW90ZURlc2NyaXB0aW9uKCkudHlwZSwgb2ZmZXJTZHAudHlw
ZSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRTZW5kZXJzKCkuc2l6ZSgpLCAy
KTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRSZWNlaXZlcnMoKS5zaXplKCksIDIp
OwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJpbmdQQy5nZXRTZW5kZXJzKCkuc2l6ZSgpLCAyKTsK
LSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyaW5nUEMuZ2V0UmVjZWl2ZXJzKCkuc2l6ZSgpLCAyKTsK
LQotICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0IHNvbWUgZnJhbWVzIHRvIGJlIGRlbGl2ZXJlZCBh
dCBlYWNoIGVuZCAobnVtYmVyCi0gICAgLy8gY2hvc2VuIGFyYml0cmFyaWx5KS4KLSAgICBvZmZl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RGcmFtZXNEZWxpdmVyZWQoMTApOwotICAgIGFuc3dlcmlu
Z0V4cGVjdGF0aW9ucy5leHBlY3RGcmFtZXNEZWxpdmVyZWQoMTApOwotCi0gICAgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuT1BFTik7Ci0g
ICAgLy8gU2VlIGNvbW1lbnRhcnkgYWJvdXQgU0NUUCBEYXRhQ2hhbm5lbHMgYWJvdmUgZm9yIHdo
eSB0aGlzIGlzIGhlcmUuCi0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdERhdGFDaGFu
bmVsKCJvZmZlcmluZ0RDIik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRl
Q2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLk9QRU4pOwotCi0gICAgLy8gV2FpdCBmb3IgYXQgbGVh
c3Qgb25lIGljZSBjYW5kaWRhdGUgZnJvbSB0aGUgb2ZmZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhl
bSB0byB0aGUgYW5zd2VyaW5nCi0gICAgLy8gUEMuCi0gICAgZm9yIChJY2VDYW5kaWRhdGUgY2Fu
ZGlkYXRlIDogb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgp
KSB7Ci0gICAgICBhbnN3ZXJpbmdQQy5hZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB9
Ci0KLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNhbmRpZGF0ZSBmcm9tIHRoZSBh
bnN3ZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgb2ZmZXJpbmcKLSAgICAvLyBQQy4K
LSAgICBmb3IgKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMu
Z2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBvZmZlcmluZ1BDLmFkZEljZUNh
bmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIH0KLQotICAgIGFzc2VydFRydWUob2ZmZXJpbmdFeHBl
Y3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNP
TkRTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShhbnN3ZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZvckFsbEV4
cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0KLSAgICBhc3NlcnRF
cXVhbHMoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGUuU1RBQkxFLCBvZmZlcmluZ1BDLnNp
Z25hbGluZ1N0YXRlKCkpOwotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWduYWxp
bmdTdGF0ZS5TVEFCTEUsIGFuc3dlcmluZ1BDLnNpZ25hbGluZ1N0YXRlKCkpOwotCi0gICAgLy8g
U2V0IGEgYml0cmF0ZSBsaW1pdCBmb3IgdGhlIG91dGdvaW5nIHZpZGVvIHN0cmVhbSBmb3IgdGhl
IG9mZmVyZXIuCi0gICAgUnRwU2VuZGVyIHZpZGVvU2VuZGVyID0gbnVsbDsKLSAgICBmb3IgKFJ0
cFNlbmRlciBzZW5kZXIgOiBvZmZlcmluZ1BDLmdldFNlbmRlcnMoKSkgewotICAgICAgaWYgKHNl
bmRlci50cmFjaygpLmtpbmQoKS5lcXVhbHMoInZpZGVvIikpIHsKLSAgICAgICAgdmlkZW9TZW5k
ZXIgPSBzZW5kZXI7Ci0gICAgICB9Ci0gICAgfQotICAgIGFzc2VydE5vdE51bGwodmlkZW9TZW5k
ZXIpOwotICAgIFJ0cFBhcmFtZXRlcnMgcnRwUGFyYW1ldGVycyA9IHZpZGVvU2VuZGVyLmdldFBh
cmFtZXRlcnMoKTsKLSAgICBhc3NlcnROb3ROdWxsKHJ0cFBhcmFtZXRlcnMpOwotICAgIGFzc2Vy
dEVxdWFscygxLCBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5zaXplKCkpOwotICAgIGFzc2VydE51
bGwocnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLm1heEJpdHJhdGVCcHMpOwotCi0gICAg
cnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLm1heEJpdHJhdGVCcHMgPSAzMDAwMDA7Ci0g
ICAgYXNzZXJ0VHJ1ZSh2aWRlb1NlbmRlci5zZXRQYXJhbWV0ZXJzKHJ0cFBhcmFtZXRlcnMpKTsK
LQotICAgIC8vIFZlcmlmeSB0aGF0IHdlIGNhbiByZWFkIGJhY2sgdGhlIHVwZGF0ZWQgdmFsdWUu
Ci0gICAgcnRwUGFyYW1ldGVycyA9IHZpZGVvU2VuZGVyLmdldFBhcmFtZXRlcnMoKTsKLSAgICBh
c3NlcnRFcXVhbHMoMzAwMDAwLCAoaW50KSBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCku
bWF4Qml0cmF0ZUJwcyk7Ci0KLSAgICAvLyBUZXN0IHNlbmQgJiByZWNlaXZlIFVURi04IHRleHQu
Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdE1lc3NhZ2UoCi0gICAgICAgIEJ5dGVC
dWZmZXIud3JhcCgiaGVsbG8hIi5nZXRCeXRlcyhDaGFyc2V0LmZvck5hbWUoIlVURi04IikpKSwg
ZmFsc2UpOwotICAgIERhdGFDaGFubmVsLkJ1ZmZlciBidWZmZXIgPQotICAgICAgICBuZXcgRGF0
YUNoYW5uZWwuQnVmZmVyKEJ5dGVCdWZmZXIud3JhcCgiaGVsbG8hIi5nZXRCeXRlcyhDaGFyc2V0
LmZvck5hbWUoIlVURi04IikpKSwgZmFsc2UpOwotICAgIGFzc2VydFRydWUob2ZmZXJpbmdFeHBl
Y3RhdGlvbnMuZGF0YUNoYW5uZWwuc2VuZChidWZmZXIpKTsKLSAgICBhc3NlcnRUcnVlKGFuc3dl
cmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1F
T1VUX1NFQ09ORFMpKTsKLQotICAgIC8vIENvbnN0cnVjdCB0aGlzIGJpbmFyeSBtZXNzYWdlIHR3
byBkaWZmZXJlbnQgd2F5cyB0byBlbnN1cmUgbm8KLSAgICAvLyBzaG9ydGN1dHMgYXJlIHRha2Vu
LgotICAgIEJ5dGVCdWZmZXIgZXhwZWN0ZWRCaW5hcnlNZXNzYWdlID0gQnl0ZUJ1ZmZlci5hbGxv
Y2F0ZURpcmVjdCg1KTsKLSAgICBmb3IgKGJ5dGUgaSA9IDE7IGkgPCA2OyArK2kpIHsKLSAgICAg
IGV4cGVjdGVkQmluYXJ5TWVzc2FnZS5wdXQoaSk7Ci0gICAgfQotICAgIGV4cGVjdGVkQmluYXJ5
TWVzc2FnZS5mbGlwKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0TWVzc2FnZShl
eHBlY3RlZEJpbmFyeU1lc3NhZ2UsIHRydWUpOwotICAgIGFzc2VydFRydWUoYW5zd2VyaW5nRXhw
ZWN0YXRpb25zLmRhdGFDaGFubmVsLnNlbmQoCi0gICAgICAgIG5ldyBEYXRhQ2hhbm5lbC5CdWZm
ZXIoQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gezEsIDIsIDMsIDQsIDV9KSwgdHJ1ZSkpKTsK
LSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlv
bnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0lORyk7Ci0gICAg
YW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRl
LkNMT1NJTkcpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERh
dGFDaGFubmVsLlN0YXRlLkNMT1NFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLkNMT1NFRCk7Ci0gICAgYW5zd2VyaW5nRXhw
ZWN0YXRpb25zLmRhdGFDaGFubmVsLmNsb3NlKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMu
ZGF0YUNoYW5uZWwuY2xvc2UoKTsKLQotICAgIC8vIEZyZWUgdGhlIEphdmEtbGFuZCBvYmplY3Rz
IGFuZCBjb2xsZWN0IHRoZW0uCi0gICAgc2h1dGRvd25QQyhvZmZlcmluZ1BDLCBvZmZlcmluZ0V4
cGVjdGF0aW9ucyk7Ci0gICAgb2ZmZXJpbmdQQyA9IG51bGw7Ci0gICAgc2h1dGRvd25QQyhhbnN3
ZXJpbmdQQywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBhbnN3ZXJpbmdQQyA9IG51bGw7
Ci0gICAgZ2V0TWV0cmljcygpOwotICAgIHZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAg
ICB2aWRlb0NhcHR1cmVyLmRpc3Bvc2UoKTsKLSAgICB2aWRlb1NvdXJjZS5kaXNwb3NlKCk7Ci0g
ICAgZmFjdG9yeS5kaXNwb3NlKCk7Ci0gICAgU3lzdGVtLmdjKCk7Ci0gIH0KLQotICBATWVkaXVt
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0VHJhY2tSZW1vdmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7
Ci0gICAgLy8gQWxsb3cgbG9vcGJhY2sgaW50ZXJmYWNlcyB0b28gc2luY2Ugb3VyIEFuZHJvaWQg
ZGV2aWNlcyBvZnRlbiBkb24ndAotICAgIC8vIGhhdmUgdGhvc2UuCi0gICAgUGVlckNvbm5lY3Rp
b25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0
aW9ucygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAwOwotICAgIFBlZXJDb25u
ZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeShvcHRpb25z
KTsKLQotICAgIE1lZGlhQ29uc3RyYWludHMgcGNDb25zdHJhaW50cyA9IG5ldyBNZWRpYUNvbnN0
cmFpbnRzKCk7Ci0gICAgcGNDb25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKG5ldyBNZWRpYUNvbnN0
cmFpbnRzLktleVZhbHVlUGFpcigiRHRsc1NydHBLZXlBZ3JlZW1lbnQiLCAidHJ1ZSIpKTsKLQot
ICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzID0gbmV3
IExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPigpOwotICAgIGljZVNlcnZlcnMu
YWRkKG5ldyBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIoInN0dW46c3R1bi5sLmdvb2dsZS5jb206
MTkzMDIiKSk7Ci0KLSAgICBPYnNlcnZlckV4cGVjdGF0aW9ucyBvZmZlcmluZ0V4cGVjdGF0aW9u
cyA9IG5ldyBPYnNlcnZlckV4cGVjdGF0aW9ucygiUENUZXN0Om9mZmVyZXIiKTsKLSAgICBQZWVy
Q29ubmVjdGlvbiBvZmZlcmluZ1BDID0KLSAgICAgICAgZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVj
dGlvbihpY2VTZXJ2ZXJzLCBwY0NvbnN0cmFpbnRzLCBvZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0g
ICAgYXNzZXJ0Tm90TnVsbChvZmZlcmluZ1BDKTsKLQotICAgIE9ic2VydmVyRXhwZWN0YXRpb25z
IGFuc3dlcmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBPYnNlcnZlckV4cGVjdGF0aW9ucygiUENUZXN0
OmFuc3dlcmVyIik7Ci0gICAgUGVlckNvbm5lY3Rpb24gYW5zd2VyaW5nUEMgPQotICAgICAgICBm
YWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKGljZVNlcnZlcnMsIHBjQ29uc3RyYWludHMsIGFu
c3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNzZXJ0Tm90TnVsbChhbnN3ZXJpbmdQQyk7Ci0K
LSAgICAvLyBXZSB3YW50IHRvIHVzZSB0aGUgc2FtZSBjYW1lcmEgZm9yIG9mZmVyZXIgJiBhbnN3
ZXJlciwgc28gY3JlYXRlIGl0IGhlcmUKLSAgICAvLyBpbnN0ZWFkIG9mIGluIGFkZFRyYWNrc1Rv
UEMuCi0gICAgZmluYWwgQ2FtZXJhRW51bWVyYXRvciBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTFF
bnVtZXJhdG9yKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pOwotICAgIGZpbmFsIFZpZGVv
Q2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9Ci0gICAgICAgIGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVy
ZXIoZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpWzBdLCBudWxsKTsKLSAgICBmaW5hbCBWaWRl
b1NvdXJjZSB2aWRlb1NvdXJjZSA9IGZhY3RvcnkuY3JlYXRlVmlkZW9Tb3VyY2UodmlkZW9DYXB0
dXJlcik7Ci0gICAgdmlkZW9DYXB0dXJlci5zdGFydENhcHR1cmUoNjQwLCA0ODAsIDMwKTsKLQot
ICAgIC8vIEFkZCBvZmZlcmVyIG1lZGlhIHN0cmVhbS4KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9u
cy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gICAgV2Vha1JlZmVyZW5jZTxNZWRpYVN0
cmVhbT4gb0xNUyA9Ci0gICAgICAgIGFkZFRyYWNrc1RvUEMoZmFjdG9yeSwgb2ZmZXJpbmdQQywg
dmlkZW9Tb3VyY2UsICJvZmZlcmVkTWVkaWFTdHJlYW0iLCAib2ZmZXJlZFZpZGVvVHJhY2siLAot
ICAgICAgICAgICAgIm9mZmVyZWRBdWRpb1RyYWNrIiwgbmV3IEV4cGVjdGVkUmVzb2x1dGlvblNl
dHRlcihhbnN3ZXJpbmdFeHBlY3RhdGlvbnMpKTsKLQotICAgIC8vIENyZWF0ZSBvZmZlci4KLSAg
ICBTZHBPYnNlcnZlckxhdGNoIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAg
ICBvZmZlcmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygp
KTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIFNlc3Npb25EZXNjcmlw
dGlvbiBvZmZlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFscyhvZmZl
clNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5PRkZFUik7Ci0gICAgYXNzZXJ0RmFs
c2Uob2ZmZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIC8vIFNldCBsb2NhbCBk
ZXNjcmlwdGlvbiBmb3Igb2ZmZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxh
dGNoKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNp
Z25hbGluZ1N0YXRlLkhBVkVfTE9DQUxfT0ZGRVIpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0
SWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0YXRlLkNPTVBMRVRFKTsKLSAgICBvZmZl
cmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAgICBhc3Nl
cnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2Rw
KCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBmb3IgYW5zd2VyZXIuCi0gICAg
c2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9SRU1PVEVfT0ZG
RVIpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RBZGRTdHJlYW0oIm9mZmVyZWRN
ZWRpYVN0cmVhbSIpOwotICAgIGFuc3dlcmluZ1BDLnNldFJlbW90ZURlc2NyaXB0aW9uKHNkcExh
dGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBh
c3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIEFkZCBhbnN3ZXJlciBtZWRp
YSBzdHJlYW0uCi0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25O
ZWVkZWQoKTsKLSAgICBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBhTE1TID0gYWRkVHJhY2tz
VG9QQyhmYWN0b3J5LCBhbnN3ZXJpbmdQQywgdmlkZW9Tb3VyY2UsCi0gICAgICAgICJhbnN3ZXJl
ZE1lZGlhU3RyZWFtIiwgImFuc3dlcmVkVmlkZW9UcmFjayIsICJhbnN3ZXJlZEF1ZGlvVHJhY2si
LAotICAgICAgICBuZXcgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyKG9mZmVyaW5nRXhwZWN0YXRp
b25zKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW5zd2VyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9i
c2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVBbnN3ZXIoc2RwTGF0Y2gsIG5l
dyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7
Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwot
ICAgIGFzc2VydEVxdWFscyhhbnN3ZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUu
QU5TV0VSKTsKLSAgICBhc3NlcnRGYWxzZShhbnN3ZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgp
KTsKLQotICAgIC8vIFNldCBsb2NhbCBkZXNjcmlwdGlvbiBmb3IgYW5zd2VyZXIuCi0gICAgc2Rw
TGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9u
cy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsKLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0SWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0YXRlLkNP
TVBMRVRFKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBh
bnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0
TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9u
IGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAg
ICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3Rh
dGUuU1RBQkxFKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RBZGRTdHJlYW0oImFu
c3dlcmVkTWVkaWFTdHJlYW0iKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdElj
ZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNIRUNLSU5HKTsKLSAgICBvZmZl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25T
dGF0ZS5DT05ORUNURUQpOwotICAgIC8vIFRPRE8oYmVtYXNjKTogdW5jb21tZW50IG9uY2UgZGVs
aXZlcnkgb2YgSUNFQ29tcGxldGVkIGlzIHJlbGlhYmxlCi0gICAgLy8gKGh0dHBzOi8vY29kZS5n
b29nbGUuY29tL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9MzAyMSkuCi0gICAgLy8KLSAgICAv
LyBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKAotICAgIC8v
ICAgICBJY2VDb25uZWN0aW9uU3RhdGUuQ09NUExFVEVEKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJ
TkcpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdl
KEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwotCi0gICAgb2ZmZXJpbmdQQy5zZXRSZW1v
dGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExh
dGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAg
Ly8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGljZSBjYW5kaWRhdGUgZnJvbSB0aGUgb2ZmZXJpbmcg
UEMgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgYW5zd2VyaW5nCi0gICAgLy8gUEMuCi0gICAgZm9y
IChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFz
dE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBhbnN3ZXJpbmdQQy5hZGRJY2VDYW5kaWRhdGUo
Y2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNh
bmRpZGF0ZSBmcm9tIHRoZSBhbnN3ZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgb2Zm
ZXJpbmcKLSAgICAvLyBQQy4KLSAgICBmb3IgKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBv
ZmZlcmluZ1BDLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIH0KLQotICAgIC8vIFdh
aXQgZm9yIG9uZSBmcmFtZSBvZiB0aGUgY29ycmVjdCBzaXplIHRvIGJlIGRlbGl2ZXJlZC4KLSAg
ICAvLyBPdGhlcndpc2Ugd2UgY291bGQgZ2V0IGEgZHVtbXkgYmxhY2sgZnJhbWUgb2YgdW5leHBj
dGVkIHNpemUgd2hlbiB0aGUKLSAgICAvLyB2aWRlbyB0cmFjayBpcyByZW1vdmVkLgotICAgIG9m
ZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEZyYW1lc0RlbGl2ZXJlZCgxKTsKLSAgICBhbnN3ZXJp
bmdFeHBlY3RhdGlvbnMuZXhwZWN0RnJhbWVzRGVsaXZlcmVkKDEpOwotCi0gICAgYXNzZXJ0VHJ1
ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmll
ZChUSU1FT1VUX1NFQ09ORFMpKTsKLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9u
cy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMpKTsK
LQotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUs
IG9mZmVyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFBlZXJDb25u
ZWN0aW9uLlNpZ25hbGluZ1N0YXRlLlNUQUJMRSwgYW5zd2VyaW5nUEMuc2lnbmFsaW5nU3RhdGUo
KSk7Ci0KLSAgICAvLyBOb3cgZG8gYW5vdGhlciBuZWdvdGlhdGlvbiwgcmVtb3ZpbmcgdGhlIHZp
ZGVvIHRyYWNrIGZyb20gb25lIHBlZXIuCi0gICAgLy8gVGhpcyBwcmV2aW91c2x5IGNhdXNlZCBh
IGNyYXNoIG9uIHBjLmRpc3Bvc2UoKS4KLSAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy5jaHJvbWl1
bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD01MTI4Ci0gICAgVmlkZW9UcmFjayBvZmZl
cmVyVmlkZW9UcmFjayA9IG9MTVMuZ2V0KCkudmlkZW9UcmFja3MuZ2V0KDApOwotICAgIC8vIE5v
dGUgdGhhdCB3aGVuIHdlIGNhbGwgcmVtb3ZlVHJhY2ssIHdlIHJlZ2FpbiByZXNwb25zaWJpbGl0
eSBmb3IKLSAgICAvLyBkaXNwb3Npbmcgb2YgdGhlIHRyYWNrLgotICAgIG9MTVMuZ2V0KCkucmVt
b3ZlVHJhY2sob2ZmZXJlclZpZGVvVHJhY2spOwotCi0gICAgLy8gQ3JlYXRlIG9mZmVyLgotICAg
IHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0
ZU9mZmVyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVl
KHNkcExhdGNoLmF3YWl0KCkpOwotICAgIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9G
RkVSKTsKLSAgICBhc3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwot
Ci0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNo
ID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBl
Y3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9MT0NBTF9PRkZFUik7Ci0gICAg
b2ZmZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAg
YXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdl
dFNkcCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVyLgot
ICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBl
Y3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfUkVNT1RF
X09GRkVSKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwg
b2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0
TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW5zd2VyLgotICAgIHNk
cExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVB
bnN3ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUo
c2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYW5zd2VyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5B
TlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkp
OwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBhbnN3ZXJlci4KLSAgICBzZHBM
YXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIGFuc3dl
cmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNk
cCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9yIG9mZmVyZXIuCi0gICAg
c2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRp
b25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIG9m
ZmVyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAg
YXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdl
dFNkcCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgdHJhY2sgd2FzIHJlYWxseSByZW1vdmVk
LgotICAgIC8vIFRPRE8oZGVhZGJlZWYpOiBDdXJyZW50bHkgdGhlIGV4cGVjdGF0aW9uIGlzIHRo
YXQgdGhlIHZpZGVvIHRyYWNrJ3MKLSAgICAvLyBzdGF0ZSB3aWxsIGJlIHNldCB0byAiZW5kZWQi
LiBIb3dldmVyLCBpbiB0aGUgZnV0dXJlLCBpdCdzIGxpa2VseSB0aGF0Ci0gICAgLy8gdGhlIHZp
ZGVvIHRyYWNrIHdpbGwgYmUgY29tcGxldGVseSByZW1vdmVkIGZyb20gdGhlIHJlbW90ZSBzdHJl
YW0KLSAgICAvLyAoYXMgaXQgaXMgb24gdGhlIEMrKyBsZXZlbCkuCi0gICAgTWVkaWFTdHJlYW0g
YVJNUyA9IGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5nb3RSZW1vdGVTdHJlYW1zLml0ZXJhdG9yKCku
bmV4dCgpOwotICAgIGFzc2VydEVxdWFscyhhUk1TLnZpZGVvVHJhY2tzLmdldCgwKS5zdGF0ZSgp
LCBNZWRpYVN0cmVhbVRyYWNrLlN0YXRlLkVOREVEKTsKLQotICAgIC8vIEZpbmFsbHksIHJlbW92
ZSB0aGUgYXVkaW8gdHJhY2sgYXMgd2VsbCwgd2hpY2ggc2hvdWxkIGNvbXBsZXRlbHkgcmVtb3Zl
Ci0gICAgLy8gdGhlIHJlbW90ZSBzdHJlYW0uIFRoaXMgdXNlZCB0byB0cmlnZ2VyIGFuIGFzc2Vy
dC4KLSAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93ZWJydGMvaXNzdWVz
L2RldGFpbD9pZD01MTI4Ci0gICAgQXVkaW9UcmFjayBvZmZlcmVyQXVkaW9UcmFjayA9IG9MTVMu
Z2V0KCkuYXVkaW9UcmFja3MuZ2V0KDApOwotICAgIG9MTVMuZ2V0KCkucmVtb3ZlVHJhY2sob2Zm
ZXJlckF1ZGlvVHJhY2spOwotCi0gICAgLy8gQ3JlYXRlIG9mZmVyLgotICAgIHNkcExhdGNoID0g
bmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExh
dGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3
YWl0KCkpOwotICAgIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSKTsKLSAgICBh
c3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgLy8gU2V0
IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9i
c2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdD
aGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9MT0NBTF9PRkZFUik7Ci0gICAgb2ZmZXJpbmdQQy5z
ZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShz
ZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQot
ICAgIC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVyLgotICAgIHNkcExhdGNo
ID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfUkVNT1RFX09GRkVSKTsKLSAg
ICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVtb3ZlU3RyZWFtKCJvZmZlcmVkTWVkaWFT
dHJlYW0iKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwg
b2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0
TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW5zd2VyLgotICAgIHNk
cExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVB
bnN3ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUo
c2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYW5zd2VyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5B
TlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkp
OwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBhbnN3ZXJlci4KLSAgICBzZHBM
YXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIGFuc3dl
cmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNk
cCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9yIG9mZmVyZXIuCi0gICAg
c2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRp
b25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIG9m
ZmVyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAg
YXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdl
dFNkcCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgc3RyZWFtIHdhcyByZWFsbHkgcmVtb3Zl
ZC4KLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5nb3RSZW1vdGVTdHJlYW1z
LmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBKYXZhLWxhbmQgb2JqZWN0cyBhbmQgY29s
bGVjdCB0aGVtLgotICAgIHNodXRkb3duUEMob2ZmZXJpbmdQQywgb2ZmZXJpbmdFeHBlY3RhdGlv
bnMpOwotICAgIG9mZmVyaW5nUEMgPSBudWxsOwotICAgIHNodXRkb3duUEMoYW5zd2VyaW5nUEMs
IGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYW5zd2VyaW5nUEMgPSBudWxsOwotICAgIG9m
ZmVyZXJWaWRlb1RyYWNrLmRpc3Bvc2UoKTsKLSAgICBvZmZlcmVyQXVkaW9UcmFjay5kaXNwb3Nl
KCk7Ci0gICAgdmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIHZpZGVvQ2FwdHVyZXIu
ZGlzcG9zZSgpOwotICAgIHZpZGVvU291cmNlLmRpc3Bvc2UoKTsKLSAgICBmYWN0b3J5LmRpc3Bv
c2UoKTsKLSAgICBTeXN0ZW0uZ2MoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgZ2V0
TWV0cmljcygpIHsKLSAgICBNZXRyaWNzIG1ldHJpY3MgPSBNZXRyaWNzLmdldEFuZFJlc2V0KCk7
Ci0gICAgYXNzZXJ0VHJ1ZShtZXRyaWNzLm1hcC5zaXplKCkgPiAwKTsKLSAgICAvLyBUZXN0IGZv
ciBleGFtcGxlIHRoYXQgdGhlIGxpZmV0aW1lIG9mIGEgQ2FsbCBpcyByZWNvcmRlZC4KLSAgICBT
dHJpbmcgbmFtZSA9ICJXZWJSVEMuQ2FsbC5MaWZldGltZUluU2Vjb25kcyI7Ci0gICAgYXNzZXJ0
VHJ1ZShtZXRyaWNzLm1hcC5jb250YWluc0tleShuYW1lKSk7Ci0gICAgSGlzdG9ncmFtSW5mbyBp
bmZvID0gbWV0cmljcy5tYXAuZ2V0KG5hbWUpOwotICAgIGFzc2VydFRydWUoaW5mby5zYW1wbGVz
LnNpemUoKSA+IDApOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzaHV0ZG93blBDKFBl
ZXJDb25uZWN0aW9uIHBjLCBPYnNlcnZlckV4cGVjdGF0aW9ucyBleHBlY3RhdGlvbnMpIHsKLSAg
ICBpZiAoZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsICE9IG51bGwpIHsKLSAgICAgIGV4cGVjdGF0
aW9ucy5kYXRhQ2hhbm5lbC51bnJlZ2lzdGVyT2JzZXJ2ZXIoKTsKLSAgICAgIGV4cGVjdGF0aW9u
cy5kYXRhQ2hhbm5lbC5kaXNwb3NlKCk7Ci0gICAgfQotICAgIGV4cGVjdGF0aW9ucy5leHBlY3RT
dGF0c0NhbGxiYWNrKCk7Ci0gICAgYXNzZXJ0VHJ1ZShwYy5nZXRTdGF0cyhleHBlY3RhdGlvbnMs
IG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKGV4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRp
b25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLSAgICBleHBlY3RhdGlvbnMuZXhw
ZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0xPU0VEKTsKLSAgICBl
eHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkNMT1NFRCk7
Ci0gICAgcGMuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKGV4cGVjdGF0aW9ucy53YWl0Rm9yQWxs
RXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLSAgICBleHBlY3Rh
dGlvbnMuZXhwZWN0U3RhdHNDYWxsYmFjaygpOwotICAgIGFzc2VydFRydWUocGMuZ2V0U3RhdHMo
ZXhwZWN0YXRpb25zLCBudWxsKSk7Ci0gICAgYXNzZXJ0VHJ1ZShleHBlY3RhdGlvbnMud2FpdEZv
ckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0KLSAgICBT
eXN0ZW0ub3V0LnByaW50bG4oIkZZSSBzdGF0czogIik7Ci0gICAgaW50IHJlcG9ydEluZGV4ID0g
LTE7Ci0gICAgZm9yIChTdGF0c1JlcG9ydFtdIHJlcG9ydHMgOiBleHBlY3RhdGlvbnMudGFrZVN0
YXRzUmVwb3J0cygpKSB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiBSZXBvcnQgIyIgKyAo
KytyZXBvcnRJbmRleCkpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXBvcnRzLmxlbmd0
aDsgKytpKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiICAiICsgcmVwb3J0c1tpXS50
b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJlcG9ydElu
ZGV4KTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVuZCBzdGF0cy4iKTsKLQotICAgIHBjLmRp
c3Bvc2UoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgYSBzZXQgb2YgdGhyZWFkIElEcyBiZWxvbmdp
bmcgdG8gdGhpcyBwcm9jZXNzLCBhcyBTdHJpbmdzLgotICBwcml2YXRlIHN0YXRpYyBUcmVlU2V0
PFN0cmluZz4gYWxsVGhyZWFkcygpIHsKLSAgICBUcmVlU2V0PFN0cmluZz4gdGhyZWFkcyA9IG5l
dyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAvLyBUaGlzIHBva2VzIGF0IC9wcm9jIGluc3RlYWQg
b2YgdXNpbmcgdGhlIEphdmEgQVBJcyBiZWNhdXNlIHdlJ3JlIGFsc28KLSAgICAvLyBsb29raW5n
IGZvciBsaWJqaW5nbGUvd2VicnRjIG5hdGl2ZSB0aHJlYWRzLCBtb3N0IG9mIHdoaWNoIHdvbid0
IGhhdmUKLSAgICAvLyBhdHRhY2hlZCB0byB0aGUgSlZNLgotICAgIGZvciAoU3RyaW5nIHRocmVh
ZElkIDogKG5ldyBGaWxlKCIvcHJvYy9zZWxmL3Rhc2siKSkubGlzdCgpKSB7Ci0gICAgICB0aHJl
YWRzLmFkZCh0aHJlYWRJZCk7Ci0gICAgfQotICAgIHJldHVybiB0aHJlYWRzOwotICB9Ci19Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZHRlc3RzL3NyYy9vcmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uVGVzdC5qYXZhCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
dGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb25UZXN0LmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb25UZXN0LmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb24uU2Nh
bGluZ1R5cGUuKjsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5SZW5kZXJlckNvbW1vbi5nZXRE
aXNwbGF5U2l6ZTsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5SZW5kZXJlckNvbW1vbi5nZXRM
YXlvdXRNYXRyaXg7Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb24ucm90
YXRlVGV4dHVyZU1hdHJpeDsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBv
cnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lk1v
cmVBc3NlcnRzOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5T
bWFsbFRlc3Q7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBSZW5kZXJlckNvbW1vblRlc3QgZXh0ZW5k
cyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgQFNtYWxsVGVzdAotICBzdGF0aWMgcHVibGljIHZvaWQg
dGVzdERpc3BsYXlTaXplTm9GcmFtZSgpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDAs
IDApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAwLjBmLCAwLCAwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNU
X0ZJTEwsIDAuMGYsIDAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDAsIDApLCBn
ZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDAuMGYsIDAsIDApKTsKLSAgfQot
Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3REaXNwbGF5U2l6ZURlZ2Vu
ZXJhdGVBc3BlY3RSYXRpbygpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDEyODAsIDcy
MCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDAuMGYsIDEyODAsIDcyMCkpOwot
ICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NB
TEVfQVNQRUNUX0ZJTEwsIDAuMGYsIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcg
UG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCAw
LjBmLCAxMjgwLCA3MjApKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3RaZXJvRGlzcGxheVNpemUoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgw
LCAwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMTYuMGYgLyA5LCAwLCAwKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVf
QVNQRUNUX0ZJTEwsIDE2LjBmIC8gOSwgMCwgMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9p
bnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMTYuMGYgLyA5
LCAwLCAwKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0
RGlzcGxheVNpemVQZXJmZWN0Rml0KCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4
MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMTYuMGYgLyA5LCAxMjgw
LCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3Bs
YXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCAxNi4wZiAvIDksIDEyODAsIDcyMCkpOwotICAgIGFz
c2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQ
RUNUX0JBTEFOQ0VELCAxNi4wZiAvIDksIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhu
ZXcgUG9pbnQoNzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgOS4w
ZiAvIDE2LCA3MjAsIDEyODApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDcyMCwgMTI4
MCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCA5LjBmIC8gMTYsIDcyMCwgMTI4
MCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNp
emUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCA5LjBmIC8gMTYsIDcyMCwgMTI4MCkpOwotICB9Ci0K
LSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdExhbmRzY2FwZVZpZGVvSW5Q
b3J0cmFpdERpc3BsYXkoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDQwNSks
IGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDE2LjBmIC8gOSwgNzIwLCAxMjgwKSk7
Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDEyODApLCBnZXREaXNwbGF5U2l6ZShT
Q0FMRV9BU1BFQ1RfRklMTCwgMTYuMGYgLyA5LCA3MjAsIDEyODApKTsKLSAgICBhc3NlcnRFcXVh
bHMobmV3IFBvaW50KDcyMCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFO
Q0VELCAxNi4wZiAvIDksIDcyMCwgMTI4MCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJs
aWMgc3RhdGljIHZvaWQgdGVzdFBvcnRyYWl0VmlkZW9JbkxhbmRzY2FwZURpc3BsYXkoKSB7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg0MDUsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxF
X0FTUEVDVF9GSVQsIDkuMGYgLyAxNiwgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5l
dyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgOS4w
ZiAvIDE2LCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDcyMCwgNzIw
KSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCA5LjBmIC8gMTYsIDEyODAs
IDcyMCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEZv
dXJUb1RocmVlVmlkZW9JblNpeHRlZW5Ub05pbmVEaXNwbGF5KCkgewotICAgIGFzc2VydEVxdWFs
cyhuZXcgUG9pbnQoOTYwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCA0
LjBmIC8gMywgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3
MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgNC4wZiAvIDMsIDEyODAsIDcy
MCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNp
emUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCA0LjBmIC8gMywgMTI4MCwgNzIwKSk7Ci0gIH0KLQot
ICAvLyBPbmx5IGtlZXAgMiByb3VuZGVkIGRlY2ltYWxzIHRvIG1ha2UgZmxvYXQgY29tcGFyaXNv
biByb2J1c3QuCi0gIHByaXZhdGUgc3RhdGljIGRvdWJsZVtdIHJvdW5kKGZsb2F0W10gYXJyYXkp
IHsKLSAgICBhc3NlcnRFcXVhbHMoMTYsIGFycmF5Lmxlbmd0aCk7Ci0gICAgZmluYWwgZG91Ymxl
W10gZG91YmxlQXJyYXkgPSBuZXcgZG91YmxlWzE2XTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDE2OyArK2kpIHsKLSAgICAgIGRvdWJsZUFycmF5W2ldID0gTWF0aC5yb3VuZCgxMDAgKiBhcnJh
eVtpXSkgLyAxMDAuMDsKLSAgICB9Ci0gICAgcmV0dXJuIGRvdWJsZUFycmF5OwotICB9Ci0KLSAg
Ly8gQnJpZWYgc3VtbWFyeSBhYm91dCBtYXRyaXggdHJhbnNmb3JtYXRpb25zOgotICAvLyBBIGNv
b3JkaW5hdGUgcCA9IFt1LCB2LCAwLCAxXSBpcyB0cmFuc2Zvcm1lZCBieSBtYXRyaXggbSBsaWtl
IHRoaXMgcCcgPSBbdScsIHYnLCAwLCAxXSA9IG0gKiBwLgotICAvLyBPcGVuR0wgdXNlcyBjb2x1
bW4tbWFqb3Igb3JkZXIsIHNvOgotICAvLyB1JyA9IHUgKiBtWzBdICsgdiAqIG1bNF0gKyBtWzEy
XS4KLSAgLy8gdicgPSB1ICogbVsxXSArIHYgKiBtWzVdICsgbVsxM10uCi0KLSAgQFNtYWxsVGVz
dAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdExheW91dE1hdHJpeERlZmF1bHQoKSB7Ci0gICAg
ZmluYWwgZmxvYXQgbGF5b3V0TWF0cml4W10gPSBnZXRMYXlvdXRNYXRyaXgoZmFsc2UsIDEuMGYs
IDEuMGYpOwotICAgIC8vIEFzc2VydDoKLSAgICAvLyB1JyA9IHUuCi0gICAgLy8gdicgPSB2Lgot
ICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBNb3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMobmV3
IGRvdWJsZVtdIHsKLSAgICAgICAgMSwgMCwgMCwgMCwKLSAgICAgICAgMCwgMSwgMCwgMCwKLSAg
ICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgMCwgMCwgMCwgMX0sIHJvdW5kKGxheW91dE1hdHJp
eCkpOwotICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJs
aWMgc3RhdGljIHZvaWQgdGVzdExheW91dE1hdHJpeE1pcnJvcigpIHsKLSAgICBmaW5hbCBmbG9h
dCBsYXlvdXRNYXRyaXhbXSA9IGdldExheW91dE1hdHJpeCh0cnVlLCAxLjBmLCAxLjBmKTsKLSAg
ICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSAxIC0gdS4KLSAgICAvLyB2JyA9IHYuCi0gICAgLy8g
Y2xhbmctZm9ybWF0IG9mZgotICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFscyhuZXcgZG91Ymxl
W10gewotICAgICAgICAtMSwgMCwgMCwgMCwKLSAgICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAg
ICAwLCAwLCAxLCAwLAotICAgICAgICAgMSwgMCwgMCwgMX0sIHJvdW5kKGxheW91dE1hdHJpeCkp
OwotICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMg
c3RhdGljIHZvaWQgdGVzdExheW91dE1hdHJpeFNjYWxlKCkgewotICAgIC8vIFZpZGVvIGhhcyBh
c3BlY3QgcmF0aW8gMiwgYnV0IGxheW91dCBpcyBzcXVhcmUuIFRoaXMgd2lsbCBjYXVzZSBvbmx5
IHRoZSBjZW50ZXIgcGFydCBvZiB0aGUKLSAgICAvLyB2aWRlbyB0byBiZSB2aXNpYmxlLCBpLmUu
IHRoZSB1IGNvb3JkaW5hdGUgd2lsbCBnbyBmcm9tIDAuMjUgdG8gMC43NSBpbnN0ZWFkIG9mIGZy
b20gMCB0byAxLgotICAgIGZpbmFsIGZsb2F0IGxheW91dE1hdHJpeFtdID0gZ2V0TGF5b3V0TWF0
cml4KGZhbHNlLCAyLjBmLCAxLjBmKTsKLSAgICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSAwLjI1
ICsgMC41IHUuCi0gICAgLy8gdicgPSB2LgotICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBN
b3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMobmV3IGRvdWJsZVtdIHsKLSAgICAgICAgIDAuNSwgMCwg
MCwgMCwKLSAgICAgICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgICAgMCwgMCwgMSwgMCwKLSAg
ICAgICAgMC4yNSwgMCwgMCwgMX0sIHJvdW5kKGxheW91dE1hdHJpeCkpOwotICAgIC8vIGNsYW5n
LWZvcm1hdCBvbgotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVz
dFJvdGF0ZVRleHR1cmVNYXRyaXhEZWZhdWx0KCkgewotICAgIC8vIFRlc3QgdGhhdCByb3RhdGlv
biB3aXRoIDAgZGVncmVlcyByZXR1cm5zIGFuIGlkZW50aWNhbCBtYXRyaXguCi0gICAgLy8gY2xh
bmctZm9ybWF0IG9mZgotICAgIGZpbmFsIGZsb2F0W10gbWF0cml4ID0gbmV3IGZsb2F0W10gewot
ICAgICAgICAxLCAyLCAzLCA0LAotICAgICAgICA1LCA2LCA3LCA4LAotICAgICAgICA5LCAwLCAx
LCAyLAotICAgICAgICAzLCA0LCA1LCA2Ci0gICAgfTsKLSAgICAvLyBjbGFuZy1mb3JtYXQgb24K
LSAgICBmaW5hbCBmbG9hdCByb3RhdGVkTWF0cml4W10gPSByb3RhdGVUZXh0dXJlTWF0cml4KG1h
dHJpeCwgMCk7Ci0gICAgTW9yZUFzc2VydHMuYXNzZXJ0RXF1YWxzKHJvdW5kKG1hdHJpeCksIHJv
dW5kKHJvdGF0ZWRNYXRyaXgpKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRp
YyB2b2lkIHRlc3RSb3RhdGVUZXh0dXJlTWF0cml4OTBEZWcoKSB7Ci0gICAgZmluYWwgZmxvYXQg
c2FtcGxpbmdNYXRyaXhbXSA9IHJvdGF0ZVRleHR1cmVNYXRyaXgoUmVuZGVyZXJDb21tb24uaWRl
bnRpdHlNYXRyaXgoKSwgOTApOwotICAgIC8vIEFzc2VydDoKLSAgICAvLyB1JyA9IDEgLSB2Lgot
ICAgIC8vIHYnID0gdS4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgTW9yZUFzc2VydHMu
YXNzZXJ0RXF1YWxzKG5ldyBkb3VibGVbXSB7Ci0gICAgICAgICAwLCAxLCAwLCAwLAotICAgICAg
ICAtMSwgMCwgMCwgMCwKLSAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAxLCAwLCAwLCAx
fSwgcm91bmQoc2FtcGxpbmdNYXRyaXgpKTsKLSAgICAvLyBjbGFuZy1mb3JtYXQgb24KLSAgfQot
Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RSb3RhdGVUZXh0dXJlTWF0
cml4MTgwRGVnKCkgewotICAgIGZpbmFsIGZsb2F0IHNhbXBsaW5nTWF0cml4W10gPSByb3RhdGVU
ZXh0dXJlTWF0cml4KFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCksIDE4MCk7Ci0gICAg
Ly8gQXNzZXJ0OgotICAgIC8vIHUnID0gMSAtIHUuCi0gICAgLy8gdicgPSAxIC0gdi4KLSAgICAv
LyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgTW9yZUFzc2VydHMuYXNzZXJ0RXF1YWxzKG5ldyBkb3Vi
bGVbXSB7Ci0gICAgICAgIC0xLCAgMCwgMCwgMCwKLSAgICAgICAgIDAsIC0xLCAwLCAwLAotICAg
ICAgICAgMCwgIDAsIDEsIDAsCi0gICAgICAgICAxLCAgMSwgMCwgMX0sIHJvdW5kKHNhbXBsaW5n
TWF0cml4KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29y
Zy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9z
cmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlclRlc3QuamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlclRlc3QuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDQ4OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotcGFja2Fn
ZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsK
LWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1D
bG9jazsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9ydCBhbmRy
b2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRy
b2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotCi1pbXBvcnQgamF2
YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25M
YXRjaDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdCBleHRl
bmRzIEFjdGl2aXR5VGVzdENhc2UgewotICAvKioKLSAgICogTW9jayB0ZXh0dXJlIGxpc3RlbmVy
IHdpdGggYmxvY2tpbmcgd2FpdCBmdW5jdGlvbmFsaXR5LgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBmaW5hbCBjbGFzcyBNb2NrVGV4dHVyZUxpc3RlbmVyCi0gICAgICBpbXBsZW1lbnRzIFN1cmZh
Y2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgewotICAgIHB1
YmxpYyBpbnQgb2VzVGV4dHVyZUlkOwotICAgIHB1YmxpYyBmbG9hdFtdIHRyYW5zZm9ybU1hdHJp
eDsKLSAgICBwcml2YXRlIGJvb2xlYW4gaGFzTmV3RnJhbWUgPSBmYWxzZTsKLSAgICAvLyBUaHJl
YWQgd2hlcmUgZnJhbWVzIGFyZSBleHBlY3RlZCB0byBiZSByZWNlaXZlZCBvbi4KLSAgICBwcml2
YXRlIGZpbmFsIFRocmVhZCBleHBlY3RlZFRocmVhZDsKLQotICAgIE1vY2tUZXh0dXJlTGlzdGVu
ZXIoKSB7Ci0gICAgICB0aGlzLmV4cGVjdGVkVGhyZWFkID0gbnVsbDsKLSAgICB9Ci0KLSAgICBN
b2NrVGV4dHVyZUxpc3RlbmVyKFRocmVhZCBleHBlY3RlZFRocmVhZCkgewotICAgICAgdGhpcy5l
eHBlY3RlZFRocmVhZCA9IGV4cGVjdGVkVGhyZWFkOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAg
ICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGlt
ZXN0YW1wTnMpIHsKLSAgICAgIGlmIChleHBlY3RlZFRocmVhZCAhPSBudWxsICYmIFRocmVhZC5j
dXJyZW50VGhyZWFkKCkgIT0gZXhwZWN0ZWRUaHJlYWQpIHsKLSAgICAgICAgdGhyb3cgbmV3IEls
bGVnYWxTdGF0ZUV4Y2VwdGlvbigib25UZXh0dXJlRnJhbWVBdmFpbGFibGUgY2FsbGVkIG9uIHdy
b25nIHRocmVhZC4iKTsKLSAgICAgIH0KLSAgICAgIHRoaXMub2VzVGV4dHVyZUlkID0gb2VzVGV4
dHVyZUlkOwotICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0cmFuc2Zvcm1NYXRyaXg7Ci0g
ICAgICBoYXNOZXdGcmFtZSA9IHRydWU7Ci0gICAgICBub3RpZnlBbGwoKTsKLSAgICB9Ci0KLSAg
ICAvKioKLSAgICAgKiBXYWl0IGluZGVmaW5pdGVseSBmb3IgYSBuZXcgZnJhbWUuCi0gICAgICov
Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdhaXRGb3JOZXdGcmFtZSgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICB3aGlsZSAoIWhhc05ld0ZyYW1lKSB7Ci0gICAg
ICAgIHdhaXQoKTsKLSAgICAgIH0KLSAgICAgIGhhc05ld0ZyYW1lID0gZmFsc2U7Ci0gICAgfQot
Ci0gICAgLyoqCi0gICAgICogV2FpdCBmb3IgYSBuZXcgZnJhbWUsIG9yIHVudGlsIHRoZSBzcGVj
aWZpZWQgdGltZW91dCBlbGFwc2VzLiBSZXR1cm5zIHRydWUgaWYgYSBuZXcgZnJhbWUgd2FzCi0g
ICAgICogcmVjZWl2ZWQgYmVmb3JlIHRoZSB0aW1lb3V0LgotICAgICAqLwotICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgYm9vbGVhbiB3YWl0Rm9yTmV3RnJhbWUoZmluYWwgbG9uZyB0aW1lb3V0TXMp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBmaW5hbCBsb25nIHN0YXJ0VGlt
ZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICBsb25nIHRpbWVSZW1h
aW5pbmdNcyA9IHRpbWVvdXRNczsKLSAgICAgIHdoaWxlICghaGFzTmV3RnJhbWUgJiYgdGltZVJl
bWFpbmluZ01zID4gMCkgewotICAgICAgICB3YWl0KHRpbWVSZW1haW5pbmdNcyk7Ci0gICAgICAg
IGZpbmFsIGxvbmcgZWxhcHNlZFRpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgp
IC0gc3RhcnRUaW1lTXM7Ci0gICAgICAgIHRpbWVSZW1haW5pbmdNcyA9IHRpbWVvdXRNcyAtIGVs
YXBzZWRUaW1lTXM7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBib29sZWFuIGRpZFJlY2VpdmVGcmFt
ZSA9IGhhc05ld0ZyYW1lOwotICAgICAgaGFzTmV3RnJhbWUgPSBmYWxzZTsKLSAgICAgIHJldHVy
biBkaWRSZWNlaXZlRnJhbWU7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEFzc2VydCB0aGF0IHR3byBp
bnRlZ2VycyBhcmUgY2xvc2UsIHdpdGggZGlmZmVyZW5jZSBhdCBtb3N0Ci0gICAqIHtAY29kZSB0
aHJlc2hvbGR9LiAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgYXNzZXJ0Q2xvc2UoaW50IHRocmVz
aG9sZCwgaW50IGV4cGVjdGVkLCBpbnQgYWN0dWFsKSB7Ci0gICAgaWYgKE1hdGguYWJzKGV4cGVj
dGVkIC0gYWN0dWFsKSA8PSB0aHJlc2hvbGQpCi0gICAgICByZXR1cm47Ci0gICAgZmFpbE5vdEVx
dWFscygiTm90IGNsb3NlIGVub3VnaCwgdGhyZXNob2xkICIgKyB0aHJlc2hvbGQsIGV4cGVjdGVk
LCBhY3R1YWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qgbm9ybWFsIHVzZSBieSByZWNlaXZp
bmcgdGhyZWUgdW5pZm9ybSB0ZXh0dXJlIGZyYW1lcy4gVGV4dHVyZSBmcmFtZXMgYXJlIHJldHVy
bmVkIGFzIGVhcmx5Ci0gICAqIGFzIHBvc3NpYmxlLiBUaGUgdGV4dHVyZSBwaXhlbCB2YWx1ZXMg
YXJlIGluc3BlY3RlZCBieSBkcmF3aW5nIHRoZSB0ZXh0dXJlIGZyYW1lIHRvIGEgcGl4ZWwKLSAg
ICogYnVmZmVyIGFuZCByZWFkaW5nIGl0IGJhY2sgd2l0aCBnbFJlYWRQaXhlbHMoKS4KLSAgICov
Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0VGhyZWVDb25zdGFudENv
bG9yRnJhbWVzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQg
d2lkdGggPSAxNjsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gMTY7Ci0gICAgLy8gQ3JlYXRlIEVH
TCBiYXNlIHdpdGggYSBwaXhlbCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAgZmluYWwg
RWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUElY
RUxfQlVGRkVSKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKHdpZHRoLCBoZWln
aHQpOwotICAgIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7
Ci0KLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgYW5kIGxpc3RlbmVyLgotICAg
IGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0gU3VyZmFj
ZVRleHR1cmVIZWxwZXIuY3JlYXRlKAotICAgICAgICAiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVz
dCIgLyogdGhyZWFkTmFtZSAqLywgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAgICBm
aW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVu
ZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKS5zZXREZWZhdWx0
QnVmZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZXMgZm9y
IHN0dWJiaW5nIGFuIE9FUyB0ZXh0dXJlIHByb2R1Y2VyLiB8ZWdsT2VzQmFzZXwgaGFzIHRoZSBT
dXJmYWNlVGV4dHVyZSBpbgotICAgIC8vIHxzdXJmYWNlVGV4dHVyZUhlbHBlcnwgYXMgdGhlIHRh
cmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsT2VzQmFzZSA9IEVnbEJhc2Uu
Y3JlYXRlKGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgRWdsQmFzZS5DT05GSUdfUExBSU4p
OwotICAgIGVnbE9lc0Jhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRT
dXJmYWNlVGV4dHVyZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsT2VzQmFzZS5zdXJmYWNlV2lk
dGgoKSwgd2lkdGgpOwotICAgIGFzc2VydEVxdWFscyhlZ2xPZXNCYXNlLnN1cmZhY2VIZWlnaHQo
KSwgaGVpZ2h0KTsKLQotICAgIGZpbmFsIGludCByZWRbXSA9IG5ldyBpbnRbXSB7NzksIDE0NCwg
MTg1fTsKLSAgICBmaW5hbCBpbnQgZ3JlZW5bXSA9IG5ldyBpbnRbXSB7NjYsIDIxMCwgMTYyfTsK
LSAgICBmaW5hbCBpbnQgYmx1ZVtdID0gbmV3IGludFtdIHsxNjEsIDExNywgMTU4fTsKLSAgICAv
LyBEcmF3IHRocmVlIGZyYW1lcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewot
ICAgICAgLy8gRHJhdyBhIGNvbnN0YW50IGNvbG9yIGZyYW1lIG9udG8gdGhlIFN1cmZhY2VUZXh0
dXJlLgotICAgICAgZWdsT2VzQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgR0xFUzIwLmdsQ2xl
YXJDb2xvcihyZWRbaV0gLyAyNTUuMGYsIGdyZWVuW2ldIC8gMjU1LjBmLCBibHVlW2ldIC8gMjU1
LjBmLCAxLjBmKTsKLSAgICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJf
QklUKTsKLSAgICAgIC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25U
ZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICAgIGVnbE9lc0Jhc2Uuc3dhcEJ1ZmZlcnMoKTsK
LQotICAgICAgLy8gV2FpdCBmb3IgYW4gT0VTIHRleHR1cmUgdG8gYXJyaXZlIGFuZCBkcmF3IGl0
IG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICAgIGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSgp
OwotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgZHJhd2VyLmRyYXdPZXMoCi0g
ICAgICAgICAgbGlzdGVuZXIub2VzVGV4dHVyZUlkLCBsaXN0ZW5lci50cmFuc2Zvcm1NYXRyaXgs
IHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgICAgLy8gRG93bmxvYWQgdGhl
IHBpeGVscyBpbiB0aGUgcGl4ZWwgYnVmZmVyIGFzIFJHQkEuIE5vdCBhbGwgcGxhdGZvcm1zIHN1
cHBvcnQgUkdCLCBlLmcuCi0gICAgICAvLyBOZXh1cyA5LgotICAgICAgZmluYWwgQnl0ZUJ1ZmZl
ciByZ2JhRGF0YSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qod2lkdGggKiBoZWlnaHQgKiA0
KTsKLSAgICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgR0xFUzIw
LkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JhRGF0YSk7Ci0gICAgICBHbFV0
aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIpOwotCi0gICAgICAvLyBBc3NlcnQg
cmVuZGVyZWQgaW1hZ2UgaXMgZXhwZWN0ZWQgY29uc3RhbnQgY29sb3IuCi0gICAgICB3aGlsZSAo
cmdiYURhdGEuaGFzUmVtYWluaW5nKCkpIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRh
LmdldCgpICYgMHhGRiwgcmVkW2ldKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdl
dCgpICYgMHhGRiwgZ3JlZW5baV0pOwotICAgICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0
KCkgJiAweEZGLCBibHVlW2ldKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgp
ICYgMHhGRiwgMjU1KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBkcmF3ZXIucmVsZWFzZSgpOwot
ICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2Uo
KTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IGRpc3Bvc2luZyB0aGUgU3VyZmFjZVRleHR1cmVI
ZWxwZXIgd2hpbGUgaG9sZGluZyBhIHBlbmRpbmcgdGV4dHVyZSBmcmFtZS4gVGhlIHBlbmRpbmcK
LSAgICogdGV4dHVyZSBmcmFtZSBzaG91bGQgc3RpbGwgYmUgdmFsaWQsIGFuZCB0aGlzIGlzIHRl
c3RlZCBieSBkcmF3aW5nIHRoZSB0ZXh0dXJlIGZyYW1lIHRvIGEgcGl4ZWwKLSAgICogYnVmZmVy
IGFuZCByZWFkaW5nIGl0IGJhY2sgd2l0aCBnbFJlYWRQaXhlbHMoKS4KLSAgICovCi0gIEBNZWRp
dW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGF0ZVJldHVybkZyYW1lKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSAxNjsKLSAgICBm
aW5hbCBpbnQgaGVpZ2h0ID0gMTY7Ci0gICAgLy8gQ3JlYXRlIEVHTCBiYXNlIHdpdGggYSBwaXhl
bCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0g
RWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICBl
Z2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gQ3Jl
YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBTdXJmYWNl
VGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VUZXh0dXJlSGVscGVy
LmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVhZE5h
bWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgZmluYWwgTW9ja1RleHR1
cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkuc2V0RGVmYXVsdEJ1ZmZlclNpemUod2lk
dGgsIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2VzIGZvciBzdHViYmluZyBhbiBP
RVMgdGV4dHVyZSBwcm9kdWNlci4gfGVnbE9lc0Jhc2V8IGhhcyB0aGUgU3VyZmFjZVRleHR1cmUg
aW4KLSAgICAvLyB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8IGFzIHRoZSB0YXJnZXQgRUdMU3VyZmFj
ZS4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbE9lc0Jhc2UgPSBFZ2xCYXNlLmNyZWF0ZShlZ2xCYXNl
LmdldEVnbEJhc2VDb250ZXh0KCksIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBlZ2xPZXNC
YXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbE9lc0Jhc2Uuc3VyZmFjZVdpZHRoKCksIHdpZHRoKTsK
LSAgICBhc3NlcnRFcXVhbHMoZWdsT2VzQmFzZS5zdXJmYWNlSGVpZ2h0KCksIGhlaWdodCk7Ci0K
LSAgICBmaW5hbCBpbnQgcmVkID0gNzk7Ci0gICAgZmluYWwgaW50IGdyZWVuID0gNjY7Ci0gICAg
ZmluYWwgaW50IGJsdWUgPSAxNjE7Ci0gICAgLy8gRHJhdyBhIGNvbnN0YW50IGNvbG9yIGZyYW1l
IG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgIGVnbE9lc0Jhc2UubWFrZUN1cnJlbnQoKTsK
LSAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKHJlZCAvIDI1NS4wZiwgZ3JlZW4gLyAyNTUuMGYsIGJs
dWUgLyAyNTUuMGYsIDEuMGYpOwotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9C
VUZGRVJfQklUKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHdpbGwgdWx0aW1hdGVseSB0cmlnZ2Vy
IG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAgZWdsT2VzQmFzZS5zd2FwQnVmZmVycygp
OwotICAgIGVnbE9lc0Jhc2UucmVsZWFzZSgpOwotCi0gICAgLy8gV2FpdCBmb3IgT0VTIHRleHR1
cmUgZnJhbWUuCi0gICAgbGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKCk7Ci0gICAgLy8gRGljb25u
ZWN0IHdoaWxlIGhvbGRpbmcgdGhlIGZyYW1lLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRp
c3Bvc2UoKTsKLQotICAgIC8vIERyYXcgdGhlIHBlbmRpbmcgdGV4dHVyZSBmcmFtZSBvbnRvIHRo
ZSBwaXhlbCBidWZmZXIuCi0gICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIGZpbmFsIEds
UmVjdERyYXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdP
ZXMoCi0gICAgICAgIGxpc3RlbmVyLm9lc1RleHR1cmVJZCwgbGlzdGVuZXIudHJhbnNmb3JtTWF0
cml4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBkcmF3ZXIucmVs
ZWFzZSgpOwotCi0gICAgLy8gRG93bmxvYWQgdGhlIHBpeGVscyBpbiB0aGUgcGl4ZWwgYnVmZmVy
IGFzIFJHQkEuIE5vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgUkdCLCBlLmcuIE5leHVzIDkuCi0g
ICAgZmluYWwgQnl0ZUJ1ZmZlciByZ2JhRGF0YSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qo
d2lkdGggKiBoZWlnaHQgKiA0KTsKLSAgICBHTEVTMjAuZ2xSZWFkUGl4ZWxzKDAsIDAsIHdpZHRo
LCBoZWlnaHQsIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgcmdiYURh
dGEpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xSZWFkUGl4ZWxzIik7Ci0gICAg
ZWdsQmFzZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBBc3NlcnQgcmVuZGVyZWQgaW1hZ2UgaXMgZXhw
ZWN0ZWQgY29uc3RhbnQgY29sb3IuCi0gICAgd2hpbGUgKHJnYmFEYXRhLmhhc1JlbWFpbmluZygp
KSB7Ci0gICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCByZWQpOwotICAg
ICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgZ3JlZW4pOwotICAgICAgYXNz
ZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgYmx1ZSk7Ci0gICAgICBhc3NlcnRFcXVh
bHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCAyNTUpOwotICAgIH0KLSAgICAvLyBMYXRlIGZyYW1l
IHJldHVybiBhZnRlciBldmVyeXRoaW5nIGhhcyBiZWVuIGRpc3Bvc2VkIGFuZCByZWxlYXNlZC4K
LSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgfQotCi0g
IC8qKgotICAgKiBUZXN0IGRpc3Bvc2luZyB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIsIGJ1dCBr
ZWVwIHRyeWluZyB0byBwcm9kdWNlIG1vcmUgdGV4dHVyZSBmcmFtZXMuIE5vCi0gICAqIGZyYW1l
cyBzaG91bGQgYmUgZGVsaXZlcmVkIHRvIHRoZSBsaXN0ZW5lci4KLSAgICovCi0gIEBNZWRpdW1U
ZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0RGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgLy8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0
ZW5lci4KLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBl
ciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVI
ZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0gICAgZmluYWwgTW9ja1RleHR1
cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAgIC8vIENyZWF0
ZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJlIGFzIHRhcmdldCBFR0xTdXJmYWNlLgot
ICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2Uu
Q09ORklHX1BMQUlOKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVI
ZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwot
ICAgIC8vIEFzc2VydCBubyBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQuCi0gICAgYXNzZXJ0
RmFsc2UobGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKDEpKTsKLSAgICAvLyBEcmF3IGFuZCB3YWl0
IGZvciBvbmUgZnJhbWUuCi0gICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZF
Ul9CSVQpOwotICAgIC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25U
ZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAg
bGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0
dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAvLyBEaXNwb3NlIC0gd2Ugc2hvdWxkIG5vdCByZWNl
aXZlIGFueSB0ZXh0dXJlcyBhZnRlciB0aGlzLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRp
c3Bvc2UoKTsKLQotICAgIC8vIERyYXcgb25lIGZyYW1lLgotICAgIEdMRVMyMC5nbENsZWFyKEdM
RVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0g
ICAgLy8gc3dhcEJ1ZmZlcnMoKSBzaG91bGQgbm90IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFp
bGFibGUoKSBiZWNhdXNlIGRpc3Bvc2VkIGhhcyBiZWVuIGNhbGxlZC4KLSAgICAvLyBBc3NlcnQg
dGhhdCBubyBPRVMgdGV4dHVyZSB3YXMgZGVsaXZlcmVkLgotICAgIGFzc2VydEZhbHNlKGxpc3Rl
bmVyLndhaXRGb3JOZXdGcmFtZSg1MDApKTsKLQotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9
Ci0KLSAgLyoqCi0gICAqIFRlc3QgZGlzcG9zaW5nIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBp
bW1lZGlhdGVseSBhZnRlciBpcyBoYXMgYmVlbiBzZXR1cCB0byB1c2UgYQotICAgKiBzaGFyZWQg
Y29udGV4dC4gTm8gZnJhbWVzIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8gdGhlIGxpc3RlbmVyLgot
ICAgKi8KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdERpc3Bvc2VJbW1l
ZGlhdGVseSgpIHsKLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVy
ZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRl
eHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0gICAgc3VyZmFjZVRl
eHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGwgc3RvcExpc3Rl
bmluZygpLCBidXQga2VlcCB0cnlpbmcgdG8gcHJvZHVjZSBtb3JlIHRleHR1cmUgZnJhbWVzLiBO
byBmcmFtZXMgc2hvdWxkIGJlCi0gICAqIGRlbGl2ZXJlZCB0byB0aGUgbGlzdGVuZXIuCi0gICAq
LwotICBATWVkaXVtVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFN0b3BMaXN0ZW5pbmco
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4
dHVyZUhlbHBlciBhbmQgbGlzdGVuZXIuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIg
c3VyZmFjZVRleHR1cmVIZWxwZXIgPQotICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVh
dGUoIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwot
ICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVM
aXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3Rl
bmVyKTsKLSAgICAvLyBDcmVhdGUgRWdsQmFzZSB3aXRoIHRoZSBTdXJmYWNlVGV4dHVyZSBhcyB0
YXJnZXQgRUdMU3VyZmFjZS4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNy
ZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7Ci0gICAgZWdsQmFzZS5jcmVhdGVTdXJm
YWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGVnbEJh
c2UubWFrZUN1cnJlbnQoKTsKLSAgICAvLyBBc3NlcnQgbm8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2
ZWQgeWV0LgotICAgIGFzc2VydEZhbHNlKGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSgxKSk7Ci0g
ICAgLy8gRHJhdyBhbmQgd2FpdCBmb3Igb25lIGZyYW1lLgotICAgIEdMRVMyMC5nbENsZWFyKEdM
RVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHdpbGwgdWx0
aW1hdGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAgZWdsQmFzZS5z
d2FwQnVmZmVycygpOwotICAgIGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSgpOwotICAgIHN1cmZh
Y2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotCi0gICAgLy8gU3RvcCBsaXN0
ZW5pbmcgLSB3ZSBzaG91bGQgbm90IHJlY2VpdmUgYW55IHRleHR1cmVzIGFmdGVyIHRoaXMuCi0g
ICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotCi0gICAgLy8gRHJhdyBv
bmUgZnJhbWUuCi0gICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQp
OwotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHNob3Vs
ZCBub3QgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGJlY2F1c2UgZGlzcG9zZWQg
aGFzIGJlZW4gY2FsbGVkLgotICAgIC8vIEFzc2VydCB0aGF0IG5vIE9FUyB0ZXh0dXJlIHdhcyBk
ZWxpdmVyZWQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKDUwMCkp
OwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVs
ZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qgc3RvcExpc3RlbmluZygpIGltbWVkaWF0
ZWx5IGFmdGVyIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBoYXMgYmVlbiBzZXR1cC4KLSAgICov
Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RTdG9wTGlzdGVuaW5nSW1t
ZWRpYXRlbHkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIFN1cmZh
Y2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRl
eHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWRO
YW1lICovLCBudWxsKTsKLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0g
bmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFy
dExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3Rl
bmluZygpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8q
KgotICAgKiBUZXN0IHN0b3BMaXN0ZW5pbmcoKSBpbW1lZGlhdGVseSBhZnRlciB0aGUgU3VyZmFj
ZVRleHR1cmVIZWxwZXIgaGFzIGJlZW4gc2V0dXAgb24gdGhlIGhhbmRsZXIKLSAgICogdGhyZWFk
LgotICAgKi8KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFN0b3BMaXN0
ZW5pbmdJbW1lZGlhdGVseU9uSGFuZGxlclRocmVhZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxw
ZXIgPQotICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoIlN1cmZhY2VUZXh0dXJl
SGVscGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwotICAgIGZpbmFsIE1vY2tUZXh0
dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotCi0gICAg
ZmluYWwgQ291bnREb3duTGF0Y2ggc3RvcExpc3RlbmluZ0JhcnJpZXIgPSBuZXcgQ291bnREb3du
TGF0Y2goMSk7Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggc3RvcExpc3RlbmluZ0JhcnJpZXJE
b25lID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIC8vIFN0YXJ0IGJ5IHBvc3RpbmcgdG8g
dGhlIGhhbmRsZXIgdGhyZWFkIHRvIGtlZXAgaXQgb2NjdXBpZWQuCi0gICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIFRocmVhZFV0aWxzLmF3YWl0
VW5pbnRlcnJ1cHRpYmx5KHN0b3BMaXN0ZW5pbmdCYXJyaWVyKTsKLSAgICAgICAgc3VyZmFjZVRl
eHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotICAgICAgICBzdG9wTGlzdGVuaW5nQmFycmll
ckRvbmUuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICAvLyBzdGFydExpc3Rl
bmluZygpIGlzIGFzeW5jaHJvbm91cyBhbmQgd2lsbCBwb3N0IHRvIHRoZSBvY2N1cGllZCBoYW5k
bGVyIHRocmVhZC4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0
ZW5lcik7Ci0gICAgLy8gV2FpdCBmb3Igc3RvcExpc3RlbmluZygpIHRvIGJlIGNhbGxlZCBvbiB0
aGUgaGFuZGxlciB0aHJlYWQuCi0gICAgc3RvcExpc3RlbmluZ0JhcnJpZXIuY291bnREb3duKCk7
Ci0gICAgc3RvcExpc3RlbmluZ0JhcnJpZXJEb25lLmF3YWl0KCk7Ci0gICAgLy8gV2FpdCB1bnRp
bCBoYW5kbGVyIHRocmVhZCBpcyBpZGxlIHRvIHRyeSB0byBjYXRjaCBsYXRlIHN0YXJ0TGlzdGVu
aW5nKCkgY2FsbC4KLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBiYXJyaWVyID0gbmV3IENvdW50
RG93bkxhdGNoKDEpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKS5wb3N0
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0pOwotICAg
IFRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5KGJhcnJpZXIpOwotICAgIC8vIFByZXZp
b3VzIHN0YXJ0TGlzdGVuaW5nKCkgY2FsbCBzaG91bGQgbmV2ZXIgaGF2ZSB0YWtlbiBwbGFjZSBh
bmQgaXQgc2hvdWxkIGJlIG9rIHRvIGNhbGwgaXQKLSAgICAvLyBhZ2Fpbi4KLSAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0KLSAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBjYWxsaW5nIHN0
YXJ0TGlzdGVuaW5nKCkgd2l0aCBhIG5ldyBsaXN0ZW5lciBhZnRlciBzdG9wTGlzdGVuaW5nKCkg
aGFzIGJlZW4gY2FsbGVkLgotICAgKi8KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3RSZXN0YXJ0TGlzdGVuaW5nV2l0aE5ld0xpc3RlbmVyKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgYW5kIGxp
c3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVs
cGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVy
ZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxsKTsKLSAgICBmaW5hbCBNb2NrVGV4
dHVyZUxpc3RlbmVyIGxpc3RlbmVyMSA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAg
c3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIxKTsKLSAgICAvLyBD
cmVhdGUgRWdsQmFzZSB3aXRoIHRoZSBTdXJmYWNlVGV4dHVyZSBhcyB0YXJnZXQgRUdMU3VyZmFj
ZS4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xC
YXNlLkNPTkZJR19QTEFJTik7Ci0gICAgZWdsQmFzZS5jcmVhdGVTdXJmYWNlKHN1cmZhY2VUZXh0
dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGVnbEJhc2UubWFrZUN1cnJlbnQo
KTsKLSAgICAvLyBBc3NlcnQgbm8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LgotICAgIGFz
c2VydEZhbHNlKGxpc3RlbmVyMS53YWl0Rm9yTmV3RnJhbWUoMSkpOwotICAgIC8vIERyYXcgYW5k
IHdhaXQgZm9yIG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dl
ciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsK
LSAgICBsaXN0ZW5lcjEud2FpdEZvck5ld0ZyYW1lKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxw
ZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAvLyBTdG9wIGxpc3RlbmluZyAtIHxsaXN0
ZW5lcjF8IHNob3VsZCBub3QgcmVjZWl2ZSBhbnkgdGV4dHVyZXMgYWZ0ZXIgdGhpcy4KLSAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0KLSAgICAvLyBDb25uZWN0IGRp
ZmZlcmVudCBsaXN0ZW5lci4KLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVy
MiA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
c3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIyKTsKLSAgICAvLyBBc3NlcnQgbm8gZnJhbWUgaGFzIGJl
ZW4gcmVjZWl2ZWQgeWV0LgotICAgIGFzc2VydEZhbHNlKGxpc3RlbmVyMi53YWl0Rm9yTmV3RnJh
bWUoMSkpOwotCi0gICAgLy8gRHJhdyBvbmUgZnJhbWUuCi0gICAgR0xFUzIwLmdsQ2xlYXIoR0xF
UzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLQot
ICAgIC8vIENoZWNrIHRoYXQgfGxpc3RlbmVyMnwgcmVjZWl2ZWQgdGhlIGZyYW1lLCBhbmQgbm90
IHxsaXN0ZW5lcjF8LgotICAgIGxpc3RlbmVyMi53YWl0Rm9yTmV3RnJhbWUoKTsKLSAgICBhc3Nl
cnRGYWxzZShsaXN0ZW5lcjEud2FpdEZvck5ld0ZyYW1lKDEpKTsKLQotICAgIHN1cmZhY2VUZXh0
dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxw
ZXIuZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgQE1lZGl1bVRl
c3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RUZXh0dXJldG9ZVVYoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIGludCB3aWR0aCA9IDE2OwotICAgIGZpbmFsIGlu
dCBoZWlnaHQgPSAxNjsKLQotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3Jl
YXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLQotICAgIC8vIENyZWF0ZSBTdXJmYWNl
VGV4dHVyZUhlbHBlciBhbmQgbGlzdGVuZXIuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxw
ZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoCi0g
ICAgICAgICJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBlZ2xC
YXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIg
bGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5nZXRTdXJmYWNlVGV4dHVyZSgpLnNldERlZmF1bHRCdWZmZXJTaXplKHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlcyBmb3Igc3R1YmJpbmcgYW4gT0VTIHRleHR1cmUg
cHJvZHVjZXIuIHxlZ2xCYXNlfCBoYXMgdGhlIFN1cmZhY2VUZXh0dXJlIGluCi0gICAgLy8gfHN1
cmZhY2VUZXh0dXJlSGVscGVyfCBhcyB0aGUgdGFyZ2V0IEVHTFN1cmZhY2UuCi0KLSAgICBlZ2xC
YXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUo
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbEJhc2Uuc3VyZmFjZVdpZHRoKCksIHdpZHRoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlSGVpZ2h0KCksIGhlaWdodCk7Ci0KLSAgICBm
aW5hbCBpbnQgcmVkW10gPSBuZXcgaW50W10gezc5LCAxNDQsIDE4NX07Ci0gICAgZmluYWwgaW50
IGdyZWVuW10gPSBuZXcgaW50W10gezY2LCAyMTAsIDE2Mn07Ci0gICAgZmluYWwgaW50IGJsdWVb
XSA9IG5ldyBpbnRbXSB7MTYxLCAxMTcsIDE1OH07Ci0KLSAgICBmaW5hbCBpbnQgcmVmX3lbXSA9
IG5ldyBpbnRbXSB7ODEsIDE4MCwgMTY4fTsKLSAgICBmaW5hbCBpbnQgcmVmX3VbXSA9IG5ldyBp
bnRbXSB7MTczLCA5MywgMTIyfTsKLSAgICBmaW5hbCBpbnQgcmVmX3ZbXSA9IG5ldyBpbnRbXSB7
MTI3LCAxMDMsIDE0MH07Ci0KLSAgICAvLyBEcmF3IHRocmVlIGZyYW1lcy4KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgLy8gRHJhdyBhIGNvbnN0YW50IGNvbG9yIGZy
YW1lIG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgp
OwotICAgICAgR0xFUzIwLmdsQ2xlYXJDb2xvcihyZWRbaV0gLyAyNTUuMGYsIGdyZWVuW2ldIC8g
MjU1LjBmLCBibHVlW2ldIC8gMjU1LjBmLCAxLjBmKTsKLSAgICAgIEdMRVMyMC5nbENsZWFyKEdM
RVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgIC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1
bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICAgIGVnbEJh
c2Uuc3dhcEJ1ZmZlcnMoKTsKLQotICAgICAgLy8gV2FpdCBmb3IgYW4gT0VTIHRleHR1cmUgdG8g
YXJyaXZlLgotICAgICAgbGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKCk7Ci0KLSAgICAgIC8vIE1l
bW9yeSBsYXlvdXQ6IExpbmVzIGFyZSAxNiBieXRlcy4gRmlyc3QgMTYgbGluZXMgYXJlCi0gICAg
ICAvLyB0aGUgWSBkYXRhLiBUaGVzZSBhcmUgZm9sbG93ZWQgYnkgOCBsaW5lcyB3aXRoIDggYnl0
ZXMgb2YgVQotICAgICAgLy8gZGF0YSBvbiB0aGUgbGVmdCBhbmQgOCBieXRlcyBvZiBWIGRhdGEg
b24gdGhlIHJpZ2h0LgotICAgICAgLy8KLSAgICAgIC8vIE9mZnNldAotICAgICAgLy8gICAgICAw
IFlZWVlZWVlZIFlZWVlZWVlZCi0gICAgICAvLyAgICAgMTYgWVlZWVlZWVkgWVlZWVlZWVkKLSAg
ICAgIC8vICAgIC4uLgotICAgICAgLy8gICAgMjQwIFlZWVlZWVlZIFlZWVlZWVlZCi0gICAgICAv
LyAgICAyNTYgVVVVVVVVVVUgVlZWVlZWVlYKLSAgICAgIC8vICAgIDI3MiBVVVVVVVVVVSBWVlZW
VlZWVgotICAgICAgLy8gICAgLi4uCi0gICAgICAvLyAgICAzNjggVVVVVVVVVVUgVlZWVlZWVlYK
LSAgICAgIC8vICAgIDM4NCBidWZmZXIgZW5kCi0gICAgICBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5
dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qod2lkdGggKiBoZWlnaHQgKiAzIC8gMik7Ci0gICAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci50ZXh0dXJlVG9ZVVYoCi0gICAgICAgICAgYnVmZmVyLCB3aWR0
aCwgaGVpZ2h0LCB3aWR0aCwgbGlzdGVuZXIub2VzVGV4dHVyZUlkLCBsaXN0ZW5lci50cmFuc2Zv
cm1NYXRyaXgpOwotCi0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJh
bWUoKTsKLQotICAgICAgLy8gQWxsb3cgb2ZmLWJ5LW9uZSBkaWZmZXJlbmNlcyBkdWUgdG8gZGlm
ZmVyZW50IHJvdW5kaW5nLgotICAgICAgd2hpbGUgKGJ1ZmZlci5wb3NpdGlvbigpIDwgd2lkdGgg
KiBoZWlnaHQpIHsKLSAgICAgICAgYXNzZXJ0Q2xvc2UoMSwgYnVmZmVyLmdldCgpICYgMHhmZiwg
cmVmX3lbaV0pOwotICAgICAgfQotICAgICAgd2hpbGUgKGJ1ZmZlci5oYXNSZW1haW5pbmcoKSkg
ewotICAgICAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkgJSB3aWR0aCA8IHdpZHRoIC8gMikKLSAg
ICAgICAgICBhc3NlcnRDbG9zZSgxLCBidWZmZXIuZ2V0KCkgJiAweGZmLCByZWZfdVtpXSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICBhc3NlcnRDbG9zZSgxLCBidWZmZXIuZ2V0KCkgJiAweGZm
LCByZWZfdltpXSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
ZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXJPbk1lYXN1cmVUZXN0LmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRlcmVyT25NZWFzdXJlVGVzdC5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVu
ZGVyZXJPbk1lYXN1cmVUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMjAgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsK
LWltcG9ydCBhbmRyb2lkLnRlc3QuVWlUaHJlYWRUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5z
dWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudmlldy5W
aWV3Lk1lYXN1cmVTcGVjOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2
YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGZpbmFsIGNs
YXNzIFN1cmZhY2VWaWV3UmVuZGVyZXJPbk1lYXN1cmVUZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0
Q2FzZSB7Ci0gIC8qKgotICAgKiBMaXN0IHdpdGggYWxsIHBvc3NpYmxlIHNjYWxpbmcgdHlwZXMu
Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PFJlbmRlcmVyQ29tbW9uLlNjYWxp
bmdUeXBlPiBzY2FsaW5nVHlwZXMgPSBBcnJheXMuYXNMaXN0KAotICAgICAgUmVuZGVyZXJDb21t
b24uU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJVCwgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5
cGUuU0NBTEVfQVNQRUNUX0ZJTEwsCi0gICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZS5T
Q0FMRV9BU1BFQ1RfQkFMQU5DRUQpOwotCi0gIC8qKgotICAgKiBMaXN0IHdpdGggTWVhc3VyZVNw
ZWMgbW9kZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PEludGVnZXI+IG1l
YXN1cmVTcGVjTW9kZXMgPQotICAgICAgQXJyYXlzLmFzTGlzdChNZWFzdXJlU3BlYy5FWEFDVExZ
LCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLQotICAvKioKLSAgICogUmV0dXJucyBhIGR1bW15IFlV
ViBmcmFtZS4KLSAgICovCi0gIHN0YXRpYyBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBjcmVhdGVG
cmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbkRlZ3JlZSkgewotICAgIGZp
bmFsIGludFtdIHl1dlN0cmlkZXMgPSBuZXcgaW50W10ge3dpZHRoLCAod2lkdGggKyAxKSAvIDIs
ICh3aWR0aCArIDEpIC8gMn07Ci0gICAgZmluYWwgaW50W10geXV2SGVpZ2h0cyA9IG5ldyBpbnRb
XSB7aGVpZ2h0LCAoaGVpZ2h0ICsgMSkgLyAyLCAoaGVpZ2h0ICsgMSkgLyAyfTsKLSAgICBmaW5h
bCBCeXRlQnVmZmVyW10geXV2UGxhbmVzID0gbmV3IEJ5dGVCdWZmZXJbM107Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIHl1dlBsYW5lc1tpXSA9IEJ5dGVCdWZmZXIu
YWxsb2NhdGVEaXJlY3QoeXV2U3RyaWRlc1tpXSAqIHl1dkhlaWdodHNbaV0pOwotICAgIH0KLSAg
ICByZXR1cm4gbmV3IFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lKHdpZHRoLCBoZWlnaHQsIHJvdGF0
aW9uRGVncmVlLCB5dXZTdHJpZGVzLCB5dXZQbGFuZXMsIDApOwotICB9Ci0KLSAgLyoqCi0gICAq
IEFzc2VydCBvbk1lYXN1cmUoKSB3aXRoIGdpdmVuIHBhcmFtZXRlcnMgd2lsbCByZXN1bHQgaW4g
ZXhwZWN0ZWQgbWVhc3VyZWQgc2l6ZS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNz
ZXJ0TWVhc3VyZWRTaXplKFN1cmZhY2VWaWV3UmVuZGVyZXIgc3VyZmFjZVZpZXdSZW5kZXJlciwK
LSAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBTdHJpbmcgZnJh
bWVEaW1lbnNpb25zLCBpbnQgZXhwZWN0ZWRXaWR0aCwKLSAgICAgIGludCBleHBlY3RlZEhlaWdo
dCwgaW50IHdpZHRoU3BlYywgaW50IGhlaWdodFNwZWMpIHsKLSAgICBzdXJmYWNlVmlld1JlbmRl
cmVyLnNldFNjYWxpbmdUeXBlKHNjYWxpbmdUeXBlKTsKLSAgICBzdXJmYWNlVmlld1JlbmRlcmVy
Lm9uTWVhc3VyZSh3aWR0aFNwZWMsIGhlaWdodFNwZWMpOwotICAgIGZpbmFsIGludCBtZWFzdXJl
ZFdpZHRoID0gc3VyZmFjZVZpZXdSZW5kZXJlci5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgZmlu
YWwgaW50IG1lYXN1cmVkSGVpZ2h0ID0gc3VyZmFjZVZpZXdSZW5kZXJlci5nZXRNZWFzdXJlZEhl
aWdodCgpOwotICAgIGlmIChtZWFzdXJlZFdpZHRoICE9IGV4cGVjdGVkV2lkdGggfHwgbWVhc3Vy
ZWRIZWlnaHQgIT0gZXhwZWN0ZWRIZWlnaHQpIHsKLSAgICAgIGZhaWwoIm9uTWVhc3VyZSgiICsg
TWVhc3VyZVNwZWMudG9TdHJpbmcod2lkdGhTcGVjKSArICIsICIgKyBNZWFzdXJlU3BlYy50b1N0
cmluZyhoZWlnaHRTcGVjKQotICAgICAgICAgICsgIikiCi0gICAgICAgICAgKyAiIHdpdGggc2Nh
bGluZyB0eXBlICIgKyBzY2FsaW5nVHlwZSArICIgYW5kIGZyYW1lOiAiICsgZnJhbWVEaW1lbnNp
b25zCi0gICAgICAgICAgKyAiIGV4cGVjdGVkIG1lYXN1cmVkIHNpemUgIiArIGV4cGVjdGVkV2lk
dGggKyAieCIgKyBleHBlY3RlZEhlaWdodCArICIsIGJ1dCB3YXMgIgotICAgICAgICAgICsgbWVh
c3VyZWRXaWR0aCArICJ4IiArIG1lYXN1cmVkSGVpZ2h0KTsKLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICogVGVzdCBob3cgU3VyZmFjZVZpZXdSZW5kZXJlci5vbk1lYXN1cmUoKSBiZWhhdmVzIHdo
ZW4gbm8gZnJhbWUgaGFzIGJlZW4gZGVsaXZlcmVkLgotICAgKi8KLSAgQFVpVGhyZWFkVGVzdAot
ICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Tm9GcmFtZSgpIHsKLSAgICBmaW5hbCBT
dXJmYWNlVmlld1JlbmRlcmVyIHN1cmZhY2VWaWV3UmVuZGVyZXIgPQotICAgICAgICBuZXcgU3Vy
ZmFjZVZpZXdSZW5kZXJlcihnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRDb250ZXh0KCkpOwotICAg
IGZpbmFsIFN0cmluZyBmcmFtZURpbWVuc2lvbnMgPSAibnVsbCI7Ci0KLSAgICAvLyBUZXN0IGJl
aGF2aW91ciBiZWZvcmUgU3VyZmFjZVZpZXdSZW5kZXJlci5pbml0KCkgaXMgY2FsbGVkLgotICAg
IGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlw
ZXMpIHsKLSAgICAgIGZvciAoaW50IG1lYXN1cmVTcGVjTW9kZSA6IG1lYXN1cmVTcGVjTW9kZXMp
IHsKLSAgICAgICAgZmluYWwgaW50IHplcm9NZWFzdXJlU2l6ZSA9IE1lYXN1cmVTcGVjLm1ha2VN
ZWFzdXJlU3BlYygwLCBtZWFzdXJlU3BlY01vZGUpOwotICAgICAgICBhc3NlcnRNZWFzdXJlZFNp
emUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgMCwg
MCwgemVyb01lYXN1cmVTaXplLAotICAgICAgICAgICAgemVyb01lYXN1cmVTaXplKTsKLSAgICAg
ICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBm
cmFtZURpbWVuc2lvbnMsIDEyODAsIDcyMCwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VN
ZWFzdXJlU3BlYygxMjgwLCBtZWFzdXJlU3BlY01vZGUpLAotICAgICAgICAgICAgTWVhc3VyZVNw
ZWMubWFrZU1lYXN1cmVTcGVjKDcyMCwgbWVhc3VyZVNwZWNNb2RlKSk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgLy8gVGVzdCBiZWhhdmlvdXIgYWZ0ZXIgU3VyZmFjZVZpZXdSZW5kZXJlci5pbml0
KCkgaXMgY2FsbGVkLCBidXQgc3RpbGwgbm8gZnJhbWUuCi0gICAgc3VyZmFjZVZpZXdSZW5kZXJl
ci5pbml0KChFZ2xCYXNlLkNvbnRleHQpIG51bGwsIG51bGwpOwotICAgIGZvciAoUmVuZGVyZXJD
b21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgIGZv
ciAoaW50IG1lYXN1cmVTcGVjTW9kZSA6IG1lYXN1cmVTcGVjTW9kZXMpIHsKLSAgICAgICAgZmlu
YWwgaW50IHplcm9NZWFzdXJlU2l6ZSA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygwLCBt
ZWFzdXJlU3BlY01vZGUpOwotICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdS
ZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgMCwgMCwgemVyb01lYXN1cmVT
aXplLAotICAgICAgICAgICAgemVyb01lYXN1cmVTaXplKTsKLSAgICAgICAgYXNzZXJ0TWVhc3Vy
ZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMs
IDEyODAsIDcyMCwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygxMjgw
LCBtZWFzdXJlU3BlY01vZGUpLAotICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVT
cGVjKDcyMCwgbWVhc3VyZVNwZWNNb2RlKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc3VyZmFj
ZVZpZXdSZW5kZXJlci5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBob3cgU3Vy
ZmFjZVZpZXdSZW5kZXJlci5vbk1lYXN1cmUoKSBiZWhhdmVzIHdpdGggYSAxMjgweDcyMCBmcmFt
ZS4KLSAgICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdEZyYW1lMTI4MHg3MjAoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZp
bmFsIFN1cmZhY2VWaWV3UmVuZGVyZXIgc3VyZmFjZVZpZXdSZW5kZXJlciA9Ci0gICAgICAgIG5l
dyBTdXJmYWNlVmlld1JlbmRlcmVyKGdldEluc3RydW1lbnRhdGlvbigpLmdldENvbnRleHQoKSk7
Ci0gICAgLyoqCi0gICAgICogTW9jayByZW5kZXJlciBldmVudHMgd2l0aCBibG9ja2luZyB3YWl0
IGZ1bmN0aW9uYWxpdHkgZm9yIGZyYW1lIHNpemUgY2hhbmdlcy4KLSAgICAgKi8KLSAgICBjbGFz
cyBNb2NrUmVuZGVyZXJFdmVudHMgaW1wbGVtZW50cyBSZW5kZXJlckNvbW1vbi5SZW5kZXJlckV2
ZW50cyB7Ci0gICAgICBwcml2YXRlIGludCBmcmFtZVdpZHRoOwotICAgICAgcHJpdmF0ZSBpbnQg
ZnJhbWVIZWlnaHQ7Ci0gICAgICBwcml2YXRlIGludCByb3RhdGlvbjsKLQotICAgICAgcHVibGlj
IHN5bmNocm9uaXplZCB2b2lkIHdhaXRGb3JGcmFtZVNpemUoaW50IGZyYW1lV2lkdGgsIGludCBm
cmFtZUhlaWdodCwgaW50IHJvdGF0aW9uKQotICAgICAgICAgIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgICAgIHdoaWxlICh0aGlzLmZyYW1lV2lkdGggIT0gZnJhbWVXaWR0aCB8
fCB0aGlzLmZyYW1lSGVpZ2h0ICE9IGZyYW1lSGVpZ2h0Ci0gICAgICAgICAgICB8fCB0aGlzLnJv
dGF0aW9uICE9IHJvdGF0aW9uKSB7Ci0gICAgICAgICAgd2FpdCgpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIG9uRmlyc3RGcmFtZVJlbmRlcmVkKCkge30KLQotICAg
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uRnJhbWVSZXNvbHV0aW9uQ2hhbmdlZCgKLSAg
ICAgICAgICBpbnQgZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LCBpbnQgcm90YXRpb24pIHsK
LSAgICAgICAgdGhpcy5mcmFtZVdpZHRoID0gZnJhbWVXaWR0aDsKLSAgICAgICAgdGhpcy5mcmFt
ZUhlaWdodCA9IGZyYW1lSGVpZ2h0OwotICAgICAgICB0aGlzLnJvdGF0aW9uID0gcm90YXRpb247
Ci0gICAgICAgIG5vdGlmeUFsbCgpOwotICAgICAgfQotICAgIH0KLSAgICBmaW5hbCBNb2NrUmVu
ZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHMgPSBuZXcgTW9ja1JlbmRlcmVyRXZlbnRzKCk7Ci0g
ICAgc3VyZmFjZVZpZXdSZW5kZXJlci5pbml0KChFZ2xCYXNlLkNvbnRleHQpIG51bGwsIHJlbmRl
cmVyRXZlbnRzKTsKLQotICAgIC8vIFRlc3QgZGlmZmVyZW50IHJvdGF0aW9uIGRlZ3Jlc3MsIGJ1
dCBzYW1lIHJvdGF0ZWQgc2l6ZS4KLSAgICBmb3IgKGludCByb3RhdGlvbkRlZ3JlZSA6IG5ldyBp
bnRbXSB7MCwgOTAsIDE4MCwgMjcwfSkgewotICAgICAgZmluYWwgaW50IHJvdGF0ZWRXaWR0aCA9
IDEyODA7Ci0gICAgICBmaW5hbCBpbnQgcm90YXRlZEhlaWdodCA9IDcyMDsKLSAgICAgIGZpbmFs
IGludCB1bnJvdGF0ZWRXaWR0aCA9IChyb3RhdGlvbkRlZ3JlZSAlIDE4MCA9PSAwID8gcm90YXRl
ZFdpZHRoIDogcm90YXRlZEhlaWdodCk7Ci0gICAgICBmaW5hbCBpbnQgdW5yb3RhdGVkSGVpZ2h0
ID0gKHJvdGF0aW9uRGVncmVlICUgMTgwID09IDAgPyByb3RhdGVkSGVpZ2h0IDogcm90YXRlZFdp
ZHRoKTsKLSAgICAgIGZpbmFsIFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lID0KLSAgICAg
ICAgICBjcmVhdGVGcmFtZSh1bnJvdGF0ZWRXaWR0aCwgdW5yb3RhdGVkSGVpZ2h0LCByb3RhdGlv
bkRlZ3JlZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocm90YXRlZFdpZHRoLCBmcmFtZS5yb3RhdGVk
V2lkdGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocm90YXRlZEhlaWdodCwgZnJhbWUucm90YXRl
ZEhlaWdodCgpKTsKLSAgICAgIGZpbmFsIFN0cmluZyBmcmFtZURpbWVuc2lvbnMgPQotICAgICAg
ICAgIHVucm90YXRlZFdpZHRoICsgIngiICsgdW5yb3RhdGVkSGVpZ2h0ICsgIiB3aXRoIHJvdGF0
aW9uICIgKyByb3RhdGlvbkRlZ3JlZTsKLSAgICAgIHN1cmZhY2VWaWV3UmVuZGVyZXIucmVuZGVy
RnJhbWUoZnJhbWUpOwotICAgICAgcmVuZGVyZXJFdmVudHMud2FpdEZvckZyYW1lU2l6ZSh1bnJv
dGF0ZWRXaWR0aCwgdW5yb3RhdGVkSGVpZ2h0LCByb3RhdGlvbkRlZ3JlZSk7Ci0KLSAgICAgIC8v
IFRlc3QgZm9yY2luZyB0byB6ZXJvIHNpemUuCi0gICAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNj
YWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAgICAgIGZvciAoaW50
IG1lYXN1cmVTcGVjTW9kZSA6IG1lYXN1cmVTcGVjTW9kZXMpIHsKLSAgICAgICAgICBmaW5hbCBp
bnQgemVyb01lYXN1cmVTaXplID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDAsIG1lYXN1
cmVTcGVjTW9kZSk7Ci0gICAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVu
ZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDAsIDAsCi0gICAgICAgICAgICAg
IHplcm9NZWFzdXJlU2l6ZSwgemVyb01lYXN1cmVTaXplKTsKLSAgICAgICAgfQotICAgICAgfQot
Ci0gICAgICAvLyBUZXN0IHBlcmZlY3QgZml0LgotICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5T
Y2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAgICBmb3IgKGlu
dCBtZWFzdXJlU3BlY01vZGUgOiBtZWFzdXJlU3BlY01vZGVzKSB7Ci0gICAgICAgICAgYXNzZXJ0
TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVu
c2lvbnMsIHJvdGF0ZWRXaWR0aCwKLSAgICAgICAgICAgICAgcm90YXRlZEhlaWdodCwgTWVhc3Vy
ZVNwZWMubWFrZU1lYXN1cmVTcGVjKHJvdGF0ZWRXaWR0aCwgbWVhc3VyZVNwZWNNb2RlKSwKLSAg
ICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHJvdGF0ZWRIZWlnaHQsIG1l
YXN1cmVTcGVjTW9kZSkpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZvcmNlIHNw
ZWMgc2l6ZSB3aXRoIGRpZmZlcmVudCBhc3BlY3QgcmF0aW8gdGhhbiBmcmFtZSBhc3BlY3QgcmF0
aW8uCi0gICAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDog
c2NhbGluZ1R5cGVzKSB7Ci0gICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1Jl
bmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCA3MjAsIDEyODAsCi0gICAgICAg
ICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoNzIwLCBNZWFzdXJlU3BlYy5FWEFDVExZ
KSwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygxMjgwLCBNZWFzdXJl
U3BlYy5FWEFDVExZKSk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbmFsIGZsb2F0IHZpZGVvQXNwZWN0
UmF0aW8gPSAoZmxvYXQpIHJvdGF0ZWRXaWR0aCAvIHJvdGF0ZWRIZWlnaHQ7Ci0gICAgICB7Ci0g
ICAgICAgIC8vIFJlbGF4IGJvdGggd2lkdGggYW5kIGhlaWdodCBjb25zdHJhaW50cy4KLSAgICAg
ICAgZmluYWwgaW50IHdpZHRoU3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAs
IE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0U3BlYyA9IE1l
YXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygxMjgwLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAg
ICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxp
bmdUeXBlcykgewotICAgICAgICAgIGZpbmFsIFBvaW50IGV4cGVjdGVkU2l6ZSA9Ci0gICAgICAg
ICAgICAgIFJlbmRlcmVyQ29tbW9uLmdldERpc3BsYXlTaXplKHNjYWxpbmdUeXBlLCB2aWRlb0Fz
cGVjdFJhdGlvLCA3MjAsIDEyODApOwotICAgICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJm
YWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCBleHBlY3RlZFNp
emUueCwKLSAgICAgICAgICAgICAgZXhwZWN0ZWRTaXplLnksIHdpZHRoU3BlYywgaGVpZ2h0U3Bl
Yyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHsKLSAgICAgICAgLy8gRm9yY2Ugd2lkdGgg
dG8gNzIwLCBidXQgcmVsYXggaGVpZ2h0IGNvbnN0cmFpbnQuIFRoaXMgd2lsbCBnaXZlIHRoZSBz
YW1lIHJlc3VsdCBhcwotICAgICAgICAvLyBhYm92ZSwgYmVjYXVzZSB3aWR0aCBpcyBhbHJlYWR5
IHRoZSBsaW1pdGluZyBmYWN0b3IgYW5kIHdpbGwgYmUgbWF4ZWQgb3V0LgotICAgICAgICBmaW5h
bCBpbnQgd2lkdGhTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDcyMCwgTWVhc3Vy
ZVNwZWMuRVhBQ1RMWSk7Ci0gICAgICAgIGZpbmFsIGludCBoZWlnaHRTcGVjID0gTWVhc3VyZVNw
ZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgICAgICBm
b3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVz
KSB7Ci0gICAgICAgICAgZmluYWwgUG9pbnQgZXhwZWN0ZWRTaXplID0KLSAgICAgICAgICAgICAg
UmVuZGVyZXJDb21tb24uZ2V0RGlzcGxheVNpemUoc2NhbGluZ1R5cGUsIHZpZGVvQXNwZWN0UmF0
aW8sIDcyMCwgMTI4MCk7Ci0gICAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3
UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIGV4cGVjdGVkU2l6ZS54LAot
ICAgICAgICAgICAgICBleHBlY3RlZFNpemUueSwgd2lkdGhTcGVjLCBoZWlnaHRTcGVjKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAvLyBGb3JjZSBoZWlnaHQsIGJ1dCBy
ZWxheCB3aWR0aCBjb25zdHJhaW50LiBUaGlzIHdpbGwgZm9yY2UgYSBiYWQgbGF5b3V0IHNpemUu
Ci0gICAgICAgIGZpbmFsIGludCB3aWR0aFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNw
ZWMoNzIwLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAgICAgICAgZmluYWwgaW50IGhlaWdodFNw
ZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgTWVhc3VyZVNwZWMuRVhBQ1RM
WSk7Ci0gICAgICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUg
OiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoCi0gICAgICAg
ICAgICAgIHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMs
IDcyMCwgMTI4MCwgd2lkdGhTcGVjLCBoZWlnaHRTcGVjKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLQotICAgIHN1cmZhY2VWaWV3UmVuZGVyZXIucmVsZWFzZSgpOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRl
c3RzL3NyYy9vcmcvd2VicnRjL1dlYlJ0Y0puaUJvb3RUZXN0LmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0
cy9zcmMvb3JnL3dlYnJ0Yy9XZWJSdGNKbmlCb290VGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZHRlc3RzL3NyYy9vcmcvd2VicnRjL1dlYlJ0Y0puaUJvb3RUZXN0LmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBz
cG90LmFwcHJ0Yy50ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRl
c3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFs
bFRlc3Q7Ci0KLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uRmFjdG9yeTsKLQotLy8g
VGhpcyB0ZXN0IGlzIGludGVuZGVkIHRvIHJ1biBvbiBBUk0gYW5kIGNhdGNoIExvYWRMaWJyYXJ5
IGVycm9ycyB3aGVuIHdlIGxvYWQgdGhlIFdlYlJUQwotLy8gSk5JLiBJdCBjYW4ndCByZWFsbHkg
YmUgc2V0dGluZyB1cCBjYWxscyBzaW5jZSBBUk0gZW11bGF0b3JzIGFyZSB0b28gc2xvdywgYnV0
IGluc3RhbnRpYXRpbmcKLS8vIGEgcGVlciBjb25uZWN0aW9uIGlzbid0IHRpbWluZy1zZW5zaXRp
dmUsIHNvIHdlIGNhbiBhdCBsZWFzdCBkbyB0aGF0LgotcHVibGljIGNsYXNzIFdlYlJ0Y0puaUJv
b3RUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBAU21hbGxUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RKbmlMb2Fkc1dpdGhvdXRFcnJvcigpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVBbmRyb2lk
R2xvYmFscyhnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksCi0gICAgICAg
IHRydWUgLyogaW5pdGlhbGl6ZUF1ZGlvICovLCB0cnVlIC8qIGluaXRpYWxpemVWaWRlbyAqLywK
LSAgICAgICAgZmFsc2UgLyogdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uICovKTsKLQotICAgIFBl
ZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rpb25G
YWN0b3J5Lk9wdGlvbnMoKTsKLSAgICBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5KG9wdGlvbnMp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHZpZGVvdHJhY2tzb3VyY2UuY2MKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR2aWRlb3RyYWNrc291
cmNlLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHZpZGVvdHJhY2tzb3VyY2UuY2MJKG5vbmV4aXN0ZW50
KQpAQCAtMSwxNjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3
ZWJydGMvYXBpL2FuZHJvaWR2aWRlb3RyYWNrc291cmNlLmgiCi0KLSNpbmNsdWRlIDx1dGlsaXR5
PgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U6OkFuZHJv
aWRWaWRlb1RyYWNrU291cmNlKHJ0Yzo6VGhyZWFkKiBzaWduYWxpbmdfdGhyZWFkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpOSUVudiogam5pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3Qg
al9lZ2xfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIGlzX3NjcmVlbmNhc3QpCi0gICAgOiBzaWduYWxpbmdfdGhyZWFkXyhzaWdu
YWxpbmdfdGhyZWFkKSwKLSAgICAgIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfKHdlYnJ0Y19qbmk6
OlN1cmZhY2VUZXh0dXJlSGVscGVyOjpjcmVhdGUoCi0gICAgICAgICAgam5pLAotICAgICAgICAg
ICJDYW1lcmEgU3VyZmFjZVRleHR1cmVIZWxwZXIiLAotICAgICAgICAgIGpfZWdsX2NvbnRleHQp
KSwKLSAgICAgIGlzX3NjcmVlbmNhc3RfKGlzX3NjcmVlbmNhc3QpIHsKLSAgTE9HKExTX0lORk8p
IDw8ICJBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSBjdG9yIjsKLSAgY2FtZXJhX3RocmVhZF9jaGVj
a2VyXy5EZXRhY2hGcm9tVGhyZWFkKCk7Ci19Ci0KLXZvaWQgQW5kcm9pZFZpZGVvVHJhY2tTb3Vy
Y2U6OlNldFN0YXRlKFNvdXJjZVN0YXRlIHN0YXRlKSB7Ci0gIGlmIChydGM6OlRocmVhZDo6Q3Vy
cmVudCgpICE9IHNpZ25hbGluZ190aHJlYWRfKSB7Ci0gICAgaW52b2tlcl8uQXN5bmNJbnZva2U8
dm9pZD4oCi0gICAgICAgIFJUQ19GUk9NX0hFUkUsIHNpZ25hbGluZ190aHJlYWRfLAotICAgICAg
ICBydGM6OkJpbmQoJkFuZHJvaWRWaWRlb1RyYWNrU291cmNlOjpTZXRTdGF0ZSwgdGhpcywgc3Rh
dGUpKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICBpZiAoc3RhdGVfICE9IHN0YXRlKSB7Ci0gICAg
c3RhdGVfID0gc3RhdGU7Ci0gICAgRmlyZU9uQ2hhbmdlZCgpOwotICB9Ci19Ci0KLXZvaWQgQW5k
cm9pZFZpZGVvVHJhY2tTb3VyY2U6Ok9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoY29uc3Qgdm9p
ZCogZnJhbWVfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm90
YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludDY0X3QgdGltZXN0YW1wX25zKSB7Ci0gIFJUQ19EQ0hFQ0soY2FtZXJhX3RocmVh
ZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfRENIRUNLKHJvdGF0aW9u
ID09IDAgfHwgcm90YXRpb24gPT0gOTAgfHwgcm90YXRpb24gPT0gMTgwIHx8Ci0gICAgICAgICAg
ICAgcm90YXRpb24gPT0gMjcwKTsKLQotICBpbnQ2NF90IGNhbWVyYV90aW1lX3VzID0gdGltZXN0
YW1wX25zIC8gcnRjOjprTnVtTmFub3NlY3NQZXJNaWNyb3NlYzsKLSAgaW50NjRfdCB0cmFuc2xh
dGVkX2NhbWVyYV90aW1lX3VzID0KLSAgICAgIHRpbWVzdGFtcF9hbGlnbmVyXy5UcmFuc2xhdGVU
aW1lc3RhbXAoY2FtZXJhX3RpbWVfdXMsIHJ0Yzo6VGltZU1pY3JvcygpKTsKLQotICBpbnQgYWRh
cHRlZF93aWR0aDsKLSAgaW50IGFkYXB0ZWRfaGVpZ2h0OwotICBpbnQgY3JvcF93aWR0aDsKLSAg
aW50IGNyb3BfaGVpZ2h0OwotICBpbnQgY3JvcF94OwotICBpbnQgY3JvcF95OwotCi0gIGlmICgh
QWRhcHRGcmFtZSh3aWR0aCwgaGVpZ2h0LCBjYW1lcmFfdGltZV91cywKLSAgICAgICAgICAgICAg
ICAgICZhZGFwdGVkX3dpZHRoLCAmYWRhcHRlZF9oZWlnaHQsICZjcm9wX3dpZHRoLCAmY3JvcF9o
ZWlnaHQsCi0gICAgICAgICAgICAgICAgICAmY3JvcF94LCAmY3JvcF95KSkgewotICAgIHJldHVy
bjsKLSAgfQotCi0gIGNvbnN0IHVpbnQ4X3QqIHlfcGxhbmUgPSBzdGF0aWNfY2FzdDxjb25zdCB1
aW50OF90Kj4oZnJhbWVfZGF0YSk7Ci0gIGNvbnN0IHVpbnQ4X3QqIHV2X3BsYW5lID0geV9wbGFu
ZSArIHdpZHRoICogaGVpZ2h0OwotICBjb25zdCBpbnQgdXZfd2lkdGggPSAod2lkdGggKyAxKSAv
IDI7Ci0KLSAgUlRDX0NIRUNLX0dFKGxlbmd0aCwgd2lkdGggKiBoZWlnaHQgKyAyICogdXZfd2lk
dGggKiAoKGhlaWdodCArIDEpIC8gMikpOwotCi0gIC8vIENhbiBvbmx5IGNyb3AgYXQgZXZlbiBw
aXhlbHMuCi0gIGNyb3BfeCAmPSB+MTsKLSAgY3JvcF95ICY9IH4xOwotICAvLyBDcm9wIGp1c3Qg
YnkgbW9kaWZ5aW5nIHBvaW50ZXJzLgotICB5X3BsYW5lICs9IHdpZHRoICogY3JvcF95ICsgY3Jv
cF94OwotICB1dl9wbGFuZSArPSB1dl93aWR0aCAqIGNyb3BfeSArIGNyb3BfeDsKLQotICBydGM6
OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpJNDIwQnVmZmVyPiBidWZmZXIgPQotICAgICAgYnVmZmVy
X3Bvb2xfLkNyZWF0ZUJ1ZmZlcihhZGFwdGVkX3dpZHRoLCBhZGFwdGVkX2hlaWdodCk7Ci0KLSAg
bnYxMnRvaTQyMF9zY2FsZXJfLk5WMTJUb0k0MjBTY2FsZSgKLSAgICAgIHlfcGxhbmUsIHdpZHRo
LAotICAgICAgdXZfcGxhbmUsIHV2X3dpZHRoICogMiwKLSAgICAgIGNyb3Bfd2lkdGgsIGNyb3Bf
aGVpZ2h0LAotICAgICAgYnVmZmVyLT5NdXRhYmxlRGF0YVkoKSwgYnVmZmVyLT5TdHJpZGVZKCks
Ci0gICAgICAvLyBTd2FwIFUgYW5kIFYsIHNpbmNlIHdlIGhhdmUgTlYyMSwgbm90IE5WMTIuCi0g
ICAgICBidWZmZXItPk11dGFibGVEYXRhVigpLCBidWZmZXItPlN0cmlkZVYoKSwKLSAgICAgIGJ1
ZmZlci0+TXV0YWJsZURhdGFVKCksIGJ1ZmZlci0+U3RyaWRlVSgpLAotICAgICAgYnVmZmVyLT53
aWR0aCgpLCBidWZmZXItPmhlaWdodCgpKTsKLQotICBPbkZyYW1lKFZpZGVvRnJhbWUoYnVmZmVy
LCBzdGF0aWNfY2FzdDx3ZWJydGM6OlZpZGVvUm90YXRpb24+KHJvdGF0aW9uKSwKLSAgICAgICAg
ICAgICAgICAgICAgIHRyYW5zbGF0ZWRfY2FtZXJhX3RpbWVfdXMpKTsKLX0KLQotdm9pZCBBbmRy
b2lkVmlkZW9UcmFja1NvdXJjZTo6T25UZXh0dXJlRnJhbWVDYXB0dXJlZCgKLSAgICBpbnQgd2lk
dGgsCi0gICAgaW50IGhlaWdodCwKLSAgICBpbnQgcm90YXRpb24sCi0gICAgaW50NjRfdCB0aW1l
c3RhbXBfbnMsCi0gICAgY29uc3Qgd2VicnRjX2puaTo6TmF0aXZlSGFuZGxlSW1wbCYgaGFuZGxl
KSB7Ci0gIFJUQ19EQ0hFQ0soY2FtZXJhX3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhy
ZWFkKCkpOwotICBSVENfRENIRUNLKHJvdGF0aW9uID09IDAgfHwgcm90YXRpb24gPT0gOTAgfHwg
cm90YXRpb24gPT0gMTgwIHx8Ci0gICAgICAgICAgICAgcm90YXRpb24gPT0gMjcwKTsKLQotICBp
bnQ2NF90IGNhbWVyYV90aW1lX3VzID0gdGltZXN0YW1wX25zIC8gcnRjOjprTnVtTmFub3NlY3NQ
ZXJNaWNyb3NlYzsKLSAgaW50NjRfdCB0cmFuc2xhdGVkX2NhbWVyYV90aW1lX3VzID0KLSAgICAg
IHRpbWVzdGFtcF9hbGlnbmVyXy5UcmFuc2xhdGVUaW1lc3RhbXAoY2FtZXJhX3RpbWVfdXMsIHJ0
Yzo6VGltZU1pY3JvcygpKTsKLQotICBpbnQgYWRhcHRlZF93aWR0aDsKLSAgaW50IGFkYXB0ZWRf
aGVpZ2h0OwotICBpbnQgY3JvcF93aWR0aDsKLSAgaW50IGNyb3BfaGVpZ2h0OwotICBpbnQgY3Jv
cF94OwotICBpbnQgY3JvcF95OwotCi0gIGlmICghQWRhcHRGcmFtZSh3aWR0aCwgaGVpZ2h0LCBj
YW1lcmFfdGltZV91cywKLSAgICAgICAgICAgICAgICAgICZhZGFwdGVkX3dpZHRoLCAmYWRhcHRl
ZF9oZWlnaHQsICZjcm9wX3dpZHRoLCAmY3JvcF9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAm
Y3JvcF94LCAmY3JvcF95KSkgewotICAgIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfLT5SZXR1cm5U
ZXh0dXJlRnJhbWUoKTsKLSAgICByZXR1cm47Ci0gIH0KLQotICB3ZWJydGNfam5pOjpNYXRyaXgg
bWF0cml4ID0gaGFuZGxlLnNhbXBsaW5nX21hdHJpeDsKLQotICBtYXRyaXguQ3JvcChjcm9wX3dp
ZHRoIC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoKSwKLSAgICAgICAgICAgICAgY3JvcF9oZWln
aHQgLyBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0KSwKLSAgICAgICAgICAgICAgY3JvcF94IC8g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoKSwKLSAgICAgICAgICAgICAgY3JvcF95IC8gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGhlaWdodCkpOwotCi0gIC8vIE1ha2UgYSBsb2NhbCBjb3B5LCBzaW5jZSB2
YWx1ZSBvZiBhcHBseV9yb3RhdGlvbigpIG1heSBjaGFuZ2UKLSAgLy8gdW5kZXIgb3VyIGZlZXQu
Ci0gIGJvb2wgZG9fcm90YXRlID0gYXBwbHlfcm90YXRpb24oKTsKLQotICBpZiAoZG9fcm90YXRl
KSB7Ci0gICAgaWYgKHJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fOTAgfHwKLSAg
ICAgICAgcm90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8yNzApIHsKLSAgICAgIHN0
ZDo6c3dhcChhZGFwdGVkX3dpZHRoLCBhZGFwdGVkX2hlaWdodCk7Ci0gICAgfQotICAgIG1hdHJp
eC5Sb3RhdGUoc3RhdGljX2Nhc3Q8d2VicnRjOjpWaWRlb1JvdGF0aW9uPihyb3RhdGlvbikpOwot
ICB9Ci0KLSAgT25GcmFtZShWaWRlb0ZyYW1lKAotICAgICAgc3VyZmFjZV90ZXh0dXJlX2hlbHBl
cl8tPkNyZWF0ZVRleHR1cmVGcmFtZSgKLSAgICAgICAgICBhZGFwdGVkX3dpZHRoLCBhZGFwdGVk
X2hlaWdodCwKLSAgICAgICAgICB3ZWJydGNfam5pOjpOYXRpdmVIYW5kbGVJbXBsKGhhbmRsZS5v
ZXNfdGV4dHVyZV9pZCwgbWF0cml4KSksCi0gICAgICBkb19yb3RhdGUgPyB3ZWJydGM6OmtWaWRl
b1JvdGF0aW9uXzAKLSAgICAgICAgICAgICAgICA6IHN0YXRpY19jYXN0PHdlYnJ0Yzo6VmlkZW9S
b3RhdGlvbj4ocm90YXRpb24pLAotICAgICAgdHJhbnNsYXRlZF9jYW1lcmFfdGltZV91cykpOwot
fQotCi12b2lkIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlOjpPbk91dHB1dEZvcm1hdFJlcXVlc3Qo
aW50IHdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGZwcykgewotICBjcmlja2V0OjpWaWRlb0Zvcm1hdCBmb3JtYXQo
d2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyaWNrZXQ6OlZp
ZGVvRm9ybWF0OjpGcHNUb0ludGVydmFsKGZwcyksIDApOwotICB2aWRlb19hZGFwdGVyKCktPk9u
T3V0cHV0Rm9ybWF0UmVxdWVzdChmb3JtYXQpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZHZpZGVvdHJhY2tzb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHZpZGVvdHJhY2tzb3VyY2UuaAkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWR2aWRlb3RyYWNrc291cmNlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4NCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfQVBJX0FORFJP
SURWSURFT1RSQUNLU09VUkNFX0hfCi0jZGVmaW5lIFdFQlJUQ19BUElfQU5EUk9JRFZJREVPVFJB
Q0tTT1VSQ0VfSF8KLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hh
bmRsZV9pbXBsLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9zdXJmYWNldGV4
dHVyZWhlbHBlcl9qbmkuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9hc3luY2ludm9rZXIuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90
aHJlYWRfY2hlY2tlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3RpbWVzdGFtcGFsaWduZXIu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvaTQyMF9idWZmZXJfcG9v
bC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9jb21tb25fdmlkZW8vbGlieXV2L2luY2x1ZGUvd2VicnRj
X2xpYnl1di5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tZWRpYS9iYXNlL2FkYXB0ZWR2aWRlb3RyYWNr
c291cmNlLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1jbGFzcyBBbmRyb2lkVmlkZW9UcmFj
a1NvdXJjZSA6IHB1YmxpYyBydGM6OkFkYXB0ZWRWaWRlb1RyYWNrU291cmNlIHsKLSBwdWJsaWM6
Ci0gIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlKHJ0Yzo6VGhyZWFkKiBzaWduYWxpbmdfdGhyZWFk
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgam9iamVjdCBqX2VnbF9jb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGlzX3NjcmVlbmNhc3QgPSBmYWxzZSk7Ci0KLSAgYm9vbCBpc19zY3JlZW5jYXN0
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gaXNfc2NyZWVuY2FzdF87IH0KLQotICAvLyBJbmRp
Y2F0ZXMgdGhhdCB0aGUgZW5jb2RlciBzaG91bGQgZGVub2lzZSB2aWRlbyBiZWZvcmUgZW5jb2Rp
bmcgaXQuCi0gIC8vIElmIGl0IGlzIG5vdCBzZXQsIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24g
aXMgdXNlZCB3aGljaCBpcyBkaWZmZXJlbnQKLSAgLy8gZGVwZW5kaW5nIG9uIHZpZGVvIGNvZGVj
LgotICBydGM6Ok9wdGlvbmFsPGJvb2w+IG5lZWRzX2Rlbm9pc2luZygpIGNvbnN0IG92ZXJyaWRl
IHsKLSAgICByZXR1cm4gcnRjOjpPcHRpb25hbDxib29sPihmYWxzZSk7Ci0gIH0KLQotICAvLyBD
YWxsZWQgYnkgdGhlIG5hdGl2ZSBjYXB0dXJlIG9ic2VydmVyCi0gIHZvaWQgU2V0U3RhdGUoU291
cmNlU3RhdGUgc3RhdGUpOwotCi0gIFNvdXJjZVN0YXRlIHN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gc3RhdGVfOyB9Ci0KLSAgYm9vbCByZW1vdGUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBmYWxzZTsgfQotCi0gIHZvaWQgT25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZChjb25zdCB2
b2lkKiBmcmFtZV9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxl
bmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3aWR0aCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgcm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcF9ucyk7Ci0KLSAgdm9pZCBPblRleHR1cmVGcmFtZUNh
cHR1cmVkKGludCB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm90YXRpb24sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IHRpbWVzdGFtcF9ucywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHdlYnJ0Y19qbmk6Ok5hdGl2ZUhhbmRsZUltcGwmIGhh
bmRsZSk7Ci0KLSAgdm9pZCBPbk91dHB1dEZvcm1hdFJlcXVlc3QoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBpbnQgZnBzKTsKLQotICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjX2puaTo6U3VyZmFj
ZVRleHR1cmVIZWxwZXI+Ci0gIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXIoKSB7Ci0gICAgcmV0dXJu
IHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfOwotICB9Ci0KLSBwcml2YXRlOgotICBydGM6OlRocmVh
ZCogc2lnbmFsaW5nX3RocmVhZF87Ci0gIHJ0Yzo6QXN5bmNJbnZva2VyIGludm9rZXJfOwotICBy
dGM6OlRocmVhZENoZWNrZXIgY2FtZXJhX3RocmVhZF9jaGVja2VyXzsKLSAgU291cmNlU3RhdGUg
c3RhdGVfOwotICBydGM6OlZpZGVvQnJvYWRjYXN0ZXIgYnJvYWRjYXN0ZXJfOwotICBydGM6OlRp
bWVzdGFtcEFsaWduZXIgdGltZXN0YW1wX2FsaWduZXJfOwotICB3ZWJydGM6Ok5WMTJUb0k0MjBT
Y2FsZXIgbnYxMnRvaTQyMF9zY2FsZXJfOwotICB3ZWJydGM6Okk0MjBCdWZmZXJQb29sIGJ1ZmZl
cl9wb29sXzsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Y19qbmk6OlN1cmZhY2VUZXh0dXJl
SGVscGVyPiBzdXJmYWNlX3RleHR1cmVfaGVscGVyXzsKLSAgY29uc3QgYm9vbCBpc19zY3JlZW5j
YXN0XzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENf
QVBJX0FORFJPSURWSURFT1RSQUNLU09VUkNFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9QUkVTVUJNSVQucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvUFJFU1VCTUlULnB5CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9QUkVTVUJNSVQucHkJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyOCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotIyB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSMg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotIyBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0jIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotCi1kZWYgQ2hlY2tDaGFuZ2VPblVwbG9hZChpbnB1dF9h
cGksIG91dHB1dF9hcGkpOgotICByZXN1bHRzID0gW10KLSAgcmVzdWx0cy5leHRlbmQoQ2hlY2tQ
YXRjaEZvcm1hdHRlZChpbnB1dF9hcGksIG91dHB1dF9hcGkpKQotICByZXR1cm4gcmVzdWx0cwot
Ci1kZWYgQ2hlY2tQYXRjaEZvcm1hdHRlZChpbnB1dF9hcGksIG91dHB1dF9hcGkpOgotICBpbXBv
cnQgZ2l0X2NsCi0gIGNtZCA9IFsnY2wnLCAnZm9ybWF0JywgJy0tZHJ5LXJ1bicsIGlucHV0X2Fw
aS5QcmVzdWJtaXRMb2NhbFBhdGgoKV0KLSAgY29kZSwgXyA9IGdpdF9jbC5SdW5HaXRXaXRoQ29k
ZShjbWQsIHN1cHByZXNzX3N0ZGVycj1UcnVlKQotICBpZiBjb2RlID09IDI6Ci0gICAgc2hvcnRf
cGF0aCA9IGlucHV0X2FwaS5iYXNlbmFtZShpbnB1dF9hcGkuUHJlc3VibWl0TG9jYWxQYXRoKCkp
Ci0gICAgZnVsbF9wYXRoID0gaW5wdXRfYXBpLm9zX3BhdGgucmVscGF0aChpbnB1dF9hcGkuUHJl
c3VibWl0TG9jYWxQYXRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9hcGkuY2hhbmdlLlJlcG9zaXRvcnlSb290KCkpCi0gICAgcmV0dXJuIFtvdXRw
dXRfYXBpLlByZXN1Ym1pdFByb21wdFdhcm5pbmcoCi0gICAgICAnVGhlICVzIGRpcmVjdG9yeSBy
ZXF1aXJlcyBzb3VyY2UgZm9ybWF0dGluZy4gJwotICAgICAgJ1BsZWFzZSBydW4gZ2l0IGNsIGZv
cm1hdCAlcycgJQotICAgICAgKHNob3J0X3BhdGgsIGZ1bGxfcGF0aCkpXQotICAjIEFzIHRoaXMg
aXMganVzdCBhIHdhcm5pbmcsIGlnbm9yZSBhbGwgb3RoZXIgZXJyb3JzIGlmIHRoZSB1c2VyCi0g
ICMgaGFwcGVucyB0byBoYXZlIGEgYnJva2VuIGNsYW5nLWZvcm1hdCwgZG9lc24ndCB1c2UgZ2l0
LCBldGMgZXRjLgotICByZXR1cm4gW10KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9SRUFETUUJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL1JFQURNRQkobm9uZXhpc3RlbnQpCkBAIC0xLDExICswLDAgQEAKLVRo
aXMgZGlyZWN0b3J5IGhvbGRzIGEgSmF2YSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgd2VicnRjOjpQ
ZWVyQ29ubmVjdGlvbiBBUEksIGFzCi13ZWxsIGFzIHRoZSBKTkkgZ2x1ZSBDKysgY29kZSB0aGF0
IGxldHMgdGhlIEphdmEgaW1wbGVtZW50YXRpb24gcmV1c2UgdGhlIEMrKwotaW1wbGVtZW50YXRp
b24gb2YgdGhlIHNhbWUgQVBJLgotCi1UbyBidWlsZCB0aGUgSmF2YSBBUEkgYW5kIHJlbGF0ZWQg
dGVzdHMsIGdlbmVyYXRlIEdOIHByb2plY3RzIHdpdGg6Ci0tLWFyZ3M9J3RhcmdldF9vcz0iYW5k
cm9pZCInCi0KLVRvIHVzZSB0aGUgSmF2YSBBUEksIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIHB1
YmxpYyBpbnRlcmZhY2Ugb2YKLW9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb257LEZhY3Rvcnl9IGFu
ZCB0aGUgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvblRlc3QuCi0KLVRvIHVuZGVyc3RhbmQgdGhl
IGltcGxlbWVudGF0aW9uIG9mIHRoZSBBUEksIHNlZSB0aGUgbmF0aXZlIGNvZGUgaW4gam5pLy4K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvQXVkaW9Tb3VyY2UuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0F1ZGlvU291cmNlLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQXVkaW9Tb3VyY2UuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIxICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0g
KiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIEF1ZGlvU291cmNlSW50ZXJmYWNlLiAgVXNlZCBhcyB0
aGUgc291cmNlIGZvciBvbmUgb3IKLSAqIG1vcmUge0Bjb2RlIEF1ZGlvVHJhY2t9IG9iamVjdHMu
Ci0gKi8KLXB1YmxpYyBjbGFzcyBBdWRpb1NvdXJjZSBleHRlbmRzIE1lZGlhU291cmNlIHsKLSAg
cHVibGljIEF1ZGlvU291cmNlKGxvbmcgbmF0aXZlU291cmNlKSB7Ci0gICAgc3VwZXIobmF0aXZl
U291cmNlKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1RyYWNrLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1RyYWNrLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQXVkaW9UcmFjay5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBBdWRpb1RyYWNrSW50ZXJmYWNlICov
Ci1wdWJsaWMgY2xhc3MgQXVkaW9UcmFjayBleHRlbmRzIE1lZGlhU3RyZWFtVHJhY2sgewotICBw
dWJsaWMgQXVkaW9UcmFjayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgc3VwZXIobmF0aXZlVHJh
Y2spOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbGxTZXNzaW9uRmlsZVJvdGF0
aW5nTG9nU2luay5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FsbFNlc3Np
b25GaWxlUm90YXRpbmdMb2dTaW5rLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGM7Ci0KLXB1YmxpYyBjbGFzcyBDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsgewotICBz
dGF0aWMgewotICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiamluZ2xlX3BlZXJjb25uZWN0aW9uX3Nv
Iik7Ci0gIH0KLQotICBwcml2YXRlIGxvbmcgbmF0aXZlU2luazsKLQotICBwdWJsaWMgc3RhdGlj
IGJ5dGVbXSBnZXRMb2dEYXRhKFN0cmluZyBkaXJQYXRoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdl
dExvZ0RhdGEoZGlyUGF0aCk7Ci0gIH0KLQotICBwdWJsaWMgQ2FsbFNlc3Npb25GaWxlUm90YXRp
bmdMb2dTaW5rKAotICAgICAgU3RyaW5nIGRpclBhdGgsIGludCBtYXhGaWxlU2l6ZSwgTG9nZ2lu
Zy5TZXZlcml0eSBzZXZlcml0eSkgewotICAgIG5hdGl2ZVNpbmsgPSBuYXRpdmVBZGRTaW5rKGRp
clBhdGgsIG1heEZpbGVTaXplLCBzZXZlcml0eS5vcmRpbmFsKCkpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgZGlzcG9zZSgpIHsKLSAgICBpZiAobmF0aXZlU2luayAhPSAwKSB7Ci0gICAgICBuYXRp
dmVEZWxldGVTaW5rKG5hdGl2ZVNpbmspOwotICAgICAgbmF0aXZlU2luayA9IDA7Ci0gICAgfQot
ICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQWRkU2luayhTdHJpbmcg
ZGlyUGF0aCwgaW50IG1heEZpbGVTaXplLCBpbnQgc2V2ZXJpdHkpOwotICBwcml2YXRlIHN0YXRp
YyBuYXRpdmUgdm9pZCBuYXRpdmVEZWxldGVTaW5rKGxvbmcgbmF0aXZlU2luayk7Ci0gIHByaXZh
dGUgc3RhdGljIG5hdGl2ZSBieXRlW10gbmF0aXZlR2V0TG9nRGF0YShTdHJpbmcgZGlyUGF0aCk7
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlci5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0
dXJlRm9ybWF0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci0KLWltcG9ydCBq
YXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIENhbWVyYTFDYXB0dXJlciBleHRlbmRzIENh
bWVyYUNhcHR1cmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmU7
Ci0KLSAgcHVibGljIENhbWVyYTFDYXB0dXJlcigKLSAgICAgIFN0cmluZyBjYW1lcmFOYW1lLCBD
YW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVy
ZSkgewotICAgIHN1cGVyKGNhbWVyYU5hbWUsIGV2ZW50c0hhbmRsZXIsIG5ldyBDYW1lcmExRW51
bWVyYXRvcihjYXB0dXJlVG9UZXh0dXJlKSk7Ci0KLSAgICB0aGlzLmNhcHR1cmVUb1RleHR1cmUg
PSBjYXB0dXJlVG9UZXh0dXJlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lk
IGNyZWF0ZUNhbWVyYVNlc3Npb24oQ2FtZXJhU2Vzc2lvbi5DcmVhdGVTZXNzaW9uQ2FsbGJhY2sg
Y3JlYXRlU2Vzc2lvbkNhbGxiYWNrLAotICAgICAgQ2FtZXJhU2Vzc2lvbi5FdmVudHMgZXZlbnRz
LCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVy
IHN1cmZhY2VUZXh0dXJlSGVscGVyLCBTdHJpbmcgY2FtZXJhTmFtZSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LAotICAgICAgaW50IGZyYW1lcmF0ZSkgewotICAgIENhbWVyYTFTZXNzaW9uLmNyZWF0
ZShjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIGV2ZW50cywgY2FwdHVyZVRvVGV4dHVyZSwgYXBwbGlj
YXRpb25Db250ZXh0LAotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciwgQ2FtZXJhMUVudW1l
cmF0b3IuZ2V0Q2FtZXJhSW5kZXgoY2FtZXJhTmFtZSksIHdpZHRoLCBoZWlnaHQsCi0gICAgICAg
IGZyYW1lcmF0ZSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUVudW1l
cmF0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFFbnVtZXJh
dG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUVu
dW1lcmF0b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLlN5c3Rl
bUNsb2NrOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxp
c3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZv
cm1hdDsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBD
YW1lcmExRW51bWVyYXRvciBpbXBsZW1lbnRzIENhbWVyYUVudW1lcmF0b3IgewotICBwcml2YXRl
IGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNhbWVyYTFFbnVtZXJhdG9yIjsKLSAgLy8gRWFj
aCBlbnRyeSBjb250YWlucyB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGNvcnJlc3BvbmRpbmcg
Y2FtZXJhIGluZGV4LiBUaGUgZm9ybWF0cyBmb3IgYWxsCi0gIC8vIGNhbWVyYXMgYXJlIGVudW1l
cmF0ZWQgb24gdGhlIGZpcnN0IGNhbGwgdG8gZ2V0U3VwcG9ydGVkRm9ybWF0cygpLCBhbmQgY2Fj
aGVkIGZvciBmdXR1cmUKLSAgLy8gcmVmZXJlbmNlLgotICBwcml2YXRlIHN0YXRpYyBMaXN0PExp
c3Q8Q2FwdHVyZUZvcm1hdD4+IGNhY2hlZFN1cHBvcnRlZEZvcm1hdHM7Ci0KLSAgcHJpdmF0ZSBm
aW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmU7Ci0KLSAgcHVibGljIENhbWVyYTFFbnVtZXJh
dG9yKCkgewotICAgIHRoaXModHJ1ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKTsKLSAgfQotCi0g
IHB1YmxpYyBDYW1lcmExRW51bWVyYXRvcihib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAg
ICB0aGlzLmNhcHR1cmVUb1RleHR1cmUgPSBjYXB0dXJlVG9UZXh0dXJlOwotICB9Ci0KLSAgLy8g
UmV0dXJucyBkZXZpY2UgbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBuZXcgVmlk
ZW9DYXB0dXJlckFuZHJvaWQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGV2
aWNlTmFtZXMoKSB7Ci0gICAgQXJyYXlMaXN0PFN0cmluZz4gbmFtZXNMaXN0ID0gbmV3IEFycmF5
TGlzdDw+KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YS5nZXROdW1iZXJPZkNhbWVyYXMoKTsgKytpKSB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGdldERl
dmljZU5hbWUoaSk7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsKSB7Ci0gICAgICAgIG5hbWVzTGlz
dC5hZGQobmFtZSk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJbmRleDogIiArIGkgKyAiLiAi
ICsgbmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW5kZXg6
ICIgKyBpICsgIi4gRmFpbGVkIHRvIHF1ZXJ5IGNhbWVyYSBuYW1lLiIpOwotICAgICAgfQotICAg
IH0KLSAgICBTdHJpbmdbXSBuYW1lc0FycmF5ID0gbmV3IFN0cmluZ1tuYW1lc0xpc3Quc2l6ZSgp
XTsKLSAgICByZXR1cm4gbmFtZXNMaXN0LnRvQXJyYXkobmFtZXNBcnJheSk7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNGcm9udEZhY2luZyhTdHJpbmcgZGV2aWNlTmFt
ZSkgewotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IGdldENh
bWVyYUluZm8oZ2V0Q2FtZXJhSW5kZXgoZGV2aWNlTmFtZSkpOwotICAgIHJldHVybiBpbmZvICE9
IG51bGwgJiYgaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5m
by5DQU1FUkFfRkFDSU5HX0ZST05UOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29s
ZWFuIGlzQmFja0ZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIGFuZHJvaWQuaGFyZHdh
cmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IGdldENhbWVyYUluZm8oZ2V0Q2FtZXJhSW5kZXgo
ZGV2aWNlTmFtZSkpOwotICAgIHJldHVybiBpbmZvICE9IG51bGwgJiYgaW5mby5mYWNpbmcgPT0g
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0JBQ0s7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9y
dGVkRm9ybWF0cyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIHJldHVybiBnZXRTdXBwb3J0ZWRG
b3JtYXRzKGdldENhbWVyYUluZGV4KGRldmljZU5hbWUpKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0dXJlciBjcmVhdGVDYXB0dXJlcigKLSAgICAgIFN0cmlu
ZyBkZXZpY2VOYW1lLCBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYUV2ZW50c0hhbmRsZXIgZXZl
bnRzSGFuZGxlcikgewotICAgIHJldHVybiBuZXcgQ2FtZXJhMUNhcHR1cmVyKGRldmljZU5hbWUs
IGV2ZW50c0hhbmRsZXIsIGNhcHR1cmVUb1RleHR1cmUpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBnZXRDYW1lcmFJbmZvKGludCBp
bmRleCkgewotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IG5l
dyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvKCk7Ci0gICAgdHJ5IHsKLSAgICAg
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldENhbWVyYUluZm8oaW5kZXgsIGluZm8pOwotICAg
IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZ2V0Q2FtZXJh
SW5mbyBmYWlsZWQgb24gaW5kZXggIiArIGluZGV4LCBlKTsKLSAgICAgIHJldHVybiBudWxsOwot
ICAgIH0KLSAgICByZXR1cm4gaW5mbzsKLSAgfQotCi0gIHN0YXRpYyBzeW5jaHJvbml6ZWQgTGlz
dDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKGludCBjYW1lcmFJZCkgewotICAg
IGlmIChjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzID09IG51bGwpIHsKLSAgICAgIGNhY2hlZFN1cHBv
cnRlZEZvcm1hdHMgPSBuZXcgQXJyYXlMaXN0PExpc3Q8Q2FwdHVyZUZvcm1hdD4+KCk7Ci0gICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9m
Q2FtZXJhcygpOyArK2kpIHsKLSAgICAgICAgY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5hZGQoZW51
bWVyYXRlRm9ybWF0cyhpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjYWNoZWRTdXBw
b3J0ZWRGb3JtYXRzLmdldChjYW1lcmFJZCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBMaXN0
PENhcHR1cmVGb3JtYXQ+IGVudW1lcmF0ZUZvcm1hdHMoaW50IGNhbWVyYUlkKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIkdldCBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY2FtZXJhIGluZGV4ICIgKyBj
YW1lcmFJZCArICIuIik7Ci0gICAgZmluYWwgbG9uZyBzdGFydFRpbWVNcyA9IFN5c3RlbUNsb2Nr
LmVsYXBzZWRSZWFsdGltZSgpOwotICAgIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBh
cmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmEg
PSBudWxsOwotICAgIHRyeSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiT3BlbmluZyBjYW1lcmEg
d2l0aCBpbmRleCAiICsgY2FtZXJhSWQpOwotICAgICAgY2FtZXJhID0gYW5kcm9pZC5oYXJkd2Fy
ZS5DYW1lcmEub3BlbihjYW1lcmFJZCk7Ci0gICAgICBwYXJhbWV0ZXJzID0gY2FtZXJhLmdldFBh
cmFtZXRlcnMoKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIExv
Z2dpbmcuZShUQUcsICJPcGVuIGNhbWVyYSBmYWlsZWQgb24gY2FtZXJhIGluZGV4ICIgKyBjYW1l
cmFJZCwgZSk7Ci0gICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0PigpOwot
ICAgIH0gZmluYWxseSB7Ci0gICAgICBpZiAoY2FtZXJhICE9IG51bGwpIHsKLSAgICAgICAgY2Ft
ZXJhLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCBMaXN0PENhcHR1cmVG
b3JtYXQ+IGZvcm1hdExpc3QgPSBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQ+KCk7Ci0gICAg
dHJ5IHsKLSAgICAgIGludCBtaW5GcHMgPSAwOwotICAgICAgaW50IG1heEZwcyA9IDA7Ci0gICAg
ICBmaW5hbCBMaXN0PGludFtdPiBsaXN0RnBzUmFuZ2UgPSBwYXJhbWV0ZXJzLmdldFN1cHBvcnRl
ZFByZXZpZXdGcHNSYW5nZSgpOwotICAgICAgaWYgKGxpc3RGcHNSYW5nZSAhPSBudWxsKSB7Ci0g
ICAgICAgIC8vIGdldFN1cHBvcnRlZFByZXZpZXdGcHNSYW5nZSgpIHJldHVybnMgYSBzb3J0ZWQg
bGlzdC4gVGFrZSB0aGUgZnBzIHJhbmdlCi0gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGhpZ2hlc3QgZnBzLgotICAgICAgICBmaW5hbCBpbnRbXSByYW5nZSA9IGxpc3RGcHNSYW5nZS5n
ZXQobGlzdEZwc1JhbmdlLnNpemUoKSAtIDEpOwotICAgICAgICBtaW5GcHMgPSByYW5nZVthbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLlBSRVZJRVdfRlBTX01JTl9JTkRFWF07Ci0g
ICAgICAgIG1heEZwcyA9IHJhbmdlW2FuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMu
UFJFVklFV19GUFNfTUFYX0lOREVYXTsKLSAgICAgIH0KLSAgICAgIGZvciAoYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuU2l6ZSBzaXplIDogcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3U2l6
ZXMoKSkgewotICAgICAgICBmb3JtYXRMaXN0LmFkZChuZXcgQ2FwdHVyZUZvcm1hdChzaXplLndp
ZHRoLCBzaXplLmhlaWdodCwgbWluRnBzLCBtYXhGcHMpKTsKLSAgICAgIH0KLSAgICB9IGNhdGNo
IChFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImdldFN1cHBvcnRlZEZvcm1h
dHMoKSBmYWlsZWQgb24gY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCwgZSk7Ci0gICAgfQotCi0g
ICAgZmluYWwgbG9uZyBlbmRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiR2V0IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjYW1lcmEgaW5k
ZXggIiArIGNhbWVyYUlkICsgIiBkb25lLiIKLSAgICAgICAgICAgICsgIiBUaW1lIHNwZW50OiAi
ICsgKGVuZFRpbWVNcyAtIHN0YXJ0VGltZU1zKSArICIgbXMuIik7Ci0gICAgcmV0dXJuIGZvcm1h
dExpc3Q7Ci0gIH0KLQotICAvLyBDb252ZXJ0IGZyb20gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
U2l6ZSB0byBTaXplLgotICBzdGF0aWMgTGlzdDxTaXplPiBjb252ZXJ0U2l6ZXMoTGlzdDxhbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5TaXplPiBjYW1lcmFTaXplcykgewotICAgIGZpbmFsIExpc3Q8
U2l6ZT4gc2l6ZXMgPSBuZXcgQXJyYXlMaXN0PFNpemU+KCk7Ci0gICAgZm9yIChhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYS5TaXplIHNpemUgOiBjYW1lcmFTaXplcykgewotICAgICAgc2l6ZXMuYWRk
KG5ldyBTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KSk7Ci0gICAgfQotICAgIHJldHVybiBz
aXplczsKLSAgfQotCi0gIC8vIENvbnZlcnQgZnJvbSBpbnRbMl0gdG8gQ2FwdHVyZUZvcm1hdC5G
cmFtZXJhdGVSYW5nZS4KLSAgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5n
ZT4gY29udmVydEZyYW1lcmF0ZXMoTGlzdDxpbnRbXT4gYXJyYXlSYW5nZXMpIHsKLSAgICBmaW5h
bCBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IHJhbmdlcyA9IG5ldyBBcnJheUxp
c3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4oKTsKLSAgICBmb3IgKGludFtdIHJhbmdl
IDogYXJyYXlSYW5nZXMpIHsKLSAgICAgIHJhbmdlcy5hZGQobmV3IENhcHR1cmVGb3JtYXQuRnJh
bWVyYXRlUmFuZ2UoCi0gICAgICAgICAgcmFuZ2VbYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFy
YW1ldGVycy5QUkVWSUVXX0ZQU19NSU5fSU5ERVhdLAotICAgICAgICAgIHJhbmdlW2FuZHJvaWQu
aGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMuUFJFVklFV19GUFNfTUFYX0lOREVYXSkpOwotICAg
IH0KLSAgICByZXR1cm4gcmFuZ2VzOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgY2FtZXJhIGlu
ZGV4IGZvciBjYW1lcmEgd2l0aCBuYW1lIHxkZXZpY2VOYW1lfCwgb3IgdGhyb3dzIElsbGVnYWxB
cmd1bWVudEV4Y2VwdGlvbgotICAvLyBpZiBubyBzdWNoIGNhbWVyYSBjYW4gYmUgZm91bmQuCi0g
IHN0YXRpYyBpbnQgZ2V0Q2FtZXJhSW5kZXgoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiZ2V0Q2FtZXJhSW5kZXg6ICIgKyBkZXZpY2VOYW1lKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9mQ2FtZXJhcygp
OyArK2kpIHsKLSAgICAgIGlmIChkZXZpY2VOYW1lLmVxdWFscyhnZXREZXZpY2VOYW1lKGkpKSkg
ewotICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhyb3cgbmV3IElsbGVn
YWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gc3VjaCBjYW1lcmE6ICIgKyBkZXZpY2VOYW1lKTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSB3aXRoIGNhbWVyYSBpbmRl
eC4gUmV0dXJucyBudWxsIGlmIHRoZQotICAvLyBjYW1lcmEgY2FuIG5vdCBiZSB1c2VkLgotICBz
dGF0aWMgU3RyaW5nIGdldERldmljZU5hbWUoaW50IGluZGV4KSB7Ci0gICAgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvID0gZ2V0Q2FtZXJhSW5mbyhpbmRleCk7Ci0gICAg
aWYgKGluZm8gPT0gbnVsbCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgU3Ry
aW5nIGZhY2luZyA9Ci0gICAgICAgIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfRlJPTlQpID8gImZyb250IiA6ICJiYWNrIjsK
LSAgICByZXR1cm4gIkNhbWVyYSAiICsgaW5kZXggKyAiLCBGYWNpbmcgIiArIGZhY2luZyArICIs
IE9yaWVudGF0aW9uICIgKyBpbmZvLm9yaWVudGF0aW9uOwotICB9Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0NhbWVyYTFTZXNzaW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9DYW1lcmExU2Vzc2lvbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0NhbWVyYTFTZXNzaW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDQgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5k
cm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0
IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1p
bXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2Vw
dGlvbjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5MaXN0
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IG9yZy53ZWJy
dGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5NZXRyaWNzLkhpc3RvZ3JhbTsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9u
IikKLXB1YmxpYyBjbGFzcyBDYW1lcmExU2Vzc2lvbiBpbXBsZW1lbnRzIENhbWVyYVNlc3Npb24g
ewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYTFTZXNzaW9uIjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9DQVBUVVJFX0JVRkZFUlMgPSAz
OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmExU3RhcnRUaW1lTXNI
aXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFuZHJvaWQu
Q2FtZXJhMS5TdGFydFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIEhpc3RvZ3JhbSBjYW1lcmExU3RvcFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dy
YW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmExLlN0b3BUaW1lTXMiLCAxLCAx
MDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMVJlc29s
dXRpb25IaXN0b2dyYW0gPSBIaXN0b2dyYW0uY3JlYXRlRW51bWVyYXRpb24oCi0gICAgICAiV2Vi
UlRDLkFuZHJvaWQuQ2FtZXJhMS5SZXNvbHV0aW9uIiwgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lk
LkNPTU1PTl9SRVNPTFVUSU9OUy5zaXplKCkpOwotCi0gIHByaXZhdGUgc3RhdGljIGVudW0gU2Vz
c2lvblN0YXRlIHsgUlVOTklORywgU1RPUFBFRCB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVy
IGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgRXZlbnRzIGV2ZW50czsKLSAg
cHJpdmF0ZSBmaW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmU7Ci0gIHByaXZhdGUgZmluYWwg
Q29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gIHByaXZhdGUgZmluYWwgaW50IGNhbWVy
YUlkOwotICBwcml2YXRlIGZpbmFsIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgaGVp
Z2h0OwotICBwcml2YXRlIGZpbmFsIGludCBmcmFtZXJhdGU7Ci0gIHByaXZhdGUgZmluYWwgYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhOwotICBwcml2YXRlIGZpbmFsIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbzsKLSAgcHJpdmF0ZSBmaW5hbCBDYXB0dXJlRm9y
bWF0IGNhcHR1cmVGb3JtYXQ7Ci0gIC8vIFVzZWQgb25seSBmb3Igc3RhdHMuIE9ubHkgdXNlZCBv
biB0aGUgY2FtZXJhIHRocmVhZC4KLSAgcHJpdmF0ZSBmaW5hbCBsb25nIGNvbnN0cnVjdGlvblRp
bWVOczsgLy8gQ29uc3RydWN0aW9uIHRpbWUgb2YgdGhpcyBjbGFzcy4KLQotICBwcml2YXRlIFNl
c3Npb25TdGF0ZSBzdGF0ZTsKLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVSZXBvcnRlZCA9
IGZhbHNlOwotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGUoZmluYWwgQ3JlYXRlU2Vzc2lv
bkNhbGxiYWNrIGNhbGxiYWNrLCBmaW5hbCBFdmVudHMgZXZlbnRzLAotICAgICAgZmluYWwgYm9v
bGVhbiBjYXB0dXJlVG9UZXh0dXJlLCBmaW5hbCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwK
LSAgICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBm
aW5hbCBpbnQgY2FtZXJhSWQsIGZpbmFsIGludCB3aWR0aCwKLSAgICAgIGZpbmFsIGludCBoZWln
aHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBmaW5hbCBsb25nIGNvbnN0cnVjdGlvblRp
bWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIExvZ2dpbmcuZChUQUcsICJPcGVuIGNhbWVy
YSAiICsgY2FtZXJhSWQpOwotICAgIGV2ZW50cy5vbkNhbWVyYU9wZW5pbmcoKTsKLQotICAgIGZp
bmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYTsKLSAgICB0cnkgewotICAgICAgY2Ft
ZXJhID0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEub3BlbihjYW1lcmFJZCk7Ci0gICAgfSBjYXRj
aCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBjYWxsYmFjay5vbkZhaWx1cmUoZS5nZXRN
ZXNzYWdlKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBjYW1l
cmEuc2V0UHJldmlld1RleHR1cmUoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1
cmUoKSk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgY2FtZXJhLnJlbGVh
c2UoKTsKLSAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJh
SW5mbyBpbmZvID0gbmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8oKTsKLSAg
ICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXRDYW1lcmFJbmZvKGNhbWVyYUlkLCBpbmZvKTsK
LQotICAgIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVy
cyA9IGNhbWVyYS5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgZmluYWwgQ2FwdHVyZUZvcm1hdCBjYXB0
dXJlRm9ybWF0ID0KLSAgICAgICAgZmluZENsb3Nlc3RDYXB0dXJlRm9ybWF0KHBhcmFtZXRlcnMs
IHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgZmluYWwgU2l6ZSBwaWN0dXJlU2l6ZSA9
IGZpbmRDbG9zZXN0UGljdHVyZVNpemUocGFyYW1ldGVycywgd2lkdGgsIGhlaWdodCk7Ci0KLSAg
ICB1cGRhdGVDYW1lcmFQYXJhbWV0ZXJzKGNhbWVyYSwgcGFyYW1ldGVycywgY2FwdHVyZUZvcm1h
dCwgcGljdHVyZVNpemUsIGNhcHR1cmVUb1RleHR1cmUpOwotCi0gICAgLy8gSW5pdGlhbGl6ZSB0
aGUgY2FwdHVyZSBidWZmZXJzLgotICAgIGlmICghY2FwdHVyZVRvVGV4dHVyZSkgewotICAgICAg
ZmluYWwgaW50IGZyYW1lU2l6ZSA9IGNhcHR1cmVGb3JtYXQuZnJhbWVTaXplKCk7Ci0gICAgICBm
b3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9DQVBUVVJFX0JVRkZFUlM7ICsraSkgewotICAg
ICAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qo
ZnJhbWVTaXplKTsKLSAgICAgICAgY2FtZXJhLmFkZENhbGxiYWNrQnVmZmVyKGJ1ZmZlci5hcnJh
eSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDYWxjdWxhdGUgb3JpZW50YXRpb24gbWFu
dWFsbHkgYW5kIHNlbmQgaXQgYXMgQ1ZPIGluc3RlZC4KLSAgICBjYW1lcmEuc2V0RGlzcGxheU9y
aWVudGF0aW9uKDAgLyogZGVncmVlcyAqLyk7Ci0KLSAgICBjYWxsYmFjay5vbkRvbmUoCi0gICAg
ICAgIG5ldyBDYW1lcmExU2Vzc2lvbihldmVudHMsIGNhcHR1cmVUb1RleHR1cmUsIGFwcGxpY2F0
aW9uQ29udGV4dCwgc3VyZmFjZVRleHR1cmVIZWxwZXIsCi0gICAgICAgICAgICBjYW1lcmFJZCwg
d2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlLCBjYW1lcmEsIGluZm8sIGNhcHR1cmVGb3JtYXQsIGNv
bnN0cnVjdGlvblRpbWVOcykpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1cGRhdGVD
YW1lcmFQYXJhbWV0ZXJzKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSwKLSAgICAgIGFu
ZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVycywgQ2FwdHVyZUZvcm1h
dCBjYXB0dXJlRm9ybWF0LCBTaXplIHBpY3R1cmVTaXplLAotICAgICAgYm9vbGVhbiBjYXB0dXJl
VG9UZXh0dXJlKSB7Ci0gICAgZmluYWwgTGlzdDxTdHJpbmc+IGZvY3VzTW9kZXMgPSBwYXJhbWV0
ZXJzLmdldFN1cHBvcnRlZEZvY3VzTW9kZXMoKTsKLQotICAgIHBhcmFtZXRlcnMuc2V0UHJldmll
d0Zwc1JhbmdlKGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1pbiwgY2FwdHVyZUZvcm1hdC5mcmFt
ZXJhdGUubWF4KTsKLSAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdTaXplKGNhcHR1cmVGb3JtYXQu
d2lkdGgsIGNhcHR1cmVGb3JtYXQuaGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLnNldFBpY3R1cmVT
aXplKHBpY3R1cmVTaXplLndpZHRoLCBwaWN0dXJlU2l6ZS5oZWlnaHQpOwotICAgIGlmICghY2Fw
dHVyZVRvVGV4dHVyZSkgewotICAgICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3Rm9ybWF0KGNhcHR1
cmVGb3JtYXQuaW1hZ2VGb3JtYXQpOwotICAgIH0KLQotICAgIGlmIChwYXJhbWV0ZXJzLmlzVmlk
ZW9TdGFiaWxpemF0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0VmlkZW9T
dGFiaWxpemF0aW9uKHRydWUpOwotICAgIH0KLSAgICBpZiAoZm9jdXNNb2Rlcy5jb250YWlucyhh
bmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVfQ09OVElOVU9VU19W
SURFTykpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0Rm9jdXNNb2RlKGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLlBhcmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKTsKLSAgICB9Ci0g
ICAgY2FtZXJhLnNldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBDYXB0dXJlRm9ybWF0IGZpbmRDbG9zZXN0Q2FwdHVyZUZvcm1hdCgKLSAgICAgIGFuZHJv
aWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVycywgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgLy8gRmluZCBjbG9zZXN0IHN1cHBvcnRlZCBm
b3JtYXQgZm9yIHx3aWR0aHwgeCB8aGVpZ2h0fCBAIHxmcmFtZXJhdGV8LgotICAgIGZpbmFsIExp
c3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gc3VwcG9ydGVkRnJhbWVyYXRlcyA9Ci0g
ICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRGcmFtZXJhdGVzKHBhcmFtZXRlcnMuZ2V0
U3VwcG9ydGVkUHJldmlld0Zwc1JhbmdlKCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJBdmFpbGFi
bGUgZnBzIHJhbmdlczogIiArIHN1cHBvcnRlZEZyYW1lcmF0ZXMpOwotCi0gICAgZmluYWwgQ2Fw
dHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBmcHNSYW5nZSA9Ci0gICAgICAgIENhbWVyYUVudW1l
cmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2Uoc3VwcG9ydGVk
RnJhbWVyYXRlcywgZnJhbWVyYXRlKTsKLQotICAgIGZpbmFsIFNpemUgcHJldmlld1NpemUgPSBD
YW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0gICAgICAg
IENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZFBy
ZXZpZXdTaXplcygpKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgQ2FtZXJhRW51bWVyYXRpb25BbmRy
b2lkLnJlcG9ydENhbWVyYVJlc29sdXRpb24oY2FtZXJhMVJlc29sdXRpb25IaXN0b2dyYW0sIHBy
ZXZpZXdTaXplKTsKLQotICAgIHJldHVybiBuZXcgQ2FwdHVyZUZvcm1hdChwcmV2aWV3U2l6ZS53
aWR0aCwgcHJldmlld1NpemUuaGVpZ2h0LCBmcHNSYW5nZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBTaXplIGZpbmRDbG9zZXN0UGljdHVyZVNpemUoCi0gICAgICBhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIGludCB3aWR0aCwgaW50IGhlaWdodCkgewot
ICAgIHJldHVybiBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNp
emUoCi0gICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJzLmdl
dFN1cHBvcnRlZFBpY3R1cmVTaXplcygpKSwgd2lkdGgsIGhlaWdodCk7Ci0gIH0KLQotICBwcml2
YXRlIENhbWVyYTFTZXNzaW9uKEV2ZW50cyBldmVudHMsIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVy
ZSwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBTdXJmYWNlVGV4dHVyZUhlbHBl
ciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgaW50IGNhbWVyYUlkLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCBmcmFtZXJhdGUsCi0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmEs
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbywKLSAgICAgIENhcHR1cmVG
b3JtYXQgY2FwdHVyZUZvcm1hdCwgbG9uZyBjb25zdHJ1Y3Rpb25UaW1lTnMpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiQ3JlYXRlIG5ldyBjYW1lcmExIHNlc3Npb24gb24gY2FtZXJhICIgKyBjYW1l
cmFJZCk7Ci0KLSAgICB0aGlzLmNhbWVyYVRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwot
ICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICAgIHRoaXMuY2FwdHVyZVRvVGV4dHVyZSA9IGNh
cHR1cmVUb1RleHR1cmU7Ci0gICAgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHQgPSBhcHBsaWNhdGlv
bkNvbnRleHQ7Ci0gICAgdGhpcy5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJl
SGVscGVyOwotICAgIHRoaXMuY2FtZXJhSWQgPSBjYW1lcmFJZDsKLSAgICB0aGlzLndpZHRoID0g
d2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgdGhpcy5mcmFtZXJhdGUgPSBm
cmFtZXJhdGU7Ci0gICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7Ci0gICAgdGhpcy5pbmZvID0gaW5m
bzsKLSAgICB0aGlzLmNhcHR1cmVGb3JtYXQgPSBjYXB0dXJlRm9ybWF0OwotICAgIHRoaXMuY29u
c3RydWN0aW9uVGltZU5zID0gY29uc3RydWN0aW9uVGltZU5zOwotCi0gICAgc3RhcnRDYXB0dXJp
bmcoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIExv
Z2dpbmcuZChUQUcsICJTdG9wIGNhbWVyYTEgc2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNhbWVyYUlk
KTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoc3RhdGUgIT0gU2Vzc2lv
blN0YXRlLlNUT1BQRUQpIHsKLSAgICAgIGZpbmFsIGxvbmcgc3RvcFN0YXJ0VGltZSA9IFN5c3Rl
bS5uYW5vVGltZSgpOwotICAgICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAgICAg
IHN0b3BJbnRlcm5hbCgpOwotICAgICAgZmluYWwgaW50IHN0b3BUaW1lTXMgPSAoaW50KSBUaW1l
VW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIHN0b3BTdGFydFRp
bWUpOwotICAgICAgY2FtZXJhMVN0b3BUaW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0b3BUaW1l
TXMpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFydENhcHR1cmluZygpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiU3RhcnQgY2FwdHVyaW5nIik7Ci0gICAgY2hlY2tJc09uQ2FtZXJh
VGhyZWFkKCk7Ci0KLSAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5SVU5OSU5HOwotCi0gICAgY2Ft
ZXJhLnNldEVycm9yQ2FsbGJhY2sobmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkVycm9yQ2Fs
bGJhY2soKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoaW50
IGVycm9yLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmEpIHsKLSAgICAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZTsKLSAgICAgICAgaWYgKGVycm9yID09IGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLkNBTUVSQV9FUlJPUl9TRVJWRVJfRElFRCkgewotICAgICAgICAgIGVycm9yTWVzc2FnZSA9
ICJDYW1lcmEgc2VydmVyIGRpZWQhIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBlcnJv
ck1lc3NhZ2UgPSAiQ2FtZXJhIGVycm9yOiAiICsgZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAg
TG9nZ2luZy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgc3RhdGUgPSBTZXNzaW9uU3Rh
dGUuU1RPUFBFRDsKLSAgICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAgICAgIGlmIChlcnJvciA9
PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DQU1FUkFfRVJST1JfRVZJQ1RFRCkgewotICAgICAg
ICAgIGV2ZW50cy5vbkNhbWVyYURpc2Nvbm5lY3RlZChDYW1lcmExU2Vzc2lvbi50aGlzKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBldmVudHMub25DYW1lcmFFcnJvcihDYW1lcmExU2Vz
c2lvbi50aGlzLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0K
LSAgICBpZiAoY2FwdHVyZVRvVGV4dHVyZSkgewotICAgICAgbGlzdGVuRm9yVGV4dHVyZUZyYW1l
cygpOwotICAgIH0gZWxzZSB7Ci0gICAgICBsaXN0ZW5Gb3JCeXRlYnVmZmVyRnJhbWVzKCk7Ci0g
ICAgfQotICAgIHRyeSB7Ci0gICAgICBjYW1lcmEuc3RhcnRQcmV2aWV3KCk7Ci0gICAgfSBjYXRj
aCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5TVE9Q
UEVEOwotICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAgICBldmVudHMub25DYW1lcmFFcnJvcih0
aGlzLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0b3BJ
bnRlcm5hbCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBpbnRlcm5hbCIpOwotICAgIGNo
ZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExp
c3RlbmluZygpOwotCi0gICAgLy8gTm90ZTogc3RvcFByZXZpZXcgb3Igb3RoZXIgZHJpdmVyIGNv
ZGUgbWlnaHQgZGVhZGxvY2suIERlYWRsb2NrIGluCi0gICAgLy8gYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEuX3N0b3BQcmV2aWV3KE5hdGl2ZSBNZXRob2QpIGhhcyBiZWVuIG9ic2VydmVkIG9uCi0g
ICAgLy8gTmV4dXMgNSAoaGFtbWVyaGVhZCksIE9TIHZlcnNpb24gTE1ZNDhJLgotICAgIGNhbWVy
YS5zdG9wUHJldmlldygpOwotICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgZXZlbnRzLm9uQ2Ft
ZXJhQ2xvc2VkKHRoaXMpOwotCi0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgZG9uZSIpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGxpc3RlbkZvclRleHR1cmVGcmFtZXMoKSB7Ci0gICAgc3VyZmFj
ZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyLk9u
VGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICAgIGludCBvZXNU
ZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVzdGFtcE5zKSB7Ci0g
ICAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgICAgIGlmIChzdGF0ZSAhPSBT
ZXNzaW9uU3RhdGUuUlVOTklORykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJUZXh0dXJl
IGZyYW1lIGNhcHR1cmVkIGJ1dCBjYW1lcmEgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuIik7Ci0gICAg
ICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQp
IHsKLSAgICAgICAgICBmaW5hbCBpbnQgc3RhcnRUaW1lTXMgPQotICAgICAgICAgICAgICAoaW50
KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIGNvbnN0
cnVjdGlvblRpbWVOcyk7Ci0gICAgICAgICAgY2FtZXJhMVN0YXJ0VGltZU1zSGlzdG9ncmFtLmFk
ZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0gICAgICAgICAgZmlyc3RGcmFtZVJlcG9ydGVkID0gdHJ1
ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCByb3RhdGlvbiA9IGdldEZyYW1lT3JpZW50YXRp
b24oKTsKLSAgICAgICAgaWYgKGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LkNhbWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19GUk9OVCkgewotICAgICAgICAgIC8vIFVuZG8gdGhl
IG1pcnJvciB0aGF0IHRoZSBPUyAiaGVscHMiIHVzIHdpdGguCi0gICAgICAgICAgLy8gaHR0cDov
L2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEu
aHRtbCNzZXREaXNwbGF5T3JpZW50YXRpb24oaW50KQotICAgICAgICAgIHRyYW5zZm9ybU1hdHJp
eCA9IFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXMoCi0gICAgICAgICAgICAgIHRyYW5z
Zm9ybU1hdHJpeCwgUmVuZGVyZXJDb21tb24uaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgZXZlbnRzLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoQ2FtZXJhMVNlc3Np
b24udGhpcywgY2FwdHVyZUZvcm1hdC53aWR0aCwKLSAgICAgICAgICAgIGNhcHR1cmVGb3JtYXQu
aGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgcm90YXRpb24sIHRpbWVzdGFt
cE5zKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsaXN0ZW5Gb3JC
eXRlYnVmZmVyRnJhbWVzKCkgewotICAgIGNhbWVyYS5zZXRQcmV2aWV3Q2FsbGJhY2tXaXRoQnVm
ZmVyKG5ldyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QcmV2aWV3Q2FsbGJhY2soKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uUHJldmlld0ZyYW1lKGJ5dGVbXSBkYXRh
LCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYWxsYmFja0NhbWVyYSkgewotICAgICAgICBjaGVj
a0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgICBpZiAoY2FsbGJhY2tDYW1lcmEgIT0gY2Ft
ZXJhKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbGxiYWNrIGZyb20gYSBkaWZmZXJl
bnQgY2FtZXJhLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIik7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5SVU5OSU5H
KSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkJ5dGVidWZmZXIgZnJhbWUgY2FwdHVyZWQg
YnV0IGNhbWVyYSBpcyBubyBsb25nZXIgcnVubmluZy4iKTsKLSAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBmaW5hbCBsb25nIGNhcHR1cmVUaW1lTnMgPSBUaW1lVW5pdC5N
SUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0KLSAg
ICAgICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQpIHsKLSAgICAgICAgICBmaW5hbCBpbnQgc3Rh
cnRUaW1lTXMgPQotICAgICAgICAgICAgICAoaW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01p
bGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIGNvbnN0cnVjdGlvblRpbWVOcyk7Ci0gICAgICAgICAg
Y2FtZXJhMVN0YXJ0VGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0gICAg
ICAgICAgZmlyc3RGcmFtZVJlcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGV2
ZW50cy5vbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKENhbWVyYTFTZXNzaW9uLnRoaXMsIGRhdGEs
IGNhcHR1cmVGb3JtYXQud2lkdGgsCi0gICAgICAgICAgICBjYXB0dXJlRm9ybWF0LmhlaWdodCwg
Z2V0RnJhbWVPcmllbnRhdGlvbigpLCBjYXB0dXJlVGltZU5zKTsKLSAgICAgICAgY2FtZXJhLmFk
ZENhbGxiYWNrQnVmZmVyKGRhdGEpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0
ZSBpbnQgZ2V0RGV2aWNlT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IG9yaWVudGF0aW9uID0gMDsK
LQotICAgIFdpbmRvd01hbmFnZXIgd20gPSAoV2luZG93TWFuYWdlcikgYXBwbGljYXRpb25Db250
ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAgc3dpdGNo
ICh3bS5nZXREZWZhdWx0RGlzcGxheSgpLmdldFJvdGF0aW9uKCkpIHsKLSAgICAgIGNhc2UgU3Vy
ZmFjZS5ST1RBVElPTl85MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSA5MDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMTgwOgotICAgICAgICBvcmllbnRhdGlv
biA9IDE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMjcw
OgotICAgICAgICBvcmllbnRhdGlvbiA9IDI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IFN1cmZhY2UuUk9UQVRJT05fMDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9yaWVudGF0aW9u
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBvcmllbnRhdGlvbjsKLSAg
fQotCi0gIHByaXZhdGUgaW50IGdldEZyYW1lT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IHJvdGF0
aW9uID0gZ2V0RGV2aWNlT3JpZW50YXRpb24oKTsKLSAgICBpZiAoaW5mby5mYWNpbmcgPT0gYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0JBQ0spIHsKLSAg
ICAgIHJvdGF0aW9uID0gMzYwIC0gcm90YXRpb247Ci0gICAgfQotICAgIHJldHVybiAoaW5mby5v
cmllbnRhdGlvbiArIHJvdGF0aW9uKSAlIDM2MDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVj
a0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0g
Y2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSkgewotICAgICAgdGhy
b3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhyZWFkIik7Ci0gICAgfQotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlci5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFu
ZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5D
YW1lcmFNYW5hZ2VyOwotCi1AVGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNzIENhbWVyYTJDYXB0
dXJlciBleHRlbmRzIENhbWVyYUNhcHR1cmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNv
bnRleHQ7Ci0gIHByaXZhdGUgZmluYWwgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyOwotCi0g
IHB1YmxpYyBDYW1lcmEyQ2FwdHVyZXIoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgY2FtZXJhTmFt
ZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyKSB7Ci0gICAgc3VwZXIoY2FtZXJh
TmFtZSwgZXZlbnRzSGFuZGxlciwgbmV3IENhbWVyYTJFbnVtZXJhdG9yKGNvbnRleHQpKTsKLQot
ICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgY2FtZXJhTWFuYWdlciA9IChDYW1lcmFN
YW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2FtZXJhU2Vzc2lv
bihDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjayBjcmVhdGVTZXNzaW9uQ2FsbGJh
Y2ssCi0gICAgICBDYW1lcmFTZXNzaW9uLkV2ZW50cyBldmVudHMsIENvbnRleHQgYXBwbGljYXRp
b25Db250ZXh0LAotICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxw
ZXIsIFN0cmluZyBjYW1lcmFOYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICBpbnQg
ZnJhbWVyYXRlKSB7Ci0gICAgQ2FtZXJhMlNlc3Npb24uY3JlYXRlKGNyZWF0ZVNlc3Npb25DYWxs
YmFjaywgZXZlbnRzLCBhcHBsaWNhdGlvbkNvbnRleHQsIGNhbWVyYU1hbmFnZXIsCi0gICAgICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLCBjYW1lcmFOYW1lLCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJh
dGUpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJFbnVtZXJhdG9yLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyRW51bWVyYXRvci5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJFbnVtZXJhdG9y
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNDggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJh
dGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5U
YXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9p
ZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7
Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUNoYXJhY3RlcmlzdGljczsK
LWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWFuYWdlcjsKLWltcG9ydCBh
bmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGE7Ci1pbXBvcnQgYW5kcm9pZC5o
YXJkd2FyZS5jYW1lcmEyLnBhcmFtcy5TdHJlYW1Db25maWd1cmF0aW9uTWFwOwotaW1wb3J0IGFu
ZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBh
bmRyb2lkLnV0aWwuQW5kcm9pZEV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUmFuZ2U7
Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFw
OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBUYXJn
ZXRBcGkoMjEpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMkVudW1lcmF0b3IgaW1wbGVtZW50cyBDYW1l
cmFFbnVtZXJhdG9yIHsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJDYW1l
cmEyRW51bWVyYXRvciI7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGRvdWJsZSBOQU5PX1NFQ09O
RFNfUEVSX1NFQ09ORCA9IDEuMGU5OwotCi0gIC8vIEVhY2ggZW50cnkgY29udGFpbnMgdGhlIHN1
cHBvcnRlZCBmb3JtYXRzIGZvciBhIGdpdmVuIGNhbWVyYSBpbmRleC4gVGhlIGZvcm1hdHMgYXJl
IGVudW1lcmF0ZWQKLSAgLy8gbGF6aWx5IGluIGdldFN1cHBvcnRlZEZvcm1hdHMoKSwgYW5kIGNh
Y2hlZCBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFwPFN0
cmluZywgTGlzdDxDYXB0dXJlRm9ybWF0Pj4gY2FjaGVkU3VwcG9ydGVkRm9ybWF0cyA9Ci0gICAg
ICBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8Q2FwdHVyZUZvcm1hdD4+KCk7Ci0KLSAgZmluYWwg
Q29udGV4dCBjb250ZXh0OwotICBmaW5hbCBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXI7Ci0K
LSAgcHVibGljIENhbWVyYTJFbnVtZXJhdG9yKENvbnRleHQgY29udGV4dCkgewotICAgIHRoaXMu
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5jYW1lcmFNYW5hZ2VyID0gKENhbWVyYU1hbmFn
ZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNBTUVSQV9TRVJWSUNFKTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGV2aWNlTmFtZXMoKSB7Ci0g
ICAgdHJ5IHsKLSAgICAgIHJldHVybiBjYW1lcmFNYW5hZ2VyLmdldENhbWVyYUlkTGlzdCgpOwot
ICAgICAgLy8gT24gQW5kcm9pZCBPUyBwcmUgNC40LjIsIGEgY2xhc3Mgd2lsbCBub3QgbG9hZCBi
ZWNhdXNlIG9mIFZlcmlmeUVycm9yIGlmIGl0IGNvbnRhaW5zIGEKLSAgICAgIC8vIGNhdGNoIHN0
YXRlbWVudCB3aXRoIGFuIEV4Y2VwdGlvbiBmcm9tIGEgbmV3ZXIgQVBJLCBldmVuIGlmIHRoZSBj
b2RlIGlzIG5ldmVyIGV4ZWN1dGVkLgotICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20v
cC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA5MTI5Ci0gICAgfSBjYXRjaCAoLyogQ2FtZXJh
QWNjZXNzRXhjZXB0aW9uICovIEFuZHJvaWRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5l
KFRBRywgIkNhbWVyYSBhY2Nlc3MgZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICByZXR1cm4gbmV3
IFN0cmluZ1tdIHt9OwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVh
biBpc0Zyb250RmFjaW5nKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgQ2FtZXJhQ2hhcmFjdGVy
aXN0aWNzIGNoYXJhY3RlcmlzdGljcyA9IGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhkZXZpY2VO
YW1lKTsKLQotICAgIHJldHVybiBjaGFyYWN0ZXJpc3RpY3MgIT0gbnVsbAotICAgICAgICAmJiBj
aGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5MRU5TX0ZBQ0lORykKLSAg
ICAgICAgPT0gQ2FtZXJhTWV0YWRhdGEuTEVOU19GQUNJTkdfRlJPTlQ7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNCYWNrRmFjaW5nKFN0cmluZyBkZXZpY2VOYW1lKSB7
Ci0gICAgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcyA9IGdldENhbWVyYUNo
YXJhY3RlcmlzdGljcyhkZXZpY2VOYW1lKTsKLQotICAgIHJldHVybiBjaGFyYWN0ZXJpc3RpY3Mg
IT0gbnVsbAotICAgICAgICAmJiBjaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3Rlcmlz
dGljcy5MRU5TX0ZBQ0lORykKLSAgICAgICAgPT0gQ2FtZXJhTWV0YWRhdGEuTEVOU19GQUNJTkdf
QkFDSzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTGlzdDxDYXB0dXJlRm9ybWF0PiBn
ZXRTdXBwb3J0ZWRGb3JtYXRzKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgcmV0dXJuIGdldFN1
cHBvcnRlZEZvcm1hdHMoY29udGV4dCwgZGV2aWNlTmFtZSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FwdHVyZXIoCi0gICAgICBTdHJp
bmcgZGV2aWNlTmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVyIGV2
ZW50c0hhbmRsZXIpIHsKLSAgICByZXR1cm4gbmV3IENhbWVyYTJDYXB0dXJlcihjb250ZXh0LCBk
ZXZpY2VOYW1lLCBldmVudHNIYW5kbGVyKTsKLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhQ2hhcmFj
dGVyaXN0aWNzIGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhTdHJpbmcgZGV2aWNlTmFtZSkgewot
ICAgIHRyeSB7Ci0gICAgICByZXR1cm4gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFDaGFyYWN0ZXJp
c3RpY3MoZGV2aWNlTmFtZSk7Ci0gICAgICAvLyBPbiBBbmRyb2lkIE9TIHByZSA0LjQuMiwgYSBj
bGFzcyB3aWxsIG5vdCBsb2FkIGJlY2F1c2Ugb2YgVmVyaWZ5RXJyb3IgaWYgaXQgY29udGFpbnMg
YQotICAgICAgLy8gY2F0Y2ggc3RhdGVtZW50IHdpdGggYW4gRXhjZXB0aW9uIGZyb20gYSBuZXdl
ciBBUEksIGV2ZW4gaWYgdGhlIGNvZGUgaXMgbmV2ZXIgZXhlY3V0ZWQuCi0gICAgICAvLyBodHRw
czovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0yMDkxMjkKLSAg
ICB9IGNhdGNoICgvKiBDYW1lcmFBY2Nlc3NFeGNlcHRpb24gKi8gQW5kcm9pZEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGFjY2VzcyBleGNlcHRpb246ICIgKyBl
KTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mg
aWYgQVBJIGlzIHN1cHBvcnRlZCBhbmQgYWxsIGNhbWVyYXMgaGF2ZSBiZXR0ZXIgdGhhbiBsZWdh
Y3kgc3VwcG9ydC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N1cHBvcnRlZChD
b250ZXh0IGNvbnRleHQpIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQu
VkVSU0lPTl9DT0RFUy5MT0xMSVBPUCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlciA9IChDYW1lcmFNYW5hZ2VyKSBjb250ZXh0
LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSk7Ci0gICAgdHJ5IHsKLSAg
ICAgIFN0cmluZ1tdIGNhbWVyYUlkcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhSWRMaXN0KCk7
Ci0gICAgICBmb3IgKFN0cmluZyBpZCA6IGNhbWVyYUlkcykgewotICAgICAgICBDYW1lcmFDaGFy
YWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzID0gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFDaGFy
YWN0ZXJpc3RpY3MoaWQpOwotICAgICAgICBpZiAoY2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUwpCi0gICAgICAgICAg
ICA9PSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxf
TEVHQUNZKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICAvLyBPbiBBbmRyb2lkIE9TIHByZSA0LjQuMiwgYSBjbGFzcyB3aWxsIG5vdCBsb2FkIGJl
Y2F1c2Ugb2YgVmVyaWZ5RXJyb3IgaWYgaXQgY29udGFpbnMgYQotICAgICAgLy8gY2F0Y2ggc3Rh
dGVtZW50IHdpdGggYW4gRXhjZXB0aW9uIGZyb20gYSBuZXdlciBBUEksIGV2ZW4gaWYgdGhlIGNv
ZGUgaXMgbmV2ZXIgZXhlY3V0ZWQuCi0gICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9w
L2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0yMDkxMjkKLSAgICB9IGNhdGNoICgvKiBDYW1lcmFB
Y2Nlc3NFeGNlcHRpb24gKi8gQW5kcm9pZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUo
VEFHLCAiQ2FtZXJhIGFjY2VzcyBleGNlcHRpb246ICIgKyBlKTsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBzdGF0aWMgaW50IGdldEZwc1Vu
aXRGYWN0b3IoUmFuZ2U8SW50ZWdlcj5bXSBmcHNSYW5nZXMpIHsKLSAgICBpZiAoZnBzUmFuZ2Vz
Lmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm4gMTAwMDsKLSAgICB9Ci0gICAgcmV0dXJuIGZw
c1Jhbmdlc1swXS5nZXRVcHBlcigpIDwgMTAwMCA/IDEwMDAgOiAxOwotICB9Ci0KLSAgc3RhdGlj
IExpc3Q8U2l6ZT4gZ2V0U3VwcG9ydGVkU2l6ZXMoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNhbWVy
YUNoYXJhY3RlcmlzdGljcykgewotICAgIGZpbmFsIFN0cmVhbUNvbmZpZ3VyYXRpb25NYXAgc3Ry
ZWFtTWFwID0KLSAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuU0NBTEVSX1NUUkVBTV9DT05GSUdVUkFUSU9OX01BUCk7Ci0gICAgZmluYWwgaW50
IHN1cHBvcnRMZXZlbCA9Ci0gICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJh
Q2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMKTsKLQotICAgIGZp
bmFsIGFuZHJvaWQudXRpbC5TaXplW10gbmF0aXZlU2l6ZXMgPSBzdHJlYW1NYXAuZ2V0T3V0cHV0
U2l6ZXMoU3VyZmFjZVRleHR1cmUuY2xhc3MpOwotICAgIGZpbmFsIExpc3Q8U2l6ZT4gc2l6ZXMg
PSBjb252ZXJ0U2l6ZXMobmF0aXZlU2l6ZXMpOwotCi0gICAgLy8gVmlkZW8gbWF5IGJlIHN0cmV0
Y2hlZCBwcmUgTE1SMSBvbiBsZWdhY3kgaW1wbGVtZW50YXRpb25zLgotICAgIC8vIEZpbHRlciBv
dXQgZm9ybWF0cyB0aGF0IGhhdmUgZGlmZmVyZW50IGFzcGVjdCByYXRpbyB0aGFuIHRoZSBzZW5z
b3IgYXJyYXkuCi0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05f
Q09ERVMuTE9MTElQT1BfTVIxCi0gICAgICAgICYmIHN1cHBvcnRMZXZlbCA9PSBDYW1lcmFDaGFy
YWN0ZXJpc3RpY3MuSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxfTEVHQUNZKSB7Ci0gICAg
ICBmaW5hbCBSZWN0IGFjdGl2ZUFycmF5U2l6ZSA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFjdGVy
aXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuU0VOU09SX0lORk9fQUNUSVZFX0FSUkFZ
X1NJWkUpOwotICAgICAgZmluYWwgQXJyYXlMaXN0PFNpemU+IGZpbHRlcmVkU2l6ZXMgPSBuZXcg
QXJyYXlMaXN0PFNpemU+KCk7Ci0KLSAgICAgIGZvciAoU2l6ZSBzaXplIDogc2l6ZXMpIHsKLSAg
ICAgICAgaWYgKGFjdGl2ZUFycmF5U2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQgPT0gYWN0aXZl
QXJyYXlTaXplLmhlaWdodCgpICogc2l6ZS53aWR0aCkgewotICAgICAgICAgIGZpbHRlcmVkU2l6
ZXMuYWRkKHNpemUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBmaWx0ZXJl
ZFNpemVzOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gc2l6ZXM7Ci0gICAgfQotICB9Ci0K
LSAgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhDb250ZXh0
IGNvbnRleHQsIFN0cmluZyBjYW1lcmFJZCkgewotICAgIHJldHVybiBnZXRTdXBwb3J0ZWRGb3Jt
YXRzKAotICAgICAgICAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENv
bnRleHQuQ0FNRVJBX1NFUlZJQ0UpLCBjYW1lcmFJZCk7Ci0gIH0KLQotICBzdGF0aWMgTGlzdDxD
YXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKENhbWVyYU1hbmFnZXIgY2FtZXJhTWFu
YWdlciwgU3RyaW5nIGNhbWVyYUlkKSB7Ci0gICAgc3luY2hyb25pemVkIChjYWNoZWRTdXBwb3J0
ZWRGb3JtYXRzKSB7Ci0gICAgICBpZiAoY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5jb250YWluc0tl
eShjYW1lcmFJZCkpIHsKLSAgICAgICAgcmV0dXJuIGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMuZ2V0
KGNhbWVyYUlkKTsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkdldCBzdXBwb3J0
ZWQgZm9ybWF0cyBmb3IgY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIuIik7Ci0gICAgICBm
aW5hbCBsb25nIHN0YXJ0VGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0K
LSAgICAgIGZpbmFsIENhbWVyYUNoYXJhY3RlcmlzdGljcyBjYW1lcmFDaGFyYWN0ZXJpc3RpY3M7
Ci0gICAgICB0cnkgewotICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MgPSBjYW1lcmFNYW5h
Z2VyLmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhjYW1lcmFJZCk7Ci0gICAgICB9IGNhdGNoIChF
eGNlcHRpb24gZXgpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgImdldENhbWVyYUNoYXJhY3Rl
cmlzdGljcygpOiAiICsgZXgpOwotICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxDYXB0dXJl
Rm9ybWF0PigpOwotICAgICAgfQotCi0gICAgICBmaW5hbCBTdHJlYW1Db25maWd1cmF0aW9uTWFw
IHN0cmVhbU1hcCA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuU0NBTEVSX1NUUkVBTV9DT05GSUdVUkFUSU9OX01BUCk7Ci0KLSAgICAg
IFJhbmdlPEludGVnZXI+W10gZnBzUmFuZ2VzID0KLSAgICAgICAgICBjYW1lcmFDaGFyYWN0ZXJp
c3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05UUk9MX0FFX0FWQUlMQUJMRV9UQVJH
RVRfRlBTX1JBTkdFUyk7Ci0gICAgICBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+
IGZyYW1lcmF0ZVJhbmdlcyA9Ci0gICAgICAgICAgY29udmVydEZyYW1lcmF0ZXMoZnBzUmFuZ2Vz
LCBnZXRGcHNVbml0RmFjdG9yKGZwc1JhbmdlcykpOwotICAgICAgTGlzdDxTaXplPiBzaXplcyA9
IGdldFN1cHBvcnRlZFNpemVzKGNhbWVyYUNoYXJhY3RlcmlzdGljcyk7Ci0KLSAgICAgIGludCBk
ZWZhdWx0TWF4RnBzID0gMDsKLSAgICAgIGZvciAoQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5n
ZSBmcmFtZXJhdGVSYW5nZSA6IGZyYW1lcmF0ZVJhbmdlcykgewotICAgICAgICBkZWZhdWx0TWF4
RnBzID0gTWF0aC5tYXgoZGVmYXVsdE1heEZwcywgZnJhbWVyYXRlUmFuZ2UubWF4KTsKLSAgICAg
IH0KLQotICAgICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0PiBmb3JtYXRMaXN0ID0gbmV3IEFy
cmF5TGlzdDxDYXB0dXJlRm9ybWF0PigpOwotICAgICAgZm9yIChTaXplIHNpemUgOiBzaXplcykg
ewotICAgICAgICBsb25nIG1pbkZyYW1lRHVyYXRpb25OcyA9IDA7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgbWluRnJhbWVEdXJhdGlvbk5zID0gc3RyZWFtTWFwLmdldE91dHB1dE1pbkZyYW1l
RHVyYXRpb24oCi0gICAgICAgICAgICAgIFN1cmZhY2VUZXh0dXJlLmNsYXNzLCBuZXcgYW5kcm9p
ZC51dGlsLlNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgfSBjYXRjaCAo
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAvLyBnZXRPdXRwdXRNaW5GcmFtZUR1cmF0aW9uKCkg
aXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgZGV2aWNlcy4gSWdub3JlIHNpbGVudGx5LgotICAgICAg
ICB9Ci0gICAgICAgIGZpbmFsIGludCBtYXhGcHMgPSAobWluRnJhbWVEdXJhdGlvbk5zID09IDAp
Ci0gICAgICAgICAgICA/IGRlZmF1bHRNYXhGcHMKLSAgICAgICAgICAgIDogKGludCkgTWF0aC5y
b3VuZChOQU5PX1NFQ09ORFNfUEVSX1NFQ09ORCAvIG1pbkZyYW1lRHVyYXRpb25OcykgKiAxMDAw
OwotICAgICAgICBmb3JtYXRMaXN0LmFkZChuZXcgQ2FwdHVyZUZvcm1hdChzaXplLndpZHRoLCBz
aXplLmhlaWdodCwgMCwgbWF4RnBzKSk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3JtYXQ6
ICIgKyBzaXplLndpZHRoICsgIngiICsgc2l6ZS5oZWlnaHQgKyAiQCIgKyBtYXhGcHMpOwotICAg
ICAgfQotCi0gICAgICBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzLnB1dChjYW1lcmFJZCwgZm9ybWF0
TGlzdCk7Ci0gICAgICBmaW5hbCBsb25nIGVuZFRpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRS
ZWFsdGltZSgpOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkdldCBzdXBwb3J0ZWQgZm9ybWF0cyBm
b3IgY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIgZG9uZS4iCi0gICAgICAgICAgICAgICsg
IiBUaW1lIHNwZW50OiAiICsgKGVuZFRpbWVNcyAtIHN0YXJ0VGltZU1zKSArICIgbXMuIik7Ci0g
ICAgICByZXR1cm4gZm9ybWF0TGlzdDsKLSAgICB9Ci0gIH0KLQotICAvLyBDb252ZXJ0IGZyb20g
YW5kcm9pZC51dGlsLlNpemUgdG8gU2l6ZS4KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxTaXplPiBj
b252ZXJ0U2l6ZXMoYW5kcm9pZC51dGlsLlNpemVbXSBjYW1lcmFTaXplcykgewotICAgIGZpbmFs
IExpc3Q8U2l6ZT4gc2l6ZXMgPSBuZXcgQXJyYXlMaXN0PFNpemU+KCk7Ci0gICAgZm9yIChhbmRy
b2lkLnV0aWwuU2l6ZSBzaXplIDogY2FtZXJhU2l6ZXMpIHsKLSAgICAgIHNpemVzLmFkZChuZXcg
U2l6ZShzaXplLmdldFdpZHRoKCksIHNpemUuZ2V0SGVpZ2h0KCkpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHNpemVzOwotICB9Ci0KLSAgLy8gQ29udmVydCBmcm9tIGFuZHJvaWQudXRpbC5SYW5nZTxJ
bnRlZ2VyPiB0byBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlLgotICBzdGF0aWMgTGlzdDxD
YXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBjb252ZXJ0RnJhbWVyYXRlcygKLSAgICAgIFJh
bmdlPEludGVnZXI+W10gYXJyYXlSYW5nZXMsIGludCB1bml0RmFjdG9yKSB7Ci0gICAgZmluYWwg
TGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiByYW5nZXMgPSBuZXcgQXJyYXlMaXN0
PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+KCk7Ci0gICAgZm9yIChSYW5nZTxJbnRlZ2Vy
PiByYW5nZSA6IGFycmF5UmFuZ2VzKSB7Ci0gICAgICByYW5nZXMuYWRkKG5ldyBDYXB0dXJlRm9y
bWF0LkZyYW1lcmF0ZVJhbmdlKAotICAgICAgICAgIHJhbmdlLmdldExvd2VyKCkgKiB1bml0RmFj
dG9yLCByYW5nZS5nZXRVcHBlcigpICogdW5pdEZhY3RvcikpOwotICAgIH0KLSAgICByZXR1cm4g
cmFuZ2VzOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJTZXNzaW9uLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyU2Vzc2lvbi5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJTZXNzaW9uLmphdmEJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0NTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsK
LWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNz
LlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFB
Y2Nlc3NFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUNh
cHR1cmVTZXNzaW9uOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFDaGFy
YWN0ZXJpc3RpY3M7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURldmlj
ZTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWFuYWdlcjsKLWltcG9y
dCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGE7Ci1pbXBvcnQgYW5kcm9p
ZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVGYWlsdXJlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdh
cmUuY2FtZXJhMi5DYXB0dXJlUmVxdWVzdDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1p
bXBvcnQgYW5kcm9pZC51dGlsLlJhbmdlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwot
aW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQu
VGltZVVuaXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2Fw
dHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLk1ldHJpY3MuSGlzdG9ncmFtOwotCi1AVGFy
Z2V0QXBpKDIxKQotcHVibGljIGNsYXNzIENhbWVyYTJTZXNzaW9uIGltcGxlbWVudHMgQ2FtZXJh
U2Vzc2lvbiB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJhMlNl
c3Npb24iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmEyU3RhcnRU
aW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFu
ZHJvaWQuQ2FtZXJhMi5TdGFydFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmEyU3RvcFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBI
aXN0b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmEyLlN0b3BUaW1lTXMi
LCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJh
MlJlc29sdXRpb25IaXN0b2dyYW0gPSBIaXN0b2dyYW0uY3JlYXRlRW51bWVyYXRpb24oCi0gICAg
ICAiV2ViUlRDLkFuZHJvaWQuQ2FtZXJhMi5SZXNvbHV0aW9uIiwgQ2FtZXJhRW51bWVyYXRpb25B
bmRyb2lkLkNPTU1PTl9SRVNPTFVUSU9OUy5zaXplKCkpOwotCi0gIHByaXZhdGUgc3RhdGljIGVu
dW0gU2Vzc2lvblN0YXRlIHsgUlVOTklORywgU1RPUFBFRCB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBI
YW5kbGVyIGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgQ3JlYXRlU2Vzc2lv
bkNhbGxiYWNrIGNhbGxiYWNrOwotICBwcml2YXRlIGZpbmFsIEV2ZW50cyBldmVudHM7Ci0gIHBy
aXZhdGUgZmluYWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gIHByaXZhdGUgZmluYWwg
Q2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyOwotICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0
dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBj
YW1lcmFJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgZmluYWwgaW50
IGhlaWdodDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVyYXRlOwotCi0gIC8vIEluaXRpYWxp
emVkIGF0IHN0YXJ0Ci0gIHByaXZhdGUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNhbWVyYUNoYXJh
Y3RlcmlzdGljczsKLSAgcHJpdmF0ZSBpbnQgY2FtZXJhT3JpZW50YXRpb247Ci0gIHByaXZhdGUg
Ym9vbGVhbiBpc0NhbWVyYUZyb250RmFjaW5nOwotICBwcml2YXRlIGludCBmcHNVbml0RmFjdG9y
OwotICBwcml2YXRlIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdDsKLQotICAvLyBJbml0aWFs
aXplZCB3aGVuIGNhbWVyYSBvcGVucwotICBwcml2YXRlIENhbWVyYURldmljZSBjYW1lcmFEZXZp
Y2U7Ci0gIHByaXZhdGUgU3VyZmFjZSBzdXJmYWNlOwotCi0gIC8vIEluaXRpYWxpemVkIHdoZW4g
Y2FwdHVyZSBzZXNzaW9uIGlzIGNyZWF0ZWQKLSAgcHJpdmF0ZSBDYW1lcmFDYXB0dXJlU2Vzc2lv
biBjYXB0dXJlU2Vzc2lvbjsKLQotICAvLyBTdGF0ZQotICBwcml2YXRlIFNlc3Npb25TdGF0ZSBz
dGF0ZSA9IFNlc3Npb25TdGF0ZS5SVU5OSU5HOwotICBwcml2YXRlIGJvb2xlYW4gZmlyc3RGcmFt
ZVJlcG9ydGVkID0gZmFsc2U7Ci0KLSAgLy8gVXNlZCBvbmx5IGZvciBzdGF0cy4gT25seSB1c2Vk
IG9uIHRoZSBjYW1lcmEgdGhyZWFkLgotICBwcml2YXRlIGZpbmFsIGxvbmcgY29uc3RydWN0aW9u
VGltZU5zOyAvLyBDb25zdHJ1Y3Rpb24gdGltZSBvZiB0aGlzIGNsYXNzLgotCi0gIHByaXZhdGUg
Y2xhc3MgQ2FtZXJhU3RhdGVDYWxsYmFjayBleHRlbmRzIENhbWVyYURldmljZS5TdGF0ZUNhbGxi
YWNrIHsKLSAgICBwcml2YXRlIFN0cmluZyBnZXRFcnJvckRlc2NyaXB0aW9uKGludCBlcnJvckNv
ZGUpIHsKLSAgICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2
aWNlLlN0YXRlQ2FsbGJhY2suRVJST1JfQ0FNRVJBX0RFVklDRToKLSAgICAgICAgICByZXR1cm4g
IkNhbWVyYSBkZXZpY2UgaGFzIGVuY291bnRlcmVkIGEgZmF0YWwgZXJyb3IuIjsKLSAgICAgICAg
Y2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJPUl9DQU1FUkFfRElTQUJMRUQ6Ci0g
ICAgICAgICAgcmV0dXJuICJDYW1lcmEgZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQgZHVlIHRv
IGEgZGV2aWNlIHBvbGljeS4iOwotICAgICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0ZUNhbGxi
YWNrLkVSUk9SX0NBTUVSQV9JTl9VU0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgZGV2aWNl
IGlzIGluIHVzZSBhbHJlYWR5LiI7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2Fs
bGJhY2suRVJST1JfQ0FNRVJBX1NFUlZJQ0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgc2Vy
dmljZSBoYXMgZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvci4iOwotICAgICAgICBjYXNlIENhbWVy
YURldmljZS5TdGF0ZUNhbGxiYWNrLkVSUk9SX01BWF9DQU1FUkFTX0lOX1VTRToKLSAgICAgICAg
ICByZXR1cm4gIkNhbWVyYSBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCBiZWNhdXNlIgotICAg
ICAgICAgICAgICArICIgdGhlcmUgYXJlIHRvbyBtYW55IG90aGVyIG9wZW4gY2FtZXJhIGRldmlj
ZXMuIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gIlVua25vd24gY2FtZXJh
IGVycm9yOiAiICsgZXJyb3JDb2RlOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uRGlzY29ubmVjdGVkKENhbWVyYURldmljZSBjYW1lcmEpIHsKLSAg
ICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgZmluYWwgYm9vbGVhbiBzdGFydEZh
aWx1cmUgPSAoY2FwdHVyZVNlc3Npb24gPT0gbnVsbCk7Ci0gICAgICBzdGF0ZSA9IFNlc3Npb25T
dGF0ZS5TVE9QUEVEOwotICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAgICBpZiAoc3RhcnRGYWls
dXJlKSB7Ci0gICAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZSgiQ2FtZXJhIGRpc2Nvbm5lY3RlZCAv
IGV2aWN0ZWQuIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBldmVudHMub25DYW1lcmFEaXNj
b25uZWN0ZWQoQ2FtZXJhMlNlc3Npb24udGhpcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25FcnJvcihDYW1lcmFEZXZpY2UgY2FtZXJhLCBpbnQg
ZXJyb3JDb2RlKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHJlcG9y
dEVycm9yKGdldEVycm9yRGVzY3JpcHRpb24oZXJyb3JDb2RlKSk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25PcGVuZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYSkgewot
ICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJD
YW1lcmEgb3BlbmVkLiIpOwotICAgICAgY2FtZXJhRGV2aWNlID0gY2FtZXJhOwotCi0gICAgICBm
aW5hbCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlSGVscGVy
LmdldFN1cmZhY2VUZXh0dXJlKCk7Ci0gICAgICBzdXJmYWNlVGV4dHVyZS5zZXREZWZhdWx0QnVm
ZmVyU2l6ZShjYXB0dXJlRm9ybWF0LndpZHRoLCBjYXB0dXJlRm9ybWF0LmhlaWdodCk7Ci0gICAg
ICBzdXJmYWNlID0gbmV3IFN1cmZhY2Uoc3VyZmFjZVRleHR1cmUpOwotICAgICAgdHJ5IHsKLSAg
ICAgICAgY2FtZXJhLmNyZWF0ZUNhcHR1cmVTZXNzaW9uKAotICAgICAgICAgICAgQXJyYXlzLmFz
TGlzdChzdXJmYWNlKSwgbmV3IENhcHR1cmVTZXNzaW9uQ2FsbGJhY2soKSwgY2FtZXJhVGhyZWFk
SGFuZGxlcik7Ci0gICAgICB9IGNhdGNoIChDYW1lcmFBY2Nlc3NFeGNlcHRpb24gZSkgewotICAg
ICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBjYXB0dXJlIHNlc3Npb24uICIgKyBl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIG9uQ2xvc2VkKENhbWVyYURldmljZSBjYW1lcmEpIHsKLSAgICAgIGNoZWNr
SXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIGRldmlj
ZSBjbG9zZWQuIik7Ci0gICAgICBldmVudHMub25DYW1lcmFDbG9zZWQoQ2FtZXJhMlNlc3Npb24u
dGhpcyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDYXB0dXJlU2Vzc2lvbkNhbGxi
YWNrIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZVNlc3Npb24uU3RhdGVDYWxsYmFjayB7Ci0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25maWd1cmVGYWlsZWQoQ2FtZXJhQ2FwdHVyZVNl
c3Npb24gc2Vzc2lvbikgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBz
ZXNzaW9uLmNsb3NlKCk7Ci0gICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNvbmZpZ3VyZSBj
YXB0dXJlIHNlc3Npb24uIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgb25Db25maWd1cmVkKENhbWVyYUNhcHR1cmVTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAgIGNo
ZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBjYXB0
dXJlIHNlc3Npb24gY29uZmlndXJlZC4iKTsKLSAgICAgIGNhcHR1cmVTZXNzaW9uID0gc2Vzc2lv
bjsKLSAgICAgIHRyeSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSB2aWFibGUgb3B0aW9u
cyBmb3IgdmlkZW8gY2FwdHVyZSByZXF1ZXN0cyBhcmU6Ci0gICAgICAgICAqIFRFTVBMQVRFX1BS
RVZJRVc6IEhpZ2ggZnJhbWUgcmF0ZSBpcyBnaXZlbiBwcmlvcml0eSBvdmVyIHRoZSBoaWdoZXN0
LXF1YWxpdHkKLSAgICAgICAgICogICBwb3N0LXByb2Nlc3NpbmcuCi0gICAgICAgICAqIFRFTVBM
QVRFX1JFQ09SRDogU3RhYmxlIGZyYW1lIHJhdGUgaXMgdXNlZCwgYW5kIHBvc3QtcHJvY2Vzc2lu
ZyBpcyBzZXQgZm9yIHJlY29yZGluZwotICAgICAgICAgKiAgIHF1YWxpdHkuCi0gICAgICAgICAq
LwotICAgICAgICBmaW5hbCBDYXB0dXJlUmVxdWVzdC5CdWlsZGVyIGNhcHR1cmVSZXF1ZXN0QnVp
bGRlciA9Ci0gICAgICAgICAgICBjYW1lcmFEZXZpY2UuY3JlYXRlQ2FwdHVyZVJlcXVlc3QoQ2Ft
ZXJhRGV2aWNlLlRFTVBMQVRFX1JFQ09SRCk7Ci0gICAgICAgIC8vIFNldCBhdXRvIGV4cG9zdXJl
IGZwcyByYW5nZS4KLSAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJlUmVx
dWVzdC5DT05UUk9MX0FFX1RBUkdFVF9GUFNfUkFOR0UsCi0gICAgICAgICAgICBuZXcgUmFuZ2U8
SW50ZWdlcj4oY2FwdHVyZUZvcm1hdC5mcmFtZXJhdGUubWluIC8gZnBzVW5pdEZhY3RvciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZUZvcm1hdC5mcmFtZXJh
dGUubWF4IC8gZnBzVW5pdEZhY3RvcikpOwotICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIu
c2V0KAotICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9BRV9NT0RFLCBDYXB0dXJl
UmVxdWVzdC5DT05UUk9MX0FFX01PREVfT04pOwotICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxk
ZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUVfTE9DSywgZmFsc2UpOwotICAgICAgICBj
aG9vc2VTdGFiaWxpemF0aW9uTW9kZShjYXB0dXJlUmVxdWVzdEJ1aWxkZXIpOwotICAgICAgICBj
aG9vc2VGb2N1c01vZGUoY2FwdHVyZVJlcXVlc3RCdWlsZGVyKTsKLQotICAgICAgICBjYXB0dXJl
UmVxdWVzdEJ1aWxkZXIuYWRkVGFyZ2V0KHN1cmZhY2UpOwotICAgICAgICBzZXNzaW9uLnNldFJl
cGVhdGluZ1JlcXVlc3QoCi0gICAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIuYnVpbGQo
KSwgbmV3IENhbWVyYUNhcHR1cmVDYWxsYmFjaygpLCBjYW1lcmFUaHJlYWRIYW5kbGVyKTsKLSAg
ICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVy
cm9yKCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSByZXF1ZXN0LiAiICsgZSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLQotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5p
bmcoCi0gICAgICAgICAgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1lQXZh
aWxhYmxlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1
YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICAgICAgICAgIGludCBv
ZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVzdGFtcE5zKSB7
Ci0gICAgICAgICAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgICAgICAgICAg
IGlmIChzdGF0ZSAhPSBTZXNzaW9uU3RhdGUuUlVOTklORykgewotICAgICAgICAgICAgICAgIExv
Z2dpbmcuZChUQUcsICJUZXh0dXJlIGZyYW1lIGNhcHR1cmVkIGJ1dCBjYW1lcmEgaXMgbm8gbG9u
Z2VyIHJ1bm5pbmcuIik7Ci0gICAgICAgICAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0
dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQpIHsKLSAgICAgICAg
ICAgICAgICBmaXJzdEZyYW1lUmVwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZpbmFs
IGludCBzdGFydFRpbWVNcyA9Ci0gICAgICAgICAgICAgICAgICAgIChpbnQpIFRpbWVVbml0Lk5B
Tk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gY29uc3RydWN0aW9uVGltZU5z
KTsKLSAgICAgICAgICAgICAgICBjYW1lcmEyU3RhcnRUaW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxl
KHN0YXJ0VGltZU1zKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGludCByb3Rh
dGlvbiA9IGdldEZyYW1lT3JpZW50YXRpb24oKTsKLSAgICAgICAgICAgICAgaWYgKGlzQ2FtZXJh
RnJvbnRGYWNpbmcpIHsKLSAgICAgICAgICAgICAgICAvLyBVbmRvIHRoZSBtaXJyb3IgdGhhdCB0
aGUgT1MgImhlbHBzIiB1cyB3aXRoLgotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9kZXZlbG9w
ZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmh0bWwjc2V0
RGlzcGxheU9yaWVudGF0aW9uKGludCkKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXgg
PSBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKAotICAgICAgICAgICAgICAgICAgICB0
cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9uLmhvcml6b250YWxGbGlwTWF0cml4KCkpOwot
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gVW5kbyBjYW1lcmEgb3JpZW50YXRp
b24gLSB3ZSByZXBvcnQgaXQgYXMgcm90YXRpb24gaW5zdGVhZC4KLSAgICAgICAgICAgICAgdHJh
bnNmb3JtTWF0cml4ID0KLSAgICAgICAgICAgICAgICAgIFJlbmRlcmVyQ29tbW9uLnJvdGF0ZVRl
eHR1cmVNYXRyaXgodHJhbnNmb3JtTWF0cml4LCAtY2FtZXJhT3JpZW50YXRpb24pOwotCi0gICAg
ICAgICAgICAgIGV2ZW50cy5vblRleHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYTJTZXNzaW9uLnRo
aXMsIGNhcHR1cmVGb3JtYXQud2lkdGgsCi0gICAgICAgICAgICAgICAgICBjYXB0dXJlRm9ybWF0
LmhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIHJvdGF0aW9uLCB0aW1lc3Rh
bXBOcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICBMb2dnaW5nLmQoVEFH
LCAiQ2FtZXJhIGRldmljZSBzdWNjZXNzZnVsbHkgc3RhcnRlZC4iKTsKLSAgICAgIGNhbGxiYWNr
Lm9uRG9uZShDYW1lcmEyU2Vzc2lvbi50aGlzKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVmZXJzIG9w
dGljYWwgc3RhYmlsaXphdGlvbiBvdmVyIHNvZnR3YXJlIHN0YWJpbGl6YXRpb24gaWYgYXZhaWxh
YmxlLiBPbmx5IGVuYWJsZXMgb25lIG9mCi0gICAgLy8gdGhlIHN0YWJpbGl6YXRpb24gbW9kZXMg
YXQgYSB0aW1lIGJlY2F1c2UgaGF2aW5nIGJvdGggZW5hYmxlZCBjYW4gY2F1c2Ugc3RyYW5nZSBy
ZXN1bHRzLgotICAgIHByaXZhdGUgdm9pZCBjaG9vc2VTdGFiaWxpemF0aW9uTW9kZShDYXB0dXJl
UmVxdWVzdC5CdWlsZGVyIGNhcHR1cmVSZXF1ZXN0QnVpbGRlcikgewotICAgICAgZmluYWwgaW50
W10gYXZhaWxhYmxlT3B0aWNhbFN0YWJpbGl6YXRpb24gPSBjYW1lcmFDaGFyYWN0ZXJpc3RpY3Mu
Z2V0KAotICAgICAgICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcy5MRU5TX0lORk9fQVZBSUxBQkxF
X09QVElDQUxfU1RBQklMSVpBVElPTik7Ci0gICAgICBpZiAoYXZhaWxhYmxlT3B0aWNhbFN0YWJp
bGl6YXRpb24gIT0gbnVsbCkgewotICAgICAgICBmb3IgKGludCBtb2RlIDogYXZhaWxhYmxlT3B0
aWNhbFN0YWJpbGl6YXRpb24pIHsKLSAgICAgICAgICBpZiAobW9kZSA9PSBDYXB0dXJlUmVxdWVz
dC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OKSB7Ci0gICAgICAgICAgICBjYXB0
dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BUSUNBTF9TVEFCSUxJ
WkFUSU9OX01PREUsCi0gICAgICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuTEVOU19PUFRJQ0FM
X1NUQUJJTElaQVRJT05fTU9ERV9PTik7Ci0gICAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxk
ZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RFLAot
ICAgICAgICAgICAgICAgIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpBVElP
Tl9NT0RFX09GRik7Ci0gICAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVXNpbmcgb3B0aWNhbCBz
dGFiaWxpemF0aW9uLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfQotICAgICAgLy8gSWYgbm8gb3B0aWNhbCBtb2RlIGlzIGF2YWlsYWJsZSwg
dHJ5IHNvZnR3YXJlLgotICAgICAgZmluYWwgaW50W10gYXZhaWxhYmxlVmlkZW9TdGFiaWxpemF0
aW9uID0gY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldCgKLSAgICAgICAgICBDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuQ09OVFJPTF9BVkFJTEFCTEVfVklERU9fU1RBQklMSVpBVElPTl9NT0RFUyk7Ci0g
ICAgICBmb3IgKGludCBtb2RlIDogYXZhaWxhYmxlVmlkZW9TdGFiaWxpemF0aW9uKSB7Ci0gICAg
ICAgIGlmIChtb2RlID09IENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpBVElP
Tl9NT0RFX09OKSB7Ci0gICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJl
UmVxdWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERSwKLSAgICAgICAgICAgICAg
Q2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREVfT04pOwotICAg
ICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuTEVOU19PUFRJ
Q0FMX1NUQUJJTElaQVRJT05fTU9ERSwKLSAgICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuTEVO
U19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PRkYpOwotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsICJVc2luZyB2aWRlbyBzdGFiaWxpemF0aW9uLiIpOwotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIlN0YWJpbGl6YXRpb24gbm90
IGF2YWlsYWJsZS4iKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hvb3NlRm9jdXNNb2Rl
KENhcHR1cmVSZXF1ZXN0LkJ1aWxkZXIgY2FwdHVyZVJlcXVlc3RCdWlsZGVyKSB7Ci0gICAgICBm
aW5hbCBpbnRbXSBhdmFpbGFibGVGb2N1c01vZGVzID0KLSAgICAgICAgICBjYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05UUk9MX0FGX0FWQUlMQUJMRV9N
T0RFUyk7Ci0gICAgICBmb3IgKGludCBtb2RlIDogYXZhaWxhYmxlRm9jdXNNb2RlcykgewotICAg
ICAgICBpZiAobW9kZSA9PSBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FGX01PREVfQ09OVElOVU9V
U19WSURFTykgewotICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoCi0gICAgICAg
ICAgICAgIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUZfTU9ERSwgQ2FwdHVyZVJlcXVlc3QuQ09O
VFJPTF9BRl9NT0RFX0NPTlRJTlVPVVNfVklERU8pOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcs
ICJVc2luZyBjb250aW51b3VzIHZpZGVvIGF1dG8tZm9jdXMuIik7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXV0by1mb2N1cyBp
cyBub3QgYXZhaWxhYmxlLiIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQ2FtZXJh
Q2FwdHVyZUNhbGxiYWNrIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZVNlc3Npb24uQ2FwdHVyZUNhbGxi
YWNrIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVGYWlsZWQoCi0g
ICAgICAgIENhbWVyYUNhcHR1cmVTZXNzaW9uIHNlc3Npb24sIENhcHR1cmVSZXF1ZXN0IHJlcXVl
c3QsIENhcHR1cmVGYWlsdXJlIGZhaWx1cmUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYXB0
dXJlIGZhaWxlZDogIiArIGZhaWx1cmUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMg
dm9pZCBjcmVhdGUoQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNhbGxiYWNrLCBFdmVudHMgZXZlbnRz
LAotICAgICAgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsIENhbWVyYU1hbmFnZXIgY2FtZXJh
TWFuYWdlciwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVy
LCBTdHJpbmcgY2FtZXJhSWQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIGludCBmcmFt
ZXJhdGUpIHsKLSAgICBuZXcgQ2FtZXJhMlNlc3Npb24oY2FsbGJhY2ssIGV2ZW50cywgYXBwbGlj
YXRpb25Db250ZXh0LCBjYW1lcmFNYW5hZ2VyLCBzdXJmYWNlVGV4dHVyZUhlbHBlciwKLSAgICAg
ICAgY2FtZXJhSWQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gIH0KLQotICBwcml2YXRl
IENhbWVyYTJTZXNzaW9uKENyZWF0ZVNlc3Npb25DYWxsYmFjayBjYWxsYmFjaywgRXZlbnRzIGV2
ZW50cywgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYW1lcmFNYW5hZ2VyIGNh
bWVyYU1hbmFnZXIsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBT
dHJpbmcgY2FtZXJhSWQsCi0gICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJh
dGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRlIG5ldyBjYW1lcmEyIHNlc3Npb24gb24g
Y2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0KLSAgICBjb25zdHJ1Y3Rpb25UaW1lTnMgPSBTeXN0ZW0u
bmFub1RpbWUoKTsKLQotICAgIHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9IG5ldyBIYW5kbGVy
KCk7Ci0gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIHRoaXMuZXZlbnRzID0gZXZl
bnRzOwotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRpb25Db250ZXh0Owot
ICAgIHRoaXMuY2FtZXJhTWFuYWdlciA9IGNhbWVyYU1hbmFnZXI7Ci0gICAgdGhpcy5zdXJmYWNl
VGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAgIHRoaXMuY2FtZXJhSWQg
PSBjYW1lcmFJZDsKLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBo
ZWlnaHQ7Ci0gICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0KLSAgICBzdGFydCgpOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0KCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVh
ZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydCIpOwotCi0gICAgdHJ5IHsKLSAgICAgIGNh
bWVyYUNoYXJhY3RlcmlzdGljcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0
aWNzKGNhbWVyYUlkKTsKLSAgICB9IGNhdGNoIChmaW5hbCBDYW1lcmFBY2Nlc3NFeGNlcHRpb24g
ZSkgewotICAgICAgcmVwb3J0RXJyb3IoImdldENhbWVyYUNoYXJhY3RlcmlzdGljcygpOiAiICsg
ZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYW1lcmFPcmllbnRhdGlvbiA9IGNhbWVyYUNo
YXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNFTlNPUl9PUklFTlRBVElP
Tik7Ci0gICAgaXNDYW1lcmFGcm9udEZhY2luZyA9IGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQo
Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFDSU5HKQotICAgICAgICA9PSBDYW1lcmFNZXRh
ZGF0YS5MRU5TX0ZBQ0lOR19GUk9OVDsKLQotICAgIGZpbmRDYXB0dXJlRm9ybWF0KCk7Ci0gICAg
b3BlbkNhbWVyYSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbmRDYXB0dXJlRm9ybWF0KCkg
ewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgUmFuZ2U8SW50ZWdlcj5bXSBm
cHNSYW5nZXMgPQotICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJh
Y3RlcmlzdGljcy5DT05UUk9MX0FFX0FWQUlMQUJMRV9UQVJHRVRfRlBTX1JBTkdFUyk7Ci0gICAg
ZnBzVW5pdEZhY3RvciA9IENhbWVyYTJFbnVtZXJhdG9yLmdldEZwc1VuaXRGYWN0b3IoZnBzUmFu
Z2VzKTsKLSAgICBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IGZyYW1lcmF0ZVJh
bmdlcyA9Ci0gICAgICAgIENhbWVyYTJFbnVtZXJhdG9yLmNvbnZlcnRGcmFtZXJhdGVzKGZwc1Jh
bmdlcywgZnBzVW5pdEZhY3Rvcik7Ci0gICAgTGlzdDxTaXplPiBzaXplcyA9IENhbWVyYTJFbnVt
ZXJhdG9yLmdldFN1cHBvcnRlZFNpemVzKGNhbWVyYUNoYXJhY3RlcmlzdGljcyk7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIkF2YWlsYWJsZSBwcmV2aWV3IHNpemVzOiAiICsgc2l6ZXMpOwotICAgIExv
Z2dpbmcuZChUQUcsICJBdmFpbGFibGUgZnBzIHJhbmdlczogIiArIGZyYW1lcmF0ZVJhbmdlcyk7
Ci0KLSAgICBpZiAoZnJhbWVyYXRlUmFuZ2VzLmlzRW1wdHkoKSB8fCBzaXplcy5pc0VtcHR5KCkp
IHsKLSAgICAgIHJlcG9ydEVycm9yKCJObyBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXRzLiIpOwot
ICAgIH0KLQotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UgYmVzdEZwc1Jh
bmdlID0KLSAgICAgICAgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0
ZWRGcmFtZXJhdGVSYW5nZShmcmFtZXJhdGVSYW5nZXMsIGZyYW1lcmF0ZSk7Ci0KLSAgICBmaW5h
bCBTaXplIGJlc3RTaXplID0gQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBw
b3J0ZWRTaXplKHNpemVzLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBDYW1lcmFFbnVtZXJhdGlvbkFu
ZHJvaWQucmVwb3J0Q2FtZXJhUmVzb2x1dGlvbihjYW1lcmEyUmVzb2x1dGlvbkhpc3RvZ3JhbSwg
YmVzdFNpemUpOwotCi0gICAgY2FwdHVyZUZvcm1hdCA9IG5ldyBDYXB0dXJlRm9ybWF0KGJlc3RT
aXplLndpZHRoLCBiZXN0U2l6ZS5oZWlnaHQsIGJlc3RGcHNSYW5nZSk7Ci0gICAgTG9nZ2luZy5k
KFRBRywgIlVzaW5nIGNhcHR1cmUgZm9ybWF0OiAiICsgY2FwdHVyZUZvcm1hdCk7Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgb3BlbkNhbWVyYSgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQo
KTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJPcGVuaW5nIGNhbWVyYSAiICsgY2FtZXJhSWQpOwot
ICAgIGV2ZW50cy5vbkNhbWVyYU9wZW5pbmcoKTsKLQotICAgIHRyeSB7Ci0gICAgICBjYW1lcmFN
YW5hZ2VyLm9wZW5DYW1lcmEoY2FtZXJhSWQsIG5ldyBDYW1lcmFTdGF0ZUNhbGxiYWNrKCksIGNh
bWVyYVRocmVhZEhhbmRsZXIpOwotICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBl
KSB7Ci0gICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIG9wZW4gY2FtZXJhOiAiICsgZSk7Ci0g
ICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIlN0b3AgY2FtZXJhMiBzZXNzaW9uIG9uIGNhbWVyYSAiICsgY2FtZXJhSWQp
OwotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmIChzdGF0ZSAhPSBTZXNzaW9u
U3RhdGUuU1RPUFBFRCkgewotICAgICAgZmluYWwgbG9uZyBzdG9wU3RhcnRUaW1lID0gU3lzdGVt
Lm5hbm9UaW1lKCk7Ci0gICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwotICAgICAg
c3RvcEludGVybmFsKCk7Ci0gICAgICBmaW5hbCBpbnQgc3RvcFRpbWVNcyA9IChpbnQpIFRpbWVV
bml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RvcFN0YXJ0VGlt
ZSk7Ci0gICAgICBjYW1lcmEyU3RvcFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RvcFRpbWVN
cyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0b3BJbnRlcm5hbCgpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiU3RvcCBpbnRlcm5hbCIpOwotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVh
ZCgpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotCi0gICAg
aWYgKGNhcHR1cmVTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgIGNhcHR1cmVTZXNzaW9uLmNsb3Nl
KCk7Ci0gICAgICBjYXB0dXJlU2Vzc2lvbiA9IG51bGw7Ci0gICAgfQotICAgIGlmIChzdXJmYWNl
ICE9IG51bGwpIHsKLSAgICAgIHN1cmZhY2UucmVsZWFzZSgpOwotICAgICAgc3VyZmFjZSA9IG51
bGw7Ci0gICAgfQotICAgIGlmIChjYW1lcmFEZXZpY2UgIT0gbnVsbCkgewotICAgICAgY2FtZXJh
RGV2aWNlLmNsb3NlKCk7Ci0gICAgICBjYW1lcmFEZXZpY2UgPSBudWxsOwotICAgIH0KLQotICAg
IExvZ2dpbmcuZChUQUcsICJTdG9wIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBv
cnRFcnJvcihTdHJpbmcgZXJyb3IpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAg
ICBMb2dnaW5nLmUoVEFHLCAiRXJyb3I6ICIgKyBlcnJvcik7Ci0KLSAgICBmaW5hbCBib29sZWFu
IHN0YXJ0RmFpbHVyZSA9IChjYXB0dXJlU2Vzc2lvbiA9PSBudWxsKTsKLSAgICBzdGF0ZSA9IFNl
c3Npb25TdGF0ZS5TVE9QUEVEOwotICAgIHN0b3BJbnRlcm5hbCgpOwotICAgIGlmIChzdGFydEZh
aWx1cmUpIHsKLSAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZShlcnJvcik7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGV2ZW50cy5vbkNhbWVyYUVycm9yKHRoaXMsIGVycm9yKTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIGludCBnZXREZXZpY2VPcmllbnRhdGlvbigpIHsKLSAgICBpbnQgb3JpZW50YXRp
b24gPSAwOwotCi0gICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKSBhcHBsaWNh
dGlvbkNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAg
ICBzd2l0Y2ggKHdtLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0Um90YXRpb24oKSkgewotICAgICAg
Y2FzZSBTdXJmYWNlLlJPVEFUSU9OXzkwOgotICAgICAgICBvcmllbnRhdGlvbiA9IDkwOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8xODA6Ci0gICAgICAgIG9y
aWVudGF0aW9uID0gMTgwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RB
VElPTl8yNzA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMjcwOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8wOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgb3Jp
ZW50YXRpb24gPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWVudGF0
aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RnJhbWVPcmllbnRhdGlvbigpIHsKLSAgICBp
bnQgcm90YXRpb24gPSBnZXREZXZpY2VPcmllbnRhdGlvbigpOwotICAgIGlmICghaXNDYW1lcmFG
cm9udEZhY2luZykgewotICAgICAgcm90YXRpb24gPSAzNjAgLSByb3RhdGlvbjsKLSAgICB9Ci0g
ICAgcmV0dXJuIChjYW1lcmFPcmllbnRhdGlvbiArIHJvdGF0aW9uKSAlIDM2MDsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBjaGVja0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgaWYgKFRocmVhZC5j
dXJyZW50VGhyZWFkKCkgIT0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJl
YWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhy
ZWFkIik7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUNhcHR1
cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFDYXB0dXJlci5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUNhcHR1cmVy
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7
Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwot
Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0
aW9uIikKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYW1lcmFDYXB0dXJlciBpbXBsZW1lbnRzIENh
bWVyYVZpZGVvQ2FwdHVyZXIgewotICBlbnVtIFN3aXRjaFN0YXRlIHsKLSAgICBJRExFLCAvLyBO
byBzd2l0Y2ggcmVxdWVzdGVkLgotICAgIFBFTkRJTkcsIC8vIFdhaXRpbmcgZm9yIHByZXZpb3Vz
IGNhcHR1cmUgc2Vzc2lvbiB0byBvcGVuLgotICAgIElOX1BST0dSRVNTLCAvLyBXYWl0aW5nIGZv
ciBuZXcgc3dpdGNoZWQgY2FwdHVyZSBzZXNzaW9uIHRvIHN0YXJ0LgotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmFDYXB0dXJlciI7Ci0gIHByaXZhdGUg
ZmluYWwgc3RhdGljIGludCBNQVhfT1BFTl9DQU1FUkFfQVRURU1QVFMgPSAzOwotICBwcml2YXRl
IGZpbmFsIHN0YXRpYyBpbnQgT1BFTl9DQU1FUkFfREVMQVlfTVMgPSA1MDA7Ci0gIHByaXZhdGUg
ZmluYWwgc3RhdGljIGludCBPUEVOX0NBTUVSQV9USU1FT1VUID0gMTAwMDA7Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBDYW1lcmFFbnVtZXJhdG9yIGNhbWVyYUVudW1lcmF0b3I7Ci0gIHByaXZhdGUgZmlu
YWwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEhh
bmRsZXIgdWlUaHJlYWRIYW5kbGVyOwotCi0gIHByaXZhdGUgZmluYWwgQ2FtZXJhU2Vzc2lvbi5D
cmVhdGVTZXNzaW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNhbGxiYWNrID0KLSAgICAgIG5ldyBD
YW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjaygpIHsKLSAgICAgICAgQE92ZXJyaWRl
Ci0gICAgICAgIHB1YmxpYyB2b2lkIG9uRG9uZShDYW1lcmFTZXNzaW9uIHNlc3Npb24pIHsKLSAg
ICAgICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFH
LCAiQ3JlYXRlIHNlc3Npb24gZG9uZSIpOwotICAgICAgICAgIHVpVGhyZWFkSGFuZGxlci5yZW1v
dmVDYWxsYmFja3Mob3BlbkNhbWVyYVRpbWVvdXRSdW5uYWJsZSk7Ci0gICAgICAgICAgc3luY2hy
b25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0
dXJlclN0YXJ0ZWQodHJ1ZSAvKiBzdWNjZXNzICovKTsKLSAgICAgICAgICAgIHNlc3Npb25PcGVu
aW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyZW50U2Vzc2lvbiA9IHNlc3Npb247Ci0gICAg
ICAgICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbmV3IENhbWVyYVN0YXRpc3RpY3Moc3VyZmFjZUhl
bHBlciwgZXZlbnRzSGFuZGxlcik7Ci0gICAgICAgICAgICBmaXJzdEZyYW1lT2JzZXJ2ZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIHN0YXRlTG9jay5ub3RpZnlBbGwoKTsKLQotICAgICAgICAgICAg
aWYgKHN3aXRjaFN0YXRlID09IFN3aXRjaFN0YXRlLklOX1BST0dSRVNTKSB7Ci0gICAgICAgICAg
ICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBz
d2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRG9uZShjYW1lcmFFbnVtZXJhdG9yLmlz
RnJvbnRGYWNpbmcoY2FtZXJhTmFtZSkpOwotICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50c0hh
bmRsZXIgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHN3aXRjaFN0YXRl
ID0gU3dpdGNoU3RhdGUuSURMRTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3dpdGNoU3RhdGUg
PT0gU3dpdGNoU3RhdGUuUEVORElORykgewotICAgICAgICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3
aXRjaFN0YXRlLklETEU7Ci0gICAgICAgICAgICAgIHN3aXRjaENhbWVyYUludGVybmFsKHN3aXRj
aEV2ZW50c0hhbmRsZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkZhaWx1cmUoU3RyaW5n
IGVycm9yKSB7Ci0gICAgICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICAgICAg
dWlUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhvcGVuQ2FtZXJhVGltZW91dFJ1bm5hYmxl
KTsKLSAgICAgICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICAgICAgY2Fw
dHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZChmYWxzZSAvKiBzdWNjZXNzICovKTsKLSAg
ICAgICAgICAgIG9wZW5BdHRlbXB0c1JlbWFpbmluZy0tOwotCi0gICAgICAgICAgICBpZiAob3Bl
bkF0dGVtcHRzUmVtYWluaW5nIDw9IDApIHsKLSAgICAgICAgICAgICAgTG9nZ2luZy53KFRBRywg
Ik9wZW5pbmcgY2FtZXJhIGZhaWxlZCwgcGFzc2luZzogIiArIGVycm9yKTsKLSAgICAgICAgICAg
ICAgc2Vzc2lvbk9wZW5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgc3RhdGVMb2NrLm5vdGlm
eUFsbCgpOwotCi0gICAgICAgICAgICAgIGlmIChzd2l0Y2hTdGF0ZSAhPSBTd2l0Y2hTdGF0ZS5J
RExFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgICAgICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVy
cm9yKGVycm9yKTsKLSAgICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIgPSBudWxs
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3aXRj
aFN0YXRlLklETEU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBldmVudHNIYW5k
bGVyLm9uQ2FtZXJhRXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgTG9nZ2luZy53KFRBRywgIk9wZW5pbmcgY2FtZXJhIGZhaWxlZCwgcmV0cnk6ICIgKyBl
cnJvcik7Ci0KLSAgICAgICAgICAgICAgY3JlYXRlU2Vzc2lvbkludGVybmFsKE9QRU5fQ0FNRVJB
X0RFTEFZX01TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFTZXNzaW9uLkV2ZW50cyBjYW1lcmFTZXNzaW9u
RXZlbnRzSGFuZGxlciA9IG5ldyBDYW1lcmFTZXNzaW9uLkV2ZW50cygpIHsKLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYU9wZW5pbmcoKSB7Ci0gICAgICBjaGVja0lzT25D
YW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAg
IGlmIChjdXJyZW50U2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nZ2luZy53KFRBRywg
Im9uQ2FtZXJhT3BlbmluZyB3aGlsZSBzZXNzaW9uIHdhcyBvcGVuLiIpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhT3BlbmluZyhj
YW1lcmFOYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvbkNhbWVyYUVycm9yKENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIGVycm9yKSB7
Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoc3Rh
dGVMb2NrKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9uKSB7Ci0gICAg
ICAgICAgTG9nZ2luZy53KFRBRywgIm9uQ2FtZXJhRXJyb3IgZnJvbSBhbm90aGVyIHNlc3Npb246
ICIgKyBlcnJvcik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGV2ZW50
c0hhbmRsZXIub25DYW1lcmFFcnJvcihlcnJvcik7Ci0gICAgICAgIHN0b3BDYXB0dXJlKCk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFE
aXNjb25uZWN0ZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKSB7Ci0gICAgICBjaGVja0lzT25DYW1l
cmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgIGlm
IChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9uKSB7Ci0gICAgICAgICAgTG9nZ2luZy53KFRBRywg
Im9uQ2FtZXJhRGlzY29ubmVjdGVkIGZyb20gYW5vdGhlciBzZXNzaW9uLiIpOwotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRGlzY29u
bmVjdGVkKCk7Ci0gICAgICAgIHN0b3BDYXB0dXJlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFDbG9zZWQoQ2FtZXJhU2Vzc2lvbiBz
ZXNzaW9uKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9u
aXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9u
ICYmIGN1cnJlbnRTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
b25DYW1lcmFDbG9zZWQgZnJvbSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFDbG9zZWQoKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkJ5dGVCdWZm
ZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBDYW1lcmFTZXNzaW9uIHNlc3Npb24sIGJ5dGVbXSBk
YXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXAp
IHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hyb25pemVkIChz
dGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24pIHsKLSAg
ICAgICAgICBMb2dnaW5nLncoVEFHLCAib25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCBmcm9tIGFu
b3RoZXIgc2Vzc2lvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKCFmaXJzdEZyYW1lT2JzZXJ2ZWQpIHsKLSAgICAgICAgICBldmVudHNIYW5kbGVyLm9uRmly
c3RGcmFtZUF2YWlsYWJsZSgpOwotICAgICAgICAgIGZpcnN0RnJhbWVPYnNlcnZlZCA9IHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FtZXJhU3RhdGlzdGljcy5hZGRGcmFtZSgpOwotICAgICAg
ICBjYXB0dXJlck9ic2VydmVyLm9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoZGF0YSwgd2lkdGgs
IGhlaWdodCwgcm90YXRpb24sIHRpbWVzdGFtcCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVDYXB0dXJlZChDYW1lcmFTZXNz
aW9uIHNlc3Npb24sIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgaW50IG9lc1RleHR1
cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3Rh
bXApIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hyb25pemVk
IChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24pIHsK
LSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25UZXh0dXJlRnJhbWVDYXB0dXJlZCBmcm9tIGFu
b3RoZXIgc2Vzc2lvbi4iKTsKLSAgICAgICAgICBzdXJmYWNlSGVscGVyLnJldHVyblRleHR1cmVG
cmFtZSgpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZpcnN0
RnJhbWVPYnNlcnZlZCkgewotICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25GaXJzdEZyYW1lQXZh
aWxhYmxlKCk7Ci0gICAgICAgICAgZmlyc3RGcmFtZU9ic2VydmVkID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBjYW1lcmFTdGF0aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgICAgIGNhcHR1cmVy
T2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgICAgIHdpZHRoLCBoZWln
aHQsIG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wKTsK
LSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBvcGVuQ2Ft
ZXJhVGltZW91dFJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcigi
Q2FtZXJhIGZhaWxlZCB0byBzdGFydCB3aXRoaW4gdGltZW91dC4iKTsKLSAgICB9Ci0gIH07Ci0K
LSAgLy8gSW5pdGlhbGl6ZWQgb24gaW5pdGlhbGl6ZQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gIHByaXZhdGUgSGFuZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVyOwotICBwcml2YXRl
IENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICBwcml2YXRlIENhcHR1cmVyT2JzZXJ2ZXIg
Y2FwdHVyZXJPYnNlcnZlcjsKLSAgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNl
SGVscGVyOwotCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IHN0YXRlTG9jayA9IG5ldyBPYmplY3Qo
KTsKLSAgcHJpdmF0ZSBib29sZWFuIHNlc3Npb25PcGVuaW5nOyAvKiBndWFyZGVkIGJ5IHN0YXRl
TG9jayAqLwotICBwcml2YXRlIENhbWVyYVNlc3Npb24gY3VycmVudFNlc3Npb247IC8qIGd1YXJk
ZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgU3RyaW5nIGNhbWVyYU5hbWU7IC8qIGd1YXJk
ZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgaW50IHdpZHRoOyAvKiBndWFyZGVkIGJ5IHN0
YXRlTG9jayAqLwotICBwcml2YXRlIGludCBoZWlnaHQ7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2Nr
ICovCi0gIHByaXZhdGUgaW50IGZyYW1lcmF0ZTsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8K
LSAgcHJpdmF0ZSBpbnQgb3BlbkF0dGVtcHRzUmVtYWluaW5nOyAvKiBndWFyZGVkIGJ5IHN0YXRl
TG9jayAqLwotICBwcml2YXRlIFN3aXRjaFN0YXRlIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUu
SURMRTsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBDYW1lcmFTd2l0Y2hI
YW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXI7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0g
IC8vIFZhbGlkIGZyb20gb25Eb25lIGNhbGwgdW50aWwgc3RvcENhcHR1cmUsIG90aGVyd2lzZSBu
dWxsLgotICBwcml2YXRlIENhbWVyYVN0YXRpc3RpY3MgY2FtZXJhU3RhdGlzdGljczsgLyogZ3Vh
cmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVPYnNlcnZl
ZDsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLQotICBwdWJsaWMgQ2FtZXJhQ2FwdHVyZXIo
Ci0gICAgICBTdHJpbmcgY2FtZXJhTmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5k
bGVyLCBDYW1lcmFFbnVtZXJhdG9yIGNhbWVyYUVudW1lcmF0b3IpIHsKLSAgICBpZiAoZXZlbnRz
SGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICBldmVudHNIYW5kbGVyID0gbmV3IENhbWVyYUV2ZW50
c0hhbmRsZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNh
bWVyYUVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7fQotICAgICAgICBAT3ZlcnJpZGUK
LSAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFEaXNjb25uZWN0ZWQoKSB7fQotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFGcmVlemVkKFN0cmluZyBlcnJv
ckRlc2NyaXB0aW9uKSB7fQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQg
b25DYW1lcmFPcGVuaW5nKFN0cmluZyBjYW1lcmFOYW1lKSB7fQotICAgICAgICBAT3ZlcnJpZGUK
LSAgICAgICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCkge30KLSAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhQ2xvc2VkKCkge30KLSAgICAg
IH07Ci0gICAgfQotCi0gICAgdGhpcy5ldmVudHNIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjsKLSAg
ICB0aGlzLmNhbWVyYUVudW1lcmF0b3IgPSBjYW1lcmFFbnVtZXJhdG9yOwotICAgIHRoaXMuY2Ft
ZXJhTmFtZSA9IGNhbWVyYU5hbWU7Ci0gICAgdWlUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIo
TG9vcGVyLmdldE1haW5Mb29wZXIoKSk7Ci0KLSAgICBmaW5hbCBTdHJpbmdbXSBkZXZpY2VOYW1l
cyA9IGNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKTsKLQotICAgIGlmIChkZXZpY2VO
YW1lcy5sZW5ndGggPT0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5v
IGNhbWVyYXMgYXR0YWNoZWQuIik7Ci0gICAgfQotICAgIGlmICghQXJyYXlzLmFzTGlzdChkZXZp
Y2VOYW1lcykuY29udGFpbnModGhpcy5jYW1lcmFOYW1lKSkgewotICAgICAgdGhyb3cgbmV3IEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAiQ2FtZXJhIG5hbWUgIiArIHRoaXMu
Y2FtZXJhTmFtZSArICIgZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGNhbWVyYSBkZXZpY2UuIik7
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGljYXRp
b25Db250ZXh0LAotICAgICAgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyKSB7Ci0g
ICAgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHQgPSBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gICAgdGhp
cy5jYXB0dXJlck9ic2VydmVyID0gY2FwdHVyZXJPYnNlcnZlcjsKLSAgICB0aGlzLnN1cmZhY2VI
ZWxwZXIgPSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYVRocmVhZEhhbmRs
ZXIgPQotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciA9PSBudWxsID8gbnVsbCA6IHN1cmZh
Y2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBzdGFydENhcHR1cmUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRl
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0Q2FwdHVyZTogIiArIHdpZHRoICsgIngiICsg
aGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlKTsKLQotICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2Nr
KSB7Ci0gICAgICBpZiAoc2Vzc2lvbk9wZW5pbmcgfHwgY3VycmVudFNlc3Npb24gIT0gbnVsbCkg
ewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiU2Vzc2lvbiBhbHJlYWR5IG9wZW4iKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0
aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHRoaXMuZnJhbWVyYXRlID0gZnJhbWVyYXRlOwot
Ci0gICAgICBzZXNzaW9uT3BlbmluZyA9IHRydWU7Ci0gICAgICBvcGVuQXR0ZW1wdHNSZW1haW5p
bmcgPSBNQVhfT1BFTl9DQU1FUkFfQVRURU1QVFM7Ci0gICAgICBjcmVhdGVTZXNzaW9uSW50ZXJu
YWwoMCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVNlc3Npb25JbnRlcm5h
bChpbnQgZGVsYXlNcykgewotICAgIHVpVGhyZWFkSGFuZGxlci5wb3N0RGVsYXllZChvcGVuQ2Ft
ZXJhVGltZW91dFJ1bm5hYmxlLCBkZWxheU1zICsgT1BFTl9DQU1FUkFfVElNRU9VVCk7Ci0gICAg
Y2FtZXJhVGhyZWFkSGFuZGxlci5wb3N0RGVsYXllZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY3JlYXRlQ2FtZXJh
U2Vzc2lvbihjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIGNhbWVyYVNlc3Npb25FdmVudHNIYW5kbGVy
LCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICAgICAgICBzdXJmYWNlSGVscGVyLCBjYW1lcmFO
YW1lLCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgICAgfQotICAgIH0sIGRlbGF5TXMp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3BDYXB0dXJlKCkgewotICAg
IExvZ2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmUiKTsKLQotICAgIHN5bmNocm9uaXplZCAoc3Rh
dGVMb2NrKSB7Ci0gICAgICB3aGlsZSAoc2Vzc2lvbk9wZW5pbmcpIHsKLSAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgIlN0b3AgY2FwdHVyZTogV2FpdGluZyBmb3Igc2Vzc2lvbiB0byBvcGVuIik7Ci0g
ICAgICAgIFRocmVhZFV0aWxzLndhaXRVbmludGVycnVwdGlibHkoc3RhdGVMb2NrKTsKLSAgICAg
IH0KLQotICAgICAgaWYgKGN1cnJlbnRTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgIlN0b3AgY2FwdHVyZTogTnVsbGluZyBzZXNzaW9uIik7Ci0gICAgICAgIGNhbWVy
YVN0YXRpc3RpY3MucmVsZWFzZSgpOwotICAgICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbnVsbDsK
LSAgICAgICAgZmluYWwgQ2FtZXJhU2Vzc2lvbiBvbGRTZXNzaW9uID0gY3VycmVudFNlc3Npb247
Ci0gICAgICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAg
ICAgb2xkU2Vzc2lvbi5zdG9wKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAg
Y3VycmVudFNlc3Npb24gPSBudWxsOwotICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9uQ2FwdHVy
ZXJTdG9wcGVkKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3Rv
cCBjYXB0dXJlOiBObyBzZXNzaW9uIG9wZW4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBMb2dn
aW5nLmQoVEFHLCAiU3RvcCBjYXB0dXJlIGRvbmUiKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IGZyYW1lcmF0ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJjaGFuZ2VDYXB0dXJlRm9ybWF0OiAi
ICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBmcmFtZXJhdGUpOwotICAgIHN5bmNocm9u
aXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICBzdG9wQ2FwdHVyZSgpOwotICAgICAgc3RhcnRDYXB0
dXJlKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImRpc3Bvc2Ui
KTsKLSAgICBzdG9wQ2FwdHVyZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IHN3aXRjaENhbWVyYShmaW5hbCBDYW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRs
ZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhIik7Ci0gICAgY2FtZXJhVGhy
ZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBzd2l0Y2hDYW1lcmFJbnRlcm5hbChzd2l0Y2hF
dmVudHNIYW5kbGVyKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAgIFRocmVhZCBjYW1lcmFUaHJl
YWQgPSBudWxsOwotICAgIGlmIChjYW1lcmFUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAg
IGNhbWVyYVRocmVhZCA9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFk
KCk7Ci0gICAgfQotICAgIGlmIChjYW1lcmFUaHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tU
cmFjZUVsZW1lbnRbXSBjYW1lcmFTdGFja1RyYWNlID0gY2FtZXJhVGhyZWFkLmdldFN0YWNrVHJh
Y2UoKTsKLSAgICAgIGlmIChjYW1lcmFTdGFja1RyYWNlLmxlbmd0aCA+IDApIHsKLSAgICAgICAg
TG9nZ2luZy5kKFRBRywgIkNhbWVyYUNhcHR1cmVyIHN0YWNrIHRyYWNlOiIpOwotICAgICAgICBm
b3IgKFN0YWNrVHJhY2VFbGVtZW50IHRyYWNlRWxlbSA6IGNhbWVyYVN0YWNrVHJhY2UpIHsKLSAg
ICAgICAgICBMb2dnaW5nLmQoVEFHLCB0cmFjZUVsZW0udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3dpdGNoQ2FtZXJhSW50ZXJu
YWwoZmluYWwgQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVyKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYSBpbnRlcm5hbCIpOwotCi0gICAgZmluYWwgU3Ry
aW5nW10gZGV2aWNlTmFtZXMgPSBjYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCk7Ci0K
LSAgICBpZiAoZGV2aWNlTmFtZXMubGVuZ3RoIDwgMikgewotICAgICAgaWYgKHN3aXRjaEV2ZW50
c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJh
U3dpdGNoRXJyb3IoIk5vIGNhbWVyYSB0byBzd2l0Y2ggdG8uIik7Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgIGlm
IChzd2l0Y2hTdGF0ZSAhPSBTd2l0Y2hTdGF0ZS5JRExFKSB7Ci0gICAgICAgIExvZ2dpbmcuZChU
QUcsICJzd2l0Y2hDYW1lcmEgc3dpdGNoSW5Qcm9ncmVzcyIpOwotICAgICAgICBpZiAoc3dpdGNo
RXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5v
bkNhbWVyYVN3aXRjaEVycm9yKCJDYW1lcmEgc3dpdGNoIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIik7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoIXNlc3Np
b25PcGVuaW5nICYmIGN1cnJlbnRTZXNzaW9uID09IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5k
KFRBRywgInN3aXRjaENhbWVyYTogTm8gc2Vzc2lvbiBvcGVuIik7Ci0gICAgICAgIGlmIChzd2l0
Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVy
Lm9uQ2FtZXJhU3dpdGNoRXJyb3IoIkNhbWVyYSBpcyBub3QgcnVubmluZy4iKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMuc3dpdGNoRXZlbnRzSGFu
ZGxlciA9IHN3aXRjaEV2ZW50c0hhbmRsZXI7Ci0gICAgICBpZiAoc2Vzc2lvbk9wZW5pbmcpIHsK
LSAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5QRU5ESU5HOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLklO
X1BST0dSRVNTOwotICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJh
OiBTdG9wcGluZyBzZXNzaW9uIik7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNzLnJlbGVhc2UoKTsK
LSAgICAgIGNhbWVyYVN0YXRpc3RpY3MgPSBudWxsOwotICAgICAgZmluYWwgQ2FtZXJhU2Vzc2lv
biBvbGRTZXNzaW9uID0gY3VycmVudFNlc3Npb247Ci0gICAgICBjYW1lcmFUaHJlYWRIYW5kbGVy
LnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICAgIG9sZFNlc3Npb24uc3RvcCgpOwotICAgICAgICB9Ci0g
ICAgICB9KTsKLSAgICAgIGN1cnJlbnRTZXNzaW9uID0gbnVsbDsKLQotICAgICAgaW50IGNhbWVy
YU5hbWVJbmRleCA9IEFycmF5cy5hc0xpc3QoZGV2aWNlTmFtZXMpLmluZGV4T2YoY2FtZXJhTmFt
ZSk7Ci0gICAgICBjYW1lcmFOYW1lID0gZGV2aWNlTmFtZXNbKGNhbWVyYU5hbWVJbmRleCArIDEp
ICUgZGV2aWNlTmFtZXMubGVuZ3RoXTsKLQotICAgICAgc2Vzc2lvbk9wZW5pbmcgPSB0cnVlOwot
ICAgICAgb3BlbkF0dGVtcHRzUmVtYWluaW5nID0gMTsKLSAgICAgIGNyZWF0ZVNlc3Npb25JbnRl
cm5hbCgwKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYSBkb25lIik7
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCkgewotICAgIGlm
IChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVy
KCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDaGVjayBpcyBvbiBjYW1l
cmEgdGhyZWFkIGZhaWxlZC4iKTsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJO
b3Qgb24gY2FtZXJhIHRocmVhZC4iKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3RyaW5n
IGdldENhbWVyYU5hbWUoKSB7Ci0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAg
IHJldHVybiBjYW1lcmFOYW1lOwotICAgIH0KLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3RlZCB2
b2lkIGNyZWF0ZUNhbWVyYVNlc3Npb24oCi0gICAgICBDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Np
b25DYWxsYmFjayBjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIENhbWVyYVNlc3Npb24uRXZlbnRzIGV2
ZW50cywKLSAgICAgIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LCBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3RyaW5nIGNhbWVyYU5hbWUsCi0gICAgICBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpOwotfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC5hYnM7Ci0KLWltcG9y
dCBhbmRyb2lkLmdyYXBoaWNzLkltYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxp
c3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlv
bnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5NZXRyaWNzLkhpc3RvZ3JhbTsKLQotQFN1cHByZXNzV2Fybmlu
Z3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQg
ewotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNhbWVyYUVudW1lcmF0aW9u
QW5kcm9pZCI7Ci0KLSAgc3RhdGljIGZpbmFsIEFycmF5TGlzdDxTaXplPiBDT01NT05fUkVTT0xV
VElPTlMgPSBuZXcgQXJyYXlMaXN0PFNpemU+KEFycmF5cy5hc0xpc3QoCi0gICAgICAvLyAwLCBV
bmtub3duIHJlc29sdXRpb24KLSAgICAgIG5ldyBTaXplKDE2MCwgMTIwKSwgLy8gMSwgUVFWR0EK
LSAgICAgIG5ldyBTaXplKDI0MCwgMTYwKSwgLy8gMiwgSFFWR0EKLSAgICAgIG5ldyBTaXplKDMy
MCwgMjQwKSwgLy8gMywgUVZHQQotICAgICAgbmV3IFNpemUoNDAwLCAyNDApLCAvLyA0LCBXUVZH
QQotICAgICAgbmV3IFNpemUoNDgwLCAzMjApLCAvLyA1LCBIVkdBCi0gICAgICBuZXcgU2l6ZSg2
NDAsIDM2MCksIC8vIDYsIG5IRAotICAgICAgbmV3IFNpemUoNjQwLCA0ODApLCAvLyA3LCBWR0EK
LSAgICAgIG5ldyBTaXplKDc2OCwgNDgwKSwgLy8gOCwgV1ZHQQotICAgICAgbmV3IFNpemUoODU0
LCA0ODApLCAvLyA5LCBGV1ZHQQotICAgICAgbmV3IFNpemUoODAwLCA2MDApLCAvLyAxMCwgU1ZH
QQotICAgICAgbmV3IFNpemUoOTYwLCA1NDApLCAvLyAxMSwgcUhECi0gICAgICBuZXcgU2l6ZSg5
NjAsIDY0MCksIC8vIDEyLCBEVkdBCi0gICAgICBuZXcgU2l6ZSgxMDI0LCA1NzYpLCAvLyAxMywg
V1NWR0EKLSAgICAgIG5ldyBTaXplKDEwMjQsIDYwMCksIC8vIDE0LCBXVlNHQQotICAgICAgbmV3
IFNpemUoMTI4MCwgNzIwKSwgLy8gMTUsIEhECi0gICAgICBuZXcgU2l6ZSgxMjgwLCAxMDI0KSwg
Ly8gMTYsIFNYR0EKLSAgICAgIG5ldyBTaXplKDE5MjAsIDEwODApLCAvLyAxNywgRnVsbCBIRAot
ICAgICAgbmV3IFNpemUoMTkyMCwgMTQ0MCksIC8vIDE4LCBGdWxsIEhEIDQ6MwotICAgICAgbmV3
IFNpemUoMjU2MCwgMTQ0MCksIC8vIDE5LCBRSEQKLSAgICAgIG5ldyBTaXplKDM4NDAsIDIxNjAp
IC8vIDIwLCBVSEQKLSAgICAgICkpOwotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2FwdHVyZUZv
cm1hdCB7Ci0gICAgLy8gQ2xhc3MgdG8gcmVwcmVzZW50IGEgZnJhbWVyYXRlIHJhbmdlLiBUaGUg
ZnJhbWVyYXRlIHZhcmllcyBiZWNhdXNlIG9mIGxpZ2h0bmluZyBjb25kaXRpb25zLgotICAgIC8v
IFRoZSB2YWx1ZXMgYXJlIG11bHRpcGxpZWQgYnkgMTAwMCwgc28gMTAwMCByZXByZXNlbnRzIG9u
ZSBmcmFtZSBwZXIgc2Vjb25kLgotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRnJhbWVyYXRlUmFu
Z2UgewotICAgICAgcHVibGljIGludCBtaW47Ci0gICAgICBwdWJsaWMgaW50IG1heDsKLQotICAg
ICAgcHVibGljIEZyYW1lcmF0ZVJhbmdlKGludCBtaW4sIGludCBtYXgpIHsKLSAgICAgICAgdGhp
cy5taW4gPSBtaW47Ci0gICAgICAgIHRoaXMubWF4ID0gbWF4OwotICAgICAgfQotCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJldHVy
biAiWyIgKyAobWluIC8gMTAwMC4wZikgKyAiOiIgKyAobWF4IC8gMTAwMC4wZikgKyAiXSI7Ci0g
ICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9i
amVjdCBvdGhlcikgewotICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEZyYW1lcmF0ZVJh
bmdlKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmaW5h
bCBGcmFtZXJhdGVSYW5nZSBvdGhlckZyYW1lcmF0ZSA9IChGcmFtZXJhdGVSYW5nZSkgb3RoZXI7
Ci0gICAgICAgIHJldHVybiBtaW4gPT0gb3RoZXJGcmFtZXJhdGUubWluICYmIG1heCA9PSBvdGhl
ckZyYW1lcmF0ZS5tYXg7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgLy8gVXNlIHByaW1lIGNsb3NlIHRvIDJeMTYgdG8g
YXZvaWQgY29sbGlzaW9ucyBmb3Igbm9ybWFsIHZhbHVlcyBsZXNzIHRoYW4gMl4xNi4KLSAgICAg
ICAgcmV0dXJuIDEgKyA2NTUzNyAqIG1pbiArIG1heDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgZmluYWwgaW50IHdpZHRoOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgaGVpZ2h0OwotICAg
IHB1YmxpYyBmaW5hbCBGcmFtZXJhdGVSYW5nZSBmcmFtZXJhdGU7Ci0KLSAgICAvLyBUT0RPKGhi
b3MpOiBJZiBWaWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZSBpcyB1cGRhdGVkIHRvIHN1cHBvcnQg
b3RoZXIgaW1hZ2UgZm9ybWF0cyB0aGVuIHRoaXMKLSAgICAvLyBuZWVkcyB0byBiZSB1cGRhdGVk
IGFuZCBWaWRlb0NhcHR1cmVyLmdldFN1cHBvcnRlZEZvcm1hdHMgbmVlZCB0byByZXR1cm4gQ2Fw
dHVyZUZvcm1hdHMgb2YKLSAgICAvLyBhbGwgaW1hZ2VGb3JtYXRzLgotICAgIHB1YmxpYyBmaW5h
bCBpbnQgaW1hZ2VGb3JtYXQgPSBJbWFnZUZvcm1hdC5OVjIxOwotCi0gICAgcHVibGljIENhcHR1
cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWluRnJhbWVyYXRlLCBpbnQgbWF4
RnJhbWVyYXRlKSB7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0aGlzLmhlaWdo
dCA9IGhlaWdodDsKLSAgICAgIHRoaXMuZnJhbWVyYXRlID0gbmV3IEZyYW1lcmF0ZVJhbmdlKG1p
bkZyYW1lcmF0ZSwgbWF4RnJhbWVyYXRlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2FwdHVyZUZv
cm1hdChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZyYW1lcmF0ZVJhbmdlIGZyYW1lcmF0ZSkgewot
ICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0g
ICAgICB0aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKLSAgICB9Ci0KLSAgICAvLyBDYWxjdWxh
dGVzIHRoZSBmcmFtZSBzaXplIG9mIHRoaXMgY2FwdHVyZSBmb3JtYXQuCi0gICAgcHVibGljIGlu
dCBmcmFtZVNpemUoKSB7Ci0gICAgICByZXR1cm4gZnJhbWVTaXplKHdpZHRoLCBoZWlnaHQsIGlt
YWdlRm9ybWF0KTsKLSAgICB9Ci0KLSAgICAvLyBDYWxjdWxhdGVzIHRoZSBmcmFtZSBzaXplIG9m
IHRoZSBzcGVjaWZpZWQgaW1hZ2UgZm9ybWF0LiBDdXJyZW50bHkgb25seQotICAgIC8vIHN1cHBv
cnRpbmcgSW1hZ2VGb3JtYXQuTlYyMS4KLSAgICAvLyBUaGUgc2l6ZSBpcyB3aWR0aCAqIGhlaWdo
dCAqIG51bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwuCi0gICAgLy8gaHR0cDovL2RldmVsb3Blci5h
bmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEuaHRtbCNhZGRDYWxs
YmFja0J1ZmZlcihieXRlW10pCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZnJhbWVTaXplKGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IGltYWdlRm9ybWF0KSB7Ci0gICAgICBpZiAoaW1hZ2VGb3Jt
YXQgIT0gSW1hZ2VGb3JtYXQuTlYyMSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRP
cGVyYXRpb25FeGNlcHRpb24oIkRvbid0IGtub3cgaG93IHRvIGNhbGN1bGF0ZSAiCi0gICAgICAg
ICAgICArICJ0aGUgZnJhbWUgc2l6ZSBvZiBub24tTlYyMSBpbWFnZSBmb3JtYXRzLiIpOwotICAg
ICAgfQotICAgICAgcmV0dXJuICh3aWR0aCAqIGhlaWdodCAqIEltYWdlRm9ybWF0LmdldEJpdHNQ
ZXJQaXhlbChpbWFnZUZvcm1hdCkpIC8gODsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHdpZHRoICsgIngiICsgaGVp
Z2h0ICsgIkAiICsgZnJhbWVyYXRlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGlmICghKG90aGVyIGluc3Rh
bmNlb2YgQ2FwdHVyZUZvcm1hdCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQot
ICAgICAgZmluYWwgQ2FwdHVyZUZvcm1hdCBvdGhlckZvcm1hdCA9IChDYXB0dXJlRm9ybWF0KSBv
dGhlcjsKLSAgICAgIHJldHVybiB3aWR0aCA9PSBvdGhlckZvcm1hdC53aWR0aCAmJiBoZWlnaHQg
PT0gb3RoZXJGb3JtYXQuaGVpZ2h0Ci0gICAgICAgICAgJiYgZnJhbWVyYXRlLmVxdWFscyhvdGhl
ckZvcm1hdC5mcmFtZXJhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBp
bnQgaGFzaENvZGUoKSB7Ci0gICAgICByZXR1cm4gMSArICh3aWR0aCAqIDY1NDk3ICsgaGVpZ2h0
KSAqIDI1MSArIGZyYW1lcmF0ZS5oYXNoQ29kZSgpOwotICAgIH0KLSAgfQotCi0gIC8vIEhlbHBl
ciBjbGFzcyBmb3IgZmluZGluZyB0aGUgY2xvc2VzdCBzdXBwb3J0ZWQgZm9ybWF0IGZvciB0aGUg
dHdvIGZ1bmN0aW9ucyBiZWxvdy4gSXQgY3JlYXRlcyBhCi0gIC8vIGNvbXBhcmF0b3IgYmFzZWQg
b24gdGhlIGRpZmZlcmVuY2UgdG8gc29tZSByZXF1ZXN0ZWQgcGFyYW1ldGVycywgd2hlcmUgdGhl
IGVsZW1lbnQgd2l0aCB0aGUKLSAgLy8gbWluaW11bSBkaWZmZXJlbmNlIGlzIHRoZSBlbGVtZW50
IHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMuCi0gIHByaXZhdGUg
c3RhdGljIGFic3RyYWN0IGNsYXNzIENsb3Nlc3RDb21wYXJhdG9yPFQ+IGltcGxlbWVudHMgQ29t
cGFyYXRvcjxUPiB7Ci0gICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIHN1cHBvcnRlZCBhbmQgcmVx
dWVzdGVkIHBhcmFtZXRlci4KLSAgICBhYnN0cmFjdCBpbnQgZGlmZihUIHN1cHBvcnRlZFBhcmFt
ZXRlcik7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNvbXBhcmUoVCB0MSwgVCB0
MikgewotICAgICAgcmV0dXJuIGRpZmYodDEpIC0gZGlmZih0Mik7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gUHJlZmVyIGEgZnBzIHJhbmdlIHdpdGggYW4gdXBwZXIgYm91bmQgY2xvc2UgdG8gfGZyYW1l
cmF0ZXwuIEFsc28gcHJlZmVyIGEgZnBzIHJhbmdlIHdpdGggYSBsb3cKLSAgLy8gbG93ZXIgYm91
bmQsIHRvIGFsbG93IHRoZSBmcmFtZXJhdGUgdG8gZmx1Y3R1YXRlIGJhc2VkIG9uIGxpZ2h0bmlu
ZyBjb25kaXRpb25zLgotICBwdWJsaWMgc3RhdGljIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFu
Z2UgZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKAotICAgICAgTGlzdDxDYXB0dXJl
Rm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBzdXBwb3J0ZWRGcmFtZXJhdGVzLCBmaW5hbCBpbnQgcmVx
dWVzdGVkRnBzKSB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLm1pbigKLSAgICAgICAgc3VwcG9y
dGVkRnJhbWVyYXRlcywgbmV3IENsb3Nlc3RDb21wYXJhdG9yPENhcHR1cmVGb3JtYXQuRnJhbWVy
YXRlUmFuZ2U+KCkgewotICAgICAgICAgIC8vIFByb2dyZXNzaXZlIHBlbmFsdHkgaWYgdGhlIHVw
cGVyIGJvdW5kIGlzIGZ1cnRoZXIgYXdheSB0aGFuIHxNQVhfRlBTX0RJRkZfVEhSRVNIT0xEfAot
ICAgICAgICAgIC8vIGZyb20gcmVxdWVzdGVkLgotICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBNQVhfRlBTX0RJRkZfVEhSRVNIT0xEID0gNTAwMDsKLSAgICAgICAgICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgTUFYX0ZQU19MT1dfRElGRl9XRUlHSFQgPSAxOwotICAgICAgICAg
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfRlBTX0hJR0hfRElGRl9XRUlHSFQgPSAzOwot
Ci0gICAgICAgICAgLy8gUHJvZ3Jlc3NpdmUgcGVuYWx0eSBpZiB0aGUgbG93ZXIgYm91bmQgaXMg
YmlnZ2VyIHRoYW4gfE1JTl9GUFNfVEhSRVNIT0xEfC4KLSAgICAgICAgICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgTUlOX0ZQU19USFJFU0hPTEQgPSA4MDAwOwotICAgICAgICAgIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBNSU5fRlBTX0xPV19WQUxVRV9XRUlHSFQgPSAxOwotICAgICAgICAg
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fRlBTX0hJR0hfVkFMVUVfV0VJR0hUID0gNDsK
LQotICAgICAgICAgIC8vIFVzZSBvbmUgd2VpZ2h0IGZvciBzbWFsbCB8dmFsdWV8IGxlc3MgdGhh
biB8dGhyZXNob2xkfCwgYW5kIGFub3RoZXIgd2VpZ2h0IGFib3ZlLgotICAgICAgICAgIHByaXZh
dGUgaW50IHByb2dyZXNzaXZlUGVuYWx0eShpbnQgdmFsdWUsIGludCB0aHJlc2hvbGQsIGludCBs
b3dXZWlnaHQsIGludCBoaWdoV2VpZ2h0KSB7Ci0gICAgICAgICAgICByZXR1cm4gKHZhbHVlIDwg
dGhyZXNob2xkKSA/IHZhbHVlICogbG93V2VpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA6IHRocmVzaG9sZCAqIGxvd1dlaWdodCArICh2YWx1ZSAtIHRocmVzaG9s
ZCkgKiBoaWdoV2VpZ2h0OwotICAgICAgICAgIH0KLQotICAgICAgICAgIEBPdmVycmlkZQotICAg
ICAgICAgIGludCBkaWZmKENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UgcmFuZ2UpIHsKLSAg
ICAgICAgICAgIGZpbmFsIGludCBtaW5GcHNFcnJvciA9IHByb2dyZXNzaXZlUGVuYWx0eSgKLSAg
ICAgICAgICAgICAgICByYW5nZS5taW4sIE1JTl9GUFNfVEhSRVNIT0xELCBNSU5fRlBTX0xPV19W
QUxVRV9XRUlHSFQsIE1JTl9GUFNfSElHSF9WQUxVRV9XRUlHSFQpOwotICAgICAgICAgICAgZmlu
YWwgaW50IG1heEZwc0Vycm9yID0gcHJvZ3Jlc3NpdmVQZW5hbHR5KE1hdGguYWJzKHJlcXVlc3Rl
ZEZwcyAqIDEwMDAgLSByYW5nZS5tYXgpLAotICAgICAgICAgICAgICAgIE1BWF9GUFNfRElGRl9U
SFJFU0hPTEQsIE1BWF9GUFNfTE9XX0RJRkZfV0VJR0hULCBNQVhfRlBTX0hJR0hfRElGRl9XRUlH
SFQpOwotICAgICAgICAgICAgcmV0dXJuIG1pbkZwc0Vycm9yICsgbWF4RnBzRXJyb3I7Ci0gICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU2l6ZSBnZXRDbG9z
ZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgIExpc3Q8U2l6ZT4gc3VwcG9ydGVkU2l6ZXMsIGZpbmFs
IGludCByZXF1ZXN0ZWRXaWR0aCwgZmluYWwgaW50IHJlcXVlc3RlZEhlaWdodCkgewotICAgIHJl
dHVybiBDb2xsZWN0aW9ucy5taW4oc3VwcG9ydGVkU2l6ZXMsIG5ldyBDbG9zZXN0Q29tcGFyYXRv
cjxTaXplPigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgaW50IGRpZmYoU2l6ZSBzaXplKSB7
Ci0gICAgICAgIHJldHVybiBhYnMocmVxdWVzdGVkV2lkdGggLSBzaXplLndpZHRoKSArIGFicyhy
ZXF1ZXN0ZWRIZWlnaHQgLSBzaXplLmhlaWdodCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICAvLyBIZWxwZXIgbWV0aG9kIGZvciBjYW1lcmEgY2xhc3Nlcy4KLSAgc3RhdGljIHZvaWQgcmVw
b3J0Q2FtZXJhUmVzb2x1dGlvbihIaXN0b2dyYW0gaGlzdG9ncmFtLCBTaXplIHJlc29sdXRpb24p
IHsKLSAgICBpbnQgaW5kZXggPSBDT01NT05fUkVTT0xVVElPTlMuaW5kZXhPZihyZXNvbHV0aW9u
KTsKLSAgICAvLyAwIGlzIHJlc2VydmVkIGZvciB1bmtub3duIHJlc29sdXRpb24sIHNvIGFkZCAx
LgotICAgIC8vIGluZGV4T2YgcmV0dXJucyAtMSBmb3IgdW5rbm93biByZXNvbHV0aW9ucyBzbyBp
dCBiZWNvbWVzIDAgYXV0b21hdGljYWxseS4KLSAgICBoaXN0b2dyYW0uYWRkU2FtcGxlKGluZGV4
ICsgMSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRvci5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRvci5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0b3Iu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotcHVi
bGljIGludGVyZmFjZSBDYW1lcmFFbnVtZXJhdG9yIHsKLSAgcHVibGljIFN0cmluZ1tdIGdldERl
dmljZU5hbWVzKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzRnJvbnRGYWNpbmcoU3RyaW5nIGRldmlj
ZU5hbWUpOwotICBwdWJsaWMgYm9vbGVhbiBpc0JhY2tGYWNpbmcoU3RyaW5nIGRldmljZU5hbWUp
OwotICBwdWJsaWMgTGlzdDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKFN0cmlu
ZyBkZXZpY2VOYW1lKTsKLQotICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0dXJlciBjcmVhdGVDYXB0
dXJlcigKLSAgICAgIFN0cmluZyBkZXZpY2VOYW1lLCBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVy
YUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0NhbWVyYVNlc3Npb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVy
YVNlc3Npb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1l
cmFTZXNzaW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJh
U2Vzc2lvbiB7Ci0gIC8vIENhbGxiYWNrcyBhcmUgZmlyZWQgb24gdGhlIGNhbWVyYSB0aHJlYWQu
Ci0gIHB1YmxpYyBpbnRlcmZhY2UgQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIHsKLSAgICB2b2lkIG9u
RG9uZShDYW1lcmFTZXNzaW9uIHNlc3Npb24pOwotICAgIHZvaWQgb25GYWlsdXJlKFN0cmluZyBl
cnJvcik7Ci0gIH0KLQotICAvLyBFdmVudHMgYXJlIGZpcmVkIG9uIHRoZSBjYW1lcmEgdGhyZWFk
LgotICBwdWJsaWMgaW50ZXJmYWNlIEV2ZW50cyB7Ci0gICAgdm9pZCBvbkNhbWVyYU9wZW5pbmco
KTsKLSAgICB2b2lkIG9uQ2FtZXJhRXJyb3IoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcg
ZXJyb3IpOwotICAgIHZvaWQgb25DYW1lcmFEaXNjb25uZWN0ZWQoQ2FtZXJhU2Vzc2lvbiBzZXNz
aW9uKTsKLSAgICB2b2lkIG9uQ2FtZXJhQ2xvc2VkKENhbWVyYVNlc3Npb24gc2Vzc2lvbik7Ci0g
ICAgdm9pZCBvbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBDYW1lcmFTZXNzaW9u
IHNlc3Npb24sIGJ5dGVbXSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlv
biwgbG9uZyB0aW1lc3RhbXApOwotICAgIHZvaWQgb25UZXh0dXJlRnJhbWVDYXB0dXJlZChDYW1l
cmFTZXNzaW9uIHNlc3Npb24sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9lc1RleHR1cmVJ
ZCwKLSAgICAgICAgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9uZyB0
aW1lc3RhbXApOwotICB9Ci0KLSAgLyoqCi0gICAqIFN0b3BzIHRoZSBjYXB0dXJlLiBXYWl0cyB1
bnRpbCBubyBtb3JlIGNhbGxzIHRvIGNhcHR1cmUgb2JzZXJ2ZXIgd2lsbCBiZSBtYWRlLgotICAg
KiBJZiB3YWl0Q2FtZXJhU3RvcCBpcyB0cnVlLCBhbHNvIHdhaXRzIGZvciB0aGUgY2FtZXJhIHRv
IHN0b3AuCi0gICAqLwotICB2b2lkIHN0b3AoKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
Q2FtZXJhVmlkZW9DYXB0dXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
Q2FtZXJhVmlkZW9DYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgot
ICogQmFzZSBpbnRlcmZhY2UgZm9yIGNhbWVyYTEgYW5kIGNhbWVyYTIgaW1wbGVtZW50YXRpb25z
LiBFeHRlbmRzIFZpZGVvQ2FwdHVyZXIgd2l0aCBhCi0gKiBzd2l0Y2hDYW1lcmEoKSBmdW5jdGlv
bi4gQWxzbyBwcm92aWRlcyBzdWJpbnRlcmZhY2VzIGZvciBoYW5kbGluZyBjYW1lcmEgZXZlbnRz
LCBhbmQgYSBoZWxwZXIKLSAqIGNsYXNzIGZvciBkZXRlY3RpbmcgY2FtZXJhIGZyZWV6ZXMuCi0g
Ki8KLXB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJhVmlkZW9DYXB0dXJlciBleHRlbmRzIFZpZGVvQ2Fw
dHVyZXIgewotICAvKioKLSAgICogQ2FtZXJhIGV2ZW50cyBoYW5kbGVyIC0gY2FuIGJlIHVzZWQg
dG8gYmUgbm90aWZlZCBhYm91dCBjYW1lcmEgZXZlbnRzLiBUaGUgY2FsbGJhY2tzIGFyZQotICAg
KiBleGVjdXRlZCBmcm9tIGFuIGFyYml0cmFyeSB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMgaW50
ZXJmYWNlIENhbWVyYUV2ZW50c0hhbmRsZXIgewotICAgIC8vIENhbWVyYSBlcnJvciBoYW5kbGVy
IC0gaW52b2tlZCB3aGVuIGNhbWVyYSBjYW4gbm90IGJlIG9wZW5lZAotICAgIC8vIG9yIGFueSBj
YW1lcmEgZXhjZXB0aW9uIGhhcHBlbnMgb24gY2FtZXJhIHRocmVhZC4KLSAgICB2b2lkIG9uQ2Ft
ZXJhRXJyb3IoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pOwotCi0gICAgLy8gQ2FsbGVkIHdoZW4g
Y2FtZXJhIGlzIGRpc2Nvbm5lY3RlZC4KLSAgICB2b2lkIG9uQ2FtZXJhRGlzY29ubmVjdGVkKCk7
Ci0KLSAgICAvLyBJbnZva2VkIHdoZW4gY2FtZXJhIHN0b3BzIHJlY2VpdmluZyBmcmFtZXMuCi0g
ICAgdm9pZCBvbkNhbWVyYUZyZWV6ZWQoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pOwotCi0gICAg
Ly8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGNhbWVyYSBpcyBvcGVuaW5nLgotICAgIHZvaWQgb25D
YW1lcmFPcGVuaW5nKFN0cmluZyBjYW1lcmFOYW1lKTsKLQotICAgIC8vIENhbGxiYWNrIGludm9r
ZWQgd2hlbiBmaXJzdCBjYW1lcmEgZnJhbWUgaXMgYXZhaWxhYmxlIGFmdGVyIGNhbWVyYSBpcyBz
dGFydGVkLgotICAgIHZvaWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0KLSAgICAvLyBDYWxs
YmFjayBpbnZva2VkIHdoZW4gY2FtZXJhIGlzIGNsb3NlZC4KLSAgICB2b2lkIG9uQ2FtZXJhQ2xv
c2VkKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FtZXJhIHN3aXRjaCBoYW5kbGVyIC0gb25lIG9m
IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aXRoIHRoZSByZXN1bHQgb2Ygc3dpdGNoQ2Ft
ZXJhKCkuCi0gICAqIFRoZSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIG9uIGFuIGFyYml0cmFyeSB0
aHJlYWQuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIENhbWVyYVN3aXRjaEhhbmRsZXIgewot
ICAgIC8vIEludm9rZWQgb24gc3VjY2Vzcy4gfGlzRnJvbnRDYW1lcmF8IGlzIHRydWUgaWYgdGhl
IG5ldyBjYW1lcmEgaXMgZnJvbnQgZmFjaW5nLgotICAgIHZvaWQgb25DYW1lcmFTd2l0Y2hEb25l
KGJvb2xlYW4gaXNGcm9udENhbWVyYSk7Ci0KLSAgICAvLyBJbnZva2VkIG9uIGZhaWx1cmUsIGUu
Zy4gY2FtZXJhIGlzIHN0b3BwZWQgb3Igb25seSBvbmUgY2FtZXJhIGF2YWlsYWJsZS4KLSAgICB2
b2lkIG9uQ2FtZXJhU3dpdGNoRXJyb3IoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pOwotICB9Ci0K
LSAgLyoqCi0gICAqIFN3aXRjaCBjYW1lcmEgdG8gdGhlIG5leHQgdmFsaWQgY2FtZXJhIGlkLiBU
aGlzIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgY2FtZXJhIGlzIHJ1bm5pbmcuCi0gICAq
IFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCi0gICAqLwotICB2
b2lkIHN3aXRjaENhbWVyYShDYW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXIp
OwotCi0gIC8qKgotICAgKiBIZWxwZXIgY2xhc3MgdG8gbG9nIGZyYW1lcmF0ZSBhbmQgZGV0ZWN0
IGlmIHRoZSBjYW1lcmEgZnJlZXplcy4gSXQgd2lsbCBydW4gcGVyaW9kaWMgY2FsbGJhY2tzCi0g
ICAqIG9uIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciB0aHJlYWQgcGFzc2VkIGluIHRoZSBjdG9y
LCBhbmQgc2hvdWxkIG9ubHkgYmUgb3BlcmF0ZWQgZnJvbSB0aGF0Ci0gICAqIHRocmVhZC4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2FtZXJhU3RhdGlzdGljcyB7Ci0gICAgcHJpdmF0
ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJDYW1lcmFTdGF0aXN0aWNzIjsKLSAgICBwcml2
YXRlIGZpbmFsIHN0YXRpYyBpbnQgQ0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyA9IDIwMDA7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IENBTUVSQV9GUkVFWkVfUkVQT1JUX1RJTU9VVF9N
UyA9IDQwMDA7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZh
Y2VUZXh0dXJlSGVscGVyOwotICAgIHByaXZhdGUgZmluYWwgQ2FtZXJhRXZlbnRzSGFuZGxlciBl
dmVudHNIYW5kbGVyOwotICAgIHByaXZhdGUgaW50IGZyYW1lQ291bnQ7Ci0gICAgcHJpdmF0ZSBp
bnQgZnJlZXplUGVyaW9kQ291bnQ7Ci0gICAgLy8gQ2FtZXJhIG9ic2VydmVyIC0gbW9uaXRvcnMg
Y2FtZXJhIGZyYW1lcmF0ZS4gT2JzZXJ2ZXIgaXMgZXhlY3V0ZWQgb24gY2FtZXJhIHRocmVhZC4K
LSAgICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIGNhbWVyYU9ic2VydmVyID0gbmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGZpbmFsIGludCBjYW1lcmFGcHMgPSBNYXRoLnJvdW5kKGZyYW1lQ291bnQgKiAxMDAwLjBmIC8g
Q0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1l
cmEgZnBzOiAiICsgY2FtZXJhRnBzICsgIi4iKTsKLSAgICAgICAgaWYgKGZyYW1lQ291bnQgPT0g
MCkgewotICAgICAgICAgICsrZnJlZXplUGVyaW9kQ291bnQ7Ci0gICAgICAgICAgaWYgKENBTUVS
QV9PQlNFUlZFUl9QRVJJT0RfTVMgKiBmcmVlemVQZXJpb2RDb3VudCA+PSBDQU1FUkFfRlJFRVpF
X1JFUE9SVF9USU1PVVRfTVMKLSAgICAgICAgICAgICAgJiYgZXZlbnRzSGFuZGxlciAhPSBudWxs
KSB7Ci0gICAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGZyZWV6ZWQuIik7Ci0gICAg
ICAgICAgICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIuaXNUZXh0dXJlSW5Vc2UoKSkgewotICAg
ICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB3ZSBhcmUgY2FwdHVyaW5nIHRv
IHRleHR1cmVzLgotICAgICAgICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRnJlZXplZCgi
Q2FtZXJhIGZhaWx1cmUuIENsaWVudCBtdXN0IHJldHVybiB2aWRlbyBidWZmZXJzLiIpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUZy
ZWV6ZWQoIkNhbWVyYSBmYWlsdXJlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmVlemVQZXJp
b2RDb3VudCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWVDb3VudCA9IDA7Ci0gICAgICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKS5wb3N0RGVsYXllZCh0aGlzLCBDQU1F
UkFfT0JTRVJWRVJfUEVSSU9EX01TKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgcHVibGljIENh
bWVyYVN0YXRpc3RpY3MoCi0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0
dXJlSGVscGVyLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICAgIGlm
IChzdXJmYWNlVGV4dHVyZUhlbHBlciA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxl
Z2FsQXJndW1lbnRFeGNlcHRpb24oIlN1cmZhY2VUZXh0dXJlSGVscGVyIGlzIG51bGwiKTsKLSAg
ICAgIH0KLSAgICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4dHVyZUhl
bHBlcjsKLSAgICAgIHRoaXMuZXZlbnRzSGFuZGxlciA9IGV2ZW50c0hhbmRsZXI7Ci0gICAgICB0
aGlzLmZyYW1lQ291bnQgPSAwOwotICAgICAgdGhpcy5mcmVlemVQZXJpb2RDb3VudCA9IDA7Ci0g
ICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdERlbGF5ZWQoY2FtZXJh
T2JzZXJ2ZXIsIENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMpOwotICAgIH0KLQotICAgIHByaXZh
dGUgdm9pZCBjaGVja1RocmVhZCgpIHsKLSAgICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgp
ICE9IHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKS5nZXRMb29wZXIoKS5nZXRUaHJl
YWQoKSkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0
aHJlYWQiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRGcmFtZSgpIHsK
LSAgICAgIGNoZWNrVGhyZWFkKCk7Ci0gICAgICArK2ZyYW1lQ291bnQ7Ci0gICAgfQotCi0gICAg
cHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhh
bmRsZXIoKS5yZW1vdmVDYWxsYmFja3MoY2FtZXJhT2JzZXJ2ZXIpOwotICAgIH0KLSAgfQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvRGF0YUNoYW5uZWwuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTI3ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0
IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIERhdGFD
aGFubmVsSW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIERhdGFDaGFubmVsIHsKLSAgLyoqIEph
dmEgd3JhcHBlciBmb3IgV2ViSURMIFJUQ0RhdGFDaGFubmVsLiAqLwotICBwdWJsaWMgc3RhdGlj
IGNsYXNzIEluaXQgewotICAgIHB1YmxpYyBib29sZWFuIG9yZGVyZWQgPSB0cnVlOwotICAgIC8v
IE9wdGlvbmFsIHVuc2lnbmVkIHNob3J0IGluIFdlYklETCwgLTEgbWVhbnMgdW5zcGVjaWZpZWQu
Ci0gICAgcHVibGljIGludCBtYXhSZXRyYW5zbWl0VGltZU1zID0gLTE7Ci0gICAgLy8gT3B0aW9u
YWwgdW5zaWduZWQgc2hvcnQgaW4gV2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmllZC4KLSAgICBw
dWJsaWMgaW50IG1heFJldHJhbnNtaXRzID0gLTE7Ci0gICAgcHVibGljIFN0cmluZyBwcm90b2Nv
bCA9ICIiOwotICAgIHB1YmxpYyBib29sZWFuIG5lZ290aWF0ZWQgPSBmYWxzZTsKLSAgICAvLyBP
cHRpb25hbCB1bnNpZ25lZCBzaG9ydCBpbiBXZWJJREwsIC0xIG1lYW5zIHVuc3BlY2lmaWVkLgot
ICAgIHB1YmxpYyBpbnQgaWQgPSAtMTsKLQotICAgIHB1YmxpYyBJbml0KCkge30KLQotICAgIC8v
IENhbGxlZCBvbmx5IGJ5IG5hdGl2ZSBjb2RlLgotICAgIHByaXZhdGUgSW5pdChib29sZWFuIG9y
ZGVyZWQsIGludCBtYXhSZXRyYW5zbWl0VGltZU1zLCBpbnQgbWF4UmV0cmFuc21pdHMsIFN0cmlu
ZyBwcm90b2NvbCwKLSAgICAgICAgYm9vbGVhbiBuZWdvdGlhdGVkLCBpbnQgaWQpIHsKLSAgICAg
IHRoaXMub3JkZXJlZCA9IG9yZGVyZWQ7Ci0gICAgICB0aGlzLm1heFJldHJhbnNtaXRUaW1lTXMg
PSBtYXhSZXRyYW5zbWl0VGltZU1zOwotICAgICAgdGhpcy5tYXhSZXRyYW5zbWl0cyA9IG1heFJl
dHJhbnNtaXRzOwotICAgICAgdGhpcy5wcm90b2NvbCA9IHByb3RvY29sOwotICAgICAgdGhpcy5u
ZWdvdGlhdGVkID0gbmVnb3RpYXRlZDsKLSAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9Ci0gIH0K
LQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIEMrKyBEYXRhQnVmZmVyLiAgVGhlIGF0b20gb2YgZGF0
YSBpbiBhIERhdGFDaGFubmVsLiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1ZmZlciB7Ci0g
ICAgLyoqIFRoZSB1bmRlcmx5aW5nIGRhdGEuICovCi0gICAgcHVibGljIGZpbmFsIEJ5dGVCdWZm
ZXIgZGF0YTsKLQotICAgIC8qKgotICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHxkYXRhfCBjb250
YWlucyBVVEYtOCB0ZXh0IG9yICJiaW5hcnkgZGF0YSIKLSAgICAgKiAoaS5lLiBhbnl0aGluZyBl
bHNlKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBiaW5hcnk7Ci0KLSAgICBw
dWJsaWMgQnVmZmVyKEJ5dGVCdWZmZXIgZGF0YSwgYm9vbGVhbiBiaW5hcnkpIHsKLSAgICAgIHRo
aXMuZGF0YSA9IGRhdGE7Ci0gICAgICB0aGlzLmJpbmFyeSA9IGJpbmFyeTsKLSAgICB9Ci0gIH0K
LQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIEMrKyBEYXRhQ2hhbm5lbE9ic2VydmVyLiAqLwotICBw
dWJsaWMgaW50ZXJmYWNlIE9ic2VydmVyIHsKLSAgICAvKiogVGhlIGRhdGEgY2hhbm5lbCdzIGJ1
ZmZlcmVkQW1vdW50IGhhcyBjaGFuZ2VkLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uQnVmZmVyZWRB
bW91bnRDaGFuZ2UobG9uZyBwcmV2aW91c0Ftb3VudCk7Ci0gICAgLyoqIFRoZSBkYXRhIGNoYW5u
ZWwgc3RhdGUgaGFzIGNoYW5nZWQuICovCi0gICAgcHVibGljIHZvaWQgb25TdGF0ZUNoYW5nZSgp
OwotICAgIC8qKgotICAgICAqIEEgZGF0YSBidWZmZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWNlaXZl
ZC4gIE5PVEU6IHxidWZmZXIuZGF0YXwgd2lsbCBiZQotICAgICAqIGZyZWVkIG9uY2UgdGhpcyBm
dW5jdGlvbiByZXR1cm5zIHNvIGNhbGxlcnMgd2hvIHdhbnQgdG8gdXNlIHRoZSBkYXRhCi0gICAg
ICogYXN5bmNocm9ub3VzbHkgbXVzdCBtYWtlIHN1cmUgdG8gY29weSBpdCBmaXJzdC4KLSAgICAg
Ki8KLSAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoQnVmZmVyIGJ1ZmZlcik7Ci0gIH0KLQotICAv
KiogS2VlcCBpbiBzeW5jIHdpdGggRGF0YUNoYW5uZWxJbnRlcmZhY2U6OkRhdGFTdGF0ZS4gKi8K
LSAgcHVibGljIGVudW0gU3RhdGUgeyBDT05ORUNUSU5HLCBPUEVOLCBDTE9TSU5HLCBDTE9TRUQg
fQotCi0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVEYXRhQ2hhbm5lbDsKLSAgcHJpdmF0ZSBs
b25nIG5hdGl2ZU9ic2VydmVyOwotCi0gIHB1YmxpYyBEYXRhQ2hhbm5lbChsb25nIG5hdGl2ZURh
dGFDaGFubmVsKSB7Ci0gICAgdGhpcy5uYXRpdmVEYXRhQ2hhbm5lbCA9IG5hdGl2ZURhdGFDaGFu
bmVsOwotICB9Ci0KLSAgLyoqIFJlZ2lzdGVyIHxvYnNlcnZlcnwsIHJlcGxhY2luZyBhbnkgcHJl
dmlvdXNseS1yZWdpc3RlcmVkIG9ic2VydmVyLiAqLwotICBwdWJsaWMgdm9pZCByZWdpc3Rlck9i
c2VydmVyKE9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgaWYgKG5hdGl2ZU9ic2VydmVyICE9IDAp
IHsKLSAgICAgIHVucmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShuYXRpdmVPYnNlcnZlcik7Ci0gICAg
fQotICAgIG5hdGl2ZU9ic2VydmVyID0gcmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShvYnNlcnZlcik7
Ci0gIH0KLSAgcHJpdmF0ZSBuYXRpdmUgbG9uZyByZWdpc3Rlck9ic2VydmVyTmF0aXZlKE9ic2Vy
dmVyIG9ic2VydmVyKTsKLQotICAvKiogVW5yZWdpc3RlciB0aGUgKG9ubHkpIG9ic2VydmVyLiAq
LwotICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXIoKSB7Ci0gICAgdW5yZWdpc3Rlck9i
c2VydmVyTmF0aXZlKG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotICBwcml2YXRlIG5hdGl2ZSB2b2lk
IHVucmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShsb25nIG5hdGl2ZU9ic2VydmVyKTsKLQotICBwdWJs
aWMgbmF0aXZlIFN0cmluZyBsYWJlbCgpOwotCi0gIHB1YmxpYyBuYXRpdmUgaW50IGlkKCk7Ci0K
LSAgcHVibGljIG5hdGl2ZSBTdGF0ZSBzdGF0ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm4gdGhl
IG51bWJlciBvZiBieXRlcyBvZiBhcHBsaWNhdGlvbiBkYXRhIChVVEYtOCB0ZXh0IGFuZCBiaW5h
cnkgZGF0YSkKLSAgICogdGhhdCBoYXZlIGJlZW4gcXVldWVkIHVzaW5nIFNlbmRCdWZmZXIgYnV0
IGhhdmUgbm90IHlldCBiZWVuIHRyYW5zbWl0dGVkCi0gICAqIHRvIHRoZSBuZXR3b3JrLgotICAg
Ki8KLSAgcHVibGljIG5hdGl2ZSBsb25nIGJ1ZmZlcmVkQW1vdW50KCk7Ci0KLSAgLyoqIENsb3Nl
IHRoZSBjaGFubmVsLiAqLwotICBwdWJsaWMgbmF0aXZlIHZvaWQgY2xvc2UoKTsKLQotICAvKiog
U2VuZCB8ZGF0YXwgdG8gdGhlIHJlbW90ZSBwZWVyOyByZXR1cm4gc3VjY2Vzcy4gKi8KLSAgcHVi
bGljIGJvb2xlYW4gc2VuZChCdWZmZXIgYnVmZmVyKSB7Ci0gICAgLy8gVE9ETyhmaXNjaG1hbik6
IHRoaXMgY291bGQgYmUgY2xldmVyZXIgYWJvdXQgYXZvaWRpbmcgY29waWVzIGlmIHRoZQotICAg
IC8vIEJ5dGVCdWZmZXIgaXMgZGlyZWN0IGFuZC9vciBpcyBiYWNrZWQgYnkgYW4gYXJyYXkuCi0g
ICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtidWZmZXIuZGF0YS5yZW1haW5pbmcoKV07Ci0gICAg
YnVmZmVyLmRhdGEuZ2V0KGRhdGEpOwotICAgIHJldHVybiBzZW5kTmF0aXZlKGRhdGEsIGJ1ZmZl
ci5iaW5hcnkpOwotICB9Ci0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gc2VuZE5hdGl2ZShieXRl
W10gZGF0YSwgYm9vbGVhbiBiaW5hcnkpOwotCi0gIC8qKiBEaXNwb3NlIG9mIG5hdGl2ZSByZXNv
dXJjZXMgYXR0YWNoZWQgdG8gdGhpcyBjaGFubmVsLiAqLwotICBwdWJsaWMgbmF0aXZlIHZvaWQg
ZGlzcG9zZSgpOwotfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZS5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZS5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEy
OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQudmll
dy5TdXJmYWNlOwotCi1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEw
OwotCi0vKioKLSAqIEhvbGRzIEVHTCBzdGF0ZSBhbmQgdXRpbGl0eSBtZXRob2RzIGZvciBoYW5k
bGluZyBhbiBlZ2wgMS4wIEVHTENvbnRleHQsIGFuIEVHTERpc3BsYXksCi0gKiBhbmQgYW4gRUdM
U3VyZmFjZS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEVnbEJhc2UgewotICAvLyBFR0wg
d3JhcHBlciBmb3IgYW4gYWN0dWFsIEVHTENvbnRleHQuCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3Mg
Q29udGV4dCB7fQotCi0gIC8vIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgRUdMIGNh
biBiZSB1c2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lIGlmIGVhY2gK
LSAgLy8gdGhyZWFkIGhhcyBpdHMgb3duIEVHTENvbnRleHQsIGJ1dCBpbiBwcmFjdGljZSBpdCBk
ZWFkbG9ja3Mgb24gc29tZSBkZXZpY2VzIHdoZW4gZG9pbmcgdGhpcy4KLSAgLy8gVGhlcmVmb3Jl
LCBzeW5jaHJvbml6ZSBvbiB0aGlzIGdsb2JhbCBsb2NrIGJlZm9yZSBjYWxsaW5nIGRhbmdlcm91
cyBFR0wgZnVuY3Rpb25zIHRoYXQgbWlnaHQKLSAgLy8gZGVhZGxvY2suIFNlZSBodHRwczovL2J1
Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTcwMiBmb3IgbW9yZSBp
bmZvLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBsb2NrID0gbmV3IE9iamVjdCgpOwot
Ci0gIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgdGFrZW4gZnJvbSBFR0wxNC5FR0xfT1BFTkdMX0VT
Ml9CSVQgYW5kIEVHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLgotICAvLyBodHRwczov
L2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2UvKy9tYXN0
ZXIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvRUdMMTQuamF2YQotICAvLyBUaGlzIGlzIHNp
bWlsYXIgdG8gaG93IEdsU3VyZmFjZVZpZXcgZG9lczoKLSAgLy8gaHR0cDovL2dyZXBjb2RlLmNv
bS9maWxlL3JlcG9zaXRvcnkuZ3JlcGNvZGUuY29tL2phdmEvZXh0L2NvbS5nb29nbGUuYW5kcm9p
ZC9hbmRyb2lkLzUuMS4xX3IxL2FuZHJvaWQvb3BlbmdsL0dMU3VyZmFjZVZpZXcuamF2YSM3NjAK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVHTF9PUEVOR0xfRVMyX0JJVCA9IDQ7Ci0gIC8v
IEFuZHJvaWQtc3BlY2lmaWMgZXh0ZW5zaW9uLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
RUdMX1JFQ09SREFCTEVfQU5EUk9JRCA9IDB4MzE0MjsKLQotICAvLyBjbGFuZy1mb3JtYXQgb2Zm
Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1BMQUlOID0gewotICAgIEVHTDEw
LkVHTF9SRURfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0wx
MC5FR0xfQkxVRV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9P
UEVOR0xfRVMyX0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9OwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludFtdIENPTkZJR19SR0JBID0gewotICAgIEVHTDEwLkVHTF9SRURfU0laRSwgOCwK
LSAgICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQkxVRV9TSVpFLCA4
LAotICAgIEVHTDEwLkVHTF9BTFBIQV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxF
X1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9OwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIGludFtdIENPTkZJR19QSVhFTF9CVUZGRVIgPSB7Ci0gICAgRUdM
MTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9HUkVFTl9TSVpFLCA4LAotICAgIEVH
TDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdM
X09QRU5HTF9FUzJfQklULAotICAgIEVHTDEwLkVHTF9TVVJGQUNFX1RZUEUsIEVHTDEwLkVHTF9Q
QlVGRkVSX0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9OwotICBwdWJsaWMgc3RhdGljIGZp
bmFsIGludFtdIENPTkZJR19QSVhFTF9SR0JBX0JVRkZFUiA9IHsKLSAgICBFR0wxMC5FR0xfUkVE
X1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0JM
VUVfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQUxQSEFfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xf
UkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgRUdMMTAuRUdMX1NVUkZB
Q0VfVFlQRSwgRUdMMTAuRUdMX1BCVUZGRVJfQklULAotICAgIEVHTDEwLkVHTF9OT05FCi0gIH07
Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1JFQ09SREFCTEUgPSB7Ci0gICAg
RUdMMTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9HUkVFTl9TSVpFLCA4LAotICAg
IEVHTDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwg
RUdMX09QRU5HTF9FUzJfQklULAotICAgIEVHTF9SRUNPUkRBQkxFX0FORFJPSUQsIDEsCi0gICAg
RUdMMTAuRUdMX05PTkUKLSAgfTsKLSAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgLy8gQ3JlYXRl
IGEgbmV3IGNvbnRleHQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZyBhdHRyaWJ1dGVzLCBzaGFy
aW5nIGRhdGEgd2l0aCBzaGFyZWRDb250ZXh0LgotICAvLyB8c2hhcmVkQ29udGV4dHwgY2FuIGJl
IG51bGwuCi0gIHB1YmxpYyBzdGF0aWMgRWdsQmFzZSBjcmVhdGUoQ29udGV4dCBzaGFyZWRDb250
ZXh0LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7Ci0gICAgcmV0dXJuIChFZ2xCYXNlMTQuaXNF
R0wxNFN1cHBvcnRlZCgpCi0gICAgICAgICAgICAgICAmJiAoc2hhcmVkQ29udGV4dCA9PSBudWxs
IHx8IHNoYXJlZENvbnRleHQgaW5zdGFuY2VvZiBFZ2xCYXNlMTQuQ29udGV4dCkpCi0gICAgICAg
ID8gbmV3IEVnbEJhc2UxNCgoRWdsQmFzZTE0LkNvbnRleHQpIHNoYXJlZENvbnRleHQsIGNvbmZp
Z0F0dHJpYnV0ZXMpCi0gICAgICAgIDogbmV3IEVnbEJhc2UxMCgoRWdsQmFzZTEwLkNvbnRleHQp
IHNoYXJlZENvbnRleHQsIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBFZ2xCYXNlIGNyZWF0ZSgpIHsKLSAgICByZXR1cm4gY3JlYXRlKG51bGwsIENPTkZJR19QTEFJ
Tik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UgY3JlYXRlKENvbnRleHQgc2hhcmVk
Q29udGV4dCkgewotICAgIHJldHVybiBjcmVhdGUoc2hhcmVkQ29udGV4dCwgQ09ORklHX1BMQUlO
KTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZSBz
dXJmYWNlKTsKLQotICAvLyBDcmVhdGUgRUdMU3VyZmFjZSBmcm9tIHRoZSBBbmRyb2lkIFN1cmZh
Y2VUZXh0dXJlLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZhY2VU
ZXh0dXJlIHN1cmZhY2VUZXh0dXJlKTsKLQotICAvLyBDcmVhdGUgZHVtbXkgMXgxIHBpeGVsIGJ1
ZmZlciBzdXJmYWNlIHNvIHRoZSBjb250ZXh0IGNhbiBiZSBtYWRlIGN1cnJlbnQuCi0gIHB1Ymxp
YyBhYnN0cmFjdCB2b2lkIGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKTsKLQotICBwdWJsaWMg
YWJzdHJhY3Qgdm9pZCBjcmVhdGVQYnVmZmVyU3VyZmFjZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
OwotCi0gIHB1YmxpYyBhYnN0cmFjdCBDb250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCk7Ci0KLSAg
cHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzU3VyZmFjZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFj
dCBpbnQgc3VyZmFjZVdpZHRoKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IGludCBzdXJmYWNlSGVp
Z2h0KCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgcmVsZWFzZVN1cmZhY2UoKTsKLQotICBw
dWJsaWMgYWJzdHJhY3Qgdm9pZCByZWxlYXNlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZvaWQg
bWFrZUN1cnJlbnQoKTsKLQotICAvLyBEZXRhY2ggdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQsIHNv
IHRoYXQgaXQgY2FuIGJlIG1hZGUgY3VycmVudCBvbiBhbm90aGVyIHRocmVhZC4KLSAgcHVibGlj
IGFic3RyYWN0IHZvaWQgZGV0YWNoQ3VycmVudCgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lk
IHN3YXBCdWZmZXJzKCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UxMC5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzMDcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5n
cmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1p
bXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VI
b2xkZXI7Ci0KLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTA7Ci1p
bXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbmZpZzsKLWltcG9ydCBq
YXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29udGV4dDsKLWltcG9ydCBqYXZheC5t
aWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMRGlzcGxheTsKLWltcG9ydCBqYXZheC5taWNyb2Vk
aXRpb24ua2hyb25vcy5lZ2wuRUdMU3VyZmFjZTsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3RhdGUg
YW5kIHV0aWxpdHkgbWV0aG9kcyBmb3IgaGFuZGxpbmcgYW4gZWdsIDEuMCBFR0xDb250ZXh0LCBh
biBFR0xEaXNwbGF5LAotICogYW5kIGFuIEVHTFN1cmZhY2UuCi0gKi8KLXB1YmxpYyBmaW5hbCBj
bGFzcyBFZ2xCYXNlMTAgZXh0ZW5kcyBFZ2xCYXNlIHsKLSAgLy8gVGhpcyBjb25zdGFudCBpcyB0
YWtlbiBmcm9tIEVHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLgotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04gPSAweDMwOTg7Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBFR0wxMCBlZ2w7Ci0gIHByaXZhdGUgRUdMQ29udGV4dCBlZ2xDb250ZXh0
OwotICBwcml2YXRlIEVHTENvbmZpZyBlZ2xDb25maWc7Ci0gIHByaXZhdGUgRUdMRGlzcGxheSBl
Z2xEaXNwbGF5OwotICBwcml2YXRlIEVHTFN1cmZhY2UgZWdsU3VyZmFjZSA9IEVHTDEwLkVHTF9O
T19TVVJGQUNFOwotCi0gIC8vIEVHTCB3cmFwcGVyIGZvciBhbiBhY3R1YWwgRUdMQ29udGV4dC4K
LSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250ZXh0IGV4dGVuZHMgRWdsQmFzZS5Db250ZXh0IHsK
LSAgICBwcml2YXRlIGZpbmFsIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLQotICAgIHB1YmxpYyBD
b250ZXh0KEVHTENvbnRleHQgZWdsQ29udGV4dCkgewotICAgICAgdGhpcy5lZ2xDb250ZXh0ID0g
ZWdsQ29udGV4dDsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBuZXcgY29udGV4dCB3aXRo
IHRoZSBzcGVjaWZpZWQgY29uZmlnIHR5cGUsIHNoYXJpbmcgZGF0YSB3aXRoIHNoYXJlZENvbnRl
eHQuCi0gIHB1YmxpYyBFZ2xCYXNlMTAoQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBjb25m
aWdBdHRyaWJ1dGVzKSB7Ci0gICAgdGhpcy5lZ2wgPSAoRUdMMTApIEVHTENvbnRleHQuZ2V0RUdM
KCk7Ci0gICAgZWdsRGlzcGxheSA9IGdldEVnbERpc3BsYXkoKTsKLSAgICBlZ2xDb25maWcgPSBn
ZXRFZ2xDb25maWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcyk7Ci0gICAgZWdsQ29udGV4
dCA9IGNyZWF0ZUVnbENvbnRleHQoc2hhcmVkQ29udGV4dCwgZWdsRGlzcGxheSwgZWdsQ29uZmln
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZh
Y2Ugc3VyZmFjZSkgewotICAgIC8qKgotICAgICAqIFdlIGhhdmUgdG8gd3JhcCBTdXJmYWNlIGlu
IGEgU3VyZmFjZUhvbGRlciBiZWNhdXNlIGZvciBzb21lIHJlYXNvbiBlZ2xDcmVhdGVXaW5kb3dT
dXJmYWNlCi0gICAgICogY291bGRuJ3QgYWN0dWFsbHkgdGFrZSBhIFN1cmZhY2Ugb2JqZWN0IHVu
dGlsIEFQSSAxNy4gT2xkZXIgdmVyc2lvbnMgZm9ydHVuYXRlbHkganVzdCBjYWxsCi0gICAgICog
U3VyZmFjZUhvbGRlci5nZXRTdXJmYWNlKCksIHNvIHdlJ2xsIGRvIHRoYXQuIE5vIG90aGVyIG1l
dGhvZHMgYXJlIHJlbGV2YW50LgotICAgICAqLwotICAgIGNsYXNzIEZha2VTdXJmYWNlSG9sZGVy
IGltcGxlbWVudHMgU3VyZmFjZUhvbGRlciB7Ci0gICAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2Ug
c3VyZmFjZTsKLQotICAgICAgRmFrZVN1cmZhY2VIb2xkZXIoU3VyZmFjZSBzdXJmYWNlKSB7Ci0g
ICAgICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgYWRkQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHt9Ci0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ2FsbGJhY2soQ2FsbGJh
Y2sgY2FsbGJhY2spIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4g
aXNDcmVhdGluZygpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBA
RGVwcmVjYXRlZAotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKGlu
dCBpKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldEZpeGVkU2l6
ZShpbnQgaSwgaW50IGkyKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHNldFNpemVGcm9tTGF5b3V0KCkge30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBzZXRGb3JtYXQoaW50IGkpIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgc2V0S2VlcFNjcmVlbk9uKGJvb2xlYW4gYikge30KLQotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBDYW52YXMgbG9ja0NhbnZh
cyhSZWN0IHJlY3QpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgdW5sb2NrQ2FudmFzQW5kUG9zdChDYW52YXMgY2Fu
dmFzKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBSZWN0IGdldFN1cmZhY2VG
cmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIFN1cmZhY2UgZ2V0U3VyZmFjZSgpIHsKLSAgICAgICAgcmV0dXJuIHN1
cmZhY2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKG5ldyBG
YWtlU3VyZmFjZUhvbGRlcihzdXJmYWNlKSk7Ci0gIH0KLQotICAvLyBDcmVhdGUgRUdMU3VyZmFj
ZSBmcm9tIHRoZSBBbmRyb2lkIFN1cmZhY2VUZXh0dXJlLgotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgewotICAg
IGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChzdXJmYWNlVGV4dHVyZSk7Ci0gIH0KLQotICAvLyBDcmVh
dGUgRUdMU3VyZmFjZSBmcm9tIGVpdGhlciBhIFN1cmZhY2VIb2xkZXIgb3IgYSBTdXJmYWNlVGV4
dHVyZS4KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChPYmplY3QgbmF0aXZl
V2luZG93KSB7Ci0gICAgaWYgKCEobmF0aXZlV2luZG93IGluc3RhbmNlb2YgU3VyZmFjZUhvbGRl
cikgJiYgIShuYXRpdmVXaW5kb3cgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIklucHV0IG11c3QgYmUgZWl0aGVyIGEg
U3VyZmFjZUhvbGRlciBvciBTdXJmYWNlVGV4dHVyZSIpOwotICAgIH0KLSAgICBjaGVja0lzTm90
UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1
cmZhY2UiKTsKLSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTAuRUdMX05P
TkV9OwotICAgIGVnbFN1cmZhY2UgPSBlZ2wuZWdsQ3JlYXRlV2luZG93U3VyZmFjZShlZ2xEaXNw
bGF5LCBlZ2xDb25maWcsIG5hdGl2ZVdpbmRvdywgc3VyZmFjZUF0dHJpYnMpOwotICAgIGlmIChl
Z2xTdXJmYWNlID09IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3cgc3VyZmFj
ZTogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0K
LSAgfQotCi0gIC8vIENyZWF0ZSBkdW1teSAxeDEgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugc28gdGhl
IGNvbnRleHQgY2FuIGJlIG1hZGUgY3VycmVudC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKSB7Ci0gICAgY3JlYXRlUGJ1ZmZlclN1cmZhY2Uo
MSwgMSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlUGJ1ZmZlclN1
cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7
Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBbHJlYWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7Ci0g
ICAgfQotICAgIGludFtdIHN1cmZhY2VBdHRyaWJzID0ge0VHTDEwLkVHTF9XSURUSCwgd2lkdGgs
IEVHTDEwLkVHTF9IRUlHSFQsIGhlaWdodCwgRUdMMTAuRUdMX05PTkV9OwotICAgIGVnbFN1cmZh
Y2UgPSBlZ2wuZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCBz
dXJmYWNlQXR0cmlicyk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05PX1NVUkZB
Q0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRl
IHBpeGVsIGJ1ZmZlciBzdXJmYWNlIHdpdGggc2l6ZSAiICsgd2lkdGggKyAieCIKLSAgICAgICAg
ICArIGhlaWdodCArICI6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9y
KCkpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIG9yZy53ZWJydGMuRWds
QmFzZS5Db250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAgIHJldHVybiBuZXcgRWdsQmFz
ZTEwLkNvbnRleHQoZWdsQ29udGV4dCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJv
b2xlYW4gaGFzU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZWdsU3VyZmFjZSAhPSBFR0wxMC5FR0xf
Tk9fU1VSRkFDRTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHN1cmZhY2VXaWR0
aCgpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGhBcnJheVtdID0gbmV3IGludFsxXTsKLSAgICBlZ2wu
ZWdsUXVlcnlTdXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIEVHTDEwLkVHTF9XSURUSCwg
d2lkdGhBcnJheSk7Ci0gICAgcmV0dXJuIHdpZHRoQXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIGludCBzdXJmYWNlSGVpZ2h0KCkgewotICAgIGZpbmFsIGludCBoZWlnaHRB
cnJheVtdID0gbmV3IGludFsxXTsKLSAgICBlZ2wuZWdsUXVlcnlTdXJmYWNlKGVnbERpc3BsYXks
IGVnbFN1cmZhY2UsIEVHTDEwLkVHTF9IRUlHSFQsIGhlaWdodEFycmF5KTsKLSAgICByZXR1cm4g
aGVpZ2h0QXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFz
ZVN1cmZhY2UoKSB7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0Up
IHsKLSAgICAgIGVnbC5lZ2xEZXN0cm95U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsK
LSAgICAgIGVnbFN1cmZhY2UgPSBFR0wxMC5FR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgY2hlY2tJc05vdFJlbGVhc2VkKCkgewotICAgIGlmIChlZ2xEaXNwbGF5
ID09IEVHTDEwLkVHTF9OT19ESVNQTEFZIHx8IGVnbENvbnRleHQgPT0gRUdMMTAuRUdMX05PX0NP
TlRFWFQKLSAgICAgICAgfHwgZWdsQ29uZmlnID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCJUaGlzIG9iamVjdCBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIGNoZWNr
SXNOb3RSZWxlYXNlZCgpOwotICAgIHJlbGVhc2VTdXJmYWNlKCk7Ci0gICAgZGV0YWNoQ3VycmVu
dCgpOwotICAgIGVnbC5lZ2xEZXN0cm95Q29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb250ZXh0KTsK
LSAgICBlZ2wuZWdsVGVybWluYXRlKGVnbERpc3BsYXkpOwotICAgIGVnbENvbnRleHQgPSBFR0wx
MC5FR0xfTk9fQ09OVEVYVDsKLSAgICBlZ2xEaXNwbGF5ID0gRUdMMTAuRUdMX05PX0RJU1BMQVk7
Ci0gICAgZWdsQ29uZmlnID0gbnVsbDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBtYWtlQ3VycmVudCgpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWds
U3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRp
bWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBtYWtlIGN1cnJlbnQiKTsKLSAgICB9
Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIGlmICghZWdsLmVnbE1h
a2VDdXJyZW50KGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIGVnbFN1cmZhY2UsIGVnbENvbnRleHQp
KSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVn
bE1ha2VDdXJyZW50IGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0
RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERldGFjaCB0aGUgY3VycmVu
dCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4gYmUgbWFkZSBjdXJyZW50IG9uIGFub3RoZXIg
dGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGV0YWNoQ3VycmVudCgpIHsKLSAg
ICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFlZ2wuZWdsTWFrZUN1
cnJlbnQoCi0gICAgICAgICAgICAgIGVnbERpc3BsYXksIEVHTDEwLkVHTF9OT19TVVJGQUNFLCBF
R0wxMC5FR0xfTk9fU1VSRkFDRSwgRUdMMTAuRUdMX05PX0NPTlRFWFQpKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVnbERldGFjaEN1cnJlbnQg
ZmFpbGVkOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3YXBCdWZm
ZXJzKCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlID09
IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIpOwotICAgIH0KLSAgICBzeW5j
aHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgZWdsLmVnbFN3YXBCdWZmZXJzKGVnbERp
c3BsYXksIGVnbFN1cmZhY2UpOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xEaXNw
bGF5LCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTERpc3BsYXkgZ2V0RWdsRGlzcGxheSgp
IHsKLSAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkgPSBlZ2wuZWdsR2V0RGlzcGxheShFR0wxMC5F
R0xfREVGQVVMVF9ESVNQTEFZKTsKLSAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0wxMC5FR0xfTk9f
RElTUExBWSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAg
IlVuYWJsZSB0byBnZXQgRUdMMTAgZGlzcGxheTogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhl
Z2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBpbnRbXSB2ZXJzaW9uID0gbmV3IGludFsy
XTsKLSAgICBpZiAoIWVnbC5lZ2xJbml0aWFsaXplKGVnbERpc3BsYXksIHZlcnNpb24pKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGlu
aXRpYWxpemUgRUdMMTA6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9y
KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbERpc3BsYXk7Ci0gIH0KLQotICAvLyBSZXR1cm4g
YW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTENvbmZpZyBnZXRFZ2xD
b25maWcoRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7Ci0g
ICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07Ci0gICAgaW50W10gbnVt
Q29uZmlncyA9IG5ldyBpbnRbMV07Ci0gICAgaWYgKCFlZ2wuZWdsQ2hvb3NlQ29uZmlnKGVnbERp
c3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsIGNvbmZpZ3MsIGNvbmZpZ3MubGVuZ3RoLCBudW1Db25m
aWdzKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgImVn
bENob29zZUNvbmZpZyBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdl
dEVycm9yKCkpKTsKLSAgICB9Ci0gICAgaWYgKG51bUNvbmZpZ3NbMF0gPD0gMCkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIGFueSBtYXRjaGluZyBF
R0wgY29uZmlnIik7Ci0gICAgfQotICAgIGZpbmFsIEVHTENvbmZpZyBlZ2xDb25maWcgPSBjb25m
aWdzWzBdOwotICAgIGlmIChlZ2xDb25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oImVnbENob29zZUNvbmZpZyByZXR1cm5lZCBudWxsIik7Ci0gICAgfQot
ICAgIHJldHVybiBlZ2xDb25maWc7Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMQ29uZmlnLCBv
ciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTENvbnRleHQgY3JlYXRlRWdsQ29udGV4dCgKLSAg
ICAgIENvbnRleHQgc2hhcmVkQ29udGV4dCwgRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBFR0xDb25m
aWcgZWdsQ29uZmlnKSB7Ci0gICAgaWYgKHNoYXJlZENvbnRleHQgIT0gbnVsbCAmJiBzaGFyZWRD
b250ZXh0LmVnbENvbnRleHQgPT0gRUdMMTAuRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHNoYXJlZENvbnRleHQiKTsKLSAgICB9Ci0g
ICAgaW50W10gY29udGV4dEF0dHJpYnV0ZXMgPSB7RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04s
IDIsIEVHTDEwLkVHTF9OT05FfTsKLSAgICBFR0xDb250ZXh0IHJvb3RDb250ZXh0ID0KLSAgICAg
ICAgc2hhcmVkQ29udGV4dCA9PSBudWxsID8gRUdMMTAuRUdMX05PX0NPTlRFWFQgOiBzaGFyZWRD
b250ZXh0LmVnbENvbnRleHQ7Ci0gICAgZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0OwotICAg
IHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBlZ2xDb250ZXh0ID0gZWdsLmVn
bENyZWF0ZUNvbnRleHQoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCByb290Q29udGV4dCwgY29udGV4
dEF0dHJpYnV0ZXMpOwotICAgIH0KLSAgICBpZiAoZWdsQ29udGV4dCA9PSBFR0wxMC5FR0xfTk9f
Q09OVEVYVCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAg
IkZhaWxlZCB0byBjcmVhdGUgRUdMIGNvbnRleHQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmco
ZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbnRleHQ7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTE0LmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI2NCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3Vy
ZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMMTQ7Ci1pbXBvcnQgYW5kcm9p
ZC5vcGVuZ2wuRUdMQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTENvbnRleHQ7Ci1p
bXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMRGlzcGxheTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5F
R0xFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lk
LnZpZXcuU3VyZmFjZTsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3RhdGUgYW5kIHV0aWxpdHkgbWV0
aG9kcyBmb3IgaGFuZGxpbmcgYW4gRUdMMTQgRUdMQ29udGV4dCwgYW4gRUdMRGlzcGxheSwKLSAq
IGFuZCBhbiBFR0xTdXJmYWNlLgotICovCi1AVGFyZ2V0QXBpKDE4KQotcHVibGljIGZpbmFsIGNs
YXNzIEVnbEJhc2UxNCBleHRlbmRzIEVnbEJhc2UgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIkVnbEJhc2UxNCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFR0xF
eHRfU0RLX1ZFUlNJT04gPSBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVB
Tl9NUjI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1NES19WRVJTSU9OID0g
YW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0gIHByaXZhdGUgRUdMQ29udGV4dCBl
Z2xDb250ZXh0OwotICBwcml2YXRlIEVHTENvbmZpZyBlZ2xDb25maWc7Ci0gIHByaXZhdGUgRUdM
RGlzcGxheSBlZ2xEaXNwbGF5OwotICBwcml2YXRlIEVHTFN1cmZhY2UgZWdsU3VyZmFjZSA9IEVH
TDE0LkVHTF9OT19TVVJGQUNFOwotCi0gIC8vIEVHTCAxLjQgaXMgc3VwcG9ydGVkIGZyb20gQVBJ
IDE3LiBCdXQgRUdMRXh0IHRoYXQgaXMgdXNlZCBmb3Igc2V0dGluZyBwcmVzZW50YXRpb24KLSAg
Ly8gdGltZSBzdGFtcCBvbiBhIHN1cmZhY2UgaXMgc3VwcG9ydGVkIGZyb20gMTggc28gd2UgcmVx
dWlyZSAxOC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUdMMTRTdXBwb3J0ZWQoKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgIlNESyB2ZXJzaW9uOiAiICsgQ1VSUkVOVF9TREtfVkVSU0lPTiAr
ICIuIGlzRUdMMTRTdXBwb3J0ZWQ6ICIKLSAgICAgICAgICAgICsgKENVUlJFTlRfU0RLX1ZFUlNJ
T04gPj0gRUdMRXh0X1NES19WRVJTSU9OKSk7Ci0gICAgcmV0dXJuIChDVVJSRU5UX1NES19WRVJT
SU9OID49IEVHTEV4dF9TREtfVkVSU0lPTik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNz
IENvbnRleHQgZXh0ZW5kcyBFZ2xCYXNlLkNvbnRleHQgewotICAgIHByaXZhdGUgZmluYWwgYW5k
cm9pZC5vcGVuZ2wuRUdMQ29udGV4dCBlZ2wxNENvbnRleHQ7Ci0KLSAgICBwdWJsaWMgQ29udGV4
dChhbmRyb2lkLm9wZW5nbC5FR0xDb250ZXh0IGVnbENvbnRleHQpIHsKLSAgICAgIHRoaXMuZWds
MTRDb250ZXh0ID0gZWdsQ29udGV4dDsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBuZXcg
Y29udGV4dCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnIHR5cGUsIHNoYXJpbmcgZGF0YSB3aXRo
IHNoYXJlZENvbnRleHQuCi0gIC8vIHxzaGFyZWRDb250ZXh0fCBtYXkgYmUgbnVsbC4KLSAgcHVi
bGljIEVnbEJhc2UxNChFZ2xCYXNlMTQuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBjb25m
aWdBdHRyaWJ1dGVzKSB7Ci0gICAgZWdsRGlzcGxheSA9IGdldEVnbERpc3BsYXkoKTsKLSAgICBl
Z2xDb25maWcgPSBnZXRFZ2xDb25maWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcyk7Ci0g
ICAgZWdsQ29udGV4dCA9IGNyZWF0ZUVnbENvbnRleHQoc2hhcmVkQ29udGV4dCwgZWdsRGlzcGxh
eSwgZWdsQ29uZmlnKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhlIEFu
ZHJvaWQgU3VyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2Uo
U3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKHN1cmZhY2UpOwot
ICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNlVGV4
dHVyZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZVRl
eHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwoc3VyZmFj
ZVRleHR1cmUpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSBlaXRoZXIgU3Vy
ZmFjZSBvciBTdXJmYWNlVGV4dHVyZS4KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVN1cmZhY2VJbnRl
cm5hbChPYmplY3Qgc3VyZmFjZSkgewotICAgIGlmICghKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJm
YWNlKSAmJiAhKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkpIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIklucHV0IG11c3QgYmUgZWl0aGVyIGEgU3Vy
ZmFjZSBvciBTdXJmYWNlVGV4dHVyZSIpOwotICAgIH0KLSAgICBjaGVja0lzTm90UmVsZWFzZWQo
KTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2UiKTsK
LSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTQuRUdMX05PTkV9OwotICAg
IGVnbFN1cmZhY2UgPSBFR0wxNC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGVnbERpc3BsYXksIGVn
bENvbmZpZywgc3VyZmFjZSwgc3VyZmFjZUF0dHJpYnMsIDApOwotICAgIGlmIChlZ2xTdXJmYWNl
ID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3cgc3VyZmFjZTogMHgiICsg
SW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKSB7
Ci0gICAgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoMSwgMSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7
Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTQu
RUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBbHJl
YWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7Ci0gICAgfQotICAgIGludFtdIHN1cmZhY2VBdHRyaWJz
ID0ge0VHTDE0LkVHTF9XSURUSCwgd2lkdGgsIEVHTDE0LkVHTF9IRUlHSFQsIGhlaWdodCwgRUdM
MTQuRUdMX05PTkV9OwotICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5lZ2xDcmVhdGVQYnVmZmVyU3Vy
ZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJzLCAwKTsKLSAgICBpZiAo
ZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugd2l0
aCBzaXplICIgKyB3aWR0aCArICJ4IgotICAgICAgICAgICsgaGVpZ2h0ICsgIjogMHgiICsgSW50
ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBDb250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAgIHJl
dHVybiBuZXcgRWdsQmFzZTE0LkNvbnRleHQoZWdsQ29udGV4dCk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIGJvb2xlYW4gaGFzU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZWdsU3VyZmFj
ZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
aW50IHN1cmZhY2VXaWR0aCgpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGhBcnJheVtdID0gbmV3IGlu
dFsxXTsKLSAgICBFR0wxNC5lZ2xRdWVyeVN1cmZhY2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwg
RUdMMTQuRUdMX1dJRFRILCB3aWR0aEFycmF5LCAwKTsKLSAgICByZXR1cm4gd2lkdGhBcnJheVsw
XTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHN1cmZhY2VIZWlnaHQoKSB7Ci0g
ICAgZmluYWwgaW50IGhlaWdodEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIEVHTDE0LmVnbFF1
ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxNC5FR0xfSEVJR0hULCBoZWln
aHRBcnJheSwgMCk7Ci0gICAgcmV0dXJuIGhlaWdodEFycmF5WzBdOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2VTdXJmYWNlKCkgewotICAgIGlmIChlZ2xTdXJmYWNl
ICE9IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICBFR0wxNC5lZ2xEZXN0cm95U3VyZmFj
ZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsKLSAgICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5FR0xf
Tk9fU1VSRkFDRTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc05vdFJlbGVh
c2VkKCkgewotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDE0LkVHTF9OT19ESVNQTEFZIHx8IGVn
bENvbnRleHQgPT0gRUdMMTQuRUdMX05PX0NPTlRFWFQKLSAgICAgICAgfHwgZWdsQ29uZmlnID09
IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIG9iamVjdCBo
YXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCByZWxlYXNlKCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIHJlbGVhc2VT
dXJmYWNlKCk7Ci0gICAgZGV0YWNoQ3VycmVudCgpOwotICAgIEVHTDE0LmVnbERlc3Ryb3lDb250
ZXh0KGVnbERpc3BsYXksIGVnbENvbnRleHQpOwotICAgIEVHTDE0LmVnbFJlbGVhc2VUaHJlYWQo
KTsKLSAgICBFR0wxNC5lZ2xUZXJtaW5hdGUoZWdsRGlzcGxheSk7Ci0gICAgZWdsQ29udGV4dCA9
IEVHTDE0LkVHTF9OT19DT05URVhUOwotICAgIGVnbERpc3BsYXkgPSBFR0wxNC5FR0xfTk9fRElT
UExBWTsKLSAgICBlZ2xDb25maWcgPSBudWxsOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG1ha2VDdXJyZW50KCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlm
IChlZ2xTdXJmYWNlID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IG1ha2UgY3VycmVudCIpOwot
ICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFFR0wx
NC5lZ2xNYWtlQ3VycmVudChlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBlZ2xTdXJmYWNlLCBlZ2xD
b250ZXh0KSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAg
ICAgICJlZ2xNYWtlQ3VycmVudCBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdM
MTQuZWdsR2V0RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERldGFjaCB0
aGUgY3VycmVudCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4gYmUgbWFkZSBjdXJyZW50IG9u
IGFub3RoZXIgdGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGV0YWNoQ3VycmVu
dCgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFFR0wx
NC5lZ2xNYWtlQ3VycmVudCgKLSAgICAgICAgICAgICAgZWdsRGlzcGxheSwgRUdMMTQuRUdMX05P
X1NVUkZBQ0UsIEVHTDE0LkVHTF9OT19TVVJGQUNFLCBFR0wxNC5FR0xfTk9fQ09OVEVYVCkpIHsK
LSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiZWdsRGV0
YWNoQ3VycmVudCBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0
RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBzd2FwQnVmZmVycygpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAo
ZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBzd2FwIGJ1ZmZlcnMiKTsKLSAg
ICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIEVHTDE0LmVnbFN3
YXBCdWZmZXJzKGVnbERpc3BsYXksIGVnbFN1cmZhY2UpOwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHN3YXBCdWZmZXJzKGxvbmcgdGltZVN0YW1wTnMpIHsKLSAgICBjaGVja0lzTm90UmVs
ZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBz
d2FwIGJ1ZmZlcnMiKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsK
LSAgICAgIC8vIFNlZQotICAgICAgLy8gaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20v
cGxhdGZvcm0vZnJhbWV3b3Jrcy9uYXRpdmUvKy90b29sc19yMjIuMi9vcGVuZ2wvc3BlY3MvRUdM
X0FORFJPSURfcHJlc2VudGF0aW9uX3RpbWUudHh0Ci0gICAgICBFR0xFeHQuZWdsUHJlc2VudGF0
aW9uVGltZUFORFJPSUQoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwgdGltZVN0YW1wTnMpOwotICAg
ICAgRUdMMTQuZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTERpc3BsYXksIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZh
dGUgc3RhdGljIEVHTERpc3BsYXkgZ2V0RWdsRGlzcGxheSgpIHsKLSAgICBFR0xEaXNwbGF5IGVn
bERpc3BsYXkgPSBFR0wxNC5lZ2xHZXREaXNwbGF5KEVHTDE0LkVHTF9ERUZBVUxUX0RJU1BMQVkp
OwotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDE0LkVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGdldCBFR0wx
NCBkaXNwbGF5OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkp
KTsKLSAgICB9Ci0gICAgaW50W10gdmVyc2lvbiA9IG5ldyBpbnRbMl07Ci0gICAgaWYgKCFFR0wx
NC5lZ2xJbml0aWFsaXplKGVnbERpc3BsYXksIHZlcnNpb24sIDAsIHZlcnNpb24sIDEpKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGlu
aXRpYWxpemUgRUdMMTQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0RXJy
b3IoKSkpOwotICAgIH0KLSAgICByZXR1cm4gZWdsRGlzcGxheTsKLSAgfQotCi0gIC8vIFJldHVy
biBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgc3RhdGljIEVHTENvbmZp
ZyBnZXRFZ2xDb25maWcoRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBpbnRbXSBjb25maWdBdHRyaWJ1
dGVzKSB7Ci0gICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07Ci0gICAg
aW50W10gbnVtQ29uZmlncyA9IG5ldyBpbnRbMV07Ci0gICAgaWYgKCFFR0wxNC5lZ2xDaG9vc2VD
b25maWcoCi0gICAgICAgICAgICBlZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAwLCBjb25m
aWdzLCAwLCBjb25maWdzLmxlbmd0aCwgbnVtQ29uZmlncywgMCkpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJlZ2xDaG9vc2VDb25maWcgZmFpbGVkOiAw
eCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0g
ICAgaWYgKG51bUNvbmZpZ3NbMF0gPD0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oIlVuYWJsZSB0byBmaW5kIGFueSBtYXRjaGluZyBFR0wgY29uZmlnIik7Ci0gICAgfQot
ICAgIGZpbmFsIEVHTENvbmZpZyBlZ2xDb25maWcgPSBjb25maWdzWzBdOwotICAgIGlmIChlZ2xD
b25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbENo
b29zZUNvbmZpZyByZXR1cm5lZCBudWxsIik7Ci0gICAgfQotICAgIHJldHVybiBlZ2xDb25maWc7
Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5aW5nLgotICBwcml2
YXRlIHN0YXRpYyBFR0xDb250ZXh0IGNyZWF0ZUVnbENvbnRleHQoCi0gICAgICBFZ2xCYXNlMTQu
Q29udGV4dCBzaGFyZWRDb250ZXh0LCBFR0xEaXNwbGF5IGVnbERpc3BsYXksIEVHTENvbmZpZyBl
Z2xDb25maWcpIHsKLSAgICBpZiAoc2hhcmVkQ29udGV4dCAhPSBudWxsICYmIHNoYXJlZENvbnRl
eHQuZWdsMTRDb250ZXh0ID09IEVHTDE0LkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCBzaGFyZWRDb250ZXh0Iik7Ci0gICAgfQotICAg
IGludFtdIGNvbnRleHRBdHRyaWJ1dGVzID0ge0VHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJT
SU9OLCAyLCBFR0wxNC5FR0xfTk9ORX07Ci0gICAgRUdMQ29udGV4dCByb290Q29udGV4dCA9Ci0g
ICAgICAgIHNoYXJlZENvbnRleHQgPT0gbnVsbCA/IEVHTDE0LkVHTF9OT19DT05URVhUIDogc2hh
cmVkQ29udGV4dC5lZ2wxNENvbnRleHQ7Ci0gICAgZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0
OwotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBlZ2xDb250ZXh0ID0g
RUdMMTQuZWdsQ3JlYXRlQ29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHJvb3RDb250ZXh0
LCBjb250ZXh0QXR0cmlidXRlcywgMCk7Ci0gICAgfQotICAgIGlmIChlZ2xDb250ZXh0ID09IEVH
TDE0LkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigK
LSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgY29udGV4dDogMHgiICsgSW50ZWdlci50
b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIHJldHVybiBlZ2xD
b250ZXh0OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbFJlbmRlcmVyLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlci5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbFJlbmRlcmVyLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2NzYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5kcm9p
ZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7
Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRo
cmVhZDsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3Vy
ZmFjZTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5jb25j
dXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVV
bml0OwotCi0vKioKLSAqIEltcGxlbWVudHMgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyLkNhbGxi
YWNrcyBieSBkaXNwbGF5aW5nIHRoZSB2aWRlbyBzdHJlYW0gb24gYW4gRUdMIFN1cmZhY2UuCi0g
KiBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBoZWxwZXIgY2xhc3MgZm9y
IHJlbmRlcmluZyBvbiBTdXJmYWNlVmlld3MgYW5kCi0gKiBUZXh0dXJlVmlld3MuCi0gKi8KLXB1
YmxpYyBjbGFzcyBFZ2xSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tz
IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJFZ2xSZW5kZXJlciI7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTE9HX0lOVEVSVkFMX1NFQyA9IDQ7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBNQVhfU1VSRkFDRV9DTEVBUl9DT1VOVCA9IDM7Ci0KLSAgcHVi
bGljIGludGVyZmFjZSBGcmFtZUxpc3RlbmVyIHsgdm9pZCBvbkZyYW1lKEJpdG1hcCBmcmFtZSk7
IH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTY2FsZUFuZEZyYW1lTGlzdGVuZXIgewotICAg
IHB1YmxpYyBmaW5hbCBmbG9hdCBzY2FsZTsKLSAgICBwdWJsaWMgZmluYWwgRnJhbWVMaXN0ZW5l
ciBsaXN0ZW5lcjsKLQotICAgIHB1YmxpYyBTY2FsZUFuZEZyYW1lTGlzdGVuZXIoZmxvYXQgc2Nh
bGUsIEZyYW1lTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgIHRoaXMuc2NhbGUgPSBzY2FsZTsK
LSAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRl
IGNsYXNzIEVnbFN1cmZhY2VDcmVhdGlvbiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLSAgICBwcml2
YXRlIE9iamVjdCBzdXJmYWNlOwotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldFN1
cmZhY2UoT2JqZWN0IHN1cmZhY2UpIHsKLSAgICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJ1bigp
IHsKLSAgICAgIGlmIChzdXJmYWNlICE9IG51bGwgJiYgZWdsQmFzZSAhPSBudWxsICYmICFlZ2xC
YXNlLmhhc1N1cmZhY2UoKSkgewotICAgICAgICBpZiAoc3VyZmFjZSBpbnN0YW5jZW9mIFN1cmZh
Y2UpIHsKLSAgICAgICAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2UoKFN1cmZhY2UpIHN1cmZhY2Up
OwotICAgICAgICB9IGVsc2UgaWYgKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkg
ewotICAgICAgICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZSgoU3VyZmFjZVRleHR1cmUpIHN1cmZh
Y2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVF
eGNlcHRpb24oIkludmFsaWQgc3VyZmFjZTogIiArIHN1cmZhY2UpOwotICAgICAgICB9Ci0gICAg
ICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgLy8gTmVjZXNzYXJ5IGZvciBZVVYg
ZnJhbWVzIHdpdGggb2RkIHdpZHRoLgotICAgICAgICBHTEVTMjAuZ2xQaXhlbFN0b3JlaShHTEVT
MjAuR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLQotICAvLyB8cmVuZGVyVGhyZWFkSGFuZGxlcnwgaXMg
YSBoYW5kbGVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggfHJlbmRlclRocmVhZHwsIGFuZCBpcyBz
eW5jaHJvbml6ZWQKLSAgLy8gb24gfGhhbmRsZXJMb2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmpl
Y3QgaGFuZGxlckxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgSGFuZGxlciByZW5kZXJU
aHJlYWRIYW5kbGVyOwotCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGZyYW1lTGlzdGVuZXJMb2Nr
ID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxTY2FsZUFuZEZyYW1l
TGlzdGVuZXI+IGZyYW1lTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgLy8gVmFy
aWFibGVzIGZvciBmcHMgcmVkdWN0aW9uLgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBmcHNSZWR1
Y3Rpb25Mb2NrID0gbmV3IE9iamVjdCgpOwotICAvLyBUaW1lIGZvciB3aGVuIG5leHQgZnJhbWUg
c2hvdWxkIGJlIHJlbmRlcmVkLgotICBwcml2YXRlIGxvbmcgbmV4dEZyYW1lVGltZU5zOwotICAv
LyBNaW5pbXVtIGR1cmF0aW9uIGJldHdlZW4gZnJhbWVzIHdoZW4gZnBzIHJlZHVjdGlvbiBpcyBh
Y3RpdmUsIG9yIC0xIGlmIHZpZGVvIGlzIGNvbXBsZXRlbHkKLSAgLy8gcGF1c2VkLgotICBwcml2
YXRlIGxvbmcgbWluUmVuZGVyUGVyaW9kTnM7Ci0KLSAgLy8gRUdMIGFuZCBHTCByZXNvdXJjZXMg
Zm9yIGRyYXdpbmcgWVVWL09FUyB0ZXh0dXJlcy4gQWZ0ZXIgaW5pdGlsaXphdGlvbiwgdGhlc2Ug
YXJlIG9ubHkgYWNjZXNzZWQKLSAgLy8gZnJvbSB0aGUgcmVuZGVyIHRocmVhZC4KLSAgcHJpdmF0
ZSBFZ2xCYXNlIGVnbEJhc2U7Ci0gIHByaXZhdGUgZmluYWwgUmVuZGVyZXJDb21tb24uWXV2VXBs
b2FkZXIgeXV2VXBsb2FkZXIgPSBuZXcgUmVuZGVyZXJDb21tb24uWXV2VXBsb2FkZXIoKTsKLSAg
cHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXI7Ci0gIC8vIFRleHR1cmUgaWRz
IGZvciBZVVYgZnJhbWVzLiBBbGxvY2F0ZWQgb24gZmlyc3QgYXJyaXZhbCBvZiBhIFlVViBmcmFt
ZS4KLSAgcHJpdmF0ZSBpbnRbXSB5dXZUZXh0dXJlcyA9IG51bGw7Ci0KLSAgLy8gUGVuZGluZyBm
cmFtZSB0byByZW5kZXIuIFNlcnZlcyBhcyBhIHF1ZXVlIHdpdGggc2l6ZSAxLiBTeW5jaHJvbml6
ZWQgb24gfGZyYW1lTG9ja3wuCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGZyYW1lTG9jayA9IG5l
dyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBwZW5kaW5nRnJh
bWU7Ci0KLSAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBzeW5jaHJvbml6ZWQgb24gfGxheW91dExv
Y2t8LgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBsYXlvdXRMb2NrID0gbmV3IE9iamVjdCgpOwot
ICBwcml2YXRlIGludCBzdXJmYWNlV2lkdGg7Ci0gIHByaXZhdGUgaW50IHN1cmZhY2VIZWlnaHQ7
Ci0gIHByaXZhdGUgZmxvYXQgbGF5b3V0QXNwZWN0UmF0aW87Ci0gIC8vIElmIHRydWUsIG1pcnJv
cnMgdGhlIHZpZGVvIHN0cmVhbSBob3Jpem9udGFsbHkuCi0gIHByaXZhdGUgYm9vbGVhbiBtaXJy
b3I7Ci0KLSAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBzeW5jaHJvbml6ZWQgb24gfHN0YXRpc3Rp
Y3NMb2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3Qgc3RhdGlzdGljc0xvY2sgPSBuZXcgT2Jq
ZWN0KCk7Ci0gIC8vIFRvdGFsIG51bWJlciBvZiB2aWRlbyBmcmFtZXMgcmVjZWl2ZWQgaW4gcmVu
ZGVyRnJhbWUoKSBjYWxsLgotICBwcml2YXRlIGludCBmcmFtZXNSZWNlaXZlZDsKLSAgLy8gTnVt
YmVyIG9mIHZpZGVvIGZyYW1lcyBkcm9wcGVkIGJ5IHJlbmRlckZyYW1lKCkgYmVjYXVzZSBwcmV2
aW91cyBmcmFtZSBoYXMgbm90IGJlZW4gcmVuZGVyZWQKLSAgLy8geWV0LgotICBwcml2YXRlIGlu
dCBmcmFtZXNEcm9wcGVkOwotICAvLyBOdW1iZXIgb2YgcmVuZGVyZWQgdmlkZW8gZnJhbWVzLgot
ICBwcml2YXRlIGludCBmcmFtZXNSZW5kZXJlZDsKLSAgLy8gU3RhcnQgdGltZSBmb3IgY291bnRp
bmcgdGhlc2Ugc3RhdGlzdGljcywgb3IgMCBpZiB3ZSBoYXZlbid0IHN0YXJ0ZWQgbWVhc3VyaW5n
IHlldC4KLSAgcHJpdmF0ZSBsb25nIHN0YXRpc3RpY3NTdGFydFRpbWVOczsKLSAgLy8gVGltZSBp
biBucyBzcGVudCBpbiByZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKCkgZnVuY3Rpb24uCi0gIHBy
aXZhdGUgbG9uZyByZW5kZXJUaW1lTnM7Ci0gIC8vIFRpbWUgaW4gbnMgc3BlbnQgYnkgdGhlIHJl
bmRlciB0aHJlYWQgaW4gdGhlIHN3YXBCdWZmZXJzKCkgZnVuY3Rpb24uCi0gIHByaXZhdGUgbG9u
ZyByZW5kZXJTd2FwQnVmZmVyVGltZU5zOwotCi0gIC8vIFVzZWQgZm9yIGJpdG1hcCBjYXB0dXJp
bmcuCi0gIHByaXZhdGUgR2xUZXh0dXJlRnJhbWVCdWZmZXIgYml0bWFwVGV4dHVyZUZyYW1lYnVm
ZmVyOwotCi0gIC8vIFJ1bm5hYmxlIGZvciBwb3N0aW5nIGZyYW1lcyB0byByZW5kZXIgdGhyZWFk
LgotICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIHJlbmRlckZyYW1lUnVubmFibGUgPSBuZXcgUnVu
bmFibGUoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
cmVuZGVyRnJhbWVPblJlbmRlclRocmVhZCgpOwotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIGZp
bmFsIFJ1bm5hYmxlIGxvZ1N0YXRpc3RpY3NSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBsb2dTdGF0aXN0aWNz
KCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICAgIGlmIChyZW5k
ZXJUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVy
LnJlbW92ZUNhbGxiYWNrcyhsb2dTdGF0aXN0aWNzUnVubmFibGUpOwotICAgICAgICAgIHJlbmRl
clRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQoCi0gICAgICAgICAgICAgIGxvZ1N0YXRpc3RpY3NS
dW5uYWJsZSwgVGltZVVuaXQuU0VDT05EUy50b01pbGxpcyhMT0dfSU5URVJWQUxfU0VDKSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBFZ2xTdXJm
YWNlQ3JlYXRpb24gZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUgPSBuZXcgRWdsU3VyZmFjZUNy
ZWF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFN0YW5kYXJkIGNvbnN0cnVjdG9yLiBUaGUgbmFtZSB3
aWxsIGJlIHVzZWQgZm9yIHRoZSByZW5kZXIgdGhyZWFkIG5hbWUgYW5kIGluY2x1ZGVkIHdoZW4K
LSAgICogbG9nZ2luZy4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91IG11c3QgZmly
c3QgY2FsbCBpbml0KCkgYW5kIGNyZWF0ZUVnbFN1cmZhY2UuCi0gICAqLwotICBwdWJsaWMgRWds
UmVuZGVyZXIoU3RyaW5nIG5hbWUpIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0KLSAg
LyoqCi0gICAqIEluaXRpYWxpemUgdGhpcyBjbGFzcywgc2hhcmluZyByZXNvdXJjZXMgd2l0aCB8
c2hhcmVkQ29udGV4dHwuIFRoZSBjdXN0b20gfGRyYXdlcnwgd2lsbCBiZSB1c2VkCi0gICAqIGZv
ciBkcmF3aW5nIGZyYW1lcyBvbiB0aGUgRUdMU3VyZmFjZS4gVGhpcyBjbGFzcyBpcyByZXNwb25z
aWJsZSBmb3IgY2FsbGluZyByZWxlYXNlKCkgb24KLSAgICogfGRyYXdlcnwuIEl0IGlzIGFsbG93
ZWQgdG8gY2FsbCBpbml0KCkgdG8gcmVpbml0aWFsaXplIHRoZSByZW5kZXJlciBhZnRlciBhIHBy
ZXZpb3VzCi0gICAqIGluaXQoKS9yZWxlYXNlKCkgY3ljbGUuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCBpbml0KGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBmaW5hbCBpbnRbXSBj
b25maWdBdHRyaWJ1dGVzLAotICAgICAgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyKSB7
Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRocmVh
ZEhhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0
aW9uKG5hbWUgKyAiQWxyZWFkeSBpbml0aWFsaXplZCIpOwotICAgICAgfQotICAgICAgbG9nRCgi
SW5pdGlhbGl6aW5nIEVnbFJlbmRlcmVyIik7Ci0gICAgICB0aGlzLmRyYXdlciA9IGRyYXdlcjsK
LQotICAgICAgZmluYWwgSGFuZGxlclRocmVhZCByZW5kZXJUaHJlYWQgPSBuZXcgSGFuZGxlclRo
cmVhZChuYW1lICsgIkVnbFJlbmRlcmVyIik7Ci0gICAgICByZW5kZXJUaHJlYWQuc3RhcnQoKTsK
LSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihyZW5kZXJUaHJlYWQuZ2V0
TG9vcGVyKCkpOwotICAgICAgLy8gQ3JlYXRlIEVHTCBjb250ZXh0IG9uIHRoZSBuZXdseSBjcmVh
dGVkIHJlbmRlciB0aHJlYWQuIEl0IHNob3VsZCBiZSBwb3NzaWJseSB0byBjcmVhdGUgdGhlCi0g
ICAgICAvLyBjb250ZXh0IG9uIHRoaXMgdGhyZWFkIGFuZCBtYWtlIGl0IGN1cnJlbnQgb24gdGhl
IHJlbmRlciB0aHJlYWQsIGJ1dCB0aGlzIGNhdXNlcyBmYWlsdXJlIG9uCi0gICAgICAvLyBzb21l
IE1hcnZlbCBiYXNlZCBKQiBkZXZpY2VzLiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2Vi
cnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NjM1MC4KLSAgICAgIFRocmVhZFV0aWxzLmludm9rZUF0RnJv
bnRVbmludGVycnVwdGlibHkocmVuZGVyVGhyZWFkSGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAg
IC8vIElmIHNoYXJlZENvbnRleHQgaXMgbnVsbCwgdGhlbiB0ZXh0dXJlIGZyYW1lcyBhcmUgZGlz
YWJsZWQuIFRoaXMgaXMgdHlwaWNhbGx5IGZvciBvbGQKLSAgICAgICAgICAvLyBkZXZpY2VzIHRo
YXQgbWlnaHQgbm90IGJlIGZ1bGx5IHNwZWMgY29tcGxpYW50LCBzbyBmb3JjZSBFR0wgMS4wIHNp
bmNlIEVHTCAxLjQgaGFzCi0gICAgICAgICAgLy8gY2F1c2VkIHRyb3VibGUgb24gc29tZSB3ZWly
ZCBkZXZpY2VzLgotICAgICAgICAgIGlmIChzaGFyZWRDb250ZXh0ID09IG51bGwpIHsKLSAgICAg
ICAgICAgIGxvZ0QoIkVnbEJhc2UxMC5jcmVhdGUgY29udGV4dCIpOwotICAgICAgICAgICAgZWds
QmFzZSA9IG5ldyBFZ2xCYXNlMTAobnVsbCAvKiBzaGFyZWRDb250ZXh0ICovLCBjb25maWdBdHRy
aWJ1dGVzKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9nRCgiRWdsQmFzZS5j
cmVhdGUgc2hhcmVkIGNvbnRleHQiKTsKLSAgICAgICAgICAgIGVnbEJhc2UgPSBFZ2xCYXNlLmNy
ZWF0ZShzaGFyZWRDb250ZXh0LCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgIH0pOwotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KGVnbFN1cmZh
Y2VDcmVhdGlvblJ1bm5hYmxlKTsKLSAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWVOcyA9IFN5
c3RlbS5uYW5vVGltZSgpOwotICAgICAgcmVzZXRTdGF0aXN0aWNzKGN1cnJlbnRUaW1lTnMpOwot
ICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0RGVsYXllZCgKLSAgICAgICAgICBsb2dTdGF0
aXN0aWNzUnVubmFibGUsIFRpbWVVbml0LlNFQ09ORFMudG9NaWxsaXMoTE9HX0lOVEVSVkFMX1NF
QykpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUVnbFN1cmZhY2UoU3VyZmFj
ZSBzdXJmYWNlKSB7Ci0gICAgY3JlYXRlRWdsU3VyZmFjZUludGVybmFsKHN1cmZhY2UpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNl
VGV4dHVyZSkgewotICAgIGNyZWF0ZUVnbFN1cmZhY2VJbnRlcm5hbChzdXJmYWNlVGV4dHVyZSk7
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlRWdsU3VyZmFjZUludGVybmFsKE9iamVjdCBz
dXJmYWNlKSB7Ci0gICAgZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUuc2V0U3VyZmFjZShzdXJm
YWNlKTsKLSAgICBwb3N0VG9SZW5kZXJUaHJlYWQoZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUp
OwotICB9Ci0KLSAgLyoqCi0gICAqIEJsb2NrIHVudGlsIGFueSBwZW5kaW5nIGZyYW1lIGlzIHJl
dHVybmVkIGFuZCBhbGwgR0wgcmVzb3VyY2VzIHJlbGVhc2VkLCBldmVuIGlmIGFuIGludGVycnVw
dAotICAgKiBvY2N1cnMuIElmIGFuIGludGVycnVwdCBvY2N1cnMgZHVyaW5nIHJlbGVhc2UoKSwg
dGhlIGludGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0LiBUaGlzIGZ1bmN0aW9uCi0gICAqIHNob3Vs
ZCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBBY3Rpdml0eSBpcyBkZXN0cm95ZWQgYW5kIHRoZSBFR0xD
b250ZXh0IGlzIHN0aWxsIHZhbGlkLiBJZiB5b3UKLSAgICogZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0
aW9uLCB0aGUgR0wgcmVzb3VyY2VzIG1pZ2h0IGxlYWsuCi0gICAqLwotICBwdWJsaWMgdm9pZCBy
ZWxlYXNlKCkgewotICAgIGxvZ0QoIlJlbGVhc2luZy4iKTsKLSAgICBmaW5hbCBDb3VudERvd25M
YXRjaCBlZ2xDbGVhbnVwQmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBzeW5j
aHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciA9
PSBudWxsKSB7Ci0gICAgICAgIGxvZ0QoIkFscmVhZHkgcmVsZWFzZWQiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFja3Mo
bG9nU3RhdGlzdGljc1J1bm5hYmxlKTsKLSAgICAgIC8vIFJlbGVhc2UgRUdMIGFuZCBHTCByZXNv
dXJjZXMgb24gcmVuZGVyIHRocmVhZC4KLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdEF0
RnJvbnRPZlF1ZXVlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBpZiAoZHJhd2VyICE9IG51bGwpIHsKLSAg
ICAgICAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3ZXIgPSBudWxsOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoeXV2VGV4dHVyZXMgIT0gbnVsbCkgewotICAgICAg
ICAgICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMywgeXV2VGV4dHVyZXMsIDApOwotICAgICAg
ICAgICAgeXV2VGV4dHVyZXMgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoYml0
bWFwVGV4dHVyZUZyYW1lYnVmZmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGJpdG1hcFRleHR1
cmVGcmFtZWJ1ZmZlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBiaXRtYXBUZXh0dXJlRnJhbWVi
dWZmZXIgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoZWdsQmFzZSAhPSBudWxs
KSB7Ci0gICAgICAgICAgICBsb2dEKCJlZ2xCYXNlIGRldGFjaCBhbmQgcmVsZWFzZS4iKTsKLSAg
ICAgICAgICAgIGVnbEJhc2UuZGV0YWNoQ3VycmVudCgpOwotICAgICAgICAgICAgZWdsQmFzZS5y
ZWxlYXNlKCk7Ci0gICAgICAgICAgICBlZ2xCYXNlID0gbnVsbDsKLSAgICAgICAgICB9Ci0gICAg
ICAgICAgZWdsQ2xlYW51cEJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICAgIH0KLSAgICAgIH0p
OwotICAgICAgZmluYWwgTG9vcGVyIHJlbmRlckxvb3BlciA9IHJlbmRlclRocmVhZEhhbmRsZXIu
Z2V0TG9vcGVyKCk7Ci0gICAgICAvLyBUT0RPKG1hZ2plZCk6IFJlcGxhY2UgdGhpcyBwb3N0KCkg
d2l0aCByZW5kZXJMb29wZXIucXVpdFNhZmVseSgpIHdoZW4gQVBJIHN1cHBvcnQgPj0gMTguCi0g
ICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGxvZ0QoIlF1
aXR0aW5nIHJlbmRlciB0aHJlYWQuIik7Ci0gICAgICAgICAgcmVuZGVyTG9vcGVyLnF1aXQoKTsK
LSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAvLyBEb24ndCBhY2NlcHQgYW55IG1vcmUgZnJh
bWVzIG9yIG1lc3NhZ2VzIHRvIHRoZSByZW5kZXIgdGhyZWFkLgotICAgICAgcmVuZGVyVGhyZWFk
SGFuZGxlciA9IG51bGw7Ci0gICAgfQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgRUdML0dMIGNsZWFu
dXAgcG9zdGVkIGFib3ZlIGlzIGV4ZWN1dGVkLgotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRl
cnJ1cHRpYmx5KGVnbENsZWFudXBCYXJyaWVyKTsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9j
aykgewotICAgICAgaWYgKHBlbmRpbmdGcmFtZSAhPSBudWxsKSB7Ci0gICAgICAgIFZpZGVvUmVu
ZGVyZXIucmVuZGVyRnJhbWVEb25lKHBlbmRpbmdGcmFtZSk7Ci0gICAgICAgIHBlbmRpbmdGcmFt
ZSA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGxvZ0QoIlJlbGVhc2luZyBkb25lLiIpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0IHRoZSBzdGF0aXN0aWNzIGxvZ2dlZCBpbiBsb2dTdGF0
aXN0aWNzKCkuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVzZXRTdGF0aXN0aWNzKGxvbmcgY3Vy
cmVudFRpbWVOcykgewotICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAg
IHN0YXRpc3RpY3NTdGFydFRpbWVOcyA9IGN1cnJlbnRUaW1lTnM7Ci0gICAgICBmcmFtZXNSZWNl
aXZlZCA9IDA7Ci0gICAgICBmcmFtZXNEcm9wcGVkID0gMDsKLSAgICAgIGZyYW1lc1JlbmRlcmVk
ID0gMDsKLSAgICAgIHJlbmRlclRpbWVOcyA9IDA7Ci0gICAgICByZW5kZXJTd2FwQnVmZmVyVGlt
ZU5zID0gMDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwcmludFN0YWNrVHJhY2UoKSB7
Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgZmluYWwgVGhyZWFkIHJl
bmRlclRocmVhZCA9Ci0gICAgICAgICAgKHJlbmRlclRocmVhZEhhbmRsZXIgPT0gbnVsbCkgPyBu
dWxsIDogcmVuZGVyVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKTsKLSAgICAg
IGlmIChyZW5kZXJUaHJlYWQgIT0gbnVsbCkgewotICAgICAgICBmaW5hbCBTdGFja1RyYWNlRWxl
bWVudFtdIHJlbmRlclN0YWNrVHJhY2UgPSByZW5kZXJUaHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwot
ICAgICAgICBpZiAocmVuZGVyU3RhY2tUcmFjZS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgbG9n
RCgiRWdsUmVuZGVyZXIgc3RhY2sgdHJhY2U6Iik7Ci0gICAgICAgICAgZm9yIChTdGFja1RyYWNl
RWxlbWVudCB0cmFjZUVsZW0gOiByZW5kZXJTdGFja1RyYWNlKSB7Ci0gICAgICAgICAgICBsb2dE
KHRyYWNlRWxlbS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGlmIHRoZSB2aWRlbyBzdHJlYW0gc2hvdWxk
IGJlIG1pcnJvcmVkIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1pcnJvcihmaW5h
bCBib29sZWFuIG1pcnJvcikgewotICAgIGxvZ0QoInNldE1pcnJvcjogIiArIG1pcnJvcik7Ci0g
ICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICB0aGlzLm1pcnJvciA9IG1pcnJv
cjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGxheW91dCBhc3BlY3QgcmF0aW8uIFRo
aXMgaXMgdXNlZCB0byBjcm9wIGZyYW1lcyB3aGVuIHJlbmRlcmluZyB0byBhdm9pZCBzdHJldGNo
ZWQgdmlkZW8uCi0gICAqIFNldCB0aGlzIHRvIDAgdG8gZGlzYWJsZSBjcm9wcGluZy4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIHNldExheW91dEFzcGVjdFJhdGlvKGZsb2F0IGxheW91dEFzcGVjdFJh
dGlvKSB7Ci0gICAgbG9nRCgic2V0TGF5b3V0QXNwZWN0UmF0aW86ICIgKyBsYXlvdXRBc3BlY3RS
YXRpbyk7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICB0aGlzLmxheW91
dEFzcGVjdFJhdGlvID0gbGF5b3V0QXNwZWN0UmF0aW87Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIExpbWl0IHJlbmRlciBmcmFtZXJhdGUuCi0gICAqCi0gICAqIEBwYXJhbSBmcHMgTGltaXQg
cmVuZGVyIGZyYW1lcmF0ZSB0byB0aGlzIHZhbHVlLCBvciB1c2UgRmxvYXQuUE9TSVRJVkVfSU5G
SU5JVFkgdG8gZGlzYWJsZSBmcHMKLSAgICogICAgICAgICAgICByZWR1Y3Rpb24uCi0gICAqLwot
ICBwdWJsaWMgdm9pZCBzZXRGcHNSZWR1Y3Rpb24oZmxvYXQgZnBzKSB7Ci0gICAgbG9nRCgic2V0
RnBzUmVkdWN0aW9uOiAiICsgZnBzKTsKLSAgICBzeW5jaHJvbml6ZWQgKGZwc1JlZHVjdGlvbkxv
Y2spIHsKLSAgICAgIGZpbmFsIGxvbmcgcHJldmlvdXNSZW5kZXJQZXJpb2ROcyA9IG1pblJlbmRl
clBlcmlvZE5zOwotICAgICAgaWYgKGZwcyA8PSAwKSB7Ci0gICAgICAgIG1pblJlbmRlclBlcmlv
ZE5zID0gTG9uZy5NQVhfVkFMVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtaW5SZW5kZXJQ
ZXJpb2ROcyA9IChsb25nKSAoVGltZVVuaXQuU0VDT05EUy50b05hbm9zKDEpIC8gZnBzKTsKLSAg
ICAgIH0KLSAgICAgIGlmIChtaW5SZW5kZXJQZXJpb2ROcyAhPSBwcmV2aW91c1JlbmRlclBlcmlv
ZE5zKSB7Ci0gICAgICAgIC8vIEZwcyByZWR1Y3Rpb24gY2hhbmdlZCAtIHJlc2V0IGZyYW1lIHRp
bWUuCi0gICAgICAgIG5leHRGcmFtZVRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVGcHNSZWR1Y3Rpb24oKSB7Ci0g
ICAgc2V0RnBzUmVkdWN0aW9uKEZsb2F0LlBPU0lUSVZFX0lORklOSVRZIC8qIGZwcyAqLyk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCBwYXVzZVZpZGVvKCkgewotICAgIHNldEZwc1JlZHVjdGlvbigw
IC8qIGZwcyAqLyk7Ci0gIH0KLQotICAvKioKLSAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0byBi
ZSBpbnZva2VkIHdoZW4gYSBuZXcgdmlkZW8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQuCi0gICAq
Ci0gICAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC4KLSAgICog
QHBhcmFtIHNjYWxlICAgIFRoZSBzY2FsZSBvZiB0aGUgQml0bWFwIHBhc3NlZCB0byB0aGUgY2Fs
bGJhY2ssIG9yIDAgaWYgbm8gQml0bWFwIGlzCi0gICAqICAgICAgICAgICAgICAgICByZXF1aXJl
ZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEZyYW1lTGlzdGVuZXIoRnJhbWVMaXN0ZW5lciBs
aXN0ZW5lciwgZmxvYXQgc2NhbGUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTGlzdGVuZXJM
b2NrKSB7Ci0gICAgICBmcmFtZUxpc3RlbmVycy5hZGQobmV3IFNjYWxlQW5kRnJhbWVMaXN0ZW5l
cihzY2FsZSwgbGlzdGVuZXIpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3ZlIGFu
eSBwZW5kaW5nIGNhbGxiYWNrIHRoYXQgd2FzIGFkZGVkIHdpdGggYWRkRnJhbWVMaXN0ZW5lci4g
SWYgdGhlIGNhbGxiYWNrIGlzIG5vdCBpbgotICAgKiB0aGUgcXVldWUsIG5vdGhpbmcgaGFwcGVu
cy4KLSAgICoKLSAgICogQHBhcmFtIHJ1bm5hYmxlIFRoZSBjYWxsYmFjayB0byByZW1vdmUuCi0g
ICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVGcmFtZUxpc3RlbmVyKEZyYW1lTGlzdGVuZXIgbGlz
dGVuZXIpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTGlzdGVuZXJMb2NrKSB7Ci0gICAgICBm
aW5hbCBJdGVyYXRvcjxTY2FsZUFuZEZyYW1lTGlzdGVuZXI+IGl0ZXIgPSBmcmFtZUxpc3RlbmVy
cy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICAgIGlm
IChpdGVyLm5leHQoKS5saXN0ZW5lciA9PSBsaXN0ZW5lcikgewotICAgICAgICAgIGl0ZXIucmVt
b3ZlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBWaWRlb1JlbmRl
cmVyLkNhbGxiYWNrcyBpbnRlcmZhY2UuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZW5k
ZXJGcmFtZShWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgIHN5bmNocm9uaXpl
ZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAgICsrZnJhbWVzUmVjZWl2ZWQ7Ci0gICAgfQotICAg
IGZpbmFsIGJvb2xlYW4gZHJvcE9sZEZyYW1lOwotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxv
Y2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpIHsKLSAgICAgICAg
bG9nRCgiRHJvcHBpbmcgZnJhbWUgLSBOb3QgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSByZWxlYXNl
ZC4iKTsKLSAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBpZiBmcHMgcmVkdWN0aW9uIGlz
IGFjdGl2ZS4KLSAgICAgIHN5bmNocm9uaXplZCAoZnBzUmVkdWN0aW9uTG9jaykgewotICAgICAg
ICBpZiAobWluUmVuZGVyUGVyaW9kTnMgPiAwKSB7Ci0gICAgICAgICAgZmluYWwgbG9uZyBjdXJy
ZW50VGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgaWYgKGN1cnJlbnRUaW1l
TnMgPCBuZXh0RnJhbWVUaW1lTnMpIHsKLSAgICAgICAgICAgIGxvZ0QoIkRyb3BwaW5nIGZyYW1l
IC0gZnBzIHJlZHVjdGlvbiBpcyBhY3RpdmUuIik7Ci0gICAgICAgICAgICBWaWRlb1JlbmRlcmVy
LnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
fQotICAgICAgICAgIG5leHRGcmFtZVRpbWVOcyArPSBtaW5SZW5kZXJQZXJpb2ROczsKLSAgICAg
ICAgICAvLyBUaGUgdGltZSBmb3IgdGhlIG5leHQgZnJhbWUgc2hvdWxkIGFsd2F5cyBiZSBpbiB0
aGUgZnV0dXJlLgotICAgICAgICAgIG5leHRGcmFtZVRpbWVOcyA9IE1hdGgubWF4KG5leHRGcmFt
ZVRpbWVOcywgY3VycmVudFRpbWVOcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN5bmNo
cm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIGRyb3BPbGRGcmFtZSA9IChwZW5kaW5nRnJh
bWUgIT0gbnVsbCk7Ci0gICAgICAgIGlmIChkcm9wT2xkRnJhbWUpIHsKLSAgICAgICAgICBWaWRl
b1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShwZW5kaW5nRnJhbWUpOwotICAgICAgICB9Ci0gICAg
ICAgIHBlbmRpbmdGcmFtZSA9IGZyYW1lOwotICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBv
c3QocmVuZGVyRnJhbWVSdW5uYWJsZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChkcm9wT2xk
RnJhbWUpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAgICAg
KytmcmFtZXNEcm9wcGVkOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZWxl
YXNlIEVHTCBzdXJmYWNlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgdGhlIEVHTCBz
dXJmYWNlIGlzIHJlbGVhc2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVsZWFzZUVnbFN1cmZh
Y2UoZmluYWwgUnVubmFibGUgY29tcGxldGlvbkNhbGxiYWNrKSB7Ci0gICAgLy8gRW5zdXJlIHRo
YXQgdGhlIHJlbmRlciB0aHJlYWQgaXMgbm8gbG9uZ2VyIHRvdWNoaW5nIHRoZSBTdXJmYWNlIGJl
Zm9yZSByZXR1cm5pbmcgZnJvbSB0aGlzCi0gICAgLy8gZnVuY3Rpb24uCi0gICAgZWdsU3VyZmFj
ZUNyZWF0aW9uUnVubmFibGUuc2V0U3VyZmFjZShudWxsIC8qIHN1cmZhY2UgKi8pOwotICAgIHN5
bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVy
ICE9IG51bGwpIHsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFja3Mo
ZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUpOwotICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVy
LnBvc3RBdEZyb250T2ZRdWV1ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRl
Ci0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgaWYgKGVnbEJhc2Ug
IT0gbnVsbCkgewotICAgICAgICAgICAgICBlZ2xCYXNlLmRldGFjaEN1cnJlbnQoKTsKLSAgICAg
ICAgICAgICAgZWdsQmFzZS5yZWxlYXNlU3VyZmFjZSgpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgY29tcGxldGlvbkNhbGxiYWNrLnJ1bigpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkNhbGxiYWNr
LnJ1bigpOwotICB9Ci0KLSAgLyoqCi0gICAqIE5vdGlmeSB0aGF0IHRoZSBzdXJmYWNlIHNpemUg
aGFzIGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdXJmYWNlU2l6ZUNoYW5nZWQoaW50
IHN1cmZhY2VXaWR0aCwgaW50IHN1cmZhY2VIZWlnaHQpIHsKLSAgICBsb2dEKCJTdXJmYWNlIHNp
emUgY2hhbmdlZDogIiArIHN1cmZhY2VXaWR0aCArICJ4IiArIHN1cmZhY2VIZWlnaHQpOwotICAg
IHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAgICAgdGhpcy5zdXJmYWNlV2lkdGggPSBz
dXJmYWNlV2lkdGg7Ci0gICAgICB0aGlzLnN1cmZhY2VIZWlnaHQgPSBzdXJmYWNlSGVpZ2h0Owot
ICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcml2YXRlIGhlbHBlciBmdW5jdGlvbiB0byBwb3N0
IHRhc2tzIHNhZmVseS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwb3N0VG9SZW5kZXJUaHJlYWQo
UnVubmFibGUgcnVubmFibGUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0g
ICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIHJlbmRlclRo
cmVhZEhhbmRsZXIucG9zdChydW5uYWJsZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIGNsZWFyU3VyZmFjZU9uUmVuZGVyVGhyZWFkKCkgewotICAgIGlmIChlZ2xCYXNl
ICE9IG51bGwgJiYgZWdsQmFzZS5oYXNTdXJmYWNlKCkpIHsKLSAgICAgIGxvZ0QoImNsZWFyU3Vy
ZmFjZSIpOwotICAgICAgR0xFUzIwLmdsQ2xlYXJDb2xvcigwIC8qIHJlZCAqLywgMCAvKiBncmVl
biAqLywgMCAvKiBibHVlICovLCAwIC8qIGFscGhhICovKTsKLSAgICAgIEdMRVMyMC5nbENsZWFy
KEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMo
KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUG9zdCBhIHRhc2sgdG8gY2xlYXIgdGhlIFRl
eHR1cmVWaWV3IHRvIGEgdHJhbnNwYXJlbnQgdW5pZm9ybSBjb2xvci4KLSAgICovCi0gIHB1Ymxp
YyB2b2lkIGNsZWFySW1hZ2UoKSB7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewot
ICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3RBdEZyb250T2ZRdWV1ZShu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgICAgY2xlYXJTdXJmYWNlT25SZW5kZXJUaHJlYWQoKTsKLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbmRlcnMgYW5kIHJlbGVh
c2VzIHxwZW5kaW5nRnJhbWV8LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlbmRlckZyYW1lT25S
ZW5kZXJUaHJlYWQoKSB7Ci0gICAgLy8gRmV0Y2ggYW5kIHJlbmRlciB8cGVuZGluZ0ZyYW1lfC4K
LSAgICBmaW5hbCBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZTsKLSAgICBzeW5jaHJvbml6
ZWQgKGZyYW1lTG9jaykgewotICAgICAgaWYgKHBlbmRpbmdGcmFtZSA9PSBudWxsKSB7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGZyYW1lID0gcGVuZGluZ0ZyYW1lOwotICAgICAg
cGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGVnbEJhc2UgPT0gbnVsbCB8fCAh
ZWdsQmFzZS5oYXNTdXJmYWNlKCkpIHsKLSAgICAgIGxvZ0QoIkRyb3BwaW5nIGZyYW1lIC0gTm8g
c3VyZmFjZSIpOwotICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgc3RhcnRUaW1lTnMgPSBTeXN0
ZW0ubmFub1RpbWUoKTsKLSAgICBmaW5hbCBmbG9hdFtdIHRleE1hdHJpeCA9Ci0gICAgICAgIFJl
bmRlcmVyQ29tbW9uLnJvdGF0ZVRleHR1cmVNYXRyaXgoZnJhbWUuc2FtcGxpbmdNYXRyaXgsIGZy
YW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICBmaW5hbCBmbG9hdFtdIGRyYXdNYXRyaXg7Ci0KLSAg
ICAvLyBBZnRlciBhIHN1cmZhY2Ugc2l6ZSBjaGFuZ2UsIHRoZSBFR0xTdXJmYWNlIG1pZ2h0IHN0
aWxsIGhhdmUgYSBidWZmZXIgb2YgdGhlIG9sZCBzaXplIGluIHRoZQotICAgIC8vIHBpcGVsaW5l
LiBRdWVyeWluZyB0aGUgRUdMU3VyZmFjZSB3aWxsIHNob3cgaWYgdGhlIHVuZGVybHlpbmcgYnVm
ZmVyIGRpbWVuc2lvbnMgaGF2ZW4ndCB5ZXQKLSAgICAvLyBjaGFuZ2VkLiBTdWNoIGEgYnVmZmVy
IHdpbGwgYmUgcmVuZGVyZWQgaW5jb3JyZWN0bHksIHNvIGZsdXNoIGl0IHdpdGggYSBibGFjayBm
cmFtZS4KLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2spIHsKLSAgICAgIGludCBzdXJmYWNl
Q2xlYXJDb3VudCA9IDA7Ci0gICAgICB3aGlsZSAoZWdsQmFzZS5zdXJmYWNlV2lkdGgoKSAhPSBz
dXJmYWNlV2lkdGggfHwgZWdsQmFzZS5zdXJmYWNlSGVpZ2h0KCkgIT0gc3VyZmFjZUhlaWdodCkg
ewotICAgICAgICArK3N1cmZhY2VDbGVhckNvdW50OwotICAgICAgICBpZiAoc3VyZmFjZUNsZWFy
Q291bnQgPiBNQVhfU1VSRkFDRV9DTEVBUl9DT1VOVCkgewotICAgICAgICAgIGxvZ0QoIkZhaWxl
ZCB0byBnZXQgc3VyZmFjZSBvZiBleHBlY3RlZCBzaXplIC0gZHJvcHBpbmcgZnJhbWUuIik7Ci0g
ICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsb2dEKCJTdXJmYWNlIHNpemUgbWlzbWF0Y2gg
LSBjbGVhcmluZyBzdXJmYWNlLiBTaXplOiAiICsgZWdsQmFzZS5zdXJmYWNlV2lkdGgoKSArICJ4
IgotICAgICAgICAgICAgKyBlZ2xCYXNlLnN1cmZhY2VIZWlnaHQoKSArICIgRXhwZWN0ZWQ6ICIg
KyBzdXJmYWNlV2lkdGggKyAieCIgKyBzdXJmYWNlSGVpZ2h0KTsKLSAgICAgICAgY2xlYXJTdXJm
YWNlT25SZW5kZXJUaHJlYWQoKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsIGZsb2F0W10gbGF5b3V0
TWF0cml4OwotICAgICAgaWYgKGxheW91dEFzcGVjdFJhdGlvID4gMCkgewotICAgICAgICBsYXlv
dXRNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5nZXRMYXlvdXRNYXRyaXgoCi0gICAgICAgICAgICBt
aXJyb3IsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpIC8gKGZsb2F0KSBmcmFtZS5yb3RhdGVkSGVpZ2h0
KCksIGxheW91dEFzcGVjdFJhdGlvKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGxheW91dE1h
dHJpeCA9Ci0gICAgICAgICAgICBtaXJyb3IgPyBSZW5kZXJlckNvbW1vbi5ob3Jpem9udGFsRmxp
cE1hdHJpeCgpIDogUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKTsKLSAgICAgIH0KLSAg
ICAgIGRyYXdNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHRleE1hdHJp
eCwgbGF5b3V0TWF0cml4KTsKLSAgICB9Ci0KLSAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKDAgLyog
cmVkICovLCAwIC8qIGdyZWVuICovLCAwIC8qIGJsdWUgKi8sIDAgLyogYWxwaGEgKi8pOwotICAg
IEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICBpZiAoZnJh
bWUueXV2RnJhbWUpIHsKLSAgICAgIC8vIE1ha2Ugc3VyZSBZVVYgdGV4dHVyZXMgYXJlIGFsbG9j
YXRlZC4KLSAgICAgIGlmICh5dXZUZXh0dXJlcyA9PSBudWxsKSB7Ci0gICAgICAgIHl1dlRleHR1
cmVzID0gbmV3IGludFszXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsK
LSAgICAgICAgICB5dXZUZXh0dXJlc1tpXSA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIw
LkdMX1RFWFRVUkVfMkQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB5dXZVcGxvYWRlci51
cGxvYWRZdXZEYXRhKAotICAgICAgICAgIHl1dlRleHR1cmVzLCBmcmFtZS53aWR0aCwgZnJhbWUu
aGVpZ2h0LCBmcmFtZS55dXZTdHJpZGVzLCBmcmFtZS55dXZQbGFuZXMpOwotICAgICAgZHJhd2Vy
LmRyYXdZdXYoeXV2VGV4dHVyZXMsIGRyYXdNYXRyaXgsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBm
cmFtZS5yb3RhdGVkSGVpZ2h0KCksIDAsIDAsCi0gICAgICAgICAgc3VyZmFjZVdpZHRoLCBzdXJm
YWNlSGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgZHJhd2VyLmRyYXdPZXMoZnJhbWUudGV4
dHVyZUlkLCBkcmF3TWF0cml4LCBmcmFtZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUucm90YXRlZEhl
aWdodCgpLCAwLCAwLAotICAgICAgICAgIHN1cmZhY2VXaWR0aCwgc3VyZmFjZUhlaWdodCk7Ci0g
ICAgfQotCi0gICAgZmluYWwgbG9uZyBzd2FwQnVmZmVyc1N0YXJ0VGltZU5zID0gU3lzdGVtLm5h
bm9UaW1lKCk7Ci0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotCi0gICAgZmluYWwgbG9uZyBj
dXJyZW50VGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgc3luY2hyb25pemVkIChzdGF0
aXN0aWNzTG9jaykgewotICAgICAgKytmcmFtZXNSZW5kZXJlZDsKLSAgICAgIHJlbmRlclRpbWVO
cyArPSAoY3VycmVudFRpbWVOcyAtIHN0YXJ0VGltZU5zKTsKLSAgICAgIHJlbmRlclN3YXBCdWZm
ZXJUaW1lTnMgKz0gKGN1cnJlbnRUaW1lTnMgLSBzd2FwQnVmZmVyc1N0YXJ0VGltZU5zKTsKLSAg
ICB9Ci0KLSAgICBub3RpZnlDYWxsYmFja3MoZnJhbWUsIHRleE1hdHJpeCk7Ci0gICAgVmlkZW9S
ZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG5v
dGlmeUNhbGxiYWNrcyhWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSwgZmxvYXRbXSB0ZXhN
YXRyaXgpIHsKLSAgICAvLyBNYWtlIHRlbXBvcmFyeSBjb3B5IG9mIGNhbGxiYWNrIGxpc3QgdG8g
YXZvaWQgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiwgaW4gY2FzZQotICAgIC8vIGNh
bGxiYWNrcyBjYWxsIGFkZEZyYW1lbGlzdGVuZXIgb3IgcmVtb3ZlRnJhbWVMaXN0ZW5lci4KLSAg
ICBmaW5hbCBBcnJheUxpc3Q8U2NhbGVBbmRGcmFtZUxpc3RlbmVyPiB0bXBMaXN0OwotICAgIHN5
bmNocm9uaXplZCAoZnJhbWVMaXN0ZW5lckxvY2spIHsKLSAgICAgIGlmIChmcmFtZUxpc3RlbmVy
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgIHRtcExpc3QgPSBuZXcgQXJyYXlM
aXN0PD4oZnJhbWVMaXN0ZW5lcnMpOwotICAgICAgZnJhbWVMaXN0ZW5lcnMuY2xlYXIoKTsKLSAg
ICB9Ci0KLSAgICBmaW5hbCBmbG9hdFtdIGJpdG1hcE1hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLm11
bHRpcGx5TWF0cmljZXMoCi0gICAgICAgIFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXMo
dGV4TWF0cml4LAotICAgICAgICAgICAgbWlycm9yID8gUmVuZGVyZXJDb21tb24uaG9yaXpvbnRh
bEZsaXBNYXRyaXgoKSA6IFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCkpLAotICAgICAg
ICBSZW5kZXJlckNvbW1vbi52ZXJ0aWNhbEZsaXBNYXRyaXgoKSk7Ci0KLSAgICBmb3IgKFNjYWxl
QW5kRnJhbWVMaXN0ZW5lciBzY2FsZUFuZExpc3RlbmVyIDogdG1wTGlzdCkgewotICAgICAgZmlu
YWwgaW50IHNjYWxlZFdpZHRoID0gKGludCkgKHNjYWxlQW5kTGlzdGVuZXIuc2NhbGUgKiBmcmFt
ZS5yb3RhdGVkV2lkdGgoKSk7Ci0gICAgICBmaW5hbCBpbnQgc2NhbGVkSGVpZ2h0ID0gKGludCkg
KHNjYWxlQW5kTGlzdGVuZXIuc2NhbGUgKiBmcmFtZS5yb3RhdGVkSGVpZ2h0KCkpOwotCi0gICAg
ICBpZiAoc2NhbGVkV2lkdGggPT0gMCB8fCBzY2FsZWRIZWlnaHQgPT0gMCkgewotICAgICAgICBz
Y2FsZUFuZExpc3RlbmVyLmxpc3RlbmVyLm9uRnJhbWUobnVsbCk7Ci0gICAgICAgIGNvbnRpbnVl
OwotICAgICAgfQotCi0gICAgICBpZiAoYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyID09IG51bGwp
IHsKLSAgICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyID0gbmV3IEdsVGV4dHVyZUZyYW1l
QnVmZmVyKEdMRVMyMC5HTF9SR0JBKTsKLSAgICAgIH0KLSAgICAgIGJpdG1hcFRleHR1cmVGcmFt
ZWJ1ZmZlci5zZXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotCi0gICAgICBHTEVT
MjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBiaXRtYXBUZXh0dXJl
RnJhbWVidWZmZXIuZ2V0RnJhbWVCdWZmZXJJZCgpKTsKLSAgICAgIEdMRVMyMC5nbEZyYW1lYnVm
ZmVyVGV4dHVyZTJEKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgR0xFUzIwLkdMX0NPTE9SX0FUVEFD
SE1FTlQwLAotICAgICAgICAgIEdMRVMyMC5HTF9URVhUVVJFXzJELCBiaXRtYXBUZXh0dXJlRnJh
bWVidWZmZXIuZ2V0VGV4dHVyZUlkKCksIDApOwotCi0gICAgICBpZiAoZnJhbWUueXV2RnJhbWUp
IHsKLSAgICAgICAgZHJhd2VyLmRyYXdZdXYoeXV2VGV4dHVyZXMsIGJpdG1hcE1hdHJpeCwgZnJh
bWUucm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSwKLSAgICAgICAgICAgIDAg
Lyogdmlld3BvcnRYICovLCAwIC8qIHZpZXdwb3J0WSAqLywgc2NhbGVkV2lkdGgsIHNjYWxlZEhl
aWdodCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkcmF3ZXIuZHJhd09lcyhmcmFtZS50ZXh0
dXJlSWQsIGJpdG1hcE1hdHJpeCwgZnJhbWUucm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0ZWRI
ZWlnaHQoKSwKLSAgICAgICAgICAgIDAgLyogdmlld3BvcnRYICovLCAwIC8qIHZpZXdwb3J0WSAq
Lywgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbmFsIEJ5
dGVCdWZmZXIgYml0bWFwQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChzY2FsZWRX
aWR0aCAqIHNjYWxlZEhlaWdodCAqIDQpOwotICAgICAgR0xFUzIwLmdsVmlld3BvcnQoMCwgMCwg
c2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgICBHTEVTMjAuZ2xSZWFkUGl4ZWxzKAot
ICAgICAgICAgIDAsIDAsIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQsIEdMRVMyMC5HTF9SR0JB
LCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgYml0bWFwQnVmZmVyKTsKLQotICAgICAgR0xFUzIw
LmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgICBHbFV0
aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkVnbFJlbmRlcmVyLm5vdGlmeUNhbGxiYWNrcyIpOwotCi0g
ICAgICBmaW5hbCBCaXRtYXAgYml0bWFwID0gQml0bWFwLmNyZWF0ZUJpdG1hcChzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0LCBCaXRtYXAuQ29uZmlnLkFSR0JfODg4OCk7Ci0gICAgICBiaXRtYXAu
Y29weVBpeGVsc0Zyb21CdWZmZXIoYml0bWFwQnVmZmVyKTsKLSAgICAgIHNjYWxlQW5kTGlzdGVu
ZXIubGlzdGVuZXIub25GcmFtZShiaXRtYXApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3Ry
aW5nIGF2ZXJhZ2VUaW1lQXNTdHJpbmcobG9uZyBzdW1UaW1lTnMsIGludCBjb3VudCkgewotICAg
IHJldHVybiAoY291bnQgPD0gMCkgPyAiTkEiIDogVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWNy
b3Moc3VtVGltZU5zIC8gY291bnQpICsgIiDOvHMiOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxv
Z1N0YXRpc3RpY3MoKSB7Ci0gICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU5zID0gU3lzdGVtLm5h
bm9UaW1lKCk7Ci0gICAgc3luY2hyb25pemVkIChzdGF0aXN0aWNzTG9jaykgewotICAgICAgZmlu
YWwgbG9uZyBlbGFwc2VkVGltZU5zID0gY3VycmVudFRpbWVOcyAtIHN0YXRpc3RpY3NTdGFydFRp
bWVOczsKLSAgICAgIGlmIChlbGFwc2VkVGltZU5zIDw9IDApIHsKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgfQotICAgICAgZmluYWwgZmxvYXQgcmVuZGVyRnBzID0gZnJhbWVzUmVuZGVyZWQgKiBU
aW1lVW5pdC5TRUNPTkRTLnRvTmFub3MoMSkgLyAoZmxvYXQpIGVsYXBzZWRUaW1lTnM7Ci0gICAg
ICBsb2dEKCJEdXJhdGlvbjogIiArIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKGVsYXBz
ZWRUaW1lTnMpICsgIiBtcy4iCi0gICAgICAgICAgKyAiIEZyYW1lcyByZWNlaXZlZDogIiArIGZy
YW1lc1JlY2VpdmVkICsgIi4iCi0gICAgICAgICAgKyAiIERyb3BwZWQ6ICIgKyBmcmFtZXNEcm9w
cGVkICsgIi4iCi0gICAgICAgICAgKyAiIFJlbmRlcmVkOiAiICsgZnJhbWVzUmVuZGVyZWQgKyAi
LiIKLSAgICAgICAgICArICIgUmVuZGVyIGZwczogIiArIFN0cmluZy5mb3JtYXQoIiUuMWYiLCBy
ZW5kZXJGcHMpICsgIi4iCi0gICAgICAgICAgKyAiIEF2ZXJhZ2UgcmVuZGVyIHRpbWU6ICIgKyBh
dmVyYWdlVGltZUFzU3RyaW5nKHJlbmRlclRpbWVOcywgZnJhbWVzUmVuZGVyZWQpICsgIi4iCi0g
ICAgICAgICAgKyAiIEF2ZXJhZ2Ugc3dhcEJ1ZmZlciB0aW1lOiAiCi0gICAgICAgICAgKyBhdmVy
YWdlVGltZUFzU3RyaW5nKHJlbmRlclN3YXBCdWZmZXJUaW1lTnMsIGZyYW1lc1JlbmRlcmVkKSAr
ICIuIik7Ci0gICAgICByZXNldFN0YXRpc3RpY3MoY3VycmVudFRpbWVOcyk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ0QoU3RyaW5nIHN0cmluZykgewotICAgIExvZ2dpbmcuZChU
QUcsIG5hbWUgKyBzdHJpbmcpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ZpbGVW
aWRlb0NhcHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9GaWxlVmlk
ZW9DYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0Zp
bGVWaWRlb0NhcHR1cmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTEgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5j
b250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLQotaW1wb3J0
IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRpbC5UaW1lcjsK
LWltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOwotaW1wb3J0IGphdmEuaW8uUmFuZG9tQWNjZXNz
RmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmlsZVZp
ZGVvQ2FwdHVyZXIgaW1wbGVtZW50cyBWaWRlb0NhcHR1cmVyIHsKLSAgcHJpdmF0ZSBpbnRlcmZh
Y2UgVmlkZW9SZWFkZXIgewotICAgIGludCBnZXRGcmFtZVdpZHRoKCk7Ci0gICAgaW50IGdldEZy
YW1lSGVpZ2h0KCk7Ci0gICAgYnl0ZVtdIGdldE5leHRGcmFtZSgpOwotICAgIHZvaWQgY2xvc2Uo
KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHZpZGVvIGRhdGEgZnJvbSBmaWxlIGZvciB0aGUg
Lnk0bSBjb250YWluZXIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWaWRlb1JlYWRl
clk0TSBpbXBsZW1lbnRzIFZpZGVvUmVhZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBT
dHJpbmcgVEFHID0gIlZpZGVvUmVhZGVyWTRNIjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBmcmFt
ZVdpZHRoOwotICAgIHByaXZhdGUgZmluYWwgaW50IGZyYW1lSGVpZ2h0OwotICAgIHByaXZhdGUg
ZmluYWwgaW50IGZyYW1lU2l6ZTsKLQotICAgIC8vIEZpcnN0IGNoYXIgYWZ0ZXIgaGVhZGVyCi0g
ICAgcHJpdmF0ZSBmaW5hbCBsb25nIHZpZGVvU3RhcnQ7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgWTRNX0ZSQU1FX0RFTElNRVRFUiA9ICJGUkFNRSI7Ci0KLSAgICBwcml2YXRl
IGZpbmFsIFJhbmRvbUFjY2Vzc0ZpbGUgbWVkaWFGaWxlU3RyZWFtOwotCi0gICAgcHVibGljIGlu
dCBnZXRGcmFtZVdpZHRoKCkgewotICAgICAgcmV0dXJuIGZyYW1lV2lkdGg7Ci0gICAgfQotCi0g
ICAgcHVibGljIGludCBnZXRGcmFtZUhlaWdodCgpIHsKLSAgICAgIHJldHVybiBmcmFtZUhlaWdo
dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmlkZW9SZWFkZXJZNE0oU3RyaW5nIGZpbGUpIHRocm93
cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBtZWRpYUZpbGVTdHJlYW0gPSBuZXcgUmFuZG9tQWNjZXNz
RmlsZShmaWxlLCAiciIpOwotICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmlu
Z0J1aWxkZXIoKTsKLSAgICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50IGMgPSBtZWRpYUZpbGVT
dHJlYW0ucmVhZCgpOwotICAgICAgICBpZiAoYyA9PSAtMSkgewotICAgICAgICAgIC8vIEVuZCBv
ZiBmaWxlIHJlYWNoZWQuCi0gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZv
dW5kIGVuZCBvZiBmaWxlIGJlZm9yZSBlbmQgb2YgaGVhZGVyIGZvciBmaWxlOiAiICsgZmlsZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICAgIC8vIEVuZCBv
ZiBoZWFkZXIgZm91bmQuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoKGNoYXIpIGMpOwotICAgICAgfQotICAgICAgdmlkZW9TdGFydCA9IG1lZGlh
RmlsZVN0cmVhbS5nZXRGaWxlUG9pbnRlcigpOwotICAgICAgU3RyaW5nIGhlYWRlciA9IGJ1aWxk
ZXIudG9TdHJpbmcoKTsKLSAgICAgIFN0cmluZ1tdIGhlYWRlclRva2VucyA9IGhlYWRlci5zcGxp
dCgiWyBdIik7Ci0gICAgICBpbnQgdyA9IDA7Ci0gICAgICBpbnQgaCA9IDA7Ci0gICAgICBTdHJp
bmcgY29sb3JTcGFjZSA9ICIiOwotICAgICAgZm9yIChTdHJpbmcgdG9rIDogaGVhZGVyVG9rZW5z
KSB7Ci0gICAgICAgIGNoYXIgYyA9IHRvay5jaGFyQXQoMCk7Ci0gICAgICAgIHN3aXRjaCAoYykg
ewotICAgICAgICAgIGNhc2UgJ1cnOgotICAgICAgICAgICAgdyA9IEludGVnZXIucGFyc2VJbnQo
dG9rLnN1YnN0cmluZygxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlICdI
JzoKLSAgICAgICAgICAgIGggPSBJbnRlZ2VyLnBhcnNlSW50KHRvay5zdWJzdHJpbmcoMSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnQyc6Ci0gICAgICAgICAgICBjb2xv
clNwYWNlID0gdG9rLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ29sb3Igc3BhY2U6ICIgKyBjb2xvclNw
YWNlKTsKLSAgICAgIGlmICghY29sb3JTcGFjZS5lcXVhbHMoIjQyMCIpICYmICFjb2xvclNwYWNl
LmVxdWFscygiNDIwbXBlZzIiKSkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uKAotICAgICAgICAgICAgIkRvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIGNvbG9y
IHNwYWNlIHRoYW4gSTQyMCBvciBJNDIwbXBlZzIiKTsKLSAgICAgIH0KLSAgICAgIGlmICgodyAl
IDIpID09IDEgfHwgKGggJSAyKSA9PSAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJn
dW1lbnRFeGNlcHRpb24oIkRvZXMgbm90IHN1cHBvcnQgb2RkIHdpZHRoIG9yIGhlaWdodCIpOwot
ICAgICAgfQotICAgICAgZnJhbWVXaWR0aCA9IHc7Ci0gICAgICBmcmFtZUhlaWdodCA9IGg7Ci0g
ICAgICBmcmFtZVNpemUgPSB3ICogaCAqIDMgLyAyOwotICAgICAgTG9nZ2luZy5kKFRBRywgImZy
YW1lIGRpbTogKCIgKyB3ICsgIiwgIiArIGggKyAiKSBmcmFtZVNpemU6ICIgKyBmcmFtZVNpemUp
OwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlW10gZ2V0TmV4dEZyYW1lKCkgewotICAgICAgYnl0
ZVtdIGZyYW1lID0gbmV3IGJ5dGVbZnJhbWVTaXplXTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGJ5
dGVbXSBmcmFtZURlbGltID0gbmV3IGJ5dGVbWTRNX0ZSQU1FX0RFTElNRVRFUi5sZW5ndGgoKSAr
IDFdOwotICAgICAgICBpZiAobWVkaWFGaWxlU3RyZWFtLnJlYWQoZnJhbWVEZWxpbSkgPCBmcmFt
ZURlbGltLmxlbmd0aCkgewotICAgICAgICAgIC8vIFdlIHJlYWNoIGVuZCBvZiBmaWxlLCBsb29w
Ci0gICAgICAgICAgbWVkaWFGaWxlU3RyZWFtLnNlZWsodmlkZW9TdGFydCk7Ci0gICAgICAgICAg
aWYgKG1lZGlhRmlsZVN0cmVhbS5yZWFkKGZyYW1lRGVsaW0pIDwgZnJhbWVEZWxpbS5sZW5ndGgp
IHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBsb29waW5n
IHZpZGVvIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBmcmFtZURl
bGltU3RyID0gbmV3IFN0cmluZyhmcmFtZURlbGltKTsKLSAgICAgICAgaWYgKCFmcmFtZURlbGlt
U3RyLmVxdWFscyhZNE1fRlJBTUVfREVMSU1FVEVSICsgIlxuIikpIHsKLSAgICAgICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIkZyYW1lcyBzaG91bGQgYmUg
ZGVsaW1pdGVkIGJ5IEZSQU1FIHBsdXMgbmV3bGluZSwgZm91bmQgZGVsaW10ZXIgd2FzOiAnIgot
ICAgICAgICAgICAgICArIGZyYW1lRGVsaW1TdHIgKyAiJyIpOwotICAgICAgICB9Ci0gICAgICAg
IG1lZGlhRmlsZVN0cmVhbS5yZWFkRnVsbHkoZnJhbWUpOwotICAgICAgICBieXRlW10gbnYyMUZy
YW1lID0gbmV3IGJ5dGVbZnJhbWVTaXplXTsKLSAgICAgICAgbmF0aXZlSTQyMFRvTlYyMShmcmFt
ZSwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIG52MjFGcmFtZSk7Ci0gICAgICAgIHJldHVybiBu
djIxRnJhbWU7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIGNsb3NlKCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgbWVkaWFGaWxlU3RyZWFtLmNsb3Nl
KCk7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShU
QUcsICJQcm9ibGVtIGNsb3NpbmcgZmlsZSIsIGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiRmlsZVZpZGVvQ2FwdHVyZXIiOwot
ICBwcml2YXRlIGZpbmFsIFZpZGVvUmVhZGVyIHZpZGVvUmVhZGVyOwotICBwcml2YXRlIENhcHR1
cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcjsKLSAgcHJpdmF0ZSBmaW5hbCBUaW1lciB0aW1l
ciA9IG5ldyBUaW1lcigpOwotCi0gIHByaXZhdGUgZmluYWwgVGltZXJUYXNrIHRpY2tUYXNrID0g
bmV3IFRpbWVyVGFzaygpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICB0aWNrKCk7Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgaW50IGdldEZyYW1lV2lk
dGgoKSB7Ci0gICAgcmV0dXJuIHZpZGVvUmVhZGVyLmdldEZyYW1lV2lkdGgoKTsKLSAgfQotCi0g
IHByaXZhdGUgaW50IGdldEZyYW1lSGVpZ2h0KCkgewotICAgIHJldHVybiB2aWRlb1JlYWRlci5n
ZXRGcmFtZUhlaWdodCgpOwotICB9Ci0KLSAgcHVibGljIEZpbGVWaWRlb0NhcHR1cmVyKFN0cmlu
ZyBpbnB1dEZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIHZpZGVv
UmVhZGVyID0gbmV3IFZpZGVvUmVhZGVyWTRNKGlucHV0RmlsZSk7Ci0gICAgfSBjYXRjaCAoSU9F
eGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkNvdWxkIG5vdCBvcGVuIHZpZGVv
IGZpbGU6ICIgKyBpbnB1dEZpbGUpOwotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIGJ5dGVbXSBnZXROZXh0RnJhbWUoKSB7Ci0gICAgcmV0dXJuIHZpZGVvUmVhZGVyLmdl
dE5leHRGcmFtZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGljaygpIHsKLSAgICBmaW5hbCBs
b25nIGNhcHR1cmVUaW1lTnMgPSBUaW1lVW5pdC5NSUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0ZW1D
bG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0KLSAgICBieXRlW10gZnJhbWVEYXRhID0gZ2V0TmV4
dEZyYW1lKCk7Ci0gICAgY2FwdHVyZXJPYnNlcnZlci5vbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVk
KAotICAgICAgICBmcmFtZURhdGEsIGdldEZyYW1lV2lkdGgoKSwgZ2V0RnJhbWVIZWlnaHQoKSwg
MCwgY2FwdHVyZVRpbWVOcyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgaW5p
dGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgQ29udGV4
dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2Jz
ZXJ2ZXIpIHsKLSAgICB0aGlzLmNhcHR1cmVyT2JzZXJ2ZXIgPSBjYXB0dXJlck9ic2VydmVyOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0YXJ0Q2FwdHVyZShpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICB0aW1lci5zY2hlZHVsZSh0aWNrVGFz
aywgMCwgMTAwMCAvIGZyYW1lcmF0ZSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgc3RvcENhcHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIHRpbWVy
LmNhbmNlbCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNoYW5nZUNhcHR1
cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgLy8g
RW1wdHkgb24gcHVycG9zZQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRpc3Bv
c2UoKSB7Ci0gICAgdmlkZW9SZWFkZXIuY2xvc2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVJNDIwVG9OVjIxKGJ5dGVbXSBzcmMs
IGludCB3aWR0aCwgaW50IGhlaWdodCwgYnl0ZVtdIGRzdCk7Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0dsUmVjdERyYXdlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
R2xSZWN0RHJhd2VyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
R2xSZWN0RHJhd2VyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTAgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcGVu
Z2wuR0xFUzExRXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBqYXZh
Lm5pby5GbG9hdEJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuSWRlbnRpdHlIYXNoTWFwOwotaW1w
b3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHRvIGRyYXcgYW4gb3Bh
cXVlIHF1YWQgb24gdGhlIHRhcmdldCB2aWV3cG9ydCBsb2NhdGlvbi4gUm90YXRpb24sIG1pcnJv
ciwgYW5kCi0gKiBjcm9wcGluZyBpcyBzcGVjaWZpZWQgdXNpbmcgYSA0eDQgdGV4dHVyZSBjb29y
ZGluYXRlIHRyYW5zZm9ybSBtYXRyaXguIFRoZSBmcmFtZSBpbnB1dCBjYW4gZWl0aGVyCi0gKiBi
ZSBhbiBPRVMgdGV4dHVyZSBvciBZVVYgdGV4dHVyZXMgaW4gSTQyMCBmb3JtYXQuIFRoZSBHTCBz
dGF0ZSBtdXN0IGJlIHByZXNlcnZlZCBiZXR3ZWVuIGRyYXcKLSAqIGNhbGxzLCB0aGlzIGlzIGlu
dGVudGlvbmFsIHRvIG1heGltaXplIHBlcmZvcm1hbmNlLiBUaGUgZnVuY3Rpb24gcmVsZWFzZSgp
IG11c3QgYmUgY2FsbGVkCi0gKiBtYW51YWxseSB0byBmcmVlIHRoZSByZXNvdXJjZXMgaGVsZCBi
eSB0aGlzIG9iamVjdC4KLSAqLwotcHVibGljIGNsYXNzIEdsUmVjdERyYXdlciBpbXBsZW1lbnRz
IFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIHsKLSAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAvLyBT
aW1wbGUgdmVydGV4IHNoYWRlciwgdXNlZCBmb3IgYm90aCBZVVYgYW5kIE9FUy4KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlRFWF9TSEFERVJfU1RSSU5HID0KLSAgICAgICAgInZh
cnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBpbl9wb3M7
XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBpbl90YztcbiIKLSAgICAgICsgIlxuIgotICAg
ICAgKyAidW5pZm9ybSBtYXQ0IHRleE1hdHJpeDtcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAi
dm9pZCBtYWluKCkge1xuIgotICAgICAgKyAiICAgIGdsX1Bvc2l0aW9uID0gaW5fcG9zO1xuIgot
ICAgICAgKyAiICAgIGludGVycF90YyA9ICh0ZXhNYXRyaXggKiBpbl90YykueHk7XG4iCi0gICAg
ICArICJ9XG4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBZVVZfRlJBR01FTlRf
U0hBREVSX1NUUklORyA9Ci0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAg
ICAgICsgInZhcnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsg
InVuaWZvcm0gc2FtcGxlcjJEIHlfdGV4O1xuIgotICAgICAgKyAidW5pZm9ybSBzYW1wbGVyMkQg
dV90ZXg7XG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBsZXIyRCB2X3RleDtcbiIKLSAgICAgICsg
IlxuIgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgLy8gQ1NDIGFjY29yZGluZyB0
byBodHRwOi8vd3d3LmZvdXJjYy5vcmcvZmNjeXZyZ2IucGhwCi0gICAgICArICIgIGZsb2F0IHkg
PSB0ZXh0dXJlMkQoeV90ZXgsIGludGVycF90YykucjtcbiIKLSAgICAgICsgIiAgZmxvYXQgdSA9
IHRleHR1cmUyRCh1X3RleCwgaW50ZXJwX3RjKS5yIC0gMC41O1xuIgotICAgICAgKyAiICBmbG9h
dCB2ID0gdGV4dHVyZTJEKHZfdGV4LCBpbnRlcnBfdGMpLnIgLSAwLjU7XG4iCi0gICAgICArICIg
IGdsX0ZyYWdDb2xvciA9IHZlYzQoeSArIDEuNDAzICogdiwgIgotICAgICAgKyAiICAgICAgICAg
ICAgICAgICAgICAgIHkgLSAwLjM0NCAqIHUgLSAwLjcxNCAqIHYsICIKLSAgICAgICsgIiAgICAg
ICAgICAgICAgICAgICAgICB5ICsgMS43NyAqIHUsIDEpO1xuIgotICAgICAgKyAifVxuIjsKLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkdCX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcg
PQotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAgICArICJ2YXJ5aW5n
IHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBs
ZXIyRCByZ2JfdGV4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4oKSB7XG4i
Ci0gICAgICArICIgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRChyZ2JfdGV4LCBpbnRlcnBfdGMp
O1xuIgotICAgICAgKyAifVxuIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgT0VT
X0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcgPQotICAgICAgICAiI2V4dGVuc2lvbiBHTF9PRVNfRUdM
X2ltYWdlX2V4dGVybmFsIDogcmVxdWlyZVxuIgotICAgICAgKyAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7XG4iCi0gICAgICArICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAi
XG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBsZXJFeHRlcm5hbE9FUyBvZXNfdGV4O1xuIgotICAg
ICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICArICIgIGdsX0ZyYWdD
b2xvciA9IHRleHR1cmUyRChvZXNfdGV4LCBpbnRlcnBfdGMpO1xuIgotICAgICAgKyAifVxuIjsK
LSAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgLy8gVmVydGV4IGNvb3JkaW5hdGVzIGluIE5vcm1h
bGl6ZWQgRGV2aWNlIENvb3JkaW5hdGVzLCBpLmUuICgtMSwgLTEpIGlzIGJvdHRvbS1sZWZ0IGFu
ZCAoMSwgMSkgaXMKLSAgLy8gdG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGbG9h
dEJ1ZmZlciBGVUxMX1JFQ1RBTkdMRV9CVUYgPSBHbFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIobmV3
IGZsb2F0W10gewotICAgICAgLTEuMGYsIC0xLjBmLCAvLyBCb3R0b20gbGVmdC4KLSAgICAgIDEu
MGYsIC0xLjBmLCAvLyBCb3R0b20gcmlnaHQuCi0gICAgICAtMS4wZiwgMS4wZiwgLy8gVG9wIGxl
ZnQuCi0gICAgICAxLjBmLCAxLjBmLCAvLyBUb3AgcmlnaHQuCi0gIH0pOwotCi0gIC8vIFRleHR1
cmUgY29vcmRpbmF0ZXMgLSAoMCwgMCkgaXMgYm90dG9tLWxlZnQgYW5kICgxLCAxKSBpcyB0b3At
cmlnaHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0QnVmZmVyIEZVTExfUkVDVEFOR0xF
X1RFWF9CVUYgPSBHbFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIobmV3IGZsb2F0W10gewotICAgICAg
MC4wZiwgMC4wZiwgLy8gQm90dG9tIGxlZnQuCi0gICAgICAxLjBmLCAwLjBmLCAvLyBCb3R0b20g
cmlnaHQuCi0gICAgICAwLjBmLCAxLjBmLCAvLyBUb3AgbGVmdC4KLSAgICAgIDEuMGYsIDEuMGYg
Ly8gVG9wIHJpZ2h0LgotICB9KTsKLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTaGFkZXIgewot
ICAgIHB1YmxpYyBmaW5hbCBHbFNoYWRlciBnbFNoYWRlcjsKLSAgICBwdWJsaWMgZmluYWwgaW50
IHRleE1hdHJpeExvY2F0aW9uOwotCi0gICAgcHVibGljIFNoYWRlcihTdHJpbmcgZnJhZ21lbnRT
aGFkZXIpIHsKLSAgICAgIHRoaXMuZ2xTaGFkZXIgPSBuZXcgR2xTaGFkZXIoVkVSVEVYX1NIQURF
Ul9TVFJJTkcsIGZyYWdtZW50U2hhZGVyKTsKLSAgICAgIHRoaXMudGV4TWF0cml4TG9jYXRpb24g
PSBnbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInRleE1hdHJpeCIpOwotICAgIH0KLSAgfQot
Ci0gIC8vIFRoZSBrZXlzIGFyZSBvbmUgb2YgdGhlIGZyYWdtZW50cyBzaGFkZXJzIGFib3ZlLgot
ICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFNoYWRlcj4gc2hhZGVycyA9IG5ldyBJZGVudGl0
eUhhc2hNYXA8U3RyaW5nLCBTaGFkZXI+KCk7Ci0KLSAgLyoqCi0gICAqIERyYXcgYW4gT0VTIHRl
eHR1cmUgZnJhbWUgd2l0aCBzcGVjaWZpZWQgdGV4dHVyZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgu
IFJlcXVpcmVkIHJlc291cmNlcyBhcmUKLSAgICogYWxsb2NhdGVkIGF0IHRoZSBmaXJzdCBjYWxs
IHRvIHRoaXMgZnVuY3Rpb24uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZHJh
d09lcyhpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJpeCwgaW50IGZyYW1lV2lkdGgs
IGludCBmcmFtZUhlaWdodCwKLSAgICAgIGludCB2aWV3cG9ydFgsIGludCB2aWV3cG9ydFksIGlu
dCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpIHsKLSAgICBwcmVwYXJlU2hhZGVy
KE9FU19GUkFHTUVOVF9TSEFERVJfU1RSSU5HLCB0ZXhNYXRyaXgpOwotICAgIEdMRVMyMC5nbEFj
dGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICAvLyB1cGRhdGVUZXhJbWFnZSgp
IG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCBpbiBhbm90aGVyIEVHTCBjb250ZXh0
LCBzbyB3ZSBuZWVkIHRvCi0gICAgLy8gYmluZC91bmJpbmQgdGhlIHRleHR1cmUgaW4gZWFjaCBk
cmF3IGNhbGwgc28gdGhhdCBHTEVTIHVuZGVyc3RhZHMgaXQncyBhIG5ldyB0ZXh0dXJlLgotICAg
IEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUywg
b2VzVGV4dHVyZUlkKTsKLSAgICBkcmF3UmVjdGFuZ2xlKHZpZXdwb3J0WCwgdmlld3BvcnRZLCB2
aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUo
R0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCAwKTsKLSAgfQotCi0gIC8qKgotICAg
KiBEcmF3IGEgUkdCKEEpIHRleHR1cmUgZnJhbWUgd2l0aCBzcGVjaWZpZWQgdGV4dHVyZSB0cmFu
c2Zvcm1hdGlvbiBtYXRyaXguIFJlcXVpcmVkIHJlc291cmNlcwotICAgKiBhcmUgYWxsb2NhdGVk
IGF0IHRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCi0gICAqLwotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgZHJhd1JnYihpbnQgdGV4dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJpeCwg
aW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgIGludCB2aWV3cG9ydFgsIGlu
dCB2aWV3cG9ydFksIGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpIHsKLSAg
ICBwcmVwYXJlU2hhZGVyKFJHQl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HLCB0ZXhNYXRyaXgpOwot
ICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICBHTEVT
MjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICBk
cmF3UmVjdGFuZ2xlKHZpZXdwb3J0WCwgdmlld3BvcnRZLCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9y
dEhlaWdodCk7Ci0gICAgLy8gVW5iaW5kIHRoZSB0ZXh0dXJlIGFzIGEgcHJlY2F1dGlvbi4KLSAg
ICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCk7Ci0gIH0KLQot
ICAvKioKLSAgICogRHJhdyBhIFlVViBmcmFtZSB3aXRoIHNwZWNpZmllZCB0ZXh0dXJlIHRyYW5z
Zm9ybWF0aW9uIG1hdHJpeC4gUmVxdWlyZWQgcmVzb3VyY2VzIGFyZQotICAgKiBhbGxvY2F0ZWQg
YXQgdGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KLSAgICovCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBkcmF3WXV2KGludFtdIHl1dlRleHR1cmVzLCBmbG9hdFtdIHRleE1hdHJp
eCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgIGludCB2aWV3cG9ydFgs
IGludCB2aWV3cG9ydFksIGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpIHsK
LSAgICBwcmVwYXJlU2hhZGVyKFlVVl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HLCB0ZXhNYXRyaXgp
OwotICAgIC8vIEJpbmQgdGhlIHRleHR1cmVzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsg
KytpKSB7Ci0gICAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCAr
IGkpOwotICAgICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIHl1
dlRleHR1cmVzW2ldKTsKLSAgICB9Ci0gICAgZHJhd1JlY3RhbmdsZSh2aWV3cG9ydFgsIHZpZXdw
b3J0WSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOwotICAgIC8vIFVuYmluZCB0aGUg
dGV4dHVyZXMgYXMgYSBwcmVjYXV0aW9uLi4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsr
aSkgewotICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTAgKyBp
KTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwKTsK
LSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZHJhd1JlY3RhbmdsZShpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIC8vIERyYXcgcXVhZC4KLSAgICBHTEVTMjAu
Z2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBHTEVTMjAuZ2xEcmF3QXJyYXlz
KEdMRVMyMC5HTF9UUklBTkdMRV9TVFJJUCwgMCwgNCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
cHJlcGFyZVNoYWRlcihTdHJpbmcgZnJhZ21lbnRTaGFkZXIsIGZsb2F0W10gdGV4TWF0cml4KSB7
Ci0gICAgZmluYWwgU2hhZGVyIHNoYWRlcjsKLSAgICBpZiAoc2hhZGVycy5jb250YWluc0tleShm
cmFnbWVudFNoYWRlcikpIHsKLSAgICAgIHNoYWRlciA9IHNoYWRlcnMuZ2V0KGZyYWdtZW50U2hh
ZGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gTGF6eSBhbGxvY2F0aW9uLgotICAgICAgc2hh
ZGVyID0gbmV3IFNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICBzaGFkZXJzLnB1dChmcmFn
bWVudFNoYWRlciwgc2hhZGVyKTsKLSAgICAgIHNoYWRlci5nbFNoYWRlci51c2VQcm9ncmFtKCk7
Ci0gICAgICAvLyBJbml0aWFsaXplIGZyYWdtZW50IHNoYWRlciB1bmlmb3JtIHZhbHVlcy4KLSAg
ICAgIGlmIChmcmFnbWVudFNoYWRlciA9PSBZVVZfRlJBR01FTlRfU0hBREVSX1NUUklORykgewot
ICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdsU2hhZGVyLmdldFVuaWZvcm1Mb2Nh
dGlvbigieV90ZXgiKSwgMCk7Ci0gICAgICAgIEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xT
aGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ1X3RleCIpLCAxKTsKLSAgICAgICAgR0xFUzIwLmds
VW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInZfdGV4IiksIDIp
OwotICAgICAgfSBlbHNlIGlmIChmcmFnbWVudFNoYWRlciA9PSBSR0JfRlJBR01FTlRfU0hBREVS
X1NUUklORykgewotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdsU2hhZGVyLmdl
dFVuaWZvcm1Mb2NhdGlvbigicmdiX3RleCIpLCAwKTsKLSAgICAgIH0gZWxzZSBpZiAoZnJhZ21l
bnRTaGFkZXIgPT0gT0VTX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcpIHsKLSAgICAgICAgR0xFUzIw
LmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oIm9lc190ZXgi
KSwgMCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uKCJVbmtub3duIGZyYWdtZW50IHNoYWRlcjogIiArIGZyYWdtZW50U2hhZGVyKTsKLSAg
ICAgIH0KLSAgICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiSW5pdGlhbGl6ZSBmcmFnbWVu
dCBzaGFkZXIgdW5pZm9ybSB2YWx1ZXMuIik7Ci0gICAgICAvLyBJbml0aWFsaXplIHZlcnRleCBz
aGFkZXIgYXR0cmlidXRlcy4KLSAgICAgIHNoYWRlci5nbFNoYWRlci5zZXRWZXJ0ZXhBdHRyaWJB
cnJheSgiaW5fcG9zIiwgMiwgRlVMTF9SRUNUQU5HTEVfQlVGKTsKLSAgICAgIHNoYWRlci5nbFNo
YWRlci5zZXRWZXJ0ZXhBdHRyaWJBcnJheSgiaW5fdGMiLCAyLCBGVUxMX1JFQ1RBTkdMRV9URVhf
QlVGKTsKLSAgICB9Ci0gICAgc2hhZGVyLmdsU2hhZGVyLnVzZVByb2dyYW0oKTsKLSAgICAvLyBD
b3B5IHRoZSB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvdmVyLgotICAgIEdMRVMyMC5n
bFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyLnRleE1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwgdGV4
TWF0cml4LCAwKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWxlYXNlIGFsbCBHTEVTIHJlc291cmNl
cy4gVGhpcyBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5LCBvdGhlcndpc2UgdGhlIHJlc291cmNl
cyBhcmUgbGVha2VkLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2Uo
KSB7Ci0gICAgZm9yIChTaGFkZXIgc2hhZGVyIDogc2hhZGVycy52YWx1ZXMoKSkgewotICAgICAg
c2hhZGVyLmdsU2hhZGVyLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgc2hhZGVycy5jbGVhcigpOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsU2hhZGVyLmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFNoYWRlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0dsU2hhZGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjEgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotCi1pbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7Ci0K
LS8vIEhlbHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgT3BlbkdMIHNoYWRlcnMgYW5kIHNoYWRlciBw
cm9ncmFtcy4KLXB1YmxpYyBjbGFzcyBHbFNoYWRlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBUQUcgPSAiR2xTaGFkZXIiOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBjb21waWxl
U2hhZGVyKGludCBzaGFkZXJUeXBlLCBTdHJpbmcgc291cmNlKSB7Ci0gICAgZmluYWwgaW50IHNo
YWRlciA9IEdMRVMyMC5nbENyZWF0ZVNoYWRlcihzaGFkZXJUeXBlKTsKLSAgICBpZiAoc2hhZGVy
ID09IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnbENyZWF0ZVNoYWRl
cigpIGZhaWxlZC4gR0xFUzIwIGVycm9yOiAiICsgR0xFUzIwLmdsR2V0RXJyb3IoKSk7Ci0gICAg
fQotICAgIEdMRVMyMC5nbFNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZSk7Ci0gICAgR0xFUzIw
LmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAgIGludFtdIGNvbXBpbGVTdGF0dXMgPSBuZXcg
aW50W10ge0dMRVMyMC5HTF9GQUxTRX07Ci0gICAgR0xFUzIwLmdsR2V0U2hhZGVyaXYoc2hhZGVy
LCBHTEVTMjAuR0xfQ09NUElMRV9TVEFUVVMsIGNvbXBpbGVTdGF0dXMsIDApOwotICAgIGlmIChj
b21waWxlU3RhdHVzWzBdICE9IEdMRVMyMC5HTF9UUlVFKSB7Ci0gICAgICBMb2dnaW5nLmUoCi0g
ICAgICAgICAgVEFHLCAiQ291bGQgbm90IGNvbXBpbGUgc2hhZGVyICIgKyBzaGFkZXJUeXBlICsg
IjoiICsgR0xFUzIwLmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKEdMRVMyMC5nbEdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7Ci0g
ICAgfQotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiY29tcGlsZVNoYWRlciIpOwotICAg
IHJldHVybiBzaGFkZXI7Ci0gIH0KLQotICBwcml2YXRlIGludCBwcm9ncmFtOwotCi0gIHB1Ymxp
YyBHbFNoYWRlcihTdHJpbmcgdmVydGV4U291cmNlLCBTdHJpbmcgZnJhZ21lbnRTb3VyY2UpIHsK
LSAgICBmaW5hbCBpbnQgdmVydGV4U2hhZGVyID0gY29tcGlsZVNoYWRlcihHTEVTMjAuR0xfVkVS
VEVYX1NIQURFUiwgdmVydGV4U291cmNlKTsKLSAgICBmaW5hbCBpbnQgZnJhZ21lbnRTaGFkZXIg
PSBjb21waWxlU2hhZGVyKEdMRVMyMC5HTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U291cmNl
KTsKLSAgICBwcm9ncmFtID0gR0xFUzIwLmdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGlmIChwcm9n
cmFtID09IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnbENyZWF0ZVBy
b2dyYW0oKSBmYWlsZWQuIEdMRVMyMCBlcnJvcjogIiArIEdMRVMyMC5nbEdldEVycm9yKCkpOwot
ICAgIH0KLSAgICBHTEVTMjAuZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsK
LSAgICBHTEVTMjAuZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwotICAg
IEdMRVMyMC5nbExpbmtQcm9ncmFtKHByb2dyYW0pOwotICAgIGludFtdIGxpbmtTdGF0dXMgPSBu
ZXcgaW50W10ge0dMRVMyMC5HTF9GQUxTRX07Ci0gICAgR0xFUzIwLmdsR2V0UHJvZ3JhbWl2KHBy
b2dyYW0sIEdMRVMyMC5HTF9MSU5LX1NUQVRVUywgbGlua1N0YXR1cywgMCk7Ci0gICAgaWYgKGxp
bmtTdGF0dXNbMF0gIT0gR0xFUzIwLkdMX1RSVUUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJD
b3VsZCBub3QgbGluayBwcm9ncmFtOiAiICsgR0xFUzIwLmdsR2V0UHJvZ3JhbUluZm9Mb2cocHJv
Z3JhbSkpOwotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oR0xFUzIwLmdsR2V0UHJv
Z3JhbUluZm9Mb2cocHJvZ3JhbSkpOwotICAgIH0KLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRv
Y3VtZW50YXRpb24gb2YgZ2xMaW5rUHJvZ3JhbSgpOgotICAgIC8vICJBZnRlciB0aGUgbGluayBv
cGVyYXRpb24sIGFwcGxpY2F0aW9ucyBhcmUgZnJlZSB0byBtb2RpZnkgYXR0YWNoZWQgc2hhZGVy
IG9iamVjdHMsIGNvbXBpbGUKLSAgICAvLyBhdHRhY2hlZCBzaGFkZXIgb2JqZWN0cywgZGV0YWNo
IHNoYWRlciBvYmplY3RzLCBkZWxldGUgc2hhZGVyIG9iamVjdHMsIGFuZCBhdHRhY2ggYWRkaXRp
b25hbAotICAgIC8vIHNoYWRlciBvYmplY3RzLiBOb25lIG9mIHRoZXNlIG9wZXJhdGlvbnMgYWZm
ZWN0cyB0aGUgaW5mb3JtYXRpb24gbG9nIG9yIHRoZSBwcm9ncmFtIHRoYXQgaXMKLSAgICAvLyBw
YXJ0IG9mIHRoZSBwcm9ncmFtIG9iamVjdC4iCi0gICAgLy8gQnV0IGluIHByYWN0aWNlLCBkZXRh
Y2hpbmcgc2hhZGVycyBmcm9tIHRoZSBwcm9ncmFtIHNlZW1zIHRvIGJyZWFrIHNvbWUgZGV2aWNl
cy4gRGVsZXRpbmcgdGhlCi0gICAgLy8gc2hhZGVycyBhcmUgZmluZSBob3dldmVyIC0gaXQgd2ls
bCBkZWxldGUgdGhlbSB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciBhdHRhY2hlZCB0byBhIHByb2dy
YW0uCi0gICAgR0xFUzIwLmdsRGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgR0xFUzIw
LmdsRGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMy
RXJyb3IoIkNyZWF0aW5nIEdsU2hhZGVyIik7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEF0dHJp
YkxvY2F0aW9uKFN0cmluZyBsYWJlbCkgewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVsZWFz
ZWQiKTsKLSAgICB9Ci0gICAgaW50IGxvY2F0aW9uID0gR0xFUzIwLmdsR2V0QXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgbGFiZWwpOwotICAgIGlmIChsb2NhdGlvbiA8IDApIHsKLSAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlICciICsgbGFiZWwgKyAiJyBp
biBwcm9ncmFtIik7Ci0gICAgfQotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQotCi0gIC8qKgot
ICAgKiBFbmFibGUgYW5kIHVwbG9hZCBhIHZlcnRleCBhcnJheSBmb3IgYXR0cmlidXRlIHxsYWJl
bHwuIFRoZSB2ZXJ0ZXggZGF0YSBpcyBzcGVjaWZpZWQgaW4KLSAgICogfGJ1ZmZlcnwgd2l0aCB8
ZGltZW5zaW9ufCBudW1iZXIgb2YgY29tcG9uZW50cyBwZXIgdmVydGV4LgotICAgKi8KLSAgcHVi
bGljIHZvaWQgc2V0VmVydGV4QXR0cmliQXJyYXkoU3RyaW5nIGxhYmVsLCBpbnQgZGltZW5zaW9u
LCBGbG9hdEJ1ZmZlciBidWZmZXIpIHsKLSAgICBpZiAocHJvZ3JhbSA9PSAtMSkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJlbGVhc2Vk
Iik7Ci0gICAgfQotICAgIGludCBsb2NhdGlvbiA9IGdldEF0dHJpYkxvY2F0aW9uKGxhYmVsKTsK
LSAgICBHTEVTMjAuZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShsb2NhdGlvbik7Ci0gICAgR0xF
UzIwLmdsVmVydGV4QXR0cmliUG9pbnRlcihsb2NhdGlvbiwgZGltZW5zaW9uLCBHTEVTMjAuR0xf
RkxPQVQsIGZhbHNlLCAwLCBidWZmZXIpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigi
c2V0VmVydGV4QXR0cmliQXJyYXkiKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0VW5pZm9ybUxv
Y2F0aW9uKFN0cmluZyBsYWJlbCkgewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVsZWFzZWQi
KTsKLSAgICB9Ci0gICAgaW50IGxvY2F0aW9uID0gR0xFUzIwLmdsR2V0VW5pZm9ybUxvY2F0aW9u
KHByb2dyYW0sIGxhYmVsKTsKLSAgICBpZiAobG9jYXRpb24gPCAwKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSB1bmlmb3JtICciICsgbGFiZWwg
KyAiJyBpbiBwcm9ncmFtIik7Ci0gICAgfQotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHVzZVByb2dyYW0oKSB7Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxl
YXNlZCIpOwotICAgIH0KLSAgICBHTEVTMjAuZ2xVc2VQcm9ncmFtKHByb2dyYW0pOwotICAgIEds
VXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xVc2VQcm9ncmFtIik7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCByZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJEZWxldGluZyBzaGFkZXIuIik7
Ci0gICAgLy8gRGVsZXRlIHByb2dyYW0sIGF1dG9tYXRpY2FsbHkgZGV0YWNoaW5nIGFueSBzaGFk
ZXJzIGZyb20gaXQuCi0gICAgaWYgKHByb2dyYW0gIT0gLTEpIHsKLSAgICAgIEdMRVMyMC5nbERl
bGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICBwcm9ncmFtID0gLTE7Ci0gICAgfQotICB9Ci19
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsVGV4dHVyZUZyYW1lQnVmZmVyLmphdmEKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFRleHR1cmVGcmFtZUJ1ZmZlci5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsVGV4dHVyZUZyYW1lQnVmZmVyLmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
NSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotCi0v
KioKLSAqIEhlbHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgT3BlbkdMIGZyYW1lYnVmZmVyIHdpdGgg
b25seSBjb2xvciBhdHRhY2htZW50IGFuZCBubyBkZXB0aCBvciBzdGVuY2lsCi0gKiBidWZmZXIu
IEludGVuZGVkIGZvciBzaW1wbGUgdGFza3Mgc3VjaCBhcyB0ZXh0dXJlIGNvcHksIHRleHR1cmUg
ZG93bnNjYWxpbmcsIGFuZCB0ZXh0dXJlIGNvbG9yCi0gKiBjb252ZXJzaW9uLgotICovCi0vLyBU
T0RPKG1hZ2plZCk6IEFkZCB1bml0dGVzdHMgZm9yIHRoaXMgY2xhc3MuCi1wdWJsaWMgY2xhc3Mg
R2xUZXh0dXJlRnJhbWVCdWZmZXIgewotICBwcml2YXRlIGZpbmFsIGludCBmcmFtZUJ1ZmZlcklk
OwotICBwcml2YXRlIGZpbmFsIGludCB0ZXh0dXJlSWQ7Ci0gIHByaXZhdGUgZmluYWwgaW50IHBp
eGVsRm9ybWF0OwotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0Owot
Ci0gIC8qKgotICAgKiBHZW5lcmF0ZSB0ZXh0dXJlIGFuZCBmcmFtZWJ1ZmZlciByZXNvdXJjZXMu
IEFuIEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3VycmVudCB0aHJlYWQKLSAgICog
d2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29tcGxl
dGUgdW50aWwgc2V0U2l6ZSgpIGlzIGNhbGxlZC4KLSAgICovCi0gIHB1YmxpYyBHbFRleHR1cmVG
cmFtZUJ1ZmZlcihpbnQgcGl4ZWxGb3JtYXQpIHsKLSAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0KSB7
Ci0gICAgICBjYXNlIEdMRVMyMC5HTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMRVMyMC5HTF9S
R0I6Ci0gICAgICBjYXNlIEdMRVMyMC5HTF9SR0JBOgotICAgICAgICB0aGlzLnBpeGVsRm9ybWF0
ID0gcGl4ZWxGb3JtYXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
dGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBwaXhlbCBmb3JtYXQ6
ICIgKyBwaXhlbEZvcm1hdCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZUlkID0gR2xVdGlsLmdlbmVy
YXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgdGhpcy53aWR0aCA9IDA7Ci0g
ICAgdGhpcy5oZWlnaHQgPSAwOwotCi0gICAgLy8gQ3JlYXRlIGZyYW1lYnVmZmVyIG9iamVjdCBh
bmQgYmluZCBpdC4KLSAgICBmaW5hbCBpbnQgZnJhbWVCdWZmZXJzW10gPSBuZXcgaW50WzFdOwot
ICAgIEdMRVMyMC5nbEdlbkZyYW1lYnVmZmVycygxLCBmcmFtZUJ1ZmZlcnMsIDApOwotICAgIGZy
YW1lQnVmZmVySWQgPSBmcmFtZUJ1ZmZlcnNbMF07Ci0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVm
ZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgZnJhbWVCdWZmZXJJZCk7Ci0gICAgR2xVdGlsLmNo
ZWNrTm9HTEVTMkVycm9yKCJHZW5lcmF0ZSBmcmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gQXR0YWNo
IHRoZSB0ZXh0dXJlIHRvIHRoZSBmcmFtZWJ1ZmZlciBhcyBjb2xvciBhdHRhY2htZW50LgotICAg
IEdMRVMyMC5nbEZyYW1lYnVmZmVyVGV4dHVyZTJEKAotICAgICAgICBHTEVTMjAuR0xfRlJBTUVC
VUZGRVIsIEdMRVMyMC5HTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xFUzIwLkdMX1RFWFRVUkVfMkQs
IHRleHR1cmVJZCwgMCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJBdHRhY2ggdGV4
dHVyZSB0byBmcmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gUmVzdG9yZSBub3JtYWwgZnJhbWVidWZm
ZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwg
MCk7Ci0gIH0KLQotICAvKioKLSAgICogKFJlKWFsbG9jYXRlIHRleHR1cmUuIFdpbGwgZG8gbm90
aGluZyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXF1YWxzIHRoZSBjdXJyZW50IHNpemUuIEFuCi0g
ICAqIEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3VycmVudCB0aHJlYWQgd2hlbiBj
YWxsaW5nIHRoaXMgZnVuY3Rpb24uIE11c3QgYmUgY2FsbGVkIGF0Ci0gICAqIGxlYXN0IG9uY2Ug
YmVmb3JlIHVzaW5nIHRoZSBmcmFtZWJ1ZmZlci4gTWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1l
cyB0byBjaGFuZ2Ugc2l6ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNpemUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KSB7Ci0gICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApIHsKLSAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc2l6ZTogIiAr
IHdpZHRoICsgIngiICsgaGVpZ2h0KTsKLSAgICB9Ci0gICAgaWYgKHdpZHRoID09IHRoaXMud2lk
dGggJiYgaGVpZ2h0ID09IHRoaXMuaGVpZ2h0KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLQotICAgIC8v
IEJpbmQgb3VyIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVT
MjAuR0xfRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVySWQpOwotICAgIEdsVXRpbC5jaGVja05vR0xF
UzJFcnJvcigiZ2xCaW5kRnJhbWVidWZmZXIiKTsKLQotICAgIC8vIEFsbG9jYXRlIHRleHR1cmUu
Ci0gICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAgIEdM
RVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAg
IEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDAsIHBpeGVsRm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCAwLCBwaXhlbEZvcm1hdCwKLSAgICAgICAgR0xFUzIwLkdMX1VOU0lH
TkVEX0JZVEUsIG51bGwpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgZnJhbWVidWZmZXIgaXMg
aW4gYSBnb29kIHN0YXRlLgotICAgIGZpbmFsIGludCBzdGF0dXMgPSBHTEVTMjAuZ2xDaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKEdMRVMyMC5HTF9GUkFNRUJVRkZFUik7Ci0gICAgaWYgKHN0YXR1cyAh
PSBHTEVTMjAuR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgIHRocm93IG5ldyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb24oIkZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZSwgc3RhdHVzOiAiICsg
c3RhdHVzKTsKLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAg
ICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAg
ICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCk7Ci0gIH0KLQot
ICBwdWJsaWMgaW50IGdldFdpZHRoKCkgewotICAgIHJldHVybiB3aWR0aDsKLSAgfQotCi0gIHB1
YmxpYyBpbnQgZ2V0SGVpZ2h0KCkgewotICAgIHJldHVybiBoZWlnaHQ7Ci0gIH0KLQotICBwdWJs
aWMgaW50IGdldEZyYW1lQnVmZmVySWQoKSB7Ci0gICAgcmV0dXJuIGZyYW1lQnVmZmVySWQ7Ci0g
IH0KLQotICBwdWJsaWMgaW50IGdldFRleHR1cmVJZCgpIHsKLSAgICByZXR1cm4gdGV4dHVyZUlk
OwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgdGV4dHVyZSBhbmQgZnJhbWVidWZmZXIuIEFu
IEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3VycmVudCB0aHJlYWQgd2hlbiBjYWxs
aW5nCi0gICAqIHRoaXMgZnVuY3Rpb24uIFRoaXMgb2JqZWN0IHNob3VsZCBub3QgYmUgdXNlZCBh
ZnRlciB0aGlzIGNhbGwuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIEdM
RVMyMC5nbERlbGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7dGV4dHVyZUlkfSwgMCk7Ci0gICAg
R0xFUzIwLmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsIG5ldyBpbnRbXSB7ZnJhbWVCdWZmZXJJZH0s
IDApOwotICAgIHdpZHRoID0gMDsKLSAgICBoZWlnaHQgPSAwOwotICB9Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL0dsVXRpbC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
R2xVdGlsLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xVdGls
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci0K
LWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRlcjsK
LWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLQotLyoqCi0gKiBTb21lIE9wZW5HTCBzdGF0
aWMgdXRpbGl0eSBmdW5jdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBHbFV0aWwgewotICBwcml2
YXRlIEdsVXRpbCgpIHt9Ci0KLSAgLy8gQXNzZXJ0IHRoYXQgbm8gT3BlbkdMIEVTIDIuMCBlcnJv
ciBoYXMgYmVlbiByYWlzZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja05vR0xFUzJFcnJv
cihTdHJpbmcgbXNnKSB7Ci0gICAgaW50IGVycm9yID0gR0xFUzIwLmdsR2V0RXJyb3IoKTsKLSAg
ICBpZiAoZXJyb3IgIT0gR0xFUzIwLkdMX05PX0VSUk9SKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbihtc2cgKyAiOiBHTEVTMjAgZXJyb3I6ICIgKyBlcnJvcik7Ci0gICAgfQot
ICB9Ci0KLSAgcHVibGljIHN0YXRpYyBGbG9hdEJ1ZmZlciBjcmVhdGVGbG9hdEJ1ZmZlcihmbG9h
dFtdIGNvb3JkcykgewotICAgIC8vIEFsbG9jYXRlIGEgZGlyZWN0IEJ5dGVCdWZmZXIsIHVzaW5n
IDQgYnl0ZXMgcGVyIGZsb2F0LCBhbmQgY29weSBjb29yZHMgaW50byBpdC4KLSAgICBCeXRlQnVm
ZmVyIGJiID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChjb29yZHMubGVuZ3RoICogNCk7Ci0g
ICAgYmIub3JkZXIoQnl0ZU9yZGVyLm5hdGl2ZU9yZGVyKCkpOwotICAgIEZsb2F0QnVmZmVyIGZi
ID0gYmIuYXNGbG9hdEJ1ZmZlcigpOwotICAgIGZiLnB1dChjb29yZHMpOwotICAgIGZiLnBvc2l0
aW9uKDApOwotICAgIHJldHVybiBmYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZW5lcmF0ZSB0ZXh0
dXJlIHdpdGggc3RhbmRhcmQgcGFyYW1ldGVycy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgaW50
IGdlbmVyYXRlVGV4dHVyZShpbnQgdGFyZ2V0KSB7Ci0gICAgZmluYWwgaW50IHRleHR1cmVBcnJh
eVtdID0gbmV3IGludFsxXTsKLSAgICBHTEVTMjAuZ2xHZW5UZXh0dXJlcygxLCB0ZXh0dXJlQXJy
YXksIDApOwotICAgIGZpbmFsIGludCB0ZXh0dXJlSWQgPSB0ZXh0dXJlQXJyYXlbMF07Ci0gICAg
R0xFUzIwLmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlSWQpOwotICAgIEdMRVMyMC5nbFRl
eFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAuR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTEVTMjAu
R0xfTElORUFSKTsKLSAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xFUzIwLkdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xFUzIwLkdMX0xJTkVBUik7Ci0gICAgR0xFUzIwLmdsVGV4
UGFyYW1ldGVyZih0YXJnZXQsIEdMRVMyMC5HTF9URVhUVVJFX1dSQVBfUywgR0xFUzIwLkdMX0NM
QU1QX1RPX0VER0UpOwotICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAu
R0xfVEVYVFVSRV9XUkFQX1QsIEdMRVMyMC5HTF9DTEFNUF9UT19FREdFKTsKLSAgICBjaGVja05v
R0xFUzJFcnJvcigiZ2VuZXJhdGVUZXh0dXJlIik7Ci0gICAgcmV0dXJuIHRleHR1cmVJZDsKLSAg
fQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ljZUNhbmRpZGF0ZS5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ljZUNhbmRpZGF0ZS5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwot
Ci0vKioKLSAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIElDRSBDYW5kaWRhdGUsIG1pcnJv
cmluZwotICoge0Bjb2RlIEljZUNhbmRpZGF0ZUludGVyZmFjZX0gaW4gdGhlIEMrKyBBUEkuCi0g
Ki8KLXB1YmxpYyBjbGFzcyBJY2VDYW5kaWRhdGUgewotICBwdWJsaWMgZmluYWwgU3RyaW5nIHNk
cE1pZDsKLSAgcHVibGljIGZpbmFsIGludCBzZHBNTGluZUluZGV4OwotICBwdWJsaWMgZmluYWwg
U3RyaW5nIHNkcDsKLQotICBwdWJsaWMgSWNlQ2FuZGlkYXRlKFN0cmluZyBzZHBNaWQsIGludCBz
ZHBNTGluZUluZGV4LCBTdHJpbmcgc2RwKSB7Ci0gICAgdGhpcy5zZHBNaWQgPSBzZHBNaWQ7Ci0g
ICAgdGhpcy5zZHBNTGluZUluZGV4ID0gc2RwTUxpbmVJbmRleDsKLSAgICB0aGlzLnNkcCA9IHNk
cDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIHNkcE1p
ZCArICI6IiArIHNkcE1MaW5lSW5kZXggKyAiOiIgKyBzZHA7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDcxMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWM7Ci1pbXBvcnQg
YW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlh
Q29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFD
b2RlY0xpc3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKLWltcG9ydCBhbmRy
b2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5k
cm9pZC52aWV3LlN1cmZhY2U7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0
IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2
YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51
dGlsLlF1ZXVlOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1
cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVu
aXQ7Ci0KLS8vIEphdmEtc2lkZSBvZiBwZWVyY29ubmVjdGlvbl9qbmkuY2M6TWVkaWFDb2RlY1Zp
ZGVvRGVjb2Rlci4KLS8vIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9m
IHRoZSBKYXZhIFBlZXJDb25uZWN0aW9uIEFQSS4KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNh
dGlvbiIpCi1wdWJsaWMgY2xhc3MgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciB7Ci0gIC8vIFRoaXMg
Y2xhc3MgaXMgY29uc3RydWN0ZWQsIG9wZXJhdGVkLCBhbmQgZGVzdHJveWVkIGJ5IGl0cyBDKysg
aW5jYXJuYXRpb24sCi0gIC8vIHNvIHRoZSBjbGFzcyBhbmQgaXRzIG1ldGhvZHMgaGF2ZSBub24t
cHVibGljIHZpc2liaWxpdHkuICBUaGUgQVBJIHRoaXMKLSAgLy8gY2xhc3MgZXhwb3NlcyBhaW1z
IHRvIG1pbWljIHRoZSB3ZWJydGM6OlZpZGVvRGVjb2RlciBBUEkgYXMgY2xvc2VseSBhcwotICAv
LyBwb3NzaWJseSB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHRyYW5zbGF0aW9uIHdvcmsgbmVj
ZXNzYXJ5LgotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFDb2Rl
Y1ZpZGVvRGVjb2RlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTUFYX0RFQ09ERV9U
SU1FX01TID0gMjAwOwotCi0gIC8vIFRyYWNrcyB3ZWJydGM6OlZpZGVvQ29kZWNUeXBlLgotICBw
dWJsaWMgZW51bSBWaWRlb0NvZGVjVHlwZSB7IFZJREVPX0NPREVDX1ZQOCwgVklERU9fQ09ERUNf
VlA5LCBWSURFT19DT0RFQ19IMjY0IH0KLQotICAvLyBUaW1lb3V0IGZvciBpbnB1dCBidWZmZXIg
ZGVxdWV1ZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFUVVFVUVfSU5QVVRfVElNRU9V
VCA9IDUwMDAwMDsKLSAgLy8gVGltZW91dCBmb3IgY29kZWMgcmVsZWFzaW5nLgotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VUX01TID0gNTAwMDsK
LSAgLy8gTWF4IG51bWJlciBvZiBvdXRwdXQgYnVmZmVycyBxdWV1ZWQgYmVmb3JlIHN0YXJ0aW5n
IHRvIGRyb3AgZGVjb2RlZCBmcmFtZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhf
UVVFVUVEX09VVFBVVEJVRkZFUlMgPSAzOwotICAvLyBBY3RpdmUgcnVubmluZyBkZWNvZGVyIGlu
c3RhbmNlLiBTZXQgaW4gaW5pdERlY29kZSgpIChjYWxsZWQgZnJvbSBuYXRpdmUgY29kZSkKLSAg
Ly8gYW5kIHJlc2V0IHRvIG51bGwgaW4gcmVsZWFzZSgpIGNhbGwuCi0gIHByaXZhdGUgc3RhdGlj
IE1lZGlhQ29kZWNWaWRlb0RlY29kZXIgcnVubmluZ0luc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0
ZSBzdGF0aWMgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFj
ayA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIGludCBjb2RlY0Vycm9ycyA9IDA7Ci0gIC8vIExp
c3Qgb2YgZGlzYWJsZWQgY29kZWMgdHlwZXMgLSBjYW4gYmUgc2V0IGZyb20gYXBwbGljYXRpb24u
Ci0gIHByaXZhdGUgc3RhdGljIFNldDxTdHJpbmc+IGh3RGVjb2RlckRpc2FibGVkVHlwZXMgPSBu
ZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0KLSAgcHJpdmF0ZSBUaHJlYWQgbWVkaWFDb2RlY1RocmVh
ZDsKLSAgcHJpdmF0ZSBNZWRpYUNvZGVjIG1lZGlhQ29kZWM7Ci0gIHByaXZhdGUgQnl0ZUJ1ZmZl
cltdIGlucHV0QnVmZmVyczsKLSAgcHJpdmF0ZSBCeXRlQnVmZmVyW10gb3V0cHV0QnVmZmVyczsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOF9NSU1FX1RZUEUgPSAidmlkZW8veC12
bmQub24yLnZwOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWUDlfTUlNRV9UWVBF
ID0gInZpZGVvL3gtdm5kLm9uMi52cDkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
SDI2NF9NSU1FX1RZUEUgPSAidmlkZW8vYXZjIjsKLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcg
VlA4IGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdXBwb3J0ZWRW
cDhId0NvZGVjUHJlZml4ZXMgPSB7Ci0gICAgICAiT01YLnFjb20uIiwgIk9NWC5OdmlkaWEuIiwg
Ik9NWC5FeHlub3MuIiwgIk9NWC5JbnRlbC4ifTsKLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcg
VlA5IGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdXBwb3J0ZWRW
cDlId0NvZGVjUHJlZml4ZXMgPSB7Ik9NWC5xY29tLiIsICJPTVguRXh5bm9zLiJ9OwotICAvLyBM
aXN0IG9mIHN1cHBvcnRlZCBIVyBILjI2NCBkZWNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nW10gc3VwcG9ydGVkSDI2NEh3Q29kZWNQcmVmaXhlcyA9IHsKLSAgICAgICJPTVgu
cWNvbS4iLCAiT01YLkludGVsLiIsICJPTVguRXh5bm9zLiJ9OwotCi0gIC8vIE5WMTIgY29sb3Ig
Zm9ybWF0IHN1cHBvcnRlZCBieSBRQ09NIGNvZGVjLCBidXQgbm90IGRlY2xhcmVkIGluIE1lZGlh
Q29kZWMgLQotICAvLyBzZWUgL2hhcmR3YXJlL3Fjb20vbWVkaWEvbW0tY29yZS9pbmMvT01YX1FD
T01FeHRucy5oCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlW
VTQyMFBhY2tlZFNlbWlQbGFuYXIzMm00a2EgPSAweDdGQTMwQzAxOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMTZtNGth
ID0gMHg3RkEzMEMwMjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9S
TUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjY0eDMyVGlsZTJtOGthID0gMHg3RkEzMEMwMzsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9STUFUWVVWNDIwUGFja2VkU2Vt
aVBsYW5hcjMybSA9IDB4N0ZBMzBDMDQ7Ci0gIC8vIEFsbG93YWJsZSBjb2xvciBmb3JtYXRzIHN1
cHBvcnRlZCBieSBjb2RlYyAtIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIExpc3Q8SW50ZWdlcj4gc3VwcG9ydGVkQ29sb3JMaXN0ID0gQXJyYXlzLmFzTGlz
dCgKLSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwgQ29k
ZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAgIENvZGVj
Q2FwYWJpbGl0aWVzLkNPTE9SX1FDT01fRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAgIENP
TE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjMybTRrYSwgQ09MT1JfUUNPTV9G
T1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMTZtNGthLAotICAgICAgQ09MT1JfUUNPTV9GT1JN
QVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyNjR4MzJUaWxlMm04a2EsCi0gICAgICBDT0xPUl9RQ09N
X0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0pOwotCi0gIHByaXZhdGUgaW50IGNvbG9y
Rm9ybWF0OwotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0OwotICBw
cml2YXRlIGludCBzdHJpZGU7Ci0gIHByaXZhdGUgaW50IHNsaWNlSGVpZ2h0OwotICBwcml2YXRl
IGJvb2xlYW4gaGFzRGVjb2RlZEZpcnN0RnJhbWU7Ci0gIHByaXZhdGUgZmluYWwgUXVldWU8VGlt
ZVN0YW1wcz4gZGVjb2RlU3RhcnRUaW1lTXMgPSBuZXcgTGlua2VkTGlzdDxUaW1lU3RhbXBzPigp
OwotICBwcml2YXRlIGJvb2xlYW4gdXNlU3VyZmFjZTsKLQotICAvLyBUaGUgYmVsb3cgdmFyaWFi
bGVzIGFyZSBvbmx5IHVzZWQgd2hlbiBkZWNvZGluZyB0byBhIFN1cmZhY2UuCi0gIHByaXZhdGUg
VGV4dHVyZUxpc3RlbmVyIHRleHR1cmVMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBpbnQgZHJvcHBlZEZy
YW1lczsKLSAgcHJpdmF0ZSBTdXJmYWNlIHN1cmZhY2UgPSBudWxsOwotICBwcml2YXRlIGZpbmFs
IFF1ZXVlPERlY29kZWRPdXRwdXRCdWZmZXI+IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMg
PQotICAgICAgbmV3IExpbmtlZExpc3Q8RGVjb2RlZE91dHB1dEJ1ZmZlcj4oKTsKLQotICAvLyBN
ZWRpYUNvZGVjIGVycm9yIGhhbmRsZXIgLSBpbnZva2VkIHdoZW4gY3JpdGljYWwgZXJyb3IgaGFw
cGVucyB3aGljaCBtYXkgcHJldmVudAotICAvLyBmdXJ0aGVyIHVzZSBvZiBtZWRpYSBjb2RlYyBB
UEkuIE5vdyBpdCBtZWFucyB0aGF0IG9uZSBvZiBtZWRpYSBjb2RlYyBpbnN0YW5jZXMKLSAgLy8g
aXMgaGFuZ2luZyBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIGluIHRoZSBuZXh0IGNhbGwuCi0g
IHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE1lZGlhQ29kZWNWaWRlb0RlY29kZXJFcnJvckNhbGxi
YWNrIHsKLSAgICB2b2lkIG9uTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckNyaXRpY2FsRXJyb3IoaW50
IGNvZGVjRXJyb3JzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFcnJvckNhbGxi
YWNrKE1lZGlhQ29kZWNWaWRlb0RlY29kZXJFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spIHsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiU2V0IGVycm9yIGNhbGxiYWNrIik7Ci0gICAgTWVkaWFDb2Rl
Y1ZpZGVvRGVjb2Rlci5lcnJvckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjazsKLSAgfQotCi0gIC8v
IEZ1bmN0aW9ucyB0byBkaXNhYmxlIEhXIGRlY29kaW5nIC0gY2FuIGJlIGNhbGxlZCBmcm9tIGFw
cGxpY2F0aW9ucyBmb3IgcGxhdGZvcm1zCi0gIC8vIHdoaWNoIGhhdmUga25vd24gSFcgZGVjb2Rp
bmcgcHJvYmxlbXMuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlVnA4SHdDb2RlYygpIHsK
LSAgICBMb2dnaW5nLncoVEFHLCAiVlA4IGRlY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0
aW9uLiIpOwotICAgIGh3RGVjb2RlckRpc2FibGVkVHlwZXMuYWRkKFZQOF9NSU1FX1RZUEUpOwot
ICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVWcDlId0NvZGVjKCkgewotICAgIExv
Z2dpbmcudyhUQUcsICJWUDkgZGVjb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7
Ci0gICAgaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoVlA5X01JTUVfVFlQRSk7Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZUgyNjRId0NvZGVjKCkgewotICAgIExvZ2dpbmcu
dyhUQUcsICJILjI2NCBkZWNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAg
ICBod0RlY29kZXJEaXNhYmxlZFR5cGVzLmFkZChIMjY0X01JTUVfVFlQRSk7Ci0gIH0KLQotICAv
LyBGdW5jdGlvbnMgdG8gcXVlcnkgaWYgSFcgZGVjb2RpbmcgaXMgc3VwcG9ydGVkLgotICBwdWJs
aWMgc3RhdGljIGJvb2xlYW4gaXNWcDhId1N1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gIWh3RGVj
b2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA4X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZp
bmREZWNvZGVyKFZQOF9NSU1FX1RZUEUsIHN1cHBvcnRlZFZwOEh3Q29kZWNQcmVmaXhlcykgIT0g
bnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDlId1N1cHBvcnRlZCgp
IHsKLSAgICByZXR1cm4gIWh3RGVjb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA5X01JTUVf
VFlQRSkKLSAgICAgICAgJiYgKGZpbmREZWNvZGVyKFZQOV9NSU1FX1RZUEUsIHN1cHBvcnRlZFZw
OUh3Q29kZWNQcmVmaXhlcykgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xl
YW4gaXNIMjY0SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0RlY29kZXJEaXNhYmxlZFR5
cGVzLmNvbnRhaW5zKEgyNjRfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZERlY29kZXIoSDI2
NF9NSU1FX1RZUEUsIHN1cHBvcnRlZEgyNjRId0NvZGVjUHJlZml4ZXMpICE9IG51bGwpOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZSgpIHsKLSAgICBpZiAocnVu
bmluZ0luc3RhbmNlICE9IG51bGwgJiYgcnVubmluZ0luc3RhbmNlLm1lZGlhQ29kZWNUaHJlYWQg
IT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFjZUVsZW1lbnRbXSBtZWRpYUNvZGVjU3RhY2tUcmFj
ZXMgPSBydW5uaW5nSW5zdGFuY2UubWVkaWFDb2RlY1RocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0g
ICAgICBpZiAobWVkaWFDb2RlY1N0YWNrVHJhY2VzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgTG9n
Z2luZy5kKFRBRywgIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIgc3RhY2tzIHRyYWNlOiIpOwotICAg
ICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBtZWRpYUNvZGVjU3RhY2tU
cmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRvU3RyaW5nKCkp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBm
b3IgZmluZERlY29kZXIoKSBiZWxvdy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVjb2RlclBy
b3BlcnRpZXMgewotICAgIHB1YmxpYyBEZWNvZGVyUHJvcGVydGllcyhTdHJpbmcgY29kZWNOYW1l
LCBpbnQgY29sb3JGb3JtYXQpIHsKLSAgICAgIHRoaXMuY29kZWNOYW1lID0gY29kZWNOYW1lOwot
ICAgICAgdGhpcy5jb2xvckZvcm1hdCA9IGNvbG9yRm9ybWF0OwotICAgIH0KLSAgICBwdWJsaWMg
ZmluYWwgU3RyaW5nIGNvZGVjTmFtZTsgLy8gT3Blbk1heCBjb21wb25lbnQgbmFtZSBmb3IgVlA4
IGNvZGVjLgotICAgIHB1YmxpYyBmaW5hbCBpbnQgY29sb3JGb3JtYXQ7IC8vIENvbG9yIGZvcm1h
dCBzdXBwb3J0ZWQgYnkgY29kZWMuCi0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBEZWNvZGVyUHJv
cGVydGllcyBmaW5kRGVjb2RlcihTdHJpbmcgbWltZSwgU3RyaW5nW10gc3VwcG9ydGVkQ29kZWNQ
cmVmaXhlcykgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9O
X0NPREVTLktJVEtBVCkgewotICAgICAgcmV0dXJuIG51bGw7IC8vIE1lZGlhQ29kZWMuc2V0UGFy
YW1ldGVycyBpcyBtaXNzaW5nLgotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiVHJ5aW5nIHRv
IGZpbmQgSFcgZGVjb2RlciBmb3IgbWltZSAiICsgbWltZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0NvdW50KCk7ICsraSkgewotICAgICAgTWVkaWFD
b2RlY0luZm8gaW5mbyA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBpbmZvID0gTWVkaWFD
b2RlY0xpc3QuZ2V0Q29kZWNJbmZvQXQoaSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZl
IGRlY29kZXIgY29kZWMgaW5mbyIsIGUpOwotICAgICAgfQotICAgICAgaWYgKGluZm8gPT0gbnVs
bCB8fCBpbmZvLmlzRW5jb2RlcigpKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAg
ICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgZm9yIChTdHJpbmcgbWltZVR5cGUgOiBpbmZv
LmdldFN1cHBvcnRlZFR5cGVzKCkpIHsKLSAgICAgICAgaWYgKG1pbWVUeXBlLmVxdWFscyhtaW1l
KSkgewotICAgICAgICAgIG5hbWUgPSBpbmZvLmdldE5hbWUoKTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewotICAgICAgICBj
b250aW51ZTsgLy8gTm8gSFcgc3VwcG9ydCBpbiB0aGlzIGNvZGVjOyB0cnkgdGhlIG5leHQgb25l
LgotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIkZvdW5kIGNhbmRpZGF0ZSBkZWNvZGVy
ICIgKyBuYW1lKTsKLQotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBzdXBwb3J0ZWQgZGVjb2Rl
ci4KLSAgICAgIGJvb2xlYW4gc3VwcG9ydGVkQ29kZWMgPSBmYWxzZTsKLSAgICAgIGZvciAoU3Ry
aW5nIGNvZGVjUHJlZml4IDogc3VwcG9ydGVkQ29kZWNQcmVmaXhlcykgewotICAgICAgICBpZiAo
bmFtZS5zdGFydHNXaXRoKGNvZGVjUHJlZml4KSkgewotICAgICAgICAgIHN1cHBvcnRlZENvZGVj
ID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYg
KCFzdXBwb3J0ZWRDb2RlYykgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAg
Ly8gQ2hlY2sgaWYgY29kZWMgc3VwcG9ydHMgZWl0aGVyIHl1djQyMCBvciBudjEyLgotICAgICAg
Q29kZWNDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2Fw
YWJpbGl0aWVzID0gaW5mby5nZXRDYXBhYmlsaXRpZXNGb3JUeXBlKG1pbWUpOwotICAgICAgfSBj
YXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRB
RywgIkNhbm5vdCByZXRyaWV2ZSBkZWNvZGVyIGNhcGFiaWxpdGllcyIsIGUpOwotICAgICAgICBj
b250aW51ZTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGNvbG9yRm9ybWF0IDogY2FwYWJpbGl0
aWVzLmNvbG9yRm9ybWF0cykgewotICAgICAgICBMb2dnaW5nLnYoVEFHLCAiICAgQ29sb3I6IDB4
IiArIEludGVnZXIudG9IZXhTdHJpbmcoY29sb3JGb3JtYXQpKTsKLSAgICAgIH0KLSAgICAgIGZv
ciAoaW50IHN1cHBvcnRlZENvbG9yRm9ybWF0IDogc3VwcG9ydGVkQ29sb3JMaXN0KSB7Ci0gICAg
ICAgIGZvciAoaW50IGNvZGVjQ29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3JtYXRz
KSB7Ci0gICAgICAgICAgaWYgKGNvZGVjQ29sb3JGb3JtYXQgPT0gc3VwcG9ydGVkQ29sb3JGb3Jt
YXQpIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIHN1cHBvcnRlZCBIVyBkZWNvZGVyLgotICAgICAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIkZvdW5kIHRhcmdldCBkZWNvZGVyICIgKyBuYW1lICsgIi4g
Q29sb3I6IDB4IgotICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcoY29k
ZWNDb2xvckZvcm1hdCkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNvZGVyUHJvcGVydGll
cyhuYW1lLCBjb2RlY0NvbG9yRm9ybWF0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIk5vIEhXIGRlY29kZXIgZm91bmQgZm9yIG1p
bWUgIiArIG1pbWUpOwotICAgIHJldHVybiBudWxsOyAvLyBObyBIVyBkZWNvZGVyLgotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCkgdGhyb3dzIElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbiB7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQuZ2V0SWQoKSAhPSBUaHJl
YWQuY3VycmVudFRocmVhZCgpLmdldElkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3Rh
dGVFeGNlcHRpb24oIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIgcHJldmlvdXNseSBvcGVyYXRlZCBv
biAiCi0gICAgICAgICAgKyBtZWRpYUNvZGVjVGhyZWFkICsgIiBidXQgaXMgbm93IGNhbGxlZCBv
biAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUGFzcyBu
dWxsIGluIHxzdXJmYWNlVGV4dHVyZUhlbHBlcnwgdG8gY29uZmlndXJlIHRoZSBjb2RlYyBmb3Ig
Qnl0ZUJ1ZmZlciBvdXRwdXQuCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0RGVjb2RlKAotICAgICAg
VmlkZW9Db2RlY1R5cGUgdHlwZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdXJmYWNlVGV4dHVy
ZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcikgewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFk
ICE9IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbml0RGVjb2Rl
OiBGb3Jnb3QgdG8gcmVsZWFzZSgpPyIpOwotICAgIH0KLQotICAgIFN0cmluZyBtaW1lID0gbnVs
bDsKLSAgICB1c2VTdXJmYWNlID0gKHN1cmZhY2VUZXh0dXJlSGVscGVyICE9IG51bGwpOwotICAg
IFN0cmluZ1tdIHN1cHBvcnRlZENvZGVjUHJlZml4ZXMgPSBudWxsOwotICAgIGlmICh0eXBlID09
IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCkgewotICAgICAgbWltZSA9IFZQOF9NSU1F
X1RZUEU7Ci0gICAgICBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzID0gc3VwcG9ydGVkVnA4SHdDb2Rl
Y1ByZWZpeGVzOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19D
T0RFQ19WUDkpIHsKLSAgICAgIG1pbWUgPSBWUDlfTUlNRV9UWVBFOwotICAgICAgc3VwcG9ydGVk
Q29kZWNQcmVmaXhlcyA9IHN1cHBvcnRlZFZwOUh3Q29kZWNQcmVmaXhlczsKLSAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfSDI2NCkgewotICAgICAgbWlt
ZSA9IEgyNjRfTUlNRV9UWVBFOwotICAgICAgc3VwcG9ydGVkQ29kZWNQcmVmaXhlcyA9IHN1cHBv
cnRlZEgyNjRId0NvZGVjUHJlZml4ZXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCJpbml0RGVjb2RlOiBOb24tc3VwcG9ydGVkIGNvZGVjICIgKyB0eXBl
KTsKLSAgICB9Ci0gICAgRGVjb2RlclByb3BlcnRpZXMgcHJvcGVydGllcyA9IGZpbmREZWNvZGVy
KG1pbWUsIHN1cHBvcnRlZENvZGVjUHJlZml4ZXMpOwotICAgIGlmIChwcm9wZXJ0aWVzID09IG51
bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW5ub3QgZmluZCBIVyBk
ZWNvZGVyIGZvciAiICsgdHlwZSk7Ci0gICAgfQotCi0gICAgTG9nZ2luZy5kKFRBRywgIkphdmEg
aW5pdERlY29kZTogIiArIHR5cGUgKyAiIDogIiArIHdpZHRoICsgIiB4ICIgKyBoZWlnaHQgKyAi
LiBDb2xvcjogMHgiCi0gICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcocHJvcGVydGll
cy5jb2xvckZvcm1hdCkgKyAiLiBVc2UgU3VyZmFjZTogIiArIHVzZVN1cmZhY2UpOwotCi0gICAg
cnVubmluZ0luc3RhbmNlID0gdGhpczsgLy8gRGVjb2RlciBpcyBub3cgcnVubmluZyBhbmQgY2Fu
IGJlIHF1ZXJpZWQgZm9yIHN0YWNrIHRyYWNlcy4KLSAgICBtZWRpYUNvZGVjVGhyZWFkID0gVGhy
ZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgdGhpcy53aWR0aCA9IHdpZHRo
OwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICBzdHJpZGUgPSB3aWR0aDsKLSAg
ICAgIHNsaWNlSGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgICBpZiAodXNlU3VyZmFjZSkgewotICAg
ICAgICB0ZXh0dXJlTGlzdGVuZXIgPSBuZXcgVGV4dHVyZUxpc3RlbmVyKHN1cmZhY2VUZXh0dXJl
SGVscGVyKTsKLSAgICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVs
cGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgICAgfQotCi0gICAgICBNZWRpYUZvcm1hdCBm
b3JtYXQgPSBNZWRpYUZvcm1hdC5jcmVhdGVWaWRlb0Zvcm1hdChtaW1lLCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgIGlmICghdXNlU3VyZmFjZSkgewotICAgICAgICBmb3JtYXQuc2V0SW50ZWdlcihN
ZWRpYUZvcm1hdC5LRVlfQ09MT1JfRk9STUFULCBwcm9wZXJ0aWVzLmNvbG9yRm9ybWF0KTsKLSAg
ICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICIgIEZvcm1hdDogIiArIGZvcm1hdCk7Ci0gICAg
ICBtZWRpYUNvZGVjID0gTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5jcmVhdGVCeUNvZGVjTmFtZShw
cm9wZXJ0aWVzLmNvZGVjTmFtZSk7Ci0gICAgICBpZiAobWVkaWFDb2RlYyA9PSBudWxsKSB7Ci0g
ICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW4gbm90IGNyZWF0ZSBtZWRpYSBkZWNvZGVyIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIG1lZGlhQ29kZWMuY29uZmlndXJl
KGZvcm1hdCwgc3VyZmFjZSwgbnVsbCwgMCk7Ci0gICAgICBtZWRpYUNvZGVjLnN0YXJ0KCk7Ci0K
LSAgICAgIGNvbG9yRm9ybWF0ID0gcHJvcGVydGllcy5jb2xvckZvcm1hdDsKLSAgICAgIG91dHB1
dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldE91dHB1dEJ1ZmZlcnMoKTsKLSAgICAgIGlucHV0QnVm
ZmVycyA9IG1lZGlhQ29kZWMuZ2V0SW5wdXRCdWZmZXJzKCk7Ci0gICAgICBkZWNvZGVTdGFydFRp
bWVNcy5jbGVhcigpOwotICAgICAgaGFzRGVjb2RlZEZpcnN0RnJhbWUgPSBmYWxzZTsKLSAgICAg
IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICAgIGRyb3BwZWRGcmFt
ZXMgPSAwOwotICAgICAgTG9nZ2luZy5kKFRBRywKLSAgICAgICAgICAiSW5wdXQgYnVmZmVyczog
IiArIGlucHV0QnVmZmVycy5sZW5ndGggKyAiLiBPdXRwdXQgYnVmZmVyczogIiArIG91dHB1dEJ1
ZmZlcnMubGVuZ3RoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiaW5pdERlY29kZSBmYWls
ZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXNldHMg
dGhlIGRlY29kZXIgc28gaXQgY2FuIHN0YXJ0IGRlY29kaW5nIGZyYW1lcyB3aXRoIG5ldyByZXNv
bHV0aW9uLgotICAvLyBGbHVzaGVzIE1lZGlhQ29kZWMgYW5kIGNsZWFycyBkZWNvZGVyIG91dHB1
dCBidWZmZXJzLgotICBwcml2YXRlIHZvaWQgcmVzZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7
Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQgPT0gbnVsbCB8fCBtZWRpYUNvZGVjID09IG51bGwp
IHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmVzZXQgY2Fs
bCBmb3Igbm9uLWluaXRpYWxpemVkIGRlY29kZXIuIik7Ci0gICAgfQotICAgIExvZ2dpbmcuZChU
QUcsICJKYXZhIHJlc2V0OiAiICsgd2lkdGggKyAiIHggIiArIGhlaWdodCk7Ci0KLSAgICBtZWRp
YUNvZGVjLmZsdXNoKCk7Ci0KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWln
aHQgPSBoZWlnaHQ7Ci0gICAgZGVjb2RlU3RhcnRUaW1lTXMuY2xlYXIoKTsKLSAgICBkZXF1ZXVl
ZFN1cmZhY2VPdXRwdXRCdWZmZXJzLmNsZWFyKCk7Ci0gICAgaGFzRGVjb2RlZEZpcnN0RnJhbWUg
PSBmYWxzZTsKLSAgICBkcm9wcGVkRnJhbWVzID0gMDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBy
ZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyLiBUb3Rh
bCBudW1iZXIgb2YgZHJvcHBlZCBmcmFtZXM6ICIgKyBkcm9wcGVkRnJhbWVzKTsKLSAgICBjaGVj
a09uTWVkaWFDb2RlY1RocmVhZCgpOwotCi0gICAgLy8gUnVuIE1lZGlhY29kZWMgc3RvcCgpIGFu
ZCByZWxlYXNlKCkgb24gc2VwYXJhdGUgdGhyZWFkIHNpbmNlIHNvbWV0aW1lCi0gICAgLy8gTWVk
aWFjb2RlYy5zdG9wKCkgbWF5IGhhbmcuCi0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggcmVsZWFz
ZURvbmUgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0KLSAgICBSdW5uYWJsZSBydW5NZWRpYUNv
ZGVjUmVsZWFzZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcs
ICJKYXZhIHJlbGVhc2VEZWNvZGVyIG9uIHJlbGVhc2UgdGhyZWFkIik7Ci0gICAgICAgICAgbWVk
aWFDb2RlYy5zdG9wKCk7Ci0gICAgICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlKCk7Ci0gICAgICAg
ICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZURlY29kZXIgb24gcmVsZWFzZSB0aHJlYWQg
ZG9uZSIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dp
bmcuZShUQUcsICJNZWRpYSBkZWNvZGVyIHJlbGVhc2UgZmFpbGVkIiwgZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmVsZWFzZURvbmUuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBu
ZXcgVGhyZWFkKHJ1bk1lZGlhQ29kZWNSZWxlYXNlKS5zdGFydCgpOwotCi0gICAgaWYgKCFUaHJl
YWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShyZWxlYXNlRG9uZSwgTUVESUFfQ09ERUNfUkVM
RUFTRV9USU1FT1VUX01TKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGRlY29kZXIg
cmVsZWFzZSB0aW1lb3V0Iik7Ci0gICAgICBjb2RlY0Vycm9ycysrOwotICAgICAgaWYgKGVycm9y
Q2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW52b2tlIGNvZGVj
IGVycm9yIGNhbGxiYWNrLiBFcnJvcnM6ICIgKyBjb2RlY0Vycm9ycyk7Ci0gICAgICAgIGVycm9y
Q2FsbGJhY2sub25NZWRpYUNvZGVjVmlkZW9EZWNvZGVyQ3JpdGljYWxFcnJvcihjb2RlY0Vycm9y
cyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgbWVkaWFDb2RlYyA9IG51bGw7Ci0gICAgbWVkaWFD
b2RlY1RocmVhZCA9IG51bGw7Ci0gICAgcnVubmluZ0luc3RhbmNlID0gbnVsbDsKLSAgICBpZiAo
dXNlU3VyZmFjZSkgewotICAgICAgc3VyZmFjZS5yZWxlYXNlKCk7Ci0gICAgICBzdXJmYWNlID0g
bnVsbDsKLSAgICAgIHRleHR1cmVMaXN0ZW5lci5yZWxlYXNlKCk7Ci0gICAgfQotICAgIExvZ2dp
bmcuZChUQUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyIGRvbmUiKTsKLSAgfQotCi0gIC8vIERlcXVl
dWUgYW4gaW5wdXQgYnVmZmVyIGFuZCByZXR1cm4gaXRzIGluZGV4LCAtMSBpZiBubyBpbnB1dCBi
dWZmZXIgaXMKLSAgLy8gYXZhaWxhYmxlLCBvciAtMiBpZiB0aGUgY29kZWMgaXMgbm8gbG9uZ2Vy
IG9wZXJhdGl2ZS4KLSAgcHJpdmF0ZSBpbnQgZGVxdWV1ZUlucHV0QnVmZmVyKCkgewotICAgIGNo
ZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBtZWRpYUNv
ZGVjLmRlcXVldWVJbnB1dEJ1ZmZlcihERVFVRVVFX0lOUFVUX1RJTUVPVVQpOwotICAgIH0gY2F0
Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZGVx
dWV1ZUludHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiAtMjsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlIGJvb2xlYW4gcXVldWVJbnB1dEJ1ZmZlcihpbnQgaW5wdXRCdWZmZXJJ
bmRleCwgaW50IHNpemUsIGxvbmcgcHJlc2VudGF0aW9uVGltZVN0YW1VcywKLSAgICAgIGxvbmcg
dGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0YW1wKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNU
aHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgaW5wdXRCdWZmZXJzW2lucHV0QnVmZmVySW5kZXhd
LnBvc2l0aW9uKDApOwotICAgICAgaW5wdXRCdWZmZXJzW2lucHV0QnVmZmVySW5kZXhdLmxpbWl0
KHNpemUpOwotICAgICAgZGVjb2RlU3RhcnRUaW1lTXMuYWRkKAotICAgICAgICAgIG5ldyBUaW1l
U3RhbXBzKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpLCB0aW1lU3RhbXBNcywgbnRwVGlt
ZVN0YW1wKSk7Ci0gICAgICBtZWRpYUNvZGVjLnF1ZXVlSW5wdXRCdWZmZXIoaW5wdXRCdWZmZXJJ
bmRleCwgMCwgc2l6ZSwgcHJlc2VudGF0aW9uVGltZVN0YW1VcywgMCk7Ci0gICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgImRlY29kZSBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUaW1lU3RhbXBzIHsKLSAgICBwdWJs
aWMgVGltZVN0YW1wcyhsb25nIGRlY29kZVN0YXJ0VGltZU1zLCBsb25nIHRpbWVTdGFtcE1zLCBs
b25nIG50cFRpbWVTdGFtcE1zKSB7Ci0gICAgICB0aGlzLmRlY29kZVN0YXJ0VGltZU1zID0gZGVj
b2RlU3RhcnRUaW1lTXM7Ci0gICAgICB0aGlzLnRpbWVTdGFtcE1zID0gdGltZVN0YW1wTXM7Ci0g
ICAgICB0aGlzLm50cFRpbWVTdGFtcE1zID0gbnRwVGltZVN0YW1wTXM7Ci0gICAgfQotICAgIC8v
IFRpbWUgd2hlbiB0aGlzIGZyYW1lIHdhcyBxdWV1ZWQgZm9yIGRlY29kaW5nLgotICAgIHByaXZh
dGUgZmluYWwgbG9uZyBkZWNvZGVTdGFydFRpbWVNczsKLSAgICAvLyBPbmx5IHVzZWQgZm9yIGJv
b2trZWVwaW5nIGluIEphdmEuIFN0b3JlcyBDKysgaW5wdXRJbWFnZS5fdGltZVN0YW1wIHZhbHVl
IGZvciBpbnB1dCBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgdGltZVN0YW1wTXM7Ci0g
ICAgLy8gT25seSB1c2VkIGZvciBib29ra2VlcGluZyBpbiBKYXZhLiBTdG9yZXMgQysrIGlucHV0
SW1hZ2UubnRwX3RpbWVfbXNfIHZhbHVlIGZvciBpbnB1dCBmcmFtZS4KLSAgICBwcml2YXRlIGZp
bmFsIGxvbmcgbnRwVGltZVN0YW1wTXM7Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZvciBk
ZXF1ZXVlT3V0cHV0QnVmZmVyKCkgYmVsb3cuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIERlY29k
ZWRPdXRwdXRCdWZmZXIgewotICAgIHB1YmxpYyBEZWNvZGVkT3V0cHV0QnVmZmVyKGludCBpbmRl
eCwgaW50IG9mZnNldCwgaW50IHNpemUsIGxvbmcgcHJlc2VudGF0aW9uVGltZVN0YW1wTXMsCi0g
ICAgICAgIGxvbmcgdGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0YW1wTXMsIGxvbmcgZGVjb2Rl
VGltZSwgbG9uZyBlbmREZWNvZGVUaW1lKSB7Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0g
ICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgICAgIHRoaXMuc2l6ZSA9IHNpemU7Ci0gICAg
ICB0aGlzLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zID0gcHJlc2VudGF0aW9uVGltZVN0YW1wTXM7
Ci0gICAgICB0aGlzLnRpbWVTdGFtcE1zID0gdGltZVN0YW1wTXM7Ci0gICAgICB0aGlzLm50cFRp
bWVTdGFtcE1zID0gbnRwVGltZVN0YW1wTXM7Ci0gICAgICB0aGlzLmRlY29kZVRpbWVNcyA9IGRl
Y29kZVRpbWU7Ci0gICAgICB0aGlzLmVuZERlY29kZVRpbWVNcyA9IGVuZERlY29kZVRpbWU7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgaW5kZXg7Ci0gICAgcHJpdmF0ZSBmaW5hbCBp
bnQgb2Zmc2V0OwotICAgIHByaXZhdGUgZmluYWwgaW50IHNpemU7Ci0gICAgLy8gUHJlc2VudGF0
aW9uIHRpbWVzdGFtcCByZXR1cm5lZCBpbiBkZXF1ZXVlT3V0cHV0QnVmZmVyIGNhbGwuCi0gICAg
cHJpdmF0ZSBmaW5hbCBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgIC8vIEMrKyBp
bnB1dEltYWdlLl90aW1lU3RhbXAgdmFsdWUgZm9yIG91dHB1dCBmcmFtZS4KLSAgICBwcml2YXRl
IGZpbmFsIGxvbmcgdGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UubnRwX3RpbWVf
bXNfIHZhbHVlIGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIG50cFRp
bWVTdGFtcE1zOwotICAgIC8vIE51bWJlciBvZiBtcyBpdCB0b29rIHRvIGRlY29kZSB0aGlzIGZy
YW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBkZWNvZGVUaW1lTXM7Ci0gICAgLy8gU3lzdGVt
IHRpbWUgd2hlbiB0aGlzIGZyYW1lIGRlY29kaW5nIGZpbmlzaGVkLgotICAgIHByaXZhdGUgZmlu
YWwgbG9uZyBlbmREZWNvZGVUaW1lTXM7Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZvciBk
ZXF1ZXVlVGV4dHVyZUJ1ZmZlcigpIGJlbG93LgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWNv
ZGVkVGV4dHVyZUJ1ZmZlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgdGV4dHVyZUlEOwotICAg
IHByaXZhdGUgZmluYWwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXg7Ci0gICAgLy8gUHJlc2VudGF0
aW9uIHRpbWVzdGFtcCByZXR1cm5lZCBpbiBkZXF1ZXVlT3V0cHV0QnVmZmVyIGNhbGwuCi0gICAg
cHJpdmF0ZSBmaW5hbCBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgIC8vIEMrKyBp
bnB1dEltYWdlLl90aW1lU3RhbXAgdmFsdWUgZm9yIG91dHB1dCBmcmFtZS4KLSAgICBwcml2YXRl
IGZpbmFsIGxvbmcgdGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UubnRwX3RpbWVf
bXNfIHZhbHVlIGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIG50cFRp
bWVTdGFtcE1zOwotICAgIC8vIE51bWJlciBvZiBtcyBpdCB0b29rIHRvIGRlY29kZSB0aGlzIGZy
YW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBkZWNvZGVUaW1lTXM7Ci0gICAgLy8gSW50ZXJ2
YWwgZnJvbSB3aGVuIHRoZSBmcmFtZSBmaW5pc2hlZCBkZWNvZGluZyB1bnRpbCB0aGlzIGJ1ZmZl
ciBoYXMgYmVlbiBjcmVhdGVkLgotICAgIC8vIFNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIHRleHR1
cmUsIHRoaXMgaW50ZXJ2YWwgZGVwZW5kIG9uIHRoZSB0aW1lIGZyb20gd2hlbgotICAgIC8vIGEg
ZnJhbWUgaXMgZGVjb2RlZCBhbmQgcHJvdmlkZWQgdG8gQysrIGFuZCB1bnRpbCB0aGF0IGZyYW1l
IGlzIHJldHVybmVkIHRvIHRoZSBNZWRpYUNvZGVjCi0gICAgLy8gc28gdGhhdCB0aGUgdGV4dHVy
ZSBjYW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXh0IGRlY29kZWQgZnJhbWUuCi0gICAgcHJpdmF0
ZSBmaW5hbCBsb25nIGZyYW1lRGVsYXlNczsKLQotICAgIC8vIEEgRGVjb2RlZFRleHR1cmVCdWZm
ZXIgd2l0aCB6ZXJvIHx0ZXh0dXJlSUR8IGhhcyBzcGVjaWFsIG1lYW5pbmcgYW5kIHJlcHJlc2Vu
dHMgYSBmcmFtZQotICAgIC8vIHRoYXQgd2FzIGRyb3BwZWQuCi0gICAgcHVibGljIERlY29kZWRU
ZXh0dXJlQnVmZmVyKGludCB0ZXh0dXJlSUQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LAotICAg
ICAgICBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zLCBsb25nIHRpbWVTdGFtcE1zLCBsb25n
IG50cFRpbWVTdGFtcE1zLCBsb25nIGRlY29kZVRpbWVNcywKLSAgICAgICAgbG9uZyBmcmFtZURl
bGF5KSB7Ci0gICAgICB0aGlzLnRleHR1cmVJRCA9IHRleHR1cmVJRDsKLSAgICAgIHRoaXMudHJh
bnNmb3JtTWF0cml4ID0gdHJhbnNmb3JtTWF0cml4OwotICAgICAgdGhpcy5wcmVzZW50YXRpb25U
aW1lU3RhbXBNcyA9IHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgICAgdGhpcy50aW1lU3Rh
bXBNcyA9IHRpbWVTdGFtcE1zOwotICAgICAgdGhpcy5udHBUaW1lU3RhbXBNcyA9IG50cFRpbWVT
dGFtcE1zOwotICAgICAgdGhpcy5kZWNvZGVUaW1lTXMgPSBkZWNvZGVUaW1lTXM7Ci0gICAgICB0
aGlzLmZyYW1lRGVsYXlNcyA9IGZyYW1lRGVsYXk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUG9sbCBi
YXNlZCB0ZXh0dXJlIGxpc3RlbmVyLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXh0dXJlTGlz
dGVuZXIKLSAgICAgIGltcGxlbWVudHMgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJh
bWVBdmFpbGFibGVMaXN0ZW5lciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICAvLyB8bmV3RnJhbWVMb2NrfCBpcyB1c2Vk
IHRvIHN5bmNocm9uaXplIGFycml2YWwgb2YgbmV3IGZyYW1lcyB3aXRoIHdhaXQoKS9ub3RpZnlB
bGwoKS4KLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBuZXdGcmFtZUxvY2sgPSBuZXcgT2JqZWN0
KCk7Ci0gICAgLy8gfGJ1ZmZlclRvUmVuZGVyfCBpcyBub24tbnVsbCB3aGVuIHdhaXRpbmcgZm9y
IHRyYW5zaXRpb24gYmV0d2VlbiBhZGRCdWZmZXJUb1JlbmRlcigpIHRvCi0gICAgLy8gb25UZXh0
dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICBwcml2YXRlIERlY29kZWRPdXRwdXRCdWZmZXIgYnVm
ZmVyVG9SZW5kZXI7Ci0gICAgcHJpdmF0ZSBEZWNvZGVkVGV4dHVyZUJ1ZmZlciByZW5kZXJlZEJ1
ZmZlcjsKLQotICAgIHB1YmxpYyBUZXh0dXJlTGlzdGVuZXIoU3VyZmFjZVRleHR1cmVIZWxwZXIg
c3VyZmFjZVRleHR1cmVIZWxwZXIpIHsKLSAgICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIg
PSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0
TGlzdGVuaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEJ1ZmZlclRvUmVu
ZGVyKERlY29kZWRPdXRwdXRCdWZmZXIgYnVmZmVyKSB7Ci0gICAgICBpZiAoYnVmZmVyVG9SZW5k
ZXIgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiVW5leHBlY3RlZCBhZGRCdWZm
ZXJUb1JlbmRlcigpIGNhbGxlZCB3aGlsZSB3YWl0aW5nIGZvciBhIHRleHR1cmUuIik7Ci0gICAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldhaXRpbmcgZm9yIGEgdGV4dHVy
ZS4iKTsKLSAgICAgIH0KLSAgICAgIGJ1ZmZlclRvUmVuZGVyID0gYnVmZmVyOwotICAgIH0KLQot
ICAgIHB1YmxpYyBib29sZWFuIGlzV2FpdGluZ0ZvclRleHR1cmUoKSB7Ci0gICAgICBzeW5jaHJv
bml6ZWQgKG5ld0ZyYW1lTG9jaykgewotICAgICAgICByZXR1cm4gYnVmZmVyVG9SZW5kZXIgIT0g
bnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDYWxsYmFjayBmcm9tIHxzdXJmYWNlVGV4
dHVyZUhlbHBlcnwuIE1heSBiZSBjYWxsZWQgb24gYW4gYXJiaXRyYXJ5IHRocmVhZC4KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAgICAg
ICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0
YW1wTnMpIHsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlZEJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKAotICAgICAg
ICAgICAgICBUQUcsICJVbmV4cGVjdGVkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgY2FsbGVk
IHdoaWxlIGFscmVhZHkgaG9sZGluZyBhIHRleHR1cmUuIik7Ci0gICAgICAgICAgdGhyb3cgbmV3
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQWxyZWFkeSBob2xkaW5nIGEgdGV4dHVyZS4iKTsKLSAg
ICAgICAgfQotICAgICAgICAvLyB8dGltZXN0YW1wTnN8IGlzIGFsd2F5cyB6ZXJvIG9uIHNvbWUg
QW5kcm9pZCB2ZXJzaW9ucy4KLSAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBuZXcgRGVjb2RlZFRl
eHR1cmVCdWZmZXIob2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsCi0gICAgICAgICAgICBi
dWZmZXJUb1JlbmRlci5wcmVzZW50YXRpb25UaW1lU3RhbXBNcywgYnVmZmVyVG9SZW5kZXIudGlt
ZVN0YW1wTXMsCi0gICAgICAgICAgICBidWZmZXJUb1JlbmRlci5udHBUaW1lU3RhbXBNcywgYnVm
ZmVyVG9SZW5kZXIuZGVjb2RlVGltZU1zLAotICAgICAgICAgICAgU3lzdGVtQ2xvY2suZWxhcHNl
ZFJlYWx0aW1lKCkgLSBidWZmZXJUb1JlbmRlci5lbmREZWNvZGVUaW1lTXMpOwotICAgICAgICBi
dWZmZXJUb1JlbmRlciA9IG51bGw7Ci0gICAgICAgIG5ld0ZyYW1lTG9jay5ub3RpZnlBbGwoKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEZXF1ZXVlcyBhbmQgcmV0dXJucyBhIERlY29kZWRU
ZXh0dXJlQnVmZmVyIGlmIGF2YWlsYWJsZSwgb3IgbnVsbCBvdGhlcndpc2UuCi0gICAgcHVibGlj
IERlY29kZWRUZXh0dXJlQnVmZmVyIGRlcXVldWVUZXh0dXJlQnVmZmVyKGludCB0aW1lb3V0TXMp
IHsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0gICAgICAgIGlmIChyZW5k
ZXJlZEJ1ZmZlciA9PSBudWxsICYmIHRpbWVvdXRNcyA+IDAgJiYgaXNXYWl0aW5nRm9yVGV4dHVy
ZSgpKSB7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG5ld0ZyYW1lTG9jay53YWl0KHRp
bWVvdXRNcyk7Ci0gICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewot
ICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgaW50ZXJydXB0ZWQgc3RhdHVzIGJ5IHJlaW50ZXJy
dXB0aW5nIHRoZSB0aHJlYWQuCi0gICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgpLmlu
dGVycnVwdCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBEZWNvZGVkVGV4dHVy
ZUJ1ZmZlciByZXR1cm5lZEJ1ZmZlciA9IHJlbmRlcmVkQnVmZmVyOwotICAgICAgICByZW5kZXJl
ZEJ1ZmZlciA9IG51bGw7Ci0gICAgICAgIHJldHVybiByZXR1cm5lZEJ1ZmZlcjsKLSAgICAgIH0K
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgLy8gU3VyZmFjZVRl
eHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpIHdpbGwgYmxvY2sgdW50aWwgYW55IG9uVGV4dHVy
ZUZyYW1lQXZhaWxhYmxlKCkgaW4KLSAgICAgIC8vIHByb2dyZXNzIGlzIGRvbmUuIFRoZXJlZm9y
ZSwgdGhlIGNhbGwgbXVzdCBiZSBvdXRzaWRlIGFueSBzeW5jaHJvbml6ZWQKLSAgICAgIC8vIHN0
YXRlbWVudCB0aGF0IGlzIGFsc28gdXNlZCBpbiB0aGUgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUo
KSBhYm92ZSB0byBhdm9pZCBkZWFkbG9ja3MuCi0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5z
dG9wTGlzdGVuaW5nKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKG5ld0ZyYW1lTG9jaykgewotICAg
ICAgICBpZiAocmVuZGVyZWRCdWZmZXIgIT0gbnVsbCkgewotICAgICAgICAgIHN1cmZhY2VUZXh0
dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgICAgICAgIHJlbmRlcmVkQnVmZmVy
ID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMg
bnVsbCBpZiBubyBkZWNvZGVkIGJ1ZmZlciBpcyBhdmFpbGFibGUsIGFuZCBvdGhlcndpc2UgYSBE
ZWNvZGVkQnl0ZUJ1ZmZlci4KLSAgLy8gVGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiBj
YWxsIGlzIG1hZGUgb24gdGhlIHdyb25nIHRocmVhZCwgaWYgY29sb3IgZm9ybWF0IGNoYW5nZXMg
dG8gYW4KLSAgLy8gdW5zdXBwb3J0ZWQgZm9ybWF0LCBvciBpZiB8bWVkaWFDb2RlY3wgaXMgbm90
IGluIHRoZSBFeGVjdXRpbmcgc3RhdGUuIFRocm93cyBDb2RlY0V4Y2VwdGlvbgotICAvLyB1cG9u
IGNvZGVjIGVycm9yLgotICBwcml2YXRlIERlY29kZWRPdXRwdXRCdWZmZXIgZGVxdWV1ZU91dHB1
dEJ1ZmZlcihpbnQgZGVxdWV1ZVRpbWVvdXRNcykgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhy
ZWFkKCk7Ci0gICAgaWYgKGRlY29kZVN0YXJ0VGltZU1zLmlzRW1wdHkoKSkgewotICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgfQotICAgIC8vIERyYWluIHRoZSBkZWNvZGVyIHVudGlsIHJlY2Vpdmlu
ZyBhIGRlY29kZWQgYnVmZmVyIG9yIGhpdHRpbmcKLSAgICAvLyBNZWRpYUNvZGVjLklORk9fVFJZ
X0FHQUlOX0xBVEVSLgotICAgIGZpbmFsIE1lZGlhQ29kZWMuQnVmZmVySW5mbyBpbmZvID0gbmV3
IE1lZGlhQ29kZWMuQnVmZmVySW5mbygpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBmaW5h
bCBpbnQgcmVzdWx0ID0KLSAgICAgICAgICBtZWRpYUNvZGVjLmRlcXVldWVPdXRwdXRCdWZmZXIo
aW5mbywgVGltZVVuaXQuTUlMTElTRUNPTkRTLnRvTWljcm9zKGRlcXVldWVUaW1lb3V0TXMpKTsK
LSAgICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICAgIGNhc2UgTWVkaWFDb2RlYy5JTkZPX09V
VFBVVF9CVUZGRVJTX0NIQU5HRUQ6Ci0gICAgICAgICAgb3V0cHV0QnVmZmVycyA9IG1lZGlhQ29k
ZWMuZ2V0T3V0cHV0QnVmZmVycygpOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJEZWNvZGVy
IG91dHB1dCBidWZmZXJzIGNoYW5nZWQ6ICIgKyBvdXRwdXRCdWZmZXJzLmxlbmd0aCk7Ci0gICAg
ICAgICAgaWYgKGhhc0RlY29kZWRGaXJzdEZyYW1lKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBvdXRwdXQgYnVmZmVyIGNoYW5nZSBldmVudC4i
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVkaWFDb2Rl
Yy5JTkZPX09VVFBVVF9GT1JNQVRfQ0hBTkdFRDoKLSAgICAgICAgICBNZWRpYUZvcm1hdCBmb3Jt
YXQgPSBtZWRpYUNvZGVjLmdldE91dHB1dEZvcm1hdCgpOwotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsICJEZWNvZGVyIGZvcm1hdCBjaGFuZ2VkOiAiICsgZm9ybWF0LnRvU3RyaW5nKCkpOwotICAg
ICAgICAgIGludCBuZXdfd2lkdGggPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlf
V0lEVEgpOwotICAgICAgICAgIGludCBuZXdfaGVpZ2h0ID0gZm9ybWF0LmdldEludGVnZXIoTWVk
aWFGb3JtYXQuS0VZX0hFSUdIVCk7Ci0gICAgICAgICAgaWYgKGhhc0RlY29kZWRGaXJzdEZyYW1l
ICYmIChuZXdfd2lkdGggIT0gd2lkdGggfHwgbmV3X2hlaWdodCAhPSBoZWlnaHQpKSB7Ci0gICAg
ICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBzaXplIGNoYW5n
ZS4gQ29uZmlndXJlZCAiICsgd2lkdGggKyAiKiIgKyBoZWlnaHQKLSAgICAgICAgICAgICAgICAr
ICIuIE5ldyAiICsgbmV3X3dpZHRoICsgIioiICsgbmV3X2hlaWdodCk7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIHdpZHRoID0gZm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX1dJRFRI
KTsKLSAgICAgICAgICBoZWlnaHQgPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlf
SEVJR0hUKTsKLQotICAgICAgICAgIGlmICghdXNlU3VyZmFjZSAmJiBmb3JtYXQuY29udGFpbnNL
ZXkoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCkpIHsKLSAgICAgICAgICAgIGNvbG9yRm9y
bWF0ID0gZm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCk7Ci0g
ICAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ29sb3I6IDB4IiArIEludGVnZXIudG9IZXhTdHJp
bmcoY29sb3JGb3JtYXQpKTsKLSAgICAgICAgICAgIGlmICghc3VwcG9ydGVkQ29sb3JMaXN0LmNv
bnRhaW5zKGNvbG9yRm9ybWF0KSkgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0
YXRlRXhjZXB0aW9uKCJOb24gc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiArIGNvbG9yRm9ybWF0
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGZvcm1hdC5jb250
YWluc0tleSgic3RyaWRlIikpIHsKLSAgICAgICAgICAgIHN0cmlkZSA9IGZvcm1hdC5nZXRJbnRl
Z2VyKCJzdHJpZGUiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGZvcm1hdC5jb250YWlu
c0tleSgic2xpY2UtaGVpZ2h0IikpIHsKLSAgICAgICAgICAgIHNsaWNlSGVpZ2h0ID0gZm9ybWF0
LmdldEludGVnZXIoInNsaWNlLWhlaWdodCIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiRnJhbWUgc3RyaWRlIGFuZCBzbGljZSBoZWlnaHQ6ICIgKyBzdHJpZGUgKyAi
IHggIiArIHNsaWNlSGVpZ2h0KTsKLSAgICAgICAgICBzdHJpZGUgPSBNYXRoLm1heCh3aWR0aCwg
c3RyaWRlKTsKLSAgICAgICAgICBzbGljZUhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgc2xpY2VI
ZWlnaHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlhQ29kZWMuSU5GT19U
UllfQUdBSU5fTEFURVI6Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgaGFzRGVjb2RlZEZpcnN0RnJhbWUgPSB0cnVlOwotICAgICAgICAgIFRpbWVT
dGFtcHMgdGltZVN0YW1wcyA9IGRlY29kZVN0YXJ0VGltZU1zLnJlbW92ZSgpOwotICAgICAgICAg
IGxvbmcgZGVjb2RlVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSB0aW1l
U3RhbXBzLmRlY29kZVN0YXJ0VGltZU1zOwotICAgICAgICAgIGlmIChkZWNvZGVUaW1lTXMgPiBN
QVhfREVDT0RFX1RJTUVfTVMpIHsKLSAgICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJWZXJ5IGhp
Z2ggZGVjb2RlIHRpbWU6ICIgKyBkZWNvZGVUaW1lTXMgKyAibXMiCi0gICAgICAgICAgICAgICAg
ICAgICsgIi4gUSBzaXplOiAiICsgZGVjb2RlU3RhcnRUaW1lTXMuc2l6ZSgpCi0gICAgICAgICAg
ICAgICAgICAgICsgIi4gTWlnaHQgYmUgY2F1c2VkIGJ5IHJlc3VtaW5nIEgyNjQgZGVjb2Rpbmcg
YWZ0ZXIgYSBwYXVzZS4iKTsKLSAgICAgICAgICAgIGRlY29kZVRpbWVNcyA9IE1BWF9ERUNPREVf
VElNRV9NUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIG5ldyBEZWNvZGVkT3V0cHV0
QnVmZmVyKHJlc3VsdCwgaW5mby5vZmZzZXQsIGluZm8uc2l6ZSwKLSAgICAgICAgICAgICAgVGlt
ZVVuaXQuTUlDUk9TRUNPTkRTLnRvTWlsbGlzKGluZm8ucHJlc2VudGF0aW9uVGltZVVzKSwgdGlt
ZVN0YW1wcy50aW1lU3RhbXBNcywKLSAgICAgICAgICAgICAgdGltZVN0YW1wcy5udHBUaW1lU3Rh
bXBNcywgZGVjb2RlVGltZU1zLCBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyBudWxsIGlmIG5vIGRlY29kZWQgYnVmZmVy
IGlzIGF2YWlsYWJsZSwgYW5kIG90aGVyd2lzZSBhIERlY29kZWRUZXh0dXJlQnVmZmVyLgotICAv
LyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGNhbGwgaXMgbWFkZSBvbiB0aGUgd3Jv
bmcgdGhyZWFkLCBpZiBjb2xvciBmb3JtYXQgY2hhbmdlcyB0byBhbgotICAvLyB1bnN1cHBvcnRl
ZCBmb3JtYXQsIG9yIGlmIHxtZWRpYUNvZGVjfCBpcyBub3QgaW4gdGhlIEV4ZWN1dGluZyBzdGF0
ZS4gVGhyb3dzIENvZGVjRXhjZXB0aW9uCi0gIC8vIHVwb24gY29kZWMgZXJyb3IuIElmIHxkZXF1
ZXVlVGltZW91dE1zfCA+IDAsIHRoZSBvbGRlc3QgZGVjb2RlZCBmcmFtZSB3aWxsIGJlIGRyb3Bw
ZWQgaWYKLSAgLy8gYSBmcmFtZSBjYW4ndCBiZSByZXR1cm5lZC4KLSAgcHJpdmF0ZSBEZWNvZGVk
VGV4dHVyZUJ1ZmZlciBkZXF1ZXVlVGV4dHVyZUJ1ZmZlcihpbnQgZGVxdWV1ZVRpbWVvdXRNcykg
ewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgaWYgKCF1c2VTdXJmYWNlKSB7
Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJkZXF1ZXVlVGV4dHVyZSgp
IGNhbGxlZCBmb3IgYnl0ZSBidWZmZXIgZGVjb2RpbmcuIik7Ci0gICAgfQotICAgIERlY29kZWRP
dXRwdXRCdWZmZXIgb3V0cHV0QnVmZmVyID0gZGVxdWV1ZU91dHB1dEJ1ZmZlcihkZXF1ZXVlVGlt
ZW91dE1zKTsKLSAgICBpZiAob3V0cHV0QnVmZmVyICE9IG51bGwpIHsKLSAgICAgIGRlcXVldWVk
U3VyZmFjZU91dHB1dEJ1ZmZlcnMuYWRkKG91dHB1dEJ1ZmZlcik7Ci0gICAgfQotCi0gICAgTWF5
YmVSZW5kZXJEZWNvZGVkVGV4dHVyZUJ1ZmZlcigpOwotICAgIC8vIENoZWNrIGlmIHRoZXJlIGlz
IHRleHR1cmUgcmVhZHkgbm93IGJ5IHdhaXRpbmcgbWF4IHxkZXF1ZXVlVGltZW91dE1zfC4KLSAg
ICBEZWNvZGVkVGV4dHVyZUJ1ZmZlciByZW5kZXJlZEJ1ZmZlciA9IHRleHR1cmVMaXN0ZW5lci5k
ZXF1ZXVlVGV4dHVyZUJ1ZmZlcihkZXF1ZXVlVGltZW91dE1zKTsKLSAgICBpZiAocmVuZGVyZWRC
dWZmZXIgIT0gbnVsbCkgewotICAgICAgTWF5YmVSZW5kZXJEZWNvZGVkVGV4dHVyZUJ1ZmZlcigp
OwotICAgICAgcmV0dXJuIHJlbmRlcmVkQnVmZmVyOwotICAgIH0KLQotICAgIGlmICgoZGVxdWV1
ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5zaXplKCkKLSAgICAgICAgICAgICAgICA+PSBNYXRoLm1p
bihNQVhfUVVFVUVEX09VVFBVVEJVRkZFUlMsIG91dHB1dEJ1ZmZlcnMubGVuZ3RoKQotICAgICAg
ICAgICAgfHwgKGRlcXVldWVUaW1lb3V0TXMgPiAwICYmICFkZXF1ZXVlZFN1cmZhY2VPdXRwdXRC
dWZmZXJzLmlzRW1wdHkoKSkpKSB7Ci0gICAgICArK2Ryb3BwZWRGcmFtZXM7Ci0gICAgICAvLyBE
cm9wIHRoZSBvbGRlc3QgZnJhbWUgc3RpbGwgaW4gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVy
cy4KLSAgICAgIC8vIFRoZSBvbGRlc3QgZnJhbWUgaXMgb3duZWQgYnkgfHRleHR1cmVMaXN0ZW5l
cnwgYW5kIGNhbid0IGJlIGRyb3BwZWQgc2luY2UKLSAgICAgIC8vIG1lZGlhQ29kZWMucmVsZWFz
ZU91dHB1dEJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4KLSAgICAgIGZpbmFsIERlY29k
ZWRPdXRwdXRCdWZmZXIgZHJvcHBlZEZyYW1lID0gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVy
cy5yZW1vdmUoKTsKLSAgICAgIGlmIChkZXF1ZXVlVGltZW91dE1zID4gMCkgewotICAgICAgICAv
LyBUT0RPKHBlcmtqKTogUmUtYWRkIHRoZSBiZWxvdyBsb2cgd2hlbiBWaWRlb1JlbmRlckdVSSBo
YXMgYmVlbiByZW1vdmVkIG9yIGZpeGVkIHRvCi0gICAgICAgIC8vIHJldHVybiB0aGUgb25lIGFu
ZCBvbmx5IHRleHR1cmUgZXZlbiBpZiBpdCBkb2VzIG5vdCByZW5kZXIuCi0gICAgICAgIExvZ2dp
bmcudyhUQUcsICJEcmFpbmluZyBkZWNvZGVyLiBEcm9wcGluZyBmcmFtZSB3aXRoIFRTOiAiCi0g
ICAgICAgICAgICAgICAgKyBkcm9wcGVkRnJhbWUucHJlc2VudGF0aW9uVGltZVN0YW1wTXMgKyAi
LiBUb3RhbCBudW1iZXIgb2YgZHJvcHBlZCBmcmFtZXM6ICIKLSAgICAgICAgICAgICAgICArIGRy
b3BwZWRGcmFtZXMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIlRv
byBtYW55IG91dHB1dCBidWZmZXJzICIgKyBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLnNp
emUoKQotICAgICAgICAgICAgICAgICsgIi4gRHJvcHBpbmcgZnJhbWUgd2l0aCBUUzogIiArIGRy
b3BwZWRGcmFtZS5wcmVzZW50YXRpb25UaW1lU3RhbXBNcwotICAgICAgICAgICAgICAgICsgIi4g
VG90YWwgbnVtYmVyIG9mIGRyb3BwZWQgZnJhbWVzOiAiICsgZHJvcHBlZEZyYW1lcyk7Ci0gICAg
ICB9Ci0KLSAgICAgIG1lZGlhQ29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihkcm9wcGVkRnJhbWUu
aW5kZXgsIGZhbHNlIC8qIHJlbmRlciAqLyk7Ci0gICAgICByZXR1cm4gbmV3IERlY29kZWRUZXh0
dXJlQnVmZmVyKDAsIG51bGwsIGRyb3BwZWRGcmFtZS5wcmVzZW50YXRpb25UaW1lU3RhbXBNcywK
LSAgICAgICAgICBkcm9wcGVkRnJhbWUudGltZVN0YW1wTXMsIGRyb3BwZWRGcmFtZS5udHBUaW1l
U3RhbXBNcywgZHJvcHBlZEZyYW1lLmRlY29kZVRpbWVNcywKLSAgICAgICAgICBTeXN0ZW1DbG9j
ay5lbGFwc2VkUmVhbHRpbWUoKSAtIGRyb3BwZWRGcmFtZS5lbmREZWNvZGVUaW1lTXMpOwotICAg
IH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBNYXliZVJlbmRlckRl
Y29kZWRUZXh0dXJlQnVmZmVyKCkgewotICAgIGlmIChkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZm
ZXJzLmlzRW1wdHkoKSB8fCB0ZXh0dXJlTGlzdGVuZXIuaXNXYWl0aW5nRm9yVGV4dHVyZSgpKSB7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEdldCB0aGUgZmlyc3QgZnJhbWUgaW4gdGhl
IHF1ZXVlIGFuZCByZW5kZXIgdG8gdGhlIGRlY29kZXIgb3V0cHV0IHN1cmZhY2UuCi0gICAgZmlu
YWwgRGVjb2RlZE91dHB1dEJ1ZmZlciBidWZmZXIgPSBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZm
ZXJzLnJlbW92ZSgpOwotICAgIHRleHR1cmVMaXN0ZW5lci5hZGRCdWZmZXJUb1JlbmRlcihidWZm
ZXIpOwotICAgIG1lZGlhQ29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihidWZmZXIuaW5kZXgsIHRy
dWUgLyogcmVuZGVyICovKTsKLSAgfQotCi0gIC8vIFJlbGVhc2UgYSBkZXF1ZXVlZCBvdXRwdXQg
Ynl0ZSBidWZmZXIgYmFjayB0byB0aGUgY29kZWMgZm9yIHJlLXVzZS4gU2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGZvcgotICAvLyBub24tc3VyZmFjZSBkZWNvZGluZy4KLSAgLy8gVGhyb3dzIElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY2FsbCBpcyBtYWRlIG9uIHRoZSB3cm9uZyB0aHJlYWQs
IGlmIGNvZGVjIGlzIGNvbmZpZ3VyZWQKLSAgLy8gZm9yIHN1cmZhY2UgZGVjb2RpbmcsIG9yIGlm
IHxtZWRpYUNvZGVjfCBpcyBub3QgaW4gdGhlIEV4ZWN1dGluZyBzdGF0ZS4gVGhyb3dzCi0gIC8v
IE1lZGlhQ29kZWMuQ29kZWNFeGNlcHRpb24gdXBvbiBjb2RlYyBlcnJvci4KLSAgcHJpdmF0ZSB2
b2lkIHJldHVybkRlY29kZWRPdXRwdXRCdWZmZXIoaW50IGluZGV4KQotICAgICAgdGhyb3dzIEls
bGVnYWxTdGF0ZUV4Y2VwdGlvbiwgTWVkaWFDb2RlYy5Db2RlY0V4Y2VwdGlvbiB7Ci0gICAgY2hl
Y2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICBpZiAodXNlU3VyZmFjZSkgewotICAgICAgdGhy
b3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigicmV0dXJuRGVjb2RlZE91dHB1dEJ1ZmZlcigp
IGNhbGxlZCBmb3Igc3VyZmFjZSBkZWNvZGluZy4iKTsKLSAgICB9Ci0gICAgbWVkaWFDb2RlYy5y
ZWxlYXNlT3V0cHV0QnVmZmVyKGluZGV4LCBmYWxzZSAvKiByZW5kZXIgKi8pOwotICB9Ci19Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVy
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdl
dEFwaTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWM7Ci1pbXBvcnQgYW5kcm9pZC5t
ZWRpYS5NZWRpYUNvZGVjSW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJbmZv
LkNvZGVjQ2FwYWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0xpc3Q7
Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm9wZW5n
bC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1
bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLQotaW1wb3J0IGphdmEubmlvLkJ5
dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuSGFz
aFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1w
b3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRp
bC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vLyBKYXZhLXNpZGUgb2YgcGVlcmNvbm5lY3Rpb25f
am5pLmNjOk1lZGlhQ29kZWNWaWRlb0VuY29kZXIuCi0vLyBUaGlzIGNsYXNzIGlzIGFuIGltcGxl
bWVudGF0aW9uIGRldGFpbCBvZiB0aGUgSmF2YSBQZWVyQ29ubmVjdGlvbiBBUEkuCi1AVGFyZ2V0
QXBpKDE5KQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBN
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyIHsKLSAgLy8gVGhpcyBjbGFzcyBpcyBjb25zdHJ1Y3RlZCwg
b3BlcmF0ZWQsIGFuZCBkZXN0cm95ZWQgYnkgaXRzIEMrKyBpbmNhcm5hdGlvbiwKLSAgLy8gc28g
dGhlIGNsYXNzIGFuZCBpdHMgbWV0aG9kcyBoYXZlIG5vbi1wdWJsaWMgdmlzaWJpbGl0eS4gIFRo
ZSBBUEkgdGhpcwotICAvLyBjbGFzcyBleHBvc2VzIGFpbXMgdG8gbWltaWMgdGhlIHdlYnJ0Yzo6
VmlkZW9FbmNvZGVyIEFQSSBhcyBjbG9zZWx5IGFzCi0gIC8vIHBvc3NpYmx5IHRvIG1pbmltaXpl
IHRoZSBhbW91bnQgb2YgdHJhbnNsYXRpb24gd29yayBuZWNlc3NhcnkuCi0KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIjsKLQotICAv
LyBUcmFja3Mgd2VicnRjOjpWaWRlb0NvZGVjVHlwZS4KLSAgcHVibGljIGVudW0gVmlkZW9Db2Rl
Y1R5cGUgeyBWSURFT19DT0RFQ19WUDgsIFZJREVPX0NPREVDX1ZQOSwgVklERU9fQ09ERUNfSDI2
NCB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FRElBX0NPREVDX1JFTEVBU0VfVElN
RU9VVF9NUyA9IDUwMDA7IC8vIFRpbWVvdXQgZm9yIGNvZGVjIHJlbGVhc2luZy4KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IERFUVVFVUVfVElNRU9VVCA9IDA7IC8vIE5vbi1ibG9ja2luZywg
bm8gd2FpdC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFJBVEVfQURKVVNUTUVOVF9G
UFMgPSAzMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWElNVU1fSU5JVElBTF9GUFMg
PSAzMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEJJVFJBVEVfQ09SUkVDVElPTl9T
RUMgPSAzLjA7Ci0gIC8vIE1heGltdW0gYml0cmF0ZSBjb3JyZWN0aW9uIHNjYWxlIC0gbm8gbW9y
ZSB0aGFuIDIgdGltZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBCSVRSQVRFX0NP
UlJFQ1RJT05fTUFYX1NDQUxFID0gMjsKLSAgLy8gQW1vdW50IG9mIGNvcnJlY3Rpb24gc3RlcHMg
dG8gcmVhY2ggY29ycmVjdGlvbiBtYXhpbXVtIHNjYWxlLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgQklUUkFURV9DT1JSRUNUSU9OX1NURVBTID0gMTA7Ci0KLSAgLy8gQWN0aXZlIHJ1bm5p
bmcgZW5jb2RlciBpbnN0YW5jZS4gU2V0IGluIGluaXRFbmNvZGUoKSAoY2FsbGVkIGZyb20gbmF0
aXZlIGNvZGUpCi0gIC8vIGFuZCByZXNldCB0byBudWxsIGluIHJlbGVhc2UoKSBjYWxsLgotICBw
cml2YXRlIHN0YXRpYyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIHJ1bm5pbmdJbnN0YW5jZSA9IG51
bGw7Ci0gIHByaXZhdGUgc3RhdGljIE1lZGlhQ29kZWNWaWRlb0VuY29kZXJFcnJvckNhbGxiYWNr
IGVycm9yQ2FsbGJhY2sgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBpbnQgY29kZWNFcnJvcnMg
PSAwOwotICAvLyBMaXN0IG9mIGRpc2FibGVkIGNvZGVjIHR5cGVzIC0gY2FuIGJlIHNldCBmcm9t
IGFwcGxpY2F0aW9uLgotICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBod0VuY29kZXJEaXNh
YmxlZFR5cGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gIHByaXZhdGUgVGhyZWFkIG1l
ZGlhQ29kZWNUaHJlYWQ7Ci0gIHByaXZhdGUgTWVkaWFDb2RlYyBtZWRpYUNvZGVjOwotICBwcml2
YXRlIEJ5dGVCdWZmZXJbXSBvdXRwdXRCdWZmZXJzOwotICBwcml2YXRlIEVnbEJhc2UxNCBlZ2xC
YXNlOwotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0OwotICBwcml2
YXRlIFN1cmZhY2UgaW5wdXRTdXJmYWNlOwotICBwcml2YXRlIEdsUmVjdERyYXdlciBkcmF3ZXI7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOF9NSU1FX1RZUEUgPSAidmlkZW8v
eC12bmQub24yLnZwOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWUDlfTUlNRV9U
WVBFID0gInZpZGVvL3gtdm5kLm9uMi52cDkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp
bmcgSDI2NF9NSU1FX1RZUEUgPSAidmlkZW8vYXZjIjsKLQotICAvLyBUeXBlIG9mIGJpdHJhdGUg
YWRqdXN0bWVudCBmb3IgdmlkZW8gZW5jb2Rlci4KLSAgcHVibGljIGVudW0gQml0cmF0ZUFkanVz
dG1lbnRUeXBlIHsKLSAgICAvLyBObyBhZGp1c3RtZW50IC0gdmlkZW8gZW5jb2RlciBoYXMgbm8g
a25vd24gYml0cmF0ZSBwcm9ibGVtLgotICAgIE5PX0FESlVTVE1FTlQsCi0gICAgLy8gRnJhbWVy
YXRlIGJhc2VkIGJpdHJhdGUgYWRqdXN0bWVudCBpcyByZXF1aXJlZCAtIEhXIGVuY29kZXIgZG9l
cyBub3QgdXNlIGZyYW1lCi0gICAgLy8gdGltZXN0YW1wcyB0byBjYWxjdWxhdGUgZnJhbWUgYml0
cmF0ZSBidWRnZXQgYW5kIGluc3RlYWQgaXMgcmVseWluZyBvbiBpbml0aWFsCi0gICAgLy8gZnBz
IGNvbmZpZ3VyYXRpb24gYXNzdW1pbmcgdGhhdCBhbGwgZnJhbWVzIGFyZSBjb21pbmcgYXQgZml4
ZWQgaW5pdGlhbCBmcmFtZSByYXRlLgotICAgIEZSQU1FUkFURV9BREpVU1RNRU5ULAotICAgIC8v
IER5bmFtaWMgYml0cmF0ZSBhZGp1c3RtZW50IGlzIHJlcXVpcmVkIC0gSFcgZW5jb2RlciB1c2Vk
IGZyYW1lIHRpbWVzdGFtcHMsIGJ1dCBhY3R1YWwKLSAgICAvLyBiaXRyYXRlIGRldmlhdGVzIHRv
byBtdWNoIGZyb20gdGhlIHRhcmdldCB2YWx1ZS4KLSAgICBEWU5BTUlDX0FESlVTVE1FTlQKLSAg
fQotCi0gIC8vIENsYXNzIGRlc2NyaWJpbmcgc3VwcG9ydGVkIG1lZGlhIGNvZGVjIHByb3BlcnRp
ZXMuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIHsKLSAgICBw
dWJsaWMgZmluYWwgU3RyaW5nIGNvZGVjUHJlZml4OwotICAgIC8vIE1pbmltdW0gQW5kcm9pZCBT
REsgcmVxdWlyZWQgZm9yIHRoaXMgY29kZWMgdG8gYmUgdXNlZC4KLSAgICBwdWJsaWMgZmluYWwg
aW50IG1pblNkazsKLSAgICAvLyBGbGFnIGlmIGVuY29kZXIgaW1wbGVtZW50YXRpb24gZG9lcyBu
b3QgdXNlIGZyYW1lIHRpbWVzdGFtcHMgdG8gY2FsY3VsYXRlIGZyYW1lIGJpdHJhdGUKLSAgICAv
LyBidWRnZXQgYW5kIGluc3RlYWQgaXMgcmVseWluZyBvbiBpbml0aWFsIGZwcyBjb25maWd1cmF0
aW9uIGFzc3VtaW5nIHRoYXQgYWxsIGZyYW1lcyBhcmUKLSAgICAvLyBjb21pbmcgYXQgZml4ZWQg
aW5pdGlhbCBmcmFtZSByYXRlLiBCaXRyYXRlIGFkanVzdG1lbnQgaXMgcmVxdWlyZWQgZm9yIHRo
aXMgY2FzZS4KLSAgICBwdWJsaWMgZmluYWwgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVB
ZGp1c3RtZW50VHlwZTsKLQotICAgIE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgICBTdHJp
bmcgY29kZWNQcmVmaXgsIGludCBtaW5TZGssIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRyYXRl
QWRqdXN0bWVudFR5cGUpIHsKLSAgICAgIHRoaXMuY29kZWNQcmVmaXggPSBjb2RlY1ByZWZpeDsK
LSAgICAgIHRoaXMubWluU2RrID0gbWluU2RrOwotICAgICAgdGhpcy5iaXRyYXRlQWRqdXN0bWVu
dFR5cGUgPSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0gICAgfQotICB9Ci0KLSAgLy8gTGlzdCBv
ZiBzdXBwb3J0ZWQgSFcgVlA4IGVuY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZWRp
YUNvZGVjUHJvcGVydGllcyBxY29tVnA4SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQcm9w
ZXJ0aWVzKAotICAgICAgIk9NWC5xY29tLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FULCBC
aXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGV4eW5vc1ZwOEh3UHJvcGVydGllcyA9IG5ldyBNZWRp
YUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVguRXh5bm9zLiIsIEJ1aWxkLlZFUlNJT05fQ09E
RVMuTSwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLkRZTkFNSUNfQURKVVNUTUVOVCk7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10gdnA4SHdMaXN0ID0KLSAgICAg
IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHtxY29tVnA4SHdQcm9wZXJ0aWVzLCBleHlub3NW
cDhId1Byb3BlcnRpZXN9OwotCi0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIEhXIFZQOSBlbmNvZGVy
cy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgcWNvbVZwOUh3
UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVgucWNvbS4i
LCBCdWlsZC5WRVJTSU9OX0NPREVTLk0sIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RN
RU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgZXh5bm9z
VnA5SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgIk9NWC5F
eHlub3MuIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5NLCBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9f
QURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVz
W10gdnA5SHdMaXN0ID0KLSAgICAgIG5ldyBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHtxY29tVnA5
SHdQcm9wZXJ0aWVzLCBleHlub3NWcDlId1Byb3BlcnRpZXN9OwotCi0gIC8vIExpc3Qgb2Ygc3Vw
cG9ydGVkIEhXIEguMjY0IGVuY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZWRpYUNv
ZGVjUHJvcGVydGllcyBxY29tSDI2NEh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVy
dGllcygKLSAgICAgICJPTVgucWNvbS4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCwgQml0
cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBNZWRpYUNvZGVjUHJvcGVydGllcyBleHlub3NIMjY0SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlh
Q29kZWNQcm9wZXJ0aWVzKAotICAgICAgIk9NWC5FeHlub3MuIiwgQnVpbGQuVkVSU0lPTl9DT0RF
Uy5MT0xMSVBPUCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLkZSQU1FUkFURV9BREpVU1RNRU5UKTsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSBoMjY0SHdMaXN0
ID0KLSAgICAgIG5ldyBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHtxY29tSDI2NEh3UHJvcGVydGll
cywgZXh5bm9zSDI2NEh3UHJvcGVydGllc307Ci0KLSAgLy8gTGlzdCBvZiBkZXZpY2VzIHdpdGgg
cG9vciBILjI2NCBlbmNvZGVyIHF1YWxpdHkuCi0gIC8vIEhXIEguMjY0IGVuY29kZXIgb24gYmVs
b3cgZGV2aWNlcyBoYXMgcG9vciBiaXRyYXRlIGNvbnRyb2wgLSBhY3R1YWwKLSAgLy8gYml0cmF0
ZXMgZGV2aWF0ZXMgYSBsb3QgZnJvbSB0aGUgdGFyZ2V0IHZhbHVlLgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBTdHJpbmdbXSBIMjY0X0hXX0VYQ0VQVElPTl9NT0RFTFMgPQotICAgICAgbmV3IFN0
cmluZ1tdIHsiU0FNU1VORy1TR0gtSTMzNyIsICJOZXh1cyA3IiwgIk5leHVzIDQifTsKLQotICAv
LyBCaXRyYXRlIG1vZGVzIC0gc2hvdWxkIGJlIGluIHN5bmMgd2l0aCBPTVhfVklERU9fQ09OVFJP
TFJBVEVUWVBFIGRlZmluZWQKLSAgLy8gaW4gT01YX1ZpZGVvLmgKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IFZJREVPX0NvbnRyb2xSYXRlQ29uc3RhbnQgPSAyOwotICAvLyBOVjEyIGNvbG9y
IGZvcm1hdCBzdXBwb3J0ZWQgYnkgUUNPTSBjb2RlYywgYnV0IG5vdCBkZWNsYXJlZCBpbiBNZWRp
YUNvZGVjIC0KLSAgLy8gc2VlIC9oYXJkd2FyZS9xY29tL21lZGlhL21tLWNvcmUvaW5jL09NWF9R
Q09NRXh0bnMuaAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZ
VVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtID0gMHg3RkEzMEMwNDsKLSAgLy8gQWxsb3dhYmxlIGNv
bG9yIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IGNvZGVjIC0gaW4gb3JkZXIgb2YgcHJlZmVyZW5jZS4K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gc3VwcG9ydGVkQ29sb3JMaXN0ID0ge0NvZGVj
Q2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwKLSAgICAgIENvZGVjQ2FwYWJp
bGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDb2RlY0NhcGFiaWxp
dGllcy5DT0xPUl9RQ09NX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDT0xPUl9RQ09N
X0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm19OwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnRbXSBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0ID0ge0NvZGVjQ2FwYWJpbGl0aWVzLkNP
TE9SX0Zvcm1hdFN1cmZhY2V9OwotICBwcml2YXRlIFZpZGVvQ29kZWNUeXBlIHR5cGU7Ci0gIHBy
aXZhdGUgaW50IGNvbG9yRm9ybWF0OyAvLyBVc2VkIGJ5IG5hdGl2ZSBjb2RlLgotCi0gIC8vIFZh
cmlhYmxlcyB1c2VkIGZvciBkeW5hbWljIGJpdHJhdGUgYWRqdXN0bWVudC4KLSAgcHJpdmF0ZSBC
aXRyYXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gQml0cmF0ZUFkanVz
dG1lbnRUeXBlLk5PX0FESlVTVE1FTlQ7Ci0gIHByaXZhdGUgZG91YmxlIGJpdHJhdGVBY2N1bXVs
YXRvcjsKLSAgcHJpdmF0ZSBkb3VibGUgYml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICBwcml2YXRl
IGRvdWJsZSBiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXM7Ci0gIHByaXZhdGUgaW50IGJpdHJhdGVB
ZGp1c3RtZW50U2NhbGVFeHA7Ci0gIHByaXZhdGUgaW50IHRhcmdldEJpdHJhdGVCcHM7Ci0gIHBy
aXZhdGUgaW50IHRhcmdldEZwczsKLQotICAvLyBTUFMgYW5kIFBQUyBOQUxzIChDb25maWcgZnJh
bWUpIGZvciBILjI2NC4KLSAgcHJpdmF0ZSBCeXRlQnVmZmVyIGNvbmZpZ0RhdGEgPSBudWxsOwot
Ci0gIC8vIE1lZGlhQ29kZWMgZXJyb3IgaGFuZGxlciAtIGludm9rZWQgd2hlbiBjcml0aWNhbCBl
cnJvciBoYXBwZW5zIHdoaWNoIG1heSBwcmV2ZW50Ci0gIC8vIGZ1cnRoZXIgdXNlIG9mIG1lZGlh
IGNvZGVjIEFQSS4gTm93IGl0IG1lYW5zIHRoYXQgb25lIG9mIG1lZGlhIGNvZGVjIGluc3RhbmNl
cwotICAvLyBpcyBoYW5naW5nIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgaW4gdGhlIG5leHQg
Y2FsbC4KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckVy
cm9yQ2FsbGJhY2sgewotICAgIHZvaWQgb25NZWRpYUNvZGVjVmlkZW9FbmNvZGVyQ3JpdGljYWxF
cnJvcihpbnQgY29kZWNFcnJvcnMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldEVy
cm9yQ2FsbGJhY2soTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxs
YmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJTZXQgZXJyb3IgY2FsbGJhY2siKTsKLSAgICBN
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOwotICB9
Ci0KLSAgLy8gRnVuY3Rpb25zIHRvIGRpc2FibGUgSFcgZW5jb2RpbmcgLSBjYW4gYmUgY2FsbGVk
IGZyb20gYXBwbGljYXRpb25zIGZvciBwbGF0Zm9ybXMKLSAgLy8gd2hpY2ggaGF2ZSBrbm93biBI
VyBkZWNvZGluZyBwcm9ibGVtcy4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVWcDhId0Nv
ZGVjKCkgewotICAgIExvZ2dpbmcudyhUQUcsICJWUDggZW5jb2RpbmcgaXMgZGlzYWJsZWQgYnkg
YXBwbGljYXRpb24uIik7Ci0gICAgaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoVlA4X01JTUVf
VFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVZwOUh3Q29kZWMoKSB7
Ci0gICAgTG9nZ2luZy53KFRBRywgIlZQOSBlbmNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNh
dGlvbi4iKTsKLSAgICBod0VuY29kZXJEaXNhYmxlZFR5cGVzLmFkZChWUDlfTUlNRV9UWVBFKTsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlSDI2NEh3Q29kZWMoKSB7Ci0gICAg
TG9nZ2luZy53KFRBRywgIkguMjY0IGVuY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9u
LiIpOwotICAgIGh3RW5jb2RlckRpc2FibGVkVHlwZXMuYWRkKEgyNjRfTUlNRV9UWVBFKTsKLSAg
fQotCi0gIC8vIEZ1bmN0aW9ucyB0byBxdWVyeSBpZiBIVyBlbmNvZGluZyBpcyBzdXBwb3J0ZWQu
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOEh3U3VwcG9ydGVkKCkgewotICAgIHJldHVy
biAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDhfTUlNRV9UWVBFKQotICAgICAg
ICAmJiAoZmluZEh3RW5jb2RlcihWUDhfTUlNRV9UWVBFLCB2cDhId0xpc3QsIHN1cHBvcnRlZENv
bG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDlI
d1N1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFp
bnMoVlA5X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA5X01JTUVfVFlQ
RSwgdnA5SHdMaXN0LCBzdXBwb3J0ZWRDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBib29sZWFuIGlzSDI2NEh3U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdF
bmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhIMjY0X01JTUVfVFlQRSkKLSAgICAgICAgJiYg
KGZpbmRId0VuY29kZXIoSDI2NF9NSU1FX1RZUEUsIGgyNjRId0xpc3QsIHN1cHBvcnRlZENvbG9y
TGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDhId1N1
cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxlZFR5
cGVzLmNvbnRhaW5zKFZQOF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVyKFZQ
OF9NSU1FX1RZUEUsIHZwOEh3TGlzdCwgc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCkgIT0gbnVs
bCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDlId1N1cHBvcnRlZFVzaW5n
VGV4dHVyZXMoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRhaW5z
KFZQOV9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVyKFZQOV9NSU1FX1RZUEUs
IHZwOUh3TGlzdCwgc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNIMjY0SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkg
ewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhIMjY0X01JTUVf
VFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoSDI2NF9NSU1FX1RZUEUsIGgyNjRId0xp
c3QsIHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgLy8gSGVs
cGVyIHN0cnVjdCBmb3IgZmluZEh3RW5jb2RlcigpIGJlbG93LgotICBwcml2YXRlIHN0YXRpYyBj
bGFzcyBFbmNvZGVyUHJvcGVydGllcyB7Ci0gICAgcHVibGljIEVuY29kZXJQcm9wZXJ0aWVzKAot
ICAgICAgICBTdHJpbmcgY29kZWNOYW1lLCBpbnQgY29sb3JGb3JtYXQsIEJpdHJhdGVBZGp1c3Rt
ZW50VHlwZSBiaXRyYXRlQWRqdXN0bWVudFR5cGUpIHsKLSAgICAgIHRoaXMuY29kZWNOYW1lID0g
Y29kZWNOYW1lOwotICAgICAgdGhpcy5jb2xvckZvcm1hdCA9IGNvbG9yRm9ybWF0OwotICAgICAg
dGhpcy5iaXRyYXRlQWRqdXN0bWVudFR5cGUgPSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0gICAg
fQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgY29kZWNOYW1lOyAvLyBPcGVuTWF4IGNvbXBvbmVu
dCBuYW1lIGZvciBIVyBjb2RlYy4KLSAgICBwdWJsaWMgZmluYWwgaW50IGNvbG9yRm9ybWF0OyAv
LyBDb2xvciBmb3JtYXQgc3VwcG9ydGVkIGJ5IGNvZGVjLgotICAgIHB1YmxpYyBmaW5hbCBCaXRy
YXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlOyAvLyBCaXRyYXRlIGFkanVz
dG1lbnQgdHlwZQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgRW5jb2RlclByb3BlcnRpZXMgZmlu
ZEh3RW5jb2RlcigKLSAgICAgIFN0cmluZyBtaW1lLCBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHN1
cHBvcnRlZEh3Q29kZWNQcm9wZXJ0aWVzLCBpbnRbXSBjb2xvckxpc3QpIHsKLSAgICAvLyBNZWRp
YUNvZGVjLnNldFBhcmFtZXRlcnMgaXMgbWlzc2luZyBmb3IgSkIgYW5kIGJlbG93LCBzbyBiaXRy
YXRlCi0gICAgLy8gY2FuIG5vdCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseS4KLSAgICBpZiAoQnVp
bGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGRldmljZSBpcyBpbiBILjI2
NCBleGNlcHRpb24gbGlzdC4KLSAgICBpZiAobWltZS5lcXVhbHMoSDI2NF9NSU1FX1RZUEUpKSB7
Ci0gICAgICBMaXN0PFN0cmluZz4gZXhjZXB0aW9uTW9kZWxzID0gQXJyYXlzLmFzTGlzdChIMjY0
X0hXX0VYQ0VQVElPTl9NT0RFTFMpOwotICAgICAgaWYgKGV4Y2VwdGlvbk1vZGVscy5jb250YWlu
cyhCdWlsZC5NT0RFTCkpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIk1vZGVsOiAiICsgQnVp
bGQuTU9ERUwgKyAiIGhhcyBibGFjayBsaXN0ZWQgSC4yNjQgZW5jb2Rlci4iKTsKLSAgICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN
ZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0NvdW50KCk7ICsraSkgewotICAgICAgTWVkaWFDb2RlY0lu
Zm8gaW5mbyA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBpbmZvID0gTWVkaWFDb2RlY0xp
c3QuZ2V0Q29kZWNJbmZvQXQoaSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNl
cHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGVuY29k
ZXIgY29kZWMgaW5mbyIsIGUpOwotICAgICAgfQotICAgICAgaWYgKGluZm8gPT0gbnVsbCB8fCAh
aW5mby5pc0VuY29kZXIoKSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIFN0
cmluZyBuYW1lID0gbnVsbDsKLSAgICAgIGZvciAoU3RyaW5nIG1pbWVUeXBlIDogaW5mby5nZXRT
dXBwb3J0ZWRUeXBlcygpKSB7Ci0gICAgICAgIGlmIChtaW1lVHlwZS5lcXVhbHMobWltZSkpIHsK
LSAgICAgICAgICBuYW1lID0gaW5mby5nZXROYW1lKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChuYW1lID09IG51bGwpIHsKLSAgICAgICAgY29udGlu
dWU7IC8vIE5vIEhXIHN1cHBvcnQgaW4gdGhpcyBjb2RlYzsgdHJ5IHRoZSBuZXh0IG9uZS4KLSAg
ICAgIH0KLSAgICAgIExvZ2dpbmcudihUQUcsICJGb3VuZCBjYW5kaWRhdGUgZW5jb2RlciAiICsg
bmFtZSk7Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgc3VwcG9ydGVkIEhXIGVuY29kZXIu
Ci0gICAgICBib29sZWFuIHN1cHBvcnRlZENvZGVjID0gZmFsc2U7Ci0gICAgICBCaXRyYXRlQWRq
dXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gQml0cmF0ZUFkanVzdG1lbnRUeXBl
Lk5PX0FESlVTVE1FTlQ7Ci0gICAgICBmb3IgKE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGNvZGVjUHJv
cGVydGllcyA6IHN1cHBvcnRlZEh3Q29kZWNQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlmIChuYW1l
LnN0YXJ0c1dpdGgoY29kZWNQcm9wZXJ0aWVzLmNvZGVjUHJlZml4KSkgewotICAgICAgICAgIGlm
IChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBjb2RlY1Byb3BlcnRpZXMubWluU2RrKSB7Ci0gICAg
ICAgICAgICBMb2dnaW5nLncoCi0gICAgICAgICAgICAgICAgVEFHLCAiQ29kZWMgIiArIG5hbWUg
KyAiIGlzIGRpc2FibGVkIGR1ZSB0byBTREsgdmVyc2lvbiAiICsgQnVpbGQuVkVSU0lPTi5TREtf
SU5UKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAo
Y29kZWNQcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50VHlwZSAhPSBCaXRyYXRlQWRqdXN0bWVu
dFR5cGUuTk9fQURKVVNUTUVOVCkgewotICAgICAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRUeXBl
ID0gY29kZWNQcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50VHlwZTsKLSAgICAgICAgICAgIExv
Z2dpbmcudygKLSAgICAgICAgICAgICAgICBUQUcsICJDb2RlYyAiICsgbmFtZSArICIgcmVxdWly
ZXMgYml0cmF0ZSBhZGp1c3RtZW50OiAiICsgYml0cmF0ZUFkanVzdG1lbnRUeXBlKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgc3VwcG9ydGVkQ29kZWMgPSB0cnVlOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXN1cHBvcnRlZENvZGVjKSB7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiBIVyBjb2RlYyBzdXBw
b3J0cyBrbm93biBjb2xvciBmb3JtYXQuCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcyBjYXBhYmls
aXRpZXM7Ci0gICAgICB0cnkgewotICAgICAgICBjYXBhYmlsaXRpZXMgPSBpbmZvLmdldENhcGFi
aWxpdGllc0ZvclR5cGUobWltZSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNl
cHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGVuY29k
ZXIgY2FwYWJpbGl0aWVzIiwgZSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAg
Zm9yIChpbnQgY29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3JtYXRzKSB7Ci0gICAg
ICAgIExvZ2dpbmcudihUQUcsICIgICBDb2xvcjogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhj
b2xvckZvcm1hdCkpOwotICAgICAgfQotCi0gICAgICBmb3IgKGludCBzdXBwb3J0ZWRDb2xvckZv
cm1hdCA6IGNvbG9yTGlzdCkgewotICAgICAgICBmb3IgKGludCBjb2RlY0NvbG9yRm9ybWF0IDog
Y2FwYWJpbGl0aWVzLmNvbG9yRm9ybWF0cykgewotICAgICAgICAgIGlmIChjb2RlY0NvbG9yRm9y
bWF0ID09IHN1cHBvcnRlZENvbG9yRm9ybWF0KSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBzdXBw
b3J0ZWQgSFcgZW5jb2Rlci4KLSAgICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3VuZCB0YXJn
ZXQgZW5jb2RlciBmb3IgbWltZSAiICsgbWltZSArICIgOiAiICsgbmFtZSArICIuIENvbG9yOiAw
eCIKLSAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvZGVjQ29sb3JG
b3JtYXQpICsgIi4gQml0cmF0ZSBhZGp1c3RtZW50OiAiCi0gICAgICAgICAgICAgICAgICAgICsg
Yml0cmF0ZUFkanVzdG1lbnRUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRW5jb2RlclBy
b3BlcnRpZXMobmFtZSwgY29kZWNDb2xvckZvcm1hdCwgYml0cmF0ZUFkanVzdG1lbnRUeXBlKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7
IC8vIE5vIEhXIGVuY29kZXIuCi0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tPbk1lZGlhQ29k
ZWNUaHJlYWQoKSB7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQuZ2V0SWQoKSAhPSBUaHJlYWQu
Y3VycmVudFRocmVhZCgpLmdldElkKCkpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIHByZXZpb3VzbHkgb3BlcmF0ZWQgb24gIiArIG1l
ZGlhQ29kZWNUaHJlYWQKLSAgICAgICAgICArICIgYnV0IGlzIG5vdyBjYWxsZWQgb24gIiArIFRo
cmVhZC5jdXJyZW50VGhyZWFkKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9p
ZCBwcmludFN0YWNrVHJhY2UoKSB7Ci0gICAgaWYgKHJ1bm5pbmdJbnN0YW5jZSAhPSBudWxsICYm
IHJ1bm5pbmdJbnN0YW5jZS5tZWRpYUNvZGVjVGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNr
VHJhY2VFbGVtZW50W10gbWVkaWFDb2RlY1N0YWNrVHJhY2VzID0gcnVubmluZ0luc3RhbmNlLm1l
ZGlhQ29kZWNUaHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgaWYgKG1lZGlhQ29kZWNTdGFj
a1RyYWNlcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyIHN0YWNrcyB0cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxl
bWVudCBzdGFja1RyYWNlIDogbWVkaWFDb2RlY1N0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9n
Z2luZy5kKFRBRywgc3RhY2tUcmFjZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLSAgfQotCi0gIHN0YXRpYyBNZWRpYUNvZGVjIGNyZWF0ZUJ5Q29kZWNOYW1lKFN0cmlu
ZyBjb2RlY05hbWUpIHsKLSAgICB0cnkgewotICAgICAgLy8gSW4gdGhlIEwtU0RLIHRoaXMgY2Fs
bCBjYW4gdGhyb3cgSU9FeGNlcHRpb24gc28gaW4gb3JkZXIgdG8gd29yayBpbgotICAgICAgLy8g
Ym90aCBjYXNlcyBjYXRjaCBhbiBleGNlcHRpb24uCi0gICAgICByZXR1cm4gTWVkaWFDb2RlYy5j
cmVhdGVCeUNvZGVjTmFtZShjb2RlY05hbWUpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBib29sZWFuIGluaXRFbmNvZGUo
VmlkZW9Db2RlY1R5cGUgdHlwZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQga2JwcywgaW50
IGZwcywKLSAgICAgIEVnbEJhc2UxNC5Db250ZXh0IHNoYXJlZENvbnRleHQpIHsKLSAgICBmaW5h
bCBib29sZWFuIHVzZVN1cmZhY2UgPSBzaGFyZWRDb250ZXh0ICE9IG51bGw7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgIkphdmEgaW5pdEVuY29kZTogIiArIHR5cGUgKyAiIDogIiArIHdpZHRoICsgIiB4
ICIgKyBoZWlnaHQgKyAiLiBAICIgKyBrYnBzCi0gICAgICAgICAgICArICIga2Jwcy4gRnBzOiAi
ICsgZnBzICsgIi4gRW5jb2RlIGZyb20gdGV4dHVyZSA6ICIgKyB1c2VTdXJmYWNlKTsKLQotICAg
IHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICBpZiAo
bWVkaWFDb2RlY1RocmVhZCAhPSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigiRm9yZ290IHRvIHJlbGVhc2UoKT8iKTsKLSAgICB9Ci0gICAgRW5jb2RlclByb3BlcnRp
ZXMgcHJvcGVydGllcyA9IG51bGw7Ci0gICAgU3RyaW5nIG1pbWUgPSBudWxsOwotICAgIGludCBr
ZXlGcmFtZUludGVydmFsU2VjID0gMDsKLSAgICBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5W
SURFT19DT0RFQ19WUDgpIHsKLSAgICAgIG1pbWUgPSBWUDhfTUlNRV9UWVBFOwotICAgICAgcHJv
cGVydGllcyA9IGZpbmRId0VuY29kZXIoCi0gICAgICAgICAgVlA4X01JTUVfVFlQRSwgdnA4SHdM
aXN0LCB1c2VTdXJmYWNlID8gc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCA6IHN1cHBvcnRlZENv
bG9yTGlzdCk7Ci0gICAgICBrZXlGcmFtZUludGVydmFsU2VjID0gMTAwOwotICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDkpIHsKLSAgICAgIG1pbWUg
PSBWUDlfTUlNRV9UWVBFOwotICAgICAgcHJvcGVydGllcyA9IGZpbmRId0VuY29kZXIoCi0gICAg
ICAgICAgVlA5X01JTUVfVFlQRSwgdnA5SHdMaXN0LCB1c2VTdXJmYWNlID8gc3VwcG9ydGVkU3Vy
ZmFjZUNvbG9yTGlzdCA6IHN1cHBvcnRlZENvbG9yTGlzdCk7Ci0gICAgICBrZXlGcmFtZUludGVy
dmFsU2VjID0gMTAwOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURF
T19DT0RFQ19IMjY0KSB7Ci0gICAgICBtaW1lID0gSDI2NF9NSU1FX1RZUEU7Ci0gICAgICBwcm9w
ZXJ0aWVzID0gZmluZEh3RW5jb2RlcigKLSAgICAgICAgICBIMjY0X01JTUVfVFlQRSwgaDI2NEh3
TGlzdCwgdXNlU3VyZmFjZSA/IHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QgOiBzdXBwb3J0ZWRD
b2xvckxpc3QpOwotICAgICAga2V5RnJhbWVJbnRlcnZhbFNlYyA9IDIwOwotICAgIH0KLSAgICBp
ZiAocHJvcGVydGllcyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiQ2FuIG5vdCBmaW5kIEhXIGVuY29kZXIgZm9yICIgKyB0eXBlKTsKLSAgICB9Ci0gICAgcnVu
bmluZ0luc3RhbmNlID0gdGhpczsgLy8gRW5jb2RlciBpcyBub3cgcnVubmluZyBhbmQgY2FuIGJl
IHF1ZXJpZWQgZm9yIHN0YWNrIHRyYWNlcy4KLSAgICBjb2xvckZvcm1hdCA9IHByb3BlcnRpZXMu
Y29sb3JGb3JtYXQ7Ci0gICAgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gcHJvcGVydGllcy5iaXRy
YXRlQWRqdXN0bWVudFR5cGU7Ci0gICAgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRy
YXRlQWRqdXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQpIHsKLSAgICAgIGZwcyA9IEJJ
VFJBVEVfQURKVVNUTUVOVF9GUFM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZwcyA9IE1hdGgubWlu
KGZwcywgTUFYSU1VTV9JTklUSUFMX0ZQUyk7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJD
b2xvciBmb3JtYXQ6ICIgKyBjb2xvckZvcm1hdCArICIuIEJpdHJhdGUgYWRqdXN0bWVudDogIiAr
IGJpdHJhdGVBZGp1c3RtZW50VHlwZQotICAgICAgICAgICAgKyAiLiBJbml0aWFsIGZwczogIiAr
IGZwcyk7Ci0gICAgdGFyZ2V0Qml0cmF0ZUJwcyA9IDEwMDAgKiBrYnBzOwotICAgIHRhcmdldEZw
cyA9IGZwczsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3JNYXggPSB0YXJnZXRCaXRyYXRlQnBzIC8g
OC4wOwotICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IDA7Ci0gICAgYml0cmF0ZU9ic2VydmF0aW9u
VGltZU1zID0gMDsKLSAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwID0gMDsKLQotICAgIG1l
ZGlhQ29kZWNUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgIHRyeSB7Ci0gICAg
ICBNZWRpYUZvcm1hdCBmb3JtYXQgPSBNZWRpYUZvcm1hdC5jcmVhdGVWaWRlb0Zvcm1hdChtaW1l
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktF
WV9CSVRfUkFURSwgdGFyZ2V0Qml0cmF0ZUJwcyk7Ci0gICAgICBmb3JtYXQuc2V0SW50ZWdlcigi
Yml0cmF0ZS1tb2RlIiwgVklERU9fQ29udHJvbFJhdGVDb25zdGFudCk7Ci0gICAgICBmb3JtYXQu
c2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfQ09MT1JfRk9STUFULCBwcm9wZXJ0aWVzLmNvbG9y
Rm9ybWF0KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9GUkFNRV9S
QVRFLCB0YXJnZXRGcHMpOwotICAgICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZ
X0lfRlJBTUVfSU5URVJWQUwsIGtleUZyYW1lSW50ZXJ2YWxTZWMpOwotICAgICAgTG9nZ2luZy5k
KFRBRywgIiAgRm9ybWF0OiAiICsgZm9ybWF0KTsKLSAgICAgIG1lZGlhQ29kZWMgPSBjcmVhdGVC
eUNvZGVjTmFtZShwcm9wZXJ0aWVzLmNvZGVjTmFtZSk7Ci0gICAgICB0aGlzLnR5cGUgPSB0eXBl
OwotICAgICAgaWYgKG1lZGlhQ29kZWMgPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFH
LCAiQ2FuIG5vdCBjcmVhdGUgbWVkaWEgZW5jb2RlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICB9Ci0gICAgICBtZWRpYUNvZGVjLmNvbmZpZ3VyZShmb3JtYXQsIG51bGwsIG51bGws
IE1lZGlhQ29kZWMuQ09ORklHVVJFX0ZMQUdfRU5DT0RFKTsKLQotICAgICAgaWYgKHVzZVN1cmZh
Y2UpIHsKLSAgICAgICAgZWdsQmFzZSA9IG5ldyBFZ2xCYXNlMTQoc2hhcmVkQ29udGV4dCwgRWds
QmFzZS5DT05GSUdfUkVDT1JEQUJMRSk7Ci0gICAgICAgIC8vIENyZWF0ZSBhbiBpbnB1dCBzdXJm
YWNlIGFuZCBrZWVwIGEgcmVmZXJlbmNlIHNpbmNlIHdlIG11c3QgcmVsZWFzZSB0aGUgc3VyZmFj
ZSB3aGVuIGRvbmUuCi0gICAgICAgIGlucHV0U3VyZmFjZSA9IG1lZGlhQ29kZWMuY3JlYXRlSW5w
dXRTdXJmYWNlKCk7Ci0gICAgICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShpbnB1dFN1cmZhY2Up
OwotICAgICAgICBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgICB9Ci0gICAgICBt
ZWRpYUNvZGVjLnN0YXJ0KCk7Ci0gICAgICBvdXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRP
dXRwdXRCdWZmZXJzKCk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiT3V0cHV0IGJ1ZmZlcnM6ICIg
KyBvdXRwdXRCdWZmZXJzLmxlbmd0aCk7Ci0KLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNl
cHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImluaXRFbmNvZGUgZmFpbGVkIiwgZSk7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAg
Qnl0ZUJ1ZmZlcltdIGdldElucHV0QnVmZmVycygpIHsKLSAgICBCeXRlQnVmZmVyW10gaW5wdXRC
dWZmZXJzID0gbWVkaWFDb2RlYy5nZXRJbnB1dEJ1ZmZlcnMoKTsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiSW5wdXQgYnVmZmVyczogIiArIGlucHV0QnVmZmVycy5sZW5ndGgpOwotICAgIHJldHVybiBp
bnB1dEJ1ZmZlcnM7Ci0gIH0KLQotICBib29sZWFuIGVuY29kZUJ1ZmZlcigKLSAgICAgIGJvb2xl
YW4gaXNLZXlmcmFtZSwgaW50IGlucHV0QnVmZmVyLCBpbnQgc2l6ZSwgbG9uZyBwcmVzZW50YXRp
b25UaW1lc3RhbXBVcykgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5
IHsKLSAgICAgIGlmIChpc0tleWZyYW1lKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgTWVkaWFDb2Rl
YyB3b3VsZCBob25vciBCVUZGRVJfRkxBR19TWU5DX0ZSQU1FIHNvIHdlIGNvdWxkCi0gICAgICAg
IC8vIGluZGljYXRlIHRoaXMgaW4gcXVldWVJbnB1dEJ1ZmZlcigpIGJlbG93IGFuZCBndWFyYW50
ZWUgX3RoaXNfIGZyYW1lCi0gICAgICAgIC8vIGJlIGVuY29kZWQgYXMgYSBrZXkgZnJhbWUsIGJ1
dCBzYWRseSB0aGF0IGZsYWcgaXMgaWdub3JlZC4gIEluc3RlYWQsCi0gICAgICAgIC8vIHdlIHJl
cXVlc3QgYSBrZXkgZnJhbWUgInNvb24iLgotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3luYyBm
cmFtZSByZXF1ZXN0Iik7Ci0gICAgICAgIEJ1bmRsZSBiID0gbmV3IEJ1bmRsZSgpOwotICAgICAg
ICBiLnB1dEludChNZWRpYUNvZGVjLlBBUkFNRVRFUl9LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FLCAw
KTsKLSAgICAgICAgbWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzKGIpOwotICAgICAgfQotICAgICAg
bWVkaWFDb2RlYy5xdWV1ZUlucHV0QnVmZmVyKGlucHV0QnVmZmVyLCAwLCBzaXplLCBwcmVzZW50
YXRpb25UaW1lc3RhbXBVcywgMCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImVuY29kZUJ1
ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBi
b29sZWFuIGVuY29kZVRleHR1cmUoYm9vbGVhbiBpc0tleWZyYW1lLCBpbnQgb2VzVGV4dHVyZUlk
LCBmbG9hdFtdIHRyYW5zZm9ybWF0aW9uTWF0cml4LAotICAgICAgbG9uZyBwcmVzZW50YXRpb25U
aW1lc3RhbXBVcykgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsK
LSAgICAgIGlmIChpc0tleWZyYW1lKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTeW5jIGZy
YW1lIHJlcXVlc3QiKTsKLSAgICAgICAgQnVuZGxlIGIgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAg
IGIucHV0SW50KE1lZGlhQ29kZWMuUEFSQU1FVEVSX0tFWV9SRVFVRVNUX1NZTkNfRlJBTUUsIDAp
OwotICAgICAgICBtZWRpYUNvZGVjLnNldFBhcmFtZXRlcnMoYik7Ci0gICAgICB9Ci0gICAgICBl
Z2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICAvLyBUT0RPKHBlcmtqKTogZ2xDbGVhcigpIHNo
b3VsZG4ndCBiZSBuZWNlc3Nhcnkgc2luY2UgZXZlcnkgcGl4ZWwgaXMgY292ZXJlZCBhbnl3YXks
Ci0gICAgICAvLyBidXQgaXQncyBhIHdvcmthcm91bmQgZm9yIGJ1ZyB3ZWJydGM6NTE0Ny4KLSAg
ICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgIGRy
YXdlci5kcmF3T2VzKG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtYXRpb25NYXRyaXgsIHdpZHRoLCBo
ZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgZWdsQmFzZS5zd2FwQnVmZmVycyhU
aW1lVW5pdC5NSUNST1NFQ09ORFMudG9OYW5vcyhwcmVzZW50YXRpb25UaW1lc3RhbXBVcykpOwot
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICBMb2dnaW5nLmUoVEFHLCAiZW5jb2RlVGV4dHVyZSBmYWlsZWQiLCBlKTsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIiKTsKLSAgICBjaGVja09uTWVkaWFDb2RlY1Ro
cmVhZCgpOwotCi0gICAgLy8gUnVuIE1lZGlhY29kZWMgc3RvcCgpIGFuZCByZWxlYXNlKCkgb24g
c2VwYXJhdGUgdGhyZWFkIHNpbmNlIHNvbWV0aW1lCi0gICAgLy8gTWVkaWFjb2RlYy5zdG9wKCkg
bWF5IGhhbmcuCi0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggcmVsZWFzZURvbmUgPSBuZXcgQ291
bnREb3duTGF0Y2goMSk7Ci0KLSAgICBSdW5uYWJsZSBydW5NZWRpYUNvZGVjUmVsZWFzZSA9IG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICB0cnkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VF
bmNvZGVyIG9uIHJlbGVhc2UgdGhyZWFkIik7Ci0gICAgICAgICAgbWVkaWFDb2RlYy5zdG9wKCk7
Ci0gICAgICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlKCk7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRB
RywgIkphdmEgcmVsZWFzZUVuY29kZXIgb24gcmVsZWFzZSB0aHJlYWQgZG9uZSIpOwotICAgICAg
ICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJNZWRp
YSBlbmNvZGVyIHJlbGVhc2UgZmFpbGVkIiwgZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVsZWFz
ZURvbmUuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBuZXcgVGhyZWFkKHJ1bk1l
ZGlhQ29kZWNSZWxlYXNlKS5zdGFydCgpOwotCi0gICAgaWYgKCFUaHJlYWRVdGlscy5hd2FpdFVu
aW50ZXJydXB0aWJseShyZWxlYXNlRG9uZSwgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VUX01T
KSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGVuY29kZXIgcmVsZWFzZSB0aW1lb3V0
Iik7Ci0gICAgICBjb2RlY0Vycm9ycysrOwotICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgIT0gbnVs
bCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW52b2tlIGNvZGVjIGVycm9yIGNhbGxiYWNr
LiBFcnJvcnM6ICIgKyBjb2RlY0Vycm9ycyk7Ci0gICAgICAgIGVycm9yQ2FsbGJhY2sub25NZWRp
YUNvZGVjVmlkZW9FbmNvZGVyQ3JpdGljYWxFcnJvcihjb2RlY0Vycm9ycyk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgbWVkaWFDb2RlYyA9IG51bGw7Ci0gICAgbWVkaWFDb2RlY1RocmVhZCA9IG51
bGw7Ci0gICAgaWYgKGRyYXdlciAhPSBudWxsKSB7Ci0gICAgICBkcmF3ZXIucmVsZWFzZSgpOwot
ICAgICAgZHJhd2VyID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGVnbEJhc2UgIT0gbnVsbCkgewot
ICAgICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gICAgICBlZ2xCYXNlID0gbnVsbDsKLSAgICB9Ci0g
ICAgaWYgKGlucHV0U3VyZmFjZSAhPSBudWxsKSB7Ci0gICAgICBpbnB1dFN1cmZhY2UucmVsZWFz
ZSgpOwotICAgICAgaW5wdXRTdXJmYWNlID0gbnVsbDsKLSAgICB9Ci0gICAgcnVubmluZ0luc3Rh
bmNlID0gbnVsbDsKLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRW5jb2RlciBkb25l
Iik7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UmF0ZXMoaW50IGticHMsIGludCBmcmFt
ZVJhdGUpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotCi0gICAgaW50IGNvZGVj
Qml0cmF0ZUJwcyA9IDEwMDAgKiBrYnBzOwotICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFR5cGUg
PT0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLkRZTkFNSUNfQURKVVNUTUVOVCkgewotICAgICAgYml0
cmF0ZUFjY3VtdWxhdG9yTWF4ID0gY29kZWNCaXRyYXRlQnBzIC8gOC4wOwotICAgICAgaWYgKHRh
cmdldEJpdHJhdGVCcHMgPiAwICYmIGNvZGVjQml0cmF0ZUJwcyA8IHRhcmdldEJpdHJhdGVCcHMp
IHsKLSAgICAgICAgLy8gUmVzY2FsZSB0aGUgYWNjdW11bGF0b3IgbGV2ZWwgaWYgdGhlIGFjY3Vt
dWxhdG9yIG1heCBkZWNyZWFzZXMKLSAgICAgICAgYml0cmF0ZUFjY3VtdWxhdG9yID0gYml0cmF0
ZUFjY3VtdWxhdG9yICogY29kZWNCaXRyYXRlQnBzIC8gdGFyZ2V0Qml0cmF0ZUJwczsKLSAgICAg
IH0KLSAgICB9Ci0gICAgdGFyZ2V0Qml0cmF0ZUJwcyA9IGNvZGVjQml0cmF0ZUJwczsKLSAgICB0
YXJnZXRGcHMgPSBmcmFtZVJhdGU7Ci0KLSAgICAvLyBBZGp1c3QgYWN0dWFsIGVuY29kZXIgYml0
cmF0ZSBiYXNlZCBvbiBiaXRyYXRlIGFkanVzdG1lbnQgdHlwZS4KLSAgICBpZiAoYml0cmF0ZUFk
anVzdG1lbnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5GUkFNRVJBVEVfQURKVVNUTUVO
VCAmJiB0YXJnZXRGcHMgPiAwKSB7Ci0gICAgICBjb2RlY0JpdHJhdGVCcHMgPSBCSVRSQVRFX0FE
SlVTVE1FTlRfRlBTICogdGFyZ2V0Qml0cmF0ZUJwcyAvIHRhcmdldEZwczsKLSAgICAgIExvZ2dp
bmcudihUQUcsCi0gICAgICAgICAgInNldFJhdGVzOiAiICsga2JwcyArICIgLT4gIiArIChjb2Rl
Y0JpdHJhdGVCcHMgLyAxMDAwKSArICIga2Jwcy4gRnBzOiAiICsgdGFyZ2V0RnBzKTsKLSAgICB9
IGVsc2UgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRqdXN0bWVudFR5cGUu
RFlOQU1JQ19BREpVU1RNRU5UKSB7Ci0gICAgICBMb2dnaW5nLnYoVEFHLCAic2V0UmF0ZXM6ICIg
KyBrYnBzICsgIiBrYnBzLiBGcHM6ICIgKyB0YXJnZXRGcHMgKyAiLiBFeHBTY2FsZTogIgotICAg
ICAgICAgICAgICArIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHApOwotICAgICAgaWYgKGJpdHJh
dGVBZGp1c3RtZW50U2NhbGVFeHAgIT0gMCkgewotICAgICAgICBjb2RlY0JpdHJhdGVCcHMgPSAo
aW50KSAoY29kZWNCaXRyYXRlQnBzICogZ2V0Qml0cmF0ZVNjYWxlKGJpdHJhdGVBZGp1c3RtZW50
U2NhbGVFeHApKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgTG9nZ2luZy52KFRBRywg
InNldFJhdGVzOiAiICsga2JwcyArICIga2Jwcy4gRnBzOiAiICsgdGFyZ2V0RnBzKTsKLSAgICB9
Ci0KLSAgICB0cnkgewotICAgICAgQnVuZGxlIHBhcmFtcyA9IG5ldyBCdW5kbGUoKTsKLSAgICAg
IHBhcmFtcy5wdXRJbnQoTWVkaWFDb2RlYy5QQVJBTUVURVJfS0VZX1ZJREVPX0JJVFJBVEUsIGNv
ZGVjQml0cmF0ZUJwcyk7Ci0gICAgICBtZWRpYUNvZGVjLnNldFBhcmFtZXRlcnMocGFyYW1zKTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAic2V0UmF0ZXMgZmFpbGVkIiwgZSk7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gRGVxdWV1ZSBhbiBpbnB1dCBidWZmZXIg
YW5kIHJldHVybiBpdHMgaW5kZXgsIC0xIGlmIG5vIGlucHV0IGJ1ZmZlciBpcwotICAvLyBhdmFp
bGFibGUsIG9yIC0yIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIgb3BlcmF0aXZlLgotICBpbnQg
ZGVxdWV1ZUlucHV0QnVmZmVyKCkgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0g
ICAgdHJ5IHsKLSAgICAgIHJldHVybiBtZWRpYUNvZGVjLmRlcXVldWVJbnB1dEJ1ZmZlcihERVFV
RVVFX1RJTUVPVVQpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICBMb2dnaW5nLmUoVEFHLCAiZGVxdWV1ZUludHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAg
ICAgIHJldHVybiAtMjsKLSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZvciBkZXF1
ZXVlT3V0cHV0QnVmZmVyKCkgYmVsb3cuCi0gIHN0YXRpYyBjbGFzcyBPdXRwdXRCdWZmZXJJbmZv
IHsKLSAgICBwdWJsaWMgT3V0cHV0QnVmZmVySW5mbygKLSAgICAgICAgaW50IGluZGV4LCBCeXRl
QnVmZmVyIGJ1ZmZlciwgYm9vbGVhbiBpc0tleUZyYW1lLCBsb25nIHByZXNlbnRhdGlvblRpbWVz
dGFtcFVzKSB7Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICB0aGlzLmJ1ZmZlciA9
IGJ1ZmZlcjsKLSAgICAgIHRoaXMuaXNLZXlGcmFtZSA9IGlzS2V5RnJhbWU7Ci0gICAgICB0aGlz
LnByZXNlbnRhdGlvblRpbWVzdGFtcFVzID0gcHJlc2VudGF0aW9uVGltZXN0YW1wVXM7Ci0gICAg
fQotCi0gICAgcHVibGljIGZpbmFsIGludCBpbmRleDsKLSAgICBwdWJsaWMgZmluYWwgQnl0ZUJ1
ZmZlciBidWZmZXI7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNLZXlGcmFtZTsKLSAgICBw
dWJsaWMgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UaW1lc3RhbXBVczsKLSAgfQotCi0gIC8vIERl
cXVldWUgYW5kIHJldHVybiBhbiBvdXRwdXQgYnVmZmVyLCBvciBudWxsIGlmIG5vIG91dHB1dCBp
cyByZWFkeS4gIFJldHVybgotICAvLyBhIGZha2UgT3V0cHV0QnVmZmVySW5mbyB3aXRoIGluZGV4
IC0xIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIgb3BlcmFibGUuCi0gIE91dHB1dEJ1ZmZlcklu
Zm8gZGVxdWV1ZU91dHB1dEJ1ZmZlcigpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgp
OwotICAgIHRyeSB7Ci0gICAgICBNZWRpYUNvZGVjLkJ1ZmZlckluZm8gaW5mbyA9IG5ldyBNZWRp
YUNvZGVjLkJ1ZmZlckluZm8oKTsKLSAgICAgIGludCByZXN1bHQgPSBtZWRpYUNvZGVjLmRlcXVl
dWVPdXRwdXRCdWZmZXIoaW5mbywgREVRVUVVRV9USU1FT1VUKTsKLSAgICAgIC8vIENoZWNrIGlm
IHRoaXMgaXMgY29uZmlnIGZyYW1lIGFuZCBzYXZlIGNvbmZpZ3VyYXRpb24gZGF0YS4KLSAgICAg
IGlmIChyZXN1bHQgPj0gMCkgewotICAgICAgICBib29sZWFuIGlzQ29uZmlnRnJhbWUgPSAoaW5m
by5mbGFncyAmIE1lZGlhQ29kZWMuQlVGRkVSX0ZMQUdfQ09ERUNfQ09ORklHKSAhPSAwOwotICAg
ICAgICBpZiAoaXNDb25maWdGcmFtZSkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJDb25m
aWcgZnJhbWUgZ2VuZXJhdGVkLiBPZmZzZXQ6ICIgKyBpbmZvLm9mZnNldCArICIuIFNpemU6ICIg
KyBpbmZvLnNpemUpOwotICAgICAgICAgIGNvbmZpZ0RhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRl
RGlyZWN0KGluZm8uc2l6ZSk7Ci0gICAgICAgICAgb3V0cHV0QnVmZmVyc1tyZXN1bHRdLnBvc2l0
aW9uKGluZm8ub2Zmc2V0KTsKLSAgICAgICAgICBvdXRwdXRCdWZmZXJzW3Jlc3VsdF0ubGltaXQo
aW5mby5vZmZzZXQgKyBpbmZvLnNpemUpOwotICAgICAgICAgIGNvbmZpZ0RhdGEucHV0KG91dHB1
dEJ1ZmZlcnNbcmVzdWx0XSk7Ci0gICAgICAgICAgLy8gUmVsZWFzZSBidWZmZXIgYmFjay4KLSAg
ICAgICAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIocmVzdWx0LCBmYWxzZSk7Ci0g
ICAgICAgICAgLy8gUXVlcnkgbmV4dCBvdXRwdXQuCi0gICAgICAgICAgcmVzdWx0ID0gbWVkaWFD
b2RlYy5kZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8sIERFUVVFVUVfVElNRU9VVCk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIGlmIChyZXN1bHQgPj0gMCkgewotICAgICAgICAvLyBNZWRpYUNv
ZGVjIGRvZXNuJ3QgY2FyZSBhYm91dCBCdWZmZXIgcG9zaXRpb24vcmVtYWluaW5nL2V0YyBzbyB3
ZSBjYW4KLSAgICAgICAgLy8gbWVzcyB3aXRoIHRoZW0gdG8gZ2V0IGEgc2xpY2UgYW5kIGF2b2lk
IGhhdmluZyB0byBwYXNzIGV4dHJhCi0gICAgICAgIC8vIChCdWZmZXJJbmZvLXJlbGF0ZWQpIHBh
cmFtZXRlcnMgYmFjayB0byBDKysuCi0gICAgICAgIEJ5dGVCdWZmZXIgb3V0cHV0QnVmZmVyID0g
b3V0cHV0QnVmZmVyc1tyZXN1bHRdLmR1cGxpY2F0ZSgpOwotICAgICAgICBvdXRwdXRCdWZmZXIu
cG9zaXRpb24oaW5mby5vZmZzZXQpOwotICAgICAgICBvdXRwdXRCdWZmZXIubGltaXQoaW5mby5v
ZmZzZXQgKyBpbmZvLnNpemUpOwotICAgICAgICByZXBvcnRFbmNvZGVkRnJhbWUoaW5mby5zaXpl
KTsKLQotICAgICAgICAvLyBDaGVjayBrZXkgZnJhbWUgZmxhZy4KLSAgICAgICAgYm9vbGVhbiBp
c0tleUZyYW1lID0gKGluZm8uZmxhZ3MgJiBNZWRpYUNvZGVjLkJVRkZFUl9GTEFHX1NZTkNfRlJB
TUUpICE9IDA7Ci0gICAgICAgIGlmIChpc0tleUZyYW1lKSB7Ci0gICAgICAgICAgTG9nZ2luZy5k
KFRBRywgIlN5bmMgZnJhbWUgZ2VuZXJhdGVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlz
S2V5RnJhbWUgJiYgdHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19IMjY0KSB7Ci0g
ICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkFwcGVuZGluZyBjb25maWcgZnJhbWUgb2Ygc2l6ZSAi
ICsgY29uZmlnRGF0YS5jYXBhY2l0eSgpCi0gICAgICAgICAgICAgICAgICArICIgdG8gb3V0cHV0
IGJ1ZmZlciB3aXRoIG9mZnNldCAiICsgaW5mby5vZmZzZXQgKyAiLCBzaXplICIgKyBpbmZvLnNp
emUpOwotICAgICAgICAgIC8vIEZvciBILjI2NCBrZXkgZnJhbWUgYXBwZW5kIFNQUyBhbmQgUFBT
IE5BTHMgYXQgdGhlIHN0YXJ0Ci0gICAgICAgICAgQnl0ZUJ1ZmZlciBrZXlGcmFtZUJ1ZmZlciA9
IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoY29uZmlnRGF0YS5jYXBhY2l0eSgpICsgaW5mby5z
aXplKTsKLSAgICAgICAgICBjb25maWdEYXRhLnJld2luZCgpOwotICAgICAgICAgIGtleUZyYW1l
QnVmZmVyLnB1dChjb25maWdEYXRhKTsKLSAgICAgICAgICBrZXlGcmFtZUJ1ZmZlci5wdXQob3V0
cHV0QnVmZmVyKTsKLSAgICAgICAgICBrZXlGcmFtZUJ1ZmZlci5wb3NpdGlvbigwKTsKLSAgICAg
ICAgICByZXR1cm4gbmV3IE91dHB1dEJ1ZmZlckluZm8ocmVzdWx0LCBrZXlGcmFtZUJ1ZmZlciwg
aXNLZXlGcmFtZSwgaW5mby5wcmVzZW50YXRpb25UaW1lVXMpOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIHJldHVybiBuZXcgT3V0cHV0QnVmZmVySW5mbygKLSAgICAgICAgICAgICAgcmVz
dWx0LCBvdXRwdXRCdWZmZXIuc2xpY2UoKSwgaXNLZXlGcmFtZSwgaW5mby5wcmVzZW50YXRpb25U
aW1lVXMpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNvZGVj
LklORk9fT1VUUFVUX0JVRkZFUlNfQ0hBTkdFRCkgewotICAgICAgICBvdXRwdXRCdWZmZXJzID0g
bWVkaWFDb2RlYy5nZXRPdXRwdXRCdWZmZXJzKCk7Ci0gICAgICAgIHJldHVybiBkZXF1ZXVlT3V0
cHV0QnVmZmVyKCk7Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNvZGVjLklORk9f
T1VUUFVUX0ZPUk1BVF9DSEFOR0VEKSB7Ci0gICAgICAgIHJldHVybiBkZXF1ZXVlT3V0cHV0QnVm
ZmVyKCk7Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNvZGVjLklORk9fVFJZX0FH
QUlOX0xBVEVSKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oImRlcXVldWVPdXRwdXRCdWZmZXI6ICIgKyByZXN1bHQpOwot
ICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUo
VEFHLCAiZGVxdWV1ZU91dHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBuZXcg
T3V0cHV0QnVmZmVySW5mbygtMSwgbnVsbCwgZmFsc2UsIC0xKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIGRvdWJsZSBnZXRCaXRyYXRlU2NhbGUoaW50IGJpdHJhdGVBZGp1c3RtZW50U2NhbGVF
eHApIHsKLSAgICByZXR1cm4gTWF0aC5wb3coQklUUkFURV9DT1JSRUNUSU9OX01BWF9TQ0FMRSwK
LSAgICAgICAgKGRvdWJsZSkgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCAvIEJJVFJBVEVfQ09S
UkVDVElPTl9TVEVQUyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0RW5jb2RlZEZyYW1l
KGludCBzaXplKSB7Ci0gICAgaWYgKHRhcmdldEZwcyA9PSAwIHx8IGJpdHJhdGVBZGp1c3RtZW50
VHlwZSAhPSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuRFlOQU1JQ19BREpVU1RNRU5UKSB7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWNjdW11bGF0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3
ZWVuIGFjdGlhbCBhbmQgZXhwZWN0ZWQgZnJhbWUgc2l6ZXMuCi0gICAgZG91YmxlIGV4cGVjdGVk
Qnl0ZXNQZXJGcmFtZSA9IHRhcmdldEJpdHJhdGVCcHMgLyAoOC4wICogdGFyZ2V0RnBzKTsKLSAg
ICBiaXRyYXRlQWNjdW11bGF0b3IgKz0gKHNpemUgLSBleHBlY3RlZEJ5dGVzUGVyRnJhbWUpOwot
ICAgIGJpdHJhdGVPYnNlcnZhdGlvblRpbWVNcyArPSAxMDAwLjAgLyB0YXJnZXRGcHM7Ci0KLSAg
ICAvLyBQdXQgYSBjYXAgb24gdGhlIGFjY3VtdWxhdG9yLCBpLmUuLCBkb24ndCBsZXQgaXQgZ3Jv
dyBiZXlvbmQgc29tZSBsZXZlbCB0byBhdm9pZAotICAgIC8vIHVzaW5nIHRvbyBvbGQgZGF0YSBm
b3IgYml0cmF0ZSBhZGp1c3RtZW50LgotICAgIGRvdWJsZSBiaXRyYXRlQWNjdW11bGF0b3JDYXAg
PSBCSVRSQVRFX0NPUlJFQ1RJT05fU0VDICogYml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICAgIGJp
dHJhdGVBY2N1bXVsYXRvciA9IE1hdGgubWluKGJpdHJhdGVBY2N1bXVsYXRvciwgYml0cmF0ZUFj
Y3VtdWxhdG9yQ2FwKTsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBNYXRoLm1heChiaXRyYXRl
QWNjdW11bGF0b3IsIC1iaXRyYXRlQWNjdW11bGF0b3JDYXApOwotCi0gICAgLy8gRG8gYml0cmF0
ZSBhZGp1c3RtZW50IGV2ZXJ5IDMgc2Vjb25kcyBpZiBhY3R1YWwgZW5jb2RlciBiaXRyYXRlIGRl
dmlhdGVzIHRvbyBtdWNoCi0gICAgLy8gZm9ybSB0aGUgdGFyZ2V0IHZhbHVlLgotICAgIGlmIChi
aXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgPiAxMDAwICogQklUUkFURV9DT1JSRUNUSU9OX1NFQykg
ewotICAgICAgTG9nZ2luZy5kKFRBRywgIkFjYzogIiArIChpbnQpIGJpdHJhdGVBY2N1bXVsYXRv
ciArICIuIE1heDogIiArIChpbnQpIGJpdHJhdGVBY2N1bXVsYXRvck1heAotICAgICAgICAgICAg
ICArICIuIEV4cFNjYWxlOiAiICsgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCk7Ci0gICAgICBi
b29sZWFuIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICBpZiAo
Yml0cmF0ZUFjY3VtdWxhdG9yID4gYml0cmF0ZUFjY3VtdWxhdG9yTWF4KSB7Ci0gICAgICAgIC8v
IEVuY29kZXIgZ2VuZXJhdGVzIHRvbyBoaWdoIGJpdHJhdGUgLSBuZWVkIHRvIHJlZHVjZSB0aGUg
c2NhbGUuCi0gICAgICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IGJpdHJhdGVBY2N1bXVsYXRvck1h
eDsKLSAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cC0tOwotICAgICAgICBiaXRyYXRl
QWRqdXN0bWVudFNjYWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICB9IGVsc2UgaWYgKGJpdHJhdGVB
Y2N1bXVsYXRvciA8IC1iaXRyYXRlQWNjdW11bGF0b3JNYXgpIHsKLSAgICAgICAgLy8gRW5jb2Rl
ciBnZW5lcmF0ZXMgdG9vIGxvdyBiaXRyYXRlIC0gbmVlZCB0byBpbmNyZWFzZSB0aGUgc2NhbGUu
Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHArKzsKLSAgICAgICAgYml0cmF0ZUFj
Y3VtdWxhdG9yID0gLWJpdHJhdGVBY2N1bXVsYXRvck1heDsKLSAgICAgICAgYml0cmF0ZUFkanVz
dG1lbnRTY2FsZUNoYW5nZWQgPSB0cnVlOwotICAgICAgfQotICAgICAgaWYgKGJpdHJhdGVBZGp1
c3RtZW50U2NhbGVDaGFuZ2VkKSB7Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAg
PSBNYXRoLm1pbihiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwLCBCSVRSQVRFX0NPUlJFQ1RJT05f
U1RFUFMpOwotICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwID0gTWF0aC5tYXgoYml0
cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCwgLUJJVFJBVEVfQ09SUkVDVElPTl9TVEVQUyk7Ci0gICAg
ICAgIExvZ2dpbmcuZChUQUcsICJBZGp1c3RpbmcgYml0cmF0ZSBzY2FsZSB0byAiICsgYml0cmF0
ZUFkanVzdG1lbnRTY2FsZUV4cCArICIuIFZhbHVlOiAiCi0gICAgICAgICAgICAgICAgKyBnZXRC
aXRyYXRlU2NhbGUoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCkpOwotICAgICAgICBzZXRSYXRl
cyh0YXJnZXRCaXRyYXRlQnBzIC8gMTAwMCwgdGFyZ2V0RnBzKTsKLSAgICAgIH0KLSAgICAgIGJp
dHJhdGVPYnNlcnZhdGlvblRpbWVNcyA9IDA7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVsZWFzZSBh
IGRlcXVldWVkIG91dHB1dCBidWZmZXIgYmFjayB0byB0aGUgY29kZWMgZm9yIHJlLXVzZS4gIFJl
dHVybgotICAvLyBmYWxzZSBpZiB0aGUgY29kZWMgaXMgbm8gbG9uZ2VyIG9wZXJhYmxlLgotICBi
b29sZWFuIHJlbGVhc2VPdXRwdXRCdWZmZXIoaW50IGluZGV4KSB7Ci0gICAgY2hlY2tPbk1lZGlh
Q29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlT3V0cHV0
QnVmZmVyKGluZGV4LCBmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInJlbGVhc2VP
dXRwdXRCdWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29uc3RyYWludHMuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29uc3RyYWludHMuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvbnN0cmFpbnRzLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0
aWwuTGlzdDsKLQotLyoqCi0gKiBEZXNjcmlwdGlvbiBvZiBtZWRpYSBjb25zdHJhaW50cyBmb3Ig
e0Bjb2RlIE1lZGlhU3RyZWFtfSBhbmQKLSAqIHtAY29kZSBQZWVyQ29ubmVjdGlvbn0uCi0gKi8K
LXB1YmxpYyBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzIHsKLSAgLyoqIFNpbXBsZSBTdHJpbmcga2V5
L3ZhbHVlIHBhaXIuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgS2V5VmFsdWVQYWlyIHsKLSAg
ICBwcml2YXRlIGZpbmFsIFN0cmluZyBrZXk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdmFs
dWU7Ci0KLSAgICBwdWJsaWMgS2V5VmFsdWVQYWlyKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkg
ewotICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAg
fQotCi0gICAgcHVibGljIFN0cmluZyBnZXRLZXkoKSB7Ci0gICAgICByZXR1cm4ga2V5OwotICAg
IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0gICAgICByZXR1cm4gdmFsdWU7
Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiBr
ZXkgKyAiOiAiICsgdmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJv
b2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgewotICAgICAgaWYgKHRoaXMgPT0gb3RoZXIpIHsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIgPT0gbnVsbCB8
fCBnZXRDbGFzcygpICE9IG90aGVyLmdldENsYXNzKCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotICAgICAgS2V5VmFsdWVQYWlyIHRoYXQgPSAoS2V5VmFsdWVQYWlyKSBvdGhl
cjsKLSAgICAgIHJldHVybiBrZXkuZXF1YWxzKHRoYXQua2V5KSAmJiB2YWx1ZS5lcXVhbHModGhh
dC52YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNoQ29k
ZSgpIHsKLSAgICAgIHJldHVybiBrZXkuaGFzaENvZGUoKSArIHZhbHVlLmhhc2hDb2RlKCk7Ci0g
ICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpc3Q8S2V5VmFsdWVQYWlyPiBtYW5kYXRvcnk7
Ci0gIHB1YmxpYyBmaW5hbCBMaXN0PEtleVZhbHVlUGFpcj4gb3B0aW9uYWw7Ci0KLSAgcHVibGlj
IE1lZGlhQ29uc3RyYWludHMoKSB7Ci0gICAgbWFuZGF0b3J5ID0gbmV3IExpbmtlZExpc3Q8S2V5
VmFsdWVQYWlyPigpOwotICAgIG9wdGlvbmFsID0gbmV3IExpbmtlZExpc3Q8S2V5VmFsdWVQYWly
PigpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0cmluZ2lmeUtleVZhbHVlUGFp
ckxpc3QoTGlzdDxLZXlWYWx1ZVBhaXI+IGxpc3QpIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxk
ZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigiWyIpOwotICAgIGZvciAoS2V5VmFsdWVQYWlyIHBhaXIg
OiBsaXN0KSB7Ci0gICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICB9Ci0gICAgICBidWlsZGVyLmFwcGVuZChwYWlyLnRv
U3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQoIl0iKS50b1N0cmlu
ZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gIm1h
bmRhdG9yeTogIiArIHN0cmluZ2lmeUtleVZhbHVlUGFpckxpc3QobWFuZGF0b3J5KSArICIsIG9w
dGlvbmFsOiAiCi0gICAgICAgICsgc3RyaW5naWZ5S2V5VmFsdWVQYWlyTGlzdChvcHRpb25hbCk7
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTb3VyY2UuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU291cmNlLmphdmEJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTb3VyY2UuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDM1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgTWVkaWFTb3VyY2VJbnRlcmZhY2UuICovCi1w
dWJsaWMgY2xhc3MgTWVkaWFTb3VyY2UgewotICAvKiogVHJhY2tzIE1lZGlhU291cmNlSW50ZXJm
YWNlLlNvdXJjZVN0YXRlICovCi0gIHB1YmxpYyBlbnVtIFN0YXRlIHsgSU5JVElBTElaSU5HLCBM
SVZFLCBFTkRFRCwgTVVURUQgfQotCi0gIGZpbmFsIGxvbmcgbmF0aXZlU291cmNlOyAvLyBQYWNr
YWdlLXByb3RlY3RlZCBmb3IgUGVlckNvbm5lY3Rpb25GYWN0b3J5LgotCi0gIHB1YmxpYyBNZWRp
YVNvdXJjZShsb25nIG5hdGl2ZVNvdXJjZSkgewotICAgIHRoaXMubmF0aXZlU291cmNlID0gbmF0
aXZlU291cmNlOwotICB9Ci0KLSAgcHVibGljIFN0YXRlIHN0YXRlKCkgewotICAgIHJldHVybiBu
YXRpdmVTdGF0ZShuYXRpdmVTb3VyY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgp
IHsKLSAgICBmcmVlKG5hdGl2ZVNvdXJjZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgU3RhdGUgbmF0aXZlU3RhdGUobG9uZyBwb2ludGVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBu
YXRpdmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlU291cmNlKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvTWVkaWFTdHJlYW0uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01l
ZGlhU3RyZWFtLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVk
aWFTdHJlYW0uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2Vk
TGlzdDsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgTWVkaWFTdHJlYW1JbnRlcmZhY2Uu
ICovCi1wdWJsaWMgY2xhc3MgTWVkaWFTdHJlYW0gewotICBwdWJsaWMgZmluYWwgTGlua2VkTGlz
dDxBdWRpb1RyYWNrPiBhdWRpb1RyYWNrczsKLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8Vmlk
ZW9UcmFjaz4gdmlkZW9UcmFja3M7Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRMaXN0PFZpZGVvVHJh
Y2s+IHByZXNlcnZlZFZpZGVvVHJhY2tzOwotICAvLyBQYWNrYWdlLXByb3RlY3RlZCBmb3IgUGVl
ckNvbm5lY3Rpb24uCi0gIGZpbmFsIGxvbmcgbmF0aXZlU3RyZWFtOwotCi0gIHB1YmxpYyBNZWRp
YVN0cmVhbShsb25nIG5hdGl2ZVN0cmVhbSkgewotICAgIGF1ZGlvVHJhY2tzID0gbmV3IExpbmtl
ZExpc3Q8QXVkaW9UcmFjaz4oKTsKLSAgICB2aWRlb1RyYWNrcyA9IG5ldyBMaW5rZWRMaXN0PFZp
ZGVvVHJhY2s+KCk7Ci0gICAgcHJlc2VydmVkVmlkZW9UcmFja3MgPSBuZXcgTGlua2VkTGlzdDxW
aWRlb1RyYWNrPigpOwotICAgIHRoaXMubmF0aXZlU3RyZWFtID0gbmF0aXZlU3RyZWFtOwotICB9
Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkVHJhY2soQXVkaW9UcmFjayB0cmFjaykgewotICAgIGlm
IChuYXRpdmVBZGRBdWRpb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZlVHJhY2spKSB7
Ci0gICAgICBhdWRpb1RyYWNrcy5hZGQodHJhY2spOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZFRyYWNrKFZp
ZGVvVHJhY2sgdHJhY2spIHsKLSAgICBpZiAobmF0aXZlQWRkVmlkZW9UcmFjayhuYXRpdmVTdHJl
YW0sIHRyYWNrLm5hdGl2ZVRyYWNrKSkgewotICAgICAgdmlkZW9UcmFja3MuYWRkKHRyYWNrKTsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAv
LyBUcmFja3MgYWRkZWQgaW4gYWRkVHJhY2soKSBjYWxsIHdpbGwgYmUgYXV0byByZWxlYXNlZCBv
bmNlIE1lZGlhU3RyZWFtLmRpc3Bvc2UoKQotICAvLyBpcyBjYWxsZWQuIElmIHZpZGVvIHRyYWNr
IG5lZWQgdG8gYmUgcHJlc2VydmVkIGFmdGVyIE1lZGlhU3RyZWFtIGlzIGRlc3Ryb3llZCBpdAot
ICAvLyBzaG91bGQgYmUgYWRkZWQgdG8gTWVkaWFTdHJlYW0gdXNpbmcgYWRkUHJlc2VydmVkVHJh
Y2soKSBjYWxsLgotICBwdWJsaWMgYm9vbGVhbiBhZGRQcmVzZXJ2ZWRUcmFjayhWaWRlb1RyYWNr
IHRyYWNrKSB7Ci0gICAgaWYgKG5hdGl2ZUFkZFZpZGVvVHJhY2sobmF0aXZlU3RyZWFtLCB0cmFj
ay5uYXRpdmVUcmFjaykpIHsKLSAgICAgIHByZXNlcnZlZFZpZGVvVHJhY2tzLmFkZCh0cmFjayk7
Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
cHVibGljIGJvb2xlYW4gcmVtb3ZlVHJhY2soQXVkaW9UcmFjayB0cmFjaykgewotICAgIGF1ZGlv
VHJhY2tzLnJlbW92ZSh0cmFjayk7Ci0gICAgcmV0dXJuIG5hdGl2ZVJlbW92ZUF1ZGlvVHJhY2so
bmF0aXZlU3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVh
biByZW1vdmVUcmFjayhWaWRlb1RyYWNrIHRyYWNrKSB7Ci0gICAgdmlkZW9UcmFja3MucmVtb3Zl
KHRyYWNrKTsKLSAgICBwcmVzZXJ2ZWRWaWRlb1RyYWNrcy5yZW1vdmUodHJhY2spOwotICAgIHJl
dHVybiBuYXRpdmVSZW1vdmVWaWRlb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZlVHJh
Y2spOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICAvLyBSZW1vdmUgYW5k
IHJlbGVhc2UgcHJldmlvdXNseSBhZGRlZCBhdWRpbyBhbmQgdmlkZW8gdHJhY2tzLgotICAgIHdo
aWxlICghYXVkaW9UcmFja3MuaXNFbXB0eSgpKSB7Ci0gICAgICBBdWRpb1RyYWNrIHRyYWNrID0g
YXVkaW9UcmFja3MuZ2V0Rmlyc3QoKTsKLSAgICAgIHJlbW92ZVRyYWNrKHRyYWNrKTsKLSAgICAg
IHRyYWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgd2hpbGUgKCF2aWRlb1RyYWNrcy5pc0VtcHR5
KCkpIHsKLSAgICAgIFZpZGVvVHJhY2sgdHJhY2sgPSB2aWRlb1RyYWNrcy5nZXRGaXJzdCgpOwot
ICAgICAgcmVtb3ZlVHJhY2sodHJhY2spOwotICAgICAgdHJhY2suZGlzcG9zZSgpOwotICAgIH0K
LSAgICAvLyBSZW1vdmUsIGJ1dCBkbyBub3QgcmVsZWFzZSBwcmVzZXJ2ZWQgdmlkZW8gdHJhY2tz
LgotICAgIHdoaWxlICghcHJlc2VydmVkVmlkZW9UcmFja3MuaXNFbXB0eSgpKSB7Ci0gICAgICBy
ZW1vdmVUcmFjayhwcmVzZXJ2ZWRWaWRlb1RyYWNrcy5nZXRGaXJzdCgpKTsKLSAgICB9Ci0gICAg
ZnJlZShuYXRpdmVTdHJlYW0pOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBsYWJlbCgpIHsKLSAg
ICByZXR1cm4gbmF0aXZlTGFiZWwobmF0aXZlU3RyZWFtKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJp
bmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuICJbIiArIGxhYmVsKCkgKyAiOkE9IiArIGF1ZGlv
VHJhY2tzLnNpemUoKSArICI6Vj0iICsgdmlkZW9UcmFja3Muc2l6ZSgpICsgIl0iOwotICB9Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRkQXVkaW9UcmFjayhsb25n
IG5hdGl2ZVN0cmVhbSwgbG9uZyBuYXRpdmVBdWRpb1RyYWNrKTsKLQotICBwcml2YXRlIHN0YXRp
YyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRWaWRlb1RyYWNrKGxvbmcgbmF0aXZlU3RyZWFtLCBs
b25nIG5hdGl2ZVZpZGVvVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFu
IG5hdGl2ZVJlbW92ZUF1ZGlvVHJhY2sobG9uZyBuYXRpdmVTdHJlYW0sIGxvbmcgbmF0aXZlQXVk
aW9UcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlUmVtb3Zl
VmlkZW9UcmFjayhsb25nIG5hdGl2ZVN0cmVhbSwgbG9uZyBuYXRpdmVWaWRlb1RyYWNrKTsKLQot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIG5hdGl2ZUxhYmVsKGxvbmcgbmF0aXZlU3Ry
ZWFtKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlU3Ry
ZWFtKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU3RyZWFtVHJhY2suamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgTWVkaWFTdHJlYW1U
cmFja0ludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrIHsKLSAgLyoq
IFRyYWNrcyBNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlLlRyYWNrU3RhdGUgKi8KLSAgcHVibGlj
IGVudW0gU3RhdGUgeyBMSVZFLCBFTkRFRCB9Ci0KLSAgZmluYWwgbG9uZyBuYXRpdmVUcmFjazsK
LQotICBwdWJsaWMgTWVkaWFTdHJlYW1UcmFjayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgdGhp
cy5uYXRpdmVUcmFjayA9IG5hdGl2ZVRyYWNrOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBpZCgp
IHsKLSAgICByZXR1cm4gbmF0aXZlSWQobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIFN0
cmluZyBraW5kKCkgewotICAgIHJldHVybiBuYXRpdmVLaW5kKG5hdGl2ZVRyYWNrKTsKLSAgfQot
Ci0gIHB1YmxpYyBib29sZWFuIGVuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUVuYWJsZWQo
bmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0RW5hYmxlZChib29sZWFu
IGVuYWJsZSkgewotICAgIHJldHVybiBuYXRpdmVTZXRFbmFibGVkKG5hdGl2ZVRyYWNrLCBlbmFi
bGUpOwotICB9Ci0KLSAgcHVibGljIFN0YXRlIHN0YXRlKCkgewotICAgIHJldHVybiBuYXRpdmVT
dGF0ZShuYXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAg
IGZyZWUobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0cmlu
ZyBuYXRpdmVJZChsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
U3RyaW5nIG5hdGl2ZUtpbmQobG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIGJvb2xlYW4gbmF0aXZlRW5hYmxlZChsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRFbmFibGVkKGxvbmcgbmF0aXZlVHJh
Y2ssIGJvb2xlYW4gZW5hYmxlZCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0YXRlIG5h
dGl2ZVN0YXRlKGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2
b2lkIGZyZWUobG9uZyBuYXRpdmVUcmFjayk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01l
dHJpY3MuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01ldHJpY3MuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZXRyaWNzLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGls
Lk1hcDsKLQotLy8gSmF2YS1zaWRlIG9mIGFuZHJvaWRtZXRyaWNzX2puaS5jYy4KLS8vCi0vLyBS
dGMgaGlzdG9ncmFtcyBjYW4gYmUgcXVlcmllZCB0aHJvdWdoIHRoZSBBUEksIGdldEFuZFJlc2V0
KCkuCi0vLyBUaGUgcmV0dXJuZWQgbWFwIGhvbGRzIHRoZSBuYW1lIG9mIGEgaGlzdG9ncmFtIGFu
ZCBpdHMgc2FtcGxlcy4KLS8vCi0vLyBFeGFtcGxlIG9mIHxtYXB8IHdpdGggb25lIGhpc3RvZ3Jh
bToKLS8vIHxuYW1lfDogIldlYlJUQy5WaWRlby5JbnB1dEZyYW1lc1BlclNlY29uZCIKLS8vICAg
ICB8bWlufDogMQotLy8gICAgIHxtYXh8OiAxMDAKLS8vICAgICB8YnVja2V0Q291bnR8OiA1MAot
Ly8gICAgIHxzYW1wbGVzfDogWzMwXToxCi0vLwotLy8gTW9zdCBoaXN0b2dyYW1zIGFyZSBub3Qg
dXBkYXRlZCBmcmVxdWVudGx5IChlLmcuIG1vc3QgdmlkZW8gbWV0cmljcyBhcmUgYW4KLS8vIGF2
ZXJhZ2Ugb3ZlciB0aGUgY2FsbCBhbmQgcmVjb3JkZWQgd2hlbiBhIHN0cmVhbSBpcyByZW1vdmVk
KS4KLS8vIFRoZSBtZXRyaWNzIGNhbiBmb3IgZXhhbXBsZSBiZSByZXRyaWV2ZWQgd2hlbiBhIHBl
ZXIgY29ubmVjdGlvbiBpcyBjbG9zZWQuCi0KLXB1YmxpYyBjbGFzcyBNZXRyaWNzIHsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZXRyaWNzIjsKLQotICBzdGF0aWMgewot
ICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiamluZ2xlX3BlZXJjb25uZWN0aW9uX3NvIik7Ci0gIH0K
LSAgcHVibGljIGZpbmFsIE1hcDxTdHJpbmcsIEhpc3RvZ3JhbUluZm8+IG1hcCA9Ci0gICAgICBu
ZXcgSGFzaE1hcDxTdHJpbmcsIEhpc3RvZ3JhbUluZm8+KCk7IC8vIDxuYW1lLCBIaXN0b2dyYW1J
bmZvPgotCi0gIC8qKgotICAgKiBDbGFzcyBob2xkaW5nIGhpc3RvZ3JhbSBpbmZvcm1hdGlvbi4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSGlzdG9ncmFtSW5mbyB7Ci0gICAgcHVibGlj
IGZpbmFsIGludCBtaW47Ci0gICAgcHVibGljIGZpbmFsIGludCBtYXg7Ci0gICAgcHVibGljIGZp
bmFsIGludCBidWNrZXRDb3VudDsKLSAgICBwdWJsaWMgZmluYWwgTWFwPEludGVnZXIsIEludGVn
ZXI+IHNhbXBsZXMgPQotICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigpOyAv
LyA8dmFsdWUsICMgb2YgZXZlbnRzPgotCi0gICAgcHVibGljIEhpc3RvZ3JhbUluZm8oaW50IG1p
biwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KSB7Ci0gICAgICB0aGlzLm1pbiA9IG1pbjsKLSAg
ICAgIHRoaXMubWF4ID0gbWF4OwotICAgICAgdGhpcy5idWNrZXRDb3VudCA9IGJ1Y2tldENvdW50
OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZFNhbXBsZShpbnQgdmFsdWUsIGludCBudW1F
dmVudHMpIHsKLSAgICAgIHNhbXBsZXMucHV0KHZhbHVlLCBudW1FdmVudHMpOwotICAgIH0KLSAg
fQotCi0gIC8qKgotICAgKiBDbGFzcyBmb3IgaG9sZGluZyB0aGUgbmF0aXZlIHBvaW50ZXIgb2Yg
YSBoaXN0b2dyYW0uIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBkZXN0cm95IGEKLSAgICogaGlz
dG9ncmFtLCBwbGVhc2UgZG9uJ3QgY3JlYXRlIHVubmVjZXNzYXJ5IGluc3RhbmNlcyBvZiB0aGlz
IG9iamVjdC4gVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS4KLSAgICoKLSAgICogVXNhZ2UgZXhh
bXBsZToKLSAgICogcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIHNvbWVNZXRyaWNIaXN0
b2dyYW0gPQotICAgKiAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLlZpZGVvLlNv
bWVNZXRyaWMiLCAxLCAxMDAwMCwgNTApOwotICAgKiBzb21lTWV0cmljSGlzdG9ncmFtLmFkZFNh
bXBsZShzb21lVmFyaWFibGUpOwotICAgKi8KLSAgc3RhdGljIGNsYXNzIEhpc3RvZ3JhbSB7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBsb25nIGhhbmRsZTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBu
YW1lOyAvLyBPbmx5IHVzZWQgZm9yIGxvZ2dpbmcuCi0KLSAgICBwcml2YXRlIEhpc3RvZ3JhbShs
b25nIGhhbmRsZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgIHRoaXMuaGFuZGxlID0gaGFuZGxlOwot
ICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHVibGljIEhpc3Rv
Z3JhbSBjcmVhdGVDb3VudHMoU3RyaW5nIG5hbWUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNr
ZXRDb3VudCkgewotICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW0obmF0aXZlQ3JlYXRlQ291bnRz
KG5hbWUsIG1pbiwgbWF4LCBidWNrZXRDb3VudCksIG5hbWUpOwotICAgIH0KLQotICAgIHN0YXRp
YyBwdWJsaWMgSGlzdG9ncmFtIGNyZWF0ZUVudW1lcmF0aW9uKFN0cmluZyBuYW1lLCBpbnQgbWF4
KSB7Ci0gICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbShuYXRpdmVDcmVhdGVFbnVtZXJhdGlvbihu
YW1lLCBtYXgpLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRTYW1wbGUoaW50
IHNhbXBsZSkgewotICAgICAgbmF0aXZlQWRkU2FtcGxlKGhhbmRsZSwgc2FtcGxlKTsKLSAgICB9
Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVDb3VudHMoU3Ry
aW5nIG5hbWUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCk7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlRW51bWVyYXRpb24oU3RyaW5nIG5hbWUs
IGludCBtYXgpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUFkZFNhbXBs
ZShsb25nIGhhbmRsZSwgaW50IHNhbXBsZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkKFN0
cmluZyBuYW1lLCBIaXN0b2dyYW1JbmZvIGluZm8pIHsKLSAgICBtYXAucHV0KG5hbWUsIGluZm8p
OwotICB9Ci0KLSAgLy8gRW5hYmxlcyBnYXRoZXJpbmcgb2YgbWV0cmljcyAod2hpY2ggY2FuIGJl
IGZldGNoZWQgd2l0aCBnZXRBbmRSZXNldCgpKS4KLSAgLy8gTXVzdCBiZSBjYWxsZWQgYmVmb3Jl
IFBlZXJDb25uZWN0aW9uRmFjdG9yeSBpcyBjcmVhdGVkLgotICBwdWJsaWMgc3RhdGljIHZvaWQg
ZW5hYmxlKCkgewotICAgIG5hdGl2ZUVuYWJsZSgpOwotICB9Ci0KLSAgLy8gR2V0cyBhbmQgY2xl
YXJzIG5hdGl2ZSBoaXN0b2dyYW1zLgotICBwdWJsaWMgc3RhdGljIE1ldHJpY3MgZ2V0QW5kUmVz
ZXQoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldEFuZFJlc2V0KCk7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVFbmFibGUoKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIE1ldHJpY3MgbmF0aXZlR2V0QW5kUmVzZXQoKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvTmV0d29ya01vbml0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL05l
dHdvcmtNb25pdG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
TmV0d29ya01vbml0b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1NCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3Jn
LndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGlvblR5cGU7Ci1pbXBvcnQg
c3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LklOVkFMSURfTkVUX0lE
OwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5OZXR3
b3JrSW5mb3JtYXRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9y
dCBhbmRyb2lkLm9zLkJ1aWxkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBCb3Jyb3dlZCBmcm9tIENocm9taXVtJ3Mgc3Jj
L25ldC9hbmRyb2lkL2phdmEvc3JjL29yZy9jaHJvbWl1bS9uZXQvTmV0d29ya0NoYW5nZU5vdGlm
aWVyLmphdmEKLSAqCi0gKiBUcmlnZ2VycyB1cGRhdGVzIHRvIHRoZSB1bmRlcmx5aW5nIG5ldHdv
cmsgc3RhdGUgZnJvbSBPUyBuZXR3b3JraW5nIGV2ZW50cy4KLSAqCi0gKiBXQVJOSU5HOiBUaGlz
IGNsYXNzIGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAqLwotcHVibGljIGNsYXNzIE5ldHdvcmtNb25p
dG9yIHsKLSAgLyoqCi0gICAqIEFsZXJ0ZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB0eXBlIG9mIHRo
ZSBuZXR3b3JrIGNoYW5nZXMuCi0gICAqIFRoZSBhbGVydCBpcyBmaXJlZCBvbiB0aGUgVUkgdGhy
ZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBOZXR3b3JrT2JzZXJ2ZXIgewotICAgIHB1
YmxpYyB2b2lkIG9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rp
b25UeXBlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTmV0
d29ya01vbml0b3IiOwotICBwcml2YXRlIHN0YXRpYyBOZXR3b3JrTW9uaXRvciBpbnN0YW5jZTsK
LQotICBwcml2YXRlIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotCi0gIC8vIE5h
dGl2ZSBvYnNlcnZlcnMgb2YgdGhlIGNvbm5lY3Rpb24gdHlwZSBjaGFuZ2VzLgotICBwcml2YXRl
IGZpbmFsIEFycmF5TGlzdDxMb25nPiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzOwotICAvLyBKYXZh
IG9ic2VydmVycyBvZiB0aGUgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gIHByaXZhdGUgZmlu
YWwgQXJyYXlMaXN0PE5ldHdvcmtPYnNlcnZlcj4gbmV0d29ya09ic2VydmVyczsKLQotICAvLyBP
YmplY3QgdGhhdCBkZXRlY3RzIHRoZSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgcHJpdmF0
ZSBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgYXV0b0RldGVjdG9yOwotCi0gIHByaXZhdGUgQ29u
bmVjdGlvblR5cGUgY3VycmVudENvbm5lY3Rpb25UeXBlID0gQ29ubmVjdGlvblR5cGUuQ09OTkVD
VElPTl9VTktOT1dOOwotCi0gIHByaXZhdGUgTmV0d29ya01vbml0b3IoQ29udGV4dCBjb250ZXh0
KSB7Ci0gICAgYXNzZXJ0SXNUcnVlKGNvbnRleHQgIT0gbnVsbCk7Ci0gICAgYXBwbGljYXRpb25D
b250ZXh0ID0KLSAgICAgICAgY29udGV4dC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKSA9PSBudWxs
ID8gY29udGV4dCA6IGNvbnRleHQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0KLSAgICBuYXRp
dmVOZXR3b3JrT2JzZXJ2ZXJzID0gbmV3IEFycmF5TGlzdDxMb25nPigpOwotICAgIG5ldHdvcmtP
YnNlcnZlcnMgPSBuZXcgQXJyYXlMaXN0PE5ldHdvcmtPYnNlcnZlcj4oKTsKLSAgfQotCi0gIC8q
KgotICAgKiBJbml0aWFsaXplcyB0aGUgc2luZ2xldG9uIG9uY2UuCi0gICAqIENhbGxlZCBmcm9t
IHRoZSBuYXRpdmUgY29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTmV0d29ya01vbml0b3Ig
aW5pdChDb250ZXh0IGNvbnRleHQpIHsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgewotICAg
ICAgaW5zdGFuY2UgPSBuZXcgTmV0d29ya01vbml0b3IoY29udGV4dCk7Ci0gICAgfQotICAgIHJl
dHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0luaXRpYWxp
emVkKCkgewotICAgIHJldHVybiBpbnN0YW5jZSAhPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAq
IFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
TmV0d29ya01vbml0b3IgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9
Ci0KLSAgLyoqCi0gICAqIEVuYWJsZXMgYXV0byBkZXRlY3Rpb24gb2YgdGhlIGN1cnJlbnQgbmV0
d29yayBzdGF0ZSBiYXNlZCBvbiBub3RpZmljYXRpb25zIGZyb20gdGhlIHN5c3RlbS4KLSAgICog
Tm90ZSB0aGF0IHBhc3NpbmcgdHJ1ZSBoZXJlIHJlcXVpcmVzIHRoZSBlbWJlZGRpbmcgYXBwIGhh
dmUgdGhlIHBsYXRmb3JtIEFDQ0VTU19ORVRXT1JLX1NUQVRFCi0gICAqIHBlcm1pc3Npb24uCi0g
ICAqCi0gICAqIEBwYXJhbSBzaG91bGRBdXRvRGV0ZWN0IHRydWUgaWYgdGhlIE5ldHdvcmtNb25p
dG9yIHNob3VsZCBsaXN0ZW4gZm9yIHN5c3RlbSBjaGFuZ2VzIGluCi0gICAqICBuZXR3b3JrIGNv
bm5lY3Rpdml0eS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRBdXRvRGV0ZWN0Q29u
bmVjdGl2aXR5U3RhdGUoYm9vbGVhbiBzaG91bGRBdXRvRGV0ZWN0KSB7Ci0gICAgZ2V0SW5zdGFu
Y2UoKS5zZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5U3RhdGVJbnRlcm5hbChzaG91bGRBdXRvRGV0
ZWN0KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0SXNUcnVlKGJvb2xlYW4g
Y29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBBc3Nl
cnRpb25FcnJvcigiRXhwZWN0ZWQgdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIC8vIENh
bGxlZCBieSB0aGUgbmF0aXZlIGNvZGUuCi0gIHByaXZhdGUgdm9pZCBzdGFydE1vbml0b3Jpbmco
bG9uZyBuYXRpdmVPYnNlcnZlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJTdGFydCBtb25pdG9y
aW5nIGZyb20gbmF0aXZlIG9ic2VydmVyICIgKyBuYXRpdmVPYnNlcnZlcik7Ci0gICAgbmF0aXZl
TmV0d29ya09ic2VydmVycy5hZGQobmF0aXZlT2JzZXJ2ZXIpOwotICAgIHNldEF1dG9EZXRlY3RD
b25uZWN0aXZpdHlTdGF0ZUludGVybmFsKHRydWUpOwotICB9Ci0KLSAgLy8gQ2FsbGVkIGJ5IHRo
ZSBuYXRpdmUgY29kZS4KLSAgcHJpdmF0ZSB2b2lkIHN0b3BNb25pdG9yaW5nKGxvbmcgbmF0aXZl
T2JzZXJ2ZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBtb25pdG9yaW5nIGZyb20gbmF0
aXZlIG9ic2VydmVyICIgKyBuYXRpdmVPYnNlcnZlcik7Ci0gICAgc2V0QXV0b0RldGVjdENvbm5l
Y3Rpdml0eVN0YXRlSW50ZXJuYWwoZmFsc2UpOwotICAgIG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMu
cmVtb3ZlKG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotCi0gIC8vIENhbGxlZCBieSB0aGUgbmF0aXZl
IGNvZGUgdG8gZ2V0IHRoZSBBbmRyb2lkIFNESyB2ZXJzaW9uLgotICBwcml2YXRlIHN0YXRpYyBp
bnQgYW5kcm9pZFNka0ludCgpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UOwot
ICB9Ci0KLSAgcHJpdmF0ZSBDb25uZWN0aW9uVHlwZSBnZXRDdXJyZW50Q29ubmVjdGlvblR5cGUo
KSB7Ci0gICAgcmV0dXJuIGN1cnJlbnRDb25uZWN0aW9uVHlwZTsKLSAgfQotCi0gIHByaXZhdGUg
bG9uZyBnZXRDdXJyZW50RGVmYXVsdE5ldElkKCkgewotICAgIHJldHVybiBhdXRvRGV0ZWN0b3Ig
PT0gbnVsbCA/IElOVkFMSURfTkVUX0lEIDogYXV0b0RldGVjdG9yLmdldERlZmF1bHROZXRJZCgp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3lBdXRvRGV0ZWN0b3IoKSB7Ci0gICAgaWYg
KGF1dG9EZXRlY3RvciAhPSBudWxsKSB7Ci0gICAgICBhdXRvRGV0ZWN0b3IuZGVzdHJveSgpOwot
ICAgICAgYXV0b0RldGVjdG9yID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
c2V0QXV0b0RldGVjdENvbm5lY3Rpdml0eVN0YXRlSW50ZXJuYWwoYm9vbGVhbiBzaG91bGRBdXRv
RGV0ZWN0KSB7Ci0gICAgaWYgKCFzaG91bGRBdXRvRGV0ZWN0KSB7Ci0gICAgICBkZXN0cm95QXV0
b0RldGVjdG9yKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChhdXRvRGV0ZWN0b3Ig
PT0gbnVsbCkgewotICAgICAgYXV0b0RldGVjdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yQXV0b0Rl
dGVjdChuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk9ic2VydmVyKCkgewotCi0gICAgICAg
IEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChD
b25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSkgewotICAgICAgICAgIHVwZGF0ZUN1cnJl
bnRDb25uZWN0aW9uVHlwZShuZXdDb25uZWN0aW9uVHlwZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25OZXR3b3JrQ29ubmVjdChOZXR3b3Jr
SW5mb3JtYXRpb24gbmV0d29ya0luZm8pIHsKLSAgICAgICAgICBub3RpZnlPYnNlcnZlcnNPZk5l
dHdvcmtDb25uZWN0KG5ldHdvcmtJbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlk
ZQotICAgICAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtEaXNjb25uZWN0KGxvbmcgbmV0d29ya0hh
bmRsZSkgewotICAgICAgICAgIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Rpc2Nvbm5lY3QobmV0
d29ya0hhbmRsZSk7Ci0gICAgICAgIH0KLSAgICAgIH0sIGFwcGxpY2F0aW9uQ29udGV4dCk7Ci0g
ICAgICBmaW5hbCBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya1N0YXRlIG5ldHdvcmtT
dGF0ZSA9Ci0gICAgICAgICAgYXV0b0RldGVjdG9yLmdldEN1cnJlbnROZXR3b3JrU3RhdGUoKTsK
LSAgICAgIHVwZGF0ZUN1cnJlbnRDb25uZWN0aW9uVHlwZShOZXR3b3JrTW9uaXRvckF1dG9EZXRl
Y3QuZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRlKSk7Ci0gICAgICB1cGRhdGVBY3RpdmVO
ZXR3b3JrTGlzdCgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVDdXJyZW50
Q29ubmVjdGlvblR5cGUoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpIHsKLSAgICBj
dXJyZW50Q29ubmVjdGlvblR5cGUgPSBuZXdDb25uZWN0aW9uVHlwZTsKLSAgICBub3RpZnlPYnNl
cnZlcnNPZkNvbm5lY3Rpb25UeXBlQ2hhbmdlKG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgfQotCi0g
IC8qKgotICAgKiBBbGVydHMgYWxsIG9ic2VydmVycyBvZiBhIGNvbm5lY3Rpb24gY2hhbmdlLgot
ICAgKi8KLSAgcHJpdmF0ZSB2b2lkIG5vdGlmeU9ic2VydmVyc09mQ29ubmVjdGlvblR5cGVDaGFu
Z2UoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpIHsKLSAgICBmb3IgKGxvbmcgbmF0
aXZlT2JzZXJ2ZXIgOiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBuYXRpdmVOb3Rp
ZnlDb25uZWN0aW9uVHlwZUNoYW5nZWQobmF0aXZlT2JzZXJ2ZXIpOwotICAgIH0KLSAgICBmb3Ig
KE5ldHdvcmtPYnNlcnZlciBvYnNlcnZlciA6IG5ldHdvcmtPYnNlcnZlcnMpIHsKLSAgICAgIG9i
c2VydmVyLm9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzT2ZOZXR3b3JrQ29ubmVjdChO
ZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm8pIHsKLSAgICBmb3IgKGxvbmcgbmF0aXZlT2Jz
ZXJ2ZXIgOiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBuYXRpdmVOb3RpZnlPZk5l
dHdvcmtDb25uZWN0KG5hdGl2ZU9ic2VydmVyLCBuZXR3b3JrSW5mbyk7Ci0gICAgfQotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBu
ZXR3b3JrSGFuZGxlKSB7Ci0gICAgZm9yIChsb25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlTmV0
d29ya09ic2VydmVycykgewotICAgICAgbmF0aXZlTm90aWZ5T2ZOZXR3b3JrRGlzY29ubmVjdChu
YXRpdmVPYnNlcnZlciwgbmV0d29ya0hhbmRsZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHVwZGF0ZUFjdGl2ZU5ldHdvcmtMaXN0KCkgewotICAgIExpc3Q8TmV0d29ya0luZm9ybWF0
aW9uPiBuZXR3b3JrSW5mb0xpc3QgPSBhdXRvRGV0ZWN0b3IuZ2V0QWN0aXZlTmV0d29ya0xpc3Qo
KTsKLSAgICBpZiAobmV0d29ya0luZm9MaXN0ID09IG51bGwgfHwgbmV0d29ya0luZm9MaXN0LnNp
emUoKSA9PSAwKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTmV0d29ya0luZm9ybWF0
aW9uW10gbmV0d29ya0luZm9zID0gbmV3IE5ldHdvcmtJbmZvcm1hdGlvbltuZXR3b3JrSW5mb0xp
c3Quc2l6ZSgpXTsKLSAgICBuZXR3b3JrSW5mb3MgPSBuZXR3b3JrSW5mb0xpc3QudG9BcnJheShu
ZXR3b3JrSW5mb3MpOwotICAgIGZvciAobG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2ZU5ldHdv
cmtPYnNlcnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5vdGlmeU9mQWN0aXZlTmV0d29ya0xpc3QobmF0
aXZlT2JzZXJ2ZXIsIG5ldHdvcmtJbmZvcyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFk
ZHMgYW4gb2JzZXJ2ZXIgZm9yIGFueSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgdm9pZCBhZGROZXR3b3JrT2JzZXJ2ZXIoTmV0d29ya09ic2VydmVyIG9i
c2VydmVyKSB7Ci0gICAgZ2V0SW5zdGFuY2UoKS5hZGROZXR3b3JrT2JzZXJ2ZXJJbnRlcm5hbChv
YnNlcnZlcik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkTmV0d29ya09ic2VydmVySW50ZXJu
YWwoTmV0d29ya09ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgbmV0d29ya09ic2VydmVycy5hZGQo
b2JzZXJ2ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZXMgYW4gb2JzZXJ2ZXIgZm9yIGFu
eSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBy
ZW1vdmVOZXR3b3JrT2JzZXJ2ZXIoTmV0d29ya09ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgZ2V0
SW5zdGFuY2UoKS5yZW1vdmVOZXR3b3JrT2JzZXJ2ZXJJbnRlcm5hbChvYnNlcnZlcik7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgcmVtb3ZlTmV0d29ya09ic2VydmVySW50ZXJuYWwoTmV0d29ya09i
c2VydmVyIG9ic2VydmVyKSB7Ci0gICAgbmV0d29ya09ic2VydmVycy5yZW1vdmUob2JzZXJ2ZXIp
OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBpZiB0aGVyZSBjdXJyZW50bHkgaXMgY29ubmVj
dGl2aXR5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzT25saW5lKCkgewotICAg
IENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlID0gZ2V0SW5zdGFuY2UoKS5nZXRDdXJyZW50
Q29ubmVjdGlvblR5cGUoKTsKLSAgICByZXR1cm4gY29ubmVjdGlvblR5cGUgIT0gQ29ubmVjdGlv
blR5cGUuQ09OTkVDVElPTl9OT05FOwotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRp
dmVOb3RpZnlDb25uZWN0aW9uVHlwZUNoYW5nZWQobG9uZyBuYXRpdmVQdHIpOwotICBwcml2YXRl
IG5hdGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeU9mTmV0d29ya0Nvbm5lY3QobG9uZyBuYXRpdmVQdHIs
IE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mbyk7Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQg
bmF0aXZlTm90aWZ5T2ZOZXR3b3JrRGlzY29ubmVjdChsb25nIG5hdGl2ZVB0ciwgbG9uZyBuZXR3
b3JrSGFuZGxlKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVOb3RpZnlPZkFjdGl2ZU5l
dHdvcmtMaXN0KAotICAgICAgbG9uZyBuYXRpdmVQdHIsIE5ldHdvcmtJbmZvcm1hdGlvbltdIG5l
dHdvcmtJbmZvcyk7Ci0KLSAgLy8gRm9yIHRlc3Rpbmcgb25seS4KLSAgc3RhdGljIHZvaWQgcmVz
ZXRJbnN0YW5jZUZvclRlc3RzKENvbnRleHQgY29udGV4dCkgewotICAgIGluc3RhbmNlID0gbmV3
IE5ldHdvcmtNb25pdG9yKGNvbnRleHQpOwotICB9Ci0KLSAgLy8gRm9yIHRlc3Rpbmcgb25seS4K
LSAgcHVibGljIHN0YXRpYyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgZ2V0QXV0b0RldGVjdG9y
Rm9yVGVzdCgpIHsKLSAgICByZXR1cm4gZ2V0SW5zdGFuY2UoKS5hdXRvRGV0ZWN0b3I7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3Qu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRv
ckF1dG9EZXRlY3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDYyMCArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgYW5kcm9p
ZC5uZXQuTmV0d29ya0NhcGFiaWxpdGllcy5ORVRfQ0FQQUJJTElUWV9JTlRFUk5FVDsKLWltcG9y
dCBzdGF0aWMgYW5kcm9pZC5uZXQuTmV0d29ya0NhcGFiaWxpdGllcy5UUkFOU1BPUlRfQ0VMTFVM
QVI7Ci0KLWltcG9ydCBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb247Ci1pbXBvcnQgYW5kcm9p
ZC5hbm5vdGF0aW9uLlN1cHByZXNzTGludDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRj
YXN0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5k
cm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVy
OwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9p
ZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlci5OZXR3b3JrQ2FsbGJhY2s7Ci1pbXBvcnQgYW5kcm9p
ZC5uZXQuTGlua0FkZHJlc3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTGlua1Byb3BlcnRpZXM7Ci1p
bXBvcnQgYW5kcm9pZC5uZXQuTmV0d29yazsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrQ2Fw
YWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwotaW1wb3J0IGFuZHJv
aWQubmV0Lk5ldHdvcmtSZXF1ZXN0OwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUluZm87
Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9z
LkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlRlbGVwaG9ueU1hbmFnZXI7Ci0KLWlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioK
LSAqIEJvcnJvd2VkIGZyb20gQ2hyb21pdW0ncwotICogc3JjL25ldC9hbmRyb2lkL2phdmEvc3Jj
L29yZy9jaHJvbWl1bS9uZXQvTmV0d29ya0NoYW5nZU5vdGlmaWVyQXV0b0RldGVjdC5qYXZhCi0g
KgotICogVXNlZCBieSB0aGUgTmV0d29ya01vbml0b3IgdG8gbGlzdGVuIHRvIHBsYXRmb3JtIGNo
YW5nZXMgaW4gY29ubmVjdGl2aXR5LgotICogTm90ZSB0aGF0IHVzZSBvZiB0aGlzIGNsYXNzIHJl
cXVpcmVzIHRoYXQgdGhlIGFwcCBoYXZlIHRoZSBwbGF0Zm9ybQotICogQUNDRVNTX05FVFdPUktf
U1RBVEUgcGVybWlzc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIE5ldHdvcmtNb25pdG9yQXV0b0Rl
dGVjdCBleHRlbmRzIEJyb2FkY2FzdFJlY2VpdmVyIHsKLSAgcHVibGljIHN0YXRpYyBlbnVtIENv
bm5lY3Rpb25UeXBlIHsKLSAgICBDT05ORUNUSU9OX1VOS05PV04sCi0gICAgQ09OTkVDVElPTl9F
VEhFUk5FVCwKLSAgICBDT05ORUNUSU9OX1dJRkksCi0gICAgQ09OTkVDVElPTl80RywKLSAgICBD
T05ORUNUSU9OXzNHLAotICAgIENPTk5FQ1RJT05fMkcsCi0gICAgQ09OTkVDVElPTl9VTktOT1dO
X0NFTExVTEFSLAotICAgIENPTk5FQ1RJT05fQkxVRVRPT1RILAotICAgIENPTk5FQ1RJT05fTk9O
RQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJUEFkZHJlc3MgewotICAgIHB1YmxpYyBm
aW5hbCBieXRlW10gYWRkcmVzczsKLSAgICBwdWJsaWMgSVBBZGRyZXNzKGJ5dGVbXSBhZGRyZXNz
KSB7Ci0gICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzOwotICAgIH0KLSAgfQotCi0gIC8qKiBK
YXZhIHZlcnNpb24gb2YgTmV0d29ya01vbml0b3IuTmV0d29ya0luZm9ybWF0aW9uICovCi0gIHB1
YmxpYyBzdGF0aWMgY2xhc3MgTmV0d29ya0luZm9ybWF0aW9uIHsKLSAgICBwdWJsaWMgZmluYWwg
U3RyaW5nIG5hbWU7Ci0gICAgcHVibGljIGZpbmFsIENvbm5lY3Rpb25UeXBlIHR5cGU7Ci0gICAg
cHVibGljIGZpbmFsIGxvbmcgaGFuZGxlOwotICAgIHB1YmxpYyBmaW5hbCBJUEFkZHJlc3NbXSBp
cEFkZHJlc3NlczsKLSAgICBwdWJsaWMgTmV0d29ya0luZm9ybWF0aW9uKAotICAgICAgICBTdHJp
bmcgbmFtZSwgQ29ubmVjdGlvblR5cGUgdHlwZSwgbG9uZyBoYW5kbGUsIElQQWRkcmVzc1tdIGFk
ZHJlc3NlcykgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgIHRoaXMudHlwZSA9IHR5
cGU7Ci0gICAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICAgIHRoaXMuaXBBZGRyZXNzZXMg
PSBhZGRyZXNzZXM7Ci0gICAgfQotICB9OwotCi0gIHN0YXRpYyBjbGFzcyBOZXR3b3JrU3RhdGUg
ewotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjb25uZWN0ZWQ7Ci0gICAgLy8gRGVmaW5lZCBm
cm9tIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9YWFggZm9yIG5vbi1tb2JpbGU7IGZvciBtb2Jp
bGUsIGl0IGlzCi0gICAgLy8gZnVydGhlciBkaXZpZGVkIGludG8gMkcsIDNHLCBvciA0RyBmcm9t
IHRoZSBzdWJ0eXBlLgotICAgIHByaXZhdGUgZmluYWwgaW50IHR5cGU7Ci0gICAgLy8gRGVmaW5l
ZCBmcm9tIE5ldHdvcmtJbmZvLnN1YnR5cGUsIHdoaWNoIGlzIG9uZSBvZiB0aGUgVGVsZXBob255
TWFuYWdlci5ORVRXT1JLX1RZUEVfWFhYcy4KLSAgICAvLyBXaWxsIGJlIHVzZWZ1bCB0byBmaW5k
IHRoZSBtYXhpbXVtIGJhbmR3aWR0aC4KLSAgICBwcml2YXRlIGZpbmFsIGludCBzdWJ0eXBlOwot
Ci0gICAgcHVibGljIE5ldHdvcmtTdGF0ZShib29sZWFuIGNvbm5lY3RlZCwgaW50IHR5cGUsIGlu
dCBzdWJ0eXBlKSB7Ci0gICAgICB0aGlzLmNvbm5lY3RlZCA9IGNvbm5lY3RlZDsKLSAgICAgIHRo
aXMudHlwZSA9IHR5cGU7Ci0gICAgICB0aGlzLnN1YnR5cGUgPSBzdWJ0eXBlOwotICAgIH0KLQot
ICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGVkKCkgewotICAgICAgcmV0dXJuIGNvbm5lY3Rl
ZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUeXBlKCkgewotICAgICAgcmV0
dXJuIHR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXROZXR3b3JrU3ViVHlwZSgpIHsK
LSAgICAgIHJldHVybiBzdWJ0eXBlOwotICAgIH0KLSAgfQotICAvKioKLSAgICogVGhlIG1ldGhv
ZHMgaW4gdGhpcyBjbGFzcyBnZXQgY2FsbGVkIHdoZW4gdGhlIG5ldHdvcmsgY2hhbmdlcyBpZiB0
aGUgY2FsbGJhY2sKLSAgICogaXMgcmVnaXN0ZXJlZCB3aXRoIGEgcHJvcGVyIG5ldHdvcmsgcmVx
dWVzdC4gSXQgaXMgb25seSBhdmFpbGFibGUgaW4gQW5kcm9pZCBMb2xsaXBvcAotICAgKiBhbmQg
YWJvdmUuCi0gICAqLwotICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICBwcml2YXRlIGNsYXNz
IFNpbXBsZU5ldHdvcmtDYWxsYmFjayBleHRlbmRzIE5ldHdvcmtDYWxsYmFjayB7Ci0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25BdmFpbGFibGUoTmV0d29yayBuZXR3b3JrKSB7Ci0g
ICAgICBMb2dnaW5nLmQoVEFHLCAiTmV0d29yayBiZWNvbWVzIGF2YWlsYWJsZTogIiArIG5ldHdv
cmsudG9TdHJpbmcoKSk7Ci0gICAgICBvbk5ldHdvcmtDaGFuZ2VkKG5ldHdvcmspOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwYWJpbGl0aWVzQ2hhbmdlZChO
ZXR3b3JrIG5ldHdvcmssIE5ldHdvcmtDYXBhYmlsaXRpZXMgbmV0d29ya0NhcGFiaWxpdGllcykg
ewotICAgICAgLy8gQSBjYXBhYmlsaXRpZXMgY2hhbmdlIG1heSBpbmRpY2F0ZSB0aGUgQ29ubmVj
dGlvblR5cGUgaGFzIGNoYW5nZWQsCi0gICAgICAvLyBzbyBmb3J3YXJkIHRoZSBuZXcgTmV0d29y
a0luZm9ybWF0aW9uIGFsb25nIHRvIHRoZSBvYnNlcnZlci4KLSAgICAgIExvZ2dpbmcuZChUQUcs
ICJjYXBhYmlsaXRpZXMgY2hhbmdlZDogIiArIG5ldHdvcmtDYXBhYmlsaXRpZXMudG9TdHJpbmco
KSk7Ci0gICAgICBvbk5ldHdvcmtDaGFuZ2VkKG5ldHdvcmspOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTGlua1Byb3BlcnRpZXNDaGFuZ2VkKE5ldHdvcmsgbmV0
d29yaywgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMpIHsKLSAgICAgIC8vIEEgbGluayBw
cm9wZXJ0eSBjaGFuZ2UgbWF5IGluZGljYXRlIHRoZSBJUCBhZGRyZXNzIGNoYW5nZXMuCi0gICAg
ICAvLyBzbyBmb3J3YXJkIHRoZSBuZXcgTmV0d29ya0luZm9ybWF0aW9uIHRvIHRoZSBvYnNlcnZl
ci4KLSAgICAgIExvZ2dpbmcuZChUQUcsICJsaW5rIHByb3BlcnRpZXMgY2hhbmdlZDogIiArIGxp
bmtQcm9wZXJ0aWVzLnRvU3RyaW5nKCkpOwotICAgICAgb25OZXR3b3JrQ2hhbmdlZChuZXR3b3Jr
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkxvc2luZyhOZXR3
b3JrIG5ldHdvcmssIGludCBtYXhNc1RvTGl2ZSkgewotICAgICAgLy8gVGVsbCB0aGUgbmV0d29y
ayBpcyBnb2luZyB0byBsb3NlIGluIE1heE1zVG9MaXZlIG1pbGxpc2Vjb25kcy4KLSAgICAgIC8v
IFdlIG1heSB1c2UgdGhpcyBzaWduYWwgbGF0ZXIuCi0gICAgICBMb2dnaW5nLmQoCi0gICAgICAg
ICAgVEFHLCAiTmV0d29yayAiICsgbmV0d29yay50b1N0cmluZygpICsgIiBpcyBhYm91dCB0byBs
b3NlIGluICIgKyBtYXhNc1RvTGl2ZSArICJtcyIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uTG9zdChOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJOZXR3b3JrICIgKyBuZXR3b3JrLnRvU3RyaW5nKCkgKyAiIGlzIGRpc2Nvbm5lY3Rl
ZCIpOwotICAgICAgb2JzZXJ2ZXIub25OZXR3b3JrRGlzY29ubmVjdChuZXR3b3JrVG9OZXRJZChu
ZXR3b3JrKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG9uTmV0d29ya0NoYW5nZWQoTmV0
d29yayBuZXR3b3JrKSB7Ci0gICAgICBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm9ybWF0
aW9uID0gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLm5ldHdvcmtUb0luZm8obmV0d29yayk7
Ci0gICAgICBpZiAobmV0d29ya0luZm9ybWF0aW9uICE9IG51bGwpIHsKLSAgICAgICAgb2JzZXJ2
ZXIub25OZXR3b3JrQ29ubmVjdChuZXR3b3JrSW5mb3JtYXRpb24pOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIC8qKiBRdWVyaWVzIHRoZSBDb25uZWN0aXZpdHlNYW5hZ2VyIGZvciBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgY3VycmVudCBjb25uZWN0aW9uLiAqLwotICBzdGF0aWMgY2xhc3MgQ29u
bmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIHsKLSAgICAvKioKLSAgICAgKiAgTm90ZTogSW4gc29t
ZSByYXJlIEFuZHJvaWQgc3lzdGVtcyBjb25uZWN0aXZpdHlNYW5hZ2VyIGlzIG51bGwuICBXZSBo
YW5kbGUgdGhhdAotICAgICAqICBncmFjZWZ1bGx5IGJlbG93LgotICAgICAqLwotICAgIHByaXZh
dGUgZmluYWwgQ29ubmVjdGl2aXR5TWFuYWdlciBjb25uZWN0aXZpdHlNYW5hZ2VyOwotCi0gICAg
Q29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlKENvbnRleHQgY29udGV4dCkgewotICAgICAgY29u
bmVjdGl2aXR5TWFuYWdlciA9Ci0gICAgICAgICAgKENvbm5lY3Rpdml0eU1hbmFnZXIpIGNvbnRl
eHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNPTk5FQ1RJVklUWV9TRVJWSUNFKTsKLSAgICB9
Ci0KLSAgICAvLyBGb3IgdGVzdGluZy4KLSAgICBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUo
KSB7Ci0gICAgICAvLyBBbGwgdGhlIG1ldGhvZHMgYmVsb3cgc2hvdWxkIGJlIG92ZXJyaWRkZW4u
Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBSZXR1cm5zIGNvbm5lY3Rpb24gdHlwZSBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0
IHRoZSBjdXJyZW50Ci0gICAgICogZGVmYXVsdCBuZXR3b3JrLgotICAgICAqLwotICAgIE5ldHdv
cmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoKSB7Ci0gICAgICBpZiAoY29ubmVjdGl2aXR5TWFuYWdl
ciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGZhbHNlLCAtMSwg
LTEpOwotICAgICAgfQotICAgICAgcmV0dXJuIGdldE5ldHdvcmtTdGF0ZShjb25uZWN0aXZpdHlN
YW5hZ2VyLmdldEFjdGl2ZU5ldHdvcmtJbmZvKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAq
IFJldHVybnMgY29ubmVjdGlvbiB0eXBlIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgfG5l
dHdvcmt8LgotICAgICAqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJlbGVh
c2VzLgotICAgICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgTmV0d29ya1N0
YXRlIGdldE5ldHdvcmtTdGF0ZShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIGlmIChjb25uZWN0
aXZpdHlNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUo
ZmFsc2UsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZ2V0TmV0d29ya1N0YXRlKGNv
bm5lY3Rpdml0eU1hbmFnZXIuZ2V0TmV0d29ya0luZm8obmV0d29yaykpOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIFJldHVybnMgY29ubmVjdGlvbiB0eXBlIGFuZCBzdGF0dXMgaW5mb3JtYXRp
b24gZ2xlYW5lZCBmcm9tIG5ldHdvcmtJbmZvLgotICAgICAqLwotICAgIE5ldHdvcmtTdGF0ZSBn
ZXROZXR3b3JrU3RhdGUoTmV0d29ya0luZm8gbmV0d29ya0luZm8pIHsKLSAgICAgIGlmIChuZXR3
b3JrSW5mbyA9PSBudWxsIHx8ICFuZXR3b3JrSW5mby5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICAg
IHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGZhbHNlLCAtMSwgLTEpOwotICAgICAgfQotICAgICAg
cmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUodHJ1ZSwgbmV0d29ya0luZm8uZ2V0VHlwZSgpLCBuZXR3
b3JrSW5mby5nZXRTdWJ0eXBlKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMg
YWxsIGNvbm5lY3RlZCBuZXR3b3Jrcy4KLSAgICAgKiBPbmx5IGNhbGxhYmxlIG9uIExvbGxpcG9w
IGFuZCBuZXdlciByZWxlYXNlcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGki
KQotICAgIE5ldHdvcmtbXSBnZXRBbGxOZXR3b3JrcygpIHsKLSAgICAgIGlmIChjb25uZWN0aXZp
dHlNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrWzBdOwotICAg
ICAgfQotICAgICAgcmV0dXJuIGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0QWxsTmV0d29ya3MoKTsK
LSAgICB9Ci0KLSAgICBMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4gZ2V0QWN0aXZlTmV0d29ya0xp
c3QoKSB7Ci0gICAgICBpZiAoIXN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKSkgewotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIEFycmF5TGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+
IG5ldEluZm9MaXN0ID0gbmV3IEFycmF5TGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+KCk7Ci0gICAg
ICBmb3IgKE5ldHdvcmsgbmV0d29yayA6IGdldEFsbE5ldHdvcmtzKCkpIHsKLSAgICAgICAgTmV0
d29ya0luZm9ybWF0aW9uIGluZm8gPSBuZXR3b3JrVG9JbmZvKG5ldHdvcmspOwotICAgICAgICBp
ZiAoaW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgbmV0SW5mb0xpc3QuYWRkKGluZm8pOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV0SW5mb0xpc3Q7Ci0gICAgfQotCi0gICAg
LyoqCi0gICAgICogUmV0dXJucyB0aGUgTmV0SUQgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdCBuZXR3
b3JrLiBSZXR1cm5zCi0gICAgICogSU5WQUxJRF9ORVRfSUQgaWYgbm8gY3VycmVudCBkZWZhdWx0
IG5ldHdvcmsgY29ubmVjdGVkLgotICAgICAqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5k
IG5ld2VyIHJlbGVhc2VzLgotICAgICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0g
ICAgbG9uZyBnZXREZWZhdWx0TmV0SWQoKSB7Ci0gICAgICBpZiAoIXN1cHBvcnROZXR3b3JrQ2Fs
bGJhY2soKSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgICB9Ci0gICAg
ICAvLyBBbmRyb2lkIExvbGxpcG9wIGhhZCBubyBBUEkgdG8gZ2V0IHRoZSBkZWZhdWx0IG5ldHdv
cms7IG9ubHkgYW4KLSAgICAgIC8vIEFQSSB0byByZXR1cm4gdGhlIE5ldHdvcmtJbmZvIGZvciB0
aGUgZGVmYXVsdCBuZXR3b3JrLiBUbwotICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IG5l
dHdvcmsgb25lIGNhbiBmaW5kIHRoZSBuZXR3b3JrIHdpdGgKLSAgICAgIC8vIHR5cGUgbWF0Y2hp
bmcgdGhhdCBvZiB0aGUgZGVmYXVsdCBuZXR3b3JrLgotICAgICAgZmluYWwgTmV0d29ya0luZm8g
ZGVmYXVsdE5ldHdvcmtJbmZvID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXRBY3RpdmVOZXR3b3Jr
SW5mbygpOwotICAgICAgaWYgKGRlZmF1bHROZXR3b3JrSW5mbyA9PSBudWxsKSB7Ci0gICAgICAg
IHJldHVybiBJTlZBTElEX05FVF9JRDsKLSAgICAgIH0KLSAgICAgIGZpbmFsIE5ldHdvcmtbXSBu
ZXR3b3JrcyA9IGdldEFsbE5ldHdvcmtzKCk7Ci0gICAgICBsb25nIGRlZmF1bHROZXRJZCA9IElO
VkFMSURfTkVUX0lEOwotICAgICAgZm9yIChOZXR3b3JrIG5ldHdvcmsgOiBuZXR3b3Jrcykgewot
ICAgICAgICBpZiAoIWhhc0ludGVybmV0Q2FwYWJpbGl0eShuZXR3b3JrKSkgewotICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIE5ldHdvcmtJbmZvIG5ldHdvcmtJ
bmZvID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXROZXR3b3JrSW5mbyhuZXR3b3JrKTsKLSAgICAg
ICAgaWYgKG5ldHdvcmtJbmZvICE9IG51bGwgJiYgbmV0d29ya0luZm8uZ2V0VHlwZSgpID09IGRl
ZmF1bHROZXR3b3JrSW5mby5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAvLyBUaGVyZSBzaG91bGQg
bm90IGJlIG11bHRpcGxlIGNvbm5lY3RlZCBuZXR3b3JrcyBvZiB0aGUKLSAgICAgICAgICAvLyBz
YW1lIHR5cGUuIEF0IGxlYXN0IGFzIG9mIEFuZHJvaWQgTWFyc2htYWxsb3cgdGhpcyBpcwotICAg
ICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQuIElmIHRoaXMgYmVjb21lcyBzdXBwb3J0ZWQgdGhpcyBh
c3NlcnRpb24KLSAgICAgICAgICAvLyBtYXkgdHJpZ2dlci4gQXQgdGhhdCBwb2ludCB3ZSBjb3Vs
ZCBjb25zaWRlciB1c2luZwotICAgICAgICAgIC8vIENvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0RGVm
YXVsdE5ldHdvcmsoKSB0aG91Z2ggdGhpcwotICAgICAgICAgIC8vIG1heSBnaXZlIGNvbmZ1c2lu
ZyByZXN1bHRzIHdpdGggVlBOcyBhbmQgaXMgb25seQotICAgICAgICAgIC8vIGF2YWlsYWJsZSB3
aXRoIEFuZHJvaWQgTWFyc2htYWxsb3cuCi0gICAgICAgICAgYXNzZXJ0IGRlZmF1bHROZXRJZCA9
PSBJTlZBTElEX05FVF9JRDsKLSAgICAgICAgICBkZWZhdWx0TmV0SWQgPSBuZXR3b3JrVG9OZXRJ
ZChuZXR3b3JrKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGRlZmF1bHROZXRJ
ZDsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIHByaXZhdGUgTmV0
d29ya0luZm9ybWF0aW9uIG5ldHdvcmtUb0luZm8oTmV0d29yayBuZXR3b3JrKSB7Ci0gICAgICBM
aW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0TGlu
a1Byb3BlcnRpZXMobmV0d29yayk7Ci0gICAgICAvLyBnZXRMaW5rUHJvcGVydGllcyB3aWxsIHJl
dHVybiBudWxsIGlmIHRoZSBuZXR3b3JrIGlzIHVua25vd24uCi0gICAgICBpZiAobGlua1Byb3Bl
cnRpZXMgPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiRGV0ZWN0ZWQgdW5rbm93
biBuZXR3b3JrOiAiICsgbmV0d29yay50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgICB9Ci0gICAgICBpZiAobGlua1Byb3BlcnRpZXMuZ2V0SW50ZXJmYWNlTmFtZSgpID09
IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIk51bGwgaW50ZXJmYWNlIG5hbWUgZm9y
IG5ldHdvcmsgIiArIG5ldHdvcmsudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgfQotCi0gICAgICBOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0gZ2V0TmV0d29ya1N0
YXRlKG5ldHdvcmspOwotICAgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUgPSBnZXRD
b25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUpOwotICAgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09
IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fTk9ORSkgewotICAgICAgICAvLyBUaGlzIG1heSBu
b3QgYmUgYW4gZXJyb3IuIFRoZSBPUyBtYXkgc2lnbmFsIGEgbmV0d29yayBldmVudCB3aXRoIGNv
bm5lY3Rpb24gdHlwZQotICAgICAgICAvLyBOT05FIHdoZW4gdGhlIG5ldHdvcmsgZGlzY29ubmVj
dHMuCi0gICAgICAgIExvZ2dpbmcuZChUQUcsICJOZXR3b3JrICIgKyBuZXR3b3JrLnRvU3RyaW5n
KCkgKyAiIGlzIGRpc2Nvbm5lY3RlZCIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0K
LQotICAgICAgLy8gU29tZSBhbmRyb2lkIGRldmljZSBtYXkgcmV0dXJuIGEgQ09OTkVDVElPTl9V
TktOT1dOX0NFTExVTEFSIG9yIENPTk5FQ1RJT05fVU5LTk9XTiB0eXBlLAotICAgICAgLy8gd2hp
Y2ggYXBwZWFycyB0byBiZSB1c2FibGUuIEp1c3QgbG9nIHRoZW0gaGVyZS4KLSAgICAgIGlmIChj
b25uZWN0aW9uVHlwZSA9PSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV04KLSAgICAg
ICAgICB8fCBjb25uZWN0aW9uVHlwZSA9PSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05P
V05fQ0VMTFVMQVIpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIk5ldHdvcmsgIiArIG5ldHdv
cmsudG9TdHJpbmcoKSArICIgY29ubmVjdGlvbiB0eXBlIGlzICIgKyBjb25uZWN0aW9uVHlwZQot
ICAgICAgICAgICAgICAgICsgIiBiZWNhdXNlIGl0IGhhcyB0eXBlICIgKyBuZXR3b3JrU3RhdGUu
Z2V0TmV0d29ya1R5cGUoKSArICIgYW5kIHN1YnR5cGUgIgotICAgICAgICAgICAgICAgICsgbmV0
d29ya1N0YXRlLmdldE5ldHdvcmtTdWJUeXBlKCkpOwotICAgICAgfQotCi0gICAgICBOZXR3b3Jr
SW5mb3JtYXRpb24gbmV0d29ya0luZm9ybWF0aW9uID0KLSAgICAgICAgICBuZXcgTmV0d29ya0lu
Zm9ybWF0aW9uKGxpbmtQcm9wZXJ0aWVzLmdldEludGVyZmFjZU5hbWUoKSwgY29ubmVjdGlvblR5
cGUsCi0gICAgICAgICAgICAgIG5ldHdvcmtUb05ldElkKG5ldHdvcmspLCBnZXRJUEFkZHJlc3Nl
cyhsaW5rUHJvcGVydGllcykpOwotICAgICAgcmV0dXJuIG5ldHdvcmtJbmZvcm1hdGlvbjsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYge0Bjb2RlIG5ldHdvcmt9IGNh
biBwcm92aWRlIEludGVybmV0IGFjY2Vzcy4gQ2FuIGJlIHVzZWQgdG8KLSAgICAgKiBpZ25vcmUg
c3BlY2lhbGl6ZWQgbmV0d29ya3MgKGUuZy4gSU1TLCBGT1RBKS4KLSAgICAgKi8KLSAgICBAU3Vw
cHJlc3NMaW50KCJOZXdBcGkiKQotICAgIGJvb2xlYW4gaGFzSW50ZXJuZXRDYXBhYmlsaXR5KE5l
dHdvcmsgbmV0d29yaykgewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXIgPT0gbnVsbCkg
ewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBOZXR3b3JrQ2Fw
YWJpbGl0aWVzIGNhcGFiaWxpdGllcyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0TmV0d29ya0Nh
cGFiaWxpdGllcyhuZXR3b3JrKTsKLSAgICAgIHJldHVybiBjYXBhYmlsaXRpZXMgIT0gbnVsbCAm
JiBjYXBhYmlsaXRpZXMuaGFzQ2FwYWJpbGl0eShORVRfQ0FQQUJJTElUWV9JTlRFUk5FVCk7Ci0g
ICAgfQotCi0gICAgLyoqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJlbGVh
c2VzLiAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgcHVibGljIHZvaWQgcmVn
aXN0ZXJOZXR3b3JrQ2FsbGJhY2soTmV0d29ya0NhbGxiYWNrIG5ldHdvcmtDYWxsYmFjaykgewot
ICAgICAgY29ubmVjdGl2aXR5TWFuYWdlci5yZWdpc3Rlck5ldHdvcmtDYWxsYmFjaygKLSAgICAg
ICAgICBuZXcgTmV0d29ya1JlcXVlc3QuQnVpbGRlcigpLmFkZENhcGFiaWxpdHkoTkVUX0NBUEFC
SUxJVFlfSU5URVJORVQpLmJ1aWxkKCksCi0gICAgICAgICAgbmV0d29ya0NhbGxiYWNrKTsKLSAg
ICB9Ci0KLSAgICAvKiogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFz
ZXMuICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBwdWJsaWMgdm9pZCByZXF1
ZXN0TW9iaWxlTmV0d29yayhOZXR3b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0gICAg
ICBOZXR3b3JrUmVxdWVzdC5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTmV0d29ya1JlcXVlc3QuQnVp
bGRlcigpOwotICAgICAgYnVpbGRlci5hZGRDYXBhYmlsaXR5KE5FVF9DQVBBQklMSVRZX0lOVEVS
TkVUKS5hZGRUcmFuc3BvcnRUeXBlKFRSQU5TUE9SVF9DRUxMVUxBUik7Ci0gICAgICBjb25uZWN0
aXZpdHlNYW5hZ2VyLnJlcXVlc3ROZXR3b3JrKGJ1aWxkZXIuYnVpbGQoKSwgbmV0d29ya0NhbGxi
YWNrKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIElQQWRkcmVz
c1tdIGdldElQQWRkcmVzc2VzKExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzKSB7Ci0gICAg
ICBJUEFkZHJlc3NbXSBpcEFkZHJlc3NlcyA9IG5ldyBJUEFkZHJlc3NbbGlua1Byb3BlcnRpZXMu
Z2V0TGlua0FkZHJlc3NlcygpLnNpemUoKV07Ci0gICAgICBpbnQgaSA9IDA7Ci0gICAgICBmb3Ig
KExpbmtBZGRyZXNzIGxpbmtBZGRyZXNzIDogbGlua1Byb3BlcnRpZXMuZ2V0TGlua0FkZHJlc3Nl
cygpKSB7Ci0gICAgICAgIGlwQWRkcmVzc2VzW2ldID0gbmV3IElQQWRkcmVzcyhsaW5rQWRkcmVz
cy5nZXRBZGRyZXNzKCkuZ2V0QWRkcmVzcygpKTsKLSAgICAgICAgKytpOwotICAgICAgfQotICAg
ICAgcmV0dXJuIGlwQWRkcmVzc2VzOwotICAgIH0KLQotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0Fw
aSIpCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZUNhbGxiYWNrKE5ldHdvcmtDYWxsYmFjayBuZXR3
b3JrQ2FsbGJhY2spIHsKLSAgICAgIGlmIChzdXBwb3J0TmV0d29ya0NhbGxiYWNrKCkpIHsKLSAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIlVucmVnaXN0ZXIgbmV0d29yayBjYWxsYmFjayIpOwotICAg
ICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyLnVucmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2sobmV0d29y
a0NhbGxiYWNrKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0
TmV0d29ya0NhbGxiYWNrKCkgewotICAgICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+
PSBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QICYmIGNvbm5lY3Rpdml0eU1hbmFnZXIgIT0g
bnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKiogUXVlcmllcyB0aGUgV2lmaU1hbmFnZXIgZm9yIFNT
SUQgb2YgdGhlIGN1cnJlbnQgV2lmaSBjb25uZWN0aW9uLiAqLwotICBzdGF0aWMgY2xhc3MgV2lm
aU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0g
ICAgV2lmaU1hbmFnZXJEZWxlZ2F0ZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgIHRoaXMuY29u
dGV4dCA9IGNvbnRleHQ7Ci0gICAgfQotCi0gICAgLy8gRm9yIHRlc3RpbmcuCi0gICAgV2lmaU1h
bmFnZXJEZWxlZ2F0ZSgpIHsKLSAgICAgIC8vIEFsbCB0aGUgbWV0aG9kcyBiZWxvdyBzaG91bGQg
YmUgb3ZlcnJpZGRlbi4KLSAgICAgIGNvbnRleHQgPSBudWxsOwotICAgIH0KLQotICAgIFN0cmlu
ZyBnZXRXaWZpU1NJRCgpIHsKLSAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBjb250ZXh0LnJl
Z2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgbnVsbCwgbmV3IEludGVudEZpbHRlcihXaWZpTWFu
YWdlci5ORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OKSk7Ci0gICAgICBpZiAoaW50ZW50ICE9
IG51bGwpIHsKLSAgICAgICAgZmluYWwgV2lmaUluZm8gd2lmaUluZm8gPSBpbnRlbnQuZ2V0UGFy
Y2VsYWJsZUV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfSU5GTyk7Ci0gICAgICAgIGlmICh3
aWZpSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgZmluYWwgU3RyaW5nIHNzaWQgPSB3aWZpSW5m
by5nZXRTU0lEKCk7Ci0gICAgICAgICAgaWYgKHNzaWQgIT0gbnVsbCkgewotICAgICAgICAgICAg
cmV0dXJuIHNzaWQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gIiI7Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIGZpbmFsIGxvbmcgSU5WQUxJRF9ORVRfSUQg
PSAtMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOZXR3b3JrTW9uaXRv
ckF1dG9EZXRlY3QiOwotCi0gIC8vIE9ic2VydmVyIGZvciB0aGUgY29ubmVjdGlvbiB0eXBlIGNo
YW5nZS4KLSAgcHJpdmF0ZSBmaW5hbCBPYnNlcnZlciBvYnNlcnZlcjsKLSAgcHJpdmF0ZSBmaW5h
bCBJbnRlbnRGaWx0ZXIgaW50ZW50RmlsdGVyOwotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29u
dGV4dDsKLSAgLy8gVXNlZCB0byByZXF1ZXN0IG1vYmlsZSBuZXR3b3JrLiBJdCBkb2VzIG5vdCBk
byBhbnl0aGluZyBleGNlcHQgZm9yIGtlZXBpbmcKLSAgLy8gdGhlIGNhbGxiYWNrIGZvciByZWxl
YXNpbmcgdGhlIHJlcXVlc3QuCi0gIHByaXZhdGUgZmluYWwgTmV0d29ya0NhbGxiYWNrIG1vYmls
ZU5ldHdvcmtDYWxsYmFjazsKLSAgLy8gVXNlZCB0byByZWNlaXZlIHVwZGF0ZXMgb24gYWxsIG5l
dHdvcmtzLgotICBwcml2YXRlIGZpbmFsIE5ldHdvcmtDYWxsYmFjayBhbGxOZXR3b3JrQ2FsbGJh
Y2s7Ci0gIC8vIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBhbmQgd2lmaU1hbmFnZXJEZWxl
Z2F0ZSBhcmUgb25seSBub24tZmluYWwgZm9yIHRlc3RpbmcuCi0gIHByaXZhdGUgQ29ubmVjdGl2
aXR5TWFuYWdlckRlbGVnYXRlIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZTsKLSAgcHJpdmF0
ZSBXaWZpTWFuYWdlckRlbGVnYXRlIHdpZmlNYW5hZ2VyRGVsZWdhdGU7Ci0KLSAgcHJpdmF0ZSBi
b29sZWFuIGlzUmVnaXN0ZXJlZDsKLSAgcHJpdmF0ZSBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9u
VHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd2lmaVNTSUQ7Ci0KLSAgLyoqCi0gICAqIE9ic2VydmVy
IGludGVyZmFjZSBieSB3aGljaCBvYnNlcnZlciBpcyBub3RpZmllZCBvZiBuZXR3b3JrIGNoYW5n
ZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBPYnNlcnZlciB7Ci0gICAgLyoq
Ci0gICAgICogQ2FsbGVkIHdoZW4gZGVmYXVsdCBuZXR3b3JrIGNoYW5nZXMuCi0gICAgICovCi0g
ICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoQ29ubmVjdGlvblR5cGUgbmV3
Q29ubmVjdGlvblR5cGUpOwotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Nvbm5lY3QoTmV0d29y
a0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvKTsKLSAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtEaXNj
b25uZWN0KGxvbmcgbmV0d29ya0hhbmRsZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3RydWN0
cyBhIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIFVJ
IHRocmVhZC4KLSAgICovCi0gIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gIHB1YmxpYyBOZXR3
b3JrTW9uaXRvckF1dG9EZXRlY3QoT2JzZXJ2ZXIgb2JzZXJ2ZXIsIENvbnRleHQgY29udGV4dCkg
ewotICAgIHRoaXMub2JzZXJ2ZXIgPSBvYnNlcnZlcjsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250
ZXh0OwotICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSA9IG5ldyBDb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUoY29udGV4dCk7Ci0gICAgd2lmaU1hbmFnZXJEZWxlZ2F0ZSA9IG5ldyBX
aWZpTWFuYWdlckRlbGVnYXRlKGNvbnRleHQpOwotCi0gICAgZmluYWwgTmV0d29ya1N0YXRlIG5l
dHdvcmtTdGF0ZSA9IGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5nZXROZXR3b3JrU3RhdGUo
KTsKLSAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSk7
Ci0gICAgd2lmaVNTSUQgPSBnZXRXaWZpU1NJRChuZXR3b3JrU3RhdGUpOwotICAgIGludGVudEZp
bHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoQ29ubmVjdGl2aXR5TWFuYWdlci5DT05ORUNUSVZJVFlf
QUNUSU9OKTsKLQotICAgIHJlZ2lzdGVyUmVjZWl2ZXIoKTsKLSAgICBpZiAoY29ubmVjdGl2aXR5
TWFuYWdlckRlbGVnYXRlLnN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKSkgewotICAgICAgLy8gT24g
QW5kcm9pZCA2LjAuMCwgdGhlIFdSSVRFX1NFVFRJTkdTIHBlcm1pc3Npb24gaXMgbmVjZXNzYXJ5
IGZvcgotICAgICAgLy8gcmVxdWVzdE5ldHdvcmssIHNvIGl0IHdpbGwgZmFpbC4gVGhpcyB3YXMg
Zml4ZWQgaW4gQW5kcm9pZCA2LjAuMS4KLSAgICAgIE5ldHdvcmtDYWxsYmFjayB0ZW1wTmV0d29y
a0NhbGxiYWNrID0gbmV3IE5ldHdvcmtDYWxsYmFjaygpOwotICAgICAgdHJ5IHsKLSAgICAgICAg
Y29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLnJlcXVlc3RNb2JpbGVOZXR3b3JrKHRlbXBOZXR3
b3JrQ2FsbGJhY2spOwotICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIlVuYWJsZSB0byBvYnRhaW4gcGVybWlzc2lv
biB0byByZXF1ZXN0IGEgY2VsbHVsYXIgbmV0d29yay4iKTsKLSAgICAgICAgdGVtcE5ldHdvcmtD
YWxsYmFjayA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBtb2JpbGVOZXR3b3JrQ2FsbGJhY2sgPSB0
ZW1wTmV0d29ya0NhbGxiYWNrOwotICAgICAgYWxsTmV0d29ya0NhbGxiYWNrID0gbmV3IFNpbXBs
ZU5ldHdvcmtDYWxsYmFjaygpOwotICAgICAgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLnJl
Z2lzdGVyTmV0d29ya0NhbGxiYWNrKGFsbE5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIG1vYmlsZU5ldHdvcmtDYWxsYmFjayA9IG51bGw7Ci0gICAgICBhbGxOZXR3b3JrQ2Fs
bGJhY2sgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbGxvd3Mgb3ZlcnJpZGlu
ZyB0aGUgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGZvciB0ZXN0cy4KLSAgICovCi0gIHZv
aWQgc2V0Q29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlRm9yVGVzdHMoQ29ubmVjdGl2aXR5TWFu
YWdlckRlbGVnYXRlIGRlbGVnYXRlKSB7Ci0gICAgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRl
ID0gZGVsZWdhdGU7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3dzIG92ZXJyaWRpbmcgdGhlIFdp
ZmlNYW5hZ2VyRGVsZWdhdGUgZm9yIHRlc3RzLgotICAgKi8KLSAgdm9pZCBzZXRXaWZpTWFuYWdl
ckRlbGVnYXRlRm9yVGVzdHMoV2lmaU1hbmFnZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSkgewotICAgIHdp
ZmlNYW5hZ2VyRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5z
IHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgcmVnaXN0ZXJlZCB0byByZWNlaXZlIG5ldHdvcmsgY29u
bmVjdGl2aXR5IGludGVudHMuCi0gICAqIFZpc2libGUgZm9yIHRlc3RpbmcuCi0gICAqLwotICBi
b29sZWFuIGlzUmVjZWl2ZXJSZWdpc3RlcmVkRm9yVGVzdGluZygpIHsKLSAgICByZXR1cm4gaXNS
ZWdpc3RlcmVkOwotICB9Ci0KLSAgTGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+IGdldEFjdGl2ZU5l
dHdvcmtMaXN0KCkgewotICAgIHJldHVybiBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUuZ2V0
QWN0aXZlTmV0d29ya0xpc3QoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7Ci0g
ICAgaWYgKGFsbE5ldHdvcmtDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBjb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUucmVsZWFzZUNhbGxiYWNrKGFsbE5ldHdvcmtDYWxsYmFjayk7Ci0gICAg
fQotICAgIGlmIChtb2JpbGVOZXR3b3JrQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgY29ubmVj
dGl2aXR5TWFuYWdlckRlbGVnYXRlLnJlbGVhc2VDYWxsYmFjayhtb2JpbGVOZXR3b3JrQ2FsbGJh
Y2spOwotICAgIH0KLSAgICB1bnJlZ2lzdGVyUmVjZWl2ZXIoKTsKLSAgfQotCi0gIC8qKgotICAg
KiBSZWdpc3RlcnMgYSBCcm9hZGNhc3RSZWNlaXZlciBpbiB0aGUgZ2l2ZW4gY29udGV4dC4KLSAg
ICovCi0gIHByaXZhdGUgdm9pZCByZWdpc3RlclJlY2VpdmVyKCkgewotICAgIGlmIChpc1JlZ2lz
dGVyZWQpCi0gICAgICByZXR1cm47Ci0KLSAgICBpc1JlZ2lzdGVyZWQgPSB0cnVlOwotICAgIGNv
bnRleHQucmVnaXN0ZXJSZWNlaXZlcih0aGlzLCBpbnRlbnRGaWx0ZXIpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFVucmVnaXN0ZXJzIHRoZSBCcm9hZGNhc3RSZWNlaXZlciBpbiB0aGUgZ2l2ZW4gY29u
dGV4dC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB1bnJlZ2lzdGVyUmVjZWl2ZXIoKSB7Ci0gICAg
aWYgKCFpc1JlZ2lzdGVyZWQpCi0gICAgICByZXR1cm47Ci0KLSAgICBpc1JlZ2lzdGVyZWQgPSBm
YWxzZTsKLSAgICBjb250ZXh0LnVucmVnaXN0ZXJSZWNlaXZlcih0aGlzKTsKLSAgfQotCi0gIHB1
YmxpYyBOZXR3b3JrU3RhdGUgZ2V0Q3VycmVudE5ldHdvcmtTdGF0ZSgpIHsKLSAgICByZXR1cm4g
Y29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLmdldE5ldHdvcmtTdGF0ZSgpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFJldHVybnMgTmV0SUQgb2YgZGV2aWNlJ3MgY3VycmVudCBkZWZhdWx0IGNvbm5l
Y3RlZCBuZXR3b3JrIHVzZWQgZm9yCi0gICAqIGNvbW11bmljYXRpb24uCi0gICAqIE9ubHkgaW1w
bGVtZW50ZWQgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJlbGVhc2VzLCByZXR1cm5zIElOVkFMSURf
TkVUX0lECi0gICAqIHdoZW4gbm90IGltcGxlbWVudGVkLgotICAgKi8KLSAgcHVibGljIGxvbmcg
Z2V0RGVmYXVsdE5ldElkKCkgewotICAgIHJldHVybiBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdh
dGUuZ2V0RGVmYXVsdE5ldElkKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIENvbm5lY3Rpb25U
eXBlIGdldENvbm5lY3Rpb25UeXBlKE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUpIHsKLSAgICBp
ZiAoIW5ldHdvcmtTdGF0ZS5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICByZXR1cm4gQ29ubmVjdGlv
blR5cGUuQ09OTkVDVElPTl9OT05FOwotICAgIH0KLQotICAgIHN3aXRjaCAobmV0d29ya1N0YXRl
LmdldE5ldHdvcmtUeXBlKCkpIHsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBF
X0VUSEVSTkVUOgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9FVEhF
Uk5FVDsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1dJRkk6Ci0gICAgICAg
IHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1dJRkk7Ci0gICAgICBjYXNlIENvbm5l
Y3Rpdml0eU1hbmFnZXIuVFlQRV9XSU1BWDoKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBl
LkNPTk5FQ1RJT05fNEc7Ci0gICAgICBjYXNlIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9CTFVF
VE9PVEg6Ci0gICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX0JMVUVUT09U
SDsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX01PQklMRToKLSAgICAgICAg
Ly8gVXNlIGluZm9ybWF0aW9uIGZyb20gVGVsZXBob255TWFuYWdlciB0byBjbGFzc2lmeSB0aGUg
Y29ubmVjdGlvbi4KLSAgICAgICAgc3dpdGNoIChuZXR3b3JrU3RhdGUuZ2V0TmV0d29ya1N1YlR5
cGUoKSkgewotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfR1BS
UzoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VER0U6Ci0g
ICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9DRE1BOgotICAgICAg
ICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfMXhSVFQ6Ci0gICAgICAgICAg
Y2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9JREVOOgotICAgICAgICAgICAgcmV0
dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fMkc7Ci0gICAgICAgICAgY2FzZSBUZWxlcGhv
bnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9VTVRTOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFu
YWdlci5ORVRXT1JLX1RZUEVfRVZET18wOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdl
ci5ORVRXT1JLX1RZUEVfRVZET19BOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5O
RVRXT1JLX1RZUEVfSFNEUEE6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdP
UktfVFlQRV9IU1VQQToKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19U
WVBFX0hTUEE6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9F
VkRPX0I6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9FSFJQ
RDoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTUEFQOgot
ICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fM0c7Ci0gICAgICAg
ICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9MVEU6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl80RzsKLSAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTl9DRUxM
VUxBUjsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rp
b25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTjsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmlu
ZyBnZXRXaWZpU1NJRChOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKSB7Ci0gICAgaWYgKGdldENv
bm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSkgIT0gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9X
SUZJKQotICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiB3aWZpTWFuYWdlckRlbGVnYXRlLmdl
dFdpZmlTU0lEKCk7Ci0gIH0KLQotICAvLyBCcm9hZGNhc3RSZWNlaXZlcgotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkg
ewotICAgIGZpbmFsIE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUgPSBnZXRDdXJyZW50TmV0d29y
a1N0YXRlKCk7Ci0gICAgaWYgKENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElWSVRZX0FDVElP
Ti5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgewotICAgICAgY29ubmVjdGlvblR5cGVDaGFu
Z2VkKG5ldHdvcmtTdGF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvbm5lY3Rp
b25UeXBlQ2hhbmdlZChOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKSB7Ci0gICAgQ29ubmVjdGlv
blR5cGUgbmV3Q29ubmVjdGlvblR5cGUgPSBnZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUp
OwotICAgIFN0cmluZyBuZXdXaWZpU1NJRCA9IGdldFdpZmlTU0lEKG5ldHdvcmtTdGF0ZSk7Ci0g
ICAgaWYgKG5ld0Nvbm5lY3Rpb25UeXBlID09IGNvbm5lY3Rpb25UeXBlICYmIG5ld1dpZmlTU0lE
LmVxdWFscyh3aWZpU1NJRCkpCi0gICAgICByZXR1cm47Ci0KLSAgICBjb25uZWN0aW9uVHlwZSA9
IG5ld0Nvbm5lY3Rpb25UeXBlOwotICAgIHdpZmlTU0lEID0gbmV3V2lmaVNTSUQ7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIk5ldHdvcmsgY29ubmVjdGl2aXR5IGNoYW5nZWQsIHR5cGUgaXM6ICIgKyBj
b25uZWN0aW9uVHlwZSk7Ci0gICAgb2JzZXJ2ZXIub25Db25uZWN0aW9uVHlwZUNoYW5nZWQobmV3
Q29ubmVjdGlvblR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEV4dHJhY3RzIE5ldElEIG9mIG5l
dHdvcmsgb24gTG9sbGlwb3AgYW5kIE5ldHdvcmtIYW5kbGUgKHdoaWNoIGlzIG11bmdsZWQKLSAg
ICogTmV0SUQpIG9uIE1hcnNobWFsbG93IGFuZCBuZXdlciByZWxlYXNlcy4gT25seSBhdmFpbGFi
bGUgb24gTG9sbGlwb3AgYW5kCi0gICAqIG5ld2VyIHJlbGVhc2VzLiBSZXR1cm5zIGxvbmcgc2lu
Y2UgZ2V0TmV0d29ya0hhbmRsZSByZXR1cm5zIGxvbmcuCi0gICAqLwotICBAU3VwcHJlc3NMaW50
KCJOZXdBcGkiKQotICBwcml2YXRlIHN0YXRpYyBsb25nIG5ldHdvcmtUb05ldElkKE5ldHdvcmsg
bmV0d29yaykgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lP
Tl9DT0RFUy5NKSB7Ci0gICAgICByZXR1cm4gbmV0d29yay5nZXROZXR3b3JrSGFuZGxlKCk7Ci0g
ICAgfQotCi0gICAgLy8gTk9URShob25naGFpeik6IFRoaXMgZGVwZW5kcyBvbiBBbmRyb2lkIGZy
YW1ld29yayBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotICAgIC8vIFRoZXNlIGRldGFpbHMgY2Fu
bm90IGNoYW5nZSBiZWNhdXNlIExvbGxpcG9wIGhhcyBiZWVuIHJlbGVhc2VkLgotICAgIHJldHVy
biBJbnRlZ2VyLnBhcnNlSW50KG5ldHdvcmsudG9TdHJpbmcoKSk7Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvT1dORVJTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvT1dO
RVJTCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL09XTkVSUwkobm9uZXhp
c3RlbnQpCkBAIC0xLDQgKzAsMCBAQAotbWFnamVkQHdlYnJ0Yy5vcmcKLQotcGVyLWZpbGUgQ2Ft
ZXJhKj1zYWthbEB3ZWJydGMub3JnCi1wZXItZmlsZSBNZXRyaWNzLmphdmE9c2FrYWxAd2VicnRj
Lm9yZwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbi5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24uamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbi5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndl
YnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwu
TGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBKYXZhLWxhbmQg
dmVyc2lvbiBvZiB0aGUgUGVlckNvbm5lY3Rpb24gQVBJczsgd3JhcHMgdGhlIEMrKyBBUEkKLSAq
IGh0dHA6Ly93d3cud2VicnRjLm9yZy9yZWZlcmVuY2UvbmF0aXZlLWFwaXMsIHdoaWNoIGluIHR1
cm4gaXMgaW5zcGlyZWQgYnkgdGhlCi0gKiBKUyBBUElzOiBodHRwOi8vZGV2LnczLm9yZy8yMDEx
L3dlYnJ0Yy9lZGl0b3Ivd2VicnRjLmh0bWwgYW5kCi0gKiBodHRwOi8vd3d3LnczLm9yZy9UUi9t
ZWRpYWNhcHR1cmUtc3RyZWFtcy8KLSAqLwotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uIHsK
LSAgc3RhdGljIHsKLSAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImppbmdsZV9wZWVyY29ubmVjdGlv
bl9zbyIpOwotICB9Ci0KLSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6SWNl
R2F0aGVyaW5nU3RhdGUgKi8KLSAgcHVibGljIGVudW0gSWNlR2F0aGVyaW5nU3RhdGUgeyBORVcs
IEdBVEhFUklORywgQ09NUExFVEUgfQotCi0gIC8qKiBUcmFja3MgUGVlckNvbm5lY3Rpb25JbnRl
cmZhY2U6OkljZUNvbm5lY3Rpb25TdGF0ZSAqLwotICBwdWJsaWMgZW51bSBJY2VDb25uZWN0aW9u
U3RhdGUgewotICAgIE5FVywKLSAgICBDSEVDS0lORywKLSAgICBDT05ORUNURUQsCi0gICAgQ09N
UExFVEVELAotICAgIEZBSUxFRCwKLSAgICBESVNDT05ORUNURUQsCi0gICAgQ0xPU0VECi0gIH0K
LQotICAvKiogVHJhY2tzIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpTaWduYWxpbmdTdGF0ZSAq
LwotICBwdWJsaWMgZW51bSBTaWduYWxpbmdTdGF0ZSB7Ci0gICAgU1RBQkxFLAotICAgIEhBVkVf
TE9DQUxfT0ZGRVIsCi0gICAgSEFWRV9MT0NBTF9QUkFOU1dFUiwKLSAgICBIQVZFX1JFTU9URV9P
RkZFUiwKLSAgICBIQVZFX1JFTU9URV9QUkFOU1dFUiwKLSAgICBDTE9TRUQKLSAgfQotCi0gIC8q
KiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25PYnNlcnZlci4gKi8KLSAgcHVibGljIHN0
YXRpYyBpbnRlcmZhY2UgT2JzZXJ2ZXIgewotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgU2ln
bmFsaW5nU3RhdGUgY2hhbmdlcy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvblNpZ25hbGluZ0NoYW5n
ZShTaWduYWxpbmdTdGF0ZSBuZXdTdGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gdGhl
IEljZUNvbm5lY3Rpb25TdGF0ZSBjaGFuZ2VzLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ29u
bmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpOwotCi0gICAgLyoqIFRy
aWdnZXJlZCB3aGVuIHRoZSBJQ0UgY29ubmVjdGlvbiByZWNlaXZpbmcgc3RhdHVzIGNoYW5nZXMu
ICovCi0gICAgcHVibGljIHZvaWQgb25JY2VDb25uZWN0aW9uUmVjZWl2aW5nQ2hhbmdlKGJvb2xl
YW4gcmVjZWl2aW5nKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgSWNlR2F0aGVyaW5n
U3RhdGUgY2hhbmdlcy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkljZUdhdGhlcmluZ0NoYW5nZShJ
Y2VHYXRoZXJpbmdTdGF0ZSBuZXdTdGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gYSBu
ZXcgSUNFIGNhbmRpZGF0ZSBoYXMgYmVlbiBmb3VuZC4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbklj
ZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQg
d2hlbiBzb21lIElDRSBjYW5kaWRhdGVzIGhhdmUgYmVlbiByZW1vdmVkLiAqLwotICAgIHB1Ymxp
YyB2b2lkIG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7
Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gbWVkaWEgaXMgcmVjZWl2ZWQgb24gYSBuZXcgc3Ry
ZWFtIGZyb20gcmVtb3RlIHBlZXIuICovCi0gICAgcHVibGljIHZvaWQgb25BZGRTdHJlYW0oTWVk
aWFTdHJlYW0gc3RyZWFtKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiBhIHJlbW90ZSBwZWVy
IGNsb3NlIGEgc3RyZWFtLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uUmVtb3ZlU3RyZWFtKE1lZGlh
U3RyZWFtIHN0cmVhbSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gYSByZW1vdGUgcGVlciBv
cGVucyBhIERhdGFDaGFubmVsLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uRGF0YUNoYW5uZWwoRGF0
YUNoYW5uZWwgZGF0YUNoYW5uZWwpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHJlbmVnb3Rp
YXRpb24gaXMgbmVjZXNzYXJ5LiAqLwotICAgIHB1YmxpYyB2b2lkIG9uUmVuZWdvdGlhdGlvbk5l
ZWRlZCgpOwotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZS5JY2VTZXJ2ZXIuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSWNlU2VydmVyIHsKLSAg
ICBwdWJsaWMgZmluYWwgU3RyaW5nIHVyaTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHVzZXJu
YW1lOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgcGFzc3dvcmQ7Ci0KLSAgICAvKiogQ29udmVu
aWVuY2UgY29uc3RydWN0b3IgZm9yIFNUVU4gc2VydmVycy4gKi8KLSAgICBwdWJsaWMgSWNlU2Vy
dmVyKFN0cmluZyB1cmkpIHsKLSAgICAgIHRoaXModXJpLCAiIiwgIiIpOwotICAgIH0KLQotICAg
IHB1YmxpYyBJY2VTZXJ2ZXIoU3RyaW5nIHVyaSwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcgcGFz
c3dvcmQpIHsKLSAgICAgIHRoaXMudXJpID0gdXJpOwotICAgICAgdGhpcy51c2VybmFtZSA9IHVz
ZXJuYW1lOwotICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOwotICAgIH0KLQotICAgIHB1
YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gdXJpICsgIlsiICsgdXNlcm5h
bWUgKyAiOiIgKyBwYXNzd29yZCArICJdIjsKLSAgICB9Ci0gIH0KLQotICAvKiogSmF2YSB2ZXJz
aW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkljZVRyYW5zcG9ydHNUeXBlICovCi0gIHB1
YmxpYyBlbnVtIEljZVRyYW5zcG9ydHNUeXBlIHsgTk9ORSwgUkVMQVksIE5PSE9TVCwgQUxMIH0K
LQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkJ1bmRsZVBv
bGljeSAqLwotICBwdWJsaWMgZW51bSBCdW5kbGVQb2xpY3kgeyBCQUxBTkNFRCwgTUFYQlVORExF
LCBNQVhDT01QQVQgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRl
cmZhY2UuUnRjcE11eFBvbGljeSAqLwotICBwdWJsaWMgZW51bSBSdGNwTXV4UG9saWN5IHsgTkVH
T1RJQVRFLCBSRVFVSVJFIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlLlRjcENhbmRpZGF0ZVBvbGljeSAqLwotICBwdWJsaWMgZW51bSBUY3BDYW5kaWRh
dGVQb2xpY3kgeyBFTkFCTEVELCBESVNBQkxFRCB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQ
ZWVyQ29ubmVjdGlvbkludGVyZmFjZS5DYW5kaWRhdGVOZXR3b3JrUG9saWN5ICovCi0gIHB1Ymxp
YyBlbnVtIENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kgeyBBTEwsIExPV19DT1NUIH0KLQotICAvKiog
SmF2YSB2ZXJzaW9uIG9mIHJ0Yzo6S2V5VHlwZSAqLwotICBwdWJsaWMgZW51bSBLZXlUeXBlIHsg
UlNBLCBFQ0RTQSB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZS5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gQ29udGludWFs
R2F0aGVyaW5nUG9saWN5IHsgR0FUSEVSX09OQ0UsIEdBVEhFUl9DT05USU5VQUxMWSB9Ci0KLSAg
LyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5SVENDb25maWd1cmF0
aW9uICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgUlRDQ29uZmlndXJhdGlvbiB7Ci0gICAgcHVi
bGljIEljZVRyYW5zcG9ydHNUeXBlIGljZVRyYW5zcG9ydHNUeXBlOwotICAgIHB1YmxpYyBMaXN0
PEljZVNlcnZlcj4gaWNlU2VydmVyczsKLSAgICBwdWJsaWMgQnVuZGxlUG9saWN5IGJ1bmRsZVBv
bGljeTsKLSAgICBwdWJsaWMgUnRjcE11eFBvbGljeSBydGNwTXV4UG9saWN5OwotICAgIHB1Ymxp
YyBUY3BDYW5kaWRhdGVQb2xpY3kgdGNwQ2FuZGlkYXRlUG9saWN5OwotICAgIHB1YmxpYyBDYW5k
aWRhdGVOZXR3b3JrUG9saWN5IGNhbmRpZGF0ZU5ldHdvcmtQb2xpY3k7Ci0gICAgcHVibGljIGlu
dCBhdWRpb0ppdHRlckJ1ZmZlck1heFBhY2tldHM7Ci0gICAgcHVibGljIGJvb2xlYW4gYXVkaW9K
aXR0ZXJCdWZmZXJGYXN0QWNjZWxlcmF0ZTsKLSAgICBwdWJsaWMgaW50IGljZUNvbm5lY3Rpb25S
ZWNlaXZpbmdUaW1lb3V0OwotICAgIHB1YmxpYyBpbnQgaWNlQmFja3VwQ2FuZGlkYXRlUGFpclBp
bmdJbnRlcnZhbDsKLSAgICBwdWJsaWMgS2V5VHlwZSBrZXlUeXBlOwotICAgIHB1YmxpYyBDb250
aW51YWxHYXRoZXJpbmdQb2xpY3kgY29udGludWFsR2F0aGVyaW5nUG9saWN5OwotICAgIHB1Ymxp
YyBpbnQgaWNlQ2FuZGlkYXRlUG9vbFNpemU7Ci0gICAgcHVibGljIGJvb2xlYW4gcHJ1bmVUdXJu
UG9ydHM7Ci0gICAgcHVibGljIGJvb2xlYW4gcHJlc3VtZVdyaXRhYmxlV2hlbkZ1bGx5UmVsYXll
ZDsKLQotICAgIHB1YmxpYyBSVENDb25maWd1cmF0aW9uKExpc3Q8SWNlU2VydmVyPiBpY2VTZXJ2
ZXJzKSB7Ci0gICAgICBpY2VUcmFuc3BvcnRzVHlwZSA9IEljZVRyYW5zcG9ydHNUeXBlLkFMTDsK
LSAgICAgIGJ1bmRsZVBvbGljeSA9IEJ1bmRsZVBvbGljeS5CQUxBTkNFRDsKLSAgICAgIHJ0Y3BN
dXhQb2xpY3kgPSBSdGNwTXV4UG9saWN5Lk5FR09USUFURTsKLSAgICAgIHRjcENhbmRpZGF0ZVBv
bGljeSA9IFRjcENhbmRpZGF0ZVBvbGljeS5FTkFCTEVEOwotICAgICAgY2FuZGlkYXRlTmV0d29y
a1BvbGljeSA9IGNhbmRpZGF0ZU5ldHdvcmtQb2xpY3kuQUxMOwotICAgICAgdGhpcy5pY2VTZXJ2
ZXJzID0gaWNlU2VydmVyczsKLSAgICAgIGF1ZGlvSml0dGVyQnVmZmVyTWF4UGFja2V0cyA9IDUw
OwotICAgICAgYXVkaW9KaXR0ZXJCdWZmZXJGYXN0QWNjZWxlcmF0ZSA9IGZhbHNlOwotICAgICAg
aWNlQ29ubmVjdGlvblJlY2VpdmluZ1RpbWVvdXQgPSAtMTsKLSAgICAgIGljZUJhY2t1cENhbmRp
ZGF0ZVBhaXJQaW5nSW50ZXJ2YWwgPSAtMTsKLSAgICAgIGtleVR5cGUgPSBLZXlUeXBlLkVDRFNB
OwotICAgICAgY29udGludWFsR2F0aGVyaW5nUG9saWN5ID0gQ29udGludWFsR2F0aGVyaW5nUG9s
aWN5LkdBVEhFUl9PTkNFOwotICAgICAgaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSAwOwotICAgICAg
cHJ1bmVUdXJuUG9ydHMgPSBmYWxzZTsKLSAgICAgIHByZXN1bWVXcml0YWJsZVdoZW5GdWxseVJl
bGF5ZWQgPSBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBMaXN0PE1lZGlh
U3RyZWFtPiBsb2NhbFN0cmVhbXM7Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVQZWVyQ29u
bmVjdGlvbjsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZU9ic2VydmVyOwotICBwcml2YXRl
IExpc3Q8UnRwU2VuZGVyPiBzZW5kZXJzOwotICBwcml2YXRlIExpc3Q8UnRwUmVjZWl2ZXI+IHJl
Y2VpdmVyczsKLQotICBQZWVyQ29ubmVjdGlvbihsb25nIG5hdGl2ZVBlZXJDb25uZWN0aW9uLCBs
b25nIG5hdGl2ZU9ic2VydmVyKSB7Ci0gICAgdGhpcy5uYXRpdmVQZWVyQ29ubmVjdGlvbiA9IG5h
dGl2ZVBlZXJDb25uZWN0aW9uOwotICAgIHRoaXMubmF0aXZlT2JzZXJ2ZXIgPSBuYXRpdmVPYnNl
cnZlcjsKLSAgICBsb2NhbFN0cmVhbXMgPSBuZXcgTGlua2VkTGlzdDxNZWRpYVN0cmVhbT4oKTsK
LSAgICBzZW5kZXJzID0gbmV3IExpbmtlZExpc3Q8UnRwU2VuZGVyPigpOwotICAgIHJlY2VpdmVy
cyA9IG5ldyBMaW5rZWRMaXN0PFJ0cFJlY2VpdmVyPigpOwotICB9Ci0KLSAgLy8gSnNlcEludGVy
ZmFjZS4KLSAgcHVibGljIG5hdGl2ZSBTZXNzaW9uRGVzY3JpcHRpb24gZ2V0TG9jYWxEZXNjcmlw
dGlvbigpOwotCi0gIHB1YmxpYyBuYXRpdmUgU2Vzc2lvbkRlc2NyaXB0aW9uIGdldFJlbW90ZURl
c2NyaXB0aW9uKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBEYXRhQ2hhbm5lbCBjcmVhdGVEYXRhQ2hh
bm5lbChTdHJpbmcgbGFiZWwsIERhdGFDaGFubmVsLkluaXQgaW5pdCk7Ci0KLSAgcHVibGljIG5h
dGl2ZSB2b2lkIGNyZWF0ZU9mZmVyKFNkcE9ic2VydmVyIG9ic2VydmVyLCBNZWRpYUNvbnN0cmFp
bnRzIGNvbnN0cmFpbnRzKTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgY3JlYXRlQW5zd2VyKFNk
cE9ic2VydmVyIG9ic2VydmVyLCBNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzKTsKLQotICBw
dWJsaWMgbmF0aXZlIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvbihTZHBPYnNlcnZlciBvYnNlcnZl
ciwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgcHVibGljIG5hdGl2ZSB2b2lkIHNldFJl
bW90ZURlc2NyaXB0aW9uKFNkcE9ic2VydmVyIG9ic2VydmVyLCBTZXNzaW9uRGVzY3JpcHRpb24g
c2RwKTsKLQotICBwdWJsaWMgbmF0aXZlIGJvb2xlYW4gc2V0Q29uZmlndXJhdGlvbihSVENDb25m
aWd1cmF0aW9uIGNvbmZpZyk7Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkSWNlQ2FuZGlkYXRlKElj
ZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICByZXR1cm4gbmF0aXZlQWRkSWNlQ2FuZGlkYXRl
KGNhbmRpZGF0ZS5zZHBNaWQsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4LCBjYW5kaWRhdGUuc2Rw
KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUljZUNhbmRpZGF0ZXMoZmluYWwgSWNl
Q2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgIHJldHVybiBuYXRpdmVSZW1vdmVJY2VDYW5k
aWRhdGVzKGNhbmRpZGF0ZXMpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkU3RyZWFtKE1l
ZGlhU3RyZWFtIHN0cmVhbSkgewotICAgIGJvb2xlYW4gcmV0ID0gbmF0aXZlQWRkTG9jYWxTdHJl
YW0oc3RyZWFtLm5hdGl2ZVN0cmVhbSk7Ci0gICAgaWYgKCFyZXQpIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgbG9jYWxTdHJlYW1zLmFkZChzdHJlYW0pOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtIHN0cmVh
bSkgewotICAgIG5hdGl2ZVJlbW92ZUxvY2FsU3RyZWFtKHN0cmVhbS5uYXRpdmVTdHJlYW0pOwot
ICAgIGxvY2FsU3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKLSAgfQotCi0gIHB1YmxpYyBSdHBTZW5k
ZXIgY3JlYXRlU2VuZGVyKFN0cmluZyBraW5kLCBTdHJpbmcgc3RyZWFtX2lkKSB7Ci0gICAgUnRw
U2VuZGVyIG5ld19zZW5kZXIgPSBuYXRpdmVDcmVhdGVTZW5kZXIoa2luZCwgc3RyZWFtX2lkKTsK
LSAgICBpZiAobmV3X3NlbmRlciAhPSBudWxsKSB7Ci0gICAgICBzZW5kZXJzLmFkZChuZXdfc2Vu
ZGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ld19zZW5kZXI7Ci0gIH0KLQotICAvLyBOb3RlIHRo
YXQgY2FsbGluZyBnZXRTZW5kZXJzIHdpbGwgZGlzcG9zZSBvZiB0aGUgc2VuZGVycyBwcmV2aW91
c2x5Ci0gIC8vIHJldHVybmVkIChhbmQgc2FtZSBnb2VzIGZvciBnZXRSZWNlaXZlcnMpLgotICBw
dWJsaWMgTGlzdDxSdHBTZW5kZXI+IGdldFNlbmRlcnMoKSB7Ci0gICAgZm9yIChSdHBTZW5kZXIg
c2VuZGVyIDogc2VuZGVycykgewotICAgICAgc2VuZGVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAg
c2VuZGVycyA9IG5hdGl2ZUdldFNlbmRlcnMoKTsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5t
b2RpZmlhYmxlTGlzdChzZW5kZXJzKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0PFJ0cFJlY2VpdmVy
PiBnZXRSZWNlaXZlcnMoKSB7Ci0gICAgZm9yIChSdHBSZWNlaXZlciByZWNlaXZlciA6IHJlY2Vp
dmVycykgewotICAgICAgcmVjZWl2ZXIuZGlzcG9zZSgpOwotICAgIH0KLSAgICByZWNlaXZlcnMg
PSBuYXRpdmVHZXRSZWNlaXZlcnMoKTsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlh
YmxlTGlzdChyZWNlaXZlcnMpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhdHMoU3Rh
dHNPYnNlcnZlciBvYnNlcnZlciwgTWVkaWFTdHJlYW1UcmFjayB0cmFjaykgewotICAgIHJldHVy
biBuYXRpdmVHZXRTdGF0cyhvYnNlcnZlciwgKHRyYWNrID09IG51bGwpID8gMCA6IHRyYWNrLm5h
dGl2ZVRyYWNrKTsKLSAgfQotCi0gIC8vIFN0YXJ0cyByZWNvcmRpbmcgYW4gUlRDIGV2ZW50IGxv
Zy4gT3duZXJzaGlwIG9mIHRoZSBmaWxlIGlzIHRyYW5zZmVyZWQgdG8KLSAgLy8gdGhlIG5hdGl2
ZSBjb2RlLiBJZiBhbiBSVEMgZXZlbnQgbG9nIGlzIGFscmVhZHkgYmVpbmcgcmVjb3JkZWQsIGl0
IHdpbGwgYmUKLSAgLy8gc3RvcHBlZCBhbmQgYSBuZXcgb25lIHdpbGwgc3RhcnQgdXNpbmcgdGhl
IHByb3ZpZGVkIGZpbGUuIExvZ2dpbmcgd2lsbAotICAvLyBjb250aW51ZSB1bnRpbCB0aGUgc3Rv
cFJ0Y0V2ZW50TG9nIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIG1heF9zaXplX2J5dGVzCi0gIC8v
IGFyZ3VtZW50IGlzIGlnbm9yZWQsIGl0IGlzIGFkZGVkIGZvciBmdXR1cmUgdXNlLgotICBwdWJs
aWMgYm9vbGVhbiBzdGFydFJ0Y0V2ZW50TG9nKGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBtYXhf
c2l6ZV9ieXRlcykgewotICAgIHJldHVybiBuYXRpdmVTdGFydFJ0Y0V2ZW50TG9nKGZpbGVfZGVz
Y3JpcHRvciwgbWF4X3NpemVfYnl0ZXMpOwotICB9Ci0KLSAgLy8gU3RvcHMgcmVjb3JkaW5nIGFu
IFJUQyBldmVudCBsb2cuIElmIG5vIFJUQyBldmVudCBsb2cgaXMgY3VycmVudGx5IGJlaW5nCi0g
IC8vIHJlY29yZGVkLCB0aGlzIGNhbGwgd2lsbCBoYXZlIG5vIGVmZmVjdC4KLSAgcHVibGljIHZv
aWQgc3RvcFJ0Y0V2ZW50TG9nKCkgewotICAgIG5hdGl2ZVN0b3BSdGNFdmVudExvZygpOwotICB9
Ci0KLSAgLy8gVE9ETyhmaXNjaG1hbik6IGFkZCBzdXBwb3J0IGZvciBEVE1GLXJlbGF0ZWQgbWV0
aG9kcyBvbmNlIHRoYXQgQVBJCi0gIC8vIHN0YWJpbGl6ZXMuCi0gIHB1YmxpYyBuYXRpdmUgU2ln
bmFsaW5nU3RhdGUgc2lnbmFsaW5nU3RhdGUoKTsKLQotICBwdWJsaWMgbmF0aXZlIEljZUNvbm5l
Y3Rpb25TdGF0ZSBpY2VDb25uZWN0aW9uU3RhdGUoKTsKLQotICBwdWJsaWMgbmF0aXZlIEljZUdh
dGhlcmluZ1N0YXRlIGljZUdhdGhlcmluZ1N0YXRlKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSB2b2lk
IGNsb3NlKCk7Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBjbG9zZSgpOwotICAg
IGZvciAoTWVkaWFTdHJlYW0gc3RyZWFtIDogbG9jYWxTdHJlYW1zKSB7Ci0gICAgICBuYXRpdmVS
ZW1vdmVMb2NhbFN0cmVhbShzdHJlYW0ubmF0aXZlU3RyZWFtKTsKLSAgICAgIHN0cmVhbS5kaXNw
b3NlKCk7Ci0gICAgfQotICAgIGxvY2FsU3RyZWFtcy5jbGVhcigpOwotICAgIGZvciAoUnRwU2Vu
ZGVyIHNlbmRlciA6IHNlbmRlcnMpIHsKLSAgICAgIHNlbmRlci5kaXNwb3NlKCk7Ci0gICAgfQot
ICAgIHNlbmRlcnMuY2xlYXIoKTsKLSAgICBmb3IgKFJ0cFJlY2VpdmVyIHJlY2VpdmVyIDogcmVj
ZWl2ZXJzKSB7Ci0gICAgICByZWNlaXZlci5kaXNwb3NlKCk7Ci0gICAgfQotICAgIHJlY2VpdmVy
cy5jbGVhcigpOwotICAgIGZyZWVQZWVyQ29ubmVjdGlvbihuYXRpdmVQZWVyQ29ubmVjdGlvbik7
Ci0gICAgZnJlZU9ic2VydmVyKG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotCi0gIHByaXZhdGUgc3Rh
dGljIG5hdGl2ZSB2b2lkIGZyZWVQZWVyQ29ubmVjdGlvbihsb25nIG5hdGl2ZVBlZXJDb25uZWN0
aW9uKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlT2JzZXJ2ZXIobG9uZyBu
YXRpdmVPYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRJY2VD
YW5kaWRhdGUoCi0gICAgICBTdHJpbmcgc2RwTWlkLCBpbnQgc2RwTUxpbmVJbmRleCwgU3RyaW5n
IGljZUNhbmRpZGF0ZVNkcCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVSZW1v
dmVJY2VDYW5kaWRhdGVzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpOwotCi0gIHBy
aXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRkTG9jYWxTdHJlYW0obG9uZyBuYXRpdmVTdHJl
YW0pOwotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlUmVtb3ZlTG9jYWxTdHJlYW0obG9u
ZyBuYXRpdmVTdHJlYW0pOwotCi0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlR2V0U3Rh
dHMoU3RhdHNPYnNlcnZlciBvYnNlcnZlciwgbG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgcHJpdmF0
ZSBuYXRpdmUgUnRwU2VuZGVyIG5hdGl2ZUNyZWF0ZVNlbmRlcihTdHJpbmcga2luZCwgU3RyaW5n
IHN0cmVhbV9pZCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgTGlzdDxSdHBTZW5kZXI+IG5hdGl2ZUdl
dFNlbmRlcnMoKTsKLQotICBwcml2YXRlIG5hdGl2ZSBMaXN0PFJ0cFJlY2VpdmVyPiBuYXRpdmVH
ZXRSZWNlaXZlcnMoKTsKLQotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVN0YXJ0UnRj
RXZlbnRMb2coaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IG1heF9zaXplX2J5dGVzKTsKLQotICBw
cml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVN0b3BSdGNFdmVudExvZygpOwotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEphdmEgd3Jh
cHBlciBmb3IgYSBDKysgUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlLiAgTWFpbiBlbnRy
eSBwb2ludCB0bwotICogdGhlIFBlZXJDb25uZWN0aW9uIEFQSSBmb3IgY2xpZW50cy4KLSAqLwot
cHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uRmFjdG9yeSB7Ci0gIHN0YXRpYyB7Ci0gICAgU3lz
dGVtLmxvYWRMaWJyYXJ5KCJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fc28iKTsKLSAgfQotCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUGVlckNvbm5lY3Rpb25GYWN0b3J5IjsK
LSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZUZhY3Rvcnk7Ci0gIHByaXZhdGUgc3RhdGljIFRo
cmVhZCBuZXR3b3JrVGhyZWFkOwotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgd29ya2VyVGhyZWFk
OwotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgc2lnbmFsaW5nVGhyZWFkOwotICBwcml2YXRlIEVn
bEJhc2UgbG9jYWxFZ2xiYXNlOwotICBwcml2YXRlIEVnbEJhc2UgcmVtb3RlRWdsYmFzZTsKLQot
ICBwdWJsaWMgc3RhdGljIGNsYXNzIE9wdGlvbnMgewotICAgIC8vIEtlZXAgaW4gc3luYyB3aXRo
IHdlYnJ0Yy9iYXNlL25ldHdvcmsuaCEKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQ
RV9VTktOT1dOID0gMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9FVEhFUk5F
VCA9IDEgPDwgMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9XSUZJID0gMSA8
PCAxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX0NFTExVTEFSID0gMSA8PCAy
OwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX1ZQTiA9IDEgPDwgMzsKLSAgICBz
dGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9MT09QQkFDSyA9IDEgPDwgNDsKLQotICAgIHB1
YmxpYyBpbnQgbmV0d29ya0lnbm9yZU1hc2s7Ci0gICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZUVu
Y3J5cHRpb247Ci0gICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZU5ldHdvcmtNb25pdG9yOwotICB9
Ci0KLSAgLy8gfGNvbnRleHR8IGlzIGFuIGFuZHJvaWQuY29udGVudC5Db250ZXh0IG9iamVjdCwg
YnV0IHdlIGtlZXAgaXQgdW50eXBlZCBoZXJlCi0gIC8vIHRvIGFsbG93IGJ1aWxkaW5nIG9uIG5v
bi1BbmRyb2lkIHBsYXRmb3Jtcy4KLSAgLy8gQ2FsbGVycyBtYXkgc3BlY2lmeSBlaXRoZXIgfGlu
aXRpYWxpemVBdWRpb3wgb3IgfGluaXRpYWxpemVWaWRlb3wgYXMgZmFsc2UKLSAgLy8gdG8gc2tp
cCBpbml0aWFsaXppbmcgdGhlIHJlc3BlY3RpdmUgZW5naW5lIChhbmQgYXZvaWQgdGhlIG5lZWQg
Zm9yIHRoZQotICAvLyByZXNwZWN0aXZlIHBlcm1pc3Npb25zKS4KLSAgLy8gfHJlbmRlckVHTENv
bnRleHR8IGNhbiBiZSBwcm92aWRlZCB0byBzdXBvcnQgSFcgdmlkZW8gZGVjb2RpbmcgdG8KLSAg
Ly8gdGV4dHVyZSBhbmQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBhIHNoYXJlZCBFR0wgY29udGV4
dCBvbiB2aWRlbwotICAvLyBkZWNvZGluZyB0aHJlYWQuCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZl
IGJvb2xlYW4gaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKE9iamVjdCBjb250ZXh0LCBib29sZWFu
IGluaXRpYWxpemVBdWRpbywKLSAgICAgIGJvb2xlYW4gaW5pdGlhbGl6ZVZpZGVvLCBib29sZWFu
IHZpZGVvSHdBY2NlbGVyYXRpb24pOwotCi0gIC8vIEZpZWxkIHRyaWFsIGluaXRpYWxpemF0aW9u
LiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgUGVlckNvbm5lY3Rpb25GYWN0b3J5Ci0gIC8vIGlzIGNy
ZWF0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgaW5pdGlhbGl6ZUZpZWxkVHJpYWxz
KFN0cmluZyBmaWVsZFRyaWFsc0luaXRTdHJpbmcpOwotICAvLyBJbnRlcm5hbCB0cmFjaW5nIGlu
aXRpYWxpemF0aW9uLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgUGVlckNvbm5lY3Rpb25GYWN0b3J5
IGlzIGNyZWF0ZWQgdG8KLSAgLy8gcHJldmVudCByYWNpbmcgd2l0aCB0cmFjaW5nIGNvZGUuCi0g
IHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgaW5pdGlhbGl6ZUludGVybmFsVHJhY2VyKCk7Ci0g
IC8vIEludGVybmFsIHRyYWNpbmcgc2h1dGRvd24sIGNhbGxlZCB0byBwcmV2ZW50IHJlc291cmNl
IGxlYWtzLiBNdXN0IGJlIGNhbGxlZCBhZnRlcgotICAvLyBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkg
aXMgZ29uZSB0byBwcmV2ZW50IHJhY2VzIHdpdGggY29kZSBwZXJmb3JtaW5nIHRyYWNpbmcuCi0g
IHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgc2h1dGRvd25JbnRlcm5hbFRyYWNlcigpOwotICAv
LyBTdGFydC9zdG9wIGludGVybmFsIGNhcHR1cmluZyBvZiBpbnRlcm5hbCB0cmFjaW5nLgotICBw
dWJsaWMgc3RhdGljIG5hdGl2ZSBib29sZWFuIHN0YXJ0SW50ZXJuYWxUcmFjaW5nQ2FwdHVyZShT
dHJpbmcgdHJhY2luZ19maWxlbmFtZSk7Ci0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgc3Rv
cEludGVybmFsVHJhY2luZ0NhcHR1cmUoKTsKLQotICBARGVwcmVjYXRlZAotICBwdWJsaWMgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5KCkgewotICAgIHRoaXMobnVsbCk7Ci0gIH0KLQotICBwdWJsaWMg
UGVlckNvbm5lY3Rpb25GYWN0b3J5KE9wdGlvbnMgb3B0aW9ucykgewotICAgIG5hdGl2ZUZhY3Rv
cnkgPSBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3Rvcnkob3B0aW9ucyk7Ci0gICAgaWYg
KG5hdGl2ZUZhY3RvcnkgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
IkZhaWxlZCB0byBpbml0aWFsaXplIFBlZXJDb25uZWN0aW9uRmFjdG9yeSEiKTsKLSAgICB9Ci0g
IH0KLQotICBwdWJsaWMgUGVlckNvbm5lY3Rpb24gY3JlYXRlUGVlckNvbm5lY3Rpb24oUGVlckNv
bm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcsCi0gICAgICBNZWRpYUNvbnN0cmFp
bnRzIGNvbnN0cmFpbnRzLCBQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciBvYnNlcnZlcikgewotICAg
IGxvbmcgbmF0aXZlT2JzZXJ2ZXIgPSBuYXRpdmVDcmVhdGVPYnNlcnZlcihvYnNlcnZlcik7Ci0g
ICAgaWYgKG5hdGl2ZU9ic2VydmVyID09IDApIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0K
LSAgICBsb25nIG5hdGl2ZVBlZXJDb25uZWN0aW9uID0KLSAgICAgICAgbmF0aXZlQ3JlYXRlUGVl
ckNvbm5lY3Rpb24obmF0aXZlRmFjdG9yeSwgcnRjQ29uZmlnLCBjb25zdHJhaW50cywgbmF0aXZl
T2JzZXJ2ZXIpOwotICAgIGlmIChuYXRpdmVQZWVyQ29ubmVjdGlvbiA9PSAwKSB7Ci0gICAgICBy
ZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBQZWVyQ29ubmVjdGlvbihuYXRpdmVQ
ZWVyQ29ubmVjdGlvbiwgbmF0aXZlT2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHVibGljIFBlZXJDb25u
ZWN0aW9uIGNyZWF0ZVBlZXJDb25uZWN0aW9uKExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVy
PiBpY2VTZXJ2ZXJzLAotICAgICAgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cywgUGVlckNv
bm5lY3Rpb24uT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBQZWVyQ29ubmVjdGlvbi5SVENDb25m
aWd1cmF0aW9uIHJ0Y0NvbmZpZyA9IG5ldyBQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9u
KGljZVNlcnZlcnMpOwotICAgIHJldHVybiBjcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWcs
IGNvbnN0cmFpbnRzLCBvYnNlcnZlcik7Ci0gIH0KLQotICBwdWJsaWMgTWVkaWFTdHJlYW0gY3Jl
YXRlTG9jYWxNZWRpYVN0cmVhbShTdHJpbmcgbGFiZWwpIHsKLSAgICByZXR1cm4gbmV3IE1lZGlh
U3RyZWFtKG5hdGl2ZUNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0obmF0aXZlRmFjdG9yeSwgbGFiZWwp
KTsKLSAgfQotCi0gIHB1YmxpYyBWaWRlb1NvdXJjZSBjcmVhdGVWaWRlb1NvdXJjZShWaWRlb0Nh
cHR1cmVyIGNhcHR1cmVyKSB7Ci0gICAgZmluYWwgRWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQg
PQotICAgICAgICBsb2NhbEVnbGJhc2UgPT0gbnVsbCA/IG51bGwgOiBsb2NhbEVnbGJhc2UuZ2V0
RWdsQmFzZUNvbnRleHQoKTsKLSAgICBsb25nIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNl
ID0KLSAgICAgICAgbmF0aXZlQ3JlYXRlVmlkZW9Tb3VyY2UobmF0aXZlRmFjdG9yeSwgZWdsQ29u
dGV4dCwgY2FwdHVyZXIuaXNTY3JlZW5jYXN0KCkpOwotICAgIFZpZGVvQ2FwdHVyZXIuQ2FwdHVy
ZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyID0KLSAgICAgICAgbmV3IFZpZGVvQ2FwdHVyZXIu
QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VPYnNlcnZlcihuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1Nv
dXJjZSk7Ci0gICAgbmF0aXZlSW5pdGlhbGl6ZVZpZGVvQ2FwdHVyZXIoCi0gICAgICAgIG5hdGl2
ZUZhY3RvcnksIGNhcHR1cmVyLCBuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSwgY2FwdHVy
ZXJPYnNlcnZlcik7Ci0gICAgcmV0dXJuIG5ldyBWaWRlb1NvdXJjZShuYXRpdmVBbmRyb2lkVmlk
ZW9UcmFja1NvdXJjZSk7Ci0gIH0KLQotICBwdWJsaWMgVmlkZW9UcmFjayBjcmVhdGVWaWRlb1Ry
YWNrKFN0cmluZyBpZCwgVmlkZW9Tb3VyY2Ugc291cmNlKSB7Ci0gICAgcmV0dXJuIG5ldyBWaWRl
b1RyYWNrKG5hdGl2ZUNyZWF0ZVZpZGVvVHJhY2sobmF0aXZlRmFjdG9yeSwgaWQsIHNvdXJjZS5u
YXRpdmVTb3VyY2UpKTsKLSAgfQotCi0gIHB1YmxpYyBBdWRpb1NvdXJjZSBjcmVhdGVBdWRpb1Nv
dXJjZShNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzKSB7Ci0gICAgcmV0dXJuIG5ldyBBdWRp
b1NvdXJjZShuYXRpdmVDcmVhdGVBdWRpb1NvdXJjZShuYXRpdmVGYWN0b3J5LCBjb25zdHJhaW50
cykpOwotICB9Ci0KLSAgcHVibGljIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9UcmFjayhTdHJpbmcg
aWQsIEF1ZGlvU291cmNlIHNvdXJjZSkgewotICAgIHJldHVybiBuZXcgQXVkaW9UcmFjayhuYXRp
dmVDcmVhdGVBdWRpb1RyYWNrKG5hdGl2ZUZhY3RvcnksIGlkLCBzb3VyY2UubmF0aXZlU291cmNl
KSk7Ci0gIH0KLQotICAvLyBTdGFydHMgcmVjb3JkaW5nIGFuIEFFQyBkdW1wLiBPd25lcnNoaXAg
b2YgdGhlIGZpbGUgaXMgdHJhbnNmZXJlZCB0byB0aGUKLSAgLy8gbmF0aXZlIGNvZGUuIElmIGFu
IEFFQyBkdW1wIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGl0IHdpbGwgYmUgc3RvcHBlZCBhbmQK
LSAgLy8gYSBuZXcgb25lIHdpbGwgc3RhcnQgdXNpbmcgdGhlIHByb3ZpZGVkIGZpbGUuCi0gIHB1
YmxpYyBib29sZWFuIHN0YXJ0QWVjRHVtcChpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgZmlsZXNp
emVfbGltaXRfYnl0ZXMpIHsKLSAgICByZXR1cm4gbmF0aXZlU3RhcnRBZWNEdW1wKG5hdGl2ZUZh
Y3RvcnksIGZpbGVfZGVzY3JpcHRvciwgZmlsZXNpemVfbGltaXRfYnl0ZXMpOwotICB9Ci0KLSAg
Ly8gU3RvcHMgcmVjb3JkaW5nIGFuIEFFQyBkdW1wLiBJZiBubyBBRUMgZHVtcCBpcyBjdXJyZW50
bHkgYmVpbmcgcmVjb3JkZWQsCi0gIC8vIHRoaXMgY2FsbCB3aWxsIGhhdmUgbm8gZWZmZWN0Lgot
ICBwdWJsaWMgdm9pZCBzdG9wQWVjRHVtcCgpIHsKLSAgICBuYXRpdmVTdG9wQWVjRHVtcChuYXRp
dmVGYWN0b3J5KTsKLSAgfQotCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyB2b2lkIHNldE9wdGlv
bnMoT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgbmF0aXZlU2V0T3B0aW9ucyhuYXRpdmVGYWN0b3J5
LCBvcHRpb25zKTsKLSAgfQotCi0gIC8qKiBTZXQgdGhlIEVHTCBjb250ZXh0IHVzZWQgYnkgSFcg
VmlkZW8gZW5jb2RpbmcgYW5kIGRlY29kaW5nLgotICAgKgotICAgKiBAcGFyYW0gbG9jYWxFZ2xD
b250ZXh0ICAgTXVzdCBiZSB0aGUgc2FtZSBhcyB1c2VkIGJ5IFZpZGVvQ2FwdHVyZXJBbmRyb2lk
IGFuZCBhbnkgbG9jYWwgdmlkZW8KLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRl
cmVyLgotICAgKiBAcGFyYW0gcmVtb3RlRWdsQ29udGV4dCAgTXVzdCBiZSB0aGUgc2FtZSBhcyB1
c2VkIGJ5IGFueSByZW1vdGUgdmlkZW8gcmVuZGVyZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCBz
ZXRWaWRlb0h3QWNjZWxlcmF0aW9uT3B0aW9ucygKLSAgICAgIEVnbEJhc2UuQ29udGV4dCBsb2Nh
bEVnbENvbnRleHQsIEVnbEJhc2UuQ29udGV4dCByZW1vdGVFZ2xDb250ZXh0KSB7Ci0gICAgaWYg
KGxvY2FsRWdsYmFzZSAhPSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiRWdsIGNvbnRl
eHQgYWxyZWFkeSBzZXQuIik7Ci0gICAgICBsb2NhbEVnbGJhc2UucmVsZWFzZSgpOwotICAgIH0K
LSAgICBpZiAocmVtb3RlRWdsYmFzZSAhPSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAi
RWdsIGNvbnRleHQgYWxyZWFkeSBzZXQuIik7Ci0gICAgICByZW1vdGVFZ2xiYXNlLnJlbGVhc2Uo
KTsKLSAgICB9Ci0gICAgbG9jYWxFZ2xiYXNlID0gRWdsQmFzZS5jcmVhdGUobG9jYWxFZ2xDb250
ZXh0KTsKLSAgICByZW1vdGVFZ2xiYXNlID0gRWdsQmFzZS5jcmVhdGUocmVtb3RlRWdsQ29udGV4
dCk7Ci0gICAgbmF0aXZlU2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlvbnMoCi0gICAgICAgIG5h
dGl2ZUZhY3RvcnksIGxvY2FsRWdsYmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCByZW1vdGVFZ2xi
YXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgp
IHsKLSAgICBuYXRpdmVGcmVlRmFjdG9yeShuYXRpdmVGYWN0b3J5KTsKLSAgICBuZXR3b3JrVGhy
ZWFkID0gbnVsbDsKLSAgICB3b3JrZXJUaHJlYWQgPSBudWxsOwotICAgIHNpZ25hbGluZ1RocmVh
ZCA9IG51bGw7Ci0gICAgaWYgKGxvY2FsRWdsYmFzZSAhPSBudWxsKQotICAgICAgbG9jYWxFZ2xi
YXNlLnJlbGVhc2UoKTsKLSAgICBpZiAocmVtb3RlRWdsYmFzZSAhPSBudWxsKQotICAgICAgcmVt
b3RlRWdsYmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0aHJlYWRzQ2FsbGJh
Y2tzKCkgewotICAgIG5hdGl2ZVRocmVhZHNDYWxsYmFja3MobmF0aXZlRmFjdG9yeSk7Ci0gIH0K
LQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZShUaHJlYWQgdGhyZWFkLCBT
dHJpbmcgdGhyZWFkTmFtZSkgewotICAgIGlmICh0aHJlYWQgIT0gbnVsbCkgewotICAgICAgU3Rh
Y2tUcmFjZUVsZW1lbnRbXSBzdGFja1RyYWNlcyA9IHRocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0g
ICAgICBpZiAoc3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFH
LCB0aHJlYWROYW1lICsgIiBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFj
ZUVsZW1lbnQgc3RhY2tUcmFjZSA6IHN0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2luZy5k
KFRBRywgc3RhY2tUcmFjZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN0YWNrVHJhY2VzKCkgewotICAgIHBy
aW50U3RhY2tUcmFjZShuZXR3b3JrVGhyZWFkLCAiTmV0d29yayB0aHJlYWQiKTsKLSAgICBwcmlu
dFN0YWNrVHJhY2Uod29ya2VyVGhyZWFkLCAiV29ya2VyIHRocmVhZCIpOwotICAgIHByaW50U3Rh
Y2tUcmFjZShzaWduYWxpbmdUaHJlYWQsICJTaWduYWxpbmcgdGhyZWFkIik7Ci0gIH0KLQotICBw
cml2YXRlIHN0YXRpYyB2b2lkIG9uTmV0d29ya1RocmVhZFJlYWR5KCkgewotICAgIG5ldHdvcmtU
aHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJvbk5l
dHdvcmtUaHJlYWRSZWFkeSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvbldvcmtl
clRocmVhZFJlYWR5KCkgewotICAgIHdvcmtlclRocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFk
KCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm9uV29ya2VyVGhyZWFkUmVhZHkiKTsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIHZvaWQgb25TaWduYWxpbmdUaHJlYWRSZWFkeSgpIHsKLSAgICBzaWdu
YWxpbmdUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcs
ICJvblNpZ25hbGluZ1RocmVhZFJlYWR5Iik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgbG9uZyBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoT3B0aW9ucyBvcHRpb25z
KTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVPYnNlcnZlcihQ
ZWVyQ29ubmVjdGlvbi5PYnNlcnZlciBvYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIGxvbmcgbmF0aXZlQ3JlYXRlUGVlckNvbm5lY3Rpb24obG9uZyBuYXRpdmVGYWN0b3J5LAot
ICAgICAgUGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcsIE1lZGlhQ29u
c3RyYWludHMgY29uc3RyYWludHMsIGxvbmcgbmF0aXZlT2JzZXJ2ZXIpOwotCi0gIHByaXZhdGUg
c3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0obG9uZyBuYXRp
dmVGYWN0b3J5LCBTdHJpbmcgbGFiZWwpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25n
IG5hdGl2ZUNyZWF0ZVZpZGVvU291cmNlKAotICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBFZ2xC
YXNlLkNvbnRleHQgZWdsQ29udGV4dCwgYm9vbGVhbiBpc19zY3JlZW5jYXN0KTsKLQotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVJbml0aWFsaXplVmlkZW9DYXB0dXJlcihsb25n
IG5hdGl2ZV9mYWN0b3J5LAotICAgICAgVmlkZW9DYXB0dXJlciBqX3ZpZGVvX2NhcHR1cmVyLCBs
b25nIG5hdGl2ZV9zb3VyY2UsCi0gICAgICBWaWRlb0NhcHR1cmVyLkNhcHR1cmVyT2JzZXJ2ZXIg
al9mcmFtZV9vYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZl
Q3JlYXRlVmlkZW9UcmFjaygKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgU3RyaW5nIGlkLCBs
b25nIG5hdGl2ZVZpZGVvU291cmNlKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBu
YXRpdmVDcmVhdGVBdWRpb1NvdXJjZSgKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgTWVkaWFD
b25zdHJhaW50cyBjb25zdHJhaW50cyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcg
bmF0aXZlQ3JlYXRlQXVkaW9UcmFjaygKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgU3RyaW5n
IGlkLCBsb25nIG5hdGl2ZVNvdXJjZSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xl
YW4gbmF0aXZlU3RhcnRBZWNEdW1wKAotICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBpbnQgZmls
ZV9kZXNjcmlwdG9yLCBpbnQgZmlsZXNpemVfbGltaXRfYnl0ZXMpOwotCi0gIHByaXZhdGUgc3Rh
dGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVN0b3BBZWNEdW1wKGxvbmcgbmF0aXZlRmFjdG9yeSk7Ci0K
LSAgQERlcHJlY2F0ZWQgcHVibGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldE9wdGlvbnMobG9uZyBu
YXRpdmVGYWN0b3J5LCBPcHRpb25zIG9wdGlvbnMpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSB2b2lkIG5hdGl2ZVNldFZpZGVvSHdBY2NlbGVyYXRpb25PcHRpb25zKAotICAgICAgbG9uZyBu
YXRpdmVGYWN0b3J5LCBPYmplY3QgbG9jYWxFR0xDb250ZXh0LCBPYmplY3QgcmVtb3RlRUdMQ29u
dGV4dCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlVGhyZWFkc0NhbGxi
YWNrcyhsb25nIG5hdGl2ZUZhY3RvcnkpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lk
IG5hdGl2ZUZyZWVGYWN0b3J5KGxvbmcgbmF0aXZlRmFjdG9yeSk7Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9SZW5kZXJlckNvbW1vbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL1JlbmRlcmVyQ29tbW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTggKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5k
cm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBv
cnQgYW5kcm9pZC5vcGVuZ2wuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotCi1p
bXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLQotLyoqCi0gKiBTdGF0aWMgaGVscGVyIGZ1bmN0
aW9ucyBmb3IgcmVuZGVyZXIgaW1wbGVtZW50YXRpb25zLgotICovCi1wdWJsaWMgY2xhc3MgUmVu
ZGVyZXJDb21tb24gewotICAvKiogSW50ZXJmYWNlIGZvciByZXBvcnRpbmcgcmVuZGVyaW5nIGV2
ZW50cy4gKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgUmVuZGVyZXJFdmVudHMgewotICAg
IC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgZmlyc3QgZnJhbWUgaXMgcmVuZGVyZWQu
Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lUmVuZGVyZWQoKTsKLQotICAg
IC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gcmVuZGVyZWQgZnJhbWUgcmVzb2x1dGlv
biBvciByb3RhdGlvbiBoYXMgY2hhbmdlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkZy
YW1lUmVzb2x1dGlvbkNoYW5nZWQoaW50IHZpZGVvV2lkdGgsIGludCB2aWRlb0hlaWdodCwgaW50
IHJvdGF0aW9uKTsKLSAgfQotCi0gIC8qKiBJbnRlcmZhY2UgZm9yIHJlbmRlcmluZyBmcmFtZXMg
b24gYW4gRUdMU3VyZmFjZS4gKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgR2xEcmF3ZXIg
ewotICAgIC8qKgotICAgICAqIEZ1bmN0aW9ucyBmb3IgZHJhd2luZyBmcmFtZXMgd2l0aCBkaWZm
ZXJlbnQgc291cmNlcy4gVGhlIHJlbmRlcmluZyBzdXJmYWNlIHRhcmdldCBpcwotICAgICAqIGlt
cGxpZWQgYnkgdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQgb2YgdGhlIGNhbGxpbmcgdGhyZWFkIGFu
ZCByZXF1aXJlcyBubyBleHBsaWNpdCBhcmd1bWVudC4KLSAgICAgKiBUaGUgY29vcmRpbmF0ZXMg
c3BlY2lmeSB0aGUgdmlld3BvcnQgbG9jYXRpb24gb24gdGhlIHN1cmZhY2UgdGFyZ2V0LgotICAg
ICAqLwotICAgIHZvaWQgZHJhd09lcyhpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJp
eCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgICAgaW50IHZpZXdwb3J0
WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCk7
Ci0gICAgdm9pZCBkcmF3UmdiKGludCB0ZXh0dXJlSWQsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQg
ZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LCBpbnQgdmlld3BvcnRYLAotICAgICAgICBpbnQg
dmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KTsKLSAgICB2
b2lkIGRyYXdZdXYoaW50W10geXV2VGV4dHVyZXMsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJh
bWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAgICBpbnQgdmlld3BvcnRYLCBpbnQgdmll
d3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KTsKLQotICAgIC8q
KgotICAgICAqIFJlbGVhc2UgYWxsIEdMIHJlc291cmNlcy4gVGhpcyBuZWVkcyB0byBiZSBkb25l
IG1hbnVhbGx5LCBvdGhlcndpc2UgcmVzb3VyY2VzIG1heSBsZWFrLgotICAgICAqLwotICAgIHZv
aWQgcmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBjbGFzcyBmb3IgdXBsb2Fk
aW5nIFlVViBieXRlYnVmZmVyIGZyYW1lcyB0byB0ZXh0dXJlcyB0aGF0IGhhbmRsZXMgc3RyaWRl
ID4gd2lkdGguIFRoaXMKLSAgICogY2xhc3Mga2VlcHMgYW4gaW50ZXJuYWwgQnl0ZUJ1ZmZlciB0
byBhdm9pZCB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyBmb3IgaW50ZXJtZWRpYXRlIGNvcGllcy4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgWXV2VXBsb2FkZXIgewotICAgIC8vIEludGVy
bWVkaWF0ZSBjb3B5IGJ1ZmZlciBmb3IgdXBsb2FkaW5nIHl1diBmcmFtZXMgdGhhdCBhcmUgbm90
IHBhY2tlZCwgaS5lLiBzdHJpZGUgPiB3aWR0aC4KLSAgICAvLyBUT0RPKG1hZ2plZCk6IEludmVz
dGlnYXRlIHdoZW4gR0xfVU5QQUNLX1JPV19MRU5HVEggaXMgYXZhaWxhYmxlLCBvciBtYWtlIGEg
Y3VzdG9tIHNoYWRlcgotICAgIC8vIHRoYXQgaGFuZGxlcyBzdHJpZGUgYW5kIGNvbXBhcmUgcGVy
Zm9ybWFuY2Ugd2l0aCBpbnRlcm1lZGlhdGUgY29weS4KLSAgICBwcml2YXRlIEJ5dGVCdWZmZXIg
Y29weUJ1ZmZlcjsKLQotICAgIC8qKgotICAgICAqIFVwbG9hZCB8cGxhbmVzfCBpbnRvIHxvdXRw
dXRZdXZUZXh0dXJlc3wsIHRha2luZyBzdHJpZGUgaW50byBjb25zaWRlcmF0aW9uLgotICAgICAq
IHxvdXRwdXRZdXZUZXh0dXJlc3wgbXVzdCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGluIGFkdmFuY2Uu
Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgdXBsb2FkWXV2RGF0YSgKLSAgICAgICAgaW50W10g
b3V0cHV0WXV2VGV4dHVyZXMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50W10gc3RyaWRlcywg
Qnl0ZUJ1ZmZlcltdIHBsYW5lcykgewotICAgICAgZmluYWwgaW50W10gcGxhbmVXaWR0aHMgPSBu
ZXcgaW50W10ge3dpZHRoLCB3aWR0aCAvIDIsIHdpZHRoIC8gMn07Ci0gICAgICBmaW5hbCBpbnRb
XSBwbGFuZUhlaWdodHMgPSBuZXcgaW50W10ge2hlaWdodCwgaGVpZ2h0IC8gMiwgaGVpZ2h0IC8g
Mn07Ci0gICAgICAvLyBNYWtlIGEgZmlyc3QgcGFzcyB0byBzZWUgaWYgd2UgbmVlZCBhIHRlbXBv
cmFyeSBjb3B5IGJ1ZmZlci4KLSAgICAgIGludCBjb3B5Q2FwYWNpdHlOZWVkZWQgPSAwOwotICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmlkZXNbaV0g
PiBwbGFuZVdpZHRoc1tpXSkgewotICAgICAgICAgIGNvcHlDYXBhY2l0eU5lZWRlZCA9IE1hdGgu
bWF4KGNvcHlDYXBhY2l0eU5lZWRlZCwgcGxhbmVXaWR0aHNbaV0gKiBwbGFuZUhlaWdodHNbaV0p
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBBbGxvY2F0ZSBjb3B5IGJ1ZmZlciBpZiBu
ZWNlc3NhcnkuCi0gICAgICBpZiAoY29weUNhcGFjaXR5TmVlZGVkID4gMAotICAgICAgICAgICYm
IChjb3B5QnVmZmVyID09IG51bGwgfHwgY29weUJ1ZmZlci5jYXBhY2l0eSgpIDwgY29weUNhcGFj
aXR5TmVlZGVkKSkgewotICAgICAgICBjb3B5QnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURp
cmVjdChjb3B5Q2FwYWNpdHlOZWVkZWQpOwotICAgICAgfQotICAgICAgLy8gVXBsb2FkIGVhY2gg
cGxhbmUuCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBHTEVT
MjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCArIGkpOwotICAgICAgICBHTEVT
MjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgb3V0cHV0WXV2VGV4dHVyZXNb
aV0pOwotICAgICAgICAvLyBHTEVTIG9ubHkgYWNjZXB0cyBwYWNrZWQgZGF0YSwgaS5lLiBzdHJp
ZGUgPT0gcGxhbmVXaWR0aC4KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBwYWNrZWRCeXRlQnVm
ZmVyOwotICAgICAgICBpZiAoc3RyaWRlc1tpXSA9PSBwbGFuZVdpZHRoc1tpXSkgewotICAgICAg
ICAgIC8vIElucHV0IGlzIHBhY2tlZCBhbHJlYWR5LgotICAgICAgICAgIHBhY2tlZEJ5dGVCdWZm
ZXIgPSBwbGFuZXNbaV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgVmlkZW9SZW5kZXJl
ci5uYXRpdmVDb3B5UGxhbmUoCi0gICAgICAgICAgICAgIHBsYW5lc1tpXSwgcGxhbmVXaWR0aHNb
aV0sIHBsYW5lSGVpZ2h0c1tpXSwgc3RyaWRlc1tpXSwgY29weUJ1ZmZlciwgcGxhbmVXaWR0aHNb
aV0pOwotICAgICAgICAgIHBhY2tlZEJ5dGVCdWZmZXIgPSBjb3B5QnVmZmVyOwotICAgICAgICB9
Ci0gICAgICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDAsIEdM
RVMyMC5HTF9MVU1JTkFOQ0UsIHBsYW5lV2lkdGhzW2ldLAotICAgICAgICAgICAgcGxhbmVIZWln
aHRzW2ldLCAwLCBHTEVTMjAuR0xfTFVNSU5BTkNFLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwg
cGFja2VkQnl0ZUJ1ZmZlcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEhl
bHBlciBjbGFzcyBmb3IgZGV0ZXJtaW5pbmcgbGF5b3V0IHNpemUgYmFzZWQgb24gbGF5b3V0IHJl
cXVpcmVtZW50cywgc2NhbGluZyB0eXBlLCBhbmQgdmlkZW8KLSAgICogYXNwZWN0IHJhdGlvLgot
ICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBWaWRlb0xheW91dE1lYXN1cmUgewotICAgIC8v
IFRoZSBzY2FsaW5nIHR5cGUgZGV0ZXJtaW5lcyBob3cgdGhlIHZpZGVvIHdpbGwgZmlsbCB0aGUg
YWxsb3dlZCBsYXlvdXQgYXJlYSBpbiBtZWFzdXJlKCkuIEl0Ci0gICAgLy8gY2FuIGJlIHNwZWNp
ZmllZCBzZXBhcmF0ZWx5IGZvciB0aGUgY2FzZSB3aGVuIHZpZGVvIGhhcyBtYXRjaGVkIG9yaWVu
dGF0aW9uIHdpdGggbGF5b3V0IHNpemUKLSAgICAvLyBhbmQgd2hlbiB0aGVyZSBpcyBhbiBvcmll
bnRhdGlvbiBtaXNtYXRjaC4KLSAgICBwcml2YXRlIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlTWF0
Y2hPcmllbnRhdGlvbiA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9CQUxBTkNFRDsKLSAgICBw
cml2YXRlIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbiA9IFNjYWxp
bmdUeXBlLlNDQUxFX0FTUEVDVF9CQUxBTkNFRDsKLQotICAgIHB1YmxpYyB2b2lkIHNldFNjYWxp
bmdUeXBlKFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlKSB7Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBl
TWF0Y2hPcmllbnRhdGlvbiA9IHNjYWxpbmdUeXBlOwotICAgICAgdGhpcy5zY2FsaW5nVHlwZU1p
c21hdGNoT3JpZW50YXRpb24gPSBzY2FsaW5nVHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBzZXRTY2FsaW5nVHlwZSgKLSAgICAgICAgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNYXRjaE9y
aWVudGF0aW9uLCBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb24pIHsK
LSAgICAgIHRoaXMuc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uID0gc2NhbGluZ1R5cGVNYXRj
aE9yaWVudGF0aW9uOwotICAgICAgdGhpcy5zY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb24g
PSBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb247Ci0gICAgfQotCi0gICAgcHVibGljIFBv
aW50IG1lYXN1cmUoaW50IHdpZHRoU3BlYywgaW50IGhlaWdodFNwZWMsIGludCBmcmFtZVdpZHRo
LCBpbnQgZnJhbWVIZWlnaHQpIHsKLSAgICAgIC8vIENhbGN1bGF0ZSBtYXggYWxsb3dlZCBsYXlv
dXQgc2l6ZS4KLSAgICAgIGZpbmFsIGludCBtYXhXaWR0aCA9IFZpZXcuZ2V0RGVmYXVsdFNpemUo
SW50ZWdlci5NQVhfVkFMVUUsIHdpZHRoU3BlYyk7Ci0gICAgICBmaW5hbCBpbnQgbWF4SGVpZ2h0
ID0gVmlldy5nZXREZWZhdWx0U2l6ZShJbnRlZ2VyLk1BWF9WQUxVRSwgaGVpZ2h0U3BlYyk7Ci0g
ICAgICBpZiAoZnJhbWVXaWR0aCA9PSAwIHx8IGZyYW1lSGVpZ2h0ID09IDAgfHwgbWF4V2lkdGgg
PT0gMCB8fCBtYXhIZWlnaHQgPT0gMCkgewotICAgICAgICByZXR1cm4gbmV3IFBvaW50KG1heFdp
ZHRoLCBtYXhIZWlnaHQpOwotICAgICAgfQotICAgICAgLy8gQ2FsY3VsYXRlIGRlc2lyZWQgZGlz
cGxheSBzaXplIGJhc2VkIG9uIHNjYWxpbmcgdHlwZSwgdmlkZW8gYXNwZWN0IHJhdGlvLAotICAg
ICAgLy8gYW5kIG1heGltdW0gbGF5b3V0IHNpemUuCi0gICAgICBmaW5hbCBmbG9hdCBmcmFtZUFz
cGVjdCA9IGZyYW1lV2lkdGggLyAoZmxvYXQpIGZyYW1lSGVpZ2h0OwotICAgICAgZmluYWwgZmxv
YXQgZGlzcGxheUFzcGVjdCA9IG1heFdpZHRoIC8gKGZsb2F0KSBtYXhIZWlnaHQ7Ci0gICAgICBm
aW5hbCBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA9IChmcmFtZUFzcGVjdCA+IDEuMGYpID09IChk
aXNwbGF5QXNwZWN0ID4gMS4wZikKLSAgICAgICAgICA/IHNjYWxpbmdUeXBlTWF0Y2hPcmllbnRh
dGlvbgotICAgICAgICAgIDogc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uOwotICAgICAg
ZmluYWwgUG9pbnQgbGF5b3V0U2l6ZSA9IGdldERpc3BsYXlTaXplKHNjYWxpbmdUeXBlLCBmcmFt
ZUFzcGVjdCwgbWF4V2lkdGgsIG1heEhlaWdodCk7Ci0KLSAgICAgIC8vIElmIHRoZSBtZWFzdXJl
IHNwZWNpZmljYXRpb24gaXMgZm9yY2luZyBhIHNwZWNpZmljIHNpemUgLSB5aWVsZC4KLSAgICAg
IGlmIChWaWV3Lk1lYXN1cmVTcGVjLmdldE1vZGUod2lkdGhTcGVjKSA9PSBWaWV3Lk1lYXN1cmVT
cGVjLkVYQUNUTFkpIHsKLSAgICAgICAgbGF5b3V0U2l6ZS54ID0gbWF4V2lkdGg7Ci0gICAgICB9
Ci0gICAgICBpZiAoVmlldy5NZWFzdXJlU3BlYy5nZXRNb2RlKGhlaWdodFNwZWMpID09IFZpZXcu
TWVhc3VyZVNwZWMuRVhBQ1RMWSkgewotICAgICAgICBsYXlvdXRTaXplLnkgPSBtYXhIZWlnaHQ7
Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbGF5b3V0U2l6ZTsKLSAgICB9Ci0gIH0KLQotICAvLyBU
eXBlcyBvZiB2aWRlbyBzY2FsaW5nOgotICAvLyBTQ0FMRV9BU1BFQ1RfRklUIC0gdmlkZW8gZnJh
bWUgaXMgc2NhbGVkIHRvIGZpdCB0aGUgc2l6ZSBvZiB0aGUgdmlldyBieQotICAvLyAgICBtYWlu
dGFpbmluZyB0aGUgYXNwZWN0IHJhdGlvIChibGFjayBib3JkZXJzIG1heSBiZSBkaXNwbGF5ZWQp
LgotICAvLyBTQ0FMRV9BU1BFQ1RfRklMTCAtIHZpZGVvIGZyYW1lIGlzIHNjYWxlZCB0byBmaWxs
IHRoZSBzaXplIG9mIHRoZSB2aWV3IGJ5Ci0gIC8vICAgIG1haW50YWluaW5nIHRoZSBhc3BlY3Qg
cmF0aW8uIFNvbWUgcG9ydGlvbiBvZiB0aGUgdmlkZW8gZnJhbWUgbWF5IGJlCi0gIC8vICAgIGNs
aXBwZWQuCi0gIC8vIFNDQUxFX0FTUEVDVF9CQUxBTkNFRCAtIENvbXByb21pc2UgYmV0d2VlbiBG
SVQgYW5kIEZJTEwuIFZpZGVvIGZyYW1lIHdpbGwgZmlsbCBhcyBtdWNoIGFzCi0gIC8vIHBvc3Np
YmxlIG9mIHRoZSB2aWV3IHdoaWxlIG1haW50YWluaW5nIGFzcGVjdCByYXRpbywgdW5kZXIgdGhl
IGNvbnN0cmFpbnQgdGhhdCBhdCBsZWFzdAotICAvLyB8QkFMQU5DRURfVklTSUJMRV9GUkFDVElP
Tnwgb2YgdGhlIGZyYW1lIGNvbnRlbnQgd2lsbCBiZSBzaG93bi4KLSAgcHVibGljIHN0YXRpYyBl
bnVtIFNjYWxpbmdUeXBlIHsgU0NBTEVfQVNQRUNUX0ZJVCwgU0NBTEVfQVNQRUNUX0ZJTEwsIFND
QUxFX0FTUEVDVF9CQUxBTkNFRCB9Ci0gIC8vIFRoZSBtaW5pbXVtIGZyYWN0aW9uIG9mIHRoZSBm
cmFtZSBjb250ZW50IHRoYXQgd2lsbCBiZSBzaG93biBmb3IgfFNDQUxFX0FTUEVDVF9CQUxBTkNF
RHwuCi0gIC8vIFRoaXMgbGltaXRzIGV4Y2Vzc2l2ZSBjcm9wcGluZyB3aGVuIGFkanVzdGluZyBk
aXNwbGF5IHNpemUuCi0gIHByaXZhdGUgc3RhdGljIGZsb2F0IEJBTEFOQ0VEX1ZJU0lCTEVfRlJB
Q1RJT04gPSAwLjU2MjVmOwotICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgZmxvYXRbXSBpZGVudGl0eU1hdHJpeCgpIHsKLSAgICByZXR1cm4gbmV3IGZsb2F0W10g
ewotICAgICAgICAxLCAwLCAwLCAwLAotICAgICAgICAwLCAxLCAwLCAwLAotICAgICAgICAwLCAw
LCAxLCAwLAotICAgICAgICAwLCAwLCAwLCAxfTsKLSAgfQotICAvLyBNYXRyaXggd2l0aCB0cmFu
c2Zvcm0geScgPSAxIC0geS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdFtdIHZlcnRpY2Fs
RmxpcE1hdHJpeCgpIHsKLSAgICByZXR1cm4gbmV3IGZsb2F0W10gewotICAgICAgICAxLCAgMCwg
MCwgMCwKLSAgICAgICAgMCwgLTEsIDAsIDAsCi0gICAgICAgIDAsICAwLCAxLCAwLAotICAgICAg
ICAwLCAgMSwgMCwgMX07Ci0gIH0KLQotICAvLyBNYXRyaXggd2l0aCB0cmFuc2Zvcm0geCcgPSAx
IC0geC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdFtdIGhvcml6b250YWxGbGlwTWF0cml4
KCkgewotICAgIHJldHVybiBuZXcgZmxvYXRbXSB7Ci0gICAgICAgIC0xLCAwLCAwLCAwLAotICAg
ICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAxLCAwLCAw
LCAxfTsKLSAgfQotICAvLyBjbGFuZy1mb3JtYXQgb24KLQotICAvKioKLSAgICogUmV0dXJucyB0
ZXh0dXJlIG1hdHJpeCB0aGF0IHdpbGwgaGF2ZSB0aGUgZWZmZWN0IG9mIHJvdGF0aW5nIHRoZSBm
cmFtZSB8cm90YXRpb25EZWdyZWV8Ci0gICAqIGNsb2Nrd2lzZSB3aGVuIHJlbmRlcmVkLgotICAg
Ki8KLSAgcHVibGljIHN0YXRpYyBmbG9hdFtdIHJvdGF0ZVRleHR1cmVNYXRyaXgoZmxvYXRbXSB0
ZXh0dXJlTWF0cml4LCBmbG9hdCByb3RhdGlvbkRlZ3JlZSkgewotICAgIGZpbmFsIGZsb2F0W10g
cm90YXRpb25NYXRyaXggPSBuZXcgZmxvYXRbMTZdOwotICAgIE1hdHJpeC5zZXRSb3RhdGVNKHJv
dGF0aW9uTWF0cml4LCAwLCByb3RhdGlvbkRlZ3JlZSwgMCwgMCwgMSk7Ci0gICAgYWRqdXN0T3Jp
Z2luKHJvdGF0aW9uTWF0cml4KTsKLSAgICByZXR1cm4gbXVsdGlwbHlNYXRyaWNlcyh0ZXh0dXJl
TWF0cml4LCByb3RhdGlvbk1hdHJpeCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBuZXcg
bWF0cml4IHdpdGggdGhlIHJlc3VsdCBvZiBhICogYi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
ZmxvYXRbXSBtdWx0aXBseU1hdHJpY2VzKGZsb2F0W10gYSwgZmxvYXRbXSBiKSB7Ci0gICAgZmlu
YWwgZmxvYXRbXSByZXN1bHRNYXRyaXggPSBuZXcgZmxvYXRbMTZdOwotICAgIE1hdHJpeC5tdWx0
aXBseU1NKHJlc3VsdE1hdHJpeCwgMCwgYSwgMCwgYiwgMCk7Ci0gICAgcmV0dXJuIHJlc3VsdE1h
dHJpeDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGxheW91dCB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXggdGhhdCBhcHBsaWVzIGFuIG9wdGlvbmFsIG1pcnJvciBlZmZlY3QgYW5kIGNvbXBlbnNh
dGVzCi0gICAqIGZvciB2aWRlbyB2cyBkaXNwbGF5IGFzcGVjdCByYXRpby4KLSAgICovCi0gIHB1
YmxpYyBzdGF0aWMgZmxvYXRbXSBnZXRMYXlvdXRNYXRyaXgoCi0gICAgICBib29sZWFuIG1pcnJv
ciwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbywgZmxvYXQgZGlzcGxheUFzcGVjdFJhdGlvKSB7Ci0g
ICAgZmxvYXQgc2NhbGVYID0gMTsKLSAgICBmbG9hdCBzY2FsZVkgPSAxOwotICAgIC8vIFNjYWxl
IFggb3IgWSBkaW1lbnNpb24gc28gdGhhdCB2aWRlbyBhbmQgZGlzcGxheSBzaXplIGhhdmUgc2Ft
ZSBhc3BlY3QgcmF0aW8uCi0gICAgaWYgKGRpc3BsYXlBc3BlY3RSYXRpbyA+IHZpZGVvQXNwZWN0
UmF0aW8pIHsKLSAgICAgIHNjYWxlWSA9IHZpZGVvQXNwZWN0UmF0aW8gLyBkaXNwbGF5QXNwZWN0
UmF0aW87Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNjYWxlWCA9IGRpc3BsYXlBc3BlY3RSYXRpbyAv
IHZpZGVvQXNwZWN0UmF0aW87Ci0gICAgfQotICAgIC8vIEFwcGx5IG9wdGlvbmFsIGhvcml6b250
YWwgZmxpcC4KLSAgICBpZiAobWlycm9yKSB7Ci0gICAgICBzY2FsZVggKj0gLTE7Ci0gICAgfQot
ICAgIGZpbmFsIGZsb2F0IG1hdHJpeFtdID0gbmV3IGZsb2F0WzE2XTsKLSAgICBNYXRyaXguc2V0
SWRlbnRpdHlNKG1hdHJpeCwgMCk7Ci0gICAgTWF0cml4LnNjYWxlTShtYXRyaXgsIDAsIHNjYWxl
WCwgc2NhbGVZLCAxKTsKLSAgICBhZGp1c3RPcmlnaW4obWF0cml4KTsKLSAgICByZXR1cm4gbWF0
cml4OwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGN1bGF0ZSBkaXNwbGF5IHNpemUgYmFzZWQgb24g
c2NhbGluZyB0eXBlLCB2aWRlbyBhc3BlY3QgcmF0aW8sIGFuZCBtYXhpbXVtIGRpc3BsYXkgc2l6
ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUG9pbnQgZ2V0RGlzcGxheVNpemUoCi0gICAgICBT
Y2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbywgaW50IG1heERp
c3BsYXlXaWR0aCwgaW50IG1heERpc3BsYXlIZWlnaHQpIHsKLSAgICByZXR1cm4gZ2V0RGlzcGxh
eVNpemUoY29udmVydFNjYWxpbmdUeXBlVG9WaXNpYmxlRnJhY3Rpb24oc2NhbGluZ1R5cGUpLCB2
aWRlb0FzcGVjdFJhdGlvLAotICAgICAgICBtYXhEaXNwbGF5V2lkdGgsIG1heERpc3BsYXlIZWln
aHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1vdmUgfG1hdHJpeHwgdHJhbnNmb3JtYXRpb24gb3Jp
Z2luIHRvICgwLjUsIDAuNSkuIFRoaXMgaXMgdGhlIG9yaWdpbiBmb3IgdGV4dHVyZSBjb29yZGlu
YXRlcwotICAgKiB0aGF0IGFyZSBpbiB0aGUgcmFuZ2UgMCB0byAxLgotICAgKi8KLSAgcHJpdmF0
ZSBzdGF0aWMgdm9pZCBhZGp1c3RPcmlnaW4oZmxvYXRbXSBtYXRyaXgpIHsKLSAgICAvLyBOb3Rl
IHRoYXQgT3BlbkdMIGlzIHVzaW5nIGNvbHVtbi1tYWpvciBvcmRlci4KLSAgICAvLyBQcmUgdHJh
bnNsYXRlIHdpdGggLTAuNSB0byBtb3ZlIGNvb3JkaW5hdGVzIHRvIHJhbmdlIFstMC41LCAwLjVd
LgotICAgIG1hdHJpeFsxMl0gLT0gMC41ZiAqIChtYXRyaXhbMF0gKyBtYXRyaXhbNF0pOwotICAg
IG1hdHJpeFsxM10gLT0gMC41ZiAqIChtYXRyaXhbMV0gKyBtYXRyaXhbNV0pOwotICAgIC8vIFBv
c3QgdHJhbnNsYXRlIHdpdGggMC41IHRvIG1vdmUgY29vcmRpbmF0ZXMgdG8gcmFuZ2UgWzAsIDFd
LgotICAgIG1hdHJpeFsxMl0gKz0gMC41ZjsKLSAgICBtYXRyaXhbMTNdICs9IDAuNWY7Ci0gIH0K
LQotICAvKioKLSAgICogRWFjaCBzY2FsaW5nIHR5cGUgaGFzIGEgb25lLXRvLW9uZSBjb3JyZXNw
b25kZW5jZSB0byBhIG51bWVyaWMgbWluaW11bSBmcmFjdGlvbiBvZiB0aGUgdmlkZW8KLSAgICog
dGhhdCBtdXN0IHJlbWFpbiB2aXNpYmxlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQg
Y29udmVydFNjYWxpbmdUeXBlVG9WaXNpYmxlRnJhY3Rpb24oU2NhbGluZ1R5cGUgc2NhbGluZ1R5
cGUpIHsKLSAgICBzd2l0Y2ggKHNjYWxpbmdUeXBlKSB7Ci0gICAgICBjYXNlIFNDQUxFX0FTUEVD
VF9GSVQ6Ci0gICAgICAgIHJldHVybiAxLjBmOwotICAgICAgY2FzZSBTQ0FMRV9BU1BFQ1RfRklM
TDoKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgICBjYXNlIFNDQUxFX0FTUEVDVF9CQUxBTkNF
RDoKLSAgICAgICAgcmV0dXJuIEJBTEFOQ0VEX1ZJU0lCTEVfRlJBQ1RJT047Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGN1bGF0ZSBkaXNwbGF5IHNpemUgYmFzZWQgb24gbWlu
aW11bSBmcmFjdGlvbiBvZiB0aGUgdmlkZW8gdGhhdCBtdXN0IHJlbWFpbiB2aXNpYmxlLAotICAg
KiB2aWRlbyBhc3BlY3QgcmF0aW8sIGFuZCBtYXhpbXVtIGRpc3BsYXkgc2l6ZS4KLSAgICovCi0g
IHByaXZhdGUgc3RhdGljIFBvaW50IGdldERpc3BsYXlTaXplKAotICAgICAgZmxvYXQgbWluVmlz
aWJsZUZyYWN0aW9uLCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvLCBpbnQgbWF4RGlzcGxheVdpZHRo
LCBpbnQgbWF4RGlzcGxheUhlaWdodCkgewotICAgIC8vIElmIHRoZXJlIGlzIG5vIGNvbnN0cmFp
bnQgb24gdGhlIGFtb3VudCBvZiBjcm9wcGluZywgZmlsbCB0aGUgYWxsb3dlZCBkaXNwbGF5IGFy
ZWEuCi0gICAgaWYgKG1pblZpc2libGVGcmFjdGlvbiA9PSAwIHx8IHZpZGVvQXNwZWN0UmF0aW8g
PT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBQb2ludChtYXhEaXNwbGF5V2lkdGgsIG1heERpc3Bs
YXlIZWlnaHQpOwotICAgIH0KLSAgICAvLyBFYWNoIGRpbWVuc2lvbiBpcyBjb25zdHJhaW5lZCBv
biBtYXggZGlzcGxheSBzaXplIGFuZCBob3cgbXVjaCB3ZSBhcmUgYWxsb3dlZCB0byBjcm9wLgot
ICAgIGZpbmFsIGludCB3aWR0aCA9IE1hdGgubWluKAotICAgICAgICBtYXhEaXNwbGF5V2lkdGgs
IE1hdGgucm91bmQobWF4RGlzcGxheUhlaWdodCAvIG1pblZpc2libGVGcmFjdGlvbiAqIHZpZGVv
QXNwZWN0UmF0aW8pKTsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gTWF0aC5taW4oCi0gICAgICAg
IG1heERpc3BsYXlIZWlnaHQsIE1hdGgucm91bmQobWF4RGlzcGxheVdpZHRoIC8gbWluVmlzaWJs
ZUZyYWN0aW9uIC8gdmlkZW9Bc3BlY3RSYXRpbykpOwotICAgIHJldHVybiBuZXcgUG9pbnQod2lk
dGgsIGhlaWdodCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUGFyYW1ldGVy
cy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUGFyYW1ldGVycy5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMuamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0vKioK
LSAqIFRoZSBwYXJhbWV0ZXJzIGZvciBhbiB7QGNvZGUgUnRwU2VuZGVyfSwgYXMgZGVmaW5lZCBp
bgotICogaHR0cDovL3czYy5naXRodWIuaW8vd2VicnRjLXBjLyNydGNydHBzZW5kZXItaW50ZXJm
YWNlLgotICovCi1wdWJsaWMgY2xhc3MgUnRwUGFyYW1ldGVycyB7Ci0gIHB1YmxpYyBzdGF0aWMg
Y2xhc3MgRW5jb2RpbmcgewotICAgIHB1YmxpYyBib29sZWFuIGFjdGl2ZSA9IHRydWU7Ci0gICAg
Ly8gQSBudWxsIHZhbHVlIG1lYW5zICJubyBtYXhpbXVtIGJpdHJhdGUiLgotICAgIHB1YmxpYyBJ
bnRlZ2VyIG1heEJpdHJhdGVCcHM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIENvZGVj
IHsKLSAgICBpbnQgcGF5bG9hZFR5cGU7Ci0gICAgU3RyaW5nIG1pbWVUeXBlOwotICAgIGludCBj
bG9ja1JhdGU7Ci0gICAgaW50IGNoYW5uZWxzID0gMTsKLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBM
aW5rZWRMaXN0PEVuY29kaW5nPiBlbmNvZGluZ3M7Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRMaXN0
PENvZGVjPiBjb2RlY3M7Ci0KLSAgcHVibGljIFJ0cFBhcmFtZXRlcnMoKSB7Ci0gICAgZW5jb2Rp
bmdzID0gbmV3IExpbmtlZExpc3Q8RW5jb2Rpbmc+KCk7Ci0gICAgY29kZWNzID0gbmV3IExpbmtl
ZExpc3Q8Q29kZWM+KCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUmVjZWl2
ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFJlY2VpdmVyLmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUmVjZWl2ZXIuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgUnRwUmVjZWl2ZXJJ
bnRlcmZhY2UuICovCi1wdWJsaWMgY2xhc3MgUnRwUmVjZWl2ZXIgewotICBmaW5hbCBsb25nIG5h
dGl2ZVJ0cFJlY2VpdmVyOwotCi0gIHByaXZhdGUgTWVkaWFTdHJlYW1UcmFjayBjYWNoZWRUcmFj
azsKLQotICBwdWJsaWMgUnRwUmVjZWl2ZXIobG9uZyBuYXRpdmVSdHBSZWNlaXZlcikgewotICAg
IHRoaXMubmF0aXZlUnRwUmVjZWl2ZXIgPSBuYXRpdmVSdHBSZWNlaXZlcjsKLSAgICBsb25nIHRy
YWNrID0gbmF0aXZlR2V0VHJhY2sobmF0aXZlUnRwUmVjZWl2ZXIpOwotICAgIC8vIFdlIGNhbiBh
c3N1bWUgdGhhdCBhbiBSdHBSZWNlaXZlciBhbHdheXMgaGFzIGFuIGFzc29jaWF0ZWQgdHJhY2su
Ci0gICAgY2FjaGVkVHJhY2sgPSBuZXcgTWVkaWFTdHJlYW1UcmFjayh0cmFjayk7Ci0gIH0KLQot
ICBwdWJsaWMgTWVkaWFTdHJlYW1UcmFjayB0cmFjaygpIHsKLSAgICByZXR1cm4gY2FjaGVkVHJh
Y2s7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJzKFJ0cFBhcmFtZXRlcnMg
cGFyYW1ldGVycykgewotICAgIHJldHVybiBuYXRpdmVTZXRQYXJhbWV0ZXJzKG5hdGl2ZVJ0cFJl
Y2VpdmVyLCBwYXJhbWV0ZXJzKTsKLSAgfQotCi0gIHB1YmxpYyBSdHBQYXJhbWV0ZXJzIGdldFBh
cmFtZXRlcnMoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldFBhcmFtZXRlcnMobmF0aXZlUnRwUmVj
ZWl2ZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBpZCgpIHsKLSAgICByZXR1cm4gbmF0aXZl
SWQobmF0aXZlUnRwUmVjZWl2ZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsK
LSAgICBjYWNoZWRUcmFjay5kaXNwb3NlKCk7Ci0gICAgZnJlZShuYXRpdmVSdHBSZWNlaXZlcik7
Ci0gIH0KLQotICAvLyBUaGlzIHNob3VsZCBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBv
ZiB0aGUgdHJhY2suCi0gIC8vIFdpbGwgYmUgcmVsZWFzZWQgaW4gZGlzcG9zZSgpLgotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVHZXRUcmFjayhsb25nIG5hdGl2ZVJ0cFJlY2Vp
dmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRQYXJhbWV0
ZXJzKAotICAgICAgbG9uZyBuYXRpdmVSdHBSZWNlaXZlciwgUnRwUGFyYW1ldGVycyBwYXJhbWV0
ZXJzKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgUnRwUGFyYW1ldGVycyBuYXRpdmVHZXRQ
YXJhbWV0ZXJzKGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBTdHJpbmcgbmF0aXZlSWQobG9uZyBuYXRpdmVSdHBSZWNlaXZlcik7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLX07Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFNlbmRlci5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvUnRwU2VuZGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvUnRwU2VuZGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MCArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHdyYXBw
ZXIgZm9yIGEgQysrIFJ0cFNlbmRlckludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBSdHBTZW5k
ZXIgewotICBmaW5hbCBsb25nIG5hdGl2ZVJ0cFNlbmRlcjsKLQotICBwcml2YXRlIE1lZGlhU3Ry
ZWFtVHJhY2sgY2FjaGVkVHJhY2s7Ci0gIHByaXZhdGUgYm9vbGVhbiBvd25zVHJhY2sgPSB0cnVl
OwotCi0gIHB1YmxpYyBSdHBTZW5kZXIobG9uZyBuYXRpdmVSdHBTZW5kZXIpIHsKLSAgICB0aGlz
Lm5hdGl2ZVJ0cFNlbmRlciA9IG5hdGl2ZVJ0cFNlbmRlcjsKLSAgICBsb25nIHRyYWNrID0gbmF0
aXZlR2V0VHJhY2sobmF0aXZlUnRwU2VuZGVyKTsKLSAgICAvLyBJdCBtYXkgYmUgcG9zc2libGUg
Zm9yIGFuIFJ0cFNlbmRlciB0byBiZSBjcmVhdGVkIHdpdGhvdXQgYSB0cmFjay4KLSAgICBjYWNo
ZWRUcmFjayA9ICh0cmFjayA9PSAwKSA/IG51bGwgOiBuZXcgTWVkaWFTdHJlYW1UcmFjayh0cmFj
ayk7Ci0gIH0KLQotICAvLyBJZiB8dGFrZU93bmVyc2hpcHwgaXMgdHJ1ZSwgdGhlIFJ0cFNlbmRl
ciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHRyYWNrCi0gIC8vIGZyb20gdGhlIGNhbGxlciwgYW5k
IHdpbGwgYXV0by1kaXNwb3NlIG9mIGl0IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KLSAgLy8gfHRh
a2VPd25lcnNoaXB8IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGNhbGxlciBvd25zIHRoZSB0
cmFjazsgaXQgaXMKLSAgLy8gbm90IGFwcHJvcHJpYXRlIHdoZW4gdGhlIHRyYWNrIGlzIG93bmVk
IGJ5LCBmb3IgZXhhbXBsZSwgYW5vdGhlciBSdHBTZW5kZXIKLSAgLy8gb3IgYSBNZWRpYVN0cmVh
bS4KLSAgcHVibGljIGJvb2xlYW4gc2V0VHJhY2soTWVkaWFTdHJlYW1UcmFjayB0cmFjaywgYm9v
bGVhbiB0YWtlT3duZXJzaGlwKSB7Ci0gICAgaWYgKCFuYXRpdmVTZXRUcmFjayhuYXRpdmVSdHBT
ZW5kZXIsICh0cmFjayA9PSBudWxsKSA/IDAgOiB0cmFjay5uYXRpdmVUcmFjaykpIHsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGNhY2hlZFRyYWNrICE9IG51bGwgJiYgb3du
c1RyYWNrKSB7Ci0gICAgICBjYWNoZWRUcmFjay5kaXNwb3NlKCk7Ci0gICAgfQotICAgIGNhY2hl
ZFRyYWNrID0gdHJhY2s7Ci0gICAgb3duc1RyYWNrID0gdGFrZU93bmVyc2hpcDsKLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrIHRyYWNrKCkgewotICAg
IHJldHVybiBjYWNoZWRUcmFjazsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFtZXRl
cnMoUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVNldFBhcmFt
ZXRlcnMobmF0aXZlUnRwU2VuZGVyLCBwYXJhbWV0ZXJzKTsKLSAgfQotCi0gIHB1YmxpYyBSdHBQ
YXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldFBhcmFtZXRl
cnMobmF0aXZlUnRwU2VuZGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgaWQoKSB7Ci0gICAg
cmV0dXJuIG5hdGl2ZUlkKG5hdGl2ZVJ0cFNlbmRlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBk
aXNwb3NlKCkgewotICAgIGlmIChjYWNoZWRUcmFjayAhPSBudWxsICYmIG93bnNUcmFjaykgewot
ICAgICAgY2FjaGVkVHJhY2suZGlzcG9zZSgpOwotICAgIH0KLSAgICBmcmVlKG5hdGl2ZVJ0cFNl
bmRlcik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRU
cmFjayhsb25nIG5hdGl2ZVJ0cFNlbmRlciwgbG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgLy8gVGhp
cyBzaG91bGQgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHRyYWNrLgotICAv
LyBXaWxsIGJlIHJlbGVhc2VkIGluIGRpc3Bvc2UoKSBvciBzZXRUcmFjaygpLgotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVHZXRUcmFjayhsb25nIG5hdGl2ZVJ0cFNlbmRlcik7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU2V0UGFyYW1ldGVycyhs
b25nIG5hdGl2ZVJ0cFNlbmRlciwgUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzKTsKLQotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgUnRwUGFyYW1ldGVycyBuYXRpdmVHZXRQYXJhbWV0ZXJzKGxvbmcg
bmF0aXZlUnRwU2VuZGVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIG5hdGl2
ZUlkKGxvbmcgbmF0aXZlUnRwU2VuZGVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9p
ZCBmcmVlKGxvbmcgbmF0aXZlUnRwU2VuZGVyKTsKLX07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L1NjcmVlbkNhcHR1cmVyQW5kcm9pZC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvU2NyZWVuQ2FwdHVyZXJBbmRyb2lkLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvU2NyZWVuQ2FwdHVyZXJBbmRyb2lkLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyMDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwot
Ci1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLmFw
cC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuZGlzcGxheS5EaXNw
bGF5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuVmlydHVhbERpc3Bs
YXk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0aW9uLk1lZGlhUHJvamVjdGlvbjsKLWlt
cG9ydCBhbmRyb2lkLm1lZGlhLnByb2plY3Rpb24uTWVkaWFQcm9qZWN0aW9uTWFuYWdlcjsKLWlt
cG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7
Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2Yg
VmlkZW9DYXB0dXJlciB0byBjYXB0dXJlIHRoZSBzY3JlZW4gY29udGVudCBhcyBhIHZpZGVvIHN0
cmVhbS4KLSAqIENhcHR1cmluZyBpcyBkb25lIGJ5IHtAY29kZSBNZWRpYVByb2plY3Rpb259IG9u
IGEge0Bjb2RlIFN1cmZhY2VUZXh0dXJlfS4gV2UgaW50ZXJhY3Qgd2l0aCB0aGlzCi0gKiB7QGNv
ZGUgU3VyZmFjZVRleHR1cmV9IHVzaW5nIGEge0Bjb2RlIFN1cmZhY2VUZXh0dXJlSGVscGVyfS4K
LSAqIFRoZSB7QGNvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9IGlzIGNyZWF0ZWQgYnkgdGhlIG5h
dGl2ZSBjb2RlIGFuZCBwYXNzZWQgdG8gdGhpcyBjYXB0dXJlciBpbgotICoge0Bjb2RlIFZpZGVv
Q2FwdHVyZXIuaW5pdGlhbGl6ZSgpfS4gT24gcmVjZWl2aW5nIGEgbmV3IGZyYW1lLCB0aGlzIGNh
cHR1cmVyIHBhc3NlcyBpdAotICogYXMgYSB0ZXh0dXJlIHRvIHRoZSBuYXRpdmUgY29kZSB2aWEg
e0Bjb2RlIENhcHR1cmVyT2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgpfS4gVGhpcyB0
YWtlcwotICogcGxhY2Ugb24gdGhlIEhhbmRsZXJUaHJlYWQgb2YgdGhlIGdpdmVuIHtAY29kZSBT
dXJmYWNlVGV4dHVyZUhlbHBlcn0uIFdoZW4gZG9uZSB3aXRoIGVhY2ggZnJhbWUsCi0gKiB0aGUg
bmF0aXZlIGNvZGUgcmV0dXJucyB0aGUgYnVmZmVyIHRvIHRoZSAge0Bjb2RlIFN1cmZhY2VUZXh0
dXJlSGVscGVyfSB0byBiZSB1c2VkIGZvciBuZXcKLSAqIGZyYW1lcy4gQXQgYW55IHRpbWUsIGF0
IG1vc3Qgb25lIGZyYW1lIGlzIGJlaW5nIHByb2Nlc3NlZC4KLSAqLwotQFRhcmdldEFwaSgyMSkK
LXB1YmxpYyBjbGFzcyBTY3JlZW5DYXB0dXJlckFuZHJvaWQKLSAgICBpbXBsZW1lbnRzIFZpZGVv
Q2FwdHVyZXIsIFN1cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlz
dGVuZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRElTUExBWV9GTEFHUyA9Ci0gICAg
ICBEaXNwbGF5TWFuYWdlci5WSVJUVUFMX0RJU1BMQVlfRkxBR19QVUJMSUMgfCBEaXNwbGF5TWFu
YWdlci5WSVJUVUFMX0RJU1BMQVlfRkxBR19QUkVTRU5UQVRJT047Ci0gIC8vIERQSSBmb3IgVmly
dHVhbERpc3BsYXksIGRvZXMgbm90IHNlZW0gdG8gbWF0dGVyIGZvciB1cy4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IFZJUlRVQUxfRElTUExBWV9EUEkgPSA0MDA7Ci0KLSAgcHJpdmF0ZSBm
aW5hbCBJbnRlbnQgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGE7Ci0gIHByaXZh
dGUgZmluYWwgTWVkaWFQcm9qZWN0aW9uLkNhbGxiYWNrIG1lZGlhUHJvamVjdGlvbkNhbGxiYWNr
OwotCi0gIHByaXZhdGUgaW50IHdpZHRoOwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0gIHByaXZh
dGUgVmlydHVhbERpc3BsYXkgdmlydHVhbERpc3BsYXk7Ci0gIHByaXZhdGUgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gIHByaXZhdGUgQ2FwdHVyZXJPYnNlcnZl
ciBjYXB0dXJlck9ic2VydmVyOwotICBwcml2YXRlIGxvbmcgbnVtQ2FwdHVyZWRGcmFtZXMgPSAw
OwotICBwcml2YXRlIE1lZGlhUHJvamVjdGlvbiBtZWRpYVByb2plY3Rpb247Ci0gIHByaXZhdGUg
Ym9vbGVhbiBpc0Rpc3Bvc2VkID0gZmFsc2U7Ci0gIHByaXZhdGUgTWVkaWFQcm9qZWN0aW9uTWFu
YWdlciBtZWRpYVByb2plY3Rpb25NYW5hZ2VyOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEg
bmV3IFNjcmVlbiBDYXB0dXJlci4KLSAgICoKLSAgICogQHBhcmFtIG1lZGlhUHJvamVjdGlvblBl
cm1pc3Npb25SZXN1bHREYXRhIHRoZSByZXN1bHQgZGF0YSBvZiBNZWRpYVByb2plY3Rpb24gcGVy
bWlzc2lvbgotICAgKiAgICAgYWN0aXZpdHk7IHRoZSBjYWxsaW5nIGFwcCBtdXN0IHZhbGlkYXRl
IHRoYXQgcmVzdWx0IGNvZGUgaXMgQWN0aXZpdHkuUkVTVUxUX09LIGJlZm9yZQotICAgKiAgICAg
Y2FsbGluZyB0aGlzIG1ldGhvZC4KLSAgICogQHBhcmFtIG1lZGlhUHJvamVjdGlvbkNhbGxiYWNr
IE1lZGlhUHJvamVjdGlvbiBjYWxsYmFjayB0byBpbXBsZW1lbnQgYXBwbGljYXRpb24gc3BlY2lm
aWMKLSAgICogICAgIGxvZ2ljIGluIGV2ZW50cyBzdWNoIGFzIHdoZW4gdGhlIHVzZXIgcmV2b2tl
cyBhIHByZXZpb3VzbHkgZ3JhbnRlZCBjYXB0dXJlIHBlcm1pc3Npb24uCi0gICoqLwotICBwdWJs
aWMgU2NyZWVuQ2FwdHVyZXJBbmRyb2lkKEludGVudCBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9u
UmVzdWx0RGF0YSwKLSAgICAgIE1lZGlhUHJvamVjdGlvbi5DYWxsYmFjayBtZWRpYVByb2plY3Rp
b25DYWxsYmFjaykgewotICAgIHRoaXMubWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERh
dGEgPSBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YTsKLSAgICB0aGlzLm1lZGlh
UHJvamVjdGlvbkNhbGxiYWNrID0gbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2s7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgY2hlY2tOb3REaXNwb3NlZCgpIHsKLSAgICBpZiAoaXNEaXNwb3NlZCkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImNhcHR1cmVyIGlzIGRpc3Bvc2VkLiIp
OwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
aW5pdGlhbGl6ZShmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBl
ciwKLSAgICAgIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LCBmaW5hbCBWaWRlb0Nh
cHR1cmVyLkNhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcikgewotICAgIGNoZWNrTm90
RGlzcG9zZWQoKTsKLQotICAgIGlmIChjYXB0dXJlck9ic2VydmVyID09IG51bGwpIHsKLSAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYXB0dXJlck9ic2VydmVyIG5vdCBzZXQuIik7
Ci0gICAgfQotICAgIHRoaXMuY2FwdHVyZXJPYnNlcnZlciA9IGNhcHR1cmVyT2JzZXJ2ZXI7Ci0K
LSAgICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oInN1cmZhY2VUZXh0dXJlSGVscGVyIG5vdCBzZXQuIik7Ci0gICAg
fQotICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsK
LQotICAgIG1lZGlhUHJvamVjdGlvbk1hbmFnZXIgPSAoTWVkaWFQcm9qZWN0aW9uTWFuYWdlcikg
YXBwbGljYXRpb25Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCi0gICAgICAgIENvbnRleHQuTUVE
SUFfUFJPSkVDVElPTl9TRVJWSUNFKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgc3lu
Y2hyb25pemVkIHZvaWQgc3RhcnRDYXB0dXJlKAotICAgICAgZmluYWwgaW50IHdpZHRoLCBmaW5h
bCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgaWdub3JlZEZyYW1lcmF0ZSkgewotICAgIGNoZWNrTm90
RGlzcG9zZWQoKTsKLQotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9
IGhlaWdodDsKLQotICAgIG1lZGlhUHJvamVjdGlvbiA9IG1lZGlhUHJvamVjdGlvbk1hbmFnZXIu
Z2V0TWVkaWFQcm9qZWN0aW9uKAotICAgICAgICBBY3Rpdml0eS5SRVNVTFRfT0ssIG1lZGlhUHJv
amVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhKTsKLQotICAgIC8vIExldCBNZWRpYVByb2plY3Rp
b24gY2FsbGJhY2sgdXNlIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciB0aHJlYWQuCi0gICAgbWVk
aWFQcm9qZWN0aW9uLnJlZ2lzdGVyQ2FsbGJhY2sobWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2ssIHN1
cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKSk7Ci0KLSAgICBjcmVhdGVWaXJ0dWFsRGlz
cGxheSgpOwotICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQodHJ1ZSk7Ci0g
ICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcoU2NyZWVuQ2FwdHVyZXJBbmRy
b2lkLnRoaXMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9p
ZCBzdG9wQ2FwdHVyZSgpIHsKLSAgICBjaGVja05vdERpc3Bvc2VkKCk7Ci0gICAgVGhyZWFkVXRp
bHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRI
YW5kbGVyKCksIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5n
KCk7Ci0gICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0b3BwZWQoKTsKLQotICAg
ICAgICBpZiAodmlydHVhbERpc3BsYXkgIT0gbnVsbCkgewotICAgICAgICAgIHZpcnR1YWxEaXNw
bGF5LnJlbGVhc2UoKTsKLSAgICAgICAgICB2aXJ0dWFsRGlzcGxheSA9IG51bGw7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAobWVkaWFQcm9qZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAv
LyBVbnJlZ2lzdGVyIHRoZSBjYWxsYmFjayBiZWZvcmUgc3RvcHBpbmcsIG90aGVyd2lzZSB0aGUg
Y2FsbGJhY2sgcmVjdXJzaXZlbHkKLSAgICAgICAgICAvLyBjYWxscyB0aGlzIG1ldGhvZC4KLSAg
ICAgICAgICBtZWRpYVByb2plY3Rpb24udW5yZWdpc3RlckNhbGxiYWNrKG1lZGlhUHJvamVjdGlv
bkNhbGxiYWNrKTsKLSAgICAgICAgICBtZWRpYVByb2plY3Rpb24uc3RvcCgpOwotICAgICAgICAg
IG1lZGlhUHJvamVjdGlvbiA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZGlzcG9zZSgpIHsK
LSAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGFuZ2VzIG91dHB1
dCB2aWRlbyBmb3JtYXQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHNjYWxlIHRoZSBvdXRw
dXQKLSAgICogdmlkZW8sIG9yIHRvIGNoYW5nZSBvcmllbnRhdGlvbiB3aGVuIHRoZSBjYXB0dXJl
ZCBzY3JlZW4gaXMgcm90YXRlZCBmb3IgZXhhbXBsZS4KLSAgICoKLSAgICogQHBhcmFtIHdpZHRo
IG5ldyBvdXRwdXQgdmlkZW8gd2lkdGgKLSAgICogQHBhcmFtIGhlaWdodCBuZXcgb3V0cHV0IHZp
ZGVvIGhlaWdodAotICAgKiBAcGFyYW0gaWdub3JlZEZyYW1lcmF0ZSBpZ25vcmVkCi0gICAqLwot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNoYW5nZUNhcHR1cmVGb3Jt
YXQoCi0gICAgICBmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBp
Z25vcmVkRnJhbWVyYXRlKSB7Ci0gICAgY2hlY2tOb3REaXNwb3NlZCgpOwotCi0gICAgdGhpcy53
aWR0aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgaWYgKHZpcnR1
YWxEaXNwbGF5ID09IG51bGwpIHsKLSAgICAgIC8vIENhcHR1cmVyIGlzIHN0b3BwZWQsIHRoZSB2
aXJ0dWFsIGRpc3BsYXkgd2lsbCBiZSBjcmVhdGVkIGluIHN0YXJ0Q2FwdHVlcigpLgotICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIG5ldyB2aXJ0dWFsIGRpc3BsYXkgb24g
dGhlIHN1cmZhY2VUZXh0dXJlSGVscGVyIHRocmVhZCB0byBhdm9pZCBpbnRlcmZlcmVuY2UKLSAg
ICAvLyB3aXRoIGZyYW1lIHByb2Nlc3NpbmcsIHdoaWNoIGhhcHBlbnMgb24gdGhlIHNhbWUgdGhy
ZWFkICh3ZSBzZXJpYWxpemUgZXZlbnRzIGJ5IHJ1bm5pbmcKLSAgICAvLyB0aGVtIG9uIHRoZSBz
YW1lIHRocmVhZCkuCi0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJs
eShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCksIG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB2aXJ0dWFs
RGlzcGxheS5yZWxlYXNlKCk7Ci0gICAgICAgIGNyZWF0ZVZpcnR1YWxEaXNwbGF5KCk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlVmlydHVhbERpc3BsYXko
KSB7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKS5zZXREZWZh
dWx0QnVmZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsRGlzcGxheSA9IG1lZGlh
UHJvamVjdGlvbi5jcmVhdGVWaXJ0dWFsRGlzcGxheSgiV2ViUlRDX1NjcmVlbkNhcHR1cmUiLCB3
aWR0aCwgaGVpZ2h0LAotICAgICAgICBWSVJUVUFMX0RJU1BMQVlfRFBJLCBESVNQTEFZX0ZMQUdT
LCBuZXcgU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKSwK
LSAgICAgICAgbnVsbCAvKiBjYWxsYmFjayAqLywgbnVsbCAvKiBjYWxsYmFjayBoYW5kbGVyICov
KTsKLSAgfQotCi0gIC8vIFRoaXMgaXMgY2FsbGVkIG9uIHRoZSBpbnRlcm5hbCBsb29wZXIgdGhy
ZWFkIG9mIHtAQ29kZSBTdXJmYWNlVGV4dHVyZUhlbHBlcn0uCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZShpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtd
IHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgIG51bUNhcHR1cmVkRnJh
bWVzKys7Ci0gICAgY2FwdHVyZXJPYnNlcnZlci5vblRleHR1cmVGcmFtZUNhcHR1cmVkKAotICAg
ICAgICB3aWR0aCwgaGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgMCAvKiBy
b3RhdGlvbiAqLywgdGltZXN0YW1wTnMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBi
b29sZWFuIGlzU2NyZWVuY2FzdCgpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1Ymxp
YyBsb25nIGdldE51bUNhcHR1cmVkRnJhbWVzKCkgewotICAgIHJldHVybiBudW1DYXB0dXJlZEZy
YW1lczsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TZHBPYnNlcnZlci5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TZHBPYnNlcnZlci5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi0vKiogSW50ZXJmYWNlIGZvciBvYnNlcnZpbmcgU0RQLXJlbGF0ZWQgZXZlbnRzLiAq
LwotcHVibGljIGludGVyZmFjZSBTZHBPYnNlcnZlciB7Ci0gIC8qKiBDYWxsZWQgb24gc3VjY2Vz
cyBvZiBDcmVhdGV7T2ZmZXIsQW5zd2VyfSgpLiAqLwotICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVN1
Y2Nlc3MoU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgLyoqIENhbGxlZCBvbiBzdWNjZXNz
IG9mIFNldHtMb2NhbCxSZW1vdGV9RGVzY3JpcHRpb24oKS4gKi8KLSAgcHVibGljIHZvaWQgb25T
ZXRTdWNjZXNzKCk7Ci0KLSAgLyoqIENhbGxlZCBvbiBlcnJvciBvZiBDcmVhdGV7T2ZmZXIsQW5z
d2VyfSgpLiAqLwotICBwdWJsaWMgdm9pZCBvbkNyZWF0ZUZhaWx1cmUoU3RyaW5nIGVycm9yKTsK
LQotICAvKiogQ2FsbGVkIG9uIGVycm9yIG9mIFNldHtMb2NhbCxSZW1vdGV9RGVzY3JpcHRpb24o
KS4gKi8KLSAgcHVibGljIHZvaWQgb25TZXRGYWlsdXJlKFN0cmluZyBlcnJvcik7Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbi5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uLmphdmEJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLS8qKgotICogRGVzY3JpcHRpb24gb2YgYW4gUkZDIDQ1NjYgU2Vzc2lvbi4KLSAq
IFNEUHMgYXJlIHBhc3NlZCBhcyBzZXJpYWxpemVkIFN0cmluZ3MgaW4gSmF2YS1sYW5kIGFuZCBh
cmUgbWF0ZXJpYWxpemVkCi0gKiB0byBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UgYXMgYXBw
cm9wcmlhdGUgaW4gdGhlIEpOSSBsYXllci4KLSAqLwotcHVibGljIGNsYXNzIFNlc3Npb25EZXNj
cmlwdGlvbiB7Ci0gIC8qKiBKYXZhLWxhbmQgZW51bSB2ZXJzaW9uIG9mIFNlc3Npb25EZXNjcmlw
dGlvbkludGVyZmFjZSdzIHR5cGUoKSBzdHJpbmcuICovCi0gIHB1YmxpYyBzdGF0aWMgZW51bSBU
eXBlIHsKLSAgICBPRkZFUiwKLSAgICBQUkFOU1dFUiwKLSAgICBBTlNXRVI7Ci0KLSAgICBwdWJs
aWMgU3RyaW5nIGNhbm9uaWNhbEZvcm0oKSB7Ci0gICAgICByZXR1cm4gbmFtZSgpLnRvTG93ZXJD
YXNlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBUeXBlIGZyb21DYW5vbmljYWxGb3Jt
KFN0cmluZyBjYW5vbmljYWwpIHsKLSAgICAgIHJldHVybiBUeXBlLnZhbHVlT2YoVHlwZS5jbGFz
cywgY2Fub25pY2FsLnRvVXBwZXJDYXNlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5h
bCBUeXBlIHR5cGU7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247Ci0KLSAgcHVi
bGljIFNlc3Npb25EZXNjcmlwdGlvbihUeXBlIHR5cGUsIFN0cmluZyBkZXNjcmlwdGlvbikgewot
ICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9u
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N0YXRzT2JzZXJ2ZXIuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N0YXRzT2JzZXJ2ZXIuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c09ic2VydmVyLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLS8qKiBJbnRlcmZhY2UgZm9yIG9ic2VydmluZyBTdGF0cyByZXBvcnRzIChzZWUg
d2VicnRjOjpTdGF0c09ic2VydmVycykuICovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXRzT2JzZXJ2
ZXIgewotICAvKiogQ2FsbGVkIHdoZW4gdGhlIHJlcG9ydHMgYXJlIHJlYWR5LiovCi0gIHB1Ymxp
YyB2b2lkIG9uQ29tcGxldGUoU3RhdHNSZXBvcnRbXSByZXBvcnRzKTsKLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvU3RhdHNSZXBvcnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1N0YXRzUmVwb3J0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvU3RhdHNSZXBvcnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgdmVyc2lvbiBv
ZiB3ZWJydGM6OlN0YXRzUmVwb3J0LiAqLwotcHVibGljIGNsYXNzIFN0YXRzUmVwb3J0IHsKLSAg
LyoqIEphdmEgdmVyc2lvbiBvZiB3ZWJydGM6OlN0YXRzUmVwb3J0OjpWYWx1ZS4gKi8KLSAgcHVi
bGljIHN0YXRpYyBjbGFzcyBWYWx1ZSB7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBuYW1lOwot
ICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgdmFsdWU7Ci0KLSAgICBwdWJsaWMgVmFsdWUoU3RyaW5n
IG5hbWUsIFN0cmluZyB2YWx1ZSkgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgIHRo
aXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkg
ewotICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJbIikuYXBwZW5kKG5hbWUpLmFwcGVuZCgiOiAiKS5hcHBlbmQo
dmFsdWUpLmFwcGVuZCgiXSIpOwotICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAg
ICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGlkOwotICBwdWJsaWMgZmluYWwgU3Ry
aW5nIHR5cGU7Ci0gIC8vIFRpbWUgc2luY2UgMTk3MC0wMS0wMVQwMDowMDowMFogaW4gbWlsbGlz
ZWNvbmRzLgotICBwdWJsaWMgZmluYWwgZG91YmxlIHRpbWVzdGFtcDsKLSAgcHVibGljIGZpbmFs
IFZhbHVlW10gdmFsdWVzOwotCi0gIHB1YmxpYyBTdGF0c1JlcG9ydChTdHJpbmcgaWQsIFN0cmlu
ZyB0eXBlLCBkb3VibGUgdGltZXN0YW1wLCBWYWx1ZVtdIHZhbHVlcykgewotICAgIHRoaXMuaWQg
PSBpZDsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMudGltZXN0YW1wID0gdGltZXN0
YW1wOwotICAgIHRoaXMudmFsdWVzID0gdmFsdWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0
b1N0cmluZygpIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRl
cigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJpZDogIikKLSAgICAgICAgLmFwcGVuZChpZCkKLSAg
ICAgICAgLmFwcGVuZCgiLCB0eXBlOiAiKQotICAgICAgICAuYXBwZW5kKHR5cGUpCi0gICAgICAg
IC5hcHBlbmQoIiwgdGltZXN0YW1wOiAiKQotICAgICAgICAuYXBwZW5kKHRpbWVzdGFtcCkKLSAg
ICAgICAgLmFwcGVuZCgiLCB2YWx1ZXM6ICIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFs
dWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZXNbaV0udG9TdHJp
bmcoKSkuYXBwZW5kKCIsICIpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlci5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJl
SGVscGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5T
dXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMTFFeHQ7Ci1pbXBvcnQg
YW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQg
YW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKLWlt
cG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZl
cjsKLWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3Vy
cmVudC5DYWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQot
LyoqCi0gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGFuZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8g
YSBTdXJmYWNlVGV4dHVyZS4gVGhlIGNhbGxlciB3aWxsIGdldCBub3RpZmllZAotICogb2YgbmV3
IGZyYW1lcyBpbiBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLCBhbmQgc2hvdWxkIGNhbGwgcmV0
dXJuVGV4dHVyZUZyYW1lKCkgd2hlbiBkb25lIHdpdGgKLSAqIHRoZSBmcmFtZS4gT25seSBvbmUg
dGV4dHVyZSBmcmFtZSBjYW4gYmUgaW4gZmxpZ2h0IGF0IG9uY2UsIHNvIHJldHVyblRleHR1cmVG
cmFtZSgpIG11c3QgYmUKLSAqIGNhbGxlZCBpbiBvcmRlciB0byByZWNlaXZlIGEgbmV3IGZyYW1l
LiBDYWxsIHN0b3BMaXN0ZW5pbmcoKSB0byBzdG9wIHJlY2VpdmVpbmcgbmV3IGZyYW1lcy4gQ2Fs
bAotICogZGlzcG9zZSB0byByZWxlYXNlIGFsbCByZXNvdXJjZXMgb25jZSB0aGUgdGV4dHVyZSBm
cmFtZSBpcyByZXR1cm5lZC4KLSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBhIEMrKyBjb3VudGVyIHBh
cnQgb2YgdGhpcyBjbGFzcyB0aGF0IG9wdGlvbmFsbHkgY2FuIGJlIHVzZWQuIEl0IGlzIHVzZWQg
Zm9yCi0gKiB3cmFwcGluZyB0ZXh0dXJlIGZyYW1lcyBpbnRvIHdlYnJ0Yzo6VmlkZW9GcmFtZXMg
YW5kIGFsc28gaGFuZGxlcyBjYWxsaW5nIHJldHVyblRleHR1cmVGcmFtZSgpCi0gKiB3aGVuIHRo
ZSB3ZWJydGM6OlZpZGVvRnJhbWUgaXMgbm8gbG9uZ2VyIHVzZWQuCi0gKi8KLWNsYXNzIFN1cmZh
Y2VUZXh0dXJlSGVscGVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJT
dXJmYWNlVGV4dHVyZUhlbHBlciI7Ci0gIC8qKgotICAgKiBDYWxsYmFjayBpbnRlcmZhY2UgZm9y
IGJlaW5nIG5vdGlmaWVkIHRoYXQgYSBuZXcgdGV4dHVyZSBmcmFtZSBpcyBhdmFpbGFibGUuIFRo
ZSBjYWxscyB3aWxsIGJlCi0gICAqIG1hZGUgb24gYSBkZWRpY2F0ZWQgdGhyZWFkIHdpdGggYSBi
b3VuZCBFR0xDb250ZXh0LiBUaGUgdGhyZWFkIHdpbGwgYmUgdGhlIHNhbWUgdGhyb3VnaG91dCB0
aGUKLSAgICogbGlmZXRpbWUgb2YgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGluc3RhbmNlLCBi
dXQgZGlmZmVyZW50IGZyb20gdGhlIHRocmVhZCBjYWxsaW5nIHRoZQotICAgKiBTdXJmYWNlVGV4
dHVyZUhlbHBlciBjb25zdHJ1Y3Rvci4gVGhlIGNhbGxlZSBpcyBub3QgYWxsb3dlZCB0byBtYWtl
IGFub3RoZXIgRUdMQ29udGV4dCBjdXJyZW50Ci0gICAqIG9uIHRoZSBjYWxsaW5nIHRocmVhZC4K
LSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5l
ciB7Ci0gICAgYWJzdHJhY3Qgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAgICAgICAg
aW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0YW1w
TnMpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdCBhIG5ldyBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzaGFyaW5nIE9wZW5HTCByZXNvdXJjZXMgd2l0aCB8c2hhcmVkQ29udGV4dHwuIEEgZGVk
aWNhdGVkCi0gICAqIHRocmVhZCBhbmQgaGFuZGxlciBpcyBjcmVhdGVkIGZvciBoYW5kbGluZyB0
aGUgU3VyZmFjZVRleHR1cmUuIE1heSByZXR1cm4gbnVsbCBpZiBFR0wgZmFpbHMgdG8KLSAgICog
aW5pdGlhbGl6ZSBhIHBpeGVsIGJ1ZmZlciBzdXJmYWNlIGFuZCBtYWtlIGl0IGN1cnJlbnQuCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIFN1cmZhY2VUZXh0dXJlSGVscGVyIGNyZWF0ZSgKLSAgICAg
IGZpbmFsIFN0cmluZyB0aHJlYWROYW1lLCBmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29u
dGV4dCkgewotICAgIGZpbmFsIEhhbmRsZXJUaHJlYWQgdGhyZWFkID0gbmV3IEhhbmRsZXJUaHJl
YWQodGhyZWFkTmFtZSk7Ci0gICAgdGhyZWFkLnN0YXJ0KCk7Ci0gICAgZmluYWwgSGFuZGxlciBo
YW5kbGVyID0gbmV3IEhhbmRsZXIodGhyZWFkLmdldExvb3BlcigpKTsKLQotICAgIC8vIFRoZSBv
bkZyYW1lQXZhaWxhYmxlKCkgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgU3VyZmFj
ZVRleHR1cmUgY3RvciB0aHJlYWQuIFNlZToKLSAgICAvLyBodHRwOi8vZ3JlcGNvZGUuY29tL2Zp
bGUvcmVwb3NpdG9yeS5ncmVwY29kZS5jb20vamF2YS9leHQvY29tLmdvb2dsZS5hbmRyb2lkL2Fu
ZHJvaWQvNS4xLjFfcjEvYW5kcm9pZC9ncmFwaGljcy9TdXJmYWNlVGV4dHVyZS5qYXZhIzE5NS4K
LSAgICAvLyBUaGVyZWZvcmUsIGluIG9yZGVyIHRvIGNvbnRyb2wgdGhlIGNhbGxiYWNrIHRocmVh
ZCBvbiBBUEkgbHZsIDwgMjEsIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlcgotICAgIC8vIGlzIGNv
bnN0cnVjdGVkIG9uIHRoZSB8aGFuZGxlcnwgdGhyZWFkLgotICAgIHJldHVybiBUaHJlYWRVdGls
cy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KGhhbmRsZXIsIG5ldyBDYWxsYWJsZTxTdXJm
YWNlVGV4dHVyZUhlbHBlcj4oKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdXJm
YWNlVGV4dHVyZUhlbHBlciBjYWxsKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIHJldHVy
biBuZXcgU3VyZmFjZVRleHR1cmVIZWxwZXIoc2hhcmVkQ29udGV4dCwgaGFuZGxlcik7Ci0gICAg
ICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dpbmcuZShU
QUcsIHRocmVhZE5hbWUgKyAiIGNyZWF0ZSBmYWlsdXJlIiwgZSk7Ci0gICAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgZmlu
YWwgSGFuZGxlciBoYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEVnbEJhc2UgZWdsQmFzZTsKLSAg
cHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZTsKLSAgcHJpdmF0ZSBm
aW5hbCBpbnQgb2VzVGV4dHVyZUlkOwotICBwcml2YXRlIFl1dkNvbnZlcnRlciB5dXZDb252ZXJ0
ZXI7Ci0KLSAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IGFjY2Vzc2VkIGZyb20gdGhlIHxo
YW5kbGVyfCB0aHJlYWQuCi0gIHByaXZhdGUgT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5l
ciBsaXN0ZW5lcjsKLSAgLy8gVGhlIHBvc3NpYmxlIHN0YXRlcyBvZiB0aGlzIGNsYXNzLgotICBw
cml2YXRlIGJvb2xlYW4gaGFzUGVuZGluZ1RleHR1cmUgPSBmYWxzZTsKLSAgcHJpdmF0ZSB2b2xh
dGlsZSBib29sZWFuIGlzVGV4dHVyZUluVXNlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBp
c1F1aXR0aW5nID0gZmFsc2U7Ci0gIC8vIHxwZW5kaW5nTGlzdGVuZXJ8IGlzIHNldCBpbiBzZXRM
aXN0ZW5lcigpIGFuZCB0aGUgcnVubmFibGUgaXMgcG9zdGVkIHRvIHRoZSBoYW5kbGVyIHRocmVh
ZC4KLSAgLy8gc2V0TGlzdGVuZXIoKSBpcyBub3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgYWdhaW4g
YmVmb3JlIHN0b3BMaXN0ZW5pbmcoKSwgc28gdGhpcyBpcyB0aHJlYWQgc2FmZS4KLSAgcHJpdmF0
ZSBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHBlbmRpbmdMaXN0ZW5lcjsKLSAgZmlu
YWwgUnVubmFibGUgc2V0TGlzdGVuZXJSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAi
U2V0dGluZyBsaXN0ZW5lciB0byAiICsgcGVuZGluZ0xpc3RlbmVyKTsKLSAgICAgIGxpc3RlbmVy
ID0gcGVuZGluZ0xpc3RlbmVyOwotICAgICAgcGVuZGluZ0xpc3RlbmVyID0gbnVsbDsKLSAgICAg
IC8vIE1heSBoYXZlIGEgcGVuZGluZyBmcmFtZSBmcm9tIHRoZSBwcmV2aW91cyBjYXB0dXJlIHNl
c3Npb24gLSBkcm9wIGl0LgotICAgICAgaWYgKGhhc1BlbmRpbmdUZXh0dXJlKSB7Ci0gICAgICAg
IC8vIENhbGxpbmcgdXBkYXRlVGV4SW1hZ2UoKSBpcyBuZWNjZXNzYXJ5IGluIG9yZGVyIHRvIHJl
Y2VpdmUgbmV3IGZyYW1lcy4KLSAgICAgICAgdXBkYXRlVGV4SW1hZ2UoKTsKLSAgICAgICAgaGFz
UGVuZGluZ1RleHR1cmUgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0
ZSBTdXJmYWNlVGV4dHVyZUhlbHBlcihFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwgSGFu
ZGxlciBoYW5kbGVyKSB7Ci0gICAgaWYgKGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkg
IT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigiU3VyZmFjZVRleHR1cmVIZWxwZXIgbXVzdCBiZSBjcmVhdGVkIG9uIHRoZSBo
YW5kbGVyIHRocmVhZCIpOwotICAgIH0KLSAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwotCi0g
ICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKHNoYXJlZENvbnRleHQsIEVnbEJhc2UuQ09ORklH
X1BJWEVMX0JVRkZFUik7Ci0gICAgdHJ5IHsKLSAgICAgIC8vIEJvdGggdGhlc2Ugc3RhdGVtZW50
cyBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gZmFpbCBvbiByYXJlIG9jY2FzaW9ucywgc2VlIEJVRz13
ZWJydGM6NTY4Mi4KLSAgICAgIGVnbEJhc2UuY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgpOwot
ICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRp
b24gZSkgewotICAgICAgLy8gQ2xlYW4gdXAgYmVmb3JlIHJldGhyb3dpbmcgdGhlIGV4Y2VwdGlv
bi4KLSAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAgaGFuZGxlci5nZXRMb29wZXIoKS5x
dWl0KCk7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLQotICAgIG9lc1RleHR1cmVJZCA9IEdsVXRp
bC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTKTsKLSAg
ICBzdXJmYWNlVGV4dHVyZSA9IG5ldyBTdXJmYWNlVGV4dHVyZShvZXNUZXh0dXJlSWQpOwotICAg
IHN1cmZhY2VUZXh0dXJlLnNldE9uRnJhbWVBdmFpbGFibGVMaXN0ZW5lcihuZXcgU3VyZmFjZVRl
eHR1cmUuT25GcmFtZUF2YWlsYWJsZUxpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0
dXJlKSB7Ci0gICAgICAgIGhhc1BlbmRpbmdUZXh0dXJlID0gdHJ1ZTsKLSAgICAgICAgdHJ5RGVs
aXZlclRleHR1cmVGcmFtZSgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAq
IFN0YXJ0IHRvIHN0cmVhbSB0ZXh0dXJlcyB0byB0aGUgZ2l2ZW4gfGxpc3RlbmVyfC4gSWYgeW91
IG5lZWQgdG8gY2hhbmdlIGxpc3RlbmVyLCB5b3UgbmVlZCB0bwotICAgKiBjYWxsIHN0b3BMaXN0
ZW5pbmcoKSBmaXJzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0TGlzdGVuaW5nKGZpbmFs
IE9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICBpZiAodGhp
cy5saXN0ZW5lciAhPSBudWxsIHx8IHRoaXMucGVuZGluZ0xpc3RlbmVyICE9IG51bGwpIHsKLSAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlN1cmZhY2VUZXh0dXJlSGVscGVy
IGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiIpOwotICAgIH0KLSAgICB0aGlzLnBlbmRp
bmdMaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgIGhhbmRsZXIucG9zdChzZXRMaXN0ZW5lclJ1bm5h
YmxlKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIGxpc3RlbmluZy4gVGhlIGxpc3RlbmVyIHNl
dCBpbiBzdGFydExpc3RlbmluZygpIGlzIGd1YXJhbnRlZGVkIHRvIG5vdCByZWNlaXZlIGFueSBt
b3JlCi0gICAqIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgY2FsbGJhY2tzIGFmdGVyIHRoaXMg
ZnVuY3Rpb24gcmV0dXJucy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3BMaXN0ZW5pbmcoKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BMaXN0ZW5pbmcoKSIpOwotICAgIGhhbmRsZXIucmVt
b3ZlQ2FsbGJhY2tzKHNldExpc3RlbmVyUnVubmFibGUpOwotICAgIFRocmVhZFV0aWxzLmludm9r
ZUF0RnJvbnRVbmludGVycnVwdGlibHkoaGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGxpc3RlbmVyID0g
bnVsbDsKLSAgICAgICAgcGVuZGluZ0xpc3RlbmVyID0gbnVsbDsKLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZSB0aGUgdW5kZXJseWluZyBTdXJmYWNlVGV4dHVy
ZS4gVGhlIFN1cmZhY2VUZXh0dXJlIHNob3VsZCBiZSBwYXNzZWQgaW4gdG8gYSB2aWRlbwotICAg
KiBwcm9kdWNlciBzdWNoIGFzIGEgY2FtZXJhIG9yIGRlY29kZXIuCi0gICAqLwotICBwdWJsaWMg
U3VyZmFjZVRleHR1cmUgZ2V0U3VyZmFjZVRleHR1cmUoKSB7Ci0gICAgcmV0dXJuIHN1cmZhY2VU
ZXh0dXJlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHJpZXZlIHRoZSBoYW5kbGVyIHRoYXQgY2Fs
bHMgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4gVGhpcyBoYW5kbGVyIGlzIHZhbGlkIHVudGls
Ci0gICAqIGRpc3Bvc2UoKSBpcyBjYWxsZWQuCi0gICAqLwotICBwdWJsaWMgSGFuZGxlciBnZXRI
YW5kbGVyKCkgewotICAgIHJldHVybiBoYW5kbGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGwg
dGhpcyBmdW5jdGlvbiB0byBzaWduYWwgdGhhdCB5b3UgYXJlIGRvbmUgd2l0aCB0aGUgZnJhbWUg
cmVjZWl2ZWQgaW4KLSAgICogb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4gT25seSBvbmUgdGV4
dHVyZSBmcmFtZSBjYW4gYmUgaW4gZmxpZ2h0IGF0IG9uY2UsIHNvIHlvdSBtdXN0IGNhbGwKLSAg
ICogdGhpcyBmdW5jdGlvbiBpbiBvcmRlciB0byByZWNlaXZlIGEgbmV3IGZyYW1lLgotICAgKi8K
LSAgcHVibGljIHZvaWQgcmV0dXJuVGV4dHVyZUZyYW1lKCkgewotICAgIGhhbmRsZXIucG9zdChu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgaXNUZXh0dXJlSW5Vc2UgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzUXVpdHRp
bmcpIHsKLSAgICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
dHJ5RGVsaXZlclRleHR1cmVGcmFtZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0g
IH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1RleHR1cmVJblVzZSgpIHsKLSAgICByZXR1cm4gaXNU
ZXh0dXJlSW5Vc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbCBkaXNjb25uZWN0KCkgdG8gc3Rv
cCByZWNlaXZpbmcgZnJhbWVzLiBPcGVuR0wgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBhbmQgdGhl
IGhhbmRsZXIgaXMKLSAgICogc3RvcHBlZCB3aGVuIHRoZSB0ZXh0dXJlIGZyYW1lIGhhcyBiZWVu
IHJldHVybmVkIGJ5IGEgY2FsbCB0byByZXR1cm5UZXh0dXJlRnJhbWUoKS4gWW91IGFyZQotICAg
KiBndWFyYW50ZWVkIHRvIG5vdCByZWNlaXZlIGFueSBtb3JlIG9uVGV4dHVyZUZyYW1lQXZhaWxh
YmxlKCkgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotICAgKi8KLSAgcHVibGljIHZvaWQg
ZGlzcG9zZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSgpIik7Ci0gICAgVGhyZWFk
VXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShoYW5kbGVyLCBuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
aXNRdWl0dGluZyA9IHRydWU7Ci0gICAgICAgIGlmICghaXNUZXh0dXJlSW5Vc2UpIHsKLSAgICAg
ICAgICByZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRleHR1cmVUb1lVVihmaW5hbCBCeXRlQnVmZmVyIGJ1ZiwgZmluYWwgaW50IHdp
ZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LAotICAgICAgZmluYWwgaW50IHN0cmlkZSwgZmluYWwgaW50
IHRleHR1cmVJZCwgZmluYWwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgpIHsKLSAgICBpZiAodGV4
dHVyZUlkICE9IG9lc1RleHR1cmVJZCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbigidGV4dHVyZVRvQnl0ZUJ1ZmZlciBjYWxsZWQgd2l0aCB1bmV4cGVjdGVkIHRleHR1
cmVJZCIpOwotICAgIH0KLQotICAgIFRocmVhZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVycnVw
dGlibHkoaGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICh5dXZDb252ZXJ0ZXIgPT0gbnVsbCkgewot
ICAgICAgICAgIHl1dkNvbnZlcnRlciA9IG5ldyBZdXZDb252ZXJ0ZXIoKTsKLSAgICAgICAgfQot
ICAgICAgICB5dXZDb252ZXJ0ZXIuY29udmVydChidWYsIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSwg
dGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHVwZGF0ZVRleEltYWdlKCkgewotICAgIC8vIFN1cmZhY2VUZXh0dXJlLnVw
ZGF0ZVRleEltYWdlIGFwcGFyZW50bHkgY2FuIGNvbXBldGUgYW5kIGRlYWRsb2NrIHdpdGggZWds
U3dhcEJ1ZmZlcnMsCi0gICAgLy8gYXMgb2JzZXJ2ZWQgb24gTmV4dXMgNS4gVGhlcmVmb3JlLCBz
eW5jaHJvbml6ZSBpdCB3aXRoIHRoZSBFR0wgZnVuY3Rpb25zLgotICAgIC8vIFNlZSBodHRwczov
L2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTcwMiBmb3IgbW9y
ZSBpbmZvLgotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBzdXJmYWNl
VGV4dHVyZS51cGRhdGVUZXhJbWFnZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB0
cnlEZWxpdmVyVGV4dHVyZUZyYW1lKCkgewotICAgIGlmIChoYW5kbGVyLmdldExvb3BlcigpLmdl
dFRocmVhZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZC4iKTsKLSAgICB9Ci0gICAgaWYgKGlz
UXVpdHRpbmcgfHwgIWhhc1BlbmRpbmdUZXh0dXJlIHx8IGlzVGV4dHVyZUluVXNlIHx8IGxpc3Rl
bmVyID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaXNUZXh0dXJlSW5Vc2Ug
PSB0cnVlOwotICAgIGhhc1BlbmRpbmdUZXh0dXJlID0gZmFsc2U7Ci0KLSAgICB1cGRhdGVUZXhJ
bWFnZSgpOwotCi0gICAgZmluYWwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXggPSBuZXcgZmxvYXRb
MTZdOwotICAgIHN1cmZhY2VUZXh0dXJlLmdldFRyYW5zZm9ybU1hdHJpeCh0cmFuc2Zvcm1NYXRy
aXgpOwotICAgIGZpbmFsIGxvbmcgdGltZXN0YW1wTnMgPSAoQnVpbGQuVkVSU0lPTi5TREtfSU5U
ID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSUNFX0NSRUFNX1NBTkRXSUNIKQotICAgICAgICA/IHN1
cmZhY2VUZXh0dXJlLmdldFRpbWVzdGFtcCgpCi0gICAgICAgIDogVGltZVVuaXQuTUlMTElTRUNP
TkRTLnRvTmFub3MoU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwotICAgIGxpc3RlbmVy
Lm9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LCB0
aW1lc3RhbXBOcyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBpZiAo
aGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSAhPSBUaHJlYWQuY3VycmVudFRocmVhZCgp
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJlYWQu
Iik7Ci0gICAgfQotICAgIGlmIChpc1RleHR1cmVJblVzZSB8fCAhaXNRdWl0dGluZykgewotICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5leHBlY3RlZCByZWxlYXNlLiIp
OwotICAgIH0KLSAgICBpZiAoeXV2Q29udmVydGVyICE9IG51bGwpIHsKLSAgICAgIHl1dkNvbnZl
cnRlci5yZWxlYXNlKCk7Ci0gICAgfQotICAgIEdMRVMyMC5nbERlbGV0ZVRleHR1cmVzKDEsIG5l
dyBpbnRbXSB7b2VzVGV4dHVyZUlkfSwgMCk7Ci0gICAgc3VyZmFjZVRleHR1cmUucmVsZWFzZSgp
OwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgIGhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdCgp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXIuamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXIuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRl
cmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRl
eHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNlcHRp
b247Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLnV0aWwu
QXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1wb3J0
IGFuZHJvaWQudmlldy5TdXJmYWNlVmlldzsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5D
b3VudERvd25MYXRjaDsKLQotLyoqCi0gKiBJbXBsZW1lbnRzIG9yZy53ZWJydGMuVmlkZW9SZW5k
ZXJlci5DYWxsYmFja3MgYnkgZGlzcGxheWluZyB0aGUgdmlkZW8gc3RyZWFtIG9uIGEgU3VyZmFj
ZVZpZXcuCi0gKiByZW5kZXJGcmFtZSgpIGlzIGFzeW5jaHJvbm91cyB0byBhdm9pZCBibG9ja2lu
ZyB0aGUgY2FsbGluZyB0aHJlYWQuCi0gKiBUaGlzIGNsYXNzIGlzIHRocmVhZCBzYWZlIGFuZCBo
YW5kbGVzIGFjY2VzcyBmcm9tIHBvdGVudGlhbGx5IGZvdXIgZGlmZmVyZW50IHRocmVhZHM6Ci0g
KiBJbnRlcmFjdGlvbiBmcm9tIHRoZSBtYWluIGFwcCBpbiBpbml0LCByZWxlYXNlLCBzZXRNaXJy
b3IsIGFuZCBzZXRTY2FsaW5ndHlwZS4KLSAqIEludGVyYWN0aW9uIGZyb20gQysrIHJ0Yzo6Vmlk
ZW9TaW5rSW50ZXJmYWNlIGluIHJlbmRlckZyYW1lLgotICogSW50ZXJhY3Rpb24gZnJvbSB0aGUg
QWN0aXZpdHkgbGlmZWN5Y2xlIGluIHN1cmZhY2VDcmVhdGVkLCBzdXJmYWNlQ2hhbmdlZCwgYW5k
IHN1cmZhY2VEZXN0cm95ZWQuCi0gKiBJbnRlcmFjdGlvbiB3aXRoIHRoZSBsYXlvdXQgZnJhbWV3
b3JrIGluIG9uTWVhc3VyZSBhbmQgb25TaXplQ2hhbmdlZC4KLSAqLwotcHVibGljIGNsYXNzIFN1
cmZhY2VWaWV3UmVuZGVyZXIKLSAgICBleHRlbmRzIFN1cmZhY2VWaWV3IGltcGxlbWVudHMgU3Vy
ZmFjZUhvbGRlci5DYWxsYmFjaywgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1cmZhY2VWaWV3UmVuZGVyZXIiOwotCi0gIC8v
IENhY2hlZCByZXNvdXJjZSBuYW1lLgotICBwcml2YXRlIGZpbmFsIFN0cmluZyByZXNvdXJjZU5h
bWU7Ci0gIHByaXZhdGUgZmluYWwgUmVuZGVyZXJDb21tb24uVmlkZW9MYXlvdXRNZWFzdXJlIHZp
ZGVvTGF5b3V0TWVhc3VyZSA9Ci0gICAgICBuZXcgUmVuZGVyZXJDb21tb24uVmlkZW9MYXlvdXRN
ZWFzdXJlKCk7Ci0gIHByaXZhdGUgZmluYWwgRWdsUmVuZGVyZXIgZWdsUmVuZGVyZXI7Ci0KLSAg
Ly8gQ2FsbGJhY2sgZm9yIHJlcG9ydGluZyByZW5kZXJlciBldmVudHMuIFJlYWQtb25seSBhZnRl
ciBpbml0aWxpemF0aW9uIHNvIG5vIGxvY2sgcmVxdWlyZWQuCi0gIHByaXZhdGUgUmVuZGVyZXJD
b21tb24uUmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHM7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBP
YmplY3QgbGF5b3V0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRmly
c3RGcmFtZVJlbmRlcmVkOwotICBwcml2YXRlIGludCByb3RhdGVkRnJhbWVXaWR0aDsKLSAgcHJp
dmF0ZSBpbnQgcm90YXRlZEZyYW1lSGVpZ2h0OwotICBwcml2YXRlIGludCBmcmFtZVJvdGF0aW9u
OwotCi0gIC8qKgotICAgKiBTdGFuZGFyZCBWaWV3IGNvbnN0cnVjdG9yLiBJbiBvcmRlciB0byBy
ZW5kZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBmaXJzdCBjYWxsIGluaXQoKS4KLSAgICovCi0gIHB1
YmxpYyBTdXJmYWNlVmlld1JlbmRlcmVyKENvbnRleHQgY29udGV4dCkgewotICAgIHN1cGVyKGNv
bnRleHQpOwotICAgIHRoaXMucmVzb3VyY2VOYW1lID0gZ2V0UmVzb3VyY2VOYW1lKCk7Ci0gICAg
ZWdsUmVuZGVyZXIgPSBuZXcgRWdsUmVuZGVyZXIocmVzb3VyY2VOYW1lKTsKLSAgICBnZXRIb2xk
ZXIoKS5hZGRDYWxsYmFjayh0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdGFuZGFyZCBWaWV3
IGNvbnN0cnVjdG9yLiBJbiBvcmRlciB0byByZW5kZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBmaXJz
dCBjYWxsIGluaXQoKS4KLSAgICovCi0gIHB1YmxpYyBTdXJmYWNlVmlld1JlbmRlcmVyKENvbnRl
eHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgc3VwZXIoY29udGV4dCwgYXR0
cnMpOwotICAgIHRoaXMucmVzb3VyY2VOYW1lID0gZ2V0UmVzb3VyY2VOYW1lKCk7Ci0gICAgZWds
UmVuZGVyZXIgPSBuZXcgRWdsUmVuZGVyZXIocmVzb3VyY2VOYW1lKTsKLSAgICBnZXRIb2xkZXIo
KS5hZGRDYWxsYmFjayh0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplIHRoaXMg
Y2xhc3MsIHNoYXJpbmcgcmVzb3VyY2VzIHdpdGggfHNoYXJlZENvbnRleHR8LiBJdCBpcyBhbGxv
d2VkIHRvIGNhbGwgaW5pdCgpIHRvCi0gICAqIHJlaW5pdGlhbGl6ZSB0aGUgcmVuZGVyZXIgYWZ0
ZXIgYSBwcmV2aW91cyBpbml0KCkvcmVsZWFzZSgpIGN5Y2xlLgotICAgKi8KLSAgcHVibGljIHZv
aWQgaW5pdChFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwgUmVuZGVyZXJDb21tb24uUmVu
ZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHMpIHsKLSAgICBpbml0KHNoYXJlZENvbnRleHQsIHJl
bmRlcmVyRXZlbnRzLCBFZ2xCYXNlLkNPTkZJR19QTEFJTiwgbmV3IEdsUmVjdERyYXdlcigpKTsK
LSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplIHRoaXMgY2xhc3MsIHNoYXJpbmcgcmVzb3Vy
Y2VzIHdpdGggfHNoYXJlZENvbnRleHR8LiBUaGUgY3VzdG9tIHxkcmF3ZXJ8IHdpbGwgYmUgdXNl
ZAotICAgKiBmb3IgZHJhd2luZyBmcmFtZXMgb24gdGhlIEVHTFN1cmZhY2UuIFRoaXMgY2xhc3Mg
aXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgcmVsZWFzZSgpIG9uCi0gICAqIHxkcmF3ZXJ8LiBJ
dCBpcyBhbGxvd2VkIHRvIGNhbGwgaW5pdCgpIHRvIHJlaW5pdGlhbGl6ZSB0aGUgcmVuZGVyZXIg
YWZ0ZXIgYSBwcmV2aW91cwotICAgKiBpbml0KCkvcmVsZWFzZSgpIGN5Y2xlLgotICAgKi8KLSAg
cHVibGljIHZvaWQgaW5pdChmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwKLSAg
ICAgIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzLCBmaW5hbCBp
bnRbXSBjb25maWdBdHRyaWJ1dGVzLAotICAgICAgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJh
d2VyKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIHRoaXMu
cmVuZGVyZXJFdmVudHMgPSByZW5kZXJlckV2ZW50czsKLSAgICBzeW5jaHJvbml6ZWQgKGxheW91
dExvY2spIHsKLSAgICAgIHJvdGF0ZWRGcmFtZVdpZHRoID0gMDsKLSAgICAgIHJvdGF0ZWRGcmFt
ZUhlaWdodCA9IDA7Ci0gICAgICBmcmFtZVJvdGF0aW9uID0gMDsKLSAgICB9Ci0gICAgZWdsUmVu
ZGVyZXIuaW5pdChzaGFyZWRDb250ZXh0LCBjb25maWdBdHRyaWJ1dGVzLCBkcmF3ZXIpOwotICB9
Ci0KLSAgLyoqCi0gICAqIEJsb2NrIHVudGlsIGFueSBwZW5kaW5nIGZyYW1lIGlzIHJldHVybmVk
IGFuZCBhbGwgR0wgcmVzb3VyY2VzIHJlbGVhc2VkLCBldmVuIGlmIGFuIGludGVycnVwdAotICAg
KiBvY2N1cnMuIElmIGFuIGludGVycnVwdCBvY2N1cnMgZHVyaW5nIHJlbGVhc2UoKSwgdGhlIGlu
dGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0LiBUaGlzIGZ1bmN0aW9uCi0gICAqIHNob3VsZCBiZSBj
YWxsZWQgYmVmb3JlIHRoZSBBY3Rpdml0eSBpcyBkZXN0cm95ZWQgYW5kIHRoZSBFR0xDb250ZXh0
IGlzIHN0aWxsIHZhbGlkLiBJZiB5b3UKLSAgICogZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uLCB0
aGUgR0wgcmVzb3VyY2VzIG1pZ2h0IGxlYWsuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWxlYXNl
KCkgewotICAgIGVnbFJlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZXQg
aWYgdGhlIHZpZGVvIHN0cmVhbSBzaG91bGQgYmUgbWlycm9yZWQgb3Igbm90LgotICAgKi8KLSAg
cHVibGljIHZvaWQgc2V0TWlycm9yKGZpbmFsIGJvb2xlYW4gbWlycm9yKSB7Ci0gICAgZWdsUmVu
ZGVyZXIuc2V0TWlycm9yKG1pcnJvcik7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGhvdyB0aGUg
dmlkZW8gd2lsbCBmaWxsIHRoZSBhbGxvd2VkIGxheW91dCBhcmVhLgotICAgKi8KLSAgcHVibGlj
IHZvaWQgc2V0U2NhbGluZ1R5cGUoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5
cGUpIHsKLSAgICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgdmlkZW9M
YXlvdXRNZWFzdXJlLnNldFNjYWxpbmdUeXBlKHNjYWxpbmdUeXBlKTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHNldFNjYWxpbmdUeXBlKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdU
eXBlTWF0Y2hPcmllbnRhdGlvbiwKLSAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbikgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNP
bk1haW5UaHJlYWQoKTsKLSAgICB2aWRlb0xheW91dE1lYXN1cmUuc2V0U2NhbGluZ1R5cGUoc2Nh
bGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uLCBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb24p
OwotICB9Ci0KLSAgLy8gVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgaW50ZXJmYWNlLgotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUg
ZnJhbWUpIHsKLSAgICB1cGRhdGVGcmFtZURpbWVuc2lvbnNBbmRSZXBvcnRFdmVudHMoZnJhbWUp
OwotICAgIGVnbFJlbmRlcmVyLnJlbmRlckZyYW1lKGZyYW1lKTsKLSAgfQotCi0gIC8vIFZpZXcg
bGF5b3V0IGludGVyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uTWVhc3Vy
ZShpbnQgd2lkdGhTcGVjLCBpbnQgaGVpZ2h0U3BlYykgewotICAgIFRocmVhZFV0aWxzLmNoZWNr
SXNPbk1haW5UaHJlYWQoKTsKLSAgICBmaW5hbCBQb2ludCBzaXplOwotICAgIHN5bmNocm9uaXpl
ZCAobGF5b3V0TG9jaykgewotICAgICAgc2l6ZSA9Ci0gICAgICAgICAgdmlkZW9MYXlvdXRNZWFz
dXJlLm1lYXN1cmUod2lkdGhTcGVjLCBoZWlnaHRTcGVjLCByb3RhdGVkRnJhbWVXaWR0aCwgcm90
YXRlZEZyYW1lSGVpZ2h0KTsKLSAgICB9Ci0gICAgc2V0TWVhc3VyZWREaW1lbnNpb24oc2l6ZS54
LCBzaXplLnkpOwotICAgIGxvZ0QoIm9uTWVhc3VyZSgpLiBOZXcgc2l6ZTogIiArIHNpemUueCAr
ICJ4IiArIHNpemUueSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25M
YXlvdXQoYm9vbGVhbiBjaGFuZ2VkLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQg
Ym90dG9tKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIGVn
bFJlbmRlcmVyLnNldExheW91dEFzcGVjdFJhdGlvKChyaWdodCAtIGxlZnQpIC8gKGZsb2F0KSAo
Ym90dG9tIC0gdG9wKSk7Ci0gIH0KLQotICAvLyBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIGludGVy
ZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKGZpbmFsIFN1
cmZhY2VIb2xkZXIgaG9sZGVyKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVh
ZCgpOwotICAgIGVnbFJlbmRlcmVyLmNyZWF0ZUVnbFN1cmZhY2UoaG9sZGVyLmdldFN1cmZhY2Uo
KSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3VyZmFjZURlc3Ryb3llZChT
dXJmYWNlSG9sZGVyIGhvbGRlcikgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJl
YWQoKTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBjb21wbGV0aW9uTGF0Y2ggPSBuZXcgQ291
bnREb3duTGF0Y2goMSk7Ci0gICAgZWdsUmVuZGVyZXIucmVsZWFzZUVnbFN1cmZhY2UobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIGNvbXBsZXRpb25MYXRjaC5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAg
ICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShjb21wbGV0aW9uTGF0Y2gpOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VDaGFuZ2VkKFN1cmZhY2VIb2xk
ZXIgaG9sZGVyLCBpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBUaHJl
YWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZWdsUmVuZGVyZXIuc3VyZmFjZVNp
emVDaGFuZ2VkKHdpZHRoLCBoZWlnaHQpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UmVz
b3VyY2VOYW1lKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gZ2V0UmVzb3VyY2VzKCkuZ2V0
UmVzb3VyY2VFbnRyeU5hbWUoZ2V0SWQoKSkgKyAiOiAiOwotICAgIH0gY2F0Y2ggKE5vdEZvdW5k
RXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gIH0KLQotICAvLyBVcGRh
dGUgZnJhbWUgZGltZW5zaW9ucyBhbmQgcmVwb3J0IGFueSBjaGFuZ2VzIHRvIHxyZW5kZXJlckV2
ZW50c3wuCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVGcmFtZURpbWVuc2lvbnNBbmRSZXBvcnRFdmVu
dHMoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGxh
eW91dExvY2spIHsKLSAgICAgIGlmICghaXNGaXJzdEZyYW1lUmVuZGVyZWQpIHsKLSAgICAgICAg
aXNGaXJzdEZyYW1lUmVuZGVyZWQgPSB0cnVlOwotICAgICAgICBsb2dEKCJSZXBvcnRpbmcgZmly
c3QgcmVuZGVyZWQgZnJhbWUuIik7Ci0gICAgICAgIGlmIChyZW5kZXJlckV2ZW50cyAhPSBudWxs
KSB7Ci0gICAgICAgICAgcmVuZGVyZXJFdmVudHMub25GaXJzdEZyYW1lUmVuZGVyZWQoKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHJvdGF0ZWRGcmFtZVdpZHRoICE9IGZyYW1lLnJv
dGF0ZWRXaWR0aCgpIHx8IHJvdGF0ZWRGcmFtZUhlaWdodCAhPSBmcmFtZS5yb3RhdGVkSGVpZ2h0
KCkKLSAgICAgICAgICB8fCBmcmFtZVJvdGF0aW9uICE9IGZyYW1lLnJvdGF0aW9uRGVncmVlKSB7
Ci0gICAgICAgIGxvZ0QoIlJlcG9ydGluZyBmcmFtZSByZXNvbHV0aW9uIGNoYW5nZWQgdG8gIiAr
IGZyYW1lLndpZHRoICsgIngiICsgZnJhbWUuaGVpZ2h0Ci0gICAgICAgICAgICArICIgd2l0aCBy
b3RhdGlvbiAiICsgZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgICAgICBpZiAocmVuZGVyZXJF
dmVudHMgIT0gbnVsbCkgewotICAgICAgICAgIHJlbmRlcmVyRXZlbnRzLm9uRnJhbWVSZXNvbHV0
aW9uQ2hhbmdlZChmcmFtZS53aWR0aCwgZnJhbWUuaGVpZ2h0LCBmcmFtZS5yb3RhdGlvbkRlZ3Jl
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcm90YXRlZEZyYW1lV2lkdGggPSBmcmFtZS5yb3RhdGVk
V2lkdGgoKTsKLSAgICAgICAgcm90YXRlZEZyYW1lSGVpZ2h0ID0gZnJhbWUucm90YXRlZEhlaWdo
dCgpOwotICAgICAgICBmcmFtZVJvdGF0aW9uID0gZnJhbWUucm90YXRpb25EZWdyZWU7Ci0gICAg
ICAgIHBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIHJlcXVlc3RMYXlvdXQoKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBsb2dEKFN0cmluZyBzdHJpbmcpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCByZXNvdXJjZU5hbWUg
KyBzdHJpbmcpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIu
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyLmphdmEJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci0KLWlt
cG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLy8gQmFzZSBpbnRlcmZhY2UgZm9yIGFsbCBWaWRlb0Nh
cHR1cmVycyB0byBpbXBsZW1lbnQuCi1wdWJsaWMgaW50ZXJmYWNlIFZpZGVvQ2FwdHVyZXIgewot
ICAvLyBJbnRlcmZhY2UgdXNlZCBmb3IgcHJvdmlkaW5nIGNhbGxiYWNrcyB0byBhbiBvYnNlcnZl
ci4KLSAgcHVibGljIGludGVyZmFjZSBDYXB0dXJlck9ic2VydmVyIHsKLSAgICAvLyBOb3RpZnkg
aWYgdGhlIGNhbWVyYSBoYXZlIGJlZW4gc3RhcnRlZCBzdWNjZXNzZnVsbHkgb3Igbm90LgotICAg
IC8vIENhbGxlZCBvbiBhIEphdmEgdGhyZWFkIG93bmVkIGJ5IFZpZGVvQ2FwdHVyZXIuCi0gICAg
dm9pZCBvbkNhcHR1cmVyU3RhcnRlZChib29sZWFuIHN1Y2Nlc3MpOwotICAgIHZvaWQgb25DYXB0
dXJlclN0b3BwZWQoKTsKLQotICAgIC8vIERlbGl2ZXJzIGEgY2FwdHVyZWQgZnJhbWUuIENhbGxl
ZCBvbiBhIEphdmEgdGhyZWFkIG93bmVkIGJ5IFZpZGVvQ2FwdHVyZXIuCi0gICAgdm9pZCBvbkJ5
dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBieXRlW10gZGF0YSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZVN0YW1wKTsKLQotICAgIC8vIERlbGl2
ZXJzIGEgY2FwdHVyZWQgZnJhbWUgaW4gYSB0ZXh0dXJlIHdpdGggaWQgfG9lc1RleHR1cmVJZHwu
IENhbGxlZCBvbiBhIEphdmEgdGhyZWFkCi0gICAgLy8gb3duZWQgYnkgVmlkZW9DYXB0dXJlci4K
LSAgICB2b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwKLSAgICAgICAgaW50IHJv
dGF0aW9uLCBsb25nIHRpbWVzdGFtcCk7Ci0gIH0KLQotICAvLyBBbiBpbXBsZW1lbnRhdGlvbiBv
ZiBDYXB0dXJlck9ic2VydmVyIHRoYXQgZm9yd2FyZHMgYWxsIGNhbGxzIGZyb20KLSAgLy8gSmF2
YSB0byB0aGUgQyBsYXllci4KLSAgc3RhdGljIGNsYXNzIEFuZHJvaWRWaWRlb1RyYWNrU291cmNl
T2JzZXJ2ZXIgaW1wbGVtZW50cyBDYXB0dXJlck9ic2VydmVyIHsKLSAgICAvLyBQb2ludGVyIHRv
IFZpZGVvVHJhY2tTb3VyY2VQcm94eSBwcm94eWluZyBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZS4K
LSAgICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlU291cmNlOwotCi0gICAgcHVibGljIEFuZHJv
aWRWaWRlb1RyYWNrU291cmNlT2JzZXJ2ZXIobG9uZyBuYXRpdmVTb3VyY2UpIHsKLSAgICAgIHRo
aXMubmF0aXZlU291cmNlID0gbmF0aXZlU291cmNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdGFydGVkKGJvb2xlYW4gc3VjY2VzcykgewotICAg
ICAgbmF0aXZlQ2FwdHVyZXJTdGFydGVkKG5hdGl2ZVNvdXJjZSwgc3VjY2Vzcyk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJlclN0b3BwZWQoKSB7Ci0g
ICAgICBuYXRpdmVDYXB0dXJlclN0b3BwZWQobmF0aXZlU291cmNlKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAg
ICAgICBieXRlW10gZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb24sIGxv
bmcgdGltZVN0YW1wKSB7Ci0gICAgICBuYXRpdmVPbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAot
ICAgICAgICAgIG5hdGl2ZVNvdXJjZSwgZGF0YSwgZGF0YS5sZW5ndGgsIHdpZHRoLCBoZWlnaHQs
IHJvdGF0aW9uLCB0aW1lU3RhbXApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQg
b2VzVGV4dHVyZUlkLAotICAgICAgICBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0
aW9uLCBsb25nIHRpbWVzdGFtcCkgewotICAgICAgbmF0aXZlT25UZXh0dXJlRnJhbWVDYXB0dXJl
ZCgKLSAgICAgICAgICBuYXRpdmVTb3VyY2UsIHdpZHRoLCBoZWlnaHQsIG9lc1RleHR1cmVJZCwg
dHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wKTsKLSAgICB9Ci0KLSAgICBwcml2
YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhcHR1cmVyU3RhcnRlZChsb25nIG5hdGl2ZVNvdXJjZSwg
Ym9vbGVhbiBzdWNjZXNzKTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhcHR1cmVy
U3RvcHBlZChsb25nIG5hdGl2ZVNvdXJjZSk7Ci0gICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRp
dmVPbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKGxvbmcgbmF0aXZlU291cmNlLCBieXRlW10gZGF0
YSwgaW50IGxlbmd0aCwKLSAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRp
b24sIGxvbmcgdGltZVN0YW1wKTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU9uVGV4
dHVyZUZyYW1lQ2FwdHVyZWQobG9uZyBuYXRpdmVTb3VyY2UsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwKLSAgICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGlu
dCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgZnVu
Y3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBjYW1lcmEgdGhyZWFkLCB0aGUgYW5kcm9p
ZCBhcHBsaWNhdGlvbiBjb250ZXh0LCBhbmQgdGhlCi0gICAqIGNhcHR1cmUgb2JzZXJ2ZXIuIEl0
IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSBhbmQgYmVmb3JlIGFueSBzdGFydENhcHR1cmUoKSBy
ZXF1ZXN0LiBUaGUKLSAgICogY2FtZXJhIHRocmVhZCBpcyBndWFyYW50ZWVkIHRvIGJlIHZhbGlk
IHVudGlsIGRpc3Bvc2UoKSBpcyBjYWxsZWQuIElmIHRoZSBWaWRlb0NhcHR1cmVyIHdhbnRzCi0g
ICAqIHRvIGRlbGl2ZXIgdGV4dHVyZSBmcmFtZXMsIGl0IHNob3VsZCBkbyB0aGlzIGJ5IHJlbmRl
cmluZyBvbiB0aGUgU3VyZmFjZVRleHR1cmUgaW4KLSAgICogfHN1cmZhY2VUZXh0dXJlSGVscGVy
fCwgcmVnaXN0ZXIgaXRzZWxmIGFzIGEgbGlzdGVuZXIsIGFuZCBmb3J3YXJkIHRoZSB0ZXh0dXJl
IGZyYW1lcyB0bwotICAgKiBDYXB0dXJlck9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQo
KS4KLSAgICovCi0gIHZvaWQgaW5pdGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNl
VGV4dHVyZUhlbHBlciwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYXB0dXJl
ck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIpOwotCi0gIC8qKgotICAgKiBTdGFydCBjYXB0dXJp
bmcgZnJhbWVzIGluIGEgZm9ybWF0IHRoYXQgaXMgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gfHdp
ZHRofCB4IHxoZWlnaHR8IGFuZAotICAgKiB8ZnJhbWVyYXRlfC4KLSAgICovCi0gIHZvaWQgc3Rh
cnRDYXB0dXJlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSk7Ci0KLSAgLyoq
Ci0gICAqIFN0b3AgY2FwdHVyaW5nLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBibG9jayB1bnRpbCBj
YXB0dXJlIGlzIGFjdHVhbGx5IHN0b3BwZWQuCi0gICAqLwotICB2b2lkIHN0b3BDYXB0dXJlKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uOwotCi0gIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1h
dChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpOwotCi0gIC8qKgotICAgKiBQ
ZXJmb3JtIGFueSBmaW5hbCBjbGVhbnVwIGhlcmUuIE5vIG1vcmUgY2FwdHVyaW5nIHdpbGwgYmUg
ZG9uZSBhZnRlciB0aGlzIGNhbGwuCi0gICAqLwotICB2b2lkIGRpc3Bvc2UoKTsKLQotICAvKioK
LSAgICogQHJldHVybiB0cnVlIGlmLWFuZC1vbmx5LWlmIHRoaXMgaXMgYSBzY3JlZW4gY2FwdHVy
ZXIuCi0gICAqLwotICBib29sZWFuIGlzU2NyZWVuY2FzdCgpOwotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9WaWRlb0NhcHR1cmVyQW5kcm9pZC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvVmlkZW9DYXB0dXJlckFuZHJvaWQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyQW5kcm9pZC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsNjUwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3Mu
SGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQu
dmlldy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0
IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9y
dCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZh
LnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRpbC5j
b25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJh
RW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5NZXRy
aWNzLkhpc3RvZ3JhbTsKLQotLy8gQW5kcm9pZCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBW
aWRlb0NhcHR1cmVyLgotLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBjYW4gYmUgY3JlYXRl
ZCBieSBhbiBhcHBsaWNhdGlvbiB1c2luZwotLy8gVmlkZW9DYXB0dXJlckFuZHJvaWQuY3JlYXRl
KCk7Ci0vLyBUaGlzIGNsYXNzIGV4dGVuZHMgVmlkZW9DYXB0dXJlciB3aXRoIGEgbWV0aG9kIHRv
IGVhc2lseSBzd2l0Y2ggYmV0d2VlbiB0aGUKLS8vIGZyb250IGFuZCBiYWNrIGNhbWVyYS4gSXQg
YWxzbyBwcm92aWRlcyBtZXRob2RzIGZvciBlbnVtZXJhdGluZyB2YWxpZCBkZXZpY2UKLS8vIG5h
bWVzLgotLy8KLS8vIFRocmVhZGluZyBub3RlczogdGhpcyBjbGFzcyBpcyBjYWxsZWQgZnJvbSBD
KysgY29kZSwgQW5kcm9pZCBDYW1lcmEgY2FsbGJhY2tzLCBhbmQgcG9zc2libHkKLS8vIGFyYml0
cmFyeSBKYXZhIHRocmVhZHMuIEFsbCBwdWJsaWMgZW50cnkgcG9pbnRzIGFyZSB0aHJlYWQgc2Fm
ZSwgYW5kIGRlbGVnYXRlIHRoZSB3b3JrIHRvIHRoZQotLy8gY2FtZXJhIHRocmVhZC4gVGhlIGlu
dGVybmFsICpPbkNhbWVyYVRocmVhZCgpIG1ldGhvZHMgbXVzdCBjaGVjayB8Y2FtZXJhfCBmb3Ig
bnVsbCB0byBjaGVjayBpZgotLy8gdGhlIGNhbWVyYSBoYXMgYmVlbiBzdG9wcGVkLgotLy8KLS8v
IFRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBvbmx5IGJlIHVzZWQgaWYgeW91IG1h
bnVhbGx5IGNyZWF0ZSBpdC4gUGxlYXNlIHVzZQotLy8gQ2FtZXJhMUNhcHR1cmVyIGluc3RlYWQu
Ci1ARGVwcmVjYXRlZAotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBj
bGFzcyBWaWRlb0NhcHR1cmVyQW5kcm9pZAotICAgIGltcGxlbWVudHMgQ2FtZXJhVmlkZW9DYXB0
dXJlciwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUHJldmlld0NhbGxiYWNrLAotICAgICAgICAg
ICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5l
ciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVmlkZW9DYXB0dXJlckFu
ZHJvaWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FNRVJBX1NUT1BfVElNRU9VVF9N
UyA9IDcwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSB2aWRlb0NhcHR1cmVy
QW5kcm9pZFN0YXJ0VGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3Vu
dHMoIldlYlJUQy5BbmRyb2lkLlZpZGVvQ2FwdHVyZXJBbmRyb2lkLlN0YXJ0VGltZU1zIiwgMSwg
MTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIHZpZGVvQ2FwdHVy
ZXJBbmRyb2lkU3RvcFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRlQ291
bnRzKCJXZWJSVEMuQW5kcm9pZC5WaWRlb0NhcHR1cmVyQW5kcm9pZC5TdG9wVGltZU1zIiwgMSwg
MTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIHZpZGVvQ2FwdHVy
ZXJBbmRyb2lkUmVzb2x1dGlvbkhpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRlRW51
bWVyYXRpb24oIldlYlJUQy5BbmRyb2lkLlZpZGVvQ2FwdHVyZXJBbmRyb2lkLlJlc29sdXRpb24i
LAotICAgICAgICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DT01NT05fUkVTT0xVVElPTlMu
c2l6ZSgpKTsKLQotICBwcml2YXRlIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYTsgLy8g
T25seSBub24tbnVsbCB3aGlsZSBjYXB0dXJpbmcuCi0gIHByaXZhdGUgZmluYWwgQXRvbWljQm9v
bGVhbiBpc0NhbWVyYVJ1bm5pbmcgPSBuZXcgQXRvbWljQm9vbGVhbigpOwotICAvLyBVc2UgbWF5
YmVQb3N0T25DYW1lcmFUaHJlYWQoKSBpbnN0ZWFkIG9mIHBvc3RpbmcgZGlyZWN0bHkgdG8gdGhl
IGhhbmRsZXIgLSB0aGlzIHdheSBhbGwKLSAgLy8gY2FsbGJhY2tzIHdpdGggYSBzcGVjaWZlZCB0
b2tlbiBjYW4gYmUgcmVtb3ZlZCBhdCBvbmNlLgotICBwcml2YXRlIHZvbGF0aWxlIEhhbmRsZXIg
Y2FtZXJhVGhyZWFkSGFuZGxlcjsKLSAgcHJpdmF0ZSBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4
dDsKLSAgLy8gU3luY2hyb25pemF0aW9uIGxvY2sgZm9yIHxpZHwuCi0gIHByaXZhdGUgZmluYWwg
T2JqZWN0IGNhbWVyYUlkTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBpbnQgaWQ7Ci0g
IHByaXZhdGUgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvOwotICBwcml2
YXRlIENhbWVyYVN0YXRpc3RpY3MgY2FtZXJhU3RhdGlzdGljczsKLSAgLy8gUmVtZW1iZXIgdGhl
IHJlcXVlc3RlZCBmb3JtYXQgaW4gY2FzZSB3ZSB3YW50IHRvIHN3aXRjaCBjYW1lcmFzLgotICBw
cml2YXRlIGludCByZXF1ZXN0ZWRXaWR0aDsKLSAgcHJpdmF0ZSBpbnQgcmVxdWVzdGVkSGVpZ2h0
OwotICBwcml2YXRlIGludCByZXF1ZXN0ZWRGcmFtZXJhdGU7Ci0gIC8vIFRoZSBjYXB0dXJlIGZv
cm1hdCB3aWxsIGJlIHRoZSBjbG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQgdG8gdGhlIHJlcXVlc3Rl
ZCBmb3JtYXQuCi0gIHByaXZhdGUgQ2FwdHVyZUZvcm1hdCBjYXB0dXJlRm9ybWF0OwotICBwcml2
YXRlIGZpbmFsIE9iamVjdCBwZW5kaW5nQ2FtZXJhU3dpdGNoTG9jayA9IG5ldyBPYmplY3QoKTsK
LSAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIHBlbmRpbmdDYW1lcmFTd2l0Y2g7Ci0gIHByaXZh
dGUgQ2FwdHVyZXJPYnNlcnZlciBmcmFtZU9ic2VydmVyID0gbnVsbDsKLSAgcHJpdmF0ZSBmaW5h
bCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXI7Ci0gIHByaXZhdGUgYm9vbGVhbiBm
aXJzdEZyYW1lUmVwb3J0ZWQ7Ci0gIC8vIEFyYml0cmFyeSBxdWV1ZSBkZXB0aC4gIEhpZ2hlciBu
dW1iZXIgbWVhbnMgbW9yZSBtZW1vcnkgYWxsb2NhdGVkICYgaGVsZCwKLSAgLy8gbG93ZXIgbnVt
YmVyIG1lYW5zIG1vcmUgc2Vuc2l0aXZpdHkgdG8gcHJvY2Vzc2luZyB0aW1lIGluIHRoZSBjbGll
bnQgKGFuZAotICAvLyBwb3RlbnRpYWxseSBzdGFsbGluZyB0aGUgY2FwdHVyZXIgaWYgaXQgcnVu
cyBvdXQgb2YgYnVmZmVycyB0byB3cml0ZSB0bykuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBOVU1CRVJfT0ZfQ0FQVFVSRV9CVUZGRVJTID0gMzsKLSAgcHJpdmF0ZSBmaW5hbCBTZXQ8Ynl0
ZVtdPiBxdWV1ZWRCdWZmZXJzID0gbmV3IEhhc2hTZXQ8Ynl0ZVtdPigpOwotICBwcml2YXRlIGZp
bmFsIGJvb2xlYW4gaXNDYXB0dXJpbmdUb1RleHR1cmU7Ci0gIHByaXZhdGUgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc3VyZmFjZUhlbHBlcjsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1BWF9P
UEVOX0NBTUVSQV9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBPUEVO
X0NBTUVSQV9ERUxBWV9NUyA9IDUwMDsKLSAgcHJpdmF0ZSBpbnQgb3BlbkNhbWVyYUF0dGVtcHRz
OwotCi0gIC8vIFVzZWQgZm9yIHN0YXRpc3RpY3MuCi0gIHByaXZhdGUgbG9uZyBzdGFydFN0YXJ0
VGltZU5zOyAvLyBUaGUgdGltZSBpbiBuYW5vc2Vjb25kcyB3aGVuIHN0YXJ0aW5nIHRoZSBjYW1l
cmEgYmVnYW4uCi0KLSAgLy8gQ2FtZXJhIGVycm9yIGNhbGxiYWNrLgotICBwcml2YXRlIGZpbmFs
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkVycm9yQ2FsbGJhY2sgY2FtZXJhRXJyb3JDYWxsYmFj
ayA9Ci0gICAgICBuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuRXJyb3JDYWxsYmFjaygpIHsK
LSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoaW50IGVycm9y
LCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmEpIHsKLSAgICAgICAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOwotICAgICAgICAgIGlmIChlcnJvciA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YS5DQU1FUkFfRVJST1JfU0VSVkVSX0RJRUQpIHsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9
ICJDYW1lcmEgc2VydmVyIGRpZWQhIjsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBlcnJvcjogIiArIGVycm9yOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBMb2dnaW5nLmUoVEFHLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIGlmIChldmVu
dHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChlcnJvciA9PSBhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYS5DQU1FUkFfRVJST1JfRVZJQ1RFRCkgewotICAgICAgICAgICAgICBldmVu
dHNIYW5kbGVyLm9uQ2FtZXJhRGlzY29ubmVjdGVkKCk7Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoZXJyb3JNZXNzYWdlKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH07Ci0KLSAgcHVi
bGljIHN0YXRpYyBWaWRlb0NhcHR1cmVyQW5kcm9pZCBjcmVhdGUoU3RyaW5nIG5hbWUsIENhbWVy
YUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgIHJldHVybiBWaWRlb0NhcHR1cmVy
QW5kcm9pZC5jcmVhdGUobmFtZSwgZXZlbnRzSGFuZGxlciwgZmFsc2UgLyogY2FwdHVyZVRvVGV4
dHVyZSAqLyk7Ci0gIH0KLQotICAvLyBVc2UgY3RvciBkaXJlY3RseSBpbnN0ZWFkLgotICBARGVw
cmVjYXRlZAotICBwdWJsaWMgc3RhdGljIFZpZGVvQ2FwdHVyZXJBbmRyb2lkIGNyZWF0ZSgKLSAg
ICAgIFN0cmluZyBuYW1lLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIGJvb2xl
YW4gY2FwdHVyZVRvVGV4dHVyZSkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gbmV3IFZpZGVv
Q2FwdHVyZXJBbmRyb2lkKG5hbWUsIGV2ZW50c0hhbmRsZXIsIGNhcHR1cmVUb1RleHR1cmUpOwot
ICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
IkNvdWxkbid0IGNyZWF0ZSBjYW1lcmEuIiwgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwcmludFN0YWNrVHJhY2UoKSB7Ci0gICAgVGhyZWFkIGNh
bWVyYVRocmVhZCA9IG51bGw7Ci0gICAgaWYgKGNhbWVyYVRocmVhZEhhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgY2FtZXJhVGhyZWFkID0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5n
ZXRUaHJlYWQoKTsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYVRocmVhZCAhPSBudWxsKSB7Ci0gICAg
ICBTdGFja1RyYWNlRWxlbWVudFtdIGNhbWVyYVN0YWNrVHJhY2VzID0gY2FtZXJhVGhyZWFkLmdl
dFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChjYW1lcmFTdGFja1RyYWNlcy5sZW5ndGggPiAwKSB7
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb0NhcHR1cmVyQW5kcm9pZCBzdGFja3MgdHJh
Y2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgc3RhY2tUcmFjZSA6IGNhbWVy
YVN0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgc3RhY2tUcmFjZS50b1N0
cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFN3aXRjaCBj
YW1lcmEgdG8gdGhlIG5leHQgdmFsaWQgY2FtZXJhIGlkLiBUaGlzIGNhbiBvbmx5IGJlIGNhbGxl
ZCB3aGlsZQotICAvLyB0aGUgY2FtZXJhIGlzIHJ1bm5pbmcuCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBzd2l0Y2hDYW1lcmEoZmluYWwgQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVu
dHNIYW5kbGVyKSB7Ci0gICAgaWYgKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9m
Q2FtZXJhcygpIDwgMikgewotICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoIk5vIGNh
bWVyYSB0byBzd2l0Y2ggdG8uIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IHN5bmNocm9uaXplZCAocGVuZGluZ0NhbWVyYVN3aXRjaExvY2spIHsKLSAgICAgIGlmIChwZW5k
aW5nQ2FtZXJhU3dpdGNoKSB7Ci0gICAgICAgIC8vIERvIG5vdCBoYW5kbGUgbXVsdGlwbGUgY2Ft
ZXJhIHN3aXRjaCByZXF1ZXN0IHRvIGF2b2lkIGJsb2NraW5nCi0gICAgICAgIC8vIGNhbWVyYSB0
aHJlYWQgYnkgaGFuZGxpbmcgdG9vIG1hbnkgc3dpdGNoIHJlcXVlc3QgZnJvbSBhIHF1ZXVlLgot
ICAgICAgICBMb2dnaW5nLncoVEFHLCAiSWdub3JpbmcgY2FtZXJhIHN3aXRjaCByZXF1ZXN0LiIp
OwotICAgICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAg
c3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJQZW5kaW5nIGNhbWVyYSBz
d2l0Y2ggYWxyZWFkeSBpbiBwcm9ncmVzcy4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0gICAgICBwZW5kaW5nQ2FtZXJhU3dpdGNoID0gdHJ1ZTsKLSAgICB9Ci0gICAg
ZmluYWwgYm9vbGVhbiBkaWRQb3N0ID0gbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgIHN3aXRjaENhbWVyYU9uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICAgIHN5bmNocm9uaXplZCAo
cGVuZGluZ0NhbWVyYVN3aXRjaExvY2spIHsKLSAgICAgICAgICBwZW5kaW5nQ2FtZXJhU3dpdGNo
ID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0g
bnVsbCkgewotICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hEb25l
KAotICAgICAgICAgICAgICBpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5D
YW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfRlJPTlQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSk7Ci0gICAgaWYgKCFkaWRQb3N0ICYmIHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewot
ICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJDYW1lcmEgaXMg
c3RvcHBlZC4iKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZWNvbmZpZ3VyZSB0aGUgY2FtZXJhIHRv
IGNhcHR1cmUgaW4gYSBuZXcgZm9ybWF0LiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGls
ZSB0aGUgY2FtZXJhCi0gIC8vIGlzIHJ1bm5pbmcuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwg
ZmluYWwgaW50IGZyYW1lcmF0ZSkgewotICAgIG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBzdGFydFByZXZpZXdPbkNhbWVyYVRocmVhZCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJh
dGUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHJl
dHJpZXZlIHRoZSBjdXJyZW50IGNhbWVyYSBpZCBzeW5jaHJvbm91c2x5LiBOb3RlIHRoYXQgdGhl
IGNhbWVyYSBpZCBtaWdodAotICAvLyBjaGFuZ2UgYXQgYW55IHBvaW50IGJ5IHN3aXRjaENhbWVy
YSgpIGNhbGxzLgotICBwcml2YXRlIGludCBnZXRDdXJyZW50Q2FtZXJhSWQoKSB7Ci0gICAgc3lu
Y2hyb25pemVkIChjYW1lcmFJZExvY2spIHsKLSAgICAgIHJldHVybiBpZDsKLSAgICB9Ci0gIH0K
LQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBWaWRlb0NhcHR1cmVyIGlzIHNldHVwIHRvIGNh
cHR1cmUgdmlkZW8gZnJhbWVzIHRvIGEgU3VyZmFjZVRleHR1cmUuCi0gIHB1YmxpYyBib29sZWFu
IGlzQ2FwdHVyaW5nVG9UZXh0dXJlKCkgewotICAgIHJldHVybiBpc0NhcHR1cmluZ1RvVGV4dHVy
ZTsKLSAgfQotCi0gIHB1YmxpYyBWaWRlb0NhcHR1cmVyQW5kcm9pZCgKLSAgICAgIFN0cmluZyBj
YW1lcmFOYW1lLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIGJvb2xlYW4gY2Fw
dHVyZVRvVGV4dHVyZSkgewotICAgIGlmIChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1i
ZXJPZkNhbWVyYXMoKSA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigi
Tm8gY2FtZXJhcyBhdmFpbGFibGUiKTsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYU5hbWUgPT0gbnVs
bCB8fCBjYW1lcmFOYW1lLmVxdWFscygiIikpIHsKLSAgICAgIHRoaXMuaWQgPSAwOwotICAgIH0g
ZWxzZSB7Ci0gICAgICB0aGlzLmlkID0gQ2FtZXJhMUVudW1lcmF0b3IuZ2V0Q2FtZXJhSW5kZXgo
Y2FtZXJhTmFtZSk7Ci0gICAgfQotICAgIHRoaXMuZXZlbnRzSGFuZGxlciA9IGV2ZW50c0hhbmRs
ZXI7Ci0gICAgaXNDYXB0dXJpbmdUb1RleHR1cmUgPSBjYXB0dXJlVG9UZXh0dXJlOwotICAgIExv
Z2dpbmcuZChUQUcsICJWaWRlb0NhcHR1cmVyQW5kcm9pZCBpc0NhcHR1cmluZ1RvVGV4dHVyZSA6
ICIgKyBpc0NhcHR1cmluZ1RvVGV4dHVyZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJ
c09uQ2FtZXJhVGhyZWFkKCkgewotICAgIGlmIChjYW1lcmFUaHJlYWRIYW5kbGVyID09IG51bGwp
IHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgaXMgbm90IGluaXRpYWxpemVkIC0gY2Fu
J3QgY2hlY2sgdGhyZWFkLiIpOwotICAgIH0gZWxzZSBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQo
KSAhPSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAg
ICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJlYWQiKTsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQoUnVubmFi
bGUgcnVubmFibGUpIHsKLSAgICByZXR1cm4gbWF5YmVQb3N0RGVsYXllZE9uQ2FtZXJhVGhyZWFk
KDAgLyogZGVsYXlNcyAqLywgcnVubmFibGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG1h
eWJlUG9zdERlbGF5ZWRPbkNhbWVyYVRocmVhZChpbnQgZGVsYXlNcywgUnVubmFibGUgcnVubmFi
bGUpIHsKLSAgICByZXR1cm4gY2FtZXJhVGhyZWFkSGFuZGxlciAhPSBudWxsICYmIGlzQ2FtZXJh
UnVubmluZy5nZXQoKQotICAgICAgICAmJiBjYW1lcmFUaHJlYWRIYW5kbGVyLnBvc3RBdFRpbWUo
Ci0gICAgICAgICAgICAgICBydW5uYWJsZSwgdGhpcyAvKiB0b2tlbiAqLywgU3lzdGVtQ2xvY2su
dXB0aW1lTWlsbGlzKCkgKyBkZWxheU1zKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBkaXNwb3NlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJkaXNwb3NlIik7Ci0gIH0KLQot
ICBwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKLSAgICByZXR1cm4gYXBwbGljYXRp
b25Db250ZXh0ICE9IG51bGwgJiYgZnJhbWVPYnNlcnZlciAhPSBudWxsOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3VyZmFjZVRleHR1cmVIZWxwZXIgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgQ2Fw
dHVyZXJPYnNlcnZlciBmcmFtZU9ic2VydmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImluaXRp
YWxpemUiKTsKLSAgICBpZiAoYXBwbGljYXRpb25Db250ZXh0ID09IG51bGwpIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFwcGxpY2F0aW9uQ29udGV4dCBub3Qg
c2V0LiIpOwotICAgIH0KLSAgICBpZiAoZnJhbWVPYnNlcnZlciA9PSBudWxsKSB7Ci0gICAgICB0
aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmcmFtZU9ic2VydmVyIG5vdCBzZXQu
Iik7Ci0gICAgfQotICAgIGlmIChpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24oIkFscmVhZHkgaW5pdGlhbGl6ZWQiKTsKLSAgICB9Ci0gICAg
dGhpcy5hcHBsaWNhdGlvbkNvbnRleHQgPSBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gICAgdGhpcy5m
cmFtZU9ic2VydmVyID0gZnJhbWVPYnNlcnZlcjsKLSAgICB0aGlzLnN1cmZhY2VIZWxwZXIgPSBz
dXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYVRocmVhZEhhbmRsZXIgPQotICAg
ICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciA9PSBudWxsID8gbnVsbCA6IHN1cmZhY2VUZXh0dXJl
SGVscGVyLmdldEhhbmRsZXIoKTsKLSAgfQotCi0gIC8vIE5vdGUgdGhhdCB0aGlzIGFjdHVhbGx5
IG9wZW5zIHRoZSBjYW1lcmEsIGFuZCBDYW1lcmEgY2FsbGJhY2tzIHJ1biBvbiB0aGUKLSAgLy8g
dGhyZWFkIHRoYXQgY2FsbHMgb3BlbigpLCBzbyB0aGlzIGlzIGRvbmUgb24gdGhlIENhbWVyYVRo
cmVhZC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0YXJ0Q2FwdHVyZShmaW5hbCBpbnQg
d2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAic3RhcnRDYXB0dXJlIHJlcXVlc3RlZDogIiArIHdpZHRoICsgIngiICsgaGVp
Z2h0ICsgIkAiICsgZnJhbWVyYXRlKTsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgewotICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic3RhcnRDYXB0dXJlIGNhbGxlZCBp
biB1bmluaXRpYWxpemVkIHN0YXRlIik7Ci0gICAgfQotICAgIGlmIChzdXJmYWNlSGVscGVyID09
IG51bGwpIHsKLSAgICAgIGZyYW1lT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQoZmFsc2UgLyog
c3VjY2VzcyAqLyk7Ci0gICAgICBpZiAoZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAg
IGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcigiTm8gU3VyZmFjZVRleHR1cmUgY3JlYXRlZC4i
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzQ2FtZXJhUnVubmlu
Zy5nZXRBbmRTZXQodHJ1ZSkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgaGFzIGFs
cmVhZHkgYmVlbiBzdGFydGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmaW5hbCBi
b29sZWFuIGRpZFBvc3QgPSBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChuZXcgUnVubmFibGUoKSB7
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgb3Bl
bkNhbWVyYUF0dGVtcHRzID0gMDsKLSAgICAgICAgc3RhcnRDYXB0dXJlT25DYW1lcmFUaHJlYWQo
d2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAoIWRp
ZFBvc3QpIHsKLSAgICAgIGZyYW1lT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQoZmFsc2UpOwot
ICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICBldmVudHNIYW5kbGVy
Lm9uQ2FtZXJhRXJyb3IoIkNvdWxkIG5vdCBwb3N0IHRhc2sgdG8gY2FtZXJhIHRocmVhZC4iKTsK
LSAgICAgIH0KLSAgICAgIGlzQ2FtZXJhUnVubmluZy5zZXQoZmFsc2UpOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZChmaW5hbCBpbnQgd2lk
dGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBjaGVja0lz
T25DYW1lcmFUaHJlYWQoKTsKLSAgICBzdGFydFN0YXJ0VGltZU5zID0gU3lzdGVtLm5hbm9UaW1l
KCk7Ci0gICAgaWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZDogQ2FtZXJhIGlzIHN0b3BwZWQiKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICBMb2dn
aW5nLmUoVEFHLCAic3RhcnRDYXB0dXJlT25DYW1lcmFUaHJlYWQ6IENhbWVyYSBoYXMgYWxyZWFk
eSBiZWVuIHN0YXJ0ZWQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMuZmlyc3RG
cmFtZVJlcG9ydGVkID0gZmFsc2U7Ci0KLSAgICB0cnkgewotICAgICAgdHJ5IHsKLSAgICAgICAg
c3luY2hyb25pemVkIChjYW1lcmFJZExvY2spIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
T3BlbmluZyBjYW1lcmEgIiArIGlkKTsKLSAgICAgICAgICBpZiAoZXZlbnRzSGFuZGxlciAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhT3BlbmluZyhDYW1lcmEx
RW51bWVyYXRvci5nZXREZXZpY2VOYW1lKGlkKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNh
bWVyYSA9IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oaWQpOwotICAgICAgICAgIGluZm8g
PSBuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbygpOwotICAgICAgICAgIGFu
ZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldENhbWVyYUluZm8oaWQsIGluZm8pOwotICAgICAgICB9
Ci0gICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgb3BlbkNhbWVy
YUF0dGVtcHRzKys7Ci0gICAgICAgIGlmIChvcGVuQ2FtZXJhQXR0ZW1wdHMgPCBNQVhfT1BFTl9D
QU1FUkFfQVRURU1QVFMpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhLm9wZW4g
ZmFpbGVkLCByZXRyeWluZyIsIGUpOwotICAgICAgICAgIG1heWJlUG9zdERlbGF5ZWRPbkNhbWVy
YVRocmVhZChPUEVOX0NBTUVSQV9ERUxBWV9NUywgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAg
ICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAg
ICAgIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhyZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHRocm93IGU7Ci0gICAgICB9Ci0KLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3
VGV4dHVyZShzdXJmYWNlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotCi0gICAgICBMb2dn
aW5nLmQoVEFHLCAiQ2FtZXJhIG9yaWVudGF0aW9uOiAiICsgaW5mby5vcmllbnRhdGlvbiArICIg
LkRldmljZSBvcmllbnRhdGlvbjogIgotICAgICAgICAgICAgICArIGdldERldmljZU9yaWVudGF0
aW9uKCkpOwotICAgICAgY2FtZXJhLnNldEVycm9yQ2FsbGJhY2soY2FtZXJhRXJyb3JDYWxsYmFj
ayk7Ci0gICAgICBzdGFydFByZXZpZXdPbkNhbWVyYVRocmVhZCh3aWR0aCwgaGVpZ2h0LCBmcmFt
ZXJhdGUpOwotICAgICAgZnJhbWVPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZCh0cnVlKTsKLSAg
ICAgIGlmIChpc0NhcHR1cmluZ1RvVGV4dHVyZSkgewotICAgICAgICBzdXJmYWNlSGVscGVyLnN0
YXJ0TGlzdGVuaW5nKHRoaXMpOwotICAgICAgfQotCi0gICAgICAvLyBTdGFydCBjYW1lcmEgb2Jz
ZXJ2ZXIuCi0gICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbmV3IENhbWVyYVN0YXRpc3RpY3Moc3Vy
ZmFjZUhlbHBlciwgZXZlbnRzSGFuZGxlcik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gfCBS
dW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJzdGFydENhcHR1cmUg
ZmFpbGVkIiwgZSk7Ci0gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbWVyYSBpcyByZWxlYXNlZC4K
LSAgICAgIHN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQodHJ1ZSAvKiBzdG9wSGFuZGxlciAqLyk7
Ci0gICAgICBmcmFtZU9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKGZhbHNlKTsKLSAgICAgIGlm
IChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVy
YUVycm9yKCJDYW1lcmEgY2FuIG5vdCBiZSBzdGFydGVkLiIpOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIC8vIChSZSlzdGFydCBwcmV2aWV3IHdpdGggdGhlIGNsb3Nlc3Qgc3VwcG9ydGVkIGZv
cm1hdCB0byB8d2lkdGh8IHggfGhlaWdodHwgQCB8ZnJhbWVyYXRlfC4KLSAgcHJpdmF0ZSB2b2lk
IHN0YXJ0UHJldmlld09uQ2FtZXJhVGhyZWFkKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZy
YW1lcmF0ZSkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmICghaXNDYW1l
cmFSdW5uaW5nLmdldCgpIHx8IGNhbWVyYSA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFH
LCAic3RhcnRQcmV2aWV3T25DYW1lcmFUaHJlYWQ6IENhbWVyYSBpcyBzdG9wcGVkIik7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIExvZ2dpbmcuZCgKLSAgICAgICAgVEFHLCAic3RhcnRQcmV2
aWV3T25DYW1lcmFUaHJlYWQgcmVxdWVzdGVkOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAi
QCIgKyBmcmFtZXJhdGUpOwotCi0gICAgcmVxdWVzdGVkV2lkdGggPSB3aWR0aDsKLSAgICByZXF1
ZXN0ZWRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcmVxdWVzdGVkRnJhbWVyYXRlID0gZnJhbWVyYXRl
OwotCi0gICAgLy8gRmluZCBjbG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQgZm9yIHx3aWR0aHwgeCB8
aGVpZ2h0fCBAIHxmcmFtZXJhdGV8LgotICAgIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LlBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IGNhbWVyYS5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgZmlu
YWwgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBzdXBwb3J0ZWRGcmFtZXJhdGVz
ID0KLSAgICAgICAgQ2FtZXJhMUVudW1lcmF0b3IuY29udmVydEZyYW1lcmF0ZXMocGFyYW1ldGVy
cy5nZXRTdXBwb3J0ZWRQcmV2aWV3RnBzUmFuZ2UoKSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF2
YWlsYWJsZSBmcHMgcmFuZ2VzOiAiICsgc3VwcG9ydGVkRnJhbWVyYXRlcyk7Ci0KLSAgICBmaW5h
bCBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIGZwc1JhbmdlID0KLSAgICAgICAgQ2FtZXJh
RW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZShzdXBw
b3J0ZWRGcmFtZXJhdGVzLCBmcmFtZXJhdGUpOwotCi0gICAgZmluYWwgTGlzdDxTaXplPiBzdXBw
b3J0ZWRQcmV2aWV3U2l6ZXMgPQotICAgICAgICBDYW1lcmExRW51bWVyYXRvci5jb252ZXJ0U2l6
ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3U2l6ZXMoKSk7Ci0gICAgZmluYWwgU2l6
ZSBwcmV2aWV3U2l6ZSA9Ci0gICAgICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9z
ZXN0U3VwcG9ydGVkU2l6ZShzdXBwb3J0ZWRQcmV2aWV3U2l6ZXMsIHdpZHRoLCBoZWlnaHQpOwot
ICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5yZXBvcnRDYW1lcmFSZXNvbHV0aW9uKAotICAg
ICAgICB2aWRlb0NhcHR1cmVyQW5kcm9pZFJlc29sdXRpb25IaXN0b2dyYW0sIHByZXZpZXdTaXpl
KTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIHByZXZpZXcgc2l6ZXM6ICIgKyBzdXBw
b3J0ZWRQcmV2aWV3U2l6ZXMpOwotCi0gICAgZmluYWwgQ2FwdHVyZUZvcm1hdCBjYXB0dXJlRm9y
bWF0ID0KLSAgICAgICAgbmV3IENhcHR1cmVGb3JtYXQocHJldmlld1NpemUud2lkdGgsIHByZXZp
ZXdTaXplLmhlaWdodCwgZnBzUmFuZ2UpOwotCi0gICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGFscmVh
ZHkgdXNpbmcgdGhpcyBjYXB0dXJlIGZvcm1hdCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRvIGFu
eXRoaW5nLgotICAgIGlmIChjYXB0dXJlRm9ybWF0LmVxdWFscyh0aGlzLmNhcHR1cmVGb3JtYXQp
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIGNhbWVyYSBwYXJhbWV0
ZXJzLgotICAgIExvZ2dpbmcuZChUQUcsICJpc1ZpZGVvU3RhYmlsaXphdGlvblN1cHBvcnRlZDog
IiArIHBhcmFtZXRlcnMuaXNWaWRlb1N0YWJpbGl6YXRpb25TdXBwb3J0ZWQoKSk7Ci0gICAgaWYg
KHBhcmFtZXRlcnMuaXNWaWRlb1N0YWJpbGl6YXRpb25TdXBwb3J0ZWQoKSkgewotICAgICAgcGFy
YW1ldGVycy5zZXRWaWRlb1N0YWJpbGl6YXRpb24odHJ1ZSk7Ci0gICAgfQotICAgIC8vIE5vdGU6
IHNldFJlY29yZGluZ0hpbnQodHJ1ZSkgYWN0dWFsbHkgZGVjcmVhc2UgZnJhbWUgcmF0ZSBvbiBO
NS4KLSAgICAvLyBwYXJhbWV0ZXJzLnNldFJlY29yZGluZ0hpbnQodHJ1ZSk7Ci0gICAgaWYgKGNh
cHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1heCA+IDApIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0UHJl
dmlld0Zwc1JhbmdlKGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1pbiwgY2FwdHVyZUZvcm1hdC5m
cmFtZXJhdGUubWF4KTsKLSAgICB9Ci0gICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3U2l6ZShwcmV2
aWV3U2l6ZS53aWR0aCwgcHJldmlld1NpemUuaGVpZ2h0KTsKLQotICAgIGlmICghaXNDYXB0dXJp
bmdUb1RleHR1cmUpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld0Zvcm1hdChjYXB0dXJl
Rm9ybWF0LmltYWdlRm9ybWF0KTsKLSAgICB9Ci0gICAgLy8gUGljdHVyZSBzaXplIGlzIGZvciB0
YWtpbmcgcGljdHVyZXMgYW5kIG5vdCBmb3IgcHJldmlldy92aWRlbywgYnV0IHdlIG5lZWQgdG8g
c2V0IGl0IGFueXdheQotICAgIC8vIGFzIGEgd29ya2Fyb3VuZCBmb3IgYW4gYXNwZWN0IHJhdGlv
IHByb2JsZW0gb24gTmV4dXMgNy4KLSAgICBmaW5hbCBTaXplIHBpY3R1cmVTaXplID0gQ2FtZXJh
RW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRTaXplKAotICAgICAgICBDYW1l
cmExRW51bWVyYXRvci5jb252ZXJ0U2l6ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQaWN0dXJl
U2l6ZXMoKSksIHdpZHRoLCBoZWlnaHQpOwotICAgIHBhcmFtZXRlcnMuc2V0UGljdHVyZVNpemUo
cGljdHVyZVNpemUud2lkdGgsIHBpY3R1cmVTaXplLmhlaWdodCk7Ci0KLSAgICAvLyBUZW1wb3Jh
cmlseSBzdG9wIHByZXZpZXcgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcuCi0gICAgaWYgKHRoaXMu
Y2FwdHVyZUZvcm1hdCAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmEuc3RvcFByZXZpZXcoKTsKLSAg
ICAgIC8vIENhbGxpbmcgfHNldFByZXZpZXdDYWxsYmFja1dpdGhCdWZmZXJ8IHdpdGggbnVsbCBz
aG91bGQgY2xlYXIgdGhlIGludGVybmFsIGNhbWVyYSBidWZmZXIKLSAgICAgIC8vIHF1ZXVlLCBi
dXQgc29tZXRpbWVzIHdlIHJlY2VpdmUgYSBmcmFtZSB3aXRoIHRoZSBvbGQgcmVzb2x1dGlvbiBh
ZnRlciB0aGlzIGNhbGwgYW55d2F5LgotICAgICAgY2FtZXJhLnNldFByZXZpZXdDYWxsYmFja1dp
dGhCdWZmZXIobnVsbCk7Ci0gICAgfQotCi0gICAgTGlzdDxTdHJpbmc+IGZvY3VzTW9kZXMgPSBw
YXJhbWV0ZXJzLmdldFN1cHBvcnRlZEZvY3VzTW9kZXMoKTsKLSAgICBpZiAoZm9jdXNNb2Rlcy5j
b250YWlucyhhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVfQ09O
VElOVU9VU19WSURFTykpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJFbmFibGUgY29udGludW91
cyBhdXRvIGZvY3VzIG1vZGUuIik7Ci0gICAgICBwYXJhbWV0ZXJzLnNldEZvY3VzTW9kZShhbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVfQ09OVElOVU9VU19WSURF
Tyk7Ci0gICAgfQotCi0gICAgLy8gKFJlKXN0YXJ0IHByZXZpZXcuCi0gICAgTG9nZ2luZy5kKFRB
RywgIlN0YXJ0IGNhcHR1cmluZzogIiArIGNhcHR1cmVGb3JtYXQpOwotICAgIHRoaXMuY2FwdHVy
ZUZvcm1hdCA9IGNhcHR1cmVGb3JtYXQ7Ci0KLSAgICBjYW1lcmEuc2V0UGFyYW1ldGVycyhwYXJh
bWV0ZXJzKTsKLSAgICAvLyBDYWxjdWxhdGUgb3JpZW50YXRpb24gbWFudWFsbHkgYW5kIHNlbmQg
aXQgYXMgQ1ZPIGluc3RlYWQuCi0gICAgY2FtZXJhLnNldERpc3BsYXlPcmllbnRhdGlvbigwIC8q
IGRlZ3JlZXMgKi8pOwotICAgIGlmICghaXNDYXB0dXJpbmdUb1RleHR1cmUpIHsKLSAgICAgIHF1
ZXVlZEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICAgIGZpbmFsIGludCBmcmFtZVNpemUgPSBjYXB0dXJl
Rm9ybWF0LmZyYW1lU2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0Zf
Q0FQVFVSRV9CVUZGRVJTOyArK2kpIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXIg
PSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGZyYW1lU2l6ZSk7Ci0gICAgICAgIHF1ZXVlZEJ1
ZmZlcnMuYWRkKGJ1ZmZlci5hcnJheSgpKTsKLSAgICAgICAgY2FtZXJhLmFkZENhbGxiYWNrQnVm
ZmVyKGJ1ZmZlci5hcnJheSgpKTsKLSAgICAgIH0KLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3Q2Fs
bGJhY2tXaXRoQnVmZmVyKHRoaXMpOwotICAgIH0KLSAgICBjYW1lcmEuc3RhcnRQcmV2aWV3KCk7
Ci0gIH0KLQotICAvLyBCbG9ja3MgdW50aWwgY2FtZXJhIGlzIGtub3duIHRvIGJlIHN0b3BwZWQu
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wQ2FwdHVyZSgpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BDYXB0dXJlIik7Ci0gICAg
ZmluYWwgQ291bnREb3duTGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAg
ICBmaW5hbCBib29sZWFuIGRpZFBvc3QgPSBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgc3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZCh0cnVlIC8qIHN0b3BIYW5kbGVyICovKTsK
LSAgICAgICAgYmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAo
IWRpZFBvc3QpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYWxsaW5nIHN0b3BDYXB0dXJlKCkg
Zm9yIGFscmVhZHkgc3RvcHBlZCBjYW1lcmEuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghYmFycmllci5hd2FpdChDQU1FUkFfU1RPUF9USU1FT1VUX01TLCBUaW1lVW5pdC5NSUxM
SVNFQ09ORFMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIHN0b3AgdGltZW91dCIp
OwotICAgICAgcHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBpZiAoZXZlbnRzSGFuZGxlciAhPSBu
dWxsKSB7Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcigiQ2FtZXJhIHN0b3Ag
dGltZW91dCIpOwotICAgICAgfQotICAgIH0KLSAgICBmcmFtZU9ic2VydmVyLm9uQ2FwdHVyZXJT
dG9wcGVkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BDYXB0dXJlIGRvbmUiKTsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBzdG9wQ2FwdHVyZU9uQ2FtZXJhVGhyZWFkKGJvb2xlYW4gc3RvcEhh
bmRsZXIpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFH
LCAic3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZCIpOwotICAgIGZpbmFsIGxvbmcgc3RvcFN0YXJ0
VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIC8vIE5vdGUgdGhhdCB0aGUgY2FtZXJhIG1p
Z2h0IHN0aWxsIG5vdCBiZSBzdGFydGVkIGhlcmUgaWYgc3RhcnRDYXB0dXJlT25DYW1lcmFUaHJl
YWQgZmFpbGVkCi0gICAgLy8gYW5kIHdlIHBvc3RlZCBhIHJldHJ5LgotCi0gICAgLy8gTWFrZSBz
dXJlIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgaXMgbm90IGNhbGxlZCBhbnltb3JlLgotICAg
IGlmIChzdXJmYWNlSGVscGVyICE9IG51bGwpIHsKLSAgICAgIHN1cmZhY2VIZWxwZXIuc3RvcExp
c3RlbmluZygpOwotICAgIH0KLSAgICBpZiAoc3RvcEhhbmRsZXIpIHsKLSAgICAgIC8vIENsZWFy
IHRoZSBjYW1lcmFUaHJlYWRIYW5kbGVyIGZpcnN0LCBpbiBjYXNlIHN0b3BQcmV2aWV3IG9yCi0g
ICAgICAvLyBvdGhlciBkcml2ZXIgY29kZSBkZWFkbG9ja3MuIERlYWRsb2NrIGluCi0gICAgICAv
LyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5fc3RvcFByZXZpZXcoTmF0aXZlIE1ldGhvZCkgaGFz
Ci0gICAgICAvLyBiZWVuIG9ic2VydmVkIG9uIE5leHVzIDUgKGhhbW1lcmhlYWQpLCBPUyB2ZXJz
aW9uIExNWTQ4SS4KLSAgICAgIC8vIFRoZSBjYW1lcmEgbWlnaHQgcG9zdCBhbm90aGVyIG9uZSBv
ciB0d28gcHJldmlldyBmcmFtZXMKLSAgICAgIC8vIGJlZm9yZSBzdG9wcGVkLCBzbyB3ZSBoYXZl
IHRvIGNoZWNrIHxpc0NhbWVyYVJ1bm5pbmd8LgotICAgICAgLy8gUmVtb3ZlIGFsbCBwZW5kaW5n
IFJ1bm5hYmxlcyBwb3N0ZWQgZnJvbSB8dGhpc3wuCi0gICAgICBpc0NhbWVyYVJ1bm5pbmcuc2V0
KGZhbHNlKTsKLSAgICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzQW5kTWVz
c2FnZXModGhpcyAvKiB0b2tlbiAqLyk7Ci0gICAgfQotICAgIGlmIChjYW1lcmFTdGF0aXN0aWNz
ICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYVN0YXRpc3RpY3MucmVsZWFzZSgpOwotICAgICAgY2Ft
ZXJhU3RhdGlzdGljcyA9IG51bGw7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIHBy
ZXZpZXcuIik7Ci0gICAgaWYgKGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmEuc3RvcFBy
ZXZpZXcoKTsKLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3Q2FsbGJhY2tXaXRoQnVmZmVyKG51bGwp
OwotICAgIH0KLSAgICBxdWV1ZWRCdWZmZXJzLmNsZWFyKCk7Ci0gICAgY2FwdHVyZUZvcm1hdCA9
IG51bGw7Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiUmVsZWFzZSBjYW1lcmEuIik7Ci0gICAgaWYg
KGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmEucmVsZWFzZSgpOwotICAgICAgY2FtZXJh
ID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAg
ZXZlbnRzSGFuZGxlci5vbkNhbWVyYUNsb3NlZCgpOwotICAgIH0KLSAgICBmaW5hbCBpbnQgc3Rv
cFRpbWVNcyA9IChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5v
VGltZSgpIC0gc3RvcFN0YXJ0VGltZSk7Ci0gICAgdmlkZW9DYXB0dXJlckFuZHJvaWRTdG9wVGlt
ZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdG9wVGltZU1zKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
c3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZCBkb25lIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
c3dpdGNoQ2FtZXJhT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFk
KCk7Ci0gICAgaWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJzd2l0Y2hDYW1lcmFPbkNhbWVyYVRocmVhZDogQ2FtZXJhIGlzIHN0b3BwZWQiKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYU9uQ2Ft
ZXJhVGhyZWFkIik7Ci0gICAgc3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZChmYWxzZSAvKiBzdG9w
SGFuZGxlciAqLyk7Ci0gICAgc3luY2hyb25pemVkIChjYW1lcmFJZExvY2spIHsKLSAgICAgIGlk
ID0gKGlkICsgMSkgJSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVyYXMo
KTsKLSAgICB9Ci0gICAgc3RhcnRDYXB0dXJlT25DYW1lcmFUaHJlYWQocmVxdWVzdGVkV2lkdGgs
IHJlcXVlc3RlZEhlaWdodCwgcmVxdWVzdGVkRnJhbWVyYXRlKTsKLSAgICBMb2dnaW5nLmQoVEFH
LCAic3dpdGNoQ2FtZXJhT25DYW1lcmFUaHJlYWQgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBp
bnQgZ2V0RGV2aWNlT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IG9yaWVudGF0aW9uID0gMDsKLQot
ICAgIFdpbmRvd01hbmFnZXIgd20gPSAoV2luZG93TWFuYWdlcikgYXBwbGljYXRpb25Db250ZXh0
LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAgc3dpdGNoICh3
bS5nZXREZWZhdWx0RGlzcGxheSgpLmdldFJvdGF0aW9uKCkpIHsKLSAgICAgIGNhc2UgU3VyZmFj
ZS5ST1RBVElPTl85MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSA5MDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMTgwOgotICAgICAgICBvcmllbnRhdGlvbiA9
IDE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMjcwOgot
ICAgICAgICBvcmllbnRhdGlvbiA9IDI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1
cmZhY2UuUk9UQVRJT05fMDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9yaWVudGF0aW9uID0g
MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBvcmllbnRhdGlvbjsKLSAgfQot
Ci0gIHByaXZhdGUgaW50IGdldEZyYW1lT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IHJvdGF0aW9u
ID0gZ2V0RGV2aWNlT3JpZW50YXRpb24oKTsKLSAgICBpZiAoaW5mby5mYWNpbmcgPT0gYW5kcm9p
ZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0JBQ0spIHsKLSAgICAg
IHJvdGF0aW9uID0gMzYwIC0gcm90YXRpb247Ci0gICAgfQotICAgIHJldHVybiAoaW5mby5vcmll
bnRhdGlvbiArIHJvdGF0aW9uKSAlIDM2MDsKLSAgfQotCi0gIC8vIENhbGxlZCBvbiBjYW1lcmFU
aHJlYWQgc28gbXVzdCBub3QgInN5bmNocm9uaXplZCIuCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvblByZXZpZXdGcmFtZShieXRlW10gZGF0YSwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEg
Y2FsbGJhY2tDYW1lcmEpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAo
IWlzQ2FtZXJhUnVubmluZy5nZXQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIm9uUHJldmll
d0ZyYW1lOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIXF1ZXVlZEJ1ZmZlcnMuY29udGFpbnMoZGF0YSkpIHsKLSAgICAgIC8vIHxkYXRhfCBpcyBh
biBvbGQgaW52YWxpZCBidWZmZXIuCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYW1l
cmEgIT0gY2FsbGJhY2tDYW1lcmEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJVbmV4cGVjdGVkIGNhbWVyYSBpbiBjYWxsYmFjayEiKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBs
b25nIGNhcHR1cmVUaW1lTnMgPSBUaW1lVW5pdC5NSUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0ZW1D
bG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0KLSAgICBpZiAoIWZpcnN0RnJhbWVSZXBvcnRlZCkg
ewotICAgICAgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAgfQotICAgIGNhbWVyYVN0YXRp
c3RpY3MuYWRkRnJhbWUoKTsKLSAgICBmcmFtZU9ic2VydmVyLm9uQnl0ZUJ1ZmZlckZyYW1lQ2Fw
dHVyZWQoCi0gICAgICAgIGRhdGEsIGNhcHR1cmVGb3JtYXQud2lkdGgsIGNhcHR1cmVGb3JtYXQu
aGVpZ2h0LCBnZXRGcmFtZU9yaWVudGF0aW9uKCksIGNhcHR1cmVUaW1lTnMpOwotICAgIGNhbWVy
YS5hZGRDYWxsYmFja0J1ZmZlcihkYXRhKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZShpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRy
YW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotICAgIGlmICghaXNDYW1lcmFSdW5uaW5nLmdldCgpKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAib25UZXh0dXJlRnJhbWVBdmFpbGFibGU6IENhbWVyYSBpcyBzdG9wcGVkIik7Ci0g
ICAgICBzdXJmYWNlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpbnQgcm90YXRpb24gPSBnZXRGcmFtZU9yaWVudGF0aW9uKCk7Ci0gICAgaWYg
KGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FNRVJB
X0ZBQ0lOR19GUk9OVCkgewotICAgICAgLy8gVW5kbyB0aGUgbWlycm9yIHRoYXQgdGhlIE9TICJo
ZWxwcyIgdXMgd2l0aC4KLSAgICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVm
ZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmh0bWwjc2V0RGlzcGxheU9yaWVudGF0aW9u
KGludCkKLSAgICAgIHRyYW5zZm9ybU1hdHJpeCA9Ci0gICAgICAgICAgUmVuZGVyZXJDb21tb24u
bXVsdGlwbHlNYXRyaWNlcyh0cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9uLmhvcml6b250
YWxGbGlwTWF0cml4KCkpOwotICAgIH0KLSAgICBpZiAoIWZpcnN0RnJhbWVSZXBvcnRlZCkgewot
ICAgICAgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAgfQotICAgIGNhbWVyYVN0YXRpc3Rp
Y3MuYWRkRnJhbWUoKTsKLSAgICBmcmFtZU9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQo
Y2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIG9lc1RleHR1cmVJZCwK
LSAgICAgICAgdHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wTnMpOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIG9uRmlyc3RGcmFtZUF2YWlsYWJsZSgpIHsKLSAgICBpZiAoZXZlbnRz
SGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBldmVudHNIYW5kbGVyLm9uRmlyc3RGcmFtZUF2YWls
YWJsZSgpOwotICAgIH0KLSAgICBmaW5hbCBpbnQgc3RhcnRUaW1lTXMgPQotICAgICAgICAoaW50
KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIHN0YXJ0
U3RhcnRUaW1lTnMpOwotICAgIHZpZGVvQ2FwdHVyZXJBbmRyb2lkU3RhcnRUaW1lTXNIaXN0b2dy
YW0uYWRkU2FtcGxlKHN0YXJ0VGltZU1zKTsKLSAgICBmaXJzdEZyYW1lUmVwb3J0ZWQgPSB0cnVl
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzU2NyZWVuY2FzdCgpIHsK
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9G
aWxlUmVuZGVyZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvRmls
ZVJlbmRlcmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlk
ZW9GaWxlUmVuZGVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE0OSArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5I
YW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKLWltcG9ydCBqYXZhLmlv
LkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBq
YXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93
bkxhdGNoOwotCi0vKioKLSAqIENhbiBiZSB1c2VkIHRvIHNhdmUgdGhlIHZpZGVvIGZyYW1lcyB0
byBmaWxlLgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9GaWxlUmVuZGVyZXIgaW1wbGVtZW50cyBW
aWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBU
QUcgPSAiVmlkZW9GaWxlUmVuZGVyZXIiOwotCi0gIHByaXZhdGUgZmluYWwgSGFuZGxlclRocmVh
ZCByZW5kZXJUaHJlYWQ7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGhhbmRsZXJMb2NrID0gbmV3
IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgcmVuZGVyVGhyZWFkSGFuZGxlcjsK
LSAgcHJpdmF0ZSBmaW5hbCBGaWxlT3V0cHV0U3RyZWFtIHZpZGVvT3V0RmlsZTsKLSAgcHJpdmF0
ZSBmaW5hbCBpbnQgb3V0cHV0RmlsZVdpZHRoOwotICBwcml2YXRlIGZpbmFsIGludCBvdXRwdXRG
aWxlSGVpZ2h0OwotICBwcml2YXRlIGZpbmFsIGludCBvdXRwdXRGcmFtZVNpemU7Ci0gIHByaXZh
dGUgZmluYWwgQnl0ZUJ1ZmZlciBvdXRwdXRGcmFtZUJ1ZmZlcjsKLSAgcHJpdmF0ZSBFZ2xCYXNl
IGVnbEJhc2U7Ci0gIHByaXZhdGUgWXV2Q29udmVydGVyIHl1dkNvbnZlcnRlcjsKLQotICBwdWJs
aWMgVmlkZW9GaWxlUmVuZGVyZXIoU3RyaW5nIG91dHB1dEZpbGUsIGludCBvdXRwdXRGaWxlV2lk
dGgsIGludCBvdXRwdXRGaWxlSGVpZ2h0LAotICAgICAgZmluYWwgRWdsQmFzZS5Db250ZXh0IHNo
YXJlZENvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKChvdXRwdXRGaWxlV2lk
dGggJSAyKSA9PSAxIHx8IChvdXRwdXRGaWxlSGVpZ2h0ICUgMikgPT0gMSkgewotICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRG9lcyBub3Qgc3VwcG9ydCB1bmV2ZW4g
d2lkdGggb3IgaGVpZ2h0Iik7Ci0gICAgfQotCi0gICAgdGhpcy5vdXRwdXRGaWxlV2lkdGggPSBv
dXRwdXRGaWxlV2lkdGg7Ci0gICAgdGhpcy5vdXRwdXRGaWxlSGVpZ2h0ID0gb3V0cHV0RmlsZUhl
aWdodDsKLQotICAgIG91dHB1dEZyYW1lU2l6ZSA9IG91dHB1dEZpbGVXaWR0aCAqIG91dHB1dEZp
bGVIZWlnaHQgKiAzIC8gMjsKLSAgICBvdXRwdXRGcmFtZUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxs
b2NhdGVEaXJlY3Qob3V0cHV0RnJhbWVTaXplKTsKLQotICAgIHZpZGVvT3V0RmlsZSA9IG5ldyBG
aWxlT3V0cHV0U3RyZWFtKG91dHB1dEZpbGUpOwotICAgIHZpZGVvT3V0RmlsZS53cml0ZSgKLSAg
ICAgICAgKCJZVVY0TVBFRzIgQzQyMCBXIiArIG91dHB1dEZpbGVXaWR0aCArICIgSCIgKyBvdXRw
dXRGaWxlSGVpZ2h0ICsgIiBJcCBGMzA6MSBBMToxXG4iKQotICAgICAgICAgICAgLmdldEJ5dGVz
KCkpOwotCi0gICAgcmVuZGVyVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoVEFHKTsKLSAgICBy
ZW5kZXJUaHJlYWQuc3RhcnQoKTsKLSAgICByZW5kZXJUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRs
ZXIocmVuZGVyVGhyZWFkLmdldExvb3BlcigpKTsKLQotICAgIFRocmVhZFV0aWxzLmludm9rZUF0
RnJvbnRVbmludGVycnVwdGlibHkocmVuZGVyVGhyZWFkSGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGVn
bEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShzaGFyZWRDb250ZXh0LCBFZ2xCYXNlLkNPTkZJR19QSVhF
TF9CVUZGRVIpOwotICAgICAgICBlZ2xCYXNlLmNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKTsK
LSAgICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgICB5dXZDb252ZXJ0ZXIgPSBu
ZXcgWXV2Q29udmVydGVyKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoZmluYWwgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUg
ZnJhbWUpIHsKLSAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHJlbmRl
ckZyYW1lT25SZW5kZXJUaHJlYWQoZnJhbWUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHJlbmRlckZyYW1lT25SZW5kZXJUaHJlYWQoVmlkZW9SZW5kZXJlci5JNDIw
RnJhbWUgZnJhbWUpIHsKLSAgICBmaW5hbCBmbG9hdCBmcmFtZUFzcGVjdFJhdGlvID0gKGZsb2F0
KSBmcmFtZS5yb3RhdGVkV2lkdGgoKSAvIChmbG9hdCkgZnJhbWUucm90YXRlZEhlaWdodCgpOwot
Ci0gICAgZmluYWwgZmxvYXRbXSByb3RhdGVkU2FtcGxpbmdNYXRyaXggPQotICAgICAgICBSZW5k
ZXJlckNvbW1vbi5yb3RhdGVUZXh0dXJlTWF0cml4KGZyYW1lLnNhbXBsaW5nTWF0cml4LCBmcmFt
ZS5yb3RhdGlvbkRlZ3JlZSk7Ci0gICAgZmluYWwgZmxvYXRbXSBsYXlvdXRNYXRyaXggPSBSZW5k
ZXJlckNvbW1vbi5nZXRMYXlvdXRNYXRyaXgoCi0gICAgICAgIGZhbHNlLCBmcmFtZUFzcGVjdFJh
dGlvLCAoZmxvYXQpIG91dHB1dEZpbGVXaWR0aCAvIG91dHB1dEZpbGVIZWlnaHQpOwotICAgIGZp
bmFsIGZsb2F0W10gdGV4TWF0cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNlcyhy
b3RhdGVkU2FtcGxpbmdNYXRyaXgsIGxheW91dE1hdHJpeCk7Ci0KLSAgICB0cnkgewotICAgICAg
dmlkZW9PdXRGaWxlLndyaXRlKCJGUkFNRVxuIi5nZXRCeXRlcygpKTsKLSAgICAgIGlmICghZnJh
bWUueXV2RnJhbWUpIHsKLSAgICAgICAgeXV2Q29udmVydGVyLmNvbnZlcnQob3V0cHV0RnJhbWVC
dWZmZXIsIG91dHB1dEZpbGVXaWR0aCwgb3V0cHV0RmlsZUhlaWdodCwgb3V0cHV0RmlsZVdpZHRo
LAotICAgICAgICAgICAgZnJhbWUudGV4dHVyZUlkLCB0ZXhNYXRyaXgpOwotCi0gICAgICAgIGlu
dCBzdHJpZGUgPSBvdXRwdXRGaWxlV2lkdGg7Ci0gICAgICAgIGJ5dGVbXSBkYXRhID0gb3V0cHV0
RnJhbWVCdWZmZXIuYXJyYXkoKTsKLSAgICAgICAgaW50IG9mZnNldCA9IG91dHB1dEZyYW1lQnVm
ZmVyLmFycmF5T2Zmc2V0KCk7Ci0KLSAgICAgICAgLy8gV3JpdGUgWQotICAgICAgICB2aWRlb091
dEZpbGUud3JpdGUoZGF0YSwgb2Zmc2V0LCBvdXRwdXRGaWxlV2lkdGggKiBvdXRwdXRGaWxlSGVp
Z2h0KTsKLQotICAgICAgICAvLyBXcml0ZSBVCi0gICAgICAgIGZvciAoaW50IHIgPSBvdXRwdXRG
aWxlSGVpZ2h0OyByIDwgb3V0cHV0RmlsZUhlaWdodCAqIDMgLyAyOyArK3IpIHsKLSAgICAgICAg
ICB2aWRlb091dEZpbGUud3JpdGUoZGF0YSwgb2Zmc2V0ICsgciAqIHN0cmlkZSwgc3RyaWRlIC8g
Mik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXcml0ZSBWCi0gICAgICAgIGZvciAoaW50IHIg
PSBvdXRwdXRGaWxlSGVpZ2h0OyByIDwgb3V0cHV0RmlsZUhlaWdodCAqIDMgLyAyOyArK3IpIHsK
LSAgICAgICAgICB2aWRlb091dEZpbGUud3JpdGUoZGF0YSwgb2Zmc2V0ICsgciAqIHN0cmlkZSAr
IHN0cmlkZSAvIDIsIHN0cmlkZSAvIDIpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBuYXRpdmVJNDIwU2NhbGUoZnJhbWUueXV2UGxhbmVzWzBdLCBmcmFtZS55dXZTdHJpZGVz
WzBdLCBmcmFtZS55dXZQbGFuZXNbMV0sCi0gICAgICAgICAgICBmcmFtZS55dXZTdHJpZGVzWzFd
LCBmcmFtZS55dXZQbGFuZXNbMl0sIGZyYW1lLnl1dlN0cmlkZXNbMl0sIGZyYW1lLndpZHRoLCBm
cmFtZS5oZWlnaHQsCi0gICAgICAgICAgICBvdXRwdXRGcmFtZUJ1ZmZlciwgb3V0cHV0RmlsZVdp
ZHRoLCBvdXRwdXRGaWxlSGVpZ2h0KTsKLSAgICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKAotICAg
ICAgICAgICAgb3V0cHV0RnJhbWVCdWZmZXIuYXJyYXkoKSwgb3V0cHV0RnJhbWVCdWZmZXIuYXJy
YXlPZmZzZXQoKSwgb3V0cHV0RnJhbWVTaXplKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChJT0V4
Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHRvIGZp
bGUgZm9yIHZpZGVvIG91dCIpOwotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7
Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZy
YW1lKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVsZWFzZSBhbGwgcmVzb3VyY2VzLiBB
bGwgYWxyZWFkeSBwb3N0ZWQgZnJhbWVzIHdpbGwgYmUgcmVuZGVyZWQgZmlyc3QuCi0gICAqLwot
ICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGNsZWFu
dXBCYXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIHJlbmRlclRocmVhZEhhbmRs
ZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICB2aWRlb091dEZpbGUuY2xvc2Uo
KTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dpbmcu
ZChUQUcsICJFcnJvciBjbG9zaW5nIG91dHB1dCB2aWRlbyBmaWxlIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgeXV2Q29udmVydGVyLnJlbGVhc2UoKTsKLSAgICAgICAgZWdsQmFzZS5yZWxlYXNlKCk7
Ci0gICAgICAgIHJlbmRlclRocmVhZC5xdWl0KCk7Ci0gICAgICAgIGNsZWFudXBCYXJyaWVyLmNv
dW50RG93bigpOwotICAgICAgfQotICAgIH0pOwotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRl
cnJ1cHRpYmx5KGNsZWFudXBCYXJyaWVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZl
IHZvaWQgbmF0aXZlSTQyMFNjYWxlKEJ5dGVCdWZmZXIgc3JjWSwgaW50IHN0cmlkZVksIEJ5dGVC
dWZmZXIgc3JjVSwKLSAgICAgIGludCBzdHJpZGVVLCBCeXRlQnVmZmVyIHNyY1YsIGludCBzdHJp
ZGVWLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEJ5dGVCdWZmZXIgZHN0LAotICAgICAgaW50IGRz
dFdpZHRoLCBpbnQgZHN0SGVpZ2h0KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9S
ZW5kZXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5kZXJl
ci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVy
ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1MCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwot
Ci0vKioKLSAqIEphdmEgdmVyc2lvbiBvZiBWaWRlb1NpbmtJbnRlcmZhY2UuICBJbiBhZGRpdGlv
biB0byBhbGxvd2luZyBjbGllbnRzIHRvCi0gKiBkZWZpbmUgdGhlaXIgb3duIHJlbmRlcmluZyBi
ZWhhdmlvciAoYnkgcGFzc2luZyBpbiBhIENhbGxiYWNrcyBvYmplY3QpLCB0aGlzCi0gKiBjbGFz
cyBhbHNvIHByb3ZpZGVzIGEgY3JlYXRlR3VpKCkgbWV0aG9kIGZvciBjcmVhdGluZyBhIEdVSS1y
ZW5kZXJpbmcgd2luZG93Ci0gKiBvbiB2YXJpb3VzIHBsYXRmb3Jtcy4KLSAqLwotcHVibGljIGNs
YXNzIFZpZGVvUmVuZGVyZXIgewotICAvKioKLSAgICogSmF2YSB2ZXJzaW9uIG9mIHdlYnJ0Yzo6
VmlkZW9GcmFtZS4gRnJhbWVzIGFyZSBvbmx5IGNvbnN0cnVjdGVkIGZyb20gbmF0aXZlIGNvZGUg
YW5kIHRlc3QKLSAgICogY29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSTQyMEZy
YW1lIHsKLSAgICBwdWJsaWMgZmluYWwgaW50IHdpZHRoOwotICAgIHB1YmxpYyBmaW5hbCBpbnQg
aGVpZ2h0OwotICAgIHB1YmxpYyBmaW5hbCBpbnRbXSB5dXZTdHJpZGVzOwotICAgIHB1YmxpYyBC
eXRlQnVmZmVyW10geXV2UGxhbmVzOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHl1dkZyYW1l
OwotICAgIC8vIE1hdHJpeCB0aGF0IHRyYW5zZm9ybXMgc3RhbmRhcmQgY29vcmRpbmF0ZXMgdG8g
dGhlaXIgcHJvcGVyIHNhbXBsaW5nIGxvY2F0aW9ucyBpbgotICAgIC8vIHRoZSB0ZXh0dXJlLiBU
aGlzIHRyYW5zZm9ybSBjb21wZW5zYXRlcyBmb3IgYW55IHByb3BlcnRpZXMgb2YgdGhlIHZpZGVv
IHNvdXJjZSB0aGF0Ci0gICAgLy8gY2F1c2UgaXQgdG8gYXBwZWFyIGRpZmZlcmVudCBmcm9tIGEg
bm9ybWFsaXplZCB0ZXh0dXJlLiBUaGlzIG1hdHJpeCBkb2VzIG5vdCB0YWtlCi0gICAgLy8gfHJv
dGF0aW9uRGVncmVlfCBpbnRvIGFjY291bnQuCi0gICAgcHVibGljIGZpbmFsIGZsb2F0W10gc2Ft
cGxpbmdNYXRyaXg7Ci0gICAgcHVibGljIGludCB0ZXh0dXJlSWQ7Ci0gICAgLy8gRnJhbWUgcG9p
bnRlciBpbiBDKysuCi0gICAgcHJpdmF0ZSBsb25nIG5hdGl2ZUZyYW1lUG9pbnRlcjsKLQotICAg
IC8vIHJvdGF0aW9uRGVncmVlIGlzIHRoZSBkZWdyZWUgdGhhdCB0aGUgZnJhbWUgbXVzdCBiZSBy
b3RhdGVkIGNsb2Nrd2lzZWx5Ci0gICAgLy8gdG8gYmUgcmVuZGVyZWQgY29ycmVjdGx5LgotICAg
IHB1YmxpYyBpbnQgcm90YXRpb25EZWdyZWU7Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3Qg
YSBmcmFtZSBvZiB0aGUgZ2l2ZW4gZGltZW5zaW9ucyB3aXRoIHRoZSBzcGVjaWZpZWQgcGxhbmFy
IGRhdGEuCi0gICAgICovCi0gICAgSTQyMEZyYW1lKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IHJvdGF0aW9uRGVncmVlLCBpbnRbXSB5dXZTdHJpZGVzLCBCeXRlQnVmZmVyW10geXV2UGxhbmVz
LAotICAgICAgICBsb25nIG5hdGl2ZUZyYW1lUG9pbnRlcikgewotICAgICAgdGhpcy53aWR0aCA9
IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLnl1dlN0cmlk
ZXMgPSB5dXZTdHJpZGVzOwotICAgICAgdGhpcy55dXZQbGFuZXMgPSB5dXZQbGFuZXM7Ci0gICAg
ICB0aGlzLnl1dkZyYW1lID0gdHJ1ZTsKLSAgICAgIHRoaXMucm90YXRpb25EZWdyZWUgPSByb3Rh
dGlvbkRlZ3JlZTsKLSAgICAgIHRoaXMubmF0aXZlRnJhbWVQb2ludGVyID0gbmF0aXZlRnJhbWVQ
b2ludGVyOwotICAgICAgaWYgKHJvdGF0aW9uRGVncmVlICUgOTAgIT0gMCkgewotICAgICAgICB0
aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSb3RhdGlvbiBkZWdyZWUgbm90IG11
bHRpcGxlIG9mIDkwOiAiICsgcm90YXRpb25EZWdyZWUpOwotICAgICAgfQotICAgICAgLy8gVGhl
IGNvbnZlbnRpb24gaW4gV2ViUlRDIGlzIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYSBCeXRl
QnVmZmVyIGNvcnJlc3BvbmRzIHRvIHRoZQotICAgICAgLy8gdG9wLWxlZnQgY29ybmVyIG9mIHRo
ZSBpbWFnZSwgYnV0IGluIGdsVGV4SW1hZ2UyRCgpIHRoZSBmaXJzdCBlbGVtZW50IGNvcnJlc3Bv
bmRzIHRvIHRoZQotICAgICAgLy8gYm90dG9tLWxlZnQgY29ybmVyLiBUaGlzIGRpc2NyZXBhbmN5
IGlzIGNvcnJlY3RlZCBieSBzZXR0aW5nIGEgdmVydGljYWwgZmxpcCBhcyBzYW1wbGluZwotICAg
ICAgLy8gbWF0cml4LgotICAgICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgICAgc2FtcGxpbmdN
YXRyaXggPSBuZXcgZmxvYXRbXSB7Ci0gICAgICAgICAgMSwgIDAsIDAsIDAsCi0gICAgICAgICAg
MCwgLTEsIDAsIDAsCi0gICAgICAgICAgMCwgIDAsIDEsIDAsCi0gICAgICAgICAgMCwgIDEsIDAs
IDF9OwotICAgICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gICAgfQotCi0gICAgLyoqCi0gICAgICog
Q29uc3RydWN0IGEgdGV4dHVyZSBmcmFtZSBvZiB0aGUgZ2l2ZW4gZGltZW5zaW9ucyB3aXRoIGRh
dGEgaW4gU3VyZmFjZVRleHR1cmUKLSAgICAgKi8KLSAgICBJNDIwRnJhbWUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgcm90YXRpb25EZWdyZWUsIGludCB0ZXh0dXJlSWQsIGZsb2F0W10gc2Ft
cGxpbmdNYXRyaXgsCi0gICAgICAgIGxvbmcgbmF0aXZlRnJhbWVQb2ludGVyKSB7Ci0gICAgICB0
aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHRo
aXMueXV2U3RyaWRlcyA9IG51bGw7Ci0gICAgICB0aGlzLnl1dlBsYW5lcyA9IG51bGw7Ci0gICAg
ICB0aGlzLnNhbXBsaW5nTWF0cml4ID0gc2FtcGxpbmdNYXRyaXg7Ci0gICAgICB0aGlzLnRleHR1
cmVJZCA9IHRleHR1cmVJZDsKLSAgICAgIHRoaXMueXV2RnJhbWUgPSBmYWxzZTsKLSAgICAgIHRo
aXMucm90YXRpb25EZWdyZWUgPSByb3RhdGlvbkRlZ3JlZTsKLSAgICAgIHRoaXMubmF0aXZlRnJh
bWVQb2ludGVyID0gbmF0aXZlRnJhbWVQb2ludGVyOwotICAgICAgaWYgKHJvdGF0aW9uRGVncmVl
ICUgOTAgIT0gMCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9u
KCJSb3RhdGlvbiBkZWdyZWUgbm90IG11bHRpcGxlIG9mIDkwOiAiICsgcm90YXRpb25EZWdyZWUp
OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgcm90YXRlZFdpZHRoKCkgewotICAg
ICAgcmV0dXJuIChyb3RhdGlvbkRlZ3JlZSAlIDE4MCA9PSAwKSA/IHdpZHRoIDogaGVpZ2h0Owot
ICAgIH0KLQotICAgIHB1YmxpYyBpbnQgcm90YXRlZEhlaWdodCgpIHsKLSAgICAgIHJldHVybiAo
cm90YXRpb25EZWdyZWUgJSAxODAgPT0gMCkgPyBoZWlnaHQgOiB3aWR0aDsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0dXJu
IHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIjoiICsgeXV2U3RyaWRlc1swXSArICI6IiArIHl1dlN0
cmlkZXNbMV0gKyAiOiIgKyB5dXZTdHJpZGVzWzJdOwotICAgIH0KLSAgfQotCi0gIC8vIEhlbHBl
ciBuYXRpdmUgZnVuY3Rpb24gdG8gZG8gYSB2aWRlbyBmcmFtZSBwbGFuZSBjb3B5aW5nLgotICBw
dWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUNvcHlQbGFuZSgKLSAgICAgIEJ5dGVCdWZm
ZXIgc3JjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzcmNTdHJpZGUsIEJ5dGVCdWZmZXIg
ZHN0LCBpbnQgZHN0U3RyaWRlKTsKLQotICAvKiogVGhlIHJlYWwgbWVhdCBvZiBWaWRlb1NpbmtJ
bnRlcmZhY2UuICovCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIENhbGxiYWNrcyB7Ci0gICAg
Ly8gfGZyYW1lfCBtaWdodCBoYXZlIHBlbmRpbmcgcm90YXRpb24gYW5kIGltcGxlbWVudGF0aW9u
IG9mIENhbGxiYWNrcwotICAgIC8vIHNob3VsZCBoYW5kbGUgdGhhdCBieSBhcHBseWluZyByb3Rh
dGlvbiBkdXJpbmcgcmVuZGVyaW5nLiBUaGUgY2FsbGVlCi0gICAgLy8gaXMgcmVzcG9uc2libGUg
Zm9yIHNpZ25hbGluZyB3aGVuIGl0IGlzIGRvbmUgd2l0aCB8ZnJhbWV8IGJ5IGNhbGxpbmcKLSAg
ICAvLyByZW5kZXJGcmFtZURvbmUoZnJhbWUpLgotICAgIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1l
KEk0MjBGcmFtZSBmcmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtdXN0IGJlIGNhbGxl
ZCBhZnRlciBldmVyeSByZW5kZXJGcmFtZSgpIHRvIHJlbGVhc2UgdGhlIGZyYW1lLgotICAgKi8K
LSAgcHVibGljIHN0YXRpYyB2b2lkIHJlbmRlckZyYW1lRG9uZShJNDIwRnJhbWUgZnJhbWUpIHsK
LSAgICBmcmFtZS55dXZQbGFuZXMgPSBudWxsOwotICAgIGZyYW1lLnRleHR1cmVJZCA9IDA7Ci0g
ICAgaWYgKGZyYW1lLm5hdGl2ZUZyYW1lUG9pbnRlciAhPSAwKSB7Ci0gICAgICByZWxlYXNlTmF0
aXZlRnJhbWUoZnJhbWUubmF0aXZlRnJhbWVQb2ludGVyKTsKLSAgICAgIGZyYW1lLm5hdGl2ZUZy
YW1lUG9pbnRlciA9IDA7Ci0gICAgfQotICB9Ci0KLSAgbG9uZyBuYXRpdmVWaWRlb1JlbmRlcmVy
OwotCi0gIHB1YmxpYyBWaWRlb1JlbmRlcmVyKENhbGxiYWNrcyBjYWxsYmFja3MpIHsKLSAgICBu
YXRpdmVWaWRlb1JlbmRlcmVyID0gbmF0aXZlV3JhcFZpZGVvUmVuZGVyZXIoY2FsbGJhY2tzKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaWYgKG5hdGl2ZVZpZGVvUmVu
ZGVyZXIgPT0gMCkgewotICAgICAgLy8gQWxyZWFkeSBkaXNwb3NlZC4KLSAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBmcmVlV3JhcHBlZFZpZGVvUmVuZGVyZXIobmF0aXZlVmlkZW9SZW5kZXJl
cik7Ci0gICAgbmF0aXZlVmlkZW9SZW5kZXJlciA9IDA7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRp
YyBuYXRpdmUgbG9uZyBuYXRpdmVXcmFwVmlkZW9SZW5kZXJlcihDYWxsYmFja3MgY2FsbGJhY2tz
KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZVdyYXBwZWRWaWRlb1JlbmRlcmVy
KGxvbmcgbmF0aXZlVmlkZW9SZW5kZXJlcik7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lk
IHJlbGVhc2VOYXRpdmVGcmFtZShsb25nIG5hdGl2ZUZyYW1lUG9pbnRlcik7Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXJHdWkuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXJHdWkuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyR3VpLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAt
MSw2MjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwot
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyLkk0MjBGcmFtZTsKLQotaW1wb3J0IGFu
ZHJvaWQuYW5ub3RhdGlvbi5TdXBwcmVzc0xpbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Q
b2ludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5vcGVu
Z2wuRUdMMTQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQu
b3BlbmdsLkdMU3VyZmFjZVZpZXc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1w
b3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotCi1pbXBvcnQgamF2YXgu
bWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlv
bi5raHJvbm9zLmVnbC5FR0xDb25maWc7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9u
b3MuZWdsLkVHTENvbnRleHQ7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mub3Bl
bmdsZXMuR0wxMDsKLQotLyoqCi0gKiBFZmZpY2llbnRseSByZW5kZXJzIFlVViBmcmFtZXMgdXNp
bmcgdGhlIEdQVSBmb3IgQ1NDLgotICogQ2xpZW50cyB3aWxsIHdhbnQgZmlyc3QgdG8gY2FsbCBz
ZXRWaWV3KCkgdG8gcGFzcyBHTFN1cmZhY2VWaWV3Ci0gKiBhbmQgdGhlbiBmb3IgZWFjaCB2aWRl
byBzdHJlYW0gZWl0aGVyIGNyZWF0ZSBpbnN0YW5jZSBvZiBWaWRlb1JlbmRlcmVyIHVzaW5nCi0g
KiBjcmVhdGVHdWkoKSBjYWxsIG9yIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGludGVyZmFjZSB1
c2luZyBjcmVhdGUoKSBjYWxsLgotICogT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGNh
biBiZSBjcmVhdGVkLgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9SZW5kZXJlckd1aSBpbXBsZW1l
bnRzIEdMU3VyZmFjZVZpZXcuUmVuZGVyZXIgewotICAvLyB8aW5zdGFuY2V8LCB8aW5zdGFuY2Uu
c3VyZmFjZXwsIHxlZ2xDb250ZXh0fCwgYW5kIHxlZ2xDb250ZXh0UmVhZHl8IGFyZSBzeW5jaHJv
bml6ZWQgb24KLSAgLy8gfFZpZGVvUmVuZGVyZXJHdWkuY2xhc3N8LgotICBwcml2YXRlIHN0YXRp
YyBWaWRlb1JlbmRlcmVyR3VpIGluc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgUnVu
bmFibGUgZWdsQ29udGV4dFJlYWR5ID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIFRBRyA9ICJWaWRlb1JlbmRlcmVyR3VpIjsKLSAgcHJpdmF0ZSBHTFN1cmZhY2VWaWV3IHN1
cmZhY2U7Ci0gIHByaXZhdGUgc3RhdGljIEVnbEJhc2UuQ29udGV4dCBlZ2xDb250ZXh0ID0gbnVs
bDsKLSAgLy8gSW5kaWNhdGVzIGlmIFN1cmZhY2VWaWV3LlJlbmRlcmVyLm9uU3VyZmFjZUNyZWF0
ZWQgd2FzIGNhbGxlZC4KLSAgLy8gSWYgdHJ1ZSB0aGVuIGZvciBldmVyeSBuZXdseSBjcmVhdGVk
IHl1diBpbWFnZSByZW5kZXJlciBjcmVhdGVUZXh0dXJlKCkKLSAgLy8gc2hvdWxkIGJlIGNhbGxl
ZC4gVGhlIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIG9uIG11bHRpcGxlIHRocmVhZHMgYW5kCi0gIC8v
IGFsbCBhY2Nlc3NlcyBhcmUgc3luY2hyb25pemVkIG9uIHl1dkltYWdlUmVuZGVyZXJzJyBvYmpl
Y3QgbG9jay4KLSAgcHJpdmF0ZSBib29sZWFuIG9uU3VyZmFjZUNyZWF0ZWRDYWxsZWQ7Ci0gIHBy
aXZhdGUgaW50IHNjcmVlbldpZHRoOwotICBwcml2YXRlIGludCBzY3JlZW5IZWlnaHQ7Ci0gIC8v
IExpc3Qgb2YgeXV2IHJlbmRlcmVycy4KLSAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8WXV2SW1h
Z2VSZW5kZXJlcj4geXV2SW1hZ2VSZW5kZXJlcnM7Ci0gIC8vIFJlbmRlciBhbmQgZHJhdyB0aHJl
YWRzLgotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgcmVuZGVyRnJhbWVUaHJlYWQ7Ci0gIHByaXZh
dGUgc3RhdGljIFRocmVhZCBkcmF3VGhyZWFkOwotCi0gIHByaXZhdGUgVmlkZW9SZW5kZXJlckd1
aShHTFN1cmZhY2VWaWV3IHN1cmZhY2UpIHsKLSAgICB0aGlzLnN1cmZhY2UgPSBzdXJmYWNlOwot
ICAgIC8vIENyZWF0ZSBhbiBPcGVuR0wgRVMgMi4wIGNvbnRleHQuCi0gICAgc3VyZmFjZS5zZXRQ
cmVzZXJ2ZUVHTENvbnRleHRPblBhdXNlKHRydWUpOwotICAgIHN1cmZhY2Uuc2V0RUdMQ29udGV4
dENsaWVudFZlcnNpb24oMik7Ci0gICAgc3VyZmFjZS5zZXRSZW5kZXJlcih0aGlzKTsKLSAgICBz
dXJmYWNlLnNldFJlbmRlck1vZGUoR0xTdXJmYWNlVmlldy5SRU5ERVJNT0RFX1dIRU5fRElSVFkp
OwotCi0gICAgeXV2SW1hZ2VSZW5kZXJlcnMgPSBuZXcgQXJyYXlMaXN0PFl1dkltYWdlUmVuZGVy
ZXI+KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgdXNlZCB0byBkaXNwbGF5IHN0cmVhbSBv
ZiBZVVY0MjAgZnJhbWVzIGF0IHBhcnRpY3VsYXIgbG9jYXRpb24KLSAgICogb24gYSBzY3JlZW4u
IE5ldyB2aWRlbyBmcmFtZXMgYXJlIHNlbnQgdG8gZGlzcGxheSB1c2luZyByZW5kZXJGcmFtZSgp
Ci0gICAqIGNhbGwuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBZdXZJbWFnZVJlbmRl
cmVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICAgIC8vIHxzdXJmYWNl
fCBpcyBzeW5jaHJvbml6ZWQgb24gfHRoaXN8LgotICAgIHByaXZhdGUgR0xTdXJmYWNlVmlldyBz
dXJmYWNlOwotICAgIHByaXZhdGUgaW50IGlkOwotICAgIC8vIFRPRE8obWFnamVkKTogRGVsZXRl
IEdMIHJlc291cmNlcyBpbiByZWxlYXNlKCkuIE11c3QgYmUgc3luY2hyb25pemVkIHdpdGggZHJh
dygpLiBXZSBhcmUKLSAgICAvLyBjdXJyZW50bHkgbGVha2luZyByZXNvdXJjZXMgdG8gYXZvaWQg
YSByYXJlIGNyYXNoIGluIHJlbGVhc2UoKSB3aGVyZSB0aGUgRUdMQ29udGV4dCBoYXMKLSAgICAv
LyBiZWNvbWUgaW52YWxpZCBiZWZvcmVoYW5kLgotICAgIHByaXZhdGUgaW50W10geXV2VGV4dHVy
ZXMgPSB7MCwgMCwgMH07Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZW5kZXJlckNvbW1vbi5ZdXZVcGxv
YWRlciB5dXZVcGxvYWRlciA9IG5ldyBSZW5kZXJlckNvbW1vbi5ZdXZVcGxvYWRlcigpOwotICAg
IHByaXZhdGUgZmluYWwgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyOwotICAgIC8vIFJl
c291cmNlcyBmb3IgbWFraW5nIGEgZGVlcCBjb3B5IG9mIGluY29taW5nIE9FUyB0ZXh0dXJlIGZy
YW1lLgotICAgIHByaXZhdGUgR2xUZXh0dXJlRnJhbWVCdWZmZXIgdGV4dHVyZUNvcHk7Ci0KLSAg
ICAvLyBQZW5kaW5nIGZyYW1lIHRvIHJlbmRlci4gU2VydmVzIGFzIGEgcXVldWUgd2l0aCBzaXpl
IDEuIHxwZW5kaW5nRnJhbWV8IGlzIGFjY2Vzc2VkIGJ5IHR3bwotICAgIC8vIHRocmVhZHMgLSBm
cmFtZXMgYXJlIHJlY2VpdmVkIGluIHJlbmRlckZyYW1lKCkgYW5kIGNvbnN1bWVkIGluIGRyYXco
KS4gRnJhbWVzIGFyZSBkcm9wcGVkIGluCi0gICAgLy8gcmVuZGVyRnJhbWUoKSBpZiB0aGUgcHJl
dmlvdXMgZnJhbWUgaGFzIG5vdCBiZWVuIHJlbmRlcmVkIHlldC4KLSAgICBwcml2YXRlIEk0MjBG
cmFtZSBwZW5kaW5nRnJhbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgcGVuZGluZ0ZyYW1l
TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICAvLyBUeXBlIG9mIHZpZGVvIGZyYW1lIHVzZWQgZm9y
IHJlY2VudCBmcmFtZSByZW5kZXJpbmcuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZW51bSBSZW5kZXJl
clR5cGUgeyBSRU5ERVJFUl9ZVVYsIFJFTkRFUkVSX1RFWFRVUkUgfQotCi0gICAgcHJpdmF0ZSBS
ZW5kZXJlclR5cGUgcmVuZGVyZXJUeXBlOwotICAgIHByaXZhdGUgUmVuZGVyZXJDb21tb24uU2Nh
bGluZ1R5cGUgc2NhbGluZ1R5cGU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1pcnJvcjsKLSAgICBw
cml2YXRlIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzOwotICAg
IC8vIEZsYWcgaWYgcmVuZGVyRnJhbWUoKSB3YXMgZXZlciBjYWxsZWQuCi0gICAgYm9vbGVhbiBz
ZWVuRnJhbWU7Ci0gICAgLy8gVG90YWwgbnVtYmVyIG9mIHZpZGVvIGZyYW1lcyByZWNlaXZlZCBp
biByZW5kZXJGcmFtZSgpIGNhbGwuCi0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVjZWl2ZWQ7Ci0g
ICAgLy8gTnVtYmVyIG9mIHZpZGVvIGZyYW1lcyBkcm9wcGVkIGJ5IHJlbmRlckZyYW1lKCkgYmVj
YXVzZSBwcmV2aW91cwotICAgIC8vIGZyYW1lIGhhcyBub3QgYmVlbiByZW5kZXJlZCB5ZXQuCi0g
ICAgcHJpdmF0ZSBpbnQgZnJhbWVzRHJvcHBlZDsKLSAgICAvLyBOdW1iZXIgb2YgcmVuZGVyZWQg
dmlkZW8gZnJhbWVzLgotICAgIHByaXZhdGUgaW50IGZyYW1lc1JlbmRlcmVkOwotICAgIC8vIFRp
bWUgaW4gbnMgd2hlbiB0aGUgZmlyc3QgdmlkZW8gZnJhbWUgd2FzIHJlbmRlcmVkLgotICAgIHBy
aXZhdGUgbG9uZyBzdGFydFRpbWVOcyA9IC0xOwotICAgIC8vIFRpbWUgaW4gbnMgc3BlbnQgaW4g
ZHJhdygpIGZ1bmN0aW9uLgotICAgIHByaXZhdGUgbG9uZyBkcmF3VGltZU5zOwotICAgIC8vIFRp
bWUgaW4gbnMgc3BlbnQgaW4gZHJhdygpIGNvcHlpbmcgcmVzb3VyY2VzIGZyb20gfHBlbmRpbmdG
cmFtZXwgLSBpbmNsdWRpbmcgdXBsb2FkaW5nIGZyYW1lCi0gICAgLy8gZGF0YSB0byByZW5kZXJp
bmcgcGxhbmVzLgotICAgIHByaXZhdGUgbG9uZyBjb3B5VGltZU5zOwotICAgIC8vIFRoZSBhbGxv
d2VkIHZpZXcgYXJlYSBpbiBwZXJjZW50YWdlIG9mIHNjcmVlbiBzaXplLgotICAgIHByaXZhdGUg
ZmluYWwgUmVjdCBsYXlvdXRJblBlcmNlbnRhZ2U7Ci0gICAgLy8gVGhlIGFjdHVhbCB2aWV3IGFy
ZWEgaW4gcGl4ZWxzLiBJdCBpcyBhIGNlbnRlcmVkIHN1YnJlY3RhbmdsZSBvZiB0aGUgcmVjdGFu
Z2xlIGRlZmluZWQgYnkKLSAgICAvLyB8bGF5b3V0SW5QZXJjZW50YWdlfC4KLSAgICBwcml2YXRl
IGZpbmFsIFJlY3QgZGlzcGxheUxheW91dCA9IG5ldyBSZWN0KCk7Ci0gICAgLy8gQ2FjaGVkIGxh
eW91dCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIGNhbGN1bGF0ZWQgZnJvbSBjdXJyZW50IGxheW91
dCBwYXJhbWV0ZXJzLgotICAgIHByaXZhdGUgZmxvYXRbXSBsYXlvdXRNYXRyaXg7Ci0gICAgLy8g
RmxhZyBpZiBsYXlvdXQgdHJhbnNmb3JtYXRpb24gbWF0cml4IHVwZGF0ZSBpcyBuZWVkZWQuCi0g
ICAgcHJpdmF0ZSBib29sZWFuIHVwZGF0ZUxheW91dFByb3BlcnRpZXM7Ci0gICAgLy8gTGF5b3V0
IHByb3BlcnRpZXMgdXBkYXRlIGxvY2suIEd1YXJkcyB8dXBkYXRlTGF5b3V0UHJvcGVydGllc3ws
IHxzY3JlZW5XaWR0aHwsCi0gICAgLy8gfHNjcmVlbkhlaWdodHwsIHx2aWRlb1dpZHRofCwgfHZp
ZGVvSGVpZ2h0fCwgfHJvdGF0aW9uRGVncmVlfCwgfHNjYWxpbmdUeXBlfCwgYW5kIHxtaXJyb3J8
LgotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IHVwZGF0ZUxheW91dExvY2sgPSBuZXcgT2JqZWN0
KCk7Ci0gICAgLy8gVGV4dHVyZSBzYW1wbGluZyBtYXRyaXguCi0gICAgcHJpdmF0ZSBmbG9hdFtd
IHJvdGF0ZWRTYW1wbGluZ01hdHJpeDsKLSAgICAvLyBWaWV3cG9ydCBkaW1lbnNpb25zLgotICAg
IHByaXZhdGUgaW50IHNjcmVlbldpZHRoOwotICAgIHByaXZhdGUgaW50IHNjcmVlbkhlaWdodDsK
LSAgICAvLyBWaWRlbyBkaW1lbnNpb24uCi0gICAgcHJpdmF0ZSBpbnQgdmlkZW9XaWR0aDsKLSAg
ICBwcml2YXRlIGludCB2aWRlb0hlaWdodDsKLQotICAgIC8vIFRoaXMgaXMgdGhlIGRlZ3JlZSB0
aGF0IHRoZSBmcmFtZSBzaG91bGQgYmUgcm90YXRlZCBjbG9ja3dpc2VseSB0byBoYXZlCi0gICAg
Ly8gaXQgcmVuZGVyZWQgdXAgcmlnaHQuCi0gICAgcHJpdmF0ZSBpbnQgcm90YXRpb25EZWdyZWU7
Ci0KLSAgICBwcml2YXRlIFl1dkltYWdlUmVuZGVyZXIoR0xTdXJmYWNlVmlldyBzdXJmYWNlLCBp
bnQgaWQsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICBSZW5k
ZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IsIFJlbmRl
cmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcikgewotICAgICAgTG9nZ2luZy5kKFRBRywgIll1dklt
YWdlUmVuZGVyZXIuQ3JlYXRlIGlkOiAiICsgaWQpOwotICAgICAgdGhpcy5zdXJmYWNlID0gc3Vy
ZmFjZTsKLSAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICAgIHRoaXMuc2NhbGluZ1R5cGUgPSBzY2Fs
aW5nVHlwZTsKLSAgICAgIHRoaXMubWlycm9yID0gbWlycm9yOwotICAgICAgdGhpcy5kcmF3ZXIg
PSBkcmF3ZXI7Ci0gICAgICBsYXlvdXRJblBlcmNlbnRhZ2UgPSBuZXcgUmVjdCh4LCB5LCBNYXRo
Lm1pbigxMDAsIHggKyB3aWR0aCksIE1hdGgubWluKDEwMCwgeSArIGhlaWdodCkpOwotICAgICAg
dXBkYXRlTGF5b3V0UHJvcGVydGllcyA9IGZhbHNlOwotICAgICAgcm90YXRpb25EZWdyZWUgPSAw
OwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHsKLSAgICAg
IHNlZW5GcmFtZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3luY2hyb25pemVkIHZv
aWQgcmVsZWFzZSgpIHsKLSAgICAgIHN1cmZhY2UgPSBudWxsOwotICAgICAgZHJhd2VyLnJlbGVh
c2UoKTsKLSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0ZyYW1lTG9jaykgewotICAgICAgICBp
ZiAocGVuZGluZ0ZyYW1lICE9IG51bGwpIHsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRl
ckZyYW1lRG9uZShwZW5kaW5nRnJhbWUpOwotICAgICAgICAgIHBlbmRpbmdGcmFtZSA9IG51bGw7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlVGV4
dHVyZXMoKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiICBZdXZJbWFnZVJlbmRlcmVyLmNyZWF0
ZVRleHR1cmVzICIgKyBpZCArICIgb24gR0wgdGhyZWFkOiIKLSAgICAgICAgICAgICAgKyBUaHJl
YWQuY3VycmVudFRocmVhZCgpLmdldElkKCkpOwotCi0gICAgICAvLyBHZW5lcmF0ZSAzIHRleHR1
cmUgaWRzIGZvciBZL1UvViBhbmQgcGxhY2UgdGhlbSBpbnRvIHx5dXZUZXh0dXJlc3wuCi0gICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICB5dXZUZXh0dXJlc1tpXSA9
IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgICAgfQot
ICAgICAgLy8gR2VuZXJhdGUgdGV4dHVyZSBhbmQgZnJhbWVidWZmZXIgZm9yIG9mZnNjcmVlbiB0
ZXh0dXJlIGNvcHkuCi0gICAgICB0ZXh0dXJlQ29weSA9IG5ldyBHbFRleHR1cmVGcmFtZUJ1ZmZl
cihHTEVTMjAuR0xfUkdCKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTGF5b3V0
TWF0cml4KCkgewotICAgICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlvdXRMb2NrKSB7Ci0gICAg
ICAgIGlmICghdXBkYXRlTGF5b3V0UHJvcGVydGllcykgewotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICAvLyBJbml0aWFsaXplIHRvIG1heGltdW0gYWxsb3dlZCBhcmVhLiBS
b3VuZCB0byBpbnRlZ2VyIGNvb3JkaW5hdGVzIGlud2FyZHMgdGhlIGxheW91dAotICAgICAgICAv
LyBib3VuZGluZyBib3ggKGNlaWwgbGVmdC90b3AgYW5kIGZsb29yIHJpZ2h0L2JvdHRvbSkgdG8g
bm90IGJyZWFrIGNvbnN0cmFpbnRzLgotICAgICAgICBkaXNwbGF5TGF5b3V0LnNldCgoc2NyZWVu
V2lkdGggKiBsYXlvdXRJblBlcmNlbnRhZ2UubGVmdCArIDk5KSAvIDEwMCwKLSAgICAgICAgICAg
IChzY3JlZW5IZWlnaHQgKiBsYXlvdXRJblBlcmNlbnRhZ2UudG9wICsgOTkpIC8gMTAwLAotICAg
ICAgICAgICAgKHNjcmVlbldpZHRoICogbGF5b3V0SW5QZXJjZW50YWdlLnJpZ2h0KSAvIDEwMCwK
LSAgICAgICAgICAgIChzY3JlZW5IZWlnaHQgKiBsYXlvdXRJblBlcmNlbnRhZ2UuYm90dG9tKSAv
IDEwMCk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsgIi4gQWRqdXN0VGV4
dHVyZUNvb3Jkcy4gQWxsb3dlZCBkaXNwbGF5IHNpemU6ICIKLSAgICAgICAgICAgICAgICArIGRp
c3BsYXlMYXlvdXQud2lkdGgoKSArICIgeCAiICsgZGlzcGxheUxheW91dC5oZWlnaHQoKSArICIu
IFZpZGVvOiAiICsgdmlkZW9XaWR0aAotICAgICAgICAgICAgICAgICsgIiB4ICIgKyB2aWRlb0hl
aWdodCArICIuIFJvdGF0aW9uOiAiICsgcm90YXRpb25EZWdyZWUgKyAiLiBNaXJyb3I6ICIgKyBt
aXJyb3IpOwotICAgICAgICBmaW5hbCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gKHJvdGF0aW9u
RGVncmVlICUgMTgwID09IDApCi0gICAgICAgICAgICA/IChmbG9hdCkgdmlkZW9XaWR0aCAvIHZp
ZGVvSGVpZ2h0Ci0gICAgICAgICAgICA6IChmbG9hdCkgdmlkZW9IZWlnaHQgLyB2aWRlb1dpZHRo
OwotICAgICAgICAvLyBBZGp1c3QgZGlzcGxheSBzaXplIGJhc2VkIG9uIHxzY2FsaW5nVHlwZXwu
Ci0gICAgICAgIGZpbmFsIFBvaW50IGRpc3BsYXlTaXplID0gUmVuZGVyZXJDb21tb24uZ2V0RGlz
cGxheVNpemUoCi0gICAgICAgICAgICBzY2FsaW5nVHlwZSwgdmlkZW9Bc3BlY3RSYXRpbywgZGlz
cGxheUxheW91dC53aWR0aCgpLCBkaXNwbGF5TGF5b3V0LmhlaWdodCgpKTsKLSAgICAgICAgZGlz
cGxheUxheW91dC5pbnNldCgoZGlzcGxheUxheW91dC53aWR0aCgpIC0gZGlzcGxheVNpemUueCkg
LyAyLAotICAgICAgICAgICAgKGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkgLSBkaXNwbGF5U2l6ZS55
KSAvIDIpOwotICAgICAgICBMb2dnaW5nLmQoVEFHLAotICAgICAgICAgICAgIiAgQWRqdXN0ZWQg
ZGlzcGxheSBzaXplOiAiICsgZGlzcGxheUxheW91dC53aWR0aCgpICsgIiB4ICIgKyBkaXNwbGF5
TGF5b3V0LmhlaWdodCgpKTsKLSAgICAgICAgbGF5b3V0TWF0cml4ID0gUmVuZGVyZXJDb21tb24u
Z2V0TGF5b3V0TWF0cml4KAotICAgICAgICAgICAgbWlycm9yLCB2aWRlb0FzcGVjdFJhdGlvLCAo
ZmxvYXQpIGRpc3BsYXlMYXlvdXQud2lkdGgoKSAvIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkpOwot
ICAgICAgICB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzID0gZmFsc2U7Ci0gICAgICAgIExvZ2dpbmcu
ZChUQUcsICIgIEFkanVzdFRleHR1cmVDb29yZHMgZG9uZSIpOwotICAgICAgfQotICAgIH0KLQot
ICAgIHByaXZhdGUgdm9pZCBkcmF3KCkgewotICAgICAgaWYgKCFzZWVuRnJhbWUpIHsKLSAgICAg
ICAgLy8gTm8gZnJhbWUgcmVjZWl2ZWQgeWV0IC0gbm90aGluZyB0byByZW5kZXIuCi0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0K
LSAgICAgIGZpbmFsIGJvb2xlYW4gaXNOZXdGcmFtZTsKLSAgICAgIHN5bmNocm9uaXplZCAocGVu
ZGluZ0ZyYW1lTG9jaykgewotICAgICAgICBpc05ld0ZyYW1lID0gKHBlbmRpbmdGcmFtZSAhPSBu
dWxsKTsKLSAgICAgICAgaWYgKGlzTmV3RnJhbWUgJiYgc3RhcnRUaW1lTnMgPT0gLTEpIHsKLSAg
ICAgICAgICBzdGFydFRpbWVOcyA9IG5vdzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc05l
d0ZyYW1lKSB7Ci0gICAgICAgICAgcm90YXRlZFNhbXBsaW5nTWF0cml4ID0gUmVuZGVyZXJDb21t
b24ucm90YXRlVGV4dHVyZU1hdHJpeCgKLSAgICAgICAgICAgICAgcGVuZGluZ0ZyYW1lLnNhbXBs
aW5nTWF0cml4LCBwZW5kaW5nRnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgICAgICAgIGlmIChw
ZW5kaW5nRnJhbWUueXV2RnJhbWUpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyVHlwZSA9IFJlbmRl
cmVyVHlwZS5SRU5ERVJFUl9ZVVY7Ci0gICAgICAgICAgICB5dXZVcGxvYWRlci51cGxvYWRZdXZE
YXRhKHl1dlRleHR1cmVzLCBwZW5kaW5nRnJhbWUud2lkdGgsIHBlbmRpbmdGcmFtZS5oZWlnaHQs
Ci0gICAgICAgICAgICAgICAgcGVuZGluZ0ZyYW1lLnl1dlN0cmlkZXMsIHBlbmRpbmdGcmFtZS55
dXZQbGFuZXMpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZW5kZXJlclR5cGUg
PSBSZW5kZXJlclR5cGUuUkVOREVSRVJfVEVYVFVSRTsKLSAgICAgICAgICAgIC8vIEV4dGVybmFs
IHRleHR1cmUgcmVuZGVyaW5nLiBNYWtlIGEgZGVlcCBjb3B5IG9mIHRoZSBleHRlcm5hbCB0ZXh0
dXJlLgotICAgICAgICAgICAgLy8gUmVhbGxvY2F0ZSBvZmZzY3JlZW4gdGV4dHVyZSBpZiBuZWNl
c3NhcnkuCi0gICAgICAgICAgICB0ZXh0dXJlQ29weS5zZXRTaXplKHBlbmRpbmdGcmFtZS5yb3Rh
dGVkV2lkdGgoKSwgcGVuZGluZ0ZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7Ci0KLSAgICAgICAgICAg
IC8vIEJpbmQgb3VyIG9mZnNjcmVlbiBmcmFtZWJ1ZmZlci4KLSAgICAgICAgICAgIEdMRVMyMC5n
bEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIHRleHR1cmVDb3B5LmdldEZy
YW1lQnVmZmVySWQoKSk7Ci0gICAgICAgICAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImds
QmluZEZyYW1lYnVmZmVyIik7Ci0KLSAgICAgICAgICAgIC8vIENvcHkgdGhlIE9FUyB0ZXh0dXJl
IGNvbnRlbnQuIFRoaXMgd2lsbCBhbHNvIG5vcm1hbGl6ZSB0aGUgc2FtcGxpbmcgbWF0cml4Lgot
ICAgICAgICAgICAgZHJhd2VyLmRyYXdPZXMocGVuZGluZ0ZyYW1lLnRleHR1cmVJZCwgcm90YXRl
ZFNhbXBsaW5nTWF0cml4LCB0ZXh0dXJlQ29weS5nZXRXaWR0aCgpLAotICAgICAgICAgICAgICAg
IHRleHR1cmVDb3B5LmdldEhlaWdodCgpLCAwLCAwLCB0ZXh0dXJlQ29weS5nZXRXaWR0aCgpLCB0
ZXh0dXJlQ29weS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICByb3RhdGVkU2FtcGxpbmdNYXRy
aXggPSBSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpOwotCi0gICAgICAgICAgICAvLyBS
ZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAgICAgICAgICAgIEdMRVMyMC5nbEJpbmRGcmFt
ZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAgICAgICAgR0xFUzIwLmds
RmluaXNoKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNvcHlUaW1lTnMgKz0gKFN5c3RlbS5u
YW5vVGltZSgpIC0gbm93KTsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9u
ZShwZW5kaW5nRnJhbWUpOwotICAgICAgICAgIHBlbmRpbmdGcmFtZSA9IG51bGw7Ci0gICAgICAg
IH0KLSAgICAgIH0KLQotICAgICAgdXBkYXRlTGF5b3V0TWF0cml4KCk7Ci0gICAgICBmaW5hbCBm
bG9hdFtdIHRleE1hdHJpeCA9Ci0gICAgICAgICAgUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRy
aWNlcyhyb3RhdGVkU2FtcGxpbmdNYXRyaXgsIGxheW91dE1hdHJpeCk7Ci0gICAgICAvLyBPcGVu
R0wgZGVmYXVsdHMgdG8gbG93ZXIgbGVmdCBvcmlnaW4gLSBmbGlwIHZpZXdwb3J0IHBvc2l0aW9u
IHZlcnRpY2FsbHkuCi0gICAgICBmaW5hbCBpbnQgdmlld3BvcnRZID0gc2NyZWVuSGVpZ2h0IC0g
ZGlzcGxheUxheW91dC5ib3R0b207Ci0gICAgICBpZiAocmVuZGVyZXJUeXBlID09IFJlbmRlcmVy
VHlwZS5SRU5ERVJFUl9ZVVYpIHsKLSAgICAgICAgZHJhd2VyLmRyYXdZdXYoeXV2VGV4dHVyZXMs
IHRleE1hdHJpeCwgdmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIGRpc3BsYXlMYXlvdXQubGVmdCwK
LSAgICAgICAgICAgIHZpZXdwb3J0WSwgZGlzcGxheUxheW91dC53aWR0aCgpLCBkaXNwbGF5TGF5
b3V0LmhlaWdodCgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyYXdlci5kcmF3UmdiKHRl
eHR1cmVDb3B5LmdldFRleHR1cmVJZCgpLCB0ZXhNYXRyaXgsIHZpZGVvV2lkdGgsIHZpZGVvSGVp
Z2h0LAotICAgICAgICAgICAgZGlzcGxheUxheW91dC5sZWZ0LCB2aWV3cG9ydFksIGRpc3BsYXlM
YXlvdXQud2lkdGgoKSwgZGlzcGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICB9Ci0KLSAgICAg
IGlmIChpc05ld0ZyYW1lKSB7Ci0gICAgICAgIGZyYW1lc1JlbmRlcmVkKys7Ci0gICAgICAgIGRy
YXdUaW1lTnMgKz0gKFN5c3RlbS5uYW5vVGltZSgpIC0gbm93KTsKLSAgICAgICAgaWYgKChmcmFt
ZXNSZW5kZXJlZCAlIDMwMCkgPT0gMCkgewotICAgICAgICAgIGxvZ1N0YXRpc3RpY3MoKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2dTdGF0aXN0aWNz
KCkgewotICAgICAgbG9uZyB0aW1lU2luY2VGaXJzdEZyYW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUo
KSAtIHN0YXJ0VGltZU5zOwotICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBU
eXBlOiAiICsgcmVuZGVyZXJUeXBlICsgIi4gRnJhbWVzIHJlY2VpdmVkOiAiCi0gICAgICAgICAg
ICAgICsgZnJhbWVzUmVjZWl2ZWQgKyAiLiBEcm9wcGVkOiAiICsgZnJhbWVzRHJvcHBlZCArICIu
IFJlbmRlcmVkOiAiICsgZnJhbWVzUmVuZGVyZWQpOwotICAgICAgaWYgKGZyYW1lc1JlY2VpdmVk
ID4gMCAmJiBmcmFtZXNSZW5kZXJlZCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkR1
cmF0aW9uOiAiICsgKGludCkgKHRpbWVTaW5jZUZpcnN0RnJhbWVOcyAvIDFlNikgKyAiIG1zLiBG
UFM6ICIKLSAgICAgICAgICAgICAgICArIGZyYW1lc1JlbmRlcmVkICogMWU5IC8gdGltZVNpbmNl
Rmlyc3RGcmFtZU5zKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkRyYXcgdGltZTogIiArIChp
bnQpIChkcmF3VGltZU5zIC8gKDEwMDAgKiBmcmFtZXNSZW5kZXJlZCkpCi0gICAgICAgICAgICAg
ICAgKyAiIHVzLiBDb3B5IHRpbWU6ICIgKyAoaW50KSAoY29weVRpbWVOcyAvICgxMDAwICogZnJh
bWVzUmVjZWl2ZWQpKSArICIgdXMiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBzZXRTY3JlZW5TaXplKGZpbmFsIGludCBzY3JlZW5XaWR0aCwgZmluYWwgaW50IHNjcmVlbkhl
aWdodCkgewotICAgICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlvdXRMb2NrKSB7Ci0gICAgICAg
IGlmIChzY3JlZW5XaWR0aCA9PSB0aGlzLnNjcmVlbldpZHRoICYmIHNjcmVlbkhlaWdodCA9PSB0
aGlzLnNjcmVlbkhlaWdodCkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCArICIuIFl1dkltYWdlUmVuZGVyZXIuc2V0U2Ny
ZWVuU2l6ZTogIiArIHNjcmVlbldpZHRoICsgIiB4ICIKLSAgICAgICAgICAgICAgICArIHNjcmVl
bkhlaWdodCk7Ci0gICAgICAgIHRoaXMuc2NyZWVuV2lkdGggPSBzY3JlZW5XaWR0aDsKLSAgICAg
ICAgdGhpcy5zY3JlZW5IZWlnaHQgPSBzY3JlZW5IZWlnaHQ7Ci0gICAgICAgIHVwZGF0ZUxheW91
dFByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNl
dFBvc2l0aW9uKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICBS
ZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IpIHsK
LSAgICAgIGZpbmFsIFJlY3QgbGF5b3V0SW5QZXJjZW50YWdlID0KLSAgICAgICAgICBuZXcgUmVj
dCh4LCB5LCBNYXRoLm1pbigxMDAsIHggKyB3aWR0aCksIE1hdGgubWluKDEwMCwgeSArIGhlaWdo
dCkpOwotICAgICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlvdXRMb2NrKSB7Ci0gICAgICAgIGlm
IChsYXlvdXRJblBlcmNlbnRhZ2UuZXF1YWxzKHRoaXMubGF5b3V0SW5QZXJjZW50YWdlKSAmJiBz
Y2FsaW5nVHlwZSA9PSB0aGlzLnNjYWxpbmdUeXBlCi0gICAgICAgICAgICAmJiBtaXJyb3IgPT0g
dGhpcy5taXJyb3IpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTG9n
Z2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBZdXZJbWFnZVJlbmRlcmVyLnNldFBvc2l0aW9u
OiAoIiArIHggKyAiLCAiICsgeSArICIpICIKLSAgICAgICAgICAgICAgICArIHdpZHRoICsgIiB4
ICIgKyBoZWlnaHQgKyAiLiBTY2FsaW5nOiAiICsgc2NhbGluZ1R5cGUgKyAiLiBNaXJyb3I6ICIg
KyBtaXJyb3IpOwotICAgICAgICB0aGlzLmxheW91dEluUGVyY2VudGFnZS5zZXQobGF5b3V0SW5Q
ZXJjZW50YWdlKTsKLSAgICAgICAgdGhpcy5zY2FsaW5nVHlwZSA9IHNjYWxpbmdUeXBlOwotICAg
ICAgICB0aGlzLm1pcnJvciA9IG1pcnJvcjsKLSAgICAgICAgdXBkYXRlTGF5b3V0UHJvcGVydGll
cyA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFNpemUoZmlu
YWwgaW50IHZpZGVvV2lkdGgsIGZpbmFsIGludCB2aWRlb0hlaWdodCwgZmluYWwgaW50IHJvdGF0
aW9uKSB7Ci0gICAgICBpZiAodmlkZW9XaWR0aCA9PSB0aGlzLnZpZGVvV2lkdGggJiYgdmlkZW9I
ZWlnaHQgPT0gdGhpcy52aWRlb0hlaWdodAotICAgICAgICAgICYmIHJvdGF0aW9uID09IHJvdGF0
aW9uRGVncmVlKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChyZW5kZXJl
ckV2ZW50cyAhPSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsg
Ii4gUmVwb3J0aW5nIGZyYW1lIHJlc29sdXRpb24gY2hhbmdlZCB0byAiICsgdmlkZW9XaWR0aCAr
ICIgeCAiCi0gICAgICAgICAgICAgICAgKyB2aWRlb0hlaWdodCk7Ci0gICAgICAgIHJlbmRlcmVy
RXZlbnRzLm9uRnJhbWVSZXNvbHV0aW9uQ2hhbmdlZCh2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwg
cm90YXRpb24pOwotICAgICAgfQotCi0gICAgICBzeW5jaHJvbml6ZWQgKHVwZGF0ZUxheW91dExv
Y2spIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBZdXZJbWFnZVJl
bmRlcmVyLnNldFNpemU6ICIgKyB2aWRlb1dpZHRoICsgIiB4ICIKLSAgICAgICAgICAgICAgICAr
IHZpZGVvSGVpZ2h0ICsgIiByb3RhdGlvbiAiICsgcm90YXRpb24pOwotCi0gICAgICAgIHRoaXMu
dmlkZW9XaWR0aCA9IHZpZGVvV2lkdGg7Ci0gICAgICAgIHRoaXMudmlkZW9IZWlnaHQgPSB2aWRl
b0hlaWdodDsKLSAgICAgICAgcm90YXRpb25EZWdyZWUgPSByb3RhdGlvbjsKLSAgICAgICAgdXBk
YXRlTGF5b3V0UHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICIgIFl1
dkltYWdlUmVuZGVyZXIuc2V0U2l6ZSBkb25lLiIpOwotICAgICAgfQotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW5kZXJGcmFtZShJNDIwRnJh
bWUgZnJhbWUpIHsKLSAgICAgIGlmIChzdXJmYWNlID09IG51bGwpIHsKLSAgICAgICAgLy8gVGhp
cyBvYmplY3QgaGFzIGJlZW4gcmVsZWFzZWQuCi0gICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVy
RnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYgKHJl
bmRlckZyYW1lVGhyZWFkID09IG51bGwpIHsKLSAgICAgICAgcmVuZGVyRnJhbWVUaHJlYWQgPSBU
aHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgICAgfQotICAgICAgaWYgKCFzZWVuRnJhbWUgJiYg
cmVuZGVyZXJFdmVudHMgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIg
KyBpZCArICIuIFJlcG9ydGluZyBmaXJzdCByZW5kZXJlZCBmcmFtZS4iKTsKLSAgICAgICAgcmVu
ZGVyZXJFdmVudHMub25GaXJzdEZyYW1lUmVuZGVyZWQoKTsKLSAgICAgIH0KLSAgICAgIGZyYW1l
c1JlY2VpdmVkKys7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdGcmFtZUxvY2spIHsKLSAg
ICAgICAgLy8gQ2hlY2sgaW5wdXQgZnJhbWUgcGFyYW1ldGVycy4KLSAgICAgICAgaWYgKGZyYW1l
Lnl1dkZyYW1lKSB7Ci0gICAgICAgICAgaWYgKGZyYW1lLnl1dlN0cmlkZXNbMF0gPCBmcmFtZS53
aWR0aCB8fCBmcmFtZS55dXZTdHJpZGVzWzFdIDwgZnJhbWUud2lkdGggLyAyCi0gICAgICAgICAg
ICAgIHx8IGZyYW1lLnl1dlN0cmlkZXNbMl0gPCBmcmFtZS53aWR0aCAvIDIpIHsKLSAgICAgICAg
ICAgIExvZ2dpbmcuZShUQUcsICJJbmNvcnJlY3Qgc3RyaWRlcyAiICsgZnJhbWUueXV2U3RyaWRl
c1swXSArICIsICIgKyBmcmFtZS55dXZTdHJpZGVzWzFdCi0gICAgICAgICAgICAgICAgICAgICsg
IiwgIiArIGZyYW1lLnl1dlN0cmlkZXNbMl0pOwotICAgICAgICAgICAgVmlkZW9SZW5kZXJlci5y
ZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChwZW5kaW5nRnJhbWUgIT0gbnVsbCkgewotICAgICAg
ICAgIC8vIFNraXAgcmVuZGVyaW5nIG9mIHRoaXMgZnJhbWUgaWYgcHJldmlvdXMgZnJhbWUgd2Fz
IG5vdCByZW5kZXJlZCB5ZXQuCi0gICAgICAgICAgZnJhbWVzRHJvcHBlZCsrOwotICAgICAgICAg
IFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgICBzZWVuRnJh
bWUgPSB0cnVlOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwZW5kaW5n
RnJhbWUgPSBmcmFtZTsKLSAgICAgIH0KLSAgICAgIHNldFNpemUoZnJhbWUud2lkdGgsIGZyYW1l
LmhlaWdodCwgZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgICAgc2VlbkZyYW1lID0gdHJ1ZTsK
LQotICAgICAgLy8gUmVxdWVzdCByZW5kZXJpbmcuCi0gICAgICBzdXJmYWNlLnJlcXVlc3RSZW5k
ZXIoKTsKLSAgICB9Ci0gIH0KLQotICAvKiogUGFzc2VzIEdMU3VyZmFjZVZpZXcgdG8gdmlkZW8g
cmVuZGVyZXIuICovCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0VmlldyhH
TFN1cmZhY2VWaWV3IHN1cmZhY2UsIFJ1bm5hYmxlIGVnbENvbnRleHRSZWFkeUNhbGxiYWNrKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkuc2V0VmlldyIpOwotICAgIGlu
c3RhbmNlID0gbmV3IFZpZGVvUmVuZGVyZXJHdWkoc3VyZmFjZSk7Ci0gICAgZWdsQ29udGV4dFJl
YWR5ID0gZWdsQ29udGV4dFJlYWR5Q2FsbGJhY2s7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5
bmNocm9uaXplZCBFZ2xCYXNlLkNvbnRleHQgZ2V0RWdsQmFzZUNvbnRleHQoKSB7Ci0gICAgcmV0
dXJuIGVnbENvbnRleHQ7Ci0gIH0KLQotICAvKiogUmVsZWFzZXMgR0xTdXJmYWNlVmlldyB2aWRl
byByZW5kZXJlci4gKi8KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBkaXNwb3Nl
KCkgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3VpLmRpc3Bvc2UiKTsKLSAgICBzeW5j
aHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dklt
YWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJz
KSB7Ci0gICAgICAgIHl1dkltYWdlUmVuZGVyZXIucmVsZWFzZSgpOwotICAgICAgfQotICAgICAg
aW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmVuZGVyRnJh
bWVUaHJlYWQgPSBudWxsOwotICAgIGRyYXdUaHJlYWQgPSBudWxsOwotICAgIGluc3RhbmNlLnN1
cmZhY2UgPSBudWxsOwotICAgIGVnbENvbnRleHQgPSBudWxsOwotICAgIGVnbENvbnRleHRSZWFk
eSA9IG51bGw7Ci0gICAgaW5zdGFuY2UgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0
ZXMgVmlkZW9SZW5kZXJlciB3aXRoIHRvcCBsZWZ0IGNvcm5lciBhdCAoeCwgeSkgYW5kIHJlc29s
dXRpb24KLSAgICogKHdpZHRoLCBoZWlnaHQpLiBBbGwgcGFyYW1ldGVycyBhcmUgaW4gcGVyY2Vu
dGFnZSBvZiBzY3JlZW4gcmVzb2x1dGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9S
ZW5kZXJlciBjcmVhdGVHdWkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0g
ICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJy
b3IpIHRocm93cyBFeGNlcHRpb24gewotICAgIFl1dkltYWdlUmVuZGVyZXIgamF2YUd1aVJlbmRl
cmVyID0gY3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJyb3IpOwot
ICAgIHJldHVybiBuZXcgVmlkZW9SZW5kZXJlcihqYXZhR3VpUmVuZGVyZXIpOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBjcmVhdGVHdWlSZW5kZXJlcigK
LSAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5kZXJlckNvbW1v
bi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICByZXR1cm4g
Y3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJyb3IpOwotICB9Ci0K
LSAgLyoqCi0gICAqIENyZWF0ZXMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3Mgd2l0aCB0b3AgbGVm
dCBjb3JuZXIgYXQgKHgsIHkpIGFuZAotICAgKiByZXNvbHV0aW9uICh3aWR0aCwgaGVpZ2h0KS4g
QWxsIHBhcmFtZXRlcnMgYXJlIGluIHBlcmNlbnRhZ2Ugb2YKLSAgICogc2NyZWVuIHJlc29sdXRp
b24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBZdXZJbWFnZVJlbmRlcmVy
IGNyZWF0ZSgKLSAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5k
ZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IpIHsKLSAg
ICByZXR1cm4gY3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJyb3Is
IG5ldyBHbFJlY3REcmF3ZXIoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBWaWRlb1Jl
bmRlcmVyLkNhbGxiYWNrcyB3aXRoIHRvcCBsZWZ0IGNvcm5lciBhdCAoeCwgeSkgYW5kIHJlc29s
dXRpb24gKHdpZHRoLCBoZWlnaHQpLgotICAgKiBBbGwgcGFyYW1ldGVycyBhcmUgaW4gcGVyY2Vu
dGFnZSBvZiBzY3JlZW4gcmVzb2x1dGlvbi4gVGhlIGN1c3RvbSB8ZHJhd2VyfCB3aWxsIGJlIHVz
ZWQgZm9yCi0gICAqIGRyYXdpbmcgZnJhbWVzIG9uIHRoZSBFR0xTdXJmYWNlLiBUaGlzIGNsYXNz
IGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHJlbGVhc2UoKSBvbiB8ZHJhd2VyfC4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFl1dkltYWdlUmVuZGVyZXIgY3JlYXRlKGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgUmVuZGVyZXJDb21tb24u
U2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yLCBSZW5kZXJlckNvbW1vbi5H
bERyYXdlciBkcmF3ZXIpIHsKLSAgICAvLyBDaGVjayBkaXNwbGF5IHJlZ2lvbiBwYXJhbWV0ZXJz
LgotICAgIGlmICh4IDwgMCB8fCB4ID4gMTAwIHx8IHkgPCAwIHx8IHkgPiAxMDAgfHwgd2lkdGgg
PCAwIHx8IHdpZHRoID4gMTAwIHx8IGhlaWdodCA8IDAKLSAgICAgICAgfHwgaGVpZ2h0ID4gMTAw
IHx8IHggKyB3aWR0aCA+IDEwMCB8fCB5ICsgaGVpZ2h0ID4gMTAwKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHdpbmRvdyBwYXJhbWV0ZXJzLiIpOwotICAg
IH0KLQotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbigiQXR0ZW1wdCB0byBjcmVhdGUgeXV2IHJlbmRlcmVyIGJlZm9yZSBzZXR0aW5n
IEdMU3VyZmFjZVZpZXciKTsKLSAgICB9Ci0gICAgZmluYWwgWXV2SW1hZ2VSZW5kZXJlciB5dXZJ
bWFnZVJlbmRlcmVyID0gbmV3IFl1dkltYWdlUmVuZGVyZXIoaW5zdGFuY2Uuc3VyZmFjZSwKLSAg
ICAgICAgaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMuc2l6ZSgpLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBzY2FsaW5nVHlwZSwgbWlycm9yLCBkcmF3ZXIpOwotICAgIHN5bmNocm9uaXplZCAoaW5z
dGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGlmIChpbnN0YW5jZS5vblN1cmZhY2VD
cmVhdGVkQ2FsbGVkKSB7Ci0gICAgICAgIC8vIG9uU3VyZmFjZUNyZWF0ZWQgaGFzIGFscmVhZHkg
YmVlbiBjYWxsZWQgZm9yIFZpZGVvUmVuZGVyZXJHdWkgLQotICAgICAgICAvLyBuZWVkIHRvIGNy
ZWF0ZSB0ZXh0dXJlIGZvciBuZXcgaW1hZ2UgYW5kIGFkZCBpbWFnZSB0byB0aGUKLSAgICAgICAg
Ly8gcmVuZGVyaW5nIGxpc3QuCi0gICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGNvdW50RG93
bkxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgICAgICBpbnN0YW5jZS5zdXJmYWNl
LnF1ZXVlRXZlbnQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIuY3Jl
YXRlVGV4dHVyZXMoKTsKLSAgICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIuc2V0U2NyZWVuU2l6
ZShpbnN0YW5jZS5zY3JlZW5XaWR0aCwgaW5zdGFuY2Uuc2NyZWVuSGVpZ2h0KTsKLSAgICAgICAg
ICAgIGNvdW50RG93bkxhdGNoLmNvdW50RG93bigpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0gICAgICAgIC8vIFdhaXQgZm9yIHRhc2sgY29tcGxldGlvbi4KLSAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICBjb3VudERvd25MYXRjaC5hd2FpdCgpOwotICAgICAgICB9IGNhdGNoIChJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIEFkZCB5dXYgcmVuZGVyZXIgdG8gcmVu
ZGVyaW5nIGxpc3QuCi0gICAgICBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycy5hZGQoeXV2SW1h
Z2VSZW5kZXJlcik7Ci0gICAgfQotICAgIHJldHVybiB5dXZJbWFnZVJlbmRlcmVyOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCB1cGRhdGUoVmlkZW9SZW5kZXJlci5D
YWxsYmFja3MgcmVuZGVyZXIsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLAotICAgICAgaW50IGhl
aWdodCwgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWly
cm9yKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkudXBkYXRlIik7Ci0g
ICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJBdHRlbXB0IHRvIHVwZGF0ZSB5dXYgcmVuZGVyZXIgYmVmb3JlIHNldHRpbmcgR0xTdXJm
YWNlVmlldyIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVu
ZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6
IGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIGlmICh5dXZJbWFnZVJlbmRl
cmVyID09IHJlbmRlcmVyKSB7Ci0gICAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5zZXRQb3NpdGlv
bih4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWlycm9yKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQg
c2V0UmVuZGVyZXJFdmVudHMoCi0gICAgICBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5kZXJl
ciwgUmVuZGVyZXJDb21tb24uUmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHMpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5zZXRSZW5kZXJlckV2ZW50cyIpOwotICAg
IGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiQXR0ZW1wdCB0byBzZXQgcmVuZGVyZXIgZXZlbnRzIGJlZm9yZSBzZXR0aW5nIEdMU3VyZmFj
ZVZpZXciKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJlbmRl
cmVycykgewotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiBp
bnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICBpZiAoeXV2SW1hZ2VSZW5kZXJl
ciA9PSByZW5kZXJlcikgewotICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIucmVuZGVyZXJFdmVu
dHMgPSByZW5kZXJlckV2ZW50czsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgcmVtb3ZlKFZpZGVvUmVuZGVyZXIuQ2Fs
bGJhY2tzIHJlbmRlcmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWku
cmVtb3ZlIik7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCJBdHRlbXB0IHRvIHJlbW92ZSByZW5kZXJlciBiZWZvcmUgc2V0dGlu
ZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoaW5zdGFuY2UueXV2
SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZpbmFsIGludCBpbmRleCA9IGluc3RhbmNlLnl1dklt
YWdlUmVuZGVyZXJzLmluZGV4T2YocmVuZGVyZXIpOwotICAgICAgaWYgKGluZGV4ID09IC0xKSB7
Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJDb3VsZG4ndCByZW1vdmUgcmVuZGVyZXIgKG5vdCBw
cmVzZW50IGluIGN1cnJlbnQgbGlzdCkiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGluc3Rh
bmNlLnl1dkltYWdlUmVuZGVyZXJzLnJlbW92ZShpbmRleCkucmVsZWFzZSgpOwotICAgICAgfQot
ICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoVmlk
ZW9SZW5kZXJlci5DYWxsYmFja3MgcmVuZGVyZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiVmlk
ZW9SZW5kZXJlckd1aS5yZXNldCIpOwotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQXR0ZW1wdCB0byByZXNldCByZW5kZXJlciBi
ZWZvcmUgc2V0dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAo
aW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJl
ciB5dXZJbWFnZVJlbmRlcmVyIDogaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAg
ICAgaWYgKHl1dkltYWdlUmVuZGVyZXIgPT0gcmVuZGVyZXIpIHsKLSAgICAgICAgICB5dXZJbWFn
ZVJlbmRlcmVyLnJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZShUaHJlYWQgdGhyZWFkLCBTdHJpbmcg
dGhyZWFkTmFtZSkgewotICAgIGlmICh0aHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFj
ZUVsZW1lbnRbXSBzdGFja1RyYWNlcyA9IHRocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICBp
ZiAoc3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCB0aHJl
YWROYW1lICsgIiBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1l
bnQgc3RhY2tUcmFjZSA6IHN0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywg
c3RhY2tUcmFjZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgcHJpbnRTdGFja1RyYWNlcygpIHsK
LSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBw
cmludFN0YWNrVHJhY2UocmVuZGVyRnJhbWVUaHJlYWQsICJSZW5kZXIgZnJhbWUgdGhyZWFkIik7
Ci0gICAgcHJpbnRTdGFja1RyYWNlKGRyYXdUaHJlYWQsICJEcmF3IHRocmVhZCIpOwotICB9Ci0K
LSAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
U3VyZmFjZUNyZWF0ZWQoR0wxMCB1bnVzZWQsIEVHTENvbmZpZyBjb25maWcpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5vblN1cmZhY2VDcmVhdGVkIik7Ci0gICAgLy8g
U3RvcmUgcmVuZGVyIEVHTCBjb250ZXh0LgotICAgIHN5bmNocm9uaXplZCAoVmlkZW9SZW5kZXJl
ckd1aS5jbGFzcykgewotICAgICAgaWYgKEVnbEJhc2UxNC5pc0VHTDE0U3VwcG9ydGVkKCkpIHsK
LSAgICAgICAgZWdsQ29udGV4dCA9IG5ldyBFZ2xCYXNlMTQuQ29udGV4dChFR0wxNC5lZ2xHZXRD
dXJyZW50Q29udGV4dCgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGVnbENvbnRleHQgPSBu
ZXcgRWdsQmFzZTEwLkNvbnRleHQoKChFR0wxMCkgRUdMQ29udGV4dC5nZXRFR0woKSkuZWdsR2V0
Q3VycmVudENvbnRleHQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJWaWRl
b1JlbmRlcmVyR3VpIEVHTCBDb250ZXh0OiAiICsgZWdsQ29udGV4dCk7Ci0gICAgfQotCi0gICAg
c3luY2hyb25pemVkICh5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgLy8gQ3JlYXRlIHRleHR1
cmVzIGZvciBhbGwgaW1hZ2VzLgotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdl
UmVuZGVyZXIgOiB5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICB5dXZJbWFnZVJlbmRlcmVy
LmNyZWF0ZVRleHR1cmVzKCk7Ci0gICAgICB9Ci0gICAgICBvblN1cmZhY2VDcmVhdGVkQ2FsbGVk
ID0gdHJ1ZTsKLSAgICB9Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJvblN1cmZhY2VD
cmVhdGVkIGRvbmUiKTsKLSAgICBHTEVTMjAuZ2xQaXhlbFN0b3JlaShHTEVTMjAuR0xfVU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0gICAgR0xFUzIwLmdsQ2xlYXJDb2xvcigwLjE1ZiwgMC4xNWYsIDAu
MTVmLCAxLjBmKTsKLQotICAgIC8vIEZpcmUgRUdMIGNvbnRleHQgcmVhZHkgZXZlbnQuCi0gICAg
c3luY2hyb25pemVkIChWaWRlb1JlbmRlcmVyR3VpLmNsYXNzKSB7Ci0gICAgICBpZiAoZWdsQ29u
dGV4dFJlYWR5ICE9IG51bGwpIHsKLSAgICAgICAgZWdsQ29udGV4dFJlYWR5LnJ1bigpOwotICAg
ICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN1cmZhY2VD
aGFuZ2VkKEdMMTAgdW51c2VkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5vblN1cmZhY2VDaGFuZ2VkOiAiICsgd2lkdGggKyAi
IHggIiArIGhlaWdodCArICIgICIpOwotICAgIHNjcmVlbldpZHRoID0gd2lkdGg7Ci0gICAgc2Ny
ZWVuSGVpZ2h0ID0gaGVpZ2h0OwotICAgIHN5bmNocm9uaXplZCAoeXV2SW1hZ2VSZW5kZXJlcnMp
IHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogeXV2SW1h
Z2VSZW5kZXJlcnMpIHsKLSAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5zZXRTY3JlZW5TaXplKHNj
cmVlbldpZHRoLCBzY3JlZW5IZWlnaHQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBvbkRyYXdGcmFtZShHTDEwIHVudXNlZCkgewotICAgIGlmIChk
cmF3VGhyZWFkID09IG51bGwpIHsKLSAgICAgIGRyYXdUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRo
cmVhZCgpOwotICAgIH0KLSAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCAwLCBzY3JlZW5XaWR0aCwg
c2NyZWVuSGVpZ2h0KTsKLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVS
X0JJVCk7Ci0gICAgc3luY2hyb25pemVkICh5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgZm9y
IChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiB5dXZJbWFnZVJlbmRlcmVycykg
ewotICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLmRyYXcoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9Tb3VyY2UuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvU291cmNlLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvVmlkZW9Tb3VyY2UuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMz
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoq
Ci0gKiBKYXZhIHdyYXBwZXIgb2YgbmF0aXZlIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlLgotICov
Ci1wdWJsaWMgY2xhc3MgVmlkZW9Tb3VyY2UgZXh0ZW5kcyBNZWRpYVNvdXJjZSB7Ci0gIHB1Ymxp
YyBWaWRlb1NvdXJjZShsb25nIG5hdGl2ZVNvdXJjZSkgewotICAgIHN1cGVyKG5hdGl2ZVNvdXJj
ZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2Ug
ZnJhbWVzIHRvIGJlIHNjYWxlZCBkb3duIHRvIHRoZSByZXF1ZXN0ZWQgcmVzb2x1dGlvbi4gQWxz
bywKLSAgICogZnJhbWVzIHdpbGwgYmUgY3JvcHBlZCB0byBtYXRjaCB0aGUgcmVxdWVzdGVkIGFz
cGVjdCByYXRpbywgYW5kIGZyYW1lcyB3aWxsIGJlIGRyb3BwZWQgdG8gbWF0Y2gKLSAgICogdGhl
IHJlcXVlc3RlZCBmcHMuIFRoZSByZXF1ZXN0ZWQgYXNwZWN0IHJhdGlvIGlzIG9yaWVudGF0aW9u
IGFnbm9zdGljIGFuZCB3aWxsIGJlIGFkanVzdGVkIHRvCi0gICAqIG1haW50YWluIHRoZSBpbnB1
dCBvcmllbnRhdGlvbiwgc28gaXQgZG9lc24ndCBtYXR0ZXIgaWYgZS5nLiAxMjgweDcyMCBvciA3
MjB4MTI4MCBpcyByZXF1ZXN0ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGFwdE91dHB1dEZv
cm1hdChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcHMpIHsKLSAgICBuYXRpdmVBZGFwdE91
dHB1dEZvcm1hdChuYXRpdmVTb3VyY2UsIHdpZHRoLCBoZWlnaHQsIGZwcyk7Ci0gIH0KLQotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVBZGFwdE91dHB1dEZvcm1hdCgKLSAgICAg
IGxvbmcgbmF0aXZlU291cmNlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcHMpOwotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrLmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvVmlkZW9UcmFjay5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDggKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2
YS51dGlsLkxpbmtlZExpc3Q7Ci0KLS8qKiBKYXZhIHZlcnNpb24gb2YgVmlkZW9UcmFja0ludGVy
ZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBWaWRlb1RyYWNrIGV4dGVuZHMgTWVkaWFTdHJlYW1UcmFj
ayB7Ci0gIHByaXZhdGUgZmluYWwgTGlua2VkTGlzdDxWaWRlb1JlbmRlcmVyPiByZW5kZXJlcnMg
PSBuZXcgTGlua2VkTGlzdDxWaWRlb1JlbmRlcmVyPigpOwotCi0gIHB1YmxpYyBWaWRlb1RyYWNr
KGxvbmcgbmF0aXZlVHJhY2spIHsKLSAgICBzdXBlcihuYXRpdmVUcmFjayk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBhZGRSZW5kZXJlcihWaWRlb1JlbmRlcmVyIHJlbmRlcmVyKSB7Ci0gICAgcmVu
ZGVyZXJzLmFkZChyZW5kZXJlcik7Ci0gICAgbmF0aXZlQWRkUmVuZGVyZXIobmF0aXZlVHJhY2ss
IHJlbmRlcmVyLm5hdGl2ZVZpZGVvUmVuZGVyZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVt
b3ZlUmVuZGVyZXIoVmlkZW9SZW5kZXJlciByZW5kZXJlcikgewotICAgIGlmICghcmVuZGVyZXJz
LnJlbW92ZShyZW5kZXJlcikpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbmF0aXZlUmVt
b3ZlUmVuZGVyZXIobmF0aXZlVHJhY2ssIHJlbmRlcmVyLm5hdGl2ZVZpZGVvUmVuZGVyZXIpOwot
ICAgIHJlbmRlcmVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7
Ci0gICAgd2hpbGUgKCFyZW5kZXJlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICByZW1vdmVSZW5kZXJl
cihyZW5kZXJlcnMuZ2V0Rmlyc3QoKSk7Ci0gICAgfQotICAgIHN1cGVyLmRpc3Bvc2UoKTsKLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBuYXRpdmVUcmFjayk7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlQWRkUmVuZGVyZXIobG9uZyBu
YXRpdmVUcmFjaywgbG9uZyBuYXRpdmVSZW5kZXJlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIHZvaWQgbmF0aXZlUmVtb3ZlUmVuZGVyZXIobG9uZyBuYXRpdmVUcmFjaywgbG9uZyBuYXRp
dmVSZW5kZXJlcik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1l1dkNvbnZlcnRlci5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvWXV2Q29udmVydGVyLmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvWXV2Q29udmVydGVyLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyNTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzExRXh0OwotaW1wb3J0IGFu
ZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0
IGphdmEubmlvLkZsb2F0QnVmZmVyOwotCi0vKioKLSAqIENsYXNzIGZvciBjb252ZXJ0aW5nIE9F
UyB0ZXh0dXJlcyB0byBhIFlVViBCeXRlQnVmZmVyLiBJdCBzaG91bGQgYmUgY29uc3RydWN0ZWQg
b24gYSB0aHJlYWQgd2l0aAotICogYW4gYWN0aXZlIEVHTCBjb250ZXh0LCBhbmQgb25seSBiZSB1
c2VkIGZyb20gdGhhdCB0aHJlYWQuCi0gKi8KLWNsYXNzIFl1dkNvbnZlcnRlciB7Ci0gIC8vIFZl
cnRleCBjb29yZGluYXRlcyBpbiBOb3JtYWxpemVkIERldmljZSBDb29yZGluYXRlcywgaS5lLgot
ICAvLyAoLTEsIC0xKSBpcyBib3R0b20tbGVmdCBhbmQgKDEsIDEpIGlzIHRvcC1yaWdodC4KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgRmxvYXRCdWZmZXIgREVWSUNFX1JFQ1RBTkdMRSA9IEdsVXRp
bC5jcmVhdGVGbG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0gICAgICAtMS4wZiwgLTEuMGYsIC8v
IEJvdHRvbSBsZWZ0LgotICAgICAgMS4wZiwgLTEuMGYsIC8vIEJvdHRvbSByaWdodC4KLSAgICAg
IC0xLjBmLCAxLjBmLCAvLyBUb3AgbGVmdC4KLSAgICAgIDEuMGYsIDEuMGYsIC8vIFRvcCByaWdo
dC4KLSAgfSk7Ci0KLSAgLy8gVGV4dHVyZSBjb29yZGluYXRlcyAtICgwLCAwKSBpcyBib3R0b20t
bGVmdCBhbmQgKDEsIDEpIGlzIHRvcC1yaWdodC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmxv
YXRCdWZmZXIgVEVYVFVSRV9SRUNUQU5HTEUgPSBHbFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIobmV3
IGZsb2F0W10gewotICAgICAgMC4wZiwgMC4wZiwgLy8gQm90dG9tIGxlZnQuCi0gICAgICAxLjBm
LCAwLjBmLCAvLyBCb3R0b20gcmlnaHQuCi0gICAgICAwLjBmLCAxLjBmLCAvLyBUb3AgbGVmdC4K
LSAgICAgIDEuMGYsIDEuMGYgLy8gVG9wIHJpZ2h0LgotICB9KTsKLQotICAvLyBjbGFuZy1mb3Jt
YXQgb2ZmCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJURVhfU0hBREVSID0KLSAg
ICAgICAgInZhcnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVj
NCBpbl9wb3M7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBpbl90YztcbiIKLSAgICAgICsg
IlxuIgotICAgICAgKyAidW5pZm9ybSBtYXQ0IHRleE1hdHJpeDtcbiIKLSAgICAgICsgIlxuIgot
ICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgKyAiICAgIGdsX1Bvc2l0aW9uID0gaW5f
cG9zO1xuIgotICAgICAgKyAiICAgIGludGVycF90YyA9ICh0ZXhNYXRyaXggKiBpbl90YykueHk7
XG4iCi0gICAgICArICJ9XG4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBGUkFH
TUVOVF9TSEFERVIgPQotICAgICAgICAiI2V4dGVuc2lvbiBHTF9PRVNfRUdMX2ltYWdlX2V4dGVy
bmFsIDogcmVxdWlyZVxuIgotICAgICAgKyAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0g
ICAgICArICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICAr
ICJ1bmlmb3JtIHNhbXBsZXJFeHRlcm5hbE9FUyBvZXNUZXg7XG4iCi0gICAgICAvLyBEaWZmZXJl
bmNlIGluIHRleHR1cmUgY29vcmRpbmF0ZSBjb3JyZXNwb25kaW5nIHRvIG9uZQotICAgICAgLy8g
c3ViLXBpeGVsIGluIHRoZSB4IGRpcmVjdGlvbi4KLSAgICAgICsgInVuaWZvcm0gdmVjMiB4VW5p
dDtcbiIKLSAgICAgIC8vIENvbG9yIGNvbnZlcnNpb24gY29lZmZpY2llbnRzLCBpbmNsdWRpbmcg
Y29uc3RhbnQgdGVybQotICAgICAgKyAidW5pZm9ybSB2ZWM0IGNvZWZmcztcbiIKLSAgICAgICsg
IlxuIgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgLy8gU2luY2UgdGhlIGFscGhh
IHJlYWQgZnJvbSB0aGUgdGV4dHVyZSBpcyBhbHdheXMgMSwgdGhpcyBjb3VsZAotICAgICAgLy8g
YmUgd3JpdHRlbiBhcyBhIG1hdDQgeCB2ZWM0IG11bHRpcGx5LiBIb3dldmVyLCB0aGF0IHNlZW1z
IHRvCi0gICAgICAvLyBnaXZlIGEgd29yc2UgZnJhbWVyYXRlLCBwb3NzaWJseSBiZWNhdXNlIHRo
ZSBhZGRpdGlvbmFsCi0gICAgICAvLyBtdWx0aXBsaWVzIGJ5IDEuMCBjb25zdW1lIHJlc291cmNl
cy4gVE9ETyhuaXNzZSk6IENvdWxkIGFsc28KLSAgICAgIC8vIHRyeSB0byBkbyBpdCBhcyBhIHZl
YzMgeCBtYXQzeDQsIGZvbGxvd2VkIGJ5IGFuIGFkZCBpbiBvZiBhCi0gICAgICAvLyBjb25zdGFu
dCB2ZWN0b3IuCi0gICAgICArICIgIGdsX0ZyYWdDb2xvci5yID0gY29lZmZzLmEgKyBkb3QoY29l
ZmZzLnJnYixcbiIKLSAgICAgICsgIiAgICAgIHRleHR1cmUyRChvZXNUZXgsIGludGVycF90YyAt
IDEuNSAqIHhVbml0KS5yZ2IpO1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IuZyA9IGNvZWZm
cy5hICsgZG90KGNvZWZmcy5yZ2IsXG4iCi0gICAgICArICIgICAgICB0ZXh0dXJlMkQob2VzVGV4
LCBpbnRlcnBfdGMgLSAwLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0Nv
bG9yLmIgPSBjb2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgotICAgICAgKyAiICAgICAgdGV4
dHVyZTJEKG9lc1RleCwgaW50ZXJwX3RjICsgMC41ICogeFVuaXQpLnJnYik7XG4iCi0gICAgICAr
ICIgIGdsX0ZyYWdDb2xvci5hID0gY29lZmZzLmEgKyBkb3QoY29lZmZzLnJnYixcbiIKLSAgICAg
ICsgIiAgICAgIHRleHR1cmUyRChvZXNUZXgsIGludGVycF90YyArIDEuNSAqIHhVbml0KS5yZ2Ip
O1xuIgotICAgICAgKyAifVxuIjsKLSAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgcHJpdmF0ZSBm
aW5hbCBpbnQgZnJhbWVCdWZmZXJJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVUZXh0dXJl
SWQ7Ci0gIHByaXZhdGUgZmluYWwgR2xTaGFkZXIgc2hhZGVyOwotICBwcml2YXRlIGZpbmFsIGlu
dCB0ZXhNYXRyaXhMb2M7Ci0gIHByaXZhdGUgZmluYWwgaW50IHhVbml0TG9jOwotICBwcml2YXRl
IGZpbmFsIGludCBjb2VmZnNMb2M7Ci0gIHByaXZhdGUgZmluYWwgVGhyZWFkVXRpbHMuVGhyZWFk
Q2hlY2tlciB0aHJlYWRDaGVja2VyID0gbmV3IFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIoKTsK
LSAgcHJpdmF0ZSBpbnQgZnJhbWVCdWZmZXJXaWR0aDsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVCdWZm
ZXJIZWlnaHQ7Ci0gIHByaXZhdGUgYm9vbGVhbiByZWxlYXNlZCA9IGZhbHNlOwotCi0gIC8qKgot
ICAgKiBUaGlzIGNsYXNzIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBvbiBhIHRocmVhZCB0aGF0IGhh
cyBhbiBhY3RpdmUgRUdMIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgWXV2Q29udmVydGVyKCkg
ewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBmcmFtZVRl
eHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwot
ICAgIHRoaXMuZnJhbWVCdWZmZXJXaWR0aCA9IDA7Ci0gICAgdGhpcy5mcmFtZUJ1ZmZlckhlaWdo
dCA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBiaW5kIGl0Lgot
ICAgIGZpbmFsIGludCBmcmFtZUJ1ZmZlcnNbXSA9IG5ldyBpbnRbMV07Ci0gICAgR0xFUzIwLmds
R2VuRnJhbWVidWZmZXJzKDEsIGZyYW1lQnVmZmVycywgMCk7Ci0gICAgZnJhbWVCdWZmZXJJZCA9
IGZyYW1lQnVmZmVyc1swXTsKLSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdM
X0ZSQU1FQlVGRkVSLCBmcmFtZUJ1ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJy
b3IoIkdlbmVyYXRlIGZyYW1lYnVmZmVyIik7Ci0KLSAgICAvLyBBdHRhY2ggdGhlIHRleHR1cmUg
dG8gdGhlIGZyYW1lYnVmZmVyIGFzIGNvbG9yIGF0dGFjaG1lbnQuCi0gICAgR0xFUzIwLmdsRnJh
bWVidWZmZXJUZXh0dXJlMkQoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBHTEVTMjAuR0xfQ09MT1Jf
QVRUQUNITUVOVDAsCi0gICAgICAgIEdMRVMyMC5HTF9URVhUVVJFXzJELCBmcmFtZVRleHR1cmVJ
ZCwgMCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJBdHRhY2ggdGV4dHVyZSB0byBm
cmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gUmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIuCi0gICAg
R0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7Ci0KLSAg
ICBzaGFkZXIgPSBuZXcgR2xTaGFkZXIoVkVSVEVYX1NIQURFUiwgRlJBR01FTlRfU0hBREVSKTsK
LSAgICBzaGFkZXIudXNlUHJvZ3JhbSgpOwotICAgIHRleE1hdHJpeExvYyA9IHNoYWRlci5nZXRV
bmlmb3JtTG9jYXRpb24oInRleE1hdHJpeCIpOwotICAgIHhVbml0TG9jID0gc2hhZGVyLmdldFVu
aWZvcm1Mb2NhdGlvbigieFVuaXQiKTsKLSAgICBjb2VmZnNMb2MgPSBzaGFkZXIuZ2V0VW5pZm9y
bUxvY2F0aW9uKCJjb2VmZnMiKTsKLSAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdldFVu
aWZvcm1Mb2NhdGlvbigib2VzVGV4IiksIDApOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJv
cigiSW5pdGlhbGl6ZSBmcmFnbWVudCBzaGFkZXIgdW5pZm9ybSB2YWx1ZXMuIik7Ci0gICAgLy8g
SW5pdGlhbGl6ZSB2ZXJ0ZXggc2hhZGVyIGF0dHJpYnV0ZXMuCi0gICAgc2hhZGVyLnNldFZlcnRl
eEF0dHJpYkFycmF5KCJpbl9wb3MiLCAyLCBERVZJQ0VfUkVDVEFOR0xFKTsKLSAgICAvLyBJZiB0
aGUgd2lkdGggaXMgbm90IGEgbXVsdGlwbGUgb2YgNCBwaXhlbHMsIHRoZSB0ZXh0dXJlCi0gICAg
Ly8gd2lsbCBiZSBzY2FsZWQgdXAgc2xpZ2h0bHkgYW5kIGNsaXBwZWQgYXQgdGhlIHJpZ2h0IGJv
cmRlci4KLSAgICBzaGFkZXIuc2V0VmVydGV4QXR0cmliQXJyYXkoImluX3RjIiwgMiwgVEVYVFVS
RV9SRUNUQU5HTEUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY29udmVydChCeXRlQnVmZmVyIGJ1
ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3JjVGV4dHVyZUlkLAot
ICAgICAgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNr
SXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgaWYgKHJlbGVhc2VkKSB7Ci0gICAgICB0aHJvdyBuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJZdXZDb252ZXJ0ZXIuY29udmVydCBjYWxsZWQgb24gcmVs
ZWFzZWQgb2JqZWN0Iik7Ci0gICAgfQotCi0gICAgLy8gV2UgZHJhdyBpbnRvIGEgYnVmZmVyIGxh
aWQgb3V0IGxpa2UKLSAgICAvLwotICAgIC8vICAgICstLS0tLS0tLS0rCi0gICAgLy8gICAgfCAg
ICAgICAgIHwKLSAgICAvLyAgICB8ICBZICAgICAgfAotICAgIC8vICAgIHwgICAgICAgICB8Ci0g
ICAgLy8gICAgfCAgICAgICAgIHwKLSAgICAvLyAgICArLS0tLSstLS0tKwotICAgIC8vICAgIHwg
VSAgfCBWICB8Ci0gICAgLy8gICAgfCAgICB8ICAgIHwKLSAgICAvLyAgICArLS0tLSstLS0tKwot
ICAgIC8vCi0gICAgLy8gSW4gbWVtb3J5LCB3ZSB1c2UgdGhlIHNhbWUgc3RyaWRlIGZvciBhbGwg
b2YgWSwgVSBhbmQgVi4gVGhlCi0gICAgLy8gVSBkYXRhIHN0YXJ0cyBhdCBvZmZzZXQgfGhlaWdo
dHwgKiB8c3RyaWRlfCBmcm9tIHRoZSBZIGRhdGEsCi0gICAgLy8gYW5kIHRoZSBWIGRhdGEgc3Rh
cnRzIGF0IGF0IG9mZnNldCB8c3RyaWRlLzJ8IGZyb20gdGhlIFUKLSAgICAvLyBkYXRhLCB3aXRo
IHJvd3Mgb2YgVSBhbmQgViBkYXRhIGFsdGVybmF0aW5nLgotICAgIC8vCi0gICAgLy8gTm93LCBp
dCB3b3VsZCBoYXZlIG1hZGUgc2Vuc2UgdG8gYWxsb2NhdGUgYSBwaXhlbCBidWZmZXIgd2l0aAot
ICAgIC8vIGEgc2luZ2xlIGJ5dGUgcGVyIHBpeGVsIChFR0wxMC5FR0xfQ09MT1JfQlVGRkVSX1RZ
UEUsCi0gICAgLy8gRUdMMTAuRUdMX0xVTUlOQU5DRV9CVUZGRVIsKSwgYnV0IHRoYXQgc2VlbXMg
dG8gYmUKLSAgICAvLyB1bnN1cHBvcnRlZCBieSBkZXZpY2VzLiBTbyBkbyB0aGUgZm9sbG93aW5n
IGhhY2s6IEFsbG9jYXRlIGFuCi0gICAgLy8gUkdCQSBidWZmZXIsIG9mIHdpZHRoIHxzdHJpZGV8
LzQuIFRvIHJlbmRlciBlYWNoIG9mIHRoZXNlCi0gICAgLy8gbGFyZ2UgcGl4ZWxzLCBzYW1wbGUg
dGhlIHRleHR1cmUgYXQgNCBkaWZmZXJlbnQgeCBjb29yZGluYXRlcwotICAgIC8vIGFuZCBzdG9y
ZSB0aGUgcmVzdWx0cyBpbiB0aGUgZm91ciBjb21wb25lbnRzLgotICAgIC8vCi0gICAgLy8gU2lu
Y2UgdGhlIFYgZGF0YSBuZWVkcyB0byBzdGFydCBvbiBhIGJvdW5kYXJ5IG9mIHN1Y2ggYQotICAg
IC8vIGxhcmdlciBwaXhlbCwgaXQgaXMgbm90IHN1ZmZpY2llbnQgdGhhdCB8c3RyaWRlfCBpcyBl
dmVuLCBpdAotICAgIC8vIGhhcyB0byBiZSBhIG11bHRpcGxlIG9mIDggcGl4ZWxzLgotCi0gICAg
aWYgKHN0cmlkZSAlIDggIT0gMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigiSW52YWxpZCBzdHJpZGUsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4Iik7Ci0gICAg
fQotICAgIGlmIChzdHJpZGUgPCB3aWR0aCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1
bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzdHJpZGUsIG11c3QgPj0gd2lkdGgiKTsKLSAgICB9Ci0K
LSAgICBpbnQgeV93aWR0aCA9ICh3aWR0aCArIDMpIC8gNDsKLSAgICBpbnQgdXZfd2lkdGggPSAo
d2lkdGggKyA3KSAvIDg7Ci0gICAgaW50IHV2X2hlaWdodCA9IChoZWlnaHQgKyAxKSAvIDI7Ci0g
ICAgaW50IHRvdGFsX2hlaWdodCA9IGhlaWdodCArIHV2X2hlaWdodDsKLSAgICBpbnQgc2l6ZSA9
IHN0cmlkZSAqIHRvdGFsX2hlaWdodDsKLQotICAgIGlmIChidWYuY2FwYWNpdHkoKSA8IHNpemUp
IHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIll1dkNvbnZlcnRl
ci5jb252ZXJ0IGNhbGxlZCB3aXRoIHRvbyBzbWFsbCBidWZmZXIiKTsKLSAgICB9Ci0gICAgLy8g
UHJvZHVjZSBhIGZyYW1lIGJ1ZmZlciBzdGFydGluZyBhdCB0b3AtbGVmdCBjb3JuZXIsIG5vdAot
ICAgIC8vIGJvdHRvbS1sZWZ0LgotICAgIHRyYW5zZm9ybU1hdHJpeCA9Ci0gICAgICAgIFJlbmRl
cmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXModHJhbnNmb3JtTWF0cml4LCBSZW5kZXJlckNvbW1v
bi52ZXJ0aWNhbEZsaXBNYXRyaXgoKSk7Ci0KLSAgICAvLyBCaW5kIG91ciBmcmFtZWJ1ZmZlci4K
LSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBmcmFt
ZUJ1ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsQmluZEZyYW1lYnVm
ZmVyIik7Ci0KLSAgICBpZiAoZnJhbWVCdWZmZXJXaWR0aCAhPSBzdHJpZGUgLyA0IHx8IGZyYW1l
QnVmZmVySGVpZ2h0ICE9IHRvdGFsX2hlaWdodCkgewotICAgICAgZnJhbWVCdWZmZXJXaWR0aCA9
IHN0cmlkZSAvIDQ7Ci0gICAgICBmcmFtZUJ1ZmZlckhlaWdodCA9IHRvdGFsX2hlaWdodDsKLSAg
ICAgIC8vIChSZSktQWxsb2NhdGUgdGV4dHVyZS4KLSAgICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1
cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMy
MC5HTF9URVhUVVJFXzJELCBmcmFtZVRleHR1cmVJZCk7Ci0gICAgICBHTEVTMjAuZ2xUZXhJbWFn
ZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfUkdCQSwgZnJhbWVCdWZmZXJX
aWR0aCwKLSAgICAgICAgICBmcmFtZUJ1ZmZlckhlaWdodCwgMCwgR0xFUzIwLkdMX1JHQkEsIEdM
RVMyMC5HTF9VTlNJR05FRF9CWVRFLCBudWxsKTsKLQotICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
ZnJhbWVidWZmZXIgaXMgaW4gYSBnb29kIHN0YXRlLgotICAgICAgZmluYWwgaW50IHN0YXR1cyA9
IEdMRVMyMC5nbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSKTsK
LSAgICAgIGlmIChzdGF0dXMgIT0gR0xFUzIwLkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0g
ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkZyYW1lYnVmZmVyIG5vdCBj
b21wbGV0ZSwgc3RhdHVzOiAiICsgc3RhdHVzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBHTEVT
MjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgR0xFUzIwLmdsQmlu
ZFRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCBzcmNUZXh0dXJlSWQp
OwotICAgIEdMRVMyMC5nbFVuaWZvcm1NYXRyaXg0ZnYodGV4TWF0cml4TG9jLCAxLCBmYWxzZSwg
dHJhbnNmb3JtTWF0cml4LCAwKTsKLQotICAgIC8vIERyYXcgWQotICAgIEdMRVMyMC5nbFZpZXdw
b3J0KDAsIDAsIHlfd2lkdGgsIGhlaWdodCk7Ci0gICAgLy8gTWF0cml4ICogKDE7MDswOzApIC8g
d2lkdGguIE5vdGUgdGhhdCBvcGVuZ2wgdXNlcyBjb2x1bW4gbWFqb3Igb3JkZXIuCi0gICAgR0xF
UzIwLmdsVW5pZm9ybTJmKHhVbml0TG9jLCB0cmFuc2Zvcm1NYXRyaXhbMF0gLyB3aWR0aCwgdHJh
bnNmb3JtTWF0cml4WzFdIC8gd2lkdGgpOwotICAgIC8vIFknVVY0NDQgdG8gUkdCODg4LCBzZWUK
LSAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ZVVYjWS4yN1VWNDQ0X3RvX1JH
Qjg4OF9jb252ZXJzaW9uLgotICAgIC8vIFdlIHVzZSB0aGUgSVRVLVIgY29lZmZpY2llbnRzIGZv
ciBVIGFuZCBWICovCi0gICAgR0xFUzIwLmdsVW5pZm9ybTRmKGNvZWZmc0xvYywgMC4yOTlmLCAw
LjU4N2YsIDAuMTE0ZiwgMC4wZik7Ci0gICAgR0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAuR0xf
VFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotCi0gICAgLy8gRHJhdyBVCi0gICAgR0xFUzIwLmdsVmll
d3BvcnQoMCwgaGVpZ2h0LCB1dl93aWR0aCwgdXZfaGVpZ2h0KTsKLSAgICAvLyBNYXRyaXggKiAo
MTswOzA7MCkgLyAod2lkdGggLyAyKS4gTm90ZSB0aGF0IG9wZW5nbCB1c2VzIGNvbHVtbiBtYWpv
ciBvcmRlci4KLSAgICBHTEVTMjAuZ2xVbmlmb3JtMmYoCi0gICAgICAgIHhVbml0TG9jLCAyLjBm
ICogdHJhbnNmb3JtTWF0cml4WzBdIC8gd2lkdGgsIDIuMGYgKiB0cmFuc2Zvcm1NYXRyaXhbMV0g
LyB3aWR0aCk7Ci0gICAgR0xFUzIwLmdsVW5pZm9ybTRmKGNvZWZmc0xvYywgLTAuMTY5ZiwgLTAu
MzMxZiwgMC40OTlmLCAwLjVmKTsKLSAgICBHTEVTMjAuZ2xEcmF3QXJyYXlzKEdMRVMyMC5HTF9U
UklBTkdMRV9TVFJJUCwgMCwgNCk7Ci0KLSAgICAvLyBEcmF3IFYKLSAgICBHTEVTMjAuZ2xWaWV3
cG9ydChzdHJpZGUgLyA4LCBoZWlnaHQsIHV2X3dpZHRoLCB1dl9oZWlnaHQpOwotICAgIEdMRVMy
MC5nbFVuaWZvcm00Zihjb2VmZnNMb2MsIDAuNDk5ZiwgLTAuNDE4ZiwgLTAuMDgxM2YsIDAuNWYp
OwotICAgIEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RSSUFOR0xFX1NUUklQLCAwLCA0
KTsKLQotICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoCi0gICAgICAgIDAsIDAsIGZyYW1lQnVmZmVy
V2lkdGgsIGZyYW1lQnVmZmVySGVpZ2h0LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lH
TkVEX0JZVEUsIGJ1Zik7Ci0KLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIll1dkNvbnZl
cnRlci5jb252ZXJ0Iik7Ci0KLSAgICAvLyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAg
ICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAg
ICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAgICAv
LyBVbmJpbmQgdGV4dHVyZS4gUmVwb3J0ZWRseSBuZWVkZWQgb24gc29tZSBkZXZpY2VzIHRvIGdl
dAotICAgIC8vIHRoZSB0ZXh0dXJlIHVwZGF0ZWQgZnJvbSB0aGUgY2FtZXJhLgotICAgIEdMRVMy
MC5nbEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUywgMCk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJ
c09uVmFsaWRUaHJlYWQoKTsKLSAgICByZWxlYXNlZCA9IHRydWU7Ci0gICAgc2hhZGVyLnJlbGVh
c2UoKTsKLSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge2ZyYW1lVGV4
dHVyZUlkfSwgMCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsIG5ldyBpbnRb
XSB7ZnJhbWVCdWZmZXJJZH0sIDApOwotICAgIGZyYW1lQnVmZmVyV2lkdGggPSAwOwotICAgIGZy
YW1lQnVmZmVySGVpZ2h0ID0gMDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL09XTkVSUwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
bmkvT1dORVJTCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvT1dORVJTCShub25leGlzdGVudCkKQEAg
LTEsMTEgKzAsMCBAQAotcGVyLWZpbGUgYW5kcm9pZHZpZGVvY2FwdHVyZXIqPW1hZ2plZEB3ZWJy
dGMub3JnCi1wZXItZmlsZSBhbmRyb2lkbWVkaWFlbmNvZGVyKj1tYWdqZWRAd2VicnRjLm9yZwot
cGVyLWZpbGUgYW5kcm9pZG1lZGlhZGVjb2Rlcio9bWFnamVkQHdlYnJ0Yy5vcmcKLXBlci1maWxl
IGFuZHJvaWRtZWRpYWNvZGVjY29tbW9uLmg9bWFnamVkQHdlYnJ0Yy5vcmcKLXBlci1maWxlIGFu
ZHJvaWRtZXRyaWNzX2puaS5jYz1zYWthbEB3ZWJydGMub3JnCi1wZXItZmlsZSBhbmRyb2lkdmlk
ZW90cmFja3NvdXJjZV9qbmkuY2M9bWFnamVkQHdlYnJ0Yy5vcmcKLXBlci1maWxlIGFuZHJvaWR2
aWRlb3RyYWNrc291cmNlX2puaS5jYz1zYWthbEB3ZWJydGMub3JnCi1wZXItZmlsZSBzdXJmYWNl
dGV4dHVyZWhlbHBlcio9bWFnamVkQHdlYnJ0Yy5vcmcKLXBlci1maWxlIG5hdGl2ZV9oYW5kbGVf
aW1wbCo9bWFnamVkQHdlYnJ0Yy5vcmcKLSMgVmlkZW8gcmVsYXRlZCBwYXJ0cyBvZiBwZWVyY29u
bmVjdGlvbiBvbmx5LgotcGVyLWZpbGUgcGVlcmNvbm5lY3Rpb25fam5pLmNjPW1hZ2plZEB3ZWJy
dGMub3JnCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhY29kZWNjb21tb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
YW5kcm9pZG1lZGlhY29kZWNjb21tb24uaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRt
ZWRpYWNvZGVjY29tbW9uLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NyArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19BUElfSkFWQV9KTklfQU5EUk9JRE1FRElBQ09E
RUNDT01NT05fSF8KLSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lETUVESUFDT0RF
Q0NPTU1PTl9IXwotCi0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KLSNpbmNsdWRlIDxzdHJpbmc+
Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aHJlYWQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBp
L2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2Fw
aS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2xvZ2dp
bmcuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aHJlYWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0
Y19qbmkgewotCi0vLyBVbmNvbW1lbnQgdGhpcyBkZWZpbmUgdG8gZW5hYmxlIHZlcmJvc2UgbG9n
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
ICAgIGN1cnJlbnRfdGhyZWFkLT5TZXRBbGxvd0Jsb2NraW5nQ2FsbHModHJ1ZSk7Ci19Ci0KLS8v
IFJldHVybiB0aGUgKHNpbmdsZXRvbikgSmF2YSBFbnVtIG9iamVjdCBjb3JyZXNwb25kaW5nIHRv
IHxpbmRleHw7Ci0vLyB8c3RhdGVfY2xhc3NfZnJhZ21lbnR8IGlzIHNvbWV0aGluZyBsaWtlICJN
ZWRpYVNvdXJjZSRTdGF0ZSIuCi1zdGF0aWMgaW5saW5lIGpvYmplY3QgSmF2YUVudW1Gcm9tSW5k
ZXhBbmRDbGFzc05hbWUoCi0gICAgSk5JRW52KiBqbmksIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdGF0
ZV9jbGFzc19mcmFnbWVudCwgaW50IGluZGV4KSB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIHN0YXRl
X2NsYXNzID0gIm9yZy93ZWJydGMvIiArIHN0YXRlX2NsYXNzX2ZyYWdtZW50OwotICByZXR1cm4g
SmF2YUVudW1Gcm9tSW5kZXgoam5pLCBGaW5kQ2xhc3Moam5pLCBzdGF0ZV9jbGFzcy5jX3N0cigp
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlX2NsYXNzLCBpbmRleCk7Ci19Ci0K
LS8vIENoZWNrcyBmb3IgYW55IEphdmEgZXhjZXB0aW9uLCBwcmludHMgc3RhY2sgYmFja3RyYWNl
IGFuZCBjbGVhcnMKLS8vIGN1cnJlbnRseSB0aHJvd24gZXhjZXB0aW9uLgotc3RhdGljIGlubGlu
ZSBib29sIENoZWNrRXhjZXB0aW9uKEpOSUVudiogam5pKSB7Ci0gIGlmIChqbmktPkV4Y2VwdGlv
bkNoZWNrKCkpIHsKLSAgICBMT0dfVEFHKHJ0Yzo6TFNfRVJST1IsIFRBR19DT01NT04pIDw8ICJK
YXZhIEpOSSBleGNlcHRpb24uIjsKLSAgICBqbmktPkV4Y2VwdGlvbkRlc2NyaWJlKCk7Ci0gICAg
am5pLT5FeGNlcHRpb25DbGVhcigpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIHJldHVybiBm
YWxzZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2VuZGlmICAvLyBXRUJS
VENfQVBJX0pBVkFfSk5JX0FORFJPSURNRURJQUNPREVDQ09NTU9OX0hfCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9p
ZG1lZGlhZGVjb2Rlcl9qbmkuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29kZXJf
am5pLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZGVjb2Rlcl9qbmkuY2MJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw5ODkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci0vLyBOT1RJQ0U6IGFuZHJvaWRtZWRpYWRlY29kZXJfam5pLmggbXVzdCBiZSBpbmNsdWRlZCBi
ZWZvcmUKLS8vIGFuZHJvaWRtZWRpYWNvZGVjY29tbW9uLmggdG8gYXZvaWQgYnVpbGQgZXJyb3Jz
LgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZGVjb2Rlcl9q
bmkuaCIKLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di9jb252
ZXJ0LmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L2NvbnZl
cnRfZnJvbS5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di92
aWRlb19jb21tb24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRt
ZWRpYWNvZGVjY29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFz
c3JlZmVyZW5jZWhvbGRlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0
aXZlX2hhbmRsZV9pbXBsLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9zdXJm
YWNldGV4dHVyZWhlbHBlcl9qbmkuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9iaW5kLmgiCi0j
aW5jbHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvbG9n
Z2luZy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3Njb3BlZF9yZWZfcHRyLmgiCi0jaW5jbHVk
ZSAid2VicnRjL2Jhc2UvdGhyZWFkLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGltZXV0aWxz
LmgiCi0jaW5jbHVkZSAid2VicnRjL2NvbW1vbl92aWRlby9pbmNsdWRlL2k0MjBfYnVmZmVyX3Bv
b2wuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy92aWRlb19jb2RpbmcvaW5jbHVkZS92aWRl
b19jb2RlY19pbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJ3ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2lu
Y2x1ZGUvbG9nY2F0X3RyYWNlX2NvbnRleHQuaCIKLQotdXNpbmcgcnRjOjpCaW5kOwotdXNpbmcg
cnRjOjpUaHJlYWQ7Ci11c2luZyBydGM6OlRocmVhZE1hbmFnZXI7Ci0KLXVzaW5nIHdlYnJ0Yzo6
Q29kZWNTcGVjaWZpY0luZm87Ci11c2luZyB3ZWJydGM6OkRlY29kZWRJbWFnZUNhbGxiYWNrOwot
dXNpbmcgd2VicnRjOjpFbmNvZGVkSW1hZ2U7Ci11c2luZyB3ZWJydGM6OlZpZGVvRnJhbWU7Ci11
c2luZyB3ZWJydGM6OlJUUEZyYWdtZW50YXRpb25IZWFkZXI7Ci11c2luZyB3ZWJydGM6OlZpZGVv
Q29kZWM7Ci11c2luZyB3ZWJydGM6OlZpZGVvQ29kZWNUeXBlOwotdXNpbmcgd2VicnRjOjprVmlk
ZW9Db2RlY0gyNjQ7Ci11c2luZyB3ZWJydGM6OmtWaWRlb0NvZGVjVlA4OwotdXNpbmcgd2VicnRj
OjprVmlkZW9Db2RlY1ZQOTsKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi0vLyBMb2dnaW5n
IG1hY3Jvcy4KLSNkZWZpbmUgVEFHX0RFQ09ERVIgIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIiCi0j
aWZkZWYgVFJBQ0tfQlVGRkVSX1RJTUlORwotI2RlZmluZSBBTE9HViguLi4pCi0gIF9fYW5kcm9p
ZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfVkVSQk9TRSwgVEFHX0RFQ09ERVIsIF9fVkFfQVJHU19f
KQotI2Vsc2UKLSNkZWZpbmUgQUxPR1YoLi4uKQotI2VuZGlmCi0jZGVmaW5lIEFMT0dEIExPR19U
QUcocnRjOjpMU19JTkZPLCBUQUdfREVDT0RFUikKLSNkZWZpbmUgQUxPR1cgTE9HX1RBRyhydGM6
OkxTX1dBUk5JTkcsIFRBR19ERUNPREVSKQotI2RlZmluZSBBTE9HRSBMT0dfVEFHKHJ0Yzo6TFNf
RVJST1IsIFRBR19ERUNPREVSKQotCi1lbnVtIHsga01heFdhcm5pbmdMb2dGcmFtZXMgPSAyIH07
Ci0KLWNsYXNzIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIgOiBwdWJsaWMgd2VicnRjOjpWaWRlb0Rl
Y29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHJ0Yzo6TWVzc2Fn
ZUhhbmRsZXIgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlcigK
LSAgICAgIEpOSUVudiogam5pLCBWaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUsIGpvYmplY3QgcmVu
ZGVyX2VnbF9jb250ZXh0KTsKLSAgdmlydHVhbCB+TWVkaWFDb2RlY1ZpZGVvRGVjb2RlcigpOwot
Ci0gIGludDMyX3QgSW5pdERlY29kZShjb25zdCBWaWRlb0NvZGVjKiBjb2RlY1NldHRpbmdzLCBp
bnQzMl90IG51bWJlck9mQ29yZXMpCi0gICAgICBvdmVycmlkZTsKLQotICBpbnQzMl90IERlY29k
ZSgKLSAgICAgIGNvbnN0IEVuY29kZWRJbWFnZSYgaW5wdXRJbWFnZSwgYm9vbCBtaXNzaW5nRnJh
bWVzLAotICAgICAgY29uc3QgUlRQRnJhZ21lbnRhdGlvbkhlYWRlciogZnJhZ21lbnRhdGlvbiwK
LSAgICAgIGNvbnN0IENvZGVjU3BlY2lmaWNJbmZvKiBjb2RlY1NwZWNpZmljSW5mbyA9IE5VTEws
Ci0gICAgICBpbnQ2NF90IHJlbmRlclRpbWVNcyA9IC0xKSBvdmVycmlkZTsKLQotICBpbnQzMl90
IFJlZ2lzdGVyRGVjb2RlQ29tcGxldGVDYWxsYmFjayhEZWNvZGVkSW1hZ2VDYWxsYmFjayogY2Fs
bGJhY2spCi0gICAgICBvdmVycmlkZTsKLQotICBpbnQzMl90IFJlbGVhc2UoKSBvdmVycmlkZTsK
LQotICBib29sIFByZWZlcnNMYXRlRGVjb2RpbmcoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9Ci0KLSAgLy8gcnRjOjpNZXNzYWdlSGFuZGxlciBpbXBsZW1lbnRhdGlvbi4KLSAgdm9p
ZCBPbk1lc3NhZ2UocnRjOjpNZXNzYWdlKiBtc2cpIG92ZXJyaWRlOwotCi0gIGNvbnN0IGNoYXIq
IEltcGxlbWVudGF0aW9uTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgLy8g
Q0hFQ0stZmFpbCBpZiBub3QgcnVubmluZyBvbiB8Y29kZWNfdGhyZWFkX3wuCi0gIHZvaWQgQ2hl
Y2tPbkNvZGVjVGhyZWFkKCk7Ci0KLSAgaW50MzJfdCBJbml0RGVjb2RlT25Db2RlY1RocmVhZCgp
OwotICBpbnQzMl90IFJlc2V0RGVjb2RlT25Db2RlY1RocmVhZCgpOwotICBpbnQzMl90IFJlbGVh
c2VPbkNvZGVjVGhyZWFkKCk7Ci0gIGludDMyX3QgRGVjb2RlT25Db2RlY1RocmVhZChjb25zdCBF
bmNvZGVkSW1hZ2UmIGlucHV0SW1hZ2UpOwotICAvLyBEZWxpdmVyIGFueSBvdXRwdXRzIHBlbmRp
bmcgaW4gdGhlIE1lZGlhQ29kZWMgdG8gb3VyIHxjYWxsYmFja198IGFuZCByZXR1cm4KLSAgLy8g
dHJ1ZSBvbiBzdWNjZXNzLgotICBib29sIERlbGl2ZXJQZW5kaW5nT3V0cHV0cyhKTklFbnYqIGpu
aSwgaW50IGRlcXVldWVfdGltZW91dF91cyk7Ci0gIGludDMyX3QgUHJvY2Vzc0hXRXJyb3JPbkNv
ZGVjVGhyZWFkKCk7Ci0gIHZvaWQgRW5hYmxlRnJhbWVMb2dPbldhcm5pbmcoKTsKLSAgdm9pZCBS
ZXNldFZhcmlhYmxlcygpOwotCi0gIC8vIFR5cGUgb2YgdmlkZW8gY29kZWMuCi0gIFZpZGVvQ29k
ZWNUeXBlIGNvZGVjVHlwZV87Ci0KLSAgLy8gUmVuZGVyIEVHTCBjb250ZXh0IC0gb3duZWQgYnkg
ZmFjdG9yeSwgc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQvZGVzdHJveWVkCi0gIC8vIGJ5IFZpZGVv
RGVjb2Rlci4KLSAgam9iamVjdCByZW5kZXJfZWdsX2NvbnRleHRfOwotCi0gIGJvb2wga2V5X2Zy
YW1lX3JlcXVpcmVkXzsKLSAgYm9vbCBpbml0ZWRfOwotICBib29sIHN3X2ZhbGxiYWNrX3JlcXVp
cmVkXzsKLSAgYm9vbCB1c2Vfc3VyZmFjZV87Ci0gIFZpZGVvQ29kZWMgY29kZWNfOwotICB3ZWJy
dGM6Okk0MjBCdWZmZXJQb29sIGRlY29kZWRfZnJhbWVfcG9vbF87Ci0gIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjxTdXJmYWNlVGV4dHVyZUhlbHBlcj4gc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl87Ci0gIERl
Y29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFja187Ci0gIGludCBmcmFtZXNfcmVjZWl2ZWRfOyAg
Ly8gTnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBieSBkZWNvZGVyLgotICBpbnQgZnJhbWVzX2Rl
Y29kZWRfOyAgLy8gTnVtYmVyIG9mIGZyYW1lcyBkZWNvZGVkIGJ5IGRlY29kZXIuCi0gIC8vIE51
bWJlciBvZiBkZWNvZGVkIGZyYW1lcyBmb3Igd2hpY2ggbG9nIGluZm9ybWF0aW9uIGlzIGRpc3Bs
YXllZC4KLSAgaW50IGZyYW1lc19kZWNvZGVkX2xvZ2dlZF87Ci0gIGludDY0X3Qgc3RhcnRfdGlt
ZV9tc187ICAvLyBTdGFydCB0aW1lIGZvciBzdGF0aXN0aWNzLgotICBpbnQgY3VycmVudF9mcmFt
ZXNfOyAgLy8gTnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgY3VycmVudCBzdGF0aXN0aWNzIGludGVy
dmFsLgotICBpbnQgY3VycmVudF9ieXRlc187ICAvLyBFbmNvZGVkIGJ5dGVzIGluIHRoZSBjdXJy
ZW50IHN0YXRpc3RpY3MgaW50ZXJ2YWwuCi0gIGludCBjdXJyZW50X2RlY29kaW5nX3RpbWVfbXNf
OyAgLy8gT3ZlcmFsbCBkZWNvZGluZyB0aW1lIGluIHRoZSBjdXJyZW50IHNlY29uZAotICBpbnQg
Y3VycmVudF9kZWxheV90aW1lX21zXzsgIC8vIE92ZXJhbGwgZGVsYXkgdGltZSBpbiB0aGUgY3Vy
cmVudCBzZWNvbmQuCi0gIHVpbnQzMl90IG1heF9wZW5kaW5nX2ZyYW1lc187ICAvLyBNYXhpbXVt
IG51bWJlciBvZiBwZW5kaW5nIGlucHV0IGZyYW1lcy4KLQotICAvLyBTdGF0ZSB0aGF0IGlzIGNv
bnN0YW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhpcyBvYmplY3Qgb25jZSB0aGUgY3RvcgotICAv
LyByZXR1cm5zLgotICBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPgotICAgICAgY29kZWNfdGhyZWFk
XzsgIC8vIFRocmVhZCBvbiB3aGljaCB0byBvcGVyYXRlIE1lZGlhQ29kZWMuCi0gIFNjb3BlZEds
b2JhbFJlZjxqY2xhc3M+IGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc187Ci0gIFNj
b3BlZEdsb2JhbFJlZjxqb2JqZWN0PiBqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfOwotICBq
bWV0aG9kSUQgal9pbml0X2RlY29kZV9tZXRob2RfOwotICBqbWV0aG9kSUQgal9yZXNldF9tZXRo
b2RfOwotICBqbWV0aG9kSUQgal9yZWxlYXNlX21ldGhvZF87Ci0gIGptZXRob2RJRCBqX2RlcXVl
dWVfaW5wdXRfYnVmZmVyX21ldGhvZF87Ci0gIGptZXRob2RJRCBqX3F1ZXVlX2lucHV0X2J1ZmZl
cl9tZXRob2RfOwotICBqbWV0aG9kSUQgal9kZXF1ZXVlX2J5dGVfYnVmZmVyX21ldGhvZF87Ci0g
IGptZXRob2RJRCBqX2RlcXVldWVfdGV4dHVyZV9idWZmZXJfbWV0aG9kXzsKLSAgam1ldGhvZElE
IGpfcmV0dXJuX2RlY29kZWRfYnl0ZV9idWZmZXJfbWV0aG9kXzsKLSAgLy8gTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlciBmaWVsZHMuCi0gIGpmaWVsZElEIGpfaW5wdXRfYnVmZmVyc19maWVsZF87Ci0g
IGpmaWVsZElEIGpfb3V0cHV0X2J1ZmZlcnNfZmllbGRfOwotICBqZmllbGRJRCBqX2NvbG9yX2Zv
cm1hdF9maWVsZF87Ci0gIGpmaWVsZElEIGpfd2lkdGhfZmllbGRfOwotICBqZmllbGRJRCBqX2hl
aWdodF9maWVsZF87Ci0gIGpmaWVsZElEIGpfc3RyaWRlX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9z
bGljZV9oZWlnaHRfZmllbGRfOwotICAvLyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyLkRlY29kZWRU
ZXh0dXJlQnVmZmVyIGZpZWxkcy4KLSAgamZpZWxkSUQgal90ZXh0dXJlX2lkX2ZpZWxkXzsKLSAg
amZpZWxkSUQgal90cmFuc2Zvcm1fbWF0cml4X2ZpZWxkXzsKLSAgamZpZWxkSUQgal90ZXh0dXJl
X3ByZXNlbnRhdGlvbl90aW1lc3RhbXBfbXNfZmllbGRfOwotICBqZmllbGRJRCBqX3RleHR1cmVf
dGltZXN0YW1wX21zX2ZpZWxkXzsKLSAgamZpZWxkSUQgal90ZXh0dXJlX250cF90aW1lc3RhbXBf
bXNfZmllbGRfOwotICBqZmllbGRJRCBqX3RleHR1cmVfZGVjb2RlX3RpbWVfbXNfZmllbGRfOwot
ICBqZmllbGRJRCBqX3RleHR1cmVfZnJhbWVfZGVsYXlfbXNfZmllbGRfOwotICAvLyBNZWRpYUNv
ZGVjVmlkZW9EZWNvZGVyLkRlY29kZWRPdXRwdXRCdWZmZXIgZmllbGRzLgotICBqZmllbGRJRCBq
X2luZm9faW5kZXhfZmllbGRfOwotICBqZmllbGRJRCBqX2luZm9fb2Zmc2V0X2ZpZWxkXzsKLSAg
amZpZWxkSUQgal9pbmZvX3NpemVfZmllbGRfOwotICBqZmllbGRJRCBqX3ByZXNlbnRhdGlvbl90
aW1lc3RhbXBfbXNfZmllbGRfOwotICBqZmllbGRJRCBqX3RpbWVzdGFtcF9tc19maWVsZF87Ci0g
IGpmaWVsZElEIGpfbnRwX3RpbWVzdGFtcF9tc19maWVsZF87Ci0gIGpmaWVsZElEIGpfYnl0ZV9i
dWZmZXJfZGVjb2RlX3RpbWVfbXNfZmllbGRfOwotCi0gIC8vIEdsb2JhbCByZWZlcmVuY2VzOyBt
dXN0IGJlIGRlbGV0ZWQgaW4gUmVsZWFzZSgpLgotICBzdGQ6OnZlY3Rvcjxqb2JqZWN0PiBpbnB1
dF9idWZmZXJzXzsKLX07Ci0KLU1lZGlhQ29kZWNWaWRlb0RlY29kZXI6Ok1lZGlhQ29kZWNWaWRl
b0RlY29kZXIoCi0gICAgSk5JRW52KiBqbmksIFZpZGVvQ29kZWNUeXBlIGNvZGVjVHlwZSwgam9i
amVjdCByZW5kZXJfZWdsX2NvbnRleHQpIDoKLSAgICBjb2RlY1R5cGVfKGNvZGVjVHlwZSksCi0g
ICAgcmVuZGVyX2VnbF9jb250ZXh0XyhyZW5kZXJfZWdsX2NvbnRleHQpLAotICAgIGtleV9mcmFt
ZV9yZXF1aXJlZF8odHJ1ZSksCi0gICAgaW5pdGVkXyhmYWxzZSksCi0gICAgc3dfZmFsbGJhY2tf
cmVxdWlyZWRfKGZhbHNlKSwKLSAgICBjb2RlY190aHJlYWRfKG5ldyBUaHJlYWQoKSksCi0gICAg
al9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXygKLSAgICAgICAgam5pLAotICAgICAg
ICBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyIikpLAot
ICAgICAgICAgIGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8oCi0gICAgICAgICAgICAgIGpu
aSwKLSAgICAgICAgICAgICAgam5pLT5OZXdPYmplY3QoKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVj
b2Rlcl9jbGFzc18sCi0gICAgICAgICAgICAgICAgICAgR2V0TWV0aG9kSUQoam5pLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFz
c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiPGluaXQ+IiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIoKVYiKSkpIHsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2Nh
bF9yZWZfZnJhbWUoam5pKTsKLSAgY29kZWNfdGhyZWFkXy0+U2V0TmFtZSgiTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlciIsIE5VTEwpOwotICBSVENfQ0hFQ0soY29kZWNfdGhyZWFkXy0+U3RhcnQoKSkg
PDwgIkZhaWxlZCB0byBzdGFydCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIjsKLQotICBqX2luaXRf
ZGVjb2RlX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNf
dmlkZW9fZGVjb2Rlcl9jbGFzc18sICJpbml0RGVjb2RlIiwKLSAgICAgICIoTG9yZy93ZWJydGMv
TWVkaWFDb2RlY1ZpZGVvRGVjb2RlciRWaWRlb0NvZGVjVHlwZTsiCi0gICAgICAiSUlMb3JnL3dl
YnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlcjspWiIpOwotICBqX3Jlc2V0X21ldGhvZF8gPQotICAg
ICAgR2V0TWV0aG9kSUQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywg
InJlc2V0IiwgIihJSSlWIik7Ci0gIGpfcmVsZWFzZV9tZXRob2RfID0KLSAgICAgIEdldE1ldGhv
ZElEKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJyZWxlYXNlIiwg
IigpViIpOwotICBqX2RlcXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF8gPSBHZXRNZXRob2RJRCgK
LSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJkZXF1ZXVl
SW5wdXRCdWZmZXIiLCAiKClJIik7Ci0gIGpfcXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF8gPSBH
ZXRNZXRob2RJRCgKLSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFz
c18sICJxdWV1ZUlucHV0QnVmZmVyIiwgIihJSUpKSilaIik7Ci0gIGpfZGVxdWV1ZV9ieXRlX2J1
ZmZlcl9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3Zp
ZGVvX2RlY29kZXJfY2xhc3NfLCAiZGVxdWV1ZU91dHB1dEJ1ZmZlciIsCi0gICAgICAiKEkpTG9y
Zy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciREZWNvZGVkT3V0cHV0QnVmZmVyOyIpOwot
ICBqX2RlcXVldWVfdGV4dHVyZV9idWZmZXJfbWV0aG9kXyA9IEdldE1ldGhvZElEKAotICAgICAg
am5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywgImRlcXVldWVUZXh0dXJl
QnVmZmVyIiwKLSAgICAgICIoSSlMb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyJERl
Y29kZWRUZXh0dXJlQnVmZmVyOyIpOwotICBqX3JldHVybl9kZWNvZGVkX2J5dGVfYnVmZmVyX21l
dGhvZF8gPQotICAgICAgR2V0TWV0aG9kSUQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNv
ZGVyX2NsYXNzXywKLSAgICAgICAgICAgICAgICAgICJyZXR1cm5EZWNvZGVkT3V0cHV0QnVmZmVy
IiwgIihJKVYiKTsKLQotICBqX2lucHV0X2J1ZmZlcnNfZmllbGRfID0gR2V0RmllbGRJRCgKLSAg
ICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sCi0gICAgICAiaW5w
dXRCdWZmZXJzIiwgIltMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiKTsKLSAgal9vdXRwdXRfYnVmZmVy
c19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19k
ZWNvZGVyX2NsYXNzXywKLSAgICAgICJvdXRwdXRCdWZmZXJzIiwgIltMamF2YS9uaW8vQnl0ZUJ1
ZmZlcjsiKTsKLSAgal9jb2xvcl9mb3JtYXRfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpu
aSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJjb2xvckZvcm1hdCIsICJJ
Iik7Ci0gIGpfd2lkdGhfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgKmpfbWVkaWFf
Y29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJ3aWR0aCIsICJJIik7Ci0gIGpfaGVpZ2h0X2Zp
ZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29k
ZXJfY2xhc3NfLCAiaGVpZ2h0IiwgIkkiKTsKLSAgal9zdHJpZGVfZmllbGRfID0gR2V0RmllbGRJ
RCgKLSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJzdHJp
ZGUiLCAiSSIpOwotICBqX3NsaWNlX2hlaWdodF9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAg
am5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyX2NsYXNzXywgInNsaWNlSGVpZ2h0Iiwg
IkkiKTsKLQotICBqY2xhc3Mgal9kZWNvZGVkX3RleHR1cmVfYnVmZmVyX2NsYXNzID0gRmluZENs
YXNzKGpuaSwKLSAgICAgICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIkRGVjb2Rl
ZFRleHR1cmVCdWZmZXIiKTsKLSAgal90ZXh0dXJlX2lkX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0g
ICAgICBqbmksIGpfZGVjb2RlZF90ZXh0dXJlX2J1ZmZlcl9jbGFzcywgInRleHR1cmVJRCIsICJJ
Iik7Ci0gIGpfdHJhbnNmb3JtX21hdHJpeF9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5p
LCBqX2RlY29kZWRfdGV4dHVyZV9idWZmZXJfY2xhc3MsICJ0cmFuc2Zvcm1NYXRyaXgiLCAiW0Yi
KTsKLSAgal90ZXh0dXJlX3ByZXNlbnRhdGlvbl90aW1lc3RhbXBfbXNfZmllbGRfID0gR2V0Rmll
bGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX3RleHR1cmVfYnVmZmVyX2NsYXNzLCAicHJlc2Vu
dGF0aW9uVGltZVN0YW1wTXMiLCAiSiIpOwotICBqX3RleHR1cmVfdGltZXN0YW1wX21zX2ZpZWxk
XyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF90ZXh0dXJlX2J1ZmZlcl9jbGFz
cywgInRpbWVTdGFtcE1zIiwgIkoiKTsKLSAgal90ZXh0dXJlX250cF90aW1lc3RhbXBfbXNfZmll
bGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX3RleHR1cmVfYnVmZmVyX2Ns
YXNzLCAibnRwVGltZVN0YW1wTXMiLCAiSiIpOwotICBqX3RleHR1cmVfZGVjb2RlX3RpbWVfbXNf
ZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX3RleHR1cmVfYnVmZmVy
X2NsYXNzLCAiZGVjb2RlVGltZU1zIiwgIkoiKTsKLSAgal90ZXh0dXJlX2ZyYW1lX2RlbGF5X21z
X2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF90ZXh0dXJlX2J1ZmZl
cl9jbGFzcywgImZyYW1lRGVsYXlNcyIsICJKIik7Ci0KLSAgamNsYXNzIGpfZGVjb2RlZF9vdXRw
dXRfYnVmZmVyX2NsYXNzID0gRmluZENsYXNzKGpuaSwKLSAgICAgICJvcmcvd2VicnRjL01lZGlh
Q29kZWNWaWRlb0RlY29kZXIkRGVjb2RlZE91dHB1dEJ1ZmZlciIpOwotICBqX2luZm9faW5kZXhf
ZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX291dHB1dF9idWZmZXJf
Y2xhc3MsICJpbmRleCIsICJJIik7Ci0gIGpfaW5mb19vZmZzZXRfZmllbGRfID0gR2V0RmllbGRJ
RCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX291dHB1dF9idWZmZXJfY2xhc3MsICJvZmZzZXQiLCAi
SSIpOwotICBqX2luZm9fc2l6ZV9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX2Rl
Y29kZWRfb3V0cHV0X2J1ZmZlcl9jbGFzcywgInNpemUiLCAiSSIpOwotICBqX3ByZXNlbnRhdGlv
bl90aW1lc3RhbXBfbXNfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVk
X291dHB1dF9idWZmZXJfY2xhc3MsICJwcmVzZW50YXRpb25UaW1lU3RhbXBNcyIsICJKIik7Ci0g
IGpfdGltZXN0YW1wX21zX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2Rl
ZF9vdXRwdXRfYnVmZmVyX2NsYXNzLCAidGltZVN0YW1wTXMiLCAiSiIpOwotICBqX250cF90aW1l
c3RhbXBfbXNfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVkX291dHB1
dF9idWZmZXJfY2xhc3MsICJudHBUaW1lU3RhbXBNcyIsICJKIik7Ci0gIGpfYnl0ZV9idWZmZXJf
ZGVjb2RlX3RpbWVfbXNfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9kZWNvZGVk
X291dHB1dF9idWZmZXJfY2xhc3MsICJkZWNvZGVUaW1lTXMiLCAiSiIpOwotCi0gIENIRUNLX0VY
Q0VQVElPTihqbmkpIDw8ICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIGN0b3IgZmFpbGVkIjsKLSAg
dXNlX3N1cmZhY2VfID0gKHJlbmRlcl9lZ2xfY29udGV4dF8gIT0gTlVMTCk7Ci0gIEFMT0dEIDw8
ICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIGN0b3IuIFVzZSBzdXJmYWNlOiAiIDw8IHVzZV9zdXJm
YWNlXzsKLSAgbWVtc2V0KCZjb2RlY18sIDAsIHNpemVvZihjb2RlY18pKTsKLSAgQWxsb3dCbG9j
a2luZ0NhbGxzKCk7Ci19Ci0KLU1lZGlhQ29kZWNWaWRlb0RlY29kZXI6On5NZWRpYUNvZGVjVmlk
ZW9EZWNvZGVyKCkgewotICAvLyBDYWxsIFJlbGVhc2UoKSB0byBlbnN1cmUgbm8gbW9yZSBjYWxs
YmFja3MgdG8gdXMgYWZ0ZXIgd2UgYXJlIGRlbGV0ZWQuCi0gIFJlbGVhc2UoKTsKLX0KLQotaW50
MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpJbml0RGVjb2RlKGNvbnN0IFZpZGVvQ29kZWMq
IGluc3QsCi0gICAgaW50MzJfdCBudW1iZXJPZkNvcmVzKSB7Ci0gIEFMT0dEIDw8ICJJbml0RGVj
b2RlLiI7Ci0gIGlmIChpbnN0ID09IE5VTEwpIHsKLSAgICBBTE9HRSA8PCAiTlVMTCBWaWRlb0Nv
ZGVjIGluc3RhbmNlIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUl9QQVJBTUVU
RVI7Ci0gIH0KLSAgLy8gRmFjdG9yeSBzaG91bGQgZ3VhcmQgYWdhaW5zdCBvdGhlciBjb2RlY3Mg
YmVpbmcgdXNlZCB3aXRoIHVzLgotICBSVENfQ0hFQ0soaW5zdC0+Y29kZWNUeXBlID09IGNvZGVj
VHlwZV8pCi0gICAgICA8PCAiVW5zdXBwb3J0ZWQgY29kZWMgIiA8PCBpbnN0LT5jb2RlY1R5cGUg
PDwgIiBmb3IgIiA8PCBjb2RlY1R5cGVfOwotCi0gIGlmIChzd19mYWxsYmFja19yZXF1aXJlZF8p
IHsKLSAgICBBTE9HRSA8PCAiSW5pdERlY29kZSgpIC0gZmFsbGJhY2sgdG8gU1cgZGVjb2RlciI7
Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQotICAvLyBTYXZlIFZpZGVv
Q29kZWMgaW5zdGFuY2UgZm9yIGxhdGVyLgotICBpZiAoJmNvZGVjXyAhPSBpbnN0KSB7Ci0gICAg
Y29kZWNfID0gKmluc3Q7Ci0gIH0KLSAgLy8gSWYgbWF4RnJhbWVyYXRlIGlzIG5vdCBzZXQgdGhl
biBhc3N1bWUgMzAgZnBzLgotICBjb2RlY18ubWF4RnJhbWVyYXRlID0gKGNvZGVjXy5tYXhGcmFt
ZXJhdGUgPj0gMSkgPyBjb2RlY18ubWF4RnJhbWVyYXRlIDogMzA7Ci0KLSAgLy8gQ2FsbCBKYXZh
IGluaXQuCi0gIHJldHVybiBjb2RlY190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0gICAgICBS
VENfRlJPTV9IRVJFLAotICAgICAgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6SW5pdERl
Y29kZU9uQ29kZWNUaHJlYWQsIHRoaXMpKTsKLX0KLQotdm9pZCBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyOjpSZXNldFZhcmlhYmxlcygpIHsKLSAgQ2hlY2tPbkNvZGVjVGhyZWFkKCk7Ci0KLSAga2V5
X2ZyYW1lX3JlcXVpcmVkXyA9IHRydWU7Ci0gIGZyYW1lc19yZWNlaXZlZF8gPSAwOwotICBmcmFt
ZXNfZGVjb2RlZF8gPSAwOwotICBmcmFtZXNfZGVjb2RlZF9sb2dnZWRfID0ga01heERlY29kZWRM
b2dGcmFtZXM7Ci0gIHN0YXJ0X3RpbWVfbXNfID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gIGN1cnJl
bnRfZnJhbWVzXyA9IDA7Ci0gIGN1cnJlbnRfYnl0ZXNfID0gMDsKLSAgY3VycmVudF9kZWNvZGlu
Z190aW1lX21zXyA9IDA7Ci0gIGN1cnJlbnRfZGVsYXlfdGltZV9tc18gPSAwOwotfQotCi1pbnQz
Ml90IE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OkluaXREZWNvZGVPbkNvZGVjVGhyZWFkKCkgewot
ICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhy
ZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5p
KTsKLSAgQUxPR0QgPDwgIkluaXREZWNvZGVPbkNvZGVjVGhyZWFkIFR5cGU6ICIgPDwgKGludClj
b2RlY1R5cGVfIDw8ICIuICIKLSAgICAgIDw8IGNvZGVjXy53aWR0aCA8PCAiIHggIiA8PCBjb2Rl
Y18uaGVpZ2h0IDw8ICIuIEZwczogIiA8PAotICAgICAgKGludCljb2RlY18ubWF4RnJhbWVyYXRl
OwotCi0gIC8vIFJlbGVhc2UgcHJldmlvdXMgY29kZWMgZmlyc3QgaWYgaXQgd2FzIGFsbG9jYXRl
ZCBiZWZvcmUuCi0gIGludCByZXRfdmFsID0gUmVsZWFzZU9uQ29kZWNUaHJlYWQoKTsKLSAgaWYg
KHJldF92YWwgPCAwKSB7Ci0gICAgQUxPR0UgPDwgIlJlbGVhc2UgZmFpbHVyZTogIiA8PCByZXRf
dmFsIDw8ICIgLSBmYWxsYmFjayB0byBTVyBjb2RlYyI7Ci0gICAgc3dfZmFsbGJhY2tfcmVxdWly
ZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0K
LSAgUmVzZXRWYXJpYWJsZXMoKTsKLQotICBpZiAodXNlX3N1cmZhY2VfKSB7Ci0gICAgc3VyZmFj
ZV90ZXh0dXJlX2hlbHBlcl8gPSBTdXJmYWNlVGV4dHVyZUhlbHBlcjo6Y3JlYXRlKAotICAgICAg
ICBqbmksICJEZWNvZGVyIFN1cmZhY2VUZXh0dXJlSGVscGVyIiwgcmVuZGVyX2VnbF9jb250ZXh0
Xyk7Ci0gICAgaWYgKCFzdXJmYWNlX3RleHR1cmVfaGVscGVyXykgewotICAgICAgQUxPR0UgPDwg
IkNvdWxkbid0IGNyZWF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciAtIGZhbGxiYWNrIHRvIFNXIGNv
ZGVjIjsKLSAgICAgIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA9IHRydWU7Ci0gICAgICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0KLSAgfQotCi0gIGpvYmplY3Qgal92aWRl
b19jb2RlY19lbnVtID0gSmF2YUVudW1Gcm9tSW5kZXhBbmRDbGFzc05hbWUoCi0gICAgICBqbmks
ICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyJFZpZGVvQ29kZWNUeXBlIiwgY29kZWNUeXBlXyk7Ci0g
IGJvb2wgc3VjY2VzcyA9IGpuaS0+Q2FsbEJvb2xlYW5NZXRob2QoCi0gICAgICAqal9tZWRpYV9j
b2RlY192aWRlb19kZWNvZGVyXywKLSAgICAgIGpfaW5pdF9kZWNvZGVfbWV0aG9kXywKLSAgICAg
IGpfdmlkZW9fY29kZWNfZW51bSwKLSAgICAgIGNvZGVjXy53aWR0aCwKLSAgICAgIGNvZGVjXy5o
ZWlnaHQsCi0gICAgICB1c2Vfc3VyZmFjZV8gPyBzdXJmYWNlX3RleHR1cmVfaGVscGVyXy0+R2V0
SmF2YVN1cmZhY2VUZXh0dXJlSGVscGVyKCkKLSAgICAgICAgICAgICAgICAgICA6IG51bGxwdHIp
OwotCi0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpIHx8ICFzdWNjZXNzKSB7Ci0gICAgQUxPR0Ug
PDwgIkNvZGVjIGluaXRpYWxpemF0aW9uIGVycm9yIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMuIjsK
LSAgICBzd19mYWxsYmFja19yZXF1aXJlZF8gPSB0cnVlOwotICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRVJST1I7Ci0gIH0KLSAgaW5pdGVkXyA9IHRydWU7Ci0KLSAgc3dpdGNoIChjb2Rl
Y1R5cGVfKSB7Ci0gICAgY2FzZSBrVmlkZW9Db2RlY1ZQODoKLSAgICAgIG1heF9wZW5kaW5nX2Zy
YW1lc18gPSBrTWF4UGVuZGluZ0ZyYW1lc1ZwODsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Uga1Zp
ZGVvQ29kZWNWUDk6Ci0gICAgICBtYXhfcGVuZGluZ19mcmFtZXNfID0ga01heFBlbmRpbmdGcmFt
ZXNWcDk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGtWaWRlb0NvZGVjSDI2NDoKLSAgICAgIG1h
eF9wZW5kaW5nX2ZyYW1lc18gPSBrTWF4UGVuZGluZ0ZyYW1lc0gyNjQ7Ci0gICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgbWF4X3BlbmRpbmdfZnJhbWVzXyA9IDA7Ci0gIH0KLSAgQUxP
R0QgPDwgIk1heGltdW0gYW1vdW50IG9mIHBlbmRpbmcgZnJhbWVzOiAiIDw8IG1heF9wZW5kaW5n
X2ZyYW1lc187Ci0KLSAgam9iamVjdEFycmF5IGlucHV0X2J1ZmZlcnMgPSAoam9iamVjdEFycmF5
KUdldE9iamVjdEZpZWxkKAotICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVy
Xywgal9pbnB1dF9idWZmZXJzX2ZpZWxkXyk7Ci0gIHNpemVfdCBudW1faW5wdXRfYnVmZmVycyA9
IGpuaS0+R2V0QXJyYXlMZW5ndGgoaW5wdXRfYnVmZmVycyk7Ci0gIGlucHV0X2J1ZmZlcnNfLnJl
c2l6ZShudW1faW5wdXRfYnVmZmVycyk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtX2lu
cHV0X2J1ZmZlcnM7ICsraSkgewotICAgIGlucHV0X2J1ZmZlcnNfW2ldID0KLSAgICAgICAgam5p
LT5OZXdHbG9iYWxSZWYoam5pLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoaW5wdXRfYnVmZmVycywg
aSkpOwotICAgIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgICBBTE9HRSA8PCAiTmV3
R2xvYmFsUmVmIGVycm9yIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMuIjsKLSAgICAgIHN3X2ZhbGxi
YWNrX3JlcXVpcmVkXyA9IHRydWU7Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VS
Uk9SOwotICAgIH0KLSAgfQotCi0gIGNvZGVjX3RocmVhZF8tPlBvc3REZWxheWVkKFJUQ19GUk9N
X0hFUkUsIGtNZWRpYUNvZGVjUG9sbE1zLCB0aGlzKTsKLQotICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX09LOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlc2V0RGVj
b2RlT25Db2RlY1RocmVhZCgpIHsKLSAgQ2hlY2tPbkNvZGVjVGhyZWFkKCk7Ci0gIEpOSUVudiog
am5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJh
bWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIEFMT0dEIDw8ICJSZXNldERlY29kZU9uQ29kZWNU
aHJlYWQgVHlwZTogIiA8PCAoaW50KWNvZGVjVHlwZV8gPDwgIi4gIgotICAgICAgPDwgY29kZWNf
LndpZHRoIDw8ICIgeCAiIDw8IGNvZGVjXy5oZWlnaHQ7Ci0gIEFMT0dEIDw8ICIgIEZyYW1lcyBy
ZWNlaXZlZDogIiA8PCBmcmFtZXNfcmVjZWl2ZWRfIDw8Ci0gICAgICAiLiBGcmFtZXMgZGVjb2Rl
ZDogIiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0KLSAgaW5pdGVkXyA9IGZhbHNlOwotICBydGM6Ok1l
c3NhZ2VRdWV1ZU1hbmFnZXI6OkNsZWFyKHRoaXMpOwotICBSZXNldFZhcmlhYmxlcygpOwotCi0g
IGpuaS0+Q2FsbFZvaWRNZXRob2QoCi0gICAgICAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVy
XywKLSAgICAgIGpfcmVzZXRfbWV0aG9kXywKLSAgICAgIGNvZGVjXy53aWR0aCwKLSAgICAgIGNv
ZGVjXy5oZWlnaHQpOwotCi0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0Ug
PDwgIlNvZnQgcmVzZXQgZXJyb3IgLSBmYWxsYmFjayB0byBTVyBjb2RlYy4iOwotICAgIHN3X2Zh
bGxiYWNrX3JlcXVpcmVkXyA9IHRydWU7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19F
UlJPUjsKLSAgfQotICBpbml0ZWRfID0gdHJ1ZTsKLQotICBjb2RlY190aHJlYWRfLT5Qb3N0RGVs
YXllZChSVENfRlJPTV9IRVJFLCBrTWVkaWFDb2RlY1BvbGxNcywgdGhpcyk7Ci0KLSAgcmV0dXJu
IFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyOjpSZWxlYXNlKCkgewotICBBTE9HRCA8PCAiRGVjb2RlclJlbGVhc2UgcmVxdWVzdCI7Ci0g
IHJldHVybiBjb2RlY190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0gICAgICBSVENfRlJPTV9I
RVJFLCBCaW5kKCZNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpSZWxlYXNlT25Db2RlY1RocmVhZCwg
dGhpcykpOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlbGVhc2VPbkNv
ZGVjVGhyZWFkKCkgewotICBpZiAoIWluaXRlZF8pIHsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVP
X0NPREVDX09LOwotICB9Ci0gIENoZWNrT25Db2RlY1RocmVhZCgpOwotICBKTklFbnYqIGpuaSA9
IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBBTE9HRCA8PCAiRGVjb2RlclJlbGVh
c2VPbkNvZGVjVGhyZWFkOiBGcmFtZXMgcmVjZWl2ZWQ6ICIgPDwKLSAgICAgIGZyYW1lc19yZWNl
aXZlZF8gPDwgIi4gRnJhbWVzIGRlY29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfOwotICBTY29w
ZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGlucHV0X2J1ZmZlcnNfLnNpemUoKTsgaSsrKSB7Ci0gICAgam5pLT5EZWxldGVHbG9i
YWxSZWYoaW5wdXRfYnVmZmVyc19baV0pOwotICB9Ci0gIGlucHV0X2J1ZmZlcnNfLmNsZWFyKCk7
Ci0gIGpuaS0+Q2FsbFZvaWRNZXRob2QoKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8sIGpf
cmVsZWFzZV9tZXRob2RfKTsKLSAgc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl8gPSBudWxscHRyOwot
ICBpbml0ZWRfID0gZmFsc2U7Ci0gIHJ0Yzo6TWVzc2FnZVF1ZXVlTWFuYWdlcjo6Q2xlYXIodGhp
cyk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIkRlY29kZXIg
cmVsZWFzZSBleGNlcHRpb24iOwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7
Ci0gIH0KLSAgQUxPR0QgPDwgIkRlY29kZXJSZWxlYXNlT25Db2RlY1RocmVhZCBkb25lIjsKLSAg
cmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotdm9pZCBNZWRpYUNvZGVjVmlkZW9E
ZWNvZGVyOjpDaGVja09uQ29kZWNUaHJlYWQoKSB7Ci0gIFJUQ19DSEVDSyhjb2RlY190aHJlYWRf
LmdldCgpID09IFRocmVhZE1hbmFnZXI6Okluc3RhbmNlKCktPkN1cnJlbnRUaHJlYWQoKSkKLSAg
ICAgIDw8ICJSdW5uaW5nIG9uIHdyb25nIHRocmVhZCEiOwotfQotCi12b2lkIE1lZGlhQ29kZWNW
aWRlb0RlY29kZXI6OkVuYWJsZUZyYW1lTG9nT25XYXJuaW5nKCkgewotICAvLyBMb2cgbmV4dCAy
IG91dHB1dCBmcmFtZXMuCi0gIGZyYW1lc19kZWNvZGVkX2xvZ2dlZF8gPSBzdGQ6Om1heCgKLSAg
ICAgIGZyYW1lc19kZWNvZGVkX2xvZ2dlZF8sIGZyYW1lc19kZWNvZGVkXyArIGtNYXhXYXJuaW5n
TG9nRnJhbWVzKTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpQcm9jZXNz
SFdFcnJvck9uQ29kZWNUaHJlYWQoKSB7Ci0gIENoZWNrT25Db2RlY1RocmVhZCgpOwotICBpbnQg
cmV0X3ZhbCA9IFJlbGVhc2VPbkNvZGVjVGhyZWFkKCk7Ci0gIGlmIChyZXRfdmFsIDwgMCkgewot
ICAgIEFMT0dFIDw8ICJQcm9jZXNzSFdFcnJvcjogUmVsZWFzZSBmYWlsdXJlIjsKLSAgfQotICBp
ZiAoY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY0gyNjQpIHsKLSAgICAvLyBGb3Igbm93IHRoZXJl
IGlzIG5vIFNXIEguMjY0IHdoaWNoIGNhbiBiZSB1c2VkIGFzIGZhbGxiYWNrIGNvZGVjLgotICAg
IC8vIFNvIHRyeSB0byByZXN0YXJ0IGh3IGNvZGVjIGZvciBub3cuCi0gICAgcmV0X3ZhbCA9IElu
aXREZWNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0gICAgQUxPR0UgPDwgIlJlc2V0IEguMjY0IGNvZGVj
IGRvbmUuIFN0YXR1czogIiA8PCByZXRfdmFsOwotICAgIGlmIChyZXRfdmFsID09IFdFQlJUQ19W
SURFT19DT0RFQ19PSykgewotICAgICAgLy8gSC4yNjQgY29kZWMgd2FzIHN1Y2Nlc2Z1bGx5IHJl
c2V0IC0gcmV0dXJuIHJlZ3VsYXIgZXJyb3IgY29kZS4KLSAgICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRVJST1I7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEZhaWwgdG8gcmVzdGFydCBI
LjI2NCBjb2RlYyAtIHJldHVybiBlcnJvciBjb2RlIHdoaWNoIHNob3VsZCBzdG9wIHRoZQotICAg
ICAgLy8gY2FsbC4KLSAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09G
VFdBUkU7Ci0gICAgfQotICB9IGVsc2UgewotICAgIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA9IHRy
dWU7Ci0gICAgQUxPR0UgPDwgIlJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09G
VFdBUkUiOwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdBUkU7
Ci0gIH0KLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpEZWNvZGUoCi0gICAg
Y29uc3QgRW5jb2RlZEltYWdlJiBpbnB1dEltYWdlLAotICAgIGJvb2wgbWlzc2luZ0ZyYW1lcywK
LSAgICBjb25zdCBSVFBGcmFnbWVudGF0aW9uSGVhZGVyKiBmcmFnbWVudGF0aW9uLAotICAgIGNv
bnN0IENvZGVjU3BlY2lmaWNJbmZvKiBjb2RlY1NwZWNpZmljSW5mbywKLSAgICBpbnQ2NF90IHJl
bmRlclRpbWVNcykgewotICBpZiAoc3dfZmFsbGJhY2tfcmVxdWlyZWRfKSB7Ci0gICAgQUxPR0Ug
PDwgIkRlY29kZSgpIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMiOwotICAgIHJldHVybiBXRUJSVENf
VklERU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdBUkU7Ci0gIH0KLSAgaWYgKGNhbGxiYWNrXyA9PSBO
VUxMKSB7Ci0gICAgQUxPR0UgPDwgIkRlY29kZSgpIC0gY2FsbGJhY2tfIGlzIE5VTEwiOwotICAg
IHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpFRDsKLSAgfQotICBpZiAoaW5w
dXRJbWFnZS5fYnVmZmVyID09IE5VTEwgJiYgaW5wdXRJbWFnZS5fbGVuZ3RoID4gMCkgewotICAg
IEFMT0dFIDw8ICJEZWNvZGUoKSAtIGlucHV0SW1hZ2UgaXMgaW5jb3JyZWN0IjsKLSAgICByZXR1
cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUl9QQVJBTUVURVI7Ci0gIH0KLSAgaWYgKCFpbml0ZWRf
KSB7Ci0gICAgQUxPR0UgPDwgIkRlY29kZSgpIC0gZGVjb2RlciBpcyBub3QgaW5pdGlhbGl6ZWQi
OwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpFRDsKLSAgfQotCi0g
IC8vIENoZWNrIGlmIGVuY29kZWQgZnJhbWUgZGltZW5zaW9uIGhhcyBjaGFuZ2VkLgotICBpZiAo
KGlucHV0SW1hZ2UuX2VuY29kZWRXaWR0aCAqIGlucHV0SW1hZ2UuX2VuY29kZWRIZWlnaHQgPiAw
KSAmJgotICAgICAgKGlucHV0SW1hZ2UuX2VuY29kZWRXaWR0aCAhPSBjb2RlY18ud2lkdGggfHwK
LSAgICAgIGlucHV0SW1hZ2UuX2VuY29kZWRIZWlnaHQgIT0gY29kZWNfLmhlaWdodCkpIHsKLSAg
ICBBTE9HVyA8PCAiSW5wdXQgcmVzb2x1dGlvbiBjaGFuZ2VkIGZyb20gIiA8PAotICAgICAgICBj
b2RlY18ud2lkdGggPDwgIiB4ICIgPDwgY29kZWNfLmhlaWdodCA8PCAiIHRvICIgPDwKLSAgICAg
ICAgaW5wdXRJbWFnZS5fZW5jb2RlZFdpZHRoIDw8ICIgeCAiIDw8IGlucHV0SW1hZ2UuX2VuY29k
ZWRIZWlnaHQ7Ci0gICAgY29kZWNfLndpZHRoID0gaW5wdXRJbWFnZS5fZW5jb2RlZFdpZHRoOwot
ICAgIGNvZGVjXy5oZWlnaHQgPSBpbnB1dEltYWdlLl9lbmNvZGVkSGVpZ2h0OwotICAgIGludDMy
X3QgcmV0OwotICAgIGlmICh1c2Vfc3VyZmFjZV8gJiYKLSAgICAgICAgKGNvZGVjVHlwZV8gPT0g
a1ZpZGVvQ29kZWNWUDggfHwgY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY0gyNjQpKSB7Ci0gICAg
ICAvLyBTb2Z0IGNvZGVjIHJlc2V0IC0gb25seSBmb3Igc3VyZmFjZSBkZWNvZGluZy4KLSAgICAg
IHJldCA9IGNvZGVjX3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAgICAgICBSVENfRlJP
TV9IRVJFLAotICAgICAgICAgIEJpbmQoJk1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJlc2V0RGVj
b2RlT25Db2RlY1RocmVhZCwgdGhpcykpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBIYXJkIGNv
ZGVjIHJlc2V0LgotICAgICAgcmV0ID0gSW5pdERlY29kZSgmY29kZWNfLCAxKTsKLSAgICB9Ci0g
ICAgaWYgKHJldCA8IDApIHsKLSAgICAgIEFMT0dFIDw8ICJJbml0RGVjb2RlIGZhaWx1cmU6ICIg
PDwgcmV0IDw8ICIgLSBmYWxsYmFjayB0byBTVyBjb2RlYyI7Ci0gICAgICBzd19mYWxsYmFja19y
ZXF1aXJlZF8gPSB0cnVlOwotICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19GQUxMQkFD
S19TT0ZUV0FSRTsKLSAgICB9Ci0gIH0KLQotICAvLyBBbHdheXMgc3RhcnQgd2l0aCBhIGNvbXBs
ZXRlIGtleSBmcmFtZS4KLSAgaWYgKGtleV9mcmFtZV9yZXF1aXJlZF8pIHsKLSAgICBpZiAoaW5w
dXRJbWFnZS5fZnJhbWVUeXBlICE9IHdlYnJ0Yzo6a1ZpZGVvRnJhbWVLZXkpIHsKLSAgICAgIEFM
T0dFIDw8ICJEZWNvZGUoKSAtIGtleSBmcmFtZSBpcyByZXF1aXJlZCI7Ci0gICAgICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0KLSAgICBpZiAoIWlucHV0SW1hZ2UuX2Nv
bXBsZXRlRnJhbWUpIHsKLSAgICAgIEFMT0dFIDw8ICJEZWNvZGUoKSAtIGNvbXBsZXRlIGZyYW1l
IGlzIHJlcXVpcmVkIjsKLSAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0g
ICAgfQotICAgIGtleV9mcmFtZV9yZXF1aXJlZF8gPSBmYWxzZTsKLSAgfQotICBpZiAoaW5wdXRJ
bWFnZS5fbGVuZ3RoID09IDApIHsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9S
OwotICB9Ci0KLSAgcmV0dXJuIGNvZGVjX3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAg
IFJUQ19GUk9NX0hFUkUsCi0gICAgICBCaW5kKCZNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpEZWNv
ZGVPbkNvZGVjVGhyZWFkLCB0aGlzLCBpbnB1dEltYWdlKSk7Ci19Ci0KLWludDMyX3QgTWVkaWFD
b2RlY1ZpZGVvRGVjb2Rlcjo6RGVjb2RlT25Db2RlY1RocmVhZCgKLSAgICBjb25zdCBFbmNvZGVk
SW1hZ2UmIGlucHV0SW1hZ2UpIHsKLSAgQ2hlY2tPbkNvZGVjVGhyZWFkKCk7Ci0gIEpOSUVudiog
am5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJh
bWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0KLSAgLy8gVHJ5IHRvIGRyYWluIHRoZSBkZWNvZGVy
IGFuZCB3YWl0IHVudGlsIG91dHB1dCBpcyBub3QgdG9vCi0gIC8vIG11Y2ggYmVoaW5kIHRoZSBp
bnB1dC4KLSAgaWYgKGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNIMjY0ICYmCi0gICAgICBmcmFt
ZXNfcmVjZWl2ZWRfID4gZnJhbWVzX2RlY29kZWRfICsgbWF4X3BlbmRpbmdfZnJhbWVzXykgewot
ICAgIC8vIFByaW50IHdhcm5pbmcgZm9yIEguMjY0IG9ubHkgLSBmb3IgVlA4L1ZQOSBvbmUgZnJh
bWUgZGVsYXkgaXMgb2suCi0gICAgQUxPR1cgPDwgIkRlY29kZXIgaXMgdG9vIGZhciBiZWhpbmQu
IFRyeSB0byBkcmFpbi4gUmVjZWl2ZWQ6ICIgPDwKLSAgICAgICAgZnJhbWVzX3JlY2VpdmVkXyA8
PCAiLiBEZWNvZGVkOiAiIDw8IGZyYW1lc19kZWNvZGVkXzsKLSAgICBFbmFibGVGcmFtZUxvZ09u
V2FybmluZygpOwotICB9Ci0gIGNvbnN0IGludDY0IGRyYWluX3N0YXJ0ID0gcnRjOjpUaW1lTWls
bGlzKCk7Ci0gIHdoaWxlICgoZnJhbWVzX3JlY2VpdmVkXyA+IGZyYW1lc19kZWNvZGVkXyArIG1h
eF9wZW5kaW5nX2ZyYW1lc18pICYmCi0gICAgICAgICAocnRjOjpUaW1lTWlsbGlzKCkgLSBkcmFp
bl9zdGFydCkgPCBrTWVkaWFDb2RlY1RpbWVvdXRNcykgewotICAgIGlmICghRGVsaXZlclBlbmRp
bmdPdXRwdXRzKGpuaSwga01lZGlhQ29kZWNQb2xsTXMpKSB7Ci0gICAgICBBTE9HRSA8PCAiRGVs
aXZlclBlbmRpbmdPdXRwdXRzIGVycm9yLiBGcmFtZXMgcmVjZWl2ZWQ6ICIgPDwKLSAgICAgICAg
ICBmcmFtZXNfcmVjZWl2ZWRfIDw8ICIuIEZyYW1lcyBkZWNvZGVkOiAiIDw8IGZyYW1lc19kZWNv
ZGVkXzsKLSAgICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsKLSAgICB9
Ci0gIH0KLSAgaWYgKGZyYW1lc19yZWNlaXZlZF8gPiBmcmFtZXNfZGVjb2RlZF8gKyBtYXhfcGVu
ZGluZ19mcmFtZXNfKSB7Ci0gICAgQUxPR0UgPDwgIk91dHB1dCBidWZmZXIgZGVxdWV1ZSB0aW1l
b3V0LiBGcmFtZXMgcmVjZWl2ZWQ6ICIgPDwKLSAgICAgICAgZnJhbWVzX3JlY2VpdmVkXyA8PCAi
LiBGcmFtZXMgZGVjb2RlZDogIiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0gICAgcmV0dXJuIFByb2Nl
c3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICB9Ci0KLSAgLy8gR2V0IGlucHV0IGJ1ZmZlci4K
LSAgaW50IGpfaW5wdXRfYnVmZmVyX2luZGV4ID0gam5pLT5DYWxsSW50TWV0aG9kKAotICAgICAg
KmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8sIGpfZGVxdWV1ZV9pbnB1dF9idWZmZXJfbWV0
aG9kXyk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpIHx8IGpfaW5wdXRfYnVmZmVyX2luZGV4
IDwgMCkgewotICAgIEFMT0dFIDw8ICJkZXF1ZXVlSW5wdXRCdWZmZXIgZXJyb3I6ICIgPDwgal9p
bnB1dF9idWZmZXJfaW5kZXggPDwKLSAgICAgICAgIi4gUmV0cnkgRGVsaXZlclBlbmRpbmdPdXRw
dXRzLiI7Ci0gICAgRW5hYmxlRnJhbWVMb2dPbldhcm5pbmcoKTsKLSAgICAvLyBUcnkgdG8gZHJh
aW4gdGhlIGRlY29kZXIuCi0gICAgaWYgKCFEZWxpdmVyUGVuZGluZ091dHB1dHMoam5pLCBrTWVk
aWFDb2RlY1BvbGxNcykpIHsKLSAgICAgIEFMT0dFIDw8ICJEZWxpdmVyUGVuZGluZ091dHB1dHMg
ZXJyb3IuIEZyYW1lcyByZWNlaXZlZDogIiA8PAotICAgICAgICAgIGZyYW1lc19yZWNlaXZlZF8g
PDwgIi4gRnJhbWVzIGRlY29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfOwotICAgICAgcmV0dXJu
IFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICAgIH0KLSAgICAvLyBUcnkgZGVxdWV1
ZSBpbnB1dCBidWZmZXIgb25lIGxhc3QgdGltZS4KLSAgICBqX2lucHV0X2J1ZmZlcl9pbmRleCA9
IGpuaS0+Q2FsbEludE1ldGhvZCgKLSAgICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rl
cl8sIGpfZGVxdWV1ZV9pbnB1dF9idWZmZXJfbWV0aG9kXyk7Ci0gICAgaWYgKENoZWNrRXhjZXB0
aW9uKGpuaSkgfHwgal9pbnB1dF9idWZmZXJfaW5kZXggPCAwKSB7Ci0gICAgICBBTE9HRSA8PCAi
ZGVxdWV1ZUlucHV0QnVmZmVyIGNyaXRpY2FsIGVycm9yOiAiIDw8IGpfaW5wdXRfYnVmZmVyX2lu
ZGV4OwotICAgICAgcmV0dXJuIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICAgIH0K
LSAgfQotCi0gIC8vIENvcHkgZW5jb2RlZCBkYXRhIHRvIEphdmEgQnl0ZUJ1ZmZlci4KLSAgam9i
amVjdCBqX2lucHV0X2J1ZmZlciA9IGlucHV0X2J1ZmZlcnNfW2pfaW5wdXRfYnVmZmVyX2luZGV4
XTsKLSAgdWludDhfdCogYnVmZmVyID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX2lucHV0X2J1ZmZlcikpOwotICBSVENfQ0hF
Q0soYnVmZmVyKSA8PCAiSW5kaXJlY3QgYnVmZmVyPz8iOwotICBpbnQ2NF90IGJ1ZmZlcl9jYXBh
Y2l0eSA9IGpuaS0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoal9pbnB1dF9idWZmZXIpOwotICBp
ZiAoQ2hlY2tFeGNlcHRpb24oam5pKSB8fCBidWZmZXJfY2FwYWNpdHkgPCBpbnB1dEltYWdlLl9s
ZW5ndGgpIHsKLSAgICBBTE9HRSA8PCAiSW5wdXQgZnJhbWUgc2l6ZSAiPDwgIGlucHV0SW1hZ2Uu
X2xlbmd0aCA8PAotICAgICAgICAiIGlzIGJpZ2dlciB0aGFuIGJ1ZmZlciBzaXplICIgPDwgYnVm
ZmVyX2NhcGFjaXR5OwotICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsK
LSAgfQotICBqbG9uZyBwcmVzZW50YXRpb25fdGltZXN0YW1wX3VzID0gc3RhdGljX2Nhc3Q8amxv
bmc+KAotICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZnJhbWVzX3JlY2VpdmVkXykgKiAxMDAw
MDAwIC8gY29kZWNfLm1heEZyYW1lcmF0ZSk7Ci0gIG1lbWNweShidWZmZXIsIGlucHV0SW1hZ2Uu
X2J1ZmZlciwgaW5wdXRJbWFnZS5fbGVuZ3RoKTsKLQotICBpZiAoZnJhbWVzX2RlY29kZWRfIDwg
ZnJhbWVzX2RlY29kZWRfbG9nZ2VkXykgewotICAgIEFMT0dEIDw8ICJEZWNvZGVyIGZyYW1lIGlu
ICMgIiA8PCBmcmFtZXNfcmVjZWl2ZWRfIDw8Ci0gICAgICAgICIuIFR5cGU6ICIgPDwgaW5wdXRJ
bWFnZS5fZnJhbWVUeXBlIDw8Ci0gICAgICAgICIuIEJ1ZmZlciAjICIgPDwgal9pbnB1dF9idWZm
ZXJfaW5kZXggPDwKLSAgICAgICAgIi4gVFM6ICIgPDwgcHJlc2VudGF0aW9uX3RpbWVzdGFtcF91
cyAvIDEwMDAgPDwKLSAgICAgICAgIi4gU2l6ZTogIiA8PCBpbnB1dEltYWdlLl9sZW5ndGg7Ci0g
IH0KLQotICAvLyBTYXZlIGlucHV0IGltYWdlIHRpbWVzdGFtcHMgZm9yIGxhdGVyIG91dHB1dC4K
LSAgZnJhbWVzX3JlY2VpdmVkXysrOwotICBjdXJyZW50X2J5dGVzXyArPSBpbnB1dEltYWdlLl9s
ZW5ndGg7Ci0KLSAgLy8gRmVlZCBpbnB1dCB0byBkZWNvZGVyLgotICBib29sIHN1Y2Nlc3MgPSBq
bmktPkNhbGxCb29sZWFuTWV0aG9kKAotICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rl
cl8sCi0gICAgICBqX3F1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2RfLAotICAgICAgal9pbnB1dF9i
dWZmZXJfaW5kZXgsCi0gICAgICBpbnB1dEltYWdlLl9sZW5ndGgsCi0gICAgICBwcmVzZW50YXRp
b25fdGltZXN0YW1wX3VzLAotICAgICAgc3RhdGljX2Nhc3Q8aW50NjRfdD4gKGlucHV0SW1hZ2Uu
X3RpbWVTdGFtcCksCi0gICAgICBpbnB1dEltYWdlLm50cF90aW1lX21zXyk7Ci0gIGlmIChDaGVj
a0V4Y2VwdGlvbihqbmkpIHx8ICFzdWNjZXNzKSB7Ci0gICAgQUxPR0UgPDwgInF1ZXVlSW5wdXRC
dWZmZXIgZXJyb3IiOwotICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsK
LSAgfQotCi0gIC8vIFRyeSB0byBkcmFpbiB0aGUgZGVjb2RlcgotICBpZiAoIURlbGl2ZXJQZW5k
aW5nT3V0cHV0cyhqbmksIDApKSB7Ci0gICAgQUxPR0UgPDwgIkRlbGl2ZXJQZW5kaW5nT3V0cHV0
cyBlcnJvciI7Ci0gICAgcmV0dXJuIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICB9
Ci0KLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotYm9vbCBNZWRpYUNvZGVj
VmlkZW9EZWNvZGVyOjpEZWxpdmVyUGVuZGluZ091dHB1dHMoCi0gICAgSk5JRW52KiBqbmksIGlu
dCBkZXF1ZXVlX3RpbWVvdXRfbXMpIHsKLSAgaWYgKGZyYW1lc19yZWNlaXZlZF8gPD0gZnJhbWVz
X2RlY29kZWRfKSB7Ci0gICAgLy8gTm8gbmVlZCB0byBxdWVyeSBmb3Igb3V0cHV0IGJ1ZmZlcnMg
LSBkZWNvZGVyIGlzIGRyYWluZWQuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLSAgLy8gR2V0IGRl
Y29kZXIgb3V0cHV0LgotICBqb2JqZWN0IGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyID0KLSAgICAg
IGpuaS0+Q2FsbE9iamVjdE1ldGhvZCgqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywKLSAg
ICAgICAgICB1c2Vfc3VyZmFjZV8gPyBqX2RlcXVldWVfdGV4dHVyZV9idWZmZXJfbWV0aG9kXwot
ICAgICAgICAgICAgICAgICAgICAgICA6IGpfZGVxdWV1ZV9ieXRlX2J1ZmZlcl9tZXRob2RfLAot
ICAgICAgICAgIGRlcXVldWVfdGltZW91dF9tcyk7Ci0KLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpu
aSkpIHsKLSAgICBBTE9HRSA8PCAiZGVxdWV1ZU91dHB1dEJ1ZmZlcigpIGVycm9yIjsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0KLSAgaWYgKElzTnVsbChqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVm
ZmVyKSkgewotICAgIC8vIE5vIGRlY29kZWQgZnJhbWUgcmVhZHkuCi0gICAgcmV0dXJuIHRydWU7
Ci0gIH0KLQotICAvLyBHZXQgZGVjb2RlZCB2aWRlbyBmcmFtZSBwcm9wZXJ0aWVzLgotICBpbnQg
Y29sb3JfZm9ybWF0ID0gR2V0SW50RmllbGQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNv
ZGVyXywKLSAgICAgIGpfY29sb3JfZm9ybWF0X2ZpZWxkXyk7Ci0gIGludCB3aWR0aCA9IEdldElu
dEZpZWxkKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8sIGpfd2lkdGhfZmllbGRf
KTsKLSAgaW50IGhlaWdodCA9IEdldEludEZpZWxkKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9f
ZGVjb2Rlcl8sIGpfaGVpZ2h0X2ZpZWxkXyk7Ci0gIGludCBzdHJpZGUgPSBHZXRJbnRGaWVsZChq
bmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLCBqX3N0cmlkZV9maWVsZF8pOwotICBp
bnQgc2xpY2VfaGVpZ2h0ID0gR2V0SW50RmllbGQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19k
ZWNvZGVyXywKLSAgICAgIGpfc2xpY2VfaGVpZ2h0X2ZpZWxkXyk7Ci0KLSAgcnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gZnJhbWVfYnVmZmVyOwotICBpbnQ2NF90
IHByZXNlbnRhdGlvbl90aW1lc3RhbXBzX21zID0gMDsKLSAgaW50NjRfdCBvdXRwdXRfdGltZXN0
YW1wc19tcyA9IDA7Ci0gIGludDY0X3Qgb3V0cHV0X250cF90aW1lc3RhbXBzX21zID0gMDsKLSAg
aW50IGRlY29kZV90aW1lX21zID0gMDsKLSAgaW50NjRfdCBmcmFtZV9kZWxheWVkX21zID0gMDsK
LSAgaWYgKHVzZV9zdXJmYWNlXykgewotICAgIC8vIEV4dHJhY3QgZGF0YSBmcm9tIEphdmEgRGVj
b2RlZFRleHR1cmVCdWZmZXIuCi0gICAgcHJlc2VudGF0aW9uX3RpbWVzdGFtcHNfbXMgPSBHZXRM
b25nRmllbGQoCi0gICAgICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsCi0gICAgICAg
IGpfdGV4dHVyZV9wcmVzZW50YXRpb25fdGltZXN0YW1wX21zX2ZpZWxkXyk7Ci0gICAgb3V0cHV0
X3RpbWVzdGFtcHNfbXMgPSBHZXRMb25nRmllbGQoCi0gICAgICAgIGpuaSwgal9kZWNvZGVyX291
dHB1dF9idWZmZXIsIGpfdGV4dHVyZV90aW1lc3RhbXBfbXNfZmllbGRfKTsKLSAgICBvdXRwdXRf
bnRwX3RpbWVzdGFtcHNfbXMgPSBHZXRMb25nRmllbGQoCi0gICAgICAgIGpuaSwgal9kZWNvZGVy
X291dHB1dF9idWZmZXIsIGpfdGV4dHVyZV9udHBfdGltZXN0YW1wX21zX2ZpZWxkXyk7Ci0gICAg
ZGVjb2RlX3RpbWVfbXMgPSBHZXRMb25nRmllbGQoCi0gICAgICAgIGpuaSwgal9kZWNvZGVyX291
dHB1dF9idWZmZXIsIGpfdGV4dHVyZV9kZWNvZGVfdGltZV9tc19maWVsZF8pOwotCi0gICAgY29u
c3QgaW50IHRleHR1cmVfaWQgPQotICAgICAgICBHZXRJbnRGaWVsZChqbmksIGpfZGVjb2Rlcl9v
dXRwdXRfYnVmZmVyLCBqX3RleHR1cmVfaWRfZmllbGRfKTsKLSAgICBpZiAodGV4dHVyZV9pZCAh
PSAwKSB7ICAvLyB8dGV4dHVyZV9pZHwgPT0gMCByZXByZXNlbnRzIGEgZHJvcHBlZCBmcmFtZS4K
LSAgICAgIGNvbnN0IGpmbG9hdEFycmF5IGpfdHJhbnNmb3JtX21hdHJpeCA9Ci0gICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxqZmxvYXRBcnJheT4oR2V0T2JqZWN0RmllbGQoCi0gICAgICAgICAg
ICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsIGpfdHJhbnNmb3JtX21hdHJpeF9maWVs
ZF8pKTsKLSAgICAgIGZyYW1lX2RlbGF5ZWRfbXMgPSBHZXRMb25nRmllbGQoCi0gICAgICAgICAg
am5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwgal90ZXh0dXJlX2ZyYW1lX2RlbGF5X21zX2Zp
ZWxkXyk7Ci0KLSAgICAgIC8vIENyZWF0ZSB3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXIgd2l0aCBu
YXRpdmUgdGV4dHVyZSBoYW5kbGUuCi0gICAgICBmcmFtZV9idWZmZXIgPSBzdXJmYWNlX3RleHR1
cmVfaGVscGVyXy0+Q3JlYXRlVGV4dHVyZUZyYW1lKAotICAgICAgICAgIHdpZHRoLCBoZWlnaHQs
IE5hdGl2ZUhhbmRsZUltcGwoam5pLCB0ZXh0dXJlX2lkLCBqX3RyYW5zZm9ybV9tYXRyaXgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgRW5hYmxlRnJhbWVMb2dPbldhcm5pbmcoKTsKLSAgICB9Ci0g
IH0gZWxzZSB7Ci0gICAgLy8gRXh0cmFjdCBkYXRhIGZyb20gSmF2YSBCeXRlQnVmZmVyIGFuZCBj
cmVhdGUgb3V0cHV0IHl1djQyMCBmcmFtZSAtCi0gICAgLy8gZm9yIG5vbiBzdXJmYWNlIGRlY29k
aW5nIG9ubHkuCi0gICAgY29uc3QgaW50IG91dHB1dF9idWZmZXJfaW5kZXggPSBHZXRJbnRGaWVs
ZCgKLSAgICAgICAgam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwgal9pbmZvX2luZGV4X2Zp
ZWxkXyk7Ci0gICAgY29uc3QgaW50IG91dHB1dF9idWZmZXJfb2Zmc2V0ID0gR2V0SW50RmllbGQo
Ci0gICAgICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsIGpfaW5mb19vZmZzZXRfZmll
bGRfKTsKLSAgICBjb25zdCBpbnQgb3V0cHV0X2J1ZmZlcl9zaXplID0gR2V0SW50RmllbGQoCi0g
ICAgICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsIGpfaW5mb19zaXplX2ZpZWxkXyk7
Ci0gICAgcHJlc2VudGF0aW9uX3RpbWVzdGFtcHNfbXMgPSBHZXRMb25nRmllbGQoCi0gICAgICAg
IGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsIGpfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF9t
c19maWVsZF8pOwotICAgIG91dHB1dF90aW1lc3RhbXBzX21zID0gR2V0TG9uZ0ZpZWxkKAotICAg
ICAgICBqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyLCBqX3RpbWVzdGFtcF9tc19maWVsZF8p
OwotICAgIG91dHB1dF9udHBfdGltZXN0YW1wc19tcyA9IEdldExvbmdGaWVsZCgKLSAgICAgICAg
am5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwgal9udHBfdGltZXN0YW1wX21zX2ZpZWxkXyk7
Ci0KLSAgICBkZWNvZGVfdGltZV9tcyA9IEdldExvbmdGaWVsZChqbmksIGpfZGVjb2Rlcl9vdXRw
dXRfYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfYnl0ZV9idWZm
ZXJfZGVjb2RlX3RpbWVfbXNfZmllbGRfKTsKLQotICAgIGlmIChvdXRwdXRfYnVmZmVyX3NpemUg
PCB3aWR0aCAqIGhlaWdodCAqIDMgLyAyKSB7Ci0gICAgICBBTE9HRSA8PCAiSW5zdWZmaWNpZW50
IG91dHB1dCBidWZmZXIgc2l6ZTogIiA8PCBvdXRwdXRfYnVmZmVyX3NpemU7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChvdXRwdXRfYnVmZmVyX3NpemUgPCBzdHJpZGUgKiBo
ZWlnaHQgKiAzIC8gMiAmJgotICAgICAgICBzbGljZV9oZWlnaHQgPT0gaGVpZ2h0ICYmIHN0cmlk
ZSA+IHdpZHRoKSB7Ci0gICAgICAvLyBTb21lIGNvZGVjcyAoRXh5bm9zKSBpbmNvcnJlY3RseSBy
ZXBvcnQgc3RyaWRlIGluZm9ybWF0aW9uIGZvcgotICAgICAgLy8gb3V0cHV0IGJ5dGUgYnVmZmVy
LCBzbyBhY3R1YWwgc3RyaWRlIHZhbHVlIG5lZWQgdG8gYmUgY29ycmVjdGVkLgotICAgICAgc3Ry
aWRlID0gb3V0cHV0X2J1ZmZlcl9zaXplICogMiAvIChoZWlnaHQgKiAzKTsKLSAgICB9Ci0gICAg
am9iamVjdEFycmF5IG91dHB1dF9idWZmZXJzID0gcmVpbnRlcnByZXRfY2FzdDxqb2JqZWN0QXJy
YXk+KEdldE9iamVjdEZpZWxkKAotICAgICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2Rl
Y29kZXJfLCBqX291dHB1dF9idWZmZXJzX2ZpZWxkXykpOwotICAgIGpvYmplY3Qgb3V0cHV0X2J1
ZmZlciA9Ci0gICAgICAgIGpuaS0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KG91dHB1dF9idWZmZXJz
LCBvdXRwdXRfYnVmZmVyX2luZGV4KTsKLSAgICB1aW50OF90KiBwYXlsb2FkID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKAotICAgICAgICBv
dXRwdXRfYnVmZmVyKSk7Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcGF5bG9hZCArPSBvdXRwdXRfYnVmZmVyX29mZnNldDsK
LQotICAgIC8vIENyZWF0ZSB5dXY0MjAgZnJhbWUuCi0gICAgcnRjOjpzY29wZWRfcmVmcHRyPHdl
YnJ0Yzo6STQyMEJ1ZmZlcj4gaTQyMF9idWZmZXI7Ci0KLSAgICBpNDIwX2J1ZmZlciA9IGRlY29k
ZWRfZnJhbWVfcG9vbF8uQ3JlYXRlQnVmZmVyKHdpZHRoLCBoZWlnaHQpOwotICAgIGlmIChjb2xv
cl9mb3JtYXQgPT0gQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyKSB7Ci0gICAgICBSVENfQ0hFQ0tf
RVEoMCwgc3RyaWRlICUgMik7Ci0gICAgICBSVENfQ0hFQ0tfRVEoMCwgc2xpY2VfaGVpZ2h0ICUg
Mik7Ci0gICAgICBjb25zdCBpbnQgdXZfc3RyaWRlID0gc3RyaWRlIC8gMjsKLSAgICAgIGNvbnN0
IGludCB1X3NsaWNlX2hlaWdodCA9IHNsaWNlX2hlaWdodCAvIDI7Ci0gICAgICBjb25zdCB1aW50
OF90KiB5X3B0ciA9IHBheWxvYWQ7Ci0gICAgICBjb25zdCB1aW50OF90KiB1X3B0ciA9IHlfcHRy
ICsgc3RyaWRlICogc2xpY2VfaGVpZ2h0OwotICAgICAgY29uc3QgdWludDhfdCogdl9wdHIgPSB1
X3B0ciArIHV2X3N0cmlkZSAqIHVfc2xpY2VfaGVpZ2h0OwotICAgICAgbGlieXV2OjpJNDIwQ29w
eSh5X3B0ciwgc3RyaWRlLCB1X3B0ciwgdXZfc3RyaWRlLCB2X3B0ciwgdXZfc3RyaWRlLAotICAg
ICAgICAgICAgICAgICAgICAgICBpNDIwX2J1ZmZlci0+TXV0YWJsZURhdGFZKCksIGk0MjBfYnVm
ZmVyLT5TdHJpZGVZKCksCi0gICAgICAgICAgICAgICAgICAgICAgIGk0MjBfYnVmZmVyLT5NdXRh
YmxlRGF0YVUoKSwgaTQyMF9idWZmZXItPlN0cmlkZVUoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgaTQyMF9idWZmZXItPk11dGFibGVEYXRhVigpLCBpNDIwX2J1ZmZlci0+U3RyaWRlVigpLAot
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAg
ICAgLy8gQWxsIG90aGVyIHN1cHBvcnRlZCBmb3JtYXRzIGFyZSBudjEyLgotICAgICAgY29uc3Qg
dWludDhfdCogeV9wdHIgPSBwYXlsb2FkOwotICAgICAgY29uc3QgdWludDhfdCogdXZfcHRyID0g
eV9wdHIgKyBzdHJpZGUgKiBzbGljZV9oZWlnaHQ7Ci0gICAgICBsaWJ5dXY6Ok5WMTJUb0k0MjAo
eV9wdHIsIHN0cmlkZSwgdXZfcHRyLCBzdHJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
aTQyMF9idWZmZXItPk11dGFibGVEYXRhWSgpLCBpNDIwX2J1ZmZlci0+U3RyaWRlWSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVUoKSwgaTQyMF9i
dWZmZXItPlN0cmlkZVUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpNDIwX2J1ZmZlci0+
TXV0YWJsZURhdGFWKCksIGk0MjBfYnVmZmVyLT5TdHJpZGVWKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgd2lkdGgsIGhlaWdodCk7Ci0gICAgfQotICAgIGZyYW1lX2J1ZmZlciA9IGk0MjBf
YnVmZmVyOwotCi0gICAgLy8gUmV0dXJuIG91dHB1dCBieXRlIGJ1ZmZlciBiYWNrIHRvIGNvZGVj
LgotICAgIGpuaS0+Q2FsbFZvaWRNZXRob2QoCi0gICAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVv
X2RlY29kZXJfLAotICAgICAgICBqX3JldHVybl9kZWNvZGVkX2J5dGVfYnVmZmVyX21ldGhvZF8s
Ci0gICAgICAgIG91dHB1dF9idWZmZXJfaW5kZXgpOwotICAgIGlmIChDaGVja0V4Y2VwdGlvbihq
bmkpKSB7Ci0gICAgICBBTE9HRSA8PCAicmV0dXJuRGVjb2RlZE91dHB1dEJ1ZmZlciBlcnJvciI7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0gIGlmIChmcmFtZXNfZGVjb2RlZF8g
PCBmcmFtZXNfZGVjb2RlZF9sb2dnZWRfKSB7Ci0gICAgQUxPR0QgPDwgIkRlY29kZXIgZnJhbWUg
b3V0ICMgIiA8PCBmcmFtZXNfZGVjb2RlZF8gPDwKLSAgICAgICAgIi4gIiA8PCB3aWR0aCA8PCAi
IHggIiA8PCBoZWlnaHQgPDwKLSAgICAgICAgIi4gIiA8PCBzdHJpZGUgPDwgIiB4ICIgPDwgIHNs
aWNlX2hlaWdodCA8PAotICAgICAgICAiLiBDb2xvcjogIiA8PCBjb2xvcl9mb3JtYXQgPDwKLSAg
ICAgICAgIi4gVFM6ICIgPDwgcHJlc2VudGF0aW9uX3RpbWVzdGFtcHNfbXMgPDwKLSAgICAgICAg
Ii4gRGVjVGltZTogIiA8PCAoaW50KWRlY29kZV90aW1lX21zIDw8Ci0gICAgICAgICIuIERlbGF5
VGltZTogIiA8PCAoaW50KWZyYW1lX2RlbGF5ZWRfbXM7Ci0gIH0KLQotICAvLyBDYWxjdWxhdGUg
YW5kIHByaW50IGRlY29kaW5nIHN0YXRpc3RpY3MgLSBldmVyeSAzIHNlY29uZHMuCi0gIGZyYW1l
c19kZWNvZGVkXysrOwotICBjdXJyZW50X2ZyYW1lc18rKzsKLSAgY3VycmVudF9kZWNvZGluZ190
aW1lX21zXyArPSBkZWNvZGVfdGltZV9tczsKLSAgY3VycmVudF9kZWxheV90aW1lX21zXyArPSBm
cmFtZV9kZWxheWVkX21zOwotICBpbnQgc3RhdGlzdGljX3RpbWVfbXMgPSBydGM6OlRpbWVNaWxs
aXMoKSAtIHN0YXJ0X3RpbWVfbXNfOwotICBpZiAoc3RhdGlzdGljX3RpbWVfbXMgPj0ga01lZGlh
Q29kZWNTdGF0aXN0aWNzSW50ZXJ2YWxNcyAmJgotICAgICAgY3VycmVudF9mcmFtZXNfID4gMCkg
ewotICAgIGludCBjdXJyZW50X2JpdHJhdGUgPSBjdXJyZW50X2J5dGVzXyAqIDggLyBzdGF0aXN0
aWNfdGltZV9tczsKLSAgICBpbnQgY3VycmVudF9mcHMgPQotICAgICAgICAoY3VycmVudF9mcmFt
ZXNfICogMTAwMCArIHN0YXRpc3RpY190aW1lX21zIC8gMikgLyBzdGF0aXN0aWNfdGltZV9tczsK
LSAgICBBTE9HRCA8PCAiRnJhbWVzIGRlY29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfIDw8Ci0g
ICAgICAgICIuIFJlY2VpdmVkOiAiIDw8ICBmcmFtZXNfcmVjZWl2ZWRfIDw8Ci0gICAgICAgICIu
IEJpdHJhdGU6ICIgPDwgY3VycmVudF9iaXRyYXRlIDw8ICIga2JwcyIgPDwKLSAgICAgICAgIi4g
RnBzOiAiIDw8IGN1cnJlbnRfZnBzIDw8Ci0gICAgICAgICIuIERlY1RpbWU6ICIgPDwgKGN1cnJl
bnRfZGVjb2RpbmdfdGltZV9tc18gLyBjdXJyZW50X2ZyYW1lc18pIDw8Ci0gICAgICAgICIuIERl
bGF5VGltZTogIiA8PCAoY3VycmVudF9kZWxheV90aW1lX21zXyAvIGN1cnJlbnRfZnJhbWVzXykg
PDwKLSAgICAgICAgIiBmb3IgbGFzdCAiIDw8IHN0YXRpc3RpY190aW1lX21zIDw8ICIgbXMuIjsK
LSAgICBzdGFydF90aW1lX21zXyA9IHJ0Yzo6VGltZU1pbGxpcygpOwotICAgIGN1cnJlbnRfZnJh
bWVzXyA9IDA7Ci0gICAgY3VycmVudF9ieXRlc18gPSAwOwotICAgIGN1cnJlbnRfZGVjb2Rpbmdf
dGltZV9tc18gPSAwOwotICAgIGN1cnJlbnRfZGVsYXlfdGltZV9tc18gPSAwOwotICB9Ci0KLSAg
Ly8gSWYgdGhlIGZyYW1lIHdhcyBkcm9wcGVkLCBmcmFtZV9idWZmZXIgaXMgbGVmdCBhcyBudWxs
cHRyLgotICBpZiAoZnJhbWVfYnVmZmVyKSB7Ci0gICAgVmlkZW9GcmFtZSBkZWNvZGVkX2ZyYW1l
KGZyYW1lX2J1ZmZlciwgMCwgMCwgd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKTsKLSAgICBkZWNv
ZGVkX2ZyYW1lLnNldF90aW1lc3RhbXAob3V0cHV0X3RpbWVzdGFtcHNfbXMpOwotICAgIGRlY29k
ZWRfZnJhbWUuc2V0X250cF90aW1lX21zKG91dHB1dF9udHBfdGltZXN0YW1wc19tcyk7Ci0KLSAg
ICBjb25zdCBpbnQzMl90IGNhbGxiYWNrX3N0YXR1cyA9Ci0gICAgICAgIGNhbGxiYWNrXy0+RGVj
b2RlZChkZWNvZGVkX2ZyYW1lLCBkZWNvZGVfdGltZV9tcyk7Ci0gICAgaWYgKGNhbGxiYWNrX3N0
YXR1cyA+IDApIHsKLSAgICAgIEFMT0dFIDw8ICJjYWxsYmFjayBlcnJvciI7Ci0gICAgfQotICB9
Ci0gIHJldHVybiB0cnVlOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6OlJl
Z2lzdGVyRGVjb2RlQ29tcGxldGVDYWxsYmFjaygKLSAgICBEZWNvZGVkSW1hZ2VDYWxsYmFjayog
Y2FsbGJhY2spIHsKLSAgY2FsbGJhY2tfID0gY2FsbGJhY2s7Ci0gIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfT0s7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6T25NZXNzYWdl
KHJ0Yzo6TWVzc2FnZSogbXNnKSB7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVh
ZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7
Ci0gIGlmICghaW5pdGVkXykgewotICAgIHJldHVybjsKLSAgfQotICAvLyBXZSBvbmx5IGV2ZXIg
c2VuZCBvbmUgbWVzc2FnZSB0byB8dGhpc3wgZGlyZWN0bHkgKG5vdCB0aHJvdWdoIGEgQmluZCgp
J2QKLSAgLy8gZnVuY3RvciksIHNvIGV4cGVjdCBubyBJRC9kYXRhLgotICBSVENfQ0hFQ0soIW1z
Zy0+bWVzc2FnZV9pZCkgPDwgIlVuZXhwZWN0ZWQgbWVzc2FnZSEiOwotICBSVENfQ0hFQ0soIW1z
Zy0+cGRhdGEpIDw8ICJVbmV4cGVjdGVkIG1lc3NhZ2UhIjsKLSAgQ2hlY2tPbkNvZGVjVGhyZWFk
KCk7Ci0KLSAgaWYgKCFEZWxpdmVyUGVuZGluZ091dHB1dHMoam5pLCAwKSkgewotICAgIEFMT0dF
IDw8ICJPbk1lc3NhZ2U6IERlbGl2ZXJQZW5kaW5nT3V0cHV0cyBlcnJvciI7Ci0gICAgUHJvY2Vz
c0hXRXJyb3JPbkNvZGVjVGhyZWFkKCk7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGNvZGVjX3RocmVh
ZF8tPlBvc3REZWxheWVkKFJUQ19GUk9NX0hFUkUsIGtNZWRpYUNvZGVjUG9sbE1zLCB0aGlzKTsK
LX0KLQotTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3Rvcnk6Ok1lZGlhQ29kZWNWaWRlb0RlY29k
ZXJGYWN0b3J5KCkKLSAgICA6IGVnbF9jb250ZXh0XyhudWxscHRyKSB7Ci0gIEFMT0dEIDw8ICJN
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeSBjdG9yIjsKLSAgSk5JRW52KiBqbmkgPSBBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9y
ZWZfZnJhbWUoam5pKTsKLSAgamNsYXNzIGpfZGVjb2Rlcl9jbGFzcyA9IEZpbmRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIiKTsKLSAgc3VwcG9ydGVkX2NvZGVj
X3R5cGVzXy5jbGVhcigpOwotCi0gIGJvb2wgaXNfdnA4X2h3X3N1cHBvcnRlZCA9IGpuaS0+Q2Fs
bFN0YXRpY0Jvb2xlYW5NZXRob2QoCi0gICAgICBqX2RlY29kZXJfY2xhc3MsCi0gICAgICBHZXRT
dGF0aWNNZXRob2RJRChqbmksIGpfZGVjb2Rlcl9jbGFzcywgImlzVnA4SHdTdXBwb3J0ZWQiLCAi
KClaIikpOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIGlzX3ZwOF9od19zdXBw
b3J0ZWQgPSBmYWxzZTsKLSAgfQotICBpZiAoaXNfdnA4X2h3X3N1cHBvcnRlZCkgewotICAgIEFM
T0dEIDw8ICJWUDggSFcgRGVjb2RlciBzdXBwb3J0ZWQuIjsKLSAgICBzdXBwb3J0ZWRfY29kZWNf
dHlwZXNfLnB1c2hfYmFjayhrVmlkZW9Db2RlY1ZQOCk7Ci0gIH0KLQotICBib29sIGlzX3ZwOV9o
d19zdXBwb3J0ZWQgPSBqbmktPkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKAotICAgICAgal9kZWNv
ZGVyX2NsYXNzLAotICAgICAgR2V0U3RhdGljTWV0aG9kSUQoam5pLCBqX2RlY29kZXJfY2xhc3Ms
ICJpc1ZwOUh3U3VwcG9ydGVkIiwgIigpWiIpKTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkp
IHsKLSAgICBpc192cDlfaHdfc3VwcG9ydGVkID0gZmFsc2U7Ci0gIH0KLSAgaWYgKGlzX3ZwOV9o
d19zdXBwb3J0ZWQpIHsKLSAgICBBTE9HRCA8PCAiVlA5IEhXIERlY29kZXIgc3VwcG9ydGVkLiI7
Ci0gICAgc3VwcG9ydGVkX2NvZGVjX3R5cGVzXy5wdXNoX2JhY2soa1ZpZGVvQ29kZWNWUDkpOwot
ICB9Ci0KLSAgYm9vbCBpc19oMjY0X2h3X3N1cHBvcnRlZCA9IGpuaS0+Q2FsbFN0YXRpY0Jvb2xl
YW5NZXRob2QoCi0gICAgICBqX2RlY29kZXJfY2xhc3MsCi0gICAgICBHZXRTdGF0aWNNZXRob2RJ
RChqbmksIGpfZGVjb2Rlcl9jbGFzcywgImlzSDI2NEh3U3VwcG9ydGVkIiwgIigpWiIpKTsKLSAg
aWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBpc19oMjY0X2h3X3N1cHBvcnRlZCA9IGZh
bHNlOwotICB9Ci0gIGlmIChpc19oMjY0X2h3X3N1cHBvcnRlZCkgewotICAgIEFMT0dEIDw8ICJI
MjY0IEhXIERlY29kZXIgc3VwcG9ydGVkLiI7Ci0gICAgc3VwcG9ydGVkX2NvZGVjX3R5cGVzXy5w
dXNoX2JhY2soa1ZpZGVvQ29kZWNIMjY0KTsKLSAgfQotfQotCi1NZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyRmFjdG9yeTo6fk1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5KCkgewotICBBTE9HRCA8
PCAiTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkgZHRvciI7Ci0gIGlmIChlZ2xfY29udGV4
dF8pIHsKLSAgICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwot
ICAgIGpuaS0+RGVsZXRlR2xvYmFsUmVmKGVnbF9jb250ZXh0Xyk7Ci0gIH0KLX0KLQotdm9pZCBN
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeTo6U2V0RUdMQ29udGV4dCgKLSAgICBKTklFbnYq
IGpuaSwgam9iamVjdCBlZ2xfY29udGV4dCkgewotICBBTE9HRCA8PCAiTWVkaWFDb2RlY1ZpZGVv
RGVjb2RlckZhY3Rvcnk6OlNldEVHTENvbnRleHQiOwotICBpZiAoZWdsX2NvbnRleHRfKSB7Ci0g
ICAgam5pLT5EZWxldGVHbG9iYWxSZWYoZWdsX2NvbnRleHRfKTsKLSAgICBlZ2xfY29udGV4dF8g
PSBudWxscHRyOwotICB9Ci0gIGVnbF9jb250ZXh0XyA9IGpuaS0+TmV3R2xvYmFsUmVmKGVnbF9j
b250ZXh0KTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8PCAiZXJy
b3IgY2FsbGluZyBOZXdHbG9iYWxSZWYgZm9yIEVHTCBDb250ZXh0LiI7Ci0gIH0KLX0KLQotd2Vi
cnRjOjpWaWRlb0RlY29kZXIqIE1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5OjpDcmVhdGVW
aWRlb0RlY29kZXIoCi0gICAgVmlkZW9Db2RlY1R5cGUgdHlwZSkgewotICBpZiAoc3VwcG9ydGVk
X2NvZGVjX3R5cGVzXy5lbXB0eSgpKSB7Ci0gICAgQUxPR1cgPDwgIk5vIEhXIHZpZGVvIGRlY29k
ZXIgZm9yIHR5cGUgIiA8PCAoaW50KXR5cGU7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAg
Zm9yIChWaWRlb0NvZGVjVHlwZSBjb2RlY190eXBlIDogc3VwcG9ydGVkX2NvZGVjX3R5cGVzXykg
ewotICAgIGlmIChjb2RlY190eXBlID09IHR5cGUpIHsKLSAgICAgIEFMT0dEIDw8ICJDcmVhdGUg
SFcgdmlkZW8gZGVjb2RlciBmb3IgdHlwZSAiIDw8IChpbnQpdHlwZTsKLSAgICAgIHJldHVybiBu
ZXcgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlcihBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKSwg
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2xfY29udGV4
dF8pOwotICAgIH0KLSAgfQotICBBTE9HVyA8PCAiQ2FuIG5vdCBmaW5kIEhXIHZpZGVvIGRlY29k
ZXIgZm9yIHR5cGUgIiA8PCAoaW50KXR5cGU7Ci0gIHJldHVybiBudWxscHRyOwotfQotCi12b2lk
IE1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5OjpEZXN0cm95VmlkZW9EZWNvZGVyKAotICAg
IHdlYnJ0Yzo6VmlkZW9EZWNvZGVyKiBkZWNvZGVyKSB7Ci0gIEFMT0dEIDw8ICJEZXN0cm95IHZp
ZGVvIGRlY29kZXIuIjsKLSAgZGVsZXRlIGRlY29kZXI7Ci19Ci0KLWNvbnN0IGNoYXIqIE1lZGlh
Q29kZWNWaWRlb0RlY29kZXI6OkltcGxlbWVudGF0aW9uTmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJu
ICJNZWRpYUNvZGVjIjsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9h
bmRyb2lkbWVkaWFkZWNvZGVyX2puaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFkZWNv
ZGVyX2puaS5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZGVjb2Rlcl9qbmku
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNp
Zm5kZWYgV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lETUVESUFERUNPREVSX0pOSV9IXwotI2Rl
ZmluZSBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURNRURJQURFQ09ERVJfSk5JX0hfCi0KLSNp
bmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAi
d2VicnRjL21lZGlhL2VuZ2luZS93ZWJydGN2aWRlb2RlY29kZXJmYWN0b3J5LmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGNfam5pIHsKLQotLy8gSW1wbGVtZW50YXRpb24gb2YgQW5kcm9pZCBNZWRpYUNv
ZGVjIGJhc2VkIGRlY29kZXIgZmFjdG9yeS4KLWNsYXNzIE1lZGlhQ29kZWNWaWRlb0RlY29kZXJG
YWN0b3J5Ci0gICAgOiBwdWJsaWMgY3JpY2tldDo6V2ViUnRjVmlkZW9EZWNvZGVyRmFjdG9yeSB7
Ci0gcHVibGljOgotICBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeSgpOwotICB2aXJ0dWFs
IH5NZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeSgpOwotCi0gIHZvaWQgU2V0RUdMQ29udGV4
dChKTklFbnYqIGpuaSwgam9iamVjdCByZW5kZXJfZWdsX2NvbnRleHQpOwotCi0gIC8vIFdlYlJ0
Y1ZpZGVvRGVjb2RlckZhY3RvcnkgaW1wbGVtZW50YXRpb24uCi0gIHdlYnJ0Yzo6VmlkZW9EZWNv
ZGVyKiBDcmVhdGVWaWRlb0RlY29kZXIod2VicnRjOjpWaWRlb0NvZGVjVHlwZSB0eXBlKQotICAg
ICAgb3ZlcnJpZGU7Ci0KLSAgdm9pZCBEZXN0cm95VmlkZW9EZWNvZGVyKHdlYnJ0Yzo6VmlkZW9E
ZWNvZGVyKiBkZWNvZGVyKSBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIGpvYmplY3QgZWdsX2Nv
bnRleHRfOwotICBzdGQ6OnZlY3Rvcjx3ZWJydGM6OlZpZGVvQ29kZWNUeXBlPiBzdXBwb3J0ZWRf
Y29kZWNfdHlwZXNfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2VuZGlm
ICAvLyBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURNRURJQURFQ09ERVJfSk5JX0hfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
bmkvYW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmkuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRp
YWVuY29kZXJfam5pLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZW5jb2Rl
cl9qbmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzc5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLS8vIE5PVElDRTogYW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmkuaCBtdXN0IGJlIGluY2x1
ZGVkIGJlZm9yZQotLy8gYW5kcm9pZG1lZGlhY29kZWNjb21tb24uaCB0byBhdm9pZCBidWlsZCBl
cnJvcnMuCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFlbmNv
ZGVyX2puaS5oIgotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNp
bmNsdWRlIDxsaXN0PgotCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGli
eXV2L2NvbnZlcnQuaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5
dXYvY29udmVydF9mcm9tLmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUv
bGlieXV2L3ZpZGVvX2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
YW5kcm9pZG1lZGlhY29kZWNjb21tb24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQv
am5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lk
L2puaS9uYXRpdmVfaGFuZGxlX2ltcGwuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9iaW5kLmgi
Ci0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2Uv
bG9nZ2luZy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3RocmVhZC5oIgotI2luY2x1ZGUgIndl
YnJ0Yy9iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGltZXV0
aWxzLmgiCi0jaW5jbHVkZSAid2VicnRjL2NvbW1vbl90eXBlcy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9jb21tb25fdmlkZW8vaDI2NC9oMjY0X2JpdHN0cmVhbV9wYXJzZXIuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvbW9kdWxlcy92aWRlb19jb2RpbmcvaW5jbHVkZS92aWRlb19jb2RlY19pbnRlcmZhY2Uu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy92aWRlb19jb2RpbmcvdXRpbGl0eS9xdWFsaXR5
X3NjYWxlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3ZpZGVvX2NvZGluZy91dGlsaXR5
L3ZwOF9oZWFkZXJfcGFyc2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFwcGVycy9p
bmNsdWRlL2ZpZWxkX3RyaWFsLmgiCi0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFwcGVycy9p
bmNsdWRlL2xvZ2NhdF90cmFjZV9jb250ZXh0LmgiCi0KLXVzaW5nIHJ0Yzo6QmluZDsKLXVzaW5n
IHJ0Yzo6VGhyZWFkOwotdXNpbmcgcnRjOjpUaHJlYWRNYW5hZ2VyOwotCi11c2luZyB3ZWJydGM6
OkNvZGVjU3BlY2lmaWNJbmZvOwotdXNpbmcgd2VicnRjOjpFbmNvZGVkSW1hZ2U7Ci11c2luZyB3
ZWJydGM6OlZpZGVvRnJhbWU7Ci11c2luZyB3ZWJydGM6OlJUUEZyYWdtZW50YXRpb25IZWFkZXI7
Ci11c2luZyB3ZWJydGM6OlZpZGVvQ29kZWM7Ci11c2luZyB3ZWJydGM6OlZpZGVvQ29kZWNUeXBl
OwotdXNpbmcgd2VicnRjOjprVmlkZW9Db2RlY0gyNjQ7Ci11c2luZyB3ZWJydGM6OmtWaWRlb0Nv
ZGVjVlA4OwotdXNpbmcgd2VicnRjOjprVmlkZW9Db2RlY1ZQOTsKLXVzaW5nIHdlYnJ0Yzo6UXVh
bGl0eVNjYWxlcjsKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi0vLyBILjI2NCBzdGFydCBj
b2RlIGxlbmd0aC4KLSNkZWZpbmUgSDI2NF9TQ19MRU5HVEggNAotLy8gTWF4aW11bSBhbGxvd2Vk
IE5BTFVzIGluIG9uZSBvdXRwdXQgZnJhbWUuCi0jZGVmaW5lIE1BWF9OQUxVU19QRVJGUkFNRSAz
MgotLy8gTWF4aW11bSBzdXBwb3J0ZWQgSFcgdmlkZW8gZW5jb2RlciBmcHMuCi0jZGVmaW5lIE1B
WF9WSURFT19GUFMgMzAKLS8vIE1heGltdW0gYWxsb3dlZCBmcHMgdmFsdWUgaW4gU2V0UmF0ZXMo
KSBjYWxsLgotI2RlZmluZSBNQVhfQUxMT1dFRF9WSURFT19GUFMgNjAKLS8vIE1heGltdW0gYWxs
b3dlZCBmcmFtZXMgaW4gZW5jb2RlciBpbnB1dCBxdWV1ZS4KLSNkZWZpbmUgTUFYX0VOQ09ERVJf
UV9TSVpFIDIKLS8vIE1heGltdW0gYW1vdW50IG9mIGRyb3BwZWQgZnJhbWVzIGNhdXNlZCBieSBm
dWxsIGVuY29kZXIgcXVldWUgLSBleGNlZWRpbmcKLS8vIHRoaXMgdGhyZXNob2xkIG1lYW5zIHRo
YXQgZW5jb2RlciBwcm9iYWJseSBnb3Qgc3R1Y2sgYW5kIG5lZWQgdG8gYmUgcmVzZXQuCi0jZGVm
aW5lIEVOQ09ERVJfU1RBTExfRlJBTUVEUk9QX1RIUkVTSE9MRCA2MAotCi0vLyBMb2dnaW5nIG1h
Y3Jvcy4KLSNkZWZpbmUgVEFHX0VOQ09ERVIgIk1lZGlhQ29kZWNWaWRlb0VuY29kZXIiCi0jaWZk
ZWYgVFJBQ0tfQlVGRkVSX1RJTUlORwotI2RlZmluZSBBTE9HViguLi4pCi0gIF9fYW5kcm9pZF9s
b2dfcHJpbnQoQU5EUk9JRF9MT0dfVkVSQk9TRSwgVEFHX0VOQ09ERVIsIF9fVkFfQVJHU19fKQot
I2Vsc2UKLSNkZWZpbmUgQUxPR1YoLi4uKQotI2VuZGlmCi0jZGVmaW5lIEFMT0dEIExPR19UQUco
cnRjOjpMU19JTkZPLCBUQUdfRU5DT0RFUikKLSNkZWZpbmUgQUxPR1cgTE9HX1RBRyhydGM6OkxT
X1dBUk5JTkcsIFRBR19FTkNPREVSKQotI2RlZmluZSBBTE9HRSBMT0dfVEFHKHJ0Yzo6TFNfRVJS
T1IsIFRBR19FTkNPREVSKQotCi1uYW1lc3BhY2UgewotLy8gTWF4aW11bSB0aW1lIGxpbWl0IGJl
dHdlZW4gaW5jb21pbmcgZnJhbWVzIGJlZm9yZSByZXF1ZXN0aW5nIGEga2V5IGZyYW1lLgotY29u
c3Qgc2l6ZV90IGtGcmFtZURpZmZUaHJlc2hvbGRNcyA9IDM1MDsKLWNvbnN0IGludCBrTWluS2V5
RnJhbWVJbnRlcnZhbCA9IDY7Ci19ICAvLyBuYW1lc3BhY2UKLQotLy8gTWVkaWFDb2RlY1ZpZGVv
RW5jb2RlciBpcyBhIHdlYnJ0Yzo6VmlkZW9FbmNvZGVyIGltcGxlbWVudGF0aW9uIHRoYXQgdXNl
cwotLy8gQW5kcm9pZCdzIE1lZGlhQ29kZWMgU0RLIEFQSSBiZWhpbmQgdGhlIHNjZW5lcyB0byBp
bXBsZW1lbnQgKGhvcGVmdWxseSkKLS8vIEhXLWJhY2tlZCB2aWRlbyBlbmNvZGUuICBUaGlzIEMr
KyBjbGFzcyBpcyBpbXBsZW1lbnRlZCBhcyBhIHZlcnkgdGhpbiBzaGltLAotLy8gZGVsZWdhdGlu
ZyBhbGwgb2YgdGhlIGludGVyZXN0aW5nIHdvcmsgdG8gb3JnLndlYnJ0Yy5NZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyLgotLy8gTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBpcyBjcmVhdGVkLCBvcGVyYXRl
ZCwgYW5kIGRlc3Ryb3llZCBvbiBhIHNpbmdsZQotLy8gdGhyZWFkLCBjdXJyZW50bHkgdGhlIGxp
YmppbmdsZSBXb3JrZXIgdGhyZWFkLgotY2xhc3MgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciA6IHB1
YmxpYyB3ZWJydGM6OlZpZGVvRW5jb2RlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgcnRjOjpNZXNzYWdlSGFuZGxlciB7Ci0gcHVibGljOgotICB2aXJ0dWFsIH5NZWRp
YUNvZGVjVmlkZW9FbmNvZGVyKCk7Ci0gIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgZWdsX2NvbnRleHQpOwotCi0gIC8vIHdl
YnJ0Yzo6VmlkZW9FbmNvZGVyIGltcGxlbWVudGF0aW9uLiAgRXZlcnl0aGluZyB0cmFtcG9saW5l
cyB0bwotICAvLyB8Y29kZWNfdGhyZWFkX3wgZm9yIGV4ZWN1dGlvbi4KLSAgaW50MzJfdCBJbml0
RW5jb2RlKGNvbnN0IHdlYnJ0Yzo6VmlkZW9Db2RlYyogY29kZWNfc2V0dGluZ3MsCi0gICAgICAg
ICAgICAgICAgICAgICBpbnQzMl90IC8qIG51bWJlcl9vZl9jb3JlcyAqLywKLSAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCAvKiBtYXhfcGF5bG9hZF9zaXplICovKSBvdmVycmlkZTsKLSAgaW50
MzJfdCBFbmNvZGUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBpbnB1dF9pbWFnZSwKLSAgICAg
ICAgICAgICAgICAgY29uc3Qgd2VicnRjOjpDb2RlY1NwZWNpZmljSW5mbyogLyogY29kZWNfc3Bl
Y2lmaWNfaW5mbyAqLywKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8d2VicnRj
OjpGcmFtZVR5cGU+KiBmcmFtZV90eXBlcykgb3ZlcnJpZGU7Ci0gIGludDMyX3QgUmVnaXN0ZXJF
bmNvZGVDb21wbGV0ZUNhbGxiYWNrKAotICAgICAgd2VicnRjOjpFbmNvZGVkSW1hZ2VDYWxsYmFj
ayogY2FsbGJhY2spIG92ZXJyaWRlOwotICBpbnQzMl90IFJlbGVhc2UoKSBvdmVycmlkZTsKLSAg
aW50MzJfdCBTZXRDaGFubmVsUGFyYW1ldGVycyh1aW50MzJfdCAvKiBwYWNrZXRfbG9zcyAqLywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90IC8qIHJ0dCAqLykgb3ZlcnJp
ZGU7Ci0gIGludDMyX3QgU2V0UmF0ZXModWludDMyX3QgbmV3X2JpdF9yYXRlLCB1aW50MzJfdCBm
cmFtZV9yYXRlKSBvdmVycmlkZTsKLQotICAvLyBydGM6Ok1lc3NhZ2VIYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgotICB2b2lkIE9uTWVzc2FnZShydGM6Ok1lc3NhZ2UqIG1zZykgb3ZlcnJpZGU7Ci0K
LSAgdm9pZCBPbkRyb3BwZWRGcmFtZSgpIG92ZXJyaWRlOwotCi0gIGJvb2wgU3VwcG9ydHNOYXRp
dmVIYW5kbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlZ2xfY29udGV4dF8gIT0gbnVsbHB0
cjsgfQotICBjb25zdCBjaGFyKiBJbXBsZW1lbnRhdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZTsK
LQotIHByaXZhdGU6Ci0gIC8vIFJlc2V0Q29kZWNPbkNvZGVjVGhyZWFkKCkgY2FsbHMgUmVsZWFz
ZU9uQ29kZWNUaHJlYWQoKSBhbmQKLSAgLy8gSW5pdEVuY29kZU9uQ29kZWNUaHJlYWQoKSBpbiBh
biBhdHRlbXB0IHRvIHJlc3RvcmUgdGhlIGNvZGVjIHRvIGFuCi0gIC8vIG9wZXJhYmxlIHN0YXRl
LiAgTmVjZXNzYXJ5IGFmdGVyIGFsbCBtYW5uZXIgb2YgT01YLWxheWVyIGVycm9ycy4KLSAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBjb2RlYyB3YXMgcmVzZXQgc3VjY2Vzc2Z1bGx5LgotICBib29s
IFJlc2V0Q29kZWNPbkNvZGVjVGhyZWFkKCk7Ci0KLSAgLy8gRmFsbGJhY2sgdG8gYSBzb2Z0d2Fy
ZSBlbmNvZGVyIGlmIG9uZSBpcyBzdXBwb3J0ZWQgZWxzZSB0cnkgdG8gcmVzZXQgdGhlCi0gIC8v
IGVuY29kZXIuIENhbGxlZCB3aXRoIHxyZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZXwgZXF1
YWwgdG8gZmFsc2UgZnJvbQotICAvLyBpbml0L3JlbGVhc2UgZW5jb2RlciBzbyB0aGF0IHdlIGRv
bid0IGdvIGludG8gaW5maW5pdGUgcmVjdXJzaW9uLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IGNvZGVjIHdhcyByZXNldCBzdWNjZXNzZnVsbHkuCi0gIGJvb2wgUHJvY2Vzc0hXRXJyb3JPbkNv
ZGVjVGhyZWFkKGJvb2wgcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUpOwotCi0gIC8vIENh
bGxzIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCh0cnVlKS4gUmV0dXJucwotICAvLyBXRUJS
VENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdBUkUgaWYgc3dfZmFsbGJhY2tfcmVxdWlyZWRf
IHdhcyBzZXQgb3IKLSAgLy8gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SIG90aGVyd2lzZS4KLSAg
aW50MzJfdCBQcm9jZXNzSFdFcnJvck9uRW5jb2RlT25Db2RlY1RocmVhZCgpOwotCi0gIC8vIElt
cGxlbWVudGF0aW9uIG9mIHdlYnJ0Yzo6VmlkZW9FbmNvZGVyIG1ldGhvZHMgYWJvdmUsIGFsbCBy
dW5uaW5nIG9uIHRoZQotICAvLyBjb2RlYyB0aHJlYWQgZXhjbHVzaXZlbHkuCi0gIC8vCi0gIC8v
IElmIHdpZHRoPT0wIHRoZW4gdGhpcyBpcyBhc3N1bWVkIHRvIGJlIGEgcmUtaW5pdGlhbGl6YXRp
b24gYW5kIHRoZQotICAvLyBwcmV2aW91c2x5LWN1cnJlbnQgdmFsdWVzIGFyZSByZXVzZWQgaW5z
dGVhZCBvZiB0aGUgcGFzc2VkIHBhcmFtZXRlcnMKLSAgLy8gKG1ha2VzIGl0IGVhc2llciB0byBy
ZWFzb24gYWJvdXQgdGhyZWFkLXNhZmV0eSkuCi0gIGludDMyX3QgSW5pdEVuY29kZU9uQ29kZWNU
aHJlYWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQga2JwcywgaW50IGZwcywKLSAgICAgIGJv
b2wgdXNlX3N1cmZhY2UpOwotICAvLyBSZWNvbmZpZ3VyZSB0byBtYXRjaCB8ZnJhbWV8IGluIHdp
ZHRoLCBoZWlnaHQuIEFsc28gcmVjb25maWd1cmVzIHRoZQotICAvLyBlbmNvZGVyIGlmIHxmcmFt
ZXwgaXMgYSB0ZXh0dXJlL2J5dGUgYnVmZmVyIGFuZCB0aGUgZW5jb2RlciBpcyBpbml0aWFsaXpl
ZAotICAvLyBmb3IgYnl0ZSBidWZmZXIvdGV4dHVyZS4gUmV0dXJucyBmYWxzZSBpZiByZWNvbmZp
Z3VyaW5nIGZhaWxzLgotICBib29sIE1heWJlUmVjb25maWd1cmVFbmNvZGVyT25Db2RlY1RocmVh
ZChjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKTsKLSAgaW50MzJfdCBFbmNvZGVPbkNv
ZGVjVGhyZWFkKAotICAgICAgY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBpbnB1dF9pbWFnZSwK
LSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHdlYnJ0Yzo6RnJhbWVUeXBlPiogZnJhbWVfdHlwZXMs
Ci0gICAgICBjb25zdCBpbnQ2NF90IGZyYW1lX2lucHV0X3RpbWVfbXMpOwotICBib29sIEVuY29k
ZUJ5dGVCdWZmZXJPbkNvZGVjVGhyZWFkKEpOSUVudiogam5pLAotICAgICAgYm9vbCBrZXlfZnJh
bWUsIGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUsIGludCBpbnB1dF9idWZmZXJfaW5k
ZXgpOwotICBib29sIEVuY29kZVRleHR1cmVPbkNvZGVjVGhyZWFkKEpOSUVudiogam5pLAotICAg
ICAgYm9vbCBrZXlfZnJhbWUsIGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpOwotCi0g
IGludDMyX3QgUmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxiYWNrT25Db2RlY1RocmVhZCgKLSAg
ICAgIHdlYnJ0Yzo6RW5jb2RlZEltYWdlQ2FsbGJhY2sqIGNhbGxiYWNrKTsKLSAgaW50MzJfdCBS
ZWxlYXNlT25Db2RlY1RocmVhZCgpOwotICBpbnQzMl90IFNldFJhdGVzT25Db2RlY1RocmVhZCh1
aW50MzJfdCBuZXdfYml0X3JhdGUsIHVpbnQzMl90IGZyYW1lX3JhdGUpOwotICB2b2lkIE9uRHJv
cHBlZEZyYW1lT25Db2RlY1RocmVhZCgpOwotCi0gIC8vIEhlbHBlciBhY2Nlc3NvcnMgZm9yIE1l
ZGlhQ29kZWNWaWRlb0VuY29kZXIkT3V0cHV0QnVmZmVySW5mbyBtZW1iZXJzLgotICBpbnQgR2V0
T3V0cHV0QnVmZmVySW5mb0luZGV4KEpOSUVudiogam5pLCBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZl
cl9pbmZvKTsKLSAgam9iamVjdCBHZXRPdXRwdXRCdWZmZXJJbmZvQnVmZmVyKEpOSUVudiogam5p
LCBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZlcl9pbmZvKTsKLSAgYm9vbCBHZXRPdXRwdXRCdWZmZXJJ
bmZvSXNLZXlGcmFtZShKTklFbnYqIGpuaSwgam9iamVjdCBqX291dHB1dF9idWZmZXJfaW5mbyk7
Ci0gIGpsb25nIEdldE91dHB1dEJ1ZmZlckluZm9QcmVzZW50YXRpb25UaW1lc3RhbXBVcygKLSAg
ICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZlcl9pbmZvKTsKLQotICAvLyBE
ZWxpdmVyIGFueSBvdXRwdXRzIHBlbmRpbmcgaW4gdGhlIE1lZGlhQ29kZWMgdG8gb3VyIHxjYWxs
YmFja198IGFuZCByZXR1cm4KLSAgLy8gdHJ1ZSBvbiBzdWNjZXNzLgotICBib29sIERlbGl2ZXJQ
ZW5kaW5nT3V0cHV0cyhKTklFbnYqIGpuaSk7Ci0KLSAgLy8gU2VhcmNoIGZvciBILjI2NCBzdGFy
dCBjb2Rlcy4KLSAgaW50MzJfdCBOZXh0TmFsdVBvc2l0aW9uKHVpbnQ4X3QgKmJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlcl9zaXplKTsKLQotICAvLyBEaXNwbGF5cyBlbmNvZGVyIHN0YXRpc3RpY3MuCi0g
IHZvaWQgTG9nU3RhdGlzdGljcyhib29sIGZvcmNlX2xvZyk7Ci0KLSAgLy8gVHlwZSBvZiB2aWRl
byBjb2RlYy4KLSAgVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlXzsKLQotICAvLyBWYWxpZCBhbGwg
dGhlIHRpbWUgc2luY2UgUmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxiYWNrKCkgSW52b2tlKClz
IHRvCi0gIC8vIHxjb2RlY190aHJlYWRffCBzeW5jaHJvbm91c2x5LgotICB3ZWJydGM6OkVuY29k
ZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFja187Ci0KLSAgLy8gU3RhdGUgdGhhdCBpcyBjb25zdGFu
dCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoaXMgb2JqZWN0IG9uY2UgdGhlIGN0b3IKLSAgLy8gcmV0
dXJucy4KLSAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZD4KLSAgICAgIGNvZGVjX3RocmVhZF87ICAv
LyBUaHJlYWQgb24gd2hpY2ggdG8gb3BlcmF0ZSBNZWRpYUNvZGVjLgotICBydGM6OlRocmVhZENo
ZWNrZXIgY29kZWNfdGhyZWFkX2NoZWNrZXJfOwotICBTY29wZWRHbG9iYWxSZWY8amNsYXNzPiBq
X21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfOwotICBTY29wZWRHbG9iYWxSZWY8am9i
amVjdD4gal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXzsKLSAgam1ldGhvZElEIGpfaW5pdF9l
bmNvZGVfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfZ2V0X2lucHV0X2J1ZmZlcnNfbWV0aG9kXzsK
LSAgam1ldGhvZElEIGpfZGVxdWV1ZV9pbnB1dF9idWZmZXJfbWV0aG9kXzsKLSAgam1ldGhvZElE
IGpfZW5jb2RlX2J1ZmZlcl9tZXRob2RfOwotICBqbWV0aG9kSUQgal9lbmNvZGVfdGV4dHVyZV9t
ZXRob2RfOwotICBqbWV0aG9kSUQgal9yZWxlYXNlX21ldGhvZF87Ci0gIGptZXRob2RJRCBqX3Nl
dF9yYXRlc19tZXRob2RfOwotICBqbWV0aG9kSUQgal9kZXF1ZXVlX291dHB1dF9idWZmZXJfbWV0
aG9kXzsKLSAgam1ldGhvZElEIGpfcmVsZWFzZV9vdXRwdXRfYnVmZmVyX21ldGhvZF87Ci0gIGpm
aWVsZElEIGpfY29sb3JfZm9ybWF0X2ZpZWxkXzsKLSAgamZpZWxkSUQgal9pbmZvX2luZGV4X2Zp
ZWxkXzsKLSAgamZpZWxkSUQgal9pbmZvX2J1ZmZlcl9maWVsZF87Ci0gIGpmaWVsZElEIGpfaW5m
b19pc19rZXlfZnJhbWVfZmllbGRfOwotICBqZmllbGRJRCBqX2luZm9fcHJlc2VudGF0aW9uX3Rp
bWVzdGFtcF91c19maWVsZF87Ci0KLSAgLy8gU3RhdGUgdGhhdCBpcyB2YWxpZCBvbmx5IGJldHdl
ZW4gSW5pdEVuY29kZSgpIGFuZCB0aGUgbmV4dCBSZWxlYXNlKCkuCi0gIC8vIFRvdWNoZWQgb25s
eSBvbiBjb2RlY190aHJlYWRfIHNvIG5vIGV4cGxpY2l0IHN5bmNocm9uaXphdGlvbiBuZWNlc3Nh
cnkuCi0gIGludCB3aWR0aF87ICAgLy8gRnJhbWUgd2lkdGggaW4gcGl4ZWxzLgotICBpbnQgaGVp
Z2h0XzsgIC8vIEZyYW1lIGhlaWdodCBpbiBwaXhlbHMuCi0gIGJvb2wgaW5pdGVkXzsKLSAgYm9v
bCB1c2Vfc3VyZmFjZV87Ci0gIHVpbnQxNl90IHBpY3R1cmVfaWRfOwotICBlbnVtIGxpYnl1djo6
Rm91ckNDIGVuY29kZXJfZm91cmNjXzsgIC8vIEVuY29kZXIgY29sb3Igc3BhY2UgZm9ybWF0Lgot
ICBpbnQgbGFzdF9zZXRfYml0cmF0ZV9rYnBzXzsgIC8vIExhc3QtcmVxdWVzdGVkIGJpdHJhdGUg
aW4ga2Jwcy4KLSAgaW50IGxhc3Rfc2V0X2Zwc187ICAvLyBMYXN0LXJlcXVlc3RlZCBmcmFtZSBy
YXRlLgotICBpbnQ2NF90IGN1cnJlbnRfdGltZXN0YW1wX3VzXzsgIC8vIEN1cnJlbnQgZnJhbWUg
dGltZXN0YW1wcyBpbiB1cy4KLSAgaW50IGZyYW1lc19yZWNlaXZlZF87ICAvLyBOdW1iZXIgb2Yg
ZnJhbWVzIHJlY2VpdmVkIGJ5IGVuY29kZXIuCi0gIGludCBmcmFtZXNfZW5jb2RlZF87ICAvLyBO
dW1iZXIgb2YgZnJhbWVzIGVuY29kZWQgYnkgZW5jb2Rlci4KLSAgaW50IGZyYW1lc19kcm9wcGVk
X21lZGlhX2VuY29kZXJfOyAgLy8gTnVtYmVyIG9mIGZyYW1lcyBkcm9wcGVkIGJ5IGVuY29kZXIu
Ci0gIC8vIE51bWJlciBvZiBkcm9wcGVkIGZyYW1lcyBjYXVzZWQgYnkgZnVsbCBxdWV1ZS4KLSAg
aW50IGNvbnNlY3V0aXZlX2Z1bGxfcXVldWVfZnJhbWVfZHJvcHNfOwotICBpbnQ2NF90IHN0YXRf
c3RhcnRfdGltZV9tc187ICAvLyBTdGFydCB0aW1lIGZvciBzdGF0aXN0aWNzLgotICBpbnQgY3Vy
cmVudF9mcmFtZXNfOyAgLy8gTnVtYmVyIG9mIGZyYW1lcyBpbiB0aGUgY3VycmVudCBzdGF0aXN0
aWNzIGludGVydmFsLgotICBpbnQgY3VycmVudF9ieXRlc187ICAvLyBFbmNvZGVkIGJ5dGVzIGlu
IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgaW50ZXJ2YWwuCi0gIGludCBjdXJyZW50X2FjY19xcF87
IC8vIEFjY3VtdWxhdGVkIFFQIGluIHRoZSBjdXJyZW50IHN0YXRpc3RpY3MgaW50ZXJ2YWwuCi0g
IGludCBjdXJyZW50X2VuY29kaW5nX3RpbWVfbXNfOyAgLy8gT3ZlcmFsbCBlbmNvZGluZyB0aW1l
IGluIHRoZSBjdXJyZW50IHNlY29uZAotICBpbnQ2NF90IGxhc3RfaW5wdXRfdGltZXN0YW1wX21z
XzsgIC8vIFRpbWVzdGFtcCBvZiBsYXN0IHJlY2VpdmVkIHl1diBmcmFtZS4KLSAgaW50NjRfdCBs
YXN0X291dHB1dF90aW1lc3RhbXBfbXNfOyAgLy8gVGltZXN0YW1wIG9mIGxhc3QgZW5jb2RlZCBm
cmFtZS4KLQotICBzdHJ1Y3QgSW5wdXRGcmFtZUluZm8gewotICAgIElucHV0RnJhbWVJbmZvKGlu
dDY0X3QgZW5jb2RlX3N0YXJ0X3RpbWUsCi0gICAgICAgICAgICAgICAgICAgaW50MzJfdCBmcmFt
ZV90aW1lc3RhbXAsCi0gICAgICAgICAgICAgICAgICAgaW50NjRfdCBmcmFtZV9yZW5kZXJfdGlt
ZV9tcywKLSAgICAgICAgICAgICAgICAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gcm90YXRpb24p
Ci0gICAgICAgIDogZW5jb2RlX3N0YXJ0X3RpbWUoZW5jb2RlX3N0YXJ0X3RpbWUpLAotICAgICAg
ICAgIGZyYW1lX3RpbWVzdGFtcChmcmFtZV90aW1lc3RhbXApLAotICAgICAgICAgIGZyYW1lX3Jl
bmRlcl90aW1lX21zKGZyYW1lX3JlbmRlcl90aW1lX21zKSwKLSAgICAgICAgICByb3RhdGlvbihy
b3RhdGlvbikge30KLSAgICAvLyBUaW1lIHdoZW4gdmlkZW8gZnJhbWUgaXMgc2VudCB0byBlbmNv
ZGVyIGlucHV0LgotICAgIGNvbnN0IGludDY0X3QgZW5jb2RlX3N0YXJ0X3RpbWU7Ci0KLSAgICAv
LyBJbnB1dCBmcmFtZSBpbmZvcm1hdGlvbi4KLSAgICBjb25zdCBpbnQzMl90IGZyYW1lX3RpbWVz
dGFtcDsKLSAgICBjb25zdCBpbnQ2NF90IGZyYW1lX3JlbmRlcl90aW1lX21zOwotICAgIGNvbnN0
IHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbjsKLSAgfTsKLSAgc3RkOjpsaXN0PElucHV0
RnJhbWVJbmZvPiBpbnB1dF9mcmFtZV9pbmZvc187Ci0gIGludDMyX3Qgb3V0cHV0X3RpbWVzdGFt
cF87ICAgICAgLy8gTGFzdCBvdXRwdXQgZnJhbWUgdGltZXN0YW1wIGZyb20KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB8aW5wdXRfZnJhbWVfaW5mb3NffC4KLSAgaW50NjRf
dCBvdXRwdXRfcmVuZGVyX3RpbWVfbXNfOyAvLyBMYXN0IG91dHB1dCBmcmFtZSByZW5kZXIgdGlt
ZSBmcm9tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfGlucHV0X2ZyYW1l
X2luZm9zX3wuCi0gIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBvdXRwdXRfcm90YXRpb25fOyAgLy8g
TGFzdCBvdXRwdXQgZnJhbWUgcm90YXRpb24gZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIHxpbnB1dF9mcmFtZV9pbmZvc198LgotICAvLyBGcmFtZSBz
aXplIGluIGJ5dGVzIGZlZCB0byBNZWRpYUNvZGVjLgotICBpbnQgeXV2X3NpemVfOwotICAvLyBU
cnVlIG9ubHkgd2hlbiBiZXR3ZWVuIGEgY2FsbGJhY2tfLT5PbkVuY29kZWRJbWFnZSgpIGNhbGwg
cmV0dXJuIGEgcG9zaXRpdmUKLSAgLy8gdmFsdWUgYW5kIHRoZSBuZXh0IEVuY29kZSgpIGNhbGwg
YmVpbmcgaWdub3JlZC4KLSAgYm9vbCBkcm9wX25leHRfaW5wdXRfZnJhbWVfOwotICAvLyBHbG9i
YWwgcmVmZXJlbmNlczsgbXVzdCBiZSBkZWxldGVkIGluIFJlbGVhc2UoKS4KLSAgc3RkOjp2ZWN0
b3I8am9iamVjdD4gaW5wdXRfYnVmZmVyc187Ci0gIFF1YWxpdHlTY2FsZXIgcXVhbGl0eV9zY2Fs
ZXJfOwotICAvLyBEeW5hbWljIHJlc29sdXRpb24gY2hhbmdlLCBvZmYgYnkgZGVmYXVsdC4KLSAg
Ym9vbCBzY2FsZV87Ci0KLSAgLy8gSDI2NCBiaXRzdHJlYW0gcGFyc2VyLCB1c2VkIHRvIGV4dHJh
Y3QgUVAgZnJvbSBlbmNvZGVkIGJpdHN0cmVhbXMuCi0gIHdlYnJ0Yzo6SDI2NEJpdHN0cmVhbVBh
cnNlciBoMjY0X2JpdHN0cmVhbV9wYXJzZXJfOwotCi0gIC8vIFZQOSB2YXJpYWJsZXMgdG8gcG9w
dWxhdGUgY29kZWMgc3BlY2lmaWMgc3RydWN0dXJlLgotICB3ZWJydGM6OkdvZkluZm9WUDkgZ29m
XzsgLy8gQ29udGFpbnMgZWFjaCBmcmFtZSdzIHRlbXBvcmFsIGluZm9ybWF0aW9uIGZvcgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9uLWZsZXhpYmxlIFZQOSBtb2RlLgotICB1aW50
OF90IHRsMF9waWNfaWR4XzsKLSAgc2l6ZV90IGdvZl9pZHhfOwotCi0gIC8vIEVHTCBjb250ZXh0
IC0gb3duZWQgYnkgZmFjdG9yeSwgc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQvZGVzdHJveWVkCi0g
IC8vIGJ5IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuCi0gIGpvYmplY3QgZWdsX2NvbnRleHRfOwot
Ci0gIC8vIFRlbXBvcmFyeSBmaXggZm9yIFZQOC4KLSAgLy8gU2VuZHMgYSBrZXkgZnJhbWUgaWYg
ZnJhbWVzIGFyZSBsYXJnZWx5IHNwYWNlZCBhcGFydCAocG9zc2libHkKLSAgLy8gY29ycmVzcG9u
ZGluZyB0byBhIGxhcmdlIGltYWdlIGNoYW5nZSkuCi0gIGludDY0X3QgbGFzdF9mcmFtZV9yZWNl
aXZlZF9tc187Ci0gIGludCBmcmFtZXNfcmVjZWl2ZWRfc2luY2VfbGFzdF9rZXlfOwotICB3ZWJy
dGM6OlZpZGVvQ29kZWNNb2RlIGNvZGVjX21vZGVfOwotCi0gIGJvb2wgc3dfZmFsbGJhY2tfcmVx
dWlyZWRfOwotfTsKLQotTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6fk1lZGlhQ29kZWNWaWRlb0Vu
Y29kZXIoKSB7Ci0gIC8vIENhbGwgUmVsZWFzZSgpIHRvIGVuc3VyZSBubyBtb3JlIGNhbGxiYWNr
cyB0byB1cyBhZnRlciB3ZSBhcmUgZGVsZXRlZC4KLSAgUmVsZWFzZSgpOwotfQotCi1NZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyOjpNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKEpOSUVudiogam5pLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWRlb0NvZGVjVHlw
ZSBjb2RlY1R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpvYmplY3QgZWdsX2NvbnRleHQpCi0gICAgOiBjb2RlY1R5cGVfKGNvZGVjVHlwZSksCi0g
ICAgICBjYWxsYmFja18oTlVMTCksCi0gICAgICBjb2RlY190aHJlYWRfKG5ldyBUaHJlYWQoKSks
Ci0gICAgICBqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfKAotICAgICAgICAgIGpu
aSwKLSAgICAgICAgICBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9F
bmNvZGVyIikpLAotICAgICAgal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXygKLSAgICAgICAg
ICBqbmksCi0gICAgICAgICAgam5pLT5OZXdPYmplY3QoKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5j
b2Rlcl9jbGFzc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgR2V0TWV0aG9kSUQoam5pLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVv
X2VuY29kZXJfY2xhc3NfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8
aW5pdD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoKVYiKSkpLAot
ICAgICAgaW5pdGVkXyhmYWxzZSksCi0gICAgICB1c2Vfc3VyZmFjZV8oZmFsc2UpLAotICAgICAg
cGljdHVyZV9pZF8oMCksCi0gICAgICBlZ2xfY29udGV4dF8oZWdsX2NvbnRleHQpLAotICAgICAg
c3dfZmFsbGJhY2tfcmVxdWlyZWRfKGZhbHNlKSB7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9j
YWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gYXZvaWQgc3Bpbm5p
bmcgdXAgYSBuZXcgdGhyZWFkIHBlciBNZWRpYUNvZGVjLCBhbmQKLSAgLy8gaW5zdGVhZCByZS11
c2UgZS5nLiB0aGUgUGVlckNvbm5lY3Rpb25GYWN0b3J5J3MgfHdvcmtlcl90aHJlYWRffCwgYnV0
IGJ1ZwotICAvLyAyNzMyIG1lYW5zIHRoYXQgZGVhZGxvY2tzIGFib3VuZC4gIFRoaXMgY2xhc3Mg
c3luY2hyb25vdXNseSB0cmFtcG9saW5lcwotICAvLyB0byB8Y29kZWNfdGhyZWFkX3wsIHNvIGlm
IGFueXRoaW5nIGVsc2UgY2FuIGJlIGNvbWluZyB0byBfdXNfIGZyb20KLSAgLy8gfGNvZGVjX3Ro
cmVhZF98LCBvciBmcm9tIGFueSB0aHJlYWQgaG9sZGluZyB0aGUgfF9zZW5kQ3JpdFNlY3R8IGRl
c2NyaWJlZAotICAvLyBpbiB0aGUgYnVnLCB3ZSBoYXZlIGEgcHJvYmxlbS4gIEZvciBub3cgd29y
ayBhcm91bmQgdGhhdCB3aXRoIGEgZGVkaWNhdGVkCi0gIC8vIHRocmVhZC4KLSAgY29kZWNfdGhy
ZWFkXy0+U2V0TmFtZSgiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciIsIE5VTEwpOwotICBSVENfQ0hF
Q0soY29kZWNfdGhyZWFkXy0+U3RhcnQoKSkgPDwgIkZhaWxlZCB0byBzdGFydCBNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyIjsKLSAgY29kZWNfdGhyZWFkX2NoZWNrZXJfLkRldGFjaEZyb21UaHJlYWQo
KTsKLSAgamNsYXNzIGpfb3V0cHV0X2J1ZmZlcl9pbmZvX2NsYXNzID0KLSAgICAgIEZpbmRDbGFz
cyhqbmksICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIkT3V0cHV0QnVmZmVySW5m
byIpOwotICBqX2luaXRfZW5jb2RlX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwK
LSAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLAotICAgICAgImluaXRF
bmNvZGUiLAotICAgICAgIihMb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyJFZpZGVv
Q29kZWNUeXBlOyIKLSAgICAgICJJSUlJTG9yZy93ZWJydGMvRWdsQmFzZTE0JENvbnRleHQ7KVoi
KTsKLSAgal9nZXRfaW5wdXRfYnVmZmVyc19tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAgICBq
bmksCi0gICAgICAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywKLSAgICAgICJn
ZXRJbnB1dEJ1ZmZlcnMiLAotICAgICAgIigpW0xqYXZhL25pby9CeXRlQnVmZmVyOyIpOwotICBq
X2RlcXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwg
KmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sICJkZXF1ZXVlSW5wdXRCdWZmZXIi
LCAiKClJIik7Ci0gIGpfZW5jb2RlX2J1ZmZlcl9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAg
ICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLCAiZW5jb2RlQnVmZmVy
IiwgIihaSUlKKVoiKTsKLSAgal9lbmNvZGVfdGV4dHVyZV9tZXRob2RfID0gR2V0TWV0aG9kSUQo
Ci0gICAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sICJlbmNv
ZGVUZXh0dXJlIiwKLSAgICAgICAgIihaSVtGSilaIik7Ci0gIGpfcmVsZWFzZV9tZXRob2RfID0K
LSAgICAgIEdldE1ldGhvZElEKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFz
c18sICJyZWxlYXNlIiwgIigpViIpOwotICBqX3NldF9yYXRlc19tZXRob2RfID0gR2V0TWV0aG9k
SUQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLCAic2V0
UmF0ZXMiLCAiKElJKVoiKTsKLSAgal9kZXF1ZXVlX291dHB1dF9idWZmZXJfbWV0aG9kXyA9IEdl
dE1ldGhvZElEKAotICAgICAgam5pLAotICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rl
cl9jbGFzc18sCi0gICAgICAiZGVxdWV1ZU91dHB1dEJ1ZmZlciIsCi0gICAgICAiKClMb3JnL3dl
YnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyJE91dHB1dEJ1ZmZlckluZm87Iik7Ci0gIGpfcmVs
ZWFzZV9vdXRwdXRfYnVmZmVyX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwgKmpf
bWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sICJyZWxlYXNlT3V0cHV0QnVmZmVyIiwg
IihJKVoiKTsKLQotICBqX2NvbG9yX2Zvcm1hdF9maWVsZF8gPQotICAgICAgR2V0RmllbGRJRChq
bmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLCAiY29sb3JGb3JtYXQiLCAi
SSIpOwotICBqX2luZm9faW5kZXhfZmllbGRfID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX291
dHB1dF9idWZmZXJfaW5mb19jbGFzcywgImluZGV4IiwgIkkiKTsKLSAgal9pbmZvX2J1ZmZlcl9m
aWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX291dHB1dF9idWZmZXJfaW5mb19jbGFz
cywgImJ1ZmZlciIsICJMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiKTsKLSAgal9pbmZvX2lzX2tleV9m
cmFtZV9maWVsZF8gPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZv
X2NsYXNzLCAiaXNLZXlGcmFtZSIsICJaIik7Ci0gIGpfaW5mb19wcmVzZW50YXRpb25fdGltZXN0
YW1wX3VzX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfb3V0cHV0X2J1ZmZlcl9p
bmZvX2NsYXNzLCAicHJlc2VudGF0aW9uVGltZXN0YW1wVXMiLCAiSiIpOwotICBpZiAoQ2hlY2tF
eGNlcHRpb24oam5pKSkgewotICAgIEFMT0dXIDw8ICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGN0
b3IgZmFpbGVkLiI7Ci0gICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKHRydWUgLyogcmVz
ZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICB9Ci0gIHNyYW5kKHRpbWUoTlVMTCkp
OwotICBBbGxvd0Jsb2NraW5nQ2FsbHMoKTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyOjpJbml0RW5jb2RlKAotICAgIGNvbnN0IHdlYnJ0Yzo6VmlkZW9Db2RlYyogY29kZWNf
c2V0dGluZ3MsCi0gICAgaW50MzJfdCAvKiBudW1iZXJfb2ZfY29yZXMgKi8sCi0gICAgc2l6ZV90
IC8qIG1heF9wYXlsb2FkX3NpemUgKi8pIHsKLSAgaWYgKGNvZGVjX3NldHRpbmdzID09IE5VTEwp
IHsKLSAgICBBTE9HRSA8PCAiTlVMTCBWaWRlb0NvZGVjIGluc3RhbmNlIjsKLSAgICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX0VSUl9QQVJBTUVURVI7Ci0gIH0KLSAgLy8gRmFjdG9yeSBzaG91
bGQgZ3VhcmQgYWdhaW5zdCBvdGhlciBjb2RlY3MgYmVpbmcgdXNlZCB3aXRoIHVzLgotICBSVENf
Q0hFQ0soY29kZWNfc2V0dGluZ3MtPmNvZGVjVHlwZSA9PSBjb2RlY1R5cGVfKQotICAgICAgPDwg
IlVuc3VwcG9ydGVkIGNvZGVjICIgPDwgY29kZWNfc2V0dGluZ3MtPmNvZGVjVHlwZSA8PCAiIGZv
ciAiCi0gICAgICA8PCBjb2RlY1R5cGVfOwotICBpZiAoc3dfZmFsbGJhY2tfcmVxdWlyZWRfKSB7
Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQotICBjb2RlY19tb2RlXyA9
IGNvZGVjX3NldHRpbmdzLT5tb2RlOwotICBpbnQgaW5pdF93aWR0aCA9IGNvZGVjX3NldHRpbmdz
LT53aWR0aDsKLSAgaW50IGluaXRfaGVpZ2h0ID0gY29kZWNfc2V0dGluZ3MtPmhlaWdodDsKLSAg
Ly8gU2NhbGluZyBpcyBkaXNhYmxlZCBmb3IgVlA5LCBidXQgb3B0aW9uYWxseSBlbmFibGVkIGZv
ciBWUDguCi0gIC8vIFRPRE8ocGJvcyk6IEV4dHJhY3QgYXV0b21hdGljUmVzaXplT24gb3V0IG9m
IFZQOCBzZXR0aW5ncy4KLSAgc2NhbGVfID0gZmFsc2U7Ci0gIGlmIChjb2RlY1R5cGVfID09IGtW
aWRlb0NvZGVjVlA4KSB7Ci0gICAgc2NhbGVfID0gY29kZWNfc2V0dGluZ3MtPmNvZGVjU3BlY2lm
aWMuVlA4LmF1dG9tYXRpY1Jlc2l6ZU9uOwotICB9IGVsc2UgaWYgKGNvZGVjVHlwZV8gIT0ga1Zp
ZGVvQ29kZWNWUDkpIHsKLSAgICBzY2FsZV8gPSB0cnVlOwotICB9Ci0KLSAgQUxPR0QgPDwgIklu
aXRFbmNvZGUgcmVxdWVzdDogIiA8PCBpbml0X3dpZHRoIDw8ICIgeCAiIDw8IGluaXRfaGVpZ2h0
OwotICBBTE9HRCA8PCAiRW5jb2RlciBhdXRvbWF0aWMgcmVzaXplICIgPDwgKHNjYWxlXyA/ICJl
bmFibGVkIiA6ICJkaXNhYmxlZCIpOwotCi0gIGlmIChzY2FsZV8pIHsKLSAgICBpZiAoY29kZWNU
eXBlXyA9PSBrVmlkZW9Db2RlY1ZQOCB8fCBjb2RlY1R5cGVfID09IGtWaWRlb0NvZGVjSDI2NCkg
ewotICAgICAgcXVhbGl0eV9zY2FsZXJfLkluaXQoY29kZWNUeXBlXywgY29kZWNfc2V0dGluZ3Mt
PnN0YXJ0Qml0cmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVjX3NldHRpbmdz
LT53aWR0aCwgY29kZWNfc2V0dGluZ3MtPmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvZGVjX3NldHRpbmdzLT5tYXhGcmFtZXJhdGUpOwotICAgIH0gZWxzZSB7Ci0gICAgICAv
LyBXaGVuIGFkZGluZyBjb2RlYyBzdXBwb3J0IHRvIGFkZGl0aW9uYWwgaGFyZHdhcmUgY29kZWNz
LCBhbHNvIGNvbmZpZ3VyZQotICAgICAgLy8gdGhlaXIgUVAgdGhyZXNob2xkcyBmb3Igc2NhbGlu
Zy4KLSAgICAgIFJUQ19OT1RSRUFDSEVEKCkgPDwgIlVuc3VwcG9ydGVkIGNvZGVjIHdpdGhvdXQg
Y29uZmlndXJlZCBRUCB0aHJlc2hvbGRzLiI7Ci0gICAgICBzY2FsZV8gPSBmYWxzZTsKLSAgICB9
Ci0gICAgUXVhbGl0eVNjYWxlcjo6UmVzb2x1dGlvbiByZXMgPSBxdWFsaXR5X3NjYWxlcl8uR2V0
U2NhbGVkUmVzb2x1dGlvbigpOwotICAgIGluaXRfd2lkdGggPSByZXMud2lkdGg7Ci0gICAgaW5p
dF9oZWlnaHQgPSByZXMuaGVpZ2h0OwotICAgIEFMT0dEIDw8ICJTY2FsZWQgcmVzb2x1dGlvbjog
IiA8PCBpbml0X3dpZHRoIDw8ICIgeCAiIDw8IGluaXRfaGVpZ2h0OwotICB9Ci0KLSAgcmV0dXJu
IGNvZGVjX3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAgIFJUQ19GUk9NX0hFUkUsCi0g
ICAgICBCaW5kKCZNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpJbml0RW5jb2RlT25Db2RlY1RocmVh
ZCwgdGhpcywgaW5pdF93aWR0aCwKLSAgICAgICAgICAgaW5pdF9oZWlnaHQsIGNvZGVjX3NldHRp
bmdzLT5zdGFydEJpdHJhdGUsCi0gICAgICAgICAgIGNvZGVjX3NldHRpbmdzLT5tYXhGcmFtZXJh
dGUsCi0gICAgICAgICAgIGNvZGVjX3NldHRpbmdzLT5leHBlY3RfZW5jb2RlX2Zyb21fdGV4dHVy
ZSkpOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkVuY29kZSgKLSAgICBj
b25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lLAotICAgIGNvbnN0IHdlYnJ0Yzo6Q29kZWNT
cGVjaWZpY0luZm8qIC8qIGNvZGVjX3NwZWNpZmljX2luZm8gKi8sCi0gICAgY29uc3Qgc3RkOjp2
ZWN0b3I8d2VicnRjOjpGcmFtZVR5cGU+KiBmcmFtZV90eXBlcykgewotICByZXR1cm4gY29kZWNf
dGhyZWFkXy0+SW52b2tlPGludDMyX3Q+KAotICAgICAgUlRDX0ZST01fSEVSRSwgQmluZCgmTWVk
aWFDb2RlY1ZpZGVvRW5jb2Rlcjo6RW5jb2RlT25Db2RlY1RocmVhZCwgdGhpcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgZnJhbWUsIGZyYW1lX3R5cGVzLCBydGM6OlRpbWVNaWxsaXMoKSkp
OwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlJlZ2lzdGVyRW5jb2RlQ29t
cGxldGVDYWxsYmFjaygKLSAgICB3ZWJydGM6OkVuY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFj
aykgewotICByZXR1cm4gY29kZWNfdGhyZWFkXy0+SW52b2tlPGludDMyX3Q+KAotICAgICAgUlRD
X0ZST01fSEVSRSwKLSAgICAgIEJpbmQoJk1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlJlZ2lzdGVy
RW5jb2RlQ29tcGxldGVDYWxsYmFja09uQ29kZWNUaHJlYWQsCi0gICAgICAgICAgIHRoaXMsIGNh
bGxiYWNrKSk7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UmVsZWFzZSgp
IHsKLSAgQUxPR0QgPDwgIkVuY29kZXJSZWxlYXNlIHJlcXVlc3QiOwotICByZXR1cm4gY29kZWNf
dGhyZWFkXy0+SW52b2tlPGludDMyX3Q+KAotICAgICAgUlRDX0ZST01fSEVSRSwgQmluZCgmTWVk
aWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UmVsZWFzZU9uQ29kZWNUaHJlYWQsIHRoaXMpKTsKLX0KLQot
aW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpTZXRDaGFubmVsUGFyYW1ldGVycyh1aW50
MzJfdCAvKiBwYWNrZXRfbG9zcyAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCAvKiBydHQgKi8pIHsKLSAgcmV0dXJuIFdFQlJU
Q19WSURFT19DT0RFQ19PSzsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpT
ZXRSYXRlcyh1aW50MzJfdCBuZXdfYml0X3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IGZyYW1lX3JhdGUpIHsKLSAgcmV0dXJuIGNvZGVjX3Ro
cmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAgIFJUQ19GUk9NX0hFUkUsIEJpbmQoJk1lZGlh
Q29kZWNWaWRlb0VuY29kZXI6OlNldFJhdGVzT25Db2RlY1RocmVhZCwgdGhpcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV3X2JpdF9yYXRlLCBmcmFtZV9yYXRlKSk7Ci19Ci0KLXZvaWQg
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6T25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSogbXNnKSB7Ci0g
IFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7
Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3Bl
ZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0KLSAgLy8gV2Ugb25seSBldmVy
IHNlbmQgb25lIG1lc3NhZ2UgdG8gfHRoaXN8IGRpcmVjdGx5IChub3QgdGhyb3VnaCBhIEJpbmQo
KSdkCi0gIC8vIGZ1bmN0b3IpLCBzbyBleHBlY3Qgbm8gSUQvZGF0YS4KLSAgUlRDX0NIRUNLKCFt
c2ctPm1lc3NhZ2VfaWQpIDw8ICJVbmV4cGVjdGVkIG1lc3NhZ2UhIjsKLSAgUlRDX0NIRUNLKCFt
c2ctPnBkYXRhKSA8PCAiVW5leHBlY3RlZCBtZXNzYWdlISI7Ci0gIGlmICghaW5pdGVkXykgewot
ICAgIHJldHVybjsKLSAgfQotCi0gIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gcmVjb3ZlciBmcm9t
IGEgZmFpbHVyZSBoZXJlIGlmIG9uZSBoYXBwZW5lZCwgYnV0IGl0J3MKLSAgLy8gdW5jbGVhciBo
b3cgdG8gc2lnbmFsIHN1Y2ggYSBmYWlsdXJlIHRvIHRoZSBhcHAsIHNvIGluc3RlYWQgd2Ugc3Rh
eSBzaWxlbnQKLSAgLy8gYWJvdXQgaXQgYW5kIGxldCB0aGUgbmV4dCBhcHAtY2FsbGVkIEFQSSBt
ZXRob2QgcmV2ZWFsIHRoZSBib3JrZWRuZXNzLgotICBEZWxpdmVyUGVuZGluZ091dHB1dHMoam5p
KTsKLQotICAvLyBJZiB0aGVyZSBhcmVuJ3QgbW9yZSBmcmFtZXMgdG8gZGVsaXZlciwgd2UgY2Fu
IHN0YXJ0IHBvbGxpbmcgYXQgbG93ZXIgcmF0ZS4KLSAgaWYgKGlucHV0X2ZyYW1lX2luZm9zXy5l
bXB0eSgpKSB7Ci0gICAgY29kZWNfdGhyZWFkXy0+UG9zdERlbGF5ZWQoUlRDX0ZST01fSEVSRSwg
a01lZGlhQ29kZWNQb2xsTm9GcmFtZXNNcywgdGhpcyk7Ci0gIH0gZWxzZSB7Ci0gICAgY29kZWNf
dGhyZWFkXy0+UG9zdERlbGF5ZWQoUlRDX0ZST01fSEVSRSwga01lZGlhQ29kZWNQb2xsTXMsIHRo
aXMpOwotICB9Ci0KLSAgLy8gQ2FsbCBsb2cgc3RhdGlzdGljcyBoZXJlIHNvIGl0J3MgY2FsbGVk
IGV2ZW4gaWYgbm8gZnJhbWVzIGFyZSBiZWluZwotICAvLyBkZWxpdmVyZWQuCi0gIExvZ1N0YXRp
c3RpY3MoZmFsc2UpOwotfQotCi1ib29sIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlJlc2V0Q29k
ZWNPbkNvZGVjVGhyZWFkKCkgewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2VyXy5D
YWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBBTE9HRSA8PCAiUmVzZXRPbkNvZGVjVGhyZWFkIjsK
LSAgaWYgKFJlbGVhc2VPbkNvZGVjVGhyZWFkKCkgIT0gV0VCUlRDX1ZJREVPX0NPREVDX09LKSB7
Ci0gICAgQUxPR0UgPDwgIlJlbGVhc2luZyBjb2RlYyBmYWlsZWQgZHVyaW5nIHJlc2V0LiI7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChJbml0RW5jb2RlT25Db2RlY1RocmVhZCh3aWR0
aF8sIGhlaWdodF8sIDAsIDAsIGZhbHNlKSAhPQotICAgICAgV0VCUlRDX1ZJREVPX0NPREVDX09L
KSB7Ci0gICAgQUxPR0UgPDwgIkluaXRpYWxpemluZyBlbmNvZGVyIGZhaWxlZCBkdXJpbmcgcmVz
ZXQuIjsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6UHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKAotICAg
IGJvb2wgcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUpIHsKLSAgQUxPR0UgPDwgIlByb2Nl
c3NIV0Vycm9yT25Db2RlY1RocmVhZCI7Ci0gIGlmIChWaWRlb0VuY29kZXI6OklzU3VwcG9ydGVk
U29mdHdhcmUoCi0gICAgICAgICAgVmlkZW9FbmNvZGVyOjpDb2RlY1RvRW5jb2RlclR5cGUoY29k
ZWNUeXBlXykpKSB7Ci0gICAgQUxPR0UgPDwgIkZhbGxiYWNrIHRvIFNXIGVuY29kZXIuIjsKLSAg
ICBzd19mYWxsYmFja19yZXF1aXJlZF8gPSB0cnVlOwotICAgIHJldHVybiBmYWxzZTsKLSAgfSBl
bHNlIGlmIChyZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSkgewotICAgIEFMT0dFIDw8ICJS
ZXNldCBlbmNvZGVyLiI7Ci0gICAgcmV0dXJuIFJlc2V0Q29kZWNPbkNvZGVjVGhyZWFkKCk7Ci0g
IH0KLSAgcmV0dXJuIGZhbHNlOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6
OlByb2Nlc3NIV0Vycm9yT25FbmNvZGVPbkNvZGVjVGhyZWFkKCkgewotICBQcm9jZXNzSFdFcnJv
ck9uQ29kZWNUaHJlYWQodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7
Ci0gIHJldHVybiBzd19mYWxsYmFja19yZXF1aXJlZF8gPyBXRUJSVENfVklERU9fQ09ERUNfRkFM
TEJBQ0tfU09GVFdBUkUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFdFQlJUQ19W
SURFT19DT0RFQ19FUlJPUjsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpJ
bml0RW5jb2RlT25Db2RlY1RocmVhZCgKLSAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBr
YnBzLCBpbnQgZnBzLCBib29sIHVzZV9zdXJmYWNlKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhy
ZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGlmIChzd19mYWxsYmFja19y
ZXF1aXJlZF8pIHsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotICB9Ci0gIFJU
Q19DSEVDSyghdXNlX3N1cmZhY2UgfHwgZWdsX2NvbnRleHRfICE9IG51bGxwdHIpIDw8ICJFR0wg
Y29udGV4dCBub3Qgc2V0LiI7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElm
TmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0K
LSAgQUxPR0QgPDwgIkluaXRFbmNvZGVPbkNvZGVjVGhyZWFkIFR5cGU6ICIgPDwgIChpbnQpY29k
ZWNUeXBlXyA8PCAiLCAiIDw8Ci0gICAgICB3aWR0aCA8PCAiIHggIiA8PCBoZWlnaHQgPDwgIi4g
Qml0cmF0ZTogIiA8PCBrYnBzIDw8Ci0gICAgICAiIGticHMuIEZwczogIiA8PCBmcHM7Ci0gIGlm
IChrYnBzID09IDApIHsKLSAgICBrYnBzID0gbGFzdF9zZXRfYml0cmF0ZV9rYnBzXzsKLSAgfQot
ICBpZiAoZnBzID09IDApIHsKLSAgICBmcHMgPSBNQVhfVklERU9fRlBTOwotICB9Ci0KLSAgd2lk
dGhfID0gd2lkdGg7Ci0gIGhlaWdodF8gPSBoZWlnaHQ7Ci0gIGxhc3Rfc2V0X2JpdHJhdGVfa2Jw
c18gPSBrYnBzOwotICBsYXN0X3NldF9mcHNfID0gKGZwcyA8IE1BWF9WSURFT19GUFMpID8gZnBz
IDogTUFYX1ZJREVPX0ZQUzsKLSAgeXV2X3NpemVfID0gd2lkdGhfICogaGVpZ2h0XyAqIDMgLyAy
OwotICBmcmFtZXNfcmVjZWl2ZWRfID0gMDsKLSAgZnJhbWVzX2VuY29kZWRfID0gMDsKLSAgZnJh
bWVzX2Ryb3BwZWRfbWVkaWFfZW5jb2Rlcl8gPSAwOwotICBjb25zZWN1dGl2ZV9mdWxsX3F1ZXVl
X2ZyYW1lX2Ryb3BzXyA9IDA7Ci0gIGN1cnJlbnRfdGltZXN0YW1wX3VzXyA9IDA7Ci0gIHN0YXRf
c3RhcnRfdGltZV9tc18gPSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgY3VycmVudF9mcmFtZXNfID0g
MDsKLSAgY3VycmVudF9ieXRlc18gPSAwOwotICBjdXJyZW50X2FjY19xcF8gPSAwOwotICBjdXJy
ZW50X2VuY29kaW5nX3RpbWVfbXNfID0gMDsKLSAgbGFzdF9pbnB1dF90aW1lc3RhbXBfbXNfID0g
LTE7Ci0gIGxhc3Rfb3V0cHV0X3RpbWVzdGFtcF9tc18gPSAtMTsKLSAgb3V0cHV0X3RpbWVzdGFt
cF8gPSAwOwotICBvdXRwdXRfcmVuZGVyX3RpbWVfbXNfID0gMDsKLSAgaW5wdXRfZnJhbWVfaW5m
b3NfLmNsZWFyKCk7Ci0gIGRyb3BfbmV4dF9pbnB1dF9mcmFtZV8gPSBmYWxzZTsKLSAgdXNlX3N1
cmZhY2VfID0gdXNlX3N1cmZhY2U7Ci0gIHBpY3R1cmVfaWRfID0gc3RhdGljX2Nhc3Q8dWludDE2
X3Q+KHJhbmQoKSkgJiAweDdGRkY7Ci0gIGdvZl8uU2V0R29mSW5mb1ZQOSh3ZWJydGM6OlRlbXBv
cmFsU3RydWN0dXJlTW9kZTo6a1RlbXBvcmFsU3RydWN0dXJlTW9kZTEpOwotICB0bDBfcGljX2lk
eF8gPSBzdGF0aWNfY2FzdDx1aW50OF90PihyYW5kKCkpOwotICBnb2ZfaWR4XyA9IDA7Ci0gIGxh
c3RfZnJhbWVfcmVjZWl2ZWRfbXNfID0gLTE7Ci0gIGZyYW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0
X2tleV8gPSBrTWluS2V5RnJhbWVJbnRlcnZhbDsKLQotICAvLyBXZSBlbmZvcmNlIG5vIGV4dHJh
IHN0cmlkZS9wYWRkaW5nIGluIHRoZSBmb3JtYXQgY3JlYXRpb24gc3RlcC4KLSAgam9iamVjdCBq
X3ZpZGVvX2NvZGVjX2VudW0gPSBKYXZhRW51bUZyb21JbmRleEFuZENsYXNzTmFtZSgKLSAgICAg
IGpuaSwgIk1lZGlhQ29kZWNWaWRlb0VuY29kZXIkVmlkZW9Db2RlY1R5cGUiLCBjb2RlY1R5cGVf
KTsKLSAgY29uc3QgYm9vbCBlbmNvZGVfc3RhdHVzID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZCgK
LSAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfLCBqX2luaXRfZW5jb2RlX21ldGhv
ZF8sCi0gICAgICBqX3ZpZGVvX2NvZGVjX2VudW0sIHdpZHRoLCBoZWlnaHQsIGticHMsIGZwcywK
LSAgICAgICh1c2Vfc3VyZmFjZSA/IGVnbF9jb250ZXh0XyA6IG51bGxwdHIpKTsKLSAgaWYgKCFl
bmNvZGVfc3RhdHVzKSB7Ci0gICAgQUxPR0UgPDwgIkZhaWxlZCB0byBjb25maWd1cmUgZW5jb2Rl
ci4iOwotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZChmYWxzZSAvKiByZXNldF9pZl9m
YWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19F
UlJPUjsKLSAgfQotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFMT0dFIDw8ICJF
eGNlcHRpb24gaW4gaW5pdCBlbmNvZGUuIjsKLSAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJl
YWQoZmFsc2UgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgIHJldHVy
biBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gIH0KLQotICBpZiAoIXVzZV9zdXJmYWNlKSB7
Ci0gICAgam9iamVjdEFycmF5IGlucHV0X2J1ZmZlcnMgPSByZWludGVycHJldF9jYXN0PGpvYmpl
Y3RBcnJheT4oCi0gICAgICAgIGpuaS0+Q2FsbE9iamVjdE1ldGhvZCgqal9tZWRpYV9jb2RlY192
aWRlb19lbmNvZGVyXywKLSAgICAgICAgICAgIGpfZ2V0X2lucHV0X2J1ZmZlcnNfbWV0aG9kXykp
OwotICAgIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgICBBTE9HRSA8PCAiRXhjZXB0
aW9uIGluIGdldCBpbnB1dCBidWZmZXJzLiI7Ci0gICAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNU
aHJlYWQoZmFsc2UgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgICAg
cmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0KLSAgICBpZiAoSXNOdWxs
KGpuaSwgaW5wdXRfYnVmZmVycykpIHsKLSAgICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVh
ZChmYWxzZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICByZXR1
cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0KLQotICAgIHN3aXRjaCAoR2V0SW50
RmllbGQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXywKLSAgICAgICAgal9jb2xv
cl9mb3JtYXRfZmllbGRfKSkgewotICAgICAgY2FzZSBDT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXI6
Ci0gICAgICAgIGVuY29kZXJfZm91cmNjXyA9IGxpYnl1djo6Rk9VUkNDX1lVMTI7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBDT0xPUl9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyOgotICAgICAg
Y2FzZSBDT0xPUl9RQ09NX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXI6Ci0gICAgICBjYXNlIENPTE9S
X1FDT01fRk9STUFUWVVWNDIwUGFja2VkU2VtaVBsYW5hcjMybToKLSAgICAgICAgZW5jb2Rlcl9m
b3VyY2NfID0gbGlieXV2OjpGT1VSQ0NfTlYxMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBMT0coTFNfRVJST1IpIDw8ICJXcm9uZyBjb2xvciBmb3JtYXQuIjsKLSAg
ICAgICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxi
YWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19F
UlJPUjsKLSAgICB9Ci0gICAgc2l6ZV90IG51bV9pbnB1dF9idWZmZXJzID0gam5pLT5HZXRBcnJh
eUxlbmd0aChpbnB1dF9idWZmZXJzKTsKLSAgICBSVENfQ0hFQ0soaW5wdXRfYnVmZmVyc18uZW1w
dHkoKSkKLSAgICAgICAgPDwgIlVuZXhwZWN0ZWQgZG91YmxlIEluaXRFbmNvZGUgd2l0aG91dCBS
ZWxlYXNlIjsKLSAgICBpbnB1dF9idWZmZXJzXy5yZXNpemUobnVtX2lucHV0X2J1ZmZlcnMpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtX2lucHV0X2J1ZmZlcnM7ICsraSkgewotICAg
ICAgaW5wdXRfYnVmZmVyc19baV0gPQotICAgICAgICAgIGpuaS0+TmV3R2xvYmFsUmVmKGpuaS0+
R2V0T2JqZWN0QXJyYXlFbGVtZW50KGlucHV0X2J1ZmZlcnMsIGkpKTsKLSAgICAgIGludDY0X3Qg
eXV2X2J1ZmZlcl9jYXBhY2l0eSA9Ci0gICAgICAgICAgam5pLT5HZXREaXJlY3RCdWZmZXJDYXBh
Y2l0eShpbnB1dF9idWZmZXJzX1tpXSk7Ci0gICAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkg
ewotICAgICAgICBBTE9HRSA8PCAiRXhjZXB0aW9uIGluIGdldCBkaXJlY3QgYnVmZmVyIGNhcGFj
aXR5LiI7Ci0gICAgICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZChmYWxzZSAvKiByZXNl
dF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRVJST1I7Ci0gICAgICB9Ci0gICAgICBSVENfQ0hFQ0soeXV2X2J1ZmZlcl9jYXBh
Y2l0eSA+PSB5dXZfc2l6ZV8pIDw8ICJJbnN1ZmZpY2llbnQgY2FwYWNpdHkiOwotICAgIH0KLSAg
fQotCi0gIGluaXRlZF8gPSB0cnVlOwotICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwot
fQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkVuY29kZU9uQ29kZWNUaHJlYWQo
Ci0gICAgY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSwKLSAgICBjb25zdCBzdGQ6OnZl
Y3Rvcjx3ZWJydGM6OkZyYW1lVHlwZT4qIGZyYW1lX3R5cGVzLAotICAgIGNvbnN0IGludDY0X3Qg
ZnJhbWVfaW5wdXRfdGltZV9tcykgewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2Vy
Xy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoc3dfZmFsbGJhY2tfcmVxdWlyZWRfKQot
ICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRkFMTEJBQ0tfU09GVFdBUkU7Ci0gIEpOSUVu
diogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVm
RnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0KLSAgaWYgKCFpbml0ZWRfKSB7Ci0gICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19VTklOSVRJQUxJWkVEOwotICB9Ci0KLSAgYm9vbCBzZW5k
X2tleV9mcmFtZSA9IGZhbHNlOwotICBpZiAoY29kZWNfbW9kZV8gPT0gd2VicnRjOjprUmVhbHRp
bWVWaWRlbykgewotICAgICsrZnJhbWVzX3JlY2VpdmVkX3NpbmNlX2xhc3Rfa2V5XzsKLSAgICBp
bnQ2NF90IG5vd19tcyA9IHJ0Yzo6VGltZU1pbGxpcygpOwotICAgIGlmIChsYXN0X2ZyYW1lX3Jl
Y2VpdmVkX21zXyAhPSAtMSAmJgotICAgICAgICAobm93X21zIC0gbGFzdF9mcmFtZV9yZWNlaXZl
ZF9tc18pID4ga0ZyYW1lRGlmZlRocmVzaG9sZE1zKSB7Ci0gICAgICAvLyBBZGQgbGltaXQgdG8g
cHJldmVudCB0cmlnZ2VyaW5nIGEga2V5IGZvciBldmVyeSBmcmFtZSBmb3IgdmVyeSBsb3cKLSAg
ICAgIC8vIGZyYW1lcmF0ZXMgKGUuZy4gaWYgZnJhbWUgZGlmZiA+IGtGcmFtZURpZmZUaHJlc2hv
bGRNcykuCi0gICAgICBpZiAoZnJhbWVzX3JlY2VpdmVkX3NpbmNlX2xhc3Rfa2V5XyA+IGtNaW5L
ZXlGcmFtZUludGVydmFsKSB7Ci0gICAgICAgIEFMT0dEIDw8ICJTZW5kIGtleSwgZnJhbWUgZGlm
ZjogIiA8PCAobm93X21zIC0gbGFzdF9mcmFtZV9yZWNlaXZlZF9tc18pOwotICAgICAgICBzZW5k
X2tleV9mcmFtZSA9IHRydWU7Ci0gICAgICB9Ci0gICAgICBmcmFtZXNfcmVjZWl2ZWRfc2luY2Vf
bGFzdF9rZXlfID0gMDsKLSAgICB9Ci0gICAgbGFzdF9mcmFtZV9yZWNlaXZlZF9tc18gPSBub3df
bXM7Ci0gIH0KLQotICBmcmFtZXNfcmVjZWl2ZWRfKys7Ci0gIGlmICghRGVsaXZlclBlbmRpbmdP
dXRwdXRzKGpuaSkpIHsKLSAgICBpZiAoIVByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgKLSAg
ICAgICAgICAgIHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pKSB7Ci0g
ICAgICByZXR1cm4gc3dfZmFsbGJhY2tfcmVxdWlyZWRfID8gV0VCUlRDX1ZJREVPX0NPREVDX0ZB
TExCQUNLX1NPRlRXQVJFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV0VC
UlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0KLSAgfQotICBpZiAoZnJhbWVzX2VuY29kZWRf
IDwga01heEVuY29kZWRMb2dGcmFtZXMpIHsKLSAgICBBTE9HRCA8PCAiRW5jb2RlciBmcmFtZSBp
biAjICIgPDwgKGZyYW1lc19yZWNlaXZlZF8gLSAxKQotICAgICAgICAgIDw8ICIuIFRTOiAiIDw8
IChpbnQpKGN1cnJlbnRfdGltZXN0YW1wX3VzXyAvIDEwMDApCi0gICAgICAgICAgPDwgIi4gUTog
IiA8PCBpbnB1dF9mcmFtZV9pbmZvc18uc2l6ZSgpIDw8ICIuIEZwczogIiA8PCBsYXN0X3NldF9m
cHNfCi0gICAgICAgICAgPDwgIi4gS2JwczogIiA8PCBsYXN0X3NldF9iaXRyYXRlX2ticHNfOwot
ICB9Ci0KLSAgaWYgKGRyb3BfbmV4dF9pbnB1dF9mcmFtZV8pIHsKLSAgICBBTE9HVyA8PCAiRW5j
b2RlciBkcm9wIGZyYW1lIC0gZmFpbGVkIGNhbGxiYWNrLiI7Ci0gICAgZHJvcF9uZXh0X2lucHV0
X2ZyYW1lXyA9IGZhbHNlOwotICAgIGN1cnJlbnRfdGltZXN0YW1wX3VzXyArPSBydGM6OmtOdW1N
aWNyb3NlY3NQZXJTZWMgLyBsYXN0X3NldF9mcHNfOwotICAgIGZyYW1lc19kcm9wcGVkX21lZGlh
X2VuY29kZXJfKys7Ci0gICAgT25Ecm9wcGVkRnJhbWVPbkNvZGVjVGhyZWFkKCk7Ci0gICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQotCi0gIFJUQ19DSEVDSyhmcmFtZV90eXBl
cy0+c2l6ZSgpID09IDEpIDw8ICJVbmV4cGVjdGVkIHN0cmVhbSBjb3VudCI7Ci0KLSAgLy8gQ2hl
Y2sgaWYgd2UgYWNjdW11bGF0ZWQgdG9vIG1hbnkgZnJhbWVzIGluIGVuY29kZXIgaW5wdXQgYnVm
ZmVycyBhbmQgZHJvcAotICAvLyBmcmFtZSBpZiBzby4KLSAgaWYgKGlucHV0X2ZyYW1lX2luZm9z
Xy5zaXplKCkgPiBNQVhfRU5DT0RFUl9RX1NJWkUpIHsKLSAgICBBTE9HRCA8PCAiQWxyZWFkeSAi
IDw8IGlucHV0X2ZyYW1lX2luZm9zXy5zaXplKCkKLSAgICAgICAgICA8PCAiIGZyYW1lcyBpbiB0
aGUgcXVldWUsIGRyb3BwaW5nIgotICAgICAgICAgIDw8ICIuIFRTOiAiIDw8IChpbnQpKGN1cnJl
bnRfdGltZXN0YW1wX3VzXyAvIDEwMDApCi0gICAgICAgICAgPDwgIi4gRnBzOiAiIDw8IGxhc3Rf
c2V0X2Zwc18KLSAgICAgICAgICA8PCAiLiBDb25zZWN1dGl2ZSBkcm9wczogIiA8PCBjb25zZWN1
dGl2ZV9mdWxsX3F1ZXVlX2ZyYW1lX2Ryb3BzXzsKLSAgICBjdXJyZW50X3RpbWVzdGFtcF91c18g
Kz0gcnRjOjprTnVtTWljcm9zZWNzUGVyU2VjIC8gbGFzdF9zZXRfZnBzXzsKLSAgICBjb25zZWN1
dGl2ZV9mdWxsX3F1ZXVlX2ZyYW1lX2Ryb3BzXysrOwotICAgIGlmIChjb25zZWN1dGl2ZV9mdWxs
X3F1ZXVlX2ZyYW1lX2Ryb3BzXyA+PQotICAgICAgICBFTkNPREVSX1NUQUxMX0ZSQU1FRFJPUF9U
SFJFU0hPTEQpIHsKLSAgICAgIEFMT0dFIDw8ICJFbmNvZGVyIGdvdCBzdHVjay4iOwotICAgICAg
cmV0dXJuIFByb2Nlc3NIV0Vycm9yT25FbmNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0gICAgfQotICAg
IGZyYW1lc19kcm9wcGVkX21lZGlhX2VuY29kZXJfKys7Ci0gICAgT25Ecm9wcGVkRnJhbWVPbkNv
ZGVjVGhyZWFkKCk7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQotICBj
b25zZWN1dGl2ZV9mdWxsX3F1ZXVlX2ZyYW1lX2Ryb3BzXyA9IDA7Ci0KLSAgcnRjOjpzY29wZWRf
cmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcj4gaW5wdXRfYnVmZmVyKAotICAgICAgZnJh
bWUudmlkZW9fZnJhbWVfYnVmZmVyKCkpOwotICBpZiAoc2NhbGVfKSB7Ci0gICAgLy8gQ2hlY2sg
ZnJhbWVyYXRlIGJlZm9yZSBzcGF0aWFsIHJlc29sdXRpb24gY2hhbmdlLgotICAgIHF1YWxpdHlf
c2NhbGVyXy5PbkVuY29kZUZyYW1lKGZyYW1lLndpZHRoKCksIGZyYW1lLmhlaWdodCgpKTsKLSAg
ICBjb25zdCB3ZWJydGM6OlF1YWxpdHlTY2FsZXI6OlJlc29sdXRpb24gc2NhbGVkX3Jlc29sdXRp
b24gPQotICAgICAgICBxdWFsaXR5X3NjYWxlcl8uR2V0U2NhbGVkUmVzb2x1dGlvbigpOwotICAg
IGlmIChzY2FsZWRfcmVzb2x1dGlvbi53aWR0aCAhPSBmcmFtZS53aWR0aCgpIHx8Ci0gICAgICAg
IHNjYWxlZF9yZXNvbHV0aW9uLmhlaWdodCAhPSBmcmFtZS5oZWlnaHQoKSkgewotICAgICAgaWYg
KGlucHV0X2J1ZmZlci0+bmF0aXZlX2hhbmRsZSgpICE9IG51bGxwdHIpIHsKLSAgICAgICAgaW5w
dXRfYnVmZmVyID0gc3RhdGljX2Nhc3Q8QW5kcm9pZFRleHR1cmVCdWZmZXIqPihpbnB1dF9idWZm
ZXIuZ2V0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAtPkNyb3BTY2FsZUFuZFJvdGF0
ZShmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRfcmVzb2x1dGlvbi53aWR0aCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxlZF9yZXNvbHV0aW9u
LmhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpbnB1
dF9idWZmZXIgPSBxdWFsaXR5X3NjYWxlcl8uR2V0U2NhbGVkQnVmZmVyKGlucHV0X2J1ZmZlcik7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgVmlkZW9GcmFtZSBpbnB1dF9mcmFtZShpbnB1dF9i
dWZmZXIsIGZyYW1lLnRpbWVzdGFtcCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1l
LnJlbmRlcl90aW1lX21zKCksIGZyYW1lLnJvdGF0aW9uKCkpOwotCi0gIGlmICghTWF5YmVSZWNv
bmZpZ3VyZUVuY29kZXJPbkNvZGVjVGhyZWFkKGlucHV0X2ZyYW1lKSkgewotICAgIEFMT0dFIDw8
ICJGYWlsZWQgdG8gcmVjb25maWd1cmUgZW5jb2Rlci4iOwotICAgIHJldHVybiBXRUJSVENfVklE
RU9fQ09ERUNfRVJST1I7Ci0gIH0KLQotICBjb25zdCBib29sIGtleV9mcmFtZSA9Ci0gICAgICBm
cmFtZV90eXBlcy0+ZnJvbnQoKSAhPSB3ZWJydGM6OmtWaWRlb0ZyYW1lRGVsdGEgfHwgc2VuZF9r
ZXlfZnJhbWU7Ci0gIGJvb2wgZW5jb2RlX3N0YXR1cyA9IHRydWU7Ci0gIGlmICghaW5wdXRfZnJh
bWUudmlkZW9fZnJhbWVfYnVmZmVyKCktPm5hdGl2ZV9oYW5kbGUoKSkgewotICAgIGludCBqX2lu
cHV0X2J1ZmZlcl9pbmRleCA9IGpuaS0+Q2FsbEludE1ldGhvZCgqal9tZWRpYV9jb2RlY192aWRl
b19lbmNvZGVyXywKLSAgICAgICAgal9kZXF1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2RfKTsKLSAg
ICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBp
biBkZXF1ZXUgaW5wdXQgYnVmZmVyLiI7Ci0gICAgICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkVu
Y29kZU9uQ29kZWNUaHJlYWQoKTsKLSAgICB9Ci0gICAgaWYgKGpfaW5wdXRfYnVmZmVyX2luZGV4
ID09IC0xKSB7Ci0gICAgICAvLyBWaWRlbyBjb2RlYyBmYWxscyBiZWhpbmQgLSBubyBpbnB1dCBi
dWZmZXIgYXZhaWxhYmxlLgotICAgICAgQUxPR1cgPDwgIkVuY29kZXIgZHJvcCBmcmFtZSAtIG5v
IGlucHV0IGJ1ZmZlcnMgYXZhaWxhYmxlIjsKLSAgICAgIGlmIChmcmFtZXNfcmVjZWl2ZWRfID4g
MSkgewotICAgICAgICBjdXJyZW50X3RpbWVzdGFtcF91c18gKz0gcnRjOjprTnVtTWljcm9zZWNz
UGVyU2VjIC8gbGFzdF9zZXRfZnBzXzsKLSAgICAgICAgZnJhbWVzX2Ryb3BwZWRfbWVkaWFfZW5j
b2Rlcl8rKzsKLSAgICAgICAgT25Ecm9wcGVkRnJhbWVPbkNvZGVjVGhyZWFkKCk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyBJbnB1dCBidWZmZXJzIGFyZSBub3QgcmVhZHkgYWZ0ZXIgY29k
ZWMgaW5pdGlhbGl6YXRpb24sIEhXIGlzIHN0aWxsCi0gICAgICAgIC8vIGFsbG9jYXRpbmcgdGht
ZSAtIHRoaXMgaXMgZXhwZWN0ZWQgYW5kIHNob3VsZCBub3QgcmVzdWx0IGluIGRyb3AKLSAgICAg
ICAgLy8gZnJhbWUgcmVwb3J0LgotICAgICAgICBmcmFtZXNfcmVjZWl2ZWRfID0gMDsKLSAgICAg
IH0KLSAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7ICAvLyBUT0RPKGZpc2NobWFu
KTogc2VlIHdlYnJ0YyBidWcgMjg4Ny4KLSAgICB9IGVsc2UgaWYgKGpfaW5wdXRfYnVmZmVyX2lu
ZGV4ID09IC0yKSB7Ci0gICAgICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkVuY29kZU9uQ29kZWNU
aHJlYWQoKTsKLSAgICB9Ci0gICAgZW5jb2RlX3N0YXR1cyA9IEVuY29kZUJ5dGVCdWZmZXJPbkNv
ZGVjVGhyZWFkKGpuaSwga2V5X2ZyYW1lLCBpbnB1dF9mcmFtZSwKLSAgICAgICAgal9pbnB1dF9i
dWZmZXJfaW5kZXgpOwotICB9IGVsc2UgewotICAgIGVuY29kZV9zdGF0dXMgPSBFbmNvZGVUZXh0
dXJlT25Db2RlY1RocmVhZChqbmksIGtleV9mcmFtZSwgaW5wdXRfZnJhbWUpOwotICB9Ci0KLSAg
aWYgKCFlbmNvZGVfc3RhdHVzKSB7Ci0gICAgQUxPR0UgPDwgIkZhaWxlZCBlbmNvZGUgZnJhbWUg
d2l0aCB0aW1lc3RhbXA6ICIgPDwgaW5wdXRfZnJhbWUudGltZXN0YW1wKCk7Ci0gICAgcmV0dXJu
IFByb2Nlc3NIV0Vycm9yT25FbmNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0gIH0KLQotICAvLyBTYXZl
IGlucHV0IGltYWdlIHRpbWVzdGFtcHMgZm9yIGxhdGVyIG91dHB1dC4KLSAgaW5wdXRfZnJhbWVf
aW5mb3NfLmVtcGxhY2VfYmFjaygKLSAgICAgIGZyYW1lX2lucHV0X3RpbWVfbXMsIGlucHV0X2Zy
YW1lLnRpbWVzdGFtcCgpLAotICAgICAgaW5wdXRfZnJhbWUucmVuZGVyX3RpbWVfbXMoKSwgaW5w
dXRfZnJhbWUucm90YXRpb24oKSk7Ci0KLSAgbGFzdF9pbnB1dF90aW1lc3RhbXBfbXNfID0KLSAg
ICAgIGN1cnJlbnRfdGltZXN0YW1wX3VzXyAvIHJ0Yzo6a051bU1pY3Jvc2Vjc1Blck1pbGxpc2Vj
OwotCi0gIGN1cnJlbnRfdGltZXN0YW1wX3VzXyArPSBydGM6OmtOdW1NaWNyb3NlY3NQZXJTZWMg
LyBsYXN0X3NldF9mcHNfOwotCi0gIGNvZGVjX3RocmVhZF8tPkNsZWFyKHRoaXMpOwotICBjb2Rl
Y190aHJlYWRfLT5Qb3N0RGVsYXllZChSVENfRlJPTV9IRVJFLCBrTWVkaWFDb2RlY1BvbGxNcywg
dGhpcyk7Ci0KLSAgaWYgKCFEZWxpdmVyUGVuZGluZ091dHB1dHMoam5pKSkgewotICAgIHJldHVy
biBQcm9jZXNzSFdFcnJvck9uRW5jb2RlT25Db2RlY1RocmVhZCgpOwotICB9Ci0gIHJldHVybiBX
RUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0KLWJvb2wgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6
TWF5YmVSZWNvbmZpZ3VyZUVuY29kZXJPbkNvZGVjVGhyZWFkKAotICAgIGNvbnN0IHdlYnJ0Yzo6
VmlkZW9GcmFtZSYgZnJhbWUpIHsKLSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tlcl8u
Q2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLQotICBjb25zdCBib29sIGlzX3RleHR1cmVfZnJhbWUg
PQotICAgICAgZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCktPm5hdGl2ZV9oYW5kbGUoKSAhPSBu
dWxscHRyOwotICBjb25zdCBib29sIHJlY29uZmlndXJlX2R1ZV90b19mb3JtYXQgPSBpc190ZXh0
dXJlX2ZyYW1lICE9IHVzZV9zdXJmYWNlXzsKLSAgY29uc3QgYm9vbCByZWNvbmZpZ3VyZV9kdWVf
dG9fc2l6ZSA9Ci0gICAgICBmcmFtZS53aWR0aCgpICE9IHdpZHRoXyB8fCBmcmFtZS5oZWlnaHQo
KSAhPSBoZWlnaHRfOwotCi0gIGlmIChyZWNvbmZpZ3VyZV9kdWVfdG9fZm9ybWF0KSB7Ci0gICAg
ICBBTE9HRCA8PCAiUmVjb25maWd1cmUgZW5jb2RlciBkdWUgdG8gZm9ybWF0IGNoYW5nZS4gIgot
ICAgICAgICAgICAgPDwgKHVzZV9zdXJmYWNlXyA/Ci0gICAgICAgICAgICAgICAgIlJlY29uZmln
dXJpbmcgdG8gZW5jb2RlIGZyb20gYnl0ZSBidWZmZXIuIiA6Ci0gICAgICAgICAgICAgICAgIlJl
Y29uZmlndXJpbmcgdG8gZW5jb2RlIGZyb20gdGV4dHVyZS4iKTsKLSAgICAgIExvZ1N0YXRpc3Rp
Y3ModHJ1ZSk7Ci0gIH0KLSAgaWYgKHJlY29uZmlndXJlX2R1ZV90b19zaXplKSB7Ci0gICAgQUxP
R1cgPDwgIlJlY29uZmlndXJlIGVuY29kZXIgZHVlIHRvIGZyYW1lIHJlc29sdXRpb24gY2hhbmdl
IGZyb20gIgotICAgICAgICA8PCB3aWR0aF8gPDwgIiB4ICIgPDwgaGVpZ2h0XyA8PCAiIHRvICIg
PDwgZnJhbWUud2lkdGgoKSA8PCAiIHggIgotICAgICAgICA8PCBmcmFtZS5oZWlnaHQoKTsKLSAg
ICBMb2dTdGF0aXN0aWNzKHRydWUpOwotICAgIHdpZHRoXyA9IGZyYW1lLndpZHRoKCk7Ci0gICAg
aGVpZ2h0XyA9IGZyYW1lLmhlaWdodCgpOwotICB9Ci0KLSAgaWYgKCFyZWNvbmZpZ3VyZV9kdWVf
dG9fZm9ybWF0ICYmICFyZWNvbmZpZ3VyZV9kdWVfdG9fc2l6ZSkKLSAgICByZXR1cm4gdHJ1ZTsK
LQotICBSZWxlYXNlT25Db2RlY1RocmVhZCgpOwotCi0gIHJldHVybiBJbml0RW5jb2RlT25Db2Rl
Y1RocmVhZCh3aWR0aF8sIGhlaWdodF8sIDAsIDAgLCBpc190ZXh0dXJlX2ZyYW1lKSA9PQotICAg
ICAgV0VCUlRDX1ZJREVPX0NPREVDX09LOwotfQotCi1ib29sIE1lZGlhQ29kZWNWaWRlb0VuY29k
ZXI6OkVuY29kZUJ5dGVCdWZmZXJPbkNvZGVjVGhyZWFkKEpOSUVudiogam5pLAotICAgIGJvb2wg
a2V5X2ZyYW1lLCBjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lLCBpbnQgaW5wdXRfYnVm
ZmVyX2luZGV4KSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9u
VmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19DSEVDSyghdXNlX3N1cmZhY2VfKTsKLQotICBqb2JqZWN0
IGpfaW5wdXRfYnVmZmVyID0gaW5wdXRfYnVmZmVyc19baW5wdXRfYnVmZmVyX2luZGV4XTsKLSAg
dWludDhfdCogeXV2X2J1ZmZlciA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihq
bmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9pbnB1dF9idWZmZXIpKTsKLSAgaWYgKENoZWNr
RXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8PCAiRXhjZXB0aW9uIGluIGdldCBkaXJlY3Qg
YnVmZmVyIGFkZHJlc3MuIjsKLSAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQodHJ1ZSAv
KiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0gIFJUQ19DSEVDSyh5dXZfYnVmZmVyKSA8PCAiSW5kaXJlY3QgYnVmZmVyPz8iOwotICBS
VENfQ0hFQ0soIWxpYnl1djo6Q29udmVydEZyb21JNDIwKAotICAgICAgZnJhbWUudmlkZW9fZnJh
bWVfYnVmZmVyKCktPkRhdGFZKCksCi0gICAgICBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS0+
U3RyaWRlWSgpLAotICAgICAgZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCktPkRhdGFVKCksCi0g
ICAgICBmcmFtZS52aWRlb19mcmFtZV9idWZmZXIoKS0+U3RyaWRlVSgpLAotICAgICAgZnJhbWUu
dmlkZW9fZnJhbWVfYnVmZmVyKCktPkRhdGFWKCksCi0gICAgICBmcmFtZS52aWRlb19mcmFtZV9i
dWZmZXIoKS0+U3RyaWRlVigpLAotICAgICAgeXV2X2J1ZmZlciwgd2lkdGhfLCB3aWR0aF8sIGhl
aWdodF8sIGVuY29kZXJfZm91cmNjXykpCi0gICAgICA8PCAiQ29udmVydEZyb21JNDIwIGZhaWxl
ZCI7Ci0KLSAgYm9vbCBlbmNvZGVfc3RhdHVzID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZCgqal9t
ZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqX2VuY29kZV9idWZmZXJfbWV0aG9kXywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlfZnJhbWUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfYnVmZmVyX2luZGV4LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl1dl9zaXplXywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3RpbWVz
dGFtcF91c18pOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFMT0dFIDw8ICJF
eGNlcHRpb24gaW4gZW5jb2RlIGJ1ZmZlci4iOwotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1Ro
cmVhZCh0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIGVuY29kZV9zdGF0dXM7Ci19Ci0KLWJvb2wgTWVkaWFD
b2RlY1ZpZGVvRW5jb2Rlcjo6RW5jb2RlVGV4dHVyZU9uQ29kZWNUaHJlYWQoSk5JRW52KiBqbmks
Ci0gICAgYm9vbCBrZXlfZnJhbWUsIGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUpIHsK
LSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKLSAgUlRDX0NIRUNLKHVzZV9zdXJmYWNlXyk7Ci0gIE5hdGl2ZUhhbmRsZUltcGwqIGhhbmRs
ZSA9IHN0YXRpY19jYXN0PE5hdGl2ZUhhbmRsZUltcGwqPigKLSAgICAgIGZyYW1lLnZpZGVvX2Zy
YW1lX2J1ZmZlcigpLT5uYXRpdmVfaGFuZGxlKCkpOwotICBqZmxvYXRBcnJheSBzYW1wbGluZ19t
YXRyaXggPSBoYW5kbGUtPnNhbXBsaW5nX21hdHJpeC5Ub0phdmEoam5pKTsKLSAgYm9vbCBlbmNv
ZGVfc3RhdHVzID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZCgqal9tZWRpYV9jb2RlY192aWRlb19l
bmNvZGVyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
X2VuY29kZV90ZXh0dXJlX21ldGhvZF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga2V5X2ZyYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZS0+b2VzX3RleHR1cmVfaWQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxpbmdfbWF0cml4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfdGltZXN0YW1wX3Vz
Xyk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIkV4Y2VwdGlv
biBpbiBlbmNvZGUgdGV4dHVyZS4iOwotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCh0
cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgcmV0dXJuIGVuY29kZV9zdGF0dXM7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2Rlcjo6UmVnaXN0ZXJFbmNvZGVDb21wbGV0ZUNhbGxiYWNrT25Db2RlY1RocmVh
ZCgKLSAgICB3ZWJydGM6OkVuY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFjaykgewotICBSVENf
RENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBK
TklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2Nh
bFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBjYWxsYmFja18gPSBjYWxsYmFjazsK
LSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyOjpSZWxlYXNlT25Db2RlY1RocmVhZCgpIHsKLSAgUlRDX0RDSEVDSyhjb2Rl
Y190aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKCFpbml0ZWRf
KSB7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQotICBKTklFbnYqIGpu
aSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBBTE9HRCA8PCAiRW5jb2RlclJl
bGVhc2VPbkNvZGVjVGhyZWFkOiBGcmFtZXMgcmVjZWl2ZWQ6ICIgPDwKLSAgICAgIGZyYW1lc19y
ZWNlaXZlZF8gPDwgIi4gRW5jb2RlZDogIiA8PCBmcmFtZXNfZW5jb2RlZF8gPDwKLSAgICAgICIu
IERyb3BwZWQ6ICIgPDwgZnJhbWVzX2Ryb3BwZWRfbWVkaWFfZW5jb2Rlcl87Ci0gIFNjb3BlZExv
Y2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgaW5wdXRfYnVmZmVyc18uc2l6ZSgpOyArK2kpCi0gICAgam5pLT5EZWxldGVHbG9iYWxSZWYo
aW5wdXRfYnVmZmVyc19baV0pOwotICBpbnB1dF9idWZmZXJzXy5jbGVhcigpOwotICBqbmktPkNh
bGxWb2lkTWV0aG9kKCpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfLCBqX3JlbGVhc2VfbWV0
aG9kXyk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIkV4Y2Vw
dGlvbiBpbiByZWxlYXNlLiI7Ci0gICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKGZhbHNl
IC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0gIHJ0Yzo6TWVzc2FnZVF1ZXVlTWFuYWdlcjo6Q2xl
YXIodGhpcyk7Ci0gIGluaXRlZF8gPSBmYWxzZTsKLSAgdXNlX3N1cmZhY2VfID0gZmFsc2U7Ci0g
IEFMT0dEIDw8ICJFbmNvZGVyUmVsZWFzZU9uQ29kZWNUaHJlYWQgZG9uZS4iOwotICByZXR1cm4g
V0VCUlRDX1ZJREVPX0NPREVDX09LOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29k
ZXI6OlNldFJhdGVzT25Db2RlY1RocmVhZCh1aW50MzJfdCBuZXdfYml0X3JhdGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBm
cmFtZV9yYXRlKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9u
VmFsaWRUaHJlYWQoKSk7Ci0gIGlmIChzd19mYWxsYmFja19yZXF1aXJlZF8pCi0gICAgcmV0dXJu
IFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgZnJhbWVfcmF0ZSA9IChmcmFtZV9yYXRlIDwgTUFY
X0FMTE9XRURfVklERU9fRlBTKSA/Ci0gICAgICBmcmFtZV9yYXRlIDogTUFYX0FMTE9XRURfVklE
RU9fRlBTOwotICBpZiAobGFzdF9zZXRfYml0cmF0ZV9rYnBzXyA9PSBuZXdfYml0X3JhdGUgJiYK
LSAgICAgIGxhc3Rfc2V0X2Zwc18gPT0gZnJhbWVfcmF0ZSkgewotICAgIHJldHVybiBXRUJSVENf
VklERU9fQ09ERUNfT0s7Ci0gIH0KLSAgaWYgKHNjYWxlXykgewotICAgIHF1YWxpdHlfc2NhbGVy
Xy5SZXBvcnRGcmFtZXJhdGUoZnJhbWVfcmF0ZSk7Ci0gIH0KLSAgSk5JRW52KiBqbmkgPSBBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9y
ZWZfZnJhbWUoam5pKTsKLSAgaWYgKG5ld19iaXRfcmF0ZSA+IDApIHsKLSAgICBsYXN0X3NldF9i
aXRyYXRlX2ticHNfID0gbmV3X2JpdF9yYXRlOwotICB9Ci0gIGlmIChmcmFtZV9yYXRlID4gMCkg
ewotICAgIGxhc3Rfc2V0X2Zwc18gPSBmcmFtZV9yYXRlOwotICB9Ci0gIGJvb2wgcmV0ID0gam5p
LT5DYWxsQm9vbGVhbk1ldGhvZCgqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfc2V0X3JhdGVzX21ldGhvZF8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3NldF9iaXRyYXRlX2ti
cHNfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zZXRfZnBz
Xyk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpIHx8ICFyZXQpIHsKLSAgICBQcm9jZXNzSFdF
cnJvck9uQ29kZWNUaHJlYWQodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAq
Lyk7Ci0gICAgcmV0dXJuIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA/IFdFQlJUQ19WSURFT19DT0RF
Q19PSwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBXRUJSVENfVklERU9fQ09E
RUNfRVJST1I7Ci0gIH0KLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotaW50
IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkdldE91dHB1dEJ1ZmZlckluZm9JbmRleCgKLSAgICBK
TklFbnYqIGpuaSwKLSAgICBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZlcl9pbmZvKSB7Ci0gIHJldHVy
biBHZXRJbnRGaWVsZChqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZvLCBqX2luZm9faW5kZXhfZmll
bGRfKTsKLX0KLQotam9iamVjdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpHZXRPdXRwdXRCdWZm
ZXJJbmZvQnVmZmVyKAotICAgIEpOSUVudiogam5pLAotICAgIGpvYmplY3Qgal9vdXRwdXRfYnVm
ZmVyX2luZm8pIHsKLSAgcmV0dXJuIEdldE9iamVjdEZpZWxkKGpuaSwgal9vdXRwdXRfYnVmZmVy
X2luZm8sIGpfaW5mb19idWZmZXJfZmllbGRfKTsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyOjpHZXRPdXRwdXRCdWZmZXJJbmZvSXNLZXlGcmFtZSgKLSAgICBKTklFbnYqIGpuaSwK
LSAgICBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZlcl9pbmZvKSB7Ci0gIHJldHVybiBHZXRCb29sZWFu
RmllbGQoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbywgal9pbmZvX2lzX2tleV9mcmFtZV9maWVs
ZF8pOwotfQotCi1qbG9uZyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpHZXRPdXRwdXRCdWZmZXJJ
bmZvUHJlc2VudGF0aW9uVGltZXN0YW1wVXMoCi0gICAgSk5JRW52KiBqbmksCi0gICAgam9iamVj
dCBqX291dHB1dF9idWZmZXJfaW5mbykgewotICByZXR1cm4gR2V0TG9uZ0ZpZWxkKAotICAgICAg
am5pLCBqX291dHB1dF9idWZmZXJfaW5mbywgal9pbmZvX3ByZXNlbnRhdGlvbl90aW1lc3RhbXBf
dXNfZmllbGRfKTsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpEZWxpdmVyUGVu
ZGluZ091dHB1dHMoSk5JRW52KiBqbmkpIHsKLSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hl
Y2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLQotICB3aGlsZSAodHJ1ZSkgewotICAgIGpv
YmplY3Qgal9vdXRwdXRfYnVmZmVyX2luZm8gPSBqbmktPkNhbGxPYmplY3RNZXRob2QoCi0gICAg
ICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfLCBqX2RlcXVldWVfb3V0cHV0X2J1ZmZl
cl9tZXRob2RfKTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0Ug
PDwgIkV4Y2VwdGlvbiBpbiBzZXQgZGVxdWV1ZSBvdXRwdXQgYnVmZmVyLiI7Ci0gICAgICBQcm9j
ZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWls
YWJsZSAqLyk7Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0K
LSAgICBpZiAoSXNOdWxsKGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8pKSB7Ci0gICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBpbnQgb3V0cHV0X2J1ZmZlcl9pbmRleCA9Ci0gICAgICAgIEdldE91
dHB1dEJ1ZmZlckluZm9JbmRleChqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZvKTsKLSAgICBpZiAo
b3V0cHV0X2J1ZmZlcl9pbmRleCA9PSAtMSkgewotICAgICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVj
VGhyZWFkKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEdldCBrZXkgYW5kIGNvbmZpZyBmcmFtZSBm
bGFncy4KLSAgICBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZlciA9Ci0gICAgICAgIEdldE91dHB1dEJ1
ZmZlckluZm9CdWZmZXIoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbyk7Ci0gICAgYm9vbCBrZXlf
ZnJhbWUgPSBHZXRPdXRwdXRCdWZmZXJJbmZvSXNLZXlGcmFtZShqbmksIGpfb3V0cHV0X2J1ZmZl
cl9pbmZvKTsKLQotICAgIC8vIEdldCBmcmFtZSB0aW1lc3RhbXBzIGZyb20gYSBxdWV1ZSAtIGZv
ciBub24gY29uZmlnIGZyYW1lcyBvbmx5LgotICAgIGludDY0X3QgZW5jb2Rpbmdfc3RhcnRfdGlt
ZV9tcyA9IDA7Ci0gICAgaW50NjRfdCBmcmFtZV9lbmNvZGluZ190aW1lX21zID0gMDsKLSAgICBs
YXN0X291dHB1dF90aW1lc3RhbXBfbXNfID0KLSAgICAgICAgR2V0T3V0cHV0QnVmZmVySW5mb1By
ZXNlbnRhdGlvblRpbWVzdGFtcFVzKGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8pIC8KLSAgICAg
ICAgcnRjOjprTnVtTWljcm9zZWNzUGVyTWlsbGlzZWM7Ci0gICAgaWYgKCFpbnB1dF9mcmFtZV9p
bmZvc18uZW1wdHkoKSkgewotICAgICAgY29uc3QgSW5wdXRGcmFtZUluZm8mIGZyYW1lX2luZm8g
PSBpbnB1dF9mcmFtZV9pbmZvc18uZnJvbnQoKTsKLSAgICAgIG91dHB1dF90aW1lc3RhbXBfID0g
ZnJhbWVfaW5mby5mcmFtZV90aW1lc3RhbXA7Ci0gICAgICBvdXRwdXRfcmVuZGVyX3RpbWVfbXNf
ID0gZnJhbWVfaW5mby5mcmFtZV9yZW5kZXJfdGltZV9tczsKLSAgICAgIG91dHB1dF9yb3RhdGlv
bl8gPSBmcmFtZV9pbmZvLnJvdGF0aW9uOwotICAgICAgZW5jb2Rpbmdfc3RhcnRfdGltZV9tcyA9
IGZyYW1lX2luZm8uZW5jb2RlX3N0YXJ0X3RpbWU7Ci0gICAgICBpbnB1dF9mcmFtZV9pbmZvc18u
cG9wX2Zyb250KCk7Ci0gICAgfQotCi0gICAgLy8gRXh0cmFjdCBwYXlsb2FkLgotICAgIHNpemVf
dCBwYXlsb2FkX3NpemUgPSBqbmktPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KGpfb3V0cHV0X2J1
ZmZlcik7Ci0gICAgdWludDhfdCogcGF5bG9hZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KAotICAgICAgICBqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9vdXRwdXRfYnVmZmVyKSk7
Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICAgIEFMT0dFIDw8ICJFeGNlcHRp
b24gaW4gZ2V0IGRpcmVjdCBidWZmZXIgYWRkcmVzcy4iOwotICAgICAgUHJvY2Vzc0hXRXJyb3JP
bkNvZGVjVGhyZWFkKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwot
ICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0KLSAgICAvLyBD
YWxsYmFjayAtIHJldHVybiBlbmNvZGVkIGZyYW1lLgotICAgIHdlYnJ0Yzo6RW5jb2RlZEltYWdl
Q2FsbGJhY2s6OlJlc3VsdCBjYWxsYmFja19yZXN1bHQoCi0gICAgICAgIHdlYnJ0Yzo6RW5jb2Rl
ZEltYWdlQ2FsbGJhY2s6OlJlc3VsdDo6T0spOwotICAgIGlmIChjYWxsYmFja18pIHsKLSAgICAg
IHN0ZDo6dW5pcXVlX3B0cjx3ZWJydGM6OkVuY29kZWRJbWFnZT4gaW1hZ2UoCi0gICAgICAgICAg
bmV3IHdlYnJ0Yzo6RW5jb2RlZEltYWdlKHBheWxvYWQsIHBheWxvYWRfc2l6ZSwgcGF5bG9hZF9z
aXplKSk7Ci0gICAgICBpbWFnZS0+X2VuY29kZWRXaWR0aCA9IHdpZHRoXzsKLSAgICAgIGltYWdl
LT5fZW5jb2RlZEhlaWdodCA9IGhlaWdodF87Ci0gICAgICBpbWFnZS0+X3RpbWVTdGFtcCA9IG91
dHB1dF90aW1lc3RhbXBfOwotICAgICAgaW1hZ2UtPmNhcHR1cmVfdGltZV9tc18gPSBvdXRwdXRf
cmVuZGVyX3RpbWVfbXNfOwotICAgICAgaW1hZ2UtPnJvdGF0aW9uXyA9IG91dHB1dF9yb3RhdGlv
bl87Ci0gICAgICBpbWFnZS0+X2ZyYW1lVHlwZSA9Ci0gICAgICAgICAgKGtleV9mcmFtZSA/IHdl
YnJ0Yzo6a1ZpZGVvRnJhbWVLZXkgOiB3ZWJydGM6OmtWaWRlb0ZyYW1lRGVsdGEpOwotICAgICAg
aW1hZ2UtPl9jb21wbGV0ZUZyYW1lID0gdHJ1ZTsKLSAgICAgIGltYWdlLT5hZGFwdF9yZWFzb25f
LnF1YWxpdHlfcmVzb2x1dGlvbl9kb3duc2NhbGVzID0KLSAgICAgICAgICBzY2FsZV8gPyBxdWFs
aXR5X3NjYWxlcl8uZG93bnNjYWxlX3NoaWZ0KCkgOiAtMTsKLQotICAgICAgd2VicnRjOjpDb2Rl
Y1NwZWNpZmljSW5mbyBpbmZvOwotICAgICAgbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykp
OwotICAgICAgaW5mby5jb2RlY1R5cGUgPSBjb2RlY1R5cGVfOwotICAgICAgaWYgKGNvZGVjVHlw
ZV8gPT0ga1ZpZGVvQ29kZWNWUDgpIHsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOC5w
aWN0dXJlSWQgPSBwaWN0dXJlX2lkXzsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOC5u
b25SZWZlcmVuY2UgPSBmYWxzZTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOC5zaW11
bGNhc3RJZHggPSAwOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA4LnRlbXBvcmFsSWR4
ID0gd2VicnRjOjprTm9UZW1wb3JhbElkeDsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQ
OC5sYXllclN5bmMgPSBmYWxzZTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOC50bDBQ
aWNJZHggPSB3ZWJydGM6OmtOb1RsMFBpY0lkeDsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmlj
LlZQOC5rZXlJZHggPSB3ZWJydGM6OmtOb0tleUlkeDsKLSAgICAgIH0gZWxzZSBpZiAoY29kZWNU
eXBlXyA9PSBrVmlkZW9Db2RlY1ZQOSkgewotICAgICAgICBpZiAoa2V5X2ZyYW1lKSB7Ci0gICAg
ICAgICAgZ29mX2lkeF8gPSAwOwotICAgICAgICB9Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZp
Yy5WUDkucGljdHVyZV9pZCA9IHBpY3R1cmVfaWRfOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lm
aWMuVlA5LmludGVyX3BpY19wcmVkaWN0ZWQgPSBrZXlfZnJhbWUgPyBmYWxzZSA6IHRydWU7Ci0g
ICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkuZmxleGlibGVfbW9kZSA9IGZhbHNlOwotICAg
ICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNzX2RhdGFfYXZhaWxhYmxlID0ga2V5X2ZyYW1l
ID8gdHJ1ZSA6IGZhbHNlOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnRsMF9waWNf
aWR4ID0gdGwwX3BpY19pZHhfKys7Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkudGVt
cG9yYWxfaWR4ID0gd2VicnRjOjprTm9UZW1wb3JhbElkeDsKLSAgICAgICAgaW5mby5jb2RlY1Nw
ZWNpZmljLlZQOS5zcGF0aWFsX2lkeCA9IHdlYnJ0Yzo6a05vU3BhdGlhbElkeDsKLSAgICAgICAg
aW5mby5jb2RlY1NwZWNpZmljLlZQOS50ZW1wb3JhbF91cF9zd2l0Y2ggPSB0cnVlOwotICAgICAg
ICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LmludGVyX2xheWVyX3ByZWRpY3RlZCA9IGZhbHNlOwot
ICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LmdvZl9pZHggPQotICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8dWludDhfdD4oZ29mX2lkeF8rKyAlIGdvZl8ubnVtX2ZyYW1lc19pbl9nb2YpOwot
ICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5Lm51bV9zcGF0aWFsX2xheWVycyA9IDE7Ci0g
ICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkuc3BhdGlhbF9sYXllcl9yZXNvbHV0aW9uX3By
ZXNlbnQgPSBmYWxzZTsKLSAgICAgICAgaWYgKGluZm8uY29kZWNTcGVjaWZpYy5WUDkuc3NfZGF0
YV9hdmFpbGFibGUpIHsKLSAgICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNwYXRpYWxf
bGF5ZXJfcmVzb2x1dGlvbl9wcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAgICBpbmZvLmNvZGVjU3Bl
Y2lmaWMuVlA5LndpZHRoWzBdID0gd2lkdGhfOwotICAgICAgICAgIGluZm8uY29kZWNTcGVjaWZp
Yy5WUDkuaGVpZ2h0WzBdID0gaGVpZ2h0XzsKLSAgICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMu
VlA5LmdvZi5Db3B5R29mSW5mb1ZQOShnb2ZfKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAg
cGljdHVyZV9pZF8gPSAocGljdHVyZV9pZF8gKyAxKSAmIDB4N0ZGRjsKLQotICAgICAgLy8gR2Vu
ZXJhdGUgYSBoZWFkZXIgZGVzY3JpYmluZyBhIHNpbmdsZSBmcmFnbWVudC4KLSAgICAgIHdlYnJ0
Yzo6UlRQRnJhZ21lbnRhdGlvbkhlYWRlciBoZWFkZXI7Ci0gICAgICBtZW1zZXQoJmhlYWRlciwg
MCwgc2l6ZW9mKGhlYWRlcikpOwotICAgICAgaWYgKGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNW
UDggfHwgY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY1ZQOSkgewotICAgICAgICBoZWFkZXIuVmVy
aWZ5QW5kQWxsb2NhdGVGcmFnbWVudGF0aW9uSGVhZGVyKDEpOwotICAgICAgICBoZWFkZXIuZnJh
Z21lbnRhdGlvbk9mZnNldFswXSA9IDA7Ci0gICAgICAgIGhlYWRlci5mcmFnbWVudGF0aW9uTGVu
Z3RoWzBdID0gaW1hZ2UtPl9sZW5ndGg7Ci0gICAgICAgIGhlYWRlci5mcmFnbWVudGF0aW9uUGxU
eXBlWzBdID0gMDsKLSAgICAgICAgaGVhZGVyLmZyYWdtZW50YXRpb25UaW1lRGlmZlswXSA9IDA7
Ci0gICAgICAgIGlmIChjb2RlY1R5cGVfID09IGtWaWRlb0NvZGVjVlA4ICYmIHNjYWxlXykgewot
ICAgICAgICAgIGludCBxcDsKLSAgICAgICAgICBpZiAod2VicnRjOjp2cDg6OkdldFFwKHBheWxv
YWQsIHBheWxvYWRfc2l6ZSwgJnFwKSkgewotICAgICAgICAgICAgY3VycmVudF9hY2NfcXBfICs9
IHFwOwotICAgICAgICAgICAgcXVhbGl0eV9zY2FsZXJfLlJlcG9ydFFQKHFwKTsKLSAgICAgICAg
ICAgIGltYWdlLT5xcF8gPSBxcDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxz
ZSBpZiAoY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY0gyNjQpIHsKLSAgICAgICAgaWYgKHNjYWxl
XykgewotICAgICAgICAgIGgyNjRfYml0c3RyZWFtX3BhcnNlcl8uUGFyc2VCaXRzdHJlYW0ocGF5
bG9hZCwgcGF5bG9hZF9zaXplKTsKLSAgICAgICAgICBpbnQgcXA7Ci0gICAgICAgICAgaWYgKGgy
NjRfYml0c3RyZWFtX3BhcnNlcl8uR2V0TGFzdFNsaWNlUXAoJnFwKSkgewotICAgICAgICAgICAg
Y3VycmVudF9hY2NfcXBfICs9IHFwOwotICAgICAgICAgICAgcXVhbGl0eV9zY2FsZXJfLlJlcG9y
dFFQKHFwKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIEguMjY0IHNl
YXJjaCBmb3Igc3RhcnQgY29kZXMuCi0gICAgICAgIGludDMyX3Qgc2NQb3NpdGlvbnNbTUFYX05B
TFVTX1BFUkZSQU1FICsgMV0gPSB7fTsKLSAgICAgICAgaW50MzJfdCBzY1Bvc2l0aW9uc0xlbmd0
aCA9IDA7Ci0gICAgICAgIGludDMyX3Qgc2NQb3NpdGlvbiA9IDA7Ci0gICAgICAgIHdoaWxlIChz
Y1Bvc2l0aW9uc0xlbmd0aCA8IE1BWF9OQUxVU19QRVJGUkFNRSkgewotICAgICAgICAgIGludDMy
X3QgbmFsdVBvc2l0aW9uID0gTmV4dE5hbHVQb3NpdGlvbigKLSAgICAgICAgICAgICAgcGF5bG9h
ZCArIHNjUG9zaXRpb24sIHBheWxvYWRfc2l6ZSAtIHNjUG9zaXRpb24pOwotICAgICAgICAgIGlm
IChuYWx1UG9zaXRpb24gPCAwKSB7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgc2NQb3NpdGlvbiArPSBuYWx1UG9zaXRpb247Ci0gICAgICAgICAgc2NQb3NpdGlv
bnNbc2NQb3NpdGlvbnNMZW5ndGgrK10gPSBzY1Bvc2l0aW9uOwotICAgICAgICAgIHNjUG9zaXRp
b24gKz0gSDI2NF9TQ19MRU5HVEg7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNjUG9zaXRpb25z
TGVuZ3RoID09IDApIHsKLSAgICAgICAgICBBTE9HRSA8PCAiU3RhcnQgY29kZSBpcyBub3QgZm91
bmQhIjsKLSAgICAgICAgICBBTE9HRSA8PCAiRGF0YToiIDw8ICBpbWFnZS0+X2J1ZmZlclswXSA8
PCAiICIgPDwgaW1hZ2UtPl9idWZmZXJbMV0KLSAgICAgICAgICAgICAgPDwgIiAiIDw8IGltYWdl
LT5fYnVmZmVyWzJdIDw8ICIgIiA8PCBpbWFnZS0+X2J1ZmZlclszXQotICAgICAgICAgICAgICA8
PCAiICIgPDwgaW1hZ2UtPl9idWZmZXJbNF0gPDwgIiAiIDw8IGltYWdlLT5fYnVmZmVyWzVdOwot
ICAgICAgICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCh0cnVlIC8qIHJlc2V0X2lmX2Zh
bGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgc2NQb3NpdGlvbnNbc2NQb3NpdGlvbnNMZW5ndGhdID0gcGF5bG9hZF9zaXpl
OwotICAgICAgICBoZWFkZXIuVmVyaWZ5QW5kQWxsb2NhdGVGcmFnbWVudGF0aW9uSGVhZGVyKHNj
UG9zaXRpb25zTGVuZ3RoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY1Bvc2l0
aW9uc0xlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgaGVhZGVyLmZyYWdtZW50YXRpb25PZmZzZXRb
aV0gPSBzY1Bvc2l0aW9uc1tpXSArIEgyNjRfU0NfTEVOR1RIOwotICAgICAgICAgIGhlYWRlci5m
cmFnbWVudGF0aW9uTGVuZ3RoW2ldID0KLSAgICAgICAgICAgICAgc2NQb3NpdGlvbnNbaSArIDFd
IC0gaGVhZGVyLmZyYWdtZW50YXRpb25PZmZzZXRbaV07Ci0gICAgICAgICAgaGVhZGVyLmZyYWdt
ZW50YXRpb25QbFR5cGVbaV0gPSAwOwotICAgICAgICAgIGhlYWRlci5mcmFnbWVudGF0aW9uVGlt
ZURpZmZbaV0gPSAwOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGNhbGxiYWNrX3Jlc3Vs
dCA9IGNhbGxiYWNrXy0+T25FbmNvZGVkSW1hZ2UoKmltYWdlLCAmaW5mbywgJmhlYWRlcik7Ci0g
ICAgfQotCi0gICAgLy8gUmV0dXJuIG91dHB1dCBidWZmZXIgYmFjayB0byB0aGUgZW5jb2Rlci4K
LSAgICBib29sIHN1Y2Nlc3MgPSBqbmktPkNhbGxCb29sZWFuTWV0aG9kKCpqX21lZGlhX2NvZGVj
X3ZpZGVvX2VuY29kZXJfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgal9yZWxlYXNlX291dHB1dF9idWZmZXJfbWV0aG9kXywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWZmZXJfaW5kZXgpOwotICAgIGlmIChDaGVj
a0V4Y2VwdGlvbihqbmkpIHx8ICFzdWNjZXNzKSB7Ci0gICAgICBQcm9jZXNzSFdFcnJvck9uQ29k
ZWNUaHJlYWQodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUHJpbnQgcGVyIGZyYW1lIHN0YXRpc3Rp
Y3MuCi0gICAgaWYgKGVuY29kaW5nX3N0YXJ0X3RpbWVfbXMgPiAwKSB7Ci0gICAgICBmcmFtZV9l
bmNvZGluZ190aW1lX21zID0gcnRjOjpUaW1lTWlsbGlzKCkgLSBlbmNvZGluZ19zdGFydF90aW1l
X21zOwotICAgIH0KLSAgICBpZiAoZnJhbWVzX2VuY29kZWRfIDwga01heEVuY29kZWRMb2dGcmFt
ZXMpIHsKLSAgICAgIGludCBjdXJyZW50X2xhdGVuY3kgPQotICAgICAgICAgIChpbnQpKGxhc3Rf
aW5wdXRfdGltZXN0YW1wX21zXyAtIGxhc3Rfb3V0cHV0X3RpbWVzdGFtcF9tc18pOwotICAgICAg
QUxPR0QgPDwgIkVuY29kZXIgZnJhbWUgb3V0ICMgIiA8PCBmcmFtZXNfZW5jb2RlZF8gPDwKLSAg
ICAgICAgICAiLiBLZXk6ICIgPDwga2V5X2ZyYW1lIDw8Ci0gICAgICAgICAgIi4gU2l6ZTogIiA8
PCBwYXlsb2FkX3NpemUgPDwKLSAgICAgICAgICAiLiBUUzogIiA8PCAoaW50KWxhc3Rfb3V0cHV0
X3RpbWVzdGFtcF9tc18gPDwKLSAgICAgICAgICAiLiBMYXRlbmN5OiAiIDw8IGN1cnJlbnRfbGF0
ZW5jeSA8PAotICAgICAgICAgICIuIEVuY1RpbWU6ICIgPDwgZnJhbWVfZW5jb2RpbmdfdGltZV9t
czsKLSAgICB9Ci0KLSAgICAvLyBDYWxjdWxhdGUgYW5kIHByaW50IGVuY29kaW5nIHN0YXRpc3Rp
Y3MgLSBldmVyeSAzIHNlY29uZHMuCi0gICAgZnJhbWVzX2VuY29kZWRfKys7Ci0gICAgY3VycmVu
dF9mcmFtZXNfKys7Ci0gICAgY3VycmVudF9ieXRlc18gKz0gcGF5bG9hZF9zaXplOwotICAgIGN1
cnJlbnRfZW5jb2RpbmdfdGltZV9tc18gKz0gZnJhbWVfZW5jb2RpbmdfdGltZV9tczsKLSAgICBM
b2dTdGF0aXN0aWNzKGZhbHNlKTsKLQotICAgIC8vIEVycm9ycyBpbiBjYWxsYmFja19yZXN1bHQg
YXJlIGN1cnJlbnRseSBpZ25vcmVkLgotICAgIGlmIChjYWxsYmFja19yZXN1bHQuZHJvcF9uZXh0
X2ZyYW1lKQotICAgICAgZHJvcF9uZXh0X2lucHV0X2ZyYW1lXyA9IHRydWU7Ci0gIH0KLSAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6TG9nU3RhdGlzdGlj
cyhib29sIGZvcmNlX2xvZykgewotICBpbnQgc3RhdGlzdGljX3RpbWVfbXMgPSBydGM6OlRpbWVN
aWxsaXMoKSAtIHN0YXRfc3RhcnRfdGltZV9tc187Ci0gIGlmICgoc3RhdGlzdGljX3RpbWVfbXMg
Pj0ga01lZGlhQ29kZWNTdGF0aXN0aWNzSW50ZXJ2YWxNcyB8fCBmb3JjZV9sb2cpCi0gICAgICAm
JiBzdGF0aXN0aWNfdGltZV9tcyA+IDApIHsKLSAgICAvLyBQcmV2ZW50IGRpdmlzaW9uIGJ5IHpl
cm8uCi0gICAgaW50IGN1cnJlbnRfZnJhbWVzX2RpdmlkZXIgPSBjdXJyZW50X2ZyYW1lc18gIT0g
MCA/IGN1cnJlbnRfZnJhbWVzXyA6IDE7Ci0KLSAgICBpbnQgY3VycmVudF9iaXRyYXRlID0gY3Vy
cmVudF9ieXRlc18gKiA4IC8gc3RhdGlzdGljX3RpbWVfbXM7Ci0gICAgaW50IGN1cnJlbnRfZnBz
ID0KLSAgICAgICAgKGN1cnJlbnRfZnJhbWVzXyAqIDEwMDAgKyBzdGF0aXN0aWNfdGltZV9tcyAv
IDIpIC8gc3RhdGlzdGljX3RpbWVfbXM7Ci0gICAgQUxPR0QgPDwgIkVuY29kZWQgZnJhbWVzOiAi
IDw8IGZyYW1lc19lbmNvZGVkXyA8PAotICAgICAgICAiLiBCaXRyYXRlOiAiIDw8IGN1cnJlbnRf
Yml0cmF0ZSA8PAotICAgICAgICAiLCB0YXJnZXQ6ICIgPDwgbGFzdF9zZXRfYml0cmF0ZV9rYnBz
XyA8PCAiIGticHMiIDw8Ci0gICAgICAgICIsIGZwczogIiA8PCBjdXJyZW50X2ZwcyA8PAotICAg
ICAgICAiLCBlbmNUaW1lOiAiIDw8IChjdXJyZW50X2VuY29kaW5nX3RpbWVfbXNfIC8gY3VycmVu
dF9mcmFtZXNfZGl2aWRlcikgPDwKLSAgICAgICAgIi4gUVA6ICIgPDwgKGN1cnJlbnRfYWNjX3Fw
XyAvIGN1cnJlbnRfZnJhbWVzX2RpdmlkZXIpIDw8Ci0gICAgICAgICIgZm9yIGxhc3QgIiA8PCBz
dGF0aXN0aWNfdGltZV9tcyA8PCAiIG1zLiI7Ci0gICAgc3RhdF9zdGFydF90aW1lX21zXyA9IHJ0
Yzo6VGltZU1pbGxpcygpOwotICAgIGN1cnJlbnRfZnJhbWVzXyA9IDA7Ci0gICAgY3VycmVudF9i
eXRlc18gPSAwOwotICAgIGN1cnJlbnRfYWNjX3FwXyA9IDA7Ci0gICAgY3VycmVudF9lbmNvZGlu
Z190aW1lX21zXyA9IDA7Ci0gIH0KLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVy
OjpOZXh0TmFsdVBvc2l0aW9uKAotICAgIHVpbnQ4X3QgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9z
aXplKSB7Ci0gIGlmIChidWZmZXJfc2l6ZSA8IEgyNjRfU0NfTEVOR1RIKSB7Ci0gICAgcmV0dXJu
IC0xOwotICB9Ci0gIHVpbnQ4X3QgKmhlYWQgPSBidWZmZXI7Ci0gIC8vIFNldCBlbmQgYnVmZmVy
IHBvaW50ZXIgdG8gNCBieXRlcyBiZWZvcmUgYWN0dWFsIGJ1ZmZlciBlbmQgc28gd2UgY2FuCi0g
IC8vIGFjY2VzcyBoZWFkWzFdLCBoZWFkWzJdIGFuZCBoZWFkWzNdIGluIGEgbG9vcCB3aXRob3V0
IGJ1ZmZlciBvdmVycnVuLgotICB1aW50OF90ICplbmQgPSBidWZmZXIgKyBidWZmZXJfc2l6ZSAt
IEgyNjRfU0NfTEVOR1RIOwotCi0gIHdoaWxlIChoZWFkIDwgZW5kKSB7Ci0gICAgaWYgKGhlYWRb
MF0pIHsKLSAgICAgIGhlYWQrKzsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAoaGVh
ZFsxXSkgeyAvLyBnb3QgMDB4eAotICAgICAgaGVhZCArPSAyOwotICAgICAgY29udGludWU7Ci0g
ICAgfQotICAgIGlmIChoZWFkWzJdKSB7IC8vIGdvdCAwMDAweHgKLSAgICAgIGhlYWQgKz0gMzsK
LSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICBpZiAoaGVhZFszXSAhPSAweDAxKSB7IC8vIGdv
dCAwMDAwMDB4eAotICAgICAgaGVhZCsrOyAvLyB4eCAhPSAxLCBjb250aW51ZSBzZWFyY2hpbmcu
Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgcmV0dXJuIChpbnQzMl90KShoZWFkIC0gYnVm
ZmVyKTsKLSAgfQotICByZXR1cm4gLTE7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
cjo6T25Ecm9wcGVkRnJhbWUoKSB7Ci0gIC8vIE1ldGhvZHMgcnVubmluZyBvbiB0aGUgY29kZWMg
dGhyZWFkIHNob3VsZCBjYWxsIE9uRHJvcHBlZEZyYW1lT25Db2RlY1RocmVhZAotICAvLyBkaXJl
Y3RseS4KLSAgUlRDX0RDSEVDSyghY29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7Ci0gIGNvZGVjX3RocmVhZF8tPkludm9rZTx2b2lkPigKLSAgICAgIFJUQ19GUk9N
X0hFUkUsCi0gICAgICBCaW5kKCZNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpPbkRyb3BwZWRGcmFt
ZU9uQ29kZWNUaHJlYWQsIHRoaXMpKTsKLX0KLQotdm9pZCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVy
OjpPbkRyb3BwZWRGcmFtZU9uQ29kZWNUaHJlYWQoKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhy
ZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIC8vIFJlcG9ydCBkcm9wcGVk
IGZyYW1lIHRvIHF1YWxpdHlfc2NhbGVyXy4KLSAgaWYgKHNjYWxlXykKLSAgICBxdWFsaXR5X3Nj
YWxlcl8uUmVwb3J0RHJvcHBlZEZyYW1lKCk7Ci19Ci0KLWNvbnN0IGNoYXIqIE1lZGlhQ29kZWNW
aWRlb0VuY29kZXI6OkltcGxlbWVudGF0aW9uTmFtZSgpIGNvbnN0IHsKLSAgcmV0dXJuICJNZWRp
YUNvZGVjIjsKLX0KLQotTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3Rvcnk6Ok1lZGlhQ29kZWNW
aWRlb0VuY29kZXJGYWN0b3J5KCkKLSAgICA6IGVnbF9jb250ZXh0XyhudWxscHRyKSB7Ci0gIEpO
SUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2Fs
UmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGpjbGFzcyBqX2VuY29kZXJfY2xhc3Mg
PSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyIik7Ci0g
IHN1cHBvcnRlZF9jb2RlY3NfLmNsZWFyKCk7Ci0KLSAgYm9vbCBpc192cDhfaHdfc3VwcG9ydGVk
ID0gam5pLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZCgKLSAgICAgIGpfZW5jb2Rlcl9jbGFzcywK
LSAgICAgIEdldFN0YXRpY01ldGhvZElEKGpuaSwgal9lbmNvZGVyX2NsYXNzLCAiaXNWcDhId1N1
cHBvcnRlZCIsICIoKVoiKSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpOwotICBpZiAoaXNfdnA4
X2h3X3N1cHBvcnRlZCkgewotICAgIEFMT0dEIDw8ICJWUDggSFcgRW5jb2RlciBzdXBwb3J0ZWQu
IjsKLSAgICBzdXBwb3J0ZWRfY29kZWNzXy5wdXNoX2JhY2soY3JpY2tldDo6VmlkZW9Db2RlYygi
VlA4IikpOwotICB9Ci0KLSAgYm9vbCBpc192cDlfaHdfc3VwcG9ydGVkID0gam5pLT5DYWxsU3Rh
dGljQm9vbGVhbk1ldGhvZCgKLSAgICAgIGpfZW5jb2Rlcl9jbGFzcywKLSAgICAgIEdldFN0YXRp
Y01ldGhvZElEKGpuaSwgal9lbmNvZGVyX2NsYXNzLCAiaXNWcDlId1N1cHBvcnRlZCIsICIoKVoi
KSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpOwotICBpZiAoaXNfdnA5X2h3X3N1cHBvcnRlZCkg
ewotICAgIEFMT0dEIDw8ICJWUDkgSFcgRW5jb2RlciBzdXBwb3J0ZWQuIjsKLSAgICBzdXBwb3J0
ZWRfY29kZWNzXy5wdXNoX2JhY2soY3JpY2tldDo6VmlkZW9Db2RlYygiVlA5IikpOwotICB9Ci0K
LSAgYm9vbCBpc19oMjY0X2h3X3N1cHBvcnRlZCA9IGpuaS0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRo
b2QoCi0gICAgICBqX2VuY29kZXJfY2xhc3MsCi0gICAgICBHZXRTdGF0aWNNZXRob2RJRChqbmks
IGpfZW5jb2Rlcl9jbGFzcywgImlzSDI2NEh3U3VwcG9ydGVkIiwgIigpWiIpKTsKLSAgQ0hFQ0tf
RVhDRVBUSU9OKGpuaSk7Ci0gIGlmIChpc19oMjY0X2h3X3N1cHBvcnRlZCkgewotICAgIEFMT0dE
IDw8ICJILjI2NCBIVyBFbmNvZGVyIHN1cHBvcnRlZC4iOwotICAgIHN1cHBvcnRlZF9jb2RlY3Nf
LnB1c2hfYmFjayhjcmlja2V0OjpWaWRlb0NvZGVjKCJIMjY0IikpOwotICB9Ci19Ci0KLU1lZGlh
Q29kZWNWaWRlb0VuY29kZXJGYWN0b3J5Ojp+TWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3Rvcnko
KSB7Ci0gIEFMT0dEIDw8ICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeSBkdG9yIjsKLSAg
aWYgKGVnbF9jb250ZXh0XykgewotICAgIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVh
ZElmTmVlZGVkKCk7Ci0gICAgam5pLT5EZWxldGVHbG9iYWxSZWYoZWdsX2NvbnRleHRfKTsKLSAg
fQotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0b3J5OjpTZXRFR0xDb250ZXh0
KAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGVnbF9jb250ZXh0KSB7Ci0gIEFMT0dEIDw8ICJN
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeTo6U2V0RUdMQ29udGV4dCI7Ci0gIGlmIChlZ2xf
Y29udGV4dF8pIHsKLSAgICBqbmktPkRlbGV0ZUdsb2JhbFJlZihlZ2xfY29udGV4dF8pOwotICAg
IGVnbF9jb250ZXh0XyA9IG51bGxwdHI7Ci0gIH0KLSAgZWdsX2NvbnRleHRfID0gam5pLT5OZXdH
bG9iYWxSZWYoZWdsX2NvbnRleHQpOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAg
IEFMT0dFIDw8ICJlcnJvciBjYWxsaW5nIE5ld0dsb2JhbFJlZiBmb3IgRUdMIENvbnRleHQuIjsK
LSAgfQotfQotCi13ZWJydGM6OlZpZGVvRW5jb2RlciogTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZh
Y3Rvcnk6OkNyZWF0ZVZpZGVvRW5jb2RlcigKLSAgICBjb25zdCBjcmlja2V0OjpWaWRlb0NvZGVj
JiBjb2RlYykgewotICBpZiAoc3VwcG9ydGVkX2NvZGVjc18uZW1wdHkoKSkgewotICAgIEFMT0dX
IDw8ICJObyBIVyB2aWRlbyBlbmNvZGVyIGZvciBjb2RlYyAiIDw8IGNvZGVjLm5hbWU7Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgaWYgKEZpbmRNYXRjaGluZ0NvZGVjKHN1cHBvcnRlZF9j
b2RlY3NfLCBjb2RlYykpIHsKLSAgICBBTE9HRCA8PCAiQ3JlYXRlIEhXIHZpZGVvIGVuY29kZXIg
Zm9yICIgPDwgY29kZWMubmFtZTsKLSAgICBjb25zdCBWaWRlb0NvZGVjVHlwZSB0eXBlID0gY3Jp
Y2tldDo6Q29kZWNUeXBlRnJvbU5hbWUoY29kZWMubmFtZSk7Ci0gICAgcmV0dXJuIG5ldyBNZWRp
YUNvZGVjVmlkZW9FbmNvZGVyKEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpLCB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZ2xfY29udGV4dF8pOwotICB9
Ci0gIEFMT0dXIDw8ICJDYW4gbm90IGZpbmQgSFcgdmlkZW8gZW5jb2RlciBmb3IgdHlwZSAiIDw8
IGNvZGVjLm5hbWU7Ci0gIHJldHVybiBudWxscHRyOwotfQotCi1jb25zdCBzdGQ6OnZlY3Rvcjxj
cmlja2V0OjpWaWRlb0NvZGVjPiYKLU1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0b3J5OjpzdXBw
b3J0ZWRfY29kZWNzKCkgY29uc3QgewotICByZXR1cm4gc3VwcG9ydGVkX2NvZGVjc187Ci19Ci0K
LXZvaWQgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3Rvcnk6OkRlc3Ryb3lWaWRlb0VuY29kZXIo
Ci0gICAgd2VicnRjOjpWaWRlb0VuY29kZXIqIGVuY29kZXIpIHsKLSAgQUxPR0QgPDwgIkRlc3Ry
b3kgdmlkZW8gZW5jb2Rlci4iOwotICBkZWxldGUgZW5jb2RlcjsKLX0KLQotfSAgLy8gbmFtZXNw
YWNlIHdlYnJ0Y19qbmkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFlbmNvZGVyX2puaS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2puaS9hbmRyb2lkbWVkaWFlbmNvZGVyX2puaS5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
YW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDQ5ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lE
TUVESUFFTkNPREVSX0pOSV9IXwotI2RlZmluZSBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURN
RURJQUVOQ09ERVJfSk5JX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJ3ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAid2VicnRjL21lZGlh
L2VuZ2luZS93ZWJydGN2aWRlb2VuY29kZXJmYWN0b3J5LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGNf
am5pIHsKLQotLy8gSW1wbGVtZW50YXRpb24gb2YgQW5kcm9pZCBNZWRpYUNvZGVjIGJhc2VkIGVu
Y29kZXIgZmFjdG9yeS4KLWNsYXNzIE1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0b3J5Ci0gICAg
OiBwdWJsaWMgY3JpY2tldDo6V2ViUnRjVmlkZW9FbmNvZGVyRmFjdG9yeSB7Ci0gcHVibGljOgot
ICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeSgpOwotICB2aXJ0dWFsIH5NZWRpYUNvZGVj
VmlkZW9FbmNvZGVyRmFjdG9yeSgpOwotCi0gIHZvaWQgU2V0RUdMQ29udGV4dChKTklFbnYqIGpu
aSwgam9iamVjdCBlZ2xfY29udGV4dCk7Ci0KLSAgLy8gV2ViUnRjVmlkZW9FbmNvZGVyRmFjdG9y
eSBpbXBsZW1lbnRhdGlvbi4KLSAgd2VicnRjOjpWaWRlb0VuY29kZXIqIENyZWF0ZVZpZGVvRW5j
b2RlcigKLSAgICAgIGNvbnN0IGNyaWNrZXQ6OlZpZGVvQ29kZWMmIGNvZGVjKSBvdmVycmlkZTsK
LSAgY29uc3Qgc3RkOjp2ZWN0b3I8Y3JpY2tldDo6VmlkZW9Db2RlYz4mIHN1cHBvcnRlZF9jb2Rl
Y3MoKSBjb25zdCBvdmVycmlkZTsKLSAgdm9pZCBEZXN0cm95VmlkZW9FbmNvZGVyKHdlYnJ0Yzo6
VmlkZW9FbmNvZGVyKiBlbmNvZGVyKSBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0gIC8vIERpc2Fi
bGUgb3ZlcmxvYWRlZCB2aXJ0dWFsIGZ1bmN0aW9uIHdhcm5pbmcuIFRPRE8obWFnamVkKTogUmVt
b3ZlIG9uY2UKLSAgLy8gaHR0cDovL2NyYnVnL3dlYnJ0Yy82NDAyIGlzIGZpeGVkLgotICB1c2lu
ZyBjcmlja2V0OjpXZWJSdGNWaWRlb0VuY29kZXJGYWN0b3J5OjpDcmVhdGVWaWRlb0VuY29kZXI7
Ci0KLSAgam9iamVjdCBlZ2xfY29udGV4dF87Ci0KLSAgLy8gRW1wdHkgaWYgcGxhdGZvcm0gc3Vw
cG9ydCBpcyBsYWNraW5nLCBjb25zdCBhZnRlciBjdG9yIHJldHVybnMuCi0gIHN0ZDo6dmVjdG9y
PGNyaWNrZXQ6OlZpZGVvQ29kZWM+IHN1cHBvcnRlZF9jb2RlY3NfOwotfTsKLQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2VuZGlmICAvLyBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJP
SURNRURJQUVOQ09ERVJfSk5JX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1ldHJpY3Nfam5pLmNjCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2puaS9hbmRyb2lkbWV0cmljc19qbmkuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9h
bmRyb2lkbWV0cmljc19qbmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw4NCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8bWFwPgotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2lu
Y2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAi
d2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFuZGxlX2ltcGwuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvbWV0cmljcy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9zeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZS9tZXRyaWNzX2RlZmF1bHQuaCIKLQotLy8gRW5hYmxl
cyBjb2xsZWN0aW9uIG9mIG5hdGl2ZSBoaXN0b2dyYW1zIGFuZCBjcmVhdGluZyB0aGVtLgotbmFt
ZXNwYWNlIHdlYnJ0Y19qbmkgewotCi1KT1codm9pZCwgTWV0cmljc19uYXRpdmVFbmFibGUpKEpO
SUVudiogam5pLCBqY2xhc3MpIHsKLSAgd2VicnRjOjptZXRyaWNzOjpFbmFibGUoKTsKLX0KLQot
Ly8gR2V0cyBhbmQgY2xlYXJzIG5hdGl2ZSBoaXN0b2dyYW1zLgotSk9XKGpvYmplY3QsIE1ldHJp
Y3NfbmF0aXZlR2V0QW5kUmVzZXQpKEpOSUVudiogam5pLCBqY2xhc3MpIHsKLSAgamNsYXNzIGpf
bWV0cmljc19jbGFzcyA9IEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL01ldHJpY3MiKTsKLSAg
am1ldGhvZElEIGpfYWRkID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9tZXRyaWNzX2NsYXNz
LCAiYWRkIiwKLSAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy93ZWJy
dGMvTWV0cmljcyRIaXN0b2dyYW1JbmZvOylWIik7Ci0gIGpjbGFzcyBqX2luZm9fY2xhc3MgPSBG
aW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZXRyaWNzJEhpc3RvZ3JhbUluZm8iKTsKLSAgam1l
dGhvZElEIGpfYWRkX3NhbXBsZSA9IEdldE1ldGhvZElEKGpuaSwgal9pbmZvX2NsYXNzLCAiYWRk
U2FtcGxlIiwgIihJSSlWIik7Ci0KLSAgLy8gQ3JlYXRlIHxNZXRyaWNzfC4KLSAgam9iamVjdCBq
X21ldHJpY3MgPSBqbmktPk5ld09iamVjdCgKLSAgICAgIGpfbWV0cmljc19jbGFzcywgR2V0TWV0
aG9kSUQoam5pLCBqX21ldHJpY3NfY2xhc3MsICI8aW5pdD4iLCAiKClWIikpOwotCi0gIHN0ZDo6
bWFwPHN0ZDo6c3RyaW5nLCBzdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjptZXRyaWNzOjpTYW1wbGVJ
bmZvPj4KLSAgICAgIGhpc3RvZ3JhbXM7Ci0gIHdlYnJ0Yzo6bWV0cmljczo6R2V0QW5kUmVzZXQo
Jmhpc3RvZ3JhbXMpOwotICBmb3IgKGNvbnN0IGF1dG8mIGt2IDogaGlzdG9ncmFtcykgewotICAg
IC8vIENyZWF0ZSBhbmQgYWRkIHNhbXBsZXMgdG8gfEhpc3RvZ3JhbUluZm98LgotICAgIGpvYmpl
Y3Qgal9pbmZvID0gam5pLT5OZXdPYmplY3QoCi0gICAgICAgIGpfaW5mb19jbGFzcywgR2V0TWV0
aG9kSUQoam5pLCBqX2luZm9fY2xhc3MsICI8aW5pdD4iLCAiKElJSSlWIiksCi0gICAgICAgIGt2
LnNlY29uZC0+bWluLCBrdi5zZWNvbmQtPm1heCwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50Pihr
di5zZWNvbmQtPmJ1Y2tldF9jb3VudCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgc2FtcGxlIDog
a3Yuc2Vjb25kLT5zYW1wbGVzKSB7Ci0gICAgICBqbmktPkNhbGxWb2lkTWV0aG9kKGpfaW5mbywg
al9hZGRfc2FtcGxlLCBzYW1wbGUuZmlyc3QsIHNhbXBsZS5zZWNvbmQpOwotICAgIH0KLSAgICAv
LyBBZGQgfEhpc3RvZ3JhbUluZm98IHRvIHxNZXRyaWNzfC4KLSAgICBqc3RyaW5nIGpfbmFtZSA9
IGpuaS0+TmV3U3RyaW5nVVRGKGt2LmZpcnN0LmNfc3RyKCkpOwotICAgIGpuaS0+Q2FsbFZvaWRN
ZXRob2Qoal9tZXRyaWNzLCBqX2FkZCwgal9uYW1lLCBqX2luZm8pOwotICAgIGpuaS0+RGVsZXRl
TG9jYWxSZWYoal9uYW1lKTsKLSAgICBqbmktPkRlbGV0ZUxvY2FsUmVmKGpfaW5mbyk7Ci0gIH0K
LSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSk7Ci0gIHJldHVybiBqX21ldHJpY3M7Ci19Ci0KLUpPVyhq
bG9uZywgTWV0cmljc18wMDAyNEhpc3RvZ3JhbV9uYXRpdmVDcmVhdGVDb3VudHMpCi0oSk5JRW52
KiBqbmksIGpjbGFzcywganN0cmluZyBqX25hbWUsIGppbnQgbWluLCBqaW50IG1heCwgamludCBi
dWNrZXRzKSB7Ci0gIHN0ZDo6c3RyaW5nIG5hbWUgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX25h
bWUpOwotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcigKLSAgICAgIHdlYnJ0Yzo6bWV0cmljczo6
SGlzdG9ncmFtRmFjdG9yeUdldENvdW50cyhuYW1lLCBtaW4sIG1heCwgYnVja2V0cykpOwotfQot
Ci1KT1coamxvbmcsIE1ldHJpY3NfMDAwMjRIaXN0b2dyYW1fbmF0aXZlQ3JlYXRlRW51bWVyYXRp
b24pCi0oSk5JRW52KiBqbmksIGpjbGFzcywganN0cmluZyBqX25hbWUsIGppbnQgbWF4KSB7Ci0g
IHN0ZDo6c3RyaW5nIG5hbWUgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX25hbWUpOwotICByZXR1
cm4gamxvbmdGcm9tUG9pbnRlcigKLSAgICAgIHdlYnJ0Yzo6bWV0cmljczo6SGlzdG9ncmFtRmFj
dG9yeUdldEVudW1lcmF0aW9uKG5hbWUsIG1heCkpOwotfQotCi1KT1codm9pZCwgTWV0cmljc18w
MDAyNEhpc3RvZ3JhbV9uYXRpdmVBZGRTYW1wbGUpCi0oSk5JRW52KiBqbmksIGpjbGFzcywgamxv
bmcgaGlzdG9ncmFtLCBqaW50IHNhbXBsZSkgewotICBpZiAoaGlzdG9ncmFtKSB7Ci0gICAgSGlz
dG9ncmFtQWRkKHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjptZXRyaWNzOjpIaXN0b2dyYW0qPiho
aXN0b2dyYW0pLAotICAgICAgICAgICAgICAgICBzYW1wbGUpOwotICB9Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGNfam5pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG5ldHdvcmttb25pdG9yX2puaS5jYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvYW5kcm9pZG5ldHdvcmttb25pdG9yX2puaS5jYwkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvam5pL2FuZHJvaWRuZXR3b3JrbW9uaXRvcl9qbmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAt
MSw0MzUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkv
YW5kcm9pZC9qbmkvYW5kcm9pZG5ldHdvcmttb25pdG9yX2puaS5oIgotCi0jaW5jbHVkZSA8ZGxm
Y24uaD4KLS8vIFRoaXMgd2FzIGFkZGVkIGluIExvbGxpcG9wIHRvIGRsZmNuLmgKLSNkZWZpbmUg
UlRMRF9OT0xPQUQgNAotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3Jl
ZmVyZW5jZWhvbGRlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hl
bHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAid2VicnRj
L2Jhc2UvY29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvaXBhZGRyZXNzLmgiCi0KLW5h
bWVzcGFjZSB3ZWJydGNfam5pIHsKLQotZW51bSBBbmRyb2lkU2RrVmVyc2lvbiB7Ci0gIFNES19W
RVJTSU9OX0xPTExJUE9QID0gMjEsCi0gIFNES19WRVJTSU9OX01BUlNITUFMTE9XID0gMjMKLX07
Ci0KLWpvYmplY3QgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjphcHBsaWNhdGlvbl9jb250ZXh0XyA9
IG51bGxwdHI7Ci1pbnQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjphbmRyb2lkX3Nka19pbnRfID0g
MDsKLQotc3RhdGljIE5ldHdvcmtUeXBlIEdldE5ldHdvcmtUeXBlRnJvbUphdmEoSk5JRW52KiBq
bmksIGpvYmplY3Qgal9uZXR3b3JrX3R5cGUpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9uYW1lID0K
LSAgICAgIEdldEphdmFFbnVtTmFtZShqbmksICJvcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0
b0RldGVjdCRDb25uZWN0aW9uVHlwZSIsCi0gICAgICAgICAgICAgICAgICAgICAgal9uZXR3b3Jr
X3R5cGUpOwotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9OX1VOS05PV04iKSB7Ci0gICAg
cmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLX1VOS05PV047Ci0gIH0KLSAgaWYgKGVudW1fbmFt
ZSA9PSAiQ09OTkVDVElPTl9FVEhFUk5FVCIpIHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5F
VFdPUktfRVRIRVJORVQ7Ci0gIH0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl9XSUZJ
IikgewotICAgIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS19XSUZJOwotICB9Ci0gIGlmIChl
bnVtX25hbWUgPT0gIkNPTk5FQ1RJT05fNEciKSB7Ci0gICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpO
RVRXT1JLXzRHOwotICB9Ci0gIGlmIChlbnVtX25hbWUgPT0gIkNPTk5FQ1RJT05fM0ciKSB7Ci0g
ICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLXzNHOwotICB9Ci0gIGlmIChlbnVtX25hbWUg
PT0gIkNPTk5FQ1RJT05fMkciKSB7Ci0gICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLXzJH
OwotICB9Ci0gIGlmIChlbnVtX25hbWUgPT0gIkNPTk5FQ1RJT05fVU5LTk9XTl9DRUxMVUxBUiIp
IHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktfVU5LTk9XTl9DRUxMVUxBUjsKLSAg
fQotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9OX0JMVUVUT09USCIpIHsKLSAgICByZXR1
cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktfQkxVRVRPT1RIOwotICB9Ci0gIGlmIChlbnVtX25hbWUg
PT0gIkNPTk5FQ1RJT05fTk9ORSIpIHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktf
Tk9ORTsKLSAgfQotICBBU1NFUlQoZmFsc2UpOwotICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdP
UktfVU5LTk9XTjsKLX0KLQotc3RhdGljIHJ0Yzo6QWRhcHRlclR5cGUgQWRhcHRlclR5cGVGcm9t
TmV0d29ya1R5cGUoTmV0d29ya1R5cGUgbmV0d29ya190eXBlKSB7Ci0gIHN3aXRjaCAobmV0d29y
a190eXBlKSB7Ci0gICAgY2FzZSBORVRXT1JLX1VOS05PV046Ci0gICAgICByZXR1cm4gcnRjOjpB
REFQVEVSX1RZUEVfVU5LTk9XTjsKLSAgICBjYXNlIE5FVFdPUktfRVRIRVJORVQ6Ci0gICAgICBy
ZXR1cm4gcnRjOjpBREFQVEVSX1RZUEVfRVRIRVJORVQ7Ci0gICAgY2FzZSBORVRXT1JLX1dJRkk6
Ci0gICAgICByZXR1cm4gcnRjOjpBREFQVEVSX1RZUEVfV0lGSTsKLSAgICBjYXNlIE5FVFdPUktf
NEc6Ci0gICAgY2FzZSBORVRXT1JLXzNHOgotICAgIGNhc2UgTkVUV09SS18yRzoKLSAgICBjYXNl
IE5FVFdPUktfVU5LTk9XTl9DRUxMVUxBUjoKLSAgICAgIHJldHVybiBydGM6OkFEQVBURVJfVFlQ
RV9DRUxMVUxBUjsKLSAgICBjYXNlIE5FVFdPUktfQkxVRVRPT1RIOgotICAgICAgLy8gVGhlcmUg
aXMgbm8gY29ycmVzcG9uZGluZyBtYXBwaW5nIGZvciBibHVldG9vdGggbmV0d29ya3MuCi0gICAg
ICAvLyBNYXAgaXQgdG8gVlBOIGZvciBub3cuCi0gICAgICByZXR1cm4gcnRjOjpBREFQVEVSX1RZ
UEVfVlBOOwotICAgIGRlZmF1bHQ6Ci0gICAgICBSVENfRENIRUNLKGZhbHNlKSA8PCAiSW52YWxp
ZCBuZXR3b3JrIHR5cGUgIiA8PCBuZXR3b3JrX3R5cGU7Ci0gICAgICByZXR1cm4gcnRjOjpBREFQ
VEVSX1RZUEVfVU5LTk9XTjsKLSAgfQotfQotCi1zdGF0aWMgcnRjOjpJUEFkZHJlc3MgR2V0SVBB
ZGRyZXNzRnJvbUphdmEoSk5JRW52KiBqbmksIGpvYmplY3Qgal9pcF9hZGRyZXNzKSB7Ci0gIGpj
bGFzcyBqX2lwX2FkZHJlc3NfY2xhc3MgPSBHZXRPYmplY3RDbGFzcyhqbmksIGpfaXBfYWRkcmVz
cyk7Ci0gIGpmaWVsZElEIGpfYWRkcmVzc19pZCA9IEdldEZpZWxkSUQoam5pLCBqX2lwX2FkZHJl
c3NfY2xhc3MsICJhZGRyZXNzIiwgIltCIik7Ci0gIGpieXRlQXJyYXkgal9hZGRyZXNzZXMgPQot
ICAgICAgc3RhdGljX2Nhc3Q8amJ5dGVBcnJheT4oR2V0T2JqZWN0RmllbGQoam5pLCBqX2lwX2Fk
ZHJlc3MsIGpfYWRkcmVzc19pZCkpOwotICBzaXplX3QgYWRkcmVzc19sZW5ndGggPSBqbmktPkdl
dEFycmF5TGVuZ3RoKGpfYWRkcmVzc2VzKTsKLSAgamJ5dGUqIGFkZHJfYXJyYXkgPSBqbmktPkdl
dEJ5dGVBcnJheUVsZW1lbnRzKGpfYWRkcmVzc2VzLCBudWxscHRyKTsKLSAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSkgPDwgIkVycm9yIGR1cmluZyBHZXRJUEFkZHJlc3NGcm9tSmF2YSI7Ci0gIGlmIChh
ZGRyZXNzX2xlbmd0aCA9PSA0KSB7Ci0gICAgLy8gSVA0Ci0gICAgc3RydWN0IGluX2FkZHIgaXA0
X2FkZHI7Ci0gICAgbWVtY3B5KCZpcDRfYWRkci5zX2FkZHIsIGFkZHJfYXJyYXksIDQpOwotICAg
IGpuaS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGpfYWRkcmVzc2VzLCBhZGRyX2FycmF5LCBK
TklfQUJPUlQpOwotICAgIHJldHVybiBydGM6OklQQWRkcmVzcyhpcDRfYWRkcik7Ci0gIH0KLSAg
Ly8gSVA2Ci0gIFJUQ19DSEVDSyhhZGRyZXNzX2xlbmd0aCA9PSAxNik7Ci0gIHN0cnVjdCBpbjZf
YWRkciBpcDZfYWRkcjsKLSAgbWVtY3B5KGlwNl9hZGRyLnM2X2FkZHIsIGFkZHJfYXJyYXksIGFk
ZHJlc3NfbGVuZ3RoKTsKLSAgam5pLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoal9hZGRyZXNz
ZXMsIGFkZHJfYXJyYXksIEpOSV9BQk9SVCk7Ci0gIHJldHVybiBydGM6OklQQWRkcmVzcyhpcDZf
YWRkcik7Ci19Ci0KLXN0YXRpYyB2b2lkIEdldElQQWRkcmVzc2VzRnJvbUphdmEoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3RBcnJheSBqX2lw
X2FkZHJlc3NlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0
b3I8cnRjOjpJUEFkZHJlc3M+KiBpcF9hZGRyZXNzZXMpIHsKLSAgaXBfYWRkcmVzc2VzLT5jbGVh
cigpOwotICBzaXplX3QgbnVtX2FkZHJlc3NlcyA9IGpuaS0+R2V0QXJyYXlMZW5ndGgoal9pcF9h
ZGRyZXNzZXMpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiRXJyb3IgZHVyaW5nIEdldEFy
cmF5TGVuZ3RoIjsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fYWRkcmVzc2VzOyArK2kp
IHsKLSAgICBqb2JqZWN0IGpfaXBfYWRkcmVzcyA9IGpuaS0+R2V0T2JqZWN0QXJyYXlFbGVtZW50
KGpfaXBfYWRkcmVzc2VzLCBpKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiRXJyb3Ig
ZHVyaW5nIEdldE9iamVjdEFycmF5RWxlbWVudCI7Ci0gICAgcnRjOjpJUEFkZHJlc3MgaXAgPSBH
ZXRJUEFkZHJlc3NGcm9tSmF2YShqbmksIGpfaXBfYWRkcmVzcyk7Ci0gICAgaXBfYWRkcmVzc2Vz
LT5wdXNoX2JhY2soaXApOwotICB9Ci19Ci0KLXN0YXRpYyBOZXR3b3JrSW5mb3JtYXRpb24gR2V0
TmV0d29ya0luZm9ybWF0aW9uRnJvbUphdmEoCi0gICAgSk5JRW52KiBqbmksCi0gICAgam9iamVj
dCBqX25ldHdvcmtfaW5mbykgewotICBqY2xhc3Mgal9uZXR3b3JrX2luZm9fY2xhc3MgPSBHZXRP
YmplY3RDbGFzcyhqbmksIGpfbmV0d29ya19pbmZvKTsKLSAgamZpZWxkSUQgal9pbnRlcmZhY2Vf
bmFtZV9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9uZXR3b3JrX2luZm9fY2xhc3MsICJu
YW1lIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBqZmllbGRJRCBqX2hhbmRsZV9pZCA9IEdl
dEZpZWxkSUQoam5pLCBqX25ldHdvcmtfaW5mb19jbGFzcywgImhhbmRsZSIsICJKIik7Ci0gIGpm
aWVsZElEIGpfdHlwZV9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9uZXR3b3JrX2luZm9f
Y2xhc3MsICJ0eXBlIiwKLSAgICAgICAgICAgICAgICAgIkxvcmcvd2VicnRjL05ldHdvcmtNb25p
dG9yQXV0b0RldGVjdCRDb25uZWN0aW9uVHlwZTsiKTsKLSAgamZpZWxkSUQgal9pcF9hZGRyZXNz
ZXNfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfbmV0d29ya19pbmZvX2NsYXNzLCAiaXBB
ZGRyZXNzZXMiLAotICAgICAgICAgICAgICAgICAiW0xvcmcvd2VicnRjL05ldHdvcmtNb25pdG9y
QXV0b0RldGVjdCRJUEFkZHJlc3M7Iik7Ci0KLSAgTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtf
aW5mbzsKLSAgbmV0d29ya19pbmZvLmludGVyZmFjZV9uYW1lID0gSmF2YVRvU3RkU3RyaW5nKAot
ICAgICAgam5pLCBHZXRTdHJpbmdGaWVsZChqbmksIGpfbmV0d29ya19pbmZvLCBqX2ludGVyZmFj
ZV9uYW1lX2lkKSk7Ci0gIG5ldHdvcmtfaW5mby5oYW5kbGUgPSBzdGF0aWNfY2FzdDxOZXR3b3Jr
SGFuZGxlPigKLSAgICAgIEdldExvbmdGaWVsZChqbmksIGpfbmV0d29ya19pbmZvLCBqX2hhbmRs
ZV9pZCkpOwotICBuZXR3b3JrX2luZm8udHlwZSA9IEdldE5ldHdvcmtUeXBlRnJvbUphdmEoCi0g
ICAgICBqbmksIEdldE9iamVjdEZpZWxkKGpuaSwgal9uZXR3b3JrX2luZm8sIGpfdHlwZV9pZCkp
OwotICBqb2JqZWN0QXJyYXkgal9pcF9hZGRyZXNzZXMgPSBzdGF0aWNfY2FzdDxqb2JqZWN0QXJy
YXk+KAotICAgICAgR2V0T2JqZWN0RmllbGQoam5pLCBqX25ldHdvcmtfaW5mbywgal9pcF9hZGRy
ZXNzZXNfaWQpKTsKLSAgR2V0SVBBZGRyZXNzZXNGcm9tSmF2YShqbmksIGpfaXBfYWRkcmVzc2Vz
LCAmbmV0d29ya19pbmZvLmlwX2FkZHJlc3Nlcyk7Ci0gIHJldHVybiBuZXR3b3JrX2luZm87Ci19
Ci0KLXN0ZDo6c3RyaW5nIE5ldHdvcmtJbmZvcm1hdGlvbjo6VG9TdHJpbmcoKSBjb25zdCB7Ci0g
IHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICBzcyA8PCAiTmV0SW5mb1tuYW1lICIgPDwgaW50ZXJm
YWNlX25hbWUgPDwgIjsgaGFuZGxlICIgPDwgaGFuZGxlIDw8ICI7IHR5cGUgIgotICAgICA8PCB0
eXBlIDw8ICI7IGFkZHJlc3MiOwotICBmb3IgKGNvbnN0IHJ0Yzo6SVBBZGRyZXNzIGFkZHJlc3Mg
OiBpcF9hZGRyZXNzZXMpIHsKLSAgICBzcyA8PCAiICIgPDwgYWRkcmVzcy5Ub1N0cmluZygpOwot
ICB9Ci0gIHNzIDw8ICJdIjsKLSAgcmV0dXJuIHNzLnN0cigpOwotfQotCi0vLyBzdGF0aWMKLXZv
aWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpTZXRBbmRyb2lkQ29udGV4dChKTklFbnYqIGpuaSwg
am9iamVjdCBjb250ZXh0KSB7Ci0gIGlmIChhcHBsaWNhdGlvbl9jb250ZXh0XykgewotICAgIGpu
aS0+RGVsZXRlR2xvYmFsUmVmKGFwcGxpY2F0aW9uX2NvbnRleHRfKTsKLSAgfQotICBhcHBsaWNh
dGlvbl9jb250ZXh0XyA9IE5ld0dsb2JhbFJlZihqbmksIGNvbnRleHQpOwotfQotCi1BbmRyb2lk
TmV0d29ya01vbml0b3I6OkFuZHJvaWROZXR3b3JrTW9uaXRvcigpCi0gICAgOiBqX25ldHdvcmtf
bW9uaXRvcl9jbGFzc18oam5pKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlu
ZENsYXNzKGpuaSgpLCAib3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvciIpKSwKLSAgICAgIGpfbmV0
d29ya19tb25pdG9yXygKLSAgICAgICAgICBqbmkoKSwKLSAgICAgICAgICBqbmkoKS0+Q2FsbFN0
YXRpY09iamVjdE1ldGhvZCgKLSAgICAgICAgICAgICAgKmpfbmV0d29ya19tb25pdG9yX2NsYXNz
XywKLSAgICAgICAgICAgICAgR2V0U3RhdGljTWV0aG9kSUQoCi0gICAgICAgICAgICAgICAgICBq
bmkoKSwKLSAgICAgICAgICAgICAgICAgICpqX25ldHdvcmtfbW9uaXRvcl9jbGFzc18sCi0gICAg
ICAgICAgICAgICAgICAiaW5pdCIsCi0gICAgICAgICAgICAgICAgICAiKExhbmRyb2lkL2NvbnRl
bnQvQ29udGV4dDspTG9yZy93ZWJydGMvTmV0d29ya01vbml0b3I7IiksCi0gICAgICAgICAgICAg
IGFwcGxpY2F0aW9uX2NvbnRleHRfKSkgewotICBBU1NFUlQoYXBwbGljYXRpb25fY29udGV4dF8g
IT0gbnVsbHB0cik7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgIkVycm9yIGR1cmluZyBO
ZXR3b3JrTW9uaXRvci5pbml0IjsKLSAgaWYgKGFuZHJvaWRfc2RrX2ludF8gPD0gMCkgewotICAg
IGptZXRob2RJRCBtID0gR2V0U3RhdGljTWV0aG9kSUQoam5pKCksICpqX25ldHdvcmtfbW9uaXRv
cl9jbGFzc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYW5kcm9pZFNk
a0ludCIsICIoKUkiKTsKLSAgICBhbmRyb2lkX3Nka19pbnRfID0gam5pKCktPkNhbGxTdGF0aWNJ
bnRNZXRob2QoKmpfbmV0d29ya19tb25pdG9yX2NsYXNzXywgbSk7Ci0gICAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSgpKSA8PCAiRXJyb3IgZHVyaW5nIE5ldHdvcmtNb25pdG9yLmFuZHJvaWRTZGtJbnQi
OwotICB9Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpTdGFydCgpIHsKLSAgUlRD
X0NIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoc3Rh
cnRlZF8pIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgc3RhcnRlZF8gPSB0cnVlOwotCi0gIC8vIFRo
aXMgaXMga2luZCBvZiBtYWdpYyBiZWhhdmlvciwgYnV0IGRvaW5nIHRoaXMgYWxsb3dzIHRoZSBT
b2NrZXRTZXJ2ZXIgdG8KLSAgLy8gdXNlIHRoaXMgYXMgYSBOZXR3b3JrQmluZGVyIHRvIGJpbmQg
c29ja2V0cyBvbiBhIHBhcnRpY3VsYXIgbmV0d29yayB3aGVuCi0gIC8vIGl0IGNyZWF0ZXMgc29j
a2V0cy4KLSAgd29ya2VyX3RocmVhZCgpLT5zb2NrZXRzZXJ2ZXIoKS0+c2V0X25ldHdvcmtfYmlu
ZGVyKHRoaXMpOwotCi0gIGptZXRob2RJRCBtID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSgpLCAq
al9uZXR3b3JrX21vbml0b3JfY2xhc3NfLCAic3RhcnRNb25pdG9yaW5nIiwgIihKKVYiKTsKLSAg
am5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX25ldHdvcmtfbW9uaXRvcl8sIG0sIGpsb25nRnJvbVBv
aW50ZXIodGhpcykpOwotICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJFcnJvciBkdXJpbmcg
Q2FsbFZvaWRNZXRob2QiOwotfQotCi12b2lkIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6U3RvcCgp
IHsKLSAgUlRDX0NIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwot
ICBpZiAoIXN0YXJ0ZWRfKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHN0YXJ0ZWRfID0gZmFsc2U7
Ci0KLSAgLy8gT25jZSB0aGUgbmV0d29yayBtb25pdG9yIHN0b3BzLCBpdCB3aWxsIGNsZWFyIGFs
bCBuZXR3b3JrIGluZm9ybWF0aW9uIGFuZAotICAvLyBpdCB3b24ndCBmaW5kIHRoZSBuZXR3b3Jr
IGhhbmRsZSB0byBiaW5kIGFueXdheS4KLSAgaWYgKHdvcmtlcl90aHJlYWQoKS0+c29ja2V0c2Vy
dmVyKCktPm5ldHdvcmtfYmluZGVyKCkgPT0gdGhpcykgewotICAgIHdvcmtlcl90aHJlYWQoKS0+
c29ja2V0c2VydmVyKCktPnNldF9uZXR3b3JrX2JpbmRlcihudWxscHRyKTsKLSAgfQotCi0gIGpt
ZXRob2RJRCBtID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSgpLCAqal9uZXR3b3JrX21vbml0b3Jf
Y2xhc3NfLCAic3RvcE1vbml0b3JpbmciLCAiKEopViIpOwotICBqbmkoKS0+Q2FsbFZvaWRNZXRo
b2QoKmpfbmV0d29ya19tb25pdG9yXywgbSwgamxvbmdGcm9tUG9pbnRlcih0aGlzKSk7Ci0gIENI
RUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgIkVycm9yIGR1cmluZyBOZXR3b3JrTW9uaXRvci5zdG9w
TW9uaXRvcmluZyI7Ci0KLSAgbmV0d29ya19oYW5kbGVfYnlfYWRkcmVzc18uY2xlYXIoKTsKLSAg
bmV0d29ya19pbmZvX2J5X2hhbmRsZV8uY2xlYXIoKTsKLX0KLQotLy8gVGhlIGltcGxlbWVudGF0
aW9uIGlzIGxhcmdlbHkgdGFrZW4gZnJvbSBVRFBTb2NrZXRQb3NpeDo6QmluZFRvTmV0d29yayBp
bgotLy8gaHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvY2hyb21pdW0vc3JjL25ldC91ZHAvdWRwX3Nv
Y2tldF9wb3NpeC5jYwotaW50IEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6QmluZFNvY2tldFRvTmV0
d29yayhpbnQgc29ja2V0X2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBydGM6OklQQWRkcmVzcyYgYWRkcmVzcykgewotICBSVENfQ0hFQ0so
dGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIC8vIEFuZHJvaWQgcHJp
b3IgdG8gTG9sbGlwb3AgZGlkbid0IGhhdmUgc3VwcG9ydCBmb3IgYmluZGluZyBzb2NrZXRzIHRv
Ci0gIC8vIG5ldHdvcmtzLiBJbiB0aGF0IGNhc2UgaXQgc2hvdWxkIG5vdCBoYXZlIHJlYWNoZWQg
aGVyZSBiZWNhdXNlCi0gIC8vIHxuZXR3b3JrX2hhbmRsZV9ieV9hZGRyZXNzX3wgaXMgb25seSBw
b3B1bGF0ZWQgaW4gQW5kcm9pZCBMb2xsaXBvcAotICAvLyBhbmQgYWJvdmUuCi0gIGlmIChhbmRy
b2lkX3Nka19pbnRfIDwgU0RLX1ZFUlNJT05fTE9MTElQT1ApIHsKLSAgICBMT0coTFNfRVJST1Ip
IDw8ICJCaW5kU29ja2V0VG9OZXR3b3JrIGlzIG5vdCBzdXBwb3J0ZWQgaW4gQW5kcm9pZCBTREsg
IgotICAgICAgICAgICAgICAgICAgPDwgYW5kcm9pZF9zZGtfaW50XzsKLSAgICByZXR1cm4gcnRj
OjpORVRXT1JLX0JJTkRfTk9UX0lNUExFTUVOVEVEOwotICB9Ci0KLSAgYXV0byBpdGVyID0gbmV0
d29ya19oYW5kbGVfYnlfYWRkcmVzc18uZmluZChhZGRyZXNzKTsKLSAgaWYgKGl0ZXIgPT0gbmV0
d29ya19oYW5kbGVfYnlfYWRkcmVzc18uZW5kKCkpIHsKLSAgICByZXR1cm4gcnRjOjpORVRXT1JL
X0JJTkRfQUREUkVTU19OT1RfRk9VTkQ7Ci0gIH0KLSAgTmV0d29ya0hhbmRsZSBuZXR3b3JrX2hh
bmRsZSA9IGl0ZXItPnNlY29uZDsKLQotICBpbnQgcnYgPSAwOwotICBpZiAoYW5kcm9pZF9zZGtf
aW50XyA+PSBTREtfVkVSU0lPTl9NQVJTSE1BTExPVykgewotICAgIC8vIFNlZSBkZWNsYXJhdGlv
biBvZiBhbmRyb2lkX3NldHNvY2tuZXR3b3JrKCkgaGVyZToKLSAgICAvLyBodHRwOi8vYW5kcm9p
ZHhyZWYuY29tLzYuMC4wX3IxL3hyZWYvZGV2ZWxvcG1lbnQvbmRrL3BsYXRmb3Jtcy9hbmRyb2lk
LU0vaW5jbHVkZS9hbmRyb2lkL211bHRpbmV0d29yay5oIzY1Ci0gICAgLy8gRnVuY3Rpb24gY2Fu
bm90IGJlIGNhbGxlZCBkaXJlY3RseSBhcyBpdCB3aWxsIGNhdXNlIGFwcCB0byBmYWlsIHRvIGxv
YWQKLSAgICAvLyBvbiBwcmUtbWFyc2htYWxsb3cgZGV2aWNlcy4KLSAgICB0eXBlZGVmIGludCAo
Kk1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCkoTmV0d29ya0hhbmRsZSBuZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb2NrZXQp
OwotICAgIHN0YXRpYyBNYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQgbWFyc2htYWxsb3dT
ZXROZXR3b3JrRm9yU29ja2V0OwotICAgIC8vIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLCBidXQg
d2UgYXJlIHJ1bm5pbmcgdGhpcyBvbmx5IG9uIHRoZSB3b3JrZXIKLSAgICAvLyB0aHJlYWQuCi0g
ICAgaWYgKCFtYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQpIHsKLSAgICAgIGNvbnN0IHN0
ZDo6c3RyaW5nIGFuZHJvaWRfbmF0aXZlX2xpYl9wYXRoID0gImxpYmFuZHJvaWQuc28iOwotICAg
ICAgdm9pZCogbGliID0gZGxvcGVuKGFuZHJvaWRfbmF0aXZlX2xpYl9wYXRoLmNfc3RyKCksIFJU
TERfTk9XKTsKLSAgICAgIGlmIChsaWIgPT0gbnVsbHB0cikgewotICAgICAgICBMT0coTFNfRVJS
T1IpIDw8ICJMaWJyYXJ5ICIgPDwgYW5kcm9pZF9uYXRpdmVfbGliX3BhdGggPDwgIiBub3QgZm91
bmQhIjsKLSAgICAgICAgcmV0dXJuIHJ0Yzo6TkVUV09SS19CSU5EX05PVF9JTVBMRU1FTlRFRDsK
LSAgICAgIH0KLSAgICAgIG1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCA9Ci0gICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxNYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQ+KAotICAg
ICAgICAgICAgICBkbHN5bShsaWIsICJhbmRyb2lkX3NldHNvY2tuZXR3b3JrIikpOwotICAgIH0K
LSAgICBpZiAoIW1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCkgewotICAgICAgTE9HKExT
X0VSUk9SKSA8PCAiU3ltYm9sIG1hcnNobWFsbG93U2V0TmV0d29ya0ZvclNvY2tldCBpcyBub3Qg
Zm91bmQiOwotICAgICAgcmV0dXJuIHJ0Yzo6TkVUV09SS19CSU5EX05PVF9JTVBMRU1FTlRFRDsK
LSAgICB9Ci0gICAgcnYgPSBtYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQobmV0d29ya19o
YW5kbGUsIHNvY2tldF9mZCk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gTk9URTogVGhpcyByZWxpZXMg
b24gQW5kcm9pZCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBidXQgaXQgd29uJ3QgY2hhbmdlCi0g
ICAgLy8gYmVjYXVzZSBMb2xsaXBvcCBpcyBhbHJlYWR5IHJlbGVhc2VkLgotICAgIHR5cGVkZWYg
aW50ICgqTG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0KSh1bnNpZ25lZCBuZXQsIGludCBzb2Nr
ZXQpOwotICAgIHN0YXRpYyBMb2xsaXBvcFNldE5ldHdvcmtGb3JTb2NrZXQgbG9sbGlwb3BTZXRO
ZXR3b3JrRm9yU29ja2V0OwotICAgIC8vIFRoaXMgaXMgbm90IHRocmVhZHNhZmUsIGJ1dCB3ZSBh
cmUgcnVubmluZyB0aGlzIG9ubHkgb24gdGhlIHdvcmtlcgotICAgIC8vIHRocmVhZC4KLSAgICBp
ZiAoIWxvbGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldCkgewotICAgICAgLy8gQW5kcm9pZCdzIG5l
dGQgY2xpZW50IGxpYnJhcnkgc2hvdWxkIGFsd2F5cyBiZSBsb2FkZWQgaW4gb3VyIGFkZHJlc3MK
LSAgICAgIC8vIHNwYWNlIGFzIGl0IHNoaW1zIGxpYmMgZnVuY3Rpb25zIGxpa2UgY29ubmVjdCgp
LgotICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgbmV0X2xpYnJhcnlfcGF0aCA9ICJsaWJuZXRkX2Ns
aWVudC5zbyI7Ci0gICAgICAvLyBVc2UgUlRMRF9OT1cgdG8gbWF0Y2ggQW5kcm9pZCdzIHByaW9y
IGxvYWRpbmcgb2YgdGhlIGxpYnJhcnk6Ci0gICAgICAvLyBodHRwOi8vYW5kcm9pZHhyZWYuY29t
LzYuMC4wX3I1L3hyZWYvYmlvbmljL2xpYmMvYmlvbmljL05ldGRDbGllbnQuY3BwIzM3Ci0gICAg
ICAvLyBVc2UgUlRMRF9OT0xPQUQgdG8gYXNzZXJ0IHRoYXQgdGhlIGxpYnJhcnkgaXMgYWxyZWFk
eSBsb2FkZWQgYW5kCi0gICAgICAvLyBhdm9pZCBkb2luZyBhbnkgZGlzayBJTy4KLSAgICAgIHZv
aWQqIGxpYiA9IGRsb3BlbihuZXRfbGlicmFyeV9wYXRoLmNfc3RyKCksIFJUTERfTk9XIHwgUlRM
RF9OT0xPQUQpOwotICAgICAgaWYgKGxpYiA9PSBudWxscHRyKSB7Ci0gICAgICAgIExPRyhMU19F
UlJPUikgPDwgIkxpYnJhcnkgIiA8PCBuZXRfbGlicmFyeV9wYXRoIDw8ICIgbm90IGZvdW5kISI7
Ci0gICAgICAgIHJldHVybiBydGM6Ok5FVFdPUktfQklORF9OT1RfSU1QTEVNRU5URUQ7Ci0gICAg
ICB9Ci0gICAgICBsb2xsaXBvcFNldE5ldHdvcmtGb3JTb2NrZXQgPQotICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8TG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0PigKLSAgICAgICAgICAgICAg
ZGxzeW0obGliLCAic2V0TmV0d29ya0ZvclNvY2tldCIpKTsKLSAgICB9Ci0gICAgaWYgKCFsb2xs
aXBvcFNldE5ldHdvcmtGb3JTb2NrZXQpIHsKLSAgICAgIExPRyhMU19FUlJPUikgPDwgIlN5bWJv
bCBsb2xsaXBvcFNldE5ldHdvcmtGb3JTb2NrZXQgaXMgbm90IGZvdW5kICI7Ci0gICAgICByZXR1
cm4gcnRjOjpORVRXT1JLX0JJTkRfTk9UX0lNUExFTUVOVEVEOwotICAgIH0KLSAgICBydiA9IGxv
bGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldChuZXR3b3JrX2hhbmRsZSwgc29ja2V0X2ZkKTsKLSAg
fQotCi0gIC8vIElmIHxuZXR3b3JrfCBoYXMgc2luY2UgZGlzY29ubmVjdGVkLCB8cnZ8IHdpbGwg
YmUgRU5PTkVULiAgU3VyZmFjZSB0aGlzIGFzCi0gIC8vIEVSUl9ORVRXT1JLX0NIQU5HRUQsIHJh
dGhlciB0aGFuIE1hcFN5c3RlbUVycm9yKEVOT05FVCkgd2hpY2ggZ2l2ZXMgYmFjawotICAvLyB0
aGUgbGVzcyBkZXNjcmlwdGl2ZSBFUlJfRkFJTEVELgotICBpZiAocnYgPT0gMCkgewotICAgIHJl
dHVybiBydGM6Ok5FVFdPUktfQklORF9TVUNDRVNTOwotICB9Ci0gIGlmIChydiA9PSBFTk9ORVQp
IHsKLSAgICByZXR1cm4gcnRjOjpORVRXT1JLX0JJTkRfTkVUV09SS19DSEFOR0VEOwotICB9Ci0g
IHJldHVybiBydGM6Ok5FVFdPUktfQklORF9GQUlMVVJFOwotfQotCi12b2lkIEFuZHJvaWROZXR3
b3JrTW9uaXRvcjo6T25OZXR3b3JrQ29ubmVjdGVkKAotICAgIGNvbnN0IE5ldHdvcmtJbmZvcm1h
dGlvbiYgbmV0d29ya19pbmZvKSB7Ci0gIHdvcmtlcl90aHJlYWQoKS0+SW52b2tlPHZvaWQ+KAot
ICAgICAgUlRDX0ZST01fSEVSRSwgcnRjOjpCaW5kKCZBbmRyb2lkTmV0d29ya01vbml0b3I6Ok9u
TmV0d29ya0Nvbm5lY3RlZF93LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMs
IG5ldHdvcmtfaW5mbykpOwotICAvLyBGaXJlIFNpZ25hbE5ldHdvcmtzQ2hhbmdlZCB0byB1cGRh
dGUgdGhlIGxpc3Qgb2YgbmV0d29ya3MuCi0gIE9uTmV0d29ya3NDaGFuZ2VkKCk7Ci19Ci0KLXZv
aWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpPbk5ldHdvcmtDb25uZWN0ZWRfdygKLSAgICBjb25z
dCBOZXR3b3JrSW5mb3JtYXRpb24mIG5ldHdvcmtfaW5mbykgewotICBMT0coTFNfSU5GTykgPDwg
Ik5ldHdvcmsgY29ubmVjdGVkOiAiIDw8IG5ldHdvcmtfaW5mby5Ub1N0cmluZygpOwotICBhZGFw
dGVyX3R5cGVfYnlfbmFtZV9bbmV0d29ya19pbmZvLmludGVyZmFjZV9uYW1lXSA9Ci0gICAgICBB
ZGFwdGVyVHlwZUZyb21OZXR3b3JrVHlwZShuZXR3b3JrX2luZm8udHlwZSk7Ci0gIG5ldHdvcmtf
aW5mb19ieV9oYW5kbGVfW25ldHdvcmtfaW5mby5oYW5kbGVdID0gbmV0d29ya19pbmZvOwotICBm
b3IgKGNvbnN0IHJ0Yzo6SVBBZGRyZXNzJiBhZGRyZXNzIDogbmV0d29ya19pbmZvLmlwX2FkZHJl
c3NlcykgewotICAgIG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJlc3NfW2FkZHJlc3NdID0gbmV0d29y
a19pbmZvLmhhbmRsZTsKLSAgfQotfQotCi12b2lkIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6T25O
ZXR3b3JrRGlzY29ubmVjdGVkKE5ldHdvcmtIYW5kbGUgaGFuZGxlKSB7Ci0gIExPRyhMU19JTkZP
KSA8PCAiTmV0d29yayBkaXNjb25uZWN0ZWQgZm9yIGhhbmRsZSAiIDw8IGhhbmRsZTsKLSAgd29y
a2VyX3RocmVhZCgpLT5JbnZva2U8dm9pZD4oCi0gICAgICBSVENfRlJPTV9IRVJFLAotICAgICAg
cnRjOjpCaW5kKCZBbmRyb2lkTmV0d29ya01vbml0b3I6Ok9uTmV0d29ya0Rpc2Nvbm5lY3RlZF93
LCB0aGlzLCBoYW5kbGUpKTsKLX0KLQotdm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6Ok9uTmV0
d29ya0Rpc2Nvbm5lY3RlZF93KE5ldHdvcmtIYW5kbGUgaGFuZGxlKSB7Ci0gIGF1dG8gaXRlciA9
IG5ldHdvcmtfaW5mb19ieV9oYW5kbGVfLmZpbmQoaGFuZGxlKTsKLSAgaWYgKGl0ZXIgIT0gbmV0
d29ya19pbmZvX2J5X2hhbmRsZV8uZW5kKCkpIHsKLSAgICBmb3IgKGNvbnN0IHJ0Yzo6SVBBZGRy
ZXNzJiBhZGRyZXNzIDogaXRlci0+c2Vjb25kLmlwX2FkZHJlc3NlcykgewotICAgICAgbmV0d29y
a19oYW5kbGVfYnlfYWRkcmVzc18uZXJhc2UoYWRkcmVzcyk7Ci0gICAgfQotICAgIG5ldHdvcmtf
aW5mb19ieV9oYW5kbGVfLmVyYXNlKGl0ZXIpOwotICB9Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdv
cmtNb25pdG9yOjpTZXROZXR3b3JrSW5mb3MoCi0gICAgY29uc3Qgc3RkOjp2ZWN0b3I8TmV0d29y
a0luZm9ybWF0aW9uPiYgbmV0d29ya19pbmZvcykgewotICBSVENfQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJlc3Nf
LmNsZWFyKCk7Ci0gIG5ldHdvcmtfaW5mb19ieV9oYW5kbGVfLmNsZWFyKCk7Ci0gIExPRyhMU19J
TkZPKSA8PCAiQW5kcm9pZCBuZXR3b3JrIG1vbml0b3IgZm91bmQgIiA8PCBuZXR3b3JrX2luZm9z
LnNpemUoKQotICAgICAgICAgICAgICAgPDwgIiBuZXR3b3JrcyI7Ci0gIGZvciAoTmV0d29ya0lu
Zm9ybWF0aW9uIG5ldHdvcmsgOiBuZXR3b3JrX2luZm9zKSB7Ci0gICAgT25OZXR3b3JrQ29ubmVj
dGVkX3cobmV0d29yayk7Ci0gIH0KLX0KLQotcnRjOjpBZGFwdGVyVHlwZSBBbmRyb2lkTmV0d29y
a01vbml0b3I6OkdldEFkYXB0ZXJUeXBlKAotICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBpZl9uYW1l
KSB7Ci0gIGF1dG8gaXRlciA9IGFkYXB0ZXJfdHlwZV9ieV9uYW1lXy5maW5kKGlmX25hbWUpOwot
ICBydGM6OkFkYXB0ZXJUeXBlIHR5cGUgPSAoaXRlciA9PSBhZGFwdGVyX3R5cGVfYnlfbmFtZV8u
ZW5kKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHJ0Yzo6QURBUFRFUl9UWVBF
X1VOS05PV04KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaXRlci0+c2Vjb25kOwot
ICBpZiAodHlwZSA9PSBydGM6OkFEQVBURVJfVFlQRV9VTktOT1dOKSB7Ci0gICAgTE9HKExTX1dB
Uk5JTkcpIDw8ICJHZXQgYW4gdW5rbm93biB0eXBlIGZvciB0aGUgaW50ZXJmYWNlICIgPDwgaWZf
bmFtZTsKLSAgfQotICByZXR1cm4gdHlwZTsKLX0KLQotcnRjOjpOZXR3b3JrTW9uaXRvckludGVy
ZmFjZSoKLUFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3Rvcnk6OkNyZWF0ZU5ldHdvcmtNb25pdG9y
KCkgewotICByZXR1cm4gbmV3IEFuZHJvaWROZXR3b3JrTW9uaXRvcigpOwotfQotCi1KT1codm9p
ZCwgTmV0d29ya01vbml0b3JfbmF0aXZlTm90aWZ5Q29ubmVjdGlvblR5cGVDaGFuZ2VkKSgKLSAg
ICBKTklFbnYqIGpuaSwgam9iamVjdCBqX21vbml0b3IsIGpsb25nIGpfbmF0aXZlX21vbml0b3Ip
IHsKLSAgcnRjOjpOZXR3b3JrTW9uaXRvckludGVyZmFjZSogbmV0d29ya19tb25pdG9yID0KLSAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cnRjOjpOZXR3b3JrTW9uaXRvckludGVyZmFjZSo+KGpfbmF0
aXZlX21vbml0b3IpOwotICBuZXR3b3JrX21vbml0b3ItPk9uTmV0d29ya3NDaGFuZ2VkKCk7Ci19
Ci0KLUpPVyh2b2lkLCBOZXR3b3JrTW9uaXRvcl9uYXRpdmVOb3RpZnlPZkFjdGl2ZU5ldHdvcmtM
aXN0KSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX21vbml0b3IsIGpsb25nIGpfbmF0aXZl
X21vbml0b3IsCi0gICAgam9iamVjdEFycmF5IGpfbmV0d29ya19pbmZvcykgewotICBBbmRyb2lk
TmV0d29ya01vbml0b3IqIG5ldHdvcmtfbW9uaXRvciA9Ci0gICAgICByZWludGVycHJldF9jYXN0
PEFuZHJvaWROZXR3b3JrTW9uaXRvcio+KGpfbmF0aXZlX21vbml0b3IpOwotICBzdGQ6OnZlY3Rv
cjxOZXR3b3JrSW5mb3JtYXRpb24+IG5ldHdvcmtfaW5mb3M7Ci0gIHNpemVfdCBudW1fbmV0d29y
a3MgPSBqbmktPkdldEFycmF5TGVuZ3RoKGpfbmV0d29ya19pbmZvcyk7Ci0gIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtX25ldHdvcmtzOyArK2kpIHsKLSAgICBqb2JqZWN0IGpfbmV0d29ya19p
bmZvID0gam5pLT5HZXRPYmplY3RBcnJheUVsZW1lbnQoal9uZXR3b3JrX2luZm9zLCBpKTsKLSAg
ICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiRXJyb3IgZHVyaW5nIEdldE9iamVjdEFycmF5RWxl
bWVudCI7Ci0gICAgbmV0d29ya19pbmZvcy5wdXNoX2JhY2soR2V0TmV0d29ya0luZm9ybWF0aW9u
RnJvbUphdmEoam5pLCBqX25ldHdvcmtfaW5mbykpOwotICB9Ci0gIG5ldHdvcmtfbW9uaXRvci0+
U2V0TmV0d29ya0luZm9zKG5ldHdvcmtfaW5mb3MpOwotfQotCi1KT1codm9pZCwgTmV0d29ya01v
bml0b3JfbmF0aXZlTm90aWZ5T2ZOZXR3b3JrQ29ubmVjdCkoCi0gICAgSk5JRW52KiBqbmksIGpv
YmplY3Qgal9tb25pdG9yLCBqbG9uZyBqX25hdGl2ZV9tb25pdG9yLAotICAgIGpvYmplY3Qgal9u
ZXR3b3JrX2luZm8pIHsKLSAgQW5kcm9pZE5ldHdvcmtNb25pdG9yKiBuZXR3b3JrX21vbml0b3Ig
PQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxBbmRyb2lkTmV0d29ya01vbml0b3IqPihqX25hdGl2
ZV9tb25pdG9yKTsKLSAgTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtfaW5mbyA9Ci0gICAgICBH
ZXROZXR3b3JrSW5mb3JtYXRpb25Gcm9tSmF2YShqbmksIGpfbmV0d29ya19pbmZvKTsKLSAgbmV0
d29ya19tb25pdG9yLT5Pbk5ldHdvcmtDb25uZWN0ZWQobmV0d29ya19pbmZvKTsKLX0KLQotSk9X
KHZvaWQsIE5ldHdvcmtNb25pdG9yX25hdGl2ZU5vdGlmeU9mTmV0d29ya0Rpc2Nvbm5lY3QpKAot
ICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfbW9uaXRvciwgamxvbmcgal9uYXRpdmVfbW9uaXRv
ciwKLSAgICBqbG9uZyBuZXR3b3JrX2hhbmRsZSkgewotICBBbmRyb2lkTmV0d29ya01vbml0b3Iq
IG5ldHdvcmtfbW9uaXRvciA9Ci0gICAgICByZWludGVycHJldF9jYXN0PEFuZHJvaWROZXR3b3Jr
TW9uaXRvcio+KGpfbmF0aXZlX21vbml0b3IpOwotICBuZXR3b3JrX21vbml0b3ItPk9uTmV0d29y
a0Rpc2Nvbm5lY3RlZCgKLSAgICAgIHN0YXRpY19jYXN0PE5ldHdvcmtIYW5kbGU+KG5ldHdvcmtf
aGFuZGxlKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9p
ZG5ldHdvcmttb25pdG9yX2puaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbmV0d29ya21vbml0
b3Jfam5pLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbmV0d29ya21vbml0b3Jfam5p
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0j
aWZuZGVmIFdFQlJUQ19BUElfSkFWQV9KTklfQU5EUk9JRE5FVFdPUktNT05JVE9SX0pOSV9IXwot
I2RlZmluZSBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURORVRXT1JLTU9OSVRPUl9KTklfSF8K
LQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL25ldHdvcmttb25pdG9yLmgiCi0KLSNpbmNsdWRlIDxt
YXA+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0j
aW5jbHVkZSAid2VicnRjL2Jhc2UvYmFzaWN0eXBlcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNl
L3RocmVhZF9jaGVja2VyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotdHlwZWRlZiBp
bnQ2NF90IE5ldHdvcmtIYW5kbGU7Ci0KLS8vIGMrKyBlcXVpdmFsZW50IG9mIGphdmEgTmV0d29y
a01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpb25UeXBlLgotZW51bSBOZXR3b3JrVHlwZSB7Ci0g
IE5FVFdPUktfVU5LTk9XTiwKLSAgTkVUV09SS19FVEhFUk5FVCwKLSAgTkVUV09SS19XSUZJLAot
ICBORVRXT1JLXzRHLAotICBORVRXT1JLXzNHLAotICBORVRXT1JLXzJHLAotICBORVRXT1JLX1VO
S05PV05fQ0VMTFVMQVIsCi0gIE5FVFdPUktfQkxVRVRPT1RILAotICBORVRXT1JLX05PTkUKLX07
Ci0KLS8vIFRoZSBpbmZvcm1hdGlvbiBpcyBjb2xsZWN0ZWQgZnJvbSBBbmRyb2lkIE9TIHNvIHRo
YXQgdGhlIG5hdGl2ZSBjb2RlIGNhbiBnZXQKLS8vIHRoZSBuZXR3b3JrIHR5cGUgYW5kIGhhbmRs
ZSAoQW5kcm9pZCBuZXR3b3JrIElEKSBmb3IgZWFjaCBpbnRlcmZhY2UuCi1zdHJ1Y3QgTmV0d29y
a0luZm9ybWF0aW9uIHsKLSAgc3RkOjpzdHJpbmcgaW50ZXJmYWNlX25hbWU7Ci0gIE5ldHdvcmtI
YW5kbGUgaGFuZGxlOwotICBOZXR3b3JrVHlwZSB0eXBlOwotICBzdGQ6OnZlY3RvcjxydGM6OklQ
QWRkcmVzcz4gaXBfYWRkcmVzc2VzOwotCi0gIHN0ZDo6c3RyaW5nIFRvU3RyaW5nKCkgY29uc3Q7
Ci19OwotCi1jbGFzcyBBbmRyb2lkTmV0d29ya01vbml0b3IgOiBwdWJsaWMgcnRjOjpOZXR3b3Jr
TW9uaXRvckJhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgcnRjOjpO
ZXR3b3JrQmluZGVySW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIEFuZHJvaWROZXR3b3JrTW9uaXRv
cigpOwotCi0gIHN0YXRpYyB2b2lkIFNldEFuZHJvaWRDb250ZXh0KEpOSUVudiogam5pLCBqb2Jq
ZWN0IGNvbnRleHQpOwotCi0gIHZvaWQgU3RhcnQoKSBvdmVycmlkZTsKLSAgdm9pZCBTdG9wKCkg
b3ZlcnJpZGU7Ci0KLSAgaW50IEJpbmRTb2NrZXRUb05ldHdvcmsoaW50IHNvY2tldF9mZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnRjOjpJUEFkZHJlc3MmIGFkZHJlc3MpIG92
ZXJyaWRlOwotICBydGM6OkFkYXB0ZXJUeXBlIEdldEFkYXB0ZXJUeXBlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBpZl9uYW1lKSBvdmVycmlkZTsKLSAgdm9pZCBPbk5ldHdvcmtDb25uZWN0ZWQoY29uc3Qg
TmV0d29ya0luZm9ybWF0aW9uJiBuZXR3b3JrX2luZm8pOwotICB2b2lkIE9uTmV0d29ya0Rpc2Nv
bm5lY3RlZChOZXR3b3JrSGFuZGxlIG5ldHdvcmtfaGFuZGxlKTsKLSAgdm9pZCBTZXROZXR3b3Jr
SW5mb3MoY29uc3Qgc3RkOjp2ZWN0b3I8TmV0d29ya0luZm9ybWF0aW9uPiYgbmV0d29ya19pbmZv
cyk7Ci0KLSBwcml2YXRlOgotICBzdGF0aWMgam9iamVjdCBhcHBsaWNhdGlvbl9jb250ZXh0XzsK
LSAgc3RhdGljIGludCBhbmRyb2lkX3Nka19pbnRfOwotICBKTklFbnYqIGpuaSgpIHsgcmV0dXJu
IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOyB9Ci0KLSAgdm9pZCBPbk5ldHdvcmtDb25u
ZWN0ZWRfdyhjb25zdCBOZXR3b3JrSW5mb3JtYXRpb24mIG5ldHdvcmtfaW5mbyk7Ci0gIHZvaWQg
T25OZXR3b3JrRGlzY29ubmVjdGVkX3coTmV0d29ya0hhbmRsZSBuZXR3b3JrX2hhbmRsZSk7Ci0K
LSAgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9uZXR3b3JrX21vbml0b3JfY2xhc3NfOwotICBT
Y29wZWRHbG9iYWxSZWY8am9iamVjdD4gal9uZXR3b3JrX21vbml0b3JfOwotICBydGM6OlRocmVh
ZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotICBib29sIHN0YXJ0ZWRfID0gZmFsc2U7Ci0gIHN0
ZDo6bWFwPHN0ZDo6c3RyaW5nLCBydGM6OkFkYXB0ZXJUeXBlPiBhZGFwdGVyX3R5cGVfYnlfbmFt
ZV87Ci0gIHN0ZDo6bWFwPHJ0Yzo6SVBBZGRyZXNzLCBOZXR3b3JrSGFuZGxlPiBuZXR3b3JrX2hh
bmRsZV9ieV9hZGRyZXNzXzsKLSAgc3RkOjptYXA8TmV0d29ya0hhbmRsZSwgTmV0d29ya0luZm9y
bWF0aW9uPiBuZXR3b3JrX2luZm9fYnlfaGFuZGxlXzsKLX07Ci0KLWNsYXNzIEFuZHJvaWROZXR3
b3JrTW9uaXRvckZhY3RvcnkgOiBwdWJsaWMgcnRjOjpOZXR3b3JrTW9uaXRvckZhY3Rvcnkgewot
IHB1YmxpYzoKLSAgQW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeSgpIHt9Ci0KLSAgcnRjOjpO
ZXR3b3JrTW9uaXRvckludGVyZmFjZSogQ3JlYXRlTmV0d29ya01vbml0b3IoKSBvdmVycmlkZTsK
LX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCi0KLSNlbmRpZiAgLy8gV0VCUlRDX0FQ
SV9KQVZBX0pOSV9BTkRST0lETkVUV09SS01PTklUT1JfSk5JX0hfCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZHZp
ZGVvdHJhY2tzb3VyY2Vfam5pLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkdmlkZW90cmFja3Nv
dXJjZV9qbmkuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkdmlkZW90cmFja3NvdXJj
ZV9qbmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vo
b2xkZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWR2aWRlb3RyYWNrc291cmNlLmgi
Ci0jaW5jbHVkZSAid2VicnRjL2FwaS92aWRlb3NvdXJjZXByb3h5LmgiCi0KLS8vIElkZW50aWZp
ZXJzIGFyZSBvdmVyIDgwIGNoYXJhY3RlcnMgbG9uZyBzbyB0aGlzIGlzIG5lZWRlZCB0byBmaXQg
dGhlbSBvbiBvbmUKLS8vIGxpbmUuCi0jZGVmaW5lIEpPV19PQlNFUlZFUl9NRVRIT0QocmV0dHlw
ZSwgbmFtZSkgXAotICBKT1cocmV0dHlwZSwgVmlkZW9DYXB0dXJlcl8wMDAyNEFuZHJvaWRWaWRl
b1RyYWNrU291cmNlT2JzZXJ2ZXJfIyNuYW1lKQotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0K
LXN0YXRpYyB3ZWJydGM6OkFuZHJvaWRWaWRlb1RyYWNrU291cmNlKiBBbmRyb2lkVmlkZW9UcmFj
a1NvdXJjZUZyb21KYXZhUHJveHkoCi0gICAgamxvbmcgal9wcm94eSkgewotICBhdXRvIHByb3h5
X3NvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpWaWRlb1RyYWNrU291cmNlUHJveHkq
PihqX3Byb3h5KTsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpBbmRyb2lkVmlk
ZW9UcmFja1NvdXJjZSo+KAotICAgICAgcHJveHlfc291cmNlLT5pbnRlcm5hbCgpKTsKLX0KLQot
Sk9XX09CU0VSVkVSX01FVEhPRCh2b2lkLCBuYXRpdmVPbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVk
KQotKEpOSUVudiogam5pLAotIGpjbGFzcywKLSBqbG9uZyBqX3NvdXJjZSwKLSBqYnl0ZUFycmF5
IGpfZnJhbWUsCi0gamludCBsZW5ndGgsCi0gamludCB3aWR0aCwKLSBqaW50IGhlaWdodCwKLSBq
aW50IHJvdGF0aW9uLAotIGpsb25nIHRpbWVzdGFtcCkgewotICB3ZWJydGM6OkFuZHJvaWRWaWRl
b1RyYWNrU291cmNlKiBzb3VyY2UgPQotICAgICAgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VGcm9t
SmF2YVByb3h5KGpfc291cmNlKTsKLSAgamJ5dGUqIGJ5dGVzID0gam5pLT5HZXRCeXRlQXJyYXlF
bGVtZW50cyhqX2ZyYW1lLCBudWxscHRyKTsKLSAgc291cmNlLT5PbkJ5dGVCdWZmZXJGcmFtZUNh
cHR1cmVkKGJ5dGVzLCBsZW5ndGgsIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wKTsKLSAgam5pLT5SZWxlYXNlQnl0
ZUFycmF5RWxlbWVudHMoal9mcmFtZSwgYnl0ZXMsIEpOSV9BQk9SVCk7Ci19Ci0KLUpPV19PQlNF
UlZFUl9NRVRIT0Qodm9pZCwgbmF0aXZlT25UZXh0dXJlRnJhbWVDYXB0dXJlZCkKLShKTklFbnYq
IGpuaSwKLSBqY2xhc3MsCi0gamxvbmcgal9zb3VyY2UsCi0gamludCBqX3dpZHRoLAotIGppbnQg
al9oZWlnaHQsCi0gamludCBqX29lc190ZXh0dXJlX2lkLAotIGpmbG9hdEFycmF5IGpfdHJhbnNm
b3JtX21hdHJpeCwKLSBqaW50IGpfcm90YXRpb24sCi0gamxvbmcgal90aW1lc3RhbXApIHsKLSAg
d2VicnRjOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSogc291cmNlID0KLSAgICAgIEFuZHJvaWRW
aWRlb1RyYWNrU291cmNlRnJvbUphdmFQcm94eShqX3NvdXJjZSk7Ci0gIHNvdXJjZS0+T25UZXh0
dXJlRnJhbWVDYXB0dXJlZCgKLSAgICAgIGpfd2lkdGgsIGpfaGVpZ2h0LCBqX3JvdGF0aW9uLCBq
X3RpbWVzdGFtcCwKLSAgICAgIE5hdGl2ZUhhbmRsZUltcGwoam5pLCBqX29lc190ZXh0dXJlX2lk
LCBqX3RyYW5zZm9ybV9tYXRyaXgpKTsKLX0KLQotSk9XX09CU0VSVkVSX01FVEhPRCh2b2lkLCBu
YXRpdmVDYXB0dXJlclN0YXJ0ZWQpCi0oSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9zb3Vy
Y2UsIGpib29sZWFuIGpfc3VjY2VzcykgewotICBMT0coTFNfSU5GTykgPDwgIkFuZHJvaWRWaWRl
b1RyYWNrU291cmNlT2JzZXJ2ZV9uYXRpdmVDYXB0dXJlclN0YXJ0ZWQiOwotICB3ZWJydGM6OkFu
ZHJvaWRWaWRlb1RyYWNrU291cmNlKiBzb3VyY2UgPQotICAgICAgQW5kcm9pZFZpZGVvVHJhY2tT
b3VyY2VGcm9tSmF2YVByb3h5KGpfc291cmNlKTsKLSAgc291cmNlLT5TZXRTdGF0ZShqX3N1Y2Nl
c3MKLSAgICAgICAgICAgICAgICAgICAgICAgPyB3ZWJydGM6OkFuZHJvaWRWaWRlb1RyYWNrU291
cmNlOjpTb3VyY2VTdGF0ZTo6a0xpdmUKLSAgICAgICAgICAgICAgICAgICAgICAgOiB3ZWJydGM6
OkFuZHJvaWRWaWRlb1RyYWNrU291cmNlOjpTb3VyY2VTdGF0ZTo6a0VuZGVkKTsKLX0KLQotSk9X
X09CU0VSVkVSX01FVEhPRCh2b2lkLCBuYXRpdmVDYXB0dXJlclN0b3BwZWQpCi0oSk5JRW52KiBq
bmksIGpjbGFzcywgamxvbmcgal9zb3VyY2UpIHsKLSAgTE9HKExTX0lORk8pIDw8ICJBbmRyb2lk
VmlkZW9UcmFja1NvdXJjZU9ic2VydmVfbmF0aXZlQ2FwdHVyZXJTdG9wcGVkIjsKLSAgd2VicnRj
OjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSogc291cmNlID0KLSAgICAgIEFuZHJvaWRWaWRlb1Ry
YWNrU291cmNlRnJvbUphdmFQcm94eShqX3NvdXJjZSk7Ci0gIHNvdXJjZS0+U2V0U3RhdGUod2Vi
cnRjOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZTo6U291cmNlU3RhdGU6OmtFbmRlZCk7Ci19Ci0K
LUpPVyh2b2lkLCBWaWRlb1NvdXJjZV9uYXRpdmVBZGFwdE91dHB1dEZvcm1hdCkKLShKTklFbnYq
IGpuaSwgamNsYXNzLCBqbG9uZyBqX3NvdXJjZSwgamludCBqX3dpZHRoLCBqaW50IGpfaGVpZ2h0
LCBqaW50IGpfZnBzKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiVmlkZW9Tb3VyY2VfbmF0aXZlQWRh
cHRPdXRwdXRGb3JtYXQiOwotICB3ZWJydGM6OkFuZHJvaWRWaWRlb1RyYWNrU291cmNlKiBzb3Vy
Y2UgPQotICAgICAgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VGcm9tSmF2YVByb3h5KGpfc291cmNl
KTsKLSAgc291cmNlLT5Pbk91dHB1dEZvcm1hdFJlcXVlc3Qoal93aWR0aCwgal9oZWlnaHQsIGpf
ZnBzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVy
ZW5jZWhvbGRlci5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIuY2MJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5jYwkobm9uZXhpc3RlbnQp
CkBAIC0xLDEzNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotI2luY2x1ZGUgIndlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIuaCIKLQotI2luY2x1ZGUgIndlYnJ0
Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkg
ewotCi0vLyBDbGFzc1JlZmVyZW5jZUhvbGRlciBob2xkcyBnbG9iYWwgcmVmZXJlbmNlIHRvIEph
dmEgY2xhc3NlcyBpbiBhcHAvd2VicnRjLgotY2xhc3MgQ2xhc3NSZWZlcmVuY2VIb2xkZXIgewot
IHB1YmxpYzoKLSAgZXhwbGljaXQgQ2xhc3NSZWZlcmVuY2VIb2xkZXIoSk5JRW52KiBqbmkpOwot
ICB+Q2xhc3NSZWZlcmVuY2VIb2xkZXIoKTsKLQotICB2b2lkIEZyZWVSZWZlcmVuY2VzKEpOSUVu
diogam5pKTsKLSAgamNsYXNzIEdldENsYXNzKGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKTsKLQot
IHByaXZhdGU6Ci0gIHZvaWQgTG9hZENsYXNzKEpOSUVudiogam5pLCBjb25zdCBzdGQ6OnN0cmlu
ZyYgbmFtZSk7Ci0KLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGpjbGFzcz4gY2xhc3Nlc187Ci19
OwotCi0vLyBBbGxvY2F0ZWQgaW4gTG9hZEdsb2JhbENsYXNzUmVmZXJlbmNlSG9sZGVyKCksCi0v
LyBmcmVlZCBpbiBGcmVlR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIoKS4KLXN0YXRpYyBDbGFz
c1JlZmVyZW5jZUhvbGRlciogZ19jbGFzc19yZWZlcmVuY2VfaG9sZGVyID0gbnVsbHB0cjsKLQot
dm9pZCBMb2FkR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIoKSB7Ci0gIFJUQ19DSEVDSyhnX2Ns
YXNzX3JlZmVyZW5jZV9ob2xkZXIgPT0gbnVsbHB0cik7Ci0gIGdfY2xhc3NfcmVmZXJlbmNlX2hv
bGRlciA9IG5ldyBDbGFzc1JlZmVyZW5jZUhvbGRlcihHZXRFbnYoKSk7Ci19Ci0KLXZvaWQgRnJl
ZUdsb2JhbENsYXNzUmVmZXJlbmNlSG9sZGVyKCkgewotICBnX2NsYXNzX3JlZmVyZW5jZV9ob2xk
ZXItPkZyZWVSZWZlcmVuY2VzKEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpKTsKLSAgZGVs
ZXRlIGdfY2xhc3NfcmVmZXJlbmNlX2hvbGRlcjsKLSAgZ19jbGFzc19yZWZlcmVuY2VfaG9sZGVy
ID0gbnVsbHB0cjsKLX0KLQotQ2xhc3NSZWZlcmVuY2VIb2xkZXI6OkNsYXNzUmVmZXJlbmNlSG9s
ZGVyKEpOSUVudiogam5pKSB7Ci0gIExvYWRDbGFzcyhqbmksICJhbmRyb2lkL2dyYXBoaWNzL1N1
cmZhY2VUZXh0dXJlIik7Ci0gIExvYWRDbGFzcyhqbmksICJqYXZhL25pby9CeXRlQnVmZmVyIik7
Ci0gIExvYWRDbGFzcyhqbmksICJqYXZhL3V0aWwvQXJyYXlMaXN0Iik7Ci0gIExvYWRDbGFzcyhq
bmksICJvcmcvd2VicnRjL0F1ZGlvVHJhY2siKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJy
dGMvQ2FtZXJhMUVudW1lcmF0b3IiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvQ2Ft
ZXJhMkVudW1lcmF0b3IiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvQ2FtZXJhRW51
bWVyYXRpb25BbmRyb2lkIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL0RhdGFDaGFu
bmVsIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL0RhdGFDaGFubmVsJEJ1ZmZlciIp
OwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbCRJbml0Iik7Ci0gIExv
YWRDbGFzcyhqbmksICJvcmcvd2VicnRjL0RhdGFDaGFubmVsJFN0YXRlIik7Ci0gIExvYWRDbGFz
cyhqbmksICJvcmcvd2VicnRjL0VnbEJhc2UiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJy
dGMvRWdsQmFzZSRDb250ZXh0Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL0VnbEJh
c2UxNCRDb250ZXh0Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL0ljZUNhbmRpZGF0
ZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVy
Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIk
T3V0cHV0QnVmZmVySW5mbyIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyJFZpZGVvQ29kZWNUeXBlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcv
d2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93
ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciREZWNvZGVkVGV4dHVyZUJ1ZmZlciIpOwotICBM
b2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyJERlY29kZWRP
dXRwdXRCdWZmZXIiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlciRWaWRlb0NvZGVjVHlwZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0
Yy9NZWRpYVNvdXJjZSRTdGF0ZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRp
YVN0cmVhbSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbVRyYWNr
JFN0YXRlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01ldHJpY3MiKTsKLSAgTG9h
ZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWV0cmljcyRIaXN0b2dyYW1JbmZvIik7Ci0gIExvYWRD
bGFzcyhqbmksICJvcmcvd2VicnRjL05ldHdvcmtNb25pdG9yIik7Ci0gIExvYWRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0b0RldGVjdCRDb25uZWN0aW9uVHlwZSIpOwot
ICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QkSVBB
ZGRyZXNzIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0
b0RldGVjdCROZXR3b3JrSW5mb3JtYXRpb24iKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJy
dGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRj
L1BlZXJDb25uZWN0aW9uJEJ1bmRsZVBvbGljeSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dl
YnJ0Yy9QZWVyQ29ubmVjdGlvbiRDb250aW51YWxHYXRoZXJpbmdQb2xpY3kiKTsKLSAgTG9hZENs
YXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kUnRjcE11eFBvbGljeSIpOwotICBM
b2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRJY2VDb25uZWN0aW9uU3Rh
dGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kSWNlR2F0
aGVyaW5nU3RhdGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rp
b24kSWNlVHJhbnNwb3J0c1R5cGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVl
ckNvbm5lY3Rpb24kVGNwQ2FuZGlkYXRlUG9saWN5Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcv
d2VicnRjL1BlZXJDb25uZWN0aW9uJENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kiKTsKLSAgTG9hZENs
YXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kS2V5VHlwZSIpOwotICBMb2FkQ2xh
c3Moam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRTaWduYWxpbmdTdGF0ZSIpOwotICBM
b2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9SdHBSZWNlaXZlciIpOwotICBMb2FkQ2xhc3Moam5p
LCAib3JnL3dlYnJ0Yy9SdHBTZW5kZXIiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMv
U2Vzc2lvbkRlc2NyaXB0aW9uIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1Nlc3Np
b25EZXNjcmlwdGlvbiRUeXBlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1N0YXRz
UmVwb3J0Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1N0YXRzUmVwb3J0JFZhbHVl
Iik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyIik7
Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIiKTsKLSAgTG9hZENs
YXNzKGpuaSwgIm9yZy93ZWJydGMvVmlkZW9SZW5kZXJlciRJNDIwRnJhbWUiKTsKLSAgTG9hZENs
YXNzKGpuaSwgIm9yZy93ZWJydGMvVmlkZW9UcmFjayIpOwotfQotCi1DbGFzc1JlZmVyZW5jZUhv
bGRlcjo6fkNsYXNzUmVmZXJlbmNlSG9sZGVyKCkgewotICBSVENfQ0hFQ0soY2xhc3Nlc18uZW1w
dHkoKSkgPDwgIk11c3QgY2FsbCBGcmVlUmVmZXJlbmNlcygpIGJlZm9yZSBkdG9yISI7Ci19Ci0K
LXZvaWQgQ2xhc3NSZWZlcmVuY2VIb2xkZXI6OkZyZWVSZWZlcmVuY2VzKEpOSUVudiogam5pKSB7
Ci0gIGZvciAoc3RkOjptYXA8c3RkOjpzdHJpbmcsIGpjbGFzcz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gY2xhc3Nlc18uYmVnaW4oKTsKLSAgICAgIGl0ICE9IGNsYXNzZXNfLmVuZCgpOyArK2l0KSB7
Ci0gICAgam5pLT5EZWxldGVHbG9iYWxSZWYoaXQtPnNlY29uZCk7Ci0gIH0KLSAgY2xhc3Nlc18u
Y2xlYXIoKTsKLX0KLQotamNsYXNzIENsYXNzUmVmZXJlbmNlSG9sZGVyOjpHZXRDbGFzcyhjb25z
dCBzdGQ6OnN0cmluZyYgbmFtZSkgewotICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgamNsYXNzPjo6
aXRlcmF0b3IgaXQgPSBjbGFzc2VzXy5maW5kKG5hbWUpOwotICBSVENfQ0hFQ0soaXQgIT0gY2xh
c3Nlc18uZW5kKCkpIDw8ICJVbmV4cGVjdGVkIEdldENsYXNzKCkgY2FsbCBmb3I6ICIgPDwgbmFt
ZTsKLSAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci19Ci0KLXZvaWQgQ2xhc3NSZWZlcmVuY2VIb2xkZXI6
OkxvYWRDbGFzcyhKTklFbnYqIGpuaSwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKLSAgamNs
YXNzIGxvY2FsUmVmID0gam5pLT5GaW5kQ2xhc3MobmFtZS5jX3N0cigpKTsKLSAgQ0hFQ0tfRVhD
RVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBGaW5kQ2xhc3M6ICIgPDwgbmFtZTsKLSAgUlRD
X0NIRUNLKGxvY2FsUmVmKSA8PCBuYW1lOwotICBqY2xhc3MgZ2xvYmFsUmVmID0gcmVpbnRlcnBy
ZXRfY2FzdDxqY2xhc3M+KGpuaS0+TmV3R2xvYmFsUmVmKGxvY2FsUmVmKSk7Ci0gIENIRUNLX0VY
Q0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3R2xvYmFsUmVmOiAiIDw8IG5hbWU7Ci0g
IFJUQ19DSEVDSyhnbG9iYWxSZWYpIDw8IG5hbWU7Ci0gIGJvb2wgaW5zZXJ0ZWQgPSBjbGFzc2Vz
Xy5pbnNlcnQoc3RkOjptYWtlX3BhaXIobmFtZSwgZ2xvYmFsUmVmKSkuc2Vjb25kOwotICBSVENf
Q0hFQ0soaW5zZXJ0ZWQpIDw8ICJEdXBsaWNhdGUgY2xhc3MgbmFtZTogIiA8PCBuYW1lOwotfQot
Ci0vLyBSZXR1cm5zIGEgZ2xvYmFsIHJlZmVyZW5jZSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIGZv
ciB0aGUgbGlmZXRpbWUgb2YgdGhlCi0vLyBwcm9jZXNzLgotamNsYXNzIEZpbmRDbGFzcyhKTklF
bnYqIGpuaSwgY29uc3QgY2hhciogbmFtZSkgewotICByZXR1cm4gZ19jbGFzc19yZWZlcmVuY2Vf
aG9sZGVyLT5HZXRDbGFzcyhuYW1lKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVy
ZW5jZWhvbGRlci5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDQxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLS8v
IEFuZHJvaWQncyBGaW5kQ2xhc3MoKSBpcyB0cmlja2llciB0aGFuIHVzdWFsIGJlY2F1c2UgdGhl
IGFwcC1zcGVjaWZpYwotLy8gQ2xhc3NMb2FkZXIgaXMgbm90IGNvbnN1bHRlZCB3aGVuIHRoZXJl
IGlzIG5vIGFwcC1zcGVjaWZpYyBmcmFtZSBvbiB0aGUKLS8vIHN0YWNrLiAgQ29uc2VxdWVudGx5
LCB3ZSBvbmx5IGxvb2sgdXAgYWxsIGNsYXNzZXMgb25jZSBpbiBhcHAvd2VicnRjLgotLy8gaHR0
cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWpuaS5odG1s
I2ZhcV9GaW5kQ2xhc3MKLQotI2lmbmRlZiBXRUJSVENfQVBJX0pBVkFfSk5JX0NMQVNTUkVGRVJF
TkNFSE9MREVSX0hfCi0jZGVmaW5lIFdFQlJUQ19BUElfSkFWQV9KTklfQ0xBU1NSRUZFUkVOQ0VI
T0xERVJfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxz
dHJpbmc+Ci0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotLy8gTG9hZEdsb2JhbENsYXNzUmVm
ZXJlbmNlSG9sZGVyIG11c3QgYmUgY2FsbGVkIGluIEpOSV9PbkxvYWQuCi12b2lkIExvYWRHbG9i
YWxDbGFzc1JlZmVyZW5jZUhvbGRlcigpOwotLy8gRnJlZUdsb2JhbENsYXNzUmVmZXJlbmNlSG9s
ZGVyIG11c3QgYmUgY2FsbGVkIGluIEpOSV9VbkxvYWQuCi12b2lkIEZyZWVHbG9iYWxDbGFzc1Jl
ZmVyZW5jZUhvbGRlcigpOwotCi0vLyBSZXR1cm5zIGEgZ2xvYmFsIHJlZmVyZW5jZSBndWFyYW50
ZWVkIHRvIGJlIHZhbGlkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlCi0vLyBwcm9jZXNzLgotamNs
YXNzIEZpbmRDbGFzcyhKTklFbnYqIGpuaSwgY29uc3QgY2hhciogbmFtZSk7Ci0KLS8vIENvbnZl
bmllbmNlIG1hY3JvIGRlZmluaW5nIEpOSS1hY2Nlc3NpYmxlIG1ldGhvZHMgaW4gdGhlIG9yZy53
ZWJydGMgcGFja2FnZS4KLS8vIEVsaW1pbmF0ZXMgdW5uZWNlc3NhcnkgYm9pbGVycGxhdGUgYW5k
IGxpbmUtd3JhcHMsIHJlZHVjaW5nIHZpc3VhbCBjbHV0dGVyLgotI2RlZmluZSBKT1cocmV0dHlw
ZSwgbmFtZSkgZXh0ZXJuICJDIiByZXR0eXBlIEpOSUVYUE9SVCBKTklDQUxMIFwKLSAgSmF2YV9v
cmdfd2VicnRjXyMjbmFtZQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQotCi0jZW5kaWYg
IC8vIFdFQlJUQ19BUElfSkFWQV9KTklfQ0xBU1NSRUZFUkVOQ0VIT0xERVJfSF8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9q
bmlfaGVscGVycy5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuY2MJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2puaS9qbmlfaGVscGVycy5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDM1MCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5p
X2hlbHBlcnMuaCIKLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZl
cmVuY2Vob2xkZXIuaCIKLQotI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMv
cHJjdGwuaD4KLSNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgot
Ci1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLXN0YXRpYyBKYXZhVk0qIGdfanZtID0gbnVsbHB0
cjsKLQotc3RhdGljIHB0aHJlYWRfb25jZV90IGdfam5pX3B0cl9vbmNlID0gUFRIUkVBRF9PTkNF
X0lOSVQ7Ci0KLS8vIEtleSBmb3IgcGVyLXRocmVhZCBKTklFbnYqIGRhdGEuICBOb24tTlVMTCBp
biB0aHJlYWRzIGF0dGFjaGVkIHRvIHxnX2p2bXwgYnkKLS8vIEF0dGFjaEN1cnJlbnRUaHJlYWRJ
Zk5lZWRlZCgpLCBOVUxMIGluIHVuYXR0YWNoZWQgdGhyZWFkcyBhbmQgdGhyZWFkcyB0aGF0Ci0v
LyB3ZXJlIGF0dGFjaGVkIGJ5IHRoZSBKVk0gYmVjYXVzZSBvZiBhIEphdmEtPm5hdGl2ZSBjYWxs
Lgotc3RhdGljIHB0aHJlYWRfa2V5X3QgZ19qbmlfcHRyOwotCi1KYXZhVk0gKkdldEpWTSgpIHsK
LSAgUlRDX0NIRUNLKGdfanZtKSA8PCAiSk5JX09uTG9hZCBmYWlsZWQgdG8gcnVuPyI7Ci0gIHJl
dHVybiBnX2p2bTsKLX0KLQotLy8gUmV0dXJuIGEgfEpOSUVudip8IHVzYWJsZSBvbiB0aGlzIHRo
cmVhZCBvciBOVUxMIGlmIHRoaXMgdGhyZWFkIGlzIGRldGFjaGVkLgotSk5JRW52KiBHZXRFbnYo
KSB7Ci0gIHZvaWQqIGVudiA9IG51bGxwdHI7Ci0gIGppbnQgc3RhdHVzID0gZ19qdm0tPkdldEVu
digmZW52LCBKTklfVkVSU0lPTl8xXzYpOwotICBSVENfQ0hFQ0soKChlbnYgIT0gbnVsbHB0cikg
JiYgKHN0YXR1cyA9PSBKTklfT0spKSB8fAotICAgICAgICAgICAgKChlbnYgPT0gbnVsbHB0cikg
JiYgKHN0YXR1cyA9PSBKTklfRURFVEFDSEVEKSkpCi0gICAgICA8PCAiVW5leHBlY3RlZCBHZXRF
bnYgcmV0dXJuOiAiIDw8IHN0YXR1cyA8PCAiOiIgPDwgZW52OwotICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxKTklFbnYqPihlbnYpOwotfQotCi1zdGF0aWMgdm9pZCBUaHJlYWREZXN0cnVjdG9y
KHZvaWQqIHByZXZfam5pX3B0cikgewotICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgcnVucyBvbiB0
aHJlYWRzIHdoZXJlIHxnX2puaV9wdHJ8IGlzIG5vbi1OVUxMLCBtZWFuaW5nCi0gIC8vIHdlIHdl
cmUgcmVzcG9uc2libGUgZm9yIG9yaWdpbmFsbHkgYXR0YWNoaW5nIHRoZSB0aHJlYWQsIHNvIGFy
ZSByZXNwb25zaWJsZQotICAvLyBmb3IgZGV0YWNoaW5nIGl0IG5vdy4gIEhvd2V2ZXIsIGJlY2F1
c2Ugc29tZSBKVk0gaW1wbGVtZW50YXRpb25zIChub3RhYmx5Ci0gIC8vIE9yYWNsZSdzIGh0dHA6
Ly9nb28uZ2wvZUhBcFlUKSBhbHNvIHVzZSB0aGUgcHRocmVhZF9rZXlfY3JlYXRlIG1lY2hhbmlz
bSwKLSAgLy8gdGhlIEpWTXMgYWNjb3VudGluZyBpbmZvIGZvciB0aGlzIHRocmVhZCBtYXkgYWxy
ZWFkeSBiZSB3aXBlZCBvdXQgYnkgdGhlCi0gIC8vIHRpbWUgdGhpcyBpcyBjYWxsZWQuIFRodXMg
aXQgbWF5IGFwcGVhciB3ZSBhcmUgYWxyZWFkeSBkZXRhY2hlZCBldmVuIHRob3VnaAotICAvLyBp
dCB3YXMgb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGRldGFjaCEgIE9oIHdlbGwuCi0gIGlmICghR2V0
RW52KCkpCi0gICAgcmV0dXJuOwotCi0gIFJUQ19DSEVDSyhHZXRFbnYoKSA9PSBwcmV2X2puaV9w
dHIpCi0gICAgICA8PCAiRGV0YWNoaW5nIGZyb20gYW5vdGhlciB0aHJlYWQ6ICIgPDwgcHJldl9q
bmlfcHRyIDw8ICI6IiA8PCBHZXRFbnYoKTsKLSAgamludCBzdGF0dXMgPSBnX2p2bS0+RGV0YWNo
Q3VycmVudFRocmVhZCgpOwotICBSVENfQ0hFQ0soc3RhdHVzID09IEpOSV9PSykgPDwgIkZhaWxl
ZCB0byBkZXRhY2ggdGhyZWFkOiAiIDw8IHN0YXR1czsKLSAgUlRDX0NIRUNLKCFHZXRFbnYoKSkg
PDwgIkRldGFjaGluZyB3YXMgYSBzdWNjZXNzZnVsIG5vLW9wPz8/IjsKLX0KLQotc3RhdGljIHZv
aWQgQ3JlYXRlSk5JUHRyS2V5KCkgewotICBSVENfQ0hFQ0soIXB0aHJlYWRfa2V5X2NyZWF0ZSgm
Z19qbmlfcHRyLCAmVGhyZWFkRGVzdHJ1Y3RvcikpCi0gICAgICA8PCAicHRocmVhZF9rZXlfY3Jl
YXRlIjsKLX0KLQotamludCBJbml0R2xvYmFsSm5pVmFyaWFibGVzKEphdmFWTSAqanZtKSB7Ci0g
IFJUQ19DSEVDSyghZ19qdm0pIDw8ICJJbml0R2xvYmFsSm5pVmFyaWFibGVzISI7Ci0gIGdfanZt
ID0ganZtOwotICBSVENfQ0hFQ0soZ19qdm0pIDw8ICJJbml0R2xvYmFsSm5pVmFyaWFibGVzIGhh
bmRlZCBOVUxMPyI7Ci0KLSAgUlRDX0NIRUNLKCFwdGhyZWFkX29uY2UoJmdfam5pX3B0cl9vbmNl
LCAmQ3JlYXRlSk5JUHRyS2V5KSkgPDwgInB0aHJlYWRfb25jZSI7Ci0KLSAgSk5JRW52KiBqbmkg
PSBudWxscHRyOwotICBpZiAoanZtLT5HZXRFbnYocmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZq
bmkpLCBKTklfVkVSU0lPTl8xXzYpICE9IEpOSV9PSykKLSAgICByZXR1cm4gLTE7Ci0KLSAgcmV0
dXJuIEpOSV9WRVJTSU9OXzFfNjsKLX0KLQotLy8gUmV0dXJuIHRocmVhZCBJRCBhcyBhIHN0cmlu
Zy4KLXN0YXRpYyBzdGQ6OnN0cmluZyBHZXRUaHJlYWRJZCgpIHsKLSAgY2hhciBidWZbMjFdOyAg
Ly8gQmlnIGVub3VnaCB0byBob2xkIGEga3VpbnQ2NG1heCBwbHVzIHRlcm1pbmF0aW5nIE5VTEwu
Ci0gIFJUQ19DSEVDS19MVChzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWxkIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PGxvbmc+KHN5c2NhbGwoX19OUl9nZXR0aWQp
KSksCi0gICAgICAgICAgICAgICBzaXplb2YoYnVmKSkKLSAgICAgIDw8ICJUaHJlYWQgaWQgaXMg
YmlnZ2VyIHRoYW4gdWludDY0Pz8iOwotICByZXR1cm4gc3RkOjpzdHJpbmcoYnVmKTsKLX0KLQot
Ly8gUmV0dXJuIHRoZSBjdXJyZW50IHRocmVhZCdzIG5hbWUuCi1zdGF0aWMgc3RkOjpzdHJpbmcg
R2V0VGhyZWFkTmFtZSgpIHsKLSAgY2hhciBuYW1lWzE3XSA9IHswfTsKLSAgaWYgKHByY3RsKFBS
X0dFVF9OQU1FLCBuYW1lKSAhPSAwKQotICAgIHJldHVybiBzdGQ6OnN0cmluZygiPG5vbmFtZT4i
KTsKLSAgcmV0dXJuIHN0ZDo6c3RyaW5nKG5hbWUpOwotfQotCi0vLyBSZXR1cm4gYSB8Sk5JRW52
KnwgdXNhYmxlIG9uIHRoaXMgdGhyZWFkLiAgQXR0YWNoZXMgdG8gfGdfanZtfCBpZiBuZWNlc3Nh
cnkuCi1KTklFbnYqIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpIHsKLSAgSk5JRW52KiBq
bmkgPSBHZXRFbnYoKTsKLSAgaWYgKGpuaSkKLSAgICByZXR1cm4gam5pOwotICBSVENfQ0hFQ0so
IXB0aHJlYWRfZ2V0c3BlY2lmaWMoZ19qbmlfcHRyKSkKLSAgICAgIDw8ICJUTFMgaGFzIGEgSk5J
RW52KiBidXQgbm90IGF0dGFjaGVkPyI7Ci0KLSAgc3RkOjpzdHJpbmcgbmFtZShHZXRUaHJlYWRO
YW1lKCkgKyAiIC0gIiArIEdldFRocmVhZElkKCkpOwotICBKYXZhVk1BdHRhY2hBcmdzIGFyZ3M7
Ci0gIGFyZ3MudmVyc2lvbiA9IEpOSV9WRVJTSU9OXzFfNjsKLSAgYXJncy5uYW1lID0gJm5hbWVb
MF07Ci0gIGFyZ3MuZ3JvdXAgPSBudWxscHRyOwotICAvLyBEZWFsIHdpdGggZGlmZmVyZW5jZSBp
biBzaWduYXR1cmVzIGJldHdlZW4gT3JhY2xlJ3Mgam5pLmggYW5kIEFuZHJvaWQncy4KLSNpZmRl
ZiBfSkFWQVNPRlRfSk5JX0hfICAvLyBPcmFjbGUncyBqbmkuaCB2aW9sYXRlcyB0aGUgSk5JIHNw
ZWMhCi0gIHZvaWQqIGVudiA9IG51bGxwdHI7Ci0jZWxzZQotICBKTklFbnYqIGVudiA9IG51bGxw
dHI7Ci0jZW5kaWYKLSAgUlRDX0NIRUNLKCFnX2p2bS0+QXR0YWNoQ3VycmVudFRocmVhZCgmZW52
LCAmYXJncykpCi0gICAgICA8PCAiRmFpbGVkIHRvIGF0dGFjaCB0aHJlYWQiOwotICBSVENfQ0hF
Q0soZW52KSA8PCAiQXR0YWNoQ3VycmVudFRocmVhZCBoYW5kZWQgYmFjayBOVUxMISI7Ci0gIGpu
aSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Sk5JRW52Kj4oZW52KTsKLSAgUlRDX0NIRUNLKCFwdGhyZWFk
X3NldHNwZWNpZmljKGdfam5pX3B0ciwgam5pKSkgPDwgInB0aHJlYWRfc2V0c3BlY2lmaWMiOwot
ICByZXR1cm4gam5pOwotfQotCi0vLyBSZXR1cm4gYSB8amxvbmd8IHRoYXQgd2lsbCBjb3JyZWN0
bHkgY29udmVydCBiYWNrIHRvIHxwdHJ8LiAgVGhpcyBpcyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhl
IGFsdGVybmF0aXZlIChvZiBzaWxlbnRseSBwYXNzaW5nIGEgMzItYml0IHBvaW50ZXIgdG8gYSB2
YXJhcmcKLS8vIGZ1bmN0aW9uIGV4cGVjdGluZyBhIDY0LWJpdCBwYXJhbSkgcGlja3MgdXAgZ2Fy
YmFnZSBpbiB0aGUgaGlnaCAzMiBiaXRzLgotamxvbmcgamxvbmdGcm9tUG9pbnRlcih2b2lkKiBw
dHIpIHsKLSAgc3RhdGljX2Fzc2VydChzaXplb2YoaW50cHRyX3QpIDw9IHNpemVvZihqbG9uZyks
Ci0gICAgICAgICAgICAgICAgIlRpbWUgdG8gcmV0aGluayB0aGUgdXNlIG9mIGpsb25ncyIpOwot
ICAvLyBHb2luZyB0aHJvdWdoIGludHB0cl90IHRvIGJlIG9idmlvdXMgYWJvdXQgdGhlIGRlZmlu
ZWRuZXNzIG9mIHRoZQotICAvLyBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBpbnRlZ3JhbCB0
eXBlLiAgaW50cHRyX3QgdG8gamxvbmcgaXMgYSBzdGFuZGFyZAotICAvLyB3aWRlbmluZyBieSB0
aGUgc3RhdGljX2Fzc2VydCBhYm92ZS4KLSAgamxvbmcgcmV0ID0gcmVpbnRlcnByZXRfY2FzdDxp
bnRwdHJfdD4ocHRyKTsKLSAgUlRDX0RDSEVDSyhyZWludGVycHJldF9jYXN0PHZvaWQqPihyZXQp
ID09IHB0cik7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8vIEpOSUVudi1oZWxwZXIgbWV0aG9kcyB0
aGF0IFJUQ19DSEVDSyBzdWNjZXNzOiBubyBKYXZhIGV4Y2VwdGlvbiB0aHJvd24gYW5kCi0vLyBm
b3VuZCBvYmplY3QvY2xhc3MvbWV0aG9kL2ZpZWxkIGlzIG5vbi1udWxsLgotam1ldGhvZElEIEdl
dE1ldGhvZElEKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MgYywgY29uc3Qgc3RkOjpzdHJpbmcm
IG5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSkgewotICBqbWV0aG9kSUQgbSA9IGpuaS0+R2V0
TWV0aG9kSUQoYywgbmFtZS5jX3N0cigpLCBzaWduYXR1cmUpOwotICBDSEVDS19FWENFUFRJT04o
am5pKSA8PCAiZXJyb3IgZHVyaW5nIEdldE1ldGhvZElEOiAiIDw8IG5hbWUgPDwgIiwgIgotICAg
ICAgICAgICAgICAgICAgICAgICA8PCBzaWduYXR1cmU7Ci0gIFJUQ19DSEVDSyhtKSA8PCBuYW1l
IDw8ICIsICIgPDwgc2lnbmF0dXJlOwotICByZXR1cm4gbTsKLX0KLQotam1ldGhvZElEIEdldFN0
YXRpY01ldGhvZElEKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MgYywgY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgY2hhciogc2lnbmF0dXJlKSB7Ci0gIGptZXRob2RJRCBtID0gam5pLT5HZXRTdGF0
aWNNZXRob2RJRChjLCBuYW1lLCBzaWduYXR1cmUpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8
PCAiZXJyb3IgZHVyaW5nIEdldFN0YXRpY01ldGhvZElEOiAiIDw8IG5hbWUgPDwgIiwgIgotICAg
ICAgICAgICAgICAgICAgICAgICA8PCBzaWduYXR1cmU7Ci0gIFJUQ19DSEVDSyhtKSA8PCBuYW1l
IDw8ICIsICIgPDwgc2lnbmF0dXJlOwotICByZXR1cm4gbTsKLX0KLQotamZpZWxkSUQgR2V0Rmll
bGRJRCgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzIGMsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0
IGNoYXIqIHNpZ25hdHVyZSkgewotICBqZmllbGRJRCBmID0gam5pLT5HZXRGaWVsZElEKGMsIG5h
bWUsIHNpZ25hdHVyZSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcg
R2V0RmllbGRJRCI7Ci0gIFJUQ19DSEVDSyhmKSA8PCBuYW1lIDw8ICIsICIgPDwgc2lnbmF0dXJl
OwotICByZXR1cm4gZjsKLX0KLQotamNsYXNzIEdldE9iamVjdENsYXNzKEpOSUVudiogam5pLCBq
b2JqZWN0IG9iamVjdCkgewotICBqY2xhc3MgYyA9IGpuaS0+R2V0T2JqZWN0Q2xhc3Mob2JqZWN0
KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBHZXRPYmplY3RDbGFz
cyI7Ci0gIFJUQ19DSEVDSyhjKSA8PCAiR2V0T2JqZWN0Q2xhc3MgcmV0dXJuZWQgTlVMTCI7Ci0g
IHJldHVybiBjOwotfQotCi1qb2JqZWN0IEdldE9iamVjdEZpZWxkKEpOSUVudiogam5pLCBqb2Jq
ZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpIHsKLSAgam9iamVjdCBvID0gam5pLT5HZXRPYmplY3RG
aWVsZChvYmplY3QsIGlkKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmlu
ZyBHZXRPYmplY3RGaWVsZCI7Ci0gIFJUQ19DSEVDSyghSXNOdWxsKGpuaSwgbykpIDw8ICJHZXRP
YmplY3RGaWVsZCByZXR1cm5lZCBOVUxMIjsKLSAgcmV0dXJuIG87Ci19Ci0KLWpvYmplY3QgR2V0
TnVsbGFibGVPYmplY3RGaWVsZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QsIGpmaWVsZElE
IGlkKSB7Ci0gIGpvYmplY3QgbyA9IGpuaS0+R2V0T2JqZWN0RmllbGQob2JqZWN0LCBpZCk7Ci0g
IENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgR2V0T2JqZWN0RmllbGQiOwot
ICByZXR1cm4gbzsKLX0KLQotanN0cmluZyBHZXRTdHJpbmdGaWVsZChKTklFbnYqIGpuaSwgam9i
amVjdCBvYmplY3QsIGpmaWVsZElEIGlkKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxqc3RyaW5n
PihHZXRPYmplY3RGaWVsZChqbmksIG9iamVjdCwgaWQpKTsKLX0KLQotamxvbmcgR2V0TG9uZ0Zp
ZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpIHsKLSAgamxvbmcg
bCA9IGpuaS0+R2V0TG9uZ0ZpZWxkKG9iamVjdCwgaWQpOwotICBDSEVDS19FWENFUFRJT04oam5p
KSA8PCAiZXJyb3IgZHVyaW5nIEdldExvbmdGaWVsZCI7Ci0gIHJldHVybiBsOwotfQotCi1qaW50
IEdldEludEZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpIHsK
LSAgamludCBpID0gam5pLT5HZXRJbnRGaWVsZChvYmplY3QsIGlkKTsKLSAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBHZXRJbnRGaWVsZCI7Ci0gIHJldHVybiBpOwotfQot
Ci1ib29sIEdldEJvb2xlYW5GaWVsZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QsIGpmaWVs
ZElEIGlkKSB7Ci0gIGpib29sZWFuIGIgPSBqbmktPkdldEJvb2xlYW5GaWVsZChvYmplY3QsIGlk
KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBHZXRCb29sZWFuRmll
bGQiOwotICByZXR1cm4gYjsKLX0KLQotYm9vbCBJc051bGwoSk5JRW52KiBqbmksIGpvYmplY3Qg
b2JqKSB7Ci0gIHJldHVybiBqbmktPklzU2FtZU9iamVjdChvYmosIG51bGxwdHIpOwotfQotCi0v
LyBHaXZlbiBhIFVURi04IGVuY29kZWQgfG5hdGl2ZXwgc3RyaW5nIHJldHVybiBhIG5ldyAoVVRG
LTE2KSBqc3RyaW5nLgotanN0cmluZyBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhKTklFbnYqIGpu
aSwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hdGl2ZSkgewotICBqc3RyaW5nIGpzdHIgPSBqbmktPk5l
d1N0cmluZ1VURihuYXRpdmUuY19zdHIoKSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJl
cnJvciBkdXJpbmcgTmV3U3RyaW5nVVRGIjsKLSAgcmV0dXJuIGpzdHI7Ci19Ci0KLS8vIEdpdmVu
IGEgKFVURi0xNikganN0cmluZyByZXR1cm4gYSBuZXcgVVRGLTggbmF0aXZlIHN0cmluZy4KLXN0
ZDo6c3RyaW5nIEphdmFUb1N0ZFN0cmluZyhKTklFbnYqIGpuaSwgY29uc3QganN0cmluZyYgal9z
dHJpbmcpIHsKLSAgY29uc3QgY2hhciogY2hhcnMgPSBqbmktPkdldFN0cmluZ1VURkNoYXJzKGpf
c3RyaW5nLCBudWxscHRyKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgIkVycm9yIGR1cmlu
ZyBHZXRTdHJpbmdVVEZDaGFycyI7Ci0gIHN0ZDo6c3RyaW5nIHN0cihjaGFycywgam5pLT5HZXRT
dHJpbmdVVEZMZW5ndGgoal9zdHJpbmcpKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgIkVy
cm9yIGR1cmluZyBHZXRTdHJpbmdVVEZMZW5ndGgiOwotICBqbmktPlJlbGVhc2VTdHJpbmdVVEZD
aGFycyhqX3N0cmluZywgY2hhcnMpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiRXJyb3Ig
ZHVyaW5nIFJlbGVhc2VTdHJpbmdVVEZDaGFycyI7Ci0gIHJldHVybiBzdHI7Ci19Ci0KLS8vIFJl
dHVybiB0aGUgKHNpbmdsZXRvbikgSmF2YSBFbnVtIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHxp
bmRleHw7Ci1qb2JqZWN0IEphdmFFbnVtRnJvbUluZGV4KEpOSUVudiogam5pLCBqY2xhc3Mgc3Rh
dGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBz
dGF0ZV9jbGFzc19uYW1lLCBpbnQgaW5kZXgpIHsKLSAgam1ldGhvZElEIHN0YXRlX3ZhbHVlc19p
ZCA9IEdldFN0YXRpY01ldGhvZElEKAotICAgICAgam5pLCBzdGF0ZV9jbGFzcywgInZhbHVlcyIs
ICgiKClbTCIgKyBzdGF0ZV9jbGFzc19uYW1lICArICI7IikuY19zdHIoKSk7Ci0gIGpvYmplY3RB
cnJheSBzdGF0ZV92YWx1ZXMgPSBzdGF0aWNfY2FzdDxqb2JqZWN0QXJyYXk+KAotICAgICAgam5p
LT5DYWxsU3RhdGljT2JqZWN0TWV0aG9kKHN0YXRlX2NsYXNzLCBzdGF0ZV92YWx1ZXNfaWQpKTsK
LSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsU3RhdGljT2JqZWN0
TWV0aG9kIjsKLSAgam9iamVjdCByZXQgPSBqbmktPkdldE9iamVjdEFycmF5RWxlbWVudChzdGF0
ZV92YWx1ZXMsIGluZGV4KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmlu
ZyBHZXRPYmplY3RBcnJheUVsZW1lbnQiOwotICByZXR1cm4gcmV0OwotfQotCi1zdGQ6OnN0cmlu
ZyBHZXRKYXZhRW51bU5hbWUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNsYXNzTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqb2JqZWN0IGpfZW51bSkgewotICBqY2xhc3MgZW51bUNsYXNzID0gRmluZENsYXNzKGpu
aSwgY2xhc3NOYW1lLmNfc3RyKCkpOwotICBqbWV0aG9kSUQgbmFtZU1ldGhvZCA9Ci0gICAgICBH
ZXRNZXRob2RJRChqbmksIGVudW1DbGFzcywgIm5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsi
KTsKLSAganN0cmluZyBuYW1lID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8anN0cmluZz4oam5p
LT5DYWxsT2JqZWN0TWV0aG9kKGpfZW51bSwgbmFtZU1ldGhvZCkpOwotICBDSEVDS19FWENFUFRJ
T04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxPYmplY3RNZXRob2QgZm9yICIgPDwgY2xhc3NO
YW1lCi0gICAgICAgICAgICAgICAgICAgICAgIDw8ICIubmFtZSI7Ci0gIHJldHVybiBKYXZhVG9T
dGRTdHJpbmcoam5pLCBuYW1lKTsKLX0KLQotam9iamVjdCBOZXdHbG9iYWxSZWYoSk5JRW52KiBq
bmksIGpvYmplY3QgbykgewotICBqb2JqZWN0IHJldCA9IGpuaS0+TmV3R2xvYmFsUmVmKG8pOwot
ICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld0dsb2JhbFJlZiI7Ci0g
IFJUQ19DSEVDSyhyZXQpOwotICByZXR1cm4gcmV0OwotfQotCi12b2lkIERlbGV0ZUdsb2JhbFJl
ZihKTklFbnYqIGpuaSwgam9iamVjdCBvKSB7Ci0gIGpuaS0+RGVsZXRlR2xvYmFsUmVmKG8pOwot
ICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIERlbGV0ZUdsb2JhbFJlZiI7
Ci19Ci0KLS8vIFNjb3BlIEphdmEgbG9jYWwgcmVmZXJlbmNlcyB0byB0aGUgbGlmZXRpbWUgb2Yg
dGhpcyBvYmplY3QuICBVc2UgaW4gYWxsIEMrKwotLy8gY2FsbGJhY2tzIChpLmUuIGVudHJ5IHBv
aW50cyB0aGF0IGRvbid0IG9yaWdpbmF0ZSBpbiBhIEphdmEgY2FsbHN0YWNrCi0vLyB0aHJvdWdo
IGEgIm5hdGl2ZSIgbWV0aG9kIGNhbGwpLgotU2NvcGVkTG9jYWxSZWZGcmFtZTo6U2NvcGVkTG9j
YWxSZWZGcmFtZShKTklFbnYqIGpuaSkgOiBqbmlfKGpuaSkgewotICBSVENfQ0hFQ0soIWpuaV8t
PlB1c2hMb2NhbEZyYW1lKDApKSA8PCAiRmFpbGVkIHRvIFB1c2hMb2NhbEZyYW1lIjsKLX0KLVNj
b3BlZExvY2FsUmVmRnJhbWU6On5TY29wZWRMb2NhbFJlZkZyYW1lKCkgewotICBqbmlfLT5Qb3BM
b2NhbEZyYW1lKG51bGxwdHIpOwotfQotCi0vLyBDcmVhdGVzIGFuIGl0ZXJhdG9yIHJlcHJlc2Vu
dGluZyB0aGUgZW5kIG9mIGFueSBjb2xsZWN0aW9uLgotSXRlcmFibGU6Okl0ZXJhdG9yOjpJdGVy
YXRvcigpIDogaXRlcmF0b3JfKG51bGxwdHIpIHt9Ci0KLS8vIENyZWF0ZXMgYW4gaXRlcmF0b3Ig
cG9pbnRpbmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3BlY2lmaWVkIGNvbGxlY3Rpb24uCi1J
dGVyYWJsZTo6SXRlcmF0b3I6Okl0ZXJhdG9yKEpOSUVudiogam5pLCBqb2JqZWN0IGl0ZXJhYmxl
KSA6IGpuaV8oam5pKSB7Ci0gIGpjbGFzcyBqX2NsYXNzID0gR2V0T2JqZWN0Q2xhc3Moam5pLCBp
dGVyYWJsZSk7Ci0gIGptZXRob2RJRCBpdGVyYXRvcl9pZCA9Ci0gICAgICBHZXRNZXRob2RJRChq
bmksIGpfY2xhc3MsICJpdGVyYXRvciIsICIoKUxqYXZhL3V0aWwvSXRlcmF0b3I7Iik7Ci0gIGl0
ZXJhdG9yXyA9IGpuaS0+Q2FsbE9iamVjdE1ldGhvZChpdGVyYWJsZSwgaXRlcmF0b3JfaWQpOwot
ICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxPYmplY3RNZXRob2Qi
OwotICBSVENfQ0hFQ0soaXRlcmF0b3JfICE9IG51bGxwdHIpOwotCi0gIGpjbGFzcyBpdGVyYXRv
cl9jbGFzcyA9IEdldE9iamVjdENsYXNzKGpuaSwgaXRlcmF0b3JfKTsKLSAgaGFzX25leHRfaWRf
ID0gR2V0TWV0aG9kSUQoam5pLCBpdGVyYXRvcl9jbGFzcywgImhhc05leHQiLCAiKClaIik7Ci0g
IG5leHRfaWRfID0gR2V0TWV0aG9kSUQoam5pLCBpdGVyYXRvcl9jbGFzcywgIm5leHQiLCAiKClM
amF2YS9sYW5nL09iamVjdDsiKTsKLQotICAvLyBTdGFydCBhdCB0aGUgZmlyc3QgZWxlbWVudCBp
biB0aGUgY29sbGVjdGlvbi4KLSAgKysoKnRoaXMpOwotfQotCi0vLyBNb3ZlIGNvbnN0cnVjdG9y
IC0gbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gcmV0dXJuIGl0ZXJhdG9yIHR5cGVzIGZyb20KLS8v
IGZ1bmN0aW9ucy4KLUl0ZXJhYmxlOjpJdGVyYXRvcjo6SXRlcmF0b3IoSXRlcmF0b3ImJiBvdGhl
cikKLSAgICA6IGpuaV8oc3RkOjptb3ZlKG90aGVyLmpuaV8pKSwKLSAgICAgIGl0ZXJhdG9yXyhz
dGQ6Om1vdmUob3RoZXIuaXRlcmF0b3JfKSksCi0gICAgICB2YWx1ZV8oc3RkOjptb3ZlKG90aGVy
LnZhbHVlXykpLAotICAgICAgaGFzX25leHRfaWRfKHN0ZDo6bW92ZShvdGhlci5oYXNfbmV4dF9p
ZF8pKSwKLSAgICAgIG5leHRfaWRfKHN0ZDo6bW92ZShvdGhlci5uZXh0X2lkXykpLAotICAgICAg
dGhyZWFkX2NoZWNrZXJfKHN0ZDo6bW92ZShvdGhlci50aHJlYWRfY2hlY2tlcl8pKXt9OwotCi0v
LyBBZHZhbmNlcyB0aGUgaXRlcmF0b3Igb25lIHN0ZXAuCi1JdGVyYWJsZTo6SXRlcmF0b3ImIEl0
ZXJhYmxlOjpJdGVyYXRvcjo6b3BlcmF0b3IrKygpIHsKLSAgUlRDX0NIRUNLKHRocmVhZF9jaGVj
a2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoQXRFbmQoKSkgewotICAgIC8vIENh
bid0IG1vdmUgcGFzdCB0aGUgZW5kLgotICAgIHJldHVybiAqdGhpczsKLSAgfQotICBib29sIGhh
c19uZXh0ID0gam5pXy0+Q2FsbEJvb2xlYW5NZXRob2QoaXRlcmF0b3JfLCBoYXNfbmV4dF9pZF8p
OwotICBDSEVDS19FWENFUFRJT04oam5pXykgPDwgImVycm9yIGR1cmluZyBDYWxsQm9vbGVhbk1l
dGhvZCI7Ci0gIGlmICghaGFzX25leHQpIHsKLSAgICBpdGVyYXRvcl8gPSBudWxscHRyOwotICAg
IHZhbHVlXyA9IG51bGxwdHI7Ci0gICAgcmV0dXJuICp0aGlzOwotICB9Ci0KLSAgdmFsdWVfID0g
am5pXy0+Q2FsbE9iamVjdE1ldGhvZChpdGVyYXRvcl8sIG5leHRfaWRfKTsKLSAgQ0hFQ0tfRVhD
RVBUSU9OKGpuaV8pIDw8ICJlcnJvciBkdXJpbmcgQ2FsbE9iamVjdE1ldGhvZCI7Ci0gIHJldHVy
biAqdGhpczsKLX0KLQotLy8gUHJvdmlkZXMgYSB3YXkgdG8gY29tcGFyZSB0aGUgaXRlcmF0b3Ig
d2l0aCBpdHNlbGYgYW5kIHdpdGggdGhlIGVuZCBpdGVyYXRvci4KLS8vIE5vdGU6IGFsbCBvdGhl
ciBjb21wYXJpc29uIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCwganVzdCBsaWtlIGZvciBDKysgaW5w
dXQKLS8vIGl0ZXJhdG9ycy4KLWJvb2wgSXRlcmFibGU6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KGNv
bnN0IEl0ZXJhYmxlOjpJdGVyYXRvciYgb3RoZXIpIHsKLSAgLy8gVHdvIGRpZmZlcmVudCBhY3Rp
dmUgaXRlcmF0b3JzIHNob3VsZCBuZXZlciBiZSBjb21wYXJlZC4KLSAgUlRDX0RDSEVDSyh0aGlz
ID09ICZvdGhlciB8fCBBdEVuZCgpIHx8IG90aGVyLkF0RW5kKCkpOwotICByZXR1cm4gQXRFbmQo
KSA9PSBvdGhlci5BdEVuZCgpOwotfQotCi1qb2JqZWN0IEl0ZXJhYmxlOjpJdGVyYXRvcjo6b3Bl
cmF0b3IqKCkgewotICBSVENfQ0hFQ0soIUF0RW5kKCkpOwotICByZXR1cm4gdmFsdWVfOwotfQot
Ci1ib29sIEl0ZXJhYmxlOjpJdGVyYXRvcjo6QXRFbmQoKSBjb25zdCB7Ci0gIFJUQ19DSEVDSyh0
aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIGpuaV8gPT0g
bnVsbHB0ciB8fCBJc051bGwoam5pXywgaXRlcmF0b3JfKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNl
IHdlYnJ0Y19qbmkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVs
cGVycy5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDE5MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0vLyBUaGlzIGZpbGUgY29u
dGFpbiBjb252ZW5pZW5jZSBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgZm9yIEpOSS4KLS8vIEJlZm9y
ZSB1c2luZyBhbnkgb2YgdGhlIG1ldGhvZHMsIEluaXRHbG9iYWxKbmlWYXJpYWJsZXMgbXVzdCBi
ZSBjYWxsZWQuCi0KLSNpZm5kZWYgV0VCUlRDX0FQSV9KQVZBX0pOSV9KTklfSEVMUEVSU19IXwot
I2RlZmluZSBXRUJSVENfQVBJX0pBVkFfSk5JX0pOSV9IRUxQRVJTX0hfCi0KLSNpbmNsdWRlIDxq
bmkuaD4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jb25zdHJ1
Y3Rvcm1hZ2ljLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAi
d2VicnRjL2Jhc2UvdGhyZWFkX2NoZWNrZXIuaCIKLQotLy8gQWJvcnQgdGhlIHByb2Nlc3MgaWYg
fGpuaXwgaGFzIGEgSmF2YSBleGNlcHRpb24gcGVuZGluZy4KLS8vIFRoaXMgbWFjcm9zIHVzZXMg
dGhlIGNvbW1hIG9wZXJhdG9yIHRvIGV4ZWN1dGUgRXhjZXB0aW9uRGVzY3JpYmUKLS8vIGFuZCBF
eGNlcHRpb25DbGVhciBpZ25vcmluZyB0aGVpciByZXR1cm4gdmFsdWVzIGFuZCBzZW5kaW5nICIi
Ci0vLyB0byB0aGUgZXJyb3Igc3RyZWFtLgotI2RlZmluZSBDSEVDS19FWENFUFRJT04oam5pKSAg
ICAgICAgXAotICBSVENfQ0hFQ0soIWpuaS0+RXhjZXB0aW9uQ2hlY2soKSkgXAotICAgICAgPDwg
KGpuaS0+RXhjZXB0aW9uRGVzY3JpYmUoKSwgam5pLT5FeGNlcHRpb25DbGVhcigpLCAiIikKLQot
Ly8gSGVscGVyIHRoYXQgY2FsbHMgcHRyLT5SZWxlYXNlKCkgYW5kIGFib3J0cyB0aGUgcHJvY2Vz
cyB3aXRoIGEgdXNlZnVsCi0vLyBtZXNzYWdlIGlmIHRoYXQgZGlkbid0IGFjdHVhbGx5IGRlbGV0
ZSAqcHRyIGJlY2F1c2Ugb2YgZXh0cmEgcmVmY291bnRzLgotI2RlZmluZSBDSEVDS19SRUxFQVNF
KHB0cikgXAotICBSVENfQ0hFQ0tfRVEoMCwgKHB0ciktPlJlbGVhc2UoKSkgPDwgIlVuZXhwZWN0
ZWQgcmVmY291bnQuIgotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLWppbnQgSW5pdEdsb2Jh
bEpuaVZhcmlhYmxlcyhKYXZhVk0gKmp2bSk7Ci0KLS8vIFJldHVybiBhIHxKTklFbnYqfCB1c2Fi
bGUgb24gdGhpcyB0aHJlYWQgb3IgTlVMTCBpZiB0aGlzIHRocmVhZCBpcyBkZXRhY2hlZC4KLUpO
SUVudiogR2V0RW52KCk7Ci0KLUphdmFWTSAqR2V0SlZNKCk7Ci0KLS8vIFJldHVybiBhIHxKTklF
bnYqfCB1c2FibGUgb24gdGhpcyB0aHJlYWQuICBBdHRhY2hlcyB0byB8Z19qdm18IGlmIG5lY2Vz
c2FyeS4KLUpOSUVudiogQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0KLS8vIFJldHVy
biBhIHxqbG9uZ3wgdGhhdCB3aWxsIGNvcnJlY3RseSBjb252ZXJ0IGJhY2sgdG8gfHB0cnwuICBU
aGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUgKG9mIHNpbGVudGx5IHBh
c3NpbmcgYSAzMi1iaXQgcG9pbnRlciB0byBhIHZhcmFyZwotLy8gZnVuY3Rpb24gZXhwZWN0aW5n
IGEgNjQtYml0IHBhcmFtKSBwaWNrcyB1cCBnYXJiYWdlIGluIHRoZSBoaWdoIDMyIGJpdHMuCi1q
bG9uZyBqbG9uZ0Zyb21Qb2ludGVyKHZvaWQqIHB0cik7Ci0KLS8vIEpOSUVudi1oZWxwZXIgbWV0
aG9kcyB0aGF0IFJUQ19DSEVDSyBzdWNjZXNzOiBubyBKYXZhIGV4Y2VwdGlvbiB0aHJvd24gYW5k
Ci0vLyBmb3VuZCBvYmplY3QvY2xhc3MvbWV0aG9kL2ZpZWxkIGlzIG5vbi1udWxsLgotam1ldGhv
ZElEIEdldE1ldGhvZElEKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MgYywgY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSk7Ci0KLWptZXRob2RJRCBHZXRTdGF0
aWNNZXRob2RJRCgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzIGMsIGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IGNoYXIqIHNpZ25hdHVyZSk7Ci0KLWpmaWVsZElEIEdldEZpZWxkSUQoSk5JRW52KiBq
bmksIGpjbGFzcyBjLCBjb25zdCBjaGFyKiBuYW1lLAotICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBzaWduYXR1cmUpOwotCi1qY2xhc3MgR2V0T2JqZWN0Q2xhc3MoSk5JRW52KiBqbmks
IGpvYmplY3Qgb2JqZWN0KTsKLQotLy8gVGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgb2JqZWN0
IGZpZWxkIGlzIG51bGwuCi1qb2JqZWN0IEdldE9iamVjdEZpZWxkKEpOSUVudiogam5pLCBqb2Jq
ZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpOwotCi1qb2JqZWN0IEdldE51bGxhYmxlT2JqZWN0Rmll
bGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBqZmllbGRJRCBpZCk7Ci0KLWpzdHJpbmcg
R2V0U3RyaW5nRmllbGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBqZmllbGRJRCBpZCk7
Ci0KLWpsb25nIEdldExvbmdGaWVsZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QsIGpmaWVs
ZElEIGlkKTsKLQotamludCBHZXRJbnRGaWVsZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3Qs
IGpmaWVsZElEIGlkKTsKLQotYm9vbCBHZXRCb29sZWFuRmllbGQoSk5JRW52KiBqbmksIGpvYmpl
Y3Qgb2JqZWN0LCBqZmllbGRJRCBpZCk7Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB8b2JqfCA9PSBu
dWxsIGluIEphdmEuCi1ib29sIElzTnVsbChKTklFbnYqIGpuaSwgam9iamVjdCBvYmopOwotCi0v
LyBHaXZlbiBhIFVURi04IGVuY29kZWQgfG5hdGl2ZXwgc3RyaW5nIHJldHVybiBhIG5ldyAoVVRG
LTE2KSBqc3RyaW5nLgotanN0cmluZyBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhKTklFbnYqIGpu
aSwgY29uc3Qgc3RkOjpzdHJpbmcmIG5hdGl2ZSk7Ci0KLS8vIEdpdmVuIGEgKFVURi0xNikganN0
cmluZyByZXR1cm4gYSBuZXcgVVRGLTggbmF0aXZlIHN0cmluZy4KLXN0ZDo6c3RyaW5nIEphdmFU
b1N0ZFN0cmluZyhKTklFbnYqIGpuaSwgY29uc3QganN0cmluZyYgal9zdHJpbmcpOwotCi0vLyBS
ZXR1cm4gdGhlIChzaW5nbGV0b24pIEphdmEgRW51bSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB8
aW5kZXh8Owotam9iamVjdCBKYXZhRW51bUZyb21JbmRleChKTklFbnYqIGpuaSwgamNsYXNzIHN0
YXRlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
c3RhdGVfY2xhc3NfbmFtZSwgaW50IGluZGV4KTsKLQotLy8gUmV0dXJucyB0aGUgbmFtZSBvZiBh
IEphdmEgZW51bS4KLXN0ZDo6c3RyaW5nIEdldEphdmFFbnVtTmFtZShKTklFbnYqIGpuaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgY2xhc3NOYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3Qgal9lbnVtKTsKLQotam9iamVjdCBO
ZXdHbG9iYWxSZWYoSk5JRW52KiBqbmksIGpvYmplY3Qgbyk7Ci0KLXZvaWQgRGVsZXRlR2xvYmFs
UmVmKEpOSUVudiogam5pLCBqb2JqZWN0IG8pOwotCi0vLyBTY29wZSBKYXZhIGxvY2FsIHJlZmVy
ZW5jZXMgdG8gdGhlIGxpZmV0aW1lIG9mIHRoaXMgb2JqZWN0LiAgVXNlIGluIGFsbCBDKysKLS8v
IGNhbGxiYWNrcyAoaS5lLiBlbnRyeSBwb2ludHMgdGhhdCBkb24ndCBvcmlnaW5hdGUgaW4gYSBK
YXZhIGNhbGxzdGFjawotLy8gdGhyb3VnaCBhICJuYXRpdmUiIG1ldGhvZCBjYWxsKS4KLWNsYXNz
IFNjb3BlZExvY2FsUmVmRnJhbWUgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgU2NvcGVkTG9jYWxS
ZWZGcmFtZShKTklFbnYqIGpuaSk7Ci0gIH5TY29wZWRMb2NhbFJlZkZyYW1lKCk7Ci0KLSBwcml2
YXRlOgotICBKTklFbnYqIGpuaV87Ci19OwotCi0vLyBTY29wZWQgaG9sZGVyIGZvciBnbG9iYWwg
SmF2YSByZWZzLgotdGVtcGxhdGU8Y2xhc3MgVD4gIC8vIFQgaXMgamNsYXNzLCBqb2JqZWN0LCBq
aW50QXJyYXksIGV0Yy4KLWNsYXNzIFNjb3BlZEdsb2JhbFJlZiB7Ci0gcHVibGljOgotICBTY29w
ZWRHbG9iYWxSZWYoSk5JRW52KiBqbmksIFQgb2JqKQotICAgICAgOiBvYmpfKHN0YXRpY19jYXN0
PFQ+KGpuaS0+TmV3R2xvYmFsUmVmKG9iaikpKSB7fQotICB+U2NvcGVkR2xvYmFsUmVmKCkgewot
ICAgIERlbGV0ZUdsb2JhbFJlZihBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKSwgb2JqXyk7
Ci0gIH0KLSAgVCBvcGVyYXRvciooKSBjb25zdCB7Ci0gICAgcmV0dXJuIG9ial87Ci0gIH0KLSBw
cml2YXRlOgotICBUIG9ial87Ci19OwotCi0vLyBQcm92aWRlcyBhIGNvbnZlbmllbnQgd2F5IHRv
IGl0ZXJhdGUgb3ZlciBhIEphdmEgSXRlcmFibGUgdXNpbmcgdGhlCi0vLyBDKysgcmFuZ2UtZm9y
IGxvb3AuCi0vLyBFLmcuIGZvciAoam9iamVjdCB2YWx1ZSA6IEl0ZXJhYmxlKGpuaSwgal9pdGVy
YWJsZSkpIHsgLi4uIH0KLS8vIE5vdGU6IFNpbmNlIEphdmEgaXRlcmF0b3JzIGNhbm5vdCBiZSBk
dXBsaWNhdGVkLCB0aGUgaXRlcmF0b3IgY2xhc3MgaXMgbm90Ci0vLyBjb3B5YWJsZSB0byBwcmV2
ZW50IGNyZWF0aW5nIG11bHRpcGxlIEMrKyBpdGVyYXRvcnMgdGhhdCByZWZlciB0byB0aGUgc2Ft
ZQotLy8gSmF2YSBpdGVyYXRvci4KLWNsYXNzIEl0ZXJhYmxlIHsKLSBwdWJsaWM6Ci0gIEl0ZXJh
YmxlKEpOSUVudiogam5pLCBqb2JqZWN0IGl0ZXJhYmxlKSA6IGpuaV8oam5pKSwgaXRlcmFibGVf
KGl0ZXJhYmxlKSB7fQotCi0gIGNsYXNzIEl0ZXJhdG9yIHsKLSAgIHB1YmxpYzoKLSAgICAvLyBD
cmVhdGVzIGFuIGl0ZXJhdG9yIHJlcHJlc2VudGluZyB0aGUgZW5kIG9mIGFueSBjb2xsZWN0aW9u
LgotICAgIEl0ZXJhdG9yKCk7Ci0gICAgLy8gQ3JlYXRlcyBhbiBpdGVyYXRvciBwb2ludGluZyB0
byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzcGVjaWZpZWQKLSAgICAvLyBjb2xsZWN0aW9uLgotICAg
IEl0ZXJhdG9yKEpOSUVudiogam5pLCBqb2JqZWN0IGl0ZXJhYmxlKTsKLQotICAgIC8vIE1vdmUg
Y29uc3RydWN0b3IgLSBuZWNlc3NhcnkgdG8gYmUgYWJsZSB0byByZXR1cm4gaXRlcmF0b3IgdHlw
ZXMgZnJvbQotICAgIC8vIGZ1bmN0aW9ucy4KLSAgICBJdGVyYXRvcihJdGVyYXRvciYmIG90aGVy
KTsKLQotICAgIC8vIE1vdmUgYXNzaWdubWVudCBzaG91bGQgbm90IGJlIHVzZWQuCi0gICAgSXRl
cmF0b3ImIG9wZXJhdG9yPShJdGVyYXRvciYmKSA9IGRlbGV0ZTsKLQotICAgIC8vIEFkdmFuY2Vz
IHRoZSBpdGVyYXRvciBvbmUgc3RlcC4KLSAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpOwotCi0g
ICAgLy8gUHJvdmlkZXMgYSB3YXkgdG8gY29tcGFyZSB0aGUgaXRlcmF0b3Igd2l0aCBpdHNlbGYg
YW5kIHdpdGggdGhlIGVuZAotICAgIC8vIGl0ZXJhdG9yLgotICAgIC8vIE5vdGU6IGFsbCBvdGhl
ciBjb21wYXJpc29uIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCwganVzdCBsaWtlIGZvciBDKysgaW5w
dXQKLSAgICAvLyBpdGVyYXRvcnMuCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJhdG9y
JiBvdGhlcik7Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgeyBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7IH0KLSAgICBqb2JqZWN0IG9wZXJhdG9yKigpOwotCi0g
ICBwcml2YXRlOgotICAgIGJvb2wgQXRFbmQoKSBjb25zdDsKLQotICAgIEpOSUVudiogam5pXyA9
IG51bGxwdHI7Ci0gICAgam9iamVjdCBpdGVyYXRvcl8gPSBudWxscHRyOwotICAgIGpvYmplY3Qg
dmFsdWVfID0gbnVsbHB0cjsKLSAgICBqbWV0aG9kSUQgaGFzX25leHRfaWRfID0gbnVsbHB0cjsK
LSAgICBqbWV0aG9kSUQgbmV4dF9pZF8gPSBudWxscHRyOwotICAgIHJ0Yzo6VGhyZWFkQ2hlY2tl
ciB0aHJlYWRfY2hlY2tlcl87Ci0KLSAgICBSVENfRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKEl0
ZXJhdG9yKTsKLSAgfTsKLQotICBJdGVyYWJsZTo6SXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBJ
dGVyYWJsZTo6SXRlcmF0b3Ioam5pXywgaXRlcmFibGVfKTsgfQotICBJdGVyYWJsZTo6SXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gSXRlcmFibGU6Okl0ZXJhdG9yKCk7IH0KLQotIHByaXZhdGU6Ci0g
IEpOSUVudiogam5pXzsKLSAgam9iamVjdCBpdGVyYWJsZV87Ci0KLSAgUlRDX0RJU0FMTE9XX0NP
UFlfQU5EX0FTU0lHTihJdGVyYWJsZSk7Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2pu
aQotCi0jZW5kaWYgIC8vIFdFQlJUQ19BUElfSkFWQV9KTklfSk5JX0hFTFBFUlNfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2pu
aS9qbmlfb25sb2FkLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfb25sb2FkLmNjCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qbmkvam5pX29ubG9hZC5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDM4ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlIDxqbmkuaD4KLSN1bmRlZiBKTklFWFBPUlQK
LSNkZWZpbmUgSk5JRVhQT1JUIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkp
Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVy
LmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9iYXNlL3NzbGFkYXB0ZXIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkg
ewotCi1leHRlcm4gIkMiIGppbnQgSk5JRVhQT1JUIEpOSUNBTEwgSk5JX09uTG9hZChKYXZhVk0g
Kmp2bSwgdm9pZCAqcmVzZXJ2ZWQpIHsKLSAgamludCByZXQgPSBJbml0R2xvYmFsSm5pVmFyaWFi
bGVzKGp2bSk7Ci0gIFJUQ19EQ0hFQ0tfR0UocmV0LCAwKTsKLSAgaWYgKHJldCA8IDApCi0gICAg
cmV0dXJuIC0xOwotCi0gIFJUQ19DSEVDSyhydGM6OkluaXRpYWxpemVTU0woKSkgPDwgIkZhaWxl
ZCB0byBJbml0aWFsaXplU1NMKCkiOwotICBMb2FkR2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIo
KTsKLQotICByZXR1cm4gcmV0OwotfQotCi1leHRlcm4gIkMiIHZvaWQgSk5JRVhQT1JUIEpOSUNB
TEwgSk5JX09uVW5Mb2FkKEphdmFWTSAqanZtLCB2b2lkICpyZXNlcnZlZCkgewotICBGcmVlR2xv
YmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIoKTsKLSAgUlRDX0NIRUNLKHJ0Yzo6Q2xlYW51cFNTTCgp
KSA8PCAiRmFpbGVkIHRvIENsZWFudXBTU0woKSI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGNfam5pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmNjCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRp
dmVfaGFuZGxlX2ltcGwuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFuZGxlX2lt
cGwuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgi
Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5p
L2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYmluZC5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2tlZXBfcmVmX3Vu
dGlsX2RvbmUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVkZSAi
d2VicnRjL2Jhc2Uvc2NvcGVkX3JlZl9wdHIuaCIKLQotdXNpbmcgd2VicnRjOjpOYXRpdmVIYW5k
bGVCdWZmZXI7Ci0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotTWF0cml4OjpNYXRyaXgoSk5J
RW52KiBqbmksIGpmbG9hdEFycmF5IGEpIHsKLSAgUlRDX0NIRUNLX0VRKDE2LCBqbmktPkdldEFy
cmF5TGVuZ3RoKGEpKTsKLSAgamZsb2F0KiBwdHIgPSBqbmktPkdldEZsb2F0QXJyYXlFbGVtZW50
cyhhLCBudWxscHRyKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgKytpKSB7Ci0gICAgZWxl
bV9baV0gPSBwdHJbaV07Ci0gIH0KLSAgam5pLT5SZWxlYXNlRmxvYXRBcnJheUVsZW1lbnRzKGEs
IHB0ciwgMCk7Ci19Ci0KLWpmbG9hdEFycmF5IE1hdHJpeDo6VG9KYXZhKEpOSUVudiogam5pKSB7
Ci0gIGpmbG9hdEFycmF5IG1hdHJpeCA9IGpuaS0+TmV3RmxvYXRBcnJheSgxNik7Ci0gIGpuaS0+
U2V0RmxvYXRBcnJheVJlZ2lvbihtYXRyaXgsIDAsIDE2LCBlbGVtXyk7Ci0gIHJldHVybiBtYXRy
aXg7Ci19Ci0KLXZvaWQgTWF0cml4OjpSb3RhdGUod2VicnRjOjpWaWRlb1JvdGF0aW9uIHJvdGF0
aW9uKSB7Ci0gIC8vIFRleHR1cmUgY29vcmRpbmF0ZXMgYXJlIGluIHRoZSByYW5nZSAwIHRvIDEu
IFRoZSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgbGFzdAotICAvLyByb3cgaW4gZWFjaCByb3RhdGlv
biBtYXRyaXggaXMgbmVlZGVkIGZvciBwcm9wZXIgdHJhbnNsYXRpb24sIGUuZywgdG8KLSAgLy8g
bWlycm9yIHgsIHdlIGRvbid0IHJlcGxhY2UgeCBieSAteCwgYnV0IGJ5IDEteC4KLSAgc3dpdGNo
IChyb3RhdGlvbikgewotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wOgotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzkwOiB7Ci0gICAgICBjb25z
dCBmbG9hdCBST1RBVEVfOTBbMTZdID0KLSAgICAgICAgICB7IGVsZW1fWzRdLCBlbGVtX1s1XSwg
ZWxlbV9bNl0sIGVsZW1fWzddLAotICAgICAgICAgICAgLWVsZW1fWzBdLCAtZWxlbV9bMV0sIC1l
bGVtX1syXSwgLWVsZW1fWzNdLAotICAgICAgICAgICAgZWxlbV9bOF0sIGVsZW1fWzldLCBlbGVt
X1sxMF0sIGVsZW1fWzExXSwKLSAgICAgICAgICAgIGVsZW1fWzBdICsgZWxlbV9bMTJdLCBlbGVt
X1sxXSArIGVsZW1fWzEzXSwKLSAgICAgICAgICAgIGVsZW1fWzJdICsgZWxlbV9bMTRdLCBlbGVt
X1szXSArIGVsZW1fWzE1XX07Ci0gICAgICBtZW1jcHkoZWxlbV8sIFJPVEFURV85MCwgc2l6ZW9m
KGVsZW1fKSk7Ci0gICAgfSBicmVhazsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25f
MTgwOiB7Ci0gICAgICBjb25zdCBmbG9hdCBST1RBVEVfMTgwWzE2XSA9Ci0gICAgICAgICAgeyAt
ZWxlbV9bMF0sIC1lbGVtX1sxXSwgLWVsZW1fWzJdLCAtZWxlbV9bM10sCi0gICAgICAgICAgICAt
ZWxlbV9bNF0sIC1lbGVtX1s1XSwgLWVsZW1fWzZdLCAtZWxlbV9bN10sCi0gICAgICAgICAgICBl
bGVtX1s4XSwgZWxlbV9bOV0sIGVsZW1fWzEwXSwgZWxlbV9bMTFdLAotICAgICAgICAgICAgZWxl
bV9bMF0gKyBlbGVtX1s0XSArIGVsZW1fWzEyXSwgZWxlbV9bMV0gKyBlbGVtX1s1XSArIGVsZW1f
WzEzXSwKLSAgICAgICAgICAgIGVsZW1fWzJdICsgZWxlbV9bNl0gKyBlbGVtX1sxNF0sIGVsZW1f
WzNdICsgZWxlbV9bMTFdKyBlbGVtX1sxNV19OwotICAgICAgICBtZW1jcHkoZWxlbV8sIFJPVEFU
RV8xODAsIHNpemVvZihlbGVtXykpOwotICAgIH0gYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtW
aWRlb1JvdGF0aW9uXzI3MDogewotICAgICAgY29uc3QgZmxvYXQgUk9UQVRFXzI3MFsxNl0gPQot
ICAgICAgICAgIHsgLWVsZW1fWzRdLCAtZWxlbV9bNV0sIC1lbGVtX1s2XSwgLWVsZW1fWzddLAot
ICAgICAgICAgICAgZWxlbV9bMF0sIGVsZW1fWzFdLCBlbGVtX1syXSwgZWxlbV9bM10sCi0gICAg
ICAgICAgICBlbGVtX1s4XSwgZWxlbV9bOV0sIGVsZW1fWzEwXSwgZWxlbV9bMTFdLAotICAgICAg
ICAgICAgZWxlbV9bNF0gKyBlbGVtX1sxMl0sIGVsZW1fWzVdICsgZWxlbV9bMTNdLAotICAgICAg
ICAgICAgZWxlbV9bNl0gKyBlbGVtX1sxNF0sIGVsZW1fWzddICsgZWxlbV9bMTVdfTsKLSAgICAg
IG1lbWNweShlbGVtXywgUk9UQVRFXzI3MCwgc2l6ZW9mKGVsZW1fKSk7Ci0gICAgfSBicmVhazsK
LSAgfQotfQotCi0vLyBDYWxjdWxhdGVzIHJlc3VsdCA9IGEgKiBiLCBpbiBjb2x1bW4tbWFqb3Ig
b3JkZXIuCi12b2lkIE1hdHJpeDo6TXVsdGlwbHkoY29uc3QgZmxvYXQgYVsxNl0sIGNvbnN0IGZs
b2F0IGJbMTZdLCBmbG9hdCByZXN1bHRbMTZdKSB7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgNDsg
KytpKSB7Ci0gICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyArK2opIHsKLSAgICAgIGZsb2F0IHN1
bSA9IDA7Ci0gICAgICBmb3IgKGludCBrID0gMDsgayA8IDQ7ICsraykgewotICAgICAgICBzdW0g
Kz0gYVtrICogNCArIGpdICogYltpICogNCArIGtdOwotICAgICAgfQotICAgICAgcmVzdWx0W2kg
KiA0ICsgal0gPSBzdW07Ci0gICAgfQotICB9Ci19Ci0KLS8vIENlbnRlciBjcm9wIGJ5IGtlZXBp
bmcgeEZyYWN0aW9uIG9mIHRoZSB3aWR0aCBhbmQgeUZyYWN0aW9uIG9mIHRoZSBoZWlnaHQsCi0v
LyBzbyBlLmcuIGNyb3BwaW5nIGZyb20gNjQweDQ4MCB0byA2NDB4MzYwIHdvdWxkIHVzZQotLy8g
eEZyYWN0aW9uPTEsIHlGcmFjdGlvbj0zNjAvNDgwLgotdm9pZCBNYXRyaXg6OkNyb3AoZmxvYXQg
eEZyYWN0aW9uLAotICAgICAgICAgICAgICAgICAgZmxvYXQgeUZyYWN0aW9uLAotICAgICAgICAg
ICAgICAgICAgZmxvYXQgeE9mZnNldCwKLSAgICAgICAgICAgICAgICAgIGZsb2F0IHlPZmZzZXQp
IHsKLSAgY29uc3QgZmxvYXQgY3JvcF9tYXRyaXhbMTZdID0KLSAgICAgIHt4RnJhY3Rpb24sIDAs
IDAsIDAsCi0gICAgICAgMCwgeUZyYWN0aW9uLCAwLCAwLAotICAgICAgIDAsIDAsIDEsIDAsCi0g
ICAgICAgeE9mZnNldCwgeU9mZnNldCwgMCwgMX07Ci0gIGNvbnN0IE1hdHJpeCBvbGQgPSAqdGhp
czsKLSAgTXVsdGlwbHkoY3JvcF9tYXRyaXgsIG9sZC5lbGVtXywgdGhpcy0+ZWxlbV8pOwotfQot
Ci0vLyBBbGlnbmluZyBwb2ludGVyIHRvIDY0IGJ5dGVzIGZvciBpbXByb3ZlZCBwZXJmb3JtYW5j
ZSwgZS5nLiB1c2UgU0lNRC4KLXN0YXRpYyBjb25zdCBpbnQga0J1ZmZlckFsaWdubWVudCA9IDY0
OwotCi1OYXRpdmVIYW5kbGVJbXBsOjpOYXRpdmVIYW5kbGVJbXBsKGludCBpZCwgY29uc3QgTWF0
cml4JiBtYXRyaXgpCi0gICAgOiBvZXNfdGV4dHVyZV9pZChpZCksIHNhbXBsaW5nX21hdHJpeCht
YXRyaXgpIHt9Ci0KLU5hdGl2ZUhhbmRsZUltcGw6Ok5hdGl2ZUhhbmRsZUltcGwoSk5JRW52KiBq
bmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgal9vZXNfdGV4dHVy
ZV9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamZsb2F0QXJyYXkgal90
cmFuc2Zvcm1fbWF0cml4KQotICAgIDogb2VzX3RleHR1cmVfaWQoal9vZXNfdGV4dHVyZV9pZCks
Ci0gICAgICBzYW1wbGluZ19tYXRyaXgoam5pLCBqX3RyYW5zZm9ybV9tYXRyaXgpIHt9Ci0KLUFu
ZHJvaWRUZXh0dXJlQnVmZmVyOjpBbmRyb2lkVGV4dHVyZUJ1ZmZlcigKLSAgICBpbnQgd2lkdGgs
Ci0gICAgaW50IGhlaWdodCwKLSAgICBjb25zdCBOYXRpdmVIYW5kbGVJbXBsJiBuYXRpdmVfaGFu
ZGxlLAotICAgIGpvYmplY3Qgc3VyZmFjZV90ZXh0dXJlX2hlbHBlciwKLSAgICBjb25zdCBydGM6
OkNhbGxiYWNrMDx2b2lkPiYgbm9fbG9uZ2VyX3VzZWQpCi0gICAgOiB3ZWJydGM6Ok5hdGl2ZUhh
bmRsZUJ1ZmZlcigmbmF0aXZlX2hhbmRsZV8sIHdpZHRoLCBoZWlnaHQpLAotICAgICAgbmF0aXZl
X2hhbmRsZV8obmF0aXZlX2hhbmRsZSksCi0gICAgICBzdXJmYWNlX3RleHR1cmVfaGVscGVyXyhz
dXJmYWNlX3RleHR1cmVfaGVscGVyKSwKLSAgICAgIG5vX2xvbmdlcl91c2VkX2NiXyhub19sb25n
ZXJfdXNlZCkge30KLQotQW5kcm9pZFRleHR1cmVCdWZmZXI6On5BbmRyb2lkVGV4dHVyZUJ1ZmZl
cigpIHsKLSAgbm9fbG9uZ2VyX3VzZWRfY2JfKCk7Ci19Ci0KLXJ0Yzo6c2NvcGVkX3JlZnB0cjx3
ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+Ci1BbmRyb2lkVGV4dHVyZUJ1ZmZlcjo6TmF0aXZlVG9J
NDIwQnVmZmVyKCkgewotICBpbnQgdXZfd2lkdGggPSAod2lkdGgoKSs3KSAvIDg7Ci0gIGludCBz
dHJpZGUgPSA4ICogdXZfd2lkdGg7Ci0gIGludCB1dl9oZWlnaHQgPSAoaGVpZ2h0KCkrMSkvMjsK
LSAgc2l6ZV90IHNpemUgPSBzdHJpZGUgKiAoaGVpZ2h0KCkgKyB1dl9oZWlnaHQpOwotICAvLyBU
aGUgZGF0YSBpcyBvd25lZCBieSB0aGUgZnJhbWUsIGFuZCB0aGUgbm9ybWFsIGNhc2UgaXMgdGhh
dCB0aGUKLSAgLy8gZGF0YSBpcyBkZWxldGVkIGJ5IHRoZSBmcmFtZSdzIGRlc3RydWN0b3IgY2Fs
bGJhY2suCi0gIC8vCi0gIC8vIFRPRE8obmlzc2UpOiBVc2UgYW4gSTQyMEJ1ZmZlclBvb2wuIFdl
IHRoZW4gbmVlZCB0byBleHRlbmQgdGhhdAotICAvLyBjbGFzcywgYW5kIEk0MjBCdWZmZXIsIHRv
IHN1cHBvcnQgb3VyIG1lbW9yeSBsYXlvdXQuCi0gIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90LCB3
ZWJydGM6OkFsaWduZWRGcmVlRGVsZXRlcj4geXV2X2RhdGEoCi0gICAgICBzdGF0aWNfY2FzdDx1
aW50OF90Kj4od2VicnRjOjpBbGlnbmVkTWFsbG9jKHNpemUsIGtCdWZmZXJBbGlnbm1lbnQpKSk7
Ci0gIC8vIFNlZSBZdXZDb252ZXJ0ZXIuamF2YSBmb3IgdGhlIHJlcXVpcmVkIGxheW91dC4KLSAg
dWludDhfdCogeV9kYXRhID0geXV2X2RhdGEuZ2V0KCk7Ci0gIHVpbnQ4X3QqIHVfZGF0YSA9IHlf
ZGF0YSArIGhlaWdodCgpICogc3RyaWRlOwotICB1aW50OF90KiB2X2RhdGEgPSB1X2RhdGEgKyBz
dHJpZGUvMjsKLQotICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVy
PiBjb3B5ID0KLSAgICBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6V3JhcHBlZEk0
MjBCdWZmZXI+KAotICAgICAgICB3aWR0aCgpLCBoZWlnaHQoKSwKLSAgICAgICAgeV9kYXRhLCBz
dHJpZGUsCi0gICAgICAgIHVfZGF0YSwgc3RyaWRlLAotICAgICAgICB2X2RhdGEsIHN0cmlkZSwK
LSAgICAgICAgcnRjOjpCaW5kKCZ3ZWJydGM6OkFsaWduZWRGcmVlLCB5dXZfZGF0YS5yZWxlYXNl
KCkpKTsKLQotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwot
ICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotCi0gIGptZXRob2RJ
RCB0cmFuc2Zvcm1fbWlkID0gR2V0TWV0aG9kSUQoCi0gICAgICBqbmksCi0gICAgICBHZXRPYmpl
Y3RDbGFzcyhqbmksIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfKSwKLSAgICAgICJ0ZXh0dXJlVG9Z
VVYiLAotICAgICAgIihMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtJSUlJW0YpViIpOwotCi0gIGpvYmpl
Y3QgYnl0ZV9idWZmZXIgPSBqbmktPk5ld0RpcmVjdEJ5dGVCdWZmZXIoeV9kYXRhLCBzaXplKTsK
LQotICBqZmxvYXRBcnJheSBzYW1wbGluZ19tYXRyaXggPSBuYXRpdmVfaGFuZGxlXy5zYW1wbGlu
Z19tYXRyaXguVG9KYXZhKGpuaSk7Ci0gIGpuaS0+Q2FsbFZvaWRNZXRob2Qoc3VyZmFjZV90ZXh0
dXJlX2hlbHBlcl8sCi0gICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtX21pZCwKLSAgICAg
ICAgICAgICAgICAgICAgICBieXRlX2J1ZmZlciwgd2lkdGgoKSwgaGVpZ2h0KCksIHN0cmlkZSwK
LSAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfaGFuZGxlXy5vZXNfdGV4dHVyZV9pZCwgc2Ft
cGxpbmdfbWF0cml4KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgInRleHR1cmVUb1lVViB0
aHJvd2VkIGFuIGV4Y2VwdGlvbiI7Ci0KLSAgcmV0dXJuIGNvcHk7Ci19Ci0KLXJ0Yzo6c2NvcGVk
X3JlZnB0cjxBbmRyb2lkVGV4dHVyZUJ1ZmZlcj4KLUFuZHJvaWRUZXh0dXJlQnVmZmVyOjpDcm9w
U2NhbGVBbmRSb3RhdGUoaW50IGNyb3BwZWRfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBjcm9wcGVkX2hlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNyb3BfeCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGNyb3BfeSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRzdF93aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRzdF9oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbikgewotICBp
ZiAoY3JvcHBlZF93aWR0aCA9PSBkc3Rfd2lkdGggJiYgY3JvcHBlZF9oZWlnaHQgPT0gZHN0X2hl
aWdodCAmJgotICAgICAgd2lkdGgoKSA9PSBkc3Rfd2lkdGggJiYgaGVpZ2h0KCkgPT0gZHN0X2hl
aWdodCAmJgotICAgICAgcm90YXRpb24gPT0gd2VicnRjOjprVmlkZW9Sb3RhdGlvbl8wKSB7Ci0g
ICAgcmV0dXJuIHRoaXM7Ci0gIH0KLSAgaW50IHJvdGF0ZWRfd2lkdGggPSAocm90YXRpb24gJSAx
ODAgPT0gMCkgPyBkc3Rfd2lkdGggOiBkc3RfaGVpZ2h0OwotICBpbnQgcm90YXRlZF9oZWlnaHQg
PSAocm90YXRpb24gJSAxODAgPT0gMCkgPyBkc3RfaGVpZ2h0IDogZHN0X3dpZHRoOwotCi0gIC8v
IEhlcmUgd2UgdXNlIEJpbmQgbWFnaWMgdG8gYWRkIGEgcmVmZXJlbmNlIGNvdW50IHRvIHx0aGlz
fCB1bnRpbCB0aGUgbmV3bHkKLSAgLy8gY3JlYXRlZCBBbmRyb2lkVGV4dHVyZUJ1ZmZlciBpcyBk
ZXN0cnVjdGVkCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBbmRyb2lkVGV4dHVyZUJ1ZmZlcj4gYnVm
ZmVyKAotICAgICAgbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxBbmRyb2lkVGV4dHVyZUJ1ZmZl
cj4oCi0gICAgICAgICAgcm90YXRlZF93aWR0aCwgcm90YXRlZF9oZWlnaHQsIG5hdGl2ZV9oYW5k
bGVfLAotICAgICAgICAgIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfLCBydGM6OktlZXBSZWZVbnRp
bERvbmUodGhpcykpKTsKLQotICBpZiAoY3JvcHBlZF93aWR0aCAhPSB3aWR0aCgpIHx8IGNyb3Bw
ZWRfaGVpZ2h0ICE9IGhlaWdodCgpKSB7Ci0gICAgYnVmZmVyLT5uYXRpdmVfaGFuZGxlXy5zYW1w
bGluZ19tYXRyaXguQ3JvcCgKLSAgICAgICAgY3JvcHBlZF93aWR0aCAvIHN0YXRpY19jYXN0PGZs
b2F0Pih3aWR0aCgpKSwKLSAgICAgICAgY3JvcHBlZF9oZWlnaHQgLyBzdGF0aWNfY2FzdDxmbG9h
dD4oaGVpZ2h0KCkpLAotICAgICAgICBjcm9wX3ggLyBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgo
KSksCi0gICAgICAgIGNyb3BfeSAvIHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQoKSkpOwotICB9
Ci0gIGJ1ZmZlci0+bmF0aXZlX2hhbmRsZV8uc2FtcGxpbmdfbWF0cml4LlJvdGF0ZShyb3RhdGlv
bik7Ci0gIHJldHVybiBidWZmZXI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVf
aW1wbC5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgJKG5vbmV4
aXN0ZW50KQpAQCAtMSw4NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdF
QlJUQ19BUElfSkFWQV9KTklfTkFUSVZFX0hBTkRMRV9JTVBMX0hfCi0jZGVmaW5lIFdFQlJUQ19B
UElfSkFWQV9KTklfTkFUSVZFX0hBTkRMRV9JTVBMX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLQot
I2luY2x1ZGUgIndlYnJ0Yy9jb21tb25fdmlkZW8vaW5jbHVkZS92aWRlb19mcmFtZV9idWZmZXIu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvY29tbW9uX3ZpZGVvL3JvdGF0aW9uLmgiCi0KLW5hbWVzcGFj
ZSB3ZWJydGNfam5pIHsKLQotLy8gT3BlbiBnbCB0ZXh0dXJlIG1hdHJpeCwgaW4gY29sdW1uLW1h
am9yIG9yZGVyLiBPcGVyYXRpb25zIGFyZQotLy8gaW4tcGxhY2UuCi1jbGFzcyBNYXRyaXggewot
IHB1YmxpYzoKLSAgTWF0cml4KEpOSUVudiogam5pLCBqZmxvYXRBcnJheSBhKTsKLQotICBqZmxv
YXRBcnJheSBUb0phdmEoSk5JRW52KiBqbmkpOwotCi0gIC8vIENyb3AgYXJndW1lbnRzIGFyZSBy
ZWxhdGl2ZSB0byBvcmlnaW5hbCBzaXplLgotICB2b2lkIENyb3AoZmxvYXQgY3JvcHBlZF93aWR0
aCwKLSAgICAgICAgICAgIGZsb2F0IGNyb3BwZWRfaGVpZ2h0LAotICAgICAgICAgICAgZmxvYXQg
Y3JvcF94LAotICAgICAgICAgICAgZmxvYXQgY3JvcF95KTsKLQotICB2b2lkIFJvdGF0ZSh3ZWJy
dGM6OlZpZGVvUm90YXRpb24gcm90YXRpb24pOwotCi0gcHJpdmF0ZToKLSAgc3RhdGljIHZvaWQg
TXVsdGlwbHkoY29uc3QgZmxvYXQgYVsxNl0sIGNvbnN0IGZsb2F0IGJbMTZdLCBmbG9hdCByZXN1
bHRbMTZdKTsKLSAgZmxvYXQgZWxlbV9bMTZdOwotfTsKLQotLy8gV3JhcHBlciBmb3IgdGV4dHVy
ZSBvYmplY3QuCi1zdHJ1Y3QgTmF0aXZlSGFuZGxlSW1wbCB7Ci0gIE5hdGl2ZUhhbmRsZUltcGwo
Sk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgamludCBqX29lc190ZXh0dXJlX2lkLAot
ICAgICAgICAgICAgICAgICAgIGpmbG9hdEFycmF5IGpfdHJhbnNmb3JtX21hdHJpeCk7Ci0KLSAg
TmF0aXZlSGFuZGxlSW1wbChpbnQgaWQsIGNvbnN0IE1hdHJpeCYgbWF0cml4KTsKLQotICBjb25z
dCBpbnQgb2VzX3RleHR1cmVfaWQ7Ci0gIE1hdHJpeCBzYW1wbGluZ19tYXRyaXg7Ci19OwotCi1j
bGFzcyBBbmRyb2lkVGV4dHVyZUJ1ZmZlciA6IHB1YmxpYyB3ZWJydGM6Ok5hdGl2ZUhhbmRsZUJ1
ZmZlciB7Ci0gcHVibGljOgotICBBbmRyb2lkVGV4dHVyZUJ1ZmZlcihpbnQgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgIGludCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE5hdGl2ZUhhbmRsZUltcGwmIG5hdGl2ZV9oYW5kbGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgIGpvYmplY3Qgc3VyZmFjZV90ZXh0dXJlX2hlbHBlciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgcnRjOjpDYWxsYmFjazA8dm9pZD4mIG5vX2xvbmdlcl91c2VkKTsKLSAgfkFuZHJv
aWRUZXh0dXJlQnVmZmVyKCk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxWaWRlb0ZyYW1lQnVmZmVy
PiBOYXRpdmVUb0k0MjBCdWZmZXIoKSBvdmVycmlkZTsKLQotICAvLyBGaXJzdCBjcm9wLCB0aGVu
IHNjYWxlIHRvIGRzdCByZXNvbHV0aW9uLCBhbmQgdGhlbiByb3RhdGUuCi0gIHJ0Yzo6c2NvcGVk
X3JlZnB0cjxBbmRyb2lkVGV4dHVyZUJ1ZmZlcj4gQ3JvcFNjYWxlQW5kUm90YXRlKAotICAgICAg
aW50IGNyb3BwZWRfd2lkdGgsCi0gICAgICBpbnQgY3JvcHBlZF9oZWlnaHQsCi0gICAgICBpbnQg
Y3JvcF94LAotICAgICAgaW50IGNyb3BfeSwKLSAgICAgIGludCBkc3Rfd2lkdGgsCi0gICAgICBp
bnQgZHN0X2hlaWdodCwKLSAgICAgIHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiByb3RhdGlvbik7Ci0K
LSBwcml2YXRlOgotICBOYXRpdmVIYW5kbGVJbXBsIG5hdGl2ZV9oYW5kbGVfOwotICAvLyBSYXcg
b2JqZWN0IHBvaW50ZXIsIHJlbHlpbmcgb24gdGhlIGNhbGxlciwgaS5lLiwKLSAgLy8gQW5kcm9p
ZFZpZGVvQ2FwdHVyZXJKbmkgb3IgdGhlIEMrKyBTdXJmYWNlVGV4dHVyZUhlbHBlciwgdG8ga2Vl
cAotICAvLyBhIGdsb2JhbCByZWZlcmVuY2UuIFRPRE8obmlzc2UpOiBNYWtlIHRoaXMgYSByZWZl
cmVuY2UgdG8gdGhlIEMrKwotICAvLyBTdXJmYWNlVGV4dHVyZUhlbHBlciBpbnN0ZWFkLCBidXQg
dGhhdCByZXF1aXJlcyBzb21lIHJlZmFjdG9yaW5nCi0gIC8vIG9mIEFuZHJvaWRWaWRlb0NhcHR1
cmVySm5pLgotICBqb2JqZWN0IHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfOwotICBydGM6OkNhbGxi
YWNrMDx2b2lkPiBub19sb25nZXJfdXNlZF9jYl87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2Vi
cnRjX2puaQotCi0jZW5kaWYgIC8vIFdFQlJUQ19BUElfSkFWQV9KTklfTkFUSVZFX0hBTkRMRV9J
TVBMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvcGVlcmNvbm5lY3Rpb25fam5pLmNjCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9wZWVy
Y29ubmVjdGlvbl9qbmkuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9wZWVyY29ubmVjdGlvbl9q
bmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNDE0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLS8vIEhpbnRzIGZvciBmdXR1cmUgdmlzaXRvcnM6Ci0vLyBUaGlzIGVudGlyZSBmaWxlIGlz
IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgb3JnLndlYnJ0YyBKYXZhIHBhY2thZ2Us
Ci0vLyB0aGUgbW9zdCBpbnRlcmVzdGluZyBiaXRzIG9mIHdoaWNoIGFyZSBvcmcud2VicnRjLlBl
ZXJDb25uZWN0aW9ueyxGYWN0b3J5fS4KLS8vIFRoZSBsYXlvdXQgb2YgdGhpcyBmaWxlIGlzIHJv
dWdobHk6Ci0vLyAtIHZhcmlvdXMgaGVscGVyIEMrKyBmdW5jdGlvbnMgJiBjbGFzc2VzIHRoYXQg
d3JhcCBKYXZhIGNvdW50ZXJwYXJ0cyBhbmQKLS8vICAgZXhwb3NlIGEgQysrIGludGVyZmFjZSB0
aGF0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIEMrKyBQZWVyQ29ubmVjdGlvbiBBUElzCi0vLyAtIGlt
cGxlbWVudGF0aW9ucyBvZiBtZXRob2RzIGRlY2xhcmVkICJzdGF0aWMiIGluIHRoZSBKYXZhIHBh
Y2thZ2UgKG5hbWVkCi0vLyAgIHRoaW5ncyBsaWtlIEphdmFfb3JnX3dlYnJ0Y19PTUdfQ2FuX1Ro
aXNfTmFtZV9CZV9BbnlfTG9uZ2VyLCBwcmVzY3JpYmVkIGJ5Ci0vLyAgIHRoZSBKTkkgc3BlYyku
Ci0vLwotLy8gTGlmZWN5Y2xlIG5vdGVzOiBvYmplY3RzIGFyZSBvd25lZCB3aGVyZSB0aGV5IHdp
bGwgYmUgY2FsbGVkOyBpbiBvdGhlciB3b3JkcwotLy8gRm9vT2JzZXJ2ZXJzIGFyZSBvd25lZCBi
eSBDKystbGFuZCwgYW5kIHVzZXItY2FsbGFibGUgb2JqZWN0cyAoZS5nLgotLy8gUGVlckNvbm5l
Y3Rpb24gYW5kIFZpZGVvVHJhY2spIGFyZSBvd25lZCBieSBKYXZhLWxhbmQuCi0vLyBXaGVuIHRo
aXMgZmlsZSBhbGxvY2F0ZXMgQysrIFJlZkNvdW50SW50ZXJmYWNlcyBpdCBBZGRSZWYoKXMgYW4g
YXJ0aWZpY2lhbAotLy8gcmVmIHNpbXVsYXRpbmcgdGhlIGpsb25nIGhlbGQgaW4gSmF2YS1sYW5k
LCBhbmQgdGhlbiBSZWxlYXNlKClzIHRoZSByZWYgaW4KLS8vIHRoZSByZXNwZWN0aXZlIGZyZWUg
Y2FsbC4gIFNvbWV0aW1lcyB0aGlzIEFkZFJlZiBpcyBpbXBsaWNpdCBpbiB0aGUKLS8vIGNvbnN0
cnVjdGlvbiBvZiBhIHNjb3BlZF9yZWZwdHI8PiB3aGljaCBpcyB0aGVuIC5yZWxlYXNlKClkLgot
Ly8gQW55IHBlcnNpc3RlbnQgKG5vbi1sb2NhbCkgcmVmZXJlbmNlcyBmcm9tIEMrKyB0byBKYXZh
IG11c3QgYmUgZ2xvYmFsIG9yIHdlYWsKLS8vIChpbiB3aGljaCBjYXNlIHRoZXkgbXVzdCBiZSBj
aGVja2VkIGJlZm9yZSB1c2UpIQotLy8KLS8vIEV4Y2VwdGlvbiBub3RlczogcHJldHR5IG11Y2gg
YWxsIEpOSSBjYWxscyBjYW4gdGhyb3cgSmF2YSBleGNlcHRpb25zLCBzbyBlYWNoCi0vLyBjYWxs
IHRocm91Z2ggYSBKTklFbnYqIHBvaW50ZXIgbmVlZHMgdG8gYmUgZm9sbG93ZWQgYnkgYW4gRXhj
ZXB0aW9uQ2hlY2soKQotLy8gY2FsbC4gIEluIHRoaXMgZmlsZSB0aGlzIGlzIGRvbmUgaW4gQ0hF
Q0tfRVhDRVBUSU9OLCBtYWtpbmcgZm9yIG11Y2ggZWFzaWVyCi0vLyBkZWJ1Z2dpbmcgaW4gY2Fz
ZSBvZiBmYWlsdXJlICh0aGUgYWx0ZXJuYXRpdmUgaXMgdG8gd2FpdCBmb3IgY29udHJvbCB0bwot
Ly8gcmV0dXJuIHRvIHRoZSBKYXZhIGZyYW1lIHRoYXQgY2FsbGVkIGNvZGUgaW4gdGhpcyBmaWxl
LCBhdCB3aGljaCBwb2ludCBpdCdzCi0vLyBpbXBvc3NpYmxlIHRvIHRlbGwgd2hpY2ggSk5JIGNh
bGwgYnJva2UpLgotCi0jaW5jbHVkZSA8am5pLmg+Ci0jdW5kZWYgSk5JRVhQT1JUCi0jZGVmaW5l
IEpOSUVYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQotCi0jaW5j
bHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0j
aW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUvbGlieXV2L2NvbnZlcnRfZnJvbS5o
IgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di9zY2FsZS5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZHZpZGVvdHJhY2tzb3VyY2UuaCIKLSNpbmNsdWRl
ICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29kZXJfam5pLmgiCi0jaW5j
bHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFlbmNvZGVyX2puaS5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG5ldHdvcmttb25pdG9yX2pu
aS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xk
ZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0j
aW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFuZGxlX2ltcGwuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvYXBpL21lZGlhY29uc3RyYWludHNpbnRlcmZhY2UuaCIKLSNpbmNsdWRl
ICJ3ZWJydGMvYXBpL3BlZXJjb25uZWN0aW9uaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAid2VicnRj
L2FwaS9ydHByZWNlaXZlcmludGVyZmFjZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvcnRwc2Vu
ZGVyaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS92aWRlb3NvdXJjZXByb3h5Lmgi
Ci0jaW5jbHVkZSAid2VicnRjL2FwaS93ZWJydGNzZHAuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFz
ZS9iaW5kLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAid2Vi
cnRjL2Jhc2UvZXZlbnRfdHJhY2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvbG9nZ2luZy5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2xvZ3NpbmtzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jh
c2UvbWVzc2FnZXF1ZXVlLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvbmV0d29ya21vbml0b3Iu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9ydGNjZXJ0aWZpY2F0ZWdlbmVyYXRvci5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9iYXNlL3NzbGFkYXB0ZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9z
dHJpbmd1dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tZWRpYS9iYXNlL3ZpZGVvY2FwdHVyZXIu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0Y3ZpZGVvZGVjb2RlcmZhY3Rv
cnkuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbWVkaWEvZW5naW5lL3dlYnJ0Y3ZpZGVvZW5jb2RlcmZh
Y3RvcnkuaCIKLSNpbmNsdWRlICJ3ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvZmllbGRf
dHJpYWxfZGVmYXVsdC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBlcnMvaW5jbHVk
ZS9sb2djYXRfdHJhY2VfY29udGV4dC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBl
cnMvaW5jbHVkZS90cmFjZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy92b2ljZV9lbmdpbmUvaW5jbHVk
ZS92b2VfYmFzZS5oIgotCi11c2luZyBjcmlja2V0OjpXZWJSdGNWaWRlb0RlY29kZXJGYWN0b3J5
OwotdXNpbmcgY3JpY2tldDo6V2ViUnRjVmlkZW9FbmNvZGVyRmFjdG9yeTsKLXVzaW5nIHJ0Yzo6
QmluZDsKLXVzaW5nIHJ0Yzo6VGhyZWFkOwotdXNpbmcgcnRjOjpUaHJlYWRNYW5hZ2VyOwotdXNp
bmcgd2VicnRjOjpBdWRpb1NvdXJjZUludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6QXVkaW9UcmFj
a0ludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6QXVkaW9UcmFja1ZlY3RvcjsKLXVzaW5nIHdlYnJ0
Yzo6Q3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uT2JzZXJ2ZXI7Ci11c2luZyB3ZWJydGM6OkRhdGFC
dWZmZXI7Ci11c2luZyB3ZWJydGM6OkRhdGFDaGFubmVsSW5pdDsKLXVzaW5nIHdlYnJ0Yzo6RGF0
YUNoYW5uZWxJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OkRhdGFDaGFubmVsT2JzZXJ2ZXI7Ci11
c2luZyB3ZWJydGM6OkljZUNhbmRpZGF0ZUludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6TG9nY2F0
VHJhY2VDb250ZXh0OwotdXNpbmcgd2VicnRjOjpNZWRpYUNvbnN0cmFpbnRzSW50ZXJmYWNlOwot
dXNpbmcgd2VicnRjOjpNZWRpYVNvdXJjZUludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6TWVkaWFT
dHJlYW1JbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6Ok1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2U7
Ci11c2luZyB3ZWJydGM6OlBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZTsKLXVzaW5nIHdl
YnJ0Yzo6UGVlckNvbm5lY3Rpb25JbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OlBlZXJDb25uZWN0
aW9uT2JzZXJ2ZXI7Ci11c2luZyB3ZWJydGM6OlJ0cFJlY2VpdmVySW50ZXJmYWNlOwotdXNpbmcg
d2VicnRjOjpSdHBTZW5kZXJJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OlNlc3Npb25EZXNjcmlw
dGlvbkludGVyZmFjZTsKLXVzaW5nIHdlYnJ0Yzo6U2V0U2Vzc2lvbkRlc2NyaXB0aW9uT2JzZXJ2
ZXI7Ci11c2luZyB3ZWJydGM6OlN0YXRzT2JzZXJ2ZXI7Ci11c2luZyB3ZWJydGM6OlN0YXRzUmVw
b3J0OwotdXNpbmcgd2VicnRjOjpTdGF0c1JlcG9ydHM7Ci11c2luZyB3ZWJydGM6OlZpZGVvVHJh
Y2tTb3VyY2VJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OlZpZGVvVHJhY2tJbnRlcmZhY2U7Ci11
c2luZyB3ZWJydGM6OlZpZGVvVHJhY2tWZWN0b3I7Ci11c2luZyB3ZWJydGM6OmtWaWRlb0NvZGVj
VlA4OwotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIEZpZWxkIHRyaWFscyBpbml0aWFs
aXphdGlvbiBzdHJpbmcKLXN0YXRpYyBjaGFyICpmaWVsZF90cmlhbHNfaW5pdF9zdHJpbmcgPSBO
VUxMOwotCi0vLyBTZXQgaW4gUGVlckNvbm5lY3Rpb25GYWN0b3J5X2luaXRpYWxpemVBbmRyb2lk
R2xvYmFscygpLgotc3RhdGljIGJvb2wgZmFjdG9yeV9zdGF0aWNfaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKLXN0YXRpYyBib29sIHZpZGVvX2h3X2FjY2VsZXJhdGlvbl9lbmFibGVkID0gdHJ1ZTsKLXN0
YXRpYyBqb2JqZWN0IGpfYXBwbGljYXRpb25fY29udGV4dCA9IG51bGxwdHI7Ci0KLS8vIFJldHVy
biB0aGUgKHNpbmdsZXRvbikgSmF2YSBFbnVtIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHxpbmRl
eHw7Ci0vLyB8c3RhdGVfY2xhc3NfZnJhZ21lbnR8IGlzIHNvbWV0aGluZyBsaWtlICJNZWRpYVNv
dXJjZSRTdGF0ZSIuCi1zdGF0aWMgam9iamVjdCBKYXZhRW51bUZyb21JbmRleCgKLSAgICBKTklF
bnYqIGpuaSwgY29uc3Qgc3RkOjpzdHJpbmcmIHN0YXRlX2NsYXNzX2ZyYWdtZW50LCBpbnQgaW5k
ZXgpIHsKLSAgY29uc3Qgc3RkOjpzdHJpbmcgc3RhdGVfY2xhc3MgPSAib3JnL3dlYnJ0Yy8iICsg
c3RhdGVfY2xhc3NfZnJhZ21lbnQ7Ci0gIHJldHVybiBKYXZhRW51bUZyb21JbmRleChqbmksIEZp
bmRDbGFzcyhqbmksIHN0YXRlX2NsYXNzLmNfc3RyKCkpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGVfY2xhc3MsIGluZGV4KTsKLX0KLQotc3RhdGljIERhdGFDaGFubmVsSW5pdCBK
YXZhRGF0YUNoYW5uZWxJbml0VG9OYXRpdmUoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9p
bml0KSB7Ci0gIERhdGFDaGFubmVsSW5pdCBpbml0OwotCi0gIGpjbGFzcyBqX2luaXRfY2xhc3Mg
PSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbCRJbml0Iik7Ci0gIGpmaWVs
ZElEIG9yZGVyZWRfaWQgPSBHZXRGaWVsZElEKGpuaSwgal9pbml0X2NsYXNzLCAib3JkZXJlZCIs
ICJaIik7Ci0gIGpmaWVsZElEIG1heF9yZXRyYW5zbWl0X3RpbWVfaWQgPQotICAgICAgR2V0Rmll
bGRJRChqbmksIGpfaW5pdF9jbGFzcywgIm1heFJldHJhbnNtaXRUaW1lTXMiLCAiSSIpOwotICBq
ZmllbGRJRCBtYXhfcmV0cmFuc21pdHNfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfaW5p
dF9jbGFzcywgIm1heFJldHJhbnNtaXRzIiwgIkkiKTsKLSAgamZpZWxkSUQgcHJvdG9jb2xfaWQg
PQotICAgICAgR2V0RmllbGRJRChqbmksIGpfaW5pdF9jbGFzcywgInByb3RvY29sIiwgIkxqYXZh
L2xhbmcvU3RyaW5nOyIpOwotICBqZmllbGRJRCBuZWdvdGlhdGVkX2lkID0gR2V0RmllbGRJRChq
bmksIGpfaW5pdF9jbGFzcywgIm5lZ290aWF0ZWQiLCAiWiIpOwotICBqZmllbGRJRCBpZF9pZCA9
IEdldEZpZWxkSUQoam5pLCBqX2luaXRfY2xhc3MsICJpZCIsICJJIik7Ci0KLSAgaW5pdC5vcmRl
cmVkID0gR2V0Qm9vbGVhbkZpZWxkKGpuaSwgal9pbml0LCBvcmRlcmVkX2lkKTsKLSAgaW5pdC5t
YXhSZXRyYW5zbWl0VGltZSA9IEdldEludEZpZWxkKGpuaSwgal9pbml0LCBtYXhfcmV0cmFuc21p
dF90aW1lX2lkKTsKLSAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9IEdldEludEZpZWxkKGpuaSwgal9p
bml0LCBtYXhfcmV0cmFuc21pdHNfaWQpOwotICBpbml0LnByb3RvY29sID0gSmF2YVRvU3RkU3Ry
aW5nKAotICAgICAgam5pLCBHZXRTdHJpbmdGaWVsZChqbmksIGpfaW5pdCwgcHJvdG9jb2xfaWQp
KTsKLSAgaW5pdC5uZWdvdGlhdGVkID0gR2V0Qm9vbGVhbkZpZWxkKGpuaSwgal9pbml0LCBuZWdv
dGlhdGVkX2lkKTsKLSAgaW5pdC5pZCA9IEdldEludEZpZWxkKGpuaSwgal9pbml0LCBpZF9pZCk7
Ci0KLSAgcmV0dXJuIGluaXQ7Ci19Ci0KLWNsYXNzIENvbnN0cmFpbnRzV3JhcHBlcjsKLQotLy8g
QWRhcHRlciBiZXR3ZWVuIHRoZSBDKysgUGVlckNvbm5lY3Rpb25PYnNlcnZlciBpbnRlcmZhY2Ug
YW5kIHRoZSBKYXZhCi0vLyBQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciBpbnRlcmZhY2UuICBXcmFw
cyBhbiBpbnN0YW5jZSBvZiB0aGUgSmF2YSBpbnRlcmZhY2UKLS8vIGFuZCBkaXNwYXRjaGVzIEMr
KyBjYWxsYmFja3MgdG8gSmF2YS4KLWNsYXNzIFBDT0phdmEgOiBwdWJsaWMgUGVlckNvbm5lY3Rp
b25PYnNlcnZlciB7Ci0gcHVibGljOgotICAvLyBXZSBuZWVkIHRoZXNlIHVzaW5nIGRlY2xhcmF0
aW9ucyBiZWNhdXNlIHRoZXJlIGFyZSB0d28gdmVyc2lvbnMgb2YgZWFjaCBvZgotICAvLyB0aGUg
YmVsb3cgbWV0aG9kcyBhbmQgd2Ugb25seSBvdmVycmlkZSBvbmUgb2YgdGhlbS4KLSAgLy8gVE9E
TyhkZWFkYmVlZik6IFJlbW92ZSBvbmNlIHRoZXJlJ3Mgb25seSBvbmUgdmVyc2lvbiBvZiB0aGUg
bWV0aG9kcy4KLSAgdXNpbmcgUGVlckNvbm5lY3Rpb25PYnNlcnZlcjo6T25BZGRTdHJlYW07Ci0g
IHVzaW5nIFBlZXJDb25uZWN0aW9uT2JzZXJ2ZXI6Ok9uUmVtb3ZlU3RyZWFtOwotICB1c2luZyBQ
ZWVyQ29ubmVjdGlvbk9ic2VydmVyOjpPbkRhdGFDaGFubmVsOwotCi0gIFBDT0phdmEoSk5JRW52
KiBqbmksIGpvYmplY3Qgal9vYnNlcnZlcikKLSAgICAgIDogal9vYnNlcnZlcl9nbG9iYWxfKGpu
aSwgal9vYnNlcnZlciksCi0gICAgICAgIGpfb2JzZXJ2ZXJfY2xhc3NfKGpuaSwgR2V0T2JqZWN0
Q2xhc3Moam5pLCAqal9vYnNlcnZlcl9nbG9iYWxfKSksCi0gICAgICAgIGpfbWVkaWFfc3RyZWFt
X2NsYXNzXyhqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhU3RyZWFtIikpLAot
ICAgICAgICBqX21lZGlhX3N0cmVhbV9jdG9yXyhHZXRNZXRob2RJRCgKLSAgICAgICAgICAgIGpu
aSwgKmpfbWVkaWFfc3RyZWFtX2NsYXNzXywgIjxpbml0PiIsICIoSilWIikpLAotICAgICAgICBq
X2F1ZGlvX3RyYWNrX2NsYXNzXyhqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL0F1ZGlv
VHJhY2siKSksCi0gICAgICAgIGpfYXVkaW9fdHJhY2tfY3Rvcl8oR2V0TWV0aG9kSUQoCi0gICAg
ICAgICAgICBqbmksICpqX2F1ZGlvX3RyYWNrX2NsYXNzXywgIjxpbml0PiIsICIoSilWIikpLAot
ICAgICAgICBqX3ZpZGVvX3RyYWNrX2NsYXNzXyhqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2Vi
cnRjL1ZpZGVvVHJhY2siKSksCi0gICAgICAgIGpfdmlkZW9fdHJhY2tfY3Rvcl8oR2V0TWV0aG9k
SUQoCi0gICAgICAgICAgICBqbmksICpqX3ZpZGVvX3RyYWNrX2NsYXNzXywgIjxpbml0PiIsICIo
SilWIikpLAotICAgICAgICBqX2RhdGFfY2hhbm5lbF9jbGFzc18oam5pLCBGaW5kQ2xhc3Moam5p
LCAib3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbCIpKSwKLSAgICAgICAgal9kYXRhX2NoYW5uZWxfY3Rv
cl8oR2V0TWV0aG9kSUQoCi0gICAgICAgICAgICBqbmksICpqX2RhdGFfY2hhbm5lbF9jbGFzc18s
ICI8aW5pdD4iLCAiKEopViIpKSB7Ci0gIH0KLQotICB2aXJ0dWFsIH5QQ09KYXZhKCkgewotICAg
IFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICB3aGlsZSAo
IXJlbW90ZV9zdHJlYW1zXy5lbXB0eSgpKQotICAgICAgRGlzcG9zZVJlbW90ZVN0cmVhbShyZW1v
dGVfc3RyZWFtc18uYmVnaW4oKSk7Ci0gIH0KLQotICB2b2lkIE9uSWNlQ2FuZGlkYXRlKGNvbnN0
IEljZUNhbmRpZGF0ZUludGVyZmFjZSogY2FuZGlkYXRlKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVk
TG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIHN0ZDo6c3RyaW5nIHNk
cDsKLSAgICBSVENfQ0hFQ0soY2FuZGlkYXRlLT5Ub1N0cmluZygmc2RwKSkgPDwgImdvdCBzbyBm
YXI6ICIgPDwgc2RwOwotICAgIGpjbGFzcyBjYW5kaWRhdGVfY2xhc3MgPSBGaW5kQ2xhc3Moam5p
KCksICJvcmcvd2VicnRjL0ljZUNhbmRpZGF0ZSIpOwotICAgIGptZXRob2RJRCBjdG9yID0gR2V0
TWV0aG9kSUQoam5pKCksIGNhbmRpZGF0ZV9jbGFzcywKLSAgICAgICAgIjxpbml0PiIsICIoTGph
dmEvbGFuZy9TdHJpbmc7SUxqYXZhL2xhbmcvU3RyaW5nOylWIik7Ci0gICAganN0cmluZyBqX21p
ZCA9IEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSgpLCBjYW5kaWRhdGUtPnNkcF9taWQoKSk7
Ci0gICAganN0cmluZyBqX3NkcCA9IEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSgpLCBzZHAp
OwotICAgIGpvYmplY3Qgal9jYW5kaWRhdGUgPSBqbmkoKS0+TmV3T2JqZWN0KGNhbmRpZGF0ZV9j
bGFzcywgY3Rvciwgal9taWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2FuZGlkYXRlLT5zZHBfbWxpbmVfaW5kZXgoKSwgal9zZHApOwotICAgIENIRUNLX0VY
Q0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotICAgIGptZXRob2RJ
RCBtID0gR2V0TWV0aG9kSUQoam5pKCksICpqX29ic2VydmVyX2NsYXNzXywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJvbkljZUNhbmRpZGF0ZSIsICIoTG9yZy93ZWJydGMvSWNlQ2Fu
ZGlkYXRlOylWIik7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2Jh
bF8sIG0sIGpfY2FuZGlkYXRlKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJv
ciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAgdm9pZCBPbkljZUNhbmRpZGF0ZXNS
ZW1vdmVkKAotICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y3JpY2tldDo6Q2FuZGlkYXRlPiYgY2Fu
ZGlkYXRlcykgb3ZlcnJpZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2Zy
YW1lKGpuaSgpKTsKLSAgICBqb2JqZWN0QXJyYXkgY2FuZGlkYXRlc19hcnJheSA9IFRvSmF2YUNh
bmRpZGF0ZUFycmF5KGpuaSgpLCBjYW5kaWRhdGVzKTsKLSAgICBqbWV0aG9kSUQgbSA9Ci0gICAg
ICAgIEdldE1ldGhvZElEKGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18sICJvbkljZUNhbmRpZGF0
ZXNSZW1vdmVkIiwKLSAgICAgICAgICAgICAgICAgICAgIihbTG9yZy93ZWJydGMvSWNlQ2FuZGlk
YXRlOylWIik7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8s
IG0sIGNhbmRpZGF0ZXNfYXJyYXkpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgIkVy
cm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotICB2b2lkIE9uU2lnbmFsaW5nQ2hh
bmdlKAotICAgICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlNpZ25hbGluZ1N0YXRlIG5ld19z
dGF0ZSkgb3ZlcnJpZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1l
KGpuaSgpKTsKLSAgICBqbWV0aG9kSUQgbSA9IEdldE1ldGhvZElEKAotICAgICAgICBqbmkoKSwg
Kmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25TaWduYWxpbmdDaGFuZ2UiLAotICAgICAgICAiKExvcmcv
d2VicnRjL1BlZXJDb25uZWN0aW9uJFNpZ25hbGluZ1N0YXRlOylWIik7Ci0gICAgam9iamVjdCBu
ZXdfc3RhdGVfZW51bSA9Ci0gICAgICAgIEphdmFFbnVtRnJvbUluZGV4KGpuaSgpLCAiUGVlckNv
bm5lY3Rpb24kU2lnbmFsaW5nU3RhdGUiLCBuZXdfc3RhdGUpOwotICAgIGpuaSgpLT5DYWxsVm9p
ZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBtLCBuZXdfc3RhdGVfZW51bSk7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAg
fQotCi0gIHZvaWQgT25JY2VDb25uZWN0aW9uQ2hhbmdlKAotICAgICAgUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2U6OkljZUNvbm5lY3Rpb25TdGF0ZSBuZXdfc3RhdGUpIG92ZXJyaWRlIHsKLSAgICBT
Y29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam1ldGhvZElE
IG0gPSBHZXRNZXRob2RJRCgKLSAgICAgICAgam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9u
SWNlQ29ubmVjdGlvbkNoYW5nZSIsCi0gICAgICAgICIoTG9yZy93ZWJydGMvUGVlckNvbm5lY3Rp
b24kSWNlQ29ubmVjdGlvblN0YXRlOylWIik7Ci0gICAgam9iamVjdCBuZXdfc3RhdGVfZW51bSA9
IEphdmFFbnVtRnJvbUluZGV4KAotICAgICAgICBqbmkoKSwgIlBlZXJDb25uZWN0aW9uJEljZUNv
bm5lY3Rpb25TdGF0ZSIsIG5ld19zdGF0ZSk7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpq
X29ic2VydmVyX2dsb2JhbF8sIG0sIG5ld19zdGF0ZV9lbnVtKTsKLSAgICBDSEVDS19FWENFUFRJ
T04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAgdm9p
ZCBPbkljZUNvbm5lY3Rpb25SZWNlaXZpbmdDaGFuZ2UoYm9vbCByZWNlaXZpbmcpIG92ZXJyaWRl
IHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAg
am1ldGhvZElEIG0gPSBHZXRNZXRob2RJRCgKLSAgICAgICAgam5pKCksICpqX29ic2VydmVyX2Ns
YXNzXywgIm9uSWNlQ29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZSIsICIoWilWIik7Ci0gICAgam5p
KCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIG0sIHJlY2VpdmluZyk7Ci0g
ICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9k
IjsKLSAgfQotCi0gIHZvaWQgT25JY2VHYXRoZXJpbmdDaGFuZ2UoCi0gICAgICBQZWVyQ29ubmVj
dGlvbkludGVyZmFjZTo6SWNlR2F0aGVyaW5nU3RhdGUgbmV3X3N0YXRlKSBvdmVycmlkZSB7Ci0g
ICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGptZXRo
b2RJRCBtID0gR2V0TWV0aG9kSUQoCi0gICAgICAgIGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18s
ICJvbkljZUdhdGhlcmluZ0NoYW5nZSIsCi0gICAgICAgICIoTG9yZy93ZWJydGMvUGVlckNvbm5l
Y3Rpb24kSWNlR2F0aGVyaW5nU3RhdGU7KVYiKTsKLSAgICBqb2JqZWN0IG5ld19zdGF0ZV9lbnVt
ID0gSmF2YUVudW1Gcm9tSW5kZXgoCi0gICAgICAgIGpuaSgpLCAiUGVlckNvbm5lY3Rpb24kSWNl
R2F0aGVyaW5nU3RhdGUiLCBuZXdfc3RhdGUpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgq
al9vYnNlcnZlcl9nbG9iYWxfLCBtLCBuZXdfc3RhdGVfZW51bSk7Ci0gICAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIHZv
aWQgT25BZGRTdHJlYW0ocnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPiBz
dHJlYW0pIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFt
ZShqbmkoKSk7Ci0gICAgLy8gSmF2YSBNZWRpYVN0cmVhbSBob2xkcyBvbmUgcmVmZXJlbmNlLiBD
b3JyZXNwb25kaW5nIFJlbGVhc2UoKSBpcyBpbgotICAgIC8vIE1lZGlhU3RyZWFtX2ZyZWUsIHRy
aWdnZXJlZCBieSBNZWRpYVN0cmVhbS5kaXNwb3NlKCkuCi0gICAgc3RyZWFtLT5BZGRSZWYoKTsK
LSAgICBqb2JqZWN0IGpfc3RyZWFtID0KLSAgICAgICAgam5pKCktPk5ld09iamVjdCgqal9tZWRp
YV9zdHJlYW1fY2xhc3NfLCBqX21lZGlhX3N0cmVhbV9jdG9yXywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PGpsb25nPihzdHJlYW0uZ2V0KCkpKTsKLSAgICBDSEVD
S19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLQotICAgIGZv
ciAoY29uc3QgYXV0byYgdHJhY2sgOiBzdHJlYW0tPkdldEF1ZGlvVHJhY2tzKCkpIHsKLSAgICAg
IGpzdHJpbmcgaWQgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmkoKSwgdHJhY2stPmlkKCkp
OwotICAgICAgLy8gSmF2YSBBdWRpb1RyYWNrIGhvbGRzIG9uZSByZWZlcmVuY2UuIENvcnJlc3Bv
bmRpbmcgUmVsZWFzZSgpIGlzIGluCi0gICAgICAvLyBNZWRpYVN0cmVhbVRyYWNrX2ZyZWUsIHRy
aWdnZXJlZCBieSBBdWRpb1RyYWNrLmRpc3Bvc2UoKS4KLSAgICAgIHRyYWNrLT5BZGRSZWYoKTsK
LSAgICAgIGpvYmplY3Qgal90cmFjayA9Ci0gICAgICAgICAgam5pKCktPk5ld09iamVjdCgqal9h
dWRpb190cmFja19jbGFzc18sIGpfYXVkaW9fdHJhY2tfY3Rvcl8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PGpsb25nPih0cmFjay5nZXQoKSksIGlkKTsKLSAg
ICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwot
ICAgICAgamZpZWxkSUQgYXVkaW9fdHJhY2tzX2lkID0gR2V0RmllbGRJRChqbmkoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmpfbWVkaWFfc3RyZWFtX2Ns
YXNzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1ZGlv
VHJhY2tzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxq
YXZhL3V0aWwvTGlua2VkTGlzdDsiKTsKLSAgICAgIGpvYmplY3QgYXVkaW9fdHJhY2tzID0gR2V0
T2JqZWN0RmllbGQoam5pKCksIGpfc3RyZWFtLCBhdWRpb190cmFja3NfaWQpOwotICAgICAgam1l
dGhvZElEIGFkZCA9IEdldE1ldGhvZElEKGpuaSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdldE9iamVjdENsYXNzKGpuaSgpLCBhdWRpb190cmFja3MpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJhZGQiLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiKTsKLSAgICAgIGpib29sZWFuIGFkZGVk
ID0gam5pKCktPkNhbGxCb29sZWFuTWV0aG9kKGF1ZGlvX3RyYWNrcywgYWRkLCBqX3RyYWNrKTsK
LSAgICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsQm9vbGVh
bk1ldGhvZCI7Ci0gICAgICBSVENfQ0hFQ0soYWRkZWQpOwotICAgIH0KLQotICAgIGZvciAoY29u
c3QgYXV0byYgdHJhY2sgOiBzdHJlYW0tPkdldFZpZGVvVHJhY2tzKCkpIHsKLSAgICAgIGpzdHJp
bmcgaWQgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmkoKSwgdHJhY2stPmlkKCkpOwotICAg
ICAgLy8gSmF2YSBWaWRlb1RyYWNrIGhvbGRzIG9uZSByZWZlcmVuY2UuIENvcnJlc3BvbmRpbmcg
UmVsZWFzZSgpIGlzIGluCi0gICAgICAvLyBNZWRpYVN0cmVhbVRyYWNrX2ZyZWUsIHRyaWdnZXJl
ZCBieSBWaWRlb1RyYWNrLmRpc3Bvc2UoKS4KLSAgICAgIHRyYWNrLT5BZGRSZWYoKTsKLSAgICAg
IGpvYmplY3Qgal90cmFjayA9Ci0gICAgICAgICAgam5pKCktPk5ld09iamVjdCgqal92aWRlb190
cmFja19jbGFzc18sIGpfdmlkZW9fdHJhY2tfY3Rvcl8sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PGpsb25nPih0cmFjay5nZXQoKSksIGlkKTsKLSAgICAgIENI
RUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotICAgICAg
amZpZWxkSUQgdmlkZW9fdHJhY2tzX2lkID0gR2V0RmllbGRJRChqbmkoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmpfbWVkaWFfc3RyZWFtX2NsYXNzXywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZpZGVvVHJhY2tz
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxqYXZhL3V0
aWwvTGlua2VkTGlzdDsiKTsKLSAgICAgIGpvYmplY3QgdmlkZW9fdHJhY2tzID0gR2V0T2JqZWN0
RmllbGQoam5pKCksIGpfc3RyZWFtLCB2aWRlb190cmFja3NfaWQpOwotICAgICAgam1ldGhvZElE
IGFkZCA9IEdldE1ldGhvZElEKGpuaSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdldE9iamVjdENsYXNzKGpuaSgpLCB2aWRlb190cmFja3MpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhZGQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiKTsKLSAgICAgIGpib29sZWFuIGFkZGVkID0gam5p
KCktPkNhbGxCb29sZWFuTWV0aG9kKHZpZGVvX3RyYWNrcywgYWRkLCBqX3RyYWNrKTsKLSAgICAg
IENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsQm9vbGVhbk1ldGhv
ZCI7Ci0gICAgICBSVENfQ0hFQ0soYWRkZWQpOwotICAgIH0KLSAgICByZW1vdGVfc3RyZWFtc19b
c3RyZWFtXSA9IE5ld0dsb2JhbFJlZihqbmkoKSwgal9zdHJlYW0pOwotCi0gICAgam1ldGhvZElE
IG0gPSBHZXRNZXRob2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25BZGRTdHJlYW0i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihMb3JnL3dlYnJ0Yy9NZWRpYVN0cmVh
bTspViIpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBt
LCBqX3N0cmVhbSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5n
IENhbGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIHZvaWQgT25SZW1vdmVTdHJlYW0oCi0gICAgICBy
dGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+IHN0cmVhbSkgb3ZlcnJpZGUg
ewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBO
YXRpdmVUb0phdmFTdHJlYW1zTWFwOjppdGVyYXRvciBpdCA9IHJlbW90ZV9zdHJlYW1zXy5maW5k
KHN0cmVhbSk7Ci0gICAgUlRDX0NIRUNLKGl0ICE9IHJlbW90ZV9zdHJlYW1zXy5lbmQoKSkgPDwg
InVuZXhwZWN0ZWQgc3RyZWFtOiAiIDw8IHN0ZDo6aGV4Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgc3RyZWFtOwotICAgIGpvYmplY3Qgal9zdHJlYW0gPSBp
dC0+c2Vjb25kOwotICAgIGptZXRob2RJRCBtID0gR2V0TWV0aG9kSUQoam5pKCksICpqX29ic2Vy
dmVyX2NsYXNzXywgIm9uUmVtb3ZlU3RyZWFtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICIoTG9yZy93ZWJydGMvTWVkaWFTdHJlYW07KVYiKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRN
ZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgal9zdHJlYW0pOwotICAgIENIRUNLX0VYQ0VQ
VElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gICAgLy8gUmVs
ZWFzZSB0aGUgcmVmcHRyIHJlZmVyZW5jZSBzbyB0aGF0IERpc3Bvc2VSZW1vdGVTdHJlYW0gY2Fu
IGFzc2VydAotICAgIC8vIGl0IHJlbW92ZXMgdGhlIGZpbmFsIHJlZmVyZW5jZS4KLSAgICBzdHJl
YW0gPSBudWxscHRyOwotICAgIERpc3Bvc2VSZW1vdGVTdHJlYW0oaXQpOwotICB9Ci0KLSAgdm9p
ZCBPbkRhdGFDaGFubmVsKAotICAgICAgcnRjOjpzY29wZWRfcmVmcHRyPERhdGFDaGFubmVsSW50
ZXJmYWNlPiBjaGFubmVsKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2Nh
bF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGpvYmplY3Qgal9jaGFubmVsID0gam5pKCktPk5ld09i
amVjdCgKLSAgICAgICAgKmpfZGF0YV9jaGFubmVsX2NsYXNzXywgal9kYXRhX2NoYW5uZWxfY3Rv
cl8sIChqbG9uZyljaGFubmVsLmdldCgpKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8
ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLQotICAgIGptZXRob2RJRCBtID0gR2V0TWV0aG9k
SUQoam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uRGF0YUNoYW5uZWwiLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIihMb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbDspViIpOwotICAg
IGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBtLCBqX2NoYW5uZWwp
OwotCi0gICAgLy8gQ2hhbm5lbCBpcyBub3cgb3duZWQgYnkgSmF2YSBvYmplY3QsIGFuZCB3aWxs
IGJlIGZyZWVkIGZyb20KLSAgICAvLyBEYXRhQ2hhbm5lbC5kaXNwb3NlKCkuICBJbXBvcnRhbnQg
dGhhdCB0aGlzIGJlIGRvbmUgX2FmdGVyXyB0aGUKLSAgICAvLyBDYWxsVm9pZE1ldGhvZCBhYm92
ZSBhcyBKYXZhIGNvZGUgbWlnaHQgY2FsbCBiYWNrIGludG8gbmF0aXZlIGNvZGUgYW5kIGJlCi0g
ICAgLy8gc3VycHJpc2VkIHRvIHNlZSBhIHJlZmNvdW50IG9mIDIuCi0gICAgaW50IGJ1bXBlZF9j
b3VudCA9IGNoYW5uZWwtPkFkZFJlZigpOwotICAgIFJUQ19DSEVDSyhidW1wZWRfY291bnQgPT0g
MikgPDwgIlVuZXhwZWN0ZWQgcmVmY291bnQgT25EYXRhQ2hhbm5lbCI7Ci0KLSAgICBDSEVDS19F
WENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0K
LSAgdm9pZCBPblJlbmVnb3RpYXRpb25OZWVkZWQoKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVkTG9j
YWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGptZXRob2RJRCBtID0KLSAg
ICAgICAgR2V0TWV0aG9kSUQoam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uUmVuZWdvdGlh
dGlvbk5lZWRlZCIsICIoKVYiKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2
ZXJfZ2xvYmFsXywgbSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVy
aW5nIENhbGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIHZvaWQgU2V0Q29uc3RyYWludHMoQ29uc3Ry
YWludHNXcmFwcGVyKiBjb25zdHJhaW50cykgewotICAgIFJUQ19DSEVDSyghY29uc3RyYWludHNf
LmdldCgpKSA8PCAiY29uc3RyYWludHMgYWxyZWFkeSBzZXQhIjsKLSAgICBjb25zdHJhaW50c18u
cmVzZXQoY29uc3RyYWludHMpOwotICB9Ci0KLSAgY29uc3QgQ29uc3RyYWludHNXcmFwcGVyKiBj
b25zdHJhaW50cygpIHsgcmV0dXJuIGNvbnN0cmFpbnRzXy5nZXQoKTsgfQotCi0gcHJpdmF0ZToK
LSAgdHlwZWRlZiBzdGQ6Om1hcDxNZWRpYVN0cmVhbUludGVyZmFjZSosIGpvYmplY3Q+IE5hdGl2
ZVRvSmF2YVN0cmVhbXNNYXA7Ci0KLSAgdm9pZCBEaXNwb3NlUmVtb3RlU3RyZWFtKGNvbnN0IE5h
dGl2ZVRvSmF2YVN0cmVhbXNNYXA6Oml0ZXJhdG9yJiBpdCkgewotICAgIGpvYmplY3Qgal9zdHJl
YW0gPSBpdC0+c2Vjb25kOwotICAgIHJlbW90ZV9zdHJlYW1zXy5lcmFzZShpdCk7Ci0gICAgam5p
KCktPkNhbGxWb2lkTWV0aG9kKAotICAgICAgICBqX3N0cmVhbSwgR2V0TWV0aG9kSUQoam5pKCks
ICpqX21lZGlhX3N0cmVhbV9jbGFzc18sICJkaXNwb3NlIiwgIigpViIpKTsKLSAgICBDSEVDS19F
WENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgTWVkaWFTdHJlYW0uZGlzcG9zZSgpIjsK
LSAgICBEZWxldGVHbG9iYWxSZWYoam5pKCksIGpfc3RyZWFtKTsKLSAgfQotCi0gIGpvYmplY3Qg
VG9KYXZhQ2FuZGlkYXRlKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICBq
Y2xhc3MqIGNhbmRpZGF0ZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y3JpY2tldDo6Q2FuZGlkYXRlJiBjYW5kaWRhdGUpIHsKLSAgICBzdGQ6OnN0cmluZyBzZHAgPSB3
ZWJydGM6OlNkcFNlcmlhbGl6ZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIFJUQ19DSEVDSygh
c2RwLmVtcHR5KCkpIDw8ICJnb3QgYW4gZW1wdHkgSUNFIGNhbmRpZGF0ZSI7Ci0gICAgam1ldGhv
ZElEIGN0b3IgPSBHZXRNZXRob2RJRChqbmksICpjYW5kaWRhdGVfY2xhc3MsICI8aW5pdD4iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztJTGph
dmEvbGFuZy9TdHJpbmc7KVYiKTsKLSAgICBqc3RyaW5nIGpfbWlkID0gSmF2YVN0cmluZ0Zyb21T
dGRTdHJpbmcoam5pLCBjYW5kaWRhdGUudHJhbnNwb3J0X25hbWUoKSk7Ci0gICAganN0cmluZyBq
X3NkcCA9IEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSwgc2RwKTsKLSAgICAvLyBzZHBfbWxp
bmVfaW5kZXggaXMgbm90IHVzZWQsIHBhc3MgYW4gaW52YWxpZCB2YWx1ZSAtMS4KLSAgICBqb2Jq
ZWN0IGpfY2FuZGlkYXRlID0KLSAgICAgICAgam5pLT5OZXdPYmplY3QoKmNhbmRpZGF0ZV9jbGFz
cywgY3Rvciwgal9taWQsIC0xLCBqX3NkcCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwg
ImVycm9yIGR1cmluZyBKYXZhIENhbmRpZGF0ZSBOZXdPYmplY3QiOwotICAgIHJldHVybiBqX2Nh
bmRpZGF0ZTsKLSAgfQotCi0gIGpvYmplY3RBcnJheSBUb0phdmFDYW5kaWRhdGVBcnJheSgKLSAg
ICAgIEpOSUVudiogam5pLAotICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8Y3JpY2tldDo6Q2FuZGlk
YXRlPiYgY2FuZGlkYXRlcykgewotICAgIGpjbGFzcyBjYW5kaWRhdGVfY2xhc3MgPSBGaW5kQ2xh
c3Moam5pLCAib3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUiKTsKLSAgICBqb2JqZWN0QXJyYXkgamF2
YV9jYW5kaWRhdGVzID0KLSAgICAgICAgam5pLT5OZXdPYmplY3RBcnJheShjYW5kaWRhdGVzLnNp
emUoKSwgY2FuZGlkYXRlX2NsYXNzLCBOVUxMKTsKLSAgICBpbnQgaSA9IDA7Ci0gICAgZm9yIChj
b25zdCBjcmlja2V0OjpDYW5kaWRhdGUmIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKLSAgICAg
IGpvYmplY3Qgal9jYW5kaWRhdGUgPSBUb0phdmFDYW5kaWRhdGUoam5pLCAmY2FuZGlkYXRlX2Ns
YXNzLCBjYW5kaWRhdGUpOwotICAgICAgam5pLT5TZXRPYmplY3RBcnJheUVsZW1lbnQoamF2YV9j
YW5kaWRhdGVzLCBpKyssIGpfY2FuZGlkYXRlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGphdmFfY2Fu
ZGlkYXRlczsKLSAgfQotCi0gIEpOSUVudiogam5pKCkgewotICAgIHJldHVybiBBdHRhY2hDdXJy
ZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgfQotCi0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqb2Jq
ZWN0PiBqX29ic2VydmVyX2dsb2JhbF87Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+
IGpfb2JzZXJ2ZXJfY2xhc3NfOwotICBjb25zdCBTY29wZWRHbG9iYWxSZWY8amNsYXNzPiBqX21l
ZGlhX3N0cmVhbV9jbGFzc187Ci0gIGNvbnN0IGptZXRob2RJRCBqX21lZGlhX3N0cmVhbV9jdG9y
XzsKLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9hdWRpb190cmFja19jbGFzc187
Ci0gIGNvbnN0IGptZXRob2RJRCBqX2F1ZGlvX3RyYWNrX2N0b3JfOwotICBjb25zdCBTY29wZWRH
bG9iYWxSZWY8amNsYXNzPiBqX3ZpZGVvX3RyYWNrX2NsYXNzXzsKLSAgY29uc3Qgam1ldGhvZElE
IGpfdmlkZW9fdHJhY2tfY3Rvcl87Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpf
ZGF0YV9jaGFubmVsX2NsYXNzXzsKLSAgY29uc3Qgam1ldGhvZElEIGpfZGF0YV9jaGFubmVsX2N0
b3JfOwotICAvLyBDKysgLT4gSmF2YSByZW1vdGUgc3RyZWFtcy4gVGhlIHN0b3JlZCBqb2JlY3Rz
IGFyZSBnbG9iYWwgcmVmcyBhbmQgbXVzdCBiZQotICAvLyBtYW51YWxseSBkZWxldGVkIHVwb24g
cmVtb3ZhbC4gVXNlIERpc3Bvc2VSZW1vdGVTdHJlYW0oKS4KLSAgTmF0aXZlVG9KYXZhU3RyZWFt
c01hcCByZW1vdGVfc3RyZWFtc187Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJhaW50c1dyYXBw
ZXI+IGNvbnN0cmFpbnRzXzsKLX07Ci0KLS8vIFdyYXBwZXIgZm9yIGEgSmF2YSBNZWRpYUNvbnN0
cmFpbnRzIG9iamVjdC4gIENvcGllcyBhbGwgbmVlZGVkIGRhdGEgc28gd2hlbgotLy8gdGhlIGNv
bnN0cnVjdG9yIHJldHVybnMgdGhlIEphdmEgb2JqZWN0IGlzIG5vIGxvbmdlciBuZWVkZWQuCi1j
bGFzcyBDb25zdHJhaW50c1dyYXBwZXIgOiBwdWJsaWMgTWVkaWFDb25zdHJhaW50c0ludGVyZmFj
ZSB7Ci0gcHVibGljOgotICBDb25zdHJhaW50c1dyYXBwZXIoSk5JRW52KiBqbmksIGpvYmplY3Qg
al9jb25zdHJhaW50cykgewotICAgIFBvcHVsYXRlQ29uc3RyYWludHNGcm9tSmF2YVBhaXJMaXN0
KAotICAgICAgICBqbmksIGpfY29uc3RyYWludHMsICJtYW5kYXRvcnkiLCAmbWFuZGF0b3J5Xyk7
Ci0gICAgUG9wdWxhdGVDb25zdHJhaW50c0Zyb21KYXZhUGFpckxpc3QoCi0gICAgICAgIGpuaSwg
al9jb25zdHJhaW50cywgIm9wdGlvbmFsIiwgJm9wdGlvbmFsXyk7Ci0gIH0KLQotICB2aXJ0dWFs
IH5Db25zdHJhaW50c1dyYXBwZXIoKSB7fQotCi0gIC8vIE1lZGlhQ29uc3RyYWludHNJbnRlcmZh
Y2UuCi0gIGNvbnN0IENvbnN0cmFpbnRzJiBHZXRNYW5kYXRvcnkoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtYW5kYXRvcnlfOyB9Ci0KLSAgY29uc3QgQ29uc3RyYWludHMmIEdldE9wdGlvbmFs
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gb3B0aW9uYWxfOyB9Ci0KLSBwcml2YXRlOgotICAv
LyBIZWxwZXIgZm9yIHRyYW5zbGF0aW5nIGEgTGlzdDxQYWlyPFN0cmluZywgU3RyaW5nPj4gdG8g
YSBDb25zdHJhaW50cy4KLSAgc3RhdGljIHZvaWQgUG9wdWxhdGVDb25zdHJhaW50c0Zyb21KYXZh
UGFpckxpc3QoCi0gICAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX2NvbnN0cmFpbnRzLAotICAg
ICAgY29uc3QgY2hhciogZmllbGRfbmFtZSwgQ29uc3RyYWludHMqIGZpZWxkKSB7Ci0gICAgamZp
ZWxkSUQgal9pZCA9IEdldEZpZWxkSUQoam5pLAotICAgICAgICBHZXRPYmplY3RDbGFzcyhqbmks
IGpfY29uc3RyYWludHMpLCBmaWVsZF9uYW1lLCAiTGphdmEvdXRpbC9MaXN0OyIpOwotICAgIGpv
YmplY3Qgal9saXN0ID0gR2V0T2JqZWN0RmllbGQoam5pLCBqX2NvbnN0cmFpbnRzLCBqX2lkKTsK
LSAgICBmb3IgKGpvYmplY3QgZW50cnkgOiBJdGVyYWJsZShqbmksIGpfbGlzdCkpIHsKLSAgICAg
IGptZXRob2RJRCBnZXRfa2V5ID0gR2V0TWV0aG9kSUQoam5pLAotICAgICAgICAgIEdldE9iamVj
dENsYXNzKGpuaSwgZW50cnkpLCAiZ2V0S2V5IiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0g
ICAgICBqc3RyaW5nIGpfa2V5ID0gcmVpbnRlcnByZXRfY2FzdDxqc3RyaW5nPigKLSAgICAgICAg
ICBqbmktPkNhbGxPYmplY3RNZXRob2QoZW50cnksIGdldF9rZXkpKTsKLSAgICAgIENIRUNLX0VY
Q0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbE9iamVjdE1ldGhvZCI7Ci0gICAgICBq
bWV0aG9kSUQgZ2V0X3ZhbHVlID0gR2V0TWV0aG9kSUQoam5pLAotICAgICAgICAgIEdldE9iamVj
dENsYXNzKGpuaSwgZW50cnkpLCAiZ2V0VmFsdWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsK
LSAgICAgIGpzdHJpbmcgal92YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8anN0cmluZz4oCi0gICAg
ICAgICAgam5pLT5DYWxsT2JqZWN0TWV0aG9kKGVudHJ5LCBnZXRfdmFsdWUpKTsKLSAgICAgIENI
RUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbE9iamVjdE1ldGhvZCI7Ci0g
ICAgICBmaWVsZC0+cHVzaF9iYWNrKENvbnN0cmFpbnQoSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9r
ZXkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEphdmFUb1N0ZFN0cmluZyhq
bmksIGpfdmFsdWUpKSk7Ci0gICAgfQotICB9Ci0KLSAgQ29uc3RyYWludHMgbWFuZGF0b3J5XzsK
LSAgQ29uc3RyYWludHMgb3B0aW9uYWxfOwotfTsKLQotc3RhdGljIGpvYmplY3QgSmF2YVNkcEZy
b21OYXRpdmVTZHAoCi0gICAgSk5JRW52KiBqbmksIGNvbnN0IFNlc3Npb25EZXNjcmlwdGlvbklu
dGVyZmFjZSogZGVzYykgewotICBzdGQ6OnN0cmluZyBzZHA7Ci0gIFJUQ19DSEVDSyhkZXNjLT5U
b1N0cmluZygmc2RwKSkgPDwgImdvdCBzbyBmYXI6ICIgPDwgc2RwOwotICBqc3RyaW5nIGpfZGVz
Y3JpcHRpb24gPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmksIHNkcCk7Ci0KLSAgamNsYXNz
IGpfdHlwZV9jbGFzcyA9IEZpbmRDbGFzcygKLSAgICAgIGpuaSwgIm9yZy93ZWJydGMvU2Vzc2lv
bkRlc2NyaXB0aW9uJFR5cGUiKTsKLSAgam1ldGhvZElEIGpfdHlwZV9mcm9tX2Nhbm9uaWNhbCA9
IEdldFN0YXRpY01ldGhvZElEKAotICAgICAgam5pLCBqX3R5cGVfY2xhc3MsICJmcm9tQ2Fub25p
Y2FsRm9ybSIsCi0gICAgICAiKExqYXZhL2xhbmcvU3RyaW5nOylMb3JnL3dlYnJ0Yy9TZXNzaW9u
RGVzY3JpcHRpb24kVHlwZTsiKTsKLSAganN0cmluZyBqX3R5cGVfc3RyaW5nID0gSmF2YVN0cmlu
Z0Zyb21TdGRTdHJpbmcoam5pLCBkZXNjLT50eXBlKCkpOwotICBqb2JqZWN0IGpfdHlwZSA9IGpu
aS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZCgKLSAgICAgIGpfdHlwZV9jbGFzcywgal90eXBlX2Zy
b21fY2Fub25pY2FsLCBqX3R5cGVfc3RyaW5nKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwg
ImVycm9yIGR1cmluZyBDYWxsT2JqZWN0TWV0aG9kIjsKLQotICBqY2xhc3Mgal9zZHBfY2xhc3Mg
PSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24iKTsKLSAgam1l
dGhvZElEIGpfc2RwX2N0b3IgPSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwgal9zZHBfY2xhc3Ms
ICI8aW5pdD4iLAotICAgICAgIihMb3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24kVHlwZTtM
amF2YS9sYW5nL1N0cmluZzspViIpOwotICBqb2JqZWN0IGpfc2RwID0gam5pLT5OZXdPYmplY3Qo
Ci0gICAgICBqX3NkcF9jbGFzcywgal9zZHBfY3Rvciwgal90eXBlLCBqX2Rlc2NyaXB0aW9uKTsK
LSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotICBy
ZXR1cm4gal9zZHA7Ci19Ci0KLXRlbXBsYXRlIDxjbGFzcyBUPiAgLy8gVCBpcyBvbmUgb2Yge0Ny
ZWF0ZSxTZXR9U2Vzc2lvbkRlc2NyaXB0aW9uT2JzZXJ2ZXIuCi1jbGFzcyBTZHBPYnNlcnZlcldy
YXBwZXIgOiBwdWJsaWMgVCB7Ci0gcHVibGljOgotICBTZHBPYnNlcnZlcldyYXBwZXIoSk5JRW52
KiBqbmksIGpvYmplY3Qgal9vYnNlcnZlciwKLSAgICAgICAgICAgICAgICAgICAgIENvbnN0cmFp
bnRzV3JhcHBlciogY29uc3RyYWludHMpCi0gICAgICA6IGNvbnN0cmFpbnRzXyhjb25zdHJhaW50
cyksCi0gICAgICAgIGpfb2JzZXJ2ZXJfZ2xvYmFsXyhqbmksIGpfb2JzZXJ2ZXIpLAotICAgICAg
ICBqX29ic2VydmVyX2NsYXNzXyhqbmksIEdldE9iamVjdENsYXNzKGpuaSwgal9vYnNlcnZlcikp
IHsKLSAgfQotCi0gIHZpcnR1YWwgflNkcE9ic2VydmVyV3JhcHBlcigpIHt9Ci0KLSAgLy8gQ2Fu
J3QgbWFyayBvdmVycmlkZSBiZWNhdXNlIG9mIHRlbXBsYXRpbmcuCi0gIHZpcnR1YWwgdm9pZCBP
blN1Y2Nlc3MoKSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5p
KCkpOwotICAgIGptZXRob2RJRCBtID0gR2V0TWV0aG9kSUQoam5pKCksICpqX29ic2VydmVyX2Ns
YXNzXywgIm9uU2V0U3VjY2VzcyIsICIoKVYiKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2Qo
Kmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAi
ZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIC8vIENhbid0IG1hcmsgb3Zl
cnJpZGUgYmVjYXVzZSBvZiB0ZW1wbGF0aW5nLgotICB2aXJ0dWFsIHZvaWQgT25TdWNjZXNzKFNl
c3Npb25EZXNjcmlwdGlvbkludGVyZmFjZSogZGVzYykgewotICAgIFNjb3BlZExvY2FsUmVmRnJh
bWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBqbWV0aG9kSUQgbSA9IEdldE1ldGhvZElE
KAotICAgICAgICBqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25DcmVhdGVTdWNjZXNzIiwK
LSAgICAgICAgIihMb3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb247KVYiKTsKLSAgICBqb2Jq
ZWN0IGpfc2RwID0gSmF2YVNkcEZyb21OYXRpdmVTZHAoam5pKCksIGRlc2MpOwotICAgIGpuaSgp
LT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBtLCBqX3NkcCk7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAg
fQotCi0gcHJvdGVjdGVkOgotICAvLyBDb21tb24gaW1wbGVtZW50YXRpb24gZm9yIGZhaWx1cmUg
b2YgU2V0ICYgQ3JlYXRlIHR5cGVzLCBkaXN0aW5ndWlzaGVkIGJ5Ci0gIC8vIHxvcHwgYmVpbmcg
IlNldCIgb3IgIkNyZWF0ZSIuCi0gIHZvaWQgRG9PbkZhaWx1cmUoY29uc3Qgc3RkOjpzdHJpbmcm
IG9wLCBjb25zdCBzdGQ6OnN0cmluZyYgZXJyb3IpIHsKLSAgICBqbWV0aG9kSUQgbSA9IEdldE1l
dGhvZElEKGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18sICJvbiIgKyBvcCArICJGYWlsdXJlIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7KVYiKTsK
LSAgICBqc3RyaW5nIGpfZXJyb3Jfc3RyaW5nID0gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5p
KCksIGVycm9yKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFs
XywgbSwgal9lcnJvcl9zdHJpbmcpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVy
cm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotICBKTklFbnYqIGpuaSgpIHsKLSAg
ICByZXR1cm4gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIH0KLQotIHByaXZhdGU6
Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDb25zdHJhaW50c1dyYXBwZXI+IGNvbnN0cmFpbnRzXzsKLSAg
Y29uc3QgU2NvcGVkR2xvYmFsUmVmPGpvYmplY3Q+IGpfb2JzZXJ2ZXJfZ2xvYmFsXzsKLSAgY29u
c3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9vYnNlcnZlcl9jbGFzc187Ci19OwotCi1jbGFz
cyBDcmVhdGVTZHBPYnNlcnZlcldyYXBwZXIKLSAgICA6IHB1YmxpYyBTZHBPYnNlcnZlcldyYXBw
ZXI8Q3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uT2JzZXJ2ZXI+IHsKLSBwdWJsaWM6Ci0gIENyZWF0
ZVNkcE9ic2VydmVyV3JhcHBlcihKTklFbnYqIGpuaSwgam9iamVjdCBqX29ic2VydmVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludHNXcmFwcGVyKiBjb25zdHJhaW50cykK
LSAgICAgIDogU2RwT2JzZXJ2ZXJXcmFwcGVyKGpuaSwgal9vYnNlcnZlciwgY29uc3RyYWludHMp
IHt9Ci0KLSAgdm9pZCBPbkZhaWx1cmUoY29uc3Qgc3RkOjpzdHJpbmcmIGVycm9yKSBvdmVycmlk
ZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAg
IFNkcE9ic2VydmVyV3JhcHBlcjo6RG9PbkZhaWx1cmUoc3RkOjpzdHJpbmcoIkNyZWF0ZSIpLCBl
cnJvcik7Ci0gIH0KLX07Ci0KLWNsYXNzIFNldFNkcE9ic2VydmVyV3JhcHBlcgotICAgIDogcHVi
bGljIFNkcE9ic2VydmVyV3JhcHBlcjxTZXRTZXNzaW9uRGVzY3JpcHRpb25PYnNlcnZlcj4gewot
IHB1YmxpYzoKLSAgU2V0U2RwT2JzZXJ2ZXJXcmFwcGVyKEpOSUVudiogam5pLCBqb2JqZWN0IGpf
b2JzZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICBDb25zdHJhaW50c1dyYXBwZXIqIGNv
bnN0cmFpbnRzKQotICAgICAgOiBTZHBPYnNlcnZlcldyYXBwZXIoam5pLCBqX29ic2VydmVyLCBj
b25zdHJhaW50cykge30KLQotICB2b2lkIE9uRmFpbHVyZShjb25zdCBzdGQ6OnN0cmluZyYgZXJy
b3IpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShq
bmkoKSk7Ci0gICAgU2RwT2JzZXJ2ZXJXcmFwcGVyOjpEb09uRmFpbHVyZShzdGQ6OnN0cmluZygi
U2V0IiksIGVycm9yKTsKLSAgfQotfTsKLQotLy8gQWRhcHRlciBmb3IgYSBKYXZhIERhdGFDaGFu
bmVsJE9ic2VydmVyIHByZXNlbnRpbmcgYSBDKysgRGF0YUNoYW5uZWxPYnNlcnZlcgotLy8gYW5k
IGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBmcm9tIEMrKyBiYWNrIHRvIEphdmEuCi1jbGFzcyBE
YXRhQ2hhbm5lbE9ic2VydmVyV3JhcHBlciA6IHB1YmxpYyBEYXRhQ2hhbm5lbE9ic2VydmVyIHsK
LSBwdWJsaWM6Ci0gIERhdGFDaGFubmVsT2JzZXJ2ZXJXcmFwcGVyKEpOSUVudiogam5pLCBqb2Jq
ZWN0IGpfb2JzZXJ2ZXIpCi0gICAgICA6IGpfb2JzZXJ2ZXJfZ2xvYmFsXyhqbmksIGpfb2JzZXJ2
ZXIpLAotICAgICAgICBqX29ic2VydmVyX2NsYXNzXyhqbmksIEdldE9iamVjdENsYXNzKGpuaSwg
al9vYnNlcnZlcikpLAotICAgICAgICBqX2J1ZmZlcl9jbGFzc18oam5pLCBGaW5kQ2xhc3Moam5p
LCAib3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbCRCdWZmZXIiKSksCi0gICAgICAgIGpfb25fYnVmZmVy
ZWRfYW1vdW50X2NoYW5nZV9taWRfKEdldE1ldGhvZElEKAotICAgICAgICAgICAgam5pLCAqal9v
YnNlcnZlcl9jbGFzc18sICJvbkJ1ZmZlcmVkQW1vdW50Q2hhbmdlIiwgIihKKVYiKSksCi0gICAg
ICAgIGpfb25fc3RhdGVfY2hhbmdlX21pZF8oCi0gICAgICAgICAgICBHZXRNZXRob2RJRChqbmks
ICpqX29ic2VydmVyX2NsYXNzXywgIm9uU3RhdGVDaGFuZ2UiLCAiKClWIikpLAotICAgICAgICBq
X29uX21lc3NhZ2VfbWlkXyhHZXRNZXRob2RJRChqbmksICpqX29ic2VydmVyX2NsYXNzXywgIm9u
TWVzc2FnZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoTG9yZy93
ZWJydGMvRGF0YUNoYW5uZWwkQnVmZmVyOylWIikpLAotICAgICAgICBqX2J1ZmZlcl9jdG9yXyhH
ZXRNZXRob2RJRChqbmksICpqX2J1ZmZlcl9jbGFzc18sICI8aW5pdD4iLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiKExqYXZhL25pby9CeXRlQnVmZmVyO1opViIpKSB7fQot
Ci0gIHZpcnR1YWwgfkRhdGFDaGFubmVsT2JzZXJ2ZXJXcmFwcGVyKCkge30KLQotICB2b2lkIE9u
QnVmZmVyZWRBbW91bnRDaGFuZ2UodWludDY0X3QgcHJldmlvdXNfYW1vdW50KSBvdmVycmlkZSB7
Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGpu
aSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBqX29uX2J1ZmZlcmVkX2Ft
b3VudF9jaGFuZ2VfbWlkXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNfYW1v
dW50KTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZv
aWRNZXRob2QiOwotICB9Ci0KLSAgdm9pZCBPblN0YXRlQ2hhbmdlKCkgb3ZlcnJpZGUgewotICAg
IFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBqbmkoKS0+
Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgal9vbl9zdGF0ZV9jaGFuZ2VfbWlk
Xyk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lk
TWV0aG9kIjsKLSAgfQotCi0gIHZvaWQgT25NZXNzYWdlKGNvbnN0IERhdGFCdWZmZXImIGJ1ZmZl
cikgb3ZlcnJpZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpu
aSgpKTsKLSAgICBqb2JqZWN0IGJ5dGVfYnVmZmVyID0gam5pKCktPk5ld0RpcmVjdEJ5dGVCdWZm
ZXIoCi0gICAgICAgIGNvbnN0X2Nhc3Q8Y2hhcio+KGJ1ZmZlci5kYXRhLmRhdGE8Y2hhcj4oKSks
IGJ1ZmZlci5kYXRhLnNpemUoKSk7Ci0gICAgam9iamVjdCBqX2J1ZmZlciA9IGpuaSgpLT5OZXdP
YmplY3QoKmpfYnVmZmVyX2NsYXNzXywgal9idWZmZXJfY3Rvcl8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZV9idWZmZXIsIGJ1ZmZlci5iaW5hcnkpOwotICAg
IGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBqX29uX21lc3NhZ2Vf
bWlkXywgal9idWZmZXIpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1
cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIEpOSUVudiogam5pKCkg
ewotICAgIHJldHVybiBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgfQotCi0gIGNv
bnN0IFNjb3BlZEdsb2JhbFJlZjxqb2JqZWN0PiBqX29ic2VydmVyX2dsb2JhbF87Ci0gIGNvbnN0
IFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfb2JzZXJ2ZXJfY2xhc3NfOwotICBjb25zdCBTY29w
ZWRHbG9iYWxSZWY8amNsYXNzPiBqX2J1ZmZlcl9jbGFzc187Ci0gIGNvbnN0IGptZXRob2RJRCBq
X29uX2J1ZmZlcmVkX2Ftb3VudF9jaGFuZ2VfbWlkXzsKLSAgY29uc3Qgam1ldGhvZElEIGpfb25f
c3RhdGVfY2hhbmdlX21pZF87Ci0gIGNvbnN0IGptZXRob2RJRCBqX29uX21lc3NhZ2VfbWlkXzsK
LSAgY29uc3Qgam1ldGhvZElEIGpfYnVmZmVyX2N0b3JfOwotfTsKLQotLy8gQWRhcHRlciBmb3Ig
YSBKYXZhIFN0YXRzT2JzZXJ2ZXIgcHJlc2VudGluZyBhIEMrKyBTdGF0c09ic2VydmVyIGFuZAot
Ly8gZGlzcGF0Y2hpbmcgdGhlIGNhbGxiYWNrIGZyb20gQysrIGJhY2sgdG8gSmF2YS4KLWNsYXNz
IFN0YXRzT2JzZXJ2ZXJXcmFwcGVyIDogcHVibGljIFN0YXRzT2JzZXJ2ZXIgewotIHB1YmxpYzoK
LSAgU3RhdHNPYnNlcnZlcldyYXBwZXIoSk5JRW52KiBqbmksIGpvYmplY3Qgal9vYnNlcnZlcikK
LSAgICAgIDogal9vYnNlcnZlcl9nbG9iYWxfKGpuaSwgal9vYnNlcnZlciksCi0gICAgICAgIGpf
b2JzZXJ2ZXJfY2xhc3NfKGpuaSwgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX29ic2VydmVyKSksCi0g
ICAgICAgIGpfc3RhdHNfcmVwb3J0X2NsYXNzXyhqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2Vi
cnRjL1N0YXRzUmVwb3J0IikpLAotICAgICAgICBqX3N0YXRzX3JlcG9ydF9jdG9yXyhHZXRNZXRo
b2RJRCgKLSAgICAgICAgICAgIGpuaSwgKmpfc3RhdHNfcmVwb3J0X2NsYXNzXywgIjxpbml0PiIs
Ci0gICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nO0QiCi0g
ICAgICAgICAgICAiW0xvcmcvd2VicnRjL1N0YXRzUmVwb3J0JFZhbHVlOylWIikpLAotICAgICAg
ICBqX3ZhbHVlX2NsYXNzXyhqbmksIEZpbmRDbGFzcygKLSAgICAgICAgICAgIGpuaSwgIm9yZy93
ZWJydGMvU3RhdHNSZXBvcnQkVmFsdWUiKSksCi0gICAgICAgIGpfdmFsdWVfY3Rvcl8oR2V0TWV0
aG9kSUQoCi0gICAgICAgICAgICBqbmksICpqX3ZhbHVlX2NsYXNzXywgIjxpbml0PiIsCi0gICAg
ICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvU3RyaW5nOylWIikpIHsKLSAg
fQotCi0gIHZpcnR1YWwgflN0YXRzT2JzZXJ2ZXJXcmFwcGVyKCkge30KLQotICB2b2lkIE9uQ29t
cGxldGUoY29uc3QgU3RhdHNSZXBvcnRzJiByZXBvcnRzKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVk
TG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGpvYmplY3RBcnJheSBq
X3JlcG9ydHMgPSBSZXBvcnRzVG9KYXZhKGpuaSgpLCByZXBvcnRzKTsKLSAgICBqbWV0aG9kSUQg
bSA9IEdldE1ldGhvZElEKGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18sICJvbkNvbXBsZXRlIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoW0xvcmcvd2VicnRjL1N0YXRzUmVwb3J0
OylWIik7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIG0s
IGpfcmVwb3J0cyk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5n
IENhbGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gcHJpdmF0ZToKLSAgam9iamVjdEFycmF5IFJlcG9y
dHNUb0phdmEoCi0gICAgICBKTklFbnYqIGpuaSwgY29uc3QgU3RhdHNSZXBvcnRzJiByZXBvcnRz
KSB7Ci0gICAgam9iamVjdEFycmF5IHJlcG9ydHNfYXJyYXkgPSBqbmktPk5ld09iamVjdEFycmF5
KAotICAgICAgICByZXBvcnRzLnNpemUoKSwgKmpfc3RhdHNfcmVwb3J0X2NsYXNzXywgTlVMTCk7
Ci0gICAgaW50IGkgPSAwOwotICAgIGZvciAoY29uc3QgYXV0byogcmVwb3J0IDogcmVwb3J0cykg
ewotICAgICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgICAg
IGpzdHJpbmcgal9pZCA9IEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSwgcmVwb3J0LT5pZCgp
LT5Ub1N0cmluZygpKTsKLSAgICAgIGpzdHJpbmcgal90eXBlID0gSmF2YVN0cmluZ0Zyb21TdGRT
dHJpbmcoam5pLCByZXBvcnQtPlR5cGVUb1N0cmluZygpKTsKLSAgICAgIGpvYmplY3RBcnJheSBq
X3ZhbHVlcyA9IFZhbHVlc1RvSmF2YShqbmksIHJlcG9ydC0+dmFsdWVzKCkpOwotICAgICAgam9i
amVjdCBqX3JlcG9ydCA9IGpuaS0+TmV3T2JqZWN0KCpqX3N0YXRzX3JlcG9ydF9jbGFzc18sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal9zdGF0c19yZXBvcnRfY3Rv
cl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal9pZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX3R5cGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0LT50aW1lc3RhbXAoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX3ZhbHVlcyk7Ci0gICAgICBqbmktPlNl
dE9iamVjdEFycmF5RWxlbWVudChyZXBvcnRzX2FycmF5LCBpKyssIGpfcmVwb3J0KTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJlcG9ydHNfYXJyYXk7Ci0gIH0KLQotICBqb2JqZWN0QXJyYXkgVmFsdWVz
VG9KYXZhKEpOSUVudiogam5pLCBjb25zdCBTdGF0c1JlcG9ydDo6VmFsdWVzJiB2YWx1ZXMpIHsK
LSAgICBqb2JqZWN0QXJyYXkgal92YWx1ZXMgPSBqbmktPk5ld09iamVjdEFycmF5KAotICAgICAg
ICB2YWx1ZXMuc2l6ZSgpLCAqal92YWx1ZV9jbGFzc18sIE5VTEwpOwotICAgIGludCBpID0gMDsK
LSAgICBmb3IgKGNvbnN0IGF1dG8mIGl0IDogdmFsdWVzKSB7Ci0gICAgICBTY29wZWRMb2NhbFJl
ZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICAgICAgLy8gU2hvdWxkIHdlIHVzZSB0aGUg
Jy5uYW1lJyBlbnVtIHZhbHVlIGhlcmUgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZQotICAgICAg
Ly8gbmFtZSB0byBhIHN0cmluZz8KLSAgICAgIGpzdHJpbmcgal9uYW1lID0gSmF2YVN0cmluZ0Zy
b21TdGRTdHJpbmcoam5pLCBpdC5zZWNvbmQtPmRpc3BsYXlfbmFtZSgpKTsKLSAgICAgIGpzdHJp
bmcgal92YWx1ZSA9IEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSwgaXQuc2Vjb25kLT5Ub1N0
cmluZygpKTsKLSAgICAgIGpvYmplY3Qgal9lbGVtZW50X3ZhbHVlID0KLSAgICAgICAgICBqbmkt
Pk5ld09iamVjdCgqal92YWx1ZV9jbGFzc18sIGpfdmFsdWVfY3Rvcl8sIGpfbmFtZSwgal92YWx1
ZSk7Ci0gICAgICBqbmktPlNldE9iamVjdEFycmF5RWxlbWVudChqX3ZhbHVlcywgaSsrLCBqX2Vs
ZW1lbnRfdmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gal92YWx1ZXM7Ci0gIH0KLQotICBKTklF
bnYqIGpuaSgpIHsKLSAgICByZXR1cm4gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0g
IH0KLQotICBjb25zdCBTY29wZWRHbG9iYWxSZWY8am9iamVjdD4gal9vYnNlcnZlcl9nbG9iYWxf
OwotICBjb25zdCBTY29wZWRHbG9iYWxSZWY8amNsYXNzPiBqX29ic2VydmVyX2NsYXNzXzsKLSAg
Y29uc3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9zdGF0c19yZXBvcnRfY2xhc3NfOwotICBj
b25zdCBqbWV0aG9kSUQgal9zdGF0c19yZXBvcnRfY3Rvcl87Ci0gIGNvbnN0IFNjb3BlZEdsb2Jh
bFJlZjxqY2xhc3M+IGpfdmFsdWVfY2xhc3NfOwotICBjb25zdCBqbWV0aG9kSUQgal92YWx1ZV9j
dG9yXzsKLX07Ci0KLS8vIFdyYXBwZXIgZGlzcGF0Y2hpbmcgcnRjOjpWaWRlb1NpbmtJbnRlcmZh
Y2UgdG8gYSBKYXZhIFZpZGVvUmVuZGVyZXIKLS8vIGluc3RhbmNlLgotY2xhc3MgSmF2YVZpZGVv
UmVuZGVyZXJXcmFwcGVyCi0gICAgOiBwdWJsaWMgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2U8d2Vi
cnRjOjpWaWRlb0ZyYW1lPiB7Ci0gcHVibGljOgotICBKYXZhVmlkZW9SZW5kZXJlcldyYXBwZXIo
Sk5JRW52KiBqbmksIGpvYmplY3Qgal9jYWxsYmFja3MpCi0gICAgICA6IGpfY2FsbGJhY2tzXyhq
bmksIGpfY2FsbGJhY2tzKSwKLSAgICAgICAgal9yZW5kZXJfZnJhbWVfaWRfKEdldE1ldGhvZElE
KAotICAgICAgICAgICAgam5pLCBHZXRPYmplY3RDbGFzcyhqbmksIGpfY2FsbGJhY2tzKSwgInJl
bmRlckZyYW1lIiwKLSAgICAgICAgICAgICIoTG9yZy93ZWJydGMvVmlkZW9SZW5kZXJlciRJNDIw
RnJhbWU7KVYiKSksCi0gICAgICAgIGpfZnJhbWVfY2xhc3NfKGpuaSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvVmlkZW9SZW5kZXJlciRJNDIwRnJh
bWUiKSksCi0gICAgICAgIGpfaTQyMF9mcmFtZV9jdG9yX2lkXyhHZXRNZXRob2RJRCgKLSAgICAg
ICAgICAgIGpuaSwgKmpfZnJhbWVfY2xhc3NfLCAiPGluaXQ+IiwgIihJSUlbSVtMamF2YS9uaW8v
Qnl0ZUJ1ZmZlcjtKKVYiKSksCi0gICAgICAgIGpfdGV4dHVyZV9mcmFtZV9jdG9yX2lkXyhHZXRN
ZXRob2RJRCgKLSAgICAgICAgICAgIGpuaSwgKmpfZnJhbWVfY2xhc3NfLCAiPGluaXQ+IiwKLSAg
ICAgICAgICAgICIoSUlJSVtGSilWIikpLAotICAgICAgICBqX2J5dGVfYnVmZmVyX2NsYXNzXyhq
bmksIEZpbmRDbGFzcyhqbmksICJqYXZhL25pby9CeXRlQnVmZmVyIikpIHsKLSAgICBDSEVDS19F
WENFUFRJT04oam5pKTsKLSAgfQotCi0gIHZpcnR1YWwgfkphdmFWaWRlb1JlbmRlcmVyV3JhcHBl
cigpIHt9Ci0KLSAgdm9pZCBPbkZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgdmlkZW9f
ZnJhbWUpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFt
ZShqbmkoKSk7Ci0gICAgam9iamVjdCBqX2ZyYW1lID0KLSAgICAgICAgKHZpZGVvX2ZyYW1lLnZp
ZGVvX2ZyYW1lX2J1ZmZlcigpLT5uYXRpdmVfaGFuZGxlKCkgIT0gbnVsbHB0cikKLSAgICAgICAg
ICAgID8gQ3JpY2tldFRvSmF2YVRleHR1cmVGcmFtZSgmdmlkZW9fZnJhbWUpCi0gICAgICAgICAg
ICA6IENyaWNrZXRUb0phdmFJNDIwRnJhbWUoJnZpZGVvX2ZyYW1lKTsKLSAgICAvLyB8al9jYWxs
YmFja3NffCBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHxqX2ZyYW1lfCB3aXRoCi0gICAg
Ly8gVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoKS4KLSAgICBqbmkoKS0+Q2FsbFZvaWRN
ZXRob2QoKmpfY2FsbGJhY2tzXywgal9yZW5kZXJfZnJhbWVfaWRfLCBqX2ZyYW1lKTsKLSAgICBD
SEVDS19FWENFUFRJT04oam5pKCkpOwotICB9Ci0KLSBwcml2YXRlOgotICAvLyBNYWtlIGEgc2hh
bGxvdyBjb3B5IG9mIHxmcmFtZXwgdG8gYmUgdXNlZCB3aXRoIEphdmEuIFRoZSBjYWxsZWUgaGFz
Ci0gIC8vIG93bmVyc2hpcCBvZiB0aGUgZnJhbWUsIGFuZCB0aGUgZnJhbWUgc2hvdWxkIGJlIHJl
bGVhc2VkIHdpdGgKLSAgLy8gVmlkZW9SZW5kZXJlci5yZWxlYXNlTmF0aXZlRnJhbWUoKS4KLSAg
c3RhdGljIGpsb25nIGphdmFTaGFsbG93Q29weShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUqIGZy
YW1lKSB7Ci0gICAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIobmV3IHdlYnJ0Yzo6VmlkZW9GcmFt
ZSgqZnJhbWUpKTsKLSAgfQotCi0gIC8vIFJldHVybiBhIFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1l
IHJlZmVycmluZyB0byB0aGUgZGF0YSBpbiB8ZnJhbWV8LgotICBqb2JqZWN0IENyaWNrZXRUb0ph
dmFJNDIwRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lKiBmcmFtZSkgewotICAgIGppbnRB
cnJheSBzdHJpZGVzID0gam5pKCktPk5ld0ludEFycmF5KDMpOwotICAgIGppbnQqIHN0cmlkZXNf
YXJyYXkgPSBqbmkoKS0+R2V0SW50QXJyYXlFbGVtZW50cyhzdHJpZGVzLCBOVUxMKTsKLSAgICBz
dHJpZGVzX2FycmF5WzBdID0gZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJpZGVZKCk7
Ci0gICAgc3RyaWRlc19hcnJheVsxXSA9IGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+U3Ry
aWRlVSgpOwotICAgIHN0cmlkZXNfYXJyYXlbMl0gPSBmcmFtZS0+dmlkZW9fZnJhbWVfYnVmZmVy
KCktPlN0cmlkZVYoKTsKLSAgICBqbmkoKS0+UmVsZWFzZUludEFycmF5RWxlbWVudHMoc3RyaWRl
cywgc3RyaWRlc19hcnJheSwgMCk7Ci0gICAgam9iamVjdEFycmF5IHBsYW5lcyA9IGpuaSgpLT5O
ZXdPYmplY3RBcnJheSgzLCAqal9ieXRlX2J1ZmZlcl9jbGFzc18sIE5VTEwpOwotICAgIGpvYmpl
Y3QgeV9idWZmZXIgPSBqbmkoKS0+TmV3RGlyZWN0Qnl0ZUJ1ZmZlcigKLSAgICAgICAgY29uc3Rf
Y2FzdDx1aW50OF90Kj4oZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5EYXRhWSgpKSwKLSAg
ICAgICAgZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJpZGVZKCkgKgotICAgICAgICAg
ICAgZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5oZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGNo
cm9tYV9oZWlnaHQgPSAoZnJhbWUtPmhlaWdodCgpICsgMSkgLyAyOwotICAgIGpvYmplY3QgdV9i
dWZmZXIgPSBqbmkoKS0+TmV3RGlyZWN0Qnl0ZUJ1ZmZlcigKLSAgICAgICAgY29uc3RfY2FzdDx1
aW50OF90Kj4oZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5EYXRhVSgpKSwKLSAgICAgICAg
ZnJhbWUtPnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5TdHJpZGVVKCkgKiBjaHJvbWFfaGVpZ2h0KTsK
LSAgICBqb2JqZWN0IHZfYnVmZmVyID0gam5pKCktPk5ld0RpcmVjdEJ5dGVCdWZmZXIoCi0gICAg
ICAgIGNvbnN0X2Nhc3Q8dWludDhfdCo+KGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+RGF0
YVYoKSksCi0gICAgICAgIGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+U3RyaWRlVigpICog
Y2hyb21hX2hlaWdodCk7Ci0KLSAgICBqbmkoKS0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KHBsYW5l
cywgMCwgeV9idWZmZXIpOwotICAgIGpuaSgpLT5TZXRPYmplY3RBcnJheUVsZW1lbnQocGxhbmVz
LCAxLCB1X2J1ZmZlcik7Ci0gICAgam5pKCktPlNldE9iamVjdEFycmF5RWxlbWVudChwbGFuZXMs
IDIsIHZfYnVmZmVyKTsKLSAgICByZXR1cm4gam5pKCktPk5ld09iamVjdCgKLSAgICAgICAgKmpf
ZnJhbWVfY2xhc3NfLCBqX2k0MjBfZnJhbWVfY3Rvcl9pZF8sCi0gICAgICAgIGZyYW1lLT53aWR0
aCgpLCBmcmFtZS0+aGVpZ2h0KCksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4oZnJhbWUtPnJv
dGF0aW9uKCkpLAotICAgICAgICBzdHJpZGVzLCBwbGFuZXMsIGphdmFTaGFsbG93Q29weShmcmFt
ZSkpOwotICB9Ci0KLSAgLy8gUmV0dXJuIGEgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgcmVmZXJy
aW5nIHRleHR1cmUgb2JqZWN0IGluIHxmcmFtZXwuCi0gIGpvYmplY3QgQ3JpY2tldFRvSmF2YVRl
eHR1cmVGcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUqIGZyYW1lKSB7Ci0gICAgTmF0aXZl
SGFuZGxlSW1wbCogaGFuZGxlID0gcmVpbnRlcnByZXRfY2FzdDxOYXRpdmVIYW5kbGVJbXBsKj4o
Ci0gICAgICAgIGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+bmF0aXZlX2hhbmRsZSgpKTsK
LSAgICBqZmxvYXRBcnJheSBzYW1wbGluZ19tYXRyaXggPSBoYW5kbGUtPnNhbXBsaW5nX21hdHJp
eC5Ub0phdmEoam5pKCkpOwotCi0gICAgcmV0dXJuIGpuaSgpLT5OZXdPYmplY3QoCi0gICAgICAg
ICpqX2ZyYW1lX2NsYXNzXywgal90ZXh0dXJlX2ZyYW1lX2N0b3JfaWRfLAotICAgICAgICBmcmFt
ZS0+d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGZy
YW1lLT5yb3RhdGlvbigpKSwKLSAgICAgICAgaGFuZGxlLT5vZXNfdGV4dHVyZV9pZCwgc2FtcGxp
bmdfbWF0cml4LCBqYXZhU2hhbGxvd0NvcHkoZnJhbWUpKTsKLSAgfQotCi0gIEpOSUVudiogam5p
KCkgewotICAgIHJldHVybiBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgfQotCi0g
IFNjb3BlZEdsb2JhbFJlZjxqb2JqZWN0PiBqX2NhbGxiYWNrc187Ci0gIGptZXRob2RJRCBqX3Jl
bmRlcl9mcmFtZV9pZF87Ci0gIFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfZnJhbWVfY2xhc3Nf
OwotICBqbWV0aG9kSUQgal9pNDIwX2ZyYW1lX2N0b3JfaWRfOwotICBqbWV0aG9kSUQgal90ZXh0
dXJlX2ZyYW1lX2N0b3JfaWRfOwotICBTY29wZWRHbG9iYWxSZWY8amNsYXNzPiBqX2J5dGVfYnVm
ZmVyX2NsYXNzXzsKLX07Ci0KLQotc3RhdGljIERhdGFDaGFubmVsSW50ZXJmYWNlKiBFeHRyYWN0
TmF0aXZlREMoSk5JRW52KiBqbmksIGpvYmplY3Qgal9kYykgewotICBqZmllbGRJRCBuYXRpdmVf
ZGNfaWQgPSBHZXRGaWVsZElEKGpuaSwKLSAgICAgIEdldE9iamVjdENsYXNzKGpuaSwgal9kYyks
ICJuYXRpdmVEYXRhQ2hhbm5lbCIsICJKIik7Ci0gIGpsb25nIGpfZCA9IEdldExvbmdGaWVsZChq
bmksIGpfZGMsIG5hdGl2ZV9kY19pZCk7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PERhdGFD
aGFubmVsSW50ZXJmYWNlKj4oal9kKTsKLX0KLQotSk9XKGpsb25nLCBEYXRhQ2hhbm5lbF9yZWdp
c3Rlck9ic2VydmVyTmF0aXZlKSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX2RjLCBqb2Jq
ZWN0IGpfb2JzZXJ2ZXIpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPERhdGFDaGFubmVsT2JzZXJ2ZXJX
cmFwcGVyPiBvYnNlcnZlcigKLSAgICAgIG5ldyBEYXRhQ2hhbm5lbE9ic2VydmVyV3JhcHBlcihq
bmksIGpfb2JzZXJ2ZXIpKTsKLSAgRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPlJlZ2lzdGVy
T2JzZXJ2ZXIob2JzZXJ2ZXIuZ2V0KCkpOwotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcihvYnNl
cnZlci5yZWxlYXNlKCkpOwotfQotCi1KT1codm9pZCwgRGF0YUNoYW5uZWxfdW5yZWdpc3Rlck9i
c2VydmVyTmF0aXZlKSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX2RjLCBqbG9uZyBuYXRp
dmVfb2JzZXJ2ZXIpIHsKLSAgRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPlVucmVnaXN0ZXJP
YnNlcnZlcigpOwotICBkZWxldGUgcmVpbnRlcnByZXRfY2FzdDxEYXRhQ2hhbm5lbE9ic2VydmVy
V3JhcHBlcio+KG5hdGl2ZV9vYnNlcnZlcik7Ci19Ci0KLUpPVyhqc3RyaW5nLCBEYXRhQ2hhbm5l
bF9sYWJlbCkoSk5JRW52KiBqbmksIGpvYmplY3Qgal9kYykgewotICByZXR1cm4gSmF2YVN0cmlu
Z0Zyb21TdGRTdHJpbmcoam5pLCBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+bGFiZWwoKSk7
Ci19Ci0KLUpPVyhqaW50LCBEYXRhQ2hhbm5lbF9pZCkoSk5JRW52KiBqbmksIGpvYmplY3Qgal9k
YykgewotICBpbnQgaWQgPSBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+aWQoKTsKLSAgUlRD
X0NIRUNLX0xFKGlkLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludDMyX3Q+OjptYXgoKSkKLSAgICAg
IDw8ICJpZCBvdmVyZmxvd2VkIGppbnQhIjsKLSAgcmV0dXJuIHN0YXRpY19jYXN0PGppbnQ+KGlk
KTsKLX0KLQotSk9XKGpvYmplY3QsIERhdGFDaGFubmVsX3N0YXRlKShKTklFbnYqIGpuaSwgam9i
amVjdCBqX2RjKSB7Ci0gIHJldHVybiBKYXZhRW51bUZyb21JbmRleCgKLSAgICAgIGpuaSwgIkRh
dGFDaGFubmVsJFN0YXRlIiwgRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPnN0YXRlKCkpOwot
fQotCi1KT1coamxvbmcsIERhdGFDaGFubmVsX2J1ZmZlcmVkQW1vdW50KShKTklFbnYqIGpuaSwg
am9iamVjdCBqX2RjKSB7Ci0gIHVpbnQ2NF90IGJ1ZmZlcmVkX2Ftb3VudCA9IEV4dHJhY3ROYXRp
dmVEQyhqbmksIGpfZGMpLT5idWZmZXJlZF9hbW91bnQoKTsKLSAgUlRDX0NIRUNLX0xFKGJ1ZmZl
cmVkX2Ftb3VudCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpCi0gICAgICA8
PCAiYnVmZmVyZWRfYW1vdW50IG92ZXJmbG93ZWQgamxvbmchIjsKLSAgcmV0dXJuIHN0YXRpY19j
YXN0PGpsb25nPihidWZmZXJlZF9hbW91bnQpOwotfQotCi1KT1codm9pZCwgRGF0YUNoYW5uZWxf
Y2xvc2UpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMpIHsKLSAgRXh0cmFjdE5hdGl2ZURDKGpu
aSwgal9kYyktPkNsb3NlKCk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgRGF0YUNoYW5uZWxfc2VuZE5h
dGl2ZSkoSk5JRW52KiBqbmksIGpvYmplY3Qgal9kYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgamJ5dGVBcnJheSBkYXRhLCBqYm9vbGVhbiBiaW5hcnkpIHsKLSAgamJ5
dGUqIGJ5dGVzID0gam5pLT5HZXRCeXRlQXJyYXlFbGVtZW50cyhkYXRhLCBOVUxMKTsKLSAgYm9v
bCByZXQgPSBFeHRyYWN0TmF0aXZlREMoam5pLCBqX2RjKS0+U2VuZChEYXRhQnVmZmVyKAotICAg
ICAgcnRjOjpDb3B5T25Xcml0ZUJ1ZmZlcihieXRlcywgam5pLT5HZXRBcnJheUxlbmd0aChkYXRh
KSksCi0gICAgICBiaW5hcnkpKTsKLSAgam5pLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoZGF0
YSwgYnl0ZXMsIEpOSV9BQk9SVCk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLUpPVyh2b2lkLCBEYXRh
Q2hhbm5lbF9kaXNwb3NlKShKTklFbnYqIGpuaSwgam9iamVjdCBqX2RjKSB7Ci0gIENIRUNLX1JF
TEVBU0UoRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYykpOwotfQotCi1KT1codm9pZCwgTG9nZ2lu
Z19uYXRpdmVFbmFibGVUcmFjaW5nKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqc3RyaW5n
IGpfcGF0aCwgamludCBuYXRpdmVMZXZlbHMpIHsKLSAgc3RkOjpzdHJpbmcgcGF0aCA9IEphdmFU
b1N0ZFN0cmluZyhqbmksIGpfcGF0aCk7Ci0gIGlmIChuYXRpdmVMZXZlbHMgIT0gd2VicnRjOjpr
VHJhY2VOb25lKSB7Ci0gICAgd2VicnRjOjpUcmFjZTo6c2V0X2xldmVsX2ZpbHRlcihuYXRpdmVM
ZXZlbHMpOwotICAgIGlmIChwYXRoICE9ICJsb2djYXQ6IikgewotICAgICAgUlRDX0NIRUNLX0VR
KDAsIHdlYnJ0Yzo6VHJhY2U6OlNldFRyYWNlRmlsZShwYXRoLmNfc3RyKCksIGZhbHNlKSkKLSAg
ICAgICAgICA8PCAiU2V0VHJhY2VGaWxlIGZhaWxlZCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8v
IEludGVudGlvbmFsbHkgbGVhayB0aGlzIHRvIGF2b2lkIG5lZWRpbmcgdG8gcmVhc29uIGFib3V0
IGl0cyBsaWZlY3ljbGUuCi0gICAgICAvLyBJdCBrZWVwcyBubyBzdGF0ZSBhbmQgZnVuY3Rpb25z
IG9ubHkgYXMgYSBkaXNwYXRjaCBwb2ludC4KLSAgICAgIHN0YXRpYyBMb2djYXRUcmFjZUNvbnRl
eHQqIGdfdHJhY2VfY2FsbGJhY2sgPSBuZXcgTG9nY2F0VHJhY2VDb250ZXh0KCk7Ci0gICAgfQot
ICB9Ci19Ci0KLUpPVyh2b2lkLCBMb2dnaW5nX25hdGl2ZUVuYWJsZUxvZ1RvRGVidWdPdXRwdXQp
Ci0gICAgKEpOSUVudiAqam5pLCBqY2xhc3MsIGppbnQgbmF0aXZlU2V2ZXJpdHkpIHsKLSAgaWYg
KG5hdGl2ZVNldmVyaXR5ID49IHJ0Yzo6TFNfU0VOU0lUSVZFICYmIG5hdGl2ZVNldmVyaXR5IDw9
IHJ0Yzo6TFNfTk9ORSkgewotICAgIHJ0Yzo6TG9nTWVzc2FnZTo6TG9nVG9EZWJ1ZygKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8cnRjOjpMb2dnaW5nU2V2ZXJpdHk+KG5hdGl2ZVNldmVyaXR5KSk7Ci0g
IH0KLX0KLQotSk9XKHZvaWQsIExvZ2dpbmdfbmF0aXZlRW5hYmxlTG9nVGhyZWFkcykoSk5JRW52
KiBqbmksIGpjbGFzcykgewotICBydGM6OkxvZ01lc3NhZ2U6OkxvZ1RocmVhZHModHJ1ZSk7Ci19
Ci0KLUpPVyh2b2lkLCBMb2dnaW5nX25hdGl2ZUVuYWJsZUxvZ1RpbWVTdGFtcHMpKEpOSUVudiog
am5pLCBqY2xhc3MpIHsKLSAgcnRjOjpMb2dNZXNzYWdlOjpMb2dUaW1lc3RhbXBzKHRydWUpOwot
fQotCi1KT1codm9pZCwgTG9nZ2luZ19uYXRpdmVMb2cpKAotICAgIEpOSUVudiogam5pLCBqY2xh
c3MsIGppbnQgal9zZXZlcml0eSwganN0cmluZyBqX3RhZywganN0cmluZyBqX21lc3NhZ2UpIHsK
LSAgc3RkOjpzdHJpbmcgbWVzc2FnZSA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfbWVzc2FnZSk7
Ci0gIHN0ZDo6c3RyaW5nIHRhZyA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfdGFnKTsKLSAgTE9H
X1RBRyhzdGF0aWNfY2FzdDxydGM6OkxvZ2dpbmdTZXZlcml0eT4oal9zZXZlcml0eSksIHRhZykg
PDwgbWVzc2FnZTsKLX0KLQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uX2ZyZWVQZWVyQ29ubmVj
dGlvbikoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgQ0hFQ0tfUkVMRUFTRShyZWlu
dGVycHJldF9jYXN0PFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlKj4oal9wKSk7Ci19Ci0KLUpPVyh2
b2lkLCBQZWVyQ29ubmVjdGlvbl9mcmVlT2JzZXJ2ZXIpKEpOSUVudiosIGpjbGFzcywgamxvbmcg
al9wKSB7Ci0gIFBDT0phdmEqIHAgPSByZWludGVycHJldF9jYXN0PFBDT0phdmEqPihqX3ApOwot
ICBkZWxldGUgcDsKLX0KLQotSk9XKHZvaWQsIE1lZGlhU291cmNlX2ZyZWUpKEpOSUVudiosIGpj
bGFzcywgamxvbmcgal9wKSB7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8cnRjOjpSZWZDb3VudEludGVy
ZmFjZSo+KGpfcCktPlJlbGVhc2UoKTsKLX0KLQotSk9XKHZvaWQsIFZpZGVvUmVuZGVyZXJfZnJl
ZVdyYXBwZWRWaWRlb1JlbmRlcmVyKShKTklFbnYqLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICBk
ZWxldGUgcmVpbnRlcnByZXRfY2FzdDxKYXZhVmlkZW9SZW5kZXJlcldyYXBwZXIqPihqX3ApOwot
fQotCi1KT1codm9pZCwgVmlkZW9SZW5kZXJlcl9yZWxlYXNlTmF0aXZlRnJhbWUpKAotICAgIEpO
SUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfZnJhbWVfcHRyKSB7Ci0gIGRlbGV0ZSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSo+KGpfZnJhbWVfcHRyKTsKLX0KLQot
Sk9XKHZvaWQsIE1lZGlhU3RyZWFtVHJhY2tfZnJlZSkoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBq
X3ApIHsKLSAgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4oal9w
KS0+UmVsZWFzZSgpOwotfQotCi1KT1coamJvb2xlYW4sIE1lZGlhU3RyZWFtX25hdGl2ZUFkZEF1
ZGlvVHJhY2spKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIHBvaW50ZXIsIGpsb25n
IGpfYXVkaW9fdHJhY2tfcG9pbnRlcikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZWRp
YVN0cmVhbUludGVyZmFjZSo+KHBvaW50ZXIpLT5BZGRUcmFjaygKLSAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8QXVkaW9UcmFja0ludGVyZmFjZSo+KGpfYXVkaW9fdHJhY2tfcG9pbnRlcikpOwotfQot
Ci1KT1coamJvb2xlYW4sIE1lZGlhU3RyZWFtX25hdGl2ZUFkZFZpZGVvVHJhY2spKAotICAgIEpO
SUVudiogam5pLCBqY2xhc3MsIGpsb25nIHBvaW50ZXIsIGpsb25nIGpfdmlkZW9fdHJhY2tfcG9p
bnRlcikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+
KHBvaW50ZXIpCi0gICAgICAtPkFkZFRyYWNrKHJlaW50ZXJwcmV0X2Nhc3Q8VmlkZW9UcmFja0lu
dGVyZmFjZSo+KGpfdmlkZW9fdHJhY2tfcG9pbnRlcikpOwotfQotCi1KT1coamJvb2xlYW4sIE1l
ZGlhU3RyZWFtX25hdGl2ZVJlbW92ZUF1ZGlvVHJhY2spKAotICAgIEpOSUVudiogam5pLCBqY2xh
c3MsIGpsb25nIHBvaW50ZXIsIGpsb25nIGpfYXVkaW9fdHJhY2tfcG9pbnRlcikgewotICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+KHBvaW50ZXIpLT5SZW1v
dmVUcmFjaygKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9UcmFja0ludGVyZmFjZSo+KGpf
YXVkaW9fdHJhY2tfcG9pbnRlcikpOwotfQotCi1KT1coamJvb2xlYW4sIE1lZGlhU3RyZWFtX25h
dGl2ZVJlbW92ZVZpZGVvVHJhY2spKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIHBv
aW50ZXIsIGpsb25nIGpfdmlkZW9fdHJhY2tfcG9pbnRlcikgewotICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+KHBvaW50ZXIpLT5SZW1vdmVUcmFjaygKLSAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8VmlkZW9UcmFja0ludGVyZmFjZSo+KGpfdmlkZW9fdHJhY2tf
cG9pbnRlcikpOwotfQotCi1KT1coanN0cmluZywgTWVkaWFTdHJlYW1fbmF0aXZlTGFiZWwpKEpO
SUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICByZXR1cm4gSmF2YVN0cmluZ0Zyb21T
dGRTdHJpbmcoCi0gICAgICBqbmksIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZh
Y2UqPihqX3ApLT5sYWJlbCgpKTsKLX0KLQotSk9XKHZvaWQsIE1lZGlhU3RyZWFtX2ZyZWUpKEpO
SUVudiosIGpjbGFzcywgamxvbmcgal9wKSB7Ci0gIENIRUNLX1JFTEVBU0UocmVpbnRlcnByZXRf
Y2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+KGpfcCkpOwotfQotCi1KT1coamxvbmcsIFBlZXJD
b25uZWN0aW9uRmFjdG9yeV9uYXRpdmVDcmVhdGVPYnNlcnZlcikoCi0gICAgSk5JRW52ICogam5p
LCBqY2xhc3MsIGpvYmplY3Qgal9vYnNlcnZlcikgewotICByZXR1cm4gKGpsb25nKW5ldyBQQ09K
YXZhKGpuaSwgal9vYnNlcnZlcik7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUGVlckNvbm5lY3Rpb25G
YWN0b3J5X2luaXRpYWxpemVBbmRyb2lkR2xvYmFscykKLShKTklFbnYqIGpuaSwKLSBqY2xhc3Ms
Ci0gam9iamVjdCBjb250ZXh0LAotIGpib29sZWFuIGluaXRpYWxpemVfYXVkaW8sCi0gamJvb2xl
YW4gaW5pdGlhbGl6ZV92aWRlbywKLSBqYm9vbGVhbiB2aWRlb19od19hY2NlbGVyYXRpb24pIHsK
LSAgYm9vbCBmYWlsdXJlID0gZmFsc2U7Ci0gIHZpZGVvX2h3X2FjY2VsZXJhdGlvbl9lbmFibGVk
ID0gdmlkZW9faHdfYWNjZWxlcmF0aW9uOwotICBBbmRyb2lkTmV0d29ya01vbml0b3I6OlNldEFu
ZHJvaWRDb250ZXh0KGpuaSwgY29udGV4dCk7Ci0gIGlmICghZmFjdG9yeV9zdGF0aWNfaW5pdGlh
bGl6ZWQpIHsKLSAgICBSVENfRENIRUNLKGpfYXBwbGljYXRpb25fY29udGV4dCA9PSBudWxscHRy
KTsKLSAgICBqX2FwcGxpY2F0aW9uX2NvbnRleHQgPSBOZXdHbG9iYWxSZWYoam5pLCBjb250ZXh0
KTsKLQotICAgIGlmIChpbml0aWFsaXplX2F1ZGlvKQotICAgICAgZmFpbHVyZSB8PSB3ZWJydGM6
OlZvaWNlRW5naW5lOjpTZXRBbmRyb2lkT2JqZWN0cyhHZXRKVk0oKSwgY29udGV4dCk7Ci0gICAg
ZmFjdG9yeV9zdGF0aWNfaW5pdGlhbGl6ZWQgPSB0cnVlOwotICB9Ci0gIHJldHVybiAhZmFpbHVy
ZTsKLX0KLQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9pbml0aWFsaXplRmllbGRU
cmlhbHMpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpzdHJpbmcgal90cmlhbHNfaW5pdF9z
dHJpbmcpIHsKLSAgZmllbGRfdHJpYWxzX2luaXRfc3RyaW5nID0gTlVMTDsKLSAgaWYgKGpfdHJp
YWxzX2luaXRfc3RyaW5nICE9IE5VTEwpIHsKLSAgICBjb25zdCBjaGFyKiBpbml0X3N0cmluZyA9
Ci0gICAgICAgIGpuaS0+R2V0U3RyaW5nVVRGQ2hhcnMoal90cmlhbHNfaW5pdF9zdHJpbmcsIE5V
TEwpOwotICAgIGludCBpbml0X3N0cmluZ19sZW5ndGggPSBqbmktPkdldFN0cmluZ1VURkxlbmd0
aChqX3RyaWFsc19pbml0X3N0cmluZyk7Ci0gICAgZmllbGRfdHJpYWxzX2luaXRfc3RyaW5nID0g
bmV3IGNoYXJbaW5pdF9zdHJpbmdfbGVuZ3RoICsgMV07Ci0gICAgcnRjOjpzdHJjcHluKGZpZWxk
X3RyaWFsc19pbml0X3N0cmluZywgaW5pdF9zdHJpbmdfbGVuZ3RoICsgMSwgaW5pdF9zdHJpbmcp
OwotICAgIGpuaS0+UmVsZWFzZVN0cmluZ1VURkNoYXJzKGpfdHJpYWxzX2luaXRfc3RyaW5nLCBp
bml0X3N0cmluZyk7Ci0gICAgTE9HKExTX0lORk8pIDw8ICJpbml0aWFsaXplRmllbGRUcmlhbHM6
ICIgPDwgZmllbGRfdHJpYWxzX2luaXRfc3RyaW5nOwotICB9Ci0gIHdlYnJ0Yzo6ZmllbGRfdHJp
YWw6OkluaXRGaWVsZFRyaWFsc0Zyb21TdHJpbmcoZmllbGRfdHJpYWxzX2luaXRfc3RyaW5nKTsK
LX0KLQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9pbml0aWFsaXplSW50ZXJuYWxU
cmFjZXIpKEpOSUVudiogam5pLCBqY2xhc3MpIHsKLSAgcnRjOjp0cmFjaW5nOjpTZXR1cEludGVy
bmFsVHJhY2VyKCk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X3N0
YXJ0SW50ZXJuYWxUcmFjaW5nQ2FwdHVyZSkoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywganN0
cmluZyBqX2V2ZW50X3RyYWNpbmdfZmlsZW5hbWUpIHsKLSAgaWYgKCFqX2V2ZW50X3RyYWNpbmdf
ZmlsZW5hbWUpCi0gICAgcmV0dXJuIGZhbHNlOwotCi0gIGNvbnN0IGNoYXIqIGluaXRfc3RyaW5n
ID0KLSAgICAgIGpuaS0+R2V0U3RyaW5nVVRGQ2hhcnMoal9ldmVudF90cmFjaW5nX2ZpbGVuYW1l
LCBOVUxMKTsKLSAgTE9HKExTX0lORk8pIDw8ICJTdGFydGluZyBpbnRlcm5hbCB0cmFjaW5nIHRv
OiAiIDw8IGluaXRfc3RyaW5nOwotICBib29sIHJldCA9IHJ0Yzo6dHJhY2luZzo6U3RhcnRJbnRl
cm5hbENhcHR1cmUoaW5pdF9zdHJpbmcpOwotICBqbmktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhq
X2V2ZW50X3RyYWNpbmdfZmlsZW5hbWUsIGluaXRfc3RyaW5nKTsKLSAgcmV0dXJuIHJldDsKLX0K
LQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9zdG9wSW50ZXJuYWxUcmFjaW5nQ2Fw
dHVyZSkoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcykgewotICBydGM6OnRyYWNpbmc6OlN0b3BJ
bnRlcm5hbENhcHR1cmUoKTsKLX0KLQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9z
aHV0ZG93bkludGVybmFsVHJhY2VyKShKTklFbnYqIGpuaSwgamNsYXNzKSB7Ci0gIHJ0Yzo6dHJh
Y2luZzo6U2h1dGRvd25JbnRlcm5hbFRyYWNlcigpOwotfQotCi0vLyBIZWxwZXIgc3RydWN0IGZv
ciB3b3JraW5nIGFyb3VuZCB0aGUgZmFjdCB0aGF0IENyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9y
eSgpCi0vLyBjb21lcyBpbiB0d28gZmxhdm9yczogZWl0aGVyIGVudGlyZWx5IGF1dG9tYWdpY2Fs
IChjb25zdHJ1Y3RpbmcgaXRzIG93bgotLy8gdGhyZWFkcyBhbmQgZGVsZXRpbmcgdGhlbSBvbiB0
ZWFyZG93biwgYnV0IG5vIGV4dGVybmFsIGNvZGVjIGZhY3Rvcnkgc3VwcG9ydCkKLS8vIG9yIGVu
dGlyZWx5IG1hbnVhbCAocmVxdWlyZXMgY2FsbGVyIHRvIGRlbGV0ZSB0aHJlYWRzIGFmdGVyIGZh
Y3RvcnkKLS8vIHRlYXJkb3duKS4gIFRoaXMgc3RydWN0IHRha2VzIG93bmVyc2hpcCBvZiBpdHMg
Y3RvcidzIGFyZ3VtZW50cyB0byBwcmVzZW50IGEKLS8vIHNpbmdsZSB0aGluZyBmb3IgSmF2YSB0
byBob2xkIGFuZCBldmVudHVhbGx5IGZyZWUuCi1jbGFzcyBPd25lZEZhY3RvcnlBbmRUaHJlYWRz
IHsKLSBwdWJsaWM6Ci0gIE93bmVkRmFjdG9yeUFuZFRocmVhZHMoc3RkOjp1bmlxdWVfcHRyPFRo
cmVhZD4gbmV0d29ya190aHJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPFRocmVhZD4gd29ya2VyX3RocmVhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPiBzaWduYWxpbmdfdGhyZWFkLAotICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlJ0Y1ZpZGVvRW5jb2RlckZhY3RvcnkqIGVuY29kZXJfZmFjdG9yeSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJSdGNWaWRlb0RlY29kZXJGYWN0b3J5KiBkZWNvZGVy
X2ZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgcnRjOjpOZXR3b3JrTW9uaXRvckZh
Y3RvcnkqIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAg
IFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZSogZmFjdG9yeSkKLSAgICAgIDogbmV0d29y
a190aHJlYWRfKHN0ZDo6bW92ZShuZXR3b3JrX3RocmVhZCkpLAotICAgICAgICB3b3JrZXJfdGhy
ZWFkXyhzdGQ6Om1vdmUod29ya2VyX3RocmVhZCkpLAotICAgICAgICBzaWduYWxpbmdfdGhyZWFk
XyhzdGQ6Om1vdmUoc2lnbmFsaW5nX3RocmVhZCkpLAotICAgICAgICBlbmNvZGVyX2ZhY3Rvcnlf
KGVuY29kZXJfZmFjdG9yeSksCi0gICAgICAgIGRlY29kZXJfZmFjdG9yeV8oZGVjb2Rlcl9mYWN0
b3J5KSwKLSAgICAgICAgbmV0d29ya19tb25pdG9yX2ZhY3RvcnlfKG5ldHdvcmtfbW9uaXRvcl9m
YWN0b3J5KSwKLSAgICAgICAgZmFjdG9yeV8oZmFjdG9yeSkge30KLQotICB+T3duZWRGYWN0b3J5
QW5kVGhyZWFkcygpIHsKLSAgICBDSEVDS19SRUxFQVNFKGZhY3RvcnlfKTsKLSAgICBpZiAobmV0
d29ya19tb25pdG9yX2ZhY3RvcnlfICE9IG51bGxwdHIpIHsKLSAgICAgIHJ0Yzo6TmV0d29ya01v
bml0b3JGYWN0b3J5OjpSZWxlYXNlRmFjdG9yeShuZXR3b3JrX21vbml0b3JfZmFjdG9yeV8pOwot
ICAgIH0KLSAgfQotCi0gIFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZSogZmFjdG9yeSgp
IHsgcmV0dXJuIGZhY3RvcnlfOyB9Ci0gIFRocmVhZCogc2lnbmFsaW5nX3RocmVhZCgpIHsgcmV0
dXJuIHNpZ25hbGluZ190aHJlYWRfLmdldCgpOyB9Ci0gIFRocmVhZCogd29ya2VyX3RocmVhZCgp
IHsgcmV0dXJuIHdvcmtlcl90aHJlYWRfLmdldCgpOyB9Ci0gIFdlYlJ0Y1ZpZGVvRW5jb2RlckZh
Y3RvcnkqIGVuY29kZXJfZmFjdG9yeSgpIHsgcmV0dXJuIGVuY29kZXJfZmFjdG9yeV87IH0KLSAg
V2ViUnRjVmlkZW9EZWNvZGVyRmFjdG9yeSogZGVjb2Rlcl9mYWN0b3J5KCkgeyByZXR1cm4gZGVj
b2Rlcl9mYWN0b3J5XzsgfQotICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSogbmV0d29ya19t
b25pdG9yX2ZhY3RvcnkoKSB7Ci0gICAgcmV0dXJuIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5XzsK
LSAgfQotICB2b2lkIGNsZWFyX25ldHdvcmtfbW9uaXRvcl9mYWN0b3J5KCkgeyBuZXR3b3JrX21v
bml0b3JfZmFjdG9yeV8gPSBudWxscHRyOyB9Ci0gIHZvaWQgSW52b2tlSmF2YUNhbGxiYWNrc09u
RmFjdG9yeVRocmVhZHMoKTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgSmF2YUNhbGxiYWNrT25GYWN0
b3J5VGhyZWFkcygpOwotCi0gIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+IG5ldHdvcmtf
dGhyZWFkXzsKLSAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPFRocmVhZD4gd29ya2VyX3RocmVhZF87
Ci0gIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+IHNpZ25hbGluZ190aHJlYWRfOwotICBX
ZWJSdGNWaWRlb0VuY29kZXJGYWN0b3J5KiBlbmNvZGVyX2ZhY3RvcnlfOwotICBXZWJSdGNWaWRl
b0RlY29kZXJGYWN0b3J5KiBkZWNvZGVyX2ZhY3RvcnlfOwotICBydGM6Ok5ldHdvcmtNb25pdG9y
RmFjdG9yeSogbmV0d29ya19tb25pdG9yX2ZhY3RvcnlfOwotICBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnlJbnRlcmZhY2UqIGZhY3RvcnlfOyAgLy8gQ29uc3QgYWZ0ZXIgY3RvciBleGNlcHQgZHRvci4K
LX07Ci0KLXZvaWQgT3duZWRGYWN0b3J5QW5kVGhyZWFkczo6SmF2YUNhbGxiYWNrT25GYWN0b3J5
VGhyZWFkcygpIHsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQo
KTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgamNsYXNz
IGpfZmFjdG9yeV9jbGFzcyA9IEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0
aW9uRmFjdG9yeSIpOwotICBqbWV0aG9kSUQgbSA9IG51bGxwdHI7Ci0gIGlmIChuZXR3b3JrX3Ro
cmVhZF8tPklzQ3VycmVudCgpKSB7Ci0gICAgTE9HKExTX0lORk8pIDw8ICJOZXR3b3JrIHRocmVh
ZCBKYXZhQ2FsbGJhY2siOwotICAgIG0gPSBHZXRTdGF0aWNNZXRob2RJRChqbmksIGpfZmFjdG9y
eV9jbGFzcywgIm9uTmV0d29ya1RocmVhZFJlYWR5IiwgIigpViIpOwotICB9Ci0gIGlmICh3b3Jr
ZXJfdGhyZWFkXy0+SXNDdXJyZW50KCkpIHsKLSAgICBMT0coTFNfSU5GTykgPDwgIldvcmtlciB0
aHJlYWQgSmF2YUNhbGxiYWNrIjsKLSAgICBtID0gR2V0U3RhdGljTWV0aG9kSUQoam5pLCBqX2Zh
Y3RvcnlfY2xhc3MsICJvbldvcmtlclRocmVhZFJlYWR5IiwgIigpViIpOwotICB9Ci0gIGlmIChz
aWduYWxpbmdfdGhyZWFkXy0+SXNDdXJyZW50KCkpIHsKLSAgICBMT0coTFNfSU5GTykgPDwgIlNp
Z25hbGluZyB0aHJlYWQgSmF2YUNhbGxiYWNrIjsKLSAgICBtID0gR2V0U3RhdGljTWV0aG9kSUQo
Ci0gICAgICAgIGpuaSwgal9mYWN0b3J5X2NsYXNzLCAib25TaWduYWxpbmdUaHJlYWRSZWFkeSIs
ICIoKVYiKTsKLSAgfQotICBpZiAobSAhPSBudWxscHRyKSB7Ci0gICAgam5pLT5DYWxsU3RhdGlj
Vm9pZE1ldGhvZChqX2ZhY3RvcnlfY2xhc3MsIG0pOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkp
IDw8ICJlcnJvciBkdXJpbmcgSmF2YUNhbGxiYWNrOjpDYWxsU3RhdGljVm9pZE1ldGhvZCI7Ci0g
IH0KLX0KLQotdm9pZCBPd25lZEZhY3RvcnlBbmRUaHJlYWRzOjpJbnZva2VKYXZhQ2FsbGJhY2tz
T25GYWN0b3J5VGhyZWFkcygpIHsKLSAgTE9HKExTX0lORk8pIDw8ICJJbnZva2VKYXZhQ2FsbGJh
Y2tzT25GYWN0b3J5VGhyZWFkcy4iOwotICBuZXR3b3JrX3RocmVhZF8tPkludm9rZTx2b2lkPihS
VENfRlJPTV9IRVJFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhpc10geyBK
YXZhQ2FsbGJhY2tPbkZhY3RvcnlUaHJlYWRzKCk7IH0pOwotICB3b3JrZXJfdGhyZWFkXy0+SW52
b2tlPHZvaWQ+KFJUQ19GUk9NX0hFUkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
W3RoaXNdIHsgSmF2YUNhbGxiYWNrT25GYWN0b3J5VGhyZWFkcygpOyB9KTsKLSAgc2lnbmFsaW5n
X3RocmVhZF8tPkludm9rZTx2b2lkPihSVENfRlJPTV9IRVJFLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFt0aGlzXSB7IEphdmFDYWxsYmFja09uRmFjdG9yeVRocmVhZHMoKTsg
fSk7Ci19Ci0KLVBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZTo6T3B0aW9ucyBQYXJzZU9w
dGlvbnNGcm9tSmF2YShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IG9wdGlvbnMpIHsKLSAgamNs
YXNzIG9wdGlvbnNfY2xhc3MgPSBqbmktPkdldE9iamVjdENsYXNzKG9wdGlvbnMpOwotICBqZmll
bGRJRCBuZXR3b3JrX2lnbm9yZV9tYXNrX2ZpZWxkID0KLSAgICAgIGpuaS0+R2V0RmllbGRJRChv
cHRpb25zX2NsYXNzLCAibmV0d29ya0lnbm9yZU1hc2siLCAiSSIpOwotICBpbnQgbmV0d29ya19p
Z25vcmVfbWFzayA9Ci0gICAgICBqbmktPkdldEludEZpZWxkKG9wdGlvbnMsIG5ldHdvcmtfaWdu
b3JlX21hc2tfZmllbGQpOwotCi0gIGpmaWVsZElEIGRpc2FibGVfZW5jcnlwdGlvbl9maWVsZCA9
Ci0gICAgICBqbmktPkdldEZpZWxkSUQob3B0aW9uc19jbGFzcywgImRpc2FibGVFbmNyeXB0aW9u
IiwgIloiKTsKLSAgYm9vbCBkaXNhYmxlX2VuY3J5cHRpb24gPQotICAgICAgam5pLT5HZXRCb29s
ZWFuRmllbGQob3B0aW9ucywgZGlzYWJsZV9lbmNyeXB0aW9uX2ZpZWxkKTsKLQotICBqZmllbGRJ
RCBkaXNhYmxlX25ldHdvcmtfbW9uaXRvcl9maWVsZCA9Ci0gICAgICBqbmktPkdldEZpZWxkSUQo
b3B0aW9uc19jbGFzcywgImRpc2FibGVOZXR3b3JrTW9uaXRvciIsICJaIik7Ci0gIGJvb2wgZGlz
YWJsZV9uZXR3b3JrX21vbml0b3IgPQotICAgICAgam5pLT5HZXRCb29sZWFuRmllbGQob3B0aW9u
cywgZGlzYWJsZV9uZXR3b3JrX21vbml0b3JfZmllbGQpOwotCi0gIFBlZXJDb25uZWN0aW9uRmFj
dG9yeUludGVyZmFjZTo6T3B0aW9ucyBuYXRpdmVfb3B0aW9uczsKLQotICAvLyBUaGlzIGRvZXNu
J3QgbmVjZXNzYXJpbHkgbWF0Y2ggdGhlIGMrKyB2ZXJzaW9uIG9mIHRoaXMgc3RydWN0OyBmZWVs
IGZyZWUKLSAgLy8gdG8gYWRkIG1vcmUgcGFyYW1ldGVycyBhcyBuZWNlc3NhcnkuCi0gIG5hdGl2
ZV9vcHRpb25zLm5ldHdvcmtfaWdub3JlX21hc2sgPSBuZXR3b3JrX2lnbm9yZV9tYXNrOwotICBu
YXRpdmVfb3B0aW9ucy5kaXNhYmxlX2VuY3J5cHRpb24gPSBkaXNhYmxlX2VuY3J5cHRpb247Ci0g
IG5hdGl2ZV9vcHRpb25zLmRpc2FibGVfbmV0d29ya19tb25pdG9yID0gZGlzYWJsZV9uZXR3b3Jr
X21vbml0b3I7Ci0gIHJldHVybiBuYXRpdmVfb3B0aW9uczsKLX0KLQotSk9XKGpsb25nLCBQZWVy
Q29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlQ3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KSgKLSAg
ICBKTklFbnYqIGpuaSwgamNsYXNzLCBqb2JqZWN0IGpvcHRpb25zKSB7Ci0gIC8vIHRhbGsvIGFz
c3VtZXMgcHJldHR5IHdpZGVseSB0aGF0IHRoZSBjdXJyZW50IFRocmVhZCBpcyBUaHJlYWRNYW5h
Z2VyJ2QsIGJ1dAotICAvLyBUaHJlYWRNYW5hZ2VyIG9ubHkgV3JhcEN1cnJlbnRUaHJlYWQoKXMg
dGhlIHRocmVhZCB3aGVyZSBpdCBpcyBmaXJzdAotICAvLyBjcmVhdGVkLiAgU2luY2UgdGhlIHNl
bWFudGljcyBhcm91bmQgd2hlbiBhdXRvLXdyYXBwaW5nIGhhcHBlbnMgaW4KLSAgLy8gd2VicnRj
L2Jhc2UvIGFyZSBjb252b2x1dGVkLCB3ZSBzaW1wbHkgd3JhcCBoZXJlIHRvIGF2b2lkIGhhdmlu
ZyB0byB0aGluawotICAvLyBhYm91dCByYW1pZmljYXRpb25zIG9mIGF1dG8td3JhcHBpbmcgdGhl
cmUuCi0gIHJ0Yzo6VGhyZWFkTWFuYWdlcjo6SW5zdGFuY2UoKS0+V3JhcEN1cnJlbnRUaHJlYWQo
KTsKLSAgd2VicnRjOjpUcmFjZTo6Q3JlYXRlVHJhY2UoKTsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8
VGhyZWFkPiBuZXR3b3JrX3RocmVhZCA9Ci0gICAgICBydGM6OlRocmVhZDo6Q3JlYXRlV2l0aFNv
Y2tldFNlcnZlcigpOwotICBuZXR3b3JrX3RocmVhZC0+U2V0TmFtZSgibmV0d29ya190aHJlYWQi
LCBudWxscHRyKTsKLSAgUlRDX0NIRUNLKG5ldHdvcmtfdGhyZWFkLT5TdGFydCgpKSA8PCAiRmFp
bGVkIHRvIHN0YXJ0IHRocmVhZCI7Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZD4gd29ya2Vy
X3RocmVhZCA9IHJ0Yzo6VGhyZWFkOjpDcmVhdGUoKTsKLSAgd29ya2VyX3RocmVhZC0+U2V0TmFt
ZSgid29ya2VyX3RocmVhZCIsIG51bGxwdHIpOwotICBSVENfQ0hFQ0sod29ya2VyX3RocmVhZC0+
U3RhcnQoKSkgPDwgIkZhaWxlZCB0byBzdGFydCB0aHJlYWQiOwotCi0gIHN0ZDo6dW5pcXVlX3B0
cjxUaHJlYWQ+IHNpZ25hbGluZ190aHJlYWQgPSBydGM6OlRocmVhZDo6Q3JlYXRlKCk7Ci0gIHNp
Z25hbGluZ190aHJlYWQtPlNldE5hbWUoInNpZ25hbGluZ190aHJlYWQiLCBOVUxMKTsKLSAgUlRD
X0NIRUNLKHNpZ25hbGluZ190aHJlYWQtPlN0YXJ0KCkpIDw8ICJGYWlsZWQgdG8gc3RhcnQgdGhy
ZWFkIjsKLQotICBXZWJSdGNWaWRlb0VuY29kZXJGYWN0b3J5KiBlbmNvZGVyX2ZhY3RvcnkgPSBu
dWxscHRyOwotICBXZWJSdGNWaWRlb0RlY29kZXJGYWN0b3J5KiBkZWNvZGVyX2ZhY3RvcnkgPSBu
dWxscHRyOwotICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeSogbmV0d29ya19tb25pdG9yX2Zh
Y3RvcnkgPSBudWxscHRyOwotCi0gIFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZTo6T3B0
aW9ucyBvcHRpb25zOwotICBib29sIGhhc19vcHRpb25zID0gam9wdGlvbnMgIT0gTlVMTDsKLSAg
aWYgKGhhc19vcHRpb25zKSB7Ci0gICAgb3B0aW9ucyA9IFBhcnNlT3B0aW9uc0Zyb21KYXZhKGpu
aSwgam9wdGlvbnMpOwotICB9Ci0KLSAgaWYgKHZpZGVvX2h3X2FjY2VsZXJhdGlvbl9lbmFibGVk
KSB7Ci0gICAgZW5jb2Rlcl9mYWN0b3J5ID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0
b3J5KCk7Ci0gICAgZGVjb2Rlcl9mYWN0b3J5ID0gbmV3IE1lZGlhQ29kZWNWaWRlb0RlY29kZXJG
YWN0b3J5KCk7Ci0gIH0KLSAgLy8gRG8gbm90IGNyZWF0ZSBuZXR3b3JrX21vbml0b3JfZmFjdG9y
eSBvbmx5IGlmIHRoZSBvcHRpb25zIGFyZQotICAvLyBwcm92aWRlZCBhbmQgZGlzYWJsZV9uZXR3
b3JrX21vbml0b3IgdGhlcmVpbiBpcyBzZXQgdG8gdHJ1ZS4KLSAgaWYgKCEoaGFzX29wdGlvbnMg
JiYgb3B0aW9ucy5kaXNhYmxlX25ldHdvcmtfbW9uaXRvcikpIHsKLSAgICBuZXR3b3JrX21vbml0
b3JfZmFjdG9yeSA9IG5ldyBBbmRyb2lkTmV0d29ya01vbml0b3JGYWN0b3J5KCk7Ci0gICAgcnRj
OjpOZXR3b3JrTW9uaXRvckZhY3Rvcnk6OlNldEZhY3RvcnkobmV0d29ya19tb25pdG9yX2ZhY3Rv
cnkpOwotICB9Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPFBlZXJDb25uZWN0aW9uRmFjdG9yeUlu
dGVyZmFjZT4gZmFjdG9yeSgKLSAgICAgIHdlYnJ0Yzo6Q3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0
b3J5KAotICAgICAgICAgIG5ldHdvcmtfdGhyZWFkLmdldCgpLCB3b3JrZXJfdGhyZWFkLmdldCgp
LCBzaWduYWxpbmdfdGhyZWFkLmdldCgpLAotICAgICAgICAgIG51bGxwdHIsIGVuY29kZXJfZmFj
dG9yeSwgZGVjb2Rlcl9mYWN0b3J5KSk7Ci0gIFJUQ19DSEVDSyhmYWN0b3J5KSA8PCAiRmFpbGVk
IHRvIGNyZWF0ZSB0aGUgcGVlciBjb25uZWN0aW9uIGZhY3Rvcnk7ICIKLSAgICAgICAgICAgICAg
ICAgICAgIDw8ICJXZWJSVEMvbGliamluZ2xlIGluaXQgbGlrZWx5IGZhaWxlZCBvbiB0aGlzIGRl
dmljZSI7Ci0gIC8vIFRPRE8oaG9uZ2hhaXopOiBNYXliZSBwdXQgdGhlIG9wdGlvbnMgYXMgdGhl
IGFyZ3VtZW50IG9mCi0gIC8vIENyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeS4KLSAgaWYgKGhh
c19vcHRpb25zKSB7Ci0gICAgZmFjdG9yeS0+U2V0T3B0aW9ucyhvcHRpb25zKTsKLSAgfQotICBP
d25lZEZhY3RvcnlBbmRUaHJlYWRzKiBvd25lZF9mYWN0b3J5ID0gbmV3IE93bmVkRmFjdG9yeUFu
ZFRocmVhZHMoCi0gICAgICBzdGQ6Om1vdmUobmV0d29ya190aHJlYWQpLCBzdGQ6Om1vdmUod29y
a2VyX3RocmVhZCksCi0gICAgICBzdGQ6Om1vdmUoc2lnbmFsaW5nX3RocmVhZCksIGVuY29kZXJf
ZmFjdG9yeSwgZGVjb2Rlcl9mYWN0b3J5LAotICAgICAgbmV0d29ya19tb25pdG9yX2ZhY3Rvcnks
IGZhY3RvcnkucmVsZWFzZSgpKTsKLSAgb3duZWRfZmFjdG9yeS0+SW52b2tlSmF2YUNhbGxiYWNr
c09uRmFjdG9yeVRocmVhZHMoKTsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIob3duZWRfZmFj
dG9yeSk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlRnJlZUZh
Y3RvcnkpKEpOSUVudiosIGpjbGFzcywgamxvbmcgal9wKSB7Ci0gIGRlbGV0ZSByZWludGVycHJl
dF9jYXN0PE93bmVkRmFjdG9yeUFuZFRocmVhZHMqPihqX3ApOwotICBpZiAoZmllbGRfdHJpYWxz
X2luaXRfc3RyaW5nKSB7Ci0gICAgd2VicnRjOjpmaWVsZF90cmlhbDo6SW5pdEZpZWxkVHJpYWxz
RnJvbVN0cmluZyhOVUxMKTsKLSAgICBkZWxldGUgZmllbGRfdHJpYWxzX2luaXRfc3RyaW5nOwot
ICAgIGZpZWxkX3RyaWFsc19pbml0X3N0cmluZyA9IE5VTEw7Ci0gIH0KLSAgd2VicnRjOjpUcmFj
ZTo6UmV0dXJuVHJhY2UoKTsKLX0KLQotc3RhdGljIFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVy
ZmFjZSogZmFjdG9yeUZyb21KYXZhKGpsb25nIGpfcCkgewotICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxPd25lZEZhY3RvcnlBbmRUaHJlYWRzKj4oal9wKS0+ZmFjdG9yeSgpOwotfQotCi1KT1co
dm9pZCwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZVRocmVhZHNDYWxsYmFja3MpKAotICAg
IEpOSUVudiosIGpjbGFzcywgamxvbmcgal9wKSB7Ci0gIE93bmVkRmFjdG9yeUFuZFRocmVhZHMg
KmZhY3RvcnkgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxPd25lZEZhY3RvcnlBbmRUaHJlYWRz
Kj4oal9wKTsKLSAgZmFjdG9yeS0+SW52b2tlSmF2YUNhbGxiYWNrc09uRmFjdG9yeVRocmVhZHMo
KTsKLX0KLQotSk9XKGpsb25nLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlQ3JlYXRlTG9j
YWxNZWRpYVN0cmVhbSkoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2Zh
Y3RvcnksIGpzdHJpbmcgbGFiZWwpIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFBlZXJDb25uZWN0
aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeSgKLSAgICAgIGZhY3RvcnlGcm9tSmF2YShuYXRp
dmVfZmFjdG9yeSkpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFTdHJlYW1JbnRlcmZhY2U+
IHN0cmVhbSgKLSAgICAgIGZhY3RvcnktPkNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0oSmF2YVRvU3Rk
U3RyaW5nKGpuaSwgbGFiZWwpKSk7Ci0gIHJldHVybiAoamxvbmcpc3RyZWFtLnJlbGVhc2UoKTsK
LX0KLQotSk9XKGpsb25nLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlQ3JlYXRlVmlkZW9T
b3VyY2UpCi0oSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2ZhY3RvcnksIGpvYmpl
Y3Qgal9lZ2xfY29udGV4dCwKLSAgICBqYm9vbGVhbiBpc19zY3JlZW5jYXN0KSB7Ci0gIE93bmVk
RmFjdG9yeUFuZFRocmVhZHMqIGZhY3RvcnkgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxPd25l
ZEZhY3RvcnlBbmRUaHJlYWRzKj4obmF0aXZlX2ZhY3RvcnkpOwotCi0gIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OkFuZHJvaWRWaWRlb1RyYWNrU291cmNlPiBzb3VyY2UoCi0gICAgICBuZXcg
cnRjOjpSZWZDb3VudGVkT2JqZWN0PHdlYnJ0Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U+KAot
ICAgICAgICAgIGZhY3RvcnktPnNpZ25hbGluZ190aHJlYWQoKSwgam5pLCBqX2VnbF9jb250ZXh0
LCBpc19zY3JlZW5jYXN0KSk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvVHJh
Y2tTb3VyY2VQcm94eT4gcHJveHlfc291cmNlID0KLSAgICAgIHdlYnJ0Yzo6VmlkZW9UcmFja1Nv
dXJjZVByb3h5OjpDcmVhdGUoZmFjdG9yeS0+c2lnbmFsaW5nX3RocmVhZCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5LT53b3JrZXJfdGhyZWFk
KCksIHNvdXJjZSk7Ci0KLSAgcmV0dXJuIChqbG9uZylwcm94eV9zb3VyY2UucmVsZWFzZSgpOwot
fQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZUluaXRpYWxpemVWaWRl
b0NhcHR1cmVyKQotKEpOSUVudiogam5pLAotIGpjbGFzcywKLSBqbG9uZyBuYXRpdmVfZmFjdG9y
eSwKLSBqb2JqZWN0IGpfdmlkZW9fY2FwdHVyZXIsCi0gamxvbmcgbmF0aXZlX3NvdXJjZSwKLSBq
b2JqZWN0IGpfZnJhbWVfb2JzZXJ2ZXIpIHsKLSAgTE9HKExTX0lORk8pIDw8ICJQZWVyQ29ubmVj
dGlvbkZhY3RvcnlfbmF0aXZlSW5pdGlhbGl6ZVZpZGVvQ2FwdHVyZXIiOwotICBydGM6OnNjb3Bl
ZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5KAotICAgICAg
ZmFjdG9yeUZyb21KYXZhKG5hdGl2ZV9mYWN0b3J5KSk7Ci0gIGF1dG8gcHJveHlfc291cmNlID0K
LSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpWaWRlb1RyYWNrU291cmNlUHJveHkqPihu
YXRpdmVfc291cmNlKTsKLSAgYXV0byBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6
QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UqPigKLSAgICAgIHByb3h5X3NvdXJjZS0+aW50ZXJuYWwo
KSk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxTdXJmYWNlVGV4dHVyZUhlbHBlcj4gc3VyZmFjZV90
ZXh0dXJlX2hlbHBlciA9Ci0gICAgICBzb3VyY2UtPnN1cmZhY2VfdGV4dHVyZV9oZWxwZXIoKTsK
LSAgam5pLT5DYWxsVm9pZE1ldGhvZCgKLSAgICAgIGpfdmlkZW9fY2FwdHVyZXIsCi0gICAgICBH
ZXRNZXRob2RJRChqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIi
KSwgImluaXRpYWxpemUiLAotICAgICAgICAgICAgICAgICAgIihMb3JnL3dlYnJ0Yy9TdXJmYWNl
VGV4dHVyZUhlbHBlcjtMYW5kcm9pZC9jb250ZW50LyIKLSAgICAgICAgICAgICAgICAgICJDb250
ZXh0O0xvcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIkQ2FwdHVyZXJPYnNlcnZlcjspViIpLAotICAg
ICAgc3VyZmFjZV90ZXh0dXJlX2hlbHBlcgotICAgICAgICAgID8gc3VyZmFjZV90ZXh0dXJlX2hl
bHBlci0+R2V0SmF2YVN1cmZhY2VUZXh0dXJlSGVscGVyKCkKLSAgICAgICAgICA6IG51bGxwdHIs
Ci0gICAgICBqX2FwcGxpY2F0aW9uX2NvbnRleHQsIGpfZnJhbWVfb2JzZXJ2ZXIpOwotICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIFZpZGVvQ2FwdHVyZXIuaW5pdGlhbGl6
ZSgpIjsKLX0KLQotSk9XKGpsb25nLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlQ3JlYXRl
VmlkZW9UcmFjaykoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2ZhY3Rv
cnksIGpzdHJpbmcgaWQsCi0gICAgamxvbmcgbmF0aXZlX3NvdXJjZSkgewotICBydGM6OnNjb3Bl
ZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5KAotICAgICAg
ZmFjdG9yeUZyb21KYXZhKG5hdGl2ZV9mYWN0b3J5KSk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxW
aWRlb1RyYWNrSW50ZXJmYWNlPiB0cmFjayhmYWN0b3J5LT5DcmVhdGVWaWRlb1RyYWNrKAotICAg
ICAgSmF2YVRvU3RkU3RyaW5nKGpuaSwgaWQpLAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxWaWRl
b1RyYWNrU291cmNlSW50ZXJmYWNlKj4obmF0aXZlX3NvdXJjZSkpKTsKLSAgcmV0dXJuIChqbG9u
Zyl0cmFjay5yZWxlYXNlKCk7Ci19Ci0KLUpPVyhqbG9uZywgUGVlckNvbm5lY3Rpb25GYWN0b3J5
X25hdGl2ZUNyZWF0ZUF1ZGlvU291cmNlKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9u
ZyBuYXRpdmVfZmFjdG9yeSwgam9iamVjdCBqX2NvbnN0cmFpbnRzKSB7Ci0gIHN0ZDo6dW5pcXVl
X3B0cjxDb25zdHJhaW50c1dyYXBwZXI+IGNvbnN0cmFpbnRzKAotICAgICAgbmV3IENvbnN0cmFp
bnRzV3JhcHBlcihqbmksIGpfY29uc3RyYWludHMpKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFBl
ZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeSgKLSAgICAgIGZhY3RvcnlGcm9t
SmF2YShuYXRpdmVfZmFjdG9yeSkpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9Tb3VyY2VJ
bnRlcmZhY2U+IHNvdXJjZSgKLSAgICAgIGZhY3RvcnktPkNyZWF0ZUF1ZGlvU291cmNlKGNvbnN0
cmFpbnRzLmdldCgpKSk7Ci0gIHJldHVybiAoamxvbmcpc291cmNlLnJlbGVhc2UoKTsKLX0KLQot
Sk9XKGpsb25nLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlQ3JlYXRlQXVkaW9UcmFjayko
Ci0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2ZhY3RvcnksIGpzdHJpbmcg
aWQsCi0gICAgamxvbmcgbmF0aXZlX3NvdXJjZSkgewotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVl
ckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5KAotICAgICAgZmFjdG9yeUZyb21K
YXZhKG5hdGl2ZV9mYWN0b3J5KSk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb1RyYWNrSW50
ZXJmYWNlPiB0cmFjayhmYWN0b3J5LT5DcmVhdGVBdWRpb1RyYWNrKAotICAgICAgSmF2YVRvU3Rk
U3RyaW5nKGpuaSwgaWQpLAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxBdWRpb1NvdXJjZUludGVy
ZmFjZSo+KG5hdGl2ZV9zb3VyY2UpKSk7Ci0gIHJldHVybiAoamxvbmcpdHJhY2sucmVsZWFzZSgp
OwotfQotCi1KT1coamJvb2xlYW4sIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVTdGFydEFl
Y0R1bXApKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2ZV9mYWN0b3J5LCBq
aW50IGZpbGUsCi0gICAgamludCBmaWxlc2l6ZV9saW1pdF9ieXRlcykgewotICBydGM6OnNjb3Bl
ZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5KAotICAgICAg
ZmFjdG9yeUZyb21KYXZhKG5hdGl2ZV9mYWN0b3J5KSk7Ci0gIHJldHVybiBmYWN0b3J5LT5TdGFy
dEFlY0R1bXAoZmlsZSwgZmlsZXNpemVfbGltaXRfYnl0ZXMpOwotfQotCi1KT1codm9pZCwgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZVN0b3BBZWNEdW1wKSgKLSAgICBKTklFbnYqIGpuaSwg
amNsYXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9yeSkgewotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVl
ckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBmYWN0b3J5KAotICAgICAgZmFjdG9yeUZyb21K
YXZhKG5hdGl2ZV9mYWN0b3J5KSk7Ci0gIGZhY3RvcnktPlN0b3BBZWNEdW1wKCk7Ci19Ci0KLUpP
Vyh2b2lkLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlU2V0T3B0aW9ucykoCi0gICAgSk5J
RW52KiBqbmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2ZhY3RvcnksIGpvYmplY3Qgb3B0aW9ucykg
ewotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlPiBm
YWN0b3J5KAotICAgICAgZmFjdG9yeUZyb21KYXZhKG5hdGl2ZV9mYWN0b3J5KSk7Ci0gIFBlZXJD
b25uZWN0aW9uRmFjdG9yeUludGVyZmFjZTo6T3B0aW9ucyBvcHRpb25zX3RvX3NldCA9Ci0gICAg
ICBQYXJzZU9wdGlvbnNGcm9tSmF2YShqbmksIG9wdGlvbnMpOwotICBmYWN0b3J5LT5TZXRPcHRp
b25zKG9wdGlvbnNfdG9fc2V0KTsKLQotICBpZiAob3B0aW9uc190b19zZXQuZGlzYWJsZV9uZXR3
b3JrX21vbml0b3IpIHsKLSAgICBPd25lZEZhY3RvcnlBbmRUaHJlYWRzKiBvd25lciA9Ci0gICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8T3duZWRGYWN0b3J5QW5kVGhyZWFkcyo+KG5hdGl2ZV9mYWN0
b3J5KTsKLSAgICBpZiAob3duZXItPm5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5KCkpIHsKLSAgICAg
IHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5OjpSZWxlYXNlRmFjdG9yeSgKLSAgICAgICAgICBv
d25lci0+bmV0d29ya19tb25pdG9yX2ZhY3RvcnkoKSk7Ci0gICAgICBvd25lci0+Y2xlYXJfbmV0
d29ya19tb25pdG9yX2ZhY3RvcnkoKTsKLSAgICB9Ci0gIH0KLX0KLQotSk9XKHZvaWQsIFBlZXJD
b25uZWN0aW9uRmFjdG9yeV9uYXRpdmVTZXRWaWRlb0h3QWNjZWxlcmF0aW9uT3B0aW9ucykoCi0g
ICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2ZhY3RvcnksIGpvYmplY3QgbG9j
YWxfZWdsX2NvbnRleHQsCi0gICAgam9iamVjdCByZW1vdGVfZWdsX2NvbnRleHQpIHsKLSAgT3du
ZWRGYWN0b3J5QW5kVGhyZWFkcyogb3duZWRfZmFjdG9yeSA9Ci0gICAgICByZWludGVycHJldF9j
YXN0PE93bmVkRmFjdG9yeUFuZFRocmVhZHMqPihuYXRpdmVfZmFjdG9yeSk7Ci0KLSAgamNsYXNz
IGpfZWdsYmFzZTE0X2NvbnRleHRfY2xhc3MgPQotICAgICAgRmluZENsYXNzKGpuaSwgIm9yZy93
ZWJydGMvRWdsQmFzZTE0JENvbnRleHQiKTsKLQotICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFj
dG9yeSogZW5jb2Rlcl9mYWN0b3J5ID0KLSAgICAgIHN0YXRpY19jYXN0PE1lZGlhQ29kZWNWaWRl
b0VuY29kZXJGYWN0b3J5Kj4KLSAgICAgICAgICAob3duZWRfZmFjdG9yeS0+ZW5jb2Rlcl9mYWN0
b3J5KCkpOwotICBpZiAoZW5jb2Rlcl9mYWN0b3J5ICYmCi0gICAgICBqbmktPklzSW5zdGFuY2VP
Zihsb2NhbF9lZ2xfY29udGV4dCwgal9lZ2xiYXNlMTRfY29udGV4dF9jbGFzcykpIHsKLSAgICBM
T0coTFNfSU5GTykgPDwgIlNldCBFR0wgY29udGV4dCBmb3IgSFcgZW5jb2RpbmcuIjsKLSAgICBl
bmNvZGVyX2ZhY3RvcnktPlNldEVHTENvbnRleHQoam5pLCBsb2NhbF9lZ2xfY29udGV4dCk7Ci0g
IH0KLQotICBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeSogZGVjb2Rlcl9mYWN0b3J5ID0K
LSAgICAgIHN0YXRpY19jYXN0PE1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5Kj4KLSAgICAg
ICAgICAob3duZWRfZmFjdG9yeS0+ZGVjb2Rlcl9mYWN0b3J5KCkpOwotICBpZiAoZGVjb2Rlcl9m
YWN0b3J5KSB7Ci0gICAgTE9HKExTX0lORk8pIDw8ICJTZXQgRUdMIGNvbnRleHQgZm9yIEhXIGRl
Y29kaW5nLiI7Ci0gICAgZGVjb2Rlcl9mYWN0b3J5LT5TZXRFR0xDb250ZXh0KGpuaSwgcmVtb3Rl
X2VnbF9jb250ZXh0KTsKLSAgfQotfQotCi1zdGF0aWMgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6
OkljZVRyYW5zcG9ydHNUeXBlCi1KYXZhSWNlVHJhbnNwb3J0c1R5cGVUb05hdGl2ZVR5cGUoSk5J
RW52KiBqbmksIGpvYmplY3Qgal9pY2VfdHJhbnNwb3J0c190eXBlKSB7Ci0gIHN0ZDo6c3RyaW5n
IGVudW1fbmFtZSA9IEdldEphdmFFbnVtTmFtZSgKLSAgICAgIGpuaSwgIm9yZy93ZWJydGMvUGVl
ckNvbm5lY3Rpb24kSWNlVHJhbnNwb3J0c1R5cGUiLAotICAgICAgal9pY2VfdHJhbnNwb3J0c190
eXBlKTsKLQotICBpZiAoZW51bV9uYW1lID09ICJBTEwiKQotICAgIHJldHVybiBQZWVyQ29ubmVj
dGlvbkludGVyZmFjZTo6a0FsbDsKLQotICBpZiAoZW51bV9uYW1lID09ICJSRUxBWSIpCi0gICAg
cmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprUmVsYXk7Ci0KLSAgaWYgKGVudW1fbmFt
ZSA9PSAiTk9IT1NUIikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtOb0hv
c3Q7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTk9ORSIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjprTm9uZTsKLQotICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVk
IEljZVRyYW5zcG9ydHNUeXBlIGVudW1fbmFtZSAiIDw8IGVudW1fbmFtZTsKLSAgcmV0dXJuIFBl
ZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprQWxsOwotfQotCi1zdGF0aWMgUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2U6OkJ1bmRsZVBvbGljeQotSmF2YUJ1bmRsZVBvbGljeVRvTmF0aXZlVHlwZShKTklF
bnYqIGpuaSwgam9iamVjdCBqX2J1bmRsZV9wb2xpY3kpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9u
YW1lID0gR2V0SmF2YUVudW1OYW1lKAotICAgICAgam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVj
dGlvbiRCdW5kbGVQb2xpY3kiLAotICAgICAgal9idW5kbGVfcG9saWN5KTsKLQotICBpZiAoZW51
bV9uYW1lID09ICJCQUxBTkNFRCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNl
OjprQnVuZGxlUG9saWN5QmFsYW5jZWQ7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTUFYQlVORExF
IikKLSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtCdW5kbGVQb2xpY3lNYXhC
dW5kbGU7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTUFYQ09NUEFUIikKLSAgICByZXR1cm4gUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtCdW5kbGVQb2xpY3lNYXhDb21wYXQ7Ci0KLSAgUlRDX0NI
RUNLKGZhbHNlKSA8PCAiVW5leHBlY3RlZCBCdW5kbGVQb2xpY3kgZW51bV9uYW1lICIgPDwgZW51
bV9uYW1lOwotICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtCdW5kbGVQb2xpY3lC
YWxhbmNlZDsKLX0KLQotc3RhdGljIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSdGNwTXV4UG9s
aWN5Ci1KYXZhUnRjcE11eFBvbGljeVRvTmF0aXZlVHlwZShKTklFbnYqIGpuaSwgam9iamVjdCBq
X3J0Y3BfbXV4X3BvbGljeSkgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPSBHZXRKYXZhRW51
bU5hbWUoCi0gICAgICBqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJFJ0Y3BNdXhQb2xp
Y3kiLAotICAgICAgal9ydGNwX211eF9wb2xpY3kpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIk5F
R09USUFURSIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprUnRjcE11eFBv
bGljeU5lZ290aWF0ZTsKLQotICBpZiAoZW51bV9uYW1lID09ICJSRVFVSVJFIikKLSAgICByZXR1
cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtSdGNwTXV4UG9saWN5UmVxdWlyZTsKLQotICBS
VENfQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIFJ0Y3BNdXhQb2xpY3kgZW51bV9uYW1lICIg
PDwgZW51bV9uYW1lOwotICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtSdGNwTXV4
UG9saWN5TmVnb3RpYXRlOwotfQotCi1zdGF0aWMgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlRj
cENhbmRpZGF0ZVBvbGljeQotSmF2YVRjcENhbmRpZGF0ZVBvbGljeVRvTmF0aXZlVHlwZSgKLSAg
ICBKTklFbnYqIGpuaSwgam9iamVjdCBqX3RjcF9jYW5kaWRhdGVfcG9saWN5KSB7Ci0gIHN0ZDo6
c3RyaW5nIGVudW1fbmFtZSA9IEdldEphdmFFbnVtTmFtZSgKLSAgICAgIGpuaSwgIm9yZy93ZWJy
dGMvUGVlckNvbm5lY3Rpb24kVGNwQ2FuZGlkYXRlUG9saWN5IiwKLSAgICAgIGpfdGNwX2NhbmRp
ZGF0ZV9wb2xpY3kpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkVOQUJMRUQiKQotICAgIHJldHVy
biBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a1RjcENhbmRpZGF0ZVBvbGljeUVuYWJsZWQ7Ci0K
LSAgaWYgKGVudW1fbmFtZSA9PSAiRElTQUJMRUQiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlv
bkludGVyZmFjZTo6a1RjcENhbmRpZGF0ZVBvbGljeURpc2FibGVkOwotCi0gIFJUQ19DSEVDSyhm
YWxzZSkgPDwgIlVuZXhwZWN0ZWQgVGNwQ2FuZGlkYXRlUG9saWN5IGVudW1fbmFtZSAiIDw8IGVu
dW1fbmFtZTsKLSAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprVGNwQ2FuZGlkYXRl
UG9saWN5RW5hYmxlZDsKLX0KLQotc3RhdGljIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpDYW5k
aWRhdGVOZXR3b3JrUG9saWN5Ci1KYXZhQ2FuZGlkYXRlTmV0d29ya1BvbGljeVRvTmF0aXZlVHlw
ZShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpv
YmplY3Qgal9jYW5kaWRhdGVfbmV0d29ya19wb2xpY3kpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9u
YW1lID0KLSAgICAgIEdldEphdmFFbnVtTmFtZShqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0
aW9uJENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kiLAotICAgICAgICAgICAgICAgICAgICAgIGpfY2Fu
ZGlkYXRlX25ldHdvcmtfcG9saWN5KTsKLQotICBpZiAoZW51bV9uYW1lID09ICJBTEwiKQotICAg
IHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a0NhbmRpZGF0ZU5ldHdvcmtQb2xpY3lB
bGw7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiTE9XX0NPU1QiKQotICAgIHJldHVybiBQZWVyQ29u
bmVjdGlvbkludGVyZmFjZTo6a0NhbmRpZGF0ZU5ldHdvcmtQb2xpY3lMb3dDb3N0OwotCi0gIFJU
Q19DSEVDSyhmYWxzZSkgPDwgIlVuZXhwZWN0ZWQgQ2FuZGlkYXRlTmV0d29ya1BvbGljeSBlbnVt
X25hbWUgIgotICAgICAgICAgICAgICAgICAgIDw8IGVudW1fbmFtZTsKLSAgcmV0dXJuIFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlOjprQ2FuZGlkYXRlTmV0d29ya1BvbGljeUFsbDsKLX0KLQotc3Rh
dGljIHJ0Yzo6S2V5VHlwZSBKYXZhS2V5VHlwZVRvTmF0aXZlVHlwZShKTklFbnYqIGpuaSwgam9i
amVjdCBqX2tleV90eXBlKSB7Ci0gIHN0ZDo6c3RyaW5nIGVudW1fbmFtZSA9IEdldEphdmFFbnVt
TmFtZSgKLSAgICAgIGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kS2V5VHlwZSIsIGpf
a2V5X3R5cGUpOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIlJTQSIpCi0gICAgcmV0dXJuIHJ0Yzo6
S1RfUlNBOwotICBpZiAoZW51bV9uYW1lID09ICJFQ0RTQSIpCi0gICAgcmV0dXJuIHJ0Yzo6S1Rf
RUNEU0E7Ci0KLSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5leHBlY3RlZCBLZXlUeXBlIGVudW1f
bmFtZSAiIDw8IGVudW1fbmFtZTsKLSAgcmV0dXJuIHJ0Yzo6S1RfRUNEU0E7Ci19Ci0KLXN0YXRp
YyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6Q29udGludWFsR2F0aGVyaW5nUG9saWN5Ci0gICAg
SmF2YUNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeVRvTmF0aXZlVHlwZSgKLSAgICAgICAgSk5JRW52
KiBqbmksIGpvYmplY3Qgal9nYXRoZXJpbmdfcG9saWN5KSB7Ci0gIHN0ZDo6c3RyaW5nIGVudW1f
bmFtZSA9IEdldEphdmFFbnVtTmFtZSgKLSAgICAgIGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5l
Y3Rpb24kQ29udGludWFsR2F0aGVyaW5nUG9saWN5IiwKLSAgICAgIGpfZ2F0aGVyaW5nX3BvbGlj
eSk7Ci0gIGlmIChlbnVtX25hbWUgPT0gIkdBVEhFUl9PTkNFIikKLSAgICByZXR1cm4gUGVlckNv
bm5lY3Rpb25JbnRlcmZhY2U6OkdBVEhFUl9PTkNFOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkdB
VEhFUl9DT05USU5VQUxMWSIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpH
QVRIRVJfQ09OVElOVUFMTFk7Ci0KLSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5leHBlY3RlZCBD
b250aW51YWxHYXRoZXJpbmdQb2xpY3kgZW51bSBuYW1lICIKLSAgICAgICAgICAgICAgICAgICA8
PCBlbnVtX25hbWU7Ci0gIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6R0FUSEVSX09O
Q0U7Ci19Ci0KLXN0YXRpYyB2b2lkIEphdmFJY2VTZXJ2ZXJzVG9Kc2VwSWNlU2VydmVycygKLSAg
ICBKTklFbnYqIGpuaSwgam9iamVjdCBqX2ljZV9zZXJ2ZXJzLAotICAgIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlOjpJY2VTZXJ2ZXJzKiBpY2Vfc2VydmVycykgewotICBmb3IgKGpvYmplY3Qgal9p
Y2Vfc2VydmVyIDogSXRlcmFibGUoam5pLCBqX2ljZV9zZXJ2ZXJzKSkgewotICAgIGpjbGFzcyBq
X2ljZV9zZXJ2ZXJfY2xhc3MgPSBHZXRPYmplY3RDbGFzcyhqbmksIGpfaWNlX3NlcnZlcik7Ci0g
ICAgamZpZWxkSUQgal9pY2Vfc2VydmVyX3VyaV9pZCA9Ci0gICAgICAgIEdldEZpZWxkSUQoam5p
LCBqX2ljZV9zZXJ2ZXJfY2xhc3MsICJ1cmkiLCAiTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gICAg
amZpZWxkSUQgal9pY2Vfc2VydmVyX3VzZXJuYW1lX2lkID0KLSAgICAgICAgR2V0RmllbGRJRChq
bmksIGpfaWNlX3NlcnZlcl9jbGFzcywgInVzZXJuYW1lIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIp
OwotICAgIGpmaWVsZElEIGpfaWNlX3NlcnZlcl9wYXNzd29yZF9pZCA9Ci0gICAgICAgIEdldEZp
ZWxkSUQoam5pLCBqX2ljZV9zZXJ2ZXJfY2xhc3MsICJwYXNzd29yZCIsICJMamF2YS9sYW5nL1N0
cmluZzsiKTsKLSAgICBqc3RyaW5nIHVyaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8anN0cmluZz4oCi0g
ICAgICAgIEdldE9iamVjdEZpZWxkKGpuaSwgal9pY2Vfc2VydmVyLCBqX2ljZV9zZXJ2ZXJfdXJp
X2lkKSk7Ci0gICAganN0cmluZyB1c2VybmFtZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8anN0cmluZz4o
Ci0gICAgICAgIEdldE9iamVjdEZpZWxkKGpuaSwgal9pY2Vfc2VydmVyLCBqX2ljZV9zZXJ2ZXJf
dXNlcm5hbWVfaWQpKTsKLSAgICBqc3RyaW5nIHBhc3N3b3JkID0gcmVpbnRlcnByZXRfY2FzdDxq
c3RyaW5nPigKLSAgICAgICAgR2V0T2JqZWN0RmllbGQoam5pLCBqX2ljZV9zZXJ2ZXIsIGpfaWNl
X3NlcnZlcl9wYXNzd29yZF9pZCkpOwotICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VT
ZXJ2ZXIgc2VydmVyOwotICAgIHNlcnZlci51cmkgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCB1cmkp
OwotICAgIHNlcnZlci51c2VybmFtZSA9IEphdmFUb1N0ZFN0cmluZyhqbmksIHVzZXJuYW1lKTsK
LSAgICBzZXJ2ZXIucGFzc3dvcmQgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBwYXNzd29yZCk7Ci0g
ICAgaWNlX3NlcnZlcnMtPnB1c2hfYmFjayhzZXJ2ZXIpOwotICB9Ci19Ci0KLXN0YXRpYyB2b2lk
IEphdmFSVENDb25maWd1cmF0aW9uVG9Kc2VwUlRDQ29uZmlndXJhdGlvbigKLSAgICBKTklFbnYq
IGpuaSwKLSAgICBqb2JqZWN0IGpfcnRjX2NvbmZpZywKLSAgICBQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZTo6UlRDQ29uZmlndXJhdGlvbiogcnRjX2NvbmZpZykgewotICBqY2xhc3Mgal9ydGNfY29u
ZmlnX2NsYXNzID0gR2V0T2JqZWN0Q2xhc3Moam5pLCBqX3J0Y19jb25maWcpOwotCi0gIGpmaWVs
ZElEIGpfaWNlX3RyYW5zcG9ydHNfdHlwZV9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpf
cnRjX2NvbmZpZ19jbGFzcywgImljZVRyYW5zcG9ydHNUeXBlIiwKLSAgICAgICJMb3JnL3dlYnJ0
Yy9QZWVyQ29ubmVjdGlvbiRJY2VUcmFuc3BvcnRzVHlwZTsiKTsKLSAgam9iamVjdCBqX2ljZV90
cmFuc3BvcnRzX3R5cGUgPSBHZXRPYmplY3RGaWVsZCgKLSAgICAgIGpuaSwgal9ydGNfY29uZmln
LCBqX2ljZV90cmFuc3BvcnRzX3R5cGVfaWQpOwotCi0gIGpmaWVsZElEIGpfYnVuZGxlX3BvbGlj
eV9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZpZ19jbGFzcywgImJ1bmRs
ZVBvbGljeSIsCi0gICAgICAiTG9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kQnVuZGxlUG9saWN5
OyIpOwotICBqb2JqZWN0IGpfYnVuZGxlX3BvbGljeSA9IEdldE9iamVjdEZpZWxkKAotICAgICAg
am5pLCBqX3J0Y19jb25maWcsIGpfYnVuZGxlX3BvbGljeV9pZCk7Ci0KLSAgamZpZWxkSUQgal9y
dGNwX211eF9wb2xpY3lfaWQgPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX3J0Y19jb25maWdf
Y2xhc3MsICJydGNwTXV4UG9saWN5IiwKLSAgICAgICJMb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlv
biRSdGNwTXV4UG9saWN5OyIpOwotICBqb2JqZWN0IGpfcnRjcF9tdXhfcG9saWN5ID0gR2V0T2Jq
ZWN0RmllbGQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZpZywgal9ydGNwX211eF9wb2xpY3lfaWQp
OwotCi0gIGpmaWVsZElEIGpfdGNwX2NhbmRpZGF0ZV9wb2xpY3lfaWQgPSBHZXRGaWVsZElEKAot
ICAgICAgam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJ0Y3BDYW5kaWRhdGVQb2xpY3kiLAotICAg
ICAgIkxvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJFRjcENhbmRpZGF0ZVBvbGljeTsiKTsKLSAg
am9iamVjdCBqX3RjcF9jYW5kaWRhdGVfcG9saWN5ID0gR2V0T2JqZWN0RmllbGQoCi0gICAgICBq
bmksIGpfcnRjX2NvbmZpZywgal90Y3BfY2FuZGlkYXRlX3BvbGljeV9pZCk7Ci0KLSAgamZpZWxk
SUQgal9jYW5kaWRhdGVfbmV0d29ya19wb2xpY3lfaWQgPSBHZXRGaWVsZElEKAotICAgICAgam5p
LCBqX3J0Y19jb25maWdfY2xhc3MsICJjYW5kaWRhdGVOZXR3b3JrUG9saWN5IiwKLSAgICAgICJM
b3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRDYW5kaWRhdGVOZXR3b3JrUG9saWN5OyIpOwotICBq
b2JqZWN0IGpfY2FuZGlkYXRlX25ldHdvcmtfcG9saWN5ID0gR2V0T2JqZWN0RmllbGQoCi0gICAg
ICBqbmksIGpfcnRjX2NvbmZpZywgal9jYW5kaWRhdGVfbmV0d29ya19wb2xpY3lfaWQpOwotCi0g
IGpmaWVsZElEIGpfaWNlX3NlcnZlcnNfaWQgPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX3J0
Y19jb25maWdfY2xhc3MsICJpY2VTZXJ2ZXJzIiwgIkxqYXZhL3V0aWwvTGlzdDsiKTsKLSAgam9i
amVjdCBqX2ljZV9zZXJ2ZXJzID0gR2V0T2JqZWN0RmllbGQoam5pLCBqX3J0Y19jb25maWcsIGpf
aWNlX3NlcnZlcnNfaWQpOwotCi0gIGpmaWVsZElEIGpfYXVkaW9faml0dGVyX2J1ZmZlcl9tYXhf
cGFja2V0c19pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAi
YXVkaW9KaXR0ZXJCdWZmZXJNYXhQYWNrZXRzIiwgIkkiKTsKLSAgamZpZWxkSUQgal9hdWRpb19q
aXR0ZXJfYnVmZmVyX2Zhc3RfYWNjZWxlcmF0ZV9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmks
IGpfcnRjX2NvbmZpZ19jbGFzcywgImF1ZGlvSml0dGVyQnVmZmVyRmFzdEFjY2VsZXJhdGUiLCAi
WiIpOwotCi0gIGpmaWVsZElEIGpfaWNlX2Nvbm5lY3Rpb25fcmVjZWl2aW5nX3RpbWVvdXRfaWQg
PQotICAgICAgR2V0RmllbGRJRChqbmksIGpfcnRjX2NvbmZpZ19jbGFzcywgImljZUNvbm5lY3Rp
b25SZWNlaXZpbmdUaW1lb3V0IiwgIkkiKTsKLQotICBqZmllbGRJRCBqX2ljZV9iYWNrdXBfY2Fu
ZGlkYXRlX3BhaXJfcGluZ19pbnRlcnZhbF9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpf
cnRjX2NvbmZpZ19jbGFzcywgImljZUJhY2t1cENhbmRpZGF0ZVBhaXJQaW5nSW50ZXJ2YWwiLCAi
SSIpOwotCi0gIGpmaWVsZElEIGpfY29udGludWFsX2dhdGhlcmluZ19wb2xpY3lfaWQgPQotICAg
ICAgR2V0RmllbGRJRChqbmksIGpfcnRjX2NvbmZpZ19jbGFzcywgImNvbnRpbnVhbEdhdGhlcmlu
Z1BvbGljeSIsCi0gICAgICAgICAgICAgICAgICJMb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRD
b250aW51YWxHYXRoZXJpbmdQb2xpY3k7Iik7Ci0gIGpvYmplY3Qgal9jb250aW51YWxfZ2F0aGVy
aW5nX3BvbGljeSA9Ci0gICAgICBHZXRPYmplY3RGaWVsZChqbmksIGpfcnRjX2NvbmZpZywgal9j
b250aW51YWxfZ2F0aGVyaW5nX3BvbGljeV9pZCk7Ci0KLSAgamZpZWxkSUQgal9pY2VfY2FuZGlk
YXRlX3Bvb2xfc2l6ZV9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgal9ydGNfY29uZmlnX2Ns
YXNzLCAiaWNlQ2FuZGlkYXRlUG9vbFNpemUiLCAiSSIpOwotICBqZmllbGRJRCBqX3ByZXN1bWVf
d3JpdGFibGVfd2hlbl9mdWxseV9yZWxheWVkX2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwg
al9ydGNfY29uZmlnX2NsYXNzLCAicHJlc3VtZVdyaXRhYmxlV2hlbkZ1bGx5UmVsYXllZCIsICJa
Iik7Ci0KLSAgamZpZWxkSUQgal9wcnVuZV90dXJuX3BvcnRzX2lkID0KLSAgICAgIEdldEZpZWxk
SUQoam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJwcnVuZVR1cm5Qb3J0cyIsICJaIik7Ci0KLSAg
cnRjX2NvbmZpZy0+dHlwZSA9Ci0gICAgICBKYXZhSWNlVHJhbnNwb3J0c1R5cGVUb05hdGl2ZVR5
cGUoam5pLCBqX2ljZV90cmFuc3BvcnRzX3R5cGUpOwotICBydGNfY29uZmlnLT5idW5kbGVfcG9s
aWN5ID0KLSAgICAgIEphdmFCdW5kbGVQb2xpY3lUb05hdGl2ZVR5cGUoam5pLCBqX2J1bmRsZV9w
b2xpY3kpOwotICBydGNfY29uZmlnLT5ydGNwX211eF9wb2xpY3kgPQotICAgICAgSmF2YVJ0Y3BN
dXhQb2xpY3lUb05hdGl2ZVR5cGUoam5pLCBqX3J0Y3BfbXV4X3BvbGljeSk7Ci0gIHJ0Y19jb25m
aWctPnRjcF9jYW5kaWRhdGVfcG9saWN5ID0KLSAgICAgIEphdmFUY3BDYW5kaWRhdGVQb2xpY3lU
b05hdGl2ZVR5cGUoam5pLCBqX3RjcF9jYW5kaWRhdGVfcG9saWN5KTsKLSAgcnRjX2NvbmZpZy0+
Y2FuZGlkYXRlX25ldHdvcmtfcG9saWN5ID0KLSAgICAgIEphdmFDYW5kaWRhdGVOZXR3b3JrUG9s
aWN5VG9OYXRpdmVUeXBlKGpuaSwgal9jYW5kaWRhdGVfbmV0d29ya19wb2xpY3kpOwotICBKYXZh
SWNlU2VydmVyc1RvSnNlcEljZVNlcnZlcnMoam5pLCBqX2ljZV9zZXJ2ZXJzLCAmcnRjX2NvbmZp
Zy0+c2VydmVycyk7Ci0gIHJ0Y19jb25maWctPmF1ZGlvX2ppdHRlcl9idWZmZXJfbWF4X3BhY2tl
dHMgPQotICAgICAgR2V0SW50RmllbGQoam5pLCBqX3J0Y19jb25maWcsIGpfYXVkaW9faml0dGVy
X2J1ZmZlcl9tYXhfcGFja2V0c19pZCk7Ci0gIHJ0Y19jb25maWctPmF1ZGlvX2ppdHRlcl9idWZm
ZXJfZmFzdF9hY2NlbGVyYXRlID0gR2V0Qm9vbGVhbkZpZWxkKAotICAgICAgam5pLCBqX3J0Y19j
b25maWcsIGpfYXVkaW9faml0dGVyX2J1ZmZlcl9mYXN0X2FjY2VsZXJhdGVfaWQpOwotICBydGNf
Y29uZmlnLT5pY2VfY29ubmVjdGlvbl9yZWNlaXZpbmdfdGltZW91dCA9Ci0gICAgICBHZXRJbnRG
aWVsZChqbmksIGpfcnRjX2NvbmZpZywgal9pY2VfY29ubmVjdGlvbl9yZWNlaXZpbmdfdGltZW91
dF9pZCk7Ci0gIHJ0Y19jb25maWctPmljZV9iYWNrdXBfY2FuZGlkYXRlX3BhaXJfcGluZ19pbnRl
cnZhbCA9IEdldEludEZpZWxkKAotICAgICAgam5pLCBqX3J0Y19jb25maWcsIGpfaWNlX2JhY2t1
cF9jYW5kaWRhdGVfcGFpcl9waW5nX2ludGVydmFsX2lkKTsKLSAgcnRjX2NvbmZpZy0+Y29udGlu
dWFsX2dhdGhlcmluZ19wb2xpY3kgPQotICAgICAgSmF2YUNvbnRpbnVhbEdhdGhlcmluZ1BvbGlj
eVRvTmF0aXZlVHlwZSgKLSAgICAgICAgICBqbmksIGpfY29udGludWFsX2dhdGhlcmluZ19wb2xp
Y3kpOwotICBydGNfY29uZmlnLT5pY2VfY2FuZGlkYXRlX3Bvb2xfc2l6ZSA9Ci0gICAgICBHZXRJ
bnRGaWVsZChqbmksIGpfcnRjX2NvbmZpZywgal9pY2VfY2FuZGlkYXRlX3Bvb2xfc2l6ZV9pZCk7
Ci0gIHJ0Y19jb25maWctPnBydW5lX3R1cm5fcG9ydHMgPQotICAgICAgR2V0Qm9vbGVhbkZpZWxk
KGpuaSwgal9ydGNfY29uZmlnLCBqX3BydW5lX3R1cm5fcG9ydHNfaWQpOwotICBydGNfY29uZmln
LT5wcmVzdW1lX3dyaXRhYmxlX3doZW5fZnVsbHlfcmVsYXllZCA9IEdldEJvb2xlYW5GaWVsZCgK
LSAgICAgIGpuaSwgal9ydGNfY29uZmlnLCBqX3ByZXN1bWVfd3JpdGFibGVfd2hlbl9mdWxseV9y
ZWxheWVkX2lkKTsKLX0KLQotSk9XKGpsb25nLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZl
Q3JlYXRlUGVlckNvbm5lY3Rpb24pKAotICAgIEpOSUVudiAqam5pLCBqY2xhc3MsIGpsb25nIGZh
Y3RvcnksIGpvYmplY3Qgal9ydGNfY29uZmlnLAotICAgIGpvYmplY3Qgal9jb25zdHJhaW50cywg
amxvbmcgb2JzZXJ2ZXJfcCkgewotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25G
YWN0b3J5SW50ZXJmYWNlPiBmKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxQZWVyQ29ubmVjdGlv
bkZhY3RvcnlJbnRlcmZhY2UqPigKLSAgICAgICAgICBmYWN0b3J5RnJvbUphdmEoZmFjdG9yeSkp
KTsKLQotICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UlRDQ29uZmlndXJhdGlvbiBydGNfY29u
ZmlnKAotICAgICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlJUQ0NvbmZpZ3VyYXRpb25UeXBl
OjprQWdncmVzc2l2ZSk7Ci0gIEphdmFSVENDb25maWd1cmF0aW9uVG9Kc2VwUlRDQ29uZmlndXJh
dGlvbihqbmksIGpfcnRjX2NvbmZpZywgJnJ0Y19jb25maWcpOwotCi0gIGpjbGFzcyBqX3J0Y19j
b25maWdfY2xhc3MgPSBHZXRPYmplY3RDbGFzcyhqbmksIGpfcnRjX2NvbmZpZyk7Ci0gIGpmaWVs
ZElEIGpfa2V5X3R5cGVfaWQgPSBHZXRGaWVsZElEKGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAi
a2V5VHlwZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMb3JnL3dl
YnJ0Yy9QZWVyQ29ubmVjdGlvbiRLZXlUeXBlOyIpOwotICBqb2JqZWN0IGpfa2V5X3R5cGUgPSBH
ZXRPYmplY3RGaWVsZChqbmksIGpfcnRjX2NvbmZpZywgal9rZXlfdHlwZV9pZCk7Ci0KLSAgLy8g
R2VuZXJhdGUgbm9uLWRlZmF1bHQgY2VydGlmaWNhdGUuCi0gIHJ0Yzo6S2V5VHlwZSBrZXlfdHlw
ZSA9IEphdmFLZXlUeXBlVG9OYXRpdmVUeXBlKGpuaSwgal9rZXlfdHlwZSk7Ci0gIGlmIChrZXlf
dHlwZSAhPSBydGM6OktUX0RFRkFVTFQpIHsKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8cnRjOjpS
VENDZXJ0aWZpY2F0ZT4gY2VydGlmaWNhdGUgPQotICAgICAgICBydGM6OlJUQ0NlcnRpZmljYXRl
R2VuZXJhdG9yOjpHZW5lcmF0ZUNlcnRpZmljYXRlKAotICAgICAgICAgICAgcnRjOjpLZXlQYXJh
bXMoa2V5X3R5cGUpLCBydGM6Ok9wdGlvbmFsPHVpbnQ2NF90PigpKTsKLSAgICBpZiAoIWNlcnRp
ZmljYXRlKSB7Ci0gICAgICBMT0coTFNfRVJST1IpIDw8ICJGYWlsZWQgdG8gZ2VuZXJhdGUgY2Vy
dGlmaWNhdGUuIEtleVR5cGU6ICIgPDwga2V5X3R5cGU7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgcnRjX2NvbmZpZy5jZXJ0aWZpY2F0ZXMucHVzaF9iYWNrKGNlcnRpZmljYXRlKTsKLSAg
fQotCi0gIFBDT0phdmEqIG9ic2VydmVyID0gcmVpbnRlcnByZXRfY2FzdDxQQ09KYXZhKj4ob2Jz
ZXJ2ZXJfcCk7Ci0gIG9ic2VydmVyLT5TZXRDb25zdHJhaW50cyhuZXcgQ29uc3RyYWludHNXcmFw
cGVyKGpuaSwgal9jb25zdHJhaW50cykpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5l
Y3Rpb25JbnRlcmZhY2U+IHBjKGYtPkNyZWF0ZVBlZXJDb25uZWN0aW9uKAotICAgICAgcnRjX2Nv
bmZpZywgb2JzZXJ2ZXItPmNvbnN0cmFpbnRzKCksIE5VTEwsIE5VTEwsIG9ic2VydmVyKSk7Ci0g
IHJldHVybiAoamxvbmcpcGMucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgcnRjOjpzY29wZWRfcmVm
cHRyPFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlPiBFeHRyYWN0TmF0aXZlUEMoCi0gICAgSk5JRW52
KiBqbmksIGpvYmplY3Qgal9wYykgewotICBqZmllbGRJRCBuYXRpdmVfcGNfaWQgPSBHZXRGaWVs
ZElEKGpuaSwKLSAgICAgIEdldE9iamVjdENsYXNzKGpuaSwgal9wYyksICJuYXRpdmVQZWVyQ29u
bmVjdGlvbiIsICJKIik7Ci0gIGpsb25nIGpfcCA9IEdldExvbmdGaWVsZChqbmksIGpfcGMsIG5h
dGl2ZV9wY19pZCk7Ci0gIHJldHVybiBydGM6OnNjb3BlZF9yZWZwdHI8UGVlckNvbm5lY3Rpb25J
bnRlcmZhY2U+KAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxQZWVyQ29ubmVjdGlvbkludGVyZmFj
ZSo+KGpfcCkpOwotfQotCi1KT1coam9iamVjdCwgUGVlckNvbm5lY3Rpb25fZ2V0TG9jYWxEZXNj
cmlwdGlvbikoSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYykgewotICBjb25zdCBTZXNzaW9uRGVz
Y3JpcHRpb25JbnRlcmZhY2UqIHNkcCA9Ci0gICAgICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3Bj
KS0+bG9jYWxfZGVzY3JpcHRpb24oKTsKLSAgcmV0dXJuIHNkcCA/IEphdmFTZHBGcm9tTmF0aXZl
U2RwKGpuaSwgc2RwKSA6IE5VTEw7Ci19Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9n
ZXRSZW1vdGVEZXNjcmlwdGlvbikoSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYykgewotICBjb25z
dCBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UqIHNkcCA9Ci0gICAgICBFeHRyYWN0TmF0aXZl
UEMoam5pLCBqX3BjKS0+cmVtb3RlX2Rlc2NyaXB0aW9uKCk7Ci0gIHJldHVybiBzZHAgPyBKYXZh
U2RwRnJvbU5hdGl2ZVNkcChqbmksIHNkcCkgOiBOVUxMOwotfQotCi1KT1coam9iamVjdCwgUGVl
ckNvbm5lY3Rpb25fY3JlYXRlRGF0YUNoYW5uZWwpKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0
IGpfcGMsIGpzdHJpbmcgal9sYWJlbCwgam9iamVjdCBqX2luaXQpIHsKLSAgRGF0YUNoYW5uZWxJ
bml0IGluaXQgPSBKYXZhRGF0YUNoYW5uZWxJbml0VG9OYXRpdmUoam5pLCBqX2luaXQpOwotICBy
dGM6OnNjb3BlZF9yZWZwdHI8RGF0YUNoYW5uZWxJbnRlcmZhY2U+IGNoYW5uZWwoCi0gICAgICBF
eHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+Q3JlYXRlRGF0YUNoYW5uZWwoCi0gICAgICAgICAg
SmF2YVRvU3RkU3RyaW5nKGpuaSwgal9sYWJlbCksICZpbml0KSk7Ci0gIC8vIE11c3RuJ3QgcGFz
cyBjaGFubmVsLmdldCgpIGRpcmVjdGx5IHRocm91Z2ggTmV3T2JqZWN0IHRvIGF2b2lkIHJlYWRp
bmcgaXRzCi0gIC8vIHZhcmFyZyBwYXJhbWV0ZXIgYXMgNjQtYml0IGFuZCByZWFkaW5nIG1lbW9y
eSB0aGF0IGRvZXNuJ3QgYmVsb25nIHRvIHRoZQotICAvLyAzMi1iaXQgcGFyYW1ldGVyLgotICBq
bG9uZyBuYXRpdmVDaGFubmVsUHRyID0gamxvbmdGcm9tUG9pbnRlcihjaGFubmVsLmdldCgpKTsK
LSAgaWYgKCFuYXRpdmVDaGFubmVsUHRyKSB7Ci0gICAgTE9HKExTX0VSUk9SKSA8PCAiRmFpbGVk
IHRvIGNyZWF0ZSBEYXRhQ2hhbm5lbCI7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgamNs
YXNzIGpfZGF0YV9jaGFubmVsX2NsYXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvRGF0
YUNoYW5uZWwiKTsKLSAgam1ldGhvZElEIGpfZGF0YV9jaGFubmVsX2N0b3IgPSBHZXRNZXRob2RJ
RCgKLSAgICAgIGpuaSwgal9kYXRhX2NoYW5uZWxfY2xhc3MsICI8aW5pdD4iLCAiKEopViIpOwot
ICBqb2JqZWN0IGpfY2hhbm5lbCA9IGpuaS0+TmV3T2JqZWN0KAotICAgICAgal9kYXRhX2NoYW5u
ZWxfY2xhc3MsIGpfZGF0YV9jaGFubmVsX2N0b3IsIG5hdGl2ZUNoYW5uZWxQdHIpOwotICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gIC8vIENoYW5u
ZWwgaXMgbm93IG93bmVkIGJ5IEphdmEgb2JqZWN0LCBhbmQgd2lsbCBiZSBmcmVlZCBmcm9tIHRo
ZXJlLgotICBpbnQgYnVtcGVkX2NvdW50ID0gY2hhbm5lbC0+QWRkUmVmKCk7Ci0gIFJUQ19DSEVD
SyhidW1wZWRfY291bnQgPT0gMikgPDwgIlVuZXhwZWN0ZWQgcmVmY291bnQiOwotICByZXR1cm4g
al9jaGFubmVsOwotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25fY3JlYXRlT2ZmZXIpKAot
ICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMsIGpvYmplY3Qgal9vYnNlcnZlciwgam9iamVj
dCBqX2NvbnN0cmFpbnRzKSB7Ci0gIENvbnN0cmFpbnRzV3JhcHBlciogY29uc3RyYWludHMgPQot
ICAgICAgbmV3IENvbnN0cmFpbnRzV3JhcHBlcihqbmksIGpfY29uc3RyYWludHMpOwotICBydGM6
OnNjb3BlZF9yZWZwdHI8Q3JlYXRlU2RwT2JzZXJ2ZXJXcmFwcGVyPiBvYnNlcnZlcigKLSAgICAg
IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8Q3JlYXRlU2RwT2JzZXJ2ZXJXcmFwcGVyPigKLSAg
ICAgICAgICBqbmksIGpfb2JzZXJ2ZXIsIGNvbnN0cmFpbnRzKSk7Ci0gIEV4dHJhY3ROYXRpdmVQ
QyhqbmksIGpfcGMpLT5DcmVhdGVPZmZlcihvYnNlcnZlciwgY29uc3RyYWludHMpOwotfQotCi1K
T1codm9pZCwgUGVlckNvbm5lY3Rpb25fY3JlYXRlQW5zd2VyKSgKLSAgICBKTklFbnYqIGpuaSwg
am9iamVjdCBqX3BjLCBqb2JqZWN0IGpfb2JzZXJ2ZXIsIGpvYmplY3Qgal9jb25zdHJhaW50cykg
ewotICBDb25zdHJhaW50c1dyYXBwZXIqIGNvbnN0cmFpbnRzID0KLSAgICAgIG5ldyBDb25zdHJh
aW50c1dyYXBwZXIoam5pLCBqX2NvbnN0cmFpbnRzKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPENy
ZWF0ZVNkcE9ic2VydmVyV3JhcHBlcj4gb2JzZXJ2ZXIoCi0gICAgICBuZXcgcnRjOjpSZWZDb3Vu
dGVkT2JqZWN0PENyZWF0ZVNkcE9ic2VydmVyV3JhcHBlcj4oCi0gICAgICAgICAgam5pLCBqX29i
c2VydmVyLCBjb25zdHJhaW50cykpOwotICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+Q3Jl
YXRlQW5zd2VyKG9ic2VydmVyLCBjb25zdHJhaW50cyk7Ci19Ci0KLS8vIEhlbHBlciB0byBjcmVh
dGUgYSBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UgZnJvbSBhIFNlc3Npb25EZXNjcmlwdGlv
bi4KLXN0YXRpYyBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UqIEphdmFTZHBUb05hdGl2ZVNk
cCgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX3NkcCkgewotICBqZmllbGRJRCBqX3R5cGVf
aWQgPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBHZXRPYmplY3RDbGFzcyhqbmksIGpfc2RwKSwg
InR5cGUiLAotICAgICAgIkxvcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbiRUeXBlOyIpOwot
ICBqb2JqZWN0IGpfdHlwZSA9IEdldE9iamVjdEZpZWxkKGpuaSwgal9zZHAsIGpfdHlwZV9pZCk7
Ci0gIGptZXRob2RJRCBqX2Nhbm9uaWNhbF9mb3JtX2lkID0gR2V0TWV0aG9kSUQoCi0gICAgICBq
bmksIEdldE9iamVjdENsYXNzKGpuaSwgal90eXBlKSwgImNhbm9uaWNhbEZvcm0iLAotICAgICAg
IigpTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gIGpzdHJpbmcgal90eXBlX3N0cmluZyA9IChqc3Ry
aW5nKWpuaS0+Q2FsbE9iamVjdE1ldGhvZCgKLSAgICAgIGpfdHlwZSwgal9jYW5vbmljYWxfZm9y
bV9pZCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbE9iamVj
dE1ldGhvZCI7Ci0gIHN0ZDo6c3RyaW5nIHN0ZF90eXBlID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwg
al90eXBlX3N0cmluZyk7Ci0KLSAgamZpZWxkSUQgal9kZXNjcmlwdGlvbl9pZCA9IEdldEZpZWxk
SUQoCi0gICAgICBqbmksIEdldE9iamVjdENsYXNzKGpuaSwgal9zZHApLCAiZGVzY3JpcHRpb24i
LCAiTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gIGpzdHJpbmcgal9kZXNjcmlwdGlvbiA9IChqc3Ry
aW5nKUdldE9iamVjdEZpZWxkKGpuaSwgal9zZHAsIGpfZGVzY3JpcHRpb25faWQpOwotICBzdGQ6
OnN0cmluZyBzdGRfZGVzY3JpcHRpb24gPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX2Rlc2NyaXB0
aW9uKTsKLQotICByZXR1cm4gd2VicnRjOjpDcmVhdGVTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAg
ICBzdGRfdHlwZSwgc3RkX2Rlc2NyaXB0aW9uLCBOVUxMKTsKLX0KLQotSk9XKHZvaWQsIFBlZXJD
b25uZWN0aW9uX3NldExvY2FsRGVzY3JpcHRpb24pKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0
IGpfcGMsCi0gICAgam9iamVjdCBqX29ic2VydmVyLCBqb2JqZWN0IGpfc2RwKSB7Ci0gIHJ0Yzo6
c2NvcGVkX3JlZnB0cjxTZXRTZHBPYnNlcnZlcldyYXBwZXI+IG9ic2VydmVyKAotICAgICAgbmV3
IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxTZXRTZHBPYnNlcnZlcldyYXBwZXI+KAotICAgICAgICAg
IGpuaSwgal9vYnNlcnZlciwgcmVpbnRlcnByZXRfY2FzdDxDb25zdHJhaW50c1dyYXBwZXIqPihO
VUxMKSkpOwotICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+U2V0TG9jYWxEZXNjcmlwdGlv
bigKLSAgICAgIG9ic2VydmVyLCBKYXZhU2RwVG9OYXRpdmVTZHAoam5pLCBqX3NkcCkpOwotfQot
Ci1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25fc2V0UmVtb3RlRGVzY3JpcHRpb24pKAotICAgIEpO
SUVudiogam5pLCBqb2JqZWN0IGpfcGMsCi0gICAgam9iamVjdCBqX29ic2VydmVyLCBqb2JqZWN0
IGpfc2RwKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxTZXRTZHBPYnNlcnZlcldyYXBwZXI+IG9i
c2VydmVyKAotICAgICAgbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxTZXRTZHBPYnNlcnZlcldy
YXBwZXI+KAotICAgICAgICAgIGpuaSwgal9vYnNlcnZlciwgcmVpbnRlcnByZXRfY2FzdDxDb25z
dHJhaW50c1dyYXBwZXIqPihOVUxMKSkpOwotICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+
U2V0UmVtb3RlRGVzY3JpcHRpb24oCi0gICAgICBvYnNlcnZlciwgSmF2YVNkcFRvTmF0aXZlU2Rw
KGpuaSwgal9zZHApKTsKLX0KLQotSk9XKGpib29sZWFuLCBQZWVyQ29ubmVjdGlvbl9zZXRDb25m
aWd1cmF0aW9uKSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjLCBqb2JqZWN0IGpfcnRj
X2NvbmZpZykgewotICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UlRDQ29uZmlndXJhdGlvbiBy
dGNfY29uZmlnKAotICAgICAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlJUQ0NvbmZpZ3VyYXRp
b25UeXBlOjprQWdncmVzc2l2ZSk7Ci0gIEphdmFSVENDb25maWd1cmF0aW9uVG9Kc2VwUlRDQ29u
ZmlndXJhdGlvbihqbmksIGpfcnRjX2NvbmZpZywgJnJ0Y19jb25maWcpOwotICByZXR1cm4gRXh0
cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlNldENvbmZpZ3VyYXRpb24ocnRjX2NvbmZpZyk7Ci19
Ci0KLUpPVyhqYm9vbGVhbiwgUGVlckNvbm5lY3Rpb25fbmF0aXZlQWRkSWNlQ2FuZGlkYXRlKSgK
LSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjLCBqc3RyaW5nIGpfc2RwX21pZCwKLSAgICBq
aW50IGpfc2RwX21saW5lX2luZGV4LCBqc3RyaW5nIGpfY2FuZGlkYXRlX3NkcCkgewotICBzdGQ6
OnN0cmluZyBzZHBfbWlkID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9zZHBfbWlkKTsKLSAgc3Rk
OjpzdHJpbmcgc2RwID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9jYW5kaWRhdGVfc2RwKTsKLSAg
c3RkOjp1bmlxdWVfcHRyPEljZUNhbmRpZGF0ZUludGVyZmFjZT4gY2FuZGlkYXRlKAotICAgICAg
d2VicnRjOjpDcmVhdGVJY2VDYW5kaWRhdGUoc2RwX21pZCwgal9zZHBfbWxpbmVfaW5kZXgsIHNk
cCwgTlVMTCkpOwotICByZXR1cm4gRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkFkZEljZUNh
bmRpZGF0ZShjYW5kaWRhdGUuZ2V0KCkpOwotfQotCi1zdGF0aWMgY3JpY2tldDo6Q2FuZGlkYXRl
IEdldENhbmRpZGF0ZUZyb21KYXZhKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGpfY2FuZGlkYXRlKSB7Ci0gIGpjbGFz
cyBqX2NhbmRpZGF0ZV9jbGFzcyA9IEdldE9iamVjdENsYXNzKGpuaSwgal9jYW5kaWRhdGUpOwot
ICBqZmllbGRJRCBqX3NkcF9taWRfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfY2FuZGlk
YXRlX2NsYXNzLCAic2RwTWlkIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBzdGQ6OnN0cmlu
ZyBzZHBfbWlkID0KLSAgICAgIEphdmFUb1N0ZFN0cmluZyhqbmksIEdldFN0cmluZ0ZpZWxkKGpu
aSwgal9jYW5kaWRhdGUsIGpfc2RwX21pZF9pZCkpOwotICBqZmllbGRJRCBqX3NkcF9pZCA9Ci0g
ICAgICBHZXRGaWVsZElEKGpuaSwgal9jYW5kaWRhdGVfY2xhc3MsICJzZHAiLCAiTGphdmEvbGFu
Zy9TdHJpbmc7Iik7Ci0gIHN0ZDo6c3RyaW5nIHNkcCA9Ci0gICAgICBKYXZhVG9TdGRTdHJpbmco
am5pLCBHZXRTdHJpbmdGaWVsZChqbmksIGpfY2FuZGlkYXRlLCBqX3NkcF9pZCkpOwotICBjcmlj
a2V0OjpDYW5kaWRhdGUgY2FuZGlkYXRlOwotICBpZiAoIXdlYnJ0Yzo6U2RwRGVzZXJpYWxpemVD
YW5kaWRhdGUoc2RwX21pZCwgc2RwLCAmY2FuZGlkYXRlLCBOVUxMKSkgewotICAgIExPRyhMU19F
UlJPUikgPDwgIlNkcERlc2NyaWFsaXplQ2FuZGlkYXRlIGZhaWxlZCB3aXRoIHNkcCAiIDw8IHNk
cDsKLSAgfQotICByZXR1cm4gY2FuZGlkYXRlOwotfQotCi1KT1coamJvb2xlYW4sIFBlZXJDb25u
ZWN0aW9uX25hdGl2ZVJlbW92ZUljZUNhbmRpZGF0ZXMpCi0oSk5JRW52KiBqbmksIGpvYmplY3Qg
al9wYywgam9iamVjdEFycmF5IGpfY2FuZGlkYXRlcykgewotICBzdGQ6OnZlY3Rvcjxjcmlja2V0
OjpDYW5kaWRhdGU+IGNhbmRpZGF0ZXM7Ci0gIHNpemVfdCBudW1fY2FuZGlkYXRlcyA9IGpuaS0+
R2V0QXJyYXlMZW5ndGgoal9jYW5kaWRhdGVzKTsKLSAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1fY2FuZGlkYXRlczsgKytpKSB7Ci0gICAgam9iamVjdCBqX2NhbmRpZGF0ZSA9IGpuaS0+R2V0
T2JqZWN0QXJyYXlFbGVtZW50KGpfY2FuZGlkYXRlcywgaSk7Ci0gICAgY2FuZGlkYXRlcy5wdXNo
X2JhY2soR2V0Q2FuZGlkYXRlRnJvbUphdmEoam5pLCBqX2NhbmRpZGF0ZSkpOwotICB9Ci0gIHJl
dHVybiBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+UmVtb3ZlSWNlQ2FuZGlkYXRlcyhjYW5k
aWRhdGVzKTsKLX0KLQotSk9XKGpib29sZWFuLCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVBZGRMb2Nh
bFN0cmVhbSkoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywgamxvbmcgbmF0aXZlX3N0
cmVhbSkgewotICByZXR1cm4gRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkFkZFN0cmVhbSgK
LSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihuYXRpdmVfc3Ry
ZWFtKSk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVSZW1vdmVMb2NhbFN0
cmVhbSkoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywgamxvbmcgbmF0aXZlX3N0cmVh
bSkgewotICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+UmVtb3ZlU3RyZWFtKAotICAgICAg
cmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbUludGVyZmFjZSo+KG5hdGl2ZV9zdHJlYW0pKTsK
LX0KLQotSk9XKGpvYmplY3QsIFBlZXJDb25uZWN0aW9uX25hdGl2ZUNyZWF0ZVNlbmRlcikoCi0g
ICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywganN0cmluZyBqX2tpbmQsIGpzdHJpbmcgal9z
dHJlYW1faWQpIHsKLSAgamNsYXNzIGpfcnRwX3NlbmRlcl9jbGFzcyA9IEZpbmRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL1J0cFNlbmRlciIpOwotICBqbWV0aG9kSUQgal9ydHBfc2VuZGVyX2N0b3Ig
PQotICAgICAgR2V0TWV0aG9kSUQoam5pLCBqX3J0cF9zZW5kZXJfY2xhc3MsICI8aW5pdD4iLCAi
KEopViIpOwotCi0gIHN0ZDo6c3RyaW5nIGtpbmQgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX2tp
bmQpOwotICBzdGQ6OnN0cmluZyBzdHJlYW1faWQgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX3N0
cmVhbV9pZCk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxSdHBTZW5kZXJJbnRlcmZhY2U+IHNlbmRl
ciA9Ci0gICAgICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+Q3JlYXRlU2VuZGVyKGtpbmQs
IHN0cmVhbV9pZCk7Ci0gIGlmICghc2VuZGVyLmdldCgpKSB7Ci0gICAgcmV0dXJuIG51bGxwdHI7
Ci0gIH0KLSAgamxvbmcgbmF0aXZlU2VuZGVyUHRyID0gamxvbmdGcm9tUG9pbnRlcihzZW5kZXIu
Z2V0KCkpOwotICBqb2JqZWN0IGpfc2VuZGVyID0KLSAgICAgIGpuaS0+TmV3T2JqZWN0KGpfcnRw
X3NlbmRlcl9jbGFzcywgal9ydHBfc2VuZGVyX2N0b3IsIG5hdGl2ZVNlbmRlclB0cik7Ci0gIENI
RUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLSAgLy8gU2Vu
ZGVyIGlzIG5vdyBvd25lZCBieSB0aGUgSmF2YSBvYmplY3QsIGFuZCB3aWxsIGJlIGZyZWVkIGZy
b20KLSAgLy8gUnRwU2VuZGVyLmRpc3Bvc2UoKSwgY2FsbGVkIGJ5IFBlZXJDb25uZWN0aW9uLmRp
c3Bvc2UoKSBvciBnZXRTZW5kZXJzKCkuCi0gIHNlbmRlci0+QWRkUmVmKCk7Ci0gIHJldHVybiBq
X3NlbmRlcjsKLX0KLQotSk9XKGpvYmplY3QsIFBlZXJDb25uZWN0aW9uX25hdGl2ZUdldFNlbmRl
cnMpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMpIHsKLSAgamNsYXNzIGpfYXJyYXlfbGlzdF9j
bGFzcyA9IEZpbmRDbGFzcyhqbmksICJqYXZhL3V0aWwvQXJyYXlMaXN0Iik7Ci0gIGptZXRob2RJ
RCBqX2FycmF5X2xpc3RfY3RvciA9Ci0gICAgICBHZXRNZXRob2RJRChqbmksIGpfYXJyYXlfbGlz
dF9jbGFzcywgIjxpbml0PiIsICIoKVYiKTsKLSAgam1ldGhvZElEIGpfYXJyYXlfbGlzdF9hZGQg
PQotICAgICAgR2V0TWV0aG9kSUQoam5pLCBqX2FycmF5X2xpc3RfY2xhc3MsICJhZGQiLCAiKExq
YXZhL2xhbmcvT2JqZWN0OylaIik7Ci0gIGpvYmplY3Qgal9zZW5kZXJzID0gam5pLT5OZXdPYmpl
Y3Qoal9hcnJheV9saXN0X2NsYXNzLCBqX2FycmF5X2xpc3RfY3Rvcik7Ci0gIENIRUNLX0VYQ0VQ
VElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLQotICBqY2xhc3Mgal9ydHBf
c2VuZGVyX2NsYXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUnRwU2VuZGVyIik7Ci0g
IGptZXRob2RJRCBqX3J0cF9zZW5kZXJfY3RvciA9Ci0gICAgICBHZXRNZXRob2RJRChqbmksIGpf
cnRwX3NlbmRlcl9jbGFzcywgIjxpbml0PiIsICIoSilWIik7Ci0KLSAgYXV0byBzZW5kZXJzID0g
RXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkdldFNlbmRlcnMoKTsKLSAgZm9yIChjb25zdCBh
dXRvJiBzZW5kZXIgOiBzZW5kZXJzKSB7Ci0gICAgamxvbmcgbmF0aXZlU2VuZGVyUHRyID0gamxv
bmdGcm9tUG9pbnRlcihzZW5kZXIuZ2V0KCkpOwotICAgIGpvYmplY3Qgal9zZW5kZXIgPQotICAg
ICAgICBqbmktPk5ld09iamVjdChqX3J0cF9zZW5kZXJfY2xhc3MsIGpfcnRwX3NlbmRlcl9jdG9y
LCBuYXRpdmVTZW5kZXJQdHIpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBk
dXJpbmcgTmV3T2JqZWN0IjsKLSAgICAvLyBTZW5kZXIgaXMgbm93IG93bmVkIGJ5IHRoZSBKYXZh
IG9iamVjdCwgYW5kIHdpbGwgYmUgZnJlZWQgZnJvbQotICAgIC8vIFJ0cFNlbmRlci5kaXNwb3Nl
KCksIGNhbGxlZCBieSBQZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCkgb3IgZ2V0U2VuZGVycygpLgot
ICAgIHNlbmRlci0+QWRkUmVmKCk7Ci0gICAgam5pLT5DYWxsQm9vbGVhbk1ldGhvZChqX3NlbmRl
cnMsIGpfYXJyYXlfbGlzdF9hZGQsIGpfc2VuZGVyKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5p
KSA8PCAiZXJyb3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAgfQotICByZXR1cm4gal9z
ZW5kZXJzOwotfQotCi1KT1coam9iamVjdCwgUGVlckNvbm5lY3Rpb25fbmF0aXZlR2V0UmVjZWl2
ZXJzKShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjKSB7Ci0gIGpjbGFzcyBqX2FycmF5X2xpc3Rf
Y2xhc3MgPSBGaW5kQ2xhc3Moam5pLCAiamF2YS91dGlsL0FycmF5TGlzdCIpOwotICBqbWV0aG9k
SUQgal9hcnJheV9saXN0X2N0b3IgPQotICAgICAgR2V0TWV0aG9kSUQoam5pLCBqX2FycmF5X2xp
c3RfY2xhc3MsICI8aW5pdD4iLCAiKClWIik7Ci0gIGptZXRob2RJRCBqX2FycmF5X2xpc3RfYWRk
ID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9hcnJheV9saXN0X2NsYXNzLCAiYWRkIiwgIihM
amF2YS9sYW5nL09iamVjdDspWiIpOwotICBqb2JqZWN0IGpfcmVjZWl2ZXJzID0gam5pLT5OZXdP
YmplY3Qoal9hcnJheV9saXN0X2NsYXNzLCBqX2FycmF5X2xpc3RfY3Rvcik7Ci0gIENIRUNLX0VY
Q0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLQotICBqY2xhc3Mgal9y
dHBfcmVjZWl2ZXJfY2xhc3MgPSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9SdHBSZWNlaXZl
ciIpOwotICBqbWV0aG9kSUQgal9ydHBfcmVjZWl2ZXJfY3RvciA9Ci0gICAgICBHZXRNZXRob2RJ
RChqbmksIGpfcnRwX3JlY2VpdmVyX2NsYXNzLCAiPGluaXQ+IiwgIihKKVYiKTsKLQotICBhdXRv
IHJlY2VpdmVycyA9IEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5HZXRSZWNlaXZlcnMoKTsK
LSAgZm9yIChjb25zdCBhdXRvJiByZWNlaXZlciA6IHJlY2VpdmVycykgewotICAgIGpsb25nIG5h
dGl2ZVJlY2VpdmVyUHRyID0gamxvbmdGcm9tUG9pbnRlcihyZWNlaXZlci5nZXQoKSk7Ci0gICAg
am9iamVjdCBqX3JlY2VpdmVyID0gam5pLT5OZXdPYmplY3Qoal9ydHBfcmVjZWl2ZXJfY2xhc3Ms
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal9ydHBfcmVjZWl2ZXJf
Y3RvciwgbmF0aXZlUmVjZWl2ZXJQdHIpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJl
cnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLSAgICAvLyBSZWNlaXZlciBpcyBub3cgb3duZWQgYnkg
SmF2YSBvYmplY3QsIGFuZCB3aWxsIGJlIGZyZWVkIGZyb20gdGhlcmUuCi0gICAgcmVjZWl2ZXIt
PkFkZFJlZigpOwotICAgIGpuaS0+Q2FsbEJvb2xlYW5NZXRob2Qoal9yZWNlaXZlcnMsIGpfYXJy
YXlfbGlzdF9hZGQsIGpfcmVjZWl2ZXIpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJl
cnJvciBkdXJpbmcgQ2FsbEJvb2xlYW5NZXRob2QiOwotICB9Ci0gIHJldHVybiBqX3JlY2VpdmVy
czsKLX0KLQotSk9XKGJvb2wsIFBlZXJDb25uZWN0aW9uX25hdGl2ZUdldFN0YXRzKSgKLSAgICBK
TklFbnYqIGpuaSwgam9iamVjdCBqX3BjLCBqb2JqZWN0IGpfb2JzZXJ2ZXIsIGpsb25nIG5hdGl2
ZV90cmFjaykgewotICBydGM6OnNjb3BlZF9yZWZwdHI8U3RhdHNPYnNlcnZlcldyYXBwZXI+IG9i
c2VydmVyKAotICAgICAgbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxTdGF0c09ic2VydmVyV3Jh
cHBlcj4oam5pLCBqX29ic2VydmVyKSk7Ci0gIHJldHVybiBFeHRyYWN0TmF0aXZlUEMoam5pLCBq
X3BjKS0+R2V0U3RhdHMoCi0gICAgICBvYnNlcnZlciwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
TWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSo+KG5hdGl2ZV90cmFjayksCi0gICAgICBQZWVyQ29u
bmVjdGlvbkludGVyZmFjZTo6a1N0YXRzT3V0cHV0TGV2ZWxTdGFuZGFyZCk7Ci19Ci0KLUpPVyhi
b29sLCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVTdGFydFJ0Y0V2ZW50TG9nKSgKLSAgICBKTklFbnYq
IGpuaSwgam9iamVjdCBqX3BjLCBpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgbWF4X3NpemVfYnl0
ZXMpIHsKLSAgcmV0dXJuIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5TdGFydFJ0Y0V2ZW50
TG9nKGZpbGVfZGVzY3JpcHRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1heF9zaXplX2J5dGVzKTsKLX0KLQotSk9XKHZvaWQsIFBlZXJD
b25uZWN0aW9uX25hdGl2ZVN0b3BSdGNFdmVudExvZykoSk5JRW52KiBqbmksIGpvYmplY3Qgal9w
YykgewotICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+U3RvcFJ0Y0V2ZW50TG9nKCk7Ci19
Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9zaWduYWxpbmdTdGF0ZSkoSk5JRW52KiBq
bmksIGpvYmplY3Qgal9wYykgewotICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6U2lnbmFsaW5n
U3RhdGUgc3RhdGUgPQotICAgICAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPnNpZ25hbGlu
Z19zdGF0ZSgpOwotICByZXR1cm4gSmF2YUVudW1Gcm9tSW5kZXgoam5pLCAiUGVlckNvbm5lY3Rp
b24kU2lnbmFsaW5nU3RhdGUiLCBzdGF0ZSk7Ci19Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVj
dGlvbl9pY2VDb25uZWN0aW9uU3RhdGUpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMpIHsKLSAg
UGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkljZUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSA9Ci0gICAg
ICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+aWNlX2Nvbm5lY3Rpb25fc3RhdGUoKTsKLSAg
cmV0dXJuIEphdmFFbnVtRnJvbUluZGV4KGpuaSwgIlBlZXJDb25uZWN0aW9uJEljZUNvbm5lY3Rp
b25TdGF0ZSIsIHN0YXRlKTsKLX0KLQotSk9XKGpvYmplY3QsIFBlZXJDb25uZWN0aW9uX2ljZUdh
dGhlcmluZ1N0YXRlKShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjKSB7Ci0gIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjpJY2VHYXRoZXJpbmdTdGF0ZSBzdGF0ZSA9Ci0gICAgICBFeHRyYWN0TmF0
aXZlUEMoam5pLCBqX3BjKS0+aWNlX2dhdGhlcmluZ19zdGF0ZSgpOwotICByZXR1cm4gSmF2YUVu
dW1Gcm9tSW5kZXgoam5pLCAiUGVlckNvbm5lY3Rpb24kSWNlR2F0aGVyaW5nU3RhdGUiLCBzdGF0
ZSk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbl9jbG9zZSkoSk5JRW52KiBqbmksIGpv
YmplY3Qgal9wYykgewotICBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+Q2xvc2UoKTsKLSAg
cmV0dXJuOwotfQotCi1KT1coam9iamVjdCwgTWVkaWFTb3VyY2VfbmF0aXZlU3RhdGUpKEpOSUVu
diogam5pLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICBydGM6OnNjb3BlZF9yZWZwdHI8TWVkaWFT
b3VyY2VJbnRlcmZhY2U+IHAoCi0gICAgICByZWludGVycHJldF9jYXN0PE1lZGlhU291cmNlSW50
ZXJmYWNlKj4oal9wKSk7Ci0gIHJldHVybiBKYXZhRW51bUZyb21JbmRleChqbmksICJNZWRpYVNv
dXJjZSRTdGF0ZSIsIHAtPnN0YXRlKCkpOwotfQotCi1KT1coamxvbmcsIFZpZGVvUmVuZGVyZXJf
bmF0aXZlV3JhcFZpZGVvUmVuZGVyZXIpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpvYmpl
Y3Qgal9jYWxsYmFja3MpIHsKLSAgc3RkOjp1bmlxdWVfcHRyPEphdmFWaWRlb1JlbmRlcmVyV3Jh
cHBlcj4gcmVuZGVyZXIoCi0gICAgICBuZXcgSmF2YVZpZGVvUmVuZGVyZXJXcmFwcGVyKGpuaSwg
al9jYWxsYmFja3MpKTsKLSAgcmV0dXJuIChqbG9uZylyZW5kZXJlci5yZWxlYXNlKCk7Ci19Ci0K
LUpPVyh2b2lkLCBWaWRlb1JlbmRlcmVyX25hdGl2ZUNvcHlQbGFuZSkoCi0gICAgSk5JRW52ICpq
bmksIGpjbGFzcywgam9iamVjdCBqX3NyY19idWZmZXIsIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0
LAotICAgIGppbnQgc3JjX3N0cmlkZSwgam9iamVjdCBqX2RzdF9idWZmZXIsIGppbnQgZHN0X3N0
cmlkZSkgewotICBzaXplX3Qgc3JjX3NpemUgPSBqbmktPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5
KGpfc3JjX2J1ZmZlcik7Ci0gIHNpemVfdCBkc3Rfc2l6ZSA9IGpuaS0+R2V0RGlyZWN0QnVmZmVy
Q2FwYWNpdHkoal9kc3RfYnVmZmVyKTsKLSAgUlRDX0NIRUNLKHNyY19zdHJpZGUgPj0gd2lkdGgp
IDw8ICJXcm9uZyBzb3VyY2Ugc3RyaWRlICIgPDwgc3JjX3N0cmlkZTsKLSAgUlRDX0NIRUNLKGRz
dF9zdHJpZGUgPj0gd2lkdGgpIDw8ICJXcm9uZyBkZXN0aW5hdGlvbiBzdHJpZGUgIiA8PCBkc3Rf
c3RyaWRlOwotICBSVENfQ0hFQ0soc3JjX3NpemUgPj0gc3JjX3N0cmlkZSAqIGhlaWdodCkKLSAg
ICAgIDw8ICJJbnN1ZmZpY2llbnQgc291cmNlIGJ1ZmZlciBjYXBhY2l0eSAiIDw8IHNyY19zaXpl
OwotICBSVENfQ0hFQ0soZHN0X3NpemUgPj0gZHN0X3N0cmlkZSAqIGhlaWdodCkKLSAgICAgIDw8
ICJJbnN1ZmZpY2llbnQgZGVzdGluYXRpb24gYnVmZmVyIGNhcGFjaXR5ICIgPDwgZHN0X3NpemU7
Ci0gIHVpbnQ4X3QgKnNyYyA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqbmkt
PkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9zcmNfYnVmZmVyKSk7Ci0gIHVpbnQ4X3QgKmRzdCA9
Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFk
ZHJlc3Moal9kc3RfYnVmZmVyKSk7Ci0gIGlmIChzcmNfc3RyaWRlID09IGRzdF9zdHJpZGUpIHsK
LSAgICBtZW1jcHkoZHN0LCBzcmMsIHNyY19zdHJpZGUgKiBoZWlnaHQpOwotICB9IGVsc2Ugewot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLSAgICAgIG1lbWNweShkc3Qs
IHNyYywgd2lkdGgpOwotICAgICAgc3JjICs9IHNyY19zdHJpZGU7Ci0gICAgICBkc3QgKz0gZHN0
X3N0cmlkZTsKLSAgICB9Ci0gIH0KLX0KLQotSk9XKHZvaWQsIEZpbGVWaWRlb0NhcHR1cmVyX25h
dGl2ZUk0MjBUb05WMjEpKAotICAgIEpOSUVudiAqam5pLCBqY2xhc3MsIGpieXRlQXJyYXkgal9z
cmNfYnVmZmVyLCBqaW50IHdpZHRoLCBqaW50IGhlaWdodCwKLSAgICBqYnl0ZUFycmF5IGpfZHN0
X2J1ZmZlcikgewotICBzaXplX3Qgc3JjX3NpemUgPSBqbmktPkdldEFycmF5TGVuZ3RoKGpfc3Jj
X2J1ZmZlcik7Ci0gIHNpemVfdCBkc3Rfc2l6ZSA9IGpuaS0+R2V0QXJyYXlMZW5ndGgoal9kc3Rf
YnVmZmVyKTsKLSAgaW50IHNyY19zdHJpZGUgPSB3aWR0aDsKLSAgaW50IGRzdF9zdHJpZGUgPSB3
aWR0aDsKLSAgUlRDX0NIRUNLX0dFKHNyY19zaXplLCBzcmNfc3RyaWRlICogaGVpZ2h0ICogMyAv
IDIpOwotICBSVENfQ0hFQ0tfR0UoZHN0X3NpemUsIGRzdF9zdHJpZGUgKiBoZWlnaHQgKiAzIC8g
Mik7Ci0KLSAgamJ5dGUqIHNyY19ieXRlcyA9IGpuaS0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoal9z
cmNfYnVmZmVyLCAwKTsKLSAgdWludDhfdCogc3JjID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oc3JjX2J5dGVzKTsKLSAgamJ5dGUqIGRzdF9ieXRlcyA9IGpuaS0+R2V0Qnl0ZUFycmF5RWxl
bWVudHMoal9kc3RfYnVmZmVyLCAwKTsKLSAgdWludDhfdCogZHN0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZHN0X2J5dGVzKTsKLQotICB1aW50OF90KiBzcmNfeSA9IHNyYzsKLSAgc2l6
ZV90IHNyY19zdHJpZGVfeSA9IHNyY19zdHJpZGU7Ci0gIHVpbnQ4X3QqIHNyY191ID0gc3JjICsg
c3JjX3N0cmlkZSAqIGhlaWdodDsKLSAgc2l6ZV90IHNyY19zdHJpZGVfdSA9IHNyY19zdHJpZGUg
LyAyOwotICB1aW50OF90KiBzcmNfdiA9IHNyYyArIHNyY19zdHJpZGUgKiBoZWlnaHQgKiA1IC8g
NDsKLSAgc2l6ZV90IHNyY19zdHJpZGVfdiA9IHNyY19zdHJpZGUgLyAyOwotCi0gIHVpbnQ4X3Qq
IGRzdF95ID0gZHN0OwotICBzaXplX3QgZHN0X3N0cmlkZV95ID0gZHN0X3N0cmlkZTsKLSAgc2l6
ZV90IGRzdF9zdHJpZGVfdXYgPSBkc3Rfc3RyaWRlOwotICB1aW50OF90KiBkc3RfdXYgPSBkc3Qg
KyBkc3Rfc3RyaWRlICogaGVpZ2h0OwotCi0gIGludCByZXQgPSBsaWJ5dXY6Okk0MjBUb05WMjEo
c3JjX3ksIHNyY19zdHJpZGVfeSwgc3JjX3UsIHNyY19zdHJpZGVfdSwgc3JjX3YsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3JjX3N0cmlkZV92LCBkc3RfeSwgZHN0X3N0cmlkZV95
LCBkc3RfdXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0X3N0cmlkZV91diwg
d2lkdGgsIGhlaWdodCk7Ci0gIGpuaS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGpfc3JjX2J1
ZmZlciwgc3JjX2J5dGVzLCAwKTsKLSAgam5pLT5SZWxlYXNlQnl0ZUFycmF5RWxlbWVudHMoal9k
c3RfYnVmZmVyLCBkc3RfYnl0ZXMsIDApOwotICBpZiAocmV0KSB7Ci0gICAgTE9HKExTX0VSUk9S
KSA8PCAiRXJyb3IgY29udmVydGluZyBJNDIwIGZyYW1lIHRvIE5WMjE6ICIgPDwgcmV0OwotICB9
Ci19Ci0KLUpPVyh2b2lkLCBWaWRlb0ZpbGVSZW5kZXJlcl9uYXRpdmVJNDIwU2NhbGUpKAotICAg
IEpOSUVudiAqam5pLCBqY2xhc3MsCi0gICAgam9iamVjdCBqX3NyY19idWZmZXJfeSwgamludCBq
X3NyY19zdHJpZGVfeSwKLSAgICBqb2JqZWN0IGpfc3JjX2J1ZmZlcl91LCBqaW50IGpfc3JjX3N0
cmlkZV91LAotICAgIGpvYmplY3Qgal9zcmNfYnVmZmVyX3YsIGppbnQgal9zcmNfc3RyaWRlX3Ys
Ci0gICAgamludCB3aWR0aCwgamludCBoZWlnaHQsCi0gICAgamJ5dGVBcnJheSBqX2RzdF9idWZm
ZXIsIGppbnQgZHN0V2lkdGgsIGppbnQgZHN0SGVpZ2h0KSB7Ci0gIHNpemVfdCBzcmNfc2l6ZV95
ID0gam5pLT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShqX3NyY19idWZmZXJfeSk7Ci0gIHNpemVf
dCBzcmNfc2l6ZV91ID0gam5pLT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShqX3NyY19idWZmZXJf
dSk7Ci0gIHNpemVfdCBzcmNfc2l6ZV92ID0gam5pLT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShq
X3NyY19idWZmZXJfdik7Ci0gIHNpemVfdCBkc3Rfc2l6ZSA9IGpuaS0+R2V0RGlyZWN0QnVmZmVy
Q2FwYWNpdHkoal9kc3RfYnVmZmVyKTsKLSAgaW50IGRzdF9zdHJpZGUgPSBkc3RXaWR0aDsKLSAg
UlRDX0NIRUNLX0dFKHNyY19zaXplX3ksIGpfc3JjX3N0cmlkZV95ICogaGVpZ2h0KTsKLSAgUlRD
X0NIRUNLX0dFKHNyY19zaXplX3UsIGpfc3JjX3N0cmlkZV91ICogaGVpZ2h0IC8gNCk7Ci0gIFJU
Q19DSEVDS19HRShzcmNfc2l6ZV92LCBqX3NyY19zdHJpZGVfdiAqIGhlaWdodCAvIDQpOwotICBS
VENfQ0hFQ0tfR0UoZHN0X3NpemUsIGRzdF9zdHJpZGUgKiBoZWlnaHQgKiAzIC8gMik7Ci0gIHVp
bnQ4X3QqIHNyY195ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0
RGlyZWN0QnVmZmVyQWRkcmVzcyhqX3NyY19idWZmZXJfeSkpOwotICB1aW50OF90KiBzcmNfdSA9
Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFk
ZHJlc3Moal9zcmNfYnVmZmVyX3UpKTsKLSAgdWludDhfdCogc3JjX3YgPQotICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfc3JjX2J1
ZmZlcl92KSk7Ci0gIHVpbnQ4X3QqIGRzdCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9kc3RfYnVmZmVyKSk7Ci0KLSAgdWlu
dDhfdCogZHN0X3kgPSBkc3Q7Ci0gIHNpemVfdCBkc3Rfc3RyaWRlX3kgPSBkc3Rfc3RyaWRlOwot
ICB1aW50OF90KiBkc3RfdSA9IGRzdCArIGRzdF9zdHJpZGUgKiBkc3RIZWlnaHQ7Ci0gIHNpemVf
dCBkc3Rfc3RyaWRlX3UgPSBkc3Rfc3RyaWRlIC8gMjsKLSAgdWludDhfdCogZHN0X3YgPSBkc3Qg
KyBkc3Rfc3RyaWRlICogZHN0SGVpZ2h0ICogNSAvIDQ7Ci0gIHNpemVfdCBkc3Rfc3RyaWRlX3Yg
PSBkc3Rfc3RyaWRlIC8gMjsKLQotICBpbnQgcmV0ID0gbGlieXV2OjpJNDIwU2NhbGUoCi0gICAg
ICBzcmNfeSwgal9zcmNfc3RyaWRlX3ksIHNyY191LCBqX3NyY19zdHJpZGVfdSwgc3JjX3YsIGpf
c3JjX3N0cmlkZV92LAotICAgICAgd2lkdGgsIGhlaWdodCwgZHN0X3ksIGRzdF9zdHJpZGVfeSwg
ZHN0X3UsIGRzdF9zdHJpZGVfdSwgZHN0X3YsCi0gICAgICBkc3Rfc3RyaWRlX3YsIGRzdFdpZHRo
LCBkc3RIZWlnaHQsIGxpYnl1djo6a0ZpbHRlckJpbGluZWFyKTsKLSAgaWYgKHJldCkgewotICAg
IExPRyhMU19FUlJPUikgPDwgIkVycm9yIHNjYWxpbmcgSTQyMCBmcmFtZTogIiA8PCByZXQ7Ci0g
IH0KLX0KLQotSk9XKGpzdHJpbmcsIE1lZGlhU3RyZWFtVHJhY2tfbmF0aXZlSWQpKEpOSUVudiog
am5pLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICByZXR1cm4gSmF2YVN0cmluZ0Zyb21TdGRTdHJp
bmcoCi0gICAgICBqbmksIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1UcmFja0ludGVyZmFj
ZSo+KGpfcCktPmlkKCkpOwotfQotCi1KT1coanN0cmluZywgTWVkaWFTdHJlYW1UcmFja19uYXRp
dmVLaW5kKShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgcmV0dXJuIEphdmFT
dHJpbmdGcm9tU3RkU3RyaW5nKAotICAgICAgam5pLCByZWludGVycHJldF9jYXN0PE1lZGlhU3Ry
ZWFtVHJhY2tJbnRlcmZhY2UqPihqX3ApLT5raW5kKCkpOwotfQotCi1KT1coamJvb2xlYW4sIE1l
ZGlhU3RyZWFtVHJhY2tfbmF0aXZlRW5hYmxlZCkoSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcg
al9wKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZh
Y2UqPihqX3ApLT5lbmFibGVkKCk7Ci19Ci0KLUpPVyhqb2JqZWN0LCBNZWRpYVN0cmVhbVRyYWNr
X25hdGl2ZVN0YXRlKShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgcmV0dXJu
IEphdmFFbnVtRnJvbUluZGV4KAotICAgICAgam5pLAotICAgICAgIk1lZGlhU3RyZWFtVHJhY2sk
U3RhdGUiLAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNl
Kj4oal9wKS0+c3RhdGUoKSk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgTWVkaWFTdHJlYW1UcmFja19u
YXRpdmVTZXRFbmFibGVkKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3AsIGpi
b29sZWFuIGVuYWJsZWQpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1U
cmFja0ludGVyZmFjZSo+KGpfcCkKLSAgICAgIC0+c2V0X2VuYWJsZWQoZW5hYmxlZCk7Ci19Ci0K
LUpPVyh2b2lkLCBWaWRlb1RyYWNrX25hdGl2ZUFkZFJlbmRlcmVyKSgKLSAgICBKTklFbnYqIGpu
aSwgamNsYXNzLAotICAgIGpsb25nIGpfdmlkZW9fdHJhY2tfcG9pbnRlciwgamxvbmcgal9yZW5k
ZXJlcl9wb2ludGVyKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiVmlkZW9UcmFjazo6bmF0aXZlQWRk
UmVuZGVyZXIiOwotICByZWludGVycHJldF9jYXN0PFZpZGVvVHJhY2tJbnRlcmZhY2UqPihqX3Zp
ZGVvX3RyYWNrX3BvaW50ZXIpCi0gICAgICAtPkFkZE9yVXBkYXRlU2luaygKLSAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNlPHdlYnJ0Yzo6VmlkZW9GcmFt
ZT4qPigKLSAgICAgICAgICAgICAgal9yZW5kZXJlcl9wb2ludGVyKSwKLSAgICAgICAgICBydGM6
OlZpZGVvU2lua1dhbnRzKCkpOwotfQotCi1KT1codm9pZCwgVmlkZW9UcmFja19uYXRpdmVSZW1v
dmVSZW5kZXJlcikoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywKLSAgICBqbG9uZyBqX3ZpZGVv
X3RyYWNrX3BvaW50ZXIsIGpsb25nIGpfcmVuZGVyZXJfcG9pbnRlcikgewotICByZWludGVycHJl
dF9jYXN0PFZpZGVvVHJhY2tJbnRlcmZhY2UqPihqX3ZpZGVvX3RyYWNrX3BvaW50ZXIpCi0gICAg
ICAtPlJlbW92ZVNpbmsoCi0gICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxydGM6OlZpZGVvU2lu
a0ludGVyZmFjZTx3ZWJydGM6OlZpZGVvRnJhbWU+Kj4oCi0gICAgICAgICAgICAgIGpfcmVuZGVy
ZXJfcG9pbnRlcikpOwotfQotCi1KT1coamxvbmcsIENhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9n
U2lua19uYXRpdmVBZGRTaW5rKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLAotICAgIGpzdHJp
bmcgal9kaXJQYXRoLCBqaW50IGpfbWF4RmlsZVNpemUsIGppbnQgal9zZXZlcml0eSkgewotICBz
dGQ6OnN0cmluZyBkaXJfcGF0aCA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfZGlyUGF0aCk7Ci0g
IHJ0Yzo6Q2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rKiBzaW5rID0KLSAgICAgIG5ldyBy
dGM6OkNhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luayhkaXJfcGF0aCwgal9tYXhGaWxlU2l6
ZSk7Ci0gIGlmICghc2luay0+SW5pdCgpKSB7Ci0gICAgTE9HX1YocnRjOjpMb2dnaW5nU2V2ZXJp
dHk6OkxTX1dBUk5JTkcpIDw8Ci0gICAgICAgICJGYWlsZWQgdG8gaW5pdCBDYWxsU2Vzc2lvbkZp
bGVSb3RhdGluZ0xvZ1NpbmsgZm9yIHBhdGggIiA8PCBkaXJfcGF0aDsKLSAgICBkZWxldGUgc2lu
azsKLSAgICByZXR1cm4gMDsKLSAgfQotICBydGM6OkxvZ01lc3NhZ2U6OkFkZExvZ1RvU3RyZWFt
KAotICAgICAgc2luaywgc3RhdGljX2Nhc3Q8cnRjOjpMb2dnaW5nU2V2ZXJpdHk+KGpfc2V2ZXJp
dHkpKTsKLSAgcmV0dXJuIChqbG9uZykgc2luazsKLX0KLQotSk9XKHZvaWQsIENhbGxTZXNzaW9u
RmlsZVJvdGF0aW5nTG9nU2lua19uYXRpdmVEZWxldGVTaW5rKSgKLSAgICBKTklFbnYqIGpuaSwg
amNsYXNzLCBqbG9uZyBqX3NpbmspIHsKLSAgcnRjOjpDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xv
Z1NpbmsqIHNpbmsgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxydGM6OkNhbGxTZXNzaW9uRmls
ZVJvdGF0aW5nTG9nU2luayo+KGpfc2luayk7Ci0gIHJ0Yzo6TG9nTWVzc2FnZTo6UmVtb3ZlTG9n
VG9TdHJlYW0oc2luayk7Ci0gIGRlbGV0ZSBzaW5rOwotfQotCi1KT1coamJ5dGVBcnJheSwgQ2Fs
bFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rX25hdGl2ZUdldExvZ0RhdGEpKAotICAgIEpOSUVu
diogam5pLCBqY2xhc3MsIGpzdHJpbmcgal9kaXJQYXRoKSB7Ci0gIHN0ZDo6c3RyaW5nIGRpcl9w
YXRoID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9kaXJQYXRoKTsKLSAgc3RkOjp1bmlxdWVfcHRy
PHJ0Yzo6Q2FsbFNlc3Npb25GaWxlUm90YXRpbmdTdHJlYW0+IHN0cmVhbSgKLSAgICAgIG5ldyBy
dGM6OkNhbGxTZXNzaW9uRmlsZVJvdGF0aW5nU3RyZWFtKGRpcl9wYXRoKSk7Ci0gIGlmICghc3Ry
ZWFtLT5PcGVuKCkpIHsKLSAgICBMT0dfVihydGM6OkxvZ2dpbmdTZXZlcml0eTo6TFNfV0FSTklO
RykgPDwKLSAgICAgICAgIkZhaWxlZCB0byBvcGVuIENhbGxTZXNzaW9uRmlsZVJvdGF0aW5nU3Ry
ZWFtIGZvciBwYXRoICIgPDwgZGlyX3BhdGg7Ci0gICAgcmV0dXJuIGpuaS0+TmV3Qnl0ZUFycmF5
KDApOwotICB9Ci0gIHNpemVfdCBsb2dfc2l6ZSA9IDA7Ci0gIGlmICghc3RyZWFtLT5HZXRTaXpl
KCZsb2dfc2l6ZSkgfHwgbG9nX3NpemUgPT0gMCkgewotICAgIExPR19WKHJ0Yzo6TG9nZ2luZ1Nl
dmVyaXR5OjpMU19XQVJOSU5HKSA8PAotICAgICAgICAiQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdT
dHJlYW0gcmV0dXJucyAwIHNpemUgZm9yIHBhdGggIiA8PCBkaXJfcGF0aDsKLSAgICByZXR1cm4g
am5pLT5OZXdCeXRlQXJyYXkoMCk7Ci0gIH0KLQotICBzaXplX3QgcmVhZCA9IDA7Ci0gIHN0ZDo6
dW5pcXVlX3B0cjxqYnl0ZT4gYnVmZmVyKHN0YXRpY19jYXN0PGpieXRlKj4obWFsbG9jKGxvZ19z
aXplKSkpOwotICBzdHJlYW0tPlJlYWRBbGwoYnVmZmVyLmdldCgpLCBsb2dfc2l6ZSwgJnJlYWQs
IG51bGxwdHIpOwotCi0gIGpieXRlQXJyYXkgcmVzdWx0ID0gam5pLT5OZXdCeXRlQXJyYXkocmVh
ZCk7Ci0gIGpuaS0+U2V0Qnl0ZUFycmF5UmVnaW9uKHJlc3VsdCwgMCwgcmVhZCwgYnVmZmVyLmdl
dCgpKTsKLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1KT1coamJvb2xlYW4sIFJ0cFNlbmRlcl9u
YXRpdmVTZXRUcmFjaykoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9u
ZyBqX3J0cF9zZW5kZXJfcG9pbnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGpsb25nIGpfdHJhY2tfcG9pbnRlcikgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxS
dHBTZW5kZXJJbnRlcmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgIC0+U2V0VHJh
Y2socmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4oal90cmFja19w
b2ludGVyKSk7Ci19Ci0KLUpPVyhqbG9uZywgUnRwU2VuZGVyX25hdGl2ZUdldFRyYWNrKShKTklF
bnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqY2xhc3MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamxvbmcgal90cmFja19wb2ludGVy
KSB7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxS
dHBTZW5kZXJJbnRlcmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgICAgICAtPnRy
YWNrKCkKLSAgICAgICAgICAucmVsZWFzZSgpKTsKLX0KLQotc3RhdGljIHZvaWQgSmF2YVJ0cFBh
cmFtZXRlcnNUb0pzZXBSdHBQYXJhbWV0ZXJzKAotICAgIEpOSUVudiogam5pLAotICAgIGpvYmpl
Y3Qgal9wYXJhbWV0ZXJzLAotICAgIHdlYnJ0Yzo6UnRwUGFyYW1ldGVycyogcGFyYW1ldGVycykg
ewotICBSVENfQ0hFQ0socGFyYW1ldGVycyAhPSBudWxscHRyKTsKLSAgamNsYXNzIHBhcmFtZXRl
cnNfY2xhc3MgPSBqbmktPkZpbmRDbGFzcygib3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzIik7Ci0g
IGpmaWVsZElEIGVuY29kaW5nc19pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgcGFyYW1ldGVy
c19jbGFzcywgImVuY29kaW5ncyIsICJMamF2YS91dGlsL0xpbmtlZExpc3Q7Iik7Ci0gIGpmaWVs
ZElEIGNvZGVjc19pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgcGFyYW1ldGVyc19jbGFzcywg
ImNvZGVjcyIsICJMamF2YS91dGlsL0xpbmtlZExpc3Q7Iik7Ci0KLSAgLy8gQ29udmVydCBlbmNv
ZGluZ3MuCi0gIGpvYmplY3Qgal9lbmNvZGluZ3MgPSBHZXRPYmplY3RGaWVsZChqbmksIGpfcGFy
YW1ldGVycywgZW5jb2RpbmdzX2lkKTsKLSAgY29uc3QgaW50IGtCaXRyYXRlVW5saW1pdGVkID0g
LTE7Ci0gIGpjbGFzcyBqX2VuY29kaW5nX3BhcmFtZXRlcnNfY2xhc3MgPQotICAgICAgam5pLT5G
aW5kQ2xhc3MoIm9yZy93ZWJydGMvUnRwUGFyYW1ldGVycyRFbmNvZGluZyIpOwotICBqZmllbGRJ
RCBhY3RpdmVfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfZW5jb2RpbmdfcGFyYW1ldGVy
c19jbGFzcywgImFjdGl2ZSIsICJaIik7Ci0gIGpmaWVsZElEIGJpdHJhdGVfaWQgPSBHZXRGaWVs
ZElEKGpuaSwgal9lbmNvZGluZ19wYXJhbWV0ZXJzX2NsYXNzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAibWF4Qml0cmF0ZUJwcyIsICJMamF2YS9sYW5nL0ludGVnZXI7Iik7
Ci0gIGpjbGFzcyBqX2ludGVnZXJfY2xhc3MgPSBqbmktPkZpbmRDbGFzcygiamF2YS9sYW5nL0lu
dGVnZXIiKTsKLSAgam1ldGhvZElEIGludF92YWx1ZV9pZCA9IEdldE1ldGhvZElEKGpuaSwgal9p
bnRlZ2VyX2NsYXNzLCAiaW50VmFsdWUiLCAiKClJIik7Ci0KLSAgZm9yIChqb2JqZWN0IGpfZW5j
b2RpbmdfcGFyYW1ldGVycyA6IEl0ZXJhYmxlKGpuaSwgal9lbmNvZGluZ3MpKSB7Ci0gICAgd2Vi
cnRjOjpSdHBFbmNvZGluZ1BhcmFtZXRlcnMgZW5jb2Rpbmc7Ci0gICAgZW5jb2RpbmcuYWN0aXZl
ID0gR2V0Qm9vbGVhbkZpZWxkKGpuaSwgal9lbmNvZGluZ19wYXJhbWV0ZXJzLCBhY3RpdmVfaWQp
OwotICAgIGpvYmplY3Qgal9iaXRyYXRlID0KLSAgICAgICAgR2V0TnVsbGFibGVPYmplY3RGaWVs
ZChqbmksIGpfZW5jb2RpbmdfcGFyYW1ldGVycywgYml0cmF0ZV9pZCk7Ci0gICAgaWYgKCFJc051
bGwoam5pLCBqX2JpdHJhdGUpKSB7Ci0gICAgICBpbnQgYml0cmF0ZV92YWx1ZSA9IGpuaS0+Q2Fs
bEludE1ldGhvZChqX2JpdHJhdGUsIGludF92YWx1ZV9pZCk7Ci0gICAgICBDSEVDS19FWENFUFRJ
T04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxJbnRNZXRob2QiOwotICAgICAgZW5jb2Rpbmcu
bWF4X2JpdHJhdGVfYnBzID0gYml0cmF0ZV92YWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAgZW5j
b2RpbmcubWF4X2JpdHJhdGVfYnBzID0ga0JpdHJhdGVVbmxpbWl0ZWQ7Ci0gICAgfQotICAgIHBh
cmFtZXRlcnMtPmVuY29kaW5ncy5wdXNoX2JhY2soZW5jb2RpbmcpOwotICB9Ci0KLSAgLy8gQ29u
dmVydCBjb2RlY3MuCi0gIGpvYmplY3Qgal9jb2RlY3MgPSBHZXRPYmplY3RGaWVsZChqbmksIGpf
cGFyYW1ldGVycywgY29kZWNzX2lkKTsKLSAgamNsYXNzIGNvZGVjX2NsYXNzID0gam5pLT5GaW5k
Q2xhc3MoIm9yZy93ZWJydGMvUnRwUGFyYW1ldGVycyRDb2RlYyIpOwotICBqZmllbGRJRCBwYXls
b2FkX3R5cGVfaWQgPSBHZXRGaWVsZElEKGpuaSwgY29kZWNfY2xhc3MsICJwYXlsb2FkVHlwZSIs
ICJJIik7Ci0gIGpmaWVsZElEIG1pbWVfdHlwZV9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwg
Y29kZWNfY2xhc3MsICJtaW1lVHlwZSIsICJMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgamZpZWxk
SUQgY2xvY2tfcmF0ZV9pZCA9IEdldEZpZWxkSUQoam5pLCBjb2RlY19jbGFzcywgImNsb2NrUmF0
ZSIsICJJIik7Ci0gIGpmaWVsZElEIGNoYW5uZWxzX2lkID0gR2V0RmllbGRJRChqbmksIGNvZGVj
X2NsYXNzLCAiY2hhbm5lbHMiLCAiSSIpOwotCi0gIGZvciAoam9iamVjdCBqX2NvZGVjIDogSXRl
cmFibGUoam5pLCBqX2NvZGVjcykpIHsKLSAgICB3ZWJydGM6OlJ0cENvZGVjUGFyYW1ldGVycyBj
b2RlYzsKLSAgICBjb2RlYy5wYXlsb2FkX3R5cGUgPSBHZXRJbnRGaWVsZChqbmksIGpfY29kZWMs
IHBheWxvYWRfdHlwZV9pZCk7Ci0gICAgY29kZWMubWltZV90eXBlID0KLSAgICAgICAgSmF2YVRv
U3RkU3RyaW5nKGpuaSwgR2V0U3RyaW5nRmllbGQoam5pLCBqX2NvZGVjLCBtaW1lX3R5cGVfaWQp
KTsKLSAgICBjb2RlYy5jbG9ja19yYXRlID0gR2V0SW50RmllbGQoam5pLCBqX2NvZGVjLCBjbG9j
a19yYXRlX2lkKTsKLSAgICBjb2RlYy5jaGFubmVscyA9IEdldEludEZpZWxkKGpuaSwgal9jb2Rl
YywgY2hhbm5lbHNfaWQpOwotICAgIHBhcmFtZXRlcnMtPmNvZGVjcy5wdXNoX2JhY2soY29kZWMp
OwotICB9Ci19Ci0KLXN0YXRpYyBqb2JqZWN0IEpzZXBSdHBQYXJhbWV0ZXJzVG9KYXZhUnRwUGFy
YW1ldGVycygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCB3ZWJydGM6OlJ0cFBhcmFtZXRl
cnMmIHBhcmFtZXRlcnMpIHsKLSAgamNsYXNzIHBhcmFtZXRlcnNfY2xhc3MgPSBqbmktPkZpbmRD
bGFzcygib3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzIik7Ci0gIGptZXRob2RJRCBwYXJhbWV0ZXJz
X2N0b3IgPQotICAgICAgR2V0TWV0aG9kSUQoam5pLCBwYXJhbWV0ZXJzX2NsYXNzLCAiPGluaXQ+
IiwgIigpViIpOwotICBqb2JqZWN0IGpfcGFyYW1ldGVycyA9IGpuaS0+TmV3T2JqZWN0KHBhcmFt
ZXRlcnNfY2xhc3MsIHBhcmFtZXRlcnNfY3Rvcik7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8
ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLQotICAvLyBBZGQgZW5jb2RpbmdzLgotICBqY2xh
c3MgZW5jb2RpbmdfY2xhc3MgPSBqbmktPkZpbmRDbGFzcygib3JnL3dlYnJ0Yy9SdHBQYXJhbWV0
ZXJzJEVuY29kaW5nIik7Ci0gIGptZXRob2RJRCBlbmNvZGluZ19jdG9yID0gR2V0TWV0aG9kSUQo
am5pLCBlbmNvZGluZ19jbGFzcywgIjxpbml0PiIsICIoKVYiKTsKLSAgamZpZWxkSUQgZW5jb2Rp
bmdzX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBwYXJhbWV0ZXJzX2NsYXNzLCAiZW5jb2Rp
bmdzIiwgIkxqYXZhL3V0aWwvTGlua2VkTGlzdDsiKTsKLSAgam9iamVjdCBqX2VuY29kaW5ncyA9
IEdldE9iamVjdEZpZWxkKGpuaSwgal9wYXJhbWV0ZXJzLCBlbmNvZGluZ3NfaWQpOwotICBqbWV0
aG9kSUQgZW5jb2RpbmdzX2FkZCA9IEdldE1ldGhvZElEKGpuaSwgR2V0T2JqZWN0Q2xhc3Moam5p
LCBqX2VuY29kaW5ncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImFkZCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiKTsKLSAgamZpZWxkSUQgYWN0aXZlX2lkID0K
LSAgICAgIEdldEZpZWxkSUQoam5pLCBlbmNvZGluZ19jbGFzcywgImFjdGl2ZSIsICJaIik7Ci0g
IGpmaWVsZElEIGJpdHJhdGVfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGVuY29kaW5nX2Ns
YXNzLCAibWF4Qml0cmF0ZUJwcyIsICJMamF2YS9sYW5nL0ludGVnZXI7Iik7Ci0KLSAgamNsYXNz
IGludGVnZXJfY2xhc3MgPSBqbmktPkZpbmRDbGFzcygiamF2YS9sYW5nL0ludGVnZXIiKTsKLSAg
am1ldGhvZElEIGludGVnZXJfY3RvciA9IEdldE1ldGhvZElEKGpuaSwgaW50ZWdlcl9jbGFzcywg
Ijxpbml0PiIsICIoSSlWIik7Ci0KLSAgZm9yIChjb25zdCB3ZWJydGM6OlJ0cEVuY29kaW5nUGFy
YW1ldGVycyYgZW5jb2RpbmcgOiBwYXJhbWV0ZXJzLmVuY29kaW5ncykgewotICAgIGpvYmplY3Qg
al9lbmNvZGluZ19wYXJhbWV0ZXJzID0KLSAgICAgICAgam5pLT5OZXdPYmplY3QoZW5jb2Rpbmdf
Y2xhc3MsIGVuY29kaW5nX2N0b3IpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJv
ciBkdXJpbmcgTmV3T2JqZWN0IjsKLSAgICBqbmktPlNldEJvb2xlYW5GaWVsZChqX2VuY29kaW5n
X3BhcmFtZXRlcnMsIGFjdGl2ZV9pZCwgZW5jb2RpbmcuYWN0aXZlKTsKLSAgICBDSEVDS19FWENF
UFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIFNldEJvb2xlYW5GaWVsZCI7Ci0gICAgaWYgKGVu
Y29kaW5nLm1heF9iaXRyYXRlX2JwcyA+IDApIHsKLSAgICAgIGpvYmplY3Qgal9iaXRyYXRlX3Zh
bHVlID0KLSAgICAgICAgICBqbmktPk5ld09iamVjdChpbnRlZ2VyX2NsYXNzLCBpbnRlZ2VyX2N0
b3IsIGVuY29kaW5nLm1heF9iaXRyYXRlX2Jwcyk7Ci0gICAgICBDSEVDS19FWENFUFRJT04oam5p
KSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgICBqbmktPlNldE9iamVjdEZpZWxk
KGpfZW5jb2RpbmdfcGFyYW1ldGVycywgYml0cmF0ZV9pZCwgal9iaXRyYXRlX3ZhbHVlKTsKLSAg
ICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgU2V0T2JqZWN0RmllbGQi
OwotICAgIH0KLSAgICBqYm9vbGVhbiBhZGRlZCA9IGpuaS0+Q2FsbEJvb2xlYW5NZXRob2Qoal9l
bmNvZGluZ3MsIGVuY29kaW5nc19hZGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpfZW5jb2RpbmdfcGFyYW1ldGVycyk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsQm9vbGVhbk1ldGhvZCI7Ci0gICAgUlRDX0NIRUNL
KGFkZGVkKTsKLSAgfQotCi0gIC8vIEFkZCBjb2RlY3MuCi0gIGpjbGFzcyBjb2RlY19jbGFzcyA9
IGpuaS0+RmluZENsYXNzKCJvcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMkQ29kZWMiKTsKLSAgam1l
dGhvZElEIGNvZGVjX2N0b3IgPSBHZXRNZXRob2RJRChqbmksIGNvZGVjX2NsYXNzLCAiPGluaXQ+
IiwgIigpViIpOwotICBqZmllbGRJRCBjb2RlY3NfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmks
IHBhcmFtZXRlcnNfY2xhc3MsICJjb2RlY3MiLCAiTGphdmEvdXRpbC9MaW5rZWRMaXN0OyIpOwot
ICBqb2JqZWN0IGpfY29kZWNzID0gR2V0T2JqZWN0RmllbGQoam5pLCBqX3BhcmFtZXRlcnMsIGNv
ZGVjc19pZCk7Ci0gIGptZXRob2RJRCBjb2RlY3NfYWRkID0gR2V0TWV0aG9kSUQoam5pLCBHZXRP
YmplY3RDbGFzcyhqbmksIGpfY29kZWNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiYWRkIiwgIihMamF2YS9sYW5nL09iamVjdDspWiIpOwotICBqZmllbGRJRCBwYXls
b2FkX3R5cGVfaWQgPSBHZXRGaWVsZElEKGpuaSwgY29kZWNfY2xhc3MsICJwYXlsb2FkVHlwZSIs
ICJJIik7Ci0gIGpmaWVsZElEIG1pbWVfdHlwZV9pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwg
Y29kZWNfY2xhc3MsICJtaW1lVHlwZSIsICJMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgamZpZWxk
SUQgY2xvY2tfcmF0ZV9pZCA9IEdldEZpZWxkSUQoam5pLCBjb2RlY19jbGFzcywgImNsb2NrUmF0
ZSIsICJJIik7Ci0gIGpmaWVsZElEIGNoYW5uZWxzX2lkID0gR2V0RmllbGRJRChqbmksIGNvZGVj
X2NsYXNzLCAiY2hhbm5lbHMiLCAiSSIpOwotCi0gIGZvciAoY29uc3Qgd2VicnRjOjpSdHBDb2Rl
Y1BhcmFtZXRlcnMmIGNvZGVjIDogcGFyYW1ldGVycy5jb2RlY3MpIHsKLSAgICBqb2JqZWN0IGpf
Y29kZWMgPSBqbmktPk5ld09iamVjdChjb2RlY19jbGFzcywgY29kZWNfY3Rvcik7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotICAgIGpuaS0+
U2V0SW50RmllbGQoal9jb2RlYywgcGF5bG9hZF90eXBlX2lkLCBjb2RlYy5wYXlsb2FkX3R5cGUp
OwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgU2V0SW50RmllbGQi
OwotICAgIGpuaS0+U2V0T2JqZWN0RmllbGQoal9jb2RlYywgbWltZV90eXBlX2lkLAotICAgICAg
ICAgICAgICAgICAgICAgICAgSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5pLCBjb2RlYy5taW1l
X3R5cGUpKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIFNldE9i
amVjdEZpZWxkIjsKLSAgICBqbmktPlNldEludEZpZWxkKGpfY29kZWMsIGNsb2NrX3JhdGVfaWQs
IGNvZGVjLmNsb2NrX3JhdGUpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBk
dXJpbmcgU2V0SW50RmllbGQiOwotICAgIGpuaS0+U2V0SW50RmllbGQoal9jb2RlYywgY2hhbm5l
bHNfaWQsIGNvZGVjLmNoYW5uZWxzKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJy
b3IgZHVyaW5nIFNldEludEZpZWxkIjsKLSAgICBqYm9vbGVhbiBhZGRlZCA9IGpuaS0+Q2FsbEJv
b2xlYW5NZXRob2Qoal9jb2RlY3MsIGNvZGVjc19hZGQsIGpfY29kZWMpOwotICAgIENIRUNLX0VY
Q0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbEJvb2xlYW5NZXRob2QiOwotICAgIFJU
Q19DSEVDSyhhZGRlZCk7Ci0gIH0KLQotICByZXR1cm4gal9wYXJhbWV0ZXJzOwotfQotCi1KT1co
amJvb2xlYW4sIFJ0cFNlbmRlcl9uYXRpdmVTZXRQYXJhbWV0ZXJzKQotKEpOSUVudiogam5pLCBq
Y2xhc3MsIGpsb25nIGpfcnRwX3NlbmRlcl9wb2ludGVyLCBqb2JqZWN0IGpfcGFyYW1ldGVycykg
ewotICBpZiAoSXNOdWxsKGpuaSwgal9wYXJhbWV0ZXJzKSkgewotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotICB3ZWJydGM6OlJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgSmF2YVJ0cFBhcmFt
ZXRlcnNUb0pzZXBSdHBQYXJhbWV0ZXJzKGpuaSwgal9wYXJhbWV0ZXJzLCAmcGFyYW1ldGVycyk7
Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFJ0cFNlbmRlckludGVyZmFjZSo+KGpfcnRwX3Nl
bmRlcl9wb2ludGVyKQotICAgICAgLT5TZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotfQotCi1K
T1coam9iamVjdCwgUnRwU2VuZGVyX25hdGl2ZUdldFBhcmFtZXRlcnMpCi0oSk5JRW52KiBqbmks
IGpjbGFzcywgamxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIpIHsKLSAgd2VicnRjOjpSdHBQYXJh
bWV0ZXJzIHBhcmFtZXRlcnMgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxSdHBTZW5kZXJJbnRl
cmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgICAgICAtPkdldFBhcmFtZXRlcnMo
KTsKLSAgcmV0dXJuIEpzZXBSdHBQYXJhbWV0ZXJzVG9KYXZhUnRwUGFyYW1ldGVycyhqbmksIHBh
cmFtZXRlcnMpOwotfQotCi1KT1coanN0cmluZywgUnRwU2VuZGVyX25hdGl2ZUlkKSgKLSAgICBK
TklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3J0cF9zZW5kZXJfcG9pbnRlcikgewotICByZXR1
cm4gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoCi0gICAgICBqbmksIHJlaW50ZXJwcmV0X2Nhc3Q8
UnRwU2VuZGVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIpLT5pZCgpKTsKLX0KLQot
Sk9XKHZvaWQsIFJ0cFNlbmRlcl9mcmVlKShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3J0
cF9zZW5kZXJfcG9pbnRlcikgewotICByZWludGVycHJldF9jYXN0PFJ0cFNlbmRlckludGVyZmFj
ZSo+KGpfcnRwX3NlbmRlcl9wb2ludGVyKS0+UmVsZWFzZSgpOwotfQotCi1KT1coamxvbmcsIFJ0
cFJlY2VpdmVyX25hdGl2ZUdldFRyYWNrKShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpjbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpsb25nIGpfcnRwX3JlY2VpdmVyX3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqbG9uZyBqX3RyYWNrX3BvaW50ZXIpIHsKLSAgcmV0dXJuIGpsb25n
RnJvbVBvaW50ZXIoCi0gICAgICByZWludGVycHJldF9jYXN0PFJ0cFJlY2VpdmVySW50ZXJmYWNl
Kj4oal9ydHBfcmVjZWl2ZXJfcG9pbnRlcikKLSAgICAgICAgICAtPnRyYWNrKCkKLSAgICAgICAg
ICAucmVsZWFzZSgpKTsKLX0KLQotSk9XKGpib29sZWFuLCBSdHBSZWNlaXZlcl9uYXRpdmVTZXRQ
YXJhbWV0ZXJzKQotKEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfcnRwX3NlbmRlcl9wb2lu
dGVyLCBqb2JqZWN0IGpfcGFyYW1ldGVycykgewotICBpZiAoSXNOdWxsKGpuaSwgal9wYXJhbWV0
ZXJzKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICB3ZWJydGM6OlJ0cFBhcmFtZXRlcnMg
cGFyYW1ldGVyczsKLSAgSmF2YVJ0cFBhcmFtZXRlcnNUb0pzZXBSdHBQYXJhbWV0ZXJzKGpuaSwg
al9wYXJhbWV0ZXJzLCAmcGFyYW1ldGVycyk7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PFJ0
cFJlY2VpdmVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIpCi0gICAgICAtPlNldFBh
cmFtZXRlcnMocGFyYW1ldGVycyk7Ci19Ci0KLUpPVyhqb2JqZWN0LCBSdHBSZWNlaXZlcl9uYXRp
dmVHZXRQYXJhbWV0ZXJzKQotKEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfcnRwX3NlbmRl
cl9wb2ludGVyKSB7Ci0gIHdlYnJ0Yzo6UnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0KLSAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8UnRwUmVjZWl2ZXJJbnRlcmZhY2UqPihqX3J0cF9zZW5kZXJfcG9p
bnRlcikKLSAgICAgICAgICAtPkdldFBhcmFtZXRlcnMoKTsKLSAgcmV0dXJuIEpzZXBSdHBQYXJh
bWV0ZXJzVG9KYXZhUnRwUGFyYW1ldGVycyhqbmksIHBhcmFtZXRlcnMpOwotfQotCi1KT1coanN0
cmluZywgUnRwUmVjZWl2ZXJfbmF0aXZlSWQpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGps
b25nIGpfcnRwX3JlY2VpdmVyX3BvaW50ZXIpIHsKLSAgcmV0dXJuIEphdmFTdHJpbmdGcm9tU3Rk
U3RyaW5nKAotICAgICAgam5pLAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxSdHBSZWNlaXZlcklu
dGVyZmFjZSo+KGpfcnRwX3JlY2VpdmVyX3BvaW50ZXIpLT5pZCgpKTsKLX0KLQotSk9XKHZvaWQs
IFJ0cFJlY2VpdmVyX2ZyZWUpKEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpfcnRwX3JlY2Vp
dmVyX3BvaW50ZXIpIHsKLSAgcmVpbnRlcnByZXRfY2FzdDxSdHBSZWNlaXZlckludGVyZmFjZSo+
KGpfcnRwX3JlY2VpdmVyX3BvaW50ZXIpLT5SZWxlYXNlKCk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZSB3ZWJydGNfam5pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qbmkvc3VyZmFjZXRleHR1cmVoZWxwZXJfam5pLmNjCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2puaS9zdXJmYWNldGV4dHVyZWhlbHBlcl9qbmkuY2MJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2pu
aS9zdXJmYWNldGV4dHVyZWhlbHBlcl9qbmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MiArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQv
am5pL3N1cmZhY2V0ZXh0dXJlaGVscGVyX2puaS5oIgotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9h
bmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNl
L2JpbmQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvYmFzZS9sb2dnaW5nLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotcnRjOjpzY29w
ZWRfcmVmcHRyPFN1cmZhY2VUZXh0dXJlSGVscGVyPiBTdXJmYWNlVGV4dHVyZUhlbHBlcjo6Y3Jl
YXRlKAotICAgIEpOSUVudiogam5pLAotICAgIGNvbnN0IGNoYXIqIHRocmVhZF9uYW1lLAotICAg
IGpvYmplY3Qgal9lZ2xfY29udGV4dCkgewotICBqb2JqZWN0IGpfc3VyZmFjZV90ZXh0dXJlX2hl
bHBlciA9IGpuaS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZCgKLSAgICAgIEZpbmRDbGFzcyhqbmks
ICJvcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyIiksCi0gICAgICBHZXRTdGF0aWNNZXRo
b2RJRChqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVy
IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7TG9yZy93ZWJydGMvRWdsQmFzZSRDb250ZXh0Oyki
Ci0gICAgICAgICAgICAgICAgICAgICAgICAiTG9yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxw
ZXI7IiksCi0gICAgICBqbmktPk5ld1N0cmluZ1VURih0aHJlYWRfbmFtZSksIGpfZWdsX2NvbnRl
eHQpOwotICBDSEVDS19FWENFUFRJT04oam5pKQotICAgICAgPDwgImVycm9yIGR1cmluZyBpbml0
aWFsaXphdGlvbiBvZiBKYXZhIFN1cmZhY2VUZXh0dXJlSGVscGVyIjsKLSAgaWYgKElzTnVsbChq
bmksIGpfc3VyZmFjZV90ZXh0dXJlX2hlbHBlcikpCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIHJl
dHVybiBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PFN1cmZhY2VUZXh0dXJlSGVscGVyPigKLSAg
ICAgIGpuaSwgal9zdXJmYWNlX3RleHR1cmVfaGVscGVyKTsKLX0KLQotU3VyZmFjZVRleHR1cmVI
ZWxwZXI6OlN1cmZhY2VUZXh0dXJlSGVscGVyKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3Qgal9zdXJmYWNlX3RleHR1cmVfaGVs
cGVyKQotICAgIDogal9zdXJmYWNlX3RleHR1cmVfaGVscGVyXyhqbmksIGpfc3VyZmFjZV90ZXh0
dXJlX2hlbHBlciksCi0gICAgICBqX3JldHVybl90ZXh0dXJlX21ldGhvZF8oCi0gICAgICAgICAg
R2V0TWV0aG9kSUQoam5pLAotICAgICAgICAgICAgICAgICAgICAgIEZpbmRDbGFzcyhqbmksICJv
cmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyIiksCi0gICAgICAgICAgICAgICAgICAgICAg
InJldHVyblRleHR1cmVGcmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICAgIigpViIpKSB7Ci0g
IENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgaW5pdGlhbGl6YXRpb24gb2Yg
U3VyZmFjZVRleHR1cmVIZWxwZXIiOwotfQotCi1TdXJmYWNlVGV4dHVyZUhlbHBlcjo6flN1cmZh
Y2VUZXh0dXJlSGVscGVyKCkgewotICBMT0coTFNfSU5GTykgPDwgIlN1cmZhY2VUZXh0dXJlSGVs
cGVyIGR0b3IiOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgp
OwotICBqbmktPkNhbGxWb2lkTWV0aG9kKAotICAgICAgKmpfc3VyZmFjZV90ZXh0dXJlX2hlbHBl
cl8sCi0gICAgICBHZXRNZXRob2RJRChqbmksIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL1N1
cmZhY2VUZXh0dXJlSGVscGVyIiksCi0gICAgICAgICAgICAgICAgICAiZGlzcG9zZSIsICIoKVYi
KSk7Ci0KLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBTdXJmYWNlVGV4
dHVyZUhlbHBlci5kaXNwb3NlKCkiOwotfQotCi1qb2JqZWN0IFN1cmZhY2VUZXh0dXJlSGVscGVy
OjpHZXRKYXZhU3VyZmFjZVRleHR1cmVIZWxwZXIoKSBjb25zdCB7Ci0gIHJldHVybiAqal9zdXJm
YWNlX3RleHR1cmVfaGVscGVyXzsKLX0KLQotdm9pZCBTdXJmYWNlVGV4dHVyZUhlbHBlcjo6UmV0
dXJuVGV4dHVyZUZyYW1lKCkgY29uc3QgewotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRU
aHJlYWRJZk5lZWRlZCgpOwotICBqbmktPkNhbGxWb2lkTWV0aG9kKCpqX3N1cmZhY2VfdGV4dHVy
ZV9oZWxwZXJfLCBqX3JldHVybl90ZXh0dXJlX21ldGhvZF8pOwotCi0gIENIRUNLX0VYQ0VQVElP
TigKLSAgICAgIGpuaSkgPDwgImVycm9yIGR1cmluZyBTdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1
cm5UZXh0dXJlRnJhbWUiOwotfQotCi1ydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRlb0Zy
YW1lQnVmZmVyPgotU3VyZmFjZVRleHR1cmVIZWxwZXI6OkNyZWF0ZVRleHR1cmVGcmFtZShpbnQg
d2lkdGgsIGludCBoZWlnaHQsCi0gICAgY29uc3QgTmF0aXZlSGFuZGxlSW1wbCYgbmF0aXZlX2hh
bmRsZSkgewotICByZXR1cm4gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxBbmRyb2lkVGV4dHVy
ZUJ1ZmZlcj4oCi0gICAgICB3aWR0aCwgaGVpZ2h0LCBuYXRpdmVfaGFuZGxlLCAqal9zdXJmYWNl
X3RleHR1cmVfaGVscGVyXywKLSAgICAgIHJ0Yzo6QmluZCgmU3VyZmFjZVRleHR1cmVIZWxwZXI6
OlJldHVyblRleHR1cmVGcmFtZSwgdGhpcykpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
X2puaQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvam5pL3N1cmZhY2V0ZXh0dXJlaGVscGVyX2puaS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9z
dXJmYWNldGV4dHVyZWhlbHBlcl9qbmkuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3N1cmZhY2V0
ZXh0dXJlaGVscGVyX2puaS5oCShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfQVBJX0pBVkFfSk5JX1NVUkZBQ0VURVhUVVJF
SEVMUEVSX0pOSV9IXwotI2RlZmluZSBXRUJSVENfQVBJX0pBVkFfSk5JX1NVUkZBQ0VURVhUVVJF
SEVMUEVSX0pOSV9IXwotCi0jaW5jbHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYXBp
L2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lk
L2puaS9uYXRpdmVfaGFuZGxlX2ltcGwuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9yZWZjb3Vu
dC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3Njb3BlZF9yZWZfcHRyLmgiCi0jaW5jbHVkZSAi
d2VicnRjL2NvbW1vbl92aWRlby9pbmNsdWRlL3ZpZGVvX2ZyYW1lX2J1ZmZlci5oIgotCi1uYW1l
c3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIEhlbHBlciBjbGFzcyB0byBjcmVhdGUgYW5kIHN5bmNo
cm9uaXplIGFjY2VzcyB0byBhbiBBbmRyb2lkIFN1cmZhY2VUZXh0dXJlLgotLy8gSXQgaXMgdXNl
ZCBmb3IgY3JlYXRpbmcgd2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVycyBmcm9tIGEgU3VyZmFjZVRl
eHR1cmUgd2hlbgotLy8gdGhlIFN1cmZhY2VUZXh0dXJlIGhhcyBiZWVuIHVwZGF0ZWQuCi0vLyBX
aGVuIHRoZSBWaWRlb0ZyYW1lQnVmZmVyIGlzIHJlbGVhc2VkLCB0aGlzIGNsYXNzIHJldHVybnMg
dGhlIGJ1ZmZlciB0byB0aGUKLS8vIGphdmEgU3VyZmFjZVRleHR1cmVIZWxwZXIgc28gaXQgY2Fu
IGJlIHVwZGF0ZWQgc2FmZWx5LiBUaGUgVmlkZW9GcmFtZUJ1ZmZlcgotLy8gY2FuIGJlIHJlbGVh
c2VkIG9uIGFuIGFyYml0cmFyeSB0aHJlYWQuCi0vLyBTdXJmYWNlVGV4dHVyZUhlbHBlciBpcyBy
ZWZlcmVuY2UgY291bnRlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBpcyBub3QKLS8vIGRlc3Ryb3ll
ZCB3aGlsZSBhIFZpZGVvRnJhbWVCdWZmZXIgaXMgaW4gdXNlLgotLy8gVGhpcyBjbGFzcyBpcyB0
aGUgQysrIGNvdW50ZXJwYXJ0IG9mIHRoZSBqYXZhIGNsYXNzIFN1cmZhY2VUZXh0dXJlSGVscGVy
LgotLy8gSXQgb3ducyB0aGUgY29ycmVzcG9uZGluZyBqYXZhIG9iamVjdCwgYW5kIGNhbGxzIHRo
ZSBqYXZhIGRpc3Bvc2UKLS8vIG1ldGhvZCB3aGVuIGRlc3Ryb3llZC4KLS8vIFVzYWdlOgotLy8g
MS4gQ3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MuCi0vLyAyLiBHZXQgdGhlIEphdmEg
U3VyZmFjZVRleHR1cmVIZWxwZXIgd2l0aCBHZXRKYXZhU3VyZmFjZVRleHR1cmVIZWxwZXIoKS4K
LS8vIDMuIFJlZ2lzdGVyIGEgbGlzdGVuZXIgdG8gdGhlIEphdmEgU3VyZmFjZUxpc3RlbmVyIGFu
ZCBzdGFydCBwcm9kdWNpbmcKLS8vIG5ldyBidWZmZXJzLgotLy8gNC4gQ2FsbCBDcmVhdGVUZXh0
dXJlRnJhbWUgdG8gd3JhcCB0aGUgSmF2YSB0ZXh0dXJlIGluIGEgVmlkZW9GcmFtZUJ1ZmZlci4K
LWNsYXNzIFN1cmZhY2VUZXh0dXJlSGVscGVyIDogcHVibGljIHJ0Yzo6UmVmQ291bnRJbnRlcmZh
Y2UgewotIHB1YmxpYzoKLSAgLy8gTWlnaHQgcmV0dXJuIG51bGwgaWYgY3JlYXRpbmcgdGhlIEph
dmEgU3VyZmFjZVRleHR1cmVIZWxwZXIgZmFpbHMuCi0gIHN0YXRpYyBydGM6OnNjb3BlZF9yZWZw
dHI8U3VyZmFjZVRleHR1cmVIZWxwZXI+IGNyZWF0ZSgKLSAgICAgIEpOSUVudiogam5pLCBjb25z
dCBjaGFyKiB0aHJlYWRfbmFtZSwgam9iamVjdCBqX2VnbF9jb250ZXh0KTsKLQotICBqb2JqZWN0
IEdldEphdmFTdXJmYWNlVGV4dHVyZUhlbHBlcigpIGNvbnN0OwotCi0gIHJ0Yzo6c2NvcGVkX3Jl
ZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IENyZWF0ZVRleHR1cmVGcmFtZSgKLSAgICAg
IGludCB3aWR0aCwKLSAgICAgIGludCBoZWlnaHQsCi0gICAgICBjb25zdCBOYXRpdmVIYW5kbGVJ
bXBsJiBuYXRpdmVfaGFuZGxlKTsKLQotICAvLyBNYXkgYmUgY2FsbGVkIG9uIGFyYml0cmFyeSB0
aHJlYWQuCi0gIHZvaWQgUmV0dXJuVGV4dHVyZUZyYW1lKCkgY29uc3Q7Ci0KLSBwcm90ZWN0ZWQ6
Ci0gIH5TdXJmYWNlVGV4dHVyZUhlbHBlcigpOwotICBTdXJmYWNlVGV4dHVyZUhlbHBlcihKTklF
bnYqIGpuaSwgam9iamVjdCBqX3N1cmZhY2VfdGV4dHVyZV9oZWxwZXIpOwotCi0gcHJpdmF0ZToK
LSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpvYmplY3Q+IGpfc3VyZmFjZV90ZXh0dXJlX2hlbHBl
cl87Ci0gIGNvbnN0IGptZXRob2RJRCBqX3JldHVybl90ZXh0dXJlX21ldGhvZF87Ci19OwotCi19
ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQotCi0jZW5kaWYgIC8vIFdFQlJUQ19BUElfSkFWQV9K
TklfU1VSRkFDRVRFWFRVUkVIRUxQRVJfSk5JX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0F1
ZGlvU291cmNlLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1NvdXJj
ZS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0F1ZGlvU291cmNl
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBB
dWRpb1NvdXJjZUludGVyZmFjZS4gIFVzZWQgYXMgdGhlIHNvdXJjZSBmb3Igb25lIG9yCi0gKiBt
b3JlIHtAY29kZSBBdWRpb1RyYWNrfSBvYmplY3RzLgotICovCi1wdWJsaWMgY2xhc3MgQXVkaW9T
b3VyY2UgZXh0ZW5kcyBNZWRpYVNvdXJjZSB7Ci0gIHB1YmxpYyBBdWRpb1NvdXJjZShsb25nIG5h
dGl2ZVNvdXJjZSkgewotICAgIHN1cGVyKG5hdGl2ZVNvdXJjZSk7Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQXVkaW9UcmFjay5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvQXVkaW9UcmFjay5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0F1ZGlvVHJhY2suamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBm
b3IgYSBDKysgQXVkaW9UcmFja0ludGVyZmFjZSAqLwotcHVibGljIGNsYXNzIEF1ZGlvVHJhY2sg
ZXh0ZW5kcyBNZWRpYVN0cmVhbVRyYWNrIHsKLSAgcHVibGljIEF1ZGlvVHJhY2sobG9uZyBuYXRp
dmVUcmFjaykgewotICAgIHN1cGVyKG5hdGl2ZVRyYWNrKTsKLSAgfQotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luay5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbGxTZXNzaW9uRmlsZVJv
dGF0aW5nTG9nU2luay5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1wdWJsaWMgY2xhc3MgQ2FsbFNl
c3Npb25GaWxlUm90YXRpbmdMb2dTaW5rIHsKLSAgc3RhdGljIHsKLSAgICBTeXN0ZW0ubG9hZExp
YnJhcnkoImppbmdsZV9wZWVyY29ubmVjdGlvbl9zbyIpOwotICB9Ci0KLSAgcHJpdmF0ZSBsb25n
IG5hdGl2ZVNpbms7Ci0KLSAgcHVibGljIHN0YXRpYyBieXRlW10gZ2V0TG9nRGF0YShTdHJpbmcg
ZGlyUGF0aCkgewotICAgIHJldHVybiBuYXRpdmVHZXRMb2dEYXRhKGRpclBhdGgpOwotICB9Ci0K
LSAgcHVibGljIENhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luaygKLSAgICAgIFN0cmluZyBk
aXJQYXRoLCBpbnQgbWF4RmlsZVNpemUsIExvZ2dpbmcuU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKLSAg
ICBuYXRpdmVTaW5rID0gbmF0aXZlQWRkU2luayhkaXJQYXRoLCBtYXhGaWxlU2l6ZSwgc2V2ZXJp
dHkub3JkaW5hbCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaWYg
KG5hdGl2ZVNpbmsgIT0gMCkgewotICAgICAgbmF0aXZlRGVsZXRlU2luayhuYXRpdmVTaW5rKTsK
LSAgICAgIG5hdGl2ZVNpbmsgPSAwOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBsb25nIG5hdGl2ZUFkZFNpbmsoU3RyaW5nIGRpclBhdGgsIGludCBtYXhGaWxlU2l6ZSwg
aW50IHNldmVyaXR5KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlRGVsZXRl
U2luayhsb25nIG5hdGl2ZVNpbmspOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYnl0ZVtdIG5h
dGl2ZUdldExvZ0RhdGEoU3RyaW5nIGRpclBhdGgpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9DYW1lcmExQ2FwdHVyZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0Nh
bWVyYTFDYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0NhbWVyYTFDYXB0dXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0
Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLQotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5Db250ZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBj
bGFzcyBDYW1lcmExQ2FwdHVyZXIgZXh0ZW5kcyBDYW1lcmFDYXB0dXJlciB7Ci0gIHByaXZhdGUg
ZmluYWwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlOwotCi0gIHB1YmxpYyBDYW1lcmExQ2FwdHVy
ZXIoCi0gICAgICBTdHJpbmcgY2FtZXJhTmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNI
YW5kbGVyLCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICBzdXBlcihjYW1lcmFOYW1l
LCBldmVudHNIYW5kbGVyLCBuZXcgQ2FtZXJhMUVudW1lcmF0b3IoY2FwdHVyZVRvVGV4dHVyZSkp
OwotCi0gICAgdGhpcy5jYXB0dXJlVG9UZXh0dXJlID0gY2FwdHVyZVRvVGV4dHVyZTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDYW1lcmFTZXNzaW9uKENhbWVy
YVNlc3Npb24uQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNyZWF0ZVNlc3Npb25DYWxsYmFjaywKLSAg
ICAgIENhbWVyYVNlc3Npb24uRXZlbnRzIGV2ZW50cywgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRl
eHQsCi0gICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3Ry
aW5nIGNhbWVyYU5hbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIGludCBmcmFtZXJh
dGUpIHsKLSAgICBDYW1lcmExU2Vzc2lvbi5jcmVhdGUoY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLCBl
dmVudHMsIGNhcHR1cmVUb1RleHR1cmUsIGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgICAgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIsIENhbWVyYTFFbnVtZXJhdG9yLmdldENhbWVyYUluZGV4KGNhbWVy
YU5hbWUpLCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICBmcmFtZXJhdGUpOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFFbnVtZXJhdG9yLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExRW51bWVyYXRvci5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFFbnVtZXJhdG9yLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBqYXZhLnV0aWwu
QXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuQ2Ft
ZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci0KLUBTdXBwcmVzc1dhcm5pbmdz
KCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMUVudW1lcmF0b3IgaW1wbGVtZW50
cyBDYW1lcmFFbnVtZXJhdG9yIHsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9
ICJDYW1lcmExRW51bWVyYXRvciI7Ci0gIC8vIEVhY2ggZW50cnkgY29udGFpbnMgdGhlIHN1cHBv
cnRlZCBmb3JtYXRzIGZvciBjb3JyZXNwb25kaW5nIGNhbWVyYSBpbmRleC4gVGhlIGZvcm1hdHMg
Zm9yIGFsbAotICAvLyBjYW1lcmFzIGFyZSBlbnVtZXJhdGVkIG9uIHRoZSBmaXJzdCBjYWxsIHRv
IGdldFN1cHBvcnRlZEZvcm1hdHMoKSwgYW5kIGNhY2hlZCBmb3IgZnV0dXJlCi0gIC8vIHJlZmVy
ZW5jZS4KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxMaXN0PENhcHR1cmVGb3JtYXQ+PiBjYWNoZWRT
dXBwb3J0ZWRGb3JtYXRzOwotCi0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0
dXJlOwotCi0gIHB1YmxpYyBDYW1lcmExRW51bWVyYXRvcigpIHsKLSAgICB0aGlzKHRydWUgLyog
Y2FwdHVyZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBwdWJsaWMgQ2FtZXJhMUVudW1lcmF0b3Io
Ym9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgdGhpcy5jYXB0dXJlVG9UZXh0dXJlID0g
Y2FwdHVyZVRvVGV4dHVyZTsKLSAgfQotCi0gIC8vIFJldHVybnMgZGV2aWNlIG5hbWVzIHRoYXQg
Y2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbmV3IFZpZGVvQ2FwdHVyZXJBbmRyb2lkLgotICBAT3Zl
cnJpZGUKLSAgcHVibGljIFN0cmluZ1tdIGdldERldmljZU5hbWVzKCkgewotICAgIEFycmF5TGlz
dDxTdHJpbmc+IG5hbWVzTGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCk7ICsr
aSkgewotICAgICAgU3RyaW5nIG5hbWUgPSBnZXREZXZpY2VOYW1lKGkpOwotICAgICAgaWYgKG5h
bWUgIT0gbnVsbCkgewotICAgICAgICBuYW1lc0xpc3QuYWRkKG5hbWUpOwotICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiSW5kZXg6ICIgKyBpICsgIi4gIiArIG5hbWUpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkluZGV4OiAiICsgaSArICIuIEZhaWxlZCB0byBxdWVy
eSBjYW1lcmEgbmFtZS4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgU3RyaW5nW10gbmFtZXNBcnJh
eSA9IG5ldyBTdHJpbmdbbmFtZXNMaXN0LnNpemUoKV07Ci0gICAgcmV0dXJuIG5hbWVzTGlzdC50
b0FycmF5KG5hbWVzQXJyYXkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFu
IGlzRnJvbnRGYWNpbmcoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYS5DYW1lcmFJbmZvIGluZm8gPSBnZXRDYW1lcmFJbmZvKGdldENhbWVyYUluZGV4KGRl
dmljZU5hbWUpKTsKLSAgICByZXR1cm4gaW5mbyAhPSBudWxsICYmIGluZm8uZmFjaW5nID09IGFu
ZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19GUk9OVDsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc0JhY2tGYWNpbmcoU3RyaW5nIGRl
dmljZU5hbWUpIHsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8g
PSBnZXRDYW1lcmFJbmZvKGdldENhbWVyYUluZGV4KGRldmljZU5hbWUpKTsKLSAgICByZXR1cm4g
aW5mbyAhPSBudWxsICYmIGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNh
bWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19CQUNLOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBMaXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoU3RyaW5nIGRldmljZU5h
bWUpIHsKLSAgICByZXR1cm4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhnZXRDYW1lcmFJbmRleChkZXZp
Y2VOYW1lKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVy
ZXIgY3JlYXRlQ2FwdHVyZXIoCi0gICAgICBTdHJpbmcgZGV2aWNlTmFtZSwgQ2FtZXJhVmlkZW9D
YXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICByZXR1cm4g
bmV3IENhbWVyYTFDYXB0dXJlcihkZXZpY2VOYW1lLCBldmVudHNIYW5kbGVyLCBjYXB0dXJlVG9U
ZXh0dXJlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LkNhbWVyYUluZm8gZ2V0Q2FtZXJhSW5mbyhpbnQgaW5kZXgpIHsKLSAgICBhbmRyb2lkLmhhcmR3
YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8gPSBuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
Q2FtZXJhSW5mbygpOwotICAgIHRyeSB7Ci0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5n
ZXRDYW1lcmFJbmZvKGluZGV4LCBpbmZvKTsKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewot
ICAgICAgTG9nZ2luZy5lKFRBRywgImdldENhbWVyYUluZm8gZmFpbGVkIG9uIGluZGV4ICIgKyBp
bmRleCwgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIGluZm87Ci0g
IH0KLQotICBzdGF0aWMgc3luY2hyb25pemVkIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9y
dGVkRm9ybWF0cyhpbnQgY2FtZXJhSWQpIHsKLSAgICBpZiAoY2FjaGVkU3VwcG9ydGVkRm9ybWF0
cyA9PSBudWxsKSB7Ci0gICAgICBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzID0gbmV3IEFycmF5TGlz
dDxMaXN0PENhcHR1cmVGb3JtYXQ+PigpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVyYXMoKTsgKytpKSB7Ci0gICAgICAg
IGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMuYWRkKGVudW1lcmF0ZUZvcm1hdHMoaSkpOwotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5nZXQoY2FtZXJhSWQp
OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxDYXB0dXJlRm9ybWF0PiBlbnVtZXJhdGVG
b3JtYXRzKGludCBjYW1lcmFJZCkgewotICAgIExvZ2dpbmcuZChUQUcsICJHZXQgc3VwcG9ydGVk
IGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQgKyAiLiIpOwotICAgIGZpbmFs
IGxvbmcgc3RhcnRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICBm
aW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAg
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhID0gbnVsbDsKLSAgICB0cnkgewotICAgICAg
TG9nZ2luZy5kKFRBRywgIk9wZW5pbmcgY2FtZXJhIHdpdGggaW5kZXggIiArIGNhbWVyYUlkKTsK
LSAgICAgIGNhbWVyYSA9IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oY2FtZXJhSWQpOwot
ICAgICAgcGFyYW1ldGVycyA9IGNhbWVyYS5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgfSBjYXRjaCAo
UnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiT3BlbiBjYW1lcmEg
ZmFpbGVkIG9uIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQsIGUpOwotICAgICAgcmV0dXJuIG5l
dyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4oKTsKLSAgICB9IGZpbmFsbHkgewotICAgICAgaWYg
KGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0PiBmb3JtYXRMaXN0ID0gbmV3IEFy
cmF5TGlzdDxDYXB0dXJlRm9ybWF0PigpOwotICAgIHRyeSB7Ci0gICAgICBpbnQgbWluRnBzID0g
MDsKLSAgICAgIGludCBtYXhGcHMgPSAwOwotICAgICAgZmluYWwgTGlzdDxpbnRbXT4gbGlzdEZw
c1JhbmdlID0gcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3RnBzUmFuZ2UoKTsKLSAgICAg
IGlmIChsaXN0RnBzUmFuZ2UgIT0gbnVsbCkgewotICAgICAgICAvLyBnZXRTdXBwb3J0ZWRQcmV2
aWV3RnBzUmFuZ2UoKSByZXR1cm5zIGEgc29ydGVkIGxpc3QuIFRha2UgdGhlIGZwcyByYW5nZQot
ICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBoaWdoZXN0IGZwcy4KLSAgICAgICAgZmlu
YWwgaW50W10gcmFuZ2UgPSBsaXN0RnBzUmFuZ2UuZ2V0KGxpc3RGcHNSYW5nZS5zaXplKCkgLSAx
KTsKLSAgICAgICAgbWluRnBzID0gcmFuZ2VbYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1l
dGVycy5QUkVWSUVXX0ZQU19NSU5fSU5ERVhdOwotICAgICAgICBtYXhGcHMgPSByYW5nZVthbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLlBSRVZJRVdfRlBTX01BWF9JTkRFWF07Ci0g
ICAgICB9Ci0gICAgICBmb3IgKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlNpemUgc2l6ZSA6IHBh
cmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld1NpemVzKCkpIHsKLSAgICAgICAgZm9ybWF0TGlz
dC5hZGQobmV3IENhcHR1cmVGb3JtYXQoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIG1pbkZwcywg
bWF4RnBzKSk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIExv
Z2dpbmcuZShUQUcsICJnZXRTdXBwb3J0ZWRGb3JtYXRzKCkgZmFpbGVkIG9uIGNhbWVyYSBpbmRl
eCAiICsgY2FtZXJhSWQsIGUpOwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgZW5kVGltZU1zID0g
U3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkdldCBz
dXBwb3J0ZWQgZm9ybWF0cyBmb3IgY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIgZG9uZS4i
Ci0gICAgICAgICAgICArICIgVGltZSBzcGVudDogIiArIChlbmRUaW1lTXMgLSBzdGFydFRpbWVN
cykgKyAiIG1zLiIpOwotICAgIHJldHVybiBmb3JtYXRMaXN0OwotICB9Ci0KLSAgLy8gQ29udmVy
dCBmcm9tIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlNpemUgdG8gU2l6ZS4KLSAgc3RhdGljIExp
c3Q8U2l6ZT4gY29udmVydFNpemVzKExpc3Q8YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuU2l6ZT4g
Y2FtZXJhU2l6ZXMpIHsKLSAgICBmaW5hbCBMaXN0PFNpemU+IHNpemVzID0gbmV3IEFycmF5TGlz
dDxTaXplPigpOwotICAgIGZvciAoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuU2l6ZSBzaXplIDog
Y2FtZXJhU2l6ZXMpIHsKLSAgICAgIHNpemVzLmFkZChuZXcgU2l6ZShzaXplLndpZHRoLCBzaXpl
LmhlaWdodCkpOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZXM7Ci0gIH0KLQotICAvLyBDb252ZXJ0
IGZyb20gaW50WzJdIHRvIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UuCi0gIHN0YXRpYyBM
aXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IGNvbnZlcnRGcmFtZXJhdGVzKExpc3Q8
aW50W10+IGFycmF5UmFuZ2VzKSB7Ci0gICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1l
cmF0ZVJhbmdlPiByYW5nZXMgPSBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRl
UmFuZ2U+KCk7Ci0gICAgZm9yIChpbnRbXSByYW5nZSA6IGFycmF5UmFuZ2VzKSB7Ci0gICAgICBy
YW5nZXMuYWRkKG5ldyBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlKAotICAgICAgICAgIHJh
bmdlW2FuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMuUFJFVklFV19GUFNfTUlOX0lO
REVYXSwKLSAgICAgICAgICByYW5nZVthbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJz
LlBSRVZJRVdfRlBTX01BWF9JTkRFWF0pKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJhbmdlczsKLSAg
fQotCi0gIC8vIFJldHVybnMgdGhlIGNhbWVyYSBpbmRleCBmb3IgY2FtZXJhIHdpdGggbmFtZSB8
ZGV2aWNlTmFtZXwsIG9yIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KLSAgLy8gaWYg
bm8gc3VjaCBjYW1lcmEgY2FuIGJlIGZvdW5kLgotICBzdGF0aWMgaW50IGdldENhbWVyYUluZGV4
KFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImdldENhbWVyYUluZGV4
OiAiICsgZGV2aWNlTmFtZSk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmRyb2lkLmhhcmR3
YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVyYXMoKTsgKytpKSB7Ci0gICAgICBpZiAoZGV2aWNl
TmFtZS5lcXVhbHMoZ2V0RGV2aWNlTmFtZShpKSkpIHsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAg
ICB9Ci0gICAgfQotICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vIHN1
Y2ggY2FtZXJhOiAiICsgZGV2aWNlTmFtZSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBuYW1l
IG9mIHRoZSBjYW1lcmEgd2l0aCBjYW1lcmEgaW5kZXguIFJldHVybnMgbnVsbCBpZiB0aGUKLSAg
Ly8gY2FtZXJhIGNhbiBub3QgYmUgdXNlZC4KLSAgc3RhdGljIFN0cmluZyBnZXREZXZpY2VOYW1l
KGludCBpbmRleCkgewotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5m
byA9IGdldENhbWVyYUluZm8oaW5kZXgpOwotICAgIGlmIChpbmZvID09IG51bGwpIHsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0KLQotICAgIFN0cmluZyBmYWNpbmcgPQotICAgICAgICAoaW5m
by5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFD
SU5HX0ZST05UKSA/ICJmcm9udCIgOiAiYmFjayI7Ci0gICAgcmV0dXJuICJDYW1lcmEgIiArIGlu
ZGV4ICsgIiwgRmFjaW5nICIgKyBmYWNpbmcgKyAiLCBPcmllbnRhdGlvbiAiICsgaW5mby5vcmll
bnRhdGlvbjsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExU2Vzc2lvbi5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMVNlc3Npb24uamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExU2Vzc2lvbi5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMzQ0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1w
b3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwot
aW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dN
YW5hZ2VyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0
ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3Vy
cmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9p
ZC5DYXB0dXJlRm9ybWF0OwotaW1wb3J0IG9yZy53ZWJydGMuTWV0cmljcy5IaXN0b2dyYW07Ci0K
LUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMVNl
c3Npb24gaW1wbGVtZW50cyBDYW1lcmFTZXNzaW9uIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFRBRyA9ICJDYW1lcmExU2Vzc2lvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBOVU1CRVJfT0ZfQ0FQVFVSRV9CVUZGRVJTID0gMzsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBIaXN0b2dyYW0gY2FtZXJhMVN0YXJ0VGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3Jh
bS5jcmVhdGVDb3VudHMoIldlYlJUQy5BbmRyb2lkLkNhbWVyYTEuU3RhcnRUaW1lTXMiLCAxLCAx
MDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMVN0b3BU
aW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFu
ZHJvaWQuQ2FtZXJhMS5TdG9wVGltZU1zIiwgMSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTFSZXNvbHV0aW9uSGlzdG9ncmFtID0gSGlzdG9ncmFt
LmNyZWF0ZUVudW1lcmF0aW9uKAotICAgICAgIldlYlJUQy5BbmRyb2lkLkNhbWVyYTEuUmVzb2x1
dGlvbiIsIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DT01NT05fUkVTT0xVVElPTlMuc2l6ZSgp
KTsKLQotICBwcml2YXRlIHN0YXRpYyBlbnVtIFNlc3Npb25TdGF0ZSB7IFJVTk5JTkcsIFNUT1BQ
RUQgfQotCi0gIHByaXZhdGUgZmluYWwgSGFuZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVyOwotICBw
cml2YXRlIGZpbmFsIEV2ZW50cyBldmVudHM7Ci0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjYXB0
dXJlVG9UZXh0dXJlOwotICBwcml2YXRlIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0
OwotICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVs
cGVyOwotICBwcml2YXRlIGZpbmFsIGludCBjYW1lcmFJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQg
d2lkdGg7Ci0gIHByaXZhdGUgZmluYWwgaW50IGhlaWdodDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQg
ZnJhbWVyYXRlOwotICBwcml2YXRlIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVy
YTsKLSAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGlu
Zm87Ci0gIHByaXZhdGUgZmluYWwgQ2FwdHVyZUZvcm1hdCBjYXB0dXJlRm9ybWF0OwotICAvLyBV
c2VkIG9ubHkgZm9yIHN0YXRzLiBPbmx5IHVzZWQgb24gdGhlIGNhbWVyYSB0aHJlYWQuCi0gIHBy
aXZhdGUgZmluYWwgbG9uZyBjb25zdHJ1Y3Rpb25UaW1lTnM7IC8vIENvbnN0cnVjdGlvbiB0aW1l
IG9mIHRoaXMgY2xhc3MuCi0KLSAgcHJpdmF0ZSBTZXNzaW9uU3RhdGUgc3RhdGU7Ci0gIHByaXZh
dGUgYm9vbGVhbiBmaXJzdEZyYW1lUmVwb3J0ZWQgPSBmYWxzZTsKLQotICBwdWJsaWMgc3RhdGlj
IHZvaWQgY3JlYXRlKGZpbmFsIENyZWF0ZVNlc3Npb25DYWxsYmFjayBjYWxsYmFjaywgZmluYWwg
RXZlbnRzIGV2ZW50cywKLSAgICAgIGZpbmFsIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSwgZmlu
YWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBmaW5hbCBTdXJmYWNlVGV4dHVy
ZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgZmluYWwgaW50IGNhbWVyYUlkLCBmaW5hbCBp
bnQgd2lkdGgsCi0gICAgICBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7
Ci0gICAgZmluYWwgbG9uZyBjb25zdHJ1Y3Rpb25UaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiT3BlbiBjYW1lcmEgIiArIGNhbWVyYUlkKTsKLSAgICBldmVu
dHMub25DYW1lcmFPcGVuaW5nKCk7Ci0KLSAgICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YSBjYW1lcmE7Ci0gICAgdHJ5IHsKLSAgICAgIGNhbWVyYSA9IGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLm9wZW4oY2FtZXJhSWQpOwotICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewot
ICAgICAgY2FsbGJhY2sub25GYWlsdXJlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICB0cnkgewotICAgICAgY2FtZXJhLnNldFByZXZpZXdUZXh0dXJlKHN1cmZh
Y2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIH0gY2F0Y2ggKElPRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgICBjYWxsYmFjay5vbkZh
aWx1cmUoZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFs
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IG5ldyBhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvKCk7Ci0gICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
Z2V0Q2FtZXJhSW5mbyhjYW1lcmFJZCwgaW5mbyk7Ci0KLSAgICBmaW5hbCBhbmRyb2lkLmhhcmR3
YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBjYW1lcmEuZ2V0UGFyYW1ldGVycygp
OwotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdCA9Ci0gICAgICAgIGZpbmRD
bG9zZXN0Q2FwdHVyZUZvcm1hdChwYXJhbWV0ZXJzLCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUp
OwotICAgIGZpbmFsIFNpemUgcGljdHVyZVNpemUgPSBmaW5kQ2xvc2VzdFBpY3R1cmVTaXplKHBh
cmFtZXRlcnMsIHdpZHRoLCBoZWlnaHQpOwotCi0gICAgdXBkYXRlQ2FtZXJhUGFyYW1ldGVycyhj
YW1lcmEsIHBhcmFtZXRlcnMsIGNhcHR1cmVGb3JtYXQsIHBpY3R1cmVTaXplLCBjYXB0dXJlVG9U
ZXh0dXJlKTsKLQotICAgIC8vIEluaXRpYWxpemUgdGhlIGNhcHR1cmUgYnVmZmVycy4KLSAgICBp
ZiAoIWNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICAgIGZpbmFsIGludCBmcmFtZVNpemUgPSBjYXB0
dXJlRm9ybWF0LmZyYW1lU2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJf
T0ZfQ0FQVFVSRV9CVUZGRVJTOyArK2kpIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBidWZm
ZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGZyYW1lU2l6ZSk7Ci0gICAgICAgIGNhbWVy
YS5hZGRDYWxsYmFja0J1ZmZlcihidWZmZXIuYXJyYXkoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gQ2FsY3VsYXRlIG9yaWVudGF0aW9uIG1hbnVhbGx5IGFuZCBzZW5kIGl0IGFzIENWTyBp
bnN0ZWQuCi0gICAgY2FtZXJhLnNldERpc3BsYXlPcmllbnRhdGlvbigwIC8qIGRlZ3JlZXMgKi8p
OwotCi0gICAgY2FsbGJhY2sub25Eb25lKAotICAgICAgICBuZXcgQ2FtZXJhMVNlc3Npb24oZXZl
bnRzLCBjYXB0dXJlVG9UZXh0dXJlLCBhcHBsaWNhdGlvbkNvbnRleHQsIHN1cmZhY2VUZXh0dXJl
SGVscGVyLAotICAgICAgICAgICAgY2FtZXJhSWQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSwg
Y2FtZXJhLCBpbmZvLCBjYXB0dXJlRm9ybWF0LCBjb25zdHJ1Y3Rpb25UaW1lTnMpKTsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIHZvaWQgdXBkYXRlQ2FtZXJhUGFyYW1ldGVycyhhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYSBjYW1lcmEsCi0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJh
bWV0ZXJzIHBhcmFtZXRlcnMsIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdCwgU2l6ZSBwaWN0
dXJlU2l6ZSwKLSAgICAgIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSkgewotICAgIGZpbmFsIExp
c3Q8U3RyaW5nPiBmb2N1c01vZGVzID0gcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRGb2N1c01vZGVz
KCk7Ci0KLSAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdGcHNSYW5nZShjYXB0dXJlRm9ybWF0LmZy
YW1lcmF0ZS5taW4sIGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1heCk7Ci0gICAgcGFyYW1ldGVy
cy5zZXRQcmV2aWV3U2l6ZShjYXB0dXJlRm9ybWF0LndpZHRoLCBjYXB0dXJlRm9ybWF0LmhlaWdo
dCk7Ci0gICAgcGFyYW1ldGVycy5zZXRQaWN0dXJlU2l6ZShwaWN0dXJlU2l6ZS53aWR0aCwgcGlj
dHVyZVNpemUuaGVpZ2h0KTsKLSAgICBpZiAoIWNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICAgIHBh
cmFtZXRlcnMuc2V0UHJldmlld0Zvcm1hdChjYXB0dXJlRm9ybWF0LmltYWdlRm9ybWF0KTsKLSAg
ICB9Ci0KLSAgICBpZiAocGFyYW1ldGVycy5pc1ZpZGVvU3RhYmlsaXphdGlvblN1cHBvcnRlZCgp
KSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldFZpZGVvU3RhYmlsaXphdGlvbih0cnVlKTsKLSAgICB9
Ci0gICAgaWYgKGZvY3VzTW9kZXMuY29udGFpbnMoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFy
YW1ldGVycy5GT0NVU19NT0RFX0NPTlRJTlVPVVNfVklERU8pKSB7Ci0gICAgICBwYXJhbWV0ZXJz
LnNldEZvY3VzTW9kZShhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01P
REVfQ09OVElOVU9VU19WSURFTyk7Ci0gICAgfQotICAgIGNhbWVyYS5zZXRQYXJhbWV0ZXJzKHBh
cmFtZXRlcnMpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgQ2FwdHVyZUZvcm1hdCBmaW5kQ2xv
c2VzdENhcHR1cmVGb3JtYXQoCi0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0
ZXJzIHBhcmFtZXRlcnMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewot
ICAgIC8vIEZpbmQgY2xvc2VzdCBzdXBwb3J0ZWQgZm9ybWF0IGZvciB8d2lkdGh8IHggfGhlaWdo
dHwgQCB8ZnJhbWVyYXRlfC4KLSAgICBmaW5hbCBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRl
UmFuZ2U+IHN1cHBvcnRlZEZyYW1lcmF0ZXMgPQotICAgICAgICBDYW1lcmExRW51bWVyYXRvci5j
b252ZXJ0RnJhbWVyYXRlcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZFByZXZpZXdGcHNSYW5nZSgp
KTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIGZwcyByYW5nZXM6ICIgKyBzdXBwb3J0
ZWRGcmFtZXJhdGVzKTsKLQotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2Ug
ZnBzUmFuZ2UgPQotICAgICAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1
cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKHN1cHBvcnRlZEZyYW1lcmF0ZXMsIGZyYW1lcmF0ZSk7Ci0K
LSAgICBmaW5hbCBTaXplIHByZXZpZXdTaXplID0gQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdl
dENsb3Nlc3RTdXBwb3J0ZWRTaXplKAotICAgICAgICBDYW1lcmExRW51bWVyYXRvci5jb252ZXJ0
U2l6ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3U2l6ZXMoKSksIHdpZHRoLCBoZWln
aHQpOwotICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5yZXBvcnRDYW1lcmFSZXNvbHV0aW9u
KGNhbWVyYTFSZXNvbHV0aW9uSGlzdG9ncmFtLCBwcmV2aWV3U2l6ZSk7Ci0KLSAgICByZXR1cm4g
bmV3IENhcHR1cmVGb3JtYXQocHJldmlld1NpemUud2lkdGgsIHByZXZpZXdTaXplLmhlaWdodCwg
ZnBzUmFuZ2UpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU2l6ZSBmaW5kQ2xvc2VzdFBpY3R1
cmVTaXplKAotICAgICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0
ZXJzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICByZXR1cm4gQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRTaXplKAotICAgICAgICBDYW1lcmExRW51bWVy
YXRvci5jb252ZXJ0U2l6ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQaWN0dXJlU2l6ZXMoKSks
IHdpZHRoLCBoZWlnaHQpOwotICB9Ci0KLSAgcHJpdmF0ZSBDYW1lcmExU2Vzc2lvbihFdmVudHMg
ZXZlbnRzLCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUsIENvbnRleHQgYXBwbGljYXRpb25Db250
ZXh0LAotICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIGlu
dCBjYW1lcmFJZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlLAotICAgICAg
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5D
YW1lcmFJbmZvIGluZm8sCi0gICAgICBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQsIGxvbmcg
Y29uc3RydWN0aW9uVGltZU5zKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0ZSBuZXcgY2Ft
ZXJhMSBzZXNzaW9uIG9uIGNhbWVyYSAiICsgY2FtZXJhSWQpOwotCi0gICAgdGhpcy5jYW1lcmFU
aHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsK
LSAgICB0aGlzLmNhcHR1cmVUb1RleHR1cmUgPSBjYXB0dXJlVG9UZXh0dXJlOwotICAgIHRoaXMu
YXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRpb25Db250ZXh0OwotICAgIHRoaXMuc3VyZmFj
ZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYUlk
ID0gY2FtZXJhSWQ7Ci0gICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgIHRoaXMuZnJhbWVyYXRlID0gZnJhbWVyYXRlOwotICAgIHRoaXMuY2FtZXJh
ID0gY2FtZXJhOwotICAgIHRoaXMuaW5mbyA9IGluZm87Ci0gICAgdGhpcy5jYXB0dXJlRm9ybWF0
ID0gY2FwdHVyZUZvcm1hdDsKLSAgICB0aGlzLmNvbnN0cnVjdGlvblRpbWVOcyA9IGNvbnN0cnVj
dGlvblRpbWVOczsKLQotICAgIHN0YXJ0Q2FwdHVyaW5nKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYW1lcmEx
IHNlc3Npb24gb24gY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0gICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5TVE9QUEVEKSB7Ci0gICAgICBm
aW5hbCBsb25nIHN0b3BTdGFydFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHN0YXRl
ID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICBzdG9wSW50ZXJuYWwoKTsKLSAgICAgIGZp
bmFsIGludCBzdG9wVGltZU1zID0gKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMo
U3lzdGVtLm5hbm9UaW1lKCkgLSBzdG9wU3RhcnRUaW1lKTsKLSAgICAgIGNhbWVyYTFTdG9wVGlt
ZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdG9wVGltZU1zKTsKLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgc3RhcnRDYXB0dXJpbmcoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0YXJ0IGNh
cHR1cmluZyIpOwotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgc3RhdGUgPSBT
ZXNzaW9uU3RhdGUuUlVOTklORzsKLQotICAgIGNhbWVyYS5zZXRFcnJvckNhbGxiYWNrKG5ldyBh
bmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5FcnJvckNhbGxiYWNrKCkgewotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKGludCBlcnJvciwgYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEgY2FtZXJhKSB7Ci0gICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgICAgIGlm
IChlcnJvciA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DQU1FUkFfRVJST1JfU0VSVkVSX0RJ
RUQpIHsKLSAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiQ2FtZXJhIHNlcnZlciBkaWVkISI7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBlcnJvcjog
IiArIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsIGVycm9yTWVzc2Fn
ZSk7Ci0gICAgICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICAgIHN0b3BJ
bnRlcm5hbCgpOwotICAgICAgICBpZiAoZXJyb3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
Q0FNRVJBX0VSUk9SX0VWSUNURUQpIHsKLSAgICAgICAgICBldmVudHMub25DYW1lcmFEaXNjb25u
ZWN0ZWQoQ2FtZXJhMVNlc3Npb24udGhpcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ZXZlbnRzLm9uQ2FtZXJhRXJyb3IoQ2FtZXJhMVNlc3Npb24udGhpcywgZXJyb3JNZXNzYWdlKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotCi0gICAgaWYgKGNhcHR1cmVUb1RleHR1cmUp
IHsKLSAgICAgIGxpc3RlbkZvclRleHR1cmVGcmFtZXMoKTsKLSAgICB9IGVsc2UgewotICAgICAg
bGlzdGVuRm9yQnl0ZWJ1ZmZlckZyYW1lcygpOwotICAgIH0KLSAgICB0cnkgewotICAgICAgY2Ft
ZXJhLnN0YXJ0UHJldmlldygpOwotICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewot
ICAgICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAgICAgIHN0b3BJbnRlcm5hbCgp
OwotICAgICAgZXZlbnRzLm9uQ2FtZXJhRXJyb3IodGhpcywgZS5nZXRNZXNzYWdlKCkpOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdG9wSW50ZXJuYWwoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgIlN0b3AgaW50ZXJuYWwiKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQot
ICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLQotICAgIC8vIE5vdGU6
IHN0b3BQcmV2aWV3IG9yIG90aGVyIGRyaXZlciBjb2RlIG1pZ2h0IGRlYWRsb2NrLiBEZWFkbG9j
ayBpbgotICAgIC8vIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLl9zdG9wUHJldmlldyhOYXRpdmUg
TWV0aG9kKSBoYXMgYmVlbiBvYnNlcnZlZCBvbgotICAgIC8vIE5leHVzIDUgKGhhbW1lcmhlYWQp
LCBPUyB2ZXJzaW9uIExNWTQ4SS4KLSAgICBjYW1lcmEuc3RvcFByZXZpZXcoKTsKLSAgICBjYW1l
cmEucmVsZWFzZSgpOwotICAgIGV2ZW50cy5vbkNhbWVyYUNsb3NlZCh0aGlzKTsKLQotICAgIExv
Z2dpbmcuZChUQUcsICJTdG9wIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsaXN0ZW5G
b3JUZXh0dXJlRnJhbWVzKCkgewotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVu
aW5nKG5ldyBTdXJmYWNlVGV4dHVyZUhlbHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3Rl
bmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFt
ZUF2YWlsYWJsZSgKLSAgICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9y
bU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgICAgICBjaGVja0lzT25DYW1lcmFUaHJl
YWQoKTsKLQotICAgICAgICBpZiAoc3RhdGUgIT0gU2Vzc2lvblN0YXRlLlJVTk5JTkcpIHsKLSAg
ICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVGV4dHVyZSBmcmFtZSBjYXB0dXJlZCBidXQgY2FtZXJh
IGlzIG5vIGxvbmdlciBydW5uaW5nLiIpOwotICAgICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICAgICAgZmluYWwgaW50IHN0
YXJ0VGltZU1zID0KLSAgICAgICAgICAgICAgKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9N
aWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBjb25zdHJ1Y3Rpb25UaW1lTnMpOwotICAgICAgICAg
IGNhbWVyYTFTdGFydFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMpOwotICAg
ICAgICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
bnQgcm90YXRpb24gPSBnZXRGcmFtZU9yaWVudGF0aW9uKCk7Ci0gICAgICAgIGlmIChpbmZvLmZh
Y2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdf
RlJPTlQpIHsKLSAgICAgICAgICAvLyBVbmRvIHRoZSBtaXJyb3IgdGhhdCB0aGUgT1MgImhlbHBz
IiB1cyB3aXRoLgotICAgICAgICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVm
ZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmh0bWwjc2V0RGlzcGxheU9yaWVudGF0aW9u
KGludCkKLSAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXggPSBSZW5kZXJlckNvbW1vbi5tdWx0aXBs
eU1hdHJpY2VzKAotICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9u
Lmhvcml6b250YWxGbGlwTWF0cml4KCkpOwotICAgICAgICB9Ci0gICAgICAgIGV2ZW50cy5vblRl
eHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYTFTZXNzaW9uLnRoaXMsIGNhcHR1cmVGb3JtYXQud2lk
dGgsCi0gICAgICAgICAgICBjYXB0dXJlRm9ybWF0LmhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFu
c2Zvcm1NYXRyaXgsIHJvdGF0aW9uLCB0aW1lc3RhbXBOcyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgbGlzdGVuRm9yQnl0ZWJ1ZmZlckZyYW1lcygpIHsKLSAgICBj
YW1lcmEuc2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcihuZXcgYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEuUHJldmlld0NhbGxiYWNrKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBvblByZXZpZXdGcmFtZShieXRlW10gZGF0YSwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEg
Y2FsbGJhY2tDYW1lcmEpIHsKLSAgICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAg
ICAgICAgaWYgKGNhbGxiYWNrQ2FtZXJhICE9IGNhbWVyYSkgewotICAgICAgICAgIExvZ2dpbmcu
ZShUQUcsICJDYWxsYmFjayBmcm9tIGEgZGlmZmVyZW50IGNhbWVyYS4gVGhpcyBzaG91bGQgbmV2
ZXIgaGFwcGVuLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChzdGF0ZSAhPSBTZXNzaW9uU3RhdGUuUlVOTklORykgewotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsICJCeXRlYnVmZmVyIGZyYW1lIGNhcHR1cmVkIGJ1dCBjYW1lcmEgaXMgbm8gbG9uZ2VyIHJ1
bm5pbmcuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwg
bG9uZyBjYXB0dXJlVGltZU5zID0gVGltZVVuaXQuTUlMTElTRUNPTkRTLnRvTmFub3MoU3lzdGVt
Q2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwotCi0gICAgICAgIGlmICghZmlyc3RGcmFtZVJlcG9y
dGVkKSB7Ci0gICAgICAgICAgZmluYWwgaW50IHN0YXJ0VGltZU1zID0KLSAgICAgICAgICAgICAg
KGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBj
b25zdHJ1Y3Rpb25UaW1lTnMpOwotICAgICAgICAgIGNhbWVyYTFTdGFydFRpbWVNc0hpc3RvZ3Jh
bS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMpOwotICAgICAgICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9
IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBldmVudHMub25CeXRlQnVmZmVyRnJhbWVDYXB0
dXJlZChDYW1lcmExU2Vzc2lvbi50aGlzLCBkYXRhLCBjYXB0dXJlRm9ybWF0LndpZHRoLAotICAg
ICAgICAgICAgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIGdldEZyYW1lT3JpZW50YXRpb24oKSwgY2Fw
dHVyZVRpbWVOcyk7Ci0gICAgICAgIGNhbWVyYS5hZGRDYWxsYmFja0J1ZmZlcihkYXRhKTsKLSAg
ICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGdldERldmljZU9yaWVudGF0aW9u
KCkgewotICAgIGludCBvcmllbnRhdGlvbiA9IDA7Ci0KLSAgICBXaW5kb3dNYW5hZ2VyIHdtID0g
KFdpbmRvd01hbmFnZXIpIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRl
eHQuV0lORE9XX1NFUlZJQ0UpOwotICAgIHN3aXRjaCAod20uZ2V0RGVmYXVsdERpc3BsYXkoKS5n
ZXRSb3RhdGlvbigpKSB7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fOTA6Ci0gICAgICAg
IG9yaWVudGF0aW9uID0gOTA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJP
VEFUSU9OXzE4MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAxODA7Ci0gICAgICAgIGJyZWFrOwot
ICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzI3MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAy
NzA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzA6Ci0gICAg
ICBkZWZhdWx0OgotICAgICAgICBvcmllbnRhdGlvbiA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICByZXR1cm4gb3JpZW50YXRpb247Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRGcmFt
ZU9yaWVudGF0aW9uKCkgewotICAgIGludCByb3RhdGlvbiA9IGdldERldmljZU9yaWVudGF0aW9u
KCk7Ci0gICAgaWYgKGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVy
YUluZm8uQ0FNRVJBX0ZBQ0lOR19CQUNLKSB7Ci0gICAgICByb3RhdGlvbiA9IDM2MCAtIHJvdGF0
aW9uOwotICAgIH0KLSAgICByZXR1cm4gKGluZm8ub3JpZW50YXRpb24gKyByb3RhdGlvbikgJSAz
NjA7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCkgewotICAg
IGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9v
cGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRp
b24oIldyb25nIHRocmVhZCIpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9DYW1lcmEyQ2FwdHVyZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0Nh
bWVyYTJDYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0NhbWVyYTJDYXB0dXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzcgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5h
bm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWlt
cG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWFuYWdlcjsKLQotQFRhcmdldEFw
aSgyMSkKLXB1YmxpYyBjbGFzcyBDYW1lcmEyQ2FwdHVyZXIgZXh0ZW5kcyBDYW1lcmFDYXB0dXJl
ciB7Ci0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIENh
bWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsKLQotICBwdWJsaWMgQ2FtZXJhMkNhcHR1cmVyKENv
bnRleHQgY29udGV4dCwgU3RyaW5nIGNhbWVyYU5hbWUsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZl
bnRzSGFuZGxlcikgewotICAgIHN1cGVyKGNhbWVyYU5hbWUsIGV2ZW50c0hhbmRsZXIsIG5ldyBD
YW1lcmEyRW51bWVyYXRvcihjb250ZXh0KSk7Ci0KLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0
OwotICAgIGNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1T
ZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHBy
b3RlY3RlZCB2b2lkIGNyZWF0ZUNhbWVyYVNlc3Npb24oQ2FtZXJhU2Vzc2lvbi5DcmVhdGVTZXNz
aW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLAotICAgICAgQ2FtZXJhU2Vzc2lvbi5F
dmVudHMgZXZlbnRzLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBTdHJpbmcgY2FtZXJhTmFtZSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgaW50IGZyYW1lcmF0ZSkgewotICAgIENhbWVyYTJT
ZXNzaW9uLmNyZWF0ZShjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIGV2ZW50cywgYXBwbGljYXRpb25D
b250ZXh0LCBjYW1lcmFNYW5hZ2VyLAotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciwgY2Ft
ZXJhTmFtZSwgd2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgfQotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmEyRW51bWVyYXRvci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3IuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmEyRW51bWVyYXRvci5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
MjQ4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7
Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQu
Y29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBh
bmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUu
Y2FtZXJhMi5DYW1lcmFDaGFyYWN0ZXJpc3RpY3M7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5j
YW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNh
bWVyYU1ldGFkYXRhOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5wYXJhbXMuU3Ry
ZWFtQ29uZmlndXJhdGlvbk1hcDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFu
ZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkFuZHJvaWRFeGNlcHRp
b247Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlJhbmdlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsK
LWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1AVGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNzIENh
bWVyYTJFbnVtZXJhdG9yIGltcGxlbWVudHMgQ2FtZXJhRW51bWVyYXRvciB7Ci0gIHByaXZhdGUg
ZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiQ2FtZXJhMkVudW1lcmF0b3IiOwotICBwcml2YXRl
IGZpbmFsIHN0YXRpYyBkb3VibGUgTkFOT19TRUNPTkRTX1BFUl9TRUNPTkQgPSAxLjBlOTsKLQot
ICAvLyBFYWNoIGVudHJ5IGNvbnRhaW5zIHRoZSBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgYSBnaXZl
biBjYW1lcmEgaW5kZXguIFRoZSBmb3JtYXRzIGFyZSBlbnVtZXJhdGVkCi0gIC8vIGxhemlseSBp
biBnZXRTdXBwb3J0ZWRGb3JtYXRzKCksIGFuZCBjYWNoZWQgZm9yIGZ1dHVyZSByZWZlcmVuY2Uu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8Q2FwdHVyZUZvcm1hdD4+
IGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMgPQotICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0
PENhcHR1cmVGb3JtYXQ+PigpOwotCi0gIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgZmluYWwg
Q2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyOwotCi0gIHB1YmxpYyBDYW1lcmEyRW51bWVyYXRv
cihDb250ZXh0IGNvbnRleHQpIHsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRo
aXMuY2FtZXJhTWFuYWdlciA9IChDYW1lcmFNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZp
Y2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IFN0cmluZ1tdIGdldERldmljZU5hbWVzKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gY2Ft
ZXJhTWFuYWdlci5nZXRDYW1lcmFJZExpc3QoKTsKLSAgICAgIC8vIE9uIEFuZHJvaWQgT1MgcHJl
IDQuNC4yLCBhIGNsYXNzIHdpbGwgbm90IGxvYWQgYmVjYXVzZSBvZiBWZXJpZnlFcnJvciBpZiBp
dCBjb250YWlucyBhCi0gICAgICAvLyBjYXRjaCBzdGF0ZW1lbnQgd2l0aCBhbiBFeGNlcHRpb24g
ZnJvbSBhIG5ld2VyIEFQSSwgZXZlbiBpZiB0aGUgY29kZSBpcyBuZXZlciBleGVjdXRlZC4KLSAg
ICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lk
PTIwOTEyOQotICAgIH0gY2F0Y2ggKC8qIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiAqLyBBbmRyb2lk
RXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgYWNjZXNzIGV4Y2Vw
dGlvbjogIiArIGUpOwotICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbXSB7fTsKLSAgICB9Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNGcm9udEZhY2luZyhTdHJpbmcgZGV2
aWNlTmFtZSkgewotICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcyBjaGFyYWN0ZXJpc3RpY3MgPSBn
ZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoZGV2aWNlTmFtZSk7Ci0KLSAgICByZXR1cm4gY2hhcmFj
dGVyaXN0aWNzICE9IG51bGwKLSAgICAgICAgJiYgY2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuTEVOU19GQUNJTkcpCi0gICAgICAgID09IENhbWVyYU1ldGFkYXRhLkxF
TlNfRkFDSU5HX0ZST05UOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlz
QmFja0ZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIENhbWVyYUNoYXJhY3RlcmlzdGlj
cyBjaGFyYWN0ZXJpc3RpY3MgPSBnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoZGV2aWNlTmFtZSk7
Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyaXN0aWNzICE9IG51bGwKLSAgICAgICAgJiYgY2hhcmFj
dGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuTEVOU19GQUNJTkcpCi0gICAgICAg
ID09IENhbWVyYU1ldGFkYXRhLkxFTlNfRkFDSU5HX0JBQ0s7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhTdHJpbmcg
ZGV2aWNlTmFtZSkgewotICAgIHJldHVybiBnZXRTdXBwb3J0ZWRGb3JtYXRzKGNvbnRleHQsIGRl
dmljZU5hbWUpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBDYW1lcmFWaWRlb0NhcHR1
cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAgU3RyaW5nIGRldmljZU5hbWUsIENhbWVyYVZpZGVv
Q2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyKSB7Ci0gICAgcmV0dXJu
IG5ldyBDYW1lcmEyQ2FwdHVyZXIoY29udGV4dCwgZGV2aWNlTmFtZSwgZXZlbnRzSGFuZGxlcik7
Ci0gIH0KLQotICBwcml2YXRlIENhbWVyYUNoYXJhY3RlcmlzdGljcyBnZXRDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIGNh
bWVyYU1hbmFnZXIuZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGRldmljZU5hbWUpOwotICAgICAg
Ly8gT24gQW5kcm9pZCBPUyBwcmUgNC40LjIsIGEgY2xhc3Mgd2lsbCBub3QgbG9hZCBiZWNhdXNl
IG9mIFZlcmlmeUVycm9yIGlmIGl0IGNvbnRhaW5zIGEKLSAgICAgIC8vIGNhdGNoIHN0YXRlbWVu
dCB3aXRoIGFuIEV4Y2VwdGlvbiBmcm9tIGEgbmV3ZXIgQVBJLCBldmVuIGlmIHRoZSBjb2RlIGlz
IG5ldmVyIGV4ZWN1dGVkLgotICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRy
b2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA5MTI5Ci0gICAgfSBjYXRjaCAoLyogQ2FtZXJhQWNjZXNz
RXhjZXB0aW9uICovIEFuZHJvaWRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
IkNhbWVyYSBhY2Nlc3MgZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2hlY2tzIGlmIEFQSSBpcyBzdXBwb3J0ZWQgYW5kIGFs
bCBjYW1lcmFzIGhhdmUgYmV0dGVyIHRoYW4gbGVnYWN5IHN1cHBvcnQuCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIGJvb2xlYW4gaXNTdXBwb3J0ZWQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgaWYg
KEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1h
bmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQu
Q0FNRVJBX1NFUlZJQ0UpOwotICAgIHRyeSB7Ci0gICAgICBTdHJpbmdbXSBjYW1lcmFJZHMgPSBj
YW1lcmFNYW5hZ2VyLmdldENhbWVyYUlkTGlzdCgpOwotICAgICAgZm9yIChTdHJpbmcgaWQgOiBj
YW1lcmFJZHMpIHsKLSAgICAgICAgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGlj
cyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGlkKTsKLSAgICAgICAg
aWYgKGNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9S
VEVEX0hBUkRXQVJFX0xFVkVMKQotICAgICAgICAgICAgPT0gQ2FtZXJhQ2hhcmFjdGVyaXN0aWNz
LklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0xFR0FDWSkgewotICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gT24gQW5kcm9pZCBPUyBwcmUg
NC40LjIsIGEgY2xhc3Mgd2lsbCBub3QgbG9hZCBiZWNhdXNlIG9mIFZlcmlmeUVycm9yIGlmIGl0
IGNvbnRhaW5zIGEKLSAgICAgIC8vIGNhdGNoIHN0YXRlbWVudCB3aXRoIGFuIEV4Y2VwdGlvbiBm
cm9tIGEgbmV3ZXIgQVBJLCBldmVuIGlmIHRoZSBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkLgotICAg
ICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9
MjA5MTI5Ci0gICAgfSBjYXRjaCAoLyogQ2FtZXJhQWNjZXNzRXhjZXB0aW9uICovIEFuZHJvaWRF
eGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBhY2Nlc3MgZXhjZXB0
aW9uOiAiICsgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotICB9Ci0KLSAgc3RhdGljIGludCBnZXRGcHNVbml0RmFjdG9yKFJhbmdlPEludGVnZXI+W10g
ZnBzUmFuZ2VzKSB7Ci0gICAgaWYgKGZwc1Jhbmdlcy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0
dXJuIDEwMDA7Ci0gICAgfQotICAgIHJldHVybiBmcHNSYW5nZXNbMF0uZ2V0VXBwZXIoKSA8IDEw
MDAgPyAxMDAwIDogMTsKLSAgfQotCi0gIHN0YXRpYyBMaXN0PFNpemU+IGdldFN1cHBvcnRlZFNp
emVzKENhbWVyYUNoYXJhY3RlcmlzdGljcyBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBm
aW5hbCBTdHJlYW1Db25maWd1cmF0aW9uTWFwIHN0cmVhbU1hcCA9Ci0gICAgICAgIGNhbWVyYUNo
YXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9TVFJFQU1fQ09O
RklHVVJBVElPTl9NQVApOwotICAgIGZpbmFsIGludCBzdXBwb3J0TGV2ZWwgPQotICAgICAgICBj
YW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5JTkZPX1NVUFBP
UlRFRF9IQVJEV0FSRV9MRVZFTCk7Ci0KLSAgICBmaW5hbCBhbmRyb2lkLnV0aWwuU2l6ZVtdIG5h
dGl2ZVNpemVzID0gc3RyZWFtTWFwLmdldE91dHB1dFNpemVzKFN1cmZhY2VUZXh0dXJlLmNsYXNz
KTsKLSAgICBmaW5hbCBMaXN0PFNpemU+IHNpemVzID0gY29udmVydFNpemVzKG5hdGl2ZVNpemVz
KTsKLQotICAgIC8vIFZpZGVvIG1heSBiZSBzdHJldGNoZWQgcHJlIExNUjEgb24gbGVnYWN5IGlt
cGxlbWVudGF0aW9ucy4KLSAgICAvLyBGaWx0ZXIgb3V0IGZvcm1hdHMgdGhhdCBoYXZlIGRpZmZl
cmVudCBhc3BlY3QgcmF0aW8gdGhhbiB0aGUgc2Vuc29yIGFycmF5LgotICAgIGlmIChCdWlsZC5W
RVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QX01SMQotICAgICAg
ICAmJiBzdXBwb3J0TGV2ZWwgPT0gQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVE
X0hBUkRXQVJFX0xFVkVMX0xFR0FDWSkgewotICAgICAgZmluYWwgUmVjdCBhY3RpdmVBcnJheVNp
emUgPQotICAgICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVy
aXN0aWNzLlNFTlNPUl9JTkZPX0FDVElWRV9BUlJBWV9TSVpFKTsKLSAgICAgIGZpbmFsIEFycmF5
TGlzdDxTaXplPiBmaWx0ZXJlZFNpemVzID0gbmV3IEFycmF5TGlzdDxTaXplPigpOwotCi0gICAg
ICBmb3IgKFNpemUgc2l6ZSA6IHNpemVzKSB7Ci0gICAgICAgIGlmIChhY3RpdmVBcnJheVNpemUu
d2lkdGgoKSAqIHNpemUuaGVpZ2h0ID09IGFjdGl2ZUFycmF5U2l6ZS5oZWlnaHQoKSAqIHNpemUu
d2lkdGgpIHsKLSAgICAgICAgICBmaWx0ZXJlZFNpemVzLmFkZChzaXplKTsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICByZXR1cm4gZmlsdGVyZWRTaXplczsKLSAgICB9IGVsc2UgewotICAg
ICAgcmV0dXJuIHNpemVzOwotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBMaXN0PENhcHR1cmVGb3Jt
YXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgY2FtZXJhSWQp
IHsKLSAgICByZXR1cm4gZ2V0U3VwcG9ydGVkRm9ybWF0cygKLSAgICAgICAgKENhbWVyYU1hbmFn
ZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNBTUVSQV9TRVJWSUNFKSwgY2Ft
ZXJhSWQpOwotICB9Ci0KLSAgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVk
Rm9ybWF0cyhDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXIsIFN0cmluZyBjYW1lcmFJZCkgewot
ICAgIHN5bmNocm9uaXplZCAoY2FjaGVkU3VwcG9ydGVkRm9ybWF0cykgewotICAgICAgaWYgKGNh
Y2hlZFN1cHBvcnRlZEZvcm1hdHMuY29udGFpbnNLZXkoY2FtZXJhSWQpKSB7Ci0gICAgICAgIHJl
dHVybiBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzLmdldChjYW1lcmFJZCk7Ci0gICAgICB9Ci0KLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJHZXQgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRl
eCAiICsgY2FtZXJhSWQgKyAiLiIpOwotICAgICAgZmluYWwgbG9uZyBzdGFydFRpbWVNcyA9IFN5
c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotCi0gICAgICBmaW5hbCBDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2Ft
ZXJhQ2hhcmFjdGVyaXN0aWNzID0gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3MoY2FtZXJhSWQpOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgIExv
Z2dpbmcuZShUQUcsICJnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoKTogIiArIGV4KTsKLSAgICAg
ICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4oKTsKLSAgICAgIH0KLQotICAg
ICAgZmluYWwgU3RyZWFtQ29uZmlndXJhdGlvbk1hcCBzdHJlYW1NYXAgPQotICAgICAgICAgIGNh
bWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9TVFJF
QU1fQ09ORklHVVJBVElPTl9NQVApOwotCi0gICAgICBSYW5nZTxJbnRlZ2VyPltdIGZwc1Jhbmdl
cyA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJp
c3RpY3MuQ09OVFJPTF9BRV9BVkFJTEFCTEVfVEFSR0VUX0ZQU19SQU5HRVMpOwotICAgICAgTGlz
dDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBmcmFtZXJhdGVSYW5nZXMgPQotICAgICAg
ICAgIGNvbnZlcnRGcmFtZXJhdGVzKGZwc1JhbmdlcywgZ2V0RnBzVW5pdEZhY3RvcihmcHNSYW5n
ZXMpKTsKLSAgICAgIExpc3Q8U2l6ZT4gc2l6ZXMgPSBnZXRTdXBwb3J0ZWRTaXplcyhjYW1lcmFD
aGFyYWN0ZXJpc3RpY3MpOwotCi0gICAgICBpbnQgZGVmYXVsdE1heEZwcyA9IDA7Ci0gICAgICBm
b3IgKENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UgZnJhbWVyYXRlUmFuZ2UgOiBmcmFtZXJh
dGVSYW5nZXMpIHsKLSAgICAgICAgZGVmYXVsdE1heEZwcyA9IE1hdGgubWF4KGRlZmF1bHRNYXhG
cHMsIGZyYW1lcmF0ZVJhbmdlLm1heCk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbmFsIExpc3Q8Q2Fw
dHVyZUZvcm1hdD4gZm9ybWF0TGlzdCA9IG5ldyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4oKTsK
LSAgICAgIGZvciAoU2l6ZSBzaXplIDogc2l6ZXMpIHsKLSAgICAgICAgbG9uZyBtaW5GcmFtZUR1
cmF0aW9uTnMgPSAwOwotICAgICAgICB0cnkgewotICAgICAgICAgIG1pbkZyYW1lRHVyYXRpb25O
cyA9IHN0cmVhbU1hcC5nZXRPdXRwdXRNaW5GcmFtZUR1cmF0aW9uKAotICAgICAgICAgICAgICBT
dXJmYWNlVGV4dHVyZS5jbGFzcywgbmV3IGFuZHJvaWQudXRpbC5TaXplKHNpemUud2lkdGgsIHNp
emUuaGVpZ2h0KSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAg
Ly8gZ2V0T3V0cHV0TWluRnJhbWVEdXJhdGlvbigpIGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIGRl
dmljZXMuIElnbm9yZSBzaWxlbnRseS4KLSAgICAgICAgfQotICAgICAgICBmaW5hbCBpbnQgbWF4
RnBzID0gKG1pbkZyYW1lRHVyYXRpb25OcyA9PSAwKQotICAgICAgICAgICAgPyBkZWZhdWx0TWF4
RnBzCi0gICAgICAgICAgICA6IChpbnQpIE1hdGgucm91bmQoTkFOT19TRUNPTkRTX1BFUl9TRUNP
TkQgLyBtaW5GcmFtZUR1cmF0aW9uTnMpICogMTAwMDsKLSAgICAgICAgZm9ybWF0TGlzdC5hZGQo
bmV3IENhcHR1cmVGb3JtYXQoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIDAsIG1heEZwcykpOwot
ICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRm9ybWF0OiAiICsgc2l6ZS53aWR0aCArICJ4IiArIHNp
emUuaGVpZ2h0ICsgIkAiICsgbWF4RnBzKTsKLSAgICAgIH0KLQotICAgICAgY2FjaGVkU3VwcG9y
dGVkRm9ybWF0cy5wdXQoY2FtZXJhSWQsIGZvcm1hdExpc3QpOwotICAgICAgZmluYWwgbG9uZyBl
bmRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJHZXQgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRleCAiICsgY2FtZXJh
SWQgKyAiIGRvbmUuIgotICAgICAgICAgICAgICArICIgVGltZSBzcGVudDogIiArIChlbmRUaW1l
TXMgLSBzdGFydFRpbWVNcykgKyAiIG1zLiIpOwotICAgICAgcmV0dXJuIGZvcm1hdExpc3Q7Ci0g
ICAgfQotICB9Ci0KLSAgLy8gQ29udmVydCBmcm9tIGFuZHJvaWQudXRpbC5TaXplIHRvIFNpemUu
Ci0gIHByaXZhdGUgc3RhdGljIExpc3Q8U2l6ZT4gY29udmVydFNpemVzKGFuZHJvaWQudXRpbC5T
aXplW10gY2FtZXJhU2l6ZXMpIHsKLSAgICBmaW5hbCBMaXN0PFNpemU+IHNpemVzID0gbmV3IEFy
cmF5TGlzdDxTaXplPigpOwotICAgIGZvciAoYW5kcm9pZC51dGlsLlNpemUgc2l6ZSA6IGNhbWVy
YVNpemVzKSB7Ci0gICAgICBzaXplcy5hZGQobmV3IFNpemUoc2l6ZS5nZXRXaWR0aCgpLCBzaXpl
LmdldEhlaWdodCgpKSk7Ci0gICAgfQotICAgIHJldHVybiBzaXplczsKLSAgfQotCi0gIC8vIENv
bnZlcnQgZnJvbSBhbmRyb2lkLnV0aWwuUmFuZ2U8SW50ZWdlcj4gdG8gQ2FwdHVyZUZvcm1hdC5G
cmFtZXJhdGVSYW5nZS4KLSAgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5n
ZT4gY29udmVydEZyYW1lcmF0ZXMoCi0gICAgICBSYW5nZTxJbnRlZ2VyPltdIGFycmF5UmFuZ2Vz
LCBpbnQgdW5pdEZhY3RvcikgewotICAgIGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJh
dGVSYW5nZT4gcmFuZ2VzID0gbmV3IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJh
bmdlPigpOwotICAgIGZvciAoUmFuZ2U8SW50ZWdlcj4gcmFuZ2UgOiBhcnJheVJhbmdlcykgewot
ICAgICAgcmFuZ2VzLmFkZChuZXcgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSgKLSAgICAg
ICAgICByYW5nZS5nZXRMb3dlcigpICogdW5pdEZhY3RvciwgcmFuZ2UuZ2V0VXBwZXIoKSAqIHVu
aXRGYWN0b3IpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJhbmdlczsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmEyU2Vzc2lvbi5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvQ2FtZXJhMlNlc3Npb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmEyU2Vzc2lvbi5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDUxICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0
IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNv
bnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBh
bmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOwotaW1wb3J0IGFu
ZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFDYXB0dXJlU2Vzc2lvbjsKLWltcG9ydCBhbmRy
b2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzOwotaW1wb3J0IGFuZHJv
aWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2Fy
ZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEy
LkNhbWVyYU1ldGFkYXRhOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJl
RmFpbHVyZTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3Q7
Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5SYW5nZTsK
LWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93
TWFuYWdlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IG9yZy53ZWJy
dGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5NZXRyaWNzLkhpc3RvZ3JhbTsKLQotQFRhcmdldEFwaSgyMSkKLXB1YmxpYyBjbGFzcyBD
YW1lcmEyU2Vzc2lvbiBpbXBsZW1lbnRzIENhbWVyYVNlc3Npb24gewotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYTJTZXNzaW9uIjsKLQotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMlN0YXJ0VGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhp
c3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5BbmRyb2lkLkNhbWVyYTIuU3RhcnRUaW1lTXMi
LCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJh
MlN0b3BUaW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2Vi
UlRDLkFuZHJvaWQuQ2FtZXJhMi5TdG9wVGltZU1zIiwgMSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTJSZXNvbHV0aW9uSGlzdG9ncmFtID0gSGlz
dG9ncmFtLmNyZWF0ZUVudW1lcmF0aW9uKAotICAgICAgIldlYlJUQy5BbmRyb2lkLkNhbWVyYTIu
UmVzb2x1dGlvbiIsIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DT01NT05fUkVTT0xVVElPTlMu
c2l6ZSgpKTsKLQotICBwcml2YXRlIHN0YXRpYyBlbnVtIFNlc3Npb25TdGF0ZSB7IFJVTk5JTkcs
IFNUT1BQRUQgfQotCi0gIHByaXZhdGUgZmluYWwgSGFuZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVy
OwotICBwcml2YXRlIGZpbmFsIENyZWF0ZVNlc3Npb25DYWxsYmFjayBjYWxsYmFjazsKLSAgcHJp
dmF0ZSBmaW5hbCBFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIGZpbmFsIENvbnRleHQgYXBwbGlj
YXRpb25Db250ZXh0OwotICBwcml2YXRlIGZpbmFsIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdl
cjsKLSAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhl
bHBlcjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY2FtZXJhSWQ7Ci0gIHByaXZhdGUgZmluYWwg
aW50IHdpZHRoOwotICBwcml2YXRlIGZpbmFsIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgZmluYWwg
aW50IGZyYW1lcmF0ZTsKLQotICAvLyBJbml0aWFsaXplZCBhdCBzdGFydAotICBwcml2YXRlIENh
bWVyYUNoYXJhY3RlcmlzdGljcyBjYW1lcmFDaGFyYWN0ZXJpc3RpY3M7Ci0gIHByaXZhdGUgaW50
IGNhbWVyYU9yaWVudGF0aW9uOwotICBwcml2YXRlIGJvb2xlYW4gaXNDYW1lcmFGcm9udEZhY2lu
ZzsKLSAgcHJpdmF0ZSBpbnQgZnBzVW5pdEZhY3RvcjsKLSAgcHJpdmF0ZSBDYXB0dXJlRm9ybWF0
IGNhcHR1cmVGb3JtYXQ7Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgd2hlbiBjYW1lcmEgb3BlbnMKLSAg
cHJpdmF0ZSBDYW1lcmFEZXZpY2UgY2FtZXJhRGV2aWNlOwotICBwcml2YXRlIFN1cmZhY2Ugc3Vy
ZmFjZTsKLQotICAvLyBJbml0aWFsaXplZCB3aGVuIGNhcHR1cmUgc2Vzc2lvbiBpcyBjcmVhdGVk
Ci0gIHByaXZhdGUgQ2FtZXJhQ2FwdHVyZVNlc3Npb24gY2FwdHVyZVNlc3Npb247Ci0KLSAgLy8g
U3RhdGUKLSAgcHJpdmF0ZSBTZXNzaW9uU3RhdGUgc3RhdGUgPSBTZXNzaW9uU3RhdGUuUlVOTklO
RzsKLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVSZXBvcnRlZCA9IGZhbHNlOwotCi0gIC8v
IFVzZWQgb25seSBmb3Igc3RhdHMuIE9ubHkgdXNlZCBvbiB0aGUgY2FtZXJhIHRocmVhZC4KLSAg
cHJpdmF0ZSBmaW5hbCBsb25nIGNvbnN0cnVjdGlvblRpbWVOczsgLy8gQ29uc3RydWN0aW9uIHRp
bWUgb2YgdGhpcyBjbGFzcy4KLQotICBwcml2YXRlIGNsYXNzIENhbWVyYVN0YXRlQ2FsbGJhY2sg
ZXh0ZW5kcyBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjayB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcg
Z2V0RXJyb3JEZXNjcmlwdGlvbihpbnQgZXJyb3JDb2RlKSB7Ci0gICAgICBzd2l0Y2ggKGVycm9y
Q29kZSkgewotICAgICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0ZUNhbGxiYWNrLkVSUk9SX0NB
TUVSQV9ERVZJQ0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgZGV2aWNlIGhhcyBlbmNvdW50
ZXJlZCBhIGZhdGFsIGVycm9yLiI7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2Fs
bGJhY2suRVJST1JfQ0FNRVJBX0RJU0FCTEVEOgotICAgICAgICAgIHJldHVybiAiQ2FtZXJhIGRl
dmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIGR1ZSB0byBhIGRldmljZSBwb2xpY3kuIjsKLSAgICAg
ICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJPUl9DQU1FUkFfSU5fVVNFOgot
ICAgICAgICAgIHJldHVybiAiQ2FtZXJhIGRldmljZSBpcyBpbiB1c2UgYWxyZWFkeS4iOwotICAg
ICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0ZUNhbGxiYWNrLkVSUk9SX0NBTUVSQV9TRVJWSUNF
OgotICAgICAgICAgIHJldHVybiAiQ2FtZXJhIHNlcnZpY2UgaGFzIGVuY291bnRlcmVkIGEgZmF0
YWwgZXJyb3IuIjsKLSAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJP
Ul9NQVhfQ0FNRVJBU19JTl9VU0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgZGV2aWNlIGNv
dWxkIG5vdCBiZSBvcGVuZWQgYmVjYXVzZSIKLSAgICAgICAgICAgICAgKyAiIHRoZXJlIGFyZSB0
b28gbWFueSBvdGhlciBvcGVuIGNhbWVyYSBkZXZpY2VzLiI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgcmV0dXJuICJVbmtub3duIGNhbWVyYSBlcnJvcjogIiArIGVycm9yQ29kZTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRpc2Nvbm5l
Y3RlZChDYW1lcmFEZXZpY2UgY2FtZXJhKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQo
KTsKLSAgICAgIGZpbmFsIGJvb2xlYW4gc3RhcnRGYWlsdXJlID0gKGNhcHR1cmVTZXNzaW9uID09
IG51bGwpOwotICAgICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAgICAgIHN0b3BJ
bnRlcm5hbCgpOwotICAgICAgaWYgKHN0YXJ0RmFpbHVyZSkgewotICAgICAgICBjYWxsYmFjay5v
bkZhaWx1cmUoIkNhbWVyYSBkaXNjb25uZWN0ZWQgLyBldmljdGVkLiIpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgZXZlbnRzLm9uQ2FtZXJhRGlzY29ubmVjdGVkKENhbWVyYTJTZXNzaW9uLnRo
aXMpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
RXJyb3IoQ2FtZXJhRGV2aWNlIGNhbWVyYSwgaW50IGVycm9yQ29kZSkgewotICAgICAgY2hlY2tJ
c09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICByZXBvcnRFcnJvcihnZXRFcnJvckRlc2NyaXB0aW9u
KGVycm9yQ29kZSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
T3BlbmVkKENhbWVyYURldmljZSBjYW1lcmEpIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVh
ZCgpOwotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIG9wZW5lZC4iKTsKLSAgICAgIGNh
bWVyYURldmljZSA9IGNhbWVyYTsKLQotICAgICAgZmluYWwgU3VyZmFjZVRleHR1cmUgc3VyZmFj
ZVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpOwotICAg
ICAgc3VyZmFjZVRleHR1cmUuc2V0RGVmYXVsdEJ1ZmZlclNpemUoY2FwdHVyZUZvcm1hdC53aWR0
aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQpOwotICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHN1
cmZhY2VUZXh0dXJlKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGNhbWVyYS5jcmVhdGVDYXB0dXJl
U2Vzc2lvbigKLSAgICAgICAgICAgIEFycmF5cy5hc0xpc3Qoc3VyZmFjZSksIG5ldyBDYXB0dXJl
U2Vzc2lvbkNhbGxiYWNrKCksIGNhbWVyYVRocmVhZEhhbmRsZXIpOwotICAgICAgfSBjYXRjaCAo
Q2FtZXJhQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0
byBjcmVhdGUgY2FwdHVyZSBzZXNzaW9uLiAiICsgZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNsb3NlZChDYW1l
cmFEZXZpY2UgY2FtZXJhKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAg
ICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBkZXZpY2UgY2xvc2VkLiIpOwotICAgICAgZXZlbnRz
Lm9uQ2FtZXJhQ2xvc2VkKENhbWVyYTJTZXNzaW9uLnRoaXMpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgY2xhc3MgQ2FwdHVyZVNlc3Npb25DYWxsYmFjayBleHRlbmRzIENhbWVyYUNhcHR1cmVT
ZXNzaW9uLlN0YXRlQ2FsbGJhY2sgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
Q29uZmlndXJlRmFpbGVkKENhbWVyYUNhcHR1cmVTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAgIGNo
ZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc2Vzc2lvbi5jbG9zZSgpOwotICAgICAgcmVw
b3J0RXJyb3IoIkZhaWxlZCB0byBjb25maWd1cmUgY2FwdHVyZSBzZXNzaW9uLiIpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ29uZmlndXJlZChDYW1lcmFDYXB0
dXJlU2Vzc2lvbiBzZXNzaW9uKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEgY2FwdHVyZSBzZXNzaW9uIGNvbmZpZ3VyZWQuIik7
Ci0gICAgICBjYXB0dXJlU2Vzc2lvbiA9IHNlc3Npb247Ci0gICAgICB0cnkgewotICAgICAgICAv
KgotICAgICAgICAgKiBUaGUgdmlhYmxlIG9wdGlvbnMgZm9yIHZpZGVvIGNhcHR1cmUgcmVxdWVz
dHMgYXJlOgotICAgICAgICAgKiBURU1QTEFURV9QUkVWSUVXOiBIaWdoIGZyYW1lIHJhdGUgaXMg
Z2l2ZW4gcHJpb3JpdHkgb3ZlciB0aGUgaGlnaGVzdC1xdWFsaXR5Ci0gICAgICAgICAqICAgcG9z
dC1wcm9jZXNzaW5nLgotICAgICAgICAgKiBURU1QTEFURV9SRUNPUkQ6IFN0YWJsZSBmcmFtZSBy
YXRlIGlzIHVzZWQsIGFuZCBwb3N0LXByb2Nlc3NpbmcgaXMgc2V0IGZvciByZWNvcmRpbmcKLSAg
ICAgICAgICogICBxdWFsaXR5LgotICAgICAgICAgKi8KLSAgICAgICAgZmluYWwgQ2FwdHVyZVJl
cXVlc3QuQnVpbGRlciBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIgPQotICAgICAgICAgICAgY2FtZXJh
RGV2aWNlLmNyZWF0ZUNhcHR1cmVSZXF1ZXN0KENhbWVyYURldmljZS5URU1QTEFURV9SRUNPUkQp
OwotICAgICAgICAvLyBTZXQgYXV0byBleHBvc3VyZSBmcHMgcmFuZ2UuCi0gICAgICAgIGNhcHR1
cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9BRV9UQVJHRVRfRlBT
X1JBTkdFLAotICAgICAgICAgICAgbmV3IFJhbmdlPEludGVnZXI+KGNhcHR1cmVGb3JtYXQuZnJh
bWVyYXRlLm1pbiAvIGZwc1VuaXRGYWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1heCAvIGZwc1VuaXRGYWN0b3IpKTsK
LSAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldCgKLSAgICAgICAgICAgIENhcHR1cmVS
ZXF1ZXN0LkNPTlRST0xfQUVfTU9ERSwgQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9BRV9NT0RFX09O
KTsKLSAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5DT05U
Uk9MX0FFX0xPQ0ssIGZhbHNlKTsKLSAgICAgICAgY2hvb3NlU3RhYmlsaXphdGlvbk1vZGUoY2Fw
dHVyZVJlcXVlc3RCdWlsZGVyKTsKLSAgICAgICAgY2hvb3NlRm9jdXNNb2RlKGNhcHR1cmVSZXF1
ZXN0QnVpbGRlcik7Ci0KLSAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLmFkZFRhcmdldChz
dXJmYWNlKTsKLSAgICAgICAgc2Vzc2lvbi5zZXRSZXBlYXRpbmdSZXF1ZXN0KAotICAgICAgICAg
ICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLmJ1aWxkKCksIG5ldyBDYW1lcmFDYXB0dXJlQ2FsbGJh
Y2soKSwgY2FtZXJhVGhyZWFkSGFuZGxlcik7Ci0gICAgICB9IGNhdGNoIChDYW1lcmFBY2Nlc3NF
eGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1
cmUgcmVxdWVzdC4gIiArIGUpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHN1
cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKAotICAgICAgICAgIG5ldyBTdXJmYWNl
VGV4dHVyZUhlbHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyKCkgewotICAgICAg
ICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUF2
YWlsYWJsZSgKLSAgICAgICAgICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5z
Zm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgICAgICAgICAgICBjaGVja0lzT25D
YW1lcmFUaHJlYWQoKTsKLQotICAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gU2Vzc2lvblN0YXRl
LlJVTk5JTkcpIHsKLSAgICAgICAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVGV4dHVyZSBmcmFt
ZSBjYXB0dXJlZCBidXQgY2FtZXJhIGlzIG5vIGxvbmdlciBydW5uaW5nLiIpOwotICAgICAgICAg
ICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmICgh
Zmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICAgICAgICAgICAgZmlyc3RGcmFtZVJlcG9ydGVk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmaW5hbCBpbnQgc3RhcnRUaW1lTXMgPQotICAgICAg
ICAgICAgICAgICAgICAoaW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0u
bmFub1RpbWUoKSAtIGNvbnN0cnVjdGlvblRpbWVOcyk7Ci0gICAgICAgICAgICAgICAgY2FtZXJh
MlN0YXJ0VGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0gICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICBpbnQgcm90YXRpb24gPSBnZXRGcmFtZU9yaWVudGF0aW9u
KCk7Ci0gICAgICAgICAgICAgIGlmIChpc0NhbWVyYUZyb250RmFjaW5nKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVW5kbyB0aGUgbWlycm9yIHRoYXQgdGhlIE9TICJoZWxwcyIgdXMgd2l0aC4KLSAg
ICAgICAgICAgICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9h
bmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5odG1sI3NldERpc3BsYXlPcmllbnRhdGlvbihpbnQpCi0g
ICAgICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlwbHlN
YXRyaWNlcygKLSAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4LCBSZW5kZXJlckNv
bW1vbi5ob3Jpem9udGFsRmxpcE1hdHJpeCgpKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgIC8vIFVuZG8gY2FtZXJhIG9yaWVudGF0aW9uIC0gd2UgcmVwb3J0IGl0IGFzIHJvdGF0
aW9uIGluc3RlYWQuCi0gICAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeCA9Ci0gICAgICAgICAg
ICAgICAgICBSZW5kZXJlckNvbW1vbi5yb3RhdGVUZXh0dXJlTWF0cml4KHRyYW5zZm9ybU1hdHJp
eCwgLWNhbWVyYU9yaWVudGF0aW9uKTsKLQotICAgICAgICAgICAgICBldmVudHMub25UZXh0dXJl
RnJhbWVDYXB0dXJlZChDYW1lcmEyU2Vzc2lvbi50aGlzLCBjYXB0dXJlRm9ybWF0LndpZHRoLAot
ICAgICAgICAgICAgICAgICAgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIG9lc1RleHR1cmVJZCwgdHJh
bnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wTnMpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIH0pOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBkZXZpY2Ugc3VjY2Vzc2Z1
bGx5IHN0YXJ0ZWQuIik7Ci0gICAgICBjYWxsYmFjay5vbkRvbmUoQ2FtZXJhMlNlc3Npb24udGhp
cyk7Ci0gICAgfQotCi0gICAgLy8gUHJlZmVycyBvcHRpY2FsIHN0YWJpbGl6YXRpb24gb3ZlciBz
b2Z0d2FyZSBzdGFiaWxpemF0aW9uIGlmIGF2YWlsYWJsZS4gT25seSBlbmFibGVzIG9uZSBvZgot
ICAgIC8vIHRoZSBzdGFiaWxpemF0aW9uIG1vZGVzIGF0IGEgdGltZSBiZWNhdXNlIGhhdmluZyBi
b3RoIGVuYWJsZWQgY2FuIGNhdXNlIHN0cmFuZ2UgcmVzdWx0cy4KLSAgICBwcml2YXRlIHZvaWQg
Y2hvb3NlU3RhYmlsaXphdGlvbk1vZGUoQ2FwdHVyZVJlcXVlc3QuQnVpbGRlciBjYXB0dXJlUmVx
dWVzdEJ1aWxkZXIpIHsKLSAgICAgIGZpbmFsIGludFtdIGF2YWlsYWJsZU9wdGljYWxTdGFiaWxp
emF0aW9uID0gY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldCgKLSAgICAgICAgICBDYW1lcmFDaGFy
YWN0ZXJpc3RpY3MuTEVOU19JTkZPX0FWQUlMQUJMRV9PUFRJQ0FMX1NUQUJJTElaQVRJT04pOwot
ICAgICAgaWYgKGF2YWlsYWJsZU9wdGljYWxTdGFiaWxpemF0aW9uICE9IG51bGwpIHsKLSAgICAg
ICAgZm9yIChpbnQgbW9kZSA6IGF2YWlsYWJsZU9wdGljYWxTdGFiaWxpemF0aW9uKSB7Ci0gICAg
ICAgICAgaWYgKG1vZGUgPT0gQ2FwdHVyZVJlcXVlc3QuTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJ
T05fTU9ERV9PTikgewotICAgICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0
dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFLAotICAgICAgICAgICAg
ICAgIENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT04pOwot
ICAgICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5DT05U
Uk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERSwKLSAgICAgICAgICAgICAgICBDYXB0dXJlUmVx
dWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERV9PRkYpOwotICAgICAgICAgICAg
TG9nZ2luZy5kKFRBRywgIlVzaW5nIG9wdGljYWwgc3RhYmlsaXphdGlvbi4iKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIElm
IG5vIG9wdGljYWwgbW9kZSBpcyBhdmFpbGFibGUsIHRyeSBzb2Z0d2FyZS4KLSAgICAgIGZpbmFs
IGludFtdIGF2YWlsYWJsZVZpZGVvU3RhYmlsaXphdGlvbiA9IGNhbWVyYUNoYXJhY3RlcmlzdGlj
cy5nZXQoCi0gICAgICAgICAgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkNPTlRST0xfQVZBSUxBQkxF
X1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERVMpOwotICAgICAgZm9yIChpbnQgbW9kZSA6IGF2YWls
YWJsZVZpZGVvU3RhYmlsaXphdGlvbikgewotICAgICAgICBpZiAobW9kZSA9PSBDYXB0dXJlUmVx
dWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERV9PTikgewotICAgICAgICAgIGNh
cHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFC
SUxJWkFUSU9OX01PREUsCi0gICAgICAgICAgICAgIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklE
RU9fU1RBQklMSVpBVElPTl9NT0RFX09OKTsKLSAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxk
ZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREUsCi0g
ICAgICAgICAgICAgIENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01P
REVfT0ZGKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVXNpbmcgdmlkZW8gc3RhYmlsaXph
dGlvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIExv
Z2dpbmcuZChUQUcsICJTdGFiaWxpemF0aW9uIG5vdCBhdmFpbGFibGUuIik7Ci0gICAgfQotCi0g
ICAgcHJpdmF0ZSB2b2lkIGNob29zZUZvY3VzTW9kZShDYXB0dXJlUmVxdWVzdC5CdWlsZGVyIGNh
cHR1cmVSZXF1ZXN0QnVpbGRlcikgewotICAgICAgZmluYWwgaW50W10gYXZhaWxhYmxlRm9jdXNN
b2RlcyA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuQ09OVFJPTF9BRl9BVkFJTEFCTEVfTU9ERVMpOwotICAgICAgZm9yIChpbnQgbW9k
ZSA6IGF2YWlsYWJsZUZvY3VzTW9kZXMpIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gQ2FwdHVyZVJl
cXVlc3QuQ09OVFJPTF9BRl9NT0RFX0NPTlRJTlVPVVNfVklERU8pIHsKLSAgICAgICAgICBjYXB0
dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KAotICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5DT05U
Uk9MX0FGX01PREUsIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1ZJ
REVPKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVXNpbmcgY29udGludW91cyB2aWRlbyBh
dXRvLWZvY3VzLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgTG9nZ2luZy5kKFRBRywgIkF1dG8tZm9jdXMgaXMgbm90IGF2YWlsYWJsZS4iKTsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIENhbWVyYUNhcHR1cmVDYWxsYmFjayBleHRlbmRzIENh
bWVyYUNhcHR1cmVTZXNzaW9uLkNhcHR1cmVDYWxsYmFjayB7Ci0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgb25DYXB0dXJlRmFpbGVkKAotICAgICAgICBDYW1lcmFDYXB0dXJlU2Vzc2lv
biBzZXNzaW9uLCBDYXB0dXJlUmVxdWVzdCByZXF1ZXN0LCBDYXB0dXJlRmFpbHVyZSBmYWlsdXJl
KSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FwdHVyZSBmYWlsZWQ6ICIgKyBmYWlsdXJlKTsK
LSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlKENyZWF0ZVNlc3Npb25D
YWxsYmFjayBjYWxsYmFjaywgRXZlbnRzIGV2ZW50cywKLSAgICAgIENvbnRleHQgYXBwbGljYXRp
b25Db250ZXh0LCBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXIsCi0gICAgICBTdXJmYWNlVGV4
dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3RyaW5nIGNhbWVyYUlkLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsCi0gICAgICBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgbmV3IENhbWVyYTJT
ZXNzaW9uKGNhbGxiYWNrLCBldmVudHMsIGFwcGxpY2F0aW9uQ29udGV4dCwgY2FtZXJhTWFuYWdl
ciwgc3VyZmFjZVRleHR1cmVIZWxwZXIsCi0gICAgICAgIGNhbWVyYUlkLCB3aWR0aCwgaGVpZ2h0
LCBmcmFtZXJhdGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBDYW1lcmEyU2Vzc2lvbihDcmVhdGVTZXNz
aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIEV2ZW50cyBldmVudHMsIENvbnRleHQgYXBwbGljYXRpb25D
b250ZXh0LAotICAgICAgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyLCBTdXJmYWNlVGV4dHVy
ZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3RyaW5nIGNhbWVyYUlkLAotICAgICAgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywg
IkNyZWF0ZSBuZXcgY2FtZXJhMiBzZXNzaW9uIG9uIGNhbWVyYSAiICsgY2FtZXJhSWQpOwotCi0g
ICAgY29uc3RydWN0aW9uVGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0KLSAgICB0aGlzLmNh
bWVyYVRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwotICAgIHRoaXMuY2FsbGJhY2sgPSBj
YWxsYmFjazsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgICB0aGlzLmFwcGxpY2F0aW9u
Q29udGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICB0aGlzLmNhbWVyYU1hbmFnZXIgPSBj
YW1lcmFNYW5hZ2VyOwotICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4
dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYUlkID0gY2FtZXJhSWQ7Ci0gICAgdGhpcy53aWR0
aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHRoaXMuZnJhbWVyYXRl
ID0gZnJhbWVyYXRlOwotCi0gICAgc3RhcnQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFy
dCgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
c3RhcnQiKTsKLQotICAgIHRyeSB7Ci0gICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MgPSBjYW1l
cmFNYW5hZ2VyLmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhjYW1lcmFJZCk7Ci0gICAgfSBjYXRj
aCAoZmluYWwgQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJn
ZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoKTogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0g
ICAgY2FtZXJhT3JpZW50YXRpb24gPSBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNo
YXJhY3RlcmlzdGljcy5TRU5TT1JfT1JJRU5UQVRJT04pOwotICAgIGlzQ2FtZXJhRnJvbnRGYWNp
bmcgPSBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5MRU5T
X0ZBQ0lORykKLSAgICAgICAgPT0gQ2FtZXJhTWV0YWRhdGEuTEVOU19GQUNJTkdfRlJPTlQ7Ci0K
LSAgICBmaW5kQ2FwdHVyZUZvcm1hdCgpOwotICAgIG9wZW5DYW1lcmEoKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBmaW5kQ2FwdHVyZUZvcm1hdCgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJl
YWQoKTsKLQotICAgIFJhbmdlPEludGVnZXI+W10gZnBzUmFuZ2VzID0KLSAgICAgICAgY2FtZXJh
Q2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuQ09OVFJPTF9BRV9BVkFJ
TEFCTEVfVEFSR0VUX0ZQU19SQU5HRVMpOwotICAgIGZwc1VuaXRGYWN0b3IgPSBDYW1lcmEyRW51
bWVyYXRvci5nZXRGcHNVbml0RmFjdG9yKGZwc1Jhbmdlcyk7Ci0gICAgTGlzdDxDYXB0dXJlRm9y
bWF0LkZyYW1lcmF0ZVJhbmdlPiBmcmFtZXJhdGVSYW5nZXMgPQotICAgICAgICBDYW1lcmEyRW51
bWVyYXRvci5jb252ZXJ0RnJhbWVyYXRlcyhmcHNSYW5nZXMsIGZwc1VuaXRGYWN0b3IpOwotICAg
IExpc3Q8U2l6ZT4gc2l6ZXMgPSBDYW1lcmEyRW51bWVyYXRvci5nZXRTdXBwb3J0ZWRTaXplcyhj
YW1lcmFDaGFyYWN0ZXJpc3RpY3MpOwotICAgIExvZ2dpbmcuZChUQUcsICJBdmFpbGFibGUgcHJl
dmlldyBzaXplczogIiArIHNpemVzKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIGZw
cyByYW5nZXM6ICIgKyBmcmFtZXJhdGVSYW5nZXMpOwotCi0gICAgaWYgKGZyYW1lcmF0ZVJhbmdl
cy5pc0VtcHR5KCkgfHwgc2l6ZXMuaXNFbXB0eSgpKSB7Ci0gICAgICByZXBvcnRFcnJvcigiTm8g
c3VwcG9ydGVkIGNhcHR1cmUgZm9ybWF0cy4iKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBDYXB0dXJl
Rm9ybWF0LkZyYW1lcmF0ZVJhbmdlIGJlc3RGcHNSYW5nZSA9Ci0gICAgICAgIENhbWVyYUVudW1l
cmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2UoZnJhbWVyYXRl
UmFuZ2VzLCBmcmFtZXJhdGUpOwotCi0gICAgZmluYWwgU2l6ZSBiZXN0U2l6ZSA9IENhbWVyYUVu
dW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkU2l6ZShzaXplcywgd2lkdGgsIGhl
aWdodCk7Ci0gICAgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLnJlcG9ydENhbWVyYVJlc29sdXRp
b24oY2FtZXJhMlJlc29sdXRpb25IaXN0b2dyYW0sIGJlc3RTaXplKTsKLQotICAgIGNhcHR1cmVG
b3JtYXQgPSBuZXcgQ2FwdHVyZUZvcm1hdChiZXN0U2l6ZS53aWR0aCwgYmVzdFNpemUuaGVpZ2h0
LCBiZXN0RnBzUmFuZ2UpOwotICAgIExvZ2dpbmcuZChUQUcsICJVc2luZyBjYXB0dXJlIGZvcm1h
dDogIiArIGNhcHR1cmVGb3JtYXQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG9wZW5DYW1lcmEo
KSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAi
T3BlbmluZyBjYW1lcmEgIiArIGNhbWVyYUlkKTsKLSAgICBldmVudHMub25DYW1lcmFPcGVuaW5n
KCk7Ci0KLSAgICB0cnkgewotICAgICAgY2FtZXJhTWFuYWdlci5vcGVuQ2FtZXJhKGNhbWVyYUlk
LCBuZXcgQ2FtZXJhU3RhdGVDYWxsYmFjaygpLCBjYW1lcmFUaHJlYWRIYW5kbGVyKTsKLSAgICB9
IGNhdGNoIChDYW1lcmFBY2Nlc3NFeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIkZh
aWxlZCB0byBvcGVuIGNhbWVyYTogIiArIGUpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhbWVyYTIg
c2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNhbWVyYUlkKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJl
YWQoKTsKLSAgICBpZiAoc3RhdGUgIT0gU2Vzc2lvblN0YXRlLlNUT1BQRUQpIHsKLSAgICAgIGZp
bmFsIGxvbmcgc3RvcFN0YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgc3RhdGUg
PSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAgICAgIHN0b3BJbnRlcm5hbCgpOwotICAgICAgZmlu
YWwgaW50IHN0b3BUaW1lTXMgPSAoaW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhT
eXN0ZW0ubmFub1RpbWUoKSAtIHN0b3BTdGFydFRpbWUpOwotICAgICAgY2FtZXJhMlN0b3BUaW1l
TXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0b3BUaW1lTXMpOwotICAgIH0KLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBzdG9wSW50ZXJuYWwoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgaW50ZXJu
YWwiKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLQotICAgIGlmIChjYXB0dXJlU2Vzc2lvbiAhPSBudWxs
KSB7Ci0gICAgICBjYXB0dXJlU2Vzc2lvbi5jbG9zZSgpOwotICAgICAgY2FwdHVyZVNlc3Npb24g
PSBudWxsOwotICAgIH0KLSAgICBpZiAoc3VyZmFjZSAhPSBudWxsKSB7Ci0gICAgICBzdXJmYWNl
LnJlbGVhc2UoKTsKLSAgICAgIHN1cmZhY2UgPSBudWxsOwotICAgIH0KLSAgICBpZiAoY2FtZXJh
RGV2aWNlICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYURldmljZS5jbG9zZSgpOwotICAgICAgY2Ft
ZXJhRGV2aWNlID0gbnVsbDsKLSAgICB9Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBkb25l
Iik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3IoU3RyaW5nIGVycm9yKSB7Ci0g
ICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5lKFRBRywgIkVycm9yOiAi
ICsgZXJyb3IpOwotCi0gICAgZmluYWwgYm9vbGVhbiBzdGFydEZhaWx1cmUgPSAoY2FwdHVyZVNl
c3Npb24gPT0gbnVsbCk7Ci0gICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAgICBz
dG9wSW50ZXJuYWwoKTsKLSAgICBpZiAoc3RhcnRGYWlsdXJlKSB7Ci0gICAgICBjYWxsYmFjay5v
bkZhaWx1cmUoZXJyb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICBldmVudHMub25DYW1lcmFFcnJv
cih0aGlzLCBlcnJvcik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RGV2aWNlT3Jp
ZW50YXRpb24oKSB7Ci0gICAgaW50IG9yaWVudGF0aW9uID0gMDsKLQotICAgIFdpbmRvd01hbmFn
ZXIgd20gPSAoV2luZG93TWFuYWdlcikgYXBwbGljYXRpb25Db250ZXh0LmdldFN5c3RlbVNlcnZp
Y2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAgc3dpdGNoICh3bS5nZXREZWZhdWx0RGlz
cGxheSgpLmdldFJvdGF0aW9uKCkpIHsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl85MDoK
LSAgICAgICAgb3JpZW50YXRpb24gPSA5MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1
cmZhY2UuUk9UQVRJT05fMTgwOgotICAgICAgICBvcmllbnRhdGlvbiA9IDE4MDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMjcwOgotICAgICAgICBvcmllbnRh
dGlvbiA9IDI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05f
MDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIHJldHVybiBvcmllbnRhdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgaW50
IGdldEZyYW1lT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IHJvdGF0aW9uID0gZ2V0RGV2aWNlT3Jp
ZW50YXRpb24oKTsKLSAgICBpZiAoIWlzQ2FtZXJhRnJvbnRGYWNpbmcpIHsKLSAgICAgIHJvdGF0
aW9uID0gMzYwIC0gcm90YXRpb247Ci0gICAgfQotICAgIHJldHVybiAoY2FtZXJhT3JpZW50YXRp
b24gKyByb3RhdGlvbikgJSAzNjA7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc09uQ2Ft
ZXJhVGhyZWFkKCkgewotICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRo
cmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZCIpOwotICAgIH0KLSAgfQotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFDYXB0dXJlci5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQ2FtZXJhQ2FwdHVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFDYXB0dXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
NDQzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxl
cjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7
Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgYWJzdHJhY3QgY2xh
c3MgQ2FtZXJhQ2FwdHVyZXIgaW1wbGVtZW50cyBDYW1lcmFWaWRlb0NhcHR1cmVyIHsKLSAgZW51
bSBTd2l0Y2hTdGF0ZSB7Ci0gICAgSURMRSwgLy8gTm8gc3dpdGNoIHJlcXVlc3RlZC4KLSAgICBQ
RU5ESU5HLCAvLyBXYWl0aW5nIGZvciBwcmV2aW91cyBjYXB0dXJlIHNlc3Npb24gdG8gb3Blbi4K
LSAgICBJTl9QUk9HUkVTUywgLy8gV2FpdGluZyBmb3IgbmV3IHN3aXRjaGVkIGNhcHR1cmUgc2Vz
c2lvbiB0byBzdGFydC4KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiQ2FtZXJhQ2FwdHVyZXIiOwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTUFYX09QRU5f
Q0FNRVJBX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE9QRU5fQ0FN
RVJBX0RFTEFZX01TID0gNTAwOwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgT1BFTl9DQU1F
UkFfVElNRU9VVCA9IDEwMDAwOwotCi0gIHByaXZhdGUgZmluYWwgQ2FtZXJhRW51bWVyYXRvciBj
YW1lcmFFbnVtZXJhdG9yOwotICBwcml2YXRlIGZpbmFsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZl
bnRzSGFuZGxlcjsKLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIHVpVGhyZWFkSGFuZGxlcjsKLQot
ICBwcml2YXRlIGZpbmFsIENhbWVyYVNlc3Npb24uQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNyZWF0
ZVNlc3Npb25DYWxsYmFjayA9Ci0gICAgICBuZXcgQ2FtZXJhU2Vzc2lvbi5DcmVhdGVTZXNzaW9u
Q2FsbGJhY2soKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkRv
bmUoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKSB7Ci0gICAgICAgICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0ZSBzZXNzaW9uIGRvbmUiKTsK
LSAgICAgICAgICB1aVRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKG9wZW5DYW1lcmFUaW1l
b3V0UnVubmFibGUpOwotICAgICAgICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAg
ICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKHRydWUgLyogc3VjY2Vz
cyAqLyk7Ci0gICAgICAgICAgICBzZXNzaW9uT3BlbmluZyA9IGZhbHNlOwotICAgICAgICAgICAg
Y3VycmVudFNlc3Npb24gPSBzZXNzaW9uOwotICAgICAgICAgICAgY2FtZXJhU3RhdGlzdGljcyA9
IG5ldyBDYW1lcmFTdGF0aXN0aWNzKHN1cmZhY2VIZWxwZXIsIGV2ZW50c0hhbmRsZXIpOwotICAg
ICAgICAgICAgZmlyc3RGcmFtZU9ic2VydmVkID0gZmFsc2U7Ci0gICAgICAgICAgICBzdGF0ZUxv
Y2subm90aWZ5QWxsKCk7Ci0KLSAgICAgICAgICAgIGlmIChzd2l0Y2hTdGF0ZSA9PSBTd2l0Y2hT
dGF0ZS5JTl9QUk9HUkVTUykgewotICAgICAgICAgICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxl
ciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVy
YVN3aXRjaERvbmUoY2FtZXJhRW51bWVyYXRvci5pc0Zyb250RmFjaW5nKGNhbWVyYU5hbWUpKTsK
LSAgICAgICAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyID0gbnVsbDsKLSAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLklETEU7Ci0gICAg
ICAgICAgICB9IGVsc2UgaWYgKHN3aXRjaFN0YXRlID09IFN3aXRjaFN0YXRlLlBFTkRJTkcpIHsK
LSAgICAgICAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5JRExFOwotICAgICAgICAg
ICAgICBzd2l0Y2hDYW1lcmFJbnRlcm5hbChzd2l0Y2hFdmVudHNIYW5kbGVyKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgcHVibGljIHZvaWQgb25GYWlsdXJlKFN0cmluZyBlcnJvcikgewotICAgICAgICAgIGNoZWNr
SXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgICAgIHVpVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxs
YmFja3Mob3BlbkNhbWVyYVRpbWVvdXRSdW5uYWJsZSk7Ci0gICAgICAgICAgc3luY2hyb25pemVk
IChzdGF0ZUxvY2spIHsKLSAgICAgICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0
YXJ0ZWQoZmFsc2UgLyogc3VjY2VzcyAqLyk7Ci0gICAgICAgICAgICBvcGVuQXR0ZW1wdHNSZW1h
aW5pbmctLTsKLQotICAgICAgICAgICAgaWYgKG9wZW5BdHRlbXB0c1JlbWFpbmluZyA8PSAwKSB7
Ci0gICAgICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJPcGVuaW5nIGNhbWVyYSBmYWlsZWQsIHBh
c3Npbmc6ICIgKyBlcnJvcik7Ci0gICAgICAgICAgICAgIHNlc3Npb25PcGVuaW5nID0gZmFsc2U7
Ci0gICAgICAgICAgICAgIHN0YXRlTG9jay5ub3RpZnlBbGwoKTsKLQotICAgICAgICAgICAgICBp
ZiAoc3dpdGNoU3RhdGUgIT0gU3dpdGNoU3RhdGUuSURMRSkgewotICAgICAgICAgICAgICAgIGlm
IChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgIHN3aXRj
aEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAg
ICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5JRExFOwotICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKGVycm9yKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJPcGVu
aW5nIGNhbWVyYSBmYWlsZWQsIHJldHJ5OiAiICsgZXJyb3IpOwotCi0gICAgICAgICAgICAgIGNy
ZWF0ZVNlc3Npb25JbnRlcm5hbChPUEVOX0NBTUVSQV9ERUxBWV9NUyk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9OwotCi0gIHByaXZhdGUgZmluYWwgQ2Ft
ZXJhU2Vzc2lvbi5FdmVudHMgY2FtZXJhU2Vzc2lvbkV2ZW50c0hhbmRsZXIgPSBuZXcgQ2FtZXJh
U2Vzc2lvbi5FdmVudHMoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1l
cmFPcGVuaW5nKCkgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5j
aHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICBpZiAoY3VycmVudFNlc3Npb24gIT0gbnVs
bCkgewotICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJvbkNhbWVyYU9wZW5pbmcgd2hpbGUgc2Vz
c2lvbiB3YXMgb3Blbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
ZXZlbnRzSGFuZGxlci5vbkNhbWVyYU9wZW5pbmcoY2FtZXJhTmFtZSk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFFcnJvcihDYW1lcmFT
ZXNzaW9uIHNlc3Npb24sIFN0cmluZyBlcnJvcikgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICBpZiAoc2Vz
c2lvbiAhPSBjdXJyZW50U2Vzc2lvbikgewotICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJvbkNh
bWVyYUVycm9yIGZyb20gYW5vdGhlciBzZXNzaW9uOiAiICsgZXJyb3IpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoZXJy
b3IpOwotICAgICAgICBzdG9wQ2FwdHVyZSgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRGlzY29ubmVjdGVkKENhbWVyYVNlc3Npb24g
c2Vzc2lvbikgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJv
bml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICBpZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lv
bikgewotICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJvbkNhbWVyYURpc2Nvbm5lY3RlZCBmcm9t
IGFub3RoZXIgc2Vzc2lvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYURpc2Nvbm5lY3RlZCgpOwotICAgICAgICBzdG9wQ2Fw
dHVyZSgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IG9uQ2FtZXJhQ2xvc2VkKENhbWVyYVNlc3Npb24gc2Vzc2lvbikgewotICAgICAgY2hlY2tJc09u
Q2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAg
ICBpZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lvbiAmJiBjdXJyZW50U2Vzc2lvbiAhPSBudWxs
KSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIm9uQ2FtZXJhQ2xvc2VkIGZyb20gYW5vdGhl
ciBzZXNzaW9uLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBldmVu
dHNIYW5kbGVyLm9uQ2FtZXJhQ2xvc2VkKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgb25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAg
Q2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBieXRlW10gZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFU
aHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgIGlmIChz
ZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9uKSB7Ci0gICAgICAgICAgTG9nZ2luZy53KFRBRywgIm9u
Qnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQgZnJvbSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmICghZmlyc3RGcmFtZU9ic2VydmVkKSB7
Ci0gICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkZpcnN0RnJhbWVBdmFpbGFibGUoKTsKLSAgICAg
ICAgICBmaXJzdEZyYW1lT2JzZXJ2ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhbWVy
YVN0YXRpc3RpY3MuYWRkRnJhbWUoKTsKLSAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkJ5dGVC
dWZmZXJGcmFtZUNhcHR1cmVkKGRhdGEsIHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uLCB0aW1lc3Rh
bXApOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
VGV4dHVyZUZyYW1lQ2FwdHVyZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsCi0gICAgICAgIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0
cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKSB7Ci0gICAgICBjaGVja0lzT25DYW1l
cmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgIGlm
IChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9uKSB7Ci0gICAgICAgICAgTG9nZ2luZy53KFRBRywg
Im9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQgZnJvbSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAg
ICAgc3VyZmFjZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFmaXJzdEZyYW1lT2JzZXJ2ZWQpIHsKLSAgICAgICAg
ICBldmVudHNIYW5kbGVyLm9uRmlyc3RGcmFtZUF2YWlsYWJsZSgpOwotICAgICAgICAgIGZpcnN0
RnJhbWVPYnNlcnZlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FtZXJhU3RhdGlzdGlj
cy5hZGRGcmFtZSgpOwotICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2Fw
dHVyZWQoCi0gICAgICAgICAgICB3aWR0aCwgaGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRyYW5zZm9y
bU1hdHJpeCwgcm90YXRpb24sIHRpbWVzdGFtcCk7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0g
IHByaXZhdGUgZmluYWwgUnVubmFibGUgb3BlbkNhbWVyYVRpbWVvdXRSdW5uYWJsZSA9IG5ldyBS
dW5uYWJsZSgpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoIkNhbWVyYSBmYWlsZWQgdG8gc3RhcnQgd2l0
aGluIHRpbWVvdXQuIik7Ci0gICAgfQotICB9OwotCi0gIC8vIEluaXRpYWxpemVkIG9uIGluaXRp
YWxpemUKLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBwcml2YXRlIEhhbmRsZXIg
Y2FtZXJhVGhyZWFkSGFuZGxlcjsKLSAgcHJpdmF0ZSBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4
dDsKLSAgcHJpdmF0ZSBDYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIHByaXZh
dGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZUhlbHBlcjsKLQotICBwcml2YXRlIGZpbmFs
IE9iamVjdCBzdGF0ZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBzZXNz
aW9uT3BlbmluZzsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBDYW1lcmFT
ZXNzaW9uIGN1cnJlbnRTZXNzaW9uOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2
YXRlIFN0cmluZyBjYW1lcmFOYW1lOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2
YXRlIGludCB3aWR0aDsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBpbnQg
aGVpZ2h0OyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2YXRlIGludCBmcmFtZXJh
dGU7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgaW50IG9wZW5BdHRlbXB0
c1JlbWFpbmluZzsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBTd2l0Y2hT
dGF0ZSBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRlLklETEU7IC8qIGd1YXJkZWQgYnkgc3RhdGVM
b2NrICovCi0gIHByaXZhdGUgQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVy
OyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICAvLyBWYWxpZCBmcm9tIG9uRG9uZSBjYWxs
IHVudGlsIHN0b3BDYXB0dXJlLCBvdGhlcndpc2UgbnVsbC4KLSAgcHJpdmF0ZSBDYW1lcmFTdGF0
aXN0aWNzIGNhbWVyYVN0YXRpc3RpY3M7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHBy
aXZhdGUgYm9vbGVhbiBmaXJzdEZyYW1lT2JzZXJ2ZWQ7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2Nr
ICovCi0KLSAgcHVibGljIENhbWVyYUNhcHR1cmVyKAotICAgICAgU3RyaW5nIGNhbWVyYU5hbWUs
IENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlciwgQ2FtZXJhRW51bWVyYXRvciBjYW1l
cmFFbnVtZXJhdG9yKSB7Ci0gICAgaWYgKGV2ZW50c0hhbmRsZXIgPT0gbnVsbCkgewotICAgICAg
ZXZlbnRzSGFuZGxlciA9IG5ldyBDYW1lcmFFdmVudHNIYW5kbGVyKCkgewotICAgICAgICBAT3Zl
cnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFFcnJvcihTdHJpbmcgZXJyb3JEZXNj
cmlwdGlvbikge30KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2Ft
ZXJhRGlzY29ubmVjdGVkKCkge30KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2
b2lkIG9uQ2FtZXJhRnJlZXplZChTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbikge30KLSAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhT3BlbmluZyhTdHJpbmcgY2Ft
ZXJhTmFtZSkge30KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRmly
c3RGcmFtZUF2YWlsYWJsZSgpIHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMg
dm9pZCBvbkNhbWVyYUNsb3NlZCgpIHt9Ci0gICAgICB9OwotICAgIH0KLQotICAgIHRoaXMuZXZl
bnRzSGFuZGxlciA9IGV2ZW50c0hhbmRsZXI7Ci0gICAgdGhpcy5jYW1lcmFFbnVtZXJhdG9yID0g
Y2FtZXJhRW51bWVyYXRvcjsKLSAgICB0aGlzLmNhbWVyYU5hbWUgPSBjYW1lcmFOYW1lOwotICAg
IHVpVGhyZWFkSGFuZGxlciA9IG5ldyBIYW5kbGVyKExvb3Blci5nZXRNYWluTG9vcGVyKCkpOwot
Ci0gICAgZmluYWwgU3RyaW5nW10gZGV2aWNlTmFtZXMgPSBjYW1lcmFFbnVtZXJhdG9yLmdldERl
dmljZU5hbWVzKCk7Ci0KLSAgICBpZiAoZGV2aWNlTmFtZXMubGVuZ3RoID09IDApIHsKLSAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBjYW1lcmFzIGF0dGFjaGVkLiIpOwotICAg
IH0KLSAgICBpZiAoIUFycmF5cy5hc0xpc3QoZGV2aWNlTmFtZXMpLmNvbnRhaW5zKHRoaXMuY2Ft
ZXJhTmFtZSkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0g
ICAgICAgICAgIkNhbWVyYSBuYW1lICIgKyB0aGlzLmNhbWVyYU5hbWUgKyAiIGRvZXMgbm90IG1h
dGNoIGFueSBrbm93biBjYW1lcmEgZGV2aWNlLiIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIENhcHR1cmVy
T2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcikgewotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0
ID0gYXBwbGljYXRpb25Db250ZXh0OwotICAgIHRoaXMuY2FwdHVyZXJPYnNlcnZlciA9IGNhcHR1
cmVyT2JzZXJ2ZXI7Ci0gICAgdGhpcy5zdXJmYWNlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxw
ZXI7Ci0gICAgdGhpcy5jYW1lcmFUaHJlYWRIYW5kbGVyID0KLSAgICAgICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIgPT0gbnVsbCA/IG51bGwgOiBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVy
KCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3RhcnRDYXB0dXJlKGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJz
dGFydENhcHR1cmU6ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZSk7
Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgaWYgKHNlc3Npb25PcGVu
aW5nIHx8IGN1cnJlbnRTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywg
IlNlc3Npb24gYWxyZWFkeSBvcGVuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAg
ICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
ICB0aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKLQotICAgICAgc2Vzc2lvbk9wZW5pbmcgPSB0
cnVlOwotICAgICAgb3BlbkF0dGVtcHRzUmVtYWluaW5nID0gTUFYX09QRU5fQ0FNRVJBX0FUVEVN
UFRTOwotICAgICAgY3JlYXRlU2Vzc2lvbkludGVybmFsKDApOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBjcmVhdGVTZXNzaW9uSW50ZXJuYWwoaW50IGRlbGF5TXMpIHsKLSAgICB1aVRo
cmVhZEhhbmRsZXIucG9zdERlbGF5ZWQob3BlbkNhbWVyYVRpbWVvdXRSdW5uYWJsZSwgZGVsYXlN
cyArIE9QRU5fQ0FNRVJBX1RJTUVPVVQpOwotICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdERl
bGF5ZWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIGNyZWF0ZUNhbWVyYVNlc3Npb24oY3JlYXRlU2Vzc2lvbkNhbGxi
YWNrLCBjYW1lcmFTZXNzaW9uRXZlbnRzSGFuZGxlciwgYXBwbGljYXRpb25Db250ZXh0LAotICAg
ICAgICAgICAgc3VyZmFjZUhlbHBlciwgY2FtZXJhTmFtZSwgd2lkdGgsIGhlaWdodCwgZnJhbWVy
YXRlKTsKLSAgICAgIH0KLSAgICB9LCBkZWxheU1zKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBzdG9wQ2FwdHVyZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0
dXJlIik7Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgd2hpbGUgKHNl
c3Npb25PcGVuaW5nKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmU6IFdh
aXRpbmcgZm9yIHNlc3Npb24gdG8gb3BlbiIpOwotICAgICAgICBUaHJlYWRVdGlscy53YWl0VW5p
bnRlcnJ1cHRpYmx5KHN0YXRlTG9jayk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjdXJyZW50U2Vz
c2lvbiAhPSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmU6IE51
bGxpbmcgc2Vzc2lvbiIpOwotICAgICAgICBjYW1lcmFTdGF0aXN0aWNzLnJlbGVhc2UoKTsKLSAg
ICAgICAgY2FtZXJhU3RhdGlzdGljcyA9IG51bGw7Ci0gICAgICAgIGZpbmFsIENhbWVyYVNlc3Np
b24gb2xkU2Vzc2lvbiA9IGN1cnJlbnRTZXNzaW9uOwotICAgICAgICBjYW1lcmFUaHJlYWRIYW5k
bGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIG9sZFNlc3Npb24uc3RvcCgpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICAgIGN1cnJlbnRTZXNzaW9uID0gbnVsbDsKLSAg
ICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RvcHBlZCgpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgY2FwdHVyZTogTm8gc2Vzc2lvbiBvcGVu
Iik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgY2FwdHVyZSBk
b25lIik7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY2hhbmdlQ2FwdHVyZUZv
cm1hdChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAiY2hhbmdlQ2FwdHVyZUZvcm1hdDogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsg
IkAiICsgZnJhbWVyYXRlKTsKLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAg
c3RvcENhcHR1cmUoKTsKLSAgICAgIHN0YXJ0Q2FwdHVyZSh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJh
dGUpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkg
ewotICAgIExvZ2dpbmcuZChUQUcsICJkaXNwb3NlIik7Ci0gICAgc3RvcENhcHR1cmUoKTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzd2l0Y2hDYW1lcmEoZmluYWwgQ2FtZXJh
U3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywg
InN3aXRjaENhbWVyYSIpOwotICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdChuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgc3dpdGNoQ2FtZXJhSW50ZXJuYWwoc3dpdGNoRXZlbnRzSGFuZGxlcik7Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNTY3JlZW5jYXN0
KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHByaW50U3RhY2tU
cmFjZSgpIHsKLSAgICBUaHJlYWQgY2FtZXJhVGhyZWFkID0gbnVsbDsKLSAgICBpZiAoY2FtZXJh
VGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmFUaHJlYWQgPSBjYW1lcmFUaHJl
YWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpOwotICAgIH0KLSAgICBpZiAoY2FtZXJh
VGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNrVHJhY2VFbGVtZW50W10gY2FtZXJhU3RhY2tU
cmFjZSA9IGNhbWVyYVRocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICBpZiAoY2FtZXJhU3Rh
Y2tUcmFjZS5sZW5ndGggPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmFDYXB0
dXJlciBzdGFjayB0cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCB0cmFj
ZUVsZW0gOiBjYW1lcmFTdGFja1RyYWNlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgdHJh
Y2VFbGVtLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHN3aXRjaENhbWVyYUludGVybmFsKGZpbmFsIENhbWVyYVN3aXRjaEhhbmRs
ZXIgc3dpdGNoRXZlbnRzSGFuZGxlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1l
cmEgaW50ZXJuYWwiKTsKLQotICAgIGZpbmFsIFN0cmluZ1tdIGRldmljZU5hbWVzID0gY2FtZXJh
RW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpOwotCi0gICAgaWYgKGRldmljZU5hbWVzLmxlbmd0
aCA8IDIpIHsKLSAgICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAg
ICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJObyBjYW1lcmEgdG8g
c3dpdGNoIHRvLiIpOwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN5bmNo
cm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICBpZiAoc3dpdGNoU3RhdGUgIT0gU3dpdGNoU3Rh
dGUuSURMRSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhIHN3aXRjaElu
UHJvZ3Jlc3MiKTsKLSAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewot
ICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiQ2FtZXJh
IHN3aXRjaCBhbHJlYWR5IGluIHByb2dyZXNzLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgIH0KLQotICAgICAgaWYgKCFzZXNzaW9uT3BlbmluZyAmJiBjdXJyZW50U2Vzc2lv
biA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmE6IE5vIHNl
c3Npb24gb3BlbiIpOwotICAgICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7
Ci0gICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJDYW1l
cmEgaXMgbm90IHJ1bm5pbmcuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotCi0gICAgICB0aGlzLnN3aXRjaEV2ZW50c0hhbmRsZXIgPSBzd2l0Y2hFdmVudHNIYW5kbGVy
OwotICAgICAgaWYgKHNlc3Npb25PcGVuaW5nKSB7Ci0gICAgICAgIHN3aXRjaFN0YXRlID0gU3dp
dGNoU3RhdGUuUEVORElORzsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5JTl9QUk9HUkVTUzsKLSAgICAgIH0KLQotICAg
ICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYTogU3RvcHBpbmcgc2Vzc2lvbiIpOwotICAg
ICAgY2FtZXJhU3RhdGlzdGljcy5yZWxlYXNlKCk7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNzID0g
bnVsbDsKLSAgICAgIGZpbmFsIENhbWVyYVNlc3Npb24gb2xkU2Vzc2lvbiA9IGN1cnJlbnRTZXNz
aW9uOwotICAgICAgY2FtZXJhVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBv
bGRTZXNzaW9uLnN0b3AoKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBjdXJyZW50U2Vz
c2lvbiA9IG51bGw7Ci0KLSAgICAgIGludCBjYW1lcmFOYW1lSW5kZXggPSBBcnJheXMuYXNMaXN0
KGRldmljZU5hbWVzKS5pbmRleE9mKGNhbWVyYU5hbWUpOwotICAgICAgY2FtZXJhTmFtZSA9IGRl
dmljZU5hbWVzWyhjYW1lcmFOYW1lSW5kZXggKyAxKSAlIGRldmljZU5hbWVzLmxlbmd0aF07Ci0K
LSAgICAgIHNlc3Npb25PcGVuaW5nID0gdHJ1ZTsKLSAgICAgIG9wZW5BdHRlbXB0c1JlbWFpbmlu
ZyA9IDE7Ci0gICAgICBjcmVhdGVTZXNzaW9uSW50ZXJuYWwoMCk7Ci0gICAgfQotICAgIExvZ2dp
bmcuZChUQUcsICJzd2l0Y2hDYW1lcmEgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNo
ZWNrSXNPbkNhbWVyYVRocmVhZCgpIHsKLSAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAh
PSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAiQ2hlY2sgaXMgb24gY2FtZXJhIHRocmVhZCBmYWlsZWQuIik7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm90IG9uIGNhbWVyYSB0aHJlYWQuIik7Ci0g
ICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0cmluZyBnZXRDYW1lcmFOYW1lKCkgewotICAgIHN5
bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICByZXR1cm4gY2FtZXJhTmFtZTsKLSAgICB9
Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDYW1lcmFTZXNzaW9uKAot
ICAgICAgQ2FtZXJhU2Vzc2lvbi5DcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNh
bGxiYWNrLCBDYW1lcmFTZXNzaW9uLkV2ZW50cyBldmVudHMsCi0gICAgICBDb250ZXh0IGFwcGxp
Y2F0aW9uQ29udGV4dCwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIs
IFN0cmluZyBjYW1lcmFOYW1lLAotICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJh
bWVyYXRlKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25BbmRy
b2lkLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlv
bkFuZHJvaWQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1l
cmFFbnVtZXJhdGlvbkFuZHJvaWQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIwNyArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0
aWMgamF2YS5sYW5nLk1hdGguYWJzOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZv
cm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21w
YXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuTWV0cmlj
cy5IaXN0b2dyYW07Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMg
Y2xhc3MgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkIHsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMg
U3RyaW5nIFRBRyA9ICJDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQiOwotCi0gIHN0YXRpYyBmaW5h
bCBBcnJheUxpc3Q8U2l6ZT4gQ09NTU9OX1JFU09MVVRJT05TID0gbmV3IEFycmF5TGlzdDxTaXpl
PihBcnJheXMuYXNMaXN0KAotICAgICAgLy8gMCwgVW5rbm93biByZXNvbHV0aW9uCi0gICAgICBu
ZXcgU2l6ZSgxNjAsIDEyMCksIC8vIDEsIFFRVkdBCi0gICAgICBuZXcgU2l6ZSgyNDAsIDE2MCks
IC8vIDIsIEhRVkdBCi0gICAgICBuZXcgU2l6ZSgzMjAsIDI0MCksIC8vIDMsIFFWR0EKLSAgICAg
IG5ldyBTaXplKDQwMCwgMjQwKSwgLy8gNCwgV1FWR0EKLSAgICAgIG5ldyBTaXplKDQ4MCwgMzIw
KSwgLy8gNSwgSFZHQQotICAgICAgbmV3IFNpemUoNjQwLCAzNjApLCAvLyA2LCBuSEQKLSAgICAg
IG5ldyBTaXplKDY0MCwgNDgwKSwgLy8gNywgVkdBCi0gICAgICBuZXcgU2l6ZSg3NjgsIDQ4MCks
IC8vIDgsIFdWR0EKLSAgICAgIG5ldyBTaXplKDg1NCwgNDgwKSwgLy8gOSwgRldWR0EKLSAgICAg
IG5ldyBTaXplKDgwMCwgNjAwKSwgLy8gMTAsIFNWR0EKLSAgICAgIG5ldyBTaXplKDk2MCwgNTQw
KSwgLy8gMTEsIHFIRAotICAgICAgbmV3IFNpemUoOTYwLCA2NDApLCAvLyAxMiwgRFZHQQotICAg
ICAgbmV3IFNpemUoMTAyNCwgNTc2KSwgLy8gMTMsIFdTVkdBCi0gICAgICBuZXcgU2l6ZSgxMDI0
LCA2MDApLCAvLyAxNCwgV1ZTR0EKLSAgICAgIG5ldyBTaXplKDEyODAsIDcyMCksIC8vIDE1LCBI
RAotICAgICAgbmV3IFNpemUoMTI4MCwgMTAyNCksIC8vIDE2LCBTWEdBCi0gICAgICBuZXcgU2l6
ZSgxOTIwLCAxMDgwKSwgLy8gMTcsIEZ1bGwgSEQKLSAgICAgIG5ldyBTaXplKDE5MjAsIDE0NDAp
LCAvLyAxOCwgRnVsbCBIRCA0OjMKLSAgICAgIG5ldyBTaXplKDI1NjAsIDE0NDApLCAvLyAxOSwg
UUhECi0gICAgICBuZXcgU2l6ZSgzODQwLCAyMTYwKSAvLyAyMCwgVUhECi0gICAgICApKTsKLQot
ICBwdWJsaWMgc3RhdGljIGNsYXNzIENhcHR1cmVGb3JtYXQgewotICAgIC8vIENsYXNzIHRvIHJl
cHJlc2VudCBhIGZyYW1lcmF0ZSByYW5nZS4gVGhlIGZyYW1lcmF0ZSB2YXJpZXMgYmVjYXVzZSBv
ZiBsaWdodG5pbmcgY29uZGl0aW9ucy4KLSAgICAvLyBUaGUgdmFsdWVzIGFyZSBtdWx0aXBsaWVk
IGJ5IDEwMDAsIHNvIDEwMDAgcmVwcmVzZW50cyBvbmUgZnJhbWUgcGVyIHNlY29uZC4KLSAgICBw
dWJsaWMgc3RhdGljIGNsYXNzIEZyYW1lcmF0ZVJhbmdlIHsKLSAgICAgIHB1YmxpYyBpbnQgbWlu
OwotICAgICAgcHVibGljIGludCBtYXg7Ci0KLSAgICAgIHB1YmxpYyBGcmFtZXJhdGVSYW5nZShp
bnQgbWluLCBpbnQgbWF4KSB7Ci0gICAgICAgIHRoaXMubWluID0gbWluOwotICAgICAgICB0aGlz
Lm1heCA9IG1heDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3Ry
aW5nIHRvU3RyaW5nKCkgewotICAgICAgICByZXR1cm4gIlsiICsgKG1pbiAvIDEwMDAuMGYpICsg
IjoiICsgKG1heCAvIDEwMDAuMGYpICsgIl0iOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKLSAgICAgICAgaWYg
KCEob3RoZXIgaW5zdGFuY2VvZiBGcmFtZXJhdGVSYW5nZSkpIHsKLSAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZmluYWwgRnJhbWVyYXRlUmFuZ2Ugb3RoZXJGcmFt
ZXJhdGUgPSAoRnJhbWVyYXRlUmFuZ2UpIG90aGVyOwotICAgICAgICByZXR1cm4gbWluID09IG90
aGVyRnJhbWVyYXRlLm1pbiAmJiBtYXggPT0gb3RoZXJGcmFtZXJhdGUubWF4OwotICAgICAgfQot
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAg
IC8vIFVzZSBwcmltZSBjbG9zZSB0byAyXjE2IHRvIGF2b2lkIGNvbGxpc2lvbnMgZm9yIG5vcm1h
bCB2YWx1ZXMgbGVzcyB0aGFuIDJeMTYuCi0gICAgICAgIHJldHVybiAxICsgNjU1MzcgKiBtaW4g
KyBtYXg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGZpbmFsIGludCB3aWR0aDsKLSAg
ICBwdWJsaWMgZmluYWwgaW50IGhlaWdodDsKLSAgICBwdWJsaWMgZmluYWwgRnJhbWVyYXRlUmFu
Z2UgZnJhbWVyYXRlOwotCi0gICAgLy8gVE9ETyhoYm9zKTogSWYgVmlkZW9DYXB0dXJlci5zdGFy
dENhcHR1cmUgaXMgdXBkYXRlZCB0byBzdXBwb3J0IG90aGVyIGltYWdlIGZvcm1hdHMgdGhlbiB0
aGlzCi0gICAgLy8gbmVlZHMgdG8gYmUgdXBkYXRlZCBhbmQgVmlkZW9DYXB0dXJlci5nZXRTdXBw
b3J0ZWRGb3JtYXRzIG5lZWQgdG8gcmV0dXJuIENhcHR1cmVGb3JtYXRzIG9mCi0gICAgLy8gYWxs
IGltYWdlRm9ybWF0cy4KLSAgICBwdWJsaWMgZmluYWwgaW50IGltYWdlRm9ybWF0ID0gSW1hZ2VG
b3JtYXQuTlYyMTsKLQotICAgIHB1YmxpYyBDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IG1pbkZyYW1lcmF0ZSwgaW50IG1heEZyYW1lcmF0ZSkgewotICAgICAgdGhpcy53
aWR0aCA9IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLmZy
YW1lcmF0ZSA9IG5ldyBGcmFtZXJhdGVSYW5nZShtaW5GcmFtZXJhdGUsIG1heEZyYW1lcmF0ZSk7
Ci0gICAgfQotCi0gICAgcHVibGljIENhcHR1cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBGcmFtZXJhdGVSYW5nZSBmcmFtZXJhdGUpIHsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsK
LSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFt
ZXJhdGU7Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlcyB0aGUgZnJhbWUgc2l6ZSBvZiB0aGlz
IGNhcHR1cmUgZm9ybWF0LgotICAgIHB1YmxpYyBpbnQgZnJhbWVTaXplKCkgewotICAgICAgcmV0
dXJuIGZyYW1lU2l6ZSh3aWR0aCwgaGVpZ2h0LCBpbWFnZUZvcm1hdCk7Ci0gICAgfQotCi0gICAg
Ly8gQ2FsY3VsYXRlcyB0aGUgZnJhbWUgc2l6ZSBvZiB0aGUgc3BlY2lmaWVkIGltYWdlIGZvcm1h
dC4gQ3VycmVudGx5IG9ubHkKLSAgICAvLyBzdXBwb3J0aW5nIEltYWdlRm9ybWF0Lk5WMjEuCi0g
ICAgLy8gVGhlIHNpemUgaXMgd2lkdGggKiBoZWlnaHQgKiBudW1iZXIgb2YgYnl0ZXMgcGVyIHBp
eGVsLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJv
aWQvaGFyZHdhcmUvQ2FtZXJhLmh0bWwjYWRkQ2FsbGJhY2tCdWZmZXIoYnl0ZVtdKQotICAgIHB1
YmxpYyBzdGF0aWMgaW50IGZyYW1lU2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBpbWFn
ZUZvcm1hdCkgewotICAgICAgaWYgKGltYWdlRm9ybWF0ICE9IEltYWdlRm9ybWF0Lk5WMjEpIHsK
LSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJEb24ndCBr
bm93IGhvdyB0byBjYWxjdWxhdGUgIgotICAgICAgICAgICAgKyAidGhlIGZyYW1lIHNpemUgb2Yg
bm9uLU5WMjEgaW1hZ2UgZm9ybWF0cy4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAod2lkdGgg
KiBoZWlnaHQgKiBJbWFnZUZvcm1hdC5nZXRCaXRzUGVyUGl4ZWwoaW1hZ2VGb3JtYXQpKSAvIDg7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsK
LSAgICAgIHJldHVybiB3aWR0aCArICJ4IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90
aGVyKSB7Ci0gICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIENhcHR1cmVGb3JtYXQpKSB7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIGZpbmFsIENhcHR1cmVGb3JtYXQg
b3RoZXJGb3JtYXQgPSAoQ2FwdHVyZUZvcm1hdCkgb3RoZXI7Ci0gICAgICByZXR1cm4gd2lkdGgg
PT0gb3RoZXJGb3JtYXQud2lkdGggJiYgaGVpZ2h0ID09IG90aGVyRm9ybWF0LmhlaWdodAotICAg
ICAgICAgICYmIGZyYW1lcmF0ZS5lcXVhbHMob3RoZXJGb3JtYXQuZnJhbWVyYXRlKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0
dXJuIDEgKyAod2lkdGggKiA2NTQ5NyArIGhlaWdodCkgKiAyNTEgKyBmcmFtZXJhdGUuaGFzaENv
ZGUoKTsKLSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgY2xhc3MgZm9yIGZpbmRpbmcgdGhlIGNs
b3Nlc3Qgc3VwcG9ydGVkIGZvcm1hdCBmb3IgdGhlIHR3byBmdW5jdGlvbnMgYmVsb3cuIEl0IGNy
ZWF0ZXMgYQotICAvLyBjb21wYXJhdG9yIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlIHRvIHNvbWUg
cmVxdWVzdGVkIHBhcmFtZXRlcnMsIHdoZXJlIHRoZSBlbGVtZW50IHdpdGggdGhlCi0gIC8vIG1p
bmltdW0gZGlmZmVyZW5jZSBpcyB0aGUgZWxlbWVudCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIHJl
cXVlc3RlZCBwYXJhbWV0ZXJzLgotICBwcml2YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDbG9z
ZXN0Q29tcGFyYXRvcjxUPiBpbXBsZW1lbnRzIENvbXBhcmF0b3I8VD4gewotICAgIC8vIERpZmZl
cmVuY2UgYmV0d2VlbiBzdXBwb3J0ZWQgYW5kIHJlcXVlc3RlZCBwYXJhbWV0ZXIuCi0gICAgYWJz
dHJhY3QgaW50IGRpZmYoVCBzdXBwb3J0ZWRQYXJhbWV0ZXIpOwotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIGludCBjb21wYXJlKFQgdDEsIFQgdDIpIHsKLSAgICAgIHJldHVybiBkaWZmKHQx
KSAtIGRpZmYodDIpOwotICAgIH0KLSAgfQotCi0gIC8vIFByZWZlciBhIGZwcyByYW5nZSB3aXRo
IGFuIHVwcGVyIGJvdW5kIGNsb3NlIHRvIHxmcmFtZXJhdGV8LiBBbHNvIHByZWZlciBhIGZwcyBy
YW5nZSB3aXRoIGEgbG93Ci0gIC8vIGxvd2VyIGJvdW5kLCB0byBhbGxvdyB0aGUgZnJhbWVyYXRl
IHRvIGZsdWN0dWF0ZSBiYXNlZCBvbiBsaWdodG5pbmcgY29uZGl0aW9ucy4KLSAgcHVibGljIHN0
YXRpYyBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFt
ZXJhdGVSYW5nZSgKLSAgICAgIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gc3Vw
cG9ydGVkRnJhbWVyYXRlcywgZmluYWwgaW50IHJlcXVlc3RlZEZwcykgewotICAgIHJldHVybiBD
b2xsZWN0aW9ucy5taW4oCi0gICAgICAgIHN1cHBvcnRlZEZyYW1lcmF0ZXMsIG5ldyBDbG9zZXN0
Q29tcGFyYXRvcjxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPigpIHsKLSAgICAgICAgICAv
LyBQcm9ncmVzc2l2ZSBwZW5hbHR5IGlmIHRoZSB1cHBlciBib3VuZCBpcyBmdXJ0aGVyIGF3YXkg
dGhhbiB8TUFYX0ZQU19ESUZGX1RIUkVTSE9MRHwKLSAgICAgICAgICAvLyBmcm9tIHJlcXVlc3Rl
ZC4KLSAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0ZQU19ESUZGX1RIUkVT
SE9MRCA9IDUwMDA7Ci0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9GUFNf
TE9XX0RJRkZfV0VJR0hUID0gMTsKLSAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
TUFYX0ZQU19ISUdIX0RJRkZfV0VJR0hUID0gMzsKLQotICAgICAgICAgIC8vIFByb2dyZXNzaXZl
IHBlbmFsdHkgaWYgdGhlIGxvd2VyIGJvdW5kIGlzIGJpZ2dlciB0aGFuIHxNSU5fRlBTX1RIUkVT
SE9MRHwuCi0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9GUFNfVEhSRVNI
T0xEID0gODAwMDsKLSAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0ZQU19M
T1dfVkFMVUVfV0VJR0hUID0gMTsKLSAgICAgICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
TUlOX0ZQU19ISUdIX1ZBTFVFX1dFSUdIVCA9IDQ7Ci0KLSAgICAgICAgICAvLyBVc2Ugb25lIHdl
aWdodCBmb3Igc21hbGwgfHZhbHVlfCBsZXNzIHRoYW4gfHRocmVzaG9sZHwsIGFuZCBhbm90aGVy
IHdlaWdodCBhYm92ZS4KLSAgICAgICAgICBwcml2YXRlIGludCBwcm9ncmVzc2l2ZVBlbmFsdHko
aW50IHZhbHVlLCBpbnQgdGhyZXNob2xkLCBpbnQgbG93V2VpZ2h0LCBpbnQgaGlnaFdlaWdodCkg
ewotICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA8IHRocmVzaG9sZCkgPyB2YWx1ZSAqIGxvd1dl
aWdodAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0aHJlc2hvbGQg
KiBsb3dXZWlnaHQgKyAodmFsdWUgLSB0aHJlc2hvbGQpICogaGlnaFdlaWdodDsKLSAgICAgICAg
ICB9Ci0KLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBpbnQgZGlmZihDYXB0dXJlRm9y
bWF0LkZyYW1lcmF0ZVJhbmdlIHJhbmdlKSB7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbWluRnBz
RXJyb3IgPSBwcm9ncmVzc2l2ZVBlbmFsdHkoCi0gICAgICAgICAgICAgICAgcmFuZ2UubWluLCBN
SU5fRlBTX1RIUkVTSE9MRCwgTUlOX0ZQU19MT1dfVkFMVUVfV0VJR0hULCBNSU5fRlBTX0hJR0hf
VkFMVUVfV0VJR0hUKTsKLSAgICAgICAgICAgIGZpbmFsIGludCBtYXhGcHNFcnJvciA9IHByb2dy
ZXNzaXZlUGVuYWx0eShNYXRoLmFicyhyZXF1ZXN0ZWRGcHMgKiAxMDAwIC0gcmFuZ2UubWF4KSwK
LSAgICAgICAgICAgICAgICBNQVhfRlBTX0RJRkZfVEhSRVNIT0xELCBNQVhfRlBTX0xPV19ESUZG
X1dFSUdIVCwgTUFYX0ZQU19ISUdIX0RJRkZfV0VJR0hUKTsKLSAgICAgICAgICAgIHJldHVybiBt
aW5GcHNFcnJvciArIG1heEZwc0Vycm9yOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIFNpemUgZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0gICAgICBM
aXN0PFNpemU+IHN1cHBvcnRlZFNpemVzLCBmaW5hbCBpbnQgcmVxdWVzdGVkV2lkdGgsIGZpbmFs
IGludCByZXF1ZXN0ZWRIZWlnaHQpIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMubWluKHN1cHBv
cnRlZFNpemVzLCBuZXcgQ2xvc2VzdENvbXBhcmF0b3I8U2l6ZT4oKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIGludCBkaWZmKFNpemUgc2l6ZSkgewotICAgICAgICByZXR1cm4gYWJzKHJlcXVl
c3RlZFdpZHRoIC0gc2l6ZS53aWR0aCkgKyBhYnMocmVxdWVzdGVkSGVpZ2h0IC0gc2l6ZS5oZWln
aHQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgY2Ft
ZXJhIGNsYXNzZXMuCi0gIHN0YXRpYyB2b2lkIHJlcG9ydENhbWVyYVJlc29sdXRpb24oSGlzdG9n
cmFtIGhpc3RvZ3JhbSwgU2l6ZSByZXNvbHV0aW9uKSB7Ci0gICAgaW50IGluZGV4ID0gQ09NTU9O
X1JFU09MVVRJT05TLmluZGV4T2YocmVzb2x1dGlvbik7Ci0gICAgLy8gMCBpcyByZXNlcnZlZCBm
b3IgdW5rbm93biByZXNvbHV0aW9uLCBzbyBhZGQgMS4KLSAgICAvLyBpbmRleE9mIHJldHVybnMg
LTEgZm9yIHVua25vd24gcmVzb2x1dGlvbnMgc28gaXQgYmVjb21lcyAwIGF1dG9tYXRpY2FsbHku
Ci0gICAgaGlzdG9ncmFtLmFkZFNhbXBsZShpbmRleCArIDEpOwotICB9Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0NhbWVyYUVudW1lcmF0b3IuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdG9yLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0Owot
Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJhRW51bWVy
YXRvciB7Ci0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZXZpY2VOYW1lcygpOwotICBwdWJsaWMgYm9v
bGVhbiBpc0Zyb250RmFjaW5nKFN0cmluZyBkZXZpY2VOYW1lKTsKLSAgcHVibGljIGJvb2xlYW4g
aXNCYWNrRmFjaW5nKFN0cmluZyBkZXZpY2VOYW1lKTsKLSAgcHVibGljIExpc3Q8Q2FwdHVyZUZv
cm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhTdHJpbmcgZGV2aWNlTmFtZSk7Ci0KLSAgcHVibGlj
IENhbWVyYVZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FwdHVyZXIoCi0gICAgICBTdHJpbmcgZGV2aWNl
TmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRs
ZXIpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFTZXNzaW9uLmphdmEKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFTZXNzaW9uLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhU2Vzc2lvbi5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1wdWJsaWMgaW50ZXJmYWNlIENhbWVyYVNlc3Npb24gewotICAvLyBDYWxsYmFja3Mg
YXJlIGZpcmVkIG9uIHRoZSBjYW1lcmEgdGhyZWFkLgotICBwdWJsaWMgaW50ZXJmYWNlIENyZWF0
ZVNlc3Npb25DYWxsYmFjayB7Ci0gICAgdm9pZCBvbkRvbmUoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9u
KTsKLSAgICB2b2lkIG9uRmFpbHVyZShTdHJpbmcgZXJyb3IpOwotICB9Ci0KLSAgLy8gRXZlbnRz
IGFyZSBmaXJlZCBvbiB0aGUgY2FtZXJhIHRocmVhZC4KLSAgcHVibGljIGludGVyZmFjZSBFdmVu
dHMgewotICAgIHZvaWQgb25DYW1lcmFPcGVuaW5nKCk7Ci0gICAgdm9pZCBvbkNhbWVyYUVycm9y
KENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIGVycm9yKTsKLSAgICB2b2lkIG9uQ2FtZXJh
RGlzY29ubmVjdGVkKENhbWVyYVNlc3Npb24gc2Vzc2lvbik7Ci0gICAgdm9pZCBvbkNhbWVyYUNs
b3NlZChDYW1lcmFTZXNzaW9uIHNlc3Npb24pOwotICAgIHZvaWQgb25CeXRlQnVmZmVyRnJhbWVD
YXB0dXJlZCgKLSAgICAgICAgQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBieXRlW10gZGF0YSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKTsKLSAgICB2
b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQsCi0gICAgICAgIGZsb2F0W10gdHJhbnNm
b3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBTdG9wcyB0aGUgY2FwdHVyZS4gV2FpdHMgdW50aWwgbm8gbW9yZSBjYWxscyB0byBjYXB0
dXJlIG9ic2VydmVyIHdpbGwgYmUgbWFkZS4KLSAgICogSWYgd2FpdENhbWVyYVN0b3AgaXMgdHJ1
ZSwgYWxzbyB3YWl0cyBmb3IgdGhlIGNhbWVyYSB0byBzdG9wLgotICAgKi8KLSAgdm9pZCBzdG9w
KCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVy
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEJhc2UgaW50ZXJmYWNlIGZvciBjYW1l
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
dGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVyKTsKLQotICAvKioKLSAgICogSGVscGVyIGNs
YXNzIHRvIGxvZyBmcmFtZXJhdGUgYW5kIGRldGVjdCBpZiB0aGUgY2FtZXJhIGZyZWV6ZXMuIEl0
IHdpbGwgcnVuIHBlcmlvZGljIGNhbGxiYWNrcwotICAgKiBvbiB0aGUgU3VyZmFjZVRleHR1cmVI
ZWxwZXIgdGhyZWFkIHBhc3NlZCBpbiB0aGUgY3RvciwgYW5kIHNob3VsZCBvbmx5IGJlIG9wZXJh
dGVkIGZyb20gdGhhdAotICAgKiB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNz
IENhbWVyYVN0YXRpc3RpY3MgewotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcg
PSAiQ2FtZXJhU3RhdGlzdGljcyI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IENBTUVS
QV9PQlNFUlZFUl9QRVJJT0RfTVMgPSAyMDAwOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGlu
dCBDQU1FUkFfRlJFRVpFX1JFUE9SVF9USU1PVVRfTVMgPSA0MDAwOwotCi0gICAgcHJpdmF0ZSBm
aW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICBwcml2
YXRlIGZpbmFsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcjsKLSAgICBwcml2YXRl
IGludCBmcmFtZUNvdW50OwotICAgIHByaXZhdGUgaW50IGZyZWV6ZVBlcmlvZENvdW50OwotICAg
IC8vIENhbWVyYSBvYnNlcnZlciAtIG1vbml0b3JzIGNhbWVyYSBmcmFtZXJhdGUuIE9ic2VydmVy
IGlzIGV4ZWN1dGVkIG9uIGNhbWVyYSB0aHJlYWQuCi0gICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJs
ZSBjYW1lcmFPYnNlcnZlciA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBmaW5hbCBpbnQgY2FtZXJhRnBzID0gTWF0
aC5yb3VuZChmcmFtZUNvdW50ICogMTAwMC4wZiAvIENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMp
OwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIGZwczogIiArIGNhbWVyYUZwcyArICIu
Iik7Ci0gICAgICAgIGlmIChmcmFtZUNvdW50ID09IDApIHsKLSAgICAgICAgICArK2ZyZWV6ZVBl
cmlvZENvdW50OwotICAgICAgICAgIGlmIChDQU1FUkFfT0JTRVJWRVJfUEVSSU9EX01TICogZnJl
ZXplUGVyaW9kQ291bnQgPj0gQ0FNRVJBX0ZSRUVaRV9SRVBPUlRfVElNT1VUX01TCi0gICAgICAg
ICAgICAgICYmIGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgTG9nZ2luZy5l
KFRBRywgIkNhbWVyYSBmcmVlemVkLiIpOwotICAgICAgICAgICAgaWYgKHN1cmZhY2VUZXh0dXJl
SGVscGVyLmlzVGV4dHVyZUluVXNlKCkpIHsKLSAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gb25s
eSBoYXBwZW4gaWYgd2UgYXJlIGNhcHR1cmluZyB0byB0ZXh0dXJlcy4KLSAgICAgICAgICAgICAg
ZXZlbnRzSGFuZGxlci5vbkNhbWVyYUZyZWV6ZWQoIkNhbWVyYSBmYWlsdXJlLiBDbGllbnQgbXVz
dCByZXR1cm4gdmlkZW8gYnVmZmVycy4iKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFGcmVlemVkKCJDYW1lcmEgZmFpbHVyZS4iKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgZnJlZXplUGVyaW9kQ291bnQgPSAwOwotICAgICAgICB9Ci0g
ICAgICAgIGZyYW1lQ291bnQgPSAwOwotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRI
YW5kbGVyKCkucG9zdERlbGF5ZWQodGhpcywgQ0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyk7Ci0g
ICAgICB9Ci0gICAgfTsKLQotICAgIHB1YmxpYyBDYW1lcmFTdGF0aXN0aWNzKAotICAgICAgICBT
dXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgQ2FtZXJhRXZlbnRzSGFu
ZGxlciBldmVudHNIYW5kbGVyKSB7Ci0gICAgICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0g
bnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTdXJm
YWNlVGV4dHVyZUhlbHBlciBpcyBudWxsIik7Ci0gICAgICB9Ci0gICAgICB0aGlzLnN1cmZhY2VU
ZXh0dXJlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgICB0aGlzLmV2ZW50c0hh
bmRsZXIgPSBldmVudHNIYW5kbGVyOwotICAgICAgdGhpcy5mcmFtZUNvdW50ID0gMDsKLSAgICAg
IHRoaXMuZnJlZXplUGVyaW9kQ291bnQgPSAwOwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
Z2V0SGFuZGxlcigpLnBvc3REZWxheWVkKGNhbWVyYU9ic2VydmVyLCBDQU1FUkFfT0JTRVJWRVJf
UEVSSU9EX01TKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tUaHJlYWQoKSB7Ci0g
ICAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBzdXJmYWNlVGV4dHVyZUhlbHBlci5n
ZXRIYW5kbGVyKCkuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgICAgdGhyb3cgbmV3
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhyZWFkIik7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHVibGljIHZvaWQgYWRkRnJhbWUoKSB7Ci0gICAgICBjaGVja1RocmVhZCgpOwotICAg
ICAgKytmcmFtZUNvdW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0g
ICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucmVtb3ZlQ2FsbGJhY2tzKGNh
bWVyYU9ic2VydmVyKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRGF0
YUNoYW5uZWwuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0RhdGFDaGFubmVs
LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRGF0YUNoYW5uZWwu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0v
KiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBEYXRhQ2hhbm5lbEludGVyZmFjZS4gKi8KLXB1Ymxp
YyBjbGFzcyBEYXRhQ2hhbm5lbCB7Ci0gIC8qKiBKYXZhIHdyYXBwZXIgZm9yIFdlYklETCBSVENE
YXRhQ2hhbm5lbC4gKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJbml0IHsKLSAgICBwdWJsaWMg
Ym9vbGVhbiBvcmRlcmVkID0gdHJ1ZTsKLSAgICAvLyBPcHRpb25hbCB1bnNpZ25lZCBzaG9ydCBp
biBXZWJJREwsIC0xIG1lYW5zIHVuc3BlY2lmaWVkLgotICAgIHB1YmxpYyBpbnQgbWF4UmV0cmFu
c21pdFRpbWVNcyA9IC0xOwotICAgIC8vIE9wdGlvbmFsIHVuc2lnbmVkIHNob3J0IGluIFdlYklE
TCwgLTEgbWVhbnMgdW5zcGVjaWZpZWQuCi0gICAgcHVibGljIGludCBtYXhSZXRyYW5zbWl0cyA9
IC0xOwotICAgIHB1YmxpYyBTdHJpbmcgcHJvdG9jb2wgPSAiIjsKLSAgICBwdWJsaWMgYm9vbGVh
biBuZWdvdGlhdGVkID0gZmFsc2U7Ci0gICAgLy8gT3B0aW9uYWwgdW5zaWduZWQgc2hvcnQgaW4g
V2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmllZC4KLSAgICBwdWJsaWMgaW50IGlkID0gLTE7Ci0K
LSAgICBwdWJsaWMgSW5pdCgpIHt9Ci0KLSAgICAvLyBDYWxsZWQgb25seSBieSBuYXRpdmUgY29k
ZS4KLSAgICBwcml2YXRlIEluaXQoYm9vbGVhbiBvcmRlcmVkLCBpbnQgbWF4UmV0cmFuc21pdFRp
bWVNcywgaW50IG1heFJldHJhbnNtaXRzLCBTdHJpbmcgcHJvdG9jb2wsCi0gICAgICAgIGJvb2xl
YW4gbmVnb3RpYXRlZCwgaW50IGlkKSB7Ci0gICAgICB0aGlzLm9yZGVyZWQgPSBvcmRlcmVkOwot
ICAgICAgdGhpcy5tYXhSZXRyYW5zbWl0VGltZU1zID0gbWF4UmV0cmFuc21pdFRpbWVNczsKLSAg
ICAgIHRoaXMubWF4UmV0cmFuc21pdHMgPSBtYXhSZXRyYW5zbWl0czsKLSAgICAgIHRoaXMucHJv
dG9jb2wgPSBwcm90b2NvbDsKLSAgICAgIHRoaXMubmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7Ci0g
ICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBD
KysgRGF0YUJ1ZmZlci4gIFRoZSBhdG9tIG9mIGRhdGEgaW4gYSBEYXRhQ2hhbm5lbC4gKi8KLSAg
cHVibGljIHN0YXRpYyBjbGFzcyBCdWZmZXIgewotICAgIC8qKiBUaGUgdW5kZXJseWluZyBkYXRh
LiAqLwotICAgIHB1YmxpYyBmaW5hbCBCeXRlQnVmZmVyIGRhdGE7Ci0KLSAgICAvKioKLSAgICAg
KiBJbmRpY2F0ZXMgd2hldGhlciB8ZGF0YXwgY29udGFpbnMgVVRGLTggdGV4dCBvciAiYmluYXJ5
IGRhdGEiCi0gICAgICogKGkuZS4gYW55dGhpbmcgZWxzZSkuCi0gICAgICovCi0gICAgcHVibGlj
IGZpbmFsIGJvb2xlYW4gYmluYXJ5OwotCi0gICAgcHVibGljIEJ1ZmZlcihCeXRlQnVmZmVyIGRh
dGEsIGJvb2xlYW4gYmluYXJ5KSB7Ci0gICAgICB0aGlzLmRhdGEgPSBkYXRhOwotICAgICAgdGhp
cy5iaW5hcnkgPSBiaW5hcnk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBD
KysgRGF0YUNoYW5uZWxPYnNlcnZlci4gKi8KLSAgcHVibGljIGludGVyZmFjZSBPYnNlcnZlciB7
Ci0gICAgLyoqIFRoZSBkYXRhIGNoYW5uZWwncyBidWZmZXJlZEFtb3VudCBoYXMgY2hhbmdlZC4g
Ki8KLSAgICBwdWJsaWMgdm9pZCBvbkJ1ZmZlcmVkQW1vdW50Q2hhbmdlKGxvbmcgcHJldmlvdXNB
bW91bnQpOwotICAgIC8qKiBUaGUgZGF0YSBjaGFubmVsIHN0YXRlIGhhcyBjaGFuZ2VkLiAqLwot
ICAgIHB1YmxpYyB2b2lkIG9uU3RhdGVDaGFuZ2UoKTsKLSAgICAvKioKLSAgICAgKiBBIGRhdGEg
YnVmZmVyIHdhcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQuICBOT1RFOiB8YnVmZmVyLmRhdGF8IHdp
bGwgYmUKLSAgICAgKiBmcmVlZCBvbmNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBzbyBjYWxsZXJz
IHdobyB3YW50IHRvIHVzZSB0aGUgZGF0YQotICAgICAqIGFzeW5jaHJvbm91c2x5IG11c3QgbWFr
ZSBzdXJlIHRvIGNvcHkgaXQgZmlyc3QuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25NZXNz
YWdlKEJ1ZmZlciBidWZmZXIpOwotICB9Ci0KLSAgLyoqIEtlZXAgaW4gc3luYyB3aXRoIERhdGFD
aGFubmVsSW50ZXJmYWNlOjpEYXRhU3RhdGUuICovCi0gIHB1YmxpYyBlbnVtIFN0YXRlIHsgQ09O
TkVDVElORywgT1BFTiwgQ0xPU0lORywgQ0xPU0VEIH0KLQotICBwcml2YXRlIGZpbmFsIGxvbmcg
bmF0aXZlRGF0YUNoYW5uZWw7Ci0gIHByaXZhdGUgbG9uZyBuYXRpdmVPYnNlcnZlcjsKLQotICBw
dWJsaWMgRGF0YUNoYW5uZWwobG9uZyBuYXRpdmVEYXRhQ2hhbm5lbCkgewotICAgIHRoaXMubmF0
aXZlRGF0YUNoYW5uZWwgPSBuYXRpdmVEYXRhQ2hhbm5lbDsKLSAgfQotCi0gIC8qKiBSZWdpc3Rl
ciB8b2JzZXJ2ZXJ8LCByZXBsYWNpbmcgYW55IHByZXZpb3VzbHktcmVnaXN0ZXJlZCBvYnNlcnZl
ci4gKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0ZXJPYnNlcnZlcihPYnNlcnZlciBvYnNlcnZlcikg
ewotICAgIGlmIChuYXRpdmVPYnNlcnZlciAhPSAwKSB7Ci0gICAgICB1bnJlZ2lzdGVyT2JzZXJ2
ZXJOYXRpdmUobmF0aXZlT2JzZXJ2ZXIpOwotICAgIH0KLSAgICBuYXRpdmVPYnNlcnZlciA9IHJl
Z2lzdGVyT2JzZXJ2ZXJOYXRpdmUob2JzZXJ2ZXIpOwotICB9Ci0gIHByaXZhdGUgbmF0aXZlIGxv
bmcgcmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShPYnNlcnZlciBvYnNlcnZlcik7Ci0KLSAgLyoqIFVu
cmVnaXN0ZXIgdGhlIChvbmx5KSBvYnNlcnZlci4gKi8KLSAgcHVibGljIHZvaWQgdW5yZWdpc3Rl
ck9ic2VydmVyKCkgewotICAgIHVucmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShuYXRpdmVPYnNlcnZl
cik7Ci0gIH0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUo
bG9uZyBuYXRpdmVPYnNlcnZlcik7Ci0KLSAgcHVibGljIG5hdGl2ZSBTdHJpbmcgbGFiZWwoKTsK
LQotICBwdWJsaWMgbmF0aXZlIGludCBpZCgpOwotCi0gIHB1YmxpYyBuYXRpdmUgU3RhdGUgc3Rh
dGUoKTsKLQotICAvKioKLSAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgYXBwbGlj
YXRpb24gZGF0YSAoVVRGLTggdGV4dCBhbmQgYmluYXJ5IGRhdGEpCi0gICAqIHRoYXQgaGF2ZSBi
ZWVuIHF1ZXVlZCB1c2luZyBTZW5kQnVmZmVyIGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiB0cmFuc21p
dHRlZAotICAgKiB0byB0aGUgbmV0d29yay4KLSAgICovCi0gIHB1YmxpYyBuYXRpdmUgbG9uZyBi
dWZmZXJlZEFtb3VudCgpOwotCi0gIC8qKiBDbG9zZSB0aGUgY2hhbm5lbC4gKi8KLSAgcHVibGlj
IG5hdGl2ZSB2b2lkIGNsb3NlKCk7Ci0KLSAgLyoqIFNlbmQgfGRhdGF8IHRvIHRoZSByZW1vdGUg
cGVlcjsgcmV0dXJuIHN1Y2Nlc3MuICovCi0gIHB1YmxpYyBib29sZWFuIHNlbmQoQnVmZmVyIGJ1
ZmZlcikgewotICAgIC8vIFRPRE8oZmlzY2htYW4pOiB0aGlzIGNvdWxkIGJlIGNsZXZlcmVyIGFi
b3V0IGF2b2lkaW5nIGNvcGllcyBpZiB0aGUKLSAgICAvLyBCeXRlQnVmZmVyIGlzIGRpcmVjdCBh
bmQvb3IgaXMgYmFja2VkIGJ5IGFuIGFycmF5LgotICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVb
YnVmZmVyLmRhdGEucmVtYWluaW5nKCldOwotICAgIGJ1ZmZlci5kYXRhLmdldChkYXRhKTsKLSAg
ICByZXR1cm4gc2VuZE5hdGl2ZShkYXRhLCBidWZmZXIuYmluYXJ5KTsKLSAgfQotICBwcml2YXRl
IG5hdGl2ZSBib29sZWFuIHNlbmROYXRpdmUoYnl0ZVtdIGRhdGEsIGJvb2xlYW4gYmluYXJ5KTsK
LQotICAvKiogRGlzcG9zZSBvZiBuYXRpdmUgcmVzb3VyY2VzIGF0dGFjaGVkIHRvIHRoaXMgY2hh
bm5lbC4gKi8KLSAgcHVibGljIG5hdGl2ZSB2b2lkIGRpc3Bvc2UoKTsKLX07CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL0VnbEJhc2UuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0VnbEJhc2UuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xC
YXNlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJm
YWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLQotaW1wb3J0IGphdmF4
Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMDsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3Rh
dGUgYW5kIHV0aWxpdHkgbWV0aG9kcyBmb3IgaGFuZGxpbmcgYW4gZWdsIDEuMCBFR0xDb250ZXh0
LCBhbiBFR0xEaXNwbGF5LAotICogYW5kIGFuIEVHTFN1cmZhY2UuCi0gKi8KLXB1YmxpYyBhYnN0
cmFjdCBjbGFzcyBFZ2xCYXNlIHsKLSAgLy8gRUdMIHdyYXBwZXIgZm9yIGFuIGFjdHVhbCBFR0xD
b250ZXh0LgotICBwdWJsaWMgc3RhdGljIGNsYXNzIENvbnRleHQge30KLQotICAvLyBBY2NvcmRp
bmcgdG8gdGhlIGRvY3VtZW50YXRpb24sIEVHTCBjYW4gYmUgdXNlZCBmcm9tIG11bHRpcGxlIHRo
cmVhZHMgYXQgdGhlIHNhbWUgdGltZSBpZiBlYWNoCi0gIC8vIHRocmVhZCBoYXMgaXRzIG93biBF
R0xDb250ZXh0LCBidXQgaW4gcHJhY3RpY2UgaXQgZGVhZGxvY2tzIG9uIHNvbWUgZGV2aWNlcyB3
aGVuIGRvaW5nIHRoaXMuCi0gIC8vIFRoZXJlZm9yZSwgc3luY2hyb25pemUgb24gdGhpcyBnbG9i
YWwgbG9jayBiZWZvcmUgY2FsbGluZyBkYW5nZXJvdXMgRUdMIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0
Ci0gIC8vIGRlYWRsb2NrLiBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9p
c3N1ZXMvZGV0YWlsP2lkPTU3MDIgZm9yIG1vcmUgaW5mby4KLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKLQotICAvLyBUaGVzZSBjb25zdGFudHMgYXJl
IHRha2VuIGZyb20gRUdMMTQuRUdMX09QRU5HTF9FUzJfQklUIGFuZCBFR0wxNC5FR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTi4KLSAgLy8gaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20v
cGxhdGZvcm0vZnJhbWV3b3Jrcy9iYXNlLysvbWFzdGVyL29wZW5nbC9qYXZhL2FuZHJvaWQvb3Bl
bmdsL0VHTDE0LmphdmEKLSAgLy8gVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBHbFN1cmZhY2VWaWV3
IGRvZXM6Ci0gIC8vIGh0dHA6Ly9ncmVwY29kZS5jb20vZmlsZS9yZXBvc2l0b3J5LmdyZXBjb2Rl
LmNvbS9qYXZhL2V4dC9jb20uZ29vZ2xlLmFuZHJvaWQvYW5kcm9pZC81LjEuMV9yMS9hbmRyb2lk
L29wZW5nbC9HTFN1cmZhY2VWaWV3LmphdmEjNzYwCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBFR0xfT1BFTkdMX0VTMl9CSVQgPSA0OwotICAvLyBBbmRyb2lkLXNwZWNpZmljIGV4dGVuc2lv
bi4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVHTF9SRUNPUkRBQkxFX0FORFJPSUQgPSAw
eDMxNDI7Ci0KLSAgLy8gY2xhbmctZm9ybWF0IG9mZgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGlu
dFtdIENPTkZJR19QTEFJTiA9IHsKLSAgICBFR0wxMC5FR0xfUkVEX1NJWkUsIDgsCi0gICAgRUdM
MTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0JMVUVfU0laRSwgOCwKLSAgICBF
R0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgRUdMMTAu
RUdMX05PTkUKLSAgfTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBDT05GSUdfUkdCQSA9
IHsKLSAgICBFR0wxMC5FR0xfUkVEX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUs
IDgsCi0gICAgRUdMMTAuRUdMX0JMVUVfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQUxQSEFfU0la
RSwgOCwKLSAgICBFR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQs
Ci0gICAgRUdMMTAuRUdMX05PTkUKLSAgfTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBD
T05GSUdfUElYRUxfQlVGRkVSID0gewotICAgIEVHTDEwLkVHTF9SRURfU0laRSwgOCwKLSAgICBF
R0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQkxVRV9TSVpFLCA4LAotICAg
IEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICBFR0wx
MC5FR0xfU1VSRkFDRV9UWVBFLCBFR0wxMC5FR0xfUEJVRkZFUl9CSVQsCi0gICAgRUdMMTAuRUdM
X05PTkUKLSAgfTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBDT05GSUdfUElYRUxfUkdC
QV9CVUZGRVIgPSB7Ci0gICAgRUdMMTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9H
UkVFTl9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdM
X0FMUEhBX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5H
TF9FUzJfQklULAotICAgIEVHTDEwLkVHTF9TVVJGQUNFX1RZUEUsIEVHTDEwLkVHTF9QQlVGRkVS
X0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGlu
dFtdIENPTkZJR19SRUNPUkRBQkxFID0gewotICAgIEVHTDEwLkVHTF9SRURfU0laRSwgOCwKLSAg
ICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQkxVRV9TSVpFLCA4LAot
ICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICBF
R0xfUkVDT1JEQUJMRV9BTkRST0lELCAxLAotICAgIEVHTDEwLkVHTF9OT05FCi0gIH07Ci0gIC8v
IGNsYW5nLWZvcm1hdCBvbgotCi0gIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IHdpdGggdGhlIHNw
ZWNpZmllZCBjb25maWcgYXR0cmlidXRlcywgc2hhcmluZyBkYXRhIHdpdGggc2hhcmVkQ29udGV4
dC4KLSAgLy8gfHNoYXJlZENvbnRleHR8IGNhbiBiZSBudWxsLgotICBwdWJsaWMgc3RhdGljIEVn
bEJhc2UgY3JlYXRlKENvbnRleHQgc2hhcmVkQ29udGV4dCwgaW50W10gY29uZmlnQXR0cmlidXRl
cykgewotICAgIHJldHVybiAoRWdsQmFzZTE0LmlzRUdMMTRTdXBwb3J0ZWQoKQotICAgICAgICAg
ICAgICAgJiYgKHNoYXJlZENvbnRleHQgPT0gbnVsbCB8fCBzaGFyZWRDb250ZXh0IGluc3RhbmNl
b2YgRWdsQmFzZTE0LkNvbnRleHQpKQotICAgICAgICA/IG5ldyBFZ2xCYXNlMTQoKEVnbEJhc2Ux
NC5Db250ZXh0KSBzaGFyZWRDb250ZXh0LCBjb25maWdBdHRyaWJ1dGVzKQotICAgICAgICA6IG5l
dyBFZ2xCYXNlMTAoKEVnbEJhc2UxMC5Db250ZXh0KSBzaGFyZWRDb250ZXh0LCBjb25maWdBdHRy
aWJ1dGVzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgRWdsQmFzZSBjcmVhdGUoKSB7Ci0gICAg
cmV0dXJuIGNyZWF0ZShudWxsLCBDT05GSUdfUExBSU4pOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBFZ2xCYXNlIGNyZWF0ZShDb250ZXh0IHNoYXJlZENvbnRleHQpIHsKLSAgICByZXR1cm4gY3Jl
YXRlKHNoYXJlZENvbnRleHQsIENPTkZJR19QTEFJTik7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJh
Y3Qgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSk7Ci0KLSAgLy8gQ3JlYXRlIEVH
TFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNlVGV4dHVyZS4KLSAgcHVibGljIGFic3Ry
YWN0IHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSk7Ci0K
LSAgLy8gQ3JlYXRlIGR1bW15IDF4MSBwaXhlbCBidWZmZXIgc3VyZmFjZSBzbyB0aGUgY29udGV4
dCBjYW4gYmUgbWFkZSBjdXJyZW50LgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjcmVhdGVEdW1t
eVBidWZmZXJTdXJmYWNlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgY3JlYXRlUGJ1ZmZl
clN1cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICBwdWJsaWMgYWJzdHJhY3QgQ29u
dGV4dCBnZXRFZ2xCYXNlQ29udGV4dCgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGhh
c1N1cmZhY2UoKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgaW50IHN1cmZhY2VXaWR0aCgpOwotCi0g
IHB1YmxpYyBhYnN0cmFjdCBpbnQgc3VyZmFjZUhlaWdodCgpOwotCi0gIHB1YmxpYyBhYnN0cmFj
dCB2b2lkIHJlbGVhc2VTdXJmYWNlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgcmVsZWFz
ZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIG1ha2VDdXJyZW50KCk7Ci0KLSAgLy8gRGV0
YWNoIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0LCBzbyB0aGF0IGl0IGNhbiBiZSBtYWRlIGN1cnJl
bnQgb24gYW5vdGhlciB0aHJlYWQuCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGRldGFjaEN1cnJl
bnQoKTsKLQotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBzd2FwQnVmZmVycygpOwotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTAuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0VnbEJhc2UxMC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0VnbEJhc2UxMC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzA3ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3Jh
cGhpY3MuQ2FudmFzOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRy
b2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNl
OwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotCi1pbXBvcnQgamF2YXgubWlj
cm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5r
aHJvbm9zLmVnbC5FR0xDb25maWc7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mu
ZWdsLkVHTENvbnRleHQ7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVH
TERpc3BsYXk7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTFN1cmZh
Y2U7Ci0KLS8qKgotICogSG9sZHMgRUdMIHN0YXRlIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIGhh
bmRsaW5nIGFuIGVnbCAxLjAgRUdMQ29udGV4dCwgYW4gRUdMRGlzcGxheSwKLSAqIGFuZCBhbiBF
R0xTdXJmYWNlLgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgRWdsQmFzZTEwIGV4dGVuZHMgRWds
QmFzZSB7Ci0gIC8vIFRoaXMgY29uc3RhbnQgaXMgdGFrZW4gZnJvbSBFR0wxNC5FR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTi4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVHTF9DT05URVhU
X0NMSUVOVF9WRVJTSU9OID0gMHgzMDk4OwotCi0gIHByaXZhdGUgZmluYWwgRUdMMTAgZWdsOwot
ICBwcml2YXRlIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLSAgcHJpdmF0ZSBFR0xDb25maWcgZWds
Q29uZmlnOwotICBwcml2YXRlIEVHTERpc3BsYXkgZWdsRGlzcGxheTsKLSAgcHJpdmF0ZSBFR0xT
dXJmYWNlIGVnbFN1cmZhY2UgPSBFR0wxMC5FR0xfTk9fU1VSRkFDRTsKLQotICAvLyBFR0wgd3Jh
cHBlciBmb3IgYW4gYWN0dWFsIEVHTENvbnRleHQuCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29u
dGV4dCBleHRlbmRzIEVnbEJhc2UuQ29udGV4dCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBFR0xDb250
ZXh0IGVnbENvbnRleHQ7Ci0KLSAgICBwdWJsaWMgQ29udGV4dChFR0xDb250ZXh0IGVnbENvbnRl
eHQpIHsKLSAgICAgIHRoaXMuZWdsQ29udGV4dCA9IGVnbENvbnRleHQ7Ci0gICAgfQotICB9Ci0K
LSAgLy8gQ3JlYXRlIGEgbmV3IGNvbnRleHQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZyB0eXBl
LCBzaGFyaW5nIGRhdGEgd2l0aCBzaGFyZWRDb250ZXh0LgotICBwdWJsaWMgRWdsQmFzZTEwKENv
bnRleHQgc2hhcmVkQ29udGV4dCwgaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIHRoaXMu
ZWdsID0gKEVHTDEwKSBFR0xDb250ZXh0LmdldEVHTCgpOwotICAgIGVnbERpc3BsYXkgPSBnZXRF
Z2xEaXNwbGF5KCk7Ci0gICAgZWdsQ29uZmlnID0gZ2V0RWdsQ29uZmlnKGVnbERpc3BsYXksIGNv
bmZpZ0F0dHJpYnV0ZXMpOwotICAgIGVnbENvbnRleHQgPSBjcmVhdGVFZ2xDb250ZXh0KHNoYXJl
ZENvbnRleHQsIGVnbERpc3BsYXksIGVnbENvbmZpZyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICAvKioKLSAg
ICAgKiBXZSBoYXZlIHRvIHdyYXAgU3VyZmFjZSBpbiBhIFN1cmZhY2VIb2xkZXIgYmVjYXVzZSBm
b3Igc29tZSByZWFzb24gZWdsQ3JlYXRlV2luZG93U3VyZmFjZQotICAgICAqIGNvdWxkbid0IGFj
dHVhbGx5IHRha2UgYSBTdXJmYWNlIG9iamVjdCB1bnRpbCBBUEkgMTcuIE9sZGVyIHZlcnNpb25z
IGZvcnR1bmF0ZWx5IGp1c3QgY2FsbAotICAgICAqIFN1cmZhY2VIb2xkZXIuZ2V0U3VyZmFjZSgp
LCBzbyB3ZSdsbCBkbyB0aGF0LiBObyBvdGhlciBtZXRob2RzIGFyZSByZWxldmFudC4KLSAgICAg
Ki8KLSAgICBjbGFzcyBGYWtlU3VyZmFjZUhvbGRlciBpbXBsZW1lbnRzIFN1cmZhY2VIb2xkZXIg
ewotICAgICAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlIHN1cmZhY2U7Ci0KLSAgICAgIEZha2VTdXJm
YWNlSG9sZGVyKFN1cmZhY2Ugc3VyZmFjZSkgewotICAgICAgICB0aGlzLnN1cmZhY2UgPSBzdXJm
YWNlOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIGFkZENh
bGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIHJlbW92ZUNhbGxiYWNrKENhbGxiYWNrIGNhbGxiYWNrKSB7fQotCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIGlzQ3JlYXRpbmcoKSB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgQERlcHJlY2F0ZWQKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgc2V0VHlwZShpbnQgaSkge30KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBzZXRGaXhlZFNpemUoaW50IGksIGludCBpMikge30KLQotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXRTaXplRnJvbUxheW91dCgpIHt9Ci0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0Rm9ybWF0KGludCBpKSB7fQot
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldEtlZXBTY3JlZW5Pbihib29s
ZWFuIGIpIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIENhbnZhcyBsb2NrQ2Fu
dmFzKCkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoUmVjdCByZWN0KSB7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHVubG9ja0NhbnZhc0FuZFBvc3QoQ2FudmFzIGNhbnZhcykge30KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgUmVjdCBnZXRTdXJmYWNlRnJhbWUoKSB7Ci0gICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdXJmYWNlIGdl
dFN1cmZhY2UoKSB7Ci0gICAgICAgIHJldHVybiBzdXJmYWNlOwotICAgICAgfQotICAgIH0KLQot
ICAgIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChuZXcgRmFrZVN1cmZhY2VIb2xkZXIoc3VyZmFjZSkp
OwotICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNl
VGV4dHVyZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFj
ZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwoc3Vy
ZmFjZVRleHR1cmUpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSBlaXRoZXIg
YSBTdXJmYWNlSG9sZGVyIG9yIGEgU3VyZmFjZVRleHR1cmUuCi0gIHByaXZhdGUgdm9pZCBjcmVh
dGVTdXJmYWNlSW50ZXJuYWwoT2JqZWN0IG5hdGl2ZVdpbmRvdykgewotICAgIGlmICghKG5hdGl2
ZVdpbmRvdyBpbnN0YW5jZW9mIFN1cmZhY2VIb2xkZXIpICYmICEobmF0aXZlV2luZG93IGluc3Rh
bmNlb2YgU3VyZmFjZVRleHR1cmUpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uKCJJbnB1dCBtdXN0IGJlIGVpdGhlciBhIFN1cmZhY2VIb2xkZXIgb3IgU3VyZmFjZVRl
eHR1cmUiKTsKLSAgICB9Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1
cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKCJBbHJlYWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7Ci0gICAgfQotICAgIGludFtd
IHN1cmZhY2VBdHRyaWJzID0ge0VHTDEwLkVHTF9OT05FfTsKLSAgICBlZ2xTdXJmYWNlID0gZWds
LmVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCBuYXRpdmVXaW5k
b3csIHN1cmZhY2VBdHRyaWJzKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9f
U1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAg
IkZhaWxlZCB0byBjcmVhdGUgd2luZG93IHN1cmZhY2U6IDB4IiArIEludGVnZXIudG9IZXhTdHJp
bmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgZHVtbXkg
MXgxIHBpeGVsIGJ1ZmZlciBzdXJmYWNlIHNvIHRoZSBjb250ZXh0IGNhbiBiZSBtYWRlIGN1cnJl
bnQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVEdW1teVBidWZmZXJTdXJmYWNl
KCkgewotICAgIGNyZWF0ZVBidWZmZXJTdXJmYWNlKDEsIDEpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBidWZmZXJTdXJmYWNlKGludCB3aWR0aCwgaW50IGhlaWdo
dCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlICE9IEVH
TDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigi
QWxyZWFkeSBoYXMgYW4gRUdMU3VyZmFjZSIpOwotICAgIH0KLSAgICBpbnRbXSBzdXJmYWNlQXR0
cmlicyA9IHtFR0wxMC5FR0xfV0lEVEgsIHdpZHRoLCBFR0wxMC5FR0xfSEVJR0hULCBoZWlnaHQs
IEVHTDEwLkVHTF9OT05FfTsKLSAgICBlZ2xTdXJmYWNlID0gZWdsLmVnbENyZWF0ZVBidWZmZXJT
dXJmYWNlKGVnbERpc3BsYXksIGVnbENvbmZpZywgc3VyZmFjZUF0dHJpYnMpOwotICAgIGlmIChl
Z2xTdXJmYWNlID09IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIGNyZWF0ZSBwaXhlbCBidWZmZXIgc3VyZmFjZSB3aXRo
IHNpemUgIiArIHdpZHRoICsgIngiCi0gICAgICAgICAgKyBoZWlnaHQgKyAiOiAweCIgKyBJbnRl
Z2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBvcmcud2VicnRjLkVnbEJhc2UuQ29udGV4dCBnZXRFZ2xCYXNlQ29u
dGV4dCgpIHsKLSAgICByZXR1cm4gbmV3IEVnbEJhc2UxMC5Db250ZXh0KGVnbENvbnRleHQpOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGhhc1N1cmZhY2UoKSB7Ci0gICAg
cmV0dXJuIGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0U7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGludCBzdXJmYWNlV2lkdGgoKSB7Ci0gICAgZmluYWwgaW50IHdpZHRo
QXJyYXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgZWdsLmVnbFF1ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5
LCBlZ2xTdXJmYWNlLCBFR0wxMC5FR0xfV0lEVEgsIHdpZHRoQXJyYXkpOwotICAgIHJldHVybiB3
aWR0aEFycmF5WzBdOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZUhl
aWdodCgpIHsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0QXJyYXlbXSA9IG5ldyBpbnRbMV07Ci0gICAg
ZWdsLmVnbFF1ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxMC5FR0xfSEVJ
R0hULCBoZWlnaHRBcnJheSk7Ci0gICAgcmV0dXJuIGhlaWdodEFycmF5WzBdOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2VTdXJmYWNlKCkgewotICAgIGlmIChlZ2xT
dXJmYWNlICE9IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICBlZ2wuZWdsRGVzdHJveVN1
cmZhY2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAgICBlZ2xTdXJmYWNlID0gRUdMMTAu
RUdMX05PX1NVUkZBQ0U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNOb3RS
ZWxlYXNlZCgpIHsKLSAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0wxMC5FR0xfTk9fRElTUExBWSB8
fCBlZ2xDb250ZXh0ID09IEVHTDEwLkVHTF9OT19DT05URVhUCi0gICAgICAgIHx8IGVnbENvbmZp
ZyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhpcyBvYmpl
Y3QgaGFzIGJlZW4gcmVsZWFzZWQiKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICByZWxl
YXNlU3VyZmFjZSgpOwotICAgIGRldGFjaEN1cnJlbnQoKTsKLSAgICBlZ2wuZWdsRGVzdHJveUNv
bnRleHQoZWdsRGlzcGxheSwgZWdsQ29udGV4dCk7Ci0gICAgZWdsLmVnbFRlcm1pbmF0ZShlZ2xE
aXNwbGF5KTsKLSAgICBlZ2xDb250ZXh0ID0gRUdMMTAuRUdMX05PX0NPTlRFWFQ7Ci0gICAgZWds
RGlzcGxheSA9IEVHTDEwLkVHTF9OT19ESVNQTEFZOwotICAgIGVnbENvbmZpZyA9IG51bGw7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgbWFrZUN1cnJlbnQoKSB7Ci0gICAgY2hl
Y2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05PX1NV
UkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBFR0xTdXJmYWNl
IC0gY2FuJ3QgbWFrZSBjdXJyZW50Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoRWdsQmFz
ZS5sb2NrKSB7Ci0gICAgICBpZiAoIWVnbC5lZ2xNYWtlQ3VycmVudChlZ2xEaXNwbGF5LCBlZ2xT
dXJmYWNlLCBlZ2xTdXJmYWNlLCBlZ2xDb250ZXh0KSkgewotICAgICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJlZ2xNYWtlQ3VycmVudCBmYWlsZWQ6IDB4IiAr
IEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICAvLyBEZXRhY2ggdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQsIHNvIHRoYXQgaXQg
Y2FuIGJlIG1hZGUgY3VycmVudCBvbiBhbm90aGVyIHRocmVhZC4KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIGRldGFjaEN1cnJlbnQoKSB7Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxv
Y2spIHsKLSAgICAgIGlmICghZWdsLmVnbE1ha2VDdXJyZW50KAotICAgICAgICAgICAgICBlZ2xE
aXNwbGF5LCBFR0wxMC5FR0xfTk9fU1VSRkFDRSwgRUdMMTAuRUdMX05PX1NVUkZBQ0UsIEVHTDEw
LkVHTF9OT19DT05URVhUKSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigK
LSAgICAgICAgICAgICJlZ2xEZXRhY2hDdXJyZW50IGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hl
eFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBzd2FwQnVmZmVycygpIHsKLSAgICBjaGVja0lzTm90UmVs
ZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBz
d2FwIGJ1ZmZlcnMiKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsK
LSAgICAgIGVnbC5lZ2xTd2FwQnVmZmVycyhlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsKLSAgICB9
Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMRGlzcGxheSwgb3IgZGllIHRyeWluZy4KLSAgcHJp
dmF0ZSBFR0xEaXNwbGF5IGdldEVnbERpc3BsYXkoKSB7Ci0gICAgRUdMRGlzcGxheSBlZ2xEaXNw
bGF5ID0gZWdsLmVnbEdldERpc3BsYXkoRUdMMTAuRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0gICAg
aWYgKGVnbERpc3BsYXkgPT0gRUdMMTAuRUdMX05PX0RJU1BMQVkpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJVbmFibGUgdG8gZ2V0IEVHTDEwIGRpc3Bs
YXk6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICB9
Ci0gICAgaW50W10gdmVyc2lvbiA9IG5ldyBpbnRbMl07Ci0gICAgaWYgKCFlZ2wuZWdsSW5pdGlh
bGl6ZShlZ2xEaXNwbGF5LCB2ZXJzaW9uKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oCi0gICAgICAgICAgIlVuYWJsZSB0byBpbml0aWFsaXplIEVHTDEwOiAweCIgKyBJbnRl
Z2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIHJldHVybiBl
Z2xEaXNwbGF5OwotICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTENvbmZpZywgb3IgZGllIHRyeWlu
Zy4KLSAgcHJpdmF0ZSBFR0xDb25maWcgZ2V0RWdsQ29uZmlnKEVHTERpc3BsYXkgZWdsRGlzcGxh
eSwgaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIEVHTENvbmZpZ1tdIGNvbmZpZ3MgPSBu
ZXcgRUdMQ29uZmlnWzFdOwotICAgIGludFtdIG51bUNvbmZpZ3MgPSBuZXcgaW50WzFdOwotICAg
IGlmICghZWdsLmVnbENob29zZUNvbmZpZyhlZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCBj
b25maWdzLCBjb25maWdzLmxlbmd0aCwgbnVtQ29uZmlncykpIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJlZ2xDaG9vc2VDb25maWcgZmFpbGVkOiAweCIg
KyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIGlm
IChudW1Db25maWdzWzBdIDw9IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJVbmFibGUgdG8gZmluZCBhbnkgbWF0Y2hpbmcgRUdMIGNvbmZpZyIpOwotICAgIH0KLSAgICBm
aW5hbCBFR0xDb25maWcgZWdsQ29uZmlnID0gY29uZmlnc1swXTsKLSAgICBpZiAoZWdsQ29uZmln
ID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xDaG9vc2VD
b25maWcgcmV0dXJuZWQgbnVsbCIpOwotICAgIH0KLSAgICByZXR1cm4gZWdsQ29uZmlnOwotICB9
Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTENvbmZpZywgb3IgZGllIHRyeWluZy4KLSAgcHJpdmF0ZSBF
R0xDb250ZXh0IGNyZWF0ZUVnbENvbnRleHQoCi0gICAgICBDb250ZXh0IHNoYXJlZENvbnRleHQs
IEVHTERpc3BsYXkgZWdsRGlzcGxheSwgRUdMQ29uZmlnIGVnbENvbmZpZykgewotICAgIGlmIChz
aGFyZWRDb250ZXh0ICE9IG51bGwgJiYgc2hhcmVkQ29udGV4dC5lZ2xDb250ZXh0ID09IEVHTDEw
LkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52
YWxpZCBzaGFyZWRDb250ZXh0Iik7Ci0gICAgfQotICAgIGludFtdIGNvbnRleHRBdHRyaWJ1dGVz
ID0ge0VHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLCAyLCBFR0wxMC5FR0xfTk9ORX07Ci0gICAg
RUdMQ29udGV4dCByb290Q29udGV4dCA9Ci0gICAgICAgIHNoYXJlZENvbnRleHQgPT0gbnVsbCA/
IEVHTDEwLkVHTF9OT19DT05URVhUIDogc2hhcmVkQ29udGV4dC5lZ2xDb250ZXh0OwotICAgIGZp
bmFsIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9j
aykgewotICAgICAgZWdsQ29udGV4dCA9IGVnbC5lZ2xDcmVhdGVDb250ZXh0KGVnbERpc3BsYXks
IGVnbENvbmZpZywgcm9vdENvbnRleHQsIGNvbnRleHRBdHRyaWJ1dGVzKTsKLSAgICB9Ci0gICAg
aWYgKGVnbENvbnRleHQgPT0gRUdMMTAuRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIEVHTCBjb250
ZXh0OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAg
fQotICAgIHJldHVybiBlZ2xDb250ZXh0OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0VnbEJhc2UxNC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTE0
LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTE0Lmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNjQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
NSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFw
aTsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJv
aWQub3BlbmdsLkVHTDE0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTENvbmZpZzsKLWltcG9y
dCBhbmRyb2lkLm9wZW5nbC5FR0xDb250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTERp
c3BsYXk7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMRXh0OwotaW1wb3J0IGFuZHJvaWQub3Bl
bmdsLkVHTFN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci0KLS8qKgotICog
SG9sZHMgRUdMIHN0YXRlIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIGhhbmRsaW5nIGFuIEVHTDE0
IEVHTENvbnRleHQsIGFuIEVHTERpc3BsYXksCi0gKiBhbmQgYW4gRUdMU3VyZmFjZS4KLSAqLwot
QFRhcmdldEFwaSgxOCkKLXB1YmxpYyBmaW5hbCBjbGFzcyBFZ2xCYXNlMTQgZXh0ZW5kcyBFZ2xC
YXNlIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJFZ2xCYXNlMTQiOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRUdMRXh0X1NES19WRVJTSU9OID0gYW5kcm9pZC5v
cy5CdWlsZC5WRVJTSU9OX0NPREVTLkpFTExZX0JFQU5fTVIyOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgQ1VSUkVOVF9TREtfVkVSU0lPTiA9IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTi5T
REtfSU5UOwotICBwcml2YXRlIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLSAgcHJpdmF0ZSBFR0xD
b25maWcgZWdsQ29uZmlnOwotICBwcml2YXRlIEVHTERpc3BsYXkgZWdsRGlzcGxheTsKLSAgcHJp
dmF0ZSBFR0xTdXJmYWNlIGVnbFN1cmZhY2UgPSBFR0wxNC5FR0xfTk9fU1VSRkFDRTsKLQotICAv
LyBFR0wgMS40IGlzIHN1cHBvcnRlZCBmcm9tIEFQSSAxNy4gQnV0IEVHTEV4dCB0aGF0IGlzIHVz
ZWQgZm9yIHNldHRpbmcgcHJlc2VudGF0aW9uCi0gIC8vIHRpbWUgc3RhbXAgb24gYSBzdXJmYWNl
IGlzIHN1cHBvcnRlZCBmcm9tIDE4IHNvIHdlIHJlcXVpcmUgMTguCi0gIHB1YmxpYyBzdGF0aWMg
Ym9vbGVhbiBpc0VHTDE0U3VwcG9ydGVkKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJTREsgdmVy
c2lvbjogIiArIENVUlJFTlRfU0RLX1ZFUlNJT04gKyAiLiBpc0VHTDE0U3VwcG9ydGVkOiAiCi0g
ICAgICAgICAgICArIChDVVJSRU5UX1NES19WRVJTSU9OID49IEVHTEV4dF9TREtfVkVSU0lPTikp
OwotICAgIHJldHVybiAoQ1VSUkVOVF9TREtfVkVSU0lPTiA+PSBFR0xFeHRfU0RLX1ZFUlNJT04p
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250ZXh0IGV4dGVuZHMgRWdsQmFzZS5D
b250ZXh0IHsKLSAgICBwcml2YXRlIGZpbmFsIGFuZHJvaWQub3BlbmdsLkVHTENvbnRleHQgZWds
MTRDb250ZXh0OwotCi0gICAgcHVibGljIENvbnRleHQoYW5kcm9pZC5vcGVuZ2wuRUdMQ29udGV4
dCBlZ2xDb250ZXh0KSB7Ci0gICAgICB0aGlzLmVnbDE0Q29udGV4dCA9IGVnbENvbnRleHQ7Ci0g
ICAgfQotICB9Ci0KLSAgLy8gQ3JlYXRlIGEgbmV3IGNvbnRleHQgd2l0aCB0aGUgc3BlY2lmaWVk
IGNvbmZpZyB0eXBlLCBzaGFyaW5nIGRhdGEgd2l0aCBzaGFyZWRDb250ZXh0LgotICAvLyB8c2hh
cmVkQ29udGV4dHwgbWF5IGJlIG51bGwuCi0gIHB1YmxpYyBFZ2xCYXNlMTQoRWdsQmFzZTE0LkNv
bnRleHQgc2hhcmVkQ29udGV4dCwgaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIGVnbERp
c3BsYXkgPSBnZXRFZ2xEaXNwbGF5KCk7Ci0gICAgZWdsQ29uZmlnID0gZ2V0RWdsQ29uZmlnKGVn
bERpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICAgIGVnbENvbnRleHQgPSBjcmVhdGVFZ2xD
b250ZXh0KHNoYXJlZENvbnRleHQsIGVnbERpc3BsYXksIGVnbENvbmZpZyk7Ci0gIH0KLQotICAv
LyBDcmVhdGUgRUdMU3VyZmFjZSBmcm9tIHRoZSBBbmRyb2lkIFN1cmZhY2UuCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSkgewotICAgIGNy
ZWF0ZVN1cmZhY2VJbnRlcm5hbChzdXJmYWNlKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJm
YWNlIGZyb20gdGhlIEFuZHJvaWQgU3VyZmFjZVRleHR1cmUuCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0g
ICAgY3JlYXRlU3VyZmFjZUludGVybmFsKHN1cmZhY2VUZXh0dXJlKTsKLSAgfQotCi0gIC8vIENy
ZWF0ZSBFR0xTdXJmYWNlIGZyb20gZWl0aGVyIFN1cmZhY2Ugb3IgU3VyZmFjZVRleHR1cmUuCi0g
IHByaXZhdGUgdm9pZCBjcmVhdGVTdXJmYWNlSW50ZXJuYWwoT2JqZWN0IHN1cmZhY2UpIHsKLSAg
ICBpZiAoIShzdXJmYWNlIGluc3RhbmNlb2YgU3VyZmFjZSkgJiYgIShzdXJmYWNlIGluc3RhbmNl
b2YgU3VyZmFjZVRleHR1cmUpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0
aW9uKCJJbnB1dCBtdXN0IGJlIGVpdGhlciBhIFN1cmZhY2Ugb3IgU3VyZmFjZVRleHR1cmUiKTsK
LSAgICB9Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0g
RUdMMTQuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJBbHJlYWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7Ci0gICAgfQotICAgIGludFtdIHN1cmZhY2VB
dHRyaWJzID0ge0VHTDE0LkVHTF9OT05FfTsKLSAgICBlZ2xTdXJmYWNlID0gRUdMMTQuZWdsQ3Jl
YXRlV2luZG93U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHN1cmZhY2UsIHN1cmZhY2VB
dHRyaWJzLCAwKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkZhaWxlZCB0
byBjcmVhdGUgd2luZG93IHN1cmZhY2U6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQu
ZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBjcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCkgewotICAgIGNyZWF0ZVBidWZmZXJTdXJmYWNl
KDEsIDEpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBidWZmZXJT
dXJmYWNlKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgp
OwotICAgIGlmIChlZ2xTdXJmYWNlICE9IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQWxyZWFkeSBoYXMgYW4gRUdMU3VyZmFjZSIpOwot
ICAgIH0KLSAgICBpbnRbXSBzdXJmYWNlQXR0cmlicyA9IHtFR0wxNC5FR0xfV0lEVEgsIHdpZHRo
LCBFR0wxNC5FR0xfSEVJR0hULCBoZWlnaHQsIEVHTDE0LkVHTF9OT05FfTsKLSAgICBlZ2xTdXJm
YWNlID0gRUdMMTQuZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmln
LCBzdXJmYWNlQXR0cmlicywgMCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTQuRUdMX05P
X1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGYWlsZWQgdG8g
Y3JlYXRlIHBpeGVsIGJ1ZmZlciBzdXJmYWNlIHdpdGggc2l6ZSAiICsgd2lkdGggKyAieCIKLSAg
ICAgICAgICArIGhlaWdodCArICI6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWds
R2V0RXJyb3IoKSkpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQ29udGV4
dCBnZXRFZ2xCYXNlQ29udGV4dCgpIHsKLSAgICByZXR1cm4gbmV3IEVnbEJhc2UxNC5Db250ZXh0
KGVnbENvbnRleHQpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGhhc1N1
cmZhY2UoKSB7Ci0gICAgcmV0dXJuIGVnbFN1cmZhY2UgIT0gRUdMMTQuRUdMX05PX1NVUkZBQ0U7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGludCBzdXJmYWNlV2lkdGgoKSB7Ci0gICAg
ZmluYWwgaW50IHdpZHRoQXJyYXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgRUdMMTQuZWdsUXVlcnlT
dXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIEVHTDE0LkVHTF9XSURUSCwgd2lkdGhBcnJh
eSwgMCk7Ci0gICAgcmV0dXJuIHdpZHRoQXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIGludCBzdXJmYWNlSGVpZ2h0KCkgewotICAgIGZpbmFsIGludCBoZWlnaHRBcnJheVtd
ID0gbmV3IGludFsxXTsKLSAgICBFR0wxNC5lZ2xRdWVyeVN1cmZhY2UoZWdsRGlzcGxheSwgZWds
U3VyZmFjZSwgRUdMMTQuRUdMX0hFSUdIVCwgaGVpZ2h0QXJyYXksIDApOwotICAgIHJldHVybiBo
ZWlnaHRBcnJheVswXTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxlYXNl
U3VyZmFjZSgpIHsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkg
ewotICAgICAgRUdMMTQuZWdsRGVzdHJveVN1cmZhY2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7
Ci0gICAgICBlZ2xTdXJmYWNlID0gRUdMMTQuRUdMX05PX1NVUkZBQ0U7Ci0gICAgfQotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNOb3RSZWxlYXNlZCgpIHsKLSAgICBpZiAoZWdsRGlzcGxh
eSA9PSBFR0wxNC5FR0xfTk9fRElTUExBWSB8fCBlZ2xDb250ZXh0ID09IEVHTDE0LkVHTF9OT19D
T05URVhUCi0gICAgICAgIHx8IGVnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiVGhpcyBvYmplY3QgaGFzIGJlZW4gcmVsZWFzZWQiKTsKLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBjaGVj
a0lzTm90UmVsZWFzZWQoKTsKLSAgICByZWxlYXNlU3VyZmFjZSgpOwotICAgIGRldGFjaEN1cnJl
bnQoKTsKLSAgICBFR0wxNC5lZ2xEZXN0cm95Q29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb250ZXh0
KTsKLSAgICBFR0wxNC5lZ2xSZWxlYXNlVGhyZWFkKCk7Ci0gICAgRUdMMTQuZWdsVGVybWluYXRl
KGVnbERpc3BsYXkpOwotICAgIGVnbENvbnRleHQgPSBFR0wxNC5FR0xfTk9fQ09OVEVYVDsKLSAg
ICBlZ2xEaXNwbGF5ID0gRUdMMTQuRUdMX05PX0RJU1BMQVk7Ci0gICAgZWdsQ29uZmlnID0gbnVs
bDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBtYWtlQ3VycmVudCgpIHsKLSAg
ICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xf
Tk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1
cmZhY2UgLSBjYW4ndCBtYWtlIGN1cnJlbnQiKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChF
Z2xCYXNlLmxvY2spIHsKLSAgICAgIGlmICghRUdMMTQuZWdsTWFrZUN1cnJlbnQoZWdsRGlzcGxh
eSwgZWdsU3VyZmFjZSwgZWdsU3VyZmFjZSwgZWdsQ29udGV4dCkpIHsKLSAgICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiZWdsTWFrZUN1cnJlbnQgZmFpbGVk
OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICAvLyBEZXRhY2ggdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQsIHNv
IHRoYXQgaXQgY2FuIGJlIG1hZGUgY3VycmVudCBvbiBhbm90aGVyIHRocmVhZC4KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIGRldGFjaEN1cnJlbnQoKSB7Ci0gICAgc3luY2hyb25pemVkIChF
Z2xCYXNlLmxvY2spIHsKLSAgICAgIGlmICghRUdMMTQuZWdsTWFrZUN1cnJlbnQoCi0gICAgICAg
ICAgICAgIGVnbERpc3BsYXksIEVHTDE0LkVHTF9OT19TVVJGQUNFLCBFR0wxNC5FR0xfTk9fU1VS
RkFDRSwgRUdMMTQuRUdMX05PX0NPTlRFWFQpKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKAotICAgICAgICAgICAgImVnbERldGFjaEN1cnJlbnQgZmFpbGVkOiAweCIgKyBJ
bnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3dhcEJ1ZmZlcnMoKSB7Ci0gICAg
Y2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTQuRUdMX05P
X1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBFR0xTdXJm
YWNlIC0gY2FuJ3Qgc3dhcCBidWZmZXJzIik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoRWds
QmFzZS5sb2NrKSB7Ci0gICAgICBFR0wxNC5lZ2xTd2FwQnVmZmVycyhlZ2xEaXNwbGF5LCBlZ2xT
dXJmYWNlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzd2FwQnVmZmVycyhsb25nIHRp
bWVTdGFtcE5zKSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZh
Y2UgPT0gRUdMMTQuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJObyBFR0xTdXJmYWNlIC0gY2FuJ3Qgc3dhcCBidWZmZXJzIik7Ci0gICAgfQotICAg
IHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICAvLyBTZWUKLSAgICAgIC8vIGh0
dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29tL3BsYXRmb3JtL2ZyYW1ld29ya3MvbmF0aXZl
LysvdG9vbHNfcjIyLjIvb3BlbmdsL3NwZWNzL0VHTF9BTkRST0lEX3ByZXNlbnRhdGlvbl90aW1l
LnR4dAotICAgICAgRUdMRXh0LmVnbFByZXNlbnRhdGlvblRpbWVBTkRST0lEKGVnbERpc3BsYXks
IGVnbFN1cmZhY2UsIHRpbWVTdGFtcE5zKTsKLSAgICAgIEVHTDE0LmVnbFN3YXBCdWZmZXJzKGVn
bERpc3BsYXksIGVnbFN1cmZhY2UpOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xE
aXNwbGF5LCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIHN0YXRpYyBFR0xEaXNwbGF5IGdldEVn
bERpc3BsYXkoKSB7Ci0gICAgRUdMRGlzcGxheSBlZ2xEaXNwbGF5ID0gRUdMMTQuZWdsR2V0RGlz
cGxheShFR0wxNC5FR0xfREVGQVVMVF9ESVNQTEFZKTsKLSAgICBpZiAoZWdsRGlzcGxheSA9PSBF
R0wxNC5FR0xfTk9fRElTUExBWSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
Ci0gICAgICAgICAgIlVuYWJsZSB0byBnZXQgRUdMMTQgZGlzcGxheTogMHgiICsgSW50ZWdlci50
b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIGludFtdIHZlcnNp
b24gPSBuZXcgaW50WzJdOwotICAgIGlmICghRUdMMTQuZWdsSW5pdGlhbGl6ZShlZ2xEaXNwbGF5
LCB2ZXJzaW9uLCAwLCB2ZXJzaW9uLCAxKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oCi0gICAgICAgICAgIlVuYWJsZSB0byBpbml0aWFsaXplIEVHTDE0OiAweCIgKyBJbnRl
Z2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGVnbERpc3BsYXk7Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5
aW5nLgotICBwcml2YXRlIHN0YXRpYyBFR0xDb25maWcgZ2V0RWdsQ29uZmlnKEVHTERpc3BsYXkg
ZWdsRGlzcGxheSwgaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIEVHTENvbmZpZ1tdIGNv
bmZpZ3MgPSBuZXcgRUdMQ29uZmlnWzFdOwotICAgIGludFtdIG51bUNvbmZpZ3MgPSBuZXcgaW50
WzFdOwotICAgIGlmICghRUdMMTQuZWdsQ2hvb3NlQ29uZmlnKAotICAgICAgICAgICAgZWdsRGlz
cGxheSwgY29uZmlnQXR0cmlidXRlcywgMCwgY29uZmlncywgMCwgY29uZmlncy5sZW5ndGgsIG51
bUNvbmZpZ3MsIDApKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAg
ICAgICAiZWdsQ2hvb3NlQ29uZmlnIGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhF
R0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIGlmIChudW1Db25maWdzWzBdIDw9IDAp
IHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gZmluZCBhbnkg
bWF0Y2hpbmcgRUdMIGNvbmZpZyIpOwotICAgIH0KLSAgICBmaW5hbCBFR0xDb25maWcgZWdsQ29u
ZmlnID0gY29uZmlnc1swXTsKLSAgICBpZiAoZWdsQ29uZmlnID09IG51bGwpIHsKLSAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJlZ2xDaG9vc2VDb25maWcgcmV0dXJuZWQgbnVsbCIp
OwotICAgIH0KLSAgICByZXR1cm4gZWdsQ29uZmlnOwotICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVH
TENvbmZpZywgb3IgZGllIHRyeWluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgRUdMQ29udGV4dCBjcmVh
dGVFZ2xDb250ZXh0KAotICAgICAgRWdsQmFzZTE0LkNvbnRleHQgc2hhcmVkQ29udGV4dCwgRUdM
RGlzcGxheSBlZ2xEaXNwbGF5LCBFR0xDb25maWcgZWdsQ29uZmlnKSB7Ci0gICAgaWYgKHNoYXJl
ZENvbnRleHQgIT0gbnVsbCAmJiBzaGFyZWRDb250ZXh0LmVnbDE0Q29udGV4dCA9PSBFR0wxNC5F
R0xfTk9fQ09OVEVYVCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludmFs
aWQgc2hhcmVkQ29udGV4dCIpOwotICAgIH0KLSAgICBpbnRbXSBjb250ZXh0QXR0cmlidXRlcyA9
IHtFR0wxNC5FR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMiwgRUdMMTQuRUdMX05PTkV9Owot
ICAgIEVHTENvbnRleHQgcm9vdENvbnRleHQgPQotICAgICAgICBzaGFyZWRDb250ZXh0ID09IG51
bGwgPyBFR0wxNC5FR0xfTk9fQ09OVEVYVCA6IHNoYXJlZENvbnRleHQuZWdsMTRDb250ZXh0Owot
ICAgIGZpbmFsIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJh
c2UubG9jaykgewotICAgICAgZWdsQ29udGV4dCA9IEVHTDE0LmVnbENyZWF0ZUNvbnRleHQoZWds
RGlzcGxheSwgZWdsQ29uZmlnLCByb290Q29udGV4dCwgY29udGV4dEF0dHJpYnV0ZXMsIDApOwot
ICAgIH0KLSAgICBpZiAoZWdsQ29udGV4dCA9PSBFR0wxNC5FR0xfTk9fQ09OVEVYVCkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgIkZhaWxlZCB0byBjcmVh
dGUgRUdMIGNvbnRleHQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0RXJy
b3IoKSkpOwotICAgIH0KLSAgICByZXR1cm4gZWdsQ29udGV4dDsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvRWdsUmVuZGVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9FZ2xSZW5kZXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNjc2ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
Z3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7
Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxl
cjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5M
b29wZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgamF2YS5uaW8uQnl0
ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5J
dGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWlt
cG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLyoqCi0gKiBJbXBsZW1lbnRz
IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgYnkgZGlzcGxheWluZyB0aGUgdmlk
ZW8gc3RyZWFtIG9uIGFuIEVHTCBTdXJmYWNlLgotICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0
byBiZSB1c2VkIGFzIGEgaGVscGVyIGNsYXNzIGZvciByZW5kZXJpbmcgb24gU3VyZmFjZVZpZXdz
IGFuZAotICogVGV4dHVyZVZpZXdzLgotICovCi1wdWJsaWMgY2xhc3MgRWdsUmVuZGVyZXIgaW1w
bGVtZW50cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBUQUcgPSAiRWdsUmVuZGVyZXIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25n
IExPR19JTlRFUlZBTF9TRUMgPSA0OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NV
UkZBQ0VfQ0xFQVJfQ09VTlQgPSAzOwotCi0gIHB1YmxpYyBpbnRlcmZhY2UgRnJhbWVMaXN0ZW5l
ciB7IHZvaWQgb25GcmFtZShCaXRtYXAgZnJhbWUpOyB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xh
c3MgU2NhbGVBbmRGcmFtZUxpc3RlbmVyIHsKLSAgICBwdWJsaWMgZmluYWwgZmxvYXQgc2NhbGU7
Ci0gICAgcHVibGljIGZpbmFsIEZyYW1lTGlzdGVuZXIgbGlzdGVuZXI7Ci0KLSAgICBwdWJsaWMg
U2NhbGVBbmRGcmFtZUxpc3RlbmVyKGZsb2F0IHNjYWxlLCBGcmFtZUxpc3RlbmVyIGxpc3RlbmVy
KSB7Ci0gICAgICB0aGlzLnNjYWxlID0gc2NhbGU7Ci0gICAgICB0aGlzLmxpc3RlbmVyID0gbGlz
dGVuZXI7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBFZ2xTdXJmYWNlQ3JlYXRpb24g
aW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0gICAgcHJpdmF0ZSBPYmplY3Qgc3VyZmFjZTsKLQotICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRTdXJmYWNlKE9iamVjdCBzdXJmYWNlKSB7Ci0g
ICAgICB0aGlzLnN1cmZhY2UgPSBzdXJmYWNlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBydW4oKSB7Ci0gICAgICBpZiAoc3VyZmFjZSAhPSBu
dWxsICYmIGVnbEJhc2UgIT0gbnVsbCAmJiAhZWdsQmFzZS5oYXNTdXJmYWNlKCkpIHsKLSAgICAg
ICAgaWYgKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlKSB7Ci0gICAgICAgICAgZWdsQmFzZS5j
cmVhdGVTdXJmYWNlKChTdXJmYWNlKSBzdXJmYWNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdXJm
YWNlIGluc3RhbmNlb2YgU3VyZmFjZVRleHR1cmUpIHsKLSAgICAgICAgICBlZ2xCYXNlLmNyZWF0
ZVN1cmZhY2UoKFN1cmZhY2VUZXh0dXJlKSBzdXJmYWNlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJJbnZhbGlkIHN1cmZhY2U6
ICIgKyBzdXJmYWNlKTsKLSAgICAgICAgfQotICAgICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7
Ci0gICAgICAgIC8vIE5lY2Vzc2FyeSBmb3IgWVVWIGZyYW1lcyB3aXRoIG9kZCB3aWR0aC4KLSAg
ICAgICAgR0xFUzIwLmdsUGl4ZWxTdG9yZWkoR0xFUzIwLkdMX1VOUEFDS19BTElHTk1FTlQsIDEp
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0K
LSAgLy8gfHJlbmRlclRocmVhZEhhbmRsZXJ8IGlzIGEgaGFuZGxlciBmb3IgY29tbXVuaWNhdGlu
ZyB3aXRoIHxyZW5kZXJUaHJlYWR8LCBhbmQgaXMgc3luY2hyb25pemVkCi0gIC8vIG9uIHxoYW5k
bGVyTG9ja3wuCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGhhbmRsZXJMb2NrID0gbmV3IE9iamVj
dCgpOwotICBwcml2YXRlIEhhbmRsZXIgcmVuZGVyVGhyZWFkSGFuZGxlcjsKLQotICBwcml2YXRl
IGZpbmFsIE9iamVjdCBmcmFtZUxpc3RlbmVyTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0
ZSBmaW5hbCBBcnJheUxpc3Q8U2NhbGVBbmRGcmFtZUxpc3RlbmVyPiBmcmFtZUxpc3RlbmVycyA9
IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gIC8vIFZhcmlhYmxlcyBmb3IgZnBzIHJlZHVjdGlvbi4K
LSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgZnBzUmVkdWN0aW9uTG9jayA9IG5ldyBPYmplY3QoKTsK
LSAgLy8gVGltZSBmb3Igd2hlbiBuZXh0IGZyYW1lIHNob3VsZCBiZSByZW5kZXJlZC4KLSAgcHJp
dmF0ZSBsb25nIG5leHRGcmFtZVRpbWVOczsKLSAgLy8gTWluaW11bSBkdXJhdGlvbiBiZXR3ZWVu
IGZyYW1lcyB3aGVuIGZwcyByZWR1Y3Rpb24gaXMgYWN0aXZlLCBvciAtMSBpZiB2aWRlbyBpcyBj
b21wbGV0ZWx5Ci0gIC8vIHBhdXNlZC4KLSAgcHJpdmF0ZSBsb25nIG1pblJlbmRlclBlcmlvZE5z
OwotCi0gIC8vIEVHTCBhbmQgR0wgcmVzb3VyY2VzIGZvciBkcmF3aW5nIFlVVi9PRVMgdGV4dHVy
ZXMuIEFmdGVyIGluaXRpbGl6YXRpb24sIHRoZXNlIGFyZSBvbmx5IGFjY2Vzc2VkCi0gIC8vIGZy
b20gdGhlIHJlbmRlciB0aHJlYWQuCi0gIHByaXZhdGUgRWdsQmFzZSBlZ2xCYXNlOwotICBwcml2
YXRlIGZpbmFsIFJlbmRlcmVyQ29tbW9uLll1dlVwbG9hZGVyIHl1dlVwbG9hZGVyID0gbmV3IFJl
bmRlcmVyQ29tbW9uLll1dlVwbG9hZGVyKCk7Ci0gIHByaXZhdGUgUmVuZGVyZXJDb21tb24uR2xE
cmF3ZXIgZHJhd2VyOwotICAvLyBUZXh0dXJlIGlkcyBmb3IgWVVWIGZyYW1lcy4gQWxsb2NhdGVk
IG9uIGZpcnN0IGFycml2YWwgb2YgYSBZVVYgZnJhbWUuCi0gIHByaXZhdGUgaW50W10geXV2VGV4
dHVyZXMgPSBudWxsOwotCi0gIC8vIFBlbmRpbmcgZnJhbWUgdG8gcmVuZGVyLiBTZXJ2ZXMgYXMg
YSBxdWV1ZSB3aXRoIHNpemUgMS4gU3luY2hyb25pemVkIG9uIHxmcmFtZUxvY2t8LgotICBwcml2
YXRlIGZpbmFsIE9iamVjdCBmcmFtZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgVmlk
ZW9SZW5kZXJlci5JNDIwRnJhbWUgcGVuZGluZ0ZyYW1lOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxl
cyBhcmUgc3luY2hyb25pemVkIG9uIHxsYXlvdXRMb2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmpl
Y3QgbGF5b3V0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBpbnQgc3VyZmFjZVdpZHRo
OwotICBwcml2YXRlIGludCBzdXJmYWNlSGVpZ2h0OwotICBwcml2YXRlIGZsb2F0IGxheW91dEFz
cGVjdFJhdGlvOwotICAvLyBJZiB0cnVlLCBtaXJyb3JzIHRoZSB2aWRlbyBzdHJlYW0gaG9yaXpv
bnRhbGx5LgotICBwcml2YXRlIGJvb2xlYW4gbWlycm9yOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxl
cyBhcmUgc3luY2hyb25pemVkIG9uIHxzdGF0aXN0aWNzTG9ja3wuCi0gIHByaXZhdGUgZmluYWwg
T2JqZWN0IHN0YXRpc3RpY3NMb2NrID0gbmV3IE9iamVjdCgpOwotICAvLyBUb3RhbCBudW1iZXIg
b2YgdmlkZW8gZnJhbWVzIHJlY2VpdmVkIGluIHJlbmRlckZyYW1lKCkgY2FsbC4KLSAgcHJpdmF0
ZSBpbnQgZnJhbWVzUmVjZWl2ZWQ7Ci0gIC8vIE51bWJlciBvZiB2aWRlbyBmcmFtZXMgZHJvcHBl
ZCBieSByZW5kZXJGcmFtZSgpIGJlY2F1c2UgcHJldmlvdXMgZnJhbWUgaGFzIG5vdCBiZWVuIHJl
bmRlcmVkCi0gIC8vIHlldC4KLSAgcHJpdmF0ZSBpbnQgZnJhbWVzRHJvcHBlZDsKLSAgLy8gTnVt
YmVyIG9mIHJlbmRlcmVkIHZpZGVvIGZyYW1lcy4KLSAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVuZGVy
ZWQ7Ci0gIC8vIFN0YXJ0IHRpbWUgZm9yIGNvdW50aW5nIHRoZXNlIHN0YXRpc3RpY3MsIG9yIDAg
aWYgd2UgaGF2ZW4ndCBzdGFydGVkIG1lYXN1cmluZyB5ZXQuCi0gIHByaXZhdGUgbG9uZyBzdGF0
aXN0aWNzU3RhcnRUaW1lTnM7Ci0gIC8vIFRpbWUgaW4gbnMgc3BlbnQgaW4gcmVuZGVyRnJhbWVP
blJlbmRlclRocmVhZCgpIGZ1bmN0aW9uLgotICBwcml2YXRlIGxvbmcgcmVuZGVyVGltZU5zOwot
ICAvLyBUaW1lIGluIG5zIHNwZW50IGJ5IHRoZSByZW5kZXIgdGhyZWFkIGluIHRoZSBzd2FwQnVm
ZmVycygpIGZ1bmN0aW9uLgotICBwcml2YXRlIGxvbmcgcmVuZGVyU3dhcEJ1ZmZlclRpbWVOczsK
LQotICAvLyBVc2VkIGZvciBiaXRtYXAgY2FwdHVyaW5nLgotICBwcml2YXRlIEdsVGV4dHVyZUZy
YW1lQnVmZmVyIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlcjsKLQotICAvLyBSdW5uYWJsZSBmb3Ig
cG9zdGluZyBmcmFtZXMgdG8gcmVuZGVyIHRocmVhZC4KLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJs
ZSByZW5kZXJGcmFtZVJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIHJlbmRlckZyYW1lT25SZW5kZXJUaHJlYWQo
KTsKLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBsb2dTdGF0aXN0aWNz
UnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgbG9nU3RhdGlzdGljcygpOwotICAgICAgc3luY2hyb25pemVkICho
YW5kbGVyTG9jaykgewotICAgICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7
Ci0gICAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFja3MobG9nU3RhdGlz
dGljc1J1bm5hYmxlKTsKLSAgICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3REZWxheWVk
KAotICAgICAgICAgICAgICBsb2dTdGF0aXN0aWNzUnVubmFibGUsIFRpbWVVbml0LlNFQ09ORFMu
dG9NaWxsaXMoTE9HX0lOVEVSVkFMX1NFQykpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICB9OwotCi0gIHByaXZhdGUgZmluYWwgRWdsU3VyZmFjZUNyZWF0aW9uIGVnbFN1cmZhY2VDcmVh
dGlvblJ1bm5hYmxlID0gbmV3IEVnbFN1cmZhY2VDcmVhdGlvbigpOwotCi0gIC8qKgotICAgKiBT
dGFuZGFyZCBjb25zdHJ1Y3Rvci4gVGhlIG5hbWUgd2lsbCBiZSB1c2VkIGZvciB0aGUgcmVuZGVy
IHRocmVhZCBuYW1lIGFuZCBpbmNsdWRlZCB3aGVuCi0gICAqIGxvZ2dpbmcuIEluIG9yZGVyIHRv
IHJlbmRlciBzb21ldGhpbmcsIHlvdSBtdXN0IGZpcnN0IGNhbGwgaW5pdCgpIGFuZCBjcmVhdGVF
Z2xTdXJmYWNlLgotICAgKi8KLSAgcHVibGljIEVnbFJlbmRlcmVyKFN0cmluZyBuYW1lKSB7Ci0g
ICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplIHRoaXMg
Y2xhc3MsIHNoYXJpbmcgcmVzb3VyY2VzIHdpdGggfHNoYXJlZENvbnRleHR8LiBUaGUgY3VzdG9t
IHxkcmF3ZXJ8IHdpbGwgYmUgdXNlZAotICAgKiBmb3IgZHJhd2luZyBmcmFtZXMgb24gdGhlIEVH
TFN1cmZhY2UuIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgcmVsZWFzZSgp
IG9uCi0gICAqIHxkcmF3ZXJ8LiBJdCBpcyBhbGxvd2VkIHRvIGNhbGwgaW5pdCgpIHRvIHJlaW5p
dGlhbGl6ZSB0aGUgcmVuZGVyZXIgYWZ0ZXIgYSBwcmV2aW91cwotICAgKiBpbml0KCkvcmVsZWFz
ZSgpIGN5Y2xlLgotICAgKi8KLSAgcHVibGljIHZvaWQgaW5pdChmaW5hbCBFZ2xCYXNlLkNvbnRl
eHQgc2hhcmVkQ29udGV4dCwgZmluYWwgaW50W10gY29uZmlnQXR0cmlidXRlcywKLSAgICAgIFJl
bmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcikgewotICAgIHN5bmNocm9uaXplZCAoaGFuZGxl
ckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihuYW1lICsgIkFscmVhZHkgaW5pdGlh
bGl6ZWQiKTsKLSAgICAgIH0KLSAgICAgIGxvZ0QoIkluaXRpYWxpemluZyBFZ2xSZW5kZXJlciIp
OwotICAgICAgdGhpcy5kcmF3ZXIgPSBkcmF3ZXI7Ci0KLSAgICAgIGZpbmFsIEhhbmRsZXJUaHJl
YWQgcmVuZGVyVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQobmFtZSArICJFZ2xSZW5kZXJlciIp
OwotICAgICAgcmVuZGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVy
ID0gbmV3IEhhbmRsZXIocmVuZGVyVGhyZWFkLmdldExvb3BlcigpKTsKLSAgICAgIC8vIENyZWF0
ZSBFR0wgY29udGV4dCBvbiB0aGUgbmV3bHkgY3JlYXRlZCByZW5kZXIgdGhyZWFkLiBJdCBzaG91
bGQgYmUgcG9zc2libHkgdG8gY3JlYXRlIHRoZQotICAgICAgLy8gY29udGV4dCBvbiB0aGlzIHRo
cmVhZCBhbmQgbWFrZSBpdCBjdXJyZW50IG9uIHRoZSByZW5kZXIgdGhyZWFkLCBidXQgdGhpcyBj
YXVzZXMgZmFpbHVyZSBvbgotICAgICAgLy8gc29tZSBNYXJ2ZWwgYmFzZWQgSkIgZGV2aWNlcy4g
aHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTYzNTAu
Ci0gICAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KHJlbmRlclRo
cmVhZEhhbmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAvLyBJZiBzaGFyZWRDb250ZXh0IGlzIG51
bGwsIHRoZW4gdGV4dHVyZSBmcmFtZXMgYXJlIGRpc2FibGVkLiBUaGlzIGlzIHR5cGljYWxseSBm
b3Igb2xkCi0gICAgICAgICAgLy8gZGV2aWNlcyB0aGF0IG1pZ2h0IG5vdCBiZSBmdWxseSBzcGVj
IGNvbXBsaWFudCwgc28gZm9yY2UgRUdMIDEuMCBzaW5jZSBFR0wgMS40IGhhcwotICAgICAgICAg
IC8vIGNhdXNlZCB0cm91YmxlIG9uIHNvbWUgd2VpcmQgZGV2aWNlcy4KLSAgICAgICAgICBpZiAo
c2hhcmVkQ29udGV4dCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBsb2dEKCJFZ2xCYXNlMTAuY3Jl
YXRlIGNvbnRleHQiKTsKLSAgICAgICAgICAgIGVnbEJhc2UgPSBuZXcgRWdsQmFzZTEwKG51bGwg
Lyogc2hhcmVkQ29udGV4dCAqLywgY29uZmlnQXR0cmlidXRlcyk7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGxvZ0QoIkVnbEJhc2UuY3JlYXRlIHNoYXJlZCBjb250ZXh0Iik7Ci0g
ICAgICAgICAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoc2hhcmVkQ29udGV4dCwgY29uZmln
QXR0cmlidXRlcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIHJl
bmRlclRocmVhZEhhbmRsZXIucG9zdChlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZSk7Ci0gICAg
ICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHJl
c2V0U3RhdGlzdGljcyhjdXJyZW50VGltZU5zKTsKLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIu
cG9zdERlbGF5ZWQoCi0gICAgICAgICAgbG9nU3RhdGlzdGljc1J1bm5hYmxlLCBUaW1lVW5pdC5T
RUNPTkRTLnRvTWlsbGlzKExPR19JTlRFUlZBTF9TRUMpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCBjcmVhdGVFZ2xTdXJmYWNlKFN1cmZhY2Ugc3VyZmFjZSkgewotICAgIGNyZWF0ZUVn
bFN1cmZhY2VJbnRlcm5hbChzdXJmYWNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUVn
bFN1cmZhY2UoU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKLSAgICBjcmVhdGVFZ2xT
dXJmYWNlSW50ZXJuYWwoc3VyZmFjZVRleHR1cmUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNy
ZWF0ZUVnbFN1cmZhY2VJbnRlcm5hbChPYmplY3Qgc3VyZmFjZSkgewotICAgIGVnbFN1cmZhY2VD
cmVhdGlvblJ1bm5hYmxlLnNldFN1cmZhY2Uoc3VyZmFjZSk7Ci0gICAgcG9zdFRvUmVuZGVyVGhy
ZWFkKGVnbFN1cmZhY2VDcmVhdGlvblJ1bm5hYmxlKTsKLSAgfQotCi0gIC8qKgotICAgKiBCbG9j
ayB1bnRpbCBhbnkgcGVuZGluZyBmcmFtZSBpcyByZXR1cm5lZCBhbmQgYWxsIEdMIHJlc291cmNl
cyByZWxlYXNlZCwgZXZlbiBpZiBhbiBpbnRlcnJ1cHQKLSAgICogb2NjdXJzLiBJZiBhbiBpbnRl
cnJ1cHQgb2NjdXJzIGR1cmluZyByZWxlYXNlKCksIHRoZSBpbnRlcnJ1cHQgZmxhZyB3aWxsIGJl
IHNldC4gVGhpcyBmdW5jdGlvbgotICAgKiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUgQWN0
aXZpdHkgaXMgZGVzdHJveWVkIGFuZCB0aGUgRUdMQ29udGV4dCBpcyBzdGlsbCB2YWxpZC4gSWYg
eW91Ci0gICAqIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiwgdGhlIEdMIHJlc291cmNlcyBtaWdo
dCBsZWFrLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBsb2dEKCJSZWxl
YXNpbmcuIik7Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggZWdsQ2xlYW51cEJhcnJpZXIgPSBu
ZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewot
ICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgICBsb2dEKCJB
bHJlYWR5IHJlbGVhc2VkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHJlbmRl
clRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKGxvZ1N0YXRpc3RpY3NSdW5uYWJsZSk7Ci0g
ICAgICAvLyBSZWxlYXNlIEVHTCBhbmQgR0wgcmVzb3VyY2VzIG9uIHJlbmRlciB0aHJlYWQuCi0g
ICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3RBdEZyb250T2ZRdWV1ZShuZXcgUnVubmFibGUo
KSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgICAgaWYgKGRyYXdlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBkcmF3ZXIucmVsZWFzZSgp
OwotICAgICAgICAgICAgZHJhd2VyID0gbnVsbDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYg
KHl1dlRleHR1cmVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIEdMRVMyMC5nbERlbGV0ZVRleHR1
cmVzKDMsIHl1dlRleHR1cmVzLCAwKTsKLSAgICAgICAgICAgIHl1dlRleHR1cmVzID0gbnVsbDsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlciAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICBiaXRtYXBUZXh0dXJlRnJhbWVidWZmZXIucmVsZWFzZSgpOwot
ICAgICAgICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyID0gbnVsbDsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgaWYgKGVnbEJhc2UgIT0gbnVsbCkgewotICAgICAgICAgICAgbG9nRCgiZWds
QmFzZSBkZXRhY2ggYW5kIHJlbGVhc2UuIik7Ci0gICAgICAgICAgICBlZ2xCYXNlLmRldGFjaEN1
cnJlbnQoKTsKLSAgICAgICAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAgICAgICAgZWds
QmFzZSA9IG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGVnbENsZWFudXBCYXJyaWVyLmNv
dW50RG93bigpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIGZpbmFsIExvb3BlciByZW5k
ZXJMb29wZXIgPSByZW5kZXJUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpOwotICAgICAgLy8gVE9E
TyhtYWdqZWQpOiBSZXBsYWNlIHRoaXMgcG9zdCgpIHdpdGggcmVuZGVyTG9vcGVyLnF1aXRTYWZl
bHkoKSB3aGVuIEFQSSBzdXBwb3J0ID49IDE4LgotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5w
b3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgICBsb2dEKCJRdWl0dGluZyByZW5kZXIgdGhyZWFkLiIpOwot
ICAgICAgICAgIHJlbmRlckxvb3Blci5xdWl0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAg
ICAgLy8gRG9uJ3QgYWNjZXB0IGFueSBtb3JlIGZyYW1lcyBvciBtZXNzYWdlcyB0byB0aGUgcmVu
ZGVyIHRocmVhZC4KLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIgPSBudWxsOwotICAgIH0KLSAg
ICAvLyBNYWtlIHN1cmUgdGhlIEVHTC9HTCBjbGVhbnVwIHBvc3RlZCBhYm92ZSBpcyBleGVjdXRl
ZC4KLSAgICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShlZ2xDbGVhbnVwQmFycmll
cik7Ci0gICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgIGlmIChwZW5kaW5nRnJh
bWUgIT0gbnVsbCkgewotICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShwZW5k
aW5nRnJhbWUpOwotICAgICAgICBwZW5kaW5nRnJhbWUgPSBudWxsOwotICAgICAgfQotICAgIH0K
LSAgICBsb2dEKCJSZWxlYXNpbmcgZG9uZS4iKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNldCB0
aGUgc3RhdGlzdGljcyBsb2dnZWQgaW4gbG9nU3RhdGlzdGljcygpLgotICAgKi8KLSAgcHJpdmF0
ZSB2b2lkIHJlc2V0U3RhdGlzdGljcyhsb25nIGN1cnJlbnRUaW1lTnMpIHsKLSAgICBzeW5jaHJv
bml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAgICBzdGF0aXN0aWNzU3RhcnRUaW1lTnMgPSBj
dXJyZW50VGltZU5zOwotICAgICAgZnJhbWVzUmVjZWl2ZWQgPSAwOwotICAgICAgZnJhbWVzRHJv
cHBlZCA9IDA7Ci0gICAgICBmcmFtZXNSZW5kZXJlZCA9IDA7Ci0gICAgICByZW5kZXJUaW1lTnMg
PSAwOwotICAgICAgcmVuZGVyU3dhcEJ1ZmZlclRpbWVOcyA9IDA7Ci0gICAgfQotICB9Ci0KLSAg
cHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAgIHN5bmNocm9uaXplZCAoaGFuZGxl
ckxvY2spIHsKLSAgICAgIGZpbmFsIFRocmVhZCByZW5kZXJUaHJlYWQgPQotICAgICAgICAgIChy
ZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpID8gbnVsbCA6IHJlbmRlclRocmVhZEhhbmRsZXIu
Z2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCk7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkICE9IG51bGwp
IHsKLSAgICAgICAgZmluYWwgU3RhY2tUcmFjZUVsZW1lbnRbXSByZW5kZXJTdGFja1RyYWNlID0g
cmVuZGVyVGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgICAgaWYgKHJlbmRlclN0YWNrVHJh
Y2UubGVuZ3RoID4gMCkgewotICAgICAgICAgIGxvZ0QoIkVnbFJlbmRlcmVyIHN0YWNrIHRyYWNl
OiIpOwotICAgICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgdHJhY2VFbGVtIDogcmVuZGVy
U3RhY2tUcmFjZSkgewotICAgICAgICAgICAgbG9nRCh0cmFjZUVsZW0udG9TdHJpbmcoKSk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IFNldCBpZiB0aGUgdmlkZW8gc3RyZWFtIHNob3VsZCBiZSBtaXJyb3JlZCBvciBub3QuCi0gICAq
LwotICBwdWJsaWMgdm9pZCBzZXRNaXJyb3IoZmluYWwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBs
b2dEKCJzZXRNaXJyb3I6ICIgKyBtaXJyb3IpOwotICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9j
aykgewotICAgICAgdGhpcy5taXJyb3IgPSBtaXJyb3I7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIFNldCBsYXlvdXQgYXNwZWN0IHJhdGlvLiBUaGlzIGlzIHVzZWQgdG8gY3JvcCBmcmFtZXMg
d2hlbiByZW5kZXJpbmcgdG8gYXZvaWQgc3RyZXRjaGVkIHZpZGVvLgotICAgKiBTZXQgdGhpcyB0
byAwIHRvIGRpc2FibGUgY3JvcHBpbmcuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRMYXlvdXRB
c3BlY3RSYXRpbyhmbG9hdCBsYXlvdXRBc3BlY3RSYXRpbykgewotICAgIGxvZ0QoInNldExheW91
dEFzcGVjdFJhdGlvOiAiICsgbGF5b3V0QXNwZWN0UmF0aW8pOwotICAgIHN5bmNocm9uaXplZCAo
bGF5b3V0TG9jaykgewotICAgICAgdGhpcy5sYXlvdXRBc3BlY3RSYXRpbyA9IGxheW91dEFzcGVj
dFJhdGlvOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBMaW1pdCByZW5kZXIgZnJhbWVyYXRl
LgotICAgKgotICAgKiBAcGFyYW0gZnBzIExpbWl0IHJlbmRlciBmcmFtZXJhdGUgdG8gdGhpcyB2
YWx1ZSwgb3IgdXNlIEZsb2F0LlBPU0lUSVZFX0lORklOSVRZIHRvIGRpc2FibGUgZnBzCi0gICAq
ICAgICAgICAgICAgcmVkdWN0aW9uLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0RnBzUmVkdWN0
aW9uKGZsb2F0IGZwcykgewotICAgIGxvZ0QoInNldEZwc1JlZHVjdGlvbjogIiArIGZwcyk7Ci0g
ICAgc3luY2hyb25pemVkIChmcHNSZWR1Y3Rpb25Mb2NrKSB7Ci0gICAgICBmaW5hbCBsb25nIHBy
ZXZpb3VzUmVuZGVyUGVyaW9kTnMgPSBtaW5SZW5kZXJQZXJpb2ROczsKLSAgICAgIGlmIChmcHMg
PD0gMCkgewotICAgICAgICBtaW5SZW5kZXJQZXJpb2ROcyA9IExvbmcuTUFYX1ZBTFVFOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgbWluUmVuZGVyUGVyaW9kTnMgPSAobG9uZykgKFRpbWVVbml0
LlNFQ09ORFMudG9OYW5vcygxKSAvIGZwcyk7Ci0gICAgICB9Ci0gICAgICBpZiAobWluUmVuZGVy
UGVyaW9kTnMgIT0gcHJldmlvdXNSZW5kZXJQZXJpb2ROcykgewotICAgICAgICAvLyBGcHMgcmVk
dWN0aW9uIGNoYW5nZWQgLSByZXNldCBmcmFtZSB0aW1lLgotICAgICAgICBuZXh0RnJhbWVUaW1l
TnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBkaXNhYmxlRnBzUmVkdWN0aW9uKCkgewotICAgIHNldEZwc1JlZHVjdGlvbihGbG9hdC5Q
T1NJVElWRV9JTkZJTklUWSAvKiBmcHMgKi8pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGF1c2VW
aWRlbygpIHsKLSAgICBzZXRGcHNSZWR1Y3Rpb24oMCAvKiBmcHMgKi8pOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCB3aGVuIGEgbmV3IHZpZGVv
IGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkLgotICAgKgotICAgKiBAcGFyYW0gbGlzdGVuZXIgVGhl
IGNhbGxiYWNrIHRvIGJlIGludm9rZWQuCi0gICAqIEBwYXJhbSBzY2FsZSAgICBUaGUgc2NhbGUg
b2YgdGhlIEJpdG1hcCBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrLCBvciAwIGlmIG5vIEJpdG1hcCBp
cwotICAgKiAgICAgICAgICAgICAgICAgcmVxdWlyZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBh
ZGRGcmFtZUxpc3RlbmVyKEZyYW1lTGlzdGVuZXIgbGlzdGVuZXIsIGZsb2F0IHNjYWxlKSB7Ci0g
ICAgc3luY2hyb25pemVkIChmcmFtZUxpc3RlbmVyTG9jaykgewotICAgICAgZnJhbWVMaXN0ZW5l
cnMuYWRkKG5ldyBTY2FsZUFuZEZyYW1lTGlzdGVuZXIoc2NhbGUsIGxpc3RlbmVyKSk7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZSBhbnkgcGVuZGluZyBjYWxsYmFjayB0aGF0IHdh
cyBhZGRlZCB3aXRoIGFkZEZyYW1lTGlzdGVuZXIuIElmIHRoZSBjYWxsYmFjayBpcyBub3QgaW4K
LSAgICogdGhlIHF1ZXVlLCBub3RoaW5nIGhhcHBlbnMuCi0gICAqCi0gICAqIEBwYXJhbSBydW5u
YWJsZSBUaGUgY2FsbGJhY2sgdG8gcmVtb3ZlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3Zl
RnJhbWVMaXN0ZW5lcihGcmFtZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgc3luY2hyb25pemVk
IChmcmFtZUxpc3RlbmVyTG9jaykgewotICAgICAgZmluYWwgSXRlcmF0b3I8U2NhbGVBbmRGcmFt
ZUxpc3RlbmVyPiBpdGVyID0gZnJhbWVMaXN0ZW5lcnMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxl
IChpdGVyLmhhc05leHQoKSkgewotICAgICAgICBpZiAoaXRlci5uZXh0KCkubGlzdGVuZXIgPT0g
bGlzdGVuZXIpIHsKLSAgICAgICAgICBpdGVyLnJlbW92ZSgpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgLy8gVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgaW50ZXJmYWNlLgot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoVmlkZW9SZW5kZXJlci5JNDIw
RnJhbWUgZnJhbWUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAg
ICArK2ZyYW1lc1JlY2VpdmVkOwotICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGRyb3BPbGRGcmFt
ZTsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhy
ZWFkSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICAgIGxvZ0QoIkRyb3BwaW5nIGZyYW1lIC0gTm90
IGluaXRpYWxpemVkIG9yIGFscmVhZHkgcmVsZWFzZWQuIik7Ci0gICAgICAgIFZpZGVvUmVuZGVy
ZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAg
ICAgLy8gQ2hlY2sgaWYgZnBzIHJlZHVjdGlvbiBpcyBhY3RpdmUuCi0gICAgICBzeW5jaHJvbml6
ZWQgKGZwc1JlZHVjdGlvbkxvY2spIHsKLSAgICAgICAgaWYgKG1pblJlbmRlclBlcmlvZE5zID4g
MCkgewotICAgICAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWVOcyA9IFN5c3RlbS5uYW5vVGlt
ZSgpOwotICAgICAgICAgIGlmIChjdXJyZW50VGltZU5zIDwgbmV4dEZyYW1lVGltZU5zKSB7Ci0g
ICAgICAgICAgICBsb2dEKCJEcm9wcGluZyBmcmFtZSAtIGZwcyByZWR1Y3Rpb24gaXMgYWN0aXZl
LiIpOwotICAgICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBuZXh0RnJhbWVUaW1l
TnMgKz0gbWluUmVuZGVyUGVyaW9kTnM7Ci0gICAgICAgICAgLy8gVGhlIHRpbWUgZm9yIHRoZSBu
ZXh0IGZyYW1lIHNob3VsZCBhbHdheXMgYmUgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICBuZXh0
RnJhbWVUaW1lTnMgPSBNYXRoLm1heChuZXh0RnJhbWVUaW1lTnMsIGN1cnJlbnRUaW1lTnMpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAg
ICAgICBkcm9wT2xkRnJhbWUgPSAocGVuZGluZ0ZyYW1lICE9IG51bGwpOwotICAgICAgICBpZiAo
ZHJvcE9sZEZyYW1lKSB7Ci0gICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUo
cGVuZGluZ0ZyYW1lKTsKLSAgICAgICAgfQotICAgICAgICBwZW5kaW5nRnJhbWUgPSBmcmFtZTsK
LSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KHJlbmRlckZyYW1lUnVubmFibGUpOwot
ICAgICAgfQotICAgIH0KLSAgICBpZiAoZHJvcE9sZEZyYW1lKSB7Ci0gICAgICBzeW5jaHJvbml6
ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAgICAgICsrZnJhbWVzRHJvcHBlZDsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVsZWFzZSBFR0wgc3VyZmFjZS4gVGhpcyBmdW5j
dGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBFR0wgc3VyZmFjZSBpcyByZWxlYXNlZC4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIHJlbGVhc2VFZ2xTdXJmYWNlKGZpbmFsIFJ1bm5hYmxlIGNvbXBsZXRp
b25DYWxsYmFjaykgewotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSByZW5kZXIgdGhyZWFkIGlzIG5v
IGxvbmdlciB0b3VjaGluZyB0aGUgU3VyZmFjZSBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhpcwot
ICAgIC8vIGZ1bmN0aW9uLgotICAgIGVnbFN1cmZhY2VDcmVhdGlvblJ1bm5hYmxlLnNldFN1cmZh
Y2UobnVsbCAvKiBzdXJmYWNlICovKTsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7
Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIHJlbmRl
clRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKGVnbFN1cmZhY2VDcmVhdGlvblJ1bm5hYmxl
KTsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0QXRGcm9udE9mUXVldWUobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAg
ZWdsQmFzZS5kZXRhY2hDdXJyZW50KCk7Ci0gICAgICAgICAgICAgIGVnbEJhc2UucmVsZWFzZVN1
cmZhY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjay5y
dW4oKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgfQotICAgIGNvbXBsZXRpb25DYWxsYmFjay5ydW4oKTsKLSAgfQotCi0gIC8qKgotICAg
KiBOb3RpZnkgdGhhdCB0aGUgc3VyZmFjZSBzaXplIGhhcyBjaGFuZ2VkLgotICAgKi8KLSAgcHVi
bGljIHZvaWQgc3VyZmFjZVNpemVDaGFuZ2VkKGludCBzdXJmYWNlV2lkdGgsIGludCBzdXJmYWNl
SGVpZ2h0KSB7Ci0gICAgbG9nRCgiU3VyZmFjZSBzaXplIGNoYW5nZWQ6ICIgKyBzdXJmYWNlV2lk
dGggKyAieCIgKyBzdXJmYWNlSGVpZ2h0KTsKLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2sp
IHsKLSAgICAgIHRoaXMuc3VyZmFjZVdpZHRoID0gc3VyZmFjZVdpZHRoOwotICAgICAgdGhpcy5z
dXJmYWNlSGVpZ2h0ID0gc3VyZmFjZUhlaWdodDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICog
UHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb24gdG8gcG9zdCB0YXNrcyBzYWZlbHkuCi0gICAqLwotICBw
cml2YXRlIHZvaWQgcG9zdFRvUmVuZGVyVGhyZWFkKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAg
c3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRs
ZXIgIT0gbnVsbCkgewotICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QocnVubmFibGUp
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjbGVhclN1cmZhY2VPblJl
bmRlclRocmVhZCgpIHsKLSAgICBpZiAoZWdsQmFzZSAhPSBudWxsICYmIGVnbEJhc2UuaGFzU3Vy
ZmFjZSgpKSB7Ci0gICAgICBsb2dEKCJjbGVhclN1cmZhY2UiKTsKLSAgICAgIEdMRVMyMC5nbENs
ZWFyQ29sb3IoMCAvKiByZWQgKi8sIDAgLyogZ3JlZW4gKi8sIDAgLyogYmx1ZSAqLywgMCAvKiBh
bHBoYSAqLyk7Ci0gICAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJ
VCk7Ci0gICAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIFBvc3QgYSB0YXNrIHRvIGNsZWFyIHRoZSBUZXh0dXJlVmlldyB0byBhIHRyYW5zcGFyZW50
IHVuaWZvcm0gY29sb3IuCi0gICAqLwotICBwdWJsaWMgdm9pZCBjbGVhckltYWdlKCkgewotICAg
IHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5k
bGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcmVuZGVyVGhy
ZWFkSGFuZGxlci5wb3N0QXRGcm9udE9mUXVldWUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGNsZWFyU3Vy
ZmFjZU9uUmVuZGVyVGhyZWFkKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLSAgfQot
Ci0gIC8qKgotICAgKiBSZW5kZXJzIGFuZCByZWxlYXNlcyB8cGVuZGluZ0ZyYW1lfC4KLSAgICov
Ci0gIHByaXZhdGUgdm9pZCByZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKCkgewotICAgIC8vIEZl
dGNoIGFuZCByZW5kZXIgfHBlbmRpbmdGcmFtZXwuCi0gICAgZmluYWwgVmlkZW9SZW5kZXJlci5J
NDIwRnJhbWUgZnJhbWU7Ci0gICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgIGlm
IChwZW5kaW5nRnJhbWUgPT0gbnVsbCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAg
ICBmcmFtZSA9IHBlbmRpbmdGcmFtZTsKLSAgICAgIHBlbmRpbmdGcmFtZSA9IG51bGw7Ci0gICAg
fQotICAgIGlmIChlZ2xCYXNlID09IG51bGwgfHwgIWVnbEJhc2UuaGFzU3VyZmFjZSgpKSB7Ci0g
ICAgICBsb2dEKCJEcm9wcGluZyBmcmFtZSAtIE5vIHN1cmZhY2UiKTsKLSAgICAgIFZpZGVvUmVu
ZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBmaW5hbCBsb25nIHN0YXJ0VGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgZmluYWwg
ZmxvYXRbXSB0ZXhNYXRyaXggPQotICAgICAgICBSZW5kZXJlckNvbW1vbi5yb3RhdGVUZXh0dXJl
TWF0cml4KGZyYW1lLnNhbXBsaW5nTWF0cml4LCBmcmFtZS5yb3RhdGlvbkRlZ3JlZSk7Ci0gICAg
ZmluYWwgZmxvYXRbXSBkcmF3TWF0cml4OwotCi0gICAgLy8gQWZ0ZXIgYSBzdXJmYWNlIHNpemUg
Y2hhbmdlLCB0aGUgRUdMU3VyZmFjZSBtaWdodCBzdGlsbCBoYXZlIGEgYnVmZmVyIG9mIHRoZSBv
bGQgc2l6ZSBpbiB0aGUKLSAgICAvLyBwaXBlbGluZS4gUXVlcnlpbmcgdGhlIEVHTFN1cmZhY2Ug
d2lsbCBzaG93IGlmIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciBkaW1lbnNpb25zIGhhdmVuJ3QgeWV0
Ci0gICAgLy8gY2hhbmdlZC4gU3VjaCBhIGJ1ZmZlciB3aWxsIGJlIHJlbmRlcmVkIGluY29ycmVj
dGx5LCBzbyBmbHVzaCBpdCB3aXRoIGEgYmxhY2sgZnJhbWUuCi0gICAgc3luY2hyb25pemVkIChs
YXlvdXRMb2NrKSB7Ci0gICAgICBpbnQgc3VyZmFjZUNsZWFyQ291bnQgPSAwOwotICAgICAgd2hp
bGUgKGVnbEJhc2Uuc3VyZmFjZVdpZHRoKCkgIT0gc3VyZmFjZVdpZHRoIHx8IGVnbEJhc2Uuc3Vy
ZmFjZUhlaWdodCgpICE9IHN1cmZhY2VIZWlnaHQpIHsKLSAgICAgICAgKytzdXJmYWNlQ2xlYXJD
b3VudDsKLSAgICAgICAgaWYgKHN1cmZhY2VDbGVhckNvdW50ID4gTUFYX1NVUkZBQ0VfQ0xFQVJf
Q09VTlQpIHsKLSAgICAgICAgICBsb2dEKCJGYWlsZWQgdG8gZ2V0IHN1cmZhY2Ugb2YgZXhwZWN0
ZWQgc2l6ZSAtIGRyb3BwaW5nIGZyYW1lLiIpOwotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVu
ZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgbG9nRCgiU3VyZmFjZSBzaXplIG1pc21hdGNoIC0gY2xlYXJpbmcgc3VyZmFjZS4gU2l6ZTog
IiArIGVnbEJhc2Uuc3VyZmFjZVdpZHRoKCkgKyAieCIKLSAgICAgICAgICAgICsgZWdsQmFzZS5z
dXJmYWNlSGVpZ2h0KCkgKyAiIEV4cGVjdGVkOiAiICsgc3VyZmFjZVdpZHRoICsgIngiICsgc3Vy
ZmFjZUhlaWdodCk7Ci0gICAgICAgIGNsZWFyU3VyZmFjZU9uUmVuZGVyVGhyZWFkKCk7Ci0gICAg
ICB9Ci0gICAgICBmaW5hbCBmbG9hdFtdIGxheW91dE1hdHJpeDsKLSAgICAgIGlmIChsYXlvdXRB
c3BlY3RSYXRpbyA+IDApIHsKLSAgICAgICAgbGF5b3V0TWF0cml4ID0gUmVuZGVyZXJDb21tb24u
Z2V0TGF5b3V0TWF0cml4KAotICAgICAgICAgICAgbWlycm9yLCBmcmFtZS5yb3RhdGVkV2lkdGgo
KSAvIChmbG9hdCkgZnJhbWUucm90YXRlZEhlaWdodCgpLCBsYXlvdXRBc3BlY3RSYXRpbyk7Ci0g
ICAgICB9IGVsc2UgewotICAgICAgICBsYXlvdXRNYXRyaXggPQotICAgICAgICAgICAgbWlycm9y
ID8gUmVuZGVyZXJDb21tb24uaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSA6IFJlbmRlcmVyQ29tbW9u
LmlkZW50aXR5TWF0cml4KCk7Ci0gICAgICB9Ci0gICAgICBkcmF3TWF0cml4ID0gUmVuZGVyZXJD
b21tb24ubXVsdGlwbHlNYXRyaWNlcyh0ZXhNYXRyaXgsIGxheW91dE1hdHJpeCk7Ci0gICAgfQot
Ci0gICAgR0xFUzIwLmdsQ2xlYXJDb2xvcigwIC8qIHJlZCAqLywgMCAvKiBncmVlbiAqLywgMCAv
KiBibHVlICovLCAwIC8qIGFscGhhICovKTsKLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xf
Q09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgaWYgKGZyYW1lLnl1dkZyYW1lKSB7Ci0gICAgICAvLyBN
YWtlIHN1cmUgWVVWIHRleHR1cmVzIGFyZSBhbGxvY2F0ZWQuCi0gICAgICBpZiAoeXV2VGV4dHVy
ZXMgPT0gbnVsbCkgewotICAgICAgICB5dXZUZXh0dXJlcyA9IG5ldyBpbnRbM107Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAgICAgeXV2VGV4dHVyZXNbaV0g
PSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgeXV2VXBsb2FkZXIudXBsb2FkWXV2RGF0YSgKLSAgICAgICAgICB5
dXZUZXh0dXJlcywgZnJhbWUud2lkdGgsIGZyYW1lLmhlaWdodCwgZnJhbWUueXV2U3RyaWRlcywg
ZnJhbWUueXV2UGxhbmVzKTsKLSAgICAgIGRyYXdlci5kcmF3WXV2KHl1dlRleHR1cmVzLCBkcmF3
TWF0cml4LCBmcmFtZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUucm90YXRlZEhlaWdodCgpLCAwLCAw
LAotICAgICAgICAgIHN1cmZhY2VXaWR0aCwgc3VyZmFjZUhlaWdodCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGRyYXdlci5kcmF3T2VzKGZyYW1lLnRleHR1cmVJZCwgZHJhd01hdHJpeCwgZnJhbWUu
cm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICBz
dXJmYWNlV2lkdGgsIHN1cmZhY2VIZWlnaHQpOwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgc3dh
cEJ1ZmZlcnNTdGFydFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIGVnbEJhc2Uuc3dh
cEJ1ZmZlcnMoKTsKLQotICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWVOcyA9IFN5c3RlbS5uYW5v
VGltZSgpOwotICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAgICsrZnJh
bWVzUmVuZGVyZWQ7Ci0gICAgICByZW5kZXJUaW1lTnMgKz0gKGN1cnJlbnRUaW1lTnMgLSBzdGFy
dFRpbWVOcyk7Ci0gICAgICByZW5kZXJTd2FwQnVmZmVyVGltZU5zICs9IChjdXJyZW50VGltZU5z
IC0gc3dhcEJ1ZmZlcnNTdGFydFRpbWVOcyk7Ci0gICAgfQotCi0gICAgbm90aWZ5Q2FsbGJhY2tz
KGZyYW1lLCB0ZXhNYXRyaXgpOwotICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZy
YW1lKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBub3RpZnlDYWxsYmFja3MoVmlkZW9SZW5kZXJl
ci5JNDIwRnJhbWUgZnJhbWUsIGZsb2F0W10gdGV4TWF0cml4KSB7Ci0gICAgLy8gTWFrZSB0ZW1w
b3JhcnkgY29weSBvZiBjYWxsYmFjayBsaXN0IHRvIGF2b2lkIENvbmN1cnJlbnRNb2RpZmljYXRp
b25FeGNlcHRpb24sIGluIGNhc2UKLSAgICAvLyBjYWxsYmFja3MgY2FsbCBhZGRGcmFtZWxpc3Rl
bmVyIG9yIHJlbW92ZUZyYW1lTGlzdGVuZXIuCi0gICAgZmluYWwgQXJyYXlMaXN0PFNjYWxlQW5k
RnJhbWVMaXN0ZW5lcj4gdG1wTGlzdDsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTGlzdGVuZXJM
b2NrKSB7Ci0gICAgICBpZiAoZnJhbWVMaXN0ZW5lcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0gICAgICB0bXBMaXN0ID0gbmV3IEFycmF5TGlzdDw+KGZyYW1lTGlzdGVuZXJzKTsKLSAg
ICAgIGZyYW1lTGlzdGVuZXJzLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgZmluYWwgZmxvYXRbXSBi
aXRtYXBNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKAotICAgICAgICBS
ZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHRleE1hdHJpeCwKLSAgICAgICAgICAgIG1p
cnJvciA/IFJlbmRlcmVyQ29tbW9uLmhvcml6b250YWxGbGlwTWF0cml4KCkgOiBSZW5kZXJlckNv
bW1vbi5pZGVudGl0eU1hdHJpeCgpKSwKLSAgICAgICAgUmVuZGVyZXJDb21tb24udmVydGljYWxG
bGlwTWF0cml4KCkpOwotCi0gICAgZm9yIChTY2FsZUFuZEZyYW1lTGlzdGVuZXIgc2NhbGVBbmRM
aXN0ZW5lciA6IHRtcExpc3QpIHsKLSAgICAgIGZpbmFsIGludCBzY2FsZWRXaWR0aCA9IChpbnQp
IChzY2FsZUFuZExpc3RlbmVyLnNjYWxlICogZnJhbWUucm90YXRlZFdpZHRoKCkpOwotICAgICAg
ZmluYWwgaW50IHNjYWxlZEhlaWdodCA9IChpbnQpIChzY2FsZUFuZExpc3RlbmVyLnNjYWxlICog
ZnJhbWUucm90YXRlZEhlaWdodCgpKTsKLQotICAgICAgaWYgKHNjYWxlZFdpZHRoID09IDAgfHwg
c2NhbGVkSGVpZ2h0ID09IDApIHsKLSAgICAgICAgc2NhbGVBbmRMaXN0ZW5lci5saXN0ZW5lci5v
bkZyYW1lKG51bGwpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGJp
dG1hcFRleHR1cmVGcmFtZWJ1ZmZlciA9PSBudWxsKSB7Ci0gICAgICAgIGJpdG1hcFRleHR1cmVG
cmFtZWJ1ZmZlciA9IG5ldyBHbFRleHR1cmVGcmFtZUJ1ZmZlcihHTEVTMjAuR0xfUkdCQSk7Ci0g
ICAgICB9Ci0gICAgICBiaXRtYXBUZXh0dXJlRnJhbWVidWZmZXIuc2V0U2l6ZShzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0KTsKLQotICAgICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMy
MC5HTF9GUkFNRUJVRkZFUiwgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyLmdldEZyYW1lQnVmZmVy
SWQoKSk7Ci0gICAgICBHTEVTMjAuZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTEVTMjAuR0xfRlJB
TUVCVUZGRVIsIEdMRVMyMC5HTF9DT0xPUl9BVFRBQ0hNRU5UMCwKLSAgICAgICAgICBHTEVTMjAu
R0xfVEVYVFVSRV8yRCwgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyLmdldFRleHR1cmVJZCgpLCAw
KTsKLQotICAgICAgaWYgKGZyYW1lLnl1dkZyYW1lKSB7Ci0gICAgICAgIGRyYXdlci5kcmF3WXV2
KHl1dlRleHR1cmVzLCBiaXRtYXBNYXRyaXgsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5y
b3RhdGVkSGVpZ2h0KCksCi0gICAgICAgICAgICAwIC8qIHZpZXdwb3J0WCAqLywgMCAvKiB2aWV3
cG9ydFkgKi8sIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgZHJhd2VyLmRyYXdPZXMoZnJhbWUudGV4dHVyZUlkLCBiaXRtYXBNYXRyaXgsIGZyYW1l
LnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCksCi0gICAgICAgICAgICAwIC8q
IHZpZXdwb3J0WCAqLywgMCAvKiB2aWV3cG9ydFkgKi8sIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQpOwotICAgICAgfQotCi0gICAgICBmaW5hbCBCeXRlQnVmZmVyIGJpdG1hcEJ1ZmZlciA9IEJ5
dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qoc2NhbGVkV2lkdGggKiBzY2FsZWRIZWlnaHQgKiA0KTsK
LSAgICAgIEdMRVMyMC5nbFZpZXdwb3J0KDAsIDAsIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQp
OwotICAgICAgR0xFUzIwLmdsUmVhZFBpeGVscygKLSAgICAgICAgICAwLCAwLCBzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUs
IGJpdG1hcEJ1ZmZlcik7Ci0KLSAgICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAu
R0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJFZ2xS
ZW5kZXJlci5ub3RpZnlDYWxsYmFja3MiKTsKLQotICAgICAgZmluYWwgQml0bWFwIGJpdG1hcCA9
IEJpdG1hcC5jcmVhdGVCaXRtYXAoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgQml0bWFwLkNv
bmZpZy5BUkdCXzg4ODgpOwotICAgICAgYml0bWFwLmNvcHlQaXhlbHNGcm9tQnVmZmVyKGJpdG1h
cEJ1ZmZlcik7Ci0gICAgICBzY2FsZUFuZExpc3RlbmVyLmxpc3RlbmVyLm9uRnJhbWUoYml0bWFw
KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBhdmVyYWdlVGltZUFzU3RyaW5nKGxv
bmcgc3VtVGltZU5zLCBpbnQgY291bnQpIHsKLSAgICByZXR1cm4gKGNvdW50IDw9IDApID8gIk5B
IiA6IFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWljcm9zKHN1bVRpbWVOcyAvIGNvdW50KSArICIg
zrxzIjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dTdGF0aXN0aWNzKCkgewotICAgIGZpbmFs
IGxvbmcgY3VycmVudFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIHN5bmNocm9uaXpl
ZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAgIGZpbmFsIGxvbmcgZWxhcHNlZFRpbWVOcyA9IGN1
cnJlbnRUaW1lTnMgLSBzdGF0aXN0aWNzU3RhcnRUaW1lTnM7Ci0gICAgICBpZiAoZWxhcHNlZFRp
bWVOcyA8PSAwKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGZpbmFsIGZsb2F0
IHJlbmRlckZwcyA9IGZyYW1lc1JlbmRlcmVkICogVGltZVVuaXQuU0VDT05EUy50b05hbm9zKDEp
IC8gKGZsb2F0KSBlbGFwc2VkVGltZU5zOwotICAgICAgbG9nRCgiRHVyYXRpb246ICIgKyBUaW1l
VW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhlbGFwc2VkVGltZU5zKSArICIgbXMuIgotICAgICAg
ICAgICsgIiBGcmFtZXMgcmVjZWl2ZWQ6ICIgKyBmcmFtZXNSZWNlaXZlZCArICIuIgotICAgICAg
ICAgICsgIiBEcm9wcGVkOiAiICsgZnJhbWVzRHJvcHBlZCArICIuIgotICAgICAgICAgICsgIiBS
ZW5kZXJlZDogIiArIGZyYW1lc1JlbmRlcmVkICsgIi4iCi0gICAgICAgICAgKyAiIFJlbmRlciBm
cHM6ICIgKyBTdHJpbmcuZm9ybWF0KCIlLjFmIiwgcmVuZGVyRnBzKSArICIuIgotICAgICAgICAg
ICsgIiBBdmVyYWdlIHJlbmRlciB0aW1lOiAiICsgYXZlcmFnZVRpbWVBc1N0cmluZyhyZW5kZXJU
aW1lTnMsIGZyYW1lc1JlbmRlcmVkKSArICIuIgotICAgICAgICAgICsgIiBBdmVyYWdlIHN3YXBC
dWZmZXIgdGltZTogIgotICAgICAgICAgICsgYXZlcmFnZVRpbWVBc1N0cmluZyhyZW5kZXJTd2Fw
QnVmZmVyVGltZU5zLCBmcmFtZXNSZW5kZXJlZCkgKyAiLiIpOwotICAgICAgcmVzZXRTdGF0aXN0
aWNzKGN1cnJlbnRUaW1lTnMpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dEKFN0
cmluZyBzdHJpbmcpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCBuYW1lICsgc3RyaW5nKTsKLSAgfQot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9GaWxlVmlkZW9DYXB0dXJlci5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvRmlsZVZpZGVvQ2FwdHVyZXIuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9GaWxlVmlkZW9DYXB0dXJlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMjExICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdl
YlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFu
ZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1l
VW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuVGltZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyVGFz
azsKLWltcG9ydCBqYXZhLmlvLlJhbmRvbUFjY2Vzc0ZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEZpbGVWaWRlb0NhcHR1cmVyIGltcGxlbWVudHMgVmlk
ZW9DYXB0dXJlciB7Ci0gIHByaXZhdGUgaW50ZXJmYWNlIFZpZGVvUmVhZGVyIHsKLSAgICBpbnQg
Z2V0RnJhbWVXaWR0aCgpOwotICAgIGludCBnZXRGcmFtZUhlaWdodCgpOwotICAgIGJ5dGVbXSBn
ZXROZXh0RnJhbWUoKTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVh
ZCB2aWRlbyBkYXRhIGZyb20gZmlsZSBmb3IgdGhlIC55NG0gY29udGFpbmVyLgotICAgKi8KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgVmlkZW9SZWFkZXJZNE0gaW1wbGVtZW50cyBWaWRlb1JlYWRl
ciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJWaWRlb1JlYWRlclk0
TSI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVXaWR0aDsKLSAgICBwcml2YXRlIGZpbmFs
IGludCBmcmFtZUhlaWdodDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBmcmFtZVNpemU7Ci0KLSAg
ICAvLyBGaXJzdCBjaGFyIGFmdGVyIGhlYWRlcgotICAgIHByaXZhdGUgZmluYWwgbG9uZyB2aWRl
b1N0YXJ0OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFk0TV9GUkFNRV9ERUxJ
TUVURVIgPSAiRlJBTUUiOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBSYW5kb21BY2Nlc3NGaWxlIG1l
ZGlhRmlsZVN0cmVhbTsKLQotICAgIHB1YmxpYyBpbnQgZ2V0RnJhbWVXaWR0aCgpIHsKLSAgICAg
IHJldHVybiBmcmFtZVdpZHRoOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0RnJhbWVIZWln
aHQoKSB7Ci0gICAgICByZXR1cm4gZnJhbWVIZWlnaHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFZp
ZGVvUmVhZGVyWTRNKFN0cmluZyBmaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgbWVk
aWFGaWxlU3RyZWFtID0gbmV3IFJhbmRvbUFjY2Vzc0ZpbGUoZmlsZSwgInIiKTsKLSAgICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICBmb3IgKDs7
KSB7Ci0gICAgICAgIGludCBjID0gbWVkaWFGaWxlU3RyZWFtLnJlYWQoKTsKLSAgICAgICAgaWYg
KGMgPT0gLTEpIHsKLSAgICAgICAgICAvLyBFbmQgb2YgZmlsZSByZWFjaGVkLgotICAgICAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb3VuZCBlbmQgb2YgZmlsZSBiZWZvcmUgZW5k
IG9mIGhlYWRlciBmb3IgZmlsZTogIiArIGZpbGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChj
ID09ICdcbicpIHsKLSAgICAgICAgICAvLyBFbmQgb2YgaGVhZGVyIGZvdW5kLgotICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKChjaGFyKSBjKTsKLSAg
ICAgIH0KLSAgICAgIHZpZGVvU3RhcnQgPSBtZWRpYUZpbGVTdHJlYW0uZ2V0RmlsZVBvaW50ZXIo
KTsKLSAgICAgIFN0cmluZyBoZWFkZXIgPSBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICBTdHJp
bmdbXSBoZWFkZXJUb2tlbnMgPSBoZWFkZXIuc3BsaXQoIlsgXSIpOwotICAgICAgaW50IHcgPSAw
OwotICAgICAgaW50IGggPSAwOwotICAgICAgU3RyaW5nIGNvbG9yU3BhY2UgPSAiIjsKLSAgICAg
IGZvciAoU3RyaW5nIHRvayA6IGhlYWRlclRva2VucykgewotICAgICAgICBjaGFyIGMgPSB0b2su
Y2hhckF0KDApOwotICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICBjYXNlICdXJzoKLSAg
ICAgICAgICAgIHcgPSBJbnRlZ2VyLnBhcnNlSW50KHRvay5zdWJzdHJpbmcoMSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnSCc6Ci0gICAgICAgICAgICBoID0gSW50ZWdl
ci5wYXJzZUludCh0b2suc3Vic3RyaW5nKDEpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAgY29sb3JTcGFjZSA9IHRvay5zdWJzdHJpbmcoMSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgTG9nZ2luZy5k
KFRBRywgIkNvbG9yIHNwYWNlOiAiICsgY29sb3JTcGFjZSk7Ci0gICAgICBpZiAoIWNvbG9yU3Bh
Y2UuZXF1YWxzKCI0MjAiKSAmJiAhY29sb3JTcGFjZS5lcXVhbHMoIjQyMG1wZWcyIikpIHsKLSAg
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJE
b2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlciBjb2xvciBzcGFjZSB0aGFuIEk0MjAgb3IgSTQyMG1w
ZWcyIik7Ci0gICAgICB9Ci0gICAgICBpZiAoKHcgJSAyKSA9PSAxIHx8IChoICUgMikgPT0gMSkg
ewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJEb2VzIG5vdCBz
dXBwb3J0IG9kZCB3aWR0aCBvciBoZWlnaHQiKTsKLSAgICAgIH0KLSAgICAgIGZyYW1lV2lkdGgg
PSB3OwotICAgICAgZnJhbWVIZWlnaHQgPSBoOwotICAgICAgZnJhbWVTaXplID0gdyAqIGggKiAz
IC8gMjsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJmcmFtZSBkaW06ICgiICsgdyArICIsICIgKyBo
ICsgIikgZnJhbWVTaXplOiAiICsgZnJhbWVTaXplKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0
ZVtdIGdldE5leHRGcmFtZSgpIHsKLSAgICAgIGJ5dGVbXSBmcmFtZSA9IG5ldyBieXRlW2ZyYW1l
U2l6ZV07Ci0gICAgICB0cnkgewotICAgICAgICBieXRlW10gZnJhbWVEZWxpbSA9IG5ldyBieXRl
W1k0TV9GUkFNRV9ERUxJTUVURVIubGVuZ3RoKCkgKyAxXTsKLSAgICAgICAgaWYgKG1lZGlhRmls
ZVN0cmVhbS5yZWFkKGZyYW1lRGVsaW0pIDwgZnJhbWVEZWxpbS5sZW5ndGgpIHsKLSAgICAgICAg
ICAvLyBXZSByZWFjaCBlbmQgb2YgZmlsZSwgbG9vcAotICAgICAgICAgIG1lZGlhRmlsZVN0cmVh
bS5zZWVrKHZpZGVvU3RhcnQpOwotICAgICAgICAgIGlmIChtZWRpYUZpbGVTdHJlYW0ucmVhZChm
cmFtZURlbGltKSA8IGZyYW1lRGVsaW0ubGVuZ3RoKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiRXJyb3IgbG9vcGluZyB2aWRlbyIpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBTdHJpbmcgZnJhbWVEZWxpbVN0ciA9IG5ldyBTdHJpbmcoZnJhbWVE
ZWxpbSk7Ci0gICAgICAgIGlmICghZnJhbWVEZWxpbVN0ci5lcXVhbHMoWTRNX0ZSQU1FX0RFTElN
RVRFUiArICJcbiIpKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0g
ICAgICAgICAgICAgICJGcmFtZXMgc2hvdWxkIGJlIGRlbGltaXRlZCBieSBGUkFNRSBwbHVzIG5l
d2xpbmUsIGZvdW5kIGRlbGltdGVyIHdhczogJyIKLSAgICAgICAgICAgICAgKyBmcmFtZURlbGlt
U3RyICsgIiciKTsKLSAgICAgICAgfQotICAgICAgICBtZWRpYUZpbGVTdHJlYW0ucmVhZEZ1bGx5
KGZyYW1lKTsKLSAgICAgICAgYnl0ZVtdIG52MjFGcmFtZSA9IG5ldyBieXRlW2ZyYW1lU2l6ZV07
Ci0gICAgICAgIG5hdGl2ZUk0MjBUb05WMjEoZnJhbWUsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0
LCBudjIxRnJhbWUpOwotICAgICAgICByZXR1cm4gbnYyMUZyYW1lOwotICAgICAgfSBjYXRjaCAo
SU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKLSAgICAgIHRyeSB7
Ci0gICAgICAgIG1lZGlhRmlsZVN0cmVhbS5jbG9zZSgpOwotICAgICAgfSBjYXRjaCAoSU9FeGNl
cHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiUHJvYmxlbSBjbG9zaW5nIGZpbGUi
LCBlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJp
bmcgVEFHID0gIkZpbGVWaWRlb0NhcHR1cmVyIjsKLSAgcHJpdmF0ZSBmaW5hbCBWaWRlb1JlYWRl
ciB2aWRlb1JlYWRlcjsKLSAgcHJpdmF0ZSBDYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2
ZXI7Ci0gIHByaXZhdGUgZmluYWwgVGltZXIgdGltZXIgPSBuZXcgVGltZXIoKTsKLQotICBwcml2
YXRlIGZpbmFsIFRpbWVyVGFzayB0aWNrVGFzayA9IG5ldyBUaW1lclRhc2soKSB7Ci0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgdGljaygpOwotICAgIH0KLSAg
fTsKLQotICBwcml2YXRlIGludCBnZXRGcmFtZVdpZHRoKCkgewotICAgIHJldHVybiB2aWRlb1Jl
YWRlci5nZXRGcmFtZVdpZHRoKCk7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRGcmFtZUhlaWdo
dCgpIHsKLSAgICByZXR1cm4gdmlkZW9SZWFkZXIuZ2V0RnJhbWVIZWlnaHQoKTsKLSAgfQotCi0g
IHB1YmxpYyBGaWxlVmlkZW9DYXB0dXJlcihTdHJpbmcgaW5wdXRGaWxlKSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgIHRyeSB7Ci0gICAgICB2aWRlb1JlYWRlciA9IG5ldyBWaWRlb1JlYWRlclk0
TShpbnB1dEZpbGUpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICJDb3VsZCBub3Qgb3BlbiB2aWRlbyBmaWxlOiAiICsgaW5wdXRGaWxlKTsKLSAg
ICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBieXRlW10gZ2V0TmV4dEZyYW1l
KCkgewotICAgIHJldHVybiB2aWRlb1JlYWRlci5nZXROZXh0RnJhbWUoKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHRpY2soKSB7Ci0gICAgZmluYWwgbG9uZyBjYXB0dXJlVGltZU5zID0gVGltZVVu
aXQuTUlMTElTRUNPTkRTLnRvTmFub3MoU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwot
Ci0gICAgYnl0ZVtdIGZyYW1lRGF0YSA9IGdldE5leHRGcmFtZSgpOwotICAgIGNhcHR1cmVyT2Jz
ZXJ2ZXIub25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgZnJhbWVEYXRhLCBnZXRG
cmFtZVdpZHRoKCksIGdldEZyYW1lSGVpZ2h0KCksIDAsIGNhcHR1cmVUaW1lTnMpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3VyZmFjZVRleHR1cmVIZWxw
ZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAg
ICAgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyKSB7Ci0gICAgdGhpcy5jYXB0dXJl
ck9ic2VydmVyID0gY2FwdHVyZXJPYnNlcnZlcjsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBzdGFydENhcHR1cmUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRl
KSB7Ci0gICAgdGltZXIuc2NoZWR1bGUodGlja1Rhc2ssIDAsIDEwMDAgLyBmcmFtZXJhdGUpOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3BDYXB0dXJlKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICB0aW1lci5jYW5jZWwoKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAgIC8vIEVtcHR5IG9uIHB1cnBvc2UKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIHZpZGVvUmVhZGVyLmNs
b3NlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNTY3JlZW5jYXN0
KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZv
aWQgbmF0aXZlSTQyMFRvTlYyMShieXRlW10gc3JjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJ5
dGVbXSBkc3QpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXIuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsUmVjdERyYXdlci5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsUmVjdERyYXdlci5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMjEwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMxMUV4dDsKLWltcG9ydCBhbmRy
b2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7Ci1pbXBvcnQg
amF2YS51dGlsLklkZW50aXR5SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioK
LSAqIEhlbHBlciBjbGFzcyB0byBkcmF3IGFuIG9wYXF1ZSBxdWFkIG9uIHRoZSB0YXJnZXQgdmll
d3BvcnQgbG9jYXRpb24uIFJvdGF0aW9uLCBtaXJyb3IsIGFuZAotICogY3JvcHBpbmcgaXMgc3Bl
Y2lmaWVkIHVzaW5nIGEgNHg0IHRleHR1cmUgY29vcmRpbmF0ZSB0cmFuc2Zvcm0gbWF0cml4LiBU
aGUgZnJhbWUgaW5wdXQgY2FuIGVpdGhlcgotICogYmUgYW4gT0VTIHRleHR1cmUgb3IgWVVWIHRl
eHR1cmVzIGluIEk0MjAgZm9ybWF0LiBUaGUgR0wgc3RhdGUgbXVzdCBiZSBwcmVzZXJ2ZWQgYmV0
d2VlbiBkcmF3Ci0gKiBjYWxscywgdGhpcyBpcyBpbnRlbnRpb25hbCB0byBtYXhpbWl6ZSBwZXJm
b3JtYW5jZS4gVGhlIGZ1bmN0aW9uIHJlbGVhc2UoKSBtdXN0IGJlIGNhbGxlZAotICogbWFudWFs
bHkgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIGhlbGQgYnkgdGhpcyBvYmplY3QuCi0gKi8KLXB1Ymxp
YyBjbGFzcyBHbFJlY3REcmF3ZXIgaW1wbGVtZW50cyBSZW5kZXJlckNvbW1vbi5HbERyYXdlciB7
Ci0gIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgLy8gU2ltcGxlIHZlcnRleCBzaGFkZXIsIHVzZWQg
Zm9yIGJvdGggWVVWIGFuZCBPRVMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJU
RVhfU0hBREVSX1NUUklORyA9Ci0gICAgICAgICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgot
ICAgICAgKyAiYXR0cmlidXRlIHZlYzQgaW5fcG9zO1xuIgotICAgICAgKyAiYXR0cmlidXRlIHZl
YzQgaW5fdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gbWF0NCB0ZXhNYXRy
aXg7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICsg
IiAgICBnbF9Qb3NpdGlvbiA9IGluX3BvcztcbiIKLSAgICAgICsgIiAgICBpbnRlcnBfdGMgPSAo
dGV4TWF0cml4ICogaW5fdGMpLnh5O1xuIgotICAgICAgKyAifVxuIjsKLQotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgWVVWX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcgPQotICAgICAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAgICArICJ2YXJ5aW5nIHZlYzIgaW50ZXJw
X3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBsZXIyRCB5X3RleDtc
biIKLSAgICAgICsgInVuaWZvcm0gc2FtcGxlcjJEIHVfdGV4O1xuIgotICAgICAgKyAidW5pZm9y
bSBzYW1wbGVyMkQgdl90ZXg7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigp
IHtcbiIKLSAgICAgIC8vIENTQyBhY2NvcmRpbmcgdG8gaHR0cDovL3d3dy5mb3VyY2Mub3JnL2Zj
Y3l2cmdiLnBocAotICAgICAgKyAiICBmbG9hdCB5ID0gdGV4dHVyZTJEKHlfdGV4LCBpbnRlcnBf
dGMpLnI7XG4iCi0gICAgICArICIgIGZsb2F0IHUgPSB0ZXh0dXJlMkQodV90ZXgsIGludGVycF90
YykuciAtIDAuNTtcbiIKLSAgICAgICsgIiAgZmxvYXQgdiA9IHRleHR1cmUyRCh2X3RleCwgaW50
ZXJwX3RjKS5yIC0gMC41O1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHkgKyAx
LjQwMyAqIHYsICIKLSAgICAgICsgIiAgICAgICAgICAgICAgICAgICAgICB5IC0gMC4zNDQgKiB1
IC0gMC43MTQgKiB2LCAiCi0gICAgICArICIgICAgICAgICAgICAgICAgICAgICAgeSArIDEuNzcg
KiB1LCAxKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIFJHQl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HID0KLSAgICAgICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0O1xuIgotICAgICAgKyAidmFyeWluZyB2ZWMyIGludGVycF90YztcbiIKLSAgICAg
ICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBzYW1wbGVyMkQgcmdiX3RleDtcbiIKLSAgICAgICsg
IlxuIgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3Ig
PSB0ZXh0dXJlMkQocmdiX3RleCwgaW50ZXJwX3RjKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE9FU19GUkFHTUVOVF9TSEFERVJfU1RSSU5HID0K
LSAgICAgICAgIiNleHRlbnNpb24gR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA6IHJlcXVpcmVc
biIKLSAgICAgICsgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgotICAgICAgKyAidmFyeWlu
ZyB2ZWMyIGludGVycF90YztcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBzYW1w
bGVyRXh0ZXJuYWxPRVMgb2VzX3RleDtcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAidm9pZCBt
YWluKCkge1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQob2VzX3RleCwg
aW50ZXJwX3RjKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0gIC8vIGNsYW5nLWZvcm1hdCBvbgotCi0g
IC8vIFZlcnRleCBjb29yZGluYXRlcyBpbiBOb3JtYWxpemVkIERldmljZSBDb29yZGluYXRlcywg
aS5lLiAoLTEsIC0xKSBpcyBib3R0b20tbGVmdCBhbmQgKDEsIDEpIGlzCi0gIC8vIHRvcC1yaWdo
dC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmxvYXRCdWZmZXIgRlVMTF9SRUNUQU5HTEVfQlVG
ID0gR2xVdGlsLmNyZWF0ZUZsb2F0QnVmZmVyKG5ldyBmbG9hdFtdIHsKLSAgICAgIC0xLjBmLCAt
MS4wZiwgLy8gQm90dG9tIGxlZnQuCi0gICAgICAxLjBmLCAtMS4wZiwgLy8gQm90dG9tIHJpZ2h0
LgotICAgICAgLTEuMGYsIDEuMGYsIC8vIFRvcCBsZWZ0LgotICAgICAgMS4wZiwgMS4wZiwgLy8g
VG9wIHJpZ2h0LgotICB9KTsKLQotICAvLyBUZXh0dXJlIGNvb3JkaW5hdGVzIC0gKDAsIDApIGlz
IGJvdHRvbS1sZWZ0IGFuZCAoMSwgMSkgaXMgdG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBGbG9hdEJ1ZmZlciBGVUxMX1JFQ1RBTkdMRV9URVhfQlVGID0gR2xVdGlsLmNyZWF0ZUZs
b2F0QnVmZmVyKG5ldyBmbG9hdFtdIHsKLSAgICAgIDAuMGYsIDAuMGYsIC8vIEJvdHRvbSBsZWZ0
LgotICAgICAgMS4wZiwgMC4wZiwgLy8gQm90dG9tIHJpZ2h0LgotICAgICAgMC4wZiwgMS4wZiwg
Ly8gVG9wIGxlZnQuCi0gICAgICAxLjBmLCAxLjBmIC8vIFRvcCByaWdodC4KLSAgfSk7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2hhZGVyIHsKLSAgICBwdWJsaWMgZmluYWwgR2xTaGFkZXIg
Z2xTaGFkZXI7Ci0gICAgcHVibGljIGZpbmFsIGludCB0ZXhNYXRyaXhMb2NhdGlvbjsKLQotICAg
IHB1YmxpYyBTaGFkZXIoU3RyaW5nIGZyYWdtZW50U2hhZGVyKSB7Ci0gICAgICB0aGlzLmdsU2hh
ZGVyID0gbmV3IEdsU2hhZGVyKFZFUlRFWF9TSEFERVJfU1RSSU5HLCBmcmFnbWVudFNoYWRlcik7
Ci0gICAgICB0aGlzLnRleE1hdHJpeExvY2F0aW9uID0gZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0
aW9uKCJ0ZXhNYXRyaXgiKTsKLSAgICB9Ci0gIH0KLQotICAvLyBUaGUga2V5cyBhcmUgb25lIG9m
IHRoZSBmcmFnbWVudHMgc2hhZGVycyBhYm92ZS4KLSAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5n
LCBTaGFkZXI+IHNoYWRlcnMgPSBuZXcgSWRlbnRpdHlIYXNoTWFwPFN0cmluZywgU2hhZGVyPigp
OwotCi0gIC8qKgotICAgKiBEcmF3IGFuIE9FUyB0ZXh0dXJlIGZyYW1lIHdpdGggc3BlY2lmaWVk
IHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBSZXF1aXJlZCByZXNvdXJjZXMgYXJlCi0g
ICAqIGFsbG9jYXRlZCBhdCB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICAgKi8K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRyYXdPZXMoaW50IG9lc1RleHR1cmVJZCwgZmxv
YXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAgICBp
bnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdw
b3J0SGVpZ2h0KSB7Ci0gICAgcHJlcGFyZVNoYWRlcihPRVNfRlJBR01FTlRfU0hBREVSX1NUUklO
RywgdGV4TWF0cml4KTsKLSAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhU
VVJFMCk7Ci0gICAgLy8gdXBkYXRlVGV4SW1hZ2UoKSBtYXkgYmUgY2FsbGVkIGZyb20gYW5vdGhl
ciB0aHJlYWQgaW4gYW5vdGhlciBFR0wgY29udGV4dCwgc28gd2UgbmVlZCB0bwotICAgIC8vIGJp
bmQvdW5iaW5kIHRoZSB0ZXh0dXJlIGluIGVhY2ggZHJhdyBjYWxsIHNvIHRoYXQgR0xFUyB1bmRl
cnN0YWRzIGl0J3MgYSBuZXcgdGV4dHVyZS4KLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVT
MTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMsIG9lc1RleHR1cmVJZCk7Ci0gICAgZHJhd1Jl
Y3RhbmdsZSh2aWV3cG9ydFgsIHZpZXdwb3J0WSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWln
aHQpOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVS
TkFMX09FUywgMCk7Ci0gIH0KLQotICAvKioKLSAgICogRHJhdyBhIFJHQihBKSB0ZXh0dXJlIGZy
YW1lIHdpdGggc3BlY2lmaWVkIHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBSZXF1aXJl
ZCByZXNvdXJjZXMKLSAgICogYXJlIGFsbG9jYXRlZCBhdCB0aGUgZmlyc3QgY2FsbCB0byB0aGlz
IGZ1bmN0aW9uLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRyYXdSZ2IoaW50
IHRleHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVI
ZWlnaHQsCi0gICAgICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLCBpbnQgdmlld3BvcnRX
aWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7Ci0gICAgcHJlcGFyZVNoYWRlcihSR0JfRlJBR01F
TlRfU0hBREVSX1NUUklORywgdGV4TWF0cml4KTsKLSAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJl
KEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdM
X1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0gICAgZHJhd1JlY3RhbmdsZSh2aWV3cG9ydFgsIHZp
ZXdwb3J0WSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOwotICAgIC8vIFVuYmluZCB0
aGUgdGV4dHVyZSBhcyBhIHByZWNhdXRpb24uCi0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xF
UzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICB9Ci0KLSAgLyoqCi0gICAqIERyYXcgYSBZVVYgZnJh
bWUgd2l0aCBzcGVjaWZpZWQgdGV4dHVyZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFJlcXVpcmVk
IHJlc291cmNlcyBhcmUKLSAgICogYWxsb2NhdGVkIGF0IHRoZSBmaXJzdCBjYWxsIHRvIHRoaXMg
ZnVuY3Rpb24uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZHJhd1l1dihpbnRb
XSB5dXZUZXh0dXJlcywgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJh
bWVIZWlnaHQsCi0gICAgICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLCBpbnQgdmlld3Bv
cnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7Ci0gICAgcHJlcGFyZVNoYWRlcihZVVZfRlJB
R01FTlRfU0hBREVSX1NUUklORywgdGV4TWF0cml4KTsKLSAgICAvLyBCaW5kIHRoZSB0ZXh0dXJl
cy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgR0xFUzIwLmdsQWN0
aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTAgKyBpKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRU
ZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCB5dXZUZXh0dXJlc1tpXSk7Ci0gICAgfQotICAg
IGRyYXdSZWN0YW5nbGUodmlld3BvcnRYLCB2aWV3cG9ydFksIHZpZXdwb3J0V2lkdGgsIHZpZXdw
b3J0SGVpZ2h0KTsKLSAgICAvLyBVbmJpbmQgdGhlIHRleHR1cmVzIGFzIGEgcHJlY2F1dGlvbi4u
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIEdMRVMyMC5nbEFjdGl2
ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICBHTEVTMjAuZ2xCaW5kVGV4
dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIGRyYXdSZWN0YW5nbGUoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsK
LSAgICAvLyBEcmF3IHF1YWQuCi0gICAgR0xFUzIwLmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgR0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAuR0xfVFJJQU5HTEVfU1RSSVAs
IDAsIDQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHByZXBhcmVTaGFkZXIoU3RyaW5nIGZyYWdt
ZW50U2hhZGVyLCBmbG9hdFtdIHRleE1hdHJpeCkgewotICAgIGZpbmFsIFNoYWRlciBzaGFkZXI7
Ci0gICAgaWYgKHNoYWRlcnMuY29udGFpbnNLZXkoZnJhZ21lbnRTaGFkZXIpKSB7Ci0gICAgICBz
aGFkZXIgPSBzaGFkZXJzLmdldChmcmFnbWVudFNoYWRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IC8vIExhenkgYWxsb2NhdGlvbi4KLSAgICAgIHNoYWRlciA9IG5ldyBTaGFkZXIoZnJhZ21lbnRT
aGFkZXIpOwotICAgICAgc2hhZGVycy5wdXQoZnJhZ21lbnRTaGFkZXIsIHNoYWRlcik7Ci0gICAg
ICBzaGFkZXIuZ2xTaGFkZXIudXNlUHJvZ3JhbSgpOwotICAgICAgLy8gSW5pdGlhbGl6ZSBmcmFn
bWVudCBzaGFkZXIgdW5pZm9ybSB2YWx1ZXMuCi0gICAgICBpZiAoZnJhZ21lbnRTaGFkZXIgPT0g
WVVWX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcpIHsKLSAgICAgICAgR0xFUzIwLmdsVW5pZm9ybTFp
KHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInlfdGV4IiksIDApOwotICAgICAg
ICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdsU2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigi
dV90ZXgiKSwgMSk7Ci0gICAgICAgIEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xTaGFkZXIu
Z2V0VW5pZm9ybUxvY2F0aW9uKCJ2X3RleCIpLCAyKTsKLSAgICAgIH0gZWxzZSBpZiAoZnJhZ21l
bnRTaGFkZXIgPT0gUkdCX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcpIHsKLSAgICAgICAgR0xFUzIw
LmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInJnYl90ZXgi
KSwgMCk7Ci0gICAgICB9IGVsc2UgaWYgKGZyYWdtZW50U2hhZGVyID09IE9FU19GUkFHTUVOVF9T
SEFERVJfU1RSSU5HKSB7Ci0gICAgICAgIEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xTaGFk
ZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJvZXNfdGV4IiksIDApOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5rbm93biBmcmFnbWVudCBz
aGFkZXI6ICIgKyBmcmFnbWVudFNoYWRlcik7Ci0gICAgICB9Ci0gICAgICBHbFV0aWwuY2hlY2tO
b0dMRVMyRXJyb3IoIkluaXRpYWxpemUgZnJhZ21lbnQgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLiIp
OwotICAgICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0ZXggc2hhZGVyIGF0dHJpYnV0ZXMuCi0gICAgICBz
aGFkZXIuZ2xTaGFkZXIuc2V0VmVydGV4QXR0cmliQXJyYXkoImluX3BvcyIsIDIsIEZVTExfUkVD
VEFOR0xFX0JVRik7Ci0gICAgICBzaGFkZXIuZ2xTaGFkZXIuc2V0VmVydGV4QXR0cmliQXJyYXko
ImluX3RjIiwgMiwgRlVMTF9SRUNUQU5HTEVfVEVYX0JVRik7Ci0gICAgfQotICAgIHNoYWRlci5n
bFNoYWRlci51c2VQcm9ncmFtKCk7Ci0gICAgLy8gQ29weSB0aGUgdGV4dHVyZSB0cmFuc2Zvcm1h
dGlvbiBtYXRyaXggb3Zlci4KLSAgICBHTEVTMjAuZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlci50
ZXhNYXRyaXhMb2NhdGlvbiwgMSwgZmFsc2UsIHRleE1hdHJpeCwgMCk7Ci0gIH0KLQotICAvKioK
LSAgICogUmVsZWFzZSBhbGwgR0xFUyByZXNvdXJjZXMuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBt
YW51YWxseSwgb3RoZXJ3aXNlIHRoZSByZXNvdXJjZXMgYXJlIGxlYWtlZC4KLSAgICovCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIGZvciAoU2hhZGVyIHNoYWRl
ciA6IHNoYWRlcnMudmFsdWVzKCkpIHsKLSAgICAgIHNoYWRlci5nbFNoYWRlci5yZWxlYXNlKCk7
Ci0gICAgfQotICAgIHNoYWRlcnMuY2xlYXIoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9HbFNoYWRlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xTaGFk
ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFNoYWRlci5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsMTIxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLQot
aW1wb3J0IGphdmEubmlvLkZsb2F0QnVmZmVyOwotCi0vLyBIZWxwZXIgY2xhc3MgZm9yIGhhbmRs
aW5nIE9wZW5HTCBzaGFkZXJzIGFuZCBzaGFkZXIgcHJvZ3JhbXMuCi1wdWJsaWMgY2xhc3MgR2xT
aGFkZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkdsU2hhZGVyIjsK
LQotICBwcml2YXRlIHN0YXRpYyBpbnQgY29tcGlsZVNoYWRlcihpbnQgc2hhZGVyVHlwZSwgU3Ry
aW5nIHNvdXJjZSkgewotICAgIGZpbmFsIGludCBzaGFkZXIgPSBHTEVTMjAuZ2xDcmVhdGVTaGFk
ZXIoc2hhZGVyVHlwZSk7Ci0gICAgaWYgKHNoYWRlciA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiZ2xDcmVhdGVTaGFkZXIoKSBmYWlsZWQuIEdMRVMyMCBlcnJvcjog
IiArIEdMRVMyMC5nbEdldEVycm9yKCkpOwotICAgIH0KLSAgICBHTEVTMjAuZ2xTaGFkZXJTb3Vy
Y2Uoc2hhZGVyLCBzb3VyY2UpOwotICAgIEdMRVMyMC5nbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsK
LSAgICBpbnRbXSBjb21waWxlU3RhdHVzID0gbmV3IGludFtdIHtHTEVTMjAuR0xfRkFMU0V9Owot
ICAgIEdMRVMyMC5nbEdldFNoYWRlcml2KHNoYWRlciwgR0xFUzIwLkdMX0NPTVBJTEVfU1RBVFVT
LCBjb21waWxlU3RhdHVzLCAwKTsKLSAgICBpZiAoY29tcGlsZVN0YXR1c1swXSAhPSBHTEVTMjAu
R0xfVFJVRSkgewotICAgICAgTG9nZ2luZy5lKAotICAgICAgICAgIFRBRywgIkNvdWxkIG5vdCBj
b21waWxlIHNoYWRlciAiICsgc2hhZGVyVHlwZSArICI6IiArIEdMRVMyMC5nbEdldFNoYWRlcklu
Zm9Mb2coc2hhZGVyKSk7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihHTEVTMjAu
Z2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikpOwotICAgIH0KLSAgICBHbFV0aWwuY2hlY2tOb0dM
RVMyRXJyb3IoImNvbXBpbGVTaGFkZXIiKTsKLSAgICByZXR1cm4gc2hhZGVyOwotICB9Ci0KLSAg
cHJpdmF0ZSBpbnQgcHJvZ3JhbTsKLQotICBwdWJsaWMgR2xTaGFkZXIoU3RyaW5nIHZlcnRleFNv
dXJjZSwgU3RyaW5nIGZyYWdtZW50U291cmNlKSB7Ci0gICAgZmluYWwgaW50IHZlcnRleFNoYWRl
ciA9IGNvbXBpbGVTaGFkZXIoR0xFUzIwLkdMX1ZFUlRFWF9TSEFERVIsIHZlcnRleFNvdXJjZSk7
Ci0gICAgZmluYWwgaW50IGZyYWdtZW50U2hhZGVyID0gY29tcGlsZVNoYWRlcihHTEVTMjAuR0xf
RlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNvdXJjZSk7Ci0gICAgcHJvZ3JhbSA9IEdMRVMyMC5n
bENyZWF0ZVByb2dyYW0oKTsKLSAgICBpZiAocHJvZ3JhbSA9PSAwKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiZ2xDcmVhdGVQcm9ncmFtKCkgZmFpbGVkLiBHTEVTMjAgZXJy
b3I6ICIgKyBHTEVTMjAuZ2xHZXRFcnJvcigpKTsKLSAgICB9Ci0gICAgR0xFUzIwLmdsQXR0YWNo
U2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7Ci0gICAgR0xFUzIwLmdsQXR0YWNoU2hhZGVy
KHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKLSAgICBHTEVTMjAuZ2xMaW5rUHJvZ3JhbShwcm9n
cmFtKTsKLSAgICBpbnRbXSBsaW5rU3RhdHVzID0gbmV3IGludFtdIHtHTEVTMjAuR0xfRkFMU0V9
OwotICAgIEdMRVMyMC5nbEdldFByb2dyYW1pdihwcm9ncmFtLCBHTEVTMjAuR0xfTElOS19TVEFU
VVMsIGxpbmtTdGF0dXMsIDApOwotICAgIGlmIChsaW5rU3RhdHVzWzBdICE9IEdMRVMyMC5HTF9U
UlVFKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ291bGQgbm90IGxpbmsgcHJvZ3JhbTogIiAr
IEdMRVMyMC5nbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKEdMRVMyMC5nbEdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTsKLSAg
ICB9Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uIG9mIGdsTGlua1Byb2dy
YW0oKToKLSAgICAvLyAiQWZ0ZXIgdGhlIGxpbmsgb3BlcmF0aW9uLCBhcHBsaWNhdGlvbnMgYXJl
IGZyZWUgdG8gbW9kaWZ5IGF0dGFjaGVkIHNoYWRlciBvYmplY3RzLCBjb21waWxlCi0gICAgLy8g
YXR0YWNoZWQgc2hhZGVyIG9iamVjdHMsIGRldGFjaCBzaGFkZXIgb2JqZWN0cywgZGVsZXRlIHNo
YWRlciBvYmplY3RzLCBhbmQgYXR0YWNoIGFkZGl0aW9uYWwKLSAgICAvLyBzaGFkZXIgb2JqZWN0
cy4gTm9uZSBvZiB0aGVzZSBvcGVyYXRpb25zIGFmZmVjdHMgdGhlIGluZm9ybWF0aW9uIGxvZyBv
ciB0aGUgcHJvZ3JhbSB0aGF0IGlzCi0gICAgLy8gcGFydCBvZiB0aGUgcHJvZ3JhbSBvYmplY3Qu
IgotICAgIC8vIEJ1dCBpbiBwcmFjdGljZSwgZGV0YWNoaW5nIHNoYWRlcnMgZnJvbSB0aGUgcHJv
Z3JhbSBzZWVtcyB0byBicmVhayBzb21lIGRldmljZXMuIERlbGV0aW5nIHRoZQotICAgIC8vIHNo
YWRlcnMgYXJlIGZpbmUgaG93ZXZlciAtIGl0IHdpbGwgZGVsZXRlIHRoZW0gd2hlbiB0aGV5IGFy
ZSBubyBsb25nZXIgYXR0YWNoZWQgdG8gYSBwcm9ncmFtLgotICAgIEdMRVMyMC5nbERlbGV0ZVNo
YWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIEdMRVMyMC5nbERlbGV0ZVNoYWRlcihmcmFnbWVudFNo
YWRlcik7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJDcmVhdGluZyBHbFNoYWRlciIp
OwotICB9Ci0KLSAgcHVibGljIGludCBnZXRBdHRyaWJMb2NhdGlvbihTdHJpbmcgbGFiZWwpIHsK
LSAgICBpZiAocHJvZ3JhbSA9PSAtMSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oIlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0gICAgfQotICAgIGludCBsb2Nh
dGlvbiA9IEdMRVMyMC5nbEdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGxhYmVsKTsKLSAgICBp
ZiAobG9jYXRpb24gPCAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291
bGQgbm90IGxvY2F0ZSAnIiArIGxhYmVsICsgIicgaW4gcHJvZ3JhbSIpOwotICAgIH0KLSAgICBy
ZXR1cm4gbG9jYXRpb247Ci0gIH0KLQotICAvKioKLSAgICogRW5hYmxlIGFuZCB1cGxvYWQgYSB2
ZXJ0ZXggYXJyYXkgZm9yIGF0dHJpYnV0ZSB8bGFiZWx8LiBUaGUgdmVydGV4IGRhdGEgaXMgc3Bl
Y2lmaWVkIGluCi0gICAqIHxidWZmZXJ8IHdpdGggfGRpbWVuc2lvbnwgbnVtYmVyIG9mIGNvbXBv
bmVudHMgcGVyIHZlcnRleC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZlcnRleEF0dHJpYkFy
cmF5KFN0cmluZyBsYWJlbCwgaW50IGRpbWVuc2lvbiwgRmxvYXRCdWZmZXIgYnVmZmVyKSB7Ci0g
ICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAgICBpbnQgbG9jYXRp
b24gPSBnZXRBdHRyaWJMb2NhdGlvbihsYWJlbCk7Ci0gICAgR0xFUzIwLmdsRW5hYmxlVmVydGV4
QXR0cmliQXJyYXkobG9jYXRpb24pOwotICAgIEdMRVMyMC5nbFZlcnRleEF0dHJpYlBvaW50ZXIo
bG9jYXRpb24sIGRpbWVuc2lvbiwgR0xFUzIwLkdMX0ZMT0FULCBmYWxzZSwgMCwgYnVmZmVyKTsK
LSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoInNldFZlcnRleEF0dHJpYkFycmF5Iik7Ci0g
IH0KLQotICBwdWJsaWMgaW50IGdldFVuaWZvcm1Mb2NhdGlvbihTdHJpbmcgbGFiZWwpIHsKLSAg
ICBpZiAocHJvZ3JhbSA9PSAtMSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
IlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0gICAgfQotICAgIGludCBsb2NhdGlv
biA9IEdMRVMyMC5nbEdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBsYWJlbCk7Ci0gICAgaWYg
KGxvY2F0aW9uIDwgMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxk
IG5vdCBsb2NhdGUgdW5pZm9ybSAnIiArIGxhYmVsICsgIicgaW4gcHJvZ3JhbSIpOwotICAgIH0K
LSAgICByZXR1cm4gbG9jYXRpb247Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB1c2VQcm9ncmFtKCkg
ewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVsZWFzZWQiKTsKLSAgICB9Ci0gICAgR0xFUzIw
LmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImds
VXNlUHJvZ3JhbSIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiRGVsZXRpbmcgc2hhZGVyLiIpOwotICAgIC8vIERlbGV0ZSBwcm9ncmFtLCBh
dXRvbWF0aWNhbGx5IGRldGFjaGluZyBhbnkgc2hhZGVycyBmcm9tIGl0LgotICAgIGlmIChwcm9n
cmFtICE9IC0xKSB7Ci0gICAgICBHTEVTMjAuZ2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAg
ICAgcHJvZ3JhbSA9IC0xOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9H
bFRleHR1cmVGcmFtZUJ1ZmZlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
R2xUZXh0dXJlRnJhbWVCdWZmZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9HbFRleHR1cmVGcmFtZUJ1ZmZlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTI1
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIGhh
bmRsaW5nIE9wZW5HTCBmcmFtZWJ1ZmZlciB3aXRoIG9ubHkgY29sb3IgYXR0YWNobWVudCBhbmQg
bm8gZGVwdGggb3Igc3RlbmNpbAotICogYnVmZmVyLiBJbnRlbmRlZCBmb3Igc2ltcGxlIHRhc2tz
IHN1Y2ggYXMgdGV4dHVyZSBjb3B5LCB0ZXh0dXJlIGRvd25zY2FsaW5nLCBhbmQgdGV4dHVyZSBj
b2xvcgotICogY29udmVyc2lvbi4KLSAqLwotLy8gVE9ETyhtYWdqZWQpOiBBZGQgdW5pdHRlc3Rz
IGZvciB0aGlzIGNsYXNzLgotcHVibGljIGNsYXNzIEdsVGV4dHVyZUZyYW1lQnVmZmVyIHsKLSAg
cHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVCdWZmZXJJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgdGV4
dHVyZUlkOwotICBwcml2YXRlIGZpbmFsIGludCBwaXhlbEZvcm1hdDsKLSAgcHJpdmF0ZSBpbnQg
d2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLQotICAvKioKLSAgICogR2VuZXJhdGUgdGV4
dHVyZSBhbmQgZnJhbWVidWZmZXIgcmVzb3VyY2VzLiBBbiBFR0xDb250ZXh0IG11c3QgYmUgYm91
bmQgb24gdGhlIGN1cnJlbnQgdGhyZWFkCi0gICAqIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9u
LiBUaGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlIHVudGlsIHNldFNpemUoKSBpcyBjYWxs
ZWQuCi0gICAqLwotICBwdWJsaWMgR2xUZXh0dXJlRnJhbWVCdWZmZXIoaW50IHBpeGVsRm9ybWF0
KSB7Ci0gICAgc3dpdGNoIChwaXhlbEZvcm1hdCkgewotICAgICAgY2FzZSBHTEVTMjAuR0xfTFVN
SU5BTkNFOgotICAgICAgY2FzZSBHTEVTMjAuR0xfUkdCOgotICAgICAgY2FzZSBHTEVTMjAuR0xf
UkdCQToKLSAgICAgICAgdGhpcy5waXhlbEZvcm1hdCA9IHBpeGVsRm9ybWF0OwotICAgICAgICBi
cmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24oIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAiICsgcGl4ZWxGb3JtYXQpOwotICAgIH0K
LQotICAgIHRleHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRV
UkVfMkQpOwotICAgIHRoaXMud2lkdGggPSAwOwotICAgIHRoaXMuaGVpZ2h0ID0gMDsKLQotICAg
IC8vIENyZWF0ZSBmcmFtZWJ1ZmZlciBvYmplY3QgYW5kIGJpbmQgaXQuCi0gICAgZmluYWwgaW50
IGZyYW1lQnVmZmVyc1tdID0gbmV3IGludFsxXTsKLSAgICBHTEVTMjAuZ2xHZW5GcmFtZWJ1ZmZl
cnMoMSwgZnJhbWVCdWZmZXJzLCAwKTsKLSAgICBmcmFtZUJ1ZmZlcklkID0gZnJhbWVCdWZmZXJz
WzBdOwotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIs
IGZyYW1lQnVmZmVySWQpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiR2VuZXJhdGUg
ZnJhbWVidWZmZXIiKTsKLQotICAgIC8vIEF0dGFjaCB0aGUgdGV4dHVyZSB0byB0aGUgZnJhbWVi
dWZmZXIgYXMgY29sb3IgYXR0YWNobWVudC4KLSAgICBHTEVTMjAuZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRCgKLSAgICAgICAgR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBHTEVTMjAuR0xfQ09MT1JfQVRU
QUNITUVOVDAsIEdMRVMyMC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQsIDApOwotICAgIEdsVXRp
bC5jaGVja05vR0xFUzJFcnJvcigiQXR0YWNoIHRleHR1cmUgdG8gZnJhbWVidWZmZXIiKTsKLQot
ICAgIC8vIFJlc3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFt
ZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICB9Ci0KLSAgLyoqCi0gICAqIChS
ZSlhbGxvY2F0ZSB0ZXh0dXJlLiBXaWxsIGRvIG5vdGhpbmcgaWYgdGhlIHJlcXVlc3RlZCBzaXpl
IGVxdWFscyB0aGUgY3VycmVudCBzaXplLiBBbgotICAgKiBFR0xDb250ZXh0IG11c3QgYmUgYm91
bmQgb24gdGhlIGN1cnJlbnQgdGhyZWFkIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBNdXN0
IGJlIGNhbGxlZCBhdAotICAgKiBsZWFzdCBvbmNlIGJlZm9yZSB1c2luZyB0aGUgZnJhbWVidWZm
ZXIuIE1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gY2hhbmdlIHNpemUuCi0gICAqLwot
ICBwdWJsaWMgdm9pZCBzZXRTaXplKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIGlmICh3
aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3Vt
ZW50RXhjZXB0aW9uKCJJbnZhbGlkIHNpemU6ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCk7Ci0g
ICAgfQotICAgIGlmICh3aWR0aCA9PSB0aGlzLndpZHRoICYmIGhlaWdodCA9PSB0aGlzLmhlaWdo
dCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAg
dGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICAvLyBCaW5kIG91ciBmcmFtZWJ1ZmZlci4KLSAg
ICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBmcmFtZUJ1
ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsQmluZEZyYW1lYnVmZmVy
Iik7Ci0KLSAgICAvLyBBbGxvY2F0ZSB0ZXh0dXJlLgotICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1
cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAu
R0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAgICBHTEVTMjAuZ2xUZXhJbWFnZTJEKEdMRVMy
MC5HTF9URVhUVVJFXzJELCAwLCBwaXhlbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgcGl4ZWxG
b3JtYXQsCi0gICAgICAgIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCBudWxsKTsKLQotICAgIC8v
IENoZWNrIHRoYXQgdGhlIGZyYW1lYnVmZmVyIGlzIGluIGEgZ29vZCBzdGF0ZS4KLSAgICBmaW5h
bCBpbnQgc3RhdHVzID0gR0xFUzIwLmdsQ2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTEVTMjAuR0xf
RlJBTUVCVUZGRVIpOwotICAgIGlmIChzdGF0dXMgIT0gR0xFUzIwLkdMX0ZSQU1FQlVGRkVSX0NP
TVBMRVRFKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJGcmFtZWJ1
ZmZlciBub3QgY29tcGxldGUsIHN0YXR1czogIiArIHN0YXR1cyk7Ci0gICAgfQotCi0gICAgLy8g
UmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVy
KEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xF
UzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRXaWR0aCgpIHsK
LSAgICByZXR1cm4gd2lkdGg7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEhlaWdodCgpIHsKLSAg
ICByZXR1cm4gaGVpZ2h0OwotICB9Ci0KLSAgcHVibGljIGludCBnZXRGcmFtZUJ1ZmZlcklkKCkg
ewotICAgIHJldHVybiBmcmFtZUJ1ZmZlcklkOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRUZXh0
dXJlSWQoKSB7Ci0gICAgcmV0dXJuIHRleHR1cmVJZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZWxl
YXNlIHRleHR1cmUgYW5kIGZyYW1lYnVmZmVyLiBBbiBFR0xDb250ZXh0IG11c3QgYmUgYm91bmQg
b24gdGhlIGN1cnJlbnQgdGhyZWFkIHdoZW4gY2FsbGluZwotICAgKiB0aGlzIGZ1bmN0aW9uLiBU
aGlzIG9iamVjdCBzaG91bGQgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBjYWxsLgotICAgKi8KLSAg
cHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxLCBu
ZXcgaW50W10ge3RleHR1cmVJZH0sIDApOwotICAgIEdMRVMyMC5nbERlbGV0ZUZyYW1lYnVmZmVy
cygxLCBuZXcgaW50W10ge2ZyYW1lQnVmZmVySWR9LCAwKTsKLSAgICB3aWR0aCA9IDA7Ci0gICAg
aGVpZ2h0ID0gMDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFV0aWwuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsVXRpbC5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsVXRpbC5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
NTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1p
bXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZl
cjsKLWltcG9ydCBqYXZhLm5pby5CeXRlT3JkZXI7Ci1pbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZm
ZXI7Ci0KLS8qKgotICogU29tZSBPcGVuR0wgc3RhdGljIHV0aWxpdHkgZnVuY3Rpb25zLgotICov
Ci1wdWJsaWMgY2xhc3MgR2xVdGlsIHsKLSAgcHJpdmF0ZSBHbFV0aWwoKSB7fQotCi0gIC8vIEFz
c2VydCB0aGF0IG5vIE9wZW5HTCBFUyAyLjAgZXJyb3IgaGFzIGJlZW4gcmFpc2VkLgotICBwdWJs
aWMgc3RhdGljIHZvaWQgY2hlY2tOb0dMRVMyRXJyb3IoU3RyaW5nIG1zZykgewotICAgIGludCBl
cnJvciA9IEdMRVMyMC5nbEdldEVycm9yKCk7Ci0gICAgaWYgKGVycm9yICE9IEdMRVMyMC5HTF9O
T19FUlJPUikgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24obXNnICsgIjogR0xF
UzIwIGVycm9yOiAiICsgZXJyb3IpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgRmxv
YXRCdWZmZXIgY3JlYXRlRmxvYXRCdWZmZXIoZmxvYXRbXSBjb29yZHMpIHsKLSAgICAvLyBBbGxv
Y2F0ZSBhIGRpcmVjdCBCeXRlQnVmZmVyLCB1c2luZyA0IGJ5dGVzIHBlciBmbG9hdCwgYW5kIGNv
cHkgY29vcmRzIGludG8gaXQuCi0gICAgQnl0ZUJ1ZmZlciBiYiA9IEJ5dGVCdWZmZXIuYWxsb2Nh
dGVEaXJlY3QoY29vcmRzLmxlbmd0aCAqIDQpOwotICAgIGJiLm9yZGVyKEJ5dGVPcmRlci5uYXRp
dmVPcmRlcigpKTsKLSAgICBGbG9hdEJ1ZmZlciBmYiA9IGJiLmFzRmxvYXRCdWZmZXIoKTsKLSAg
ICBmYi5wdXQoY29vcmRzKTsKLSAgICBmYi5wb3NpdGlvbigwKTsKLSAgICByZXR1cm4gZmI7Ci0g
IH0KLQotICAvKioKLSAgICogR2VuZXJhdGUgdGV4dHVyZSB3aXRoIHN0YW5kYXJkIHBhcmFtZXRl
cnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludCBnZW5lcmF0ZVRleHR1cmUoaW50IHRhcmdl
dCkgewotICAgIGZpbmFsIGludCB0ZXh0dXJlQXJyYXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgR0xF
UzIwLmdsR2VuVGV4dHVyZXMoMSwgdGV4dHVyZUFycmF5LCAwKTsKLSAgICBmaW5hbCBpbnQgdGV4
dHVyZUlkID0gdGV4dHVyZUFycmF5WzBdOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKHRhcmdl
dCwgdGV4dHVyZUlkKTsKLSAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xFUzIw
LkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xFUzIwLkdMX0xJTkVBUik7Ci0gICAgR0xFUzIwLmds
VGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMRVMyMC5HTF9URVhUVVJFX01BR19GSUxURVIsIEdMRVMy
MC5HTF9MSU5FQVIpOwotICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAu
R0xfVEVYVFVSRV9XUkFQX1MsIEdMRVMyMC5HTF9DTEFNUF9UT19FREdFKTsKLSAgICBHTEVTMjAu
Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xFUzIwLkdMX1RFWFRVUkVfV1JBUF9ULCBHTEVTMjAu
R0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgY2hlY2tOb0dMRVMyRXJyb3IoImdlbmVyYXRlVGV4dHVy
ZSIpOwotICAgIHJldHVybiB0ZXh0dXJlSWQ7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvSWNlQ2FuZGlkYXRlLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9JY2VD
YW5kaWRhdGUuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9JY2VD
YW5kaWRhdGUuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBSZXByZXNlbnRhdGlvbiBv
ZiBhIHNpbmdsZSBJQ0UgQ2FuZGlkYXRlLCBtaXJyb3JpbmcKLSAqIHtAY29kZSBJY2VDYW5kaWRh
dGVJbnRlcmZhY2V9IGluIHRoZSBDKysgQVBJLgotICovCi1wdWJsaWMgY2xhc3MgSWNlQ2FuZGlk
YXRlIHsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBzZHBNaWQ7Ci0gIHB1YmxpYyBmaW5hbCBpbnQg
c2RwTUxpbmVJbmRleDsKLSAgcHVibGljIGZpbmFsIFN0cmluZyBzZHA7Ci0KLSAgcHVibGljIElj
ZUNhbmRpZGF0ZShTdHJpbmcgc2RwTWlkLCBpbnQgc2RwTUxpbmVJbmRleCwgU3RyaW5nIHNkcCkg
ewotICAgIHRoaXMuc2RwTWlkID0gc2RwTWlkOwotICAgIHRoaXMuc2RwTUxpbmVJbmRleCA9IHNk
cE1MaW5lSW5kZXg7Ci0gICAgdGhpcy5zZHAgPSBzZHA7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5n
IHRvU3RyaW5nKCkgewotICAgIHJldHVybiBzZHBNaWQgKyAiOiIgKyBzZHBNTGluZUluZGV4ICsg
IjoiICsgc2RwOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRl
b0RlY29kZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNW
aWRlb0RlY29kZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9N
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MTAgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5k
cm9pZC5tZWRpYS5NZWRpYUNvZGVjOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0lu
Zm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mby5Db2RlY0NhcGFiaWxpdGll
czsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNMaXN0OwotaW1wb3J0IGFuZHJvaWQu
bWVkaWEuTWVkaWFGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRy
b2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotCi1pbXBv
cnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0
IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0
IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5RdWV1ZTsKLWltcG9ydCBqYXZhLnV0
aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1w
b3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vLyBKYXZhLXNpZGUgb2YgcGVl
cmNvbm5lY3Rpb25fam5pLmNjOk1lZGlhQ29kZWNWaWRlb0RlY29kZXIuCi0vLyBUaGlzIGNsYXNz
IGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgSmF2YSBQZWVyQ29ubmVjdGlvbiBB
UEkuCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIE1lZGlh
Q29kZWNWaWRlb0RlY29kZXIgewotICAvLyBUaGlzIGNsYXNzIGlzIGNvbnN0cnVjdGVkLCBvcGVy
YXRlZCwgYW5kIGRlc3Ryb3llZCBieSBpdHMgQysrIGluY2FybmF0aW9uLAotICAvLyBzbyB0aGUg
Y2xhc3MgYW5kIGl0cyBtZXRob2RzIGhhdmUgbm9uLXB1YmxpYyB2aXNpYmlsaXR5LiAgVGhlIEFQ
SSB0aGlzCi0gIC8vIGNsYXNzIGV4cG9zZXMgYWltcyB0byBtaW1pYyB0aGUgd2VicnRjOjpWaWRl
b0RlY29kZXIgQVBJIGFzIGNsb3NlbHkgYXMKLSAgLy8gcG9zc2libHkgdG8gbWluaW1pemUgdGhl
IGFtb3VudCBvZiB0cmFuc2xhdGlvbiB3b3JrIG5lY2Vzc2FyeS4KLQotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIiOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBsb25nIE1BWF9ERUNPREVfVElNRV9NUyA9IDIwMDsKLQotICAvLyBUcmFj
a3Mgd2VicnRjOjpWaWRlb0NvZGVjVHlwZS4KLSAgcHVibGljIGVudW0gVmlkZW9Db2RlY1R5cGUg
eyBWSURFT19DT0RFQ19WUDgsIFZJREVPX0NPREVDX1ZQOSwgVklERU9fQ09ERUNfSDI2NCB9Ci0K
LSAgLy8gVGltZW91dCBmb3IgaW5wdXQgYnVmZmVyIGRlcXVldWUuCi0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBERVFVRVVFX0lOUFVUX1RJTUVPVVQgPSA1MDAwMDA7Ci0gIC8vIFRpbWVvdXQg
Zm9yIGNvZGVjIHJlbGVhc2luZy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FRElBX0NP
REVDX1JFTEVBU0VfVElNRU9VVF9NUyA9IDUwMDA7Ci0gIC8vIE1heCBudW1iZXIgb2Ygb3V0cHV0
IGJ1ZmZlcnMgcXVldWVkIGJlZm9yZSBzdGFydGluZyB0byBkcm9wIGRlY29kZWQgZnJhbWVzLgot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1FVRVVFRF9PVVRQVVRCVUZGRVJTID0gMzsK
LSAgLy8gQWN0aXZlIHJ1bm5pbmcgZGVjb2RlciBpbnN0YW5jZS4gU2V0IGluIGluaXREZWNvZGUo
KSAoY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUpCi0gIC8vIGFuZCByZXNldCB0byBudWxsIGluIHJl
bGVhc2UoKSBjYWxsLgotICBwcml2YXRlIHN0YXRpYyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIHJ1
bm5pbmdJbnN0YW5jZSA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIE1lZGlhQ29kZWNWaWRlb0Rl
Y29kZXJFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2sgPSBudWxsOwotICBwcml2YXRlIHN0YXRp
YyBpbnQgY29kZWNFcnJvcnMgPSAwOwotICAvLyBMaXN0IG9mIGRpc2FibGVkIGNvZGVjIHR5cGVz
IC0gY2FuIGJlIHNldCBmcm9tIGFwcGxpY2F0aW9uLgotICBwcml2YXRlIHN0YXRpYyBTZXQ8U3Ry
aW5nPiBod0RlY29kZXJEaXNhYmxlZFR5cGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCi0g
IHByaXZhdGUgVGhyZWFkIG1lZGlhQ29kZWNUaHJlYWQ7Ci0gIHByaXZhdGUgTWVkaWFDb2RlYyBt
ZWRpYUNvZGVjOwotICBwcml2YXRlIEJ5dGVCdWZmZXJbXSBpbnB1dEJ1ZmZlcnM7Ci0gIHByaXZh
dGUgQnl0ZUJ1ZmZlcltdIG91dHB1dEJ1ZmZlcnM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBWUDhfTUlNRV9UWVBFID0gInZpZGVvL3gtdm5kLm9uMi52cDgiOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgVlA5X01JTUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA5IjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEgyNjRfTUlNRV9UWVBFID0gInZpZGVvL2F2
YyI7Ci0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIEhXIFZQOCBkZWNvZGVycy4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nW10gc3VwcG9ydGVkVnA4SHdDb2RlY1ByZWZpeGVzID0gewotICAg
ICAgIk9NWC5xY29tLiIsICJPTVguTnZpZGlhLiIsICJPTVguRXh5bm9zLiIsICJPTVguSW50ZWwu
In07Ci0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIEhXIFZQOSBkZWNvZGVycy4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nW10gc3VwcG9ydGVkVnA5SHdDb2RlY1ByZWZpeGVzID0geyJPTVgu
cWNvbS4iLCAiT01YLkV4eW5vcy4ifTsKLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcgSC4yNjQg
ZGVjb2RlcnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1cHBvcnRlZEgyNjRI
d0NvZGVjUHJlZml4ZXMgPSB7Ci0gICAgICAiT01YLnFjb20uIiwgIk9NWC5JbnRlbC4iLCAiT01Y
LkV4eW5vcy4ifTsKLQotICAvLyBOVjEyIGNvbG9yIGZvcm1hdCBzdXBwb3J0ZWQgYnkgUUNPTSBj
b2RlYywgYnV0IG5vdCBkZWNsYXJlZCBpbiBNZWRpYUNvZGVjIC0KLSAgLy8gc2VlIC9oYXJkd2Fy
ZS9xY29tL21lZGlhL21tLWNvcmUvaW5jL09NWF9RQ09NRXh0bnMuaAotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMzJtNGth
ID0gMHg3RkEzMEMwMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9S
TUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjE2bTRrYSA9IDB4N0ZBMzBDMDI7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXI2
NHgzMlRpbGUybThrYSA9IDB4N0ZBMzBDMDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBD
T0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0gPSAweDdGQTMwQzA0Owot
ICAvLyBBbGxvd2FibGUgY29sb3IgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgY29kZWMgLSBpbiBvcmRl
ciBvZiBwcmVmZXJlbmNlLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMaXN0PEludGVnZXI+IHN1
cHBvcnRlZENvbG9yTGlzdCA9IEFycmF5cy5hc0xpc3QoCi0gICAgICBDb2RlY0NhcGFiaWxpdGll
cy5DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIsIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1h
dFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9RQ09NX0Zv
cm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tl
ZFNlbWlQbGFuYXIzMm00a2EsIENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5h
cjE2bTRrYSwKLSAgICAgIENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjY0
eDMyVGlsZTJtOGthLAotICAgICAgQ09MT1JfUUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1pUGxh
bmFyMzJtKTsKLQotICBwcml2YXRlIGludCBjb2xvckZvcm1hdDsKLSAgcHJpdmF0ZSBpbnQgd2lk
dGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAgcHJpdmF0ZSBpbnQgc3RyaWRlOwotICBwcml2
YXRlIGludCBzbGljZUhlaWdodDsKLSAgcHJpdmF0ZSBib29sZWFuIGhhc0RlY29kZWRGaXJzdEZy
YW1lOwotICBwcml2YXRlIGZpbmFsIFF1ZXVlPFRpbWVTdGFtcHM+IGRlY29kZVN0YXJ0VGltZU1z
ID0gbmV3IExpbmtlZExpc3Q8VGltZVN0YW1wcz4oKTsKLSAgcHJpdmF0ZSBib29sZWFuIHVzZVN1
cmZhY2U7Ci0KLSAgLy8gVGhlIGJlbG93IHZhcmlhYmxlcyBhcmUgb25seSB1c2VkIHdoZW4gZGVj
b2RpbmcgdG8gYSBTdXJmYWNlLgotICBwcml2YXRlIFRleHR1cmVMaXN0ZW5lciB0ZXh0dXJlTGlz
dGVuZXI7Ci0gIHByaXZhdGUgaW50IGRyb3BwZWRGcmFtZXM7Ci0gIHByaXZhdGUgU3VyZmFjZSBz
dXJmYWNlID0gbnVsbDsKLSAgcHJpdmF0ZSBmaW5hbCBRdWV1ZTxEZWNvZGVkT3V0cHV0QnVmZmVy
PiBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzID0KLSAgICAgIG5ldyBMaW5rZWRMaXN0PERl
Y29kZWRPdXRwdXRCdWZmZXI+KCk7Ci0KLSAgLy8gTWVkaWFDb2RlYyBlcnJvciBoYW5kbGVyIC0g
aW52b2tlZCB3aGVuIGNyaXRpY2FsIGVycm9yIGhhcHBlbnMgd2hpY2ggbWF5IHByZXZlbnQKLSAg
Ly8gZnVydGhlciB1c2Ugb2YgbWVkaWEgY29kZWMgQVBJLiBOb3cgaXQgbWVhbnMgdGhhdCBvbmUg
b2YgbWVkaWEgY29kZWMgaW5zdGFuY2VzCi0gIC8vIGlzIGhhbmdpbmcgYW5kIGNhbiBubyBsb25n
ZXIgYmUgdXNlZCBpbiB0aGUgbmV4dCBjYWxsLgotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBN
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyRXJyb3JDYWxsYmFjayB7Ci0gICAgdm9pZCBvbk1lZGlhQ29k
ZWNWaWRlb0RlY29kZXJDcml0aWNhbEVycm9yKGludCBjb2RlY0Vycm9ycyk7Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIHZvaWQgc2V0RXJyb3JDYWxsYmFjayhNZWRpYUNvZGVjVmlkZW9EZWNvZGVy
RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlNldCBl
cnJvciBjYWxsYmFjayIpOwotICAgIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIuZXJyb3JDYWxsYmFj
ayA9IGVycm9yQ2FsbGJhY2s7Ci0gIH0KLQotICAvLyBGdW5jdGlvbnMgdG8gZGlzYWJsZSBIVyBk
ZWNvZGluZyAtIGNhbiBiZSBjYWxsZWQgZnJvbSBhcHBsaWNhdGlvbnMgZm9yIHBsYXRmb3Jtcwot
ICAvLyB3aGljaCBoYXZlIGtub3duIEhXIGRlY29kaW5nIHByb2JsZW1zLgotICBwdWJsaWMgc3Rh
dGljIHZvaWQgZGlzYWJsZVZwOEh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIlZQOCBk
ZWNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAgICBod0RlY29kZXJEaXNh
YmxlZFR5cGVzLmFkZChWUDhfTUlNRV9UWVBFKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9p
ZCBkaXNhYmxlVnA5SHdDb2RlYygpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAiVlA5IGRlY29kaW5n
IGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RGVjb2RlckRpc2FibGVkVHlw
ZXMuYWRkKFZQOV9NSU1FX1RZUEUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2Fi
bGVIMjY0SHdDb2RlYygpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAiSC4yNjQgZGVjb2RpbmcgaXMg
ZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5h
ZGQoSDI2NF9NSU1FX1RZUEUpOwotICB9Ci0KLSAgLy8gRnVuY3Rpb25zIHRvIHF1ZXJ5IGlmIEhX
IGRlY29kaW5nIGlzIHN1cHBvcnRlZC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA4SHdT
dXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0RlY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRhaW5z
KFZQOF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kRGVjb2RlcihWUDhfTUlNRV9UWVBFLCBz
dXBwb3J0ZWRWcDhId0NvZGVjUHJlZml4ZXMpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBib29sZWFuIGlzVnA5SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0RlY29kZXJE
aXNhYmxlZFR5cGVzLmNvbnRhaW5zKFZQOV9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kRGVj
b2RlcihWUDlfTUlNRV9UWVBFLCBzdXBwb3J0ZWRWcDlId0NvZGVjUHJlZml4ZXMpICE9IG51bGwp
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSDI2NEh3U3VwcG9ydGVkKCkgewot
ICAgIHJldHVybiAhaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhIMjY0X01JTUVfVFlQ
RSkKLSAgICAgICAgJiYgKGZpbmREZWNvZGVyKEgyNjRfTUlNRV9UWVBFLCBzdXBwb3J0ZWRIMjY0
SHdDb2RlY1ByZWZpeGVzKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBw
cmludFN0YWNrVHJhY2UoKSB7Ci0gICAgaWYgKHJ1bm5pbmdJbnN0YW5jZSAhPSBudWxsICYmIHJ1
bm5pbmdJbnN0YW5jZS5tZWRpYUNvZGVjVGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNrVHJh
Y2VFbGVtZW50W10gbWVkaWFDb2RlY1N0YWNrVHJhY2VzID0gcnVubmluZ0luc3RhbmNlLm1lZGlh
Q29kZWNUaHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgaWYgKG1lZGlhQ29kZWNTdGFja1Ry
YWNlcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJNZWRpYUNvZGVjVmlk
ZW9EZWNvZGVyIHN0YWNrcyB0cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxlbWVu
dCBzdGFja1RyYWNlIDogbWVkaWFDb2RlY1N0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgc3RhY2tUcmFjZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGZpbmREZWNvZGVyKCkgYmVsb3cuCi0g
IHByaXZhdGUgc3RhdGljIGNsYXNzIERlY29kZXJQcm9wZXJ0aWVzIHsKLSAgICBwdWJsaWMgRGVj
b2RlclByb3BlcnRpZXMoU3RyaW5nIGNvZGVjTmFtZSwgaW50IGNvbG9yRm9ybWF0KSB7Ci0gICAg
ICB0aGlzLmNvZGVjTmFtZSA9IGNvZGVjTmFtZTsKLSAgICAgIHRoaXMuY29sb3JGb3JtYXQgPSBj
b2xvckZvcm1hdDsKLSAgICB9Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBjb2RlY05hbWU7IC8v
IE9wZW5NYXggY29tcG9uZW50IG5hbWUgZm9yIFZQOCBjb2RlYy4KLSAgICBwdWJsaWMgZmluYWwg
aW50IGNvbG9yRm9ybWF0OyAvLyBDb2xvciBmb3JtYXQgc3VwcG9ydGVkIGJ5IGNvZGVjLgotICB9
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgRGVjb2RlclByb3BlcnRpZXMgZmluZERlY29kZXIoU3RyaW5n
IG1pbWUsIFN0cmluZ1tdIHN1cHBvcnRlZENvZGVjUHJlZml4ZXMpIHsKLSAgICBpZiAoQnVpbGQu
VkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIHJl
dHVybiBudWxsOyAvLyBNZWRpYUNvZGVjLnNldFBhcmFtZXRlcnMgaXMgbWlzc2luZy4KLSAgICB9
Ci0gICAgTG9nZ2luZy5kKFRBRywgIlRyeWluZyB0byBmaW5kIEhXIGRlY29kZXIgZm9yIG1pbWUg
IiArIG1pbWUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTWVkaWFDb2RlY0xpc3QuZ2V0Q29k
ZWNDb3VudCgpOyArK2kpIHsKLSAgICAgIE1lZGlhQ29kZWNJbmZvIGluZm8gPSBudWxsOwotICAg
ICAgdHJ5IHsKLSAgICAgICAgaW5mbyA9IE1lZGlhQ29kZWNMaXN0LmdldENvZGVjSW5mb0F0KGkp
OwotICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
TG9nZ2luZy5lKFRBRywgIkNhbm5vdCByZXRyaWV2ZSBkZWNvZGVyIGNvZGVjIGluZm8iLCBlKTsK
LSAgICAgIH0KLSAgICAgIGlmIChpbmZvID09IG51bGwgfHwgaW5mby5pc0VuY29kZXIoKSkgewot
ICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAg
ICAgIGZvciAoU3RyaW5nIG1pbWVUeXBlIDogaW5mby5nZXRTdXBwb3J0ZWRUeXBlcygpKSB7Ci0g
ICAgICAgIGlmIChtaW1lVHlwZS5lcXVhbHMobWltZSkpIHsKLSAgICAgICAgICBuYW1lID0gaW5m
by5nZXROYW1lKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IGlmIChuYW1lID09IG51bGwpIHsKLSAgICAgICAgY29udGludWU7IC8vIE5vIEhXIHN1cHBvcnQg
aW4gdGhpcyBjb2RlYzsgdHJ5IHRoZSBuZXh0IG9uZS4KLSAgICAgIH0KLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJGb3VuZCBjYW5kaWRhdGUgZGVjb2RlciAiICsgbmFtZSk7Ci0KLSAgICAgIC8vIENo
ZWNrIGlmIHRoaXMgaXMgc3VwcG9ydGVkIGRlY29kZXIuCi0gICAgICBib29sZWFuIHN1cHBvcnRl
ZENvZGVjID0gZmFsc2U7Ci0gICAgICBmb3IgKFN0cmluZyBjb2RlY1ByZWZpeCA6IHN1cHBvcnRl
ZENvZGVjUHJlZml4ZXMpIHsKLSAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChjb2RlY1ByZWZp
eCkpIHsKLSAgICAgICAgICBzdXBwb3J0ZWRDb2RlYyA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmICghc3VwcG9ydGVkQ29kZWMpIHsKLSAgICAg
ICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIC8vIENoZWNrIGlmIGNvZGVjIHN1cHBvcnRz
IGVpdGhlciB5dXY0MjAgb3IgbnYxMi4KLSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNhcGFiaWxp
dGllczsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGNhcGFiaWxpdGllcyA9IGluZm8uZ2V0Q2FwYWJp
bGl0aWVzRm9yVHlwZShtaW1lKTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZGVjb2Rl
ciBjYXBhYmlsaXRpZXMiLCBlKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBm
b3IgKGludCBjb2xvckZvcm1hdCA6IGNhcGFiaWxpdGllcy5jb2xvckZvcm1hdHMpIHsKLSAgICAg
ICAgTG9nZ2luZy52KFRBRywgIiAgIENvbG9yOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNv
bG9yRm9ybWF0KSk7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBzdXBwb3J0ZWRDb2xvckZvcm1h
dCA6IHN1cHBvcnRlZENvbG9yTGlzdCkgewotICAgICAgICBmb3IgKGludCBjb2RlY0NvbG9yRm9y
bWF0IDogY2FwYWJpbGl0aWVzLmNvbG9yRm9ybWF0cykgewotICAgICAgICAgIGlmIChjb2RlY0Nv
bG9yRm9ybWF0ID09IHN1cHBvcnRlZENvbG9yRm9ybWF0KSB7Ci0gICAgICAgICAgICAvLyBGb3Vu
ZCBzdXBwb3J0ZWQgSFcgZGVjb2Rlci4KLSAgICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3Vu
ZCB0YXJnZXQgZGVjb2RlciAiICsgbmFtZSArICIuIENvbG9yOiAweCIKLSAgICAgICAgICAgICAg
ICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvZGVjQ29sb3JGb3JtYXQpKTsKLSAgICAgICAg
ICAgIHJldHVybiBuZXcgRGVjb2RlclByb3BlcnRpZXMobmFtZSwgY29kZWNDb2xvckZvcm1hdCk7
Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIExvZ2dpbmcuZChU
QUcsICJObyBIVyBkZWNvZGVyIGZvdW5kIGZvciBtaW1lICIgKyBtaW1lKTsKLSAgICByZXR1cm4g
bnVsbDsgLy8gTm8gSFcgZGVjb2Rlci4KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja09uTWVk
aWFDb2RlY1RocmVhZCgpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gewotICAgIGlmICht
ZWRpYUNvZGVjVGhyZWFkLmdldElkKCkgIT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgp
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJNZWRpYUNvZGVjVmlk
ZW9EZWNvZGVyIHByZXZpb3VzbHkgb3BlcmF0ZWQgb24gIgotICAgICAgICAgICsgbWVkaWFDb2Rl
Y1RocmVhZCArICIgYnV0IGlzIG5vdyBjYWxsZWQgb24gIiArIFRocmVhZC5jdXJyZW50VGhyZWFk
KCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFBhc3MgbnVsbCBpbiB8c3VyZmFjZVRleHR1cmVIZWxw
ZXJ8IHRvIGNvbmZpZ3VyZSB0aGUgY29kZWMgZm9yIEJ5dGVCdWZmZXIgb3V0cHV0LgotICBwcml2
YXRlIGJvb2xlYW4gaW5pdERlY29kZSgKLSAgICAgIFZpZGVvQ29kZWNUeXBlIHR5cGUsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxw
ZXIpIHsKLSAgICBpZiAobWVkaWFDb2RlY1RocmVhZCAhPSBudWxsKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiaW5pdERlY29kZTogRm9yZ290IHRvIHJlbGVhc2UoKT8iKTsK
LSAgICB9Ci0KLSAgICBTdHJpbmcgbWltZSA9IG51bGw7Ci0gICAgdXNlU3VyZmFjZSA9IChzdXJm
YWNlVGV4dHVyZUhlbHBlciAhPSBudWxsKTsKLSAgICBTdHJpbmdbXSBzdXBwb3J0ZWRDb2RlY1By
ZWZpeGVzID0gbnVsbDsKLSAgICBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RF
Q19WUDgpIHsKLSAgICAgIG1pbWUgPSBWUDhfTUlNRV9UWVBFOwotICAgICAgc3VwcG9ydGVkQ29k
ZWNQcmVmaXhlcyA9IHN1cHBvcnRlZFZwOEh3Q29kZWNQcmVmaXhlczsKLSAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA5KSB7Ci0gICAgICBtaW1lID0g
VlA5X01JTUVfVFlQRTsKLSAgICAgIHN1cHBvcnRlZENvZGVjUHJlZml4ZXMgPSBzdXBwb3J0ZWRW
cDlId0NvZGVjUHJlZml4ZXM7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBl
LlZJREVPX0NPREVDX0gyNjQpIHsKLSAgICAgIG1pbWUgPSBIMjY0X01JTUVfVFlQRTsKLSAgICAg
IHN1cHBvcnRlZENvZGVjUHJlZml4ZXMgPSBzdXBwb3J0ZWRIMjY0SHdDb2RlY1ByZWZpeGVzOwot
ICAgIH0gZWxzZSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW5pdERlY29k
ZTogTm9uLXN1cHBvcnRlZCBjb2RlYyAiICsgdHlwZSk7Ci0gICAgfQotICAgIERlY29kZXJQcm9w
ZXJ0aWVzIHByb3BlcnRpZXMgPSBmaW5kRGVjb2RlcihtaW1lLCBzdXBwb3J0ZWRDb2RlY1ByZWZp
eGVzKTsKLSAgICBpZiAocHJvcGVydGllcyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiQ2Fubm90IGZpbmQgSFcgZGVjb2RlciBmb3IgIiArIHR5cGUpOwotICAg
IH0KLQotICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIGluaXREZWNvZGU6ICIgKyB0eXBlICsgIiA6
ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0ICsgIi4gQ29sb3I6IDB4IgotICAgICAgICAgICAg
KyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHByb3BlcnRpZXMuY29sb3JGb3JtYXQpICsgIi4gVXNlIFN1
cmZhY2U6ICIgKyB1c2VTdXJmYWNlKTsKLQotICAgIHJ1bm5pbmdJbnN0YW5jZSA9IHRoaXM7IC8v
IERlY29kZXIgaXMgbm93IHJ1bm5pbmcgYW5kIGNhbiBiZSBxdWVyaWVkIGZvciBzdGFjayB0cmFj
ZXMuCi0gICAgbWVkaWFDb2RlY1RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAg
dHJ5IHsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVp
Z2h0OwotICAgICAgc3RyaWRlID0gd2lkdGg7Ci0gICAgICBzbGljZUhlaWdodCA9IGhlaWdodDsK
LQotICAgICAgaWYgKHVzZVN1cmZhY2UpIHsKLSAgICAgICAgdGV4dHVyZUxpc3RlbmVyID0gbmV3
IFRleHR1cmVMaXN0ZW5lcihzdXJmYWNlVGV4dHVyZUhlbHBlcik7Ci0gICAgICAgIHN1cmZhY2Ug
PSBuZXcgU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsK
LSAgICAgIH0KLQotICAgICAgTWVkaWFGb3JtYXQgZm9ybWF0ID0gTWVkaWFGb3JtYXQuY3JlYXRl
VmlkZW9Gb3JtYXQobWltZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICBpZiAoIXVzZVN1cmZhY2Up
IHsKLSAgICAgICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1B
VCwgcHJvcGVydGllcy5jb2xvckZvcm1hdCk7Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFH
LCAiICBGb3JtYXQ6ICIgKyBmb3JtYXQpOwotICAgICAgbWVkaWFDb2RlYyA9IE1lZGlhQ29kZWNW
aWRlb0VuY29kZXIuY3JlYXRlQnlDb2RlY05hbWUocHJvcGVydGllcy5jb2RlY05hbWUpOwotICAg
ICAgaWYgKG1lZGlhQ29kZWMgPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fu
IG5vdCBjcmVhdGUgbWVkaWEgZGVjb2RlciIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICB9Ci0gICAgICBtZWRpYUNvZGVjLmNvbmZpZ3VyZShmb3JtYXQsIHN1cmZhY2UsIG51bGwsIDAp
OwotICAgICAgbWVkaWFDb2RlYy5zdGFydCgpOwotCi0gICAgICBjb2xvckZvcm1hdCA9IHByb3Bl
cnRpZXMuY29sb3JGb3JtYXQ7Ci0gICAgICBvdXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRP
dXRwdXRCdWZmZXJzKCk7Ci0gICAgICBpbnB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldElucHV0
QnVmZmVycygpOwotICAgICAgZGVjb2RlU3RhcnRUaW1lTXMuY2xlYXIoKTsKLSAgICAgIGhhc0Rl
Y29kZWRGaXJzdEZyYW1lID0gZmFsc2U7Ci0gICAgICBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZm
ZXJzLmNsZWFyKCk7Ci0gICAgICBkcm9wcGVkRnJhbWVzID0gMDsKLSAgICAgIExvZ2dpbmcuZChU
QUcsCi0gICAgICAgICAgIklucHV0IGJ1ZmZlcnM6ICIgKyBpbnB1dEJ1ZmZlcnMubGVuZ3RoICsg
Ii4gT3V0cHV0IGJ1ZmZlcnM6ICIgKyBvdXRwdXRCdWZmZXJzLmxlbmd0aCk7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAg
TG9nZ2luZy5lKFRBRywgImluaXREZWNvZGUgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVzZXRzIHRoZSBkZWNvZGVyIHNvIGl0IGNhbiBzdGFy
dCBkZWNvZGluZyBmcmFtZXMgd2l0aCBuZXcgcmVzb2x1dGlvbi4KLSAgLy8gRmx1c2hlcyBNZWRp
YUNvZGVjIGFuZCBjbGVhcnMgZGVjb2RlciBvdXRwdXQgYnVmZmVycy4KLSAgcHJpdmF0ZSB2b2lk
IHJlc2V0KGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFk
ID09IG51bGwgfHwgbWVkaWFDb2RlYyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJlc2V0IGNhbGwgZm9yIG5vbi1pbml0aWFsaXplZCBkZWNv
ZGVyLiIpOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZXNldDogIiArIHdpZHRo
ICsgIiB4ICIgKyBoZWlnaHQpOwotCi0gICAgbWVkaWFDb2RlYy5mbHVzaCgpOwotCi0gICAgdGhp
cy53aWR0aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlY29kZVN0
YXJ0VGltZU1zLmNsZWFyKCk7Ci0gICAgZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5jbGVh
cigpOwotICAgIGhhc0RlY29kZWRGaXJzdEZyYW1lID0gZmFsc2U7Ci0gICAgZHJvcHBlZEZyYW1l
cyA9IDA7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBMb2dnaW5nLmQo
VEFHLCAiSmF2YSByZWxlYXNlRGVjb2Rlci4gVG90YWwgbnVtYmVyIG9mIGRyb3BwZWQgZnJhbWVz
OiAiICsgZHJvcHBlZEZyYW1lcyk7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLQot
ICAgIC8vIFJ1biBNZWRpYWNvZGVjIHN0b3AoKSBhbmQgcmVsZWFzZSgpIG9uIHNlcGFyYXRlIHRo
cmVhZCBzaW5jZSBzb21ldGltZQotICAgIC8vIE1lZGlhY29kZWMuc3RvcCgpIG1heSBoYW5nLgot
ICAgIGZpbmFsIENvdW50RG93bkxhdGNoIHJlbGVhc2VEb25lID0gbmV3IENvdW50RG93bkxhdGNo
KDEpOwotCi0gICAgUnVubmFibGUgcnVuTWVkaWFDb2RlY1JlbGVhc2UgPSBuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRGVjb2RlciBvbiBy
ZWxlYXNlIHRocmVhZCIpOwotICAgICAgICAgIG1lZGlhQ29kZWMuc3RvcCgpOwotICAgICAgICAg
IG1lZGlhQ29kZWMucmVsZWFzZSgpOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJl
bGVhc2VEZWNvZGVyIG9uIHJlbGVhc2UgdGhyZWFkIGRvbmUiKTsKLSAgICAgICAgfSBjYXRjaCAo
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZGVjb2RlciBy
ZWxlYXNlIGZhaWxlZCIsIGUpOwotICAgICAgICB9Ci0gICAgICAgIHJlbGVhc2VEb25lLmNvdW50
RG93bigpOwotICAgICAgfQotICAgIH07Ci0gICAgbmV3IFRocmVhZChydW5NZWRpYUNvZGVjUmVs
ZWFzZSkuc3RhcnQoKTsKLQotICAgIGlmICghVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGli
bHkocmVsZWFzZURvbmUsIE1FRElBX0NPREVDX1JFTEVBU0VfVElNRU9VVF9NUykpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJNZWRpYSBkZWNvZGVyIHJlbGVhc2UgdGltZW91dCIpOwotICAgICAg
Y29kZWNFcnJvcnMrKzsKLSAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAg
ICAgTG9nZ2luZy5lKFRBRywgIkludm9rZSBjb2RlYyBlcnJvciBjYWxsYmFjay4gRXJyb3JzOiAi
ICsgY29kZWNFcnJvcnMpOwotICAgICAgICBlcnJvckNhbGxiYWNrLm9uTWVkaWFDb2RlY1ZpZGVv
RGVjb2RlckNyaXRpY2FsRXJyb3IoY29kZWNFcnJvcnMpOwotICAgICAgfQotICAgIH0KLQotICAg
IG1lZGlhQ29kZWMgPSBudWxsOwotICAgIG1lZGlhQ29kZWNUaHJlYWQgPSBudWxsOwotICAgIHJ1
bm5pbmdJbnN0YW5jZSA9IG51bGw7Ci0gICAgaWYgKHVzZVN1cmZhY2UpIHsKLSAgICAgIHN1cmZh
Y2UucmVsZWFzZSgpOwotICAgICAgc3VyZmFjZSA9IG51bGw7Ci0gICAgICB0ZXh0dXJlTGlzdGVu
ZXIucmVsZWFzZSgpOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRGVj
b2RlciBkb25lIik7Ci0gIH0KLQotICAvLyBEZXF1ZXVlIGFuIGlucHV0IGJ1ZmZlciBhbmQgcmV0
dXJuIGl0cyBpbmRleCwgLTEgaWYgbm8gaW5wdXQgYnVmZmVyIGlzCi0gIC8vIGF2YWlsYWJsZSwg
b3IgLTIgaWYgdGhlIGNvZGVjIGlzIG5vIGxvbmdlciBvcGVyYXRpdmUuCi0gIHByaXZhdGUgaW50
IGRlcXVldWVJbnB1dEJ1ZmZlcigpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwot
ICAgIHRyeSB7Ci0gICAgICByZXR1cm4gbWVkaWFDb2RlYy5kZXF1ZXVlSW5wdXRCdWZmZXIoREVR
VUVVRV9JTlBVVF9USU1FT1VUKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24g
ZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImRlcXVldWVJbnRwdXRCdWZmZXIgZmFpbGVkIiwg
ZSk7Ci0gICAgICByZXR1cm4gLTI7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHF1
ZXVlSW5wdXRCdWZmZXIoaW50IGlucHV0QnVmZmVySW5kZXgsIGludCBzaXplLCBsb25nIHByZXNl
bnRhdGlvblRpbWVTdGFtVXMsCi0gICAgICBsb25nIHRpbWVTdGFtcE1zLCBsb25nIG50cFRpbWVT
dGFtcCkgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAg
IGlucHV0QnVmZmVyc1tpbnB1dEJ1ZmZlckluZGV4XS5wb3NpdGlvbigwKTsKLSAgICAgIGlucHV0
QnVmZmVyc1tpbnB1dEJ1ZmZlckluZGV4XS5saW1pdChzaXplKTsKLSAgICAgIGRlY29kZVN0YXJ0
VGltZU1zLmFkZCgKLSAgICAgICAgICBuZXcgVGltZVN0YW1wcyhTeXN0ZW1DbG9jay5lbGFwc2Vk
UmVhbHRpbWUoKSwgdGltZVN0YW1wTXMsIG50cFRpbWVTdGFtcCkpOwotICAgICAgbWVkaWFDb2Rl
Yy5xdWV1ZUlucHV0QnVmZmVyKGlucHV0QnVmZmVySW5kZXgsIDAsIHNpemUsIHByZXNlbnRhdGlv
blRpbWVTdGFtVXMsIDApOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoSWxsZWdh
bFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZWNvZGUgZmFpbGVk
IiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgY2xhc3MgVGltZVN0YW1wcyB7Ci0gICAgcHVibGljIFRpbWVTdGFtcHMobG9uZyBkZWNvZGVT
dGFydFRpbWVNcywgbG9uZyB0aW1lU3RhbXBNcywgbG9uZyBudHBUaW1lU3RhbXBNcykgewotICAg
ICAgdGhpcy5kZWNvZGVTdGFydFRpbWVNcyA9IGRlY29kZVN0YXJ0VGltZU1zOwotICAgICAgdGhp
cy50aW1lU3RhbXBNcyA9IHRpbWVTdGFtcE1zOwotICAgICAgdGhpcy5udHBUaW1lU3RhbXBNcyA9
IG50cFRpbWVTdGFtcE1zOwotICAgIH0KLSAgICAvLyBUaW1lIHdoZW4gdGhpcyBmcmFtZSB3YXMg
cXVldWVkIGZvciBkZWNvZGluZy4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgZGVjb2RlU3RhcnRU
aW1lTXM7Ci0gICAgLy8gT25seSB1c2VkIGZvciBib29ra2VlcGluZyBpbiBKYXZhLiBTdG9yZXMg
QysrIGlucHV0SW1hZ2UuX3RpbWVTdGFtcCB2YWx1ZSBmb3IgaW5wdXQgZnJhbWUuCi0gICAgcHJp
dmF0ZSBmaW5hbCBsb25nIHRpbWVTdGFtcE1zOwotICAgIC8vIE9ubHkgdXNlZCBmb3IgYm9va2tl
ZXBpbmcgaW4gSmF2YS4gU3RvcmVzIEMrKyBpbnB1dEltYWdlLm50cF90aW1lX21zXyB2YWx1ZSBm
b3IgaW5wdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIG50cFRpbWVTdGFtcE1zOwot
ICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBmb3IgZGVxdWV1ZU91dHB1dEJ1ZmZlcigpIGJlbG93
LgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWNvZGVkT3V0cHV0QnVmZmVyIHsKLSAgICBwdWJs
aWMgRGVjb2RlZE91dHB1dEJ1ZmZlcihpbnQgaW5kZXgsIGludCBvZmZzZXQsIGludCBzaXplLCBs
b25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zLAotICAgICAgICBsb25nIHRpbWVTdGFtcE1zLCBs
b25nIG50cFRpbWVTdGFtcE1zLCBsb25nIGRlY29kZVRpbWUsIGxvbmcgZW5kRGVjb2RlVGltZSkg
ewotICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7
Ci0gICAgICB0aGlzLnNpemUgPSBzaXplOwotICAgICAgdGhpcy5wcmVzZW50YXRpb25UaW1lU3Rh
bXBNcyA9IHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgICAgdGhpcy50aW1lU3RhbXBNcyA9
IHRpbWVTdGFtcE1zOwotICAgICAgdGhpcy5udHBUaW1lU3RhbXBNcyA9IG50cFRpbWVTdGFtcE1z
OwotICAgICAgdGhpcy5kZWNvZGVUaW1lTXMgPSBkZWNvZGVUaW1lOwotICAgICAgdGhpcy5lbmRE
ZWNvZGVUaW1lTXMgPSBlbmREZWNvZGVUaW1lOwotICAgIH0KLQotICAgIHByaXZhdGUgZmluYWwg
aW50IGluZGV4OwotICAgIHByaXZhdGUgZmluYWwgaW50IG9mZnNldDsKLSAgICBwcml2YXRlIGZp
bmFsIGludCBzaXplOwotICAgIC8vIFByZXNlbnRhdGlvbiB0aW1lc3RhbXAgcmV0dXJuZWQgaW4g
ZGVxdWV1ZU91dHB1dEJ1ZmZlciBjYWxsLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBwcmVzZW50
YXRpb25UaW1lU3RhbXBNczsKLSAgICAvLyBDKysgaW5wdXRJbWFnZS5fdGltZVN0YW1wIHZhbHVl
IGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIHRpbWVTdGFtcE1zOwot
ICAgIC8vIEMrKyBpbnB1dEltYWdlLm50cF90aW1lX21zXyB2YWx1ZSBmb3Igb3V0cHV0IGZyYW1l
LgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBudHBUaW1lU3RhbXBNczsKLSAgICAvLyBOdW1iZXIg
b2YgbXMgaXQgdG9vayB0byBkZWNvZGUgdGhpcyBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxv
bmcgZGVjb2RlVGltZU1zOwotICAgIC8vIFN5c3RlbSB0aW1lIHdoZW4gdGhpcyBmcmFtZSBkZWNv
ZGluZyBmaW5pc2hlZC4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgZW5kRGVjb2RlVGltZU1zOwot
ICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBmb3IgZGVxdWV1ZVRleHR1cmVCdWZmZXIoKSBiZWxv
dy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVjb2RlZFRleHR1cmVCdWZmZXIgewotICAgIHBy
aXZhdGUgZmluYWwgaW50IHRleHR1cmVJRDsKLSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gdHJh
bnNmb3JtTWF0cml4OwotICAgIC8vIFByZXNlbnRhdGlvbiB0aW1lc3RhbXAgcmV0dXJuZWQgaW4g
ZGVxdWV1ZU91dHB1dEJ1ZmZlciBjYWxsLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBwcmVzZW50
YXRpb25UaW1lU3RhbXBNczsKLSAgICAvLyBDKysgaW5wdXRJbWFnZS5fdGltZVN0YW1wIHZhbHVl
IGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIHRpbWVTdGFtcE1zOwot
ICAgIC8vIEMrKyBpbnB1dEltYWdlLm50cF90aW1lX21zXyB2YWx1ZSBmb3Igb3V0cHV0IGZyYW1l
LgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBudHBUaW1lU3RhbXBNczsKLSAgICAvLyBOdW1iZXIg
b2YgbXMgaXQgdG9vayB0byBkZWNvZGUgdGhpcyBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxv
bmcgZGVjb2RlVGltZU1zOwotICAgIC8vIEludGVydmFsIGZyb20gd2hlbiB0aGUgZnJhbWUgZmlu
aXNoZWQgZGVjb2RpbmcgdW50aWwgdGhpcyBidWZmZXIgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICAv
LyBTaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSB0ZXh0dXJlLCB0aGlzIGludGVydmFsIGRlcGVuZCBv
biB0aGUgdGltZSBmcm9tIHdoZW4KLSAgICAvLyBhIGZyYW1lIGlzIGRlY29kZWQgYW5kIHByb3Zp
ZGVkIHRvIEMrKyBhbmQgdW50aWwgdGhhdCBmcmFtZSBpcyByZXR1cm5lZCB0byB0aGUgTWVkaWFD
b2RlYwotICAgIC8vIHNvIHRoYXQgdGhlIHRleHR1cmUgY2FuIGJlIHVwZGF0ZWQgd2l0aCB0aGUg
bmV4dCBkZWNvZGVkIGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBmcmFtZURlbGF5TXM7
Ci0KLSAgICAvLyBBIERlY29kZWRUZXh0dXJlQnVmZmVyIHdpdGggemVybyB8dGV4dHVyZUlEfCBo
YXMgc3BlY2lhbCBtZWFuaW5nIGFuZCByZXByZXNlbnRzIGEgZnJhbWUKLSAgICAvLyB0aGF0IHdh
cyBkcm9wcGVkLgotICAgIHB1YmxpYyBEZWNvZGVkVGV4dHVyZUJ1ZmZlcihpbnQgdGV4dHVyZUlE
LCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwKLSAgICAgICAgbG9uZyBwcmVzZW50YXRpb25UaW1l
U3RhbXBNcywgbG9uZyB0aW1lU3RhbXBNcywgbG9uZyBudHBUaW1lU3RhbXBNcywgbG9uZyBkZWNv
ZGVUaW1lTXMsCi0gICAgICAgIGxvbmcgZnJhbWVEZWxheSkgewotICAgICAgdGhpcy50ZXh0dXJl
SUQgPSB0ZXh0dXJlSUQ7Ci0gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHRyYW5zZm9ybU1h
dHJpeDsKLSAgICAgIHRoaXMucHJlc2VudGF0aW9uVGltZVN0YW1wTXMgPSBwcmVzZW50YXRpb25U
aW1lU3RhbXBNczsKLSAgICAgIHRoaXMudGltZVN0YW1wTXMgPSB0aW1lU3RhbXBNczsKLSAgICAg
IHRoaXMubnRwVGltZVN0YW1wTXMgPSBudHBUaW1lU3RhbXBNczsKLSAgICAgIHRoaXMuZGVjb2Rl
VGltZU1zID0gZGVjb2RlVGltZU1zOwotICAgICAgdGhpcy5mcmFtZURlbGF5TXMgPSBmcmFtZURl
bGF5OwotICAgIH0KLSAgfQotCi0gIC8vIFBvbGwgYmFzZWQgdGV4dHVyZSBsaXN0ZW5lci4KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGV4dHVyZUxpc3RlbmVyCi0gICAgICBpbXBsZW1lbnRzIFN1
cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgewotICAg
IHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7
Ci0gICAgLy8gfG5ld0ZyYW1lTG9ja3wgaXMgdXNlZCB0byBzeW5jaHJvbml6ZSBhcnJpdmFsIG9m
IG5ldyBmcmFtZXMgd2l0aCB3YWl0KCkvbm90aWZ5QWxsKCkuCi0gICAgcHJpdmF0ZSBmaW5hbCBP
YmplY3QgbmV3RnJhbWVMb2NrID0gbmV3IE9iamVjdCgpOwotICAgIC8vIHxidWZmZXJUb1JlbmRl
cnwgaXMgbm9uLW51bGwgd2hlbiB3YWl0aW5nIGZvciB0cmFuc2l0aW9uIGJldHdlZW4gYWRkQnVm
ZmVyVG9SZW5kZXIoKSB0bwotICAgIC8vIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAg
cHJpdmF0ZSBEZWNvZGVkT3V0cHV0QnVmZmVyIGJ1ZmZlclRvUmVuZGVyOwotICAgIHByaXZhdGUg
RGVjb2RlZFRleHR1cmVCdWZmZXIgcmVuZGVyZWRCdWZmZXI7Ci0KLSAgICBwdWJsaWMgVGV4dHVy
ZUxpc3RlbmVyKFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyKSB7Ci0g
ICAgICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0g
ICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyh0aGlzKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCBhZGRCdWZmZXJUb1JlbmRlcihEZWNvZGVkT3V0cHV0QnVmZmVyIGJ1
ZmZlcikgewotICAgICAgaWYgKGJ1ZmZlclRvUmVuZGVyICE9IG51bGwpIHsKLSAgICAgICAgTG9n
Z2luZy5lKFRBRywgIlVuZXhwZWN0ZWQgYWRkQnVmZmVyVG9SZW5kZXIoKSBjYWxsZWQgd2hpbGUg
d2FpdGluZyBmb3IgYSB0ZXh0dXJlLiIpOwotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJXYWl0aW5nIGZvciBhIHRleHR1cmUuIik7Ci0gICAgICB9Ci0gICAgICBidWZm
ZXJUb1JlbmRlciA9IGJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1dhaXRp
bmdGb3JUZXh0dXJlKCkgewotICAgICAgc3luY2hyb25pemVkIChuZXdGcmFtZUxvY2spIHsKLSAg
ICAgICAgcmV0dXJuIGJ1ZmZlclRvUmVuZGVyICE9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gQ2FsbGJhY2sgZnJvbSB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8LiBNYXkgYmUgY2FsbGVk
IG9uIGFuIGFyYml0cmFyeSB0aHJlYWQuCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25UZXh0dXJlRnJhbWVBdmFpbGFibGUoCi0gICAgICAgIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0
W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVzdGFtcE5zKSB7Ci0gICAgICBzeW5jaHJvbml6
ZWQgKG5ld0ZyYW1lTG9jaykgewotICAgICAgICBpZiAocmVuZGVyZWRCdWZmZXIgIT0gbnVsbCkg
ewotICAgICAgICAgIExvZ2dpbmcuZSgKLSAgICAgICAgICAgICAgVEFHLCAiVW5leHBlY3RlZCBv
blRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGNhbGxlZCB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgYSB0
ZXh0dXJlLiIpOwotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkFs
cmVhZHkgaG9sZGluZyBhIHRleHR1cmUuIik7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gfHRpbWVz
dGFtcE5zfCBpcyBhbHdheXMgemVybyBvbiBzb21lIEFuZHJvaWQgdmVyc2lvbnMuCi0gICAgICAg
IHJlbmRlcmVkQnVmZmVyID0gbmV3IERlY29kZWRUZXh0dXJlQnVmZmVyKG9lc1RleHR1cmVJZCwg
dHJhbnNmb3JtTWF0cml4LAotICAgICAgICAgICAgYnVmZmVyVG9SZW5kZXIucHJlc2VudGF0aW9u
VGltZVN0YW1wTXMsIGJ1ZmZlclRvUmVuZGVyLnRpbWVTdGFtcE1zLAotICAgICAgICAgICAgYnVm
ZmVyVG9SZW5kZXIubnRwVGltZVN0YW1wTXMsIGJ1ZmZlclRvUmVuZGVyLmRlY29kZVRpbWVNcywK
LSAgICAgICAgICAgIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gYnVmZmVyVG9SZW5k
ZXIuZW5kRGVjb2RlVGltZU1zKTsKLSAgICAgICAgYnVmZmVyVG9SZW5kZXIgPSBudWxsOwotICAg
ICAgICBuZXdGcmFtZUxvY2subm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8g
RGVxdWV1ZXMgYW5kIHJldHVybnMgYSBEZWNvZGVkVGV4dHVyZUJ1ZmZlciBpZiBhdmFpbGFibGUs
IG9yIG51bGwgb3RoZXJ3aXNlLgotICAgIHB1YmxpYyBEZWNvZGVkVGV4dHVyZUJ1ZmZlciBkZXF1
ZXVlVGV4dHVyZUJ1ZmZlcihpbnQgdGltZW91dE1zKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKG5l
d0ZyYW1lTG9jaykgewotICAgICAgICBpZiAocmVuZGVyZWRCdWZmZXIgPT0gbnVsbCAmJiB0aW1l
b3V0TXMgPiAwICYmIGlzV2FpdGluZ0ZvclRleHR1cmUoKSkgewotICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICBuZXdGcmFtZUxvY2sud2FpdCh0aW1lb3V0TXMpOwotICAgICAgICAgIH0gY2F0
Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhl
IGludGVycnVwdGVkIHN0YXR1cyBieSByZWludGVycnVwdGluZyB0aGUgdGhyZWFkLgotICAgICAg
ICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5pbnRlcnJ1cHQoKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgRGVjb2RlZFRleHR1cmVCdWZmZXIgcmV0dXJuZWRCdWZmZXIgPSBy
ZW5kZXJlZEJ1ZmZlcjsKLSAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBudWxsOwotICAgICAgICBy
ZXR1cm4gcmV0dXJuZWRCdWZmZXI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
cmVsZWFzZSgpIHsKLSAgICAgIC8vIFN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmco
KSB3aWxsIGJsb2NrIHVudGlsIGFueSBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGluCi0gICAg
ICAvLyBwcm9ncmVzcyBpcyBkb25lLiBUaGVyZWZvcmUsIHRoZSBjYWxsIG11c3QgYmUgb3V0c2lk
ZSBhbnkgc3luY2hyb25pemVkCi0gICAgICAvLyBzdGF0ZW1lbnQgdGhhdCBpcyBhbHNvIHVzZWQg
aW4gdGhlIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgYWJvdmUgdG8gYXZvaWQgZGVhZGxvY2tz
LgotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotICAgICAgc3lu
Y2hyb25pemVkIChuZXdGcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlcmVkQnVmZmVyICE9
IG51bGwpIHsKLSAgICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJh
bWUoKTsKLSAgICAgICAgICByZW5kZXJlZEJ1ZmZlciA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm5zIG51bGwgaWYgbm8gZGVjb2RlZCBidWZmZXIg
aXMgYXZhaWxhYmxlLCBhbmQgb3RoZXJ3aXNlIGEgRGVjb2RlZEJ5dGVCdWZmZXIuCi0gIC8vIFRo
cm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgY2FsbCBpcyBtYWRlIG9uIHRoZSB3cm9uZyB0
aHJlYWQsIGlmIGNvbG9yIGZvcm1hdCBjaGFuZ2VzIHRvIGFuCi0gIC8vIHVuc3VwcG9ydGVkIGZv
cm1hdCwgb3IgaWYgfG1lZGlhQ29kZWN8IGlzIG5vdCBpbiB0aGUgRXhlY3V0aW5nIHN0YXRlLiBU
aHJvd3MgQ29kZWNFeGNlcHRpb24KLSAgLy8gdXBvbiBjb2RlYyBlcnJvci4KLSAgcHJpdmF0ZSBE
ZWNvZGVkT3V0cHV0QnVmZmVyIGRlcXVldWVPdXRwdXRCdWZmZXIoaW50IGRlcXVldWVUaW1lb3V0
TXMpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIGlmIChkZWNvZGVTdGFy
dFRpbWVNcy5pc0VtcHR5KCkpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAvLyBE
cmFpbiB0aGUgZGVjb2RlciB1bnRpbCByZWNlaXZpbmcgYSBkZWNvZGVkIGJ1ZmZlciBvciBoaXR0
aW5nCi0gICAgLy8gTWVkaWFDb2RlYy5JTkZPX1RSWV9BR0FJTl9MQVRFUi4KLSAgICBmaW5hbCBN
ZWRpYUNvZGVjLkJ1ZmZlckluZm8gaW5mbyA9IG5ldyBNZWRpYUNvZGVjLkJ1ZmZlckluZm8oKTsK
LSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgZmluYWwgaW50IHJlc3VsdCA9Ci0gICAgICAgICAg
bWVkaWFDb2RlYy5kZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8sIFRpbWVVbml0Lk1JTExJU0VDT05E
Uy50b01pY3JvcyhkZXF1ZXVlVGltZW91dE1zKSk7Ci0gICAgICBzd2l0Y2ggKHJlc3VsdCkgewot
ICAgICAgICBjYXNlIE1lZGlhQ29kZWMuSU5GT19PVVRQVVRfQlVGRkVSU19DSEFOR0VEOgotICAg
ICAgICAgIG91dHB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldE91dHB1dEJ1ZmZlcnMoKTsKLSAg
ICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRGVjb2RlciBvdXRwdXQgYnVmZmVycyBjaGFuZ2VkOiAi
ICsgb3V0cHV0QnVmZmVycy5sZW5ndGgpOwotICAgICAgICAgIGlmIChoYXNEZWNvZGVkRmlyc3RG
cmFtZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0
ZWQgb3V0cHV0IGJ1ZmZlciBjaGFuZ2UgZXZlbnQuIik7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlhQ29kZWMuSU5GT19PVVRQVVRfRk9STUFUX0NIQU5H
RUQ6Ci0gICAgICAgICAgTWVkaWFGb3JtYXQgZm9ybWF0ID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRG
b3JtYXQoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRGVjb2RlciBmb3JtYXQgY2hhbmdl
ZDogIiArIGZvcm1hdC50b1N0cmluZygpKTsKLSAgICAgICAgICBpbnQgbmV3X3dpZHRoID0gZm9y
bWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX1dJRFRIKTsKLSAgICAgICAgICBpbnQgbmV3
X2hlaWdodCA9IGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9IRUlHSFQpOwotICAg
ICAgICAgIGlmIChoYXNEZWNvZGVkRmlyc3RGcmFtZSAmJiAobmV3X3dpZHRoICE9IHdpZHRoIHx8
IG5ld19oZWlnaHQgIT0gaGVpZ2h0KSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oIlVuZXhwZWN0ZWQgc2l6ZSBjaGFuZ2UuIENvbmZpZ3VyZWQgIiArIHdpZHRoICsg
IioiICsgaGVpZ2h0Ci0gICAgICAgICAgICAgICAgKyAiLiBOZXcgIiArIG5ld193aWR0aCArICIq
IiArIG5ld19oZWlnaHQpOwotICAgICAgICAgIH0KLSAgICAgICAgICB3aWR0aCA9IGZvcm1hdC5n
ZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9XSURUSCk7Ci0gICAgICAgICAgaGVpZ2h0ID0gZm9y
bWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0hFSUdIVCk7Ci0KLSAgICAgICAgICBpZiAo
IXVzZVN1cmZhY2UgJiYgZm9ybWF0LmNvbnRhaW5zS2V5KE1lZGlhRm9ybWF0LktFWV9DT0xPUl9G
T1JNQVQpKSB7Ci0gICAgICAgICAgICBjb2xvckZvcm1hdCA9IGZvcm1hdC5nZXRJbnRlZ2VyKE1l
ZGlhRm9ybWF0LktFWV9DT0xPUl9GT1JNQVQpOwotICAgICAgICAgICAgTG9nZ2luZy5kKFRBRywg
IkNvbG9yOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvbG9yRm9ybWF0KSk7Ci0gICAgICAg
ICAgICBpZiAoIXN1cHBvcnRlZENvbG9yTGlzdC5jb250YWlucyhjb2xvckZvcm1hdCkpIHsKLSAg
ICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm9uIHN1cHBvcnRl
ZCBjb2xvciBmb3JtYXQ6ICIgKyBjb2xvckZvcm1hdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGlmIChmb3JtYXQuY29udGFpbnNLZXkoInN0cmlkZSIpKSB7Ci0gICAg
ICAgICAgICBzdHJpZGUgPSBmb3JtYXQuZ2V0SW50ZWdlcigic3RyaWRlIik7Ci0gICAgICAgICAg
fQotICAgICAgICAgIGlmIChmb3JtYXQuY29udGFpbnNLZXkoInNsaWNlLWhlaWdodCIpKSB7Ci0g
ICAgICAgICAgICBzbGljZUhlaWdodCA9IGZvcm1hdC5nZXRJbnRlZ2VyKCJzbGljZS1oZWlnaHQi
KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkZyYW1lIHN0cmlkZSBh
bmQgc2xpY2UgaGVpZ2h0OiAiICsgc3RyaWRlICsgIiB4ICIgKyBzbGljZUhlaWdodCk7Ci0gICAg
ICAgICAgc3RyaWRlID0gTWF0aC5tYXgod2lkdGgsIHN0cmlkZSk7Ci0gICAgICAgICAgc2xpY2VI
ZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIHNsaWNlSGVpZ2h0KTsKLSAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBNZWRpYUNvZGVjLklORk9fVFJZX0FHQUlOX0xBVEVSOgotICAgICAgICAg
IHJldHVybiBudWxsOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGhhc0RlY29kZWRGaXJz
dEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICBUaW1lU3RhbXBzIHRpbWVTdGFtcHMgPSBkZWNvZGVT
dGFydFRpbWVNcy5yZW1vdmUoKTsKLSAgICAgICAgICBsb25nIGRlY29kZVRpbWVNcyA9IFN5c3Rl
bUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gdGltZVN0YW1wcy5kZWNvZGVTdGFydFRpbWVNczsK
LSAgICAgICAgICBpZiAoZGVjb2RlVGltZU1zID4gTUFYX0RFQ09ERV9USU1FX01TKSB7Ci0gICAg
ICAgICAgICBMb2dnaW5nLmUoVEFHLCAiVmVyeSBoaWdoIGRlY29kZSB0aW1lOiAiICsgZGVjb2Rl
VGltZU1zICsgIm1zIgotICAgICAgICAgICAgICAgICAgICArICIuIFEgc2l6ZTogIiArIGRlY29k
ZVN0YXJ0VGltZU1zLnNpemUoKQotICAgICAgICAgICAgICAgICAgICArICIuIE1pZ2h0IGJlIGNh
dXNlZCBieSByZXN1bWluZyBIMjY0IGRlY29kaW5nIGFmdGVyIGEgcGF1c2UuIik7Ci0gICAgICAg
ICAgICBkZWNvZGVUaW1lTXMgPSBNQVhfREVDT0RFX1RJTUVfTVM7Ci0gICAgICAgICAgfQotICAg
ICAgICAgIHJldHVybiBuZXcgRGVjb2RlZE91dHB1dEJ1ZmZlcihyZXN1bHQsIGluZm8ub2Zmc2V0
LCBpbmZvLnNpemUsCi0gICAgICAgICAgICAgIFRpbWVVbml0Lk1JQ1JPU0VDT05EUy50b01pbGxp
cyhpbmZvLnByZXNlbnRhdGlvblRpbWVVcyksIHRpbWVTdGFtcHMudGltZVN0YW1wTXMsCi0gICAg
ICAgICAgICAgIHRpbWVTdGFtcHMubnRwVGltZVN0YW1wTXMsIGRlY29kZVRpbWVNcywgU3lzdGVt
Q2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJl
dHVybnMgbnVsbCBpZiBubyBkZWNvZGVkIGJ1ZmZlciBpcyBhdmFpbGFibGUsIGFuZCBvdGhlcndp
c2UgYSBEZWNvZGVkVGV4dHVyZUJ1ZmZlci4KLSAgLy8gVGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2Vw
dGlvbiBpZiBjYWxsIGlzIG1hZGUgb24gdGhlIHdyb25nIHRocmVhZCwgaWYgY29sb3IgZm9ybWF0
IGNoYW5nZXMgdG8gYW4KLSAgLy8gdW5zdXBwb3J0ZWQgZm9ybWF0LCBvciBpZiB8bWVkaWFDb2Rl
Y3wgaXMgbm90IGluIHRoZSBFeGVjdXRpbmcgc3RhdGUuIFRocm93cyBDb2RlY0V4Y2VwdGlvbgot
ICAvLyB1cG9uIGNvZGVjIGVycm9yLiBJZiB8ZGVxdWV1ZVRpbWVvdXRNc3wgPiAwLCB0aGUgb2xk
ZXN0IGRlY29kZWQgZnJhbWUgd2lsbCBiZSBkcm9wcGVkIGlmCi0gIC8vIGEgZnJhbWUgY2FuJ3Qg
YmUgcmV0dXJuZWQuCi0gIHByaXZhdGUgRGVjb2RlZFRleHR1cmVCdWZmZXIgZGVxdWV1ZVRleHR1
cmVCdWZmZXIoaW50IGRlcXVldWVUaW1lb3V0TXMpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1Ro
cmVhZCgpOwotICAgIGlmICghdXNlU3VyZmFjZSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiZGVxdWV1ZVRleHR1cmUoKSBjYWxsZWQgZm9yIGJ5dGUgYnVmZmVyIGRl
Y29kaW5nLiIpOwotICAgIH0KLSAgICBEZWNvZGVkT3V0cHV0QnVmZmVyIG91dHB1dEJ1ZmZlciA9
IGRlcXVldWVPdXRwdXRCdWZmZXIoZGVxdWV1ZVRpbWVvdXRNcyk7Ci0gICAgaWYgKG91dHB1dEJ1
ZmZlciAhPSBudWxsKSB7Ci0gICAgICBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLmFkZChv
dXRwdXRCdWZmZXIpOwotICAgIH0KLQotICAgIE1heWJlUmVuZGVyRGVjb2RlZFRleHR1cmVCdWZm
ZXIoKTsKLSAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyB0ZXh0dXJlIHJlYWR5IG5vdyBieSB3YWl0
aW5nIG1heCB8ZGVxdWV1ZVRpbWVvdXRNc3wuCi0gICAgRGVjb2RlZFRleHR1cmVCdWZmZXIgcmVu
ZGVyZWRCdWZmZXIgPSB0ZXh0dXJlTGlzdGVuZXIuZGVxdWV1ZVRleHR1cmVCdWZmZXIoZGVxdWV1
ZVRpbWVvdXRNcyk7Ci0gICAgaWYgKHJlbmRlcmVkQnVmZmVyICE9IG51bGwpIHsKLSAgICAgIE1h
eWJlUmVuZGVyRGVjb2RlZFRleHR1cmVCdWZmZXIoKTsKLSAgICAgIHJldHVybiByZW5kZXJlZEJ1
ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAoKGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuc2l6
ZSgpCi0gICAgICAgICAgICAgICAgPj0gTWF0aC5taW4oTUFYX1FVRVVFRF9PVVRQVVRCVUZGRVJT
LCBvdXRwdXRCdWZmZXJzLmxlbmd0aCkKLSAgICAgICAgICAgIHx8IChkZXF1ZXVlVGltZW91dE1z
ID4gMCAmJiAhZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5pc0VtcHR5KCkpKSkgewotICAg
ICAgKytkcm9wcGVkRnJhbWVzOwotICAgICAgLy8gRHJvcCB0aGUgb2xkZXN0IGZyYW1lIHN0aWxs
IGluIGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuCi0gICAgICAvLyBUaGUgb2xkZXN0IGZy
YW1lIGlzIG93bmVkIGJ5IHx0ZXh0dXJlTGlzdGVuZXJ8IGFuZCBjYW4ndCBiZSBkcm9wcGVkIHNp
bmNlCi0gICAgICAvLyBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIgaGFzIGFscmVhZHkg
YmVlbiBjYWxsZWQuCi0gICAgICBmaW5hbCBEZWNvZGVkT3V0cHV0QnVmZmVyIGRyb3BwZWRGcmFt
ZSA9IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMucmVtb3ZlKCk7Ci0gICAgICBpZiAoZGVx
dWV1ZVRpbWVvdXRNcyA+IDApIHsKLSAgICAgICAgLy8gVE9ETyhwZXJraik6IFJlLWFkZCB0aGUg
YmVsb3cgbG9nIHdoZW4gVmlkZW9SZW5kZXJHVUkgaGFzIGJlZW4gcmVtb3ZlZCBvciBmaXhlZCB0
bwotICAgICAgICAvLyByZXR1cm4gdGhlIG9uZSBhbmQgb25seSB0ZXh0dXJlIGV2ZW4gaWYgaXQg
ZG9lcyBub3QgcmVuZGVyLgotICAgICAgICBMb2dnaW5nLncoVEFHLCAiRHJhaW5pbmcgZGVjb2Rl
ci4gRHJvcHBpbmcgZnJhbWUgd2l0aCBUUzogIgotICAgICAgICAgICAgICAgICsgZHJvcHBlZEZy
YW1lLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zICsgIi4gVG90YWwgbnVtYmVyIG9mIGRyb3BwZWQg
ZnJhbWVzOiAiCi0gICAgICAgICAgICAgICAgKyBkcm9wcGVkRnJhbWVzKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJUb28gbWFueSBvdXRwdXQgYnVmZmVycyAiICsg
ZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5zaXplKCkKLSAgICAgICAgICAgICAgICArICIu
IERyb3BwaW5nIGZyYW1lIHdpdGggVFM6ICIgKyBkcm9wcGVkRnJhbWUucHJlc2VudGF0aW9uVGlt
ZVN0YW1wTXMKLSAgICAgICAgICAgICAgICArICIuIFRvdGFsIG51bWJlciBvZiBkcm9wcGVkIGZy
YW1lczogIiArIGRyb3BwZWRGcmFtZXMpOwotICAgICAgfQotCi0gICAgICBtZWRpYUNvZGVjLnJl
bGVhc2VPdXRwdXRCdWZmZXIoZHJvcHBlZEZyYW1lLmluZGV4LCBmYWxzZSAvKiByZW5kZXIgKi8p
OwotICAgICAgcmV0dXJuIG5ldyBEZWNvZGVkVGV4dHVyZUJ1ZmZlcigwLCBudWxsLCBkcm9wcGVk
RnJhbWUucHJlc2VudGF0aW9uVGltZVN0YW1wTXMsCi0gICAgICAgICAgZHJvcHBlZEZyYW1lLnRp
bWVTdGFtcE1zLCBkcm9wcGVkRnJhbWUubnRwVGltZVN0YW1wTXMsIGRyb3BwZWRGcmFtZS5kZWNv
ZGVUaW1lTXMsCi0gICAgICAgICAgU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBkcm9w
cGVkRnJhbWUuZW5kRGVjb2RlVGltZU1zKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgTWF5YmVSZW5kZXJEZWNvZGVkVGV4dHVyZUJ1ZmZlcigpIHsKLSAg
ICBpZiAoZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5pc0VtcHR5KCkgfHwgdGV4dHVyZUxp
c3RlbmVyLmlzV2FpdGluZ0ZvclRleHR1cmUoKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBHZXQgdGhlIGZpcnN0IGZyYW1lIGluIHRoZSBxdWV1ZSBhbmQgcmVuZGVyIHRvIHRoZSBk
ZWNvZGVyIG91dHB1dCBzdXJmYWNlLgotICAgIGZpbmFsIERlY29kZWRPdXRwdXRCdWZmZXIgYnVm
ZmVyID0gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5yZW1vdmUoKTsKLSAgICB0ZXh0dXJl
TGlzdGVuZXIuYWRkQnVmZmVyVG9SZW5kZXIoYnVmZmVyKTsKLSAgICBtZWRpYUNvZGVjLnJlbGVh
c2VPdXRwdXRCdWZmZXIoYnVmZmVyLmluZGV4LCB0cnVlIC8qIHJlbmRlciAqLyk7Ci0gIH0KLQot
ICAvLyBSZWxlYXNlIGEgZGVxdWV1ZWQgb3V0cHV0IGJ5dGUgYnVmZmVyIGJhY2sgdG8gdGhlIGNv
ZGVjIGZvciByZS11c2UuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IKLSAgLy8gbm9uLXN1cmZh
Y2UgZGVjb2RpbmcuCi0gIC8vIFRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGNh
bGwgaXMgbWFkZSBvbiB0aGUgd3JvbmcgdGhyZWFkLCBpZiBjb2RlYyBpcyBjb25maWd1cmVkCi0g
IC8vIGZvciBzdXJmYWNlIGRlY29kaW5nLCBvciBpZiB8bWVkaWFDb2RlY3wgaXMgbm90IGluIHRo
ZSBFeGVjdXRpbmcgc3RhdGUuIFRocm93cwotICAvLyBNZWRpYUNvZGVjLkNvZGVjRXhjZXB0aW9u
IHVwb24gY29kZWMgZXJyb3IuCi0gIHByaXZhdGUgdm9pZCByZXR1cm5EZWNvZGVkT3V0cHV0QnVm
ZmVyKGludCBpbmRleCkKLSAgICAgIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sIE1lZGlh
Q29kZWMuQ29kZWNFeGNlcHRpb24gewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0g
ICAgaWYgKHVzZVN1cmZhY2UpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRp
b24oInJldHVybkRlY29kZWRPdXRwdXRCdWZmZXIoKSBjYWxsZWQgZm9yIHN1cmZhY2UgZGVjb2Rp
bmcuIik7Ci0gICAgfQotICAgIG1lZGlhQ29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihpbmRleCwg
ZmFsc2UgLyogcmVuZGVyICovKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRp
YUNvZGVjVmlkZW9FbmNvZGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9N
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
NzM4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRp
YS5NZWRpYUNvZGVjOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm87Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mby5Db2RlY0NhcGFiaWxpdGllczsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNMaXN0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVk
aWFGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQu
b3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3
LlN1cmZhY2U7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRp
bC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxp
c3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5D
b3VudERvd25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQot
Ly8gSmF2YS1zaWRlIG9mIHBlZXJjb25uZWN0aW9uX2puaS5jYzpNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyLgotLy8gVGhpcyBjbGFzcyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIEph
dmEgUGVlckNvbm5lY3Rpb24gQVBJLgotQFRhcmdldEFwaSgxOSkKLUBTdXBwcmVzc1dhcm5pbmdz
KCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciB7Ci0g
IC8vIFRoaXMgY2xhc3MgaXMgY29uc3RydWN0ZWQsIG9wZXJhdGVkLCBhbmQgZGVzdHJveWVkIGJ5
IGl0cyBDKysgaW5jYXJuYXRpb24sCi0gIC8vIHNvIHRoZSBjbGFzcyBhbmQgaXRzIG1ldGhvZHMg
aGF2ZSBub24tcHVibGljIHZpc2liaWxpdHkuICBUaGUgQVBJIHRoaXMKLSAgLy8gY2xhc3MgZXhw
b3NlcyBhaW1zIHRvIG1pbWljIHRoZSB3ZWJydGM6OlZpZGVvRW5jb2RlciBBUEkgYXMgY2xvc2Vs
eSBhcwotICAvLyBwb3NzaWJseSB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHRyYW5zbGF0aW9u
IHdvcmsgbmVjZXNzYXJ5LgotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAi
TWVkaWFDb2RlY1ZpZGVvRW5jb2RlciI7Ci0KLSAgLy8gVHJhY2tzIHdlYnJ0Yzo6VmlkZW9Db2Rl
Y1R5cGUuCi0gIHB1YmxpYyBlbnVtIFZpZGVvQ29kZWNUeXBlIHsgVklERU9fQ09ERUNfVlA4LCBW
SURFT19DT0RFQ19WUDksIFZJREVPX0NPREVDX0gyNjQgfQotCi0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBNRURJQV9DT0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMgPSA1MDAwOyAvLyBUaW1lb3V0
IGZvciBjb2RlYyByZWxlYXNpbmcuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVFVRVVF
X1RJTUVPVVQgPSAwOyAvLyBOb24tYmxvY2tpbmcsIG5vIHdhaXQuCi0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBCSVRSQVRFX0FESlVTVE1FTlRfRlBTID0gMzA7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBNQVhJTVVNX0lOSVRJQUxfRlBTID0gMzA7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGRvdWJsZSBCSVRSQVRFX0NPUlJFQ1RJT05fU0VDID0gMy4wOwotICAvLyBNYXhpbXVtIGJp
dHJhdGUgY29ycmVjdGlvbiBzY2FsZSAtIG5vIG1vcmUgdGhhbiAyIHRpbWVzLgotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBkb3VibGUgQklUUkFURV9DT1JSRUNUSU9OX01BWF9TQ0FMRSA9IDI7Ci0g
IC8vIEFtb3VudCBvZiBjb3JyZWN0aW9uIHN0ZXBzIHRvIHJlYWNoIGNvcnJlY3Rpb24gbWF4aW11
bSBzY2FsZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFJBVEVfQ09SUkVDVElPTl9T
VEVQUyA9IDEwOwotCi0gIC8vIEFjdGl2ZSBydW5uaW5nIGVuY29kZXIgaW5zdGFuY2UuIFNldCBp
biBpbml0RW5jb2RlKCkgKGNhbGxlZCBmcm9tIG5hdGl2ZSBjb2RlKQotICAvLyBhbmQgcmVzZXQg
dG8gbnVsbCBpbiByZWxlYXNlKCkgY2FsbC4KLSAgcHJpdmF0ZSBzdGF0aWMgTWVkaWFDb2RlY1Zp
ZGVvRW5jb2RlciBydW5uaW5nSW5zdGFuY2UgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBNZWRp
YUNvZGVjVmlkZW9FbmNvZGVyRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrID0gbnVsbDsKLSAg
cHJpdmF0ZSBzdGF0aWMgaW50IGNvZGVjRXJyb3JzID0gMDsKLSAgLy8gTGlzdCBvZiBkaXNhYmxl
ZCBjb2RlYyB0eXBlcyAtIGNhbiBiZSBzZXQgZnJvbSBhcHBsaWNhdGlvbi4KLSAgcHJpdmF0ZSBz
dGF0aWMgU2V0PFN0cmluZz4gaHdFbmNvZGVyRGlzYWJsZWRUeXBlcyA9IG5ldyBIYXNoU2V0PFN0
cmluZz4oKTsKLQotICBwcml2YXRlIFRocmVhZCBtZWRpYUNvZGVjVGhyZWFkOwotICBwcml2YXRl
IE1lZGlhQ29kZWMgbWVkaWFDb2RlYzsKLSAgcHJpdmF0ZSBCeXRlQnVmZmVyW10gb3V0cHV0QnVm
ZmVyczsKLSAgcHJpdmF0ZSBFZ2xCYXNlMTQgZWdsQmFzZTsKLSAgcHJpdmF0ZSBpbnQgd2lkdGg7
Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAgcHJpdmF0ZSBTdXJmYWNlIGlucHV0U3VyZmFjZTsK
LSAgcHJpdmF0ZSBHbFJlY3REcmF3ZXIgZHJhd2VyOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBWUDhfTUlNRV9UWVBFID0gInZpZGVvL3gtdm5kLm9uMi52cDgiOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVlA5X01JTUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA5
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEgyNjRfTUlNRV9UWVBFID0gInZpZGVv
L2F2YyI7Ci0KLSAgLy8gVHlwZSBvZiBiaXRyYXRlIGFkanVzdG1lbnQgZm9yIHZpZGVvIGVuY29k
ZXIuCi0gIHB1YmxpYyBlbnVtIEJpdHJhdGVBZGp1c3RtZW50VHlwZSB7Ci0gICAgLy8gTm8gYWRq
dXN0bWVudCAtIHZpZGVvIGVuY29kZXIgaGFzIG5vIGtub3duIGJpdHJhdGUgcHJvYmxlbS4KLSAg
ICBOT19BREpVU1RNRU5ULAotICAgIC8vIEZyYW1lcmF0ZSBiYXNlZCBiaXRyYXRlIGFkanVzdG1l
bnQgaXMgcmVxdWlyZWQgLSBIVyBlbmNvZGVyIGRvZXMgbm90IHVzZSBmcmFtZQotICAgIC8vIHRp
bWVzdGFtcHMgdG8gY2FsY3VsYXRlIGZyYW1lIGJpdHJhdGUgYnVkZ2V0IGFuZCBpbnN0ZWFkIGlz
IHJlbHlpbmcgb24gaW5pdGlhbAotICAgIC8vIGZwcyBjb25maWd1cmF0aW9uIGFzc3VtaW5nIHRo
YXQgYWxsIGZyYW1lcyBhcmUgY29taW5nIGF0IGZpeGVkIGluaXRpYWwgZnJhbWUgcmF0ZS4KLSAg
ICBGUkFNRVJBVEVfQURKVVNUTUVOVCwKLSAgICAvLyBEeW5hbWljIGJpdHJhdGUgYWRqdXN0bWVu
dCBpcyByZXF1aXJlZCAtIEhXIGVuY29kZXIgdXNlZCBmcmFtZSB0aW1lc3RhbXBzLCBidXQgYWN0
dWFsCi0gICAgLy8gYml0cmF0ZSBkZXZpYXRlcyB0b28gbXVjaCBmcm9tIHRoZSB0YXJnZXQgdmFs
dWUuCi0gICAgRFlOQU1JQ19BREpVU1RNRU5UCi0gIH0KLQotICAvLyBDbGFzcyBkZXNjcmliaW5n
IHN1cHBvcnRlZCBtZWRpYSBjb2RlYyBwcm9wZXJ0aWVzLgotICBwcml2YXRlIHN0YXRpYyBjbGFz
cyBNZWRpYUNvZGVjUHJvcGVydGllcyB7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBjb2RlY1By
ZWZpeDsKLSAgICAvLyBNaW5pbXVtIEFuZHJvaWQgU0RLIHJlcXVpcmVkIGZvciB0aGlzIGNvZGVj
IHRvIGJlIHVzZWQuCi0gICAgcHVibGljIGZpbmFsIGludCBtaW5TZGs7Ci0gICAgLy8gRmxhZyBp
ZiBlbmNvZGVyIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IHVzZSBmcmFtZSB0aW1lc3RhbXBzIHRv
IGNhbGN1bGF0ZSBmcmFtZSBiaXRyYXRlCi0gICAgLy8gYnVkZ2V0IGFuZCBpbnN0ZWFkIGlzIHJl
bHlpbmcgb24gaW5pdGlhbCBmcHMgY29uZmlndXJhdGlvbiBhc3N1bWluZyB0aGF0IGFsbCBmcmFt
ZXMgYXJlCi0gICAgLy8gY29taW5nIGF0IGZpeGVkIGluaXRpYWwgZnJhbWUgcmF0ZS4gQml0cmF0
ZSBhZGp1c3RtZW50IGlzIHJlcXVpcmVkIGZvciB0aGlzIGNhc2UuCi0gICAgcHVibGljIGZpbmFs
IEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0KLSAgICBNZWRp
YUNvZGVjUHJvcGVydGllcygKLSAgICAgICAgU3RyaW5nIGNvZGVjUHJlZml4LCBpbnQgbWluU2Rr
LCBCaXRyYXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlKSB7Ci0gICAgICB0
aGlzLmNvZGVjUHJlZml4ID0gY29kZWNQcmVmaXg7Ci0gICAgICB0aGlzLm1pblNkayA9IG1pblNk
azsKLSAgICAgIHRoaXMuYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gYml0cmF0ZUFkanVzdG1lbnRU
eXBlOwotICAgIH0KLSAgfQotCi0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIEhXIFZQOCBlbmNvZGVy
cy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgcWNvbVZwOEh3
UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVgucWNvbS4i
LCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FE
SlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllcyBl
eHlub3NWcDhId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAi
T01YLkV4eW5vcy4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLk0sIEJpdHJhdGVBZGp1c3RtZW50VHlw
ZS5EWU5BTUlDX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZWRpYUNvZGVj
UHJvcGVydGllc1tdIHZwOEh3TGlzdCA9Ci0gICAgICBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXNb
XSB7cWNvbVZwOEh3UHJvcGVydGllcywgZXh5bm9zVnA4SHdQcm9wZXJ0aWVzfTsKLQotICAvLyBM
aXN0IG9mIHN1cHBvcnRlZCBIVyBWUDkgZW5jb2RlcnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IE1lZGlhQ29kZWNQcm9wZXJ0aWVzIHFjb21WcDlId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2Rl
Y1Byb3BlcnRpZXMoCi0gICAgICAiT01YLnFjb20uIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5NLCBC
aXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGV4eW5vc1ZwOUh3UHJvcGVydGllcyA9IG5ldyBNZWRp
YUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVguRXh5bm9zLiIsIEJ1aWxkLlZFUlNJT05fQ09E
RVMuTSwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHZwOUh3TGlzdCA9Ci0gICAgICBuZXcg
TWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB7cWNvbVZwOUh3UHJvcGVydGllcywgZXh5bm9zVnA5SHdQ
cm9wZXJ0aWVzfTsKLQotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBILjI2NCBlbmNvZGVycy4K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgcWNvbUgyNjRId1By
b3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAiT01YLnFjb20uIiwg
QnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQsIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpV
U1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgZXh5
bm9zSDI2NEh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJP
TVguRXh5bm9zLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1AsIEJpdHJhdGVBZGp1c3Rt
ZW50VHlwZS5GUkFNRVJBVEVfQURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1l
ZGlhQ29kZWNQcm9wZXJ0aWVzW10gaDI2NEh3TGlzdCA9Ci0gICAgICBuZXcgTWVkaWFDb2RlY1By
b3BlcnRpZXNbXSB7cWNvbUgyNjRId1Byb3BlcnRpZXMsIGV4eW5vc0gyNjRId1Byb3BlcnRpZXN9
OwotCi0gIC8vIExpc3Qgb2YgZGV2aWNlcyB3aXRoIHBvb3IgSC4yNjQgZW5jb2RlciBxdWFsaXR5
LgotICAvLyBIVyBILjI2NCBlbmNvZGVyIG9uIGJlbG93IGRldmljZXMgaGFzIHBvb3IgYml0cmF0
ZSBjb250cm9sIC0gYWN0dWFsCi0gIC8vIGJpdHJhdGVzIGRldmlhdGVzIGEgbG90IGZyb20gdGhl
IHRhcmdldCB2YWx1ZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gSDI2NF9IV19F
WENFUFRJT05fTU9ERUxTID0KLSAgICAgIG5ldyBTdHJpbmdbXSB7IlNBTVNVTkctU0dILUkzMzci
LCAiTmV4dXMgNyIsICJOZXh1cyA0In07Ci0KLSAgLy8gQml0cmF0ZSBtb2RlcyAtIHNob3VsZCBi
ZSBpbiBzeW5jIHdpdGggT01YX1ZJREVPX0NPTlRST0xSQVRFVFlQRSBkZWZpbmVkCi0gIC8vIGlu
IE9NWF9WaWRlby5oCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSURFT19Db250cm9sUmF0
ZUNvbnN0YW50ID0gMjsKLSAgLy8gTlYxMiBjb2xvciBmb3JtYXQgc3VwcG9ydGVkIGJ5IFFDT00g
Y29kZWMsIGJ1dCBub3QgZGVjbGFyZWQgaW4gTWVkaWFDb2RlYyAtCi0gIC8vIHNlZSAvaGFyZHdh
cmUvcWNvbS9tZWRpYS9tbS1jb3JlL2luYy9PTVhfUUNPTUV4dG5zLmgKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9STUFUWVVWNDIwUGFja2VkU2VtaVBsYW5hcjMybSA9
IDB4N0ZBMzBDMDQ7Ci0gIC8vIEFsbG93YWJsZSBjb2xvciBmb3JtYXRzIHN1cHBvcnRlZCBieSBj
b2RlYyAtIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dFtdIHN1cHBvcnRlZENvbG9yTGlzdCA9IHtDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRZ
VVY0MjBQbGFuYXIsCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRZVVY0MjBT
ZW1pUGxhbmFyLAotICAgICAgQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfUUNPTV9Gb3JtYXRZVVY0
MjBTZW1pUGxhbmFyLAotICAgICAgQ09MT1JfUUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1pUGxh
bmFyMzJtfTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gc3VwcG9ydGVkU3VyZmFjZUNv
bG9yTGlzdCA9IHtDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRTdXJmYWNlfTsKLSAgcHJp
dmF0ZSBWaWRlb0NvZGVjVHlwZSB0eXBlOwotICBwcml2YXRlIGludCBjb2xvckZvcm1hdDsgLy8g
VXNlZCBieSBuYXRpdmUgY29kZS4KLQotICAvLyBWYXJpYWJsZXMgdXNlZCBmb3IgZHluYW1pYyBi
aXRyYXRlIGFkanVzdG1lbnQuCi0gIHByaXZhdGUgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJh
dGVBZGp1c3RtZW50VHlwZSA9IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UOwot
ICBwcml2YXRlIGRvdWJsZSBiaXRyYXRlQWNjdW11bGF0b3I7Ci0gIHByaXZhdGUgZG91YmxlIGJp
dHJhdGVBY2N1bXVsYXRvck1heDsKLSAgcHJpdmF0ZSBkb3VibGUgYml0cmF0ZU9ic2VydmF0aW9u
VGltZU1zOwotICBwcml2YXRlIGludCBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwOwotICBwcml2
YXRlIGludCB0YXJnZXRCaXRyYXRlQnBzOwotICBwcml2YXRlIGludCB0YXJnZXRGcHM7Ci0KLSAg
Ly8gU1BTIGFuZCBQUFMgTkFMcyAoQ29uZmlnIGZyYW1lKSBmb3IgSC4yNjQuCi0gIHByaXZhdGUg
Qnl0ZUJ1ZmZlciBjb25maWdEYXRhID0gbnVsbDsKLQotICAvLyBNZWRpYUNvZGVjIGVycm9yIGhh
bmRsZXIgLSBpbnZva2VkIHdoZW4gY3JpdGljYWwgZXJyb3IgaGFwcGVucyB3aGljaCBtYXkgcHJl
dmVudAotICAvLyBmdXJ0aGVyIHVzZSBvZiBtZWRpYSBjb2RlYyBBUEkuIE5vdyBpdCBtZWFucyB0
aGF0IG9uZSBvZiBtZWRpYSBjb2RlYyBpbnN0YW5jZXMKLSAgLy8gaXMgaGFuZ2luZyBhbmQgY2Fu
IG5vIGxvbmdlciBiZSB1c2VkIGluIHRoZSBuZXh0IGNhbGwuCi0gIHB1YmxpYyBzdGF0aWMgaW50
ZXJmYWNlIE1lZGlhQ29kZWNWaWRlb0VuY29kZXJFcnJvckNhbGxiYWNrIHsKLSAgICB2b2lkIG9u
TWVkaWFDb2RlY1ZpZGVvRW5jb2RlckNyaXRpY2FsRXJyb3IoaW50IGNvZGVjRXJyb3JzKTsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFcnJvckNhbGxiYWNrKE1lZGlhQ29kZWNWaWRl
b0VuY29kZXJFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spIHsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiU2V0IGVycm9yIGNhbGxiYWNrIik7Ci0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5lcnJv
ckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjazsKLSAgfQotCi0gIC8vIEZ1bmN0aW9ucyB0byBkaXNh
YmxlIEhXIGVuY29kaW5nIC0gY2FuIGJlIGNhbGxlZCBmcm9tIGFwcGxpY2F0aW9ucyBmb3IgcGxh
dGZvcm1zCi0gIC8vIHdoaWNoIGhhdmUga25vd24gSFcgZGVjb2RpbmcgcHJvYmxlbXMuCi0gIHB1
YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlVnA4SHdDb2RlYygpIHsKLSAgICBMb2dnaW5nLncoVEFH
LCAiVlA4IGVuY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RW5j
b2RlckRpc2FibGVkVHlwZXMuYWRkKFZQOF9NSU1FX1RZUEUpOwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyB2b2lkIGRpc2FibGVWcDlId0NvZGVjKCkgewotICAgIExvZ2dpbmcudyhUQUcsICJWUDkg
ZW5jb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdFbmNvZGVyRGlz
YWJsZWRUeXBlcy5hZGQoVlA5X01JTUVfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZv
aWQgZGlzYWJsZUgyNjRId0NvZGVjKCkgewotICAgIExvZ2dpbmcudyhUQUcsICJILjI2NCBlbmNv
ZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAgICBod0VuY29kZXJEaXNhYmxl
ZFR5cGVzLmFkZChIMjY0X01JTUVfVFlQRSk7Ci0gIH0KLQotICAvLyBGdW5jdGlvbnMgdG8gcXVl
cnkgaWYgSFcgZW5jb2RpbmcgaXMgc3VwcG9ydGVkLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4g
aXNWcDhId1N1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMu
Y29udGFpbnMoVlA4X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA4X01J
TUVfVFlQRSwgdnA4SHdMaXN0LCBzdXBwb3J0ZWRDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA5SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJu
ICFod0VuY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRhaW5zKFZQOV9NSU1FX1RZUEUpCi0gICAgICAg
ICYmIChmaW5kSHdFbmNvZGVyKFZQOV9NSU1FX1RZUEUsIHZwOUh3TGlzdCwgc3VwcG9ydGVkQ29s
b3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0gyNjRI
d1N1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFp
bnMoSDI2NF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVyKEgyNjRfTUlNRV9U
WVBFLCBoMjY0SHdMaXN0LCBzdXBwb3J0ZWRDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA4SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkgewot
ICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDhfTUlNRV9UWVBF
KQotICAgICAgICAmJiAoZmluZEh3RW5jb2RlcihWUDhfTUlNRV9UWVBFLCB2cDhId0xpc3QsIHN1
cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBib29sZWFuIGlzVnA5SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkgewotICAgIHJldHVybiAh
aHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDlfTUlNRV9UWVBFKQotICAgICAgICAm
JiAoZmluZEh3RW5jb2RlcihWUDlfTUlNRV9UWVBFLCB2cDlId0xpc3QsIHN1cHBvcnRlZFN1cmZh
Y2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlz
SDI2NEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRp
c2FibGVkVHlwZXMuY29udGFpbnMoSDI2NF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdF
bmNvZGVyKEgyNjRfTUlNRV9UWVBFLCBoMjY0SHdMaXN0LCBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JM
aXN0KSAhPSBudWxsKTsKLSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGZpbmRId0VuY29k
ZXIoKSBiZWxvdy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRW5jb2RlclByb3BlcnRpZXMgewot
ICAgIHB1YmxpYyBFbmNvZGVyUHJvcGVydGllcygKLSAgICAgICAgU3RyaW5nIGNvZGVjTmFtZSwg
aW50IGNvbG9yRm9ybWF0LCBCaXRyYXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRU
eXBlKSB7Ci0gICAgICB0aGlzLmNvZGVjTmFtZSA9IGNvZGVjTmFtZTsKLSAgICAgIHRoaXMuY29s
b3JGb3JtYXQgPSBjb2xvckZvcm1hdDsKLSAgICAgIHRoaXMuYml0cmF0ZUFkanVzdG1lbnRUeXBl
ID0gYml0cmF0ZUFkanVzdG1lbnRUeXBlOwotICAgIH0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5n
IGNvZGVjTmFtZTsgLy8gT3Blbk1heCBjb21wb25lbnQgbmFtZSBmb3IgSFcgY29kZWMuCi0gICAg
cHVibGljIGZpbmFsIGludCBjb2xvckZvcm1hdDsgLy8gQ29sb3IgZm9ybWF0IHN1cHBvcnRlZCBi
eSBjb2RlYy4KLSAgICBwdWJsaWMgZmluYWwgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVB
ZGp1c3RtZW50VHlwZTsgLy8gQml0cmF0ZSBhZGp1c3RtZW50IHR5cGUKLSAgfQotCi0gIHByaXZh
dGUgc3RhdGljIEVuY29kZXJQcm9wZXJ0aWVzIGZpbmRId0VuY29kZXIoCi0gICAgICBTdHJpbmcg
bWltZSwgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSBzdXBwb3J0ZWRId0NvZGVjUHJvcGVydGllcywg
aW50W10gY29sb3JMaXN0KSB7Ci0gICAgLy8gTWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzIGlzIG1p
c3NpbmcgZm9yIEpCIGFuZCBiZWxvdywgc28gYml0cmF0ZQotICAgIC8vIGNhbiBub3QgYmUgYWRq
dXN0ZWQgZHluYW1pY2FsbHkuCi0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxk
LlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAg
ICAvLyBDaGVjayBpZiBkZXZpY2UgaXMgaW4gSC4yNjQgZXhjZXB0aW9uIGxpc3QuCi0gICAgaWYg
KG1pbWUuZXF1YWxzKEgyNjRfTUlNRV9UWVBFKSkgewotICAgICAgTGlzdDxTdHJpbmc+IGV4Y2Vw
dGlvbk1vZGVscyA9IEFycmF5cy5hc0xpc3QoSDI2NF9IV19FWENFUFRJT05fTU9ERUxTKTsKLSAg
ICAgIGlmIChleGNlcHRpb25Nb2RlbHMuY29udGFpbnMoQnVpbGQuTU9ERUwpKSB7Ci0gICAgICAg
IExvZ2dpbmcudyhUQUcsICJNb2RlbDogIiArIEJ1aWxkLk1PREVMICsgIiBoYXMgYmxhY2sgbGlz
dGVkIEguMjY0IGVuY29kZXIuIik7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAg
IH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTWVkaWFDb2RlY0xpc3QuZ2V0Q29kZWNDb3Vu
dCgpOyArK2kpIHsKLSAgICAgIE1lZGlhQ29kZWNJbmZvIGluZm8gPSBudWxsOwotICAgICAgdHJ5
IHsKLSAgICAgICAgaW5mbyA9IE1lZGlhQ29kZWNMaXN0LmdldENvZGVjSW5mb0F0KGkpOwotICAg
ICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkNhbm5vdCByZXRyaWV2ZSBlbmNvZGVyIGNvZGVjIGluZm8iLCBlKTsKLSAgICAg
IH0KLSAgICAgIGlmIChpbmZvID09IG51bGwgfHwgIWluZm8uaXNFbmNvZGVyKCkpIHsKLSAgICAg
ICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgICBm
b3IgKFN0cmluZyBtaW1lVHlwZSA6IGluZm8uZ2V0U3VwcG9ydGVkVHlwZXMoKSkgewotICAgICAg
ICBpZiAobWltZVR5cGUuZXF1YWxzKG1pbWUpKSB7Ci0gICAgICAgICAgbmFtZSA9IGluZm8uZ2V0
TmFtZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAo
bmFtZSA9PSBudWxsKSB7Ci0gICAgICAgIGNvbnRpbnVlOyAvLyBObyBIVyBzdXBwb3J0IGluIHRo
aXMgY29kZWM7IHRyeSB0aGUgbmV4dCBvbmUuCi0gICAgICB9Ci0gICAgICBMb2dnaW5nLnYoVEFH
LCAiRm91bmQgY2FuZGlkYXRlIGVuY29kZXIgIiArIG5hbWUpOwotCi0gICAgICAvLyBDaGVjayBp
ZiB0aGlzIGlzIHN1cHBvcnRlZCBIVyBlbmNvZGVyLgotICAgICAgYm9vbGVhbiBzdXBwb3J0ZWRD
b2RlYyA9IGZhbHNlOwotICAgICAgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3Rt
ZW50VHlwZSA9IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UOwotICAgICAgZm9y
IChNZWRpYUNvZGVjUHJvcGVydGllcyBjb2RlY1Byb3BlcnRpZXMgOiBzdXBwb3J0ZWRId0NvZGVj
UHJvcGVydGllcykgewotICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKGNvZGVjUHJvcGVydGll
cy5jb2RlY1ByZWZpeCkpIHsKLSAgICAgICAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwg
Y29kZWNQcm9wZXJ0aWVzLm1pblNkaykgewotICAgICAgICAgICAgTG9nZ2luZy53KAotICAgICAg
ICAgICAgICAgIFRBRywgIkNvZGVjICIgKyBuYW1lICsgIiBpcyBkaXNhYmxlZCBkdWUgdG8gU0RL
IHZlcnNpb24gIiArIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCk7Ci0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGNvZGVjUHJvcGVydGllcy5iaXRyYXRlQWRq
dXN0bWVudFR5cGUgIT0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpIHsKLSAg
ICAgICAgICAgIGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9IGNvZGVjUHJvcGVydGllcy5iaXRyYXRl
QWRqdXN0bWVudFR5cGU7Ci0gICAgICAgICAgICBMb2dnaW5nLncoCi0gICAgICAgICAgICAgICAg
VEFHLCAiQ29kZWMgIiArIG5hbWUgKyAiIHJlcXVpcmVzIGJpdHJhdGUgYWRqdXN0bWVudDogIiAr
IGJpdHJhdGVBZGp1c3RtZW50VHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIHN1cHBvcnRl
ZENvZGVjID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgaWYgKCFzdXBwb3J0ZWRDb2RlYykgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQot
ICAgICAgLy8gQ2hlY2sgaWYgSFcgY29kZWMgc3VwcG9ydHMga25vd24gY29sb3IgZm9ybWF0Lgot
ICAgICAgQ29kZWNDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAg
ICAgY2FwYWJpbGl0aWVzID0gaW5mby5nZXRDYXBhYmlsaXRpZXNGb3JUeXBlKG1pbWUpOwotICAg
ICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkNhbm5vdCByZXRyaWV2ZSBlbmNvZGVyIGNhcGFiaWxpdGllcyIsIGUpOwotICAg
ICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGNvbG9yRm9ybWF0IDogY2Fw
YWJpbGl0aWVzLmNvbG9yRm9ybWF0cykgewotICAgICAgICBMb2dnaW5nLnYoVEFHLCAiICAgQ29s
b3I6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoY29sb3JGb3JtYXQpKTsKLSAgICAgIH0KLQot
ICAgICAgZm9yIChpbnQgc3VwcG9ydGVkQ29sb3JGb3JtYXQgOiBjb2xvckxpc3QpIHsKLSAgICAg
ICAgZm9yIChpbnQgY29kZWNDb2xvckZvcm1hdCA6IGNhcGFiaWxpdGllcy5jb2xvckZvcm1hdHMp
IHsKLSAgICAgICAgICBpZiAoY29kZWNDb2xvckZvcm1hdCA9PSBzdXBwb3J0ZWRDb2xvckZvcm1h
dCkgewotICAgICAgICAgICAgLy8gRm91bmQgc3VwcG9ydGVkIEhXIGVuY29kZXIuCi0gICAgICAg
ICAgICBMb2dnaW5nLmQoVEFHLCAiRm91bmQgdGFyZ2V0IGVuY29kZXIgZm9yIG1pbWUgIiArIG1p
bWUgKyAiIDogIiArIG5hbWUgKyAiLiBDb2xvcjogMHgiCi0gICAgICAgICAgICAgICAgICAgICsg
SW50ZWdlci50b0hleFN0cmluZyhjb2RlY0NvbG9yRm9ybWF0KSArICIuIEJpdHJhdGUgYWRqdXN0
bWVudDogIgotICAgICAgICAgICAgICAgICAgICArIGJpdHJhdGVBZGp1c3RtZW50VHlwZSk7Ci0g
ICAgICAgICAgICByZXR1cm4gbmV3IEVuY29kZXJQcm9wZXJ0aWVzKG5hbWUsIGNvZGVjQ29sb3JG
b3JtYXQsIGJpdHJhdGVBZGp1c3RtZW50VHlwZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxsOyAvLyBObyBIVyBlbmNvZGVyLgotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCkgewotICAgIGlmIChtZWRp
YUNvZGVjVGhyZWFkLmdldElkKCkgIT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
ciBwcmV2aW91c2x5IG9wZXJhdGVkIG9uICIgKyBtZWRpYUNvZGVjVGhyZWFkCi0gICAgICAgICAg
KyAiIGJ1dCBpcyBub3cgY2FsbGVkIG9uICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLSAg
ICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAg
IGlmIChydW5uaW5nSW5zdGFuY2UgIT0gbnVsbCAmJiBydW5uaW5nSW5zdGFuY2UubWVkaWFDb2Rl
Y1RocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxlbWVudFtdIG1lZGlhQ29kZWNT
dGFja1RyYWNlcyA9IHJ1bm5pbmdJbnN0YW5jZS5tZWRpYUNvZGVjVGhyZWFkLmdldFN0YWNrVHJh
Y2UoKTsKLSAgICAgIGlmIChtZWRpYUNvZGVjU3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAg
ICAgICBMb2dnaW5nLmQoVEFHLCAiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBzdGFja3MgdHJhY2U6
Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgc3RhY2tUcmFjZSA6IG1lZGlhQ29k
ZWNTdGFja1RyYWNlcykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsIHN0YWNrVHJhY2UudG9T
dHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgTWVk
aWFDb2RlYyBjcmVhdGVCeUNvZGVjTmFtZShTdHJpbmcgY29kZWNOYW1lKSB7Ci0gICAgdHJ5IHsK
LSAgICAgIC8vIEluIHRoZSBMLVNESyB0aGlzIGNhbGwgY2FuIHRocm93IElPRXhjZXB0aW9uIHNv
IGluIG9yZGVyIHRvIHdvcmsgaW4KLSAgICAgIC8vIGJvdGggY2FzZXMgY2F0Y2ggYW4gZXhjZXB0
aW9uLgotICAgICAgcmV0dXJuIE1lZGlhQ29kZWMuY3JlYXRlQnlDb2RlY05hbWUoY29kZWNOYW1l
KTsKLSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotICB9Ci0KLSAgYm9vbGVhbiBpbml0RW5jb2RlKFZpZGVvQ29kZWNUeXBlIHR5cGUsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IGticHMsIGludCBmcHMsCi0gICAgICBFZ2xCYXNlMTQuQ29u
dGV4dCBzaGFyZWRDb250ZXh0KSB7Ci0gICAgZmluYWwgYm9vbGVhbiB1c2VTdXJmYWNlID0gc2hh
cmVkQ29udGV4dCAhPSBudWxsOwotICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIGluaXRFbmNvZGU6
ICIgKyB0eXBlICsgIiA6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0ICsgIi4gQCAiICsga2Jw
cwotICAgICAgICAgICAgKyAiIGticHMuIEZwczogIiArIGZwcyArICIuIEVuY29kZSBmcm9tIHRl
eHR1cmUgOiAiICsgdXNlU3VyZmFjZSk7Ci0KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAg
dGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQgIT0gbnVsbCkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkZvcmdvdCB0byByZWxlYXNlKCk/
Iik7Ci0gICAgfQotICAgIEVuY29kZXJQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBudWxsOwotICAg
IFN0cmluZyBtaW1lID0gbnVsbDsKLSAgICBpbnQga2V5RnJhbWVJbnRlcnZhbFNlYyA9IDA7Ci0g
ICAgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4KSB7Ci0gICAgICBt
aW1lID0gVlA4X01JTUVfVFlQRTsKLSAgICAgIHByb3BlcnRpZXMgPSBmaW5kSHdFbmNvZGVyKAot
ICAgICAgICAgIFZQOF9NSU1FX1RZUEUsIHZwOEh3TGlzdCwgdXNlU3VyZmFjZSA/IHN1cHBvcnRl
ZFN1cmZhY2VDb2xvckxpc3QgOiBzdXBwb3J0ZWRDb2xvckxpc3QpOwotICAgICAga2V5RnJhbWVJ
bnRlcnZhbFNlYyA9IDEwMDsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUu
VklERU9fQ09ERUNfVlA5KSB7Ci0gICAgICBtaW1lID0gVlA5X01JTUVfVFlQRTsKLSAgICAgIHBy
b3BlcnRpZXMgPSBmaW5kSHdFbmNvZGVyKAotICAgICAgICAgIFZQOV9NSU1FX1RZUEUsIHZwOUh3
TGlzdCwgdXNlU3VyZmFjZSA/IHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QgOiBzdXBwb3J0ZWRD
b2xvckxpc3QpOwotICAgICAga2V5RnJhbWVJbnRlcnZhbFNlYyA9IDEwMDsKLSAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfSDI2NCkgewotICAgICAgbWlt
ZSA9IEgyNjRfTUlNRV9UWVBFOwotICAgICAgcHJvcGVydGllcyA9IGZpbmRId0VuY29kZXIoCi0g
ICAgICAgICAgSDI2NF9NSU1FX1RZUEUsIGgyNjRId0xpc3QsIHVzZVN1cmZhY2UgPyBzdXBwb3J0
ZWRTdXJmYWNlQ29sb3JMaXN0IDogc3VwcG9ydGVkQ29sb3JMaXN0KTsKLSAgICAgIGtleUZyYW1l
SW50ZXJ2YWxTZWMgPSAyMDsKLSAgICB9Ci0gICAgaWYgKHByb3BlcnRpZXMgPT0gbnVsbCkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNhbiBub3QgZmluZCBIVyBlbmNvZGVy
IGZvciAiICsgdHlwZSk7Ci0gICAgfQotICAgIHJ1bm5pbmdJbnN0YW5jZSA9IHRoaXM7IC8vIEVu
Y29kZXIgaXMgbm93IHJ1bm5pbmcgYW5kIGNhbiBiZSBxdWVyaWVkIGZvciBzdGFjayB0cmFjZXMu
Ci0gICAgY29sb3JGb3JtYXQgPSBwcm9wZXJ0aWVzLmNvbG9yRm9ybWF0OwotICAgIGJpdHJhdGVB
ZGp1c3RtZW50VHlwZSA9IHByb3BlcnRpZXMuYml0cmF0ZUFkanVzdG1lbnRUeXBlOwotICAgIGlm
IChiaXRyYXRlQWRqdXN0bWVudFR5cGUgPT0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLkZSQU1FUkFU
RV9BREpVU1RNRU5UKSB7Ci0gICAgICBmcHMgPSBCSVRSQVRFX0FESlVTVE1FTlRfRlBTOwotICAg
IH0gZWxzZSB7Ci0gICAgICBmcHMgPSBNYXRoLm1pbihmcHMsIE1BWElNVU1fSU5JVElBTF9GUFMp
OwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiQ29sb3IgZm9ybWF0OiAiICsgY29sb3JGb3Jt
YXQgKyAiLiBCaXRyYXRlIGFkanVzdG1lbnQ6ICIgKyBiaXRyYXRlQWRqdXN0bWVudFR5cGUKLSAg
ICAgICAgICAgICsgIi4gSW5pdGlhbCBmcHM6ICIgKyBmcHMpOwotICAgIHRhcmdldEJpdHJhdGVC
cHMgPSAxMDAwICoga2JwczsKLSAgICB0YXJnZXRGcHMgPSBmcHM7Ci0gICAgYml0cmF0ZUFjY3Vt
dWxhdG9yTWF4ID0gdGFyZ2V0Qml0cmF0ZUJwcyAvIDguMDsKLSAgICBiaXRyYXRlQWNjdW11bGF0
b3IgPSAwOwotICAgIGJpdHJhdGVPYnNlcnZhdGlvblRpbWVNcyA9IDA7Ci0gICAgYml0cmF0ZUFk
anVzdG1lbnRTY2FsZUV4cCA9IDA7Ci0KLSAgICBtZWRpYUNvZGVjVGhyZWFkID0gVGhyZWFkLmN1
cnJlbnRUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgTWVkaWFGb3JtYXQgZm9ybWF0ID0gTWVk
aWFGb3JtYXQuY3JlYXRlVmlkZW9Gb3JtYXQobWltZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICBm
b3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfQklUX1JBVEUsIHRhcmdldEJpdHJhdGVC
cHMpOwotICAgICAgZm9ybWF0LnNldEludGVnZXIoImJpdHJhdGUtbW9kZSIsIFZJREVPX0NvbnRy
b2xSYXRlQ29uc3RhbnQpOwotICAgICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZ
X0NPTE9SX0ZPUk1BVCwgcHJvcGVydGllcy5jb2xvckZvcm1hdCk7Ci0gICAgICBmb3JtYXQuc2V0
SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfRlJBTUVfUkFURSwgdGFyZ2V0RnBzKTsKLSAgICAgIGZv
cm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9JX0ZSQU1FX0lOVEVSVkFMLCBrZXlGcmFt
ZUludGVydmFsU2VjKTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICIgIEZvcm1hdDogIiArIGZvcm1h
dCk7Ci0gICAgICBtZWRpYUNvZGVjID0gY3JlYXRlQnlDb2RlY05hbWUocHJvcGVydGllcy5jb2Rl
Y05hbWUpOwotICAgICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICAgIGlmIChtZWRpYUNvZGVjID09
IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbiBub3QgY3JlYXRlIG1lZGlhIGVu
Y29kZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgbWVkaWFDb2Rl
Yy5jb25maWd1cmUoZm9ybWF0LCBudWxsLCBudWxsLCBNZWRpYUNvZGVjLkNPTkZJR1VSRV9GTEFH
X0VOQ09ERSk7Ci0KLSAgICAgIGlmICh1c2VTdXJmYWNlKSB7Ci0gICAgICAgIGVnbEJhc2UgPSBu
ZXcgRWdsQmFzZTE0KHNoYXJlZENvbnRleHQsIEVnbEJhc2UuQ09ORklHX1JFQ09SREFCTEUpOwot
ICAgICAgICAvLyBDcmVhdGUgYW4gaW5wdXQgc3VyZmFjZSBhbmQga2VlcCBhIHJlZmVyZW5jZSBz
aW5jZSB3ZSBtdXN0IHJlbGVhc2UgdGhlIHN1cmZhY2Ugd2hlbiBkb25lLgotICAgICAgICBpbnB1
dFN1cmZhY2UgPSBtZWRpYUNvZGVjLmNyZWF0ZUlucHV0U3VyZmFjZSgpOwotICAgICAgICBlZ2xC
YXNlLmNyZWF0ZVN1cmZhY2UoaW5wdXRTdXJmYWNlKTsKLSAgICAgICAgZHJhd2VyID0gbmV3IEds
UmVjdERyYXdlcigpOwotICAgICAgfQotICAgICAgbWVkaWFDb2RlYy5zdGFydCgpOwotICAgICAg
b3V0cHV0QnVmZmVycyA9IG1lZGlhQ29kZWMuZ2V0T3V0cHV0QnVmZmVycygpOwotICAgICAgTG9n
Z2luZy5kKFRBRywgIk91dHB1dCBidWZmZXJzOiAiICsgb3V0cHV0QnVmZmVycy5sZW5ndGgpOwot
Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJpbml0RW5jb2RlIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEJ5dGVCdWZmZXJbXSBnZXRJbnB1dEJ1ZmZl
cnMoKSB7Ci0gICAgQnl0ZUJ1ZmZlcltdIGlucHV0QnVmZmVycyA9IG1lZGlhQ29kZWMuZ2V0SW5w
dXRCdWZmZXJzKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIklucHV0IGJ1ZmZlcnM6ICIgKyBpbnB1
dEJ1ZmZlcnMubGVuZ3RoKTsKLSAgICByZXR1cm4gaW5wdXRCdWZmZXJzOwotICB9Ci0KLSAgYm9v
bGVhbiBlbmNvZGVCdWZmZXIoCi0gICAgICBib29sZWFuIGlzS2V5ZnJhbWUsIGludCBpbnB1dEJ1
ZmZlciwgaW50IHNpemUsIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMpIHsKLSAgICBjaGVj
a09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIHRyeSB7Ci0gICAgICBpZiAoaXNLZXlmcmFtZSkg
ewotICAgICAgICAvLyBJZGVhbGx5IE1lZGlhQ29kZWMgd291bGQgaG9ub3IgQlVGRkVSX0ZMQUdf
U1lOQ19GUkFNRSBzbyB3ZSBjb3VsZAotICAgICAgICAvLyBpbmRpY2F0ZSB0aGlzIGluIHF1ZXVl
SW5wdXRCdWZmZXIoKSBiZWxvdyBhbmQgZ3VhcmFudGVlIF90aGlzXyBmcmFtZQotICAgICAgICAv
LyBiZSBlbmNvZGVkIGFzIGEga2V5IGZyYW1lLCBidXQgc2FkbHkgdGhhdCBmbGFnIGlzIGlnbm9y
ZWQuICBJbnN0ZWFkLAotICAgICAgICAvLyB3ZSByZXF1ZXN0IGEga2V5IGZyYW1lICJzb29uIi4K
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlN5bmMgZnJhbWUgcmVxdWVzdCIpOwotICAgICAgICBC
dW5kbGUgYiA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgYi5wdXRJbnQoTWVkaWFDb2RlYy5QQVJB
TUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSwgMCk7Ci0gICAgICAgIG1lZGlhQ29kZWMuc2V0
UGFyYW1ldGVycyhiKTsKLSAgICAgIH0KLSAgICAgIG1lZGlhQ29kZWMucXVldWVJbnB1dEJ1ZmZl
cihpbnB1dEJ1ZmZlciwgMCwgc2l6ZSwgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMsIDApOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJlbmNvZGVCdWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgYm9vbGVhbiBlbmNvZGVUZXh0dXJlKGJvb2xl
YW4gaXNLZXlmcmFtZSwgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1hdGlvbk1h
dHJpeCwKLSAgICAgIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMpIHsKLSAgICBjaGVja09u
TWVkaWFDb2RlY1RocmVhZCgpOwotICAgIHRyeSB7Ci0gICAgICBpZiAoaXNLZXlmcmFtZSkgewot
ICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3luYyBmcmFtZSByZXF1ZXN0Iik7Ci0gICAgICAgIEJ1
bmRsZSBiID0gbmV3IEJ1bmRsZSgpOwotICAgICAgICBiLnB1dEludChNZWRpYUNvZGVjLlBBUkFN
RVRFUl9LRVlfUkVRVUVTVF9TWU5DX0ZSQU1FLCAwKTsKLSAgICAgICAgbWVkaWFDb2RlYy5zZXRQ
YXJhbWV0ZXJzKGIpOwotICAgICAgfQotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAg
ICAgLy8gVE9ETyhwZXJraik6IGdsQ2xlYXIoKSBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IHNpbmNl
IGV2ZXJ5IHBpeGVsIGlzIGNvdmVyZWQgYW55d2F5LAotICAgICAgLy8gYnV0IGl0J3MgYSB3b3Jr
YXJvdW5kIGZvciBidWcgd2VicnRjOjUxNDcuCi0gICAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAu
R0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgICBkcmF3ZXIuZHJhd09lcyhvZXNUZXh0dXJlSWQs
IHRyYW5zZm9ybWF0aW9uTWF0cml4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoVGltZVVuaXQuTUlDUk9TRUNPTkRTLnRvTmFu
b3MocHJlc2VudGF0aW9uVGltZXN0YW1wVXMpKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0g
Y2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImVuY29k
ZVRleHR1cmUgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0K
LSAgdm9pZCByZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VFbmNv
ZGVyIik7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLQotICAgIC8vIFJ1biBNZWRp
YWNvZGVjIHN0b3AoKSBhbmQgcmVsZWFzZSgpIG9uIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBzb21l
dGltZQotICAgIC8vIE1lZGlhY29kZWMuc3RvcCgpIG1heSBoYW5nLgotICAgIGZpbmFsIENvdW50
RG93bkxhdGNoIHJlbGVhc2VEb25lID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotCi0gICAgUnVu
bmFibGUgcnVuTWVkaWFDb2RlY1JlbGVhc2UgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRW5jb2RlciBvbiByZWxlYXNlIHRocmVhZCIp
OwotICAgICAgICAgIG1lZGlhQ29kZWMuc3RvcCgpOwotICAgICAgICAgIG1lZGlhQ29kZWMucmVs
ZWFzZSgpOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VFbmNvZGVyIG9u
IHJlbGVhc2UgdGhyZWFkIGRvbmUiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsK
LSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZW5jb2RlciByZWxlYXNlIGZhaWxlZCIs
IGUpOwotICAgICAgICB9Ci0gICAgICAgIHJlbGVhc2VEb25lLmNvdW50RG93bigpOwotICAgICAg
fQotICAgIH07Ci0gICAgbmV3IFRocmVhZChydW5NZWRpYUNvZGVjUmVsZWFzZSkuc3RhcnQoKTsK
LQotICAgIGlmICghVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkocmVsZWFzZURvbmUs
IE1FRElBX0NPREVDX1JFTEVBU0VfVElNRU9VVF9NUykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcs
ICJNZWRpYSBlbmNvZGVyIHJlbGVhc2UgdGltZW91dCIpOwotICAgICAgY29kZWNFcnJvcnMrKzsK
LSAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRB
RywgIkludm9rZSBjb2RlYyBlcnJvciBjYWxsYmFjay4gRXJyb3JzOiAiICsgY29kZWNFcnJvcnMp
OwotICAgICAgICBlcnJvckNhbGxiYWNrLm9uTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckNyaXRpY2Fs
RXJyb3IoY29kZWNFcnJvcnMpOwotICAgICAgfQotICAgIH0KLQotICAgIG1lZGlhQ29kZWMgPSBu
dWxsOwotICAgIG1lZGlhQ29kZWNUaHJlYWQgPSBudWxsOwotICAgIGlmIChkcmF3ZXIgIT0gbnVs
bCkgewotICAgICAgZHJhd2VyLnJlbGVhc2UoKTsKLSAgICAgIGRyYXdlciA9IG51bGw7Ci0gICAg
fQotICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwot
ICAgICAgZWdsQmFzZSA9IG51bGw7Ci0gICAgfQotICAgIGlmIChpbnB1dFN1cmZhY2UgIT0gbnVs
bCkgewotICAgICAgaW5wdXRTdXJmYWNlLnJlbGVhc2UoKTsKLSAgICAgIGlucHV0U3VyZmFjZSA9
IG51bGw7Ci0gICAgfQotICAgIHJ1bm5pbmdJbnN0YW5jZSA9IG51bGw7Ci0gICAgTG9nZ2luZy5k
KFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29s
ZWFuIHNldFJhdGVzKGludCBrYnBzLCBpbnQgZnJhbWVSYXRlKSB7Ci0gICAgY2hlY2tPbk1lZGlh
Q29kZWNUaHJlYWQoKTsKLQotICAgIGludCBjb2RlY0JpdHJhdGVCcHMgPSAxMDAwICoga2JwczsK
LSAgICBpZiAoYml0cmF0ZUFkanVzdG1lbnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5E
WU5BTUlDX0FESlVTVE1FTlQpIHsKLSAgICAgIGJpdHJhdGVBY2N1bXVsYXRvck1heCA9IGNvZGVj
Qml0cmF0ZUJwcyAvIDguMDsKLSAgICAgIGlmICh0YXJnZXRCaXRyYXRlQnBzID4gMCAmJiBjb2Rl
Y0JpdHJhdGVCcHMgPCB0YXJnZXRCaXRyYXRlQnBzKSB7Ci0gICAgICAgIC8vIFJlc2NhbGUgdGhl
IGFjY3VtdWxhdG9yIGxldmVsIGlmIHRoZSBhY2N1bXVsYXRvciBtYXggZGVjcmVhc2VzCi0gICAg
ICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IGJpdHJhdGVBY2N1bXVsYXRvciAqIGNvZGVjQml0cmF0
ZUJwcyAvIHRhcmdldEJpdHJhdGVCcHM7Ci0gICAgICB9Ci0gICAgfQotICAgIHRhcmdldEJpdHJh
dGVCcHMgPSBjb2RlY0JpdHJhdGVCcHM7Ci0gICAgdGFyZ2V0RnBzID0gZnJhbWVSYXRlOwotCi0g
ICAgLy8gQWRqdXN0IGFjdHVhbCBlbmNvZGVyIGJpdHJhdGUgYmFzZWQgb24gYml0cmF0ZSBhZGp1
c3RtZW50IHR5cGUuCi0gICAgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRq
dXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQgJiYgdGFyZ2V0RnBzID4gMCkgewotICAg
ICAgY29kZWNCaXRyYXRlQnBzID0gQklUUkFURV9BREpVU1RNRU5UX0ZQUyAqIHRhcmdldEJpdHJh
dGVCcHMgLyB0YXJnZXRGcHM7Ci0gICAgICBMb2dnaW5nLnYoVEFHLAotICAgICAgICAgICJzZXRS
YXRlczogIiArIGticHMgKyAiIC0+ICIgKyAoY29kZWNCaXRyYXRlQnBzIC8gMTAwMCkgKyAiIGti
cHMuIEZwczogIiArIHRhcmdldEZwcyk7Ci0gICAgfSBlbHNlIGlmIChiaXRyYXRlQWRqdXN0bWVu
dFR5cGUgPT0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLkRZTkFNSUNfQURKVVNUTUVOVCkgewotICAg
ICAgTG9nZ2luZy52KFRBRywgInNldFJhdGVzOiAiICsga2JwcyArICIga2Jwcy4gRnBzOiAiICsg
dGFyZ2V0RnBzICsgIi4gRXhwU2NhbGU6ICIKLSAgICAgICAgICAgICAgKyBiaXRyYXRlQWRqdXN0
bWVudFNjYWxlRXhwKTsKLSAgICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwICE9IDAp
IHsKLSAgICAgICAgY29kZWNCaXRyYXRlQnBzID0gKGludCkgKGNvZGVjQml0cmF0ZUJwcyAqIGdl
dEJpdHJhdGVTY2FsZShiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKSk7Ci0gICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgIExvZ2dpbmcudihUQUcsICJzZXRSYXRlczogIiArIGticHMgKyAiIGti
cHMuIEZwczogIiArIHRhcmdldEZwcyk7Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIEJ1bmRs
ZSBwYXJhbXMgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICBwYXJhbXMucHV0SW50KE1lZGlhQ29kZWMu
UEFSQU1FVEVSX0tFWV9WSURFT19CSVRSQVRFLCBjb2RlY0JpdHJhdGVCcHMpOwotICAgICAgbWVk
aWFDb2RlYy5zZXRQYXJhbWV0ZXJzKHBhcmFtcyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
InNldFJhdGVzIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQot
Ci0gIC8vIERlcXVldWUgYW4gaW5wdXQgYnVmZmVyIGFuZCByZXR1cm4gaXRzIGluZGV4LCAtMSBp
ZiBubyBpbnB1dCBidWZmZXIgaXMKLSAgLy8gYXZhaWxhYmxlLCBvciAtMiBpZiB0aGUgY29kZWMg
aXMgbm8gbG9uZ2VyIG9wZXJhdGl2ZS4KLSAgaW50IGRlcXVldWVJbnB1dEJ1ZmZlcigpIHsKLSAg
ICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gbWVk
aWFDb2RlYy5kZXF1ZXVlSW5wdXRCdWZmZXIoREVRVUVVRV9USU1FT1VUKTsKLSAgICB9IGNhdGNo
IChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImRlcXVl
dWVJbnRwdXRCdWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gLTI7Ci0gICAgfQotICB9
Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBmb3IgZGVxdWV1ZU91dHB1dEJ1ZmZlcigpIGJlbG93Lgot
ICBzdGF0aWMgY2xhc3MgT3V0cHV0QnVmZmVySW5mbyB7Ci0gICAgcHVibGljIE91dHB1dEJ1ZmZl
ckluZm8oCi0gICAgICAgIGludCBpbmRleCwgQnl0ZUJ1ZmZlciBidWZmZXIsIGJvb2xlYW4gaXNL
ZXlGcmFtZSwgbG9uZyBwcmVzZW50YXRpb25UaW1lc3RhbXBVcykgewotICAgICAgdGhpcy5pbmRl
eCA9IGluZGV4OwotICAgICAgdGhpcy5idWZmZXIgPSBidWZmZXI7Ci0gICAgICB0aGlzLmlzS2V5
RnJhbWUgPSBpc0tleUZyYW1lOwotICAgICAgdGhpcy5wcmVzZW50YXRpb25UaW1lc3RhbXBVcyA9
IHByZXNlbnRhdGlvblRpbWVzdGFtcFVzOwotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBpbnQg
aW5kZXg7Ci0gICAgcHVibGljIGZpbmFsIEJ5dGVCdWZmZXIgYnVmZmVyOwotICAgIHB1YmxpYyBm
aW5hbCBib29sZWFuIGlzS2V5RnJhbWU7Ci0gICAgcHVibGljIGZpbmFsIGxvbmcgcHJlc2VudGF0
aW9uVGltZXN0YW1wVXM7Ci0gIH0KLQotICAvLyBEZXF1ZXVlIGFuZCByZXR1cm4gYW4gb3V0cHV0
IGJ1ZmZlciwgb3IgbnVsbCBpZiBubyBvdXRwdXQgaXMgcmVhZHkuICBSZXR1cm4KLSAgLy8gYSBm
YWtlIE91dHB1dEJ1ZmZlckluZm8gd2l0aCBpbmRleCAtMSBpZiB0aGUgY29kZWMgaXMgbm8gbG9u
Z2VyIG9wZXJhYmxlLgotICBPdXRwdXRCdWZmZXJJbmZvIGRlcXVldWVPdXRwdXRCdWZmZXIoKSB7
Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgTWVkaWFD
b2RlYy5CdWZmZXJJbmZvIGluZm8gPSBuZXcgTWVkaWFDb2RlYy5CdWZmZXJJbmZvKCk7Ci0gICAg
ICBpbnQgcmVzdWx0ID0gbWVkaWFDb2RlYy5kZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8sIERFUVVF
VUVfVElNRU9VVCk7Ci0gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGNvbmZpZyBmcmFtZSBhbmQg
c2F2ZSBjb25maWd1cmF0aW9uIGRhdGEuCi0gICAgICBpZiAocmVzdWx0ID49IDApIHsKLSAgICAg
ICAgYm9vbGVhbiBpc0NvbmZpZ0ZyYW1lID0gKGluZm8uZmxhZ3MgJiBNZWRpYUNvZGVjLkJVRkZF
Ul9GTEFHX0NPREVDX0NPTkZJRykgIT0gMDsKLSAgICAgICAgaWYgKGlzQ29uZmlnRnJhbWUpIHsK
LSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ29uZmlnIGZyYW1lIGdlbmVyYXRlZC4gT2Zmc2V0
OiAiICsgaW5mby5vZmZzZXQgKyAiLiBTaXplOiAiICsgaW5mby5zaXplKTsKLSAgICAgICAgICBj
b25maWdEYXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChpbmZvLnNpemUpOwotICAgICAg
ICAgIG91dHB1dEJ1ZmZlcnNbcmVzdWx0XS5wb3NpdGlvbihpbmZvLm9mZnNldCk7Ci0gICAgICAg
ICAgb3V0cHV0QnVmZmVyc1tyZXN1bHRdLmxpbWl0KGluZm8ub2Zmc2V0ICsgaW5mby5zaXplKTsK
LSAgICAgICAgICBjb25maWdEYXRhLnB1dChvdXRwdXRCdWZmZXJzW3Jlc3VsdF0pOwotICAgICAg
ICAgIC8vIFJlbGVhc2UgYnVmZmVyIGJhY2suCi0gICAgICAgICAgbWVkaWFDb2RlYy5yZWxlYXNl
T3V0cHV0QnVmZmVyKHJlc3VsdCwgZmFsc2UpOwotICAgICAgICAgIC8vIFF1ZXJ5IG5leHQgb3V0
cHV0LgotICAgICAgICAgIHJlc3VsdCA9IG1lZGlhQ29kZWMuZGVxdWV1ZU91dHB1dEJ1ZmZlcihp
bmZvLCBERVFVRVVFX1RJTUVPVVQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAocmVz
dWx0ID49IDApIHsKLSAgICAgICAgLy8gTWVkaWFDb2RlYyBkb2Vzbid0IGNhcmUgYWJvdXQgQnVm
ZmVyIHBvc2l0aW9uL3JlbWFpbmluZy9ldGMgc28gd2UgY2FuCi0gICAgICAgIC8vIG1lc3Mgd2l0
aCB0aGVtIHRvIGdldCBhIHNsaWNlIGFuZCBhdm9pZCBoYXZpbmcgdG8gcGFzcyBleHRyYQotICAg
ICAgICAvLyAoQnVmZmVySW5mby1yZWxhdGVkKSBwYXJhbWV0ZXJzIGJhY2sgdG8gQysrLgotICAg
ICAgICBCeXRlQnVmZmVyIG91dHB1dEJ1ZmZlciA9IG91dHB1dEJ1ZmZlcnNbcmVzdWx0XS5kdXBs
aWNhdGUoKTsKLSAgICAgICAgb3V0cHV0QnVmZmVyLnBvc2l0aW9uKGluZm8ub2Zmc2V0KTsKLSAg
ICAgICAgb3V0cHV0QnVmZmVyLmxpbWl0KGluZm8ub2Zmc2V0ICsgaW5mby5zaXplKTsKLSAgICAg
ICAgcmVwb3J0RW5jb2RlZEZyYW1lKGluZm8uc2l6ZSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sga2V5
IGZyYW1lIGZsYWcuCi0gICAgICAgIGJvb2xlYW4gaXNLZXlGcmFtZSA9IChpbmZvLmZsYWdzICYg
TWVkaWFDb2RlYy5CVUZGRVJfRkxBR19TWU5DX0ZSQU1FKSAhPSAwOwotICAgICAgICBpZiAoaXNL
ZXlGcmFtZSkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJTeW5jIGZyYW1lIGdlbmVyYXRl
ZCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0tleUZyYW1lICYmIHR5cGUgPT0gVmlkZW9D
b2RlY1R5cGUuVklERU9fQ09ERUNfSDI2NCkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJB
cHBlbmRpbmcgY29uZmlnIGZyYW1lIG9mIHNpemUgIiArIGNvbmZpZ0RhdGEuY2FwYWNpdHkoKQot
ICAgICAgICAgICAgICAgICAgKyAiIHRvIG91dHB1dCBidWZmZXIgd2l0aCBvZmZzZXQgIiArIGlu
Zm8ub2Zmc2V0ICsgIiwgc2l6ZSAiICsgaW5mby5zaXplKTsKLSAgICAgICAgICAvLyBGb3IgSC4y
NjQga2V5IGZyYW1lIGFwcGVuZCBTUFMgYW5kIFBQUyBOQUxzIGF0IHRoZSBzdGFydAotICAgICAg
ICAgIEJ5dGVCdWZmZXIga2V5RnJhbWVCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0
KGNvbmZpZ0RhdGEuY2FwYWNpdHkoKSArIGluZm8uc2l6ZSk7Ci0gICAgICAgICAgY29uZmlnRGF0
YS5yZXdpbmQoKTsKLSAgICAgICAgICBrZXlGcmFtZUJ1ZmZlci5wdXQoY29uZmlnRGF0YSk7Ci0g
ICAgICAgICAga2V5RnJhbWVCdWZmZXIucHV0KG91dHB1dEJ1ZmZlcik7Ci0gICAgICAgICAga2V5
RnJhbWVCdWZmZXIucG9zaXRpb24oMCk7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRCdWZm
ZXJJbmZvKHJlc3VsdCwga2V5RnJhbWVCdWZmZXIsIGlzS2V5RnJhbWUsIGluZm8ucHJlc2VudGF0
aW9uVGltZVVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXR1cm4gbmV3IE91dHB1
dEJ1ZmZlckluZm8oCi0gICAgICAgICAgICAgIHJlc3VsdCwgb3V0cHV0QnVmZmVyLnNsaWNlKCks
IGlzS2V5RnJhbWUsIGluZm8ucHJlc2VudGF0aW9uVGltZVVzKTsKLSAgICAgICAgfQotICAgICAg
fSBlbHNlIGlmIChyZXN1bHQgPT0gTWVkaWFDb2RlYy5JTkZPX09VVFBVVF9CVUZGRVJTX0NIQU5H
RUQpIHsKLSAgICAgICAgb3V0cHV0QnVmZmVycyA9IG1lZGlhQ29kZWMuZ2V0T3V0cHV0QnVmZmVy
cygpOwotICAgICAgICByZXR1cm4gZGVxdWV1ZU91dHB1dEJ1ZmZlcigpOwotICAgICAgfSBlbHNl
IGlmIChyZXN1bHQgPT0gTWVkaWFDb2RlYy5JTkZPX09VVFBVVF9GT1JNQVRfQ0hBTkdFRCkgewot
ICAgICAgICByZXR1cm4gZGVxdWV1ZU91dHB1dEJ1ZmZlcigpOwotICAgICAgfSBlbHNlIGlmIChy
ZXN1bHQgPT0gTWVkaWFDb2RlYy5JTkZPX1RSWV9BR0FJTl9MQVRFUikgewotICAgICAgICByZXR1
cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJkZXF1
ZXVlT3V0cHV0QnVmZmVyOiAiICsgcmVzdWx0KTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVF
eGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImRlcXVldWVPdXRwdXRCdWZmZXIg
ZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gbmV3IE91dHB1dEJ1ZmZlckluZm8oLTEsIG51bGws
IGZhbHNlLCAtMSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBkb3VibGUgZ2V0Qml0cmF0ZVNj
YWxlKGludCBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKSB7Ci0gICAgcmV0dXJuIE1hdGgucG93
KEJJVFJBVEVfQ09SUkVDVElPTl9NQVhfU0NBTEUsCi0gICAgICAgIChkb3VibGUpIGJpdHJhdGVB
ZGp1c3RtZW50U2NhbGVFeHAgLyBCSVRSQVRFX0NPUlJFQ1RJT05fU1RFUFMpOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHJlcG9ydEVuY29kZWRGcmFtZShpbnQgc2l6ZSkgewotICAgIGlmICh0YXJn
ZXRGcHMgPT0gMCB8fCBiaXRyYXRlQWRqdXN0bWVudFR5cGUgIT0gQml0cmF0ZUFkanVzdG1lbnRU
eXBlLkRZTkFNSUNfQURKVVNUTUVOVCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IEFjY3VtdWxhdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhY3RpYWwgYW5kIGV4cGVjdGVkIGZy
YW1lIHNpemVzLgotICAgIGRvdWJsZSBleHBlY3RlZEJ5dGVzUGVyRnJhbWUgPSB0YXJnZXRCaXRy
YXRlQnBzIC8gKDguMCAqIHRhcmdldEZwcyk7Ci0gICAgYml0cmF0ZUFjY3VtdWxhdG9yICs9IChz
aXplIC0gZXhwZWN0ZWRCeXRlc1BlckZyYW1lKTsKLSAgICBiaXRyYXRlT2JzZXJ2YXRpb25UaW1l
TXMgKz0gMTAwMC4wIC8gdGFyZ2V0RnBzOwotCi0gICAgLy8gUHV0IGEgY2FwIG9uIHRoZSBhY2N1
bXVsYXRvciwgaS5lLiwgZG9uJ3QgbGV0IGl0IGdyb3cgYmV5b25kIHNvbWUgbGV2ZWwgdG8gYXZv
aWQKLSAgICAvLyB1c2luZyB0b28gb2xkIGRhdGEgZm9yIGJpdHJhdGUgYWRqdXN0bWVudC4KLSAg
ICBkb3VibGUgYml0cmF0ZUFjY3VtdWxhdG9yQ2FwID0gQklUUkFURV9DT1JSRUNUSU9OX1NFQyAq
IGJpdHJhdGVBY2N1bXVsYXRvck1heDsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBNYXRoLm1p
bihiaXRyYXRlQWNjdW11bGF0b3IsIGJpdHJhdGVBY2N1bXVsYXRvckNhcCk7Ci0gICAgYml0cmF0
ZUFjY3VtdWxhdG9yID0gTWF0aC5tYXgoYml0cmF0ZUFjY3VtdWxhdG9yLCAtYml0cmF0ZUFjY3Vt
dWxhdG9yQ2FwKTsKLQotICAgIC8vIERvIGJpdHJhdGUgYWRqdXN0bWVudCBldmVyeSAzIHNlY29u
ZHMgaWYgYWN0dWFsIGVuY29kZXIgYml0cmF0ZSBkZXZpYXRlcyB0b28gbXVjaAotICAgIC8vIGZv
cm0gdGhlIHRhcmdldCB2YWx1ZS4KLSAgICBpZiAoYml0cmF0ZU9ic2VydmF0aW9uVGltZU1zID4g
MTAwMCAqIEJJVFJBVEVfQ09SUkVDVElPTl9TRUMpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJB
Y2M6ICIgKyAoaW50KSBiaXRyYXRlQWNjdW11bGF0b3IgKyAiLiBNYXg6ICIgKyAoaW50KSBiaXRy
YXRlQWNjdW11bGF0b3JNYXgKLSAgICAgICAgICAgICAgKyAiLiBFeHBTY2FsZTogIiArIGJpdHJh
dGVBZGp1c3RtZW50U2NhbGVFeHApOwotICAgICAgYm9vbGVhbiBiaXRyYXRlQWRqdXN0bWVudFNj
YWxlQ2hhbmdlZCA9IGZhbHNlOwotICAgICAgaWYgKGJpdHJhdGVBY2N1bXVsYXRvciA+IGJpdHJh
dGVBY2N1bXVsYXRvck1heCkgewotICAgICAgICAvLyBFbmNvZGVyIGdlbmVyYXRlcyB0b28gaGln
aCBiaXRyYXRlIC0gbmVlZCB0byByZWR1Y2UgdGhlIHNjYWxlLgotICAgICAgICBiaXRyYXRlQWNj
dW11bGF0b3IgPSBiaXRyYXRlQWNjdW11bGF0b3JNYXg7Ci0gICAgICAgIGJpdHJhdGVBZGp1c3Rt
ZW50U2NhbGVFeHAtLTsKLSAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUNoYW5nZWQgPSB0
cnVlOwotICAgICAgfSBlbHNlIGlmIChiaXRyYXRlQWNjdW11bGF0b3IgPCAtYml0cmF0ZUFjY3Vt
dWxhdG9yTWF4KSB7Ci0gICAgICAgIC8vIEVuY29kZXIgZ2VuZXJhdGVzIHRvbyBsb3cgYml0cmF0
ZSAtIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNjYWxlLgotICAgICAgICBiaXRyYXRlQWRqdXN0bWVu
dFNjYWxlRXhwKys7Ci0gICAgICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IC1iaXRyYXRlQWNjdW11
bGF0b3JNYXg7Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVDaGFuZ2VkID0gdHJ1ZTsK
LSAgICAgIH0KLSAgICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFNjYWxlQ2hhbmdlZCkgewotICAg
ICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwID0gTWF0aC5taW4oYml0cmF0ZUFkanVzdG1l
bnRTY2FsZUV4cCwgQklUUkFURV9DT1JSRUNUSU9OX1NURVBTKTsKLSAgICAgICAgYml0cmF0ZUFk
anVzdG1lbnRTY2FsZUV4cCA9IE1hdGgubWF4KGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAsIC1C
SVRSQVRFX0NPUlJFQ1RJT05fU1RFUFMpOwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQWRqdXN0
aW5nIGJpdHJhdGUgc2NhbGUgdG8gIiArIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAgKyAiLiBW
YWx1ZTogIgotICAgICAgICAgICAgICAgICsgZ2V0Qml0cmF0ZVNjYWxlKGJpdHJhdGVBZGp1c3Rt
ZW50U2NhbGVFeHApKTsKLSAgICAgICAgc2V0UmF0ZXModGFyZ2V0Qml0cmF0ZUJwcyAvIDEwMDAs
IHRhcmdldEZwcyk7Ci0gICAgICB9Ci0gICAgICBiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgPSAw
OwotICAgIH0KLSAgfQotCi0gIC8vIFJlbGVhc2UgYSBkZXF1ZXVlZCBvdXRwdXQgYnVmZmVyIGJh
Y2sgdG8gdGhlIGNvZGVjIGZvciByZS11c2UuICBSZXR1cm4KLSAgLy8gZmFsc2UgaWYgdGhlIGNv
ZGVjIGlzIG5vIGxvbmdlciBvcGVyYWJsZS4KLSAgYm9vbGVhbiByZWxlYXNlT3V0cHV0QnVmZmVy
KGludCBpbmRleCkgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsK
LSAgICAgIG1lZGlhQ29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihpbmRleCwgZmFsc2UpOwotICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJyZWxlYXNlT3V0cHV0QnVmZmVyIGZhaWxlZCIsIGUpOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9NZWRpYUNvbnN0cmFpbnRzLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9N
ZWRpYUNvbnN0cmFpbnRzLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvTWVkaWFDb25zdHJhaW50cy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsODQgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS51
dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogRGVzY3Jp
cHRpb24gb2YgbWVkaWEgY29uc3RyYWludHMgZm9yIHtAY29kZSBNZWRpYVN0cmVhbX0gYW5kCi0g
KiB7QGNvZGUgUGVlckNvbm5lY3Rpb259LgotICovCi1wdWJsaWMgY2xhc3MgTWVkaWFDb25zdHJh
aW50cyB7Ci0gIC8qKiBTaW1wbGUgU3RyaW5nIGtleS92YWx1ZSBwYWlyLiAqLwotICBwdWJsaWMg
c3RhdGljIGNsYXNzIEtleVZhbHVlUGFpciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcga2V5
OwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIHZhbHVlOwotCi0gICAgcHVibGljIEtleVZhbHVl
UGFpcihTdHJpbmcga2V5LCBTdHJpbmcgdmFsdWUpIHsKLSAgICAgIHRoaXMua2V5ID0ga2V5Owot
ICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0
S2V5KCkgewotICAgICAgcmV0dXJuIGtleTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdl
dFZhbHVlKCkgewotICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJp
bmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4ga2V5ICsgIjogIiArIHZhbHVlOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIp
IHsKLSAgICAgIGlmICh0aGlzID09IG90aGVyKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgfQotICAgICAgaWYgKG90aGVyID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvdGhlci5nZXRD
bGFzcygpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIEtleVZhbHVl
UGFpciB0aGF0ID0gKEtleVZhbHVlUGFpcikgb3RoZXI7Ci0gICAgICByZXR1cm4ga2V5LmVxdWFs
cyh0aGF0LmtleSkgJiYgdmFsdWUuZXF1YWxzKHRoYXQudmFsdWUpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICByZXR1cm4ga2V5Lmhh
c2hDb2RlKCkgKyB2YWx1ZS5oYXNoQ29kZSgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5h
bCBMaXN0PEtleVZhbHVlUGFpcj4gbWFuZGF0b3J5OwotICBwdWJsaWMgZmluYWwgTGlzdDxLZXlW
YWx1ZVBhaXI+IG9wdGlvbmFsOwotCi0gIHB1YmxpYyBNZWRpYUNvbnN0cmFpbnRzKCkgewotICAg
IG1hbmRhdG9yeSA9IG5ldyBMaW5rZWRMaXN0PEtleVZhbHVlUGFpcj4oKTsKLSAgICBvcHRpb25h
bCA9IG5ldyBMaW5rZWRMaXN0PEtleVZhbHVlUGFpcj4oKTsKLSAgfQotCi0gIHByaXZhdGUgc3Rh
dGljIFN0cmluZyBzdHJpbmdpZnlLZXlWYWx1ZVBhaXJMaXN0KExpc3Q8S2V5VmFsdWVQYWlyPiBs
aXN0KSB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoIlsi
KTsKLSAgICBmb3IgKEtleVZhbHVlUGFpciBwYWlyIDogbGlzdCkgewotICAgICAgaWYgKGJ1aWxk
ZXIubGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAg
fQotICAgICAgYnVpbGRlci5hcHBlbmQocGFpci50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGJ1aWxkZXIuYXBwZW5kKCJdIikudG9TdHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJp
bmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuICJtYW5kYXRvcnk6ICIgKyBzdHJpbmdpZnlLZXlW
YWx1ZVBhaXJMaXN0KG1hbmRhdG9yeSkgKyAiLCBvcHRpb25hbDogIgotICAgICAgICArIHN0cmlu
Z2lmeUtleVZhbHVlUGFpckxpc3Qob3B0aW9uYWwpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL01lZGlhU291cmNlLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9N
ZWRpYVNvdXJjZS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01l
ZGlhU291cmNlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNSArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEg
QysrIE1lZGlhU291cmNlSW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIE1lZGlhU291cmNlIHsK
LSAgLyoqIFRyYWNrcyBNZWRpYVNvdXJjZUludGVyZmFjZS5Tb3VyY2VTdGF0ZSAqLwotICBwdWJs
aWMgZW51bSBTdGF0ZSB7IElOSVRJQUxJWklORywgTElWRSwgRU5ERUQsIE1VVEVEIH0KLQotICBm
aW5hbCBsb25nIG5hdGl2ZVNvdXJjZTsgLy8gUGFja2FnZS1wcm90ZWN0ZWQgZm9yIFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS4KLQotICBwdWJsaWMgTWVkaWFTb3VyY2UobG9uZyBuYXRpdmVTb3VyY2Up
IHsKLSAgICB0aGlzLm5hdGl2ZVNvdXJjZSA9IG5hdGl2ZVNvdXJjZTsKLSAgfQotCi0gIHB1Ymxp
YyBTdGF0ZSBzdGF0ZSgpIHsKLSAgICByZXR1cm4gbmF0aXZlU3RhdGUobmF0aXZlU291cmNlKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgZnJlZShuYXRpdmVTb3VyY2Up
OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0YXRlIG5hdGl2ZVN0YXRlKGxvbmcg
cG9pbnRlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2
ZVNvdXJjZSk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU3RyZWFtLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbS5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU3RyZWFtLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci0KLS8qKiBKYXZhIHdyYXBwZXIg
Zm9yIGEgQysrIE1lZGlhU3RyZWFtSW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIE1lZGlhU3Ry
ZWFtIHsKLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8QXVkaW9UcmFjaz4gYXVkaW9UcmFja3M7
Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRMaXN0PFZpZGVvVHJhY2s+IHZpZGVvVHJhY2tzOwotICBw
dWJsaWMgZmluYWwgTGlua2VkTGlzdDxWaWRlb1RyYWNrPiBwcmVzZXJ2ZWRWaWRlb1RyYWNrczsK
LSAgLy8gUGFja2FnZS1wcm90ZWN0ZWQgZm9yIFBlZXJDb25uZWN0aW9uLgotICBmaW5hbCBsb25n
IG5hdGl2ZVN0cmVhbTsKLQotICBwdWJsaWMgTWVkaWFTdHJlYW0obG9uZyBuYXRpdmVTdHJlYW0p
IHsKLSAgICBhdWRpb1RyYWNrcyA9IG5ldyBMaW5rZWRMaXN0PEF1ZGlvVHJhY2s+KCk7Ci0gICAg
dmlkZW9UcmFja3MgPSBuZXcgTGlua2VkTGlzdDxWaWRlb1RyYWNrPigpOwotICAgIHByZXNlcnZl
ZFZpZGVvVHJhY2tzID0gbmV3IExpbmtlZExpc3Q8VmlkZW9UcmFjaz4oKTsKLSAgICB0aGlzLm5h
dGl2ZVN0cmVhbSA9IG5hdGl2ZVN0cmVhbTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZFRy
YWNrKEF1ZGlvVHJhY2sgdHJhY2spIHsKLSAgICBpZiAobmF0aXZlQWRkQXVkaW9UcmFjayhuYXRp
dmVTdHJlYW0sIHRyYWNrLm5hdGl2ZVRyYWNrKSkgewotICAgICAgYXVkaW9UcmFja3MuYWRkKHRy
YWNrKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICBwdWJsaWMgYm9vbGVhbiBhZGRUcmFjayhWaWRlb1RyYWNrIHRyYWNrKSB7Ci0gICAgaWYg
KG5hdGl2ZUFkZFZpZGVvVHJhY2sobmF0aXZlU3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjaykpIHsK
LSAgICAgIHZpZGVvVHJhY2tzLmFkZCh0cmFjayk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gVHJhY2tzIGFkZGVkIGluIGFkZFRyYWNr
KCkgY2FsbCB3aWxsIGJlIGF1dG8gcmVsZWFzZWQgb25jZSBNZWRpYVN0cmVhbS5kaXNwb3NlKCkK
LSAgLy8gaXMgY2FsbGVkLiBJZiB2aWRlbyB0cmFjayBuZWVkIHRvIGJlIHByZXNlcnZlZCBhZnRl
ciBNZWRpYVN0cmVhbSBpcyBkZXN0cm95ZWQgaXQKLSAgLy8gc2hvdWxkIGJlIGFkZGVkIHRvIE1l
ZGlhU3RyZWFtIHVzaW5nIGFkZFByZXNlcnZlZFRyYWNrKCkgY2FsbC4KLSAgcHVibGljIGJvb2xl
YW4gYWRkUHJlc2VydmVkVHJhY2soVmlkZW9UcmFjayB0cmFjaykgewotICAgIGlmIChuYXRpdmVB
ZGRWaWRlb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZlVHJhY2spKSB7Ci0gICAgICBw
cmVzZXJ2ZWRWaWRlb1RyYWNrcy5hZGQodHJhY2spOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZVRyYWNr
KEF1ZGlvVHJhY2sgdHJhY2spIHsKLSAgICBhdWRpb1RyYWNrcy5yZW1vdmUodHJhY2spOwotICAg
IHJldHVybiBuYXRpdmVSZW1vdmVBdWRpb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZl
VHJhY2spOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlVHJhY2soVmlkZW9UcmFjayB0
cmFjaykgewotICAgIHZpZGVvVHJhY2tzLnJlbW92ZSh0cmFjayk7Ci0gICAgcHJlc2VydmVkVmlk
ZW9UcmFja3MucmVtb3ZlKHRyYWNrKTsKLSAgICByZXR1cm4gbmF0aXZlUmVtb3ZlVmlkZW9UcmFj
ayhuYXRpdmVTdHJlYW0sIHRyYWNrLm5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IGRpc3Bvc2UoKSB7Ci0gICAgLy8gUmVtb3ZlIGFuZCByZWxlYXNlIHByZXZpb3VzbHkgYWRkZWQg
YXVkaW8gYW5kIHZpZGVvIHRyYWNrcy4KLSAgICB3aGlsZSAoIWF1ZGlvVHJhY2tzLmlzRW1wdHko
KSkgewotICAgICAgQXVkaW9UcmFjayB0cmFjayA9IGF1ZGlvVHJhY2tzLmdldEZpcnN0KCk7Ci0g
ICAgICByZW1vdmVUcmFjayh0cmFjayk7Ci0gICAgICB0cmFjay5kaXNwb3NlKCk7Ci0gICAgfQot
ICAgIHdoaWxlICghdmlkZW9UcmFja3MuaXNFbXB0eSgpKSB7Ci0gICAgICBWaWRlb1RyYWNrIHRy
YWNrID0gdmlkZW9UcmFja3MuZ2V0Rmlyc3QoKTsKLSAgICAgIHJlbW92ZVRyYWNrKHRyYWNrKTsK
LSAgICAgIHRyYWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgLy8gUmVtb3ZlLCBidXQgZG8gbm90
IHJlbGVhc2UgcHJlc2VydmVkIHZpZGVvIHRyYWNrcy4KLSAgICB3aGlsZSAoIXByZXNlcnZlZFZp
ZGVvVHJhY2tzLmlzRW1wdHkoKSkgewotICAgICAgcmVtb3ZlVHJhY2socHJlc2VydmVkVmlkZW9U
cmFja3MuZ2V0Rmlyc3QoKSk7Ci0gICAgfQotICAgIGZyZWUobmF0aXZlU3RyZWFtKTsKLSAgfQot
Ci0gIHB1YmxpYyBTdHJpbmcgbGFiZWwoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUxhYmVsKG5hdGl2
ZVN0cmVhbSk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVy
biAiWyIgKyBsYWJlbCgpICsgIjpBPSIgKyBhdWRpb1RyYWNrcy5zaXplKCkgKyAiOlY9IiArIHZp
ZGVvVHJhY2tzLnNpemUoKSArICJdIjsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBi
b29sZWFuIG5hdGl2ZUFkZEF1ZGlvVHJhY2sobG9uZyBuYXRpdmVTdHJlYW0sIGxvbmcgbmF0aXZl
QXVkaW9UcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRk
VmlkZW9UcmFjayhsb25nIG5hdGl2ZVN0cmVhbSwgbG9uZyBuYXRpdmVWaWRlb1RyYWNrKTsKLQot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVSZW1vdmVBdWRpb1RyYWNrKGxv
bmcgbmF0aXZlU3RyZWFtLCBsb25nIG5hdGl2ZUF1ZGlvVHJhY2spOwotCi0gIHByaXZhdGUgc3Rh
dGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVJlbW92ZVZpZGVvVHJhY2sobG9uZyBuYXRpdmVTdHJl
YW0sIGxvbmcgbmF0aXZlVmlkZW9UcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0
cmluZyBuYXRpdmVMYWJlbChsb25nIG5hdGl2ZVN0cmVhbSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVN0cmVhbSk7Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL01lZGlhU3RyZWFtVHJhY2suamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL01lZGlhU3RyZWFtVHJhY2suamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9NZWRpYVN0cmVhbVRyYWNrLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZh
IHdyYXBwZXIgZm9yIGEgQysrIE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UuICovCi1wdWJsaWMg
Y2xhc3MgTWVkaWFTdHJlYW1UcmFjayB7Ci0gIC8qKiBUcmFja3MgTWVkaWFTdHJlYW1UcmFja0lu
dGVyZmFjZS5UcmFja1N0YXRlICovCi0gIHB1YmxpYyBlbnVtIFN0YXRlIHsgTElWRSwgRU5ERUQg
fQotCi0gIGZpbmFsIGxvbmcgbmF0aXZlVHJhY2s7Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtVHJh
Y2sobG9uZyBuYXRpdmVUcmFjaykgewotICAgIHRoaXMubmF0aXZlVHJhY2sgPSBuYXRpdmVUcmFj
azsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgaWQoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUlkKG5h
dGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcga2luZCgpIHsKLSAgICByZXR1cm4g
bmF0aXZlS2luZChuYXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBlbmFibGVk
KCkgewotICAgIHJldHVybiBuYXRpdmVFbmFibGVkKG5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1
YmxpYyBib29sZWFuIHNldEVuYWJsZWQoYm9vbGVhbiBlbmFibGUpIHsKLSAgICByZXR1cm4gbmF0
aXZlU2V0RW5hYmxlZChuYXRpdmVUcmFjaywgZW5hYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBTdGF0
ZSBzdGF0ZSgpIHsKLSAgICByZXR1cm4gbmF0aXZlU3RhdGUobmF0aXZlVHJhY2spOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBmcmVlKG5hdGl2ZVRyYWNrKTsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlSWQobG9uZyBuYXRpdmVUcmFj
ayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0cmluZyBuYXRpdmVLaW5kKGxvbmcgbmF0
aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUVuYWJs
ZWQobG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4g
bmF0aXZlU2V0RW5hYmxlZChsb25nIG5hdGl2ZVRyYWNrLCBib29sZWFuIGVuYWJsZWQpOwotCi0g
IHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdGF0ZSBuYXRpdmVTdGF0ZShsb25nIG5hdGl2ZVRyYWNr
KTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlVHJhY2sp
OwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZXRyaWNzLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9NZXRyaWNzLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvTWV0cmljcy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTE0ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEu
dXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8vIEphdmEtc2lkZSBvZiBh
bmRyb2lkbWV0cmljc19qbmkuY2MuCi0vLwotLy8gUnRjIGhpc3RvZ3JhbXMgY2FuIGJlIHF1ZXJp
ZWQgdGhyb3VnaCB0aGUgQVBJLCBnZXRBbmRSZXNldCgpLgotLy8gVGhlIHJldHVybmVkIG1hcCBo
b2xkcyB0aGUgbmFtZSBvZiBhIGhpc3RvZ3JhbSBhbmQgaXRzIHNhbXBsZXMuCi0vLwotLy8gRXhh
bXBsZSBvZiB8bWFwfCB3aXRoIG9uZSBoaXN0b2dyYW06Ci0vLyB8bmFtZXw6ICJXZWJSVEMuVmlk
ZW8uSW5wdXRGcmFtZXNQZXJTZWNvbmQiCi0vLyAgICAgfG1pbnw6IDEKLS8vICAgICB8bWF4fDog
MTAwCi0vLyAgICAgfGJ1Y2tldENvdW50fDogNTAKLS8vICAgICB8c2FtcGxlc3w6IFszMF06MQot
Ly8KLS8vIE1vc3QgaGlzdG9ncmFtcyBhcmUgbm90IHVwZGF0ZWQgZnJlcXVlbnRseSAoZS5nLiBt
b3N0IHZpZGVvIG1ldHJpY3MgYXJlIGFuCi0vLyBhdmVyYWdlIG92ZXIgdGhlIGNhbGwgYW5kIHJl
Y29yZGVkIHdoZW4gYSBzdHJlYW0gaXMgcmVtb3ZlZCkuCi0vLyBUaGUgbWV0cmljcyBjYW4gZm9y
IGV4YW1wbGUgYmUgcmV0cmlldmVkIHdoZW4gYSBwZWVyIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgot
Ci1wdWJsaWMgY2xhc3MgTWV0cmljcyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBU
QUcgPSAiTWV0cmljcyI7Ci0KLSAgc3RhdGljIHsKLSAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImpp
bmdsZV9wZWVyY29ubmVjdGlvbl9zbyIpOwotICB9Ci0gIHB1YmxpYyBmaW5hbCBNYXA8U3RyaW5n
LCBIaXN0b2dyYW1JbmZvPiBtYXAgPQotICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBIaXN0b2dy
YW1JbmZvPigpOyAvLyA8bmFtZSwgSGlzdG9ncmFtSW5mbz4KLQotICAvKioKLSAgICogQ2xhc3Mg
aG9sZGluZyBoaXN0b2dyYW0gaW5mb3JtYXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNs
YXNzIEhpc3RvZ3JhbUluZm8gewotICAgIHB1YmxpYyBmaW5hbCBpbnQgbWluOwotICAgIHB1Ymxp
YyBmaW5hbCBpbnQgbWF4OwotICAgIHB1YmxpYyBmaW5hbCBpbnQgYnVja2V0Q291bnQ7Ci0gICAg
cHVibGljIGZpbmFsIE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPiBzYW1wbGVzID0KLSAgICAgICAgbmV3
IEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4oKTsgLy8gPHZhbHVlLCAjIG9mIGV2ZW50cz4KLQot
ICAgIHB1YmxpYyBIaXN0b2dyYW1JbmZvKGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3Vu
dCkgewotICAgICAgdGhpcy5taW4gPSBtaW47Ci0gICAgICB0aGlzLm1heCA9IG1heDsKLSAgICAg
IHRoaXMuYnVja2V0Q291bnQgPSBidWNrZXRDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBhZGRTYW1wbGUoaW50IHZhbHVlLCBpbnQgbnVtRXZlbnRzKSB7Ci0gICAgICBzYW1wbGVzLnB1
dCh2YWx1ZSwgbnVtRXZlbnRzKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgZm9y
IGhvbGRpbmcgdGhlIG5hdGl2ZSBwb2ludGVyIG9mIGEgaGlzdG9ncmFtLiBTaW5jZSB0aGVyZSBp
cyBubyB3YXkgdG8gZGVzdHJveSBhCi0gICAqIGhpc3RvZ3JhbSwgcGxlYXNlIGRvbid0IGNyZWF0
ZSB1bm5lY2Vzc2FyeSBpbnN0YW5jZXMgb2YgdGhpcyBvYmplY3QuIFRoaXMgY2xhc3MgaXMgdGhy
ZWFkIHNhZmUuCi0gICAqCi0gICAqIFVzYWdlIGV4YW1wbGU6Ci0gICAqIHByaXZhdGUgc3RhdGlj
IGZpbmFsIEhpc3RvZ3JhbSBzb21lTWV0cmljSGlzdG9ncmFtID0KLSAgICogICAgIEhpc3RvZ3Jh
bS5jcmVhdGVDb3VudHMoIldlYlJUQy5WaWRlby5Tb21lTWV0cmljIiwgMSwgMTAwMDAsIDUwKTsK
LSAgICogc29tZU1ldHJpY0hpc3RvZ3JhbS5hZGRTYW1wbGUoc29tZVZhcmlhYmxlKTsKLSAgICov
Ci0gIHN0YXRpYyBjbGFzcyBIaXN0b2dyYW0gewotICAgIHByaXZhdGUgZmluYWwgbG9uZyBoYW5k
bGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsgLy8gT25seSB1c2VkIGZvciBsb2dn
aW5nLgotCi0gICAgcHJpdmF0ZSBIaXN0b2dyYW0obG9uZyBoYW5kbGUsIFN0cmluZyBuYW1lKSB7
Ci0gICAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0g
ICAgfQotCi0gICAgc3RhdGljIHB1YmxpYyBIaXN0b2dyYW0gY3JlYXRlQ291bnRzKFN0cmluZyBu
YW1lLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpIHsKLSAgICAgIHJldHVybiBu
ZXcgSGlzdG9ncmFtKG5hdGl2ZUNyZWF0ZUNvdW50cyhuYW1lLCBtaW4sIG1heCwgYnVja2V0Q291
bnQpLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHVibGljIEhpc3RvZ3JhbSBjcmVhdGVF
bnVtZXJhdGlvbihTdHJpbmcgbmFtZSwgaW50IG1heCkgewotICAgICAgcmV0dXJuIG5ldyBIaXN0
b2dyYW0obmF0aXZlQ3JlYXRlRW51bWVyYXRpb24obmFtZSwgbWF4KSwgbmFtZSk7Ci0gICAgfQot
Ci0gICAgcHVibGljIHZvaWQgYWRkU2FtcGxlKGludCBzYW1wbGUpIHsKLSAgICAgIG5hdGl2ZUFk
ZFNhbXBsZShoYW5kbGUsIHNhbXBsZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIGxvbmcgbmF0aXZlQ3JlYXRlQ291bnRzKFN0cmluZyBuYW1lLCBpbnQgbWluLCBpbnQgbWF4
LCBpbnQgYnVja2V0Q291bnQpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2
ZUNyZWF0ZUVudW1lcmF0aW9uKFN0cmluZyBuYW1lLCBpbnQgbWF4KTsKLSAgICBwcml2YXRlIHN0
YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVBZGRTYW1wbGUobG9uZyBoYW5kbGUsIGludCBzYW1wbGUp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZChTdHJpbmcgbmFtZSwgSGlzdG9ncmFtSW5mbyBp
bmZvKSB7Ci0gICAgbWFwLnB1dChuYW1lLCBpbmZvKTsKLSAgfQotCi0gIC8vIEVuYWJsZXMgZ2F0
aGVyaW5nIG9mIG1ldHJpY3MgKHdoaWNoIGNhbiBiZSBmZXRjaGVkIHdpdGggZ2V0QW5kUmVzZXQo
KSkuCi0gIC8vIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaXMg
Y3JlYXRlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGVuYWJsZSgpIHsKLSAgICBuYXRpdmVFbmFi
bGUoKTsKLSAgfQotCi0gIC8vIEdldHMgYW5kIGNsZWFycyBuYXRpdmUgaGlzdG9ncmFtcy4KLSAg
cHVibGljIHN0YXRpYyBNZXRyaWNzIGdldEFuZFJlc2V0KCkgewotICAgIHJldHVybiBuYXRpdmVH
ZXRBbmRSZXNldCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZl
RW5hYmxlKCk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBNZXRyaWNzIG5hdGl2ZUdldEFuZFJl
c2V0KCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvci5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyNTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRv
RGV0ZWN0LkNvbm5lY3Rpb25UeXBlOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdC5JTlZBTElEX05FVF9JRDsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0
Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya0luZm9ybWF0aW9uOwotCi1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1w
b3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgot
ICogQm9ycm93ZWQgZnJvbSBDaHJvbWl1bSdzIHNyYy9uZXQvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
Y2hyb21pdW0vbmV0L05ldHdvcmtDaGFuZ2VOb3RpZmllci5qYXZhCi0gKgotICogVHJpZ2dlcnMg
dXBkYXRlcyB0byB0aGUgdW5kZXJseWluZyBuZXR3b3JrIHN0YXRlIGZyb20gT1MgbmV0d29ya2lu
ZyBldmVudHMuCi0gKgotICogV0FSTklORzogVGhpcyBjbGFzcyBpcyBub3QgdGhyZWFkLXNhZmUu
Ci0gKi8KLXB1YmxpYyBjbGFzcyBOZXR3b3JrTW9uaXRvciB7Ci0gIC8qKgotICAgKiBBbGVydGVk
IHdoZW4gdGhlIGNvbm5lY3Rpb24gdHlwZSBvZiB0aGUgbmV0d29yayBjaGFuZ2VzLgotICAgKiBU
aGUgYWxlcnQgaXMgZmlyZWQgb24gdGhlIFVJIHRocmVhZC4KLSAgICovCi0gIHB1YmxpYyBpbnRl
cmZhY2UgTmV0d29ya09ic2VydmVyIHsKLSAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBl
Q2hhbmdlZChDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSk7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk5ldHdvcmtNb25pdG9yIjsKLSAgcHJpdmF0ZSBz
dGF0aWMgTmV0d29ya01vbml0b3IgaW5zdGFuY2U7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0
IGFwcGxpY2F0aW9uQ29udGV4dDsKLQotICAvLyBOYXRpdmUgb2JzZXJ2ZXJzIG9mIHRoZSBjb25u
ZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8TG9uZz4gbmF0
aXZlTmV0d29ya09ic2VydmVyczsKLSAgLy8gSmF2YSBvYnNlcnZlcnMgb2YgdGhlIGNvbm5lY3Rp
b24gdHlwZSBjaGFuZ2VzLgotICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxOZXR3b3JrT2JzZXJ2
ZXI+IG5ldHdvcmtPYnNlcnZlcnM7Ci0KLSAgLy8gT2JqZWN0IHRoYXQgZGV0ZWN0cyB0aGUgY29u
bmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gIHByaXZhdGUgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0
IGF1dG9EZXRlY3RvcjsKLQotICBwcml2YXRlIENvbm5lY3Rpb25UeXBlIGN1cnJlbnRDb25uZWN0
aW9uVHlwZSA9IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTjsKLQotICBwcml2YXRl
IE5ldHdvcmtNb25pdG9yKENvbnRleHQgY29udGV4dCkgewotICAgIGFzc2VydElzVHJ1ZShjb250
ZXh0ICE9IG51bGwpOwotICAgIGFwcGxpY2F0aW9uQ29udGV4dCA9Ci0gICAgICAgIGNvbnRleHQu
Z2V0QXBwbGljYXRpb25Db250ZXh0KCkgPT0gbnVsbCA/IGNvbnRleHQgOiBjb250ZXh0LmdldEFw
cGxpY2F0aW9uQ29udGV4dCgpOwotCi0gICAgbmF0aXZlTmV0d29ya09ic2VydmVycyA9IG5ldyBB
cnJheUxpc3Q8TG9uZz4oKTsKLSAgICBuZXR3b3JrT2JzZXJ2ZXJzID0gbmV3IEFycmF5TGlzdDxO
ZXR3b3JrT2JzZXJ2ZXI+KCk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZXMgdGhlIHNp
bmdsZXRvbiBvbmNlLgotICAgKiBDYWxsZWQgZnJvbSB0aGUgbmF0aXZlIGNvZGUuCi0gICAqLwot
ICBwdWJsaWMgc3RhdGljIE5ldHdvcmtNb25pdG9yIGluaXQoQ29udGV4dCBjb250ZXh0KSB7Ci0g
ICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgIGluc3RhbmNlID0gbmV3IE5ldHdvcmtN
b25pdG9yKGNvbnRleHQpOwotICAgIH0KLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKLSAgICByZXR1cm4gaW5zdGFu
Y2UgIT0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5z
dGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE5ldHdvcmtNb25pdG9yIGdldEluc3RhbmNl
KCkgewotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIC8qKgotICAgKiBFbmFibGVzIGF1
dG8gZGV0ZWN0aW9uIG9mIHRoZSBjdXJyZW50IG5ldHdvcmsgc3RhdGUgYmFzZWQgb24gbm90aWZp
Y2F0aW9ucyBmcm9tIHRoZSBzeXN0ZW0uCi0gICAqIE5vdGUgdGhhdCBwYXNzaW5nIHRydWUgaGVy
ZSByZXF1aXJlcyB0aGUgZW1iZWRkaW5nIGFwcCBoYXZlIHRoZSBwbGF0Zm9ybSBBQ0NFU1NfTkVU
V09SS19TVEFURQotICAgKiBwZXJtaXNzaW9uLgotICAgKgotICAgKiBAcGFyYW0gc2hvdWxkQXV0
b0RldGVjdCB0cnVlIGlmIHRoZSBOZXR3b3JrTW9uaXRvciBzaG91bGQgbGlzdGVuIGZvciBzeXN0
ZW0gY2hhbmdlcyBpbgotICAgKiAgbmV0d29yayBjb25uZWN0aXZpdHkuCi0gICAqLwotICBwdWJs
aWMgc3RhdGljIHZvaWQgc2V0QXV0b0RldGVjdENvbm5lY3Rpdml0eVN0YXRlKGJvb2xlYW4gc2hv
dWxkQXV0b0RldGVjdCkgewotICAgIGdldEluc3RhbmNlKCkuc2V0QXV0b0RldGVjdENvbm5lY3Rp
dml0eVN0YXRlSW50ZXJuYWwoc2hvdWxkQXV0b0RldGVjdCk7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyB2b2lkIGFzc2VydElzVHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29u
ZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIHRvIGJl
IHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICAvLyBDYWxsZWQgYnkgdGhlIG5hdGl2ZSBjb2RlLgot
ICBwcml2YXRlIHZvaWQgc3RhcnRNb25pdG9yaW5nKGxvbmcgbmF0aXZlT2JzZXJ2ZXIpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiU3RhcnQgbW9uaXRvcmluZyBmcm9tIG5hdGl2ZSBvYnNlcnZlciAi
ICsgbmF0aXZlT2JzZXJ2ZXIpOwotICAgIG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMuYWRkKG5hdGl2
ZU9ic2VydmVyKTsKLSAgICBzZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5U3RhdGVJbnRlcm5hbCh0
cnVlKTsKLSAgfQotCi0gIC8vIENhbGxlZCBieSB0aGUgbmF0aXZlIGNvZGUuCi0gIHByaXZhdGUg
dm9pZCBzdG9wTW9uaXRvcmluZyhsb25nIG5hdGl2ZU9ic2VydmVyKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgIlN0b3AgbW9uaXRvcmluZyBmcm9tIG5hdGl2ZSBvYnNlcnZlciAiICsgbmF0aXZlT2Jz
ZXJ2ZXIpOwotICAgIHNldEF1dG9EZXRlY3RDb25uZWN0aXZpdHlTdGF0ZUludGVybmFsKGZhbHNl
KTsKLSAgICBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzLnJlbW92ZShuYXRpdmVPYnNlcnZlcik7Ci0g
IH0KLQotICAvLyBDYWxsZWQgYnkgdGhlIG5hdGl2ZSBjb2RlIHRvIGdldCB0aGUgQW5kcm9pZCBT
REsgdmVyc2lvbi4KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGFuZHJvaWRTZGtJbnQoKSB7Ci0gICAg
cmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVDsKLSAgfQotCi0gIHByaXZhdGUgQ29ubmVjdGlv
blR5cGUgZ2V0Q3VycmVudENvbm5lY3Rpb25UeXBlKCkgewotICAgIHJldHVybiBjdXJyZW50Q29u
bmVjdGlvblR5cGU7Ci0gIH0KLQotICBwcml2YXRlIGxvbmcgZ2V0Q3VycmVudERlZmF1bHROZXRJ
ZCgpIHsKLSAgICByZXR1cm4gYXV0b0RldGVjdG9yID09IG51bGwgPyBJTlZBTElEX05FVF9JRCA6
IGF1dG9EZXRlY3Rvci5nZXREZWZhdWx0TmV0SWQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBk
ZXN0cm95QXV0b0RldGVjdG9yKCkgewotICAgIGlmIChhdXRvRGV0ZWN0b3IgIT0gbnVsbCkgewot
ICAgICAgYXV0b0RldGVjdG9yLmRlc3Ryb3koKTsKLSAgICAgIGF1dG9EZXRlY3RvciA9IG51bGw7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEF1dG9EZXRlY3RDb25uZWN0aXZpdHlT
dGF0ZUludGVybmFsKGJvb2xlYW4gc2hvdWxkQXV0b0RldGVjdCkgewotICAgIGlmICghc2hvdWxk
QXV0b0RldGVjdCkgewotICAgICAgZGVzdHJveUF1dG9EZXRlY3RvcigpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoYXV0b0RldGVjdG9yID09IG51bGwpIHsKLSAgICAgIGF1dG9EZXRl
Y3RvciA9IG5ldyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QobmV3IE5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdC5PYnNlcnZlcigpIHsKLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGlj
IHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlv
blR5cGUpIHsKLSAgICAgICAgICB1cGRhdGVDdXJyZW50Q29ubmVjdGlvblR5cGUobmV3Q29ubmVj
dGlvblR5cGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1Ymxp
YyB2b2lkIG9uTmV0d29ya0Nvbm5lY3QoTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvKSB7
Ci0gICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJzT2ZOZXR3b3JrQ29ubmVjdChuZXR3b3JrSW5mbyk7
Ci0gICAgICAgIH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25O
ZXR3b3JrRGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUpIHsKLSAgICAgICAgICBub3RpZnlP
YnNlcnZlcnNPZk5ldHdvcmtEaXNjb25uZWN0KG5ldHdvcmtIYW5kbGUpOwotICAgICAgICB9Ci0g
ICAgICB9LCBhcHBsaWNhdGlvbkNvbnRleHQpOwotICAgICAgZmluYWwgTmV0d29ya01vbml0b3JB
dXRvRGV0ZWN0Lk5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUgPQotICAgICAgICAgIGF1dG9EZXRl
Y3Rvci5nZXRDdXJyZW50TmV0d29ya1N0YXRlKCk7Ci0gICAgICB1cGRhdGVDdXJyZW50Q29ubmVj
dGlvblR5cGUoTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LmdldENvbm5lY3Rpb25UeXBlKG5ldHdv
cmtTdGF0ZSkpOwotICAgICAgdXBkYXRlQWN0aXZlTmV0d29ya0xpc3QoKTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgdXBkYXRlQ3VycmVudENvbm5lY3Rpb25UeXBlKENvbm5lY3Rpb25U
eXBlIG5ld0Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgY3VycmVudENvbm5lY3Rpb25UeXBlID0gbmV3
Q29ubmVjdGlvblR5cGU7Ci0gICAgbm90aWZ5T2JzZXJ2ZXJzT2ZDb25uZWN0aW9uVHlwZUNoYW5n
ZShuZXdDb25uZWN0aW9uVHlwZSk7Ci0gIH0KLQotICAvKioKLSAgICogQWxlcnRzIGFsbCBvYnNl
cnZlcnMgb2YgYSBjb25uZWN0aW9uIGNoYW5nZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBub3Rp
ZnlPYnNlcnZlcnNPZkNvbm5lY3Rpb25UeXBlQ2hhbmdlKENvbm5lY3Rpb25UeXBlIG5ld0Nvbm5l
Y3Rpb25UeXBlKSB7Ci0gICAgZm9yIChsb25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlTmV0d29y
a09ic2VydmVycykgewotICAgICAgbmF0aXZlTm90aWZ5Q29ubmVjdGlvblR5cGVDaGFuZ2VkKG5h
dGl2ZU9ic2VydmVyKTsKLSAgICB9Ci0gICAgZm9yIChOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIg
OiBuZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBvYnNlcnZlci5vbkNvbm5lY3Rpb25UeXBlQ2hh
bmdlZChuZXdDb25uZWN0aW9uVHlwZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG5v
dGlmeU9ic2VydmVyc09mTmV0d29ya0Nvbm5lY3QoTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJ
bmZvKSB7Ci0gICAgZm9yIChsb25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlTmV0d29ya09ic2Vy
dmVycykgewotICAgICAgbmF0aXZlTm90aWZ5T2ZOZXR3b3JrQ29ubmVjdChuYXRpdmVPYnNlcnZl
ciwgbmV0d29ya0luZm8pOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBub3RpZnlPYnNl
cnZlcnNPZk5ldHdvcmtEaXNjb25uZWN0KGxvbmcgbmV0d29ya0hhbmRsZSkgewotICAgIGZvciAo
bG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMpIHsKLSAgICAgIG5h
dGl2ZU5vdGlmeU9mTmV0d29ya0Rpc2Nvbm5lY3QobmF0aXZlT2JzZXJ2ZXIsIG5ldHdvcmtIYW5k
bGUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVBY3RpdmVOZXR3b3JrTGlz
dCgpIHsKLSAgICBMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4gbmV0d29ya0luZm9MaXN0ID0gYXV0
b0RldGVjdG9yLmdldEFjdGl2ZU5ldHdvcmtMaXN0KCk7Ci0gICAgaWYgKG5ldHdvcmtJbmZvTGlz
dCA9PSBudWxsIHx8IG5ldHdvcmtJbmZvTGlzdC5zaXplKCkgPT0gMCkgewotICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIE5ldHdvcmtJbmZvcm1hdGlvbltdIG5ldHdvcmtJbmZvcyA9IG5ldyBO
ZXR3b3JrSW5mb3JtYXRpb25bbmV0d29ya0luZm9MaXN0LnNpemUoKV07Ci0gICAgbmV0d29ya0lu
Zm9zID0gbmV0d29ya0luZm9MaXN0LnRvQXJyYXkobmV0d29ya0luZm9zKTsKLSAgICBmb3IgKGxv
bmcgbmF0aXZlT2JzZXJ2ZXIgOiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBuYXRp
dmVOb3RpZnlPZkFjdGl2ZU5ldHdvcmtMaXN0KG5hdGl2ZU9ic2VydmVyLCBuZXR3b3JrSW5mb3Mp
OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBZGRzIGFuIG9ic2VydmVyIGZvciBhbnkgY29u
bmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkTmV0
d29ya09ic2VydmVyKE5ldHdvcmtPYnNlcnZlciBvYnNlcnZlcikgewotICAgIGdldEluc3RhbmNl
KCkuYWRkTmV0d29ya09ic2VydmVySW50ZXJuYWwob2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHJpdmF0
ZSB2b2lkIGFkZE5ldHdvcmtPYnNlcnZlckludGVybmFsKE5ldHdvcmtPYnNlcnZlciBvYnNlcnZl
cikgewotICAgIG5ldHdvcmtPYnNlcnZlcnMuYWRkKG9ic2VydmVyKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBSZW1vdmVzIGFuIG9ic2VydmVyIGZvciBhbnkgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3ZlTmV0d29ya09ic2VydmVyKE5ldHdv
cmtPYnNlcnZlciBvYnNlcnZlcikgewotICAgIGdldEluc3RhbmNlKCkucmVtb3ZlTmV0d29ya09i
c2VydmVySW50ZXJuYWwob2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZU5l
dHdvcmtPYnNlcnZlckludGVybmFsKE5ldHdvcmtPYnNlcnZlciBvYnNlcnZlcikgewotICAgIG5l
dHdvcmtPYnNlcnZlcnMucmVtb3ZlKG9ic2VydmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVj
a3MgaWYgdGhlcmUgY3VycmVudGx5IGlzIGNvbm5lY3Rpdml0eS4KLSAgICovCi0gIHB1YmxpYyBz
dGF0aWMgYm9vbGVhbiBpc09ubGluZSgpIHsKLSAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9u
VHlwZSA9IGdldEluc3RhbmNlKCkuZ2V0Q3VycmVudENvbm5lY3Rpb25UeXBlKCk7Ci0gICAgcmV0
dXJuIGNvbm5lY3Rpb25UeXBlICE9IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fTk9ORTsKLSAg
fQotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlTm90aWZ5Q29ubmVjdGlvblR5cGVDaGFu
Z2VkKGxvbmcgbmF0aXZlUHRyKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVOb3RpZnlP
Zk5ldHdvcmtDb25uZWN0KGxvbmcgbmF0aXZlUHRyLCBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29y
a0luZm8pOwotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeU9mTmV0d29ya0Rpc2Nv
bm5lY3QobG9uZyBuYXRpdmVQdHIsIGxvbmcgbmV0d29ya0hhbmRsZSk7Ci0gIHByaXZhdGUgbmF0
aXZlIHZvaWQgbmF0aXZlTm90aWZ5T2ZBY3RpdmVOZXR3b3JrTGlzdCgKLSAgICAgIGxvbmcgbmF0
aXZlUHRyLCBOZXR3b3JrSW5mb3JtYXRpb25bXSBuZXR3b3JrSW5mb3MpOwotCi0gIC8vIEZvciB0
ZXN0aW5nIG9ubHkuCi0gIHN0YXRpYyB2b2lkIHJlc2V0SW5zdGFuY2VGb3JUZXN0cyhDb250ZXh0
IGNvbnRleHQpIHsKLSAgICBpbnN0YW5jZSA9IG5ldyBOZXR3b3JrTW9uaXRvcihjb250ZXh0KTsK
LSAgfQotCi0gIC8vIEZvciB0ZXN0aW5nIG9ubHkuCi0gIHB1YmxpYyBzdGF0aWMgTmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0IGdldEF1dG9EZXRlY3RvckZvclRlc3QoKSB7Ci0gICAgcmV0dXJuIGdl
dEluc3RhbmNlKCkuYXV0b0RldGVjdG9yOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L05ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2MjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0Lk5ldHdvcmtDYXBhYmlsaXRpZXMu
TkVUX0NBUEFCSUxJVFlfSU5URVJORVQ7Ci1pbXBvcnQgc3RhdGljIGFuZHJvaWQubmV0Lk5ldHdv
cmtDYXBhYmlsaXRpZXMuVFJBTlNQT1JUX0NFTExVTEFSOwotCi1pbXBvcnQgYW5kcm9pZC5NYW5p
ZmVzdC5wZXJtaXNzaW9uOwotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TdXBwcmVzc0xpbnQ7
Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBv
cnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25u
ZWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXIu
TmV0d29ya0NhbGxiYWNrOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtBZGRyZXNzOwotaW1wb3J0
IGFuZHJvaWQubmV0LkxpbmtQcm9wZXJ0aWVzOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcms7
Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya0NhcGFiaWxpdGllczsKLWltcG9ydCBhbmRyb2lk
Lm5ldC5OZXR3b3JrSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrUmVxdWVzdDsKLWlt
cG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlJbmZvOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmku
V2lmaU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnRl
bGVwaG9ueS5UZWxlcGhvbnlNYW5hZ2VyOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsK
LWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBCb3Jyb3dlZCBmcm9tIENocm9taXVt
J3MKLSAqIHNyYy9uZXQvYW5kcm9pZC9qYXZhL3NyYy9vcmcvY2hyb21pdW0vbmV0L05ldHdvcmtD
aGFuZ2VOb3RpZmllckF1dG9EZXRlY3QuamF2YQotICoKLSAqIFVzZWQgYnkgdGhlIE5ldHdvcmtN
b25pdG9yIHRvIGxpc3RlbiB0byBwbGF0Zm9ybSBjaGFuZ2VzIGluIGNvbm5lY3Rpdml0eS4KLSAq
IE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBjbGFzcyByZXF1aXJlcyB0aGF0IHRoZSBhcHAgaGF2ZSB0
aGUgcGxhdGZvcm0KLSAqIEFDQ0VTU19ORVRXT1JLX1NUQVRFIHBlcm1pc3Npb24uCi0gKi8KLXB1
YmxpYyBjbGFzcyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgZXh0ZW5kcyBCcm9hZGNhc3RSZWNl
aXZlciB7Ci0gIHB1YmxpYyBzdGF0aWMgZW51bSBDb25uZWN0aW9uVHlwZSB7Ci0gICAgQ09OTkVD
VElPTl9VTktOT1dOLAotICAgIENPTk5FQ1RJT05fRVRIRVJORVQsCi0gICAgQ09OTkVDVElPTl9X
SUZJLAotICAgIENPTk5FQ1RJT05fNEcsCi0gICAgQ09OTkVDVElPTl8zRywKLSAgICBDT05ORUNU
SU9OXzJHLAotICAgIENPTk5FQ1RJT05fVU5LTk9XTl9DRUxMVUxBUiwKLSAgICBDT05ORUNUSU9O
X0JMVUVUT09USCwKLSAgICBDT05ORUNUSU9OX05PTkUKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMg
Y2xhc3MgSVBBZGRyZXNzIHsKLSAgICBwdWJsaWMgZmluYWwgYnl0ZVtdIGFkZHJlc3M7Ci0gICAg
cHVibGljIElQQWRkcmVzcyhieXRlW10gYWRkcmVzcykgewotICAgICAgdGhpcy5hZGRyZXNzID0g
YWRkcmVzczsKLSAgICB9Ci0gIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIE5ldHdvcmtNb25p
dG9yLk5ldHdvcmtJbmZvcm1hdGlvbiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIE5ldHdvcmtJ
bmZvcm1hdGlvbiB7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBuYW1lOwotICAgIHB1YmxpYyBm
aW5hbCBDb25uZWN0aW9uVHlwZSB0eXBlOwotICAgIHB1YmxpYyBmaW5hbCBsb25nIGhhbmRsZTsK
LSAgICBwdWJsaWMgZmluYWwgSVBBZGRyZXNzW10gaXBBZGRyZXNzZXM7Ci0gICAgcHVibGljIE5l
dHdvcmtJbmZvcm1hdGlvbigKLSAgICAgICAgU3RyaW5nIG5hbWUsIENvbm5lY3Rpb25UeXBlIHR5
cGUsIGxvbmcgaGFuZGxlLCBJUEFkZHJlc3NbXSBhZGRyZXNzZXMpIHsKLSAgICAgIHRoaXMubmFt
ZSA9IG5hbWU7Ci0gICAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgICAgdGhpcy5oYW5kbGUgPSBo
YW5kbGU7Ci0gICAgICB0aGlzLmlwQWRkcmVzc2VzID0gYWRkcmVzc2VzOwotICAgIH0KLSAgfTsK
LQotICBzdGF0aWMgY2xhc3MgTmV0d29ya1N0YXRlIHsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xl
YW4gY29ubmVjdGVkOwotICAgIC8vIERlZmluZWQgZnJvbSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZ
UEVfWFhYIGZvciBub24tbW9iaWxlOyBmb3IgbW9iaWxlLCBpdCBpcwotICAgIC8vIGZ1cnRoZXIg
ZGl2aWRlZCBpbnRvIDJHLCAzRywgb3IgNEcgZnJvbSB0aGUgc3VidHlwZS4KLSAgICBwcml2YXRl
IGZpbmFsIGludCB0eXBlOwotICAgIC8vIERlZmluZWQgZnJvbSBOZXR3b3JrSW5mby5zdWJ0eXBl
LCB3aGljaCBpcyBvbmUgb2YgdGhlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1hYWHMu
Ci0gICAgLy8gV2lsbCBiZSB1c2VmdWwgdG8gZmluZCB0aGUgbWF4aW11bSBiYW5kd2lkdGguCi0g
ICAgcHJpdmF0ZSBmaW5hbCBpbnQgc3VidHlwZTsKLQotICAgIHB1YmxpYyBOZXR3b3JrU3RhdGUo
Ym9vbGVhbiBjb25uZWN0ZWQsIGludCB0eXBlLCBpbnQgc3VidHlwZSkgewotICAgICAgdGhpcy5j
b25uZWN0ZWQgPSBjb25uZWN0ZWQ7Ci0gICAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgICAgdGhp
cy5zdWJ0eXBlID0gc3VidHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0Nvbm5l
Y3RlZCgpIHsKLSAgICAgIHJldHVybiBjb25uZWN0ZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIGlu
dCBnZXROZXR3b3JrVHlwZSgpIHsKLSAgICAgIHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIHB1
YmxpYyBpbnQgZ2V0TmV0d29ya1N1YlR5cGUoKSB7Ci0gICAgICByZXR1cm4gc3VidHlwZTsKLSAg
ICB9Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBtZXRob2RzIGluIHRoaXMgY2xhc3MgZ2V0IGNhbGxl
ZCB3aGVuIHRoZSBuZXR3b3JrIGNoYW5nZXMgaWYgdGhlIGNhbGxiYWNrCi0gICAqIGlzIHJlZ2lz
dGVyZWQgd2l0aCBhIHByb3BlciBuZXR3b3JrIHJlcXVlc3QuIEl0IGlzIG9ubHkgYXZhaWxhYmxl
IGluIEFuZHJvaWQgTG9sbGlwb3AKLSAgICogYW5kIGFib3ZlLgotICAgKi8KLSAgQFN1cHByZXNz
TGludCgiTmV3QXBpIikKLSAgcHJpdmF0ZSBjbGFzcyBTaW1wbGVOZXR3b3JrQ2FsbGJhY2sgZXh0
ZW5kcyBOZXR3b3JrQ2FsbGJhY2sgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
QXZhaWxhYmxlKE5ldHdvcmsgbmV0d29yaykgewotICAgICAgTG9nZ2luZy5kKFRBRywgIk5ldHdv
cmsgYmVjb21lcyBhdmFpbGFibGU6ICIgKyBuZXR3b3JrLnRvU3RyaW5nKCkpOwotICAgICAgb25O
ZXR3b3JrQ2hhbmdlZChuZXR3b3JrKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkNhcGFiaWxpdGllc0NoYW5nZWQoTmV0d29yayBuZXR3b3JrLCBOZXR3b3JrQ2Fw
YWJpbGl0aWVzIG5ldHdvcmtDYXBhYmlsaXRpZXMpIHsKLSAgICAgIC8vIEEgY2FwYWJpbGl0aWVz
IGNoYW5nZSBtYXkgaW5kaWNhdGUgdGhlIENvbm5lY3Rpb25UeXBlIGhhcyBjaGFuZ2VkLAotICAg
ICAgLy8gc28gZm9yd2FyZCB0aGUgbmV3IE5ldHdvcmtJbmZvcm1hdGlvbiBhbG9uZyB0byB0aGUg
b2JzZXJ2ZXIuCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiY2FwYWJpbGl0aWVzIGNoYW5nZWQ6ICIg
KyBuZXR3b3JrQ2FwYWJpbGl0aWVzLnRvU3RyaW5nKCkpOwotICAgICAgb25OZXR3b3JrQ2hhbmdl
ZChuZXR3b3JrKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkxp
bmtQcm9wZXJ0aWVzQ2hhbmdlZChOZXR3b3JrIG5ldHdvcmssIExpbmtQcm9wZXJ0aWVzIGxpbmtQ
cm9wZXJ0aWVzKSB7Ci0gICAgICAvLyBBIGxpbmsgcHJvcGVydHkgY2hhbmdlIG1heSBpbmRpY2F0
ZSB0aGUgSVAgYWRkcmVzcyBjaGFuZ2VzLgotICAgICAgLy8gc28gZm9yd2FyZCB0aGUgbmV3IE5l
dHdvcmtJbmZvcm1hdGlvbiB0byB0aGUgb2JzZXJ2ZXIuCi0gICAgICBMb2dnaW5nLmQoVEFHLCAi
bGluayBwcm9wZXJ0aWVzIGNoYW5nZWQ6ICIgKyBsaW5rUHJvcGVydGllcy50b1N0cmluZygpKTsK
LSAgICAgIG9uTmV0d29ya0NoYW5nZWQobmV0d29yayk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgb25Mb3NpbmcoTmV0d29yayBuZXR3b3JrLCBpbnQgbWF4TXNUb0xp
dmUpIHsKLSAgICAgIC8vIFRlbGwgdGhlIG5ldHdvcmsgaXMgZ29pbmcgdG8gbG9zZSBpbiBNYXhN
c1RvTGl2ZSBtaWxsaXNlY29uZHMuCi0gICAgICAvLyBXZSBtYXkgdXNlIHRoaXMgc2lnbmFsIGxh
dGVyLgotICAgICAgTG9nZ2luZy5kKAotICAgICAgICAgIFRBRywgIk5ldHdvcmsgIiArIG5ldHdv
cmsudG9TdHJpbmcoKSArICIgaXMgYWJvdXQgdG8gbG9zZSBpbiAiICsgbWF4TXNUb0xpdmUgKyAi
bXMiKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkxvc3QoTmV0
d29yayBuZXR3b3JrKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiTmV0d29yayAiICsgbmV0d29y
ay50b1N0cmluZygpICsgIiBpcyBkaXNjb25uZWN0ZWQiKTsKLSAgICAgIG9ic2VydmVyLm9uTmV0
d29ya0Rpc2Nvbm5lY3QobmV0d29ya1RvTmV0SWQobmV0d29yaykpOwotICAgIH0KLQotICAgIHBy
aXZhdGUgdm9pZCBvbk5ldHdvcmtDaGFuZ2VkKE5ldHdvcmsgbmV0d29yaykgewotICAgICAgTmV0
d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvcm1hdGlvbiA9IGNvbm5lY3Rpdml0eU1hbmFnZXJE
ZWxlZ2F0ZS5uZXR3b3JrVG9JbmZvKG5ldHdvcmspOwotICAgICAgaWYgKG5ldHdvcmtJbmZvcm1h
dGlvbiAhPSBudWxsKSB7Ci0gICAgICAgIG9ic2VydmVyLm9uTmV0d29ya0Nvbm5lY3QobmV0d29y
a0luZm9ybWF0aW9uKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiogUXVlcmllcyB0aGUg
Q29ubmVjdGl2aXR5TWFuYWdlciBmb3IgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgY29u
bmVjdGlvbi4gKi8KLSAgc3RhdGljIGNsYXNzIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSB7
Ci0gICAgLyoqCi0gICAgICogIE5vdGU6IEluIHNvbWUgcmFyZSBBbmRyb2lkIHN5c3RlbXMgY29u
bmVjdGl2aXR5TWFuYWdlciBpcyBudWxsLiAgV2UgaGFuZGxlIHRoYXQKLSAgICAgKiAgZ3JhY2Vm
dWxseSBiZWxvdy4KLSAgICAgKi8KLSAgICBwcml2YXRlIGZpbmFsIENvbm5lY3Rpdml0eU1hbmFn
ZXIgY29ubmVjdGl2aXR5TWFuYWdlcjsKLQotICAgIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXIgPQotICAgICAg
ICAgIChDb25uZWN0aXZpdHlNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4
dC5DT05ORUNUSVZJVFlfU0VSVklDRSk7Ci0gICAgfQotCi0gICAgLy8gRm9yIHRlc3RpbmcuCi0g
ICAgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlKCkgewotICAgICAgLy8gQWxsIHRoZSBtZXRo
b2RzIGJlbG93IHNob3VsZCBiZSBvdmVycmlkZGVuLgotICAgICAgY29ubmVjdGl2aXR5TWFuYWdl
ciA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBjb25uZWN0aW9uIHR5
cGUgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudAotICAgICAqIGRlZmF1
bHQgbmV0d29yay4KLSAgICAgKi8KLSAgICBOZXR3b3JrU3RhdGUgZ2V0TmV0d29ya1N0YXRlKCkg
ewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1
cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwgLTEsIC0xKTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biBnZXROZXR3b3JrU3RhdGUoY29ubmVjdGl2aXR5TWFuYWdlci5nZXRBY3RpdmVOZXR3b3JrSW5m
bygpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGNvbm5lY3Rpb24gdHlwZSBh
bmQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHxuZXR3b3JrfC4KLSAgICAgKiBPbmx5IGNhbGxh
YmxlIG9uIExvbGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcy4KLSAgICAgKi8KLSAgICBAU3VwcHJl
c3NMaW50KCJOZXdBcGkiKQotICAgIE5ldHdvcmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoTmV0d29y
ayBuZXR3b3JrKSB7Ci0gICAgICBpZiAoY29ubmVjdGl2aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0g
ICAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGZhbHNlLCAtMSwgLTEpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIGdldE5ldHdvcmtTdGF0ZShjb25uZWN0aXZpdHlNYW5hZ2VyLmdldE5ldHdv
cmtJbmZvKG5ldHdvcmspKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGNvbm5l
Y3Rpb24gdHlwZSBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSBuZXR3b3JrSW5m
by4KLSAgICAgKi8KLSAgICBOZXR3b3JrU3RhdGUgZ2V0TmV0d29ya1N0YXRlKE5ldHdvcmtJbmZv
IG5ldHdvcmtJbmZvKSB7Ci0gICAgICBpZiAobmV0d29ya0luZm8gPT0gbnVsbCB8fCAhbmV0d29y
a0luZm8uaXNDb25uZWN0ZWQoKSkgewotICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShm
YWxzZSwgLTEsIC0xKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKHRy
dWUsIG5ldHdvcmtJbmZvLmdldFR5cGUoKSwgbmV0d29ya0luZm8uZ2V0U3VidHlwZSgpKTsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGFsbCBjb25uZWN0ZWQgbmV0d29ya3MuCi0g
ICAgICogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuCi0gICAg
ICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBOZXR3b3JrW10gZ2V0QWxsTmV0
d29ya3MoKSB7Ci0gICAgICBpZiAoY29ubmVjdGl2aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0gICAg
ICAgIHJldHVybiBuZXcgTmV0d29ya1swXTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBjb25uZWN0
aXZpdHlNYW5hZ2VyLmdldEFsbE5ldHdvcmtzKCk7Ci0gICAgfQotCi0gICAgTGlzdDxOZXR3b3Jr
SW5mb3JtYXRpb24+IGdldEFjdGl2ZU5ldHdvcmtMaXN0KCkgewotICAgICAgaWYgKCFzdXBwb3J0
TmV0d29ya0NhbGxiYWNrKCkpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAg
ICBBcnJheUxpc3Q8TmV0d29ya0luZm9ybWF0aW9uPiBuZXRJbmZvTGlzdCA9IG5ldyBBcnJheUxp
c3Q8TmV0d29ya0luZm9ybWF0aW9uPigpOwotICAgICAgZm9yIChOZXR3b3JrIG5ldHdvcmsgOiBn
ZXRBbGxOZXR3b3JrcygpKSB7Ci0gICAgICAgIE5ldHdvcmtJbmZvcm1hdGlvbiBpbmZvID0gbmV0
d29ya1RvSW5mbyhuZXR3b3JrKTsKLSAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgewotICAgICAg
ICAgIG5ldEluZm9MaXN0LmFkZChpbmZvKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0
dXJuIG5ldEluZm9MaXN0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIE5l
dElEIG9mIHRoZSBjdXJyZW50IGRlZmF1bHQgbmV0d29yay4gUmV0dXJucwotICAgICAqIElOVkFM
SURfTkVUX0lEIGlmIG5vIGN1cnJlbnQgZGVmYXVsdCBuZXR3b3JrIGNvbm5lY3RlZC4KLSAgICAg
KiBPbmx5IGNhbGxhYmxlIG9uIExvbGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcy4KLSAgICAgKi8K
LSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIGxvbmcgZ2V0RGVmYXVsdE5ldElkKCkg
ewotICAgICAgaWYgKCFzdXBwb3J0TmV0d29ya0NhbGxiYWNrKCkpIHsKLSAgICAgICAgcmV0dXJu
IElOVkFMSURfTkVUX0lEOwotICAgICAgfQotICAgICAgLy8gQW5kcm9pZCBMb2xsaXBvcCBoYWQg
bm8gQVBJIHRvIGdldCB0aGUgZGVmYXVsdCBuZXR3b3JrOyBvbmx5IGFuCi0gICAgICAvLyBBUEkg
dG8gcmV0dXJuIHRoZSBOZXR3b3JrSW5mbyBmb3IgdGhlIGRlZmF1bHQgbmV0d29yay4gVG8KLSAg
ICAgIC8vIGRldGVybWluZSB0aGUgZGVmYXVsdCBuZXR3b3JrIG9uZSBjYW4gZmluZCB0aGUgbmV0
d29yayB3aXRoCi0gICAgICAvLyB0eXBlIG1hdGNoaW5nIHRoYXQgb2YgdGhlIGRlZmF1bHQgbmV0
d29yay4KLSAgICAgIGZpbmFsIE5ldHdvcmtJbmZvIGRlZmF1bHROZXR3b3JrSW5mbyA9IGNvbm5l
Y3Rpdml0eU1hbmFnZXIuZ2V0QWN0aXZlTmV0d29ya0luZm8oKTsKLSAgICAgIGlmIChkZWZhdWx0
TmV0d29ya0luZm8gPT0gbnVsbCkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9ORVRfSUQ7Ci0g
ICAgICB9Ci0gICAgICBmaW5hbCBOZXR3b3JrW10gbmV0d29ya3MgPSBnZXRBbGxOZXR3b3Jrcygp
OwotICAgICAgbG9uZyBkZWZhdWx0TmV0SWQgPSBJTlZBTElEX05FVF9JRDsKLSAgICAgIGZvciAo
TmV0d29yayBuZXR3b3JrIDogbmV0d29ya3MpIHsKLSAgICAgICAgaWYgKCFoYXNJbnRlcm5ldENh
cGFiaWxpdHkobmV0d29yaykpIHsKLSAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBmaW5hbCBOZXR3b3JrSW5mbyBuZXR3b3JrSW5mbyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIu
Z2V0TmV0d29ya0luZm8obmV0d29yayk7Ci0gICAgICAgIGlmIChuZXR3b3JrSW5mbyAhPSBudWxs
ICYmIG5ldHdvcmtJbmZvLmdldFR5cGUoKSA9PSBkZWZhdWx0TmV0d29ya0luZm8uZ2V0VHlwZSgp
KSB7Ci0gICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIG5vdCBiZSBtdWx0aXBsZSBjb25uZWN0ZWQg
bmV0d29ya3Mgb2YgdGhlCi0gICAgICAgICAgLy8gc2FtZSB0eXBlLiBBdCBsZWFzdCBhcyBvZiBB
bmRyb2lkIE1hcnNobWFsbG93IHRoaXMgaXMKLSAgICAgICAgICAvLyBub3Qgc3VwcG9ydGVkLiBJ
ZiB0aGlzIGJlY29tZXMgc3VwcG9ydGVkIHRoaXMgYXNzZXJ0aW9uCi0gICAgICAgICAgLy8gbWF5
IHRyaWdnZXIuIEF0IHRoYXQgcG9pbnQgd2UgY291bGQgY29uc2lkZXIgdXNpbmcKLSAgICAgICAg
ICAvLyBDb25uZWN0aXZpdHlNYW5hZ2VyLmdldERlZmF1bHROZXR3b3JrKCkgdGhvdWdoIHRoaXMK
LSAgICAgICAgICAvLyBtYXkgZ2l2ZSBjb25mdXNpbmcgcmVzdWx0cyB3aXRoIFZQTnMgYW5kIGlz
IG9ubHkKLSAgICAgICAgICAvLyBhdmFpbGFibGUgd2l0aCBBbmRyb2lkIE1hcnNobWFsbG93Lgot
ICAgICAgICAgIGFzc2VydCBkZWZhdWx0TmV0SWQgPT0gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgICAg
ICAgZGVmYXVsdE5ldElkID0gbmV0d29ya1RvTmV0SWQobmV0d29yayk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICAgIHJldHVybiBkZWZhdWx0TmV0SWQ7Ci0gICAgfQotCi0gICAgQFN1cHByZXNz
TGludCgiTmV3QXBpIikKLSAgICBwcml2YXRlIE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrVG9J
bmZvKE5ldHdvcmsgbmV0d29yaykgewotICAgICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRp
ZXMgPSBjb25uZWN0aXZpdHlNYW5hZ2VyLmdldExpbmtQcm9wZXJ0aWVzKG5ldHdvcmspOwotICAg
ICAgLy8gZ2V0TGlua1Byb3BlcnRpZXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgbmV0d29yayBp
cyB1bmtub3duLgotICAgICAgaWYgKGxpbmtQcm9wZXJ0aWVzID09IG51bGwpIHsKLSAgICAgICAg
TG9nZ2luZy53KFRBRywgIkRldGVjdGVkIHVua25vd24gbmV0d29yazogIiArIG5ldHdvcmsudG9T
dHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgaWYgKGxpbmtQ
cm9wZXJ0aWVzLmdldEludGVyZmFjZU5hbWUoKSA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcu
dyhUQUcsICJOdWxsIGludGVyZmFjZSBuYW1lIGZvciBuZXR3b3JrICIgKyBuZXR3b3JrLnRvU3Ry
aW5nKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgTmV0d29ya1N0
YXRlIG5ldHdvcmtTdGF0ZSA9IGdldE5ldHdvcmtTdGF0ZShuZXR3b3JrKTsKLSAgICAgIENvbm5l
Y3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlID0gZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRl
KTsKLSAgICAgIGlmIChjb25uZWN0aW9uVHlwZSA9PSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9O
X05PTkUpIHsKLSAgICAgICAgLy8gVGhpcyBtYXkgbm90IGJlIGFuIGVycm9yLiBUaGUgT1MgbWF5
IHNpZ25hbCBhIG5ldHdvcmsgZXZlbnQgd2l0aCBjb25uZWN0aW9uIHR5cGUKLSAgICAgICAgLy8g
Tk9ORSB3aGVuIHRoZSBuZXR3b3JrIGRpc2Nvbm5lY3RzLgotICAgICAgICBMb2dnaW5nLmQoVEFH
LCAiTmV0d29yayAiICsgbmV0d29yay50b1N0cmluZygpICsgIiBpcyBkaXNjb25uZWN0ZWQiKTsK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNvbWUgYW5kcm9pZCBk
ZXZpY2UgbWF5IHJldHVybiBhIENPTk5FQ1RJT05fVU5LTk9XTl9DRUxMVUxBUiBvciBDT05ORUNU
SU9OX1VOS05PV04gdHlwZSwKLSAgICAgIC8vIHdoaWNoIGFwcGVhcnMgdG8gYmUgdXNhYmxlLiBK
dXN0IGxvZyB0aGVtIGhlcmUuCi0gICAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gQ29ubmVjdGlv
blR5cGUuQ09OTkVDVElPTl9VTktOT1dOCi0gICAgICAgICAgfHwgY29ubmVjdGlvblR5cGUgPT0g
Q29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9VTktOT1dOX0NFTExVTEFSKSB7Ci0gICAgICAgIExv
Z2dpbmcuZChUQUcsICJOZXR3b3JrICIgKyBuZXR3b3JrLnRvU3RyaW5nKCkgKyAiIGNvbm5lY3Rp
b24gdHlwZSBpcyAiICsgY29ubmVjdGlvblR5cGUKLSAgICAgICAgICAgICAgICArICIgYmVjYXVz
ZSBpdCBoYXMgdHlwZSAiICsgbmV0d29ya1N0YXRlLmdldE5ldHdvcmtUeXBlKCkgKyAiIGFuZCBz
dWJ0eXBlICIKLSAgICAgICAgICAgICAgICArIG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrU3ViVHlw
ZSgpKTsKLSAgICAgIH0KLQotICAgICAgTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvcm1h
dGlvbiA9Ci0gICAgICAgICAgbmV3IE5ldHdvcmtJbmZvcm1hdGlvbihsaW5rUHJvcGVydGllcy5n
ZXRJbnRlcmZhY2VOYW1lKCksIGNvbm5lY3Rpb25UeXBlLAotICAgICAgICAgICAgICBuZXR3b3Jr
VG9OZXRJZChuZXR3b3JrKSwgZ2V0SVBBZGRyZXNzZXMobGlua1Byb3BlcnRpZXMpKTsKLSAgICAg
IHJldHVybiBuZXR3b3JrSW5mb3JtYXRpb247Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0
dXJucyB0cnVlIGlmIHtAY29kZSBuZXR3b3JrfSBjYW4gcHJvdmlkZSBJbnRlcm5ldCBhY2Nlc3Mu
IENhbiBiZSB1c2VkIHRvCi0gICAgICogaWdub3JlIHNwZWNpYWxpemVkIG5ldHdvcmtzIChlLmcu
IElNUywgRk9UQSkuCi0gICAgICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBi
b29sZWFuIGhhc0ludGVybmV0Q2FwYWJpbGl0eShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIGlm
IChjb25uZWN0aXZpdHlNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgfQotICAgICAgZmluYWwgTmV0d29ya0NhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMgPSBj
b25uZWN0aXZpdHlNYW5hZ2VyLmdldE5ldHdvcmtDYXBhYmlsaXRpZXMobmV0d29yayk7Ci0gICAg
ICByZXR1cm4gY2FwYWJpbGl0aWVzICE9IG51bGwgJiYgY2FwYWJpbGl0aWVzLmhhc0NhcGFiaWxp
dHkoTkVUX0NBUEFCSUxJVFlfSU5URVJORVQpOwotICAgIH0KLQotICAgIC8qKiBPbmx5IGNhbGxh
YmxlIG9uIExvbGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcy4gKi8KLSAgICBAU3VwcHJlc3NMaW50
KCJOZXdBcGkiKQotICAgIHB1YmxpYyB2b2lkIHJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKE5ldHdv
cmtDYWxsYmFjayBuZXR3b3JrQ2FsbGJhY2spIHsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXIu
cmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2soCi0gICAgICAgICAgbmV3IE5ldHdvcmtSZXF1ZXN0LkJ1
aWxkZXIoKS5hZGRDYXBhYmlsaXR5KE5FVF9DQVBBQklMSVRZX0lOVEVSTkVUKS5idWlsZCgpLAot
ICAgICAgICAgIG5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfQotCi0gICAgLyoqIE9ubHkgY2FsbGFi
bGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJlbGVhc2VzLiAqLwotICAgIEBTdXBwcmVzc0xpbnQo
Ik5ld0FwaSIpCi0gICAgcHVibGljIHZvaWQgcmVxdWVzdE1vYmlsZU5ldHdvcmsoTmV0d29ya0Nh
bGxiYWNrIG5ldHdvcmtDYWxsYmFjaykgewotICAgICAgTmV0d29ya1JlcXVlc3QuQnVpbGRlciBi
dWlsZGVyID0gbmV3IE5ldHdvcmtSZXF1ZXN0LkJ1aWxkZXIoKTsKLSAgICAgIGJ1aWxkZXIuYWRk
Q2FwYWJpbGl0eShORVRfQ0FQQUJJTElUWV9JTlRFUk5FVCkuYWRkVHJhbnNwb3J0VHlwZShUUkFO
U1BPUlRfQ0VMTFVMQVIpOwotICAgICAgY29ubmVjdGl2aXR5TWFuYWdlci5yZXF1ZXN0TmV0d29y
ayhidWlsZGVyLmJ1aWxkKCksIG5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfQotCi0gICAgQFN1cHBy
ZXNzTGludCgiTmV3QXBpIikKLSAgICBJUEFkZHJlc3NbXSBnZXRJUEFkZHJlc3NlcyhMaW5rUHJv
cGVydGllcyBsaW5rUHJvcGVydGllcykgewotICAgICAgSVBBZGRyZXNzW10gaXBBZGRyZXNzZXMg
PSBuZXcgSVBBZGRyZXNzW2xpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKS5zaXplKCld
OwotICAgICAgaW50IGkgPSAwOwotICAgICAgZm9yIChMaW5rQWRkcmVzcyBsaW5rQWRkcmVzcyA6
IGxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRyZXNzZXMoKSkgewotICAgICAgICBpcEFkZHJlc3Nl
c1tpXSA9IG5ldyBJUEFkZHJlc3MobGlua0FkZHJlc3MuZ2V0QWRkcmVzcygpLmdldEFkZHJlc3Mo
KSk7Ci0gICAgICAgICsraTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBpcEFkZHJlc3NlczsKLSAg
ICB9Ci0KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIHB1YmxpYyB2b2lkIHJlbGVh
c2VDYWxsYmFjayhOZXR3b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0gICAgICBpZiAo
c3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJVbnJl
Z2lzdGVyIG5ldHdvcmsgY2FsbGJhY2siKTsKLSAgICAgICAgY29ubmVjdGl2aXR5TWFuYWdlci51
bnJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKG5ldHdvcmtDYWxsYmFjayk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpIHsKLSAgICAg
IHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xM
SVBPUCAmJiBjb25uZWN0aXZpdHlNYW5hZ2VyICE9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoq
IFF1ZXJpZXMgdGhlIFdpZmlNYW5hZ2VyIGZvciBTU0lEIG9mIHRoZSBjdXJyZW50IFdpZmkgY29u
bmVjdGlvbi4gKi8KLSAgc3RhdGljIGNsYXNzIFdpZmlNYW5hZ2VyRGVsZWdhdGUgewotICAgIHBy
aXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotICAgIFdpZmlNYW5hZ2VyRGVsZWdhdGUoQ29u
dGV4dCBjb250ZXh0KSB7Ci0gICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIH0KLQot
ICAgIC8vIEZvciB0ZXN0aW5nLgotICAgIFdpZmlNYW5hZ2VyRGVsZWdhdGUoKSB7Ci0gICAgICAv
LyBBbGwgdGhlIG1ldGhvZHMgYmVsb3cgc2hvdWxkIGJlIG92ZXJyaWRkZW4uCi0gICAgICBjb250
ZXh0ID0gbnVsbDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZ2V0V2lmaVNTSUQoKSB7Ci0gICAgICBm
aW5hbCBJbnRlbnQgaW50ZW50ID0gY29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAg
IG51bGwsIG5ldyBJbnRlbnRGaWx0ZXIoV2lmaU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VE
X0FDVElPTikpOwotICAgICAgaWYgKGludGVudCAhPSBudWxsKSB7Ci0gICAgICAgIGZpbmFsIFdp
ZmlJbmZvIHdpZmlJbmZvID0gaW50ZW50LmdldFBhcmNlbGFibGVFeHRyYShXaWZpTWFuYWdlci5F
WFRSQV9XSUZJX0lORk8pOwotICAgICAgICBpZiAod2lmaUluZm8gIT0gbnVsbCkgewotICAgICAg
ICAgIGZpbmFsIFN0cmluZyBzc2lkID0gd2lmaUluZm8uZ2V0U1NJRCgpOwotICAgICAgICAgIGlm
IChzc2lkICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBzc2lkOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgfQotCi0gIHN0
YXRpYyBmaW5hbCBsb25nIElOVkFMSURfTkVUX0lEID0gLTE7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZyBUQUcgPSAiTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IjsKLQotICAvLyBPYnNl
cnZlciBmb3IgdGhlIGNvbm5lY3Rpb24gdHlwZSBjaGFuZ2UuCi0gIHByaXZhdGUgZmluYWwgT2Jz
ZXJ2ZXIgb2JzZXJ2ZXI7Ci0gIHByaXZhdGUgZmluYWwgSW50ZW50RmlsdGVyIGludGVudEZpbHRl
cjsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0gIC8vIFVzZWQgdG8gcmVxdWVz
dCBtb2JpbGUgbmV0d29yay4gSXQgZG9lcyBub3QgZG8gYW55dGhpbmcgZXhjZXB0IGZvciBrZWVw
aW5nCi0gIC8vIHRoZSBjYWxsYmFjayBmb3IgcmVsZWFzaW5nIHRoZSByZXF1ZXN0LgotICBwcml2
YXRlIGZpbmFsIE5ldHdvcmtDYWxsYmFjayBtb2JpbGVOZXR3b3JrQ2FsbGJhY2s7Ci0gIC8vIFVz
ZWQgdG8gcmVjZWl2ZSB1cGRhdGVzIG9uIGFsbCBuZXR3b3Jrcy4KLSAgcHJpdmF0ZSBmaW5hbCBO
ZXR3b3JrQ2FsbGJhY2sgYWxsTmV0d29ya0NhbGxiYWNrOwotICAvLyBjb25uZWN0aXZpdHlNYW5h
Z2VyRGVsZWdhdGUgYW5kIHdpZmlNYW5hZ2VyRGVsZWdhdGUgYXJlIG9ubHkgbm9uLWZpbmFsIGZv
ciB0ZXN0aW5nLgotICBwcml2YXRlIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBjb25uZWN0
aXZpdHlNYW5hZ2VyRGVsZWdhdGU7Ci0gIHByaXZhdGUgV2lmaU1hbmFnZXJEZWxlZ2F0ZSB3aWZp
TWFuYWdlckRlbGVnYXRlOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1JlZ2lzdGVyZWQ7Ci0gIHBy
aXZhdGUgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGU7Ci0gIHByaXZhdGUgU3RyaW5nIHdp
ZmlTU0lEOwotCi0gIC8qKgotICAgKiBPYnNlcnZlciBpbnRlcmZhY2UgYnkgd2hpY2ggb2JzZXJ2
ZXIgaXMgbm90aWZpZWQgb2YgbmV0d29yayBjaGFuZ2VzLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBpbnRlcmZhY2UgT2JzZXJ2ZXIgewotICAgIC8qKgotICAgICAqIENhbGxlZCB3aGVuIGRlZmF1
bHQgbmV0d29yayBjaGFuZ2VzLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlv
blR5cGVDaGFuZ2VkKENvbm5lY3Rpb25UeXBlIG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgICBwdWJs
aWMgdm9pZCBvbk5ldHdvcmtDb25uZWN0KE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mbyk7
Ci0gICAgcHVibGljIHZvaWQgb25OZXR3b3JrRGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUp
OwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBOZXR3b3JrTW9uaXRvckF1dG9EZXRl
Y3QuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBVSSB0aHJlYWQuCi0gICAqLwotICBAU3VwcHJl
c3NMaW50KCJOZXdBcGkiKQotICBwdWJsaWMgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KE9ic2Vy
dmVyIG9ic2VydmVyLCBDb250ZXh0IGNvbnRleHQpIHsKLSAgICB0aGlzLm9ic2VydmVyID0gb2Jz
ZXJ2ZXI7Ci0gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICBjb25uZWN0aXZpdHlNYW5h
Z2VyRGVsZWdhdGUgPSBuZXcgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlKGNvbnRleHQpOwot
ICAgIHdpZmlNYW5hZ2VyRGVsZWdhdGUgPSBuZXcgV2lmaU1hbmFnZXJEZWxlZ2F0ZShjb250ZXh0
KTsKLQotICAgIGZpbmFsIE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUgPSBjb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUuZ2V0TmV0d29ya1N0YXRlKCk7Ci0gICAgY29ubmVjdGlvblR5cGUgPSBn
ZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUpOwotICAgIHdpZmlTU0lEID0gZ2V0V2lmaVNT
SUQobmV0d29ya1N0YXRlKTsKLSAgICBpbnRlbnRGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKENv
bm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElWSVRZX0FDVElPTik7Ci0KLSAgICByZWdpc3RlclJl
Y2VpdmVyKCk7Ci0gICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5zdXBwb3J0TmV0
d29ya0NhbGxiYWNrKCkpIHsKLSAgICAgIC8vIE9uIEFuZHJvaWQgNi4wLjAsIHRoZSBXUklURV9T
RVRUSU5HUyBwZXJtaXNzaW9uIGlzIG5lY2Vzc2FyeSBmb3IKLSAgICAgIC8vIHJlcXVlc3ROZXR3
b3JrLCBzbyBpdCB3aWxsIGZhaWwuIFRoaXMgd2FzIGZpeGVkIGluIEFuZHJvaWQgNi4wLjEuCi0g
ICAgICBOZXR3b3JrQ2FsbGJhY2sgdGVtcE5ldHdvcmtDYWxsYmFjayA9IG5ldyBOZXR3b3JrQ2Fs
bGJhY2soKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZS5yZXF1ZXN0TW9iaWxlTmV0d29yayh0ZW1wTmV0d29ya0NhbGxiYWNrKTsKLSAgICAgIH0gY2F0
Y2ggKGphdmEubGFuZy5TZWN1cml0eUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcudyhU
QUcsICJVbmFibGUgdG8gb2J0YWluIHBlcm1pc3Npb24gdG8gcmVxdWVzdCBhIGNlbGx1bGFyIG5l
dHdvcmsuIik7Ci0gICAgICAgIHRlbXBOZXR3b3JrQ2FsbGJhY2sgPSBudWxsOwotICAgICAgfQot
ICAgICAgbW9iaWxlTmV0d29ya0NhbGxiYWNrID0gdGVtcE5ldHdvcmtDYWxsYmFjazsKLSAgICAg
IGFsbE5ldHdvcmtDYWxsYmFjayA9IG5ldyBTaW1wbGVOZXR3b3JrQ2FsbGJhY2soKTsKLSAgICAg
IGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5yZWdpc3Rlck5ldHdvcmtDYWxsYmFjayhhbGxO
ZXR3b3JrQ2FsbGJhY2spOwotICAgIH0gZWxzZSB7Ci0gICAgICBtb2JpbGVOZXR3b3JrQ2FsbGJh
Y2sgPSBudWxsOwotICAgICAgYWxsTmV0d29ya0NhbGxiYWNrID0gbnVsbDsKLSAgICB9Ci0gIH0K
LQotICAvKioKLSAgICogQWxsb3dzIG92ZXJyaWRpbmcgdGhlIENvbm5lY3Rpdml0eU1hbmFnZXJE
ZWxlZ2F0ZSBmb3IgdGVzdHMuCi0gICAqLwotICB2b2lkIHNldENvbm5lY3Rpdml0eU1hbmFnZXJE
ZWxlZ2F0ZUZvclRlc3RzKENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSkgewot
ICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSA9IGRlbGVnYXRlOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEFsbG93cyBvdmVycmlkaW5nIHRoZSBXaWZpTWFuYWdlckRlbGVnYXRlIGZvciB0ZXN0
cy4KLSAgICovCi0gIHZvaWQgc2V0V2lmaU1hbmFnZXJEZWxlZ2F0ZUZvclRlc3RzKFdpZmlNYW5h
Z2VyRGVsZWdhdGUgZGVsZWdhdGUpIHsKLSAgICB3aWZpTWFuYWdlckRlbGVnYXRlID0gZGVsZWdh
dGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIHJl
Z2lzdGVyZWQgdG8gcmVjZWl2ZSBuZXR3b3JrIGNvbm5lY3Rpdml0eSBpbnRlbnRzLgotICAgKiBW
aXNpYmxlIGZvciB0ZXN0aW5nLgotICAgKi8KLSAgYm9vbGVhbiBpc1JlY2VpdmVyUmVnaXN0ZXJl
ZEZvclRlc3RpbmcoKSB7Ci0gICAgcmV0dXJuIGlzUmVnaXN0ZXJlZDsKLSAgfQotCi0gIExpc3Q8
TmV0d29ya0luZm9ybWF0aW9uPiBnZXRBY3RpdmVOZXR3b3JrTGlzdCgpIHsKLSAgICByZXR1cm4g
Y29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLmdldEFjdGl2ZU5ldHdvcmtMaXN0KCk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgIGlmIChhbGxOZXR3b3JrQ2FsbGJhY2sg
IT0gbnVsbCkgewotICAgICAgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLnJlbGVhc2VDYWxs
YmFjayhhbGxOZXR3b3JrQ2FsbGJhY2spOwotICAgIH0KLSAgICBpZiAobW9iaWxlTmV0d29ya0Nh
bGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5yZWxl
YXNlQ2FsbGJhY2sobW9iaWxlTmV0d29ya0NhbGxiYWNrKTsKLSAgICB9Ci0gICAgdW5yZWdpc3Rl
clJlY2VpdmVyKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVnaXN0ZXJzIGEgQnJvYWRjYXN0UmVj
ZWl2ZXIgaW4gdGhlIGdpdmVuIGNvbnRleHQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVnaXN0
ZXJSZWNlaXZlcigpIHsKLSAgICBpZiAoaXNSZWdpc3RlcmVkKQotICAgICAgcmV0dXJuOwotCi0g
ICAgaXNSZWdpc3RlcmVkID0gdHJ1ZTsKLSAgICBjb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIodGhp
cywgaW50ZW50RmlsdGVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBVbnJlZ2lzdGVycyB0aGUgQnJv
YWRjYXN0UmVjZWl2ZXIgaW4gdGhlIGdpdmVuIGNvbnRleHQuCi0gICAqLwotICBwcml2YXRlIHZv
aWQgdW5yZWdpc3RlclJlY2VpdmVyKCkgewotICAgIGlmICghaXNSZWdpc3RlcmVkKQotICAgICAg
cmV0dXJuOwotCi0gICAgaXNSZWdpc3RlcmVkID0gZmFsc2U7Ci0gICAgY29udGV4dC51bnJlZ2lz
dGVyUmVjZWl2ZXIodGhpcyk7Ci0gIH0KLQotICBwdWJsaWMgTmV0d29ya1N0YXRlIGdldEN1cnJl
bnROZXR3b3JrU3RhdGUoKSB7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZS5nZXROZXR3b3JrU3RhdGUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIE5ldElEIG9m
IGRldmljZSdzIGN1cnJlbnQgZGVmYXVsdCBjb25uZWN0ZWQgbmV0d29yayB1c2VkIGZvcgotICAg
KiBjb21tdW5pY2F0aW9uLgotICAgKiBPbmx5IGltcGxlbWVudGVkIG9uIExvbGxpcG9wIGFuZCBu
ZXdlciByZWxlYXNlcywgcmV0dXJucyBJTlZBTElEX05FVF9JRAotICAgKiB3aGVuIG5vdCBpbXBs
ZW1lbnRlZC4KLSAgICovCi0gIHB1YmxpYyBsb25nIGdldERlZmF1bHROZXRJZCgpIHsKLSAgICBy
ZXR1cm4gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLmdldERlZmF1bHROZXRJZCgpOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBDb25uZWN0aW9uVHlwZSBnZXRDb25uZWN0aW9uVHlwZShOZXR3
b3JrU3RhdGUgbmV0d29ya1N0YXRlKSB7Ci0gICAgaWYgKCFuZXR3b3JrU3RhdGUuaXNDb25uZWN0
ZWQoKSkgewotICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fTk9ORTsKLSAg
ICB9Ci0KLSAgICBzd2l0Y2ggKG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrVHlwZSgpKSB7Ci0gICAg
ICBjYXNlIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9FVEhFUk5FVDoKLSAgICAgICAgcmV0dXJu
IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fRVRIRVJORVQ7Ci0gICAgICBjYXNlIENvbm5lY3Rp
dml0eU1hbmFnZXIuVFlQRV9XSUZJOgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09O
TkVDVElPTl9XSUZJOwotICAgICAgY2FzZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lNQVg6
Ci0gICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OXzRHOwotICAgICAgY2Fz
ZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfQkxVRVRPT1RIOgotICAgICAgICByZXR1cm4gQ29u
bmVjdGlvblR5cGUuQ09OTkVDVElPTl9CTFVFVE9PVEg7Ci0gICAgICBjYXNlIENvbm5lY3Rpdml0
eU1hbmFnZXIuVFlQRV9NT0JJTEU6Ci0gICAgICAgIC8vIFVzZSBpbmZvcm1hdGlvbiBmcm9tIFRl
bGVwaG9ueU1hbmFnZXIgdG8gY2xhc3NpZnkgdGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIHN3aXRj
aCAobmV0d29ya1N0YXRlLmdldE5ldHdvcmtTdWJUeXBlKCkpIHsKLSAgICAgICAgICBjYXNlIFRl
bGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0dQUlM6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhv
bnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9FREdFOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFu
YWdlci5ORVRXT1JLX1RZUEVfQ0RNQToKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIu
TkVUV09SS19UWVBFXzF4UlRUOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRX
T1JLX1RZUEVfSURFTjoKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNU
SU9OXzJHOwotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfVU1U
UzoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fMDoK
LSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fQToKLSAg
ICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTRFBBOgotICAgICAg
ICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNVUEE6Ci0gICAgICAgICAg
Y2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9IU1BBOgotICAgICAgICAgIGNhc2Ug
VGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfRVZET19COgotICAgICAgICAgIGNhc2UgVGVs
ZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfRUhSUEQ6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhv
bnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9IU1BBUDoKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0
aW9uVHlwZS5DT05ORUNUSU9OXzNHOwotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5O
RVRXT1JLX1RZUEVfTFRFOgotICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5F
Q1RJT05fNEc7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0
aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV05fQ0VMTFVMQVI7Ci0gICAgICAgIH0KLSAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV047
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0V2lmaVNTSUQoTmV0d29ya1N0YXRl
IG5ldHdvcmtTdGF0ZSkgewotICAgIGlmIChnZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUp
ICE9IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fV0lGSSkKLSAgICAgIHJldHVybiAiIjsKLSAg
ICByZXR1cm4gd2lmaU1hbmFnZXJEZWxlZ2F0ZS5nZXRXaWZpU1NJRCgpOwotICB9Ci0KLSAgLy8g
QnJvYWRjYXN0UmVjZWl2ZXIKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShD
b250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICBmaW5hbCBOZXR3b3JrU3RhdGUg
bmV0d29ya1N0YXRlID0gZ2V0Q3VycmVudE5ldHdvcmtTdGF0ZSgpOwotICAgIGlmIChDb25uZWN0
aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9BQ1RJT04uZXF1YWxzKGludGVudC5nZXRBY3Rpb24o
KSkpIHsKLSAgICAgIGNvbm5lY3Rpb25UeXBlQ2hhbmdlZChuZXR3b3JrU3RhdGUpOwotICAgIH0K
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb25uZWN0aW9uVHlwZUNoYW5nZWQoTmV0d29ya1N0YXRl
IG5ldHdvcmtTdGF0ZSkgewotICAgIENvbm5lY3Rpb25UeXBlIG5ld0Nvbm5lY3Rpb25UeXBlID0g
Z2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRlKTsKLSAgICBTdHJpbmcgbmV3V2lmaVNTSUQg
PSBnZXRXaWZpU1NJRChuZXR3b3JrU3RhdGUpOwotICAgIGlmIChuZXdDb25uZWN0aW9uVHlwZSA9
PSBjb25uZWN0aW9uVHlwZSAmJiBuZXdXaWZpU1NJRC5lcXVhbHMod2lmaVNTSUQpKQotICAgICAg
cmV0dXJuOwotCi0gICAgY29ubmVjdGlvblR5cGUgPSBuZXdDb25uZWN0aW9uVHlwZTsKLSAgICB3
aWZpU1NJRCA9IG5ld1dpZmlTU0lEOwotICAgIExvZ2dpbmcuZChUQUcsICJOZXR3b3JrIGNvbm5l
Y3Rpdml0eSBjaGFuZ2VkLCB0eXBlIGlzOiAiICsgY29ubmVjdGlvblR5cGUpOwotICAgIG9ic2Vy
dmVyLm9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgfQotCi0g
IC8qKgotICAgKiBFeHRyYWN0cyBOZXRJRCBvZiBuZXR3b3JrIG9uIExvbGxpcG9wIGFuZCBOZXR3
b3JrSGFuZGxlICh3aGljaCBpcyBtdW5nbGVkCi0gICAqIE5ldElEKSBvbiBNYXJzaG1hbGxvdyBh
bmQgbmV3ZXIgcmVsZWFzZXMuIE9ubHkgYXZhaWxhYmxlIG9uIExvbGxpcG9wIGFuZAotICAgKiBu
ZXdlciByZWxlYXNlcy4gUmV0dXJucyBsb25nIHNpbmNlIGdldE5ldHdvcmtIYW5kbGUgcmV0dXJu
cyBsb25nLgotICAgKi8KLSAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgcHJpdmF0ZSBzdGF0
aWMgbG9uZyBuZXR3b3JrVG9OZXRJZChOZXR3b3JrIG5ldHdvcmspIHsKLSAgICBpZiAoQnVpbGQu
VkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTSkgewotICAgICAgcmV0dXJu
IG5ldHdvcmsuZ2V0TmV0d29ya0hhbmRsZSgpOwotICAgIH0KLQotICAgIC8vIE5PVEUoaG9uZ2hh
aXopOiBUaGlzIGRlcGVuZHMgb24gQW5kcm9pZCBmcmFtZXdvcmsgaW1wbGVtZW50YXRpb24gZGV0
YWlscy4KLSAgICAvLyBUaGVzZSBkZXRhaWxzIGNhbm5vdCBjaGFuZ2UgYmVjYXVzZSBMb2xsaXBv
cCBoYXMgYmVlbiByZWxlYXNlZC4KLSAgICByZXR1cm4gSW50ZWdlci5wYXJzZUludChuZXR3b3Jr
LnRvU3RyaW5nKCkpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL09XTkVSUwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL09XTkVSUwkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9PV05FUlMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0ICswLDAgQEAKLW1h
Z2plZEB3ZWJydGMub3JnCi0KLXBlci1maWxlIENhbWVyYSo9c2FrYWxAd2VicnRjLm9yZwotcGVy
LWZpbGUgTWV0cmljcy5qYXZhPXNha2FsQHdlYnJ0Yy5vcmcKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvUGVlckNvbm5lY3Rpb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Bl
ZXJDb25uZWN0aW9uLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
UGVlckNvbm5lY3Rpb24uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMxNiArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwu
Q29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51
dGlsLkxpc3Q7Ci0KLS8qKgotICogSmF2YS1sYW5kIHZlcnNpb24gb2YgdGhlIFBlZXJDb25uZWN0
aW9uIEFQSXM7IHdyYXBzIHRoZSBDKysgQVBJCi0gKiBodHRwOi8vd3d3LndlYnJ0Yy5vcmcvcmVm
ZXJlbmNlL25hdGl2ZS1hcGlzLCB3aGljaCBpbiB0dXJuIGlzIGluc3BpcmVkIGJ5IHRoZQotICog
SlMgQVBJczogaHR0cDovL2Rldi53My5vcmcvMjAxMS93ZWJydGMvZWRpdG9yL3dlYnJ0Yy5odG1s
IGFuZAotICogaHR0cDovL3d3dy53My5vcmcvVFIvbWVkaWFjYXB0dXJlLXN0cmVhbXMvCi0gKi8K
LXB1YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlvbiB7Ci0gIHN0YXRpYyB7Ci0gICAgU3lzdGVtLmxv
YWRMaWJyYXJ5KCJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fc28iKTsKLSAgfQotCi0gIC8qKiBUcmFj
a3MgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkljZUdhdGhlcmluZ1N0YXRlICovCi0gIHB1Ymxp
YyBlbnVtIEljZUdhdGhlcmluZ1N0YXRlIHsgTkVXLCBHQVRIRVJJTkcsIENPTVBMRVRFIH0KLQot
ICAvKiogVHJhY2tzIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VDb25uZWN0aW9uU3RhdGUg
Ki8KLSAgcHVibGljIGVudW0gSWNlQ29ubmVjdGlvblN0YXRlIHsKLSAgICBORVcsCi0gICAgQ0hF
Q0tJTkcsCi0gICAgQ09OTkVDVEVELAotICAgIENPTVBMRVRFRCwKLSAgICBGQUlMRUQsCi0gICAg
RElTQ09OTkVDVEVELAotICAgIENMT1NFRAotICB9Ci0KLSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVj
dGlvbkludGVyZmFjZTo6U2lnbmFsaW5nU3RhdGUgKi8KLSAgcHVibGljIGVudW0gU2lnbmFsaW5n
U3RhdGUgewotICAgIFNUQUJMRSwKLSAgICBIQVZFX0xPQ0FMX09GRkVSLAotICAgIEhBVkVfTE9D
QUxfUFJBTlNXRVIsCi0gICAgSEFWRV9SRU1PVEVfT0ZGRVIsCi0gICAgSEFWRV9SRU1PVEVfUFJB
TlNXRVIsCi0gICAgQ0xPU0VECi0gIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25u
ZWN0aW9uT2JzZXJ2ZXIuICovCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE9ic2VydmVyIHsK
LSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gdGhlIFNpZ25hbGluZ1N0YXRlIGNoYW5nZXMuICovCi0g
ICAgcHVibGljIHZvaWQgb25TaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUgbmV3U3RhdGUp
OwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHRoZSBJY2VDb25uZWN0aW9uU3RhdGUgY2hhbmdl
cy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlv
blN0YXRlIG5ld1N0YXRlKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgSUNFIGNvbm5l
Y3Rpb24gcmVjZWl2aW5nIHN0YXR1cyBjaGFuZ2VzLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uSWNl
Q29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZShib29sZWFuIHJlY2VpdmluZyk7Ci0KLSAgICAvKiog
VHJpZ2dlcmVkIHdoZW4gdGhlIEljZUdhdGhlcmluZ1N0YXRlIGNoYW5nZXMuICovCi0gICAgcHVi
bGljIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUgbmV3U3RhdGUp
OwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIGEgbmV3IElDRSBjYW5kaWRhdGUgaGFzIGJlZW4g
Zm91bmQuICovCi0gICAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGUoSWNlQ2FuZGlkYXRlIGNh
bmRpZGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gc29tZSBJQ0UgY2FuZGlkYXRlcyBo
YXZlIGJlZW4gcmVtb3ZlZC4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1v
dmVkKEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVu
IG1lZGlhIGlzIHJlY2VpdmVkIG9uIGEgbmV3IHN0cmVhbSBmcm9tIHJlbW90ZSBwZWVyLiAqLwot
ICAgIHB1YmxpYyB2b2lkIG9uQWRkU3RyZWFtKE1lZGlhU3RyZWFtIHN0cmVhbSk7Ci0KLSAgICAv
KiogVHJpZ2dlcmVkIHdoZW4gYSByZW1vdGUgcGVlciBjbG9zZSBhIHN0cmVhbS4gKi8KLSAgICBw
dWJsaWMgdm9pZCBvblJlbW92ZVN0cmVhbShNZWRpYVN0cmVhbSBzdHJlYW0pOwotCi0gICAgLyoq
IFRyaWdnZXJlZCB3aGVuIGEgcmVtb3RlIHBlZXIgb3BlbnMgYSBEYXRhQ2hhbm5lbC4gKi8KLSAg
ICBwdWJsaWMgdm9pZCBvbkRhdGFDaGFubmVsKERhdGFDaGFubmVsIGRhdGFDaGFubmVsKTsKLQot
ICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiByZW5lZ290aWF0aW9uIGlzIG5lY2Vzc2FyeS4gKi8KLSAg
ICBwdWJsaWMgdm9pZCBvblJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgfQotCi0gIC8qKiBKYXZh
IHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuSWNlU2VydmVyLiAqLwotICBwdWJs
aWMgc3RhdGljIGNsYXNzIEljZVNlcnZlciB7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB1cmk7
Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB1c2VybmFtZTsKLSAgICBwdWJsaWMgZmluYWwgU3Ry
aW5nIHBhc3N3b3JkOwotCi0gICAgLyoqIENvbnZlbmllbmNlIGNvbnN0cnVjdG9yIGZvciBTVFVO
IHNlcnZlcnMuICovCi0gICAgcHVibGljIEljZVNlcnZlcihTdHJpbmcgdXJpKSB7Ci0gICAgICB0
aGlzKHVyaSwgIiIsICIiKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSWNlU2VydmVyKFN0cmluZyB1
cmksIFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSB7Ci0gICAgICB0aGlzLnVyaSA9
IHVyaTsKLSAgICAgIHRoaXMudXNlcm5hbWUgPSB1c2VybmFtZTsKLSAgICAgIHRoaXMucGFzc3dv
cmQgPSBwYXNzd29yZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewot
ICAgICAgcmV0dXJuIHVyaSArICJbIiArIHVzZXJuYW1lICsgIjoiICsgcGFzc3dvcmQgKyAiXSI7
Ci0gICAgfQotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZS5JY2VUcmFuc3BvcnRzVHlwZSAqLwotICBwdWJsaWMgZW51bSBJY2VUcmFuc3BvcnRzVHlw
ZSB7IE5PTkUsIFJFTEFZLCBOT0hPU1QsIEFMTCB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQ
ZWVyQ29ubmVjdGlvbkludGVyZmFjZS5CdW5kbGVQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gQnVu
ZGxlUG9saWN5IHsgQkFMQU5DRUQsIE1BWEJVTkRMRSwgTUFYQ09NUEFUIH0KLQotICAvKiogSmF2
YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLlJ0Y3BNdXhQb2xpY3kgKi8KLSAg
cHVibGljIGVudW0gUnRjcE11eFBvbGljeSB7IE5FR09USUFURSwgUkVRVUlSRSB9Ci0KLSAgLyoq
IEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5UY3BDYW5kaWRhdGVQb2xp
Y3kgKi8KLSAgcHVibGljIGVudW0gVGNwQ2FuZGlkYXRlUG9saWN5IHsgRU5BQkxFRCwgRElTQUJM
RUQgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuQ2Fu
ZGlkYXRlTmV0d29ya1BvbGljeSAqLwotICBwdWJsaWMgZW51bSBDYW5kaWRhdGVOZXR3b3JrUG9s
aWN5IHsgQUxMLCBMT1dfQ09TVCB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBydGM6OktleVR5
cGUgKi8KLSAgcHVibGljIGVudW0gS2V5VHlwZSB7IFJTQSwgRUNEU0EgfQotCi0gIC8qKiBKYXZh
IHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuQ29udGludWFsR2F0aGVyaW5nUG9s
aWN5ICovCi0gIHB1YmxpYyBlbnVtIENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSB7IEdBVEhFUl9P
TkNFLCBHQVRIRVJfQ09OVElOVUFMTFkgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNv
bm5lY3Rpb25JbnRlcmZhY2UuUlRDQ29uZmlndXJhdGlvbiAqLwotICBwdWJsaWMgc3RhdGljIGNs
YXNzIFJUQ0NvbmZpZ3VyYXRpb24gewotICAgIHB1YmxpYyBJY2VUcmFuc3BvcnRzVHlwZSBpY2VU
cmFuc3BvcnRzVHlwZTsKLSAgICBwdWJsaWMgTGlzdDxJY2VTZXJ2ZXI+IGljZVNlcnZlcnM7Ci0g
ICAgcHVibGljIEJ1bmRsZVBvbGljeSBidW5kbGVQb2xpY3k7Ci0gICAgcHVibGljIFJ0Y3BNdXhQ
b2xpY3kgcnRjcE11eFBvbGljeTsKLSAgICBwdWJsaWMgVGNwQ2FuZGlkYXRlUG9saWN5IHRjcENh
bmRpZGF0ZVBvbGljeTsKLSAgICBwdWJsaWMgQ2FuZGlkYXRlTmV0d29ya1BvbGljeSBjYW5kaWRh
dGVOZXR3b3JrUG9saWN5OwotICAgIHB1YmxpYyBpbnQgYXVkaW9KaXR0ZXJCdWZmZXJNYXhQYWNr
ZXRzOwotICAgIHB1YmxpYyBib29sZWFuIGF1ZGlvSml0dGVyQnVmZmVyRmFzdEFjY2VsZXJhdGU7
Ci0gICAgcHVibGljIGludCBpY2VDb25uZWN0aW9uUmVjZWl2aW5nVGltZW91dDsKLSAgICBwdWJs
aWMgaW50IGljZUJhY2t1cENhbmRpZGF0ZVBhaXJQaW5nSW50ZXJ2YWw7Ci0gICAgcHVibGljIEtl
eVR5cGUga2V5VHlwZTsKLSAgICBwdWJsaWMgQ29udGludWFsR2F0aGVyaW5nUG9saWN5IGNvbnRp
bnVhbEdhdGhlcmluZ1BvbGljeTsKLSAgICBwdWJsaWMgaW50IGljZUNhbmRpZGF0ZVBvb2xTaXpl
OwotICAgIHB1YmxpYyBib29sZWFuIHBydW5lVHVyblBvcnRzOwotICAgIHB1YmxpYyBib29sZWFu
IHByZXN1bWVXcml0YWJsZVdoZW5GdWxseVJlbGF5ZWQ7Ci0KLSAgICBwdWJsaWMgUlRDQ29uZmln
dXJhdGlvbihMaXN0PEljZVNlcnZlcj4gaWNlU2VydmVycykgewotICAgICAgaWNlVHJhbnNwb3J0
c1R5cGUgPSBJY2VUcmFuc3BvcnRzVHlwZS5BTEw7Ci0gICAgICBidW5kbGVQb2xpY3kgPSBCdW5k
bGVQb2xpY3kuQkFMQU5DRUQ7Ci0gICAgICBydGNwTXV4UG9saWN5ID0gUnRjcE11eFBvbGljeS5O
RUdPVElBVEU7Ci0gICAgICB0Y3BDYW5kaWRhdGVQb2xpY3kgPSBUY3BDYW5kaWRhdGVQb2xpY3ku
RU5BQkxFRDsKLSAgICAgIGNhbmRpZGF0ZU5ldHdvcmtQb2xpY3kgPSBjYW5kaWRhdGVOZXR3b3Jr
UG9saWN5LkFMTDsKLSAgICAgIHRoaXMuaWNlU2VydmVycyA9IGljZVNlcnZlcnM7Ci0gICAgICBh
dWRpb0ppdHRlckJ1ZmZlck1heFBhY2tldHMgPSA1MDsKLSAgICAgIGF1ZGlvSml0dGVyQnVmZmVy
RmFzdEFjY2VsZXJhdGUgPSBmYWxzZTsKLSAgICAgIGljZUNvbm5lY3Rpb25SZWNlaXZpbmdUaW1l
b3V0ID0gLTE7Ci0gICAgICBpY2VCYWNrdXBDYW5kaWRhdGVQYWlyUGluZ0ludGVydmFsID0gLTE7
Ci0gICAgICBrZXlUeXBlID0gS2V5VHlwZS5FQ0RTQTsKLSAgICAgIGNvbnRpbnVhbEdhdGhlcmlu
Z1BvbGljeSA9IENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeS5HQVRIRVJfT05DRTsKLSAgICAgIGlj
ZUNhbmRpZGF0ZVBvb2xTaXplID0gMDsKLSAgICAgIHBydW5lVHVyblBvcnRzID0gZmFsc2U7Ci0g
ICAgICBwcmVzdW1lV3JpdGFibGVXaGVuRnVsbHlSZWxheWVkID0gZmFsc2U7Ci0gICAgfQotICB9
OwotCi0gIHByaXZhdGUgZmluYWwgTGlzdDxNZWRpYVN0cmVhbT4gbG9jYWxTdHJlYW1zOwotICBw
cml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlUGVlckNvbm5lY3Rpb247Ci0gIHByaXZhdGUgZmluYWwg
bG9uZyBuYXRpdmVPYnNlcnZlcjsKLSAgcHJpdmF0ZSBMaXN0PFJ0cFNlbmRlcj4gc2VuZGVyczsK
LSAgcHJpdmF0ZSBMaXN0PFJ0cFJlY2VpdmVyPiByZWNlaXZlcnM7Ci0KLSAgUGVlckNvbm5lY3Rp
b24obG9uZyBuYXRpdmVQZWVyQ29ubmVjdGlvbiwgbG9uZyBuYXRpdmVPYnNlcnZlcikgewotICAg
IHRoaXMubmF0aXZlUGVlckNvbm5lY3Rpb24gPSBuYXRpdmVQZWVyQ29ubmVjdGlvbjsKLSAgICB0
aGlzLm5hdGl2ZU9ic2VydmVyID0gbmF0aXZlT2JzZXJ2ZXI7Ci0gICAgbG9jYWxTdHJlYW1zID0g
bmV3IExpbmtlZExpc3Q8TWVkaWFTdHJlYW0+KCk7Ci0gICAgc2VuZGVycyA9IG5ldyBMaW5rZWRM
aXN0PFJ0cFNlbmRlcj4oKTsKLSAgICByZWNlaXZlcnMgPSBuZXcgTGlua2VkTGlzdDxSdHBSZWNl
aXZlcj4oKTsKLSAgfQotCi0gIC8vIEpzZXBJbnRlcmZhY2UuCi0gIHB1YmxpYyBuYXRpdmUgU2Vz
c2lvbkRlc2NyaXB0aW9uIGdldExvY2FsRGVzY3JpcHRpb24oKTsKLQotICBwdWJsaWMgbmF0aXZl
IFNlc3Npb25EZXNjcmlwdGlvbiBnZXRSZW1vdGVEZXNjcmlwdGlvbigpOwotCi0gIHB1YmxpYyBu
YXRpdmUgRGF0YUNoYW5uZWwgY3JlYXRlRGF0YUNoYW5uZWwoU3RyaW5nIGxhYmVsLCBEYXRhQ2hh
bm5lbC5Jbml0IGluaXQpOwotCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBjcmVhdGVPZmZlcihTZHBP
YnNlcnZlciBvYnNlcnZlciwgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cyk7Ci0KLSAgcHVi
bGljIG5hdGl2ZSB2b2lkIGNyZWF0ZUFuc3dlcihTZHBPYnNlcnZlciBvYnNlcnZlciwgTWVkaWFD
b25zdHJhaW50cyBjb25zdHJhaW50cyk7Ci0KLSAgcHVibGljIG5hdGl2ZSB2b2lkIHNldExvY2Fs
RGVzY3JpcHRpb24oU2RwT2JzZXJ2ZXIgb2JzZXJ2ZXIsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAp
OwotCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBzZXRSZW1vdGVEZXNjcmlwdGlvbihTZHBPYnNlcnZl
ciBvYnNlcnZlciwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBi
b29sZWFuIHNldENvbmZpZ3VyYXRpb24oUlRDQ29uZmlndXJhdGlvbiBjb25maWcpOwotCi0gIHB1
YmxpYyBib29sZWFuIGFkZEljZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0g
ICAgcmV0dXJuIG5hdGl2ZUFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUuc2RwTWlkLCBjYW5kaWRh
dGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLnNkcCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVh
biByZW1vdmVJY2VDYW5kaWRhdGVzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsK
LSAgICByZXR1cm4gbmF0aXZlUmVtb3ZlSWNlQ2FuZGlkYXRlcyhjYW5kaWRhdGVzKTsKLSAgfQot
Ci0gIHB1YmxpYyBib29sZWFuIGFkZFN0cmVhbShNZWRpYVN0cmVhbSBzdHJlYW0pIHsKLSAgICBi
b29sZWFuIHJldCA9IG5hdGl2ZUFkZExvY2FsU3RyZWFtKHN0cmVhbS5uYXRpdmVTdHJlYW0pOwot
ICAgIGlmICghcmV0KSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGxvY2FsU3Ry
ZWFtcy5hZGQoc3RyZWFtKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHJlbW92ZVN0cmVhbShNZWRpYVN0cmVhbSBzdHJlYW0pIHsKLSAgICBuYXRpdmVSZW1vdmVMb2Nh
bFN0cmVhbShzdHJlYW0ubmF0aXZlU3RyZWFtKTsKLSAgICBsb2NhbFN0cmVhbXMucmVtb3ZlKHN0
cmVhbSk7Ci0gIH0KLQotICBwdWJsaWMgUnRwU2VuZGVyIGNyZWF0ZVNlbmRlcihTdHJpbmcga2lu
ZCwgU3RyaW5nIHN0cmVhbV9pZCkgewotICAgIFJ0cFNlbmRlciBuZXdfc2VuZGVyID0gbmF0aXZl
Q3JlYXRlU2VuZGVyKGtpbmQsIHN0cmVhbV9pZCk7Ci0gICAgaWYgKG5ld19zZW5kZXIgIT0gbnVs
bCkgewotICAgICAgc2VuZGVycy5hZGQobmV3X3NlbmRlcik7Ci0gICAgfQotICAgIHJldHVybiBu
ZXdfc2VuZGVyOwotICB9Ci0KLSAgLy8gTm90ZSB0aGF0IGNhbGxpbmcgZ2V0U2VuZGVycyB3aWxs
IGRpc3Bvc2Ugb2YgdGhlIHNlbmRlcnMgcHJldmlvdXNseQotICAvLyByZXR1cm5lZCAoYW5kIHNh
bWUgZ29lcyBmb3IgZ2V0UmVjZWl2ZXJzKS4KLSAgcHVibGljIExpc3Q8UnRwU2VuZGVyPiBnZXRT
ZW5kZXJzKCkgewotICAgIGZvciAoUnRwU2VuZGVyIHNlbmRlciA6IHNlbmRlcnMpIHsKLSAgICAg
IHNlbmRlci5kaXNwb3NlKCk7Ci0gICAgfQotICAgIHNlbmRlcnMgPSBuYXRpdmVHZXRTZW5kZXJz
KCk7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3Qoc2VuZGVycyk7Ci0g
IH0KLQotICBwdWJsaWMgTGlzdDxSdHBSZWNlaXZlcj4gZ2V0UmVjZWl2ZXJzKCkgewotICAgIGZv
ciAoUnRwUmVjZWl2ZXIgcmVjZWl2ZXIgOiByZWNlaXZlcnMpIHsKLSAgICAgIHJlY2VpdmVyLmRp
c3Bvc2UoKTsKLSAgICB9Ci0gICAgcmVjZWl2ZXJzID0gbmF0aXZlR2V0UmVjZWl2ZXJzKCk7Ci0g
ICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZUxpc3QocmVjZWl2ZXJzKTsKLSAgfQot
Ci0gIHB1YmxpYyBib29sZWFuIGdldFN0YXRzKFN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIsIE1lZGlh
U3RyZWFtVHJhY2sgdHJhY2spIHsKLSAgICByZXR1cm4gbmF0aXZlR2V0U3RhdHMob2JzZXJ2ZXIs
ICh0cmFjayA9PSBudWxsKSA/IDAgOiB0cmFjay5uYXRpdmVUcmFjayk7Ci0gIH0KLQotICAvLyBT
dGFydHMgcmVjb3JkaW5nIGFuIFJUQyBldmVudCBsb2cuIE93bmVyc2hpcCBvZiB0aGUgZmlsZSBp
cyB0cmFuc2ZlcmVkIHRvCi0gIC8vIHRoZSBuYXRpdmUgY29kZS4gSWYgYW4gUlRDIGV2ZW50IGxv
ZyBpcyBhbHJlYWR5IGJlaW5nIHJlY29yZGVkLCBpdCB3aWxsIGJlCi0gIC8vIHN0b3BwZWQgYW5k
IGEgbmV3IG9uZSB3aWxsIHN0YXJ0IHVzaW5nIHRoZSBwcm92aWRlZCBmaWxlLiBMb2dnaW5nIHdp
bGwKLSAgLy8gY29udGludWUgdW50aWwgdGhlIHN0b3BSdGNFdmVudExvZyBmdW5jdGlvbiBpcyBj
YWxsZWQuIFRoZSBtYXhfc2l6ZV9ieXRlcwotICAvLyBhcmd1bWVudCBpcyBpZ25vcmVkLCBpdCBp
cyBhZGRlZCBmb3IgZnV0dXJlIHVzZS4KLSAgcHVibGljIGJvb2xlYW4gc3RhcnRSdGNFdmVudExv
ZyhpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgbWF4X3NpemVfYnl0ZXMpIHsKLSAgICByZXR1cm4g
bmF0aXZlU3RhcnRSdGNFdmVudExvZyhmaWxlX2Rlc2NyaXB0b3IsIG1heF9zaXplX2J5dGVzKTsK
LSAgfQotCi0gIC8vIFN0b3BzIHJlY29yZGluZyBhbiBSVEMgZXZlbnQgbG9nLiBJZiBubyBSVEMg
ZXZlbnQgbG9nIGlzIGN1cnJlbnRseSBiZWluZwotICAvLyByZWNvcmRlZCwgdGhpcyBjYWxsIHdp
bGwgaGF2ZSBubyBlZmZlY3QuCi0gIHB1YmxpYyB2b2lkIHN0b3BSdGNFdmVudExvZygpIHsKLSAg
ICBuYXRpdmVTdG9wUnRjRXZlbnRMb2coKTsKLSAgfQotCi0gIC8vIFRPRE8oZmlzY2htYW4pOiBh
ZGQgc3VwcG9ydCBmb3IgRFRNRi1yZWxhdGVkIG1ldGhvZHMgb25jZSB0aGF0IEFQSQotICAvLyBz
dGFiaWxpemVzLgotICBwdWJsaWMgbmF0aXZlIFNpZ25hbGluZ1N0YXRlIHNpZ25hbGluZ1N0YXRl
KCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBJY2VDb25uZWN0aW9uU3RhdGUgaWNlQ29ubmVjdGlvblN0
YXRlKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBJY2VHYXRoZXJpbmdTdGF0ZSBpY2VHYXRoZXJpbmdT
dGF0ZSgpOwotCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBjbG9zZSgpOwotCi0gIHB1YmxpYyB2b2lk
IGRpc3Bvc2UoKSB7Ci0gICAgY2xvc2UoKTsKLSAgICBmb3IgKE1lZGlhU3RyZWFtIHN0cmVhbSA6
IGxvY2FsU3RyZWFtcykgewotICAgICAgbmF0aXZlUmVtb3ZlTG9jYWxTdHJlYW0oc3RyZWFtLm5h
dGl2ZVN0cmVhbSk7Ci0gICAgICBzdHJlYW0uZGlzcG9zZSgpOwotICAgIH0KLSAgICBsb2NhbFN0
cmVhbXMuY2xlYXIoKTsKLSAgICBmb3IgKFJ0cFNlbmRlciBzZW5kZXIgOiBzZW5kZXJzKSB7Ci0g
ICAgICBzZW5kZXIuZGlzcG9zZSgpOwotICAgIH0KLSAgICBzZW5kZXJzLmNsZWFyKCk7Ci0gICAg
Zm9yIChSdHBSZWNlaXZlciByZWNlaXZlciA6IHJlY2VpdmVycykgewotICAgICAgcmVjZWl2ZXIu
ZGlzcG9zZSgpOwotICAgIH0KLSAgICByZWNlaXZlcnMuY2xlYXIoKTsKLSAgICBmcmVlUGVlckNv
bm5lY3Rpb24obmF0aXZlUGVlckNvbm5lY3Rpb24pOwotICAgIGZyZWVPYnNlcnZlcihuYXRpdmVP
YnNlcnZlcik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlUGVlckNv
bm5lY3Rpb24obG9uZyBuYXRpdmVQZWVyQ29ubmVjdGlvbik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIHZvaWQgZnJlZU9ic2VydmVyKGxvbmcgbmF0aXZlT2JzZXJ2ZXIpOwotCi0gIHByaXZh
dGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRkSWNlQ2FuZGlkYXRlKAotICAgICAgU3RyaW5nIHNk
cE1pZCwgaW50IHNkcE1MaW5lSW5kZXgsIFN0cmluZyBpY2VDYW5kaWRhdGVTZHApOwotCi0gIHBy
aXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlUmVtb3ZlSWNlQ2FuZGlkYXRlcyhmaW5hbCBJY2VD
YW5kaWRhdGVbXSBjYW5kaWRhdGVzKTsKLQotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2
ZUFkZExvY2FsU3RyZWFtKGxvbmcgbmF0aXZlU3RyZWFtKTsKLQotICBwcml2YXRlIG5hdGl2ZSB2
b2lkIG5hdGl2ZVJlbW92ZUxvY2FsU3RyZWFtKGxvbmcgbmF0aXZlU3RyZWFtKTsKLQotICBwcml2
YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUdldFN0YXRzKFN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIs
IGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgbmF0aXZlIFJ0cFNlbmRlciBuYXRpdmVD
cmVhdGVTZW5kZXIoU3RyaW5nIGtpbmQsIFN0cmluZyBzdHJlYW1faWQpOwotCi0gIHByaXZhdGUg
bmF0aXZlIExpc3Q8UnRwU2VuZGVyPiBuYXRpdmVHZXRTZW5kZXJzKCk7Ci0KLSAgcHJpdmF0ZSBu
YXRpdmUgTGlzdDxSdHBSZWNlaXZlcj4gbmF0aXZlR2V0UmVjZWl2ZXJzKCk7Ci0KLSAgcHJpdmF0
ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTdGFydFJ0Y0V2ZW50TG9nKGludCBmaWxlX2Rlc2NyaXB0
b3IsIGludCBtYXhfc2l6ZV9ieXRlcyk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVT
dG9wUnRjRXZlbnRMb2coKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rp
b25GYWN0b3J5LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVj
dGlvbkZhY3RvcnkuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9Q
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1NiArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLQotLyoqCi0gKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIFBlZXJDb25uZWN0
aW9uRmFjdG9yeUludGVyZmFjZS4gIE1haW4gZW50cnkgcG9pbnQgdG8KLSAqIHRoZSBQZWVyQ29u
bmVjdGlvbiBBUEkgZm9yIGNsaWVudHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlv
bkZhY3RvcnkgewotICBzdGF0aWMgewotICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiamluZ2xlX3Bl
ZXJjb25uZWN0aW9uX3NvIik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VEFHID0gIlBlZXJDb25uZWN0aW9uRmFjdG9yeSI7Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRp
dmVGYWN0b3J5OwotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgbmV0d29ya1RocmVhZDsKLSAgcHJp
dmF0ZSBzdGF0aWMgVGhyZWFkIHdvcmtlclRocmVhZDsKLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFk
IHNpZ25hbGluZ1RocmVhZDsKLSAgcHJpdmF0ZSBFZ2xCYXNlIGxvY2FsRWdsYmFzZTsKLSAgcHJp
dmF0ZSBFZ2xCYXNlIHJlbW90ZUVnbGJhc2U7Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBPcHRp
b25zIHsKLSAgICAvLyBLZWVwIGluIHN5bmMgd2l0aCB3ZWJydGMvYmFzZS9uZXR3b3JrLmghCi0g
ICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVSX1RZUEVfVU5LTk9XTiA9IDA7Ci0gICAgc3RhdGlj
IGZpbmFsIGludCBBREFQVEVSX1RZUEVfRVRIRVJORVQgPSAxIDw8IDA7Ci0gICAgc3RhdGljIGZp
bmFsIGludCBBREFQVEVSX1RZUEVfV0lGSSA9IDEgPDwgMTsKLSAgICBzdGF0aWMgZmluYWwgaW50
IEFEQVBURVJfVFlQRV9DRUxMVUxBUiA9IDEgPDwgMjsKLSAgICBzdGF0aWMgZmluYWwgaW50IEFE
QVBURVJfVFlQRV9WUE4gPSAxIDw8IDM7Ci0gICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVSX1RZ
UEVfTE9PUEJBQ0sgPSAxIDw8IDQ7Ci0KLSAgICBwdWJsaWMgaW50IG5ldHdvcmtJZ25vcmVNYXNr
OwotICAgIHB1YmxpYyBib29sZWFuIGRpc2FibGVFbmNyeXB0aW9uOwotICAgIHB1YmxpYyBib29s
ZWFuIGRpc2FibGVOZXR3b3JrTW9uaXRvcjsKLSAgfQotCi0gIC8vIHxjb250ZXh0fCBpcyBhbiBh
bmRyb2lkLmNvbnRlbnQuQ29udGV4dCBvYmplY3QsIGJ1dCB3ZSBrZWVwIGl0IHVudHlwZWQgaGVy
ZQotICAvLyB0byBhbGxvdyBidWlsZGluZyBvbiBub24tQW5kcm9pZCBwbGF0Zm9ybXMuCi0gIC8v
IENhbGxlcnMgbWF5IHNwZWNpZnkgZWl0aGVyIHxpbml0aWFsaXplQXVkaW98IG9yIHxpbml0aWFs
aXplVmlkZW98IGFzIGZhbHNlCi0gIC8vIHRvIHNraXAgaW5pdGlhbGl6aW5nIHRoZSByZXNwZWN0
aXZlIGVuZ2luZSAoYW5kIGF2b2lkIHRoZSBuZWVkIGZvciB0aGUKLSAgLy8gcmVzcGVjdGl2ZSBw
ZXJtaXNzaW9ucykuCi0gIC8vIHxyZW5kZXJFR0xDb250ZXh0fCBjYW4gYmUgcHJvdmlkZWQgdG8g
c3Vwb3J0IEhXIHZpZGVvIGRlY29kaW5nIHRvCi0gIC8vIHRleHR1cmUgYW5kIHdpbGwgYmUgdXNl
ZCB0byBjcmVhdGUgYSBzaGFyZWQgRUdMIGNvbnRleHQgb24gdmlkZW8KLSAgLy8gZGVjb2Rpbmcg
dGhyZWFkLgotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSBib29sZWFuIGluaXRpYWxpemVBbmRyb2lk
R2xvYmFscyhPYmplY3QgY29udGV4dCwgYm9vbGVhbiBpbml0aWFsaXplQXVkaW8sCi0gICAgICBi
b29sZWFuIGluaXRpYWxpemVWaWRlbywgYm9vbGVhbiB2aWRlb0h3QWNjZWxlcmF0aW9uKTsKLQot
ICAvLyBGaWVsZCB0cmlhbCBpbml0aWFsaXphdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIFBl
ZXJDb25uZWN0aW9uRmFjdG9yeQotICAvLyBpcyBjcmVhdGVkLgotICBwdWJsaWMgc3RhdGljIG5h
dGl2ZSB2b2lkIGluaXRpYWxpemVGaWVsZFRyaWFscyhTdHJpbmcgZmllbGRUcmlhbHNJbml0U3Ry
aW5nKTsKLSAgLy8gSW50ZXJuYWwgdHJhY2luZyBpbml0aWFsaXphdGlvbi4gTXVzdCBiZSBjYWxs
ZWQgYmVmb3JlIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBpcyBjcmVhdGVkIHRvCi0gIC8vIHByZXZl
bnQgcmFjaW5nIHdpdGggdHJhY2luZyBjb2RlLgotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lk
IGluaXRpYWxpemVJbnRlcm5hbFRyYWNlcigpOwotICAvLyBJbnRlcm5hbCB0cmFjaW5nIHNodXRk
b3duLCBjYWxsZWQgdG8gcHJldmVudCByZXNvdXJjZSBsZWFrcy4gTXVzdCBiZSBjYWxsZWQgYWZ0
ZXIKLSAgLy8gUGVlckNvbm5lY3Rpb25GYWN0b3J5IGlzIGdvbmUgdG8gcHJldmVudCByYWNlcyB3
aXRoIGNvZGUgcGVyZm9ybWluZyB0cmFjaW5nLgotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lk
IHNodXRkb3duSW50ZXJuYWxUcmFjZXIoKTsKLSAgLy8gU3RhcnQvc3RvcCBpbnRlcm5hbCBjYXB0
dXJpbmcgb2YgaW50ZXJuYWwgdHJhY2luZy4KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgYm9vbGVh
biBzdGFydEludGVybmFsVHJhY2luZ0NhcHR1cmUoU3RyaW5nIHRyYWNpbmdfZmlsZW5hbWUpOwot
ICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIHN0b3BJbnRlcm5hbFRyYWNpbmdDYXB0dXJlKCk7
Ci0KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIFBlZXJDb25uZWN0aW9uRmFjdG9yeSgpIHsKLSAg
ICB0aGlzKG51bGwpOwotICB9Ci0KLSAgcHVibGljIFBlZXJDb25uZWN0aW9uRmFjdG9yeShPcHRp
b25zIG9wdGlvbnMpIHsKLSAgICBuYXRpdmVGYWN0b3J5ID0gbmF0aXZlQ3JlYXRlUGVlckNvbm5l
Y3Rpb25GYWN0b3J5KG9wdGlvbnMpOwotICAgIGlmIChuYXRpdmVGYWN0b3J5ID09IDApIHsKLSAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQZWVy
Q29ubmVjdGlvbkZhY3RvcnkhIik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIFBlZXJDb25uZWN0
aW9uIGNyZWF0ZVBlZXJDb25uZWN0aW9uKFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24g
cnRjQ29uZmlnLAotICAgICAgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cywgUGVlckNvbm5l
Y3Rpb24uT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBsb25nIG5hdGl2ZU9ic2VydmVyID0gbmF0
aXZlQ3JlYXRlT2JzZXJ2ZXIob2JzZXJ2ZXIpOwotICAgIGlmIChuYXRpdmVPYnNlcnZlciA9PSAw
KSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgbG9uZyBuYXRpdmVQZWVyQ29ubmVj
dGlvbiA9Ci0gICAgICAgIG5hdGl2ZUNyZWF0ZVBlZXJDb25uZWN0aW9uKG5hdGl2ZUZhY3Rvcnks
IHJ0Y0NvbmZpZywgY29uc3RyYWludHMsIG5hdGl2ZU9ic2VydmVyKTsKLSAgICBpZiAobmF0aXZl
UGVlckNvbm5lY3Rpb24gPT0gMCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJl
dHVybiBuZXcgUGVlckNvbm5lY3Rpb24obmF0aXZlUGVlckNvbm5lY3Rpb24sIG5hdGl2ZU9ic2Vy
dmVyKTsKLSAgfQotCi0gIHB1YmxpYyBQZWVyQ29ubmVjdGlvbiBjcmVhdGVQZWVyQ29ubmVjdGlv
bihMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycywKLSAgICAgIE1lZGlh
Q29uc3RyYWludHMgY29uc3RyYWludHMsIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIG9ic2VydmVy
KSB7Ci0gICAgUGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcgPSBuZXcg
UGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbihpY2VTZXJ2ZXJzKTsKLSAgICByZXR1cm4g
Y3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlnLCBjb25zdHJhaW50cywgb2JzZXJ2ZXIpOwot
ICB9Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtIGNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0oU3RyaW5n
IGxhYmVsKSB7Ci0gICAgcmV0dXJuIG5ldyBNZWRpYVN0cmVhbShuYXRpdmVDcmVhdGVMb2NhbE1l
ZGlhU3RyZWFtKG5hdGl2ZUZhY3RvcnksIGxhYmVsKSk7Ci0gIH0KLQotICBwdWJsaWMgVmlkZW9T
b3VyY2UgY3JlYXRlVmlkZW9Tb3VyY2UoVmlkZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIGZp
bmFsIEVnbEJhc2UuQ29udGV4dCBlZ2xDb250ZXh0ID0KLSAgICAgICAgbG9jYWxFZ2xiYXNlID09
IG51bGwgPyBudWxsIDogbG9jYWxFZ2xiYXNlLmdldEVnbEJhc2VDb250ZXh0KCk7Ci0gICAgbG9u
ZyBuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSA9Ci0gICAgICAgIG5hdGl2ZUNyZWF0ZVZp
ZGVvU291cmNlKG5hdGl2ZUZhY3RvcnksIGVnbENvbnRleHQsIGNhcHR1cmVyLmlzU2NyZWVuY2Fz
dCgpKTsKLSAgICBWaWRlb0NhcHR1cmVyLkNhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZl
ciA9Ci0gICAgICAgIG5ldyBWaWRlb0NhcHR1cmVyLkFuZHJvaWRWaWRlb1RyYWNrU291cmNlT2Jz
ZXJ2ZXIobmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UpOwotICAgIG5hdGl2ZUluaXRpYWxp
emVWaWRlb0NhcHR1cmVyKAotICAgICAgICBuYXRpdmVGYWN0b3J5LCBjYXB0dXJlciwgbmF0aXZl
QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UsIGNhcHR1cmVyT2JzZXJ2ZXIpOwotICAgIHJldHVybiBu
ZXcgVmlkZW9Tb3VyY2UobmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UpOwotICB9Ci0KLSAg
cHVibGljIFZpZGVvVHJhY2sgY3JlYXRlVmlkZW9UcmFjayhTdHJpbmcgaWQsIFZpZGVvU291cmNl
IHNvdXJjZSkgewotICAgIHJldHVybiBuZXcgVmlkZW9UcmFjayhuYXRpdmVDcmVhdGVWaWRlb1Ry
YWNrKG5hdGl2ZUZhY3RvcnksIGlkLCBzb3VyY2UubmF0aXZlU291cmNlKSk7Ci0gIH0KLQotICBw
dWJsaWMgQXVkaW9Tb3VyY2UgY3JlYXRlQXVkaW9Tb3VyY2UoTWVkaWFDb25zdHJhaW50cyBjb25z
dHJhaW50cykgewotICAgIHJldHVybiBuZXcgQXVkaW9Tb3VyY2UobmF0aXZlQ3JlYXRlQXVkaW9T
b3VyY2UobmF0aXZlRmFjdG9yeSwgY29uc3RyYWludHMpKTsKLSAgfQotCi0gIHB1YmxpYyBBdWRp
b1RyYWNrIGNyZWF0ZUF1ZGlvVHJhY2soU3RyaW5nIGlkLCBBdWRpb1NvdXJjZSBzb3VyY2UpIHsK
LSAgICByZXR1cm4gbmV3IEF1ZGlvVHJhY2sobmF0aXZlQ3JlYXRlQXVkaW9UcmFjayhuYXRpdmVG
YWN0b3J5LCBpZCwgc291cmNlLm5hdGl2ZVNvdXJjZSkpOwotICB9Ci0KLSAgLy8gU3RhcnRzIHJl
Y29yZGluZyBhbiBBRUMgZHVtcC4gT3duZXJzaGlwIG9mIHRoZSBmaWxlIGlzIHRyYW5zZmVyZWQg
dG8gdGhlCi0gIC8vIG5hdGl2ZSBjb2RlLiBJZiBhbiBBRUMgZHVtcCBpcyBhbHJlYWR5IGluIHBy
b2dyZXNzLCBpdCB3aWxsIGJlIHN0b3BwZWQgYW5kCi0gIC8vIGEgbmV3IG9uZSB3aWxsIHN0YXJ0
IHVzaW5nIHRoZSBwcm92aWRlZCBmaWxlLgotICBwdWJsaWMgYm9vbGVhbiBzdGFydEFlY0R1bXAo
aW50IGZpbGVfZGVzY3JpcHRvciwgaW50IGZpbGVzaXplX2xpbWl0X2J5dGVzKSB7Ci0gICAgcmV0
dXJuIG5hdGl2ZVN0YXJ0QWVjRHVtcChuYXRpdmVGYWN0b3J5LCBmaWxlX2Rlc2NyaXB0b3IsIGZp
bGVzaXplX2xpbWl0X2J5dGVzKTsKLSAgfQotCi0gIC8vIFN0b3BzIHJlY29yZGluZyBhbiBBRUMg
ZHVtcC4gSWYgbm8gQUVDIGR1bXAgaXMgY3VycmVudGx5IGJlaW5nIHJlY29yZGVkLAotICAvLyB0
aGlzIGNhbGwgd2lsbCBoYXZlIG5vIGVmZmVjdC4KLSAgcHVibGljIHZvaWQgc3RvcEFlY0R1bXAo
KSB7Ci0gICAgbmF0aXZlU3RvcEFlY0R1bXAobmF0aXZlRmFjdG9yeSk7Ci0gIH0KLQotICBARGVw
cmVjYXRlZAotICBwdWJsaWMgdm9pZCBzZXRPcHRpb25zKE9wdGlvbnMgb3B0aW9ucykgewotICAg
IG5hdGl2ZVNldE9wdGlvbnMobmF0aXZlRmFjdG9yeSwgb3B0aW9ucyk7Ci0gIH0KLQotICAvKiog
U2V0IHRoZSBFR0wgY29udGV4dCB1c2VkIGJ5IEhXIFZpZGVvIGVuY29kaW5nIGFuZCBkZWNvZGlu
Zy4KLSAgICoKLSAgICogQHBhcmFtIGxvY2FsRWdsQ29udGV4dCAgIE11c3QgYmUgdGhlIHNhbWUg
YXMgdXNlZCBieSBWaWRlb0NhcHR1cmVyQW5kcm9pZCBhbmQgYW55IGxvY2FsIHZpZGVvCi0gICAq
ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJlci4KLSAgICogQHBhcmFtIHJlbW90ZUVn
bENvbnRleHQgIE11c3QgYmUgdGhlIHNhbWUgYXMgdXNlZCBieSBhbnkgcmVtb3RlIHZpZGVvIHJl
bmRlcmVyLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlv
bnMoCi0gICAgICBFZ2xCYXNlLkNvbnRleHQgbG9jYWxFZ2xDb250ZXh0LCBFZ2xCYXNlLkNvbnRl
eHQgcmVtb3RlRWdsQ29udGV4dCkgewotICAgIGlmIChsb2NhbEVnbGJhc2UgIT0gbnVsbCkgewot
ICAgICAgTG9nZ2luZy53KFRBRywgIkVnbCBjb250ZXh0IGFscmVhZHkgc2V0LiIpOwotICAgICAg
bG9jYWxFZ2xiYXNlLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgaWYgKHJlbW90ZUVnbGJhc2UgIT0g
bnVsbCkgewotICAgICAgTG9nZ2luZy53KFRBRywgIkVnbCBjb250ZXh0IGFscmVhZHkgc2V0LiIp
OwotICAgICAgcmVtb3RlRWdsYmFzZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIGxvY2FsRWdsYmFz
ZSA9IEVnbEJhc2UuY3JlYXRlKGxvY2FsRWdsQ29udGV4dCk7Ci0gICAgcmVtb3RlRWdsYmFzZSA9
IEVnbEJhc2UuY3JlYXRlKHJlbW90ZUVnbENvbnRleHQpOwotICAgIG5hdGl2ZVNldFZpZGVvSHdB
Y2NlbGVyYXRpb25PcHRpb25zKAotICAgICAgICBuYXRpdmVGYWN0b3J5LCBsb2NhbEVnbGJhc2Uu
Z2V0RWdsQmFzZUNvbnRleHQoKSwgcmVtb3RlRWdsYmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgbmF0aXZlRnJlZUZhY3Rvcnko
bmF0aXZlRmFjdG9yeSk7Ci0gICAgbmV0d29ya1RocmVhZCA9IG51bGw7Ci0gICAgd29ya2VyVGhy
ZWFkID0gbnVsbDsKLSAgICBzaWduYWxpbmdUaHJlYWQgPSBudWxsOwotICAgIGlmIChsb2NhbEVn
bGJhc2UgIT0gbnVsbCkKLSAgICAgIGxvY2FsRWdsYmFzZS5yZWxlYXNlKCk7Ci0gICAgaWYgKHJl
bW90ZUVnbGJhc2UgIT0gbnVsbCkKLSAgICAgIHJlbW90ZUVnbGJhc2UucmVsZWFzZSgpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgdGhyZWFkc0NhbGxiYWNrcygpIHsKLSAgICBuYXRpdmVUaHJlYWRz
Q2FsbGJhY2tzKG5hdGl2ZUZhY3RvcnkpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBw
cmludFN0YWNrVHJhY2UoVGhyZWFkIHRocmVhZCwgU3RyaW5nIHRocmVhZE5hbWUpIHsKLSAgICBp
ZiAodGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNrVHJhY2VFbGVtZW50W10gc3RhY2tUcmFj
ZXMgPSB0aHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgaWYgKHN0YWNrVHJhY2VzLmxlbmd0
aCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgdGhyZWFkTmFtZSArICIgc3RhY2tzIHRy
YWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBzdGFj
a1RyYWNlcykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsIHN0YWNrVHJhY2UudG9TdHJpbmco
KSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZv
aWQgcHJpbnRTdGFja1RyYWNlcygpIHsKLSAgICBwcmludFN0YWNrVHJhY2UobmV0d29ya1RocmVh
ZCwgIk5ldHdvcmsgdGhyZWFkIik7Ci0gICAgcHJpbnRTdGFja1RyYWNlKHdvcmtlclRocmVhZCwg
IldvcmtlciB0aHJlYWQiKTsKLSAgICBwcmludFN0YWNrVHJhY2Uoc2lnbmFsaW5nVGhyZWFkLCAi
U2lnbmFsaW5nIHRocmVhZCIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvbk5ldHdv
cmtUaHJlYWRSZWFkeSgpIHsKLSAgICBuZXR3b3JrVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJl
YWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAib25OZXR3b3JrVGhyZWFkUmVhZHkiKTsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIHZvaWQgb25Xb3JrZXJUaHJlYWRSZWFkeSgpIHsKLSAgICB3b3Jr
ZXJUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJv
bldvcmtlclRocmVhZFJlYWR5Iik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIG9uU2ln
bmFsaW5nVGhyZWFkUmVhZHkoKSB7Ci0gICAgc2lnbmFsaW5nVGhyZWFkID0gVGhyZWFkLmN1cnJl
bnRUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAib25TaWduYWxpbmdUaHJlYWRSZWFkeSIp
OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlUGVlckNv
bm5lY3Rpb25GYWN0b3J5KE9wdGlvbnMgb3B0aW9ucyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIGxvbmcgbmF0aXZlQ3JlYXRlT2JzZXJ2ZXIoUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgb2Jz
ZXJ2ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZVBlZXJD
b25uZWN0aW9uKGxvbmcgbmF0aXZlRmFjdG9yeSwKLSAgICAgIFBlZXJDb25uZWN0aW9uLlJUQ0Nv
bmZpZ3VyYXRpb24gcnRjQ29uZmlnLCBNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzLCBsb25n
IG5hdGl2ZU9ic2VydmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVD
cmVhdGVMb2NhbE1lZGlhU3RyZWFtKGxvbmcgbmF0aXZlRmFjdG9yeSwgU3RyaW5nIGxhYmVsKTsK
LQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVWaWRlb1NvdXJjZSgK
LSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgRWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQsIGJv
b2xlYW4gaXNfc2NyZWVuY2FzdCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0
aXZlSW5pdGlhbGl6ZVZpZGVvQ2FwdHVyZXIobG9uZyBuYXRpdmVfZmFjdG9yeSwKLSAgICAgIFZp
ZGVvQ2FwdHVyZXIgal92aWRlb19jYXB0dXJlciwgbG9uZyBuYXRpdmVfc291cmNlLAotICAgICAg
VmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2VydmVyIGpfZnJhbWVfb2JzZXJ2ZXIpOwotCi0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZVZpZGVvVHJhY2soCi0gICAgICBs
b25nIG5hdGl2ZUZhY3RvcnksIFN0cmluZyBpZCwgbG9uZyBuYXRpdmVWaWRlb1NvdXJjZSk7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlQXVkaW9Tb3VyY2UoCi0g
ICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMpOwot
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUF1ZGlvVHJhY2soCi0g
ICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIFN0cmluZyBpZCwgbG9uZyBuYXRpdmVTb3VyY2UpOwot
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVN0YXJ0QWVjRHVtcCgKLSAg
ICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IGZpbGVzaXpl
X2xpbWl0X2J5dGVzKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTdG9w
QWVjRHVtcChsb25nIG5hdGl2ZUZhY3RvcnkpOwotCi0gIEBEZXByZWNhdGVkIHB1YmxpYyBuYXRp
dmUgdm9pZCBuYXRpdmVTZXRPcHRpb25zKGxvbmcgbmF0aXZlRmFjdG9yeSwgT3B0aW9ucyBvcHRp
b25zKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTZXRWaWRlb0h3QWNj
ZWxlcmF0aW9uT3B0aW9ucygKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgT2JqZWN0IGxvY2Fs
RUdMQ29udGV4dCwgT2JqZWN0IHJlbW90ZUVHTENvbnRleHQpOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSB2b2lkIG5hdGl2ZVRocmVhZHNDYWxsYmFja3MobG9uZyBuYXRpdmVGYWN0b3J5KTsK
LQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVGcmVlRmFjdG9yeShsb25nIG5h
dGl2ZUZhY3RvcnkpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vbi5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb24uamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vbi5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMjk4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBv
cnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hdHJpeDsK
LWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7
Ci0KLS8qKgotICogU3RhdGljIGhlbHBlciBmdW5jdGlvbnMgZm9yIHJlbmRlcmVyIGltcGxlbWVu
dGF0aW9ucy4KLSAqLwotcHVibGljIGNsYXNzIFJlbmRlcmVyQ29tbW9uIHsKLSAgLyoqIEludGVy
ZmFjZSBmb3IgcmVwb3J0aW5nIHJlbmRlcmluZyBldmVudHMuICovCi0gIHB1YmxpYyBzdGF0aWMg
aW50ZXJmYWNlIFJlbmRlcmVyRXZlbnRzIHsKLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJl
ZCBvbmNlIGZpcnN0IGZyYW1lIGlzIHJlbmRlcmVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lk
IG9uRmlyc3RGcmFtZVJlbmRlcmVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJl
ZCB3aGVuIHJlbmRlcmVkIGZyYW1lIHJlc29sdXRpb24gb3Igcm90YXRpb24gaGFzIGNoYW5nZWQu
Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25GcmFtZVJlc29sdXRpb25DaGFuZ2VkKGludCB2
aWRlb1dpZHRoLCBpbnQgdmlkZW9IZWlnaHQsIGludCByb3RhdGlvbik7Ci0gIH0KLQotICAvKiog
SW50ZXJmYWNlIGZvciByZW5kZXJpbmcgZnJhbWVzIG9uIGFuIEVHTFN1cmZhY2UuICovCi0gIHB1
YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEdsRHJhd2VyIHsKLSAgICAvKioKLSAgICAgKiBGdW5jdGlv
bnMgZm9yIGRyYXdpbmcgZnJhbWVzIHdpdGggZGlmZmVyZW50IHNvdXJjZXMuIFRoZSByZW5kZXJp
bmcgc3VyZmFjZSB0YXJnZXQgaXMKLSAgICAgKiBpbXBsaWVkIGJ5IHRoZSBjdXJyZW50IEVHTCBj
b250ZXh0IG9mIHRoZSBjYWxsaW5nIHRocmVhZCBhbmQgcmVxdWlyZXMgbm8gZXhwbGljaXQgYXJn
dW1lbnQuCi0gICAgICogVGhlIGNvb3JkaW5hdGVzIHNwZWNpZnkgdGhlIHZpZXdwb3J0IGxvY2F0
aW9uIG9uIHRoZSBzdXJmYWNlIHRhcmdldC4KLSAgICAgKi8KLSAgICB2b2lkIGRyYXdPZXMoaW50
IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJh
bWVIZWlnaHQsCi0gICAgICAgIGludCB2aWV3cG9ydFgsIGludCB2aWV3cG9ydFksIGludCB2aWV3
cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpOwotICAgIHZvaWQgZHJhd1JnYihpbnQgdGV4
dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJpeCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdo
dCwgaW50IHZpZXdwb3J0WCwKLSAgICAgICAgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lk
dGgsIGludCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgdm9pZCBkcmF3WXV2KGludFtdIHl1dlRleHR1
cmVzLCBmbG9hdFtdIHRleE1hdHJpeCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwK
LSAgICAgICAgaW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lkdGgs
IGludCB2aWV3cG9ydEhlaWdodCk7Ci0KLSAgICAvKioKLSAgICAgKiBSZWxlYXNlIGFsbCBHTCBy
ZXNvdXJjZXMuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBtYW51YWxseSwgb3RoZXJ3aXNlIHJlc291
cmNlcyBtYXkgbGVhay4KLSAgICAgKi8KLSAgICB2b2lkIHJlbGVhc2UoKTsKLSAgfQotCi0gIC8q
KgotICAgKiBIZWxwZXIgY2xhc3MgZm9yIHVwbG9hZGluZyBZVVYgYnl0ZWJ1ZmZlciBmcmFtZXMg
dG8gdGV4dHVyZXMgdGhhdCBoYW5kbGVzIHN0cmlkZSA+IHdpZHRoLiBUaGlzCi0gICAqIGNsYXNz
IGtlZXBzIGFuIGludGVybmFsIEJ5dGVCdWZmZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2Nh
dGlvbnMgZm9yIGludGVybWVkaWF0ZSBjb3BpZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNs
YXNzIFl1dlVwbG9hZGVyIHsKLSAgICAvLyBJbnRlcm1lZGlhdGUgY29weSBidWZmZXIgZm9yIHVw
bG9hZGluZyB5dXYgZnJhbWVzIHRoYXQgYXJlIG5vdCBwYWNrZWQsIGkuZS4gc3RyaWRlID4gd2lk
dGguCi0gICAgLy8gVE9ETyhtYWdqZWQpOiBJbnZlc3RpZ2F0ZSB3aGVuIEdMX1VOUEFDS19ST1df
TEVOR1RIIGlzIGF2YWlsYWJsZSwgb3IgbWFrZSBhIGN1c3RvbSBzaGFkZXIKLSAgICAvLyB0aGF0
IGhhbmRsZXMgc3RyaWRlIGFuZCBjb21wYXJlIHBlcmZvcm1hbmNlIHdpdGggaW50ZXJtZWRpYXRl
IGNvcHkuCi0gICAgcHJpdmF0ZSBCeXRlQnVmZmVyIGNvcHlCdWZmZXI7Ci0KLSAgICAvKioKLSAg
ICAgKiBVcGxvYWQgfHBsYW5lc3wgaW50byB8b3V0cHV0WXV2VGV4dHVyZXN8LCB0YWtpbmcgc3Ry
aWRlIGludG8gY29uc2lkZXJhdGlvbi4KLSAgICAgKiB8b3V0cHV0WXV2VGV4dHVyZXN8IG11c3Qg
aGF2ZSBiZWVuIGdlbmVyYXRlZCBpbiBhZHZhbmNlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lk
IHVwbG9hZFl1dkRhdGEoCi0gICAgICAgIGludFtdIG91dHB1dFl1dlRleHR1cmVzLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludFtdIHN0cmlkZXMsIEJ5dGVCdWZmZXJbXSBwbGFuZXMpIHsKLSAg
ICAgIGZpbmFsIGludFtdIHBsYW5lV2lkdGhzID0gbmV3IGludFtdIHt3aWR0aCwgd2lkdGggLyAy
LCB3aWR0aCAvIDJ9OwotICAgICAgZmluYWwgaW50W10gcGxhbmVIZWlnaHRzID0gbmV3IGludFtd
IHtoZWlnaHQsIGhlaWdodCAvIDIsIGhlaWdodCAvIDJ9OwotICAgICAgLy8gTWFrZSBhIGZpcnN0
IHBhc3MgdG8gc2VlIGlmIHdlIG5lZWQgYSB0ZW1wb3JhcnkgY29weSBidWZmZXIuCi0gICAgICBp
bnQgY29weUNhcGFjaXR5TmVlZGVkID0gMDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsg
KytpKSB7Ci0gICAgICAgIGlmIChzdHJpZGVzW2ldID4gcGxhbmVXaWR0aHNbaV0pIHsKLSAgICAg
ICAgICBjb3B5Q2FwYWNpdHlOZWVkZWQgPSBNYXRoLm1heChjb3B5Q2FwYWNpdHlOZWVkZWQsIHBs
YW5lV2lkdGhzW2ldICogcGxhbmVIZWlnaHRzW2ldKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
ICAgLy8gQWxsb2NhdGUgY29weSBidWZmZXIgaWYgbmVjZXNzYXJ5LgotICAgICAgaWYgKGNvcHlD
YXBhY2l0eU5lZWRlZCA+IDAKLSAgICAgICAgICAmJiAoY29weUJ1ZmZlciA9PSBudWxsIHx8IGNv
cHlCdWZmZXIuY2FwYWNpdHkoKSA8IGNvcHlDYXBhY2l0eU5lZWRlZCkpIHsKLSAgICAgICAgY29w
eUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoY29weUNhcGFjaXR5TmVlZGVkKTsK
LSAgICAgIH0KLSAgICAgIC8vIFVwbG9hZCBlYWNoIHBsYW5lLgotICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAu
R0xfVEVYVFVSRTAgKyBpKTsKLSAgICAgICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdM
X1RFWFRVUkVfMkQsIG91dHB1dFl1dlRleHR1cmVzW2ldKTsKLSAgICAgICAgLy8gR0xFUyBvbmx5
IGFjY2VwdHMgcGFja2VkIGRhdGEsIGkuZS4gc3RyaWRlID09IHBsYW5lV2lkdGguCi0gICAgICAg
IGZpbmFsIEJ5dGVCdWZmZXIgcGFja2VkQnl0ZUJ1ZmZlcjsKLSAgICAgICAgaWYgKHN0cmlkZXNb
aV0gPT0gcGxhbmVXaWR0aHNbaV0pIHsKLSAgICAgICAgICAvLyBJbnB1dCBpcyBwYWNrZWQgYWxy
ZWFkeS4KLSAgICAgICAgICBwYWNrZWRCeXRlQnVmZmVyID0gcGxhbmVzW2ldOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIFZpZGVvUmVuZGVyZXIubmF0aXZlQ29weVBsYW5lKAotICAgICAg
ICAgICAgICBwbGFuZXNbaV0sIHBsYW5lV2lkdGhzW2ldLCBwbGFuZUhlaWdodHNbaV0sIHN0cmlk
ZXNbaV0sIGNvcHlCdWZmZXIsIHBsYW5lV2lkdGhzW2ldKTsKLSAgICAgICAgICBwYWNrZWRCeXRl
QnVmZmVyID0gY29weUJ1ZmZlcjsKLSAgICAgICAgfQotICAgICAgICBHTEVTMjAuZ2xUZXhJbWFn
ZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfTFVNSU5BTkNFLCBwbGFuZVdp
ZHRoc1tpXSwKLSAgICAgICAgICAgIHBsYW5lSGVpZ2h0c1tpXSwgMCwgR0xFUzIwLkdMX0xVTUlO
QU5DRSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHBhY2tlZEJ5dGVCdWZmZXIpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBIZWxwZXIgY2xhc3MgZm9yIGRldGVybWluaW5n
IGxheW91dCBzaXplIGJhc2VkIG9uIGxheW91dCByZXF1aXJlbWVudHMsIHNjYWxpbmcgdHlwZSwg
YW5kIHZpZGVvCi0gICAqIGFzcGVjdCByYXRpby4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xh
c3MgVmlkZW9MYXlvdXRNZWFzdXJlIHsKLSAgICAvLyBUaGUgc2NhbGluZyB0eXBlIGRldGVybWlu
ZXMgaG93IHRoZSB2aWRlbyB3aWxsIGZpbGwgdGhlIGFsbG93ZWQgbGF5b3V0IGFyZWEgaW4gbWVh
c3VyZSgpLiBJdAotICAgIC8vIGNhbiBiZSBzcGVjaWZpZWQgc2VwYXJhdGVseSBmb3IgdGhlIGNh
c2Ugd2hlbiB2aWRlbyBoYXMgbWF0Y2hlZCBvcmllbnRhdGlvbiB3aXRoIGxheW91dCBzaXplCi0g
ICAgLy8gYW5kIHdoZW4gdGhlcmUgaXMgYW4gb3JpZW50YXRpb24gbWlzbWF0Y2guCi0gICAgcHJp
dmF0ZSBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24gPSBTY2FsaW5nVHlw
ZS5TQ0FMRV9BU1BFQ1RfQkFMQU5DRUQ7Ci0gICAgcHJpdmF0ZSBTY2FsaW5nVHlwZSBzY2FsaW5n
VHlwZU1pc21hdGNoT3JpZW50YXRpb24gPSBTY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfQkFMQU5D
RUQ7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRTY2FsaW5nVHlwZShTY2FsaW5nVHlwZSBzY2FsaW5n
VHlwZSkgewotICAgICAgdGhpcy5zY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24gPSBzY2FsaW5n
VHlwZTsKLSAgICAgIHRoaXMuc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uID0gc2NhbGlu
Z1R5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2NhbGluZ1R5cGUoCi0gICAgICAg
IFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlTWF0Y2hPcmllbnRhdGlvbiwgU2NhbGluZ1R5cGUgc2Nh
bGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uKSB7Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBlTWF0
Y2hPcmllbnRhdGlvbiA9IHNjYWxpbmdUeXBlTWF0Y2hPcmllbnRhdGlvbjsKLSAgICAgIHRoaXMu
c2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uID0gc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVu
dGF0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyBQb2ludCBtZWFzdXJlKGludCB3aWR0aFNwZWMs
IGludCBoZWlnaHRTcGVjLCBpbnQgZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0KSB7Ci0gICAg
ICAvLyBDYWxjdWxhdGUgbWF4IGFsbG93ZWQgbGF5b3V0IHNpemUuCi0gICAgICBmaW5hbCBpbnQg
bWF4V2lkdGggPSBWaWV3LmdldERlZmF1bHRTaXplKEludGVnZXIuTUFYX1ZBTFVFLCB3aWR0aFNw
ZWMpOwotICAgICAgZmluYWwgaW50IG1heEhlaWdodCA9IFZpZXcuZ2V0RGVmYXVsdFNpemUoSW50
ZWdlci5NQVhfVkFMVUUsIGhlaWdodFNwZWMpOwotICAgICAgaWYgKGZyYW1lV2lkdGggPT0gMCB8
fCBmcmFtZUhlaWdodCA9PSAwIHx8IG1heFdpZHRoID09IDAgfHwgbWF4SGVpZ2h0ID09IDApIHsK
LSAgICAgICAgcmV0dXJuIG5ldyBQb2ludChtYXhXaWR0aCwgbWF4SGVpZ2h0KTsKLSAgICAgIH0K
LSAgICAgIC8vIENhbGN1bGF0ZSBkZXNpcmVkIGRpc3BsYXkgc2l6ZSBiYXNlZCBvbiBzY2FsaW5n
IHR5cGUsIHZpZGVvIGFzcGVjdCByYXRpbywKLSAgICAgIC8vIGFuZCBtYXhpbXVtIGxheW91dCBz
aXplLgotICAgICAgZmluYWwgZmxvYXQgZnJhbWVBc3BlY3QgPSBmcmFtZVdpZHRoIC8gKGZsb2F0
KSBmcmFtZUhlaWdodDsKLSAgICAgIGZpbmFsIGZsb2F0IGRpc3BsYXlBc3BlY3QgPSBtYXhXaWR0
aCAvIChmbG9hdCkgbWF4SGVpZ2h0OwotICAgICAgZmluYWwgU2NhbGluZ1R5cGUgc2NhbGluZ1R5
cGUgPSAoZnJhbWVBc3BlY3QgPiAxLjBmKSA9PSAoZGlzcGxheUFzcGVjdCA+IDEuMGYpCi0gICAg
ICAgICAgPyBzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24KLSAgICAgICAgICA6IHNjYWxpbmdU
eXBlTWlzbWF0Y2hPcmllbnRhdGlvbjsKLSAgICAgIGZpbmFsIFBvaW50IGxheW91dFNpemUgPSBn
ZXREaXNwbGF5U2l6ZShzY2FsaW5nVHlwZSwgZnJhbWVBc3BlY3QsIG1heFdpZHRoLCBtYXhIZWln
aHQpOwotCi0gICAgICAvLyBJZiB0aGUgbWVhc3VyZSBzcGVjaWZpY2F0aW9uIGlzIGZvcmNpbmcg
YSBzcGVjaWZpYyBzaXplIC0geWllbGQuCi0gICAgICBpZiAoVmlldy5NZWFzdXJlU3BlYy5nZXRN
b2RlKHdpZHRoU3BlYykgPT0gVmlldy5NZWFzdXJlU3BlYy5FWEFDVExZKSB7Ci0gICAgICAgIGxh
eW91dFNpemUueCA9IG1heFdpZHRoOwotICAgICAgfQotICAgICAgaWYgKFZpZXcuTWVhc3VyZVNw
ZWMuZ2V0TW9kZShoZWlnaHRTcGVjKSA9PSBWaWV3Lk1lYXN1cmVTcGVjLkVYQUNUTFkpIHsKLSAg
ICAgICAgbGF5b3V0U2l6ZS55ID0gbWF4SGVpZ2h0OwotICAgICAgfQotICAgICAgcmV0dXJuIGxh
eW91dFNpemU7Ci0gICAgfQotICB9Ci0KLSAgLy8gVHlwZXMgb2YgdmlkZW8gc2NhbGluZzoKLSAg
Ly8gU0NBTEVfQVNQRUNUX0ZJVCAtIHZpZGVvIGZyYW1lIGlzIHNjYWxlZCB0byBmaXQgdGhlIHNp
emUgb2YgdGhlIHZpZXcgYnkKLSAgLy8gICAgbWFpbnRhaW5pbmcgdGhlIGFzcGVjdCByYXRpbyAo
YmxhY2sgYm9yZGVycyBtYXkgYmUgZGlzcGxheWVkKS4KLSAgLy8gU0NBTEVfQVNQRUNUX0ZJTEwg
LSB2aWRlbyBmcmFtZSBpcyBzY2FsZWQgdG8gZmlsbCB0aGUgc2l6ZSBvZiB0aGUgdmlldyBieQot
ICAvLyAgICBtYWludGFpbmluZyB0aGUgYXNwZWN0IHJhdGlvLiBTb21lIHBvcnRpb24gb2YgdGhl
IHZpZGVvIGZyYW1lIG1heSBiZQotICAvLyAgICBjbGlwcGVkLgotICAvLyBTQ0FMRV9BU1BFQ1Rf
QkFMQU5DRUQgLSBDb21wcm9taXNlIGJldHdlZW4gRklUIGFuZCBGSUxMLiBWaWRlbyBmcmFtZSB3
aWxsIGZpbGwgYXMgbXVjaCBhcwotICAvLyBwb3NzaWJsZSBvZiB0aGUgdmlldyB3aGlsZSBtYWlu
dGFpbmluZyBhc3BlY3QgcmF0aW8sIHVuZGVyIHRoZSBjb25zdHJhaW50IHRoYXQgYXQgbGVhc3QK
LSAgLy8gfEJBTEFOQ0VEX1ZJU0lCTEVfRlJBQ1RJT058IG9mIHRoZSBmcmFtZSBjb250ZW50IHdp
bGwgYmUgc2hvd24uCi0gIHB1YmxpYyBzdGF0aWMgZW51bSBTY2FsaW5nVHlwZSB7IFNDQUxFX0FT
UEVDVF9GSVQsIFNDQUxFX0FTUEVDVF9GSUxMLCBTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQgfQotICAv
LyBUaGUgbWluaW11bSBmcmFjdGlvbiBvZiB0aGUgZnJhbWUgY29udGVudCB0aGF0IHdpbGwgYmUg
c2hvd24gZm9yIHxTQ0FMRV9BU1BFQ1RfQkFMQU5DRUR8LgotICAvLyBUaGlzIGxpbWl0cyBleGNl
c3NpdmUgY3JvcHBpbmcgd2hlbiBhZGp1c3RpbmcgZGlzcGxheSBzaXplLgotICBwcml2YXRlIHN0
YXRpYyBmbG9hdCBCQUxBTkNFRF9WSVNJQkxFX0ZSQUNUSU9OID0gMC41NjI1ZjsKLSAgLy8gY2xh
bmctZm9ybWF0IG9mZgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGZsb2F0W10gaWRlbnRpdHlNYXRy
aXgoKSB7Ci0gICAgcmV0dXJuIG5ldyBmbG9hdFtdIHsKLSAgICAgICAgMSwgMCwgMCwgMCwKLSAg
ICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgMCwgMCwgMCwg
MX07Ci0gIH0KLSAgLy8gTWF0cml4IHdpdGggdHJhbnNmb3JtIHknID0gMSAtIHkuCi0gIHB1Ymxp
YyBzdGF0aWMgZmluYWwgZmxvYXRbXSB2ZXJ0aWNhbEZsaXBNYXRyaXgoKSB7Ci0gICAgcmV0dXJu
IG5ldyBmbG9hdFtdIHsKLSAgICAgICAgMSwgIDAsIDAsIDAsCi0gICAgICAgIDAsIC0xLCAwLCAw
LAotICAgICAgICAwLCAgMCwgMSwgMCwKLSAgICAgICAgMCwgIDEsIDAsIDF9OwotICB9Ci0KLSAg
Ly8gTWF0cml4IHdpdGggdHJhbnNmb3JtIHgnID0gMSAtIHguCi0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgZmxvYXRbXSBob3Jpem9udGFsRmxpcE1hdHJpeCgpIHsKLSAgICByZXR1cm4gbmV3IGZsb2F0
W10gewotICAgICAgICAtMSwgMCwgMCwgMCwKLSAgICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAg
ICAwLCAwLCAxLCAwLAotICAgICAgICAgMSwgMCwgMCwgMX07Ci0gIH0KLSAgLy8gY2xhbmctZm9y
bWF0IG9uCi0KLSAgLyoqCi0gICAqIFJldHVybnMgdGV4dHVyZSBtYXRyaXggdGhhdCB3aWxsIGhh
dmUgdGhlIGVmZmVjdCBvZiByb3RhdGluZyB0aGUgZnJhbWUgfHJvdGF0aW9uRGVncmVlfAotICAg
KiBjbG9ja3dpc2Ugd2hlbiByZW5kZXJlZC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmxvYXRb
XSByb3RhdGVUZXh0dXJlTWF0cml4KGZsb2F0W10gdGV4dHVyZU1hdHJpeCwgZmxvYXQgcm90YXRp
b25EZWdyZWUpIHsKLSAgICBmaW5hbCBmbG9hdFtdIHJvdGF0aW9uTWF0cml4ID0gbmV3IGZsb2F0
WzE2XTsKLSAgICBNYXRyaXguc2V0Um90YXRlTShyb3RhdGlvbk1hdHJpeCwgMCwgcm90YXRpb25E
ZWdyZWUsIDAsIDAsIDEpOwotICAgIGFkanVzdE9yaWdpbihyb3RhdGlvbk1hdHJpeCk7Ci0gICAg
cmV0dXJuIG11bHRpcGx5TWF0cmljZXModGV4dHVyZU1hdHJpeCwgcm90YXRpb25NYXRyaXgpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHQgb2Yg
YSAqIGIuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZsb2F0W10gbXVsdGlwbHlNYXRyaWNlcyhm
bG9hdFtdIGEsIGZsb2F0W10gYikgewotICAgIGZpbmFsIGZsb2F0W10gcmVzdWx0TWF0cml4ID0g
bmV3IGZsb2F0WzE2XTsKLSAgICBNYXRyaXgubXVsdGlwbHlNTShyZXN1bHRNYXRyaXgsIDAsIGEs
IDAsIGIsIDApOwotICAgIHJldHVybiByZXN1bHRNYXRyaXg7Ci0gIH0KLQotICAvKioKLSAgICog
UmV0dXJucyBsYXlvdXQgdHJhbnNmb3JtYXRpb24gbWF0cml4IHRoYXQgYXBwbGllcyBhbiBvcHRp
b25hbCBtaXJyb3IgZWZmZWN0IGFuZCBjb21wZW5zYXRlcwotICAgKiBmb3IgdmlkZW8gdnMgZGlz
cGxheSBhc3BlY3QgcmF0aW8uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZsb2F0W10gZ2V0TGF5
b3V0TWF0cml4KAotICAgICAgYm9vbGVhbiBtaXJyb3IsIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8s
IGZsb2F0IGRpc3BsYXlBc3BlY3RSYXRpbykgewotICAgIGZsb2F0IHNjYWxlWCA9IDE7Ci0gICAg
ZmxvYXQgc2NhbGVZID0gMTsKLSAgICAvLyBTY2FsZSBYIG9yIFkgZGltZW5zaW9uIHNvIHRoYXQg
dmlkZW8gYW5kIGRpc3BsYXkgc2l6ZSBoYXZlIHNhbWUgYXNwZWN0IHJhdGlvLgotICAgIGlmIChk
aXNwbGF5QXNwZWN0UmF0aW8gPiB2aWRlb0FzcGVjdFJhdGlvKSB7Ci0gICAgICBzY2FsZVkgPSB2
aWRlb0FzcGVjdFJhdGlvIC8gZGlzcGxheUFzcGVjdFJhdGlvOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBzY2FsZVggPSBkaXNwbGF5QXNwZWN0UmF0aW8gLyB2aWRlb0FzcGVjdFJhdGlvOwotICAgIH0K
LSAgICAvLyBBcHBseSBvcHRpb25hbCBob3Jpem9udGFsIGZsaXAuCi0gICAgaWYgKG1pcnJvcikg
ewotICAgICAgc2NhbGVYICo9IC0xOwotICAgIH0KLSAgICBmaW5hbCBmbG9hdCBtYXRyaXhbXSA9
IG5ldyBmbG9hdFsxNl07Ci0gICAgTWF0cml4LnNldElkZW50aXR5TShtYXRyaXgsIDApOwotICAg
IE1hdHJpeC5zY2FsZU0obWF0cml4LCAwLCBzY2FsZVgsIHNjYWxlWSwgMSk7Ci0gICAgYWRqdXN0
T3JpZ2luKG1hdHJpeCk7Ci0gICAgcmV0dXJuIG1hdHJpeDsKLSAgfQotCi0gIC8qKgotICAgKiBD
YWxjdWxhdGUgZGlzcGxheSBzaXplIGJhc2VkIG9uIHNjYWxpbmcgdHlwZSwgdmlkZW8gYXNwZWN0
IHJhdGlvLCBhbmQgbWF4aW11bSBkaXNwbGF5IHNpemUuCi0gICAqLwotICBwdWJsaWMgc3RhdGlj
IFBvaW50IGdldERpc3BsYXlTaXplKAotICAgICAgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGZs
b2F0IHZpZGVvQXNwZWN0UmF0aW8sIGludCBtYXhEaXNwbGF5V2lkdGgsIGludCBtYXhEaXNwbGF5
SGVpZ2h0KSB7Ci0gICAgcmV0dXJuIGdldERpc3BsYXlTaXplKGNvbnZlcnRTY2FsaW5nVHlwZVRv
VmlzaWJsZUZyYWN0aW9uKHNjYWxpbmdUeXBlKSwgdmlkZW9Bc3BlY3RSYXRpbywKLSAgICAgICAg
bWF4RGlzcGxheVdpZHRoLCBtYXhEaXNwbGF5SGVpZ2h0KTsKLSAgfQotCi0gIC8qKgotICAgKiBN
b3ZlIHxtYXRyaXh8IHRyYW5zZm9ybWF0aW9uIG9yaWdpbiB0byAoMC41LCAwLjUpLiBUaGlzIGlz
IHRoZSBvcmlnaW4gZm9yIHRleHR1cmUgY29vcmRpbmF0ZXMKLSAgICogdGhhdCBhcmUgaW4gdGhl
IHJhbmdlIDAgdG8gMS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYWRqdXN0T3JpZ2lu
KGZsb2F0W10gbWF0cml4KSB7Ci0gICAgLy8gTm90ZSB0aGF0IE9wZW5HTCBpcyB1c2luZyBjb2x1
bW4tbWFqb3Igb3JkZXIuCi0gICAgLy8gUHJlIHRyYW5zbGF0ZSB3aXRoIC0wLjUgdG8gbW92ZSBj
b29yZGluYXRlcyB0byByYW5nZSBbLTAuNSwgMC41XS4KLSAgICBtYXRyaXhbMTJdIC09IDAuNWYg
KiAobWF0cml4WzBdICsgbWF0cml4WzRdKTsKLSAgICBtYXRyaXhbMTNdIC09IDAuNWYgKiAobWF0
cml4WzFdICsgbWF0cml4WzVdKTsKLSAgICAvLyBQb3N0IHRyYW5zbGF0ZSB3aXRoIDAuNSB0byBt
b3ZlIGNvb3JkaW5hdGVzIHRvIHJhbmdlIFswLCAxXS4KLSAgICBtYXRyaXhbMTJdICs9IDAuNWY7
Ci0gICAgbWF0cml4WzEzXSArPSAwLjVmOwotICB9Ci0KLSAgLyoqCi0gICAqIEVhY2ggc2NhbGlu
ZyB0eXBlIGhhcyBhIG9uZS10by1vbmUgY29ycmVzcG9uZGVuY2UgdG8gYSBudW1lcmljIG1pbmlt
dW0gZnJhY3Rpb24gb2YgdGhlIHZpZGVvCi0gICAqIHRoYXQgbXVzdCByZW1haW4gdmlzaWJsZS4K
LSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZsb2F0IGNvbnZlcnRTY2FsaW5nVHlwZVRvVmlzaWJs
ZUZyYWN0aW9uKFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlKSB7Ci0gICAgc3dpdGNoIChzY2FsaW5n
VHlwZSkgewotICAgICAgY2FzZSBTQ0FMRV9BU1BFQ1RfRklUOgotICAgICAgICByZXR1cm4gMS4w
ZjsKLSAgICAgIGNhc2UgU0NBTEVfQVNQRUNUX0ZJTEw6Ci0gICAgICAgIHJldHVybiAwLjBmOwot
ICAgICAgY2FzZSBTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQ6Ci0gICAgICAgIHJldHVybiBCQUxBTkNF
RF9WSVNJQkxFX0ZSQUNUSU9OOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgdGhyb3cgbmV3IEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxj
dWxhdGUgZGlzcGxheSBzaXplIGJhc2VkIG9uIG1pbmltdW0gZnJhY3Rpb24gb2YgdGhlIHZpZGVv
IHRoYXQgbXVzdCByZW1haW4gdmlzaWJsZSwKLSAgICogdmlkZW8gYXNwZWN0IHJhdGlvLCBhbmQg
bWF4aW11bSBkaXNwbGF5IHNpemUuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBQb2ludCBnZXRE
aXNwbGF5U2l6ZSgKLSAgICAgIGZsb2F0IG1pblZpc2libGVGcmFjdGlvbiwgZmxvYXQgdmlkZW9B
c3BlY3RSYXRpbywgaW50IG1heERpc3BsYXlXaWR0aCwgaW50IG1heERpc3BsYXlIZWlnaHQpIHsK
LSAgICAvLyBJZiB0aGVyZSBpcyBubyBjb25zdHJhaW50IG9uIHRoZSBhbW91bnQgb2YgY3JvcHBp
bmcsIGZpbGwgdGhlIGFsbG93ZWQgZGlzcGxheSBhcmVhLgotICAgIGlmIChtaW5WaXNpYmxlRnJh
Y3Rpb24gPT0gMCB8fCB2aWRlb0FzcGVjdFJhdGlvID09IDApIHsKLSAgICAgIHJldHVybiBuZXcg
UG9pbnQobWF4RGlzcGxheVdpZHRoLCBtYXhEaXNwbGF5SGVpZ2h0KTsKLSAgICB9Ci0gICAgLy8g
RWFjaCBkaW1lbnNpb24gaXMgY29uc3RyYWluZWQgb24gbWF4IGRpc3BsYXkgc2l6ZSBhbmQgaG93
IG11Y2ggd2UgYXJlIGFsbG93ZWQgdG8gY3JvcC4KLSAgICBmaW5hbCBpbnQgd2lkdGggPSBNYXRo
Lm1pbigKLSAgICAgICAgbWF4RGlzcGxheVdpZHRoLCBNYXRoLnJvdW5kKG1heERpc3BsYXlIZWln
aHQgLyBtaW5WaXNpYmxlRnJhY3Rpb24gKiB2aWRlb0FzcGVjdFJhdGlvKSk7Ci0gICAgZmluYWwg
aW50IGhlaWdodCA9IE1hdGgubWluKAotICAgICAgICBtYXhEaXNwbGF5SGVpZ2h0LCBNYXRoLnJv
dW5kKG1heERpc3BsYXlXaWR0aCAvIG1pblZpc2libGVGcmFjdGlvbiAvIHZpZGVvQXNwZWN0UmF0
aW8pKTsKLSAgICByZXR1cm4gbmV3IFBvaW50KHdpZHRoLCBoZWlnaHQpOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLQotLyoqCi0gKiBUaGUgcGFyYW1ldGVycyBmb3IgYW4g
e0Bjb2RlIFJ0cFNlbmRlcn0sIGFzIGRlZmluZWQgaW4KLSAqIGh0dHA6Ly93M2MuZ2l0aHViLmlv
L3dlYnJ0Yy1wYy8jcnRjcnRwc2VuZGVyLWludGVyZmFjZS4KLSAqLwotcHVibGljIGNsYXNzIFJ0
cFBhcmFtZXRlcnMgewotICBwdWJsaWMgc3RhdGljIGNsYXNzIEVuY29kaW5nIHsKLSAgICBwdWJs
aWMgYm9vbGVhbiBhY3RpdmUgPSB0cnVlOwotICAgIC8vIEEgbnVsbCB2YWx1ZSBtZWFucyAibm8g
bWF4aW11bSBiaXRyYXRlIi4KLSAgICBwdWJsaWMgSW50ZWdlciBtYXhCaXRyYXRlQnBzOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb2RlYyB7Ci0gICAgaW50IHBheWxvYWRUeXBlOwot
ICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBpbnQgY2xvY2tSYXRlOwotICAgIGludCBjaGFubmVs
cyA9IDE7Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgTGlua2VkTGlzdDxFbmNvZGluZz4gZW5jb2Rp
bmdzOwotICBwdWJsaWMgZmluYWwgTGlua2VkTGlzdDxDb2RlYz4gY29kZWNzOwotCi0gIHB1Ymxp
YyBSdHBQYXJhbWV0ZXJzKCkgewotICAgIGVuY29kaW5ncyA9IG5ldyBMaW5rZWRMaXN0PEVuY29k
aW5nPigpOwotICAgIGNvZGVjcyA9IG5ldyBMaW5rZWRMaXN0PENvZGVjPigpOwotICB9Ci19Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFJlY2VpdmVyLmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1J0cFJlY2VpdmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZh
IHdyYXBwZXIgZm9yIGEgQysrIFJ0cFJlY2VpdmVySW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNz
IFJ0cFJlY2VpdmVyIHsKLSAgZmluYWwgbG9uZyBuYXRpdmVSdHBSZWNlaXZlcjsKLQotICBwcml2
YXRlIE1lZGlhU3RyZWFtVHJhY2sgY2FjaGVkVHJhY2s7Ci0KLSAgcHVibGljIFJ0cFJlY2VpdmVy
KGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpIHsKLSAgICB0aGlzLm5hdGl2ZVJ0cFJlY2VpdmVyID0g
bmF0aXZlUnRwUmVjZWl2ZXI7Ci0gICAgbG9uZyB0cmFjayA9IG5hdGl2ZUdldFRyYWNrKG5hdGl2
ZVJ0cFJlY2VpdmVyKTsKLSAgICAvLyBXZSBjYW4gYXNzdW1lIHRoYXQgYW4gUnRwUmVjZWl2ZXIg
YWx3YXlzIGhhcyBhbiBhc3NvY2lhdGVkIHRyYWNrLgotICAgIGNhY2hlZFRyYWNrID0gbmV3IE1l
ZGlhU3RyZWFtVHJhY2sodHJhY2spOwotICB9Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtVHJhY2sg
dHJhY2soKSB7Ci0gICAgcmV0dXJuIGNhY2hlZFRyYWNrOwotICB9Ci0KLSAgcHVibGljIGJvb2xl
YW4gc2V0UGFyYW1ldGVycyhSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpIHsKLSAgICByZXR1cm4g
bmF0aXZlU2V0UGFyYW1ldGVycyhuYXRpdmVSdHBSZWNlaXZlciwgcGFyYW1ldGVycyk7Ci0gIH0K
LQotICBwdWJsaWMgUnRwUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgewotICAgIHJldHVybiBu
YXRpdmVHZXRQYXJhbWV0ZXJzKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAgfQotCi0gIHB1YmxpYyBT
dHJpbmcgaWQoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUlkKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgY2FjaGVkVHJhY2suZGlzcG9zZSgp
OwotICAgIGZyZWUobmF0aXZlUnRwUmVjZWl2ZXIpOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQg
aW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHRyYWNrLgotICAvLyBXaWxsIGJl
IHJlbGVhc2VkIGluIGRpc3Bvc2UoKS4KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0
aXZlR2V0VHJhY2sobG9uZyBuYXRpdmVSdHBSZWNlaXZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIGJvb2xlYW4gbmF0aXZlU2V0UGFyYW1ldGVycygKLSAgICAgIGxvbmcgbmF0aXZlUnRw
UmVjZWl2ZXIsIFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIFJ0cFBhcmFtZXRlcnMgbmF0aXZlR2V0UGFyYW1ldGVycyhsb25nIG5hdGl2ZVJ0cFJl
Y2VpdmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIG5hdGl2ZUlkKGxvbmcg
bmF0aXZlUnRwUmVjZWl2ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUo
bG9uZyBuYXRpdmVSdHBSZWNlaXZlcik7Ci19OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBT
ZW5kZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFNlbmRlci5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFNlbmRlci5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsODAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2Fn
ZSBvcmcud2VicnRjOwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBSdHBTZW5kZXJJbnRl
cmZhY2UuICovCi1wdWJsaWMgY2xhc3MgUnRwU2VuZGVyIHsKLSAgZmluYWwgbG9uZyBuYXRpdmVS
dHBTZW5kZXI7Ci0KLSAgcHJpdmF0ZSBNZWRpYVN0cmVhbVRyYWNrIGNhY2hlZFRyYWNrOwotICBw
cml2YXRlIGJvb2xlYW4gb3duc1RyYWNrID0gdHJ1ZTsKLQotICBwdWJsaWMgUnRwU2VuZGVyKGxv
bmcgbmF0aXZlUnRwU2VuZGVyKSB7Ci0gICAgdGhpcy5uYXRpdmVSdHBTZW5kZXIgPSBuYXRpdmVS
dHBTZW5kZXI7Ci0gICAgbG9uZyB0cmFjayA9IG5hdGl2ZUdldFRyYWNrKG5hdGl2ZVJ0cFNlbmRl
cik7Ci0gICAgLy8gSXQgbWF5IGJlIHBvc3NpYmxlIGZvciBhbiBSdHBTZW5kZXIgdG8gYmUgY3Jl
YXRlZCB3aXRob3V0IGEgdHJhY2suCi0gICAgY2FjaGVkVHJhY2sgPSAodHJhY2sgPT0gMCkgPyBu
dWxsIDogbmV3IE1lZGlhU3RyZWFtVHJhY2sodHJhY2spOwotICB9Ci0KLSAgLy8gSWYgfHRha2VP
d25lcnNoaXB8IGlzIHRydWUsIHRoZSBSdHBTZW5kZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0
cmFjawotICAvLyBmcm9tIHRoZSBjYWxsZXIsIGFuZCB3aWxsIGF1dG8tZGlzcG9zZSBvZiBpdCB3
aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gIC8vIHx0YWtlT3duZXJzaGlwfCBzaG91bGQgb25seSBi
ZSB1c2VkIGlmIHRoZSBjYWxsZXIgb3ducyB0aGUgdHJhY2s7IGl0IGlzCi0gIC8vIG5vdCBhcHBy
b3ByaWF0ZSB3aGVuIHRoZSB0cmFjayBpcyBvd25lZCBieSwgZm9yIGV4YW1wbGUsIGFub3RoZXIg
UnRwU2VuZGVyCi0gIC8vIG9yIGEgTWVkaWFTdHJlYW0uCi0gIHB1YmxpYyBib29sZWFuIHNldFRy
YWNrKE1lZGlhU3RyZWFtVHJhY2sgdHJhY2ssIGJvb2xlYW4gdGFrZU93bmVyc2hpcCkgewotICAg
IGlmICghbmF0aXZlU2V0VHJhY2sobmF0aXZlUnRwU2VuZGVyLCAodHJhY2sgPT0gbnVsbCkgPyAw
IDogdHJhY2submF0aXZlVHJhY2spKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGlmIChjYWNoZWRUcmFjayAhPSBudWxsICYmIG93bnNUcmFjaykgewotICAgICAgY2FjaGVkVHJh
Y2suZGlzcG9zZSgpOwotICAgIH0KLSAgICBjYWNoZWRUcmFjayA9IHRyYWNrOwotICAgIG93bnNU
cmFjayA9IHRha2VPd25lcnNoaXA7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMg
TWVkaWFTdHJlYW1UcmFjayB0cmFjaygpIHsKLSAgICByZXR1cm4gY2FjaGVkVHJhY2s7Ci0gIH0K
LQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJzKFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVy
cykgewotICAgIHJldHVybiBuYXRpdmVTZXRQYXJhbWV0ZXJzKG5hdGl2ZVJ0cFNlbmRlciwgcGFy
YW1ldGVycyk7Ci0gIH0KLQotICBwdWJsaWMgUnRwUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkg
ewotICAgIHJldHVybiBuYXRpdmVHZXRQYXJhbWV0ZXJzKG5hdGl2ZVJ0cFNlbmRlcik7Ci0gIH0K
LQotICBwdWJsaWMgU3RyaW5nIGlkKCkgewotICAgIHJldHVybiBuYXRpdmVJZChuYXRpdmVSdHBT
ZW5kZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBpZiAoY2FjaGVk
VHJhY2sgIT0gbnVsbCAmJiBvd25zVHJhY2spIHsKLSAgICAgIGNhY2hlZFRyYWNrLmRpc3Bvc2Uo
KTsKLSAgICB9Ci0gICAgZnJlZShuYXRpdmVSdHBTZW5kZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU2V0VHJhY2sobG9uZyBuYXRpdmVSdHBTZW5kZXIs
IGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIC8vIFRoaXMgc2hvdWxkIGluY3JlbWVudCB0aGUgcmVm
ZXJlbmNlIGNvdW50IG9mIHRoZSB0cmFjay4KLSAgLy8gV2lsbCBiZSByZWxlYXNlZCBpbiBkaXNw
b3NlKCkgb3Igc2V0VHJhY2soKS4KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZl
R2V0VHJhY2sobG9uZyBuYXRpdmVSdHBTZW5kZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSBib29sZWFuIG5hdGl2ZVNldFBhcmFtZXRlcnMobG9uZyBuYXRpdmVSdHBTZW5kZXIsIFJ0cFBh
cmFtZXRlcnMgcGFyYW1ldGVycyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFJ0cFBhcmFt
ZXRlcnMgbmF0aXZlR2V0UGFyYW1ldGVycyhsb25nIG5hdGl2ZVJ0cFNlbmRlcik7Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgbmF0aXZlIFN0cmluZyBuYXRpdmVJZChsb25nIG5hdGl2ZVJ0cFNlbmRlcik7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVJ0cFNlbmRl
cik7Ci19OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TY3JlZW5DYXB0dXJlckFuZHJvaWQuamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1NjcmVlbkNhcHR1cmVyQW5kcm9pZC5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1NjcmVlbkNhcHR1cmVy
QW5kcm9pZC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlv
bi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9p
ZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9y
dCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuRGlzcGxheU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9p
ZC5oYXJkd2FyZS5kaXNwbGF5LlZpcnR1YWxEaXNwbGF5OwotaW1wb3J0IGFuZHJvaWQubWVkaWEu
cHJvamVjdGlvbi5NZWRpYVByb2plY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0
aW9uLk1lZGlhUHJvamVjdGlvbk1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7
Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0Owot
Ci0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIFZpZGVvQ2FwdHVyZXIgdG8gY2FwdHVyZSB0
aGUgc2NyZWVuIGNvbnRlbnQgYXMgYSB2aWRlbyBzdHJlYW0uCi0gKiBDYXB0dXJpbmcgaXMgZG9u
ZSBieSB7QGNvZGUgTWVkaWFQcm9qZWN0aW9ufSBvbiBhIHtAY29kZSBTdXJmYWNlVGV4dHVyZX0u
IFdlIGludGVyYWN0IHdpdGggdGhpcwotICoge0Bjb2RlIFN1cmZhY2VUZXh0dXJlfSB1c2luZyBh
IHtAY29kZSBTdXJmYWNlVGV4dHVyZUhlbHBlcn0uCi0gKiBUaGUge0Bjb2RlIFN1cmZhY2VUZXh0
dXJlSGVscGVyfSBpcyBjcmVhdGVkIGJ5IHRoZSBuYXRpdmUgY29kZSBhbmQgcGFzc2VkIHRvIHRo
aXMgY2FwdHVyZXIgaW4KLSAqIHtAY29kZSBWaWRlb0NhcHR1cmVyLmluaXRpYWxpemUoKX0uIE9u
IHJlY2VpdmluZyBhIG5ldyBmcmFtZSwgdGhpcyBjYXB0dXJlciBwYXNzZXMgaXQKLSAqIGFzIGEg
dGV4dHVyZSB0byB0aGUgbmF0aXZlIGNvZGUgdmlhIHtAY29kZSBDYXB0dXJlck9ic2VydmVyLm9u
VGV4dHVyZUZyYW1lQ2FwdHVyZWQoKX0uIFRoaXMgdGFrZXMKLSAqIHBsYWNlIG9uIHRoZSBIYW5k
bGVyVGhyZWFkIG9mIHRoZSBnaXZlbiB7QGNvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9LiBXaGVu
IGRvbmUgd2l0aCBlYWNoIGZyYW1lLAotICogdGhlIG5hdGl2ZSBjb2RlIHJldHVybnMgdGhlIGJ1
ZmZlciB0byB0aGUgIHtAY29kZSBTdXJmYWNlVGV4dHVyZUhlbHBlcn0gdG8gYmUgdXNlZCBmb3Ig
bmV3Ci0gKiBmcmFtZXMuIEF0IGFueSB0aW1lLCBhdCBtb3N0IG9uZSBmcmFtZSBpcyBiZWluZyBw
cm9jZXNzZWQuCi0gKi8KLUBUYXJnZXRBcGkoMjEpCi1wdWJsaWMgY2xhc3MgU2NyZWVuQ2FwdHVy
ZXJBbmRyb2lkCi0gICAgaW1wbGVtZW50cyBWaWRlb0NhcHR1cmVyLCBTdXJmYWNlVGV4dHVyZUhl
bHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IERJU1BMQVlfRkxBR1MgPQotICAgICAgRGlzcGxheU1hbmFnZXIuVklSVFVBTF9E
SVNQTEFZX0ZMQUdfUFVCTElDIHwgRGlzcGxheU1hbmFnZXIuVklSVFVBTF9ESVNQTEFZX0ZMQUdf
UFJFU0VOVEFUSU9OOwotICAvLyBEUEkgZm9yIFZpcnR1YWxEaXNwbGF5LCBkb2VzIG5vdCBzZWVt
IHRvIG1hdHRlciBmb3IgdXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSVJUVUFMX0RJ
U1BMQVlfRFBJID0gNDAwOwotCi0gIHByaXZhdGUgZmluYWwgSW50ZW50IG1lZGlhUHJvamVjdGlv
blBlcm1pc3Npb25SZXN1bHREYXRhOwotICBwcml2YXRlIGZpbmFsIE1lZGlhUHJvamVjdGlvbi5D
YWxsYmFjayBtZWRpYVByb2plY3Rpb25DYWxsYmFjazsKLQotICBwcml2YXRlIGludCB3aWR0aDsK
LSAgcHJpdmF0ZSBpbnQgaGVpZ2h0OwotICBwcml2YXRlIFZpcnR1YWxEaXNwbGF5IHZpcnR1YWxE
aXNwbGF5OwotICBwcml2YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVs
cGVyOwotICBwcml2YXRlIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcjsKLSAgcHJp
dmF0ZSBsb25nIG51bUNhcHR1cmVkRnJhbWVzID0gMDsKLSAgcHJpdmF0ZSBNZWRpYVByb2plY3Rp
b24gbWVkaWFQcm9qZWN0aW9uOwotICBwcml2YXRlIGJvb2xlYW4gaXNEaXNwb3NlZCA9IGZhbHNl
OwotICBwcml2YXRlIE1lZGlhUHJvamVjdGlvbk1hbmFnZXIgbWVkaWFQcm9qZWN0aW9uTWFuYWdl
cjsKLQotICAvKioKLSAgICogQ29uc3RydWN0cyBhIG5ldyBTY3JlZW4gQ2FwdHVyZXIuCi0gICAq
Ci0gICAqIEBwYXJhbSBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YSB0aGUgcmVz
dWx0IGRhdGEgb2YgTWVkaWFQcm9qZWN0aW9uIHBlcm1pc3Npb24KLSAgICogICAgIGFjdGl2aXR5
OyB0aGUgY2FsbGluZyBhcHAgbXVzdCB2YWxpZGF0ZSB0aGF0IHJlc3VsdCBjb2RlIGlzIEFjdGl2
aXR5LlJFU1VMVF9PSyBiZWZvcmUKLSAgICogICAgIGNhbGxpbmcgdGhpcyBtZXRob2QuCi0gICAq
IEBwYXJhbSBtZWRpYVByb2plY3Rpb25DYWxsYmFjayBNZWRpYVByb2plY3Rpb24gY2FsbGJhY2sg
dG8gaW1wbGVtZW50IGFwcGxpY2F0aW9uIHNwZWNpZmljCi0gICAqICAgICBsb2dpYyBpbiBldmVu
dHMgc3VjaCBhcyB3aGVuIHRoZSB1c2VyIHJldm9rZXMgYSBwcmV2aW91c2x5IGdyYW50ZWQgY2Fw
dHVyZSBwZXJtaXNzaW9uLgotICAqKi8KLSAgcHVibGljIFNjcmVlbkNhcHR1cmVyQW5kcm9pZChJ
bnRlbnQgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGEsCi0gICAgICBNZWRpYVBy
b2plY3Rpb24uQ2FsbGJhY2sgbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2spIHsKLSAgICB0aGlzLm1l
ZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhID0gbWVkaWFQcm9qZWN0aW9uUGVybWlz
c2lvblJlc3VsdERhdGE7Ci0gICAgdGhpcy5tZWRpYVByb2plY3Rpb25DYWxsYmFjayA9IG1lZGlh
UHJvamVjdGlvbkNhbGxiYWNrOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrTm90RGlzcG9z
ZWQoKSB7Ci0gICAgaWYgKGlzRGlzcG9zZWQpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJjYXB0dXJlciBpcyBkaXNwb3NlZC4iKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGluaXRpYWxpemUoZmluYWwgU3VyZmFjZVRl
eHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsCi0gICAgICBmaW5hbCBDb250ZXh0IGFw
cGxpY2F0aW9uQ29udGV4dCwgZmluYWwgVmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2VydmVyIGNh
cHR1cmVyT2JzZXJ2ZXIpIHsKLSAgICBjaGVja05vdERpc3Bvc2VkKCk7Ci0KLSAgICBpZiAoY2Fw
dHVyZXJPYnNlcnZlciA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiY2FwdHVyZXJPYnNlcnZlciBub3Qgc2V0LiIpOwotICAgIH0KLSAgICB0aGlzLmNhcHR1cmVy
T2JzZXJ2ZXIgPSBjYXB0dXJlck9ic2VydmVyOwotCi0gICAgaWYgKHN1cmZhY2VUZXh0dXJlSGVs
cGVyID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJzdXJmYWNl
VGV4dHVyZUhlbHBlciBub3Qgc2V0LiIpOwotICAgIH0KLSAgICB0aGlzLnN1cmZhY2VUZXh0dXJl
SGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0KLSAgICBtZWRpYVByb2plY3Rpb25NYW5h
Z2VyID0gKE1lZGlhUHJvamVjdGlvbk1hbmFnZXIpIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRTeXN0
ZW1TZXJ2aWNlKAotICAgICAgICBDb250ZXh0Lk1FRElBX1BST0pFQ1RJT05fU0VSVklDRSk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0YXJ0Q2FwdHVy
ZSgKLSAgICAgIGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwgZmluYWwgaW50IGln
bm9yZWRGcmFtZXJhdGUpIHsKLSAgICBjaGVja05vdERpc3Bvc2VkKCk7Ci0KLSAgICB0aGlzLndp
ZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBtZWRpYVByb2pl
Y3Rpb24gPSBtZWRpYVByb2plY3Rpb25NYW5hZ2VyLmdldE1lZGlhUHJvamVjdGlvbigKLSAgICAg
ICAgQWN0aXZpdHkuUkVTVUxUX09LLCBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0
YSk7Ci0KLSAgICAvLyBMZXQgTWVkaWFQcm9qZWN0aW9uIGNhbGxiYWNrIHVzZSB0aGUgU3VyZmFj
ZVRleHR1cmVIZWxwZXIgdGhyZWFkLgotICAgIG1lZGlhUHJvamVjdGlvbi5yZWdpc3RlckNhbGxi
YWNrKG1lZGlhUHJvamVjdGlvbkNhbGxiYWNrLCBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5k
bGVyKCkpOwotCi0gICAgY3JlYXRlVmlydHVhbERpc3BsYXkoKTsKLSAgICBjYXB0dXJlck9ic2Vy
dmVyLm9uQ2FwdHVyZXJTdGFydGVkKHRydWUpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0
YXJ0TGlzdGVuaW5nKFNjcmVlbkNhcHR1cmVyQW5kcm9pZC50aGlzKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc3RvcENhcHR1cmUoKSB7Ci0gICAgY2hl
Y2tOb3REaXNwb3NlZCgpOwotICAgIFRocmVhZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVycnVw
dGlibHkoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLCBuZXcgUnVubmFibGUoKSB7
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotICAgICAgICBjYXB0dXJlck9ic2Vy
dmVyLm9uQ2FwdHVyZXJTdG9wcGVkKCk7Ci0KLSAgICAgICAgaWYgKHZpcnR1YWxEaXNwbGF5ICE9
IG51bGwpIHsKLSAgICAgICAgICB2aXJ0dWFsRGlzcGxheS5yZWxlYXNlKCk7Ci0gICAgICAgICAg
dmlydHVhbERpc3BsYXkgPSBudWxsOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1lZGlhUHJv
amVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgLy8gVW5yZWdpc3RlciB0aGUgY2FsbGJhY2sg
YmVmb3JlIHN0b3BwaW5nLCBvdGhlcndpc2UgdGhlIGNhbGxiYWNrIHJlY3Vyc2l2ZWx5Ci0gICAg
ICAgICAgLy8gY2FsbHMgdGhpcyBtZXRob2QuCi0gICAgICAgICAgbWVkaWFQcm9qZWN0aW9uLnVu
cmVnaXN0ZXJDYWxsYmFjayhtZWRpYVByb2plY3Rpb25DYWxsYmFjayk7Ci0gICAgICAgICAgbWVk
aWFQcm9qZWN0aW9uLnN0b3AoKTsKLSAgICAgICAgICBtZWRpYVByb2plY3Rpb24gPSBudWxsOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHN5bmNocm9uaXplZCB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaXNEaXNwb3NlZCA9IHRydWU7Ci0g
IH0KLQotICAvKioKLSAgICogQ2hhbmdlcyBvdXRwdXQgdmlkZW8gZm9ybWF0LiBUaGlzIG1ldGhv
ZCBjYW4gYmUgdXNlZCB0byBzY2FsZSB0aGUgb3V0cHV0Ci0gICAqIHZpZGVvLCBvciB0byBjaGFu
Z2Ugb3JpZW50YXRpb24gd2hlbiB0aGUgY2FwdHVyZWQgc2NyZWVuIGlzIHJvdGF0ZWQgZm9yIGV4
YW1wbGUuCi0gICAqCi0gICAqIEBwYXJhbSB3aWR0aCBuZXcgb3V0cHV0IHZpZGVvIHdpZHRoCi0g
ICAqIEBwYXJhbSBoZWlnaHQgbmV3IG91dHB1dCB2aWRlbyBoZWlnaHQKLSAgICogQHBhcmFtIGln
bm9yZWRGcmFtZXJhdGUgaWdub3JlZAotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBzeW5j
aHJvbml6ZWQgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KAotICAgICAgZmluYWwgaW50IHdpZHRo
LCBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgaWdub3JlZEZyYW1lcmF0ZSkgewotICAgIGNo
ZWNrTm90RGlzcG9zZWQoKTsKLQotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhl
aWdodCA9IGhlaWdodDsKLQotICAgIGlmICh2aXJ0dWFsRGlzcGxheSA9PSBudWxsKSB7Ci0gICAg
ICAvLyBDYXB0dXJlciBpcyBzdG9wcGVkLCB0aGUgdmlydHVhbCBkaXNwbGF5IHdpbGwgYmUgY3Jl
YXRlZCBpbiBzdGFydENhcHR1ZXIoKS4KLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBD
cmVhdGUgYSBuZXcgdmlydHVhbCBkaXNwbGF5IG9uIHRoZSBzdXJmYWNlVGV4dHVyZUhlbHBlciB0
aHJlYWQgdG8gYXZvaWQgaW50ZXJmZXJlbmNlCi0gICAgLy8gd2l0aCBmcmFtZSBwcm9jZXNzaW5n
LCB3aGljaCBoYXBwZW5zIG9uIHRoZSBzYW1lIHRocmVhZCAod2Ugc2VyaWFsaXplIGV2ZW50cyBi
eSBydW5uaW5nCi0gICAgLy8gdGhlbSBvbiB0aGUgc2FtZSB0aHJlYWQpLgotICAgIFRocmVhZFV0
aWxzLmludm9rZUF0RnJvbnRVbmludGVycnVwdGlibHkoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0
SGFuZGxlcigpLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdmlydHVhbERpc3BsYXkucmVsZWFzZSgpOwotICAgICAg
ICBjcmVhdGVWaXJ0dWFsRGlzcGxheSgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIGNyZWF0ZVZpcnR1YWxEaXNwbGF5KCkgewotICAgIHN1cmZhY2VUZXh0dXJlSGVs
cGVyLmdldFN1cmZhY2VUZXh0dXJlKCkuc2V0RGVmYXVsdEJ1ZmZlclNpemUod2lkdGgsIGhlaWdo
dCk7Ci0gICAgdmlydHVhbERpc3BsYXkgPSBtZWRpYVByb2plY3Rpb24uY3JlYXRlVmlydHVhbERp
c3BsYXkoIldlYlJUQ19TY3JlZW5DYXB0dXJlIiwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgVklS
VFVBTF9ESVNQTEFZX0RQSSwgRElTUExBWV9GTEFHUywgbmV3IFN1cmZhY2Uoc3VyZmFjZVRleHR1
cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSksCi0gICAgICAgIG51bGwgLyogY2FsbGJhY2sg
Ki8sIG51bGwgLyogY2FsbGJhY2sgaGFuZGxlciAqLyk7Ci0gIH0KLQotICAvLyBUaGlzIGlzIGNh
bGxlZCBvbiB0aGUgaW50ZXJuYWwgbG9vcGVyIHRocmVhZCBvZiB7QENvZGUgU3VyZmFjZVRleHR1
cmVIZWxwZXJ9LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVBdmFp
bGFibGUoaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGlt
ZXN0YW1wTnMpIHsKLSAgICBudW1DYXB0dXJlZEZyYW1lcysrOwotICAgIGNhcHR1cmVyT2JzZXJ2
ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgd2lkdGgsIGhlaWdodCwgb2VzVGV4
dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIDAgLyogcm90YXRpb24gKi8sIHRpbWVzdGFtcE5zKTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKSB7Ci0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgbG9uZyBnZXROdW1DYXB0dXJlZEZyYW1l
cygpIHsKLSAgICByZXR1cm4gbnVtQ2FwdHVyZWRGcmFtZXM7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1NkcE9ic2VydmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvU2RwT2JzZXJ2ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEludGVyZmFjZSBmb3Ig
b2JzZXJ2aW5nIFNEUC1yZWxhdGVkIGV2ZW50cy4gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU2RwT2Jz
ZXJ2ZXIgewotICAvKiogQ2FsbGVkIG9uIHN1Y2Nlc3Mgb2YgQ3JlYXRle09mZmVyLEFuc3dlcn0o
KS4gKi8KLSAgcHVibGljIHZvaWQgb25DcmVhdGVTdWNjZXNzKFNlc3Npb25EZXNjcmlwdGlvbiBz
ZHApOwotCi0gIC8qKiBDYWxsZWQgb24gc3VjY2VzcyBvZiBTZXR7TG9jYWwsUmVtb3RlfURlc2Ny
aXB0aW9uKCkuICovCi0gIHB1YmxpYyB2b2lkIG9uU2V0U3VjY2VzcygpOwotCi0gIC8qKiBDYWxs
ZWQgb24gZXJyb3Igb2YgQ3JlYXRle09mZmVyLEFuc3dlcn0oKS4gKi8KLSAgcHVibGljIHZvaWQg
b25DcmVhdGVGYWlsdXJlKFN0cmluZyBlcnJvcik7Ci0KLSAgLyoqIENhbGxlZCBvbiBlcnJvciBv
ZiBTZXR7TG9jYWwsUmVtb3RlfURlc2NyaXB0aW9uKCkuICovCi0gIHB1YmxpYyB2b2lkIG9uU2V0
RmFpbHVyZShTdHJpbmcgZXJyb3IpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TZXNzaW9u
RGVzY3JpcHRpb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Nlc3Npb25E
ZXNjcmlwdGlvbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Nl
c3Npb25EZXNjcmlwdGlvbi5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDEgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIERlc2NyaXB0
aW9uIG9mIGFuIFJGQyA0NTY2IFNlc3Npb24uCi0gKiBTRFBzIGFyZSBwYXNzZWQgYXMgc2VyaWFs
aXplZCBTdHJpbmdzIGluIEphdmEtbGFuZCBhbmQgYXJlIG1hdGVyaWFsaXplZAotICogdG8gU2Vz
c2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlIGFzIGFwcHJvcHJpYXRlIGluIHRoZSBKTkkgbGF5ZXIu
Ci0gKi8KLXB1YmxpYyBjbGFzcyBTZXNzaW9uRGVzY3JpcHRpb24gewotICAvKiogSmF2YS1sYW5k
IGVudW0gdmVyc2lvbiBvZiBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UncyB0eXBlKCkgc3Ry
aW5nLiAqLwotICBwdWJsaWMgc3RhdGljIGVudW0gVHlwZSB7Ci0gICAgT0ZGRVIsCi0gICAgUFJB
TlNXRVIsCi0gICAgQU5TV0VSOwotCi0gICAgcHVibGljIFN0cmluZyBjYW5vbmljYWxGb3JtKCkg
ewotICAgICAgcmV0dXJuIG5hbWUoKS50b0xvd2VyQ2FzZSgpOwotICAgIH0KLQotICAgIHB1Ymxp
YyBzdGF0aWMgVHlwZSBmcm9tQ2Fub25pY2FsRm9ybShTdHJpbmcgY2Fub25pY2FsKSB7Ci0gICAg
ICByZXR1cm4gVHlwZS52YWx1ZU9mKFR5cGUuY2xhc3MsIGNhbm9uaWNhbC50b1VwcGVyQ2FzZSgp
KTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgVHlwZSB0eXBlOwotICBwdWJsaWMgZmlu
YWwgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0gIHB1YmxpYyBTZXNzaW9uRGVzY3JpcHRpb24oVHlw
ZSB0eXBlLCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAg
IHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9TdGF0c09ic2VydmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9TdGF0c09ic2VydmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvU3RhdHNPYnNlcnZlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTcgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSW50ZXJmYWNlIGZv
ciBvYnNlcnZpbmcgU3RhdHMgcmVwb3J0cyAoc2VlIHdlYnJ0Yzo6U3RhdHNPYnNlcnZlcnMpLiAq
LwotcHVibGljIGludGVyZmFjZSBTdGF0c09ic2VydmVyIHsKLSAgLyoqIENhbGxlZCB3aGVuIHRo
ZSByZXBvcnRzIGFyZSByZWFkeS4qLwotICBwdWJsaWMgdm9pZCBvbkNvbXBsZXRlKFN0YXRzUmVw
b3J0W10gcmVwb3J0cyk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N0YXRzUmVwb3J0Lmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c1JlcG9ydC5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N0YXRzUmVwb3J0LmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLS8qKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRjOjpTdGF0c1JlcG9ydC4gKi8K
LXB1YmxpYyBjbGFzcyBTdGF0c1JlcG9ydCB7Ci0gIC8qKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRj
OjpTdGF0c1JlcG9ydDo6VmFsdWUuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgVmFsdWUgewot
ICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHZh
bHVlOwotCi0gICAgcHVibGljIFZhbHVlKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAg
ICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgfQot
Ci0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIFN0cmluZ0J1aWxkZXIgYnVp
bGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICBidWlsZGVyLmFwcGVuZCgiWyIpLmFw
cGVuZChuYW1lKS5hcHBlbmQoIjogIikuYXBwZW5kKHZhbHVlKS5hcHBlbmQoIl0iKTsKLSAgICAg
IHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFs
IFN0cmluZyBpZDsKLSAgcHVibGljIGZpbmFsIFN0cmluZyB0eXBlOwotICAvLyBUaW1lIHNpbmNl
IDE5NzAtMDEtMDFUMDA6MDA6MDBaIGluIG1pbGxpc2Vjb25kcy4KLSAgcHVibGljIGZpbmFsIGRv
dWJsZSB0aW1lc3RhbXA7Ci0gIHB1YmxpYyBmaW5hbCBWYWx1ZVtdIHZhbHVlczsKLQotICBwdWJs
aWMgU3RhdHNSZXBvcnQoU3RyaW5nIGlkLCBTdHJpbmcgdHlwZSwgZG91YmxlIHRpbWVzdGFtcCwg
VmFsdWVbXSB2YWx1ZXMpIHsKLSAgICB0aGlzLmlkID0gaWQ7Ci0gICAgdGhpcy50eXBlID0gdHlw
ZTsKLSAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKLSAgICB0aGlzLnZhbHVlcyA9IHZh
bHVlczsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZCgi
aWQ6ICIpCi0gICAgICAgIC5hcHBlbmQoaWQpCi0gICAgICAgIC5hcHBlbmQoIiwgdHlwZTogIikK
LSAgICAgICAgLmFwcGVuZCh0eXBlKQotICAgICAgICAuYXBwZW5kKCIsIHRpbWVzdGFtcDogIikK
LSAgICAgICAgLmFwcGVuZCh0aW1lc3RhbXApCi0gICAgICAgIC5hcHBlbmQoIiwgdmFsdWVzOiAi
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7ICsraSkgewotICAgICAg
YnVpbGRlci5hcHBlbmQodmFsdWVzW2ldLnRvU3RyaW5nKCkpLmFwcGVuZCgiLCAiKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlci5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5k
cm9pZC5vcGVuZ2wuR0xFUzExRXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWlt
cG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9y
dCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9j
azsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uRmxvYXRC
dWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGU7Ci1pbXBvcnQgamF2
YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHRvIGNy
ZWF0ZSBhbmQgc3luY2hyb25pemUgYWNjZXNzIHRvIGEgU3VyZmFjZVRleHR1cmUuIFRoZSBjYWxs
ZXIgd2lsbCBnZXQgbm90aWZpZWQKLSAqIG9mIG5ldyBmcmFtZXMgaW4gb25UZXh0dXJlRnJhbWVB
dmFpbGFibGUoKSwgYW5kIHNob3VsZCBjYWxsIHJldHVyblRleHR1cmVGcmFtZSgpIHdoZW4gZG9u
ZSB3aXRoCi0gKiB0aGUgZnJhbWUuIE9ubHkgb25lIHRleHR1cmUgZnJhbWUgY2FuIGJlIGluIGZs
aWdodCBhdCBvbmNlLCBzbyByZXR1cm5UZXh0dXJlRnJhbWUoKSBtdXN0IGJlCi0gKiBjYWxsZWQg
aW4gb3JkZXIgdG8gcmVjZWl2ZSBhIG5ldyBmcmFtZS4gQ2FsbCBzdG9wTGlzdGVuaW5nKCkgdG8g
c3RvcCByZWNlaXZlaW5nIG5ldyBmcmFtZXMuIENhbGwKLSAqIGRpc3Bvc2UgdG8gcmVsZWFzZSBh
bGwgcmVzb3VyY2VzIG9uY2UgdGhlIHRleHR1cmUgZnJhbWUgaXMgcmV0dXJuZWQuCi0gKiBOb3Rl
IHRoYXQgdGhlcmUgaXMgYSBDKysgY291bnRlciBwYXJ0IG9mIHRoaXMgY2xhc3MgdGhhdCBvcHRp
b25hbGx5IGNhbiBiZSB1c2VkLiBJdCBpcyB1c2VkIGZvcgotICogd3JhcHBpbmcgdGV4dHVyZSBm
cmFtZXMgaW50byB3ZWJydGM6OlZpZGVvRnJhbWVzIGFuZCBhbHNvIGhhbmRsZXMgY2FsbGluZyBy
ZXR1cm5UZXh0dXJlRnJhbWUoKQotICogd2hlbiB0aGUgd2VicnRjOjpWaWRlb0ZyYW1lIGlzIG5v
IGxvbmdlciB1c2VkLgotICovCi1jbGFzcyBTdXJmYWNlVGV4dHVyZUhlbHBlciB7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiU3VyZmFjZVRleHR1cmVIZWxwZXIiOwotICAv
KioKLSAgICogQ2FsbGJhY2sgaW50ZXJmYWNlIGZvciBiZWluZyBub3RpZmllZCB0aGF0IGEgbmV3
IHRleHR1cmUgZnJhbWUgaXMgYXZhaWxhYmxlLiBUaGUgY2FsbHMgd2lsbCBiZQotICAgKiBtYWRl
IG9uIGEgZGVkaWNhdGVkIHRocmVhZCB3aXRoIGEgYm91bmQgRUdMQ29udGV4dC4gVGhlIHRocmVh
ZCB3aWxsIGJlIHRoZSBzYW1lIHRocm91Z2hvdXQgdGhlCi0gICAqIGxpZmV0aW1lIG9mIHRoZSBT
dXJmYWNlVGV4dHVyZUhlbHBlciBpbnN0YW5jZSwgYnV0IGRpZmZlcmVudCBmcm9tIHRoZSB0aHJl
YWQgY2FsbGluZyB0aGUKLSAgICogU3VyZmFjZVRleHR1cmVIZWxwZXIgY29uc3RydWN0b3IuIFRo
ZSBjYWxsZWUgaXMgbm90IGFsbG93ZWQgdG8gbWFrZSBhbm90aGVyIEVHTENvbnRleHQgY3VycmVu
dAotICAgKiBvbiB0aGUgY2FsbGluZyB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNl
IE9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgewotICAgIGFic3RyYWN0IHZvaWQgb25U
ZXh0dXJlRnJhbWVBdmFpbGFibGUoCi0gICAgICAgIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10g
dHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVzdGFtcE5zKTsKLSAgfQotCi0gIC8qKgotICAgKiBD
b25zdHJ1Y3QgYSBuZXcgU3VyZmFjZVRleHR1cmVIZWxwZXIgc2hhcmluZyBPcGVuR0wgcmVzb3Vy
Y2VzIHdpdGggfHNoYXJlZENvbnRleHR8LiBBIGRlZGljYXRlZAotICAgKiB0aHJlYWQgYW5kIGhh
bmRsZXIgaXMgY3JlYXRlZCBmb3IgaGFuZGxpbmcgdGhlIFN1cmZhY2VUZXh0dXJlLiBNYXkgcmV0
dXJuIG51bGwgaWYgRUdMIGZhaWxzIHRvCi0gICAqIGluaXRpYWxpemUgYSBwaXhlbCBidWZmZXIg
c3VyZmFjZSBhbmQgbWFrZSBpdCBjdXJyZW50LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdXJm
YWNlVGV4dHVyZUhlbHBlciBjcmVhdGUoCi0gICAgICBmaW5hbCBTdHJpbmcgdGhyZWFkTmFtZSwg
ZmluYWwgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQpIHsKLSAgICBmaW5hbCBIYW5kbGVy
VGhyZWFkIHRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKHRocmVhZE5hbWUpOwotICAgIHRocmVh
ZC5zdGFydCgpOwotICAgIGZpbmFsIEhhbmRsZXIgaGFuZGxlciA9IG5ldyBIYW5kbGVyKHRocmVh
ZC5nZXRMb29wZXIoKSk7Ci0KLSAgICAvLyBUaGUgb25GcmFtZUF2YWlsYWJsZSgpIGNhbGxiYWNr
IHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIFN1cmZhY2VUZXh0dXJlIGN0b3IgdGhyZWFkLiBTZWU6
Ci0gICAgLy8gaHR0cDovL2dyZXBjb2RlLmNvbS9maWxlL3JlcG9zaXRvcnkuZ3JlcGNvZGUuY29t
L2phdmEvZXh0L2NvbS5nb29nbGUuYW5kcm9pZC9hbmRyb2lkLzUuMS4xX3IxL2FuZHJvaWQvZ3Jh
cGhpY3MvU3VyZmFjZVRleHR1cmUuamF2YSMxOTUuCi0gICAgLy8gVGhlcmVmb3JlLCBpbiBvcmRl
ciB0byBjb250cm9sIHRoZSBjYWxsYmFjayB0aHJlYWQgb24gQVBJIGx2bCA8IDIxLCB0aGUgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIKLSAgICAvLyBpcyBjb25zdHJ1Y3RlZCBvbiB0aGUgfGhhbmRsZXJ8
IHRocmVhZC4KLSAgICByZXR1cm4gVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0
aWJseShoYW5kbGVyLCBuZXcgQ2FsbGFibGU8U3VyZmFjZVRleHR1cmVIZWxwZXI+KCkgewotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3VyZmFjZVRleHR1cmVIZWxwZXIgY2FsbCgpIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICByZXR1cm4gbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVy
KHNoYXJlZENvbnRleHQsIGhhbmRsZXIpOwotICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0
aW9uIGUpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCB0aHJlYWROYW1lICsgIiBjcmVhdGUg
ZmFpbHVyZSIsIGUpOwotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgaGFuZGxlcjsKLSAgcHJp
dmF0ZSBmaW5hbCBFZ2xCYXNlIGVnbEJhc2U7Ci0gIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1
cmUgc3VyZmFjZVRleHR1cmU7Ci0gIHByaXZhdGUgZmluYWwgaW50IG9lc1RleHR1cmVJZDsKLSAg
cHJpdmF0ZSBZdXZDb252ZXJ0ZXIgeXV2Q29udmVydGVyOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxl
cyBhcmUgb25seSBhY2Nlc3NlZCBmcm9tIHRoZSB8aGFuZGxlcnwgdGhyZWFkLgotICBwcml2YXRl
IE9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgbGlzdGVuZXI7Ci0gIC8vIFRoZSBwb3Nz
aWJsZSBzdGF0ZXMgb2YgdGhpcyBjbGFzcy4KLSAgcHJpdmF0ZSBib29sZWFuIGhhc1BlbmRpbmdU
ZXh0dXJlID0gZmFsc2U7Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBpc1RleHR1cmVJblVz
ZSA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gaXNRdWl0dGluZyA9IGZhbHNlOwotICAvLyB8
cGVuZGluZ0xpc3RlbmVyfCBpcyBzZXQgaW4gc2V0TGlzdGVuZXIoKSBhbmQgdGhlIHJ1bm5hYmxl
IGlzIHBvc3RlZCB0byB0aGUgaGFuZGxlciB0aHJlYWQuCi0gIC8vIHNldExpc3RlbmVyKCkgaXMg
bm90IGFsbG93ZWQgdG8gYmUgY2FsbGVkIGFnYWluIGJlZm9yZSBzdG9wTGlzdGVuaW5nKCksIHNv
IHRoaXMgaXMgdGhyZWFkIHNhZmUuCi0gIHByaXZhdGUgT25UZXh0dXJlRnJhbWVBdmFpbGFibGVM
aXN0ZW5lciBwZW5kaW5nTGlzdGVuZXI7Ci0gIGZpbmFsIFJ1bm5hYmxlIHNldExpc3RlbmVyUnVu
bmFibGUgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIlNldHRpbmcgbGlzdGVuZXIgdG8gIiArIHBl
bmRpbmdMaXN0ZW5lcik7Ci0gICAgICBsaXN0ZW5lciA9IHBlbmRpbmdMaXN0ZW5lcjsKLSAgICAg
IHBlbmRpbmdMaXN0ZW5lciA9IG51bGw7Ci0gICAgICAvLyBNYXkgaGF2ZSBhIHBlbmRpbmcgZnJh
bWUgZnJvbSB0aGUgcHJldmlvdXMgY2FwdHVyZSBzZXNzaW9uIC0gZHJvcCBpdC4KLSAgICAgIGlm
IChoYXNQZW5kaW5nVGV4dHVyZSkgewotICAgICAgICAvLyBDYWxsaW5nIHVwZGF0ZVRleEltYWdl
KCkgaXMgbmVjY2Vzc2FyeSBpbiBvcmRlciB0byByZWNlaXZlIG5ldyBmcmFtZXMuCi0gICAgICAg
IHVwZGF0ZVRleEltYWdlKCk7Ci0gICAgICAgIGhhc1BlbmRpbmdUZXh0dXJlID0gZmFsc2U7Ci0g
ICAgICB9Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIoRWds
QmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsIEhhbmRsZXIgaGFuZGxlcikgewotICAgIGlmICho
YW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkp
IHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlN1cmZhY2VUZXh0dXJl
SGVscGVyIG11c3QgYmUgY3JlYXRlZCBvbiB0aGUgaGFuZGxlciB0aHJlYWQiKTsKLSAgICB9Ci0g
ICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKLQotICAgIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0
ZShzaGFyZWRDb250ZXh0LCBFZ2xCYXNlLkNPTkZJR19QSVhFTF9CVUZGRVIpOwotICAgIHRyeSB7
Ci0gICAgICAvLyBCb3RoIHRoZXNlIHN0YXRlbWVudHMgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGZh
aWwgb24gcmFyZSBvY2Nhc2lvbnMsIHNlZSBCVUc9d2VicnRjOjU2ODIuCi0gICAgICBlZ2xCYXNl
LmNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKTsKLSAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQo
KTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIENsZWFuIHVw
IGJlZm9yZSByZXRocm93aW5nIHRoZSBleGNlcHRpb24uCi0gICAgICBlZ2xCYXNlLnJlbGVhc2Uo
KTsKLSAgICAgIGhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdCgpOwotICAgICAgdGhyb3cgZTsKLSAg
ICB9Ci0KLSAgICBvZXNUZXh0dXJlSWQgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMxMUV4
dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7Ci0gICAgc3VyZmFjZVRleHR1cmUgPSBuZXcgU3Vy
ZmFjZVRleHR1cmUob2VzVGV4dHVyZUlkKTsKLSAgICBzdXJmYWNlVGV4dHVyZS5zZXRPbkZyYW1l
QXZhaWxhYmxlTGlzdGVuZXIobmV3IFN1cmZhY2VUZXh0dXJlLk9uRnJhbWVBdmFpbGFibGVMaXN0
ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25GcmFtZUF2YWls
YWJsZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgewotICAgICAgICBoYXNQZW5kaW5n
VGV4dHVyZSA9IHRydWU7Ci0gICAgICAgIHRyeURlbGl2ZXJUZXh0dXJlRnJhbWUoKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBTdGFydCB0byBzdHJlYW0gdGV4dHVyZXMg
dG8gdGhlIGdpdmVuIHxsaXN0ZW5lcnwuIElmIHlvdSBuZWVkIHRvIGNoYW5nZSBsaXN0ZW5lciwg
eW91IG5lZWQgdG8KLSAgICogY2FsbCBzdG9wTGlzdGVuaW5nKCkgZmlyc3QuCi0gICAqLwotICBw
dWJsaWMgdm9pZCBzdGFydExpc3RlbmluZyhmaW5hbCBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxp
c3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgaWYgKHRoaXMubGlzdGVuZXIgIT0gbnVsbCB8fCB0aGlz
LnBlbmRpbmdMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJTdXJmYWNlVGV4dHVyZUhlbHBlciBsaXN0ZW5lciBoYXMgYWxyZWFkeSBiZWVu
IHNldC4iKTsKLSAgICB9Ci0gICAgdGhpcy5wZW5kaW5nTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAg
ICBoYW5kbGVyLnBvc3Qoc2V0TGlzdGVuZXJSdW5uYWJsZSk7Ci0gIH0KLQotICAvKioKLSAgICog
U3RvcCBsaXN0ZW5pbmcuIFRoZSBsaXN0ZW5lciBzZXQgaW4gc3RhcnRMaXN0ZW5pbmcoKSBpcyBn
dWFyYW50ZWRlZCB0byBub3QgcmVjZWl2ZSBhbnkgbW9yZQotICAgKiBvblRleHR1cmVGcmFtZUF2
YWlsYWJsZSgpIGNhbGxiYWNrcyBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCi0gICAqLwot
ICBwdWJsaWMgdm9pZCBzdG9wTGlzdGVuaW5nKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdG9w
TGlzdGVuaW5nKCkiKTsKLSAgICBoYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhzZXRMaXN0ZW5lclJ1
bm5hYmxlKTsKLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KGhh
bmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICBsaXN0ZW5lciA9IG51bGw7Ci0gICAgICAgIHBlbmRpbmdMaXN0
ZW5lciA9IG51bGw7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0cmll
dmUgdGhlIHVuZGVybHlpbmcgU3VyZmFjZVRleHR1cmUuIFRoZSBTdXJmYWNlVGV4dHVyZSBzaG91
bGQgYmUgcGFzc2VkIGluIHRvIGEgdmlkZW8KLSAgICogcHJvZHVjZXIgc3VjaCBhcyBhIGNhbWVy
YSBvciBkZWNvZGVyLgotICAgKi8KLSAgcHVibGljIFN1cmZhY2VUZXh0dXJlIGdldFN1cmZhY2VU
ZXh0dXJlKCkgewotICAgIHJldHVybiBzdXJmYWNlVGV4dHVyZTsKLSAgfQotCi0gIC8qKgotICAg
KiBSZXRyaWV2ZSB0aGUgaGFuZGxlciB0aGF0IGNhbGxzIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxl
KCkuIFRoaXMgaGFuZGxlciBpcyB2YWxpZCB1bnRpbAotICAgKiBkaXNwb3NlKCkgaXMgY2FsbGVk
LgotICAgKi8KLSAgcHVibGljIEhhbmRsZXIgZ2V0SGFuZGxlcigpIHsKLSAgICByZXR1cm4gaGFu
ZGxlcjsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gc2lnbmFsIHRo
YXQgeW91IGFyZSBkb25lIHdpdGggdGhlIGZyYW1lIHJlY2VpdmVkIGluCi0gICAqIG9uVGV4dHVy
ZUZyYW1lQXZhaWxhYmxlKCkuIE9ubHkgb25lIHRleHR1cmUgZnJhbWUgY2FuIGJlIGluIGZsaWdo
dCBhdCBvbmNlLCBzbyB5b3UgbXVzdCBjYWxsCi0gICAqIHRoaXMgZnVuY3Rpb24gaW4gb3JkZXIg
dG8gcmVjZWl2ZSBhIG5ldyBmcmFtZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJldHVyblRleHR1
cmVGcmFtZSgpIHsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlzVGV4dHVyZUluVXNl
ID0gZmFsc2U7Ci0gICAgICAgIGlmIChpc1F1aXR0aW5nKSB7Ci0gICAgICAgICAgcmVsZWFzZSgp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRyeURlbGl2ZXJUZXh0dXJlRnJhbWUoKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNU
ZXh0dXJlSW5Vc2UoKSB7Ci0gICAgcmV0dXJuIGlzVGV4dHVyZUluVXNlOwotICB9Ci0KLSAgLyoq
Ci0gICAqIENhbGwgZGlzY29ubmVjdCgpIHRvIHN0b3AgcmVjZWl2aW5nIGZyYW1lcy4gT3BlbkdM
IHJlc291cmNlcyBhcmUgcmVsZWFzZWQgYW5kIHRoZSBoYW5kbGVyIGlzCi0gICAqIHN0b3BwZWQg
d2hlbiB0aGUgdGV4dHVyZSBmcmFtZSBoYXMgYmVlbiByZXR1cm5lZCBieSBhIGNhbGwgdG8gcmV0
dXJuVGV4dHVyZUZyYW1lKCkuIFlvdSBhcmUKLSAgICogZ3VhcmFudGVlZCB0byBub3QgcmVjZWl2
ZSBhbnkgbW9yZSBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGFmdGVyIHRoaXMgZnVuY3Rpb24g
cmV0dXJucy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgImRpc3Bvc2UoKSIpOwotICAgIFRocmVhZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVy
cnVwdGlibHkoaGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlzUXVpdHRpbmcgPSB0cnVlOwotICAgICAg
ICBpZiAoIWlzVGV4dHVyZUluVXNlKSB7Ci0gICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0ZXh0dXJlVG9ZVVYoZmlu
YWwgQnl0ZUJ1ZmZlciBidWYsIGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwKLSAg
ICAgIGZpbmFsIGludCBzdHJpZGUsIGZpbmFsIGludCB0ZXh0dXJlSWQsIGZpbmFsIGZsb2F0W10g
dHJhbnNmb3JtTWF0cml4KSB7Ci0gICAgaWYgKHRleHR1cmVJZCAhPSBvZXNUZXh0dXJlSWQpIHsK
LSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInRleHR1cmVUb0J5dGVCdWZm
ZXIgY2FsbGVkIHdpdGggdW5leHBlY3RlZCB0ZXh0dXJlSWQiKTsKLSAgICB9Ci0KLSAgICBUaHJl
YWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KGhhbmRsZXIsIG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICBpZiAoeXV2Q29udmVydGVyID09IG51bGwpIHsKLSAgICAgICAgICB5dXZDb252ZXJ0ZXIgPSBu
ZXcgWXV2Q29udmVydGVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgeXV2Q29udmVydGVyLmNvbnZl
cnQoYnVmLCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUsIHRleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4
KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVUZXhJbWFn
ZSgpIHsKLSAgICAvLyBTdXJmYWNlVGV4dHVyZS51cGRhdGVUZXhJbWFnZSBhcHBhcmVudGx5IGNh
biBjb21wZXRlIGFuZCBkZWFkbG9jayB3aXRoIGVnbFN3YXBCdWZmZXJzLAotICAgIC8vIGFzIG9i
c2VydmVkIG9uIE5leHVzIDUuIFRoZXJlZm9yZSwgc3luY2hyb25pemUgaXQgd2l0aCB0aGUgRUdM
IGZ1bmN0aW9ucy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0
Yy9pc3N1ZXMvZGV0YWlsP2lkPTU3MDIgZm9yIG1vcmUgaW5mby4KLSAgICBzeW5jaHJvbml6ZWQg
KEVnbEJhc2UubG9jaykgewotICAgICAgc3VyZmFjZVRleHR1cmUudXBkYXRlVGV4SW1hZ2UoKTsK
LSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdHJ5RGVsaXZlclRleHR1cmVGcmFtZSgpIHsK
LSAgICBpZiAoaGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSAhPSBUaHJlYWQuY3VycmVu
dFRocmVhZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9u
ZyB0aHJlYWQuIik7Ci0gICAgfQotICAgIGlmIChpc1F1aXR0aW5nIHx8ICFoYXNQZW5kaW5nVGV4
dHVyZSB8fCBpc1RleHR1cmVJblVzZSB8fCBsaXN0ZW5lciA9PSBudWxsKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGlzVGV4dHVyZUluVXNlID0gdHJ1ZTsKLSAgICBoYXNQZW5kaW5nVGV4
dHVyZSA9IGZhbHNlOwotCi0gICAgdXBkYXRlVGV4SW1hZ2UoKTsKLQotICAgIGZpbmFsIGZsb2F0
W10gdHJhbnNmb3JtTWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKLSAgICBzdXJmYWNlVGV4dHVyZS5n
ZXRUcmFuc2Zvcm1NYXRyaXgodHJhbnNmb3JtTWF0cml4KTsKLSAgICBmaW5hbCBsb25nIHRpbWVz
dGFtcE5zID0gKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLklD
RV9DUkVBTV9TQU5EV0lDSCkKLSAgICAgICAgPyBzdXJmYWNlVGV4dHVyZS5nZXRUaW1lc3RhbXAo
KQotICAgICAgICA6IFRpbWVVbml0Lk1JTExJU0VDT05EUy50b05hbm9zKFN5c3RlbUNsb2NrLmVs
YXBzZWRSZWFsdGltZSgpKTsKLSAgICBsaXN0ZW5lci5vblRleHR1cmVGcmFtZUF2YWlsYWJsZShv
ZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgdGltZXN0YW1wTnMpOwotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgaWYgKGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhy
ZWFkKCkgIT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhyZWFkLiIpOwotICAgIH0KLSAgICBpZiAoaXNUZXh0
dXJlSW5Vc2UgfHwgIWlzUXVpdHRpbmcpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVF
eGNlcHRpb24oIlVuZXhwZWN0ZWQgcmVsZWFzZS4iKTsKLSAgICB9Ci0gICAgaWYgKHl1dkNvbnZl
cnRlciAhPSBudWxsKSB7Ci0gICAgICB5dXZDb252ZXJ0ZXIucmVsZWFzZSgpOwotICAgIH0KLSAg
ICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge29lc1RleHR1cmVJZH0sIDAp
OwotICAgIHN1cmZhY2VUZXh0dXJlLnJlbGVhc2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsK
LSAgICBoYW5kbGVyLmdldExvb3BlcigpLnF1aXQoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRlcmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRlcmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlci5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMjIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVu
dC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhp
Y3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRy
b2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7
Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci0KLS8qKgotICog
SW1wbGVtZW50cyBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGJ5IGRpc3BsYXlp
bmcgdGhlIHZpZGVvIHN0cmVhbSBvbiBhIFN1cmZhY2VWaWV3LgotICogcmVuZGVyRnJhbWUoKSBp
cyBhc3luY2hyb25vdXMgdG8gYXZvaWQgYmxvY2tpbmcgdGhlIGNhbGxpbmcgdGhyZWFkLgotICog
VGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZSBhbmQgaGFuZGxlcyBhY2Nlc3MgZnJvbSBwb3RlbnRp
YWxseSBmb3VyIGRpZmZlcmVudCB0aHJlYWRzOgotICogSW50ZXJhY3Rpb24gZnJvbSB0aGUgbWFp
biBhcHAgaW4gaW5pdCwgcmVsZWFzZSwgc2V0TWlycm9yLCBhbmQgc2V0U2NhbGluZ3R5cGUuCi0g
KiBJbnRlcmFjdGlvbiBmcm9tIEMrKyBydGM6OlZpZGVvU2lua0ludGVyZmFjZSBpbiByZW5kZXJG
cmFtZS4KLSAqIEludGVyYWN0aW9uIGZyb20gdGhlIEFjdGl2aXR5IGxpZmVjeWNsZSBpbiBzdXJm
YWNlQ3JlYXRlZCwgc3VyZmFjZUNoYW5nZWQsIGFuZCBzdXJmYWNlRGVzdHJveWVkLgotICogSW50
ZXJhY3Rpb24gd2l0aCB0aGUgbGF5b3V0IGZyYW1ld29yayBpbiBvbk1lYXN1cmUgYW5kIG9uU2l6
ZUNoYW5nZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdXJmYWNlVmlld1JlbmRlcmVyCi0gICAgZXh0
ZW5kcyBTdXJmYWNlVmlldyBpbXBsZW1lbnRzIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2ssIFZpZGVv
UmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9
ICJTdXJmYWNlVmlld1JlbmRlcmVyIjsKLQotICAvLyBDYWNoZWQgcmVzb3VyY2UgbmFtZS4KLSAg
cHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVzb3VyY2VOYW1lOwotICBwcml2YXRlIGZpbmFsIFJlbmRl
cmVyQ29tbW9uLlZpZGVvTGF5b3V0TWVhc3VyZSB2aWRlb0xheW91dE1lYXN1cmUgPQotICAgICAg
bmV3IFJlbmRlcmVyQ29tbW9uLlZpZGVvTGF5b3V0TWVhc3VyZSgpOwotICBwcml2YXRlIGZpbmFs
IEVnbFJlbmRlcmVyIGVnbFJlbmRlcmVyOwotCi0gIC8vIENhbGxiYWNrIGZvciByZXBvcnRpbmcg
cmVuZGVyZXIgZXZlbnRzLiBSZWFkLW9ubHkgYWZ0ZXIgaW5pdGlsaXphdGlvbiBzbyBubyBsb2Nr
IHJlcXVpcmVkLgotICBwcml2YXRlIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRl
cmVyRXZlbnRzOwotCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGxheW91dExvY2sgPSBuZXcgT2Jq
ZWN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0ZpcnN0RnJhbWVSZW5kZXJlZDsKLSAgcHJpdmF0
ZSBpbnQgcm90YXRlZEZyYW1lV2lkdGg7Ci0gIHByaXZhdGUgaW50IHJvdGF0ZWRGcmFtZUhlaWdo
dDsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVSb3RhdGlvbjsKLQotICAvKioKLSAgICogU3RhbmRhcmQg
VmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91IG11c3Qg
Zmlyc3QgY2FsbCBpbml0KCkuCi0gICAqLwotICBwdWJsaWMgU3VyZmFjZVZpZXdSZW5kZXJlcihD
b250ZXh0IGNvbnRleHQpIHsKLSAgICBzdXBlcihjb250ZXh0KTsKLSAgICB0aGlzLnJlc291cmNl
TmFtZSA9IGdldFJlc291cmNlTmFtZSgpOwotICAgIGVnbFJlbmRlcmVyID0gbmV3IEVnbFJlbmRl
cmVyKHJlc291cmNlTmFtZSk7Ci0gICAgZ2V0SG9sZGVyKCkuYWRkQ2FsbGJhY2sodGhpcyk7Ci0g
IH0KLQotICAvKioKLSAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8g
cmVuZGVyIHNvbWV0aGluZywgeW91IG11c3QgZmlyc3QgY2FsbCBpbml0KCkuCi0gICAqLwotICBw
dWJsaWMgU3VyZmFjZVZpZXdSZW5kZXJlcihDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBh
dHRycykgewotICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKLSAgICB0aGlzLnJlc291cmNlTmFt
ZSA9IGdldFJlc291cmNlTmFtZSgpOwotICAgIGVnbFJlbmRlcmVyID0gbmV3IEVnbFJlbmRlcmVy
KHJlc291cmNlTmFtZSk7Ci0gICAgZ2V0SG9sZGVyKCkuYWRkQ2FsbGJhY2sodGhpcyk7Ci0gIH0K
LQotICAvKioKLSAgICogSW5pdGlhbGl6ZSB0aGlzIGNsYXNzLCBzaGFyaW5nIHJlc291cmNlcyB3
aXRoIHxzaGFyZWRDb250ZXh0fC4gSXQgaXMgYWxsb3dlZCB0byBjYWxsIGluaXQoKSB0bwotICAg
KiByZWluaXRpYWxpemUgdGhlIHJlbmRlcmVyIGFmdGVyIGEgcHJldmlvdXMgaW5pdCgpL3JlbGVh
c2UoKSBjeWNsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoRWdsQmFzZS5Db250ZXh0IHNo
YXJlZENvbnRleHQsIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRz
KSB7Ci0gICAgaW5pdChzaGFyZWRDb250ZXh0LCByZW5kZXJlckV2ZW50cywgRWdsQmFzZS5DT05G
SUdfUExBSU4sIG5ldyBHbFJlY3REcmF3ZXIoKSk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlh
bGl6ZSB0aGlzIGNsYXNzLCBzaGFyaW5nIHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4g
VGhlIGN1c3RvbSB8ZHJhd2VyfCB3aWxsIGJlIHVzZWQKLSAgICogZm9yIGRyYXdpbmcgZnJhbWVz
IG9uIHRoZSBFR0xTdXJmYWNlLiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5n
IHJlbGVhc2UoKSBvbgotICAgKiB8ZHJhd2VyfC4gSXQgaXMgYWxsb3dlZCB0byBjYWxsIGluaXQo
KSB0byByZWluaXRpYWxpemUgdGhlIHJlbmRlcmVyIGFmdGVyIGEgcHJldmlvdXMKLSAgICogaW5p
dCgpL3JlbGVhc2UoKSBjeWNsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoZmluYWwgRWds
QmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsCi0gICAgICBSZW5kZXJlckNvbW1vbi5SZW5kZXJl
ckV2ZW50cyByZW5kZXJlckV2ZW50cywgZmluYWwgaW50W10gY29uZmlnQXR0cmlidXRlcywKLSAg
ICAgIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcikgewotICAgIFRocmVhZFV0aWxzLmNo
ZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICB0aGlzLnJlbmRlcmVyRXZlbnRzID0gcmVuZGVyZXJF
dmVudHM7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICByb3RhdGVkRnJh
bWVXaWR0aCA9IDA7Ci0gICAgICByb3RhdGVkRnJhbWVIZWlnaHQgPSAwOwotICAgICAgZnJhbWVS
b3RhdGlvbiA9IDA7Ci0gICAgfQotICAgIGVnbFJlbmRlcmVyLmluaXQoc2hhcmVkQ29udGV4dCwg
Y29uZmlnQXR0cmlidXRlcywgZHJhd2VyKTsKLSAgfQotCi0gIC8qKgotICAgKiBCbG9jayB1bnRp
bCBhbnkgcGVuZGluZyBmcmFtZSBpcyByZXR1cm5lZCBhbmQgYWxsIEdMIHJlc291cmNlcyByZWxl
YXNlZCwgZXZlbiBpZiBhbiBpbnRlcnJ1cHQKLSAgICogb2NjdXJzLiBJZiBhbiBpbnRlcnJ1cHQg
b2NjdXJzIGR1cmluZyByZWxlYXNlKCksIHRoZSBpbnRlcnJ1cHQgZmxhZyB3aWxsIGJlIHNldC4g
VGhpcyBmdW5jdGlvbgotICAgKiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUgQWN0aXZpdHkg
aXMgZGVzdHJveWVkIGFuZCB0aGUgRUdMQ29udGV4dCBpcyBzdGlsbCB2YWxpZC4gSWYgeW91Ci0g
ICAqIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiwgdGhlIEdMIHJlc291cmNlcyBtaWdodCBsZWFr
LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBlZ2xSZW5kZXJlci5yZWxl
YXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGlmIHRoZSB2aWRlbyBzdHJlYW0gc2hvdWxk
IGJlIG1pcnJvcmVkIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1pcnJvcihmaW5h
bCBib29sZWFuIG1pcnJvcikgewotICAgIGVnbFJlbmRlcmVyLnNldE1pcnJvcihtaXJyb3IpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFNldCBob3cgdGhlIHZpZGVvIHdpbGwgZmlsbCB0aGUgYWxsb3dl
ZCBsYXlvdXQgYXJlYS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNjYWxpbmdUeXBlKFJlbmRl
cmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hl
Y2tJc09uTWFpblRocmVhZCgpOwotICAgIHZpZGVvTGF5b3V0TWVhc3VyZS5zZXRTY2FsaW5nVHlw
ZShzY2FsaW5nVHlwZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRTY2FsaW5nVHlwZShSZW5k
ZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24sCi0gICAg
ICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRp
b24pIHsKLSAgICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgdmlkZW9M
YXlvdXRNZWFzdXJlLnNldFNjYWxpbmdUeXBlKHNjYWxpbmdUeXBlTWF0Y2hPcmllbnRhdGlvbiwg
c2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uKTsKLSAgfQotCi0gIC8vIFZpZGVvUmVuZGVy
ZXIuQ2FsbGJhY2tzIGludGVyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbmRl
ckZyYW1lKFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgdXBkYXRlRnJhbWVE
aW1lbnNpb25zQW5kUmVwb3J0RXZlbnRzKGZyYW1lKTsKLSAgICBlZ2xSZW5kZXJlci5yZW5kZXJG
cmFtZShmcmFtZSk7Ci0gIH0KLQotICAvLyBWaWV3IGxheW91dCBpbnRlcmZhY2UuCi0gIEBPdmVy
cmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRoU3BlYywgaW50IGhlaWdo
dFNwZWMpIHsKLSAgICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZmlu
YWwgUG9pbnQgc2l6ZTsKLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2spIHsKLSAgICAgIHNp
emUgPQotICAgICAgICAgIHZpZGVvTGF5b3V0TWVhc3VyZS5tZWFzdXJlKHdpZHRoU3BlYywgaGVp
Z2h0U3BlYywgcm90YXRlZEZyYW1lV2lkdGgsIHJvdGF0ZWRGcmFtZUhlaWdodCk7Ci0gICAgfQot
ICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHNpemUueCwgc2l6ZS55KTsKLSAgICBsb2dEKCJvbk1l
YXN1cmUoKS4gTmV3IHNpemU6ICIgKyBzaXplLnggKyAieCIgKyBzaXplLnkpOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50
IGxlZnQsIGludCB0b3AsIGludCByaWdodCwgaW50IGJvdHRvbSkgewotICAgIFRocmVhZFV0aWxz
LmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICBlZ2xSZW5kZXJlci5zZXRMYXlvdXRBc3BlY3RS
YXRpbygocmlnaHQgLSBsZWZ0KSAvIChmbG9hdCkgKGJvdHRvbSAtIHRvcCkpOwotICB9Ci0KLSAg
Ly8gU3VyZmFjZUhvbGRlci5DYWxsYmFjayBpbnRlcmZhY2UuCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBzdXJmYWNlQ3JlYXRlZChmaW5hbCBTdXJmYWNlSG9sZGVyIGhvbGRlcikgewotICAg
IFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICBlZ2xSZW5kZXJlci5jcmVh
dGVFZ2xTdXJmYWNlKGhvbGRlci5nZXRTdXJmYWNlKCkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIHN1cmZhY2VEZXN0cm95ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKLSAg
ICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZmluYWwgQ291bnREb3du
TGF0Y2ggY29tcGxldGlvbkxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIGVnbFJl
bmRlcmVyLnJlbGVhc2VFZ2xTdXJmYWNlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjb21wbGV0aW9uTGF0Y2guY291
bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVy
cnVwdGlibHkoY29tcGxldGlvbkxhdGNoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNlSG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVh
ZCgpOwotICAgIGVnbFJlbmRlcmVyLnN1cmZhY2VTaXplQ2hhbmdlZCh3aWR0aCwgaGVpZ2h0KTsK
LSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFJlc291cmNlTmFtZSgpIHsKLSAgICB0cnkgewot
ICAgICAgcmV0dXJuIGdldFJlc291cmNlcygpLmdldFJlc291cmNlRW50cnlOYW1lKGdldElkKCkp
ICsgIjogIjsKLSAgICB9IGNhdGNoIChOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXR1
cm4gIiI7Ci0gICAgfQotICB9Ci0KLSAgLy8gVXBkYXRlIGZyYW1lIGRpbWVuc2lvbnMgYW5kIHJl
cG9ydCBhbnkgY2hhbmdlcyB0byB8cmVuZGVyZXJFdmVudHN8LgotICBwcml2YXRlIHZvaWQgdXBk
YXRlRnJhbWVEaW1lbnNpb25zQW5kUmVwb3J0RXZlbnRzKFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1l
IGZyYW1lKSB7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICBpZiAoIWlz
Rmlyc3RGcmFtZVJlbmRlcmVkKSB7Ci0gICAgICAgIGlzRmlyc3RGcmFtZVJlbmRlcmVkID0gdHJ1
ZTsKLSAgICAgICAgbG9nRCgiUmVwb3J0aW5nIGZpcnN0IHJlbmRlcmVkIGZyYW1lLiIpOwotICAg
ICAgICBpZiAocmVuZGVyZXJFdmVudHMgIT0gbnVsbCkgewotICAgICAgICAgIHJlbmRlcmVyRXZl
bnRzLm9uRmlyc3RGcmFtZVJlbmRlcmVkKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlm
IChyb3RhdGVkRnJhbWVXaWR0aCAhPSBmcmFtZS5yb3RhdGVkV2lkdGgoKSB8fCByb3RhdGVkRnJh
bWVIZWlnaHQgIT0gZnJhbWUucm90YXRlZEhlaWdodCgpCi0gICAgICAgICAgfHwgZnJhbWVSb3Rh
dGlvbiAhPSBmcmFtZS5yb3RhdGlvbkRlZ3JlZSkgewotICAgICAgICBsb2dEKCJSZXBvcnRpbmcg
ZnJhbWUgcmVzb2x1dGlvbiBjaGFuZ2VkIHRvICIgKyBmcmFtZS53aWR0aCArICJ4IiArIGZyYW1l
LmhlaWdodAotICAgICAgICAgICAgKyAiIHdpdGggcm90YXRpb24gIiArIGZyYW1lLnJvdGF0aW9u
RGVncmVlKTsKLSAgICAgICAgaWYgKHJlbmRlcmVyRXZlbnRzICE9IG51bGwpIHsKLSAgICAgICAg
ICByZW5kZXJlckV2ZW50cy5vbkZyYW1lUmVzb2x1dGlvbkNoYW5nZWQoZnJhbWUud2lkdGgsIGZy
YW1lLmhlaWdodCwgZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgICAgICB9Ci0gICAgICAgIHJv
dGF0ZWRGcmFtZVdpZHRoID0gZnJhbWUucm90YXRlZFdpZHRoKCk7Ci0gICAgICAgIHJvdGF0ZWRG
cmFtZUhlaWdodCA9IGZyYW1lLnJvdGF0ZWRIZWlnaHQoKTsKLSAgICAgICAgZnJhbWVSb3RhdGlv
biA9IGZyYW1lLnJvdGF0aW9uRGVncmVlOwotICAgICAgICBwb3N0KG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgICAgICByZXF1ZXN0TGF5b3V0KCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nRChTdHJpbmcgc3RyaW5nKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgcmVzb3VyY2VOYW1lICsgc3RyaW5nKTsKLSAgfQotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvVmlkZW9DYXB0dXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTExICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0
IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8v
IEJhc2UgaW50ZXJmYWNlIGZvciBhbGwgVmlkZW9DYXB0dXJlcnMgdG8gaW1wbGVtZW50LgotcHVi
bGljIGludGVyZmFjZSBWaWRlb0NhcHR1cmVyIHsKLSAgLy8gSW50ZXJmYWNlIHVzZWQgZm9yIHBy
b3ZpZGluZyBjYWxsYmFja3MgdG8gYW4gb2JzZXJ2ZXIuCi0gIHB1YmxpYyBpbnRlcmZhY2UgQ2Fw
dHVyZXJPYnNlcnZlciB7Ci0gICAgLy8gTm90aWZ5IGlmIHRoZSBjYW1lcmEgaGF2ZSBiZWVuIHN0
YXJ0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdC4KLSAgICAvLyBDYWxsZWQgb24gYSBKYXZhIHRocmVh
ZCBvd25lZCBieSBWaWRlb0NhcHR1cmVyLgotICAgIHZvaWQgb25DYXB0dXJlclN0YXJ0ZWQoYm9v
bGVhbiBzdWNjZXNzKTsKLSAgICB2b2lkIG9uQ2FwdHVyZXJTdG9wcGVkKCk7Ci0KLSAgICAvLyBE
ZWxpdmVycyBhIGNhcHR1cmVkIGZyYW1lLiBDYWxsZWQgb24gYSBKYXZhIHRocmVhZCBvd25lZCBi
eSBWaWRlb0NhcHR1cmVyLgotICAgIHZvaWQgb25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAg
ICAgICAgYnl0ZVtdIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBs
b25nIHRpbWVTdGFtcCk7Ci0KLSAgICAvLyBEZWxpdmVycyBhIGNhcHR1cmVkIGZyYW1lIGluIGEg
dGV4dHVyZSB3aXRoIGlkIHxvZXNUZXh0dXJlSWR8LiBDYWxsZWQgb24gYSBKYXZhIHRocmVhZAot
ICAgIC8vIG93bmVkIGJ5IFZpZGVvQ2FwdHVyZXIuCi0gICAgdm9pZCBvblRleHR1cmVGcmFtZUNh
cHR1cmVkKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0
cmFuc2Zvcm1NYXRyaXgsCi0gICAgICAgIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApOwot
ICB9Ci0KLSAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgQ2FwdHVyZXJPYnNlcnZlciB0aGF0IGZv
cndhcmRzIGFsbCBjYWxscyBmcm9tCi0gIC8vIEphdmEgdG8gdGhlIEMgbGF5ZXIuCi0gIHN0YXRp
YyBjbGFzcyBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZU9ic2VydmVyIGltcGxlbWVudHMgQ2FwdHVy
ZXJPYnNlcnZlciB7Ci0gICAgLy8gUG9pbnRlciB0byBWaWRlb1RyYWNrU291cmNlUHJveHkgcHJv
eHlpbmcgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIG5h
dGl2ZVNvdXJjZTsKLQotICAgIHB1YmxpYyBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZU9ic2VydmVy
KGxvbmcgbmF0aXZlU291cmNlKSB7Ci0gICAgICB0aGlzLm5hdGl2ZVNvdXJjZSA9IG5hdGl2ZVNv
dXJjZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVy
U3RhcnRlZChib29sZWFuIHN1Y2Nlc3MpIHsKLSAgICAgIG5hdGl2ZUNhcHR1cmVyU3RhcnRlZChu
YXRpdmVTb3VyY2UsIHN1Y2Nlc3MpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uQ2FwdHVyZXJTdG9wcGVkKCkgewotICAgICAgbmF0aXZlQ2FwdHVyZXJTdG9wcGVk
KG5hdGl2ZVNvdXJjZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgYnl0ZVtdIGRhdGEsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVTdGFtcCkgewotICAgICAgbmF0
aXZlT25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgICBuYXRpdmVTb3VyY2UsIGRh
dGEsIGRhdGEubGVuZ3RoLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbiwgdGltZVN0YW1wKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1
cmVkKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9lc1RleHR1cmVJZCwKLSAgICAgICAgZmxv
YXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApIHsKLSAg
ICAgIG5hdGl2ZU9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoCi0gICAgICAgICAgbmF0aXZlU291cmNl
LCB3aWR0aCwgaGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgcm90YXRpb24s
IHRpbWVzdGFtcCk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYXB0
dXJlclN0YXJ0ZWQobG9uZyBuYXRpdmVTb3VyY2UsIGJvb2xlYW4gc3VjY2Vzcyk7Ci0gICAgcHJp
dmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYXB0dXJlclN0b3BwZWQobG9uZyBuYXRpdmVTb3VyY2Up
OwotICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlT25CeXRlQnVmZmVyRnJhbWVDYXB0dXJl
ZChsb25nIG5hdGl2ZVNvdXJjZSwgYnl0ZVtdIGRhdGEsIGludCBsZW5ndGgsCi0gICAgICAgIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVTdGFtcCk7Ci0gICAg
cHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVPblRleHR1cmVGcmFtZUNhcHR1cmVkKGxvbmcgbmF0
aXZlU291cmNlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgIGludCBvZXNUZXh0dXJl
SWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1w
KTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6
ZSB0aGUgY2FtZXJhIHRocmVhZCwgdGhlIGFuZHJvaWQgYXBwbGljYXRpb24gY29udGV4dCwgYW5k
IHRoZQotICAgKiBjYXB0dXJlIG9ic2VydmVyLiBJdCB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2Ug
YW5kIGJlZm9yZSBhbnkgc3RhcnRDYXB0dXJlKCkgcmVxdWVzdC4gVGhlCi0gICAqIGNhbWVyYSB0
aHJlYWQgaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCB1bnRpbCBkaXNwb3NlKCkgaXMgY2FsbGVk
LiBJZiB0aGUgVmlkZW9DYXB0dXJlciB3YW50cwotICAgKiB0byBkZWxpdmVyIHRleHR1cmUgZnJh
bWVzLCBpdCBzaG91bGQgZG8gdGhpcyBieSByZW5kZXJpbmcgb24gdGhlIFN1cmZhY2VUZXh0dXJl
IGluCi0gICAqIHxzdXJmYWNlVGV4dHVyZUhlbHBlcnwsIHJlZ2lzdGVyIGl0c2VsZiBhcyBhIGxp
c3RlbmVyLCBhbmQgZm9yd2FyZCB0aGUgdGV4dHVyZSBmcmFtZXMgdG8KLSAgICogQ2FwdHVyZXJP
YnNlcnZlci5vblRleHR1cmVGcmFtZUNhcHR1cmVkKCkuCi0gICAqLwotICB2b2lkIGluaXRpYWxp
emUoU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBw
bGljYXRpb25Db250ZXh0LAotICAgICAgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVy
KTsKLQotICAvKioKLSAgICogU3RhcnQgY2FwdHVyaW5nIGZyYW1lcyBpbiBhIGZvcm1hdCB0aGF0
IGlzIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHx3aWR0aHwgeCB8aGVpZ2h0fCBhbmQKLSAgICog
fGZyYW1lcmF0ZXwuCi0gICAqLwotICB2b2lkIHN0YXJ0Q2FwdHVyZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCBmcmFtZXJhdGUpOwotCi0gIC8qKgotICAgKiBTdG9wIGNhcHR1cmluZy4gVGhp
cyBmdW5jdGlvbiBzaG91bGQgYmxvY2sgdW50aWwgY2FwdHVyZSBpcyBhY3R1YWxseSBzdG9wcGVk
LgotICAgKi8KLSAgdm9pZCBzdG9wQ2FwdHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
bjsKLQotICB2b2lkIGNoYW5nZUNhcHR1cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgZnJhbWVyYXRlKTsKLQotICAvKioKLSAgICogUGVyZm9ybSBhbnkgZmluYWwgY2xlYW51cCBo
ZXJlLiBObyBtb3JlIGNhcHR1cmluZyB3aWxsIGJlIGRvbmUgYWZ0ZXIgdGhpcyBjYWxsLgotICAg
Ki8KLSAgdm9pZCBkaXNwb3NlKCk7Ci0KLSAgLyoqCi0gICAqIEByZXR1cm4gdHJ1ZSBpZi1hbmQt
b25seS1pZiB0aGlzIGlzIGEgc2NyZWVuIGNhcHR1cmVyLgotICAgKi8KLSAgYm9vbGVhbiBpc1Nj
cmVlbmNhc3QoKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9DYXB0dXJlckFuZHJv
aWQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXJBbmRy
b2lkLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9DYXB0
dXJlckFuZHJvaWQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDY1MCArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRl
bnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRy
b2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBv
cnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVu
dC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9v
bGVhbjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJl
Rm9ybWF0OwotaW1wb3J0IG9yZy53ZWJydGMuTWV0cmljcy5IaXN0b2dyYW07Ci0KLS8vIEFuZHJv
aWQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgVmlkZW9DYXB0dXJlci4KLS8vIEFuIGluc3Rh
bmNlIG9mIHRoaXMgY2xhc3MgY2FuIGJlIGNyZWF0ZWQgYnkgYW4gYXBwbGljYXRpb24gdXNpbmcK
LS8vIFZpZGVvQ2FwdHVyZXJBbmRyb2lkLmNyZWF0ZSgpOwotLy8gVGhpcyBjbGFzcyBleHRlbmRz
IFZpZGVvQ2FwdHVyZXIgd2l0aCBhIG1ldGhvZCB0byBlYXNpbHkgc3dpdGNoIGJldHdlZW4gdGhl
Ci0vLyBmcm9udCBhbmQgYmFjayBjYW1lcmEuIEl0IGFsc28gcHJvdmlkZXMgbWV0aG9kcyBmb3Ig
ZW51bWVyYXRpbmcgdmFsaWQgZGV2aWNlCi0vLyBuYW1lcy4KLS8vCi0vLyBUaHJlYWRpbmcgbm90
ZXM6IHRoaXMgY2xhc3MgaXMgY2FsbGVkIGZyb20gQysrIGNvZGUsIEFuZHJvaWQgQ2FtZXJhIGNh
bGxiYWNrcywgYW5kIHBvc3NpYmx5Ci0vLyBhcmJpdHJhcnkgSmF2YSB0aHJlYWRzLiBBbGwgcHVi
bGljIGVudHJ5IHBvaW50cyBhcmUgdGhyZWFkIHNhZmUsIGFuZCBkZWxlZ2F0ZSB0aGUgd29yayB0
byB0aGUKLS8vIGNhbWVyYSB0aHJlYWQuIFRoZSBpbnRlcm5hbCAqT25DYW1lcmFUaHJlYWQoKSBt
ZXRob2RzIG11c3QgY2hlY2sgfGNhbWVyYXwgZm9yIG51bGwgdG8gY2hlY2sgaWYKLS8vIHRoZSBj
YW1lcmEgaGFzIGJlZW4gc3RvcHBlZC4KLS8vCi0vLyBUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQg
YW5kIHdpbGwgb25seSBiZSB1c2VkIGlmIHlvdSBtYW51YWxseSBjcmVhdGUgaXQuIFBsZWFzZSB1
c2UKLS8vIENhbWVyYTFDYXB0dXJlciBpbnN0ZWFkLgotQERlcHJlY2F0ZWQKLUBTdXBwcmVzc1dh
cm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgVmlkZW9DYXB0dXJlckFuZHJvaWQK
LSAgICBpbXBsZW1lbnRzIENhbWVyYVZpZGVvQ2FwdHVyZXIsIGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLlByZXZpZXdDYWxsYmFjaywKLSAgICAgICAgICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVy
Lk9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIlZpZGVvQ2FwdHVyZXJBbmRyb2lkIjsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IENBTUVSQV9TVE9QX1RJTUVPVVRfTVMgPSA3MDAwOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBIaXN0b2dyYW0gdmlkZW9DYXB0dXJlckFuZHJvaWRTdGFydFRpbWVNc0hpc3RvZ3Jh
bSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5WaWRlb0Nh
cHR1cmVyQW5kcm9pZC5TdGFydFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIEhpc3RvZ3JhbSB2aWRlb0NhcHR1cmVyQW5kcm9pZFN0b3BUaW1lTXNIaXN0b2dy
YW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFuZHJvaWQuVmlkZW9D
YXB0dXJlckFuZHJvaWQuU3RvcFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIEhpc3RvZ3JhbSB2aWRlb0NhcHR1cmVyQW5kcm9pZFJlc29sdXRpb25IaXN0b2dy
YW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUVudW1lcmF0aW9uKCJXZWJSVEMuQW5kcm9pZC5W
aWRlb0NhcHR1cmVyQW5kcm9pZC5SZXNvbHV0aW9uIiwKLSAgICAgICAgICBDYW1lcmFFbnVtZXJh
dGlvbkFuZHJvaWQuQ09NTU9OX1JFU09MVVRJT05TLnNpemUoKSk7Ci0KLSAgcHJpdmF0ZSBhbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmE7IC8vIE9ubHkgbm9uLW51bGwgd2hpbGUgY2FwdHVy
aW5nLgotICBwcml2YXRlIGZpbmFsIEF0b21pY0Jvb2xlYW4gaXNDYW1lcmFSdW5uaW5nID0gbmV3
IEF0b21pY0Jvb2xlYW4oKTsKLSAgLy8gVXNlIG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKCkgaW5z
dGVhZCBvZiBwb3N0aW5nIGRpcmVjdGx5IHRvIHRoZSBoYW5kbGVyIC0gdGhpcyB3YXkgYWxsCi0g
IC8vIGNhbGxiYWNrcyB3aXRoIGEgc3BlY2lmZWQgdG9rZW4gY2FuIGJlIHJlbW92ZWQgYXQgb25j
ZS4KLSAgcHJpdmF0ZSB2b2xhdGlsZSBIYW5kbGVyIGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHBy
aXZhdGUgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gIC8vIFN5bmNocm9uaXphdGlvbiBs
b2NrIGZvciB8aWR8LgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBjYW1lcmFJZExvY2sgPSBuZXcg
T2JqZWN0KCk7Ci0gIHByaXZhdGUgaW50IGlkOwotICBwcml2YXRlIGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLkNhbWVyYUluZm8gaW5mbzsKLSAgcHJpdmF0ZSBDYW1lcmFTdGF0aXN0aWNzIGNhbWVy
YVN0YXRpc3RpY3M7Ci0gIC8vIFJlbWVtYmVyIHRoZSByZXF1ZXN0ZWQgZm9ybWF0IGluIGNhc2Ug
d2Ugd2FudCB0byBzd2l0Y2ggY2FtZXJhcy4KLSAgcHJpdmF0ZSBpbnQgcmVxdWVzdGVkV2lkdGg7
Ci0gIHByaXZhdGUgaW50IHJlcXVlc3RlZEhlaWdodDsKLSAgcHJpdmF0ZSBpbnQgcmVxdWVzdGVk
RnJhbWVyYXRlOwotICAvLyBUaGUgY2FwdHVyZSBmb3JtYXQgd2lsbCBiZSB0aGUgY2xvc2VzdCBz
dXBwb3J0ZWQgZm9ybWF0IHRvIHRoZSByZXF1ZXN0ZWQgZm9ybWF0LgotICBwcml2YXRlIENhcHR1
cmVGb3JtYXQgY2FwdHVyZUZvcm1hdDsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgcGVuZGluZ0Nh
bWVyYVN3aXRjaExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVh
biBwZW5kaW5nQ2FtZXJhU3dpdGNoOwotICBwcml2YXRlIENhcHR1cmVyT2JzZXJ2ZXIgZnJhbWVP
YnNlcnZlciA9IG51bGw7Ci0gIHByaXZhdGUgZmluYWwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVu
dHNIYW5kbGVyOwotICBwcml2YXRlIGJvb2xlYW4gZmlyc3RGcmFtZVJlcG9ydGVkOwotICAvLyBB
cmJpdHJhcnkgcXVldWUgZGVwdGguICBIaWdoZXIgbnVtYmVyIG1lYW5zIG1vcmUgbWVtb3J5IGFs
bG9jYXRlZCAmIGhlbGQsCi0gIC8vIGxvd2VyIG51bWJlciBtZWFucyBtb3JlIHNlbnNpdGl2aXR5
IHRvIHByb2Nlc3NpbmcgdGltZSBpbiB0aGUgY2xpZW50IChhbmQKLSAgLy8gcG90ZW50aWFsbHkg
c3RhbGxpbmcgdGhlIGNhcHR1cmVyIGlmIGl0IHJ1bnMgb3V0IG9mIGJ1ZmZlcnMgdG8gd3JpdGUg
dG8pLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTlVNQkVSX09GX0NBUFRVUkVfQlVGRkVS
UyA9IDM7Ci0gIHByaXZhdGUgZmluYWwgU2V0PGJ5dGVbXT4gcXVldWVkQnVmZmVycyA9IG5ldyBI
YXNoU2V0PGJ5dGVbXT4oKTsKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGlzQ2FwdHVyaW5nVG9U
ZXh0dXJlOwotICBwcml2YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VIZWxwZXI7Ci0g
IHByaXZhdGUgZmluYWwgc3RhdGljIGludCBNQVhfT1BFTl9DQU1FUkFfQVRURU1QVFMgPSAzOwot
ICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgT1BFTl9DQU1FUkFfREVMQVlfTVMgPSA1MDA7Ci0g
IHByaXZhdGUgaW50IG9wZW5DYW1lcmFBdHRlbXB0czsKLQotICAvLyBVc2VkIGZvciBzdGF0aXN0
aWNzLgotICBwcml2YXRlIGxvbmcgc3RhcnRTdGFydFRpbWVOczsgLy8gVGhlIHRpbWUgaW4gbmFu
b3NlY29uZHMgd2hlbiBzdGFydGluZyB0aGUgY2FtZXJhIGJlZ2FuLgotCi0gIC8vIENhbWVyYSBl
cnJvciBjYWxsYmFjay4KLSAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5F
cnJvckNhbGxiYWNrIGNhbWVyYUVycm9yQ2FsbGJhY2sgPQotICAgICAgbmV3IGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLkVycm9yQ2FsbGJhY2soKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAg
ICBwdWJsaWMgdm9pZCBvbkVycm9yKGludCBlcnJvciwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEg
Y2FtZXJhKSB7Ci0gICAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICAgICAgICBpZiAo
ZXJyb3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ0FNRVJBX0VSUk9SX1NFUlZFUl9ESUVE
KSB7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiQ2FtZXJhIHNlcnZlciBkaWVkISI7Ci0g
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJDYW1lcmEgZXJy
b3I6ICIgKyBlcnJvcjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgZXJy
b3JNZXNzYWdlKTsKLSAgICAgICAgICBpZiAoZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAg
ICAgICAgICBpZiAoZXJyb3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ0FNRVJBX0VSUk9S
X0VWSUNURUQpIHsKLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYURpc2Nvbm5l
Y3RlZCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxl
ci5vbkNhbWVyYUVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICB9OwotCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9DYXB0dXJlckFu
ZHJvaWQgY3JlYXRlKFN0cmluZyBuYW1lLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRs
ZXIpIHsKLSAgICByZXR1cm4gVmlkZW9DYXB0dXJlckFuZHJvaWQuY3JlYXRlKG5hbWUsIGV2ZW50
c0hhbmRsZXIsIGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgLy8gVXNl
IGN0b3IgZGlyZWN0bHkgaW5zdGVhZC4KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyBW
aWRlb0NhcHR1cmVyQW5kcm9pZCBjcmVhdGUoCi0gICAgICBTdHJpbmcgbmFtZSwgQ2FtZXJhRXZl
bnRzSGFuZGxlciBldmVudHNIYW5kbGVyLCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAg
ICB0cnkgewotICAgICAgcmV0dXJuIG5ldyBWaWRlb0NhcHR1cmVyQW5kcm9pZChuYW1lLCBldmVu
dHNIYW5kbGVyLCBjYXB0dXJlVG9UZXh0dXJlKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0
aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDb3VsZG4ndCBjcmVhdGUgY2FtZXJhLiIs
IGUpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcHJp
bnRTdGFja1RyYWNlKCkgewotICAgIFRocmVhZCBjYW1lcmFUaHJlYWQgPSBudWxsOwotICAgIGlm
IChjYW1lcmFUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYVRocmVhZCA9IGNh
bWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCk7Ci0gICAgfQotICAgIGlm
IChjYW1lcmFUaHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFjZUVsZW1lbnRbXSBjYW1l
cmFTdGFja1RyYWNlcyA9IGNhbWVyYVRocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICBpZiAo
Y2FtZXJhU3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
VmlkZW9DYXB0dXJlckFuZHJvaWQgc3RhY2tzIHRyYWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNr
VHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBjYW1lcmFTdGFja1RyYWNlcykgewotICAgICAgICAg
IExvZ2dpbmcuZChUQUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICAvLyBTd2l0Y2ggY2FtZXJhIHRvIHRoZSBuZXh0IHZhbGlkIGNh
bWVyYSBpZC4gVGhpcyBjYW4gb25seSBiZSBjYWxsZWQgd2hpbGUKLSAgLy8gdGhlIGNhbWVyYSBp
cyBydW5uaW5nLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKGZpbmFs
IENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxlcikgewotICAgIGlmIChhbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVyYXMoKSA8IDIpIHsKLSAgICAgIGlm
IChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgc3dpdGNoRXZlbnRzSGFu
ZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJObyBjYW1lcmEgdG8gc3dpdGNoIHRvLiIpOwotICAg
ICAgfQotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdDYW1l
cmFTd2l0Y2hMb2NrKSB7Ci0gICAgICBpZiAocGVuZGluZ0NhbWVyYVN3aXRjaCkgewotICAgICAg
ICAvLyBEbyBub3QgaGFuZGxlIG11bHRpcGxlIGNhbWVyYSBzd2l0Y2ggcmVxdWVzdCB0byBhdm9p
ZCBibG9ja2luZwotICAgICAgICAvLyBjYW1lcmEgdGhyZWFkIGJ5IGhhbmRsaW5nIHRvbyBtYW55
IHN3aXRjaCByZXF1ZXN0IGZyb20gYSBxdWV1ZS4KLSAgICAgICAgTG9nZ2luZy53KFRBRywgIkln
bm9yaW5nIGNhbWVyYSBzd2l0Y2ggcmVxdWVzdC4iKTsKLSAgICAgICAgaWYgKHN3aXRjaEV2ZW50
c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1l
cmFTd2l0Y2hFcnJvcigiUGVuZGluZyBjYW1lcmEgc3dpdGNoIGFscmVhZHkgaW4gcHJvZ3Jlc3Mu
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcGVuZGluZ0Nh
bWVyYVN3aXRjaCA9IHRydWU7Ci0gICAgfQotICAgIGZpbmFsIGJvb2xlYW4gZGlkUG9zdCA9IG1h
eWJlUG9zdE9uQ2FtZXJhVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBzd2l0Y2hDYW1lcmFPbkNhbWVyYVRo
cmVhZCgpOwotICAgICAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdDYW1lcmFTd2l0Y2hMb2NrKSB7
Ci0gICAgICAgICAgcGVuZGluZ0NhbWVyYVN3aXRjaCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICBzd2l0Y2hF
dmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRG9uZSgKLSAgICAgICAgICAgICAgaW5mby5mYWNp
bmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0ZS
T05UKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICAgIGlmICghZGlkUG9zdCAmJiBz
d2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIu
b25DYW1lcmFTd2l0Y2hFcnJvcigiQ2FtZXJhIGlzIHN0b3BwZWQuIik7Ci0gICAgfQotICB9Ci0K
LSAgLy8gUmVjb25maWd1cmUgdGhlIGNhbWVyYSB0byBjYXB0dXJlIGluIGEgbmV3IGZvcm1hdC4g
VGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hpbGUgdGhlIGNhbWVyYQotICAvLyBpcyBydW5u
aW5nLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdChmaW5h
bCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAg
ICBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc3RhcnRQcmV2aWV3T25DYW1l
cmFUaHJlYWQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAg
fQotCi0gIC8vIEhlbHBlciBmdW5jdGlvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCBjYW1lcmEg
aWQgc3luY2hyb25vdXNseS4gTm90ZSB0aGF0IHRoZSBjYW1lcmEgaWQgbWlnaHQKLSAgLy8gY2hh
bmdlIGF0IGFueSBwb2ludCBieSBzd2l0Y2hDYW1lcmEoKSBjYWxscy4KLSAgcHJpdmF0ZSBpbnQg
Z2V0Q3VycmVudENhbWVyYUlkKCkgewotICAgIHN5bmNocm9uaXplZCAoY2FtZXJhSWRMb2NrKSB7
Ci0gICAgICByZXR1cm4gaWQ7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
aXMgVmlkZW9DYXB0dXJlciBpcyBzZXR1cCB0byBjYXB0dXJlIHZpZGVvIGZyYW1lcyB0byBhIFN1
cmZhY2VUZXh0dXJlLgotICBwdWJsaWMgYm9vbGVhbiBpc0NhcHR1cmluZ1RvVGV4dHVyZSgpIHsK
LSAgICByZXR1cm4gaXNDYXB0dXJpbmdUb1RleHR1cmU7Ci0gIH0KLQotICBwdWJsaWMgVmlkZW9D
YXB0dXJlckFuZHJvaWQoCi0gICAgICBTdHJpbmcgY2FtZXJhTmFtZSwgQ2FtZXJhRXZlbnRzSGFu
ZGxlciBldmVudHNIYW5kbGVyLCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICBpZiAo
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCkgPT0gMCkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIGNhbWVyYXMgYXZhaWxhYmxlIik7Ci0g
ICAgfQotICAgIGlmIChjYW1lcmFOYW1lID09IG51bGwgfHwgY2FtZXJhTmFtZS5lcXVhbHMoIiIp
KSB7Ci0gICAgICB0aGlzLmlkID0gMDsKLSAgICB9IGVsc2UgewotICAgICAgdGhpcy5pZCA9IENh
bWVyYTFFbnVtZXJhdG9yLmdldENhbWVyYUluZGV4KGNhbWVyYU5hbWUpOwotICAgIH0KLSAgICB0
aGlzLmV2ZW50c0hhbmRsZXIgPSBldmVudHNIYW5kbGVyOwotICAgIGlzQ2FwdHVyaW5nVG9UZXh0
dXJlID0gY2FwdHVyZVRvVGV4dHVyZTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9DYXB0dXJl
ckFuZHJvaWQgaXNDYXB0dXJpbmdUb1RleHR1cmUgOiAiICsgaXNDYXB0dXJpbmdUb1RleHR1cmUp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpIHsKLSAgICBp
ZiAoY2FtZXJhVGhyZWFkSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAi
Q2FtZXJhIGlzIG5vdCBpbml0aWFsaXplZCAtIGNhbid0IGNoZWNrIHRocmVhZC4iKTsKLSAgICB9
IGVsc2UgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0gY2FtZXJhVGhyZWFkSGFuZGxlci5n
ZXRMb29wZXIoKS5nZXRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbigiV3JvbmcgdGhyZWFkIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFu
IG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgcmV0dXJu
IG1heWJlUG9zdERlbGF5ZWRPbkNhbWVyYVRocmVhZCgwIC8qIGRlbGF5TXMgKi8sIHJ1bm5hYmxl
KTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBtYXliZVBvc3REZWxheWVkT25DYW1lcmFUaHJl
YWQoaW50IGRlbGF5TXMsIFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgcmV0dXJuIGNhbWVyYVRo
cmVhZEhhbmRsZXIgIT0gbnVsbCAmJiBpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkKLSAgICAgICAgJiYg
Y2FtZXJhVGhyZWFkSGFuZGxlci5wb3N0QXRUaW1lKAotICAgICAgICAgICAgICAgcnVubmFibGUs
IHRoaXMgLyogdG9rZW4gKi8sIFN5c3RlbUNsb2NrLnVwdGltZU1pbGxpcygpICsgZGVsYXlNcyk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiZGlzcG9zZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlh
bGl6ZWQoKSB7Ci0gICAgcmV0dXJuIGFwcGxpY2F0aW9uQ29udGV4dCAhPSBudWxsICYmIGZyYW1l
T2JzZXJ2ZXIgIT0gbnVsbDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBpbml0
aWFsaXplKFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDb250ZXh0
IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIENhcHR1cmVyT2JzZXJ2ZXIgZnJhbWVPYnNlcnZl
cikgewotICAgIExvZ2dpbmcuZChUQUcsICJpbml0aWFsaXplIik7Ci0gICAgaWYgKGFwcGxpY2F0
aW9uQ29udGV4dCA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKCJhcHBsaWNhdGlvbkNvbnRleHQgbm90IHNldC4iKTsKLSAgICB9Ci0gICAgaWYgKGZy
YW1lT2JzZXJ2ZXIgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigiZnJhbWVPYnNlcnZlciBub3Qgc2V0LiIpOwotICAgIH0KLSAgICBpZiAoaXNJbml0
aWFsaXplZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBbHJl
YWR5IGluaXRpYWxpemVkIik7Ci0gICAgfQotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0g
YXBwbGljYXRpb25Db250ZXh0OwotICAgIHRoaXMuZnJhbWVPYnNlcnZlciA9IGZyYW1lT2JzZXJ2
ZXI7Ci0gICAgdGhpcy5zdXJmYWNlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAg
dGhpcy5jYW1lcmFUaHJlYWRIYW5kbGVyID0KLSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIg
PT0gbnVsbCA/IG51bGwgOiBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCk7Ci0gIH0K
LQotICAvLyBOb3RlIHRoYXQgdGhpcyBhY3R1YWxseSBvcGVucyB0aGUgY2FtZXJhLCBhbmQgQ2Ft
ZXJhIGNhbGxiYWNrcyBydW4gb24gdGhlCi0gIC8vIHRocmVhZCB0aGF0IGNhbGxzIG9wZW4oKSwg
c28gdGhpcyBpcyBkb25lIG9uIHRoZSBDYW1lcmFUaHJlYWQuCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBzdGFydENhcHR1cmUoZmluYWwgaW50IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LCBm
aW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0Q2FwdHVyZSBy
ZXF1ZXN0ZWQ6ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZSk7Ci0g
ICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVF
eGNlcHRpb24oInN0YXJ0Q2FwdHVyZSBjYWxsZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZSIpOwot
ICAgIH0KLSAgICBpZiAoc3VyZmFjZUhlbHBlciA9PSBudWxsKSB7Ci0gICAgICBmcmFtZU9ic2Vy
dmVyLm9uQ2FwdHVyZXJTdGFydGVkKGZhbHNlIC8qIHN1Y2Nlc3MgKi8pOwotICAgICAgaWYgKGV2
ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJy
b3IoIk5vIFN1cmZhY2VUZXh0dXJlIGNyZWF0ZWQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChpc0NhbWVyYVJ1bm5pbmcuZ2V0QW5kU2V0KHRydWUpKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZC4iKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgZmluYWwgYm9vbGVhbiBkaWRQb3N0ID0gbWF5YmVQb3N0
T25DYW1lcmFUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIG9wZW5DYW1lcmFBdHRlbXB0cyA9IDA7Ci0gICAg
ICAgIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhyZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgaWYgKCFkaWRQb3N0KSB7Ci0gICAgICBmcmFtZU9ic2Vy
dmVyLm9uQ2FwdHVyZXJTdGFydGVkKGZhbHNlKTsKLSAgICAgIGlmIChldmVudHNIYW5kbGVyICE9
IG51bGwpIHsKLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKCJDb3VsZCBub3Qg
cG9zdCB0YXNrIHRvIGNhbWVyYSB0aHJlYWQuIik7Ci0gICAgICB9Ci0gICAgICBpc0NhbWVyYVJ1
bm5pbmcuc2V0KGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RhcnRDYXB0
dXJlT25DYW1lcmFUaHJlYWQoZmluYWwgaW50IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5h
bCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgc3Rh
cnRTdGFydFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIGlmICghaXNDYW1lcmFSdW5u
aW5nLmdldCgpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAic3RhcnRDYXB0dXJlT25DYW1lcmFU
aHJlYWQ6IENhbWVyYSBpcyBzdG9wcGVkIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChjYW1lcmEgIT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInN0YXJ0Q2FwdHVyZU9u
Q2FtZXJhVGhyZWFkOiBDYW1lcmEgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkLiIpOwotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICB0aGlzLmZpcnN0RnJhbWVSZXBvcnRlZCA9IGZhbHNlOwotCi0g
ICAgdHJ5IHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhSWRMb2Nr
KSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIk9wZW5pbmcgY2FtZXJhICIgKyBpZCk7Ci0g
ICAgICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgZXZlbnRz
SGFuZGxlci5vbkNhbWVyYU9wZW5pbmcoQ2FtZXJhMUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZShp
ZCkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjYW1lcmEgPSBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5vcGVuKGlkKTsKLSAgICAgICAgICBpbmZvID0gbmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLkNhbWVyYUluZm8oKTsKLSAgICAgICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXRD
YW1lcmFJbmZvKGlkLCBpbmZvKTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoUnVudGltZUV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgIG9wZW5DYW1lcmFBdHRlbXB0cysrOwotICAgICAgICBpZiAo
b3BlbkNhbWVyYUF0dGVtcHRzIDwgTUFYX09QRU5fQ0FNRVJBX0FUVEVNUFRTKSB7Ci0gICAgICAg
ICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYS5vcGVuIGZhaWxlZCwgcmV0cnlpbmciLCBlKTsKLSAg
ICAgICAgICBtYXliZVBvc3REZWxheWVkT25DYW1lcmFUaHJlYWQoT1BFTl9DQU1FUkFfREVMQVlf
TVMsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICBzdGFydENhcHR1cmVPbkNhbWVyYVRo
cmVhZCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
IH0pOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICB0aHJvdyBlOwotICAg
ICAgfQotCi0gICAgICBjYW1lcmEuc2V0UHJldmlld1RleHR1cmUoc3VyZmFjZUhlbHBlci5nZXRT
dXJmYWNlVGV4dHVyZSgpKTsKLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBvcmllbnRh
dGlvbjogIiArIGluZm8ub3JpZW50YXRpb24gKyAiIC5EZXZpY2Ugb3JpZW50YXRpb246ICIKLSAg
ICAgICAgICAgICAgKyBnZXREZXZpY2VPcmllbnRhdGlvbigpKTsKLSAgICAgIGNhbWVyYS5zZXRF
cnJvckNhbGxiYWNrKGNhbWVyYUVycm9yQ2FsbGJhY2spOwotICAgICAgc3RhcnRQcmV2aWV3T25D
YW1lcmFUaHJlYWQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgIGZyYW1lT2JzZXJ2
ZXIub25DYXB0dXJlclN0YXJ0ZWQodHJ1ZSk7Ci0gICAgICBpZiAoaXNDYXB0dXJpbmdUb1RleHR1
cmUpIHsKLSAgICAgICAgc3VyZmFjZUhlbHBlci5zdGFydExpc3RlbmluZyh0aGlzKTsKLSAgICAg
IH0KLQotICAgICAgLy8gU3RhcnQgY2FtZXJhIG9ic2VydmVyLgotICAgICAgY2FtZXJhU3RhdGlz
dGljcyA9IG5ldyBDYW1lcmFTdGF0aXN0aWNzKHN1cmZhY2VIZWxwZXIsIGV2ZW50c0hhbmRsZXIp
OwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAic3RhcnRDYXB0dXJlIGZhaWxlZCIsIGUpOwotICAgICAgLy8gTWFr
ZSBzdXJlIHRoZSBjYW1lcmEgaXMgcmVsZWFzZWQuCi0gICAgICBzdG9wQ2FwdHVyZU9uQ2FtZXJh
VGhyZWFkKHRydWUgLyogc3RvcEhhbmRsZXIgKi8pOwotICAgICAgZnJhbWVPYnNlcnZlci5vbkNh
cHR1cmVyU3RhcnRlZChmYWxzZSk7Ci0gICAgICBpZiAoZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7
Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcigiQ2FtZXJhIGNhbiBub3QgYmUg
c3RhcnRlZC4iKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyAoUmUpc3RhcnQgcHJldmll
dyB3aXRoIHRoZSBjbG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQgdG8gfHdpZHRofCB4IHxoZWlnaHR8
IEAgfGZyYW1lcmF0ZXwuCi0gIHByaXZhdGUgdm9pZCBzdGFydFByZXZpZXdPbkNhbWVyYVRocmVh
ZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICBjaGVja0lzT25D
YW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoIWlzQ2FtZXJhUnVubmluZy5nZXQoKSB8fCBjYW1lcmEg
PT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInN0YXJ0UHJldmlld09uQ2FtZXJhVGhy
ZWFkOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMb2dn
aW5nLmQoCi0gICAgICAgIFRBRywgInN0YXJ0UHJldmlld09uQ2FtZXJhVGhyZWFkIHJlcXVlc3Rl
ZDogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlKTsKLQotICAgIHJl
cXVlc3RlZFdpZHRoID0gd2lkdGg7Ci0gICAgcmVxdWVzdGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAg
IHJlcXVlc3RlZEZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKLQotICAgIC8vIEZpbmQgY2xvc2VzdCBz
dXBwb3J0ZWQgZm9ybWF0IGZvciB8d2lkdGh8IHggfGhlaWdodHwgQCB8ZnJhbWVyYXRlfC4KLSAg
ICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBj
YW1lcmEuZ2V0UGFyYW1ldGVycygpOwotICAgIGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFt
ZXJhdGVSYW5nZT4gc3VwcG9ydGVkRnJhbWVyYXRlcyA9Ci0gICAgICAgIENhbWVyYTFFbnVtZXJh
dG9yLmNvbnZlcnRGcmFtZXJhdGVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld0Zwc1Jh
bmdlKCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJBdmFpbGFibGUgZnBzIHJhbmdlczogIiArIHN1
cHBvcnRlZEZyYW1lcmF0ZXMpOwotCi0gICAgZmluYWwgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVS
YW5nZSBmcHNSYW5nZSA9Ci0gICAgICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9z
ZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2Uoc3VwcG9ydGVkRnJhbWVyYXRlcywgZnJhbWVyYXRl
KTsKLQotICAgIGZpbmFsIExpc3Q8U2l6ZT4gc3VwcG9ydGVkUHJldmlld1NpemVzID0KLSAgICAg
ICAgQ2FtZXJhMUVudW1lcmF0b3IuY29udmVydFNpemVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVk
UHJldmlld1NpemVzKCkpOwotICAgIGZpbmFsIFNpemUgcHJldmlld1NpemUgPQotICAgICAgICBD
YW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoc3VwcG9ydGVk
UHJldmlld1NpemVzLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJv
aWQucmVwb3J0Q2FtZXJhUmVzb2x1dGlvbigKLSAgICAgICAgdmlkZW9DYXB0dXJlckFuZHJvaWRS
ZXNvbHV0aW9uSGlzdG9ncmFtLCBwcmV2aWV3U2l6ZSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF2
YWlsYWJsZSBwcmV2aWV3IHNpemVzOiAiICsgc3VwcG9ydGVkUHJldmlld1NpemVzKTsKLQotICAg
IGZpbmFsIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdCA9Ci0gICAgICAgIG5ldyBDYXB0dXJl
Rm9ybWF0KHByZXZpZXdTaXplLndpZHRoLCBwcmV2aWV3U2l6ZS5oZWlnaHQsIGZwc1JhbmdlKTsK
LQotICAgIC8vIENoZWNrIGlmIHdlIGFyZSBhbHJlYWR5IHVzaW5nIHRoaXMgY2FwdHVyZSBmb3Jt
YXQsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KLSAgICBpZiAoY2FwdHVyZUZv
cm1hdC5lcXVhbHModGhpcy5jYXB0dXJlRm9ybWF0KSkgewotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIFVwZGF0ZSBjYW1lcmEgcGFyYW1ldGVycy4KLSAgICBMb2dnaW5nLmQoVEFHLCAi
aXNWaWRlb1N0YWJpbGl6YXRpb25TdXBwb3J0ZWQ6ICIgKyBwYXJhbWV0ZXJzLmlzVmlkZW9TdGFi
aWxpemF0aW9uU3VwcG9ydGVkKCkpOwotICAgIGlmIChwYXJhbWV0ZXJzLmlzVmlkZW9TdGFiaWxp
emF0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0VmlkZW9TdGFiaWxpemF0
aW9uKHRydWUpOwotICAgIH0KLSAgICAvLyBOb3RlOiBzZXRSZWNvcmRpbmdIaW50KHRydWUpIGFj
dHVhbGx5IGRlY3JlYXNlIGZyYW1lIHJhdGUgb24gTjUuCi0gICAgLy8gcGFyYW1ldGVycy5zZXRS
ZWNvcmRpbmdIaW50KHRydWUpOwotICAgIGlmIChjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXgg
PiAwKSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdGcHNSYW5nZShjYXB0dXJlRm9ybWF0
LmZyYW1lcmF0ZS5taW4sIGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1heCk7Ci0gICAgfQotICAg
IHBhcmFtZXRlcnMuc2V0UHJldmlld1NpemUocHJldmlld1NpemUud2lkdGgsIHByZXZpZXdTaXpl
LmhlaWdodCk7Ci0KLSAgICBpZiAoIWlzQ2FwdHVyaW5nVG9UZXh0dXJlKSB7Ci0gICAgICBwYXJh
bWV0ZXJzLnNldFByZXZpZXdGb3JtYXQoY2FwdHVyZUZvcm1hdC5pbWFnZUZvcm1hdCk7Ci0gICAg
fQotICAgIC8vIFBpY3R1cmUgc2l6ZSBpcyBmb3IgdGFraW5nIHBpY3R1cmVzIGFuZCBub3QgZm9y
IHByZXZpZXcvdmlkZW8sIGJ1dCB3ZSBuZWVkIHRvIHNldCBpdCBhbnl3YXkKLSAgICAvLyBhcyBh
IHdvcmthcm91bmQgZm9yIGFuIGFzcGVjdCByYXRpbyBwcm9ibGVtIG9uIE5leHVzIDcuCi0gICAg
ZmluYWwgU2l6ZSBwaWN0dXJlU2l6ZSA9IENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9z
ZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgICAgQ2FtZXJhMUVudW1lcmF0b3IuY29udmVydFNpemVz
KHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUGljdHVyZVNpemVzKCkpLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICBwYXJhbWV0ZXJzLnNldFBpY3R1cmVTaXplKHBpY3R1cmVTaXplLndpZHRoLCBwaWN0dXJl
U2l6ZS5oZWlnaHQpOwotCi0gICAgLy8gVGVtcG9yYXJpbHkgc3RvcCBwcmV2aWV3IGlmIGl0J3Mg
YWxyZWFkeSBydW5uaW5nLgotICAgIGlmICh0aGlzLmNhcHR1cmVGb3JtYXQgIT0gbnVsbCkgewot
ICAgICAgY2FtZXJhLnN0b3BQcmV2aWV3KCk7Ci0gICAgICAvLyBDYWxsaW5nIHxzZXRQcmV2aWV3
Q2FsbGJhY2tXaXRoQnVmZmVyfCB3aXRoIG51bGwgc2hvdWxkIGNsZWFyIHRoZSBpbnRlcm5hbCBj
YW1lcmEgYnVmZmVyCi0gICAgICAvLyBxdWV1ZSwgYnV0IHNvbWV0aW1lcyB3ZSByZWNlaXZlIGEg
ZnJhbWUgd2l0aCB0aGUgb2xkIHJlc29sdXRpb24gYWZ0ZXIgdGhpcyBjYWxsIGFueXdheS4KLSAg
ICAgIGNhbWVyYS5zZXRQcmV2aWV3Q2FsbGJhY2tXaXRoQnVmZmVyKG51bGwpOwotICAgIH0KLQot
ICAgIExpc3Q8U3RyaW5nPiBmb2N1c01vZGVzID0gcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRGb2N1
c01vZGVzKCk7Ci0gICAgaWYgKGZvY3VzTW9kZXMuY29udGFpbnMoYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEuUGFyYW1ldGVycy5GT0NVU19NT0RFX0NPTlRJTlVPVVNfVklERU8pKSB7Ci0gICAgICBM
b2dnaW5nLmQoVEFHLCAiRW5hYmxlIGNvbnRpbnVvdXMgYXV0byBmb2N1cyBtb2RlLiIpOwotICAg
ICAgcGFyYW1ldGVycy5zZXRGb2N1c01vZGUoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1l
dGVycy5GT0NVU19NT0RFX0NPTlRJTlVPVVNfVklERU8pOwotICAgIH0KLQotICAgIC8vIChSZSlz
dGFydCBwcmV2aWV3LgotICAgIExvZ2dpbmcuZChUQUcsICJTdGFydCBjYXB0dXJpbmc6ICIgKyBj
YXB0dXJlRm9ybWF0KTsKLSAgICB0aGlzLmNhcHR1cmVGb3JtYXQgPSBjYXB0dXJlRm9ybWF0Owot
Ci0gICAgY2FtZXJhLnNldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0gICAgLy8gQ2FsY3VsYXRl
IG9yaWVudGF0aW9uIG1hbnVhbGx5IGFuZCBzZW5kIGl0IGFzIENWTyBpbnN0ZWFkLgotICAgIGNh
bWVyYS5zZXREaXNwbGF5T3JpZW50YXRpb24oMCAvKiBkZWdyZWVzICovKTsKLSAgICBpZiAoIWlz
Q2FwdHVyaW5nVG9UZXh0dXJlKSB7Ci0gICAgICBxdWV1ZWRCdWZmZXJzLmNsZWFyKCk7Ci0gICAg
ICBmaW5hbCBpbnQgZnJhbWVTaXplID0gY2FwdHVyZUZvcm1hdC5mcmFtZVNpemUoKTsKLSAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVSX09GX0NBUFRVUkVfQlVGRkVSUzsgKytpKSB7Ci0g
ICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgYnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVj
dChmcmFtZVNpemUpOwotICAgICAgICBxdWV1ZWRCdWZmZXJzLmFkZChidWZmZXIuYXJyYXkoKSk7
Ci0gICAgICAgIGNhbWVyYS5hZGRDYWxsYmFja0J1ZmZlcihidWZmZXIuYXJyYXkoKSk7Ci0gICAg
ICB9Ci0gICAgICBjYW1lcmEuc2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcih0aGlzKTsKLSAg
ICB9Ci0gICAgY2FtZXJhLnN0YXJ0UHJldmlldygpOwotICB9Ci0KLSAgLy8gQmxvY2tzIHVudGls
IGNhbWVyYSBpcyBrbm93biB0byBiZSBzdG9wcGVkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgc3RvcENhcHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExvZ2dp
bmcuZChUQUcsICJzdG9wQ2FwdHVyZSIpOwotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGJhcnJp
ZXIgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgZmluYWwgYm9vbGVhbiBkaWRQb3N0ID0g
bWF5YmVQb3N0T25DYW1lcmFUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHN0b3BDYXB0dXJlT25DYW1lcmFU
aHJlYWQodHJ1ZSAvKiBzdG9wSGFuZGxlciAqLyk7Ci0gICAgICAgIGJhcnJpZXIuY291bnREb3du
KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgaWYgKCFkaWRQb3N0KSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAiQ2FsbGluZyBzdG9wQ2FwdHVyZSgpIGZvciBhbHJlYWR5IHN0b3BwZWQgY2FtZXJh
LiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWJhcnJpZXIuYXdhaXQoQ0FNRVJB
X1NUT1BfVElNRU9VVF9NUywgVGltZVVuaXQuTUlMTElTRUNPTkRTKSkgewotICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkNhbWVyYSBzdG9wIHRpbWVvdXQiKTsKLSAgICAgIHByaW50U3RhY2tUcmFjZSgp
OwotICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICBldmVudHNIYW5k
bGVyLm9uQ2FtZXJhRXJyb3IoIkNhbWVyYSBzdG9wIHRpbWVvdXQiKTsKLSAgICAgIH0KLSAgICB9
Ci0gICAgZnJhbWVPYnNlcnZlci5vbkNhcHR1cmVyU3RvcHBlZCgpOwotICAgIExvZ2dpbmcuZChU
QUcsICJzdG9wQ2FwdHVyZSBkb25lIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RvcENhcHR1
cmVPbkNhbWVyYVRocmVhZChib29sZWFuIHN0b3BIYW5kbGVyKSB7Ci0gICAgY2hlY2tJc09uQ2Ft
ZXJhVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BDYXB0dXJlT25DYW1lcmFUaHJl
YWQiKTsKLSAgICBmaW5hbCBsb25nIHN0b3BTdGFydFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsK
LSAgICAvLyBOb3RlIHRoYXQgdGhlIGNhbWVyYSBtaWdodCBzdGlsbCBub3QgYmUgc3RhcnRlZCBo
ZXJlIGlmIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhyZWFkIGZhaWxlZAotICAgIC8vIGFuZCB3ZSBw
b3N0ZWQgYSByZXRyeS4KLQotICAgIC8vIE1ha2Ugc3VyZSBvblRleHR1cmVGcmFtZUF2YWlsYWJs
ZSgpIGlzIG5vdCBjYWxsZWQgYW55bW9yZS4KLSAgICBpZiAoc3VyZmFjZUhlbHBlciAhPSBudWxs
KSB7Ci0gICAgICBzdXJmYWNlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLSAgICB9Ci0gICAgaWYg
KHN0b3BIYW5kbGVyKSB7Ci0gICAgICAvLyBDbGVhciB0aGUgY2FtZXJhVGhyZWFkSGFuZGxlciBm
aXJzdCwgaW4gY2FzZSBzdG9wUHJldmlldyBvcgotICAgICAgLy8gb3RoZXIgZHJpdmVyIGNvZGUg
ZGVhZGxvY2tzLiBEZWFkbG9jayBpbgotICAgICAgLy8gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
X3N0b3BQcmV2aWV3KE5hdGl2ZSBNZXRob2QpIGhhcwotICAgICAgLy8gYmVlbiBvYnNlcnZlZCBv
biBOZXh1cyA1IChoYW1tZXJoZWFkKSwgT1MgdmVyc2lvbiBMTVk0OEkuCi0gICAgICAvLyBUaGUg
Y2FtZXJhIG1pZ2h0IHBvc3QgYW5vdGhlciBvbmUgb3IgdHdvIHByZXZpZXcgZnJhbWVzCi0gICAg
ICAvLyBiZWZvcmUgc3RvcHBlZCwgc28gd2UgaGF2ZSB0byBjaGVjayB8aXNDYW1lcmFSdW5uaW5n
fC4KLSAgICAgIC8vIFJlbW92ZSBhbGwgcGVuZGluZyBSdW5uYWJsZXMgcG9zdGVkIGZyb20gfHRo
aXN8LgotICAgICAgaXNDYW1lcmFSdW5uaW5nLnNldChmYWxzZSk7Ci0gICAgICBjYW1lcmFUaHJl
YWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrc0FuZE1lc3NhZ2VzKHRoaXMgLyogdG9rZW4gKi8pOwot
ICAgIH0KLSAgICBpZiAoY2FtZXJhU3RhdGlzdGljcyAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmFT
dGF0aXN0aWNzLnJlbGVhc2UoKTsKLSAgICAgIGNhbWVyYVN0YXRpc3RpY3MgPSBudWxsOwotICAg
IH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBwcmV2aWV3LiIpOwotICAgIGlmIChjYW1lcmEg
IT0gbnVsbCkgewotICAgICAgY2FtZXJhLnN0b3BQcmV2aWV3KCk7Ci0gICAgICBjYW1lcmEuc2V0
UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcihudWxsKTsKLSAgICB9Ci0gICAgcXVldWVkQnVmZmVy
cy5jbGVhcigpOwotICAgIGNhcHR1cmVGb3JtYXQgPSBudWxsOwotCi0gICAgTG9nZ2luZy5kKFRB
RywgIlJlbGVhc2UgY2FtZXJhLiIpOwotICAgIGlmIChjYW1lcmEgIT0gbnVsbCkgewotICAgICAg
Y2FtZXJhLnJlbGVhc2UoKTsKLSAgICAgIGNhbWVyYSA9IG51bGw7Ci0gICAgfQotICAgIGlmIChl
dmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFDbG9z
ZWQoKTsKLSAgICB9Ci0gICAgZmluYWwgaW50IHN0b3BUaW1lTXMgPSAoaW50KSBUaW1lVW5pdC5O
QU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIHN0b3BTdGFydFRpbWUpOwot
ICAgIHZpZGVvQ2FwdHVyZXJBbmRyb2lkU3RvcFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3Rv
cFRpbWVNcyk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQg
ZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN3aXRjaENhbWVyYU9uQ2FtZXJhVGhyZWFk
KCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmICghaXNDYW1lcmFSdW5u
aW5nLmdldCgpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAic3dpdGNoQ2FtZXJhT25DYW1lcmFU
aHJlYWQ6IENhbWVyYSBpcyBzdG9wcGVkIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIExv
Z2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmFPbkNhbWVyYVRocmVhZCIpOwotICAgIHN0b3BDYXB0
dXJlT25DYW1lcmFUaHJlYWQoZmFsc2UgLyogc3RvcEhhbmRsZXIgKi8pOwotICAgIHN5bmNocm9u
aXplZCAoY2FtZXJhSWRMb2NrKSB7Ci0gICAgICBpZCA9IChpZCArIDEpICUgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCk7Ci0gICAgfQotICAgIHN0YXJ0Q2FwdHVy
ZU9uQ2FtZXJhVGhyZWFkKHJlcXVlc3RlZFdpZHRoLCByZXF1ZXN0ZWRIZWlnaHQsIHJlcXVlc3Rl
ZEZyYW1lcmF0ZSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYU9uQ2FtZXJhVGhy
ZWFkIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGdldERldmljZU9yaWVudGF0aW9uKCkg
ewotICAgIGludCBvcmllbnRhdGlvbiA9IDA7Ci0KLSAgICBXaW5kb3dNYW5hZ2VyIHdtID0gKFdp
bmRvd01hbmFnZXIpIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQu
V0lORE9XX1NFUlZJQ0UpOwotICAgIHN3aXRjaCAod20uZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRS
b3RhdGlvbigpKSB7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fOTA6Ci0gICAgICAgIG9y
aWVudGF0aW9uID0gOTA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFU
SU9OXzE4MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAxODA7Ci0gICAgICAgIGJyZWFrOwotICAg
ICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzI3MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAyNzA7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzA6Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICBvcmllbnRhdGlvbiA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICByZXR1cm4gb3JpZW50YXRpb247Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRGcmFtZU9y
aWVudGF0aW9uKCkgewotICAgIGludCByb3RhdGlvbiA9IGdldERldmljZU9yaWVudGF0aW9uKCk7
Ci0gICAgaWYgKGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUlu
Zm8uQ0FNRVJBX0ZBQ0lOR19CQUNLKSB7Ci0gICAgICByb3RhdGlvbiA9IDM2MCAtIHJvdGF0aW9u
OwotICAgIH0KLSAgICByZXR1cm4gKGluZm8ub3JpZW50YXRpb24gKyByb3RhdGlvbikgJSAzNjA7
Ci0gIH0KLQotICAvLyBDYWxsZWQgb24gY2FtZXJhVGhyZWFkIHNvIG11c3Qgbm90ICJzeW5jaHJv
bml6ZWQiLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QcmV2aWV3RnJhbWUoYnl0ZVtd
IGRhdGEsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbGxiYWNrQ2FtZXJhKSB7Ci0gICAgY2hl
Y2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgaWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJvblByZXZpZXdGcmFtZTogQ2FtZXJhIGlzIHN0b3BwZWQi
KTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFxdWV1ZWRCdWZmZXJzLmNvbnRhaW5z
KGRhdGEpKSB7Ci0gICAgICAvLyB8ZGF0YXwgaXMgYW4gb2xkIGludmFsaWQgYnVmZmVyLgotICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoY2FtZXJhICE9IGNhbGxiYWNrQ2FtZXJhKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBjYW1lcmEgaW4gY2Fs
bGJhY2shIik7Ci0gICAgfQotCi0gICAgZmluYWwgbG9uZyBjYXB0dXJlVGltZU5zID0gVGltZVVu
aXQuTUlMTElTRUNPTkRTLnRvTmFub3MoU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwot
Ci0gICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQpIHsKLSAgICAgIG9uRmlyc3RGcmFtZUF2YWls
YWJsZSgpOwotICAgIH0KLSAgICBjYW1lcmFTdGF0aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgZnJh
bWVPYnNlcnZlci5vbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBkYXRhLCBjYXB0
dXJlRm9ybWF0LndpZHRoLCBjYXB0dXJlRm9ybWF0LmhlaWdodCwgZ2V0RnJhbWVPcmllbnRhdGlv
bigpLCBjYXB0dXJlVGltZU5zKTsKLSAgICBjYW1lcmEuYWRkQ2FsbGJhY2tCdWZmZXIoZGF0YSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVBdmFpbGFi
bGUoaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0
YW1wTnMpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoIWlzQ2FtZXJh
UnVubmluZy5nZXQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIm9uVGV4dHVyZUZyYW1lQXZh
aWxhYmxlOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgc3VyZmFjZUhlbHBlci5yZXR1cm5U
ZXh0dXJlRnJhbWUoKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaW50IHJvdGF0aW9uID0g
Z2V0RnJhbWVPcmllbnRhdGlvbigpOwotICAgIGlmIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfRlJPTlQpIHsKLSAgICAgIC8v
IFVuZG8gdGhlIG1pcnJvciB0aGF0IHRoZSBPUyAiaGVscHMiIHVzIHdpdGguCi0gICAgICAvLyBo
dHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL0Nh
bWVyYS5odG1sI3NldERpc3BsYXlPcmllbnRhdGlvbihpbnQpCi0gICAgICB0cmFuc2Zvcm1NYXRy
aXggPQotICAgICAgICAgIFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXModHJhbnNmb3Jt
TWF0cml4LCBSZW5kZXJlckNvbW1vbi5ob3Jpem9udGFsRmxpcE1hdHJpeCgpKTsKLSAgICB9Ci0g
ICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQpIHsKLSAgICAgIG9uRmlyc3RGcmFtZUF2YWlsYWJs
ZSgpOwotICAgIH0KLSAgICBjYW1lcmFTdGF0aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgZnJhbWVP
YnNlcnZlci5vblRleHR1cmVGcmFtZUNhcHR1cmVkKGNhcHR1cmVGb3JtYXQud2lkdGgsIGNhcHR1
cmVGb3JtYXQuaGVpZ2h0LCBvZXNUZXh0dXJlSWQsCi0gICAgICAgIHRyYW5zZm9ybU1hdHJpeCwg
cm90YXRpb24sIHRpbWVzdGFtcE5zKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBvbkZpcnN0RnJh
bWVBdmFpbGFibGUoKSB7Ci0gICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAg
ZXZlbnRzSGFuZGxlci5vbkZpcnN0RnJhbWVBdmFpbGFibGUoKTsKLSAgICB9Ci0gICAgZmluYWwg
aW50IHN0YXJ0VGltZU1zID0KLSAgICAgICAgKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9N
aWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydFN0YXJ0VGltZU5zKTsKLSAgICB2aWRlb0Nh
cHR1cmVyQW5kcm9pZFN0YXJ0VGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdGFydFRpbWVNcyk7
Ci0gICAgZmlyc3RGcmFtZVJlcG9ydGVkID0gdHJ1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvRmlsZVJlbmRlcmVyLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0ZpbGVSZW5kZXJlci5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvRmlsZVJlbmRlcmVyLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxNDkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2Vi
UlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9z
LkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0
IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9y
dCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLQotLyoqCi0gKiBDYW4gYmUg
dXNlZCB0byBzYXZlIHRoZSB2aWRlbyBmcmFtZXMgdG8gZmlsZS4KLSAqLwotcHVibGljIGNsYXNz
IFZpZGVvRmlsZVJlbmRlcmVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3Mgewot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZpZGVvRmlsZVJlbmRlcmVyIjsK
LQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXJUaHJlYWQgcmVuZGVyVGhyZWFkOwotICBwcml2YXRl
IGZpbmFsIE9iamVjdCBoYW5kbGVyTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5h
bCBIYW5kbGVyIHJlbmRlclRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgRmlsZU91dHB1
dFN0cmVhbSB2aWRlb091dEZpbGU7Ci0gIHByaXZhdGUgZmluYWwgaW50IG91dHB1dEZpbGVXaWR0
aDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgb3V0cHV0RmlsZUhlaWdodDsKLSAgcHJpdmF0ZSBmaW5h
bCBpbnQgb3V0cHV0RnJhbWVTaXplOwotICBwcml2YXRlIGZpbmFsIEJ5dGVCdWZmZXIgb3V0cHV0
RnJhbWVCdWZmZXI7Ci0gIHByaXZhdGUgRWdsQmFzZSBlZ2xCYXNlOwotICBwcml2YXRlIFl1dkNv
bnZlcnRlciB5dXZDb252ZXJ0ZXI7Ci0KLSAgcHVibGljIFZpZGVvRmlsZVJlbmRlcmVyKFN0cmlu
ZyBvdXRwdXRGaWxlLCBpbnQgb3V0cHV0RmlsZVdpZHRoLCBpbnQgb3V0cHV0RmlsZUhlaWdodCwK
LSAgICAgIGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0KSB0aHJvd3MgSU9FeGNl
cHRpb24gewotICAgIGlmICgob3V0cHV0RmlsZVdpZHRoICUgMikgPT0gMSB8fCAob3V0cHV0Rmls
ZUhlaWdodCAlIDIpID09IDEpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNl
cHRpb24oIkRvZXMgbm90IHN1cHBvcnQgdW5ldmVuIHdpZHRoIG9yIGhlaWdodCIpOwotICAgIH0K
LQotICAgIHRoaXMub3V0cHV0RmlsZVdpZHRoID0gb3V0cHV0RmlsZVdpZHRoOwotICAgIHRoaXMu
b3V0cHV0RmlsZUhlaWdodCA9IG91dHB1dEZpbGVIZWlnaHQ7Ci0KLSAgICBvdXRwdXRGcmFtZVNp
emUgPSBvdXRwdXRGaWxlV2lkdGggKiBvdXRwdXRGaWxlSGVpZ2h0ICogMyAvIDI7Ci0gICAgb3V0
cHV0RnJhbWVCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KG91dHB1dEZyYW1lU2l6
ZSk7Ci0KLSAgICB2aWRlb091dEZpbGUgPSBuZXcgRmlsZU91dHB1dFN0cmVhbShvdXRwdXRGaWxl
KTsKLSAgICB2aWRlb091dEZpbGUud3JpdGUoCi0gICAgICAgICgiWVVWNE1QRUcyIEM0MjAgVyIg
KyBvdXRwdXRGaWxlV2lkdGggKyAiIEgiICsgb3V0cHV0RmlsZUhlaWdodCArICIgSXAgRjMwOjEg
QTE6MVxuIikKLSAgICAgICAgICAgIC5nZXRCeXRlcygpKTsKLQotICAgIHJlbmRlclRocmVhZCA9
IG5ldyBIYW5kbGVyVGhyZWFkKFRBRyk7Ci0gICAgcmVuZGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAg
cmVuZGVyVGhyZWFkSGFuZGxlciA9IG5ldyBIYW5kbGVyKHJlbmRlclRocmVhZC5nZXRMb29wZXIo
KSk7Ci0KLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KHJlbmRl
clRocmVhZEhhbmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoc2hh
cmVkQ29udGV4dCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICAgICAgZWdsQmFz
ZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0gICAgICAgIGVnbEJhc2UubWFrZUN1cnJl
bnQoKTsKLSAgICAgICAgeXV2Q29udmVydGVyID0gbmV3IFl1dkNvbnZlcnRlcigpOwotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1l
KGZpbmFsIFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgcmVuZGVyVGhyZWFk
SGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICByZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKGZyYW1l
KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZW5kZXJGcmFtZU9u
UmVuZGVyVGhyZWFkKFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgZmluYWwg
ZmxvYXQgZnJhbWVBc3BlY3RSYXRpbyA9IChmbG9hdCkgZnJhbWUucm90YXRlZFdpZHRoKCkgLyAo
ZmxvYXQpIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKTsKLQotICAgIGZpbmFsIGZsb2F0W10gcm90YXRl
ZFNhbXBsaW5nTWF0cml4ID0KLSAgICAgICAgUmVuZGVyZXJDb21tb24ucm90YXRlVGV4dHVyZU1h
dHJpeChmcmFtZS5zYW1wbGluZ01hdHJpeCwgZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgIGZp
bmFsIGZsb2F0W10gbGF5b3V0TWF0cml4ID0gUmVuZGVyZXJDb21tb24uZ2V0TGF5b3V0TWF0cml4
KAotICAgICAgICBmYWxzZSwgZnJhbWVBc3BlY3RSYXRpbywgKGZsb2F0KSBvdXRwdXRGaWxlV2lk
dGggLyBvdXRwdXRGaWxlSGVpZ2h0KTsKLSAgICBmaW5hbCBmbG9hdFtdIHRleE1hdHJpeCA9IFJl
bmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXMocm90YXRlZFNhbXBsaW5nTWF0cml4LCBsYXlv
dXRNYXRyaXgpOwotCi0gICAgdHJ5IHsKLSAgICAgIHZpZGVvT3V0RmlsZS53cml0ZSgiRlJBTUVc
biIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICBpZiAoIWZyYW1lLnl1dkZyYW1lKSB7Ci0gICAgICAgIHl1
dkNvbnZlcnRlci5jb252ZXJ0KG91dHB1dEZyYW1lQnVmZmVyLCBvdXRwdXRGaWxlV2lkdGgsIG91
dHB1dEZpbGVIZWlnaHQsIG91dHB1dEZpbGVXaWR0aCwKLSAgICAgICAgICAgIGZyYW1lLnRleHR1
cmVJZCwgdGV4TWF0cml4KTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gb3V0cHV0RmlsZVdpZHRo
OwotICAgICAgICBieXRlW10gZGF0YSA9IG91dHB1dEZyYW1lQnVmZmVyLmFycmF5KCk7Ci0gICAg
ICAgIGludCBvZmZzZXQgPSBvdXRwdXRGcmFtZUJ1ZmZlci5hcnJheU9mZnNldCgpOwotCi0gICAg
ICAgIC8vIFdyaXRlIFkKLSAgICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKGRhdGEsIG9mZnNldCwg
b3V0cHV0RmlsZVdpZHRoICogb3V0cHV0RmlsZUhlaWdodCk7Ci0KLSAgICAgICAgLy8gV3JpdGUg
VQotICAgICAgICBmb3IgKGludCByID0gb3V0cHV0RmlsZUhlaWdodDsgciA8IG91dHB1dEZpbGVI
ZWlnaHQgKiAzIC8gMjsgKytyKSB7Ci0gICAgICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKGRhdGEs
IG9mZnNldCArIHIgKiBzdHJpZGUsIHN0cmlkZSAvIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gV3JpdGUgVgotICAgICAgICBmb3IgKGludCByID0gb3V0cHV0RmlsZUhlaWdodDsgciA8IG91
dHB1dEZpbGVIZWlnaHQgKiAzIC8gMjsgKytyKSB7Ci0gICAgICAgICAgdmlkZW9PdXRGaWxlLndy
aXRlKGRhdGEsIG9mZnNldCArIHIgKiBzdHJpZGUgKyBzdHJpZGUgLyAyLCBzdHJpZGUgLyAyKTsK
LSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbmF0aXZlSTQyMFNjYWxlKGZyYW1l
Lnl1dlBsYW5lc1swXSwgZnJhbWUueXV2U3RyaWRlc1swXSwgZnJhbWUueXV2UGxhbmVzWzFdLAot
ICAgICAgICAgICAgZnJhbWUueXV2U3RyaWRlc1sxXSwgZnJhbWUueXV2UGxhbmVzWzJdLCBmcmFt
ZS55dXZTdHJpZGVzWzJdLCBmcmFtZS53aWR0aCwgZnJhbWUuaGVpZ2h0LAotICAgICAgICAgICAg
b3V0cHV0RnJhbWVCdWZmZXIsIG91dHB1dEZpbGVXaWR0aCwgb3V0cHV0RmlsZUhlaWdodCk7Ci0g
ICAgICAgIHZpZGVvT3V0RmlsZS53cml0ZSgKLSAgICAgICAgICAgIG91dHB1dEZyYW1lQnVmZmVy
LmFycmF5KCksIG91dHB1dEZyYW1lQnVmZmVyLmFycmF5T2Zmc2V0KCksIG91dHB1dEZyYW1lU2l6
ZSk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkZhaWxlZCB0byB3cml0ZSB0byBmaWxlIGZvciB2aWRlbyBvdXQiKTsKLSAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICBW
aWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoq
Ci0gICAqIFJlbGVhc2UgYWxsIHJlc291cmNlcy4gQWxsIGFscmVhZHkgcG9zdGVkIGZyYW1lcyB3
aWxsIGJlIHJlbmRlcmVkIGZpcnN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsK
LSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBjbGVhbnVwQmFycmllciA9IG5ldyBDb3VudERvd25M
YXRjaCgxKTsKLSAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgdmlkZW9PdXRGaWxlLmNsb3NlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhj
ZXB0aW9uIGUpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRXJyb3IgY2xvc2luZyBvdXRw
dXQgdmlkZW8gZmlsZSIpOwotICAgICAgICB9Ci0gICAgICAgIHl1dkNvbnZlcnRlci5yZWxlYXNl
KCk7Ci0gICAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAgICByZW5kZXJUaHJlYWQucXVp
dCgpOwotICAgICAgICBjbGVhbnVwQmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9
KTsKLSAgICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShjbGVhbnVwQmFycmllcik7
Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUk0MjBTY2FsZShCeXRl
QnVmZmVyIHNyY1ksIGludCBzdHJpZGVZLCBCeXRlQnVmZmVyIHNyY1UsCi0gICAgICBpbnQgc3Ry
aWRlVSwgQnl0ZUJ1ZmZlciBzcmNWLCBpbnQgc3RyaWRlViwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBCeXRlQnVmZmVyIGRzdCwKLSAgICAgIGludCBkc3RXaWR0aCwgaW50IGRzdEhlaWdodCk7Ci19
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXIuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxNTAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwot
Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLQotLyoqCi0gKiBKYXZhIHZlcnNpb24gb2Yg
VmlkZW9TaW5rSW50ZXJmYWNlLiAgSW4gYWRkaXRpb24gdG8gYWxsb3dpbmcgY2xpZW50cyB0bwot
ICogZGVmaW5lIHRoZWlyIG93biByZW5kZXJpbmcgYmVoYXZpb3IgKGJ5IHBhc3NpbmcgaW4gYSBD
YWxsYmFja3Mgb2JqZWN0KSwgdGhpcwotICogY2xhc3MgYWxzbyBwcm92aWRlcyBhIGNyZWF0ZUd1
aSgpIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBHVUktcmVuZGVyaW5nIHdpbmRvdwotICogb24gdmFy
aW91cyBwbGF0Zm9ybXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWRlb1JlbmRlcmVyIHsKLSAgLyoq
Ci0gICAqIEphdmEgdmVyc2lvbiBvZiB3ZWJydGM6OlZpZGVvRnJhbWUuIEZyYW1lcyBhcmUgb25s
eSBjb25zdHJ1Y3RlZCBmcm9tIG5hdGl2ZSBjb2RlIGFuZCB0ZXN0Ci0gICAqIGNvZGUuCi0gICAq
LwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEk0MjBGcmFtZSB7Ci0gICAgcHVibGljIGZpbmFsIGlu
dCB3aWR0aDsKLSAgICBwdWJsaWMgZmluYWwgaW50IGhlaWdodDsKLSAgICBwdWJsaWMgZmluYWwg
aW50W10geXV2U3RyaWRlczsKLSAgICBwdWJsaWMgQnl0ZUJ1ZmZlcltdIHl1dlBsYW5lczsKLSAg
ICBwdWJsaWMgZmluYWwgYm9vbGVhbiB5dXZGcmFtZTsKLSAgICAvLyBNYXRyaXggdGhhdCB0cmFu
c2Zvcm1zIHN0YW5kYXJkIGNvb3JkaW5hdGVzIHRvIHRoZWlyIHByb3BlciBzYW1wbGluZyBsb2Nh
dGlvbnMgaW4KLSAgICAvLyB0aGUgdGV4dHVyZS4gVGhpcyB0cmFuc2Zvcm0gY29tcGVuc2F0ZXMg
Zm9yIGFueSBwcm9wZXJ0aWVzIG9mIHRoZSB2aWRlbyBzb3VyY2UgdGhhdAotICAgIC8vIGNhdXNl
IGl0IHRvIGFwcGVhciBkaWZmZXJlbnQgZnJvbSBhIG5vcm1hbGl6ZWQgdGV4dHVyZS4gVGhpcyBt
YXRyaXggZG9lcyBub3QgdGFrZQotICAgIC8vIHxyb3RhdGlvbkRlZ3JlZXwgaW50byBhY2NvdW50
LgotICAgIHB1YmxpYyBmaW5hbCBmbG9hdFtdIHNhbXBsaW5nTWF0cml4OwotICAgIHB1YmxpYyBp
bnQgdGV4dHVyZUlkOwotICAgIC8vIEZyYW1lIHBvaW50ZXIgaW4gQysrLgotICAgIHByaXZhdGUg
bG9uZyBuYXRpdmVGcmFtZVBvaW50ZXI7Ci0KLSAgICAvLyByb3RhdGlvbkRlZ3JlZSBpcyB0aGUg
ZGVncmVlIHRoYXQgdGhlIGZyYW1lIG11c3QgYmUgcm90YXRlZCBjbG9ja3dpc2VseQotICAgIC8v
IHRvIGJlIHJlbmRlcmVkIGNvcnJlY3RseS4KLSAgICBwdWJsaWMgaW50IHJvdGF0aW9uRGVncmVl
OwotCi0gICAgLyoqCi0gICAgICogQ29uc3RydWN0IGEgZnJhbWUgb2YgdGhlIGdpdmVuIGRpbWVu
c2lvbnMgd2l0aCB0aGUgc3BlY2lmaWVkIHBsYW5hciBkYXRhLgotICAgICAqLwotICAgIEk0MjBG
cmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbkRlZ3JlZSwgaW50W10geXV2
U3RyaWRlcywgQnl0ZUJ1ZmZlcltdIHl1dlBsYW5lcywKLSAgICAgICAgbG9uZyBuYXRpdmVGcmFt
ZVBvaW50ZXIpIHsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0
ID0gaGVpZ2h0OwotICAgICAgdGhpcy55dXZTdHJpZGVzID0geXV2U3RyaWRlczsKLSAgICAgIHRo
aXMueXV2UGxhbmVzID0geXV2UGxhbmVzOwotICAgICAgdGhpcy55dXZGcmFtZSA9IHRydWU7Ci0g
ICAgICB0aGlzLnJvdGF0aW9uRGVncmVlID0gcm90YXRpb25EZWdyZWU7Ci0gICAgICB0aGlzLm5h
dGl2ZUZyYW1lUG9pbnRlciA9IG5hdGl2ZUZyYW1lUG9pbnRlcjsKLSAgICAgIGlmIChyb3RhdGlv
bkRlZ3JlZSAlIDkwICE9IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigiUm90YXRpb24gZGVncmVlIG5vdCBtdWx0aXBsZSBvZiA5MDogIiArIHJvdGF0aW9u
RGVncmVlKTsKLSAgICAgIH0KLSAgICAgIC8vIFRoZSBjb252ZW50aW9uIGluIFdlYlJUQyBpcyB0
aGF0IHRoZSBmaXJzdCBlbGVtZW50IGluIGEgQnl0ZUJ1ZmZlciBjb3JyZXNwb25kcyB0byB0aGUK
LSAgICAgIC8vIHRvcC1sZWZ0IGNvcm5lciBvZiB0aGUgaW1hZ2UsIGJ1dCBpbiBnbFRleEltYWdl
MkQoKSB0aGUgZmlyc3QgZWxlbWVudCBjb3JyZXNwb25kcyB0byB0aGUKLSAgICAgIC8vIGJvdHRv
bS1sZWZ0IGNvcm5lci4gVGhpcyBkaXNjcmVwYW5jeSBpcyBjb3JyZWN0ZWQgYnkgc2V0dGluZyBh
IHZlcnRpY2FsIGZsaXAgYXMgc2FtcGxpbmcKLSAgICAgIC8vIG1hdHJpeC4KLSAgICAgIC8vIGNs
YW5nLWZvcm1hdCBvZmYKLSAgICAgIHNhbXBsaW5nTWF0cml4ID0gbmV3IGZsb2F0W10gewotICAg
ICAgICAgIDEsICAwLCAwLCAwLAotICAgICAgICAgIDAsIC0xLCAwLCAwLAotICAgICAgICAgIDAs
ICAwLCAxLCAwLAotICAgICAgICAgIDAsICAxLCAwLCAxfTsKLSAgICAgIC8vIGNsYW5nLWZvcm1h
dCBvbgotICAgIH0KLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIHRleHR1cmUgZnJhbWUg
b2YgdGhlIGdpdmVuIGRpbWVuc2lvbnMgd2l0aCBkYXRhIGluIFN1cmZhY2VUZXh0dXJlCi0gICAg
ICovCi0gICAgSTQyMEZyYW1lKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uRGVn
cmVlLCBpbnQgdGV4dHVyZUlkLCBmbG9hdFtdIHNhbXBsaW5nTWF0cml4LAotICAgICAgICBsb25n
IG5hdGl2ZUZyYW1lUG9pbnRlcikgewotICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAg
dGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLnl1dlN0cmlkZXMgPSBudWxsOwotICAg
ICAgdGhpcy55dXZQbGFuZXMgPSBudWxsOwotICAgICAgdGhpcy5zYW1wbGluZ01hdHJpeCA9IHNh
bXBsaW5nTWF0cml4OwotICAgICAgdGhpcy50ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgICB0
aGlzLnl1dkZyYW1lID0gZmFsc2U7Ci0gICAgICB0aGlzLnJvdGF0aW9uRGVncmVlID0gcm90YXRp
b25EZWdyZWU7Ci0gICAgICB0aGlzLm5hdGl2ZUZyYW1lUG9pbnRlciA9IG5hdGl2ZUZyYW1lUG9p
bnRlcjsKLSAgICAgIGlmIChyb3RhdGlvbkRlZ3JlZSAlIDkwICE9IDApIHsKLSAgICAgICAgdGhy
b3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUm90YXRpb24gZGVncmVlIG5vdCBtdWx0
aXBsZSBvZiA5MDogIiArIHJvdGF0aW9uRGVncmVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgaW50IHJvdGF0ZWRXaWR0aCgpIHsKLSAgICAgIHJldHVybiAocm90YXRpb25EZWdyZWUg
JSAxODAgPT0gMCkgPyB3aWR0aCA6IGhlaWdodDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHJv
dGF0ZWRIZWlnaHQoKSB7Ci0gICAgICByZXR1cm4gKHJvdGF0aW9uRGVncmVlICUgMTgwID09IDAp
ID8gaGVpZ2h0IDogd2lkdGg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0
cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiB3aWR0aCArICJ4IiArIGhlaWdodCArICI6
IiArIHl1dlN0cmlkZXNbMF0gKyAiOiIgKyB5dXZTdHJpZGVzWzFdICsgIjoiICsgeXV2U3RyaWRl
c1syXTsKLSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgbmF0aXZlIGZ1bmN0aW9uIHRvIGRvIGEg
dmlkZW8gZnJhbWUgcGxhbmUgY29weWluZy4KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBu
YXRpdmVDb3B5UGxhbmUoCi0gICAgICBCeXRlQnVmZmVyIHNyYywgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBpbnQgc3JjU3RyaWRlLCBCeXRlQnVmZmVyIGRzdCwgaW50IGRzdFN0cmlkZSk7Ci0KLSAg
LyoqIFRoZSByZWFsIG1lYXQgb2YgVmlkZW9TaW5rSW50ZXJmYWNlLiAqLwotICBwdWJsaWMgc3Rh
dGljIGludGVyZmFjZSBDYWxsYmFja3MgewotICAgIC8vIHxmcmFtZXwgbWlnaHQgaGF2ZSBwZW5k
aW5nIHJvdGF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBDYWxsYmFja3MKLSAgICAvLyBzaG91
bGQgaGFuZGxlIHRoYXQgYnkgYXBwbHlpbmcgcm90YXRpb24gZHVyaW5nIHJlbmRlcmluZy4gVGhl
IGNhbGxlZQotICAgIC8vIGlzIHJlc3BvbnNpYmxlIGZvciBzaWduYWxpbmcgd2hlbiBpdCBpcyBk
b25lIHdpdGggfGZyYW1lfCBieSBjYWxsaW5nCi0gICAgLy8gcmVuZGVyRnJhbWVEb25lKGZyYW1l
KS4KLSAgICBwdWJsaWMgdm9pZCByZW5kZXJGcmFtZShJNDIwRnJhbWUgZnJhbWUpOwotICB9Ci0K
LSAgLyoqCi0gICAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgZXZlcnkgcmVuZGVyRnJhbWUo
KSB0byByZWxlYXNlIHRoZSBmcmFtZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZW5k
ZXJGcmFtZURvbmUoSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgZnJhbWUueXV2UGxhbmVzID0gbnVs
bDsKLSAgICBmcmFtZS50ZXh0dXJlSWQgPSAwOwotICAgIGlmIChmcmFtZS5uYXRpdmVGcmFtZVBv
aW50ZXIgIT0gMCkgewotICAgICAgcmVsZWFzZU5hdGl2ZUZyYW1lKGZyYW1lLm5hdGl2ZUZyYW1l
UG9pbnRlcik7Ci0gICAgICBmcmFtZS5uYXRpdmVGcmFtZVBvaW50ZXIgPSAwOwotICAgIH0KLSAg
fQotCi0gIGxvbmcgbmF0aXZlVmlkZW9SZW5kZXJlcjsKLQotICBwdWJsaWMgVmlkZW9SZW5kZXJl
cihDYWxsYmFja3MgY2FsbGJhY2tzKSB7Ci0gICAgbmF0aXZlVmlkZW9SZW5kZXJlciA9IG5hdGl2
ZVdyYXBWaWRlb1JlbmRlcmVyKGNhbGxiYWNrcyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNw
b3NlKCkgewotICAgIGlmIChuYXRpdmVWaWRlb1JlbmRlcmVyID09IDApIHsKLSAgICAgIC8vIEFs
cmVhZHkgZGlzcG9zZWQuCi0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZnJlZVdyYXBwZWRW
aWRlb1JlbmRlcmVyKG5hdGl2ZVZpZGVvUmVuZGVyZXIpOwotICAgIG5hdGl2ZVZpZGVvUmVuZGVy
ZXIgPSAwOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlV3JhcFZp
ZGVvUmVuZGVyZXIoQ2FsbGJhY2tzIGNhbGxiYWNrcyk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSB2b2lkIGZyZWVXcmFwcGVkVmlkZW9SZW5kZXJlcihsb25nIG5hdGl2ZVZpZGVvUmVuZGVyZXIp
OwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCByZWxlYXNlTmF0aXZlRnJhbWUobG9uZyBu
YXRpdmVGcmFtZVBvaW50ZXIpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRl
cmVyR3VpLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVy
R3VpLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5k
ZXJlckd1aS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNjI4ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9S
ZW5kZXJlci5JNDIwRnJhbWU7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3VwcHJlc3NM
aW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFw
aGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTDE0OwotaW1wb3J0IGFuZHJvaWQu
b3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OwotCi1p
bXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5D
b3VudERvd25MYXRjaDsKLQotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5F
R0wxMDsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOwot
aW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xDb250ZXh0OwotaW1wb3J0
IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLm9wZW5nbGVzLkdMMTA7Ci0KLS8qKgotICogRWZm
aWNpZW50bHkgcmVuZGVycyBZVVYgZnJhbWVzIHVzaW5nIHRoZSBHUFUgZm9yIENTQy4KLSAqIENs
aWVudHMgd2lsbCB3YW50IGZpcnN0IHRvIGNhbGwgc2V0VmlldygpIHRvIHBhc3MgR0xTdXJmYWNl
VmlldwotICogYW5kIHRoZW4gZm9yIGVhY2ggdmlkZW8gc3RyZWFtIGVpdGhlciBjcmVhdGUgaW5z
dGFuY2Ugb2YgVmlkZW9SZW5kZXJlciB1c2luZwotICogY3JlYXRlR3VpKCkgY2FsbCBvciBWaWRl
b1JlbmRlcmVyLkNhbGxiYWNrcyBpbnRlcmZhY2UgdXNpbmcgY3JlYXRlKCkgY2FsbC4KLSAqIE9u
bHkgb25lIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBjYW4gYmUgY3JlYXRlZC4KLSAqLwotcHVibGlj
IGNsYXNzIFZpZGVvUmVuZGVyZXJHdWkgaW1wbGVtZW50cyBHTFN1cmZhY2VWaWV3LlJlbmRlcmVy
IHsKLSAgLy8gfGluc3RhbmNlfCwgfGluc3RhbmNlLnN1cmZhY2V8LCB8ZWdsQ29udGV4dHwsIGFu
ZCB8ZWdsQ29udGV4dFJlYWR5fCBhcmUgc3luY2hyb25pemVkIG9uCi0gIC8vIHxWaWRlb1JlbmRl
cmVyR3VpLmNsYXNzfC4KLSAgcHJpdmF0ZSBzdGF0aWMgVmlkZW9SZW5kZXJlckd1aSBpbnN0YW5j
ZSA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIFJ1bm5hYmxlIGVnbENvbnRleHRSZWFkeSA9IG51
bGw7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVmlkZW9SZW5kZXJlckd1
aSI7Ci0gIHByaXZhdGUgR0xTdXJmYWNlVmlldyBzdXJmYWNlOwotICBwcml2YXRlIHN0YXRpYyBF
Z2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCA9IG51bGw7Ci0gIC8vIEluZGljYXRlcyBpZiBTdXJm
YWNlVmlldy5SZW5kZXJlci5vblN1cmZhY2VDcmVhdGVkIHdhcyBjYWxsZWQuCi0gIC8vIElmIHRy
dWUgdGhlbiBmb3IgZXZlcnkgbmV3bHkgY3JlYXRlZCB5dXYgaW1hZ2UgcmVuZGVyZXIgY3JlYXRl
VGV4dHVyZSgpCi0gIC8vIHNob3VsZCBiZSBjYWxsZWQuIFRoZSB2YXJpYWJsZSBpcyBhY2Nlc3Nl
ZCBvbiBtdWx0aXBsZSB0aHJlYWRzIGFuZAotICAvLyBhbGwgYWNjZXNzZXMgYXJlIHN5bmNocm9u
aXplZCBvbiB5dXZJbWFnZVJlbmRlcmVycycgb2JqZWN0IGxvY2suCi0gIHByaXZhdGUgYm9vbGVh
biBvblN1cmZhY2VDcmVhdGVkQ2FsbGVkOwotICBwcml2YXRlIGludCBzY3JlZW5XaWR0aDsKLSAg
cHJpdmF0ZSBpbnQgc2NyZWVuSGVpZ2h0OwotICAvLyBMaXN0IG9mIHl1diByZW5kZXJlcnMuCi0g
IHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFl1dkltYWdlUmVuZGVyZXI+IHl1dkltYWdlUmVuZGVy
ZXJzOwotICAvLyBSZW5kZXIgYW5kIGRyYXcgdGhyZWFkcy4KLSAgcHJpdmF0ZSBzdGF0aWMgVGhy
ZWFkIHJlbmRlckZyYW1lVGhyZWFkOwotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgZHJhd1RocmVh
ZDsKLQotICBwcml2YXRlIFZpZGVvUmVuZGVyZXJHdWkoR0xTdXJmYWNlVmlldyBzdXJmYWNlKSB7
Ci0gICAgdGhpcy5zdXJmYWNlID0gc3VyZmFjZTsKLSAgICAvLyBDcmVhdGUgYW4gT3BlbkdMIEVT
IDIuMCBjb250ZXh0LgotICAgIHN1cmZhY2Uuc2V0UHJlc2VydmVFR0xDb250ZXh0T25QYXVzZSh0
cnVlKTsKLSAgICBzdXJmYWNlLnNldEVHTENvbnRleHRDbGllbnRWZXJzaW9uKDIpOwotICAgIHN1
cmZhY2Uuc2V0UmVuZGVyZXIodGhpcyk7Ci0gICAgc3VyZmFjZS5zZXRSZW5kZXJNb2RlKEdMU3Vy
ZmFjZVZpZXcuUkVOREVSTU9ERV9XSEVOX0RJUlRZKTsKLQotICAgIHl1dkltYWdlUmVuZGVyZXJz
ID0gbmV3IEFycmF5TGlzdDxZdXZJbWFnZVJlbmRlcmVyPigpOwotICB9Ci0KLSAgLyoqCi0gICAq
IENsYXNzIHVzZWQgdG8gZGlzcGxheSBzdHJlYW0gb2YgWVVWNDIwIGZyYW1lcyBhdCBwYXJ0aWN1
bGFyIGxvY2F0aW9uCi0gICAqIG9uIGEgc2NyZWVuLiBOZXcgdmlkZW8gZnJhbWVzIGFyZSBzZW50
IHRvIGRpc3BsYXkgdXNpbmcgcmVuZGVyRnJhbWUoKQotICAgKiBjYWxsLgotICAgKi8KLSAgcHJp
dmF0ZSBzdGF0aWMgY2xhc3MgWXV2SW1hZ2VSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVy
ZXIuQ2FsbGJhY2tzIHsKLSAgICAvLyB8c3VyZmFjZXwgaXMgc3luY2hyb25pemVkIG9uIHx0aGlz
fC4KLSAgICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgc3VyZmFjZTsKLSAgICBwcml2YXRlIGludCBp
ZDsKLSAgICAvLyBUT0RPKG1hZ2plZCk6IERlbGV0ZSBHTCByZXNvdXJjZXMgaW4gcmVsZWFzZSgp
LiBNdXN0IGJlIHN5bmNocm9uaXplZCB3aXRoIGRyYXcoKS4gV2UgYXJlCi0gICAgLy8gY3VycmVu
dGx5IGxlYWtpbmcgcmVzb3VyY2VzIHRvIGF2b2lkIGEgcmFyZSBjcmFzaCBpbiByZWxlYXNlKCkg
d2hlcmUgdGhlIEVHTENvbnRleHQgaGFzCi0gICAgLy8gYmVjb21lIGludmFsaWQgYmVmb3JlaGFu
ZC4KLSAgICBwcml2YXRlIGludFtdIHl1dlRleHR1cmVzID0gezAsIDAsIDB9OwotICAgIHByaXZh
dGUgZmluYWwgUmVuZGVyZXJDb21tb24uWXV2VXBsb2FkZXIgeXV2VXBsb2FkZXIgPSBuZXcgUmVu
ZGVyZXJDb21tb24uWXV2VXBsb2FkZXIoKTsKLSAgICBwcml2YXRlIGZpbmFsIFJlbmRlcmVyQ29t
bW9uLkdsRHJhd2VyIGRyYXdlcjsKLSAgICAvLyBSZXNvdXJjZXMgZm9yIG1ha2luZyBhIGRlZXAg
Y29weSBvZiBpbmNvbWluZyBPRVMgdGV4dHVyZSBmcmFtZS4KLSAgICBwcml2YXRlIEdsVGV4dHVy
ZUZyYW1lQnVmZmVyIHRleHR1cmVDb3B5OwotCi0gICAgLy8gUGVuZGluZyBmcmFtZSB0byByZW5k
ZXIuIFNlcnZlcyBhcyBhIHF1ZXVlIHdpdGggc2l6ZSAxLiB8cGVuZGluZ0ZyYW1lfCBpcyBhY2Nl
c3NlZCBieSB0d28KLSAgICAvLyB0aHJlYWRzIC0gZnJhbWVzIGFyZSByZWNlaXZlZCBpbiByZW5k
ZXJGcmFtZSgpIGFuZCBjb25zdW1lZCBpbiBkcmF3KCkuIEZyYW1lcyBhcmUgZHJvcHBlZCBpbgot
ICAgIC8vIHJlbmRlckZyYW1lKCkgaWYgdGhlIHByZXZpb3VzIGZyYW1lIGhhcyBub3QgYmVlbiBy
ZW5kZXJlZCB5ZXQuCi0gICAgcHJpdmF0ZSBJNDIwRnJhbWUgcGVuZGluZ0ZyYW1lOwotICAgIHBy
aXZhdGUgZmluYWwgT2JqZWN0IHBlbmRpbmdGcmFtZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAg
Ly8gVHlwZSBvZiB2aWRlbyBmcmFtZSB1c2VkIGZvciByZWNlbnQgZnJhbWUgcmVuZGVyaW5nLgot
ICAgIHByaXZhdGUgc3RhdGljIGVudW0gUmVuZGVyZXJUeXBlIHsgUkVOREVSRVJfWVVWLCBSRU5E
RVJFUl9URVhUVVJFIH0KLQotICAgIHByaXZhdGUgUmVuZGVyZXJUeXBlIHJlbmRlcmVyVHlwZTsK
LSAgICBwcml2YXRlIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlOwotICAg
IHByaXZhdGUgYm9vbGVhbiBtaXJyb3I7Ci0gICAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5SZW5k
ZXJlckV2ZW50cyByZW5kZXJlckV2ZW50czsKLSAgICAvLyBGbGFnIGlmIHJlbmRlckZyYW1lKCkg
d2FzIGV2ZXIgY2FsbGVkLgotICAgIGJvb2xlYW4gc2VlbkZyYW1lOwotICAgIC8vIFRvdGFsIG51
bWJlciBvZiB2aWRlbyBmcmFtZXMgcmVjZWl2ZWQgaW4gcmVuZGVyRnJhbWUoKSBjYWxsLgotICAg
IHByaXZhdGUgaW50IGZyYW1lc1JlY2VpdmVkOwotICAgIC8vIE51bWJlciBvZiB2aWRlbyBmcmFt
ZXMgZHJvcHBlZCBieSByZW5kZXJGcmFtZSgpIGJlY2F1c2UgcHJldmlvdXMKLSAgICAvLyBmcmFt
ZSBoYXMgbm90IGJlZW4gcmVuZGVyZWQgeWV0LgotICAgIHByaXZhdGUgaW50IGZyYW1lc0Ryb3Bw
ZWQ7Ci0gICAgLy8gTnVtYmVyIG9mIHJlbmRlcmVkIHZpZGVvIGZyYW1lcy4KLSAgICBwcml2YXRl
IGludCBmcmFtZXNSZW5kZXJlZDsKLSAgICAvLyBUaW1lIGluIG5zIHdoZW4gdGhlIGZpcnN0IHZp
ZGVvIGZyYW1lIHdhcyByZW5kZXJlZC4KLSAgICBwcml2YXRlIGxvbmcgc3RhcnRUaW1lTnMgPSAt
MTsKLSAgICAvLyBUaW1lIGluIG5zIHNwZW50IGluIGRyYXcoKSBmdW5jdGlvbi4KLSAgICBwcml2
YXRlIGxvbmcgZHJhd1RpbWVOczsKLSAgICAvLyBUaW1lIGluIG5zIHNwZW50IGluIGRyYXcoKSBj
b3B5aW5nIHJlc291cmNlcyBmcm9tIHxwZW5kaW5nRnJhbWV8IC0gaW5jbHVkaW5nIHVwbG9hZGlu
ZyBmcmFtZQotICAgIC8vIGRhdGEgdG8gcmVuZGVyaW5nIHBsYW5lcy4KLSAgICBwcml2YXRlIGxv
bmcgY29weVRpbWVOczsKLSAgICAvLyBUaGUgYWxsb3dlZCB2aWV3IGFyZWEgaW4gcGVyY2VudGFn
ZSBvZiBzY3JlZW4gc2l6ZS4KLSAgICBwcml2YXRlIGZpbmFsIFJlY3QgbGF5b3V0SW5QZXJjZW50
YWdlOwotICAgIC8vIFRoZSBhY3R1YWwgdmlldyBhcmVhIGluIHBpeGVscy4gSXQgaXMgYSBjZW50
ZXJlZCBzdWJyZWN0YW5nbGUgb2YgdGhlIHJlY3RhbmdsZSBkZWZpbmVkIGJ5Ci0gICAgLy8gfGxh
eW91dEluUGVyY2VudGFnZXwuCi0gICAgcHJpdmF0ZSBmaW5hbCBSZWN0IGRpc3BsYXlMYXlvdXQg
PSBuZXcgUmVjdCgpOwotICAgIC8vIENhY2hlZCBsYXlvdXQgdHJhbnNmb3JtYXRpb24gbWF0cml4
LCBjYWxjdWxhdGVkIGZyb20gY3VycmVudCBsYXlvdXQgcGFyYW1ldGVycy4KLSAgICBwcml2YXRl
IGZsb2F0W10gbGF5b3V0TWF0cml4OwotICAgIC8vIEZsYWcgaWYgbGF5b3V0IHRyYW5zZm9ybWF0
aW9uIG1hdHJpeCB1cGRhdGUgaXMgbmVlZGVkLgotICAgIHByaXZhdGUgYm9vbGVhbiB1cGRhdGVM
YXlvdXRQcm9wZXJ0aWVzOwotICAgIC8vIExheW91dCBwcm9wZXJ0aWVzIHVwZGF0ZSBsb2NrLiBH
dWFyZHMgfHVwZGF0ZUxheW91dFByb3BlcnRpZXN8LCB8c2NyZWVuV2lkdGh8LAotICAgIC8vIHxz
Y3JlZW5IZWlnaHR8LCB8dmlkZW9XaWR0aHwsIHx2aWRlb0hlaWdodHwsIHxyb3RhdGlvbkRlZ3Jl
ZXwsIHxzY2FsaW5nVHlwZXwsIGFuZCB8bWlycm9yfC4KLSAgICBwcml2YXRlIGZpbmFsIE9iamVj
dCB1cGRhdGVMYXlvdXRMb2NrID0gbmV3IE9iamVjdCgpOwotICAgIC8vIFRleHR1cmUgc2FtcGxp
bmcgbWF0cml4LgotICAgIHByaXZhdGUgZmxvYXRbXSByb3RhdGVkU2FtcGxpbmdNYXRyaXg7Ci0g
ICAgLy8gVmlld3BvcnQgZGltZW5zaW9ucy4KLSAgICBwcml2YXRlIGludCBzY3JlZW5XaWR0aDsK
LSAgICBwcml2YXRlIGludCBzY3JlZW5IZWlnaHQ7Ci0gICAgLy8gVmlkZW8gZGltZW5zaW9uLgot
ICAgIHByaXZhdGUgaW50IHZpZGVvV2lkdGg7Ci0gICAgcHJpdmF0ZSBpbnQgdmlkZW9IZWlnaHQ7
Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBkZWdyZWUgdGhhdCB0aGUgZnJhbWUgc2hvdWxkIGJlIHJv
dGF0ZWQgY2xvY2t3aXNlbHkgdG8gaGF2ZQotICAgIC8vIGl0IHJlbmRlcmVkIHVwIHJpZ2h0Lgot
ICAgIHByaXZhdGUgaW50IHJvdGF0aW9uRGVncmVlOwotCi0gICAgcHJpdmF0ZSBZdXZJbWFnZVJl
bmRlcmVyKEdMU3VyZmFjZVZpZXcgc3VyZmFjZSwgaW50IGlkLCBpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2Nh
bGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yLCBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXIp
IHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJZdXZJbWFnZVJlbmRlcmVyLkNyZWF0ZSBpZDogIiAr
IGlkKTsKLSAgICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICB0aGlzLmlkID0gaWQ7
Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBlID0gc2NhbGluZ1R5cGU7Ci0gICAgICB0aGlzLm1pcnJv
ciA9IG1pcnJvcjsKLSAgICAgIHRoaXMuZHJhd2VyID0gZHJhd2VyOwotICAgICAgbGF5b3V0SW5Q
ZXJjZW50YWdlID0gbmV3IFJlY3QoeCwgeSwgTWF0aC5taW4oMTAwLCB4ICsgd2lkdGgpLCBNYXRo
Lm1pbigxMDAsIHkgKyBoZWlnaHQpKTsKLSAgICAgIHVwZGF0ZUxheW91dFByb3BlcnRpZXMgPSBm
YWxzZTsKLSAgICAgIHJvdGF0aW9uRGVncmVlID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3lu
Y2hyb25pemVkIHZvaWQgcmVzZXQoKSB7Ci0gICAgICBzZWVuRnJhbWUgPSBmYWxzZTsKLSAgICB9
Ci0KLSAgICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBzdXJm
YWNlID0gbnVsbDsKLSAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KHBlbmRpbmdGcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHBlbmRpbmdGcmFtZSAhPSBudWxsKSB7
Ci0gICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUocGVuZGluZ0ZyYW1lKTsK
LSAgICAgICAgICBwZW5kaW5nRnJhbWUgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVRleHR1cmVzKCkgewotICAgICAgTG9nZ2luZy5k
KFRBRywgIiAgWXV2SW1hZ2VSZW5kZXJlci5jcmVhdGVUZXh0dXJlcyAiICsgaWQgKyAiIG9uIEdM
IHRocmVhZDoiCi0gICAgICAgICAgICAgICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgp
KTsKLQotICAgICAgLy8gR2VuZXJhdGUgMyB0ZXh0dXJlIGlkcyBmb3IgWS9VL1YgYW5kIHBsYWNl
IHRoZW0gaW50byB8eXV2VGV4dHVyZXN8LgotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBp
KyspIHsKLSAgICAgICAgeXV2VGV4dHVyZXNbaV0gPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICAgIH0KLSAgICAgIC8vIEdlbmVyYXRlIHRleHR1cmUg
YW5kIGZyYW1lYnVmZmVyIGZvciBvZmZzY3JlZW4gdGV4dHVyZSBjb3B5LgotICAgICAgdGV4dHVy
ZUNvcHkgPSBuZXcgR2xUZXh0dXJlRnJhbWVCdWZmZXIoR0xFUzIwLkdMX1JHQik7Ci0gICAgfQot
Ci0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxheW91dE1hdHJpeCgpIHsKLSAgICAgIHN5bmNocm9u
aXplZCAodXBkYXRlTGF5b3V0TG9jaykgewotICAgICAgICBpZiAoIXVwZGF0ZUxheW91dFByb3Bl
cnRpZXMpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5pdGlh
bGl6ZSB0byBtYXhpbXVtIGFsbG93ZWQgYXJlYS4gUm91bmQgdG8gaW50ZWdlciBjb29yZGluYXRl
cyBpbndhcmRzIHRoZSBsYXlvdXQKLSAgICAgICAgLy8gYm91bmRpbmcgYm94IChjZWlsIGxlZnQv
dG9wIGFuZCBmbG9vciByaWdodC9ib3R0b20pIHRvIG5vdCBicmVhayBjb25zdHJhaW50cy4KLSAg
ICAgICAgZGlzcGxheUxheW91dC5zZXQoKHNjcmVlbldpZHRoICogbGF5b3V0SW5QZXJjZW50YWdl
LmxlZnQgKyA5OSkgLyAxMDAsCi0gICAgICAgICAgICAoc2NyZWVuSGVpZ2h0ICogbGF5b3V0SW5Q
ZXJjZW50YWdlLnRvcCArIDk5KSAvIDEwMCwKLSAgICAgICAgICAgIChzY3JlZW5XaWR0aCAqIGxh
eW91dEluUGVyY2VudGFnZS5yaWdodCkgLyAxMDAsCi0gICAgICAgICAgICAoc2NyZWVuSGVpZ2h0
ICogbGF5b3V0SW5QZXJjZW50YWdlLmJvdHRvbSkgLyAxMDApOwotICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiSUQ6ICIgKyBpZCArICIuIEFkanVzdFRleHR1cmVDb29yZHMuIEFsbG93ZWQgZGlzcGxh
eSBzaXplOiAiCi0gICAgICAgICAgICAgICAgKyBkaXNwbGF5TGF5b3V0LndpZHRoKCkgKyAiIHgg
IiArIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkgKyAiLiBWaWRlbzogIiArIHZpZGVvV2lkdGgKLSAg
ICAgICAgICAgICAgICArICIgeCAiICsgdmlkZW9IZWlnaHQgKyAiLiBSb3RhdGlvbjogIiArIHJv
dGF0aW9uRGVncmVlICsgIi4gTWlycm9yOiAiICsgbWlycm9yKTsKLSAgICAgICAgZmluYWwgZmxv
YXQgdmlkZW9Bc3BlY3RSYXRpbyA9IChyb3RhdGlvbkRlZ3JlZSAlIDE4MCA9PSAwKQotICAgICAg
ICAgICAgPyAoZmxvYXQpIHZpZGVvV2lkdGggLyB2aWRlb0hlaWdodAotICAgICAgICAgICAgOiAo
ZmxvYXQpIHZpZGVvSGVpZ2h0IC8gdmlkZW9XaWR0aDsKLSAgICAgICAgLy8gQWRqdXN0IGRpc3Bs
YXkgc2l6ZSBiYXNlZCBvbiB8c2NhbGluZ1R5cGV8LgotICAgICAgICBmaW5hbCBQb2ludCBkaXNw
bGF5U2l6ZSA9IFJlbmRlcmVyQ29tbW9uLmdldERpc3BsYXlTaXplKAotICAgICAgICAgICAgc2Nh
bGluZ1R5cGUsIHZpZGVvQXNwZWN0UmF0aW8sIGRpc3BsYXlMYXlvdXQud2lkdGgoKSwgZGlzcGxh
eUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICAgIGRpc3BsYXlMYXlvdXQuaW5zZXQoKGRpc3BsYXlM
YXlvdXQud2lkdGgoKSAtIGRpc3BsYXlTaXplLngpIC8gMiwKLSAgICAgICAgICAgIChkaXNwbGF5
TGF5b3V0LmhlaWdodCgpIC0gZGlzcGxheVNpemUueSkgLyAyKTsKLSAgICAgICAgTG9nZ2luZy5k
KFRBRywKLSAgICAgICAgICAgICIgIEFkanVzdGVkIGRpc3BsYXkgc2l6ZTogIiArIGRpc3BsYXlM
YXlvdXQud2lkdGgoKSArICIgeCAiICsgZGlzcGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICAg
IGxheW91dE1hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLmdldExheW91dE1hdHJpeCgKLSAgICAgICAg
ICAgIG1pcnJvciwgdmlkZW9Bc3BlY3RSYXRpbywgKGZsb2F0KSBkaXNwbGF5TGF5b3V0LndpZHRo
KCkgLyBkaXNwbGF5TGF5b3V0LmhlaWdodCgpKTsKLSAgICAgICAgdXBkYXRlTGF5b3V0UHJvcGVy
dGllcyA9IGZhbHNlOwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiICBBZGp1c3RUZXh0dXJlQ29v
cmRzIGRvbmUiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgZHJhdygpIHsK
LSAgICAgIGlmICghc2VlbkZyYW1lKSB7Ci0gICAgICAgIC8vIE5vIGZyYW1lIHJlY2VpdmVkIHll
dCAtIG5vdGhpbmcgdG8gcmVuZGVyLgotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBs
b25nIG5vdyA9IFN5c3RlbS5uYW5vVGltZSgpOwotCi0gICAgICBmaW5hbCBib29sZWFuIGlzTmV3
RnJhbWU7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdGcmFtZUxvY2spIHsKLSAgICAgICAg
aXNOZXdGcmFtZSA9IChwZW5kaW5nRnJhbWUgIT0gbnVsbCk7Ci0gICAgICAgIGlmIChpc05ld0Zy
YW1lICYmIHN0YXJ0VGltZU5zID09IC0xKSB7Ci0gICAgICAgICAgc3RhcnRUaW1lTnMgPSBub3c7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNOZXdGcmFtZSkgewotICAgICAgICAgIHJvdGF0
ZWRTYW1wbGluZ01hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLnJvdGF0ZVRleHR1cmVNYXRyaXgoCi0g
ICAgICAgICAgICAgIHBlbmRpbmdGcmFtZS5zYW1wbGluZ01hdHJpeCwgcGVuZGluZ0ZyYW1lLnJv
dGF0aW9uRGVncmVlKTsKLSAgICAgICAgICBpZiAocGVuZGluZ0ZyYW1lLnl1dkZyYW1lKSB7Ci0g
ICAgICAgICAgICByZW5kZXJlclR5cGUgPSBSZW5kZXJlclR5cGUuUkVOREVSRVJfWVVWOwotICAg
ICAgICAgICAgeXV2VXBsb2FkZXIudXBsb2FkWXV2RGF0YSh5dXZUZXh0dXJlcywgcGVuZGluZ0Zy
YW1lLndpZHRoLCBwZW5kaW5nRnJhbWUuaGVpZ2h0LAotICAgICAgICAgICAgICAgIHBlbmRpbmdG
cmFtZS55dXZTdHJpZGVzLCBwZW5kaW5nRnJhbWUueXV2UGxhbmVzKTsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcmVuZGVyZXJUeXBlID0gUmVuZGVyZXJUeXBlLlJFTkRFUkVSX1RF
WFRVUkU7Ci0gICAgICAgICAgICAvLyBFeHRlcm5hbCB0ZXh0dXJlIHJlbmRlcmluZy4gTWFrZSBh
IGRlZXAgY29weSBvZiB0aGUgZXh0ZXJuYWwgdGV4dHVyZS4KLSAgICAgICAgICAgIC8vIFJlYWxs
b2NhdGUgb2Zmc2NyZWVuIHRleHR1cmUgaWYgbmVjZXNzYXJ5LgotICAgICAgICAgICAgdGV4dHVy
ZUNvcHkuc2V0U2l6ZShwZW5kaW5nRnJhbWUucm90YXRlZFdpZHRoKCksIHBlbmRpbmdGcmFtZS5y
b3RhdGVkSGVpZ2h0KCkpOwotCi0gICAgICAgICAgICAvLyBCaW5kIG91ciBvZmZzY3JlZW4gZnJh
bWVidWZmZXIuCi0gICAgICAgICAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdM
X0ZSQU1FQlVGRkVSLCB0ZXh0dXJlQ29weS5nZXRGcmFtZUJ1ZmZlcklkKCkpOwotICAgICAgICAg
ICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbEJpbmRGcmFtZWJ1ZmZlciIpOwotCi0gICAg
ICAgICAgICAvLyBDb3B5IHRoZSBPRVMgdGV4dHVyZSBjb250ZW50LiBUaGlzIHdpbGwgYWxzbyBu
b3JtYWxpemUgdGhlIHNhbXBsaW5nIG1hdHJpeC4KLSAgICAgICAgICAgIGRyYXdlci5kcmF3T2Vz
KHBlbmRpbmdGcmFtZS50ZXh0dXJlSWQsIHJvdGF0ZWRTYW1wbGluZ01hdHJpeCwgdGV4dHVyZUNv
cHkuZ2V0V2lkdGgoKSwKLSAgICAgICAgICAgICAgICB0ZXh0dXJlQ29weS5nZXRIZWlnaHQoKSwg
MCwgMCwgdGV4dHVyZUNvcHkuZ2V0V2lkdGgoKSwgdGV4dHVyZUNvcHkuZ2V0SGVpZ2h0KCkpOwot
ICAgICAgICAgICAgcm90YXRlZFNhbXBsaW5nTWF0cml4ID0gUmVuZGVyZXJDb21tb24uaWRlbnRp
dHlNYXRyaXgoKTsKLQotICAgICAgICAgICAgLy8gUmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIu
Ci0gICAgICAgICAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVG
RkVSLCAwKTsKLSAgICAgICAgICAgIEdMRVMyMC5nbEZpbmlzaCgpOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBjb3B5VGltZU5zICs9IChTeXN0ZW0ubmFub1RpbWUoKSAtIG5vdyk7Ci0gICAgICAg
ICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUocGVuZGluZ0ZyYW1lKTsKLSAgICAgICAg
ICBwZW5kaW5nRnJhbWUgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHVwZGF0
ZUxheW91dE1hdHJpeCgpOwotICAgICAgZmluYWwgZmxvYXRbXSB0ZXhNYXRyaXggPQotICAgICAg
ICAgIFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXMocm90YXRlZFNhbXBsaW5nTWF0cml4
LCBsYXlvdXRNYXRyaXgpOwotICAgICAgLy8gT3BlbkdMIGRlZmF1bHRzIHRvIGxvd2VyIGxlZnQg
b3JpZ2luIC0gZmxpcCB2aWV3cG9ydCBwb3NpdGlvbiB2ZXJ0aWNhbGx5LgotICAgICAgZmluYWwg
aW50IHZpZXdwb3J0WSA9IHNjcmVlbkhlaWdodCAtIGRpc3BsYXlMYXlvdXQuYm90dG9tOwotICAg
ICAgaWYgKHJlbmRlcmVyVHlwZSA9PSBSZW5kZXJlclR5cGUuUkVOREVSRVJfWVVWKSB7Ci0gICAg
ICAgIGRyYXdlci5kcmF3WXV2KHl1dlRleHR1cmVzLCB0ZXhNYXRyaXgsIHZpZGVvV2lkdGgsIHZp
ZGVvSGVpZ2h0LCBkaXNwbGF5TGF5b3V0LmxlZnQsCi0gICAgICAgICAgICB2aWV3cG9ydFksIGRp
c3BsYXlMYXlvdXQud2lkdGgoKSwgZGlzcGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBkcmF3ZXIuZHJhd1JnYih0ZXh0dXJlQ29weS5nZXRUZXh0dXJlSWQoKSwg
dGV4TWF0cml4LCB2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwKLSAgICAgICAgICAgIGRpc3BsYXlM
YXlvdXQubGVmdCwgdmlld3BvcnRZLCBkaXNwbGF5TGF5b3V0LndpZHRoKCksIGRpc3BsYXlMYXlv
dXQuaGVpZ2h0KCkpOwotICAgICAgfQotCi0gICAgICBpZiAoaXNOZXdGcmFtZSkgewotICAgICAg
ICBmcmFtZXNSZW5kZXJlZCsrOwotICAgICAgICBkcmF3VGltZU5zICs9IChTeXN0ZW0ubmFub1Rp
bWUoKSAtIG5vdyk7Ci0gICAgICAgIGlmICgoZnJhbWVzUmVuZGVyZWQgJSAzMDApID09IDApIHsK
LSAgICAgICAgICBsb2dTdGF0aXN0aWNzKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBwcml2YXRlIHZvaWQgbG9nU3RhdGlzdGljcygpIHsKLSAgICAgIGxvbmcgdGltZVNpbmNl
Rmlyc3RGcmFtZU5zID0gU3lzdGVtLm5hbm9UaW1lKCkgLSBzdGFydFRpbWVOczsKLSAgICAgIExv
Z2dpbmcuZChUQUcsICJJRDogIiArIGlkICsgIi4gVHlwZTogIiArIHJlbmRlcmVyVHlwZSArICIu
IEZyYW1lcyByZWNlaXZlZDogIgotICAgICAgICAgICAgICArIGZyYW1lc1JlY2VpdmVkICsgIi4g
RHJvcHBlZDogIiArIGZyYW1lc0Ryb3BwZWQgKyAiLiBSZW5kZXJlZDogIiArIGZyYW1lc1JlbmRl
cmVkKTsKLSAgICAgIGlmIChmcmFtZXNSZWNlaXZlZCA+IDAgJiYgZnJhbWVzUmVuZGVyZWQgPiAw
KSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJEdXJhdGlvbjogIiArIChpbnQpICh0aW1lU2lu
Y2VGaXJzdEZyYW1lTnMgLyAxZTYpICsgIiBtcy4gRlBTOiAiCi0gICAgICAgICAgICAgICAgKyBm
cmFtZXNSZW5kZXJlZCAqIDFlOSAvIHRpbWVTaW5jZUZpcnN0RnJhbWVOcyk7Ci0gICAgICAgIExv
Z2dpbmcuZChUQUcsICJEcmF3IHRpbWU6ICIgKyAoaW50KSAoZHJhd1RpbWVOcyAvICgxMDAwICog
ZnJhbWVzUmVuZGVyZWQpKQotICAgICAgICAgICAgICAgICsgIiB1cy4gQ29weSB0aW1lOiAiICsg
KGludCkgKGNvcHlUaW1lTnMgLyAoMTAwMCAqIGZyYW1lc1JlY2VpdmVkKSkgKyAiIHVzIik7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0U2NyZWVuU2l6ZShmaW5hbCBpbnQg
c2NyZWVuV2lkdGgsIGZpbmFsIGludCBzY3JlZW5IZWlnaHQpIHsKLSAgICAgIHN5bmNocm9uaXpl
ZCAodXBkYXRlTGF5b3V0TG9jaykgewotICAgICAgICBpZiAoc2NyZWVuV2lkdGggPT0gdGhpcy5z
Y3JlZW5XaWR0aCAmJiBzY3JlZW5IZWlnaHQgPT0gdGhpcy5zY3JlZW5IZWlnaHQpIHsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsg
aWQgKyAiLiBZdXZJbWFnZVJlbmRlcmVyLnNldFNjcmVlblNpemU6ICIgKyBzY3JlZW5XaWR0aCAr
ICIgeCAiCi0gICAgICAgICAgICAgICAgKyBzY3JlZW5IZWlnaHQpOwotICAgICAgICB0aGlzLnNj
cmVlbldpZHRoID0gc2NyZWVuV2lkdGg7Ci0gICAgICAgIHRoaXMuc2NyZWVuSGVpZ2h0ID0gc2Ny
ZWVuSGVpZ2h0OwotICAgICAgICB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRQb3NpdGlvbihpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUg
c2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yKSB7Ci0gICAgICBmaW5hbCBSZWN0IGxheW91dElu
UGVyY2VudGFnZSA9Ci0gICAgICAgICAgbmV3IFJlY3QoeCwgeSwgTWF0aC5taW4oMTAwLCB4ICsg
d2lkdGgpLCBNYXRoLm1pbigxMDAsIHkgKyBoZWlnaHQpKTsKLSAgICAgIHN5bmNocm9uaXplZCAo
dXBkYXRlTGF5b3V0TG9jaykgewotICAgICAgICBpZiAobGF5b3V0SW5QZXJjZW50YWdlLmVxdWFs
cyh0aGlzLmxheW91dEluUGVyY2VudGFnZSkgJiYgc2NhbGluZ1R5cGUgPT0gdGhpcy5zY2FsaW5n
VHlwZQotICAgICAgICAgICAgJiYgbWlycm9yID09IHRoaXMubWlycm9yKSB7Ci0gICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsg
Ii4gWXV2SW1hZ2VSZW5kZXJlci5zZXRQb3NpdGlvbjogKCIgKyB4ICsgIiwgIiArIHkgKyAiKSAi
Ci0gICAgICAgICAgICAgICAgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0ICsgIi4gU2NhbGluZzog
IiArIHNjYWxpbmdUeXBlICsgIi4gTWlycm9yOiAiICsgbWlycm9yKTsKLSAgICAgICAgdGhpcy5s
YXlvdXRJblBlcmNlbnRhZ2Uuc2V0KGxheW91dEluUGVyY2VudGFnZSk7Ci0gICAgICAgIHRoaXMu
c2NhbGluZ1R5cGUgPSBzY2FsaW5nVHlwZTsKLSAgICAgICAgdGhpcy5taXJyb3IgPSBtaXJyb3I7
Ci0gICAgICAgIHVwZGF0ZUxheW91dFByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgfQotICAgIH0K
LQotICAgIHByaXZhdGUgdm9pZCBzZXRTaXplKGZpbmFsIGludCB2aWRlb1dpZHRoLCBmaW5hbCBp
bnQgdmlkZW9IZWlnaHQsIGZpbmFsIGludCByb3RhdGlvbikgewotICAgICAgaWYgKHZpZGVvV2lk
dGggPT0gdGhpcy52aWRlb1dpZHRoICYmIHZpZGVvSGVpZ2h0ID09IHRoaXMudmlkZW9IZWlnaHQK
LSAgICAgICAgICAmJiByb3RhdGlvbiA9PSByb3RhdGlvbkRlZ3JlZSkgewotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgICBpZiAocmVuZGVyZXJFdmVudHMgIT0gbnVsbCkgewotICAgICAg
ICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCArICIuIFJlcG9ydGluZyBmcmFtZSByZXNvbHV0
aW9uIGNoYW5nZWQgdG8gIiArIHZpZGVvV2lkdGggKyAiIHggIgotICAgICAgICAgICAgICAgICsg
dmlkZW9IZWlnaHQpOwotICAgICAgICByZW5kZXJlckV2ZW50cy5vbkZyYW1lUmVzb2x1dGlvbkNo
YW5nZWQodmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIHJvdGF0aW9uKTsKLSAgICAgIH0KLQotICAg
ICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlvdXRMb2NrKSB7Ci0gICAgICAgIExvZ2dpbmcuZChU
QUcsICJJRDogIiArIGlkICsgIi4gWXV2SW1hZ2VSZW5kZXJlci5zZXRTaXplOiAiICsgdmlkZW9X
aWR0aCArICIgeCAiCi0gICAgICAgICAgICAgICAgKyB2aWRlb0hlaWdodCArICIgcm90YXRpb24g
IiArIHJvdGF0aW9uKTsKLQotICAgICAgICB0aGlzLnZpZGVvV2lkdGggPSB2aWRlb1dpZHRoOwot
ICAgICAgICB0aGlzLnZpZGVvSGVpZ2h0ID0gdmlkZW9IZWlnaHQ7Ci0gICAgICAgIHJvdGF0aW9u
RGVncmVlID0gcm90YXRpb247Ci0gICAgICAgIHVwZGF0ZUxheW91dFByb3BlcnRpZXMgPSB0cnVl
OwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiICBZdXZJbWFnZVJlbmRlcmVyLnNldFNpemUgZG9u
ZS4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hy
b25pemVkIHZvaWQgcmVuZGVyRnJhbWUoSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgICBpZiAoc3Vy
ZmFjZSA9PSBudWxsKSB7Ci0gICAgICAgIC8vIFRoaXMgb2JqZWN0IGhhcyBiZWVuIHJlbGVhc2Vk
LgotICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChyZW5kZXJGcmFtZVRocmVhZCA9PSBudWxsKSB7
Ci0gICAgICAgIHJlbmRlckZyYW1lVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAg
ICAgIH0KLSAgICAgIGlmICghc2VlbkZyYW1lICYmIHJlbmRlcmVyRXZlbnRzICE9IG51bGwpIHsK
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBSZXBvcnRpbmcgZmlyc3Qg
cmVuZGVyZWQgZnJhbWUuIik7Ci0gICAgICAgIHJlbmRlcmVyRXZlbnRzLm9uRmlyc3RGcmFtZVJl
bmRlcmVkKCk7Ci0gICAgICB9Ci0gICAgICBmcmFtZXNSZWNlaXZlZCsrOwotICAgICAgc3luY2hy
b25pemVkIChwZW5kaW5nRnJhbWVMb2NrKSB7Ci0gICAgICAgIC8vIENoZWNrIGlucHV0IGZyYW1l
IHBhcmFtZXRlcnMuCi0gICAgICAgIGlmIChmcmFtZS55dXZGcmFtZSkgewotICAgICAgICAgIGlm
IChmcmFtZS55dXZTdHJpZGVzWzBdIDwgZnJhbWUud2lkdGggfHwgZnJhbWUueXV2U3RyaWRlc1sx
XSA8IGZyYW1lLndpZHRoIC8gMgotICAgICAgICAgICAgICB8fCBmcmFtZS55dXZTdHJpZGVzWzJd
IDwgZnJhbWUud2lkdGggLyAyKSB7Ci0gICAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW5jb3Jy
ZWN0IHN0cmlkZXMgIiArIGZyYW1lLnl1dlN0cmlkZXNbMF0gKyAiLCAiICsgZnJhbWUueXV2U3Ry
aWRlc1sxXQotICAgICAgICAgICAgICAgICAgICArICIsICIgKyBmcmFtZS55dXZTdHJpZGVzWzJd
KTsKLSAgICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
cGVuZGluZ0ZyYW1lICE9IG51bGwpIHsKLSAgICAgICAgICAvLyBTa2lwIHJlbmRlcmluZyBvZiB0
aGlzIGZyYW1lIGlmIHByZXZpb3VzIGZyYW1lIHdhcyBub3QgcmVuZGVyZWQgeWV0LgotICAgICAg
ICAgIGZyYW1lc0Ryb3BwZWQrKzsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1l
RG9uZShmcmFtZSk7Ci0gICAgICAgICAgc2VlbkZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgcGVuZGluZ0ZyYW1lID0gZnJhbWU7Ci0gICAgICB9Ci0g
ICAgICBzZXRTaXplKGZyYW1lLndpZHRoLCBmcmFtZS5oZWlnaHQsIGZyYW1lLnJvdGF0aW9uRGVn
cmVlKTsKLSAgICAgIHNlZW5GcmFtZSA9IHRydWU7Ci0KLSAgICAgIC8vIFJlcXVlc3QgcmVuZGVy
aW5nLgotICAgICAgc3VyZmFjZS5yZXF1ZXN0UmVuZGVyKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoq
IFBhc3NlcyBHTFN1cmZhY2VWaWV3IHRvIHZpZGVvIHJlbmRlcmVyLiAqLwotICBwdWJsaWMgc3Rh
dGljIHN5bmNocm9uaXplZCB2b2lkIHNldFZpZXcoR0xTdXJmYWNlVmlldyBzdXJmYWNlLCBSdW5u
YWJsZSBlZ2xDb250ZXh0UmVhZHlDYWxsYmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRl
b1JlbmRlcmVyR3VpLnNldFZpZXciKTsKLSAgICBpbnN0YW5jZSA9IG5ldyBWaWRlb1JlbmRlcmVy
R3VpKHN1cmZhY2UpOwotICAgIGVnbENvbnRleHRSZWFkeSA9IGVnbENvbnRleHRSZWFkeUNhbGxi
YWNrOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgRWdsQmFzZS5Db250ZXh0
IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAgIHJldHVybiBlZ2xDb250ZXh0OwotICB9Ci0KLSAg
LyoqIFJlbGVhc2VzIEdMU3VyZmFjZVZpZXcgdmlkZW8gcmVuZGVyZXIuICovCi0gIHB1YmxpYyBz
dGF0aWMgc3luY2hyb25pemVkIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0g
bnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9S
ZW5kZXJlckd1aS5kaXNwb3NlIik7Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFn
ZVJlbmRlcmVycykgewotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVy
ZXIgOiBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICB5dXZJbWFnZVJlbmRl
cmVyLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICAgIGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJz
LmNsZWFyKCk7Ci0gICAgfQotICAgIHJlbmRlckZyYW1lVGhyZWFkID0gbnVsbDsKLSAgICBkcmF3
VGhyZWFkID0gbnVsbDsKLSAgICBpbnN0YW5jZS5zdXJmYWNlID0gbnVsbDsKLSAgICBlZ2xDb250
ZXh0ID0gbnVsbDsKLSAgICBlZ2xDb250ZXh0UmVhZHkgPSBudWxsOwotICAgIGluc3RhbmNlID0g
bnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIFZpZGVvUmVuZGVyZXIgd2l0aCB0b3Ag
bGVmdCBjb3JuZXIgYXQgKHgsIHkpIGFuZCByZXNvbHV0aW9uCi0gICAqICh3aWR0aCwgaGVpZ2h0
KS4gQWxsIHBhcmFtZXRlcnMgYXJlIGluIHBlcmNlbnRhZ2Ugb2Ygc2NyZWVuIHJlc29sdXRpb24u
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFZpZGVvUmVuZGVyZXIgY3JlYXRlR3VpKGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGlu
Z1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBZdXZJbWFnZVJlbmRlcmVyIGphdmFHdWlSZW5kZXJlciA9IGNyZWF0ZSh4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWlycm9yKTsKLSAgICByZXR1cm4gbmV3IFZpZGVvUmVuZGVy
ZXIoamF2YUd1aVJlbmRlcmVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgVmlkZW9SZW5kZXJl
ci5DYWxsYmFja3MgY3JlYXRlR3VpUmVuZGVyZXIoCi0gICAgICBpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUs
IGJvb2xlYW4gbWlycm9yKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBzY2FsaW5nVHlwZSwgbWlycm9yKTsKLSAgfQotCi0gIC8qKgotICAgKiBDcmVhdGVzIFZpZGVv
UmVuZGVyZXIuQ2FsbGJhY2tzIHdpdGggdG9wIGxlZnQgY29ybmVyIGF0ICh4LCB5KSBhbmQKLSAg
ICogcmVzb2x1dGlvbiAod2lkdGgsIGhlaWdodCkuIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbiBwZXJj
ZW50YWdlIG9mCi0gICAqIHNjcmVlbiByZXNvbHV0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBzeW5jaHJvbml6ZWQgWXV2SW1hZ2VSZW5kZXJlciBjcmVhdGUoCi0gICAgICBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2Nh
bGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZSh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWlycm9yLCBuZXcgR2xSZWN0RHJhd2VyKCkpOwotICB9
Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3Mgd2l0aCB0b3Ag
bGVmdCBjb3JuZXIgYXQgKHgsIHkpIGFuZCByZXNvbHV0aW9uICh3aWR0aCwgaGVpZ2h0KS4KLSAg
ICogQWxsIHBhcmFtZXRlcnMgYXJlIGluIHBlcmNlbnRhZ2Ugb2Ygc2NyZWVuIHJlc29sdXRpb24u
IFRoZSBjdXN0b20gfGRyYXdlcnwgd2lsbCBiZSB1c2VkIGZvcgotICAgKiBkcmF3aW5nIGZyYW1l
cyBvbiB0aGUgRUdMU3VyZmFjZS4gVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGlu
ZyByZWxlYXNlKCkgb24gfGRyYXdlcnwuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9u
aXplZCBZdXZJbWFnZVJlbmRlcmVyIGNyZWF0ZShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwKLSAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBi
b29sZWFuIG1pcnJvciwgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyKSB7Ci0gICAgLy8g
Q2hlY2sgZGlzcGxheSByZWdpb24gcGFyYW1ldGVycy4KLSAgICBpZiAoeCA8IDAgfHwgeCA+IDEw
MCB8fCB5IDwgMCB8fCB5ID4gMTAwIHx8IHdpZHRoIDwgMCB8fCB3aWR0aCA+IDEwMCB8fCBoZWln
aHQgPCAwCi0gICAgICAgIHx8IGhlaWdodCA+IDEwMCB8fCB4ICsgd2lkdGggPiAxMDAgfHwgeSAr
IGhlaWdodCA+IDEwMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29y
cmVjdCB3aW5kb3cgcGFyYW1ldGVycy4iKTsKLSAgICB9Ci0KLSAgICBpZiAoaW5zdGFuY2UgPT0g
bnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkF0dGVtcHQgdG8gY3Jl
YXRlIHl1diByZW5kZXJlciBiZWZvcmUgc2V0dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQot
ICAgIGZpbmFsIFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA9IG5ldyBZdXZJbWFn
ZVJlbmRlcmVyKGluc3RhbmNlLnN1cmZhY2UsCi0gICAgICAgIGluc3RhbmNlLnl1dkltYWdlUmVu
ZGVyZXJzLnNpemUoKSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvciwg
ZHJhd2VyKTsKLSAgICBzeW5jaHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7
Ci0gICAgICBpZiAoaW5zdGFuY2Uub25TdXJmYWNlQ3JlYXRlZENhbGxlZCkgewotICAgICAgICAv
LyBvblN1cmZhY2VDcmVhdGVkIGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBWaWRlb1JlbmRl
cmVyR3VpIC0KLSAgICAgICAgLy8gbmVlZCB0byBjcmVhdGUgdGV4dHVyZSBmb3IgbmV3IGltYWdl
IGFuZCBhZGQgaW1hZ2UgdG8gdGhlCi0gICAgICAgIC8vIHJlbmRlcmluZyBsaXN0LgotICAgICAg
ICBmaW5hbCBDb3VudERvd25MYXRjaCBjb3VudERvd25MYXRjaCA9IG5ldyBDb3VudERvd25MYXRj
aCgxKTsKLSAgICAgICAgaW5zdGFuY2Uuc3VyZmFjZS5xdWV1ZUV2ZW50KG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLmNyZWF0ZVRleHR1cmVzKCk7Ci0gICAgICAgICAg
ICB5dXZJbWFnZVJlbmRlcmVyLnNldFNjcmVlblNpemUoaW5zdGFuY2Uuc2NyZWVuV2lkdGgsIGlu
c3RhbmNlLnNjcmVlbkhlaWdodCk7Ci0gICAgICAgICAgICBjb3VudERvd25MYXRjaC5jb3VudERv
d24oKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICAvLyBXYWl0IGZvciB0YXNr
IGNvbXBsZXRpb24uCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgY291bnREb3duTGF0Y2guYXdh
aXQoKTsKLSAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgICAvLyBBZGQgeXV2IHJlbmRlcmVyIHRvIHJlbmRlcmluZyBsaXN0LgotICAgICAgaW5zdGFu
Y2UueXV2SW1hZ2VSZW5kZXJlcnMuYWRkKHl1dkltYWdlUmVuZGVyZXIpOwotICAgIH0KLSAgICBy
ZXR1cm4geXV2SW1hZ2VSZW5kZXJlcjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25p
emVkIHZvaWQgdXBkYXRlKFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbmRlcmVyLCBpbnQgeCwg
aW50IHksIGludCB3aWR0aCwKLSAgICAgIGludCBoZWlnaHQsIFJlbmRlcmVyQ29tbW9uLlNjYWxp
bmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgewotICAgIExvZ2dpbmcuZChUQUcs
ICJWaWRlb1JlbmRlcmVyR3VpLnVwZGF0ZSIpOwotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQXR0ZW1wdCB0byB1cGRhdGUgeXV2
IHJlbmRlcmVyIGJlZm9yZSBzZXR0aW5nIEdMU3VyZmFjZVZpZXciKTsKLSAgICB9Ci0gICAgc3lu
Y2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgZm9yIChZdXZJ
bWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVy
cykgewotICAgICAgICBpZiAoeXV2SW1hZ2VSZW5kZXJlciA9PSByZW5kZXJlcikgewotICAgICAg
ICAgIHl1dkltYWdlUmVuZGVyZXIuc2V0UG9zaXRpb24oeCwgeSwgd2lkdGgsIGhlaWdodCwgc2Nh
bGluZ1R5cGUsIG1pcnJvcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFJlbmRlcmVyRXZlbnRzKAotICAgICAg
VmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVuZGVyZXIsIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVy
RXZlbnRzIHJlbmRlcmVyRXZlbnRzKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVy
ZXJHdWkuc2V0UmVuZGVyZXJFdmVudHMiKTsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkF0dGVtcHQgdG8gc2V0IHJlbmRlcmVy
IGV2ZW50cyBiZWZvcmUgc2V0dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIHN5bmNo
cm9uaXplZCAoaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2SW1h
Z2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMp
IHsKLSAgICAgICAgaWYgKHl1dkltYWdlUmVuZGVyZXIgPT0gcmVuZGVyZXIpIHsKLSAgICAgICAg
ICB5dXZJbWFnZVJlbmRlcmVyLnJlbmRlcmVyRXZlbnRzID0gcmVuZGVyZXJFdmVudHM7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXpl
ZCB2b2lkIHJlbW92ZShWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5kZXJlcikgewotICAgIExv
Z2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3VpLnJlbW92ZSIpOwotICAgIGlmIChpbnN0YW5j
ZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQXR0ZW1wdCB0
byByZW1vdmUgcmVuZGVyZXIgYmVmb3JlIHNldHRpbmcgR0xTdXJmYWNlVmlldyIpOwotICAgIH0K
LSAgICBzeW5jaHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBm
aW5hbCBpbnQgaW5kZXggPSBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycy5pbmRleE9mKHJlbmRl
cmVyKTsKLSAgICAgIGlmIChpbmRleCA9PSAtMSkgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAi
Q291bGRuJ3QgcmVtb3ZlIHJlbmRlcmVyIChub3QgcHJlc2VudCBpbiBjdXJyZW50IGxpc3QpIik7
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycy5yZW1v
dmUoaW5kZXgpLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbmRl
cmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkucmVzZXQiKTsKLSAg
ICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oIkF0dGVtcHQgdG8gcmVzZXQgcmVuZGVyZXIgYmVmb3JlIHNldHRpbmcgR0xTdXJmYWNlVmll
dyIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJz
KSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IGluc3Rh
bmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIGlmICh5dXZJbWFnZVJlbmRlcmVyID09
IHJlbmRlcmVyKSB7Ci0gICAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5yZXNldCgpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFN0
YWNrVHJhY2UoVGhyZWFkIHRocmVhZCwgU3RyaW5nIHRocmVhZE5hbWUpIHsKLSAgICBpZiAodGhy
ZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNrVHJhY2VFbGVtZW50W10gc3RhY2tUcmFjZXMgPSB0
aHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgaWYgKHN0YWNrVHJhY2VzLmxlbmd0aCA+IDAp
IHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgdGhyZWFkTmFtZSArICIgc3RhY2tzIHRyYWNlOiIp
OwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBzdGFja1RyYWNl
cykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9u
aXplZCB2b2lkIHByaW50U3RhY2tUcmFjZXMoKSB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwp
IHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcHJpbnRTdGFja1RyYWNlKHJlbmRlckZyYW1l
VGhyZWFkLCAiUmVuZGVyIGZyYW1lIHRocmVhZCIpOwotICAgIHByaW50U3RhY2tUcmFjZShkcmF3
VGhyZWFkLCAiRHJhdyB0aHJlYWQiKTsKLSAgfQotCi0gIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIp
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN1cmZhY2VDcmVhdGVkKEdMMTAgdW51c2Vk
LCBFR0xDb25maWcgY29uZmlnKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJH
dWkub25TdXJmYWNlQ3JlYXRlZCIpOwotICAgIC8vIFN0b3JlIHJlbmRlciBFR0wgY29udGV4dC4K
LSAgICBzeW5jaHJvbml6ZWQgKFZpZGVvUmVuZGVyZXJHdWkuY2xhc3MpIHsKLSAgICAgIGlmIChF
Z2xCYXNlMTQuaXNFR0wxNFN1cHBvcnRlZCgpKSB7Ci0gICAgICAgIGVnbENvbnRleHQgPSBuZXcg
RWdsQmFzZTE0LkNvbnRleHQoRUdMMTQuZWdsR2V0Q3VycmVudENvbnRleHQoKSk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBlZ2xDb250ZXh0ID0gbmV3IEVnbEJhc2UxMC5Db250ZXh0KCgoRUdM
MTApIEVHTENvbnRleHQuZ2V0RUdMKCkpLmVnbEdldEN1cnJlbnRDb250ZXh0KCkpOwotICAgICAg
fQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aSBFR0wgQ29udGV4dDog
IiArIGVnbENvbnRleHQpOwotICAgIH0KLQotICAgIHN5bmNocm9uaXplZCAoeXV2SW1hZ2VSZW5k
ZXJlcnMpIHsKLSAgICAgIC8vIENyZWF0ZSB0ZXh0dXJlcyBmb3IgYWxsIGltYWdlcy4KLSAgICAg
IGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogeXV2SW1hZ2VSZW5kZXJl
cnMpIHsKLSAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5jcmVhdGVUZXh0dXJlcygpOwotICAgICAg
fQotICAgICAgb25TdXJmYWNlQ3JlYXRlZENhbGxlZCA9IHRydWU7Ci0gICAgfQotICAgIEdsVXRp
bC5jaGVja05vR0xFUzJFcnJvcigib25TdXJmYWNlQ3JlYXRlZCBkb25lIik7Ci0gICAgR0xFUzIw
LmdsUGl4ZWxTdG9yZWkoR0xFUzIwLkdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIEdMRVMy
MC5nbENsZWFyQ29sb3IoMC4xNWYsIDAuMTVmLCAwLjE1ZiwgMS4wZik7Ci0KLSAgICAvLyBGaXJl
IEVHTCBjb250ZXh0IHJlYWR5IGV2ZW50LgotICAgIHN5bmNocm9uaXplZCAoVmlkZW9SZW5kZXJl
ckd1aS5jbGFzcykgewotICAgICAgaWYgKGVnbENvbnRleHRSZWFkeSAhPSBudWxsKSB7Ci0gICAg
ICAgIGVnbENvbnRleHRSZWFkeS5ydW4oKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgb25TdXJmYWNlQ2hhbmdlZChHTDEwIHVudXNlZCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWku
b25TdXJmYWNlQ2hhbmdlZDogIiArIHdpZHRoICsgIiB4ICIgKyBoZWlnaHQgKyAiICAiKTsKLSAg
ICBzY3JlZW5XaWR0aCA9IHdpZHRoOwotICAgIHNjcmVlbkhlaWdodCA9IGhlaWdodDsKLSAgICBz
eW5jaHJvbml6ZWQgKHl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVu
ZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IHl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIHl1
dkltYWdlUmVuZGVyZXIuc2V0U2NyZWVuU2l6ZShzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0KTsK
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25EcmF3
RnJhbWUoR0wxMCB1bnVzZWQpIHsKLSAgICBpZiAoZHJhd1RocmVhZCA9PSBudWxsKSB7Ci0gICAg
ICBkcmF3VGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICB9Ci0gICAgR0xFUzIw
LmdsVmlld3BvcnQoMCwgMCwgc2NyZWVuV2lkdGgsIHNjcmVlbkhlaWdodCk7Ci0gICAgR0xFUzIw
LmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIHN5bmNocm9uaXplZCAo
eXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFn
ZVJlbmRlcmVyIDogeXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgICAgeXV2SW1hZ2VSZW5kZXJl
ci5kcmF3KCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L1ZpZGVvU291cmNlLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1Nv
dXJjZS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvU291
cmNlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMyArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogSmF2YSB3cmFwcGVyIG9mIG5hdGl2
ZSBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZS4KLSAqLwotcHVibGljIGNsYXNzIFZpZGVvU291cmNl
IGV4dGVuZHMgTWVkaWFTb3VyY2UgewotICBwdWJsaWMgVmlkZW9Tb3VyY2UobG9uZyBuYXRpdmVT
b3VyY2UpIHsKLSAgICBzdXBlcihuYXRpdmVTb3VyY2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENh
bGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGNhdXNlIGZyYW1lcyB0byBiZSBzY2FsZWQgZG93biB0
byB0aGUgcmVxdWVzdGVkIHJlc29sdXRpb24uIEFsc28sCi0gICAqIGZyYW1lcyB3aWxsIGJlIGNy
b3BwZWQgdG8gbWF0Y2ggdGhlIHJlcXVlc3RlZCBhc3BlY3QgcmF0aW8sIGFuZCBmcmFtZXMgd2ls
bCBiZSBkcm9wcGVkIHRvIG1hdGNoCi0gICAqIHRoZSByZXF1ZXN0ZWQgZnBzLiBUaGUgcmVxdWVz
dGVkIGFzcGVjdCByYXRpbyBpcyBvcmllbnRhdGlvbiBhZ25vc3RpYyBhbmQgd2lsbCBiZSBhZGp1
c3RlZCB0bwotICAgKiBtYWludGFpbiB0aGUgaW5wdXQgb3JpZW50YXRpb24sIHNvIGl0IGRvZXNu
J3QgbWF0dGVyIGlmIGUuZy4gMTI4MHg3MjAgb3IgNzIweDEyODAgaXMgcmVxdWVzdGVkLgotICAg
Ki8KLSAgcHVibGljIHZvaWQgYWRhcHRPdXRwdXRGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgZnBzKSB7Ci0gICAgbmF0aXZlQWRhcHRPdXRwdXRGb3JtYXQobmF0aXZlU291cmNlLCB3
aWR0aCwgaGVpZ2h0LCBmcHMpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQg
bmF0aXZlQWRhcHRPdXRwdXRGb3JtYXQoCi0gICAgICBsb25nIG5hdGl2ZVNvdXJjZSwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnBzKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlk
ZW9UcmFjay5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9UcmFjay5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvVHJhY2suamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0vKiog
SmF2YSB2ZXJzaW9uIG9mIFZpZGVvVHJhY2tJbnRlcmZhY2UuICovCi1wdWJsaWMgY2xhc3MgVmlk
ZW9UcmFjayBleHRlbmRzIE1lZGlhU3RyZWFtVHJhY2sgewotICBwcml2YXRlIGZpbmFsIExpbmtl
ZExpc3Q8VmlkZW9SZW5kZXJlcj4gcmVuZGVyZXJzID0gbmV3IExpbmtlZExpc3Q8VmlkZW9SZW5k
ZXJlcj4oKTsKLQotICBwdWJsaWMgVmlkZW9UcmFjayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAg
c3VwZXIobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkUmVuZGVyZXIoVmlk
ZW9SZW5kZXJlciByZW5kZXJlcikgewotICAgIHJlbmRlcmVycy5hZGQocmVuZGVyZXIpOwotICAg
IG5hdGl2ZUFkZFJlbmRlcmVyKG5hdGl2ZVRyYWNrLCByZW5kZXJlci5uYXRpdmVWaWRlb1JlbmRl
cmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVJlbmRlcmVyKFZpZGVvUmVuZGVyZXIg
cmVuZGVyZXIpIHsKLSAgICBpZiAoIXJlbmRlcmVycy5yZW1vdmUocmVuZGVyZXIpKSB7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIG5hdGl2ZVJlbW92ZVJlbmRlcmVyKG5hdGl2ZVRyYWNrLCBy
ZW5kZXJlci5uYXRpdmVWaWRlb1JlbmRlcmVyKTsKLSAgICByZW5kZXJlci5kaXNwb3NlKCk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIHdoaWxlICghcmVuZGVyZXJzLmlz
RW1wdHkoKSkgewotICAgICAgcmVtb3ZlUmVuZGVyZXIocmVuZGVyZXJzLmdldEZpcnN0KCkpOwot
ICAgIH0KLSAgICBzdXBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSB2b2lkIG5hdGl2ZUFkZFJlbmRlcmVyKGxvbmcgbmF0aXZlVHJhY2ssIGxvbmcgbmF0aXZlUmVu
ZGVyZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVJlbW92ZVJlbmRl
cmVyKGxvbmcgbmF0aXZlVHJhY2ssIGxvbmcgbmF0aXZlUmVuZGVyZXIpOwotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9ZdXZDb252ZXJ0ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL1l1dkNvbnZlcnRlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL1l1dkNvbnZlcnRlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjU5ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJv
aWQub3BlbmdsLkdMRVMxMUV4dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBv
cnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLQot
LyoqCi0gKiBDbGFzcyBmb3IgY29udmVydGluZyBPRVMgdGV4dHVyZXMgdG8gYSBZVVYgQnl0ZUJ1
ZmZlci4gSXQgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIG9uIGEgdGhyZWFkIHdpdGgKLSAqIGFuIGFj
dGl2ZSBFR0wgY29udGV4dCwgYW5kIG9ubHkgYmUgdXNlZCBmcm9tIHRoYXQgdGhyZWFkLgotICov
Ci1jbGFzcyBZdXZDb252ZXJ0ZXIgewotICAvLyBWZXJ0ZXggY29vcmRpbmF0ZXMgaW4gTm9ybWFs
aXplZCBEZXZpY2UgQ29vcmRpbmF0ZXMsIGkuZS4KLSAgLy8gKC0xLCAtMSkgaXMgYm90dG9tLWxl
ZnQgYW5kICgxLCAxKSBpcyB0b3AtcmlnaHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0
QnVmZmVyIERFVklDRV9SRUNUQU5HTEUgPSBHbFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIobmV3IGZs
b2F0W10gewotICAgICAgLTEuMGYsIC0xLjBmLCAvLyBCb3R0b20gbGVmdC4KLSAgICAgIDEuMGYs
IC0xLjBmLCAvLyBCb3R0b20gcmlnaHQuCi0gICAgICAtMS4wZiwgMS4wZiwgLy8gVG9wIGxlZnQu
Ci0gICAgICAxLjBmLCAxLjBmLCAvLyBUb3AgcmlnaHQuCi0gIH0pOwotCi0gIC8vIFRleHR1cmUg
Y29vcmRpbmF0ZXMgLSAoMCwgMCkgaXMgYm90dG9tLWxlZnQgYW5kICgxLCAxKSBpcyB0b3Atcmln
aHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0QnVmZmVyIFRFWFRVUkVfUkVDVEFOR0xF
ID0gR2xVdGlsLmNyZWF0ZUZsb2F0QnVmZmVyKG5ldyBmbG9hdFtdIHsKLSAgICAgIDAuMGYsIDAu
MGYsIC8vIEJvdHRvbSBsZWZ0LgotICAgICAgMS4wZiwgMC4wZiwgLy8gQm90dG9tIHJpZ2h0Lgot
ICAgICAgMC4wZiwgMS4wZiwgLy8gVG9wIGxlZnQuCi0gICAgICAxLjBmLCAxLjBmIC8vIFRvcCBy
aWdodC4KLSAgfSk7Ci0KLSAgLy8gY2xhbmctZm9ybWF0IG9mZgotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVkVSVEVYX1NIQURFUiA9Ci0gICAgICAgICJ2YXJ5aW5nIHZlYzIgaW50ZXJw
X3RjO1xuIgotICAgICAgKyAiYXR0cmlidXRlIHZlYzQgaW5fcG9zO1xuIgotICAgICAgKyAiYXR0
cmlidXRlIHZlYzQgaW5fdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gbWF0
NCB0ZXhNYXRyaXg7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigpIHtcbiIK
LSAgICAgICsgIiAgICBnbF9Qb3NpdGlvbiA9IGluX3BvcztcbiIKLSAgICAgICsgIiAgICBpbnRl
cnBfdGMgPSAodGV4TWF0cml4ICogaW5fdGMpLnh5O1xuIgotICAgICAgKyAifVxuIjsKLQotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRlJBR01FTlRfU0hBREVSID0KLSAgICAgICAgIiNl
eHRlbnNpb24gR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCA6IHJlcXVpcmVcbiIKLSAgICAgICsg
InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgotICAgICAgKyAidmFyeWluZyB2ZWMyIGludGVy
cF90YztcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBzYW1wbGVyRXh0ZXJuYWxP
RVMgb2VzVGV4O1xuIgotICAgICAgLy8gRGlmZmVyZW5jZSBpbiB0ZXh0dXJlIGNvb3JkaW5hdGUg
Y29ycmVzcG9uZGluZyB0byBvbmUKLSAgICAgIC8vIHN1Yi1waXhlbCBpbiB0aGUgeCBkaXJlY3Rp
b24uCi0gICAgICArICJ1bmlmb3JtIHZlYzIgeFVuaXQ7XG4iCi0gICAgICAvLyBDb2xvciBjb252
ZXJzaW9uIGNvZWZmaWNpZW50cywgaW5jbHVkaW5nIGNvbnN0YW50IHRlcm0KLSAgICAgICsgInVu
aWZvcm0gdmVjNCBjb2VmZnM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigp
IHtcbiIKLSAgICAgIC8vIFNpbmNlIHRoZSBhbHBoYSByZWFkIGZyb20gdGhlIHRleHR1cmUgaXMg
YWx3YXlzIDEsIHRoaXMgY291bGQKLSAgICAgIC8vIGJlIHdyaXR0ZW4gYXMgYSBtYXQ0IHggdmVj
NCBtdWx0aXBseS4gSG93ZXZlciwgdGhhdCBzZWVtcyB0bwotICAgICAgLy8gZ2l2ZSBhIHdvcnNl
IGZyYW1lcmF0ZSwgcG9zc2libHkgYmVjYXVzZSB0aGUgYWRkaXRpb25hbAotICAgICAgLy8gbXVs
dGlwbGllcyBieSAxLjAgY29uc3VtZSByZXNvdXJjZXMuIFRPRE8obmlzc2UpOiBDb3VsZCBhbHNv
Ci0gICAgICAvLyB0cnkgdG8gZG8gaXQgYXMgYSB2ZWMzIHggbWF0M3g0LCBmb2xsb3dlZCBieSBh
biBhZGQgaW4gb2YgYQotICAgICAgLy8gY29uc3RhbnQgdmVjdG9yLgotICAgICAgKyAiICBnbF9G
cmFnQ29sb3IuciA9IGNvZWZmcy5hICsgZG90KGNvZWZmcy5yZ2IsXG4iCi0gICAgICArICIgICAg
ICB0ZXh0dXJlMkQob2VzVGV4LCBpbnRlcnBfdGMgLSAxLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAg
ICAgICsgIiAgZ2xfRnJhZ0NvbG9yLmcgPSBjb2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgot
ICAgICAgKyAiICAgICAgdGV4dHVyZTJEKG9lc1RleCwgaW50ZXJwX3RjIC0gMC41ICogeFVuaXQp
LnJnYik7XG4iCi0gICAgICArICIgIGdsX0ZyYWdDb2xvci5iID0gY29lZmZzLmEgKyBkb3QoY29l
ZmZzLnJnYixcbiIKLSAgICAgICsgIiAgICAgIHRleHR1cmUyRChvZXNUZXgsIGludGVycF90YyAr
IDAuNSAqIHhVbml0KS5yZ2IpO1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IuYSA9IGNvZWZm
cy5hICsgZG90KGNvZWZmcy5yZ2IsXG4iCi0gICAgICArICIgICAgICB0ZXh0dXJlMkQob2VzVGV4
LCBpbnRlcnBfdGMgKyAxLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0gIC8v
IGNsYW5nLWZvcm1hdCBvbgotCi0gIHByaXZhdGUgZmluYWwgaW50IGZyYW1lQnVmZmVySWQ7Ci0g
IHByaXZhdGUgZmluYWwgaW50IGZyYW1lVGV4dHVyZUlkOwotICBwcml2YXRlIGZpbmFsIEdsU2hh
ZGVyIHNoYWRlcjsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgdGV4TWF0cml4TG9jOwotICBwcml2YXRl
IGZpbmFsIGludCB4VW5pdExvYzsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgY29lZmZzTG9jOwotICBw
cml2YXRlIGZpbmFsIFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIgdGhyZWFkQ2hlY2tlciA9IG5l
dyBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyKCk7Ci0gIHByaXZhdGUgaW50IGZyYW1lQnVmZmVy
V2lkdGg7Ci0gIHByaXZhdGUgaW50IGZyYW1lQnVmZmVySGVpZ2h0OwotICBwcml2YXRlIGJvb2xl
YW4gcmVsZWFzZWQgPSBmYWxzZTsKLQotICAvKioKLSAgICogVGhpcyBjbGFzcyBzaG91bGQgYmUg
Y29uc3RydWN0ZWQgb24gYSB0aHJlYWQgdGhhdCBoYXMgYW4gYWN0aXZlIEVHTCBjb250ZXh0Lgot
ICAgKi8KLSAgcHVibGljIFl1dkNvbnZlcnRlcigpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNr
SXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgZnJhbWVUZXh0dXJlSWQgPSBHbFV0aWwuZ2VuZXJhdGVU
ZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICB0aGlzLmZyYW1lQnVmZmVyV2lkdGgg
PSAwOwotICAgIHRoaXMuZnJhbWVCdWZmZXJIZWlnaHQgPSAwOwotCi0gICAgLy8gQ3JlYXRlIGZy
YW1lYnVmZmVyIG9iamVjdCBhbmQgYmluZCBpdC4KLSAgICBmaW5hbCBpbnQgZnJhbWVCdWZmZXJz
W10gPSBuZXcgaW50WzFdOwotICAgIEdMRVMyMC5nbEdlbkZyYW1lYnVmZmVycygxLCBmcmFtZUJ1
ZmZlcnMsIDApOwotICAgIGZyYW1lQnVmZmVySWQgPSBmcmFtZUJ1ZmZlcnNbMF07Ci0gICAgR0xF
UzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgZnJhbWVCdWZmZXJJ
ZCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJHZW5lcmF0ZSBmcmFtZWJ1ZmZlciIp
OwotCi0gICAgLy8gQXR0YWNoIHRoZSB0ZXh0dXJlIHRvIHRoZSBmcmFtZWJ1ZmZlciBhcyBjb2xv
ciBhdHRhY2htZW50LgotICAgIEdMRVMyMC5nbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMRVMyMC5H
TF9GUkFNRUJVRkZFUiwgR0xFUzIwLkdMX0NPTE9SX0FUVEFDSE1FTlQwLAotICAgICAgICBHTEVT
MjAuR0xfVEVYVFVSRV8yRCwgZnJhbWVUZXh0dXJlSWQsIDApOwotICAgIEdsVXRpbC5jaGVja05v
R0xFUzJFcnJvcigiQXR0YWNoIHRleHR1cmUgdG8gZnJhbWVidWZmZXIiKTsKLQotICAgIC8vIFJl
c3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihH
TEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotCi0gICAgc2hhZGVyID0gbmV3IEdsU2hhZGVyKFZF
UlRFWF9TSEFERVIsIEZSQUdNRU5UX1NIQURFUik7Ci0gICAgc2hhZGVyLnVzZVByb2dyYW0oKTsK
LSAgICB0ZXhNYXRyaXhMb2MgPSBzaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ0ZXhNYXRyaXgi
KTsKLSAgICB4VW5pdExvYyA9IHNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInhVbml0Iik7Ci0g
ICAgY29lZmZzTG9jID0gc2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigiY29lZmZzIik7Ci0gICAg
R0xFUzIwLmdsVW5pZm9ybTFpKHNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oIm9lc1RleCIpLCAw
KTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkluaXRpYWxpemUgZnJhZ21lbnQgc2hh
ZGVyIHVuaWZvcm0gdmFsdWVzLiIpOwotICAgIC8vIEluaXRpYWxpemUgdmVydGV4IHNoYWRlciBh
dHRyaWJ1dGVzLgotICAgIHNoYWRlci5zZXRWZXJ0ZXhBdHRyaWJBcnJheSgiaW5fcG9zIiwgMiwg
REVWSUNFX1JFQ1RBTkdMRSk7Ci0gICAgLy8gSWYgdGhlIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxl
IG9mIDQgcGl4ZWxzLCB0aGUgdGV4dHVyZQotICAgIC8vIHdpbGwgYmUgc2NhbGVkIHVwIHNsaWdo
dGx5IGFuZCBjbGlwcGVkIGF0IHRoZSByaWdodCBib3JkZXIuCi0gICAgc2hhZGVyLnNldFZlcnRl
eEF0dHJpYkFycmF5KCJpbl90YyIsIDIsIFRFWFRVUkVfUkVDVEFOR0xFKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIGNvbnZlcnQoQnl0ZUJ1ZmZlciBidWYsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IHN0cmlkZSwgaW50IHNyY1RleHR1cmVJZCwKLSAgICAgIGZsb2F0W10gdHJhbnNmb3JtTWF0
cml4KSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIGlm
IChyZWxlYXNlZCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiWXV2
Q29udmVydGVyLmNvbnZlcnQgY2FsbGVkIG9uIHJlbGVhc2VkIG9iamVjdCIpOwotICAgIH0KLQot
ICAgIC8vIFdlIGRyYXcgaW50byBhIGJ1ZmZlciBsYWlkIG91dCBsaWtlCi0gICAgLy8KLSAgICAv
LyAgICArLS0tLS0tLS0tKwotICAgIC8vICAgIHwgICAgICAgICB8Ci0gICAgLy8gICAgfCAgWSAg
ICAgIHwKLSAgICAvLyAgICB8ICAgICAgICAgfAotICAgIC8vICAgIHwgICAgICAgICB8Ci0gICAg
Ly8gICAgKy0tLS0rLS0tLSsKLSAgICAvLyAgICB8IFUgIHwgViAgfAotICAgIC8vICAgIHwgICAg
fCAgICB8Ci0gICAgLy8gICAgKy0tLS0rLS0tLSsKLSAgICAvLwotICAgIC8vIEluIG1lbW9yeSwg
d2UgdXNlIHRoZSBzYW1lIHN0cmlkZSBmb3IgYWxsIG9mIFksIFUgYW5kIFYuIFRoZQotICAgIC8v
IFUgZGF0YSBzdGFydHMgYXQgb2Zmc2V0IHxoZWlnaHR8ICogfHN0cmlkZXwgZnJvbSB0aGUgWSBk
YXRhLAotICAgIC8vIGFuZCB0aGUgViBkYXRhIHN0YXJ0cyBhdCBhdCBvZmZzZXQgfHN0cmlkZS8y
fCBmcm9tIHRoZSBVCi0gICAgLy8gZGF0YSwgd2l0aCByb3dzIG9mIFUgYW5kIFYgZGF0YSBhbHRl
cm5hdGluZy4KLSAgICAvLwotICAgIC8vIE5vdywgaXQgd291bGQgaGF2ZSBtYWRlIHNlbnNlIHRv
IGFsbG9jYXRlIGEgcGl4ZWwgYnVmZmVyIHdpdGgKLSAgICAvLyBhIHNpbmdsZSBieXRlIHBlciBw
aXhlbCAoRUdMMTAuRUdMX0NPTE9SX0JVRkZFUl9UWVBFLAotICAgIC8vIEVHTDEwLkVHTF9MVU1J
TkFOQ0VfQlVGRkVSLCksIGJ1dCB0aGF0IHNlZW1zIHRvIGJlCi0gICAgLy8gdW5zdXBwb3J0ZWQg
YnkgZGV2aWNlcy4gU28gZG8gdGhlIGZvbGxvd2luZyBoYWNrOiBBbGxvY2F0ZSBhbgotICAgIC8v
IFJHQkEgYnVmZmVyLCBvZiB3aWR0aCB8c3RyaWRlfC80LiBUbyByZW5kZXIgZWFjaCBvZiB0aGVz
ZQotICAgIC8vIGxhcmdlIHBpeGVscywgc2FtcGxlIHRoZSB0ZXh0dXJlIGF0IDQgZGlmZmVyZW50
IHggY29vcmRpbmF0ZXMKLSAgICAvLyBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gdGhlIGZvdXIg
Y29tcG9uZW50cy4KLSAgICAvLwotICAgIC8vIFNpbmNlIHRoZSBWIGRhdGEgbmVlZHMgdG8gc3Rh
cnQgb24gYSBib3VuZGFyeSBvZiBzdWNoIGEKLSAgICAvLyBsYXJnZXIgcGl4ZWwsIGl0IGlzIG5v
dCBzdWZmaWNpZW50IHRoYXQgfHN0cmlkZXwgaXMgZXZlbiwgaXQKLSAgICAvLyBoYXMgdG8gYmUg
YSBtdWx0aXBsZSBvZiA4IHBpeGVscy4KLQotICAgIGlmIChzdHJpZGUgJSA4ICE9IDApIHsKLSAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc3RyaWRlLCBt
dXN0IGJlIGEgbXVsdGlwbGUgb2YgOCIpOwotICAgIH0KLSAgICBpZiAoc3RyaWRlIDwgd2lkdGgp
IHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc3Ry
aWRlLCBtdXN0ID49IHdpZHRoIik7Ci0gICAgfQotCi0gICAgaW50IHlfd2lkdGggPSAod2lkdGgg
KyAzKSAvIDQ7Ci0gICAgaW50IHV2X3dpZHRoID0gKHdpZHRoICsgNykgLyA4OwotICAgIGludCB1
dl9oZWlnaHQgPSAoaGVpZ2h0ICsgMSkgLyAyOwotICAgIGludCB0b3RhbF9oZWlnaHQgPSBoZWln
aHQgKyB1dl9oZWlnaHQ7Ci0gICAgaW50IHNpemUgPSBzdHJpZGUgKiB0b3RhbF9oZWlnaHQ7Ci0K
LSAgICBpZiAoYnVmLmNhcGFjaXR5KCkgPCBzaXplKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uKCJZdXZDb252ZXJ0ZXIuY29udmVydCBjYWxsZWQgd2l0aCB0b28g
c21hbGwgYnVmZmVyIik7Ci0gICAgfQotICAgIC8vIFByb2R1Y2UgYSBmcmFtZSBidWZmZXIgc3Rh
cnRpbmcgYXQgdG9wLWxlZnQgY29ybmVyLCBub3QKLSAgICAvLyBib3R0b20tbGVmdC4KLSAgICB0
cmFuc2Zvcm1NYXRyaXggPQotICAgICAgICBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2Vz
KHRyYW5zZm9ybU1hdHJpeCwgUmVuZGVyZXJDb21tb24udmVydGljYWxGbGlwTWF0cml4KCkpOwot
Ci0gICAgLy8gQmluZCBvdXIgZnJhbWVidWZmZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVm
ZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgZnJhbWVCdWZmZXJJZCk7Ci0gICAgR2xVdGlsLmNo
ZWNrTm9HTEVTMkVycm9yKCJnbEJpbmRGcmFtZWJ1ZmZlciIpOwotCi0gICAgaWYgKGZyYW1lQnVm
ZmVyV2lkdGggIT0gc3RyaWRlIC8gNCB8fCBmcmFtZUJ1ZmZlckhlaWdodCAhPSB0b3RhbF9oZWln
aHQpIHsKLSAgICAgIGZyYW1lQnVmZmVyV2lkdGggPSBzdHJpZGUgLyA0OwotICAgICAgZnJhbWVC
dWZmZXJIZWlnaHQgPSB0b3RhbF9oZWlnaHQ7Ci0gICAgICAvLyAoUmUpLUFsbG9jYXRlIHRleHR1
cmUuCi0gICAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0g
ICAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgZnJhbWVUZXh0
dXJlSWQpOwotICAgICAgR0xFUzIwLmdsVGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwg
MCwgR0xFUzIwLkdMX1JHQkEsIGZyYW1lQnVmZmVyV2lkdGgsCi0gICAgICAgICAgZnJhbWVCdWZm
ZXJIZWlnaHQsIDAsIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgbnVs
bCk7Ci0KLSAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGZyYW1lYnVmZmVyIGlzIGluIGEgZ29vZCBz
dGF0ZS4KLSAgICAgIGZpbmFsIGludCBzdGF0dXMgPSBHTEVTMjAuZ2xDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKEdMRVMyMC5HTF9GUkFNRUJVRkZFUik7Ci0gICAgICBpZiAoc3RhdHVzICE9IEdMRVMy
MC5HTF9GUkFNRUJVRkZFUl9DT01QTEVURSkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0
YXRlRXhjZXB0aW9uKCJGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUsIHN0YXR1czogIiArIHN0YXR1
cyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAu
R0xfVEVYVFVSRTApOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhU
VVJFX0VYVEVSTkFMX09FUywgc3JjVGV4dHVyZUlkKTsKLSAgICBHTEVTMjAuZ2xVbmlmb3JtTWF0
cml4NGZ2KHRleE1hdHJpeExvYywgMSwgZmFsc2UsIHRyYW5zZm9ybU1hdHJpeCwgMCk7Ci0KLSAg
ICAvLyBEcmF3IFkKLSAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCAwLCB5X3dpZHRoLCBoZWlnaHQp
OwotICAgIC8vIE1hdHJpeCAqICgxOzA7MDswKSAvIHdpZHRoLiBOb3RlIHRoYXQgb3BlbmdsIHVz
ZXMgY29sdW1uIG1ham9yIG9yZGVyLgotICAgIEdMRVMyMC5nbFVuaWZvcm0yZih4VW5pdExvYywg
dHJhbnNmb3JtTWF0cml4WzBdIC8gd2lkdGgsIHRyYW5zZm9ybU1hdHJpeFsxXSAvIHdpZHRoKTsK
LSAgICAvLyBZJ1VWNDQ0IHRvIFJHQjg4OCwgc2VlCi0gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVk
aWEub3JnL3dpa2kvWVVWI1kuMjdVVjQ0NF90b19SR0I4ODhfY29udmVyc2lvbi4KLSAgICAvLyBX
ZSB1c2UgdGhlIElUVS1SIGNvZWZmaWNpZW50cyBmb3IgVSBhbmQgViAqLwotICAgIEdMRVMyMC5n
bFVuaWZvcm00Zihjb2VmZnNMb2MsIDAuMjk5ZiwgMC41ODdmLCAwLjExNGYsIDAuMGYpOwotICAg
IEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RSSUFOR0xFX1NUUklQLCAwLCA0KTsKLQot
ICAgIC8vIERyYXcgVQotICAgIEdMRVMyMC5nbFZpZXdwb3J0KDAsIGhlaWdodCwgdXZfd2lkdGgs
IHV2X2hlaWdodCk7Ci0gICAgLy8gTWF0cml4ICogKDE7MDswOzApIC8gKHdpZHRoIC8gMikuIE5v
dGUgdGhhdCBvcGVuZ2wgdXNlcyBjb2x1bW4gbWFqb3Igb3JkZXIuCi0gICAgR0xFUzIwLmdsVW5p
Zm9ybTJmKAotICAgICAgICB4VW5pdExvYywgMi4wZiAqIHRyYW5zZm9ybU1hdHJpeFswXSAvIHdp
ZHRoLCAyLjBmICogdHJhbnNmb3JtTWF0cml4WzFdIC8gd2lkdGgpOwotICAgIEdMRVMyMC5nbFVu
aWZvcm00Zihjb2VmZnNMb2MsIC0wLjE2OWYsIC0wLjMzMWYsIDAuNDk5ZiwgMC41Zik7Ci0gICAg
R0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAuR0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotCi0g
ICAgLy8gRHJhdyBWCi0gICAgR0xFUzIwLmdsVmlld3BvcnQoc3RyaWRlIC8gOCwgaGVpZ2h0LCB1
dl93aWR0aCwgdXZfaGVpZ2h0KTsKLSAgICBHTEVTMjAuZ2xVbmlmb3JtNGYoY29lZmZzTG9jLCAw
LjQ5OWYsIC0wLjQxOGYsIC0wLjA4MTNmLCAwLjVmKTsKLSAgICBHTEVTMjAuZ2xEcmF3QXJyYXlz
KEdMRVMyMC5HTF9UUklBTkdMRV9TVFJJUCwgMCwgNCk7Ci0KLSAgICBHTEVTMjAuZ2xSZWFkUGl4
ZWxzKAotICAgICAgICAwLCAwLCBmcmFtZUJ1ZmZlcldpZHRoLCBmcmFtZUJ1ZmZlckhlaWdodCwg
R0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCBidWYpOwotCi0gICAgR2xV
dGlsLmNoZWNrTm9HTEVTMkVycm9yKCJZdXZDb252ZXJ0ZXIuY29udmVydCIpOwotCi0gICAgLy8g
UmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVy
KEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xF
UzIwLkdMX1RFWFRVUkVfMkQsIDApOwotCi0gICAgLy8gVW5iaW5kIHRleHR1cmUuIFJlcG9ydGVk
bHkgbmVlZGVkIG9uIHNvbWUgZGV2aWNlcyB0byBnZXQKLSAgICAvLyB0aGUgdGV4dHVyZSB1cGRh
dGVkIGZyb20gdGhlIGNhbWVyYS4KLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMTFFeHQu
R0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMsIDApOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVsZWFz
ZSgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgcmVs
ZWFzZWQgPSB0cnVlOwotICAgIHNoYWRlci5yZWxlYXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRl
VGV4dHVyZXMoMSwgbmV3IGludFtdIHtmcmFtZVRleHR1cmVJZH0sIDApOwotICAgIEdMRVMyMC5n
bERlbGV0ZUZyYW1lYnVmZmVycygxLCBuZXcgaW50W10ge2ZyYW1lQnVmZmVySWR9LCAwKTsKLSAg
ICBmcmFtZUJ1ZmZlcldpZHRoID0gMDsKLSAgICBmcmFtZUJ1ZmZlckhlaWdodCA9IDA7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQXVkaW9Tb3VyY2UuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL0F1ZGlvU291cmNlLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvQXVkaW9Tb3VyY2UuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIx
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoq
Ci0gKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIEF1ZGlvU291cmNlSW50ZXJmYWNlLiAgVXNlZCBh
cyB0aGUgc291cmNlIGZvciBvbmUgb3IKLSAqIG1vcmUge0Bjb2RlIEF1ZGlvVHJhY2t9IG9iamVj
dHMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBdWRpb1NvdXJjZSBleHRlbmRzIE1lZGlhU291cmNlIHsK
LSAgcHVibGljIEF1ZGlvU291cmNlKGxvbmcgbmF0aXZlU291cmNlKSB7Ci0gICAgc3VwZXIobmF0
aXZlU291cmNlKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1RyYWNrLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1RyYWNrLmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQXVkaW9UcmFjay5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBBdWRpb1RyYWNrSW50ZXJmYWNl
ICovCi1wdWJsaWMgY2xhc3MgQXVkaW9UcmFjayBleHRlbmRzIE1lZGlhU3RyZWFtVHJhY2sgewot
ICBwdWJsaWMgQXVkaW9UcmFjayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgc3VwZXIobmF0aXZl
VHJhY2spOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbGxTZXNzaW9uRmlsZVJv
dGF0aW5nTG9nU2luay5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FsbFNl
c3Npb25GaWxlUm90YXRpbmdMb2dTaW5rLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLXB1YmxpYyBjbGFzcyBDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1Npbmsgewot
ICBzdGF0aWMgewotICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiamluZ2xlX3BlZXJjb25uZWN0aW9u
X3NvIik7Ci0gIH0KLQotICBwcml2YXRlIGxvbmcgbmF0aXZlU2luazsKLQotICBwdWJsaWMgc3Rh
dGljIGJ5dGVbXSBnZXRMb2dEYXRhKFN0cmluZyBkaXJQYXRoKSB7Ci0gICAgcmV0dXJuIG5hdGl2
ZUdldExvZ0RhdGEoZGlyUGF0aCk7Ci0gIH0KLQotICBwdWJsaWMgQ2FsbFNlc3Npb25GaWxlUm90
YXRpbmdMb2dTaW5rKAotICAgICAgU3RyaW5nIGRpclBhdGgsIGludCBtYXhGaWxlU2l6ZSwgTG9n
Z2luZy5TZXZlcml0eSBzZXZlcml0eSkgewotICAgIG5hdGl2ZVNpbmsgPSBuYXRpdmVBZGRTaW5r
KGRpclBhdGgsIG1heEZpbGVTaXplLCBzZXZlcml0eS5vcmRpbmFsKCkpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBpZiAobmF0aXZlU2luayAhPSAwKSB7Ci0gICAgICBu
YXRpdmVEZWxldGVTaW5rKG5hdGl2ZVNpbmspOwotICAgICAgbmF0aXZlU2luayA9IDA7Ci0gICAg
fQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQWRkU2luayhTdHJp
bmcgZGlyUGF0aCwgaW50IG1heEZpbGVTaXplLCBpbnQgc2V2ZXJpdHkpOwotICBwcml2YXRlIHN0
YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVEZWxldGVTaW5rKGxvbmcgbmF0aXZlU2luayk7Ci0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSBieXRlW10gbmF0aXZlR2V0TG9nRGF0YShTdHJpbmcgZGlyUGF0
aCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlci5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5D
YXB0dXJlRm9ybWF0OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci0KLWltcG9y
dCBqYXZhLnV0aWwuTGlzdDsKLQotcHVibGljIGNsYXNzIENhbWVyYTFDYXB0dXJlciBleHRlbmRz
IENhbWVyYUNhcHR1cmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1
cmU7Ci0KLSAgcHVibGljIENhbWVyYTFDYXB0dXJlcigKLSAgICAgIFN0cmluZyBjYW1lcmFOYW1l
LCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIGJvb2xlYW4gY2FwdHVyZVRvVGV4
dHVyZSkgewotICAgIHN1cGVyKGNhbWVyYU5hbWUsIGV2ZW50c0hhbmRsZXIsIG5ldyBDYW1lcmEx
RW51bWVyYXRvcihjYXB0dXJlVG9UZXh0dXJlKSk7Ci0KLSAgICB0aGlzLmNhcHR1cmVUb1RleHR1
cmUgPSBjYXB0dXJlVG9UZXh0dXJlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2
b2lkIGNyZWF0ZUNhbWVyYVNlc3Npb24oQ2FtZXJhU2Vzc2lvbi5DcmVhdGVTZXNzaW9uQ2FsbGJh
Y2sgY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLAotICAgICAgQ2FtZXJhU2Vzc2lvbi5FdmVudHMgZXZl
bnRzLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVs
cGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBTdHJpbmcgY2FtZXJhTmFtZSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LAotICAgICAgaW50IGZyYW1lcmF0ZSkgewotICAgIENhbWVyYTFTZXNzaW9uLmNy
ZWF0ZShjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIGV2ZW50cywgY2FwdHVyZVRvVGV4dHVyZSwgYXBw
bGljYXRpb25Db250ZXh0LAotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciwgQ2FtZXJhMUVu
dW1lcmF0b3IuZ2V0Q2FtZXJhSW5kZXgoY2FtZXJhTmFtZSksIHdpZHRoLCBoZWlnaHQsCi0gICAg
ICAgIGZyYW1lcmF0ZSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUVu
dW1lcmF0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFFbnVt
ZXJhdG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJh
MUVudW1lcmF0b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE4NCArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLlN5
c3RlbUNsb2NrOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGls
Lkxpc3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVy
ZUZvcm1hdDsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFz
cyBDYW1lcmExRW51bWVyYXRvciBpbXBsZW1lbnRzIENhbWVyYUVudW1lcmF0b3IgewotICBwcml2
YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNhbWVyYTFFbnVtZXJhdG9yIjsKLSAgLy8g
RWFjaCBlbnRyeSBjb250YWlucyB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGNvcnJlc3BvbmRp
bmcgY2FtZXJhIGluZGV4LiBUaGUgZm9ybWF0cyBmb3IgYWxsCi0gIC8vIGNhbWVyYXMgYXJlIGVu
dW1lcmF0ZWQgb24gdGhlIGZpcnN0IGNhbGwgdG8gZ2V0U3VwcG9ydGVkRm9ybWF0cygpLCBhbmQg
Y2FjaGVkIGZvciBmdXR1cmUKLSAgLy8gcmVmZXJlbmNlLgotICBwcml2YXRlIHN0YXRpYyBMaXN0
PExpc3Q8Q2FwdHVyZUZvcm1hdD4+IGNhY2hlZFN1cHBvcnRlZEZvcm1hdHM7Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmU7Ci0KLSAgcHVibGljIENhbWVyYTFFbnVt
ZXJhdG9yKCkgewotICAgIHRoaXModHJ1ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKTsKLSAgfQot
Ci0gIHB1YmxpYyBDYW1lcmExRW51bWVyYXRvcihib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsK
LSAgICB0aGlzLmNhcHR1cmVUb1RleHR1cmUgPSBjYXB0dXJlVG9UZXh0dXJlOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyBkZXZpY2UgbmFtZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBuZXcg
VmlkZW9DYXB0dXJlckFuZHJvaWQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgU3RyaW5nW10gZ2V0
RGV2aWNlTmFtZXMoKSB7Ci0gICAgQXJyYXlMaXN0PFN0cmluZz4gbmFtZXNMaXN0ID0gbmV3IEFy
cmF5TGlzdDw+KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5nZXROdW1iZXJPZkNhbWVyYXMoKTsgKytpKSB7Ci0gICAgICBTdHJpbmcgbmFtZSA9IGdl
dERldmljZU5hbWUoaSk7Ci0gICAgICBpZiAobmFtZSAhPSBudWxsKSB7Ci0gICAgICAgIG5hbWVz
TGlzdC5hZGQobmFtZSk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJbmRleDogIiArIGkgKyAi
LiAiICsgbmFtZSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW5k
ZXg6ICIgKyBpICsgIi4gRmFpbGVkIHRvIHF1ZXJ5IGNhbWVyYSBuYW1lLiIpOwotICAgICAgfQot
ICAgIH0KLSAgICBTdHJpbmdbXSBuYW1lc0FycmF5ID0gbmV3IFN0cmluZ1tuYW1lc0xpc3Quc2l6
ZSgpXTsKLSAgICByZXR1cm4gbmFtZXNMaXN0LnRvQXJyYXkobmFtZXNBcnJheSk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNGcm9udEZhY2luZyhTdHJpbmcgZGV2aWNl
TmFtZSkgewotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IGdl
dENhbWVyYUluZm8oZ2V0Q2FtZXJhSW5kZXgoZGV2aWNlTmFtZSkpOwotICAgIHJldHVybiBpbmZv
ICE9IG51bGwgJiYgaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJh
SW5mby5DQU1FUkFfRkFDSU5HX0ZST05UOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBi
b29sZWFuIGlzQmFja0ZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IGdldENhbWVyYUluZm8oZ2V0Q2FtZXJhSW5k
ZXgoZGV2aWNlTmFtZSkpOwotICAgIHJldHVybiBpbmZvICE9IG51bGwgJiYgaW5mby5mYWNpbmcg
PT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0JBQ0s7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3Vw
cG9ydGVkRm9ybWF0cyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIHJldHVybiBnZXRTdXBwb3J0
ZWRGb3JtYXRzKGdldENhbWVyYUluZGV4KGRldmljZU5hbWUpKTsKLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0dXJlciBjcmVhdGVDYXB0dXJlcigKLSAgICAgIFN0
cmluZyBkZXZpY2VOYW1lLCBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYUV2ZW50c0hhbmRsZXIg
ZXZlbnRzSGFuZGxlcikgewotICAgIHJldHVybiBuZXcgQ2FtZXJhMUNhcHR1cmVyKGRldmljZU5h
bWUsIGV2ZW50c0hhbmRsZXIsIGNhcHR1cmVUb1RleHR1cmUpOwotICB9Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBnZXRDYW1lcmFJbmZvKGlu
dCBpbmRleCkgewotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9
IG5ldyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvKCk7Ci0gICAgdHJ5IHsKLSAg
ICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldENhbWVyYUluZm8oaW5kZXgsIGluZm8pOwot
ICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZ2V0Q2Ft
ZXJhSW5mbyBmYWlsZWQgb24gaW5kZXggIiArIGluZGV4LCBlKTsKLSAgICAgIHJldHVybiBudWxs
OwotICAgIH0KLSAgICByZXR1cm4gaW5mbzsKLSAgfQotCi0gIHN0YXRpYyBzeW5jaHJvbml6ZWQg
TGlzdDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKGludCBjYW1lcmFJZCkgewot
ICAgIGlmIChjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzID09IG51bGwpIHsKLSAgICAgIGNhY2hlZFN1
cHBvcnRlZEZvcm1hdHMgPSBuZXcgQXJyYXlMaXN0PExpc3Q8Q2FwdHVyZUZvcm1hdD4+KCk7Ci0g
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJl
ck9mQ2FtZXJhcygpOyArK2kpIHsKLSAgICAgICAgY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5hZGQo
ZW51bWVyYXRlRm9ybWF0cyhpKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBjYWNoZWRT
dXBwb3J0ZWRGb3JtYXRzLmdldChjYW1lcmFJZCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBM
aXN0PENhcHR1cmVGb3JtYXQ+IGVudW1lcmF0ZUZvcm1hdHMoaW50IGNhbWVyYUlkKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIkdldCBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY2FtZXJhIGluZGV4ICIg
KyBjYW1lcmFJZCArICIuIik7Ci0gICAgZmluYWwgbG9uZyBzdGFydFRpbWVNcyA9IFN5c3RlbUNs
b2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LlBhcmFtZXRlcnMgcGFyYW1ldGVyczsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1l
cmEgPSBudWxsOwotICAgIHRyeSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiT3BlbmluZyBjYW1l
cmEgd2l0aCBpbmRleCAiICsgY2FtZXJhSWQpOwotICAgICAgY2FtZXJhID0gYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEub3BlbihjYW1lcmFJZCk7Ci0gICAgICBwYXJhbWV0ZXJzID0gY2FtZXJhLmdl
dFBhcmFtZXRlcnMoKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJPcGVuIGNhbWVyYSBmYWlsZWQgb24gY2FtZXJhIGluZGV4ICIgKyBj
YW1lcmFJZCwgZSk7Ci0gICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0Pigp
OwotICAgIH0gZmluYWxseSB7Ci0gICAgICBpZiAoY2FtZXJhICE9IG51bGwpIHsKLSAgICAgICAg
Y2FtZXJhLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBmaW5hbCBMaXN0PENhcHR1
cmVGb3JtYXQ+IGZvcm1hdExpc3QgPSBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQ+KCk7Ci0g
ICAgdHJ5IHsKLSAgICAgIGludCBtaW5GcHMgPSAwOwotICAgICAgaW50IG1heEZwcyA9IDA7Ci0g
ICAgICBmaW5hbCBMaXN0PGludFtdPiBsaXN0RnBzUmFuZ2UgPSBwYXJhbWV0ZXJzLmdldFN1cHBv
cnRlZFByZXZpZXdGcHNSYW5nZSgpOwotICAgICAgaWYgKGxpc3RGcHNSYW5nZSAhPSBudWxsKSB7
Ci0gICAgICAgIC8vIGdldFN1cHBvcnRlZFByZXZpZXdGcHNSYW5nZSgpIHJldHVybnMgYSBzb3J0
ZWQgbGlzdC4gVGFrZSB0aGUgZnBzIHJhbmdlCi0gICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGhpZ2hlc3QgZnBzLgotICAgICAgICBmaW5hbCBpbnRbXSByYW5nZSA9IGxpc3RGcHNSYW5n
ZS5nZXQobGlzdEZwc1JhbmdlLnNpemUoKSAtIDEpOwotICAgICAgICBtaW5GcHMgPSByYW5nZVth
bmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLlBSRVZJRVdfRlBTX01JTl9JTkRFWF07
Ci0gICAgICAgIG1heEZwcyA9IHJhbmdlW2FuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRl
cnMuUFJFVklFV19GUFNfTUFYX0lOREVYXTsKLSAgICAgIH0KLSAgICAgIGZvciAoYW5kcm9pZC5o
YXJkd2FyZS5DYW1lcmEuU2l6ZSBzaXplIDogcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3
U2l6ZXMoKSkgewotICAgICAgICBmb3JtYXRMaXN0LmFkZChuZXcgQ2FwdHVyZUZvcm1hdChzaXpl
LndpZHRoLCBzaXplLmhlaWdodCwgbWluRnBzLCBtYXhGcHMpKTsKLSAgICAgIH0KLSAgICB9IGNh
dGNoIChFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImdldFN1cHBvcnRlZEZv
cm1hdHMoKSBmYWlsZWQgb24gY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCwgZSk7Ci0gICAgfQot
Ci0gICAgZmluYWwgbG9uZyBlbmRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUo
KTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiR2V0IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjYW1lcmEg
aW5kZXggIiArIGNhbWVyYUlkICsgIiBkb25lLiIKLSAgICAgICAgICAgICsgIiBUaW1lIHNwZW50
OiAiICsgKGVuZFRpbWVNcyAtIHN0YXJ0VGltZU1zKSArICIgbXMuIik7Ci0gICAgcmV0dXJuIGZv
cm1hdExpc3Q7Ci0gIH0KLQotICAvLyBDb252ZXJ0IGZyb20gYW5kcm9pZC5oYXJkd2FyZS5DYW1l
cmEuU2l6ZSB0byBTaXplLgotICBzdGF0aWMgTGlzdDxTaXplPiBjb252ZXJ0U2l6ZXMoTGlzdDxh
bmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5TaXplPiBjYW1lcmFTaXplcykgewotICAgIGZpbmFsIExp
c3Q8U2l6ZT4gc2l6ZXMgPSBuZXcgQXJyYXlMaXN0PFNpemU+KCk7Ci0gICAgZm9yIChhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5TaXplIHNpemUgOiBjYW1lcmFTaXplcykgewotICAgICAgc2l6ZXMu
YWRkKG5ldyBTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KSk7Ci0gICAgfQotICAgIHJldHVy
biBzaXplczsKLSAgfQotCi0gIC8vIENvbnZlcnQgZnJvbSBpbnRbMl0gdG8gQ2FwdHVyZUZvcm1h
dC5GcmFtZXJhdGVSYW5nZS4KLSAgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVS
YW5nZT4gY29udmVydEZyYW1lcmF0ZXMoTGlzdDxpbnRbXT4gYXJyYXlSYW5nZXMpIHsKLSAgICBm
aW5hbCBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IHJhbmdlcyA9IG5ldyBBcnJh
eUxpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4oKTsKLSAgICBmb3IgKGludFtdIHJh
bmdlIDogYXJyYXlSYW5nZXMpIHsKLSAgICAgIHJhbmdlcy5hZGQobmV3IENhcHR1cmVGb3JtYXQu
RnJhbWVyYXRlUmFuZ2UoCi0gICAgICAgICAgcmFuZ2VbYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
UGFyYW1ldGVycy5QUkVWSUVXX0ZQU19NSU5fSU5ERVhdLAotICAgICAgICAgIHJhbmdlW2FuZHJv
aWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMuUFJFVklFV19GUFNfTUFYX0lOREVYXSkpOwot
ICAgIH0KLSAgICByZXR1cm4gcmFuZ2VzOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgY2FtZXJh
IGluZGV4IGZvciBjYW1lcmEgd2l0aCBuYW1lIHxkZXZpY2VOYW1lfCwgb3IgdGhyb3dzIElsbGVn
YWxBcmd1bWVudEV4Y2VwdGlvbgotICAvLyBpZiBubyBzdWNoIGNhbWVyYSBjYW4gYmUgZm91bmQu
Ci0gIHN0YXRpYyBpbnQgZ2V0Q2FtZXJhSW5kZXgoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiZ2V0Q2FtZXJhSW5kZXg6ICIgKyBkZXZpY2VOYW1lKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9mQ2FtZXJh
cygpOyArK2kpIHsKLSAgICAgIGlmIChkZXZpY2VOYW1lLmVxdWFscyhnZXREZXZpY2VOYW1lKGkp
KSkgewotICAgICAgICByZXR1cm4gaTsKLSAgICAgIH0KLSAgICB9Ci0gICAgdGhyb3cgbmV3IEls
bGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gc3VjaCBjYW1lcmE6ICIgKyBkZXZpY2VOYW1lKTsK
LSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGNhbWVyYSB3aXRoIGNhbWVyYSBp
bmRleC4gUmV0dXJucyBudWxsIGlmIHRoZQotICAvLyBjYW1lcmEgY2FuIG5vdCBiZSB1c2VkLgot
ICBzdGF0aWMgU3RyaW5nIGdldERldmljZU5hbWUoaW50IGluZGV4KSB7Ci0gICAgYW5kcm9pZC5o
YXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvID0gZ2V0Q2FtZXJhSW5mbyhpbmRleCk7Ci0g
ICAgaWYgKGluZm8gPT0gbnVsbCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAg
U3RyaW5nIGZhY2luZyA9Ci0gICAgICAgIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfRlJPTlQpID8gImZyb250IiA6ICJiYWNr
IjsKLSAgICByZXR1cm4gIkNhbWVyYSAiICsgaW5kZXggKyAiLCBGYWNpbmcgIiArIGZhY2luZyAr
ICIsIE9yaWVudGF0aW9uICIgKyBpbmZvLm9yaWVudGF0aW9uOwotICB9Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL0NhbWVyYTFTZXNzaW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9DYW1lcmExU2Vzc2lvbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0NhbWVyYTFTZXNzaW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDQgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1w
b3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5M
aXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IG9yZy53
ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5NZXRyaWNzLkhpc3RvZ3JhbTsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0
aW9uIikKLXB1YmxpYyBjbGFzcyBDYW1lcmExU2Vzc2lvbiBpbXBsZW1lbnRzIENhbWVyYVNlc3Np
b24gewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYTFTZXNzaW9u
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9DQVBUVVJFX0JVRkZFUlMg
PSAzOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmExU3RhcnRUaW1l
TXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFuZHJv
aWQuQ2FtZXJhMS5TdGFydFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmExU3RvcFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBIaXN0
b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmExLlN0b3BUaW1lTXMiLCAx
LCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMVJl
c29sdXRpb25IaXN0b2dyYW0gPSBIaXN0b2dyYW0uY3JlYXRlRW51bWVyYXRpb24oCi0gICAgICAi
V2ViUlRDLkFuZHJvaWQuQ2FtZXJhMS5SZXNvbHV0aW9uIiwgQ2FtZXJhRW51bWVyYXRpb25BbmRy
b2lkLkNPTU1PTl9SRVNPTFVUSU9OUy5zaXplKCkpOwotCi0gIHByaXZhdGUgc3RhdGljIGVudW0g
U2Vzc2lvblN0YXRlIHsgUlVOTklORywgU1RPUFBFRCB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBIYW5k
bGVyIGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgRXZlbnRzIGV2ZW50czsK
LSAgcHJpdmF0ZSBmaW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmU7Ci0gIHByaXZhdGUgZmlu
YWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gIHByaXZhdGUgZmluYWwgU3VyZmFjZVRl
eHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gIHByaXZhdGUgZmluYWwgaW50IGNh
bWVyYUlkOwotICBwcml2YXRlIGZpbmFsIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQg
aGVpZ2h0OwotICBwcml2YXRlIGZpbmFsIGludCBmcmFtZXJhdGU7Ci0gIHByaXZhdGUgZmluYWwg
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhOwotICBwcml2YXRlIGZpbmFsIGFuZHJvaWQu
aGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbzsKLSAgcHJpdmF0ZSBmaW5hbCBDYXB0dXJl
Rm9ybWF0IGNhcHR1cmVGb3JtYXQ7Ci0gIC8vIFVzZWQgb25seSBmb3Igc3RhdHMuIE9ubHkgdXNl
ZCBvbiB0aGUgY2FtZXJhIHRocmVhZC4KLSAgcHJpdmF0ZSBmaW5hbCBsb25nIGNvbnN0cnVjdGlv
blRpbWVOczsgLy8gQ29uc3RydWN0aW9uIHRpbWUgb2YgdGhpcyBjbGFzcy4KLQotICBwcml2YXRl
IFNlc3Npb25TdGF0ZSBzdGF0ZTsKLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVSZXBvcnRl
ZCA9IGZhbHNlOwotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjcmVhdGUoZmluYWwgQ3JlYXRlU2Vz
c2lvbkNhbGxiYWNrIGNhbGxiYWNrLCBmaW5hbCBFdmVudHMgZXZlbnRzLAotICAgICAgZmluYWwg
Ym9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlLCBmaW5hbCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4
dCwKLSAgICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVy
LCBmaW5hbCBpbnQgY2FtZXJhSWQsIGZpbmFsIGludCB3aWR0aCwKLSAgICAgIGZpbmFsIGludCBo
ZWlnaHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBmaW5hbCBsb25nIGNvbnN0cnVjdGlv
blRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIExvZ2dpbmcuZChUQUcsICJPcGVuIGNh
bWVyYSAiICsgY2FtZXJhSWQpOwotICAgIGV2ZW50cy5vbkNhbWVyYU9wZW5pbmcoKTsKLQotICAg
IGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYTsKLSAgICB0cnkgewotICAgICAg
Y2FtZXJhID0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEub3BlbihjYW1lcmFJZCk7Ci0gICAgfSBj
YXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBjYWxsYmFjay5vbkZhaWx1cmUoZS5n
ZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBj
YW1lcmEuc2V0UHJldmlld1RleHR1cmUoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRl
eHR1cmUoKSk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgY2FtZXJhLnJl
bGVhc2UoKTsKLSAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2Ft
ZXJhSW5mbyBpbmZvID0gbmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8oKTsK
LSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXRDYW1lcmFJbmZvKGNhbWVyYUlkLCBpbmZv
KTsKLQotICAgIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1l
dGVycyA9IGNhbWVyYS5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgZmluYWwgQ2FwdHVyZUZvcm1hdCBj
YXB0dXJlRm9ybWF0ID0KLSAgICAgICAgZmluZENsb3Nlc3RDYXB0dXJlRm9ybWF0KHBhcmFtZXRl
cnMsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgZmluYWwgU2l6ZSBwaWN0dXJlU2l6
ZSA9IGZpbmRDbG9zZXN0UGljdHVyZVNpemUocGFyYW1ldGVycywgd2lkdGgsIGhlaWdodCk7Ci0K
LSAgICB1cGRhdGVDYW1lcmFQYXJhbWV0ZXJzKGNhbWVyYSwgcGFyYW1ldGVycywgY2FwdHVyZUZv
cm1hdCwgcGljdHVyZVNpemUsIGNhcHR1cmVUb1RleHR1cmUpOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSB0aGUgY2FwdHVyZSBidWZmZXJzLgotICAgIGlmICghY2FwdHVyZVRvVGV4dHVyZSkgewotICAg
ICAgZmluYWwgaW50IGZyYW1lU2l6ZSA9IGNhcHR1cmVGb3JtYXQuZnJhbWVTaXplKCk7Ci0gICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9DQVBUVVJFX0JVRkZFUlM7ICsraSkgewot
ICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJl
Y3QoZnJhbWVTaXplKTsKLSAgICAgICAgY2FtZXJhLmFkZENhbGxiYWNrQnVmZmVyKGJ1ZmZlci5h
cnJheSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDYWxjdWxhdGUgb3JpZW50YXRpb24g
bWFudWFsbHkgYW5kIHNlbmQgaXQgYXMgQ1ZPIGluc3RlZC4KLSAgICBjYW1lcmEuc2V0RGlzcGxh
eU9yaWVudGF0aW9uKDAgLyogZGVncmVlcyAqLyk7Ci0KLSAgICBjYWxsYmFjay5vbkRvbmUoCi0g
ICAgICAgIG5ldyBDYW1lcmExU2Vzc2lvbihldmVudHMsIGNhcHR1cmVUb1RleHR1cmUsIGFwcGxp
Y2F0aW9uQ29udGV4dCwgc3VyZmFjZVRleHR1cmVIZWxwZXIsCi0gICAgICAgICAgICBjYW1lcmFJ
ZCwgd2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlLCBjYW1lcmEsIGluZm8sIGNhcHR1cmVGb3JtYXQs
IGNvbnN0cnVjdGlvblRpbWVOcykpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB1cGRh
dGVDYW1lcmFQYXJhbWV0ZXJzKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSwKLSAgICAg
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVycywgQ2FwdHVyZUZv
cm1hdCBjYXB0dXJlRm9ybWF0LCBTaXplIHBpY3R1cmVTaXplLAotICAgICAgYm9vbGVhbiBjYXB0
dXJlVG9UZXh0dXJlKSB7Ci0gICAgZmluYWwgTGlzdDxTdHJpbmc+IGZvY3VzTW9kZXMgPSBwYXJh
bWV0ZXJzLmdldFN1cHBvcnRlZEZvY3VzTW9kZXMoKTsKLQotICAgIHBhcmFtZXRlcnMuc2V0UHJl
dmlld0Zwc1JhbmdlKGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1pbiwgY2FwdHVyZUZvcm1hdC5m
cmFtZXJhdGUubWF4KTsKLSAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdTaXplKGNhcHR1cmVGb3Jt
YXQud2lkdGgsIGNhcHR1cmVGb3JtYXQuaGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLnNldFBpY3R1
cmVTaXplKHBpY3R1cmVTaXplLndpZHRoLCBwaWN0dXJlU2l6ZS5oZWlnaHQpOwotICAgIGlmICgh
Y2FwdHVyZVRvVGV4dHVyZSkgewotICAgICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3Rm9ybWF0KGNh
cHR1cmVGb3JtYXQuaW1hZ2VGb3JtYXQpOwotICAgIH0KLQotICAgIGlmIChwYXJhbWV0ZXJzLmlz
VmlkZW9TdGFiaWxpemF0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0Vmlk
ZW9TdGFiaWxpemF0aW9uKHRydWUpOwotICAgIH0KLSAgICBpZiAoZm9jdXNNb2Rlcy5jb250YWlu
cyhhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVfQ09OVElOVU9V
U19WSURFTykpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0Rm9jdXNNb2RlKGFuZHJvaWQuaGFyZHdh
cmUuQ2FtZXJhLlBhcmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKTsKLSAgICB9
Ci0gICAgY2FtZXJhLnNldFBhcmFtZXRlcnMocGFyYW1ldGVycyk7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBDYXB0dXJlRm9ybWF0IGZpbmRDbG9zZXN0Q2FwdHVyZUZvcm1hdCgKLSAgICAgIGFu
ZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVycywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgLy8gRmluZCBjbG9zZXN0IHN1cHBvcnRl
ZCBmb3JtYXQgZm9yIHx3aWR0aHwgeCB8aGVpZ2h0fCBAIHxmcmFtZXJhdGV8LgotICAgIGZpbmFs
IExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gc3VwcG9ydGVkRnJhbWVyYXRlcyA9
Ci0gICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRGcmFtZXJhdGVzKHBhcmFtZXRlcnMu
Z2V0U3VwcG9ydGVkUHJldmlld0Zwc1JhbmdlKCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJBdmFp
bGFibGUgZnBzIHJhbmdlczogIiArIHN1cHBvcnRlZEZyYW1lcmF0ZXMpOwotCi0gICAgZmluYWwg
Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBmcHNSYW5nZSA9Ci0gICAgICAgIENhbWVyYUVu
dW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2Uoc3VwcG9y
dGVkRnJhbWVyYXRlcywgZnJhbWVyYXRlKTsKLQotICAgIGZpbmFsIFNpemUgcHJldmlld1NpemUg
PSBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0gICAg
ICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRl
ZFByZXZpZXdTaXplcygpKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgQ2FtZXJhRW51bWVyYXRpb25B
bmRyb2lkLnJlcG9ydENhbWVyYVJlc29sdXRpb24oY2FtZXJhMVJlc29sdXRpb25IaXN0b2dyYW0s
IHByZXZpZXdTaXplKTsKLQotICAgIHJldHVybiBuZXcgQ2FwdHVyZUZvcm1hdChwcmV2aWV3U2l6
ZS53aWR0aCwgcHJldmlld1NpemUuaGVpZ2h0LCBmcHNSYW5nZSk7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBTaXplIGZpbmRDbG9zZXN0UGljdHVyZVNpemUoCi0gICAgICBhbmRyb2lkLmhhcmR3
YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIGludCB3aWR0aCwgaW50IGhlaWdodCkg
ewotICAgIHJldHVybiBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRl
ZFNpemUoCi0gICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJz
LmdldFN1cHBvcnRlZFBpY3R1cmVTaXplcygpKSwgd2lkdGgsIGhlaWdodCk7Ci0gIH0KLQotICBw
cml2YXRlIENhbWVyYTFTZXNzaW9uKEV2ZW50cyBldmVudHMsIGJvb2xlYW4gY2FwdHVyZVRvVGV4
dHVyZSwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgaW50IGNhbWVyYUlkLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCBmcmFtZXJhdGUsCi0gICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1l
cmEsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbywKLSAgICAgIENhcHR1
cmVGb3JtYXQgY2FwdHVyZUZvcm1hdCwgbG9uZyBjb25zdHJ1Y3Rpb25UaW1lTnMpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiQ3JlYXRlIG5ldyBjYW1lcmExIHNlc3Npb24gb24gY2FtZXJhICIgKyBj
YW1lcmFJZCk7Ci0KLSAgICB0aGlzLmNhbWVyYVRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcigp
OwotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICAgIHRoaXMuY2FwdHVyZVRvVGV4dHVyZSA9
IGNhcHR1cmVUb1RleHR1cmU7Ci0gICAgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHQgPSBhcHBsaWNh
dGlvbkNvbnRleHQ7Ci0gICAgdGhpcy5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0
dXJlSGVscGVyOwotICAgIHRoaXMuY2FtZXJhSWQgPSBjYW1lcmFJZDsKLSAgICB0aGlzLndpZHRo
ID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgdGhpcy5mcmFtZXJhdGUg
PSBmcmFtZXJhdGU7Ci0gICAgdGhpcy5jYW1lcmEgPSBjYW1lcmE7Ci0gICAgdGhpcy5pbmZvID0g
aW5mbzsKLSAgICB0aGlzLmNhcHR1cmVGb3JtYXQgPSBjYXB0dXJlRm9ybWF0OwotICAgIHRoaXMu
Y29uc3RydWN0aW9uVGltZU5zID0gY29uc3RydWN0aW9uVGltZU5zOwotCi0gICAgc3RhcnRDYXB0
dXJpbmcoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAg
IExvZ2dpbmcuZChUQUcsICJTdG9wIGNhbWVyYTEgc2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNhbWVy
YUlkKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoc3RhdGUgIT0gU2Vz
c2lvblN0YXRlLlNUT1BQRUQpIHsKLSAgICAgIGZpbmFsIGxvbmcgc3RvcFN0YXJ0VGltZSA9IFN5
c3RlbS5uYW5vVGltZSgpOwotICAgICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAg
ICAgIHN0b3BJbnRlcm5hbCgpOwotICAgICAgZmluYWwgaW50IHN0b3BUaW1lTXMgPSAoaW50KSBU
aW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIHN0b3BTdGFy
dFRpbWUpOwotICAgICAgY2FtZXJhMVN0b3BUaW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0b3BU
aW1lTXMpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFydENhcHR1cmluZygpIHsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiU3RhcnQgY2FwdHVyaW5nIik7Ci0gICAgY2hlY2tJc09uQ2Ft
ZXJhVGhyZWFkKCk7Ci0KLSAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5SVU5OSU5HOwotCi0gICAg
Y2FtZXJhLnNldEVycm9yQ2FsbGJhY2sobmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkVycm9y
Q2FsbGJhY2soKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3Io
aW50IGVycm9yLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmEpIHsKLSAgICAgICAgU3Ry
aW5nIGVycm9yTWVzc2FnZTsKLSAgICAgICAgaWYgKGVycm9yID09IGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLkNBTUVSQV9FUlJPUl9TRVJWRVJfRElFRCkgewotICAgICAgICAgIGVycm9yTWVzc2Fn
ZSA9ICJDYW1lcmEgc2VydmVyIGRpZWQhIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBl
cnJvck1lc3NhZ2UgPSAiQ2FtZXJhIGVycm9yOiAiICsgZXJyb3I7Ci0gICAgICAgIH0KLSAgICAg
ICAgTG9nZ2luZy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgc3RhdGUgPSBTZXNzaW9u
U3RhdGUuU1RPUFBFRDsKLSAgICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAgICAgIGlmIChlcnJv
ciA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DQU1FUkFfRVJST1JfRVZJQ1RFRCkgewotICAg
ICAgICAgIGV2ZW50cy5vbkNhbWVyYURpc2Nvbm5lY3RlZChDYW1lcmExU2Vzc2lvbi50aGlzKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBldmVudHMub25DYW1lcmFFcnJvcihDYW1lcmEx
U2Vzc2lvbi50aGlzLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7
Ci0KLSAgICBpZiAoY2FwdHVyZVRvVGV4dHVyZSkgewotICAgICAgbGlzdGVuRm9yVGV4dHVyZUZy
YW1lcygpOwotICAgIH0gZWxzZSB7Ci0gICAgICBsaXN0ZW5Gb3JCeXRlYnVmZmVyRnJhbWVzKCk7
Ci0gICAgfQotICAgIHRyeSB7Ci0gICAgICBjYW1lcmEuc3RhcnRQcmV2aWV3KCk7Ci0gICAgfSBj
YXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5T
VE9QUEVEOwotICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAgICBldmVudHMub25DYW1lcmFFcnJv
cih0aGlzLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0
b3BJbnRlcm5hbCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBpbnRlcm5hbCIpOwotICAg
IGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3Rv
cExpc3RlbmluZygpOwotCi0gICAgLy8gTm90ZTogc3RvcFByZXZpZXcgb3Igb3RoZXIgZHJpdmVy
IGNvZGUgbWlnaHQgZGVhZGxvY2suIERlYWRsb2NrIGluCi0gICAgLy8gYW5kcm9pZC5oYXJkd2Fy
ZS5DYW1lcmEuX3N0b3BQcmV2aWV3KE5hdGl2ZSBNZXRob2QpIGhhcyBiZWVuIG9ic2VydmVkIG9u
Ci0gICAgLy8gTmV4dXMgNSAoaGFtbWVyaGVhZCksIE9TIHZlcnNpb24gTE1ZNDhJLgotICAgIGNh
bWVyYS5zdG9wUHJldmlldygpOwotICAgIGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgZXZlbnRzLm9u
Q2FtZXJhQ2xvc2VkKHRoaXMpOwotCi0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgZG9uZSIpOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxpc3RlbkZvclRleHR1cmVGcmFtZXMoKSB7Ci0gICAgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobmV3IFN1cmZhY2VUZXh0dXJlSGVscGVy
Lk9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICAgIGludCBv
ZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVzdGFtcE5zKSB7
Ci0gICAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgICAgIGlmIChzdGF0ZSAh
PSBTZXNzaW9uU3RhdGUuUlVOTklORykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJUZXh0
dXJlIGZyYW1lIGNhcHR1cmVkIGJ1dCBjYW1lcmEgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuIik7Ci0g
ICAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0
ZWQpIHsKLSAgICAgICAgICBmaW5hbCBpbnQgc3RhcnRUaW1lTXMgPQotICAgICAgICAgICAgICAo
aW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIGNv
bnN0cnVjdGlvblRpbWVOcyk7Ci0gICAgICAgICAgY2FtZXJhMVN0YXJ0VGltZU1zSGlzdG9ncmFt
LmFkZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0gICAgICAgICAgZmlyc3RGcmFtZVJlcG9ydGVkID0g
dHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCByb3RhdGlvbiA9IGdldEZyYW1lT3JpZW50
YXRpb24oKTsKLSAgICAgICAgaWYgKGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLkNhbWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19GUk9OVCkgewotICAgICAgICAgIC8vIFVuZG8g
dGhlIG1pcnJvciB0aGF0IHRoZSBPUyAiaGVscHMiIHVzIHdpdGguCi0gICAgICAgICAgLy8gaHR0
cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9oYXJkd2FyZS9DYW1l
cmEuaHRtbCNzZXREaXNwbGF5T3JpZW50YXRpb24oaW50KQotICAgICAgICAgIHRyYW5zZm9ybU1h
dHJpeCA9IFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXMoCi0gICAgICAgICAgICAgIHRy
YW5zZm9ybU1hdHJpeCwgUmVuZGVyZXJDb21tb24uaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgZXZlbnRzLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoQ2FtZXJhMVNl
c3Npb24udGhpcywgY2FwdHVyZUZvcm1hdC53aWR0aCwKLSAgICAgICAgICAgIGNhcHR1cmVGb3Jt
YXQuaGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgcm90YXRpb24sIHRpbWVz
dGFtcE5zKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsaXN0ZW5G
b3JCeXRlYnVmZmVyRnJhbWVzKCkgewotICAgIGNhbWVyYS5zZXRQcmV2aWV3Q2FsbGJhY2tXaXRo
QnVmZmVyKG5ldyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QcmV2aWV3Q2FsbGJhY2soKSB7Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uUHJldmlld0ZyYW1lKGJ5dGVbXSBk
YXRhLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYWxsYmFja0NhbWVyYSkgewotICAgICAgICBj
aGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgICBpZiAoY2FsbGJhY2tDYW1lcmEgIT0g
Y2FtZXJhKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbGxiYWNrIGZyb20gYSBkaWZm
ZXJlbnQgY2FtZXJhLiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIik7Ci0gICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5SVU5O
SU5HKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkJ5dGVidWZmZXIgZnJhbWUgY2FwdHVy
ZWQgYnV0IGNhbWVyYSBpcyBubyBsb25nZXIgcnVubmluZy4iKTsKLSAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLQotICAgICAgICBmaW5hbCBsb25nIGNhcHR1cmVUaW1lTnMgPSBUaW1lVW5p
dC5NSUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0K
LSAgICAgICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQpIHsKLSAgICAgICAgICBmaW5hbCBpbnQg
c3RhcnRUaW1lTXMgPQotICAgICAgICAgICAgICAoaW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50
b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIGNvbnN0cnVjdGlvblRpbWVOcyk7Ci0gICAgICAg
ICAgY2FtZXJhMVN0YXJ0VGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0g
ICAgICAgICAgZmlyc3RGcmFtZVJlcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAg
IGV2ZW50cy5vbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKENhbWVyYTFTZXNzaW9uLnRoaXMsIGRh
dGEsIGNhcHR1cmVGb3JtYXQud2lkdGgsCi0gICAgICAgICAgICBjYXB0dXJlRm9ybWF0LmhlaWdo
dCwgZ2V0RnJhbWVPcmllbnRhdGlvbigpLCBjYXB0dXJlVGltZU5zKTsKLSAgICAgICAgY2FtZXJh
LmFkZENhbGxiYWNrQnVmZmVyKGRhdGEpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJp
dmF0ZSBpbnQgZ2V0RGV2aWNlT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IG9yaWVudGF0aW9uID0g
MDsKLQotICAgIFdpbmRvd01hbmFnZXIgd20gPSAoV2luZG93TWFuYWdlcikgYXBwbGljYXRpb25D
b250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAgc3dp
dGNoICh3bS5nZXREZWZhdWx0RGlzcGxheSgpLmdldFJvdGF0aW9uKCkpIHsKLSAgICAgIGNhc2Ug
U3VyZmFjZS5ST1RBVElPTl85MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSA5MDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMTgwOgotICAgICAgICBvcmllbnRh
dGlvbiA9IDE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05f
MjcwOgotICAgICAgICBvcmllbnRhdGlvbiA9IDI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIFN1cmZhY2UuUk9UQVRJT05fMDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9yaWVudGF0
aW9uID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBvcmllbnRhdGlvbjsK
LSAgfQotCi0gIHByaXZhdGUgaW50IGdldEZyYW1lT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IHJv
dGF0aW9uID0gZ2V0RGV2aWNlT3JpZW50YXRpb24oKTsKLSAgICBpZiAoaW5mby5mYWNpbmcgPT0g
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0JBQ0spIHsK
LSAgICAgIHJvdGF0aW9uID0gMzYwIC0gcm90YXRpb247Ci0gICAgfQotICAgIHJldHVybiAoaW5m
by5vcmllbnRhdGlvbiArIHJvdGF0aW9uKSAlIDM2MDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBj
aGVja0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkg
IT0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSkgewotICAgICAg
dGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhyZWFkIik7Ci0gICAgfQot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlci5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0
IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJh
Mi5DYW1lcmFNYW5hZ2VyOwotCi1AVGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNzIENhbWVyYTJD
YXB0dXJlciBleHRlbmRzIENhbWVyYUNhcHR1cmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0
IGNvbnRleHQ7Ci0gIHByaXZhdGUgZmluYWwgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyOwot
Ci0gIHB1YmxpYyBDYW1lcmEyQ2FwdHVyZXIoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgY2FtZXJh
TmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyKSB7Ci0gICAgc3VwZXIoY2Ft
ZXJhTmFtZSwgZXZlbnRzSGFuZGxlciwgbmV3IENhbWVyYTJFbnVtZXJhdG9yKGNvbnRleHQpKTsK
LQotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgY2FtZXJhTWFuYWdlciA9IChDYW1l
cmFNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklD
RSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2FtZXJhU2Vz
c2lvbihDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjayBjcmVhdGVTZXNzaW9uQ2Fs
bGJhY2ssCi0gICAgICBDYW1lcmFTZXNzaW9uLkV2ZW50cyBldmVudHMsIENvbnRleHQgYXBwbGlj
YXRpb25Db250ZXh0LAotICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVI
ZWxwZXIsIFN0cmluZyBjYW1lcmFOYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICBp
bnQgZnJhbWVyYXRlKSB7Ci0gICAgQ2FtZXJhMlNlc3Npb24uY3JlYXRlKGNyZWF0ZVNlc3Npb25D
YWxsYmFjaywgZXZlbnRzLCBhcHBsaWNhdGlvbkNvbnRleHQsIGNhbWVyYU1hbmFnZXIsCi0gICAg
ICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBjYW1lcmFOYW1lLCB3aWR0aCwgaGVpZ2h0LCBmcmFt
ZXJhdGUpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJFbnVtZXJhdG9y
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyRW51bWVyYXRvci5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJFbnVtZXJh
dG9yLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNDggKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVt
ZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlv
bi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5k
cm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1
cmU7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUNoYXJhY3RlcmlzdGlj
czsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWFuYWdlcjsKLWltcG9y
dCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGE7Ci1pbXBvcnQgYW5kcm9p
ZC5oYXJkd2FyZS5jYW1lcmEyLnBhcmFtcy5TdHJlYW1Db25maWd1cmF0aW9uTWFwOwotaW1wb3J0
IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9y
dCBhbmRyb2lkLnV0aWwuQW5kcm9pZEV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUmFu
Z2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNo
TWFwOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLUBU
YXJnZXRBcGkoMjEpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMkVudW1lcmF0b3IgaW1wbGVtZW50cyBD
YW1lcmFFbnVtZXJhdG9yIHsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJD
YW1lcmEyRW51bWVyYXRvciI7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGRvdWJsZSBOQU5PX1NF
Q09ORFNfUEVSX1NFQ09ORCA9IDEuMGU5OwotCi0gIC8vIEVhY2ggZW50cnkgY29udGFpbnMgdGhl
IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBhIGdpdmVuIGNhbWVyYSBpbmRleC4gVGhlIGZvcm1hdHMg
YXJlIGVudW1lcmF0ZWQKLSAgLy8gbGF6aWx5IGluIGdldFN1cHBvcnRlZEZvcm1hdHMoKSwgYW5k
IGNhY2hlZCBmb3IgZnV0dXJlIHJlZmVyZW5jZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWFw
PFN0cmluZywgTGlzdDxDYXB0dXJlRm9ybWF0Pj4gY2FjaGVkU3VwcG9ydGVkRm9ybWF0cyA9Ci0g
ICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8Q2FwdHVyZUZvcm1hdD4+KCk7Ci0KLSAgZmlu
YWwgQ29udGV4dCBjb250ZXh0OwotICBmaW5hbCBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXI7
Ci0KLSAgcHVibGljIENhbWVyYTJFbnVtZXJhdG9yKENvbnRleHQgY29udGV4dCkgewotICAgIHRo
aXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5jYW1lcmFNYW5hZ2VyID0gKENhbWVyYU1h
bmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNBTUVSQV9TRVJWSUNFKTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGV2aWNlTmFtZXMoKSB7
Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBjYW1lcmFNYW5hZ2VyLmdldENhbWVyYUlkTGlzdCgp
OwotICAgICAgLy8gT24gQW5kcm9pZCBPUyBwcmUgNC40LjIsIGEgY2xhc3Mgd2lsbCBub3QgbG9h
ZCBiZWNhdXNlIG9mIFZlcmlmeUVycm9yIGlmIGl0IGNvbnRhaW5zIGEKLSAgICAgIC8vIGNhdGNo
IHN0YXRlbWVudCB3aXRoIGFuIEV4Y2VwdGlvbiBmcm9tIGEgbmV3ZXIgQVBJLCBldmVuIGlmIHRo
ZSBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkLgotICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5j
b20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA5MTI5Ci0gICAgfSBjYXRjaCAoLyogQ2Ft
ZXJhQWNjZXNzRXhjZXB0aW9uICovIEFuZHJvaWRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkNhbWVyYSBhY2Nlc3MgZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICByZXR1cm4g
bmV3IFN0cmluZ1tdIHt9OwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9v
bGVhbiBpc0Zyb250RmFjaW5nKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgQ2FtZXJhQ2hhcmFj
dGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcyA9IGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhkZXZp
Y2VOYW1lKTsKLQotICAgIHJldHVybiBjaGFyYWN0ZXJpc3RpY3MgIT0gbnVsbAotICAgICAgICAm
JiBjaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5MRU5TX0ZBQ0lORykK
LSAgICAgICAgPT0gQ2FtZXJhTWV0YWRhdGEuTEVOU19GQUNJTkdfRlJPTlQ7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNCYWNrRmFjaW5nKFN0cmluZyBkZXZpY2VOYW1l
KSB7Ci0gICAgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcyA9IGdldENhbWVy
YUNoYXJhY3RlcmlzdGljcyhkZXZpY2VOYW1lKTsKLQotICAgIHJldHVybiBjaGFyYWN0ZXJpc3Rp
Y3MgIT0gbnVsbAotICAgICAgICAmJiBjaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3Rl
cmlzdGljcy5MRU5TX0ZBQ0lORykKLSAgICAgICAgPT0gQ2FtZXJhTWV0YWRhdGEuTEVOU19GQUNJ
TkdfQkFDSzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgTGlzdDxDYXB0dXJlRm9ybWF0
PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgcmV0dXJuIGdl
dFN1cHBvcnRlZEZvcm1hdHMoY29udGV4dCwgZGV2aWNlTmFtZSk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FwdHVyZXIoCi0gICAgICBT
dHJpbmcgZGV2aWNlTmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVy
IGV2ZW50c0hhbmRsZXIpIHsKLSAgICByZXR1cm4gbmV3IENhbWVyYTJDYXB0dXJlcihjb250ZXh0
LCBkZXZpY2VOYW1lLCBldmVudHNIYW5kbGVyKTsKLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhQ2hh
cmFjdGVyaXN0aWNzIGdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhTdHJpbmcgZGV2aWNlTmFtZSkg
ewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MoZGV2aWNlTmFtZSk7Ci0gICAgICAvLyBPbiBBbmRyb2lkIE9TIHByZSA0LjQuMiwg
YSBjbGFzcyB3aWxsIG5vdCBsb2FkIGJlY2F1c2Ugb2YgVmVyaWZ5RXJyb3IgaWYgaXQgY29udGFp
bnMgYQotICAgICAgLy8gY2F0Y2ggc3RhdGVtZW50IHdpdGggYW4gRXhjZXB0aW9uIGZyb20gYSBu
ZXdlciBBUEksIGV2ZW4gaWYgdGhlIGNvZGUgaXMgbmV2ZXIgZXhlY3V0ZWQuCi0gICAgICAvLyBo
dHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0yMDkxMjkK
LSAgICB9IGNhdGNoICgvKiBDYW1lcmFBY2Nlc3NFeGNlcHRpb24gKi8gQW5kcm9pZEV4Y2VwdGlv
biBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGFjY2VzcyBleGNlcHRpb246ICIg
KyBlKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDaGVj
a3MgaWYgQVBJIGlzIHN1cHBvcnRlZCBhbmQgYWxsIGNhbWVyYXMgaGF2ZSBiZXR0ZXIgdGhhbiBs
ZWdhY3kgc3VwcG9ydC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1N1cHBvcnRl
ZChDb250ZXh0IGNvbnRleHQpIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVp
bGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQotICAgIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlciA9IChDYW1lcmFNYW5hZ2VyKSBjb250
ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSk7Ci0gICAgdHJ5IHsK
LSAgICAgIFN0cmluZ1tdIGNhbWVyYUlkcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhSWRMaXN0
KCk7Ci0gICAgICBmb3IgKFN0cmluZyBpZCA6IGNhbWVyYUlkcykgewotICAgICAgICBDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzID0gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MoaWQpOwotICAgICAgICBpZiAoY2hhcmFjdGVyaXN0aWNzLmdldChDYW1l
cmFDaGFyYWN0ZXJpc3RpY3MuSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUwpCi0gICAgICAg
ICAgICA9PSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVW
RUxfTEVHQUNZKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICAvLyBPbiBBbmRyb2lkIE9TIHByZSA0LjQuMiwgYSBjbGFzcyB3aWxsIG5vdCBsb2Fk
IGJlY2F1c2Ugb2YgVmVyaWZ5RXJyb3IgaWYgaXQgY29udGFpbnMgYQotICAgICAgLy8gY2F0Y2gg
c3RhdGVtZW50IHdpdGggYW4gRXhjZXB0aW9uIGZyb20gYSBuZXdlciBBUEksIGV2ZW4gaWYgdGhl
IGNvZGUgaXMgbmV2ZXIgZXhlY3V0ZWQuCi0gICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNv
bS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9pZD0yMDkxMjkKLSAgICB9IGNhdGNoICgvKiBDYW1l
cmFBY2Nlc3NFeGNlcHRpb24gKi8gQW5kcm9pZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAiQ2FtZXJhIGFjY2VzcyBleGNlcHRpb246ICIgKyBlKTsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBzdGF0aWMgaW50IGdldEZw
c1VuaXRGYWN0b3IoUmFuZ2U8SW50ZWdlcj5bXSBmcHNSYW5nZXMpIHsKLSAgICBpZiAoZnBzUmFu
Z2VzLmxlbmd0aCA9PSAwKSB7Ci0gICAgICByZXR1cm4gMTAwMDsKLSAgICB9Ci0gICAgcmV0dXJu
IGZwc1Jhbmdlc1swXS5nZXRVcHBlcigpIDwgMTAwMCA/IDEwMDAgOiAxOwotICB9Ci0KLSAgc3Rh
dGljIExpc3Q8U2l6ZT4gZ2V0U3VwcG9ydGVkU2l6ZXMoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNh
bWVyYUNoYXJhY3RlcmlzdGljcykgewotICAgIGZpbmFsIFN0cmVhbUNvbmZpZ3VyYXRpb25NYXAg
c3RyZWFtTWFwID0KLSAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFy
YWN0ZXJpc3RpY3MuU0NBTEVSX1NUUkVBTV9DT05GSUdVUkFUSU9OX01BUCk7Ci0gICAgZmluYWwg
aW50IHN1cHBvcnRMZXZlbCA9Ci0gICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2Ft
ZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMKTsKLQotICAg
IGZpbmFsIGFuZHJvaWQudXRpbC5TaXplW10gbmF0aXZlU2l6ZXMgPSBzdHJlYW1NYXAuZ2V0T3V0
cHV0U2l6ZXMoU3VyZmFjZVRleHR1cmUuY2xhc3MpOwotICAgIGZpbmFsIExpc3Q8U2l6ZT4gc2l6
ZXMgPSBjb252ZXJ0U2l6ZXMobmF0aXZlU2l6ZXMpOwotCi0gICAgLy8gVmlkZW8gbWF5IGJlIHN0
cmV0Y2hlZCBwcmUgTE1SMSBvbiBsZWdhY3kgaW1wbGVtZW50YXRpb25zLgotICAgIC8vIEZpbHRl
ciBvdXQgZm9ybWF0cyB0aGF0IGhhdmUgZGlmZmVyZW50IGFzcGVjdCByYXRpbyB0aGFuIHRoZSBz
ZW5zb3IgYXJyYXkuCi0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJ
T05fQ09ERVMuTE9MTElQT1BfTVIxCi0gICAgICAgICYmIHN1cHBvcnRMZXZlbCA9PSBDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuSU5GT19TVVBQT1JURURfSEFSRFdBUkVfTEVWRUxfTEVHQUNZKSB7Ci0g
ICAgICBmaW5hbCBSZWN0IGFjdGl2ZUFycmF5U2l6ZSA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFj
dGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuU0VOU09SX0lORk9fQUNUSVZFX0FS
UkFZX1NJWkUpOwotICAgICAgZmluYWwgQXJyYXlMaXN0PFNpemU+IGZpbHRlcmVkU2l6ZXMgPSBu
ZXcgQXJyYXlMaXN0PFNpemU+KCk7Ci0KLSAgICAgIGZvciAoU2l6ZSBzaXplIDogc2l6ZXMpIHsK
LSAgICAgICAgaWYgKGFjdGl2ZUFycmF5U2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQgPT0gYWN0
aXZlQXJyYXlTaXplLmhlaWdodCgpICogc2l6ZS53aWR0aCkgewotICAgICAgICAgIGZpbHRlcmVk
U2l6ZXMuYWRkKHNpemUpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBmaWx0
ZXJlZFNpemVzOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1cm4gc2l6ZXM7Ci0gICAgfQotICB9
Ci0KLSAgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhDb250
ZXh0IGNvbnRleHQsIFN0cmluZyBjYW1lcmFJZCkgewotICAgIHJldHVybiBnZXRTdXBwb3J0ZWRG
b3JtYXRzKAotICAgICAgICAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNl
KENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpLCBjYW1lcmFJZCk7Ci0gIH0KLQotICBzdGF0aWMgTGlz
dDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKENhbWVyYU1hbmFnZXIgY2FtZXJh
TWFuYWdlciwgU3RyaW5nIGNhbWVyYUlkKSB7Ci0gICAgc3luY2hyb25pemVkIChjYWNoZWRTdXBw
b3J0ZWRGb3JtYXRzKSB7Ci0gICAgICBpZiAoY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5jb250YWlu
c0tleShjYW1lcmFJZCkpIHsKLSAgICAgICAgcmV0dXJuIGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMu
Z2V0KGNhbWVyYUlkKTsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkdldCBzdXBw
b3J0ZWQgZm9ybWF0cyBmb3IgY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIuIik7Ci0gICAg
ICBmaW5hbCBsb25nIHN0YXJ0VGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7
Ci0KLSAgICAgIGZpbmFsIENhbWVyYUNoYXJhY3RlcmlzdGljcyBjYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3M7Ci0gICAgICB0cnkgewotICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MgPSBjYW1lcmFN
YW5hZ2VyLmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhjYW1lcmFJZCk7Ci0gICAgICB9IGNhdGNo
IChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgImdldENhbWVyYUNoYXJh
Y3RlcmlzdGljcygpOiAiICsgZXgpOwotICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxDYXB0
dXJlRm9ybWF0PigpOwotICAgICAgfQotCi0gICAgICBmaW5hbCBTdHJlYW1Db25maWd1cmF0aW9u
TWFwIHN0cmVhbU1hcCA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1l
cmFDaGFyYWN0ZXJpc3RpY3MuU0NBTEVSX1NUUkVBTV9DT05GSUdVUkFUSU9OX01BUCk7Ci0KLSAg
ICAgIFJhbmdlPEludGVnZXI+W10gZnBzUmFuZ2VzID0KLSAgICAgICAgICBjYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05UUk9MX0FFX0FWQUlMQUJMRV9U
QVJHRVRfRlBTX1JBTkdFUyk7Ci0gICAgICBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFu
Z2U+IGZyYW1lcmF0ZVJhbmdlcyA9Ci0gICAgICAgICAgY29udmVydEZyYW1lcmF0ZXMoZnBzUmFu
Z2VzLCBnZXRGcHNVbml0RmFjdG9yKGZwc1JhbmdlcykpOwotICAgICAgTGlzdDxTaXplPiBzaXpl
cyA9IGdldFN1cHBvcnRlZFNpemVzKGNhbWVyYUNoYXJhY3RlcmlzdGljcyk7Ci0KLSAgICAgIGlu
dCBkZWZhdWx0TWF4RnBzID0gMDsKLSAgICAgIGZvciAoQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVS
YW5nZSBmcmFtZXJhdGVSYW5nZSA6IGZyYW1lcmF0ZVJhbmdlcykgewotICAgICAgICBkZWZhdWx0
TWF4RnBzID0gTWF0aC5tYXgoZGVmYXVsdE1heEZwcywgZnJhbWVyYXRlUmFuZ2UubWF4KTsKLSAg
ICAgIH0KLQotICAgICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0PiBmb3JtYXRMaXN0ID0gbmV3
IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0PigpOwotICAgICAgZm9yIChTaXplIHNpemUgOiBzaXpl
cykgewotICAgICAgICBsb25nIG1pbkZyYW1lRHVyYXRpb25OcyA9IDA7Ci0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgbWluRnJhbWVEdXJhdGlvbk5zID0gc3RyZWFtTWFwLmdldE91dHB1dE1pbkZy
YW1lRHVyYXRpb24oCi0gICAgICAgICAgICAgIFN1cmZhY2VUZXh0dXJlLmNsYXNzLCBuZXcgYW5k
cm9pZC51dGlsLlNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpKTsKLSAgICAgICAgfSBjYXRj
aCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAvLyBnZXRPdXRwdXRNaW5GcmFtZUR1cmF0aW9u
KCkgaXMgbm90IHN1cHBvcnRlZCBvbiBhbGwgZGV2aWNlcy4gSWdub3JlIHNpbGVudGx5LgotICAg
ICAgICB9Ci0gICAgICAgIGZpbmFsIGludCBtYXhGcHMgPSAobWluRnJhbWVEdXJhdGlvbk5zID09
IDApCi0gICAgICAgICAgICA/IGRlZmF1bHRNYXhGcHMKLSAgICAgICAgICAgIDogKGludCkgTWF0
aC5yb3VuZChOQU5PX1NFQ09ORFNfUEVSX1NFQ09ORCAvIG1pbkZyYW1lRHVyYXRpb25OcykgKiAx
MDAwOwotICAgICAgICBmb3JtYXRMaXN0LmFkZChuZXcgQ2FwdHVyZUZvcm1hdChzaXplLndpZHRo
LCBzaXplLmhlaWdodCwgMCwgbWF4RnBzKSk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3Jt
YXQ6ICIgKyBzaXplLndpZHRoICsgIngiICsgc2l6ZS5oZWlnaHQgKyAiQCIgKyBtYXhGcHMpOwot
ICAgICAgfQotCi0gICAgICBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzLnB1dChjYW1lcmFJZCwgZm9y
bWF0TGlzdCk7Ci0gICAgICBmaW5hbCBsb25nIGVuZFRpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBz
ZWRSZWFsdGltZSgpOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkdldCBzdXBwb3J0ZWQgZm9ybWF0
cyBmb3IgY2FtZXJhIGluZGV4ICIgKyBjYW1lcmFJZCArICIgZG9uZS4iCi0gICAgICAgICAgICAg
ICsgIiBUaW1lIHNwZW50OiAiICsgKGVuZFRpbWVNcyAtIHN0YXJ0VGltZU1zKSArICIgbXMuIik7
Ci0gICAgICByZXR1cm4gZm9ybWF0TGlzdDsKLSAgICB9Ci0gIH0KLQotICAvLyBDb252ZXJ0IGZy
b20gYW5kcm9pZC51dGlsLlNpemUgdG8gU2l6ZS4KLSAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxTaXpl
PiBjb252ZXJ0U2l6ZXMoYW5kcm9pZC51dGlsLlNpemVbXSBjYW1lcmFTaXplcykgewotICAgIGZp
bmFsIExpc3Q8U2l6ZT4gc2l6ZXMgPSBuZXcgQXJyYXlMaXN0PFNpemU+KCk7Ci0gICAgZm9yIChh
bmRyb2lkLnV0aWwuU2l6ZSBzaXplIDogY2FtZXJhU2l6ZXMpIHsKLSAgICAgIHNpemVzLmFkZChu
ZXcgU2l6ZShzaXplLmdldFdpZHRoKCksIHNpemUuZ2V0SGVpZ2h0KCkpKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHNpemVzOwotICB9Ci0KLSAgLy8gQ29udmVydCBmcm9tIGFuZHJvaWQudXRpbC5SYW5n
ZTxJbnRlZ2VyPiB0byBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlLgotICBzdGF0aWMgTGlz
dDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBjb252ZXJ0RnJhbWVyYXRlcygKLSAgICAg
IFJhbmdlPEludGVnZXI+W10gYXJyYXlSYW5nZXMsIGludCB1bml0RmFjdG9yKSB7Ci0gICAgZmlu
YWwgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiByYW5nZXMgPSBuZXcgQXJyYXlM
aXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+KCk7Ci0gICAgZm9yIChSYW5nZTxJbnRl
Z2VyPiByYW5nZSA6IGFycmF5UmFuZ2VzKSB7Ci0gICAgICByYW5nZXMuYWRkKG5ldyBDYXB0dXJl
Rm9ybWF0LkZyYW1lcmF0ZVJhbmdlKAotICAgICAgICAgIHJhbmdlLmdldExvd2VyKCkgKiB1bml0
RmFjdG9yLCByYW5nZS5nZXRVcHBlcigpICogdW5pdEZhY3RvcikpOwotICAgIH0KLSAgICByZXR1
cm4gcmFuZ2VzOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJTZXNzaW9u
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyU2Vzc2lvbi5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJTZXNzaW9uLmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
NiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFw
aTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBo
aWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1l
cmFBY2Nlc3NFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVy
YUNhcHR1cmVTZXNzaW9uOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFD
aGFyYWN0ZXJpc3RpY3M7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYURl
dmljZTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWFuYWdlcjsKLWlt
cG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhTWV0YWRhdGE7Ci1pbXBvcnQgYW5k
cm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVGYWlsdXJlOwotaW1wb3J0IGFuZHJvaWQuaGFy
ZHdhcmUuY2FtZXJhMi5DYXB0dXJlUmVxdWVzdDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7
Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlJhbmdlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNl
OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGphdmEudXRpbC5B
cnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuVGltZVVuaXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQu
Q2FwdHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLk1ldHJpY3MuSGlzdG9ncmFtOwotCi1A
VGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNzIENhbWVyYTJTZXNzaW9uIGltcGxlbWVudHMgQ2Ft
ZXJhU2Vzc2lvbiB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJh
MlNlc3Npb24iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmEyU3Rh
cnRUaW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRD
LkFuZHJvaWQuQ2FtZXJhMi5TdGFydFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmEyU3RvcFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAg
ICBIaXN0b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmEyLlN0b3BUaW1l
TXMiLCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2Ft
ZXJhMlJlc29sdXRpb25IaXN0b2dyYW0gPSBIaXN0b2dyYW0uY3JlYXRlRW51bWVyYXRpb24oCi0g
ICAgICAiV2ViUlRDLkFuZHJvaWQuQ2FtZXJhMi5SZXNvbHV0aW9uIiwgQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkLkNPTU1PTl9SRVNPTFVUSU9OUy5zaXplKCkpOwotCi0gIHByaXZhdGUgc3RhdGlj
IGVudW0gU2Vzc2lvblN0YXRlIHsgUlVOTklORywgU1RPUFBFRCB9Ci0KLSAgcHJpdmF0ZSBmaW5h
bCBIYW5kbGVyIGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgQ3JlYXRlU2Vz
c2lvbkNhbGxiYWNrIGNhbGxiYWNrOwotICBwcml2YXRlIGZpbmFsIEV2ZW50cyBldmVudHM7Ci0g
IHByaXZhdGUgZmluYWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gIHByaXZhdGUgZmlu
YWwgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyOwotICBwcml2YXRlIGZpbmFsIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICBwcml2YXRlIGZpbmFsIFN0cmlu
ZyBjYW1lcmFJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgZmluYWwg
aW50IGhlaWdodDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVyYXRlOwotCi0gIC8vIEluaXRp
YWxpemVkIGF0IHN0YXJ0Ci0gIHByaXZhdGUgQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzIGNhbWVyYUNo
YXJhY3RlcmlzdGljczsKLSAgcHJpdmF0ZSBpbnQgY2FtZXJhT3JpZW50YXRpb247Ci0gIHByaXZh
dGUgYm9vbGVhbiBpc0NhbWVyYUZyb250RmFjaW5nOwotICBwcml2YXRlIGludCBmcHNVbml0RmFj
dG9yOwotICBwcml2YXRlIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdDsKLQotICAvLyBJbml0
aWFsaXplZCB3aGVuIGNhbWVyYSBvcGVucwotICBwcml2YXRlIENhbWVyYURldmljZSBjYW1lcmFE
ZXZpY2U7Ci0gIHByaXZhdGUgU3VyZmFjZSBzdXJmYWNlOwotCi0gIC8vIEluaXRpYWxpemVkIHdo
ZW4gY2FwdHVyZSBzZXNzaW9uIGlzIGNyZWF0ZWQKLSAgcHJpdmF0ZSBDYW1lcmFDYXB0dXJlU2Vz
c2lvbiBjYXB0dXJlU2Vzc2lvbjsKLQotICAvLyBTdGF0ZQotICBwcml2YXRlIFNlc3Npb25TdGF0
ZSBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5SVU5OSU5HOwotICBwcml2YXRlIGJvb2xlYW4gZmlyc3RG
cmFtZVJlcG9ydGVkID0gZmFsc2U7Ci0KLSAgLy8gVXNlZCBvbmx5IGZvciBzdGF0cy4gT25seSB1
c2VkIG9uIHRoZSBjYW1lcmEgdGhyZWFkLgotICBwcml2YXRlIGZpbmFsIGxvbmcgY29uc3RydWN0
aW9uVGltZU5zOyAvLyBDb25zdHJ1Y3Rpb24gdGltZSBvZiB0aGlzIGNsYXNzLgotCi0gIHByaXZh
dGUgY2xhc3MgQ2FtZXJhU3RhdGVDYWxsYmFjayBleHRlbmRzIENhbWVyYURldmljZS5TdGF0ZUNh
bGxiYWNrIHsKLSAgICBwcml2YXRlIFN0cmluZyBnZXRFcnJvckRlc2NyaXB0aW9uKGludCBlcnJv
ckNvZGUpIHsKLSAgICAgIHN3aXRjaCAoZXJyb3JDb2RlKSB7Ci0gICAgICAgIGNhc2UgQ2FtZXJh
RGV2aWNlLlN0YXRlQ2FsbGJhY2suRVJST1JfQ0FNRVJBX0RFVklDRToKLSAgICAgICAgICByZXR1
cm4gIkNhbWVyYSBkZXZpY2UgaGFzIGVuY291bnRlcmVkIGEgZmF0YWwgZXJyb3IuIjsKLSAgICAg
ICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJPUl9DQU1FUkFfRElTQUJMRUQ6
Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQgZHVl
IHRvIGEgZGV2aWNlIHBvbGljeS4iOwotICAgICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0ZUNh
bGxiYWNrLkVSUk9SX0NBTUVSQV9JTl9VU0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEgZGV2
aWNlIGlzIGluIHVzZSBhbHJlYWR5LiI7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRl
Q2FsbGJhY2suRVJST1JfQ0FNRVJBX1NFUlZJQ0U6Ci0gICAgICAgICAgcmV0dXJuICJDYW1lcmEg
c2VydmljZSBoYXMgZW5jb3VudGVyZWQgYSBmYXRhbCBlcnJvci4iOwotICAgICAgICBjYXNlIENh
bWVyYURldmljZS5TdGF0ZUNhbGxiYWNrLkVSUk9SX01BWF9DQU1FUkFTX0lOX1VTRToKLSAgICAg
ICAgICByZXR1cm4gIkNhbWVyYSBkZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCBiZWNhdXNlIgot
ICAgICAgICAgICAgICArICIgdGhlcmUgYXJlIHRvbyBtYW55IG90aGVyIG9wZW4gY2FtZXJhIGRl
dmljZXMuIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICByZXR1cm4gIlVua25vd24gY2Ft
ZXJhIGVycm9yOiAiICsgZXJyb3JDb2RlOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uRGlzY29ubmVjdGVkKENhbWVyYURldmljZSBjYW1lcmEpIHsK
LSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgZmluYWwgYm9vbGVhbiBzdGFy
dEZhaWx1cmUgPSAoY2FwdHVyZVNlc3Npb24gPT0gbnVsbCk7Ci0gICAgICBzdGF0ZSA9IFNlc3Np
b25TdGF0ZS5TVE9QUEVEOwotICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAgICBpZiAoc3RhcnRG
YWlsdXJlKSB7Ci0gICAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZSgiQ2FtZXJhIGRpc2Nvbm5lY3Rl
ZCAvIGV2aWN0ZWQuIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBldmVudHMub25DYW1lcmFE
aXNjb25uZWN0ZWQoQ2FtZXJhMlNlc3Npb24udGhpcyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25FcnJvcihDYW1lcmFEZXZpY2UgY2FtZXJhLCBp
bnQgZXJyb3JDb2RlKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHJl
cG9ydEVycm9yKGdldEVycm9yRGVzY3JpcHRpb24oZXJyb3JDb2RlKSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25PcGVuZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYSkg
ewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcs
ICJDYW1lcmEgb3BlbmVkLiIpOwotICAgICAgY2FtZXJhRGV2aWNlID0gY2FtZXJhOwotCi0gICAg
ICBmaW5hbCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSA9IHN1cmZhY2VUZXh0dXJlSGVs
cGVyLmdldFN1cmZhY2VUZXh0dXJlKCk7Ci0gICAgICBzdXJmYWNlVGV4dHVyZS5zZXREZWZhdWx0
QnVmZmVyU2l6ZShjYXB0dXJlRm9ybWF0LndpZHRoLCBjYXB0dXJlRm9ybWF0LmhlaWdodCk7Ci0g
ICAgICBzdXJmYWNlID0gbmV3IFN1cmZhY2Uoc3VyZmFjZVRleHR1cmUpOwotICAgICAgdHJ5IHsK
LSAgICAgICAgY2FtZXJhLmNyZWF0ZUNhcHR1cmVTZXNzaW9uKAotICAgICAgICAgICAgQXJyYXlz
LmFzTGlzdChzdXJmYWNlKSwgbmV3IENhcHR1cmVTZXNzaW9uQ2FsbGJhY2soKSwgY2FtZXJhVGhy
ZWFkSGFuZGxlcik7Ci0gICAgICB9IGNhdGNoIChDYW1lcmFBY2Nlc3NFeGNlcHRpb24gZSkgewot
ICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBjYXB0dXJlIHNlc3Npb24uICIg
KyBlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uQ2xvc2VkKENhbWVyYURldmljZSBjYW1lcmEpIHsKLSAgICAgIGNo
ZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIGRl
dmljZSBjbG9zZWQuIik7Ci0gICAgICBldmVudHMub25DYW1lcmFDbG9zZWQoQ2FtZXJhMlNlc3Np
b24udGhpcyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDYXB0dXJlU2Vzc2lvbkNh
bGxiYWNrIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZVNlc3Npb24uU3RhdGVDYWxsYmFjayB7Ci0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25maWd1cmVGYWlsZWQoQ2FtZXJhQ2FwdHVy
ZVNlc3Npb24gc2Vzc2lvbikgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAg
ICBzZXNzaW9uLmNsb3NlKCk7Ci0gICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNvbmZpZ3Vy
ZSBjYXB0dXJlIHNlc3Npb24uIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25Db25maWd1cmVkKENhbWVyYUNhcHR1cmVTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAg
IGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBj
YXB0dXJlIHNlc3Npb24gY29uZmlndXJlZC4iKTsKLSAgICAgIGNhcHR1cmVTZXNzaW9uID0gc2Vz
c2lvbjsKLSAgICAgIHRyeSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoZSB2aWFibGUgb3B0
aW9ucyBmb3IgdmlkZW8gY2FwdHVyZSByZXF1ZXN0cyBhcmU6Ci0gICAgICAgICAqIFRFTVBMQVRF
X1BSRVZJRVc6IEhpZ2ggZnJhbWUgcmF0ZSBpcyBnaXZlbiBwcmlvcml0eSBvdmVyIHRoZSBoaWdo
ZXN0LXF1YWxpdHkKLSAgICAgICAgICogICBwb3N0LXByb2Nlc3NpbmcuCi0gICAgICAgICAqIFRF
TVBMQVRFX1JFQ09SRDogU3RhYmxlIGZyYW1lIHJhdGUgaXMgdXNlZCwgYW5kIHBvc3QtcHJvY2Vz
c2luZyBpcyBzZXQgZm9yIHJlY29yZGluZwotICAgICAgICAgKiAgIHF1YWxpdHkuCi0gICAgICAg
ICAqLwotICAgICAgICBmaW5hbCBDYXB0dXJlUmVxdWVzdC5CdWlsZGVyIGNhcHR1cmVSZXF1ZXN0
QnVpbGRlciA9Ci0gICAgICAgICAgICBjYW1lcmFEZXZpY2UuY3JlYXRlQ2FwdHVyZVJlcXVlc3Qo
Q2FtZXJhRGV2aWNlLlRFTVBMQVRFX1JFQ09SRCk7Ci0gICAgICAgIC8vIFNldCBhdXRvIGV4cG9z
dXJlIGZwcyByYW5nZS4KLSAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJl
UmVxdWVzdC5DT05UUk9MX0FFX1RBUkdFVF9GUFNfUkFOR0UsCi0gICAgICAgICAgICBuZXcgUmFu
Z2U8SW50ZWdlcj4oY2FwdHVyZUZvcm1hdC5mcmFtZXJhdGUubWluIC8gZnBzVW5pdEZhY3RvciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZUZvcm1hdC5mcmFt
ZXJhdGUubWF4IC8gZnBzVW5pdEZhY3RvcikpOwotICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxk
ZXIuc2V0KAotICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9BRV9NT0RFLCBDYXB0
dXJlUmVxdWVzdC5DT05UUk9MX0FFX01PREVfT04pOwotICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1
aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUVfTE9DSywgZmFsc2UpOwotICAgICAg
ICBjaG9vc2VTdGFiaWxpemF0aW9uTW9kZShjYXB0dXJlUmVxdWVzdEJ1aWxkZXIpOwotICAgICAg
ICBjaG9vc2VGb2N1c01vZGUoY2FwdHVyZVJlcXVlc3RCdWlsZGVyKTsKLQotICAgICAgICBjYXB0
dXJlUmVxdWVzdEJ1aWxkZXIuYWRkVGFyZ2V0KHN1cmZhY2UpOwotICAgICAgICBzZXNzaW9uLnNl
dFJlcGVhdGluZ1JlcXVlc3QoCi0gICAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIuYnVp
bGQoKSwgbmV3IENhbWVyYUNhcHR1cmVDYWxsYmFjaygpLCBjYW1lcmFUaHJlYWRIYW5kbGVyKTsK
LSAgICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9y
dEVycm9yKCJGYWlsZWQgdG8gc3RhcnQgY2FwdHVyZSByZXF1ZXN0LiAiICsgZSk7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLQotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0
ZW5pbmcoCi0gICAgICAgICAgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1l
QXZhaWxhYmxlTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAg
IHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICAgICAgICAgIGlu
dCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVzdGFtcE5z
KSB7Ci0gICAgICAgICAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgICAgICAg
ICAgIGlmIChzdGF0ZSAhPSBTZXNzaW9uU3RhdGUuUlVOTklORykgewotICAgICAgICAgICAgICAg
IExvZ2dpbmcuZChUQUcsICJUZXh0dXJlIGZyYW1lIGNhcHR1cmVkIGJ1dCBjYW1lcmEgaXMgbm8g
bG9uZ2VyIHJ1bm5pbmcuIik7Ci0gICAgICAgICAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
cmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQpIHsKLSAgICAg
ICAgICAgICAgICBmaXJzdEZyYW1lUmVwb3J0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGZp
bmFsIGludCBzdGFydFRpbWVNcyA9Ci0gICAgICAgICAgICAgICAgICAgIChpbnQpIFRpbWVVbml0
Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gY29uc3RydWN0aW9uVGlt
ZU5zKTsKLSAgICAgICAgICAgICAgICBjYW1lcmEyU3RhcnRUaW1lTXNIaXN0b2dyYW0uYWRkU2Ft
cGxlKHN0YXJ0VGltZU1zKTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGludCBy
b3RhdGlvbiA9IGdldEZyYW1lT3JpZW50YXRpb24oKTsKLSAgICAgICAgICAgICAgaWYgKGlzQ2Ft
ZXJhRnJvbnRGYWNpbmcpIHsKLSAgICAgICAgICAgICAgICAvLyBVbmRvIHRoZSBtaXJyb3IgdGhh
dCB0aGUgT1MgImhlbHBzIiB1cyB3aXRoLgotICAgICAgICAgICAgICAgIC8vIGh0dHA6Ly9kZXZl
bG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmh0bWwj
c2V0RGlzcGxheU9yaWVudGF0aW9uKGludCkKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXRy
aXggPSBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKAotICAgICAgICAgICAgICAgICAg
ICB0cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9uLmhvcml6b250YWxGbGlwTWF0cml4KCkp
OwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgLy8gVW5kbyBjYW1lcmEgb3JpZW50
YXRpb24gLSB3ZSByZXBvcnQgaXQgYXMgcm90YXRpb24gaW5zdGVhZC4KLSAgICAgICAgICAgICAg
dHJhbnNmb3JtTWF0cml4ID0KLSAgICAgICAgICAgICAgICAgIFJlbmRlcmVyQ29tbW9uLnJvdGF0
ZVRleHR1cmVNYXRyaXgodHJhbnNmb3JtTWF0cml4LCAtY2FtZXJhT3JpZW50YXRpb24pOwotCi0g
ICAgICAgICAgICAgIGV2ZW50cy5vblRleHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYTJTZXNzaW9u
LnRoaXMsIGNhcHR1cmVGb3JtYXQud2lkdGgsCi0gICAgICAgICAgICAgICAgICBjYXB0dXJlRm9y
bWF0LmhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIHJvdGF0aW9uLCB0aW1l
c3RhbXBOcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICBMb2dnaW5nLmQo
VEFHLCAiQ2FtZXJhIGRldmljZSBzdWNjZXNzZnVsbHkgc3RhcnRlZC4iKTsKLSAgICAgIGNhbGxi
YWNrLm9uRG9uZShDYW1lcmEyU2Vzc2lvbi50aGlzKTsKLSAgICB9Ci0KLSAgICAvLyBQcmVmZXJz
IG9wdGljYWwgc3RhYmlsaXphdGlvbiBvdmVyIHNvZnR3YXJlIHN0YWJpbGl6YXRpb24gaWYgYXZh
aWxhYmxlLiBPbmx5IGVuYWJsZXMgb25lIG9mCi0gICAgLy8gdGhlIHN0YWJpbGl6YXRpb24gbW9k
ZXMgYXQgYSB0aW1lIGJlY2F1c2UgaGF2aW5nIGJvdGggZW5hYmxlZCBjYW4gY2F1c2Ugc3RyYW5n
ZSByZXN1bHRzLgotICAgIHByaXZhdGUgdm9pZCBjaG9vc2VTdGFiaWxpemF0aW9uTW9kZShDYXB0
dXJlUmVxdWVzdC5CdWlsZGVyIGNhcHR1cmVSZXF1ZXN0QnVpbGRlcikgewotICAgICAgZmluYWwg
aW50W10gYXZhaWxhYmxlT3B0aWNhbFN0YWJpbGl6YXRpb24gPSBjYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3MuZ2V0KAotICAgICAgICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcy5MRU5TX0lORk9fQVZBSUxB
QkxFX09QVElDQUxfU1RBQklMSVpBVElPTik7Ci0gICAgICBpZiAoYXZhaWxhYmxlT3B0aWNhbFN0
YWJpbGl6YXRpb24gIT0gbnVsbCkgewotICAgICAgICBmb3IgKGludCBtb2RlIDogYXZhaWxhYmxl
T3B0aWNhbFN0YWJpbGl6YXRpb24pIHsKLSAgICAgICAgICBpZiAobW9kZSA9PSBDYXB0dXJlUmVx
dWVzdC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OKSB7Ci0gICAgICAgICAgICBj
YXB0dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BUSUNBTF9TVEFC
SUxJWkFUSU9OX01PREUsCi0gICAgICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuTEVOU19PUFRJ
Q0FMX1NUQUJJTElaQVRJT05fTU9ERV9PTik7Ci0gICAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1
aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RF
LAotICAgICAgICAgICAgICAgIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpB
VElPTl9NT0RFX09GRik7Ci0gICAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVXNpbmcgb3B0aWNh
bCBzdGFiaWxpemF0aW9uLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgfQotICAgICAgLy8gSWYgbm8gb3B0aWNhbCBtb2RlIGlzIGF2YWlsYWJs
ZSwgdHJ5IHNvZnR3YXJlLgotICAgICAgZmluYWwgaW50W10gYXZhaWxhYmxlVmlkZW9TdGFiaWxp
emF0aW9uID0gY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldCgKLSAgICAgICAgICBDYW1lcmFDaGFy
YWN0ZXJpc3RpY3MuQ09OVFJPTF9BVkFJTEFCTEVfVklERU9fU1RBQklMSVpBVElPTl9NT0RFUyk7
Ci0gICAgICBmb3IgKGludCBtb2RlIDogYXZhaWxhYmxlVmlkZW9TdGFiaWxpemF0aW9uKSB7Ci0g
ICAgICAgIGlmIChtb2RlID09IENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpB
VElPTl9NT0RFX09OKSB7Ci0gICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0
dXJlUmVxdWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERSwKLSAgICAgICAgICAg
ICAgQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREVfT04pOwot
ICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuTEVOU19P
UFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERSwKLSAgICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3Qu
TEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PRkYpOwotICAgICAgICAgIExvZ2dpbmcu
ZChUQUcsICJVc2luZyB2aWRlbyBzdGFiaWxpemF0aW9uLiIpOwotICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIlN0YWJpbGl6YXRpb24g
bm90IGF2YWlsYWJsZS4iKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hvb3NlRm9jdXNN
b2RlKENhcHR1cmVSZXF1ZXN0LkJ1aWxkZXIgY2FwdHVyZVJlcXVlc3RCdWlsZGVyKSB7Ci0gICAg
ICBmaW5hbCBpbnRbXSBhdmFpbGFibGVGb2N1c01vZGVzID0KLSAgICAgICAgICBjYW1lcmFDaGFy
YWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05UUk9MX0FGX0FWQUlMQUJM
RV9NT0RFUyk7Ci0gICAgICBmb3IgKGludCBtb2RlIDogYXZhaWxhYmxlRm9jdXNNb2Rlcykgewot
ICAgICAgICBpZiAobW9kZSA9PSBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FGX01PREVfQ09OVElO
VU9VU19WSURFTykgewotICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoCi0gICAg
ICAgICAgICAgIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUZfTU9ERSwgQ2FwdHVyZVJlcXVlc3Qu
Q09OVFJPTF9BRl9NT0RFX0NPTlRJTlVPVVNfVklERU8pOwotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsICJVc2luZyBjb250aW51b3VzIHZpZGVvIGF1dG8tZm9jdXMuIik7Ci0gICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXV0by1mb2N1
cyBpcyBub3QgYXZhaWxhYmxlLiIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQ2Ft
ZXJhQ2FwdHVyZUNhbGxiYWNrIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZVNlc3Npb24uQ2FwdHVyZUNh
bGxiYWNrIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVGYWlsZWQo
Ci0gICAgICAgIENhbWVyYUNhcHR1cmVTZXNzaW9uIHNlc3Npb24sIENhcHR1cmVSZXF1ZXN0IHJl
cXVlc3QsIENhcHR1cmVGYWlsdXJlIGZhaWx1cmUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJD
YXB0dXJlIGZhaWxlZDogIiArIGZhaWx1cmUpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgdm9pZCBjcmVhdGUoQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNhbGxiYWNrLCBFdmVudHMgZXZl
bnRzLAotICAgICAgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsIENhbWVyYU1hbmFnZXIgY2Ft
ZXJhTWFuYWdlciwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVs
cGVyLCBTdHJpbmcgY2FtZXJhSWQsIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIGludCBm
cmFtZXJhdGUpIHsKLSAgICBuZXcgQ2FtZXJhMlNlc3Npb24oY2FsbGJhY2ssIGV2ZW50cywgYXBw
bGljYXRpb25Db250ZXh0LCBjYW1lcmFNYW5hZ2VyLCBzdXJmYWNlVGV4dHVyZUhlbHBlciwKLSAg
ICAgICAgY2FtZXJhSWQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gIH0KLQotICBwcml2
YXRlIENhbWVyYTJTZXNzaW9uKENyZWF0ZVNlc3Npb25DYWxsYmFjayBjYWxsYmFjaywgRXZlbnRz
IGV2ZW50cywgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYW1lcmFNYW5hZ2Vy
IGNhbWVyYU1hbmFnZXIsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVy
LCBTdHJpbmcgY2FtZXJhSWQsCi0gICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFt
ZXJhdGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRlIG5ldyBjYW1lcmEyIHNlc3Npb24g
b24gY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0KLSAgICBjb25zdHJ1Y3Rpb25UaW1lTnMgPSBTeXN0
ZW0ubmFub1RpbWUoKTsKLQotICAgIHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9IG5ldyBIYW5k
bGVyKCk7Ci0gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwotICAgIHRoaXMuZXZlbnRzID0g
ZXZlbnRzOwotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRpb25Db250ZXh0
OwotICAgIHRoaXMuY2FtZXJhTWFuYWdlciA9IGNhbWVyYU1hbmFnZXI7Ci0gICAgdGhpcy5zdXJm
YWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAgIHRoaXMuY2FtZXJh
SWQgPSBjYW1lcmFJZDsKLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQg
PSBoZWlnaHQ7Ci0gICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0KLSAgICBzdGFydCgp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0KCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydCIpOwotCi0gICAgdHJ5IHsKLSAgICAg
IGNhbWVyYUNoYXJhY3RlcmlzdGljcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhQ2hhcmFjdGVy
aXN0aWNzKGNhbWVyYUlkKTsKLSAgICB9IGNhdGNoIChmaW5hbCBDYW1lcmFBY2Nlc3NFeGNlcHRp
b24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoImdldENhbWVyYUNoYXJhY3RlcmlzdGljcygpOiAi
ICsgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjYW1lcmFPcmllbnRhdGlvbiA9IGNhbWVy
YUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNFTlNPUl9PUklFTlRB
VElPTik7Ci0gICAgaXNDYW1lcmFGcm9udEZhY2luZyA9IGNhbWVyYUNoYXJhY3RlcmlzdGljcy5n
ZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFDSU5HKQotICAgICAgICA9PSBDYW1lcmFN
ZXRhZGF0YS5MRU5TX0ZBQ0lOR19GUk9OVDsKLQotICAgIGZpbmRDYXB0dXJlRm9ybWF0KCk7Ci0g
ICAgb3BlbkNhbWVyYSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbmRDYXB0dXJlRm9ybWF0
KCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgUmFuZ2U8SW50ZWdlcj5b
XSBmcHNSYW5nZXMgPQotICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNo
YXJhY3RlcmlzdGljcy5DT05UUk9MX0FFX0FWQUlMQUJMRV9UQVJHRVRfRlBTX1JBTkdFUyk7Ci0g
ICAgZnBzVW5pdEZhY3RvciA9IENhbWVyYTJFbnVtZXJhdG9yLmdldEZwc1VuaXRGYWN0b3IoZnBz
UmFuZ2VzKTsKLSAgICBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IGZyYW1lcmF0
ZVJhbmdlcyA9Ci0gICAgICAgIENhbWVyYTJFbnVtZXJhdG9yLmNvbnZlcnRGcmFtZXJhdGVzKGZw
c1JhbmdlcywgZnBzVW5pdEZhY3Rvcik7Ci0gICAgTGlzdDxTaXplPiBzaXplcyA9IENhbWVyYTJF
bnVtZXJhdG9yLmdldFN1cHBvcnRlZFNpemVzKGNhbWVyYUNoYXJhY3RlcmlzdGljcyk7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIkF2YWlsYWJsZSBwcmV2aWV3IHNpemVzOiAiICsgc2l6ZXMpOwotICAg
IExvZ2dpbmcuZChUQUcsICJBdmFpbGFibGUgZnBzIHJhbmdlczogIiArIGZyYW1lcmF0ZVJhbmdl
cyk7Ci0KLSAgICBpZiAoZnJhbWVyYXRlUmFuZ2VzLmlzRW1wdHkoKSB8fCBzaXplcy5pc0VtcHR5
KCkpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJObyBzdXBwb3J0ZWQgY2FwdHVyZSBmb3JtYXRzLiIp
OwotICAgIH0KLQotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UgYmVzdEZw
c1JhbmdlID0KLSAgICAgICAgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBw
b3J0ZWRGcmFtZXJhdGVSYW5nZShmcmFtZXJhdGVSYW5nZXMsIGZyYW1lcmF0ZSk7Ci0KLSAgICBm
aW5hbCBTaXplIGJlc3RTaXplID0gQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RT
dXBwb3J0ZWRTaXplKHNpemVzLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBDYW1lcmFFbnVtZXJhdGlv
bkFuZHJvaWQucmVwb3J0Q2FtZXJhUmVzb2x1dGlvbihjYW1lcmEyUmVzb2x1dGlvbkhpc3RvZ3Jh
bSwgYmVzdFNpemUpOwotCi0gICAgY2FwdHVyZUZvcm1hdCA9IG5ldyBDYXB0dXJlRm9ybWF0KGJl
c3RTaXplLndpZHRoLCBiZXN0U2l6ZS5oZWlnaHQsIGJlc3RGcHNSYW5nZSk7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgIlVzaW5nIGNhcHR1cmUgZm9ybWF0OiAiICsgY2FwdHVyZUZvcm1hdCk7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgb3BlbkNhbWVyYSgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJl
YWQoKTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJPcGVuaW5nIGNhbWVyYSAiICsgY2FtZXJhSWQp
OwotICAgIGV2ZW50cy5vbkNhbWVyYU9wZW5pbmcoKTsKLQotICAgIHRyeSB7Ci0gICAgICBjYW1l
cmFNYW5hZ2VyLm9wZW5DYW1lcmEoY2FtZXJhSWQsIG5ldyBDYW1lcmFTdGF0ZUNhbGxiYWNrKCks
IGNhbWVyYVRocmVhZEhhbmRsZXIpOwotICAgIH0gY2F0Y2ggKENhbWVyYUFjY2Vzc0V4Y2VwdGlv
biBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIG9wZW4gY2FtZXJhOiAiICsgZSk7
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIlN0b3AgY2FtZXJhMiBzZXNzaW9uIG9uIGNhbWVyYSAiICsgY2FtZXJh
SWQpOwotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmIChzdGF0ZSAhPSBTZXNz
aW9uU3RhdGUuU1RPUFBFRCkgewotICAgICAgZmluYWwgbG9uZyBzdG9wU3RhcnRUaW1lID0gU3lz
dGVtLm5hbm9UaW1lKCk7Ci0gICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwotICAg
ICAgc3RvcEludGVybmFsKCk7Ci0gICAgICBmaW5hbCBpbnQgc3RvcFRpbWVNcyA9IChpbnQpIFRp
bWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RvcFN0YXJ0
VGltZSk7Ci0gICAgICBjYW1lcmEyU3RvcFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RvcFRp
bWVNcyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0b3BJbnRlcm5hbCgpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBpbnRlcm5hbCIpOwotICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotCi0g
ICAgaWYgKGNhcHR1cmVTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgIGNhcHR1cmVTZXNzaW9uLmNs
b3NlKCk7Ci0gICAgICBjYXB0dXJlU2Vzc2lvbiA9IG51bGw7Ci0gICAgfQotICAgIGlmIChzdXJm
YWNlICE9IG51bGwpIHsKLSAgICAgIHN1cmZhY2UucmVsZWFzZSgpOwotICAgICAgc3VyZmFjZSA9
IG51bGw7Ci0gICAgfQotICAgIGlmIChjYW1lcmFEZXZpY2UgIT0gbnVsbCkgewotICAgICAgY2Ft
ZXJhRGV2aWNlLmNsb3NlKCk7Ci0gICAgICBjYW1lcmFEZXZpY2UgPSBudWxsOwotICAgIH0KLQot
ICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBy
ZXBvcnRFcnJvcihTdHJpbmcgZXJyb3IpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsK
LSAgICBMb2dnaW5nLmUoVEFHLCAiRXJyb3I6ICIgKyBlcnJvcik7Ci0KLSAgICBmaW5hbCBib29s
ZWFuIHN0YXJ0RmFpbHVyZSA9IChjYXB0dXJlU2Vzc2lvbiA9PSBudWxsKTsKLSAgICBzdGF0ZSA9
IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwotICAgIHN0b3BJbnRlcm5hbCgpOwotICAgIGlmIChzdGFy
dEZhaWx1cmUpIHsKLSAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZShlcnJvcik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIGV2ZW50cy5vbkNhbWVyYUVycm9yKHRoaXMsIGVycm9yKTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIGludCBnZXREZXZpY2VPcmllbnRhdGlvbigpIHsKLSAgICBpbnQgb3JpZW50
YXRpb24gPSAwOwotCi0gICAgV2luZG93TWFuYWdlciB3bSA9IChXaW5kb3dNYW5hZ2VyKSBhcHBs
aWNhdGlvbkNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRPV19TRVJWSUNFKTsK
LSAgICBzd2l0Y2ggKHdtLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0Um90YXRpb24oKSkgewotICAg
ICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzkwOgotICAgICAgICBvcmllbnRhdGlvbiA9IDkwOwot
ICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8xODA6Ci0gICAgICAg
IG9yaWVudGF0aW9uID0gMTgwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5S
T1RBVElPTl8yNzA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMjcwOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8wOgotICAgICAgZGVmYXVsdDoKLSAgICAgICAg
b3JpZW50YXRpb24gPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIG9yaWVu
dGF0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RnJhbWVPcmllbnRhdGlvbigpIHsKLSAg
ICBpbnQgcm90YXRpb24gPSBnZXREZXZpY2VPcmllbnRhdGlvbigpOwotICAgIGlmICghaXNDYW1l
cmFGcm9udEZhY2luZykgewotICAgICAgcm90YXRpb24gPSAzNjAgLSByb3RhdGlvbjsKLSAgICB9
Ci0gICAgcmV0dXJuIChjYW1lcmFPcmllbnRhdGlvbiArIHJvdGF0aW9uKSAlIDM2MDsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBjaGVja0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgaWYgKFRocmVh
ZC5jdXJyZW50VGhyZWFkKCkgIT0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRU
aHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3Jvbmcg
dGhyZWFkIik7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUNh
cHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFDYXB0dXJl
ci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUNhcHR1
cmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRl
eHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVy
OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJl
Y2F0aW9uIikKLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBDYW1lcmFDYXB0dXJlciBpbXBsZW1lbnRz
IENhbWVyYVZpZGVvQ2FwdHVyZXIgewotICBlbnVtIFN3aXRjaFN0YXRlIHsKLSAgICBJRExFLCAv
LyBObyBzd2l0Y2ggcmVxdWVzdGVkLgotICAgIFBFTkRJTkcsIC8vIFdhaXRpbmcgZm9yIHByZXZp
b3VzIGNhcHR1cmUgc2Vzc2lvbiB0byBvcGVuLgotICAgIElOX1BST0dSRVNTLCAvLyBXYWl0aW5n
IGZvciBuZXcgc3dpdGNoZWQgY2FwdHVyZSBzZXNzaW9uIHRvIHN0YXJ0LgotICB9Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmFDYXB0dXJlciI7Ci0gIHByaXZh
dGUgZmluYWwgc3RhdGljIGludCBNQVhfT1BFTl9DQU1FUkFfQVRURU1QVFMgPSAzOwotICBwcml2
YXRlIGZpbmFsIHN0YXRpYyBpbnQgT1BFTl9DQU1FUkFfREVMQVlfTVMgPSA1MDA7Ci0gIHByaXZh
dGUgZmluYWwgc3RhdGljIGludCBPUEVOX0NBTUVSQV9USU1FT1VUID0gMTAwMDA7Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBDYW1lcmFFbnVtZXJhdG9yIGNhbWVyYUVudW1lcmF0b3I7Ci0gIHByaXZhdGUg
ZmluYWwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyOwotICBwcml2YXRlIGZpbmFs
IEhhbmRsZXIgdWlUaHJlYWRIYW5kbGVyOwotCi0gIHByaXZhdGUgZmluYWwgQ2FtZXJhU2Vzc2lv
bi5DcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNhbGxiYWNrID0KLSAgICAgIG5l
dyBDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjaygpIHsKLSAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRG9uZShDYW1lcmFTZXNzaW9uIHNlc3Npb24pIHsK
LSAgICAgICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiQ3JlYXRlIHNlc3Npb24gZG9uZSIpOwotICAgICAgICAgIHVpVGhyZWFkSGFuZGxlci5y
ZW1vdmVDYWxsYmFja3Mob3BlbkNhbWVyYVRpbWVvdXRSdW5uYWJsZSk7Ci0gICAgICAgICAgc3lu
Y2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25D
YXB0dXJlclN0YXJ0ZWQodHJ1ZSAvKiBzdWNjZXNzICovKTsKLSAgICAgICAgICAgIHNlc3Npb25P
cGVuaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICBjdXJyZW50U2Vzc2lvbiA9IHNlc3Npb247Ci0g
ICAgICAgICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbmV3IENhbWVyYVN0YXRpc3RpY3Moc3VyZmFj
ZUhlbHBlciwgZXZlbnRzSGFuZGxlcik7Ci0gICAgICAgICAgICBmaXJzdEZyYW1lT2JzZXJ2ZWQg
PSBmYWxzZTsKLSAgICAgICAgICAgIHN0YXRlTG9jay5ub3RpZnlBbGwoKTsKLQotICAgICAgICAg
ICAgaWYgKHN3aXRjaFN0YXRlID09IFN3aXRjaFN0YXRlLklOX1BST0dSRVNTKSB7Ci0gICAgICAg
ICAgICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAg
ICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRG9uZShjYW1lcmFFbnVtZXJhdG9y
LmlzRnJvbnRGYWNpbmcoY2FtZXJhTmFtZSkpOwotICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50
c0hhbmRsZXIgPSBudWxsOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIHN3aXRjaFN0
YXRlID0gU3dpdGNoU3RhdGUuSURMRTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoc3dpdGNoU3Rh
dGUgPT0gU3dpdGNoU3RhdGUuUEVORElORykgewotICAgICAgICAgICAgICBzd2l0Y2hTdGF0ZSA9
IFN3aXRjaFN0YXRlLklETEU7Ci0gICAgICAgICAgICAgIHN3aXRjaENhbWVyYUludGVybmFsKHN3
aXRjaEV2ZW50c0hhbmRsZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkZhaWx1cmUoU3Ry
aW5nIGVycm9yKSB7Ci0gICAgICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICAg
ICAgdWlUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhvcGVuQ2FtZXJhVGltZW91dFJ1bm5h
YmxlKTsKLSAgICAgICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICAgICAg
Y2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZChmYWxzZSAvKiBzdWNjZXNzICovKTsK
LSAgICAgICAgICAgIG9wZW5BdHRlbXB0c1JlbWFpbmluZy0tOwotCi0gICAgICAgICAgICBpZiAo
b3BlbkF0dGVtcHRzUmVtYWluaW5nIDw9IDApIHsKLSAgICAgICAgICAgICAgTG9nZ2luZy53KFRB
RywgIk9wZW5pbmcgY2FtZXJhIGZhaWxlZCwgcGFzc2luZzogIiArIGVycm9yKTsKLSAgICAgICAg
ICAgICAgc2Vzc2lvbk9wZW5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAgICAgc3RhdGVMb2NrLm5v
dGlmeUFsbCgpOwotCi0gICAgICAgICAgICAgIGlmIChzd2l0Y2hTdGF0ZSAhPSBTd2l0Y2hTdGF0
ZS5JRExFKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVs
bCkgewotICAgICAgICAgICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRj
aEVycm9yKGVycm9yKTsKLSAgICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIgPSBu
dWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3
aXRjaFN0YXRlLklETEU7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBldmVudHNI
YW5kbGVyLm9uQ2FtZXJhRXJyb3IoZXJyb3IpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgTG9nZ2luZy53KFRBRywgIk9wZW5pbmcgY2FtZXJhIGZhaWxlZCwgcmV0cnk6ICIg
KyBlcnJvcik7Ci0KLSAgICAgICAgICAgICAgY3JlYXRlU2Vzc2lvbkludGVybmFsKE9QRU5fQ0FN
RVJBX0RFTEFZX01TKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFTZXNzaW9uLkV2ZW50cyBjYW1lcmFTZXNz
aW9uRXZlbnRzSGFuZGxlciA9IG5ldyBDYW1lcmFTZXNzaW9uLkV2ZW50cygpIHsKLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYU9wZW5pbmcoKSB7Ci0gICAgICBjaGVja0lz
T25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAg
ICAgIGlmIChjdXJyZW50U2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nZ2luZy53KFRB
RywgIm9uQ2FtZXJhT3BlbmluZyB3aGlsZSBzZXNzaW9uIHdhcyBvcGVuLiIpOwotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhT3Blbmlu
ZyhjYW1lcmFOYW1lKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkNhbWVyYUVycm9yKENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIGVycm9y
KSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAo
c3RhdGVMb2NrKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9uKSB7Ci0g
ICAgICAgICAgTG9nZ2luZy53KFRBRywgIm9uQ2FtZXJhRXJyb3IgZnJvbSBhbm90aGVyIHNlc3Np
b246ICIgKyBlcnJvcik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGV2
ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcihlcnJvcik7Ci0gICAgICAgIHN0b3BDYXB0dXJlKCk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1l
cmFEaXNjb25uZWN0ZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKSB7Ci0gICAgICBjaGVja0lzT25D
YW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAg
IGlmIChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9uKSB7Ci0gICAgICAgICAgTG9nZ2luZy53KFRB
RywgIm9uQ2FtZXJhRGlzY29ubmVjdGVkIGZyb20gYW5vdGhlciBzZXNzaW9uLiIpOwotICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRGlz
Y29ubmVjdGVkKCk7Ci0gICAgICAgIHN0b3BDYXB0dXJlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFDbG9zZWQoQ2FtZXJhU2Vzc2lv
biBzZXNzaW9uKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNo
cm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uICE9IGN1cnJlbnRTZXNz
aW9uICYmIGN1cnJlbnRTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFH
LCAib25DYW1lcmFDbG9zZWQgZnJvbSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFDbG9zZWQoKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkJ5dGVC
dWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBDYW1lcmFTZXNzaW9uIHNlc3Npb24sIGJ5dGVb
XSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3Rh
bXApIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hyb25pemVk
IChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24pIHsK
LSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCBmcm9t
IGFub3RoZXIgc2Vzc2lvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKCFmaXJzdEZyYW1lT2JzZXJ2ZWQpIHsKLSAgICAgICAgICBldmVudHNIYW5kbGVyLm9u
Rmlyc3RGcmFtZUF2YWlsYWJsZSgpOwotICAgICAgICAgIGZpcnN0RnJhbWVPYnNlcnZlZCA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgICAgY2FtZXJhU3RhdGlzdGljcy5hZGRGcmFtZSgpOwotICAg
ICAgICBjYXB0dXJlck9ic2VydmVyLm9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoZGF0YSwgd2lk
dGgsIGhlaWdodCwgcm90YXRpb24sIHRpbWVzdGFtcCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVDYXB0dXJlZChDYW1lcmFT
ZXNzaW9uIHNlc3Npb24sIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAgaW50IG9lc1Rl
eHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9uZyB0aW1l
c3RhbXApIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hyb25p
emVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24p
IHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25UZXh0dXJlRnJhbWVDYXB0dXJlZCBmcm9t
IGFub3RoZXIgc2Vzc2lvbi4iKTsKLSAgICAgICAgICBzdXJmYWNlSGVscGVyLnJldHVyblRleHR1
cmVGcmFtZSgpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZp
cnN0RnJhbWVPYnNlcnZlZCkgewotICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25GaXJzdEZyYW1l
QXZhaWxhYmxlKCk7Ci0gICAgICAgICAgZmlyc3RGcmFtZU9ic2VydmVkID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgICBjYW1lcmFTdGF0aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgICAgIGNhcHR1
cmVyT2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgICAgIHdpZHRoLCBo
ZWlnaHQsIG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1w
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBvcGVu
Q2FtZXJhVGltZW91dFJ1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJv
cigiQ2FtZXJhIGZhaWxlZCB0byBzdGFydCB3aXRoaW4gdGltZW91dC4iKTsKLSAgICB9Ci0gIH07
Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgb24gaW5pdGlhbGl6ZQotICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gIHByaXZhdGUgSGFuZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVyOwotICBwcml2
YXRlIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICBwcml2YXRlIENhcHR1cmVyT2JzZXJ2
ZXIgY2FwdHVyZXJPYnNlcnZlcjsKLSAgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJm
YWNlSGVscGVyOwotCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IHN0YXRlTG9jayA9IG5ldyBPYmpl
Y3QoKTsKLSAgcHJpdmF0ZSBib29sZWFuIHNlc3Npb25PcGVuaW5nOyAvKiBndWFyZGVkIGJ5IHN0
YXRlTG9jayAqLwotICBwcml2YXRlIENhbWVyYVNlc3Npb24gY3VycmVudFNlc3Npb247IC8qIGd1
YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgU3RyaW5nIGNhbWVyYU5hbWU7IC8qIGd1
YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgaW50IHdpZHRoOyAvKiBndWFyZGVkIGJ5
IHN0YXRlTG9jayAqLwotICBwcml2YXRlIGludCBoZWlnaHQ7IC8qIGd1YXJkZWQgYnkgc3RhdGVM
b2NrICovCi0gIHByaXZhdGUgaW50IGZyYW1lcmF0ZTsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sg
Ki8KLSAgcHJpdmF0ZSBpbnQgb3BlbkF0dGVtcHRzUmVtYWluaW5nOyAvKiBndWFyZGVkIGJ5IHN0
YXRlTG9jayAqLwotICBwcml2YXRlIFN3aXRjaFN0YXRlIHN3aXRjaFN0YXRlID0gU3dpdGNoU3Rh
dGUuSURMRTsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBDYW1lcmFTd2l0
Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXI7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICov
Ci0gIC8vIFZhbGlkIGZyb20gb25Eb25lIGNhbGwgdW50aWwgc3RvcENhcHR1cmUsIG90aGVyd2lz
ZSBudWxsLgotICBwcml2YXRlIENhbWVyYVN0YXRpc3RpY3MgY2FtZXJhU3RhdGlzdGljczsgLyog
Z3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVPYnNl
cnZlZDsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLQotICBwdWJsaWMgQ2FtZXJhQ2FwdHVy
ZXIoCi0gICAgICBTdHJpbmcgY2FtZXJhTmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNI
YW5kbGVyLCBDYW1lcmFFbnVtZXJhdG9yIGNhbWVyYUVudW1lcmF0b3IpIHsKLSAgICBpZiAoZXZl
bnRzSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICBldmVudHNIYW5kbGVyID0gbmV3IENhbWVyYUV2
ZW50c0hhbmRsZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBv
bkNhbWVyYUVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7fQotICAgICAgICBAT3ZlcnJp
ZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFEaXNjb25uZWN0ZWQoKSB7fQotICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFGcmVlemVkKFN0cmluZyBl
cnJvckRlc2NyaXB0aW9uKSB7fQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZv
aWQgb25DYW1lcmFPcGVuaW5nKFN0cmluZyBjYW1lcmFOYW1lKSB7fQotICAgICAgICBAT3ZlcnJp
ZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCkge30KLSAgICAg
ICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhQ2xvc2VkKCkge30KLSAg
ICAgIH07Ci0gICAgfQotCi0gICAgdGhpcy5ldmVudHNIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjsK
LSAgICB0aGlzLmNhbWVyYUVudW1lcmF0b3IgPSBjYW1lcmFFbnVtZXJhdG9yOwotICAgIHRoaXMu
Y2FtZXJhTmFtZSA9IGNhbWVyYU5hbWU7Ci0gICAgdWlUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRs
ZXIoTG9vcGVyLmdldE1haW5Mb29wZXIoKSk7Ci0KLSAgICBmaW5hbCBTdHJpbmdbXSBkZXZpY2VO
YW1lcyA9IGNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKTsKLQotICAgIGlmIChkZXZp
Y2VOYW1lcy5sZW5ndGggPT0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
Ik5vIGNhbWVyYXMgYXR0YWNoZWQuIik7Ci0gICAgfQotICAgIGlmICghQXJyYXlzLmFzTGlzdChk
ZXZpY2VOYW1lcykuY29udGFpbnModGhpcy5jYW1lcmFOYW1lKSkgewotICAgICAgdGhyb3cgbmV3
IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAiQ2FtZXJhIG5hbWUgIiArIHRo
aXMuY2FtZXJhTmFtZSArICIgZG9lcyBub3QgbWF0Y2ggYW55IGtub3duIGNhbWVyYSBkZXZpY2Uu
Iik7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUo
U3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGlj
YXRpb25Db250ZXh0LAotICAgICAgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyKSB7
Ci0gICAgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHQgPSBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gICAg
dGhpcy5jYXB0dXJlck9ic2VydmVyID0gY2FwdHVyZXJPYnNlcnZlcjsKLSAgICB0aGlzLnN1cmZh
Y2VIZWxwZXIgPSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYVRocmVhZEhh
bmRsZXIgPQotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciA9PSBudWxsID8gbnVsbCA6IHN1
cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBzdGFydENhcHR1cmUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVy
YXRlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0Q2FwdHVyZTogIiArIHdpZHRoICsgIngi
ICsgaGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlKTsKLQotICAgIHN5bmNocm9uaXplZCAoc3RhdGVM
b2NrKSB7Ci0gICAgICBpZiAoc2Vzc2lvbk9wZW5pbmcgfHwgY3VycmVudFNlc3Npb24gIT0gbnVs
bCkgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiU2Vzc2lvbiBhbHJlYWR5IG9wZW4iKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAg
ICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHRoaXMuZnJhbWVyYXRlID0gZnJhbWVyYXRl
OwotCi0gICAgICBzZXNzaW9uT3BlbmluZyA9IHRydWU7Ci0gICAgICBvcGVuQXR0ZW1wdHNSZW1h
aW5pbmcgPSBNQVhfT1BFTl9DQU1FUkFfQVRURU1QVFM7Ci0gICAgICBjcmVhdGVTZXNzaW9uSW50
ZXJuYWwoMCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVNlc3Npb25JbnRl
cm5hbChpbnQgZGVsYXlNcykgewotICAgIHVpVGhyZWFkSGFuZGxlci5wb3N0RGVsYXllZChvcGVu
Q2FtZXJhVGltZW91dFJ1bm5hYmxlLCBkZWxheU1zICsgT1BFTl9DQU1FUkFfVElNRU9VVCk7Ci0g
ICAgY2FtZXJhVGhyZWFkSGFuZGxlci5wb3N0RGVsYXllZChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY3JlYXRlQ2Ft
ZXJhU2Vzc2lvbihjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIGNhbWVyYVNlc3Npb25FdmVudHNIYW5k
bGVyLCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICAgICAgICBzdXJmYWNlSGVscGVyLCBjYW1l
cmFOYW1lLCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgICAgfQotICAgIH0sIGRlbGF5
TXMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0b3BDYXB0dXJlKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmUiKTsKLQotICAgIHN5bmNocm9uaXplZCAo
c3RhdGVMb2NrKSB7Ci0gICAgICB3aGlsZSAoc2Vzc2lvbk9wZW5pbmcpIHsKLSAgICAgICAgTG9n
Z2luZy5kKFRBRywgIlN0b3AgY2FwdHVyZTogV2FpdGluZyBmb3Igc2Vzc2lvbiB0byBvcGVuIik7
Ci0gICAgICAgIFRocmVhZFV0aWxzLndhaXRVbmludGVycnVwdGlibHkoc3RhdGVMb2NrKTsKLSAg
ICAgIH0KLQotICAgICAgaWYgKGN1cnJlbnRTZXNzaW9uICE9IG51bGwpIHsKLSAgICAgICAgTG9n
Z2luZy5kKFRBRywgIlN0b3AgY2FwdHVyZTogTnVsbGluZyBzZXNzaW9uIik7Ci0gICAgICAgIGNh
bWVyYVN0YXRpc3RpY3MucmVsZWFzZSgpOwotICAgICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbnVs
bDsKLSAgICAgICAgZmluYWwgQ2FtZXJhU2Vzc2lvbiBvbGRTZXNzaW9uID0gY3VycmVudFNlc3Np
b247Ci0gICAgICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICAgICAgb2xkU2Vzc2lvbi5zdG9wKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAg
ICAgY3VycmVudFNlc3Npb24gPSBudWxsOwotICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9uQ2Fw
dHVyZXJTdG9wcGVkKCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
U3RvcCBjYXB0dXJlOiBObyBzZXNzaW9uIG9wZW4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBM
b2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0dXJlIGRvbmUiKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IGZyYW1lcmF0ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJjaGFuZ2VDYXB0dXJlRm9ybWF0
OiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBmcmFtZXJhdGUpOwotICAgIHN5bmNo
cm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICBzdG9wQ2FwdHVyZSgpOwotICAgICAgc3RhcnRD
YXB0dXJlKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImRpc3Bv
c2UiKTsKLSAgICBzdG9wQ2FwdHVyZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIHN3aXRjaENhbWVyYShmaW5hbCBDYW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hh
bmRsZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhIik7Ci0gICAgY2FtZXJh
VGhyZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBzd2l0Y2hDYW1lcmFJbnRlcm5hbChzd2l0
Y2hFdmVudHNIYW5kbGVyKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAgIFRocmVhZCBjYW1lcmFU
aHJlYWQgPSBudWxsOwotICAgIGlmIChjYW1lcmFUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAg
ICAgIGNhbWVyYVRocmVhZCA9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhy
ZWFkKCk7Ci0gICAgfQotICAgIGlmIChjYW1lcmFUaHJlYWQgIT0gbnVsbCkgewotICAgICAgU3Rh
Y2tUcmFjZUVsZW1lbnRbXSBjYW1lcmFTdGFja1RyYWNlID0gY2FtZXJhVGhyZWFkLmdldFN0YWNr
VHJhY2UoKTsKLSAgICAgIGlmIChjYW1lcmFTdGFja1RyYWNlLmxlbmd0aCA+IDApIHsKLSAgICAg
ICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYUNhcHR1cmVyIHN0YWNrIHRyYWNlOiIpOwotICAgICAg
ICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHRyYWNlRWxlbSA6IGNhbWVyYVN0YWNrVHJhY2UpIHsK
LSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCB0cmFjZUVsZW0udG9TdHJpbmcoKSk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3dpdGNoQ2FtZXJhSW50
ZXJuYWwoZmluYWwgQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVyKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYSBpbnRlcm5hbCIpOwotCi0gICAgZmluYWwg
U3RyaW5nW10gZGV2aWNlTmFtZXMgPSBjYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCk7
Ci0KLSAgICBpZiAoZGV2aWNlTmFtZXMubGVuZ3RoIDwgMikgewotICAgICAgaWYgKHN3aXRjaEV2
ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2Ft
ZXJhU3dpdGNoRXJyb3IoIk5vIGNhbWVyYSB0byBzd2l0Y2ggdG8uIik7Ci0gICAgICB9Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAg
IGlmIChzd2l0Y2hTdGF0ZSAhPSBTd2l0Y2hTdGF0ZS5JRExFKSB7Ci0gICAgICAgIExvZ2dpbmcu
ZChUQUcsICJzd2l0Y2hDYW1lcmEgc3dpdGNoSW5Qcm9ncmVzcyIpOwotICAgICAgICBpZiAoc3dp
dGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxl
ci5vbkNhbWVyYVN3aXRjaEVycm9yKCJDYW1lcmEgc3dpdGNoIGFscmVhZHkgaW4gcHJvZ3Jlc3Mu
Iik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAoIXNl
c3Npb25PcGVuaW5nICYmIGN1cnJlbnRTZXNzaW9uID09IG51bGwpIHsKLSAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgInN3aXRjaENhbWVyYTogTm8gc2Vzc2lvbiBvcGVuIik7Ci0gICAgICAgIGlmIChz
d2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5k
bGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoIkNhbWVyYSBpcyBub3QgcnVubmluZy4iKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHRoaXMuc3dpdGNoRXZlbnRz
SGFuZGxlciA9IHN3aXRjaEV2ZW50c0hhbmRsZXI7Ci0gICAgICBpZiAoc2Vzc2lvbk9wZW5pbmcp
IHsKLSAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5QRU5ESU5HOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9IGVsc2UgewotICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0YXRl
LklOX1BST0dSRVNTOwotICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2Ft
ZXJhOiBTdG9wcGluZyBzZXNzaW9uIik7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNzLnJlbGVhc2Uo
KTsKLSAgICAgIGNhbWVyYVN0YXRpc3RpY3MgPSBudWxsOwotICAgICAgZmluYWwgQ2FtZXJhU2Vz
c2lvbiBvbGRTZXNzaW9uID0gY3VycmVudFNlc3Npb247Ci0gICAgICBjYW1lcmFUaHJlYWRIYW5k
bGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIG9sZFNlc3Npb24uc3RvcCgpOwotICAgICAgICB9
Ci0gICAgICB9KTsKLSAgICAgIGN1cnJlbnRTZXNzaW9uID0gbnVsbDsKLQotICAgICAgaW50IGNh
bWVyYU5hbWVJbmRleCA9IEFycmF5cy5hc0xpc3QoZGV2aWNlTmFtZXMpLmluZGV4T2YoY2FtZXJh
TmFtZSk7Ci0gICAgICBjYW1lcmFOYW1lID0gZGV2aWNlTmFtZXNbKGNhbWVyYU5hbWVJbmRleCAr
IDEpICUgZGV2aWNlTmFtZXMubGVuZ3RoXTsKLQotICAgICAgc2Vzc2lvbk9wZW5pbmcgPSB0cnVl
OwotICAgICAgb3BlbkF0dGVtcHRzUmVtYWluaW5nID0gMTsKLSAgICAgIGNyZWF0ZVNlc3Npb25J
bnRlcm5hbCgwKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYSBkb25l
Iik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCkgewotICAg
IGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9v
cGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDaGVjayBpcyBvbiBj
YW1lcmEgdGhyZWFkIGZhaWxlZC4iKTsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJOb3Qgb24gY2FtZXJhIHRocmVhZC4iKTsKLSAgICB9Ci0gIH0KLQotICBwcm90ZWN0ZWQgU3Ry
aW5nIGdldENhbWVyYU5hbWUoKSB7Ci0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAg
ICAgIHJldHVybiBjYW1lcmFOYW1lOwotICAgIH0KLSAgfQotCi0gIGFic3RyYWN0IHByb3RlY3Rl
ZCB2b2lkIGNyZWF0ZUNhbWVyYVNlc3Npb24oCi0gICAgICBDYW1lcmFTZXNzaW9uLkNyZWF0ZVNl
c3Npb25DYWxsYmFjayBjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssIENhbWVyYVNlc3Npb24uRXZlbnRz
IGV2ZW50cywKLSAgICAgIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LCBTdXJmYWNlVGV4dHVy
ZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3RyaW5nIGNhbWVyYU5hbWUsCi0gICAgICBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpOwotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsMjA3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTWF0aC5hYnM7Ci0KLWlt
cG9ydCBhbmRyb2lkLmdyYXBoaWNzLkltYWdlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVj
dGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxp
c3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5NZXRyaWNzLkhpc3RvZ3JhbTsKLQotQFN1cHByZXNzV2Fy
bmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBDYW1lcmFFbnVtZXJhdGlvbkFuZHJv
aWQgewotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNhbWVyYUVudW1lcmF0
aW9uQW5kcm9pZCI7Ci0KLSAgc3RhdGljIGZpbmFsIEFycmF5TGlzdDxTaXplPiBDT01NT05fUkVT
T0xVVElPTlMgPSBuZXcgQXJyYXlMaXN0PFNpemU+KEFycmF5cy5hc0xpc3QoCi0gICAgICAvLyAw
LCBVbmtub3duIHJlc29sdXRpb24KLSAgICAgIG5ldyBTaXplKDE2MCwgMTIwKSwgLy8gMSwgUVFW
R0EKLSAgICAgIG5ldyBTaXplKDI0MCwgMTYwKSwgLy8gMiwgSFFWR0EKLSAgICAgIG5ldyBTaXpl
KDMyMCwgMjQwKSwgLy8gMywgUVZHQQotICAgICAgbmV3IFNpemUoNDAwLCAyNDApLCAvLyA0LCBX
UVZHQQotICAgICAgbmV3IFNpemUoNDgwLCAzMjApLCAvLyA1LCBIVkdBCi0gICAgICBuZXcgU2l6
ZSg2NDAsIDM2MCksIC8vIDYsIG5IRAotICAgICAgbmV3IFNpemUoNjQwLCA0ODApLCAvLyA3LCBW
R0EKLSAgICAgIG5ldyBTaXplKDc2OCwgNDgwKSwgLy8gOCwgV1ZHQQotICAgICAgbmV3IFNpemUo
ODU0LCA0ODApLCAvLyA5LCBGV1ZHQQotICAgICAgbmV3IFNpemUoODAwLCA2MDApLCAvLyAxMCwg
U1ZHQQotICAgICAgbmV3IFNpemUoOTYwLCA1NDApLCAvLyAxMSwgcUhECi0gICAgICBuZXcgU2l6
ZSg5NjAsIDY0MCksIC8vIDEyLCBEVkdBCi0gICAgICBuZXcgU2l6ZSgxMDI0LCA1NzYpLCAvLyAx
MywgV1NWR0EKLSAgICAgIG5ldyBTaXplKDEwMjQsIDYwMCksIC8vIDE0LCBXVlNHQQotICAgICAg
bmV3IFNpemUoMTI4MCwgNzIwKSwgLy8gMTUsIEhECi0gICAgICBuZXcgU2l6ZSgxMjgwLCAxMDI0
KSwgLy8gMTYsIFNYR0EKLSAgICAgIG5ldyBTaXplKDE5MjAsIDEwODApLCAvLyAxNywgRnVsbCBI
RAotICAgICAgbmV3IFNpemUoMTkyMCwgMTQ0MCksIC8vIDE4LCBGdWxsIEhEIDQ6MwotICAgICAg
bmV3IFNpemUoMjU2MCwgMTQ0MCksIC8vIDE5LCBRSEQKLSAgICAgIG5ldyBTaXplKDM4NDAsIDIx
NjApIC8vIDIwLCBVSEQKLSAgICAgICkpOwotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2FwdHVy
ZUZvcm1hdCB7Ci0gICAgLy8gQ2xhc3MgdG8gcmVwcmVzZW50IGEgZnJhbWVyYXRlIHJhbmdlLiBU
aGUgZnJhbWVyYXRlIHZhcmllcyBiZWNhdXNlIG9mIGxpZ2h0bmluZyBjb25kaXRpb25zLgotICAg
IC8vIFRoZSB2YWx1ZXMgYXJlIG11bHRpcGxpZWQgYnkgMTAwMCwgc28gMTAwMCByZXByZXNlbnRz
IG9uZSBmcmFtZSBwZXIgc2Vjb25kLgotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgRnJhbWVyYXRl
UmFuZ2UgewotICAgICAgcHVibGljIGludCBtaW47Ci0gICAgICBwdWJsaWMgaW50IG1heDsKLQot
ICAgICAgcHVibGljIEZyYW1lcmF0ZVJhbmdlKGludCBtaW4sIGludCBtYXgpIHsKLSAgICAgICAg
dGhpcy5taW4gPSBtaW47Ci0gICAgICAgIHRoaXMubWF4ID0gbWF4OwotICAgICAgfQotCi0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICAgIHJl
dHVybiAiWyIgKyAobWluIC8gMTAwMC4wZikgKyAiOiIgKyAobWF4IC8gMTAwMC4wZikgKyAiXSI7
Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gZXF1YWxz
KE9iamVjdCBvdGhlcikgewotICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEZyYW1lcmF0
ZVJhbmdlKSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBm
aW5hbCBGcmFtZXJhdGVSYW5nZSBvdGhlckZyYW1lcmF0ZSA9IChGcmFtZXJhdGVSYW5nZSkgb3Ro
ZXI7Ci0gICAgICAgIHJldHVybiBtaW4gPT0gb3RoZXJGcmFtZXJhdGUubWluICYmIG1heCA9PSBv
dGhlckZyYW1lcmF0ZS5tYXg7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgICAgLy8gVXNlIHByaW1lIGNsb3NlIHRvIDJeMTYg
dG8gYXZvaWQgY29sbGlzaW9ucyBmb3Igbm9ybWFsIHZhbHVlcyBsZXNzIHRoYW4gMl4xNi4KLSAg
ICAgICAgcmV0dXJuIDEgKyA2NTUzNyAqIG1pbiArIG1heDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBwdWJsaWMgZmluYWwgaW50IHdpZHRoOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgaGVpZ2h0Owot
ICAgIHB1YmxpYyBmaW5hbCBGcmFtZXJhdGVSYW5nZSBmcmFtZXJhdGU7Ci0KLSAgICAvLyBUT0RP
KGhib3MpOiBJZiBWaWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZSBpcyB1cGRhdGVkIHRvIHN1cHBv
cnQgb3RoZXIgaW1hZ2UgZm9ybWF0cyB0aGVuIHRoaXMKLSAgICAvLyBuZWVkcyB0byBiZSB1cGRh
dGVkIGFuZCBWaWRlb0NhcHR1cmVyLmdldFN1cHBvcnRlZEZvcm1hdHMgbmVlZCB0byByZXR1cm4g
Q2FwdHVyZUZvcm1hdHMgb2YKLSAgICAvLyBhbGwgaW1hZ2VGb3JtYXRzLgotICAgIHB1YmxpYyBm
aW5hbCBpbnQgaW1hZ2VGb3JtYXQgPSBJbWFnZUZvcm1hdC5OVjIxOwotCi0gICAgcHVibGljIENh
cHR1cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWluRnJhbWVyYXRlLCBpbnQg
bWF4RnJhbWVyYXRlKSB7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0aGlzLmhl
aWdodCA9IGhlaWdodDsKLSAgICAgIHRoaXMuZnJhbWVyYXRlID0gbmV3IEZyYW1lcmF0ZVJhbmdl
KG1pbkZyYW1lcmF0ZSwgbWF4RnJhbWVyYXRlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2FwdHVy
ZUZvcm1hdChpbnQgd2lkdGgsIGludCBoZWlnaHQsIEZyYW1lcmF0ZVJhbmdlIGZyYW1lcmF0ZSkg
ewotICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7
Ci0gICAgICB0aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKLSAgICB9Ci0KLSAgICAvLyBDYWxj
dWxhdGVzIHRoZSBmcmFtZSBzaXplIG9mIHRoaXMgY2FwdHVyZSBmb3JtYXQuCi0gICAgcHVibGlj
IGludCBmcmFtZVNpemUoKSB7Ci0gICAgICByZXR1cm4gZnJhbWVTaXplKHdpZHRoLCBoZWlnaHQs
IGltYWdlRm9ybWF0KTsKLSAgICB9Ci0KLSAgICAvLyBDYWxjdWxhdGVzIHRoZSBmcmFtZSBzaXpl
IG9mIHRoZSBzcGVjaWZpZWQgaW1hZ2UgZm9ybWF0LiBDdXJyZW50bHkgb25seQotICAgIC8vIHN1
cHBvcnRpbmcgSW1hZ2VGb3JtYXQuTlYyMS4KLSAgICAvLyBUaGUgc2l6ZSBpcyB3aWR0aCAqIGhl
aWdodCAqIG51bWJlciBvZiBieXRlcyBwZXIgcGl4ZWwuCi0gICAgLy8gaHR0cDovL2RldmVsb3Bl
ci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEuaHRtbCNhZGRD
YWxsYmFja0J1ZmZlcihieXRlW10pCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZnJhbWVTaXplKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGltYWdlRm9ybWF0KSB7Ci0gICAgICBpZiAoaW1hZ2VG
b3JtYXQgIT0gSW1hZ2VGb3JtYXQuTlYyMSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0
ZWRPcGVyYXRpb25FeGNlcHRpb24oIkRvbid0IGtub3cgaG93IHRvIGNhbGN1bGF0ZSAiCi0gICAg
ICAgICAgICArICJ0aGUgZnJhbWUgc2l6ZSBvZiBub24tTlYyMSBpbWFnZSBmb3JtYXRzLiIpOwot
ICAgICAgfQotICAgICAgcmV0dXJuICh3aWR0aCAqIGhlaWdodCAqIEltYWdlRm9ybWF0LmdldEJp
dHNQZXJQaXhlbChpbWFnZUZvcm1hdCkpIC8gODsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHdpZHRoICsgIngiICsg
aGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGlmICghKG90aGVyIGlu
c3RhbmNlb2YgQ2FwdHVyZUZvcm1hdCkpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
fQotICAgICAgZmluYWwgQ2FwdHVyZUZvcm1hdCBvdGhlckZvcm1hdCA9IChDYXB0dXJlRm9ybWF0
KSBvdGhlcjsKLSAgICAgIHJldHVybiB3aWR0aCA9PSBvdGhlckZvcm1hdC53aWR0aCAmJiBoZWln
aHQgPT0gb3RoZXJGb3JtYXQuaGVpZ2h0Ci0gICAgICAgICAgJiYgZnJhbWVyYXRlLmVxdWFscyhv
dGhlckZvcm1hdC5mcmFtZXJhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICByZXR1cm4gMSArICh3aWR0aCAqIDY1NDk3ICsgaGVp
Z2h0KSAqIDI1MSArIGZyYW1lcmF0ZS5oYXNoQ29kZSgpOwotICAgIH0KLSAgfQotCi0gIC8vIEhl
bHBlciBjbGFzcyBmb3IgZmluZGluZyB0aGUgY2xvc2VzdCBzdXBwb3J0ZWQgZm9ybWF0IGZvciB0
aGUgdHdvIGZ1bmN0aW9ucyBiZWxvdy4gSXQgY3JlYXRlcyBhCi0gIC8vIGNvbXBhcmF0b3IgYmFz
ZWQgb24gdGhlIGRpZmZlcmVuY2UgdG8gc29tZSByZXF1ZXN0ZWQgcGFyYW1ldGVycywgd2hlcmUg
dGhlIGVsZW1lbnQgd2l0aCB0aGUKLSAgLy8gbWluaW11bSBkaWZmZXJlbmNlIGlzIHRoZSBlbGVt
ZW50IHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgcmVxdWVzdGVkIHBhcmFtZXRlcnMuCi0gIHByaXZh
dGUgc3RhdGljIGFic3RyYWN0IGNsYXNzIENsb3Nlc3RDb21wYXJhdG9yPFQ+IGltcGxlbWVudHMg
Q29tcGFyYXRvcjxUPiB7Ci0gICAgLy8gRGlmZmVyZW5jZSBiZXR3ZWVuIHN1cHBvcnRlZCBhbmQg
cmVxdWVzdGVkIHBhcmFtZXRlci4KLSAgICBhYnN0cmFjdCBpbnQgZGlmZihUIHN1cHBvcnRlZFBh
cmFtZXRlcik7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNvbXBhcmUoVCB0MSwg
VCB0MikgewotICAgICAgcmV0dXJuIGRpZmYodDEpIC0gZGlmZih0Mik7Ci0gICAgfQotICB9Ci0K
LSAgLy8gUHJlZmVyIGEgZnBzIHJhbmdlIHdpdGggYW4gdXBwZXIgYm91bmQgY2xvc2UgdG8gfGZy
YW1lcmF0ZXwuIEFsc28gcHJlZmVyIGEgZnBzIHJhbmdlIHdpdGggYSBsb3cKLSAgLy8gbG93ZXIg
Ym91bmQsIHRvIGFsbG93IHRoZSBmcmFtZXJhdGUgdG8gZmx1Y3R1YXRlIGJhc2VkIG9uIGxpZ2h0
bmluZyBjb25kaXRpb25zLgotICBwdWJsaWMgc3RhdGljIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRl
UmFuZ2UgZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKAotICAgICAgTGlzdDxDYXB0
dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBzdXBwb3J0ZWRGcmFtZXJhdGVzLCBmaW5hbCBpbnQg
cmVxdWVzdGVkRnBzKSB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLm1pbigKLSAgICAgICAgc3Vw
cG9ydGVkRnJhbWVyYXRlcywgbmV3IENsb3Nlc3RDb21wYXJhdG9yPENhcHR1cmVGb3JtYXQuRnJh
bWVyYXRlUmFuZ2U+KCkgewotICAgICAgICAgIC8vIFByb2dyZXNzaXZlIHBlbmFsdHkgaWYgdGhl
IHVwcGVyIGJvdW5kIGlzIGZ1cnRoZXIgYXdheSB0aGFuIHxNQVhfRlBTX0RJRkZfVEhSRVNIT0xE
fAotICAgICAgICAgIC8vIGZyb20gcmVxdWVzdGVkLgotICAgICAgICAgIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBNQVhfRlBTX0RJRkZfVEhSRVNIT0xEID0gNTAwMDsKLSAgICAgICAgICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0ZQU19MT1dfRElGRl9XRUlHSFQgPSAxOwotICAgICAg
ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfRlBTX0hJR0hfRElGRl9XRUlHSFQgPSAz
OwotCi0gICAgICAgICAgLy8gUHJvZ3Jlc3NpdmUgcGVuYWx0eSBpZiB0aGUgbG93ZXIgYm91bmQg
aXMgYmlnZ2VyIHRoYW4gfE1JTl9GUFNfVEhSRVNIT0xEfC4KLSAgICAgICAgICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgTUlOX0ZQU19USFJFU0hPTEQgPSA4MDAwOwotICAgICAgICAgIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBNSU5fRlBTX0xPV19WQUxVRV9XRUlHSFQgPSAxOwotICAgICAg
ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fRlBTX0hJR0hfVkFMVUVfV0VJR0hUID0g
NDsKLQotICAgICAgICAgIC8vIFVzZSBvbmUgd2VpZ2h0IGZvciBzbWFsbCB8dmFsdWV8IGxlc3Mg
dGhhbiB8dGhyZXNob2xkfCwgYW5kIGFub3RoZXIgd2VpZ2h0IGFib3ZlLgotICAgICAgICAgIHBy
aXZhdGUgaW50IHByb2dyZXNzaXZlUGVuYWx0eShpbnQgdmFsdWUsIGludCB0aHJlc2hvbGQsIGlu
dCBsb3dXZWlnaHQsIGludCBoaWdoV2VpZ2h0KSB7Ci0gICAgICAgICAgICByZXR1cm4gKHZhbHVl
IDwgdGhyZXNob2xkKSA/IHZhbHVlICogbG93V2VpZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IHRocmVzaG9sZCAqIGxvd1dlaWdodCArICh2YWx1ZSAtIHRocmVz
aG9sZCkgKiBoaWdoV2VpZ2h0OwotICAgICAgICAgIH0KLQotICAgICAgICAgIEBPdmVycmlkZQot
ICAgICAgICAgIGludCBkaWZmKENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UgcmFuZ2UpIHsK
LSAgICAgICAgICAgIGZpbmFsIGludCBtaW5GcHNFcnJvciA9IHByb2dyZXNzaXZlUGVuYWx0eSgK
LSAgICAgICAgICAgICAgICByYW5nZS5taW4sIE1JTl9GUFNfVEhSRVNIT0xELCBNSU5fRlBTX0xP
V19WQUxVRV9XRUlHSFQsIE1JTl9GUFNfSElHSF9WQUxVRV9XRUlHSFQpOwotICAgICAgICAgICAg
ZmluYWwgaW50IG1heEZwc0Vycm9yID0gcHJvZ3Jlc3NpdmVQZW5hbHR5KE1hdGguYWJzKHJlcXVl
c3RlZEZwcyAqIDEwMDAgLSByYW5nZS5tYXgpLAotICAgICAgICAgICAgICAgIE1BWF9GUFNfRElG
Rl9USFJFU0hPTEQsIE1BWF9GUFNfTE9XX0RJRkZfV0VJR0hULCBNQVhfRlBTX0hJR0hfRElGRl9X
RUlHSFQpOwotICAgICAgICAgICAgcmV0dXJuIG1pbkZwc0Vycm9yICsgbWF4RnBzRXJyb3I7Ci0g
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU2l6ZSBnZXRD
bG9zZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgIExpc3Q8U2l6ZT4gc3VwcG9ydGVkU2l6ZXMsIGZp
bmFsIGludCByZXF1ZXN0ZWRXaWR0aCwgZmluYWwgaW50IHJlcXVlc3RlZEhlaWdodCkgewotICAg
IHJldHVybiBDb2xsZWN0aW9ucy5taW4oc3VwcG9ydGVkU2l6ZXMsIG5ldyBDbG9zZXN0Q29tcGFy
YXRvcjxTaXplPigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgaW50IGRpZmYoU2l6ZSBzaXpl
KSB7Ci0gICAgICAgIHJldHVybiBhYnMocmVxdWVzdGVkV2lkdGggLSBzaXplLndpZHRoKSArIGFi
cyhyZXF1ZXN0ZWRIZWlnaHQgLSBzaXplLmhlaWdodCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0K
LQotICAvLyBIZWxwZXIgbWV0aG9kIGZvciBjYW1lcmEgY2xhc3Nlcy4KLSAgc3RhdGljIHZvaWQg
cmVwb3J0Q2FtZXJhUmVzb2x1dGlvbihIaXN0b2dyYW0gaGlzdG9ncmFtLCBTaXplIHJlc29sdXRp
b24pIHsKLSAgICBpbnQgaW5kZXggPSBDT01NT05fUkVTT0xVVElPTlMuaW5kZXhPZihyZXNvbHV0
aW9uKTsKLSAgICAvLyAwIGlzIHJlc2VydmVkIGZvciB1bmtub3duIHJlc29sdXRpb24sIHNvIGFk
ZCAxLgotICAgIC8vIGluZGV4T2YgcmV0dXJucyAtMSBmb3IgdW5rbm93biByZXNvbHV0aW9ucyBz
byBpdCBiZWNvbWVzIDAgYXV0b21hdGljYWxseS4KLSAgICBoaXN0b2dyYW0uYWRkU2FtcGxlKGlu
ZGV4ICsgMSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRv
ci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRvci5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0
b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVy
YXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQot
cHVibGljIGludGVyZmFjZSBDYW1lcmFFbnVtZXJhdG9yIHsKLSAgcHVibGljIFN0cmluZ1tdIGdl
dERldmljZU5hbWVzKCk7Ci0gIHB1YmxpYyBib29sZWFuIGlzRnJvbnRGYWNpbmcoU3RyaW5nIGRl
dmljZU5hbWUpOwotICBwdWJsaWMgYm9vbGVhbiBpc0JhY2tGYWNpbmcoU3RyaW5nIGRldmljZU5h
bWUpOwotICBwdWJsaWMgTGlzdDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKFN0
cmluZyBkZXZpY2VOYW1lKTsKLQotICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0dXJlciBjcmVhdGVD
YXB0dXJlcigKLSAgICAgIFN0cmluZyBkZXZpY2VOYW1lLCBDYW1lcmFWaWRlb0NhcHR1cmVyLkNh
bWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0NhbWVyYVNlc3Npb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0Nh
bWVyYVNlc3Npb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9D
YW1lcmFTZXNzaW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ2Ft
ZXJhU2Vzc2lvbiB7Ci0gIC8vIENhbGxiYWNrcyBhcmUgZmlyZWQgb24gdGhlIGNhbWVyYSB0aHJl
YWQuCi0gIHB1YmxpYyBpbnRlcmZhY2UgQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIHsKLSAgICB2b2lk
IG9uRG9uZShDYW1lcmFTZXNzaW9uIHNlc3Npb24pOwotICAgIHZvaWQgb25GYWlsdXJlKFN0cmlu
ZyBlcnJvcik7Ci0gIH0KLQotICAvLyBFdmVudHMgYXJlIGZpcmVkIG9uIHRoZSBjYW1lcmEgdGhy
ZWFkLgotICBwdWJsaWMgaW50ZXJmYWNlIEV2ZW50cyB7Ci0gICAgdm9pZCBvbkNhbWVyYU9wZW5p
bmcoKTsKLSAgICB2b2lkIG9uQ2FtZXJhRXJyb3IoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBTdHJp
bmcgZXJyb3IpOwotICAgIHZvaWQgb25DYW1lcmFEaXNjb25uZWN0ZWQoQ2FtZXJhU2Vzc2lvbiBz
ZXNzaW9uKTsKLSAgICB2b2lkIG9uQ2FtZXJhQ2xvc2VkKENhbWVyYVNlc3Npb24gc2Vzc2lvbik7
Ci0gICAgdm9pZCBvbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBDYW1lcmFTZXNz
aW9uIHNlc3Npb24sIGJ5dGVbXSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3Rh
dGlvbiwgbG9uZyB0aW1lc3RhbXApOwotICAgIHZvaWQgb25UZXh0dXJlRnJhbWVDYXB0dXJlZChD
YW1lcmFTZXNzaW9uIHNlc3Npb24sIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9lc1RleHR1
cmVJZCwKLSAgICAgICAgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9u
ZyB0aW1lc3RhbXApOwotICB9Ci0KLSAgLyoqCi0gICAqIFN0b3BzIHRoZSBjYXB0dXJlLiBXYWl0
cyB1bnRpbCBubyBtb3JlIGNhbGxzIHRvIGNhcHR1cmUgb2JzZXJ2ZXIgd2lsbCBiZSBtYWRlLgot
ICAgKiBJZiB3YWl0Q2FtZXJhU3RvcCBpcyB0cnVlLCBhbHNvIHdhaXRzIGZvciB0aGUgY2FtZXJh
IHRvIHN0b3AuCi0gICAqLwotICB2b2lkIHN0b3AoKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvQ2FtZXJhVmlkZW9DYXB0dXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvQ2FtZXJhVmlkZW9DYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEz
MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8q
KgotICogQmFzZSBpbnRlcmZhY2UgZm9yIGNhbWVyYTEgYW5kIGNhbWVyYTIgaW1wbGVtZW50YXRp
b25zLiBFeHRlbmRzIFZpZGVvQ2FwdHVyZXIgd2l0aCBhCi0gKiBzd2l0Y2hDYW1lcmEoKSBmdW5j
dGlvbi4gQWxzbyBwcm92aWRlcyBzdWJpbnRlcmZhY2VzIGZvciBoYW5kbGluZyBjYW1lcmEgZXZl
bnRzLCBhbmQgYSBoZWxwZXIKLSAqIGNsYXNzIGZvciBkZXRlY3RpbmcgY2FtZXJhIGZyZWV6ZXMu
Ci0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJhVmlkZW9DYXB0dXJlciBleHRlbmRzIFZpZGVv
Q2FwdHVyZXIgewotICAvKioKLSAgICogQ2FtZXJhIGV2ZW50cyBoYW5kbGVyIC0gY2FuIGJlIHVz
ZWQgdG8gYmUgbm90aWZlZCBhYm91dCBjYW1lcmEgZXZlbnRzLiBUaGUgY2FsbGJhY2tzIGFyZQot
ICAgKiBleGVjdXRlZCBmcm9tIGFuIGFyYml0cmFyeSB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMg
aW50ZXJmYWNlIENhbWVyYUV2ZW50c0hhbmRsZXIgewotICAgIC8vIENhbWVyYSBlcnJvciBoYW5k
bGVyIC0gaW52b2tlZCB3aGVuIGNhbWVyYSBjYW4gbm90IGJlIG9wZW5lZAotICAgIC8vIG9yIGFu
eSBjYW1lcmEgZXhjZXB0aW9uIGhhcHBlbnMgb24gY2FtZXJhIHRocmVhZC4KLSAgICB2b2lkIG9u
Q2FtZXJhRXJyb3IoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pOwotCi0gICAgLy8gQ2FsbGVkIHdo
ZW4gY2FtZXJhIGlzIGRpc2Nvbm5lY3RlZC4KLSAgICB2b2lkIG9uQ2FtZXJhRGlzY29ubmVjdGVk
KCk7Ci0KLSAgICAvLyBJbnZva2VkIHdoZW4gY2FtZXJhIHN0b3BzIHJlY2VpdmluZyBmcmFtZXMu
Ci0gICAgdm9pZCBvbkNhbWVyYUZyZWV6ZWQoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pOwotCi0g
ICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGNhbWVyYSBpcyBvcGVuaW5nLgotICAgIHZvaWQg
b25DYW1lcmFPcGVuaW5nKFN0cmluZyBjYW1lcmFOYW1lKTsKLQotICAgIC8vIENhbGxiYWNrIGlu
dm9rZWQgd2hlbiBmaXJzdCBjYW1lcmEgZnJhbWUgaXMgYXZhaWxhYmxlIGFmdGVyIGNhbWVyYSBp
cyBzdGFydGVkLgotICAgIHZvaWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0KLSAgICAvLyBD
YWxsYmFjayBpbnZva2VkIHdoZW4gY2FtZXJhIGlzIGNsb3NlZC4KLSAgICB2b2lkIG9uQ2FtZXJh
Q2xvc2VkKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FtZXJhIHN3aXRjaCBoYW5kbGVyIC0gb25l
IG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW52b2tlZCB3aXRoIHRoZSByZXN1bHQgb2Ygc3dpdGNo
Q2FtZXJhKCkuCi0gICAqIFRoZSBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIG9uIGFuIGFyYml0cmFy
eSB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIENhbWVyYVN3aXRjaEhhbmRsZXIg
ewotICAgIC8vIEludm9rZWQgb24gc3VjY2Vzcy4gfGlzRnJvbnRDYW1lcmF8IGlzIHRydWUgaWYg
dGhlIG5ldyBjYW1lcmEgaXMgZnJvbnQgZmFjaW5nLgotICAgIHZvaWQgb25DYW1lcmFTd2l0Y2hE
b25lKGJvb2xlYW4gaXNGcm9udENhbWVyYSk7Ci0KLSAgICAvLyBJbnZva2VkIG9uIGZhaWx1cmUs
IGUuZy4gY2FtZXJhIGlzIHN0b3BwZWQgb3Igb25seSBvbmUgY2FtZXJhIGF2YWlsYWJsZS4KLSAg
ICB2b2lkIG9uQ2FtZXJhU3dpdGNoRXJyb3IoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pOwotICB9
Ci0KLSAgLyoqCi0gICAqIFN3aXRjaCBjYW1lcmEgdG8gdGhlIG5leHQgdmFsaWQgY2FtZXJhIGlk
LiBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGUgY2FtZXJhIGlzIHJ1bm5pbmcuCi0g
ICAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQuCi0gICAqLwot
ICB2b2lkIHN3aXRjaENhbWVyYShDYW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRs
ZXIpOwotCi0gIC8qKgotICAgKiBIZWxwZXIgY2xhc3MgdG8gbG9nIGZyYW1lcmF0ZSBhbmQgZGV0
ZWN0IGlmIHRoZSBjYW1lcmEgZnJlZXplcy4gSXQgd2lsbCBydW4gcGVyaW9kaWMgY2FsbGJhY2tz
Ci0gICAqIG9uIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciB0aHJlYWQgcGFzc2VkIGluIHRoZSBj
dG9yLCBhbmQgc2hvdWxkIG9ubHkgYmUgb3BlcmF0ZWQgZnJvbSB0aGF0Ci0gICAqIHRocmVhZC4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2FtZXJhU3RhdGlzdGljcyB7Ci0gICAgcHJp
dmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJDYW1lcmFTdGF0aXN0aWNzIjsKLSAgICBw
cml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgQ0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyA9IDIwMDA7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IENBTUVSQV9GUkVFWkVfUkVQT1JUX1RJTU9V
VF9NUyA9IDQwMDA7Ci0KLSAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1
cmZhY2VUZXh0dXJlSGVscGVyOwotICAgIHByaXZhdGUgZmluYWwgQ2FtZXJhRXZlbnRzSGFuZGxl
ciBldmVudHNIYW5kbGVyOwotICAgIHByaXZhdGUgaW50IGZyYW1lQ291bnQ7Ci0gICAgcHJpdmF0
ZSBpbnQgZnJlZXplUGVyaW9kQ291bnQ7Ci0gICAgLy8gQ2FtZXJhIG9ic2VydmVyIC0gbW9uaXRv
cnMgY2FtZXJhIGZyYW1lcmF0ZS4gT2JzZXJ2ZXIgaXMgZXhlY3V0ZWQgb24gY2FtZXJhIHRocmVh
ZC4KLSAgICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIGNhbWVyYU9ic2VydmVyID0gbmV3IFJ1bm5h
YmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgIGZpbmFsIGludCBjYW1lcmFGcHMgPSBNYXRoLnJvdW5kKGZyYW1lQ291bnQgKiAxMDAwLjBm
IC8gQ0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJD
YW1lcmEgZnBzOiAiICsgY2FtZXJhRnBzICsgIi4iKTsKLSAgICAgICAgaWYgKGZyYW1lQ291bnQg
PT0gMCkgewotICAgICAgICAgICsrZnJlZXplUGVyaW9kQ291bnQ7Ci0gICAgICAgICAgaWYgKENB
TUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMgKiBmcmVlemVQZXJpb2RDb3VudCA+PSBDQU1FUkFfRlJF
RVpFX1JFUE9SVF9USU1PVVRfTVMKLSAgICAgICAgICAgICAgJiYgZXZlbnRzSGFuZGxlciAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGZyZWV6ZWQuIik7Ci0g
ICAgICAgICAgICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIuaXNUZXh0dXJlSW5Vc2UoKSkgewot
ICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB3ZSBhcmUgY2FwdHVyaW5n
IHRvIHRleHR1cmVzLgotICAgICAgICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRnJlZXpl
ZCgiQ2FtZXJhIGZhaWx1cmUuIENsaWVudCBtdXN0IHJldHVybiB2aWRlbyBidWZmZXJzLiIpOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVy
YUZyZWV6ZWQoIkNhbWVyYSBmYWlsdXJlLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmVlemVQ
ZXJpb2RDb3VudCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgZnJhbWVDb3VudCA9IDA7Ci0gICAg
ICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKS5wb3N0RGVsYXllZCh0aGlzLCBD
QU1FUkFfT0JTRVJWRVJfUEVSSU9EX01TKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgcHVibGlj
IENhbWVyYVN0YXRpc3RpY3MoCi0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICAg
IGlmIChzdXJmYWNlVGV4dHVyZUhlbHBlciA9PSBudWxsKSB7Ci0gICAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlN1cmZhY2VUZXh0dXJlSGVscGVyIGlzIG51bGwiKTsK
LSAgICAgIH0KLSAgICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4dHVy
ZUhlbHBlcjsKLSAgICAgIHRoaXMuZXZlbnRzSGFuZGxlciA9IGV2ZW50c0hhbmRsZXI7Ci0gICAg
ICB0aGlzLmZyYW1lQ291bnQgPSAwOwotICAgICAgdGhpcy5mcmVlemVQZXJpb2RDb3VudCA9IDA7
Ci0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdERlbGF5ZWQoY2Ft
ZXJhT2JzZXJ2ZXIsIENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMpOwotICAgIH0KLQotICAgIHBy
aXZhdGUgdm9pZCBjaGVja1RocmVhZCgpIHsKLSAgICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVh
ZCgpICE9IHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKS5nZXRMb29wZXIoKS5nZXRU
aHJlYWQoKSkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9u
ZyB0aHJlYWQiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRGcmFtZSgp
IHsKLSAgICAgIGNoZWNrVGhyZWFkKCk7Ci0gICAgICArK2ZyYW1lQ291bnQ7Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmdl
dEhhbmRsZXIoKS5yZW1vdmVDYWxsYmFja3MoY2FtZXJhT2JzZXJ2ZXIpOwotICAgIH0KLSAgfQot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvRGF0YUNoYW5uZWwuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTI3
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIERh
dGFDaGFubmVsSW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIERhdGFDaGFubmVsIHsKLSAgLyoq
IEphdmEgd3JhcHBlciBmb3IgV2ViSURMIFJUQ0RhdGFDaGFubmVsLiAqLwotICBwdWJsaWMgc3Rh
dGljIGNsYXNzIEluaXQgewotICAgIHB1YmxpYyBib29sZWFuIG9yZGVyZWQgPSB0cnVlOwotICAg
IC8vIE9wdGlvbmFsIHVuc2lnbmVkIHNob3J0IGluIFdlYklETCwgLTEgbWVhbnMgdW5zcGVjaWZp
ZWQuCi0gICAgcHVibGljIGludCBtYXhSZXRyYW5zbWl0VGltZU1zID0gLTE7Ci0gICAgLy8gT3B0
aW9uYWwgdW5zaWduZWQgc2hvcnQgaW4gV2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmllZC4KLSAg
ICBwdWJsaWMgaW50IG1heFJldHJhbnNtaXRzID0gLTE7Ci0gICAgcHVibGljIFN0cmluZyBwcm90
b2NvbCA9ICIiOwotICAgIHB1YmxpYyBib29sZWFuIG5lZ290aWF0ZWQgPSBmYWxzZTsKLSAgICAv
LyBPcHRpb25hbCB1bnNpZ25lZCBzaG9ydCBpbiBXZWJJREwsIC0xIG1lYW5zIHVuc3BlY2lmaWVk
LgotICAgIHB1YmxpYyBpbnQgaWQgPSAtMTsKLQotICAgIHB1YmxpYyBJbml0KCkge30KLQotICAg
IC8vIENhbGxlZCBvbmx5IGJ5IG5hdGl2ZSBjb2RlLgotICAgIHByaXZhdGUgSW5pdChib29sZWFu
IG9yZGVyZWQsIGludCBtYXhSZXRyYW5zbWl0VGltZU1zLCBpbnQgbWF4UmV0cmFuc21pdHMsIFN0
cmluZyBwcm90b2NvbCwKLSAgICAgICAgYm9vbGVhbiBuZWdvdGlhdGVkLCBpbnQgaWQpIHsKLSAg
ICAgIHRoaXMub3JkZXJlZCA9IG9yZGVyZWQ7Ci0gICAgICB0aGlzLm1heFJldHJhbnNtaXRUaW1l
TXMgPSBtYXhSZXRyYW5zbWl0VGltZU1zOwotICAgICAgdGhpcy5tYXhSZXRyYW5zbWl0cyA9IG1h
eFJldHJhbnNtaXRzOwotICAgICAgdGhpcy5wcm90b2NvbCA9IHByb3RvY29sOwotICAgICAgdGhp
cy5uZWdvdGlhdGVkID0gbmVnb3RpYXRlZDsKLSAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICB9Ci0g
IH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIEMrKyBEYXRhQnVmZmVyLiAgVGhlIGF0b20gb2Yg
ZGF0YSBpbiBhIERhdGFDaGFubmVsLiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEJ1ZmZlciB7
Ci0gICAgLyoqIFRoZSB1bmRlcmx5aW5nIGRhdGEuICovCi0gICAgcHVibGljIGZpbmFsIEJ5dGVC
dWZmZXIgZGF0YTsKLQotICAgIC8qKgotICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHxkYXRhfCBj
b250YWlucyBVVEYtOCB0ZXh0IG9yICJiaW5hcnkgZGF0YSIKLSAgICAgKiAoaS5lLiBhbnl0aGlu
ZyBlbHNlKS4KLSAgICAgKi8KLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBiaW5hcnk7Ci0KLSAg
ICBwdWJsaWMgQnVmZmVyKEJ5dGVCdWZmZXIgZGF0YSwgYm9vbGVhbiBiaW5hcnkpIHsKLSAgICAg
IHRoaXMuZGF0YSA9IGRhdGE7Ci0gICAgICB0aGlzLmJpbmFyeSA9IGJpbmFyeTsKLSAgICB9Ci0g
IH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIEMrKyBEYXRhQ2hhbm5lbE9ic2VydmVyLiAqLwot
ICBwdWJsaWMgaW50ZXJmYWNlIE9ic2VydmVyIHsKLSAgICAvKiogVGhlIGRhdGEgY2hhbm5lbCdz
IGJ1ZmZlcmVkQW1vdW50IGhhcyBjaGFuZ2VkLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uQnVmZmVy
ZWRBbW91bnRDaGFuZ2UobG9uZyBwcmV2aW91c0Ftb3VudCk7Ci0gICAgLyoqIFRoZSBkYXRhIGNo
YW5uZWwgc3RhdGUgaGFzIGNoYW5nZWQuICovCi0gICAgcHVibGljIHZvaWQgb25TdGF0ZUNoYW5n
ZSgpOwotICAgIC8qKgotICAgICAqIEEgZGF0YSBidWZmZXIgd2FzIHN1Y2Nlc3NmdWxseSByZWNl
aXZlZC4gIE5PVEU6IHxidWZmZXIuZGF0YXwgd2lsbCBiZQotICAgICAqIGZyZWVkIG9uY2UgdGhp
cyBmdW5jdGlvbiByZXR1cm5zIHNvIGNhbGxlcnMgd2hvIHdhbnQgdG8gdXNlIHRoZSBkYXRhCi0g
ICAgICogYXN5bmNocm9ub3VzbHkgbXVzdCBtYWtlIHN1cmUgdG8gY29weSBpdCBmaXJzdC4KLSAg
ICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbk1lc3NhZ2UoQnVmZmVyIGJ1ZmZlcik7Ci0gIH0KLQot
ICAvKiogS2VlcCBpbiBzeW5jIHdpdGggRGF0YUNoYW5uZWxJbnRlcmZhY2U6OkRhdGFTdGF0ZS4g
Ki8KLSAgcHVibGljIGVudW0gU3RhdGUgeyBDT05ORUNUSU5HLCBPUEVOLCBDTE9TSU5HLCBDTE9T
RUQgfQotCi0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVEYXRhQ2hhbm5lbDsKLSAgcHJpdmF0
ZSBsb25nIG5hdGl2ZU9ic2VydmVyOwotCi0gIHB1YmxpYyBEYXRhQ2hhbm5lbChsb25nIG5hdGl2
ZURhdGFDaGFubmVsKSB7Ci0gICAgdGhpcy5uYXRpdmVEYXRhQ2hhbm5lbCA9IG5hdGl2ZURhdGFD
aGFubmVsOwotICB9Ci0KLSAgLyoqIFJlZ2lzdGVyIHxvYnNlcnZlcnwsIHJlcGxhY2luZyBhbnkg
cHJldmlvdXNseS1yZWdpc3RlcmVkIG9ic2VydmVyLiAqLwotICBwdWJsaWMgdm9pZCByZWdpc3Rl
ck9ic2VydmVyKE9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgaWYgKG5hdGl2ZU9ic2VydmVyICE9
IDApIHsKLSAgICAgIHVucmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShuYXRpdmVPYnNlcnZlcik7Ci0g
ICAgfQotICAgIG5hdGl2ZU9ic2VydmVyID0gcmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShvYnNlcnZl
cik7Ci0gIH0KLSAgcHJpdmF0ZSBuYXRpdmUgbG9uZyByZWdpc3Rlck9ic2VydmVyTmF0aXZlKE9i
c2VydmVyIG9ic2VydmVyKTsKLQotICAvKiogVW5yZWdpc3RlciB0aGUgKG9ubHkpIG9ic2VydmVy
LiAqLwotICBwdWJsaWMgdm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXIoKSB7Ci0gICAgdW5yZWdpc3Rl
ck9ic2VydmVyTmF0aXZlKG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotICBwcml2YXRlIG5hdGl2ZSB2
b2lkIHVucmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShsb25nIG5hdGl2ZU9ic2VydmVyKTsKLQotICBw
dWJsaWMgbmF0aXZlIFN0cmluZyBsYWJlbCgpOwotCi0gIHB1YmxpYyBuYXRpdmUgaW50IGlkKCk7
Ci0KLSAgcHVibGljIG5hdGl2ZSBTdGF0ZSBzdGF0ZSgpOwotCi0gIC8qKgotICAgKiBSZXR1cm4g
dGhlIG51bWJlciBvZiBieXRlcyBvZiBhcHBsaWNhdGlvbiBkYXRhIChVVEYtOCB0ZXh0IGFuZCBi
aW5hcnkgZGF0YSkKLSAgICogdGhhdCBoYXZlIGJlZW4gcXVldWVkIHVzaW5nIFNlbmRCdWZmZXIg
YnV0IGhhdmUgbm90IHlldCBiZWVuIHRyYW5zbWl0dGVkCi0gICAqIHRvIHRoZSBuZXR3b3JrLgot
ICAgKi8KLSAgcHVibGljIG5hdGl2ZSBsb25nIGJ1ZmZlcmVkQW1vdW50KCk7Ci0KLSAgLyoqIENs
b3NlIHRoZSBjaGFubmVsLiAqLwotICBwdWJsaWMgbmF0aXZlIHZvaWQgY2xvc2UoKTsKLQotICAv
KiogU2VuZCB8ZGF0YXwgdG8gdGhlIHJlbW90ZSBwZWVyOyByZXR1cm4gc3VjY2Vzcy4gKi8KLSAg
cHVibGljIGJvb2xlYW4gc2VuZChCdWZmZXIgYnVmZmVyKSB7Ci0gICAgLy8gVE9ETyhmaXNjaG1h
bik6IHRoaXMgY291bGQgYmUgY2xldmVyZXIgYWJvdXQgYXZvaWRpbmcgY29waWVzIGlmIHRoZQot
ICAgIC8vIEJ5dGVCdWZmZXIgaXMgZGlyZWN0IGFuZC9vciBpcyBiYWNrZWQgYnkgYW4gYXJyYXku
Ci0gICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVtidWZmZXIuZGF0YS5yZW1haW5pbmcoKV07Ci0g
ICAgYnVmZmVyLmRhdGEuZ2V0KGRhdGEpOwotICAgIHJldHVybiBzZW5kTmF0aXZlKGRhdGEsIGJ1
ZmZlci5iaW5hcnkpOwotICB9Ci0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gc2VuZE5hdGl2ZShi
eXRlW10gZGF0YSwgYm9vbGVhbiBiaW5hcnkpOwotCi0gIC8qKiBEaXNwb3NlIG9mIG5hdGl2ZSBy
ZXNvdXJjZXMgYXR0YWNoZWQgdG8gdGhpcyBjaGFubmVsLiAqLwotICBwdWJsaWMgbmF0aXZlIHZv
aWQgZGlzcG9zZSgpOwotfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZS5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZS5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDEyOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQu
dmlldy5TdXJmYWNlOwotCi1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVH
TDEwOwotCi0vKioKLSAqIEhvbGRzIEVHTCBzdGF0ZSBhbmQgdXRpbGl0eSBtZXRob2RzIGZvciBo
YW5kbGluZyBhbiBlZ2wgMS4wIEVHTENvbnRleHQsIGFuIEVHTERpc3BsYXksCi0gKiBhbmQgYW4g
RUdMU3VyZmFjZS4KLSAqLwotcHVibGljIGFic3RyYWN0IGNsYXNzIEVnbEJhc2UgewotICAvLyBF
R0wgd3JhcHBlciBmb3IgYW4gYWN0dWFsIEVHTENvbnRleHQuCi0gIHB1YmxpYyBzdGF0aWMgY2xh
c3MgQ29udGV4dCB7fQotCi0gIC8vIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiwgRUdM
IGNhbiBiZSB1c2VkIGZyb20gbXVsdGlwbGUgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lIGlmIGVh
Y2gKLSAgLy8gdGhyZWFkIGhhcyBpdHMgb3duIEVHTENvbnRleHQsIGJ1dCBpbiBwcmFjdGljZSBp
dCBkZWFkbG9ja3Mgb24gc29tZSBkZXZpY2VzIHdoZW4gZG9pbmcgdGhpcy4KLSAgLy8gVGhlcmVm
b3JlLCBzeW5jaHJvbml6ZSBvbiB0aGlzIGdsb2JhbCBsb2NrIGJlZm9yZSBjYWxsaW5nIGRhbmdl
cm91cyBFR0wgZnVuY3Rpb25zIHRoYXQgbWlnaHQKLSAgLy8gZGVhZGxvY2suIFNlZSBodHRwczov
L2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTcwMiBmb3IgbW9y
ZSBpbmZvLgotICBwdWJsaWMgc3RhdGljIGZpbmFsIE9iamVjdCBsb2NrID0gbmV3IE9iamVjdCgp
OwotCi0gIC8vIFRoZXNlIGNvbnN0YW50cyBhcmUgdGFrZW4gZnJvbSBFR0wxNC5FR0xfT1BFTkdM
X0VTMl9CSVQgYW5kIEVHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLgotICAvLyBodHRw
czovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2UvKy9t
YXN0ZXIvb3BlbmdsL2phdmEvYW5kcm9pZC9vcGVuZ2wvRUdMMTQuamF2YQotICAvLyBUaGlzIGlz
IHNpbWlsYXIgdG8gaG93IEdsU3VyZmFjZVZpZXcgZG9lczoKLSAgLy8gaHR0cDovL2dyZXBjb2Rl
LmNvbS9maWxlL3JlcG9zaXRvcnkuZ3JlcGNvZGUuY29tL2phdmEvZXh0L2NvbS5nb29nbGUuYW5k
cm9pZC9hbmRyb2lkLzUuMS4xX3IxL2FuZHJvaWQvb3BlbmdsL0dMU3VyZmFjZVZpZXcuamF2YSM3
NjAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVHTF9PUEVOR0xfRVMyX0JJVCA9IDQ7Ci0g
IC8vIEFuZHJvaWQtc3BlY2lmaWMgZXh0ZW5zaW9uLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgRUdMX1JFQ09SREFCTEVfQU5EUk9JRCA9IDB4MzE0MjsKLQotICAvLyBjbGFuZy1mb3JtYXQg
b2ZmCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1BMQUlOID0gewotICAgIEVH
TDEwLkVHTF9SRURfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBF
R0wxMC5FR0xfQkxVRV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUsIEVH
TF9PUEVOR0xfRVMyX0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9OwotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIGludFtdIENPTkZJR19SR0JBID0gewotICAgIEVHTDEwLkVHTF9SRURfU0laRSwg
OCwKLSAgICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQkxVRV9TSVpF
LCA4LAotICAgIEVHTDEwLkVHTF9BTFBIQV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJB
QkxFX1RZUEUsIEVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9Owot
ICBwdWJsaWMgc3RhdGljIGZpbmFsIGludFtdIENPTkZJR19QSVhFTF9CVUZGRVIgPSB7Ci0gICAg
RUdMMTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9HUkVFTl9TSVpFLCA4LAotICAg
IEVHTDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwg
RUdMX09QRU5HTF9FUzJfQklULAotICAgIEVHTDEwLkVHTF9TVVJGQUNFX1RZUEUsIEVHTDEwLkVH
TF9QQlVGRkVSX0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9OwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIGludFtdIENPTkZJR19QSVhFTF9SR0JBX0JVRkZFUiA9IHsKLSAgICBFR0wxMC5FR0xf
UkVEX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdM
X0JMVUVfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQUxQSEFfU0laRSwgOCwKLSAgICBFR0wxMC5F
R0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgRUdMMTAuRUdMX1NV
UkZBQ0VfVFlQRSwgRUdMMTAuRUdMX1BCVUZGRVJfQklULAotICAgIEVHTDEwLkVHTF9OT05FCi0g
IH07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1JFQ09SREFCTEUgPSB7Ci0g
ICAgRUdMMTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9HUkVFTl9TSVpFLCA4LAot
ICAgIEVHTDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQ
RSwgRUdMX09QRU5HTF9FUzJfQklULAotICAgIEVHTF9SRUNPUkRBQkxFX0FORFJPSUQsIDEsCi0g
ICAgRUdMMTAuRUdMX05PTkUKLSAgfTsKLSAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgLy8gQ3Jl
YXRlIGEgbmV3IGNvbnRleHQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbmZpZyBhdHRyaWJ1dGVzLCBz
aGFyaW5nIGRhdGEgd2l0aCBzaGFyZWRDb250ZXh0LgotICAvLyB8c2hhcmVkQ29udGV4dHwgY2Fu
IGJlIG51bGwuCi0gIHB1YmxpYyBzdGF0aWMgRWdsQmFzZSBjcmVhdGUoQ29udGV4dCBzaGFyZWRD
b250ZXh0LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7Ci0gICAgcmV0dXJuIChFZ2xCYXNlMTQu
aXNFR0wxNFN1cHBvcnRlZCgpCi0gICAgICAgICAgICAgICAmJiAoc2hhcmVkQ29udGV4dCA9PSBu
dWxsIHx8IHNoYXJlZENvbnRleHQgaW5zdGFuY2VvZiBFZ2xCYXNlMTQuQ29udGV4dCkpCi0gICAg
ICAgID8gbmV3IEVnbEJhc2UxNCgoRWdsQmFzZTE0LkNvbnRleHQpIHNoYXJlZENvbnRleHQsIGNv
bmZpZ0F0dHJpYnV0ZXMpCi0gICAgICAgIDogbmV3IEVnbEJhc2UxMCgoRWdsQmFzZTEwLkNvbnRl
eHQpIHNoYXJlZENvbnRleHQsIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBFZ2xCYXNlIGNyZWF0ZSgpIHsKLSAgICByZXR1cm4gY3JlYXRlKG51bGwsIENPTkZJR19Q
TEFJTik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UgY3JlYXRlKENvbnRleHQgc2hh
cmVkQ29udGV4dCkgewotICAgIHJldHVybiBjcmVhdGUoc2hhcmVkQ29udGV4dCwgQ09ORklHX1BM
QUlOKTsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFj
ZSBzdXJmYWNlKTsKLQotICAvLyBDcmVhdGUgRUdMU3VyZmFjZSBmcm9tIHRoZSBBbmRyb2lkIFN1
cmZhY2VUZXh0dXJlLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZh
Y2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKTsKLQotICAvLyBDcmVhdGUgZHVtbXkgMXgxIHBpeGVs
IGJ1ZmZlciBzdXJmYWNlIHNvIHRoZSBjb250ZXh0IGNhbiBiZSBtYWRlIGN1cnJlbnQuCi0gIHB1
YmxpYyBhYnN0cmFjdCB2b2lkIGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKTsKLQotICBwdWJs
aWMgYWJzdHJhY3Qgdm9pZCBjcmVhdGVQYnVmZmVyU3VyZmFjZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBDb250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCk7Ci0K
LSAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaGFzU3VyZmFjZSgpOwotCi0gIHB1YmxpYyBhYnN0
cmFjdCBpbnQgc3VyZmFjZVdpZHRoKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IGludCBzdXJmYWNl
SGVpZ2h0KCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgcmVsZWFzZVN1cmZhY2UoKTsKLQot
ICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCByZWxlYXNlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZv
aWQgbWFrZUN1cnJlbnQoKTsKLQotICAvLyBEZXRhY2ggdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQs
IHNvIHRoYXQgaXQgY2FuIGJlIG1hZGUgY3VycmVudCBvbiBhbm90aGVyIHRocmVhZC4KLSAgcHVi
bGljIGFic3RyYWN0IHZvaWQgZGV0YWNoQ3VycmVudCgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2
b2lkIHN3YXBCdWZmZXJzKCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UxMC5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzMDcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9p
ZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZh
Y2VIb2xkZXI7Ci0KLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTA7
Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbmZpZzsKLWltcG9y
dCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29udGV4dDsKLWltcG9ydCBqYXZh
eC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMRGlzcGxheTsKLWltcG9ydCBqYXZheC5taWNy
b2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMU3VyZmFjZTsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3Rh
dGUgYW5kIHV0aWxpdHkgbWV0aG9kcyBmb3IgaGFuZGxpbmcgYW4gZWdsIDEuMCBFR0xDb250ZXh0
LCBhbiBFR0xEaXNwbGF5LAotICogYW5kIGFuIEVHTFN1cmZhY2UuCi0gKi8KLXB1YmxpYyBmaW5h
bCBjbGFzcyBFZ2xCYXNlMTAgZXh0ZW5kcyBFZ2xCYXNlIHsKLSAgLy8gVGhpcyBjb25zdGFudCBp
cyB0YWtlbiBmcm9tIEVHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLgotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04gPSAweDMwOTg7Ci0K
LSAgcHJpdmF0ZSBmaW5hbCBFR0wxMCBlZ2w7Ci0gIHByaXZhdGUgRUdMQ29udGV4dCBlZ2xDb250
ZXh0OwotICBwcml2YXRlIEVHTENvbmZpZyBlZ2xDb25maWc7Ci0gIHByaXZhdGUgRUdMRGlzcGxh
eSBlZ2xEaXNwbGF5OwotICBwcml2YXRlIEVHTFN1cmZhY2UgZWdsU3VyZmFjZSA9IEVHTDEwLkVH
TF9OT19TVVJGQUNFOwotCi0gIC8vIEVHTCB3cmFwcGVyIGZvciBhbiBhY3R1YWwgRUdMQ29udGV4
dC4KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250ZXh0IGV4dGVuZHMgRWdsQmFzZS5Db250ZXh0
IHsKLSAgICBwcml2YXRlIGZpbmFsIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLQotICAgIHB1Ymxp
YyBDb250ZXh0KEVHTENvbnRleHQgZWdsQ29udGV4dCkgewotICAgICAgdGhpcy5lZ2xDb250ZXh0
ID0gZWdsQ29udGV4dDsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBuZXcgY29udGV4dCB3
aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnIHR5cGUsIHNoYXJpbmcgZGF0YSB3aXRoIHNoYXJlZENv
bnRleHQuCi0gIHB1YmxpYyBFZ2xCYXNlMTAoQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBj
b25maWdBdHRyaWJ1dGVzKSB7Ci0gICAgdGhpcy5lZ2wgPSAoRUdMMTApIEVHTENvbnRleHQuZ2V0
RUdMKCk7Ci0gICAgZWdsRGlzcGxheSA9IGdldEVnbERpc3BsYXkoKTsKLSAgICBlZ2xDb25maWcg
PSBnZXRFZ2xDb25maWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcyk7Ci0gICAgZWdsQ29u
dGV4dCA9IGNyZWF0ZUVnbENvbnRleHQoc2hhcmVkQ29udGV4dCwgZWdsRGlzcGxheSwgZWdsQ29u
ZmlnKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVTdXJmYWNlKFN1
cmZhY2Ugc3VyZmFjZSkgewotICAgIC8qKgotICAgICAqIFdlIGhhdmUgdG8gd3JhcCBTdXJmYWNl
IGluIGEgU3VyZmFjZUhvbGRlciBiZWNhdXNlIGZvciBzb21lIHJlYXNvbiBlZ2xDcmVhdGVXaW5k
b3dTdXJmYWNlCi0gICAgICogY291bGRuJ3QgYWN0dWFsbHkgdGFrZSBhIFN1cmZhY2Ugb2JqZWN0
IHVudGlsIEFQSSAxNy4gT2xkZXIgdmVyc2lvbnMgZm9ydHVuYXRlbHkganVzdCBjYWxsCi0gICAg
ICogU3VyZmFjZUhvbGRlci5nZXRTdXJmYWNlKCksIHNvIHdlJ2xsIGRvIHRoYXQuIE5vIG90aGVy
IG1ldGhvZHMgYXJlIHJlbGV2YW50LgotICAgICAqLwotICAgIGNsYXNzIEZha2VTdXJmYWNlSG9s
ZGVyIGltcGxlbWVudHMgU3VyZmFjZUhvbGRlciB7Ci0gICAgICBwcml2YXRlIGZpbmFsIFN1cmZh
Y2Ugc3VyZmFjZTsKLQotICAgICAgRmFrZVN1cmZhY2VIb2xkZXIoU3VyZmFjZSBzdXJmYWNlKSB7
Ci0gICAgICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgYWRkQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHt9
Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ2FsbGJhY2soQ2Fs
bGJhY2sgY2FsbGJhY2spIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xl
YW4gaXNDcmVhdGluZygpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAg
ICBARGVwcmVjYXRlZAotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXRUeXBl
KGludCBpKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldEZpeGVk
U2l6ZShpbnQgaSwgaW50IGkyKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHNldFNpemVGcm9tTGF5b3V0KCkge30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBzZXRGb3JtYXQoaW50IGkpIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgc2V0S2VlcFNjcmVlbk9uKGJvb2xlYW4gYikge30KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoKSB7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBDYW52YXMgbG9ja0Nh
bnZhcyhSZWN0IHJlY3QpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAg
IEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgdW5sb2NrQ2FudmFzQW5kUG9zdChDYW52YXMg
Y2FudmFzKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBSZWN0IGdldFN1cmZh
Y2VGcmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIFN1cmZhY2UgZ2V0U3VyZmFjZSgpIHsKLSAgICAgICAgcmV0dXJu
IHN1cmZhY2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKG5l
dyBGYWtlU3VyZmFjZUhvbGRlcihzdXJmYWNlKSk7Ci0gIH0KLQotICAvLyBDcmVhdGUgRUdMU3Vy
ZmFjZSBmcm9tIHRoZSBBbmRyb2lkIFN1cmZhY2VUZXh0dXJlLgotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgewot
ICAgIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChzdXJmYWNlVGV4dHVyZSk7Ci0gIH0KLQotICAvLyBD
cmVhdGUgRUdMU3VyZmFjZSBmcm9tIGVpdGhlciBhIFN1cmZhY2VIb2xkZXIgb3IgYSBTdXJmYWNl
VGV4dHVyZS4KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChPYmplY3QgbmF0
aXZlV2luZG93KSB7Ci0gICAgaWYgKCEobmF0aXZlV2luZG93IGluc3RhbmNlb2YgU3VyZmFjZUhv
bGRlcikgJiYgIShuYXRpdmVXaW5kb3cgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkpIHsKLSAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIklucHV0IG11c3QgYmUgZWl0aGVy
IGEgU3VyZmFjZUhvbGRlciBvciBTdXJmYWNlVGV4dHVyZSIpOwotICAgIH0KLSAgICBjaGVja0lz
Tm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxMC5FR0xfTk9fU1VSRkFD
RSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVH
TFN1cmZhY2UiKTsKLSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTAuRUdM
X05PTkV9OwotICAgIGVnbFN1cmZhY2UgPSBlZ2wuZWdsQ3JlYXRlV2luZG93U3VyZmFjZShlZ2xE
aXNwbGF5LCBlZ2xDb25maWcsIG5hdGl2ZVdpbmRvdywgc3VyZmFjZUF0dHJpYnMpOwotICAgIGlm
IChlZ2xTdXJmYWNlID09IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3cgc3Vy
ZmFjZTogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAg
IH0KLSAgfQotCi0gIC8vIENyZWF0ZSBkdW1teSAxeDEgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugc28g
dGhlIGNvbnRleHQgY2FuIGJlIG1hZGUgY3VycmVudC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKSB7Ci0gICAgY3JlYXRlUGJ1ZmZlclN1cmZh
Y2UoMSwgMSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlUGJ1ZmZl
clN1cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2Vk
KCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBbHJlYWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7
Ci0gICAgfQotICAgIGludFtdIHN1cmZhY2VBdHRyaWJzID0ge0VHTDEwLkVHTF9XSURUSCwgd2lk
dGgsIEVHTDEwLkVHTF9IRUlHSFQsIGhlaWdodCwgRUdMMTAuRUdMX05PTkV9OwotICAgIGVnbFN1
cmZhY2UgPSBlZ2wuZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmln
LCBzdXJmYWNlQXR0cmlicyk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05PX1NV
UkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3Jl
YXRlIHBpeGVsIGJ1ZmZlciBzdXJmYWNlIHdpdGggc2l6ZSAiICsgd2lkdGggKyAieCIKLSAgICAg
ICAgICArIGhlaWdodCArICI6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVy
cm9yKCkpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIG9yZy53ZWJydGMu
RWdsQmFzZS5Db250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAgIHJldHVybiBuZXcgRWds
QmFzZTEwLkNvbnRleHQoZWdsQ29udGV4dCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IGJvb2xlYW4gaGFzU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZWdsU3VyZmFjZSAhPSBFR0wxMC5F
R0xfTk9fU1VSRkFDRTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHN1cmZhY2VX
aWR0aCgpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGhBcnJheVtdID0gbmV3IGludFsxXTsKLSAgICBl
Z2wuZWdsUXVlcnlTdXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIEVHTDEwLkVHTF9XSURU
SCwgd2lkdGhBcnJheSk7Ci0gICAgcmV0dXJuIHdpZHRoQXJyYXlbMF07Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGludCBzdXJmYWNlSGVpZ2h0KCkgewotICAgIGZpbmFsIGludCBoZWln
aHRBcnJheVtdID0gbmV3IGludFsxXTsKLSAgICBlZ2wuZWdsUXVlcnlTdXJmYWNlKGVnbERpc3Bs
YXksIGVnbFN1cmZhY2UsIEVHTDEwLkVHTF9IRUlHSFQsIGhlaWdodEFycmF5KTsKLSAgICByZXR1
cm4gaGVpZ2h0QXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVs
ZWFzZVN1cmZhY2UoKSB7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZB
Q0UpIHsKLSAgICAgIGVnbC5lZ2xEZXN0cm95U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNl
KTsKLSAgICAgIGVnbFN1cmZhY2UgPSBFR0wxMC5FR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgY2hlY2tJc05vdFJlbGVhc2VkKCkgewotICAgIGlmIChlZ2xEaXNw
bGF5ID09IEVHTDEwLkVHTF9OT19ESVNQTEFZIHx8IGVnbENvbnRleHQgPT0gRUdMMTAuRUdMX05P
X0NPTlRFWFQKLSAgICAgICAgfHwgZWdsQ29uZmlnID09IG51bGwpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIG9iamVjdCBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAg
IH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIGNo
ZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIHJlbGVhc2VTdXJmYWNlKCk7Ci0gICAgZGV0YWNoQ3Vy
cmVudCgpOwotICAgIGVnbC5lZ2xEZXN0cm95Q29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb250ZXh0
KTsKLSAgICBlZ2wuZWdsVGVybWluYXRlKGVnbERpc3BsYXkpOwotICAgIGVnbENvbnRleHQgPSBF
R0wxMC5FR0xfTk9fQ09OVEVYVDsKLSAgICBlZ2xEaXNwbGF5ID0gRUdMMTAuRUdMX05PX0RJU1BM
QVk7Ci0gICAgZWdsQ29uZmlnID0gbnVsbDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBtYWtlQ3VycmVudCgpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAo
ZWdsU3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBtYWtlIGN1cnJlbnQiKTsKLSAg
ICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIGlmICghZWdsLmVn
bE1ha2VDdXJyZW50KGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIGVnbFN1cmZhY2UsIGVnbENvbnRl
eHQpKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAg
ImVnbE1ha2VDdXJyZW50IGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWds
R2V0RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERldGFjaCB0aGUgY3Vy
cmVudCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4gYmUgbWFkZSBjdXJyZW50IG9uIGFub3Ro
ZXIgdGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGV0YWNoQ3VycmVudCgpIHsK
LSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFlZ2wuZWdsTWFr
ZUN1cnJlbnQoCi0gICAgICAgICAgICAgIGVnbERpc3BsYXksIEVHTDEwLkVHTF9OT19TVVJGQUNF
LCBFR0wxMC5FR0xfTk9fU1VSRkFDRSwgRUdMMTAuRUdMX05PX0NPTlRFWFQpKSB7Ci0gICAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVnbERldGFjaEN1cnJl
bnQgZmFpbGVkOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3YXBC
dWZmZXJzKCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNl
ID09IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIpOwotICAgIH0KLSAgICBz
eW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgZWdsLmVnbFN3YXBCdWZmZXJzKGVn
bERpc3BsYXksIGVnbFN1cmZhY2UpOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xE
aXNwbGF5LCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTERpc3BsYXkgZ2V0RWdsRGlzcGxh
eSgpIHsKLSAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkgPSBlZ2wuZWdsR2V0RGlzcGxheShFR0wx
MC5FR0xfREVGQVVMVF9ESVNQTEFZKTsKLSAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0wxMC5FR0xf
Tk9fRElTUExBWSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAg
ICAgIlVuYWJsZSB0byBnZXQgRUdMMTAgZGlzcGxheTogMHgiICsgSW50ZWdlci50b0hleFN0cmlu
ZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBpbnRbXSB2ZXJzaW9uID0gbmV3IGlu
dFsyXTsKLSAgICBpZiAoIWVnbC5lZ2xJbml0aWFsaXplKGVnbERpc3BsYXksIHZlcnNpb24pKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRv
IGluaXRpYWxpemUgRUdMMTA6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVy
cm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbERpc3BsYXk7Ci0gIH0KLQotICAvLyBSZXR1
cm4gYW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTENvbmZpZyBnZXRF
Z2xDb25maWcoRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7
Ci0gICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07Ci0gICAgaW50W10g
bnVtQ29uZmlncyA9IG5ldyBpbnRbMV07Ci0gICAgaWYgKCFlZ2wuZWdsQ2hvb3NlQ29uZmlnKGVn
bERpc3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsIGNvbmZpZ3MsIGNvbmZpZ3MubGVuZ3RoLCBudW1D
b25maWdzKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAg
ImVnbENob29zZUNvbmZpZyBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVn
bEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgaWYgKG51bUNvbmZpZ3NbMF0gPD0gMCkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIGFueSBtYXRjaGlu
ZyBFR0wgY29uZmlnIik7Ci0gICAgfQotICAgIGZpbmFsIEVHTENvbmZpZyBlZ2xDb25maWcgPSBj
b25maWdzWzBdOwotICAgIGlmIChlZ2xDb25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oImVnbENob29zZUNvbmZpZyByZXR1cm5lZCBudWxsIik7Ci0gICAg
fQotICAgIHJldHVybiBlZ2xDb25maWc7Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMQ29uZmln
LCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTENvbnRleHQgY3JlYXRlRWdsQ29udGV4dCgK
LSAgICAgIENvbnRleHQgc2hhcmVkQ29udGV4dCwgRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBFR0xD
b25maWcgZWdsQ29uZmlnKSB7Ci0gICAgaWYgKHNoYXJlZENvbnRleHQgIT0gbnVsbCAmJiBzaGFy
ZWRDb250ZXh0LmVnbENvbnRleHQgPT0gRUdMMTAuRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHNoYXJlZENvbnRleHQiKTsKLSAgICB9
Ci0gICAgaW50W10gY29udGV4dEF0dHJpYnV0ZXMgPSB7RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJ
T04sIDIsIEVHTDEwLkVHTF9OT05FfTsKLSAgICBFR0xDb250ZXh0IHJvb3RDb250ZXh0ID0KLSAg
ICAgICAgc2hhcmVkQ29udGV4dCA9PSBudWxsID8gRUdMMTAuRUdMX05PX0NPTlRFWFQgOiBzaGFy
ZWRDb250ZXh0LmVnbENvbnRleHQ7Ci0gICAgZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0Owot
ICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBlZ2xDb250ZXh0ID0gZWds
LmVnbENyZWF0ZUNvbnRleHQoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCByb290Q29udGV4dCwgY29u
dGV4dEF0dHJpYnV0ZXMpOwotICAgIH0KLSAgICBpZiAoZWdsQ29udGV4dCA9PSBFR0wxMC5FR0xf
Tk9fQ09OVEVYVCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAg
ICAgIkZhaWxlZCB0byBjcmVhdGUgRUdMIGNvbnRleHQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJp
bmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbnRleHQ7Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTE0LmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI2NCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3Mu
U3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMMTQ7Ci1pbXBvcnQgYW5k
cm9pZC5vcGVuZ2wuRUdMQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTENvbnRleHQ7
Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMRGlzcGxheTsKLWltcG9ydCBhbmRyb2lkLm9wZW5n
bC5FR0xFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMU3VyZmFjZTsKLWltcG9ydCBhbmRy
b2lkLnZpZXcuU3VyZmFjZTsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3RhdGUgYW5kIHV0aWxpdHkg
bWV0aG9kcyBmb3IgaGFuZGxpbmcgYW4gRUdMMTQgRUdMQ29udGV4dCwgYW4gRUdMRGlzcGxheSwK
LSAqIGFuZCBhbiBFR0xTdXJmYWNlLgotICovCi1AVGFyZ2V0QXBpKDE4KQotcHVibGljIGZpbmFs
IGNsYXNzIEVnbEJhc2UxNCBleHRlbmRzIEVnbEJhc2UgewotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIkVnbEJhc2UxNCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBF
R0xFeHRfU0RLX1ZFUlNJT04gPSBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlf
QkVBTl9NUjI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1NES19WRVJTSU9O
ID0gYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0gIHByaXZhdGUgRUdMQ29udGV4
dCBlZ2xDb250ZXh0OwotICBwcml2YXRlIEVHTENvbmZpZyBlZ2xDb25maWc7Ci0gIHByaXZhdGUg
RUdMRGlzcGxheSBlZ2xEaXNwbGF5OwotICBwcml2YXRlIEVHTFN1cmZhY2UgZWdsU3VyZmFjZSA9
IEVHTDE0LkVHTF9OT19TVVJGQUNFOwotCi0gIC8vIEVHTCAxLjQgaXMgc3VwcG9ydGVkIGZyb20g
QVBJIDE3LiBCdXQgRUdMRXh0IHRoYXQgaXMgdXNlZCBmb3Igc2V0dGluZyBwcmVzZW50YXRpb24K
LSAgLy8gdGltZSBzdGFtcCBvbiBhIHN1cmZhY2UgaXMgc3VwcG9ydGVkIGZyb20gMTggc28gd2Ug
cmVxdWlyZSAxOC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUdMMTRTdXBwb3J0ZWQoKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgIlNESyB2ZXJzaW9uOiAiICsgQ1VSUkVOVF9TREtfVkVSU0lP
TiArICIuIGlzRUdMMTRTdXBwb3J0ZWQ6ICIKLSAgICAgICAgICAgICsgKENVUlJFTlRfU0RLX1ZF
UlNJT04gPj0gRUdMRXh0X1NES19WRVJTSU9OKSk7Ci0gICAgcmV0dXJuIChDVVJSRU5UX1NES19W
RVJTSU9OID49IEVHTEV4dF9TREtfVkVSU0lPTik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNs
YXNzIENvbnRleHQgZXh0ZW5kcyBFZ2xCYXNlLkNvbnRleHQgewotICAgIHByaXZhdGUgZmluYWwg
YW5kcm9pZC5vcGVuZ2wuRUdMQ29udGV4dCBlZ2wxNENvbnRleHQ7Ci0KLSAgICBwdWJsaWMgQ29u
dGV4dChhbmRyb2lkLm9wZW5nbC5FR0xDb250ZXh0IGVnbENvbnRleHQpIHsKLSAgICAgIHRoaXMu
ZWdsMTRDb250ZXh0ID0gZWdsQ29udGV4dDsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBu
ZXcgY29udGV4dCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnIHR5cGUsIHNoYXJpbmcgZGF0YSB3
aXRoIHNoYXJlZENvbnRleHQuCi0gIC8vIHxzaGFyZWRDb250ZXh0fCBtYXkgYmUgbnVsbC4KLSAg
cHVibGljIEVnbEJhc2UxNChFZ2xCYXNlMTQuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBj
b25maWdBdHRyaWJ1dGVzKSB7Ci0gICAgZWdsRGlzcGxheSA9IGdldEVnbERpc3BsYXkoKTsKLSAg
ICBlZ2xDb25maWcgPSBnZXRFZ2xDb25maWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcyk7
Ci0gICAgZWdsQ29udGV4dCA9IGNyZWF0ZUVnbENvbnRleHQoc2hhcmVkQ29udGV4dCwgZWdsRGlz
cGxheSwgZWdsQ29uZmlnKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhl
IEFuZHJvaWQgU3VyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZh
Y2UoU3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKHN1cmZhY2Up
OwotICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNl
VGV4dHVyZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFj
ZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwoc3Vy
ZmFjZVRleHR1cmUpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSBlaXRoZXIg
U3VyZmFjZSBvciBTdXJmYWNlVGV4dHVyZS4KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVN1cmZhY2VJ
bnRlcm5hbChPYmplY3Qgc3VyZmFjZSkgewotICAgIGlmICghKHN1cmZhY2UgaW5zdGFuY2VvZiBT
dXJmYWNlKSAmJiAhKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIklucHV0IG11c3QgYmUgZWl0aGVyIGEg
U3VyZmFjZSBvciBTdXJmYWNlVGV4dHVyZSIpOwotICAgIH0KLSAgICBjaGVja0lzTm90UmVsZWFz
ZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2Ui
KTsKLSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTQuRUdMX05PTkV9Owot
ICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGVnbERpc3BsYXks
IGVnbENvbmZpZywgc3VyZmFjZSwgc3VyZmFjZUF0dHJpYnMsIDApOwotICAgIGlmIChlZ2xTdXJm
YWNlID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3cgc3VyZmFjZTogMHgi
ICsgSW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2Uo
KSB7Ci0gICAgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoMSwgMSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdM
MTQuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJB
bHJlYWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7Ci0gICAgfQotICAgIGludFtdIHN1cmZhY2VBdHRy
aWJzID0ge0VHTDE0LkVHTF9XSURUSCwgd2lkdGgsIEVHTDE0LkVHTF9IRUlHSFQsIGhlaWdodCwg
RUdMMTQuRUdMX05PTkV9OwotICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5lZ2xDcmVhdGVQYnVmZmVy
U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJzLCAwKTsKLSAgICBp
ZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ug
d2l0aCBzaXplICIgKyB3aWR0aCArICJ4IgotICAgICAgICAgICsgaGVpZ2h0ICsgIjogMHgiICsg
SW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBDb250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAg
IHJldHVybiBuZXcgRWdsQmFzZTE0LkNvbnRleHQoZWdsQ29udGV4dCk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaGFzU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZWdsU3Vy
ZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgaW50IHN1cmZhY2VXaWR0aCgpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGhBcnJheVtdID0gbmV3
IGludFsxXTsKLSAgICBFR0wxNC5lZ2xRdWVyeVN1cmZhY2UoZWdsRGlzcGxheSwgZWdsU3VyZmFj
ZSwgRUdMMTQuRUdMX1dJRFRILCB3aWR0aEFycmF5LCAwKTsKLSAgICByZXR1cm4gd2lkdGhBcnJh
eVswXTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHN1cmZhY2VIZWlnaHQoKSB7
Ci0gICAgZmluYWwgaW50IGhlaWdodEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIEVHTDE0LmVn
bFF1ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxNC5FR0xfSEVJR0hULCBo
ZWlnaHRBcnJheSwgMCk7Ci0gICAgcmV0dXJuIGhlaWdodEFycmF5WzBdOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2VTdXJmYWNlKCkgewotICAgIGlmIChlZ2xTdXJm
YWNlICE9IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICBFR0wxNC5lZ2xEZXN0cm95U3Vy
ZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsKLSAgICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5F
R0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc05vdFJl
bGVhc2VkKCkgewotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDE0LkVHTF9OT19ESVNQTEFZIHx8
IGVnbENvbnRleHQgPT0gRUdMMTQuRUdMX05PX0NPTlRFWFQKLSAgICAgICAgfHwgZWdsQ29uZmln
ID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIG9iamVj
dCBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCByZWxlYXNlKCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIHJlbGVh
c2VTdXJmYWNlKCk7Ci0gICAgZGV0YWNoQ3VycmVudCgpOwotICAgIEVHTDE0LmVnbERlc3Ryb3lD
b250ZXh0KGVnbERpc3BsYXksIGVnbENvbnRleHQpOwotICAgIEVHTDE0LmVnbFJlbGVhc2VUaHJl
YWQoKTsKLSAgICBFR0wxNC5lZ2xUZXJtaW5hdGUoZWdsRGlzcGxheSk7Ci0gICAgZWdsQ29udGV4
dCA9IEVHTDE0LkVHTF9OT19DT05URVhUOwotICAgIGVnbERpc3BsYXkgPSBFR0wxNC5FR0xfTk9f
RElTUExBWTsKLSAgICBlZ2xDb25maWcgPSBudWxsOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIG1ha2VDdXJyZW50KCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAg
IGlmIChlZ2xTdXJmYWNlID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IG1ha2UgY3VycmVudCIp
OwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFF
R0wxNC5lZ2xNYWtlQ3VycmVudChlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBlZ2xTdXJmYWNlLCBl
Z2xDb250ZXh0KSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAg
ICAgICAgICJlZ2xNYWtlQ3VycmVudCBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmco
RUdMMTQuZWdsR2V0RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERldGFj
aCB0aGUgY3VycmVudCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4gYmUgbWFkZSBjdXJyZW50
IG9uIGFub3RoZXIgdGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGV0YWNoQ3Vy
cmVudCgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFF
R0wxNC5lZ2xNYWtlQ3VycmVudCgKLSAgICAgICAgICAgICAgZWdsRGlzcGxheSwgRUdMMTQuRUdM
X05PX1NVUkZBQ0UsIEVHTDE0LkVHTF9OT19TVVJGQUNFLCBFR0wxNC5FR0xfTk9fQ09OVEVYVCkp
IHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiZWds
RGV0YWNoQ3VycmVudCBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWds
R2V0RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBzd2FwQnVmZmVycygpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBp
ZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBzd2FwIGJ1ZmZlcnMiKTsK
LSAgICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIEVHTDE0LmVn
bFN3YXBCdWZmZXJzKGVnbERpc3BsYXksIGVnbFN1cmZhY2UpOwotICAgIH0KLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHN3YXBCdWZmZXJzKGxvbmcgdGltZVN0YW1wTnMpIHsKLSAgICBjaGVja0lzTm90
UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4n
dCBzd2FwIGJ1ZmZlcnMiKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2sp
IHsKLSAgICAgIC8vIFNlZQotICAgICAgLy8gaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5j
b20vcGxhdGZvcm0vZnJhbWV3b3Jrcy9uYXRpdmUvKy90b29sc19yMjIuMi9vcGVuZ2wvc3BlY3Mv
RUdMX0FORFJPSURfcHJlc2VudGF0aW9uX3RpbWUudHh0Ci0gICAgICBFR0xFeHQuZWdsUHJlc2Vu
dGF0aW9uVGltZUFORFJPSUQoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwgdGltZVN0YW1wTnMpOwot
ICAgICAgRUdMMTQuZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAg
fQotICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTERpc3BsYXksIG9yIGRpZSB0cnlpbmcuCi0gIHBy
aXZhdGUgc3RhdGljIEVHTERpc3BsYXkgZ2V0RWdsRGlzcGxheSgpIHsKLSAgICBFR0xEaXNwbGF5
IGVnbERpc3BsYXkgPSBFR0wxNC5lZ2xHZXREaXNwbGF5KEVHTDE0LkVHTF9ERUZBVUxUX0RJU1BM
QVkpOwotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDE0LkVHTF9OT19ESVNQTEFZKSB7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGdldCBF
R0wxNCBkaXNwbGF5OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9y
KCkpKTsKLSAgICB9Ci0gICAgaW50W10gdmVyc2lvbiA9IG5ldyBpbnRbMl07Ci0gICAgaWYgKCFF
R0wxNC5lZ2xJbml0aWFsaXplKGVnbERpc3BsYXksIHZlcnNpb24sIDAsIHZlcnNpb24sIDEpKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRv
IGluaXRpYWxpemUgRUdMMTQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0
RXJyb3IoKSkpOwotICAgIH0KLSAgICByZXR1cm4gZWdsRGlzcGxheTsKLSAgfQotCi0gIC8vIFJl
dHVybiBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgc3RhdGljIEVHTENv
bmZpZyBnZXRFZ2xDb25maWcoRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBpbnRbXSBjb25maWdBdHRy
aWJ1dGVzKSB7Ci0gICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07Ci0g
ICAgaW50W10gbnVtQ29uZmlncyA9IG5ldyBpbnRbMV07Ci0gICAgaWYgKCFFR0wxNC5lZ2xDaG9v
c2VDb25maWcoCi0gICAgICAgICAgICBlZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAwLCBj
b25maWdzLCAwLCBjb25maWdzLmxlbmd0aCwgbnVtQ29uZmlncywgMCkpIHsKLSAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJlZ2xDaG9vc2VDb25maWcgZmFpbGVk
OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9
Ci0gICAgaWYgKG51bUNvbmZpZ3NbMF0gPD0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIGFueSBtYXRjaGluZyBFR0wgY29uZmlnIik7Ci0gICAg
fQotICAgIGZpbmFsIEVHTENvbmZpZyBlZ2xDb25maWcgPSBjb25maWdzWzBdOwotICAgIGlmIChl
Z2xDb25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVn
bENob29zZUNvbmZpZyByZXR1cm5lZCBudWxsIik7Ci0gICAgfQotICAgIHJldHVybiBlZ2xDb25m
aWc7Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5aW5nLgotICBw
cml2YXRlIHN0YXRpYyBFR0xDb250ZXh0IGNyZWF0ZUVnbENvbnRleHQoCi0gICAgICBFZ2xCYXNl
MTQuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBFR0xEaXNwbGF5IGVnbERpc3BsYXksIEVHTENvbmZp
ZyBlZ2xDb25maWcpIHsKLSAgICBpZiAoc2hhcmVkQ29udGV4dCAhPSBudWxsICYmIHNoYXJlZENv
bnRleHQuZWdsMTRDb250ZXh0ID09IEVHTDE0LkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCBzaGFyZWRDb250ZXh0Iik7Ci0gICAgfQot
ICAgIGludFtdIGNvbnRleHRBdHRyaWJ1dGVzID0ge0VHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9W
RVJTSU9OLCAyLCBFR0wxNC5FR0xfTk9ORX07Ci0gICAgRUdMQ29udGV4dCByb290Q29udGV4dCA9
Ci0gICAgICAgIHNoYXJlZENvbnRleHQgPT0gbnVsbCA/IEVHTDE0LkVHTF9OT19DT05URVhUIDog
c2hhcmVkQ29udGV4dC5lZ2wxNENvbnRleHQ7Ci0gICAgZmluYWwgRUdMQ29udGV4dCBlZ2xDb250
ZXh0OwotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBlZ2xDb250ZXh0
ID0gRUdMMTQuZWdsQ3JlYXRlQ29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHJvb3RDb250
ZXh0LCBjb250ZXh0QXR0cmlidXRlcywgMCk7Ci0gICAgfQotICAgIGlmIChlZ2xDb250ZXh0ID09
IEVHTDE0LkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgY29udGV4dDogMHgiICsgSW50ZWdl
ci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIHJldHVybiBl
Z2xDb250ZXh0OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbFJlbmRlcmVyLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlci5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbFJlbmRlcmVyLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSw2NzYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQgYW5k
cm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVT
MjA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxl
clRocmVhZDsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcu
U3VyZmFjZTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5B
cnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5j
b25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRp
bWVVbml0OwotCi0vKioKLSAqIEltcGxlbWVudHMgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyLkNh
bGxiYWNrcyBieSBkaXNwbGF5aW5nIHRoZSB2aWRlbyBzdHJlYW0gb24gYW4gRUdMIFN1cmZhY2Uu
Ci0gKiBUaGlzIGNsYXNzIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBoZWxwZXIgY2xhc3Mg
Zm9yIHJlbmRlcmluZyBvbiBTdXJmYWNlVmlld3MgYW5kCi0gKiBUZXh0dXJlVmlld3MuCi0gKi8K
LXB1YmxpYyBjbGFzcyBFZ2xSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJh
Y2tzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJFZ2xSZW5kZXJlciI7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTE9HX0lOVEVSVkFMX1NFQyA9IDQ7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfU1VSRkFDRV9DTEVBUl9DT1VOVCA9IDM7Ci0KLSAg
cHVibGljIGludGVyZmFjZSBGcmFtZUxpc3RlbmVyIHsgdm9pZCBvbkZyYW1lKEJpdG1hcCBmcmFt
ZSk7IH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTY2FsZUFuZEZyYW1lTGlzdGVuZXIgewot
ICAgIHB1YmxpYyBmaW5hbCBmbG9hdCBzY2FsZTsKLSAgICBwdWJsaWMgZmluYWwgRnJhbWVMaXN0
ZW5lciBsaXN0ZW5lcjsKLQotICAgIHB1YmxpYyBTY2FsZUFuZEZyYW1lTGlzdGVuZXIoZmxvYXQg
c2NhbGUsIEZyYW1lTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICAgIHRoaXMuc2NhbGUgPSBzY2Fs
ZTsKLSAgICAgIHRoaXMubGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIGNsYXNzIEVnbFN1cmZhY2VDcmVhdGlvbiBpbXBsZW1lbnRzIFJ1bm5hYmxlIHsKLSAgICBw
cml2YXRlIE9iamVjdCBzdXJmYWNlOwotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNl
dFN1cmZhY2UoT2JqZWN0IHN1cmZhY2UpIHsKLSAgICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJ1
bigpIHsKLSAgICAgIGlmIChzdXJmYWNlICE9IG51bGwgJiYgZWdsQmFzZSAhPSBudWxsICYmICFl
Z2xCYXNlLmhhc1N1cmZhY2UoKSkgewotICAgICAgICBpZiAoc3VyZmFjZSBpbnN0YW5jZW9mIFN1
cmZhY2UpIHsKLSAgICAgICAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2UoKFN1cmZhY2UpIHN1cmZh
Y2UpOwotICAgICAgICB9IGVsc2UgaWYgKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVy
ZSkgewotICAgICAgICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZSgoU3VyZmFjZVRleHR1cmUpIHN1
cmZhY2UpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3Rh
dGVFeGNlcHRpb24oIkludmFsaWQgc3VyZmFjZTogIiArIHN1cmZhY2UpOwotICAgICAgICB9Ci0g
ICAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgLy8gTmVjZXNzYXJ5IGZvciBZ
VVYgZnJhbWVzIHdpdGggb2RkIHdpZHRoLgotICAgICAgICBHTEVTMjAuZ2xQaXhlbFN0b3JlaShH
TEVTMjAuR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsKLQotICAvLyB8cmVuZGVyVGhyZWFkSGFuZGxlcnwg
aXMgYSBoYW5kbGVyIGZvciBjb21tdW5pY2F0aW5nIHdpdGggfHJlbmRlclRocmVhZHwsIGFuZCBp
cyBzeW5jaHJvbml6ZWQKLSAgLy8gb24gfGhhbmRsZXJMb2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBP
YmplY3QgaGFuZGxlckxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgSGFuZGxlciByZW5k
ZXJUaHJlYWRIYW5kbGVyOwotCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGZyYW1lTGlzdGVuZXJM
b2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxTY2FsZUFuZEZy
YW1lTGlzdGVuZXI+IGZyYW1lTGlzdGVuZXJzID0gbmV3IEFycmF5TGlzdDw+KCk7Ci0KLSAgLy8g
VmFyaWFibGVzIGZvciBmcHMgcmVkdWN0aW9uLgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBmcHNS
ZWR1Y3Rpb25Mb2NrID0gbmV3IE9iamVjdCgpOwotICAvLyBUaW1lIGZvciB3aGVuIG5leHQgZnJh
bWUgc2hvdWxkIGJlIHJlbmRlcmVkLgotICBwcml2YXRlIGxvbmcgbmV4dEZyYW1lVGltZU5zOwot
ICAvLyBNaW5pbXVtIGR1cmF0aW9uIGJldHdlZW4gZnJhbWVzIHdoZW4gZnBzIHJlZHVjdGlvbiBp
cyBhY3RpdmUsIG9yIC0xIGlmIHZpZGVvIGlzIGNvbXBsZXRlbHkKLSAgLy8gcGF1c2VkLgotICBw
cml2YXRlIGxvbmcgbWluUmVuZGVyUGVyaW9kTnM7Ci0KLSAgLy8gRUdMIGFuZCBHTCByZXNvdXJj
ZXMgZm9yIGRyYXdpbmcgWVVWL09FUyB0ZXh0dXJlcy4gQWZ0ZXIgaW5pdGlsaXphdGlvbiwgdGhl
c2UgYXJlIG9ubHkgYWNjZXNzZWQKLSAgLy8gZnJvbSB0aGUgcmVuZGVyIHRocmVhZC4KLSAgcHJp
dmF0ZSBFZ2xCYXNlIGVnbEJhc2U7Ci0gIHByaXZhdGUgZmluYWwgUmVuZGVyZXJDb21tb24uWXV2
VXBsb2FkZXIgeXV2VXBsb2FkZXIgPSBuZXcgUmVuZGVyZXJDb21tb24uWXV2VXBsb2FkZXIoKTsK
LSAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXI7Ci0gIC8vIFRleHR1cmUg
aWRzIGZvciBZVVYgZnJhbWVzLiBBbGxvY2F0ZWQgb24gZmlyc3QgYXJyaXZhbCBvZiBhIFlVViBm
cmFtZS4KLSAgcHJpdmF0ZSBpbnRbXSB5dXZUZXh0dXJlcyA9IG51bGw7Ci0KLSAgLy8gUGVuZGlu
ZyBmcmFtZSB0byByZW5kZXIuIFNlcnZlcyBhcyBhIHF1ZXVlIHdpdGggc2l6ZSAxLiBTeW5jaHJv
bml6ZWQgb24gfGZyYW1lTG9ja3wuCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGZyYW1lTG9jayA9
IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBwZW5kaW5n
RnJhbWU7Ci0KLSAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBzeW5jaHJvbml6ZWQgb24gfGxheW91
dExvY2t8LgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBsYXlvdXRMb2NrID0gbmV3IE9iamVjdCgp
OwotICBwcml2YXRlIGludCBzdXJmYWNlV2lkdGg7Ci0gIHByaXZhdGUgaW50IHN1cmZhY2VIZWln
aHQ7Ci0gIHByaXZhdGUgZmxvYXQgbGF5b3V0QXNwZWN0UmF0aW87Ci0gIC8vIElmIHRydWUsIG1p
cnJvcnMgdGhlIHZpZGVvIHN0cmVhbSBob3Jpem9udGFsbHkuCi0gIHByaXZhdGUgYm9vbGVhbiBt
aXJyb3I7Ci0KLSAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBzeW5jaHJvbml6ZWQgb24gfHN0YXRp
c3RpY3NMb2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3Qgc3RhdGlzdGljc0xvY2sgPSBuZXcg
T2JqZWN0KCk7Ci0gIC8vIFRvdGFsIG51bWJlciBvZiB2aWRlbyBmcmFtZXMgcmVjZWl2ZWQgaW4g
cmVuZGVyRnJhbWUoKSBjYWxsLgotICBwcml2YXRlIGludCBmcmFtZXNSZWNlaXZlZDsKLSAgLy8g
TnVtYmVyIG9mIHZpZGVvIGZyYW1lcyBkcm9wcGVkIGJ5IHJlbmRlckZyYW1lKCkgYmVjYXVzZSBw
cmV2aW91cyBmcmFtZSBoYXMgbm90IGJlZW4gcmVuZGVyZWQKLSAgLy8geWV0LgotICBwcml2YXRl
IGludCBmcmFtZXNEcm9wcGVkOwotICAvLyBOdW1iZXIgb2YgcmVuZGVyZWQgdmlkZW8gZnJhbWVz
LgotICBwcml2YXRlIGludCBmcmFtZXNSZW5kZXJlZDsKLSAgLy8gU3RhcnQgdGltZSBmb3IgY291
bnRpbmcgdGhlc2Ugc3RhdGlzdGljcywgb3IgMCBpZiB3ZSBoYXZlbid0IHN0YXJ0ZWQgbWVhc3Vy
aW5nIHlldC4KLSAgcHJpdmF0ZSBsb25nIHN0YXRpc3RpY3NTdGFydFRpbWVOczsKLSAgLy8gVGlt
ZSBpbiBucyBzcGVudCBpbiByZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKCkgZnVuY3Rpb24uCi0g
IHByaXZhdGUgbG9uZyByZW5kZXJUaW1lTnM7Ci0gIC8vIFRpbWUgaW4gbnMgc3BlbnQgYnkgdGhl
IHJlbmRlciB0aHJlYWQgaW4gdGhlIHN3YXBCdWZmZXJzKCkgZnVuY3Rpb24uCi0gIHByaXZhdGUg
bG9uZyByZW5kZXJTd2FwQnVmZmVyVGltZU5zOwotCi0gIC8vIFVzZWQgZm9yIGJpdG1hcCBjYXB0
dXJpbmcuCi0gIHByaXZhdGUgR2xUZXh0dXJlRnJhbWVCdWZmZXIgYml0bWFwVGV4dHVyZUZyYW1l
YnVmZmVyOwotCi0gIC8vIFJ1bm5hYmxlIGZvciBwb3N0aW5nIGZyYW1lcyB0byByZW5kZXIgdGhy
ZWFkLgotICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIHJlbmRlckZyYW1lUnVubmFibGUgPSBuZXcg
UnVubmFibGUoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgcmVuZGVyRnJhbWVPblJlbmRlclRocmVhZCgpOwotICAgIH0KLSAgfTsKLQotICBwcml2YXRl
IGZpbmFsIFJ1bm5hYmxlIGxvZ1N0YXRpc3RpY3NSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsK
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBsb2dTdGF0aXN0
aWNzKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICAgIGlmIChy
ZW5kZXJUaHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICByZW5kZXJUaHJlYWRIYW5k
bGVyLnJlbW92ZUNhbGxiYWNrcyhsb2dTdGF0aXN0aWNzUnVubmFibGUpOwotICAgICAgICAgIHJl
bmRlclRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQoCi0gICAgICAgICAgICAgIGxvZ1N0YXRpc3Rp
Y3NSdW5uYWJsZSwgVGltZVVuaXQuU0VDT05EUy50b01pbGxpcyhMT0dfSU5URVJWQUxfU0VDKSk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBFZ2xT
dXJmYWNlQ3JlYXRpb24gZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUgPSBuZXcgRWdsU3VyZmFj
ZUNyZWF0aW9uKCk7Ci0KLSAgLyoqCi0gICAqIFN0YW5kYXJkIGNvbnN0cnVjdG9yLiBUaGUgbmFt
ZSB3aWxsIGJlIHVzZWQgZm9yIHRoZSByZW5kZXIgdGhyZWFkIG5hbWUgYW5kIGluY2x1ZGVkIHdo
ZW4KLSAgICogbG9nZ2luZy4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91IG11c3Qg
Zmlyc3QgY2FsbCBpbml0KCkgYW5kIGNyZWF0ZUVnbFN1cmZhY2UuCi0gICAqLwotICBwdWJsaWMg
RWdsUmVuZGVyZXIoU3RyaW5nIG5hbWUpIHsKLSAgICB0aGlzLm5hbWUgPSBuYW1lOwotICB9Ci0K
LSAgLyoqCi0gICAqIEluaXRpYWxpemUgdGhpcyBjbGFzcywgc2hhcmluZyByZXNvdXJjZXMgd2l0
aCB8c2hhcmVkQ29udGV4dHwuIFRoZSBjdXN0b20gfGRyYXdlcnwgd2lsbCBiZSB1c2VkCi0gICAq
IGZvciBkcmF3aW5nIGZyYW1lcyBvbiB0aGUgRUdMU3VyZmFjZS4gVGhpcyBjbGFzcyBpcyByZXNw
b25zaWJsZSBmb3IgY2FsbGluZyByZWxlYXNlKCkgb24KLSAgICogfGRyYXdlcnwuIEl0IGlzIGFs
bG93ZWQgdG8gY2FsbCBpbml0KCkgdG8gcmVpbml0aWFsaXplIHRoZSByZW5kZXJlciBhZnRlciBh
IHByZXZpb3VzCi0gICAqIGluaXQoKS9yZWxlYXNlKCkgY3ljbGUuCi0gICAqLwotICBwdWJsaWMg
dm9pZCBpbml0KGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBmaW5hbCBpbnRb
XSBjb25maWdBdHRyaWJ1dGVzLAotICAgICAgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2Vy
KSB7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRo
cmVhZEhhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhj
ZXB0aW9uKG5hbWUgKyAiQWxyZWFkeSBpbml0aWFsaXplZCIpOwotICAgICAgfQotICAgICAgbG9n
RCgiSW5pdGlhbGl6aW5nIEVnbFJlbmRlcmVyIik7Ci0gICAgICB0aGlzLmRyYXdlciA9IGRyYXdl
cjsKLQotICAgICAgZmluYWwgSGFuZGxlclRocmVhZCByZW5kZXJUaHJlYWQgPSBuZXcgSGFuZGxl
clRocmVhZChuYW1lICsgIkVnbFJlbmRlcmVyIik7Ci0gICAgICByZW5kZXJUaHJlYWQuc3RhcnQo
KTsKLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihyZW5kZXJUaHJlYWQu
Z2V0TG9vcGVyKCkpOwotICAgICAgLy8gQ3JlYXRlIEVHTCBjb250ZXh0IG9uIHRoZSBuZXdseSBj
cmVhdGVkIHJlbmRlciB0aHJlYWQuIEl0IHNob3VsZCBiZSBwb3NzaWJseSB0byBjcmVhdGUgdGhl
Ci0gICAgICAvLyBjb250ZXh0IG9uIHRoaXMgdGhyZWFkIGFuZCBtYWtlIGl0IGN1cnJlbnQgb24g
dGhlIHJlbmRlciB0aHJlYWQsIGJ1dCB0aGlzIGNhdXNlcyBmYWlsdXJlIG9uCi0gICAgICAvLyBz
b21lIE1hcnZlbCBiYXNlZCBKQiBkZXZpY2VzLiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Av
d2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NjM1MC4KLSAgICAgIFRocmVhZFV0aWxzLmludm9rZUF0
RnJvbnRVbmludGVycnVwdGlibHkocmVuZGVyVGhyZWFkSGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICAgIC8vIElmIHNoYXJlZENvbnRleHQgaXMgbnVsbCwgdGhlbiB0ZXh0dXJlIGZyYW1lcyBhcmUg
ZGlzYWJsZWQuIFRoaXMgaXMgdHlwaWNhbGx5IGZvciBvbGQKLSAgICAgICAgICAvLyBkZXZpY2Vz
IHRoYXQgbWlnaHQgbm90IGJlIGZ1bGx5IHNwZWMgY29tcGxpYW50LCBzbyBmb3JjZSBFR0wgMS4w
IHNpbmNlIEVHTCAxLjQgaGFzCi0gICAgICAgICAgLy8gY2F1c2VkIHRyb3VibGUgb24gc29tZSB3
ZWlyZCBkZXZpY2VzLgotICAgICAgICAgIGlmIChzaGFyZWRDb250ZXh0ID09IG51bGwpIHsKLSAg
ICAgICAgICAgIGxvZ0QoIkVnbEJhc2UxMC5jcmVhdGUgY29udGV4dCIpOwotICAgICAgICAgICAg
ZWdsQmFzZSA9IG5ldyBFZ2xCYXNlMTAobnVsbCAvKiBzaGFyZWRDb250ZXh0ICovLCBjb25maWdB
dHRyaWJ1dGVzKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbG9nRCgiRWdsQmFz
ZS5jcmVhdGUgc2hhcmVkIGNvbnRleHQiKTsKLSAgICAgICAgICAgIGVnbEJhc2UgPSBFZ2xCYXNl
LmNyZWF0ZShzaGFyZWRDb250ZXh0LCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KGVnbFN1
cmZhY2VDcmVhdGlvblJ1bm5hYmxlKTsKLSAgICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWVOcyA9
IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgcmVzZXRTdGF0aXN0aWNzKGN1cnJlbnRUaW1lTnMp
OwotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0RGVsYXllZCgKLSAgICAgICAgICBsb2dT
dGF0aXN0aWNzUnVubmFibGUsIFRpbWVVbml0LlNFQ09ORFMudG9NaWxsaXMoTE9HX0lOVEVSVkFM
X1NFQykpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUVnbFN1cmZhY2UoU3Vy
ZmFjZSBzdXJmYWNlKSB7Ci0gICAgY3JlYXRlRWdsU3VyZmFjZUludGVybmFsKHN1cmZhY2UpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJm
YWNlVGV4dHVyZSkgewotICAgIGNyZWF0ZUVnbFN1cmZhY2VJbnRlcm5hbChzdXJmYWNlVGV4dHVy
ZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlRWdsU3VyZmFjZUludGVybmFsKE9iamVj
dCBzdXJmYWNlKSB7Ci0gICAgZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUuc2V0U3VyZmFjZShz
dXJmYWNlKTsKLSAgICBwb3N0VG9SZW5kZXJUaHJlYWQoZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFi
bGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEJsb2NrIHVudGlsIGFueSBwZW5kaW5nIGZyYW1lIGlz
IHJldHVybmVkIGFuZCBhbGwgR0wgcmVzb3VyY2VzIHJlbGVhc2VkLCBldmVuIGlmIGFuIGludGVy
cnVwdAotICAgKiBvY2N1cnMuIElmIGFuIGludGVycnVwdCBvY2N1cnMgZHVyaW5nIHJlbGVhc2Uo
KSwgdGhlIGludGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0LiBUaGlzIGZ1bmN0aW9uCi0gICAqIHNo
b3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBBY3Rpdml0eSBpcyBkZXN0cm95ZWQgYW5kIHRoZSBF
R0xDb250ZXh0IGlzIHN0aWxsIHZhbGlkLiBJZiB5b3UKLSAgICogZG9uJ3QgY2FsbCB0aGlzIGZ1
bmN0aW9uLCB0aGUgR0wgcmVzb3VyY2VzIG1pZ2h0IGxlYWsuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCByZWxlYXNlKCkgewotICAgIGxvZ0QoIlJlbGVhc2luZy4iKTsKLSAgICBmaW5hbCBDb3VudERv
d25MYXRjaCBlZ2xDbGVhbnVwQmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBz
eW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxl
ciA9PSBudWxsKSB7Ci0gICAgICAgIGxvZ0QoIkFscmVhZHkgcmVsZWFzZWQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfQotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFj
a3MobG9nU3RhdGlzdGljc1J1bm5hYmxlKTsKLSAgICAgIC8vIFJlbGVhc2UgRUdMIGFuZCBHTCBy
ZXNvdXJjZXMgb24gcmVuZGVyIHRocmVhZC4KLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9z
dEF0RnJvbnRPZlF1ZXVlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBpZiAoZHJhd2VyICE9IG51bGwpIHsK
LSAgICAgICAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBkcmF3ZXIgPSBudWxs
OwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoeXV2VGV4dHVyZXMgIT0gbnVsbCkgewotICAg
ICAgICAgICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMywgeXV2VGV4dHVyZXMsIDApOwotICAg
ICAgICAgICAgeXV2VGV4dHVyZXMgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAo
Yml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGJpdG1hcFRl
eHR1cmVGcmFtZWJ1ZmZlci5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBiaXRtYXBUZXh0dXJlRnJh
bWVidWZmZXIgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoZWdsQmFzZSAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICBsb2dEKCJlZ2xCYXNlIGRldGFjaCBhbmQgcmVsZWFzZS4iKTsK
LSAgICAgICAgICAgIGVnbEJhc2UuZGV0YWNoQ3VycmVudCgpOwotICAgICAgICAgICAgZWdsQmFz
ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBlZ2xCYXNlID0gbnVsbDsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgZWdsQ2xlYW51cEJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICAgIH0KLSAgICAg
IH0pOwotICAgICAgZmluYWwgTG9vcGVyIHJlbmRlckxvb3BlciA9IHJlbmRlclRocmVhZEhhbmRs
ZXIuZ2V0TG9vcGVyKCk7Ci0gICAgICAvLyBUT0RPKG1hZ2plZCk6IFJlcGxhY2UgdGhpcyBwb3N0
KCkgd2l0aCByZW5kZXJMb29wZXIucXVpdFNhZmVseSgpIHdoZW4gQVBJIHN1cHBvcnQgPj0gMTgu
Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGxvZ0Qo
IlF1aXR0aW5nIHJlbmRlciB0aHJlYWQuIik7Ci0gICAgICAgICAgcmVuZGVyTG9vcGVyLnF1aXQo
KTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICAvLyBEb24ndCBhY2NlcHQgYW55IG1vcmUg
ZnJhbWVzIG9yIG1lc3NhZ2VzIHRvIHRoZSByZW5kZXIgdGhyZWFkLgotICAgICAgcmVuZGVyVGhy
ZWFkSGFuZGxlciA9IG51bGw7Ci0gICAgfQotICAgIC8vIE1ha2Ugc3VyZSB0aGUgRUdML0dMIGNs
ZWFudXAgcG9zdGVkIGFib3ZlIGlzIGV4ZWN1dGVkLgotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5p
bnRlcnJ1cHRpYmx5KGVnbENsZWFudXBCYXJyaWVyKTsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1l
TG9jaykgewotICAgICAgaWYgKHBlbmRpbmdGcmFtZSAhPSBudWxsKSB7Ci0gICAgICAgIFZpZGVv
UmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKHBlbmRpbmdGcmFtZSk7Ci0gICAgICAgIHBlbmRpbmdG
cmFtZSA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICAgIGxvZ0QoIlJlbGVhc2luZyBkb25lLiIp
OwotICB9Ci0KLSAgLyoqCi0gICAqIFJlc2V0IHRoZSBzdGF0aXN0aWNzIGxvZ2dlZCBpbiBsb2dT
dGF0aXN0aWNzKCkuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVzZXRTdGF0aXN0aWNzKGxvbmcg
Y3VycmVudFRpbWVOcykgewotICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAg
ICAgIHN0YXRpc3RpY3NTdGFydFRpbWVOcyA9IGN1cnJlbnRUaW1lTnM7Ci0gICAgICBmcmFtZXNS
ZWNlaXZlZCA9IDA7Ci0gICAgICBmcmFtZXNEcm9wcGVkID0gMDsKLSAgICAgIGZyYW1lc1JlbmRl
cmVkID0gMDsKLSAgICAgIHJlbmRlclRpbWVOcyA9IDA7Ci0gICAgICByZW5kZXJTd2FwQnVmZmVy
VGltZU5zID0gMDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwcmludFN0YWNrVHJhY2Uo
KSB7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgZmluYWwgVGhyZWFk
IHJlbmRlclRocmVhZCA9Ci0gICAgICAgICAgKHJlbmRlclRocmVhZEhhbmRsZXIgPT0gbnVsbCkg
PyBudWxsIDogcmVuZGVyVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKTsKLSAg
ICAgIGlmIChyZW5kZXJUaHJlYWQgIT0gbnVsbCkgewotICAgICAgICBmaW5hbCBTdGFja1RyYWNl
RWxlbWVudFtdIHJlbmRlclN0YWNrVHJhY2UgPSByZW5kZXJUaHJlYWQuZ2V0U3RhY2tUcmFjZSgp
OwotICAgICAgICBpZiAocmVuZGVyU3RhY2tUcmFjZS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAg
bG9nRCgiRWdsUmVuZGVyZXIgc3RhY2sgdHJhY2U6Iik7Ci0gICAgICAgICAgZm9yIChTdGFja1Ry
YWNlRWxlbWVudCB0cmFjZUVsZW0gOiByZW5kZXJTdGFja1RyYWNlKSB7Ci0gICAgICAgICAgICBs
b2dEKHRyYWNlRWxlbS50b1N0cmluZygpKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGlmIHRoZSB2aWRlbyBzdHJlYW0gc2hv
dWxkIGJlIG1pcnJvcmVkIG9yIG5vdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldE1pcnJvcihm
aW5hbCBib29sZWFuIG1pcnJvcikgewotICAgIGxvZ0QoInNldE1pcnJvcjogIiArIG1pcnJvcik7
Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICB0aGlzLm1pcnJvciA9IG1p
cnJvcjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGxheW91dCBhc3BlY3QgcmF0aW8u
IFRoaXMgaXMgdXNlZCB0byBjcm9wIGZyYW1lcyB3aGVuIHJlbmRlcmluZyB0byBhdm9pZCBzdHJl
dGNoZWQgdmlkZW8uCi0gICAqIFNldCB0aGlzIHRvIDAgdG8gZGlzYWJsZSBjcm9wcGluZy4KLSAg
ICovCi0gIHB1YmxpYyB2b2lkIHNldExheW91dEFzcGVjdFJhdGlvKGZsb2F0IGxheW91dEFzcGVj
dFJhdGlvKSB7Ci0gICAgbG9nRCgic2V0TGF5b3V0QXNwZWN0UmF0aW86ICIgKyBsYXlvdXRBc3Bl
Y3RSYXRpbyk7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICB0aGlzLmxh
eW91dEFzcGVjdFJhdGlvID0gbGF5b3V0QXNwZWN0UmF0aW87Ci0gICAgfQotICB9Ci0KLSAgLyoq
Ci0gICAqIExpbWl0IHJlbmRlciBmcmFtZXJhdGUuCi0gICAqCi0gICAqIEBwYXJhbSBmcHMgTGlt
aXQgcmVuZGVyIGZyYW1lcmF0ZSB0byB0aGlzIHZhbHVlLCBvciB1c2UgRmxvYXQuUE9TSVRJVkVf
SU5GSU5JVFkgdG8gZGlzYWJsZSBmcHMKLSAgICogICAgICAgICAgICByZWR1Y3Rpb24uCi0gICAq
LwotICBwdWJsaWMgdm9pZCBzZXRGcHNSZWR1Y3Rpb24oZmxvYXQgZnBzKSB7Ci0gICAgbG9nRCgi
c2V0RnBzUmVkdWN0aW9uOiAiICsgZnBzKTsKLSAgICBzeW5jaHJvbml6ZWQgKGZwc1JlZHVjdGlv
bkxvY2spIHsKLSAgICAgIGZpbmFsIGxvbmcgcHJldmlvdXNSZW5kZXJQZXJpb2ROcyA9IG1pblJl
bmRlclBlcmlvZE5zOwotICAgICAgaWYgKGZwcyA8PSAwKSB7Ci0gICAgICAgIG1pblJlbmRlclBl
cmlvZE5zID0gTG9uZy5NQVhfVkFMVUU7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBtaW5SZW5k
ZXJQZXJpb2ROcyA9IChsb25nKSAoVGltZVVuaXQuU0VDT05EUy50b05hbm9zKDEpIC8gZnBzKTsK
LSAgICAgIH0KLSAgICAgIGlmIChtaW5SZW5kZXJQZXJpb2ROcyAhPSBwcmV2aW91c1JlbmRlclBl
cmlvZE5zKSB7Ci0gICAgICAgIC8vIEZwcyByZWR1Y3Rpb24gY2hhbmdlZCAtIHJlc2V0IGZyYW1l
IHRpbWUuCi0gICAgICAgIG5leHRGcmFtZVRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAg
ICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2FibGVGcHNSZWR1Y3Rpb24oKSB7
Ci0gICAgc2V0RnBzUmVkdWN0aW9uKEZsb2F0LlBPU0lUSVZFX0lORklOSVRZIC8qIGZwcyAqLyk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXVzZVZpZGVvKCkgewotICAgIHNldEZwc1JlZHVjdGlv
bigwIC8qIGZwcyAqLyk7Ci0gIH0KLQotICAvKioKLSAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayB0
byBiZSBpbnZva2VkIHdoZW4gYSBuZXcgdmlkZW8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQuCi0g
ICAqCi0gICAqIEBwYXJhbSBsaXN0ZW5lciBUaGUgY2FsbGJhY2sgdG8gYmUgaW52b2tlZC4KLSAg
ICogQHBhcmFtIHNjYWxlICAgIFRoZSBzY2FsZSBvZiB0aGUgQml0bWFwIHBhc3NlZCB0byB0aGUg
Y2FsbGJhY2ssIG9yIDAgaWYgbm8gQml0bWFwIGlzCi0gICAqICAgICAgICAgICAgICAgICByZXF1
aXJlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGFkZEZyYW1lTGlzdGVuZXIoRnJhbWVMaXN0ZW5l
ciBsaXN0ZW5lciwgZmxvYXQgc2NhbGUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTGlzdGVu
ZXJMb2NrKSB7Ci0gICAgICBmcmFtZUxpc3RlbmVycy5hZGQobmV3IFNjYWxlQW5kRnJhbWVMaXN0
ZW5lcihzY2FsZSwgbGlzdGVuZXIpKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVtb3Zl
IGFueSBwZW5kaW5nIGNhbGxiYWNrIHRoYXQgd2FzIGFkZGVkIHdpdGggYWRkRnJhbWVMaXN0ZW5l
ci4gSWYgdGhlIGNhbGxiYWNrIGlzIG5vdCBpbgotICAgKiB0aGUgcXVldWUsIG5vdGhpbmcgaGFw
cGVucy4KLSAgICoKLSAgICogQHBhcmFtIHJ1bm5hYmxlIFRoZSBjYWxsYmFjayB0byByZW1vdmUu
Ci0gICAqLwotICBwdWJsaWMgdm9pZCByZW1vdmVGcmFtZUxpc3RlbmVyKEZyYW1lTGlzdGVuZXIg
bGlzdGVuZXIpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTGlzdGVuZXJMb2NrKSB7Ci0gICAg
ICBmaW5hbCBJdGVyYXRvcjxTY2FsZUFuZEZyYW1lTGlzdGVuZXI+IGl0ZXIgPSBmcmFtZUxpc3Rl
bmVycy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0gICAgICAg
IGlmIChpdGVyLm5leHQoKS5saXN0ZW5lciA9PSBsaXN0ZW5lcikgewotICAgICAgICAgIGl0ZXIu
cmVtb3ZlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBWaWRlb1Jl
bmRlcmVyLkNhbGxiYWNrcyBpbnRlcmZhY2UuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBy
ZW5kZXJGcmFtZShWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgIHN5bmNocm9u
aXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAgICsrZnJhbWVzUmVjZWl2ZWQ7Ci0gICAgfQot
ICAgIGZpbmFsIGJvb2xlYW4gZHJvcE9sZEZyYW1lOwotICAgIHN5bmNocm9uaXplZCAoaGFuZGxl
ckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpIHsKLSAgICAg
ICAgbG9nRCgiRHJvcHBpbmcgZnJhbWUgLSBOb3QgaW5pdGlhbGl6ZWQgb3IgYWxyZWFkeSByZWxl
YXNlZC4iKTsKLSAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICAvLyBDaGVjayBpZiBmcHMgcmVkdWN0aW9u
IGlzIGFjdGl2ZS4KLSAgICAgIHN5bmNocm9uaXplZCAoZnBzUmVkdWN0aW9uTG9jaykgewotICAg
ICAgICBpZiAobWluUmVuZGVyUGVyaW9kTnMgPiAwKSB7Ci0gICAgICAgICAgZmluYWwgbG9uZyBj
dXJyZW50VGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgaWYgKGN1cnJlbnRU
aW1lTnMgPCBuZXh0RnJhbWVUaW1lTnMpIHsKLSAgICAgICAgICAgIGxvZ0QoIkRyb3BwaW5nIGZy
YW1lIC0gZnBzIHJlZHVjdGlvbiBpcyBhY3RpdmUuIik7Ci0gICAgICAgICAgICBWaWRlb1JlbmRl
cmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgfQotICAgICAgICAgIG5leHRGcmFtZVRpbWVOcyArPSBtaW5SZW5kZXJQZXJpb2ROczsKLSAg
ICAgICAgICAvLyBUaGUgdGltZSBmb3IgdGhlIG5leHQgZnJhbWUgc2hvdWxkIGFsd2F5cyBiZSBp
biB0aGUgZnV0dXJlLgotICAgICAgICAgIG5leHRGcmFtZVRpbWVOcyA9IE1hdGgubWF4KG5leHRG
cmFtZVRpbWVOcywgY3VycmVudFRpbWVOcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHN5
bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIGRyb3BPbGRGcmFtZSA9IChwZW5kaW5n
RnJhbWUgIT0gbnVsbCk7Ci0gICAgICAgIGlmIChkcm9wT2xkRnJhbWUpIHsKLSAgICAgICAgICBW
aWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShwZW5kaW5nRnJhbWUpOwotICAgICAgICB9Ci0g
ICAgICAgIHBlbmRpbmdGcmFtZSA9IGZyYW1lOwotICAgICAgICByZW5kZXJUaHJlYWRIYW5kbGVy
LnBvc3QocmVuZGVyRnJhbWVSdW5uYWJsZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChkcm9w
T2xkRnJhbWUpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAg
ICAgKytmcmFtZXNEcm9wcGVkOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBS
ZWxlYXNlIEVHTCBzdXJmYWNlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdW50aWwgdGhlIEVH
TCBzdXJmYWNlIGlzIHJlbGVhc2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVsZWFzZUVnbFN1
cmZhY2UoZmluYWwgUnVubmFibGUgY29tcGxldGlvbkNhbGxiYWNrKSB7Ci0gICAgLy8gRW5zdXJl
IHRoYXQgdGhlIHJlbmRlciB0aHJlYWQgaXMgbm8gbG9uZ2VyIHRvdWNoaW5nIHRoZSBTdXJmYWNl
IGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGlzCi0gICAgLy8gZnVuY3Rpb24uCi0gICAgZWdsU3Vy
ZmFjZUNyZWF0aW9uUnVubmFibGUuc2V0U3VyZmFjZShudWxsIC8qIHN1cmZhY2UgKi8pOwotICAg
IHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5k
bGVyICE9IG51bGwpIHsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFj
a3MoZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUpOwotICAgICAgICByZW5kZXJUaHJlYWRIYW5k
bGVyLnBvc3RBdEZyb250T2ZRdWV1ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgaWYgKGVnbEJh
c2UgIT0gbnVsbCkgewotICAgICAgICAgICAgICBlZ2xCYXNlLmRldGFjaEN1cnJlbnQoKTsKLSAg
ICAgICAgICAgICAgZWdsQmFzZS5yZWxlYXNlU3VyZmFjZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgY29tcGxldGlvbkNhbGxiYWNrLnJ1bigpOwotICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0gICAgY29tcGxldGlvbkNhbGxi
YWNrLnJ1bigpOwotICB9Ci0KLSAgLyoqCi0gICAqIE5vdGlmeSB0aGF0IHRoZSBzdXJmYWNlIHNp
emUgaGFzIGNoYW5nZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdXJmYWNlU2l6ZUNoYW5nZWQo
aW50IHN1cmZhY2VXaWR0aCwgaW50IHN1cmZhY2VIZWlnaHQpIHsKLSAgICBsb2dEKCJTdXJmYWNl
IHNpemUgY2hhbmdlZDogIiArIHN1cmZhY2VXaWR0aCArICJ4IiArIHN1cmZhY2VIZWlnaHQpOwot
ICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAgICAgdGhpcy5zdXJmYWNlV2lkdGgg
PSBzdXJmYWNlV2lkdGg7Ci0gICAgICB0aGlzLnN1cmZhY2VIZWlnaHQgPSBzdXJmYWNlSGVpZ2h0
OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQcml2YXRlIGhlbHBlciBmdW5jdGlvbiB0byBw
b3N0IHRhc2tzIHNhZmVseS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBwb3N0VG9SZW5kZXJUaHJl
YWQoUnVubmFibGUgcnVubmFibGUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7
Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIHJlbmRl
clRocmVhZEhhbmRsZXIucG9zdChydW5uYWJsZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIGNsZWFyU3VyZmFjZU9uUmVuZGVyVGhyZWFkKCkgewotICAgIGlmIChlZ2xC
YXNlICE9IG51bGwgJiYgZWdsQmFzZS5oYXNTdXJmYWNlKCkpIHsKLSAgICAgIGxvZ0QoImNsZWFy
U3VyZmFjZSIpOwotICAgICAgR0xFUzIwLmdsQ2xlYXJDb2xvcigwIC8qIHJlZCAqLywgMCAvKiBn
cmVlbiAqLywgMCAvKiBibHVlICovLCAwIC8qIGFscGhhICovKTsKLSAgICAgIEdMRVMyMC5nbENs
ZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgIGVnbEJhc2Uuc3dhcEJ1ZmZl
cnMoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUG9zdCBhIHRhc2sgdG8gY2xlYXIgdGhl
IFRleHR1cmVWaWV3IHRvIGEgdHJhbnNwYXJlbnQgdW5pZm9ybSBjb2xvci4KLSAgICovCi0gIHB1
YmxpYyB2b2lkIGNsZWFySW1hZ2UoKSB7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykg
ewotICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3RBdEZyb250T2ZRdWV1
ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgICAgY2xlYXJTdXJmYWNlT25SZW5kZXJUaHJlYWQoKTsKLSAgICAg
ICAgfQotICAgICAgfSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbmRlcnMgYW5kIHJl
bGVhc2VzIHxwZW5kaW5nRnJhbWV8LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlbmRlckZyYW1l
T25SZW5kZXJUaHJlYWQoKSB7Ci0gICAgLy8gRmV0Y2ggYW5kIHJlbmRlciB8cGVuZGluZ0ZyYW1l
fC4KLSAgICBmaW5hbCBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZTsKLSAgICBzeW5jaHJv
bml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgaWYgKHBlbmRpbmdGcmFtZSA9PSBudWxsKSB7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGZyYW1lID0gcGVuZGluZ0ZyYW1lOwotICAg
ICAgcGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGVnbEJhc2UgPT0gbnVsbCB8
fCAhZWdsQmFzZS5oYXNTdXJmYWNlKCkpIHsKLSAgICAgIGxvZ0QoIkRyb3BwaW5nIGZyYW1lIC0g
Tm8gc3VyZmFjZSIpOwotICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUp
OwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgc3RhcnRUaW1lTnMgPSBT
eXN0ZW0ubmFub1RpbWUoKTsKLSAgICBmaW5hbCBmbG9hdFtdIHRleE1hdHJpeCA9Ci0gICAgICAg
IFJlbmRlcmVyQ29tbW9uLnJvdGF0ZVRleHR1cmVNYXRyaXgoZnJhbWUuc2FtcGxpbmdNYXRyaXgs
IGZyYW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICBmaW5hbCBmbG9hdFtdIGRyYXdNYXRyaXg7Ci0K
LSAgICAvLyBBZnRlciBhIHN1cmZhY2Ugc2l6ZSBjaGFuZ2UsIHRoZSBFR0xTdXJmYWNlIG1pZ2h0
IHN0aWxsIGhhdmUgYSBidWZmZXIgb2YgdGhlIG9sZCBzaXplIGluIHRoZQotICAgIC8vIHBpcGVs
aW5lLiBRdWVyeWluZyB0aGUgRUdMU3VyZmFjZSB3aWxsIHNob3cgaWYgdGhlIHVuZGVybHlpbmcg
YnVmZmVyIGRpbWVuc2lvbnMgaGF2ZW4ndCB5ZXQKLSAgICAvLyBjaGFuZ2VkLiBTdWNoIGEgYnVm
ZmVyIHdpbGwgYmUgcmVuZGVyZWQgaW5jb3JyZWN0bHksIHNvIGZsdXNoIGl0IHdpdGggYSBibGFj
ayBmcmFtZS4KLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2spIHsKLSAgICAgIGludCBzdXJm
YWNlQ2xlYXJDb3VudCA9IDA7Ci0gICAgICB3aGlsZSAoZWdsQmFzZS5zdXJmYWNlV2lkdGgoKSAh
PSBzdXJmYWNlV2lkdGggfHwgZWdsQmFzZS5zdXJmYWNlSGVpZ2h0KCkgIT0gc3VyZmFjZUhlaWdo
dCkgewotICAgICAgICArK3N1cmZhY2VDbGVhckNvdW50OwotICAgICAgICBpZiAoc3VyZmFjZUNs
ZWFyQ291bnQgPiBNQVhfU1VSRkFDRV9DTEVBUl9DT1VOVCkgewotICAgICAgICAgIGxvZ0QoIkZh
aWxlZCB0byBnZXQgc3VyZmFjZSBvZiBleHBlY3RlZCBzaXplIC0gZHJvcHBpbmcgZnJhbWUuIik7
Ci0gICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsb2dEKCJTdXJmYWNlIHNpemUgbWlzbWF0
Y2ggLSBjbGVhcmluZyBzdXJmYWNlLiBTaXplOiAiICsgZWdsQmFzZS5zdXJmYWNlV2lkdGgoKSAr
ICJ4IgotICAgICAgICAgICAgKyBlZ2xCYXNlLnN1cmZhY2VIZWlnaHQoKSArICIgRXhwZWN0ZWQ6
ICIgKyBzdXJmYWNlV2lkdGggKyAieCIgKyBzdXJmYWNlSGVpZ2h0KTsKLSAgICAgICAgY2xlYXJT
dXJmYWNlT25SZW5kZXJUaHJlYWQoKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsIGZsb2F0W10gbGF5
b3V0TWF0cml4OwotICAgICAgaWYgKGxheW91dEFzcGVjdFJhdGlvID4gMCkgewotICAgICAgICBs
YXlvdXRNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5nZXRMYXlvdXRNYXRyaXgoCi0gICAgICAgICAg
ICBtaXJyb3IsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpIC8gKGZsb2F0KSBmcmFtZS5yb3RhdGVkSGVp
Z2h0KCksIGxheW91dEFzcGVjdFJhdGlvKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGxheW91
dE1hdHJpeCA9Ci0gICAgICAgICAgICBtaXJyb3IgPyBSZW5kZXJlckNvbW1vbi5ob3Jpem9udGFs
RmxpcE1hdHJpeCgpIDogUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKTsKLSAgICAgIH0K
LSAgICAgIGRyYXdNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHRleE1h
dHJpeCwgbGF5b3V0TWF0cml4KTsKLSAgICB9Ci0KLSAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKDAg
LyogcmVkICovLCAwIC8qIGdyZWVuICovLCAwIC8qIGJsdWUgKi8sIDAgLyogYWxwaGEgKi8pOwot
ICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICBpZiAo
ZnJhbWUueXV2RnJhbWUpIHsKLSAgICAgIC8vIE1ha2Ugc3VyZSBZVVYgdGV4dHVyZXMgYXJlIGFs
bG9jYXRlZC4KLSAgICAgIGlmICh5dXZUZXh0dXJlcyA9PSBudWxsKSB7Ci0gICAgICAgIHl1dlRl
eHR1cmVzID0gbmV3IGludFszXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKysp
IHsKLSAgICAgICAgICB5dXZUZXh0dXJlc1tpXSA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xF
UzIwLkdMX1RFWFRVUkVfMkQpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB5dXZVcGxvYWRl
ci51cGxvYWRZdXZEYXRhKAotICAgICAgICAgIHl1dlRleHR1cmVzLCBmcmFtZS53aWR0aCwgZnJh
bWUuaGVpZ2h0LCBmcmFtZS55dXZTdHJpZGVzLCBmcmFtZS55dXZQbGFuZXMpOwotICAgICAgZHJh
d2VyLmRyYXdZdXYoeXV2VGV4dHVyZXMsIGRyYXdNYXRyaXgsIGZyYW1lLnJvdGF0ZWRXaWR0aCgp
LCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCksIDAsIDAsCi0gICAgICAgICAgc3VyZmFjZVdpZHRoLCBz
dXJmYWNlSGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgZHJhd2VyLmRyYXdPZXMoZnJhbWUu
dGV4dHVyZUlkLCBkcmF3TWF0cml4LCBmcmFtZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUucm90YXRl
ZEhlaWdodCgpLCAwLCAwLAotICAgICAgICAgIHN1cmZhY2VXaWR0aCwgc3VyZmFjZUhlaWdodCk7
Ci0gICAgfQotCi0gICAgZmluYWwgbG9uZyBzd2FwQnVmZmVyc1N0YXJ0VGltZU5zID0gU3lzdGVt
Lm5hbm9UaW1lKCk7Ci0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotCi0gICAgZmluYWwgbG9u
ZyBjdXJyZW50VGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgc3luY2hyb25pemVkIChz
dGF0aXN0aWNzTG9jaykgewotICAgICAgKytmcmFtZXNSZW5kZXJlZDsKLSAgICAgIHJlbmRlclRp
bWVOcyArPSAoY3VycmVudFRpbWVOcyAtIHN0YXJ0VGltZU5zKTsKLSAgICAgIHJlbmRlclN3YXBC
dWZmZXJUaW1lTnMgKz0gKGN1cnJlbnRUaW1lTnMgLSBzd2FwQnVmZmVyc1N0YXJ0VGltZU5zKTsK
LSAgICB9Ci0KLSAgICBub3RpZnlDYWxsYmFja3MoZnJhbWUsIHRleE1hdHJpeCk7Ci0gICAgVmlk
ZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IG5vdGlmeUNhbGxiYWNrcyhWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSwgZmxvYXRbXSB0
ZXhNYXRyaXgpIHsKLSAgICAvLyBNYWtlIHRlbXBvcmFyeSBjb3B5IG9mIGNhbGxiYWNrIGxpc3Qg
dG8gYXZvaWQgQ29uY3VycmVudE1vZGlmaWNhdGlvbkV4Y2VwdGlvbiwgaW4gY2FzZQotICAgIC8v
IGNhbGxiYWNrcyBjYWxsIGFkZEZyYW1lbGlzdGVuZXIgb3IgcmVtb3ZlRnJhbWVMaXN0ZW5lci4K
LSAgICBmaW5hbCBBcnJheUxpc3Q8U2NhbGVBbmRGcmFtZUxpc3RlbmVyPiB0bXBMaXN0OwotICAg
IHN5bmNocm9uaXplZCAoZnJhbWVMaXN0ZW5lckxvY2spIHsKLSAgICAgIGlmIChmcmFtZUxpc3Rl
bmVycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgIHRtcExpc3QgPSBuZXcgQXJy
YXlMaXN0PD4oZnJhbWVMaXN0ZW5lcnMpOwotICAgICAgZnJhbWVMaXN0ZW5lcnMuY2xlYXIoKTsK
LSAgICB9Ci0KLSAgICBmaW5hbCBmbG9hdFtdIGJpdG1hcE1hdHJpeCA9IFJlbmRlcmVyQ29tbW9u
Lm11bHRpcGx5TWF0cmljZXMoCi0gICAgICAgIFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmlj
ZXModGV4TWF0cml4LAotICAgICAgICAgICAgbWlycm9yID8gUmVuZGVyZXJDb21tb24uaG9yaXpv
bnRhbEZsaXBNYXRyaXgoKSA6IFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCkpLAotICAg
ICAgICBSZW5kZXJlckNvbW1vbi52ZXJ0aWNhbEZsaXBNYXRyaXgoKSk7Ci0KLSAgICBmb3IgKFNj
YWxlQW5kRnJhbWVMaXN0ZW5lciBzY2FsZUFuZExpc3RlbmVyIDogdG1wTGlzdCkgewotICAgICAg
ZmluYWwgaW50IHNjYWxlZFdpZHRoID0gKGludCkgKHNjYWxlQW5kTGlzdGVuZXIuc2NhbGUgKiBm
cmFtZS5yb3RhdGVkV2lkdGgoKSk7Ci0gICAgICBmaW5hbCBpbnQgc2NhbGVkSGVpZ2h0ID0gKGlu
dCkgKHNjYWxlQW5kTGlzdGVuZXIuc2NhbGUgKiBmcmFtZS5yb3RhdGVkSGVpZ2h0KCkpOwotCi0g
ICAgICBpZiAoc2NhbGVkV2lkdGggPT0gMCB8fCBzY2FsZWRIZWlnaHQgPT0gMCkgewotICAgICAg
ICBzY2FsZUFuZExpc3RlbmVyLmxpc3RlbmVyLm9uRnJhbWUobnVsbCk7Ci0gICAgICAgIGNvbnRp
bnVlOwotICAgICAgfQotCi0gICAgICBpZiAoYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyID09IG51
bGwpIHsKLSAgICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyID0gbmV3IEdsVGV4dHVyZUZy
YW1lQnVmZmVyKEdMRVMyMC5HTF9SR0JBKTsKLSAgICAgIH0KLSAgICAgIGJpdG1hcFRleHR1cmVG
cmFtZWJ1ZmZlci5zZXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotCi0gICAgICBH
TEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBiaXRtYXBUZXh0
dXJlRnJhbWVidWZmZXIuZ2V0RnJhbWVCdWZmZXJJZCgpKTsKLSAgICAgIEdMRVMyMC5nbEZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgR0xFUzIwLkdMX0NPTE9SX0FU
VEFDSE1FTlQwLAotICAgICAgICAgIEdMRVMyMC5HTF9URVhUVVJFXzJELCBiaXRtYXBUZXh0dXJl
RnJhbWVidWZmZXIuZ2V0VGV4dHVyZUlkKCksIDApOwotCi0gICAgICBpZiAoZnJhbWUueXV2RnJh
bWUpIHsKLSAgICAgICAgZHJhd2VyLmRyYXdZdXYoeXV2VGV4dHVyZXMsIGJpdG1hcE1hdHJpeCwg
ZnJhbWUucm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSwKLSAgICAgICAgICAg
IDAgLyogdmlld3BvcnRYICovLCAwIC8qIHZpZXdwb3J0WSAqLywgc2NhbGVkV2lkdGgsIHNjYWxl
ZEhlaWdodCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkcmF3ZXIuZHJhd09lcyhmcmFtZS50
ZXh0dXJlSWQsIGJpdG1hcE1hdHJpeCwgZnJhbWUucm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0
ZWRIZWlnaHQoKSwKLSAgICAgICAgICAgIDAgLyogdmlld3BvcnRYICovLCAwIC8qIHZpZXdwb3J0
WSAqLywgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgICB9Ci0KLSAgICAgIGZpbmFs
IEJ5dGVCdWZmZXIgYml0bWFwQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChzY2Fs
ZWRXaWR0aCAqIHNjYWxlZEhlaWdodCAqIDQpOwotICAgICAgR0xFUzIwLmdsVmlld3BvcnQoMCwg
MCwgc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgICBHTEVTMjAuZ2xSZWFkUGl4ZWxz
KAotICAgICAgICAgIDAsIDAsIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQsIEdMRVMyMC5HTF9S
R0JBLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgYml0bWFwQnVmZmVyKTsKLQotICAgICAgR0xF
UzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgICBH
bFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkVnbFJlbmRlcmVyLm5vdGlmeUNhbGxiYWNrcyIpOwot
Ci0gICAgICBmaW5hbCBCaXRtYXAgYml0bWFwID0gQml0bWFwLmNyZWF0ZUJpdG1hcChzY2FsZWRX
aWR0aCwgc2NhbGVkSGVpZ2h0LCBCaXRtYXAuQ29uZmlnLkFSR0JfODg4OCk7Ci0gICAgICBiaXRt
YXAuY29weVBpeGVsc0Zyb21CdWZmZXIoYml0bWFwQnVmZmVyKTsKLSAgICAgIHNjYWxlQW5kTGlz
dGVuZXIubGlzdGVuZXIub25GcmFtZShiaXRtYXApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
U3RyaW5nIGF2ZXJhZ2VUaW1lQXNTdHJpbmcobG9uZyBzdW1UaW1lTnMsIGludCBjb3VudCkgewot
ICAgIHJldHVybiAoY291bnQgPD0gMCkgPyAiTkEiIDogVGltZVVuaXQuTkFOT1NFQ09ORFMudG9N
aWNyb3Moc3VtVGltZU5zIC8gY291bnQpICsgIiDOvHMiOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IGxvZ1N0YXRpc3RpY3MoKSB7Ci0gICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU5zID0gU3lzdGVt
Lm5hbm9UaW1lKCk7Ci0gICAgc3luY2hyb25pemVkIChzdGF0aXN0aWNzTG9jaykgewotICAgICAg
ZmluYWwgbG9uZyBlbGFwc2VkVGltZU5zID0gY3VycmVudFRpbWVOcyAtIHN0YXRpc3RpY3NTdGFy
dFRpbWVOczsKLSAgICAgIGlmIChlbGFwc2VkVGltZU5zIDw9IDApIHsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgICAgZmluYWwgZmxvYXQgcmVuZGVyRnBzID0gZnJhbWVzUmVuZGVyZWQg
KiBUaW1lVW5pdC5TRUNPTkRTLnRvTmFub3MoMSkgLyAoZmxvYXQpIGVsYXBzZWRUaW1lTnM7Ci0g
ICAgICBsb2dEKCJEdXJhdGlvbjogIiArIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKGVs
YXBzZWRUaW1lTnMpICsgIiBtcy4iCi0gICAgICAgICAgKyAiIEZyYW1lcyByZWNlaXZlZDogIiAr
IGZyYW1lc1JlY2VpdmVkICsgIi4iCi0gICAgICAgICAgKyAiIERyb3BwZWQ6ICIgKyBmcmFtZXNE
cm9wcGVkICsgIi4iCi0gICAgICAgICAgKyAiIFJlbmRlcmVkOiAiICsgZnJhbWVzUmVuZGVyZWQg
KyAiLiIKLSAgICAgICAgICArICIgUmVuZGVyIGZwczogIiArIFN0cmluZy5mb3JtYXQoIiUuMWYi
LCByZW5kZXJGcHMpICsgIi4iCi0gICAgICAgICAgKyAiIEF2ZXJhZ2UgcmVuZGVyIHRpbWU6ICIg
KyBhdmVyYWdlVGltZUFzU3RyaW5nKHJlbmRlclRpbWVOcywgZnJhbWVzUmVuZGVyZWQpICsgIi4i
Ci0gICAgICAgICAgKyAiIEF2ZXJhZ2Ugc3dhcEJ1ZmZlciB0aW1lOiAiCi0gICAgICAgICAgKyBh
dmVyYWdlVGltZUFzU3RyaW5nKHJlbmRlclN3YXBCdWZmZXJUaW1lTnMsIGZyYW1lc1JlbmRlcmVk
KSArICIuIik7Ci0gICAgICByZXNldFN0YXRpc3RpY3MoY3VycmVudFRpbWVOcyk7Ci0gICAgfQot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ0QoU3RyaW5nIHN0cmluZykgewotICAgIExvZ2dpbmcu
ZChUQUcsIG5hbWUgKyBzdHJpbmcpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0Zp
bGVWaWRlb0NhcHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9GaWxl
VmlkZW9DYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0ZpbGVWaWRlb0NhcHR1cmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTEgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLQotaW1w
b3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRpbC5UaW1l
cjsKLWltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOwotaW1wb3J0IGphdmEuaW8uUmFuZG9tQWNj
ZXNzRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgRmls
ZVZpZGVvQ2FwdHVyZXIgaW1wbGVtZW50cyBWaWRlb0NhcHR1cmVyIHsKLSAgcHJpdmF0ZSBpbnRl
cmZhY2UgVmlkZW9SZWFkZXIgewotICAgIGludCBnZXRGcmFtZVdpZHRoKCk7Ci0gICAgaW50IGdl
dEZyYW1lSGVpZ2h0KCk7Ci0gICAgYnl0ZVtdIGdldE5leHRGcmFtZSgpOwotICAgIHZvaWQgY2xv
c2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIHZpZGVvIGRhdGEgZnJvbSBmaWxlIGZvciB0
aGUgLnk0bSBjb250YWluZXIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWaWRlb1Jl
YWRlclk0TSBpbXBsZW1lbnRzIFZpZGVvUmVhZGVyIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRp
YyBTdHJpbmcgVEFHID0gIlZpZGVvUmVhZGVyWTRNIjsKLSAgICBwcml2YXRlIGZpbmFsIGludCBm
cmFtZVdpZHRoOwotICAgIHByaXZhdGUgZmluYWwgaW50IGZyYW1lSGVpZ2h0OwotICAgIHByaXZh
dGUgZmluYWwgaW50IGZyYW1lU2l6ZTsKLQotICAgIC8vIEZpcnN0IGNoYXIgYWZ0ZXIgaGVhZGVy
Ci0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIHZpZGVvU3RhcnQ7Ci0KLSAgICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBTdHJpbmcgWTRNX0ZSQU1FX0RFTElNRVRFUiA9ICJGUkFNRSI7Ci0KLSAgICBwcml2
YXRlIGZpbmFsIFJhbmRvbUFjY2Vzc0ZpbGUgbWVkaWFGaWxlU3RyZWFtOwotCi0gICAgcHVibGlj
IGludCBnZXRGcmFtZVdpZHRoKCkgewotICAgICAgcmV0dXJuIGZyYW1lV2lkdGg7Ci0gICAgfQot
Ci0gICAgcHVibGljIGludCBnZXRGcmFtZUhlaWdodCgpIHsKLSAgICAgIHJldHVybiBmcmFtZUhl
aWdodDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgVmlkZW9SZWFkZXJZNE0oU3RyaW5nIGZpbGUpIHRo
cm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICBtZWRpYUZpbGVTdHJlYW0gPSBuZXcgUmFuZG9tQWNj
ZXNzRmlsZShmaWxlLCAiciIpOwotICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0
cmluZ0J1aWxkZXIoKTsKLSAgICAgIGZvciAoOzspIHsKLSAgICAgICAgaW50IGMgPSBtZWRpYUZp
bGVTdHJlYW0ucmVhZCgpOwotICAgICAgICBpZiAoYyA9PSAtMSkgewotICAgICAgICAgIC8vIEVu
ZCBvZiBmaWxlIHJlYWNoZWQuCi0gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
IkZvdW5kIGVuZCBvZiBmaWxlIGJlZm9yZSBlbmQgb2YgaGVhZGVyIGZvciBmaWxlOiAiICsgZmls
ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGMgPT0gJ1xuJykgewotICAgICAgICAgIC8vIEVu
ZCBvZiBoZWFkZXIgZm91bmQuCi0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoKGNoYXIpIGMpOwotICAgICAgfQotICAgICAgdmlkZW9TdGFydCA9IG1l
ZGlhRmlsZVN0cmVhbS5nZXRGaWxlUG9pbnRlcigpOwotICAgICAgU3RyaW5nIGhlYWRlciA9IGJ1
aWxkZXIudG9TdHJpbmcoKTsKLSAgICAgIFN0cmluZ1tdIGhlYWRlclRva2VucyA9IGhlYWRlci5z
cGxpdCgiWyBdIik7Ci0gICAgICBpbnQgdyA9IDA7Ci0gICAgICBpbnQgaCA9IDA7Ci0gICAgICBT
dHJpbmcgY29sb3JTcGFjZSA9ICIiOwotICAgICAgZm9yIChTdHJpbmcgdG9rIDogaGVhZGVyVG9r
ZW5zKSB7Ci0gICAgICAgIGNoYXIgYyA9IHRvay5jaGFyQXQoMCk7Ci0gICAgICAgIHN3aXRjaCAo
YykgewotICAgICAgICAgIGNhc2UgJ1cnOgotICAgICAgICAgICAgdyA9IEludGVnZXIucGFyc2VJ
bnQodG9rLnN1YnN0cmluZygxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
ICdIJzoKLSAgICAgICAgICAgIGggPSBJbnRlZ2VyLnBhcnNlSW50KHRvay5zdWJzdHJpbmcoMSkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSAnQyc6Ci0gICAgICAgICAgICBj
b2xvclNwYWNlID0gdG9rLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ29sb3Igc3BhY2U6ICIgKyBjb2xv
clNwYWNlKTsKLSAgICAgIGlmICghY29sb3JTcGFjZS5lcXVhbHMoIjQyMCIpICYmICFjb2xvclNw
YWNlLmVxdWFscygiNDIwbXBlZzIiKSkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3Vt
ZW50RXhjZXB0aW9uKAotICAgICAgICAgICAgIkRvZXMgbm90IHN1cHBvcnQgYW55IG90aGVyIGNv
bG9yIHNwYWNlIHRoYW4gSTQyMCBvciBJNDIwbXBlZzIiKTsKLSAgICAgIH0KLSAgICAgIGlmICgo
dyAlIDIpID09IDEgfHwgKGggJSAyKSA9PSAxKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24oIkRvZXMgbm90IHN1cHBvcnQgb2RkIHdpZHRoIG9yIGhlaWdodCIp
OwotICAgICAgfQotICAgICAgZnJhbWVXaWR0aCA9IHc7Ci0gICAgICBmcmFtZUhlaWdodCA9IGg7
Ci0gICAgICBmcmFtZVNpemUgPSB3ICogaCAqIDMgLyAyOwotICAgICAgTG9nZ2luZy5kKFRBRywg
ImZyYW1lIGRpbTogKCIgKyB3ICsgIiwgIiArIGggKyAiKSBmcmFtZVNpemU6ICIgKyBmcmFtZVNp
emUpOwotICAgIH0KLQotICAgIHB1YmxpYyBieXRlW10gZ2V0TmV4dEZyYW1lKCkgewotICAgICAg
Ynl0ZVtdIGZyYW1lID0gbmV3IGJ5dGVbZnJhbWVTaXplXTsKLSAgICAgIHRyeSB7Ci0gICAgICAg
IGJ5dGVbXSBmcmFtZURlbGltID0gbmV3IGJ5dGVbWTRNX0ZSQU1FX0RFTElNRVRFUi5sZW5ndGgo
KSArIDFdOwotICAgICAgICBpZiAobWVkaWFGaWxlU3RyZWFtLnJlYWQoZnJhbWVEZWxpbSkgPCBm
cmFtZURlbGltLmxlbmd0aCkgewotICAgICAgICAgIC8vIFdlIHJlYWNoIGVuZCBvZiBmaWxlLCBs
b29wCi0gICAgICAgICAgbWVkaWFGaWxlU3RyZWFtLnNlZWsodmlkZW9TdGFydCk7Ci0gICAgICAg
ICAgaWYgKG1lZGlhRmlsZVN0cmVhbS5yZWFkKGZyYW1lRGVsaW0pIDwgZnJhbWVEZWxpbS5sZW5n
dGgpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJFcnJvciBsb29w
aW5nIHZpZGVvIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBmcmFt
ZURlbGltU3RyID0gbmV3IFN0cmluZyhmcmFtZURlbGltKTsKLSAgICAgICAgaWYgKCFmcmFtZURl
bGltU3RyLmVxdWFscyhZNE1fRlJBTUVfREVMSU1FVEVSICsgIlxuIikpIHsKLSAgICAgICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgIkZyYW1lcyBzaG91bGQg
YmUgZGVsaW1pdGVkIGJ5IEZSQU1FIHBsdXMgbmV3bGluZSwgZm91bmQgZGVsaW10ZXIgd2FzOiAn
IgotICAgICAgICAgICAgICArIGZyYW1lRGVsaW1TdHIgKyAiJyIpOwotICAgICAgICB9Ci0gICAg
ICAgIG1lZGlhRmlsZVN0cmVhbS5yZWFkRnVsbHkoZnJhbWUpOwotICAgICAgICBieXRlW10gbnYy
MUZyYW1lID0gbmV3IGJ5dGVbZnJhbWVTaXplXTsKLSAgICAgICAgbmF0aXZlSTQyMFRvTlYyMShm
cmFtZSwgZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIG52MjFGcmFtZSk7Ci0gICAgICAgIHJldHVy
biBudjIxRnJhbWU7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIGNsb3NlKCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgbWVkaWFGaWxlU3RyZWFtLmNs
b3NlKCk7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcu
ZShUQUcsICJQcm9ibGVtIGNsb3NpbmcgZmlsZSIsIGUpOwotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiRmlsZVZpZGVvQ2FwdHVyZXIi
OwotICBwcml2YXRlIGZpbmFsIFZpZGVvUmVhZGVyIHZpZGVvUmVhZGVyOwotICBwcml2YXRlIENh
cHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcjsKLSAgcHJpdmF0ZSBmaW5hbCBUaW1lciB0
aW1lciA9IG5ldyBUaW1lcigpOwotCi0gIHByaXZhdGUgZmluYWwgVGltZXJUYXNrIHRpY2tUYXNr
ID0gbmV3IFRpbWVyVGFzaygpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICB0aWNrKCk7Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgaW50IGdldEZyYW1l
V2lkdGgoKSB7Ci0gICAgcmV0dXJuIHZpZGVvUmVhZGVyLmdldEZyYW1lV2lkdGgoKTsKLSAgfQot
Ci0gIHByaXZhdGUgaW50IGdldEZyYW1lSGVpZ2h0KCkgewotICAgIHJldHVybiB2aWRlb1JlYWRl
ci5nZXRGcmFtZUhlaWdodCgpOwotICB9Ci0KLSAgcHVibGljIEZpbGVWaWRlb0NhcHR1cmVyKFN0
cmluZyBpbnB1dEZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIHZp
ZGVvUmVhZGVyID0gbmV3IFZpZGVvUmVhZGVyWTRNKGlucHV0RmlsZSk7Ci0gICAgfSBjYXRjaCAo
SU9FeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkNvdWxkIG5vdCBvcGVuIHZp
ZGVvIGZpbGU6ICIgKyBpbnB1dEZpbGUpOwotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIGJ5dGVbXSBnZXROZXh0RnJhbWUoKSB7Ci0gICAgcmV0dXJuIHZpZGVvUmVhZGVy
LmdldE5leHRGcmFtZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGljaygpIHsKLSAgICBmaW5h
bCBsb25nIGNhcHR1cmVUaW1lTnMgPSBUaW1lVW5pdC5NSUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0
ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0KLSAgICBieXRlW10gZnJhbWVEYXRhID0gZ2V0
TmV4dEZyYW1lKCk7Ci0gICAgY2FwdHVyZXJPYnNlcnZlci5vbkJ5dGVCdWZmZXJGcmFtZUNhcHR1
cmVkKAotICAgICAgICBmcmFtZURhdGEsIGdldEZyYW1lV2lkdGgoKSwgZ2V0RnJhbWVIZWlnaHQo
KSwgMCwgY2FwdHVyZVRpbWVOcyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
aW5pdGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgQ29u
dGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYXB0dXJlck9ic2VydmVyIGNhcHR1cmVy
T2JzZXJ2ZXIpIHsKLSAgICB0aGlzLmNhcHR1cmVyT2JzZXJ2ZXIgPSBjYXB0dXJlck9ic2VydmVy
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0YXJ0Q2FwdHVyZShpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICB0aW1lci5zY2hlZHVsZSh0aWNr
VGFzaywgMCwgMTAwMCAvIGZyYW1lcmF0ZSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgc3RvcENhcHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIHRp
bWVyLmNhbmNlbCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNoYW5nZUNh
cHR1cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAg
Ly8gRW1wdHkgb24gcHVycG9zZQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRp
c3Bvc2UoKSB7Ci0gICAgdmlkZW9SZWFkZXIuY2xvc2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVJNDIwVG9OVjIxKGJ5dGVbXSBz
cmMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgYnl0ZVtdIGRzdCk7Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0dsUmVjdERyYXdlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvR2xSZWN0RHJhd2VyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvR2xSZWN0RHJhd2VyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTAgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5v
cGVuZ2wuR0xFUzExRXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBq
YXZhLm5pby5GbG9hdEJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuSWRlbnRpdHlIYXNoTWFwOwot
aW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHRvIGRyYXcgYW4g
b3BhcXVlIHF1YWQgb24gdGhlIHRhcmdldCB2aWV3cG9ydCBsb2NhdGlvbi4gUm90YXRpb24sIG1p
cnJvciwgYW5kCi0gKiBjcm9wcGluZyBpcyBzcGVjaWZpZWQgdXNpbmcgYSA0eDQgdGV4dHVyZSBj
b29yZGluYXRlIHRyYW5zZm9ybSBtYXRyaXguIFRoZSBmcmFtZSBpbnB1dCBjYW4gZWl0aGVyCi0g
KiBiZSBhbiBPRVMgdGV4dHVyZSBvciBZVVYgdGV4dHVyZXMgaW4gSTQyMCBmb3JtYXQuIFRoZSBH
TCBzdGF0ZSBtdXN0IGJlIHByZXNlcnZlZCBiZXR3ZWVuIGRyYXcKLSAqIGNhbGxzLCB0aGlzIGlz
IGludGVudGlvbmFsIHRvIG1heGltaXplIHBlcmZvcm1hbmNlLiBUaGUgZnVuY3Rpb24gcmVsZWFz
ZSgpIG11c3QgYmUgY2FsbGVkCi0gKiBtYW51YWxseSB0byBmcmVlIHRoZSByZXNvdXJjZXMgaGVs
ZCBieSB0aGlzIG9iamVjdC4KLSAqLwotcHVibGljIGNsYXNzIEdsUmVjdERyYXdlciBpbXBsZW1l
bnRzIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIHsKLSAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAv
LyBTaW1wbGUgdmVydGV4IHNoYWRlciwgdXNlZCBmb3IgYm90aCBZVVYgYW5kIE9FUy4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZFUlRFWF9TSEFERVJfU1RSSU5HID0KLSAgICAgICAg
InZhcnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBpbl9w
b3M7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBpbl90YztcbiIKLSAgICAgICsgIlxuIgot
ICAgICAgKyAidW5pZm9ybSBtYXQ0IHRleE1hdHJpeDtcbiIKLSAgICAgICsgIlxuIgotICAgICAg
KyAidm9pZCBtYWluKCkge1xuIgotICAgICAgKyAiICAgIGdsX1Bvc2l0aW9uID0gaW5fcG9zO1xu
IgotICAgICAgKyAiICAgIGludGVycF90YyA9ICh0ZXhNYXRyaXggKiBpbl90YykueHk7XG4iCi0g
ICAgICArICJ9XG4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBZVVZfRlJBR01F
TlRfU0hBREVSX1NUUklORyA9Ci0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIK
LSAgICAgICsgInZhcnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAg
ICsgInVuaWZvcm0gc2FtcGxlcjJEIHlfdGV4O1xuIgotICAgICAgKyAidW5pZm9ybSBzYW1wbGVy
MkQgdV90ZXg7XG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBsZXIyRCB2X3RleDtcbiIKLSAgICAg
ICsgIlxuIgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgLy8gQ1NDIGFjY29yZGlu
ZyB0byBodHRwOi8vd3d3LmZvdXJjYy5vcmcvZmNjeXZyZ2IucGhwCi0gICAgICArICIgIGZsb2F0
IHkgPSB0ZXh0dXJlMkQoeV90ZXgsIGludGVycF90YykucjtcbiIKLSAgICAgICsgIiAgZmxvYXQg
dSA9IHRleHR1cmUyRCh1X3RleCwgaW50ZXJwX3RjKS5yIC0gMC41O1xuIgotICAgICAgKyAiICBm
bG9hdCB2ID0gdGV4dHVyZTJEKHZfdGV4LCBpbnRlcnBfdGMpLnIgLSAwLjU7XG4iCi0gICAgICAr
ICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQoeSArIDEuNDAzICogdiwgIgotICAgICAgKyAiICAgICAg
ICAgICAgICAgICAgICAgIHkgLSAwLjM0NCAqIHUgLSAwLjcxNCAqIHYsICIKLSAgICAgICsgIiAg
ICAgICAgICAgICAgICAgICAgICB5ICsgMS43NyAqIHUsIDEpO1xuIgotICAgICAgKyAifVxuIjsK
LQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkdCX0ZSQUdNRU5UX1NIQURFUl9TVFJJ
TkcgPQotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAgICArICJ2YXJ5
aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ1bmlmb3JtIHNh
bXBsZXIyRCByZ2JfdGV4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4oKSB7
XG4iCi0gICAgICArICIgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRChyZ2JfdGV4LCBpbnRlcnBf
dGMpO1xuIgotICAgICAgKyAifVxuIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
T0VTX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcgPQotICAgICAgICAiI2V4dGVuc2lvbiBHTF9PRVNf
RUdMX2ltYWdlX2V4dGVybmFsIDogcmVxdWlyZVxuIgotICAgICAgKyAicHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7XG4iCi0gICAgICArICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAg
KyAiXG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBsZXJFeHRlcm5hbE9FUyBvZXNfdGV4O1xuIgot
ICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICArICIgIGdsX0Zy
YWdDb2xvciA9IHRleHR1cmUyRChvZXNfdGV4LCBpbnRlcnBfdGMpO1xuIgotICAgICAgKyAifVxu
IjsKLSAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgLy8gVmVydGV4IGNvb3JkaW5hdGVzIGluIE5v
cm1hbGl6ZWQgRGV2aWNlIENvb3JkaW5hdGVzLCBpLmUuICgtMSwgLTEpIGlzIGJvdHRvbS1sZWZ0
IGFuZCAoMSwgMSkgaXMKLSAgLy8gdG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBG
bG9hdEJ1ZmZlciBGVUxMX1JFQ1RBTkdMRV9CVUYgPSBHbFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIo
bmV3IGZsb2F0W10gewotICAgICAgLTEuMGYsIC0xLjBmLCAvLyBCb3R0b20gbGVmdC4KLSAgICAg
IDEuMGYsIC0xLjBmLCAvLyBCb3R0b20gcmlnaHQuCi0gICAgICAtMS4wZiwgMS4wZiwgLy8gVG9w
IGxlZnQuCi0gICAgICAxLjBmLCAxLjBmLCAvLyBUb3AgcmlnaHQuCi0gIH0pOwotCi0gIC8vIFRl
eHR1cmUgY29vcmRpbmF0ZXMgLSAoMCwgMCkgaXMgYm90dG9tLWxlZnQgYW5kICgxLCAxKSBpcyB0
b3AtcmlnaHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0QnVmZmVyIEZVTExfUkVDVEFO
R0xFX1RFWF9CVUYgPSBHbFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIobmV3IGZsb2F0W10gewotICAg
ICAgMC4wZiwgMC4wZiwgLy8gQm90dG9tIGxlZnQuCi0gICAgICAxLjBmLCAwLjBmLCAvLyBCb3R0
b20gcmlnaHQuCi0gICAgICAwLjBmLCAxLjBmLCAvLyBUb3AgbGVmdC4KLSAgICAgIDEuMGYsIDEu
MGYgLy8gVG9wIHJpZ2h0LgotICB9KTsKLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTaGFkZXIg
ewotICAgIHB1YmxpYyBmaW5hbCBHbFNoYWRlciBnbFNoYWRlcjsKLSAgICBwdWJsaWMgZmluYWwg
aW50IHRleE1hdHJpeExvY2F0aW9uOwotCi0gICAgcHVibGljIFNoYWRlcihTdHJpbmcgZnJhZ21l
bnRTaGFkZXIpIHsKLSAgICAgIHRoaXMuZ2xTaGFkZXIgPSBuZXcgR2xTaGFkZXIoVkVSVEVYX1NI
QURFUl9TVFJJTkcsIGZyYWdtZW50U2hhZGVyKTsKLSAgICAgIHRoaXMudGV4TWF0cml4TG9jYXRp
b24gPSBnbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInRleE1hdHJpeCIpOwotICAgIH0KLSAg
fQotCi0gIC8vIFRoZSBrZXlzIGFyZSBvbmUgb2YgdGhlIGZyYWdtZW50cyBzaGFkZXJzIGFib3Zl
LgotICBwcml2YXRlIGZpbmFsIE1hcDxTdHJpbmcsIFNoYWRlcj4gc2hhZGVycyA9IG5ldyBJZGVu
dGl0eUhhc2hNYXA8U3RyaW5nLCBTaGFkZXI+KCk7Ci0KLSAgLyoqCi0gICAqIERyYXcgYW4gT0VT
IHRleHR1cmUgZnJhbWUgd2l0aCBzcGVjaWZpZWQgdGV4dHVyZSB0cmFuc2Zvcm1hdGlvbiBtYXRy
aXguIFJlcXVpcmVkIHJlc291cmNlcyBhcmUKLSAgICogYWxsb2NhdGVkIGF0IHRoZSBmaXJzdCBj
YWxsIHRvIHRoaXMgZnVuY3Rpb24uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
ZHJhd09lcyhpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJpeCwgaW50IGZyYW1lV2lk
dGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgIGludCB2aWV3cG9ydFgsIGludCB2aWV3cG9ydFks
IGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpIHsKLSAgICBwcmVwYXJlU2hh
ZGVyKE9FU19GUkFHTUVOVF9TSEFERVJfU1RSSU5HLCB0ZXhNYXRyaXgpOwotICAgIEdMRVMyMC5n
bEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICAvLyB1cGRhdGVUZXhJbWFn
ZSgpIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZCBpbiBhbm90aGVyIEVHTCBjb250
ZXh0LCBzbyB3ZSBuZWVkIHRvCi0gICAgLy8gYmluZC91bmJpbmQgdGhlIHRleHR1cmUgaW4gZWFj
aCBkcmF3IGNhbGwgc28gdGhhdCBHTEVTIHVuZGVyc3RhZHMgaXQncyBhIG5ldyB0ZXh0dXJlLgot
ICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09F
Uywgb2VzVGV4dHVyZUlkKTsKLSAgICBkcmF3UmVjdGFuZ2xlKHZpZXdwb3J0WCwgdmlld3BvcnRZ
LCB2aWV3cG9ydFdpZHRoLCB2aWV3cG9ydEhlaWdodCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1
cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCAwKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBEcmF3IGEgUkdCKEEpIHRleHR1cmUgZnJhbWUgd2l0aCBzcGVjaWZpZWQgdGV4dHVyZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFJlcXVpcmVkIHJlc291cmNlcwotICAgKiBhcmUgYWxsb2Nh
dGVkIGF0IHRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCi0gICAqLwotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgZHJhd1JnYihpbnQgdGV4dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJp
eCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgIGludCB2aWV3cG9ydFgs
IGludCB2aWV3cG9ydFksIGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpIHsK
LSAgICBwcmVwYXJlU2hhZGVyKFJHQl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HLCB0ZXhNYXRyaXgp
OwotICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICBH
TEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsKLSAg
ICBkcmF3UmVjdGFuZ2xlKHZpZXdwb3J0WCwgdmlld3BvcnRZLCB2aWV3cG9ydFdpZHRoLCB2aWV3
cG9ydEhlaWdodCk7Ci0gICAgLy8gVW5iaW5kIHRoZSB0ZXh0dXJlIGFzIGEgcHJlY2F1dGlvbi4K
LSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCk7Ci0gIH0K
LQotICAvKioKLSAgICogRHJhdyBhIFlVViBmcmFtZSB3aXRoIHNwZWNpZmllZCB0ZXh0dXJlIHRy
YW5zZm9ybWF0aW9uIG1hdHJpeC4gUmVxdWlyZWQgcmVzb3VyY2VzIGFyZQotICAgKiBhbGxvY2F0
ZWQgYXQgdGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KLSAgICovCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBkcmF3WXV2KGludFtdIHl1dlRleHR1cmVzLCBmbG9hdFtdIHRleE1h
dHJpeCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgIGludCB2aWV3cG9y
dFgsIGludCB2aWV3cG9ydFksIGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQp
IHsKLSAgICBwcmVwYXJlU2hhZGVyKFlVVl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HLCB0ZXhNYXRy
aXgpOwotICAgIC8vIEJpbmQgdGhlIHRleHR1cmVzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJF
MCArIGkpOwotICAgICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQs
IHl1dlRleHR1cmVzW2ldKTsKLSAgICB9Ci0gICAgZHJhd1JlY3RhbmdsZSh2aWV3cG9ydFgsIHZp
ZXdwb3J0WSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOwotICAgIC8vIFVuYmluZCB0
aGUgdGV4dHVyZXMgYXMgYSBwcmVjYXV0aW9uLi4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7
ICsraSkgewotICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTAg
KyBpKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCAw
KTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZHJhd1JlY3RhbmdsZShpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIC8vIERyYXcgcXVhZC4KLSAgICBHTEVT
MjAuZ2xWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBHTEVTMjAuZ2xEcmF3QXJy
YXlzKEdMRVMyMC5HTF9UUklBTkdMRV9TVFJJUCwgMCwgNCk7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgcHJlcGFyZVNoYWRlcihTdHJpbmcgZnJhZ21lbnRTaGFkZXIsIGZsb2F0W10gdGV4TWF0cml4
KSB7Ci0gICAgZmluYWwgU2hhZGVyIHNoYWRlcjsKLSAgICBpZiAoc2hhZGVycy5jb250YWluc0tl
eShmcmFnbWVudFNoYWRlcikpIHsKLSAgICAgIHNoYWRlciA9IHNoYWRlcnMuZ2V0KGZyYWdtZW50
U2hhZGVyKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gTGF6eSBhbGxvY2F0aW9uLgotICAgICAg
c2hhZGVyID0gbmV3IFNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgICBzaGFkZXJzLnB1dChm
cmFnbWVudFNoYWRlciwgc2hhZGVyKTsKLSAgICAgIHNoYWRlci5nbFNoYWRlci51c2VQcm9ncmFt
KCk7Ci0gICAgICAvLyBJbml0aWFsaXplIGZyYWdtZW50IHNoYWRlciB1bmlmb3JtIHZhbHVlcy4K
LSAgICAgIGlmIChmcmFnbWVudFNoYWRlciA9PSBZVVZfRlJBR01FTlRfU0hBREVSX1NUUklORykg
ewotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdsU2hhZGVyLmdldFVuaWZvcm1M
b2NhdGlvbigieV90ZXgiKSwgMCk7Ci0gICAgICAgIEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIu
Z2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ1X3RleCIpLCAxKTsKLSAgICAgICAgR0xFUzIw
LmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oInZfdGV4Iiks
IDIpOwotICAgICAgfSBlbHNlIGlmIChmcmFnbWVudFNoYWRlciA9PSBSR0JfRlJBR01FTlRfU0hB
REVSX1NUUklORykgewotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdsU2hhZGVy
LmdldFVuaWZvcm1Mb2NhdGlvbigicmdiX3RleCIpLCAwKTsKLSAgICAgIH0gZWxzZSBpZiAoZnJh
Z21lbnRTaGFkZXIgPT0gT0VTX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcpIHsKLSAgICAgICAgR0xF
UzIwLmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oIm9lc190
ZXgiKSwgMCk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJVbmtub3duIGZyYWdtZW50IHNoYWRlcjogIiArIGZyYWdtZW50U2hhZGVyKTsK
LSAgICAgIH0KLSAgICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiSW5pdGlhbGl6ZSBmcmFn
bWVudCBzaGFkZXIgdW5pZm9ybSB2YWx1ZXMuIik7Ci0gICAgICAvLyBJbml0aWFsaXplIHZlcnRl
eCBzaGFkZXIgYXR0cmlidXRlcy4KLSAgICAgIHNoYWRlci5nbFNoYWRlci5zZXRWZXJ0ZXhBdHRy
aWJBcnJheSgiaW5fcG9zIiwgMiwgRlVMTF9SRUNUQU5HTEVfQlVGKTsKLSAgICAgIHNoYWRlci5n
bFNoYWRlci5zZXRWZXJ0ZXhBdHRyaWJBcnJheSgiaW5fdGMiLCAyLCBGVUxMX1JFQ1RBTkdMRV9U
RVhfQlVGKTsKLSAgICB9Ci0gICAgc2hhZGVyLmdsU2hhZGVyLnVzZVByb2dyYW0oKTsKLSAgICAv
LyBDb3B5IHRoZSB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCBvdmVyLgotICAgIEdMRVMy
MC5nbFVuaWZvcm1NYXRyaXg0ZnYoc2hhZGVyLnRleE1hdHJpeExvY2F0aW9uLCAxLCBmYWxzZSwg
dGV4TWF0cml4LCAwKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWxlYXNlIGFsbCBHTEVTIHJlc291
cmNlcy4gVGhpcyBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5LCBvdGhlcndpc2UgdGhlIHJlc291
cmNlcyBhcmUgbGVha2VkLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVh
c2UoKSB7Ci0gICAgZm9yIChTaGFkZXIgc2hhZGVyIDogc2hhZGVycy52YWx1ZXMoKSkgewotICAg
ICAgc2hhZGVyLmdsU2hhZGVyLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgc2hhZGVycy5jbGVhcigp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsU2hhZGVyLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFNoYWRlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL0dsU2hhZGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjEg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotCi1pbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7
Ci0KLS8vIEhlbHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgT3BlbkdMIHNoYWRlcnMgYW5kIHNoYWRl
ciBwcm9ncmFtcy4KLXB1YmxpYyBjbGFzcyBHbFNoYWRlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZyBUQUcgPSAiR2xTaGFkZXIiOwotCi0gIHByaXZhdGUgc3RhdGljIGludCBjb21w
aWxlU2hhZGVyKGludCBzaGFkZXJUeXBlLCBTdHJpbmcgc291cmNlKSB7Ci0gICAgZmluYWwgaW50
IHNoYWRlciA9IEdMRVMyMC5nbENyZWF0ZVNoYWRlcihzaGFkZXJUeXBlKTsKLSAgICBpZiAoc2hh
ZGVyID09IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnbENyZWF0ZVNo
YWRlcigpIGZhaWxlZC4gR0xFUzIwIGVycm9yOiAiICsgR0xFUzIwLmdsR2V0RXJyb3IoKSk7Ci0g
ICAgfQotICAgIEdMRVMyMC5nbFNoYWRlclNvdXJjZShzaGFkZXIsIHNvdXJjZSk7Ci0gICAgR0xF
UzIwLmdsQ29tcGlsZVNoYWRlcihzaGFkZXIpOwotICAgIGludFtdIGNvbXBpbGVTdGF0dXMgPSBu
ZXcgaW50W10ge0dMRVMyMC5HTF9GQUxTRX07Ci0gICAgR0xFUzIwLmdsR2V0U2hhZGVyaXYoc2hh
ZGVyLCBHTEVTMjAuR0xfQ09NUElMRV9TVEFUVVMsIGNvbXBpbGVTdGF0dXMsIDApOwotICAgIGlm
IChjb21waWxlU3RhdHVzWzBdICE9IEdMRVMyMC5HTF9UUlVFKSB7Ci0gICAgICBMb2dnaW5nLmUo
Ci0gICAgICAgICAgVEFHLCAiQ291bGQgbm90IGNvbXBpbGUgc2hhZGVyICIgKyBzaGFkZXJUeXBl
ICsgIjoiICsgR0xFUzIwLmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTsKLSAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKEdMRVMyMC5nbEdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7
Ci0gICAgfQotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiY29tcGlsZVNoYWRlciIpOwot
ICAgIHJldHVybiBzaGFkZXI7Ci0gIH0KLQotICBwcml2YXRlIGludCBwcm9ncmFtOwotCi0gIHB1
YmxpYyBHbFNoYWRlcihTdHJpbmcgdmVydGV4U291cmNlLCBTdHJpbmcgZnJhZ21lbnRTb3VyY2Up
IHsKLSAgICBmaW5hbCBpbnQgdmVydGV4U2hhZGVyID0gY29tcGlsZVNoYWRlcihHTEVTMjAuR0xf
VkVSVEVYX1NIQURFUiwgdmVydGV4U291cmNlKTsKLSAgICBmaW5hbCBpbnQgZnJhZ21lbnRTaGFk
ZXIgPSBjb21waWxlU2hhZGVyKEdMRVMyMC5HTF9GUkFHTUVOVF9TSEFERVIsIGZyYWdtZW50U291
cmNlKTsKLSAgICBwcm9ncmFtID0gR0xFUzIwLmdsQ3JlYXRlUHJvZ3JhbSgpOwotICAgIGlmIChw
cm9ncmFtID09IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJnbENyZWF0
ZVByb2dyYW0oKSBmYWlsZWQuIEdMRVMyMCBlcnJvcjogIiArIEdMRVMyMC5nbEdldEVycm9yKCkp
OwotICAgIH0KLSAgICBHTEVTMjAuZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVy
KTsKLSAgICBHTEVTMjAuZ2xBdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOwot
ICAgIEdMRVMyMC5nbExpbmtQcm9ncmFtKHByb2dyYW0pOwotICAgIGludFtdIGxpbmtTdGF0dXMg
PSBuZXcgaW50W10ge0dMRVMyMC5HTF9GQUxTRX07Ci0gICAgR0xFUzIwLmdsR2V0UHJvZ3JhbWl2
KHByb2dyYW0sIEdMRVMyMC5HTF9MSU5LX1NUQVRVUywgbGlua1N0YXR1cywgMCk7Ci0gICAgaWYg
KGxpbmtTdGF0dXNbMF0gIT0gR0xFUzIwLkdMX1RSVUUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcs
ICJDb3VsZCBub3QgbGluayBwcm9ncmFtOiAiICsgR0xFUzIwLmdsR2V0UHJvZ3JhbUluZm9Mb2co
cHJvZ3JhbSkpOwotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oR0xFUzIwLmdsR2V0
UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSkpOwotICAgIH0KLSAgICAvLyBBY2NvcmRpbmcgdG8gdGhl
IGRvY3VtZW50YXRpb24gb2YgZ2xMaW5rUHJvZ3JhbSgpOgotICAgIC8vICJBZnRlciB0aGUgbGlu
ayBvcGVyYXRpb24sIGFwcGxpY2F0aW9ucyBhcmUgZnJlZSB0byBtb2RpZnkgYXR0YWNoZWQgc2hh
ZGVyIG9iamVjdHMsIGNvbXBpbGUKLSAgICAvLyBhdHRhY2hlZCBzaGFkZXIgb2JqZWN0cywgZGV0
YWNoIHNoYWRlciBvYmplY3RzLCBkZWxldGUgc2hhZGVyIG9iamVjdHMsIGFuZCBhdHRhY2ggYWRk
aXRpb25hbAotICAgIC8vIHNoYWRlciBvYmplY3RzLiBOb25lIG9mIHRoZXNlIG9wZXJhdGlvbnMg
YWZmZWN0cyB0aGUgaW5mb3JtYXRpb24gbG9nIG9yIHRoZSBwcm9ncmFtIHRoYXQgaXMKLSAgICAv
LyBwYXJ0IG9mIHRoZSBwcm9ncmFtIG9iamVjdC4iCi0gICAgLy8gQnV0IGluIHByYWN0aWNlLCBk
ZXRhY2hpbmcgc2hhZGVycyBmcm9tIHRoZSBwcm9ncmFtIHNlZW1zIHRvIGJyZWFrIHNvbWUgZGV2
aWNlcy4gRGVsZXRpbmcgdGhlCi0gICAgLy8gc2hhZGVycyBhcmUgZmluZSBob3dldmVyIC0gaXQg
d2lsbCBkZWxldGUgdGhlbSB3aGVuIHRoZXkgYXJlIG5vIGxvbmdlciBhdHRhY2hlZCB0byBhIHBy
b2dyYW0uCi0gICAgR0xFUzIwLmdsRGVsZXRlU2hhZGVyKHZlcnRleFNoYWRlcik7Ci0gICAgR0xF
UzIwLmdsRGVsZXRlU2hhZGVyKGZyYWdtZW50U2hhZGVyKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dM
RVMyRXJyb3IoIkNyZWF0aW5nIEdsU2hhZGVyIik7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldEF0
dHJpYkxvY2F0aW9uKFN0cmluZyBsYWJlbCkgewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVs
ZWFzZWQiKTsKLSAgICB9Ci0gICAgaW50IGxvY2F0aW9uID0gR0xFUzIwLmdsR2V0QXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgbGFiZWwpOwotICAgIGlmIChsb2NhdGlvbiA8IDApIHsKLSAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3VsZCBub3QgbG9jYXRlICciICsgbGFiZWwgKyAi
JyBpbiBwcm9ncmFtIik7Ci0gICAgfQotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQotCi0gIC8q
KgotICAgKiBFbmFibGUgYW5kIHVwbG9hZCBhIHZlcnRleCBhcnJheSBmb3IgYXR0cmlidXRlIHxs
YWJlbHwuIFRoZSB2ZXJ0ZXggZGF0YSBpcyBzcGVjaWZpZWQgaW4KLSAgICogfGJ1ZmZlcnwgd2l0
aCB8ZGltZW5zaW9ufCBudW1iZXIgb2YgY29tcG9uZW50cyBwZXIgdmVydGV4LgotICAgKi8KLSAg
cHVibGljIHZvaWQgc2V0VmVydGV4QXR0cmliQXJyYXkoU3RyaW5nIGxhYmVsLCBpbnQgZGltZW5z
aW9uLCBGbG9hdEJ1ZmZlciBidWZmZXIpIHsKLSAgICBpZiAocHJvZ3JhbSA9PSAtMSkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJlbGVh
c2VkIik7Ci0gICAgfQotICAgIGludCBsb2NhdGlvbiA9IGdldEF0dHJpYkxvY2F0aW9uKGxhYmVs
KTsKLSAgICBHTEVTMjAuZ2xFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShsb2NhdGlvbik7Ci0gICAg
R0xFUzIwLmdsVmVydGV4QXR0cmliUG9pbnRlcihsb2NhdGlvbiwgZGltZW5zaW9uLCBHTEVTMjAu
R0xfRkxPQVQsIGZhbHNlLCAwLCBidWZmZXIpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJv
cigic2V0VmVydGV4QXR0cmliQXJyYXkiKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0VW5pZm9y
bUxvY2F0aW9uKFN0cmluZyBsYWJlbCkgewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVsZWFz
ZWQiKTsKLSAgICB9Ci0gICAgaW50IGxvY2F0aW9uID0gR0xFUzIwLmdsR2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sIGxhYmVsKTsKLSAgICBpZiAobG9jYXRpb24gPCAwKSB7Ci0gICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSB1bmlmb3JtICciICsgbGFi
ZWwgKyAiJyBpbiBwcm9ncmFtIik7Ci0gICAgfQotICAgIHJldHVybiBsb2NhdGlvbjsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHVzZVByb2dyYW0oKSB7Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsK
LSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiBy
ZWxlYXNlZCIpOwotICAgIH0KLSAgICBHTEVTMjAuZ2xVc2VQcm9ncmFtKHByb2dyYW0pOwotICAg
IEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xVc2VQcm9ncmFtIik7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCByZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJEZWxldGluZyBzaGFkZXIu
Iik7Ci0gICAgLy8gRGVsZXRlIHByb2dyYW0sIGF1dG9tYXRpY2FsbHkgZGV0YWNoaW5nIGFueSBz
aGFkZXJzIGZyb20gaXQuCi0gICAgaWYgKHByb2dyYW0gIT0gLTEpIHsKLSAgICAgIEdMRVMyMC5n
bERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgICBwcm9ncmFtID0gLTE7Ci0gICAgfQotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsVGV4dHVyZUZyYW1lQnVmZmVyLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFRleHR1cmVGcmFtZUJ1ZmZlci5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsVGV4dHVyZUZyYW1lQnVmZmVy
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwot
Ci0vKioKLSAqIEhlbHBlciBjbGFzcyBmb3IgaGFuZGxpbmcgT3BlbkdMIGZyYW1lYnVmZmVyIHdp
dGggb25seSBjb2xvciBhdHRhY2htZW50IGFuZCBubyBkZXB0aCBvciBzdGVuY2lsCi0gKiBidWZm
ZXIuIEludGVuZGVkIGZvciBzaW1wbGUgdGFza3Mgc3VjaCBhcyB0ZXh0dXJlIGNvcHksIHRleHR1
cmUgZG93bnNjYWxpbmcsIGFuZCB0ZXh0dXJlIGNvbG9yCi0gKiBjb252ZXJzaW9uLgotICovCi0v
LyBUT0RPKG1hZ2plZCk6IEFkZCB1bml0dGVzdHMgZm9yIHRoaXMgY2xhc3MuCi1wdWJsaWMgY2xh
c3MgR2xUZXh0dXJlRnJhbWVCdWZmZXIgewotICBwcml2YXRlIGZpbmFsIGludCBmcmFtZUJ1ZmZl
cklkOwotICBwcml2YXRlIGZpbmFsIGludCB0ZXh0dXJlSWQ7Ci0gIHByaXZhdGUgZmluYWwgaW50
IHBpeGVsRm9ybWF0OwotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0
OwotCi0gIC8qKgotICAgKiBHZW5lcmF0ZSB0ZXh0dXJlIGFuZCBmcmFtZWJ1ZmZlciByZXNvdXJj
ZXMuIEFuIEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3VycmVudCB0aHJlYWQKLSAg
ICogd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIFRoZSBmcmFtZWJ1ZmZlciBpcyBub3QgY29t
cGxldGUgdW50aWwgc2V0U2l6ZSgpIGlzIGNhbGxlZC4KLSAgICovCi0gIHB1YmxpYyBHbFRleHR1
cmVGcmFtZUJ1ZmZlcihpbnQgcGl4ZWxGb3JtYXQpIHsKLSAgICBzd2l0Y2ggKHBpeGVsRm9ybWF0
KSB7Ci0gICAgICBjYXNlIEdMRVMyMC5HTF9MVU1JTkFOQ0U6Ci0gICAgICBjYXNlIEdMRVMyMC5H
TF9SR0I6Ci0gICAgICBjYXNlIEdMRVMyMC5HTF9SR0JBOgotICAgICAgICB0aGlzLnBpeGVsRm9y
bWF0ID0gcGl4ZWxGb3JtYXQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBwaXhlbCBmb3Jt
YXQ6ICIgKyBwaXhlbEZvcm1hdCk7Ci0gICAgfQotCi0gICAgdGV4dHVyZUlkID0gR2xVdGlsLmdl
bmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgdGhpcy53aWR0aCA9IDA7
Ci0gICAgdGhpcy5oZWlnaHQgPSAwOwotCi0gICAgLy8gQ3JlYXRlIGZyYW1lYnVmZmVyIG9iamVj
dCBhbmQgYmluZCBpdC4KLSAgICBmaW5hbCBpbnQgZnJhbWVCdWZmZXJzW10gPSBuZXcgaW50WzFd
OwotICAgIEdMRVMyMC5nbEdlbkZyYW1lYnVmZmVycygxLCBmcmFtZUJ1ZmZlcnMsIDApOwotICAg
IGZyYW1lQnVmZmVySWQgPSBmcmFtZUJ1ZmZlcnNbMF07Ci0gICAgR0xFUzIwLmdsQmluZEZyYW1l
YnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgZnJhbWVCdWZmZXJJZCk7Ci0gICAgR2xVdGls
LmNoZWNrTm9HTEVTMkVycm9yKCJHZW5lcmF0ZSBmcmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gQXR0
YWNoIHRoZSB0ZXh0dXJlIHRvIHRoZSBmcmFtZWJ1ZmZlciBhcyBjb2xvciBhdHRhY2htZW50Lgot
ICAgIEdMRVMyMC5nbEZyYW1lYnVmZmVyVGV4dHVyZTJEKAotICAgICAgICBHTEVTMjAuR0xfRlJB
TUVCVUZGRVIsIEdMRVMyMC5HTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xFUzIwLkdMX1RFWFRVUkVf
MkQsIHRleHR1cmVJZCwgMCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJBdHRhY2gg
dGV4dHVyZSB0byBmcmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gUmVzdG9yZSBub3JtYWwgZnJhbWVi
dWZmZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZF
UiwgMCk7Ci0gIH0KLQotICAvKioKLSAgICogKFJlKWFsbG9jYXRlIHRleHR1cmUuIFdpbGwgZG8g
bm90aGluZyBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXF1YWxzIHRoZSBjdXJyZW50IHNpemUuIEFu
Ci0gICAqIEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3VycmVudCB0aHJlYWQgd2hl
biBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uIE11c3QgYmUgY2FsbGVkIGF0Ci0gICAqIGxlYXN0IG9u
Y2UgYmVmb3JlIHVzaW5nIHRoZSBmcmFtZWJ1ZmZlci4gTWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0
aW1lcyB0byBjaGFuZ2Ugc2l6ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFNpemUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgaWYgKHdpZHRoID09IDAgfHwgaGVpZ2h0ID09IDApIHsK
LSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc2l6ZTog
IiArIHdpZHRoICsgIngiICsgaGVpZ2h0KTsKLSAgICB9Ci0gICAgaWYgKHdpZHRoID09IHRoaXMu
d2lkdGggJiYgaGVpZ2h0ID09IHRoaXMuaGVpZ2h0KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLQotICAg
IC8vIEJpbmQgb3VyIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihH
TEVTMjAuR0xfRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVySWQpOwotICAgIEdsVXRpbC5jaGVja05v
R0xFUzJFcnJvcigiZ2xCaW5kRnJhbWVidWZmZXIiKTsKLQotICAgIC8vIEFsbG9jYXRlIHRleHR1
cmUuCi0gICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAg
IEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwot
ICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDAsIHBpeGVsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBwaXhlbEZvcm1hdCwKLSAgICAgICAgR0xFUzIwLkdMX1VO
U0lHTkVEX0JZVEUsIG51bGwpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB0aGUgZnJhbWVidWZmZXIg
aXMgaW4gYSBnb29kIHN0YXRlLgotICAgIGZpbmFsIGludCBzdGF0dXMgPSBHTEVTMjAuZ2xDaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdMRVMyMC5HTF9GUkFNRUJVRkZFUik7Ci0gICAgaWYgKHN0YXR1
cyAhPSBHTEVTMjAuR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24oIkZyYW1lYnVmZmVyIG5vdCBjb21wbGV0ZSwgc3RhdHVzOiAi
ICsgc3RhdHVzKTsKLSAgICB9Ci0KLSAgICAvLyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4K
LSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsK
LSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCk7Ci0gIH0K
LQotICBwdWJsaWMgaW50IGdldFdpZHRoKCkgewotICAgIHJldHVybiB3aWR0aDsKLSAgfQotCi0g
IHB1YmxpYyBpbnQgZ2V0SGVpZ2h0KCkgewotICAgIHJldHVybiBoZWlnaHQ7Ci0gIH0KLQotICBw
dWJsaWMgaW50IGdldEZyYW1lQnVmZmVySWQoKSB7Ci0gICAgcmV0dXJuIGZyYW1lQnVmZmVySWQ7
Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFRleHR1cmVJZCgpIHsKLSAgICByZXR1cm4gdGV4dHVy
ZUlkOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgdGV4dHVyZSBhbmQgZnJhbWVidWZmZXIu
IEFuIEVHTENvbnRleHQgbXVzdCBiZSBib3VuZCBvbiB0aGUgY3VycmVudCB0aHJlYWQgd2hlbiBj
YWxsaW5nCi0gICAqIHRoaXMgZnVuY3Rpb24uIFRoaXMgb2JqZWN0IHNob3VsZCBub3QgYmUgdXNl
ZCBhZnRlciB0aGlzIGNhbGwuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAg
IEdMRVMyMC5nbERlbGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7dGV4dHVyZUlkfSwgMCk7Ci0g
ICAgR0xFUzIwLmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsIG5ldyBpbnRbXSB7ZnJhbWVCdWZmZXJJ
ZH0sIDApOwotICAgIHdpZHRoID0gMDsKLSAgICBoZWlnaHQgPSAwOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0dsVXRpbC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvR2xVdGlsLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xV
dGlsLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7
Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkJ5dGVPcmRl
cjsKLWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLQotLyoqCi0gKiBTb21lIE9wZW5HTCBz
dGF0aWMgdXRpbGl0eSBmdW5jdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBHbFV0aWwgewotICBw
cml2YXRlIEdsVXRpbCgpIHt9Ci0KLSAgLy8gQXNzZXJ0IHRoYXQgbm8gT3BlbkdMIEVTIDIuMCBl
cnJvciBoYXMgYmVlbiByYWlzZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja05vR0xFUzJF
cnJvcihTdHJpbmcgbXNnKSB7Ci0gICAgaW50IGVycm9yID0gR0xFUzIwLmdsR2V0RXJyb3IoKTsK
LSAgICBpZiAoZXJyb3IgIT0gR0xFUzIwLkdMX05PX0VSUk9SKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbihtc2cgKyAiOiBHTEVTMjAgZXJyb3I6ICIgKyBlcnJvcik7Ci0gICAg
fQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBGbG9hdEJ1ZmZlciBjcmVhdGVGbG9hdEJ1ZmZlcihm
bG9hdFtdIGNvb3JkcykgewotICAgIC8vIEFsbG9jYXRlIGEgZGlyZWN0IEJ5dGVCdWZmZXIsIHVz
aW5nIDQgYnl0ZXMgcGVyIGZsb2F0LCBhbmQgY29weSBjb29yZHMgaW50byBpdC4KLSAgICBCeXRl
QnVmZmVyIGJiID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChjb29yZHMubGVuZ3RoICogNCk7
Ci0gICAgYmIub3JkZXIoQnl0ZU9yZGVyLm5hdGl2ZU9yZGVyKCkpOwotICAgIEZsb2F0QnVmZmVy
IGZiID0gYmIuYXNGbG9hdEJ1ZmZlcigpOwotICAgIGZiLnB1dChjb29yZHMpOwotICAgIGZiLnBv
c2l0aW9uKDApOwotICAgIHJldHVybiBmYjsKLSAgfQotCi0gIC8qKgotICAgKiBHZW5lcmF0ZSB0
ZXh0dXJlIHdpdGggc3RhbmRhcmQgcGFyYW1ldGVycy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMg
aW50IGdlbmVyYXRlVGV4dHVyZShpbnQgdGFyZ2V0KSB7Ci0gICAgZmluYWwgaW50IHRleHR1cmVB
cnJheVtdID0gbmV3IGludFsxXTsKLSAgICBHTEVTMjAuZ2xHZW5UZXh0dXJlcygxLCB0ZXh0dXJl
QXJyYXksIDApOwotICAgIGZpbmFsIGludCB0ZXh0dXJlSWQgPSB0ZXh0dXJlQXJyYXlbMF07Ci0g
ICAgR0xFUzIwLmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlSWQpOwotICAgIEdMRVMyMC5n
bFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAuR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTEVT
MjAuR0xfTElORUFSKTsKLSAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xFUzIw
LkdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xFUzIwLkdMX0xJTkVBUik7Ci0gICAgR0xFUzIwLmds
VGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMRVMyMC5HTF9URVhUVVJFX1dSQVBfUywgR0xFUzIwLkdM
X0NMQU1QX1RPX0VER0UpOwotICAgIEdMRVMyMC5nbFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVT
MjAuR0xfVEVYVFVSRV9XUkFQX1QsIEdMRVMyMC5HTF9DTEFNUF9UT19FREdFKTsKLSAgICBjaGVj
a05vR0xFUzJFcnJvcigiZ2VuZXJhdGVUZXh0dXJlIik7Ci0gICAgcmV0dXJuIHRleHR1cmVJZDsK
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ljZUNhbmRpZGF0ZS5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ljZUNhbmRpZGF0ZS5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi0vKioKLSAqIFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIElDRSBDYW5kaWRhdGUsIG1p
cnJvcmluZwotICoge0Bjb2RlIEljZUNhbmRpZGF0ZUludGVyZmFjZX0gaW4gdGhlIEMrKyBBUEku
Ci0gKi8KLXB1YmxpYyBjbGFzcyBJY2VDYW5kaWRhdGUgewotICBwdWJsaWMgZmluYWwgU3RyaW5n
IHNkcE1pZDsKLSAgcHVibGljIGZpbmFsIGludCBzZHBNTGluZUluZGV4OwotICBwdWJsaWMgZmlu
YWwgU3RyaW5nIHNkcDsKLQotICBwdWJsaWMgSWNlQ2FuZGlkYXRlKFN0cmluZyBzZHBNaWQsIGlu
dCBzZHBNTGluZUluZGV4LCBTdHJpbmcgc2RwKSB7Ci0gICAgdGhpcy5zZHBNaWQgPSBzZHBNaWQ7
Ci0gICAgdGhpcy5zZHBNTGluZUluZGV4ID0gc2RwTUxpbmVJbmRleDsKLSAgICB0aGlzLnNkcCA9
IHNkcDsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuIHNk
cE1pZCArICI6IiArIHNkcE1MaW5lSW5kZXggKyAiOiIgKyBzZHA7Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDcxMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWM7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjSW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1l
ZGlhQ29kZWNJbmZvLkNvZGVjQ2FwYWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVk
aWFDb2RlY0xpc3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKLWltcG9ydCBh
bmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQg
YW5kcm9pZC52aWV3LlN1cmZhY2U7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1w
b3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQg
amF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLlF1ZXVlOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGlt
ZVVuaXQ7Ci0KLS8vIEphdmEtc2lkZSBvZiBwZWVyY29ubmVjdGlvbl9qbmkuY2M6TWVkaWFDb2Rl
Y1ZpZGVvRGVjb2Rlci4KLS8vIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWls
IG9mIHRoZSBKYXZhIFBlZXJDb25uZWN0aW9uIEFQSS4KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXBy
ZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciB7Ci0gIC8vIFRo
aXMgY2xhc3MgaXMgY29uc3RydWN0ZWQsIG9wZXJhdGVkLCBhbmQgZGVzdHJveWVkIGJ5IGl0cyBD
KysgaW5jYXJuYXRpb24sCi0gIC8vIHNvIHRoZSBjbGFzcyBhbmQgaXRzIG1ldGhvZHMgaGF2ZSBu
b24tcHVibGljIHZpc2liaWxpdHkuICBUaGUgQVBJIHRoaXMKLSAgLy8gY2xhc3MgZXhwb3NlcyBh
aW1zIHRvIG1pbWljIHRoZSB3ZWJydGM6OlZpZGVvRGVjb2RlciBBUEkgYXMgY2xvc2VseSBhcwot
ICAvLyBwb3NzaWJseSB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHRyYW5zbGF0aW9uIHdvcmsg
bmVjZXNzYXJ5LgotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFD
b2RlY1ZpZGVvRGVjb2RlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgTUFYX0RFQ09E
RV9USU1FX01TID0gMjAwOwotCi0gIC8vIFRyYWNrcyB3ZWJydGM6OlZpZGVvQ29kZWNUeXBlLgot
ICBwdWJsaWMgZW51bSBWaWRlb0NvZGVjVHlwZSB7IFZJREVPX0NPREVDX1ZQOCwgVklERU9fQ09E
RUNfVlA5LCBWSURFT19DT0RFQ19IMjY0IH0KLQotICAvLyBUaW1lb3V0IGZvciBpbnB1dCBidWZm
ZXIgZGVxdWV1ZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFUVVFVUVfSU5QVVRfVElN
RU9VVCA9IDUwMDAwMDsKLSAgLy8gVGltZW91dCBmb3IgY29kZWMgcmVsZWFzaW5nLgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VUX01TID0gNTAw
MDsKLSAgLy8gTWF4IG51bWJlciBvZiBvdXRwdXQgYnVmZmVycyBxdWV1ZWQgYmVmb3JlIHN0YXJ0
aW5nIHRvIGRyb3AgZGVjb2RlZCBmcmFtZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBN
QVhfUVVFVUVEX09VVFBVVEJVRkZFUlMgPSAzOwotICAvLyBBY3RpdmUgcnVubmluZyBkZWNvZGVy
IGluc3RhbmNlLiBTZXQgaW4gaW5pdERlY29kZSgpIChjYWxsZWQgZnJvbSBuYXRpdmUgY29kZSkK
LSAgLy8gYW5kIHJlc2V0IHRvIG51bGwgaW4gcmVsZWFzZSgpIGNhbGwuCi0gIHByaXZhdGUgc3Rh
dGljIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIgcnVubmluZ0luc3RhbmNlID0gbnVsbDsKLSAgcHJp
dmF0ZSBzdGF0aWMgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxs
YmFjayA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIGludCBjb2RlY0Vycm9ycyA9IDA7Ci0gIC8v
IExpc3Qgb2YgZGlzYWJsZWQgY29kZWMgdHlwZXMgLSBjYW4gYmUgc2V0IGZyb20gYXBwbGljYXRp
b24uCi0gIHByaXZhdGUgc3RhdGljIFNldDxTdHJpbmc+IGh3RGVjb2RlckRpc2FibGVkVHlwZXMg
PSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0KLSAgcHJpdmF0ZSBUaHJlYWQgbWVkaWFDb2RlY1Ro
cmVhZDsKLSAgcHJpdmF0ZSBNZWRpYUNvZGVjIG1lZGlhQ29kZWM7Ci0gIHByaXZhdGUgQnl0ZUJ1
ZmZlcltdIGlucHV0QnVmZmVyczsKLSAgcHJpdmF0ZSBCeXRlQnVmZmVyW10gb3V0cHV0QnVmZmVy
czsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOF9NSU1FX1RZUEUgPSAidmlkZW8v
eC12bmQub24yLnZwOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWUDlfTUlNRV9U
WVBFID0gInZpZGVvL3gtdm5kLm9uMi52cDkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp
bmcgSDI2NF9NSU1FX1RZUEUgPSAidmlkZW8vYXZjIjsKLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQg
SFcgVlA4IGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdXBwb3J0
ZWRWcDhId0NvZGVjUHJlZml4ZXMgPSB7Ci0gICAgICAiT01YLnFjb20uIiwgIk9NWC5OdmlkaWEu
IiwgIk9NWC5FeHlub3MuIiwgIk9NWC5JbnRlbC4ifTsKLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQg
SFcgVlA5IGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdXBwb3J0
ZWRWcDlId0NvZGVjUHJlZml4ZXMgPSB7Ik9NWC5xY29tLiIsICJPTVguRXh5bm9zLiJ9OwotICAv
LyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBILjI2NCBkZWNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nW10gc3VwcG9ydGVkSDI2NEh3Q29kZWNQcmVmaXhlcyA9IHsKLSAgICAgICJP
TVgucWNvbS4iLCAiT01YLkludGVsLiIsICJPTVguRXh5bm9zLiJ9OwotCi0gIC8vIE5WMTIgY29s
b3IgZm9ybWF0IHN1cHBvcnRlZCBieSBRQ09NIGNvZGVjLCBidXQgbm90IGRlY2xhcmVkIGluIE1l
ZGlhQ29kZWMgLQotICAvLyBzZWUgL2hhcmR3YXJlL3Fjb20vbWVkaWEvbW0tY29yZS9pbmMvT01Y
X1FDT01FeHRucy5oCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1B
VFlWVTQyMFBhY2tlZFNlbWlQbGFuYXIzMm00a2EgPSAweDdGQTMwQzAxOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMTZt
NGthID0gMHg3RkEzMEMwMjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01f
Rk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjY0eDMyVGlsZTJtOGthID0gMHg3RkEzMEMwMzsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9STUFUWVVWNDIwUGFja2Vk
U2VtaVBsYW5hcjMybSA9IDB4N0ZBMzBDMDQ7Ci0gIC8vIEFsbG93YWJsZSBjb2xvciBmb3JtYXRz
IHN1cHBvcnRlZCBieSBjb2RlYyAtIGluIG9yZGVyIG9mIHByZWZlcmVuY2UuCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIExpc3Q8SW50ZWdlcj4gc3VwcG9ydGVkQ29sb3JMaXN0ID0gQXJyYXlzLmFz
TGlzdCgKLSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwg
Q29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAgIENv
ZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX1FDT01fRm9ybWF0WVVWNDIwU2VtaVBsYW5hciwKLSAgICAg
IENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjMybTRrYSwgQ09MT1JfUUNP
TV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMTZtNGthLAotICAgICAgQ09MT1JfUUNPTV9G
T1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyNjR4MzJUaWxlMm04a2EsCi0gICAgICBDT0xPUl9R
Q09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0pOwotCi0gIHByaXZhdGUgaW50IGNv
bG9yRm9ybWF0OwotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0Owot
ICBwcml2YXRlIGludCBzdHJpZGU7Ci0gIHByaXZhdGUgaW50IHNsaWNlSGVpZ2h0OwotICBwcml2
YXRlIGJvb2xlYW4gaGFzRGVjb2RlZEZpcnN0RnJhbWU7Ci0gIHByaXZhdGUgZmluYWwgUXVldWU8
VGltZVN0YW1wcz4gZGVjb2RlU3RhcnRUaW1lTXMgPSBuZXcgTGlua2VkTGlzdDxUaW1lU3RhbXBz
PigpOwotICBwcml2YXRlIGJvb2xlYW4gdXNlU3VyZmFjZTsKLQotICAvLyBUaGUgYmVsb3cgdmFy
aWFibGVzIGFyZSBvbmx5IHVzZWQgd2hlbiBkZWNvZGluZyB0byBhIFN1cmZhY2UuCi0gIHByaXZh
dGUgVGV4dHVyZUxpc3RlbmVyIHRleHR1cmVMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBpbnQgZHJvcHBl
ZEZyYW1lczsKLSAgcHJpdmF0ZSBTdXJmYWNlIHN1cmZhY2UgPSBudWxsOwotICBwcml2YXRlIGZp
bmFsIFF1ZXVlPERlY29kZWRPdXRwdXRCdWZmZXI+IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZl
cnMgPQotICAgICAgbmV3IExpbmtlZExpc3Q8RGVjb2RlZE91dHB1dEJ1ZmZlcj4oKTsKLQotICAv
LyBNZWRpYUNvZGVjIGVycm9yIGhhbmRsZXIgLSBpbnZva2VkIHdoZW4gY3JpdGljYWwgZXJyb3Ig
aGFwcGVucyB3aGljaCBtYXkgcHJldmVudAotICAvLyBmdXJ0aGVyIHVzZSBvZiBtZWRpYSBjb2Rl
YyBBUEkuIE5vdyBpdCBtZWFucyB0aGF0IG9uZSBvZiBtZWRpYSBjb2RlYyBpbnN0YW5jZXMKLSAg
Ly8gaXMgaGFuZ2luZyBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIGluIHRoZSBuZXh0IGNhbGwu
Ci0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE1lZGlhQ29kZWNWaWRlb0RlY29kZXJFcnJvckNh
bGxiYWNrIHsKLSAgICB2b2lkIG9uTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckNyaXRpY2FsRXJyb3Io
aW50IGNvZGVjRXJyb3JzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRFcnJvckNh
bGxiYWNrKE1lZGlhQ29kZWNWaWRlb0RlY29kZXJFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2sp
IHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU2V0IGVycm9yIGNhbGxiYWNrIik7Ci0gICAgTWVkaWFD
b2RlY1ZpZGVvRGVjb2Rlci5lcnJvckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjazsKLSAgfQotCi0g
IC8vIEZ1bmN0aW9ucyB0byBkaXNhYmxlIEhXIGRlY29kaW5nIC0gY2FuIGJlIGNhbGxlZCBmcm9t
IGFwcGxpY2F0aW9ucyBmb3IgcGxhdGZvcm1zCi0gIC8vIHdoaWNoIGhhdmUga25vd24gSFcgZGVj
b2RpbmcgcHJvYmxlbXMuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlVnA4SHdDb2RlYygp
IHsKLSAgICBMb2dnaW5nLncoVEFHLCAiVlA4IGRlY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxp
Y2F0aW9uLiIpOwotICAgIGh3RGVjb2RlckRpc2FibGVkVHlwZXMuYWRkKFZQOF9NSU1FX1RZUEUp
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVWcDlId0NvZGVjKCkgewotICAg
IExvZ2dpbmcudyhUQUcsICJWUDkgZGVjb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24u
Iik7Ci0gICAgaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoVlA5X01JTUVfVFlQRSk7Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZUgyNjRId0NvZGVjKCkgewotICAgIExvZ2dp
bmcudyhUQUcsICJILjI2NCBkZWNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsK
LSAgICBod0RlY29kZXJEaXNhYmxlZFR5cGVzLmFkZChIMjY0X01JTUVfVFlQRSk7Ci0gIH0KLQot
ICAvLyBGdW5jdGlvbnMgdG8gcXVlcnkgaWYgSFcgZGVjb2RpbmcgaXMgc3VwcG9ydGVkLgotICBw
dWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDhId1N1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gIWh3
RGVjb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA4X01JTUVfVFlQRSkKLSAgICAgICAgJiYg
KGZpbmREZWNvZGVyKFZQOF9NSU1FX1RZUEUsIHN1cHBvcnRlZFZwOEh3Q29kZWNQcmVmaXhlcykg
IT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDlId1N1cHBvcnRl
ZCgpIHsKLSAgICByZXR1cm4gIWh3RGVjb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA5X01J
TUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmREZWNvZGVyKFZQOV9NSU1FX1RZUEUsIHN1cHBvcnRl
ZFZwOUh3Q29kZWNQcmVmaXhlcykgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJv
b2xlYW4gaXNIMjY0SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0RlY29kZXJEaXNhYmxl
ZFR5cGVzLmNvbnRhaW5zKEgyNjRfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZERlY29kZXIo
SDI2NF9NSU1FX1RZUEUsIHN1cHBvcnRlZEgyNjRId0NvZGVjUHJlZml4ZXMpICE9IG51bGwpOwot
ICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZSgpIHsKLSAgICBpZiAo
cnVubmluZ0luc3RhbmNlICE9IG51bGwgJiYgcnVubmluZ0luc3RhbmNlLm1lZGlhQ29kZWNUaHJl
YWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFjZUVsZW1lbnRbXSBtZWRpYUNvZGVjU3RhY2tU
cmFjZXMgPSBydW5uaW5nSW5zdGFuY2UubWVkaWFDb2RlY1RocmVhZC5nZXRTdGFja1RyYWNlKCk7
Ci0gICAgICBpZiAobWVkaWFDb2RlY1N0YWNrVHJhY2VzLmxlbmd0aCA+IDApIHsKLSAgICAgICAg
TG9nZ2luZy5kKFRBRywgIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIgc3RhY2tzIHRyYWNlOiIpOwot
ICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBtZWRpYUNvZGVjU3Rh
Y2tUcmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRvU3RyaW5n
KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVj
dCBmb3IgZmluZERlY29kZXIoKSBiZWxvdy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVjb2Rl
clByb3BlcnRpZXMgewotICAgIHB1YmxpYyBEZWNvZGVyUHJvcGVydGllcyhTdHJpbmcgY29kZWNO
YW1lLCBpbnQgY29sb3JGb3JtYXQpIHsKLSAgICAgIHRoaXMuY29kZWNOYW1lID0gY29kZWNOYW1l
OwotICAgICAgdGhpcy5jb2xvckZvcm1hdCA9IGNvbG9yRm9ybWF0OwotICAgIH0KLSAgICBwdWJs
aWMgZmluYWwgU3RyaW5nIGNvZGVjTmFtZTsgLy8gT3Blbk1heCBjb21wb25lbnQgbmFtZSBmb3Ig
VlA4IGNvZGVjLgotICAgIHB1YmxpYyBmaW5hbCBpbnQgY29sb3JGb3JtYXQ7IC8vIENvbG9yIGZv
cm1hdCBzdXBwb3J0ZWQgYnkgY29kZWMuCi0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBEZWNvZGVy
UHJvcGVydGllcyBmaW5kRGVjb2RlcihTdHJpbmcgbWltZSwgU3RyaW5nW10gc3VwcG9ydGVkQ29k
ZWNQcmVmaXhlcykgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJT
SU9OX0NPREVTLktJVEtBVCkgewotICAgICAgcmV0dXJuIG51bGw7IC8vIE1lZGlhQ29kZWMuc2V0
UGFyYW1ldGVycyBpcyBtaXNzaW5nLgotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiVHJ5aW5n
IHRvIGZpbmQgSFcgZGVjb2RlciBmb3IgbWltZSAiICsgbWltZSk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0NvdW50KCk7ICsraSkgewotICAgICAgTWVk
aWFDb2RlY0luZm8gaW5mbyA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBpbmZvID0gTWVk
aWFDb2RlY0xpc3QuZ2V0Q29kZWNJbmZvQXQoaSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJn
dW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJp
ZXZlIGRlY29kZXIgY29kZWMgaW5mbyIsIGUpOwotICAgICAgfQotICAgICAgaWYgKGluZm8gPT0g
bnVsbCB8fCBpbmZvLmlzRW5jb2RlcigpKSB7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQot
ICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAgZm9yIChTdHJpbmcgbWltZVR5cGUgOiBp
bmZvLmdldFN1cHBvcnRlZFR5cGVzKCkpIHsKLSAgICAgICAgaWYgKG1pbWVUeXBlLmVxdWFscyht
aW1lKSkgewotICAgICAgICAgIG5hbWUgPSBpbmZvLmdldE5hbWUoKTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewotICAgICAg
ICBjb250aW51ZTsgLy8gTm8gSFcgc3VwcG9ydCBpbiB0aGlzIGNvZGVjOyB0cnkgdGhlIG5leHQg
b25lLgotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIkZvdW5kIGNhbmRpZGF0ZSBkZWNv
ZGVyICIgKyBuYW1lKTsKLQotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBzdXBwb3J0ZWQgZGVj
b2Rlci4KLSAgICAgIGJvb2xlYW4gc3VwcG9ydGVkQ29kZWMgPSBmYWxzZTsKLSAgICAgIGZvciAo
U3RyaW5nIGNvZGVjUHJlZml4IDogc3VwcG9ydGVkQ29kZWNQcmVmaXhlcykgewotICAgICAgICBp
ZiAobmFtZS5zdGFydHNXaXRoKGNvZGVjUHJlZml4KSkgewotICAgICAgICAgIHN1cHBvcnRlZENv
ZGVjID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAg
aWYgKCFzdXBwb3J0ZWRDb2RlYykgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAg
ICAgLy8gQ2hlY2sgaWYgY29kZWMgc3VwcG9ydHMgZWl0aGVyIHl1djQyMCBvciBudjEyLgotICAg
ICAgQ29kZWNDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAgICAg
Y2FwYWJpbGl0aWVzID0gaW5mby5nZXRDYXBhYmlsaXRpZXNGb3JUeXBlKG1pbWUpOwotICAgICAg
fSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5l
KFRBRywgIkNhbm5vdCByZXRyaWV2ZSBkZWNvZGVyIGNhcGFiaWxpdGllcyIsIGUpOwotICAgICAg
ICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGZvciAoaW50IGNvbG9yRm9ybWF0IDogY2FwYWJp
bGl0aWVzLmNvbG9yRm9ybWF0cykgewotICAgICAgICBMb2dnaW5nLnYoVEFHLCAiICAgQ29sb3I6
IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoY29sb3JGb3JtYXQpKTsKLSAgICAgIH0KLSAgICAg
IGZvciAoaW50IHN1cHBvcnRlZENvbG9yRm9ybWF0IDogc3VwcG9ydGVkQ29sb3JMaXN0KSB7Ci0g
ICAgICAgIGZvciAoaW50IGNvZGVjQ29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3Jt
YXRzKSB7Ci0gICAgICAgICAgaWYgKGNvZGVjQ29sb3JGb3JtYXQgPT0gc3VwcG9ydGVkQ29sb3JG
b3JtYXQpIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIHN1cHBvcnRlZCBIVyBkZWNvZGVyLgotICAg
ICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkZvdW5kIHRhcmdldCBkZWNvZGVyICIgKyBuYW1lICsg
Ii4gQ29sb3I6IDB4IgotICAgICAgICAgICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmco
Y29kZWNDb2xvckZvcm1hdCkpOwotICAgICAgICAgICAgcmV0dXJuIG5ldyBEZWNvZGVyUHJvcGVy
dGllcyhuYW1lLCBjb2RlY0NvbG9yRm9ybWF0KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIk5vIEhXIGRlY29kZXIgZm91bmQgZm9y
IG1pbWUgIiArIG1pbWUpOwotICAgIHJldHVybiBudWxsOyAvLyBObyBIVyBkZWNvZGVyLgotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCkgdGhyb3dzIElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbiB7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQuZ2V0SWQoKSAhPSBU
aHJlYWQuY3VycmVudFRocmVhZCgpLmdldElkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
U3RhdGVFeGNlcHRpb24oIk1lZGlhQ29kZWNWaWRlb0RlY29kZXIgcHJldmlvdXNseSBvcGVyYXRl
ZCBvbiAiCi0gICAgICAgICAgKyBtZWRpYUNvZGVjVGhyZWFkICsgIiBidXQgaXMgbm93IGNhbGxl
ZCBvbiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUGFz
cyBudWxsIGluIHxzdXJmYWNlVGV4dHVyZUhlbHBlcnwgdG8gY29uZmlndXJlIHRoZSBjb2RlYyBm
b3IgQnl0ZUJ1ZmZlciBvdXRwdXQuCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0RGVjb2RlKAotICAg
ICAgVmlkZW9Db2RlY1R5cGUgdHlwZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBTdXJmYWNlVGV4
dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcikgewotICAgIGlmIChtZWRpYUNvZGVjVGhy
ZWFkICE9IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJpbml0RGVj
b2RlOiBGb3Jnb3QgdG8gcmVsZWFzZSgpPyIpOwotICAgIH0KLQotICAgIFN0cmluZyBtaW1lID0g
bnVsbDsKLSAgICB1c2VTdXJmYWNlID0gKHN1cmZhY2VUZXh0dXJlSGVscGVyICE9IG51bGwpOwot
ICAgIFN0cmluZ1tdIHN1cHBvcnRlZENvZGVjUHJlZml4ZXMgPSBudWxsOwotICAgIGlmICh0eXBl
ID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCkgewotICAgICAgbWltZSA9IFZQOF9N
SU1FX1RZUEU7Ci0gICAgICBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzID0gc3VwcG9ydGVkVnA4SHdD
b2RlY1ByZWZpeGVzOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURF
T19DT0RFQ19WUDkpIHsKLSAgICAgIG1pbWUgPSBWUDlfTUlNRV9UWVBFOwotICAgICAgc3VwcG9y
dGVkQ29kZWNQcmVmaXhlcyA9IHN1cHBvcnRlZFZwOUh3Q29kZWNQcmVmaXhlczsKLSAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfSDI2NCkgewotICAgICAg
bWltZSA9IEgyNjRfTUlNRV9UWVBFOwotICAgICAgc3VwcG9ydGVkQ29kZWNQcmVmaXhlcyA9IHN1
cHBvcnRlZEgyNjRId0NvZGVjUHJlZml4ZXM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKCJpbml0RGVjb2RlOiBOb24tc3VwcG9ydGVkIGNvZGVjICIgKyB0
eXBlKTsKLSAgICB9Ci0gICAgRGVjb2RlclByb3BlcnRpZXMgcHJvcGVydGllcyA9IGZpbmREZWNv
ZGVyKG1pbWUsIHN1cHBvcnRlZENvZGVjUHJlZml4ZXMpOwotICAgIGlmIChwcm9wZXJ0aWVzID09
IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW5ub3QgZmluZCBI
VyBkZWNvZGVyIGZvciAiICsgdHlwZSk7Ci0gICAgfQotCi0gICAgTG9nZ2luZy5kKFRBRywgIkph
dmEgaW5pdERlY29kZTogIiArIHR5cGUgKyAiIDogIiArIHdpZHRoICsgIiB4ICIgKyBoZWlnaHQg
KyAiLiBDb2xvcjogMHgiCi0gICAgICAgICAgICArIEludGVnZXIudG9IZXhTdHJpbmcocHJvcGVy
dGllcy5jb2xvckZvcm1hdCkgKyAiLiBVc2UgU3VyZmFjZTogIiArIHVzZVN1cmZhY2UpOwotCi0g
ICAgcnVubmluZ0luc3RhbmNlID0gdGhpczsgLy8gRGVjb2RlciBpcyBub3cgcnVubmluZyBhbmQg
Y2FuIGJlIHF1ZXJpZWQgZm9yIHN0YWNrIHRyYWNlcy4KLSAgICBtZWRpYUNvZGVjVGhyZWFkID0g
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgdGhpcy53aWR0aCA9IHdp
ZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICBzdHJpZGUgPSB3aWR0aDsK
LSAgICAgIHNsaWNlSGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgICBpZiAodXNlU3VyZmFjZSkgewot
ICAgICAgICB0ZXh0dXJlTGlzdGVuZXIgPSBuZXcgVGV4dHVyZUxpc3RlbmVyKHN1cmZhY2VUZXh0
dXJlSGVscGVyKTsKLSAgICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHN1cmZhY2VUZXh0dXJl
SGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgICAgfQotCi0gICAgICBNZWRpYUZvcm1h
dCBmb3JtYXQgPSBNZWRpYUZvcm1hdC5jcmVhdGVWaWRlb0Zvcm1hdChtaW1lLCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICAgIGlmICghdXNlU3VyZmFjZSkgewotICAgICAgICBmb3JtYXQuc2V0SW50ZWdl
cihNZWRpYUZvcm1hdC5LRVlfQ09MT1JfRk9STUFULCBwcm9wZXJ0aWVzLmNvbG9yRm9ybWF0KTsK
LSAgICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICIgIEZvcm1hdDogIiArIGZvcm1hdCk7Ci0g
ICAgICBtZWRpYUNvZGVjID0gTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5jcmVhdGVCeUNvZGVjTmFt
ZShwcm9wZXJ0aWVzLmNvZGVjTmFtZSk7Ci0gICAgICBpZiAobWVkaWFDb2RlYyA9PSBudWxsKSB7
Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW4gbm90IGNyZWF0ZSBtZWRpYSBkZWNvZGVyIik7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIG1lZGlhQ29kZWMuY29uZmln
dXJlKGZvcm1hdCwgc3VyZmFjZSwgbnVsbCwgMCk7Ci0gICAgICBtZWRpYUNvZGVjLnN0YXJ0KCk7
Ci0KLSAgICAgIGNvbG9yRm9ybWF0ID0gcHJvcGVydGllcy5jb2xvckZvcm1hdDsKLSAgICAgIG91
dHB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldE91dHB1dEJ1ZmZlcnMoKTsKLSAgICAgIGlucHV0
QnVmZmVycyA9IG1lZGlhQ29kZWMuZ2V0SW5wdXRCdWZmZXJzKCk7Ci0gICAgICBkZWNvZGVTdGFy
dFRpbWVNcy5jbGVhcigpOwotICAgICAgaGFzRGVjb2RlZEZpcnN0RnJhbWUgPSBmYWxzZTsKLSAg
ICAgIGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICAgIGRyb3BwZWRG
cmFtZXMgPSAwOwotICAgICAgTG9nZ2luZy5kKFRBRywKLSAgICAgICAgICAiSW5wdXQgYnVmZmVy
czogIiArIGlucHV0QnVmZmVycy5sZW5ndGggKyAiLiBPdXRwdXQgYnVmZmVyczogIiArIG91dHB1
dEJ1ZmZlcnMubGVuZ3RoKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiaW5pdERlY29kZSBm
YWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXNl
dHMgdGhlIGRlY29kZXIgc28gaXQgY2FuIHN0YXJ0IGRlY29kaW5nIGZyYW1lcyB3aXRoIG5ldyBy
ZXNvbHV0aW9uLgotICAvLyBGbHVzaGVzIE1lZGlhQ29kZWMgYW5kIGNsZWFycyBkZWNvZGVyIG91
dHB1dCBidWZmZXJzLgotICBwcml2YXRlIHZvaWQgcmVzZXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSB7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQgPT0gbnVsbCB8fCBtZWRpYUNvZGVjID09IG51
bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNvcnJlY3QgcmVzZXQg
Y2FsbCBmb3Igbm9uLWluaXRpYWxpemVkIGRlY29kZXIuIik7Ci0gICAgfQotICAgIExvZ2dpbmcu
ZChUQUcsICJKYXZhIHJlc2V0OiAiICsgd2lkdGggKyAiIHggIiArIGhlaWdodCk7Ci0KLSAgICBt
ZWRpYUNvZGVjLmZsdXNoKCk7Ci0KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5o
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVjb2RlU3RhcnRUaW1lTXMuY2xlYXIoKTsKLSAgICBkZXF1
ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLmNsZWFyKCk7Ci0gICAgaGFzRGVjb2RlZEZpcnN0RnJh
bWUgPSBmYWxzZTsKLSAgICBkcm9wcGVkRnJhbWVzID0gMDsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCByZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyLiBU
b3RhbCBudW1iZXIgb2YgZHJvcHBlZCBmcmFtZXM6ICIgKyBkcm9wcGVkRnJhbWVzKTsKLSAgICBj
aGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotCi0gICAgLy8gUnVuIE1lZGlhY29kZWMgc3RvcCgp
IGFuZCByZWxlYXNlKCkgb24gc2VwYXJhdGUgdGhyZWFkIHNpbmNlIHNvbWV0aW1lCi0gICAgLy8g
TWVkaWFjb2RlYy5zdG9wKCkgbWF5IGhhbmcuCi0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggcmVs
ZWFzZURvbmUgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0KLSAgICBSdW5uYWJsZSBydW5NZWRp
YUNvZGVjUmVsZWFzZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyIG9uIHJlbGVhc2UgdGhyZWFkIik7Ci0gICAgICAgICAg
bWVkaWFDb2RlYy5zdG9wKCk7Ci0gICAgICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlKCk7Ci0gICAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZURlY29kZXIgb24gcmVsZWFzZSB0aHJl
YWQgZG9uZSIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgIExv
Z2dpbmcuZShUQUcsICJNZWRpYSBkZWNvZGVyIHJlbGVhc2UgZmFpbGVkIiwgZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmVsZWFzZURvbmUuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAg
ICBuZXcgVGhyZWFkKHJ1bk1lZGlhQ29kZWNSZWxlYXNlKS5zdGFydCgpOwotCi0gICAgaWYgKCFU
aHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShyZWxlYXNlRG9uZSwgTUVESUFfQ09ERUNf
UkVMRUFTRV9USU1FT1VUX01TKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGRlY29k
ZXIgcmVsZWFzZSB0aW1lb3V0Iik7Ci0gICAgICBjb2RlY0Vycm9ycysrOwotICAgICAgaWYgKGVy
cm9yQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW52b2tlIGNv
ZGVjIGVycm9yIGNhbGxiYWNrLiBFcnJvcnM6ICIgKyBjb2RlY0Vycm9ycyk7Ci0gICAgICAgIGVy
cm9yQ2FsbGJhY2sub25NZWRpYUNvZGVjVmlkZW9EZWNvZGVyQ3JpdGljYWxFcnJvcihjb2RlY0Vy
cm9ycyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgbWVkaWFDb2RlYyA9IG51bGw7Ci0gICAgbWVk
aWFDb2RlY1RocmVhZCA9IG51bGw7Ci0gICAgcnVubmluZ0luc3RhbmNlID0gbnVsbDsKLSAgICBp
ZiAodXNlU3VyZmFjZSkgewotICAgICAgc3VyZmFjZS5yZWxlYXNlKCk7Ci0gICAgICBzdXJmYWNl
ID0gbnVsbDsKLSAgICAgIHRleHR1cmVMaXN0ZW5lci5yZWxlYXNlKCk7Ci0gICAgfQotICAgIExv
Z2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyIGRvbmUiKTsKLSAgfQotCi0gIC8vIERl
cXVldWUgYW4gaW5wdXQgYnVmZmVyIGFuZCByZXR1cm4gaXRzIGluZGV4LCAtMSBpZiBubyBpbnB1
dCBidWZmZXIgaXMKLSAgLy8gYXZhaWxhYmxlLCBvciAtMiBpZiB0aGUgY29kZWMgaXMgbm8gbG9u
Z2VyIG9wZXJhdGl2ZS4KLSAgcHJpdmF0ZSBpbnQgZGVxdWV1ZUlucHV0QnVmZmVyKCkgewotICAg
IGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBtZWRp
YUNvZGVjLmRlcXVldWVJbnB1dEJ1ZmZlcihERVFVRVVFX0lOUFVUX1RJTUVPVVQpOwotICAgIH0g
Y2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAi
ZGVxdWV1ZUludHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiAtMjsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gcXVldWVJbnB1dEJ1ZmZlcihpbnQgaW5wdXRCdWZm
ZXJJbmRleCwgaW50IHNpemUsIGxvbmcgcHJlc2VudGF0aW9uVGltZVN0YW1VcywKLSAgICAgIGxv
bmcgdGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0YW1wKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29k
ZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgaW5wdXRCdWZmZXJzW2lucHV0QnVmZmVySW5k
ZXhdLnBvc2l0aW9uKDApOwotICAgICAgaW5wdXRCdWZmZXJzW2lucHV0QnVmZmVySW5kZXhdLmxp
bWl0KHNpemUpOwotICAgICAgZGVjb2RlU3RhcnRUaW1lTXMuYWRkKAotICAgICAgICAgIG5ldyBU
aW1lU3RhbXBzKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpLCB0aW1lU3RhbXBNcywgbnRw
VGltZVN0YW1wKSk7Ci0gICAgICBtZWRpYUNvZGVjLnF1ZXVlSW5wdXRCdWZmZXIoaW5wdXRCdWZm
ZXJJbmRleCwgMCwgc2l6ZSwgcHJlc2VudGF0aW9uVGltZVN0YW1VcywgMCk7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAg
TG9nZ2luZy5lKFRBRywgImRlY29kZSBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUaW1lU3RhbXBzIHsKLSAgICBw
dWJsaWMgVGltZVN0YW1wcyhsb25nIGRlY29kZVN0YXJ0VGltZU1zLCBsb25nIHRpbWVTdGFtcE1z
LCBsb25nIG50cFRpbWVTdGFtcE1zKSB7Ci0gICAgICB0aGlzLmRlY29kZVN0YXJ0VGltZU1zID0g
ZGVjb2RlU3RhcnRUaW1lTXM7Ci0gICAgICB0aGlzLnRpbWVTdGFtcE1zID0gdGltZVN0YW1wTXM7
Ci0gICAgICB0aGlzLm50cFRpbWVTdGFtcE1zID0gbnRwVGltZVN0YW1wTXM7Ci0gICAgfQotICAg
IC8vIFRpbWUgd2hlbiB0aGlzIGZyYW1lIHdhcyBxdWV1ZWQgZm9yIGRlY29kaW5nLgotICAgIHBy
aXZhdGUgZmluYWwgbG9uZyBkZWNvZGVTdGFydFRpbWVNczsKLSAgICAvLyBPbmx5IHVzZWQgZm9y
IGJvb2trZWVwaW5nIGluIEphdmEuIFN0b3JlcyBDKysgaW5wdXRJbWFnZS5fdGltZVN0YW1wIHZh
bHVlIGZvciBpbnB1dCBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgdGltZVN0YW1wTXM7
Ci0gICAgLy8gT25seSB1c2VkIGZvciBib29ra2VlcGluZyBpbiBKYXZhLiBTdG9yZXMgQysrIGlu
cHV0SW1hZ2UubnRwX3RpbWVfbXNfIHZhbHVlIGZvciBpbnB1dCBmcmFtZS4KLSAgICBwcml2YXRl
IGZpbmFsIGxvbmcgbnRwVGltZVN0YW1wTXM7Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZv
ciBkZXF1ZXVlT3V0cHV0QnVmZmVyKCkgYmVsb3cuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIERl
Y29kZWRPdXRwdXRCdWZmZXIgewotICAgIHB1YmxpYyBEZWNvZGVkT3V0cHV0QnVmZmVyKGludCBp
bmRleCwgaW50IG9mZnNldCwgaW50IHNpemUsIGxvbmcgcHJlc2VudGF0aW9uVGltZVN0YW1wTXMs
Ci0gICAgICAgIGxvbmcgdGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0YW1wTXMsIGxvbmcgZGVj
b2RlVGltZSwgbG9uZyBlbmREZWNvZGVUaW1lKSB7Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7
Ci0gICAgICB0aGlzLm9mZnNldCA9IG9mZnNldDsKLSAgICAgIHRoaXMuc2l6ZSA9IHNpemU7Ci0g
ICAgICB0aGlzLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zID0gcHJlc2VudGF0aW9uVGltZVN0YW1w
TXM7Ci0gICAgICB0aGlzLnRpbWVTdGFtcE1zID0gdGltZVN0YW1wTXM7Ci0gICAgICB0aGlzLm50
cFRpbWVTdGFtcE1zID0gbnRwVGltZVN0YW1wTXM7Ci0gICAgICB0aGlzLmRlY29kZVRpbWVNcyA9
IGRlY29kZVRpbWU7Ci0gICAgICB0aGlzLmVuZERlY29kZVRpbWVNcyA9IGVuZERlY29kZVRpbWU7
Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgaW5kZXg7Ci0gICAgcHJpdmF0ZSBmaW5h
bCBpbnQgb2Zmc2V0OwotICAgIHByaXZhdGUgZmluYWwgaW50IHNpemU7Ci0gICAgLy8gUHJlc2Vu
dGF0aW9uIHRpbWVzdGFtcCByZXR1cm5lZCBpbiBkZXF1ZXVlT3V0cHV0QnVmZmVyIGNhbGwuCi0g
ICAgcHJpdmF0ZSBmaW5hbCBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgIC8vIEMr
KyBpbnB1dEltYWdlLl90aW1lU3RhbXAgdmFsdWUgZm9yIG91dHB1dCBmcmFtZS4KLSAgICBwcml2
YXRlIGZpbmFsIGxvbmcgdGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UubnRwX3Rp
bWVfbXNfIHZhbHVlIGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIG50
cFRpbWVTdGFtcE1zOwotICAgIC8vIE51bWJlciBvZiBtcyBpdCB0b29rIHRvIGRlY29kZSB0aGlz
IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBkZWNvZGVUaW1lTXM7Ci0gICAgLy8gU3lz
dGVtIHRpbWUgd2hlbiB0aGlzIGZyYW1lIGRlY29kaW5nIGZpbmlzaGVkLgotICAgIHByaXZhdGUg
ZmluYWwgbG9uZyBlbmREZWNvZGVUaW1lTXM7Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZv
ciBkZXF1ZXVlVGV4dHVyZUJ1ZmZlcigpIGJlbG93LgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBE
ZWNvZGVkVGV4dHVyZUJ1ZmZlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgdGV4dHVyZUlEOwot
ICAgIHByaXZhdGUgZmluYWwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXg7Ci0gICAgLy8gUHJlc2Vu
dGF0aW9uIHRpbWVzdGFtcCByZXR1cm5lZCBpbiBkZXF1ZXVlT3V0cHV0QnVmZmVyIGNhbGwuCi0g
ICAgcHJpdmF0ZSBmaW5hbCBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgIC8vIEMr
KyBpbnB1dEltYWdlLl90aW1lU3RhbXAgdmFsdWUgZm9yIG91dHB1dCBmcmFtZS4KLSAgICBwcml2
YXRlIGZpbmFsIGxvbmcgdGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UubnRwX3Rp
bWVfbXNfIHZhbHVlIGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIG50
cFRpbWVTdGFtcE1zOwotICAgIC8vIE51bWJlciBvZiBtcyBpdCB0b29rIHRvIGRlY29kZSB0aGlz
IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBkZWNvZGVUaW1lTXM7Ci0gICAgLy8gSW50
ZXJ2YWwgZnJvbSB3aGVuIHRoZSBmcmFtZSBmaW5pc2hlZCBkZWNvZGluZyB1bnRpbCB0aGlzIGJ1
ZmZlciBoYXMgYmVlbiBjcmVhdGVkLgotICAgIC8vIFNpbmNlIHRoZXJlIGlzIG9ubHkgb25lIHRl
eHR1cmUsIHRoaXMgaW50ZXJ2YWwgZGVwZW5kIG9uIHRoZSB0aW1lIGZyb20gd2hlbgotICAgIC8v
IGEgZnJhbWUgaXMgZGVjb2RlZCBhbmQgcHJvdmlkZWQgdG8gQysrIGFuZCB1bnRpbCB0aGF0IGZy
YW1lIGlzIHJldHVybmVkIHRvIHRoZSBNZWRpYUNvZGVjCi0gICAgLy8gc28gdGhhdCB0aGUgdGV4
dHVyZSBjYW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXh0IGRlY29kZWQgZnJhbWUuCi0gICAgcHJp
dmF0ZSBmaW5hbCBsb25nIGZyYW1lRGVsYXlNczsKLQotICAgIC8vIEEgRGVjb2RlZFRleHR1cmVC
dWZmZXIgd2l0aCB6ZXJvIHx0ZXh0dXJlSUR8IGhhcyBzcGVjaWFsIG1lYW5pbmcgYW5kIHJlcHJl
c2VudHMgYSBmcmFtZQotICAgIC8vIHRoYXQgd2FzIGRyb3BwZWQuCi0gICAgcHVibGljIERlY29k
ZWRUZXh0dXJlQnVmZmVyKGludCB0ZXh0dXJlSUQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LAot
ICAgICAgICBsb25nIHByZXNlbnRhdGlvblRpbWVTdGFtcE1zLCBsb25nIHRpbWVTdGFtcE1zLCBs
b25nIG50cFRpbWVTdGFtcE1zLCBsb25nIGRlY29kZVRpbWVNcywKLSAgICAgICAgbG9uZyBmcmFt
ZURlbGF5KSB7Ci0gICAgICB0aGlzLnRleHR1cmVJRCA9IHRleHR1cmVJRDsKLSAgICAgIHRoaXMu
dHJhbnNmb3JtTWF0cml4ID0gdHJhbnNmb3JtTWF0cml4OwotICAgICAgdGhpcy5wcmVzZW50YXRp
b25UaW1lU3RhbXBNcyA9IHByZXNlbnRhdGlvblRpbWVTdGFtcE1zOwotICAgICAgdGhpcy50aW1l
U3RhbXBNcyA9IHRpbWVTdGFtcE1zOwotICAgICAgdGhpcy5udHBUaW1lU3RhbXBNcyA9IG50cFRp
bWVTdGFtcE1zOwotICAgICAgdGhpcy5kZWNvZGVUaW1lTXMgPSBkZWNvZGVUaW1lTXM7Ci0gICAg
ICB0aGlzLmZyYW1lRGVsYXlNcyA9IGZyYW1lRGVsYXk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUG9s
bCBiYXNlZCB0ZXh0dXJlIGxpc3RlbmVyLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXh0dXJl
TGlzdGVuZXIKLSAgICAgIGltcGxlbWVudHMgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJl
RnJhbWVBdmFpbGFibGVMaXN0ZW5lciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVy
ZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICAvLyB8bmV3RnJhbWVMb2NrfCBpcyB1
c2VkIHRvIHN5bmNocm9uaXplIGFycml2YWwgb2YgbmV3IGZyYW1lcyB3aXRoIHdhaXQoKS9ub3Rp
ZnlBbGwoKS4KLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCBuZXdGcmFtZUxvY2sgPSBuZXcgT2Jq
ZWN0KCk7Ci0gICAgLy8gfGJ1ZmZlclRvUmVuZGVyfCBpcyBub24tbnVsbCB3aGVuIHdhaXRpbmcg
Zm9yIHRyYW5zaXRpb24gYmV0d2VlbiBhZGRCdWZmZXJUb1JlbmRlcigpIHRvCi0gICAgLy8gb25U
ZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICBwcml2YXRlIERlY29kZWRPdXRwdXRCdWZmZXIg
YnVmZmVyVG9SZW5kZXI7Ci0gICAgcHJpdmF0ZSBEZWNvZGVkVGV4dHVyZUJ1ZmZlciByZW5kZXJl
ZEJ1ZmZlcjsKLQotICAgIHB1YmxpYyBUZXh0dXJlTGlzdGVuZXIoU3VyZmFjZVRleHR1cmVIZWxw
ZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIpIHsKLSAgICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxw
ZXIgPSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0
YXJ0TGlzdGVuaW5nKHRoaXMpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZEJ1ZmZlclRv
UmVuZGVyKERlY29kZWRPdXRwdXRCdWZmZXIgYnVmZmVyKSB7Ci0gICAgICBpZiAoYnVmZmVyVG9S
ZW5kZXIgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiVW5leHBlY3RlZCBhZGRC
dWZmZXJUb1JlbmRlcigpIGNhbGxlZCB3aGlsZSB3YWl0aW5nIGZvciBhIHRleHR1cmUuIik7Ci0g
ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldhaXRpbmcgZm9yIGEgdGV4
dHVyZS4iKTsKLSAgICAgIH0KLSAgICAgIGJ1ZmZlclRvUmVuZGVyID0gYnVmZmVyOwotICAgIH0K
LQotICAgIHB1YmxpYyBib29sZWFuIGlzV2FpdGluZ0ZvclRleHR1cmUoKSB7Ci0gICAgICBzeW5j
aHJvbml6ZWQgKG5ld0ZyYW1lTG9jaykgewotICAgICAgICByZXR1cm4gYnVmZmVyVG9SZW5kZXIg
IT0gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDYWxsYmFjayBmcm9tIHxzdXJmYWNl
VGV4dHVyZUhlbHBlcnwuIE1heSBiZSBjYWxsZWQgb24gYW4gYXJiaXRyYXJ5IHRocmVhZC4KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAg
ICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGlt
ZXN0YW1wTnMpIHsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0gICAgICAg
IGlmIChyZW5kZXJlZEJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKAotICAg
ICAgICAgICAgICBUQUcsICJVbmV4cGVjdGVkIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgY2Fs
bGVkIHdoaWxlIGFscmVhZHkgaG9sZGluZyBhIHRleHR1cmUuIik7Ci0gICAgICAgICAgdGhyb3cg
bmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQWxyZWFkeSBob2xkaW5nIGEgdGV4dHVyZS4iKTsK
LSAgICAgICAgfQotICAgICAgICAvLyB8dGltZXN0YW1wTnN8IGlzIGFsd2F5cyB6ZXJvIG9uIHNv
bWUgQW5kcm9pZCB2ZXJzaW9ucy4KLSAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBuZXcgRGVjb2Rl
ZFRleHR1cmVCdWZmZXIob2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsCi0gICAgICAgICAg
ICBidWZmZXJUb1JlbmRlci5wcmVzZW50YXRpb25UaW1lU3RhbXBNcywgYnVmZmVyVG9SZW5kZXIu
dGltZVN0YW1wTXMsCi0gICAgICAgICAgICBidWZmZXJUb1JlbmRlci5udHBUaW1lU3RhbXBNcywg
YnVmZmVyVG9SZW5kZXIuZGVjb2RlVGltZU1zLAotICAgICAgICAgICAgU3lzdGVtQ2xvY2suZWxh
cHNlZFJlYWx0aW1lKCkgLSBidWZmZXJUb1JlbmRlci5lbmREZWNvZGVUaW1lTXMpOwotICAgICAg
ICBidWZmZXJUb1JlbmRlciA9IG51bGw7Ci0gICAgICAgIG5ld0ZyYW1lTG9jay5ub3RpZnlBbGwo
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBEZXF1ZXVlcyBhbmQgcmV0dXJucyBhIERlY29k
ZWRUZXh0dXJlQnVmZmVyIGlmIGF2YWlsYWJsZSwgb3IgbnVsbCBvdGhlcndpc2UuCi0gICAgcHVi
bGljIERlY29kZWRUZXh0dXJlQnVmZmVyIGRlcXVldWVUZXh0dXJlQnVmZmVyKGludCB0aW1lb3V0
TXMpIHsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0gICAgICAgIGlmIChy
ZW5kZXJlZEJ1ZmZlciA9PSBudWxsICYmIHRpbWVvdXRNcyA+IDAgJiYgaXNXYWl0aW5nRm9yVGV4
dHVyZSgpKSB7Ci0gICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG5ld0ZyYW1lTG9jay53YWl0
KHRpbWVvdXRNcyk7Ci0gICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkg
ewotICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgaW50ZXJydXB0ZWQgc3RhdHVzIGJ5IHJlaW50
ZXJydXB0aW5nIHRoZSB0aHJlYWQuCi0gICAgICAgICAgICBUaHJlYWQuY3VycmVudFRocmVhZCgp
LmludGVycnVwdCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBEZWNvZGVkVGV4
dHVyZUJ1ZmZlciByZXR1cm5lZEJ1ZmZlciA9IHJlbmRlcmVkQnVmZmVyOwotICAgICAgICByZW5k
ZXJlZEJ1ZmZlciA9IG51bGw7Ci0gICAgICAgIHJldHVybiByZXR1cm5lZEJ1ZmZlcjsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgLy8gU3VyZmFj
ZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpIHdpbGwgYmxvY2sgdW50aWwgYW55IG9uVGV4
dHVyZUZyYW1lQXZhaWxhYmxlKCkgaW4KLSAgICAgIC8vIHByb2dyZXNzIGlzIGRvbmUuIFRoZXJl
Zm9yZSwgdGhlIGNhbGwgbXVzdCBiZSBvdXRzaWRlIGFueSBzeW5jaHJvbml6ZWQKLSAgICAgIC8v
IHN0YXRlbWVudCB0aGF0IGlzIGFsc28gdXNlZCBpbiB0aGUgb25UZXh0dXJlRnJhbWVBdmFpbGFi
bGUoKSBhYm92ZSB0byBhdm9pZCBkZWFkbG9ja3MuCi0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKG5ld0ZyYW1lTG9jaykgewot
ICAgICAgICBpZiAocmVuZGVyZWRCdWZmZXIgIT0gbnVsbCkgewotICAgICAgICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgICAgICAgIHJlbmRlcmVkQnVm
ZmVyID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJldHVy
bnMgbnVsbCBpZiBubyBkZWNvZGVkIGJ1ZmZlciBpcyBhdmFpbGFibGUsIGFuZCBvdGhlcndpc2Ug
YSBEZWNvZGVkQnl0ZUJ1ZmZlci4KLSAgLy8gVGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBp
ZiBjYWxsIGlzIG1hZGUgb24gdGhlIHdyb25nIHRocmVhZCwgaWYgY29sb3IgZm9ybWF0IGNoYW5n
ZXMgdG8gYW4KLSAgLy8gdW5zdXBwb3J0ZWQgZm9ybWF0LCBvciBpZiB8bWVkaWFDb2RlY3wgaXMg
bm90IGluIHRoZSBFeGVjdXRpbmcgc3RhdGUuIFRocm93cyBDb2RlY0V4Y2VwdGlvbgotICAvLyB1
cG9uIGNvZGVjIGVycm9yLgotICBwcml2YXRlIERlY29kZWRPdXRwdXRCdWZmZXIgZGVxdWV1ZU91
dHB1dEJ1ZmZlcihpbnQgZGVxdWV1ZVRpbWVvdXRNcykgewotICAgIGNoZWNrT25NZWRpYUNvZGVj
VGhyZWFkKCk7Ci0gICAgaWYgKGRlY29kZVN0YXJ0VGltZU1zLmlzRW1wdHkoKSkgewotICAgICAg
cmV0dXJuIG51bGw7Ci0gICAgfQotICAgIC8vIERyYWluIHRoZSBkZWNvZGVyIHVudGlsIHJlY2Vp
dmluZyBhIGRlY29kZWQgYnVmZmVyIG9yIGhpdHRpbmcKLSAgICAvLyBNZWRpYUNvZGVjLklORk9f
VFJZX0FHQUlOX0xBVEVSLgotICAgIGZpbmFsIE1lZGlhQ29kZWMuQnVmZmVySW5mbyBpbmZvID0g
bmV3IE1lZGlhQ29kZWMuQnVmZmVySW5mbygpOwotICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICBm
aW5hbCBpbnQgcmVzdWx0ID0KLSAgICAgICAgICBtZWRpYUNvZGVjLmRlcXVldWVPdXRwdXRCdWZm
ZXIoaW5mbywgVGltZVVuaXQuTUlMTElTRUNPTkRTLnRvTWljcm9zKGRlcXVldWVUaW1lb3V0TXMp
KTsKLSAgICAgIHN3aXRjaCAocmVzdWx0KSB7Ci0gICAgICAgIGNhc2UgTWVkaWFDb2RlYy5JTkZP
X09VVFBVVF9CVUZGRVJTX0NIQU5HRUQ6Ci0gICAgICAgICAgb3V0cHV0QnVmZmVycyA9IG1lZGlh
Q29kZWMuZ2V0T3V0cHV0QnVmZmVycygpOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJEZWNv
ZGVyIG91dHB1dCBidWZmZXJzIGNoYW5nZWQ6ICIgKyBvdXRwdXRCdWZmZXJzLmxlbmd0aCk7Ci0g
ICAgICAgICAgaWYgKGhhc0RlY29kZWRGaXJzdEZyYW1lKSB7Ci0gICAgICAgICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBvdXRwdXQgYnVmZmVyIGNoYW5nZSBldmVu
dC4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWVkaWFD
b2RlYy5JTkZPX09VVFBVVF9GT1JNQVRfQ0hBTkdFRDoKLSAgICAgICAgICBNZWRpYUZvcm1hdCBm
b3JtYXQgPSBtZWRpYUNvZGVjLmdldE91dHB1dEZvcm1hdCgpOwotICAgICAgICAgIExvZ2dpbmcu
ZChUQUcsICJEZWNvZGVyIGZvcm1hdCBjaGFuZ2VkOiAiICsgZm9ybWF0LnRvU3RyaW5nKCkpOwot
ICAgICAgICAgIGludCBuZXdfd2lkdGggPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5L
RVlfV0lEVEgpOwotICAgICAgICAgIGludCBuZXdfaGVpZ2h0ID0gZm9ybWF0LmdldEludGVnZXIo
TWVkaWFGb3JtYXQuS0VZX0hFSUdIVCk7Ci0gICAgICAgICAgaWYgKGhhc0RlY29kZWRGaXJzdEZy
YW1lICYmIChuZXdfd2lkdGggIT0gd2lkdGggfHwgbmV3X2hlaWdodCAhPSBoZWlnaHQpKSB7Ci0g
ICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBzaXplIGNo
YW5nZS4gQ29uZmlndXJlZCAiICsgd2lkdGggKyAiKiIgKyBoZWlnaHQKLSAgICAgICAgICAgICAg
ICArICIuIE5ldyAiICsgbmV3X3dpZHRoICsgIioiICsgbmV3X2hlaWdodCk7Ci0gICAgICAgICAg
fQotICAgICAgICAgIHdpZHRoID0gZm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX1dJ
RFRIKTsKLSAgICAgICAgICBoZWlnaHQgPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5L
RVlfSEVJR0hUKTsKLQotICAgICAgICAgIGlmICghdXNlU3VyZmFjZSAmJiBmb3JtYXQuY29udGFp
bnNLZXkoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCkpIHsKLSAgICAgICAgICAgIGNvbG9y
Rm9ybWF0ID0gZm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCk7
Ci0gICAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ29sb3I6IDB4IiArIEludGVnZXIudG9IZXhT
dHJpbmcoY29sb3JGb3JtYXQpKTsKLSAgICAgICAgICAgIGlmICghc3VwcG9ydGVkQ29sb3JMaXN0
LmNvbnRhaW5zKGNvbG9yRm9ybWF0KSkgewotICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdh
bFN0YXRlRXhjZXB0aW9uKCJOb24gc3VwcG9ydGVkIGNvbG9yIGZvcm1hdDogIiArIGNvbG9yRm9y
bWF0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGZvcm1hdC5j
b250YWluc0tleSgic3RyaWRlIikpIHsKLSAgICAgICAgICAgIHN0cmlkZSA9IGZvcm1hdC5nZXRJ
bnRlZ2VyKCJzdHJpZGUiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGZvcm1hdC5jb250
YWluc0tleSgic2xpY2UtaGVpZ2h0IikpIHsKLSAgICAgICAgICAgIHNsaWNlSGVpZ2h0ID0gZm9y
bWF0LmdldEludGVnZXIoInNsaWNlLWhlaWdodCIpOwotICAgICAgICAgIH0KLSAgICAgICAgICBM
b2dnaW5nLmQoVEFHLCAiRnJhbWUgc3RyaWRlIGFuZCBzbGljZSBoZWlnaHQ6ICIgKyBzdHJpZGUg
KyAiIHggIiArIHNsaWNlSGVpZ2h0KTsKLSAgICAgICAgICBzdHJpZGUgPSBNYXRoLm1heCh3aWR0
aCwgc3RyaWRlKTsKLSAgICAgICAgICBzbGljZUhlaWdodCA9IE1hdGgubWF4KGhlaWdodCwgc2xp
Y2VIZWlnaHQpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlhQ29kZWMuSU5G
T19UUllfQUdBSU5fTEFURVI6Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgaGFzRGVjb2RlZEZpcnN0RnJhbWUgPSB0cnVlOwotICAgICAgICAgIFRp
bWVTdGFtcHMgdGltZVN0YW1wcyA9IGRlY29kZVN0YXJ0VGltZU1zLnJlbW92ZSgpOwotICAgICAg
ICAgIGxvbmcgZGVjb2RlVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSB0
aW1lU3RhbXBzLmRlY29kZVN0YXJ0VGltZU1zOwotICAgICAgICAgIGlmIChkZWNvZGVUaW1lTXMg
PiBNQVhfREVDT0RFX1RJTUVfTVMpIHsKLSAgICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJWZXJ5
IGhpZ2ggZGVjb2RlIHRpbWU6ICIgKyBkZWNvZGVUaW1lTXMgKyAibXMiCi0gICAgICAgICAgICAg
ICAgICAgICsgIi4gUSBzaXplOiAiICsgZGVjb2RlU3RhcnRUaW1lTXMuc2l6ZSgpCi0gICAgICAg
ICAgICAgICAgICAgICsgIi4gTWlnaHQgYmUgY2F1c2VkIGJ5IHJlc3VtaW5nIEgyNjQgZGVjb2Rp
bmcgYWZ0ZXIgYSBwYXVzZS4iKTsKLSAgICAgICAgICAgIGRlY29kZVRpbWVNcyA9IE1BWF9ERUNP
REVfVElNRV9NUzsKLSAgICAgICAgICB9Ci0gICAgICAgICAgcmV0dXJuIG5ldyBEZWNvZGVkT3V0
cHV0QnVmZmVyKHJlc3VsdCwgaW5mby5vZmZzZXQsIGluZm8uc2l6ZSwKLSAgICAgICAgICAgICAg
VGltZVVuaXQuTUlDUk9TRUNPTkRTLnRvTWlsbGlzKGluZm8ucHJlc2VudGF0aW9uVGltZVVzKSwg
dGltZVN0YW1wcy50aW1lU3RhbXBNcywKLSAgICAgICAgICAgICAgdGltZVN0YW1wcy5udHBUaW1l
U3RhbXBNcywgZGVjb2RlVGltZU1zLCBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyBudWxsIGlmIG5vIGRlY29kZWQgYnVm
ZmVyIGlzIGF2YWlsYWJsZSwgYW5kIG90aGVyd2lzZSBhIERlY29kZWRUZXh0dXJlQnVmZmVyLgot
ICAvLyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGNhbGwgaXMgbWFkZSBvbiB0aGUg
d3JvbmcgdGhyZWFkLCBpZiBjb2xvciBmb3JtYXQgY2hhbmdlcyB0byBhbgotICAvLyB1bnN1cHBv
cnRlZCBmb3JtYXQsIG9yIGlmIHxtZWRpYUNvZGVjfCBpcyBub3QgaW4gdGhlIEV4ZWN1dGluZyBz
dGF0ZS4gVGhyb3dzIENvZGVjRXhjZXB0aW9uCi0gIC8vIHVwb24gY29kZWMgZXJyb3IuIElmIHxk
ZXF1ZXVlVGltZW91dE1zfCA+IDAsIHRoZSBvbGRlc3QgZGVjb2RlZCBmcmFtZSB3aWxsIGJlIGRy
b3BwZWQgaWYKLSAgLy8gYSBmcmFtZSBjYW4ndCBiZSByZXR1cm5lZC4KLSAgcHJpdmF0ZSBEZWNv
ZGVkVGV4dHVyZUJ1ZmZlciBkZXF1ZXVlVGV4dHVyZUJ1ZmZlcihpbnQgZGVxdWV1ZVRpbWVvdXRN
cykgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgaWYgKCF1c2VTdXJmYWNl
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJkZXF1ZXVlVGV4dHVy
ZSgpIGNhbGxlZCBmb3IgYnl0ZSBidWZmZXIgZGVjb2RpbmcuIik7Ci0gICAgfQotICAgIERlY29k
ZWRPdXRwdXRCdWZmZXIgb3V0cHV0QnVmZmVyID0gZGVxdWV1ZU91dHB1dEJ1ZmZlcihkZXF1ZXVl
VGltZW91dE1zKTsKLSAgICBpZiAob3V0cHV0QnVmZmVyICE9IG51bGwpIHsKLSAgICAgIGRlcXVl
dWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuYWRkKG91dHB1dEJ1ZmZlcik7Ci0gICAgfQotCi0gICAg
TWF5YmVSZW5kZXJEZWNvZGVkVGV4dHVyZUJ1ZmZlcigpOwotICAgIC8vIENoZWNrIGlmIHRoZXJl
IGlzIHRleHR1cmUgcmVhZHkgbm93IGJ5IHdhaXRpbmcgbWF4IHxkZXF1ZXVlVGltZW91dE1zfC4K
LSAgICBEZWNvZGVkVGV4dHVyZUJ1ZmZlciByZW5kZXJlZEJ1ZmZlciA9IHRleHR1cmVMaXN0ZW5l
ci5kZXF1ZXVlVGV4dHVyZUJ1ZmZlcihkZXF1ZXVlVGltZW91dE1zKTsKLSAgICBpZiAocmVuZGVy
ZWRCdWZmZXIgIT0gbnVsbCkgewotICAgICAgTWF5YmVSZW5kZXJEZWNvZGVkVGV4dHVyZUJ1ZmZl
cigpOwotICAgICAgcmV0dXJuIHJlbmRlcmVkQnVmZmVyOwotICAgIH0KLQotICAgIGlmICgoZGVx
dWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5zaXplKCkKLSAgICAgICAgICAgICAgICA+PSBNYXRo
Lm1pbihNQVhfUVVFVUVEX09VVFBVVEJVRkZFUlMsIG91dHB1dEJ1ZmZlcnMubGVuZ3RoKQotICAg
ICAgICAgICAgfHwgKGRlcXVldWVUaW1lb3V0TXMgPiAwICYmICFkZXF1ZXVlZFN1cmZhY2VPdXRw
dXRCdWZmZXJzLmlzRW1wdHkoKSkpKSB7Ci0gICAgICArK2Ryb3BwZWRGcmFtZXM7Ci0gICAgICAv
LyBEcm9wIHRoZSBvbGRlc3QgZnJhbWUgc3RpbGwgaW4gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVm
ZmVycy4KLSAgICAgIC8vIFRoZSBvbGRlc3QgZnJhbWUgaXMgb3duZWQgYnkgfHRleHR1cmVMaXN0
ZW5lcnwgYW5kIGNhbid0IGJlIGRyb3BwZWQgc2luY2UKLSAgICAgIC8vIG1lZGlhQ29kZWMucmVs
ZWFzZU91dHB1dEJ1ZmZlciBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4KLSAgICAgIGZpbmFsIERl
Y29kZWRPdXRwdXRCdWZmZXIgZHJvcHBlZEZyYW1lID0gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVm
ZmVycy5yZW1vdmUoKTsKLSAgICAgIGlmIChkZXF1ZXVlVGltZW91dE1zID4gMCkgewotICAgICAg
ICAvLyBUT0RPKHBlcmtqKTogUmUtYWRkIHRoZSBiZWxvdyBsb2cgd2hlbiBWaWRlb1JlbmRlckdV
SSBoYXMgYmVlbiByZW1vdmVkIG9yIGZpeGVkIHRvCi0gICAgICAgIC8vIHJldHVybiB0aGUgb25l
IGFuZCBvbmx5IHRleHR1cmUgZXZlbiBpZiBpdCBkb2VzIG5vdCByZW5kZXIuCi0gICAgICAgIExv
Z2dpbmcudyhUQUcsICJEcmFpbmluZyBkZWNvZGVyLiBEcm9wcGluZyBmcmFtZSB3aXRoIFRTOiAi
Ci0gICAgICAgICAgICAgICAgKyBkcm9wcGVkRnJhbWUucHJlc2VudGF0aW9uVGltZVN0YW1wTXMg
KyAiLiBUb3RhbCBudW1iZXIgb2YgZHJvcHBlZCBmcmFtZXM6ICIKLSAgICAgICAgICAgICAgICAr
IGRyb3BwZWRGcmFtZXMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywg
IlRvbyBtYW55IG91dHB1dCBidWZmZXJzICIgKyBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJz
LnNpemUoKQotICAgICAgICAgICAgICAgICsgIi4gRHJvcHBpbmcgZnJhbWUgd2l0aCBUUzogIiAr
IGRyb3BwZWRGcmFtZS5wcmVzZW50YXRpb25UaW1lU3RhbXBNcwotICAgICAgICAgICAgICAgICsg
Ii4gVG90YWwgbnVtYmVyIG9mIGRyb3BwZWQgZnJhbWVzOiAiICsgZHJvcHBlZEZyYW1lcyk7Ci0g
ICAgICB9Ci0KLSAgICAgIG1lZGlhQ29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihkcm9wcGVkRnJh
bWUuaW5kZXgsIGZhbHNlIC8qIHJlbmRlciAqLyk7Ci0gICAgICByZXR1cm4gbmV3IERlY29kZWRU
ZXh0dXJlQnVmZmVyKDAsIG51bGwsIGRyb3BwZWRGcmFtZS5wcmVzZW50YXRpb25UaW1lU3RhbXBN
cywKLSAgICAgICAgICBkcm9wcGVkRnJhbWUudGltZVN0YW1wTXMsIGRyb3BwZWRGcmFtZS5udHBU
aW1lU3RhbXBNcywgZHJvcHBlZEZyYW1lLmRlY29kZVRpbWVNcywKLSAgICAgICAgICBTeXN0ZW1D
bG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIGRyb3BwZWRGcmFtZS5lbmREZWNvZGVUaW1lTXMpOwot
ICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBNYXliZVJlbmRl
ckRlY29kZWRUZXh0dXJlQnVmZmVyKCkgewotICAgIGlmIChkZXF1ZXVlZFN1cmZhY2VPdXRwdXRC
dWZmZXJzLmlzRW1wdHkoKSB8fCB0ZXh0dXJlTGlzdGVuZXIuaXNXYWl0aW5nRm9yVGV4dHVyZSgp
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEdldCB0aGUgZmlyc3QgZnJhbWUgaW4g
dGhlIHF1ZXVlIGFuZCByZW5kZXIgdG8gdGhlIGRlY29kZXIgb3V0cHV0IHN1cmZhY2UuCi0gICAg
ZmluYWwgRGVjb2RlZE91dHB1dEJ1ZmZlciBidWZmZXIgPSBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRC
dWZmZXJzLnJlbW92ZSgpOwotICAgIHRleHR1cmVMaXN0ZW5lci5hZGRCdWZmZXJUb1JlbmRlcihi
dWZmZXIpOwotICAgIG1lZGlhQ29kZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihidWZmZXIuaW5kZXgs
IHRydWUgLyogcmVuZGVyICovKTsKLSAgfQotCi0gIC8vIFJlbGVhc2UgYSBkZXF1ZXVlZCBvdXRw
dXQgYnl0ZSBidWZmZXIgYmFjayB0byB0aGUgY29kZWMgZm9yIHJlLXVzZS4gU2hvdWxkIG9ubHkg
YmUgY2FsbGVkIGZvcgotICAvLyBub24tc3VyZmFjZSBkZWNvZGluZy4KLSAgLy8gVGhyb3dzIEls
bGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGUgY2FsbCBpcyBtYWRlIG9uIHRoZSB3cm9uZyB0aHJl
YWQsIGlmIGNvZGVjIGlzIGNvbmZpZ3VyZWQKLSAgLy8gZm9yIHN1cmZhY2UgZGVjb2RpbmcsIG9y
IGlmIHxtZWRpYUNvZGVjfCBpcyBub3QgaW4gdGhlIEV4ZWN1dGluZyBzdGF0ZS4gVGhyb3dzCi0g
IC8vIE1lZGlhQ29kZWMuQ29kZWNFeGNlcHRpb24gdXBvbiBjb2RlYyBlcnJvci4KLSAgcHJpdmF0
ZSB2b2lkIHJldHVybkRlY29kZWRPdXRwdXRCdWZmZXIoaW50IGluZGV4KQotICAgICAgdGhyb3dz
IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiwgTWVkaWFDb2RlYy5Db2RlY0V4Y2VwdGlvbiB7Ci0gICAg
Y2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICBpZiAodXNlU3VyZmFjZSkgewotICAgICAg
dGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigicmV0dXJuRGVjb2RlZE91dHB1dEJ1ZmZl
cigpIGNhbGxlZCBmb3Igc3VyZmFjZSBkZWNvZGluZy4iKTsKLSAgICB9Ci0gICAgbWVkaWFDb2Rl
Yy5yZWxlYXNlT3V0cHV0QnVmZmVyKGluZGV4LCBmYWxzZSAvKiByZW5kZXIgKi8pOwotICB9Ci19
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw3MzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRh
cmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWM7Ci1pbXBvcnQgYW5kcm9p
ZC5tZWRpYS5NZWRpYUNvZGVjSW5mbzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJ
bmZvLkNvZGVjQ2FwYWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0xp
c3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUZvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm9w
ZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9z
LkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLQotaW1wb3J0IGphdmEubmlv
LkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwu
SGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0Owot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEu
dXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vLyBKYXZhLXNpZGUgb2YgcGVlcmNvbm5lY3Rp
b25fam5pLmNjOk1lZGlhQ29kZWNWaWRlb0VuY29kZXIuCi0vLyBUaGlzIGNsYXNzIGlzIGFuIGlt
cGxlbWVudGF0aW9uIGRldGFpbCBvZiB0aGUgSmF2YSBQZWVyQ29ubmVjdGlvbiBBUEkuCi1AVGFy
Z2V0QXBpKDE5KQotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFz
cyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIHsKLSAgLy8gVGhpcyBjbGFzcyBpcyBjb25zdHJ1Y3Rl
ZCwgb3BlcmF0ZWQsIGFuZCBkZXN0cm95ZWQgYnkgaXRzIEMrKyBpbmNhcm5hdGlvbiwKLSAgLy8g
c28gdGhlIGNsYXNzIGFuZCBpdHMgbWV0aG9kcyBoYXZlIG5vbi1wdWJsaWMgdmlzaWJpbGl0eS4g
IFRoZSBBUEkgdGhpcwotICAvLyBjbGFzcyBleHBvc2VzIGFpbXMgdG8gbWltaWMgdGhlIHdlYnJ0
Yzo6VmlkZW9FbmNvZGVyIEFQSSBhcyBjbG9zZWx5IGFzCi0gIC8vIHBvc3NpYmx5IHRvIG1pbmlt
aXplIHRoZSBhbW91bnQgb2YgdHJhbnNsYXRpb24gd29yayBuZWNlc3NhcnkuCi0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIjsKLQot
ICAvLyBUcmFja3Mgd2VicnRjOjpWaWRlb0NvZGVjVHlwZS4KLSAgcHVibGljIGVudW0gVmlkZW9D
b2RlY1R5cGUgeyBWSURFT19DT0RFQ19WUDgsIFZJREVPX0NPREVDX1ZQOSwgVklERU9fQ09ERUNf
SDI2NCB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FRElBX0NPREVDX1JFTEVBU0Vf
VElNRU9VVF9NUyA9IDUwMDA7IC8vIFRpbWVvdXQgZm9yIGNvZGVjIHJlbGVhc2luZy4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IERFUVVFVUVfVElNRU9VVCA9IDA7IC8vIE5vbi1ibG9ja2lu
Zywgbm8gd2FpdC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFJBVEVfQURKVVNUTUVO
VF9GUFMgPSAzMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWElNVU1fSU5JVElBTF9G
UFMgPSAzMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZG91YmxlIEJJVFJBVEVfQ09SUkVDVElP
Tl9TRUMgPSAzLjA7Ci0gIC8vIE1heGltdW0gYml0cmF0ZSBjb3JyZWN0aW9uIHNjYWxlIC0gbm8g
bW9yZSB0aGFuIDIgdGltZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBCSVRSQVRF
X0NPUlJFQ1RJT05fTUFYX1NDQUxFID0gMjsKLSAgLy8gQW1vdW50IG9mIGNvcnJlY3Rpb24gc3Rl
cHMgdG8gcmVhY2ggY29ycmVjdGlvbiBtYXhpbXVtIHNjYWxlLgotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgQklUUkFURV9DT1JSRUNUSU9OX1NURVBTID0gMTA7Ci0KLSAgLy8gQWN0aXZlIHJ1
bm5pbmcgZW5jb2RlciBpbnN0YW5jZS4gU2V0IGluIGluaXRFbmNvZGUoKSAoY2FsbGVkIGZyb20g
bmF0aXZlIGNvZGUpCi0gIC8vIGFuZCByZXNldCB0byBudWxsIGluIHJlbGVhc2UoKSBjYWxsLgot
ICBwcml2YXRlIHN0YXRpYyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIHJ1bm5pbmdJbnN0YW5jZSA9
IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIE1lZGlhQ29kZWNWaWRlb0VuY29kZXJFcnJvckNhbGxi
YWNrIGVycm9yQ2FsbGJhY2sgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBpbnQgY29kZWNFcnJv
cnMgPSAwOwotICAvLyBMaXN0IG9mIGRpc2FibGVkIGNvZGVjIHR5cGVzIC0gY2FuIGJlIHNldCBm
cm9tIGFwcGxpY2F0aW9uLgotICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBod0VuY29kZXJE
aXNhYmxlZFR5cGVzID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gIHByaXZhdGUgVGhyZWFk
IG1lZGlhQ29kZWNUaHJlYWQ7Ci0gIHByaXZhdGUgTWVkaWFDb2RlYyBtZWRpYUNvZGVjOwotICBw
cml2YXRlIEJ5dGVCdWZmZXJbXSBvdXRwdXRCdWZmZXJzOwotICBwcml2YXRlIEVnbEJhc2UxNCBl
Z2xCYXNlOwotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0OwotICBw
cml2YXRlIFN1cmZhY2UgaW5wdXRTdXJmYWNlOwotICBwcml2YXRlIEdsUmVjdERyYXdlciBkcmF3
ZXI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOF9NSU1FX1RZUEUgPSAidmlk
ZW8veC12bmQub24yLnZwOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWUDlfTUlN
RV9UWVBFID0gInZpZGVvL3gtdm5kLm9uMi52cDkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgSDI2NF9NSU1FX1RZUEUgPSAidmlkZW8vYXZjIjsKLQotICAvLyBUeXBlIG9mIGJpdHJh
dGUgYWRqdXN0bWVudCBmb3IgdmlkZW8gZW5jb2Rlci4KLSAgcHVibGljIGVudW0gQml0cmF0ZUFk
anVzdG1lbnRUeXBlIHsKLSAgICAvLyBObyBhZGp1c3RtZW50IC0gdmlkZW8gZW5jb2RlciBoYXMg
bm8ga25vd24gYml0cmF0ZSBwcm9ibGVtLgotICAgIE5PX0FESlVTVE1FTlQsCi0gICAgLy8gRnJh
bWVyYXRlIGJhc2VkIGJpdHJhdGUgYWRqdXN0bWVudCBpcyByZXF1aXJlZCAtIEhXIGVuY29kZXIg
ZG9lcyBub3QgdXNlIGZyYW1lCi0gICAgLy8gdGltZXN0YW1wcyB0byBjYWxjdWxhdGUgZnJhbWUg
Yml0cmF0ZSBidWRnZXQgYW5kIGluc3RlYWQgaXMgcmVseWluZyBvbiBpbml0aWFsCi0gICAgLy8g
ZnBzIGNvbmZpZ3VyYXRpb24gYXNzdW1pbmcgdGhhdCBhbGwgZnJhbWVzIGFyZSBjb21pbmcgYXQg
Zml4ZWQgaW5pdGlhbCBmcmFtZSByYXRlLgotICAgIEZSQU1FUkFURV9BREpVU1RNRU5ULAotICAg
IC8vIER5bmFtaWMgYml0cmF0ZSBhZGp1c3RtZW50IGlzIHJlcXVpcmVkIC0gSFcgZW5jb2RlciB1
c2VkIGZyYW1lIHRpbWVzdGFtcHMsIGJ1dCBhY3R1YWwKLSAgICAvLyBiaXRyYXRlIGRldmlhdGVz
IHRvbyBtdWNoIGZyb20gdGhlIHRhcmdldCB2YWx1ZS4KLSAgICBEWU5BTUlDX0FESlVTVE1FTlQK
LSAgfQotCi0gIC8vIENsYXNzIGRlc2NyaWJpbmcgc3VwcG9ydGVkIG1lZGlhIGNvZGVjIHByb3Bl
cnRpZXMuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIHsKLSAg
ICBwdWJsaWMgZmluYWwgU3RyaW5nIGNvZGVjUHJlZml4OwotICAgIC8vIE1pbmltdW0gQW5kcm9p
ZCBTREsgcmVxdWlyZWQgZm9yIHRoaXMgY29kZWMgdG8gYmUgdXNlZC4KLSAgICBwdWJsaWMgZmlu
YWwgaW50IG1pblNkazsKLSAgICAvLyBGbGFnIGlmIGVuY29kZXIgaW1wbGVtZW50YXRpb24gZG9l
cyBub3QgdXNlIGZyYW1lIHRpbWVzdGFtcHMgdG8gY2FsY3VsYXRlIGZyYW1lIGJpdHJhdGUKLSAg
ICAvLyBidWRnZXQgYW5kIGluc3RlYWQgaXMgcmVseWluZyBvbiBpbml0aWFsIGZwcyBjb25maWd1
cmF0aW9uIGFzc3VtaW5nIHRoYXQgYWxsIGZyYW1lcyBhcmUKLSAgICAvLyBjb21pbmcgYXQgZml4
ZWQgaW5pdGlhbCBmcmFtZSByYXRlLiBCaXRyYXRlIGFkanVzdG1lbnQgaXMgcmVxdWlyZWQgZm9y
IHRoaXMgY2FzZS4KLSAgICBwdWJsaWMgZmluYWwgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJh
dGVBZGp1c3RtZW50VHlwZTsKLQotICAgIE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgICBT
dHJpbmcgY29kZWNQcmVmaXgsIGludCBtaW5TZGssIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRy
YXRlQWRqdXN0bWVudFR5cGUpIHsKLSAgICAgIHRoaXMuY29kZWNQcmVmaXggPSBjb2RlY1ByZWZp
eDsKLSAgICAgIHRoaXMubWluU2RrID0gbWluU2RrOwotICAgICAgdGhpcy5iaXRyYXRlQWRqdXN0
bWVudFR5cGUgPSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0gICAgfQotICB9Ci0KLSAgLy8gTGlz
dCBvZiBzdXBwb3J0ZWQgSFcgVlA4IGVuY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBN
ZWRpYUNvZGVjUHJvcGVydGllcyBxY29tVnA4SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQ
cm9wZXJ0aWVzKAotICAgICAgIk9NWC5xY29tLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FU
LCBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGV4eW5vc1ZwOEh3UHJvcGVydGllcyA9IG5ldyBN
ZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVguRXh5bm9zLiIsIEJ1aWxkLlZFUlNJT05f
Q09ERVMuTSwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLkRZTkFNSUNfQURKVVNUTUVOVCk7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10gdnA4SHdMaXN0ID0KLSAg
ICAgIG5ldyBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHtxY29tVnA4SHdQcm9wZXJ0aWVzLCBleHlu
b3NWcDhId1Byb3BlcnRpZXN9OwotCi0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIEhXIFZQOSBlbmNv
ZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgcWNvbVZw
OUh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVgucWNv
bS4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLk0sIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpV
U1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgZXh5
bm9zVnA5SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgIk9N
WC5FeHlub3MuIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5NLCBCaXRyYXRlQWRqdXN0bWVudFR5cGUu
Tk9fQURKVVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0
aWVzW10gdnA5SHdMaXN0ID0KLSAgICAgIG5ldyBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHtxY29t
VnA5SHdQcm9wZXJ0aWVzLCBleHlub3NWcDlId1Byb3BlcnRpZXN9OwotCi0gIC8vIExpc3Qgb2Yg
c3VwcG9ydGVkIEhXIEguMjY0IGVuY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZWRp
YUNvZGVjUHJvcGVydGllcyBxY29tSDI2NEh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJv
cGVydGllcygKLSAgICAgICJPTVgucWNvbS4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCwg
Qml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBNZWRpYUNvZGVjUHJvcGVydGllcyBleHlub3NIMjY0SHdQcm9wZXJ0aWVzID0gbmV3IE1l
ZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgIk9NWC5FeHlub3MuIiwgQnVpbGQuVkVSU0lPTl9D
T0RFUy5MT0xMSVBPUCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLkZSQU1FUkFURV9BREpVU1RNRU5U
KTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSBoMjY0SHdM
aXN0ID0KLSAgICAgIG5ldyBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHtxY29tSDI2NEh3UHJvcGVy
dGllcywgZXh5bm9zSDI2NEh3UHJvcGVydGllc307Ci0KLSAgLy8gTGlzdCBvZiBkZXZpY2VzIHdp
dGggcG9vciBILjI2NCBlbmNvZGVyIHF1YWxpdHkuCi0gIC8vIEhXIEguMjY0IGVuY29kZXIgb24g
YmVsb3cgZGV2aWNlcyBoYXMgcG9vciBiaXRyYXRlIGNvbnRyb2wgLSBhY3R1YWwKLSAgLy8gYml0
cmF0ZXMgZGV2aWF0ZXMgYSBsb3QgZnJvbSB0aGUgdGFyZ2V0IHZhbHVlLgotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmdbXSBIMjY0X0hXX0VYQ0VQVElPTl9NT0RFTFMgPQotICAgICAgbmV3
IFN0cmluZ1tdIHsiU0FNU1VORy1TR0gtSTMzNyIsICJOZXh1cyA3IiwgIk5leHVzIDQifTsKLQot
ICAvLyBCaXRyYXRlIG1vZGVzIC0gc2hvdWxkIGJlIGluIHN5bmMgd2l0aCBPTVhfVklERU9fQ09O
VFJPTFJBVEVUWVBFIGRlZmluZWQKLSAgLy8gaW4gT01YX1ZpZGVvLmgKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IFZJREVPX0NvbnRyb2xSYXRlQ29uc3RhbnQgPSAyOwotICAvLyBOVjEyIGNv
bG9yIGZvcm1hdCBzdXBwb3J0ZWQgYnkgUUNPTSBjb2RlYywgYnV0IG5vdCBkZWNsYXJlZCBpbiBN
ZWRpYUNvZGVjIC0KLSAgLy8gc2VlIC9oYXJkd2FyZS9xY29tL21lZGlhL21tLWNvcmUvaW5jL09N
WF9RQ09NRXh0bnMuaAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JN
QVRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtID0gMHg3RkEzMEMwNDsKLSAgLy8gQWxsb3dhYmxl
IGNvbG9yIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IGNvZGVjIC0gaW4gb3JkZXIgb2YgcHJlZmVyZW5j
ZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50W10gc3VwcG9ydGVkQ29sb3JMaXN0ID0ge0Nv
ZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hciwKLSAgICAgIENvZGVjQ2Fw
YWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDb2RlY0NhcGFi
aWxpdGllcy5DT0xPUl9RQ09NX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBDT0xPUl9R
Q09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm19OwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnRbXSBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0ID0ge0NvZGVjQ2FwYWJpbGl0aWVz
LkNPTE9SX0Zvcm1hdFN1cmZhY2V9OwotICBwcml2YXRlIFZpZGVvQ29kZWNUeXBlIHR5cGU7Ci0g
IHByaXZhdGUgaW50IGNvbG9yRm9ybWF0OyAvLyBVc2VkIGJ5IG5hdGl2ZSBjb2RlLgotCi0gIC8v
IFZhcmlhYmxlcyB1c2VkIGZvciBkeW5hbWljIGJpdHJhdGUgYWRqdXN0bWVudC4KLSAgcHJpdmF0
ZSBCaXRyYXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gQml0cmF0ZUFk
anVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQ7Ci0gIHByaXZhdGUgZG91YmxlIGJpdHJhdGVBY2N1
bXVsYXRvcjsKLSAgcHJpdmF0ZSBkb3VibGUgYml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICBwcml2
YXRlIGRvdWJsZSBiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXM7Ci0gIHByaXZhdGUgaW50IGJpdHJh
dGVBZGp1c3RtZW50U2NhbGVFeHA7Ci0gIHByaXZhdGUgaW50IHRhcmdldEJpdHJhdGVCcHM7Ci0g
IHByaXZhdGUgaW50IHRhcmdldEZwczsKLQotICAvLyBTUFMgYW5kIFBQUyBOQUxzIChDb25maWcg
ZnJhbWUpIGZvciBILjI2NC4KLSAgcHJpdmF0ZSBCeXRlQnVmZmVyIGNvbmZpZ0RhdGEgPSBudWxs
OwotCi0gIC8vIE1lZGlhQ29kZWMgZXJyb3IgaGFuZGxlciAtIGludm9rZWQgd2hlbiBjcml0aWNh
bCBlcnJvciBoYXBwZW5zIHdoaWNoIG1heSBwcmV2ZW50Ci0gIC8vIGZ1cnRoZXIgdXNlIG9mIG1l
ZGlhIGNvZGVjIEFQSS4gTm93IGl0IG1lYW5zIHRoYXQgb25lIG9mIG1lZGlhIGNvZGVjIGluc3Rh
bmNlcwotICAvLyBpcyBoYW5naW5nIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgaW4gdGhlIG5l
eHQgY2FsbC4KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
ckVycm9yQ2FsbGJhY2sgewotICAgIHZvaWQgb25NZWRpYUNvZGVjVmlkZW9FbmNvZGVyQ3JpdGlj
YWxFcnJvcihpbnQgY29kZWNFcnJvcnMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNl
dEVycm9yQ2FsbGJhY2soTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JD
YWxsYmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJTZXQgZXJyb3IgY2FsbGJhY2siKTsKLSAg
ICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmVycm9yQ2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrOwot
ICB9Ci0KLSAgLy8gRnVuY3Rpb25zIHRvIGRpc2FibGUgSFcgZW5jb2RpbmcgLSBjYW4gYmUgY2Fs
bGVkIGZyb20gYXBwbGljYXRpb25zIGZvciBwbGF0Zm9ybXMKLSAgLy8gd2hpY2ggaGF2ZSBrbm93
biBIVyBkZWNvZGluZyBwcm9ibGVtcy4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVWcDhI
d0NvZGVjKCkgewotICAgIExvZ2dpbmcudyhUQUcsICJWUDggZW5jb2RpbmcgaXMgZGlzYWJsZWQg
YnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoVlA4X01J
TUVfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVZwOUh3Q29kZWMo
KSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIlZQOSBlbmNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBs
aWNhdGlvbi4iKTsKLSAgICBod0VuY29kZXJEaXNhYmxlZFR5cGVzLmFkZChWUDlfTUlNRV9UWVBF
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlSDI2NEh3Q29kZWMoKSB7Ci0g
ICAgTG9nZ2luZy53KFRBRywgIkguMjY0IGVuY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0
aW9uLiIpOwotICAgIGh3RW5jb2RlckRpc2FibGVkVHlwZXMuYWRkKEgyNjRfTUlNRV9UWVBFKTsK
LSAgfQotCi0gIC8vIEZ1bmN0aW9ucyB0byBxdWVyeSBpZiBIVyBlbmNvZGluZyBpcyBzdXBwb3J0
ZWQuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOEh3U3VwcG9ydGVkKCkgewotICAgIHJl
dHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDhfTUlNRV9UWVBFKQotICAg
ICAgICAmJiAoZmluZEh3RW5jb2RlcihWUDhfTUlNRV9UWVBFLCB2cDhId0xpc3QsIHN1cHBvcnRl
ZENvbG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNW
cDlId1N1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29u
dGFpbnMoVlA5X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA5X01JTUVf
VFlQRSwgdnA5SHdMaXN0LCBzdXBwb3J0ZWRDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBib29sZWFuIGlzSDI2NEh3U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAh
aHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhIMjY0X01JTUVfVFlQRSkKLSAgICAgICAg
JiYgKGZpbmRId0VuY29kZXIoSDI2NF9NSU1FX1RZUEUsIGgyNjRId0xpc3QsIHN1cHBvcnRlZENv
bG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDhI
d1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxl
ZFR5cGVzLmNvbnRhaW5zKFZQOF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVy
KFZQOF9NSU1FX1RZUEUsIHZwOEh3TGlzdCwgc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCkgIT0g
bnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDlId1N1cHBvcnRlZFVz
aW5nVGV4dHVyZXMoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRh
aW5zKFZQOV9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVyKFZQOV9NSU1FX1RZ
UEUsIHZwOUh3TGlzdCwgc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNIMjY0SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVz
KCkgewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhIMjY0X01J
TUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoSDI2NF9NSU1FX1RZUEUsIGgyNjRI
d0xpc3QsIHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgLy8g
SGVscGVyIHN0cnVjdCBmb3IgZmluZEh3RW5jb2RlcigpIGJlbG93LgotICBwcml2YXRlIHN0YXRp
YyBjbGFzcyBFbmNvZGVyUHJvcGVydGllcyB7Ci0gICAgcHVibGljIEVuY29kZXJQcm9wZXJ0aWVz
KAotICAgICAgICBTdHJpbmcgY29kZWNOYW1lLCBpbnQgY29sb3JGb3JtYXQsIEJpdHJhdGVBZGp1
c3RtZW50VHlwZSBiaXRyYXRlQWRqdXN0bWVudFR5cGUpIHsKLSAgICAgIHRoaXMuY29kZWNOYW1l
ID0gY29kZWNOYW1lOwotICAgICAgdGhpcy5jb2xvckZvcm1hdCA9IGNvbG9yRm9ybWF0OwotICAg
ICAgdGhpcy5iaXRyYXRlQWRqdXN0bWVudFR5cGUgPSBiaXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0g
ICAgfQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgY29kZWNOYW1lOyAvLyBPcGVuTWF4IGNvbXBv
bmVudCBuYW1lIGZvciBIVyBjb2RlYy4KLSAgICBwdWJsaWMgZmluYWwgaW50IGNvbG9yRm9ybWF0
OyAvLyBDb2xvciBmb3JtYXQgc3VwcG9ydGVkIGJ5IGNvZGVjLgotICAgIHB1YmxpYyBmaW5hbCBC
aXRyYXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlOyAvLyBCaXRyYXRlIGFk
anVzdG1lbnQgdHlwZQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgRW5jb2RlclByb3BlcnRpZXMg
ZmluZEh3RW5jb2RlcigKLSAgICAgIFN0cmluZyBtaW1lLCBNZWRpYUNvZGVjUHJvcGVydGllc1td
IHN1cHBvcnRlZEh3Q29kZWNQcm9wZXJ0aWVzLCBpbnRbXSBjb2xvckxpc3QpIHsKLSAgICAvLyBN
ZWRpYUNvZGVjLnNldFBhcmFtZXRlcnMgaXMgbWlzc2luZyBmb3IgSkIgYW5kIGJlbG93LCBzbyBi
aXRyYXRlCi0gICAgLy8gY2FuIG5vdCBiZSBhZGp1c3RlZCBkeW5hbWljYWxseS4KLSAgICBpZiAo
QnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAg
ICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIGRldmljZSBpcyBpbiBI
LjI2NCBleGNlcHRpb24gbGlzdC4KLSAgICBpZiAobWltZS5lcXVhbHMoSDI2NF9NSU1FX1RZUEUp
KSB7Ci0gICAgICBMaXN0PFN0cmluZz4gZXhjZXB0aW9uTW9kZWxzID0gQXJyYXlzLmFzTGlzdChI
MjY0X0hXX0VYQ0VQVElPTl9NT0RFTFMpOwotICAgICAgaWYgKGV4Y2VwdGlvbk1vZGVscy5jb250
YWlucyhCdWlsZC5NT0RFTCkpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIk1vZGVsOiAiICsg
QnVpbGQuTU9ERUwgKyAiIGhhcyBibGFjayBsaXN0ZWQgSC4yNjQgZW5jb2Rlci4iKTsKLSAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0NvdW50KCk7ICsraSkgewotICAgICAgTWVkaWFDb2Rl
Y0luZm8gaW5mbyA9IG51bGw7Ci0gICAgICB0cnkgewotICAgICAgICBpbmZvID0gTWVkaWFDb2Rl
Y0xpc3QuZ2V0Q29kZWNJbmZvQXQoaSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGVu
Y29kZXIgY29kZWMgaW5mbyIsIGUpOwotICAgICAgfQotICAgICAgaWYgKGluZm8gPT0gbnVsbCB8
fCAhaW5mby5pc0VuY29kZXIoKSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAg
IFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgIGZvciAoU3RyaW5nIG1pbWVUeXBlIDogaW5mby5n
ZXRTdXBwb3J0ZWRUeXBlcygpKSB7Ci0gICAgICAgIGlmIChtaW1lVHlwZS5lcXVhbHMobWltZSkp
IHsKLSAgICAgICAgICBuYW1lID0gaW5mby5nZXROYW1lKCk7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChuYW1lID09IG51bGwpIHsKLSAgICAgICAgY29u
dGludWU7IC8vIE5vIEhXIHN1cHBvcnQgaW4gdGhpcyBjb2RlYzsgdHJ5IHRoZSBuZXh0IG9uZS4K
LSAgICAgIH0KLSAgICAgIExvZ2dpbmcudihUQUcsICJGb3VuZCBjYW5kaWRhdGUgZW5jb2RlciAi
ICsgbmFtZSk7Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgc3VwcG9ydGVkIEhXIGVuY29k
ZXIuCi0gICAgICBib29sZWFuIHN1cHBvcnRlZENvZGVjID0gZmFsc2U7Ci0gICAgICBCaXRyYXRl
QWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gQml0cmF0ZUFkanVzdG1lbnRU
eXBlLk5PX0FESlVTVE1FTlQ7Ci0gICAgICBmb3IgKE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGNvZGVj
UHJvcGVydGllcyA6IHN1cHBvcnRlZEh3Q29kZWNQcm9wZXJ0aWVzKSB7Ci0gICAgICAgIGlmIChu
YW1lLnN0YXJ0c1dpdGgoY29kZWNQcm9wZXJ0aWVzLmNvZGVjUHJlZml4KSkgewotICAgICAgICAg
IGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBjb2RlY1Byb3BlcnRpZXMubWluU2RrKSB7Ci0g
ICAgICAgICAgICBMb2dnaW5nLncoCi0gICAgICAgICAgICAgICAgVEFHLCAiQ29kZWMgIiArIG5h
bWUgKyAiIGlzIGRpc2FibGVkIGR1ZSB0byBTREsgdmVyc2lvbiAiICsgQnVpbGQuVkVSU0lPTi5T
REtfSU5UKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIH0KLSAgICAgICAgICBp
ZiAoY29kZWNQcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50VHlwZSAhPSBCaXRyYXRlQWRqdXN0
bWVudFR5cGUuTk9fQURKVVNUTUVOVCkgewotICAgICAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRU
eXBlID0gY29kZWNQcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50VHlwZTsKLSAgICAgICAgICAg
IExvZ2dpbmcudygKLSAgICAgICAgICAgICAgICBUQUcsICJDb2RlYyAiICsgbmFtZSArICIgcmVx
dWlyZXMgYml0cmF0ZSBhZGp1c3RtZW50OiAiICsgYml0cmF0ZUFkanVzdG1lbnRUeXBlKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgc3VwcG9ydGVkQ29kZWMgPSB0cnVlOwotICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXN1cHBvcnRlZENvZGVjKSB7Ci0g
ICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiBIVyBjb2RlYyBz
dXBwb3J0cyBrbm93biBjb2xvciBmb3JtYXQuCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcyBjYXBh
YmlsaXRpZXM7Ci0gICAgICB0cnkgewotICAgICAgICBjYXBhYmlsaXRpZXMgPSBpbmZvLmdldENh
cGFiaWxpdGllc0ZvclR5cGUobWltZSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGVu
Y29kZXIgY2FwYWJpbGl0aWVzIiwgZSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAg
ICAgZm9yIChpbnQgY29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3JtYXRzKSB7Ci0g
ICAgICAgIExvZ2dpbmcudihUQUcsICIgICBDb2xvcjogMHgiICsgSW50ZWdlci50b0hleFN0cmlu
Zyhjb2xvckZvcm1hdCkpOwotICAgICAgfQotCi0gICAgICBmb3IgKGludCBzdXBwb3J0ZWRDb2xv
ckZvcm1hdCA6IGNvbG9yTGlzdCkgewotICAgICAgICBmb3IgKGludCBjb2RlY0NvbG9yRm9ybWF0
IDogY2FwYWJpbGl0aWVzLmNvbG9yRm9ybWF0cykgewotICAgICAgICAgIGlmIChjb2RlY0NvbG9y
Rm9ybWF0ID09IHN1cHBvcnRlZENvbG9yRm9ybWF0KSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBz
dXBwb3J0ZWQgSFcgZW5jb2Rlci4KLSAgICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3VuZCB0
YXJnZXQgZW5jb2RlciBmb3IgbWltZSAiICsgbWltZSArICIgOiAiICsgbmFtZSArICIuIENvbG9y
OiAweCIKLSAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvZGVjQ29s
b3JGb3JtYXQpICsgIi4gQml0cmF0ZSBhZGp1c3RtZW50OiAiCi0gICAgICAgICAgICAgICAgICAg
ICsgYml0cmF0ZUFkanVzdG1lbnRUeXBlKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRW5jb2Rl
clByb3BlcnRpZXMobmFtZSwgY29kZWNDb2xvckZvcm1hdCwgYml0cmF0ZUFkanVzdG1lbnRUeXBl
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG51
bGw7IC8vIE5vIEhXIGVuY29kZXIuCi0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tPbk1lZGlh
Q29kZWNUaHJlYWQoKSB7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQuZ2V0SWQoKSAhPSBUaHJl
YWQuY3VycmVudFRocmVhZCgpLmdldElkKCkpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIHByZXZpb3VzbHkgb3BlcmF0ZWQgb24gIiAr
IG1lZGlhQ29kZWNUaHJlYWQKLSAgICAgICAgICArICIgYnV0IGlzIG5vdyBjYWxsZWQgb24gIiAr
IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMg
dm9pZCBwcmludFN0YWNrVHJhY2UoKSB7Ci0gICAgaWYgKHJ1bm5pbmdJbnN0YW5jZSAhPSBudWxs
ICYmIHJ1bm5pbmdJbnN0YW5jZS5tZWRpYUNvZGVjVGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0
YWNrVHJhY2VFbGVtZW50W10gbWVkaWFDb2RlY1N0YWNrVHJhY2VzID0gcnVubmluZ0luc3RhbmNl
Lm1lZGlhQ29kZWNUaHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgaWYgKG1lZGlhQ29kZWNT
dGFja1RyYWNlcy5sZW5ndGggPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJNZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyIHN0YWNrcyB0cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNl
RWxlbWVudCBzdGFja1RyYWNlIDogbWVkaWFDb2RlY1N0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAg
TG9nZ2luZy5kKFRBRywgc3RhY2tUcmFjZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBNZWRpYUNvZGVjIGNyZWF0ZUJ5Q29kZWNOYW1lKFN0
cmluZyBjb2RlY05hbWUpIHsKLSAgICB0cnkgewotICAgICAgLy8gSW4gdGhlIEwtU0RLIHRoaXMg
Y2FsbCBjYW4gdGhyb3cgSU9FeGNlcHRpb24gc28gaW4gb3JkZXIgdG8gd29yayBpbgotICAgICAg
Ly8gYm90aCBjYXNlcyBjYXRjaCBhbiBleGNlcHRpb24uCi0gICAgICByZXR1cm4gTWVkaWFDb2Rl
Yy5jcmVhdGVCeUNvZGVjTmFtZShjb2RlY05hbWUpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBib29sZWFuIGluaXRFbmNv
ZGUoVmlkZW9Db2RlY1R5cGUgdHlwZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQga2Jwcywg
aW50IGZwcywKLSAgICAgIEVnbEJhc2UxNC5Db250ZXh0IHNoYXJlZENvbnRleHQpIHsKLSAgICBm
aW5hbCBib29sZWFuIHVzZVN1cmZhY2UgPSBzaGFyZWRDb250ZXh0ICE9IG51bGw7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIkphdmEgaW5pdEVuY29kZTogIiArIHR5cGUgKyAiIDogIiArIHdpZHRoICsg
IiB4ICIgKyBoZWlnaHQgKyAiLiBAICIgKyBrYnBzCi0gICAgICAgICAgICArICIga2Jwcy4gRnBz
OiAiICsgZnBzICsgIi4gRW5jb2RlIGZyb20gdGV4dHVyZSA6ICIgKyB1c2VTdXJmYWNlKTsKLQot
ICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICBp
ZiAobWVkaWFDb2RlY1RocmVhZCAhPSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigiRm9yZ290IHRvIHJlbGVhc2UoKT8iKTsKLSAgICB9Ci0gICAgRW5jb2RlclByb3Bl
cnRpZXMgcHJvcGVydGllcyA9IG51bGw7Ci0gICAgU3RyaW5nIG1pbWUgPSBudWxsOwotICAgIGlu
dCBrZXlGcmFtZUludGVydmFsU2VjID0gMDsKLSAgICBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlw
ZS5WSURFT19DT0RFQ19WUDgpIHsKLSAgICAgIG1pbWUgPSBWUDhfTUlNRV9UWVBFOwotICAgICAg
cHJvcGVydGllcyA9IGZpbmRId0VuY29kZXIoCi0gICAgICAgICAgVlA4X01JTUVfVFlQRSwgdnA4
SHdMaXN0LCB1c2VTdXJmYWNlID8gc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCA6IHN1cHBvcnRl
ZENvbG9yTGlzdCk7Ci0gICAgICBrZXlGcmFtZUludGVydmFsU2VjID0gMTAwOwotICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDkpIHsKLSAgICAgIG1p
bWUgPSBWUDlfTUlNRV9UWVBFOwotICAgICAgcHJvcGVydGllcyA9IGZpbmRId0VuY29kZXIoCi0g
ICAgICAgICAgVlA5X01JTUVfVFlQRSwgdnA5SHdMaXN0LCB1c2VTdXJmYWNlID8gc3VwcG9ydGVk
U3VyZmFjZUNvbG9yTGlzdCA6IHN1cHBvcnRlZENvbG9yTGlzdCk7Ci0gICAgICBrZXlGcmFtZUlu
dGVydmFsU2VjID0gMTAwOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5W
SURFT19DT0RFQ19IMjY0KSB7Ci0gICAgICBtaW1lID0gSDI2NF9NSU1FX1RZUEU7Ci0gICAgICBw
cm9wZXJ0aWVzID0gZmluZEh3RW5jb2RlcigKLSAgICAgICAgICBIMjY0X01JTUVfVFlQRSwgaDI2
NEh3TGlzdCwgdXNlU3VyZmFjZSA/IHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QgOiBzdXBwb3J0
ZWRDb2xvckxpc3QpOwotICAgICAga2V5RnJhbWVJbnRlcnZhbFNlYyA9IDIwOwotICAgIH0KLSAg
ICBpZiAocHJvcGVydGllcyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigiQ2FuIG5vdCBmaW5kIEhXIGVuY29kZXIgZm9yICIgKyB0eXBlKTsKLSAgICB9Ci0gICAg
cnVubmluZ0luc3RhbmNlID0gdGhpczsgLy8gRW5jb2RlciBpcyBub3cgcnVubmluZyBhbmQgY2Fu
IGJlIHF1ZXJpZWQgZm9yIHN0YWNrIHRyYWNlcy4KLSAgICBjb2xvckZvcm1hdCA9IHByb3BlcnRp
ZXMuY29sb3JGb3JtYXQ7Ci0gICAgYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gcHJvcGVydGllcy5i
aXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0gICAgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBC
aXRyYXRlQWRqdXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQpIHsKLSAgICAgIGZwcyA9
IEJJVFJBVEVfQURKVVNUTUVOVF9GUFM7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZwcyA9IE1hdGgu
bWluKGZwcywgTUFYSU1VTV9JTklUSUFMX0ZQUyk7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcs
ICJDb2xvciBmb3JtYXQ6ICIgKyBjb2xvckZvcm1hdCArICIuIEJpdHJhdGUgYWRqdXN0bWVudDog
IiArIGJpdHJhdGVBZGp1c3RtZW50VHlwZQotICAgICAgICAgICAgKyAiLiBJbml0aWFsIGZwczog
IiArIGZwcyk7Ci0gICAgdGFyZ2V0Qml0cmF0ZUJwcyA9IDEwMDAgKiBrYnBzOwotICAgIHRhcmdl
dEZwcyA9IGZwczsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3JNYXggPSB0YXJnZXRCaXRyYXRlQnBz
IC8gOC4wOwotICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IDA7Ci0gICAgYml0cmF0ZU9ic2VydmF0
aW9uVGltZU1zID0gMDsKLSAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwID0gMDsKLQotICAg
IG1lZGlhQ29kZWNUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgIHRyeSB7Ci0g
ICAgICBNZWRpYUZvcm1hdCBmb3JtYXQgPSBNZWRpYUZvcm1hdC5jcmVhdGVWaWRlb0Zvcm1hdCht
aW1lLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0
LktFWV9CSVRfUkFURSwgdGFyZ2V0Qml0cmF0ZUJwcyk7Ci0gICAgICBmb3JtYXQuc2V0SW50ZWdl
cigiYml0cmF0ZS1tb2RlIiwgVklERU9fQ29udHJvbFJhdGVDb25zdGFudCk7Ci0gICAgICBmb3Jt
YXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfQ09MT1JfRk9STUFULCBwcm9wZXJ0aWVzLmNv
bG9yRm9ybWF0KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9GUkFN
RV9SQVRFLCB0YXJnZXRGcHMpOwotICAgICAgZm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQu
S0VZX0lfRlJBTUVfSU5URVJWQUwsIGtleUZyYW1lSW50ZXJ2YWxTZWMpOwotICAgICAgTG9nZ2lu
Zy5kKFRBRywgIiAgRm9ybWF0OiAiICsgZm9ybWF0KTsKLSAgICAgIG1lZGlhQ29kZWMgPSBjcmVh
dGVCeUNvZGVjTmFtZShwcm9wZXJ0aWVzLmNvZGVjTmFtZSk7Ci0gICAgICB0aGlzLnR5cGUgPSB0
eXBlOwotICAgICAgaWYgKG1lZGlhQ29kZWMgPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmUo
VEFHLCAiQ2FuIG5vdCBjcmVhdGUgbWVkaWEgZW5jb2RlciIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICB9Ci0gICAgICBtZWRpYUNvZGVjLmNvbmZpZ3VyZShmb3JtYXQsIG51bGwsIG51
bGwsIE1lZGlhQ29kZWMuQ09ORklHVVJFX0ZMQUdfRU5DT0RFKTsKLQotICAgICAgaWYgKHVzZVN1
cmZhY2UpIHsKLSAgICAgICAgZWdsQmFzZSA9IG5ldyBFZ2xCYXNlMTQoc2hhcmVkQ29udGV4dCwg
RWdsQmFzZS5DT05GSUdfUkVDT1JEQUJMRSk7Ci0gICAgICAgIC8vIENyZWF0ZSBhbiBpbnB1dCBz
dXJmYWNlIGFuZCBrZWVwIGEgcmVmZXJlbmNlIHNpbmNlIHdlIG11c3QgcmVsZWFzZSB0aGUgc3Vy
ZmFjZSB3aGVuIGRvbmUuCi0gICAgICAgIGlucHV0U3VyZmFjZSA9IG1lZGlhQ29kZWMuY3JlYXRl
SW5wdXRTdXJmYWNlKCk7Ci0gICAgICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShpbnB1dFN1cmZh
Y2UpOwotICAgICAgICBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgICB9Ci0gICAg
ICBtZWRpYUNvZGVjLnN0YXJ0KCk7Ci0gICAgICBvdXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5n
ZXRPdXRwdXRCdWZmZXJzKCk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiT3V0cHV0IGJ1ZmZlcnM6
ICIgKyBvdXRwdXRCdWZmZXJzLmxlbmd0aCk7Ci0KLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVF
eGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImluaXRFbmNvZGUgZmFpbGVkIiwg
ZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0K
LSAgQnl0ZUJ1ZmZlcltdIGdldElucHV0QnVmZmVycygpIHsKLSAgICBCeXRlQnVmZmVyW10gaW5w
dXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRJbnB1dEJ1ZmZlcnMoKTsKLSAgICBMb2dnaW5nLmQo
VEFHLCAiSW5wdXQgYnVmZmVyczogIiArIGlucHV0QnVmZmVycy5sZW5ndGgpOwotICAgIHJldHVy
biBpbnB1dEJ1ZmZlcnM7Ci0gIH0KLQotICBib29sZWFuIGVuY29kZUJ1ZmZlcigKLSAgICAgIGJv
b2xlYW4gaXNLZXlmcmFtZSwgaW50IGlucHV0QnVmZmVyLCBpbnQgc2l6ZSwgbG9uZyBwcmVzZW50
YXRpb25UaW1lc3RhbXBVcykgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAg
dHJ5IHsKLSAgICAgIGlmIChpc0tleWZyYW1lKSB7Ci0gICAgICAgIC8vIElkZWFsbHkgTWVkaWFD
b2RlYyB3b3VsZCBob25vciBCVUZGRVJfRkxBR19TWU5DX0ZSQU1FIHNvIHdlIGNvdWxkCi0gICAg
ICAgIC8vIGluZGljYXRlIHRoaXMgaW4gcXVldWVJbnB1dEJ1ZmZlcigpIGJlbG93IGFuZCBndWFy
YW50ZWUgX3RoaXNfIGZyYW1lCi0gICAgICAgIC8vIGJlIGVuY29kZWQgYXMgYSBrZXkgZnJhbWUs
IGJ1dCBzYWRseSB0aGF0IGZsYWcgaXMgaWdub3JlZC4gIEluc3RlYWQsCi0gICAgICAgIC8vIHdl
IHJlcXVlc3QgYSBrZXkgZnJhbWUgInNvb24iLgotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3lu
YyBmcmFtZSByZXF1ZXN0Iik7Ci0gICAgICAgIEJ1bmRsZSBiID0gbmV3IEJ1bmRsZSgpOwotICAg
ICAgICBiLnB1dEludChNZWRpYUNvZGVjLlBBUkFNRVRFUl9LRVlfUkVRVUVTVF9TWU5DX0ZSQU1F
LCAwKTsKLSAgICAgICAgbWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzKGIpOwotICAgICAgfQotICAg
ICAgbWVkaWFDb2RlYy5xdWV1ZUlucHV0QnVmZmVyKGlucHV0QnVmZmVyLCAwLCBzaXplLCBwcmVz
ZW50YXRpb25UaW1lc3RhbXBVcywgMCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNo
IChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImVuY29k
ZUJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQot
ICBib29sZWFuIGVuY29kZVRleHR1cmUoYm9vbGVhbiBpc0tleWZyYW1lLCBpbnQgb2VzVGV4dHVy
ZUlkLCBmbG9hdFtdIHRyYW5zZm9ybWF0aW9uTWF0cml4LAotICAgICAgbG9uZyBwcmVzZW50YXRp
b25UaW1lc3RhbXBVcykgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5
IHsKLSAgICAgIGlmIChpc0tleWZyYW1lKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTeW5j
IGZyYW1lIHJlcXVlc3QiKTsKLSAgICAgICAgQnVuZGxlIGIgPSBuZXcgQnVuZGxlKCk7Ci0gICAg
ICAgIGIucHV0SW50KE1lZGlhQ29kZWMuUEFSQU1FVEVSX0tFWV9SRVFVRVNUX1NZTkNfRlJBTUUs
IDApOwotICAgICAgICBtZWRpYUNvZGVjLnNldFBhcmFtZXRlcnMoYik7Ci0gICAgICB9Ci0gICAg
ICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICAvLyBUT0RPKHBlcmtqKTogZ2xDbGVhcigp
IHNob3VsZG4ndCBiZSBuZWNlc3Nhcnkgc2luY2UgZXZlcnkgcGl4ZWwgaXMgY292ZXJlZCBhbnl3
YXksCi0gICAgICAvLyBidXQgaXQncyBhIHdvcmthcm91bmQgZm9yIGJ1ZyB3ZWJydGM6NTE0Ny4K
LSAgICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAg
IGRyYXdlci5kcmF3T2VzKG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtYXRpb25NYXRyaXgsIHdpZHRo
LCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgZWdsQmFzZS5zd2FwQnVmZmVy
cyhUaW1lVW5pdC5NSUNST1NFQ09ORFMudG9OYW5vcyhwcmVzZW50YXRpb25UaW1lc3RhbXBVcykp
OwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZW5jb2RlVGV4dHVyZSBmYWlsZWQiLCBlKTsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIiKTsKLSAgICBjaGVja09uTWVkaWFDb2Rl
Y1RocmVhZCgpOwotCi0gICAgLy8gUnVuIE1lZGlhY29kZWMgc3RvcCgpIGFuZCByZWxlYXNlKCkg
b24gc2VwYXJhdGUgdGhyZWFkIHNpbmNlIHNvbWV0aW1lCi0gICAgLy8gTWVkaWFjb2RlYy5zdG9w
KCkgbWF5IGhhbmcuCi0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggcmVsZWFzZURvbmUgPSBuZXcg
Q291bnREb3duTGF0Y2goMSk7Ci0KLSAgICBSdW5uYWJsZSBydW5NZWRpYUNvZGVjUmVsZWFzZSA9
IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVh
c2VFbmNvZGVyIG9uIHJlbGVhc2UgdGhyZWFkIik7Ci0gICAgICAgICAgbWVkaWFDb2RlYy5zdG9w
KCk7Ci0gICAgICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlKCk7Ci0gICAgICAgICAgTG9nZ2luZy5k
KFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIgb24gcmVsZWFzZSB0aHJlYWQgZG9uZSIpOwotICAg
ICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJN
ZWRpYSBlbmNvZGVyIHJlbGVhc2UgZmFpbGVkIiwgZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmVs
ZWFzZURvbmUuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBuZXcgVGhyZWFkKHJ1
bk1lZGlhQ29kZWNSZWxlYXNlKS5zdGFydCgpOwotCi0gICAgaWYgKCFUaHJlYWRVdGlscy5hd2Fp
dFVuaW50ZXJydXB0aWJseShyZWxlYXNlRG9uZSwgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VU
X01TKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGVuY29kZXIgcmVsZWFzZSB0aW1l
b3V0Iik7Ci0gICAgICBjb2RlY0Vycm9ycysrOwotICAgICAgaWYgKGVycm9yQ2FsbGJhY2sgIT0g
bnVsbCkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW52b2tlIGNvZGVjIGVycm9yIGNhbGxi
YWNrLiBFcnJvcnM6ICIgKyBjb2RlY0Vycm9ycyk7Ci0gICAgICAgIGVycm9yQ2FsbGJhY2sub25N
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyQ3JpdGljYWxFcnJvcihjb2RlY0Vycm9ycyk7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgbWVkaWFDb2RlYyA9IG51bGw7Ci0gICAgbWVkaWFDb2RlY1RocmVhZCA9
IG51bGw7Ci0gICAgaWYgKGRyYXdlciAhPSBudWxsKSB7Ci0gICAgICBkcmF3ZXIucmVsZWFzZSgp
OwotICAgICAgZHJhd2VyID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGVnbEJhc2UgIT0gbnVsbCkg
ewotICAgICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gICAgICBlZ2xCYXNlID0gbnVsbDsKLSAgICB9
Ci0gICAgaWYgKGlucHV0U3VyZmFjZSAhPSBudWxsKSB7Ci0gICAgICBpbnB1dFN1cmZhY2UucmVs
ZWFzZSgpOwotICAgICAgaW5wdXRTdXJmYWNlID0gbnVsbDsKLSAgICB9Ci0gICAgcnVubmluZ0lu
c3RhbmNlID0gbnVsbDsKLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRW5jb2RlciBk
b25lIik7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc2V0UmF0ZXMoaW50IGticHMsIGludCBm
cmFtZVJhdGUpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotCi0gICAgaW50IGNv
ZGVjQml0cmF0ZUJwcyA9IDEwMDAgKiBrYnBzOwotICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFR5
cGUgPT0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLkRZTkFNSUNfQURKVVNUTUVOVCkgewotICAgICAg
Yml0cmF0ZUFjY3VtdWxhdG9yTWF4ID0gY29kZWNCaXRyYXRlQnBzIC8gOC4wOwotICAgICAgaWYg
KHRhcmdldEJpdHJhdGVCcHMgPiAwICYmIGNvZGVjQml0cmF0ZUJwcyA8IHRhcmdldEJpdHJhdGVC
cHMpIHsKLSAgICAgICAgLy8gUmVzY2FsZSB0aGUgYWNjdW11bGF0b3IgbGV2ZWwgaWYgdGhlIGFj
Y3VtdWxhdG9yIG1heCBkZWNyZWFzZXMKLSAgICAgICAgYml0cmF0ZUFjY3VtdWxhdG9yID0gYml0
cmF0ZUFjY3VtdWxhdG9yICogY29kZWNCaXRyYXRlQnBzIC8gdGFyZ2V0Qml0cmF0ZUJwczsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgdGFyZ2V0Qml0cmF0ZUJwcyA9IGNvZGVjQml0cmF0ZUJwczsKLSAg
ICB0YXJnZXRGcHMgPSBmcmFtZVJhdGU7Ci0KLSAgICAvLyBBZGp1c3QgYWN0dWFsIGVuY29kZXIg
Yml0cmF0ZSBiYXNlZCBvbiBiaXRyYXRlIGFkanVzdG1lbnQgdHlwZS4KLSAgICBpZiAoYml0cmF0
ZUFkanVzdG1lbnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5GUkFNRVJBVEVfQURKVVNU
TUVOVCAmJiB0YXJnZXRGcHMgPiAwKSB7Ci0gICAgICBjb2RlY0JpdHJhdGVCcHMgPSBCSVRSQVRF
X0FESlVTVE1FTlRfRlBTICogdGFyZ2V0Qml0cmF0ZUJwcyAvIHRhcmdldEZwczsKLSAgICAgIExv
Z2dpbmcudihUQUcsCi0gICAgICAgICAgInNldFJhdGVzOiAiICsga2JwcyArICIgLT4gIiArIChj
b2RlY0JpdHJhdGVCcHMgLyAxMDAwKSArICIga2Jwcy4gRnBzOiAiICsgdGFyZ2V0RnBzKTsKLSAg
ICB9IGVsc2UgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRqdXN0bWVudFR5
cGUuRFlOQU1JQ19BREpVU1RNRU5UKSB7Ci0gICAgICBMb2dnaW5nLnYoVEFHLCAic2V0UmF0ZXM6
ICIgKyBrYnBzICsgIiBrYnBzLiBGcHM6ICIgKyB0YXJnZXRGcHMgKyAiLiBFeHBTY2FsZTogIgot
ICAgICAgICAgICAgICArIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHApOwotICAgICAgaWYgKGJp
dHJhdGVBZGp1c3RtZW50U2NhbGVFeHAgIT0gMCkgewotICAgICAgICBjb2RlY0JpdHJhdGVCcHMg
PSAoaW50KSAoY29kZWNCaXRyYXRlQnBzICogZ2V0Qml0cmF0ZVNjYWxlKGJpdHJhdGVBZGp1c3Rt
ZW50U2NhbGVFeHApKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgTG9nZ2luZy52KFRB
RywgInNldFJhdGVzOiAiICsga2JwcyArICIga2Jwcy4gRnBzOiAiICsgdGFyZ2V0RnBzKTsKLSAg
ICB9Ci0KLSAgICB0cnkgewotICAgICAgQnVuZGxlIHBhcmFtcyA9IG5ldyBCdW5kbGUoKTsKLSAg
ICAgIHBhcmFtcy5wdXRJbnQoTWVkaWFDb2RlYy5QQVJBTUVURVJfS0VZX1ZJREVPX0JJVFJBVEUs
IGNvZGVjQml0cmF0ZUJwcyk7Ci0gICAgICBtZWRpYUNvZGVjLnNldFBhcmFtZXRlcnMocGFyYW1z
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlv
biBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAic2V0UmF0ZXMgZmFpbGVkIiwgZSk7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gRGVxdWV1ZSBhbiBpbnB1dCBidWZm
ZXIgYW5kIHJldHVybiBpdHMgaW5kZXgsIC0xIGlmIG5vIGlucHV0IGJ1ZmZlciBpcwotICAvLyBh
dmFpbGFibGUsIG9yIC0yIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIgb3BlcmF0aXZlLgotICBp
bnQgZGVxdWV1ZUlucHV0QnVmZmVyKCkgewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7
Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBtZWRpYUNvZGVjLmRlcXVldWVJbnB1dEJ1ZmZlcihE
RVFVRVVFX1RJTUVPVVQpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZGVxdWV1ZUludHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsK
LSAgICAgIHJldHVybiAtMjsKLSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZvciBk
ZXF1ZXVlT3V0cHV0QnVmZmVyKCkgYmVsb3cuCi0gIHN0YXRpYyBjbGFzcyBPdXRwdXRCdWZmZXJJ
bmZvIHsKLSAgICBwdWJsaWMgT3V0cHV0QnVmZmVySW5mbygKLSAgICAgICAgaW50IGluZGV4LCBC
eXRlQnVmZmVyIGJ1ZmZlciwgYm9vbGVhbiBpc0tleUZyYW1lLCBsb25nIHByZXNlbnRhdGlvblRp
bWVzdGFtcFVzKSB7Ci0gICAgICB0aGlzLmluZGV4ID0gaW5kZXg7Ci0gICAgICB0aGlzLmJ1ZmZl
ciA9IGJ1ZmZlcjsKLSAgICAgIHRoaXMuaXNLZXlGcmFtZSA9IGlzS2V5RnJhbWU7Ci0gICAgICB0
aGlzLnByZXNlbnRhdGlvblRpbWVzdGFtcFVzID0gcHJlc2VudGF0aW9uVGltZXN0YW1wVXM7Ci0g
ICAgfQotCi0gICAgcHVibGljIGZpbmFsIGludCBpbmRleDsKLSAgICBwdWJsaWMgZmluYWwgQnl0
ZUJ1ZmZlciBidWZmZXI7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaXNLZXlGcmFtZTsKLSAg
ICBwdWJsaWMgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UaW1lc3RhbXBVczsKLSAgfQotCi0gIC8v
IERlcXVldWUgYW5kIHJldHVybiBhbiBvdXRwdXQgYnVmZmVyLCBvciBudWxsIGlmIG5vIG91dHB1
dCBpcyByZWFkeS4gIFJldHVybgotICAvLyBhIGZha2UgT3V0cHV0QnVmZmVySW5mbyB3aXRoIGlu
ZGV4IC0xIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIgb3BlcmFibGUuCi0gIE91dHB1dEJ1ZmZl
ckluZm8gZGVxdWV1ZU91dHB1dEJ1ZmZlcigpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVh
ZCgpOwotICAgIHRyeSB7Ci0gICAgICBNZWRpYUNvZGVjLkJ1ZmZlckluZm8gaW5mbyA9IG5ldyBN
ZWRpYUNvZGVjLkJ1ZmZlckluZm8oKTsKLSAgICAgIGludCByZXN1bHQgPSBtZWRpYUNvZGVjLmRl
cXVldWVPdXRwdXRCdWZmZXIoaW5mbywgREVRVUVVRV9USU1FT1VUKTsKLSAgICAgIC8vIENoZWNr
IGlmIHRoaXMgaXMgY29uZmlnIGZyYW1lIGFuZCBzYXZlIGNvbmZpZ3VyYXRpb24gZGF0YS4KLSAg
ICAgIGlmIChyZXN1bHQgPj0gMCkgewotICAgICAgICBib29sZWFuIGlzQ29uZmlnRnJhbWUgPSAo
aW5mby5mbGFncyAmIE1lZGlhQ29kZWMuQlVGRkVSX0ZMQUdfQ09ERUNfQ09ORklHKSAhPSAwOwot
ICAgICAgICBpZiAoaXNDb25maWdGcmFtZSkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJD
b25maWcgZnJhbWUgZ2VuZXJhdGVkLiBPZmZzZXQ6ICIgKyBpbmZvLm9mZnNldCArICIuIFNpemU6
ICIgKyBpbmZvLnNpemUpOwotICAgICAgICAgIGNvbmZpZ0RhdGEgPSBCeXRlQnVmZmVyLmFsbG9j
YXRlRGlyZWN0KGluZm8uc2l6ZSk7Ci0gICAgICAgICAgb3V0cHV0QnVmZmVyc1tyZXN1bHRdLnBv
c2l0aW9uKGluZm8ub2Zmc2V0KTsKLSAgICAgICAgICBvdXRwdXRCdWZmZXJzW3Jlc3VsdF0ubGlt
aXQoaW5mby5vZmZzZXQgKyBpbmZvLnNpemUpOwotICAgICAgICAgIGNvbmZpZ0RhdGEucHV0KG91
dHB1dEJ1ZmZlcnNbcmVzdWx0XSk7Ci0gICAgICAgICAgLy8gUmVsZWFzZSBidWZmZXIgYmFjay4K
LSAgICAgICAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIocmVzdWx0LCBmYWxzZSk7
Ci0gICAgICAgICAgLy8gUXVlcnkgbmV4dCBvdXRwdXQuCi0gICAgICAgICAgcmVzdWx0ID0gbWVk
aWFDb2RlYy5kZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8sIERFUVVFVUVfVElNRU9VVCk7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChyZXN1bHQgPj0gMCkgewotICAgICAgICAvLyBNZWRp
YUNvZGVjIGRvZXNuJ3QgY2FyZSBhYm91dCBCdWZmZXIgcG9zaXRpb24vcmVtYWluaW5nL2V0YyBz
byB3ZSBjYW4KLSAgICAgICAgLy8gbWVzcyB3aXRoIHRoZW0gdG8gZ2V0IGEgc2xpY2UgYW5kIGF2
b2lkIGhhdmluZyB0byBwYXNzIGV4dHJhCi0gICAgICAgIC8vIChCdWZmZXJJbmZvLXJlbGF0ZWQp
IHBhcmFtZXRlcnMgYmFjayB0byBDKysuCi0gICAgICAgIEJ5dGVCdWZmZXIgb3V0cHV0QnVmZmVy
ID0gb3V0cHV0QnVmZmVyc1tyZXN1bHRdLmR1cGxpY2F0ZSgpOwotICAgICAgICBvdXRwdXRCdWZm
ZXIucG9zaXRpb24oaW5mby5vZmZzZXQpOwotICAgICAgICBvdXRwdXRCdWZmZXIubGltaXQoaW5m
by5vZmZzZXQgKyBpbmZvLnNpemUpOwotICAgICAgICByZXBvcnRFbmNvZGVkRnJhbWUoaW5mby5z
aXplKTsKLQotICAgICAgICAvLyBDaGVjayBrZXkgZnJhbWUgZmxhZy4KLSAgICAgICAgYm9vbGVh
biBpc0tleUZyYW1lID0gKGluZm8uZmxhZ3MgJiBNZWRpYUNvZGVjLkJVRkZFUl9GTEFHX1NZTkNf
RlJBTUUpICE9IDA7Ci0gICAgICAgIGlmIChpc0tleUZyYW1lKSB7Ci0gICAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgIlN5bmMgZnJhbWUgZ2VuZXJhdGVkIik7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGlzS2V5RnJhbWUgJiYgdHlwZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19IMjY0KSB7
Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkFwcGVuZGluZyBjb25maWcgZnJhbWUgb2Ygc2l6
ZSAiICsgY29uZmlnRGF0YS5jYXBhY2l0eSgpCi0gICAgICAgICAgICAgICAgICArICIgdG8gb3V0
cHV0IGJ1ZmZlciB3aXRoIG9mZnNldCAiICsgaW5mby5vZmZzZXQgKyAiLCBzaXplICIgKyBpbmZv
LnNpemUpOwotICAgICAgICAgIC8vIEZvciBILjI2NCBrZXkgZnJhbWUgYXBwZW5kIFNQUyBhbmQg
UFBTIE5BTHMgYXQgdGhlIHN0YXJ0Ci0gICAgICAgICAgQnl0ZUJ1ZmZlciBrZXlGcmFtZUJ1ZmZl
ciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoY29uZmlnRGF0YS5jYXBhY2l0eSgpICsgaW5m
by5zaXplKTsKLSAgICAgICAgICBjb25maWdEYXRhLnJld2luZCgpOwotICAgICAgICAgIGtleUZy
YW1lQnVmZmVyLnB1dChjb25maWdEYXRhKTsKLSAgICAgICAgICBrZXlGcmFtZUJ1ZmZlci5wdXQo
b3V0cHV0QnVmZmVyKTsKLSAgICAgICAgICBrZXlGcmFtZUJ1ZmZlci5wb3NpdGlvbigwKTsKLSAg
ICAgICAgICByZXR1cm4gbmV3IE91dHB1dEJ1ZmZlckluZm8ocmVzdWx0LCBrZXlGcmFtZUJ1ZmZl
ciwgaXNLZXlGcmFtZSwgaW5mby5wcmVzZW50YXRpb25UaW1lVXMpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgIHJldHVybiBuZXcgT3V0cHV0QnVmZmVySW5mbygKLSAgICAgICAgICAgICAg
cmVzdWx0LCBvdXRwdXRCdWZmZXIuc2xpY2UoKSwgaXNLZXlGcmFtZSwgaW5mby5wcmVzZW50YXRp
b25UaW1lVXMpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNv
ZGVjLklORk9fT1VUUFVUX0JVRkZFUlNfQ0hBTkdFRCkgewotICAgICAgICBvdXRwdXRCdWZmZXJz
ID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRCdWZmZXJzKCk7Ci0gICAgICAgIHJldHVybiBkZXF1ZXVl
T3V0cHV0QnVmZmVyKCk7Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNvZGVjLklO
Rk9fT1VUUFVUX0ZPUk1BVF9DSEFOR0VEKSB7Ci0gICAgICAgIHJldHVybiBkZXF1ZXVlT3V0cHV0
QnVmZmVyKCk7Ci0gICAgICB9IGVsc2UgaWYgKHJlc3VsdCA9PSBNZWRpYUNvZGVjLklORk9fVFJZ
X0FHQUlOX0xBVEVSKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImRlcXVldWVPdXRwdXRCdWZmZXI6ICIgKyByZXN1bHQp
OwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAiZGVxdWV1ZU91dHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBu
ZXcgT3V0cHV0QnVmZmVySW5mbygtMSwgbnVsbCwgZmFsc2UsIC0xKTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIGRvdWJsZSBnZXRCaXRyYXRlU2NhbGUoaW50IGJpdHJhdGVBZGp1c3RtZW50U2Nh
bGVFeHApIHsKLSAgICByZXR1cm4gTWF0aC5wb3coQklUUkFURV9DT1JSRUNUSU9OX01BWF9TQ0FM
RSwKLSAgICAgICAgKGRvdWJsZSkgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCAvIEJJVFJBVEVf
Q09SUkVDVElPTl9TVEVQUyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0RW5jb2RlZEZy
YW1lKGludCBzaXplKSB7Ci0gICAgaWYgKHRhcmdldEZwcyA9PSAwIHx8IGJpdHJhdGVBZGp1c3Rt
ZW50VHlwZSAhPSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuRFlOQU1JQ19BREpVU1RNRU5UKSB7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQWNjdW11bGF0ZSB0aGUgZGlmZmVyZW5jZSBi
ZXR3ZWVuIGFjdGlhbCBhbmQgZXhwZWN0ZWQgZnJhbWUgc2l6ZXMuCi0gICAgZG91YmxlIGV4cGVj
dGVkQnl0ZXNQZXJGcmFtZSA9IHRhcmdldEJpdHJhdGVCcHMgLyAoOC4wICogdGFyZ2V0RnBzKTsK
LSAgICBiaXRyYXRlQWNjdW11bGF0b3IgKz0gKHNpemUgLSBleHBlY3RlZEJ5dGVzUGVyRnJhbWUp
OwotICAgIGJpdHJhdGVPYnNlcnZhdGlvblRpbWVNcyArPSAxMDAwLjAgLyB0YXJnZXRGcHM7Ci0K
LSAgICAvLyBQdXQgYSBjYXAgb24gdGhlIGFjY3VtdWxhdG9yLCBpLmUuLCBkb24ndCBsZXQgaXQg
Z3JvdyBiZXlvbmQgc29tZSBsZXZlbCB0byBhdm9pZAotICAgIC8vIHVzaW5nIHRvbyBvbGQgZGF0
YSBmb3IgYml0cmF0ZSBhZGp1c3RtZW50LgotICAgIGRvdWJsZSBiaXRyYXRlQWNjdW11bGF0b3JD
YXAgPSBCSVRSQVRFX0NPUlJFQ1RJT05fU0VDICogYml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICAg
IGJpdHJhdGVBY2N1bXVsYXRvciA9IE1hdGgubWluKGJpdHJhdGVBY2N1bXVsYXRvciwgYml0cmF0
ZUFjY3VtdWxhdG9yQ2FwKTsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBNYXRoLm1heChiaXRy
YXRlQWNjdW11bGF0b3IsIC1iaXRyYXRlQWNjdW11bGF0b3JDYXApOwotCi0gICAgLy8gRG8gYml0
cmF0ZSBhZGp1c3RtZW50IGV2ZXJ5IDMgc2Vjb25kcyBpZiBhY3R1YWwgZW5jb2RlciBiaXRyYXRl
IGRldmlhdGVzIHRvbyBtdWNoCi0gICAgLy8gZm9ybSB0aGUgdGFyZ2V0IHZhbHVlLgotICAgIGlm
IChiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgPiAxMDAwICogQklUUkFURV9DT1JSRUNUSU9OX1NF
QykgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkFjYzogIiArIChpbnQpIGJpdHJhdGVBY2N1bXVs
YXRvciArICIuIE1heDogIiArIChpbnQpIGJpdHJhdGVBY2N1bXVsYXRvck1heAotICAgICAgICAg
ICAgICArICIuIEV4cFNjYWxlOiAiICsgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCk7Ci0gICAg
ICBib29sZWFuIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVDaGFuZ2VkID0gZmFsc2U7Ci0gICAgICBp
ZiAoYml0cmF0ZUFjY3VtdWxhdG9yID4gYml0cmF0ZUFjY3VtdWxhdG9yTWF4KSB7Ci0gICAgICAg
IC8vIEVuY29kZXIgZ2VuZXJhdGVzIHRvbyBoaWdoIGJpdHJhdGUgLSBuZWVkIHRvIHJlZHVjZSB0
aGUgc2NhbGUuCi0gICAgICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IGJpdHJhdGVBY2N1bXVsYXRv
ck1heDsKLSAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cC0tOwotICAgICAgICBiaXRy
YXRlQWRqdXN0bWVudFNjYWxlQ2hhbmdlZCA9IHRydWU7Ci0gICAgICB9IGVsc2UgaWYgKGJpdHJh
dGVBY2N1bXVsYXRvciA8IC1iaXRyYXRlQWNjdW11bGF0b3JNYXgpIHsKLSAgICAgICAgLy8gRW5j
b2RlciBnZW5lcmF0ZXMgdG9vIGxvdyBiaXRyYXRlIC0gbmVlZCB0byBpbmNyZWFzZSB0aGUgc2Nh
bGUuCi0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHArKzsKLSAgICAgICAgYml0cmF0
ZUFjY3VtdWxhdG9yID0gLWJpdHJhdGVBY2N1bXVsYXRvck1heDsKLSAgICAgICAgYml0cmF0ZUFk
anVzdG1lbnRTY2FsZUNoYW5nZWQgPSB0cnVlOwotICAgICAgfQotICAgICAgaWYgKGJpdHJhdGVB
ZGp1c3RtZW50U2NhbGVDaGFuZ2VkKSB7Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVF
eHAgPSBNYXRoLm1pbihiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwLCBCSVRSQVRFX0NPUlJFQ1RJ
T05fU1RFUFMpOwotICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwID0gTWF0aC5tYXgo
Yml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCwgLUJJVFJBVEVfQ09SUkVDVElPTl9TVEVQUyk7Ci0g
ICAgICAgIExvZ2dpbmcuZChUQUcsICJBZGp1c3RpbmcgYml0cmF0ZSBzY2FsZSB0byAiICsgYml0
cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCArICIuIFZhbHVlOiAiCi0gICAgICAgICAgICAgICAgKyBn
ZXRCaXRyYXRlU2NhbGUoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCkpOwotICAgICAgICBzZXRS
YXRlcyh0YXJnZXRCaXRyYXRlQnBzIC8gMTAwMCwgdGFyZ2V0RnBzKTsKLSAgICAgIH0KLSAgICAg
IGJpdHJhdGVPYnNlcnZhdGlvblRpbWVNcyA9IDA7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVsZWFz
ZSBhIGRlcXVldWVkIG91dHB1dCBidWZmZXIgYmFjayB0byB0aGUgY29kZWMgZm9yIHJlLXVzZS4g
IFJldHVybgotICAvLyBmYWxzZSBpZiB0aGUgY29kZWMgaXMgbm8gbG9uZ2VyIG9wZXJhYmxlLgot
ICBib29sZWFuIHJlbGVhc2VPdXRwdXRCdWZmZXIoaW50IGluZGV4KSB7Ci0gICAgY2hlY2tPbk1l
ZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlT3V0
cHV0QnVmZmVyKGluZGV4LCBmYWxzZSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNo
IChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInJlbGVh
c2VPdXRwdXRCdWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29uc3RyYWludHMuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29uc3RyYWludHMuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvbnN0cmFpbnRzLmphdmEJKG5v
bmV4aXN0ZW50KQpAQCAtMSw4NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLQotLyoqCi0gKiBEZXNjcmlwdGlvbiBvZiBtZWRpYSBjb25zdHJhaW50cyBm
b3Ige0Bjb2RlIE1lZGlhU3RyZWFtfSBhbmQKLSAqIHtAY29kZSBQZWVyQ29ubmVjdGlvbn0uCi0g
Ki8KLXB1YmxpYyBjbGFzcyBNZWRpYUNvbnN0cmFpbnRzIHsKLSAgLyoqIFNpbXBsZSBTdHJpbmcg
a2V5L3ZhbHVlIHBhaXIuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgS2V5VmFsdWVQYWlyIHsK
LSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBrZXk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcg
dmFsdWU7Ci0KLSAgICBwdWJsaWMgS2V5VmFsdWVQYWlyKFN0cmluZyBrZXksIFN0cmluZyB2YWx1
ZSkgewotICAgICAgdGhpcy5rZXkgPSBrZXk7Ci0gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0g
ICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRLZXkoKSB7Ci0gICAgICByZXR1cm4ga2V5Owot
ICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VmFsdWUoKSB7Ci0gICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVy
biBrZXkgKyAiOiAiICsgdmFsdWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IGJvb2xlYW4gZXF1YWxzKE9iamVjdCBvdGhlcikgewotICAgICAgaWYgKHRoaXMgPT0gb3RoZXIp
IHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICBpZiAob3RoZXIgPT0gbnVs
bCB8fCBnZXRDbGFzcygpICE9IG90aGVyLmdldENsYXNzKCkpIHsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgICAgS2V5VmFsdWVQYWlyIHRoYXQgPSAoS2V5VmFsdWVQYWlyKSBv
dGhlcjsKLSAgICAgIHJldHVybiBrZXkuZXF1YWxzKHRoYXQua2V5KSAmJiB2YWx1ZS5lcXVhbHMo
dGhhdC52YWx1ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNo
Q29kZSgpIHsKLSAgICAgIHJldHVybiBrZXkuaGFzaENvZGUoKSArIHZhbHVlLmhhc2hDb2RlKCk7
Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpc3Q8S2V5VmFsdWVQYWlyPiBtYW5kYXRv
cnk7Ci0gIHB1YmxpYyBmaW5hbCBMaXN0PEtleVZhbHVlUGFpcj4gb3B0aW9uYWw7Ci0KLSAgcHVi
bGljIE1lZGlhQ29uc3RyYWludHMoKSB7Ci0gICAgbWFuZGF0b3J5ID0gbmV3IExpbmtlZExpc3Q8
S2V5VmFsdWVQYWlyPigpOwotICAgIG9wdGlvbmFsID0gbmV3IExpbmtlZExpc3Q8S2V5VmFsdWVQ
YWlyPigpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0cmluZ2lmeUtleVZhbHVl
UGFpckxpc3QoTGlzdDxLZXlWYWx1ZVBhaXI+IGxpc3QpIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigiWyIpOwotICAgIGZvciAoS2V5VmFsdWVQYWlyIHBh
aXIgOiBsaXN0KSB7Ci0gICAgICBpZiAoYnVpbGRlci5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICB9Ci0gICAgICBidWlsZGVyLmFwcGVuZChwYWly
LnRvU3RyaW5nKCkpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci5hcHBlbmQoIl0iKS50b1N0
cmluZygpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4g
Im1hbmRhdG9yeTogIiArIHN0cmluZ2lmeUtleVZhbHVlUGFpckxpc3QobWFuZGF0b3J5KSArICIs
IG9wdGlvbmFsOiAiCi0gICAgICAgICsgc3RyaW5naWZ5S2V5VmFsdWVQYWlyTGlzdChvcHRpb25h
bCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTb3VyY2UuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU291cmNlLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTb3VyY2UuamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgTWVkaWFTb3VyY2VJbnRlcmZhY2UuICov
Ci1wdWJsaWMgY2xhc3MgTWVkaWFTb3VyY2UgewotICAvKiogVHJhY2tzIE1lZGlhU291cmNlSW50
ZXJmYWNlLlNvdXJjZVN0YXRlICovCi0gIHB1YmxpYyBlbnVtIFN0YXRlIHsgSU5JVElBTElaSU5H
LCBMSVZFLCBFTkRFRCwgTVVURUQgfQotCi0gIGZpbmFsIGxvbmcgbmF0aXZlU291cmNlOyAvLyBQ
YWNrYWdlLXByb3RlY3RlZCBmb3IgUGVlckNvbm5lY3Rpb25GYWN0b3J5LgotCi0gIHB1YmxpYyBN
ZWRpYVNvdXJjZShsb25nIG5hdGl2ZVNvdXJjZSkgewotICAgIHRoaXMubmF0aXZlU291cmNlID0g
bmF0aXZlU291cmNlOwotICB9Ci0KLSAgcHVibGljIFN0YXRlIHN0YXRlKCkgewotICAgIHJldHVy
biBuYXRpdmVTdGF0ZShuYXRpdmVTb3VyY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9z
ZSgpIHsKLSAgICBmcmVlKG5hdGl2ZVNvdXJjZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBu
YXRpdmUgU3RhdGUgbmF0aXZlU3RhdGUobG9uZyBwb2ludGVyKTsKLQotICBwcml2YXRlIHN0YXRp
YyBuYXRpdmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlU291cmNlKTsKLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvTWVkaWFTdHJlYW0uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L01lZGlhU3RyZWFtLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
TWVkaWFTdHJlYW0uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEwNiArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlu
a2VkTGlzdDsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgTWVkaWFTdHJlYW1JbnRlcmZh
Y2UuICovCi1wdWJsaWMgY2xhc3MgTWVkaWFTdHJlYW0gewotICBwdWJsaWMgZmluYWwgTGlua2Vk
TGlzdDxBdWRpb1RyYWNrPiBhdWRpb1RyYWNrczsKLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8
VmlkZW9UcmFjaz4gdmlkZW9UcmFja3M7Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRMaXN0PFZpZGVv
VHJhY2s+IHByZXNlcnZlZFZpZGVvVHJhY2tzOwotICAvLyBQYWNrYWdlLXByb3RlY3RlZCBmb3Ig
UGVlckNvbm5lY3Rpb24uCi0gIGZpbmFsIGxvbmcgbmF0aXZlU3RyZWFtOwotCi0gIHB1YmxpYyBN
ZWRpYVN0cmVhbShsb25nIG5hdGl2ZVN0cmVhbSkgewotICAgIGF1ZGlvVHJhY2tzID0gbmV3IExp
bmtlZExpc3Q8QXVkaW9UcmFjaz4oKTsKLSAgICB2aWRlb1RyYWNrcyA9IG5ldyBMaW5rZWRMaXN0
PFZpZGVvVHJhY2s+KCk7Ci0gICAgcHJlc2VydmVkVmlkZW9UcmFja3MgPSBuZXcgTGlua2VkTGlz
dDxWaWRlb1RyYWNrPigpOwotICAgIHRoaXMubmF0aXZlU3RyZWFtID0gbmF0aXZlU3RyZWFtOwot
ICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkVHJhY2soQXVkaW9UcmFjayB0cmFjaykgewotICAg
IGlmIChuYXRpdmVBZGRBdWRpb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZlVHJhY2sp
KSB7Ci0gICAgICBhdWRpb1RyYWNrcy5hZGQodHJhY2spOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZFRyYWNr
KFZpZGVvVHJhY2sgdHJhY2spIHsKLSAgICBpZiAobmF0aXZlQWRkVmlkZW9UcmFjayhuYXRpdmVT
dHJlYW0sIHRyYWNrLm5hdGl2ZVRyYWNrKSkgewotICAgICAgdmlkZW9UcmFja3MuYWRkKHRyYWNr
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQot
ICAvLyBUcmFja3MgYWRkZWQgaW4gYWRkVHJhY2soKSBjYWxsIHdpbGwgYmUgYXV0byByZWxlYXNl
ZCBvbmNlIE1lZGlhU3RyZWFtLmRpc3Bvc2UoKQotICAvLyBpcyBjYWxsZWQuIElmIHZpZGVvIHRy
YWNrIG5lZWQgdG8gYmUgcHJlc2VydmVkIGFmdGVyIE1lZGlhU3RyZWFtIGlzIGRlc3Ryb3llZCBp
dAotICAvLyBzaG91bGQgYmUgYWRkZWQgdG8gTWVkaWFTdHJlYW0gdXNpbmcgYWRkUHJlc2VydmVk
VHJhY2soKSBjYWxsLgotICBwdWJsaWMgYm9vbGVhbiBhZGRQcmVzZXJ2ZWRUcmFjayhWaWRlb1Ry
YWNrIHRyYWNrKSB7Ci0gICAgaWYgKG5hdGl2ZUFkZFZpZGVvVHJhY2sobmF0aXZlU3RyZWFtLCB0
cmFjay5uYXRpdmVUcmFjaykpIHsKLSAgICAgIHByZXNlcnZlZFZpZGVvVHJhY2tzLmFkZCh0cmFj
ayk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgcHVibGljIGJvb2xlYW4gcmVtb3ZlVHJhY2soQXVkaW9UcmFjayB0cmFjaykgewotICAgIGF1
ZGlvVHJhY2tzLnJlbW92ZSh0cmFjayk7Ci0gICAgcmV0dXJuIG5hdGl2ZVJlbW92ZUF1ZGlvVHJh
Y2sobmF0aXZlU3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgYm9v
bGVhbiByZW1vdmVUcmFjayhWaWRlb1RyYWNrIHRyYWNrKSB7Ci0gICAgdmlkZW9UcmFja3MucmVt
b3ZlKHRyYWNrKTsKLSAgICBwcmVzZXJ2ZWRWaWRlb1RyYWNrcy5yZW1vdmUodHJhY2spOwotICAg
IHJldHVybiBuYXRpdmVSZW1vdmVWaWRlb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZl
VHJhY2spOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICAvLyBSZW1vdmUg
YW5kIHJlbGVhc2UgcHJldmlvdXNseSBhZGRlZCBhdWRpbyBhbmQgdmlkZW8gdHJhY2tzLgotICAg
IHdoaWxlICghYXVkaW9UcmFja3MuaXNFbXB0eSgpKSB7Ci0gICAgICBBdWRpb1RyYWNrIHRyYWNr
ID0gYXVkaW9UcmFja3MuZ2V0Rmlyc3QoKTsKLSAgICAgIHJlbW92ZVRyYWNrKHRyYWNrKTsKLSAg
ICAgIHRyYWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgd2hpbGUgKCF2aWRlb1RyYWNrcy5pc0Vt
cHR5KCkpIHsKLSAgICAgIFZpZGVvVHJhY2sgdHJhY2sgPSB2aWRlb1RyYWNrcy5nZXRGaXJzdCgp
OwotICAgICAgcmVtb3ZlVHJhY2sodHJhY2spOwotICAgICAgdHJhY2suZGlzcG9zZSgpOwotICAg
IH0KLSAgICAvLyBSZW1vdmUsIGJ1dCBkbyBub3QgcmVsZWFzZSBwcmVzZXJ2ZWQgdmlkZW8gdHJh
Y2tzLgotICAgIHdoaWxlICghcHJlc2VydmVkVmlkZW9UcmFja3MuaXNFbXB0eSgpKSB7Ci0gICAg
ICByZW1vdmVUcmFjayhwcmVzZXJ2ZWRWaWRlb1RyYWNrcy5nZXRGaXJzdCgpKTsKLSAgICB9Ci0g
ICAgZnJlZShuYXRpdmVTdHJlYW0pOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBsYWJlbCgpIHsK
LSAgICByZXR1cm4gbmF0aXZlTGFiZWwobmF0aXZlU3RyZWFtKTsKLSAgfQotCi0gIHB1YmxpYyBT
dHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJuICJbIiArIGxhYmVsKCkgKyAiOkE9IiArIGF1
ZGlvVHJhY2tzLnNpemUoKSArICI6Vj0iICsgdmlkZW9UcmFja3Muc2l6ZSgpICsgIl0iOwotICB9
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRkQXVkaW9UcmFjayhs
b25nIG5hdGl2ZVN0cmVhbSwgbG9uZyBuYXRpdmVBdWRpb1RyYWNrKTsKLQotICBwcml2YXRlIHN0
YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRWaWRlb1RyYWNrKGxvbmcgbmF0aXZlU3RyZWFt
LCBsb25nIG5hdGl2ZVZpZGVvVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29s
ZWFuIG5hdGl2ZVJlbW92ZUF1ZGlvVHJhY2sobG9uZyBuYXRpdmVTdHJlYW0sIGxvbmcgbmF0aXZl
QXVkaW9UcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlUmVt
b3ZlVmlkZW9UcmFjayhsb25nIG5hdGl2ZVN0cmVhbSwgbG9uZyBuYXRpdmVWaWRlb1RyYWNrKTsK
LQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIG5hdGl2ZUxhYmVsKGxvbmcgbmF0aXZl
U3RyZWFtKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZl
U3RyZWFtKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU3RyZWFtVHJhY2suamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgTWVkaWFTdHJl
YW1UcmFja0ludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVN0cmVhbVRyYWNrIHsKLSAg
LyoqIFRyYWNrcyBNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlLlRyYWNrU3RhdGUgKi8KLSAgcHVi
bGljIGVudW0gU3RhdGUgeyBMSVZFLCBFTkRFRCB9Ci0KLSAgZmluYWwgbG9uZyBuYXRpdmVUcmFj
azsKLQotICBwdWJsaWMgTWVkaWFTdHJlYW1UcmFjayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAg
dGhpcy5uYXRpdmVUcmFjayA9IG5hdGl2ZVRyYWNrOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBp
ZCgpIHsKLSAgICByZXR1cm4gbmF0aXZlSWQobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGlj
IFN0cmluZyBraW5kKCkgewotICAgIHJldHVybiBuYXRpdmVLaW5kKG5hdGl2ZVRyYWNrKTsKLSAg
fQotCi0gIHB1YmxpYyBib29sZWFuIGVuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUVuYWJs
ZWQobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0RW5hYmxlZChib29s
ZWFuIGVuYWJsZSkgewotICAgIHJldHVybiBuYXRpdmVTZXRFbmFibGVkKG5hdGl2ZVRyYWNrLCBl
bmFibGUpOwotICB9Ci0KLSAgcHVibGljIFN0YXRlIHN0YXRlKCkgewotICAgIHJldHVybiBuYXRp
dmVTdGF0ZShuYXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewot
ICAgIGZyZWUobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0
cmluZyBuYXRpdmVJZChsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgU3RyaW5nIG5hdGl2ZUtpbmQobG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlRW5hYmxlZChsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRFbmFibGVkKGxvbmcgbmF0aXZl
VHJhY2ssIGJvb2xlYW4gZW5hYmxlZCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0YXRl
IG5hdGl2ZVN0YXRlKGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2
ZSB2b2lkIGZyZWUobG9uZyBuYXRpdmVUcmFjayk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L01ldHJpY3MuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01ldHJpY3MuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZXRyaWNzLmphdmEJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxMTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2Fn
ZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51
dGlsLk1hcDsKLQotLy8gSmF2YS1zaWRlIG9mIGFuZHJvaWRtZXRyaWNzX2puaS5jYy4KLS8vCi0v
LyBSdGMgaGlzdG9ncmFtcyBjYW4gYmUgcXVlcmllZCB0aHJvdWdoIHRoZSBBUEksIGdldEFuZFJl
c2V0KCkuCi0vLyBUaGUgcmV0dXJuZWQgbWFwIGhvbGRzIHRoZSBuYW1lIG9mIGEgaGlzdG9ncmFt
IGFuZCBpdHMgc2FtcGxlcy4KLS8vCi0vLyBFeGFtcGxlIG9mIHxtYXB8IHdpdGggb25lIGhpc3Rv
Z3JhbToKLS8vIHxuYW1lfDogIldlYlJUQy5WaWRlby5JbnB1dEZyYW1lc1BlclNlY29uZCIKLS8v
ICAgICB8bWlufDogMQotLy8gICAgIHxtYXh8OiAxMDAKLS8vICAgICB8YnVja2V0Q291bnR8OiA1
MAotLy8gICAgIHxzYW1wbGVzfDogWzMwXToxCi0vLwotLy8gTW9zdCBoaXN0b2dyYW1zIGFyZSBu
b3QgdXBkYXRlZCBmcmVxdWVudGx5IChlLmcuIG1vc3QgdmlkZW8gbWV0cmljcyBhcmUgYW4KLS8v
IGF2ZXJhZ2Ugb3ZlciB0aGUgY2FsbCBhbmQgcmVjb3JkZWQgd2hlbiBhIHN0cmVhbSBpcyByZW1v
dmVkKS4KLS8vIFRoZSBtZXRyaWNzIGNhbiBmb3IgZXhhbXBsZSBiZSByZXRyaWV2ZWQgd2hlbiBh
IHBlZXIgY29ubmVjdGlvbiBpcyBjbG9zZWQuCi0KLXB1YmxpYyBjbGFzcyBNZXRyaWNzIHsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZXRyaWNzIjsKLQotICBzdGF0aWMg
ewotICAgIFN5c3RlbS5sb2FkTGlicmFyeSgiamluZ2xlX3BlZXJjb25uZWN0aW9uX3NvIik7Ci0g
IH0KLSAgcHVibGljIGZpbmFsIE1hcDxTdHJpbmcsIEhpc3RvZ3JhbUluZm8+IG1hcCA9Ci0gICAg
ICBuZXcgSGFzaE1hcDxTdHJpbmcsIEhpc3RvZ3JhbUluZm8+KCk7IC8vIDxuYW1lLCBIaXN0b2dy
YW1JbmZvPgotCi0gIC8qKgotICAgKiBDbGFzcyBob2xkaW5nIGhpc3RvZ3JhbSBpbmZvcm1hdGlv
bi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSGlzdG9ncmFtSW5mbyB7Ci0gICAgcHVi
bGljIGZpbmFsIGludCBtaW47Ci0gICAgcHVibGljIGZpbmFsIGludCBtYXg7Ci0gICAgcHVibGlj
IGZpbmFsIGludCBidWNrZXRDb3VudDsKLSAgICBwdWJsaWMgZmluYWwgTWFwPEludGVnZXIsIElu
dGVnZXI+IHNhbXBsZXMgPQotICAgICAgICBuZXcgSGFzaE1hcDxJbnRlZ2VyLCBJbnRlZ2VyPigp
OyAvLyA8dmFsdWUsICMgb2YgZXZlbnRzPgotCi0gICAgcHVibGljIEhpc3RvZ3JhbUluZm8oaW50
IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KSB7Ci0gICAgICB0aGlzLm1pbiA9IG1pbjsK
LSAgICAgIHRoaXMubWF4ID0gbWF4OwotICAgICAgdGhpcy5idWNrZXRDb3VudCA9IGJ1Y2tldENv
dW50OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZFNhbXBsZShpbnQgdmFsdWUsIGludCBu
dW1FdmVudHMpIHsKLSAgICAgIHNhbXBsZXMucHV0KHZhbHVlLCBudW1FdmVudHMpOwotICAgIH0K
LSAgfQotCi0gIC8qKgotICAgKiBDbGFzcyBmb3IgaG9sZGluZyB0aGUgbmF0aXZlIHBvaW50ZXIg
b2YgYSBoaXN0b2dyYW0uIFNpbmNlIHRoZXJlIGlzIG5vIHdheSB0byBkZXN0cm95IGEKLSAgICog
aGlzdG9ncmFtLCBwbGVhc2UgZG9uJ3QgY3JlYXRlIHVubmVjZXNzYXJ5IGluc3RhbmNlcyBvZiB0
aGlzIG9iamVjdC4gVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZS4KLSAgICoKLSAgICogVXNhZ2Ug
ZXhhbXBsZToKLSAgICogcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIHNvbWVNZXRyaWNI
aXN0b2dyYW0gPQotICAgKiAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLlZpZGVv
LlNvbWVNZXRyaWMiLCAxLCAxMDAwMCwgNTApOwotICAgKiBzb21lTWV0cmljSGlzdG9ncmFtLmFk
ZFNhbXBsZShzb21lVmFyaWFibGUpOwotICAgKi8KLSAgc3RhdGljIGNsYXNzIEhpc3RvZ3JhbSB7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIGhhbmRsZTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmlu
ZyBuYW1lOyAvLyBPbmx5IHVzZWQgZm9yIGxvZ2dpbmcuCi0KLSAgICBwcml2YXRlIEhpc3RvZ3Jh
bShsb25nIGhhbmRsZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgIHRoaXMuaGFuZGxlID0gaGFuZGxl
OwotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgcHVibGljIEhp
c3RvZ3JhbSBjcmVhdGVDb3VudHMoU3RyaW5nIG5hbWUsIGludCBtaW4sIGludCBtYXgsIGludCBi
dWNrZXRDb3VudCkgewotICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW0obmF0aXZlQ3JlYXRlQ291
bnRzKG5hbWUsIG1pbiwgbWF4LCBidWNrZXRDb3VudCksIG5hbWUpOwotICAgIH0KLQotICAgIHN0
YXRpYyBwdWJsaWMgSGlzdG9ncmFtIGNyZWF0ZUVudW1lcmF0aW9uKFN0cmluZyBuYW1lLCBpbnQg
bWF4KSB7Ci0gICAgICByZXR1cm4gbmV3IEhpc3RvZ3JhbShuYXRpdmVDcmVhdGVFbnVtZXJhdGlv
bihuYW1lLCBtYXgpLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRTYW1wbGUo
aW50IHNhbXBsZSkgewotICAgICAgbmF0aXZlQWRkU2FtcGxlKGhhbmRsZSwgc2FtcGxlKTsKLSAg
ICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVDb3VudHMo
U3RyaW5nIG5hbWUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCk7Ci0gICAgcHJp
dmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlRW51bWVyYXRpb24oU3RyaW5nIG5h
bWUsIGludCBtYXgpOwotICAgIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUFkZFNh
bXBsZShsb25nIGhhbmRsZSwgaW50IHNhbXBsZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRk
KFN0cmluZyBuYW1lLCBIaXN0b2dyYW1JbmZvIGluZm8pIHsKLSAgICBtYXAucHV0KG5hbWUsIGlu
Zm8pOwotICB9Ci0KLSAgLy8gRW5hYmxlcyBnYXRoZXJpbmcgb2YgbWV0cmljcyAod2hpY2ggY2Fu
IGJlIGZldGNoZWQgd2l0aCBnZXRBbmRSZXNldCgpKS4KLSAgLy8gTXVzdCBiZSBjYWxsZWQgYmVm
b3JlIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBpcyBjcmVhdGVkLgotICBwdWJsaWMgc3RhdGljIHZv
aWQgZW5hYmxlKCkgewotICAgIG5hdGl2ZUVuYWJsZSgpOwotICB9Ci0KLSAgLy8gR2V0cyBhbmQg
Y2xlYXJzIG5hdGl2ZSBoaXN0b2dyYW1zLgotICBwdWJsaWMgc3RhdGljIE1ldHJpY3MgZ2V0QW5k
UmVzZXQoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldEFuZFJlc2V0KCk7Ci0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVFbmFibGUoKTsKLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIE1ldHJpY3MgbmF0aXZlR2V0QW5kUmVzZXQoKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvTmV0d29ya01vbml0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L05ldHdvcmtNb25pdG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvTmV0d29ya01vbml0b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1NCArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMg
b3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGlvblR5cGU7Ci1pbXBv
cnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LklOVkFMSURfTkVU
X0lEOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5O
ZXR3b3JrSW5mb3JtYXRpb247Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWlt
cG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWlt
cG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBCb3Jyb3dlZCBmcm9tIENocm9taXVtJ3Mg
c3JjL25ldC9hbmRyb2lkL2phdmEvc3JjL29yZy9jaHJvbWl1bS9uZXQvTmV0d29ya0NoYW5nZU5v
dGlmaWVyLmphdmEKLSAqCi0gKiBUcmlnZ2VycyB1cGRhdGVzIHRvIHRoZSB1bmRlcmx5aW5nIG5l
dHdvcmsgc3RhdGUgZnJvbSBPUyBuZXR3b3JraW5nIGV2ZW50cy4KLSAqCi0gKiBXQVJOSU5HOiBU
aGlzIGNsYXNzIGlzIG5vdCB0aHJlYWQtc2FmZS4KLSAqLwotcHVibGljIGNsYXNzIE5ldHdvcmtN
b25pdG9yIHsKLSAgLyoqCi0gICAqIEFsZXJ0ZWQgd2hlbiB0aGUgY29ubmVjdGlvbiB0eXBlIG9m
IHRoZSBuZXR3b3JrIGNoYW5nZXMuCi0gICAqIFRoZSBhbGVydCBpcyBmaXJlZCBvbiB0aGUgVUkg
dGhyZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBOZXR3b3JrT2JzZXJ2ZXIgewotICAg
IHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKENvbm5lY3Rpb25UeXBlIGNvbm5l
Y3Rpb25UeXBlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAi
TmV0d29ya01vbml0b3IiOwotICBwcml2YXRlIHN0YXRpYyBOZXR3b3JrTW9uaXRvciBpbnN0YW5j
ZTsKLQotICBwcml2YXRlIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotCi0gIC8v
IE5hdGl2ZSBvYnNlcnZlcnMgb2YgdGhlIGNvbm5lY3Rpb24gdHlwZSBjaGFuZ2VzLgotICBwcml2
YXRlIGZpbmFsIEFycmF5TGlzdDxMb25nPiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzOwotICAvLyBK
YXZhIG9ic2VydmVycyBvZiB0aGUgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gIHByaXZhdGUg
ZmluYWwgQXJyYXlMaXN0PE5ldHdvcmtPYnNlcnZlcj4gbmV0d29ya09ic2VydmVyczsKLQotICAv
LyBPYmplY3QgdGhhdCBkZXRlY3RzIHRoZSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgcHJp
dmF0ZSBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgYXV0b0RldGVjdG9yOwotCi0gIHByaXZhdGUg
Q29ubmVjdGlvblR5cGUgY3VycmVudENvbm5lY3Rpb25UeXBlID0gQ29ubmVjdGlvblR5cGUuQ09O
TkVDVElPTl9VTktOT1dOOwotCi0gIHByaXZhdGUgTmV0d29ya01vbml0b3IoQ29udGV4dCBjb250
ZXh0KSB7Ci0gICAgYXNzZXJ0SXNUcnVlKGNvbnRleHQgIT0gbnVsbCk7Ci0gICAgYXBwbGljYXRp
b25Db250ZXh0ID0KLSAgICAgICAgY29udGV4dC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKSA9PSBu
dWxsID8gY29udGV4dCA6IGNvbnRleHQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0KLSAgICBu
YXRpdmVOZXR3b3JrT2JzZXJ2ZXJzID0gbmV3IEFycmF5TGlzdDxMb25nPigpOwotICAgIG5ldHdv
cmtPYnNlcnZlcnMgPSBuZXcgQXJyYXlMaXN0PE5ldHdvcmtPYnNlcnZlcj4oKTsKLSAgfQotCi0g
IC8qKgotICAgKiBJbml0aWFsaXplcyB0aGUgc2luZ2xldG9uIG9uY2UuCi0gICAqIENhbGxlZCBm
cm9tIHRoZSBuYXRpdmUgY29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgTmV0d29ya01vbml0
b3IgaW5pdChDb250ZXh0IGNvbnRleHQpIHsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgewot
ICAgICAgaW5zdGFuY2UgPSBuZXcgTmV0d29ya01vbml0b3IoY29udGV4dCk7Ci0gICAgfQotICAg
IHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0luaXRp
YWxpemVkKCkgewotICAgIHJldHVybiBpbnN0YW5jZSAhPSBudWxsOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgTmV0d29ya01vbml0b3IgZ2V0SW5zdGFuY2UoKSB7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwot
ICB9Ci0KLSAgLyoqCi0gICAqIEVuYWJsZXMgYXV0byBkZXRlY3Rpb24gb2YgdGhlIGN1cnJlbnQg
bmV0d29yayBzdGF0ZSBiYXNlZCBvbiBub3RpZmljYXRpb25zIGZyb20gdGhlIHN5c3RlbS4KLSAg
ICogTm90ZSB0aGF0IHBhc3NpbmcgdHJ1ZSBoZXJlIHJlcXVpcmVzIHRoZSBlbWJlZGRpbmcgYXBw
IGhhdmUgdGhlIHBsYXRmb3JtIEFDQ0VTU19ORVRXT1JLX1NUQVRFCi0gICAqIHBlcm1pc3Npb24u
Ci0gICAqCi0gICAqIEBwYXJhbSBzaG91bGRBdXRvRGV0ZWN0IHRydWUgaWYgdGhlIE5ldHdvcmtN
b25pdG9yIHNob3VsZCBsaXN0ZW4gZm9yIHN5c3RlbSBjaGFuZ2VzIGluCi0gICAqICBuZXR3b3Jr
IGNvbm5lY3Rpdml0eS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRBdXRvRGV0ZWN0
Q29ubmVjdGl2aXR5U3RhdGUoYm9vbGVhbiBzaG91bGRBdXRvRGV0ZWN0KSB7Ci0gICAgZ2V0SW5z
dGFuY2UoKS5zZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5U3RhdGVJbnRlcm5hbChzaG91bGRBdXRv
RGV0ZWN0KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0SXNUcnVlKGJvb2xl
YW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBB
c3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIC8v
IENhbGxlZCBieSB0aGUgbmF0aXZlIGNvZGUuCi0gIHByaXZhdGUgdm9pZCBzdGFydE1vbml0b3Jp
bmcobG9uZyBuYXRpdmVPYnNlcnZlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJTdGFydCBtb25p
dG9yaW5nIGZyb20gbmF0aXZlIG9ic2VydmVyICIgKyBuYXRpdmVPYnNlcnZlcik7Ci0gICAgbmF0
aXZlTmV0d29ya09ic2VydmVycy5hZGQobmF0aXZlT2JzZXJ2ZXIpOwotICAgIHNldEF1dG9EZXRl
Y3RDb25uZWN0aXZpdHlTdGF0ZUludGVybmFsKHRydWUpOwotICB9Ci0KLSAgLy8gQ2FsbGVkIGJ5
IHRoZSBuYXRpdmUgY29kZS4KLSAgcHJpdmF0ZSB2b2lkIHN0b3BNb25pdG9yaW5nKGxvbmcgbmF0
aXZlT2JzZXJ2ZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBtb25pdG9yaW5nIGZyb20g
bmF0aXZlIG9ic2VydmVyICIgKyBuYXRpdmVPYnNlcnZlcik7Ci0gICAgc2V0QXV0b0RldGVjdENv
bm5lY3Rpdml0eVN0YXRlSW50ZXJuYWwoZmFsc2UpOwotICAgIG5hdGl2ZU5ldHdvcmtPYnNlcnZl
cnMucmVtb3ZlKG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotCi0gIC8vIENhbGxlZCBieSB0aGUgbmF0
aXZlIGNvZGUgdG8gZ2V0IHRoZSBBbmRyb2lkIFNESyB2ZXJzaW9uLgotICBwcml2YXRlIHN0YXRp
YyBpbnQgYW5kcm9pZFNka0ludCgpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5U
OwotICB9Ci0KLSAgcHJpdmF0ZSBDb25uZWN0aW9uVHlwZSBnZXRDdXJyZW50Q29ubmVjdGlvblR5
cGUoKSB7Ci0gICAgcmV0dXJuIGN1cnJlbnRDb25uZWN0aW9uVHlwZTsKLSAgfQotCi0gIHByaXZh
dGUgbG9uZyBnZXRDdXJyZW50RGVmYXVsdE5ldElkKCkgewotICAgIHJldHVybiBhdXRvRGV0ZWN0
b3IgPT0gbnVsbCA/IElOVkFMSURfTkVUX0lEIDogYXV0b0RldGVjdG9yLmdldERlZmF1bHROZXRJ
ZCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRlc3Ryb3lBdXRvRGV0ZWN0b3IoKSB7Ci0gICAg
aWYgKGF1dG9EZXRlY3RvciAhPSBudWxsKSB7Ci0gICAgICBhdXRvRGV0ZWN0b3IuZGVzdHJveSgp
OwotICAgICAgYXV0b0RldGVjdG9yID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgc2V0QXV0b0RldGVjdENvbm5lY3Rpdml0eVN0YXRlSW50ZXJuYWwoYm9vbGVhbiBzaG91bGRB
dXRvRGV0ZWN0KSB7Ci0gICAgaWYgKCFzaG91bGRBdXRvRGV0ZWN0KSB7Ci0gICAgICBkZXN0cm95
QXV0b0RldGVjdG9yKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChhdXRvRGV0ZWN0
b3IgPT0gbnVsbCkgewotICAgICAgYXV0b0RldGVjdG9yID0gbmV3IE5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdChuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk9ic2VydmVyKCkgewotCi0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdl
ZChDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSkgewotICAgICAgICAgIHVwZGF0ZUN1
cnJlbnRDb25uZWN0aW9uVHlwZShuZXdDb25uZWN0aW9uVHlwZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25OZXR3b3JrQ29ubmVjdChOZXR3
b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm8pIHsKLSAgICAgICAgICBub3RpZnlPYnNlcnZlcnNP
Zk5ldHdvcmtDb25uZWN0KG5ldHdvcmtJbmZvKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVy
cmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtEaXNjb25uZWN0KGxvbmcgbmV0d29y
a0hhbmRsZSkgewotICAgICAgICAgIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Rpc2Nvbm5lY3Qo
bmV0d29ya0hhbmRsZSk7Ci0gICAgICAgIH0KLSAgICAgIH0sIGFwcGxpY2F0aW9uQ29udGV4dCk7
Ci0gICAgICBmaW5hbCBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya1N0YXRlIG5ldHdv
cmtTdGF0ZSA9Ci0gICAgICAgICAgYXV0b0RldGVjdG9yLmdldEN1cnJlbnROZXR3b3JrU3RhdGUo
KTsKLSAgICAgIHVwZGF0ZUN1cnJlbnRDb25uZWN0aW9uVHlwZShOZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QuZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRlKSk7Ci0gICAgICB1cGRhdGVBY3Rp
dmVOZXR3b3JrTGlzdCgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVDdXJy
ZW50Q29ubmVjdGlvblR5cGUoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpIHsKLSAg
ICBjdXJyZW50Q29ubmVjdGlvblR5cGUgPSBuZXdDb25uZWN0aW9uVHlwZTsKLSAgICBub3RpZnlP
YnNlcnZlcnNPZkNvbm5lY3Rpb25UeXBlQ2hhbmdlKG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBBbGVydHMgYWxsIG9ic2VydmVycyBvZiBhIGNvbm5lY3Rpb24gY2hhbmdl
LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIG5vdGlmeU9ic2VydmVyc09mQ29ubmVjdGlvblR5cGVD
aGFuZ2UoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpIHsKLSAgICBmb3IgKGxvbmcg
bmF0aXZlT2JzZXJ2ZXIgOiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBuYXRpdmVO
b3RpZnlDb25uZWN0aW9uVHlwZUNoYW5nZWQobmF0aXZlT2JzZXJ2ZXIpOwotICAgIH0KLSAgICBm
b3IgKE5ldHdvcmtPYnNlcnZlciBvYnNlcnZlciA6IG5ldHdvcmtPYnNlcnZlcnMpIHsKLSAgICAg
IG9ic2VydmVyLm9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbm90aWZ5T2JzZXJ2ZXJzT2ZOZXR3b3JrQ29ubmVj
dChOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm8pIHsKLSAgICBmb3IgKGxvbmcgbmF0aXZl
T2JzZXJ2ZXIgOiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBuYXRpdmVOb3RpZnlP
Zk5ldHdvcmtDb25uZWN0KG5hdGl2ZU9ic2VydmVyLCBuZXR3b3JrSW5mbyk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Rpc2Nvbm5lY3QobG9u
ZyBuZXR3b3JrSGFuZGxlKSB7Ci0gICAgZm9yIChsb25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZl
TmV0d29ya09ic2VydmVycykgewotICAgICAgbmF0aXZlTm90aWZ5T2ZOZXR3b3JrRGlzY29ubmVj
dChuYXRpdmVPYnNlcnZlciwgbmV0d29ya0hhbmRsZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0
ZSB2b2lkIHVwZGF0ZUFjdGl2ZU5ldHdvcmtMaXN0KCkgewotICAgIExpc3Q8TmV0d29ya0luZm9y
bWF0aW9uPiBuZXR3b3JrSW5mb0xpc3QgPSBhdXRvRGV0ZWN0b3IuZ2V0QWN0aXZlTmV0d29ya0xp
c3QoKTsKLSAgICBpZiAobmV0d29ya0luZm9MaXN0ID09IG51bGwgfHwgbmV0d29ya0luZm9MaXN0
LnNpemUoKSA9PSAwKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgTmV0d29ya0luZm9y
bWF0aW9uW10gbmV0d29ya0luZm9zID0gbmV3IE5ldHdvcmtJbmZvcm1hdGlvbltuZXR3b3JrSW5m
b0xpc3Quc2l6ZSgpXTsKLSAgICBuZXR3b3JrSW5mb3MgPSBuZXR3b3JrSW5mb0xpc3QudG9BcnJh
eShuZXR3b3JrSW5mb3MpOwotICAgIGZvciAobG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2ZU5l
dHdvcmtPYnNlcnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5vdGlmeU9mQWN0aXZlTmV0d29ya0xpc3Qo
bmF0aXZlT2JzZXJ2ZXIsIG5ldHdvcmtJbmZvcyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IEFkZHMgYW4gb2JzZXJ2ZXIgZm9yIGFueSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgICov
Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhZGROZXR3b3JrT2JzZXJ2ZXIoTmV0d29ya09ic2VydmVy
IG9ic2VydmVyKSB7Ci0gICAgZ2V0SW5zdGFuY2UoKS5hZGROZXR3b3JrT2JzZXJ2ZXJJbnRlcm5h
bChvYnNlcnZlcik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgYWRkTmV0d29ya09ic2VydmVySW50
ZXJuYWwoTmV0d29ya09ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgbmV0d29ya09ic2VydmVycy5h
ZGQob2JzZXJ2ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92ZXMgYW4gb2JzZXJ2ZXIgZm9y
IGFueSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgdm9p
ZCByZW1vdmVOZXR3b3JrT2JzZXJ2ZXIoTmV0d29ya09ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAg
Z2V0SW5zdGFuY2UoKS5yZW1vdmVOZXR3b3JrT2JzZXJ2ZXJJbnRlcm5hbChvYnNlcnZlcik7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgcmVtb3ZlTmV0d29ya09ic2VydmVySW50ZXJuYWwoTmV0d29y
a09ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgbmV0d29ya09ic2VydmVycy5yZW1vdmUob2JzZXJ2
ZXIpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBpZiB0aGVyZSBjdXJyZW50bHkgaXMgY29u
bmVjdGl2aXR5LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzT25saW5lKCkgewot
ICAgIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlID0gZ2V0SW5zdGFuY2UoKS5nZXRDdXJy
ZW50Q29ubmVjdGlvblR5cGUoKTsKLSAgICByZXR1cm4gY29ubmVjdGlvblR5cGUgIT0gQ29ubmVj
dGlvblR5cGUuQ09OTkVDVElPTl9OT05FOwotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBu
YXRpdmVOb3RpZnlDb25uZWN0aW9uVHlwZUNoYW5nZWQobG9uZyBuYXRpdmVQdHIpOwotICBwcml2
YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeU9mTmV0d29ya0Nvbm5lY3QobG9uZyBuYXRpdmVQ
dHIsIE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mbyk7Ci0gIHByaXZhdGUgbmF0aXZlIHZv
aWQgbmF0aXZlTm90aWZ5T2ZOZXR3b3JrRGlzY29ubmVjdChsb25nIG5hdGl2ZVB0ciwgbG9uZyBu
ZXR3b3JrSGFuZGxlKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVOb3RpZnlPZkFjdGl2
ZU5ldHdvcmtMaXN0KAotICAgICAgbG9uZyBuYXRpdmVQdHIsIE5ldHdvcmtJbmZvcm1hdGlvbltd
IG5ldHdvcmtJbmZvcyk7Ci0KLSAgLy8gRm9yIHRlc3Rpbmcgb25seS4KLSAgc3RhdGljIHZvaWQg
cmVzZXRJbnN0YW5jZUZvclRlc3RzKENvbnRleHQgY29udGV4dCkgewotICAgIGluc3RhbmNlID0g
bmV3IE5ldHdvcmtNb25pdG9yKGNvbnRleHQpOwotICB9Ci0KLSAgLy8gRm9yIHRlc3Rpbmcgb25s
eS4KLSAgcHVibGljIHN0YXRpYyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgZ2V0QXV0b0RldGVj
dG9yRm9yVGVzdCgpIHsKLSAgICByZXR1cm4gZ2V0SW5zdGFuY2UoKS5hdXRvRGV0ZWN0b3I7Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRl
Y3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9u
aXRvckF1dG9EZXRlY3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDYyMCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgYW5k
cm9pZC5uZXQuTmV0d29ya0NhcGFiaWxpdGllcy5ORVRfQ0FQQUJJTElUWV9JTlRFUk5FVDsKLWlt
cG9ydCBzdGF0aWMgYW5kcm9pZC5uZXQuTmV0d29ya0NhcGFiaWxpdGllcy5UUkFOU1BPUlRfQ0VM
TFVMQVI7Ci0KLWltcG9ydCBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb247Ci1pbXBvcnQgYW5k
cm9pZC5hbm5vdGF0aW9uLlN1cHByZXNzTGludDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJv
YWRjYXN0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50Rmls
dGVyOwotaW1wb3J0IGFuZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5k
cm9pZC5uZXQuQ29ubmVjdGl2aXR5TWFuYWdlci5OZXR3b3JrQ2FsbGJhY2s7Ci1pbXBvcnQgYW5k
cm9pZC5uZXQuTGlua0FkZHJlc3M7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTGlua1Byb3BlcnRpZXM7
Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29yazsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3Jr
Q2FwYWJpbGl0aWVzOwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtJbmZvOwotaW1wb3J0IGFu
ZHJvaWQubmV0Lk5ldHdvcmtSZXF1ZXN0OwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaUlu
Zm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lk
Lm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQudGVsZXBob255LlRlbGVwaG9ueU1hbmFnZXI7Ci0K
LWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0v
KioKLSAqIEJvcnJvd2VkIGZyb20gQ2hyb21pdW0ncwotICogc3JjL25ldC9hbmRyb2lkL2phdmEv
c3JjL29yZy9jaHJvbWl1bS9uZXQvTmV0d29ya0NoYW5nZU5vdGlmaWVyQXV0b0RldGVjdC5qYXZh
Ci0gKgotICogVXNlZCBieSB0aGUgTmV0d29ya01vbml0b3IgdG8gbGlzdGVuIHRvIHBsYXRmb3Jt
IGNoYW5nZXMgaW4gY29ubmVjdGl2aXR5LgotICogTm90ZSB0aGF0IHVzZSBvZiB0aGlzIGNsYXNz
IHJlcXVpcmVzIHRoYXQgdGhlIGFwcCBoYXZlIHRoZSBwbGF0Zm9ybQotICogQUNDRVNTX05FVFdP
UktfU1RBVEUgcGVybWlzc2lvbi4KLSAqLwotcHVibGljIGNsYXNzIE5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdCBleHRlbmRzIEJyb2FkY2FzdFJlY2VpdmVyIHsKLSAgcHVibGljIHN0YXRpYyBlbnVt
IENvbm5lY3Rpb25UeXBlIHsKLSAgICBDT05ORUNUSU9OX1VOS05PV04sCi0gICAgQ09OTkVDVElP
Tl9FVEhFUk5FVCwKLSAgICBDT05ORUNUSU9OX1dJRkksCi0gICAgQ09OTkVDVElPTl80RywKLSAg
ICBDT05ORUNUSU9OXzNHLAotICAgIENPTk5FQ1RJT05fMkcsCi0gICAgQ09OTkVDVElPTl9VTktO
T1dOX0NFTExVTEFSLAotICAgIENPTk5FQ1RJT05fQkxVRVRPT1RILAotICAgIENPTk5FQ1RJT05f
Tk9ORQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJUEFkZHJlc3MgewotICAgIHB1Ymxp
YyBmaW5hbCBieXRlW10gYWRkcmVzczsKLSAgICBwdWJsaWMgSVBBZGRyZXNzKGJ5dGVbXSBhZGRy
ZXNzKSB7Ci0gICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzOwotICAgIH0KLSAgfQotCi0gIC8q
KiBKYXZhIHZlcnNpb24gb2YgTmV0d29ya01vbml0b3IuTmV0d29ya0luZm9ybWF0aW9uICovCi0g
IHB1YmxpYyBzdGF0aWMgY2xhc3MgTmV0d29ya0luZm9ybWF0aW9uIHsKLSAgICBwdWJsaWMgZmlu
YWwgU3RyaW5nIG5hbWU7Ci0gICAgcHVibGljIGZpbmFsIENvbm5lY3Rpb25UeXBlIHR5cGU7Ci0g
ICAgcHVibGljIGZpbmFsIGxvbmcgaGFuZGxlOwotICAgIHB1YmxpYyBmaW5hbCBJUEFkZHJlc3Nb
XSBpcEFkZHJlc3NlczsKLSAgICBwdWJsaWMgTmV0d29ya0luZm9ybWF0aW9uKAotICAgICAgICBT
dHJpbmcgbmFtZSwgQ29ubmVjdGlvblR5cGUgdHlwZSwgbG9uZyBoYW5kbGUsIElQQWRkcmVzc1td
IGFkZHJlc3NlcykgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAgIHRoaXMudHlwZSA9
IHR5cGU7Ci0gICAgICB0aGlzLmhhbmRsZSA9IGhhbmRsZTsKLSAgICAgIHRoaXMuaXBBZGRyZXNz
ZXMgPSBhZGRyZXNzZXM7Ci0gICAgfQotICB9OwotCi0gIHN0YXRpYyBjbGFzcyBOZXR3b3JrU3Rh
dGUgewotICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjb25uZWN0ZWQ7Ci0gICAgLy8gRGVmaW5l
ZCBmcm9tIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9YWFggZm9yIG5vbi1tb2JpbGU7IGZvciBt
b2JpbGUsIGl0IGlzCi0gICAgLy8gZnVydGhlciBkaXZpZGVkIGludG8gMkcsIDNHLCBvciA0RyBm
cm9tIHRoZSBzdWJ0eXBlLgotICAgIHByaXZhdGUgZmluYWwgaW50IHR5cGU7Ci0gICAgLy8gRGVm
aW5lZCBmcm9tIE5ldHdvcmtJbmZvLnN1YnR5cGUsIHdoaWNoIGlzIG9uZSBvZiB0aGUgVGVsZXBo
b255TWFuYWdlci5ORVRXT1JLX1RZUEVfWFhYcy4KLSAgICAvLyBXaWxsIGJlIHVzZWZ1bCB0byBm
aW5kIHRoZSBtYXhpbXVtIGJhbmR3aWR0aC4KLSAgICBwcml2YXRlIGZpbmFsIGludCBzdWJ0eXBl
OwotCi0gICAgcHVibGljIE5ldHdvcmtTdGF0ZShib29sZWFuIGNvbm5lY3RlZCwgaW50IHR5cGUs
IGludCBzdWJ0eXBlKSB7Ci0gICAgICB0aGlzLmNvbm5lY3RlZCA9IGNvbm5lY3RlZDsKLSAgICAg
IHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgICB0aGlzLnN1YnR5cGUgPSBzdWJ0eXBlOwotICAgIH0K
LQotICAgIHB1YmxpYyBib29sZWFuIGlzQ29ubmVjdGVkKCkgewotICAgICAgcmV0dXJuIGNvbm5l
Y3RlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldE5ldHdvcmtUeXBlKCkgewotICAgICAg
cmV0dXJuIHR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXROZXR3b3JrU3ViVHlwZSgp
IHsKLSAgICAgIHJldHVybiBzdWJ0eXBlOwotICAgIH0KLSAgfQotICAvKioKLSAgICogVGhlIG1l
dGhvZHMgaW4gdGhpcyBjbGFzcyBnZXQgY2FsbGVkIHdoZW4gdGhlIG5ldHdvcmsgY2hhbmdlcyBp
ZiB0aGUgY2FsbGJhY2sKLSAgICogaXMgcmVnaXN0ZXJlZCB3aXRoIGEgcHJvcGVyIG5ldHdvcmsg
cmVxdWVzdC4gSXQgaXMgb25seSBhdmFpbGFibGUgaW4gQW5kcm9pZCBMb2xsaXBvcAotICAgKiBh
bmQgYWJvdmUuCi0gICAqLwotICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICBwcml2YXRlIGNs
YXNzIFNpbXBsZU5ldHdvcmtDYWxsYmFjayBleHRlbmRzIE5ldHdvcmtDYWxsYmFjayB7Ci0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25BdmFpbGFibGUoTmV0d29yayBuZXR3b3JrKSB7
Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiTmV0d29yayBiZWNvbWVzIGF2YWlsYWJsZTogIiArIG5l
dHdvcmsudG9TdHJpbmcoKSk7Ci0gICAgICBvbk5ldHdvcmtDaGFuZ2VkKG5ldHdvcmspOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwYWJpbGl0aWVzQ2hhbmdl
ZChOZXR3b3JrIG5ldHdvcmssIE5ldHdvcmtDYXBhYmlsaXRpZXMgbmV0d29ya0NhcGFiaWxpdGll
cykgewotICAgICAgLy8gQSBjYXBhYmlsaXRpZXMgY2hhbmdlIG1heSBpbmRpY2F0ZSB0aGUgQ29u
bmVjdGlvblR5cGUgaGFzIGNoYW5nZWQsCi0gICAgICAvLyBzbyBmb3J3YXJkIHRoZSBuZXcgTmV0
d29ya0luZm9ybWF0aW9uIGFsb25nIHRvIHRoZSBvYnNlcnZlci4KLSAgICAgIExvZ2dpbmcuZChU
QUcsICJjYXBhYmlsaXRpZXMgY2hhbmdlZDogIiArIG5ldHdvcmtDYXBhYmlsaXRpZXMudG9TdHJp
bmcoKSk7Ci0gICAgICBvbk5ldHdvcmtDaGFuZ2VkKG5ldHdvcmspOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTGlua1Byb3BlcnRpZXNDaGFuZ2VkKE5ldHdvcmsg
bmV0d29yaywgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMpIHsKLSAgICAgIC8vIEEgbGlu
ayBwcm9wZXJ0eSBjaGFuZ2UgbWF5IGluZGljYXRlIHRoZSBJUCBhZGRyZXNzIGNoYW5nZXMuCi0g
ICAgICAvLyBzbyBmb3J3YXJkIHRoZSBuZXcgTmV0d29ya0luZm9ybWF0aW9uIHRvIHRoZSBvYnNl
cnZlci4KLSAgICAgIExvZ2dpbmcuZChUQUcsICJsaW5rIHByb3BlcnRpZXMgY2hhbmdlZDogIiAr
IGxpbmtQcm9wZXJ0aWVzLnRvU3RyaW5nKCkpOwotICAgICAgb25OZXR3b3JrQ2hhbmdlZChuZXR3
b3JrKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkxvc2luZyhO
ZXR3b3JrIG5ldHdvcmssIGludCBtYXhNc1RvTGl2ZSkgewotICAgICAgLy8gVGVsbCB0aGUgbmV0
d29yayBpcyBnb2luZyB0byBsb3NlIGluIE1heE1zVG9MaXZlIG1pbGxpc2Vjb25kcy4KLSAgICAg
IC8vIFdlIG1heSB1c2UgdGhpcyBzaWduYWwgbGF0ZXIuCi0gICAgICBMb2dnaW5nLmQoCi0gICAg
ICAgICAgVEFHLCAiTmV0d29yayAiICsgbmV0d29yay50b1N0cmluZygpICsgIiBpcyBhYm91dCB0
byBsb3NlIGluICIgKyBtYXhNc1RvTGl2ZSArICJtcyIpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uTG9zdChOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICJOZXR3b3JrICIgKyBuZXR3b3JrLnRvU3RyaW5nKCkgKyAiIGlzIGRpc2Nvbm5l
Y3RlZCIpOwotICAgICAgb2JzZXJ2ZXIub25OZXR3b3JrRGlzY29ubmVjdChuZXR3b3JrVG9OZXRJ
ZChuZXR3b3JrKSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIG9uTmV0d29ya0NoYW5nZWQo
TmV0d29yayBuZXR3b3JrKSB7Ci0gICAgICBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm9y
bWF0aW9uID0gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLm5ldHdvcmtUb0luZm8obmV0d29y
ayk7Ci0gICAgICBpZiAobmV0d29ya0luZm9ybWF0aW9uICE9IG51bGwpIHsKLSAgICAgICAgb2Jz
ZXJ2ZXIub25OZXR3b3JrQ29ubmVjdChuZXR3b3JrSW5mb3JtYXRpb24pOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIC8qKiBRdWVyaWVzIHRoZSBDb25uZWN0aXZpdHlNYW5hZ2VyIGZvciBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBjb25uZWN0aW9uLiAqLwotICBzdGF0aWMgY2xhc3Mg
Q29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIHsKLSAgICAvKioKLSAgICAgKiAgTm90ZTogSW4g
c29tZSByYXJlIEFuZHJvaWQgc3lzdGVtcyBjb25uZWN0aXZpdHlNYW5hZ2VyIGlzIG51bGwuICBX
ZSBoYW5kbGUgdGhhdAotICAgICAqICBncmFjZWZ1bGx5IGJlbG93LgotICAgICAqLwotICAgIHBy
aXZhdGUgZmluYWwgQ29ubmVjdGl2aXR5TWFuYWdlciBjb25uZWN0aXZpdHlNYW5hZ2VyOwotCi0g
ICAgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlKENvbnRleHQgY29udGV4dCkgewotICAgICAg
Y29ubmVjdGl2aXR5TWFuYWdlciA9Ci0gICAgICAgICAgKENvbm5lY3Rpdml0eU1hbmFnZXIpIGNv
bnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNPTk5FQ1RJVklUWV9TRVJWSUNFKTsKLSAg
ICB9Ci0KLSAgICAvLyBGb3IgdGVzdGluZy4KLSAgICBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdh
dGUoKSB7Ci0gICAgICAvLyBBbGwgdGhlIG1ldGhvZHMgYmVsb3cgc2hvdWxkIGJlIG92ZXJyaWRk
ZW4uCi0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyID0gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioK
LSAgICAgKiBSZXR1cm5zIGNvbm5lY3Rpb24gdHlwZSBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIGFi
b3V0IHRoZSBjdXJyZW50Ci0gICAgICogZGVmYXVsdCBuZXR3b3JrLgotICAgICAqLwotICAgIE5l
dHdvcmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoKSB7Ci0gICAgICBpZiAoY29ubmVjdGl2aXR5TWFu
YWdlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGZhbHNlLCAt
MSwgLTEpOwotICAgICAgfQotICAgICAgcmV0dXJuIGdldE5ldHdvcmtTdGF0ZShjb25uZWN0aXZp
dHlNYW5hZ2VyLmdldEFjdGl2ZU5ldHdvcmtJbmZvKCkpOwotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIFJldHVybnMgY29ubmVjdGlvbiB0eXBlIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQg
fG5ldHdvcmt8LgotICAgICAqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJl
bGVhc2VzLgotICAgICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgTmV0d29y
a1N0YXRlIGdldE5ldHdvcmtTdGF0ZShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIGlmIChjb25u
ZWN0aXZpdHlNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3Rh
dGUoZmFsc2UsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZ2V0TmV0d29ya1N0YXRl
KGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0TmV0d29ya0luZm8obmV0d29yaykpOwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIFJldHVybnMgY29ubmVjdGlvbiB0eXBlIGFuZCBzdGF0dXMgaW5mb3Jt
YXRpb24gZ2xlYW5lZCBmcm9tIG5ldHdvcmtJbmZvLgotICAgICAqLwotICAgIE5ldHdvcmtTdGF0
ZSBnZXROZXR3b3JrU3RhdGUoTmV0d29ya0luZm8gbmV0d29ya0luZm8pIHsKLSAgICAgIGlmIChu
ZXR3b3JrSW5mbyA9PSBudWxsIHx8ICFuZXR3b3JrSW5mby5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAg
ICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGZhbHNlLCAtMSwgLTEpOwotICAgICAgfQotICAg
ICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUodHJ1ZSwgbmV0d29ya0luZm8uZ2V0VHlwZSgpLCBu
ZXR3b3JrSW5mby5nZXRTdWJ0eXBlKCkpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVy
bnMgYWxsIGNvbm5lY3RlZCBuZXR3b3Jrcy4KLSAgICAgKiBPbmx5IGNhbGxhYmxlIG9uIExvbGxp
cG9wIGFuZCBuZXdlciByZWxlYXNlcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdB
cGkiKQotICAgIE5ldHdvcmtbXSBnZXRBbGxOZXR3b3JrcygpIHsKLSAgICAgIGlmIChjb25uZWN0
aXZpdHlNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrWzBdOwot
ICAgICAgfQotICAgICAgcmV0dXJuIGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0QWxsTmV0d29ya3Mo
KTsKLSAgICB9Ci0KLSAgICBMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4gZ2V0QWN0aXZlTmV0d29y
a0xpc3QoKSB7Ci0gICAgICBpZiAoIXN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKSkgewotICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIEFycmF5TGlzdDxOZXR3b3JrSW5mb3JtYXRp
b24+IG5ldEluZm9MaXN0ID0gbmV3IEFycmF5TGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+KCk7Ci0g
ICAgICBmb3IgKE5ldHdvcmsgbmV0d29yayA6IGdldEFsbE5ldHdvcmtzKCkpIHsKLSAgICAgICAg
TmV0d29ya0luZm9ybWF0aW9uIGluZm8gPSBuZXR3b3JrVG9JbmZvKG5ldHdvcmspOwotICAgICAg
ICBpZiAoaW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgbmV0SW5mb0xpc3QuYWRkKGluZm8pOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV0SW5mb0xpc3Q7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgTmV0SUQgb2YgdGhlIGN1cnJlbnQgZGVmYXVsdCBu
ZXR3b3JrLiBSZXR1cm5zCi0gICAgICogSU5WQUxJRF9ORVRfSUQgaWYgbm8gY3VycmVudCBkZWZh
dWx0IG5ldHdvcmsgY29ubmVjdGVkLgotICAgICAqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3Ag
YW5kIG5ld2VyIHJlbGVhc2VzLgotICAgICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIp
Ci0gICAgbG9uZyBnZXREZWZhdWx0TmV0SWQoKSB7Ci0gICAgICBpZiAoIXN1cHBvcnROZXR3b3Jr
Q2FsbGJhY2soKSkgewotICAgICAgICByZXR1cm4gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgICB9Ci0g
ICAgICAvLyBBbmRyb2lkIExvbGxpcG9wIGhhZCBubyBBUEkgdG8gZ2V0IHRoZSBkZWZhdWx0IG5l
dHdvcms7IG9ubHkgYW4KLSAgICAgIC8vIEFQSSB0byByZXR1cm4gdGhlIE5ldHdvcmtJbmZvIGZv
ciB0aGUgZGVmYXVsdCBuZXR3b3JrLiBUbwotICAgICAgLy8gZGV0ZXJtaW5lIHRoZSBkZWZhdWx0
IG5ldHdvcmsgb25lIGNhbiBmaW5kIHRoZSBuZXR3b3JrIHdpdGgKLSAgICAgIC8vIHR5cGUgbWF0
Y2hpbmcgdGhhdCBvZiB0aGUgZGVmYXVsdCBuZXR3b3JrLgotICAgICAgZmluYWwgTmV0d29ya0lu
Zm8gZGVmYXVsdE5ldHdvcmtJbmZvID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXRBY3RpdmVOZXR3
b3JrSW5mbygpOwotICAgICAgaWYgKGRlZmF1bHROZXR3b3JrSW5mbyA9PSBudWxsKSB7Ci0gICAg
ICAgIHJldHVybiBJTlZBTElEX05FVF9JRDsKLSAgICAgIH0KLSAgICAgIGZpbmFsIE5ldHdvcmtb
XSBuZXR3b3JrcyA9IGdldEFsbE5ldHdvcmtzKCk7Ci0gICAgICBsb25nIGRlZmF1bHROZXRJZCA9
IElOVkFMSURfTkVUX0lEOwotICAgICAgZm9yIChOZXR3b3JrIG5ldHdvcmsgOiBuZXR3b3Jrcykg
ewotICAgICAgICBpZiAoIWhhc0ludGVybmV0Q2FwYWJpbGl0eShuZXR3b3JrKSkgewotICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIE5ldHdvcmtJbmZvIG5ldHdv
cmtJbmZvID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXROZXR3b3JrSW5mbyhuZXR3b3JrKTsKLSAg
ICAgICAgaWYgKG5ldHdvcmtJbmZvICE9IG51bGwgJiYgbmV0d29ya0luZm8uZ2V0VHlwZSgpID09
IGRlZmF1bHROZXR3b3JrSW5mby5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAvLyBUaGVyZSBzaG91
bGQgbm90IGJlIG11bHRpcGxlIGNvbm5lY3RlZCBuZXR3b3JrcyBvZiB0aGUKLSAgICAgICAgICAv
LyBzYW1lIHR5cGUuIEF0IGxlYXN0IGFzIG9mIEFuZHJvaWQgTWFyc2htYWxsb3cgdGhpcyBpcwot
ICAgICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQuIElmIHRoaXMgYmVjb21lcyBzdXBwb3J0ZWQgdGhp
cyBhc3NlcnRpb24KLSAgICAgICAgICAvLyBtYXkgdHJpZ2dlci4gQXQgdGhhdCBwb2ludCB3ZSBj
b3VsZCBjb25zaWRlciB1c2luZwotICAgICAgICAgIC8vIENvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0
RGVmYXVsdE5ldHdvcmsoKSB0aG91Z2ggdGhpcwotICAgICAgICAgIC8vIG1heSBnaXZlIGNvbmZ1
c2luZyByZXN1bHRzIHdpdGggVlBOcyBhbmQgaXMgb25seQotICAgICAgICAgIC8vIGF2YWlsYWJs
ZSB3aXRoIEFuZHJvaWQgTWFyc2htYWxsb3cuCi0gICAgICAgICAgYXNzZXJ0IGRlZmF1bHROZXRJ
ZCA9PSBJTlZBTElEX05FVF9JRDsKLSAgICAgICAgICBkZWZhdWx0TmV0SWQgPSBuZXR3b3JrVG9O
ZXRJZChuZXR3b3JrKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIGRlZmF1bHRO
ZXRJZDsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIHByaXZhdGUg
TmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtUb0luZm8oTmV0d29yayBuZXR3b3JrKSB7Ci0gICAg
ICBMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0
TGlua1Byb3BlcnRpZXMobmV0d29yayk7Ci0gICAgICAvLyBnZXRMaW5rUHJvcGVydGllcyB3aWxs
IHJldHVybiBudWxsIGlmIHRoZSBuZXR3b3JrIGlzIHVua25vd24uCi0gICAgICBpZiAobGlua1By
b3BlcnRpZXMgPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiRGV0ZWN0ZWQgdW5r
bm93biBuZXR3b3JrOiAiICsgbmV0d29yay50b1N0cmluZygpKTsKLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICB9Ci0gICAgICBpZiAobGlua1Byb3BlcnRpZXMuZ2V0SW50ZXJmYWNlTmFtZSgp
ID09IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIk51bGwgaW50ZXJmYWNlIG5hbWUg
Zm9yIG5ldHdvcmsgIiArIG5ldHdvcmsudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgICAgfQotCi0gICAgICBOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0gZ2V0TmV0d29y
a1N0YXRlKG5ldHdvcmspOwotICAgICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUgPSBn
ZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUpOwotICAgICAgaWYgKGNvbm5lY3Rpb25UeXBl
ID09IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fTk9ORSkgewotICAgICAgICAvLyBUaGlzIG1h
eSBub3QgYmUgYW4gZXJyb3IuIFRoZSBPUyBtYXkgc2lnbmFsIGEgbmV0d29yayBldmVudCB3aXRo
IGNvbm5lY3Rpb24gdHlwZQotICAgICAgICAvLyBOT05FIHdoZW4gdGhlIG5ldHdvcmsgZGlzY29u
bmVjdHMuCi0gICAgICAgIExvZ2dpbmcuZChUQUcsICJOZXR3b3JrICIgKyBuZXR3b3JrLnRvU3Ry
aW5nKCkgKyAiIGlzIGRpc2Nvbm5lY3RlZCIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
IH0KLQotICAgICAgLy8gU29tZSBhbmRyb2lkIGRldmljZSBtYXkgcmV0dXJuIGEgQ09OTkVDVElP
Tl9VTktOT1dOX0NFTExVTEFSIG9yIENPTk5FQ1RJT05fVU5LTk9XTiB0eXBlLAotICAgICAgLy8g
d2hpY2ggYXBwZWFycyB0byBiZSB1c2FibGUuIEp1c3QgbG9nIHRoZW0gaGVyZS4KLSAgICAgIGlm
IChjb25uZWN0aW9uVHlwZSA9PSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV04KLSAg
ICAgICAgICB8fCBjb25uZWN0aW9uVHlwZSA9PSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VO
S05PV05fQ0VMTFVMQVIpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIk5ldHdvcmsgIiArIG5l
dHdvcmsudG9TdHJpbmcoKSArICIgY29ubmVjdGlvbiB0eXBlIGlzICIgKyBjb25uZWN0aW9uVHlw
ZQotICAgICAgICAgICAgICAgICsgIiBiZWNhdXNlIGl0IGhhcyB0eXBlICIgKyBuZXR3b3JrU3Rh
dGUuZ2V0TmV0d29ya1R5cGUoKSArICIgYW5kIHN1YnR5cGUgIgotICAgICAgICAgICAgICAgICsg
bmV0d29ya1N0YXRlLmdldE5ldHdvcmtTdWJUeXBlKCkpOwotICAgICAgfQotCi0gICAgICBOZXR3
b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm9ybWF0aW9uID0KLSAgICAgICAgICBuZXcgTmV0d29y
a0luZm9ybWF0aW9uKGxpbmtQcm9wZXJ0aWVzLmdldEludGVyZmFjZU5hbWUoKSwgY29ubmVjdGlv
blR5cGUsCi0gICAgICAgICAgICAgIG5ldHdvcmtUb05ldElkKG5ldHdvcmspLCBnZXRJUEFkZHJl
c3NlcyhsaW5rUHJvcGVydGllcykpOwotICAgICAgcmV0dXJuIG5ldHdvcmtJbmZvcm1hdGlvbjsK
LSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYge0Bjb2RlIG5ldHdvcmt9
IGNhbiBwcm92aWRlIEludGVybmV0IGFjY2Vzcy4gQ2FuIGJlIHVzZWQgdG8KLSAgICAgKiBpZ25v
cmUgc3BlY2lhbGl6ZWQgbmV0d29ya3MgKGUuZy4gSU1TLCBGT1RBKS4KLSAgICAgKi8KLSAgICBA
U3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIGJvb2xlYW4gaGFzSW50ZXJuZXRDYXBhYmlsaXR5
KE5ldHdvcmsgbmV0d29yaykgewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXIgPT0gbnVs
bCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBOZXR3b3Jr
Q2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllcyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0TmV0d29y
a0NhcGFiaWxpdGllcyhuZXR3b3JrKTsKLSAgICAgIHJldHVybiBjYXBhYmlsaXRpZXMgIT0gbnVs
bCAmJiBjYXBhYmlsaXRpZXMuaGFzQ2FwYWJpbGl0eShORVRfQ0FQQUJJTElUWV9JTlRFUk5FVCk7
Ci0gICAgfQotCi0gICAgLyoqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJl
bGVhc2VzLiAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgcHVibGljIHZvaWQg
cmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2soTmV0d29ya0NhbGxiYWNrIG5ldHdvcmtDYWxsYmFjaykg
ewotICAgICAgY29ubmVjdGl2aXR5TWFuYWdlci5yZWdpc3Rlck5ldHdvcmtDYWxsYmFjaygKLSAg
ICAgICAgICBuZXcgTmV0d29ya1JlcXVlc3QuQnVpbGRlcigpLmFkZENhcGFiaWxpdHkoTkVUX0NB
UEFCSUxJVFlfSU5URVJORVQpLmJ1aWxkKCksCi0gICAgICAgICAgbmV0d29ya0NhbGxiYWNrKTsK
LSAgICB9Ci0KLSAgICAvKiogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVs
ZWFzZXMuICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBwdWJsaWMgdm9pZCBy
ZXF1ZXN0TW9iaWxlTmV0d29yayhOZXR3b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0g
ICAgICBOZXR3b3JrUmVxdWVzdC5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgTmV0d29ya1JlcXVlc3Qu
QnVpbGRlcigpOwotICAgICAgYnVpbGRlci5hZGRDYXBhYmlsaXR5KE5FVF9DQVBBQklMSVRZX0lO
VEVSTkVUKS5hZGRUcmFuc3BvcnRUeXBlKFRSQU5TUE9SVF9DRUxMVUxBUik7Ci0gICAgICBjb25u
ZWN0aXZpdHlNYW5hZ2VyLnJlcXVlc3ROZXR3b3JrKGJ1aWxkZXIuYnVpbGQoKSwgbmV0d29ya0Nh
bGxiYWNrKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIElQQWRk
cmVzc1tdIGdldElQQWRkcmVzc2VzKExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0aWVzKSB7Ci0g
ICAgICBJUEFkZHJlc3NbXSBpcEFkZHJlc3NlcyA9IG5ldyBJUEFkZHJlc3NbbGlua1Byb3BlcnRp
ZXMuZ2V0TGlua0FkZHJlc3NlcygpLnNpemUoKV07Ci0gICAgICBpbnQgaSA9IDA7Ci0gICAgICBm
b3IgKExpbmtBZGRyZXNzIGxpbmtBZGRyZXNzIDogbGlua1Byb3BlcnRpZXMuZ2V0TGlua0FkZHJl
c3NlcygpKSB7Ci0gICAgICAgIGlwQWRkcmVzc2VzW2ldID0gbmV3IElQQWRkcmVzcyhsaW5rQWRk
cmVzcy5nZXRBZGRyZXNzKCkuZ2V0QWRkcmVzcygpKTsKLSAgICAgICAgKytpOwotICAgICAgfQot
ICAgICAgcmV0dXJuIGlwQWRkcmVzc2VzOwotICAgIH0KLQotICAgIEBTdXBwcmVzc0xpbnQoIk5l
d0FwaSIpCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZUNhbGxiYWNrKE5ldHdvcmtDYWxsYmFjayBu
ZXR3b3JrQ2FsbGJhY2spIHsKLSAgICAgIGlmIChzdXBwb3J0TmV0d29ya0NhbGxiYWNrKCkpIHsK
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlVucmVnaXN0ZXIgbmV0d29yayBjYWxsYmFjayIpOwot
ICAgICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyLnVucmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2sobmV0
d29ya0NhbGxiYWNrKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBzdXBw
b3J0TmV0d29ya0NhbGxiYWNrKCkgewotICAgICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lO
VCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QICYmIGNvbm5lY3Rpdml0eU1hbmFnZXIg
IT0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKiogUXVlcmllcyB0aGUgV2lmaU1hbmFnZXIgZm9y
IFNTSUQgb2YgdGhlIGN1cnJlbnQgV2lmaSBjb25uZWN0aW9uLiAqLwotICBzdGF0aWMgY2xhc3Mg
V2lmaU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7
Ci0gICAgV2lmaU1hbmFnZXJEZWxlZ2F0ZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAgIHRoaXMu
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgfQotCi0gICAgLy8gRm9yIHRlc3RpbmcuCi0gICAgV2lm
aU1hbmFnZXJEZWxlZ2F0ZSgpIHsKLSAgICAgIC8vIEFsbCB0aGUgbWV0aG9kcyBiZWxvdyBzaG91
bGQgYmUgb3ZlcnJpZGRlbi4KLSAgICAgIGNvbnRleHQgPSBudWxsOwotICAgIH0KLQotICAgIFN0
cmluZyBnZXRXaWZpU1NJRCgpIHsKLSAgICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBjb250ZXh0
LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgICAgbnVsbCwgbmV3IEludGVudEZpbHRlcihXaWZp
TWFuYWdlci5ORVRXT1JLX1NUQVRFX0NIQU5HRURfQUNUSU9OKSk7Ci0gICAgICBpZiAoaW50ZW50
ICE9IG51bGwpIHsKLSAgICAgICAgZmluYWwgV2lmaUluZm8gd2lmaUluZm8gPSBpbnRlbnQuZ2V0
UGFyY2VsYWJsZUV4dHJhKFdpZmlNYW5hZ2VyLkVYVFJBX1dJRklfSU5GTyk7Ci0gICAgICAgIGlm
ICh3aWZpSW5mbyAhPSBudWxsKSB7Ci0gICAgICAgICAgZmluYWwgU3RyaW5nIHNzaWQgPSB3aWZp
SW5mby5nZXRTU0lEKCk7Ci0gICAgICAgICAgaWYgKHNzaWQgIT0gbnVsbCkgewotICAgICAgICAg
ICAgcmV0dXJuIHNzaWQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBy
ZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIGZpbmFsIGxvbmcgSU5WQUxJRF9ORVRf
SUQgPSAtMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOZXR3b3JrTW9u
aXRvckF1dG9EZXRlY3QiOwotCi0gIC8vIE9ic2VydmVyIGZvciB0aGUgY29ubmVjdGlvbiB0eXBl
IGNoYW5nZS4KLSAgcHJpdmF0ZSBmaW5hbCBPYnNlcnZlciBvYnNlcnZlcjsKLSAgcHJpdmF0ZSBm
aW5hbCBJbnRlbnRGaWx0ZXIgaW50ZW50RmlsdGVyOwotICBwcml2YXRlIGZpbmFsIENvbnRleHQg
Y29udGV4dDsKLSAgLy8gVXNlZCB0byByZXF1ZXN0IG1vYmlsZSBuZXR3b3JrLiBJdCBkb2VzIG5v
dCBkbyBhbnl0aGluZyBleGNlcHQgZm9yIGtlZXBpbmcKLSAgLy8gdGhlIGNhbGxiYWNrIGZvciBy
ZWxlYXNpbmcgdGhlIHJlcXVlc3QuCi0gIHByaXZhdGUgZmluYWwgTmV0d29ya0NhbGxiYWNrIG1v
YmlsZU5ldHdvcmtDYWxsYmFjazsKLSAgLy8gVXNlZCB0byByZWNlaXZlIHVwZGF0ZXMgb24gYWxs
IG5ldHdvcmtzLgotICBwcml2YXRlIGZpbmFsIE5ldHdvcmtDYWxsYmFjayBhbGxOZXR3b3JrQ2Fs
bGJhY2s7Ci0gIC8vIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBhbmQgd2lmaU1hbmFnZXJE
ZWxlZ2F0ZSBhcmUgb25seSBub24tZmluYWwgZm9yIHRlc3RpbmcuCi0gIHByaXZhdGUgQ29ubmVj
dGl2aXR5TWFuYWdlckRlbGVnYXRlIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZTsKLSAgcHJp
dmF0ZSBXaWZpTWFuYWdlckRlbGVnYXRlIHdpZmlNYW5hZ2VyRGVsZWdhdGU7Ci0KLSAgcHJpdmF0
ZSBib29sZWFuIGlzUmVnaXN0ZXJlZDsKLSAgcHJpdmF0ZSBDb25uZWN0aW9uVHlwZSBjb25uZWN0
aW9uVHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcgd2lmaVNTSUQ7Ci0KLSAgLyoqCi0gICAqIE9ic2Vy
dmVyIGludGVyZmFjZSBieSB3aGljaCBvYnNlcnZlciBpcyBub3RpZmllZCBvZiBuZXR3b3JrIGNo
YW5nZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBPYnNlcnZlciB7Ci0gICAg
LyoqCi0gICAgICogQ2FsbGVkIHdoZW4gZGVmYXVsdCBuZXR3b3JrIGNoYW5nZXMuCi0gICAgICov
Ci0gICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoQ29ubmVjdGlvblR5cGUg
bmV3Q29ubmVjdGlvblR5cGUpOwotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Nvbm5lY3QoTmV0
d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvKTsKLSAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtE
aXNjb25uZWN0KGxvbmcgbmV0d29ya0hhbmRsZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29uc3Ry
dWN0cyBhIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9u
IFVJIHRocmVhZC4KLSAgICovCi0gIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gIHB1YmxpYyBO
ZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QoT2JzZXJ2ZXIgb2JzZXJ2ZXIsIENvbnRleHQgY29udGV4
dCkgewotICAgIHRoaXMub2JzZXJ2ZXIgPSBvYnNlcnZlcjsKLSAgICB0aGlzLmNvbnRleHQgPSBj
b250ZXh0OwotICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSA9IG5ldyBDb25uZWN0aXZp
dHlNYW5hZ2VyRGVsZWdhdGUoY29udGV4dCk7Ci0gICAgd2lmaU1hbmFnZXJEZWxlZ2F0ZSA9IG5l
dyBXaWZpTWFuYWdlckRlbGVnYXRlKGNvbnRleHQpOwotCi0gICAgZmluYWwgTmV0d29ya1N0YXRl
IG5ldHdvcmtTdGF0ZSA9IGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5nZXROZXR3b3JrU3Rh
dGUoKTsKLSAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0
ZSk7Ci0gICAgd2lmaVNTSUQgPSBnZXRXaWZpU1NJRChuZXR3b3JrU3RhdGUpOwotICAgIGludGVu
dEZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoQ29ubmVjdGl2aXR5TWFuYWdlci5DT05ORUNUSVZJ
VFlfQUNUSU9OKTsKLQotICAgIHJlZ2lzdGVyUmVjZWl2ZXIoKTsKLSAgICBpZiAoY29ubmVjdGl2
aXR5TWFuYWdlckRlbGVnYXRlLnN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKSkgewotICAgICAgLy8g
T24gQW5kcm9pZCA2LjAuMCwgdGhlIFdSSVRFX1NFVFRJTkdTIHBlcm1pc3Npb24gaXMgbmVjZXNz
YXJ5IGZvcgotICAgICAgLy8gcmVxdWVzdE5ldHdvcmssIHNvIGl0IHdpbGwgZmFpbC4gVGhpcyB3
YXMgZml4ZWQgaW4gQW5kcm9pZCA2LjAuMS4KLSAgICAgIE5ldHdvcmtDYWxsYmFjayB0ZW1wTmV0
d29ya0NhbGxiYWNrID0gbmV3IE5ldHdvcmtDYWxsYmFjaygpOwotICAgICAgdHJ5IHsKLSAgICAg
ICAgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLnJlcXVlc3RNb2JpbGVOZXR3b3JrKHRlbXBO
ZXR3b3JrQ2FsbGJhY2spOwotICAgICAgfSBjYXRjaCAoamF2YS5sYW5nLlNlY3VyaXR5RXhjZXB0
aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIlVuYWJsZSB0byBvYnRhaW4gcGVybWlz
c2lvbiB0byByZXF1ZXN0IGEgY2VsbHVsYXIgbmV0d29yay4iKTsKLSAgICAgICAgdGVtcE5ldHdv
cmtDYWxsYmFjayA9IG51bGw7Ci0gICAgICB9Ci0gICAgICBtb2JpbGVOZXR3b3JrQ2FsbGJhY2sg
PSB0ZW1wTmV0d29ya0NhbGxiYWNrOwotICAgICAgYWxsTmV0d29ya0NhbGxiYWNrID0gbmV3IFNp
bXBsZU5ldHdvcmtDYWxsYmFjaygpOwotICAgICAgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRl
LnJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKGFsbE5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIG1vYmlsZU5ldHdvcmtDYWxsYmFjayA9IG51bGw7Ci0gICAgICBhbGxOZXR3b3Jr
Q2FsbGJhY2sgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBbGxvd3Mgb3ZlcnJp
ZGluZyB0aGUgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGZvciB0ZXN0cy4KLSAgICovCi0g
IHZvaWQgc2V0Q29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlRm9yVGVzdHMoQ29ubmVjdGl2aXR5
TWFuYWdlckRlbGVnYXRlIGRlbGVnYXRlKSB7Ci0gICAgY29ubmVjdGl2aXR5TWFuYWdlckRlbGVn
YXRlID0gZGVsZWdhdGU7Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3dzIG92ZXJyaWRpbmcgdGhl
IFdpZmlNYW5hZ2VyRGVsZWdhdGUgZm9yIHRlc3RzLgotICAgKi8KLSAgdm9pZCBzZXRXaWZpTWFu
YWdlckRlbGVnYXRlRm9yVGVzdHMoV2lmaU1hbmFnZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSkgewotICAg
IHdpZmlNYW5hZ2VyRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1
cm5zIHdoZXRoZXIgdGhlIG9iamVjdCBoYXMgcmVnaXN0ZXJlZCB0byByZWNlaXZlIG5ldHdvcmsg
Y29ubmVjdGl2aXR5IGludGVudHMuCi0gICAqIFZpc2libGUgZm9yIHRlc3RpbmcuCi0gICAqLwot
ICBib29sZWFuIGlzUmVjZWl2ZXJSZWdpc3RlcmVkRm9yVGVzdGluZygpIHsKLSAgICByZXR1cm4g
aXNSZWdpc3RlcmVkOwotICB9Ci0KLSAgTGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+IGdldEFjdGl2
ZU5ldHdvcmtMaXN0KCkgewotICAgIHJldHVybiBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUu
Z2V0QWN0aXZlTmV0d29ya0xpc3QoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRlc3Ryb3koKSB7
Ci0gICAgaWYgKGFsbE5ldHdvcmtDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBjb25uZWN0aXZp
dHlNYW5hZ2VyRGVsZWdhdGUucmVsZWFzZUNhbGxiYWNrKGFsbE5ldHdvcmtDYWxsYmFjayk7Ci0g
ICAgfQotICAgIGlmIChtb2JpbGVOZXR3b3JrQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgY29u
bmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLnJlbGVhc2VDYWxsYmFjayhtb2JpbGVOZXR3b3JrQ2Fs
bGJhY2spOwotICAgIH0KLSAgICB1bnJlZ2lzdGVyUmVjZWl2ZXIoKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBSZWdpc3RlcnMgYSBCcm9hZGNhc3RSZWNlaXZlciBpbiB0aGUgZ2l2ZW4gY29udGV4dC4K
LSAgICovCi0gIHByaXZhdGUgdm9pZCByZWdpc3RlclJlY2VpdmVyKCkgewotICAgIGlmIChpc1Jl
Z2lzdGVyZWQpCi0gICAgICByZXR1cm47Ci0KLSAgICBpc1JlZ2lzdGVyZWQgPSB0cnVlOwotICAg
IGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcih0aGlzLCBpbnRlbnRGaWx0ZXIpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFVucmVnaXN0ZXJzIHRoZSBCcm9hZGNhc3RSZWNlaXZlciBpbiB0aGUgZ2l2ZW4g
Y29udGV4dC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCB1bnJlZ2lzdGVyUmVjZWl2ZXIoKSB7Ci0g
ICAgaWYgKCFpc1JlZ2lzdGVyZWQpCi0gICAgICByZXR1cm47Ci0KLSAgICBpc1JlZ2lzdGVyZWQg
PSBmYWxzZTsKLSAgICBjb250ZXh0LnVucmVnaXN0ZXJSZWNlaXZlcih0aGlzKTsKLSAgfQotCi0g
IHB1YmxpYyBOZXR3b3JrU3RhdGUgZ2V0Q3VycmVudE5ldHdvcmtTdGF0ZSgpIHsKLSAgICByZXR1
cm4gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlLmdldE5ldHdvcmtTdGF0ZSgpOwotICB9Ci0K
LSAgLyoqCi0gICAqIFJldHVybnMgTmV0SUQgb2YgZGV2aWNlJ3MgY3VycmVudCBkZWZhdWx0IGNv
bm5lY3RlZCBuZXR3b3JrIHVzZWQgZm9yCi0gICAqIGNvbW11bmljYXRpb24uCi0gICAqIE9ubHkg
aW1wbGVtZW50ZWQgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJlbGVhc2VzLCByZXR1cm5zIElOVkFM
SURfTkVUX0lECi0gICAqIHdoZW4gbm90IGltcGxlbWVudGVkLgotICAgKi8KLSAgcHVibGljIGxv
bmcgZ2V0RGVmYXVsdE5ldElkKCkgewotICAgIHJldHVybiBjb25uZWN0aXZpdHlNYW5hZ2VyRGVs
ZWdhdGUuZ2V0RGVmYXVsdE5ldElkKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIENvbm5lY3Rp
b25UeXBlIGdldENvbm5lY3Rpb25UeXBlKE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUpIHsKLSAg
ICBpZiAoIW5ldHdvcmtTdGF0ZS5pc0Nvbm5lY3RlZCgpKSB7Ci0gICAgICByZXR1cm4gQ29ubmVj
dGlvblR5cGUuQ09OTkVDVElPTl9OT05FOwotICAgIH0KLQotICAgIHN3aXRjaCAobmV0d29ya1N0
YXRlLmdldE5ldHdvcmtUeXBlKCkpIHsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5U
WVBFX0VUSEVSTkVUOgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9F
VEhFUk5FVDsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1dJRkk6Ci0gICAg
ICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1dJRkk7Ci0gICAgICBjYXNlIENv
bm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9XSU1BWDoKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25U
eXBlLkNPTk5FQ1RJT05fNEc7Ci0gICAgICBjYXNlIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9C
TFVFVE9PVEg6Ci0gICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX0JMVUVU
T09USDsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX01PQklMRToKLSAgICAg
ICAgLy8gVXNlIGluZm9ybWF0aW9uIGZyb20gVGVsZXBob255TWFuYWdlciB0byBjbGFzc2lmeSB0
aGUgY29ubmVjdGlvbi4KLSAgICAgICAgc3dpdGNoIChuZXR3b3JrU3RhdGUuZ2V0TmV0d29ya1N1
YlR5cGUoKSkgewotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVf
R1BSUzoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VER0U6
Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9DRE1BOgotICAg
ICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfMXhSVFQ6Ci0gICAgICAg
ICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9JREVOOgotICAgICAgICAgICAg
cmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fMkc7Ci0gICAgICAgICAgY2FzZSBUZWxl
cGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9VTVRTOgotICAgICAgICAgIGNhc2UgVGVsZXBob255
TWFuYWdlci5ORVRXT1JLX1RZUEVfRVZET18wOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFu
YWdlci5ORVRXT1JLX1RZUEVfRVZET19BOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdl
ci5ORVRXT1JLX1RZUEVfSFNEUEE6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5F
VFdPUktfVFlQRV9IU1VQQToKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09S
S19UWVBFX0hTUEE6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQ
RV9FVkRPX0I6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9F
SFJQRDoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTUEFQ
OgotICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fM0c7Ci0gICAg
ICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9MVEU6Ci0gICAgICAgICAg
ICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl80RzsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTl9D
RUxMVUxBUjsKLSAgICAgICAgfQotICAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENvbm5l
Y3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTjsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIFN0
cmluZyBnZXRXaWZpU1NJRChOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKSB7Ci0gICAgaWYgKGdl
dENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSkgIT0gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElP
Tl9XSUZJKQotICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiB3aWZpTWFuYWdlckRlbGVnYXRl
LmdldFdpZmlTU0lEKCk7Ci0gIH0KLQotICAvLyBCcm9hZGNhc3RSZWNlaXZlcgotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVu
dCkgewotICAgIGZpbmFsIE5ldHdvcmtTdGF0ZSBuZXR3b3JrU3RhdGUgPSBnZXRDdXJyZW50TmV0
d29ya1N0YXRlKCk7Ci0gICAgaWYgKENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElWSVRZX0FD
VElPTi5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSkgewotICAgICAgY29ubmVjdGlvblR5cGVD
aGFuZ2VkKG5ldHdvcmtTdGF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvbm5l
Y3Rpb25UeXBlQ2hhbmdlZChOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKSB7Ci0gICAgQ29ubmVj
dGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUgPSBnZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3Rh
dGUpOwotICAgIFN0cmluZyBuZXdXaWZpU1NJRCA9IGdldFdpZmlTU0lEKG5ldHdvcmtTdGF0ZSk7
Ci0gICAgaWYgKG5ld0Nvbm5lY3Rpb25UeXBlID09IGNvbm5lY3Rpb25UeXBlICYmIG5ld1dpZmlT
U0lELmVxdWFscyh3aWZpU1NJRCkpCi0gICAgICByZXR1cm47Ci0KLSAgICBjb25uZWN0aW9uVHlw
ZSA9IG5ld0Nvbm5lY3Rpb25UeXBlOwotICAgIHdpZmlTU0lEID0gbmV3V2lmaVNTSUQ7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIk5ldHdvcmsgY29ubmVjdGl2aXR5IGNoYW5nZWQsIHR5cGUgaXM6ICIg
KyBjb25uZWN0aW9uVHlwZSk7Ci0gICAgb2JzZXJ2ZXIub25Db25uZWN0aW9uVHlwZUNoYW5nZWQo
bmV3Q29ubmVjdGlvblR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEV4dHJhY3RzIE5ldElEIG9m
IG5ldHdvcmsgb24gTG9sbGlwb3AgYW5kIE5ldHdvcmtIYW5kbGUgKHdoaWNoIGlzIG11bmdsZWQK
LSAgICogTmV0SUQpIG9uIE1hcnNobWFsbG93IGFuZCBuZXdlciByZWxlYXNlcy4gT25seSBhdmFp
bGFibGUgb24gTG9sbGlwb3AgYW5kCi0gICAqIG5ld2VyIHJlbGVhc2VzLiBSZXR1cm5zIGxvbmcg
c2luY2UgZ2V0TmV0d29ya0hhbmRsZSByZXR1cm5zIGxvbmcuCi0gICAqLwotICBAU3VwcHJlc3NM
aW50KCJOZXdBcGkiKQotICBwcml2YXRlIHN0YXRpYyBsb25nIG5ldHdvcmtUb05ldElkKE5ldHdv
cmsgbmV0d29yaykgewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVS
U0lPTl9DT0RFUy5NKSB7Ci0gICAgICByZXR1cm4gbmV0d29yay5nZXROZXR3b3JrSGFuZGxlKCk7
Ci0gICAgfQotCi0gICAgLy8gTk9URShob25naGFpeik6IFRoaXMgZGVwZW5kcyBvbiBBbmRyb2lk
IGZyYW1ld29yayBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgotICAgIC8vIFRoZXNlIGRldGFpbHMg
Y2Fubm90IGNoYW5nZSBiZWNhdXNlIExvbGxpcG9wIGhhcyBiZWVuIHJlbGVhc2VkLgotICAgIHJl
dHVybiBJbnRlZ2VyLnBhcnNlSW50KG5ldHdvcmsudG9TdHJpbmcoKSk7Ci0gIH0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvT1dORVJTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
T1dORVJTCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL09XTkVSUwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQgKzAsMCBAQAotbWFnamVkQHdlYnJ0Yy5vcmcKLQotcGVyLWZpbGUg
Q2FtZXJhKj1zYWthbEB3ZWJydGMub3JnCi1wZXItZmlsZSBNZXRyaWNzLmphdmE9c2FrYWxAd2Vi
cnRjLm9yZwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbi5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24uamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbi5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0
aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBKYXZhLWxh
bmQgdmVyc2lvbiBvZiB0aGUgUGVlckNvbm5lY3Rpb24gQVBJczsgd3JhcHMgdGhlIEMrKyBBUEkK
LSAqIGh0dHA6Ly93d3cud2VicnRjLm9yZy9yZWZlcmVuY2UvbmF0aXZlLWFwaXMsIHdoaWNoIGlu
IHR1cm4gaXMgaW5zcGlyZWQgYnkgdGhlCi0gKiBKUyBBUElzOiBodHRwOi8vZGV2LnczLm9yZy8y
MDExL3dlYnJ0Yy9lZGl0b3Ivd2VicnRjLmh0bWwgYW5kCi0gKiBodHRwOi8vd3d3LnczLm9yZy9U
Ui9tZWRpYWNhcHR1cmUtc3RyZWFtcy8KLSAqLwotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9u
IHsKLSAgc3RhdGljIHsKLSAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImppbmdsZV9wZWVyY29ubmVj
dGlvbl9zbyIpOwotICB9Ci0KLSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6
SWNlR2F0aGVyaW5nU3RhdGUgKi8KLSAgcHVibGljIGVudW0gSWNlR2F0aGVyaW5nU3RhdGUgeyBO
RVcsIEdBVEhFUklORywgQ09NUExFVEUgfQotCi0gIC8qKiBUcmFja3MgUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2U6OkljZUNvbm5lY3Rpb25TdGF0ZSAqLwotICBwdWJsaWMgZW51bSBJY2VDb25uZWN0
aW9uU3RhdGUgewotICAgIE5FVywKLSAgICBDSEVDS0lORywKLSAgICBDT05ORUNURUQsCi0gICAg
Q09NUExFVEVELAotICAgIEZBSUxFRCwKLSAgICBESVNDT05ORUNURUQsCi0gICAgQ0xPU0VECi0g
IH0KLQotICAvKiogVHJhY2tzIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpTaWduYWxpbmdTdGF0
ZSAqLwotICBwdWJsaWMgZW51bSBTaWduYWxpbmdTdGF0ZSB7Ci0gICAgU1RBQkxFLAotICAgIEhB
VkVfTE9DQUxfT0ZGRVIsCi0gICAgSEFWRV9MT0NBTF9QUkFOU1dFUiwKLSAgICBIQVZFX1JFTU9U
RV9PRkZFUiwKLSAgICBIQVZFX1JFTU9URV9QUkFOU1dFUiwKLSAgICBDTE9TRUQKLSAgfQotCi0g
IC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25PYnNlcnZlci4gKi8KLSAgcHVibGlj
IHN0YXRpYyBpbnRlcmZhY2UgT2JzZXJ2ZXIgewotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUg
U2lnbmFsaW5nU3RhdGUgY2hhbmdlcy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvblNpZ25hbGluZ0No
YW5nZShTaWduYWxpbmdTdGF0ZSBuZXdTdGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4g
dGhlIEljZUNvbm5lY3Rpb25TdGF0ZSBjaGFuZ2VzLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uSWNl
Q29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpOwotCi0gICAgLyoq
IFRyaWdnZXJlZCB3aGVuIHRoZSBJQ0UgY29ubmVjdGlvbiByZWNlaXZpbmcgc3RhdHVzIGNoYW5n
ZXMuICovCi0gICAgcHVibGljIHZvaWQgb25JY2VDb25uZWN0aW9uUmVjZWl2aW5nQ2hhbmdlKGJv
b2xlYW4gcmVjZWl2aW5nKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgSWNlR2F0aGVy
aW5nU3RhdGUgY2hhbmdlcy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkljZUdhdGhlcmluZ0NoYW5n
ZShJY2VHYXRoZXJpbmdTdGF0ZSBuZXdTdGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4g
YSBuZXcgSUNFIGNhbmRpZGF0ZSBoYXMgYmVlbiBmb3VuZC4gKi8KLSAgICBwdWJsaWMgdm9pZCBv
bkljZUNhbmRpZGF0ZShJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQotICAgIC8qKiBUcmlnZ2Vy
ZWQgd2hlbiBzb21lIElDRSBjYW5kaWRhdGVzIGhhdmUgYmVlbiByZW1vdmVkLiAqLwotICAgIHB1
YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRl
cyk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gbWVkaWEgaXMgcmVjZWl2ZWQgb24gYSBuZXcg
c3RyZWFtIGZyb20gcmVtb3RlIHBlZXIuICovCi0gICAgcHVibGljIHZvaWQgb25BZGRTdHJlYW0o
TWVkaWFTdHJlYW0gc3RyZWFtKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiBhIHJlbW90ZSBw
ZWVyIGNsb3NlIGEgc3RyZWFtLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uUmVtb3ZlU3RyZWFtKE1l
ZGlhU3RyZWFtIHN0cmVhbSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gYSByZW1vdGUgcGVl
ciBvcGVucyBhIERhdGFDaGFubmVsLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uRGF0YUNoYW5uZWwo
RGF0YUNoYW5uZWwgZGF0YUNoYW5uZWwpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHJlbmVn
b3RpYXRpb24gaXMgbmVjZXNzYXJ5LiAqLwotICAgIHB1YmxpYyB2b2lkIG9uUmVuZWdvdGlhdGlv
bk5lZWRlZCgpOwotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbklu
dGVyZmFjZS5JY2VTZXJ2ZXIuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSWNlU2VydmVyIHsK
LSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHVyaTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHVz
ZXJuYW1lOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgcGFzc3dvcmQ7Ci0KLSAgICAvKiogQ29u
dmVuaWVuY2UgY29uc3RydWN0b3IgZm9yIFNUVU4gc2VydmVycy4gKi8KLSAgICBwdWJsaWMgSWNl
U2VydmVyKFN0cmluZyB1cmkpIHsKLSAgICAgIHRoaXModXJpLCAiIiwgIiIpOwotICAgIH0KLQot
ICAgIHB1YmxpYyBJY2VTZXJ2ZXIoU3RyaW5nIHVyaSwgU3RyaW5nIHVzZXJuYW1lLCBTdHJpbmcg
cGFzc3dvcmQpIHsKLSAgICAgIHRoaXMudXJpID0gdXJpOwotICAgICAgdGhpcy51c2VybmFtZSA9
IHVzZXJuYW1lOwotICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkOwotICAgIH0KLQotICAg
IHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gdXJpICsgIlsiICsgdXNl
cm5hbWUgKyAiOiIgKyBwYXNzd29yZCArICJdIjsKLSAgICB9Ci0gIH0KLQotICAvKiogSmF2YSB2
ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkljZVRyYW5zcG9ydHNUeXBlICovCi0g
IHB1YmxpYyBlbnVtIEljZVRyYW5zcG9ydHNUeXBlIHsgTk9ORSwgUkVMQVksIE5PSE9TVCwgQUxM
IH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkJ1bmRs
ZVBvbGljeSAqLwotICBwdWJsaWMgZW51bSBCdW5kbGVQb2xpY3kgeyBCQUxBTkNFRCwgTUFYQlVO
RExFLCBNQVhDT01QQVQgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2UuUnRjcE11eFBvbGljeSAqLwotICBwdWJsaWMgZW51bSBSdGNwTXV4UG9saWN5IHsg
TkVHT1RJQVRFLCBSRVFVSVJFIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlLlRjcENhbmRpZGF0ZVBvbGljeSAqLwotICBwdWJsaWMgZW51bSBUY3BDYW5k
aWRhdGVQb2xpY3kgeyBFTkFCTEVELCBESVNBQkxFRCB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBv
ZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5DYW5kaWRhdGVOZXR3b3JrUG9saWN5ICovCi0gIHB1
YmxpYyBlbnVtIENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kgeyBBTEwsIExPV19DT1NUIH0KLQotICAv
KiogSmF2YSB2ZXJzaW9uIG9mIHJ0Yzo6S2V5VHlwZSAqLwotICBwdWJsaWMgZW51bSBLZXlUeXBl
IHsgUlNBLCBFQ0RTQSB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbklu
dGVyZmFjZS5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gQ29udGlu
dWFsR2F0aGVyaW5nUG9saWN5IHsgR0FUSEVSX09OQ0UsIEdBVEhFUl9DT05USU5VQUxMWSB9Ci0K
LSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5SVENDb25maWd1
cmF0aW9uICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgUlRDQ29uZmlndXJhdGlvbiB7Ci0gICAg
cHVibGljIEljZVRyYW5zcG9ydHNUeXBlIGljZVRyYW5zcG9ydHNUeXBlOwotICAgIHB1YmxpYyBM
aXN0PEljZVNlcnZlcj4gaWNlU2VydmVyczsKLSAgICBwdWJsaWMgQnVuZGxlUG9saWN5IGJ1bmRs
ZVBvbGljeTsKLSAgICBwdWJsaWMgUnRjcE11eFBvbGljeSBydGNwTXV4UG9saWN5OwotICAgIHB1
YmxpYyBUY3BDYW5kaWRhdGVQb2xpY3kgdGNwQ2FuZGlkYXRlUG9saWN5OwotICAgIHB1YmxpYyBD
YW5kaWRhdGVOZXR3b3JrUG9saWN5IGNhbmRpZGF0ZU5ldHdvcmtQb2xpY3k7Ci0gICAgcHVibGlj
IGludCBhdWRpb0ppdHRlckJ1ZmZlck1heFBhY2tldHM7Ci0gICAgcHVibGljIGJvb2xlYW4gYXVk
aW9KaXR0ZXJCdWZmZXJGYXN0QWNjZWxlcmF0ZTsKLSAgICBwdWJsaWMgaW50IGljZUNvbm5lY3Rp
b25SZWNlaXZpbmdUaW1lb3V0OwotICAgIHB1YmxpYyBpbnQgaWNlQmFja3VwQ2FuZGlkYXRlUGFp
clBpbmdJbnRlcnZhbDsKLSAgICBwdWJsaWMgS2V5VHlwZSBrZXlUeXBlOwotICAgIHB1YmxpYyBD
b250aW51YWxHYXRoZXJpbmdQb2xpY3kgY29udGludWFsR2F0aGVyaW5nUG9saWN5OwotICAgIHB1
YmxpYyBpbnQgaWNlQ2FuZGlkYXRlUG9vbFNpemU7Ci0gICAgcHVibGljIGJvb2xlYW4gcHJ1bmVU
dXJuUG9ydHM7Ci0gICAgcHVibGljIGJvb2xlYW4gcHJlc3VtZVdyaXRhYmxlV2hlbkZ1bGx5UmVs
YXllZDsKLQotICAgIHB1YmxpYyBSVENDb25maWd1cmF0aW9uKExpc3Q8SWNlU2VydmVyPiBpY2VT
ZXJ2ZXJzKSB7Ci0gICAgICBpY2VUcmFuc3BvcnRzVHlwZSA9IEljZVRyYW5zcG9ydHNUeXBlLkFM
TDsKLSAgICAgIGJ1bmRsZVBvbGljeSA9IEJ1bmRsZVBvbGljeS5CQUxBTkNFRDsKLSAgICAgIHJ0
Y3BNdXhQb2xpY3kgPSBSdGNwTXV4UG9saWN5Lk5FR09USUFURTsKLSAgICAgIHRjcENhbmRpZGF0
ZVBvbGljeSA9IFRjcENhbmRpZGF0ZVBvbGljeS5FTkFCTEVEOwotICAgICAgY2FuZGlkYXRlTmV0
d29ya1BvbGljeSA9IGNhbmRpZGF0ZU5ldHdvcmtQb2xpY3kuQUxMOwotICAgICAgdGhpcy5pY2VT
ZXJ2ZXJzID0gaWNlU2VydmVyczsKLSAgICAgIGF1ZGlvSml0dGVyQnVmZmVyTWF4UGFja2V0cyA9
IDUwOwotICAgICAgYXVkaW9KaXR0ZXJCdWZmZXJGYXN0QWNjZWxlcmF0ZSA9IGZhbHNlOwotICAg
ICAgaWNlQ29ubmVjdGlvblJlY2VpdmluZ1RpbWVvdXQgPSAtMTsKLSAgICAgIGljZUJhY2t1cENh
bmRpZGF0ZVBhaXJQaW5nSW50ZXJ2YWwgPSAtMTsKLSAgICAgIGtleVR5cGUgPSBLZXlUeXBlLkVD
RFNBOwotICAgICAgY29udGludWFsR2F0aGVyaW5nUG9saWN5ID0gQ29udGludWFsR2F0aGVyaW5n
UG9saWN5LkdBVEhFUl9PTkNFOwotICAgICAgaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSAwOwotICAg
ICAgcHJ1bmVUdXJuUG9ydHMgPSBmYWxzZTsKLSAgICAgIHByZXN1bWVXcml0YWJsZVdoZW5GdWxs
eVJlbGF5ZWQgPSBmYWxzZTsKLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBMaXN0PE1l
ZGlhU3RyZWFtPiBsb2NhbFN0cmVhbXM7Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVQZWVy
Q29ubmVjdGlvbjsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZU9ic2VydmVyOwotICBwcml2
YXRlIExpc3Q8UnRwU2VuZGVyPiBzZW5kZXJzOwotICBwcml2YXRlIExpc3Q8UnRwUmVjZWl2ZXI+
IHJlY2VpdmVyczsKLQotICBQZWVyQ29ubmVjdGlvbihsb25nIG5hdGl2ZVBlZXJDb25uZWN0aW9u
LCBsb25nIG5hdGl2ZU9ic2VydmVyKSB7Ci0gICAgdGhpcy5uYXRpdmVQZWVyQ29ubmVjdGlvbiA9
IG5hdGl2ZVBlZXJDb25uZWN0aW9uOwotICAgIHRoaXMubmF0aXZlT2JzZXJ2ZXIgPSBuYXRpdmVP
YnNlcnZlcjsKLSAgICBsb2NhbFN0cmVhbXMgPSBuZXcgTGlua2VkTGlzdDxNZWRpYVN0cmVhbT4o
KTsKLSAgICBzZW5kZXJzID0gbmV3IExpbmtlZExpc3Q8UnRwU2VuZGVyPigpOwotICAgIHJlY2Vp
dmVycyA9IG5ldyBMaW5rZWRMaXN0PFJ0cFJlY2VpdmVyPigpOwotICB9Ci0KLSAgLy8gSnNlcElu
dGVyZmFjZS4KLSAgcHVibGljIG5hdGl2ZSBTZXNzaW9uRGVzY3JpcHRpb24gZ2V0TG9jYWxEZXNj
cmlwdGlvbigpOwotCi0gIHB1YmxpYyBuYXRpdmUgU2Vzc2lvbkRlc2NyaXB0aW9uIGdldFJlbW90
ZURlc2NyaXB0aW9uKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBEYXRhQ2hhbm5lbCBjcmVhdGVEYXRh
Q2hhbm5lbChTdHJpbmcgbGFiZWwsIERhdGFDaGFubmVsLkluaXQgaW5pdCk7Ci0KLSAgcHVibGlj
IG5hdGl2ZSB2b2lkIGNyZWF0ZU9mZmVyKFNkcE9ic2VydmVyIG9ic2VydmVyLCBNZWRpYUNvbnN0
cmFpbnRzIGNvbnN0cmFpbnRzKTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgY3JlYXRlQW5zd2Vy
KFNkcE9ic2VydmVyIG9ic2VydmVyLCBNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzKTsKLQot
ICBwdWJsaWMgbmF0aXZlIHZvaWQgc2V0TG9jYWxEZXNjcmlwdGlvbihTZHBPYnNlcnZlciBvYnNl
cnZlciwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgcHVibGljIG5hdGl2ZSB2b2lkIHNl
dFJlbW90ZURlc2NyaXB0aW9uKFNkcE9ic2VydmVyIG9ic2VydmVyLCBTZXNzaW9uRGVzY3JpcHRp
b24gc2RwKTsKLQotICBwdWJsaWMgbmF0aXZlIGJvb2xlYW4gc2V0Q29uZmlndXJhdGlvbihSVEND
b25maWd1cmF0aW9uIGNvbmZpZyk7Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkSWNlQ2FuZGlkYXRl
KEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICByZXR1cm4gbmF0aXZlQWRkSWNlQ2FuZGlk
YXRlKGNhbmRpZGF0ZS5zZHBNaWQsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4LCBjYW5kaWRhdGUu
c2RwKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZUljZUNhbmRpZGF0ZXMoZmluYWwg
SWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgIHJldHVybiBuYXRpdmVSZW1vdmVJY2VD
YW5kaWRhdGVzKGNhbmRpZGF0ZXMpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkU3RyZWFt
KE1lZGlhU3RyZWFtIHN0cmVhbSkgewotICAgIGJvb2xlYW4gcmV0ID0gbmF0aXZlQWRkTG9jYWxT
dHJlYW0oc3RyZWFtLm5hdGl2ZVN0cmVhbSk7Ci0gICAgaWYgKCFyZXQpIHsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgbG9jYWxTdHJlYW1zLmFkZChzdHJlYW0pOwotICAgIHJldHVy
biB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtIHN0
cmVhbSkgewotICAgIG5hdGl2ZVJlbW92ZUxvY2FsU3RyZWFtKHN0cmVhbS5uYXRpdmVTdHJlYW0p
OwotICAgIGxvY2FsU3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKLSAgfQotCi0gIHB1YmxpYyBSdHBT
ZW5kZXIgY3JlYXRlU2VuZGVyKFN0cmluZyBraW5kLCBTdHJpbmcgc3RyZWFtX2lkKSB7Ci0gICAg
UnRwU2VuZGVyIG5ld19zZW5kZXIgPSBuYXRpdmVDcmVhdGVTZW5kZXIoa2luZCwgc3RyZWFtX2lk
KTsKLSAgICBpZiAobmV3X3NlbmRlciAhPSBudWxsKSB7Ci0gICAgICBzZW5kZXJzLmFkZChuZXdf
c2VuZGVyKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ld19zZW5kZXI7Ci0gIH0KLQotICAvLyBOb3Rl
IHRoYXQgY2FsbGluZyBnZXRTZW5kZXJzIHdpbGwgZGlzcG9zZSBvZiB0aGUgc2VuZGVycyBwcmV2
aW91c2x5Ci0gIC8vIHJldHVybmVkIChhbmQgc2FtZSBnb2VzIGZvciBnZXRSZWNlaXZlcnMpLgot
ICBwdWJsaWMgTGlzdDxSdHBTZW5kZXI+IGdldFNlbmRlcnMoKSB7Ci0gICAgZm9yIChSdHBTZW5k
ZXIgc2VuZGVyIDogc2VuZGVycykgewotICAgICAgc2VuZGVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0g
ICAgc2VuZGVycyA9IG5hdGl2ZUdldFNlbmRlcnMoKTsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMu
dW5tb2RpZmlhYmxlTGlzdChzZW5kZXJzKTsKLSAgfQotCi0gIHB1YmxpYyBMaXN0PFJ0cFJlY2Vp
dmVyPiBnZXRSZWNlaXZlcnMoKSB7Ci0gICAgZm9yIChSdHBSZWNlaXZlciByZWNlaXZlciA6IHJl
Y2VpdmVycykgewotICAgICAgcmVjZWl2ZXIuZGlzcG9zZSgpOwotICAgIH0KLSAgICByZWNlaXZl
cnMgPSBuYXRpdmVHZXRSZWNlaXZlcnMoKTsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2Rp
ZmlhYmxlTGlzdChyZWNlaXZlcnMpOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZ2V0U3RhdHMo
U3RhdHNPYnNlcnZlciBvYnNlcnZlciwgTWVkaWFTdHJlYW1UcmFjayB0cmFjaykgewotICAgIHJl
dHVybiBuYXRpdmVHZXRTdGF0cyhvYnNlcnZlciwgKHRyYWNrID09IG51bGwpID8gMCA6IHRyYWNr
Lm5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIC8vIFN0YXJ0cyByZWNvcmRpbmcgYW4gUlRDIGV2ZW50
IGxvZy4gT3duZXJzaGlwIG9mIHRoZSBmaWxlIGlzIHRyYW5zZmVyZWQgdG8KLSAgLy8gdGhlIG5h
dGl2ZSBjb2RlLiBJZiBhbiBSVEMgZXZlbnQgbG9nIGlzIGFscmVhZHkgYmVpbmcgcmVjb3JkZWQs
IGl0IHdpbGwgYmUKLSAgLy8gc3RvcHBlZCBhbmQgYSBuZXcgb25lIHdpbGwgc3RhcnQgdXNpbmcg
dGhlIHByb3ZpZGVkIGZpbGUuIExvZ2dpbmcgd2lsbAotICAvLyBjb250aW51ZSB1bnRpbCB0aGUg
c3RvcFJ0Y0V2ZW50TG9nIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIG1heF9zaXplX2J5dGVzCi0g
IC8vIGFyZ3VtZW50IGlzIGlnbm9yZWQsIGl0IGlzIGFkZGVkIGZvciBmdXR1cmUgdXNlLgotICBw
dWJsaWMgYm9vbGVhbiBzdGFydFJ0Y0V2ZW50TG9nKGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBt
YXhfc2l6ZV9ieXRlcykgewotICAgIHJldHVybiBuYXRpdmVTdGFydFJ0Y0V2ZW50TG9nKGZpbGVf
ZGVzY3JpcHRvciwgbWF4X3NpemVfYnl0ZXMpOwotICB9Ci0KLSAgLy8gU3RvcHMgcmVjb3JkaW5n
IGFuIFJUQyBldmVudCBsb2cuIElmIG5vIFJUQyBldmVudCBsb2cgaXMgY3VycmVudGx5IGJlaW5n
Ci0gIC8vIHJlY29yZGVkLCB0aGlzIGNhbGwgd2lsbCBoYXZlIG5vIGVmZmVjdC4KLSAgcHVibGlj
IHZvaWQgc3RvcFJ0Y0V2ZW50TG9nKCkgewotICAgIG5hdGl2ZVN0b3BSdGNFdmVudExvZygpOwot
ICB9Ci0KLSAgLy8gVE9ETyhmaXNjaG1hbik6IGFkZCBzdXBwb3J0IGZvciBEVE1GLXJlbGF0ZWQg
bWV0aG9kcyBvbmNlIHRoYXQgQVBJCi0gIC8vIHN0YWJpbGl6ZXMuCi0gIHB1YmxpYyBuYXRpdmUg
U2lnbmFsaW5nU3RhdGUgc2lnbmFsaW5nU3RhdGUoKTsKLQotICBwdWJsaWMgbmF0aXZlIEljZUNv
bm5lY3Rpb25TdGF0ZSBpY2VDb25uZWN0aW9uU3RhdGUoKTsKLQotICBwdWJsaWMgbmF0aXZlIElj
ZUdhdGhlcmluZ1N0YXRlIGljZUdhdGhlcmluZ1N0YXRlKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSB2
b2lkIGNsb3NlKCk7Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBjbG9zZSgpOwot
ICAgIGZvciAoTWVkaWFTdHJlYW0gc3RyZWFtIDogbG9jYWxTdHJlYW1zKSB7Ci0gICAgICBuYXRp
dmVSZW1vdmVMb2NhbFN0cmVhbShzdHJlYW0ubmF0aXZlU3RyZWFtKTsKLSAgICAgIHN0cmVhbS5k
aXNwb3NlKCk7Ci0gICAgfQotICAgIGxvY2FsU3RyZWFtcy5jbGVhcigpOwotICAgIGZvciAoUnRw
U2VuZGVyIHNlbmRlciA6IHNlbmRlcnMpIHsKLSAgICAgIHNlbmRlci5kaXNwb3NlKCk7Ci0gICAg
fQotICAgIHNlbmRlcnMuY2xlYXIoKTsKLSAgICBmb3IgKFJ0cFJlY2VpdmVyIHJlY2VpdmVyIDog
cmVjZWl2ZXJzKSB7Ci0gICAgICByZWNlaXZlci5kaXNwb3NlKCk7Ci0gICAgfQotICAgIHJlY2Vp
dmVycy5jbGVhcigpOwotICAgIGZyZWVQZWVyQ29ubmVjdGlvbihuYXRpdmVQZWVyQ29ubmVjdGlv
bik7Ci0gICAgZnJlZU9ic2VydmVyKG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIG5hdGl2ZSB2b2lkIGZyZWVQZWVyQ29ubmVjdGlvbihsb25nIG5hdGl2ZVBlZXJDb25u
ZWN0aW9uKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlT2JzZXJ2ZXIobG9u
ZyBuYXRpdmVPYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVBZGRJ
Y2VDYW5kaWRhdGUoCi0gICAgICBTdHJpbmcgc2RwTWlkLCBpbnQgc2RwTUxpbmVJbmRleCwgU3Ry
aW5nIGljZUNhbmRpZGF0ZVNkcCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVS
ZW1vdmVJY2VDYW5kaWRhdGVzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpOwotCi0g
IHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRkTG9jYWxTdHJlYW0obG9uZyBuYXRpdmVT
dHJlYW0pOwotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlUmVtb3ZlTG9jYWxTdHJlYW0o
bG9uZyBuYXRpdmVTdHJlYW0pOwotCi0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlR2V0
U3RhdHMoU3RhdHNPYnNlcnZlciBvYnNlcnZlciwgbG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgcHJp
dmF0ZSBuYXRpdmUgUnRwU2VuZGVyIG5hdGl2ZUNyZWF0ZVNlbmRlcihTdHJpbmcga2luZCwgU3Ry
aW5nIHN0cmVhbV9pZCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgTGlzdDxSdHBTZW5kZXI+IG5hdGl2
ZUdldFNlbmRlcnMoKTsKLQotICBwcml2YXRlIG5hdGl2ZSBMaXN0PFJ0cFJlY2VpdmVyPiBuYXRp
dmVHZXRSZWNlaXZlcnMoKTsKLQotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVN0YXJ0
UnRjRXZlbnRMb2coaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IG1heF9zaXplX2J5dGVzKTsKLQot
ICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVN0b3BSdGNFdmVudExvZygpOwotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uRmFjdG9yeS5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEphdmEg
d3JhcHBlciBmb3IgYSBDKysgUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJmYWNlLiAgTWFpbiBl
bnRyeSBwb2ludCB0bwotICogdGhlIFBlZXJDb25uZWN0aW9uIEFQSSBmb3IgY2xpZW50cy4KLSAq
LwotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uRmFjdG9yeSB7Ci0gIHN0YXRpYyB7Ci0gICAg
U3lzdGVtLmxvYWRMaWJyYXJ5KCJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fc28iKTsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUGVlckNvbm5lY3Rpb25GYWN0b3J5
IjsKLSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZUZhY3Rvcnk7Ci0gIHByaXZhdGUgc3RhdGlj
IFRocmVhZCBuZXR3b3JrVGhyZWFkOwotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgd29ya2VyVGhy
ZWFkOwotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgc2lnbmFsaW5nVGhyZWFkOwotICBwcml2YXRl
IEVnbEJhc2UgbG9jYWxFZ2xiYXNlOwotICBwcml2YXRlIEVnbEJhc2UgcmVtb3RlRWdsYmFzZTsK
LQotICBwdWJsaWMgc3RhdGljIGNsYXNzIE9wdGlvbnMgewotICAgIC8vIEtlZXAgaW4gc3luYyB3
aXRoIHdlYnJ0Yy9iYXNlL25ldHdvcmsuaCEKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJf
VFlQRV9VTktOT1dOID0gMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9FVEhF
Uk5FVCA9IDEgPDwgMDsKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9XSUZJID0g
MSA8PCAxOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX0NFTExVTEFSID0gMSA8
PCAyOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX1ZQTiA9IDEgPDwgMzsKLSAg
ICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9MT09QQkFDSyA9IDEgPDwgNDsKLQotICAg
IHB1YmxpYyBpbnQgbmV0d29ya0lnbm9yZU1hc2s7Ci0gICAgcHVibGljIGJvb2xlYW4gZGlzYWJs
ZUVuY3J5cHRpb247Ci0gICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZU5ldHdvcmtNb25pdG9yOwot
ICB9Ci0KLSAgLy8gfGNvbnRleHR8IGlzIGFuIGFuZHJvaWQuY29udGVudC5Db250ZXh0IG9iamVj
dCwgYnV0IHdlIGtlZXAgaXQgdW50eXBlZCBoZXJlCi0gIC8vIHRvIGFsbG93IGJ1aWxkaW5nIG9u
IG5vbi1BbmRyb2lkIHBsYXRmb3Jtcy4KLSAgLy8gQ2FsbGVycyBtYXkgc3BlY2lmeSBlaXRoZXIg
fGluaXRpYWxpemVBdWRpb3wgb3IgfGluaXRpYWxpemVWaWRlb3wgYXMgZmFsc2UKLSAgLy8gdG8g
c2tpcCBpbml0aWFsaXppbmcgdGhlIHJlc3BlY3RpdmUgZW5naW5lIChhbmQgYXZvaWQgdGhlIG5l
ZWQgZm9yIHRoZQotICAvLyByZXNwZWN0aXZlIHBlcm1pc3Npb25zKS4KLSAgLy8gfHJlbmRlckVH
TENvbnRleHR8IGNhbiBiZSBwcm92aWRlZCB0byBzdXBvcnQgSFcgdmlkZW8gZGVjb2RpbmcgdG8K
LSAgLy8gdGV4dHVyZSBhbmQgd2lsbCBiZSB1c2VkIHRvIGNyZWF0ZSBhIHNoYXJlZCBFR0wgY29u
dGV4dCBvbiB2aWRlbwotICAvLyBkZWNvZGluZyB0aHJlYWQuCi0gIHB1YmxpYyBzdGF0aWMgbmF0
aXZlIGJvb2xlYW4gaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKE9iamVjdCBjb250ZXh0LCBib29s
ZWFuIGluaXRpYWxpemVBdWRpbywKLSAgICAgIGJvb2xlYW4gaW5pdGlhbGl6ZVZpZGVvLCBib29s
ZWFuIHZpZGVvSHdBY2NlbGVyYXRpb24pOwotCi0gIC8vIEZpZWxkIHRyaWFsIGluaXRpYWxpemF0
aW9uLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgUGVlckNvbm5lY3Rpb25GYWN0b3J5Ci0gIC8vIGlz
IGNyZWF0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgaW5pdGlhbGl6ZUZpZWxkVHJp
YWxzKFN0cmluZyBmaWVsZFRyaWFsc0luaXRTdHJpbmcpOwotICAvLyBJbnRlcm5hbCB0cmFjaW5n
IGluaXRpYWxpemF0aW9uLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgUGVlckNvbm5lY3Rpb25GYWN0
b3J5IGlzIGNyZWF0ZWQgdG8KLSAgLy8gcHJldmVudCByYWNpbmcgd2l0aCB0cmFjaW5nIGNvZGUu
Ci0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgaW5pdGlhbGl6ZUludGVybmFsVHJhY2VyKCk7
Ci0gIC8vIEludGVybmFsIHRyYWNpbmcgc2h1dGRvd24sIGNhbGxlZCB0byBwcmV2ZW50IHJlc291
cmNlIGxlYWtzLiBNdXN0IGJlIGNhbGxlZCBhZnRlcgotICAvLyBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkgaXMgZ29uZSB0byBwcmV2ZW50IHJhY2VzIHdpdGggY29kZSBwZXJmb3JtaW5nIHRyYWNpbmcu
Ci0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgc2h1dGRvd25JbnRlcm5hbFRyYWNlcigpOwot
ICAvLyBTdGFydC9zdG9wIGludGVybmFsIGNhcHR1cmluZyBvZiBpbnRlcm5hbCB0cmFjaW5nLgot
ICBwdWJsaWMgc3RhdGljIG5hdGl2ZSBib29sZWFuIHN0YXJ0SW50ZXJuYWxUcmFjaW5nQ2FwdHVy
ZShTdHJpbmcgdHJhY2luZ19maWxlbmFtZSk7Ci0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQg
c3RvcEludGVybmFsVHJhY2luZ0NhcHR1cmUoKTsKLQotICBARGVwcmVjYXRlZAotICBwdWJsaWMg
UGVlckNvbm5lY3Rpb25GYWN0b3J5KCkgewotICAgIHRoaXMobnVsbCk7Ci0gIH0KLQotICBwdWJs
aWMgUGVlckNvbm5lY3Rpb25GYWN0b3J5KE9wdGlvbnMgb3B0aW9ucykgewotICAgIG5hdGl2ZUZh
Y3RvcnkgPSBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3Rvcnkob3B0aW9ucyk7Ci0gICAg
aWYgKG5hdGl2ZUZhY3RvcnkgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oIkZhaWxlZCB0byBpbml0aWFsaXplIFBlZXJDb25uZWN0aW9uRmFjdG9yeSEiKTsKLSAgICB9
Ci0gIH0KLQotICBwdWJsaWMgUGVlckNvbm5lY3Rpb24gY3JlYXRlUGVlckNvbm5lY3Rpb24oUGVl
ckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcsCi0gICAgICBNZWRpYUNvbnN0
cmFpbnRzIGNvbnN0cmFpbnRzLCBQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciBvYnNlcnZlcikgewot
ICAgIGxvbmcgbmF0aXZlT2JzZXJ2ZXIgPSBuYXRpdmVDcmVhdGVPYnNlcnZlcihvYnNlcnZlcik7
Ci0gICAgaWYgKG5hdGl2ZU9ic2VydmVyID09IDApIHsKLSAgICAgIHJldHVybiBudWxsOwotICAg
IH0KLSAgICBsb25nIG5hdGl2ZVBlZXJDb25uZWN0aW9uID0KLSAgICAgICAgbmF0aXZlQ3JlYXRl
UGVlckNvbm5lY3Rpb24obmF0aXZlRmFjdG9yeSwgcnRjQ29uZmlnLCBjb25zdHJhaW50cywgbmF0
aXZlT2JzZXJ2ZXIpOwotICAgIGlmIChuYXRpdmVQZWVyQ29ubmVjdGlvbiA9PSAwKSB7Ci0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBQZWVyQ29ubmVjdGlvbihuYXRp
dmVQZWVyQ29ubmVjdGlvbiwgbmF0aXZlT2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHVibGljIFBlZXJD
b25uZWN0aW9uIGNyZWF0ZVBlZXJDb25uZWN0aW9uKExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2Vy
dmVyPiBpY2VTZXJ2ZXJzLAotICAgICAgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cywgUGVl
ckNvbm5lY3Rpb24uT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBQZWVyQ29ubmVjdGlvbi5SVEND
b25maWd1cmF0aW9uIHJ0Y0NvbmZpZyA9IG5ldyBQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0
aW9uKGljZVNlcnZlcnMpOwotICAgIHJldHVybiBjcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25m
aWcsIGNvbnN0cmFpbnRzLCBvYnNlcnZlcik7Ci0gIH0KLQotICBwdWJsaWMgTWVkaWFTdHJlYW0g
Y3JlYXRlTG9jYWxNZWRpYVN0cmVhbShTdHJpbmcgbGFiZWwpIHsKLSAgICByZXR1cm4gbmV3IE1l
ZGlhU3RyZWFtKG5hdGl2ZUNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0obmF0aXZlRmFjdG9yeSwgbGFi
ZWwpKTsKLSAgfQotCi0gIHB1YmxpYyBWaWRlb1NvdXJjZSBjcmVhdGVWaWRlb1NvdXJjZShWaWRl
b0NhcHR1cmVyIGNhcHR1cmVyKSB7Ci0gICAgZmluYWwgRWdsQmFzZS5Db250ZXh0IGVnbENvbnRl
eHQgPQotICAgICAgICBsb2NhbEVnbGJhc2UgPT0gbnVsbCA/IG51bGwgOiBsb2NhbEVnbGJhc2Uu
Z2V0RWdsQmFzZUNvbnRleHQoKTsKLSAgICBsb25nIG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291
cmNlID0KLSAgICAgICAgbmF0aXZlQ3JlYXRlVmlkZW9Tb3VyY2UobmF0aXZlRmFjdG9yeSwgZWds
Q29udGV4dCwgY2FwdHVyZXIuaXNTY3JlZW5jYXN0KCkpOwotICAgIFZpZGVvQ2FwdHVyZXIuQ2Fw
dHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyID0KLSAgICAgICAgbmV3IFZpZGVvQ2FwdHVy
ZXIuQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VPYnNlcnZlcihuYXRpdmVBbmRyb2lkVmlkZW9UcmFj
a1NvdXJjZSk7Ci0gICAgbmF0aXZlSW5pdGlhbGl6ZVZpZGVvQ2FwdHVyZXIoCi0gICAgICAgIG5h
dGl2ZUZhY3RvcnksIGNhcHR1cmVyLCBuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSwgY2Fw
dHVyZXJPYnNlcnZlcik7Ci0gICAgcmV0dXJuIG5ldyBWaWRlb1NvdXJjZShuYXRpdmVBbmRyb2lk
VmlkZW9UcmFja1NvdXJjZSk7Ci0gIH0KLQotICBwdWJsaWMgVmlkZW9UcmFjayBjcmVhdGVWaWRl
b1RyYWNrKFN0cmluZyBpZCwgVmlkZW9Tb3VyY2Ugc291cmNlKSB7Ci0gICAgcmV0dXJuIG5ldyBW
aWRlb1RyYWNrKG5hdGl2ZUNyZWF0ZVZpZGVvVHJhY2sobmF0aXZlRmFjdG9yeSwgaWQsIHNvdXJj
ZS5uYXRpdmVTb3VyY2UpKTsKLSAgfQotCi0gIHB1YmxpYyBBdWRpb1NvdXJjZSBjcmVhdGVBdWRp
b1NvdXJjZShNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzKSB7Ci0gICAgcmV0dXJuIG5ldyBB
dWRpb1NvdXJjZShuYXRpdmVDcmVhdGVBdWRpb1NvdXJjZShuYXRpdmVGYWN0b3J5LCBjb25zdHJh
aW50cykpOwotICB9Ci0KLSAgcHVibGljIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9UcmFjayhTdHJp
bmcgaWQsIEF1ZGlvU291cmNlIHNvdXJjZSkgewotICAgIHJldHVybiBuZXcgQXVkaW9UcmFjayhu
YXRpdmVDcmVhdGVBdWRpb1RyYWNrKG5hdGl2ZUZhY3RvcnksIGlkLCBzb3VyY2UubmF0aXZlU291
cmNlKSk7Ci0gIH0KLQotICAvLyBTdGFydHMgcmVjb3JkaW5nIGFuIEFFQyBkdW1wLiBPd25lcnNo
aXAgb2YgdGhlIGZpbGUgaXMgdHJhbnNmZXJlZCB0byB0aGUKLSAgLy8gbmF0aXZlIGNvZGUuIElm
IGFuIEFFQyBkdW1wIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGl0IHdpbGwgYmUgc3RvcHBlZCBh
bmQKLSAgLy8gYSBuZXcgb25lIHdpbGwgc3RhcnQgdXNpbmcgdGhlIHByb3ZpZGVkIGZpbGUuCi0g
IHB1YmxpYyBib29sZWFuIHN0YXJ0QWVjRHVtcChpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQgZmls
ZXNpemVfbGltaXRfYnl0ZXMpIHsKLSAgICByZXR1cm4gbmF0aXZlU3RhcnRBZWNEdW1wKG5hdGl2
ZUZhY3RvcnksIGZpbGVfZGVzY3JpcHRvciwgZmlsZXNpemVfbGltaXRfYnl0ZXMpOwotICB9Ci0K
LSAgLy8gU3RvcHMgcmVjb3JkaW5nIGFuIEFFQyBkdW1wLiBJZiBubyBBRUMgZHVtcCBpcyBjdXJy
ZW50bHkgYmVpbmcgcmVjb3JkZWQsCi0gIC8vIHRoaXMgY2FsbCB3aWxsIGhhdmUgbm8gZWZmZWN0
LgotICBwdWJsaWMgdm9pZCBzdG9wQWVjRHVtcCgpIHsKLSAgICBuYXRpdmVTdG9wQWVjRHVtcChu
YXRpdmVGYWN0b3J5KTsKLSAgfQotCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyB2b2lkIHNldE9w
dGlvbnMoT3B0aW9ucyBvcHRpb25zKSB7Ci0gICAgbmF0aXZlU2V0T3B0aW9ucyhuYXRpdmVGYWN0
b3J5LCBvcHRpb25zKTsKLSAgfQotCi0gIC8qKiBTZXQgdGhlIEVHTCBjb250ZXh0IHVzZWQgYnkg
SFcgVmlkZW8gZW5jb2RpbmcgYW5kIGRlY29kaW5nLgotICAgKgotICAgKiBAcGFyYW0gbG9jYWxF
Z2xDb250ZXh0ICAgTXVzdCBiZSB0aGUgc2FtZSBhcyB1c2VkIGJ5IFZpZGVvQ2FwdHVyZXJBbmRy
b2lkIGFuZCBhbnkgbG9jYWwgdmlkZW8KLSAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHJl
bmRlcmVyLgotICAgKiBAcGFyYW0gcmVtb3RlRWdsQ29udGV4dCAgTXVzdCBiZSB0aGUgc2FtZSBh
cyB1c2VkIGJ5IGFueSByZW1vdGUgdmlkZW8gcmVuZGVyZXIuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCBzZXRWaWRlb0h3QWNjZWxlcmF0aW9uT3B0aW9ucygKLSAgICAgIEVnbEJhc2UuQ29udGV4dCBs
b2NhbEVnbENvbnRleHQsIEVnbEJhc2UuQ29udGV4dCByZW1vdGVFZ2xDb250ZXh0KSB7Ci0gICAg
aWYgKGxvY2FsRWdsYmFzZSAhPSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiRWdsIGNv
bnRleHQgYWxyZWFkeSBzZXQuIik7Ci0gICAgICBsb2NhbEVnbGJhc2UucmVsZWFzZSgpOwotICAg
IH0KLSAgICBpZiAocmVtb3RlRWdsYmFzZSAhPSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLncoVEFH
LCAiRWdsIGNvbnRleHQgYWxyZWFkeSBzZXQuIik7Ci0gICAgICByZW1vdGVFZ2xiYXNlLnJlbGVh
c2UoKTsKLSAgICB9Ci0gICAgbG9jYWxFZ2xiYXNlID0gRWdsQmFzZS5jcmVhdGUobG9jYWxFZ2xD
b250ZXh0KTsKLSAgICByZW1vdGVFZ2xiYXNlID0gRWdsQmFzZS5jcmVhdGUocmVtb3RlRWdsQ29u
dGV4dCk7Ci0gICAgbmF0aXZlU2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlvbnMoCi0gICAgICAg
IG5hdGl2ZUZhY3RvcnksIGxvY2FsRWdsYmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCByZW1vdGVF
Z2xiYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9z
ZSgpIHsKLSAgICBuYXRpdmVGcmVlRmFjdG9yeShuYXRpdmVGYWN0b3J5KTsKLSAgICBuZXR3b3Jr
VGhyZWFkID0gbnVsbDsKLSAgICB3b3JrZXJUaHJlYWQgPSBudWxsOwotICAgIHNpZ25hbGluZ1Ro
cmVhZCA9IG51bGw7Ci0gICAgaWYgKGxvY2FsRWdsYmFzZSAhPSBudWxsKQotICAgICAgbG9jYWxF
Z2xiYXNlLnJlbGVhc2UoKTsKLSAgICBpZiAocmVtb3RlRWdsYmFzZSAhPSBudWxsKQotICAgICAg
cmVtb3RlRWdsYmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB0aHJlYWRzQ2Fs
bGJhY2tzKCkgewotICAgIG5hdGl2ZVRocmVhZHNDYWxsYmFja3MobmF0aXZlRmFjdG9yeSk7Ci0g
IH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZShUaHJlYWQgdGhyZWFk
LCBTdHJpbmcgdGhyZWFkTmFtZSkgewotICAgIGlmICh0aHJlYWQgIT0gbnVsbCkgewotICAgICAg
U3RhY2tUcmFjZUVsZW1lbnRbXSBzdGFja1RyYWNlcyA9IHRocmVhZC5nZXRTdGFja1RyYWNlKCk7
Ci0gICAgICBpZiAoc3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQo
VEFHLCB0aHJlYWROYW1lICsgIiBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tU
cmFjZUVsZW1lbnQgc3RhY2tUcmFjZSA6IHN0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2lu
Zy5kKFRBRywgc3RhY2tUcmFjZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN0YWNrVHJhY2VzKCkgewotICAg
IHByaW50U3RhY2tUcmFjZShuZXR3b3JrVGhyZWFkLCAiTmV0d29yayB0aHJlYWQiKTsKLSAgICBw
cmludFN0YWNrVHJhY2Uod29ya2VyVGhyZWFkLCAiV29ya2VyIHRocmVhZCIpOwotICAgIHByaW50
U3RhY2tUcmFjZShzaWduYWxpbmdUaHJlYWQsICJTaWduYWxpbmcgdGhyZWFkIik7Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyB2b2lkIG9uTmV0d29ya1RocmVhZFJlYWR5KCkgewotICAgIG5ldHdv
cmtUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJv
bk5ldHdvcmtUaHJlYWRSZWFkeSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvbldv
cmtlclRocmVhZFJlYWR5KCkgewotICAgIHdvcmtlclRocmVhZCA9IFRocmVhZC5jdXJyZW50VGhy
ZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm9uV29ya2VyVGhyZWFkUmVhZHkiKTsKLSAgfQot
Ci0gIHByaXZhdGUgc3RhdGljIHZvaWQgb25TaWduYWxpbmdUaHJlYWRSZWFkeSgpIHsKLSAgICBz
aWduYWxpbmdUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgIExvZ2dpbmcuZChU
QUcsICJvblNpZ25hbGluZ1RocmVhZFJlYWR5Iik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBu
YXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoT3B0aW9ucyBvcHRp
b25zKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVPYnNlcnZl
cihQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciBvYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlUGVlckNvbm5lY3Rpb24obG9uZyBuYXRpdmVGYWN0b3J5
LAotICAgICAgUGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcsIE1lZGlh
Q29uc3RyYWludHMgY29uc3RyYWludHMsIGxvbmcgbmF0aXZlT2JzZXJ2ZXIpOwotCi0gIHByaXZh
dGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0obG9uZyBu
YXRpdmVGYWN0b3J5LCBTdHJpbmcgbGFiZWwpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBs
b25nIG5hdGl2ZUNyZWF0ZVZpZGVvU291cmNlKAotICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBF
Z2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCwgYm9vbGVhbiBpc19zY3JlZW5jYXN0KTsKLQotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVJbml0aWFsaXplVmlkZW9DYXB0dXJlcihs
b25nIG5hdGl2ZV9mYWN0b3J5LAotICAgICAgVmlkZW9DYXB0dXJlciBqX3ZpZGVvX2NhcHR1cmVy
LCBsb25nIG5hdGl2ZV9zb3VyY2UsCi0gICAgICBWaWRlb0NhcHR1cmVyLkNhcHR1cmVyT2JzZXJ2
ZXIgal9mcmFtZV9vYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0
aXZlQ3JlYXRlVmlkZW9UcmFjaygKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgU3RyaW5nIGlk
LCBsb25nIG5hdGl2ZVZpZGVvU291cmNlKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9u
ZyBuYXRpdmVDcmVhdGVBdWRpb1NvdXJjZSgKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgTWVk
aWFDb25zdHJhaW50cyBjb25zdHJhaW50cyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxv
bmcgbmF0aXZlQ3JlYXRlQXVkaW9UcmFjaygKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgU3Ry
aW5nIGlkLCBsb25nIG5hdGl2ZVNvdXJjZSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJv
b2xlYW4gbmF0aXZlU3RhcnRBZWNEdW1wKAotICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBpbnQg
ZmlsZV9kZXNjcmlwdG9yLCBpbnQgZmlsZXNpemVfbGltaXRfYnl0ZXMpOwotCi0gIHByaXZhdGUg
c3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVN0b3BBZWNEdW1wKGxvbmcgbmF0aXZlRmFjdG9yeSk7
Ci0KLSAgQERlcHJlY2F0ZWQgcHVibGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVNldE9wdGlvbnMobG9u
ZyBuYXRpdmVGYWN0b3J5LCBPcHRpb25zIG9wdGlvbnMpOwotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSB2b2lkIG5hdGl2ZVNldFZpZGVvSHdBY2NlbGVyYXRpb25PcHRpb25zKAotICAgICAgbG9u
ZyBuYXRpdmVGYWN0b3J5LCBPYmplY3QgbG9jYWxFR0xDb250ZXh0LCBPYmplY3QgcmVtb3RlRUdM
Q29udGV4dCk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlVGhyZWFkc0Nh
bGxiYWNrcyhsb25nIG5hdGl2ZUZhY3RvcnkpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2
b2lkIG5hdGl2ZUZyZWVGYWN0b3J5KGxvbmcgbmF0aXZlRmFjdG9yeSk7Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9SZW5kZXJlckNvbW1vbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTggKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1p
bXBvcnQgYW5kcm9pZC5vcGVuZ2wuTWF0cml4OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Owot
Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLQotLyoqCi0gKiBTdGF0aWMgaGVscGVyIGZ1
bmN0aW9ucyBmb3IgcmVuZGVyZXIgaW1wbGVtZW50YXRpb25zLgotICovCi1wdWJsaWMgY2xhc3Mg
UmVuZGVyZXJDb21tb24gewotICAvKiogSW50ZXJmYWNlIGZvciByZXBvcnRpbmcgcmVuZGVyaW5n
IGV2ZW50cy4gKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgUmVuZGVyZXJFdmVudHMgewot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgZmlyc3QgZnJhbWUgaXMgcmVuZGVy
ZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lUmVuZGVyZWQoKTsKLQot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gcmVuZGVyZWQgZnJhbWUgcmVzb2x1
dGlvbiBvciByb3RhdGlvbiBoYXMgY2hhbmdlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBv
bkZyYW1lUmVzb2x1dGlvbkNoYW5nZWQoaW50IHZpZGVvV2lkdGgsIGludCB2aWRlb0hlaWdodCwg
aW50IHJvdGF0aW9uKTsKLSAgfQotCi0gIC8qKiBJbnRlcmZhY2UgZm9yIHJlbmRlcmluZyBmcmFt
ZXMgb24gYW4gRUdMU3VyZmFjZS4gKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgR2xEcmF3
ZXIgewotICAgIC8qKgotICAgICAqIEZ1bmN0aW9ucyBmb3IgZHJhd2luZyBmcmFtZXMgd2l0aCBk
aWZmZXJlbnQgc291cmNlcy4gVGhlIHJlbmRlcmluZyBzdXJmYWNlIHRhcmdldCBpcwotICAgICAq
IGltcGxpZWQgYnkgdGhlIGN1cnJlbnQgRUdMIGNvbnRleHQgb2YgdGhlIGNhbGxpbmcgdGhyZWFk
IGFuZCByZXF1aXJlcyBubyBleHBsaWNpdCBhcmd1bWVudC4KLSAgICAgKiBUaGUgY29vcmRpbmF0
ZXMgc3BlY2lmeSB0aGUgdmlld3BvcnQgbG9jYXRpb24gb24gdGhlIHN1cmZhY2UgdGFyZ2V0Lgot
ICAgICAqLwotICAgIHZvaWQgZHJhd09lcyhpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRleE1h
dHJpeCwgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgICAgaW50IHZpZXdw
b3J0WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdo
dCk7Ci0gICAgdm9pZCBkcmF3UmdiKGludCB0ZXh0dXJlSWQsIGZsb2F0W10gdGV4TWF0cml4LCBp
bnQgZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LCBpbnQgdmlld3BvcnRYLAotICAgICAgICBp
bnQgdmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KTsKLSAg
ICB2b2lkIGRyYXdZdXYoaW50W10geXV2VGV4dHVyZXMsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQg
ZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAgICBpbnQgdmlld3BvcnRYLCBpbnQg
dmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KTsKLQotICAg
IC8qKgotICAgICAqIFJlbGVhc2UgYWxsIEdMIHJlc291cmNlcy4gVGhpcyBuZWVkcyB0byBiZSBk
b25lIG1hbnVhbGx5LCBvdGhlcndpc2UgcmVzb3VyY2VzIG1heSBsZWFrLgotICAgICAqLwotICAg
IHZvaWQgcmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBjbGFzcyBmb3IgdXBs
b2FkaW5nIFlVViBieXRlYnVmZmVyIGZyYW1lcyB0byB0ZXh0dXJlcyB0aGF0IGhhbmRsZXMgc3Ry
aWRlID4gd2lkdGguIFRoaXMKLSAgICogY2xhc3Mga2VlcHMgYW4gaW50ZXJuYWwgQnl0ZUJ1ZmZl
ciB0byBhdm9pZCB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9ucyBmb3IgaW50ZXJtZWRpYXRlIGNvcGll
cy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgWXV2VXBsb2FkZXIgewotICAgIC8vIElu
dGVybWVkaWF0ZSBjb3B5IGJ1ZmZlciBmb3IgdXBsb2FkaW5nIHl1diBmcmFtZXMgdGhhdCBhcmUg
bm90IHBhY2tlZCwgaS5lLiBzdHJpZGUgPiB3aWR0aC4KLSAgICAvLyBUT0RPKG1hZ2plZCk6IElu
dmVzdGlnYXRlIHdoZW4gR0xfVU5QQUNLX1JPV19MRU5HVEggaXMgYXZhaWxhYmxlLCBvciBtYWtl
IGEgY3VzdG9tIHNoYWRlcgotICAgIC8vIHRoYXQgaGFuZGxlcyBzdHJpZGUgYW5kIGNvbXBhcmUg
cGVyZm9ybWFuY2Ugd2l0aCBpbnRlcm1lZGlhdGUgY29weS4KLSAgICBwcml2YXRlIEJ5dGVCdWZm
ZXIgY29weUJ1ZmZlcjsKLQotICAgIC8qKgotICAgICAqIFVwbG9hZCB8cGxhbmVzfCBpbnRvIHxv
dXRwdXRZdXZUZXh0dXJlc3wsIHRha2luZyBzdHJpZGUgaW50byBjb25zaWRlcmF0aW9uLgotICAg
ICAqIHxvdXRwdXRZdXZUZXh0dXJlc3wgbXVzdCBoYXZlIGJlZW4gZ2VuZXJhdGVkIGluIGFkdmFu
Y2UuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgdXBsb2FkWXV2RGF0YSgKLSAgICAgICAgaW50
W10gb3V0cHV0WXV2VGV4dHVyZXMsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50W10gc3RyaWRl
cywgQnl0ZUJ1ZmZlcltdIHBsYW5lcykgewotICAgICAgZmluYWwgaW50W10gcGxhbmVXaWR0aHMg
PSBuZXcgaW50W10ge3dpZHRoLCB3aWR0aCAvIDIsIHdpZHRoIC8gMn07Ci0gICAgICBmaW5hbCBp
bnRbXSBwbGFuZUhlaWdodHMgPSBuZXcgaW50W10ge2hlaWdodCwgaGVpZ2h0IC8gMiwgaGVpZ2h0
IC8gMn07Ci0gICAgICAvLyBNYWtlIGEgZmlyc3QgcGFzcyB0byBzZWUgaWYgd2UgbmVlZCBhIHRl
bXBvcmFyeSBjb3B5IGJ1ZmZlci4KLSAgICAgIGludCBjb3B5Q2FwYWNpdHlOZWVkZWQgPSAwOwot
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAgaWYgKHN0cmlkZXNb
aV0gPiBwbGFuZVdpZHRoc1tpXSkgewotICAgICAgICAgIGNvcHlDYXBhY2l0eU5lZWRlZCA9IE1h
dGgubWF4KGNvcHlDYXBhY2l0eU5lZWRlZCwgcGxhbmVXaWR0aHNbaV0gKiBwbGFuZUhlaWdodHNb
aV0pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBBbGxvY2F0ZSBjb3B5IGJ1ZmZlciBp
ZiBuZWNlc3NhcnkuCi0gICAgICBpZiAoY29weUNhcGFjaXR5TmVlZGVkID4gMAotICAgICAgICAg
ICYmIChjb3B5QnVmZmVyID09IG51bGwgfHwgY29weUJ1ZmZlci5jYXBhY2l0eSgpIDwgY29weUNh
cGFjaXR5TmVlZGVkKSkgewotICAgICAgICBjb3B5QnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0
ZURpcmVjdChjb3B5Q2FwYWNpdHlOZWVkZWQpOwotICAgICAgfQotICAgICAgLy8gVXBsb2FkIGVh
Y2ggcGxhbmUuCi0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgICBH
TEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCArIGkpOwotICAgICAgICBH
TEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgb3V0cHV0WXV2VGV4dHVy
ZXNbaV0pOwotICAgICAgICAvLyBHTEVTIG9ubHkgYWNjZXB0cyBwYWNrZWQgZGF0YSwgaS5lLiBz
dHJpZGUgPT0gcGxhbmVXaWR0aC4KLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBwYWNrZWRCeXRl
QnVmZmVyOwotICAgICAgICBpZiAoc3RyaWRlc1tpXSA9PSBwbGFuZVdpZHRoc1tpXSkgewotICAg
ICAgICAgIC8vIElucHV0IGlzIHBhY2tlZCBhbHJlYWR5LgotICAgICAgICAgIHBhY2tlZEJ5dGVC
dWZmZXIgPSBwbGFuZXNbaV07Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgVmlkZW9SZW5k
ZXJlci5uYXRpdmVDb3B5UGxhbmUoCi0gICAgICAgICAgICAgIHBsYW5lc1tpXSwgcGxhbmVXaWR0
aHNbaV0sIHBsYW5lSGVpZ2h0c1tpXSwgc3RyaWRlc1tpXSwgY29weUJ1ZmZlciwgcGxhbmVXaWR0
aHNbaV0pOwotICAgICAgICAgIHBhY2tlZEJ5dGVCdWZmZXIgPSBjb3B5QnVmZmVyOwotICAgICAg
ICB9Ci0gICAgICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDAs
IEdMRVMyMC5HTF9MVU1JTkFOQ0UsIHBsYW5lV2lkdGhzW2ldLAotICAgICAgICAgICAgcGxhbmVI
ZWlnaHRzW2ldLCAwLCBHTEVTMjAuR0xfTFVNSU5BTkNFLCBHTEVTMjAuR0xfVU5TSUdORURfQllU
RSwgcGFja2VkQnl0ZUJ1ZmZlcik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IEhlbHBlciBjbGFzcyBmb3IgZGV0ZXJtaW5pbmcgbGF5b3V0IHNpemUgYmFzZWQgb24gbGF5b3V0
IHJlcXVpcmVtZW50cywgc2NhbGluZyB0eXBlLCBhbmQgdmlkZW8KLSAgICogYXNwZWN0IHJhdGlv
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBWaWRlb0xheW91dE1lYXN1cmUgewotICAg
IC8vIFRoZSBzY2FsaW5nIHR5cGUgZGV0ZXJtaW5lcyBob3cgdGhlIHZpZGVvIHdpbGwgZmlsbCB0
aGUgYWxsb3dlZCBsYXlvdXQgYXJlYSBpbiBtZWFzdXJlKCkuIEl0Ci0gICAgLy8gY2FuIGJlIHNw
ZWNpZmllZCBzZXBhcmF0ZWx5IGZvciB0aGUgY2FzZSB3aGVuIHZpZGVvIGhhcyBtYXRjaGVkIG9y
aWVudGF0aW9uIHdpdGggbGF5b3V0IHNpemUKLSAgICAvLyBhbmQgd2hlbiB0aGVyZSBpcyBhbiBv
cmllbnRhdGlvbiBtaXNtYXRjaC4KLSAgICBwcml2YXRlIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBl
TWF0Y2hPcmllbnRhdGlvbiA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9CQUxBTkNFRDsKLSAg
ICBwcml2YXRlIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbiA9IFNj
YWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9CQUxBTkNFRDsKLQotICAgIHB1YmxpYyB2b2lkIHNldFNj
YWxpbmdUeXBlKFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlKSB7Ci0gICAgICB0aGlzLnNjYWxpbmdU
eXBlTWF0Y2hPcmllbnRhdGlvbiA9IHNjYWxpbmdUeXBlOwotICAgICAgdGhpcy5zY2FsaW5nVHlw
ZU1pc21hdGNoT3JpZW50YXRpb24gPSBzY2FsaW5nVHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBzZXRTY2FsaW5nVHlwZSgKLSAgICAgICAgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNYXRj
aE9yaWVudGF0aW9uLCBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb24p
IHsKLSAgICAgIHRoaXMuc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uID0gc2NhbGluZ1R5cGVN
YXRjaE9yaWVudGF0aW9uOwotICAgICAgdGhpcy5zY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRp
b24gPSBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb247Ci0gICAgfQotCi0gICAgcHVibGlj
IFBvaW50IG1lYXN1cmUoaW50IHdpZHRoU3BlYywgaW50IGhlaWdodFNwZWMsIGludCBmcmFtZVdp
ZHRoLCBpbnQgZnJhbWVIZWlnaHQpIHsKLSAgICAgIC8vIENhbGN1bGF0ZSBtYXggYWxsb3dlZCBs
YXlvdXQgc2l6ZS4KLSAgICAgIGZpbmFsIGludCBtYXhXaWR0aCA9IFZpZXcuZ2V0RGVmYXVsdFNp
emUoSW50ZWdlci5NQVhfVkFMVUUsIHdpZHRoU3BlYyk7Ci0gICAgICBmaW5hbCBpbnQgbWF4SGVp
Z2h0ID0gVmlldy5nZXREZWZhdWx0U2l6ZShJbnRlZ2VyLk1BWF9WQUxVRSwgaGVpZ2h0U3BlYyk7
Ci0gICAgICBpZiAoZnJhbWVXaWR0aCA9PSAwIHx8IGZyYW1lSGVpZ2h0ID09IDAgfHwgbWF4V2lk
dGggPT0gMCB8fCBtYXhIZWlnaHQgPT0gMCkgewotICAgICAgICByZXR1cm4gbmV3IFBvaW50KG1h
eFdpZHRoLCBtYXhIZWlnaHQpOwotICAgICAgfQotICAgICAgLy8gQ2FsY3VsYXRlIGRlc2lyZWQg
ZGlzcGxheSBzaXplIGJhc2VkIG9uIHNjYWxpbmcgdHlwZSwgdmlkZW8gYXNwZWN0IHJhdGlvLAot
ICAgICAgLy8gYW5kIG1heGltdW0gbGF5b3V0IHNpemUuCi0gICAgICBmaW5hbCBmbG9hdCBmcmFt
ZUFzcGVjdCA9IGZyYW1lV2lkdGggLyAoZmxvYXQpIGZyYW1lSGVpZ2h0OwotICAgICAgZmluYWwg
ZmxvYXQgZGlzcGxheUFzcGVjdCA9IG1heFdpZHRoIC8gKGZsb2F0KSBtYXhIZWlnaHQ7Ci0gICAg
ICBmaW5hbCBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA9IChmcmFtZUFzcGVjdCA+IDEuMGYpID09
IChkaXNwbGF5QXNwZWN0ID4gMS4wZikKLSAgICAgICAgICA/IHNjYWxpbmdUeXBlTWF0Y2hPcmll
bnRhdGlvbgotICAgICAgICAgIDogc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uOwotICAg
ICAgZmluYWwgUG9pbnQgbGF5b3V0U2l6ZSA9IGdldERpc3BsYXlTaXplKHNjYWxpbmdUeXBlLCBm
cmFtZUFzcGVjdCwgbWF4V2lkdGgsIG1heEhlaWdodCk7Ci0KLSAgICAgIC8vIElmIHRoZSBtZWFz
dXJlIHNwZWNpZmljYXRpb24gaXMgZm9yY2luZyBhIHNwZWNpZmljIHNpemUgLSB5aWVsZC4KLSAg
ICAgIGlmIChWaWV3Lk1lYXN1cmVTcGVjLmdldE1vZGUod2lkdGhTcGVjKSA9PSBWaWV3Lk1lYXN1
cmVTcGVjLkVYQUNUTFkpIHsKLSAgICAgICAgbGF5b3V0U2l6ZS54ID0gbWF4V2lkdGg7Ci0gICAg
ICB9Ci0gICAgICBpZiAoVmlldy5NZWFzdXJlU3BlYy5nZXRNb2RlKGhlaWdodFNwZWMpID09IFZp
ZXcuTWVhc3VyZVNwZWMuRVhBQ1RMWSkgewotICAgICAgICBsYXlvdXRTaXplLnkgPSBtYXhIZWln
aHQ7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbGF5b3V0U2l6ZTsKLSAgICB9Ci0gIH0KLQotICAv
LyBUeXBlcyBvZiB2aWRlbyBzY2FsaW5nOgotICAvLyBTQ0FMRV9BU1BFQ1RfRklUIC0gdmlkZW8g
ZnJhbWUgaXMgc2NhbGVkIHRvIGZpdCB0aGUgc2l6ZSBvZiB0aGUgdmlldyBieQotICAvLyAgICBt
YWludGFpbmluZyB0aGUgYXNwZWN0IHJhdGlvIChibGFjayBib3JkZXJzIG1heSBiZSBkaXNwbGF5
ZWQpLgotICAvLyBTQ0FMRV9BU1BFQ1RfRklMTCAtIHZpZGVvIGZyYW1lIGlzIHNjYWxlZCB0byBm
aWxsIHRoZSBzaXplIG9mIHRoZSB2aWV3IGJ5Ci0gIC8vICAgIG1haW50YWluaW5nIHRoZSBhc3Bl
Y3QgcmF0aW8uIFNvbWUgcG9ydGlvbiBvZiB0aGUgdmlkZW8gZnJhbWUgbWF5IGJlCi0gIC8vICAg
IGNsaXBwZWQuCi0gIC8vIFNDQUxFX0FTUEVDVF9CQUxBTkNFRCAtIENvbXByb21pc2UgYmV0d2Vl
biBGSVQgYW5kIEZJTEwuIFZpZGVvIGZyYW1lIHdpbGwgZmlsbCBhcyBtdWNoIGFzCi0gIC8vIHBv
c3NpYmxlIG9mIHRoZSB2aWV3IHdoaWxlIG1haW50YWluaW5nIGFzcGVjdCByYXRpbywgdW5kZXIg
dGhlIGNvbnN0cmFpbnQgdGhhdCBhdCBsZWFzdAotICAvLyB8QkFMQU5DRURfVklTSUJMRV9GUkFD
VElPTnwgb2YgdGhlIGZyYW1lIGNvbnRlbnQgd2lsbCBiZSBzaG93bi4KLSAgcHVibGljIHN0YXRp
YyBlbnVtIFNjYWxpbmdUeXBlIHsgU0NBTEVfQVNQRUNUX0ZJVCwgU0NBTEVfQVNQRUNUX0ZJTEws
IFNDQUxFX0FTUEVDVF9CQUxBTkNFRCB9Ci0gIC8vIFRoZSBtaW5pbXVtIGZyYWN0aW9uIG9mIHRo
ZSBmcmFtZSBjb250ZW50IHRoYXQgd2lsbCBiZSBzaG93biBmb3IgfFNDQUxFX0FTUEVDVF9CQUxB
TkNFRHwuCi0gIC8vIFRoaXMgbGltaXRzIGV4Y2Vzc2l2ZSBjcm9wcGluZyB3aGVuIGFkanVzdGlu
ZyBkaXNwbGF5IHNpemUuCi0gIHByaXZhdGUgc3RhdGljIGZsb2F0IEJBTEFOQ0VEX1ZJU0lCTEVf
RlJBQ1RJT04gPSAwLjU2MjVmOwotICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gIHB1YmxpYyBzdGF0
aWMgZmluYWwgZmxvYXRbXSBpZGVudGl0eU1hdHJpeCgpIHsKLSAgICByZXR1cm4gbmV3IGZsb2F0
W10gewotICAgICAgICAxLCAwLCAwLCAwLAotICAgICAgICAwLCAxLCAwLCAwLAotICAgICAgICAw
LCAwLCAxLCAwLAotICAgICAgICAwLCAwLCAwLCAxfTsKLSAgfQotICAvLyBNYXRyaXggd2l0aCB0
cmFuc2Zvcm0geScgPSAxIC0geS4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdFtdIHZlcnRp
Y2FsRmxpcE1hdHJpeCgpIHsKLSAgICByZXR1cm4gbmV3IGZsb2F0W10gewotICAgICAgICAxLCAg
MCwgMCwgMCwKLSAgICAgICAgMCwgLTEsIDAsIDAsCi0gICAgICAgIDAsICAwLCAxLCAwLAotICAg
ICAgICAwLCAgMSwgMCwgMX07Ci0gIH0KLQotICAvLyBNYXRyaXggd2l0aCB0cmFuc2Zvcm0geCcg
PSAxIC0geC4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdFtdIGhvcml6b250YWxGbGlwTWF0
cml4KCkgewotICAgIHJldHVybiBuZXcgZmxvYXRbXSB7Ci0gICAgICAgIC0xLCAwLCAwLCAwLAot
ICAgICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAxLCAw
LCAwLCAxfTsKLSAgfQotICAvLyBjbGFuZy1mb3JtYXQgb24KLQotICAvKioKLSAgICogUmV0dXJu
cyB0ZXh0dXJlIG1hdHJpeCB0aGF0IHdpbGwgaGF2ZSB0aGUgZWZmZWN0IG9mIHJvdGF0aW5nIHRo
ZSBmcmFtZSB8cm90YXRpb25EZWdyZWV8Ci0gICAqIGNsb2Nrd2lzZSB3aGVuIHJlbmRlcmVkLgot
ICAgKi8KLSAgcHVibGljIHN0YXRpYyBmbG9hdFtdIHJvdGF0ZVRleHR1cmVNYXRyaXgoZmxvYXRb
XSB0ZXh0dXJlTWF0cml4LCBmbG9hdCByb3RhdGlvbkRlZ3JlZSkgewotICAgIGZpbmFsIGZsb2F0
W10gcm90YXRpb25NYXRyaXggPSBuZXcgZmxvYXRbMTZdOwotICAgIE1hdHJpeC5zZXRSb3RhdGVN
KHJvdGF0aW9uTWF0cml4LCAwLCByb3RhdGlvbkRlZ3JlZSwgMCwgMCwgMSk7Ci0gICAgYWRqdXN0
T3JpZ2luKHJvdGF0aW9uTWF0cml4KTsKLSAgICByZXR1cm4gbXVsdGlwbHlNYXRyaWNlcyh0ZXh0
dXJlTWF0cml4LCByb3RhdGlvbk1hdHJpeCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBu
ZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdCBvZiBhICogYi4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgZmxvYXRbXSBtdWx0aXBseU1hdHJpY2VzKGZsb2F0W10gYSwgZmxvYXRbXSBiKSB7Ci0gICAg
ZmluYWwgZmxvYXRbXSByZXN1bHRNYXRyaXggPSBuZXcgZmxvYXRbMTZdOwotICAgIE1hdHJpeC5t
dWx0aXBseU1NKHJlc3VsdE1hdHJpeCwgMCwgYSwgMCwgYiwgMCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dE1hdHJpeDsKLSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIGxheW91dCB0cmFuc2Zvcm1hdGlv
biBtYXRyaXggdGhhdCBhcHBsaWVzIGFuIG9wdGlvbmFsIG1pcnJvciBlZmZlY3QgYW5kIGNvbXBl
bnNhdGVzCi0gICAqIGZvciB2aWRlbyB2cyBkaXNwbGF5IGFzcGVjdCByYXRpby4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgZmxvYXRbXSBnZXRMYXlvdXRNYXRyaXgoCi0gICAgICBib29sZWFuIG1p
cnJvciwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbywgZmxvYXQgZGlzcGxheUFzcGVjdFJhdGlvKSB7
Ci0gICAgZmxvYXQgc2NhbGVYID0gMTsKLSAgICBmbG9hdCBzY2FsZVkgPSAxOwotICAgIC8vIFNj
YWxlIFggb3IgWSBkaW1lbnNpb24gc28gdGhhdCB2aWRlbyBhbmQgZGlzcGxheSBzaXplIGhhdmUg
c2FtZSBhc3BlY3QgcmF0aW8uCi0gICAgaWYgKGRpc3BsYXlBc3BlY3RSYXRpbyA+IHZpZGVvQXNw
ZWN0UmF0aW8pIHsKLSAgICAgIHNjYWxlWSA9IHZpZGVvQXNwZWN0UmF0aW8gLyBkaXNwbGF5QXNw
ZWN0UmF0aW87Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNjYWxlWCA9IGRpc3BsYXlBc3BlY3RSYXRp
byAvIHZpZGVvQXNwZWN0UmF0aW87Ci0gICAgfQotICAgIC8vIEFwcGx5IG9wdGlvbmFsIGhvcml6
b250YWwgZmxpcC4KLSAgICBpZiAobWlycm9yKSB7Ci0gICAgICBzY2FsZVggKj0gLTE7Ci0gICAg
fQotICAgIGZpbmFsIGZsb2F0IG1hdHJpeFtdID0gbmV3IGZsb2F0WzE2XTsKLSAgICBNYXRyaXgu
c2V0SWRlbnRpdHlNKG1hdHJpeCwgMCk7Ci0gICAgTWF0cml4LnNjYWxlTShtYXRyaXgsIDAsIHNj
YWxlWCwgc2NhbGVZLCAxKTsKLSAgICBhZGp1c3RPcmlnaW4obWF0cml4KTsKLSAgICByZXR1cm4g
bWF0cml4OwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGN1bGF0ZSBkaXNwbGF5IHNpemUgYmFzZWQg
b24gc2NhbGluZyB0eXBlLCB2aWRlbyBhc3BlY3QgcmF0aW8sIGFuZCBtYXhpbXVtIGRpc3BsYXkg
c2l6ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgUG9pbnQgZ2V0RGlzcGxheVNpemUoCi0gICAg
ICBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbywgaW50IG1h
eERpc3BsYXlXaWR0aCwgaW50IG1heERpc3BsYXlIZWlnaHQpIHsKLSAgICByZXR1cm4gZ2V0RGlz
cGxheVNpemUoY29udmVydFNjYWxpbmdUeXBlVG9WaXNpYmxlRnJhY3Rpb24oc2NhbGluZ1R5cGUp
LCB2aWRlb0FzcGVjdFJhdGlvLAotICAgICAgICBtYXhEaXNwbGF5V2lkdGgsIG1heERpc3BsYXlI
ZWlnaHQpOwotICB9Ci0KLSAgLyoqCi0gICAqIE1vdmUgfG1hdHJpeHwgdHJhbnNmb3JtYXRpb24g
b3JpZ2luIHRvICgwLjUsIDAuNSkuIFRoaXMgaXMgdGhlIG9yaWdpbiBmb3IgdGV4dHVyZSBjb29y
ZGluYXRlcwotICAgKiB0aGF0IGFyZSBpbiB0aGUgcmFuZ2UgMCB0byAxLgotICAgKi8KLSAgcHJp
dmF0ZSBzdGF0aWMgdm9pZCBhZGp1c3RPcmlnaW4oZmxvYXRbXSBtYXRyaXgpIHsKLSAgICAvLyBO
b3RlIHRoYXQgT3BlbkdMIGlzIHVzaW5nIGNvbHVtbi1tYWpvciBvcmRlci4KLSAgICAvLyBQcmUg
dHJhbnNsYXRlIHdpdGggLTAuNSB0byBtb3ZlIGNvb3JkaW5hdGVzIHRvIHJhbmdlIFstMC41LCAw
LjVdLgotICAgIG1hdHJpeFsxMl0gLT0gMC41ZiAqIChtYXRyaXhbMF0gKyBtYXRyaXhbNF0pOwot
ICAgIG1hdHJpeFsxM10gLT0gMC41ZiAqIChtYXRyaXhbMV0gKyBtYXRyaXhbNV0pOwotICAgIC8v
IFBvc3QgdHJhbnNsYXRlIHdpdGggMC41IHRvIG1vdmUgY29vcmRpbmF0ZXMgdG8gcmFuZ2UgWzAs
IDFdLgotICAgIG1hdHJpeFsxMl0gKz0gMC41ZjsKLSAgICBtYXRyaXhbMTNdICs9IDAuNWY7Ci0g
IH0KLQotICAvKioKLSAgICogRWFjaCBzY2FsaW5nIHR5cGUgaGFzIGEgb25lLXRvLW9uZSBjb3Jy
ZXNwb25kZW5jZSB0byBhIG51bWVyaWMgbWluaW11bSBmcmFjdGlvbiBvZiB0aGUgdmlkZW8KLSAg
ICogdGhhdCBtdXN0IHJlbWFpbiB2aXNpYmxlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmxv
YXQgY29udmVydFNjYWxpbmdUeXBlVG9WaXNpYmxlRnJhY3Rpb24oU2NhbGluZ1R5cGUgc2NhbGlu
Z1R5cGUpIHsKLSAgICBzd2l0Y2ggKHNjYWxpbmdUeXBlKSB7Ci0gICAgICBjYXNlIFNDQUxFX0FT
UEVDVF9GSVQ6Ci0gICAgICAgIHJldHVybiAxLjBmOwotICAgICAgY2FzZSBTQ0FMRV9BU1BFQ1Rf
RklMTDoKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0gICAgICBjYXNlIFNDQUxFX0FTUEVDVF9CQUxB
TkNFRDoKLSAgICAgICAgcmV0dXJuIEJBTEFOQ0VEX1ZJU0lCTEVfRlJBQ1RJT047Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCk7Ci0g
ICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGN1bGF0ZSBkaXNwbGF5IHNpemUgYmFzZWQgb24g
bWluaW11bSBmcmFjdGlvbiBvZiB0aGUgdmlkZW8gdGhhdCBtdXN0IHJlbWFpbiB2aXNpYmxlLAot
ICAgKiB2aWRlbyBhc3BlY3QgcmF0aW8sIGFuZCBtYXhpbXVtIGRpc3BsYXkgc2l6ZS4KLSAgICov
Ci0gIHByaXZhdGUgc3RhdGljIFBvaW50IGdldERpc3BsYXlTaXplKAotICAgICAgZmxvYXQgbWlu
VmlzaWJsZUZyYWN0aW9uLCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvLCBpbnQgbWF4RGlzcGxheVdp
ZHRoLCBpbnQgbWF4RGlzcGxheUhlaWdodCkgewotICAgIC8vIElmIHRoZXJlIGlzIG5vIGNvbnN0
cmFpbnQgb24gdGhlIGFtb3VudCBvZiBjcm9wcGluZywgZmlsbCB0aGUgYWxsb3dlZCBkaXNwbGF5
IGFyZWEuCi0gICAgaWYgKG1pblZpc2libGVGcmFjdGlvbiA9PSAwIHx8IHZpZGVvQXNwZWN0UmF0
aW8gPT0gMCkgewotICAgICAgcmV0dXJuIG5ldyBQb2ludChtYXhEaXNwbGF5V2lkdGgsIG1heERp
c3BsYXlIZWlnaHQpOwotICAgIH0KLSAgICAvLyBFYWNoIGRpbWVuc2lvbiBpcyBjb25zdHJhaW5l
ZCBvbiBtYXggZGlzcGxheSBzaXplIGFuZCBob3cgbXVjaCB3ZSBhcmUgYWxsb3dlZCB0byBjcm9w
LgotICAgIGZpbmFsIGludCB3aWR0aCA9IE1hdGgubWluKAotICAgICAgICBtYXhEaXNwbGF5V2lk
dGgsIE1hdGgucm91bmQobWF4RGlzcGxheUhlaWdodCAvIG1pblZpc2libGVGcmFjdGlvbiAqIHZp
ZGVvQXNwZWN0UmF0aW8pKTsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gTWF0aC5taW4oCi0gICAg
ICAgIG1heERpc3BsYXlIZWlnaHQsIE1hdGgucm91bmQobWF4RGlzcGxheVdpZHRoIC8gbWluVmlz
aWJsZUZyYWN0aW9uIC8gdmlkZW9Bc3BlY3RSYXRpbykpOwotICAgIHJldHVybiBuZXcgUG9pbnQo
d2lkdGgsIGhlaWdodCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUGFyYW1l
dGVycy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUGFyYW1ldGVycy5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0v
KioKLSAqIFRoZSBwYXJhbWV0ZXJzIGZvciBhbiB7QGNvZGUgUnRwU2VuZGVyfSwgYXMgZGVmaW5l
ZCBpbgotICogaHR0cDovL3czYy5naXRodWIuaW8vd2VicnRjLXBjLyNydGNydHBzZW5kZXItaW50
ZXJmYWNlLgotICovCi1wdWJsaWMgY2xhc3MgUnRwUGFyYW1ldGVycyB7Ci0gIHB1YmxpYyBzdGF0
aWMgY2xhc3MgRW5jb2RpbmcgewotICAgIHB1YmxpYyBib29sZWFuIGFjdGl2ZSA9IHRydWU7Ci0g
ICAgLy8gQSBudWxsIHZhbHVlIG1lYW5zICJubyBtYXhpbXVtIGJpdHJhdGUiLgotICAgIHB1Ymxp
YyBJbnRlZ2VyIG1heEJpdHJhdGVCcHM7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIENv
ZGVjIHsKLSAgICBpbnQgcGF5bG9hZFR5cGU7Ci0gICAgU3RyaW5nIG1pbWVUeXBlOwotICAgIGlu
dCBjbG9ja1JhdGU7Ci0gICAgaW50IGNoYW5uZWxzID0gMTsKLSAgfQotCi0gIHB1YmxpYyBmaW5h
bCBMaW5rZWRMaXN0PEVuY29kaW5nPiBlbmNvZGluZ3M7Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRM
aXN0PENvZGVjPiBjb2RlY3M7Ci0KLSAgcHVibGljIFJ0cFBhcmFtZXRlcnMoKSB7Ci0gICAgZW5j
b2RpbmdzID0gbmV3IExpbmtlZExpc3Q8RW5jb2Rpbmc+KCk7Ci0gICAgY29kZWNzID0gbmV3IExp
bmtlZExpc3Q8Q29kZWM+KCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUmVj
ZWl2ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFJlY2VpdmVyLmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRwUmVjZWl2ZXIuamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgUnRwUmVjZWl2
ZXJJbnRlcmZhY2UuICovCi1wdWJsaWMgY2xhc3MgUnRwUmVjZWl2ZXIgewotICBmaW5hbCBsb25n
IG5hdGl2ZVJ0cFJlY2VpdmVyOwotCi0gIHByaXZhdGUgTWVkaWFTdHJlYW1UcmFjayBjYWNoZWRU
cmFjazsKLQotICBwdWJsaWMgUnRwUmVjZWl2ZXIobG9uZyBuYXRpdmVSdHBSZWNlaXZlcikgewot
ICAgIHRoaXMubmF0aXZlUnRwUmVjZWl2ZXIgPSBuYXRpdmVSdHBSZWNlaXZlcjsKLSAgICBsb25n
IHRyYWNrID0gbmF0aXZlR2V0VHJhY2sobmF0aXZlUnRwUmVjZWl2ZXIpOwotICAgIC8vIFdlIGNh
biBhc3N1bWUgdGhhdCBhbiBSdHBSZWNlaXZlciBhbHdheXMgaGFzIGFuIGFzc29jaWF0ZWQgdHJh
Y2suCi0gICAgY2FjaGVkVHJhY2sgPSBuZXcgTWVkaWFTdHJlYW1UcmFjayh0cmFjayk7Ci0gIH0K
LQotICBwdWJsaWMgTWVkaWFTdHJlYW1UcmFjayB0cmFjaygpIHsKLSAgICByZXR1cm4gY2FjaGVk
VHJhY2s7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJhbWV0ZXJzKFJ0cFBhcmFtZXRl
cnMgcGFyYW1ldGVycykgewotICAgIHJldHVybiBuYXRpdmVTZXRQYXJhbWV0ZXJzKG5hdGl2ZVJ0
cFJlY2VpdmVyLCBwYXJhbWV0ZXJzKTsKLSAgfQotCi0gIHB1YmxpYyBSdHBQYXJhbWV0ZXJzIGdl
dFBhcmFtZXRlcnMoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldFBhcmFtZXRlcnMobmF0aXZlUnRw
UmVjZWl2ZXIpOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyBpZCgpIHsKLSAgICByZXR1cm4gbmF0
aXZlSWQobmF0aXZlUnRwUmVjZWl2ZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgp
IHsKLSAgICBjYWNoZWRUcmFjay5kaXNwb3NlKCk7Ci0gICAgZnJlZShuYXRpdmVSdHBSZWNlaXZl
cik7Ci0gIH0KLQotICAvLyBUaGlzIHNob3VsZCBpbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3Vu
dCBvZiB0aGUgdHJhY2suCi0gIC8vIFdpbGwgYmUgcmVsZWFzZWQgaW4gZGlzcG9zZSgpLgotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVHZXRUcmFjayhsb25nIG5hdGl2ZVJ0cFJl
Y2VpdmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTZXRQYXJh
bWV0ZXJzKAotICAgICAgbG9uZyBuYXRpdmVSdHBSZWNlaXZlciwgUnRwUGFyYW1ldGVycyBwYXJh
bWV0ZXJzKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgUnRwUGFyYW1ldGVycyBuYXRpdmVH
ZXRQYXJhbWV0ZXJzKGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSBTdHJpbmcgbmF0aXZlSWQobG9uZyBuYXRpdmVSdHBSZWNlaXZlcik7Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLX07
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFNlbmRlci5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvUnRwU2VuZGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvUnRwU2VuZGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw4MCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHdy
YXBwZXIgZm9yIGEgQysrIFJ0cFNlbmRlckludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBSdHBT
ZW5kZXIgewotICBmaW5hbCBsb25nIG5hdGl2ZVJ0cFNlbmRlcjsKLQotICBwcml2YXRlIE1lZGlh
U3RyZWFtVHJhY2sgY2FjaGVkVHJhY2s7Ci0gIHByaXZhdGUgYm9vbGVhbiBvd25zVHJhY2sgPSB0
cnVlOwotCi0gIHB1YmxpYyBSdHBTZW5kZXIobG9uZyBuYXRpdmVSdHBTZW5kZXIpIHsKLSAgICB0
aGlzLm5hdGl2ZVJ0cFNlbmRlciA9IG5hdGl2ZVJ0cFNlbmRlcjsKLSAgICBsb25nIHRyYWNrID0g
bmF0aXZlR2V0VHJhY2sobmF0aXZlUnRwU2VuZGVyKTsKLSAgICAvLyBJdCBtYXkgYmUgcG9zc2li
bGUgZm9yIGFuIFJ0cFNlbmRlciB0byBiZSBjcmVhdGVkIHdpdGhvdXQgYSB0cmFjay4KLSAgICBj
YWNoZWRUcmFjayA9ICh0cmFjayA9PSAwKSA/IG51bGwgOiBuZXcgTWVkaWFTdHJlYW1UcmFjayh0
cmFjayk7Ci0gIH0KLQotICAvLyBJZiB8dGFrZU93bmVyc2hpcHwgaXMgdHJ1ZSwgdGhlIFJ0cFNl
bmRlciB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIHRyYWNrCi0gIC8vIGZyb20gdGhlIGNhbGxlciwg
YW5kIHdpbGwgYXV0by1kaXNwb3NlIG9mIGl0IHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC4KLSAgLy8g
fHRha2VPd25lcnNoaXB8IHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGNhbGxlciBvd25zIHRo
ZSB0cmFjazsgaXQgaXMKLSAgLy8gbm90IGFwcHJvcHJpYXRlIHdoZW4gdGhlIHRyYWNrIGlzIG93
bmVkIGJ5LCBmb3IgZXhhbXBsZSwgYW5vdGhlciBSdHBTZW5kZXIKLSAgLy8gb3IgYSBNZWRpYVN0
cmVhbS4KLSAgcHVibGljIGJvb2xlYW4gc2V0VHJhY2soTWVkaWFTdHJlYW1UcmFjayB0cmFjaywg
Ym9vbGVhbiB0YWtlT3duZXJzaGlwKSB7Ci0gICAgaWYgKCFuYXRpdmVTZXRUcmFjayhuYXRpdmVS
dHBTZW5kZXIsICh0cmFjayA9PSBudWxsKSA/IDAgOiB0cmFjay5uYXRpdmVUcmFjaykpIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGNhY2hlZFRyYWNrICE9IG51bGwgJiYg
b3duc1RyYWNrKSB7Ci0gICAgICBjYWNoZWRUcmFjay5kaXNwb3NlKCk7Ci0gICAgfQotICAgIGNh
Y2hlZFRyYWNrID0gdHJhY2s7Ci0gICAgb3duc1RyYWNrID0gdGFrZU93bmVyc2hpcDsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrIHRyYWNrKCkgewot
ICAgIHJldHVybiBjYWNoZWRUcmFjazsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldFBhcmFt
ZXRlcnMoUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVNldFBh
cmFtZXRlcnMobmF0aXZlUnRwU2VuZGVyLCBwYXJhbWV0ZXJzKTsKLSAgfQotCi0gIHB1YmxpYyBS
dHBQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldFBhcmFt
ZXRlcnMobmF0aXZlUnRwU2VuZGVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgaWQoKSB7Ci0g
ICAgcmV0dXJuIG5hdGl2ZUlkKG5hdGl2ZVJ0cFNlbmRlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBkaXNwb3NlKCkgewotICAgIGlmIChjYWNoZWRUcmFjayAhPSBudWxsICYmIG93bnNUcmFjaykg
ewotICAgICAgY2FjaGVkVHJhY2suZGlzcG9zZSgpOwotICAgIH0KLSAgICBmcmVlKG5hdGl2ZVJ0
cFNlbmRlcik7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVT
ZXRUcmFjayhsb25nIG5hdGl2ZVJ0cFNlbmRlciwgbG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgLy8g
VGhpcyBzaG91bGQgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIHRyYWNrLgot
ICAvLyBXaWxsIGJlIHJlbGVhc2VkIGluIGRpc3Bvc2UoKSBvciBzZXRUcmFjaygpLgotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVHZXRUcmFjayhsb25nIG5hdGl2ZVJ0cFNlbmRl
cik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU2V0UGFyYW1ldGVy
cyhsb25nIG5hdGl2ZVJ0cFNlbmRlciwgUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzKTsKLQotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgUnRwUGFyYW1ldGVycyBuYXRpdmVHZXRQYXJhbWV0ZXJzKGxv
bmcgbmF0aXZlUnRwU2VuZGVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIG5h
dGl2ZUlkKGxvbmcgbmF0aXZlUnRwU2VuZGVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
dm9pZCBmcmVlKGxvbmcgbmF0aXZlUnRwU2VuZGVyKTsKLX07CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1NjcmVlbkNhcHR1cmVyQW5kcm9pZC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvU2NyZWVuQ2FwdHVyZXJBbmRyb2lkLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvU2NyZWVuQ2FwdHVyZXJBbmRyb2lkLmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSwyMDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lk
LmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBh
bmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuZGlzcGxheS5E
aXNwbGF5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXkuVmlydHVhbERp
c3BsYXk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0aW9uLk1lZGlhUHJvamVjdGlvbjsK
LWltcG9ydCBhbmRyb2lkLm1lZGlhLnByb2plY3Rpb24uTWVkaWFQcm9qZWN0aW9uTWFuYWdlcjsK
LWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxp
c3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24g
b2YgVmlkZW9DYXB0dXJlciB0byBjYXB0dXJlIHRoZSBzY3JlZW4gY29udGVudCBhcyBhIHZpZGVv
IHN0cmVhbS4KLSAqIENhcHR1cmluZyBpcyBkb25lIGJ5IHtAY29kZSBNZWRpYVByb2plY3Rpb259
IG9uIGEge0Bjb2RlIFN1cmZhY2VUZXh0dXJlfS4gV2UgaW50ZXJhY3Qgd2l0aCB0aGlzCi0gKiB7
QGNvZGUgU3VyZmFjZVRleHR1cmV9IHVzaW5nIGEge0Bjb2RlIFN1cmZhY2VUZXh0dXJlSGVscGVy
fS4KLSAqIFRoZSB7QGNvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9IGlzIGNyZWF0ZWQgYnkgdGhl
IG5hdGl2ZSBjb2RlIGFuZCBwYXNzZWQgdG8gdGhpcyBjYXB0dXJlciBpbgotICoge0Bjb2RlIFZp
ZGVvQ2FwdHVyZXIuaW5pdGlhbGl6ZSgpfS4gT24gcmVjZWl2aW5nIGEgbmV3IGZyYW1lLCB0aGlz
IGNhcHR1cmVyIHBhc3NlcyBpdAotICogYXMgYSB0ZXh0dXJlIHRvIHRoZSBuYXRpdmUgY29kZSB2
aWEge0Bjb2RlIENhcHR1cmVyT2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgpfS4gVGhp
cyB0YWtlcwotICogcGxhY2Ugb24gdGhlIEhhbmRsZXJUaHJlYWQgb2YgdGhlIGdpdmVuIHtAY29k
ZSBTdXJmYWNlVGV4dHVyZUhlbHBlcn0uIFdoZW4gZG9uZSB3aXRoIGVhY2ggZnJhbWUsCi0gKiB0
aGUgbmF0aXZlIGNvZGUgcmV0dXJucyB0aGUgYnVmZmVyIHRvIHRoZSAge0Bjb2RlIFN1cmZhY2VU
ZXh0dXJlSGVscGVyfSB0byBiZSB1c2VkIGZvciBuZXcKLSAqIGZyYW1lcy4gQXQgYW55IHRpbWUs
IGF0IG1vc3Qgb25lIGZyYW1lIGlzIGJlaW5nIHByb2Nlc3NlZC4KLSAqLwotQFRhcmdldEFwaSgy
MSkKLXB1YmxpYyBjbGFzcyBTY3JlZW5DYXB0dXJlckFuZHJvaWQKLSAgICBpbXBsZW1lbnRzIFZp
ZGVvQ2FwdHVyZXIsIFN1cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1lQXZhaWxhYmxl
TGlzdGVuZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRElTUExBWV9GTEFHUyA9Ci0g
ICAgICBEaXNwbGF5TWFuYWdlci5WSVJUVUFMX0RJU1BMQVlfRkxBR19QVUJMSUMgfCBEaXNwbGF5
TWFuYWdlci5WSVJUVUFMX0RJU1BMQVlfRkxBR19QUkVTRU5UQVRJT047Ci0gIC8vIERQSSBmb3Ig
VmlydHVhbERpc3BsYXksIGRvZXMgbm90IHNlZW0gdG8gbWF0dGVyIGZvciB1cy4KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IFZJUlRVQUxfRElTUExBWV9EUEkgPSA0MDA7Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBJbnRlbnQgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGE7Ci0gIHBy
aXZhdGUgZmluYWwgTWVkaWFQcm9qZWN0aW9uLkNhbGxiYWNrIG1lZGlhUHJvamVjdGlvbkNhbGxi
YWNrOwotCi0gIHByaXZhdGUgaW50IHdpZHRoOwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0gIHBy
aXZhdGUgVmlydHVhbERpc3BsYXkgdmlydHVhbERpc3BsYXk7Ci0gIHByaXZhdGUgU3VyZmFjZVRl
eHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gIHByaXZhdGUgQ2FwdHVyZXJPYnNl
cnZlciBjYXB0dXJlck9ic2VydmVyOwotICBwcml2YXRlIGxvbmcgbnVtQ2FwdHVyZWRGcmFtZXMg
PSAwOwotICBwcml2YXRlIE1lZGlhUHJvamVjdGlvbiBtZWRpYVByb2plY3Rpb247Ci0gIHByaXZh
dGUgYm9vbGVhbiBpc0Rpc3Bvc2VkID0gZmFsc2U7Ci0gIHByaXZhdGUgTWVkaWFQcm9qZWN0aW9u
TWFuYWdlciBtZWRpYVByb2plY3Rpb25NYW5hZ2VyOwotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3Rz
IGEgbmV3IFNjcmVlbiBDYXB0dXJlci4KLSAgICoKLSAgICogQHBhcmFtIG1lZGlhUHJvamVjdGlv
blBlcm1pc3Npb25SZXN1bHREYXRhIHRoZSByZXN1bHQgZGF0YSBvZiBNZWRpYVByb2plY3Rpb24g
cGVybWlzc2lvbgotICAgKiAgICAgYWN0aXZpdHk7IHRoZSBjYWxsaW5nIGFwcCBtdXN0IHZhbGlk
YXRlIHRoYXQgcmVzdWx0IGNvZGUgaXMgQWN0aXZpdHkuUkVTVUxUX09LIGJlZm9yZQotICAgKiAg
ICAgY2FsbGluZyB0aGlzIG1ldGhvZC4KLSAgICogQHBhcmFtIG1lZGlhUHJvamVjdGlvbkNhbGxi
YWNrIE1lZGlhUHJvamVjdGlvbiBjYWxsYmFjayB0byBpbXBsZW1lbnQgYXBwbGljYXRpb24gc3Bl
Y2lmaWMKLSAgICogICAgIGxvZ2ljIGluIGV2ZW50cyBzdWNoIGFzIHdoZW4gdGhlIHVzZXIgcmV2
b2tlcyBhIHByZXZpb3VzbHkgZ3JhbnRlZCBjYXB0dXJlIHBlcm1pc3Npb24uCi0gICoqLwotICBw
dWJsaWMgU2NyZWVuQ2FwdHVyZXJBbmRyb2lkKEludGVudCBtZWRpYVByb2plY3Rpb25QZXJtaXNz
aW9uUmVzdWx0RGF0YSwKLSAgICAgIE1lZGlhUHJvamVjdGlvbi5DYWxsYmFjayBtZWRpYVByb2pl
Y3Rpb25DYWxsYmFjaykgewotICAgIHRoaXMubWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3Vs
dERhdGEgPSBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YTsKLSAgICB0aGlzLm1l
ZGlhUHJvamVjdGlvbkNhbGxiYWNrID0gbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2s7Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgY2hlY2tOb3REaXNwb3NlZCgpIHsKLSAgICBpZiAoaXNEaXNwb3NlZCkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImNhcHR1cmVyIGlzIGRpc3Bvc2Vk
LiIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgc3luY2hyb25pemVkIHZv
aWQgaW5pdGlhbGl6ZShmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhl
bHBlciwKLSAgICAgIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LCBmaW5hbCBWaWRl
b0NhcHR1cmVyLkNhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcikgewotICAgIGNoZWNr
Tm90RGlzcG9zZWQoKTsKLQotICAgIGlmIChjYXB0dXJlck9ic2VydmVyID09IG51bGwpIHsKLSAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYXB0dXJlck9ic2VydmVyIG5vdCBzZXQu
Iik7Ci0gICAgfQotICAgIHRoaXMuY2FwdHVyZXJPYnNlcnZlciA9IGNhcHR1cmVyT2JzZXJ2ZXI7
Ci0KLSAgICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0gbnVsbCkgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oInN1cmZhY2VUZXh0dXJlSGVscGVyIG5vdCBzZXQuIik7Ci0g
ICAgfQotICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4dHVyZUhlbHBl
cjsKLQotICAgIG1lZGlhUHJvamVjdGlvbk1hbmFnZXIgPSAoTWVkaWFQcm9qZWN0aW9uTWFuYWdl
cikgYXBwbGljYXRpb25Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoCi0gICAgICAgIENvbnRleHQu
TUVESUFfUFJPSkVDVElPTl9TRVJWSUNFKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
c3luY2hyb25pemVkIHZvaWQgc3RhcnRDYXB0dXJlKAotICAgICAgZmluYWwgaW50IHdpZHRoLCBm
aW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgaWdub3JlZEZyYW1lcmF0ZSkgewotICAgIGNoZWNr
Tm90RGlzcG9zZWQoKTsKLQotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdo
dCA9IGhlaWdodDsKLQotICAgIG1lZGlhUHJvamVjdGlvbiA9IG1lZGlhUHJvamVjdGlvbk1hbmFn
ZXIuZ2V0TWVkaWFQcm9qZWN0aW9uKAotICAgICAgICBBY3Rpdml0eS5SRVNVTFRfT0ssIG1lZGlh
UHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhKTsKLQotICAgIC8vIExldCBNZWRpYVByb2pl
Y3Rpb24gY2FsbGJhY2sgdXNlIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciB0aHJlYWQuCi0gICAg
bWVkaWFQcm9qZWN0aW9uLnJlZ2lzdGVyQ2FsbGJhY2sobWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2ss
IHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKSk7Ci0KLSAgICBjcmVhdGVWaXJ0dWFs
RGlzcGxheSgpOwotICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQodHJ1ZSk7
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcoU2NyZWVuQ2FwdHVyZXJB
bmRyb2lkLnRoaXMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQg
dm9pZCBzdG9wQ2FwdHVyZSgpIHsKLSAgICBjaGVja05vdERpc3Bvc2VkKCk7Ci0gICAgVGhyZWFk
VXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShzdXJmYWNlVGV4dHVyZUhlbHBlci5n
ZXRIYW5kbGVyKCksIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVu
aW5nKCk7Ci0gICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0b3BwZWQoKTsKLQot
ICAgICAgICBpZiAodmlydHVhbERpc3BsYXkgIT0gbnVsbCkgewotICAgICAgICAgIHZpcnR1YWxE
aXNwbGF5LnJlbGVhc2UoKTsKLSAgICAgICAgICB2aXJ0dWFsRGlzcGxheSA9IG51bGw7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAobWVkaWFQcm9qZWN0aW9uICE9IG51bGwpIHsKLSAgICAgICAg
ICAvLyBVbnJlZ2lzdGVyIHRoZSBjYWxsYmFjayBiZWZvcmUgc3RvcHBpbmcsIG90aGVyd2lzZSB0
aGUgY2FsbGJhY2sgcmVjdXJzaXZlbHkKLSAgICAgICAgICAvLyBjYWxscyB0aGlzIG1ldGhvZC4K
LSAgICAgICAgICBtZWRpYVByb2plY3Rpb24udW5yZWdpc3RlckNhbGxiYWNrKG1lZGlhUHJvamVj
dGlvbkNhbGxiYWNrKTsKLSAgICAgICAgICBtZWRpYVByb2plY3Rpb24uc3RvcCgpOwotICAgICAg
ICAgIG1lZGlhUHJvamVjdGlvbiA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZGlzcG9zZSgp
IHsKLSAgICBpc0Rpc3Bvc2VkID0gdHJ1ZTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGFuZ2VzIG91
dHB1dCB2aWRlbyBmb3JtYXQuIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIHRvIHNjYWxlIHRoZSBv
dXRwdXQKLSAgICogdmlkZW8sIG9yIHRvIGNoYW5nZSBvcmllbnRhdGlvbiB3aGVuIHRoZSBjYXB0
dXJlZCBzY3JlZW4gaXMgcm90YXRlZCBmb3IgZXhhbXBsZS4KLSAgICoKLSAgICogQHBhcmFtIHdp
ZHRoIG5ldyBvdXRwdXQgdmlkZW8gd2lkdGgKLSAgICogQHBhcmFtIGhlaWdodCBuZXcgb3V0cHV0
IHZpZGVvIGhlaWdodAotICAgKiBAcGFyYW0gaWdub3JlZEZyYW1lcmF0ZSBpZ25vcmVkCi0gICAq
LwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNoYW5nZUNhcHR1cmVG
b3JtYXQoCi0gICAgICBmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGlu
dCBpZ25vcmVkRnJhbWVyYXRlKSB7Ci0gICAgY2hlY2tOb3REaXNwb3NlZCgpOwotCi0gICAgdGhp
cy53aWR0aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgaWYgKHZp
cnR1YWxEaXNwbGF5ID09IG51bGwpIHsKLSAgICAgIC8vIENhcHR1cmVyIGlzIHN0b3BwZWQsIHRo
ZSB2aXJ0dWFsIGRpc3BsYXkgd2lsbCBiZSBjcmVhdGVkIGluIHN0YXJ0Q2FwdHVlcigpLgotICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhIG5ldyB2aXJ0dWFsIGRpc3BsYXkg
b24gdGhlIHN1cmZhY2VUZXh0dXJlSGVscGVyIHRocmVhZCB0byBhdm9pZCBpbnRlcmZlcmVuY2UK
LSAgICAvLyB3aXRoIGZyYW1lIHByb2Nlc3NpbmcsIHdoaWNoIGhhcHBlbnMgb24gdGhlIHNhbWUg
dGhyZWFkICh3ZSBzZXJpYWxpemUgZXZlbnRzIGJ5IHJ1bm5pbmcKLSAgICAvLyB0aGVtIG9uIHRo
ZSBzYW1lIHRocmVhZCkuCi0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0
aWJseShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCksIG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB2aXJ0
dWFsRGlzcGxheS5yZWxlYXNlKCk7Ci0gICAgICAgIGNyZWF0ZVZpcnR1YWxEaXNwbGF5KCk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlVmlydHVhbERpc3Bs
YXkoKSB7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKS5zZXRE
ZWZhdWx0QnVmZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICB2aXJ0dWFsRGlzcGxheSA9IG1l
ZGlhUHJvamVjdGlvbi5jcmVhdGVWaXJ0dWFsRGlzcGxheSgiV2ViUlRDX1NjcmVlbkNhcHR1cmUi
LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICBWSVJUVUFMX0RJU1BMQVlfRFBJLCBESVNQTEFZX0ZM
QUdTLCBuZXcgU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgp
KSwKLSAgICAgICAgbnVsbCAvKiBjYWxsYmFjayAqLywgbnVsbCAvKiBjYWxsYmFjayBoYW5kbGVy
ICovKTsKLSAgfQotCi0gIC8vIFRoaXMgaXMgY2FsbGVkIG9uIHRoZSBpbnRlcm5hbCBsb29wZXIg
dGhyZWFkIG9mIHtAQ29kZSBTdXJmYWNlVGV4dHVyZUhlbHBlcn0uCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZShpbnQgb2VzVGV4dHVyZUlkLCBmbG9h
dFtdIHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgIG51bUNhcHR1cmVk
RnJhbWVzKys7Ci0gICAgY2FwdHVyZXJPYnNlcnZlci5vblRleHR1cmVGcmFtZUNhcHR1cmVkKAot
ICAgICAgICB3aWR0aCwgaGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgMCAv
KiByb3RhdGlvbiAqLywgdGltZXN0YW1wTnMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBib29sZWFuIGlzU2NyZWVuY2FzdCgpIHsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1
YmxpYyBsb25nIGdldE51bUNhcHR1cmVkRnJhbWVzKCkgewotICAgIHJldHVybiBudW1DYXB0dXJl
ZEZyYW1lczsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TZHBPYnNlcnZlci5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TZHBPYnNlcnZlci5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi0vKiogSW50ZXJmYWNlIGZvciBvYnNlcnZpbmcgU0RQLXJlbGF0ZWQgZXZlbnRz
LiAqLwotcHVibGljIGludGVyZmFjZSBTZHBPYnNlcnZlciB7Ci0gIC8qKiBDYWxsZWQgb24gc3Vj
Y2VzcyBvZiBDcmVhdGV7T2ZmZXIsQW5zd2VyfSgpLiAqLwotICBwdWJsaWMgdm9pZCBvbkNyZWF0
ZVN1Y2Nlc3MoU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgLyoqIENhbGxlZCBvbiBzdWNj
ZXNzIG9mIFNldHtMb2NhbCxSZW1vdGV9RGVzY3JpcHRpb24oKS4gKi8KLSAgcHVibGljIHZvaWQg
b25TZXRTdWNjZXNzKCk7Ci0KLSAgLyoqIENhbGxlZCBvbiBlcnJvciBvZiBDcmVhdGV7T2ZmZXIs
QW5zd2VyfSgpLiAqLwotICBwdWJsaWMgdm9pZCBvbkNyZWF0ZUZhaWx1cmUoU3RyaW5nIGVycm9y
KTsKLQotICAvKiogQ2FsbGVkIG9uIGVycm9yIG9mIFNldHtMb2NhbCxSZW1vdGV9RGVzY3JpcHRp
b24oKS4gKi8KLSAgcHVibGljIHZvaWQgb25TZXRGYWlsdXJlKFN0cmluZyBlcnJvcik7Ci19Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbi5qYXZhCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLS8qKgotICogRGVzY3JpcHRpb24gb2YgYW4gUkZDIDQ1NjYgU2Vzc2lvbi4K
LSAqIFNEUHMgYXJlIHBhc3NlZCBhcyBzZXJpYWxpemVkIFN0cmluZ3MgaW4gSmF2YS1sYW5kIGFu
ZCBhcmUgbWF0ZXJpYWxpemVkCi0gKiB0byBTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UgYXMg
YXBwcm9wcmlhdGUgaW4gdGhlIEpOSSBsYXllci4KLSAqLwotcHVibGljIGNsYXNzIFNlc3Npb25E
ZXNjcmlwdGlvbiB7Ci0gIC8qKiBKYXZhLWxhbmQgZW51bSB2ZXJzaW9uIG9mIFNlc3Npb25EZXNj
cmlwdGlvbkludGVyZmFjZSdzIHR5cGUoKSBzdHJpbmcuICovCi0gIHB1YmxpYyBzdGF0aWMgZW51
bSBUeXBlIHsKLSAgICBPRkZFUiwKLSAgICBQUkFOU1dFUiwKLSAgICBBTlNXRVI7Ci0KLSAgICBw
dWJsaWMgU3RyaW5nIGNhbm9uaWNhbEZvcm0oKSB7Ci0gICAgICByZXR1cm4gbmFtZSgpLnRvTG93
ZXJDYXNlKCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBUeXBlIGZyb21DYW5vbmljYWxG
b3JtKFN0cmluZyBjYW5vbmljYWwpIHsKLSAgICAgIHJldHVybiBUeXBlLnZhbHVlT2YoVHlwZS5j
bGFzcywgY2Fub25pY2FsLnRvVXBwZXJDYXNlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBm
aW5hbCBUeXBlIHR5cGU7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb247Ci0KLSAg
cHVibGljIFNlc3Npb25EZXNjcmlwdGlvbihUeXBlIHR5cGUsIFN0cmluZyBkZXNjcmlwdGlvbikg
ewotICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0
aW9uOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N0YXRzT2JzZXJ2ZXIuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N0YXRzT2JzZXJ2ZXIuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c09ic2VydmVyLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLS8qKiBJbnRlcmZhY2UgZm9yIG9ic2VydmluZyBTdGF0cyByZXBvcnRzIChz
ZWUgd2VicnRjOjpTdGF0c09ic2VydmVycykuICovCi1wdWJsaWMgaW50ZXJmYWNlIFN0YXRzT2Jz
ZXJ2ZXIgewotICAvKiogQ2FsbGVkIHdoZW4gdGhlIHJlcG9ydHMgYXJlIHJlYWR5LiovCi0gIHB1
YmxpYyB2b2lkIG9uQ29tcGxldGUoU3RhdHNSZXBvcnRbXSByZXBvcnRzKTsKLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvU3RhdHNSZXBvcnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL1N0YXRzUmVwb3J0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvU3RhdHNSZXBvcnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgdmVyc2lv
biBvZiB3ZWJydGM6OlN0YXRzUmVwb3J0LiAqLwotcHVibGljIGNsYXNzIFN0YXRzUmVwb3J0IHsK
LSAgLyoqIEphdmEgdmVyc2lvbiBvZiB3ZWJydGM6OlN0YXRzUmVwb3J0OjpWYWx1ZS4gKi8KLSAg
cHVibGljIHN0YXRpYyBjbGFzcyBWYWx1ZSB7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBuYW1l
OwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgdmFsdWU7Ci0KLSAgICBwdWJsaWMgVmFsdWUoU3Ry
aW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICAg
IHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5n
KCkgewotICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsK
LSAgICAgIGJ1aWxkZXIuYXBwZW5kKCJbIikuYXBwZW5kKG5hbWUpLmFwcGVuZCgiOiAiKS5hcHBl
bmQodmFsdWUpLmFwcGVuZCgiXSIpOwotICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsK
LSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmluYWwgU3RyaW5nIGlkOwotICBwdWJsaWMgZmluYWwg
U3RyaW5nIHR5cGU7Ci0gIC8vIFRpbWUgc2luY2UgMTk3MC0wMS0wMVQwMDowMDowMFogaW4gbWls
bGlzZWNvbmRzLgotICBwdWJsaWMgZmluYWwgZG91YmxlIHRpbWVzdGFtcDsKLSAgcHVibGljIGZp
bmFsIFZhbHVlW10gdmFsdWVzOwotCi0gIHB1YmxpYyBTdGF0c1JlcG9ydChTdHJpbmcgaWQsIFN0
cmluZyB0eXBlLCBkb3VibGUgdGltZXN0YW1wLCBWYWx1ZVtdIHZhbHVlcykgewotICAgIHRoaXMu
aWQgPSBpZDsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMudGltZXN0YW1wID0gdGlt
ZXN0YW1wOwotICAgIHRoaXMudmFsdWVzID0gdmFsdWVzOwotICB9Ci0KLSAgcHVibGljIFN0cmlu
ZyB0b1N0cmluZygpIHsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVp
bGRlcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJpZDogIikKLSAgICAgICAgLmFwcGVuZChpZCkK
LSAgICAgICAgLmFwcGVuZCgiLCB0eXBlOiAiKQotICAgICAgICAuYXBwZW5kKHR5cGUpCi0gICAg
ICAgIC5hcHBlbmQoIiwgdGltZXN0YW1wOiAiKQotICAgICAgICAuYXBwZW5kKHRpbWVzdGFtcCkK
LSAgICAgICAgLmFwcGVuZCgiLCB2YWx1ZXM6ICIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
dmFsdWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZXNbaV0udG9T
dHJpbmcoKSkuYXBwZW5kKCIsICIpOwotICAgIH0KLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmlu
ZygpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVy
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBl
ci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0
dXJlSGVscGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyODMgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGlj
cy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMTFFeHQ7Ci1pbXBv
cnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBv
cnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsK
LWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1
ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29u
Y3VycmVudC5DYWxsYWJsZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsK
LQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGFuZCBzeW5jaHJvbml6ZSBhY2Nlc3Mg
dG8gYSBTdXJmYWNlVGV4dHVyZS4gVGhlIGNhbGxlciB3aWxsIGdldCBub3RpZmllZAotICogb2Yg
bmV3IGZyYW1lcyBpbiBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLCBhbmQgc2hvdWxkIGNhbGwg
cmV0dXJuVGV4dHVyZUZyYW1lKCkgd2hlbiBkb25lIHdpdGgKLSAqIHRoZSBmcmFtZS4gT25seSBv
bmUgdGV4dHVyZSBmcmFtZSBjYW4gYmUgaW4gZmxpZ2h0IGF0IG9uY2UsIHNvIHJldHVyblRleHR1
cmVGcmFtZSgpIG11c3QgYmUKLSAqIGNhbGxlZCBpbiBvcmRlciB0byByZWNlaXZlIGEgbmV3IGZy
YW1lLiBDYWxsIHN0b3BMaXN0ZW5pbmcoKSB0byBzdG9wIHJlY2VpdmVpbmcgbmV3IGZyYW1lcy4g
Q2FsbAotICogZGlzcG9zZSB0byByZWxlYXNlIGFsbCByZXNvdXJjZXMgb25jZSB0aGUgdGV4dHVy
ZSBmcmFtZSBpcyByZXR1cm5lZC4KLSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBhIEMrKyBjb3VudGVy
IHBhcnQgb2YgdGhpcyBjbGFzcyB0aGF0IG9wdGlvbmFsbHkgY2FuIGJlIHVzZWQuIEl0IGlzIHVz
ZWQgZm9yCi0gKiB3cmFwcGluZyB0ZXh0dXJlIGZyYW1lcyBpbnRvIHdlYnJ0Yzo6VmlkZW9GcmFt
ZXMgYW5kIGFsc28gaGFuZGxlcyBjYWxsaW5nIHJldHVyblRleHR1cmVGcmFtZSgpCi0gKiB3aGVu
IHRoZSB3ZWJydGM6OlZpZGVvRnJhbWUgaXMgbm8gbG9uZ2VyIHVzZWQuCi0gKi8KLWNsYXNzIFN1
cmZhY2VUZXh0dXJlSGVscGVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9
ICJTdXJmYWNlVGV4dHVyZUhlbHBlciI7Ci0gIC8qKgotICAgKiBDYWxsYmFjayBpbnRlcmZhY2Ug
Zm9yIGJlaW5nIG5vdGlmaWVkIHRoYXQgYSBuZXcgdGV4dHVyZSBmcmFtZSBpcyBhdmFpbGFibGUu
IFRoZSBjYWxscyB3aWxsIGJlCi0gICAqIG1hZGUgb24gYSBkZWRpY2F0ZWQgdGhyZWFkIHdpdGgg
YSBib3VuZCBFR0xDb250ZXh0LiBUaGUgdGhyZWFkIHdpbGwgYmUgdGhlIHNhbWUgdGhyb3VnaG91
dCB0aGUKLSAgICogbGlmZXRpbWUgb2YgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGluc3RhbmNl
LCBidXQgZGlmZmVyZW50IGZyb20gdGhlIHRocmVhZCBjYWxsaW5nIHRoZQotICAgKiBTdXJmYWNl
VGV4dHVyZUhlbHBlciBjb25zdHJ1Y3Rvci4gVGhlIGNhbGxlZSBpcyBub3QgYWxsb3dlZCB0byBt
YWtlIGFub3RoZXIgRUdMQ29udGV4dCBjdXJyZW50Ci0gICAqIG9uIHRoZSBjYWxsaW5nIHRocmVh
ZC4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0
ZW5lciB7Ci0gICAgYWJzdHJhY3Qgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAgICAg
ICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0
YW1wTnMpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdCBhIG5ldyBTdXJmYWNlVGV4dHVy
ZUhlbHBlciBzaGFyaW5nIE9wZW5HTCByZXNvdXJjZXMgd2l0aCB8c2hhcmVkQ29udGV4dHwuIEEg
ZGVkaWNhdGVkCi0gICAqIHRocmVhZCBhbmQgaGFuZGxlciBpcyBjcmVhdGVkIGZvciBoYW5kbGlu
ZyB0aGUgU3VyZmFjZVRleHR1cmUuIE1heSByZXR1cm4gbnVsbCBpZiBFR0wgZmFpbHMgdG8KLSAg
ICogaW5pdGlhbGl6ZSBhIHBpeGVsIGJ1ZmZlciBzdXJmYWNlIGFuZCBtYWtlIGl0IGN1cnJlbnQu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIFN1cmZhY2VUZXh0dXJlSGVscGVyIGNyZWF0ZSgKLSAg
ICAgIGZpbmFsIFN0cmluZyB0aHJlYWROYW1lLCBmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVk
Q29udGV4dCkgewotICAgIGZpbmFsIEhhbmRsZXJUaHJlYWQgdGhyZWFkID0gbmV3IEhhbmRsZXJU
aHJlYWQodGhyZWFkTmFtZSk7Ci0gICAgdGhyZWFkLnN0YXJ0KCk7Ci0gICAgZmluYWwgSGFuZGxl
ciBoYW5kbGVyID0gbmV3IEhhbmRsZXIodGhyZWFkLmdldExvb3BlcigpKTsKLQotICAgIC8vIFRo
ZSBvbkZyYW1lQXZhaWxhYmxlKCkgY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCBvbiB0aGUgU3Vy
ZmFjZVRleHR1cmUgY3RvciB0aHJlYWQuIFNlZToKLSAgICAvLyBodHRwOi8vZ3JlcGNvZGUuY29t
L2ZpbGUvcmVwb3NpdG9yeS5ncmVwY29kZS5jb20vamF2YS9leHQvY29tLmdvb2dsZS5hbmRyb2lk
L2FuZHJvaWQvNS4xLjFfcjEvYW5kcm9pZC9ncmFwaGljcy9TdXJmYWNlVGV4dHVyZS5qYXZhIzE5
NS4KLSAgICAvLyBUaGVyZWZvcmUsIGluIG9yZGVyIHRvIGNvbnRyb2wgdGhlIGNhbGxiYWNrIHRo
cmVhZCBvbiBBUEkgbHZsIDwgMjEsIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlcgotICAgIC8vIGlz
IGNvbnN0cnVjdGVkIG9uIHRoZSB8aGFuZGxlcnwgdGhyZWFkLgotICAgIHJldHVybiBUaHJlYWRV
dGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KGhhbmRsZXIsIG5ldyBDYWxsYWJsZTxT
dXJmYWNlVGV4dHVyZUhlbHBlcj4oKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBT
dXJmYWNlVGV4dHVyZUhlbHBlciBjYWxsKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIHJl
dHVybiBuZXcgU3VyZmFjZVRleHR1cmVIZWxwZXIoc2hhcmVkQ29udGV4dCwgaGFuZGxlcik7Ci0g
ICAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dpbmcu
ZShUQUcsIHRocmVhZE5hbWUgKyAiIGNyZWF0ZSBmYWlsdXJlIiwgZSk7Ci0gICAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUg
ZmluYWwgSGFuZGxlciBoYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEVnbEJhc2UgZWdsQmFzZTsK
LSAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZTsKLSAgcHJpdmF0
ZSBmaW5hbCBpbnQgb2VzVGV4dHVyZUlkOwotICBwcml2YXRlIFl1dkNvbnZlcnRlciB5dXZDb252
ZXJ0ZXI7Ci0KLSAgLy8gVGhlc2UgdmFyaWFibGVzIGFyZSBvbmx5IGFjY2Vzc2VkIGZyb20gdGhl
IHxoYW5kbGVyfCB0aHJlYWQuCi0gIHByaXZhdGUgT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0
ZW5lciBsaXN0ZW5lcjsKLSAgLy8gVGhlIHBvc3NpYmxlIHN0YXRlcyBvZiB0aGlzIGNsYXNzLgot
ICBwcml2YXRlIGJvb2xlYW4gaGFzUGVuZGluZ1RleHR1cmUgPSBmYWxzZTsKLSAgcHJpdmF0ZSB2
b2xhdGlsZSBib29sZWFuIGlzVGV4dHVyZUluVXNlID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVh
biBpc1F1aXR0aW5nID0gZmFsc2U7Ci0gIC8vIHxwZW5kaW5nTGlzdGVuZXJ8IGlzIHNldCBpbiBz
ZXRMaXN0ZW5lcigpIGFuZCB0aGUgcnVubmFibGUgaXMgcG9zdGVkIHRvIHRoZSBoYW5kbGVyIHRo
cmVhZC4KLSAgLy8gc2V0TGlzdGVuZXIoKSBpcyBub3QgYWxsb3dlZCB0byBiZSBjYWxsZWQgYWdh
aW4gYmVmb3JlIHN0b3BMaXN0ZW5pbmcoKSwgc28gdGhpcyBpcyB0aHJlYWQgc2FmZS4KLSAgcHJp
dmF0ZSBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHBlbmRpbmdMaXN0ZW5lcjsKLSAg
ZmluYWwgUnVubmFibGUgc2V0TGlzdGVuZXJSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFH
LCAiU2V0dGluZyBsaXN0ZW5lciB0byAiICsgcGVuZGluZ0xpc3RlbmVyKTsKLSAgICAgIGxpc3Rl
bmVyID0gcGVuZGluZ0xpc3RlbmVyOwotICAgICAgcGVuZGluZ0xpc3RlbmVyID0gbnVsbDsKLSAg
ICAgIC8vIE1heSBoYXZlIGEgcGVuZGluZyBmcmFtZSBmcm9tIHRoZSBwcmV2aW91cyBjYXB0dXJl
IHNlc3Npb24gLSBkcm9wIGl0LgotICAgICAgaWYgKGhhc1BlbmRpbmdUZXh0dXJlKSB7Ci0gICAg
ICAgIC8vIENhbGxpbmcgdXBkYXRlVGV4SW1hZ2UoKSBpcyBuZWNjZXNzYXJ5IGluIG9yZGVyIHRv
IHJlY2VpdmUgbmV3IGZyYW1lcy4KLSAgICAgICAgdXBkYXRlVGV4SW1hZ2UoKTsKLSAgICAgICAg
aGFzUGVuZGluZ1RleHR1cmUgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJp
dmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlcihFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwg
SGFuZGxlciBoYW5kbGVyKSB7Ci0gICAgaWYgKGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFk
KCkgIT0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiU3VyZmFjZVRleHR1cmVIZWxwZXIgbXVzdCBiZSBjcmVhdGVkIG9uIHRo
ZSBoYW5kbGVyIHRocmVhZCIpOwotICAgIH0KLSAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwot
Ci0gICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKHNoYXJlZENvbnRleHQsIEVnbEJhc2UuQ09O
RklHX1BJWEVMX0JVRkZFUik7Ci0gICAgdHJ5IHsKLSAgICAgIC8vIEJvdGggdGhlc2Ugc3RhdGVt
ZW50cyBoYXZlIGJlZW4gb2JzZXJ2ZWQgdG8gZmFpbCBvbiByYXJlIG9jY2FzaW9ucywgc2VlIEJV
Rz13ZWJydGM6NTY4Mi4KLSAgICAgIGVnbEJhc2UuY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgp
OwotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNl
cHRpb24gZSkgewotICAgICAgLy8gQ2xlYW4gdXAgYmVmb3JlIHJldGhyb3dpbmcgdGhlIGV4Y2Vw
dGlvbi4KLSAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAgaGFuZGxlci5nZXRMb29wZXIo
KS5xdWl0KCk7Ci0gICAgICB0aHJvdyBlOwotICAgIH0KLQotICAgIG9lc1RleHR1cmVJZCA9IEds
VXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTKTsK
LSAgICBzdXJmYWNlVGV4dHVyZSA9IG5ldyBTdXJmYWNlVGV4dHVyZShvZXNUZXh0dXJlSWQpOwot
ICAgIHN1cmZhY2VUZXh0dXJlLnNldE9uRnJhbWVBdmFpbGFibGVMaXN0ZW5lcihuZXcgU3VyZmFj
ZVRleHR1cmUuT25GcmFtZUF2YWlsYWJsZUxpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBvbkZyYW1lQXZhaWxhYmxlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VU
ZXh0dXJlKSB7Ci0gICAgICAgIGhhc1BlbmRpbmdUZXh0dXJlID0gdHJ1ZTsKLSAgICAgICAgdHJ5
RGVsaXZlclRleHR1cmVGcmFtZSgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0g
ICAqIFN0YXJ0IHRvIHN0cmVhbSB0ZXh0dXJlcyB0byB0aGUgZ2l2ZW4gfGxpc3RlbmVyfC4gSWYg
eW91IG5lZWQgdG8gY2hhbmdlIGxpc3RlbmVyLCB5b3UgbmVlZCB0bwotICAgKiBjYWxsIHN0b3BM
aXN0ZW5pbmcoKSBmaXJzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0YXJ0TGlzdGVuaW5nKGZp
bmFsIE9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLSAgICBpZiAo
dGhpcy5saXN0ZW5lciAhPSBudWxsIHx8IHRoaXMucGVuZGluZ0xpc3RlbmVyICE9IG51bGwpIHsK
LSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlN1cmZhY2VUZXh0dXJlSGVs
cGVyIGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gc2V0LiIpOwotICAgIH0KLSAgICB0aGlzLnBl
bmRpbmdMaXN0ZW5lciA9IGxpc3RlbmVyOwotICAgIGhhbmRsZXIucG9zdChzZXRMaXN0ZW5lclJ1
bm5hYmxlKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdG9wIGxpc3RlbmluZy4gVGhlIGxpc3RlbmVy
IHNldCBpbiBzdGFydExpc3RlbmluZygpIGlzIGd1YXJhbnRlZGVkIHRvIG5vdCByZWNlaXZlIGFu
eSBtb3JlCi0gICAqIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgY2FsbGJhY2tzIGFmdGVyIHRo
aXMgZnVuY3Rpb24gcmV0dXJucy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHN0b3BMaXN0ZW5pbmco
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BMaXN0ZW5pbmcoKSIpOwotICAgIGhhbmRsZXIu
cmVtb3ZlQ2FsbGJhY2tzKHNldExpc3RlbmVyUnVubmFibGUpOwotICAgIFRocmVhZFV0aWxzLmlu
dm9rZUF0RnJvbnRVbmludGVycnVwdGlibHkoaGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGxpc3RlbmVy
ID0gbnVsbDsKLSAgICAgICAgcGVuZGluZ0xpc3RlbmVyID0gbnVsbDsKLSAgICAgIH0KLSAgICB9
KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZSB0aGUgdW5kZXJseWluZyBTdXJmYWNlVGV4
dHVyZS4gVGhlIFN1cmZhY2VUZXh0dXJlIHNob3VsZCBiZSBwYXNzZWQgaW4gdG8gYSB2aWRlbwot
ICAgKiBwcm9kdWNlciBzdWNoIGFzIGEgY2FtZXJhIG9yIGRlY29kZXIuCi0gICAqLwotICBwdWJs
aWMgU3VyZmFjZVRleHR1cmUgZ2V0U3VyZmFjZVRleHR1cmUoKSB7Ci0gICAgcmV0dXJuIHN1cmZh
Y2VUZXh0dXJlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHJpZXZlIHRoZSBoYW5kbGVyIHRoYXQg
Y2FsbHMgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4gVGhpcyBoYW5kbGVyIGlzIHZhbGlkIHVu
dGlsCi0gICAqIGRpc3Bvc2UoKSBpcyBjYWxsZWQuCi0gICAqLwotICBwdWJsaWMgSGFuZGxlciBn
ZXRIYW5kbGVyKCkgewotICAgIHJldHVybiBoYW5kbGVyOwotICB9Ci0KLSAgLyoqCi0gICAqIENh
bGwgdGhpcyBmdW5jdGlvbiB0byBzaWduYWwgdGhhdCB5b3UgYXJlIGRvbmUgd2l0aCB0aGUgZnJh
bWUgcmVjZWl2ZWQgaW4KLSAgICogb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4gT25seSBvbmUg
dGV4dHVyZSBmcmFtZSBjYW4gYmUgaW4gZmxpZ2h0IGF0IG9uY2UsIHNvIHlvdSBtdXN0IGNhbGwK
LSAgICogdGhpcyBmdW5jdGlvbiBpbiBvcmRlciB0byByZWNlaXZlIGEgbmV3IGZyYW1lLgotICAg
Ki8KLSAgcHVibGljIHZvaWQgcmV0dXJuVGV4dHVyZUZyYW1lKCkgewotICAgIGhhbmRsZXIucG9z
dChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgaXNUZXh0dXJlSW5Vc2UgPSBmYWxzZTsKLSAgICAgICAgaWYgKGlzUXVp
dHRpbmcpIHsKLSAgICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgdHJ5RGVsaXZlclRleHR1cmVGcmFtZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7
Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1RleHR1cmVJblVzZSgpIHsKLSAgICByZXR1cm4g
aXNUZXh0dXJlSW5Vc2U7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbCBkaXNjb25uZWN0KCkgdG8g
c3RvcCByZWNlaXZpbmcgZnJhbWVzLiBPcGVuR0wgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBhbmQg
dGhlIGhhbmRsZXIgaXMKLSAgICogc3RvcHBlZCB3aGVuIHRoZSB0ZXh0dXJlIGZyYW1lIGhhcyBi
ZWVuIHJldHVybmVkIGJ5IGEgY2FsbCB0byByZXR1cm5UZXh0dXJlRnJhbWUoKS4gWW91IGFyZQot
ICAgKiBndWFyYW50ZWVkIHRvIG5vdCByZWNlaXZlIGFueSBtb3JlIG9uVGV4dHVyZUZyYW1lQXZh
aWxhYmxlKCkgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotICAgKi8KLSAgcHVibGljIHZv
aWQgZGlzcG9zZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSgpIik7Ci0gICAgVGhy
ZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShoYW5kbGVyLCBuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaXNRdWl0dGluZyA9IHRydWU7Ci0gICAgICAgIGlmICghaXNUZXh0dXJlSW5Vc2UpIHsKLSAg
ICAgICAgICByZWxlYXNlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHRleHR1cmVUb1lVVihmaW5hbCBCeXRlQnVmZmVyIGJ1ZiwgZmluYWwgaW50
IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LAotICAgICAgZmluYWwgaW50IHN0cmlkZSwgZmluYWwg
aW50IHRleHR1cmVJZCwgZmluYWwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgpIHsKLSAgICBpZiAo
dGV4dHVyZUlkICE9IG9lc1RleHR1cmVJZCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigidGV4dHVyZVRvQnl0ZUJ1ZmZlciBjYWxsZWQgd2l0aCB1bmV4cGVjdGVkIHRl
eHR1cmVJZCIpOwotICAgIH0KLQotICAgIFRocmVhZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVy
cnVwdGlibHkoaGFuZGxlciwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICh5dXZDb252ZXJ0ZXIgPT0gbnVsbCkg
ewotICAgICAgICAgIHl1dkNvbnZlcnRlciA9IG5ldyBZdXZDb252ZXJ0ZXIoKTsKLSAgICAgICAg
fQotICAgICAgICB5dXZDb252ZXJ0ZXIuY29udmVydChidWYsIHdpZHRoLCBoZWlnaHQsIHN0cmlk
ZSwgdGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVRleEltYWdlKCkgewotICAgIC8vIFN1cmZhY2VUZXh0dXJl
LnVwZGF0ZVRleEltYWdlIGFwcGFyZW50bHkgY2FuIGNvbXBldGUgYW5kIGRlYWRsb2NrIHdpdGgg
ZWdsU3dhcEJ1ZmZlcnMsCi0gICAgLy8gYXMgb2JzZXJ2ZWQgb24gTmV4dXMgNS4gVGhlcmVmb3Jl
LCBzeW5jaHJvbml6ZSBpdCB3aXRoIHRoZSBFR0wgZnVuY3Rpb25zLgotICAgIC8vIFNlZSBodHRw
czovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTcwMiBmb3Ig
bW9yZSBpbmZvLgotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBzdXJm
YWNlVGV4dHVyZS51cGRhdGVUZXhJbWFnZSgpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCB0cnlEZWxpdmVyVGV4dHVyZUZyYW1lKCkgewotICAgIGlmIChoYW5kbGVyLmdldExvb3Blcigp
LmdldFRocmVhZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5l
dyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZC4iKTsKLSAgICB9Ci0gICAgaWYg
KGlzUXVpdHRpbmcgfHwgIWhhc1BlbmRpbmdUZXh0dXJlIHx8IGlzVGV4dHVyZUluVXNlIHx8IGxp
c3RlbmVyID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaXNUZXh0dXJlSW5V
c2UgPSB0cnVlOwotICAgIGhhc1BlbmRpbmdUZXh0dXJlID0gZmFsc2U7Ci0KLSAgICB1cGRhdGVU
ZXhJbWFnZSgpOwotCi0gICAgZmluYWwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXggPSBuZXcgZmxv
YXRbMTZdOwotICAgIHN1cmZhY2VUZXh0dXJlLmdldFRyYW5zZm9ybU1hdHJpeCh0cmFuc2Zvcm1N
YXRyaXgpOwotICAgIGZpbmFsIGxvbmcgdGltZXN0YW1wTnMgPSAoQnVpbGQuVkVSU0lPTi5TREtf
SU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSUNFX0NSRUFNX1NBTkRXSUNIKQotICAgICAgICA/
IHN1cmZhY2VUZXh0dXJlLmdldFRpbWVzdGFtcCgpCi0gICAgICAgIDogVGltZVVuaXQuTUlMTElT
RUNPTkRTLnRvTmFub3MoU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwotICAgIGxpc3Rl
bmVyLm9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4
LCB0aW1lc3RhbXBOcyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBp
ZiAoaGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSAhPSBUaHJlYWQuY3VycmVudFRocmVh
ZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJl
YWQuIik7Ci0gICAgfQotICAgIGlmIChpc1RleHR1cmVJblVzZSB8fCAhaXNRdWl0dGluZykgewot
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiVW5leHBlY3RlZCByZWxlYXNl
LiIpOwotICAgIH0KLSAgICBpZiAoeXV2Q29udmVydGVyICE9IG51bGwpIHsKLSAgICAgIHl1dkNv
bnZlcnRlci5yZWxlYXNlKCk7Ci0gICAgfQotICAgIEdMRVMyMC5nbERlbGV0ZVRleHR1cmVzKDEs
IG5ldyBpbnRbXSB7b2VzVGV4dHVyZUlkfSwgMCk7Ci0gICAgc3VyZmFjZVRleHR1cmUucmVsZWFz
ZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgIGhhbmRsZXIuZ2V0TG9vcGVyKCkucXVp
dCgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXIu
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXIu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVmlld1Jl
bmRlcmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNv
bnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnJlcy5SZXNvdXJjZXMuTm90Rm91bmRFeGNl
cHRpb247Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLnV0
aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlSG9sZGVyOwotaW1w
b3J0IGFuZHJvaWQudmlldy5TdXJmYWNlVmlldzsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVu
dC5Db3VudERvd25MYXRjaDsKLQotLyoqCi0gKiBJbXBsZW1lbnRzIG9yZy53ZWJydGMuVmlkZW9S
ZW5kZXJlci5DYWxsYmFja3MgYnkgZGlzcGxheWluZyB0aGUgdmlkZW8gc3RyZWFtIG9uIGEgU3Vy
ZmFjZVZpZXcuCi0gKiByZW5kZXJGcmFtZSgpIGlzIGFzeW5jaHJvbm91cyB0byBhdm9pZCBibG9j
a2luZyB0aGUgY2FsbGluZyB0aHJlYWQuCi0gKiBUaGlzIGNsYXNzIGlzIHRocmVhZCBzYWZlIGFu
ZCBoYW5kbGVzIGFjY2VzcyBmcm9tIHBvdGVudGlhbGx5IGZvdXIgZGlmZmVyZW50IHRocmVhZHM6
Ci0gKiBJbnRlcmFjdGlvbiBmcm9tIHRoZSBtYWluIGFwcCBpbiBpbml0LCByZWxlYXNlLCBzZXRN
aXJyb3IsIGFuZCBzZXRTY2FsaW5ndHlwZS4KLSAqIEludGVyYWN0aW9uIGZyb20gQysrIHJ0Yzo6
VmlkZW9TaW5rSW50ZXJmYWNlIGluIHJlbmRlckZyYW1lLgotICogSW50ZXJhY3Rpb24gZnJvbSB0
aGUgQWN0aXZpdHkgbGlmZWN5Y2xlIGluIHN1cmZhY2VDcmVhdGVkLCBzdXJmYWNlQ2hhbmdlZCwg
YW5kIHN1cmZhY2VEZXN0cm95ZWQuCi0gKiBJbnRlcmFjdGlvbiB3aXRoIHRoZSBsYXlvdXQgZnJh
bWV3b3JrIGluIG9uTWVhc3VyZSBhbmQgb25TaXplQ2hhbmdlZC4KLSAqLwotcHVibGljIGNsYXNz
IFN1cmZhY2VWaWV3UmVuZGVyZXIKLSAgICBleHRlbmRzIFN1cmZhY2VWaWV3IGltcGxlbWVudHMg
U3VyZmFjZUhvbGRlci5DYWxsYmFjaywgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1cmZhY2VWaWV3UmVuZGVyZXIiOwotCi0g
IC8vIENhY2hlZCByZXNvdXJjZSBuYW1lLgotICBwcml2YXRlIGZpbmFsIFN0cmluZyByZXNvdXJj
ZU5hbWU7Ci0gIHByaXZhdGUgZmluYWwgUmVuZGVyZXJDb21tb24uVmlkZW9MYXlvdXRNZWFzdXJl
IHZpZGVvTGF5b3V0TWVhc3VyZSA9Ci0gICAgICBuZXcgUmVuZGVyZXJDb21tb24uVmlkZW9MYXlv
dXRNZWFzdXJlKCk7Ci0gIHByaXZhdGUgZmluYWwgRWdsUmVuZGVyZXIgZWdsUmVuZGVyZXI7Ci0K
LSAgLy8gQ2FsbGJhY2sgZm9yIHJlcG9ydGluZyByZW5kZXJlciBldmVudHMuIFJlYWQtb25seSBh
ZnRlciBpbml0aWxpemF0aW9uIHNvIG5vIGxvY2sgcmVxdWlyZWQuCi0gIHByaXZhdGUgUmVuZGVy
ZXJDb21tb24uUmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHM7Ci0KLSAgcHJpdmF0ZSBmaW5h
bCBPYmplY3QgbGF5b3V0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBib29sZWFuIGlz
Rmlyc3RGcmFtZVJlbmRlcmVkOwotICBwcml2YXRlIGludCByb3RhdGVkRnJhbWVXaWR0aDsKLSAg
cHJpdmF0ZSBpbnQgcm90YXRlZEZyYW1lSGVpZ2h0OwotICBwcml2YXRlIGludCBmcmFtZVJvdGF0
aW9uOwotCi0gIC8qKgotICAgKiBTdGFuZGFyZCBWaWV3IGNvbnN0cnVjdG9yLiBJbiBvcmRlciB0
byByZW5kZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBmaXJzdCBjYWxsIGluaXQoKS4KLSAgICovCi0g
IHB1YmxpYyBTdXJmYWNlVmlld1JlbmRlcmVyKENvbnRleHQgY29udGV4dCkgewotICAgIHN1cGVy
KGNvbnRleHQpOwotICAgIHRoaXMucmVzb3VyY2VOYW1lID0gZ2V0UmVzb3VyY2VOYW1lKCk7Ci0g
ICAgZWdsUmVuZGVyZXIgPSBuZXcgRWdsUmVuZGVyZXIocmVzb3VyY2VOYW1lKTsKLSAgICBnZXRI
b2xkZXIoKS5hZGRDYWxsYmFjayh0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdGFuZGFyZCBW
aWV3IGNvbnN0cnVjdG9yLiBJbiBvcmRlciB0byByZW5kZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBm
aXJzdCBjYWxsIGluaXQoKS4KLSAgICovCi0gIHB1YmxpYyBTdXJmYWNlVmlld1JlbmRlcmVyKENv
bnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgc3VwZXIoY29udGV4dCwg
YXR0cnMpOwotICAgIHRoaXMucmVzb3VyY2VOYW1lID0gZ2V0UmVzb3VyY2VOYW1lKCk7Ci0gICAg
ZWdsUmVuZGVyZXIgPSBuZXcgRWdsUmVuZGVyZXIocmVzb3VyY2VOYW1lKTsKLSAgICBnZXRIb2xk
ZXIoKS5hZGRDYWxsYmFjayh0aGlzKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplIHRo
aXMgY2xhc3MsIHNoYXJpbmcgcmVzb3VyY2VzIHdpdGggfHNoYXJlZENvbnRleHR8LiBJdCBpcyBh
bGxvd2VkIHRvIGNhbGwgaW5pdCgpIHRvCi0gICAqIHJlaW5pdGlhbGl6ZSB0aGUgcmVuZGVyZXIg
YWZ0ZXIgYSBwcmV2aW91cyBpbml0KCkvcmVsZWFzZSgpIGN5Y2xlLgotICAgKi8KLSAgcHVibGlj
IHZvaWQgaW5pdChFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwgUmVuZGVyZXJDb21tb24u
UmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHMpIHsKLSAgICBpbml0KHNoYXJlZENvbnRleHQs
IHJlbmRlcmVyRXZlbnRzLCBFZ2xCYXNlLkNPTkZJR19QTEFJTiwgbmV3IEdsUmVjdERyYXdlcigp
KTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplIHRoaXMgY2xhc3MsIHNoYXJpbmcgcmVz
b3VyY2VzIHdpdGggfHNoYXJlZENvbnRleHR8LiBUaGUgY3VzdG9tIHxkcmF3ZXJ8IHdpbGwgYmUg
dXNlZAotICAgKiBmb3IgZHJhd2luZyBmcmFtZXMgb24gdGhlIEVHTFN1cmZhY2UuIFRoaXMgY2xh
c3MgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgcmVsZWFzZSgpIG9uCi0gICAqIHxkcmF3ZXJ8
LiBJdCBpcyBhbGxvd2VkIHRvIGNhbGwgaW5pdCgpIHRvIHJlaW5pdGlhbGl6ZSB0aGUgcmVuZGVy
ZXIgYWZ0ZXIgYSBwcmV2aW91cwotICAgKiBpbml0KCkvcmVsZWFzZSgpIGN5Y2xlLgotICAgKi8K
LSAgcHVibGljIHZvaWQgaW5pdChmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwK
LSAgICAgIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzLCBmaW5h
bCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzLAotICAgICAgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIg
ZHJhd2VyKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIHRo
aXMucmVuZGVyZXJFdmVudHMgPSByZW5kZXJlckV2ZW50czsKLSAgICBzeW5jaHJvbml6ZWQgKGxh
eW91dExvY2spIHsKLSAgICAgIHJvdGF0ZWRGcmFtZVdpZHRoID0gMDsKLSAgICAgIHJvdGF0ZWRG
cmFtZUhlaWdodCA9IDA7Ci0gICAgICBmcmFtZVJvdGF0aW9uID0gMDsKLSAgICB9Ci0gICAgZWds
UmVuZGVyZXIuaW5pdChzaGFyZWRDb250ZXh0LCBjb25maWdBdHRyaWJ1dGVzLCBkcmF3ZXIpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIEJsb2NrIHVudGlsIGFueSBwZW5kaW5nIGZyYW1lIGlzIHJldHVy
bmVkIGFuZCBhbGwgR0wgcmVzb3VyY2VzIHJlbGVhc2VkLCBldmVuIGlmIGFuIGludGVycnVwdAot
ICAgKiBvY2N1cnMuIElmIGFuIGludGVycnVwdCBvY2N1cnMgZHVyaW5nIHJlbGVhc2UoKSwgdGhl
IGludGVycnVwdCBmbGFnIHdpbGwgYmUgc2V0LiBUaGlzIGZ1bmN0aW9uCi0gICAqIHNob3VsZCBi
ZSBjYWxsZWQgYmVmb3JlIHRoZSBBY3Rpdml0eSBpcyBkZXN0cm95ZWQgYW5kIHRoZSBFR0xDb250
ZXh0IGlzIHN0aWxsIHZhbGlkLiBJZiB5b3UKLSAgICogZG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9u
LCB0aGUgR0wgcmVzb3VyY2VzIG1pZ2h0IGxlYWsuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZWxl
YXNlKCkgewotICAgIGVnbFJlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBT
ZXQgaWYgdGhlIHZpZGVvIHN0cmVhbSBzaG91bGQgYmUgbWlycm9yZWQgb3Igbm90LgotICAgKi8K
LSAgcHVibGljIHZvaWQgc2V0TWlycm9yKGZpbmFsIGJvb2xlYW4gbWlycm9yKSB7Ci0gICAgZWds
UmVuZGVyZXIuc2V0TWlycm9yKG1pcnJvcik7Ci0gIH0KLQotICAvKioKLSAgICogU2V0IGhvdyB0
aGUgdmlkZW8gd2lsbCBmaWxsIHRoZSBhbGxvd2VkIGxheW91dCBhcmVhLgotICAgKi8KLSAgcHVi
bGljIHZvaWQgc2V0U2NhbGluZ1R5cGUoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGlu
Z1R5cGUpIHsKLSAgICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgdmlk
ZW9MYXlvdXRNZWFzdXJlLnNldFNjYWxpbmdUeXBlKHNjYWxpbmdUeXBlKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHNldFNjYWxpbmdUeXBlKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxp
bmdUeXBlTWF0Y2hPcmllbnRhdGlvbiwKLSAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBl
IHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbikgewotICAgIFRocmVhZFV0aWxzLmNoZWNr
SXNPbk1haW5UaHJlYWQoKTsKLSAgICB2aWRlb0xheW91dE1lYXN1cmUuc2V0U2NhbGluZ1R5cGUo
c2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uLCBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRp
b24pOwotICB9Ci0KLSAgLy8gVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgaW50ZXJmYWNlLgotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoVmlkZW9SZW5kZXJlci5JNDIwRnJh
bWUgZnJhbWUpIHsKLSAgICB1cGRhdGVGcmFtZURpbWVuc2lvbnNBbmRSZXBvcnRFdmVudHMoZnJh
bWUpOwotICAgIGVnbFJlbmRlcmVyLnJlbmRlckZyYW1lKGZyYW1lKTsKLSAgfQotCi0gIC8vIFZp
ZXcgbGF5b3V0IGludGVyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uTWVh
c3VyZShpbnQgd2lkdGhTcGVjLCBpbnQgaGVpZ2h0U3BlYykgewotICAgIFRocmVhZFV0aWxzLmNo
ZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICBmaW5hbCBQb2ludCBzaXplOwotICAgIHN5bmNocm9u
aXplZCAobGF5b3V0TG9jaykgewotICAgICAgc2l6ZSA9Ci0gICAgICAgICAgdmlkZW9MYXlvdXRN
ZWFzdXJlLm1lYXN1cmUod2lkdGhTcGVjLCBoZWlnaHRTcGVjLCByb3RhdGVkRnJhbWVXaWR0aCwg
cm90YXRlZEZyYW1lSGVpZ2h0KTsKLSAgICB9Ci0gICAgc2V0TWVhc3VyZWREaW1lbnNpb24oc2l6
ZS54LCBzaXplLnkpOwotICAgIGxvZ0QoIm9uTWVhc3VyZSgpLiBOZXcgc2l6ZTogIiArIHNpemUu
eCArICJ4IiArIHNpemUueSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQg
b25MYXlvdXQoYm9vbGVhbiBjaGFuZ2VkLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBp
bnQgYm90dG9tKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAg
IGVnbFJlbmRlcmVyLnNldExheW91dEFzcGVjdFJhdGlvKChyaWdodCAtIGxlZnQpIC8gKGZsb2F0
KSAoYm90dG9tIC0gdG9wKSk7Ci0gIH0KLQotICAvLyBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrIGlu
dGVyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VDcmVhdGVkKGZpbmFs
IFN1cmZhY2VIb2xkZXIgaG9sZGVyKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRo
cmVhZCgpOwotICAgIGVnbFJlbmRlcmVyLmNyZWF0ZUVnbFN1cmZhY2UoaG9sZGVyLmdldFN1cmZh
Y2UoKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3VyZmFjZURlc3Ryb3ll
ZChTdXJmYWNlSG9sZGVyIGhvbGRlcikgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5U
aHJlYWQoKTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBjb21wbGV0aW9uTGF0Y2ggPSBuZXcg
Q291bnREb3duTGF0Y2goMSk7Ci0gICAgZWdsUmVuZGVyZXIucmVsZWFzZUVnbFN1cmZhY2UobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIGNvbXBsZXRpb25MYXRjaC5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShjb21wbGV0aW9uTGF0Y2gpOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VDaGFuZ2VkKFN1cmZhY2VI
b2xkZXIgaG9sZGVyLCBpbnQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBU
aHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZWdsUmVuZGVyZXIuc3VyZmFj
ZVNpemVDaGFuZ2VkKHdpZHRoLCBoZWlnaHQpOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0
UmVzb3VyY2VOYW1lKCkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gZ2V0UmVzb3VyY2VzKCku
Z2V0UmVzb3VyY2VFbnRyeU5hbWUoZ2V0SWQoKSkgKyAiOiAiOwotICAgIH0gY2F0Y2ggKE5vdEZv
dW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gIH0KLQotICAvLyBV
cGRhdGUgZnJhbWUgZGltZW5zaW9ucyBhbmQgcmVwb3J0IGFueSBjaGFuZ2VzIHRvIHxyZW5kZXJl
ckV2ZW50c3wuCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVGcmFtZURpbWVuc2lvbnNBbmRSZXBvcnRF
dmVudHMoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICBzeW5jaHJvbml6ZWQg
KGxheW91dExvY2spIHsKLSAgICAgIGlmICghaXNGaXJzdEZyYW1lUmVuZGVyZWQpIHsKLSAgICAg
ICAgaXNGaXJzdEZyYW1lUmVuZGVyZWQgPSB0cnVlOwotICAgICAgICBsb2dEKCJSZXBvcnRpbmcg
Zmlyc3QgcmVuZGVyZWQgZnJhbWUuIik7Ci0gICAgICAgIGlmIChyZW5kZXJlckV2ZW50cyAhPSBu
dWxsKSB7Ci0gICAgICAgICAgcmVuZGVyZXJFdmVudHMub25GaXJzdEZyYW1lUmVuZGVyZWQoKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHJvdGF0ZWRGcmFtZVdpZHRoICE9IGZyYW1l
LnJvdGF0ZWRXaWR0aCgpIHx8IHJvdGF0ZWRGcmFtZUhlaWdodCAhPSBmcmFtZS5yb3RhdGVkSGVp
Z2h0KCkKLSAgICAgICAgICB8fCBmcmFtZVJvdGF0aW9uICE9IGZyYW1lLnJvdGF0aW9uRGVncmVl
KSB7Ci0gICAgICAgIGxvZ0QoIlJlcG9ydGluZyBmcmFtZSByZXNvbHV0aW9uIGNoYW5nZWQgdG8g
IiArIGZyYW1lLndpZHRoICsgIngiICsgZnJhbWUuaGVpZ2h0Ci0gICAgICAgICAgICArICIgd2l0
aCByb3RhdGlvbiAiICsgZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgICAgICBpZiAocmVuZGVy
ZXJFdmVudHMgIT0gbnVsbCkgewotICAgICAgICAgIHJlbmRlcmVyRXZlbnRzLm9uRnJhbWVSZXNv
bHV0aW9uQ2hhbmdlZChmcmFtZS53aWR0aCwgZnJhbWUuaGVpZ2h0LCBmcmFtZS5yb3RhdGlvbkRl
Z3JlZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcm90YXRlZEZyYW1lV2lkdGggPSBmcmFtZS5yb3Rh
dGVkV2lkdGgoKTsKLSAgICAgICAgcm90YXRlZEZyYW1lSGVpZ2h0ID0gZnJhbWUucm90YXRlZEhl
aWdodCgpOwotICAgICAgICBmcmFtZVJvdGF0aW9uID0gZnJhbWUucm90YXRpb25EZWdyZWU7Ci0g
ICAgICAgIHBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIHJlcXVlc3RMYXlvdXQoKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBsb2dEKFN0cmluZyBzdHJpbmcpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCByZXNvdXJjZU5h
bWUgKyBzdHJpbmcpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVy
ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyLmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
MyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci0K
LWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLy8gQmFzZSBpbnRlcmZhY2UgZm9yIGFsbCBWaWRl
b0NhcHR1cmVycyB0byBpbXBsZW1lbnQuCi1wdWJsaWMgaW50ZXJmYWNlIFZpZGVvQ2FwdHVyZXIg
ewotICAvLyBJbnRlcmZhY2UgdXNlZCBmb3IgcHJvdmlkaW5nIGNhbGxiYWNrcyB0byBhbiBvYnNl
cnZlci4KLSAgcHVibGljIGludGVyZmFjZSBDYXB0dXJlck9ic2VydmVyIHsKLSAgICAvLyBOb3Rp
ZnkgaWYgdGhlIGNhbWVyYSBoYXZlIGJlZW4gc3RhcnRlZCBzdWNjZXNzZnVsbHkgb3Igbm90Lgot
ICAgIC8vIENhbGxlZCBvbiBhIEphdmEgdGhyZWFkIG93bmVkIGJ5IFZpZGVvQ2FwdHVyZXIuCi0g
ICAgdm9pZCBvbkNhcHR1cmVyU3RhcnRlZChib29sZWFuIHN1Y2Nlc3MpOwotICAgIHZvaWQgb25D
YXB0dXJlclN0b3BwZWQoKTsKLQotICAgIC8vIERlbGl2ZXJzIGEgY2FwdHVyZWQgZnJhbWUuIENh
bGxlZCBvbiBhIEphdmEgdGhyZWFkIG93bmVkIGJ5IFZpZGVvQ2FwdHVyZXIuCi0gICAgdm9pZCBv
bkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBieXRlW10gZGF0YSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZVN0YW1wKTsKLQotICAgIC8vIERl
bGl2ZXJzIGEgY2FwdHVyZWQgZnJhbWUgaW4gYSB0ZXh0dXJlIHdpdGggaWQgfG9lc1RleHR1cmVJ
ZHwuIENhbGxlZCBvbiBhIEphdmEgdGhyZWFkCi0gICAgLy8gb3duZWQgYnkgVmlkZW9DYXB0dXJl
ci4KLSAgICB2b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LCBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwKLSAgICAgICAgaW50
IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCk7Ci0gIH0KLQotICAvLyBBbiBpbXBsZW1lbnRhdGlv
biBvZiBDYXB0dXJlck9ic2VydmVyIHRoYXQgZm9yd2FyZHMgYWxsIGNhbGxzIGZyb20KLSAgLy8g
SmF2YSB0byB0aGUgQyBsYXllci4KLSAgc3RhdGljIGNsYXNzIEFuZHJvaWRWaWRlb1RyYWNrU291
cmNlT2JzZXJ2ZXIgaW1wbGVtZW50cyBDYXB0dXJlck9ic2VydmVyIHsKLSAgICAvLyBQb2ludGVy
IHRvIFZpZGVvVHJhY2tTb3VyY2VQcm94eSBwcm94eWluZyBBbmRyb2lkVmlkZW9UcmFja1NvdXJj
ZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlU291cmNlOwotCi0gICAgcHVibGljIEFu
ZHJvaWRWaWRlb1RyYWNrU291cmNlT2JzZXJ2ZXIobG9uZyBuYXRpdmVTb3VyY2UpIHsKLSAgICAg
IHRoaXMubmF0aXZlU291cmNlID0gbmF0aXZlU291cmNlOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdGFydGVkKGJvb2xlYW4gc3VjY2Vzcykgewot
ICAgICAgbmF0aXZlQ2FwdHVyZXJTdGFydGVkKG5hdGl2ZVNvdXJjZSwgc3VjY2Vzcyk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJlclN0b3BwZWQoKSB7
Ci0gICAgICBuYXRpdmVDYXB0dXJlclN0b3BwZWQobmF0aXZlU291cmNlKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAot
ICAgICAgICBieXRlW10gZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb24s
IGxvbmcgdGltZVN0YW1wKSB7Ci0gICAgICBuYXRpdmVPbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVk
KAotICAgICAgICAgIG5hdGl2ZVNvdXJjZSwgZGF0YSwgZGF0YS5sZW5ndGgsIHdpZHRoLCBoZWln
aHQsIHJvdGF0aW9uLCB0aW1lU3RhbXApOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgb2VzVGV4dHVyZUlkLAotICAgICAgICBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJv
dGF0aW9uLCBsb25nIHRpbWVzdGFtcCkgewotICAgICAgbmF0aXZlT25UZXh0dXJlRnJhbWVDYXB0
dXJlZCgKLSAgICAgICAgICBuYXRpdmVTb3VyY2UsIHdpZHRoLCBoZWlnaHQsIG9lc1RleHR1cmVJ
ZCwgdHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wKTsKLSAgICB9Ci0KLSAgICBw
cml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhcHR1cmVyU3RhcnRlZChsb25nIG5hdGl2ZVNvdXJj
ZSwgYm9vbGVhbiBzdWNjZXNzKTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhcHR1
cmVyU3RvcHBlZChsb25nIG5hdGl2ZVNvdXJjZSk7Ci0gICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBu
YXRpdmVPbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKGxvbmcgbmF0aXZlU291cmNlLCBieXRlW10g
ZGF0YSwgaW50IGxlbmd0aCwKLSAgICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90
YXRpb24sIGxvbmcgdGltZVN0YW1wKTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU9u
VGV4dHVyZUZyYW1lQ2FwdHVyZWQobG9uZyBuYXRpdmVTb3VyY2UsIGludCB3aWR0aCwgaW50IGhl
aWdodCwKLSAgICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgs
IGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMg
ZnVuY3Rpb24gaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBjYW1lcmEgdGhyZWFkLCB0aGUgYW5k
cm9pZCBhcHBsaWNhdGlvbiBjb250ZXh0LCBhbmQgdGhlCi0gICAqIGNhcHR1cmUgb2JzZXJ2ZXIu
IEl0IHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZSBhbmQgYmVmb3JlIGFueSBzdGFydENhcHR1cmUo
KSByZXF1ZXN0LiBUaGUKLSAgICogY2FtZXJhIHRocmVhZCBpcyBndWFyYW50ZWVkIHRvIGJlIHZh
bGlkIHVudGlsIGRpc3Bvc2UoKSBpcyBjYWxsZWQuIElmIHRoZSBWaWRlb0NhcHR1cmVyIHdhbnRz
Ci0gICAqIHRvIGRlbGl2ZXIgdGV4dHVyZSBmcmFtZXMsIGl0IHNob3VsZCBkbyB0aGlzIGJ5IHJl
bmRlcmluZyBvbiB0aGUgU3VyZmFjZVRleHR1cmUgaW4KLSAgICogfHN1cmZhY2VUZXh0dXJlSGVs
cGVyfCwgcmVnaXN0ZXIgaXRzZWxmIGFzIGEgbGlzdGVuZXIsIGFuZCBmb3J3YXJkIHRoZSB0ZXh0
dXJlIGZyYW1lcyB0bwotICAgKiBDYXB0dXJlck9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVy
ZWQoKS4KLSAgICovCi0gIHZvaWQgaW5pdGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJm
YWNlVGV4dHVyZUhlbHBlciwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYXB0
dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIpOwotCi0gIC8qKgotICAgKiBTdGFydCBjYXB0
dXJpbmcgZnJhbWVzIGluIGEgZm9ybWF0IHRoYXQgaXMgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8g
fHdpZHRofCB4IHxoZWlnaHR8IGFuZAotICAgKiB8ZnJhbWVyYXRlfC4KLSAgICovCi0gIHZvaWQg
c3RhcnRDYXB0dXJlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSk7Ci0KLSAg
LyoqCi0gICAqIFN0b3AgY2FwdHVyaW5nLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBibG9jayB1bnRp
bCBjYXB0dXJlIGlzIGFjdHVhbGx5IHN0b3BwZWQuCi0gICAqLwotICB2b2lkIHN0b3BDYXB0dXJl
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uOwotCi0gIHZvaWQgY2hhbmdlQ2FwdHVyZUZv
cm1hdChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpOwotCi0gIC8qKgotICAg
KiBQZXJmb3JtIGFueSBmaW5hbCBjbGVhbnVwIGhlcmUuIE5vIG1vcmUgY2FwdHVyaW5nIHdpbGwg
YmUgZG9uZSBhZnRlciB0aGlzIGNhbGwuCi0gICAqLwotICB2b2lkIGRpc3Bvc2UoKTsKLQotICAv
KioKLSAgICogQHJldHVybiB0cnVlIGlmLWFuZC1vbmx5LWlmIHRoaXMgaXMgYSBzY3JlZW4gY2Fw
dHVyZXIuCi0gICAqLwotICBib29sZWFuIGlzU2NyZWVuY2FzdCgpOwotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyQW5kcm9pZC5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvVmlkZW9DYXB0dXJlckFuZHJvaWQuamF2YQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyQW5kcm9pZC5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsNjUwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndl
YnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQu
b3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJv
aWQudmlldy5TdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1w
b3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWlt
cG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNo
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotaW1wb3J0IGphdmEudXRp
bC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOwotaW1wb3J0IG9yZy53ZWJydGMuQ2Ft
ZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5N
ZXRyaWNzLkhpc3RvZ3JhbTsKLQotLy8gQW5kcm9pZCBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBv
ZiBWaWRlb0NhcHR1cmVyLgotLy8gQW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBjYW4gYmUgY3Jl
YXRlZCBieSBhbiBhcHBsaWNhdGlvbiB1c2luZwotLy8gVmlkZW9DYXB0dXJlckFuZHJvaWQuY3Jl
YXRlKCk7Ci0vLyBUaGlzIGNsYXNzIGV4dGVuZHMgVmlkZW9DYXB0dXJlciB3aXRoIGEgbWV0aG9k
IHRvIGVhc2lseSBzd2l0Y2ggYmV0d2VlbiB0aGUKLS8vIGZyb250IGFuZCBiYWNrIGNhbWVyYS4g
SXQgYWxzbyBwcm92aWRlcyBtZXRob2RzIGZvciBlbnVtZXJhdGluZyB2YWxpZCBkZXZpY2UKLS8v
IG5hbWVzLgotLy8KLS8vIFRocmVhZGluZyBub3RlczogdGhpcyBjbGFzcyBpcyBjYWxsZWQgZnJv
bSBDKysgY29kZSwgQW5kcm9pZCBDYW1lcmEgY2FsbGJhY2tzLCBhbmQgcG9zc2libHkKLS8vIGFy
Yml0cmFyeSBKYXZhIHRocmVhZHMuIEFsbCBwdWJsaWMgZW50cnkgcG9pbnRzIGFyZSB0aHJlYWQg
c2FmZSwgYW5kIGRlbGVnYXRlIHRoZSB3b3JrIHRvIHRoZQotLy8gY2FtZXJhIHRocmVhZC4gVGhl
IGludGVybmFsICpPbkNhbWVyYVRocmVhZCgpIG1ldGhvZHMgbXVzdCBjaGVjayB8Y2FtZXJhfCBm
b3IgbnVsbCB0byBjaGVjayBpZgotLy8gdGhlIGNhbWVyYSBoYXMgYmVlbiBzdG9wcGVkLgotLy8K
LS8vIFRoaXMgY2xhc3MgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBvbmx5IGJlIHVzZWQgaWYgeW91
IG1hbnVhbGx5IGNyZWF0ZSBpdC4gUGxlYXNlIHVzZQotLy8gQ2FtZXJhMUNhcHR1cmVyIGluc3Rl
YWQuCi1ARGVwcmVjYXRlZAotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1Ymxp
YyBjbGFzcyBWaWRlb0NhcHR1cmVyQW5kcm9pZAotICAgIGltcGxlbWVudHMgQ2FtZXJhVmlkZW9D
YXB0dXJlciwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUHJldmlld0NhbGxiYWNrLAotICAgICAg
ICAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0
ZW5lciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiVmlkZW9DYXB0dXJl
ckFuZHJvaWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FNRVJBX1NUT1BfVElNRU9V
VF9NUyA9IDcwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSB2aWRlb0NhcHR1
cmVyQW5kcm9pZFN0YXJ0VGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVD
b3VudHMoIldlYlJUQy5BbmRyb2lkLlZpZGVvQ2FwdHVyZXJBbmRyb2lkLlN0YXJ0VGltZU1zIiwg
MSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIHZpZGVvQ2Fw
dHVyZXJBbmRyb2lkU3RvcFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRl
Q291bnRzKCJXZWJSVEMuQW5kcm9pZC5WaWRlb0NhcHR1cmVyQW5kcm9pZC5TdG9wVGltZU1zIiwg
MSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIHZpZGVvQ2Fw
dHVyZXJBbmRyb2lkUmVzb2x1dGlvbkhpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRl
RW51bWVyYXRpb24oIldlYlJUQy5BbmRyb2lkLlZpZGVvQ2FwdHVyZXJBbmRyb2lkLlJlc29sdXRp
b24iLAotICAgICAgICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DT01NT05fUkVTT0xVVElP
TlMuc2l6ZSgpKTsKLQotICBwcml2YXRlIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYTsg
Ly8gT25seSBub24tbnVsbCB3aGlsZSBjYXB0dXJpbmcuCi0gIHByaXZhdGUgZmluYWwgQXRvbWlj
Qm9vbGVhbiBpc0NhbWVyYVJ1bm5pbmcgPSBuZXcgQXRvbWljQm9vbGVhbigpOwotICAvLyBVc2Ug
bWF5YmVQb3N0T25DYW1lcmFUaHJlYWQoKSBpbnN0ZWFkIG9mIHBvc3RpbmcgZGlyZWN0bHkgdG8g
dGhlIGhhbmRsZXIgLSB0aGlzIHdheSBhbGwKLSAgLy8gY2FsbGJhY2tzIHdpdGggYSBzcGVjaWZl
ZCB0b2tlbiBjYW4gYmUgcmVtb3ZlZCBhdCBvbmNlLgotICBwcml2YXRlIHZvbGF0aWxlIEhhbmRs
ZXIgY2FtZXJhVGhyZWFkSGFuZGxlcjsKLSAgcHJpdmF0ZSBDb250ZXh0IGFwcGxpY2F0aW9uQ29u
dGV4dDsKLSAgLy8gU3luY2hyb25pemF0aW9uIGxvY2sgZm9yIHxpZHwuCi0gIHByaXZhdGUgZmlu
YWwgT2JqZWN0IGNhbWVyYUlkTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBpbnQgaWQ7
Ci0gIHByaXZhdGUgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvOwotICBw
cml2YXRlIENhbWVyYVN0YXRpc3RpY3MgY2FtZXJhU3RhdGlzdGljczsKLSAgLy8gUmVtZW1iZXIg
dGhlIHJlcXVlc3RlZCBmb3JtYXQgaW4gY2FzZSB3ZSB3YW50IHRvIHN3aXRjaCBjYW1lcmFzLgot
ICBwcml2YXRlIGludCByZXF1ZXN0ZWRXaWR0aDsKLSAgcHJpdmF0ZSBpbnQgcmVxdWVzdGVkSGVp
Z2h0OwotICBwcml2YXRlIGludCByZXF1ZXN0ZWRGcmFtZXJhdGU7Ci0gIC8vIFRoZSBjYXB0dXJl
IGZvcm1hdCB3aWxsIGJlIHRoZSBjbG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQgdG8gdGhlIHJlcXVl
c3RlZCBmb3JtYXQuCi0gIHByaXZhdGUgQ2FwdHVyZUZvcm1hdCBjYXB0dXJlRm9ybWF0OwotICBw
cml2YXRlIGZpbmFsIE9iamVjdCBwZW5kaW5nQ2FtZXJhU3dpdGNoTG9jayA9IG5ldyBPYmplY3Qo
KTsKLSAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIHBlbmRpbmdDYW1lcmFTd2l0Y2g7Ci0gIHBy
aXZhdGUgQ2FwdHVyZXJPYnNlcnZlciBmcmFtZU9ic2VydmVyID0gbnVsbDsKLSAgcHJpdmF0ZSBm
aW5hbCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXI7Ci0gIHByaXZhdGUgYm9vbGVh
biBmaXJzdEZyYW1lUmVwb3J0ZWQ7Ci0gIC8vIEFyYml0cmFyeSBxdWV1ZSBkZXB0aC4gIEhpZ2hl
ciBudW1iZXIgbWVhbnMgbW9yZSBtZW1vcnkgYWxsb2NhdGVkICYgaGVsZCwKLSAgLy8gbG93ZXIg
bnVtYmVyIG1lYW5zIG1vcmUgc2Vuc2l0aXZpdHkgdG8gcHJvY2Vzc2luZyB0aW1lIGluIHRoZSBj
bGllbnQgKGFuZAotICAvLyBwb3RlbnRpYWxseSBzdGFsbGluZyB0aGUgY2FwdHVyZXIgaWYgaXQg
cnVucyBvdXQgb2YgYnVmZmVycyB0byB3cml0ZSB0bykuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBOVU1CRVJfT0ZfQ0FQVFVSRV9CVUZGRVJTID0gMzsKLSAgcHJpdmF0ZSBmaW5hbCBTZXQ8
Ynl0ZVtdPiBxdWV1ZWRCdWZmZXJzID0gbmV3IEhhc2hTZXQ8Ynl0ZVtdPigpOwotICBwcml2YXRl
IGZpbmFsIGJvb2xlYW4gaXNDYXB0dXJpbmdUb1RleHR1cmU7Ci0gIHByaXZhdGUgU3VyZmFjZVRl
eHR1cmVIZWxwZXIgc3VyZmFjZUhlbHBlcjsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1B
WF9PUEVOX0NBTUVSQV9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBP
UEVOX0NBTUVSQV9ERUxBWV9NUyA9IDUwMDsKLSAgcHJpdmF0ZSBpbnQgb3BlbkNhbWVyYUF0dGVt
cHRzOwotCi0gIC8vIFVzZWQgZm9yIHN0YXRpc3RpY3MuCi0gIHByaXZhdGUgbG9uZyBzdGFydFN0
YXJ0VGltZU5zOyAvLyBUaGUgdGltZSBpbiBuYW5vc2Vjb25kcyB3aGVuIHN0YXJ0aW5nIHRoZSBj
YW1lcmEgYmVnYW4uCi0KLSAgLy8gQ2FtZXJhIGVycm9yIGNhbGxiYWNrLgotICBwcml2YXRlIGZp
bmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkVycm9yQ2FsbGJhY2sgY2FtZXJhRXJyb3JDYWxs
YmFjayA9Ci0gICAgICBuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuRXJyb3JDYWxsYmFjaygp
IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoaW50IGVy
cm9yLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmEpIHsKLSAgICAgICAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlOwotICAgICAgICAgIGlmIChlcnJvciA9PSBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5DQU1FUkFfRVJST1JfU0VSVkVSX0RJRUQpIHsKLSAgICAgICAgICAgIGVycm9yTWVzc2Fn
ZSA9ICJDYW1lcmEgc2VydmVyIGRpZWQhIjsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBlcnJvcjogIiArIGVycm9yOwotICAgICAgICAgIH0K
LSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCBlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIGlmIChl
dmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChlcnJvciA9PSBhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5DQU1FUkFfRVJST1JfRVZJQ1RFRCkgewotICAgICAgICAgICAgICBl
dmVudHNIYW5kbGVyLm9uQ2FtZXJhRGlzY29ubmVjdGVkKCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoZXJyb3JNZXNzYWdl
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH07Ci0KLSAg
cHVibGljIHN0YXRpYyBWaWRlb0NhcHR1cmVyQW5kcm9pZCBjcmVhdGUoU3RyaW5nIG5hbWUsIENh
bWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgIHJldHVybiBWaWRlb0NhcHR1
cmVyQW5kcm9pZC5jcmVhdGUobmFtZSwgZXZlbnRzSGFuZGxlciwgZmFsc2UgLyogY2FwdHVyZVRv
VGV4dHVyZSAqLyk7Ci0gIH0KLQotICAvLyBVc2UgY3RvciBkaXJlY3RseSBpbnN0ZWFkLgotICBA
RGVwcmVjYXRlZAotICBwdWJsaWMgc3RhdGljIFZpZGVvQ2FwdHVyZXJBbmRyb2lkIGNyZWF0ZSgK
LSAgICAgIFN0cmluZyBuYW1lLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIGJv
b2xlYW4gY2FwdHVyZVRvVGV4dHVyZSkgewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gbmV3IFZp
ZGVvQ2FwdHVyZXJBbmRyb2lkKG5hbWUsIGV2ZW50c0hhbmRsZXIsIGNhcHR1cmVUb1RleHR1cmUp
OwotICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRB
RywgIkNvdWxkbid0IGNyZWF0ZSBjYW1lcmEuIiwgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwcmludFN0YWNrVHJhY2UoKSB7Ci0gICAgVGhyZWFk
IGNhbWVyYVRocmVhZCA9IG51bGw7Ci0gICAgaWYgKGNhbWVyYVRocmVhZEhhbmRsZXIgIT0gbnVs
bCkgewotICAgICAgY2FtZXJhVGhyZWFkID0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIo
KS5nZXRUaHJlYWQoKTsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYVRocmVhZCAhPSBudWxsKSB7Ci0g
ICAgICBTdGFja1RyYWNlRWxlbWVudFtdIGNhbWVyYVN0YWNrVHJhY2VzID0gY2FtZXJhVGhyZWFk
LmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChjYW1lcmFTdGFja1RyYWNlcy5sZW5ndGggPiAw
KSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb0NhcHR1cmVyQW5kcm9pZCBzdGFja3Mg
dHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgc3RhY2tUcmFjZSA6IGNh
bWVyYVN0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgc3RhY2tUcmFjZS50
b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFN3aXRj
aCBjYW1lcmEgdG8gdGhlIG5leHQgdmFsaWQgY2FtZXJhIGlkLiBUaGlzIGNhbiBvbmx5IGJlIGNh
bGxlZCB3aGlsZQotICAvLyB0aGUgY2FtZXJhIGlzIHJ1bm5pbmcuCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBzd2l0Y2hDYW1lcmEoZmluYWwgQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hF
dmVudHNIYW5kbGVyKSB7Ci0gICAgaWYgKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJl
ck9mQ2FtZXJhcygpIDwgMikgewotICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVs
bCkgewotICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoIk5v
IGNhbWVyYSB0byBzd2l0Y2ggdG8uIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0NhbWVyYVN3aXRjaExvY2spIHsKLSAgICAgIGlmIChw
ZW5kaW5nQ2FtZXJhU3dpdGNoKSB7Ci0gICAgICAgIC8vIERvIG5vdCBoYW5kbGUgbXVsdGlwbGUg
Y2FtZXJhIHN3aXRjaCByZXF1ZXN0IHRvIGF2b2lkIGJsb2NraW5nCi0gICAgICAgIC8vIGNhbWVy
YSB0aHJlYWQgYnkgaGFuZGxpbmcgdG9vIG1hbnkgc3dpdGNoIHJlcXVlc3QgZnJvbSBhIHF1ZXVl
LgotICAgICAgICBMb2dnaW5nLncoVEFHLCAiSWdub3JpbmcgY2FtZXJhIHN3aXRjaCByZXF1ZXN0
LiIpOwotICAgICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAg
ICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJQZW5kaW5nIGNhbWVy
YSBzd2l0Y2ggYWxyZWFkeSBpbiBwcm9ncmVzcy4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgICBwZW5kaW5nQ2FtZXJhU3dpdGNoID0gdHJ1ZTsKLSAgICB9Ci0g
ICAgZmluYWwgYm9vbGVhbiBkaWRQb3N0ID0gbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIHN3aXRjaENhbWVyYU9uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICAgIHN5bmNocm9uaXpl
ZCAocGVuZGluZ0NhbWVyYVN3aXRjaExvY2spIHsKLSAgICAgICAgICBwZW5kaW5nQ2FtZXJhU3dp
dGNoID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIg
IT0gbnVsbCkgewotICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hE
b25lKAotICAgICAgICAgICAgICBpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfRlJPTlQpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gICAgaWYgKCFkaWRQb3N0ICYmIHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJDYW1lcmEg
aXMgc3RvcHBlZC4iKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZWNvbmZpZ3VyZSB0aGUgY2FtZXJh
IHRvIGNhcHR1cmUgaW4gYSBuZXcgZm9ybWF0LiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3
aGlsZSB0aGUgY2FtZXJhCi0gIC8vIGlzIHJ1bm5pbmcuCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdo
dCwgZmluYWwgaW50IGZyYW1lcmF0ZSkgewotICAgIG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBzdGFydFByZXZpZXdPbkNhbWVyYVRocmVhZCh3aWR0aCwgaGVpZ2h0LCBmcmFt
ZXJhdGUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHJldHJpZXZlIHRoZSBjdXJyZW50IGNhbWVyYSBpZCBzeW5jaHJvbm91c2x5LiBOb3RlIHRoYXQg
dGhlIGNhbWVyYSBpZCBtaWdodAotICAvLyBjaGFuZ2UgYXQgYW55IHBvaW50IGJ5IHN3aXRjaENh
bWVyYSgpIGNhbGxzLgotICBwcml2YXRlIGludCBnZXRDdXJyZW50Q2FtZXJhSWQoKSB7Ci0gICAg
c3luY2hyb25pemVkIChjYW1lcmFJZExvY2spIHsKLSAgICAgIHJldHVybiBpZDsKLSAgICB9Ci0g
IH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBWaWRlb0NhcHR1cmVyIGlzIHNldHVwIHRv
IGNhcHR1cmUgdmlkZW8gZnJhbWVzIHRvIGEgU3VyZmFjZVRleHR1cmUuCi0gIHB1YmxpYyBib29s
ZWFuIGlzQ2FwdHVyaW5nVG9UZXh0dXJlKCkgewotICAgIHJldHVybiBpc0NhcHR1cmluZ1RvVGV4
dHVyZTsKLSAgfQotCi0gIHB1YmxpYyBWaWRlb0NhcHR1cmVyQW5kcm9pZCgKLSAgICAgIFN0cmlu
ZyBjYW1lcmFOYW1lLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIGJvb2xlYW4g
Y2FwdHVyZVRvVGV4dHVyZSkgewotICAgIGlmIChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXRO
dW1iZXJPZkNhbWVyYXMoKSA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiTm8gY2FtZXJhcyBhdmFpbGFibGUiKTsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYU5hbWUgPT0g
bnVsbCB8fCBjYW1lcmFOYW1lLmVxdWFscygiIikpIHsKLSAgICAgIHRoaXMuaWQgPSAwOwotICAg
IH0gZWxzZSB7Ci0gICAgICB0aGlzLmlkID0gQ2FtZXJhMUVudW1lcmF0b3IuZ2V0Q2FtZXJhSW5k
ZXgoY2FtZXJhTmFtZSk7Ci0gICAgfQotICAgIHRoaXMuZXZlbnRzSGFuZGxlciA9IGV2ZW50c0hh
bmRsZXI7Ci0gICAgaXNDYXB0dXJpbmdUb1RleHR1cmUgPSBjYXB0dXJlVG9UZXh0dXJlOwotICAg
IExvZ2dpbmcuZChUQUcsICJWaWRlb0NhcHR1cmVyQW5kcm9pZCBpc0NhcHR1cmluZ1RvVGV4dHVy
ZSA6ICIgKyBpc0NhcHR1cmluZ1RvVGV4dHVyZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hl
Y2tJc09uQ2FtZXJhVGhyZWFkKCkgewotICAgIGlmIChjYW1lcmFUaHJlYWRIYW5kbGVyID09IG51
bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgaXMgbm90IGluaXRpYWxpemVkIC0g
Y2FuJ3QgY2hlY2sgdGhyZWFkLiIpOwotICAgIH0gZWxzZSBpZiAoVGhyZWFkLmN1cnJlbnRUaHJl
YWQoKSAhPSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0g
ICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJlYWQiKTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQoUnVu
bmFibGUgcnVubmFibGUpIHsKLSAgICByZXR1cm4gbWF5YmVQb3N0RGVsYXllZE9uQ2FtZXJhVGhy
ZWFkKDAgLyogZGVsYXlNcyAqLywgcnVubmFibGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFu
IG1heWJlUG9zdERlbGF5ZWRPbkNhbWVyYVRocmVhZChpbnQgZGVsYXlNcywgUnVubmFibGUgcnVu
bmFibGUpIHsKLSAgICByZXR1cm4gY2FtZXJhVGhyZWFkSGFuZGxlciAhPSBudWxsICYmIGlzQ2Ft
ZXJhUnVubmluZy5nZXQoKQotICAgICAgICAmJiBjYW1lcmFUaHJlYWRIYW5kbGVyLnBvc3RBdFRp
bWUoCi0gICAgICAgICAgICAgICBydW5uYWJsZSwgdGhpcyAvKiB0b2tlbiAqLywgU3lzdGVtQ2xv
Y2sudXB0aW1lTWlsbGlzKCkgKyBkZWxheU1zKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBkaXNwb3NlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJkaXNwb3NlIik7Ci0gIH0K
LQotICBwcml2YXRlIGJvb2xlYW4gaXNJbml0aWFsaXplZCgpIHsKLSAgICByZXR1cm4gYXBwbGlj
YXRpb25Db250ZXh0ICE9IG51bGwgJiYgZnJhbWVPYnNlcnZlciAhPSBudWxsOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGluaXRpYWxpemUoU3VyZmFjZVRleHR1cmVIZWxwZXIg
c3VyZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAg
Q2FwdHVyZXJPYnNlcnZlciBmcmFtZU9ic2VydmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImlu
aXRpYWxpemUiKTsKLSAgICBpZiAoYXBwbGljYXRpb25Db250ZXh0ID09IG51bGwpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oImFwcGxpY2F0aW9uQ29udGV4dCBu
b3Qgc2V0LiIpOwotICAgIH0KLSAgICBpZiAoZnJhbWVPYnNlcnZlciA9PSBudWxsKSB7Ci0gICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJmcmFtZU9ic2VydmVyIG5vdCBz
ZXQuIik7Ci0gICAgfQotICAgIGlmIChpc0luaXRpYWxpemVkKCkpIHsKLSAgICAgIHRocm93IG5l
dyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkFscmVhZHkgaW5pdGlhbGl6ZWQiKTsKLSAgICB9Ci0g
ICAgdGhpcy5hcHBsaWNhdGlvbkNvbnRleHQgPSBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gICAgdGhp
cy5mcmFtZU9ic2VydmVyID0gZnJhbWVPYnNlcnZlcjsKLSAgICB0aGlzLnN1cmZhY2VIZWxwZXIg
PSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYVRocmVhZEhhbmRsZXIgPQot
ICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciA9PSBudWxsID8gbnVsbCA6IHN1cmZhY2VUZXh0
dXJlSGVscGVyLmdldEhhbmRsZXIoKTsKLSAgfQotCi0gIC8vIE5vdGUgdGhhdCB0aGlzIGFjdHVh
bGx5IG9wZW5zIHRoZSBjYW1lcmEsIGFuZCBDYW1lcmEgY2FsbGJhY2tzIHJ1biBvbiB0aGUKLSAg
Ly8gdGhyZWFkIHRoYXQgY2FsbHMgb3BlbigpLCBzbyB0aGlzIGlzIGRvbmUgb24gdGhlIENhbWVy
YVRocmVhZC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0YXJ0Q2FwdHVyZShmaW5hbCBp
bnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAic3RhcnRDYXB0dXJlIHJlcXVlc3RlZDogIiArIHdpZHRoICsgIngiICsg
aGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlKTsKLSAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgewot
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigic3RhcnRDYXB0dXJlIGNhbGxl
ZCBpbiB1bmluaXRpYWxpemVkIHN0YXRlIik7Ci0gICAgfQotICAgIGlmIChzdXJmYWNlSGVscGVy
ID09IG51bGwpIHsKLSAgICAgIGZyYW1lT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQoZmFsc2Ug
Lyogc3VjY2VzcyAqLyk7Ci0gICAgICBpZiAoZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAg
ICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcigiTm8gU3VyZmFjZVRleHR1cmUgY3JlYXRl
ZC4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGlzQ2FtZXJhUnVu
bmluZy5nZXRBbmRTZXQodHJ1ZSkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgaGFz
IGFscmVhZHkgYmVlbiBzdGFydGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBmaW5h
bCBib29sZWFuIGRpZFBvc3QgPSBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
b3BlbkNhbWVyYUF0dGVtcHRzID0gMDsKLSAgICAgICAgc3RhcnRDYXB0dXJlT25DYW1lcmFUaHJl
YWQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAo
IWRpZFBvc3QpIHsKLSAgICAgIGZyYW1lT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQoZmFsc2Up
OwotICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICBldmVudHNIYW5k
bGVyLm9uQ2FtZXJhRXJyb3IoIkNvdWxkIG5vdCBwb3N0IHRhc2sgdG8gY2FtZXJhIHRocmVhZC4i
KTsKLSAgICAgIH0KLSAgICAgIGlzQ2FtZXJhUnVubmluZy5zZXQoZmFsc2UpOwotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZChmaW5hbCBpbnQg
d2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBjaGVj
a0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBzdGFydFN0YXJ0VGltZU5zID0gU3lzdGVtLm5hbm9U
aW1lKCk7Ci0gICAgaWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZDogQ2FtZXJhIGlzIHN0b3BwZWQiKTsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAic3RhcnRDYXB0dXJlT25DYW1lcmFUaHJlYWQ6IENhbWVyYSBoYXMgYWxy
ZWFkeSBiZWVuIHN0YXJ0ZWQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMuZmly
c3RGcmFtZVJlcG9ydGVkID0gZmFsc2U7Ci0KLSAgICB0cnkgewotICAgICAgdHJ5IHsKLSAgICAg
ICAgc3luY2hyb25pemVkIChjYW1lcmFJZExvY2spIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFH
LCAiT3BlbmluZyBjYW1lcmEgIiArIGlkKTsKLSAgICAgICAgICBpZiAoZXZlbnRzSGFuZGxlciAh
PSBudWxsKSB7Ci0gICAgICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhT3BlbmluZyhDYW1l
cmExRW51bWVyYXRvci5nZXREZXZpY2VOYW1lKGlkKSk7Ci0gICAgICAgICAgfQotICAgICAgICAg
IGNhbWVyYSA9IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oaWQpOwotICAgICAgICAgIGlu
Zm8gPSBuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbygpOwotICAgICAgICAg
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldENhbWVyYUluZm8oaWQsIGluZm8pOwotICAgICAg
ICB9Ci0gICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgb3BlbkNh
bWVyYUF0dGVtcHRzKys7Ci0gICAgICAgIGlmIChvcGVuQ2FtZXJhQXR0ZW1wdHMgPCBNQVhfT1BF
Tl9DQU1FUkFfQVRURU1QVFMpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhLm9w
ZW4gZmFpbGVkLCByZXRyeWluZyIsIGUpOwotICAgICAgICAgIG1heWJlUG9zdERlbGF5ZWRPbkNh
bWVyYVRocmVhZChPUEVOX0NBTUVSQV9ERUxBWV9NUywgbmV3IFJ1bm5hYmxlKCkgewotICAgICAg
ICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
ICAgICAgIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhyZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIHRocm93IGU7Ci0gICAgICB9Ci0KLSAgICAgIGNhbWVyYS5zZXRQcmV2
aWV3VGV4dHVyZShzdXJmYWNlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotCi0gICAgICBM
b2dnaW5nLmQoVEFHLCAiQ2FtZXJhIG9yaWVudGF0aW9uOiAiICsgaW5mby5vcmllbnRhdGlvbiAr
ICIgLkRldmljZSBvcmllbnRhdGlvbjogIgotICAgICAgICAgICAgICArIGdldERldmljZU9yaWVu
dGF0aW9uKCkpOwotICAgICAgY2FtZXJhLnNldEVycm9yQ2FsbGJhY2soY2FtZXJhRXJyb3JDYWxs
YmFjayk7Ci0gICAgICBzdGFydFByZXZpZXdPbkNhbWVyYVRocmVhZCh3aWR0aCwgaGVpZ2h0LCBm
cmFtZXJhdGUpOwotICAgICAgZnJhbWVPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZCh0cnVlKTsK
LSAgICAgIGlmIChpc0NhcHR1cmluZ1RvVGV4dHVyZSkgewotICAgICAgICBzdXJmYWNlSGVscGVy
LnN0YXJ0TGlzdGVuaW5nKHRoaXMpOwotICAgICAgfQotCi0gICAgICAvLyBTdGFydCBjYW1lcmEg
b2JzZXJ2ZXIuCi0gICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbmV3IENhbWVyYVN0YXRpc3RpY3Mo
c3VyZmFjZUhlbHBlciwgZXZlbnRzSGFuZGxlcik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24g
fCBSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJzdGFydENhcHR1
cmUgZmFpbGVkIiwgZSk7Ci0gICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbWVyYSBpcyByZWxlYXNl
ZC4KLSAgICAgIHN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQodHJ1ZSAvKiBzdG9wSGFuZGxlciAq
Lyk7Ci0gICAgICBmcmFtZU9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKGZhbHNlKTsKLSAgICAg
IGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNh
bWVyYUVycm9yKCJDYW1lcmEgY2FuIG5vdCBiZSBzdGFydGVkLiIpOwotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIC8vIChSZSlzdGFydCBwcmV2aWV3IHdpdGggdGhlIGNsb3Nlc3Qgc3VwcG9ydGVk
IGZvcm1hdCB0byB8d2lkdGh8IHggfGhlaWdodHwgQCB8ZnJhbWVyYXRlfC4KLSAgcHJpdmF0ZSB2
b2lkIHN0YXJ0UHJldmlld09uQ2FtZXJhVGhyZWFkKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IGZyYW1lcmF0ZSkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmICghaXND
YW1lcmFSdW5uaW5nLmdldCgpIHx8IGNhbWVyYSA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUo
VEFHLCAic3RhcnRQcmV2aWV3T25DYW1lcmFUaHJlYWQ6IENhbWVyYSBpcyBzdG9wcGVkIik7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotICAgIExvZ2dpbmcuZCgKLSAgICAgICAgVEFHLCAic3RhcnRQ
cmV2aWV3T25DYW1lcmFUaHJlYWQgcmVxdWVzdGVkOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQg
KyAiQCIgKyBmcmFtZXJhdGUpOwotCi0gICAgcmVxdWVzdGVkV2lkdGggPSB3aWR0aDsKLSAgICBy
ZXF1ZXN0ZWRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgcmVxdWVzdGVkRnJhbWVyYXRlID0gZnJhbWVy
YXRlOwotCi0gICAgLy8gRmluZCBjbG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQgZm9yIHx3aWR0aHwg
eCB8aGVpZ2h0fCBAIHxmcmFtZXJhdGV8LgotICAgIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLlBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IGNhbWVyYS5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAg
ZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBzdXBwb3J0ZWRGcmFtZXJh
dGVzID0KLSAgICAgICAgQ2FtZXJhMUVudW1lcmF0b3IuY29udmVydEZyYW1lcmF0ZXMocGFyYW1l
dGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3RnBzUmFuZ2UoKSk7Ci0gICAgTG9nZ2luZy5kKFRBRywg
IkF2YWlsYWJsZSBmcHMgcmFuZ2VzOiAiICsgc3VwcG9ydGVkRnJhbWVyYXRlcyk7Ci0KLSAgICBm
aW5hbCBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIGZwc1JhbmdlID0KLSAgICAgICAgQ2Ft
ZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZShz
dXBwb3J0ZWRGcmFtZXJhdGVzLCBmcmFtZXJhdGUpOwotCi0gICAgZmluYWwgTGlzdDxTaXplPiBz
dXBwb3J0ZWRQcmV2aWV3U2l6ZXMgPQotICAgICAgICBDYW1lcmExRW51bWVyYXRvci5jb252ZXJ0
U2l6ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3U2l6ZXMoKSk7Ci0gICAgZmluYWwg
U2l6ZSBwcmV2aWV3U2l6ZSA9Ci0gICAgICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRD
bG9zZXN0U3VwcG9ydGVkU2l6ZShzdXBwb3J0ZWRQcmV2aWV3U2l6ZXMsIHdpZHRoLCBoZWlnaHQp
OwotICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5yZXBvcnRDYW1lcmFSZXNvbHV0aW9uKAot
ICAgICAgICB2aWRlb0NhcHR1cmVyQW5kcm9pZFJlc29sdXRpb25IaXN0b2dyYW0sIHByZXZpZXdT
aXplKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIHByZXZpZXcgc2l6ZXM6ICIgKyBz
dXBwb3J0ZWRQcmV2aWV3U2l6ZXMpOwotCi0gICAgZmluYWwgQ2FwdHVyZUZvcm1hdCBjYXB0dXJl
Rm9ybWF0ID0KLSAgICAgICAgbmV3IENhcHR1cmVGb3JtYXQocHJldmlld1NpemUud2lkdGgsIHBy
ZXZpZXdTaXplLmhlaWdodCwgZnBzUmFuZ2UpOwotCi0gICAgLy8gQ2hlY2sgaWYgd2UgYXJlIGFs
cmVhZHkgdXNpbmcgdGhpcyBjYXB0dXJlIGZvcm1hdCwgdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGRv
IGFueXRoaW5nLgotICAgIGlmIChjYXB0dXJlRm9ybWF0LmVxdWFscyh0aGlzLmNhcHR1cmVGb3Jt
YXQpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIGNhbWVyYSBwYXJh
bWV0ZXJzLgotICAgIExvZ2dpbmcuZChUQUcsICJpc1ZpZGVvU3RhYmlsaXphdGlvblN1cHBvcnRl
ZDogIiArIHBhcmFtZXRlcnMuaXNWaWRlb1N0YWJpbGl6YXRpb25TdXBwb3J0ZWQoKSk7Ci0gICAg
aWYgKHBhcmFtZXRlcnMuaXNWaWRlb1N0YWJpbGl6YXRpb25TdXBwb3J0ZWQoKSkgewotICAgICAg
cGFyYW1ldGVycy5zZXRWaWRlb1N0YWJpbGl6YXRpb24odHJ1ZSk7Ci0gICAgfQotICAgIC8vIE5v
dGU6IHNldFJlY29yZGluZ0hpbnQodHJ1ZSkgYWN0dWFsbHkgZGVjcmVhc2UgZnJhbWUgcmF0ZSBv
biBONS4KLSAgICAvLyBwYXJhbWV0ZXJzLnNldFJlY29yZGluZ0hpbnQodHJ1ZSk7Ci0gICAgaWYg
KGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1heCA+IDApIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0
UHJldmlld0Zwc1JhbmdlKGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1pbiwgY2FwdHVyZUZvcm1h
dC5mcmFtZXJhdGUubWF4KTsKLSAgICB9Ci0gICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3U2l6ZShw
cmV2aWV3U2l6ZS53aWR0aCwgcHJldmlld1NpemUuaGVpZ2h0KTsKLQotICAgIGlmICghaXNDYXB0
dXJpbmdUb1RleHR1cmUpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld0Zvcm1hdChjYXB0
dXJlRm9ybWF0LmltYWdlRm9ybWF0KTsKLSAgICB9Ci0gICAgLy8gUGljdHVyZSBzaXplIGlzIGZv
ciB0YWtpbmcgcGljdHVyZXMgYW5kIG5vdCBmb3IgcHJldmlldy92aWRlbywgYnV0IHdlIG5lZWQg
dG8gc2V0IGl0IGFueXdheQotICAgIC8vIGFzIGEgd29ya2Fyb3VuZCBmb3IgYW4gYXNwZWN0IHJh
dGlvIHByb2JsZW0gb24gTmV4dXMgNy4KLSAgICBmaW5hbCBTaXplIHBpY3R1cmVTaXplID0gQ2Ft
ZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRTaXplKAotICAgICAgICBD
YW1lcmExRW51bWVyYXRvci5jb252ZXJ0U2l6ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQaWN0
dXJlU2l6ZXMoKSksIHdpZHRoLCBoZWlnaHQpOwotICAgIHBhcmFtZXRlcnMuc2V0UGljdHVyZVNp
emUocGljdHVyZVNpemUud2lkdGgsIHBpY3R1cmVTaXplLmhlaWdodCk7Ci0KLSAgICAvLyBUZW1w
b3JhcmlseSBzdG9wIHByZXZpZXcgaWYgaXQncyBhbHJlYWR5IHJ1bm5pbmcuCi0gICAgaWYgKHRo
aXMuY2FwdHVyZUZvcm1hdCAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmEuc3RvcFByZXZpZXcoKTsK
LSAgICAgIC8vIENhbGxpbmcgfHNldFByZXZpZXdDYWxsYmFja1dpdGhCdWZmZXJ8IHdpdGggbnVs
bCBzaG91bGQgY2xlYXIgdGhlIGludGVybmFsIGNhbWVyYSBidWZmZXIKLSAgICAgIC8vIHF1ZXVl
LCBidXQgc29tZXRpbWVzIHdlIHJlY2VpdmUgYSBmcmFtZSB3aXRoIHRoZSBvbGQgcmVzb2x1dGlv
biBhZnRlciB0aGlzIGNhbGwgYW55d2F5LgotICAgICAgY2FtZXJhLnNldFByZXZpZXdDYWxsYmFj
a1dpdGhCdWZmZXIobnVsbCk7Ci0gICAgfQotCi0gICAgTGlzdDxTdHJpbmc+IGZvY3VzTW9kZXMg
PSBwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZEZvY3VzTW9kZXMoKTsKLSAgICBpZiAoZm9jdXNNb2Rl
cy5jb250YWlucyhhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVf
Q09OVElOVU9VU19WSURFTykpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJFbmFibGUgY29udGlu
dW91cyBhdXRvIGZvY3VzIG1vZGUuIik7Ci0gICAgICBwYXJhbWV0ZXJzLnNldEZvY3VzTW9kZShh
bmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVfQ09OVElOVU9VU19W
SURFTyk7Ci0gICAgfQotCi0gICAgLy8gKFJlKXN0YXJ0IHByZXZpZXcuCi0gICAgTG9nZ2luZy5k
KFRBRywgIlN0YXJ0IGNhcHR1cmluZzogIiArIGNhcHR1cmVGb3JtYXQpOwotICAgIHRoaXMuY2Fw
dHVyZUZvcm1hdCA9IGNhcHR1cmVGb3JtYXQ7Ci0KLSAgICBjYW1lcmEuc2V0UGFyYW1ldGVycyhw
YXJhbWV0ZXJzKTsKLSAgICAvLyBDYWxjdWxhdGUgb3JpZW50YXRpb24gbWFudWFsbHkgYW5kIHNl
bmQgaXQgYXMgQ1ZPIGluc3RlYWQuCi0gICAgY2FtZXJhLnNldERpc3BsYXlPcmllbnRhdGlvbigw
IC8qIGRlZ3JlZXMgKi8pOwotICAgIGlmICghaXNDYXB0dXJpbmdUb1RleHR1cmUpIHsKLSAgICAg
IHF1ZXVlZEJ1ZmZlcnMuY2xlYXIoKTsKLSAgICAgIGZpbmFsIGludCBmcmFtZVNpemUgPSBjYXB0
dXJlRm9ybWF0LmZyYW1lU2l6ZSgpOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJf
T0ZfQ0FQVFVSRV9CVUZGRVJTOyArK2kpIHsKLSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBidWZm
ZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGZyYW1lU2l6ZSk7Ci0gICAgICAgIHF1ZXVl
ZEJ1ZmZlcnMuYWRkKGJ1ZmZlci5hcnJheSgpKTsKLSAgICAgICAgY2FtZXJhLmFkZENhbGxiYWNr
QnVmZmVyKGJ1ZmZlci5hcnJheSgpKTsKLSAgICAgIH0KLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3
Q2FsbGJhY2tXaXRoQnVmZmVyKHRoaXMpOwotICAgIH0KLSAgICBjYW1lcmEuc3RhcnRQcmV2aWV3
KCk7Ci0gIH0KLQotICAvLyBCbG9ja3MgdW50aWwgY2FtZXJhIGlzIGtub3duIHRvIGJlIHN0b3Bw
ZWQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wQ2FwdHVyZSgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BDYXB0dXJlIik7Ci0g
ICAgZmluYWwgQ291bnREb3duTGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsK
LSAgICBmaW5hbCBib29sZWFuIGRpZFBvc3QgPSBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgc3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZCh0cnVlIC8qIHN0b3BIYW5kbGVyICov
KTsKLSAgICAgICAgYmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBp
ZiAoIWRpZFBvc3QpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYWxsaW5nIHN0b3BDYXB0dXJl
KCkgZm9yIGFscmVhZHkgc3RvcHBlZCBjYW1lcmEuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICghYmFycmllci5hd2FpdChDQU1FUkFfU1RPUF9USU1FT1VUX01TLCBUaW1lVW5pdC5N
SUxMSVNFQ09ORFMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIHN0b3AgdGltZW91
dCIpOwotICAgICAgcHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICBpZiAoZXZlbnRzSGFuZGxlciAh
PSBudWxsKSB7Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcigiQ2FtZXJhIHN0
b3AgdGltZW91dCIpOwotICAgICAgfQotICAgIH0KLSAgICBmcmFtZU9ic2VydmVyLm9uQ2FwdHVy
ZXJTdG9wcGVkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BDYXB0dXJlIGRvbmUiKTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBzdG9wQ2FwdHVyZU9uQ2FtZXJhVGhyZWFkKGJvb2xlYW4gc3Rv
cEhhbmRsZXIpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQo
VEFHLCAic3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZCIpOwotICAgIGZpbmFsIGxvbmcgc3RvcFN0
YXJ0VGltZSA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIC8vIE5vdGUgdGhhdCB0aGUgY2FtZXJh
IG1pZ2h0IHN0aWxsIG5vdCBiZSBzdGFydGVkIGhlcmUgaWYgc3RhcnRDYXB0dXJlT25DYW1lcmFU
aHJlYWQgZmFpbGVkCi0gICAgLy8gYW5kIHdlIHBvc3RlZCBhIHJldHJ5LgotCi0gICAgLy8gTWFr
ZSBzdXJlIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgaXMgbm90IGNhbGxlZCBhbnltb3JlLgot
ICAgIGlmIChzdXJmYWNlSGVscGVyICE9IG51bGwpIHsKLSAgICAgIHN1cmZhY2VIZWxwZXIuc3Rv
cExpc3RlbmluZygpOwotICAgIH0KLSAgICBpZiAoc3RvcEhhbmRsZXIpIHsKLSAgICAgIC8vIENs
ZWFyIHRoZSBjYW1lcmFUaHJlYWRIYW5kbGVyIGZpcnN0LCBpbiBjYXNlIHN0b3BQcmV2aWV3IG9y
Ci0gICAgICAvLyBvdGhlciBkcml2ZXIgY29kZSBkZWFkbG9ja3MuIERlYWRsb2NrIGluCi0gICAg
ICAvLyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5fc3RvcFByZXZpZXcoTmF0aXZlIE1ldGhvZCkg
aGFzCi0gICAgICAvLyBiZWVuIG9ic2VydmVkIG9uIE5leHVzIDUgKGhhbW1lcmhlYWQpLCBPUyB2
ZXJzaW9uIExNWTQ4SS4KLSAgICAgIC8vIFRoZSBjYW1lcmEgbWlnaHQgcG9zdCBhbm90aGVyIG9u
ZSBvciB0d28gcHJldmlldyBmcmFtZXMKLSAgICAgIC8vIGJlZm9yZSBzdG9wcGVkLCBzbyB3ZSBo
YXZlIHRvIGNoZWNrIHxpc0NhbWVyYVJ1bm5pbmd8LgotICAgICAgLy8gUmVtb3ZlIGFsbCBwZW5k
aW5nIFJ1bm5hYmxlcyBwb3N0ZWQgZnJvbSB8dGhpc3wuCi0gICAgICBpc0NhbWVyYVJ1bm5pbmcu
c2V0KGZhbHNlKTsKLSAgICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzQW5k
TWVzc2FnZXModGhpcyAvKiB0b2tlbiAqLyk7Ci0gICAgfQotICAgIGlmIChjYW1lcmFTdGF0aXN0
aWNzICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYVN0YXRpc3RpY3MucmVsZWFzZSgpOwotICAgICAg
Y2FtZXJhU3RhdGlzdGljcyA9IG51bGw7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJTdG9w
IHByZXZpZXcuIik7Ci0gICAgaWYgKGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmEuc3Rv
cFByZXZpZXcoKTsKLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3Q2FsbGJhY2tXaXRoQnVmZmVyKG51
bGwpOwotICAgIH0KLSAgICBxdWV1ZWRCdWZmZXJzLmNsZWFyKCk7Ci0gICAgY2FwdHVyZUZvcm1h
dCA9IG51bGw7Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiUmVsZWFzZSBjYW1lcmEuIik7Ci0gICAg
aWYgKGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmEucmVsZWFzZSgpOwotICAgICAgY2Ft
ZXJhID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAg
ICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUNsb3NlZCgpOwotICAgIH0KLSAgICBmaW5hbCBpbnQg
c3RvcFRpbWVNcyA9IChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5u
YW5vVGltZSgpIC0gc3RvcFN0YXJ0VGltZSk7Ci0gICAgdmlkZW9DYXB0dXJlckFuZHJvaWRTdG9w
VGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdG9wVGltZU1zKTsKLSAgICBMb2dnaW5nLmQoVEFH
LCAic3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZCBkb25lIik7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgc3dpdGNoQ2FtZXJhT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0gICAgaWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJzd2l0Y2hDYW1lcmFPbkNhbWVyYVRocmVhZDogQ2FtZXJhIGlzIHN0b3BwZWQiKTsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYU9u
Q2FtZXJhVGhyZWFkIik7Ci0gICAgc3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZChmYWxzZSAvKiBz
dG9wSGFuZGxlciAqLyk7Ci0gICAgc3luY2hyb25pemVkIChjYW1lcmFJZExvY2spIHsKLSAgICAg
IGlkID0gKGlkICsgMSkgJSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVy
YXMoKTsKLSAgICB9Ci0gICAgc3RhcnRDYXB0dXJlT25DYW1lcmFUaHJlYWQocmVxdWVzdGVkV2lk
dGgsIHJlcXVlc3RlZEhlaWdodCwgcmVxdWVzdGVkRnJhbWVyYXRlKTsKLSAgICBMb2dnaW5nLmQo
VEFHLCAic3dpdGNoQ2FtZXJhT25DYW1lcmFUaHJlYWQgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0
ZSBpbnQgZ2V0RGV2aWNlT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IG9yaWVudGF0aW9uID0gMDsK
LQotICAgIFdpbmRvd01hbmFnZXIgd20gPSAoV2luZG93TWFuYWdlcikgYXBwbGljYXRpb25Db250
ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAgc3dpdGNo
ICh3bS5nZXREZWZhdWx0RGlzcGxheSgpLmdldFJvdGF0aW9uKCkpIHsKLSAgICAgIGNhc2UgU3Vy
ZmFjZS5ST1RBVElPTl85MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSA5MDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMTgwOgotICAgICAgICBvcmllbnRhdGlv
biA9IDE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMjcw
OgotICAgICAgICBvcmllbnRhdGlvbiA9IDI3MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNl
IFN1cmZhY2UuUk9UQVRJT05fMDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIG9yaWVudGF0aW9u
ID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBvcmllbnRhdGlvbjsKLSAg
fQotCi0gIHByaXZhdGUgaW50IGdldEZyYW1lT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IHJvdGF0
aW9uID0gZ2V0RGV2aWNlT3JpZW50YXRpb24oKTsKLSAgICBpZiAoaW5mby5mYWNpbmcgPT0gYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0JBQ0spIHsKLSAg
ICAgIHJvdGF0aW9uID0gMzYwIC0gcm90YXRpb247Ci0gICAgfQotICAgIHJldHVybiAoaW5mby5v
cmllbnRhdGlvbiArIHJvdGF0aW9uKSAlIDM2MDsKLSAgfQotCi0gIC8vIENhbGxlZCBvbiBjYW1l
cmFUaHJlYWQgc28gbXVzdCBub3QgInN5bmNocm9uaXplZCIuCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvblByZXZpZXdGcmFtZShieXRlW10gZGF0YSwgYW5kcm9pZC5oYXJkd2FyZS5DYW1l
cmEgY2FsbGJhY2tDYW1lcmEpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBp
ZiAoIWlzQ2FtZXJhUnVubmluZy5nZXQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIm9uUHJl
dmlld0ZyYW1lOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIXF1ZXVlZEJ1ZmZlcnMuY29udGFpbnMoZGF0YSkpIHsKLSAgICAgIC8vIHxkYXRhfCBp
cyBhbiBvbGQgaW52YWxpZCBidWZmZXIuCi0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChj
YW1lcmEgIT0gY2FsbGJhY2tDYW1lcmEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJVbmV4cGVjdGVkIGNhbWVyYSBpbiBjYWxsYmFjayEiKTsKLSAgICB9Ci0KLSAgICBmaW5h
bCBsb25nIGNhcHR1cmVUaW1lTnMgPSBUaW1lVW5pdC5NSUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0
ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSk7Ci0KLSAgICBpZiAoIWZpcnN0RnJhbWVSZXBvcnRl
ZCkgewotICAgICAgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAgfQotICAgIGNhbWVyYVN0
YXRpc3RpY3MuYWRkRnJhbWUoKTsKLSAgICBmcmFtZU9ic2VydmVyLm9uQnl0ZUJ1ZmZlckZyYW1l
Q2FwdHVyZWQoCi0gICAgICAgIGRhdGEsIGNhcHR1cmVGb3JtYXQud2lkdGgsIGNhcHR1cmVGb3Jt
YXQuaGVpZ2h0LCBnZXRGcmFtZU9yaWVudGF0aW9uKCksIGNhcHR1cmVUaW1lTnMpOwotICAgIGNh
bWVyYS5hZGRDYWxsYmFja0J1ZmZlcihkYXRhKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZShpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtd
IHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgIGNoZWNrSXNPbkNhbWVy
YVRocmVhZCgpOwotICAgIGlmICghaXNDYW1lcmFSdW5uaW5nLmdldCgpKSB7Ci0gICAgICBMb2dn
aW5nLmUoVEFHLCAib25UZXh0dXJlRnJhbWVBdmFpbGFibGU6IENhbWVyYSBpcyBzdG9wcGVkIik7
Ci0gICAgICBzdXJmYWNlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpbnQgcm90YXRpb24gPSBnZXRGcmFtZU9yaWVudGF0aW9uKCk7Ci0gICAg
aWYgKGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FN
RVJBX0ZBQ0lOR19GUk9OVCkgewotICAgICAgLy8gVW5kbyB0aGUgbWlycm9yIHRoYXQgdGhlIE9T
ICJoZWxwcyIgdXMgd2l0aC4KLSAgICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20v
cmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmh0bWwjc2V0RGlzcGxheU9yaWVudGF0
aW9uKGludCkKLSAgICAgIHRyYW5zZm9ybU1hdHJpeCA9Ci0gICAgICAgICAgUmVuZGVyZXJDb21t
b24ubXVsdGlwbHlNYXRyaWNlcyh0cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9uLmhvcml6
b250YWxGbGlwTWF0cml4KCkpOwotICAgIH0KLSAgICBpZiAoIWZpcnN0RnJhbWVSZXBvcnRlZCkg
ewotICAgICAgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAgfQotICAgIGNhbWVyYVN0YXRp
c3RpY3MuYWRkRnJhbWUoKTsKLSAgICBmcmFtZU9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVy
ZWQoY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIG9lc1RleHR1cmVJ
ZCwKLSAgICAgICAgdHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wTnMpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIG9uRmlyc3RGcmFtZUF2YWlsYWJsZSgpIHsKLSAgICBpZiAoZXZl
bnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBldmVudHNIYW5kbGVyLm9uRmlyc3RGcmFtZUF2
YWlsYWJsZSgpOwotICAgIH0KLSAgICBmaW5hbCBpbnQgc3RhcnRUaW1lTXMgPQotICAgICAgICAo
aW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIHN0
YXJ0U3RhcnRUaW1lTnMpOwotICAgIHZpZGVvQ2FwdHVyZXJBbmRyb2lkU3RhcnRUaW1lTXNIaXN0
b2dyYW0uYWRkU2FtcGxlKHN0YXJ0VGltZU1zKTsKLSAgICBmaXJzdEZyYW1lUmVwb3J0ZWQgPSB0
cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzU2NyZWVuY2FzdCgp
IHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlk
ZW9GaWxlUmVuZGVyZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVv
RmlsZVJlbmRlcmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
VmlkZW9GaWxlUmVuZGVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE0OSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5v
cy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKLWltcG9ydCBqYXZh
LmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9y
dCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50
RG93bkxhdGNoOwotCi0vKioKLSAqIENhbiBiZSB1c2VkIHRvIHNhdmUgdGhlIHZpZGVvIGZyYW1l
cyB0byBmaWxlLgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9GaWxlUmVuZGVyZXIgaW1wbGVtZW50
cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBUQUcgPSAiVmlkZW9GaWxlUmVuZGVyZXIiOwotCi0gIHByaXZhdGUgZmluYWwgSGFuZGxlclRo
cmVhZCByZW5kZXJUaHJlYWQ7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGhhbmRsZXJMb2NrID0g
bmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgcmVuZGVyVGhyZWFkSGFuZGxl
cjsKLSAgcHJpdmF0ZSBmaW5hbCBGaWxlT3V0cHV0U3RyZWFtIHZpZGVvT3V0RmlsZTsKLSAgcHJp
dmF0ZSBmaW5hbCBpbnQgb3V0cHV0RmlsZVdpZHRoOwotICBwcml2YXRlIGZpbmFsIGludCBvdXRw
dXRGaWxlSGVpZ2h0OwotICBwcml2YXRlIGZpbmFsIGludCBvdXRwdXRGcmFtZVNpemU7Ci0gIHBy
aXZhdGUgZmluYWwgQnl0ZUJ1ZmZlciBvdXRwdXRGcmFtZUJ1ZmZlcjsKLSAgcHJpdmF0ZSBFZ2xC
YXNlIGVnbEJhc2U7Ci0gIHByaXZhdGUgWXV2Q29udmVydGVyIHl1dkNvbnZlcnRlcjsKLQotICBw
dWJsaWMgVmlkZW9GaWxlUmVuZGVyZXIoU3RyaW5nIG91dHB1dEZpbGUsIGludCBvdXRwdXRGaWxl
V2lkdGgsIGludCBvdXRwdXRGaWxlSGVpZ2h0LAotICAgICAgZmluYWwgRWdsQmFzZS5Db250ZXh0
IHNoYXJlZENvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgaWYgKChvdXRwdXRGaWxl
V2lkdGggJSAyKSA9PSAxIHx8IChvdXRwdXRGaWxlSGVpZ2h0ICUgMikgPT0gMSkgewotICAgICAg
dGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRG9lcyBub3Qgc3VwcG9ydCB1bmV2
ZW4gd2lkdGggb3IgaGVpZ2h0Iik7Ci0gICAgfQotCi0gICAgdGhpcy5vdXRwdXRGaWxlV2lkdGgg
PSBvdXRwdXRGaWxlV2lkdGg7Ci0gICAgdGhpcy5vdXRwdXRGaWxlSGVpZ2h0ID0gb3V0cHV0Rmls
ZUhlaWdodDsKLQotICAgIG91dHB1dEZyYW1lU2l6ZSA9IG91dHB1dEZpbGVXaWR0aCAqIG91dHB1
dEZpbGVIZWlnaHQgKiAzIC8gMjsKLSAgICBvdXRwdXRGcmFtZUJ1ZmZlciA9IEJ5dGVCdWZmZXIu
YWxsb2NhdGVEaXJlY3Qob3V0cHV0RnJhbWVTaXplKTsKLQotICAgIHZpZGVvT3V0RmlsZSA9IG5l
dyBGaWxlT3V0cHV0U3RyZWFtKG91dHB1dEZpbGUpOwotICAgIHZpZGVvT3V0RmlsZS53cml0ZSgK
LSAgICAgICAgKCJZVVY0TVBFRzIgQzQyMCBXIiArIG91dHB1dEZpbGVXaWR0aCArICIgSCIgKyBv
dXRwdXRGaWxlSGVpZ2h0ICsgIiBJcCBGMzA6MSBBMToxXG4iKQotICAgICAgICAgICAgLmdldEJ5
dGVzKCkpOwotCi0gICAgcmVuZGVyVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoVEFHKTsKLSAg
ICByZW5kZXJUaHJlYWQuc3RhcnQoKTsKLSAgICByZW5kZXJUaHJlYWRIYW5kbGVyID0gbmV3IEhh
bmRsZXIocmVuZGVyVGhyZWFkLmdldExvb3BlcigpKTsKLQotICAgIFRocmVhZFV0aWxzLmludm9r
ZUF0RnJvbnRVbmludGVycnVwdGlibHkocmVuZGVyVGhyZWFkSGFuZGxlciwgbmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShzaGFyZWRDb250ZXh0LCBFZ2xCYXNlLkNPTkZJR19Q
SVhFTF9CVUZGRVIpOwotICAgICAgICBlZ2xCYXNlLmNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2Uo
KTsKLSAgICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgICB5dXZDb252ZXJ0ZXIg
PSBuZXcgWXV2Q29udmVydGVyKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoZmluYWwgVmlkZW9SZW5kZXJlci5JNDIwRnJh
bWUgZnJhbWUpIHsKLSAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHJl
bmRlckZyYW1lT25SZW5kZXJUaHJlYWQoZnJhbWUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIHJlbmRlckZyYW1lT25SZW5kZXJUaHJlYWQoVmlkZW9SZW5kZXJlci5J
NDIwRnJhbWUgZnJhbWUpIHsKLSAgICBmaW5hbCBmbG9hdCBmcmFtZUFzcGVjdFJhdGlvID0gKGZs
b2F0KSBmcmFtZS5yb3RhdGVkV2lkdGgoKSAvIChmbG9hdCkgZnJhbWUucm90YXRlZEhlaWdodCgp
OwotCi0gICAgZmluYWwgZmxvYXRbXSByb3RhdGVkU2FtcGxpbmdNYXRyaXggPQotICAgICAgICBS
ZW5kZXJlckNvbW1vbi5yb3RhdGVUZXh0dXJlTWF0cml4KGZyYW1lLnNhbXBsaW5nTWF0cml4LCBm
cmFtZS5yb3RhdGlvbkRlZ3JlZSk7Ci0gICAgZmluYWwgZmxvYXRbXSBsYXlvdXRNYXRyaXggPSBS
ZW5kZXJlckNvbW1vbi5nZXRMYXlvdXRNYXRyaXgoCi0gICAgICAgIGZhbHNlLCBmcmFtZUFzcGVj
dFJhdGlvLCAoZmxvYXQpIG91dHB1dEZpbGVXaWR0aCAvIG91dHB1dEZpbGVIZWlnaHQpOwotICAg
IGZpbmFsIGZsb2F0W10gdGV4TWF0cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNl
cyhyb3RhdGVkU2FtcGxpbmdNYXRyaXgsIGxheW91dE1hdHJpeCk7Ci0KLSAgICB0cnkgewotICAg
ICAgdmlkZW9PdXRGaWxlLndyaXRlKCJGUkFNRVxuIi5nZXRCeXRlcygpKTsKLSAgICAgIGlmICgh
ZnJhbWUueXV2RnJhbWUpIHsKLSAgICAgICAgeXV2Q29udmVydGVyLmNvbnZlcnQob3V0cHV0RnJh
bWVCdWZmZXIsIG91dHB1dEZpbGVXaWR0aCwgb3V0cHV0RmlsZUhlaWdodCwgb3V0cHV0RmlsZVdp
ZHRoLAotICAgICAgICAgICAgZnJhbWUudGV4dHVyZUlkLCB0ZXhNYXRyaXgpOwotCi0gICAgICAg
IGludCBzdHJpZGUgPSBvdXRwdXRGaWxlV2lkdGg7Ci0gICAgICAgIGJ5dGVbXSBkYXRhID0gb3V0
cHV0RnJhbWVCdWZmZXIuYXJyYXkoKTsKLSAgICAgICAgaW50IG9mZnNldCA9IG91dHB1dEZyYW1l
QnVmZmVyLmFycmF5T2Zmc2V0KCk7Ci0KLSAgICAgICAgLy8gV3JpdGUgWQotICAgICAgICB2aWRl
b091dEZpbGUud3JpdGUoZGF0YSwgb2Zmc2V0LCBvdXRwdXRGaWxlV2lkdGggKiBvdXRwdXRGaWxl
SGVpZ2h0KTsKLQotICAgICAgICAvLyBXcml0ZSBVCi0gICAgICAgIGZvciAoaW50IHIgPSBvdXRw
dXRGaWxlSGVpZ2h0OyByIDwgb3V0cHV0RmlsZUhlaWdodCAqIDMgLyAyOyArK3IpIHsKLSAgICAg
ICAgICB2aWRlb091dEZpbGUud3JpdGUoZGF0YSwgb2Zmc2V0ICsgciAqIHN0cmlkZSwgc3RyaWRl
IC8gMik7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXcml0ZSBWCi0gICAgICAgIGZvciAoaW50
IHIgPSBvdXRwdXRGaWxlSGVpZ2h0OyByIDwgb3V0cHV0RmlsZUhlaWdodCAqIDMgLyAyOyArK3Ip
IHsKLSAgICAgICAgICB2aWRlb091dEZpbGUud3JpdGUoZGF0YSwgb2Zmc2V0ICsgciAqIHN0cmlk
ZSArIHN0cmlkZSAvIDIsIHN0cmlkZSAvIDIpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2Ugewot
ICAgICAgICBuYXRpdmVJNDIwU2NhbGUoZnJhbWUueXV2UGxhbmVzWzBdLCBmcmFtZS55dXZTdHJp
ZGVzWzBdLCBmcmFtZS55dXZQbGFuZXNbMV0sCi0gICAgICAgICAgICBmcmFtZS55dXZTdHJpZGVz
WzFdLCBmcmFtZS55dXZQbGFuZXNbMl0sIGZyYW1lLnl1dlN0cmlkZXNbMl0sIGZyYW1lLndpZHRo
LCBmcmFtZS5oZWlnaHQsCi0gICAgICAgICAgICBvdXRwdXRGcmFtZUJ1ZmZlciwgb3V0cHV0Rmls
ZVdpZHRoLCBvdXRwdXRGaWxlSGVpZ2h0KTsKLSAgICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKAot
ICAgICAgICAgICAgb3V0cHV0RnJhbWVCdWZmZXIuYXJyYXkoKSwgb3V0cHV0RnJhbWVCdWZmZXIu
YXJyYXlPZmZzZXQoKSwgb3V0cHV0RnJhbWVTaXplKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChJ
T0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHdyaXRlIHRv
IGZpbGUgZm9yIHZpZGVvIG91dCIpOwotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
ZSk7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25l
KGZyYW1lKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUmVsZWFzZSBhbGwgcmVzb3VyY2Vz
LiBBbGwgYWxyZWFkeSBwb3N0ZWQgZnJhbWVzIHdpbGwgYmUgcmVuZGVyZWQgZmlyc3QuCi0gICAq
LwotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGNs
ZWFudXBCYXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIHJlbmRlclRocmVhZEhh
bmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICB2aWRlb091dEZpbGUuY2xv
c2UoKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgIExvZ2dp
bmcuZChUQUcsICJFcnJvciBjbG9zaW5nIG91dHB1dCB2aWRlbyBmaWxlIik7Ci0gICAgICAgIH0K
LSAgICAgICAgeXV2Q29udmVydGVyLnJlbGVhc2UoKTsKLSAgICAgICAgZWdsQmFzZS5yZWxlYXNl
KCk7Ci0gICAgICAgIHJlbmRlclRocmVhZC5xdWl0KCk7Ci0gICAgICAgIGNsZWFudXBCYXJyaWVy
LmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0pOwotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5p
bnRlcnJ1cHRpYmx5KGNsZWFudXBCYXJyaWVyKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgbmF0
aXZlIHZvaWQgbmF0aXZlSTQyMFNjYWxlKEJ5dGVCdWZmZXIgc3JjWSwgaW50IHN0cmlkZVksIEJ5
dGVCdWZmZXIgc3JjVSwKLSAgICAgIGludCBzdHJpZGVVLCBCeXRlQnVmZmVyIHNyY1YsIGludCBz
dHJpZGVWLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEJ5dGVCdWZmZXIgZHN0LAotICAgICAgaW50
IGRzdFdpZHRoLCBpbnQgZHN0SGVpZ2h0KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlk
ZW9SZW5kZXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5k
ZXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVu
ZGVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1MCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVy
OwotCi0vKioKLSAqIEphdmEgdmVyc2lvbiBvZiBWaWRlb1NpbmtJbnRlcmZhY2UuICBJbiBhZGRp
dGlvbiB0byBhbGxvd2luZyBjbGllbnRzIHRvCi0gKiBkZWZpbmUgdGhlaXIgb3duIHJlbmRlcmlu
ZyBiZWhhdmlvciAoYnkgcGFzc2luZyBpbiBhIENhbGxiYWNrcyBvYmplY3QpLCB0aGlzCi0gKiBj
bGFzcyBhbHNvIHByb3ZpZGVzIGEgY3JlYXRlR3VpKCkgbWV0aG9kIGZvciBjcmVhdGluZyBhIEdV
SS1yZW5kZXJpbmcgd2luZG93Ci0gKiBvbiB2YXJpb3VzIHBsYXRmb3Jtcy4KLSAqLwotcHVibGlj
IGNsYXNzIFZpZGVvUmVuZGVyZXIgewotICAvKioKLSAgICogSmF2YSB2ZXJzaW9uIG9mIHdlYnJ0
Yzo6VmlkZW9GcmFtZS4gRnJhbWVzIGFyZSBvbmx5IGNvbnN0cnVjdGVkIGZyb20gbmF0aXZlIGNv
ZGUgYW5kIHRlc3QKLSAgICogY29kZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSTQy
MEZyYW1lIHsKLSAgICBwdWJsaWMgZmluYWwgaW50IHdpZHRoOwotICAgIHB1YmxpYyBmaW5hbCBp
bnQgaGVpZ2h0OwotICAgIHB1YmxpYyBmaW5hbCBpbnRbXSB5dXZTdHJpZGVzOwotICAgIHB1Ymxp
YyBCeXRlQnVmZmVyW10geXV2UGxhbmVzOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHl1dkZy
YW1lOwotICAgIC8vIE1hdHJpeCB0aGF0IHRyYW5zZm9ybXMgc3RhbmRhcmQgY29vcmRpbmF0ZXMg
dG8gdGhlaXIgcHJvcGVyIHNhbXBsaW5nIGxvY2F0aW9ucyBpbgotICAgIC8vIHRoZSB0ZXh0dXJl
LiBUaGlzIHRyYW5zZm9ybSBjb21wZW5zYXRlcyBmb3IgYW55IHByb3BlcnRpZXMgb2YgdGhlIHZp
ZGVvIHNvdXJjZSB0aGF0Ci0gICAgLy8gY2F1c2UgaXQgdG8gYXBwZWFyIGRpZmZlcmVudCBmcm9t
IGEgbm9ybWFsaXplZCB0ZXh0dXJlLiBUaGlzIG1hdHJpeCBkb2VzIG5vdCB0YWtlCi0gICAgLy8g
fHJvdGF0aW9uRGVncmVlfCBpbnRvIGFjY291bnQuCi0gICAgcHVibGljIGZpbmFsIGZsb2F0W10g
c2FtcGxpbmdNYXRyaXg7Ci0gICAgcHVibGljIGludCB0ZXh0dXJlSWQ7Ci0gICAgLy8gRnJhbWUg
cG9pbnRlciBpbiBDKysuCi0gICAgcHJpdmF0ZSBsb25nIG5hdGl2ZUZyYW1lUG9pbnRlcjsKLQot
ICAgIC8vIHJvdGF0aW9uRGVncmVlIGlzIHRoZSBkZWdyZWUgdGhhdCB0aGUgZnJhbWUgbXVzdCBi
ZSByb3RhdGVkIGNsb2Nrd2lzZWx5Ci0gICAgLy8gdG8gYmUgcmVuZGVyZWQgY29ycmVjdGx5Lgot
ICAgIHB1YmxpYyBpbnQgcm90YXRpb25EZWdyZWU7Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1
Y3QgYSBmcmFtZSBvZiB0aGUgZ2l2ZW4gZGltZW5zaW9ucyB3aXRoIHRoZSBzcGVjaWZpZWQgcGxh
bmFyIGRhdGEuCi0gICAgICovCi0gICAgSTQyMEZyYW1lKGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IHJvdGF0aW9uRGVncmVlLCBpbnRbXSB5dXZTdHJpZGVzLCBCeXRlQnVmZmVyW10geXV2UGxh
bmVzLAotICAgICAgICBsb25nIG5hdGl2ZUZyYW1lUG9pbnRlcikgewotICAgICAgdGhpcy53aWR0
aCA9IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLnl1dlN0
cmlkZXMgPSB5dXZTdHJpZGVzOwotICAgICAgdGhpcy55dXZQbGFuZXMgPSB5dXZQbGFuZXM7Ci0g
ICAgICB0aGlzLnl1dkZyYW1lID0gdHJ1ZTsKLSAgICAgIHRoaXMucm90YXRpb25EZWdyZWUgPSBy
b3RhdGlvbkRlZ3JlZTsKLSAgICAgIHRoaXMubmF0aXZlRnJhbWVQb2ludGVyID0gbmF0aXZlRnJh
bWVQb2ludGVyOwotICAgICAgaWYgKHJvdGF0aW9uRGVncmVlICUgOTAgIT0gMCkgewotICAgICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSb3RhdGlvbiBkZWdyZWUgbm90
IG11bHRpcGxlIG9mIDkwOiAiICsgcm90YXRpb25EZWdyZWUpOwotICAgICAgfQotICAgICAgLy8g
VGhlIGNvbnZlbnRpb24gaW4gV2ViUlRDIGlzIHRoYXQgdGhlIGZpcnN0IGVsZW1lbnQgaW4gYSBC
eXRlQnVmZmVyIGNvcnJlc3BvbmRzIHRvIHRoZQotICAgICAgLy8gdG9wLWxlZnQgY29ybmVyIG9m
IHRoZSBpbWFnZSwgYnV0IGluIGdsVGV4SW1hZ2UyRCgpIHRoZSBmaXJzdCBlbGVtZW50IGNvcnJl
c3BvbmRzIHRvIHRoZQotICAgICAgLy8gYm90dG9tLWxlZnQgY29ybmVyLiBUaGlzIGRpc2NyZXBh
bmN5IGlzIGNvcnJlY3RlZCBieSBzZXR0aW5nIGEgdmVydGljYWwgZmxpcCBhcyBzYW1wbGluZwot
ICAgICAgLy8gbWF0cml4LgotICAgICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgICAgc2FtcGxp
bmdNYXRyaXggPSBuZXcgZmxvYXRbXSB7Ci0gICAgICAgICAgMSwgIDAsIDAsIDAsCi0gICAgICAg
ICAgMCwgLTEsIDAsIDAsCi0gICAgICAgICAgMCwgIDAsIDEsIDAsCi0gICAgICAgICAgMCwgIDEs
IDAsIDF9OwotICAgICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogQ29uc3RydWN0IGEgdGV4dHVyZSBmcmFtZSBvZiB0aGUgZ2l2ZW4gZGltZW5zaW9ucyB3aXRo
IGRhdGEgaW4gU3VyZmFjZVRleHR1cmUKLSAgICAgKi8KLSAgICBJNDIwRnJhbWUoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb25EZWdyZWUsIGludCB0ZXh0dXJlSWQsIGZsb2F0W10g
c2FtcGxpbmdNYXRyaXgsCi0gICAgICAgIGxvbmcgbmF0aXZlRnJhbWVQb2ludGVyKSB7Ci0gICAg
ICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAg
IHRoaXMueXV2U3RyaWRlcyA9IG51bGw7Ci0gICAgICB0aGlzLnl1dlBsYW5lcyA9IG51bGw7Ci0g
ICAgICB0aGlzLnNhbXBsaW5nTWF0cml4ID0gc2FtcGxpbmdNYXRyaXg7Ci0gICAgICB0aGlzLnRl
eHR1cmVJZCA9IHRleHR1cmVJZDsKLSAgICAgIHRoaXMueXV2RnJhbWUgPSBmYWxzZTsKLSAgICAg
IHRoaXMucm90YXRpb25EZWdyZWUgPSByb3RhdGlvbkRlZ3JlZTsKLSAgICAgIHRoaXMubmF0aXZl
RnJhbWVQb2ludGVyID0gbmF0aXZlRnJhbWVQb2ludGVyOwotICAgICAgaWYgKHJvdGF0aW9uRGVn
cmVlICUgOTAgIT0gMCkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uKCJSb3RhdGlvbiBkZWdyZWUgbm90IG11bHRpcGxlIG9mIDkwOiAiICsgcm90YXRpb25EZWdy
ZWUpOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgcm90YXRlZFdpZHRoKCkgewot
ICAgICAgcmV0dXJuIChyb3RhdGlvbkRlZ3JlZSAlIDE4MCA9PSAwKSA/IHdpZHRoIDogaGVpZ2h0
OwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgcm90YXRlZEhlaWdodCgpIHsKLSAgICAgIHJldHVy
biAocm90YXRpb25EZWdyZWUgJSAxODAgPT0gMCkgPyBoZWlnaHQgOiB3aWR0aDsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0
dXJuIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIjoiICsgeXV2U3RyaWRlc1swXSArICI6IiArIHl1
dlN0cmlkZXNbMV0gKyAiOiIgKyB5dXZTdHJpZGVzWzJdOwotICAgIH0KLSAgfQotCi0gIC8vIEhl
bHBlciBuYXRpdmUgZnVuY3Rpb24gdG8gZG8gYSB2aWRlbyBmcmFtZSBwbGFuZSBjb3B5aW5nLgot
ICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUNvcHlQbGFuZSgKLSAgICAgIEJ5dGVC
dWZmZXIgc3JjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzcmNTdHJpZGUsIEJ5dGVCdWZm
ZXIgZHN0LCBpbnQgZHN0U3RyaWRlKTsKLQotICAvKiogVGhlIHJlYWwgbWVhdCBvZiBWaWRlb1Np
bmtJbnRlcmZhY2UuICovCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIENhbGxiYWNrcyB7Ci0g
ICAgLy8gfGZyYW1lfCBtaWdodCBoYXZlIHBlbmRpbmcgcm90YXRpb24gYW5kIGltcGxlbWVudGF0
aW9uIG9mIENhbGxiYWNrcwotICAgIC8vIHNob3VsZCBoYW5kbGUgdGhhdCBieSBhcHBseWluZyBy
b3RhdGlvbiBkdXJpbmcgcmVuZGVyaW5nLiBUaGUgY2FsbGVlCi0gICAgLy8gaXMgcmVzcG9uc2li
bGUgZm9yIHNpZ25hbGluZyB3aGVuIGl0IGlzIGRvbmUgd2l0aCB8ZnJhbWV8IGJ5IGNhbGxpbmcK
LSAgICAvLyByZW5kZXJGcmFtZURvbmUoZnJhbWUpLgotICAgIHB1YmxpYyB2b2lkIHJlbmRlckZy
YW1lKEk0MjBGcmFtZSBmcmFtZSk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBtdXN0IGJlIGNh
bGxlZCBhZnRlciBldmVyeSByZW5kZXJGcmFtZSgpIHRvIHJlbGVhc2UgdGhlIGZyYW1lLgotICAg
Ki8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlbmRlckZyYW1lRG9uZShJNDIwRnJhbWUgZnJhbWUp
IHsKLSAgICBmcmFtZS55dXZQbGFuZXMgPSBudWxsOwotICAgIGZyYW1lLnRleHR1cmVJZCA9IDA7
Ci0gICAgaWYgKGZyYW1lLm5hdGl2ZUZyYW1lUG9pbnRlciAhPSAwKSB7Ci0gICAgICByZWxlYXNl
TmF0aXZlRnJhbWUoZnJhbWUubmF0aXZlRnJhbWVQb2ludGVyKTsKLSAgICAgIGZyYW1lLm5hdGl2
ZUZyYW1lUG9pbnRlciA9IDA7Ci0gICAgfQotICB9Ci0KLSAgbG9uZyBuYXRpdmVWaWRlb1JlbmRl
cmVyOwotCi0gIHB1YmxpYyBWaWRlb1JlbmRlcmVyKENhbGxiYWNrcyBjYWxsYmFja3MpIHsKLSAg
ICBuYXRpdmVWaWRlb1JlbmRlcmVyID0gbmF0aXZlV3JhcFZpZGVvUmVuZGVyZXIoY2FsbGJhY2tz
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaWYgKG5hdGl2ZVZpZGVv
UmVuZGVyZXIgPT0gMCkgewotICAgICAgLy8gQWxyZWFkeSBkaXNwb3NlZC4KLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBmcmVlV3JhcHBlZFZpZGVvUmVuZGVyZXIobmF0aXZlVmlkZW9SZW5k
ZXJlcik7Ci0gICAgbmF0aXZlVmlkZW9SZW5kZXJlciA9IDA7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVXcmFwVmlkZW9SZW5kZXJlcihDYWxsYmFja3MgY2FsbGJh
Y2tzKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZVdyYXBwZWRWaWRlb1JlbmRl
cmVyKGxvbmcgbmF0aXZlVmlkZW9SZW5kZXJlcik7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2
b2lkIHJlbGVhc2VOYXRpdmVGcmFtZShsb25nIG5hdGl2ZUZyYW1lUG9pbnRlcik7Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXJHdWkuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXJHdWkuamF2YQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyR3VpLmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2MjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyLkk0MjBGcmFtZTsKLQotaW1wb3J0
IGFuZHJvaWQuYW5ub3RhdGlvbi5TdXBwcmVzc0xpbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGlj
cy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5v
cGVuZ2wuRUdMMTQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJv
aWQub3BlbmdsLkdMU3VyZmFjZVZpZXc7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Owot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotCi1pbXBvcnQgamF2
YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTDEwOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRp
dGlvbi5raHJvbm9zLmVnbC5FR0xDb25maWc7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmto
cm9ub3MuZWdsLkVHTENvbnRleHQ7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3Mu
b3BlbmdsZXMuR0wxMDsKLQotLyoqCi0gKiBFZmZpY2llbnRseSByZW5kZXJzIFlVViBmcmFtZXMg
dXNpbmcgdGhlIEdQVSBmb3IgQ1NDLgotICogQ2xpZW50cyB3aWxsIHdhbnQgZmlyc3QgdG8gY2Fs
bCBzZXRWaWV3KCkgdG8gcGFzcyBHTFN1cmZhY2VWaWV3Ci0gKiBhbmQgdGhlbiBmb3IgZWFjaCB2
aWRlbyBzdHJlYW0gZWl0aGVyIGNyZWF0ZSBpbnN0YW5jZSBvZiBWaWRlb1JlbmRlcmVyIHVzaW5n
Ci0gKiBjcmVhdGVHdWkoKSBjYWxsIG9yIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGludGVyZmFj
ZSB1c2luZyBjcmVhdGUoKSBjYWxsLgotICogT25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIGNsYXNz
IGNhbiBiZSBjcmVhdGVkLgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9SZW5kZXJlckd1aSBpbXBs
ZW1lbnRzIEdMU3VyZmFjZVZpZXcuUmVuZGVyZXIgewotICAvLyB8aW5zdGFuY2V8LCB8aW5zdGFu
Y2Uuc3VyZmFjZXwsIHxlZ2xDb250ZXh0fCwgYW5kIHxlZ2xDb250ZXh0UmVhZHl8IGFyZSBzeW5j
aHJvbml6ZWQgb24KLSAgLy8gfFZpZGVvUmVuZGVyZXJHdWkuY2xhc3N8LgotICBwcml2YXRlIHN0
YXRpYyBWaWRlb1JlbmRlcmVyR3VpIGluc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMg
UnVubmFibGUgZWdsQ29udGV4dFJlYWR5ID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFRBRyA9ICJWaWRlb1JlbmRlcmVyR3VpIjsKLSAgcHJpdmF0ZSBHTFN1cmZhY2VWaWV3
IHN1cmZhY2U7Ci0gIHByaXZhdGUgc3RhdGljIEVnbEJhc2UuQ29udGV4dCBlZ2xDb250ZXh0ID0g
bnVsbDsKLSAgLy8gSW5kaWNhdGVzIGlmIFN1cmZhY2VWaWV3LlJlbmRlcmVyLm9uU3VyZmFjZUNy
ZWF0ZWQgd2FzIGNhbGxlZC4KLSAgLy8gSWYgdHJ1ZSB0aGVuIGZvciBldmVyeSBuZXdseSBjcmVh
dGVkIHl1diBpbWFnZSByZW5kZXJlciBjcmVhdGVUZXh0dXJlKCkKLSAgLy8gc2hvdWxkIGJlIGNh
bGxlZC4gVGhlIHZhcmlhYmxlIGlzIGFjY2Vzc2VkIG9uIG11bHRpcGxlIHRocmVhZHMgYW5kCi0g
IC8vIGFsbCBhY2Nlc3NlcyBhcmUgc3luY2hyb25pemVkIG9uIHl1dkltYWdlUmVuZGVyZXJzJyBv
YmplY3QgbG9jay4KLSAgcHJpdmF0ZSBib29sZWFuIG9uU3VyZmFjZUNyZWF0ZWRDYWxsZWQ7Ci0g
IHByaXZhdGUgaW50IHNjcmVlbldpZHRoOwotICBwcml2YXRlIGludCBzY3JlZW5IZWlnaHQ7Ci0g
IC8vIExpc3Qgb2YgeXV2IHJlbmRlcmVycy4KLSAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8WXV2
SW1hZ2VSZW5kZXJlcj4geXV2SW1hZ2VSZW5kZXJlcnM7Ci0gIC8vIFJlbmRlciBhbmQgZHJhdyB0
aHJlYWRzLgotICBwcml2YXRlIHN0YXRpYyBUaHJlYWQgcmVuZGVyRnJhbWVUaHJlYWQ7Ci0gIHBy
aXZhdGUgc3RhdGljIFRocmVhZCBkcmF3VGhyZWFkOwotCi0gIHByaXZhdGUgVmlkZW9SZW5kZXJl
ckd1aShHTFN1cmZhY2VWaWV3IHN1cmZhY2UpIHsKLSAgICB0aGlzLnN1cmZhY2UgPSBzdXJmYWNl
OwotICAgIC8vIENyZWF0ZSBhbiBPcGVuR0wgRVMgMi4wIGNvbnRleHQuCi0gICAgc3VyZmFjZS5z
ZXRQcmVzZXJ2ZUVHTENvbnRleHRPblBhdXNlKHRydWUpOwotICAgIHN1cmZhY2Uuc2V0RUdMQ29u
dGV4dENsaWVudFZlcnNpb24oMik7Ci0gICAgc3VyZmFjZS5zZXRSZW5kZXJlcih0aGlzKTsKLSAg
ICBzdXJmYWNlLnNldFJlbmRlck1vZGUoR0xTdXJmYWNlVmlldy5SRU5ERVJNT0RFX1dIRU5fRElS
VFkpOwotCi0gICAgeXV2SW1hZ2VSZW5kZXJlcnMgPSBuZXcgQXJyYXlMaXN0PFl1dkltYWdlUmVu
ZGVyZXI+KCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgdXNlZCB0byBkaXNwbGF5IHN0cmVh
bSBvZiBZVVY0MjAgZnJhbWVzIGF0IHBhcnRpY3VsYXIgbG9jYXRpb24KLSAgICogb24gYSBzY3Jl
ZW4uIE5ldyB2aWRlbyBmcmFtZXMgYXJlIHNlbnQgdG8gZGlzcGxheSB1c2luZyByZW5kZXJGcmFt
ZSgpCi0gICAqIGNhbGwuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBZdXZJbWFnZVJl
bmRlcmVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICAgIC8vIHxzdXJm
YWNlfCBpcyBzeW5jaHJvbml6ZWQgb24gfHRoaXN8LgotICAgIHByaXZhdGUgR0xTdXJmYWNlVmll
dyBzdXJmYWNlOwotICAgIHByaXZhdGUgaW50IGlkOwotICAgIC8vIFRPRE8obWFnamVkKTogRGVs
ZXRlIEdMIHJlc291cmNlcyBpbiByZWxlYXNlKCkuIE11c3QgYmUgc3luY2hyb25pemVkIHdpdGgg
ZHJhdygpLiBXZSBhcmUKLSAgICAvLyBjdXJyZW50bHkgbGVha2luZyByZXNvdXJjZXMgdG8gYXZv
aWQgYSByYXJlIGNyYXNoIGluIHJlbGVhc2UoKSB3aGVyZSB0aGUgRUdMQ29udGV4dCBoYXMKLSAg
ICAvLyBiZWNvbWUgaW52YWxpZCBiZWZvcmVoYW5kLgotICAgIHByaXZhdGUgaW50W10geXV2VGV4
dHVyZXMgPSB7MCwgMCwgMH07Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZW5kZXJlckNvbW1vbi5ZdXZV
cGxvYWRlciB5dXZVcGxvYWRlciA9IG5ldyBSZW5kZXJlckNvbW1vbi5ZdXZVcGxvYWRlcigpOwot
ICAgIHByaXZhdGUgZmluYWwgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyOwotICAgIC8v
IFJlc291cmNlcyBmb3IgbWFraW5nIGEgZGVlcCBjb3B5IG9mIGluY29taW5nIE9FUyB0ZXh0dXJl
IGZyYW1lLgotICAgIHByaXZhdGUgR2xUZXh0dXJlRnJhbWVCdWZmZXIgdGV4dHVyZUNvcHk7Ci0K
LSAgICAvLyBQZW5kaW5nIGZyYW1lIHRvIHJlbmRlci4gU2VydmVzIGFzIGEgcXVldWUgd2l0aCBz
aXplIDEuIHxwZW5kaW5nRnJhbWV8IGlzIGFjY2Vzc2VkIGJ5IHR3bwotICAgIC8vIHRocmVhZHMg
LSBmcmFtZXMgYXJlIHJlY2VpdmVkIGluIHJlbmRlckZyYW1lKCkgYW5kIGNvbnN1bWVkIGluIGRy
YXcoKS4gRnJhbWVzIGFyZSBkcm9wcGVkIGluCi0gICAgLy8gcmVuZGVyRnJhbWUoKSBpZiB0aGUg
cHJldmlvdXMgZnJhbWUgaGFzIG5vdCBiZWVuIHJlbmRlcmVkIHlldC4KLSAgICBwcml2YXRlIEk0
MjBGcmFtZSBwZW5kaW5nRnJhbWU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgcGVuZGluZ0Zy
YW1lTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICAvLyBUeXBlIG9mIHZpZGVvIGZyYW1lIHVzZWQg
Zm9yIHJlY2VudCBmcmFtZSByZW5kZXJpbmcuCi0gICAgcHJpdmF0ZSBzdGF0aWMgZW51bSBSZW5k
ZXJlclR5cGUgeyBSRU5ERVJFUl9ZVVYsIFJFTkRFUkVSX1RFWFRVUkUgfQotCi0gICAgcHJpdmF0
ZSBSZW5kZXJlclR5cGUgcmVuZGVyZXJUeXBlOwotICAgIHByaXZhdGUgUmVuZGVyZXJDb21tb24u
U2NhbGluZ1R5cGUgc2NhbGluZ1R5cGU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIG1pcnJvcjsKLSAg
ICBwcml2YXRlIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzOwot
ICAgIC8vIEZsYWcgaWYgcmVuZGVyRnJhbWUoKSB3YXMgZXZlciBjYWxsZWQuCi0gICAgYm9vbGVh
biBzZWVuRnJhbWU7Ci0gICAgLy8gVG90YWwgbnVtYmVyIG9mIHZpZGVvIGZyYW1lcyByZWNlaXZl
ZCBpbiByZW5kZXJGcmFtZSgpIGNhbGwuCi0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVjZWl2ZWQ7
Ci0gICAgLy8gTnVtYmVyIG9mIHZpZGVvIGZyYW1lcyBkcm9wcGVkIGJ5IHJlbmRlckZyYW1lKCkg
YmVjYXVzZSBwcmV2aW91cwotICAgIC8vIGZyYW1lIGhhcyBub3QgYmVlbiByZW5kZXJlZCB5ZXQu
Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzRHJvcHBlZDsKLSAgICAvLyBOdW1iZXIgb2YgcmVuZGVy
ZWQgdmlkZW8gZnJhbWVzLgotICAgIHByaXZhdGUgaW50IGZyYW1lc1JlbmRlcmVkOwotICAgIC8v
IFRpbWUgaW4gbnMgd2hlbiB0aGUgZmlyc3QgdmlkZW8gZnJhbWUgd2FzIHJlbmRlcmVkLgotICAg
IHByaXZhdGUgbG9uZyBzdGFydFRpbWVOcyA9IC0xOwotICAgIC8vIFRpbWUgaW4gbnMgc3BlbnQg
aW4gZHJhdygpIGZ1bmN0aW9uLgotICAgIHByaXZhdGUgbG9uZyBkcmF3VGltZU5zOwotICAgIC8v
IFRpbWUgaW4gbnMgc3BlbnQgaW4gZHJhdygpIGNvcHlpbmcgcmVzb3VyY2VzIGZyb20gfHBlbmRp
bmdGcmFtZXwgLSBpbmNsdWRpbmcgdXBsb2FkaW5nIGZyYW1lCi0gICAgLy8gZGF0YSB0byByZW5k
ZXJpbmcgcGxhbmVzLgotICAgIHByaXZhdGUgbG9uZyBjb3B5VGltZU5zOwotICAgIC8vIFRoZSBh
bGxvd2VkIHZpZXcgYXJlYSBpbiBwZXJjZW50YWdlIG9mIHNjcmVlbiBzaXplLgotICAgIHByaXZh
dGUgZmluYWwgUmVjdCBsYXlvdXRJblBlcmNlbnRhZ2U7Ci0gICAgLy8gVGhlIGFjdHVhbCB2aWV3
IGFyZWEgaW4gcGl4ZWxzLiBJdCBpcyBhIGNlbnRlcmVkIHN1YnJlY3RhbmdsZSBvZiB0aGUgcmVj
dGFuZ2xlIGRlZmluZWQgYnkKLSAgICAvLyB8bGF5b3V0SW5QZXJjZW50YWdlfC4KLSAgICBwcml2
YXRlIGZpbmFsIFJlY3QgZGlzcGxheUxheW91dCA9IG5ldyBSZWN0KCk7Ci0gICAgLy8gQ2FjaGVk
IGxheW91dCB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgsIGNhbGN1bGF0ZWQgZnJvbSBjdXJyZW50IGxh
eW91dCBwYXJhbWV0ZXJzLgotICAgIHByaXZhdGUgZmxvYXRbXSBsYXlvdXRNYXRyaXg7Ci0gICAg
Ly8gRmxhZyBpZiBsYXlvdXQgdHJhbnNmb3JtYXRpb24gbWF0cml4IHVwZGF0ZSBpcyBuZWVkZWQu
Ci0gICAgcHJpdmF0ZSBib29sZWFuIHVwZGF0ZUxheW91dFByb3BlcnRpZXM7Ci0gICAgLy8gTGF5
b3V0IHByb3BlcnRpZXMgdXBkYXRlIGxvY2suIEd1YXJkcyB8dXBkYXRlTGF5b3V0UHJvcGVydGll
c3wsIHxzY3JlZW5XaWR0aHwsCi0gICAgLy8gfHNjcmVlbkhlaWdodHwsIHx2aWRlb1dpZHRofCwg
fHZpZGVvSGVpZ2h0fCwgfHJvdGF0aW9uRGVncmVlfCwgfHNjYWxpbmdUeXBlfCwgYW5kIHxtaXJy
b3J8LgotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IHVwZGF0ZUxheW91dExvY2sgPSBuZXcgT2Jq
ZWN0KCk7Ci0gICAgLy8gVGV4dHVyZSBzYW1wbGluZyBtYXRyaXguCi0gICAgcHJpdmF0ZSBmbG9h
dFtdIHJvdGF0ZWRTYW1wbGluZ01hdHJpeDsKLSAgICAvLyBWaWV3cG9ydCBkaW1lbnNpb25zLgot
ICAgIHByaXZhdGUgaW50IHNjcmVlbldpZHRoOwotICAgIHByaXZhdGUgaW50IHNjcmVlbkhlaWdo
dDsKLSAgICAvLyBWaWRlbyBkaW1lbnNpb24uCi0gICAgcHJpdmF0ZSBpbnQgdmlkZW9XaWR0aDsK
LSAgICBwcml2YXRlIGludCB2aWRlb0hlaWdodDsKLQotICAgIC8vIFRoaXMgaXMgdGhlIGRlZ3Jl
ZSB0aGF0IHRoZSBmcmFtZSBzaG91bGQgYmUgcm90YXRlZCBjbG9ja3dpc2VseSB0byBoYXZlCi0g
ICAgLy8gaXQgcmVuZGVyZWQgdXAgcmlnaHQuCi0gICAgcHJpdmF0ZSBpbnQgcm90YXRpb25EZWdy
ZWU7Ci0KLSAgICBwcml2YXRlIFl1dkltYWdlUmVuZGVyZXIoR0xTdXJmYWNlVmlldyBzdXJmYWNl
LCBpbnQgaWQsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICBS
ZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IsIFJl
bmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcikgewotICAgICAgTG9nZ2luZy5kKFRBRywgIll1
dkltYWdlUmVuZGVyZXIuQ3JlYXRlIGlkOiAiICsgaWQpOwotICAgICAgdGhpcy5zdXJmYWNlID0g
c3VyZmFjZTsKLSAgICAgIHRoaXMuaWQgPSBpZDsKLSAgICAgIHRoaXMuc2NhbGluZ1R5cGUgPSBz
Y2FsaW5nVHlwZTsKLSAgICAgIHRoaXMubWlycm9yID0gbWlycm9yOwotICAgICAgdGhpcy5kcmF3
ZXIgPSBkcmF3ZXI7Ci0gICAgICBsYXlvdXRJblBlcmNlbnRhZ2UgPSBuZXcgUmVjdCh4LCB5LCBN
YXRoLm1pbigxMDAsIHggKyB3aWR0aCksIE1hdGgubWluKDEwMCwgeSArIGhlaWdodCkpOwotICAg
ICAgdXBkYXRlTGF5b3V0UHJvcGVydGllcyA9IGZhbHNlOwotICAgICAgcm90YXRpb25EZWdyZWUg
PSAwOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHsKLSAg
ICAgIHNlZW5GcmFtZSA9IGZhbHNlOwotICAgIH0KLQotICAgIHByaXZhdGUgc3luY2hyb25pemVk
IHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgIHN1cmZhY2UgPSBudWxsOwotICAgICAgZHJhd2VyLnJl
bGVhc2UoKTsKLSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0ZyYW1lTG9jaykgewotICAgICAg
ICBpZiAocGVuZGluZ0ZyYW1lICE9IG51bGwpIHsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJl
bmRlckZyYW1lRG9uZShwZW5kaW5nRnJhbWUpOwotICAgICAgICAgIHBlbmRpbmdGcmFtZSA9IG51
bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY3JlYXRl
VGV4dHVyZXMoKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiICBZdXZJbWFnZVJlbmRlcmVyLmNy
ZWF0ZVRleHR1cmVzICIgKyBpZCArICIgb24gR0wgdGhyZWFkOiIKLSAgICAgICAgICAgICAgKyBU
aHJlYWQuY3VycmVudFRocmVhZCgpLmdldElkKCkpOwotCi0gICAgICAvLyBHZW5lcmF0ZSAzIHRl
eHR1cmUgaWRzIGZvciBZL1UvViBhbmQgcGxhY2UgdGhlbSBpbnRvIHx5dXZUZXh0dXJlc3wuCi0g
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICB5dXZUZXh0dXJlc1tp
XSA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgICAg
fQotICAgICAgLy8gR2VuZXJhdGUgdGV4dHVyZSBhbmQgZnJhbWVidWZmZXIgZm9yIG9mZnNjcmVl
biB0ZXh0dXJlIGNvcHkuCi0gICAgICB0ZXh0dXJlQ29weSA9IG5ldyBHbFRleHR1cmVGcmFtZUJ1
ZmZlcihHTEVTMjAuR0xfUkdCKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgdXBkYXRlTGF5
b3V0TWF0cml4KCkgewotICAgICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlvdXRMb2NrKSB7Ci0g
ICAgICAgIGlmICghdXBkYXRlTGF5b3V0UHJvcGVydGllcykgewotICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAvLyBJbml0aWFsaXplIHRvIG1heGltdW0gYWxsb3dlZCBhcmVh
LiBSb3VuZCB0byBpbnRlZ2VyIGNvb3JkaW5hdGVzIGlud2FyZHMgdGhlIGxheW91dAotICAgICAg
ICAvLyBib3VuZGluZyBib3ggKGNlaWwgbGVmdC90b3AgYW5kIGZsb29yIHJpZ2h0L2JvdHRvbSkg
dG8gbm90IGJyZWFrIGNvbnN0cmFpbnRzLgotICAgICAgICBkaXNwbGF5TGF5b3V0LnNldCgoc2Ny
ZWVuV2lkdGggKiBsYXlvdXRJblBlcmNlbnRhZ2UubGVmdCArIDk5KSAvIDEwMCwKLSAgICAgICAg
ICAgIChzY3JlZW5IZWlnaHQgKiBsYXlvdXRJblBlcmNlbnRhZ2UudG9wICsgOTkpIC8gMTAwLAot
ICAgICAgICAgICAgKHNjcmVlbldpZHRoICogbGF5b3V0SW5QZXJjZW50YWdlLnJpZ2h0KSAvIDEw
MCwKLSAgICAgICAgICAgIChzY3JlZW5IZWlnaHQgKiBsYXlvdXRJblBlcmNlbnRhZ2UuYm90dG9t
KSAvIDEwMCk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsgIi4gQWRqdXN0
VGV4dHVyZUNvb3Jkcy4gQWxsb3dlZCBkaXNwbGF5IHNpemU6ICIKLSAgICAgICAgICAgICAgICAr
IGRpc3BsYXlMYXlvdXQud2lkdGgoKSArICIgeCAiICsgZGlzcGxheUxheW91dC5oZWlnaHQoKSAr
ICIuIFZpZGVvOiAiICsgdmlkZW9XaWR0aAotICAgICAgICAgICAgICAgICsgIiB4ICIgKyB2aWRl
b0hlaWdodCArICIuIFJvdGF0aW9uOiAiICsgcm90YXRpb25EZWdyZWUgKyAiLiBNaXJyb3I6ICIg
KyBtaXJyb3IpOwotICAgICAgICBmaW5hbCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gKHJvdGF0
aW9uRGVncmVlICUgMTgwID09IDApCi0gICAgICAgICAgICA/IChmbG9hdCkgdmlkZW9XaWR0aCAv
IHZpZGVvSGVpZ2h0Ci0gICAgICAgICAgICA6IChmbG9hdCkgdmlkZW9IZWlnaHQgLyB2aWRlb1dp
ZHRoOwotICAgICAgICAvLyBBZGp1c3QgZGlzcGxheSBzaXplIGJhc2VkIG9uIHxzY2FsaW5nVHlw
ZXwuCi0gICAgICAgIGZpbmFsIFBvaW50IGRpc3BsYXlTaXplID0gUmVuZGVyZXJDb21tb24uZ2V0
RGlzcGxheVNpemUoCi0gICAgICAgICAgICBzY2FsaW5nVHlwZSwgdmlkZW9Bc3BlY3RSYXRpbywg
ZGlzcGxheUxheW91dC53aWR0aCgpLCBkaXNwbGF5TGF5b3V0LmhlaWdodCgpKTsKLSAgICAgICAg
ZGlzcGxheUxheW91dC5pbnNldCgoZGlzcGxheUxheW91dC53aWR0aCgpIC0gZGlzcGxheVNpemUu
eCkgLyAyLAotICAgICAgICAgICAgKGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkgLSBkaXNwbGF5U2l6
ZS55KSAvIDIpOwotICAgICAgICBMb2dnaW5nLmQoVEFHLAotICAgICAgICAgICAgIiAgQWRqdXN0
ZWQgZGlzcGxheSBzaXplOiAiICsgZGlzcGxheUxheW91dC53aWR0aCgpICsgIiB4ICIgKyBkaXNw
bGF5TGF5b3V0LmhlaWdodCgpKTsKLSAgICAgICAgbGF5b3V0TWF0cml4ID0gUmVuZGVyZXJDb21t
b24uZ2V0TGF5b3V0TWF0cml4KAotICAgICAgICAgICAgbWlycm9yLCB2aWRlb0FzcGVjdFJhdGlv
LCAoZmxvYXQpIGRpc3BsYXlMYXlvdXQud2lkdGgoKSAvIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkp
OwotICAgICAgICB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzID0gZmFsc2U7Ci0gICAgICAgIExvZ2dp
bmcuZChUQUcsICIgIEFkanVzdFRleHR1cmVDb29yZHMgZG9uZSIpOwotICAgICAgfQotICAgIH0K
LQotICAgIHByaXZhdGUgdm9pZCBkcmF3KCkgewotICAgICAgaWYgKCFzZWVuRnJhbWUpIHsKLSAg
ICAgICAgLy8gTm8gZnJhbWUgcmVjZWl2ZWQgeWV0IC0gbm90aGluZyB0byByZW5kZXIuCi0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7
Ci0KLSAgICAgIGZpbmFsIGJvb2xlYW4gaXNOZXdGcmFtZTsKLSAgICAgIHN5bmNocm9uaXplZCAo
cGVuZGluZ0ZyYW1lTG9jaykgewotICAgICAgICBpc05ld0ZyYW1lID0gKHBlbmRpbmdGcmFtZSAh
PSBudWxsKTsKLSAgICAgICAgaWYgKGlzTmV3RnJhbWUgJiYgc3RhcnRUaW1lTnMgPT0gLTEpIHsK
LSAgICAgICAgICBzdGFydFRpbWVOcyA9IG5vdzsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChp
c05ld0ZyYW1lKSB7Ci0gICAgICAgICAgcm90YXRlZFNhbXBsaW5nTWF0cml4ID0gUmVuZGVyZXJD
b21tb24ucm90YXRlVGV4dHVyZU1hdHJpeCgKLSAgICAgICAgICAgICAgcGVuZGluZ0ZyYW1lLnNh
bXBsaW5nTWF0cml4LCBwZW5kaW5nRnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgICAgICAgIGlm
IChwZW5kaW5nRnJhbWUueXV2RnJhbWUpIHsKLSAgICAgICAgICAgIHJlbmRlcmVyVHlwZSA9IFJl
bmRlcmVyVHlwZS5SRU5ERVJFUl9ZVVY7Ci0gICAgICAgICAgICB5dXZVcGxvYWRlci51cGxvYWRZ
dXZEYXRhKHl1dlRleHR1cmVzLCBwZW5kaW5nRnJhbWUud2lkdGgsIHBlbmRpbmdGcmFtZS5oZWln
aHQsCi0gICAgICAgICAgICAgICAgcGVuZGluZ0ZyYW1lLnl1dlN0cmlkZXMsIHBlbmRpbmdGcmFt
ZS55dXZQbGFuZXMpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZW5kZXJlclR5
cGUgPSBSZW5kZXJlclR5cGUuUkVOREVSRVJfVEVYVFVSRTsKLSAgICAgICAgICAgIC8vIEV4dGVy
bmFsIHRleHR1cmUgcmVuZGVyaW5nLiBNYWtlIGEgZGVlcCBjb3B5IG9mIHRoZSBleHRlcm5hbCB0
ZXh0dXJlLgotICAgICAgICAgICAgLy8gUmVhbGxvY2F0ZSBvZmZzY3JlZW4gdGV4dHVyZSBpZiBu
ZWNlc3NhcnkuCi0gICAgICAgICAgICB0ZXh0dXJlQ29weS5zZXRTaXplKHBlbmRpbmdGcmFtZS5y
b3RhdGVkV2lkdGgoKSwgcGVuZGluZ0ZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7Ci0KLSAgICAgICAg
ICAgIC8vIEJpbmQgb3VyIG9mZnNjcmVlbiBmcmFtZWJ1ZmZlci4KLSAgICAgICAgICAgIEdMRVMy
MC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIHRleHR1cmVDb3B5Lmdl
dEZyYW1lQnVmZmVySWQoKSk7Ci0gICAgICAgICAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3Io
ImdsQmluZEZyYW1lYnVmZmVyIik7Ci0KLSAgICAgICAgICAgIC8vIENvcHkgdGhlIE9FUyB0ZXh0
dXJlIGNvbnRlbnQuIFRoaXMgd2lsbCBhbHNvIG5vcm1hbGl6ZSB0aGUgc2FtcGxpbmcgbWF0cml4
LgotICAgICAgICAgICAgZHJhd2VyLmRyYXdPZXMocGVuZGluZ0ZyYW1lLnRleHR1cmVJZCwgcm90
YXRlZFNhbXBsaW5nTWF0cml4LCB0ZXh0dXJlQ29weS5nZXRXaWR0aCgpLAotICAgICAgICAgICAg
ICAgIHRleHR1cmVDb3B5LmdldEhlaWdodCgpLCAwLCAwLCB0ZXh0dXJlQ29weS5nZXRXaWR0aCgp
LCB0ZXh0dXJlQ29weS5nZXRIZWlnaHQoKSk7Ci0gICAgICAgICAgICByb3RhdGVkU2FtcGxpbmdN
YXRyaXggPSBSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpOwotCi0gICAgICAgICAgICAv
LyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAgICAgICAgICAgIEdMRVMyMC5nbEJpbmRG
cmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAgICAgICAgR0xFUzIw
LmdsRmluaXNoKCk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGNvcHlUaW1lTnMgKz0gKFN5c3Rl
bS5uYW5vVGltZSgpIC0gbm93KTsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1l
RG9uZShwZW5kaW5nRnJhbWUpOwotICAgICAgICAgIHBlbmRpbmdGcmFtZSA9IG51bGw7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLQotICAgICAgdXBkYXRlTGF5b3V0TWF0cml4KCk7Ci0gICAgICBmaW5h
bCBmbG9hdFtdIHRleE1hdHJpeCA9Ci0gICAgICAgICAgUmVuZGVyZXJDb21tb24ubXVsdGlwbHlN
YXRyaWNlcyhyb3RhdGVkU2FtcGxpbmdNYXRyaXgsIGxheW91dE1hdHJpeCk7Ci0gICAgICAvLyBP
cGVuR0wgZGVmYXVsdHMgdG8gbG93ZXIgbGVmdCBvcmlnaW4gLSBmbGlwIHZpZXdwb3J0IHBvc2l0
aW9uIHZlcnRpY2FsbHkuCi0gICAgICBmaW5hbCBpbnQgdmlld3BvcnRZID0gc2NyZWVuSGVpZ2h0
IC0gZGlzcGxheUxheW91dC5ib3R0b207Ci0gICAgICBpZiAocmVuZGVyZXJUeXBlID09IFJlbmRl
cmVyVHlwZS5SRU5ERVJFUl9ZVVYpIHsKLSAgICAgICAgZHJhd2VyLmRyYXdZdXYoeXV2VGV4dHVy
ZXMsIHRleE1hdHJpeCwgdmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIGRpc3BsYXlMYXlvdXQubGVm
dCwKLSAgICAgICAgICAgIHZpZXdwb3J0WSwgZGlzcGxheUxheW91dC53aWR0aCgpLCBkaXNwbGF5
TGF5b3V0LmhlaWdodCgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGRyYXdlci5kcmF3Umdi
KHRleHR1cmVDb3B5LmdldFRleHR1cmVJZCgpLCB0ZXhNYXRyaXgsIHZpZGVvV2lkdGgsIHZpZGVv
SGVpZ2h0LAotICAgICAgICAgICAgZGlzcGxheUxheW91dC5sZWZ0LCB2aWV3cG9ydFksIGRpc3Bs
YXlMYXlvdXQud2lkdGgoKSwgZGlzcGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICB9Ci0KLSAg
ICAgIGlmIChpc05ld0ZyYW1lKSB7Ci0gICAgICAgIGZyYW1lc1JlbmRlcmVkKys7Ci0gICAgICAg
IGRyYXdUaW1lTnMgKz0gKFN5c3RlbS5uYW5vVGltZSgpIC0gbm93KTsKLSAgICAgICAgaWYgKChm
cmFtZXNSZW5kZXJlZCAlIDMwMCkgPT0gMCkgewotICAgICAgICAgIGxvZ1N0YXRpc3RpY3MoKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBsb2dTdGF0aXN0
aWNzKCkgewotICAgICAgbG9uZyB0aW1lU2luY2VGaXJzdEZyYW1lTnMgPSBTeXN0ZW0ubmFub1Rp
bWUoKSAtIHN0YXJ0VGltZU5zOwotICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAi
LiBUeXBlOiAiICsgcmVuZGVyZXJUeXBlICsgIi4gRnJhbWVzIHJlY2VpdmVkOiAiCi0gICAgICAg
ICAgICAgICsgZnJhbWVzUmVjZWl2ZWQgKyAiLiBEcm9wcGVkOiAiICsgZnJhbWVzRHJvcHBlZCAr
ICIuIFJlbmRlcmVkOiAiICsgZnJhbWVzUmVuZGVyZWQpOwotICAgICAgaWYgKGZyYW1lc1JlY2Vp
dmVkID4gMCAmJiBmcmFtZXNSZW5kZXJlZCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywg
IkR1cmF0aW9uOiAiICsgKGludCkgKHRpbWVTaW5jZUZpcnN0RnJhbWVOcyAvIDFlNikgKyAiIG1z
LiBGUFM6ICIKLSAgICAgICAgICAgICAgICArIGZyYW1lc1JlbmRlcmVkICogMWU5IC8gdGltZVNp
bmNlRmlyc3RGcmFtZU5zKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkRyYXcgdGltZTogIiAr
IChpbnQpIChkcmF3VGltZU5zIC8gKDEwMDAgKiBmcmFtZXNSZW5kZXJlZCkpCi0gICAgICAgICAg
ICAgICAgKyAiIHVzLiBDb3B5IHRpbWU6ICIgKyAoaW50KSAoY29weVRpbWVOcyAvICgxMDAwICog
ZnJhbWVzUmVjZWl2ZWQpKSArICIgdXMiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMg
dm9pZCBzZXRTY3JlZW5TaXplKGZpbmFsIGludCBzY3JlZW5XaWR0aCwgZmluYWwgaW50IHNjcmVl
bkhlaWdodCkgewotICAgICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlvdXRMb2NrKSB7Ci0gICAg
ICAgIGlmIChzY3JlZW5XaWR0aCA9PSB0aGlzLnNjcmVlbldpZHRoICYmIHNjcmVlbkhlaWdodCA9
PSB0aGlzLnNjcmVlbkhlaWdodCkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
ICAgICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCArICIuIFl1dkltYWdlUmVuZGVyZXIuc2V0
U2NyZWVuU2l6ZTogIiArIHNjcmVlbldpZHRoICsgIiB4ICIKLSAgICAgICAgICAgICAgICArIHNj
cmVlbkhlaWdodCk7Ci0gICAgICAgIHRoaXMuc2NyZWVuV2lkdGggPSBzY3JlZW5XaWR0aDsKLSAg
ICAgICAgdGhpcy5zY3JlZW5IZWlnaHQgPSBzY3JlZW5IZWlnaHQ7Ci0gICAgICAgIHVwZGF0ZUxh
eW91dFByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IHNldFBvc2l0aW9uKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAg
ICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3Ip
IHsKLSAgICAgIGZpbmFsIFJlY3QgbGF5b3V0SW5QZXJjZW50YWdlID0KLSAgICAgICAgICBuZXcg
UmVjdCh4LCB5LCBNYXRoLm1pbigxMDAsIHggKyB3aWR0aCksIE1hdGgubWluKDEwMCwgeSArIGhl
aWdodCkpOwotICAgICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlvdXRMb2NrKSB7Ci0gICAgICAg
IGlmIChsYXlvdXRJblBlcmNlbnRhZ2UuZXF1YWxzKHRoaXMubGF5b3V0SW5QZXJjZW50YWdlKSAm
JiBzY2FsaW5nVHlwZSA9PSB0aGlzLnNjYWxpbmdUeXBlCi0gICAgICAgICAgICAmJiBtaXJyb3Ig
PT0gdGhpcy5taXJyb3IpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
TG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBZdXZJbWFnZVJlbmRlcmVyLnNldFBvc2l0
aW9uOiAoIiArIHggKyAiLCAiICsgeSArICIpICIKLSAgICAgICAgICAgICAgICArIHdpZHRoICsg
IiB4ICIgKyBoZWlnaHQgKyAiLiBTY2FsaW5nOiAiICsgc2NhbGluZ1R5cGUgKyAiLiBNaXJyb3I6
ICIgKyBtaXJyb3IpOwotICAgICAgICB0aGlzLmxheW91dEluUGVyY2VudGFnZS5zZXQobGF5b3V0
SW5QZXJjZW50YWdlKTsKLSAgICAgICAgdGhpcy5zY2FsaW5nVHlwZSA9IHNjYWxpbmdUeXBlOwot
ICAgICAgICB0aGlzLm1pcnJvciA9IG1pcnJvcjsKLSAgICAgICAgdXBkYXRlTGF5b3V0UHJvcGVy
dGllcyA9IHRydWU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHNldFNpemUo
ZmluYWwgaW50IHZpZGVvV2lkdGgsIGZpbmFsIGludCB2aWRlb0hlaWdodCwgZmluYWwgaW50IHJv
dGF0aW9uKSB7Ci0gICAgICBpZiAodmlkZW9XaWR0aCA9PSB0aGlzLnZpZGVvV2lkdGggJiYgdmlk
ZW9IZWlnaHQgPT0gdGhpcy52aWRlb0hlaWdodAotICAgICAgICAgICYmIHJvdGF0aW9uID09IHJv
dGF0aW9uRGVncmVlKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlmIChyZW5k
ZXJlckV2ZW50cyAhPSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlk
ICsgIi4gUmVwb3J0aW5nIGZyYW1lIHJlc29sdXRpb24gY2hhbmdlZCB0byAiICsgdmlkZW9XaWR0
aCArICIgeCAiCi0gICAgICAgICAgICAgICAgKyB2aWRlb0hlaWdodCk7Ci0gICAgICAgIHJlbmRl
cmVyRXZlbnRzLm9uRnJhbWVSZXNvbHV0aW9uQ2hhbmdlZCh2aWRlb1dpZHRoLCB2aWRlb0hlaWdo
dCwgcm90YXRpb24pOwotICAgICAgfQotCi0gICAgICBzeW5jaHJvbml6ZWQgKHVwZGF0ZUxheW91
dExvY2spIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBZdXZJbWFn
ZVJlbmRlcmVyLnNldFNpemU6ICIgKyB2aWRlb1dpZHRoICsgIiB4ICIKLSAgICAgICAgICAgICAg
ICArIHZpZGVvSGVpZ2h0ICsgIiByb3RhdGlvbiAiICsgcm90YXRpb24pOwotCi0gICAgICAgIHRo
aXMudmlkZW9XaWR0aCA9IHZpZGVvV2lkdGg7Ci0gICAgICAgIHRoaXMudmlkZW9IZWlnaHQgPSB2
aWRlb0hlaWdodDsKLSAgICAgICAgcm90YXRpb25EZWdyZWUgPSByb3RhdGlvbjsKLSAgICAgICAg
dXBkYXRlTGF5b3V0UHJvcGVydGllcyA9IHRydWU7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICIg
IFl1dkltYWdlUmVuZGVyZXIuc2V0U2l6ZSBkb25lLiIpOwotICAgICAgfQotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW5kZXJGcmFtZShJNDIw
RnJhbWUgZnJhbWUpIHsKLSAgICAgIGlmIChzdXJmYWNlID09IG51bGwpIHsKLSAgICAgICAgLy8g
VGhpcyBvYmplY3QgaGFzIGJlZW4gcmVsZWFzZWQuCi0gICAgICAgIFZpZGVvUmVuZGVyZXIucmVu
ZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgaWYg
KHJlbmRlckZyYW1lVGhyZWFkID09IG51bGwpIHsKLSAgICAgICAgcmVuZGVyRnJhbWVUaHJlYWQg
PSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAgICAgfQotICAgICAgaWYgKCFzZWVuRnJhbWUg
JiYgcmVuZGVyZXJFdmVudHMgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSUQ6
ICIgKyBpZCArICIuIFJlcG9ydGluZyBmaXJzdCByZW5kZXJlZCBmcmFtZS4iKTsKLSAgICAgICAg
cmVuZGVyZXJFdmVudHMub25GaXJzdEZyYW1lUmVuZGVyZWQoKTsKLSAgICAgIH0KLSAgICAgIGZy
YW1lc1JlY2VpdmVkKys7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdGcmFtZUxvY2spIHsK
LSAgICAgICAgLy8gQ2hlY2sgaW5wdXQgZnJhbWUgcGFyYW1ldGVycy4KLSAgICAgICAgaWYgKGZy
YW1lLnl1dkZyYW1lKSB7Ci0gICAgICAgICAgaWYgKGZyYW1lLnl1dlN0cmlkZXNbMF0gPCBmcmFt
ZS53aWR0aCB8fCBmcmFtZS55dXZTdHJpZGVzWzFdIDwgZnJhbWUud2lkdGggLyAyCi0gICAgICAg
ICAgICAgIHx8IGZyYW1lLnl1dlN0cmlkZXNbMl0gPCBmcmFtZS53aWR0aCAvIDIpIHsKLSAgICAg
ICAgICAgIExvZ2dpbmcuZShUQUcsICJJbmNvcnJlY3Qgc3RyaWRlcyAiICsgZnJhbWUueXV2U3Ry
aWRlc1swXSArICIsICIgKyBmcmFtZS55dXZTdHJpZGVzWzFdCi0gICAgICAgICAgICAgICAgICAg
ICsgIiwgIiArIGZyYW1lLnl1dlN0cmlkZXNbMl0pOwotICAgICAgICAgICAgVmlkZW9SZW5kZXJl
ci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwZW5kaW5nRnJhbWUgIT0gbnVsbCkgewotICAg
ICAgICAgIC8vIFNraXAgcmVuZGVyaW5nIG9mIHRoaXMgZnJhbWUgaWYgcHJldmlvdXMgZnJhbWUg
d2FzIG5vdCByZW5kZXJlZCB5ZXQuCi0gICAgICAgICAgZnJhbWVzRHJvcHBlZCsrOwotICAgICAg
ICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgICBzZWVu
RnJhbWUgPSB0cnVlOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwZW5k
aW5nRnJhbWUgPSBmcmFtZTsKLSAgICAgIH0KLSAgICAgIHNldFNpemUoZnJhbWUud2lkdGgsIGZy
YW1lLmhlaWdodCwgZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgICAgc2VlbkZyYW1lID0gdHJ1
ZTsKLQotICAgICAgLy8gUmVxdWVzdCByZW5kZXJpbmcuCi0gICAgICBzdXJmYWNlLnJlcXVlc3RS
ZW5kZXIoKTsKLSAgICB9Ci0gIH0KLQotICAvKiogUGFzc2VzIEdMU3VyZmFjZVZpZXcgdG8gdmlk
ZW8gcmVuZGVyZXIuICovCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0Vmll
dyhHTFN1cmZhY2VWaWV3IHN1cmZhY2UsIFJ1bm5hYmxlIGVnbENvbnRleHRSZWFkeUNhbGxiYWNr
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkuc2V0VmlldyIpOwotICAg
IGluc3RhbmNlID0gbmV3IFZpZGVvUmVuZGVyZXJHdWkoc3VyZmFjZSk7Ci0gICAgZWdsQ29udGV4
dFJlYWR5ID0gZWdsQ29udGV4dFJlYWR5Q2FsbGJhY2s7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGlj
IHN5bmNocm9uaXplZCBFZ2xCYXNlLkNvbnRleHQgZ2V0RWdsQmFzZUNvbnRleHQoKSB7Ci0gICAg
cmV0dXJuIGVnbENvbnRleHQ7Ci0gIH0KLQotICAvKiogUmVsZWFzZXMgR0xTdXJmYWNlVmlldyB2
aWRlbyByZW5kZXJlci4gKi8KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBkaXNw
b3NlKCkgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3VpLmRpc3Bvc2UiKTsKLSAgICBz
eW5jaHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1
dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IGluc3RhbmNlLnl1dkltYWdlUmVuZGVy
ZXJzKSB7Ci0gICAgICAgIHl1dkltYWdlUmVuZGVyZXIucmVsZWFzZSgpOwotICAgICAgfQotICAg
ICAgaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMuY2xlYXIoKTsKLSAgICB9Ci0gICAgcmVuZGVy
RnJhbWVUaHJlYWQgPSBudWxsOwotICAgIGRyYXdUaHJlYWQgPSBudWxsOwotICAgIGluc3RhbmNl
LnN1cmZhY2UgPSBudWxsOwotICAgIGVnbENvbnRleHQgPSBudWxsOwotICAgIGVnbENvbnRleHRS
ZWFkeSA9IG51bGw7Ci0gICAgaW5zdGFuY2UgPSBudWxsOwotICB9Ci0KLSAgLyoqCi0gICAqIENy
ZWF0ZXMgVmlkZW9SZW5kZXJlciB3aXRoIHRvcCBsZWZ0IGNvcm5lciBhdCAoeCwgeSkgYW5kIHJl
c29sdXRpb24KLSAgICogKHdpZHRoLCBoZWlnaHQpLiBBbGwgcGFyYW1ldGVycyBhcmUgaW4gcGVy
Y2VudGFnZSBvZiBzY3JlZW4gcmVzb2x1dGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVmlk
ZW9SZW5kZXJlciBjcmVhdGVHdWkoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
Ci0gICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBt
aXJyb3IpIHRocm93cyBFeGNlcHRpb24gewotICAgIFl1dkltYWdlUmVuZGVyZXIgamF2YUd1aVJl
bmRlcmVyID0gY3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJyb3Ip
OwotICAgIHJldHVybiBuZXcgVmlkZW9SZW5kZXJlcihqYXZhR3VpUmVuZGVyZXIpOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBjcmVhdGVHdWlSZW5kZXJl
cigKLSAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5kZXJlckNv
bW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICByZXR1
cm4gY3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJyb3IpOwotICB9
Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3Mgd2l0aCB0b3Ag
bGVmdCBjb3JuZXIgYXQgKHgsIHkpIGFuZAotICAgKiByZXNvbHV0aW9uICh3aWR0aCwgaGVpZ2h0
KS4gQWxsIHBhcmFtZXRlcnMgYXJlIGluIHBlcmNlbnRhZ2Ugb2YKLSAgICogc2NyZWVuIHJlc29s
dXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBZdXZJbWFnZVJlbmRl
cmVyIGNyZWF0ZSgKLSAgICAgIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBS
ZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IpIHsK
LSAgICByZXR1cm4gY3JlYXRlKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJy
b3IsIG5ldyBHbFJlY3REcmF3ZXIoKSk7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBWaWRl
b1JlbmRlcmVyLkNhbGxiYWNrcyB3aXRoIHRvcCBsZWZ0IGNvcm5lciBhdCAoeCwgeSkgYW5kIHJl
c29sdXRpb24gKHdpZHRoLCBoZWlnaHQpLgotICAgKiBBbGwgcGFyYW1ldGVycyBhcmUgaW4gcGVy
Y2VudGFnZSBvZiBzY3JlZW4gcmVzb2x1dGlvbi4gVGhlIGN1c3RvbSB8ZHJhd2VyfCB3aWxsIGJl
IHVzZWQgZm9yCi0gICAqIGRyYXdpbmcgZnJhbWVzIG9uIHRoZSBFR0xTdXJmYWNlLiBUaGlzIGNs
YXNzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHJlbGVhc2UoKSBvbiB8ZHJhd2VyfC4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIFl1dkltYWdlUmVuZGVyZXIgY3JlYXRl
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgUmVuZGVyZXJDb21t
b24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yLCBSZW5kZXJlckNvbW1v
bi5HbERyYXdlciBkcmF3ZXIpIHsKLSAgICAvLyBDaGVjayBkaXNwbGF5IHJlZ2lvbiBwYXJhbWV0
ZXJzLgotICAgIGlmICh4IDwgMCB8fCB4ID4gMTAwIHx8IHkgPCAwIHx8IHkgPiAxMDAgfHwgd2lk
dGggPCAwIHx8IHdpZHRoID4gMTAwIHx8IGhlaWdodCA8IDAKLSAgICAgICAgfHwgaGVpZ2h0ID4g
MTAwIHx8IHggKyB3aWR0aCA+IDEwMCB8fCB5ICsgaGVpZ2h0ID4gMTAwKSB7Ci0gICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHdpbmRvdyBwYXJhbWV0ZXJzLiIpOwot
ICAgIH0KLQotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigiQXR0ZW1wdCB0byBjcmVhdGUgeXV2IHJlbmRlcmVyIGJlZm9yZSBzZXR0
aW5nIEdMU3VyZmFjZVZpZXciKTsKLSAgICB9Ci0gICAgZmluYWwgWXV2SW1hZ2VSZW5kZXJlciB5
dXZJbWFnZVJlbmRlcmVyID0gbmV3IFl1dkltYWdlUmVuZGVyZXIoaW5zdGFuY2Uuc3VyZmFjZSwK
LSAgICAgICAgaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMuc2l6ZSgpLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWlycm9yLCBkcmF3ZXIpOwotICAgIHN5bmNocm9uaXplZCAo
aW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGlmIChpbnN0YW5jZS5vblN1cmZh
Y2VDcmVhdGVkQ2FsbGVkKSB7Ci0gICAgICAgIC8vIG9uU3VyZmFjZUNyZWF0ZWQgaGFzIGFscmVh
ZHkgYmVlbiBjYWxsZWQgZm9yIFZpZGVvUmVuZGVyZXJHdWkgLQotICAgICAgICAvLyBuZWVkIHRv
IGNyZWF0ZSB0ZXh0dXJlIGZvciBuZXcgaW1hZ2UgYW5kIGFkZCBpbWFnZSB0byB0aGUKLSAgICAg
ICAgLy8gcmVuZGVyaW5nIGxpc3QuCi0gICAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGNvdW50
RG93bkxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgICAgICBpbnN0YW5jZS5zdXJm
YWNlLnF1ZXVlRXZlbnQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAg
ICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIu
Y3JlYXRlVGV4dHVyZXMoKTsKLSAgICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIuc2V0U2NyZWVu
U2l6ZShpbnN0YW5jZS5zY3JlZW5XaWR0aCwgaW5zdGFuY2Uuc2NyZWVuSGVpZ2h0KTsKLSAgICAg
ICAgICAgIGNvdW50RG93bkxhdGNoLmNvdW50RG93bigpOwotICAgICAgICAgIH0KLSAgICAgICAg
fSk7Ci0gICAgICAgIC8vIFdhaXQgZm9yIHRhc2sgY29tcGxldGlvbi4KLSAgICAgICAgdHJ5IHsK
LSAgICAgICAgICBjb3VudERvd25MYXRjaC5hd2FpdCgpOwotICAgICAgICB9IGNhdGNoIChJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIEFkZCB5dXYgcmVuZGVyZXIgdG8g
cmVuZGVyaW5nIGxpc3QuCi0gICAgICBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycy5hZGQoeXV2
SW1hZ2VSZW5kZXJlcik7Ci0gICAgfQotICAgIHJldHVybiB5dXZJbWFnZVJlbmRlcmVyOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCB1cGRhdGUoVmlkZW9SZW5kZXJl
ci5DYWxsYmFja3MgcmVuZGVyZXIsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLAotICAgICAgaW50
IGhlaWdodCwgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4g
bWlycm9yKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkudXBkYXRlIik7
Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKCJBdHRlbXB0IHRvIHVwZGF0ZSB5dXYgcmVuZGVyZXIgYmVmb3JlIHNldHRpbmcgR0xT
dXJmYWNlVmlldyIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdl
UmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJl
ciA6IGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIGlmICh5dXZJbWFnZVJl
bmRlcmVyID09IHJlbmRlcmVyKSB7Ci0gICAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5zZXRQb3Np
dGlvbih4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWlycm9yKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZv
aWQgc2V0UmVuZGVyZXJFdmVudHMoCi0gICAgICBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5k
ZXJlciwgUmVuZGVyZXJDb21tb24uUmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHMpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5zZXRSZW5kZXJlckV2ZW50cyIpOwot
ICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigiQXR0ZW1wdCB0byBzZXQgcmVuZGVyZXIgZXZlbnRzIGJlZm9yZSBzZXR0aW5nIEdMU3Vy
ZmFjZVZpZXciKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJl
bmRlcmVycykgewotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIg
OiBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICBpZiAoeXV2SW1hZ2VSZW5k
ZXJlciA9PSByZW5kZXJlcikgewotICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIucmVuZGVyZXJF
dmVudHMgPSByZW5kZXJlckV2ZW50czsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgcmVtb3ZlKFZpZGVvUmVuZGVyZXIu
Q2FsbGJhY2tzIHJlbmRlcmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJH
dWkucmVtb3ZlIik7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKCJBdHRlbXB0IHRvIHJlbW92ZSByZW5kZXJlciBiZWZvcmUgc2V0
dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoaW5zdGFuY2Uu
eXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZpbmFsIGludCBpbmRleCA9IGluc3RhbmNlLnl1
dkltYWdlUmVuZGVyZXJzLmluZGV4T2YocmVuZGVyZXIpOwotICAgICAgaWYgKGluZGV4ID09IC0x
KSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJDb3VsZG4ndCByZW1vdmUgcmVuZGVyZXIgKG5v
dCBwcmVzZW50IGluIGN1cnJlbnQgbGlzdCkiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlu
c3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzLnJlbW92ZShpbmRleCkucmVsZWFzZSgpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQo
VmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVuZGVyZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
VmlkZW9SZW5kZXJlckd1aS5yZXNldCIpOwotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQXR0ZW1wdCB0byByZXNldCByZW5kZXJl
ciBiZWZvcmUgc2V0dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXpl
ZCAoaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5k
ZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAg
ICAgICAgaWYgKHl1dkltYWdlUmVuZGVyZXIgPT0gcmVuZGVyZXIpIHsKLSAgICAgICAgICB5dXZJ
bWFnZVJlbmRlcmVyLnJlc2V0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZShUaHJlYWQgdGhyZWFkLCBTdHJp
bmcgdGhyZWFkTmFtZSkgewotICAgIGlmICh0aHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tU
cmFjZUVsZW1lbnRbXSBzdGFja1RyYWNlcyA9IHRocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAg
ICBpZiAoc3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCB0
aHJlYWROYW1lICsgIiBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVs
ZW1lbnQgc3RhY2tUcmFjZSA6IHN0YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRB
Rywgc3RhY2tUcmFjZS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgcHJpbnRTdGFja1RyYWNlcygp
IHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBwcmludFN0YWNrVHJhY2UocmVuZGVyRnJhbWVUaHJlYWQsICJSZW5kZXIgZnJhbWUgdGhyZWFk
Iik7Ci0gICAgcHJpbnRTdGFja1RyYWNlKGRyYXdUaHJlYWQsICJEcmF3IHRocmVhZCIpOwotICB9
Ci0KLSAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uU3VyZmFjZUNyZWF0ZWQoR0wxMCB1bnVzZWQsIEVHTENvbmZpZyBjb25maWcpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5vblN1cmZhY2VDcmVhdGVkIik7Ci0gICAg
Ly8gU3RvcmUgcmVuZGVyIEVHTCBjb250ZXh0LgotICAgIHN5bmNocm9uaXplZCAoVmlkZW9SZW5k
ZXJlckd1aS5jbGFzcykgewotICAgICAgaWYgKEVnbEJhc2UxNC5pc0VHTDE0U3VwcG9ydGVkKCkp
IHsKLSAgICAgICAgZWdsQ29udGV4dCA9IG5ldyBFZ2xCYXNlMTQuQ29udGV4dChFR0wxNC5lZ2xH
ZXRDdXJyZW50Q29udGV4dCgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGVnbENvbnRleHQg
PSBuZXcgRWdsQmFzZTEwLkNvbnRleHQoKChFR0wxMCkgRUdMQ29udGV4dC5nZXRFR0woKSkuZWds
R2V0Q3VycmVudENvbnRleHQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJW
aWRlb1JlbmRlcmVyR3VpIEVHTCBDb250ZXh0OiAiICsgZWdsQ29udGV4dCk7Ci0gICAgfQotCi0g
ICAgc3luY2hyb25pemVkICh5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgLy8gQ3JlYXRlIHRl
eHR1cmVzIGZvciBhbGwgaW1hZ2VzLgotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dklt
YWdlUmVuZGVyZXIgOiB5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICB5dXZJbWFnZVJlbmRl
cmVyLmNyZWF0ZVRleHR1cmVzKCk7Ci0gICAgICB9Ci0gICAgICBvblN1cmZhY2VDcmVhdGVkQ2Fs
bGVkID0gdHJ1ZTsKLSAgICB9Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJvblN1cmZh
Y2VDcmVhdGVkIGRvbmUiKTsKLSAgICBHTEVTMjAuZ2xQaXhlbFN0b3JlaShHTEVTMjAuR0xfVU5Q
QUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgR0xFUzIwLmdsQ2xlYXJDb2xvcigwLjE1ZiwgMC4xNWYs
IDAuMTVmLCAxLjBmKTsKLQotICAgIC8vIEZpcmUgRUdMIGNvbnRleHQgcmVhZHkgZXZlbnQuCi0g
ICAgc3luY2hyb25pemVkIChWaWRlb1JlbmRlcmVyR3VpLmNsYXNzKSB7Ci0gICAgICBpZiAoZWds
Q29udGV4dFJlYWR5ICE9IG51bGwpIHsKLSAgICAgICAgZWdsQ29udGV4dFJlYWR5LnJ1bigpOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN1cmZh
Y2VDaGFuZ2VkKEdMMTAgdW51c2VkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5vblN1cmZhY2VDaGFuZ2VkOiAiICsgd2lkdGgg
KyAiIHggIiArIGhlaWdodCArICIgICIpOwotICAgIHNjcmVlbldpZHRoID0gd2lkdGg7Ci0gICAg
c2NyZWVuSGVpZ2h0ID0gaGVpZ2h0OwotICAgIHN5bmNocm9uaXplZCAoeXV2SW1hZ2VSZW5kZXJl
cnMpIHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogeXV2
SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5zZXRTY3JlZW5TaXpl
KHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkRyYXdGcmFtZShHTDEwIHVudXNlZCkgewotICAgIGlm
IChkcmF3VGhyZWFkID09IG51bGwpIHsKLSAgICAgIGRyYXdUaHJlYWQgPSBUaHJlYWQuY3VycmVu
dFRocmVhZCgpOwotICAgIH0KLSAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCAwLCBzY3JlZW5XaWR0
aCwgc2NyZWVuSGVpZ2h0KTsKLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVG
RkVSX0JJVCk7Ci0gICAgc3luY2hyb25pemVkICh5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAg
Zm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiB5dXZJbWFnZVJlbmRlcmVy
cykgewotICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLmRyYXcoKTsKLSAgICAgIH0KLSAgICB9Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9Tb3VyY2UuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvU291cmNlLmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9Tb3VyY2UuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDMzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
LyoqCi0gKiBKYXZhIHdyYXBwZXIgb2YgbmF0aXZlIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlLgot
ICovCi1wdWJsaWMgY2xhc3MgVmlkZW9Tb3VyY2UgZXh0ZW5kcyBNZWRpYVNvdXJjZSB7Ci0gIHB1
YmxpYyBWaWRlb1NvdXJjZShsb25nIG5hdGl2ZVNvdXJjZSkgewotICAgIHN1cGVyKG5hdGl2ZVNv
dXJjZSk7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgY2F1
c2UgZnJhbWVzIHRvIGJlIHNjYWxlZCBkb3duIHRvIHRoZSByZXF1ZXN0ZWQgcmVzb2x1dGlvbi4g
QWxzbywKLSAgICogZnJhbWVzIHdpbGwgYmUgY3JvcHBlZCB0byBtYXRjaCB0aGUgcmVxdWVzdGVk
IGFzcGVjdCByYXRpbywgYW5kIGZyYW1lcyB3aWxsIGJlIGRyb3BwZWQgdG8gbWF0Y2gKLSAgICog
dGhlIHJlcXVlc3RlZCBmcHMuIFRoZSByZXF1ZXN0ZWQgYXNwZWN0IHJhdGlvIGlzIG9yaWVudGF0
aW9uIGFnbm9zdGljIGFuZCB3aWxsIGJlIGFkanVzdGVkIHRvCi0gICAqIG1haW50YWluIHRoZSBp
bnB1dCBvcmllbnRhdGlvbiwgc28gaXQgZG9lc24ndCBtYXR0ZXIgaWYgZS5nLiAxMjgweDcyMCBv
ciA3MjB4MTI4MCBpcyByZXF1ZXN0ZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGFwdE91dHB1
dEZvcm1hdChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcHMpIHsKLSAgICBuYXRpdmVBZGFw
dE91dHB1dEZvcm1hdChuYXRpdmVTb3VyY2UsIHdpZHRoLCBoZWlnaHQsIGZwcyk7Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVBZGFwdE91dHB1dEZvcm1hdCgKLSAg
ICAgIGxvbmcgbmF0aXZlU291cmNlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcHMpOwot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvVmlkZW9UcmFjay5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDggKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
amF2YS51dGlsLkxpbmtlZExpc3Q7Ci0KLS8qKiBKYXZhIHZlcnNpb24gb2YgVmlkZW9UcmFja0lu
dGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBWaWRlb1RyYWNrIGV4dGVuZHMgTWVkaWFTdHJlYW1U
cmFjayB7Ci0gIHByaXZhdGUgZmluYWwgTGlua2VkTGlzdDxWaWRlb1JlbmRlcmVyPiByZW5kZXJl
cnMgPSBuZXcgTGlua2VkTGlzdDxWaWRlb1JlbmRlcmVyPigpOwotCi0gIHB1YmxpYyBWaWRlb1Ry
YWNrKGxvbmcgbmF0aXZlVHJhY2spIHsKLSAgICBzdXBlcihuYXRpdmVUcmFjayk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCBhZGRSZW5kZXJlcihWaWRlb1JlbmRlcmVyIHJlbmRlcmVyKSB7Ci0gICAg
cmVuZGVyZXJzLmFkZChyZW5kZXJlcik7Ci0gICAgbmF0aXZlQWRkUmVuZGVyZXIobmF0aXZlVHJh
Y2ssIHJlbmRlcmVyLm5hdGl2ZVZpZGVvUmVuZGVyZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
cmVtb3ZlUmVuZGVyZXIoVmlkZW9SZW5kZXJlciByZW5kZXJlcikgewotICAgIGlmICghcmVuZGVy
ZXJzLnJlbW92ZShyZW5kZXJlcikpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbmF0aXZl
UmVtb3ZlUmVuZGVyZXIobmF0aXZlVHJhY2ssIHJlbmRlcmVyLm5hdGl2ZVZpZGVvUmVuZGVyZXIp
OwotICAgIHJlbmRlcmVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2Uo
KSB7Ci0gICAgd2hpbGUgKCFyZW5kZXJlcnMuaXNFbXB0eSgpKSB7Ci0gICAgICByZW1vdmVSZW5k
ZXJlcihyZW5kZXJlcnMuZ2V0Rmlyc3QoKSk7Ci0gICAgfQotICAgIHN1cGVyLmRpc3Bvc2UoKTsK
LSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBuYXRpdmVUcmFj
ayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlQWRkUmVuZGVyZXIobG9u
ZyBuYXRpdmVUcmFjaywgbG9uZyBuYXRpdmVSZW5kZXJlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIHZvaWQgbmF0aXZlUmVtb3ZlUmVuZGVyZXIobG9uZyBuYXRpdmVUcmFjaywgbG9uZyBu
YXRpdmVSZW5kZXJlcik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1l1dkNvbnZlcnRlci5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvWXV2Q29udmVydGVyLmphdmEJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvWXV2Q29udmVydGVyLmphdmEJKG5v
bmV4aXN0ZW50KQpAQCAtMSwyNTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2Fn
ZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzExRXh0OwotaW1wb3J0
IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1w
b3J0IGphdmEubmlvLkZsb2F0QnVmZmVyOwotCi0vKioKLSAqIENsYXNzIGZvciBjb252ZXJ0aW5n
IE9FUyB0ZXh0dXJlcyB0byBhIFlVViBCeXRlQnVmZmVyLiBJdCBzaG91bGQgYmUgY29uc3RydWN0
ZWQgb24gYSB0aHJlYWQgd2l0aAotICogYW4gYWN0aXZlIEVHTCBjb250ZXh0LCBhbmQgb25seSBi
ZSB1c2VkIGZyb20gdGhhdCB0aHJlYWQuCi0gKi8KLWNsYXNzIFl1dkNvbnZlcnRlciB7Ci0gIC8v
IFZlcnRleCBjb29yZGluYXRlcyBpbiBOb3JtYWxpemVkIERldmljZSBDb29yZGluYXRlcywgaS5l
LgotICAvLyAoLTEsIC0xKSBpcyBib3R0b20tbGVmdCBhbmQgKDEsIDEpIGlzIHRvcC1yaWdodC4K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgRmxvYXRCdWZmZXIgREVWSUNFX1JFQ1RBTkdMRSA9IEds
VXRpbC5jcmVhdGVGbG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0gICAgICAtMS4wZiwgLTEuMGYs
IC8vIEJvdHRvbSBsZWZ0LgotICAgICAgMS4wZiwgLTEuMGYsIC8vIEJvdHRvbSByaWdodC4KLSAg
ICAgIC0xLjBmLCAxLjBmLCAvLyBUb3AgbGVmdC4KLSAgICAgIDEuMGYsIDEuMGYsIC8vIFRvcCBy
aWdodC4KLSAgfSk7Ci0KLSAgLy8gVGV4dHVyZSBjb29yZGluYXRlcyAtICgwLCAwKSBpcyBib3R0
b20tbGVmdCBhbmQgKDEsIDEpIGlzIHRvcC1yaWdodC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
RmxvYXRCdWZmZXIgVEVYVFVSRV9SRUNUQU5HTEUgPSBHbFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIo
bmV3IGZsb2F0W10gewotICAgICAgMC4wZiwgMC4wZiwgLy8gQm90dG9tIGxlZnQuCi0gICAgICAx
LjBmLCAwLjBmLCAvLyBCb3R0b20gcmlnaHQuCi0gICAgICAwLjBmLCAxLjBmLCAvLyBUb3AgbGVm
dC4KLSAgICAgIDEuMGYsIDEuMGYgLy8gVG9wIHJpZ2h0LgotICB9KTsKLQotICAvLyBjbGFuZy1m
b3JtYXQgb2ZmCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJURVhfU0hBREVSID0K
LSAgICAgICAgInZhcnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJhdHRyaWJ1dGUg
dmVjNCBpbl9wb3M7XG4iCi0gICAgICArICJhdHRyaWJ1dGUgdmVjNCBpbl90YztcbiIKLSAgICAg
ICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBtYXQ0IHRleE1hdHJpeDtcbiIKLSAgICAgICsgIlxu
IgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgKyAiICAgIGdsX1Bvc2l0aW9uID0g
aW5fcG9zO1xuIgotICAgICAgKyAiICAgIGludGVycF90YyA9ICh0ZXhNYXRyaXggKiBpbl90Yyku
eHk7XG4iCi0gICAgICArICJ9XG4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBG
UkFHTUVOVF9TSEFERVIgPQotICAgICAgICAiI2V4dGVuc2lvbiBHTF9PRVNfRUdMX2ltYWdlX2V4
dGVybmFsIDogcmVxdWlyZVxuIgotICAgICAgKyAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4i
Ci0gICAgICArICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAg
ICArICJ1bmlmb3JtIHNhbXBsZXJFeHRlcm5hbE9FUyBvZXNUZXg7XG4iCi0gICAgICAvLyBEaWZm
ZXJlbmNlIGluIHRleHR1cmUgY29vcmRpbmF0ZSBjb3JyZXNwb25kaW5nIHRvIG9uZQotICAgICAg
Ly8gc3ViLXBpeGVsIGluIHRoZSB4IGRpcmVjdGlvbi4KLSAgICAgICsgInVuaWZvcm0gdmVjMiB4
VW5pdDtcbiIKLSAgICAgIC8vIENvbG9yIGNvbnZlcnNpb24gY29lZmZpY2llbnRzLCBpbmNsdWRp
bmcgY29uc3RhbnQgdGVybQotICAgICAgKyAidW5pZm9ybSB2ZWM0IGNvZWZmcztcbiIKLSAgICAg
ICsgIlxuIgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgLy8gU2luY2UgdGhlIGFs
cGhhIHJlYWQgZnJvbSB0aGUgdGV4dHVyZSBpcyBhbHdheXMgMSwgdGhpcyBjb3VsZAotICAgICAg
Ly8gYmUgd3JpdHRlbiBhcyBhIG1hdDQgeCB2ZWM0IG11bHRpcGx5LiBIb3dldmVyLCB0aGF0IHNl
ZW1zIHRvCi0gICAgICAvLyBnaXZlIGEgd29yc2UgZnJhbWVyYXRlLCBwb3NzaWJseSBiZWNhdXNl
IHRoZSBhZGRpdGlvbmFsCi0gICAgICAvLyBtdWx0aXBsaWVzIGJ5IDEuMCBjb25zdW1lIHJlc291
cmNlcy4gVE9ETyhuaXNzZSk6IENvdWxkIGFsc28KLSAgICAgIC8vIHRyeSB0byBkbyBpdCBhcyBh
IHZlYzMgeCBtYXQzeDQsIGZvbGxvd2VkIGJ5IGFuIGFkZCBpbiBvZiBhCi0gICAgICAvLyBjb25z
dGFudCB2ZWN0b3IuCi0gICAgICArICIgIGdsX0ZyYWdDb2xvci5yID0gY29lZmZzLmEgKyBkb3Qo
Y29lZmZzLnJnYixcbiIKLSAgICAgICsgIiAgICAgIHRleHR1cmUyRChvZXNUZXgsIGludGVycF90
YyAtIDEuNSAqIHhVbml0KS5yZ2IpO1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IuZyA9IGNv
ZWZmcy5hICsgZG90KGNvZWZmcy5yZ2IsXG4iCi0gICAgICArICIgICAgICB0ZXh0dXJlMkQob2Vz
VGV4LCBpbnRlcnBfdGMgLSAwLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAgICAgICsgIiAgZ2xfRnJh
Z0NvbG9yLmIgPSBjb2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgotICAgICAgKyAiICAgICAg
dGV4dHVyZTJEKG9lc1RleCwgaW50ZXJwX3RjICsgMC41ICogeFVuaXQpLnJnYik7XG4iCi0gICAg
ICArICIgIGdsX0ZyYWdDb2xvci5hID0gY29lZmZzLmEgKyBkb3QoY29lZmZzLnJnYixcbiIKLSAg
ICAgICsgIiAgICAgIHRleHR1cmUyRChvZXNUZXgsIGludGVycF90YyArIDEuNSAqIHhVbml0KS5y
Z2IpO1xuIgotICAgICAgKyAifVxuIjsKLSAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgcHJpdmF0
ZSBmaW5hbCBpbnQgZnJhbWVCdWZmZXJJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVUZXh0
dXJlSWQ7Ci0gIHByaXZhdGUgZmluYWwgR2xTaGFkZXIgc2hhZGVyOwotICBwcml2YXRlIGZpbmFs
IGludCB0ZXhNYXRyaXhMb2M7Ci0gIHByaXZhdGUgZmluYWwgaW50IHhVbml0TG9jOwotICBwcml2
YXRlIGZpbmFsIGludCBjb2VmZnNMb2M7Ci0gIHByaXZhdGUgZmluYWwgVGhyZWFkVXRpbHMuVGhy
ZWFkQ2hlY2tlciB0aHJlYWRDaGVja2VyID0gbmV3IFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIo
KTsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVCdWZmZXJXaWR0aDsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVC
dWZmZXJIZWlnaHQ7Ci0gIHByaXZhdGUgYm9vbGVhbiByZWxlYXNlZCA9IGZhbHNlOwotCi0gIC8q
KgotICAgKiBUaGlzIGNsYXNzIHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBvbiBhIHRocmVhZCB0aGF0
IGhhcyBhbiBhY3RpdmUgRUdMIGNvbnRleHQuCi0gICAqLwotICBwdWJsaWMgWXV2Q29udmVydGVy
KCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBmcmFt
ZVRleHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQp
OwotICAgIHRoaXMuZnJhbWVCdWZmZXJXaWR0aCA9IDA7Ci0gICAgdGhpcy5mcmFtZUJ1ZmZlckhl
aWdodCA9IDA7Ci0KLSAgICAvLyBDcmVhdGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBiaW5kIGl0
LgotICAgIGZpbmFsIGludCBmcmFtZUJ1ZmZlcnNbXSA9IG5ldyBpbnRbMV07Ci0gICAgR0xFUzIw
LmdsR2VuRnJhbWVidWZmZXJzKDEsIGZyYW1lQnVmZmVycywgMCk7Ci0gICAgZnJhbWVCdWZmZXJJ
ZCA9IGZyYW1lQnVmZmVyc1swXTsKLSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIw
LkdMX0ZSQU1FQlVGRkVSLCBmcmFtZUJ1ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMy
RXJyb3IoIkdlbmVyYXRlIGZyYW1lYnVmZmVyIik7Ci0KLSAgICAvLyBBdHRhY2ggdGhlIHRleHR1
cmUgdG8gdGhlIGZyYW1lYnVmZmVyIGFzIGNvbG9yIGF0dGFjaG1lbnQuCi0gICAgR0xFUzIwLmds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBHTEVTMjAuR0xfQ09M
T1JfQVRUQUNITUVOVDAsCi0gICAgICAgIEdMRVMyMC5HTF9URVhUVVJFXzJELCBmcmFtZVRleHR1
cmVJZCwgMCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJBdHRhY2ggdGV4dHVyZSB0
byBmcmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gUmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIuCi0g
ICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7Ci0K
LSAgICBzaGFkZXIgPSBuZXcgR2xTaGFkZXIoVkVSVEVYX1NIQURFUiwgRlJBR01FTlRfU0hBREVS
KTsKLSAgICBzaGFkZXIudXNlUHJvZ3JhbSgpOwotICAgIHRleE1hdHJpeExvYyA9IHNoYWRlci5n
ZXRVbmlmb3JtTG9jYXRpb24oInRleE1hdHJpeCIpOwotICAgIHhVbml0TG9jID0gc2hhZGVyLmdl
dFVuaWZvcm1Mb2NhdGlvbigieFVuaXQiKTsKLSAgICBjb2VmZnNMb2MgPSBzaGFkZXIuZ2V0VW5p
Zm9ybUxvY2F0aW9uKCJjb2VmZnMiKTsKLSAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdl
dFVuaWZvcm1Mb2NhdGlvbigib2VzVGV4IiksIDApOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJF
cnJvcigiSW5pdGlhbGl6ZSBmcmFnbWVudCBzaGFkZXIgdW5pZm9ybSB2YWx1ZXMuIik7Ci0gICAg
Ly8gSW5pdGlhbGl6ZSB2ZXJ0ZXggc2hhZGVyIGF0dHJpYnV0ZXMuCi0gICAgc2hhZGVyLnNldFZl
cnRleEF0dHJpYkFycmF5KCJpbl9wb3MiLCAyLCBERVZJQ0VfUkVDVEFOR0xFKTsKLSAgICAvLyBJ
ZiB0aGUgd2lkdGggaXMgbm90IGEgbXVsdGlwbGUgb2YgNCBwaXhlbHMsIHRoZSB0ZXh0dXJlCi0g
ICAgLy8gd2lsbCBiZSBzY2FsZWQgdXAgc2xpZ2h0bHkgYW5kIGNsaXBwZWQgYXQgdGhlIHJpZ2h0
IGJvcmRlci4KLSAgICBzaGFkZXIuc2V0VmVydGV4QXR0cmliQXJyYXkoImluX3RjIiwgMiwgVEVY
VFVSRV9SRUNUQU5HTEUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY29udmVydChCeXRlQnVmZmVy
IGJ1ZiwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3RyaWRlLCBpbnQgc3JjVGV4dHVyZUlk
LAotICAgICAgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNo
ZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgaWYgKHJlbGVhc2VkKSB7Ci0gICAgICB0aHJvdyBu
ZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJZdXZDb252ZXJ0ZXIuY29udmVydCBjYWxsZWQgb24g
cmVsZWFzZWQgb2JqZWN0Iik7Ci0gICAgfQotCi0gICAgLy8gV2UgZHJhdyBpbnRvIGEgYnVmZmVy
IGxhaWQgb3V0IGxpa2UKLSAgICAvLwotICAgIC8vICAgICstLS0tLS0tLS0rCi0gICAgLy8gICAg
fCAgICAgICAgIHwKLSAgICAvLyAgICB8ICBZICAgICAgfAotICAgIC8vICAgIHwgICAgICAgICB8
Ci0gICAgLy8gICAgfCAgICAgICAgIHwKLSAgICAvLyAgICArLS0tLSstLS0tKwotICAgIC8vICAg
IHwgVSAgfCBWICB8Ci0gICAgLy8gICAgfCAgICB8ICAgIHwKLSAgICAvLyAgICArLS0tLSstLS0t
KwotICAgIC8vCi0gICAgLy8gSW4gbWVtb3J5LCB3ZSB1c2UgdGhlIHNhbWUgc3RyaWRlIGZvciBh
bGwgb2YgWSwgVSBhbmQgVi4gVGhlCi0gICAgLy8gVSBkYXRhIHN0YXJ0cyBhdCBvZmZzZXQgfGhl
aWdodHwgKiB8c3RyaWRlfCBmcm9tIHRoZSBZIGRhdGEsCi0gICAgLy8gYW5kIHRoZSBWIGRhdGEg
c3RhcnRzIGF0IGF0IG9mZnNldCB8c3RyaWRlLzJ8IGZyb20gdGhlIFUKLSAgICAvLyBkYXRhLCB3
aXRoIHJvd3Mgb2YgVSBhbmQgViBkYXRhIGFsdGVybmF0aW5nLgotICAgIC8vCi0gICAgLy8gTm93
LCBpdCB3b3VsZCBoYXZlIG1hZGUgc2Vuc2UgdG8gYWxsb2NhdGUgYSBwaXhlbCBidWZmZXIgd2l0
aAotICAgIC8vIGEgc2luZ2xlIGJ5dGUgcGVyIHBpeGVsIChFR0wxMC5FR0xfQ09MT1JfQlVGRkVS
X1RZUEUsCi0gICAgLy8gRUdMMTAuRUdMX0xVTUlOQU5DRV9CVUZGRVIsKSwgYnV0IHRoYXQgc2Vl
bXMgdG8gYmUKLSAgICAvLyB1bnN1cHBvcnRlZCBieSBkZXZpY2VzLiBTbyBkbyB0aGUgZm9sbG93
aW5nIGhhY2s6IEFsbG9jYXRlIGFuCi0gICAgLy8gUkdCQSBidWZmZXIsIG9mIHdpZHRoIHxzdHJp
ZGV8LzQuIFRvIHJlbmRlciBlYWNoIG9mIHRoZXNlCi0gICAgLy8gbGFyZ2UgcGl4ZWxzLCBzYW1w
bGUgdGhlIHRleHR1cmUgYXQgNCBkaWZmZXJlbnQgeCBjb29yZGluYXRlcwotICAgIC8vIGFuZCBz
dG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUgZm91ciBjb21wb25lbnRzLgotICAgIC8vCi0gICAgLy8g
U2luY2UgdGhlIFYgZGF0YSBuZWVkcyB0byBzdGFydCBvbiBhIGJvdW5kYXJ5IG9mIHN1Y2ggYQot
ICAgIC8vIGxhcmdlciBwaXhlbCwgaXQgaXMgbm90IHN1ZmZpY2llbnQgdGhhdCB8c3RyaWRlfCBp
cyBldmVuLCBpdAotICAgIC8vIGhhcyB0byBiZSBhIG11bHRpcGxlIG9mIDggcGl4ZWxzLgotCi0g
ICAgaWYgKHN0cmlkZSAlIDggIT0gMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVu
dEV4Y2VwdGlvbigiSW52YWxpZCBzdHJpZGUsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA4Iik7Ci0g
ICAgfQotICAgIGlmIChzdHJpZGUgPCB3aWR0aCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxB
cmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzdHJpZGUsIG11c3QgPj0gd2lkdGgiKTsKLSAgICB9
Ci0KLSAgICBpbnQgeV93aWR0aCA9ICh3aWR0aCArIDMpIC8gNDsKLSAgICBpbnQgdXZfd2lkdGgg
PSAod2lkdGggKyA3KSAvIDg7Ci0gICAgaW50IHV2X2hlaWdodCA9IChoZWlnaHQgKyAxKSAvIDI7
Ci0gICAgaW50IHRvdGFsX2hlaWdodCA9IGhlaWdodCArIHV2X2hlaWdodDsKLSAgICBpbnQgc2l6
ZSA9IHN0cmlkZSAqIHRvdGFsX2hlaWdodDsKLQotICAgIGlmIChidWYuY2FwYWNpdHkoKSA8IHNp
emUpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIll1dkNvbnZl
cnRlci5jb252ZXJ0IGNhbGxlZCB3aXRoIHRvbyBzbWFsbCBidWZmZXIiKTsKLSAgICB9Ci0gICAg
Ly8gUHJvZHVjZSBhIGZyYW1lIGJ1ZmZlciBzdGFydGluZyBhdCB0b3AtbGVmdCBjb3JuZXIsIG5v
dAotICAgIC8vIGJvdHRvbS1sZWZ0LgotICAgIHRyYW5zZm9ybU1hdHJpeCA9Ci0gICAgICAgIFJl
bmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmljZXModHJhbnNmb3JtTWF0cml4LCBSZW5kZXJlckNv
bW1vbi52ZXJ0aWNhbEZsaXBNYXRyaXgoKSk7Ci0KLSAgICAvLyBCaW5kIG91ciBmcmFtZWJ1ZmZl
ci4KLSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBm
cmFtZUJ1ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsQmluZEZyYW1l
YnVmZmVyIik7Ci0KLSAgICBpZiAoZnJhbWVCdWZmZXJXaWR0aCAhPSBzdHJpZGUgLyA0IHx8IGZy
YW1lQnVmZmVySGVpZ2h0ICE9IHRvdGFsX2hlaWdodCkgewotICAgICAgZnJhbWVCdWZmZXJXaWR0
aCA9IHN0cmlkZSAvIDQ7Ci0gICAgICBmcmFtZUJ1ZmZlckhlaWdodCA9IHRvdGFsX2hlaWdodDsK
LSAgICAgIC8vIChSZSktQWxsb2NhdGUgdGV4dHVyZS4KLSAgICAgIEdMRVMyMC5nbEFjdGl2ZVRl
eHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJELCBmcmFtZVRleHR1cmVJZCk7Ci0gICAgICBHTEVTMjAuZ2xUZXhJ
bWFnZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfUkdCQSwgZnJhbWVCdWZm
ZXJXaWR0aCwKLSAgICAgICAgICBmcmFtZUJ1ZmZlckhlaWdodCwgMCwgR0xFUzIwLkdMX1JHQkEs
IEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCBudWxsKTsKLQotICAgICAgLy8gQ2hlY2sgdGhhdCB0
aGUgZnJhbWVidWZmZXIgaXMgaW4gYSBnb29kIHN0YXRlLgotICAgICAgZmluYWwgaW50IHN0YXR1
cyA9IEdMRVMyMC5nbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xFUzIwLkdMX0ZSQU1FQlVGRkVS
KTsKLSAgICAgIGlmIChzdGF0dXMgIT0gR0xFUzIwLkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7
Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkZyYW1lYnVmZmVyIG5v
dCBjb21wbGV0ZSwgc3RhdHVzOiAiICsgc3RhdHVzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBH
TEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgR0xFUzIwLmds
QmluZFRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCBzcmNUZXh0dXJl
SWQpOwotICAgIEdMRVMyMC5nbFVuaWZvcm1NYXRyaXg0ZnYodGV4TWF0cml4TG9jLCAxLCBmYWxz
ZSwgdHJhbnNmb3JtTWF0cml4LCAwKTsKLQotICAgIC8vIERyYXcgWQotICAgIEdMRVMyMC5nbFZp
ZXdwb3J0KDAsIDAsIHlfd2lkdGgsIGhlaWdodCk7Ci0gICAgLy8gTWF0cml4ICogKDE7MDswOzAp
IC8gd2lkdGguIE5vdGUgdGhhdCBvcGVuZ2wgdXNlcyBjb2x1bW4gbWFqb3Igb3JkZXIuCi0gICAg
R0xFUzIwLmdsVW5pZm9ybTJmKHhVbml0TG9jLCB0cmFuc2Zvcm1NYXRyaXhbMF0gLyB3aWR0aCwg
dHJhbnNmb3JtTWF0cml4WzFdIC8gd2lkdGgpOwotICAgIC8vIFknVVY0NDQgdG8gUkdCODg4LCBz
ZWUKLSAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9ZVVYjWS4yN1VWNDQ0X3Rv
X1JHQjg4OF9jb252ZXJzaW9uLgotICAgIC8vIFdlIHVzZSB0aGUgSVRVLVIgY29lZmZpY2llbnRz
IGZvciBVIGFuZCBWICovCi0gICAgR0xFUzIwLmdsVW5pZm9ybTRmKGNvZWZmc0xvYywgMC4yOTlm
LCAwLjU4N2YsIDAuMTE0ZiwgMC4wZik7Ci0gICAgR0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAu
R0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotCi0gICAgLy8gRHJhdyBVCi0gICAgR0xFUzIwLmds
Vmlld3BvcnQoMCwgaGVpZ2h0LCB1dl93aWR0aCwgdXZfaGVpZ2h0KTsKLSAgICAvLyBNYXRyaXgg
KiAoMTswOzA7MCkgLyAod2lkdGggLyAyKS4gTm90ZSB0aGF0IG9wZW5nbCB1c2VzIGNvbHVtbiBt
YWpvciBvcmRlci4KLSAgICBHTEVTMjAuZ2xVbmlmb3JtMmYoCi0gICAgICAgIHhVbml0TG9jLCAy
LjBmICogdHJhbnNmb3JtTWF0cml4WzBdIC8gd2lkdGgsIDIuMGYgKiB0cmFuc2Zvcm1NYXRyaXhb
MV0gLyB3aWR0aCk7Ci0gICAgR0xFUzIwLmdsVW5pZm9ybTRmKGNvZWZmc0xvYywgLTAuMTY5Ziwg
LTAuMzMxZiwgMC40OTlmLCAwLjVmKTsKLSAgICBHTEVTMjAuZ2xEcmF3QXJyYXlzKEdMRVMyMC5H
TF9UUklBTkdMRV9TVFJJUCwgMCwgNCk7Ci0KLSAgICAvLyBEcmF3IFYKLSAgICBHTEVTMjAuZ2xW
aWV3cG9ydChzdHJpZGUgLyA4LCBoZWlnaHQsIHV2X3dpZHRoLCB1dl9oZWlnaHQpOwotICAgIEdM
RVMyMC5nbFVuaWZvcm00Zihjb2VmZnNMb2MsIDAuNDk5ZiwgLTAuNDE4ZiwgLTAuMDgxM2YsIDAu
NWYpOwotICAgIEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RSSUFOR0xFX1NUUklQLCAw
LCA0KTsKLQotICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoCi0gICAgICAgIDAsIDAsIGZyYW1lQnVm
ZmVyV2lkdGgsIGZyYW1lQnVmZmVySGVpZ2h0LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VO
U0lHTkVEX0JZVEUsIGJ1Zik7Ci0KLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIll1dkNv
bnZlcnRlci5jb252ZXJ0Iik7Ci0KLSAgICAvLyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4K
LSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsK
LSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAg
ICAvLyBVbmJpbmQgdGV4dHVyZS4gUmVwb3J0ZWRseSBuZWVkZWQgb24gc29tZSBkZXZpY2VzIHRv
IGdldAotICAgIC8vIHRoZSB0ZXh0dXJlIHVwZGF0ZWQgZnJvbSB0aGUgY2FtZXJhLgotICAgIEdM
RVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUywgMCk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIHRocmVhZENoZWNrZXIuY2hl
Y2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICByZWxlYXNlZCA9IHRydWU7Ci0gICAgc2hhZGVyLnJl
bGVhc2UoKTsKLSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge2ZyYW1l
VGV4dHVyZUlkfSwgMCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlRnJhbWVidWZmZXJzKDEsIG5ldyBp
bnRbXSB7ZnJhbWVCdWZmZXJJZH0sIDApOwotICAgIGZyYW1lQnVmZmVyV2lkdGggPSAwOwotICAg
IGZyYW1lQnVmZmVySGVpZ2h0ID0gMDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9B
dWRpb1NvdXJjZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQXVkaW9Tb3Vy
Y2UuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1NvdXJj
ZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEphdmEgd3JhcHBlciBmb3IgYSBDKysg
QXVkaW9Tb3VyY2VJbnRlcmZhY2UuICBVc2VkIGFzIHRoZSBzb3VyY2UgZm9yIG9uZSBvcgotICog
bW9yZSB7QGNvZGUgQXVkaW9UcmFja30gb2JqZWN0cy4KLSAqLwotcHVibGljIGNsYXNzIEF1ZGlv
U291cmNlIGV4dGVuZHMgTWVkaWFTb3VyY2UgewotICBwdWJsaWMgQXVkaW9Tb3VyY2UobG9uZyBu
YXRpdmVTb3VyY2UpIHsKLSAgICBzdXBlcihuYXRpdmVTb3VyY2UpOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0F1ZGlvVHJhY2suamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0F1ZGlvVHJhY2suamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9BdWRpb1RyYWNrLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxOCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHdyYXBwZXIg
Zm9yIGEgQysrIEF1ZGlvVHJhY2tJbnRlcmZhY2UgKi8KLXB1YmxpYyBjbGFzcyBBdWRpb1RyYWNr
IGV4dGVuZHMgTWVkaWFTdHJlYW1UcmFjayB7Ci0gIHB1YmxpYyBBdWRpb1RyYWNrKGxvbmcgbmF0
aXZlVHJhY2spIHsKLSAgICBzdXBlcihuYXRpdmVUcmFjayk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYWxsU2Vzc2lvbkZpbGVS
b3RhdGluZ0xvZ1NpbmsuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotcHVibGljIGNsYXNzIENhbGxT
ZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luayB7Ci0gIHN0YXRpYyB7Ci0gICAgU3lzdGVtLmxvYWRM
aWJyYXJ5KCJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fc28iKTsKLSAgfQotCi0gIHByaXZhdGUgbG9u
ZyBuYXRpdmVTaW5rOwotCi0gIHB1YmxpYyBzdGF0aWMgYnl0ZVtdIGdldExvZ0RhdGEoU3RyaW5n
IGRpclBhdGgpIHsKLSAgICByZXR1cm4gbmF0aXZlR2V0TG9nRGF0YShkaXJQYXRoKTsKLSAgfQot
Ci0gIHB1YmxpYyBDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsoCi0gICAgICBTdHJpbmcg
ZGlyUGF0aCwgaW50IG1heEZpbGVTaXplLCBMb2dnaW5nLlNldmVyaXR5IHNldmVyaXR5KSB7Ci0g
ICAgbmF0aXZlU2luayA9IG5hdGl2ZUFkZFNpbmsoZGlyUGF0aCwgbWF4RmlsZVNpemUsIHNldmVy
aXR5Lm9yZGluYWwoKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGlm
IChuYXRpdmVTaW5rICE9IDApIHsKLSAgICAgIG5hdGl2ZURlbGV0ZVNpbmsobmF0aXZlU2luayk7
Ci0gICAgICBuYXRpdmVTaW5rID0gMDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBu
YXRpdmUgbG9uZyBuYXRpdmVBZGRTaW5rKFN0cmluZyBkaXJQYXRoLCBpbnQgbWF4RmlsZVNpemUs
IGludCBzZXZlcml0eSk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZURlbGV0
ZVNpbmsobG9uZyBuYXRpdmVTaW5rKTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJ5dGVbXSBu
YXRpdmVHZXRMb2dEYXRhKFN0cmluZyBkaXJQYXRoKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvQ2FtZXJhMUNhcHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9D
YW1lcmExQ2FwdHVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9DYW1lcmExQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM4ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJy
dGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci0KLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQuQ29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMg
Y2xhc3MgQ2FtZXJhMUNhcHR1cmVyIGV4dGVuZHMgQ2FtZXJhQ2FwdHVyZXIgewotICBwcml2YXRl
IGZpbmFsIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZTsKLQotICBwdWJsaWMgQ2FtZXJhMUNhcHR1
cmVyKAotICAgICAgU3RyaW5nIGNhbWVyYU5hbWUsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRz
SGFuZGxlciwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgc3VwZXIoY2FtZXJhTmFt
ZSwgZXZlbnRzSGFuZGxlciwgbmV3IENhbWVyYTFFbnVtZXJhdG9yKGNhcHR1cmVUb1RleHR1cmUp
KTsKLQotICAgIHRoaXMuY2FwdHVyZVRvVGV4dHVyZSA9IGNhcHR1cmVUb1RleHR1cmU7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2FtZXJhU2Vzc2lvbihDYW1l
cmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjayBjcmVhdGVTZXNzaW9uQ2FsbGJhY2ssCi0g
ICAgICBDYW1lcmFTZXNzaW9uLkV2ZW50cyBldmVudHMsIENvbnRleHQgYXBwbGljYXRpb25Db250
ZXh0LAotICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFN0
cmluZyBjYW1lcmFOYW1lLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICBpbnQgZnJhbWVy
YXRlKSB7Ci0gICAgQ2FtZXJhMVNlc3Npb24uY3JlYXRlKGNyZWF0ZVNlc3Npb25DYWxsYmFjaywg
ZXZlbnRzLCBjYXB0dXJlVG9UZXh0dXJlLCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICAgIHN1
cmZhY2VUZXh0dXJlSGVscGVyLCBDYW1lcmExRW51bWVyYXRvci5nZXRDYW1lcmFJbmRleChjYW1l
cmFOYW1lKSwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgZnJhbWVyYXRlKTsKLSAgfQotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExRW51bWVyYXRvci5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUVudW1lcmF0b3IuamF2YQkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExRW51bWVyYXRvci5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMTg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndl
YnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgamF2YS51dGls
LkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcud2VicnRjLkNh
bWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotCi1AU3VwcHJlc3NXYXJuaW5n
cygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIENhbWVyYTFFbnVtZXJhdG9yIGltcGxlbWVu
dHMgQ2FtZXJhRW51bWVyYXRvciB7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcg
PSAiQ2FtZXJhMUVudW1lcmF0b3IiOwotICAvLyBFYWNoIGVudHJ5IGNvbnRhaW5zIHRoZSBzdXBw
b3J0ZWQgZm9ybWF0cyBmb3IgY29ycmVzcG9uZGluZyBjYW1lcmEgaW5kZXguIFRoZSBmb3JtYXRz
IGZvciBhbGwKLSAgLy8gY2FtZXJhcyBhcmUgZW51bWVyYXRlZCBvbiB0aGUgZmlyc3QgY2FsbCB0
byBnZXRTdXBwb3J0ZWRGb3JtYXRzKCksIGFuZCBjYWNoZWQgZm9yIGZ1dHVyZQotICAvLyByZWZl
cmVuY2UuCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8TGlzdDxDYXB0dXJlRm9ybWF0Pj4gY2FjaGVk
U3VwcG9ydGVkRm9ybWF0czsKLQotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gY2FwdHVyZVRvVGV4
dHVyZTsKLQotICBwdWJsaWMgQ2FtZXJhMUVudW1lcmF0b3IoKSB7Ci0gICAgdGhpcyh0cnVlIC8q
IGNhcHR1cmVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgcHVibGljIENhbWVyYTFFbnVtZXJhdG9y
KGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSkgewotICAgIHRoaXMuY2FwdHVyZVRvVGV4dHVyZSA9
IGNhcHR1cmVUb1RleHR1cmU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGRldmljZSBuYW1lcyB0aGF0
IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIG5ldyBWaWRlb0NhcHR1cmVyQW5kcm9pZC4KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBTdHJpbmdbXSBnZXREZXZpY2VOYW1lcygpIHsKLSAgICBBcnJheUxp
c3Q8U3RyaW5nPiBuYW1lc0xpc3QgPSBuZXcgQXJyYXlMaXN0PD4oKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9mQ2FtZXJhcygpOyAr
K2kpIHsKLSAgICAgIFN0cmluZyBuYW1lID0gZ2V0RGV2aWNlTmFtZShpKTsKLSAgICAgIGlmIChu
YW1lICE9IG51bGwpIHsKLSAgICAgICAgbmFtZXNMaXN0LmFkZChuYW1lKTsKLSAgICAgICAgTG9n
Z2luZy5kKFRBRywgIkluZGV4OiAiICsgaSArICIuICIgKyBuYW1lKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJJbmRleDogIiArIGkgKyAiLiBGYWlsZWQgdG8gcXVl
cnkgY2FtZXJhIG5hbWUuIik7Ci0gICAgICB9Ci0gICAgfQotICAgIFN0cmluZ1tdIG5hbWVzQXJy
YXkgPSBuZXcgU3RyaW5nW25hbWVzTGlzdC5zaXplKCldOwotICAgIHJldHVybiBuYW1lc0xpc3Qu
dG9BcnJheShuYW1lc0FycmF5KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVh
biBpc0Zyb250RmFjaW5nKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgYW5kcm9pZC5oYXJkd2Fy
ZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvID0gZ2V0Q2FtZXJhSW5mbyhnZXRDYW1lcmFJbmRleChk
ZXZpY2VOYW1lKSk7Ci0gICAgcmV0dXJuIGluZm8gIT0gbnVsbCAmJiBpbmZvLmZhY2luZyA9PSBh
bmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfRlJPTlQ7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNCYWNrRmFjaW5nKFN0cmluZyBk
ZXZpY2VOYW1lKSB7Ci0gICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZv
ID0gZ2V0Q2FtZXJhSW5mbyhnZXRDYW1lcmFJbmRleChkZXZpY2VOYW1lKSk7Ci0gICAgcmV0dXJu
IGluZm8gIT0gbnVsbCAmJiBpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5D
YW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfQkFDSzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgTGlzdDxDYXB0dXJlRm9ybWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKFN0cmluZyBkZXZpY2VO
YW1lKSB7Ci0gICAgcmV0dXJuIGdldFN1cHBvcnRlZEZvcm1hdHMoZ2V0Q2FtZXJhSW5kZXgoZGV2
aWNlTmFtZSkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBDYW1lcmFWaWRlb0NhcHR1
cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAgU3RyaW5nIGRldmljZU5hbWUsIENhbWVyYVZpZGVv
Q2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyKSB7Ci0gICAgcmV0dXJu
IG5ldyBDYW1lcmExQ2FwdHVyZXIoZGV2aWNlTmFtZSwgZXZlbnRzSGFuZGxlciwgY2FwdHVyZVRv
VGV4dHVyZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YS5DYW1lcmFJbmZvIGdldENhbWVyYUluZm8oaW50IGluZGV4KSB7Ci0gICAgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBpbmZvID0gbmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LkNhbWVyYUluZm8oKTsKLSAgICB0cnkgewotICAgICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
Z2V0Q2FtZXJhSW5mbyhpbmRleCwgaW5mbyk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJnZXRDYW1lcmFJbmZvIGZhaWxlZCBvbiBpbmRleCAiICsg
aW5kZXgsIGUpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiBpbmZvOwot
ICB9Ci0KLSAgc3RhdGljIHN5bmNocm9uaXplZCBMaXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1cHBv
cnRlZEZvcm1hdHMoaW50IGNhbWVyYUlkKSB7Ci0gICAgaWYgKGNhY2hlZFN1cHBvcnRlZEZvcm1h
dHMgPT0gbnVsbCkgewotICAgICAgY2FjaGVkU3VwcG9ydGVkRm9ybWF0cyA9IG5ldyBBcnJheUxp
c3Q8TGlzdDxDYXB0dXJlRm9ybWF0Pj4oKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCk7ICsraSkgewotICAgICAg
ICBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzLmFkZChlbnVtZXJhdGVGb3JtYXRzKGkpKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMuZ2V0KGNhbWVyYUlk
KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZW51bWVyYXRl
Rm9ybWF0cyhpbnQgY2FtZXJhSWQpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiR2V0IHN1cHBvcnRl
ZCBmb3JtYXRzIGZvciBjYW1lcmEgaW5kZXggIiArIGNhbWVyYUlkICsgIi4iKTsKLSAgICBmaW5h
bCBsb25nIHN0YXJ0VGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAg
ZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAg
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSA9IG51bGw7Ci0gICAgdHJ5IHsKLSAgICAg
IExvZ2dpbmcuZChUQUcsICJPcGVuaW5nIGNhbWVyYSB3aXRoIGluZGV4ICIgKyBjYW1lcmFJZCk7
Ci0gICAgICBjYW1lcmEgPSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5vcGVuKGNhbWVyYUlkKTsK
LSAgICAgIHBhcmFtZXRlcnMgPSBjYW1lcmEuZ2V0UGFyYW1ldGVycygpOwotICAgIH0gY2F0Y2gg
KFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIk9wZW4gY2FtZXJh
IGZhaWxlZCBvbiBjYW1lcmEgaW5kZXggIiArIGNhbWVyYUlkLCBlKTsKLSAgICAgIHJldHVybiBu
ZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQ+KCk7Ci0gICAgfSBmaW5hbGx5IHsKLSAgICAgIGlm
IChjYW1lcmEgIT0gbnVsbCkgewotICAgICAgICBjYW1lcmEucmVsZWFzZSgpOwotICAgICAgfQot
ICAgIH0KLQotICAgIGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZm9ybWF0TGlzdCA9IG5ldyBB
cnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4oKTsKLSAgICB0cnkgewotICAgICAgaW50IG1pbkZwcyA9
IDA7Ci0gICAgICBpbnQgbWF4RnBzID0gMDsKLSAgICAgIGZpbmFsIExpc3Q8aW50W10+IGxpc3RG
cHNSYW5nZSA9IHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld0Zwc1JhbmdlKCk7Ci0gICAg
ICBpZiAobGlzdEZwc1JhbmdlICE9IG51bGwpIHsKLSAgICAgICAgLy8gZ2V0U3VwcG9ydGVkUHJl
dmlld0Zwc1JhbmdlKCkgcmV0dXJucyBhIHNvcnRlZCBsaXN0LiBUYWtlIHRoZSBmcHMgcmFuZ2UK
LSAgICAgICAgLy8gY29ycmVzcG9uZGluZyB0byB0aGUgaGlnaGVzdCBmcHMuCi0gICAgICAgIGZp
bmFsIGludFtdIHJhbmdlID0gbGlzdEZwc1JhbmdlLmdldChsaXN0RnBzUmFuZ2Uuc2l6ZSgpIC0g
MSk7Ci0gICAgICAgIG1pbkZwcyA9IHJhbmdlW2FuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFt
ZXRlcnMuUFJFVklFV19GUFNfTUlOX0lOREVYXTsKLSAgICAgICAgbWF4RnBzID0gcmFuZ2VbYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycy5QUkVWSUVXX0ZQU19NQVhfSU5ERVhdOwot
ICAgICAgfQotICAgICAgZm9yIChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5TaXplIHNpemUgOiBw
YXJhbWV0ZXJzLmdldFN1cHBvcnRlZFByZXZpZXdTaXplcygpKSB7Ci0gICAgICAgIGZvcm1hdExp
c3QuYWRkKG5ldyBDYXB0dXJlRm9ybWF0KHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCBtaW5GcHMs
IG1heEZwcykpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAiZ2V0U3VwcG9ydGVkRm9ybWF0cygpIGZhaWxlZCBvbiBjYW1lcmEgaW5k
ZXggIiArIGNhbWVyYUlkLCBlKTsKLSAgICB9Ci0KLSAgICBmaW5hbCBsb25nIGVuZFRpbWVNcyA9
IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgIExvZ2dpbmcuZChUQUcsICJHZXQg
c3VwcG9ydGVkIGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQgKyAiIGRvbmUu
IgotICAgICAgICAgICAgKyAiIFRpbWUgc3BlbnQ6ICIgKyAoZW5kVGltZU1zIC0gc3RhcnRUaW1l
TXMpICsgIiBtcy4iKTsKLSAgICByZXR1cm4gZm9ybWF0TGlzdDsKLSAgfQotCi0gIC8vIENvbnZl
cnQgZnJvbSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5TaXplIHRvIFNpemUuCi0gIHN0YXRpYyBM
aXN0PFNpemU+IGNvbnZlcnRTaXplcyhMaXN0PGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlNpemU+
IGNhbWVyYVNpemVzKSB7Ci0gICAgZmluYWwgTGlzdDxTaXplPiBzaXplcyA9IG5ldyBBcnJheUxp
c3Q8U2l6ZT4oKTsKLSAgICBmb3IgKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlNpemUgc2l6ZSA6
IGNhbWVyYVNpemVzKSB7Ci0gICAgICBzaXplcy5hZGQobmV3IFNpemUoc2l6ZS53aWR0aCwgc2l6
ZS5oZWlnaHQpKTsKLSAgICB9Ci0gICAgcmV0dXJuIHNpemVzOwotICB9Ci0KLSAgLy8gQ29udmVy
dCBmcm9tIGludFsyXSB0byBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlLgotICBzdGF0aWMg
TGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBjb252ZXJ0RnJhbWVyYXRlcyhMaXN0
PGludFtdPiBhcnJheVJhbmdlcykgewotICAgIGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFt
ZXJhdGVSYW5nZT4gcmFuZ2VzID0gbmV3IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0
ZVJhbmdlPigpOwotICAgIGZvciAoaW50W10gcmFuZ2UgOiBhcnJheVJhbmdlcykgewotICAgICAg
cmFuZ2VzLmFkZChuZXcgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSgKLSAgICAgICAgICBy
YW5nZVthbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLlBSRVZJRVdfRlBTX01JTl9J
TkRFWF0sCi0gICAgICAgICAgcmFuZ2VbYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVy
cy5QUkVWSUVXX0ZQU19NQVhfSU5ERVhdKSk7Ci0gICAgfQotICAgIHJldHVybiByYW5nZXM7Ci0g
IH0KLQotICAvLyBSZXR1cm5zIHRoZSBjYW1lcmEgaW5kZXggZm9yIGNhbWVyYSB3aXRoIG5hbWUg
fGRldmljZU5hbWV8LCBvciB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCi0gIC8vIGlm
IG5vIHN1Y2ggY2FtZXJhIGNhbiBiZSBmb3VuZC4KLSAgc3RhdGljIGludCBnZXRDYW1lcmFJbmRl
eChTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJnZXRDYW1lcmFJbmRl
eDogIiArIGRldmljZU5hbWUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCk7ICsraSkgewotICAgICAgaWYgKGRldmlj
ZU5hbWUuZXF1YWxzKGdldERldmljZU5hbWUoaSkpKSB7Ci0gICAgICAgIHJldHVybiBpOwotICAg
ICAgfQotICAgIH0KLSAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJObyBz
dWNoIGNhbWVyYTogIiArIGRldmljZU5hbWUpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmFt
ZSBvZiB0aGUgY2FtZXJhIHdpdGggY2FtZXJhIGluZGV4LiBSZXR1cm5zIG51bGwgaWYgdGhlCi0g
IC8vIGNhbWVyYSBjYW4gbm90IGJlIHVzZWQuCi0gIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlTmFt
ZShpbnQgaW5kZXgpIHsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGlu
Zm8gPSBnZXRDYW1lcmFJbmZvKGluZGV4KTsKLSAgICBpZiAoaW5mbyA9PSBudWxsKSB7Ci0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBTdHJpbmcgZmFjaW5nID0KLSAgICAgICAgKGlu
Zm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FNRVJBX0ZB
Q0lOR19GUk9OVCkgPyAiZnJvbnQiIDogImJhY2siOwotICAgIHJldHVybiAiQ2FtZXJhICIgKyBp
bmRleCArICIsIEZhY2luZyAiICsgZmFjaW5nICsgIiwgT3JpZW50YXRpb24gIiArIGluZm8ub3Jp
ZW50YXRpb247Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMVNlc3Npb24u
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFTZXNzaW9uLmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMVNlc3Npb24uamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM0NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWlt
cG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsK
LWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93
TWFuYWdlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLkJ5
dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1
cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJv
aWQuQ2FwdHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLk1ldHJpY3MuSGlzdG9ncmFtOwot
Ci1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIENhbWVyYTFT
ZXNzaW9uIGltcGxlbWVudHMgQ2FtZXJhU2Vzc2lvbiB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBUQUcgPSAiQ2FtZXJhMVNlc3Npb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgTlVNQkVSX09GX0NBUFRVUkVfQlVGRkVSUyA9IDM7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgSGlzdG9ncmFtIGNhbWVyYTFTdGFydFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dy
YW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmExLlN0YXJ0VGltZU1zIiwgMSwg
MTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTFTdG9w
VGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5B
bmRyb2lkLkNhbWVyYTEuU3RvcFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmExUmVzb2x1dGlvbkhpc3RvZ3JhbSA9IEhpc3RvZ3Jh
bS5jcmVhdGVFbnVtZXJhdGlvbigKLSAgICAgICJXZWJSVEMuQW5kcm9pZC5DYW1lcmExLlJlc29s
dXRpb24iLCBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ09NTU9OX1JFU09MVVRJT05TLnNpemUo
KSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZW51bSBTZXNzaW9uU3RhdGUgeyBSVU5OSU5HLCBTVE9Q
UEVEIH0KLQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgY2FtZXJhVGhyZWFkSGFuZGxlcjsKLSAg
cHJpdmF0ZSBmaW5hbCBFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gY2Fw
dHVyZVRvVGV4dHVyZTsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4
dDsKLSAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhl
bHBlcjsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgY2FtZXJhSWQ7Ci0gIHByaXZhdGUgZmluYWwgaW50
IHdpZHRoOwotICBwcml2YXRlIGZpbmFsIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgZmluYWwgaW50
IGZyYW1lcmF0ZTsKLSAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1l
cmE7Ci0gIHByaXZhdGUgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbyBp
bmZvOwotICBwcml2YXRlIGZpbmFsIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdDsKLSAgLy8g
VXNlZCBvbmx5IGZvciBzdGF0cy4gT25seSB1c2VkIG9uIHRoZSBjYW1lcmEgdGhyZWFkLgotICBw
cml2YXRlIGZpbmFsIGxvbmcgY29uc3RydWN0aW9uVGltZU5zOyAvLyBDb25zdHJ1Y3Rpb24gdGlt
ZSBvZiB0aGlzIGNsYXNzLgotCi0gIHByaXZhdGUgU2Vzc2lvblN0YXRlIHN0YXRlOwotICBwcml2
YXRlIGJvb2xlYW4gZmlyc3RGcmFtZVJlcG9ydGVkID0gZmFsc2U7Ci0KLSAgcHVibGljIHN0YXRp
YyB2b2lkIGNyZWF0ZShmaW5hbCBDcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGZpbmFs
IEV2ZW50cyBldmVudHMsCi0gICAgICBmaW5hbCBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUsIGZp
bmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgZmluYWwgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIGZpbmFsIGludCBjYW1lcmFJZCwgZmluYWwg
aW50IHdpZHRoLAotICAgICAgZmluYWwgaW50IGhlaWdodCwgZmluYWwgaW50IGZyYW1lcmF0ZSkg
ewotICAgIGZpbmFsIGxvbmcgY29uc3RydWN0aW9uVGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7
Ci0gICAgTG9nZ2luZy5kKFRBRywgIk9wZW4gY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0gICAgZXZl
bnRzLm9uQ2FtZXJhT3BlbmluZygpOwotCi0gICAgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1l
cmEgY2FtZXJhOwotICAgIHRyeSB7Ci0gICAgICBjYW1lcmEgPSBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5vcGVuKGNhbWVyYUlkKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsK
LSAgICAgIGNhbGxiYWNrLm9uRmFpbHVyZShlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3VGV4dHVyZShzdXJm
YWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICB9IGNhdGNoIChJT0V4
Y2VwdGlvbiBlKSB7Ci0gICAgICBjYW1lcmEucmVsZWFzZSgpOwotICAgICAgY2FsbGJhY2sub25G
YWlsdXJlKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5h
bCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8gPSBuZXcgYW5kcm9pZC5o
YXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbygpOwotICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LmdldENhbWVyYUluZm8oY2FtZXJhSWQsIGluZm8pOwotCi0gICAgZmluYWwgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gY2FtZXJhLmdldFBhcmFtZXRlcnMo
KTsKLSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQgPQotICAgICAgICBmaW5k
Q2xvc2VzdENhcHR1cmVGb3JtYXQocGFyYW1ldGVycywgd2lkdGgsIGhlaWdodCwgZnJhbWVyYXRl
KTsKLSAgICBmaW5hbCBTaXplIHBpY3R1cmVTaXplID0gZmluZENsb3Nlc3RQaWN0dXJlU2l6ZShw
YXJhbWV0ZXJzLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgIHVwZGF0ZUNhbWVyYVBhcmFtZXRlcnMo
Y2FtZXJhLCBwYXJhbWV0ZXJzLCBjYXB0dXJlRm9ybWF0LCBwaWN0dXJlU2l6ZSwgY2FwdHVyZVRv
VGV4dHVyZSk7Ci0KLSAgICAvLyBJbml0aWFsaXplIHRoZSBjYXB0dXJlIGJ1ZmZlcnMuCi0gICAg
aWYgKCFjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgICBmaW5hbCBpbnQgZnJhbWVTaXplID0gY2Fw
dHVyZUZvcm1hdC5mcmFtZVNpemUoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVS
X09GX0NBUFRVUkVfQlVGRkVSUzsgKytpKSB7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgYnVm
ZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChmcmFtZVNpemUpOwotICAgICAgICBjYW1l
cmEuYWRkQ2FsbGJhY2tCdWZmZXIoYnVmZmVyLmFycmF5KCkpOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vIENhbGN1bGF0ZSBvcmllbnRhdGlvbiBtYW51YWxseSBhbmQgc2VuZCBpdCBhcyBDVk8g
aW5zdGVkLgotICAgIGNhbWVyYS5zZXREaXNwbGF5T3JpZW50YXRpb24oMCAvKiBkZWdyZWVzICov
KTsKLQotICAgIGNhbGxiYWNrLm9uRG9uZSgKLSAgICAgICAgbmV3IENhbWVyYTFTZXNzaW9uKGV2
ZW50cywgY2FwdHVyZVRvVGV4dHVyZSwgYXBwbGljYXRpb25Db250ZXh0LCBzdXJmYWNlVGV4dHVy
ZUhlbHBlciwKLSAgICAgICAgICAgIGNhbWVyYUlkLCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUs
IGNhbWVyYSwgaW5mbywgY2FwdHVyZUZvcm1hdCwgY29uc3RydWN0aW9uVGltZU5zKSk7Ci0gIH0K
LQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHVwZGF0ZUNhbWVyYVBhcmFtZXRlcnMoYW5kcm9pZC5o
YXJkd2FyZS5DYW1lcmEgY2FtZXJhLAotICAgICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFy
YW1ldGVycyBwYXJhbWV0ZXJzLCBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQsIFNpemUgcGlj
dHVyZVNpemUsCi0gICAgICBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICBmaW5hbCBM
aXN0PFN0cmluZz4gZm9jdXNNb2RlcyA9IHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkRm9jdXNNb2Rl
cygpOwotCi0gICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3RnBzUmFuZ2UoY2FwdHVyZUZvcm1hdC5m
cmFtZXJhdGUubWluLCBjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXgpOwotICAgIHBhcmFtZXRl
cnMuc2V0UHJldmlld1NpemUoY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWln
aHQpOwotICAgIHBhcmFtZXRlcnMuc2V0UGljdHVyZVNpemUocGljdHVyZVNpemUud2lkdGgsIHBp
Y3R1cmVTaXplLmhlaWdodCk7Ci0gICAgaWYgKCFjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgICBw
YXJhbWV0ZXJzLnNldFByZXZpZXdGb3JtYXQoY2FwdHVyZUZvcm1hdC5pbWFnZUZvcm1hdCk7Ci0g
ICAgfQotCi0gICAgaWYgKHBhcmFtZXRlcnMuaXNWaWRlb1N0YWJpbGl6YXRpb25TdXBwb3J0ZWQo
KSkgewotICAgICAgcGFyYW1ldGVycy5zZXRWaWRlb1N0YWJpbGl6YXRpb24odHJ1ZSk7Ci0gICAg
fQotICAgIGlmIChmb2N1c01vZGVzLmNvbnRhaW5zKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBh
cmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKSkgewotICAgICAgcGFyYW1ldGVy
cy5zZXRGb2N1c01vZGUoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycy5GT0NVU19N
T0RFX0NPTlRJTlVPVVNfVklERU8pOwotICAgIH0KLSAgICBjYW1lcmEuc2V0UGFyYW1ldGVycyhw
YXJhbWV0ZXJzKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIENhcHR1cmVGb3JtYXQgZmluZENs
b3Nlc3RDYXB0dXJlRm9ybWF0KAotICAgICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1l
dGVycyBwYXJhbWV0ZXJzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsK
LSAgICAvLyBGaW5kIGNsb3Nlc3Qgc3VwcG9ydGVkIGZvcm1hdCBmb3IgfHdpZHRofCB4IHxoZWln
aHR8IEAgfGZyYW1lcmF0ZXwuCi0gICAgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0
ZVJhbmdlPiBzdXBwb3J0ZWRGcmFtZXJhdGVzID0KLSAgICAgICAgQ2FtZXJhMUVudW1lcmF0b3Iu
Y29udmVydEZyYW1lcmF0ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRQcmV2aWV3RnBzUmFuZ2Uo
KSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF2YWlsYWJsZSBmcHMgcmFuZ2VzOiAiICsgc3VwcG9y
dGVkRnJhbWVyYXRlcyk7Ci0KLSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdl
IGZwc1JhbmdlID0KLSAgICAgICAgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RT
dXBwb3J0ZWRGcmFtZXJhdGVSYW5nZShzdXBwb3J0ZWRGcmFtZXJhdGVzLCBmcmFtZXJhdGUpOwot
Ci0gICAgZmluYWwgU2l6ZSBwcmV2aWV3U2l6ZSA9IENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5n
ZXRDbG9zZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgICAgQ2FtZXJhMUVudW1lcmF0b3IuY29udmVy
dFNpemVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld1NpemVzKCkpLCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQucmVwb3J0Q2FtZXJhUmVzb2x1dGlv
bihjYW1lcmExUmVzb2x1dGlvbkhpc3RvZ3JhbSwgcHJldmlld1NpemUpOwotCi0gICAgcmV0dXJu
IG5ldyBDYXB0dXJlRm9ybWF0KHByZXZpZXdTaXplLndpZHRoLCBwcmV2aWV3U2l6ZS5oZWlnaHQs
IGZwc1JhbmdlKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFNpemUgZmluZENsb3Nlc3RQaWN0
dXJlU2l6ZSgKLSAgICAgIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFtZXRlcnMgcGFyYW1l
dGVycywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgcmV0dXJuIENhbWVyYUVudW1lcmF0
aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgICAgQ2FtZXJhMUVudW1l
cmF0b3IuY29udmVydFNpemVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUGljdHVyZVNpemVzKCkp
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhMVNlc3Npb24oRXZlbnRz
IGV2ZW50cywgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29u
dGV4dCwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBp
bnQgY2FtZXJhSWQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSwKLSAgICAg
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYSwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
Q2FtZXJhSW5mbyBpbmZvLAotICAgICAgQ2FwdHVyZUZvcm1hdCBjYXB0dXJlRm9ybWF0LCBsb25n
IGNvbnN0cnVjdGlvblRpbWVOcykgewotICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGUgbmV3IGNh
bWVyYTEgc2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNhbWVyYUlkKTsKLQotICAgIHRoaXMuY2FtZXJh
VGhyZWFkSGFuZGxlciA9IG5ldyBIYW5kbGVyKCk7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7
Ci0gICAgdGhpcy5jYXB0dXJlVG9UZXh0dXJlID0gY2FwdHVyZVRvVGV4dHVyZTsKLSAgICB0aGlz
LmFwcGxpY2F0aW9uQ29udGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICB0aGlzLnN1cmZh
Y2VUZXh0dXJlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgdGhpcy5jYW1lcmFJ
ZCA9IGNhbWVyYUlkOwotICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9
IGhlaWdodDsKLSAgICB0aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0ZTsKLSAgICB0aGlzLmNhbWVy
YSA9IGNhbWVyYTsKLSAgICB0aGlzLmluZm8gPSBpbmZvOwotICAgIHRoaXMuY2FwdHVyZUZvcm1h
dCA9IGNhcHR1cmVGb3JtYXQ7Ci0gICAgdGhpcy5jb25zdHJ1Y3Rpb25UaW1lTnMgPSBjb25zdHJ1
Y3Rpb25UaW1lTnM7Ci0KLSAgICBzdGFydENhcHR1cmluZygpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgY2FtZXJh
MSBzZXNzaW9uIG9uIGNhbWVyYSAiICsgY2FtZXJhSWQpOwotICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotICAgIGlmIChzdGF0ZSAhPSBTZXNzaW9uU3RhdGUuU1RPUFBFRCkgewotICAgICAg
ZmluYWwgbG9uZyBzdG9wU3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICBzdGF0
ZSA9IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwotICAgICAgc3RvcEludGVybmFsKCk7Ci0gICAgICBm
aW5hbCBpbnQgc3RvcFRpbWVNcyA9IChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlz
KFN5c3RlbS5uYW5vVGltZSgpIC0gc3RvcFN0YXJ0VGltZSk7Ci0gICAgICBjYW1lcmExU3RvcFRp
bWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RvcFRpbWVNcyk7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIHN0YXJ0Q2FwdHVyaW5nKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJTdGFydCBj
YXB0dXJpbmciKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgIHN0YXRlID0g
U2Vzc2lvblN0YXRlLlJVTk5JTkc7Ci0KLSAgICBjYW1lcmEuc2V0RXJyb3JDYWxsYmFjayhuZXcg
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuRXJyb3JDYWxsYmFjaygpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgb25FcnJvcihpbnQgZXJyb3IsIGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhIGNhbWVyYSkgewotICAgICAgICBTdHJpbmcgZXJyb3JNZXNzYWdlOwotICAgICAgICBp
ZiAoZXJyb3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ0FNRVJBX0VSUk9SX1NFUlZFUl9E
SUVEKSB7Ci0gICAgICAgICAgZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBzZXJ2ZXIgZGllZCEiOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGVycm9yTWVzc2FnZSA9ICJDYW1lcmEgZXJyb3I6
ICIgKyBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmUoVEFHLCBlcnJvck1lc3Nh
Z2UpOwotICAgICAgICBzdGF0ZSA9IFNlc3Npb25TdGF0ZS5TVE9QUEVEOwotICAgICAgICBzdG9w
SW50ZXJuYWwoKTsKLSAgICAgICAgaWYgKGVycm9yID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LkNBTUVSQV9FUlJPUl9FVklDVEVEKSB7Ci0gICAgICAgICAgZXZlbnRzLm9uQ2FtZXJhRGlzY29u
bmVjdGVkKENhbWVyYTFTZXNzaW9uLnRoaXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
IGV2ZW50cy5vbkNhbWVyYUVycm9yKENhbWVyYTFTZXNzaW9uLnRoaXMsIGVycm9yTWVzc2FnZSk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLQotICAgIGlmIChjYXB0dXJlVG9UZXh0dXJl
KSB7Ci0gICAgICBsaXN0ZW5Gb3JUZXh0dXJlRnJhbWVzKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGxpc3RlbkZvckJ5dGVidWZmZXJGcmFtZXMoKTsKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIGNh
bWVyYS5zdGFydFByZXZpZXcoKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsK
LSAgICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICBzdG9wSW50ZXJuYWwo
KTsKLSAgICAgIGV2ZW50cy5vbkNhbWVyYUVycm9yKHRoaXMsIGUuZ2V0TWVzc2FnZSgpKTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RvcEludGVybmFsKCkgewotICAgIExvZ2dpbmcu
ZChUQUcsICJTdG9wIGludGVybmFsIik7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0K
LSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0KLSAgICAvLyBOb3Rl
OiBzdG9wUHJldmlldyBvciBvdGhlciBkcml2ZXIgY29kZSBtaWdodCBkZWFkbG9jay4gRGVhZGxv
Y2sgaW4KLSAgICAvLyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5fc3RvcFByZXZpZXcoTmF0aXZl
IE1ldGhvZCkgaGFzIGJlZW4gb2JzZXJ2ZWQgb24KLSAgICAvLyBOZXh1cyA1IChoYW1tZXJoZWFk
KSwgT1MgdmVyc2lvbiBMTVk0OEkuCi0gICAgY2FtZXJhLnN0b3BQcmV2aWV3KCk7Ci0gICAgY2Ft
ZXJhLnJlbGVhc2UoKTsKLSAgICBldmVudHMub25DYW1lcmFDbG9zZWQodGhpcyk7Ci0KLSAgICBM
b2dnaW5nLmQoVEFHLCAiU3RvcCBkb25lIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbGlzdGVu
Rm9yVGV4dHVyZUZyYW1lcygpIHsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3Rl
bmluZyhuZXcgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0
ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJh
bWVBdmFpbGFibGUoCi0gICAgICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zv
cm1NYXRyaXgsIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICAgICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0KLSAgICAgICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5SVU5OSU5HKSB7Ci0g
ICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlRleHR1cmUgZnJhbWUgY2FwdHVyZWQgYnV0IGNhbWVy
YSBpcyBubyBsb25nZXIgcnVubmluZy4iKTsKLSAgICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoIWZpcnN0RnJhbWVSZXBvcnRlZCkgewotICAgICAgICAgIGZpbmFsIGludCBz
dGFydFRpbWVNcyA9Ci0gICAgICAgICAgICAgIChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRv
TWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gY29uc3RydWN0aW9uVGltZU5zKTsKLSAgICAgICAg
ICBjYW1lcmExU3RhcnRUaW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0YXJ0VGltZU1zKTsKLSAg
ICAgICAgICBmaXJzdEZyYW1lUmVwb3J0ZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aW50IHJvdGF0aW9uID0gZ2V0RnJhbWVPcmllbnRhdGlvbigpOwotICAgICAgICBpZiAoaW5mby5m
YWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5H
X0ZST05UKSB7Ci0gICAgICAgICAgLy8gVW5kbyB0aGUgbWlycm9yIHRoYXQgdGhlIE9TICJoZWxw
cyIgdXMgd2l0aC4KLSAgICAgICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3Jl
ZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5odG1sI3NldERpc3BsYXlPcmllbnRhdGlv
bihpbnQpCi0gICAgICAgICAgdHJhbnNmb3JtTWF0cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlw
bHlNYXRyaWNlcygKLSAgICAgICAgICAgICAgdHJhbnNmb3JtTWF0cml4LCBSZW5kZXJlckNvbW1v
bi5ob3Jpem9udGFsRmxpcE1hdHJpeCgpKTsKLSAgICAgICAgfQotICAgICAgICBldmVudHMub25U
ZXh0dXJlRnJhbWVDYXB0dXJlZChDYW1lcmExU2Vzc2lvbi50aGlzLCBjYXB0dXJlRm9ybWF0Lndp
ZHRoLAotICAgICAgICAgICAgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIG9lc1RleHR1cmVJZCwgdHJh
bnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGltZXN0YW1wTnMpOwotICAgICAgfQotICAgIH0pOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxpc3RlbkZvckJ5dGVidWZmZXJGcmFtZXMoKSB7Ci0gICAg
Y2FtZXJhLnNldFByZXZpZXdDYWxsYmFja1dpdGhCdWZmZXIobmV3IGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLlByZXZpZXdDYWxsYmFjaygpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgb25QcmV2aWV3RnJhbWUoYnl0ZVtdIGRhdGEsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
IGNhbGxiYWNrQ2FtZXJhKSB7Ci0gICAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0g
ICAgICAgIGlmIChjYWxsYmFja0NhbWVyYSAhPSBjYW1lcmEpIHsKLSAgICAgICAgICBMb2dnaW5n
LmUoVEFHLCAiQ2FsbGJhY2sgZnJvbSBhIGRpZmZlcmVudCBjYW1lcmEuIFRoaXMgc2hvdWxkIG5l
dmVyIGhhcHBlbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoc3RhdGUgIT0gU2Vzc2lvblN0YXRlLlJVTk5JTkcpIHsKLSAgICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiQnl0ZWJ1ZmZlciBmcmFtZSBjYXB0dXJlZCBidXQgY2FtZXJhIGlzIG5vIGxvbmdlciBy
dW5uaW5nLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZpbmFs
IGxvbmcgY2FwdHVyZVRpbWVOcyA9IFRpbWVVbml0Lk1JTExJU0VDT05EUy50b05hbm9zKFN5c3Rl
bUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsKLQotICAgICAgICBpZiAoIWZpcnN0RnJhbWVSZXBv
cnRlZCkgewotICAgICAgICAgIGZpbmFsIGludCBzdGFydFRpbWVNcyA9Ci0gICAgICAgICAgICAg
IChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0g
Y29uc3RydWN0aW9uVGltZU5zKTsKLSAgICAgICAgICBjYW1lcmExU3RhcnRUaW1lTXNIaXN0b2dy
YW0uYWRkU2FtcGxlKHN0YXJ0VGltZU1zKTsKLSAgICAgICAgICBmaXJzdEZyYW1lUmVwb3J0ZWQg
PSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZXZlbnRzLm9uQnl0ZUJ1ZmZlckZyYW1lQ2Fw
dHVyZWQoQ2FtZXJhMVNlc3Npb24udGhpcywgZGF0YSwgY2FwdHVyZUZvcm1hdC53aWR0aCwKLSAg
ICAgICAgICAgIGNhcHR1cmVGb3JtYXQuaGVpZ2h0LCBnZXRGcmFtZU9yaWVudGF0aW9uKCksIGNh
cHR1cmVUaW1lTnMpOwotICAgICAgICBjYW1lcmEuYWRkQ2FsbGJhY2tCdWZmZXIoZGF0YSk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXREZXZpY2VPcmllbnRhdGlv
bigpIHsKLSAgICBpbnQgb3JpZW50YXRpb24gPSAwOwotCi0gICAgV2luZG93TWFuYWdlciB3bSA9
IChXaW5kb3dNYW5hZ2VyKSBhcHBsaWNhdGlvbkNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250
ZXh0LldJTkRPV19TRVJWSUNFKTsKLSAgICBzd2l0Y2ggKHdtLmdldERlZmF1bHREaXNwbGF5KCku
Z2V0Um90YXRpb24oKSkgewotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzkwOgotICAgICAg
ICBvcmllbnRhdGlvbiA9IDkwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5S
T1RBVElPTl8xODA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMTgwOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8yNzA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0g
MjcwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8wOgotICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAwOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuIG9yaWVudGF0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RnJh
bWVPcmllbnRhdGlvbigpIHsKLSAgICBpbnQgcm90YXRpb24gPSBnZXREZXZpY2VPcmllbnRhdGlv
bigpOwotICAgIGlmIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1l
cmFJbmZvLkNBTUVSQV9GQUNJTkdfQkFDSykgewotICAgICAgcm90YXRpb24gPSAzNjAgLSByb3Rh
dGlvbjsKLSAgICB9Ci0gICAgcmV0dXJuIChpbmZvLm9yaWVudGF0aW9uICsgcm90YXRpb24pICUg
MzYwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpIHsKLSAg
ICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExv
b3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0
aW9uKCJXcm9uZyB0aHJlYWQiKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvQ2FtZXJhMkNhcHR1cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9D
YW1lcmEyQ2FwdHVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9DYW1lcmEyQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM3ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
YW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1p
bXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci0KLUBUYXJnZXRB
cGkoMjEpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMkNhcHR1cmVyIGV4dGVuZHMgQ2FtZXJhQ2FwdHVy
ZXIgewotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBD
YW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXI7Ci0KLSAgcHVibGljIENhbWVyYTJDYXB0dXJlcihD
b250ZXh0IGNvbnRleHQsIFN0cmluZyBjYW1lcmFOYW1lLCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2
ZW50c0hhbmRsZXIpIHsKLSAgICBzdXBlcihjYW1lcmFOYW1lLCBldmVudHNIYW5kbGVyLCBuZXcg
Q2FtZXJhMkVudW1lcmF0b3IoY29udGV4dCkpOwotCi0gICAgdGhpcy5jb250ZXh0ID0gY29udGV4
dDsKLSAgICBjYW1lcmFNYW5hZ2VyID0gKENhbWVyYU1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVt
U2VydmljZShDb250ZXh0LkNBTUVSQV9TRVJWSUNFKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
cm90ZWN0ZWQgdm9pZCBjcmVhdGVDYW1lcmFTZXNzaW9uKENhbWVyYVNlc3Npb24uQ3JlYXRlU2Vz
c2lvbkNhbGxiYWNrIGNyZWF0ZVNlc3Npb25DYWxsYmFjaywKLSAgICAgIENhbWVyYVNlc3Npb24u
RXZlbnRzIGV2ZW50cywgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBTdXJmYWNl
VGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3RyaW5nIGNhbWVyYU5hbWUsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIGludCBmcmFtZXJhdGUpIHsKLSAgICBDYW1lcmEy
U2Vzc2lvbi5jcmVhdGUoY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLCBldmVudHMsIGFwcGxpY2F0aW9u
Q29udGV4dCwgY2FtZXJhTWFuYWdlciwKLSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIsIGNh
bWVyYU5hbWUsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0NhbWVyYTJFbnVtZXJhdG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDI0OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0
OwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lk
LmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQg
YW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJl
LmNhbWVyYTIuQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUu
Y2FtZXJhMi5DYW1lcmFNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5D
YW1lcmFNZXRhZGF0YTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIucGFyYW1zLlN0
cmVhbUNvbmZpZ3VyYXRpb25NYXA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBh
bmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudXRpbC5BbmRyb2lkRXhjZXB0
aW9uOwotaW1wb3J0IGFuZHJvaWQudXRpbC5SYW5nZTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJh
eUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7
Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotQFRhcmdldEFwaSgyMSkKLXB1YmxpYyBjbGFzcyBD
YW1lcmEyRW51bWVyYXRvciBpbXBsZW1lbnRzIENhbWVyYUVudW1lcmF0b3IgewotICBwcml2YXRl
IGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkNhbWVyYTJFbnVtZXJhdG9yIjsKLSAgcHJpdmF0
ZSBmaW5hbCBzdGF0aWMgZG91YmxlIE5BTk9fU0VDT05EU19QRVJfU0VDT05EID0gMS4wZTk7Ci0K
LSAgLy8gRWFjaCBlbnRyeSBjb250YWlucyB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGEgZ2l2
ZW4gY2FtZXJhIGluZGV4LiBUaGUgZm9ybWF0cyBhcmUgZW51bWVyYXRlZAotICAvLyBsYXppbHkg
aW4gZ2V0U3VwcG9ydGVkRm9ybWF0cygpLCBhbmQgY2FjaGVkIGZvciBmdXR1cmUgcmVmZXJlbmNl
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PENhcHR1cmVGb3JtYXQ+
PiBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzID0KLSAgICAgIG5ldyBIYXNoTWFwPFN0cmluZywgTGlz
dDxDYXB0dXJlRm9ybWF0Pj4oKTsKLQotICBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0gIGZpbmFs
IENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsKLQotICBwdWJsaWMgQ2FtZXJhMkVudW1lcmF0
b3IoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICB0
aGlzLmNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2
aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBTdHJpbmdbXSBnZXREZXZpY2VOYW1lcygpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIGNh
bWVyYU1hbmFnZXIuZ2V0Q2FtZXJhSWRMaXN0KCk7Ci0gICAgICAvLyBPbiBBbmRyb2lkIE9TIHBy
ZSA0LjQuMiwgYSBjbGFzcyB3aWxsIG5vdCBsb2FkIGJlY2F1c2Ugb2YgVmVyaWZ5RXJyb3IgaWYg
aXQgY29udGFpbnMgYQotICAgICAgLy8gY2F0Y2ggc3RhdGVtZW50IHdpdGggYW4gRXhjZXB0aW9u
IGZyb20gYSBuZXdlciBBUEksIGV2ZW4gaWYgdGhlIGNvZGUgaXMgbmV2ZXIgZXhlY3V0ZWQuCi0g
ICAgICAvLyBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2FuZHJvaWQvaXNzdWVzL2RldGFpbD9p
ZD0yMDkxMjkKLSAgICB9IGNhdGNoICgvKiBDYW1lcmFBY2Nlc3NFeGNlcHRpb24gKi8gQW5kcm9p
ZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGFjY2VzcyBleGNl
cHRpb246ICIgKyBlKTsKLSAgICAgIHJldHVybiBuZXcgU3RyaW5nW10ge307Ci0gICAgfQotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzRnJvbnRGYWNpbmcoU3RyaW5nIGRl
dmljZU5hbWUpIHsKLSAgICBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2hhcmFjdGVyaXN0aWNzID0g
Z2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGRldmljZU5hbWUpOwotCi0gICAgcmV0dXJuIGNoYXJh
Y3RlcmlzdGljcyAhPSBudWxsCi0gICAgICAgICYmIGNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJh
Q2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFDSU5HKQotICAgICAgICA9PSBDYW1lcmFNZXRhZGF0YS5M
RU5TX0ZBQ0lOR19GUk9OVDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBp
c0JhY2tGYWNpbmcoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBDYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3MgY2hhcmFjdGVyaXN0aWNzID0gZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKGRldmljZU5hbWUp
OwotCi0gICAgcmV0dXJuIGNoYXJhY3RlcmlzdGljcyAhPSBudWxsCi0gICAgICAgICYmIGNoYXJh
Y3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkxFTlNfRkFDSU5HKQotICAgICAg
ICA9PSBDYW1lcmFNZXRhZGF0YS5MRU5TX0ZBQ0lOR19CQUNLOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyBMaXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoU3RyaW5n
IGRldmljZU5hbWUpIHsKLSAgICByZXR1cm4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhjb250ZXh0LCBk
ZXZpY2VOYW1lKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0
dXJlciBjcmVhdGVDYXB0dXJlcigKLSAgICAgIFN0cmluZyBkZXZpY2VOYW1lLCBDYW1lcmFWaWRl
b0NhcHR1cmVyLkNhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgIHJldHVy
biBuZXcgQ2FtZXJhMkNhcHR1cmVyKGNvbnRleHQsIGRldmljZU5hbWUsIGV2ZW50c0hhbmRsZXIp
OwotICB9Ci0KLSAgcHJpdmF0ZSBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgZ2V0Q2FtZXJhQ2hhcmFj
dGVyaXN0aWNzKFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgdHJ5IHsKLSAgICAgIHJldHVybiBj
YW1lcmFNYW5hZ2VyLmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhkZXZpY2VOYW1lKTsKLSAgICAg
IC8vIE9uIEFuZHJvaWQgT1MgcHJlIDQuNC4yLCBhIGNsYXNzIHdpbGwgbm90IGxvYWQgYmVjYXVz
ZSBvZiBWZXJpZnlFcnJvciBpZiBpdCBjb250YWlucyBhCi0gICAgICAvLyBjYXRjaCBzdGF0ZW1l
bnQgd2l0aCBhbiBFeGNlcHRpb24gZnJvbSBhIG5ld2VyIEFQSSwgZXZlbiBpZiB0aGUgY29kZSBp
cyBuZXZlciBleGVjdXRlZC4KLSAgICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5k
cm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwOTEyOQotICAgIH0gY2F0Y2ggKC8qIENhbWVyYUFjY2Vz
c0V4Y2VwdGlvbiAqLyBBbmRyb2lkRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcs
ICJDYW1lcmEgYWNjZXNzIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyBpZiBBUEkgaXMgc3VwcG9ydGVkIGFuZCBh
bGwgY2FtZXJhcyBoYXZlIGJldHRlciB0aGFuIGxlZ2FjeSBzdXBwb3J0LgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyBib29sZWFuIGlzU3VwcG9ydGVkKENvbnRleHQgY29udGV4dCkgewotICAgIGlm
IChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QKSB7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQ2FtZXJhTWFuYWdlciBjYW1lcmFN
YW5hZ2VyID0gKENhbWVyYU1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0
LkNBTUVSQV9TRVJWSUNFKTsKLSAgICB0cnkgewotICAgICAgU3RyaW5nW10gY2FtZXJhSWRzID0g
Y2FtZXJhTWFuYWdlci5nZXRDYW1lcmFJZExpc3QoKTsKLSAgICAgIGZvciAoU3RyaW5nIGlkIDog
Y2FtZXJhSWRzKSB7Ci0gICAgICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcyBjaGFyYWN0ZXJpc3Rp
Y3MgPSBjYW1lcmFNYW5hZ2VyLmdldENhbWVyYUNoYXJhY3RlcmlzdGljcyhpZCk7Ci0gICAgICAg
IGlmIChjaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5JTkZPX1NVUFBP
UlRFRF9IQVJEV0FSRV9MRVZFTCkKLSAgICAgICAgICAgID09IENhbWVyYUNoYXJhY3RlcmlzdGlj
cy5JTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTF9MRUdBQ1kpIHsKLSAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIE9uIEFuZHJvaWQgT1MgcHJl
IDQuNC4yLCBhIGNsYXNzIHdpbGwgbm90IGxvYWQgYmVjYXVzZSBvZiBWZXJpZnlFcnJvciBpZiBp
dCBjb250YWlucyBhCi0gICAgICAvLyBjYXRjaCBzdGF0ZW1lbnQgd2l0aCBhbiBFeGNlcHRpb24g
ZnJvbSBhIG5ld2VyIEFQSSwgZXZlbiBpZiB0aGUgY29kZSBpcyBuZXZlciBleGVjdXRlZC4KLSAg
ICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lk
PTIwOTEyOQotICAgIH0gY2F0Y2ggKC8qIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiAqLyBBbmRyb2lk
RXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEgYWNjZXNzIGV4Y2Vw
dGlvbjogIiArIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi0gIHN0YXRpYyBpbnQgZ2V0RnBzVW5pdEZhY3RvcihSYW5nZTxJbnRlZ2VyPltd
IGZwc1JhbmdlcykgewotICAgIGlmIChmcHNSYW5nZXMubGVuZ3RoID09IDApIHsKLSAgICAgIHJl
dHVybiAxMDAwOwotICAgIH0KLSAgICByZXR1cm4gZnBzUmFuZ2VzWzBdLmdldFVwcGVyKCkgPCAx
MDAwID8gMTAwMCA6IDE7Ci0gIH0KLQotICBzdGF0aWMgTGlzdDxTaXplPiBnZXRTdXBwb3J0ZWRT
aXplcyhDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzKSB7Ci0gICAg
ZmluYWwgU3RyZWFtQ29uZmlndXJhdGlvbk1hcCBzdHJlYW1NYXAgPQotICAgICAgICBjYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5TQ0FMRVJfU1RSRUFNX0NP
TkZJR1VSQVRJT05fTUFQKTsKLSAgICBmaW5hbCBpbnQgc3VwcG9ydExldmVsID0KLSAgICAgICAg
Y2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuSU5GT19TVVBQ
T1JURURfSEFSRFdBUkVfTEVWRUwpOwotCi0gICAgZmluYWwgYW5kcm9pZC51dGlsLlNpemVbXSBu
YXRpdmVTaXplcyA9IHN0cmVhbU1hcC5nZXRPdXRwdXRTaXplcyhTdXJmYWNlVGV4dHVyZS5jbGFz
cyk7Ci0gICAgZmluYWwgTGlzdDxTaXplPiBzaXplcyA9IGNvbnZlcnRTaXplcyhuYXRpdmVTaXpl
cyk7Ci0KLSAgICAvLyBWaWRlbyBtYXkgYmUgc3RyZXRjaGVkIHByZSBMTVIxIG9uIGxlZ2FjeSBp
bXBsZW1lbnRhdGlvbnMuCi0gICAgLy8gRmlsdGVyIG91dCBmb3JtYXRzIHRoYXQgaGF2ZSBkaWZm
ZXJlbnQgYXNwZWN0IHJhdGlvIHRoYW4gdGhlIHNlbnNvciBhcnJheS4KLSAgICBpZiAoQnVpbGQu
VkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUF9NUjEKLSAgICAg
ICAgJiYgc3VwcG9ydExldmVsID09IENhbWVyYUNoYXJhY3RlcmlzdGljcy5JTkZPX1NVUFBPUlRF
RF9IQVJEV0FSRV9MRVZFTF9MRUdBQ1kpIHsKLSAgICAgIGZpbmFsIFJlY3QgYWN0aXZlQXJyYXlT
aXplID0KLSAgICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3Rl
cmlzdGljcy5TRU5TT1JfSU5GT19BQ1RJVkVfQVJSQVlfU0laRSk7Ci0gICAgICBmaW5hbCBBcnJh
eUxpc3Q8U2l6ZT4gZmlsdGVyZWRTaXplcyA9IG5ldyBBcnJheUxpc3Q8U2l6ZT4oKTsKLQotICAg
ICAgZm9yIChTaXplIHNpemUgOiBzaXplcykgewotICAgICAgICBpZiAoYWN0aXZlQXJyYXlTaXpl
LndpZHRoKCkgKiBzaXplLmhlaWdodCA9PSBhY3RpdmVBcnJheVNpemUuaGVpZ2h0KCkgKiBzaXpl
LndpZHRoKSB7Ci0gICAgICAgICAgZmlsdGVyZWRTaXplcy5hZGQoc2l6ZSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLQotICAgICAgcmV0dXJuIGZpbHRlcmVkU2l6ZXM7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIHJldHVybiBzaXplczsKLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgTGlzdDxDYXB0dXJlRm9y
bWF0PiBnZXRTdXBwb3J0ZWRGb3JtYXRzKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGNhbWVyYUlk
KSB7Ci0gICAgcmV0dXJuIGdldFN1cHBvcnRlZEZvcm1hdHMoCi0gICAgICAgIChDYW1lcmFNYW5h
Z2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSksIGNh
bWVyYUlkKTsKLSAgfQotCi0gIHN0YXRpYyBMaXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1cHBvcnRl
ZEZvcm1hdHMoQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyLCBTdHJpbmcgY2FtZXJhSWQpIHsK
LSAgICBzeW5jaHJvbml6ZWQgKGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMpIHsKLSAgICAgIGlmIChj
YWNoZWRTdXBwb3J0ZWRGb3JtYXRzLmNvbnRhaW5zS2V5KGNhbWVyYUlkKSkgewotICAgICAgICBy
ZXR1cm4gY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5nZXQoY2FtZXJhSWQpOwotICAgICAgfQotCi0g
ICAgICBMb2dnaW5nLmQoVEFHLCAiR2V0IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjYW1lcmEgaW5k
ZXggIiArIGNhbWVyYUlkICsgIi4iKTsKLSAgICAgIGZpbmFsIGxvbmcgc3RhcnRUaW1lTXMgPSBT
eXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLQotICAgICAgZmluYWwgQ2FtZXJhQ2hhcmFj
dGVyaXN0aWNzIGNhbWVyYUNoYXJhY3RlcmlzdGljczsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGNh
bWVyYUNoYXJhY3RlcmlzdGljcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0
aWNzKGNhbWVyYUlkKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotICAgICAgICBM
b2dnaW5nLmUoVEFHLCAiZ2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKCk6ICIgKyBleCk7Ci0gICAg
ICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQ+KCk7Ci0gICAgICB9Ci0KLSAg
ICAgIGZpbmFsIFN0cmVhbUNvbmZpZ3VyYXRpb25NYXAgc3RyZWFtTWFwID0KLSAgICAgICAgICBj
YW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5TQ0FMRVJfU1RS
RUFNX0NPTkZJR1VSQVRJT05fTUFQKTsKLQotICAgICAgUmFuZ2U8SW50ZWdlcj5bXSBmcHNSYW5n
ZXMgPQotICAgICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVy
aXN0aWNzLkNPTlRST0xfQUVfQVZBSUxBQkxFX1RBUkdFVF9GUFNfUkFOR0VTKTsKLSAgICAgIExp
c3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gZnJhbWVyYXRlUmFuZ2VzID0KLSAgICAg
ICAgICBjb252ZXJ0RnJhbWVyYXRlcyhmcHNSYW5nZXMsIGdldEZwc1VuaXRGYWN0b3IoZnBzUmFu
Z2VzKSk7Ci0gICAgICBMaXN0PFNpemU+IHNpemVzID0gZ2V0U3VwcG9ydGVkU2l6ZXMoY2FtZXJh
Q2hhcmFjdGVyaXN0aWNzKTsKLQotICAgICAgaW50IGRlZmF1bHRNYXhGcHMgPSAwOwotICAgICAg
Zm9yIChDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIGZyYW1lcmF0ZVJhbmdlIDogZnJhbWVy
YXRlUmFuZ2VzKSB7Ci0gICAgICAgIGRlZmF1bHRNYXhGcHMgPSBNYXRoLm1heChkZWZhdWx0TWF4
RnBzLCBmcmFtZXJhdGVSYW5nZS5tYXgpOwotICAgICAgfQotCi0gICAgICBmaW5hbCBMaXN0PENh
cHR1cmVGb3JtYXQ+IGZvcm1hdExpc3QgPSBuZXcgQXJyYXlMaXN0PENhcHR1cmVGb3JtYXQ+KCk7
Ci0gICAgICBmb3IgKFNpemUgc2l6ZSA6IHNpemVzKSB7Ci0gICAgICAgIGxvbmcgbWluRnJhbWVE
dXJhdGlvbk5zID0gMDsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBtaW5GcmFtZUR1cmF0aW9u
TnMgPSBzdHJlYW1NYXAuZ2V0T3V0cHV0TWluRnJhbWVEdXJhdGlvbigKLSAgICAgICAgICAgICAg
U3VyZmFjZVRleHR1cmUuY2xhc3MsIG5ldyBhbmRyb2lkLnV0aWwuU2l6ZShzaXplLndpZHRoLCBz
aXplLmhlaWdodCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAg
IC8vIGdldE91dHB1dE1pbkZyYW1lRHVyYXRpb24oKSBpcyBub3Qgc3VwcG9ydGVkIG9uIGFsbCBk
ZXZpY2VzLiBJZ25vcmUgc2lsZW50bHkuCi0gICAgICAgIH0KLSAgICAgICAgZmluYWwgaW50IG1h
eEZwcyA9IChtaW5GcmFtZUR1cmF0aW9uTnMgPT0gMCkKLSAgICAgICAgICAgID8gZGVmYXVsdE1h
eEZwcwotICAgICAgICAgICAgOiAoaW50KSBNYXRoLnJvdW5kKE5BTk9fU0VDT05EU19QRVJfU0VD
T05EIC8gbWluRnJhbWVEdXJhdGlvbk5zKSAqIDEwMDA7Ci0gICAgICAgIGZvcm1hdExpc3QuYWRk
KG5ldyBDYXB0dXJlRm9ybWF0KHNpemUud2lkdGgsIHNpemUuaGVpZ2h0LCAwLCBtYXhGcHMpKTsK
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkZvcm1hdDogIiArIHNpemUud2lkdGggKyAieCIgKyBz
aXplLmhlaWdodCArICJAIiArIG1heEZwcyk7Ci0gICAgICB9Ci0KLSAgICAgIGNhY2hlZFN1cHBv
cnRlZEZvcm1hdHMucHV0KGNhbWVyYUlkLCBmb3JtYXRMaXN0KTsKLSAgICAgIGZpbmFsIGxvbmcg
ZW5kVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICBMb2dnaW5n
LmQoVEFHLCAiR2V0IHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjYW1lcmEgaW5kZXggIiArIGNhbWVy
YUlkICsgIiBkb25lLiIKLSAgICAgICAgICAgICAgKyAiIFRpbWUgc3BlbnQ6ICIgKyAoZW5kVGlt
ZU1zIC0gc3RhcnRUaW1lTXMpICsgIiBtcy4iKTsKLSAgICAgIHJldHVybiBmb3JtYXRMaXN0Owot
ICAgIH0KLSAgfQotCi0gIC8vIENvbnZlcnQgZnJvbSBhbmRyb2lkLnV0aWwuU2l6ZSB0byBTaXpl
LgotICBwcml2YXRlIHN0YXRpYyBMaXN0PFNpemU+IGNvbnZlcnRTaXplcyhhbmRyb2lkLnV0aWwu
U2l6ZVtdIGNhbWVyYVNpemVzKSB7Ci0gICAgZmluYWwgTGlzdDxTaXplPiBzaXplcyA9IG5ldyBB
cnJheUxpc3Q8U2l6ZT4oKTsKLSAgICBmb3IgKGFuZHJvaWQudXRpbC5TaXplIHNpemUgOiBjYW1l
cmFTaXplcykgewotICAgICAgc2l6ZXMuYWRkKG5ldyBTaXplKHNpemUuZ2V0V2lkdGgoKSwgc2l6
ZS5nZXRIZWlnaHQoKSkpOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZXM7Ci0gIH0KLQotICAvLyBD
b252ZXJ0IGZyb20gYW5kcm9pZC51dGlsLlJhbmdlPEludGVnZXI+IHRvIENhcHR1cmVGb3JtYXQu
RnJhbWVyYXRlUmFuZ2UuCi0gIHN0YXRpYyBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFu
Z2U+IGNvbnZlcnRGcmFtZXJhdGVzKAotICAgICAgUmFuZ2U8SW50ZWdlcj5bXSBhcnJheVJhbmdl
cywgaW50IHVuaXRGYWN0b3IpIHsKLSAgICBmaW5hbCBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVy
YXRlUmFuZ2U+IHJhbmdlcyA9IG5ldyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVS
YW5nZT4oKTsKLSAgICBmb3IgKFJhbmdlPEludGVnZXI+IHJhbmdlIDogYXJyYXlSYW5nZXMpIHsK
LSAgICAgIHJhbmdlcy5hZGQobmV3IENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UoCi0gICAg
ICAgICAgcmFuZ2UuZ2V0TG93ZXIoKSAqIHVuaXRGYWN0b3IsIHJhbmdlLmdldFVwcGVyKCkgKiB1
bml0RmFjdG9yKSk7Ci0gICAgfQotICAgIHJldHVybiByYW5nZXM7Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQ2FtZXJhMlNlc3Npb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL0NhbWVyYTJTZXNzaW9uLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvQ2FtZXJhMlNlc3Npb24uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQ1MSAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5D
b250ZXh0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQg
YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4Y2VwdGlvbjsKLWltcG9ydCBh
bmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQ2FwdHVyZVNlc3Npb247Ci1pbXBvcnQgYW5k
cm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUNoYXJhY3RlcmlzdGljczsKLWltcG9ydCBhbmRy
b2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdh
cmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJh
Mi5DYW1lcmFNZXRhZGF0YTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FwdHVy
ZUZhaWx1cmU7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhcHR1cmVSZXF1ZXN0
OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuUmFuZ2U7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRv
d01hbmFnZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlz
dDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcud2Vi
cnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotaW1wb3J0IG9yZy53
ZWJydGMuTWV0cmljcy5IaXN0b2dyYW07Ci0KLUBUYXJnZXRBcGkoMjEpCi1wdWJsaWMgY2xhc3Mg
Q2FtZXJhMlNlc3Npb24gaW1wbGVtZW50cyBDYW1lcmFTZXNzaW9uIHsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmEyU2Vzc2lvbiI7Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTJTdGFydFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBI
aXN0b2dyYW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuQW5kcm9pZC5DYW1lcmEyLlN0YXJ0VGltZU1z
IiwgMSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVy
YTJTdG9wVGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldl
YlJUQy5BbmRyb2lkLkNhbWVyYTIuU3RvcFRpbWVNcyIsIDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBjYW1lcmEyUmVzb2x1dGlvbkhpc3RvZ3JhbSA9IEhp
c3RvZ3JhbS5jcmVhdGVFbnVtZXJhdGlvbigKLSAgICAgICJXZWJSVEMuQW5kcm9pZC5DYW1lcmEy
LlJlc29sdXRpb24iLCBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ09NTU9OX1JFU09MVVRJT05T
LnNpemUoKSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZW51bSBTZXNzaW9uU3RhdGUgeyBSVU5OSU5H
LCBTVE9QUEVEIH0KLQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgY2FtZXJhVGhyZWFkSGFuZGxl
cjsKLSAgcHJpdmF0ZSBmaW5hbCBDcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY2FsbGJhY2s7Ci0gIHBy
aXZhdGUgZmluYWwgRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcGxp
Y2F0aW9uQ29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFn
ZXI7Ci0gIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVI
ZWxwZXI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIGNhbWVyYUlkOwotICBwcml2YXRlIGZpbmFs
IGludCB3aWR0aDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgaGVpZ2h0OwotICBwcml2YXRlIGZpbmFs
IGludCBmcmFtZXJhdGU7Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgYXQgc3RhcnQKLSAgcHJpdmF0ZSBD
YW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzOwotICBwcml2YXRlIGlu
dCBjYW1lcmFPcmllbnRhdGlvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2FtZXJhRnJvbnRGYWNp
bmc7Ci0gIHByaXZhdGUgaW50IGZwc1VuaXRGYWN0b3I7Ci0gIHByaXZhdGUgQ2FwdHVyZUZvcm1h
dCBjYXB0dXJlRm9ybWF0OwotCi0gIC8vIEluaXRpYWxpemVkIHdoZW4gY2FtZXJhIG9wZW5zCi0g
IHByaXZhdGUgQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZTsKLSAgcHJpdmF0ZSBTdXJmYWNlIHN1
cmZhY2U7Ci0KLSAgLy8gSW5pdGlhbGl6ZWQgd2hlbiBjYXB0dXJlIHNlc3Npb24gaXMgY3JlYXRl
ZAotICBwcml2YXRlIENhbWVyYUNhcHR1cmVTZXNzaW9uIGNhcHR1cmVTZXNzaW9uOwotCi0gIC8v
IFN0YXRlCi0gIHByaXZhdGUgU2Vzc2lvblN0YXRlIHN0YXRlID0gU2Vzc2lvblN0YXRlLlJVTk5J
Tkc7Ci0gIHByaXZhdGUgYm9vbGVhbiBmaXJzdEZyYW1lUmVwb3J0ZWQgPSBmYWxzZTsKLQotICAv
LyBVc2VkIG9ubHkgZm9yIHN0YXRzLiBPbmx5IHVzZWQgb24gdGhlIGNhbWVyYSB0aHJlYWQuCi0g
IHByaXZhdGUgZmluYWwgbG9uZyBjb25zdHJ1Y3Rpb25UaW1lTnM7IC8vIENvbnN0cnVjdGlvbiB0
aW1lIG9mIHRoaXMgY2xhc3MuCi0KLSAgcHJpdmF0ZSBjbGFzcyBDYW1lcmFTdGF0ZUNhbGxiYWNr
IGV4dGVuZHMgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2sgewotICAgIHByaXZhdGUgU3RyaW5n
IGdldEVycm9yRGVzY3JpcHRpb24oaW50IGVycm9yQ29kZSkgewotICAgICAgc3dpdGNoIChlcnJv
ckNvZGUpIHsKLSAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJPUl9D
QU1FUkFfREVWSUNFOgotICAgICAgICAgIHJldHVybiAiQ2FtZXJhIGRldmljZSBoYXMgZW5jb3Vu
dGVyZWQgYSBmYXRhbCBlcnJvci4iOwotICAgICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0ZUNh
bGxiYWNrLkVSUk9SX0NBTUVSQV9ESVNBQkxFRDoKLSAgICAgICAgICByZXR1cm4gIkNhbWVyYSBk
ZXZpY2UgY291bGQgbm90IGJlIG9wZW5lZCBkdWUgdG8gYSBkZXZpY2UgcG9saWN5LiI7Ci0gICAg
ICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2suRVJST1JfQ0FNRVJBX0lOX1VTRToK
LSAgICAgICAgICByZXR1cm4gIkNhbWVyYSBkZXZpY2UgaXMgaW4gdXNlIGFscmVhZHkuIjsKLSAg
ICAgICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJPUl9DQU1FUkFfU0VSVklD
RToKLSAgICAgICAgICByZXR1cm4gIkNhbWVyYSBzZXJ2aWNlIGhhcyBlbmNvdW50ZXJlZCBhIGZh
dGFsIGVycm9yLiI7Ci0gICAgICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2suRVJS
T1JfTUFYX0NBTUVSQVNfSU5fVVNFOgotICAgICAgICAgIHJldHVybiAiQ2FtZXJhIGRldmljZSBj
b3VsZCBub3QgYmUgb3BlbmVkIGJlY2F1c2UiCi0gICAgICAgICAgICAgICsgIiB0aGVyZSBhcmUg
dG9vIG1hbnkgb3RoZXIgb3BlbiBjYW1lcmEgZGV2aWNlcy4iOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgIHJldHVybiAiVW5rbm93biBjYW1lcmEgZXJyb3I6ICIgKyBlcnJvckNvZGU7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EaXNjb25u
ZWN0ZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYSkgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFk
KCk7Ci0gICAgICBmaW5hbCBib29sZWFuIHN0YXJ0RmFpbHVyZSA9IChjYXB0dXJlU2Vzc2lvbiA9
PSBudWxsKTsKLSAgICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICBzdG9w
SW50ZXJuYWwoKTsKLSAgICAgIGlmIChzdGFydEZhaWx1cmUpIHsKLSAgICAgICAgY2FsbGJhY2su
b25GYWlsdXJlKCJDYW1lcmEgZGlzY29ubmVjdGVkIC8gZXZpY3RlZC4iKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGV2ZW50cy5vbkNhbWVyYURpc2Nvbm5lY3RlZChDYW1lcmEyU2Vzc2lvbi50
aGlzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bkVycm9yKENhbWVyYURldmljZSBjYW1lcmEsIGludCBlcnJvckNvZGUpIHsKLSAgICAgIGNoZWNr
SXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgcmVwb3J0RXJyb3IoZ2V0RXJyb3JEZXNjcmlwdGlv
bihlcnJvckNvZGUpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bk9wZW5lZChDYW1lcmFEZXZpY2UgY2FtZXJhKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJl
YWQoKTsKLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBvcGVuZWQuIik7Ci0gICAgICBj
YW1lcmFEZXZpY2UgPSBjYW1lcmE7Ci0KLSAgICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlIHN1cmZh
Y2VUZXh0dXJlID0gc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKTsKLSAg
ICAgIHN1cmZhY2VUZXh0dXJlLnNldERlZmF1bHRCdWZmZXJTaXplKGNhcHR1cmVGb3JtYXQud2lk
dGgsIGNhcHR1cmVGb3JtYXQuaGVpZ2h0KTsKLSAgICAgIHN1cmZhY2UgPSBuZXcgU3VyZmFjZShz
dXJmYWNlVGV4dHVyZSk7Ci0gICAgICB0cnkgewotICAgICAgICBjYW1lcmEuY3JlYXRlQ2FwdHVy
ZVNlc3Npb24oCi0gICAgICAgICAgICBBcnJheXMuYXNMaXN0KHN1cmZhY2UpLCBuZXcgQ2FwdHVy
ZVNlc3Npb25DYWxsYmFjaygpLCBjYW1lcmFUaHJlYWRIYW5kbGVyKTsKLSAgICAgIH0gY2F0Y2gg
KENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQg
dG8gY3JlYXRlIGNhcHR1cmUgc2Vzc2lvbi4gIiArIGUpOwotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DbG9zZWQoQ2Ft
ZXJhRGV2aWNlIGNhbWVyYSkgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEgZGV2aWNlIGNsb3NlZC4iKTsKLSAgICAgIGV2ZW50
cy5vbkNhbWVyYUNsb3NlZChDYW1lcmEyU2Vzc2lvbi50aGlzKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIGNsYXNzIENhcHR1cmVTZXNzaW9uQ2FsbGJhY2sgZXh0ZW5kcyBDYW1lcmFDYXB0dXJl
U2Vzc2lvbi5TdGF0ZUNhbGxiYWNrIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bkNvbmZpZ3VyZUZhaWxlZChDYW1lcmFDYXB0dXJlU2Vzc2lvbiBzZXNzaW9uKSB7Ci0gICAgICBj
aGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHNlc3Npb24uY2xvc2UoKTsKLSAgICAgIHJl
cG9ydEVycm9yKCJGYWlsZWQgdG8gY29uZmlndXJlIGNhcHR1cmUgc2Vzc2lvbi4iKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNvbmZpZ3VyZWQoQ2FtZXJhQ2Fw
dHVyZVNlc3Npb24gc2Vzc2lvbikgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0g
ICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhIGNhcHR1cmUgc2Vzc2lvbiBjb25maWd1cmVkLiIp
OwotICAgICAgY2FwdHVyZVNlc3Npb24gPSBzZXNzaW9uOwotICAgICAgdHJ5IHsKLSAgICAgICAg
LyoKLSAgICAgICAgICogVGhlIHZpYWJsZSBvcHRpb25zIGZvciB2aWRlbyBjYXB0dXJlIHJlcXVl
c3RzIGFyZToKLSAgICAgICAgICogVEVNUExBVEVfUFJFVklFVzogSGlnaCBmcmFtZSByYXRlIGlz
IGdpdmVuIHByaW9yaXR5IG92ZXIgdGhlIGhpZ2hlc3QtcXVhbGl0eQotICAgICAgICAgKiAgIHBv
c3QtcHJvY2Vzc2luZy4KLSAgICAgICAgICogVEVNUExBVEVfUkVDT1JEOiBTdGFibGUgZnJhbWUg
cmF0ZSBpcyB1c2VkLCBhbmQgcG9zdC1wcm9jZXNzaW5nIGlzIHNldCBmb3IgcmVjb3JkaW5nCi0g
ICAgICAgICAqICAgcXVhbGl0eS4KLSAgICAgICAgICovCi0gICAgICAgIGZpbmFsIENhcHR1cmVS
ZXF1ZXN0LkJ1aWxkZXIgY2FwdHVyZVJlcXVlc3RCdWlsZGVyID0KLSAgICAgICAgICAgIGNhbWVy
YURldmljZS5jcmVhdGVDYXB0dXJlUmVxdWVzdChDYW1lcmFEZXZpY2UuVEVNUExBVEVfUkVDT1JE
KTsKLSAgICAgICAgLy8gU2V0IGF1dG8gZXhwb3N1cmUgZnBzIHJhbmdlLgotICAgICAgICBjYXB0
dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUVfVEFSR0VUX0ZQ
U19SQU5HRSwKLSAgICAgICAgICAgIG5ldyBSYW5nZTxJbnRlZ2VyPihjYXB0dXJlRm9ybWF0LmZy
YW1lcmF0ZS5taW4gLyBmcHNVbml0RmFjdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXggLyBmcHNVbml0RmFjdG9yKSk7
Ci0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoCi0gICAgICAgICAgICBDYXB0dXJl
UmVxdWVzdC5DT05UUk9MX0FFX01PREUsIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUVfTU9ERV9P
Tik7Ci0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuQ09O
VFJPTF9BRV9MT0NLLCBmYWxzZSk7Ci0gICAgICAgIGNob29zZVN0YWJpbGl6YXRpb25Nb2RlKGNh
cHR1cmVSZXF1ZXN0QnVpbGRlcik7Ci0gICAgICAgIGNob29zZUZvY3VzTW9kZShjYXB0dXJlUmVx
dWVzdEJ1aWxkZXIpOwotCi0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5hZGRUYXJnZXQo
c3VyZmFjZSk7Ci0gICAgICAgIHNlc3Npb24uc2V0UmVwZWF0aW5nUmVxdWVzdCgKLSAgICAgICAg
ICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5idWlsZCgpLCBuZXcgQ2FtZXJhQ2FwdHVyZUNhbGxi
YWNrKCksIGNhbWVyYVRocmVhZEhhbmRsZXIpOwotICAgICAgfSBjYXRjaCAoQ2FtZXJhQWNjZXNz
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBzdGFydCBjYXB0
dXJlIHJlcXVlc3QuICIgKyBlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZygKLSAgICAgICAgICBuZXcgU3VyZmFj
ZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5lcigpIHsKLSAgICAg
ICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVB
dmFpbGFibGUoCi0gICAgICAgICAgICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFu
c2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICAgICAgICAgICAgY2hlY2tJc09u
Q2FtZXJhVGhyZWFkKCk7Ci0KLSAgICAgICAgICAgICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0
ZS5SVU5OSU5HKSB7Ci0gICAgICAgICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlRleHR1cmUgZnJh
bWUgY2FwdHVyZWQgYnV0IGNhbWVyYSBpcyBubyBsb25nZXIgcnVubmluZy4iKTsKLSAgICAgICAg
ICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAo
IWZpcnN0RnJhbWVSZXBvcnRlZCkgewotICAgICAgICAgICAgICAgIGZpcnN0RnJhbWVSZXBvcnRl
ZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZmluYWwgaW50IHN0YXJ0VGltZU1zID0KLSAgICAg
ICAgICAgICAgICAgICAgKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoU3lzdGVt
Lm5hbm9UaW1lKCkgLSBjb25zdHJ1Y3Rpb25UaW1lTnMpOwotICAgICAgICAgICAgICAgIGNhbWVy
YTJTdGFydFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMpOwotICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgaW50IHJvdGF0aW9uID0gZ2V0RnJhbWVPcmllbnRhdGlv
bigpOwotICAgICAgICAgICAgICBpZiAoaXNDYW1lcmFGcm9udEZhY2luZykgewotICAgICAgICAg
ICAgICAgIC8vIFVuZG8gdGhlIG1pcnJvciB0aGF0IHRoZSBPUyAiaGVscHMiIHVzIHdpdGguCi0g
ICAgICAgICAgICAgICAgLy8gaHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2Uv
YW5kcm9pZC9oYXJkd2FyZS9DYW1lcmEuaHRtbCNzZXREaXNwbGF5T3JpZW50YXRpb24oaW50KQot
ICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5
TWF0cmljZXMoCi0gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hdHJpeCwgUmVuZGVyZXJD
b21tb24uaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAvLyBVbmRvIGNhbWVyYSBvcmllbnRhdGlvbiAtIHdlIHJlcG9ydCBpdCBhcyByb3Rh
dGlvbiBpbnN0ZWFkLgotICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXRyaXggPQotICAgICAgICAg
ICAgICAgICAgUmVuZGVyZXJDb21tb24ucm90YXRlVGV4dHVyZU1hdHJpeCh0cmFuc2Zvcm1NYXRy
aXgsIC1jYW1lcmFPcmllbnRhdGlvbik7Ci0KLSAgICAgICAgICAgICAgZXZlbnRzLm9uVGV4dHVy
ZUZyYW1lQ2FwdHVyZWQoQ2FtZXJhMlNlc3Npb24udGhpcywgY2FwdHVyZUZvcm1hdC53aWR0aCwK
LSAgICAgICAgICAgICAgICAgIGNhcHR1cmVGb3JtYXQuaGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRy
YW5zZm9ybU1hdHJpeCwgcm90YXRpb24sIHRpbWVzdGFtcE5zKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICB9KTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEgZGV2aWNlIHN1Y2Nlc3Nm
dWxseSBzdGFydGVkLiIpOwotICAgICAgY2FsbGJhY2sub25Eb25lKENhbWVyYTJTZXNzaW9uLnRo
aXMpOwotICAgIH0KLQotICAgIC8vIFByZWZlcnMgb3B0aWNhbCBzdGFiaWxpemF0aW9uIG92ZXIg
c29mdHdhcmUgc3RhYmlsaXphdGlvbiBpZiBhdmFpbGFibGUuIE9ubHkgZW5hYmxlcyBvbmUgb2YK
LSAgICAvLyB0aGUgc3RhYmlsaXphdGlvbiBtb2RlcyBhdCBhIHRpbWUgYmVjYXVzZSBoYXZpbmcg
Ym90aCBlbmFibGVkIGNhbiBjYXVzZSBzdHJhbmdlIHJlc3VsdHMuCi0gICAgcHJpdmF0ZSB2b2lk
IGNob29zZVN0YWJpbGl6YXRpb25Nb2RlKENhcHR1cmVSZXF1ZXN0LkJ1aWxkZXIgY2FwdHVyZVJl
cXVlc3RCdWlsZGVyKSB7Ci0gICAgICBmaW5hbCBpbnRbXSBhdmFpbGFibGVPcHRpY2FsU3RhYmls
aXphdGlvbiA9IGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoCi0gICAgICAgICAgQ2FtZXJhQ2hh
cmFjdGVyaXN0aWNzLkxFTlNfSU5GT19BVkFJTEFCTEVfT1BUSUNBTF9TVEFCSUxJWkFUSU9OKTsK
LSAgICAgIGlmIChhdmFpbGFibGVPcHRpY2FsU3RhYmlsaXphdGlvbiAhPSBudWxsKSB7Ci0gICAg
ICAgIGZvciAoaW50IG1vZGUgOiBhdmFpbGFibGVPcHRpY2FsU3RhYmlsaXphdGlvbikgewotICAg
ICAgICAgIGlmIChtb2RlID09IENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFU
SU9OX01PREVfT04pIHsKLSAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2Fw
dHVyZVJlcXVlc3QuTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERSwKLSAgICAgICAgICAg
ICAgICBDYXB0dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFX09OKTsK
LSAgICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVyZVJlcXVlc3QuQ09O
VFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREUsCi0gICAgICAgICAgICAgICAgQ2FwdHVyZVJl
cXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREVfT0ZGKTsKLSAgICAgICAgICAg
IExvZ2dpbmcuZChUQUcsICJVc2luZyBvcHRpY2FsIHN0YWJpbGl6YXRpb24uIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBJ
ZiBubyBvcHRpY2FsIG1vZGUgaXMgYXZhaWxhYmxlLCB0cnkgc29mdHdhcmUuCi0gICAgICBmaW5h
bCBpbnRbXSBhdmFpbGFibGVWaWRlb1N0YWJpbGl6YXRpb24gPSBjYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3MuZ2V0KAotICAgICAgICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcy5DT05UUk9MX0FWQUlMQUJM
RV9WSURFT19TVEFCSUxJWkFUSU9OX01PREVTKTsKLSAgICAgIGZvciAoaW50IG1vZGUgOiBhdmFp
bGFibGVWaWRlb1N0YWJpbGl6YXRpb24pIHsKLSAgICAgICAgaWYgKG1vZGUgPT0gQ2FwdHVyZVJl
cXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREVfT04pIHsKLSAgICAgICAgICBj
YXB0dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RB
QklMSVpBVElPTl9NT0RFLAotICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX1ZJ
REVPX1NUQUJJTElaQVRJT05fTU9ERV9PTik7Ci0gICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWls
ZGVyLnNldChDYXB0dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9NT0RFLAot
ICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RBQklMSVpBVElPTl9N
T0RFX09GRik7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlVzaW5nIHZpZGVvIHN0YWJpbGl6
YXRpb24uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBM
b2dnaW5nLmQoVEFHLCAiU3RhYmlsaXphdGlvbiBub3QgYXZhaWxhYmxlLiIpOwotICAgIH0KLQot
ICAgIHByaXZhdGUgdm9pZCBjaG9vc2VGb2N1c01vZGUoQ2FwdHVyZVJlcXVlc3QuQnVpbGRlciBj
YXB0dXJlUmVxdWVzdEJ1aWxkZXIpIHsKLSAgICAgIGZpbmFsIGludFtdIGF2YWlsYWJsZUZvY3Vz
TW9kZXMgPQotICAgICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFj
dGVyaXN0aWNzLkNPTlRST0xfQUZfQVZBSUxBQkxFX01PREVTKTsKLSAgICAgIGZvciAoaW50IG1v
ZGUgOiBhdmFpbGFibGVGb2N1c01vZGVzKSB7Ci0gICAgICAgIGlmIChtb2RlID09IENhcHR1cmVS
ZXF1ZXN0LkNPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1ZJREVPKSB7Ci0gICAgICAgICAgY2Fw
dHVyZVJlcXVlc3RCdWlsZGVyLnNldCgKLSAgICAgICAgICAgICAgQ2FwdHVyZVJlcXVlc3QuQ09O
VFJPTF9BRl9NT0RFLCBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FGX01PREVfQ09OVElOVU9VU19W
SURFTyk7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlVzaW5nIGNvbnRpbnVvdXMgdmlkZW8g
YXV0by1mb2N1cy4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJBdXRvLWZvY3VzIGlzIG5vdCBhdmFpbGFibGUuIik7Ci0gICAg
fQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBDYW1lcmFDYXB0dXJlQ2FsbGJhY2sgZXh0ZW5kcyBD
YW1lcmFDYXB0dXJlU2Vzc2lvbi5DYXB0dXJlQ2FsbGJhY2sgewotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIG9uQ2FwdHVyZUZhaWxlZCgKLSAgICAgICAgQ2FtZXJhQ2FwdHVyZVNlc3Np
b24gc2Vzc2lvbiwgQ2FwdHVyZVJlcXVlc3QgcmVxdWVzdCwgQ2FwdHVyZUZhaWx1cmUgZmFpbHVy
ZSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhcHR1cmUgZmFpbGVkOiAiICsgZmFpbHVyZSk7
Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGNyZWF0ZShDcmVhdGVTZXNzaW9u
Q2FsbGJhY2sgY2FsbGJhY2ssIEV2ZW50cyBldmVudHMsCi0gICAgICBDb250ZXh0IGFwcGxpY2F0
aW9uQ29udGV4dCwgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2VyLAotICAgICAgU3VyZmFjZVRl
eHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFN0cmluZyBjYW1lcmFJZCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgaW50IGZyYW1lcmF0ZSkgewotICAgIG5ldyBDYW1lcmEy
U2Vzc2lvbihjYWxsYmFjaywgZXZlbnRzLCBhcHBsaWNhdGlvbkNvbnRleHQsIGNhbWVyYU1hbmFn
ZXIsIHN1cmZhY2VUZXh0dXJlSGVscGVyLAotICAgICAgICBjYW1lcmFJZCwgd2lkdGgsIGhlaWdo
dCwgZnJhbWVyYXRlKTsKLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhMlNlc3Npb24oQ3JlYXRlU2Vz
c2lvbkNhbGxiYWNrIGNhbGxiYWNrLCBFdmVudHMgZXZlbnRzLCBDb250ZXh0IGFwcGxpY2F0aW9u
Q29udGV4dCwKLSAgICAgIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlciwgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFN0cmluZyBjYW1lcmFJZCwKLSAgICAgIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAgIExvZ2dpbmcuZChUQUcs
ICJDcmVhdGUgbmV3IGNhbWVyYTIgc2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNhbWVyYUlkKTsKLQot
ICAgIGNvbnN0cnVjdGlvblRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotCi0gICAgdGhpcy5j
YW1lcmFUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIoKTsKLSAgICB0aGlzLmNhbGxiYWNrID0g
Y2FsbGJhY2s7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0gICAgdGhpcy5hcHBsaWNhdGlv
bkNvbnRleHQgPSBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0gICAgdGhpcy5jYW1lcmFNYW5hZ2VyID0g
Y2FtZXJhTWFuYWdlcjsKLSAgICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVscGVyID0gc3VyZmFjZVRl
eHR1cmVIZWxwZXI7Ci0gICAgdGhpcy5jYW1lcmFJZCA9IGNhbWVyYUlkOwotICAgIHRoaXMud2lk
dGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICB0aGlzLmZyYW1lcmF0
ZSA9IGZyYW1lcmF0ZTsKLQotICAgIHN0YXJ0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3Rh
cnQoKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywg
InN0YXJ0Iik7Ci0KLSAgICB0cnkgewotICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzID0gY2Ft
ZXJhTWFuYWdlci5nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2FtZXJhSWQpOwotICAgIH0gY2F0
Y2ggKGZpbmFsIENhbWVyYUFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigi
Z2V0Q2FtZXJhQ2hhcmFjdGVyaXN0aWNzKCk6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQot
ICAgIGNhbWVyYU9yaWVudGF0aW9uID0gY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuU0VOU09SX09SSUVOVEFUSU9OKTsKLSAgICBpc0NhbWVyYUZyb250RmFj
aW5nID0gY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuTEVO
U19GQUNJTkcpCi0gICAgICAgID09IENhbWVyYU1ldGFkYXRhLkxFTlNfRkFDSU5HX0ZST05UOwot
Ci0gICAgZmluZENhcHR1cmVGb3JtYXQoKTsKLSAgICBvcGVuQ2FtZXJhKCk7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgZmluZENhcHR1cmVGb3JtYXQoKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0KLSAgICBSYW5nZTxJbnRlZ2VyPltdIGZwc1JhbmdlcyA9Ci0gICAgICAgIGNhbWVy
YUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLkNPTlRST0xfQUVfQVZB
SUxBQkxFX1RBUkdFVF9GUFNfUkFOR0VTKTsKLSAgICBmcHNVbml0RmFjdG9yID0gQ2FtZXJhMkVu
dW1lcmF0b3IuZ2V0RnBzVW5pdEZhY3RvcihmcHNSYW5nZXMpOwotICAgIExpc3Q8Q2FwdHVyZUZv
cm1hdC5GcmFtZXJhdGVSYW5nZT4gZnJhbWVyYXRlUmFuZ2VzID0KLSAgICAgICAgQ2FtZXJhMkVu
dW1lcmF0b3IuY29udmVydEZyYW1lcmF0ZXMoZnBzUmFuZ2VzLCBmcHNVbml0RmFjdG9yKTsKLSAg
ICBMaXN0PFNpemU+IHNpemVzID0gQ2FtZXJhMkVudW1lcmF0b3IuZ2V0U3VwcG9ydGVkU2l6ZXMo
Y2FtZXJhQ2hhcmFjdGVyaXN0aWNzKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIHBy
ZXZpZXcgc2l6ZXM6ICIgKyBzaXplcyk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF2YWlsYWJsZSBm
cHMgcmFuZ2VzOiAiICsgZnJhbWVyYXRlUmFuZ2VzKTsKLQotICAgIGlmIChmcmFtZXJhdGVSYW5n
ZXMuaXNFbXB0eSgpIHx8IHNpemVzLmlzRW1wdHkoKSkgewotICAgICAgcmVwb3J0RXJyb3IoIk5v
IHN1cHBvcnRlZCBjYXB0dXJlIGZvcm1hdHMuIik7Ci0gICAgfQotCi0gICAgZmluYWwgQ2FwdHVy
ZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBiZXN0RnBzUmFuZ2UgPQotICAgICAgICBDYW1lcmFFbnVt
ZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKGZyYW1lcmF0
ZVJhbmdlcywgZnJhbWVyYXRlKTsKLQotICAgIGZpbmFsIFNpemUgYmVzdFNpemUgPSBDYW1lcmFF
bnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZFNpemUoc2l6ZXMsIHdpZHRoLCBo
ZWlnaHQpOwotICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5yZXBvcnRDYW1lcmFSZXNvbHV0
aW9uKGNhbWVyYTJSZXNvbHV0aW9uSGlzdG9ncmFtLCBiZXN0U2l6ZSk7Ci0KLSAgICBjYXB0dXJl
Rm9ybWF0ID0gbmV3IENhcHR1cmVGb3JtYXQoYmVzdFNpemUud2lkdGgsIGJlc3RTaXplLmhlaWdo
dCwgYmVzdEZwc1JhbmdlKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiVXNpbmcgY2FwdHVyZSBmb3Jt
YXQ6ICIgKyBjYXB0dXJlRm9ybWF0KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBvcGVuQ2FtZXJh
KCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgTG9nZ2luZy5kKFRBRywg
Ik9wZW5pbmcgY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0gICAgZXZlbnRzLm9uQ2FtZXJhT3Blbmlu
ZygpOwotCi0gICAgdHJ5IHsKLSAgICAgIGNhbWVyYU1hbmFnZXIub3BlbkNhbWVyYShjYW1lcmFJ
ZCwgbmV3IENhbWVyYVN0YXRlQ2FsbGJhY2soKSwgY2FtZXJhVGhyZWFkSGFuZGxlcik7Ci0gICAg
fSBjYXRjaCAoQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJG
YWlsZWQgdG8gb3BlbiBjYW1lcmE6ICIgKyBlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYW1lcmEy
IHNlc3Npb24gb24gY2FtZXJhICIgKyBjYW1lcmFJZCk7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0gICAgaWYgKHN0YXRlICE9IFNlc3Npb25TdGF0ZS5TVE9QUEVEKSB7Ci0gICAgICBm
aW5hbCBsb25nIHN0b3BTdGFydFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHN0YXRl
ID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAgICBzdG9wSW50ZXJuYWwoKTsKLSAgICAgIGZp
bmFsIGludCBzdG9wVGltZU1zID0gKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMo
U3lzdGVtLm5hbm9UaW1lKCkgLSBzdG9wU3RhcnRUaW1lKTsKLSAgICAgIGNhbWVyYTJTdG9wVGlt
ZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdG9wVGltZU1zKTsKLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgc3RvcEludGVybmFsKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGludGVy
bmFsIik7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICBzdXJmYWNlVGV4dHVy
ZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0KLSAgICBpZiAoY2FwdHVyZVNlc3Npb24gIT0gbnVs
bCkgewotICAgICAgY2FwdHVyZVNlc3Npb24uY2xvc2UoKTsKLSAgICAgIGNhcHR1cmVTZXNzaW9u
ID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHN1cmZhY2UgIT0gbnVsbCkgewotICAgICAgc3VyZmFj
ZS5yZWxlYXNlKCk7Ci0gICAgICBzdXJmYWNlID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGNhbWVy
YURldmljZSAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmFEZXZpY2UuY2xvc2UoKTsKLSAgICAgIGNh
bWVyYURldmljZSA9IG51bGw7Ci0gICAgfQotCi0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgZG9u
ZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKFN0cmluZyBlcnJvcikgewot
ICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIExvZ2dpbmcuZShUQUcsICJFcnJvcjog
IiArIGVycm9yKTsKLQotICAgIGZpbmFsIGJvb2xlYW4gc3RhcnRGYWlsdXJlID0gKGNhcHR1cmVT
ZXNzaW9uID09IG51bGwpOwotICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0gICAg
c3RvcEludGVybmFsKCk7Ci0gICAgaWYgKHN0YXJ0RmFpbHVyZSkgewotICAgICAgY2FsbGJhY2su
b25GYWlsdXJlKGVycm9yKTsKLSAgICB9IGVsc2UgewotICAgICAgZXZlbnRzLm9uQ2FtZXJhRXJy
b3IodGhpcywgZXJyb3IpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgaW50IGdldERldmljZU9y
aWVudGF0aW9uKCkgewotICAgIGludCBvcmllbnRhdGlvbiA9IDA7Ci0KLSAgICBXaW5kb3dNYW5h
Z2VyIHdtID0gKFdpbmRvd01hbmFnZXIpIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRTeXN0ZW1TZXJ2
aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwotICAgIHN3aXRjaCAod20uZ2V0RGVmYXVsdERp
c3BsYXkoKS5nZXRSb3RhdGlvbigpKSB7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fOTA6
Ci0gICAgICAgIG9yaWVudGF0aW9uID0gOTA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBT
dXJmYWNlLlJPVEFUSU9OXzE4MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAxODA7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzI3MDoKLSAgICAgICAgb3JpZW50
YXRpb24gPSAyNzA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9O
XzA6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBvcmllbnRhdGlvbiA9IDA7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICByZXR1cm4gb3JpZW50YXRpb247Ci0gIH0KLQotICBwcml2YXRlIGlu
dCBnZXRGcmFtZU9yaWVudGF0aW9uKCkgewotICAgIGludCByb3RhdGlvbiA9IGdldERldmljZU9y
aWVudGF0aW9uKCk7Ci0gICAgaWYgKCFpc0NhbWVyYUZyb250RmFjaW5nKSB7Ci0gICAgICByb3Rh
dGlvbiA9IDM2MCAtIHJvdGF0aW9uOwotICAgIH0KLSAgICByZXR1cm4gKGNhbWVyYU9yaWVudGF0
aW9uICsgcm90YXRpb24pICUgMzYwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNPbkNh
bWVyYVRocmVhZCgpIHsKLSAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBjYW1lcmFU
aHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJlYWQiKTsKLSAgICB9Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhQ2FwdHVyZXIuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL0NhbWVyYUNhcHR1cmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDQ0MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRs
ZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlz
OwotCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGFic3RyYWN0IGNs
YXNzIENhbWVyYUNhcHR1cmVyIGltcGxlbWVudHMgQ2FtZXJhVmlkZW9DYXB0dXJlciB7Ci0gIGVu
dW0gU3dpdGNoU3RhdGUgewotICAgIElETEUsIC8vIE5vIHN3aXRjaCByZXF1ZXN0ZWQuCi0gICAg
UEVORElORywgLy8gV2FpdGluZyBmb3IgcHJldmlvdXMgY2FwdHVyZSBzZXNzaW9uIHRvIG9wZW4u
Ci0gICAgSU5fUFJPR1JFU1MsIC8vIFdhaXRpbmcgZm9yIG5ldyBzd2l0Y2hlZCBjYXB0dXJlIHNl
c3Npb24gdG8gc3RhcnQuCi0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFH
ID0gIkNhbWVyYUNhcHR1cmVyIjsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE1BWF9PUEVO
X0NBTUVSQV9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBPUEVOX0NB
TUVSQV9ERUxBWV9NUyA9IDUwMDsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE9QRU5fQ0FN
RVJBX1RJTUVPVVQgPSAxMDAwMDsKLQotICBwcml2YXRlIGZpbmFsIENhbWVyYUVudW1lcmF0b3Ig
Y2FtZXJhRW51bWVyYXRvcjsKLSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2
ZW50c0hhbmRsZXI7Ci0gIHByaXZhdGUgZmluYWwgSGFuZGxlciB1aVRocmVhZEhhbmRsZXI7Ci0K
LSAgcHJpdmF0ZSBmaW5hbCBDYW1lcmFTZXNzaW9uLkNyZWF0ZVNlc3Npb25DYWxsYmFjayBjcmVh
dGVTZXNzaW9uQ2FsbGJhY2sgPQotICAgICAgbmV3IENhbWVyYVNlc3Npb24uQ3JlYXRlU2Vzc2lv
bkNhbGxiYWNrKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25E
b25lKENhbWVyYVNlc3Npb24gc2Vzc2lvbikgewotICAgICAgICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGUgc2Vzc2lvbiBkb25lIik7
Ci0gICAgICAgICAgdWlUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhvcGVuQ2FtZXJhVGlt
ZW91dFJ1bm5hYmxlKTsKLSAgICAgICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAg
ICAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZCh0cnVlIC8qIHN1Y2Nl
c3MgKi8pOwotICAgICAgICAgICAgc2Vzc2lvbk9wZW5pbmcgPSBmYWxzZTsKLSAgICAgICAgICAg
IGN1cnJlbnRTZXNzaW9uID0gc2Vzc2lvbjsKLSAgICAgICAgICAgIGNhbWVyYVN0YXRpc3RpY3Mg
PSBuZXcgQ2FtZXJhU3RhdGlzdGljcyhzdXJmYWNlSGVscGVyLCBldmVudHNIYW5kbGVyKTsKLSAg
ICAgICAgICAgIGZpcnN0RnJhbWVPYnNlcnZlZCA9IGZhbHNlOwotICAgICAgICAgICAgc3RhdGVM
b2NrLm5vdGlmeUFsbCgpOwotCi0gICAgICAgICAgICBpZiAoc3dpdGNoU3RhdGUgPT0gU3dpdGNo
U3RhdGUuSU5fUFJPR1JFU1MpIHsKLSAgICAgICAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRs
ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1l
cmFTd2l0Y2hEb25lKGNhbWVyYUVudW1lcmF0b3IuaXNGcm9udEZhY2luZyhjYW1lcmFOYW1lKSk7
Ci0gICAgICAgICAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlciA9IG51bGw7Ci0gICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5JRExFOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChzd2l0Y2hTdGF0ZSA9PSBTd2l0Y2hTdGF0ZS5QRU5ESU5HKSB7
Ci0gICAgICAgICAgICAgIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUuSURMRTsKLSAgICAgICAg
ICAgICAgc3dpdGNoQ2FtZXJhSW50ZXJuYWwoc3dpdGNoRXZlbnRzSGFuZGxlcik7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAg
ICAgIHB1YmxpYyB2b2lkIG9uRmFpbHVyZShTdHJpbmcgZXJyb3IpIHsKLSAgICAgICAgICBjaGVj
a0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgICAgICB1aVRocmVhZEhhbmRsZXIucmVtb3ZlQ2Fs
bGJhY2tzKG9wZW5DYW1lcmFUaW1lb3V0UnVubmFibGUpOwotICAgICAgICAgIHN5bmNocm9uaXpl
ZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9uQ2FwdHVyZXJT
dGFydGVkKGZhbHNlIC8qIHN1Y2Nlc3MgKi8pOwotICAgICAgICAgICAgb3BlbkF0dGVtcHRzUmVt
YWluaW5nLS07Ci0KLSAgICAgICAgICAgIGlmIChvcGVuQXR0ZW1wdHNSZW1haW5pbmcgPD0gMCkg
ewotICAgICAgICAgICAgICBMb2dnaW5nLncoVEFHLCAiT3BlbmluZyBjYW1lcmEgZmFpbGVkLCBw
YXNzaW5nOiAiICsgZXJyb3IpOwotICAgICAgICAgICAgICBzZXNzaW9uT3BlbmluZyA9IGZhbHNl
OwotICAgICAgICAgICAgICBzdGF0ZUxvY2subm90aWZ5QWxsKCk7Ci0KLSAgICAgICAgICAgICAg
aWYgKHN3aXRjaFN0YXRlICE9IFN3aXRjaFN0YXRlLklETEUpIHsKLSAgICAgICAgICAgICAgICBp
ZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICBzd2l0
Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoZXJyb3IpOwotICAgICAgICAgICAg
ICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUuSURMRTsKLSAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcihlcnJvcik7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBMb2dnaW5nLncoVEFHLCAiT3Bl
bmluZyBjYW1lcmEgZmFpbGVkLCByZXRyeTogIiArIGVycm9yKTsKLQotICAgICAgICAgICAgICBj
cmVhdGVTZXNzaW9uSW50ZXJuYWwoT1BFTl9DQU1FUkFfREVMQVlfTVMpOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfTsKLQotICBwcml2YXRlIGZpbmFsIENh
bWVyYVNlc3Npb24uRXZlbnRzIGNhbWVyYVNlc3Npb25FdmVudHNIYW5kbGVyID0gbmV3IENhbWVy
YVNlc3Npb24uRXZlbnRzKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2Ft
ZXJhT3BlbmluZygpIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3lu
Y2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKGN1cnJlbnRTZXNzaW9uICE9IG51
bGwpIHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25DYW1lcmFPcGVuaW5nIHdoaWxlIHNl
c3Npb24gd2FzIG9wZW4uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IGV2ZW50c0hhbmRsZXIub25DYW1lcmFPcGVuaW5nKGNhbWVyYU5hbWUpOwotICAgICAgfQotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRXJyb3IoQ2FtZXJh
U2Vzc2lvbiBzZXNzaW9uLCBTdHJpbmcgZXJyb3IpIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKHNl
c3Npb24gIT0gY3VycmVudFNlc3Npb24pIHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25D
YW1lcmFFcnJvciBmcm9tIGFub3RoZXIgc2Vzc2lvbjogIiArIGVycm9yKTsKLSAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKGVy
cm9yKTsKLSAgICAgICAgc3RvcENhcHR1cmUoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYURpc2Nvbm5lY3RlZChDYW1lcmFTZXNzaW9u
IHNlc3Npb24pIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hy
b25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Np
b24pIHsKLSAgICAgICAgICBMb2dnaW5nLncoVEFHLCAib25DYW1lcmFEaXNjb25uZWN0ZWQgZnJv
bSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFEaXNjb25uZWN0ZWQoKTsKLSAgICAgICAgc3RvcENh
cHR1cmUoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9p
ZCBvbkNhbWVyYUNsb3NlZChDYW1lcmFTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAgIGNoZWNrSXNP
bkNhbWVyYVRocmVhZCgpOwotICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAg
ICAgaWYgKHNlc3Npb24gIT0gY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNlc3Npb24gIT0gbnVs
bCkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJvbkNhbWVyYUNsb3NlZCBmcm9tIGFub3Ro
ZXIgc2Vzc2lvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXZl
bnRzSGFuZGxlci5vbkNhbWVyYUNsb3NlZCgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAg
IENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgYnl0ZVtdIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCkgewotICAgICAgY2hlY2tJc09uQ2FtZXJh
VGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICBpZiAo
c2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lvbikgewotICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJv
bkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkIGZyb20gYW5vdGhlciBzZXNzaW9uLiIpOwotICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWZpcnN0RnJhbWVPYnNlcnZlZCkg
ewotICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAg
ICAgICAgZmlyc3RGcmFtZU9ic2VydmVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBjYW1l
cmFTdGF0aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25CeXRl
QnVmZmVyRnJhbWVDYXB0dXJlZChkYXRhLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbiwgdGltZXN0
YW1wKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
blRleHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LAotICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1h
dHJpeCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCkgewotICAgICAgY2hlY2tJc09uQ2Ft
ZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICBp
ZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lvbikgewotICAgICAgICAgIExvZ2dpbmcudyhUQUcs
ICJvblRleHR1cmVGcmFtZUNhcHR1cmVkIGZyb20gYW5vdGhlciBzZXNzaW9uLiIpOwotICAgICAg
ICAgIHN1cmZhY2VIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGlmICghZmlyc3RGcmFtZU9ic2VydmVkKSB7Ci0gICAgICAg
ICAgZXZlbnRzSGFuZGxlci5vbkZpcnN0RnJhbWVBdmFpbGFibGUoKTsKLSAgICAgICAgICBmaXJz
dEZyYW1lT2JzZXJ2ZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhbWVyYVN0YXRpc3Rp
Y3MuYWRkRnJhbWUoKTsKLSAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vblRleHR1cmVGcmFtZUNh
cHR1cmVkKAotICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFuc2Zv
cm1NYXRyaXgsIHJvdGF0aW9uLCB0aW1lc3RhbXApOwotICAgICAgfQotICAgIH0KLSAgfTsKLQot
ICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG9wZW5DYW1lcmFUaW1lb3V0UnVubmFibGUgPSBuZXcg
UnVubmFibGUoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKCJDYW1lcmEgZmFpbGVkIHRvIHN0YXJ0IHdp
dGhpbiB0aW1lb3V0LiIpOwotICAgIH0KLSAgfTsKLQotICAvLyBJbml0aWFsaXplZCBvbiBpbml0
aWFsaXplCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgcHJpdmF0ZSBIYW5kbGVy
IGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRl
eHQ7Ci0gIHByaXZhdGUgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyOwotICBwcml2
YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VIZWxwZXI7Ci0KLSAgcHJpdmF0ZSBmaW5h
bCBPYmplY3Qgc3RhdGVMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGJvb2xlYW4gc2Vz
c2lvbk9wZW5pbmc7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgQ2FtZXJh
U2Vzc2lvbiBjdXJyZW50U2Vzc2lvbjsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJp
dmF0ZSBTdHJpbmcgY2FtZXJhTmFtZTsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJp
dmF0ZSBpbnQgd2lkdGg7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgaW50
IGhlaWdodDsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBpbnQgZnJhbWVy
YXRlOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2YXRlIGludCBvcGVuQXR0ZW1w
dHNSZW1haW5pbmc7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgU3dpdGNo
U3RhdGUgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0ZS5JRExFOyAvKiBndWFyZGVkIGJ5IHN0YXRl
TG9jayAqLwotICBwcml2YXRlIENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxl
cjsgLyogZ3VhcmRlZCBieSBzdGF0ZUxvY2sgKi8KLSAgLy8gVmFsaWQgZnJvbSBvbkRvbmUgY2Fs
bCB1bnRpbCBzdG9wQ2FwdHVyZSwgb3RoZXJ3aXNlIG51bGwuCi0gIHByaXZhdGUgQ2FtZXJhU3Rh
dGlzdGljcyBjYW1lcmFTdGF0aXN0aWNzOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBw
cml2YXRlIGJvb2xlYW4gZmlyc3RGcmFtZU9ic2VydmVkOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9j
ayAqLwotCi0gIHB1YmxpYyBDYW1lcmFDYXB0dXJlcigKLSAgICAgIFN0cmluZyBjYW1lcmFOYW1l
LCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIsIENhbWVyYUVudW1lcmF0b3IgY2Ft
ZXJhRW51bWVyYXRvcikgewotICAgIGlmIChldmVudHNIYW5kbGVyID09IG51bGwpIHsKLSAgICAg
IGV2ZW50c0hhbmRsZXIgPSBuZXcgQ2FtZXJhRXZlbnRzSGFuZGxlcigpIHsKLSAgICAgICAgQE92
ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRXJyb3IoU3RyaW5nIGVycm9yRGVz
Y3JpcHRpb24pIHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNh
bWVyYURpc2Nvbm5lY3RlZCgpIHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMg
dm9pZCBvbkNhbWVyYUZyZWV6ZWQoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pIHt9Ci0gICAgICAg
IEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYU9wZW5pbmcoU3RyaW5nIGNh
bWVyYU5hbWUpIHt9Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkZp
cnN0RnJhbWVBdmFpbGFibGUoKSB7fQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGlj
IHZvaWQgb25DYW1lcmFDbG9zZWQoKSB7fQotICAgICAgfTsKLSAgICB9Ci0KLSAgICB0aGlzLmV2
ZW50c0hhbmRsZXIgPSBldmVudHNIYW5kbGVyOwotICAgIHRoaXMuY2FtZXJhRW51bWVyYXRvciA9
IGNhbWVyYUVudW1lcmF0b3I7Ci0gICAgdGhpcy5jYW1lcmFOYW1lID0gY2FtZXJhTmFtZTsKLSAg
ICB1aVRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihMb29wZXIuZ2V0TWFpbkxvb3BlcigpKTsK
LQotICAgIGZpbmFsIFN0cmluZ1tdIGRldmljZU5hbWVzID0gY2FtZXJhRW51bWVyYXRvci5nZXRE
ZXZpY2VOYW1lcygpOwotCi0gICAgaWYgKGRldmljZU5hbWVzLmxlbmd0aCA9PSAwKSB7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gY2FtZXJhcyBhdHRhY2hlZC4iKTsKLSAg
ICB9Ci0gICAgaWYgKCFBcnJheXMuYXNMaXN0KGRldmljZU5hbWVzKS5jb250YWlucyh0aGlzLmNh
bWVyYU5hbWUpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAot
ICAgICAgICAgICJDYW1lcmEgbmFtZSAiICsgdGhpcy5jYW1lcmFOYW1lICsgIiBkb2VzIG5vdCBt
YXRjaCBhbnkga25vd24gY2FtZXJhIGRldmljZS4iKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgaW5pdGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNl
VGV4dHVyZUhlbHBlciwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYXB0dXJl
ck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIpIHsKLSAgICB0aGlzLmFwcGxpY2F0aW9uQ29udGV4
dCA9IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICB0aGlzLmNhcHR1cmVyT2JzZXJ2ZXIgPSBjYXB0
dXJlck9ic2VydmVyOwotICAgIHRoaXMuc3VyZmFjZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVs
cGVyOwotICAgIHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9Ci0gICAgICAgIHN1cmZhY2VUZXh0
dXJlSGVscGVyID09IG51bGwgPyBudWxsIDogc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxl
cigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN0YXJ0Q2FwdHVyZShpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
c3RhcnRDYXB0dXJlOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBmcmFtZXJhdGUp
OwotCi0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgIGlmIChzZXNzaW9uT3Bl
bmluZyB8fCBjdXJyZW50U2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcs
ICJTZXNzaW9uIGFscmVhZHkgb3BlbiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAg
ICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAg
ICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0KLSAgICAgIHNlc3Npb25PcGVuaW5nID0g
dHJ1ZTsKLSAgICAgIG9wZW5BdHRlbXB0c1JlbWFpbmluZyA9IE1BWF9PUEVOX0NBTUVSQV9BVFRF
TVBUUzsKLSAgICAgIGNyZWF0ZVNlc3Npb25JbnRlcm5hbCgwKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgY3JlYXRlU2Vzc2lvbkludGVybmFsKGludCBkZWxheU1zKSB7Ci0gICAgdWlU
aHJlYWRIYW5kbGVyLnBvc3REZWxheWVkKG9wZW5DYW1lcmFUaW1lb3V0UnVubmFibGUsIGRlbGF5
TXMgKyBPUEVOX0NBTUVSQV9USU1FT1VUKTsKLSAgICBjYW1lcmFUaHJlYWRIYW5kbGVyLnBvc3RE
ZWxheWVkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICBjcmVhdGVDYW1lcmFTZXNzaW9uKGNyZWF0ZVNlc3Npb25DYWxs
YmFjaywgY2FtZXJhU2Vzc2lvbkV2ZW50c0hhbmRsZXIsIGFwcGxpY2F0aW9uQ29udGV4dCwKLSAg
ICAgICAgICAgIHN1cmZhY2VIZWxwZXIsIGNhbWVyYU5hbWUsIHdpZHRoLCBoZWlnaHQsIGZyYW1l
cmF0ZSk7Ci0gICAgICB9Ci0gICAgfSwgZGVsYXlNcyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgc3RvcENhcHR1cmUoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgY2Fw
dHVyZSIpOwotCi0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgIHdoaWxlIChz
ZXNzaW9uT3BlbmluZykgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0dXJlOiBX
YWl0aW5nIGZvciBzZXNzaW9uIHRvIG9wZW4iKTsKLSAgICAgICAgVGhyZWFkVXRpbHMud2FpdFVu
aW50ZXJydXB0aWJseShzdGF0ZUxvY2spOwotICAgICAgfQotCi0gICAgICBpZiAoY3VycmVudFNl
c3Npb24gIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0dXJlOiBO
dWxsaW5nIHNlc3Npb24iKTsKLSAgICAgICAgY2FtZXJhU3RhdGlzdGljcy5yZWxlYXNlKCk7Ci0g
ICAgICAgIGNhbWVyYVN0YXRpc3RpY3MgPSBudWxsOwotICAgICAgICBmaW5hbCBDYW1lcmFTZXNz
aW9uIG9sZFNlc3Npb24gPSBjdXJyZW50U2Vzc2lvbjsKLSAgICAgICAgY2FtZXJhVGhyZWFkSGFu
ZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBvbGRTZXNzaW9uLnN0b3AoKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgICBjdXJyZW50U2Vzc2lvbiA9IG51bGw7Ci0g
ICAgICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0b3BwZWQoKTsKLSAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmU6IE5vIHNlc3Npb24gb3Bl
biIpOwotICAgICAgfQotICAgIH0KLQotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmUg
ZG9uZSIpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNoYW5nZUNhcHR1cmVG
b3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgImNoYW5nZUNhcHR1cmVGb3JtYXQ6ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCAr
ICJAIiArIGZyYW1lcmF0ZSk7Ci0gICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAg
IHN0b3BDYXB0dXJlKCk7Ci0gICAgICBzdGFydENhcHR1cmUod2lkdGgsIGhlaWdodCwgZnJhbWVy
YXRlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgp
IHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSIpOwotICAgIHN0b3BDYXB0dXJlKCk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKGZpbmFsIENhbWVy
YVN3aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxlcikgewotICAgIExvZ2dpbmcuZChUQUcs
ICJzd2l0Y2hDYW1lcmEiKTsKLSAgICBjYW1lcmFUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgIHN3aXRjaENhbWVyYUludGVybmFsKHN3aXRjaEV2ZW50c0hhbmRsZXIpOwotICAgICAgfQot
ICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzU2NyZWVuY2Fz
dCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwcmludFN0YWNr
VHJhY2UoKSB7Ci0gICAgVGhyZWFkIGNhbWVyYVRocmVhZCA9IG51bGw7Ci0gICAgaWYgKGNhbWVy
YVRocmVhZEhhbmRsZXIgIT0gbnVsbCkgewotICAgICAgY2FtZXJhVGhyZWFkID0gY2FtZXJhVGhy
ZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKTsKLSAgICB9Ci0gICAgaWYgKGNhbWVy
YVRocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxlbWVudFtdIGNhbWVyYVN0YWNr
VHJhY2UgPSBjYW1lcmFUaHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgaWYgKGNhbWVyYVN0
YWNrVHJhY2UubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FtZXJhQ2Fw
dHVyZXIgc3RhY2sgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1lbnQgdHJh
Y2VFbGVtIDogY2FtZXJhU3RhY2tUcmFjZSkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsIHRy
YWNlRWxlbS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBzd2l0Y2hDYW1lcmFJbnRlcm5hbChmaW5hbCBDYW1lcmFTd2l0Y2hIYW5k
bGVyIHN3aXRjaEV2ZW50c0hhbmRsZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2Ft
ZXJhIGludGVybmFsIik7Ci0KLSAgICBmaW5hbCBTdHJpbmdbXSBkZXZpY2VOYW1lcyA9IGNhbWVy
YUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKTsKLQotICAgIGlmIChkZXZpY2VOYW1lcy5sZW5n
dGggPCAyKSB7Ci0gICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAg
ICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiTm8gY2FtZXJhIHRv
IHN3aXRjaCB0by4iKTsKLSAgICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzeW5j
aHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgaWYgKHN3aXRjaFN0YXRlICE9IFN3aXRjaFN0
YXRlLklETEUpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYSBzd2l0Y2hJ
blByb2dyZXNzIik7Ci0gICAgICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwpIHsK
LSAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNoRXJyb3IoIkNhbWVy
YSBzd2l0Y2ggYWxyZWFkeSBpbiBwcm9ncmVzcy4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc2Vzc2lvbk9wZW5pbmcgJiYgY3VycmVudFNlc3Np
b24gPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhOiBObyBz
ZXNzaW9uIG9wZW4iKTsKLSAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiQ2Ft
ZXJhIGlzIG5vdCBydW5uaW5nLiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLQotICAgICAgdGhpcy5zd2l0Y2hFdmVudHNIYW5kbGVyID0gc3dpdGNoRXZlbnRzSGFuZGxl
cjsKLSAgICAgIGlmIChzZXNzaW9uT3BlbmluZykgewotICAgICAgICBzd2l0Y2hTdGF0ZSA9IFN3
aXRjaFN0YXRlLlBFTkRJTkc7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUuSU5fUFJPR1JFU1M7Ci0gICAgICB9Ci0KLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmE6IFN0b3BwaW5nIHNlc3Npb24iKTsKLSAg
ICAgIGNhbWVyYVN0YXRpc3RpY3MucmVsZWFzZSgpOwotICAgICAgY2FtZXJhU3RhdGlzdGljcyA9
IG51bGw7Ci0gICAgICBmaW5hbCBDYW1lcmFTZXNzaW9uIG9sZFNlc3Npb24gPSBjdXJyZW50U2Vz
c2lvbjsKLSAgICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAg
b2xkU2Vzc2lvbi5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgY3VycmVudFNl
c3Npb24gPSBudWxsOwotCi0gICAgICBpbnQgY2FtZXJhTmFtZUluZGV4ID0gQXJyYXlzLmFzTGlz
dChkZXZpY2VOYW1lcykuaW5kZXhPZihjYW1lcmFOYW1lKTsKLSAgICAgIGNhbWVyYU5hbWUgPSBk
ZXZpY2VOYW1lc1soY2FtZXJhTmFtZUluZGV4ICsgMSkgJSBkZXZpY2VOYW1lcy5sZW5ndGhdOwot
Ci0gICAgICBzZXNzaW9uT3BlbmluZyA9IHRydWU7Ci0gICAgICBvcGVuQXR0ZW1wdHNSZW1haW5p
bmcgPSAxOwotICAgICAgY3JlYXRlU2Vzc2lvbkludGVybmFsKDApOwotICAgIH0KLSAgICBMb2dn
aW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBj
aGVja0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkg
IT0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSkgewotICAgICAg
TG9nZ2luZy5lKFRBRywgIkNoZWNrIGlzIG9uIGNhbWVyYSB0aHJlYWQgZmFpbGVkLiIpOwotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vdCBvbiBjYW1lcmEgdGhyZWFkLiIpOwot
ICAgIH0KLSAgfQotCi0gIHByb3RlY3RlZCBTdHJpbmcgZ2V0Q2FtZXJhTmFtZSgpIHsKLSAgICBz
eW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgcmV0dXJuIGNhbWVyYU5hbWU7Ci0gICAg
fQotICB9Ci0KLSAgYWJzdHJhY3QgcHJvdGVjdGVkIHZvaWQgY3JlYXRlQ2FtZXJhU2Vzc2lvbigK
LSAgICAgIENhbWVyYVNlc3Npb24uQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNyZWF0ZVNlc3Npb25D
YWxsYmFjaywgQ2FtZXJhU2Vzc2lvbi5FdmVudHMgZXZlbnRzLAotICAgICAgQ29udGV4dCBhcHBs
aWNhdGlvbkNvbnRleHQsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVy
LCBTdHJpbmcgY2FtZXJhTmFtZSwKLSAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZy
YW1lcmF0ZSk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0aW9uQW5k
cm9pZC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2Ft
ZXJhRW51bWVyYXRpb25BbmRyb2lkLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDcgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3Rh
dGljIGphdmEubGFuZy5NYXRoLmFiczsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuSW1hZ2VG
b3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJy
YXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29t
cGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcud2VicnRjLk1ldHJp
Y3MuSGlzdG9ncmFtOwotCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGlj
IGNsYXNzIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZCB7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGlj
IFN0cmluZyBUQUcgPSAiQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkIjsKLQotICBzdGF0aWMgZmlu
YWwgQXJyYXlMaXN0PFNpemU+IENPTU1PTl9SRVNPTFVUSU9OUyA9IG5ldyBBcnJheUxpc3Q8U2l6
ZT4oQXJyYXlzLmFzTGlzdCgKLSAgICAgIC8vIDAsIFVua25vd24gcmVzb2x1dGlvbgotICAgICAg
bmV3IFNpemUoMTYwLCAxMjApLCAvLyAxLCBRUVZHQQotICAgICAgbmV3IFNpemUoMjQwLCAxNjAp
LCAvLyAyLCBIUVZHQQotICAgICAgbmV3IFNpemUoMzIwLCAyNDApLCAvLyAzLCBRVkdBCi0gICAg
ICBuZXcgU2l6ZSg0MDAsIDI0MCksIC8vIDQsIFdRVkdBCi0gICAgICBuZXcgU2l6ZSg0ODAsIDMy
MCksIC8vIDUsIEhWR0EKLSAgICAgIG5ldyBTaXplKDY0MCwgMzYwKSwgLy8gNiwgbkhECi0gICAg
ICBuZXcgU2l6ZSg2NDAsIDQ4MCksIC8vIDcsIFZHQQotICAgICAgbmV3IFNpemUoNzY4LCA0ODAp
LCAvLyA4LCBXVkdBCi0gICAgICBuZXcgU2l6ZSg4NTQsIDQ4MCksIC8vIDksIEZXVkdBCi0gICAg
ICBuZXcgU2l6ZSg4MDAsIDYwMCksIC8vIDEwLCBTVkdBCi0gICAgICBuZXcgU2l6ZSg5NjAsIDU0
MCksIC8vIDExLCBxSEQKLSAgICAgIG5ldyBTaXplKDk2MCwgNjQwKSwgLy8gMTIsIERWR0EKLSAg
ICAgIG5ldyBTaXplKDEwMjQsIDU3NiksIC8vIDEzLCBXU1ZHQQotICAgICAgbmV3IFNpemUoMTAy
NCwgNjAwKSwgLy8gMTQsIFdWU0dBCi0gICAgICBuZXcgU2l6ZSgxMjgwLCA3MjApLCAvLyAxNSwg
SEQKLSAgICAgIG5ldyBTaXplKDEyODAsIDEwMjQpLCAvLyAxNiwgU1hHQQotICAgICAgbmV3IFNp
emUoMTkyMCwgMTA4MCksIC8vIDE3LCBGdWxsIEhECi0gICAgICBuZXcgU2l6ZSgxOTIwLCAxNDQw
KSwgLy8gMTgsIEZ1bGwgSEQgNDozCi0gICAgICBuZXcgU2l6ZSgyNTYwLCAxNDQwKSwgLy8gMTks
IFFIRAotICAgICAgbmV3IFNpemUoMzg0MCwgMjE2MCkgLy8gMjAsIFVIRAotICAgICAgKSk7Ci0K
LSAgcHVibGljIHN0YXRpYyBjbGFzcyBDYXB0dXJlRm9ybWF0IHsKLSAgICAvLyBDbGFzcyB0byBy
ZXByZXNlbnQgYSBmcmFtZXJhdGUgcmFuZ2UuIFRoZSBmcmFtZXJhdGUgdmFyaWVzIGJlY2F1c2Ug
b2YgbGlnaHRuaW5nIGNvbmRpdGlvbnMuCi0gICAgLy8gVGhlIHZhbHVlcyBhcmUgbXVsdGlwbGll
ZCBieSAxMDAwLCBzbyAxMDAwIHJlcHJlc2VudHMgb25lIGZyYW1lIHBlciBzZWNvbmQuCi0gICAg
cHVibGljIHN0YXRpYyBjbGFzcyBGcmFtZXJhdGVSYW5nZSB7Ci0gICAgICBwdWJsaWMgaW50IG1p
bjsKLSAgICAgIHB1YmxpYyBpbnQgbWF4OwotCi0gICAgICBwdWJsaWMgRnJhbWVyYXRlUmFuZ2Uo
aW50IG1pbiwgaW50IG1heCkgewotICAgICAgICB0aGlzLm1pbiA9IG1pbjsKLSAgICAgICAgdGhp
cy5tYXggPSBtYXg7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN0
cmluZyB0b1N0cmluZygpIHsKLSAgICAgICAgcmV0dXJuICJbIiArIChtaW4gLyAxMDAwLjBmKSAr
ICI6IiArIChtYXggLyAxMDAwLjBmKSArICJdIjsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7Ci0gICAgICAgIGlm
ICghKG90aGVyIGluc3RhbmNlb2YgRnJhbWVyYXRlUmFuZ2UpKSB7Ci0gICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGZpbmFsIEZyYW1lcmF0ZVJhbmdlIG90aGVyRnJh
bWVyYXRlID0gKEZyYW1lcmF0ZVJhbmdlKSBvdGhlcjsKLSAgICAgICAgcmV0dXJuIG1pbiA9PSBv
dGhlckZyYW1lcmF0ZS5taW4gJiYgbWF4ID09IG90aGVyRnJhbWVyYXRlLm1heDsKLSAgICAgIH0K
LQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAg
ICAvLyBVc2UgcHJpbWUgY2xvc2UgdG8gMl4xNiB0byBhdm9pZCBjb2xsaXNpb25zIGZvciBub3Jt
YWwgdmFsdWVzIGxlc3MgdGhhbiAyXjE2LgotICAgICAgICByZXR1cm4gMSArIDY1NTM3ICogbWlu
ICsgbWF4OwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBpbnQgd2lkdGg7Ci0g
ICAgcHVibGljIGZpbmFsIGludCBoZWlnaHQ7Ci0gICAgcHVibGljIGZpbmFsIEZyYW1lcmF0ZVJh
bmdlIGZyYW1lcmF0ZTsKLQotICAgIC8vIFRPRE8oaGJvcyk6IElmIFZpZGVvQ2FwdHVyZXIuc3Rh
cnRDYXB0dXJlIGlzIHVwZGF0ZWQgdG8gc3VwcG9ydCBvdGhlciBpbWFnZSBmb3JtYXRzIHRoZW4g
dGhpcwotICAgIC8vIG5lZWRzIHRvIGJlIHVwZGF0ZWQgYW5kIFZpZGVvQ2FwdHVyZXIuZ2V0U3Vw
cG9ydGVkRm9ybWF0cyBuZWVkIHRvIHJldHVybiBDYXB0dXJlRm9ybWF0cyBvZgotICAgIC8vIGFs
bCBpbWFnZUZvcm1hdHMuCi0gICAgcHVibGljIGZpbmFsIGludCBpbWFnZUZvcm1hdCA9IEltYWdl
Rm9ybWF0Lk5WMjE7Ci0KLSAgICBwdWJsaWMgQ2FwdHVyZUZvcm1hdChpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCBtaW5GcmFtZXJhdGUsIGludCBtYXhGcmFtZXJhdGUpIHsKLSAgICAgIHRoaXMu
d2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgdGhpcy5m
cmFtZXJhdGUgPSBuZXcgRnJhbWVyYXRlUmFuZ2UobWluRnJhbWVyYXRlLCBtYXhGcmFtZXJhdGUp
OwotICAgIH0KLQotICAgIHB1YmxpYyBDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgRnJhbWVyYXRlUmFuZ2UgZnJhbWVyYXRlKSB7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7
Ci0gICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIHRoaXMuZnJhbWVyYXRlID0gZnJh
bWVyYXRlOwotICAgIH0KLQotICAgIC8vIENhbGN1bGF0ZXMgdGhlIGZyYW1lIHNpemUgb2YgdGhp
cyBjYXB0dXJlIGZvcm1hdC4KLSAgICBwdWJsaWMgaW50IGZyYW1lU2l6ZSgpIHsKLSAgICAgIHJl
dHVybiBmcmFtZVNpemUod2lkdGgsIGhlaWdodCwgaW1hZ2VGb3JtYXQpOwotICAgIH0KLQotICAg
IC8vIENhbGN1bGF0ZXMgdGhlIGZyYW1lIHNpemUgb2YgdGhlIHNwZWNpZmllZCBpbWFnZSBmb3Jt
YXQuIEN1cnJlbnRseSBvbmx5Ci0gICAgLy8gc3VwcG9ydGluZyBJbWFnZUZvcm1hdC5OVjIxLgot
ICAgIC8vIFRoZSBzaXplIGlzIHdpZHRoICogaGVpZ2h0ICogbnVtYmVyIG9mIGJ5dGVzIHBlciBw
aXhlbC4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRy
b2lkL2hhcmR3YXJlL0NhbWVyYS5odG1sI2FkZENhbGxiYWNrQnVmZmVyKGJ5dGVbXSkKLSAgICBw
dWJsaWMgc3RhdGljIGludCBmcmFtZVNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgaW1h
Z2VGb3JtYXQpIHsKLSAgICAgIGlmIChpbWFnZUZvcm1hdCAhPSBJbWFnZUZvcm1hdC5OVjIxKSB7
Ci0gICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiRG9uJ3Qg
a25vdyBob3cgdG8gY2FsY3VsYXRlICIKLSAgICAgICAgICAgICsgInRoZSBmcmFtZSBzaXplIG9m
IG5vbi1OVjIxIGltYWdlIGZvcm1hdHMuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gKHdpZHRo
ICogaGVpZ2h0ICogSW1hZ2VGb3JtYXQuZ2V0Qml0c1BlclBpeGVsKGltYWdlRm9ybWF0KSkgLyA4
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7
Ci0gICAgICByZXR1cm4gd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBmcmFtZXJhdGU7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gZXF1YWxzKE9iamVjdCBv
dGhlcikgewotICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBDYXB0dXJlRm9ybWF0KSkgewot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBDYXB0dXJlRm9ybWF0
IG90aGVyRm9ybWF0ID0gKENhcHR1cmVGb3JtYXQpIG90aGVyOwotICAgICAgcmV0dXJuIHdpZHRo
ID09IG90aGVyRm9ybWF0LndpZHRoICYmIGhlaWdodCA9PSBvdGhlckZvcm1hdC5oZWlnaHQKLSAg
ICAgICAgICAmJiBmcmFtZXJhdGUuZXF1YWxzKG90aGVyRm9ybWF0LmZyYW1lcmF0ZSk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBoYXNoQ29kZSgpIHsKLSAgICAgIHJl
dHVybiAxICsgKHdpZHRoICogNjU0OTcgKyBoZWlnaHQpICogMjUxICsgZnJhbWVyYXRlLmhhc2hD
b2RlKCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIGNsYXNzIGZvciBmaW5kaW5nIHRoZSBj
bG9zZXN0IHN1cHBvcnRlZCBmb3JtYXQgZm9yIHRoZSB0d28gZnVuY3Rpb25zIGJlbG93LiBJdCBj
cmVhdGVzIGEKLSAgLy8gY29tcGFyYXRvciBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZSB0byBzb21l
IHJlcXVlc3RlZCBwYXJhbWV0ZXJzLCB3aGVyZSB0aGUgZWxlbWVudCB3aXRoIHRoZQotICAvLyBt
aW5pbXVtIGRpZmZlcmVuY2UgaXMgdGhlIGVsZW1lbnQgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBy
ZXF1ZXN0ZWQgcGFyYW1ldGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgYWJzdHJhY3QgY2xhc3MgQ2xv
c2VzdENvbXBhcmF0b3I8VD4gaW1wbGVtZW50cyBDb21wYXJhdG9yPFQ+IHsKLSAgICAvLyBEaWZm
ZXJlbmNlIGJldHdlZW4gc3VwcG9ydGVkIGFuZCByZXF1ZXN0ZWQgcGFyYW1ldGVyLgotICAgIGFi
c3RyYWN0IGludCBkaWZmKFQgc3VwcG9ydGVkUGFyYW1ldGVyKTsKLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBpbnQgY29tcGFyZShUIHQxLCBUIHQyKSB7Ci0gICAgICByZXR1cm4gZGlmZih0
MSkgLSBkaWZmKHQyKTsKLSAgICB9Ci0gIH0KLQotICAvLyBQcmVmZXIgYSBmcHMgcmFuZ2Ugd2l0
aCBhbiB1cHBlciBib3VuZCBjbG9zZSB0byB8ZnJhbWVyYXRlfC4gQWxzbyBwcmVmZXIgYSBmcHMg
cmFuZ2Ugd2l0aCBhIGxvdwotICAvLyBsb3dlciBib3VuZCwgdG8gYWxsb3cgdGhlIGZyYW1lcmF0
ZSB0byBmbHVjdHVhdGUgYmFzZWQgb24gbGlnaHRuaW5nIGNvbmRpdGlvbnMuCi0gIHB1YmxpYyBz
dGF0aWMgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBnZXRDbG9zZXN0U3VwcG9ydGVkRnJh
bWVyYXRlUmFuZ2UoCi0gICAgICBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IHN1
cHBvcnRlZEZyYW1lcmF0ZXMsIGZpbmFsIGludCByZXF1ZXN0ZWRGcHMpIHsKLSAgICByZXR1cm4g
Q29sbGVjdGlvbnMubWluKAotICAgICAgICBzdXBwb3J0ZWRGcmFtZXJhdGVzLCBuZXcgQ2xvc2Vz
dENvbXBhcmF0b3I8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4oKSB7Ci0gICAgICAgICAg
Ly8gUHJvZ3Jlc3NpdmUgcGVuYWx0eSBpZiB0aGUgdXBwZXIgYm91bmQgaXMgZnVydGhlciBhd2F5
IHRoYW4gfE1BWF9GUFNfRElGRl9USFJFU0hPTER8Ci0gICAgICAgICAgLy8gZnJvbSByZXF1ZXN0
ZWQuCi0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9GUFNfRElGRl9USFJF
U0hPTEQgPSA1MDAwOwotICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfRlBT
X0xPV19ESUZGX1dFSUdIVCA9IDE7Ci0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IE1BWF9GUFNfSElHSF9ESUZGX1dFSUdIVCA9IDM7Ci0KLSAgICAgICAgICAvLyBQcm9ncmVzc2l2
ZSBwZW5hbHR5IGlmIHRoZSBsb3dlciBib3VuZCBpcyBiaWdnZXIgdGhhbiB8TUlOX0ZQU19USFJF
U0hPTER8LgotICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNSU5fRlBTX1RIUkVT
SE9MRCA9IDgwMDA7Ci0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1JTl9GUFNf
TE9XX1ZBTFVFX1dFSUdIVCA9IDE7Ci0gICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IE1JTl9GUFNfSElHSF9WQUxVRV9XRUlHSFQgPSA0OwotCi0gICAgICAgICAgLy8gVXNlIG9uZSB3
ZWlnaHQgZm9yIHNtYWxsIHx2YWx1ZXwgbGVzcyB0aGFuIHx0aHJlc2hvbGR8LCBhbmQgYW5vdGhl
ciB3ZWlnaHQgYWJvdmUuCi0gICAgICAgICAgcHJpdmF0ZSBpbnQgcHJvZ3Jlc3NpdmVQZW5hbHR5
KGludCB2YWx1ZSwgaW50IHRocmVzaG9sZCwgaW50IGxvd1dlaWdodCwgaW50IGhpZ2hXZWlnaHQp
IHsKLSAgICAgICAgICAgIHJldHVybiAodmFsdWUgPCB0aHJlc2hvbGQpID8gdmFsdWUgKiBsb3dX
ZWlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhyZXNob2xk
ICogbG93V2VpZ2h0ICsgKHZhbHVlIC0gdGhyZXNob2xkKSAqIGhpZ2hXZWlnaHQ7Ci0gICAgICAg
ICAgfQotCi0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgaW50IGRpZmYoQ2FwdHVyZUZv
cm1hdC5GcmFtZXJhdGVSYW5nZSByYW5nZSkgewotICAgICAgICAgICAgZmluYWwgaW50IG1pbkZw
c0Vycm9yID0gcHJvZ3Jlc3NpdmVQZW5hbHR5KAotICAgICAgICAgICAgICAgIHJhbmdlLm1pbiwg
TUlOX0ZQU19USFJFU0hPTEQsIE1JTl9GUFNfTE9XX1ZBTFVFX1dFSUdIVCwgTUlOX0ZQU19ISUdI
X1ZBTFVFX1dFSUdIVCk7Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbWF4RnBzRXJyb3IgPSBwcm9n
cmVzc2l2ZVBlbmFsdHkoTWF0aC5hYnMocmVxdWVzdGVkRnBzICogMTAwMCAtIHJhbmdlLm1heCks
Ci0gICAgICAgICAgICAgICAgTUFYX0ZQU19ESUZGX1RIUkVTSE9MRCwgTUFYX0ZQU19MT1dfRElG
Rl9XRUlHSFQsIE1BWF9GUFNfSElHSF9ESUZGX1dFSUdIVCk7Ci0gICAgICAgICAgICByZXR1cm4g
bWluRnBzRXJyb3IgKyBtYXhGcHNFcnJvcjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBTaXplIGdldENsb3Nlc3RTdXBwb3J0ZWRTaXplKAotICAgICAg
TGlzdDxTaXplPiBzdXBwb3J0ZWRTaXplcywgZmluYWwgaW50IHJlcXVlc3RlZFdpZHRoLCBmaW5h
bCBpbnQgcmVxdWVzdGVkSGVpZ2h0KSB7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLm1pbihzdXBw
b3J0ZWRTaXplcywgbmV3IENsb3Nlc3RDb21wYXJhdG9yPFNpemU+KCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBpbnQgZGlmZihTaXplIHNpemUpIHsKLSAgICAgICAgcmV0dXJuIGFicyhyZXF1
ZXN0ZWRXaWR0aCAtIHNpemUud2lkdGgpICsgYWJzKHJlcXVlc3RlZEhlaWdodCAtIHNpemUuaGVp
Z2h0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2QgZm9yIGNh
bWVyYSBjbGFzc2VzLgotICBzdGF0aWMgdm9pZCByZXBvcnRDYW1lcmFSZXNvbHV0aW9uKEhpc3Rv
Z3JhbSBoaXN0b2dyYW0sIFNpemUgcmVzb2x1dGlvbikgewotICAgIGludCBpbmRleCA9IENPTU1P
Tl9SRVNPTFVUSU9OUy5pbmRleE9mKHJlc29sdXRpb24pOwotICAgIC8vIDAgaXMgcmVzZXJ2ZWQg
Zm9yIHVua25vd24gcmVzb2x1dGlvbiwgc28gYWRkIDEuCi0gICAgLy8gaW5kZXhPZiByZXR1cm5z
IC0xIGZvciB1bmtub3duIHJlc29sdXRpb25zIHNvIGl0IGJlY29tZXMgMCBhdXRvbWF0aWNhbGx5
LgotICAgIGhpc3RvZ3JhbS5hZGRTYW1wbGUoaW5kZXggKyAxKTsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdG9yLmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvQ2FtZXJhRW51bWVyYXRvci5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
MjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1p
bXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsK
LQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgaW50ZXJmYWNlIENhbWVyYUVudW1l
cmF0b3IgewotICBwdWJsaWMgU3RyaW5nW10gZ2V0RGV2aWNlTmFtZXMoKTsKLSAgcHVibGljIGJv
b2xlYW4gaXNGcm9udEZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSk7Ci0gIHB1YmxpYyBib29sZWFu
IGlzQmFja0ZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSk7Ci0gIHB1YmxpYyBMaXN0PENhcHR1cmVG
b3JtYXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoU3RyaW5nIGRldmljZU5hbWUpOwotCi0gIHB1Ymxp
YyBDYW1lcmFWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAgU3RyaW5nIGRldmlj
ZU5hbWUsIENhbWVyYVZpZGVvQ2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5k
bGVyKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhU2Vzc2lvbi5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhU2Vzc2lvbi5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYVNlc3Npb24uamF2YQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndl
YnJ0YzsKLQotcHVibGljIGludGVyZmFjZSBDYW1lcmFTZXNzaW9uIHsKLSAgLy8gQ2FsbGJhY2tz
IGFyZSBmaXJlZCBvbiB0aGUgY2FtZXJhIHRocmVhZC4KLSAgcHVibGljIGludGVyZmFjZSBDcmVh
dGVTZXNzaW9uQ2FsbGJhY2sgewotICAgIHZvaWQgb25Eb25lKENhbWVyYVNlc3Npb24gc2Vzc2lv
bik7Ci0gICAgdm9pZCBvbkZhaWx1cmUoU3RyaW5nIGVycm9yKTsKLSAgfQotCi0gIC8vIEV2ZW50
cyBhcmUgZmlyZWQgb24gdGhlIGNhbWVyYSB0aHJlYWQuCi0gIHB1YmxpYyBpbnRlcmZhY2UgRXZl
bnRzIHsKLSAgICB2b2lkIG9uQ2FtZXJhT3BlbmluZygpOwotICAgIHZvaWQgb25DYW1lcmFFcnJv
cihDYW1lcmFTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBlcnJvcik7Ci0gICAgdm9pZCBvbkNhbWVy
YURpc2Nvbm5lY3RlZChDYW1lcmFTZXNzaW9uIHNlc3Npb24pOwotICAgIHZvaWQgb25DYW1lcmFD
bG9zZWQoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKTsKLSAgICB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1l
Q2FwdHVyZWQoCi0gICAgICAgIENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgYnl0ZVtdIGRhdGEsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCk7Ci0gICAg
dm9pZCBvblRleHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb2VzVGV4dHVyZUlkLAotICAgICAgICBmbG9hdFtdIHRyYW5z
Zm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCk7Ci0gIH0KLQotICAvKioK
LSAgICogU3RvcHMgdGhlIGNhcHR1cmUuIFdhaXRzIHVudGlsIG5vIG1vcmUgY2FsbHMgdG8gY2Fw
dHVyZSBvYnNlcnZlciB3aWxsIGJlIG1hZGUuCi0gICAqIElmIHdhaXRDYW1lcmFTdG9wIGlzIHRy
dWUsIGFsc28gd2FpdHMgZm9yIHRoZSBjYW1lcmEgdG8gc3RvcC4KLSAgICovCi0gIHZvaWQgc3Rv
cCgpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyLmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhVmlkZW9DYXB0dXJl
ci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTMwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBCYXNlIGludGVyZmFjZSBmb3IgY2Ft
ZXJhMSBhbmQgY2FtZXJhMiBpbXBsZW1lbnRhdGlvbnMuIEV4dGVuZHMgVmlkZW9DYXB0dXJlciB3
aXRoIGEKLSAqIHN3aXRjaENhbWVyYSgpIGZ1bmN0aW9uLiBBbHNvIHByb3ZpZGVzIHN1YmludGVy
ZmFjZXMgZm9yIGhhbmRsaW5nIGNhbWVyYSBldmVudHMsIGFuZCBhIGhlbHBlcgotICogY2xhc3Mg
Zm9yIGRldGVjdGluZyBjYW1lcmEgZnJlZXplcy4KLSAqLwotcHVibGljIGludGVyZmFjZSBDYW1l
cmFWaWRlb0NhcHR1cmVyIGV4dGVuZHMgVmlkZW9DYXB0dXJlciB7Ci0gIC8qKgotICAgKiBDYW1l
cmEgZXZlbnRzIGhhbmRsZXIgLSBjYW4gYmUgdXNlZCB0byBiZSBub3RpZmVkIGFib3V0IGNhbWVy
YSBldmVudHMuIFRoZSBjYWxsYmFja3MgYXJlCi0gICAqIGV4ZWN1dGVkIGZyb20gYW4gYXJiaXRy
YXJ5IHRocmVhZC4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJhRXZlbnRzSGFuZGxl
ciB7Ci0gICAgLy8gQ2FtZXJhIGVycm9yIGhhbmRsZXIgLSBpbnZva2VkIHdoZW4gY2FtZXJhIGNh
biBub3QgYmUgb3BlbmVkCi0gICAgLy8gb3IgYW55IGNhbWVyYSBleGNlcHRpb24gaGFwcGVucyBv
biBjYW1lcmEgdGhyZWFkLgotICAgIHZvaWQgb25DYW1lcmFFcnJvcihTdHJpbmcgZXJyb3JEZXNj
cmlwdGlvbik7Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBjYW1lcmEgaXMgZGlzY29ubmVjdGVkLgot
ICAgIHZvaWQgb25DYW1lcmFEaXNjb25uZWN0ZWQoKTsKLQotICAgIC8vIEludm9rZWQgd2hlbiBj
YW1lcmEgc3RvcHMgcmVjZWl2aW5nIGZyYW1lcy4KLSAgICB2b2lkIG9uQ2FtZXJhRnJlZXplZChT
dHJpbmcgZXJyb3JEZXNjcmlwdGlvbik7Ci0KLSAgICAvLyBDYWxsYmFjayBpbnZva2VkIHdoZW4g
Y2FtZXJhIGlzIG9wZW5pbmcuCi0gICAgdm9pZCBvbkNhbWVyYU9wZW5pbmcoU3RyaW5nIGNhbWVy
YU5hbWUpOwotCi0gICAgLy8gQ2FsbGJhY2sgaW52b2tlZCB3aGVuIGZpcnN0IGNhbWVyYSBmcmFt
ZSBpcyBhdmFpbGFibGUgYWZ0ZXIgY2FtZXJhIGlzIHN0YXJ0ZWQuCi0gICAgdm9pZCBvbkZpcnN0
RnJhbWVBdmFpbGFibGUoKTsKLQotICAgIC8vIENhbGxiYWNrIGludm9rZWQgd2hlbiBjYW1lcmEg
aXMgY2xvc2VkLgotICAgIHZvaWQgb25DYW1lcmFDbG9zZWQoKTsKLSAgfQotCi0gIC8qKgotICAg
KiBDYW1lcmEgc3dpdGNoIGhhbmRsZXIgLSBvbmUgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBpbnZv
a2VkIHdpdGggdGhlIHJlc3VsdCBvZiBzd2l0Y2hDYW1lcmEoKS4KLSAgICogVGhlIGNhbGxiYWNr
IG1heSBiZSBjYWxsZWQgb24gYW4gYXJiaXRyYXJ5IHRocmVhZC4KLSAgICovCi0gIHB1YmxpYyBp
bnRlcmZhY2UgQ2FtZXJhU3dpdGNoSGFuZGxlciB7Ci0gICAgLy8gSW52b2tlZCBvbiBzdWNjZXNz
LiB8aXNGcm9udENhbWVyYXwgaXMgdHJ1ZSBpZiB0aGUgbmV3IGNhbWVyYSBpcyBmcm9udCBmYWNp
bmcuCi0gICAgdm9pZCBvbkNhbWVyYVN3aXRjaERvbmUoYm9vbGVhbiBpc0Zyb250Q2FtZXJhKTsK
LQotICAgIC8vIEludm9rZWQgb24gZmFpbHVyZSwgZS5nLiBjYW1lcmEgaXMgc3RvcHBlZCBvciBv
bmx5IG9uZSBjYW1lcmEgYXZhaWxhYmxlLgotICAgIHZvaWQgb25DYW1lcmFTd2l0Y2hFcnJvcihT
dHJpbmcgZXJyb3JEZXNjcmlwdGlvbik7Ci0gIH0KLQotICAvKioKLSAgICogU3dpdGNoIGNhbWVy
YSB0byB0aGUgbmV4dCB2YWxpZCBjYW1lcmEgaWQuIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIHdo
aWxlIHRoZSBjYW1lcmEgaXMgcnVubmluZy4KLSAgICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2Fs
bGVkIGZyb20gYW55IHRocmVhZC4KLSAgICovCi0gIHZvaWQgc3dpdGNoQ2FtZXJhKENhbWVyYVN3
aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxlcik7Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBj
bGFzcyB0byBsb2cgZnJhbWVyYXRlIGFuZCBkZXRlY3QgaWYgdGhlIGNhbWVyYSBmcmVlemVzLiBJ
dCB3aWxsIHJ1biBwZXJpb2RpYyBjYWxsYmFja3MKLSAgICogb24gdGhlIFN1cmZhY2VUZXh0dXJl
SGVscGVyIHRocmVhZCBwYXNzZWQgaW4gdGhlIGN0b3IsIGFuZCBzaG91bGQgb25seSBiZSBvcGVy
YXRlZCBmcm9tIHRoYXQKLSAgICogdGhyZWFkLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFz
cyBDYW1lcmFTdGF0aXN0aWNzIHsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFH
ID0gIkNhbWVyYVN0YXRpc3RpY3MiOwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBDQU1F
UkFfT0JTRVJWRVJfUEVSSU9EX01TID0gMjAwMDsKLSAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBp
bnQgQ0FNRVJBX0ZSRUVaRV9SRVBPUlRfVElNT1VUX01TID0gNDAwMDsKLQotICAgIHByaXZhdGUg
ZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgcHJp
dmF0ZSBmaW5hbCBDYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXI7Ci0gICAgcHJpdmF0
ZSBpbnQgZnJhbWVDb3VudDsKLSAgICBwcml2YXRlIGludCBmcmVlemVQZXJpb2RDb3VudDsKLSAg
ICAvLyBDYW1lcmEgb2JzZXJ2ZXIgLSBtb25pdG9ycyBjYW1lcmEgZnJhbWVyYXRlLiBPYnNlcnZl
ciBpcyBleGVjdXRlZCBvbiBjYW1lcmEgdGhyZWFkLgotICAgIHByaXZhdGUgZmluYWwgUnVubmFi
bGUgY2FtZXJhT2JzZXJ2ZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZmluYWwgaW50IGNhbWVyYUZwcyA9IE1h
dGgucm91bmQoZnJhbWVDb3VudCAqIDEwMDAuMGYgLyBDQU1FUkFfT0JTRVJWRVJfUEVSSU9EX01T
KTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBmcHM6ICIgKyBjYW1lcmFGcHMgKyAi
LiIpOwotICAgICAgICBpZiAoZnJhbWVDb3VudCA9PSAwKSB7Ci0gICAgICAgICAgKytmcmVlemVQ
ZXJpb2RDb3VudDsKLSAgICAgICAgICBpZiAoQ0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyAqIGZy
ZWV6ZVBlcmlvZENvdW50ID49IENBTUVSQV9GUkVFWkVfUkVQT1JUX1RJTU9VVF9NUwotICAgICAg
ICAgICAgICAmJiBldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIExvZ2dpbmcu
ZShUQUcsICJDYW1lcmEgZnJlZXplZC4iKTsKLSAgICAgICAgICAgIGlmIChzdXJmYWNlVGV4dHVy
ZUhlbHBlci5pc1RleHR1cmVJblVzZSgpKSB7Ci0gICAgICAgICAgICAgIC8vIFRoaXMgY2FuIG9u
bHkgaGFwcGVuIGlmIHdlIGFyZSBjYXB0dXJpbmcgdG8gdGV4dHVyZXMuCi0gICAgICAgICAgICAg
IGV2ZW50c0hhbmRsZXIub25DYW1lcmFGcmVlemVkKCJDYW1lcmEgZmFpbHVyZS4gQ2xpZW50IG11
c3QgcmV0dXJuIHZpZGVvIGJ1ZmZlcnMuIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRnJlZXplZCgiQ2FtZXJhIGZhaWx1cmUuIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGZyZWV6ZVBlcmlvZENvdW50ID0gMDsKLSAgICAgICAgfQot
ICAgICAgICBmcmFtZUNvdW50ID0gMDsKLSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0
SGFuZGxlcigpLnBvc3REZWxheWVkKHRoaXMsIENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMpOwot
ICAgICAgfQotICAgIH07Ci0KLSAgICBwdWJsaWMgQ2FtZXJhU3RhdGlzdGljcygKLSAgICAgICAg
U3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENhbWVyYUV2ZW50c0hh
bmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgICAgaWYgKHN1cmZhY2VUZXh0dXJlSGVscGVyID09
IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgaXMgbnVsbCIpOwotICAgICAgfQotICAgICAgdGhpcy5zdXJmYWNl
VGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAgICAgdGhpcy5ldmVudHNI
YW5kbGVyID0gZXZlbnRzSGFuZGxlcjsKLSAgICAgIHRoaXMuZnJhbWVDb3VudCA9IDA7Ci0gICAg
ICB0aGlzLmZyZWV6ZVBlcmlvZENvdW50ID0gMDsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LmdldEhhbmRsZXIoKS5wb3N0RGVsYXllZChjYW1lcmFPYnNlcnZlciwgQ0FNRVJBX09CU0VSVkVS
X1BFUklPRF9NUyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrVGhyZWFkKCkgewot
ICAgICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0gc3VyZmFjZVRleHR1cmVIZWxwZXIu
Z2V0SGFuZGxlcigpLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAgICAgIHRocm93IG5l
dyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZCIpOwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIGFkZEZyYW1lKCkgewotICAgICAgY2hlY2tUaHJlYWQoKTsKLSAg
ICAgICsrZnJhbWVDb3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewot
ICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnJlbW92ZUNhbGxiYWNrcyhj
YW1lcmFPYnNlcnZlcik7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0Rh
dGFDaGFubmVsLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9EYXRhQ2hhbm5l
bC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0RhdGFDaGFubmVs
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLQot
LyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgRGF0YUNoYW5uZWxJbnRlcmZhY2UuICovCi1wdWJs
aWMgY2xhc3MgRGF0YUNoYW5uZWwgewotICAvKiogSmF2YSB3cmFwcGVyIGZvciBXZWJJREwgUlRD
RGF0YUNoYW5uZWwuICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSW5pdCB7Ci0gICAgcHVibGlj
IGJvb2xlYW4gb3JkZXJlZCA9IHRydWU7Ci0gICAgLy8gT3B0aW9uYWwgdW5zaWduZWQgc2hvcnQg
aW4gV2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmllZC4KLSAgICBwdWJsaWMgaW50IG1heFJldHJh
bnNtaXRUaW1lTXMgPSAtMTsKLSAgICAvLyBPcHRpb25hbCB1bnNpZ25lZCBzaG9ydCBpbiBXZWJJ
REwsIC0xIG1lYW5zIHVuc3BlY2lmaWVkLgotICAgIHB1YmxpYyBpbnQgbWF4UmV0cmFuc21pdHMg
PSAtMTsKLSAgICBwdWJsaWMgU3RyaW5nIHByb3RvY29sID0gIiI7Ci0gICAgcHVibGljIGJvb2xl
YW4gbmVnb3RpYXRlZCA9IGZhbHNlOwotICAgIC8vIE9wdGlvbmFsIHVuc2lnbmVkIHNob3J0IGlu
IFdlYklETCwgLTEgbWVhbnMgdW5zcGVjaWZpZWQuCi0gICAgcHVibGljIGludCBpZCA9IC0xOwot
Ci0gICAgcHVibGljIEluaXQoKSB7fQotCi0gICAgLy8gQ2FsbGVkIG9ubHkgYnkgbmF0aXZlIGNv
ZGUuCi0gICAgcHJpdmF0ZSBJbml0KGJvb2xlYW4gb3JkZXJlZCwgaW50IG1heFJldHJhbnNtaXRU
aW1lTXMsIGludCBtYXhSZXRyYW5zbWl0cywgU3RyaW5nIHByb3RvY29sLAotICAgICAgICBib29s
ZWFuIG5lZ290aWF0ZWQsIGludCBpZCkgewotICAgICAgdGhpcy5vcmRlcmVkID0gb3JkZXJlZDsK
LSAgICAgIHRoaXMubWF4UmV0cmFuc21pdFRpbWVNcyA9IG1heFJldHJhbnNtaXRUaW1lTXM7Ci0g
ICAgICB0aGlzLm1heFJldHJhbnNtaXRzID0gbWF4UmV0cmFuc21pdHM7Ci0gICAgICB0aGlzLnBy
b3RvY29sID0gcHJvdG9jb2w7Ci0gICAgICB0aGlzLm5lZ290aWF0ZWQgPSBuZWdvdGlhdGVkOwot
ICAgICAgdGhpcy5pZCA9IGlkOwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2Yg
QysrIERhdGFCdWZmZXIuICBUaGUgYXRvbSBvZiBkYXRhIGluIGEgRGF0YUNoYW5uZWwuICovCi0g
IHB1YmxpYyBzdGF0aWMgY2xhc3MgQnVmZmVyIHsKLSAgICAvKiogVGhlIHVuZGVybHlpbmcgZGF0
YS4gKi8KLSAgICBwdWJsaWMgZmluYWwgQnl0ZUJ1ZmZlciBkYXRhOwotCi0gICAgLyoqCi0gICAg
ICogSW5kaWNhdGVzIHdoZXRoZXIgfGRhdGF8IGNvbnRhaW5zIFVURi04IHRleHQgb3IgImJpbmFy
eSBkYXRhIgotICAgICAqIChpLmUuIGFueXRoaW5nIGVsc2UpLgotICAgICAqLwotICAgIHB1Ymxp
YyBmaW5hbCBib29sZWFuIGJpbmFyeTsKLQotICAgIHB1YmxpYyBCdWZmZXIoQnl0ZUJ1ZmZlciBk
YXRhLCBib29sZWFuIGJpbmFyeSkgewotICAgICAgdGhpcy5kYXRhID0gZGF0YTsKLSAgICAgIHRo
aXMuYmluYXJ5ID0gYmluYXJ5OwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2Yg
QysrIERhdGFDaGFubmVsT2JzZXJ2ZXIuICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgT2JzZXJ2ZXIg
ewotICAgIC8qKiBUaGUgZGF0YSBjaGFubmVsJ3MgYnVmZmVyZWRBbW91bnQgaGFzIGNoYW5nZWQu
ICovCi0gICAgcHVibGljIHZvaWQgb25CdWZmZXJlZEFtb3VudENoYW5nZShsb25nIHByZXZpb3Vz
QW1vdW50KTsKLSAgICAvKiogVGhlIGRhdGEgY2hhbm5lbCBzdGF0ZSBoYXMgY2hhbmdlZC4gKi8K
LSAgICBwdWJsaWMgdm9pZCBvblN0YXRlQ2hhbmdlKCk7Ci0gICAgLyoqCi0gICAgICogQSBkYXRh
IGJ1ZmZlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLiAgTk9URTogfGJ1ZmZlci5kYXRhfCB3
aWxsIGJlCi0gICAgICogZnJlZWQgb25jZSB0aGlzIGZ1bmN0aW9uIHJldHVybnMgc28gY2FsbGVy
cyB3aG8gd2FudCB0byB1c2UgdGhlIGRhdGEKLSAgICAgKiBhc3luY2hyb25vdXNseSBtdXN0IG1h
a2Ugc3VyZSB0byBjb3B5IGl0IGZpcnN0LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uTWVz
c2FnZShCdWZmZXIgYnVmZmVyKTsKLSAgfQotCi0gIC8qKiBLZWVwIGluIHN5bmMgd2l0aCBEYXRh
Q2hhbm5lbEludGVyZmFjZTo6RGF0YVN0YXRlLiAqLwotICBwdWJsaWMgZW51bSBTdGF0ZSB7IENP
Tk5FQ1RJTkcsIE9QRU4sIENMT1NJTkcsIENMT1NFRCB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBsb25n
IG5hdGl2ZURhdGFDaGFubmVsOwotICBwcml2YXRlIGxvbmcgbmF0aXZlT2JzZXJ2ZXI7Ci0KLSAg
cHVibGljIERhdGFDaGFubmVsKGxvbmcgbmF0aXZlRGF0YUNoYW5uZWwpIHsKLSAgICB0aGlzLm5h
dGl2ZURhdGFDaGFubmVsID0gbmF0aXZlRGF0YUNoYW5uZWw7Ci0gIH0KLQotICAvKiogUmVnaXN0
ZXIgfG9ic2VydmVyfCwgcmVwbGFjaW5nIGFueSBwcmV2aW91c2x5LXJlZ2lzdGVyZWQgb2JzZXJ2
ZXIuICovCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyT2JzZXJ2ZXIoT2JzZXJ2ZXIgb2JzZXJ2ZXIp
IHsKLSAgICBpZiAobmF0aXZlT2JzZXJ2ZXIgIT0gMCkgewotICAgICAgdW5yZWdpc3Rlck9ic2Vy
dmVyTmF0aXZlKG5hdGl2ZU9ic2VydmVyKTsKLSAgICB9Ci0gICAgbmF0aXZlT2JzZXJ2ZXIgPSBy
ZWdpc3Rlck9ic2VydmVyTmF0aXZlKG9ic2VydmVyKTsKLSAgfQotICBwcml2YXRlIG5hdGl2ZSBs
b25nIHJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUoT2JzZXJ2ZXIgb2JzZXJ2ZXIpOwotCi0gIC8qKiBV
bnJlZ2lzdGVyIHRoZSAob25seSkgb2JzZXJ2ZXIuICovCi0gIHB1YmxpYyB2b2lkIHVucmVnaXN0
ZXJPYnNlcnZlcigpIHsKLSAgICB1bnJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUobmF0aXZlT2JzZXJ2
ZXIpOwotICB9Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgdW5yZWdpc3Rlck9ic2VydmVyTmF0aXZl
KGxvbmcgbmF0aXZlT2JzZXJ2ZXIpOwotCi0gIHB1YmxpYyBuYXRpdmUgU3RyaW5nIGxhYmVsKCk7
Ci0KLSAgcHVibGljIG5hdGl2ZSBpbnQgaWQoKTsKLQotICBwdWJsaWMgbmF0aXZlIFN0YXRlIHN0
YXRlKCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGFwcGxp
Y2F0aW9uIGRhdGEgKFVURi04IHRleHQgYW5kIGJpbmFyeSBkYXRhKQotICAgKiB0aGF0IGhhdmUg
YmVlbiBxdWV1ZWQgdXNpbmcgU2VuZEJ1ZmZlciBidXQgaGF2ZSBub3QgeWV0IGJlZW4gdHJhbnNt
aXR0ZWQKLSAgICogdG8gdGhlIG5ldHdvcmsuCi0gICAqLwotICBwdWJsaWMgbmF0aXZlIGxvbmcg
YnVmZmVyZWRBbW91bnQoKTsKLQotICAvKiogQ2xvc2UgdGhlIGNoYW5uZWwuICovCi0gIHB1Ymxp
YyBuYXRpdmUgdm9pZCBjbG9zZSgpOwotCi0gIC8qKiBTZW5kIHxkYXRhfCB0byB0aGUgcmVtb3Rl
IHBlZXI7IHJldHVybiBzdWNjZXNzLiAqLwotICBwdWJsaWMgYm9vbGVhbiBzZW5kKEJ1ZmZlciBi
dWZmZXIpIHsKLSAgICAvLyBUT0RPKGZpc2NobWFuKTogdGhpcyBjb3VsZCBiZSBjbGV2ZXJlciBh
Ym91dCBhdm9pZGluZyBjb3BpZXMgaWYgdGhlCi0gICAgLy8gQnl0ZUJ1ZmZlciBpcyBkaXJlY3Qg
YW5kL29yIGlzIGJhY2tlZCBieSBhbiBhcnJheS4KLSAgICBieXRlW10gZGF0YSA9IG5ldyBieXRl
W2J1ZmZlci5kYXRhLnJlbWFpbmluZygpXTsKLSAgICBidWZmZXIuZGF0YS5nZXQoZGF0YSk7Ci0g
ICAgcmV0dXJuIHNlbmROYXRpdmUoZGF0YSwgYnVmZmVyLmJpbmFyeSk7Ci0gIH0KLSAgcHJpdmF0
ZSBuYXRpdmUgYm9vbGVhbiBzZW5kTmF0aXZlKGJ5dGVbXSBkYXRhLCBib29sZWFuIGJpbmFyeSk7
Ci0KLSAgLyoqIERpc3Bvc2Ugb2YgbmF0aXZlIHJlc291cmNlcyBhdHRhY2hlZCB0byB0aGlzIGNo
YW5uZWwuICovCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBkaXNwb3NlKCk7Ci19OwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9FZ2xCYXNlLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWds
QmFzZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3Vy
ZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci0KLWltcG9ydCBqYXZh
eC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTA7Ci0KLS8qKgotICogSG9sZHMgRUdMIHN0
YXRlIGFuZCB1dGlsaXR5IG1ldGhvZHMgZm9yIGhhbmRsaW5nIGFuIGVnbCAxLjAgRUdMQ29udGV4
dCwgYW4gRUdMRGlzcGxheSwKLSAqIGFuZCBhbiBFR0xTdXJmYWNlLgotICovCi1wdWJsaWMgYWJz
dHJhY3QgY2xhc3MgRWdsQmFzZSB7Ci0gIC8vIEVHTCB3cmFwcGVyIGZvciBhbiBhY3R1YWwgRUdM
Q29udGV4dC4KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250ZXh0IHt9Ci0KLSAgLy8gQWNjb3Jk
aW5nIHRvIHRoZSBkb2N1bWVudGF0aW9uLCBFR0wgY2FuIGJlIHVzZWQgZnJvbSBtdWx0aXBsZSB0
aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUgaWYgZWFjaAotICAvLyB0aHJlYWQgaGFzIGl0cyBvd24g
RUdMQ29udGV4dCwgYnV0IGluIHByYWN0aWNlIGl0IGRlYWRsb2NrcyBvbiBzb21lIGRldmljZXMg
d2hlbiBkb2luZyB0aGlzLgotICAvLyBUaGVyZWZvcmUsIHN5bmNocm9uaXplIG9uIHRoaXMgZ2xv
YmFsIGxvY2sgYmVmb3JlIGNhbGxpbmcgZGFuZ2Vyb3VzIEVHTCBmdW5jdGlvbnMgdGhhdCBtaWdo
dAotICAvLyBkZWFkbG9jay4gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93ZWJydGMv
aXNzdWVzL2RldGFpbD9pZD01NzAyIGZvciBtb3JlIGluZm8uCi0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgT2JqZWN0IGxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0KLSAgLy8gVGhlc2UgY29uc3RhbnRzIGFy
ZSB0YWtlbiBmcm9tIEVHTDE0LkVHTF9PUEVOR0xfRVMyX0JJVCBhbmQgRUdMMTQuRUdMX0NPTlRF
WFRfQ0xJRU5UX1ZFUlNJT04uCi0gIC8vIGh0dHBzOi8vYW5kcm9pZC5nb29nbGVzb3VyY2UuY29t
L3BsYXRmb3JtL2ZyYW1ld29ya3MvYmFzZS8rL21hc3Rlci9vcGVuZ2wvamF2YS9hbmRyb2lkL29w
ZW5nbC9FR0wxNC5qYXZhCi0gIC8vIFRoaXMgaXMgc2ltaWxhciB0byBob3cgR2xTdXJmYWNlVmll
dyBkb2VzOgotICAvLyBodHRwOi8vZ3JlcGNvZGUuY29tL2ZpbGUvcmVwb3NpdG9yeS5ncmVwY29k
ZS5jb20vamF2YS9leHQvY29tLmdvb2dsZS5hbmRyb2lkL2FuZHJvaWQvNS4xLjFfcjEvYW5kcm9p
ZC9vcGVuZ2wvR0xTdXJmYWNlVmlldy5qYXZhIzc2MAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgRUdMX09QRU5HTF9FUzJfQklUID0gNDsKLSAgLy8gQW5kcm9pZC1zcGVjaWZpYyBleHRlbnNp
b24uCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFR0xfUkVDT1JEQUJMRV9BTkRST0lEID0g
MHgzMTQyOwotCi0gIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBp
bnRbXSBDT05GSUdfUExBSU4gPSB7Ci0gICAgRUdMMTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVH
TDEwLkVHTF9HUkVFTl9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAg
RUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotICAgIEVHTDEw
LkVHTF9OT05FCi0gIH07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1JHQkEg
PSB7Ci0gICAgRUdMMTAuRUdMX1JFRF9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9HUkVFTl9TSVpF
LCA4LAotICAgIEVHTDEwLkVHTF9CTFVFX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0FMUEhBX1NJ
WkUsIDgsCi0gICAgRUdMMTAuRUdMX1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklU
LAotICAgIEVHTDEwLkVHTF9OT05FCi0gIH07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10g
Q09ORklHX1BJWEVMX0JVRkZFUiA9IHsKLSAgICBFR0wxMC5FR0xfUkVEX1NJWkUsIDgsCi0gICAg
RUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0JMVUVfU0laRSwgOCwKLSAg
ICBFR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgRUdM
MTAuRUdMX1NVUkZBQ0VfVFlQRSwgRUdMMTAuRUdMX1BCVUZGRVJfQklULAotICAgIEVHTDEwLkVH
TF9OT05FCi0gIH07Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50W10gQ09ORklHX1BJWEVMX1JH
QkFfQlVGRkVSID0gewotICAgIEVHTDEwLkVHTF9SRURfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xf
R1JFRU5fU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfQkxVRV9TSVpFLCA4LAotICAgIEVHTDEwLkVH
TF9BTFBIQV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUsIEVHTF9PUEVO
R0xfRVMyX0JJVCwKLSAgICBFR0wxMC5FR0xfU1VSRkFDRV9UWVBFLCBFR0wxMC5FR0xfUEJVRkZF
Ul9CSVQsCi0gICAgRUdMMTAuRUdMX05PTkUKLSAgfTsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBp
bnRbXSBDT05GSUdfUkVDT1JEQUJMRSA9IHsKLSAgICBFR0wxMC5FR0xfUkVEX1NJWkUsIDgsCi0g
ICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0JMVUVfU0laRSwgOCwK
LSAgICBFR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAg
RUdMX1JFQ09SREFCTEVfQU5EUk9JRCwgMSwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9OwotICAv
LyBjbGFuZy1mb3JtYXQgb24KLQotICAvLyBDcmVhdGUgYSBuZXcgY29udGV4dCB3aXRoIHRoZSBz
cGVjaWZpZWQgY29uZmlnIGF0dHJpYnV0ZXMsIHNoYXJpbmcgZGF0YSB3aXRoIHNoYXJlZENvbnRl
eHQuCi0gIC8vIHxzaGFyZWRDb250ZXh0fCBjYW4gYmUgbnVsbC4KLSAgcHVibGljIHN0YXRpYyBF
Z2xCYXNlIGNyZWF0ZShDb250ZXh0IHNoYXJlZENvbnRleHQsIGludFtdIGNvbmZpZ0F0dHJpYnV0
ZXMpIHsKLSAgICByZXR1cm4gKEVnbEJhc2UxNC5pc0VHTDE0U3VwcG9ydGVkKCkKLSAgICAgICAg
ICAgICAgICYmIChzaGFyZWRDb250ZXh0ID09IG51bGwgfHwgc2hhcmVkQ29udGV4dCBpbnN0YW5j
ZW9mIEVnbEJhc2UxNC5Db250ZXh0KSkKLSAgICAgICAgPyBuZXcgRWdsQmFzZTE0KChFZ2xCYXNl
MTQuQ29udGV4dCkgc2hhcmVkQ29udGV4dCwgY29uZmlnQXR0cmlidXRlcykKLSAgICAgICAgOiBu
ZXcgRWdsQmFzZTEwKChFZ2xCYXNlMTAuQ29udGV4dCkgc2hhcmVkQ29udGV4dCwgY29uZmlnQXR0
cmlidXRlcyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UgY3JlYXRlKCkgewotICAg
IHJldHVybiBjcmVhdGUobnVsbCwgQ09ORklHX1BMQUlOKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgRWdsQmFzZSBjcmVhdGUoQ29udGV4dCBzaGFyZWRDb250ZXh0KSB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZShzaGFyZWRDb250ZXh0LCBDT05GSUdfUExBSU4pOwotICB9Ci0KLSAgcHVibGljIGFic3Ry
YWN0IHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpOwotCi0gIC8vIENyZWF0ZSBF
R0xTdXJmYWNlIGZyb20gdGhlIEFuZHJvaWQgU3VyZmFjZVRleHR1cmUuCi0gIHB1YmxpYyBhYnN0
cmFjdCB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpOwot
Ci0gIC8vIENyZWF0ZSBkdW1teSAxeDEgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugc28gdGhlIGNvbnRl
eHQgY2FuIGJlIG1hZGUgY3VycmVudC4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgY3JlYXRlRHVt
bXlQYnVmZmVyU3VyZmFjZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIGNyZWF0ZVBidWZm
ZXJTdXJmYWNlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IENv
bnRleHQgZ2V0RWdsQmFzZUNvbnRleHQoKTsKLQotICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBo
YXNTdXJmYWNlKCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IGludCBzdXJmYWNlV2lkdGgoKTsKLQot
ICBwdWJsaWMgYWJzdHJhY3QgaW50IHN1cmZhY2VIZWlnaHQoKTsKLQotICBwdWJsaWMgYWJzdHJh
Y3Qgdm9pZCByZWxlYXNlU3VyZmFjZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbGVh
c2UoKTsKLQotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBtYWtlQ3VycmVudCgpOwotCi0gIC8vIERl
dGFjaCB0aGUgY3VycmVudCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4gYmUgbWFkZSBjdXJy
ZW50IG9uIGFub3RoZXIgdGhyZWFkLgotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBkZXRhY2hDdXJy
ZW50KCk7Ci0KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgc3dhcEJ1ZmZlcnMoKTsKLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9FZ2xCYXNlMTAuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9FZ2xCYXNlMTAuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMwNyArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdy
YXBoaWNzLkNhbnZhczsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlJlY3Q7Ci1pbXBvcnQgYW5k
cm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFj
ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLQotaW1wb3J0IGphdmF4Lm1p
Y3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMDsKLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24u
a2hyb25vcy5lZ2wuRUdMQ29uZmlnOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9z
LmVnbC5FR0xDb250ZXh0OwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5F
R0xEaXNwbGF5OwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0xTdXJm
YWNlOwotCi0vKioKLSAqIEhvbGRzIEVHTCBzdGF0ZSBhbmQgdXRpbGl0eSBtZXRob2RzIGZvciBo
YW5kbGluZyBhbiBlZ2wgMS4wIEVHTENvbnRleHQsIGFuIEVHTERpc3BsYXksCi0gKiBhbmQgYW4g
RUdMU3VyZmFjZS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEVnbEJhc2UxMCBleHRlbmRzIEVn
bEJhc2UgewotICAvLyBUaGlzIGNvbnN0YW50IGlzIHRha2VuIGZyb20gRUdMMTQuRUdMX0NPTlRF
WFRfQ0xJRU5UX1ZFUlNJT04uCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTiA9IDB4MzA5ODsKLQotICBwcml2YXRlIGZpbmFsIEVHTDEwIGVnbDsK
LSAgcHJpdmF0ZSBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gIHByaXZhdGUgRUdMQ29uZmlnIGVn
bENvbmZpZzsKLSAgcHJpdmF0ZSBFR0xEaXNwbGF5IGVnbERpc3BsYXk7Ci0gIHByaXZhdGUgRUdM
U3VyZmFjZSBlZ2xTdXJmYWNlID0gRUdMMTAuRUdMX05PX1NVUkZBQ0U7Ci0KLSAgLy8gRUdMIHdy
YXBwZXIgZm9yIGFuIGFjdHVhbCBFR0xDb250ZXh0LgotICBwdWJsaWMgc3RhdGljIGNsYXNzIENv
bnRleHQgZXh0ZW5kcyBFZ2xCYXNlLkNvbnRleHQgewotICAgIHByaXZhdGUgZmluYWwgRUdMQ29u
dGV4dCBlZ2xDb250ZXh0OwotCi0gICAgcHVibGljIENvbnRleHQoRUdMQ29udGV4dCBlZ2xDb250
ZXh0KSB7Ci0gICAgICB0aGlzLmVnbENvbnRleHQgPSBlZ2xDb250ZXh0OwotICAgIH0KLSAgfQot
Ci0gIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcgdHlw
ZSwgc2hhcmluZyBkYXRhIHdpdGggc2hhcmVkQ29udGV4dC4KLSAgcHVibGljIEVnbEJhc2UxMChD
b250ZXh0IHNoYXJlZENvbnRleHQsIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMpIHsKLSAgICB0aGlz
LmVnbCA9IChFR0wxMCkgRUdMQ29udGV4dC5nZXRFR0woKTsKLSAgICBlZ2xEaXNwbGF5ID0gZ2V0
RWdsRGlzcGxheSgpOwotICAgIGVnbENvbmZpZyA9IGdldEVnbENvbmZpZyhlZ2xEaXNwbGF5LCBj
b25maWdBdHRyaWJ1dGVzKTsKLSAgICBlZ2xDb250ZXh0ID0gY3JlYXRlRWdsQ29udGV4dChzaGFy
ZWRDb250ZXh0LCBlZ2xEaXNwbGF5LCBlZ2xDb25maWcpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgLyoqCi0g
ICAgICogV2UgaGF2ZSB0byB3cmFwIFN1cmZhY2UgaW4gYSBTdXJmYWNlSG9sZGVyIGJlY2F1c2Ug
Zm9yIHNvbWUgcmVhc29uIGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UKLSAgICAgKiBjb3VsZG4ndCBh
Y3R1YWxseSB0YWtlIGEgU3VyZmFjZSBvYmplY3QgdW50aWwgQVBJIDE3LiBPbGRlciB2ZXJzaW9u
cyBmb3J0dW5hdGVseSBqdXN0IGNhbGwKLSAgICAgKiBTdXJmYWNlSG9sZGVyLmdldFN1cmZhY2Uo
KSwgc28gd2UnbGwgZG8gdGhhdC4gTm8gb3RoZXIgbWV0aG9kcyBhcmUgcmVsZXZhbnQuCi0gICAg
ICovCi0gICAgY2xhc3MgRmFrZVN1cmZhY2VIb2xkZXIgaW1wbGVtZW50cyBTdXJmYWNlSG9sZGVy
IHsKLSAgICAgIHByaXZhdGUgZmluYWwgU3VyZmFjZSBzdXJmYWNlOwotCi0gICAgICBGYWtlU3Vy
ZmFjZUhvbGRlcihTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICAgICAgdGhpcy5zdXJmYWNlID0gc3Vy
ZmFjZTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBhZGRD
YWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykge30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCByZW1vdmVDYWxsYmFjayhDYWxsYmFjayBjYWxsYmFjaykge30KLQotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgYm9vbGVhbiBpc0NyZWF0aW5nKCkgewotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIEBEZXByZWNhdGVkCi0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoaW50IGkpIHt9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgc2V0Rml4ZWRTaXplKGludCBpLCBpbnQgaTIpIHt9Ci0KLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgc2V0U2l6ZUZyb21MYXlvdXQoKSB7fQot
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldEZvcm1hdChpbnQgaSkge30K
LQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXRLZWVwU2NyZWVuT24oYm9v
bGVhbiBiKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBDYW52YXMgbG9ja0Nh
bnZhcygpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIENhbnZhcyBsb2NrQ2FudmFzKFJlY3QgcmVjdCkgewotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCB1bmxvY2tDYW52YXNBbmRQb3N0KENhbnZhcyBjYW52YXMpIHt9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIFJlY3QgZ2V0U3VyZmFjZUZyYW1lKCkgewotICAgICAgICByZXR1cm4g
bnVsbDsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3VyZmFjZSBn
ZXRTdXJmYWNlKCkgewotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwobmV3IEZha2VTdXJmYWNlSG9sZGVyKHN1cmZhY2Up
KTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhlIEFuZHJvaWQgU3VyZmFj
ZVRleHR1cmUuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZh
Y2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKHN1
cmZhY2VUZXh0dXJlKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gZWl0aGVy
IGEgU3VyZmFjZUhvbGRlciBvciBhIFN1cmZhY2VUZXh0dXJlLgotICBwcml2YXRlIHZvaWQgY3Jl
YXRlU3VyZmFjZUludGVybmFsKE9iamVjdCBuYXRpdmVXaW5kb3cpIHsKLSAgICBpZiAoIShuYXRp
dmVXaW5kb3cgaW5zdGFuY2VvZiBTdXJmYWNlSG9sZGVyKSAmJiAhKG5hdGl2ZVdpbmRvdyBpbnN0
YW5jZW9mIFN1cmZhY2VUZXh0dXJlKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbigiSW5wdXQgbXVzdCBiZSBlaXRoZXIgYSBTdXJmYWNlSG9sZGVyIG9yIFN1cmZhY2VU
ZXh0dXJlIik7Ci0gICAgfQotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xT
dXJmYWNlICE9IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbigiQWxyZWFkeSBoYXMgYW4gRUdMU3VyZmFjZSIpOwotICAgIH0KLSAgICBpbnRb
XSBzdXJmYWNlQXR0cmlicyA9IHtFR0wxMC5FR0xfTk9ORX07Ci0gICAgZWdsU3VyZmFjZSA9IGVn
bC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGVnbERpc3BsYXksIGVnbENvbmZpZywgbmF0aXZlV2lu
ZG93LCBzdXJmYWNlQXR0cmlicyk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05P
X1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAg
ICJGYWlsZWQgdG8gY3JlYXRlIHdpbmRvdyBzdXJmYWNlOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3Ry
aW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ3JlYXRlIGR1bW15
IDF4MSBwaXhlbCBidWZmZXIgc3VyZmFjZSBzbyB0aGUgY29udGV4dCBjYW4gYmUgbWFkZSBjdXJy
ZW50LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFj
ZSgpIHsKLSAgICBjcmVhdGVQYnVmZmVyU3VyZmFjZSgxLCAxKTsKLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBjcmVhdGVQYnVmZmVyU3VyZmFjZShpbnQgd2lkdGgsIGludCBoZWln
aHQpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBF
R0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
IkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2UiKTsKLSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0
dHJpYnMgPSB7RUdMMTAuRUdMX1dJRFRILCB3aWR0aCwgRUdMMTAuRUdMX0hFSUdIVCwgaGVpZ2h0
LCBFR0wxMC5FR0xfTk9ORX07Ci0gICAgZWdsU3VyZmFjZSA9IGVnbC5lZ2xDcmVhdGVQYnVmZmVy
U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJzKTsKLSAgICBpZiAo
ZWdsU3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugd2l0
aCBzaXplICIgKyB3aWR0aCArICJ4IgotICAgICAgICAgICsgaGVpZ2h0ICsgIjogMHgiICsgSW50
ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgb3JnLndlYnJ0Yy5FZ2xCYXNlLkNvbnRleHQgZ2V0RWdsQmFzZUNv
bnRleHQoKSB7Ci0gICAgcmV0dXJuIG5ldyBFZ2xCYXNlMTAuQ29udGV4dChlZ2xDb250ZXh0KTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBoYXNTdXJmYWNlKCkgewotICAg
IHJldHVybiBlZ2xTdXJmYWNlICE9IEVHTDEwLkVHTF9OT19TVVJGQUNFOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZVdpZHRoKCkgewotICAgIGZpbmFsIGludCB3aWR0
aEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIGVnbC5lZ2xRdWVyeVN1cmZhY2UoZWdsRGlzcGxh
eSwgZWdsU3VyZmFjZSwgRUdMMTAuRUdMX1dJRFRILCB3aWR0aEFycmF5KTsKLSAgICByZXR1cm4g
d2lkdGhBcnJheVswXTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHN1cmZhY2VI
ZWlnaHQoKSB7Ci0gICAgZmluYWwgaW50IGhlaWdodEFycmF5W10gPSBuZXcgaW50WzFdOwotICAg
IGVnbC5lZ2xRdWVyeVN1cmZhY2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwgRUdMMTAuRUdMX0hF
SUdIVCwgaGVpZ2h0QXJyYXkpOwotICAgIHJldHVybiBoZWlnaHRBcnJheVswXTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxlYXNlU3VyZmFjZSgpIHsKLSAgICBpZiAoZWds
U3VyZmFjZSAhPSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgZWdsLmVnbERlc3Ryb3lT
dXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZhY2UpOwotICAgICAgZWdsU3VyZmFjZSA9IEVHTDEw
LkVHTF9OT19TVVJGQUNFOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja0lzTm90
UmVsZWFzZWQoKSB7Ci0gICAgaWYgKGVnbERpc3BsYXkgPT0gRUdMMTAuRUdMX05PX0RJU1BMQVkg
fHwgZWdsQ29udGV4dCA9PSBFR0wxMC5FR0xfTk9fQ09OVEVYVAotICAgICAgICB8fCBlZ2xDb25m
aWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoaXMgb2Jq
ZWN0IGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgcmVs
ZWFzZVN1cmZhY2UoKTsKLSAgICBkZXRhY2hDdXJyZW50KCk7Ci0gICAgZWdsLmVnbERlc3Ryb3lD
b250ZXh0KGVnbERpc3BsYXksIGVnbENvbnRleHQpOwotICAgIGVnbC5lZ2xUZXJtaW5hdGUoZWds
RGlzcGxheSk7Ci0gICAgZWdsQ29udGV4dCA9IEVHTDEwLkVHTF9OT19DT05URVhUOwotICAgIGVn
bERpc3BsYXkgPSBFR0wxMC5FR0xfTk9fRElTUExBWTsKLSAgICBlZ2xDb25maWcgPSBudWxsOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG1ha2VDdXJyZW50KCkgewotICAgIGNo
ZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlID09IEVHTDEwLkVHTF9OT19T
VVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gRUdMU3VyZmFj
ZSAtIGNhbid0IG1ha2UgY3VycmVudCIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJh
c2UubG9jaykgewotICAgICAgaWYgKCFlZ2wuZWdsTWFrZUN1cnJlbnQoZWdsRGlzcGxheSwgZWds
U3VyZmFjZSwgZWdsU3VyZmFjZSwgZWdsQ29udGV4dCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiZWdsTWFrZUN1cnJlbnQgZmFpbGVkOiAweCIg
KyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgLy8gRGV0YWNoIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0LCBzbyB0aGF0IGl0
IGNhbiBiZSBtYWRlIGN1cnJlbnQgb24gYW5vdGhlciB0aHJlYWQuCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBkZXRhY2hDdXJyZW50KCkgewotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5s
b2NrKSB7Ci0gICAgICBpZiAoIWVnbC5lZ2xNYWtlQ3VycmVudCgKLSAgICAgICAgICAgICAgZWds
RGlzcGxheSwgRUdMMTAuRUdMX05PX1NVUkZBQ0UsIEVHTDEwLkVHTF9OT19TVVJGQUNFLCBFR0wx
MC5FR0xfTk9fQ09OVEVYVCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
Ci0gICAgICAgICAgICAiZWdsRGV0YWNoQ3VycmVudCBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9I
ZXhTdHJpbmcoZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3dhcEJ1ZmZlcnMoKSB7Ci0gICAgY2hlY2tJc05vdFJl
bGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05PX1NVUkZBQ0UpIHsK
LSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBFR0xTdXJmYWNlIC0gY2FuJ3Qg
c3dhcCBidWZmZXJzIik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7
Ci0gICAgICBlZ2wuZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAg
fQotICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTERpc3BsYXksIG9yIGRpZSB0cnlpbmcuCi0gIHBy
aXZhdGUgRUdMRGlzcGxheSBnZXRFZ2xEaXNwbGF5KCkgewotICAgIEVHTERpc3BsYXkgZWdsRGlz
cGxheSA9IGVnbC5lZ2xHZXREaXNwbGF5KEVHTDEwLkVHTF9ERUZBVUxUX0RJU1BMQVkpOwotICAg
IGlmIChlZ2xEaXNwbGF5ID09IEVHTDEwLkVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGdldCBFR0wxMCBkaXNw
bGF5OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAg
fQotICAgIGludFtdIHZlcnNpb24gPSBuZXcgaW50WzJdOwotICAgIGlmICghZWdsLmVnbEluaXRp
YWxpemUoZWdsRGlzcGxheSwgdmVyc2lvbikpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKAotICAgICAgICAgICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBFR0wxMDogMHgiICsgSW50
ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICByZXR1cm4g
ZWdsRGlzcGxheTsKLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlp
bmcuCi0gIHByaXZhdGUgRUdMQ29uZmlnIGdldEVnbENvbmZpZyhFR0xEaXNwbGF5IGVnbERpc3Bs
YXksIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMpIHsKLSAgICBFR0xDb25maWdbXSBjb25maWdzID0g
bmV3IEVHTENvbmZpZ1sxXTsKLSAgICBpbnRbXSBudW1Db25maWdzID0gbmV3IGludFsxXTsKLSAg
ICBpZiAoIWVnbC5lZ2xDaG9vc2VDb25maWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcywg
Y29uZmlncywgY29uZmlncy5sZW5ndGgsIG51bUNvbmZpZ3MpKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiZWdsQ2hvb3NlQ29uZmlnIGZhaWxlZDogMHgi
ICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBp
ZiAobnVtQ29uZmlnc1swXSA8PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiVW5hYmxlIHRvIGZpbmQgYW55IG1hdGNoaW5nIEVHTCBjb25maWciKTsKLSAgICB9Ci0gICAg
ZmluYWwgRUdMQ29uZmlnIGVnbENvbmZpZyA9IGNvbmZpZ3NbMF07Ci0gICAgaWYgKGVnbENvbmZp
ZyA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ2hvb3Nl
Q29uZmlnIHJldHVybmVkIG51bGwiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbmZpZzsKLSAg
fQotCi0gIC8vIFJldHVybiBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUg
RUdMQ29udGV4dCBjcmVhdGVFZ2xDb250ZXh0KAotICAgICAgQ29udGV4dCBzaGFyZWRDb250ZXh0
LCBFR0xEaXNwbGF5IGVnbERpc3BsYXksIEVHTENvbmZpZyBlZ2xDb25maWcpIHsKLSAgICBpZiAo
c2hhcmVkQ29udGV4dCAhPSBudWxsICYmIHNoYXJlZENvbnRleHQuZWdsQ29udGV4dCA9PSBFR0wx
MC5FR0xfTk9fQ09OVEVYVCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIklu
dmFsaWQgc2hhcmVkQ29udGV4dCIpOwotICAgIH0KLSAgICBpbnRbXSBjb250ZXh0QXR0cmlidXRl
cyA9IHtFR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTiwgMiwgRUdMMTAuRUdMX05PTkV9OwotICAg
IEVHTENvbnRleHQgcm9vdENvbnRleHQgPQotICAgICAgICBzaGFyZWRDb250ZXh0ID09IG51bGwg
PyBFR0wxMC5FR0xfTk9fQ09OVEVYVCA6IHNoYXJlZENvbnRleHQuZWdsQ29udGV4dDsKLSAgICBm
aW5hbCBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxv
Y2spIHsKLSAgICAgIGVnbENvbnRleHQgPSBlZ2wuZWdsQ3JlYXRlQ29udGV4dChlZ2xEaXNwbGF5
LCBlZ2xDb25maWcsIHJvb3RDb250ZXh0LCBjb250ZXh0QXR0cmlidXRlcyk7Ci0gICAgfQotICAg
IGlmIChlZ2xDb250ZXh0ID09IEVHTDEwLkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgY29u
dGV4dDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAg
IH0KLSAgICByZXR1cm4gZWdsQ29udGV4dDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9FZ2xCYXNlMTQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2Ux
NC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UxNC5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsMjY0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRB
cGk7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRy
b2lkLm9wZW5nbC5FR0wxNDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0xDb25maWc7Ci1pbXBv
cnQgYW5kcm9pZC5vcGVuZ2wuRUdMQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0xE
aXNwbGF5OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTEV4dDsKLWltcG9ydCBhbmRyb2lkLm9w
ZW5nbC5FR0xTdXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotCi0vKioKLSAq
IEhvbGRzIEVHTCBzdGF0ZSBhbmQgdXRpbGl0eSBtZXRob2RzIGZvciBoYW5kbGluZyBhbiBFR0wx
NCBFR0xDb250ZXh0LCBhbiBFR0xEaXNwbGF5LAotICogYW5kIGFuIEVHTFN1cmZhY2UuCi0gKi8K
LUBUYXJnZXRBcGkoMTgpCi1wdWJsaWMgZmluYWwgY2xhc3MgRWdsQmFzZTE0IGV4dGVuZHMgRWds
QmFzZSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRWdsQmFzZTE0IjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVHTEV4dF9TREtfVkVSU0lPTiA9IGFuZHJvaWQu
b3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMjsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IENVUlJFTlRfU0RLX1ZFUlNJT04gPSBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT04u
U0RLX0lOVDsKLSAgcHJpdmF0ZSBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gIHByaXZhdGUgRUdM
Q29uZmlnIGVnbENvbmZpZzsKLSAgcHJpdmF0ZSBFR0xEaXNwbGF5IGVnbERpc3BsYXk7Ci0gIHBy
aXZhdGUgRUdMU3VyZmFjZSBlZ2xTdXJmYWNlID0gRUdMMTQuRUdMX05PX1NVUkZBQ0U7Ci0KLSAg
Ly8gRUdMIDEuNCBpcyBzdXBwb3J0ZWQgZnJvbSBBUEkgMTcuIEJ1dCBFR0xFeHQgdGhhdCBpcyB1
c2VkIGZvciBzZXR0aW5nIHByZXNlbnRhdGlvbgotICAvLyB0aW1lIHN0YW1wIG9uIGEgc3VyZmFj
ZSBpcyBzdXBwb3J0ZWQgZnJvbSAxOCBzbyB3ZSByZXF1aXJlIDE4LgotICBwdWJsaWMgc3RhdGlj
IGJvb2xlYW4gaXNFR0wxNFN1cHBvcnRlZCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU0RLIHZl
cnNpb246ICIgKyBDVVJSRU5UX1NES19WRVJTSU9OICsgIi4gaXNFR0wxNFN1cHBvcnRlZDogIgot
ICAgICAgICAgICAgKyAoQ1VSUkVOVF9TREtfVkVSU0lPTiA+PSBFR0xFeHRfU0RLX1ZFUlNJT04p
KTsKLSAgICByZXR1cm4gKENVUlJFTlRfU0RLX1ZFUlNJT04gPj0gRUdMRXh0X1NES19WRVJTSU9O
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29udGV4dCBleHRlbmRzIEVnbEJhc2Uu
Q29udGV4dCB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lkLm9wZW5nbC5FR0xDb250ZXh0IGVn
bDE0Q29udGV4dDsKLQotICAgIHB1YmxpYyBDb250ZXh0KGFuZHJvaWQub3BlbmdsLkVHTENvbnRl
eHQgZWdsQ29udGV4dCkgewotICAgICAgdGhpcy5lZ2wxNENvbnRleHQgPSBlZ2xDb250ZXh0Owot
ICAgIH0KLSAgfQotCi0gIC8vIENyZWF0ZSBhIG5ldyBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmll
ZCBjb25maWcgdHlwZSwgc2hhcmluZyBkYXRhIHdpdGggc2hhcmVkQ29udGV4dC4KLSAgLy8gfHNo
YXJlZENvbnRleHR8IG1heSBiZSBudWxsLgotICBwdWJsaWMgRWdsQmFzZTE0KEVnbEJhc2UxNC5D
b250ZXh0IHNoYXJlZENvbnRleHQsIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMpIHsKLSAgICBlZ2xE
aXNwbGF5ID0gZ2V0RWdsRGlzcGxheSgpOwotICAgIGVnbENvbmZpZyA9IGdldEVnbENvbmZpZyhl
Z2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgICBlZ2xDb250ZXh0ID0gY3JlYXRlRWds
Q29udGV4dChzaGFyZWRDb250ZXh0LCBlZ2xEaXNwbGF5LCBlZ2xDb25maWcpOwotICB9Ci0KLSAg
Ly8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNlLgotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICBj
cmVhdGVTdXJmYWNlSW50ZXJuYWwoc3VyZmFjZSk7Ci0gIH0KLQotICAvLyBDcmVhdGUgRUdMU3Vy
ZmFjZSBmcm9tIHRoZSBBbmRyb2lkIFN1cmZhY2VUZXh0dXJlLgotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgewot
ICAgIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChzdXJmYWNlVGV4dHVyZSk7Ci0gIH0KLQotICAvLyBD
cmVhdGUgRUdMU3VyZmFjZSBmcm9tIGVpdGhlciBTdXJmYWNlIG9yIFN1cmZhY2VUZXh0dXJlLgot
ICBwcml2YXRlIHZvaWQgY3JlYXRlU3VyZmFjZUludGVybmFsKE9iamVjdCBzdXJmYWNlKSB7Ci0g
ICAgaWYgKCEoc3VyZmFjZSBpbnN0YW5jZW9mIFN1cmZhY2UpICYmICEoc3VyZmFjZSBpbnN0YW5j
ZW9mIFN1cmZhY2VUZXh0dXJlKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2Vw
dGlvbigiSW5wdXQgbXVzdCBiZSBlaXRoZXIgYSBTdXJmYWNlIG9yIFN1cmZhY2VUZXh0dXJlIik7
Ci0gICAgfQotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlICE9
IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiQWxyZWFkeSBoYXMgYW4gRUdMU3VyZmFjZSIpOwotICAgIH0KLSAgICBpbnRbXSBzdXJmYWNl
QXR0cmlicyA9IHtFR0wxNC5FR0xfTk9ORX07Ci0gICAgZWdsU3VyZmFjZSA9IEVHTDE0LmVnbENy
ZWF0ZVdpbmRvd1N1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCBzdXJmYWNlLCBzdXJmYWNl
QXR0cmlicywgMCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTQuRUdMX05PX1NVUkZBQ0Up
IHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJGYWlsZWQg
dG8gY3JlYXRlIHdpbmRvdyBzdXJmYWNlOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0
LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgpIHsKLSAgICBjcmVhdGVQYnVmZmVyU3VyZmFj
ZSgxLCAxKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVQYnVmZmVy
U3VyZmFjZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQo
KTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2UiKTsK
LSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTQuRUdMX1dJRFRILCB3aWR0
aCwgRUdMMTQuRUdMX0hFSUdIVCwgaGVpZ2h0LCBFR0wxNC5FR0xfTk9ORX07Ci0gICAgZWdsU3Vy
ZmFjZSA9IEVHTDE0LmVnbENyZWF0ZVBidWZmZXJTdXJmYWNlKGVnbERpc3BsYXksIGVnbENvbmZp
Zywgc3VyZmFjZUF0dHJpYnMsIDApOwotICAgIGlmIChlZ2xTdXJmYWNlID09IEVHTDE0LkVHTF9O
T19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbGVkIHRv
IGNyZWF0ZSBwaXhlbCBidWZmZXIgc3VyZmFjZSB3aXRoIHNpemUgIiArIHdpZHRoICsgIngiCi0g
ICAgICAgICAgKyBoZWlnaHQgKyAiOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVn
bEdldEVycm9yKCkpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIENvbnRl
eHQgZ2V0RWdsQmFzZUNvbnRleHQoKSB7Ci0gICAgcmV0dXJuIG5ldyBFZ2xCYXNlMTQuQ29udGV4
dChlZ2xDb250ZXh0KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBoYXNT
dXJmYWNlKCkgewotICAgIHJldHVybiBlZ2xTdXJmYWNlICE9IEVHTDE0LkVHTF9OT19TVVJGQUNF
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBpbnQgc3VyZmFjZVdpZHRoKCkgewotICAg
IGZpbmFsIGludCB3aWR0aEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIEVHTDE0LmVnbFF1ZXJ5
U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxNC5FR0xfV0lEVEgsIHdpZHRoQXJy
YXksIDApOwotICAgIHJldHVybiB3aWR0aEFycmF5WzBdOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBpbnQgc3VyZmFjZUhlaWdodCgpIHsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0QXJyYXlb
XSA9IG5ldyBpbnRbMV07Ci0gICAgRUdMMTQuZWdsUXVlcnlTdXJmYWNlKGVnbERpc3BsYXksIGVn
bFN1cmZhY2UsIEVHTDE0LkVHTF9IRUlHSFQsIGhlaWdodEFycmF5LCAwKTsKLSAgICByZXR1cm4g
aGVpZ2h0QXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFz
ZVN1cmZhY2UoKSB7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTQuRUdMX05PX1NVUkZBQ0Up
IHsKLSAgICAgIEVHTDE0LmVnbERlc3Ryb3lTdXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZhY2Up
OwotICAgICAgZWdsU3VyZmFjZSA9IEVHTDE0LkVHTF9OT19TVVJGQUNFOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBjaGVja0lzTm90UmVsZWFzZWQoKSB7Ci0gICAgaWYgKGVnbERpc3Bs
YXkgPT0gRUdMMTQuRUdMX05PX0RJU1BMQVkgfHwgZWdsQ29udGV4dCA9PSBFR0wxNC5FR0xfTk9f
Q09OVEVYVAotICAgICAgICB8fCBlZ2xDb25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oIlRoaXMgb2JqZWN0IGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0gICAg
fQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgY2hl
Y2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgcmVsZWFzZVN1cmZhY2UoKTsKLSAgICBkZXRhY2hDdXJy
ZW50KCk7Ci0gICAgRUdMMTQuZWdsRGVzdHJveUNvbnRleHQoZWdsRGlzcGxheSwgZWdsQ29udGV4
dCk7Ci0gICAgRUdMMTQuZWdsUmVsZWFzZVRocmVhZCgpOwotICAgIEVHTDE0LmVnbFRlcm1pbmF0
ZShlZ2xEaXNwbGF5KTsKLSAgICBlZ2xDb250ZXh0ID0gRUdMMTQuRUdMX05PX0NPTlRFWFQ7Ci0g
ICAgZWdsRGlzcGxheSA9IEVHTDE0LkVHTF9OT19ESVNQTEFZOwotICAgIGVnbENvbmZpZyA9IG51
bGw7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgbWFrZUN1cnJlbnQoKSB7Ci0g
ICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTQuRUdM
X05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBFR0xT
dXJmYWNlIC0gY2FuJ3QgbWFrZSBjdXJyZW50Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAo
RWdsQmFzZS5sb2NrKSB7Ci0gICAgICBpZiAoIUVHTDE0LmVnbE1ha2VDdXJyZW50KGVnbERpc3Bs
YXksIGVnbFN1cmZhY2UsIGVnbFN1cmZhY2UsIGVnbENvbnRleHQpKSB7Ci0gICAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVnbE1ha2VDdXJyZW50IGZhaWxl
ZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gRGV0YWNoIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0LCBz
byB0aGF0IGl0IGNhbiBiZSBtYWRlIGN1cnJlbnQgb24gYW5vdGhlciB0aHJlYWQuCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBkZXRhY2hDdXJyZW50KCkgewotICAgIHN5bmNocm9uaXplZCAo
RWdsQmFzZS5sb2NrKSB7Ci0gICAgICBpZiAoIUVHTDE0LmVnbE1ha2VDdXJyZW50KAotICAgICAg
ICAgICAgICBlZ2xEaXNwbGF5LCBFR0wxNC5FR0xfTk9fU1VSRkFDRSwgRUdMMTQuRUdMX05PX1NV
UkZBQ0UsIEVHTDE0LkVHTF9OT19DT05URVhUKSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICJlZ2xEZXRhY2hDdXJyZW50IGZhaWxlZDogMHgiICsg
SW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3YXBCdWZmZXJzKCkgewotICAg
IGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlID09IEVHTDE0LkVHTF9O
T19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiTm8gRUdMU3Vy
ZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKEVn
bEJhc2UubG9jaykgewotICAgICAgRUdMMTQuZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwgZWds
U3VyZmFjZSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc3dhcEJ1ZmZlcnMobG9uZyB0
aW1lU3RhbXBOcykgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJm
YWNlID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIpOwotICAgIH0KLSAg
ICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgLy8gU2VlCi0gICAgICAvLyBo
dHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9mcmFtZXdvcmtzL25hdGl2
ZS8rL3Rvb2xzX3IyMi4yL29wZW5nbC9zcGVjcy9FR0xfQU5EUk9JRF9wcmVzZW50YXRpb25fdGlt
ZS50eHQKLSAgICAgIEVHTEV4dC5lZ2xQcmVzZW50YXRpb25UaW1lQU5EUk9JRChlZ2xEaXNwbGF5
LCBlZ2xTdXJmYWNlLCB0aW1lU3RhbXBOcyk7Ci0gICAgICBFR0wxNC5lZ2xTd2FwQnVmZmVycyhl
Z2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdM
RGlzcGxheSwgb3IgZGllIHRyeWluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgRUdMRGlzcGxheSBnZXRF
Z2xEaXNwbGF5KCkgewotICAgIEVHTERpc3BsYXkgZWdsRGlzcGxheSA9IEVHTDE0LmVnbEdldERp
c3BsYXkoRUdMMTQuRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0gICAgaWYgKGVnbERpc3BsYXkgPT0g
RUdMMTQuRUdMX05PX0RJU1BMQVkpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KAotICAgICAgICAgICJVbmFibGUgdG8gZ2V0IEVHTDE0IGRpc3BsYXk6IDB4IiArIEludGVnZXIu
dG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBpbnRbXSB2ZXJz
aW9uID0gbmV3IGludFsyXTsKLSAgICBpZiAoIUVHTDE0LmVnbEluaXRpYWxpemUoZWdsRGlzcGxh
eSwgdmVyc2lvbiwgMCwgdmVyc2lvbiwgMSkpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhj
ZXB0aW9uKAotICAgICAgICAgICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBFR0wxNDogMHgiICsgSW50
ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIHJldHVy
biBlZ2xEaXNwbGF5OwotICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTENvbmZpZywgb3IgZGllIHRy
eWluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgRUdMQ29uZmlnIGdldEVnbENvbmZpZyhFR0xEaXNwbGF5
IGVnbERpc3BsYXksIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMpIHsKLSAgICBFR0xDb25maWdbXSBj
b25maWdzID0gbmV3IEVHTENvbmZpZ1sxXTsKLSAgICBpbnRbXSBudW1Db25maWdzID0gbmV3IGlu
dFsxXTsKLSAgICBpZiAoIUVHTDE0LmVnbENob29zZUNvbmZpZygKLSAgICAgICAgICAgIGVnbERp
c3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsIDAsIGNvbmZpZ3MsIDAsIGNvbmZpZ3MubGVuZ3RoLCBu
dW1Db25maWdzLCAwKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAg
ICAgICAgImVnbENob29zZUNvbmZpZyBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmco
RUdMMTQuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBpZiAobnVtQ29uZmlnc1swXSA8PSAw
KSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGZpbmQgYW55
IG1hdGNoaW5nIEVHTCBjb25maWciKTsKLSAgICB9Ci0gICAgZmluYWwgRUdMQ29uZmlnIGVnbENv
bmZpZyA9IGNvbmZpZ3NbMF07Ci0gICAgaWYgKGVnbENvbmZpZyA9PSBudWxsKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZWdsQ2hvb3NlQ29uZmlnIHJldHVybmVkIG51bGwi
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbmZpZzsKLSAgfQotCi0gIC8vIFJldHVybiBhbiBF
R0xDb25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgc3RhdGljIEVHTENvbnRleHQgY3Jl
YXRlRWdsQ29udGV4dCgKLSAgICAgIEVnbEJhc2UxNC5Db250ZXh0IHNoYXJlZENvbnRleHQsIEVH
TERpc3BsYXkgZWdsRGlzcGxheSwgRUdMQ29uZmlnIGVnbENvbmZpZykgewotICAgIGlmIChzaGFy
ZWRDb250ZXh0ICE9IG51bGwgJiYgc2hhcmVkQ29udGV4dC5lZ2wxNENvbnRleHQgPT0gRUdMMTQu
RUdMX05PX0NPTlRFWFQpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZh
bGlkIHNoYXJlZENvbnRleHQiKTsKLSAgICB9Ci0gICAgaW50W10gY29udGV4dEF0dHJpYnV0ZXMg
PSB7RUdMMTQuRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04sIDIsIEVHTDE0LkVHTF9OT05FfTsK
LSAgICBFR0xDb250ZXh0IHJvb3RDb250ZXh0ID0KLSAgICAgICAgc2hhcmVkQ29udGV4dCA9PSBu
dWxsID8gRUdMMTQuRUdMX05PX0NPTlRFWFQgOiBzaGFyZWRDb250ZXh0LmVnbDE0Q29udGV4dDsK
LSAgICBmaW5hbCBFR0xDb250ZXh0IGVnbENvbnRleHQ7Ci0gICAgc3luY2hyb25pemVkIChFZ2xC
YXNlLmxvY2spIHsKLSAgICAgIGVnbENvbnRleHQgPSBFR0wxNC5lZ2xDcmVhdGVDb250ZXh0KGVn
bERpc3BsYXksIGVnbENvbmZpZywgcm9vdENvbnRleHQsIGNvbnRleHRBdHRyaWJ1dGVzLCAwKTsK
LSAgICB9Ci0gICAgaWYgKGVnbENvbnRleHQgPT0gRUdMMTQuRUdMX05PX0NPTlRFWFQpIHsKLSAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJGYWlsZWQgdG8gY3Jl
YXRlIEVHTCBjb250ZXh0OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVy
cm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbnRleHQ7Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL0VnbFJlbmRlcmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvRWdsUmVuZGVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDY3NiArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lk
LmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJl
OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRs
ZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQub3Mu
TG9vcGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNlOwotaW1wb3J0IGphdmEubmlvLkJ5
dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwu
SXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1p
bXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8qKgotICogSW1wbGVtZW50
cyBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGJ5IGRpc3BsYXlpbmcgdGhlIHZp
ZGVvIHN0cmVhbSBvbiBhbiBFR0wgU3VyZmFjZS4KLSAqIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQg
dG8gYmUgdXNlZCBhcyBhIGhlbHBlciBjbGFzcyBmb3IgcmVuZGVyaW5nIG9uIFN1cmZhY2VWaWV3
cyBhbmQKLSAqIFRleHR1cmVWaWV3cy4KLSAqLwotcHVibGljIGNsYXNzIEVnbFJlbmRlcmVyIGlt
cGxlbWVudHMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIkVnbFJlbmRlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9u
ZyBMT0dfSU5URVJWQUxfU0VDID0gNDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9T
VVJGQUNFX0NMRUFSX0NPVU5UID0gMzsKLQotICBwdWJsaWMgaW50ZXJmYWNlIEZyYW1lTGlzdGVu
ZXIgeyB2b2lkIG9uRnJhbWUoQml0bWFwIGZyYW1lKTsgfQotCi0gIHByaXZhdGUgc3RhdGljIGNs
YXNzIFNjYWxlQW5kRnJhbWVMaXN0ZW5lciB7Ci0gICAgcHVibGljIGZpbmFsIGZsb2F0IHNjYWxl
OwotICAgIHB1YmxpYyBmaW5hbCBGcmFtZUxpc3RlbmVyIGxpc3RlbmVyOwotCi0gICAgcHVibGlj
IFNjYWxlQW5kRnJhbWVMaXN0ZW5lcihmbG9hdCBzY2FsZSwgRnJhbWVMaXN0ZW5lciBsaXN0ZW5l
cikgewotICAgICAgdGhpcy5zY2FsZSA9IHNjYWxlOwotICAgICAgdGhpcy5saXN0ZW5lciA9IGxp
c3RlbmVyOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgRWdsU3VyZmFjZUNyZWF0aW9u
IGltcGxlbWVudHMgUnVubmFibGUgewotICAgIHByaXZhdGUgT2JqZWN0IHN1cmZhY2U7Ci0KLSAg
ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0U3VyZmFjZShPYmplY3Qgc3VyZmFjZSkgewot
ICAgICAgdGhpcy5zdXJmYWNlID0gc3VyZmFjZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcnVuKCkgewotICAgICAgaWYgKHN1cmZhY2UgIT0g
bnVsbCAmJiBlZ2xCYXNlICE9IG51bGwgJiYgIWVnbEJhc2UuaGFzU3VyZmFjZSgpKSB7Ci0gICAg
ICAgIGlmIChzdXJmYWNlIGluc3RhbmNlb2YgU3VyZmFjZSkgewotICAgICAgICAgIGVnbEJhc2Uu
Y3JlYXRlU3VyZmFjZSgoU3VyZmFjZSkgc3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3Vy
ZmFjZSBpbnN0YW5jZW9mIFN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgICAgICAgZWdsQmFzZS5jcmVh
dGVTdXJmYWNlKChTdXJmYWNlVGV4dHVyZSkgc3VyZmFjZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiSW52YWxpZCBzdXJmYWNl
OiAiICsgc3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgp
OwotICAgICAgICAvLyBOZWNlc3NhcnkgZm9yIFlVViBmcmFtZXMgd2l0aCBvZGQgd2lkdGguCi0g
ICAgICAgIEdMRVMyMC5nbFBpeGVsU3RvcmVpKEdMRVMyMC5HTF9VTlBBQ0tfQUxJR05NRU5ULCAx
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwot
Ci0gIC8vIHxyZW5kZXJUaHJlYWRIYW5kbGVyfCBpcyBhIGhhbmRsZXIgZm9yIGNvbW11bmljYXRp
bmcgd2l0aCB8cmVuZGVyVGhyZWFkfCwgYW5kIGlzIHN5bmNocm9uaXplZAotICAvLyBvbiB8aGFu
ZGxlckxvY2t8LgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBoYW5kbGVyTG9jayA9IG5ldyBPYmpl
Y3QoKTsKLSAgcHJpdmF0ZSBIYW5kbGVyIHJlbmRlclRocmVhZEhhbmRsZXI7Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBPYmplY3QgZnJhbWVMaXN0ZW5lckxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZh
dGUgZmluYWwgQXJyYXlMaXN0PFNjYWxlQW5kRnJhbWVMaXN0ZW5lcj4gZnJhbWVMaXN0ZW5lcnMg
PSBuZXcgQXJyYXlMaXN0PD4oKTsKLQotICAvLyBWYXJpYWJsZXMgZm9yIGZwcyByZWR1Y3Rpb24u
Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGZwc1JlZHVjdGlvbkxvY2sgPSBuZXcgT2JqZWN0KCk7
Ci0gIC8vIFRpbWUgZm9yIHdoZW4gbmV4dCBmcmFtZSBzaG91bGQgYmUgcmVuZGVyZWQuCi0gIHBy
aXZhdGUgbG9uZyBuZXh0RnJhbWVUaW1lTnM7Ci0gIC8vIE1pbmltdW0gZHVyYXRpb24gYmV0d2Vl
biBmcmFtZXMgd2hlbiBmcHMgcmVkdWN0aW9uIGlzIGFjdGl2ZSwgb3IgLTEgaWYgdmlkZW8gaXMg
Y29tcGxldGVseQotICAvLyBwYXVzZWQuCi0gIHByaXZhdGUgbG9uZyBtaW5SZW5kZXJQZXJpb2RO
czsKLQotICAvLyBFR0wgYW5kIEdMIHJlc291cmNlcyBmb3IgZHJhd2luZyBZVVYvT0VTIHRleHR1
cmVzLiBBZnRlciBpbml0aWxpemF0aW9uLCB0aGVzZSBhcmUgb25seSBhY2Nlc3NlZAotICAvLyBm
cm9tIHRoZSByZW5kZXIgdGhyZWFkLgotICBwcml2YXRlIEVnbEJhc2UgZWdsQmFzZTsKLSAgcHJp
dmF0ZSBmaW5hbCBSZW5kZXJlckNvbW1vbi5ZdXZVcGxvYWRlciB5dXZVcGxvYWRlciA9IG5ldyBS
ZW5kZXJlckNvbW1vbi5ZdXZVcGxvYWRlcigpOwotICBwcml2YXRlIFJlbmRlcmVyQ29tbW9uLkds
RHJhd2VyIGRyYXdlcjsKLSAgLy8gVGV4dHVyZSBpZHMgZm9yIFlVViBmcmFtZXMuIEFsbG9jYXRl
ZCBvbiBmaXJzdCBhcnJpdmFsIG9mIGEgWVVWIGZyYW1lLgotICBwcml2YXRlIGludFtdIHl1dlRl
eHR1cmVzID0gbnVsbDsKLQotICAvLyBQZW5kaW5nIGZyYW1lIHRvIHJlbmRlci4gU2VydmVzIGFz
IGEgcXVldWUgd2l0aCBzaXplIDEuIFN5bmNocm9uaXplZCBvbiB8ZnJhbWVMb2NrfC4KLSAgcHJp
dmF0ZSBmaW5hbCBPYmplY3QgZnJhbWVMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIFZp
ZGVvUmVuZGVyZXIuSTQyMEZyYW1lIHBlbmRpbmdGcmFtZTsKLQotICAvLyBUaGVzZSB2YXJpYWJs
ZXMgYXJlIHN5bmNocm9uaXplZCBvbiB8bGF5b3V0TG9ja3wuCi0gIHByaXZhdGUgZmluYWwgT2Jq
ZWN0IGxheW91dExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgaW50IHN1cmZhY2VXaWR0
aDsKLSAgcHJpdmF0ZSBpbnQgc3VyZmFjZUhlaWdodDsKLSAgcHJpdmF0ZSBmbG9hdCBsYXlvdXRB
c3BlY3RSYXRpbzsKLSAgLy8gSWYgdHJ1ZSwgbWlycm9ycyB0aGUgdmlkZW8gc3RyZWFtIGhvcml6
b250YWxseS4KLSAgcHJpdmF0ZSBib29sZWFuIG1pcnJvcjsKLQotICAvLyBUaGVzZSB2YXJpYWJs
ZXMgYXJlIHN5bmNocm9uaXplZCBvbiB8c3RhdGlzdGljc0xvY2t8LgotICBwcml2YXRlIGZpbmFs
IE9iamVjdCBzdGF0aXN0aWNzTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgLy8gVG90YWwgbnVtYmVy
IG9mIHZpZGVvIGZyYW1lcyByZWNlaXZlZCBpbiByZW5kZXJGcmFtZSgpIGNhbGwuCi0gIHByaXZh
dGUgaW50IGZyYW1lc1JlY2VpdmVkOwotICAvLyBOdW1iZXIgb2YgdmlkZW8gZnJhbWVzIGRyb3Bw
ZWQgYnkgcmVuZGVyRnJhbWUoKSBiZWNhdXNlIHByZXZpb3VzIGZyYW1lIGhhcyBub3QgYmVlbiBy
ZW5kZXJlZAotICAvLyB5ZXQuCi0gIHByaXZhdGUgaW50IGZyYW1lc0Ryb3BwZWQ7Ci0gIC8vIE51
bWJlciBvZiByZW5kZXJlZCB2aWRlbyBmcmFtZXMuCi0gIHByaXZhdGUgaW50IGZyYW1lc1JlbmRl
cmVkOwotICAvLyBTdGFydCB0aW1lIGZvciBjb3VudGluZyB0aGVzZSBzdGF0aXN0aWNzLCBvciAw
IGlmIHdlIGhhdmVuJ3Qgc3RhcnRlZCBtZWFzdXJpbmcgeWV0LgotICBwcml2YXRlIGxvbmcgc3Rh
dGlzdGljc1N0YXJ0VGltZU5zOwotICAvLyBUaW1lIGluIG5zIHNwZW50IGluIHJlbmRlckZyYW1l
T25SZW5kZXJUaHJlYWQoKSBmdW5jdGlvbi4KLSAgcHJpdmF0ZSBsb25nIHJlbmRlclRpbWVOczsK
LSAgLy8gVGltZSBpbiBucyBzcGVudCBieSB0aGUgcmVuZGVyIHRocmVhZCBpbiB0aGUgc3dhcEJ1
ZmZlcnMoKSBmdW5jdGlvbi4KLSAgcHJpdmF0ZSBsb25nIHJlbmRlclN3YXBCdWZmZXJUaW1lTnM7
Ci0KLSAgLy8gVXNlZCBmb3IgYml0bWFwIGNhcHR1cmluZy4KLSAgcHJpdmF0ZSBHbFRleHR1cmVG
cmFtZUJ1ZmZlciBiaXRtYXBUZXh0dXJlRnJhbWVidWZmZXI7Ci0KLSAgLy8gUnVubmFibGUgZm9y
IHBvc3RpbmcgZnJhbWVzIHRvIHJlbmRlciB0aHJlYWQuCi0gIHByaXZhdGUgZmluYWwgUnVubmFi
bGUgcmVuZGVyRnJhbWVSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICByZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFk
KCk7Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgZmluYWwgUnVubmFibGUgbG9nU3RhdGlzdGlj
c1J1bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgIGxvZ1N0YXRpc3RpY3MoKTsKLSAgICAgIHN5bmNocm9uaXplZCAo
aGFuZGxlckxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJhY2tzKGxvZ1N0YXRp
c3RpY3NSdW5uYWJsZSk7Ci0gICAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0RGVsYXll
ZCgKLSAgICAgICAgICAgICAgbG9nU3RhdGlzdGljc1J1bm5hYmxlLCBUaW1lVW5pdC5TRUNPTkRT
LnRvTWlsbGlzKExPR19JTlRFUlZBTF9TRUMpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LSAgfTsKLQotICBwcml2YXRlIGZpbmFsIEVnbFN1cmZhY2VDcmVhdGlvbiBlZ2xTdXJmYWNlQ3Jl
YXRpb25SdW5uYWJsZSA9IG5ldyBFZ2xTdXJmYWNlQ3JlYXRpb24oKTsKLQotICAvKioKLSAgICog
U3RhbmRhcmQgY29uc3RydWN0b3IuIFRoZSBuYW1lIHdpbGwgYmUgdXNlZCBmb3IgdGhlIHJlbmRl
ciB0aHJlYWQgbmFtZSBhbmQgaW5jbHVkZWQgd2hlbgotICAgKiBsb2dnaW5nLiBJbiBvcmRlciB0
byByZW5kZXIgc29tZXRoaW5nLCB5b3UgbXVzdCBmaXJzdCBjYWxsIGluaXQoKSBhbmQgY3JlYXRl
RWdsU3VyZmFjZS4KLSAgICovCi0gIHB1YmxpYyBFZ2xSZW5kZXJlcihTdHJpbmcgbmFtZSkgewot
ICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSB0aGlz
IGNsYXNzLCBzaGFyaW5nIHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gVGhlIGN1c3Rv
bSB8ZHJhd2VyfCB3aWxsIGJlIHVzZWQKLSAgICogZm9yIGRyYXdpbmcgZnJhbWVzIG9uIHRoZSBF
R0xTdXJmYWNlLiBUaGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHJlbGVhc2Uo
KSBvbgotICAgKiB8ZHJhd2VyfC4gSXQgaXMgYWxsb3dlZCB0byBjYWxsIGluaXQoKSB0byByZWlu
aXRpYWxpemUgdGhlIHJlbmRlcmVyIGFmdGVyIGEgcHJldmlvdXMKLSAgICogaW5pdCgpL3JlbGVh
c2UoKSBjeWNsZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGluaXQoZmluYWwgRWdsQmFzZS5Db250
ZXh0IHNoYXJlZENvbnRleHQsIGZpbmFsIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMsCi0gICAgICBS
ZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXIpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRs
ZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24obmFtZSArICJBbHJlYWR5IGluaXRp
YWxpemVkIik7Ci0gICAgICB9Ci0gICAgICBsb2dEKCJJbml0aWFsaXppbmcgRWdsUmVuZGVyZXIi
KTsKLSAgICAgIHRoaXMuZHJhd2VyID0gZHJhd2VyOwotCi0gICAgICBmaW5hbCBIYW5kbGVyVGhy
ZWFkIHJlbmRlclRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKG5hbWUgKyAiRWdsUmVuZGVyZXIi
KTsKLSAgICAgIHJlbmRlclRocmVhZC5zdGFydCgpOwotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxl
ciA9IG5ldyBIYW5kbGVyKHJlbmRlclRocmVhZC5nZXRMb29wZXIoKSk7Ci0gICAgICAvLyBDcmVh
dGUgRUdMIGNvbnRleHQgb24gdGhlIG5ld2x5IGNyZWF0ZWQgcmVuZGVyIHRocmVhZC4gSXQgc2hv
dWxkIGJlIHBvc3NpYmx5IHRvIGNyZWF0ZSB0aGUKLSAgICAgIC8vIGNvbnRleHQgb24gdGhpcyB0
aHJlYWQgYW5kIG1ha2UgaXQgY3VycmVudCBvbiB0aGUgcmVuZGVyIHRocmVhZCwgYnV0IHRoaXMg
Y2F1c2VzIGZhaWx1cmUgb24KLSAgICAgIC8vIHNvbWUgTWFydmVsIGJhc2VkIEpCIGRldmljZXMu
IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD02MzUw
LgotICAgICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShyZW5kZXJU
aHJlYWRIYW5kbGVyLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgLy8gSWYgc2hhcmVkQ29udGV4dCBpcyBu
dWxsLCB0aGVuIHRleHR1cmUgZnJhbWVzIGFyZSBkaXNhYmxlZC4gVGhpcyBpcyB0eXBpY2FsbHkg
Zm9yIG9sZAotICAgICAgICAgIC8vIGRldmljZXMgdGhhdCBtaWdodCBub3QgYmUgZnVsbHkgc3Bl
YyBjb21wbGlhbnQsIHNvIGZvcmNlIEVHTCAxLjAgc2luY2UgRUdMIDEuNCBoYXMKLSAgICAgICAg
ICAvLyBjYXVzZWQgdHJvdWJsZSBvbiBzb21lIHdlaXJkIGRldmljZXMuCi0gICAgICAgICAgaWYg
KHNoYXJlZENvbnRleHQgPT0gbnVsbCkgewotICAgICAgICAgICAgbG9nRCgiRWdsQmFzZTEwLmNy
ZWF0ZSBjb250ZXh0Iik7Ci0gICAgICAgICAgICBlZ2xCYXNlID0gbmV3IEVnbEJhc2UxMChudWxs
IC8qIHNoYXJlZENvbnRleHQgKi8sIGNvbmZpZ0F0dHJpYnV0ZXMpOwotICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBsb2dEKCJFZ2xCYXNlLmNyZWF0ZSBzaGFyZWQgY29udGV4dCIpOwot
ICAgICAgICAgICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKHNoYXJlZENvbnRleHQsIGNvbmZp
Z0F0dHJpYnV0ZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBy
ZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3QoZWdsU3VyZmFjZUNyZWF0aW9uUnVubmFibGUpOwotICAg
ICAgZmluYWwgbG9uZyBjdXJyZW50VGltZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICBy
ZXNldFN0YXRpc3RpY3MoY3VycmVudFRpbWVOcyk7Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVy
LnBvc3REZWxheWVkKAotICAgICAgICAgIGxvZ1N0YXRpc3RpY3NSdW5uYWJsZSwgVGltZVVuaXQu
U0VDT05EUy50b01pbGxpcyhMT0dfSU5URVJWQUxfU0VDKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVi
bGljIHZvaWQgY3JlYXRlRWdsU3VyZmFjZShTdXJmYWNlIHN1cmZhY2UpIHsKLSAgICBjcmVhdGVF
Z2xTdXJmYWNlSW50ZXJuYWwoc3VyZmFjZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVF
Z2xTdXJmYWNlKFN1cmZhY2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlKSB7Ci0gICAgY3JlYXRlRWds
U3VyZmFjZUludGVybmFsKHN1cmZhY2VUZXh0dXJlKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBj
cmVhdGVFZ2xTdXJmYWNlSW50ZXJuYWwoT2JqZWN0IHN1cmZhY2UpIHsKLSAgICBlZ2xTdXJmYWNl
Q3JlYXRpb25SdW5uYWJsZS5zZXRTdXJmYWNlKHN1cmZhY2UpOwotICAgIHBvc3RUb1JlbmRlclRo
cmVhZChlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZSk7Ci0gIH0KLQotICAvKioKLSAgICogQmxv
Y2sgdW50aWwgYW55IHBlbmRpbmcgZnJhbWUgaXMgcmV0dXJuZWQgYW5kIGFsbCBHTCByZXNvdXJj
ZXMgcmVsZWFzZWQsIGV2ZW4gaWYgYW4gaW50ZXJydXB0Ci0gICAqIG9jY3Vycy4gSWYgYW4gaW50
ZXJydXB0IG9jY3VycyBkdXJpbmcgcmVsZWFzZSgpLCB0aGUgaW50ZXJydXB0IGZsYWcgd2lsbCBi
ZSBzZXQuIFRoaXMgZnVuY3Rpb24KLSAgICogc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlIEFj
dGl2aXR5IGlzIGRlc3Ryb3llZCBhbmQgdGhlIEVHTENvbnRleHQgaXMgc3RpbGwgdmFsaWQuIElm
IHlvdQotICAgKiBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZSBHTCByZXNvdXJjZXMgbWln
aHQgbGVhay4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgbG9nRCgiUmVs
ZWFzaW5nLiIpOwotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGVnbENsZWFudXBCYXJyaWVyID0g
bmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsK
LSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpIHsKLSAgICAgICAgbG9nRCgi
QWxyZWFkeSByZWxlYXNlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICByZW5k
ZXJUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhsb2dTdGF0aXN0aWNzUnVubmFibGUpOwot
ICAgICAgLy8gUmVsZWFzZSBFR0wgYW5kIEdMIHJlc291cmNlcyBvbiByZW5kZXIgdGhyZWFkLgot
ICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0QXRGcm9udE9mUXVldWUobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICAgIGlmIChkcmF3ZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgZHJhd2VyLnJlbGVhc2Uo
KTsKLSAgICAgICAgICAgIGRyYXdlciA9IG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlm
ICh5dXZUZXh0dXJlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBHTEVTMjAuZ2xEZWxldGVUZXh0
dXJlcygzLCB5dXZUZXh0dXJlcywgMCk7Ci0gICAgICAgICAgICB5dXZUZXh0dXJlcyA9IG51bGw7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChiaXRtYXBUZXh0dXJlRnJhbWVidWZmZXIgIT0g
bnVsbCkgewotICAgICAgICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyLnJlbGVhc2UoKTsK
LSAgICAgICAgICAgIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlciA9IG51bGw7Ci0gICAgICAgICAg
fQotICAgICAgICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIGxvZ0QoImVn
bEJhc2UgZGV0YWNoIGFuZCByZWxlYXNlLiIpOwotICAgICAgICAgICAgZWdsQmFzZS5kZXRhY2hD
dXJyZW50KCk7Ci0gICAgICAgICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIGVn
bEJhc2UgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgICBlZ2xDbGVhbnVwQmFycmllci5j
b3VudERvd24oKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgICBmaW5hbCBMb29wZXIgcmVu
ZGVyTG9vcGVyID0gcmVuZGVyVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKTsKLSAgICAgIC8vIFRP
RE8obWFnamVkKTogUmVwbGFjZSB0aGlzIHBvc3QoKSB3aXRoIHJlbmRlckxvb3Blci5xdWl0U2Fm
ZWx5KCkgd2hlbiBBUEkgc3VwcG9ydCA+PSAxOC4KLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIu
cG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgICAgbG9nRCgiUXVpdHRpbmcgcmVuZGVyIHRocmVhZC4iKTsK
LSAgICAgICAgICByZW5kZXJMb29wZXIucXVpdCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICAgIC8vIERvbid0IGFjY2VwdCBhbnkgbW9yZSBmcmFtZXMgb3IgbWVzc2FnZXMgdG8gdGhlIHJl
bmRlciB0aHJlYWQuCi0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyID0gbnVsbDsKLSAgICB9Ci0g
ICAgLy8gTWFrZSBzdXJlIHRoZSBFR0wvR0wgY2xlYW51cCBwb3N0ZWQgYWJvdmUgaXMgZXhlY3V0
ZWQuCi0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoZWdsQ2xlYW51cEJhcnJp
ZXIpOwotICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICBpZiAocGVuZGluZ0Zy
YW1lICE9IG51bGwpIHsKLSAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUocGVu
ZGluZ0ZyYW1lKTsKLSAgICAgICAgcGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAgICAgIH0KLSAgICB9
Ci0gICAgbG9nRCgiUmVsZWFzaW5nIGRvbmUuIik7Ci0gIH0KLQotICAvKioKLSAgICogUmVzZXQg
dGhlIHN0YXRpc3RpY3MgbG9nZ2VkIGluIGxvZ1N0YXRpc3RpY3MoKS4KLSAgICovCi0gIHByaXZh
dGUgdm9pZCByZXNldFN0YXRpc3RpY3MobG9uZyBjdXJyZW50VGltZU5zKSB7Ci0gICAgc3luY2hy
b25pemVkIChzdGF0aXN0aWNzTG9jaykgewotICAgICAgc3RhdGlzdGljc1N0YXJ0VGltZU5zID0g
Y3VycmVudFRpbWVOczsKLSAgICAgIGZyYW1lc1JlY2VpdmVkID0gMDsKLSAgICAgIGZyYW1lc0Ry
b3BwZWQgPSAwOwotICAgICAgZnJhbWVzUmVuZGVyZWQgPSAwOwotICAgICAgcmVuZGVyVGltZU5z
ID0gMDsKLSAgICAgIHJlbmRlclN3YXBCdWZmZXJUaW1lTnMgPSAwOwotICAgIH0KLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHByaW50U3RhY2tUcmFjZSgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRs
ZXJMb2NrKSB7Ci0gICAgICBmaW5hbCBUaHJlYWQgcmVuZGVyVGhyZWFkID0KLSAgICAgICAgICAo
cmVuZGVyVGhyZWFkSGFuZGxlciA9PSBudWxsKSA/IG51bGwgOiByZW5kZXJUaHJlYWRIYW5kbGVy
LmdldExvb3BlcigpLmdldFRocmVhZCgpOwotICAgICAgaWYgKHJlbmRlclRocmVhZCAhPSBudWxs
KSB7Ci0gICAgICAgIGZpbmFsIFN0YWNrVHJhY2VFbGVtZW50W10gcmVuZGVyU3RhY2tUcmFjZSA9
IHJlbmRlclRocmVhZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICAgIGlmIChyZW5kZXJTdGFja1Ry
YWNlLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICBsb2dEKCJFZ2xSZW5kZXJlciBzdGFjayB0cmFj
ZToiKTsKLSAgICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHRyYWNlRWxlbSA6IHJlbmRl
clN0YWNrVHJhY2UpIHsKLSAgICAgICAgICAgIGxvZ0QodHJhY2VFbGVtLnRvU3RyaW5nKCkpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBTZXQgaWYgdGhlIHZpZGVvIHN0cmVhbSBzaG91bGQgYmUgbWlycm9yZWQgb3Igbm90LgotICAg
Ki8KLSAgcHVibGljIHZvaWQgc2V0TWlycm9yKGZpbmFsIGJvb2xlYW4gbWlycm9yKSB7Ci0gICAg
bG9nRCgic2V0TWlycm9yOiAiICsgbWlycm9yKTsKLSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExv
Y2spIHsKLSAgICAgIHRoaXMubWlycm9yID0gbWlycm9yOwotICAgIH0KLSAgfQotCi0gIC8qKgot
ICAgKiBTZXQgbGF5b3V0IGFzcGVjdCByYXRpby4gVGhpcyBpcyB1c2VkIHRvIGNyb3AgZnJhbWVz
IHdoZW4gcmVuZGVyaW5nIHRvIGF2b2lkIHN0cmV0Y2hlZCB2aWRlby4KLSAgICogU2V0IHRoaXMg
dG8gMCB0byBkaXNhYmxlIGNyb3BwaW5nLgotICAgKi8KLSAgcHVibGljIHZvaWQgc2V0TGF5b3V0
QXNwZWN0UmF0aW8oZmxvYXQgbGF5b3V0QXNwZWN0UmF0aW8pIHsKLSAgICBsb2dEKCJzZXRMYXlv
dXRBc3BlY3RSYXRpbzogIiArIGxheW91dEFzcGVjdFJhdGlvKTsKLSAgICBzeW5jaHJvbml6ZWQg
KGxheW91dExvY2spIHsKLSAgICAgIHRoaXMubGF5b3V0QXNwZWN0UmF0aW8gPSBsYXlvdXRBc3Bl
Y3RSYXRpbzsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTGltaXQgcmVuZGVyIGZyYW1lcmF0
ZS4KLSAgICoKLSAgICogQHBhcmFtIGZwcyBMaW1pdCByZW5kZXIgZnJhbWVyYXRlIHRvIHRoaXMg
dmFsdWUsIG9yIHVzZSBGbG9hdC5QT1NJVElWRV9JTkZJTklUWSB0byBkaXNhYmxlIGZwcwotICAg
KiAgICAgICAgICAgIHJlZHVjdGlvbi4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldEZwc1JlZHVj
dGlvbihmbG9hdCBmcHMpIHsKLSAgICBsb2dEKCJzZXRGcHNSZWR1Y3Rpb246ICIgKyBmcHMpOwot
ICAgIHN5bmNocm9uaXplZCAoZnBzUmVkdWN0aW9uTG9jaykgewotICAgICAgZmluYWwgbG9uZyBw
cmV2aW91c1JlbmRlclBlcmlvZE5zID0gbWluUmVuZGVyUGVyaW9kTnM7Ci0gICAgICBpZiAoZnBz
IDw9IDApIHsKLSAgICAgICAgbWluUmVuZGVyUGVyaW9kTnMgPSBMb25nLk1BWF9WQUxVRTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIG1pblJlbmRlclBlcmlvZE5zID0gKGxvbmcpIChUaW1lVW5p
dC5TRUNPTkRTLnRvTmFub3MoMSkgLyBmcHMpOwotICAgICAgfQotICAgICAgaWYgKG1pblJlbmRl
clBlcmlvZE5zICE9IHByZXZpb3VzUmVuZGVyUGVyaW9kTnMpIHsKLSAgICAgICAgLy8gRnBzIHJl
ZHVjdGlvbiBjaGFuZ2VkIC0gcmVzZXQgZnJhbWUgdGltZS4KLSAgICAgICAgbmV4dEZyYW1lVGlt
ZU5zID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGlj
IHZvaWQgZGlzYWJsZUZwc1JlZHVjdGlvbigpIHsKLSAgICBzZXRGcHNSZWR1Y3Rpb24oRmxvYXQu
UE9TSVRJVkVfSU5GSU5JVFkgLyogZnBzICovKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhdXNl
VmlkZW8oKSB7Ci0gICAgc2V0RnBzUmVkdWN0aW9uKDAgLyogZnBzICovKTsKLSAgfQotCi0gIC8q
KgotICAgKiBSZWdpc3RlciBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiBhIG5ldyB2aWRl
byBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZC4KLSAgICoKLSAgICogQHBhcmFtIGxpc3RlbmVyIFRo
ZSBjYWxsYmFjayB0byBiZSBpbnZva2VkLgotICAgKiBAcGFyYW0gc2NhbGUgICAgVGhlIHNjYWxl
IG9mIHRoZSBCaXRtYXAgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaywgb3IgMCBpZiBubyBCaXRtYXAg
aXMKLSAgICogICAgICAgICAgICAgICAgIHJlcXVpcmVkLgotICAgKi8KLSAgcHVibGljIHZvaWQg
YWRkRnJhbWVMaXN0ZW5lcihGcmFtZUxpc3RlbmVyIGxpc3RlbmVyLCBmbG9hdCBzY2FsZSkgewot
ICAgIHN5bmNocm9uaXplZCAoZnJhbWVMaXN0ZW5lckxvY2spIHsKLSAgICAgIGZyYW1lTGlzdGVu
ZXJzLmFkZChuZXcgU2NhbGVBbmRGcmFtZUxpc3RlbmVyKHNjYWxlLCBsaXN0ZW5lcikpOwotICAg
IH0KLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmUgYW55IHBlbmRpbmcgY2FsbGJhY2sgdGhhdCB3
YXMgYWRkZWQgd2l0aCBhZGRGcmFtZUxpc3RlbmVyLiBJZiB0aGUgY2FsbGJhY2sgaXMgbm90IGlu
Ci0gICAqIHRoZSBxdWV1ZSwgbm90aGluZyBoYXBwZW5zLgotICAgKgotICAgKiBAcGFyYW0gcnVu
bmFibGUgVGhlIGNhbGxiYWNrIHRvIHJlbW92ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbW92
ZUZyYW1lTGlzdGVuZXIoRnJhbWVMaXN0ZW5lciBsaXN0ZW5lcikgewotICAgIHN5bmNocm9uaXpl
ZCAoZnJhbWVMaXN0ZW5lckxvY2spIHsKLSAgICAgIGZpbmFsIEl0ZXJhdG9yPFNjYWxlQW5kRnJh
bWVMaXN0ZW5lcj4gaXRlciA9IGZyYW1lTGlzdGVuZXJzLml0ZXJhdG9yKCk7Ci0gICAgICB3aGls
ZSAoaXRlci5oYXNOZXh0KCkpIHsKLSAgICAgICAgaWYgKGl0ZXIubmV4dCgpLmxpc3RlbmVyID09
IGxpc3RlbmVyKSB7Ci0gICAgICAgICAgaXRlci5yZW1vdmUoKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIC8vIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGludGVyZmFjZS4K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1lKFZpZGVvUmVuZGVyZXIuSTQy
MEZyYW1lIGZyYW1lKSB7Ci0gICAgc3luY2hyb25pemVkIChzdGF0aXN0aWNzTG9jaykgewotICAg
ICAgKytmcmFtZXNSZWNlaXZlZDsKLSAgICB9Ci0gICAgZmluYWwgYm9vbGVhbiBkcm9wT2xkRnJh
bWU7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRo
cmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgICBsb2dEKCJEcm9wcGluZyBmcmFtZSAtIE5v
dCBpbml0aWFsaXplZCBvciBhbHJlYWR5IHJlbGVhc2VkLiIpOwotICAgICAgICBWaWRlb1JlbmRl
cmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAg
ICAgIC8vIENoZWNrIGlmIGZwcyByZWR1Y3Rpb24gaXMgYWN0aXZlLgotICAgICAgc3luY2hyb25p
emVkIChmcHNSZWR1Y3Rpb25Mb2NrKSB7Ci0gICAgICAgIGlmIChtaW5SZW5kZXJQZXJpb2ROcyA+
IDApIHsKLSAgICAgICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTnMgPSBTeXN0ZW0ubmFub1Rp
bWUoKTsKLSAgICAgICAgICBpZiAoY3VycmVudFRpbWVOcyA8IG5leHRGcmFtZVRpbWVOcykgewot
ICAgICAgICAgICAgbG9nRCgiRHJvcHBpbmcgZnJhbWUgLSBmcHMgcmVkdWN0aW9uIGlzIGFjdGl2
ZS4iKTsKLSAgICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbmV4dEZyYW1lVGlt
ZU5zICs9IG1pblJlbmRlclBlcmlvZE5zOwotICAgICAgICAgIC8vIFRoZSB0aW1lIGZvciB0aGUg
bmV4dCBmcmFtZSBzaG91bGQgYWx3YXlzIGJlIGluIHRoZSBmdXR1cmUuCi0gICAgICAgICAgbmV4
dEZyYW1lVGltZU5zID0gTWF0aC5tYXgobmV4dEZyYW1lVGltZU5zLCBjdXJyZW50VGltZU5zKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAg
ICAgICAgZHJvcE9sZEZyYW1lID0gKHBlbmRpbmdGcmFtZSAhPSBudWxsKTsKLSAgICAgICAgaWYg
KGRyb3BPbGRGcmFtZSkgewotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25l
KHBlbmRpbmdGcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGVuZGluZ0ZyYW1lID0gZnJhbWU7
Ci0gICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdChyZW5kZXJGcmFtZVJ1bm5hYmxlKTsK
LSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGRyb3BPbGRGcmFtZSkgewotICAgICAgc3luY2hyb25p
emVkIChzdGF0aXN0aWNzTG9jaykgewotICAgICAgICArK2ZyYW1lc0Ryb3BwZWQ7Ci0gICAgICB9
Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgRUdMIHN1cmZhY2UuIFRoaXMgZnVu
Y3Rpb24gd2lsbCBibG9jayB1bnRpbCB0aGUgRUdMIHN1cmZhY2UgaXMgcmVsZWFzZWQuCi0gICAq
LwotICBwdWJsaWMgdm9pZCByZWxlYXNlRWdsU3VyZmFjZShmaW5hbCBSdW5uYWJsZSBjb21wbGV0
aW9uQ2FsbGJhY2spIHsKLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcmVuZGVyIHRocmVhZCBpcyBu
byBsb25nZXIgdG91Y2hpbmcgdGhlIFN1cmZhY2UgYmVmb3JlIHJldHVybmluZyBmcm9tIHRoaXMK
LSAgICAvLyBmdW5jdGlvbi4KLSAgICBlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJsZS5zZXRTdXJm
YWNlKG51bGwgLyogc3VyZmFjZSAqLyk7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykg
ewotICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICByZW5k
ZXJUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrcyhlZ2xTdXJmYWNlQ3JlYXRpb25SdW5uYWJs
ZSk7Ci0gICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdEF0RnJvbnRPZlF1ZXVlKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgICAgICBpZiAoZWdsQmFzZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAg
IGVnbEJhc2UuZGV0YWNoQ3VycmVudCgpOwotICAgICAgICAgICAgICBlZ2xCYXNlLnJlbGVhc2VT
dXJmYWNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb21wbGV0aW9uQ2FsbGJhY2su
cnVuKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAg
fQotICAgIH0KLSAgICBjb21wbGV0aW9uQ2FsbGJhY2sucnVuKCk7Ci0gIH0KLQotICAvKioKLSAg
ICogTm90aWZ5IHRoYXQgdGhlIHN1cmZhY2Ugc2l6ZSBoYXMgY2hhbmdlZC4KLSAgICovCi0gIHB1
YmxpYyB2b2lkIHN1cmZhY2VTaXplQ2hhbmdlZChpbnQgc3VyZmFjZVdpZHRoLCBpbnQgc3VyZmFj
ZUhlaWdodCkgewotICAgIGxvZ0QoIlN1cmZhY2Ugc2l6ZSBjaGFuZ2VkOiAiICsgc3VyZmFjZVdp
ZHRoICsgIngiICsgc3VyZmFjZUhlaWdodCk7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2Nr
KSB7Ci0gICAgICB0aGlzLnN1cmZhY2VXaWR0aCA9IHN1cmZhY2VXaWR0aDsKLSAgICAgIHRoaXMu
c3VyZmFjZUhlaWdodCA9IHN1cmZhY2VIZWlnaHQ7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IFByaXZhdGUgaGVscGVyIGZ1bmN0aW9uIHRvIHBvc3QgdGFza3Mgc2FmZWx5LgotICAgKi8KLSAg
cHJpdmF0ZSB2b2lkIHBvc3RUb1JlbmRlclRocmVhZChSdW5uYWJsZSBydW5uYWJsZSkgewotICAg
IHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5k
bGVyICE9IG51bGwpIHsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KHJ1bm5hYmxl
KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2xlYXJTdXJmYWNlT25S
ZW5kZXJUaHJlYWQoKSB7Ci0gICAgaWYgKGVnbEJhc2UgIT0gbnVsbCAmJiBlZ2xCYXNlLmhhc1N1
cmZhY2UoKSkgewotICAgICAgbG9nRCgiY2xlYXJTdXJmYWNlIik7Ci0gICAgICBHTEVTMjAuZ2xD
bGVhckNvbG9yKDAgLyogcmVkICovLCAwIC8qIGdyZWVuICovLCAwIC8qIGJsdWUgKi8sIDAgLyog
YWxwaGEgKi8pOwotICAgICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9C
SVQpOwotICAgICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIH0KLSAgfQotCi0gIC8qKgot
ICAgKiBQb3N0IGEgdGFzayB0byBjbGVhciB0aGUgVGV4dHVyZVZpZXcgdG8gYSB0cmFuc3BhcmVu
dCB1bmlmb3JtIGNvbG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgY2xlYXJJbWFnZSgpIHsKLSAg
ICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFu
ZGxlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHJlbmRlclRo
cmVhZEhhbmRsZXIucG9zdEF0RnJvbnRPZlF1ZXVlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBjbGVhclN1
cmZhY2VPblJlbmRlclRocmVhZCgpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0gIH0K
LQotICAvKioKLSAgICogUmVuZGVycyBhbmQgcmVsZWFzZXMgfHBlbmRpbmdGcmFtZXwuCi0gICAq
LwotICBwcml2YXRlIHZvaWQgcmVuZGVyRnJhbWVPblJlbmRlclRocmVhZCgpIHsKLSAgICAvLyBG
ZXRjaCBhbmQgcmVuZGVyIHxwZW5kaW5nRnJhbWV8LgotICAgIGZpbmFsIFZpZGVvUmVuZGVyZXIu
STQyMEZyYW1lIGZyYW1lOwotICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICBp
ZiAocGVuZGluZ0ZyYW1lID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAg
ICAgZnJhbWUgPSBwZW5kaW5nRnJhbWU7Ci0gICAgICBwZW5kaW5nRnJhbWUgPSBudWxsOwotICAg
IH0KLSAgICBpZiAoZWdsQmFzZSA9PSBudWxsIHx8ICFlZ2xCYXNlLmhhc1N1cmZhY2UoKSkgewot
ICAgICAgbG9nRCgiRHJvcHBpbmcgZnJhbWUgLSBObyBzdXJmYWNlIik7Ci0gICAgICBWaWRlb1Jl
bmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgZmluYWwgbG9uZyBzdGFydFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIGZpbmFs
IGZsb2F0W10gdGV4TWF0cml4ID0KLSAgICAgICAgUmVuZGVyZXJDb21tb24ucm90YXRlVGV4dHVy
ZU1hdHJpeChmcmFtZS5zYW1wbGluZ01hdHJpeCwgZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAg
IGZpbmFsIGZsb2F0W10gZHJhd01hdHJpeDsKLQotICAgIC8vIEFmdGVyIGEgc3VyZmFjZSBzaXpl
IGNoYW5nZSwgdGhlIEVHTFN1cmZhY2UgbWlnaHQgc3RpbGwgaGF2ZSBhIGJ1ZmZlciBvZiB0aGUg
b2xkIHNpemUgaW4gdGhlCi0gICAgLy8gcGlwZWxpbmUuIFF1ZXJ5aW5nIHRoZSBFR0xTdXJmYWNl
IHdpbGwgc2hvdyBpZiB0aGUgdW5kZXJseWluZyBidWZmZXIgZGltZW5zaW9ucyBoYXZlbid0IHll
dAotICAgIC8vIGNoYW5nZWQuIFN1Y2ggYSBidWZmZXIgd2lsbCBiZSByZW5kZXJlZCBpbmNvcnJl
Y3RseSwgc28gZmx1c2ggaXQgd2l0aCBhIGJsYWNrIGZyYW1lLgotICAgIHN5bmNocm9uaXplZCAo
bGF5b3V0TG9jaykgewotICAgICAgaW50IHN1cmZhY2VDbGVhckNvdW50ID0gMDsKLSAgICAgIHdo
aWxlIChlZ2xCYXNlLnN1cmZhY2VXaWR0aCgpICE9IHN1cmZhY2VXaWR0aCB8fCBlZ2xCYXNlLnN1
cmZhY2VIZWlnaHQoKSAhPSBzdXJmYWNlSGVpZ2h0KSB7Ci0gICAgICAgICsrc3VyZmFjZUNsZWFy
Q291bnQ7Ci0gICAgICAgIGlmIChzdXJmYWNlQ2xlYXJDb3VudCA+IE1BWF9TVVJGQUNFX0NMRUFS
X0NPVU5UKSB7Ci0gICAgICAgICAgbG9nRCgiRmFpbGVkIHRvIGdldCBzdXJmYWNlIG9mIGV4cGVj
dGVkIHNpemUgLSBkcm9wcGluZyBmcmFtZS4iKTsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJl
bmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGxvZ0QoIlN1cmZhY2Ugc2l6ZSBtaXNtYXRjaCAtIGNsZWFyaW5nIHN1cmZhY2UuIFNpemU6
ICIgKyBlZ2xCYXNlLnN1cmZhY2VXaWR0aCgpICsgIngiCi0gICAgICAgICAgICArIGVnbEJhc2Uu
c3VyZmFjZUhlaWdodCgpICsgIiBFeHBlY3RlZDogIiArIHN1cmZhY2VXaWR0aCArICJ4IiArIHN1
cmZhY2VIZWlnaHQpOwotICAgICAgICBjbGVhclN1cmZhY2VPblJlbmRlclRocmVhZCgpOwotICAg
ICAgfQotICAgICAgZmluYWwgZmxvYXRbXSBsYXlvdXRNYXRyaXg7Ci0gICAgICBpZiAobGF5b3V0
QXNwZWN0UmF0aW8gPiAwKSB7Ci0gICAgICAgIGxheW91dE1hdHJpeCA9IFJlbmRlcmVyQ29tbW9u
LmdldExheW91dE1hdHJpeCgKLSAgICAgICAgICAgIG1pcnJvciwgZnJhbWUucm90YXRlZFdpZHRo
KCkgLyAoZmxvYXQpIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSwgbGF5b3V0QXNwZWN0UmF0aW8pOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGF5b3V0TWF0cml4ID0KLSAgICAgICAgICAgIG1pcnJv
ciA/IFJlbmRlcmVyQ29tbW9uLmhvcml6b250YWxGbGlwTWF0cml4KCkgOiBSZW5kZXJlckNvbW1v
bi5pZGVudGl0eU1hdHJpeCgpOwotICAgICAgfQotICAgICAgZHJhd01hdHJpeCA9IFJlbmRlcmVy
Q29tbW9uLm11bHRpcGx5TWF0cmljZXModGV4TWF0cml4LCBsYXlvdXRNYXRyaXgpOwotICAgIH0K
LQotICAgIEdMRVMyMC5nbENsZWFyQ29sb3IoMCAvKiByZWQgKi8sIDAgLyogZ3JlZW4gKi8sIDAg
LyogYmx1ZSAqLywgMCAvKiBhbHBoYSAqLyk7Ci0gICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdM
X0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGlmIChmcmFtZS55dXZGcmFtZSkgewotICAgICAgLy8g
TWFrZSBzdXJlIFlVViB0ZXh0dXJlcyBhcmUgYWxsb2NhdGVkLgotICAgICAgaWYgKHl1dlRleHR1
cmVzID09IG51bGwpIHsKLSAgICAgICAgeXV2VGV4dHVyZXMgPSBuZXcgaW50WzNdOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAgICAgICAgIHl1dlRleHR1cmVzW2ld
ID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICAgIHl1dlVwbG9hZGVyLnVwbG9hZFl1dkRhdGEoCi0gICAgICAgICAg
eXV2VGV4dHVyZXMsIGZyYW1lLndpZHRoLCBmcmFtZS5oZWlnaHQsIGZyYW1lLnl1dlN0cmlkZXMs
IGZyYW1lLnl1dlBsYW5lcyk7Ci0gICAgICBkcmF3ZXIuZHJhd1l1dih5dXZUZXh0dXJlcywgZHJh
d01hdHJpeCwgZnJhbWUucm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSwgMCwg
MCwKLSAgICAgICAgICBzdXJmYWNlV2lkdGgsIHN1cmZhY2VIZWlnaHQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBkcmF3ZXIuZHJhd09lcyhmcmFtZS50ZXh0dXJlSWQsIGRyYXdNYXRyaXgsIGZyYW1l
LnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCksIDAsIDAsCi0gICAgICAgICAg
c3VyZmFjZVdpZHRoLCBzdXJmYWNlSGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBmaW5hbCBsb25nIHN3
YXBCdWZmZXJzU3RhcnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICBlZ2xCYXNlLnN3
YXBCdWZmZXJzKCk7Ci0KLSAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTnMgPSBTeXN0ZW0ubmFu
b1RpbWUoKTsKLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAgICArK2Zy
YW1lc1JlbmRlcmVkOwotICAgICAgcmVuZGVyVGltZU5zICs9IChjdXJyZW50VGltZU5zIC0gc3Rh
cnRUaW1lTnMpOwotICAgICAgcmVuZGVyU3dhcEJ1ZmZlclRpbWVOcyArPSAoY3VycmVudFRpbWVO
cyAtIHN3YXBCdWZmZXJzU3RhcnRUaW1lTnMpOwotICAgIH0KLQotICAgIG5vdGlmeUNhbGxiYWNr
cyhmcmFtZSwgdGV4TWF0cml4KTsKLSAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShm
cmFtZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbm90aWZ5Q2FsbGJhY2tzKFZpZGVvUmVuZGVy
ZXIuSTQyMEZyYW1lIGZyYW1lLCBmbG9hdFtdIHRleE1hdHJpeCkgewotICAgIC8vIE1ha2UgdGVt
cG9yYXJ5IGNvcHkgb2YgY2FsbGJhY2sgbGlzdCB0byBhdm9pZCBDb25jdXJyZW50TW9kaWZpY2F0
aW9uRXhjZXB0aW9uLCBpbiBjYXNlCi0gICAgLy8gY2FsbGJhY2tzIGNhbGwgYWRkRnJhbWVsaXN0
ZW5lciBvciByZW1vdmVGcmFtZUxpc3RlbmVyLgotICAgIGZpbmFsIEFycmF5TGlzdDxTY2FsZUFu
ZEZyYW1lTGlzdGVuZXI+IHRtcExpc3Q7Ci0gICAgc3luY2hyb25pemVkIChmcmFtZUxpc3RlbmVy
TG9jaykgewotICAgICAgaWYgKGZyYW1lTGlzdGVuZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgICAgdG1wTGlzdCA9IG5ldyBBcnJheUxpc3Q8PihmcmFtZUxpc3RlbmVycyk7Ci0g
ICAgICBmcmFtZUxpc3RlbmVycy5jbGVhcigpOwotICAgIH0KLQotICAgIGZpbmFsIGZsb2F0W10g
Yml0bWFwTWF0cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNlcygKLSAgICAgICAg
UmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNlcyh0ZXhNYXRyaXgsCi0gICAgICAgICAgICBt
aXJyb3IgPyBSZW5kZXJlckNvbW1vbi5ob3Jpem9udGFsRmxpcE1hdHJpeCgpIDogUmVuZGVyZXJD
b21tb24uaWRlbnRpdHlNYXRyaXgoKSksCi0gICAgICAgIFJlbmRlcmVyQ29tbW9uLnZlcnRpY2Fs
RmxpcE1hdHJpeCgpKTsKLQotICAgIGZvciAoU2NhbGVBbmRGcmFtZUxpc3RlbmVyIHNjYWxlQW5k
TGlzdGVuZXIgOiB0bXBMaXN0KSB7Ci0gICAgICBmaW5hbCBpbnQgc2NhbGVkV2lkdGggPSAoaW50
KSAoc2NhbGVBbmRMaXN0ZW5lci5zY2FsZSAqIGZyYW1lLnJvdGF0ZWRXaWR0aCgpKTsKLSAgICAg
IGZpbmFsIGludCBzY2FsZWRIZWlnaHQgPSAoaW50KSAoc2NhbGVBbmRMaXN0ZW5lci5zY2FsZSAq
IGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7Ci0KLSAgICAgIGlmIChzY2FsZWRXaWR0aCA9PSAwIHx8
IHNjYWxlZEhlaWdodCA9PSAwKSB7Ci0gICAgICAgIHNjYWxlQW5kTGlzdGVuZXIubGlzdGVuZXIu
b25GcmFtZShudWxsKTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChi
aXRtYXBUZXh0dXJlRnJhbWVidWZmZXIgPT0gbnVsbCkgewotICAgICAgICBiaXRtYXBUZXh0dXJl
RnJhbWVidWZmZXIgPSBuZXcgR2xUZXh0dXJlRnJhbWVCdWZmZXIoR0xFUzIwLkdMX1JHQkEpOwot
ICAgICAgfQotICAgICAgYml0bWFwVGV4dHVyZUZyYW1lYnVmZmVyLnNldFNpemUoc2NhbGVkV2lk
dGgsIHNjYWxlZEhlaWdodCk7Ci0KLSAgICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVT
MjAuR0xfRlJBTUVCVUZGRVIsIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlci5nZXRGcmFtZUJ1ZmZl
cklkKCkpOwotICAgICAgR0xFUzIwLmdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xFUzIwLkdMX0ZS
QU1FQlVGRkVSLCBHTEVTMjAuR0xfQ09MT1JfQVRUQUNITUVOVDAsCi0gICAgICAgICAgR0xFUzIw
LkdMX1RFWFRVUkVfMkQsIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlci5nZXRUZXh0dXJlSWQoKSwg
MCk7Ci0KLSAgICAgIGlmIChmcmFtZS55dXZGcmFtZSkgewotICAgICAgICBkcmF3ZXIuZHJhd1l1
dih5dXZUZXh0dXJlcywgYml0bWFwTWF0cml4LCBmcmFtZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUu
cm90YXRlZEhlaWdodCgpLAotICAgICAgICAgICAgMCAvKiB2aWV3cG9ydFggKi8sIDAgLyogdmll
d3BvcnRZICovLCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGRyYXdlci5kcmF3T2VzKGZyYW1lLnRleHR1cmVJZCwgYml0bWFwTWF0cml4LCBmcmFt
ZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUucm90YXRlZEhlaWdodCgpLAotICAgICAgICAgICAgMCAv
KiB2aWV3cG9ydFggKi8sIDAgLyogdmlld3BvcnRZICovLCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVp
Z2h0KTsKLSAgICAgIH0KLQotICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBiaXRtYXBCdWZmZXIgPSBC
eXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KHNjYWxlZFdpZHRoICogc2NhbGVkSGVpZ2h0ICogNCk7
Ci0gICAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCAwLCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0
KTsKLSAgICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoCi0gICAgICAgICAgMCwgMCwgc2NhbGVkV2lk
dGgsIHNjYWxlZEhlaWdodCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRF
LCBiaXRtYXBCdWZmZXIpOwotCi0gICAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIw
LkdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiRWds
UmVuZGVyZXIubm90aWZ5Q2FsbGJhY2tzIik7Ci0KLSAgICAgIGZpbmFsIEJpdG1hcCBiaXRtYXAg
PSBCaXRtYXAuY3JlYXRlQml0bWFwKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQsIEJpdG1hcC5D
b25maWcuQVJHQl84ODg4KTsKLSAgICAgIGJpdG1hcC5jb3B5UGl4ZWxzRnJvbUJ1ZmZlcihiaXRt
YXBCdWZmZXIpOwotICAgICAgc2NhbGVBbmRMaXN0ZW5lci5saXN0ZW5lci5vbkZyYW1lKGJpdG1h
cCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgYXZlcmFnZVRpbWVBc1N0cmluZyhs
b25nIHN1bVRpbWVOcywgaW50IGNvdW50KSB7Ci0gICAgcmV0dXJuIChjb3VudCA8PSAwKSA/ICJO
QSIgOiBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pY3JvcyhzdW1UaW1lTnMgLyBjb3VudCkgKyAi
IM68cyI7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nU3RhdGlzdGljcygpIHsKLSAgICBmaW5h
bCBsb25nIGN1cnJlbnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICBzeW5jaHJvbml6
ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAgICBmaW5hbCBsb25nIGVsYXBzZWRUaW1lTnMgPSBj
dXJyZW50VGltZU5zIC0gc3RhdGlzdGljc1N0YXJ0VGltZU5zOwotICAgICAgaWYgKGVsYXBzZWRU
aW1lTnMgPD0gMCkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBmaW5hbCBmbG9h
dCByZW5kZXJGcHMgPSBmcmFtZXNSZW5kZXJlZCAqIFRpbWVVbml0LlNFQ09ORFMudG9OYW5vcygx
KSAvIChmbG9hdCkgZWxhcHNlZFRpbWVOczsKLSAgICAgIGxvZ0QoIkR1cmF0aW9uOiAiICsgVGlt
ZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoZWxhcHNlZFRpbWVOcykgKyAiIG1zLiIKLSAgICAg
ICAgICArICIgRnJhbWVzIHJlY2VpdmVkOiAiICsgZnJhbWVzUmVjZWl2ZWQgKyAiLiIKLSAgICAg
ICAgICArICIgRHJvcHBlZDogIiArIGZyYW1lc0Ryb3BwZWQgKyAiLiIKLSAgICAgICAgICArICIg
UmVuZGVyZWQ6ICIgKyBmcmFtZXNSZW5kZXJlZCArICIuIgotICAgICAgICAgICsgIiBSZW5kZXIg
ZnBzOiAiICsgU3RyaW5nLmZvcm1hdCgiJS4xZiIsIHJlbmRlckZwcykgKyAiLiIKLSAgICAgICAg
ICArICIgQXZlcmFnZSByZW5kZXIgdGltZTogIiArIGF2ZXJhZ2VUaW1lQXNTdHJpbmcocmVuZGVy
VGltZU5zLCBmcmFtZXNSZW5kZXJlZCkgKyAiLiIKLSAgICAgICAgICArICIgQXZlcmFnZSBzd2Fw
QnVmZmVyIHRpbWU6ICIKLSAgICAgICAgICArIGF2ZXJhZ2VUaW1lQXNTdHJpbmcocmVuZGVyU3dh
cEJ1ZmZlclRpbWVOcywgZnJhbWVzUmVuZGVyZWQpICsgIi4iKTsKLSAgICAgIHJlc2V0U3RhdGlz
dGljcyhjdXJyZW50VGltZU5zKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nRChT
dHJpbmcgc3RyaW5nKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgbmFtZSArIHN0cmluZyk7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRmlsZVZpZGVvQ2FwdHVyZXIuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ZpbGVWaWRlb0NhcHR1cmVyLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRmlsZVZpZGVvQ2FwdHVyZXIuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDIxMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBX
ZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBh
bmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGlt
ZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lclRh
c2s7Ci1pbXBvcnQgamF2YS5pby5SYW5kb21BY2Nlc3NGaWxlOwotaW1wb3J0IGphdmEuaW8uSU9F
eGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVmlkZW9DYXB0dXJlciBpbXBsZW1lbnRzIFZp
ZGVvQ2FwdHVyZXIgewotICBwcml2YXRlIGludGVyZmFjZSBWaWRlb1JlYWRlciB7Ci0gICAgaW50
IGdldEZyYW1lV2lkdGgoKTsKLSAgICBpbnQgZ2V0RnJhbWVIZWlnaHQoKTsKLSAgICBieXRlW10g
Z2V0TmV4dEZyYW1lKCk7Ci0gICAgdm9pZCBjbG9zZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJl
YWQgdmlkZW8gZGF0YSBmcm9tIGZpbGUgZm9yIHRoZSAueTRtIGNvbnRhaW5lci4KLSAgICovCi0g
IHByaXZhdGUgc3RhdGljIGNsYXNzIFZpZGVvUmVhZGVyWTRNIGltcGxlbWVudHMgVmlkZW9SZWFk
ZXIgewotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiVmlkZW9SZWFkZXJZ
NE0iOwotICAgIHByaXZhdGUgZmluYWwgaW50IGZyYW1lV2lkdGg7Ci0gICAgcHJpdmF0ZSBmaW5h
bCBpbnQgZnJhbWVIZWlnaHQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVTaXplOwotCi0g
ICAgLy8gRmlyc3QgY2hhciBhZnRlciBoZWFkZXIKLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgdmlk
ZW9TdGFydDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBZNE1fRlJBTUVfREVM
SU1FVEVSID0gIkZSQU1FIjsKLQotICAgIHByaXZhdGUgZmluYWwgUmFuZG9tQWNjZXNzRmlsZSBt
ZWRpYUZpbGVTdHJlYW07Ci0KLSAgICBwdWJsaWMgaW50IGdldEZyYW1lV2lkdGgoKSB7Ci0gICAg
ICByZXR1cm4gZnJhbWVXaWR0aDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEZyYW1lSGVp
Z2h0KCkgewotICAgICAgcmV0dXJuIGZyYW1lSGVpZ2h0OwotICAgIH0KLQotICAgIHB1YmxpYyBW
aWRlb1JlYWRlclk0TShTdHJpbmcgZmlsZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgIG1l
ZGlhRmlsZVN0cmVhbSA9IG5ldyBSYW5kb21BY2Nlc3NGaWxlKGZpbGUsICJyIik7Ci0gICAgICBT
dHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgZm9yICg7
OykgewotICAgICAgICBpbnQgYyA9IG1lZGlhRmlsZVN0cmVhbS5yZWFkKCk7Ci0gICAgICAgIGlm
IChjID09IC0xKSB7Ci0gICAgICAgICAgLy8gRW5kIG9mIGZpbGUgcmVhY2hlZC4KLSAgICAgICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRm91bmQgZW5kIG9mIGZpbGUgYmVmb3JlIGVu
ZCBvZiBoZWFkZXIgZm9yIGZpbGU6ICIgKyBmaWxlKTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
YyA9PSAnXG4nKSB7Ci0gICAgICAgICAgLy8gRW5kIG9mIGhlYWRlciBmb3VuZC4KLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBidWlsZGVyLmFwcGVuZCgoY2hhcikgYyk7Ci0g
ICAgICB9Ci0gICAgICB2aWRlb1N0YXJ0ID0gbWVkaWFGaWxlU3RyZWFtLmdldEZpbGVQb2ludGVy
KCk7Ci0gICAgICBTdHJpbmcgaGVhZGVyID0gYnVpbGRlci50b1N0cmluZygpOwotICAgICAgU3Ry
aW5nW10gaGVhZGVyVG9rZW5zID0gaGVhZGVyLnNwbGl0KCJbIF0iKTsKLSAgICAgIGludCB3ID0g
MDsKLSAgICAgIGludCBoID0gMDsKLSAgICAgIFN0cmluZyBjb2xvclNwYWNlID0gIiI7Ci0gICAg
ICBmb3IgKFN0cmluZyB0b2sgOiBoZWFkZXJUb2tlbnMpIHsKLSAgICAgICAgY2hhciBjID0gdG9r
LmNoYXJBdCgwKTsKLSAgICAgICAgc3dpdGNoIChjKSB7Ci0gICAgICAgICAgY2FzZSAnVyc6Ci0g
ICAgICAgICAgICB3ID0gSW50ZWdlci5wYXJzZUludCh0b2suc3Vic3RyaW5nKDEpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAgICAgaCA9IEludGVn
ZXIucGFyc2VJbnQodG9rLnN1YnN0cmluZygxKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlICdDJzoKLSAgICAgICAgICAgIGNvbG9yU3BhY2UgPSB0b2suc3Vic3RyaW5nKDEp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJDb2xvciBzcGFjZTogIiArIGNvbG9yU3BhY2UpOwotICAgICAgaWYgKCFjb2xvclNw
YWNlLmVxdWFscygiNDIwIikgJiYgIWNvbG9yU3BhY2UuZXF1YWxzKCI0MjBtcGVnMiIpKSB7Ci0g
ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgICAi
RG9lcyBub3Qgc3VwcG9ydCBhbnkgb3RoZXIgY29sb3Igc3BhY2UgdGhhbiBJNDIwIG9yIEk0MjBt
cGVnMiIpOwotICAgICAgfQotICAgICAgaWYgKCh3ICUgMikgPT0gMSB8fCAoaCAlIDIpID09IDEp
IHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiRG9lcyBub3Qg
c3VwcG9ydCBvZGQgd2lkdGggb3IgaGVpZ2h0Iik7Ci0gICAgICB9Ci0gICAgICBmcmFtZVdpZHRo
ID0gdzsKLSAgICAgIGZyYW1lSGVpZ2h0ID0gaDsKLSAgICAgIGZyYW1lU2l6ZSA9IHcgKiBoICog
MyAvIDI7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiZnJhbWUgZGltOiAoIiArIHcgKyAiLCAiICsg
aCArICIpIGZyYW1lU2l6ZTogIiArIGZyYW1lU2l6ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGJ5
dGVbXSBnZXROZXh0RnJhbWUoKSB7Ci0gICAgICBieXRlW10gZnJhbWUgPSBuZXcgYnl0ZVtmcmFt
ZVNpemVdOwotICAgICAgdHJ5IHsKLSAgICAgICAgYnl0ZVtdIGZyYW1lRGVsaW0gPSBuZXcgYnl0
ZVtZNE1fRlJBTUVfREVMSU1FVEVSLmxlbmd0aCgpICsgMV07Ci0gICAgICAgIGlmIChtZWRpYUZp
bGVTdHJlYW0ucmVhZChmcmFtZURlbGltKSA8IGZyYW1lRGVsaW0ubGVuZ3RoKSB7Ci0gICAgICAg
ICAgLy8gV2UgcmVhY2ggZW5kIG9mIGZpbGUsIGxvb3AKLSAgICAgICAgICBtZWRpYUZpbGVTdHJl
YW0uc2Vlayh2aWRlb1N0YXJ0KTsKLSAgICAgICAgICBpZiAobWVkaWFGaWxlU3RyZWFtLnJlYWQo
ZnJhbWVEZWxpbSkgPCBmcmFtZURlbGltLmxlbmd0aCkgewotICAgICAgICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oIkVycm9yIGxvb3BpbmcgdmlkZW8iKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGZyYW1lRGVsaW1TdHIgPSBuZXcgU3RyaW5nKGZyYW1l
RGVsaW0pOwotICAgICAgICBpZiAoIWZyYW1lRGVsaW1TdHIuZXF1YWxzKFk0TV9GUkFNRV9ERUxJ
TUVURVIgKyAiXG4iKSkgewotICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAot
ICAgICAgICAgICAgICAiRnJhbWVzIHNob3VsZCBiZSBkZWxpbWl0ZWQgYnkgRlJBTUUgcGx1cyBu
ZXdsaW5lLCBmb3VuZCBkZWxpbXRlciB3YXM6ICciCi0gICAgICAgICAgICAgICsgZnJhbWVEZWxp
bVN0ciArICInIik7Ci0gICAgICAgIH0KLSAgICAgICAgbWVkaWFGaWxlU3RyZWFtLnJlYWRGdWxs
eShmcmFtZSk7Ci0gICAgICAgIGJ5dGVbXSBudjIxRnJhbWUgPSBuZXcgYnl0ZVtmcmFtZVNpemVd
OwotICAgICAgICBuYXRpdmVJNDIwVG9OVjIxKGZyYW1lLCBmcmFtZVdpZHRoLCBmcmFtZUhlaWdo
dCwgbnYyMUZyYW1lKTsKLSAgICAgICAgcmV0dXJuIG52MjFGcmFtZTsKLSAgICAgIH0gY2F0Y2gg
KElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAgICB0cnkg
ewotICAgICAgICBtZWRpYUZpbGVTdHJlYW0uY2xvc2UoKTsKLSAgICAgIH0gY2F0Y2ggKElPRXhj
ZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIlByb2JsZW0gY2xvc2luZyBmaWxl
IiwgZSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3Ry
aW5nIFRBRyA9ICJGaWxlVmlkZW9DYXB0dXJlciI7Ci0gIHByaXZhdGUgZmluYWwgVmlkZW9SZWFk
ZXIgdmlkZW9SZWFkZXI7Ci0gIHByaXZhdGUgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2Vy
dmVyOwotICBwcml2YXRlIGZpbmFsIFRpbWVyIHRpbWVyID0gbmV3IFRpbWVyKCk7Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBUaW1lclRhc2sgdGlja1Rhc2sgPSBuZXcgVGltZXJUYXNrKCkgewotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIHRpY2soKTsKLSAgICB9Ci0g
IH07Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RnJhbWVXaWR0aCgpIHsKLSAgICByZXR1cm4gdmlkZW9S
ZWFkZXIuZ2V0RnJhbWVXaWR0aCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RnJhbWVIZWln
aHQoKSB7Ci0gICAgcmV0dXJuIHZpZGVvUmVhZGVyLmdldEZyYW1lSGVpZ2h0KCk7Ci0gIH0KLQot
ICBwdWJsaWMgRmlsZVZpZGVvQ2FwdHVyZXIoU3RyaW5nIGlucHV0RmlsZSkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgdmlkZW9SZWFkZXIgPSBuZXcgVmlkZW9SZWFkZXJZ
NE0oaW5wdXRGaWxlKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dn
aW5nLmQoVEFHLCAiQ291bGQgbm90IG9wZW4gdmlkZW8gZmlsZTogIiArIGlucHV0RmlsZSk7Ci0g
ICAgICB0aHJvdyBlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYnl0ZVtdIGdldE5leHRGcmFt
ZSgpIHsKLSAgICByZXR1cm4gdmlkZW9SZWFkZXIuZ2V0TmV4dEZyYW1lKCk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCB0aWNrKCkgewotICAgIGZpbmFsIGxvbmcgY2FwdHVyZVRpbWVOcyA9IFRpbWVV
bml0Lk1JTExJU0VDT05EUy50b05hbm9zKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsK
LQotICAgIGJ5dGVbXSBmcmFtZURhdGEgPSBnZXROZXh0RnJhbWUoKTsKLSAgICBjYXB0dXJlck9i
c2VydmVyLm9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIGZyYW1lRGF0YSwgZ2V0
RnJhbWVXaWR0aCgpLCBnZXRGcmFtZUhlaWdodCgpLCAwLCBjYXB0dXJlVGltZU5zKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN1cmZhY2VUZXh0dXJlSGVs
cGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAg
ICAgIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcikgewotICAgIHRoaXMuY2FwdHVy
ZXJPYnNlcnZlciA9IGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgc3RhcnRDYXB0dXJlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0
ZSkgewotICAgIHRpbWVyLnNjaGVkdWxlKHRpY2tUYXNrLCAwLCAxMDAwIC8gZnJhbWVyYXRlKTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wQ2FwdHVyZSgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgdGltZXIuY2FuY2VsKCk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdChpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICAvLyBFbXB0eSBvbiBwdXJwb3NlCi0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB2aWRlb1JlYWRlci5j
bG9zZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzU2NyZWVuY2Fz
dCgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2
b2lkIG5hdGl2ZUk0MjBUb05WMjEoYnl0ZVtdIHNyYywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBi
eXRlW10gZHN0KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xSZWN0RHJhd2VyLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXIuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXIuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMTFFeHQ7Ci1pbXBvcnQgYW5k
cm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGphdmEubmlvLkZsb2F0QnVmZmVyOwotaW1wb3J0
IGphdmEudXRpbC5JZGVudGl0eUhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoq
Ci0gKiBIZWxwZXIgY2xhc3MgdG8gZHJhdyBhbiBvcGFxdWUgcXVhZCBvbiB0aGUgdGFyZ2V0IHZp
ZXdwb3J0IGxvY2F0aW9uLiBSb3RhdGlvbiwgbWlycm9yLCBhbmQKLSAqIGNyb3BwaW5nIGlzIHNw
ZWNpZmllZCB1c2luZyBhIDR4NCB0ZXh0dXJlIGNvb3JkaW5hdGUgdHJhbnNmb3JtIG1hdHJpeC4g
VGhlIGZyYW1lIGlucHV0IGNhbiBlaXRoZXIKLSAqIGJlIGFuIE9FUyB0ZXh0dXJlIG9yIFlVViB0
ZXh0dXJlcyBpbiBJNDIwIGZvcm1hdC4gVGhlIEdMIHN0YXRlIG11c3QgYmUgcHJlc2VydmVkIGJl
dHdlZW4gZHJhdwotICogY2FsbHMsIHRoaXMgaXMgaW50ZW50aW9uYWwgdG8gbWF4aW1pemUgcGVy
Zm9ybWFuY2UuIFRoZSBmdW5jdGlvbiByZWxlYXNlKCkgbXVzdCBiZSBjYWxsZWQKLSAqIG1hbnVh
bGx5IHRvIGZyZWUgdGhlIHJlc291cmNlcyBoZWxkIGJ5IHRoaXMgb2JqZWN0LgotICovCi1wdWJs
aWMgY2xhc3MgR2xSZWN0RHJhd2VyIGltcGxlbWVudHMgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIg
ewotICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gIC8vIFNpbXBsZSB2ZXJ0ZXggc2hhZGVyLCB1c2Vk
IGZvciBib3RoIFlVViBhbmQgT0VTLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVS
VEVYX1NIQURFUl9TVFJJTkcgPQotICAgICAgICAidmFyeWluZyB2ZWMyIGludGVycF90YztcbiIK
LSAgICAgICsgImF0dHJpYnV0ZSB2ZWM0IGluX3BvcztcbiIKLSAgICAgICsgImF0dHJpYnV0ZSB2
ZWM0IGluX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ1bmlmb3JtIG1hdDQgdGV4TWF0
cml4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAr
ICIgICAgZ2xfUG9zaXRpb24gPSBpbl9wb3M7XG4iCi0gICAgICArICIgICAgaW50ZXJwX3RjID0g
KHRleE1hdHJpeCAqIGluX3RjKS54eTtcbiIKLSAgICAgICsgIn1cbiI7Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFlVVl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HID0KLSAgICAgICAg
InByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgotICAgICAgKyAidmFyeWluZyB2ZWMyIGludGVy
cF90YztcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBzYW1wbGVyMkQgeV90ZXg7
XG4iCi0gICAgICArICJ1bmlmb3JtIHNhbXBsZXIyRCB1X3RleDtcbiIKLSAgICAgICsgInVuaWZv
cm0gc2FtcGxlcjJEIHZfdGV4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4o
KSB7XG4iCi0gICAgICAvLyBDU0MgYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cuZm91cmNjLm9yZy9m
Y2N5dnJnYi5waHAKLSAgICAgICsgIiAgZmxvYXQgeSA9IHRleHR1cmUyRCh5X3RleCwgaW50ZXJw
X3RjKS5yO1xuIgotICAgICAgKyAiICBmbG9hdCB1ID0gdGV4dHVyZTJEKHVfdGV4LCBpbnRlcnBf
dGMpLnIgLSAwLjU7XG4iCi0gICAgICArICIgIGZsb2F0IHYgPSB0ZXh0dXJlMkQodl90ZXgsIGlu
dGVycF90YykuciAtIDAuNTtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh5ICsg
MS40MDMgKiB2LCAiCi0gICAgICArICIgICAgICAgICAgICAgICAgICAgICAgeSAtIDAuMzQ0ICog
dSAtIDAuNzE0ICogdiwgIgotICAgICAgKyAiICAgICAgICAgICAgICAgICAgICAgIHkgKyAxLjc3
ICogdSwgMSk7XG4iCi0gICAgICArICJ9XG4iOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBSR0JfRlJBR01FTlRfU0hBREVSX1NUUklORyA9Ci0gICAgICAgICJwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDtcbiIKLSAgICAgICsgInZhcnlpbmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAg
ICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gc2FtcGxlcjJEIHJnYl90ZXg7XG4iCi0gICAgICAr
ICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0NvbG9y
ID0gdGV4dHVyZTJEKHJnYl90ZXgsIGludGVycF90Yyk7XG4iCi0gICAgICArICJ9XG4iOwotCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBPRVNfRlJBR01FTlRfU0hBREVSX1NUUklORyA9
Ci0gICAgICAgICIjZXh0ZW5zaW9uIEdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgOiByZXF1aXJl
XG4iCi0gICAgICArICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICsgInZhcnlp
bmcgdmVjMiBpbnRlcnBfdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gc2Ft
cGxlckV4dGVybmFsT0VTIG9lc190ZXg7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInZvaWQg
bWFpbigpIHtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0NvbG9yID0gdGV4dHVyZTJEKG9lc190ZXgs
IGludGVycF90Yyk7XG4iCi0gICAgICArICJ9XG4iOwotICAvLyBjbGFuZy1mb3JtYXQgb24KLQot
ICAvLyBWZXJ0ZXggY29vcmRpbmF0ZXMgaW4gTm9ybWFsaXplZCBEZXZpY2UgQ29vcmRpbmF0ZXMs
IGkuZS4gKC0xLCAtMSkgaXMgYm90dG9tLWxlZnQgYW5kICgxLCAxKSBpcwotICAvLyB0b3Atcmln
aHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0QnVmZmVyIEZVTExfUkVDVEFOR0xFX0JV
RiA9IEdsVXRpbC5jcmVhdGVGbG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0gICAgICAtMS4wZiwg
LTEuMGYsIC8vIEJvdHRvbSBsZWZ0LgotICAgICAgMS4wZiwgLTEuMGYsIC8vIEJvdHRvbSByaWdo
dC4KLSAgICAgIC0xLjBmLCAxLjBmLCAvLyBUb3AgbGVmdC4KLSAgICAgIDEuMGYsIDEuMGYsIC8v
IFRvcCByaWdodC4KLSAgfSk7Ci0KLSAgLy8gVGV4dHVyZSBjb29yZGluYXRlcyAtICgwLCAwKSBp
cyBib3R0b20tbGVmdCBhbmQgKDEsIDEpIGlzIHRvcC1yaWdodC4KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgRmxvYXRCdWZmZXIgRlVMTF9SRUNUQU5HTEVfVEVYX0JVRiA9IEdsVXRpbC5jcmVhdGVG
bG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0gICAgICAwLjBmLCAwLjBmLCAvLyBCb3R0b20gbGVm
dC4KLSAgICAgIDEuMGYsIDAuMGYsIC8vIEJvdHRvbSByaWdodC4KLSAgICAgIDAuMGYsIDEuMGYs
IC8vIFRvcCBsZWZ0LgotICAgICAgMS4wZiwgMS4wZiAvLyBUb3AgcmlnaHQuCi0gIH0pOwotCi0g
IHByaXZhdGUgc3RhdGljIGNsYXNzIFNoYWRlciB7Ci0gICAgcHVibGljIGZpbmFsIEdsU2hhZGVy
IGdsU2hhZGVyOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdGV4TWF0cml4TG9jYXRpb247Ci0KLSAg
ICBwdWJsaWMgU2hhZGVyKFN0cmluZyBmcmFnbWVudFNoYWRlcikgewotICAgICAgdGhpcy5nbFNo
YWRlciA9IG5ldyBHbFNoYWRlcihWRVJURVhfU0hBREVSX1NUUklORywgZnJhZ21lbnRTaGFkZXIp
OwotICAgICAgdGhpcy50ZXhNYXRyaXhMb2NhdGlvbiA9IGdsU2hhZGVyLmdldFVuaWZvcm1Mb2Nh
dGlvbigidGV4TWF0cml4Iik7Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhlIGtleXMgYXJlIG9uZSBv
ZiB0aGUgZnJhZ21lbnRzIHNoYWRlcnMgYWJvdmUuCi0gIHByaXZhdGUgZmluYWwgTWFwPFN0cmlu
ZywgU2hhZGVyPiBzaGFkZXJzID0gbmV3IElkZW50aXR5SGFzaE1hcDxTdHJpbmcsIFNoYWRlcj4o
KTsKLQotICAvKioKLSAgICogRHJhdyBhbiBPRVMgdGV4dHVyZSBmcmFtZSB3aXRoIHNwZWNpZmll
ZCB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gUmVxdWlyZWQgcmVzb3VyY2VzIGFyZQot
ICAgKiBhbGxvY2F0ZWQgYXQgdGhlIGZpcnN0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4KLSAgICov
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBkcmF3T2VzKGludCBvZXNUZXh0dXJlSWQsIGZs
b2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LAotICAgICAg
aW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3
cG9ydEhlaWdodCkgewotICAgIHByZXBhcmVTaGFkZXIoT0VTX0ZSQUdNRU5UX1NIQURFUl9TVFJJ
TkcsIHRleE1hdHJpeCk7Ci0gICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVY
VFVSRTApOwotICAgIC8vIHVwZGF0ZVRleEltYWdlKCkgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3Ro
ZXIgdGhyZWFkIGluIGFub3RoZXIgRUdMIGNvbnRleHQsIHNvIHdlIG5lZWQgdG8KLSAgICAvLyBi
aW5kL3VuYmluZCB0aGUgdGV4dHVyZSBpbiBlYWNoIGRyYXcgY2FsbCBzbyB0aGF0IEdMRVMgdW5k
ZXJzdGFkcyBpdCdzIGEgbmV3IHRleHR1cmUuCi0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xF
UzExRXh0LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCBvZXNUZXh0dXJlSWQpOwotICAgIGRyYXdS
ZWN0YW5nbGUodmlld3BvcnRYLCB2aWV3cG9ydFksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVp
Z2h0KTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMTFFeHQuR0xfVEVYVFVSRV9FWFRF
Uk5BTF9PRVMsIDApOwotICB9Ci0KLSAgLyoqCi0gICAqIERyYXcgYSBSR0IoQSkgdGV4dHVyZSBm
cmFtZSB3aXRoIHNwZWNpZmllZCB0ZXh0dXJlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4gUmVxdWly
ZWQgcmVzb3VyY2VzCi0gICAqIGFyZSBhbGxvY2F0ZWQgYXQgdGhlIGZpcnN0IGNhbGwgdG8gdGhp
cyBmdW5jdGlvbi4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBkcmF3UmdiKGlu
dCB0ZXh0dXJlSWQsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVXaWR0aCwgaW50IGZyYW1l
SGVpZ2h0LAotICAgICAgaW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0
V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCkgewotICAgIHByZXBhcmVTaGFkZXIoUkdCX0ZSQUdN
RU5UX1NIQURFUl9TVFJJTkcsIHRleE1hdHJpeCk7Ci0gICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVy
ZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5H
TF9URVhUVVJFXzJELCB0ZXh0dXJlSWQpOwotICAgIGRyYXdSZWN0YW5nbGUodmlld3BvcnRYLCB2
aWV3cG9ydFksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTsKLSAgICAvLyBVbmJpbmQg
dGhlIHRleHR1cmUgYXMgYSBwcmVjYXV0aW9uLgotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJELCAwKTsKLSAgfQotCi0gIC8qKgotICAgKiBEcmF3IGEgWVVWIGZy
YW1lIHdpdGggc3BlY2lmaWVkIHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0cml4LiBSZXF1aXJl
ZCByZXNvdXJjZXMgYXJlCi0gICAqIGFsbG9jYXRlZCBhdCB0aGUgZmlyc3QgY2FsbCB0byB0aGlz
IGZ1bmN0aW9uLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRyYXdZdXYoaW50
W10geXV2VGV4dHVyZXMsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVXaWR0aCwgaW50IGZy
YW1lSGVpZ2h0LAotICAgICAgaW50IHZpZXdwb3J0WCwgaW50IHZpZXdwb3J0WSwgaW50IHZpZXdw
b3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCkgewotICAgIHByZXBhcmVTaGFkZXIoWVVWX0ZS
QUdNRU5UX1NIQURFUl9TVFJJTkcsIHRleE1hdHJpeCk7Ci0gICAgLy8gQmluZCB0aGUgdGV4dHVy
ZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIEdMRVMyMC5nbEFj
dGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICBHTEVTMjAuZ2xCaW5k
VGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgeXV2VGV4dHVyZXNbaV0pOwotICAgIH0KLSAg
ICBkcmF3UmVjdGFuZ2xlKHZpZXdwb3J0WCwgdmlld3BvcnRZLCB2aWV3cG9ydFdpZHRoLCB2aWV3
cG9ydEhlaWdodCk7Ci0gICAgLy8gVW5iaW5kIHRoZSB0ZXh0dXJlcyBhcyBhIHByZWNhdXRpb24u
LgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICBHTEVTMjAuZ2xBY3Rp
dmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCArIGkpOwotICAgICAgR0xFUzIwLmdsQmluZFRl
eHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBkcmF3UmVjdGFuZ2xlKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7
Ci0gICAgLy8gRHJhdyBxdWFkLgotICAgIEdMRVMyMC5nbFZpZXdwb3J0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwotICAgIEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RSSUFOR0xFX1NUUklQ
LCAwLCA0KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBwcmVwYXJlU2hhZGVyKFN0cmluZyBmcmFn
bWVudFNoYWRlciwgZmxvYXRbXSB0ZXhNYXRyaXgpIHsKLSAgICBmaW5hbCBTaGFkZXIgc2hhZGVy
OwotICAgIGlmIChzaGFkZXJzLmNvbnRhaW5zS2V5KGZyYWdtZW50U2hhZGVyKSkgewotICAgICAg
c2hhZGVyID0gc2hhZGVycy5nZXQoZnJhZ21lbnRTaGFkZXIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAvLyBMYXp5IGFsbG9jYXRpb24uCi0gICAgICBzaGFkZXIgPSBuZXcgU2hhZGVyKGZyYWdtZW50
U2hhZGVyKTsKLSAgICAgIHNoYWRlcnMucHV0KGZyYWdtZW50U2hhZGVyLCBzaGFkZXIpOwotICAg
ICAgc2hhZGVyLmdsU2hhZGVyLnVzZVByb2dyYW0oKTsKLSAgICAgIC8vIEluaXRpYWxpemUgZnJh
Z21lbnQgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLgotICAgICAgaWYgKGZyYWdtZW50U2hhZGVyID09
IFlVVl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HKSB7Ci0gICAgICAgIEdMRVMyMC5nbFVuaWZvcm0x
aShzaGFkZXIuZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ5X3RleCIpLCAwKTsKLSAgICAg
ICAgR0xFUzIwLmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24o
InVfdGV4IiksIDEpOwotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdsU2hhZGVy
LmdldFVuaWZvcm1Mb2NhdGlvbigidl90ZXgiKSwgMik7Ci0gICAgICB9IGVsc2UgaWYgKGZyYWdt
ZW50U2hhZGVyID09IFJHQl9GUkFHTUVOVF9TSEFERVJfU1RSSU5HKSB7Ci0gICAgICAgIEdMRVMy
MC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJyZ2JfdGV4
IiksIDApOwotICAgICAgfSBlbHNlIGlmIChmcmFnbWVudFNoYWRlciA9PSBPRVNfRlJBR01FTlRf
U0hBREVSX1NUUklORykgewotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVyLmdsU2hh
ZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigib2VzX3RleCIpLCAwKTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVua25vd24gZnJhZ21lbnQg
c2hhZGVyOiAiICsgZnJhZ21lbnRTaGFkZXIpOwotICAgICAgfQotICAgICAgR2xVdGlsLmNoZWNr
Tm9HTEVTMkVycm9yKCJJbml0aWFsaXplIGZyYWdtZW50IHNoYWRlciB1bmlmb3JtIHZhbHVlcy4i
KTsKLSAgICAgIC8vIEluaXRpYWxpemUgdmVydGV4IHNoYWRlciBhdHRyaWJ1dGVzLgotICAgICAg
c2hhZGVyLmdsU2hhZGVyLnNldFZlcnRleEF0dHJpYkFycmF5KCJpbl9wb3MiLCAyLCBGVUxMX1JF
Q1RBTkdMRV9CVUYpOwotICAgICAgc2hhZGVyLmdsU2hhZGVyLnNldFZlcnRleEF0dHJpYkFycmF5
KCJpbl90YyIsIDIsIEZVTExfUkVDVEFOR0xFX1RFWF9CVUYpOwotICAgIH0KLSAgICBzaGFkZXIu
Z2xTaGFkZXIudXNlUHJvZ3JhbSgpOwotICAgIC8vIENvcHkgdGhlIHRleHR1cmUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4IG92ZXIuCi0gICAgR0xFUzIwLmdsVW5pZm9ybU1hdHJpeDRmdihzaGFkZXIu
dGV4TWF0cml4TG9jYXRpb24sIDEsIGZhbHNlLCB0ZXhNYXRyaXgsIDApOwotICB9Ci0KLSAgLyoq
Ci0gICAqIFJlbGVhc2UgYWxsIEdMRVMgcmVzb3VyY2VzLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUg
bWFudWFsbHksIG90aGVyd2lzZSB0aGUgcmVzb3VyY2VzIGFyZSBsZWFrZWQuCi0gICAqLwotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBmb3IgKFNoYWRlciBzaGFk
ZXIgOiBzaGFkZXJzLnZhbHVlcygpKSB7Ci0gICAgICBzaGFkZXIuZ2xTaGFkZXIucmVsZWFzZSgp
OwotICAgIH0KLSAgICBzaGFkZXJzLmNsZWFyKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvR2xTaGFkZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0dsU2hh
ZGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xTaGFkZXIu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEyMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci0K
LWltcG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLQotLy8gSGVscGVyIGNsYXNzIGZvciBoYW5k
bGluZyBPcGVuR0wgc2hhZGVycyBhbmQgc2hhZGVyIHByb2dyYW1zLgotcHVibGljIGNsYXNzIEds
U2hhZGVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJHbFNoYWRlciI7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvbXBpbGVTaGFkZXIoaW50IHNoYWRlclR5cGUsIFN0
cmluZyBzb3VyY2UpIHsKLSAgICBmaW5hbCBpbnQgc2hhZGVyID0gR0xFUzIwLmdsQ3JlYXRlU2hh
ZGVyKHNoYWRlclR5cGUpOwotICAgIGlmIChzaGFkZXIgPT0gMCkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oImdsQ3JlYXRlU2hhZGVyKCkgZmFpbGVkLiBHTEVTMjAgZXJyb3I6
ICIgKyBHTEVTMjAuZ2xHZXRFcnJvcigpKTsKLSAgICB9Ci0gICAgR0xFUzIwLmdsU2hhZGVyU291
cmNlKHNoYWRlciwgc291cmNlKTsKLSAgICBHTEVTMjAuZ2xDb21waWxlU2hhZGVyKHNoYWRlcik7
Ci0gICAgaW50W10gY29tcGlsZVN0YXR1cyA9IG5ldyBpbnRbXSB7R0xFUzIwLkdMX0ZBTFNFfTsK
LSAgICBHTEVTMjAuZ2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMRVMyMC5HTF9DT01QSUxFX1NUQVRV
UywgY29tcGlsZVN0YXR1cywgMCk7Ci0gICAgaWYgKGNvbXBpbGVTdGF0dXNbMF0gIT0gR0xFUzIw
LkdMX1RSVUUpIHsKLSAgICAgIExvZ2dpbmcuZSgKLSAgICAgICAgICBUQUcsICJDb3VsZCBub3Qg
Y29tcGlsZSBzaGFkZXIgIiArIHNoYWRlclR5cGUgKyAiOiIgKyBHTEVTMjAuZ2xHZXRTaGFkZXJJ
bmZvTG9nKHNoYWRlcikpOwotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oR0xFUzIw
LmdsR2V0U2hhZGVySW5mb0xvZyhzaGFkZXIpKTsKLSAgICB9Ci0gICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJjb21waWxlU2hhZGVyIik7Ci0gICAgcmV0dXJuIHNoYWRlcjsKLSAgfQotCi0g
IHByaXZhdGUgaW50IHByb2dyYW07Ci0KLSAgcHVibGljIEdsU2hhZGVyKFN0cmluZyB2ZXJ0ZXhT
b3VyY2UsIFN0cmluZyBmcmFnbWVudFNvdXJjZSkgewotICAgIGZpbmFsIGludCB2ZXJ0ZXhTaGFk
ZXIgPSBjb21waWxlU2hhZGVyKEdMRVMyMC5HTF9WRVJURVhfU0hBREVSLCB2ZXJ0ZXhTb3VyY2Up
OwotICAgIGZpbmFsIGludCBmcmFnbWVudFNoYWRlciA9IGNvbXBpbGVTaGFkZXIoR0xFUzIwLkdM
X0ZSQUdNRU5UX1NIQURFUiwgZnJhZ21lbnRTb3VyY2UpOwotICAgIHByb2dyYW0gPSBHTEVTMjAu
Z2xDcmVhdGVQcm9ncmFtKCk7Ci0gICAgaWYgKHByb2dyYW0gPT0gMCkgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oImdsQ3JlYXRlUHJvZ3JhbSgpIGZhaWxlZC4gR0xFUzIwIGVy
cm9yOiAiICsgR0xFUzIwLmdsR2V0RXJyb3IoKSk7Ci0gICAgfQotICAgIEdMRVMyMC5nbEF0dGFj
aFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwotICAgIEdMRVMyMC5nbEF0dGFjaFNoYWRl
cihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgR0xFUzIwLmdsTGlua1Byb2dyYW0ocHJv
Z3JhbSk7Ci0gICAgaW50W10gbGlua1N0YXR1cyA9IG5ldyBpbnRbXSB7R0xFUzIwLkdMX0ZBTFNF
fTsKLSAgICBHTEVTMjAuZ2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR0xFUzIwLkdMX0xJTktfU1RB
VFVTLCBsaW5rU3RhdHVzLCAwKTsKLSAgICBpZiAobGlua1N0YXR1c1swXSAhPSBHTEVTMjAuR0xf
VFJVRSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNvdWxkIG5vdCBsaW5rIHByb2dyYW06ICIg
KyBHTEVTMjAuZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbihHTEVTMjAuZ2xHZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKSk7Ci0g
ICAgfQotICAgIC8vIEFjY29yZGluZyB0byB0aGUgZG9jdW1lbnRhdGlvbiBvZiBnbExpbmtQcm9n
cmFtKCk6Ci0gICAgLy8gIkFmdGVyIHRoZSBsaW5rIG9wZXJhdGlvbiwgYXBwbGljYXRpb25zIGFy
ZSBmcmVlIHRvIG1vZGlmeSBhdHRhY2hlZCBzaGFkZXIgb2JqZWN0cywgY29tcGlsZQotICAgIC8v
IGF0dGFjaGVkIHNoYWRlciBvYmplY3RzLCBkZXRhY2ggc2hhZGVyIG9iamVjdHMsIGRlbGV0ZSBz
aGFkZXIgb2JqZWN0cywgYW5kIGF0dGFjaCBhZGRpdGlvbmFsCi0gICAgLy8gc2hhZGVyIG9iamVj
dHMuIE5vbmUgb2YgdGhlc2Ugb3BlcmF0aW9ucyBhZmZlY3RzIHRoZSBpbmZvcm1hdGlvbiBsb2cg
b3IgdGhlIHByb2dyYW0gdGhhdCBpcwotICAgIC8vIHBhcnQgb2YgdGhlIHByb2dyYW0gb2JqZWN0
LiIKLSAgICAvLyBCdXQgaW4gcHJhY3RpY2UsIGRldGFjaGluZyBzaGFkZXJzIGZyb20gdGhlIHBy
b2dyYW0gc2VlbXMgdG8gYnJlYWsgc29tZSBkZXZpY2VzLiBEZWxldGluZyB0aGUKLSAgICAvLyBz
aGFkZXJzIGFyZSBmaW5lIGhvd2V2ZXIgLSBpdCB3aWxsIGRlbGV0ZSB0aGVtIHdoZW4gdGhleSBh
cmUgbm8gbG9uZ2VyIGF0dGFjaGVkIHRvIGEgcHJvZ3JhbS4KLSAgICBHTEVTMjAuZ2xEZWxldGVT
aGFkZXIodmVydGV4U2hhZGVyKTsKLSAgICBHTEVTMjAuZ2xEZWxldGVTaGFkZXIoZnJhZ21lbnRT
aGFkZXIpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiQ3JlYXRpbmcgR2xTaGFkZXIi
KTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0QXR0cmliTG9jYXRpb24oU3RyaW5nIGxhYmVsKSB7
Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAgICBpbnQgbG9j
YXRpb24gPSBHTEVTMjAuZ2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBsYWJlbCk7Ci0gICAg
aWYgKGxvY2F0aW9uIDwgMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNv
dWxkIG5vdCBsb2NhdGUgJyIgKyBsYWJlbCArICInIGluIHByb2dyYW0iKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgLyoqCi0gICAqIEVuYWJsZSBhbmQgdXBsb2FkIGEg
dmVydGV4IGFycmF5IGZvciBhdHRyaWJ1dGUgfGxhYmVsfC4gVGhlIHZlcnRleCBkYXRhIGlzIHNw
ZWNpZmllZCBpbgotICAgKiB8YnVmZmVyfCB3aXRoIHxkaW1lbnNpb258IG51bWJlciBvZiBjb21w
b25lbnRzIHBlciB2ZXJ0ZXguCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJB
cnJheShTdHJpbmcgbGFiZWwsIGludCBkaW1lbnNpb24sIEZsb2F0QnVmZmVyIGJ1ZmZlcikgewot
ICAgIGlmIChwcm9ncmFtID09IC0xKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiVGhlIHByb2dyYW0gaGFzIGJlZW4gcmVsZWFzZWQiKTsKLSAgICB9Ci0gICAgaW50IGxvY2F0
aW9uID0gZ2V0QXR0cmliTG9jYXRpb24obGFiZWwpOwotICAgIEdMRVMyMC5nbEVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGxvY2F0aW9uKTsKLSAgICBHTEVTMjAuZ2xWZXJ0ZXhBdHRyaWJQb2ludGVy
KGxvY2F0aW9uLCBkaW1lbnNpb24sIEdMRVMyMC5HTF9GTE9BVCwgZmFsc2UsIDAsIGJ1ZmZlcik7
Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJzZXRWZXJ0ZXhBdHRyaWJBcnJheSIpOwot
ICB9Ci0KLSAgcHVibGljIGludCBnZXRVbmlmb3JtTG9jYXRpb24oU3RyaW5nIGxhYmVsKSB7Ci0g
ICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAgICBpbnQgbG9jYXRp
b24gPSBHTEVTMjAuZ2xHZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbGFiZWwpOwotICAgIGlm
IChsb2NhdGlvbiA8IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDb3Vs
ZCBub3QgbG9jYXRlIHVuaWZvcm0gJyIgKyBsYWJlbCArICInIGluIHByb2dyYW0iKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGxvY2F0aW9uOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdXNlUHJvZ3JhbSgp
IHsKLSAgICBpZiAocHJvZ3JhbSA9PSAtMSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oIlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJlbGVhc2VkIik7Ci0gICAgfQotICAgIEdMRVMy
MC5nbFVzZVByb2dyYW0ocHJvZ3JhbSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJn
bFVzZVByb2dyYW0iKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIkRlbGV0aW5nIHNoYWRlci4iKTsKLSAgICAvLyBEZWxldGUgcHJvZ3JhbSwg
YXV0b21hdGljYWxseSBkZXRhY2hpbmcgYW55IHNoYWRlcnMgZnJvbSBpdC4KLSAgICBpZiAocHJv
Z3JhbSAhPSAtMSkgewotICAgICAgR0xFUzIwLmdsRGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKLSAg
ICAgIHByb2dyYW0gPSAtMTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
R2xUZXh0dXJlRnJhbWVCdWZmZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L0dsVGV4dHVyZUZyYW1lQnVmZmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvR2xUZXh0dXJlRnJhbWVCdWZmZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEy
NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIGZvciBo
YW5kbGluZyBPcGVuR0wgZnJhbWVidWZmZXIgd2l0aCBvbmx5IGNvbG9yIGF0dGFjaG1lbnQgYW5k
IG5vIGRlcHRoIG9yIHN0ZW5jaWwKLSAqIGJ1ZmZlci4gSW50ZW5kZWQgZm9yIHNpbXBsZSB0YXNr
cyBzdWNoIGFzIHRleHR1cmUgY29weSwgdGV4dHVyZSBkb3duc2NhbGluZywgYW5kIHRleHR1cmUg
Y29sb3IKLSAqIGNvbnZlcnNpb24uCi0gKi8KLS8vIFRPRE8obWFnamVkKTogQWRkIHVuaXR0ZXN0
cyBmb3IgdGhpcyBjbGFzcy4KLXB1YmxpYyBjbGFzcyBHbFRleHR1cmVGcmFtZUJ1ZmZlciB7Ci0g
IHByaXZhdGUgZmluYWwgaW50IGZyYW1lQnVmZmVySWQ7Ci0gIHByaXZhdGUgZmluYWwgaW50IHRl
eHR1cmVJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgcGl4ZWxGb3JtYXQ7Ci0gIHByaXZhdGUgaW50
IHdpZHRoOwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0KLSAgLyoqCi0gICAqIEdlbmVyYXRlIHRl
eHR1cmUgYW5kIGZyYW1lYnVmZmVyIHJlc291cmNlcy4gQW4gRUdMQ29udGV4dCBtdXN0IGJlIGJv
dW5kIG9uIHRoZSBjdXJyZW50IHRocmVhZAotICAgKiB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlv
bi4gVGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSB1bnRpbCBzZXRTaXplKCkgaXMgY2Fs
bGVkLgotICAgKi8KLSAgcHVibGljIEdsVGV4dHVyZUZyYW1lQnVmZmVyKGludCBwaXhlbEZvcm1h
dCkgewotICAgIHN3aXRjaCAocGl4ZWxGb3JtYXQpIHsKLSAgICAgIGNhc2UgR0xFUzIwLkdMX0xV
TUlOQU5DRToKLSAgICAgIGNhc2UgR0xFUzIwLkdMX1JHQjoKLSAgICAgIGNhc2UgR0xFUzIwLkdM
X1JHQkE6Ci0gICAgICAgIHRoaXMucGl4ZWxGb3JtYXQgPSBwaXhlbEZvcm1hdDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uKCJJbnZhbGlkIHBpeGVsIGZvcm1hdDogIiArIHBpeGVsRm9ybWF0KTsKLSAgICB9
Ci0KLSAgICB0ZXh0dXJlSWQgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMyMC5HTF9URVhU
VVJFXzJEKTsKLSAgICB0aGlzLndpZHRoID0gMDsKLSAgICB0aGlzLmhlaWdodCA9IDA7Ci0KLSAg
ICAvLyBDcmVhdGUgZnJhbWVidWZmZXIgb2JqZWN0IGFuZCBiaW5kIGl0LgotICAgIGZpbmFsIGlu
dCBmcmFtZUJ1ZmZlcnNbXSA9IG5ldyBpbnRbMV07Ci0gICAgR0xFUzIwLmdsR2VuRnJhbWVidWZm
ZXJzKDEsIGZyYW1lQnVmZmVycywgMCk7Ci0gICAgZnJhbWVCdWZmZXJJZCA9IGZyYW1lQnVmZmVy
c1swXTsKLSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVS
LCBmcmFtZUJ1ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkdlbmVyYXRl
IGZyYW1lYnVmZmVyIik7Ci0KLSAgICAvLyBBdHRhY2ggdGhlIHRleHR1cmUgdG8gdGhlIGZyYW1l
YnVmZmVyIGFzIGNvbG9yIGF0dGFjaG1lbnQuCi0gICAgR0xFUzIwLmdsRnJhbWVidWZmZXJUZXh0
dXJlMkQoCi0gICAgICAgIEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgR0xFUzIwLkdMX0NPTE9SX0FU
VEFDSE1FTlQwLCBHTEVTMjAuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkLCAwKTsKLSAgICBHbFV0
aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkF0dGFjaCB0ZXh0dXJlIHRvIGZyYW1lYnVmZmVyIik7Ci0K
LSAgICAvLyBSZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAgICBHTEVTMjAuZ2xCaW5kRnJh
bWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgfQotCi0gIC8qKgotICAgKiAo
UmUpYWxsb2NhdGUgdGV4dHVyZS4gV2lsbCBkbyBub3RoaW5nIGlmIHRoZSByZXF1ZXN0ZWQgc2l6
ZSBlcXVhbHMgdGhlIGN1cnJlbnQgc2l6ZS4gQW4KLSAgICogRUdMQ29udGV4dCBtdXN0IGJlIGJv
dW5kIG9uIHRoZSBjdXJyZW50IHRocmVhZCB3aGVuIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gTXVz
dCBiZSBjYWxsZWQgYXQKLSAgICogbGVhc3Qgb25jZSBiZWZvcmUgdXNpbmcgdGhlIGZyYW1lYnVm
ZmVyLiBNYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGNoYW5nZSBzaXplLgotICAgKi8K
LSAgcHVibGljIHZvaWQgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBpZiAo
d2lkdGggPT0gMCB8fCBoZWlnaHQgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1
bWVudEV4Y2VwdGlvbigiSW52YWxpZCBzaXplOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQpOwot
ICAgIH0KLSAgICBpZiAod2lkdGggPT0gdGhpcy53aWR0aCAmJiBoZWlnaHQgPT0gdGhpcy5oZWln
aHQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAg
IHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgLy8gQmluZCBvdXIgZnJhbWVidWZmZXIuCi0g
ICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgZnJhbWVC
dWZmZXJJZCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbEJpbmRGcmFtZWJ1ZmZl
ciIpOwotCi0gICAgLy8gQWxsb2NhdGUgdGV4dHVyZS4KLSAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0
dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIw
LkdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0gICAgR0xFUzIwLmdsVGV4SW1hZ2UyRChHTEVT
MjAuR0xfVEVYVFVSRV8yRCwgMCwgcGl4ZWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIHBpeGVs
Rm9ybWF0LAotICAgICAgICBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgbnVsbCk7Ci0KLSAgICAv
LyBDaGVjayB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyBpbiBhIGdvb2Qgc3RhdGUuCi0gICAgZmlu
YWwgaW50IHN0YXR1cyA9IEdMRVMyMC5nbENoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xFUzIwLkdM
X0ZSQU1FQlVGRkVSKTsKLSAgICBpZiAoc3RhdHVzICE9IEdMRVMyMC5HTF9GUkFNRUJVRkZFUl9D
T01QTEVURSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiRnJhbWVi
dWZmZXIgbm90IGNvbXBsZXRlLCBzdGF0dXM6ICIgKyBzdGF0dXMpOwotICAgIH0KLQotICAgIC8v
IFJlc3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZl
cihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJELCAwKTsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0V2lkdGgoKSB7
Ci0gICAgcmV0dXJuIHdpZHRoOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRIZWlnaHQoKSB7Ci0g
ICAgcmV0dXJuIGhlaWdodDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0RnJhbWVCdWZmZXJJZCgp
IHsKLSAgICByZXR1cm4gZnJhbWVCdWZmZXJJZDsKLSAgfQotCi0gIHB1YmxpYyBpbnQgZ2V0VGV4
dHVyZUlkKCkgewotICAgIHJldHVybiB0ZXh0dXJlSWQ7Ci0gIH0KLQotICAvKioKLSAgICogUmVs
ZWFzZSB0ZXh0dXJlIGFuZCBmcmFtZWJ1ZmZlci4gQW4gRUdMQ29udGV4dCBtdXN0IGJlIGJvdW5k
IG9uIHRoZSBjdXJyZW50IHRocmVhZCB3aGVuIGNhbGxpbmcKLSAgICogdGhpcyBmdW5jdGlvbi4g
VGhpcyBvYmplY3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4KLSAgICovCi0g
IHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwg
bmV3IGludFtdIHt0ZXh0dXJlSWR9LCAwKTsKLSAgICBHTEVTMjAuZ2xEZWxldGVGcmFtZWJ1ZmZl
cnMoMSwgbmV3IGludFtdIHtmcmFtZUJ1ZmZlcklkfSwgMCk7Ci0gICAgd2lkdGggPSAwOwotICAg
IGhlaWdodCA9IDA7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xVdGlsLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFV0aWwuamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFV0aWwuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDU4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZm
ZXI7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZU9yZGVyOwotaW1wb3J0IGphdmEubmlvLkZsb2F0QnVm
ZmVyOwotCi0vKioKLSAqIFNvbWUgT3BlbkdMIHN0YXRpYyB1dGlsaXR5IGZ1bmN0aW9ucy4KLSAq
LwotcHVibGljIGNsYXNzIEdsVXRpbCB7Ci0gIHByaXZhdGUgR2xVdGlsKCkge30KLQotICAvLyBB
c3NlcnQgdGhhdCBubyBPcGVuR0wgRVMgMi4wIGVycm9yIGhhcyBiZWVuIHJhaXNlZC4KLSAgcHVi
bGljIHN0YXRpYyB2b2lkIGNoZWNrTm9HTEVTMkVycm9yKFN0cmluZyBtc2cpIHsKLSAgICBpbnQg
ZXJyb3IgPSBHTEVTMjAuZ2xHZXRFcnJvcigpOwotICAgIGlmIChlcnJvciAhPSBHTEVTMjAuR0xf
Tk9fRVJST1IpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKG1zZyArICI6IEdM
RVMyMCBlcnJvcjogIiArIGVycm9yKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIEZs
b2F0QnVmZmVyIGNyZWF0ZUZsb2F0QnVmZmVyKGZsb2F0W10gY29vcmRzKSB7Ci0gICAgLy8gQWxs
b2NhdGUgYSBkaXJlY3QgQnl0ZUJ1ZmZlciwgdXNpbmcgNCBieXRlcyBwZXIgZmxvYXQsIGFuZCBj
b3B5IGNvb3JkcyBpbnRvIGl0LgotICAgIEJ5dGVCdWZmZXIgYmIgPSBCeXRlQnVmZmVyLmFsbG9j
YXRlRGlyZWN0KGNvb3Jkcy5sZW5ndGggKiA0KTsKLSAgICBiYi5vcmRlcihCeXRlT3JkZXIubmF0
aXZlT3JkZXIoKSk7Ci0gICAgRmxvYXRCdWZmZXIgZmIgPSBiYi5hc0Zsb2F0QnVmZmVyKCk7Ci0g
ICAgZmIucHV0KGNvb3Jkcyk7Ci0gICAgZmIucG9zaXRpb24oMCk7Ci0gICAgcmV0dXJuIGZiOwot
ICB9Ci0KLSAgLyoqCi0gICAqIEdlbmVyYXRlIHRleHR1cmUgd2l0aCBzdGFuZGFyZCBwYXJhbWV0
ZXJzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnQgZ2VuZXJhdGVUZXh0dXJlKGludCB0YXJn
ZXQpIHsKLSAgICBmaW5hbCBpbnQgdGV4dHVyZUFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIEdM
RVMyMC5nbEdlblRleHR1cmVzKDEsIHRleHR1cmVBcnJheSwgMCk7Ci0gICAgZmluYWwgaW50IHRl
eHR1cmVJZCA9IHRleHR1cmVBcnJheVswXTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZSh0YXJn
ZXQsIHRleHR1cmVJZCk7Ci0gICAgR0xFUzIwLmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMRVMy
MC5HTF9URVhUVVJFX01JTl9GSUxURVIsIEdMRVMyMC5HTF9MSU5FQVIpOwotICAgIEdMRVMyMC5n
bFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAuR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTEVT
MjAuR0xfTElORUFSKTsKLSAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xFUzIw
LkdMX1RFWFRVUkVfV1JBUF9TLCBHTEVTMjAuR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgR0xFUzIw
LmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMRVMyMC5HTF9URVhUVVJFX1dSQVBfVCwgR0xFUzIw
LkdMX0NMQU1QX1RPX0VER0UpOwotICAgIGNoZWNrTm9HTEVTMkVycm9yKCJnZW5lcmF0ZVRleHR1
cmUiKTsKLSAgICByZXR1cm4gdGV4dHVyZUlkOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0ljZUNhbmRpZGF0ZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvSWNl
Q2FuZGlkYXRlLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvSWNl
Q2FuZGlkYXRlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMSArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKgotICogUmVwcmVzZW50YXRpb24g
b2YgYSBzaW5nbGUgSUNFIENhbmRpZGF0ZSwgbWlycm9yaW5nCi0gKiB7QGNvZGUgSWNlQ2FuZGlk
YXRlSW50ZXJmYWNlfSBpbiB0aGUgQysrIEFQSS4KLSAqLwotcHVibGljIGNsYXNzIEljZUNhbmRp
ZGF0ZSB7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgc2RwTWlkOwotICBwdWJsaWMgZmluYWwgaW50
IHNkcE1MaW5lSW5kZXg7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgc2RwOwotCi0gIHB1YmxpYyBJ
Y2VDYW5kaWRhdGUoU3RyaW5nIHNkcE1pZCwgaW50IHNkcE1MaW5lSW5kZXgsIFN0cmluZyBzZHAp
IHsKLSAgICB0aGlzLnNkcE1pZCA9IHNkcE1pZDsKLSAgICB0aGlzLnNkcE1MaW5lSW5kZXggPSBz
ZHBNTGluZUluZGV4OwotICAgIHRoaXMuc2RwID0gc2RwOwotICB9Ci0KLSAgcHVibGljIFN0cmlu
ZyB0b1N0cmluZygpIHsKLSAgICByZXR1cm4gc2RwTWlkICsgIjoiICsgc2RwTUxpbmVJbmRleCAr
ICI6IiArIHNkcDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlk
ZW9EZWNvZGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVj
VmlkZW9EZWNvZGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
TWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNzEwICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFu
ZHJvaWQubWVkaWEuTWVkaWFDb2RlYzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJ
bmZvOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRp
ZXM7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjTGlzdDsKLWltcG9ydCBhbmRyb2lk
Lm1lZGlhLk1lZGlhRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5k
cm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZTsKLQotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9y
dCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUXVldWU7Ci1pbXBvcnQgamF2YS51
dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWlt
cG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLy8gSmF2YS1zaWRlIG9mIHBl
ZXJjb25uZWN0aW9uX2puaS5jYzpNZWRpYUNvZGVjVmlkZW9EZWNvZGVyLgotLy8gVGhpcyBjbGFz
cyBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIEphdmEgUGVlckNvbm5lY3Rpb24g
QVBJLgotQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLXB1YmxpYyBjbGFzcyBNZWRp
YUNvZGVjVmlkZW9EZWNvZGVyIHsKLSAgLy8gVGhpcyBjbGFzcyBpcyBjb25zdHJ1Y3RlZCwgb3Bl
cmF0ZWQsIGFuZCBkZXN0cm95ZWQgYnkgaXRzIEMrKyBpbmNhcm5hdGlvbiwKLSAgLy8gc28gdGhl
IGNsYXNzIGFuZCBpdHMgbWV0aG9kcyBoYXZlIG5vbi1wdWJsaWMgdmlzaWJpbGl0eS4gIFRoZSBB
UEkgdGhpcwotICAvLyBjbGFzcyBleHBvc2VzIGFpbXMgdG8gbWltaWMgdGhlIHdlYnJ0Yzo6Vmlk
ZW9EZWNvZGVyIEFQSSBhcyBjbG9zZWx5IGFzCi0gIC8vIHBvc3NpYmx5IHRvIG1pbmltaXplIHRo
ZSBhbW91bnQgb2YgdHJhbnNsYXRpb24gd29yayBuZWNlc3NhcnkuCi0KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIjsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgbG9uZyBNQVhfREVDT0RFX1RJTUVfTVMgPSAyMDA7Ci0KLSAgLy8gVHJh
Y2tzIHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGUuCi0gIHB1YmxpYyBlbnVtIFZpZGVvQ29kZWNUeXBl
IHsgVklERU9fQ09ERUNfVlA4LCBWSURFT19DT0RFQ19WUDksIFZJREVPX0NPREVDX0gyNjQgfQot
Ci0gIC8vIFRpbWVvdXQgZm9yIGlucHV0IGJ1ZmZlciBkZXF1ZXVlLgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgREVRVUVVRV9JTlBVVF9USU1FT1VUID0gNTAwMDAwOwotICAvLyBUaW1lb3V0
IGZvciBjb2RlYyByZWxlYXNpbmcuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRURJQV9D
T0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMgPSA1MDAwOwotICAvLyBNYXggbnVtYmVyIG9mIG91dHB1
dCBidWZmZXJzIHF1ZXVlZCBiZWZvcmUgc3RhcnRpbmcgdG8gZHJvcCBkZWNvZGVkIGZyYW1lcy4K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9RVUVVRURfT1VUUFVUQlVGRkVSUyA9IDM7
Ci0gIC8vIEFjdGl2ZSBydW5uaW5nIGRlY29kZXIgaW5zdGFuY2UuIFNldCBpbiBpbml0RGVjb2Rl
KCkgKGNhbGxlZCBmcm9tIG5hdGl2ZSBjb2RlKQotICAvLyBhbmQgcmVzZXQgdG8gbnVsbCBpbiBy
ZWxlYXNlKCkgY2FsbC4KLSAgcHJpdmF0ZSBzdGF0aWMgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciBy
dW5uaW5nSW5zdGFuY2UgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBNZWRpYUNvZGVjVmlkZW9E
ZWNvZGVyRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0
aWMgaW50IGNvZGVjRXJyb3JzID0gMDsKLSAgLy8gTGlzdCBvZiBkaXNhYmxlZCBjb2RlYyB0eXBl
cyAtIGNhbiBiZSBzZXQgZnJvbSBhcHBsaWNhdGlvbi4KLSAgcHJpdmF0ZSBzdGF0aWMgU2V0PFN0
cmluZz4gaHdEZWNvZGVyRGlzYWJsZWRUeXBlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQot
ICBwcml2YXRlIFRocmVhZCBtZWRpYUNvZGVjVGhyZWFkOwotICBwcml2YXRlIE1lZGlhQ29kZWMg
bWVkaWFDb2RlYzsKLSAgcHJpdmF0ZSBCeXRlQnVmZmVyW10gaW5wdXRCdWZmZXJzOwotICBwcml2
YXRlIEJ5dGVCdWZmZXJbXSBvdXRwdXRCdWZmZXJzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVlA4X01JTUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA4IjsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFZQOV9NSU1FX1RZUEUgPSAidmlkZW8veC12bmQub24yLnZwOSI7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0X01JTUVfVFlQRSA9ICJ2aWRlby9h
dmMiOwotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBWUDggZGVjb2RlcnMuCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1cHBvcnRlZFZwOEh3Q29kZWNQcmVmaXhlcyA9IHsKLSAg
ICAgICJPTVgucWNvbS4iLCAiT01YLk52aWRpYS4iLCAiT01YLkV4eW5vcy4iLCAiT01YLkludGVs
LiJ9OwotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBWUDkgZGVjb2RlcnMuCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZ1tdIHN1cHBvcnRlZFZwOUh3Q29kZWNQcmVmaXhlcyA9IHsiT01Y
LnFjb20uIiwgIk9NWC5FeHlub3MuIn07Ci0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIEhXIEguMjY0
IGRlY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBzdXBwb3J0ZWRIMjY0
SHdDb2RlY1ByZWZpeGVzID0gewotICAgICAgIk9NWC5xY29tLiIsICJPTVguSW50ZWwuIiwgIk9N
WC5FeHlub3MuIn07Ci0KLSAgLy8gTlYxMiBjb2xvciBmb3JtYXQgc3VwcG9ydGVkIGJ5IFFDT00g
Y29kZWMsIGJ1dCBub3QgZGVjbGFyZWQgaW4gTWVkaWFDb2RlYyAtCi0gIC8vIHNlZSAvaGFyZHdh
cmUvcWNvbS9tZWRpYS9tbS1jb3JlL2luYy9PTVhfUUNPTUV4dG5zLmgKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjMybTRr
YSA9IDB4N0ZBMzBDMDE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZP
Uk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXIxNm00a2EgPSAweDdGQTMwQzAyOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFy
NjR4MzJUaWxlMm04a2EgPSAweDdGQTMwQzAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
Q09MT1JfUUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtID0gMHg3RkEzMEMwNDsK
LSAgLy8gQWxsb3dhYmxlIGNvbG9yIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IGNvZGVjIC0gaW4gb3Jk
ZXIgb2YgcHJlZmVyZW5jZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxJbnRlZ2VyPiBz
dXBwb3J0ZWRDb2xvckxpc3QgPSBBcnJheXMuYXNMaXN0KAotICAgICAgQ29kZWNDYXBhYmlsaXRp
ZXMuQ09MT1JfRm9ybWF0WVVWNDIwUGxhbmFyLCBDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3Jt
YXRZVVY0MjBTZW1pUGxhbmFyLAotICAgICAgQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfUUNPTV9G
b3JtYXRZVVY0MjBTZW1pUGxhbmFyLAotICAgICAgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNr
ZWRTZW1pUGxhbmFyMzJtNGthLCBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFu
YXIxNm00a2EsCi0gICAgICBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXI2
NHgzMlRpbGUybThrYSwKLSAgICAgIENPTE9SX1FDT01fRk9STUFUWVVWNDIwUGFja2VkU2VtaVBs
YW5hcjMybSk7Ci0KLSAgcHJpdmF0ZSBpbnQgY29sb3JGb3JtYXQ7Ci0gIHByaXZhdGUgaW50IHdp
ZHRoOwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgaW50IHN0cmlkZTsKLSAgcHJp
dmF0ZSBpbnQgc2xpY2VIZWlnaHQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBoYXNEZWNvZGVkRmlyc3RG
cmFtZTsKLSAgcHJpdmF0ZSBmaW5hbCBRdWV1ZTxUaW1lU3RhbXBzPiBkZWNvZGVTdGFydFRpbWVN
cyA9IG5ldyBMaW5rZWRMaXN0PFRpbWVTdGFtcHM+KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiB1c2VT
dXJmYWNlOwotCi0gIC8vIFRoZSBiZWxvdyB2YXJpYWJsZXMgYXJlIG9ubHkgdXNlZCB3aGVuIGRl
Y29kaW5nIHRvIGEgU3VyZmFjZS4KLSAgcHJpdmF0ZSBUZXh0dXJlTGlzdGVuZXIgdGV4dHVyZUxp
c3RlbmVyOwotICBwcml2YXRlIGludCBkcm9wcGVkRnJhbWVzOwotICBwcml2YXRlIFN1cmZhY2Ug
c3VyZmFjZSA9IG51bGw7Ci0gIHByaXZhdGUgZmluYWwgUXVldWU8RGVjb2RlZE91dHB1dEJ1ZmZl
cj4gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycyA9Ci0gICAgICBuZXcgTGlua2VkTGlzdDxE
ZWNvZGVkT3V0cHV0QnVmZmVyPigpOwotCi0gIC8vIE1lZGlhQ29kZWMgZXJyb3IgaGFuZGxlciAt
IGludm9rZWQgd2hlbiBjcml0aWNhbCBlcnJvciBoYXBwZW5zIHdoaWNoIG1heSBwcmV2ZW50Ci0g
IC8vIGZ1cnRoZXIgdXNlIG9mIG1lZGlhIGNvZGVjIEFQSS4gTm93IGl0IG1lYW5zIHRoYXQgb25l
IG9mIG1lZGlhIGNvZGVjIGluc3RhbmNlcwotICAvLyBpcyBoYW5naW5nIGFuZCBjYW4gbm8gbG9u
Z2VyIGJlIHVzZWQgaW4gdGhlIG5leHQgY2FsbC4KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2Ug
TWVkaWFDb2RlY1ZpZGVvRGVjb2RlckVycm9yQ2FsbGJhY2sgewotICAgIHZvaWQgb25NZWRpYUNv
ZGVjVmlkZW9EZWNvZGVyQ3JpdGljYWxFcnJvcihpbnQgY29kZWNFcnJvcnMpOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyB2b2lkIHNldEVycm9yQ2FsbGJhY2soTWVkaWFDb2RlY1ZpZGVvRGVjb2Rl
ckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJTZXQg
ZXJyb3IgY2FsbGJhY2siKTsKLSAgICBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmVycm9yQ2FsbGJh
Y2sgPSBlcnJvckNhbGxiYWNrOwotICB9Ci0KLSAgLy8gRnVuY3Rpb25zIHRvIGRpc2FibGUgSFcg
ZGVjb2RpbmcgLSBjYW4gYmUgY2FsbGVkIGZyb20gYXBwbGljYXRpb25zIGZvciBwbGF0Zm9ybXMK
LSAgLy8gd2hpY2ggaGF2ZSBrbm93biBIVyBkZWNvZGluZyBwcm9ibGVtcy4KLSAgcHVibGljIHN0
YXRpYyB2b2lkIGRpc2FibGVWcDhId0NvZGVjKCkgewotICAgIExvZ2dpbmcudyhUQUcsICJWUDgg
ZGVjb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdEZWNvZGVyRGlz
YWJsZWRUeXBlcy5hZGQoVlA4X01JTUVfVFlQRSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZv
aWQgZGlzYWJsZVZwOUh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIlZQOSBkZWNvZGlu
ZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAgICBod0RlY29kZXJEaXNhYmxlZFR5
cGVzLmFkZChWUDlfTUlNRV9UWVBFKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNh
YmxlSDI2NEh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIkguMjY0IGRlY29kaW5nIGlz
IGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RGVjb2RlckRpc2FibGVkVHlwZXMu
YWRkKEgyNjRfTUlNRV9UWVBFKTsKLSAgfQotCi0gIC8vIEZ1bmN0aW9ucyB0byBxdWVyeSBpZiBI
VyBkZWNvZGluZyBpcyBzdXBwb3J0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOEh3
U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlu
cyhWUDhfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZERlY29kZXIoVlA4X01JTUVfVFlQRSwg
c3VwcG9ydGVkVnA4SHdDb2RlY1ByZWZpeGVzKSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBz
dGF0aWMgYm9vbGVhbiBpc1ZwOUh3U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdEZWNvZGVy
RGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDlfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZERl
Y29kZXIoVlA5X01JTUVfVFlQRSwgc3VwcG9ydGVkVnA5SHdDb2RlY1ByZWZpeGVzKSAhPSBudWxs
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0gyNjRId1N1cHBvcnRlZCgpIHsK
LSAgICByZXR1cm4gIWh3RGVjb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoSDI2NF9NSU1FX1RZ
UEUpCi0gICAgICAgICYmIChmaW5kRGVjb2RlcihIMjY0X01JTUVfVFlQRSwgc3VwcG9ydGVkSDI2
NEh3Q29kZWNQcmVmaXhlcykgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQg
cHJpbnRTdGFja1RyYWNlKCkgewotICAgIGlmIChydW5uaW5nSW5zdGFuY2UgIT0gbnVsbCAmJiBy
dW5uaW5nSW5zdGFuY2UubWVkaWFDb2RlY1RocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1Ry
YWNlRWxlbWVudFtdIG1lZGlhQ29kZWNTdGFja1RyYWNlcyA9IHJ1bm5pbmdJbnN0YW5jZS5tZWRp
YUNvZGVjVGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChtZWRpYUNvZGVjU3RhY2tU
cmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlciBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFjZUVsZW1l
bnQgc3RhY2tUcmFjZSA6IG1lZGlhQ29kZWNTdGFja1RyYWNlcykgewotICAgICAgICAgIExvZ2dp
bmcuZChUQUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZvciBmaW5kRGVjb2RlcigpIGJlbG93Lgot
ICBwcml2YXRlIHN0YXRpYyBjbGFzcyBEZWNvZGVyUHJvcGVydGllcyB7Ci0gICAgcHVibGljIERl
Y29kZXJQcm9wZXJ0aWVzKFN0cmluZyBjb2RlY05hbWUsIGludCBjb2xvckZvcm1hdCkgewotICAg
ICAgdGhpcy5jb2RlY05hbWUgPSBjb2RlY05hbWU7Ci0gICAgICB0aGlzLmNvbG9yRm9ybWF0ID0g
Y29sb3JGb3JtYXQ7Ci0gICAgfQotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgY29kZWNOYW1lOyAv
LyBPcGVuTWF4IGNvbXBvbmVudCBuYW1lIGZvciBWUDggY29kZWMuCi0gICAgcHVibGljIGZpbmFs
IGludCBjb2xvckZvcm1hdDsgLy8gQ29sb3IgZm9ybWF0IHN1cHBvcnRlZCBieSBjb2RlYy4KLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIERlY29kZXJQcm9wZXJ0aWVzIGZpbmREZWNvZGVyKFN0cmlu
ZyBtaW1lLCBTdHJpbmdbXSBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzKSB7Ci0gICAgaWYgKEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBy
ZXR1cm4gbnVsbDsgLy8gTWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzIGlzIG1pc3NpbmcuCi0gICAg
fQotICAgIExvZ2dpbmcuZChUQUcsICJUcnlpbmcgdG8gZmluZCBIVyBkZWNvZGVyIGZvciBtaW1l
ICIgKyBtaW1lKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1lZGlhQ29kZWNMaXN0LmdldENv
ZGVjQ291bnQoKTsgKytpKSB7Ci0gICAgICBNZWRpYUNvZGVjSW5mbyBpbmZvID0gbnVsbDsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIGluZm8gPSBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0luZm9BdChp
KTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAg
IExvZ2dpbmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZGVjb2RlciBjb2RlYyBpbmZvIiwgZSk7
Ci0gICAgICB9Ci0gICAgICBpZiAoaW5mbyA9PSBudWxsIHx8IGluZm8uaXNFbmNvZGVyKCkpIHsK
LSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0g
ICAgICBmb3IgKFN0cmluZyBtaW1lVHlwZSA6IGluZm8uZ2V0U3VwcG9ydGVkVHlwZXMoKSkgewot
ICAgICAgICBpZiAobWltZVR5cGUuZXF1YWxzKG1pbWUpKSB7Ci0gICAgICAgICAgbmFtZSA9IGlu
Zm8uZ2V0TmFtZSgpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
ICBpZiAobmFtZSA9PSBudWxsKSB7Ci0gICAgICAgIGNvbnRpbnVlOyAvLyBObyBIVyBzdXBwb3J0
IGluIHRoaXMgY29kZWM7IHRyeSB0aGUgbmV4dCBvbmUuCi0gICAgICB9Ci0gICAgICBMb2dnaW5n
LmQoVEFHLCAiRm91bmQgY2FuZGlkYXRlIGRlY29kZXIgIiArIG5hbWUpOwotCi0gICAgICAvLyBD
aGVjayBpZiB0aGlzIGlzIHN1cHBvcnRlZCBkZWNvZGVyLgotICAgICAgYm9vbGVhbiBzdXBwb3J0
ZWRDb2RlYyA9IGZhbHNlOwotICAgICAgZm9yIChTdHJpbmcgY29kZWNQcmVmaXggOiBzdXBwb3J0
ZWRDb2RlY1ByZWZpeGVzKSB7Ci0gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoY29kZWNQcmVm
aXgpKSB7Ci0gICAgICAgICAgc3VwcG9ydGVkQ29kZWMgPSB0cnVlOwotICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAoIXN1cHBvcnRlZENvZGVjKSB7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvLyBDaGVjayBpZiBjb2RlYyBzdXBwb3J0
cyBlaXRoZXIgeXV2NDIwIG9yIG52MTIuCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcyBjYXBhYmls
aXRpZXM7Ci0gICAgICB0cnkgewotICAgICAgICBjYXBhYmlsaXRpZXMgPSBpbmZvLmdldENhcGFi
aWxpdGllc0ZvclR5cGUobWltZSk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNl
cHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2Fubm90IHJldHJpZXZlIGRlY29k
ZXIgY2FwYWJpbGl0aWVzIiwgZSk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAg
Zm9yIChpbnQgY29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3JtYXRzKSB7Ci0gICAg
ICAgIExvZ2dpbmcudihUQUcsICIgICBDb2xvcjogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhj
b2xvckZvcm1hdCkpOwotICAgICAgfQotICAgICAgZm9yIChpbnQgc3VwcG9ydGVkQ29sb3JGb3Jt
YXQgOiBzdXBwb3J0ZWRDb2xvckxpc3QpIHsKLSAgICAgICAgZm9yIChpbnQgY29kZWNDb2xvckZv
cm1hdCA6IGNhcGFiaWxpdGllcy5jb2xvckZvcm1hdHMpIHsKLSAgICAgICAgICBpZiAoY29kZWND
b2xvckZvcm1hdCA9PSBzdXBwb3J0ZWRDb2xvckZvcm1hdCkgewotICAgICAgICAgICAgLy8gRm91
bmQgc3VwcG9ydGVkIEhXIGRlY29kZXIuCi0gICAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRm91
bmQgdGFyZ2V0IGRlY29kZXIgIiArIG5hbWUgKyAiLiBDb2xvcjogMHgiCi0gICAgICAgICAgICAg
ICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhjb2RlY0NvbG9yRm9ybWF0KSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IERlY29kZXJQcm9wZXJ0aWVzKG5hbWUsIGNvZGVjQ29sb3JGb3JtYXQp
OwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBMb2dnaW5nLmQo
VEFHLCAiTm8gSFcgZGVjb2RlciBmb3VuZCBmb3IgbWltZSAiICsgbWltZSk7Ci0gICAgcmV0dXJu
IG51bGw7IC8vIE5vIEhXIGRlY29kZXIuCi0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tPbk1l
ZGlhQ29kZWNUaHJlYWQoKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKLSAgICBpZiAo
bWVkaWFDb2RlY1RocmVhZC5nZXRJZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0SWQo
KSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTWVkaWFDb2RlY1Zp
ZGVvRGVjb2RlciBwcmV2aW91c2x5IG9wZXJhdGVkIG9uICIKLSAgICAgICAgICArIG1lZGlhQ29k
ZWNUaHJlYWQgKyAiIGJ1dCBpcyBub3cgY2FsbGVkIG9uICIgKyBUaHJlYWQuY3VycmVudFRocmVh
ZCgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBQYXNzIG51bGwgaW4gfHN1cmZhY2VUZXh0dXJlSGVs
cGVyfCB0byBjb25maWd1cmUgdGhlIGNvZGVjIGZvciBCeXRlQnVmZmVyIG91dHB1dC4KLSAgcHJp
dmF0ZSBib29sZWFuIGluaXREZWNvZGUoCi0gICAgICBWaWRlb0NvZGVjVHlwZSB0eXBlLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVs
cGVyKSB7Ci0gICAgaWYgKG1lZGlhQ29kZWNUaHJlYWQgIT0gbnVsbCkgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oImluaXREZWNvZGU6IEZvcmdvdCB0byByZWxlYXNlKCk/Iik7
Ci0gICAgfQotCi0gICAgU3RyaW5nIG1pbWUgPSBudWxsOwotICAgIHVzZVN1cmZhY2UgPSAoc3Vy
ZmFjZVRleHR1cmVIZWxwZXIgIT0gbnVsbCk7Ci0gICAgU3RyaW5nW10gc3VwcG9ydGVkQ29kZWNQ
cmVmaXhlcyA9IG51bGw7Ci0gICAgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09E
RUNfVlA4KSB7Ci0gICAgICBtaW1lID0gVlA4X01JTUVfVFlQRTsKLSAgICAgIHN1cHBvcnRlZENv
ZGVjUHJlZml4ZXMgPSBzdXBwb3J0ZWRWcDhId0NvZGVjUHJlZml4ZXM7Ci0gICAgfSBlbHNlIGlm
ICh0eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOSkgewotICAgICAgbWltZSA9
IFZQOV9NSU1FX1RZUEU7Ci0gICAgICBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzID0gc3VwcG9ydGVk
VnA5SHdDb2RlY1ByZWZpeGVzOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBWaWRlb0NvZGVjVHlw
ZS5WSURFT19DT0RFQ19IMjY0KSB7Ci0gICAgICBtaW1lID0gSDI2NF9NSU1FX1RZUEU7Ci0gICAg
ICBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzID0gc3VwcG9ydGVkSDI2NEh3Q29kZWNQcmVmaXhlczsK
LSAgICB9IGVsc2UgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImluaXREZWNv
ZGU6IE5vbi1zdXBwb3J0ZWQgY29kZWMgIiArIHR5cGUpOwotICAgIH0KLSAgICBEZWNvZGVyUHJv
cGVydGllcyBwcm9wZXJ0aWVzID0gZmluZERlY29kZXIobWltZSwgc3VwcG9ydGVkQ29kZWNQcmVm
aXhlcyk7Ci0gICAgaWYgKHByb3BlcnRpZXMgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIkNhbm5vdCBmaW5kIEhXIGRlY29kZXIgZm9yICIgKyB0eXBlKTsKLSAg
ICB9Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSBpbml0RGVjb2RlOiAiICsgdHlwZSArICIg
OiAiICsgd2lkdGggKyAiIHggIiArIGhlaWdodCArICIuIENvbG9yOiAweCIKLSAgICAgICAgICAg
ICsgSW50ZWdlci50b0hleFN0cmluZyhwcm9wZXJ0aWVzLmNvbG9yRm9ybWF0KSArICIuIFVzZSBT
dXJmYWNlOiAiICsgdXNlU3VyZmFjZSk7Ci0KLSAgICBydW5uaW5nSW5zdGFuY2UgPSB0aGlzOyAv
LyBEZWNvZGVyIGlzIG5vdyBydW5uaW5nIGFuZCBjYW4gYmUgcXVlcmllZCBmb3Igc3RhY2sgdHJh
Y2VzLgotICAgIG1lZGlhQ29kZWNUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpOwotICAg
IHRyeSB7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0aGlzLmhlaWdodCA9IGhl
aWdodDsKLSAgICAgIHN0cmlkZSA9IHdpZHRoOwotICAgICAgc2xpY2VIZWlnaHQgPSBoZWlnaHQ7
Ci0KLSAgICAgIGlmICh1c2VTdXJmYWNlKSB7Ci0gICAgICAgIHRleHR1cmVMaXN0ZW5lciA9IG5l
dyBUZXh0dXJlTGlzdGVuZXIoc3VyZmFjZVRleHR1cmVIZWxwZXIpOwotICAgICAgICBzdXJmYWNl
ID0gbmV3IFN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7
Ci0gICAgICB9Ci0KLSAgICAgIE1lZGlhRm9ybWF0IGZvcm1hdCA9IE1lZGlhRm9ybWF0LmNyZWF0
ZVZpZGVvRm9ybWF0KG1pbWUsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgaWYgKCF1c2VTdXJmYWNl
KSB7Ci0gICAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9DT0xPUl9GT1JN
QVQsIHByb3BlcnRpZXMuY29sb3JGb3JtYXQpOwotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRB
RywgIiAgRm9ybWF0OiAiICsgZm9ybWF0KTsKLSAgICAgIG1lZGlhQ29kZWMgPSBNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyLmNyZWF0ZUJ5Q29kZWNOYW1lKHByb3BlcnRpZXMuY29kZWNOYW1lKTsKLSAg
ICAgIGlmIChtZWRpYUNvZGVjID09IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNh
biBub3QgY3JlYXRlIG1lZGlhIGRlY29kZXIiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgfQotICAgICAgbWVkaWFDb2RlYy5jb25maWd1cmUoZm9ybWF0LCBzdXJmYWNlLCBudWxsLCAw
KTsKLSAgICAgIG1lZGlhQ29kZWMuc3RhcnQoKTsKLQotICAgICAgY29sb3JGb3JtYXQgPSBwcm9w
ZXJ0aWVzLmNvbG9yRm9ybWF0OwotICAgICAgb3V0cHV0QnVmZmVycyA9IG1lZGlhQ29kZWMuZ2V0
T3V0cHV0QnVmZmVycygpOwotICAgICAgaW5wdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRJbnB1
dEJ1ZmZlcnMoKTsKLSAgICAgIGRlY29kZVN0YXJ0VGltZU1zLmNsZWFyKCk7Ci0gICAgICBoYXNE
ZWNvZGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgICAgZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVm
ZmVycy5jbGVhcigpOwotICAgICAgZHJvcHBlZEZyYW1lcyA9IDA7Ci0gICAgICBMb2dnaW5nLmQo
VEFHLAotICAgICAgICAgICJJbnB1dCBidWZmZXJzOiAiICsgaW5wdXRCdWZmZXJzLmxlbmd0aCAr
ICIuIE91dHB1dCBidWZmZXJzOiAiICsgb3V0cHV0QnVmZmVycy5sZW5ndGgpOwotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJpbml0RGVjb2RlIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgfQotCi0gIC8vIFJlc2V0cyB0aGUgZGVjb2RlciBzbyBpdCBjYW4gc3Rh
cnQgZGVjb2RpbmcgZnJhbWVzIHdpdGggbmV3IHJlc29sdXRpb24uCi0gIC8vIEZsdXNoZXMgTWVk
aWFDb2RlYyBhbmQgY2xlYXJzIGRlY29kZXIgb3V0cHV0IGJ1ZmZlcnMuCi0gIHByaXZhdGUgdm9p
ZCByZXNldChpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICBpZiAobWVkaWFDb2RlY1RocmVh
ZCA9PSBudWxsIHx8IG1lZGlhQ29kZWMgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRp
bWVFeGNlcHRpb24oIkluY29ycmVjdCByZXNldCBjYWxsIGZvciBub24taW5pdGlhbGl6ZWQgZGVj
b2Rlci4iKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVzZXQ6ICIgKyB3aWR0
aCArICIgeCAiICsgaGVpZ2h0KTsKLQotICAgIG1lZGlhQ29kZWMuZmx1c2goKTsKLQotICAgIHRo
aXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLSAgICBkZWNvZGVT
dGFydFRpbWVNcy5jbGVhcigpOwotICAgIGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuY2xl
YXIoKTsKLSAgICBoYXNEZWNvZGVkRmlyc3RGcmFtZSA9IGZhbHNlOwotICAgIGRyb3BwZWRGcmFt
ZXMgPSAwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgIkphdmEgcmVsZWFzZURlY29kZXIuIFRvdGFsIG51bWJlciBvZiBkcm9wcGVkIGZyYW1l
czogIiArIGRyb3BwZWRGcmFtZXMpOwotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0K
LSAgICAvLyBSdW4gTWVkaWFjb2RlYyBzdG9wKCkgYW5kIHJlbGVhc2UoKSBvbiBzZXBhcmF0ZSB0
aHJlYWQgc2luY2Ugc29tZXRpbWUKLSAgICAvLyBNZWRpYWNvZGVjLnN0b3AoKSBtYXkgaGFuZy4K
LSAgICBmaW5hbCBDb3VudERvd25MYXRjaCByZWxlYXNlRG9uZSA9IG5ldyBDb3VudERvd25MYXRj
aCgxKTsKLQotICAgIFJ1bm5hYmxlIHJ1bk1lZGlhQ29kZWNSZWxlYXNlID0gbmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZURlY29kZXIgb24g
cmVsZWFzZSB0aHJlYWQiKTsKLSAgICAgICAgICBtZWRpYUNvZGVjLnN0b3AoKTsKLSAgICAgICAg
ICBtZWRpYUNvZGVjLnJlbGVhc2UoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSBy
ZWxlYXNlRGVjb2RlciBvbiByZWxlYXNlIHRocmVhZCBkb25lIik7Ci0gICAgICAgIH0gY2F0Y2gg
KEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGRlY29kZXIg
cmVsZWFzZSBmYWlsZWQiLCBlKTsKLSAgICAgICAgfQotICAgICAgICByZWxlYXNlRG9uZS5jb3Vu
dERvd24oKTsKLSAgICAgIH0KLSAgICB9OwotICAgIG5ldyBUaHJlYWQocnVuTWVkaWFDb2RlY1Jl
bGVhc2UpLnN0YXJ0KCk7Ci0KLSAgICBpZiAoIVRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRp
Ymx5KHJlbGVhc2VEb25lLCBNRURJQV9DT0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMpKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAiTWVkaWEgZGVjb2RlciByZWxlYXNlIHRpbWVvdXQiKTsKLSAgICAg
IGNvZGVjRXJyb3JzKys7Ci0gICAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAg
ICAgIExvZ2dpbmcuZShUQUcsICJJbnZva2UgY29kZWMgZXJyb3IgY2FsbGJhY2suIEVycm9yczog
IiArIGNvZGVjRXJyb3JzKTsKLSAgICAgICAgZXJyb3JDYWxsYmFjay5vbk1lZGlhQ29kZWNWaWRl
b0RlY29kZXJDcml0aWNhbEVycm9yKGNvZGVjRXJyb3JzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBtZWRpYUNvZGVjID0gbnVsbDsKLSAgICBtZWRpYUNvZGVjVGhyZWFkID0gbnVsbDsKLSAgICBy
dW5uaW5nSW5zdGFuY2UgPSBudWxsOwotICAgIGlmICh1c2VTdXJmYWNlKSB7Ci0gICAgICBzdXJm
YWNlLnJlbGVhc2UoKTsKLSAgICAgIHN1cmZhY2UgPSBudWxsOwotICAgICAgdGV4dHVyZUxpc3Rl
bmVyLnJlbGVhc2UoKTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZURl
Y29kZXIgZG9uZSIpOwotICB9Ci0KLSAgLy8gRGVxdWV1ZSBhbiBpbnB1dCBidWZmZXIgYW5kIHJl
dHVybiBpdHMgaW5kZXgsIC0xIGlmIG5vIGlucHV0IGJ1ZmZlciBpcwotICAvLyBhdmFpbGFibGUs
IG9yIC0yIGlmIHRoZSBjb2RlYyBpcyBubyBsb25nZXIgb3BlcmF0aXZlLgotICBwcml2YXRlIGlu
dCBkZXF1ZXVlSW5wdXRCdWZmZXIoKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsK
LSAgICB0cnkgewotICAgICAgcmV0dXJuIG1lZGlhQ29kZWMuZGVxdWV1ZUlucHV0QnVmZmVyKERF
UVVFVUVfSU5QVVRfVElNRU9VVCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9u
IGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZXF1ZXVlSW50cHV0QnVmZmVyIGZhaWxlZCIs
IGUpOwotICAgICAgcmV0dXJuIC0yOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBx
dWV1ZUlucHV0QnVmZmVyKGludCBpbnB1dEJ1ZmZlckluZGV4LCBpbnQgc2l6ZSwgbG9uZyBwcmVz
ZW50YXRpb25UaW1lU3RhbVVzLAotICAgICAgbG9uZyB0aW1lU3RhbXBNcywgbG9uZyBudHBUaW1l
U3RhbXApIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIHRyeSB7Ci0gICAg
ICBpbnB1dEJ1ZmZlcnNbaW5wdXRCdWZmZXJJbmRleF0ucG9zaXRpb24oMCk7Ci0gICAgICBpbnB1
dEJ1ZmZlcnNbaW5wdXRCdWZmZXJJbmRleF0ubGltaXQoc2l6ZSk7Ci0gICAgICBkZWNvZGVTdGFy
dFRpbWVNcy5hZGQoCi0gICAgICAgICAgbmV3IFRpbWVTdGFtcHMoU3lzdGVtQ2xvY2suZWxhcHNl
ZFJlYWx0aW1lKCksIHRpbWVTdGFtcE1zLCBudHBUaW1lU3RhbXApKTsKLSAgICAgIG1lZGlhQ29k
ZWMucXVldWVJbnB1dEJ1ZmZlcihpbnB1dEJ1ZmZlckluZGV4LCAwLCBzaXplLCBwcmVzZW50YXRp
b25UaW1lU3RhbVVzLCAwKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZGVjb2RlIGZhaWxl
ZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3Rh
dGljIGNsYXNzIFRpbWVTdGFtcHMgewotICAgIHB1YmxpYyBUaW1lU3RhbXBzKGxvbmcgZGVjb2Rl
U3RhcnRUaW1lTXMsIGxvbmcgdGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0YW1wTXMpIHsKLSAg
ICAgIHRoaXMuZGVjb2RlU3RhcnRUaW1lTXMgPSBkZWNvZGVTdGFydFRpbWVNczsKLSAgICAgIHRo
aXMudGltZVN0YW1wTXMgPSB0aW1lU3RhbXBNczsKLSAgICAgIHRoaXMubnRwVGltZVN0YW1wTXMg
PSBudHBUaW1lU3RhbXBNczsKLSAgICB9Ci0gICAgLy8gVGltZSB3aGVuIHRoaXMgZnJhbWUgd2Fz
IHF1ZXVlZCBmb3IgZGVjb2RpbmcuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIGRlY29kZVN0YXJ0
VGltZU1zOwotICAgIC8vIE9ubHkgdXNlZCBmb3IgYm9va2tlZXBpbmcgaW4gSmF2YS4gU3RvcmVz
IEMrKyBpbnB1dEltYWdlLl90aW1lU3RhbXAgdmFsdWUgZm9yIGlucHV0IGZyYW1lLgotICAgIHBy
aXZhdGUgZmluYWwgbG9uZyB0aW1lU3RhbXBNczsKLSAgICAvLyBPbmx5IHVzZWQgZm9yIGJvb2tr
ZWVwaW5nIGluIEphdmEuIFN0b3JlcyBDKysgaW5wdXRJbWFnZS5udHBfdGltZV9tc18gdmFsdWUg
Zm9yIGlucHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBudHBUaW1lU3RhbXBNczsK
LSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGRlcXVldWVPdXRwdXRCdWZmZXIoKSBiZWxv
dy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRGVjb2RlZE91dHB1dEJ1ZmZlciB7Ci0gICAgcHVi
bGljIERlY29kZWRPdXRwdXRCdWZmZXIoaW50IGluZGV4LCBpbnQgb2Zmc2V0LCBpbnQgc2l6ZSwg
bG9uZyBwcmVzZW50YXRpb25UaW1lU3RhbXBNcywKLSAgICAgICAgbG9uZyB0aW1lU3RhbXBNcywg
bG9uZyBudHBUaW1lU3RhbXBNcywgbG9uZyBkZWNvZGVUaW1lLCBsb25nIGVuZERlY29kZVRpbWUp
IHsKLSAgICAgIHRoaXMuaW5kZXggPSBpbmRleDsKLSAgICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0
OwotICAgICAgdGhpcy5zaXplID0gc2l6ZTsKLSAgICAgIHRoaXMucHJlc2VudGF0aW9uVGltZVN0
YW1wTXMgPSBwcmVzZW50YXRpb25UaW1lU3RhbXBNczsKLSAgICAgIHRoaXMudGltZVN0YW1wTXMg
PSB0aW1lU3RhbXBNczsKLSAgICAgIHRoaXMubnRwVGltZVN0YW1wTXMgPSBudHBUaW1lU3RhbXBN
czsKLSAgICAgIHRoaXMuZGVjb2RlVGltZU1zID0gZGVjb2RlVGltZTsKLSAgICAgIHRoaXMuZW5k
RGVjb2RlVGltZU1zID0gZW5kRGVjb2RlVGltZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGZpbmFs
IGludCBpbmRleDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBvZmZzZXQ7Ci0gICAgcHJpdmF0ZSBm
aW5hbCBpbnQgc2l6ZTsKLSAgICAvLyBQcmVzZW50YXRpb24gdGltZXN0YW1wIHJldHVybmVkIGlu
IGRlcXVldWVPdXRwdXRCdWZmZXIgY2FsbC4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgcHJlc2Vu
dGF0aW9uVGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UuX3RpbWVTdGFtcCB2YWx1
ZSBmb3Igb3V0cHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyB0aW1lU3RhbXBNczsK
LSAgICAvLyBDKysgaW5wdXRJbWFnZS5udHBfdGltZV9tc18gdmFsdWUgZm9yIG91dHB1dCBmcmFt
ZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgbnRwVGltZVN0YW1wTXM7Ci0gICAgLy8gTnVtYmVy
IG9mIG1zIGl0IHRvb2sgdG8gZGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBs
b25nIGRlY29kZVRpbWVNczsKLSAgICAvLyBTeXN0ZW0gdGltZSB3aGVuIHRoaXMgZnJhbWUgZGVj
b2RpbmcgZmluaXNoZWQuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIGVuZERlY29kZVRpbWVNczsK
LSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGRlcXVldWVUZXh0dXJlQnVmZmVyKCkgYmVs
b3cuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIERlY29kZWRUZXh0dXJlQnVmZmVyIHsKLSAgICBw
cml2YXRlIGZpbmFsIGludCB0ZXh0dXJlSUQ7Ci0gICAgcHJpdmF0ZSBmaW5hbCBmbG9hdFtdIHRy
YW5zZm9ybU1hdHJpeDsKLSAgICAvLyBQcmVzZW50YXRpb24gdGltZXN0YW1wIHJldHVybmVkIGlu
IGRlcXVldWVPdXRwdXRCdWZmZXIgY2FsbC4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgcHJlc2Vu
dGF0aW9uVGltZVN0YW1wTXM7Ci0gICAgLy8gQysrIGlucHV0SW1hZ2UuX3RpbWVTdGFtcCB2YWx1
ZSBmb3Igb3V0cHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyB0aW1lU3RhbXBNczsK
LSAgICAvLyBDKysgaW5wdXRJbWFnZS5udHBfdGltZV9tc18gdmFsdWUgZm9yIG91dHB1dCBmcmFt
ZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgbnRwVGltZVN0YW1wTXM7Ci0gICAgLy8gTnVtYmVy
IG9mIG1zIGl0IHRvb2sgdG8gZGVjb2RlIHRoaXMgZnJhbWUuCi0gICAgcHJpdmF0ZSBmaW5hbCBs
b25nIGRlY29kZVRpbWVNczsKLSAgICAvLyBJbnRlcnZhbCBmcm9tIHdoZW4gdGhlIGZyYW1lIGZp
bmlzaGVkIGRlY29kaW5nIHVudGlsIHRoaXMgYnVmZmVyIGhhcyBiZWVuIGNyZWF0ZWQuCi0gICAg
Ly8gU2luY2UgdGhlcmUgaXMgb25seSBvbmUgdGV4dHVyZSwgdGhpcyBpbnRlcnZhbCBkZXBlbmQg
b24gdGhlIHRpbWUgZnJvbSB3aGVuCi0gICAgLy8gYSBmcmFtZSBpcyBkZWNvZGVkIGFuZCBwcm92
aWRlZCB0byBDKysgYW5kIHVudGlsIHRoYXQgZnJhbWUgaXMgcmV0dXJuZWQgdG8gdGhlIE1lZGlh
Q29kZWMKLSAgICAvLyBzbyB0aGF0IHRoZSB0ZXh0dXJlIGNhbiBiZSB1cGRhdGVkIHdpdGggdGhl
IG5leHQgZGVjb2RlZCBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgZnJhbWVEZWxheU1z
OwotCi0gICAgLy8gQSBEZWNvZGVkVGV4dHVyZUJ1ZmZlciB3aXRoIHplcm8gfHRleHR1cmVJRHwg
aGFzIHNwZWNpYWwgbWVhbmluZyBhbmQgcmVwcmVzZW50cyBhIGZyYW1lCi0gICAgLy8gdGhhdCB3
YXMgZHJvcHBlZC4KLSAgICBwdWJsaWMgRGVjb2RlZFRleHR1cmVCdWZmZXIoaW50IHRleHR1cmVJ
RCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsCi0gICAgICAgIGxvbmcgcHJlc2VudGF0aW9uVGlt
ZVN0YW1wTXMsIGxvbmcgdGltZVN0YW1wTXMsIGxvbmcgbnRwVGltZVN0YW1wTXMsIGxvbmcgZGVj
b2RlVGltZU1zLAotICAgICAgICBsb25nIGZyYW1lRGVsYXkpIHsKLSAgICAgIHRoaXMudGV4dHVy
ZUlEID0gdGV4dHVyZUlEOwotICAgICAgdGhpcy50cmFuc2Zvcm1NYXRyaXggPSB0cmFuc2Zvcm1N
YXRyaXg7Ci0gICAgICB0aGlzLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zID0gcHJlc2VudGF0aW9u
VGltZVN0YW1wTXM7Ci0gICAgICB0aGlzLnRpbWVTdGFtcE1zID0gdGltZVN0YW1wTXM7Ci0gICAg
ICB0aGlzLm50cFRpbWVTdGFtcE1zID0gbnRwVGltZVN0YW1wTXM7Ci0gICAgICB0aGlzLmRlY29k
ZVRpbWVNcyA9IGRlY29kZVRpbWVNczsKLSAgICAgIHRoaXMuZnJhbWVEZWxheU1zID0gZnJhbWVE
ZWxheTsKLSAgICB9Ci0gIH0KLQotICAvLyBQb2xsIGJhc2VkIHRleHR1cmUgbGlzdGVuZXIuCi0g
IHByaXZhdGUgc3RhdGljIGNsYXNzIFRleHR1cmVMaXN0ZW5lcgotICAgICAgaW1wbGVtZW50cyBT
dXJmYWNlVGV4dHVyZUhlbHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHsKLSAg
ICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVy
OwotICAgIC8vIHxuZXdGcmFtZUxvY2t8IGlzIHVzZWQgdG8gc3luY2hyb25pemUgYXJyaXZhbCBv
ZiBuZXcgZnJhbWVzIHdpdGggd2FpdCgpL25vdGlmeUFsbCgpLgotICAgIHByaXZhdGUgZmluYWwg
T2JqZWN0IG5ld0ZyYW1lTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICAvLyB8YnVmZmVyVG9SZW5k
ZXJ8IGlzIG5vbi1udWxsIHdoZW4gd2FpdGluZyBmb3IgdHJhbnNpdGlvbiBiZXR3ZWVuIGFkZEJ1
ZmZlclRvUmVuZGVyKCkgdG8KLSAgICAvLyBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAg
IHByaXZhdGUgRGVjb2RlZE91dHB1dEJ1ZmZlciBidWZmZXJUb1JlbmRlcjsKLSAgICBwcml2YXRl
IERlY29kZWRUZXh0dXJlQnVmZmVyIHJlbmRlcmVkQnVmZmVyOwotCi0gICAgcHVibGljIFRleHR1
cmVMaXN0ZW5lcihTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcikgewot
ICAgICAgdGhpcy5zdXJmYWNlVGV4dHVyZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwot
ICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcodGhpcyk7Ci0gICAgfQot
Ci0gICAgcHVibGljIHZvaWQgYWRkQnVmZmVyVG9SZW5kZXIoRGVjb2RlZE91dHB1dEJ1ZmZlciBi
dWZmZXIpIHsKLSAgICAgIGlmIChidWZmZXJUb1JlbmRlciAhPSBudWxsKSB7Ci0gICAgICAgIExv
Z2dpbmcuZShUQUcsICJVbmV4cGVjdGVkIGFkZEJ1ZmZlclRvUmVuZGVyKCkgY2FsbGVkIHdoaWxl
IHdhaXRpbmcgZm9yIGEgdGV4dHVyZS4iKTsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigiV2FpdGluZyBmb3IgYSB0ZXh0dXJlLiIpOwotICAgICAgfQotICAgICAgYnVm
ZmVyVG9SZW5kZXIgPSBidWZmZXI7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNXYWl0
aW5nRm9yVGV4dHVyZSgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0g
ICAgICAgIHJldHVybiBidWZmZXJUb1JlbmRlciAhPSBudWxsOwotICAgICAgfQotICAgIH0KLQot
ICAgIC8vIENhbGxiYWNrIGZyb20gfHN1cmZhY2VUZXh0dXJlSGVscGVyfC4gTWF5IGJlIGNhbGxl
ZCBvbiBhbiBhcmJpdHJhcnkgdGhyZWFkLgotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9h
dFtdIHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgICAgc3luY2hyb25p
emVkIChuZXdGcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlcmVkQnVmZmVyICE9IG51bGwp
IHsKLSAgICAgICAgICBMb2dnaW5nLmUoCi0gICAgICAgICAgICAgIFRBRywgIlVuZXhwZWN0ZWQg
b25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBjYWxsZWQgd2hpbGUgYWxyZWFkeSBob2xkaW5nIGEg
dGV4dHVyZS4iKTsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJB
bHJlYWR5IGhvbGRpbmcgYSB0ZXh0dXJlLiIpOwotICAgICAgICB9Ci0gICAgICAgIC8vIHx0aW1l
c3RhbXBOc3wgaXMgYWx3YXlzIHplcm8gb24gc29tZSBBbmRyb2lkIHZlcnNpb25zLgotICAgICAg
ICByZW5kZXJlZEJ1ZmZlciA9IG5ldyBEZWNvZGVkVGV4dHVyZUJ1ZmZlcihvZXNUZXh0dXJlSWQs
IHRyYW5zZm9ybU1hdHJpeCwKLSAgICAgICAgICAgIGJ1ZmZlclRvUmVuZGVyLnByZXNlbnRhdGlv
blRpbWVTdGFtcE1zLCBidWZmZXJUb1JlbmRlci50aW1lU3RhbXBNcywKLSAgICAgICAgICAgIGJ1
ZmZlclRvUmVuZGVyLm50cFRpbWVTdGFtcE1zLCBidWZmZXJUb1JlbmRlci5kZWNvZGVUaW1lTXMs
Ci0gICAgICAgICAgICBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIGJ1ZmZlclRvUmVu
ZGVyLmVuZERlY29kZVRpbWVNcyk7Ci0gICAgICAgIGJ1ZmZlclRvUmVuZGVyID0gbnVsbDsKLSAg
ICAgICAgbmV3RnJhbWVMb2NrLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIC8v
IERlcXVldWVzIGFuZCByZXR1cm5zIGEgRGVjb2RlZFRleHR1cmVCdWZmZXIgaWYgYXZhaWxhYmxl
LCBvciBudWxsIG90aGVyd2lzZS4KLSAgICBwdWJsaWMgRGVjb2RlZFRleHR1cmVCdWZmZXIgZGVx
dWV1ZVRleHR1cmVCdWZmZXIoaW50IHRpbWVvdXRNcykgewotICAgICAgc3luY2hyb25pemVkIChu
ZXdGcmFtZUxvY2spIHsKLSAgICAgICAgaWYgKHJlbmRlcmVkQnVmZmVyID09IG51bGwgJiYgdGlt
ZW91dE1zID4gMCAmJiBpc1dhaXRpbmdGb3JUZXh0dXJlKCkpIHsKLSAgICAgICAgICB0cnkgewot
ICAgICAgICAgICAgbmV3RnJhbWVMb2NrLndhaXQodGltZW91dE1zKTsKLSAgICAgICAgICB9IGNh
dGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBSZXN0b3JlIHRo
ZSBpbnRlcnJ1cHRlZCBzdGF0dXMgYnkgcmVpbnRlcnJ1cHRpbmcgdGhlIHRocmVhZC4KLSAgICAg
ICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuaW50ZXJydXB0KCk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIERlY29kZWRUZXh0dXJlQnVmZmVyIHJldHVybmVkQnVmZmVyID0g
cmVuZGVyZWRCdWZmZXI7Ci0gICAgICAgIHJlbmRlcmVkQnVmZmVyID0gbnVsbDsKLSAgICAgICAg
cmV0dXJuIHJldHVybmVkQnVmZmVyOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IHJlbGVhc2UoKSB7Ci0gICAgICAvLyBTdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5n
KCkgd2lsbCBibG9jayB1bnRpbCBhbnkgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBpbgotICAg
ICAgLy8gcHJvZ3Jlc3MgaXMgZG9uZS4gVGhlcmVmb3JlLCB0aGUgY2FsbCBtdXN0IGJlIG91dHNp
ZGUgYW55IHN5bmNocm9uaXplZAotICAgICAgLy8gc3RhdGVtZW50IHRoYXQgaXMgYWxzbyB1c2Vk
IGluIHRoZSBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGFib3ZlIHRvIGF2b2lkIGRlYWRsb2Nr
cy4KLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLSAgICAgIHN5
bmNocm9uaXplZCAobmV3RnJhbWVMb2NrKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlZEJ1ZmZlciAh
PSBudWxsKSB7Ci0gICAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZy
YW1lKCk7Ci0gICAgICAgICAgcmVuZGVyZWRCdWZmZXIgPSBudWxsOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyBudWxsIGlmIG5vIGRlY29kZWQgYnVmZmVy
IGlzIGF2YWlsYWJsZSwgYW5kIG90aGVyd2lzZSBhIERlY29kZWRCeXRlQnVmZmVyLgotICAvLyBU
aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIGNhbGwgaXMgbWFkZSBvbiB0aGUgd3Jvbmcg
dGhyZWFkLCBpZiBjb2xvciBmb3JtYXQgY2hhbmdlcyB0byBhbgotICAvLyB1bnN1cHBvcnRlZCBm
b3JtYXQsIG9yIGlmIHxtZWRpYUNvZGVjfCBpcyBub3QgaW4gdGhlIEV4ZWN1dGluZyBzdGF0ZS4g
VGhyb3dzIENvZGVjRXhjZXB0aW9uCi0gIC8vIHVwb24gY29kZWMgZXJyb3IuCi0gIHByaXZhdGUg
RGVjb2RlZE91dHB1dEJ1ZmZlciBkZXF1ZXVlT3V0cHV0QnVmZmVyKGludCBkZXF1ZXVlVGltZW91
dE1zKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICBpZiAoZGVjb2RlU3Rh
cnRUaW1lTXMuaXNFbXB0eSgpKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgLy8g
RHJhaW4gdGhlIGRlY29kZXIgdW50aWwgcmVjZWl2aW5nIGEgZGVjb2RlZCBidWZmZXIgb3IgaGl0
dGluZwotICAgIC8vIE1lZGlhQ29kZWMuSU5GT19UUllfQUdBSU5fTEFURVIuCi0gICAgZmluYWwg
TWVkaWFDb2RlYy5CdWZmZXJJbmZvIGluZm8gPSBuZXcgTWVkaWFDb2RlYy5CdWZmZXJJbmZvKCk7
Ci0gICAgd2hpbGUgKHRydWUpIHsKLSAgICAgIGZpbmFsIGludCByZXN1bHQgPQotICAgICAgICAg
IG1lZGlhQ29kZWMuZGVxdWV1ZU91dHB1dEJ1ZmZlcihpbmZvLCBUaW1lVW5pdC5NSUxMSVNFQ09O
RFMudG9NaWNyb3MoZGVxdWV1ZVRpbWVvdXRNcykpOwotICAgICAgc3dpdGNoIChyZXN1bHQpIHsK
LSAgICAgICAgY2FzZSBNZWRpYUNvZGVjLklORk9fT1VUUFVUX0JVRkZFUlNfQ0hBTkdFRDoKLSAg
ICAgICAgICBvdXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRCdWZmZXJzKCk7Ci0g
ICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkRlY29kZXIgb3V0cHV0IGJ1ZmZlcnMgY2hhbmdlZDog
IiArIG91dHB1dEJ1ZmZlcnMubGVuZ3RoKTsKLSAgICAgICAgICBpZiAoaGFzRGVjb2RlZEZpcnN0
RnJhbWUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVj
dGVkIG91dHB1dCBidWZmZXIgY2hhbmdlIGV2ZW50LiIpOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBNZWRpYUNvZGVjLklORk9fT1VUUFVUX0ZPUk1BVF9DSEFO
R0VEOgotICAgICAgICAgIE1lZGlhRm9ybWF0IGZvcm1hdCA9IG1lZGlhQ29kZWMuZ2V0T3V0cHV0
Rm9ybWF0KCk7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkRlY29kZXIgZm9ybWF0IGNoYW5n
ZWQ6ICIgKyBmb3JtYXQudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaW50IG5ld193aWR0aCA9IGZv
cm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9XSURUSCk7Ci0gICAgICAgICAgaW50IG5l
d19oZWlnaHQgPSBmb3JtYXQuZ2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfSEVJR0hUKTsKLSAg
ICAgICAgICBpZiAoaGFzRGVjb2RlZEZpcnN0RnJhbWUgJiYgKG5ld193aWR0aCAhPSB3aWR0aCB8
fCBuZXdfaGVpZ2h0ICE9IGhlaWdodCkpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1l
RXhjZXB0aW9uKCJVbmV4cGVjdGVkIHNpemUgY2hhbmdlLiBDb25maWd1cmVkICIgKyB3aWR0aCAr
ICIqIiArIGhlaWdodAotICAgICAgICAgICAgICAgICsgIi4gTmV3ICIgKyBuZXdfd2lkdGggKyAi
KiIgKyBuZXdfaGVpZ2h0KTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgd2lkdGggPSBmb3JtYXQu
Z2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfV0lEVEgpOwotICAgICAgICAgIGhlaWdodCA9IGZv
cm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9IRUlHSFQpOwotCi0gICAgICAgICAgaWYg
KCF1c2VTdXJmYWNlICYmIGZvcm1hdC5jb250YWluc0tleShNZWRpYUZvcm1hdC5LRVlfQ09MT1Jf
Rk9STUFUKSkgewotICAgICAgICAgICAgY29sb3JGb3JtYXQgPSBmb3JtYXQuZ2V0SW50ZWdlcihN
ZWRpYUZvcm1hdC5LRVlfQ09MT1JfRk9STUFUKTsKLSAgICAgICAgICAgIExvZ2dpbmcuZChUQUcs
ICJDb2xvcjogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhjb2xvckZvcm1hdCkpOwotICAgICAg
ICAgICAgaWYgKCFzdXBwb3J0ZWRDb2xvckxpc3QuY29udGFpbnMoY29sb3JGb3JtYXQpKSB7Ci0g
ICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vbiBzdXBwb3J0
ZWQgY29sb3IgZm9ybWF0OiAiICsgY29sb3JGb3JtYXQpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0KLSAgICAgICAgICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KCJzdHJpZGUiKSkgewotICAg
ICAgICAgICAgc3RyaWRlID0gZm9ybWF0LmdldEludGVnZXIoInN0cmlkZSIpOwotICAgICAgICAg
IH0KLSAgICAgICAgICBpZiAoZm9ybWF0LmNvbnRhaW5zS2V5KCJzbGljZS1oZWlnaHQiKSkgewot
ICAgICAgICAgICAgc2xpY2VIZWlnaHQgPSBmb3JtYXQuZ2V0SW50ZWdlcigic2xpY2UtaGVpZ2h0
Iik7Ci0gICAgICAgICAgfQotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJGcmFtZSBzdHJpZGUg
YW5kIHNsaWNlIGhlaWdodDogIiArIHN0cmlkZSArICIgeCAiICsgc2xpY2VIZWlnaHQpOwotICAg
ICAgICAgIHN0cmlkZSA9IE1hdGgubWF4KHdpZHRoLCBzdHJpZGUpOwotICAgICAgICAgIHNsaWNl
SGVpZ2h0ID0gTWF0aC5tYXgoaGVpZ2h0LCBzbGljZUhlaWdodCk7Ci0gICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgTWVkaWFDb2RlYy5JTkZPX1RSWV9BR0FJTl9MQVRFUjoKLSAgICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBoYXNEZWNvZGVkRmly
c3RGcmFtZSA9IHRydWU7Ci0gICAgICAgICAgVGltZVN0YW1wcyB0aW1lU3RhbXBzID0gZGVjb2Rl
U3RhcnRUaW1lTXMucmVtb3ZlKCk7Ci0gICAgICAgICAgbG9uZyBkZWNvZGVUaW1lTXMgPSBTeXN0
ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIHRpbWVTdGFtcHMuZGVjb2RlU3RhcnRUaW1lTXM7
Ci0gICAgICAgICAgaWYgKGRlY29kZVRpbWVNcyA+IE1BWF9ERUNPREVfVElNRV9NUykgewotICAg
ICAgICAgICAgTG9nZ2luZy5lKFRBRywgIlZlcnkgaGlnaCBkZWNvZGUgdGltZTogIiArIGRlY29k
ZVRpbWVNcyArICJtcyIKLSAgICAgICAgICAgICAgICAgICAgKyAiLiBRIHNpemU6ICIgKyBkZWNv
ZGVTdGFydFRpbWVNcy5zaXplKCkKLSAgICAgICAgICAgICAgICAgICAgKyAiLiBNaWdodCBiZSBj
YXVzZWQgYnkgcmVzdW1pbmcgSDI2NCBkZWNvZGluZyBhZnRlciBhIHBhdXNlLiIpOwotICAgICAg
ICAgICAgZGVjb2RlVGltZU1zID0gTUFYX0RFQ09ERV9USU1FX01TOwotICAgICAgICAgIH0KLSAg
ICAgICAgICByZXR1cm4gbmV3IERlY29kZWRPdXRwdXRCdWZmZXIocmVzdWx0LCBpbmZvLm9mZnNl
dCwgaW5mby5zaXplLAotICAgICAgICAgICAgICBUaW1lVW5pdC5NSUNST1NFQ09ORFMudG9NaWxs
aXMoaW5mby5wcmVzZW50YXRpb25UaW1lVXMpLCB0aW1lU3RhbXBzLnRpbWVTdGFtcE1zLAotICAg
ICAgICAgICAgICB0aW1lU3RhbXBzLm50cFRpbWVTdGFtcE1zLCBkZWNvZGVUaW1lTXMsIFN5c3Rl
bUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBS
ZXR1cm5zIG51bGwgaWYgbm8gZGVjb2RlZCBidWZmZXIgaXMgYXZhaWxhYmxlLCBhbmQgb3RoZXJ3
aXNlIGEgRGVjb2RlZFRleHR1cmVCdWZmZXIuCi0gIC8vIFRocm93cyBJbGxlZ2FsU3RhdGVFeGNl
cHRpb24gaWYgY2FsbCBpcyBtYWRlIG9uIHRoZSB3cm9uZyB0aHJlYWQsIGlmIGNvbG9yIGZvcm1h
dCBjaGFuZ2VzIHRvIGFuCi0gIC8vIHVuc3VwcG9ydGVkIGZvcm1hdCwgb3IgaWYgfG1lZGlhQ29k
ZWN8IGlzIG5vdCBpbiB0aGUgRXhlY3V0aW5nIHN0YXRlLiBUaHJvd3MgQ29kZWNFeGNlcHRpb24K
LSAgLy8gdXBvbiBjb2RlYyBlcnJvci4gSWYgfGRlcXVldWVUaW1lb3V0TXN8ID4gMCwgdGhlIG9s
ZGVzdCBkZWNvZGVkIGZyYW1lIHdpbGwgYmUgZHJvcHBlZCBpZgotICAvLyBhIGZyYW1lIGNhbid0
IGJlIHJldHVybmVkLgotICBwcml2YXRlIERlY29kZWRUZXh0dXJlQnVmZmVyIGRlcXVldWVUZXh0
dXJlQnVmZmVyKGludCBkZXF1ZXVlVGltZW91dE1zKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNU
aHJlYWQoKTsKLSAgICBpZiAoIXVzZVN1cmZhY2UpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
U3RhdGVFeGNlcHRpb24oImRlcXVldWVUZXh0dXJlKCkgY2FsbGVkIGZvciBieXRlIGJ1ZmZlciBk
ZWNvZGluZy4iKTsKLSAgICB9Ci0gICAgRGVjb2RlZE91dHB1dEJ1ZmZlciBvdXRwdXRCdWZmZXIg
PSBkZXF1ZXVlT3V0cHV0QnVmZmVyKGRlcXVldWVUaW1lb3V0TXMpOwotICAgIGlmIChvdXRwdXRC
dWZmZXIgIT0gbnVsbCkgewotICAgICAgZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5hZGQo
b3V0cHV0QnVmZmVyKTsKLSAgICB9Ci0KLSAgICBNYXliZVJlbmRlckRlY29kZWRUZXh0dXJlQnVm
ZmVyKCk7Ci0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgdGV4dHVyZSByZWFkeSBub3cgYnkgd2Fp
dGluZyBtYXggfGRlcXVldWVUaW1lb3V0TXN8LgotICAgIERlY29kZWRUZXh0dXJlQnVmZmVyIHJl
bmRlcmVkQnVmZmVyID0gdGV4dHVyZUxpc3RlbmVyLmRlcXVldWVUZXh0dXJlQnVmZmVyKGRlcXVl
dWVUaW1lb3V0TXMpOwotICAgIGlmIChyZW5kZXJlZEJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICBN
YXliZVJlbmRlckRlY29kZWRUZXh0dXJlQnVmZmVyKCk7Ci0gICAgICByZXR1cm4gcmVuZGVyZWRC
dWZmZXI7Ci0gICAgfQotCi0gICAgaWYgKChkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLnNp
emUoKQotICAgICAgICAgICAgICAgID49IE1hdGgubWluKE1BWF9RVUVVRURfT1VUUFVUQlVGRkVS
Uywgb3V0cHV0QnVmZmVycy5sZW5ndGgpCi0gICAgICAgICAgICB8fCAoZGVxdWV1ZVRpbWVvdXRN
cyA+IDAgJiYgIWRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuaXNFbXB0eSgpKSkpIHsKLSAg
ICAgICsrZHJvcHBlZEZyYW1lczsKLSAgICAgIC8vIERyb3AgdGhlIG9sZGVzdCBmcmFtZSBzdGls
bCBpbiBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLgotICAgICAgLy8gVGhlIG9sZGVzdCBm
cmFtZSBpcyBvd25lZCBieSB8dGV4dHVyZUxpc3RlbmVyfCBhbmQgY2FuJ3QgYmUgZHJvcHBlZCBz
aW5jZQotICAgICAgLy8gbWVkaWFDb2RlYy5yZWxlYXNlT3V0cHV0QnVmZmVyIGhhcyBhbHJlYWR5
IGJlZW4gY2FsbGVkLgotICAgICAgZmluYWwgRGVjb2RlZE91dHB1dEJ1ZmZlciBkcm9wcGVkRnJh
bWUgPSBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLnJlbW92ZSgpOwotICAgICAgaWYgKGRl
cXVldWVUaW1lb3V0TXMgPiAwKSB7Ci0gICAgICAgIC8vIFRPRE8ocGVya2opOiBSZS1hZGQgdGhl
IGJlbG93IGxvZyB3aGVuIFZpZGVvUmVuZGVyR1VJIGhhcyBiZWVuIHJlbW92ZWQgb3IgZml4ZWQg
dG8KLSAgICAgICAgLy8gcmV0dXJuIHRoZSBvbmUgYW5kIG9ubHkgdGV4dHVyZSBldmVuIGlmIGl0
IGRvZXMgbm90IHJlbmRlci4KLSAgICAgICAgTG9nZ2luZy53KFRBRywgIkRyYWluaW5nIGRlY29k
ZXIuIERyb3BwaW5nIGZyYW1lIHdpdGggVFM6ICIKLSAgICAgICAgICAgICAgICArIGRyb3BwZWRG
cmFtZS5wcmVzZW50YXRpb25UaW1lU3RhbXBNcyArICIuIFRvdGFsIG51bWJlciBvZiBkcm9wcGVk
IGZyYW1lczogIgotICAgICAgICAgICAgICAgICsgZHJvcHBlZEZyYW1lcyk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiVG9vIG1hbnkgb3V0cHV0IGJ1ZmZlcnMgIiAr
IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuc2l6ZSgpCi0gICAgICAgICAgICAgICAgKyAi
LiBEcm9wcGluZyBmcmFtZSB3aXRoIFRTOiAiICsgZHJvcHBlZEZyYW1lLnByZXNlbnRhdGlvblRp
bWVTdGFtcE1zCi0gICAgICAgICAgICAgICAgKyAiLiBUb3RhbCBudW1iZXIgb2YgZHJvcHBlZCBm
cmFtZXM6ICIgKyBkcm9wcGVkRnJhbWVzKTsKLSAgICAgIH0KLQotICAgICAgbWVkaWFDb2RlYy5y
ZWxlYXNlT3V0cHV0QnVmZmVyKGRyb3BwZWRGcmFtZS5pbmRleCwgZmFsc2UgLyogcmVuZGVyICov
KTsKLSAgICAgIHJldHVybiBuZXcgRGVjb2RlZFRleHR1cmVCdWZmZXIoMCwgbnVsbCwgZHJvcHBl
ZEZyYW1lLnByZXNlbnRhdGlvblRpbWVTdGFtcE1zLAotICAgICAgICAgIGRyb3BwZWRGcmFtZS50
aW1lU3RhbXBNcywgZHJvcHBlZEZyYW1lLm50cFRpbWVTdGFtcE1zLCBkcm9wcGVkRnJhbWUuZGVj
b2RlVGltZU1zLAotICAgICAgICAgIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gZHJv
cHBlZEZyYW1lLmVuZERlY29kZVRpbWVNcyk7Ci0gICAgfQotICAgIHJldHVybiBudWxsOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIE1heWJlUmVuZGVyRGVjb2RlZFRleHR1cmVCdWZmZXIoKSB7Ci0g
ICAgaWYgKGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuaXNFbXB0eSgpIHx8IHRleHR1cmVM
aXN0ZW5lci5pc1dhaXRpbmdGb3JUZXh0dXJlKCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgLy8gR2V0IHRoZSBmaXJzdCBmcmFtZSBpbiB0aGUgcXVldWUgYW5kIHJlbmRlciB0byB0aGUg
ZGVjb2RlciBvdXRwdXQgc3VyZmFjZS4KLSAgICBmaW5hbCBEZWNvZGVkT3V0cHV0QnVmZmVyIGJ1
ZmZlciA9IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMucmVtb3ZlKCk7Ci0gICAgdGV4dHVy
ZUxpc3RlbmVyLmFkZEJ1ZmZlclRvUmVuZGVyKGJ1ZmZlcik7Ci0gICAgbWVkaWFDb2RlYy5yZWxl
YXNlT3V0cHV0QnVmZmVyKGJ1ZmZlci5pbmRleCwgdHJ1ZSAvKiByZW5kZXIgKi8pOwotICB9Ci0K
LSAgLy8gUmVsZWFzZSBhIGRlcXVldWVkIG91dHB1dCBieXRlIGJ1ZmZlciBiYWNrIHRvIHRoZSBj
b2RlYyBmb3IgcmUtdXNlLiBTaG91bGQgb25seSBiZSBjYWxsZWQgZm9yCi0gIC8vIG5vbi1zdXJm
YWNlIGRlY29kaW5nLgotICAvLyBUaHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoZSBj
YWxsIGlzIG1hZGUgb24gdGhlIHdyb25nIHRocmVhZCwgaWYgY29kZWMgaXMgY29uZmlndXJlZAot
ICAvLyBmb3Igc3VyZmFjZSBkZWNvZGluZywgb3IgaWYgfG1lZGlhQ29kZWN8IGlzIG5vdCBpbiB0
aGUgRXhlY3V0aW5nIHN0YXRlLiBUaHJvd3MKLSAgLy8gTWVkaWFDb2RlYy5Db2RlY0V4Y2VwdGlv
biB1cG9uIGNvZGVjIGVycm9yLgotICBwcml2YXRlIHZvaWQgcmV0dXJuRGVjb2RlZE91dHB1dEJ1
ZmZlcihpbnQgaW5kZXgpCi0gICAgICB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLCBNZWRp
YUNvZGVjLkNvZGVjRXhjZXB0aW9uIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwot
ICAgIGlmICh1c2VTdXJmYWNlKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0
aW9uKCJyZXR1cm5EZWNvZGVkT3V0cHV0QnVmZmVyKCkgY2FsbGVkIGZvciBzdXJmYWNlIGRlY29k
aW5nLiIpOwotICAgIH0KLSAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgs
IGZhbHNlIC8qIHJlbmRlciAqLyk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVk
aWFDb2RlY1ZpZGVvRW5jb2Rlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDczOCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQubWVk
aWEuTWVkaWFDb2RlYzsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNJbmZvOwotaW1w
b3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm8uQ29kZWNDYXBhYmlsaXRpZXM7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjTGlzdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1l
ZGlhRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lk
Lm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudmll
dy5TdXJmYWNlOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0
aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5M
aXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQu
Q291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0K
LS8vIEphdmEtc2lkZSBvZiBwZWVyY29ubmVjdGlvbl9qbmkuY2M6TWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlci4KLS8vIFRoaXMgY2xhc3MgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIHRoZSBK
YXZhIFBlZXJDb25uZWN0aW9uIEFQSS4KLUBUYXJnZXRBcGkoMTkpCi1AU3VwcHJlc3NXYXJuaW5n
cygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgewot
ICAvLyBUaGlzIGNsYXNzIGlzIGNvbnN0cnVjdGVkLCBvcGVyYXRlZCwgYW5kIGRlc3Ryb3llZCBi
eSBpdHMgQysrIGluY2FybmF0aW9uLAotICAvLyBzbyB0aGUgY2xhc3MgYW5kIGl0cyBtZXRob2Rz
IGhhdmUgbm9uLXB1YmxpYyB2aXNpYmlsaXR5LiAgVGhlIEFQSSB0aGlzCi0gIC8vIGNsYXNzIGV4
cG9zZXMgYWltcyB0byBtaW1pYyB0aGUgd2VicnRjOjpWaWRlb0VuY29kZXIgQVBJIGFzIGNsb3Nl
bHkgYXMKLSAgLy8gcG9zc2libHkgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiB0cmFuc2xhdGlv
biB3b3JrIG5lY2Vzc2FyeS4KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0g
Ik1lZGlhQ29kZWNWaWRlb0VuY29kZXIiOwotCi0gIC8vIFRyYWNrcyB3ZWJydGM6OlZpZGVvQ29k
ZWNUeXBlLgotICBwdWJsaWMgZW51bSBWaWRlb0NvZGVjVHlwZSB7IFZJREVPX0NPREVDX1ZQOCwg
VklERU9fQ09ERUNfVlA5LCBWSURFT19DT0RFQ19IMjY0IH0KLQotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgTUVESUFfQ09ERUNfUkVMRUFTRV9USU1FT1VUX01TID0gNTAwMDsgLy8gVGltZW91
dCBmb3IgY29kZWMgcmVsZWFzaW5nLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVRVUVV
RV9USU1FT1VUID0gMDsgLy8gTm9uLWJsb2NraW5nLCBubyB3YWl0LgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgQklUUkFURV9BREpVU1RNRU5UX0ZQUyA9IDMwOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgTUFYSU1VTV9JTklUSUFMX0ZQUyA9IDMwOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBkb3VibGUgQklUUkFURV9DT1JSRUNUSU9OX1NFQyA9IDMuMDsKLSAgLy8gTWF4aW11bSBi
aXRyYXRlIGNvcnJlY3Rpb24gc2NhbGUgLSBubyBtb3JlIHRoYW4gMiB0aW1lcy4KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgZG91YmxlIEJJVFJBVEVfQ09SUkVDVElPTl9NQVhfU0NBTEUgPSAyOwot
ICAvLyBBbW91bnQgb2YgY29ycmVjdGlvbiBzdGVwcyB0byByZWFjaCBjb3JyZWN0aW9uIG1heGlt
dW0gc2NhbGUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCSVRSQVRFX0NPUlJFQ1RJT05f
U1RFUFMgPSAxMDsKLQotICAvLyBBY3RpdmUgcnVubmluZyBlbmNvZGVyIGluc3RhbmNlLiBTZXQg
aW4gaW5pdEVuY29kZSgpIChjYWxsZWQgZnJvbSBuYXRpdmUgY29kZSkKLSAgLy8gYW5kIHJlc2V0
IHRvIG51bGwgaW4gcmVsZWFzZSgpIGNhbGwuCi0gIHByaXZhdGUgc3RhdGljIE1lZGlhQ29kZWNW
aWRlb0VuY29kZXIgcnVubmluZ0luc3RhbmNlID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgTWVk
aWFDb2RlY1ZpZGVvRW5jb2RlckVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjayA9IG51bGw7Ci0g
IHByaXZhdGUgc3RhdGljIGludCBjb2RlY0Vycm9ycyA9IDA7Ci0gIC8vIExpc3Qgb2YgZGlzYWJs
ZWQgY29kZWMgdHlwZXMgLSBjYW4gYmUgc2V0IGZyb20gYXBwbGljYXRpb24uCi0gIHByaXZhdGUg
c3RhdGljIFNldDxTdHJpbmc+IGh3RW5jb2RlckRpc2FibGVkVHlwZXMgPSBuZXcgSGFzaFNldDxT
dHJpbmc+KCk7Ci0KLSAgcHJpdmF0ZSBUaHJlYWQgbWVkaWFDb2RlY1RocmVhZDsKLSAgcHJpdmF0
ZSBNZWRpYUNvZGVjIG1lZGlhQ29kZWM7Ci0gIHByaXZhdGUgQnl0ZUJ1ZmZlcltdIG91dHB1dEJ1
ZmZlcnM7Ci0gIHByaXZhdGUgRWdsQmFzZTE0IGVnbEJhc2U7Ci0gIHByaXZhdGUgaW50IHdpZHRo
OwotICBwcml2YXRlIGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgU3VyZmFjZSBpbnB1dFN1cmZhY2U7
Ci0gIHByaXZhdGUgR2xSZWN0RHJhd2VyIGRyYXdlcjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVlA4X01JTUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA4IjsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZQOV9NSU1FX1RZUEUgPSAidmlkZW8veC12bmQub24yLnZw
OSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIMjY0X01JTUVfVFlQRSA9ICJ2aWRl
by9hdmMiOwotCi0gIC8vIFR5cGUgb2YgYml0cmF0ZSBhZGp1c3RtZW50IGZvciB2aWRlbyBlbmNv
ZGVyLgotICBwdWJsaWMgZW51bSBCaXRyYXRlQWRqdXN0bWVudFR5cGUgewotICAgIC8vIE5vIGFk
anVzdG1lbnQgLSB2aWRlbyBlbmNvZGVyIGhhcyBubyBrbm93biBiaXRyYXRlIHByb2JsZW0uCi0g
ICAgTk9fQURKVVNUTUVOVCwKLSAgICAvLyBGcmFtZXJhdGUgYmFzZWQgYml0cmF0ZSBhZGp1c3Rt
ZW50IGlzIHJlcXVpcmVkIC0gSFcgZW5jb2RlciBkb2VzIG5vdCB1c2UgZnJhbWUKLSAgICAvLyB0
aW1lc3RhbXBzIHRvIGNhbGN1bGF0ZSBmcmFtZSBiaXRyYXRlIGJ1ZGdldCBhbmQgaW5zdGVhZCBp
cyByZWx5aW5nIG9uIGluaXRpYWwKLSAgICAvLyBmcHMgY29uZmlndXJhdGlvbiBhc3N1bWluZyB0
aGF0IGFsbCBmcmFtZXMgYXJlIGNvbWluZyBhdCBmaXhlZCBpbml0aWFsIGZyYW1lIHJhdGUuCi0g
ICAgRlJBTUVSQVRFX0FESlVTVE1FTlQsCi0gICAgLy8gRHluYW1pYyBiaXRyYXRlIGFkanVzdG1l
bnQgaXMgcmVxdWlyZWQgLSBIVyBlbmNvZGVyIHVzZWQgZnJhbWUgdGltZXN0YW1wcywgYnV0IGFj
dHVhbAotICAgIC8vIGJpdHJhdGUgZGV2aWF0ZXMgdG9vIG11Y2ggZnJvbSB0aGUgdGFyZ2V0IHZh
bHVlLgotICAgIERZTkFNSUNfQURKVVNUTUVOVAotICB9Ci0KLSAgLy8gQ2xhc3MgZGVzY3JpYmlu
ZyBzdXBwb3J0ZWQgbWVkaWEgY29kZWMgcHJvcGVydGllcy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xh
c3MgTWVkaWFDb2RlY1Byb3BlcnRpZXMgewotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgY29kZWNQ
cmVmaXg7Ci0gICAgLy8gTWluaW11bSBBbmRyb2lkIFNESyByZXF1aXJlZCBmb3IgdGhpcyBjb2Rl
YyB0byBiZSB1c2VkLgotICAgIHB1YmxpYyBmaW5hbCBpbnQgbWluU2RrOwotICAgIC8vIEZsYWcg
aWYgZW5jb2RlciBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCB1c2UgZnJhbWUgdGltZXN0YW1wcyB0
byBjYWxjdWxhdGUgZnJhbWUgYml0cmF0ZQotICAgIC8vIGJ1ZGdldCBhbmQgaW5zdGVhZCBpcyBy
ZWx5aW5nIG9uIGluaXRpYWwgZnBzIGNvbmZpZ3VyYXRpb24gYXNzdW1pbmcgdGhhdCBhbGwgZnJh
bWVzIGFyZQotICAgIC8vIGNvbWluZyBhdCBmaXhlZCBpbml0aWFsIGZyYW1lIHJhdGUuIEJpdHJh
dGUgYWRqdXN0bWVudCBpcyByZXF1aXJlZCBmb3IgdGhpcyBjYXNlLgotICAgIHB1YmxpYyBmaW5h
bCBCaXRyYXRlQWRqdXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlOwotCi0gICAgTWVk
aWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAgIFN0cmluZyBjb2RlY1ByZWZpeCwgaW50IG1pblNk
aywgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3RtZW50VHlwZSkgewotICAgICAg
dGhpcy5jb2RlY1ByZWZpeCA9IGNvZGVjUHJlZml4OwotICAgICAgdGhpcy5taW5TZGsgPSBtaW5T
ZGs7Ci0gICAgICB0aGlzLmJpdHJhdGVBZGp1c3RtZW50VHlwZSA9IGJpdHJhdGVBZGp1c3RtZW50
VHlwZTsKLSAgICB9Ci0gIH0KLQotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBWUDggZW5jb2Rl
cnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIHFjb21WcDhI
d1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAiT01YLnFjb20u
IiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQsIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19B
REpVU1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMg
ZXh5bm9zVnA4SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAg
Ik9NWC5FeHlub3MuIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5NLCBCaXRyYXRlQWRqdXN0bWVudFR5
cGUuRFlOQU1JQ19BREpVU1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVkaWFDb2Rl
Y1Byb3BlcnRpZXNbXSB2cDhId0xpc3QgPQotICAgICAgbmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVz
W10ge3Fjb21WcDhId1Byb3BlcnRpZXMsIGV4eW5vc1ZwOEh3UHJvcGVydGllc307Ci0KLSAgLy8g
TGlzdCBvZiBzdXBwb3J0ZWQgSFcgVlA5IGVuY29kZXJzLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBNZWRpYUNvZGVjUHJvcGVydGllcyBxY29tVnA5SHdQcm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29k
ZWNQcm9wZXJ0aWVzKAotICAgICAgIk9NWC5xY29tLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuTSwg
Qml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBNZWRpYUNvZGVjUHJvcGVydGllcyBleHlub3NWcDlId1Byb3BlcnRpZXMgPSBuZXcgTWVk
aWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAiT01YLkV4eW5vcy4iLCBCdWlsZC5WRVJTSU9OX0NP
REVTLk0sIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UKTsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB2cDlId0xpc3QgPQotICAgICAgbmV3
IE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10ge3Fjb21WcDlId1Byb3BlcnRpZXMsIGV4eW5vc1ZwOUh3
UHJvcGVydGllc307Ci0KLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcgSC4yNjQgZW5jb2RlcnMu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIHFjb21IMjY0SHdQ
cm9wZXJ0aWVzID0gbmV3IE1lZGlhQ29kZWNQcm9wZXJ0aWVzKAotICAgICAgIk9NWC5xY29tLiIs
IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FULCBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURK
VVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGV4
eW5vc0gyNjRId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAi
T01YLkV4eW5vcy4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QLCBCaXRyYXRlQWRqdXN0
bWVudFR5cGUuRlJBTUVSQVRFX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBN
ZWRpYUNvZGVjUHJvcGVydGllc1tdIGgyNjRId0xpc3QgPQotICAgICAgbmV3IE1lZGlhQ29kZWNQ
cm9wZXJ0aWVzW10ge3Fjb21IMjY0SHdQcm9wZXJ0aWVzLCBleHlub3NIMjY0SHdQcm9wZXJ0aWVz
fTsKLQotICAvLyBMaXN0IG9mIGRldmljZXMgd2l0aCBwb29yIEguMjY0IGVuY29kZXIgcXVhbGl0
eS4KLSAgLy8gSFcgSC4yNjQgZW5jb2RlciBvbiBiZWxvdyBkZXZpY2VzIGhhcyBwb29yIGJpdHJh
dGUgY29udHJvbCAtIGFjdHVhbAotICAvLyBiaXRyYXRlcyBkZXZpYXRlcyBhIGxvdCBmcm9tIHRo
ZSB0YXJnZXQgdmFsdWUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEgyNjRfSFdf
RVhDRVBUSU9OX01PREVMUyA9Ci0gICAgICBuZXcgU3RyaW5nW10geyJTQU1TVU5HLVNHSC1JMzM3
IiwgIk5leHVzIDciLCAiTmV4dXMgNCJ9OwotCi0gIC8vIEJpdHJhdGUgbW9kZXMgLSBzaG91bGQg
YmUgaW4gc3luYyB3aXRoIE9NWF9WSURFT19DT05UUk9MUkFURVRZUEUgZGVmaW5lZAotICAvLyBp
biBPTVhfVmlkZW8uaAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklERU9fQ29udHJvbFJh
dGVDb25zdGFudCA9IDI7Ci0gIC8vIE5WMTIgY29sb3IgZm9ybWF0IHN1cHBvcnRlZCBieSBRQ09N
IGNvZGVjLCBidXQgbm90IGRlY2xhcmVkIGluIE1lZGlhQ29kZWMgLQotICAvLyBzZWUgL2hhcmR3
YXJlL3Fjb20vbWVkaWEvbW0tY29yZS9pbmMvT01YX1FDT01FeHRucy5oCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm0g
PSAweDdGQTMwQzA0OwotICAvLyBBbGxvd2FibGUgY29sb3IgZm9ybWF0cyBzdXBwb3J0ZWQgYnkg
Y29kZWMgLSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnRbXSBzdXBwb3J0ZWRDb2xvckxpc3QgPSB7Q29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0
WVVWNDIwUGxhbmFyLAotICAgICAgQ29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0WVVWNDIw
U2VtaVBsYW5hciwKLSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX1FDT01fRm9ybWF0WVVW
NDIwU2VtaVBsYW5hciwKLSAgICAgIENPTE9SX1FDT01fRk9STUFUWVVWNDIwUGFja2VkU2VtaVBs
YW5hcjMybX07Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIHN1cHBvcnRlZFN1cmZhY2VD
b2xvckxpc3QgPSB7Q29kZWNDYXBhYmlsaXRpZXMuQ09MT1JfRm9ybWF0U3VyZmFjZX07Ci0gIHBy
aXZhdGUgVmlkZW9Db2RlY1R5cGUgdHlwZTsKLSAgcHJpdmF0ZSBpbnQgY29sb3JGb3JtYXQ7IC8v
IFVzZWQgYnkgbmF0aXZlIGNvZGUuCi0KLSAgLy8gVmFyaWFibGVzIHVzZWQgZm9yIGR5bmFtaWMg
Yml0cmF0ZSBhZGp1c3RtZW50LgotICBwcml2YXRlIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRy
YXRlQWRqdXN0bWVudFR5cGUgPSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURKVVNUTUVOVDsK
LSAgcHJpdmF0ZSBkb3VibGUgYml0cmF0ZUFjY3VtdWxhdG9yOwotICBwcml2YXRlIGRvdWJsZSBi
aXRyYXRlQWNjdW11bGF0b3JNYXg7Ci0gIHByaXZhdGUgZG91YmxlIGJpdHJhdGVPYnNlcnZhdGlv
blRpbWVNczsKLSAgcHJpdmF0ZSBpbnQgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cDsKLSAgcHJp
dmF0ZSBpbnQgdGFyZ2V0Qml0cmF0ZUJwczsKLSAgcHJpdmF0ZSBpbnQgdGFyZ2V0RnBzOwotCi0g
IC8vIFNQUyBhbmQgUFBTIE5BTHMgKENvbmZpZyBmcmFtZSkgZm9yIEguMjY0LgotICBwcml2YXRl
IEJ5dGVCdWZmZXIgY29uZmlnRGF0YSA9IG51bGw7Ci0KLSAgLy8gTWVkaWFDb2RlYyBlcnJvciBo
YW5kbGVyIC0gaW52b2tlZCB3aGVuIGNyaXRpY2FsIGVycm9yIGhhcHBlbnMgd2hpY2ggbWF5IHBy
ZXZlbnQKLSAgLy8gZnVydGhlciB1c2Ugb2YgbWVkaWEgY29kZWMgQVBJLiBOb3cgaXQgbWVhbnMg
dGhhdCBvbmUgb2YgbWVkaWEgY29kZWMgaW5zdGFuY2VzCi0gIC8vIGlzIGhhbmdpbmcgYW5kIGNh
biBubyBsb25nZXIgYmUgdXNlZCBpbiB0aGUgbmV4dCBjYWxsLgotICBwdWJsaWMgc3RhdGljIGlu
dGVyZmFjZSBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRXJyb3JDYWxsYmFjayB7Ci0gICAgdm9pZCBv
bk1lZGlhQ29kZWNWaWRlb0VuY29kZXJDcml0aWNhbEVycm9yKGludCBjb2RlY0Vycm9ycyk7Ci0g
IH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RXJyb3JDYWxsYmFjayhNZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKSB7Ci0gICAgTG9nZ2luZy5kKFRB
RywgIlNldCBlcnJvciBjYWxsYmFjayIpOwotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuZXJy
b3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2s7Ci0gIH0KLQotICAvLyBGdW5jdGlvbnMgdG8gZGlz
YWJsZSBIVyBlbmNvZGluZyAtIGNhbiBiZSBjYWxsZWQgZnJvbSBhcHBsaWNhdGlvbnMgZm9yIHBs
YXRmb3JtcwotICAvLyB3aGljaCBoYXZlIGtub3duIEhXIGRlY29kaW5nIHByb2JsZW1zLgotICBw
dWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVZwOEh3Q29kZWMoKSB7Ci0gICAgTG9nZ2luZy53KFRB
RywgIlZQOCBlbmNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNhdGlvbi4iKTsKLSAgICBod0Vu
Y29kZXJEaXNhYmxlZFR5cGVzLmFkZChWUDhfTUlNRV9UWVBFKTsKLSAgfQotCi0gIHB1YmxpYyBz
dGF0aWMgdm9pZCBkaXNhYmxlVnA5SHdDb2RlYygpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAiVlA5
IGVuY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RW5jb2RlckRp
c2FibGVkVHlwZXMuYWRkKFZQOV9NSU1FX1RZUEUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2
b2lkIGRpc2FibGVIMjY0SHdDb2RlYygpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAiSC4yNjQgZW5j
b2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7Ci0gICAgaHdFbmNvZGVyRGlzYWJs
ZWRUeXBlcy5hZGQoSDI2NF9NSU1FX1RZUEUpOwotICB9Ci0KLSAgLy8gRnVuY3Rpb25zIHRvIHF1
ZXJ5IGlmIEhXIGVuY29kaW5nIGlzIHN1cHBvcnRlZC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFu
IGlzVnA4SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxlZFR5cGVz
LmNvbnRhaW5zKFZQOF9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVyKFZQOF9N
SU1FX1RZUEUsIHZwOEh3TGlzdCwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOUh3U3VwcG9ydGVkKCkgewotICAgIHJldHVy
biAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250YWlucyhWUDlfTUlNRV9UWVBFKQotICAgICAg
ICAmJiAoZmluZEh3RW5jb2RlcihWUDlfTUlNRV9UWVBFLCB2cDlId0xpc3QsIHN1cHBvcnRlZENv
bG9yTGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNIMjY0
SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRh
aW5zKEgyNjRfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZEh3RW5jb2RlcihIMjY0X01JTUVf
VFlQRSwgaDI2NEh3TGlzdCwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpIHsK
LSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA4X01JTUVfVFlQ
RSkKLSAgICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA4X01JTUVfVFlQRSwgdnA4SHdMaXN0LCBz
dXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgYm9vbGVhbiBpc1ZwOUh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpIHsKLSAgICByZXR1cm4g
IWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA5X01JTUVfVFlQRSkKLSAgICAgICAg
JiYgKGZpbmRId0VuY29kZXIoVlA5X01JTUVfVFlQRSwgdnA5SHdMaXN0LCBzdXBwb3J0ZWRTdXJm
YWNlQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBp
c0gyNjRId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJE
aXNhYmxlZFR5cGVzLmNvbnRhaW5zKEgyNjRfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZEh3
RW5jb2RlcihIMjY0X01JTUVfVFlQRSwgaDI2NEh3TGlzdCwgc3VwcG9ydGVkU3VyZmFjZUNvbG9y
TGlzdCkgIT0gbnVsbCk7Ci0gIH0KLQotICAvLyBIZWxwZXIgc3RydWN0IGZvciBmaW5kSHdFbmNv
ZGVyKCkgYmVsb3cuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIEVuY29kZXJQcm9wZXJ0aWVzIHsK
LSAgICBwdWJsaWMgRW5jb2RlclByb3BlcnRpZXMoCi0gICAgICAgIFN0cmluZyBjb2RlY05hbWUs
IGludCBjb2xvckZvcm1hdCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3RtZW50
VHlwZSkgewotICAgICAgdGhpcy5jb2RlY05hbWUgPSBjb2RlY05hbWU7Ci0gICAgICB0aGlzLmNv
bG9yRm9ybWF0ID0gY29sb3JGb3JtYXQ7Ci0gICAgICB0aGlzLmJpdHJhdGVBZGp1c3RtZW50VHlw
ZSA9IGJpdHJhdGVBZGp1c3RtZW50VHlwZTsKLSAgICB9Ci0gICAgcHVibGljIGZpbmFsIFN0cmlu
ZyBjb2RlY05hbWU7IC8vIE9wZW5NYXggY29tcG9uZW50IG5hbWUgZm9yIEhXIGNvZGVjLgotICAg
IHB1YmxpYyBmaW5hbCBpbnQgY29sb3JGb3JtYXQ7IC8vIENvbG9yIGZvcm1hdCBzdXBwb3J0ZWQg
YnkgY29kZWMuCi0gICAgcHVibGljIGZpbmFsIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRyYXRl
QWRqdXN0bWVudFR5cGU7IC8vIEJpdHJhdGUgYWRqdXN0bWVudCB0eXBlCi0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyBFbmNvZGVyUHJvcGVydGllcyBmaW5kSHdFbmNvZGVyKAotICAgICAgU3RyaW5n
IG1pbWUsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10gc3VwcG9ydGVkSHdDb2RlY1Byb3BlcnRpZXMs
IGludFtdIGNvbG9yTGlzdCkgewotICAgIC8vIE1lZGlhQ29kZWMuc2V0UGFyYW1ldGVycyBpcyBt
aXNzaW5nIGZvciBKQiBhbmQgYmVsb3csIHNvIGJpdHJhdGUKLSAgICAvLyBjYW4gbm90IGJlIGFk
anVzdGVkIGR5bmFtaWNhbGx5LgotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWls
ZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0g
ICAgLy8gQ2hlY2sgaWYgZGV2aWNlIGlzIGluIEguMjY0IGV4Y2VwdGlvbiBsaXN0LgotICAgIGlm
IChtaW1lLmVxdWFscyhIMjY0X01JTUVfVFlQRSkpIHsKLSAgICAgIExpc3Q8U3RyaW5nPiBleGNl
cHRpb25Nb2RlbHMgPSBBcnJheXMuYXNMaXN0KEgyNjRfSFdfRVhDRVBUSU9OX01PREVMUyk7Ci0g
ICAgICBpZiAoZXhjZXB0aW9uTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKSkgewotICAgICAg
ICBMb2dnaW5nLncoVEFHLCAiTW9kZWw6ICIgKyBCdWlsZC5NT0RFTCArICIgaGFzIGJsYWNrIGxp
c3RlZCBILjI2NCBlbmNvZGVyLiIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IE1lZGlhQ29kZWNMaXN0LmdldENvZGVjQ291
bnQoKTsgKytpKSB7Ci0gICAgICBNZWRpYUNvZGVjSW5mbyBpbmZvID0gbnVsbDsKLSAgICAgIHRy
eSB7Ci0gICAgICAgIGluZm8gPSBNZWRpYUNvZGVjTGlzdC5nZXRDb2RlY0luZm9BdChpKTsKLSAg
ICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dp
bmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZW5jb2RlciBjb2RlYyBpbmZvIiwgZSk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoaW5mbyA9PSBudWxsIHx8ICFpbmZvLmlzRW5jb2RlcigpKSB7Ci0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgU3RyaW5nIG5hbWUgPSBudWxsOwotICAgICAg
Zm9yIChTdHJpbmcgbWltZVR5cGUgOiBpbmZvLmdldFN1cHBvcnRlZFR5cGVzKCkpIHsKLSAgICAg
ICAgaWYgKG1pbWVUeXBlLmVxdWFscyhtaW1lKSkgewotICAgICAgICAgIG5hbWUgPSBpbmZvLmdl
dE5hbWUoKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYg
KG5hbWUgPT0gbnVsbCkgewotICAgICAgICBjb250aW51ZTsgLy8gTm8gSFcgc3VwcG9ydCBpbiB0
aGlzIGNvZGVjOyB0cnkgdGhlIG5leHQgb25lLgotICAgICAgfQotICAgICAgTG9nZ2luZy52KFRB
RywgIkZvdW5kIGNhbmRpZGF0ZSBlbmNvZGVyICIgKyBuYW1lKTsKLQotICAgICAgLy8gQ2hlY2sg
aWYgdGhpcyBpcyBzdXBwb3J0ZWQgSFcgZW5jb2Rlci4KLSAgICAgIGJvb2xlYW4gc3VwcG9ydGVk
Q29kZWMgPSBmYWxzZTsKLSAgICAgIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRyYXRlQWRqdXN0
bWVudFR5cGUgPSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURKVVNUTUVOVDsKLSAgICAgIGZv
ciAoTWVkaWFDb2RlY1Byb3BlcnRpZXMgY29kZWNQcm9wZXJ0aWVzIDogc3VwcG9ydGVkSHdDb2Rl
Y1Byb3BlcnRpZXMpIHsKLSAgICAgICAgaWYgKG5hbWUuc3RhcnRzV2l0aChjb2RlY1Byb3BlcnRp
ZXMuY29kZWNQcmVmaXgpKSB7Ci0gICAgICAgICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8
IGNvZGVjUHJvcGVydGllcy5taW5TZGspIHsKLSAgICAgICAgICAgIExvZ2dpbmcudygKLSAgICAg
ICAgICAgICAgICBUQUcsICJDb2RlYyAiICsgbmFtZSArICIgaXMgZGlzYWJsZWQgZHVlIHRvIFNE
SyB2ZXJzaW9uICIgKyBCdWlsZC5WRVJTSU9OLlNES19JTlQpOwotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChjb2RlY1Byb3BlcnRpZXMuYml0cmF0ZUFk
anVzdG1lbnRUeXBlICE9IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UKSB7Ci0g
ICAgICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFR5cGUgPSBjb2RlY1Byb3BlcnRpZXMuYml0cmF0
ZUFkanVzdG1lbnRUeXBlOwotICAgICAgICAgICAgTG9nZ2luZy53KAotICAgICAgICAgICAgICAg
IFRBRywgIkNvZGVjICIgKyBuYW1lICsgIiByZXF1aXJlcyBiaXRyYXRlIGFkanVzdG1lbnQ6ICIg
KyBiaXRyYXRlQWRqdXN0bWVudFR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgICBzdXBwb3J0
ZWRDb2RlYyA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIGlmICghc3VwcG9ydGVkQ29kZWMpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIENoZWNrIGlmIEhXIGNvZGVjIHN1cHBvcnRzIGtub3duIGNvbG9yIGZvcm1hdC4K
LSAgICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKLSAgICAgIHRyeSB7Ci0gICAg
ICAgIGNhcGFiaWxpdGllcyA9IGluZm8uZ2V0Q2FwYWJpbGl0aWVzRm9yVHlwZShtaW1lKTsKLSAg
ICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dp
bmcuZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZW5jb2RlciBjYXBhYmlsaXRpZXMiLCBlKTsKLSAg
ICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBjb2xvckZvcm1hdCA6IGNh
cGFiaWxpdGllcy5jb2xvckZvcm1hdHMpIHsKLSAgICAgICAgTG9nZ2luZy52KFRBRywgIiAgIENv
bG9yOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvbG9yRm9ybWF0KSk7Ci0gICAgICB9Ci0K
LSAgICAgIGZvciAoaW50IHN1cHBvcnRlZENvbG9yRm9ybWF0IDogY29sb3JMaXN0KSB7Ci0gICAg
ICAgIGZvciAoaW50IGNvZGVjQ29sb3JGb3JtYXQgOiBjYXBhYmlsaXRpZXMuY29sb3JGb3JtYXRz
KSB7Ci0gICAgICAgICAgaWYgKGNvZGVjQ29sb3JGb3JtYXQgPT0gc3VwcG9ydGVkQ29sb3JGb3Jt
YXQpIHsKLSAgICAgICAgICAgIC8vIEZvdW5kIHN1cHBvcnRlZCBIVyBlbmNvZGVyLgotICAgICAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIkZvdW5kIHRhcmdldCBlbmNvZGVyIGZvciBtaW1lICIgKyBt
aW1lICsgIiA6ICIgKyBuYW1lICsgIi4gQ29sb3I6IDB4IgotICAgICAgICAgICAgICAgICAgICAr
IEludGVnZXIudG9IZXhTdHJpbmcoY29kZWNDb2xvckZvcm1hdCkgKyAiLiBCaXRyYXRlIGFkanVz
dG1lbnQ6ICIKLSAgICAgICAgICAgICAgICAgICAgKyBiaXRyYXRlQWRqdXN0bWVudFR5cGUpOwot
ICAgICAgICAgICAgcmV0dXJuIG5ldyBFbmNvZGVyUHJvcGVydGllcyhuYW1lLCBjb2RlY0NvbG9y
Rm9ybWF0LCBiaXRyYXRlQWRqdXN0bWVudFR5cGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbDsgLy8gTm8gSFcgZW5jb2Rlci4KLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpIHsKLSAgICBpZiAobWVk
aWFDb2RlY1RocmVhZC5nZXRJZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0SWQoKSkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk1lZGlhQ29kZWNWaWRlb0VuY29k
ZXIgcHJldmlvdXNseSBvcGVyYXRlZCBvbiAiICsgbWVkaWFDb2RlY1RocmVhZAotICAgICAgICAg
ICsgIiBidXQgaXMgbm93IGNhbGxlZCBvbiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSk7Ci0g
ICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50U3RhY2tUcmFjZSgpIHsKLSAg
ICBpZiAocnVubmluZ0luc3RhbmNlICE9IG51bGwgJiYgcnVubmluZ0luc3RhbmNlLm1lZGlhQ29k
ZWNUaHJlYWQgIT0gbnVsbCkgewotICAgICAgU3RhY2tUcmFjZUVsZW1lbnRbXSBtZWRpYUNvZGVj
U3RhY2tUcmFjZXMgPSBydW5uaW5nSW5zdGFuY2UubWVkaWFDb2RlY1RocmVhZC5nZXRTdGFja1Ry
YWNlKCk7Ci0gICAgICBpZiAobWVkaWFDb2RlY1N0YWNrVHJhY2VzLmxlbmd0aCA+IDApIHsKLSAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIk1lZGlhQ29kZWNWaWRlb0VuY29kZXIgc3RhY2tzIHRyYWNl
OiIpOwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBtZWRpYUNv
ZGVjU3RhY2tUcmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRv
U3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIE1l
ZGlhQ29kZWMgY3JlYXRlQnlDb2RlY05hbWUoU3RyaW5nIGNvZGVjTmFtZSkgewotICAgIHRyeSB7
Ci0gICAgICAvLyBJbiB0aGUgTC1TREsgdGhpcyBjYWxsIGNhbiB0aHJvdyBJT0V4Y2VwdGlvbiBz
byBpbiBvcmRlciB0byB3b3JrIGluCi0gICAgICAvLyBib3RoIGNhc2VzIGNhdGNoIGFuIGV4Y2Vw
dGlvbi4KLSAgICAgIHJldHVybiBNZWRpYUNvZGVjLmNyZWF0ZUJ5Q29kZWNOYW1lKGNvZGVjTmFt
ZSk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAg
IH0KLSAgfQotCi0gIGJvb2xlYW4gaW5pdEVuY29kZShWaWRlb0NvZGVjVHlwZSB0eXBlLCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBrYnBzLCBpbnQgZnBzLAotICAgICAgRWdsQmFzZTE0LkNv
bnRleHQgc2hhcmVkQ29udGV4dCkgewotICAgIGZpbmFsIGJvb2xlYW4gdXNlU3VyZmFjZSA9IHNo
YXJlZENvbnRleHQgIT0gbnVsbDsKLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSBpbml0RW5jb2Rl
OiAiICsgdHlwZSArICIgOiAiICsgd2lkdGggKyAiIHggIiArIGhlaWdodCArICIuIEAgIiArIGti
cHMKLSAgICAgICAgICAgICsgIiBrYnBzLiBGcHM6ICIgKyBmcHMgKyAiLiBFbmNvZGUgZnJvbSB0
ZXh0dXJlIDogIiArIHVzZVN1cmZhY2UpOwotCi0gICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAg
IHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFkICE9IG51bGwp
IHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGb3Jnb3QgdG8gcmVsZWFzZSgp
PyIpOwotICAgIH0KLSAgICBFbmNvZGVyUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbnVsbDsKLSAg
ICBTdHJpbmcgbWltZSA9IG51bGw7Ci0gICAgaW50IGtleUZyYW1lSW50ZXJ2YWxTZWMgPSAwOwot
ICAgIGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCkgewotICAgICAg
bWltZSA9IFZQOF9NSU1FX1RZUEU7Ci0gICAgICBwcm9wZXJ0aWVzID0gZmluZEh3RW5jb2RlcigK
LSAgICAgICAgICBWUDhfTUlNRV9UWVBFLCB2cDhId0xpc3QsIHVzZVN1cmZhY2UgPyBzdXBwb3J0
ZWRTdXJmYWNlQ29sb3JMaXN0IDogc3VwcG9ydGVkQ29sb3JMaXN0KTsKLSAgICAgIGtleUZyYW1l
SW50ZXJ2YWxTZWMgPSAxMDA7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBl
LlZJREVPX0NPREVDX1ZQOSkgewotICAgICAgbWltZSA9IFZQOV9NSU1FX1RZUEU7Ci0gICAgICBw
cm9wZXJ0aWVzID0gZmluZEh3RW5jb2RlcigKLSAgICAgICAgICBWUDlfTUlNRV9UWVBFLCB2cDlI
d0xpc3QsIHVzZVN1cmZhY2UgPyBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0IDogc3VwcG9ydGVk
Q29sb3JMaXN0KTsKLSAgICAgIGtleUZyYW1lSW50ZXJ2YWxTZWMgPSAxMDA7Ci0gICAgfSBlbHNl
IGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX0gyNjQpIHsKLSAgICAgIG1p
bWUgPSBIMjY0X01JTUVfVFlQRTsKLSAgICAgIHByb3BlcnRpZXMgPSBmaW5kSHdFbmNvZGVyKAot
ICAgICAgICAgIEgyNjRfTUlNRV9UWVBFLCBoMjY0SHdMaXN0LCB1c2VTdXJmYWNlID8gc3VwcG9y
dGVkU3VyZmFjZUNvbG9yTGlzdCA6IHN1cHBvcnRlZENvbG9yTGlzdCk7Ci0gICAgICBrZXlGcmFt
ZUludGVydmFsU2VjID0gMjA7Ci0gICAgfQotICAgIGlmIChwcm9wZXJ0aWVzID09IG51bGwpIHsK
LSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJDYW4gbm90IGZpbmQgSFcgZW5jb2Rl
ciBmb3IgIiArIHR5cGUpOwotICAgIH0KLSAgICBydW5uaW5nSW5zdGFuY2UgPSB0aGlzOyAvLyBF
bmNvZGVyIGlzIG5vdyBydW5uaW5nIGFuZCBjYW4gYmUgcXVlcmllZCBmb3Igc3RhY2sgdHJhY2Vz
LgotICAgIGNvbG9yRm9ybWF0ID0gcHJvcGVydGllcy5jb2xvckZvcm1hdDsKLSAgICBiaXRyYXRl
QWRqdXN0bWVudFR5cGUgPSBwcm9wZXJ0aWVzLmJpdHJhdGVBZGp1c3RtZW50VHlwZTsKLSAgICBp
ZiAoYml0cmF0ZUFkanVzdG1lbnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5GUkFNRVJB
VEVfQURKVVNUTUVOVCkgewotICAgICAgZnBzID0gQklUUkFURV9BREpVU1RNRU5UX0ZQUzsKLSAg
ICB9IGVsc2UgewotICAgICAgZnBzID0gTWF0aC5taW4oZnBzLCBNQVhJTVVNX0lOSVRJQUxfRlBT
KTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkNvbG9yIGZvcm1hdDogIiArIGNvbG9yRm9y
bWF0ICsgIi4gQml0cmF0ZSBhZGp1c3RtZW50OiAiICsgYml0cmF0ZUFkanVzdG1lbnRUeXBlCi0g
ICAgICAgICAgICArICIuIEluaXRpYWwgZnBzOiAiICsgZnBzKTsKLSAgICB0YXJnZXRCaXRyYXRl
QnBzID0gMTAwMCAqIGticHM7Ci0gICAgdGFyZ2V0RnBzID0gZnBzOwotICAgIGJpdHJhdGVBY2N1
bXVsYXRvck1heCA9IHRhcmdldEJpdHJhdGVCcHMgLyA4LjA7Ci0gICAgYml0cmF0ZUFjY3VtdWxh
dG9yID0gMDsKLSAgICBiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgPSAwOwotICAgIGJpdHJhdGVB
ZGp1c3RtZW50U2NhbGVFeHAgPSAwOwotCi0gICAgbWVkaWFDb2RlY1RocmVhZCA9IFRocmVhZC5j
dXJyZW50VGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIE1lZGlhRm9ybWF0IGZvcm1hdCA9IE1l
ZGlhRm9ybWF0LmNyZWF0ZVZpZGVvRm9ybWF0KG1pbWUsIHdpZHRoLCBoZWlnaHQpOwotICAgICAg
Zm9ybWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0JJVF9SQVRFLCB0YXJnZXRCaXRyYXRl
QnBzKTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKCJiaXRyYXRlLW1vZGUiLCBWSURFT19Db250
cm9sUmF0ZUNvbnN0YW50KTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktF
WV9DT0xPUl9GT1JNQVQsIHByb3BlcnRpZXMuY29sb3JGb3JtYXQpOwotICAgICAgZm9ybWF0LnNl
dEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0ZSQU1FX1JBVEUsIHRhcmdldEZwcyk7Ci0gICAgICBm
b3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfSV9GUkFNRV9JTlRFUlZBTCwga2V5RnJh
bWVJbnRlcnZhbFNlYyk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiICBGb3JtYXQ6ICIgKyBmb3Jt
YXQpOwotICAgICAgbWVkaWFDb2RlYyA9IGNyZWF0ZUJ5Q29kZWNOYW1lKHByb3BlcnRpZXMuY29k
ZWNOYW1lKTsKLSAgICAgIHRoaXMudHlwZSA9IHR5cGU7Ci0gICAgICBpZiAobWVkaWFDb2RlYyA9
PSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJDYW4gbm90IGNyZWF0ZSBtZWRpYSBl
bmNvZGVyIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICAgIG1lZGlhQ29k
ZWMuY29uZmlndXJlKGZvcm1hdCwgbnVsbCwgbnVsbCwgTWVkaWFDb2RlYy5DT05GSUdVUkVfRkxB
R19FTkNPREUpOwotCi0gICAgICBpZiAodXNlU3VyZmFjZSkgewotICAgICAgICBlZ2xCYXNlID0g
bmV3IEVnbEJhc2UxNChzaGFyZWRDb250ZXh0LCBFZ2xCYXNlLkNPTkZJR19SRUNPUkRBQkxFKTsK
LSAgICAgICAgLy8gQ3JlYXRlIGFuIGlucHV0IHN1cmZhY2UgYW5kIGtlZXAgYSByZWZlcmVuY2Ug
c2luY2Ugd2UgbXVzdCByZWxlYXNlIHRoZSBzdXJmYWNlIHdoZW4gZG9uZS4KLSAgICAgICAgaW5w
dXRTdXJmYWNlID0gbWVkaWFDb2RlYy5jcmVhdGVJbnB1dFN1cmZhY2UoKTsKLSAgICAgICAgZWds
QmFzZS5jcmVhdGVTdXJmYWNlKGlucHV0U3VyZmFjZSk7Ci0gICAgICAgIGRyYXdlciA9IG5ldyBH
bFJlY3REcmF3ZXIoKTsKLSAgICAgIH0KLSAgICAgIG1lZGlhQ29kZWMuc3RhcnQoKTsKLSAgICAg
IG91dHB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldE91dHB1dEJ1ZmZlcnMoKTsKLSAgICAgIExv
Z2dpbmcuZChUQUcsICJPdXRwdXQgYnVmZmVyczogIiArIG91dHB1dEJ1ZmZlcnMubGVuZ3RoKTsK
LQotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAiaW5pdEVuY29kZSBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBCeXRlQnVmZmVyW10gZ2V0SW5wdXRCdWZm
ZXJzKCkgewotICAgIEJ5dGVCdWZmZXJbXSBpbnB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldElu
cHV0QnVmZmVycygpOwotICAgIExvZ2dpbmcuZChUQUcsICJJbnB1dCBidWZmZXJzOiAiICsgaW5w
dXRCdWZmZXJzLmxlbmd0aCk7Ci0gICAgcmV0dXJuIGlucHV0QnVmZmVyczsKLSAgfQotCi0gIGJv
b2xlYW4gZW5jb2RlQnVmZmVyKAotICAgICAgYm9vbGVhbiBpc0tleWZyYW1lLCBpbnQgaW5wdXRC
dWZmZXIsIGludCBzaXplLCBsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSB7Ci0gICAgY2hl
Y2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgaWYgKGlzS2V5ZnJhbWUp
IHsKLSAgICAgICAgLy8gSWRlYWxseSBNZWRpYUNvZGVjIHdvdWxkIGhvbm9yIEJVRkZFUl9GTEFH
X1NZTkNfRlJBTUUgc28gd2UgY291bGQKLSAgICAgICAgLy8gaW5kaWNhdGUgdGhpcyBpbiBxdWV1
ZUlucHV0QnVmZmVyKCkgYmVsb3cgYW5kIGd1YXJhbnRlZSBfdGhpc18gZnJhbWUKLSAgICAgICAg
Ly8gYmUgZW5jb2RlZCBhcyBhIGtleSBmcmFtZSwgYnV0IHNhZGx5IHRoYXQgZmxhZyBpcyBpZ25v
cmVkLiAgSW5zdGVhZCwKLSAgICAgICAgLy8gd2UgcmVxdWVzdCBhIGtleSBmcmFtZSAic29vbiIu
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTeW5jIGZyYW1lIHJlcXVlc3QiKTsKLSAgICAgICAg
QnVuZGxlIGIgPSBuZXcgQnVuZGxlKCk7Ci0gICAgICAgIGIucHV0SW50KE1lZGlhQ29kZWMuUEFS
QU1FVEVSX0tFWV9SRVFVRVNUX1NZTkNfRlJBTUUsIDApOwotICAgICAgICBtZWRpYUNvZGVjLnNl
dFBhcmFtZXRlcnMoYik7Ci0gICAgICB9Ci0gICAgICBtZWRpYUNvZGVjLnF1ZXVlSW5wdXRCdWZm
ZXIoaW5wdXRCdWZmZXIsIDAsIHNpemUsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzLCAwKTsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiZW5jb2RlQnVmZmVyIGZhaWxlZCIsIGUpOwotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGJvb2xlYW4gZW5jb2RlVGV4dHVyZShib29s
ZWFuIGlzS2V5ZnJhbWUsIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtYXRpb25N
YXRyaXgsCi0gICAgICBsb25nIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSB7Ci0gICAgY2hlY2tP
bk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgaWYgKGlzS2V5ZnJhbWUpIHsK
LSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlN5bmMgZnJhbWUgcmVxdWVzdCIpOwotICAgICAgICBC
dW5kbGUgYiA9IG5ldyBCdW5kbGUoKTsKLSAgICAgICAgYi5wdXRJbnQoTWVkaWFDb2RlYy5QQVJB
TUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFNRSwgMCk7Ci0gICAgICAgIG1lZGlhQ29kZWMuc2V0
UGFyYW1ldGVycyhiKTsKLSAgICAgIH0KLSAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAg
ICAgIC8vIFRPRE8ocGVya2opOiBnbENsZWFyKCkgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSBzaW5j
ZSBldmVyeSBwaXhlbCBpcyBjb3ZlcmVkIGFueXdheSwKLSAgICAgIC8vIGJ1dCBpdCdzIGEgd29y
a2Fyb3VuZCBmb3IgYnVnIHdlYnJ0Yzo1MTQ3LgotICAgICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIw
LkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgICAgZHJhd2VyLmRyYXdPZXMob2VzVGV4dHVyZUlk
LCB0cmFuc2Zvcm1hdGlvbk1hdHJpeCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKFRpbWVVbml0Lk1JQ1JPU0VDT05EUy50b05h
bm9zKHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJlbmNv
ZGVUZXh0dXJlIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQot
Ci0gIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRW5j
b2RlciIpOwotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0KLSAgICAvLyBSdW4gTWVk
aWFjb2RlYyBzdG9wKCkgYW5kIHJlbGVhc2UoKSBvbiBzZXBhcmF0ZSB0aHJlYWQgc2luY2Ugc29t
ZXRpbWUKLSAgICAvLyBNZWRpYWNvZGVjLnN0b3AoKSBtYXkgaGFuZy4KLSAgICBmaW5hbCBDb3Vu
dERvd25MYXRjaCByZWxlYXNlRG9uZSA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLQotICAgIFJ1
bm5hYmxlIHJ1bk1lZGlhQ29kZWNSZWxlYXNlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIgb24gcmVsZWFzZSB0aHJlYWQi
KTsKLSAgICAgICAgICBtZWRpYUNvZGVjLnN0b3AoKTsKLSAgICAgICAgICBtZWRpYUNvZGVjLnJl
bGVhc2UoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRW5jb2RlciBv
biByZWxlYXNlIHRocmVhZCBkb25lIik7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIk1lZGlhIGVuY29kZXIgcmVsZWFzZSBmYWlsZWQi
LCBlKTsKLSAgICAgICAgfQotICAgICAgICByZWxlYXNlRG9uZS5jb3VudERvd24oKTsKLSAgICAg
IH0KLSAgICB9OwotICAgIG5ldyBUaHJlYWQocnVuTWVkaWFDb2RlY1JlbGVhc2UpLnN0YXJ0KCk7
Ci0KLSAgICBpZiAoIVRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5KHJlbGVhc2VEb25l
LCBNRURJQV9DT0RFQ19SRUxFQVNFX1RJTUVPVVRfTVMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFH
LCAiTWVkaWEgZW5jb2RlciByZWxlYXNlIHRpbWVvdXQiKTsKLSAgICAgIGNvZGVjRXJyb3JzKys7
Ci0gICAgICBpZiAoZXJyb3JDYWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcuZShU
QUcsICJJbnZva2UgY29kZWMgZXJyb3IgY2FsbGJhY2suIEVycm9yczogIiArIGNvZGVjRXJyb3Jz
KTsKLSAgICAgICAgZXJyb3JDYWxsYmFjay5vbk1lZGlhQ29kZWNWaWRlb0VuY29kZXJDcml0aWNh
bEVycm9yKGNvZGVjRXJyb3JzKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBtZWRpYUNvZGVjID0g
bnVsbDsKLSAgICBtZWRpYUNvZGVjVGhyZWFkID0gbnVsbDsKLSAgICBpZiAoZHJhd2VyICE9IG51
bGwpIHsKLSAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgICBkcmF3ZXIgPSBudWxsOwotICAg
IH0KLSAgICBpZiAoZWdsQmFzZSAhPSBudWxsKSB7Ci0gICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsK
LSAgICAgIGVnbEJhc2UgPSBudWxsOwotICAgIH0KLSAgICBpZiAoaW5wdXRTdXJmYWNlICE9IG51
bGwpIHsKLSAgICAgIGlucHV0U3VyZmFjZS5yZWxlYXNlKCk7Ci0gICAgICBpbnB1dFN1cmZhY2Ug
PSBudWxsOwotICAgIH0KLSAgICBydW5uaW5nSW5zdGFuY2UgPSBudWxsOwotICAgIExvZ2dpbmcu
ZChUQUcsICJKYXZhIHJlbGVhc2VFbmNvZGVyIGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgYm9v
bGVhbiBzZXRSYXRlcyhpbnQga2JwcywgaW50IGZyYW1lUmF0ZSkgewotICAgIGNoZWNrT25NZWRp
YUNvZGVjVGhyZWFkKCk7Ci0KLSAgICBpbnQgY29kZWNCaXRyYXRlQnBzID0gMTAwMCAqIGticHM7
Ci0gICAgaWYgKGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRqdXN0bWVudFR5cGUu
RFlOQU1JQ19BREpVU1RNRU5UKSB7Ci0gICAgICBiaXRyYXRlQWNjdW11bGF0b3JNYXggPSBjb2Rl
Y0JpdHJhdGVCcHMgLyA4LjA7Ci0gICAgICBpZiAodGFyZ2V0Qml0cmF0ZUJwcyA+IDAgJiYgY29k
ZWNCaXRyYXRlQnBzIDwgdGFyZ2V0Qml0cmF0ZUJwcykgewotICAgICAgICAvLyBSZXNjYWxlIHRo
ZSBhY2N1bXVsYXRvciBsZXZlbCBpZiB0aGUgYWNjdW11bGF0b3IgbWF4IGRlY3JlYXNlcwotICAg
ICAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBiaXRyYXRlQWNjdW11bGF0b3IgKiBjb2RlY0JpdHJh
dGVCcHMgLyB0YXJnZXRCaXRyYXRlQnBzOwotICAgICAgfQotICAgIH0KLSAgICB0YXJnZXRCaXRy
YXRlQnBzID0gY29kZWNCaXRyYXRlQnBzOwotICAgIHRhcmdldEZwcyA9IGZyYW1lUmF0ZTsKLQot
ICAgIC8vIEFkanVzdCBhY3R1YWwgZW5jb2RlciBiaXRyYXRlIGJhc2VkIG9uIGJpdHJhdGUgYWRq
dXN0bWVudCB0eXBlLgotICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFR5cGUgPT0gQml0cmF0ZUFk
anVzdG1lbnRUeXBlLkZSQU1FUkFURV9BREpVU1RNRU5UICYmIHRhcmdldEZwcyA+IDApIHsKLSAg
ICAgIGNvZGVjQml0cmF0ZUJwcyA9IEJJVFJBVEVfQURKVVNUTUVOVF9GUFMgKiB0YXJnZXRCaXRy
YXRlQnBzIC8gdGFyZ2V0RnBzOwotICAgICAgTG9nZ2luZy52KFRBRywKLSAgICAgICAgICAic2V0
UmF0ZXM6ICIgKyBrYnBzICsgIiAtPiAiICsgKGNvZGVjQml0cmF0ZUJwcyAvIDEwMDApICsgIiBr
YnBzLiBGcHM6ICIgKyB0YXJnZXRGcHMpOwotICAgIH0gZWxzZSBpZiAoYml0cmF0ZUFkanVzdG1l
bnRUeXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5EWU5BTUlDX0FESlVTVE1FTlQpIHsKLSAg
ICAgIExvZ2dpbmcudihUQUcsICJzZXRSYXRlczogIiArIGticHMgKyAiIGticHMuIEZwczogIiAr
IHRhcmdldEZwcyArICIuIEV4cFNjYWxlOiAiCi0gICAgICAgICAgICAgICsgYml0cmF0ZUFkanVz
dG1lbnRTY2FsZUV4cCk7Ci0gICAgICBpZiAoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCAhPSAw
KSB7Ci0gICAgICAgIGNvZGVjQml0cmF0ZUJwcyA9IChpbnQpIChjb2RlY0JpdHJhdGVCcHMgKiBn
ZXRCaXRyYXRlU2NhbGUoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCkpOwotICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICBMb2dnaW5nLnYoVEFHLCAic2V0UmF0ZXM6ICIgKyBrYnBzICsgIiBr
YnBzLiBGcHM6ICIgKyB0YXJnZXRGcHMpOwotICAgIH0KLQotICAgIHRyeSB7Ci0gICAgICBCdW5k
bGUgcGFyYW1zID0gbmV3IEJ1bmRsZSgpOwotICAgICAgcGFyYW1zLnB1dEludChNZWRpYUNvZGVj
LlBBUkFNRVRFUl9LRVlfVklERU9fQklUUkFURSwgY29kZWNCaXRyYXRlQnBzKTsKLSAgICAgIG1l
ZGlhQ29kZWMuc2V0UGFyYW1ldGVycyhwYXJhbXMpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcs
ICJzZXRSYXRlcyBmYWlsZWQiLCBlKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0K
LQotICAvLyBEZXF1ZXVlIGFuIGlucHV0IGJ1ZmZlciBhbmQgcmV0dXJuIGl0cyBpbmRleCwgLTEg
aWYgbm8gaW5wdXQgYnVmZmVyIGlzCi0gIC8vIGF2YWlsYWJsZSwgb3IgLTIgaWYgdGhlIGNvZGVj
IGlzIG5vIGxvbmdlciBvcGVyYXRpdmUuCi0gIGludCBkZXF1ZXVlSW5wdXRCdWZmZXIoKSB7Ci0g
ICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIG1l
ZGlhQ29kZWMuZGVxdWV1ZUlucHV0QnVmZmVyKERFUVVFVUVfVElNRU9VVCk7Ci0gICAgfSBjYXRj
aCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZXF1
ZXVlSW50cHV0QnVmZmVyIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIC0yOwotICAgIH0KLSAg
fQotCi0gIC8vIEhlbHBlciBzdHJ1Y3QgZm9yIGRlcXVldWVPdXRwdXRCdWZmZXIoKSBiZWxvdy4K
LSAgc3RhdGljIGNsYXNzIE91dHB1dEJ1ZmZlckluZm8gewotICAgIHB1YmxpYyBPdXRwdXRCdWZm
ZXJJbmZvKAotICAgICAgICBpbnQgaW5kZXgsIEJ5dGVCdWZmZXIgYnVmZmVyLCBib29sZWFuIGlz
S2V5RnJhbWUsIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMpIHsKLSAgICAgIHRoaXMuaW5k
ZXggPSBpbmRleDsKLSAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwotICAgICAgdGhpcy5pc0tl
eUZyYW1lID0gaXNLZXlGcmFtZTsKLSAgICAgIHRoaXMucHJlc2VudGF0aW9uVGltZXN0YW1wVXMg
PSBwcmVzZW50YXRpb25UaW1lc3RhbXBVczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgaW50
IGluZGV4OwotICAgIHB1YmxpYyBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlcjsKLSAgICBwdWJsaWMg
ZmluYWwgYm9vbGVhbiBpc0tleUZyYW1lOwotICAgIHB1YmxpYyBmaW5hbCBsb25nIHByZXNlbnRh
dGlvblRpbWVzdGFtcFVzOwotICB9Ci0KLSAgLy8gRGVxdWV1ZSBhbmQgcmV0dXJuIGFuIG91dHB1
dCBidWZmZXIsIG9yIG51bGwgaWYgbm8gb3V0cHV0IGlzIHJlYWR5LiAgUmV0dXJuCi0gIC8vIGEg
ZmFrZSBPdXRwdXRCdWZmZXJJbmZvIHdpdGggaW5kZXggLTEgaWYgdGhlIGNvZGVjIGlzIG5vIGxv
bmdlciBvcGVyYWJsZS4KLSAgT3V0cHV0QnVmZmVySW5mbyBkZXF1ZXVlT3V0cHV0QnVmZmVyKCkg
ewotICAgIGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIE1lZGlh
Q29kZWMuQnVmZmVySW5mbyBpbmZvID0gbmV3IE1lZGlhQ29kZWMuQnVmZmVySW5mbygpOwotICAg
ICAgaW50IHJlc3VsdCA9IG1lZGlhQ29kZWMuZGVxdWV1ZU91dHB1dEJ1ZmZlcihpbmZvLCBERVFV
RVVFX1RJTUVPVVQpOwotICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyBjb25maWcgZnJhbWUgYW5k
IHNhdmUgY29uZmlndXJhdGlvbiBkYXRhLgotICAgICAgaWYgKHJlc3VsdCA+PSAwKSB7Ci0gICAg
ICAgIGJvb2xlYW4gaXNDb25maWdGcmFtZSA9IChpbmZvLmZsYWdzICYgTWVkaWFDb2RlYy5CVUZG
RVJfRkxBR19DT0RFQ19DT05GSUcpICE9IDA7Ci0gICAgICAgIGlmIChpc0NvbmZpZ0ZyYW1lKSB7
Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNvbmZpZyBmcmFtZSBnZW5lcmF0ZWQuIE9mZnNl
dDogIiArIGluZm8ub2Zmc2V0ICsgIi4gU2l6ZTogIiArIGluZm8uc2l6ZSk7Ci0gICAgICAgICAg
Y29uZmlnRGF0YSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoaW5mby5zaXplKTsKLSAgICAg
ICAgICBvdXRwdXRCdWZmZXJzW3Jlc3VsdF0ucG9zaXRpb24oaW5mby5vZmZzZXQpOwotICAgICAg
ICAgIG91dHB1dEJ1ZmZlcnNbcmVzdWx0XS5saW1pdChpbmZvLm9mZnNldCArIGluZm8uc2l6ZSk7
Ci0gICAgICAgICAgY29uZmlnRGF0YS5wdXQob3V0cHV0QnVmZmVyc1tyZXN1bHRdKTsKLSAgICAg
ICAgICAvLyBSZWxlYXNlIGJ1ZmZlciBiYWNrLgotICAgICAgICAgIG1lZGlhQ29kZWMucmVsZWFz
ZU91dHB1dEJ1ZmZlcihyZXN1bHQsIGZhbHNlKTsKLSAgICAgICAgICAvLyBRdWVyeSBuZXh0IG91
dHB1dC4KLSAgICAgICAgICByZXN1bHQgPSBtZWRpYUNvZGVjLmRlcXVldWVPdXRwdXRCdWZmZXIo
aW5mbywgREVRVUVVRV9USU1FT1VUKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKHJl
c3VsdCA+PSAwKSB7Ci0gICAgICAgIC8vIE1lZGlhQ29kZWMgZG9lc24ndCBjYXJlIGFib3V0IEJ1
ZmZlciBwb3NpdGlvbi9yZW1haW5pbmcvZXRjIHNvIHdlIGNhbgotICAgICAgICAvLyBtZXNzIHdp
dGggdGhlbSB0byBnZXQgYSBzbGljZSBhbmQgYXZvaWQgaGF2aW5nIHRvIHBhc3MgZXh0cmEKLSAg
ICAgICAgLy8gKEJ1ZmZlckluZm8tcmVsYXRlZCkgcGFyYW1ldGVycyBiYWNrIHRvIEMrKy4KLSAg
ICAgICAgQnl0ZUJ1ZmZlciBvdXRwdXRCdWZmZXIgPSBvdXRwdXRCdWZmZXJzW3Jlc3VsdF0uZHVw
bGljYXRlKCk7Ci0gICAgICAgIG91dHB1dEJ1ZmZlci5wb3NpdGlvbihpbmZvLm9mZnNldCk7Ci0g
ICAgICAgIG91dHB1dEJ1ZmZlci5saW1pdChpbmZvLm9mZnNldCArIGluZm8uc2l6ZSk7Ci0gICAg
ICAgIHJlcG9ydEVuY29kZWRGcmFtZShpbmZvLnNpemUpOwotCi0gICAgICAgIC8vIENoZWNrIGtl
eSBmcmFtZSBmbGFnLgotICAgICAgICBib29sZWFuIGlzS2V5RnJhbWUgPSAoaW5mby5mbGFncyAm
IE1lZGlhQ29kZWMuQlVGRkVSX0ZMQUdfU1lOQ19GUkFNRSkgIT0gMDsKLSAgICAgICAgaWYgKGlz
S2V5RnJhbWUpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3luYyBmcmFtZSBnZW5lcmF0
ZWQiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNLZXlGcmFtZSAmJiB0eXBlID09IFZpZGVv
Q29kZWNUeXBlLlZJREVPX0NPREVDX0gyNjQpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
QXBwZW5kaW5nIGNvbmZpZyBmcmFtZSBvZiBzaXplICIgKyBjb25maWdEYXRhLmNhcGFjaXR5KCkK
LSAgICAgICAgICAgICAgICAgICsgIiB0byBvdXRwdXQgYnVmZmVyIHdpdGggb2Zmc2V0ICIgKyBp
bmZvLm9mZnNldCArICIsIHNpemUgIiArIGluZm8uc2l6ZSk7Ci0gICAgICAgICAgLy8gRm9yIEgu
MjY0IGtleSBmcmFtZSBhcHBlbmQgU1BTIGFuZCBQUFMgTkFMcyBhdCB0aGUgc3RhcnQKLSAgICAg
ICAgICBCeXRlQnVmZmVyIGtleUZyYW1lQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVj
dChjb25maWdEYXRhLmNhcGFjaXR5KCkgKyBpbmZvLnNpemUpOwotICAgICAgICAgIGNvbmZpZ0Rh
dGEucmV3aW5kKCk7Ci0gICAgICAgICAga2V5RnJhbWVCdWZmZXIucHV0KGNvbmZpZ0RhdGEpOwot
ICAgICAgICAgIGtleUZyYW1lQnVmZmVyLnB1dChvdXRwdXRCdWZmZXIpOwotICAgICAgICAgIGtl
eUZyYW1lQnVmZmVyLnBvc2l0aW9uKDApOwotICAgICAgICAgIHJldHVybiBuZXcgT3V0cHV0QnVm
ZmVySW5mbyhyZXN1bHQsIGtleUZyYW1lQnVmZmVyLCBpc0tleUZyYW1lLCBpbmZvLnByZXNlbnRh
dGlvblRpbWVVcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBPdXRw
dXRCdWZmZXJJbmZvKAotICAgICAgICAgICAgICByZXN1bHQsIG91dHB1dEJ1ZmZlci5zbGljZSgp
LCBpc0tleUZyYW1lLCBpbmZvLnByZXNlbnRhdGlvblRpbWVVcyk7Ci0gICAgICAgIH0KLSAgICAg
IH0gZWxzZSBpZiAocmVzdWx0ID09IE1lZGlhQ29kZWMuSU5GT19PVVRQVVRfQlVGRkVSU19DSEFO
R0VEKSB7Ci0gICAgICAgIG91dHB1dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldE91dHB1dEJ1ZmZl
cnMoKTsKLSAgICAgICAgcmV0dXJuIGRlcXVldWVPdXRwdXRCdWZmZXIoKTsKLSAgICAgIH0gZWxz
ZSBpZiAocmVzdWx0ID09IE1lZGlhQ29kZWMuSU5GT19PVVRQVVRfRk9STUFUX0NIQU5HRUQpIHsK
LSAgICAgICAgcmV0dXJuIGRlcXVldWVPdXRwdXRCdWZmZXIoKTsKLSAgICAgIH0gZWxzZSBpZiAo
cmVzdWx0ID09IE1lZGlhQ29kZWMuSU5GT19UUllfQUdBSU5fTEFURVIpIHsKLSAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZGVx
dWV1ZU91dHB1dEJ1ZmZlcjogIiArIHJlc3VsdCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRl
RXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJkZXF1ZXVlT3V0cHV0QnVmZmVy
IGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIG5ldyBPdXRwdXRCdWZmZXJJbmZvKC0xLCBudWxs
LCBmYWxzZSwgLTEpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgZG91YmxlIGdldEJpdHJhdGVT
Y2FsZShpbnQgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCkgewotICAgIHJldHVybiBNYXRoLnBv
dyhCSVRSQVRFX0NPUlJFQ1RJT05fTUFYX1NDQUxFLAotICAgICAgICAoZG91YmxlKSBiaXRyYXRl
QWRqdXN0bWVudFNjYWxlRXhwIC8gQklUUkFURV9DT1JSRUNUSU9OX1NURVBTKTsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCByZXBvcnRFbmNvZGVkRnJhbWUoaW50IHNpemUpIHsKLSAgICBpZiAodGFy
Z2V0RnBzID09IDAgfHwgYml0cmF0ZUFkanVzdG1lbnRUeXBlICE9IEJpdHJhdGVBZGp1c3RtZW50
VHlwZS5EWU5BTUlDX0FESlVTVE1FTlQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBBY2N1bXVsYXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYWN0aWFsIGFuZCBleHBlY3RlZCBm
cmFtZSBzaXplcy4KLSAgICBkb3VibGUgZXhwZWN0ZWRCeXRlc1BlckZyYW1lID0gdGFyZ2V0Qml0
cmF0ZUJwcyAvICg4LjAgKiB0YXJnZXRGcHMpOwotICAgIGJpdHJhdGVBY2N1bXVsYXRvciArPSAo
c2l6ZSAtIGV4cGVjdGVkQnl0ZXNQZXJGcmFtZSk7Ci0gICAgYml0cmF0ZU9ic2VydmF0aW9uVGlt
ZU1zICs9IDEwMDAuMCAvIHRhcmdldEZwczsKLQotICAgIC8vIFB1dCBhIGNhcCBvbiB0aGUgYWNj
dW11bGF0b3IsIGkuZS4sIGRvbid0IGxldCBpdCBncm93IGJleW9uZCBzb21lIGxldmVsIHRvIGF2
b2lkCi0gICAgLy8gdXNpbmcgdG9vIG9sZCBkYXRhIGZvciBiaXRyYXRlIGFkanVzdG1lbnQuCi0g
ICAgZG91YmxlIGJpdHJhdGVBY2N1bXVsYXRvckNhcCA9IEJJVFJBVEVfQ09SUkVDVElPTl9TRUMg
KiBiaXRyYXRlQWNjdW11bGF0b3JNYXg7Ci0gICAgYml0cmF0ZUFjY3VtdWxhdG9yID0gTWF0aC5t
aW4oYml0cmF0ZUFjY3VtdWxhdG9yLCBiaXRyYXRlQWNjdW11bGF0b3JDYXApOwotICAgIGJpdHJh
dGVBY2N1bXVsYXRvciA9IE1hdGgubWF4KGJpdHJhdGVBY2N1bXVsYXRvciwgLWJpdHJhdGVBY2N1
bXVsYXRvckNhcCk7Ci0KLSAgICAvLyBEbyBiaXRyYXRlIGFkanVzdG1lbnQgZXZlcnkgMyBzZWNv
bmRzIGlmIGFjdHVhbCBlbmNvZGVyIGJpdHJhdGUgZGV2aWF0ZXMgdG9vIG11Y2gKLSAgICAvLyBm
b3JtIHRoZSB0YXJnZXQgdmFsdWUuCi0gICAgaWYgKGJpdHJhdGVPYnNlcnZhdGlvblRpbWVNcyA+
IDEwMDAgKiBCSVRSQVRFX0NPUlJFQ1RJT05fU0VDKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAi
QWNjOiAiICsgKGludCkgYml0cmF0ZUFjY3VtdWxhdG9yICsgIi4gTWF4OiAiICsgKGludCkgYml0
cmF0ZUFjY3VtdWxhdG9yTWF4Ci0gICAgICAgICAgICAgICsgIi4gRXhwU2NhbGU6ICIgKyBiaXRy
YXRlQWRqdXN0bWVudFNjYWxlRXhwKTsKLSAgICAgIGJvb2xlYW4gYml0cmF0ZUFkanVzdG1lbnRT
Y2FsZUNoYW5nZWQgPSBmYWxzZTsKLSAgICAgIGlmIChiaXRyYXRlQWNjdW11bGF0b3IgPiBiaXRy
YXRlQWNjdW11bGF0b3JNYXgpIHsKLSAgICAgICAgLy8gRW5jb2RlciBnZW5lcmF0ZXMgdG9vIGhp
Z2ggYml0cmF0ZSAtIG5lZWQgdG8gcmVkdWNlIHRoZSBzY2FsZS4KLSAgICAgICAgYml0cmF0ZUFj
Y3VtdWxhdG9yID0gYml0cmF0ZUFjY3VtdWxhdG9yTWF4OwotICAgICAgICBiaXRyYXRlQWRqdXN0
bWVudFNjYWxlRXhwLS07Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVDaGFuZ2VkID0g
dHJ1ZTsKLSAgICAgIH0gZWxzZSBpZiAoYml0cmF0ZUFjY3VtdWxhdG9yIDwgLWJpdHJhdGVBY2N1
bXVsYXRvck1heCkgewotICAgICAgICAvLyBFbmNvZGVyIGdlbmVyYXRlcyB0b28gbG93IGJpdHJh
dGUgLSBuZWVkIHRvIGluY3JlYXNlIHRoZSBzY2FsZS4KLSAgICAgICAgYml0cmF0ZUFkanVzdG1l
bnRTY2FsZUV4cCsrOwotICAgICAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSAtYml0cmF0ZUFjY3Vt
dWxhdG9yTWF4OwotICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlQ2hhbmdlZCA9IHRydWU7
Ci0gICAgICB9Ci0gICAgICBpZiAoYml0cmF0ZUFkanVzdG1lbnRTY2FsZUNoYW5nZWQpIHsKLSAg
ICAgICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCA9IE1hdGgubWluKGJpdHJhdGVBZGp1c3Rt
ZW50U2NhbGVFeHAsIEJJVFJBVEVfQ09SUkVDVElPTl9TVEVQUyk7Ci0gICAgICAgIGJpdHJhdGVB
ZGp1c3RtZW50U2NhbGVFeHAgPSBNYXRoLm1heChiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwLCAt
QklUUkFURV9DT1JSRUNUSU9OX1NURVBTKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkFkanVz
dGluZyBiaXRyYXRlIHNjYWxlIHRvICIgKyBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwICsgIi4g
VmFsdWU6ICIKLSAgICAgICAgICAgICAgICArIGdldEJpdHJhdGVTY2FsZShiaXRyYXRlQWRqdXN0
bWVudFNjYWxlRXhwKSk7Ci0gICAgICAgIHNldFJhdGVzKHRhcmdldEJpdHJhdGVCcHMgLyAxMDAw
LCB0YXJnZXRGcHMpOwotICAgICAgfQotICAgICAgYml0cmF0ZU9ic2VydmF0aW9uVGltZU1zID0g
MDsKLSAgICB9Ci0gIH0KLQotICAvLyBSZWxlYXNlIGEgZGVxdWV1ZWQgb3V0cHV0IGJ1ZmZlciBi
YWNrIHRvIHRoZSBjb2RlYyBmb3IgcmUtdXNlLiAgUmV0dXJuCi0gIC8vIGZhbHNlIGlmIHRoZSBj
b2RlYyBpcyBubyBsb25nZXIgb3BlcmFibGUuCi0gIGJvb2xlYW4gcmVsZWFzZU91dHB1dEJ1ZmZl
cihpbnQgaW5kZXgpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIHRyeSB7
Ci0gICAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoaW5kZXgsIGZhbHNlKTsKLSAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAicmVsZWFzZU91dHB1dEJ1ZmZlciBmYWlsZWQiLCBlKTsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvTWVkaWFDb25zdHJhaW50cy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
TWVkaWFDb25zdHJhaW50cy5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL01lZGlhQ29uc3RyYWludHMuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDg0ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEu
dXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIERlc2Ny
aXB0aW9uIG9mIG1lZGlhIGNvbnN0cmFpbnRzIGZvciB7QGNvZGUgTWVkaWFTdHJlYW19IGFuZAot
ICoge0Bjb2RlIFBlZXJDb25uZWN0aW9ufS4KLSAqLwotcHVibGljIGNsYXNzIE1lZGlhQ29uc3Ry
YWludHMgewotICAvKiogU2ltcGxlIFN0cmluZyBrZXkvdmFsdWUgcGFpci4gKi8KLSAgcHVibGlj
IHN0YXRpYyBjbGFzcyBLZXlWYWx1ZVBhaXIgewotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIGtl
eTsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyB2YWx1ZTsKLQotICAgIHB1YmxpYyBLZXlWYWx1
ZVBhaXIoU3RyaW5nIGtleSwgU3RyaW5nIHZhbHVlKSB7Ci0gICAgICB0aGlzLmtleSA9IGtleTsK
LSAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdl
dEtleSgpIHsKLSAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBn
ZXRWYWx1ZSgpIHsKLSAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3Ry
aW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIGtleSArICI6ICIgKyB2YWx1ZTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVy
KSB7Ci0gICAgICBpZiAodGhpcyA9PSBvdGhlcikgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChvdGhlciA9PSBudWxsIHx8IGdldENsYXNzKCkgIT0gb3RoZXIuZ2V0
Q2xhc3MoKSkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBLZXlWYWx1
ZVBhaXIgdGhhdCA9IChLZXlWYWx1ZVBhaXIpIG90aGVyOwotICAgICAgcmV0dXJuIGtleS5lcXVh
bHModGhhdC5rZXkpICYmIHZhbHVlLmVxdWFscyh0aGF0LnZhbHVlKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJuIGtleS5o
YXNoQ29kZSgpICsgdmFsdWUuaGFzaENvZGUoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgZmlu
YWwgTGlzdDxLZXlWYWx1ZVBhaXI+IG1hbmRhdG9yeTsKLSAgcHVibGljIGZpbmFsIExpc3Q8S2V5
VmFsdWVQYWlyPiBvcHRpb25hbDsKLQotICBwdWJsaWMgTWVkaWFDb25zdHJhaW50cygpIHsKLSAg
ICBtYW5kYXRvcnkgPSBuZXcgTGlua2VkTGlzdDxLZXlWYWx1ZVBhaXI+KCk7Ci0gICAgb3B0aW9u
YWwgPSBuZXcgTGlua2VkTGlzdDxLZXlWYWx1ZVBhaXI+KCk7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBTdHJpbmcgc3RyaW5naWZ5S2V5VmFsdWVQYWlyTGlzdChMaXN0PEtleVZhbHVlUGFpcj4g
bGlzdCkgewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCJb
Iik7Ci0gICAgZm9yIChLZXlWYWx1ZVBhaXIgcGFpciA6IGxpc3QpIHsKLSAgICAgIGlmIChidWls
ZGVyLmxlbmd0aCgpID4gMSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKLSAgICAg
IH0KLSAgICAgIGJ1aWxkZXIuYXBwZW5kKHBhaXIudG9TdHJpbmcoKSk7Ci0gICAgfQotICAgIHJl
dHVybiBidWlsZGVyLmFwcGVuZCgiXSIpLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwdWJsaWMgU3Ry
aW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiAibWFuZGF0b3J5OiAiICsgc3RyaW5naWZ5S2V5
VmFsdWVQYWlyTGlzdChtYW5kYXRvcnkpICsgIiwgb3B0aW9uYWw6ICIKLSAgICAgICAgKyBzdHJp
bmdpZnlLZXlWYWx1ZVBhaXJMaXN0KG9wdGlvbmFsKTsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9NZWRpYVNvdXJjZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
TWVkaWFTb3VyY2UuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9N
ZWRpYVNvdXJjZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBh
IEMrKyBNZWRpYVNvdXJjZUludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVNvdXJjZSB7
Ci0gIC8qKiBUcmFja3MgTWVkaWFTb3VyY2VJbnRlcmZhY2UuU291cmNlU3RhdGUgKi8KLSAgcHVi
bGljIGVudW0gU3RhdGUgeyBJTklUSUFMSVpJTkcsIExJVkUsIEVOREVELCBNVVRFRCB9Ci0KLSAg
ZmluYWwgbG9uZyBuYXRpdmVTb3VyY2U7IC8vIFBhY2thZ2UtcHJvdGVjdGVkIGZvciBQZWVyQ29u
bmVjdGlvbkZhY3RvcnkuCi0KLSAgcHVibGljIE1lZGlhU291cmNlKGxvbmcgbmF0aXZlU291cmNl
KSB7Ci0gICAgdGhpcy5uYXRpdmVTb3VyY2UgPSBuYXRpdmVTb3VyY2U7Ci0gIH0KLQotICBwdWJs
aWMgU3RhdGUgc3RhdGUoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVN0YXRlKG5hdGl2ZVNvdXJjZSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGZyZWUobmF0aXZlU291cmNl
KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdGF0ZSBuYXRpdmVTdGF0ZShsb25n
IHBvaW50ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBuYXRp
dmVTb3VyY2UpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbS5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFTdHJlYW0uamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbS5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndl
YnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0vKiogSmF2YSB3cmFwcGVy
IGZvciBhIEMrKyBNZWRpYVN0cmVhbUludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBNZWRpYVN0
cmVhbSB7Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRMaXN0PEF1ZGlvVHJhY2s+IGF1ZGlvVHJhY2tz
OwotICBwdWJsaWMgZmluYWwgTGlua2VkTGlzdDxWaWRlb1RyYWNrPiB2aWRlb1RyYWNrczsKLSAg
cHVibGljIGZpbmFsIExpbmtlZExpc3Q8VmlkZW9UcmFjaz4gcHJlc2VydmVkVmlkZW9UcmFja3M7
Ci0gIC8vIFBhY2thZ2UtcHJvdGVjdGVkIGZvciBQZWVyQ29ubmVjdGlvbi4KLSAgZmluYWwgbG9u
ZyBuYXRpdmVTdHJlYW07Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtKGxvbmcgbmF0aXZlU3RyZWFt
KSB7Ci0gICAgYXVkaW9UcmFja3MgPSBuZXcgTGlua2VkTGlzdDxBdWRpb1RyYWNrPigpOwotICAg
IHZpZGVvVHJhY2tzID0gbmV3IExpbmtlZExpc3Q8VmlkZW9UcmFjaz4oKTsKLSAgICBwcmVzZXJ2
ZWRWaWRlb1RyYWNrcyA9IG5ldyBMaW5rZWRMaXN0PFZpZGVvVHJhY2s+KCk7Ci0gICAgdGhpcy5u
YXRpdmVTdHJlYW0gPSBuYXRpdmVTdHJlYW07Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRU
cmFjayhBdWRpb1RyYWNrIHRyYWNrKSB7Ci0gICAgaWYgKG5hdGl2ZUFkZEF1ZGlvVHJhY2sobmF0
aXZlU3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjaykpIHsKLSAgICAgIGF1ZGlvVHJhY2tzLmFkZCh0
cmFjayk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgcHVibGljIGJvb2xlYW4gYWRkVHJhY2soVmlkZW9UcmFjayB0cmFjaykgewotICAgIGlm
IChuYXRpdmVBZGRWaWRlb1RyYWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZlVHJhY2spKSB7
Ci0gICAgICB2aWRlb1RyYWNrcy5hZGQodHJhY2spOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFRyYWNrcyBhZGRlZCBpbiBhZGRUcmFj
aygpIGNhbGwgd2lsbCBiZSBhdXRvIHJlbGVhc2VkIG9uY2UgTWVkaWFTdHJlYW0uZGlzcG9zZSgp
Ci0gIC8vIGlzIGNhbGxlZC4gSWYgdmlkZW8gdHJhY2sgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgYWZ0
ZXIgTWVkaWFTdHJlYW0gaXMgZGVzdHJveWVkIGl0Ci0gIC8vIHNob3VsZCBiZSBhZGRlZCB0byBN
ZWRpYVN0cmVhbSB1c2luZyBhZGRQcmVzZXJ2ZWRUcmFjaygpIGNhbGwuCi0gIHB1YmxpYyBib29s
ZWFuIGFkZFByZXNlcnZlZFRyYWNrKFZpZGVvVHJhY2sgdHJhY2spIHsKLSAgICBpZiAobmF0aXZl
QWRkVmlkZW9UcmFjayhuYXRpdmVTdHJlYW0sIHRyYWNrLm5hdGl2ZVRyYWNrKSkgewotICAgICAg
cHJlc2VydmVkVmlkZW9UcmFja3MuYWRkKHRyYWNrKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVUcmFj
ayhBdWRpb1RyYWNrIHRyYWNrKSB7Ci0gICAgYXVkaW9UcmFja3MucmVtb3ZlKHRyYWNrKTsKLSAg
ICByZXR1cm4gbmF0aXZlUmVtb3ZlQXVkaW9UcmFjayhuYXRpdmVTdHJlYW0sIHRyYWNrLm5hdGl2
ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHJlbW92ZVRyYWNrKFZpZGVvVHJhY2sg
dHJhY2spIHsKLSAgICB2aWRlb1RyYWNrcy5yZW1vdmUodHJhY2spOwotICAgIHByZXNlcnZlZFZp
ZGVvVHJhY2tzLnJlbW92ZSh0cmFjayk7Ci0gICAgcmV0dXJuIG5hdGl2ZVJlbW92ZVZpZGVvVHJh
Y2sobmF0aXZlU3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBkaXNwb3NlKCkgewotICAgIC8vIFJlbW92ZSBhbmQgcmVsZWFzZSBwcmV2aW91c2x5IGFkZGVk
IGF1ZGlvIGFuZCB2aWRlbyB0cmFja3MuCi0gICAgd2hpbGUgKCFhdWRpb1RyYWNrcy5pc0VtcHR5
KCkpIHsKLSAgICAgIEF1ZGlvVHJhY2sgdHJhY2sgPSBhdWRpb1RyYWNrcy5nZXRGaXJzdCgpOwot
ICAgICAgcmVtb3ZlVHJhY2sodHJhY2spOwotICAgICAgdHJhY2suZGlzcG9zZSgpOwotICAgIH0K
LSAgICB3aGlsZSAoIXZpZGVvVHJhY2tzLmlzRW1wdHkoKSkgewotICAgICAgVmlkZW9UcmFjayB0
cmFjayA9IHZpZGVvVHJhY2tzLmdldEZpcnN0KCk7Ci0gICAgICByZW1vdmVUcmFjayh0cmFjayk7
Ci0gICAgICB0cmFjay5kaXNwb3NlKCk7Ci0gICAgfQotICAgIC8vIFJlbW92ZSwgYnV0IGRvIG5v
dCByZWxlYXNlIHByZXNlcnZlZCB2aWRlbyB0cmFja3MuCi0gICAgd2hpbGUgKCFwcmVzZXJ2ZWRW
aWRlb1RyYWNrcy5pc0VtcHR5KCkpIHsKLSAgICAgIHJlbW92ZVRyYWNrKHByZXNlcnZlZFZpZGVv
VHJhY2tzLmdldEZpcnN0KCkpOwotICAgIH0KLSAgICBmcmVlKG5hdGl2ZVN0cmVhbSk7Ci0gIH0K
LQotICBwdWJsaWMgU3RyaW5nIGxhYmVsKCkgewotICAgIHJldHVybiBuYXRpdmVMYWJlbChuYXRp
dmVTdHJlYW0pOwotICB9Ci0KLSAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICByZXR1
cm4gIlsiICsgbGFiZWwoKSArICI6QT0iICsgYXVkaW9UcmFja3Muc2l6ZSgpICsgIjpWPSIgKyB2
aWRlb1RyYWNrcy5zaXplKCkgKyAiXSI7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
Ym9vbGVhbiBuYXRpdmVBZGRBdWRpb1RyYWNrKGxvbmcgbmF0aXZlU3RyZWFtLCBsb25nIG5hdGl2
ZUF1ZGlvVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUFk
ZFZpZGVvVHJhY2sobG9uZyBuYXRpdmVTdHJlYW0sIGxvbmcgbmF0aXZlVmlkZW9UcmFjayk7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlUmVtb3ZlQXVkaW9UcmFjayhs
b25nIG5hdGl2ZVN0cmVhbSwgbG9uZyBuYXRpdmVBdWRpb1RyYWNrKTsKLQotICBwcml2YXRlIHN0
YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVSZW1vdmVWaWRlb1RyYWNrKGxvbmcgbmF0aXZlU3Ry
ZWFtLCBsb25nIG5hdGl2ZVZpZGVvVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBT
dHJpbmcgbmF0aXZlTGFiZWwobG9uZyBuYXRpdmVTdHJlYW0pOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBuYXRpdmVTdHJlYW0pOwotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9NZWRpYVN0cmVhbVRyYWNrLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9NZWRpYVN0cmVhbVRyYWNrLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvTWVkaWFTdHJlYW1UcmFjay5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTkgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2
YSB3cmFwcGVyIGZvciBhIEMrKyBNZWRpYVN0cmVhbVRyYWNrSW50ZXJmYWNlLiAqLwotcHVibGlj
IGNsYXNzIE1lZGlhU3RyZWFtVHJhY2sgewotICAvKiogVHJhY2tzIE1lZGlhU3RyZWFtVHJhY2tJ
bnRlcmZhY2UuVHJhY2tTdGF0ZSAqLwotICBwdWJsaWMgZW51bSBTdGF0ZSB7IExJVkUsIEVOREVE
IH0KLQotICBmaW5hbCBsb25nIG5hdGl2ZVRyYWNrOwotCi0gIHB1YmxpYyBNZWRpYVN0cmVhbVRy
YWNrKGxvbmcgbmF0aXZlVHJhY2spIHsKLSAgICB0aGlzLm5hdGl2ZVRyYWNrID0gbmF0aXZlVHJh
Y2s7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGlkKCkgewotICAgIHJldHVybiBuYXRpdmVJZChu
YXRpdmVUcmFjayk7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGtpbmQoKSB7Ci0gICAgcmV0dXJu
IG5hdGl2ZUtpbmQobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gZW5hYmxl
ZCgpIHsKLSAgICByZXR1cm4gbmF0aXZlRW5hYmxlZChuYXRpdmVUcmFjayk7Ci0gIH0KLQotICBw
dWJsaWMgYm9vbGVhbiBzZXRFbmFibGVkKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgcmV0dXJuIG5h
dGl2ZVNldEVuYWJsZWQobmF0aXZlVHJhY2ssIGVuYWJsZSk7Ci0gIH0KLQotICBwdWJsaWMgU3Rh
dGUgc3RhdGUoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVN0YXRlKG5hdGl2ZVRyYWNrKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgZnJlZShuYXRpdmVUcmFjayk7Ci0gIH0K
LQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RyaW5nIG5hdGl2ZUlkKGxvbmcgbmF0aXZlVHJh
Y2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlS2luZChsb25nIG5h
dGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVFbmFi
bGVkKGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFu
IG5hdGl2ZVNldEVuYWJsZWQobG9uZyBuYXRpdmVUcmFjaywgYm9vbGVhbiBlbmFibGVkKTsKLQot
ICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgU3RhdGUgbmF0aXZlU3RhdGUobG9uZyBuYXRpdmVUcmFj
ayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVRyYWNr
KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWV0cmljcy5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvTWV0cmljcy5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL01ldHJpY3MuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDExNCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZh
LnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vLyBKYXZhLXNpZGUgb2Yg
YW5kcm9pZG1ldHJpY3Nfam5pLmNjLgotLy8KLS8vIFJ0YyBoaXN0b2dyYW1zIGNhbiBiZSBxdWVy
aWVkIHRocm91Z2ggdGhlIEFQSSwgZ2V0QW5kUmVzZXQoKS4KLS8vIFRoZSByZXR1cm5lZCBtYXAg
aG9sZHMgdGhlIG5hbWUgb2YgYSBoaXN0b2dyYW0gYW5kIGl0cyBzYW1wbGVzLgotLy8KLS8vIEV4
YW1wbGUgb2YgfG1hcHwgd2l0aCBvbmUgaGlzdG9ncmFtOgotLy8gfG5hbWV8OiAiV2ViUlRDLlZp
ZGVvLklucHV0RnJhbWVzUGVyU2Vjb25kIgotLy8gICAgIHxtaW58OiAxCi0vLyAgICAgfG1heHw6
IDEwMAotLy8gICAgIHxidWNrZXRDb3VudHw6IDUwCi0vLyAgICAgfHNhbXBsZXN8OiBbMzBdOjEK
LS8vCi0vLyBNb3N0IGhpc3RvZ3JhbXMgYXJlIG5vdCB1cGRhdGVkIGZyZXF1ZW50bHkgKGUuZy4g
bW9zdCB2aWRlbyBtZXRyaWNzIGFyZSBhbgotLy8gYXZlcmFnZSBvdmVyIHRoZSBjYWxsIGFuZCBy
ZWNvcmRlZCB3aGVuIGEgc3RyZWFtIGlzIHJlbW92ZWQpLgotLy8gVGhlIG1ldHJpY3MgY2FuIGZv
ciBleGFtcGxlIGJlIHJldHJpZXZlZCB3aGVuIGEgcGVlciBjb25uZWN0aW9uIGlzIGNsb3NlZC4K
LQotcHVibGljIGNsYXNzIE1ldHJpY3MgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VEFHID0gIk1ldHJpY3MiOwotCi0gIHN0YXRpYyB7Ci0gICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJq
aW5nbGVfcGVlcmNvbm5lY3Rpb25fc28iKTsKLSAgfQotICBwdWJsaWMgZmluYWwgTWFwPFN0cmlu
ZywgSGlzdG9ncmFtSW5mbz4gbWFwID0KLSAgICAgIG5ldyBIYXNoTWFwPFN0cmluZywgSGlzdG9n
cmFtSW5mbz4oKTsgLy8gPG5hbWUsIEhpc3RvZ3JhbUluZm8+Ci0KLSAgLyoqCi0gICAqIENsYXNz
IGhvbGRpbmcgaGlzdG9ncmFtIGluZm9ybWF0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBj
bGFzcyBIaXN0b2dyYW1JbmZvIHsKLSAgICBwdWJsaWMgZmluYWwgaW50IG1pbjsKLSAgICBwdWJs
aWMgZmluYWwgaW50IG1heDsKLSAgICBwdWJsaWMgZmluYWwgaW50IGJ1Y2tldENvdW50OwotICAg
IHB1YmxpYyBmaW5hbCBNYXA8SW50ZWdlciwgSW50ZWdlcj4gc2FtcGxlcyA9Ci0gICAgICAgIG5l
dyBIYXNoTWFwPEludGVnZXIsIEludGVnZXI+KCk7IC8vIDx2YWx1ZSwgIyBvZiBldmVudHM+Ci0K
LSAgICBwdWJsaWMgSGlzdG9ncmFtSW5mbyhpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291
bnQpIHsKLSAgICAgIHRoaXMubWluID0gbWluOwotICAgICAgdGhpcy5tYXggPSBtYXg7Ci0gICAg
ICB0aGlzLmJ1Y2tldENvdW50ID0gYnVja2V0Q291bnQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgYWRkU2FtcGxlKGludCB2YWx1ZSwgaW50IG51bUV2ZW50cykgewotICAgICAgc2FtcGxlcy5w
dXQodmFsdWUsIG51bUV2ZW50cyk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENsYXNzIGZv
ciBob2xkaW5nIHRoZSBuYXRpdmUgcG9pbnRlciBvZiBhIGhpc3RvZ3JhbS4gU2luY2UgdGhlcmUg
aXMgbm8gd2F5IHRvIGRlc3Ryb3kgYQotICAgKiBoaXN0b2dyYW0sIHBsZWFzZSBkb24ndCBjcmVh
dGUgdW5uZWNlc3NhcnkgaW5zdGFuY2VzIG9mIHRoaXMgb2JqZWN0LiBUaGlzIGNsYXNzIGlzIHRo
cmVhZCBzYWZlLgotICAgKgotICAgKiBVc2FnZSBleGFtcGxlOgotICAgKiBwcml2YXRlIHN0YXRp
YyBmaW5hbCBIaXN0b2dyYW0gc29tZU1ldHJpY0hpc3RvZ3JhbSA9Ci0gICAqICAgICBIaXN0b2dy
YW0uY3JlYXRlQ291bnRzKCJXZWJSVEMuVmlkZW8uU29tZU1ldHJpYyIsIDEsIDEwMDAwLCA1MCk7
Ci0gICAqIHNvbWVNZXRyaWNIaXN0b2dyYW0uYWRkU2FtcGxlKHNvbWVWYXJpYWJsZSk7Ci0gICAq
LwotICBzdGF0aWMgY2xhc3MgSGlzdG9ncmFtIHsKLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgaGFu
ZGxlOwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7IC8vIE9ubHkgdXNlZCBmb3IgbG9n
Z2luZy4KLQotICAgIHByaXZhdGUgSGlzdG9ncmFtKGxvbmcgaGFuZGxlLCBTdHJpbmcgbmFtZSkg
ewotICAgICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7Ci0gICAgICB0aGlzLm5hbWUgPSBuYW1lOwot
ICAgIH0KLQotICAgIHN0YXRpYyBwdWJsaWMgSGlzdG9ncmFtIGNyZWF0ZUNvdW50cyhTdHJpbmcg
bmFtZSwgaW50IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KSB7Ci0gICAgICByZXR1cm4g
bmV3IEhpc3RvZ3JhbShuYXRpdmVDcmVhdGVDb3VudHMobmFtZSwgbWluLCBtYXgsIGJ1Y2tldENv
dW50KSwgbmFtZSk7Ci0gICAgfQotCi0gICAgc3RhdGljIHB1YmxpYyBIaXN0b2dyYW0gY3JlYXRl
RW51bWVyYXRpb24oU3RyaW5nIG5hbWUsIGludCBtYXgpIHsKLSAgICAgIHJldHVybiBuZXcgSGlz
dG9ncmFtKG5hdGl2ZUNyZWF0ZUVudW1lcmF0aW9uKG5hbWUsIG1heCksIG5hbWUpOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIGFkZFNhbXBsZShpbnQgc2FtcGxlKSB7Ci0gICAgICBuYXRpdmVB
ZGRTYW1wbGUoaGFuZGxlLCBzYW1wbGUpOwotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUNvdW50cyhTdHJpbmcgbmFtZSwgaW50IG1pbiwgaW50IG1h
eCwgaW50IGJ1Y2tldENvdW50KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRp
dmVDcmVhdGVFbnVtZXJhdGlvbihTdHJpbmcgbmFtZSwgaW50IG1heCk7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlQWRkU2FtcGxlKGxvbmcgaGFuZGxlLCBpbnQgc2FtcGxl
KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBhZGQoU3RyaW5nIG5hbWUsIEhpc3RvZ3JhbUluZm8g
aW5mbykgewotICAgIG1hcC5wdXQobmFtZSwgaW5mbyk7Ci0gIH0KLQotICAvLyBFbmFibGVzIGdh
dGhlcmluZyBvZiBtZXRyaWNzICh3aGljaCBjYW4gYmUgZmV0Y2hlZCB3aXRoIGdldEFuZFJlc2V0
KCkpLgotICAvLyBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGlz
IGNyZWF0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBlbmFibGUoKSB7Ci0gICAgbmF0aXZlRW5h
YmxlKCk7Ci0gIH0KLQotICAvLyBHZXRzIGFuZCBjbGVhcnMgbmF0aXZlIGhpc3RvZ3JhbXMuCi0g
IHB1YmxpYyBzdGF0aWMgTWV0cmljcyBnZXRBbmRSZXNldCgpIHsKLSAgICByZXR1cm4gbmF0aXZl
R2V0QW5kUmVzZXQoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2
ZUVuYWJsZSgpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgTWV0cmljcyBuYXRpdmVHZXRBbmRS
ZXNldCgpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvci5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3IuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMjU0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdC5Db25uZWN0aW9uVHlwZTsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3Jr
TW9uaXRvckF1dG9EZXRlY3QuSU5WQUxJRF9ORVRfSUQ7Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJy
dGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtJbmZvcm1hdGlvbjsKLQotaW1wb3J0
IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci0KLWlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioK
LSAqIEJvcnJvd2VkIGZyb20gQ2hyb21pdW0ncyBzcmMvbmV0L2FuZHJvaWQvamF2YS9zcmMvb3Jn
L2Nocm9taXVtL25ldC9OZXR3b3JrQ2hhbmdlTm90aWZpZXIuamF2YQotICoKLSAqIFRyaWdnZXJz
IHVwZGF0ZXMgdG8gdGhlIHVuZGVybHlpbmcgbmV0d29yayBzdGF0ZSBmcm9tIE9TIG5ldHdvcmtp
bmcgZXZlbnRzLgotICoKLSAqIFdBUk5JTkc6IFRoaXMgY2xhc3MgaXMgbm90IHRocmVhZC1zYWZl
LgotICovCi1wdWJsaWMgY2xhc3MgTmV0d29ya01vbml0b3IgewotICAvKioKLSAgICogQWxlcnRl
ZCB3aGVuIHRoZSBjb25uZWN0aW9uIHR5cGUgb2YgdGhlIG5ldHdvcmsgY2hhbmdlcy4KLSAgICog
VGhlIGFsZXJ0IGlzIGZpcmVkIG9uIHRoZSBVSSB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMgaW50
ZXJmYWNlIE5ldHdvcmtPYnNlcnZlciB7Ci0gICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlw
ZUNoYW5nZWQoQ29ubmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpOwotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJOZXR3b3JrTW9uaXRvciI7Ci0gIHByaXZhdGUg
c3RhdGljIE5ldHdvcmtNb25pdG9yIGluc3RhbmNlOwotCi0gIHByaXZhdGUgZmluYWwgQ29udGV4
dCBhcHBsaWNhdGlvbkNvbnRleHQ7Ci0KLSAgLy8gTmF0aXZlIG9ic2VydmVycyBvZiB0aGUgY29u
bmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PExvbmc+IG5h
dGl2ZU5ldHdvcmtPYnNlcnZlcnM7Ci0gIC8vIEphdmEgb2JzZXJ2ZXJzIG9mIHRoZSBjb25uZWN0
aW9uIHR5cGUgY2hhbmdlcy4KLSAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8TmV0d29ya09ic2Vy
dmVyPiBuZXR3b3JrT2JzZXJ2ZXJzOwotCi0gIC8vIE9iamVjdCB0aGF0IGRldGVjdHMgdGhlIGNv
bm5lY3Rpb24gdHlwZSBjaGFuZ2VzLgotICBwcml2YXRlIE5ldHdvcmtNb25pdG9yQXV0b0RldGVj
dCBhdXRvRGV0ZWN0b3I7Ci0KLSAgcHJpdmF0ZSBDb25uZWN0aW9uVHlwZSBjdXJyZW50Q29ubmVj
dGlvblR5cGUgPSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV047Ci0KLSAgcHJpdmF0
ZSBOZXR3b3JrTW9uaXRvcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICBhc3NlcnRJc1RydWUoY29u
dGV4dCAhPSBudWxsKTsKLSAgICBhcHBsaWNhdGlvbkNvbnRleHQgPQotICAgICAgICBjb250ZXh0
LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpID09IG51bGwgPyBjb250ZXh0IDogY29udGV4dC5nZXRB
cHBsaWNhdGlvbkNvbnRleHQoKTsKLQotICAgIG5hdGl2ZU5ldHdvcmtPYnNlcnZlcnMgPSBuZXcg
QXJyYXlMaXN0PExvbmc+KCk7Ci0gICAgbmV0d29ya09ic2VydmVycyA9IG5ldyBBcnJheUxpc3Q8
TmV0d29ya09ic2VydmVyPigpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHRoZSBz
aW5nbGV0b24gb25jZS4KLSAgICogQ2FsbGVkIGZyb20gdGhlIG5hdGl2ZSBjb2RlLgotICAgKi8K
LSAgcHVibGljIHN0YXRpYyBOZXR3b3JrTW9uaXRvciBpbml0KENvbnRleHQgY29udGV4dCkgewot
ICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICBpbnN0YW5jZSA9IG5ldyBOZXR3b3Jr
TW9uaXRvcihjb250ZXh0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7Ci0gICAgcmV0dXJuIGluc3Rh
bmNlICE9IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIGlu
c3RhbmNlLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBOZXR3b3JrTW9uaXRvciBnZXRJbnN0YW5j
ZSgpIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICAvKioKLSAgICogRW5hYmxlcyBh
dXRvIGRldGVjdGlvbiBvZiB0aGUgY3VycmVudCBuZXR3b3JrIHN0YXRlIGJhc2VkIG9uIG5vdGlm
aWNhdGlvbnMgZnJvbSB0aGUgc3lzdGVtLgotICAgKiBOb3RlIHRoYXQgcGFzc2luZyB0cnVlIGhl
cmUgcmVxdWlyZXMgdGhlIGVtYmVkZGluZyBhcHAgaGF2ZSB0aGUgcGxhdGZvcm0gQUNDRVNTX05F
VFdPUktfU1RBVEUKLSAgICogcGVybWlzc2lvbi4KLSAgICoKLSAgICogQHBhcmFtIHNob3VsZEF1
dG9EZXRlY3QgdHJ1ZSBpZiB0aGUgTmV0d29ya01vbml0b3Igc2hvdWxkIGxpc3RlbiBmb3Igc3lz
dGVtIGNoYW5nZXMgaW4KLSAgICogIG5ldHdvcmsgY29ubmVjdGl2aXR5LgotICAgKi8KLSAgcHVi
bGljIHN0YXRpYyB2b2lkIHNldEF1dG9EZXRlY3RDb25uZWN0aXZpdHlTdGF0ZShib29sZWFuIHNo
b3VsZEF1dG9EZXRlY3QpIHsKLSAgICBnZXRJbnN0YW5jZSgpLnNldEF1dG9EZXRlY3RDb25uZWN0
aXZpdHlTdGF0ZUludGVybmFsKHNob3VsZEF1dG9EZXRlY3QpOwotICB9Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgdm9pZCBhc3NlcnRJc1RydWUoYm9vbGVhbiBjb25kaXRpb24pIHsKLSAgICBpZiAoIWNv
bmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCB0byBi
ZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ2FsbGVkIGJ5IHRoZSBuYXRpdmUgY29kZS4K
LSAgcHJpdmF0ZSB2b2lkIHN0YXJ0TW9uaXRvcmluZyhsb25nIG5hdGl2ZU9ic2VydmVyKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgIlN0YXJ0IG1vbml0b3JpbmcgZnJvbSBuYXRpdmUgb2JzZXJ2ZXIg
IiArIG5hdGl2ZU9ic2VydmVyKTsKLSAgICBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzLmFkZChuYXRp
dmVPYnNlcnZlcik7Ci0gICAgc2V0QXV0b0RldGVjdENvbm5lY3Rpdml0eVN0YXRlSW50ZXJuYWwo
dHJ1ZSk7Ci0gIH0KLQotICAvLyBDYWxsZWQgYnkgdGhlIG5hdGl2ZSBjb2RlLgotICBwcml2YXRl
IHZvaWQgc3RvcE1vbml0b3JpbmcobG9uZyBuYXRpdmVPYnNlcnZlcikgewotICAgIExvZ2dpbmcu
ZChUQUcsICJTdG9wIG1vbml0b3JpbmcgZnJvbSBuYXRpdmUgb2JzZXJ2ZXIgIiArIG5hdGl2ZU9i
c2VydmVyKTsKLSAgICBzZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5U3RhdGVJbnRlcm5hbChmYWxz
ZSk7Ci0gICAgbmF0aXZlTmV0d29ya09ic2VydmVycy5yZW1vdmUobmF0aXZlT2JzZXJ2ZXIpOwot
ICB9Ci0KLSAgLy8gQ2FsbGVkIGJ5IHRoZSBuYXRpdmUgY29kZSB0byBnZXQgdGhlIEFuZHJvaWQg
U0RLIHZlcnNpb24uCi0gIHByaXZhdGUgc3RhdGljIGludCBhbmRyb2lkU2RrSW50KCkgewotICAg
IHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0gIH0KLQotICBwcml2YXRlIENvbm5lY3Rp
b25UeXBlIGdldEN1cnJlbnRDb25uZWN0aW9uVHlwZSgpIHsKLSAgICByZXR1cm4gY3VycmVudENv
bm5lY3Rpb25UeXBlOwotICB9Ci0KLSAgcHJpdmF0ZSBsb25nIGdldEN1cnJlbnREZWZhdWx0TmV0
SWQoKSB7Ci0gICAgcmV0dXJuIGF1dG9EZXRlY3RvciA9PSBudWxsID8gSU5WQUxJRF9ORVRfSUQg
OiBhdXRvRGV0ZWN0b3IuZ2V0RGVmYXVsdE5ldElkKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
ZGVzdHJveUF1dG9EZXRlY3RvcigpIHsKLSAgICBpZiAoYXV0b0RldGVjdG9yICE9IG51bGwpIHsK
LSAgICAgIGF1dG9EZXRlY3Rvci5kZXN0cm95KCk7Ci0gICAgICBhdXRvRGV0ZWN0b3IgPSBudWxs
OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5
U3RhdGVJbnRlcm5hbChib29sZWFuIHNob3VsZEF1dG9EZXRlY3QpIHsKLSAgICBpZiAoIXNob3Vs
ZEF1dG9EZXRlY3QpIHsKLSAgICAgIGRlc3Ryb3lBdXRvRGV0ZWN0b3IoKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKGF1dG9EZXRlY3RvciA9PSBudWxsKSB7Ci0gICAgICBhdXRvRGV0
ZWN0b3IgPSBuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KG5ldyBOZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QuT2JzZXJ2ZXIoKSB7Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1Ymxp
YyB2b2lkIG9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKENvbm5lY3Rpb25UeXBlIG5ld0Nvbm5lY3Rp
b25UeXBlKSB7Ci0gICAgICAgICAgdXBkYXRlQ3VycmVudENvbm5lY3Rpb25UeXBlKG5ld0Nvbm5l
Y3Rpb25UeXBlKTsKLSAgICAgICAgfQotCi0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJs
aWMgdm9pZCBvbk5ldHdvcmtDb25uZWN0KE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mbykg
ewotICAgICAgICAgIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Nvbm5lY3QobmV0d29ya0luZm8p
OwotICAgICAgICB9Ci0KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9u
TmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBuZXR3b3JrSGFuZGxlKSB7Ci0gICAgICAgICAgbm90aWZ5
T2JzZXJ2ZXJzT2ZOZXR3b3JrRGlzY29ubmVjdChuZXR3b3JrSGFuZGxlKTsKLSAgICAgICAgfQot
ICAgICAgfSwgYXBwbGljYXRpb25Db250ZXh0KTsKLSAgICAgIGZpbmFsIE5ldHdvcmtNb25pdG9y
QXV0b0RldGVjdC5OZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0KLSAgICAgICAgICBhdXRvRGV0
ZWN0b3IuZ2V0Q3VycmVudE5ldHdvcmtTdGF0ZSgpOwotICAgICAgdXBkYXRlQ3VycmVudENvbm5l
Y3Rpb25UeXBlKE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5nZXRDb25uZWN0aW9uVHlwZShuZXR3
b3JrU3RhdGUpKTsKLSAgICAgIHVwZGF0ZUFjdGl2ZU5ldHdvcmtMaXN0KCk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUN1cnJlbnRDb25uZWN0aW9uVHlwZShDb25uZWN0aW9u
VHlwZSBuZXdDb25uZWN0aW9uVHlwZSkgewotICAgIGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IG5l
d0Nvbm5lY3Rpb25UeXBlOwotICAgIG5vdGlmeU9ic2VydmVyc09mQ29ubmVjdGlvblR5cGVDaGFu
Z2UobmV3Q29ubmVjdGlvblR5cGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsZXJ0cyBhbGwgb2Jz
ZXJ2ZXJzIG9mIGEgY29ubmVjdGlvbiBjaGFuZ2UuCi0gICAqLwotICBwcml2YXRlIHZvaWQgbm90
aWZ5T2JzZXJ2ZXJzT2ZDb25uZWN0aW9uVHlwZUNoYW5nZShDb25uZWN0aW9uVHlwZSBuZXdDb25u
ZWN0aW9uVHlwZSkgewotICAgIGZvciAobG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2ZU5ldHdv
cmtPYnNlcnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5vdGlmeUNvbm5lY3Rpb25UeXBlQ2hhbmdlZChu
YXRpdmVPYnNlcnZlcik7Ci0gICAgfQotICAgIGZvciAoTmV0d29ya09ic2VydmVyIG9ic2VydmVy
IDogbmV0d29ya09ic2VydmVycykgewotICAgICAgb2JzZXJ2ZXIub25Db25uZWN0aW9uVHlwZUNo
YW5nZWQobmV3Q29ubmVjdGlvblR5cGUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBu
b3RpZnlPYnNlcnZlcnNPZk5ldHdvcmtDb25uZWN0KE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3Jr
SW5mbykgewotICAgIGZvciAobG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2ZU5ldHdvcmtPYnNl
cnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5vdGlmeU9mTmV0d29ya0Nvbm5lY3QobmF0aXZlT2JzZXJ2
ZXIsIG5ldHdvcmtJbmZvKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbm90aWZ5T2Jz
ZXJ2ZXJzT2ZOZXR3b3JrRGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUpIHsKLSAgICBmb3Ig
KGxvbmcgbmF0aXZlT2JzZXJ2ZXIgOiBuYXRpdmVOZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBu
YXRpdmVOb3RpZnlPZk5ldHdvcmtEaXNjb25uZWN0KG5hdGl2ZU9ic2VydmVyLCBuZXR3b3JrSGFu
ZGxlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlQWN0aXZlTmV0d29ya0xp
c3QoKSB7Ci0gICAgTGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+IG5ldHdvcmtJbmZvTGlzdCA9IGF1
dG9EZXRlY3Rvci5nZXRBY3RpdmVOZXR3b3JrTGlzdCgpOwotICAgIGlmIChuZXR3b3JrSW5mb0xp
c3QgPT0gbnVsbCB8fCBuZXR3b3JrSW5mb0xpc3Quc2l6ZSgpID09IDApIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBOZXR3b3JrSW5mb3JtYXRpb25bXSBuZXR3b3JrSW5mb3MgPSBuZXcg
TmV0d29ya0luZm9ybWF0aW9uW25ldHdvcmtJbmZvTGlzdC5zaXplKCldOwotICAgIG5ldHdvcmtJ
bmZvcyA9IG5ldHdvcmtJbmZvTGlzdC50b0FycmF5KG5ldHdvcmtJbmZvcyk7Ci0gICAgZm9yIChs
b25nIG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlTmV0d29ya09ic2VydmVycykgewotICAgICAgbmF0
aXZlTm90aWZ5T2ZBY3RpdmVOZXR3b3JrTGlzdChuYXRpdmVPYnNlcnZlciwgbmV0d29ya0luZm9z
KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWRkcyBhbiBvYnNlcnZlciBmb3IgYW55IGNv
bm5lY3Rpb24gdHlwZSBjaGFuZ2VzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGFkZE5l
dHdvcmtPYnNlcnZlcihOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBnZXRJbnN0YW5j
ZSgpLmFkZE5ldHdvcmtPYnNlcnZlckludGVybmFsKG9ic2VydmVyKTsKLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBhZGROZXR3b3JrT2JzZXJ2ZXJJbnRlcm5hbChOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2
ZXIpIHsKLSAgICBuZXR3b3JrT2JzZXJ2ZXJzLmFkZChvYnNlcnZlcik7Ci0gIH0KLQotICAvKioK
LSAgICogUmVtb3ZlcyBhbiBvYnNlcnZlciBmb3IgYW55IGNvbm5lY3Rpb24gdHlwZSBjaGFuZ2Vz
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZU5ldHdvcmtPYnNlcnZlcihOZXR3
b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBnZXRJbnN0YW5jZSgpLnJlbW92ZU5ldHdvcmtP
YnNlcnZlckludGVybmFsKG9ic2VydmVyKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZW1vdmVO
ZXR3b3JrT2JzZXJ2ZXJJbnRlcm5hbChOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsKLSAgICBu
ZXR3b3JrT2JzZXJ2ZXJzLnJlbW92ZShvYnNlcnZlcik7Ci0gIH0KLQotICAvKioKLSAgICogQ2hl
Y2tzIGlmIHRoZXJlIGN1cnJlbnRseSBpcyBjb25uZWN0aXZpdHkuCi0gICAqLwotICBwdWJsaWMg
c3RhdGljIGJvb2xlYW4gaXNPbmxpbmUoKSB7Ci0gICAgQ29ubmVjdGlvblR5cGUgY29ubmVjdGlv
blR5cGUgPSBnZXRJbnN0YW5jZSgpLmdldEN1cnJlbnRDb25uZWN0aW9uVHlwZSgpOwotICAgIHJl
dHVybiBjb25uZWN0aW9uVHlwZSAhPSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX05PTkU7Ci0g
IH0KLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeUNvbm5lY3Rpb25UeXBlQ2hh
bmdlZChsb25nIG5hdGl2ZVB0cik7Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlTm90aWZ5
T2ZOZXR3b3JrQ29ubmVjdChsb25nIG5hdGl2ZVB0ciwgTmV0d29ya0luZm9ybWF0aW9uIG5ldHdv
cmtJbmZvKTsKLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVOb3RpZnlPZk5ldHdvcmtEaXNj
b25uZWN0KGxvbmcgbmF0aXZlUHRyLCBsb25nIG5ldHdvcmtIYW5kbGUpOwotICBwcml2YXRlIG5h
dGl2ZSB2b2lkIG5hdGl2ZU5vdGlmeU9mQWN0aXZlTmV0d29ya0xpc3QoCi0gICAgICBsb25nIG5h
dGl2ZVB0ciwgTmV0d29ya0luZm9ybWF0aW9uW10gbmV0d29ya0luZm9zKTsKLQotICAvLyBGb3Ig
dGVzdGluZyBvbmx5LgotICBzdGF0aWMgdm9pZCByZXNldEluc3RhbmNlRm9yVGVzdHMoQ29udGV4
dCBjb250ZXh0KSB7Ci0gICAgaW5zdGFuY2UgPSBuZXcgTmV0d29ya01vbml0b3IoY29udGV4dCk7
Ci0gIH0KLQotICAvLyBGb3IgdGVzdGluZyBvbmx5LgotICBwdWJsaWMgc3RhdGljIE5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdCBnZXRBdXRvRGV0ZWN0b3JGb3JUZXN0KCkgewotICAgIHJldHVybiBn
ZXRJbnN0YW5jZSgpLmF1dG9EZXRlY3RvcjsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL05ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsNjIwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC5OZXR3b3JrQ2FwYWJpbGl0aWVz
Lk5FVF9DQVBBQklMSVRZX0lOVEVSTkVUOwotaW1wb3J0IHN0YXRpYyBhbmRyb2lkLm5ldC5OZXR3
b3JrQ2FwYWJpbGl0aWVzLlRSQU5TUE9SVF9DRUxMVUxBUjsKLQotaW1wb3J0IGFuZHJvaWQuTWFu
aWZlc3QucGVybWlzc2lvbjsKLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uU3VwcHJlc3NMaW50
OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1w
b3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuQ29u
bmVjdGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2Vy
Lk5ldHdvcmtDYWxsYmFjazsKLWltcG9ydCBhbmRyb2lkLm5ldC5MaW5rQWRkcmVzczsKLWltcG9y
dCBhbmRyb2lkLm5ldC5MaW5rUHJvcGVydGllczsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3Jr
OwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcmtDYXBhYmlsaXRpZXM7Ci1pbXBvcnQgYW5kcm9p
ZC5uZXQuTmV0d29ya0luZm87Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29ya1JlcXVlc3Q7Ci1p
bXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpSW5mbzsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZp
LldpZmlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC50
ZWxlcGhvbnkuVGVsZXBob255TWFuYWdlcjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7
Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQm9ycm93ZWQgZnJvbSBDaHJvbWl1
bSdzCi0gKiBzcmMvbmV0L2FuZHJvaWQvamF2YS9zcmMvb3JnL2Nocm9taXVtL25ldC9OZXR3b3Jr
Q2hhbmdlTm90aWZpZXJBdXRvRGV0ZWN0LmphdmEKLSAqCi0gKiBVc2VkIGJ5IHRoZSBOZXR3b3Jr
TW9uaXRvciB0byBsaXN0ZW4gdG8gcGxhdGZvcm0gY2hhbmdlcyBpbiBjb25uZWN0aXZpdHkuCi0g
KiBOb3RlIHRoYXQgdXNlIG9mIHRoaXMgY2xhc3MgcmVxdWlyZXMgdGhhdCB0aGUgYXBwIGhhdmUg
dGhlIHBsYXRmb3JtCi0gKiBBQ0NFU1NfTkVUV09SS19TVEFURSBwZXJtaXNzaW9uLgotICovCi1w
dWJsaWMgY2xhc3MgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGV4dGVuZHMgQnJvYWRjYXN0UmVj
ZWl2ZXIgewotICBwdWJsaWMgc3RhdGljIGVudW0gQ29ubmVjdGlvblR5cGUgewotICAgIENPTk5F
Q1RJT05fVU5LTk9XTiwKLSAgICBDT05ORUNUSU9OX0VUSEVSTkVULAotICAgIENPTk5FQ1RJT05f
V0lGSSwKLSAgICBDT05ORUNUSU9OXzRHLAotICAgIENPTk5FQ1RJT05fM0csCi0gICAgQ09OTkVD
VElPTl8yRywKLSAgICBDT05ORUNUSU9OX1VOS05PV05fQ0VMTFVMQVIsCi0gICAgQ09OTkVDVElP
Tl9CTFVFVE9PVEgsCi0gICAgQ09OTkVDVElPTl9OT05FCi0gIH0KLQotICBwdWJsaWMgc3RhdGlj
IGNsYXNzIElQQWRkcmVzcyB7Ci0gICAgcHVibGljIGZpbmFsIGJ5dGVbXSBhZGRyZXNzOwotICAg
IHB1YmxpYyBJUEFkZHJlc3MoYnl0ZVtdIGFkZHJlc3MpIHsKLSAgICAgIHRoaXMuYWRkcmVzcyA9
IGFkZHJlc3M7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBOZXR3b3JrTW9u
aXRvci5OZXR3b3JrSW5mb3JtYXRpb24gKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBOZXR3b3Jr
SW5mb3JtYXRpb24gewotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbmFtZTsKLSAgICBwdWJsaWMg
ZmluYWwgQ29ubmVjdGlvblR5cGUgdHlwZTsKLSAgICBwdWJsaWMgZmluYWwgbG9uZyBoYW5kbGU7
Ci0gICAgcHVibGljIGZpbmFsIElQQWRkcmVzc1tdIGlwQWRkcmVzc2VzOwotICAgIHB1YmxpYyBO
ZXR3b3JrSW5mb3JtYXRpb24oCi0gICAgICAgIFN0cmluZyBuYW1lLCBDb25uZWN0aW9uVHlwZSB0
eXBlLCBsb25nIGhhbmRsZSwgSVBBZGRyZXNzW10gYWRkcmVzc2VzKSB7Ci0gICAgICB0aGlzLm5h
bWUgPSBuYW1lOwotICAgICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICAgIHRoaXMuaGFuZGxlID0g
aGFuZGxlOwotICAgICAgdGhpcy5pcEFkZHJlc3NlcyA9IGFkZHJlc3NlczsKLSAgICB9Ci0gIH07
Ci0KLSAgc3RhdGljIGNsYXNzIE5ldHdvcmtTdGF0ZSB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBib29s
ZWFuIGNvbm5lY3RlZDsKLSAgICAvLyBEZWZpbmVkIGZyb20gQ29ubmVjdGl2aXR5TWFuYWdlci5U
WVBFX1hYWCBmb3Igbm9uLW1vYmlsZTsgZm9yIG1vYmlsZSwgaXQgaXMKLSAgICAvLyBmdXJ0aGVy
IGRpdmlkZWQgaW50byAyRywgM0csIG9yIDRHIGZyb20gdGhlIHN1YnR5cGUuCi0gICAgcHJpdmF0
ZSBmaW5hbCBpbnQgdHlwZTsKLSAgICAvLyBEZWZpbmVkIGZyb20gTmV0d29ya0luZm8uc3VidHlw
ZSwgd2hpY2ggaXMgb25lIG9mIHRoZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9YWFhz
LgotICAgIC8vIFdpbGwgYmUgdXNlZnVsIHRvIGZpbmQgdGhlIG1heGltdW0gYmFuZHdpZHRoLgot
ICAgIHByaXZhdGUgZmluYWwgaW50IHN1YnR5cGU7Ci0KLSAgICBwdWJsaWMgTmV0d29ya1N0YXRl
KGJvb2xlYW4gY29ubmVjdGVkLCBpbnQgdHlwZSwgaW50IHN1YnR5cGUpIHsKLSAgICAgIHRoaXMu
Y29ubmVjdGVkID0gY29ubmVjdGVkOwotICAgICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICAgIHRo
aXMuc3VidHlwZSA9IHN1YnR5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNDb25u
ZWN0ZWQoKSB7Ci0gICAgICByZXR1cm4gY29ubmVjdGVkOwotICAgIH0KLQotICAgIHB1YmxpYyBp
bnQgZ2V0TmV0d29ya1R5cGUoKSB7Ci0gICAgICByZXR1cm4gdHlwZTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgaW50IGdldE5ldHdvcmtTdWJUeXBlKCkgewotICAgICAgcmV0dXJuIHN1YnR5cGU7Ci0g
ICAgfQotICB9Ci0gIC8qKgotICAgKiBUaGUgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGdldCBjYWxs
ZWQgd2hlbiB0aGUgbmV0d29yayBjaGFuZ2VzIGlmIHRoZSBjYWxsYmFjawotICAgKiBpcyByZWdp
c3RlcmVkIHdpdGggYSBwcm9wZXIgbmV0d29yayByZXF1ZXN0LiBJdCBpcyBvbmx5IGF2YWlsYWJs
ZSBpbiBBbmRyb2lkIExvbGxpcG9wCi0gICAqIGFuZCBhYm92ZS4KLSAgICovCi0gIEBTdXBwcmVz
c0xpbnQoIk5ld0FwaSIpCi0gIHByaXZhdGUgY2xhc3MgU2ltcGxlTmV0d29ya0NhbGxiYWNrIGV4
dGVuZHMgTmV0d29ya0NhbGxiYWNrIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bkF2YWlsYWJsZShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJOZXR3
b3JrIGJlY29tZXMgYXZhaWxhYmxlOiAiICsgbmV0d29yay50b1N0cmluZygpKTsKLSAgICAgIG9u
TmV0d29ya0NoYW5nZWQobmV0d29yayk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25DYXBhYmlsaXRpZXNDaGFuZ2VkKE5ldHdvcmsgbmV0d29yaywgTmV0d29ya0Nh
cGFiaWxpdGllcyBuZXR3b3JrQ2FwYWJpbGl0aWVzKSB7Ci0gICAgICAvLyBBIGNhcGFiaWxpdGll
cyBjaGFuZ2UgbWF5IGluZGljYXRlIHRoZSBDb25uZWN0aW9uVHlwZSBoYXMgY2hhbmdlZCwKLSAg
ICAgIC8vIHNvIGZvcndhcmQgdGhlIG5ldyBOZXR3b3JrSW5mb3JtYXRpb24gYWxvbmcgdG8gdGhl
IG9ic2VydmVyLgotICAgICAgTG9nZ2luZy5kKFRBRywgImNhcGFiaWxpdGllcyBjaGFuZ2VkOiAi
ICsgbmV0d29ya0NhcGFiaWxpdGllcy50b1N0cmluZygpKTsKLSAgICAgIG9uTmV0d29ya0NoYW5n
ZWQobmV0d29yayk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25M
aW5rUHJvcGVydGllc0NoYW5nZWQoTmV0d29yayBuZXR3b3JrLCBMaW5rUHJvcGVydGllcyBsaW5r
UHJvcGVydGllcykgewotICAgICAgLy8gQSBsaW5rIHByb3BlcnR5IGNoYW5nZSBtYXkgaW5kaWNh
dGUgdGhlIElQIGFkZHJlc3MgY2hhbmdlcy4KLSAgICAgIC8vIHNvIGZvcndhcmQgdGhlIG5ldyBO
ZXR3b3JrSW5mb3JtYXRpb24gdG8gdGhlIG9ic2VydmVyLgotICAgICAgTG9nZ2luZy5kKFRBRywg
ImxpbmsgcHJvcGVydGllcyBjaGFuZ2VkOiAiICsgbGlua1Byb3BlcnRpZXMudG9TdHJpbmcoKSk7
Ci0gICAgICBvbk5ldHdvcmtDaGFuZ2VkKG5ldHdvcmspOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uTG9zaW5nKE5ldHdvcmsgbmV0d29yaywgaW50IG1heE1zVG9M
aXZlKSB7Ci0gICAgICAvLyBUZWxsIHRoZSBuZXR3b3JrIGlzIGdvaW5nIHRvIGxvc2UgaW4gTWF4
TXNUb0xpdmUgbWlsbGlzZWNvbmRzLgotICAgICAgLy8gV2UgbWF5IHVzZSB0aGlzIHNpZ25hbCBs
YXRlci4KLSAgICAgIExvZ2dpbmcuZCgKLSAgICAgICAgICBUQUcsICJOZXR3b3JrICIgKyBuZXR3
b3JrLnRvU3RyaW5nKCkgKyAiIGlzIGFib3V0IHRvIGxvc2UgaW4gIiArIG1heE1zVG9MaXZlICsg
Im1zIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Mb3N0KE5l
dHdvcmsgbmV0d29yaykgewotICAgICAgTG9nZ2luZy5kKFRBRywgIk5ldHdvcmsgIiArIG5ldHdv
cmsudG9TdHJpbmcoKSArICIgaXMgZGlzY29ubmVjdGVkIik7Ci0gICAgICBvYnNlcnZlci5vbk5l
dHdvcmtEaXNjb25uZWN0KG5ldHdvcmtUb05ldElkKG5ldHdvcmspKTsKLSAgICB9Ci0KLSAgICBw
cml2YXRlIHZvaWQgb25OZXR3b3JrQ2hhbmdlZChOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIE5l
dHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mb3JtYXRpb24gPSBjb25uZWN0aXZpdHlNYW5hZ2Vy
RGVsZWdhdGUubmV0d29ya1RvSW5mbyhuZXR3b3JrKTsKLSAgICAgIGlmIChuZXR3b3JrSW5mb3Jt
YXRpb24gIT0gbnVsbCkgewotICAgICAgICBvYnNlcnZlci5vbk5ldHdvcmtDb25uZWN0KG5ldHdv
cmtJbmZvcm1hdGlvbik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqIFF1ZXJpZXMgdGhl
IENvbm5lY3Rpdml0eU1hbmFnZXIgZm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNv
bm5lY3Rpb24uICovCi0gIHN0YXRpYyBjbGFzcyBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUg
ewotICAgIC8qKgotICAgICAqICBOb3RlOiBJbiBzb21lIHJhcmUgQW5kcm9pZCBzeXN0ZW1zIGNv
bm5lY3Rpdml0eU1hbmFnZXIgaXMgbnVsbC4gIFdlIGhhbmRsZSB0aGF0Ci0gICAgICogIGdyYWNl
ZnVsbHkgYmVsb3cuCi0gICAgICovCi0gICAgcHJpdmF0ZSBmaW5hbCBDb25uZWN0aXZpdHlNYW5h
Z2VyIGNvbm5lY3Rpdml0eU1hbmFnZXI7Ci0KLSAgICBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdh
dGUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyID0KLSAgICAg
ICAgICAoQ29ubmVjdGl2aXR5TWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRl
eHQuQ09OTkVDVElWSVRZX1NFUlZJQ0UpOwotICAgIH0KLQotICAgIC8vIEZvciB0ZXN0aW5nLgot
ICAgIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSgpIHsKLSAgICAgIC8vIEFsbCB0aGUgbWV0
aG9kcyBiZWxvdyBzaG91bGQgYmUgb3ZlcnJpZGRlbi4KLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFn
ZXIgPSBudWxsOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgY29ubmVjdGlvbiB0
eXBlIGFuZCBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQKLSAgICAgKiBkZWZh
dWx0IG5ldHdvcmsuCi0gICAgICovCi0gICAgTmV0d29ya1N0YXRlIGdldE5ldHdvcmtTdGF0ZSgp
IHsKLSAgICAgIGlmIChjb25uZWN0aXZpdHlNYW5hZ2VyID09IG51bGwpIHsKLSAgICAgICAgcmV0
dXJuIG5ldyBOZXR3b3JrU3RhdGUoZmFsc2UsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gZ2V0TmV0d29ya1N0YXRlKGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0QWN0aXZlTmV0d29ya0lu
Zm8oKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBjb25uZWN0aW9uIHR5cGUg
YW5kIHN0YXR1cyBpbmZvcm1hdGlvbiBhYm91dCB8bmV0d29ya3wuCi0gICAgICogT25seSBjYWxs
YWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuCi0gICAgICovCi0gICAgQFN1cHBy
ZXNzTGludCgiTmV3QXBpIikKLSAgICBOZXR3b3JrU3RhdGUgZ2V0TmV0d29ya1N0YXRlKE5ldHdv
cmsgbmV0d29yaykgewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXIgPT0gbnVsbCkgewot
ICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwgLTEsIC0xKTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBnZXROZXR3b3JrU3RhdGUoY29ubmVjdGl2aXR5TWFuYWdlci5nZXROZXR3
b3JrSW5mbyhuZXR3b3JrKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBjb25u
ZWN0aW9uIHR5cGUgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gbmV0d29ya0lu
Zm8uCi0gICAgICovCi0gICAgTmV0d29ya1N0YXRlIGdldE5ldHdvcmtTdGF0ZShOZXR3b3JrSW5m
byBuZXR3b3JrSW5mbykgewotICAgICAgaWYgKG5ldHdvcmtJbmZvID09IG51bGwgfHwgIW5ldHdv
cmtJbmZvLmlzQ29ubmVjdGVkKCkpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUo
ZmFsc2UsIC0xLCAtMSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZSh0
cnVlLCBuZXR3b3JrSW5mby5nZXRUeXBlKCksIG5ldHdvcmtJbmZvLmdldFN1YnR5cGUoKSk7Ci0g
ICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyBhbGwgY29ubmVjdGVkIG5ldHdvcmtzLgot
ICAgICAqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJlbGVhc2VzLgotICAg
ICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgTmV0d29ya1tdIGdldEFsbE5l
dHdvcmtzKCkgewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1hbmFnZXIgPT0gbnVsbCkgewotICAg
ICAgICByZXR1cm4gbmV3IE5ldHdvcmtbMF07Ci0gICAgICB9Ci0gICAgICByZXR1cm4gY29ubmVj
dGl2aXR5TWFuYWdlci5nZXRBbGxOZXR3b3JrcygpOwotICAgIH0KLQotICAgIExpc3Q8TmV0d29y
a0luZm9ybWF0aW9uPiBnZXRBY3RpdmVOZXR3b3JrTGlzdCgpIHsKLSAgICAgIGlmICghc3VwcG9y
dE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAg
ICAgQXJyYXlMaXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4gbmV0SW5mb0xpc3QgPSBuZXcgQXJyYXlM
aXN0PE5ldHdvcmtJbmZvcm1hdGlvbj4oKTsKLSAgICAgIGZvciAoTmV0d29yayBuZXR3b3JrIDog
Z2V0QWxsTmV0d29ya3MoKSkgewotICAgICAgICBOZXR3b3JrSW5mb3JtYXRpb24gaW5mbyA9IG5l
dHdvcmtUb0luZm8obmV0d29yayk7Ci0gICAgICAgIGlmIChpbmZvICE9IG51bGwpIHsKLSAgICAg
ICAgICBuZXRJbmZvTGlzdC5hZGQoaW5mbyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJl
dHVybiBuZXRJbmZvTGlzdDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRoZSBO
ZXRJRCBvZiB0aGUgY3VycmVudCBkZWZhdWx0IG5ldHdvcmsuIFJldHVybnMKLSAgICAgKiBJTlZB
TElEX05FVF9JRCBpZiBubyBjdXJyZW50IGRlZmF1bHQgbmV0d29yayBjb25uZWN0ZWQuCi0gICAg
ICogT25seSBjYWxsYWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuCi0gICAgICov
Ci0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBsb25nIGdldERlZmF1bHROZXRJZCgp
IHsKLSAgICAgIGlmICghc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAgIHJldHVy
biBJTlZBTElEX05FVF9JRDsKLSAgICAgIH0KLSAgICAgIC8vIEFuZHJvaWQgTG9sbGlwb3AgaGFk
IG5vIEFQSSB0byBnZXQgdGhlIGRlZmF1bHQgbmV0d29yazsgb25seSBhbgotICAgICAgLy8gQVBJ
IHRvIHJldHVybiB0aGUgTmV0d29ya0luZm8gZm9yIHRoZSBkZWZhdWx0IG5ldHdvcmsuIFRvCi0g
ICAgICAvLyBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgbmV0d29yayBvbmUgY2FuIGZpbmQgdGhlIG5l
dHdvcmsgd2l0aAotICAgICAgLy8gdHlwZSBtYXRjaGluZyB0aGF0IG9mIHRoZSBkZWZhdWx0IG5l
dHdvcmsuCi0gICAgICBmaW5hbCBOZXR3b3JrSW5mbyBkZWZhdWx0TmV0d29ya0luZm8gPSBjb25u
ZWN0aXZpdHlNYW5hZ2VyLmdldEFjdGl2ZU5ldHdvcmtJbmZvKCk7Ci0gICAgICBpZiAoZGVmYXVs
dE5ldHdvcmtJbmZvID09IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfTkVUX0lEOwot
ICAgICAgfQotICAgICAgZmluYWwgTmV0d29ya1tdIG5ldHdvcmtzID0gZ2V0QWxsTmV0d29ya3Mo
KTsKLSAgICAgIGxvbmcgZGVmYXVsdE5ldElkID0gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgICBmb3Ig
KE5ldHdvcmsgbmV0d29yayA6IG5ldHdvcmtzKSB7Ci0gICAgICAgIGlmICghaGFzSW50ZXJuZXRD
YXBhYmlsaXR5KG5ldHdvcmspKSB7Ci0gICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgZmluYWwgTmV0d29ya0luZm8gbmV0d29ya0luZm8gPSBjb25uZWN0aXZpdHlNYW5hZ2Vy
LmdldE5ldHdvcmtJbmZvKG5ldHdvcmspOwotICAgICAgICBpZiAobmV0d29ya0luZm8gIT0gbnVs
bCAmJiBuZXR3b3JrSW5mby5nZXRUeXBlKCkgPT0gZGVmYXVsdE5ldHdvcmtJbmZvLmdldFR5cGUo
KSkgewotICAgICAgICAgIC8vIFRoZXJlIHNob3VsZCBub3QgYmUgbXVsdGlwbGUgY29ubmVjdGVk
IG5ldHdvcmtzIG9mIHRoZQotICAgICAgICAgIC8vIHNhbWUgdHlwZS4gQXQgbGVhc3QgYXMgb2Yg
QW5kcm9pZCBNYXJzaG1hbGxvdyB0aGlzIGlzCi0gICAgICAgICAgLy8gbm90IHN1cHBvcnRlZC4g
SWYgdGhpcyBiZWNvbWVzIHN1cHBvcnRlZCB0aGlzIGFzc2VydGlvbgotICAgICAgICAgIC8vIG1h
eSB0cmlnZ2VyLiBBdCB0aGF0IHBvaW50IHdlIGNvdWxkIGNvbnNpZGVyIHVzaW5nCi0gICAgICAg
ICAgLy8gQ29ubmVjdGl2aXR5TWFuYWdlci5nZXREZWZhdWx0TmV0d29yaygpIHRob3VnaCB0aGlz
Ci0gICAgICAgICAgLy8gbWF5IGdpdmUgY29uZnVzaW5nIHJlc3VsdHMgd2l0aCBWUE5zIGFuZCBp
cyBvbmx5Ci0gICAgICAgICAgLy8gYXZhaWxhYmxlIHdpdGggQW5kcm9pZCBNYXJzaG1hbGxvdy4K
LSAgICAgICAgICBhc3NlcnQgZGVmYXVsdE5ldElkID09IElOVkFMSURfTkVUX0lEOwotICAgICAg
ICAgIGRlZmF1bHROZXRJZCA9IG5ldHdvcmtUb05ldElkKG5ldHdvcmspOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gZGVmYXVsdE5ldElkOwotICAgIH0KLQotICAgIEBTdXBwcmVz
c0xpbnQoIk5ld0FwaSIpCi0gICAgcHJpdmF0ZSBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya1Rv
SW5mbyhOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIExpbmtQcm9wZXJ0aWVzIGxpbmtQcm9wZXJ0
aWVzID0gY29ubmVjdGl2aXR5TWFuYWdlci5nZXRMaW5rUHJvcGVydGllcyhuZXR3b3JrKTsKLSAg
ICAgIC8vIGdldExpbmtQcm9wZXJ0aWVzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhlIG5ldHdvcmsg
aXMgdW5rbm93bi4KLSAgICAgIGlmIChsaW5rUHJvcGVydGllcyA9PSBudWxsKSB7Ci0gICAgICAg
IExvZ2dpbmcudyhUQUcsICJEZXRlY3RlZCB1bmtub3duIG5ldHdvcms6ICIgKyBuZXR3b3JrLnRv
U3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIGlmIChsaW5r
UHJvcGVydGllcy5nZXRJbnRlcmZhY2VOYW1lKCkgPT0gbnVsbCkgewotICAgICAgICBMb2dnaW5n
LncoVEFHLCAiTnVsbCBpbnRlcmZhY2UgbmFtZSBmb3IgbmV0d29yayAiICsgbmV0d29yay50b1N0
cmluZygpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIE5ldHdvcmtT
dGF0ZSBuZXR3b3JrU3RhdGUgPSBnZXROZXR3b3JrU3RhdGUobmV0d29yayk7Ci0gICAgICBDb25u
ZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0
ZSk7Ci0gICAgICBpZiAoY29ubmVjdGlvblR5cGUgPT0gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElP
Tl9OT05FKSB7Ci0gICAgICAgIC8vIFRoaXMgbWF5IG5vdCBiZSBhbiBlcnJvci4gVGhlIE9TIG1h
eSBzaWduYWwgYSBuZXR3b3JrIGV2ZW50IHdpdGggY29ubmVjdGlvbiB0eXBlCi0gICAgICAgIC8v
IE5PTkUgd2hlbiB0aGUgbmV0d29yayBkaXNjb25uZWN0cy4KLSAgICAgICAgTG9nZ2luZy5kKFRB
RywgIk5ldHdvcmsgIiArIG5ldHdvcmsudG9TdHJpbmcoKSArICIgaXMgZGlzY29ubmVjdGVkIik7
Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotCi0gICAgICAvLyBTb21lIGFuZHJvaWQg
ZGV2aWNlIG1heSByZXR1cm4gYSBDT05ORUNUSU9OX1VOS05PV05fQ0VMTFVMQVIgb3IgQ09OTkVD
VElPTl9VTktOT1dOIHR5cGUsCi0gICAgICAvLyB3aGljaCBhcHBlYXJzIHRvIGJlIHVzYWJsZS4g
SnVzdCBsb2cgdGhlbSBoZXJlLgotICAgICAgaWYgKGNvbm5lY3Rpb25UeXBlID09IENvbm5lY3Rp
b25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTgotICAgICAgICAgIHx8IGNvbm5lY3Rpb25UeXBlID09
IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fVU5LTk9XTl9DRUxMVUxBUikgewotICAgICAgICBM
b2dnaW5nLmQoVEFHLCAiTmV0d29yayAiICsgbmV0d29yay50b1N0cmluZygpICsgIiBjb25uZWN0
aW9uIHR5cGUgaXMgIiArIGNvbm5lY3Rpb25UeXBlCi0gICAgICAgICAgICAgICAgKyAiIGJlY2F1
c2UgaXQgaGFzIHR5cGUgIiArIG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrVHlwZSgpICsgIiBhbmQg
c3VidHlwZSAiCi0gICAgICAgICAgICAgICAgKyBuZXR3b3JrU3RhdGUuZ2V0TmV0d29ya1N1YlR5
cGUoKSk7Ci0gICAgICB9Ci0KLSAgICAgIE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mb3Jt
YXRpb24gPQotICAgICAgICAgIG5ldyBOZXR3b3JrSW5mb3JtYXRpb24obGlua1Byb3BlcnRpZXMu
Z2V0SW50ZXJmYWNlTmFtZSgpLCBjb25uZWN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgbmV0d29y
a1RvTmV0SWQobmV0d29yayksIGdldElQQWRkcmVzc2VzKGxpbmtQcm9wZXJ0aWVzKSk7Ci0gICAg
ICByZXR1cm4gbmV0d29ya0luZm9ybWF0aW9uOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJl
dHVybnMgdHJ1ZSBpZiB7QGNvZGUgbmV0d29ya30gY2FuIHByb3ZpZGUgSW50ZXJuZXQgYWNjZXNz
LiBDYW4gYmUgdXNlZCB0bwotICAgICAqIGlnbm9yZSBzcGVjaWFsaXplZCBuZXR3b3JrcyAoZS5n
LiBJTVMsIEZPVEEpLgotICAgICAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAg
Ym9vbGVhbiBoYXNJbnRlcm5ldENhcGFiaWxpdHkoTmV0d29yayBuZXR3b3JrKSB7Ci0gICAgICBp
ZiAoY29ubmVjdGl2aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIH0KLSAgICAgIGZpbmFsIE5ldHdvcmtDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzID0g
Y29ubmVjdGl2aXR5TWFuYWdlci5nZXROZXR3b3JrQ2FwYWJpbGl0aWVzKG5ldHdvcmspOwotICAg
ICAgcmV0dXJuIGNhcGFiaWxpdGllcyAhPSBudWxsICYmIGNhcGFiaWxpdGllcy5oYXNDYXBhYmls
aXR5KE5FVF9DQVBBQklMSVRZX0lOVEVSTkVUKTsKLSAgICB9Ci0KLSAgICAvKiogT25seSBjYWxs
YWJsZSBvbiBMb2xsaXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuICovCi0gICAgQFN1cHByZXNzTGlu
dCgiTmV3QXBpIikKLSAgICBwdWJsaWMgdm9pZCByZWdpc3Rlck5ldHdvcmtDYWxsYmFjayhOZXR3
b3JrQ2FsbGJhY2sgbmV0d29ya0NhbGxiYWNrKSB7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2Vy
LnJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKAotICAgICAgICAgIG5ldyBOZXR3b3JrUmVxdWVzdC5C
dWlsZGVyKCkuYWRkQ2FwYWJpbGl0eShORVRfQ0FQQUJJTElUWV9JTlRFUk5FVCkuYnVpbGQoKSwK
LSAgICAgICAgICBuZXR3b3JrQ2FsbGJhY2spOwotICAgIH0KLQotICAgIC8qKiBPbmx5IGNhbGxh
YmxlIG9uIExvbGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcy4gKi8KLSAgICBAU3VwcHJlc3NMaW50
KCJOZXdBcGkiKQotICAgIHB1YmxpYyB2b2lkIHJlcXVlc3RNb2JpbGVOZXR3b3JrKE5ldHdvcmtD
YWxsYmFjayBuZXR3b3JrQ2FsbGJhY2spIHsKLSAgICAgIE5ldHdvcmtSZXF1ZXN0LkJ1aWxkZXIg
YnVpbGRlciA9IG5ldyBOZXR3b3JrUmVxdWVzdC5CdWlsZGVyKCk7Ci0gICAgICBidWlsZGVyLmFk
ZENhcGFiaWxpdHkoTkVUX0NBUEFCSUxJVFlfSU5URVJORVQpLmFkZFRyYW5zcG9ydFR5cGUoVFJB
TlNQT1JUX0NFTExVTEFSKTsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXIucmVxdWVzdE5ldHdv
cmsoYnVpbGRlci5idWlsZCgpLCBuZXR3b3JrQ2FsbGJhY2spOwotICAgIH0KLQotICAgIEBTdXBw
cmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgSVBBZGRyZXNzW10gZ2V0SVBBZGRyZXNzZXMoTGlua1By
b3BlcnRpZXMgbGlua1Byb3BlcnRpZXMpIHsKLSAgICAgIElQQWRkcmVzc1tdIGlwQWRkcmVzc2Vz
ID0gbmV3IElQQWRkcmVzc1tsaW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkuc2l6ZSgp
XTsKLSAgICAgIGludCBpID0gMDsKLSAgICAgIGZvciAoTGlua0FkZHJlc3MgbGlua0FkZHJlc3Mg
OiBsaW5rUHJvcGVydGllcy5nZXRMaW5rQWRkcmVzc2VzKCkpIHsKLSAgICAgICAgaXBBZGRyZXNz
ZXNbaV0gPSBuZXcgSVBBZGRyZXNzKGxpbmtBZGRyZXNzLmdldEFkZHJlc3MoKS5nZXRBZGRyZXNz
KCkpOwotICAgICAgICArK2k7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gaXBBZGRyZXNzZXM7Ci0g
ICAgfQotCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBwdWJsaWMgdm9pZCByZWxl
YXNlQ2FsbGJhY2soTmV0d29ya0NhbGxiYWNrIG5ldHdvcmtDYWxsYmFjaykgewotICAgICAgaWYg
KHN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVW5y
ZWdpc3RlciBuZXR3b3JrIGNhbGxiYWNrIik7Ci0gICAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXIu
dW5yZWdpc3Rlck5ldHdvcmtDYWxsYmFjayhuZXR3b3JrQ2FsbGJhY2spOwotICAgICAgfQotICAg
IH0KLQotICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnROZXR3b3JrQ2FsbGJhY2soKSB7Ci0gICAg
ICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9M
TElQT1AgJiYgY29ubmVjdGl2aXR5TWFuYWdlciAhPSBudWxsOwotICAgIH0KLSAgfQotCi0gIC8q
KiBRdWVyaWVzIHRoZSBXaWZpTWFuYWdlciBmb3IgU1NJRCBvZiB0aGUgY3VycmVudCBXaWZpIGNv
bm5lY3Rpb24uICovCi0gIHN0YXRpYyBjbGFzcyBXaWZpTWFuYWdlckRlbGVnYXRlIHsKLSAgICBw
cml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgICBXaWZpTWFuYWdlckRlbGVnYXRlKENv
bnRleHQgY29udGV4dCkgewotICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICB9Ci0K
LSAgICAvLyBGb3IgdGVzdGluZy4KLSAgICBXaWZpTWFuYWdlckRlbGVnYXRlKCkgewotICAgICAg
Ly8gQWxsIHRoZSBtZXRob2RzIGJlbG93IHNob3VsZCBiZSBvdmVycmlkZGVuLgotICAgICAgY29u
dGV4dCA9IG51bGw7Ci0gICAgfQotCi0gICAgU3RyaW5nIGdldFdpZmlTU0lEKCkgewotICAgICAg
ZmluYWwgSW50ZW50IGludGVudCA9IGNvbnRleHQucmVnaXN0ZXJSZWNlaXZlcigKLSAgICAgICAg
ICBudWxsLCBuZXcgSW50ZW50RmlsdGVyKFdpZmlNYW5hZ2VyLk5FVFdPUktfU1RBVEVfQ0hBTkdF
RF9BQ1RJT04pKTsKLSAgICAgIGlmIChpbnRlbnQgIT0gbnVsbCkgewotICAgICAgICBmaW5hbCBX
aWZpSW5mbyB3aWZpSW5mbyA9IGludGVudC5nZXRQYXJjZWxhYmxlRXh0cmEoV2lmaU1hbmFnZXIu
RVhUUkFfV0lGSV9JTkZPKTsKLSAgICAgICAgaWYgKHdpZmlJbmZvICE9IG51bGwpIHsKLSAgICAg
ICAgICBmaW5hbCBTdHJpbmcgc3NpZCA9IHdpZmlJbmZvLmdldFNTSUQoKTsKLSAgICAgICAgICBp
ZiAoc3NpZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZXR1cm4gc3NpZDsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiAiIjsKLSAgICB9Ci0gIH0KLQotICBz
dGF0aWMgZmluYWwgbG9uZyBJTlZBTElEX05FVF9JRCA9IC0xOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCI7Ci0KLSAgLy8gT2Jz
ZXJ2ZXIgZm9yIHRoZSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlLgotICBwcml2YXRlIGZpbmFsIE9i
c2VydmVyIG9ic2VydmVyOwotICBwcml2YXRlIGZpbmFsIEludGVudEZpbHRlciBpbnRlbnRGaWx0
ZXI7Ci0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotICAvLyBVc2VkIHRvIHJlcXVl
c3QgbW9iaWxlIG5ldHdvcmsuIEl0IGRvZXMgbm90IGRvIGFueXRoaW5nIGV4Y2VwdCBmb3Iga2Vl
cGluZwotICAvLyB0aGUgY2FsbGJhY2sgZm9yIHJlbGVhc2luZyB0aGUgcmVxdWVzdC4KLSAgcHJp
dmF0ZSBmaW5hbCBOZXR3b3JrQ2FsbGJhY2sgbW9iaWxlTmV0d29ya0NhbGxiYWNrOwotICAvLyBV
c2VkIHRvIHJlY2VpdmUgdXBkYXRlcyBvbiBhbGwgbmV0d29ya3MuCi0gIHByaXZhdGUgZmluYWwg
TmV0d29ya0NhbGxiYWNrIGFsbE5ldHdvcmtDYWxsYmFjazsKLSAgLy8gY29ubmVjdGl2aXR5TWFu
YWdlckRlbGVnYXRlIGFuZCB3aWZpTWFuYWdlckRlbGVnYXRlIGFyZSBvbmx5IG5vbi1maW5hbCBm
b3IgdGVzdGluZy4KLSAgcHJpdmF0ZSBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgY29ubmVj
dGl2aXR5TWFuYWdlckRlbGVnYXRlOwotICBwcml2YXRlIFdpZmlNYW5hZ2VyRGVsZWdhdGUgd2lm
aU1hbmFnZXJEZWxlZ2F0ZTsKLQotICBwcml2YXRlIGJvb2xlYW4gaXNSZWdpc3RlcmVkOwotICBw
cml2YXRlIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlOwotICBwcml2YXRlIFN0cmluZyB3
aWZpU1NJRDsKLQotICAvKioKLSAgICogT2JzZXJ2ZXIgaW50ZXJmYWNlIGJ5IHdoaWNoIG9ic2Vy
dmVyIGlzIG5vdGlmaWVkIG9mIG5ldHdvcmsgY2hhbmdlcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgaW50ZXJmYWNlIE9ic2VydmVyIHsKLSAgICAvKioKLSAgICAgKiBDYWxsZWQgd2hlbiBkZWZh
dWx0IG5ldHdvcmsgY2hhbmdlcy4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rp
b25UeXBlQ2hhbmdlZChDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSk7Ci0gICAgcHVi
bGljIHZvaWQgb25OZXR3b3JrQ29ubmVjdChOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm8p
OwotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBuZXR3b3JrSGFuZGxl
KTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RzIGEgTmV0d29ya01vbml0b3JBdXRvRGV0
ZWN0LiBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gVUkgdGhyZWFkLgotICAgKi8KLSAgQFN1cHBy
ZXNzTGludCgiTmV3QXBpIikKLSAgcHVibGljIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdChPYnNl
cnZlciBvYnNlcnZlciwgQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgdGhpcy5vYnNlcnZlciA9IG9i
c2VydmVyOwotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgY29ubmVjdGl2aXR5TWFu
YWdlckRlbGVnYXRlID0gbmV3IENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZShjb250ZXh0KTsK
LSAgICB3aWZpTWFuYWdlckRlbGVnYXRlID0gbmV3IFdpZmlNYW5hZ2VyRGVsZWdhdGUoY29udGV4
dCk7Ci0KLSAgICBmaW5hbCBOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0gY29ubmVjdGl2aXR5
TWFuYWdlckRlbGVnYXRlLmdldE5ldHdvcmtTdGF0ZSgpOwotICAgIGNvbm5lY3Rpb25UeXBlID0g
Z2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRlKTsKLSAgICB3aWZpU1NJRCA9IGdldFdpZmlT
U0lEKG5ldHdvcmtTdGF0ZSk7Ci0gICAgaW50ZW50RmlsdGVyID0gbmV3IEludGVudEZpbHRlcihD
b25uZWN0aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9BQ1RJT04pOwotCi0gICAgcmVnaXN0ZXJS
ZWNlaXZlcigpOwotICAgIGlmIChjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUuc3VwcG9ydE5l
dHdvcmtDYWxsYmFjaygpKSB7Ci0gICAgICAvLyBPbiBBbmRyb2lkIDYuMC4wLCB0aGUgV1JJVEVf
U0VUVElOR1MgcGVybWlzc2lvbiBpcyBuZWNlc3NhcnkgZm9yCi0gICAgICAvLyByZXF1ZXN0TmV0
d29yaywgc28gaXQgd2lsbCBmYWlsLiBUaGlzIHdhcyBmaXhlZCBpbiBBbmRyb2lkIDYuMC4xLgot
ICAgICAgTmV0d29ya0NhbGxiYWNrIHRlbXBOZXR3b3JrQ2FsbGJhY2sgPSBuZXcgTmV0d29ya0Nh
bGxiYWNrKCk7Ci0gICAgICB0cnkgewotICAgICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdh
dGUucmVxdWVzdE1vYmlsZU5ldHdvcmsodGVtcE5ldHdvcmtDYWxsYmFjayk7Ci0gICAgICB9IGNh
dGNoIChqYXZhLmxhbmcuU2VjdXJpdHlFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLnco
VEFHLCAiVW5hYmxlIHRvIG9idGFpbiBwZXJtaXNzaW9uIHRvIHJlcXVlc3QgYSBjZWxsdWxhciBu
ZXR3b3JrLiIpOwotICAgICAgICB0ZW1wTmV0d29ya0NhbGxiYWNrID0gbnVsbDsKLSAgICAgIH0K
LSAgICAgIG1vYmlsZU5ldHdvcmtDYWxsYmFjayA9IHRlbXBOZXR3b3JrQ2FsbGJhY2s7Ci0gICAg
ICBhbGxOZXR3b3JrQ2FsbGJhY2sgPSBuZXcgU2ltcGxlTmV0d29ya0NhbGxiYWNrKCk7Ci0gICAg
ICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUucmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2soYWxs
TmV0d29ya0NhbGxiYWNrKTsKLSAgICB9IGVsc2UgewotICAgICAgbW9iaWxlTmV0d29ya0NhbGxi
YWNrID0gbnVsbDsKLSAgICAgIGFsbE5ldHdvcmtDYWxsYmFjayA9IG51bGw7Ci0gICAgfQotICB9
Ci0KLSAgLyoqCi0gICAqIEFsbG93cyBvdmVycmlkaW5nIHRoZSBDb25uZWN0aXZpdHlNYW5hZ2Vy
RGVsZWdhdGUgZm9yIHRlc3RzLgotICAgKi8KLSAgdm9pZCBzZXRDb25uZWN0aXZpdHlNYW5hZ2Vy
RGVsZWdhdGVGb3JUZXN0cyhDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgZGVsZWdhdGUpIHsK
LSAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgPSBkZWxlZ2F0ZTsKLSAgfQotCi0gIC8q
KgotICAgKiBBbGxvd3Mgb3ZlcnJpZGluZyB0aGUgV2lmaU1hbmFnZXJEZWxlZ2F0ZSBmb3IgdGVz
dHMuCi0gICAqLwotICB2b2lkIHNldFdpZmlNYW5hZ2VyRGVsZWdhdGVGb3JUZXN0cyhXaWZpTWFu
YWdlckRlbGVnYXRlIGRlbGVnYXRlKSB7Ci0gICAgd2lmaU1hbmFnZXJEZWxlZ2F0ZSA9IGRlbGVn
YXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgd2hldGhlciB0aGUgb2JqZWN0IGhhcyBy
ZWdpc3RlcmVkIHRvIHJlY2VpdmUgbmV0d29yayBjb25uZWN0aXZpdHkgaW50ZW50cy4KLSAgICog
VmlzaWJsZSBmb3IgdGVzdGluZy4KLSAgICovCi0gIGJvb2xlYW4gaXNSZWNlaXZlclJlZ2lzdGVy
ZWRGb3JUZXN0aW5nKCkgewotICAgIHJldHVybiBpc1JlZ2lzdGVyZWQ7Ci0gIH0KLQotICBMaXN0
PE5ldHdvcmtJbmZvcm1hdGlvbj4gZ2V0QWN0aXZlTmV0d29ya0xpc3QoKSB7Ci0gICAgcmV0dXJu
IGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5nZXRBY3RpdmVOZXR3b3JrTGlzdCgpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICBpZiAoYWxsTmV0d29ya0NhbGxiYWNr
ICE9IG51bGwpIHsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5yZWxlYXNlQ2Fs
bGJhY2soYWxsTmV0d29ya0NhbGxiYWNrKTsKLSAgICB9Ci0gICAgaWYgKG1vYmlsZU5ldHdvcmtD
YWxsYmFjayAhPSBudWxsKSB7Ci0gICAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUucmVs
ZWFzZUNhbGxiYWNrKG1vYmlsZU5ldHdvcmtDYWxsYmFjayk7Ci0gICAgfQotICAgIHVucmVnaXN0
ZXJSZWNlaXZlcigpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVycyBhIEJyb2FkY2FzdFJl
Y2VpdmVyIGluIHRoZSBnaXZlbiBjb250ZXh0LgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlZ2lz
dGVyUmVjZWl2ZXIoKSB7Ci0gICAgaWYgKGlzUmVnaXN0ZXJlZCkKLSAgICAgIHJldHVybjsKLQot
ICAgIGlzUmVnaXN0ZXJlZCA9IHRydWU7Ci0gICAgY29udGV4dC5yZWdpc3RlclJlY2VpdmVyKHRo
aXMsIGludGVudEZpbHRlcik7Ci0gIH0KLQotICAvKioKLSAgICogVW5yZWdpc3RlcnMgdGhlIEJy
b2FkY2FzdFJlY2VpdmVyIGluIHRoZSBnaXZlbiBjb250ZXh0LgotICAgKi8KLSAgcHJpdmF0ZSB2
b2lkIHVucmVnaXN0ZXJSZWNlaXZlcigpIHsKLSAgICBpZiAoIWlzUmVnaXN0ZXJlZCkKLSAgICAg
IHJldHVybjsKLQotICAgIGlzUmVnaXN0ZXJlZCA9IGZhbHNlOwotICAgIGNvbnRleHQudW5yZWdp
c3RlclJlY2VpdmVyKHRoaXMpOwotICB9Ci0KLSAgcHVibGljIE5ldHdvcmtTdGF0ZSBnZXRDdXJy
ZW50TmV0d29ya1N0YXRlKCkgewotICAgIHJldHVybiBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdh
dGUuZ2V0TmV0d29ya1N0YXRlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBOZXRJRCBv
ZiBkZXZpY2UncyBjdXJyZW50IGRlZmF1bHQgY29ubmVjdGVkIG5ldHdvcmsgdXNlZCBmb3IKLSAg
ICogY29tbXVuaWNhdGlvbi4KLSAgICogT25seSBpbXBsZW1lbnRlZCBvbiBMb2xsaXBvcCBhbmQg
bmV3ZXIgcmVsZWFzZXMsIHJldHVybnMgSU5WQUxJRF9ORVRfSUQKLSAgICogd2hlbiBub3QgaW1w
bGVtZW50ZWQuCi0gICAqLwotICBwdWJsaWMgbG9uZyBnZXREZWZhdWx0TmV0SWQoKSB7Ci0gICAg
cmV0dXJuIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5nZXREZWZhdWx0TmV0SWQoKTsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgQ29ubmVjdGlvblR5cGUgZ2V0Q29ubmVjdGlvblR5cGUoTmV0
d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSkgewotICAgIGlmICghbmV0d29ya1N0YXRlLmlzQ29ubmVj
dGVkKCkpIHsKLSAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX05PTkU7Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChuZXR3b3JrU3RhdGUuZ2V0TmV0d29ya1R5cGUoKSkgewotICAg
ICAgY2FzZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfRVRIRVJORVQ6Ci0gICAgICAgIHJldHVy
biBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX0VUSEVSTkVUOwotICAgICAgY2FzZSBDb25uZWN0
aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSToKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNP
Tk5FQ1RJT05fV0lGSTsKLSAgICAgIGNhc2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1dJTUFY
OgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl80RzsKLSAgICAgIGNh
c2UgQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX0JMVUVUT09USDoKLSAgICAgICAgcmV0dXJuIENv
bm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fQkxVRVRPT1RIOwotICAgICAgY2FzZSBDb25uZWN0aXZp
dHlNYW5hZ2VyLlRZUEVfTU9CSUxFOgotICAgICAgICAvLyBVc2UgaW5mb3JtYXRpb24gZnJvbSBU
ZWxlcGhvbnlNYW5hZ2VyIHRvIGNsYXNzaWZ5IHRoZSBjb25uZWN0aW9uLgotICAgICAgICBzd2l0
Y2ggKG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrU3ViVHlwZSgpKSB7Ci0gICAgICAgICAgY2FzZSBU
ZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9HUFJTOgotICAgICAgICAgIGNhc2UgVGVsZXBo
b255TWFuYWdlci5ORVRXT1JLX1RZUEVfRURHRToKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1h
bmFnZXIuTkVUV09SS19UWVBFX0NETUE6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2Vy
Lk5FVFdPUktfVFlQRV8xeFJUVDoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVU
V09SS19UWVBFX0lERU46Ci0gICAgICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVD
VElPTl8yRzsKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1VN
VFM6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9FVkRPXzA6
Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9FVkRPX0E6Ci0g
ICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9IU0RQQToKLSAgICAg
ICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0hTVVBBOgotICAgICAgICAg
IGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNQQToKLSAgICAgICAgICBjYXNl
IFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fQjoKLSAgICAgICAgICBjYXNlIFRl
bGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX0VIUlBEOgotICAgICAgICAgIGNhc2UgVGVsZXBo
b255TWFuYWdlci5ORVRXT1JLX1RZUEVfSFNQQVA6Ci0gICAgICAgICAgICByZXR1cm4gQ29ubmVj
dGlvblR5cGUuQ09OTkVDVElPTl8zRzsKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIu
TkVUV09SS19UWVBFX0xURToKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05O
RUNUSU9OXzRHOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gQ29ubmVj
dGlvblR5cGUuQ09OTkVDVElPTl9VTktOT1dOX0NFTExVTEFSOwotICAgICAgICB9Ci0gICAgICBk
ZWZhdWx0OgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9VTktOT1dO
OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdldFdpZmlTU0lEKE5ldHdvcmtTdGF0
ZSBuZXR3b3JrU3RhdGUpIHsKLSAgICBpZiAoZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRl
KSAhPSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1dJRkkpCi0gICAgICByZXR1cm4gIiI7Ci0g
ICAgcmV0dXJuIHdpZmlNYW5hZ2VyRGVsZWdhdGUuZ2V0V2lmaVNTSUQoKTsKLSAgfQotCi0gIC8v
IEJyb2FkY2FzdFJlY2VpdmVyCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblJlY2VpdmUo
Q29udGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgZmluYWwgTmV0d29ya1N0YXRl
IG5ldHdvcmtTdGF0ZSA9IGdldEN1cnJlbnROZXR3b3JrU3RhdGUoKTsKLSAgICBpZiAoQ29ubmVj
dGl2aXR5TWFuYWdlci5DT05ORUNUSVZJVFlfQUNUSU9OLmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9u
KCkpKSB7Ci0gICAgICBjb25uZWN0aW9uVHlwZUNoYW5nZWQobmV0d29ya1N0YXRlKTsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29ubmVjdGlvblR5cGVDaGFuZ2VkKE5ldHdvcmtTdGF0
ZSBuZXR3b3JrU3RhdGUpIHsKLSAgICBDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSA9
IGdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSk7Ci0gICAgU3RyaW5nIG5ld1dpZmlTU0lE
ID0gZ2V0V2lmaVNTSUQobmV0d29ya1N0YXRlKTsKLSAgICBpZiAobmV3Q29ubmVjdGlvblR5cGUg
PT0gY29ubmVjdGlvblR5cGUgJiYgbmV3V2lmaVNTSUQuZXF1YWxzKHdpZmlTU0lEKSkKLSAgICAg
IHJldHVybjsKLQotICAgIGNvbm5lY3Rpb25UeXBlID0gbmV3Q29ubmVjdGlvblR5cGU7Ci0gICAg
d2lmaVNTSUQgPSBuZXdXaWZpU1NJRDsKLSAgICBMb2dnaW5nLmQoVEFHLCAiTmV0d29yayBjb25u
ZWN0aXZpdHkgY2hhbmdlZCwgdHlwZSBpczogIiArIGNvbm5lY3Rpb25UeXBlKTsKLSAgICBvYnNl
cnZlci5vbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChuZXdDb25uZWN0aW9uVHlwZSk7Ci0gIH0KLQot
ICAvKioKLSAgICogRXh0cmFjdHMgTmV0SUQgb2YgbmV0d29yayBvbiBMb2xsaXBvcCBhbmQgTmV0
d29ya0hhbmRsZSAod2hpY2ggaXMgbXVuZ2xlZAotICAgKiBOZXRJRCkgb24gTWFyc2htYWxsb3cg
YW5kIG5ld2VyIHJlbGVhc2VzLiBPbmx5IGF2YWlsYWJsZSBvbiBMb2xsaXBvcCBhbmQKLSAgICog
bmV3ZXIgcmVsZWFzZXMuIFJldHVybnMgbG9uZyBzaW5jZSBnZXROZXR3b3JrSGFuZGxlIHJldHVy
bnMgbG9uZy4KLSAgICovCi0gIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gIHByaXZhdGUgc3Rh
dGljIGxvbmcgbmV0d29ya1RvTmV0SWQoTmV0d29yayBuZXR3b3JrKSB7Ci0gICAgaWYgKEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk0pIHsKLSAgICAgIHJldHVy
biBuZXR3b3JrLmdldE5ldHdvcmtIYW5kbGUoKTsKLSAgICB9Ci0KLSAgICAvLyBOT1RFKGhvbmdo
YWl6KTogVGhpcyBkZXBlbmRzIG9uIEFuZHJvaWQgZnJhbWV3b3JrIGltcGxlbWVudGF0aW9uIGRl
dGFpbHMuCi0gICAgLy8gVGhlc2UgZGV0YWlscyBjYW5ub3QgY2hhbmdlIGJlY2F1c2UgTG9sbGlw
b3AgaGFzIGJlZW4gcmVsZWFzZWQuCi0gICAgcmV0dXJuIEludGVnZXIucGFyc2VJbnQobmV0d29y
ay50b1N0cmluZygpKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9PV05FUlMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9PV05FUlMJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvT1dORVJTCShub25leGlzdGVudCkKQEAgLTEsNCArMCwwIEBACi1t
YWdqZWRAd2VicnRjLm9yZwotCi1wZXItZmlsZSBDYW1lcmEqPXNha2FsQHdlYnJ0Yy5vcmcKLXBl
ci1maWxlIE1ldHJpY3MuamF2YT1zYWthbEB3ZWJydGMub3JnCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1BlZXJDb25uZWN0aW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9Q
ZWVyQ29ubmVjdGlvbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L1BlZXJDb25uZWN0aW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMTYgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS51dGls
LkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEu
dXRpbC5MaXN0OwotCi0vKioKLSAqIEphdmEtbGFuZCB2ZXJzaW9uIG9mIHRoZSBQZWVyQ29ubmVj
dGlvbiBBUElzOyB3cmFwcyB0aGUgQysrIEFQSQotICogaHR0cDovL3d3dy53ZWJydGMub3JnL3Jl
ZmVyZW5jZS9uYXRpdmUtYXBpcywgd2hpY2ggaW4gdHVybiBpcyBpbnNwaXJlZCBieSB0aGUKLSAq
IEpTIEFQSXM6IGh0dHA6Ly9kZXYudzMub3JnLzIwMTEvd2VicnRjL2VkaXRvci93ZWJydGMuaHRt
bCBhbmQKLSAqIGh0dHA6Ly93d3cudzMub3JnL1RSL21lZGlhY2FwdHVyZS1zdHJlYW1zLwotICov
Ci1wdWJsaWMgY2xhc3MgUGVlckNvbm5lY3Rpb24gewotICBzdGF0aWMgewotICAgIFN5c3RlbS5s
b2FkTGlicmFyeSgiamluZ2xlX3BlZXJjb25uZWN0aW9uX3NvIik7Ci0gIH0KLQotICAvKiogVHJh
Y2tzIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VHYXRoZXJpbmdTdGF0ZSAqLwotICBwdWJs
aWMgZW51bSBJY2VHYXRoZXJpbmdTdGF0ZSB7IE5FVywgR0FUSEVSSU5HLCBDT01QTEVURSB9Ci0K
LSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6SWNlQ29ubmVjdGlvblN0YXRl
ICovCi0gIHB1YmxpYyBlbnVtIEljZUNvbm5lY3Rpb25TdGF0ZSB7Ci0gICAgTkVXLAotICAgIENI
RUNLSU5HLAotICAgIENPTk5FQ1RFRCwKLSAgICBDT01QTEVURUQsCi0gICAgRkFJTEVELAotICAg
IERJU0NPTk5FQ1RFRCwKLSAgICBDTE9TRUQKLSAgfQotCi0gIC8qKiBUcmFja3MgUGVlckNvbm5l
Y3Rpb25JbnRlcmZhY2U6OlNpZ25hbGluZ1N0YXRlICovCi0gIHB1YmxpYyBlbnVtIFNpZ25hbGlu
Z1N0YXRlIHsKLSAgICBTVEFCTEUsCi0gICAgSEFWRV9MT0NBTF9PRkZFUiwKLSAgICBIQVZFX0xP
Q0FMX1BSQU5TV0VSLAotICAgIEhBVkVfUkVNT1RFX09GRkVSLAotICAgIEhBVkVfUkVNT1RFX1BS
QU5TV0VSLAotICAgIENMT1NFRAotICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29u
bmVjdGlvbk9ic2VydmVyLiAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBPYnNlcnZlciB7
Ci0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHRoZSBTaWduYWxpbmdTdGF0ZSBjaGFuZ2VzLiAqLwot
ICAgIHB1YmxpYyB2b2lkIG9uU2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlIG5ld1N0YXRl
KTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiB0aGUgSWNlQ29ubmVjdGlvblN0YXRlIGNoYW5n
ZXMuICovCi0gICAgcHVibGljIHZvaWQgb25JY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rp
b25TdGF0ZSBuZXdTdGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gdGhlIElDRSBjb25u
ZWN0aW9uIHJlY2VpdmluZyBzdGF0dXMgY2hhbmdlcy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbklj
ZUNvbm5lY3Rpb25SZWNlaXZpbmdDaGFuZ2UoYm9vbGVhbiByZWNlaXZpbmcpOwotCi0gICAgLyoq
IFRyaWdnZXJlZCB3aGVuIHRoZSBJY2VHYXRoZXJpbmdTdGF0ZSBjaGFuZ2VzLiAqLwotICAgIHB1
YmxpYyB2b2lkIG9uSWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0YXRlIG5ld1N0YXRl
KTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiBhIG5ldyBJQ0UgY2FuZGlkYXRlIGhhcyBiZWVu
IGZvdW5kLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlKEljZUNhbmRpZGF0ZSBj
YW5kaWRhdGUpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIHNvbWUgSUNFIGNhbmRpZGF0ZXMg
aGF2ZSBiZWVuIHJlbW92ZWQuICovCi0gICAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGVzUmVt
b3ZlZChJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hl
biBtZWRpYSBpcyByZWNlaXZlZCBvbiBhIG5ldyBzdHJlYW0gZnJvbSByZW1vdGUgcGVlci4gKi8K
LSAgICBwdWJsaWMgdm9pZCBvbkFkZFN0cmVhbShNZWRpYVN0cmVhbSBzdHJlYW0pOwotCi0gICAg
LyoqIFRyaWdnZXJlZCB3aGVuIGEgcmVtb3RlIHBlZXIgY2xvc2UgYSBzdHJlYW0uICovCi0gICAg
cHVibGljIHZvaWQgb25SZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKTsKLQotICAgIC8q
KiBUcmlnZ2VyZWQgd2hlbiBhIHJlbW90ZSBwZWVyIG9wZW5zIGEgRGF0YUNoYW5uZWwuICovCi0g
ICAgcHVibGljIHZvaWQgb25EYXRhQ2hhbm5lbChEYXRhQ2hhbm5lbCBkYXRhQ2hhbm5lbCk7Ci0K
LSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gcmVuZWdvdGlhdGlvbiBpcyBuZWNlc3NhcnkuICovCi0g
ICAgcHVibGljIHZvaWQgb25SZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gIH0KLQotICAvKiogSmF2
YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkljZVNlcnZlci4gKi8KLSAgcHVi
bGljIHN0YXRpYyBjbGFzcyBJY2VTZXJ2ZXIgewotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgdXJp
OwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgdXNlcm5hbWU7Ci0gICAgcHVibGljIGZpbmFsIFN0
cmluZyBwYXNzd29yZDsKLQotICAgIC8qKiBDb252ZW5pZW5jZSBjb25zdHJ1Y3RvciBmb3IgU1RV
TiBzZXJ2ZXJzLiAqLwotICAgIHB1YmxpYyBJY2VTZXJ2ZXIoU3RyaW5nIHVyaSkgewotICAgICAg
dGhpcyh1cmksICIiLCAiIik7Ci0gICAgfQotCi0gICAgcHVibGljIEljZVNlcnZlcihTdHJpbmcg
dXJpLCBTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgewotICAgICAgdGhpcy51cmkg
PSB1cmk7Ci0gICAgICB0aGlzLnVzZXJuYW1lID0gdXNlcm5hbWU7Ci0gICAgICB0aGlzLnBhc3N3
b3JkID0gcGFzc3dvcmQ7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsK
LSAgICAgIHJldHVybiB1cmkgKyAiWyIgKyB1c2VybmFtZSArICI6IiArIHBhc3N3b3JkICsgIl0i
OwotICAgIH0KLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRl
cmZhY2UuSWNlVHJhbnNwb3J0c1R5cGUgKi8KLSAgcHVibGljIGVudW0gSWNlVHJhbnNwb3J0c1R5
cGUgeyBOT05FLCBSRUxBWSwgTk9IT1NULCBBTEwgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2Yg
UGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuQnVuZGxlUG9saWN5ICovCi0gIHB1YmxpYyBlbnVtIEJ1
bmRsZVBvbGljeSB7IEJBTEFOQ0VELCBNQVhCVU5ETEUsIE1BWENPTVBBVCB9Ci0KLSAgLyoqIEph
dmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5SdGNwTXV4UG9saWN5ICovCi0g
IHB1YmxpYyBlbnVtIFJ0Y3BNdXhQb2xpY3kgeyBORUdPVElBVEUsIFJFUVVJUkUgfQotCi0gIC8q
KiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuVGNwQ2FuZGlkYXRlUG9s
aWN5ICovCi0gIHB1YmxpYyBlbnVtIFRjcENhbmRpZGF0ZVBvbGljeSB7IEVOQUJMRUQsIERJU0FC
TEVEIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkNh
bmRpZGF0ZU5ldHdvcmtQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gQ2FuZGlkYXRlTmV0d29ya1Bv
bGljeSB7IEFMTCwgTE9XX0NPU1QgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgcnRjOjpLZXlU
eXBlICovCi0gIHB1YmxpYyBlbnVtIEtleVR5cGUgeyBSU0EsIEVDRFNBIH0KLQotICAvKiogSmF2
YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlLkNvbnRpbnVhbEdhdGhlcmluZ1Bv
bGljeSAqLwotICBwdWJsaWMgZW51bSBDb250aW51YWxHYXRoZXJpbmdQb2xpY3kgeyBHQVRIRVJf
T05DRSwgR0FUSEVSX0NPTlRJTlVBTExZIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlLlJUQ0NvbmZpZ3VyYXRpb24gKi8KLSAgcHVibGljIHN0YXRpYyBj
bGFzcyBSVENDb25maWd1cmF0aW9uIHsKLSAgICBwdWJsaWMgSWNlVHJhbnNwb3J0c1R5cGUgaWNl
VHJhbnNwb3J0c1R5cGU7Ci0gICAgcHVibGljIExpc3Q8SWNlU2VydmVyPiBpY2VTZXJ2ZXJzOwot
ICAgIHB1YmxpYyBCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5OwotICAgIHB1YmxpYyBSdGNwTXV4
UG9saWN5IHJ0Y3BNdXhQb2xpY3k7Ci0gICAgcHVibGljIFRjcENhbmRpZGF0ZVBvbGljeSB0Y3BD
YW5kaWRhdGVQb2xpY3k7Ci0gICAgcHVibGljIENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kgY2FuZGlk
YXRlTmV0d29ya1BvbGljeTsKLSAgICBwdWJsaWMgaW50IGF1ZGlvSml0dGVyQnVmZmVyTWF4UGFj
a2V0czsKLSAgICBwdWJsaWMgYm9vbGVhbiBhdWRpb0ppdHRlckJ1ZmZlckZhc3RBY2NlbGVyYXRl
OwotICAgIHB1YmxpYyBpbnQgaWNlQ29ubmVjdGlvblJlY2VpdmluZ1RpbWVvdXQ7Ci0gICAgcHVi
bGljIGludCBpY2VCYWNrdXBDYW5kaWRhdGVQYWlyUGluZ0ludGVydmFsOwotICAgIHB1YmxpYyBL
ZXlUeXBlIGtleVR5cGU7Ci0gICAgcHVibGljIENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSBjb250
aW51YWxHYXRoZXJpbmdQb2xpY3k7Ci0gICAgcHVibGljIGludCBpY2VDYW5kaWRhdGVQb29sU2l6
ZTsKLSAgICBwdWJsaWMgYm9vbGVhbiBwcnVuZVR1cm5Qb3J0czsKLSAgICBwdWJsaWMgYm9vbGVh
biBwcmVzdW1lV3JpdGFibGVXaGVuRnVsbHlSZWxheWVkOwotCi0gICAgcHVibGljIFJUQ0NvbmZp
Z3VyYXRpb24oTGlzdDxJY2VTZXJ2ZXI+IGljZVNlcnZlcnMpIHsKLSAgICAgIGljZVRyYW5zcG9y
dHNUeXBlID0gSWNlVHJhbnNwb3J0c1R5cGUuQUxMOwotICAgICAgYnVuZGxlUG9saWN5ID0gQnVu
ZGxlUG9saWN5LkJBTEFOQ0VEOwotICAgICAgcnRjcE11eFBvbGljeSA9IFJ0Y3BNdXhQb2xpY3ku
TkVHT1RJQVRFOwotICAgICAgdGNwQ2FuZGlkYXRlUG9saWN5ID0gVGNwQ2FuZGlkYXRlUG9saWN5
LkVOQUJMRUQ7Ci0gICAgICBjYW5kaWRhdGVOZXR3b3JrUG9saWN5ID0gY2FuZGlkYXRlTmV0d29y
a1BvbGljeS5BTEw7Ci0gICAgICB0aGlzLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzOwotICAgICAg
YXVkaW9KaXR0ZXJCdWZmZXJNYXhQYWNrZXRzID0gNTA7Ci0gICAgICBhdWRpb0ppdHRlckJ1ZmZl
ckZhc3RBY2NlbGVyYXRlID0gZmFsc2U7Ci0gICAgICBpY2VDb25uZWN0aW9uUmVjZWl2aW5nVGlt
ZW91dCA9IC0xOwotICAgICAgaWNlQmFja3VwQ2FuZGlkYXRlUGFpclBpbmdJbnRlcnZhbCA9IC0x
OwotICAgICAga2V5VHlwZSA9IEtleVR5cGUuRUNEU0E7Ci0gICAgICBjb250aW51YWxHYXRoZXJp
bmdQb2xpY3kgPSBDb250aW51YWxHYXRoZXJpbmdQb2xpY3kuR0FUSEVSX09OQ0U7Ci0gICAgICBp
Y2VDYW5kaWRhdGVQb29sU2l6ZSA9IDA7Ci0gICAgICBwcnVuZVR1cm5Qb3J0cyA9IGZhbHNlOwot
ICAgICAgcHJlc3VtZVdyaXRhYmxlV2hlbkZ1bGx5UmVsYXllZCA9IGZhbHNlOwotICAgIH0KLSAg
fTsKLQotICBwcml2YXRlIGZpbmFsIExpc3Q8TWVkaWFTdHJlYW0+IGxvY2FsU3RyZWFtczsKLSAg
cHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZVBlZXJDb25uZWN0aW9uOwotICBwcml2YXRlIGZpbmFs
IGxvbmcgbmF0aXZlT2JzZXJ2ZXI7Ci0gIHByaXZhdGUgTGlzdDxSdHBTZW5kZXI+IHNlbmRlcnM7
Ci0gIHByaXZhdGUgTGlzdDxSdHBSZWNlaXZlcj4gcmVjZWl2ZXJzOwotCi0gIFBlZXJDb25uZWN0
aW9uKGxvbmcgbmF0aXZlUGVlckNvbm5lY3Rpb24sIGxvbmcgbmF0aXZlT2JzZXJ2ZXIpIHsKLSAg
ICB0aGlzLm5hdGl2ZVBlZXJDb25uZWN0aW9uID0gbmF0aXZlUGVlckNvbm5lY3Rpb247Ci0gICAg
dGhpcy5uYXRpdmVPYnNlcnZlciA9IG5hdGl2ZU9ic2VydmVyOwotICAgIGxvY2FsU3RyZWFtcyA9
IG5ldyBMaW5rZWRMaXN0PE1lZGlhU3RyZWFtPigpOwotICAgIHNlbmRlcnMgPSBuZXcgTGlua2Vk
TGlzdDxSdHBTZW5kZXI+KCk7Ci0gICAgcmVjZWl2ZXJzID0gbmV3IExpbmtlZExpc3Q8UnRwUmVj
ZWl2ZXI+KCk7Ci0gIH0KLQotICAvLyBKc2VwSW50ZXJmYWNlLgotICBwdWJsaWMgbmF0aXZlIFNl
c3Npb25EZXNjcmlwdGlvbiBnZXRMb2NhbERlc2NyaXB0aW9uKCk7Ci0KLSAgcHVibGljIG5hdGl2
ZSBTZXNzaW9uRGVzY3JpcHRpb24gZ2V0UmVtb3RlRGVzY3JpcHRpb24oKTsKLQotICBwdWJsaWMg
bmF0aXZlIERhdGFDaGFubmVsIGNyZWF0ZURhdGFDaGFubmVsKFN0cmluZyBsYWJlbCwgRGF0YUNo
YW5uZWwuSW5pdCBpbml0KTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgY3JlYXRlT2ZmZXIoU2Rw
T2JzZXJ2ZXIgb2JzZXJ2ZXIsIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMpOwotCi0gIHB1
YmxpYyBuYXRpdmUgdm9pZCBjcmVhdGVBbnN3ZXIoU2RwT2JzZXJ2ZXIgb2JzZXJ2ZXIsIE1lZGlh
Q29uc3RyYWludHMgY29uc3RyYWludHMpOwotCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBzZXRMb2Nh
bERlc2NyaXB0aW9uKFNkcE9ic2VydmVyIG9ic2VydmVyLCBTZXNzaW9uRGVzY3JpcHRpb24gc2Rw
KTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgc2V0UmVtb3RlRGVzY3JpcHRpb24oU2RwT2JzZXJ2
ZXIgb2JzZXJ2ZXIsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gIHB1YmxpYyBuYXRpdmUg
Ym9vbGVhbiBzZXRDb25maWd1cmF0aW9uKFJUQ0NvbmZpZ3VyYXRpb24gY29uZmlnKTsKLQotICBw
dWJsaWMgYm9vbGVhbiBhZGRJY2VDYW5kaWRhdGUoSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewot
ICAgIHJldHVybiBuYXRpdmVBZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlLnNkcE1pZCwgY2FuZGlk
YXRlLnNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZS5zZHApOwotICB9Ci0KLSAgcHVibGljIGJvb2xl
YW4gcmVtb3ZlSWNlQ2FuZGlkYXRlcyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7
Ci0gICAgcmV0dXJuIG5hdGl2ZVJlbW92ZUljZUNhbmRpZGF0ZXMoY2FuZGlkYXRlcyk7Ci0gIH0K
LQotICBwdWJsaWMgYm9vbGVhbiBhZGRTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAg
Ym9vbGVhbiByZXQgPSBuYXRpdmVBZGRMb2NhbFN0cmVhbShzdHJlYW0ubmF0aXZlU3RyZWFtKTsK
LSAgICBpZiAoIXJldCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBsb2NhbFN0
cmVhbXMuYWRkKHN0cmVhbSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCByZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAgbmF0aXZlUmVtb3ZlTG9j
YWxTdHJlYW0oc3RyZWFtLm5hdGl2ZVN0cmVhbSk7Ci0gICAgbG9jYWxTdHJlYW1zLnJlbW92ZShz
dHJlYW0pOwotICB9Ci0KLSAgcHVibGljIFJ0cFNlbmRlciBjcmVhdGVTZW5kZXIoU3RyaW5nIGtp
bmQsIFN0cmluZyBzdHJlYW1faWQpIHsKLSAgICBSdHBTZW5kZXIgbmV3X3NlbmRlciA9IG5hdGl2
ZUNyZWF0ZVNlbmRlcihraW5kLCBzdHJlYW1faWQpOwotICAgIGlmIChuZXdfc2VuZGVyICE9IG51
bGwpIHsKLSAgICAgIHNlbmRlcnMuYWRkKG5ld19zZW5kZXIpOwotICAgIH0KLSAgICByZXR1cm4g
bmV3X3NlbmRlcjsKLSAgfQotCi0gIC8vIE5vdGUgdGhhdCBjYWxsaW5nIGdldFNlbmRlcnMgd2ls
bCBkaXNwb3NlIG9mIHRoZSBzZW5kZXJzIHByZXZpb3VzbHkKLSAgLy8gcmV0dXJuZWQgKGFuZCBz
YW1lIGdvZXMgZm9yIGdldFJlY2VpdmVycykuCi0gIHB1YmxpYyBMaXN0PFJ0cFNlbmRlcj4gZ2V0
U2VuZGVycygpIHsKLSAgICBmb3IgKFJ0cFNlbmRlciBzZW5kZXIgOiBzZW5kZXJzKSB7Ci0gICAg
ICBzZW5kZXIuZGlzcG9zZSgpOwotICAgIH0KLSAgICBzZW5kZXJzID0gbmF0aXZlR2V0U2VuZGVy
cygpOwotICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHNlbmRlcnMpOwot
ICB9Ci0KLSAgcHVibGljIExpc3Q8UnRwUmVjZWl2ZXI+IGdldFJlY2VpdmVycygpIHsKLSAgICBm
b3IgKFJ0cFJlY2VpdmVyIHJlY2VpdmVyIDogcmVjZWl2ZXJzKSB7Ci0gICAgICByZWNlaXZlci5k
aXNwb3NlKCk7Ci0gICAgfQotICAgIHJlY2VpdmVycyA9IG5hdGl2ZUdldFJlY2VpdmVycygpOwot
ICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVMaXN0KHJlY2VpdmVycyk7Ci0gIH0K
LQotICBwdWJsaWMgYm9vbGVhbiBnZXRTdGF0cyhTdGF0c09ic2VydmVyIG9ic2VydmVyLCBNZWRp
YVN0cmVhbVRyYWNrIHRyYWNrKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUdldFN0YXRzKG9ic2VydmVy
LCAodHJhY2sgPT0gbnVsbCkgPyAwIDogdHJhY2submF0aXZlVHJhY2spOwotICB9Ci0KLSAgLy8g
U3RhcnRzIHJlY29yZGluZyBhbiBSVEMgZXZlbnQgbG9nLiBPd25lcnNoaXAgb2YgdGhlIGZpbGUg
aXMgdHJhbnNmZXJlZCB0bwotICAvLyB0aGUgbmF0aXZlIGNvZGUuIElmIGFuIFJUQyBldmVudCBs
b2cgaXMgYWxyZWFkeSBiZWluZyByZWNvcmRlZCwgaXQgd2lsbCBiZQotICAvLyBzdG9wcGVkIGFu
ZCBhIG5ldyBvbmUgd2lsbCBzdGFydCB1c2luZyB0aGUgcHJvdmlkZWQgZmlsZS4gTG9nZ2luZyB3
aWxsCi0gIC8vIGNvbnRpbnVlIHVudGlsIHRoZSBzdG9wUnRjRXZlbnRMb2cgZnVuY3Rpb24gaXMg
Y2FsbGVkLiBUaGUgbWF4X3NpemVfYnl0ZXMKLSAgLy8gYXJndW1lbnQgaXMgaWdub3JlZCwgaXQg
aXMgYWRkZWQgZm9yIGZ1dHVyZSB1c2UuCi0gIHB1YmxpYyBib29sZWFuIHN0YXJ0UnRjRXZlbnRM
b2coaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IG1heF9zaXplX2J5dGVzKSB7Ci0gICAgcmV0dXJu
IG5hdGl2ZVN0YXJ0UnRjRXZlbnRMb2coZmlsZV9kZXNjcmlwdG9yLCBtYXhfc2l6ZV9ieXRlcyk7
Ci0gIH0KLQotICAvLyBTdG9wcyByZWNvcmRpbmcgYW4gUlRDIGV2ZW50IGxvZy4gSWYgbm8gUlRD
IGV2ZW50IGxvZyBpcyBjdXJyZW50bHkgYmVpbmcKLSAgLy8gcmVjb3JkZWQsIHRoaXMgY2FsbCB3
aWxsIGhhdmUgbm8gZWZmZWN0LgotICBwdWJsaWMgdm9pZCBzdG9wUnRjRXZlbnRMb2coKSB7Ci0g
ICAgbmF0aXZlU3RvcFJ0Y0V2ZW50TG9nKCk7Ci0gIH0KLQotICAvLyBUT0RPKGZpc2NobWFuKTog
YWRkIHN1cHBvcnQgZm9yIERUTUYtcmVsYXRlZCBtZXRob2RzIG9uY2UgdGhhdCBBUEkKLSAgLy8g
c3RhYmlsaXplcy4KLSAgcHVibGljIG5hdGl2ZSBTaWduYWxpbmdTdGF0ZSBzaWduYWxpbmdTdGF0
ZSgpOwotCi0gIHB1YmxpYyBuYXRpdmUgSWNlQ29ubmVjdGlvblN0YXRlIGljZUNvbm5lY3Rpb25T
dGF0ZSgpOwotCi0gIHB1YmxpYyBuYXRpdmUgSWNlR2F0aGVyaW5nU3RhdGUgaWNlR2F0aGVyaW5n
U3RhdGUoKTsKLQotICBwdWJsaWMgbmF0aXZlIHZvaWQgY2xvc2UoKTsKLQotICBwdWJsaWMgdm9p
ZCBkaXNwb3NlKCkgewotICAgIGNsb3NlKCk7Ci0gICAgZm9yIChNZWRpYVN0cmVhbSBzdHJlYW0g
OiBsb2NhbFN0cmVhbXMpIHsKLSAgICAgIG5hdGl2ZVJlbW92ZUxvY2FsU3RyZWFtKHN0cmVhbS5u
YXRpdmVTdHJlYW0pOwotICAgICAgc3RyZWFtLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgbG9jYWxT
dHJlYW1zLmNsZWFyKCk7Ci0gICAgZm9yIChSdHBTZW5kZXIgc2VuZGVyIDogc2VuZGVycykgewot
ICAgICAgc2VuZGVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgc2VuZGVycy5jbGVhcigpOwotICAg
IGZvciAoUnRwUmVjZWl2ZXIgcmVjZWl2ZXIgOiByZWNlaXZlcnMpIHsKLSAgICAgIHJlY2VpdmVy
LmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgcmVjZWl2ZXJzLmNsZWFyKCk7Ci0gICAgZnJlZVBlZXJD
b25uZWN0aW9uKG5hdGl2ZVBlZXJDb25uZWN0aW9uKTsKLSAgICBmcmVlT2JzZXJ2ZXIobmF0aXZl
T2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZVBlZXJD
b25uZWN0aW9uKGxvbmcgbmF0aXZlUGVlckNvbm5lY3Rpb24pOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSB2b2lkIGZyZWVPYnNlcnZlcihsb25nIG5hdGl2ZU9ic2VydmVyKTsKLQotICBwcml2
YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUFkZEljZUNhbmRpZGF0ZSgKLSAgICAgIFN0cmluZyBz
ZHBNaWQsIGludCBzZHBNTGluZUluZGV4LCBTdHJpbmcgaWNlQ2FuZGlkYXRlU2RwKTsKLQotICBw
cml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVJlbW92ZUljZUNhbmRpZGF0ZXMoZmluYWwgSWNl
Q2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRp
dmVBZGRMb2NhbFN0cmVhbShsb25nIG5hdGl2ZVN0cmVhbSk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUg
dm9pZCBuYXRpdmVSZW1vdmVMb2NhbFN0cmVhbShsb25nIG5hdGl2ZVN0cmVhbSk7Ci0KLSAgcHJp
dmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVHZXRTdGF0cyhTdGF0c09ic2VydmVyIG9ic2VydmVy
LCBsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIG5hdGl2ZSBSdHBTZW5kZXIgbmF0aXZl
Q3JlYXRlU2VuZGVyKFN0cmluZyBraW5kLCBTdHJpbmcgc3RyZWFtX2lkKTsKLQotICBwcml2YXRl
IG5hdGl2ZSBMaXN0PFJ0cFNlbmRlcj4gbmF0aXZlR2V0U2VuZGVycygpOwotCi0gIHByaXZhdGUg
bmF0aXZlIExpc3Q8UnRwUmVjZWl2ZXI+IG5hdGl2ZUdldFJlY2VpdmVycygpOwotCi0gIHByaXZh
dGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU3RhcnRSdGNFdmVudExvZyhpbnQgZmlsZV9kZXNjcmlw
dG9yLCBpbnQgbWF4X3NpemVfYnl0ZXMpOwotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZl
U3RvcFJ0Y0V2ZW50TG9nKCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0
aW9uRmFjdG9yeS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUGVlckNvbm5l
Y3Rpb25GYWN0b3J5LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
UGVlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNTYgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2
YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBQZWVyQ29ubmVj
dGlvbkZhY3RvcnlJbnRlcmZhY2UuICBNYWluIGVudHJ5IHBvaW50IHRvCi0gKiB0aGUgUGVlckNv
bm5lY3Rpb24gQVBJIGZvciBjbGllbnRzLgotICovCi1wdWJsaWMgY2xhc3MgUGVlckNvbm5lY3Rp
b25GYWN0b3J5IHsKLSAgc3RhdGljIHsKLSAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImppbmdsZV9w
ZWVyY29ubmVjdGlvbl9zbyIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFRBRyA9ICJQZWVyQ29ubmVjdGlvbkZhY3RvcnkiOwotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0
aXZlRmFjdG9yeTsKLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkIG5ldHdvcmtUaHJlYWQ7Ci0gIHBy
aXZhdGUgc3RhdGljIFRocmVhZCB3b3JrZXJUaHJlYWQ7Ci0gIHByaXZhdGUgc3RhdGljIFRocmVh
ZCBzaWduYWxpbmdUaHJlYWQ7Ci0gIHByaXZhdGUgRWdsQmFzZSBsb2NhbEVnbGJhc2U7Ci0gIHBy
aXZhdGUgRWdsQmFzZSByZW1vdGVFZ2xiYXNlOwotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgT3B0
aW9ucyB7Ci0gICAgLy8gS2VlcCBpbiBzeW5jIHdpdGggd2VicnRjL2Jhc2UvbmV0d29yay5oIQot
ICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX1VOS05PV04gPSAwOwotICAgIHN0YXRp
YyBmaW5hbCBpbnQgQURBUFRFUl9UWVBFX0VUSEVSTkVUID0gMSA8PCAwOwotICAgIHN0YXRpYyBm
aW5hbCBpbnQgQURBUFRFUl9UWVBFX1dJRkkgPSAxIDw8IDE7Ci0gICAgc3RhdGljIGZpbmFsIGlu
dCBBREFQVEVSX1RZUEVfQ0VMTFVMQVIgPSAxIDw8IDI7Ci0gICAgc3RhdGljIGZpbmFsIGludCBB
REFQVEVSX1RZUEVfVlBOID0gMSA8PCAzOwotICAgIHN0YXRpYyBmaW5hbCBpbnQgQURBUFRFUl9U
WVBFX0xPT1BCQUNLID0gMSA8PCA0OwotCi0gICAgcHVibGljIGludCBuZXR3b3JrSWdub3JlTWFz
azsKLSAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlRW5jcnlwdGlvbjsKLSAgICBwdWJsaWMgYm9v
bGVhbiBkaXNhYmxlTmV0d29ya01vbml0b3I7Ci0gIH0KLQotICAvLyB8Y29udGV4dHwgaXMgYW4g
YW5kcm9pZC5jb250ZW50LkNvbnRleHQgb2JqZWN0LCBidXQgd2Uga2VlcCBpdCB1bnR5cGVkIGhl
cmUKLSAgLy8gdG8gYWxsb3cgYnVpbGRpbmcgb24gbm9uLUFuZHJvaWQgcGxhdGZvcm1zLgotICAv
LyBDYWxsZXJzIG1heSBzcGVjaWZ5IGVpdGhlciB8aW5pdGlhbGl6ZUF1ZGlvfCBvciB8aW5pdGlh
bGl6ZVZpZGVvfCBhcyBmYWxzZQotICAvLyB0byBza2lwIGluaXRpYWxpemluZyB0aGUgcmVzcGVj
dGl2ZSBlbmdpbmUgKGFuZCBhdm9pZCB0aGUgbmVlZCBmb3IgdGhlCi0gIC8vIHJlc3BlY3RpdmUg
cGVybWlzc2lvbnMpLgotICAvLyB8cmVuZGVyRUdMQ29udGV4dHwgY2FuIGJlIHByb3ZpZGVkIHRv
IHN1cG9ydCBIVyB2aWRlbyBkZWNvZGluZyB0bwotICAvLyB0ZXh0dXJlIGFuZCB3aWxsIGJlIHVz
ZWQgdG8gY3JlYXRlIGEgc2hhcmVkIEVHTCBjb250ZXh0IG9uIHZpZGVvCi0gIC8vIGRlY29kaW5n
IHRocmVhZC4KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBpbml0aWFsaXplQW5kcm9p
ZEdsb2JhbHMoT2JqZWN0IGNvbnRleHQsIGJvb2xlYW4gaW5pdGlhbGl6ZUF1ZGlvLAotICAgICAg
Ym9vbGVhbiBpbml0aWFsaXplVmlkZW8sIGJvb2xlYW4gdmlkZW9Id0FjY2VsZXJhdGlvbik7Ci0K
LSAgLy8gRmllbGQgdHJpYWwgaW5pdGlhbGl6YXRpb24uIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkKLSAgLy8gaXMgY3JlYXRlZC4KLSAgcHVibGljIHN0YXRpYyBu
YXRpdmUgdm9pZCBpbml0aWFsaXplRmllbGRUcmlhbHMoU3RyaW5nIGZpZWxkVHJpYWxzSW5pdFN0
cmluZyk7Ci0gIC8vIEludGVybmFsIHRyYWNpbmcgaW5pdGlhbGl6YXRpb24uIE11c3QgYmUgY2Fs
bGVkIGJlZm9yZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaXMgY3JlYXRlZCB0bwotICAvLyBwcmV2
ZW50IHJhY2luZyB3aXRoIHRyYWNpbmcgY29kZS4KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9p
ZCBpbml0aWFsaXplSW50ZXJuYWxUcmFjZXIoKTsKLSAgLy8gSW50ZXJuYWwgdHJhY2luZyBzaHV0
ZG93biwgY2FsbGVkIHRvIHByZXZlbnQgcmVzb3VyY2UgbGVha3MuIE11c3QgYmUgY2FsbGVkIGFm
dGVyCi0gIC8vIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBpcyBnb25lIHRvIHByZXZlbnQgcmFjZXMg
d2l0aCBjb2RlIHBlcmZvcm1pbmcgdHJhY2luZy4KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9p
ZCBzaHV0ZG93bkludGVybmFsVHJhY2VyKCk7Ci0gIC8vIFN0YXJ0L3N0b3AgaW50ZXJuYWwgY2Fw
dHVyaW5nIG9mIGludGVybmFsIHRyYWNpbmcuCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIGJvb2xl
YW4gc3RhcnRJbnRlcm5hbFRyYWNpbmdDYXB0dXJlKFN0cmluZyB0cmFjaW5nX2ZpbGVuYW1lKTsK
LSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBzdG9wSW50ZXJuYWxUcmFjaW5nQ2FwdHVyZSgp
OwotCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkoKSB7Ci0g
ICAgdGhpcyhudWxsKTsKLSAgfQotCi0gIHB1YmxpYyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkoT3B0
aW9ucyBvcHRpb25zKSB7Ci0gICAgbmF0aXZlRmFjdG9yeSA9IG5hdGl2ZUNyZWF0ZVBlZXJDb25u
ZWN0aW9uRmFjdG9yeShvcHRpb25zKTsKLSAgICBpZiAobmF0aXZlRmFjdG9yeSA9PSAwKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRmFpbGVkIHRvIGluaXRpYWxpemUgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5ISIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBQZWVyQ29ubmVj
dGlvbiBjcmVhdGVQZWVyQ29ubmVjdGlvbihQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9u
IHJ0Y0NvbmZpZywKLSAgICAgIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMsIFBlZXJDb25u
ZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgbG9uZyBuYXRpdmVPYnNlcnZlciA9IG5h
dGl2ZUNyZWF0ZU9ic2VydmVyKG9ic2VydmVyKTsKLSAgICBpZiAobmF0aXZlT2JzZXJ2ZXIgPT0g
MCkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIGxvbmcgbmF0aXZlUGVlckNvbm5l
Y3Rpb24gPQotICAgICAgICBuYXRpdmVDcmVhdGVQZWVyQ29ubmVjdGlvbihuYXRpdmVGYWN0b3J5
LCBydGNDb25maWcsIGNvbnN0cmFpbnRzLCBuYXRpdmVPYnNlcnZlcik7Ci0gICAgaWYgKG5hdGl2
ZVBlZXJDb25uZWN0aW9uID09IDApIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICBy
ZXR1cm4gbmV3IFBlZXJDb25uZWN0aW9uKG5hdGl2ZVBlZXJDb25uZWN0aW9uLCBuYXRpdmVPYnNl
cnZlcik7Ci0gIH0KLQotICBwdWJsaWMgUGVlckNvbm5lY3Rpb24gY3JlYXRlUGVlckNvbm5lY3Rp
b24oTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnMsCi0gICAgICBNZWRp
YUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzLCBQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciBvYnNlcnZl
cikgewotICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gcnRjQ29uZmlnID0gbmV3
IFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24oaWNlU2VydmVycyk7Ci0gICAgcmV0dXJu
IGNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZywgY29uc3RyYWludHMsIG9ic2VydmVyKTsK
LSAgfQotCi0gIHB1YmxpYyBNZWRpYVN0cmVhbSBjcmVhdGVMb2NhbE1lZGlhU3RyZWFtKFN0cmlu
ZyBsYWJlbCkgewotICAgIHJldHVybiBuZXcgTWVkaWFTdHJlYW0obmF0aXZlQ3JlYXRlTG9jYWxN
ZWRpYVN0cmVhbShuYXRpdmVGYWN0b3J5LCBsYWJlbCkpOwotICB9Ci0KLSAgcHVibGljIFZpZGVv
U291cmNlIGNyZWF0ZVZpZGVvU291cmNlKFZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIpIHsKLSAgICBm
aW5hbCBFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCA9Ci0gICAgICAgIGxvY2FsRWdsYmFzZSA9
PSBudWxsID8gbnVsbCA6IGxvY2FsRWdsYmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpOwotICAgIGxv
bmcgbmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UgPQotICAgICAgICBuYXRpdmVDcmVhdGVW
aWRlb1NvdXJjZShuYXRpdmVGYWN0b3J5LCBlZ2xDb250ZXh0LCBjYXB0dXJlci5pc1NjcmVlbmNh
c3QoKSk7Ci0gICAgVmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2
ZXIgPQotICAgICAgICBuZXcgVmlkZW9DYXB0dXJlci5BbmRyb2lkVmlkZW9UcmFja1NvdXJjZU9i
c2VydmVyKG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlKTsKLSAgICBuYXRpdmVJbml0aWFs
aXplVmlkZW9DYXB0dXJlcigKLSAgICAgICAgbmF0aXZlRmFjdG9yeSwgY2FwdHVyZXIsIG5hdGl2
ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlLCBjYXB0dXJlck9ic2VydmVyKTsKLSAgICByZXR1cm4g
bmV3IFZpZGVvU291cmNlKG5hdGl2ZUFuZHJvaWRWaWRlb1RyYWNrU291cmNlKTsKLSAgfQotCi0g
IHB1YmxpYyBWaWRlb1RyYWNrIGNyZWF0ZVZpZGVvVHJhY2soU3RyaW5nIGlkLCBWaWRlb1NvdXJj
ZSBzb3VyY2UpIHsKLSAgICByZXR1cm4gbmV3IFZpZGVvVHJhY2sobmF0aXZlQ3JlYXRlVmlkZW9U
cmFjayhuYXRpdmVGYWN0b3J5LCBpZCwgc291cmNlLm5hdGl2ZVNvdXJjZSkpOwotICB9Ci0KLSAg
cHVibGljIEF1ZGlvU291cmNlIGNyZWF0ZUF1ZGlvU291cmNlKE1lZGlhQ29uc3RyYWludHMgY29u
c3RyYWludHMpIHsKLSAgICByZXR1cm4gbmV3IEF1ZGlvU291cmNlKG5hdGl2ZUNyZWF0ZUF1ZGlv
U291cmNlKG5hdGl2ZUZhY3RvcnksIGNvbnN0cmFpbnRzKSk7Ci0gIH0KLQotICBwdWJsaWMgQXVk
aW9UcmFjayBjcmVhdGVBdWRpb1RyYWNrKFN0cmluZyBpZCwgQXVkaW9Tb3VyY2Ugc291cmNlKSB7
Ci0gICAgcmV0dXJuIG5ldyBBdWRpb1RyYWNrKG5hdGl2ZUNyZWF0ZUF1ZGlvVHJhY2sobmF0aXZl
RmFjdG9yeSwgaWQsIHNvdXJjZS5uYXRpdmVTb3VyY2UpKTsKLSAgfQotCi0gIC8vIFN0YXJ0cyBy
ZWNvcmRpbmcgYW4gQUVDIGR1bXAuIE93bmVyc2hpcCBvZiB0aGUgZmlsZSBpcyB0cmFuc2ZlcmVk
IHRvIHRoZQotICAvLyBuYXRpdmUgY29kZS4gSWYgYW4gQUVDIGR1bXAgaXMgYWxyZWFkeSBpbiBw
cm9ncmVzcywgaXQgd2lsbCBiZSBzdG9wcGVkIGFuZAotICAvLyBhIG5ldyBvbmUgd2lsbCBzdGFy
dCB1c2luZyB0aGUgcHJvdmlkZWQgZmlsZS4KLSAgcHVibGljIGJvb2xlYW4gc3RhcnRBZWNEdW1w
KGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBmaWxlc2l6ZV9saW1pdF9ieXRlcykgewotICAgIHJl
dHVybiBuYXRpdmVTdGFydEFlY0R1bXAobmF0aXZlRmFjdG9yeSwgZmlsZV9kZXNjcmlwdG9yLCBm
aWxlc2l6ZV9saW1pdF9ieXRlcyk7Ci0gIH0KLQotICAvLyBTdG9wcyByZWNvcmRpbmcgYW4gQUVD
IGR1bXAuIElmIG5vIEFFQyBkdW1wIGlzIGN1cnJlbnRseSBiZWluZyByZWNvcmRlZCwKLSAgLy8g
dGhpcyBjYWxsIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gIHB1YmxpYyB2b2lkIHN0b3BBZWNEdW1w
KCkgewotICAgIG5hdGl2ZVN0b3BBZWNEdW1wKG5hdGl2ZUZhY3RvcnkpOwotICB9Ci0KLSAgQERl
cHJlY2F0ZWQKLSAgcHVibGljIHZvaWQgc2V0T3B0aW9ucyhPcHRpb25zIG9wdGlvbnMpIHsKLSAg
ICBuYXRpdmVTZXRPcHRpb25zKG5hdGl2ZUZhY3RvcnksIG9wdGlvbnMpOwotICB9Ci0KLSAgLyoq
IFNldCB0aGUgRUdMIGNvbnRleHQgdXNlZCBieSBIVyBWaWRlbyBlbmNvZGluZyBhbmQgZGVjb2Rp
bmcuCi0gICAqCi0gICAqIEBwYXJhbSBsb2NhbEVnbENvbnRleHQgICBNdXN0IGJlIHRoZSBzYW1l
IGFzIHVzZWQgYnkgVmlkZW9DYXB0dXJlckFuZHJvaWQgYW5kIGFueSBsb2NhbCB2aWRlbwotICAg
KiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXIuCi0gICAqIEBwYXJhbSByZW1vdGVF
Z2xDb250ZXh0ICBNdXN0IGJlIHRoZSBzYW1lIGFzIHVzZWQgYnkgYW55IHJlbW90ZSB2aWRlbyBy
ZW5kZXJlci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNldFZpZGVvSHdBY2NlbGVyYXRpb25PcHRp
b25zKAotICAgICAgRWdsQmFzZS5Db250ZXh0IGxvY2FsRWdsQ29udGV4dCwgRWdsQmFzZS5Db250
ZXh0IHJlbW90ZUVnbENvbnRleHQpIHsKLSAgICBpZiAobG9jYWxFZ2xiYXNlICE9IG51bGwpIHsK
LSAgICAgIExvZ2dpbmcudyhUQUcsICJFZ2wgY29udGV4dCBhbHJlYWR5IHNldC4iKTsKLSAgICAg
IGxvY2FsRWdsYmFzZS5yZWxlYXNlKCk7Ci0gICAgfQotICAgIGlmIChyZW1vdGVFZ2xiYXNlICE9
IG51bGwpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJFZ2wgY29udGV4dCBhbHJlYWR5IHNldC4i
KTsKLSAgICAgIHJlbW90ZUVnbGJhc2UucmVsZWFzZSgpOwotICAgIH0KLSAgICBsb2NhbEVnbGJh
c2UgPSBFZ2xCYXNlLmNyZWF0ZShsb2NhbEVnbENvbnRleHQpOwotICAgIHJlbW90ZUVnbGJhc2Ug
PSBFZ2xCYXNlLmNyZWF0ZShyZW1vdGVFZ2xDb250ZXh0KTsKLSAgICBuYXRpdmVTZXRWaWRlb0h3
QWNjZWxlcmF0aW9uT3B0aW9ucygKLSAgICAgICAgbmF0aXZlRmFjdG9yeSwgbG9jYWxFZ2xiYXNl
LmdldEVnbEJhc2VDb250ZXh0KCksIHJlbW90ZUVnbGJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIG5hdGl2ZUZyZWVGYWN0b3J5
KG5hdGl2ZUZhY3RvcnkpOwotICAgIG5ldHdvcmtUaHJlYWQgPSBudWxsOwotICAgIHdvcmtlclRo
cmVhZCA9IG51bGw7Ci0gICAgc2lnbmFsaW5nVGhyZWFkID0gbnVsbDsKLSAgICBpZiAobG9jYWxF
Z2xiYXNlICE9IG51bGwpCi0gICAgICBsb2NhbEVnbGJhc2UucmVsZWFzZSgpOwotICAgIGlmIChy
ZW1vdGVFZ2xiYXNlICE9IG51bGwpCi0gICAgICByZW1vdGVFZ2xiYXNlLnJlbGVhc2UoKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHRocmVhZHNDYWxsYmFja3MoKSB7Ci0gICAgbmF0aXZlVGhyZWFk
c0NhbGxiYWNrcyhuYXRpdmVGYWN0b3J5KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQg
cHJpbnRTdGFja1RyYWNlKFRocmVhZCB0aHJlYWQsIFN0cmluZyB0aHJlYWROYW1lKSB7Ci0gICAg
aWYgKHRocmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxlbWVudFtdIHN0YWNrVHJh
Y2VzID0gdGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChzdGFja1RyYWNlcy5sZW5n
dGggPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsIHRocmVhZE5hbWUgKyAiIHN0YWNrcyB0
cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCBzdGFja1RyYWNlIDogc3Rh
Y2tUcmFjZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRvU3RyaW5n
KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2
b2lkIHByaW50U3RhY2tUcmFjZXMoKSB7Ci0gICAgcHJpbnRTdGFja1RyYWNlKG5ldHdvcmtUaHJl
YWQsICJOZXR3b3JrIHRocmVhZCIpOwotICAgIHByaW50U3RhY2tUcmFjZSh3b3JrZXJUaHJlYWQs
ICJXb3JrZXIgdGhyZWFkIik7Ci0gICAgcHJpbnRTdGFja1RyYWNlKHNpZ25hbGluZ1RocmVhZCwg
IlNpZ25hbGluZyB0aHJlYWQiKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgb25OZXR3
b3JrVGhyZWFkUmVhZHkoKSB7Ci0gICAgbmV0d29ya1RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhy
ZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm9uTmV0d29ya1RocmVhZFJlYWR5Iik7Ci0gIH0K
LQotICBwcml2YXRlIHN0YXRpYyB2b2lkIG9uV29ya2VyVGhyZWFkUmVhZHkoKSB7Ci0gICAgd29y
a2VyVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
b25Xb3JrZXJUaHJlYWRSZWFkeSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvblNp
Z25hbGluZ1RocmVhZFJlYWR5KCkgewotICAgIHNpZ25hbGluZ1RocmVhZCA9IFRocmVhZC5jdXJy
ZW50VGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIm9uU2lnbmFsaW5nVGhyZWFkUmVhZHki
KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZVBlZXJD
b25uZWN0aW9uRmFjdG9yeShPcHRpb25zIG9wdGlvbnMpOwotCi0gIHByaXZhdGUgc3RhdGljIG5h
dGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZU9ic2VydmVyKFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIG9i
c2VydmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVQZWVy
Q29ubmVjdGlvbihsb25nIG5hdGl2ZUZhY3RvcnksCi0gICAgICBQZWVyQ29ubmVjdGlvbi5SVEND
b25maWd1cmF0aW9uIHJ0Y0NvbmZpZywgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cywgbG9u
ZyBuYXRpdmVPYnNlcnZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZl
Q3JlYXRlTG9jYWxNZWRpYVN0cmVhbShsb25nIG5hdGl2ZUZhY3RvcnksIFN0cmluZyBsYWJlbCk7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlVmlkZW9Tb3VyY2Uo
Ci0gICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIEVnbEJhc2UuQ29udGV4dCBlZ2xDb250ZXh0LCBi
b29sZWFuIGlzX3NjcmVlbmNhc3QpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5h
dGl2ZUluaXRpYWxpemVWaWRlb0NhcHR1cmVyKGxvbmcgbmF0aXZlX2ZhY3RvcnksCi0gICAgICBW
aWRlb0NhcHR1cmVyIGpfdmlkZW9fY2FwdHVyZXIsIGxvbmcgbmF0aXZlX3NvdXJjZSwKLSAgICAg
IFZpZGVvQ2FwdHVyZXIuQ2FwdHVyZXJPYnNlcnZlciBqX2ZyYW1lX29ic2VydmVyKTsKLQotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVWaWRlb1RyYWNrKAotICAgICAg
bG9uZyBuYXRpdmVGYWN0b3J5LCBTdHJpbmcgaWQsIGxvbmcgbmF0aXZlVmlkZW9Tb3VyY2UpOwot
Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUF1ZGlvU291cmNlKAot
ICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBNZWRpYUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzKTsK
LQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVBdWRpb1RyYWNrKAot
ICAgICAgbG9uZyBuYXRpdmVGYWN0b3J5LCBTdHJpbmcgaWQsIGxvbmcgbmF0aXZlU291cmNlKTsK
LQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTdGFydEFlY0R1bXAoCi0g
ICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBmaWxlc2l6
ZV9saW1pdF9ieXRlcyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlU3Rv
cEFlY0R1bXAobG9uZyBuYXRpdmVGYWN0b3J5KTsKLQotICBARGVwcmVjYXRlZCBwdWJsaWMgbmF0
aXZlIHZvaWQgbmF0aXZlU2V0T3B0aW9ucyhsb25nIG5hdGl2ZUZhY3RvcnksIE9wdGlvbnMgb3B0
aW9ucyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlU2V0VmlkZW9Id0Fj
Y2VsZXJhdGlvbk9wdGlvbnMoCi0gICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIE9iamVjdCBsb2Nh
bEVHTENvbnRleHQsIE9iamVjdCByZW1vdGVFR0xDb250ZXh0KTsKLQotICBwcml2YXRlIHN0YXRp
YyBuYXRpdmUgdm9pZCBuYXRpdmVUaHJlYWRzQ2FsbGJhY2tzKGxvbmcgbmF0aXZlRmFjdG9yeSk7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlRnJlZUZhY3RvcnkobG9uZyBu
YXRpdmVGYWN0b3J5KTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb24u
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uLmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb24uamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwotaW1w
b3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5NYXRyaXg7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVy
OwotCi0vKioKLSAqIFN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIGZvciByZW5kZXJlciBpbXBsZW1l
bnRhdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBSZW5kZXJlckNvbW1vbiB7Ci0gIC8qKiBJbnRl
cmZhY2UgZm9yIHJlcG9ydGluZyByZW5kZXJpbmcgZXZlbnRzLiAqLwotICBwdWJsaWMgc3RhdGlj
IGludGVyZmFjZSBSZW5kZXJlckV2ZW50cyB7Ci0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmly
ZWQgb25jZSBmaXJzdCBmcmFtZSBpcyByZW5kZXJlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9p
ZCBvbkZpcnN0RnJhbWVSZW5kZXJlZCgpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmly
ZWQgd2hlbiByZW5kZXJlZCBmcmFtZSByZXNvbHV0aW9uIG9yIHJvdGF0aW9uIGhhcyBjaGFuZ2Vk
LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uRnJhbWVSZXNvbHV0aW9uQ2hhbmdlZChpbnQg
dmlkZW9XaWR0aCwgaW50IHZpZGVvSGVpZ2h0LCBpbnQgcm90YXRpb24pOwotICB9Ci0KLSAgLyoq
IEludGVyZmFjZSBmb3IgcmVuZGVyaW5nIGZyYW1lcyBvbiBhbiBFR0xTdXJmYWNlLiAqLwotICBw
dWJsaWMgc3RhdGljIGludGVyZmFjZSBHbERyYXdlciB7Ci0gICAgLyoqCi0gICAgICogRnVuY3Rp
b25zIGZvciBkcmF3aW5nIGZyYW1lcyB3aXRoIGRpZmZlcmVudCBzb3VyY2VzLiBUaGUgcmVuZGVy
aW5nIHN1cmZhY2UgdGFyZ2V0IGlzCi0gICAgICogaW1wbGllZCBieSB0aGUgY3VycmVudCBFR0wg
Y29udGV4dCBvZiB0aGUgY2FsbGluZyB0aHJlYWQgYW5kIHJlcXVpcmVzIG5vIGV4cGxpY2l0IGFy
Z3VtZW50LgotICAgICAqIFRoZSBjb29yZGluYXRlcyBzcGVjaWZ5IHRoZSB2aWV3cG9ydCBsb2Nh
dGlvbiBvbiB0aGUgc3VyZmFjZSB0YXJnZXQuCi0gICAgICovCi0gICAgdm9pZCBkcmF3T2VzKGlu
dCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdGV4TWF0cml4LCBpbnQgZnJhbWVXaWR0aCwgaW50IGZy
YW1lSGVpZ2h0LAotICAgICAgICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZLCBpbnQgdmll
d3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KTsKLSAgICB2b2lkIGRyYXdSZ2IoaW50IHRl
eHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWln
aHQsIGludCB2aWV3cG9ydFgsCi0gICAgICAgIGludCB2aWV3cG9ydFksIGludCB2aWV3cG9ydFdp
ZHRoLCBpbnQgdmlld3BvcnRIZWlnaHQpOwotICAgIHZvaWQgZHJhd1l1dihpbnRbXSB5dXZUZXh0
dXJlcywgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQs
Ci0gICAgICAgIGludCB2aWV3cG9ydFgsIGludCB2aWV3cG9ydFksIGludCB2aWV3cG9ydFdpZHRo
LCBpbnQgdmlld3BvcnRIZWlnaHQpOwotCi0gICAgLyoqCi0gICAgICogUmVsZWFzZSBhbGwgR0wg
cmVzb3VyY2VzLiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgbWFudWFsbHksIG90aGVyd2lzZSByZXNv
dXJjZXMgbWF5IGxlYWsuCi0gICAgICovCi0gICAgdm9pZCByZWxlYXNlKCk7Ci0gIH0KLQotICAv
KioKLSAgICogSGVscGVyIGNsYXNzIGZvciB1cGxvYWRpbmcgWVVWIGJ5dGVidWZmZXIgZnJhbWVz
IHRvIHRleHR1cmVzIHRoYXQgaGFuZGxlcyBzdHJpZGUgPiB3aWR0aC4gVGhpcwotICAgKiBjbGFz
cyBrZWVwcyBhbiBpbnRlcm5hbCBCeXRlQnVmZmVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9j
YXRpb25zIGZvciBpbnRlcm1lZGlhdGUgY29waWVzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBj
bGFzcyBZdXZVcGxvYWRlciB7Ci0gICAgLy8gSW50ZXJtZWRpYXRlIGNvcHkgYnVmZmVyIGZvciB1
cGxvYWRpbmcgeXV2IGZyYW1lcyB0aGF0IGFyZSBub3QgcGFja2VkLCBpLmUuIHN0cmlkZSA+IHdp
ZHRoLgotICAgIC8vIFRPRE8obWFnamVkKTogSW52ZXN0aWdhdGUgd2hlbiBHTF9VTlBBQ0tfUk9X
X0xFTkdUSCBpcyBhdmFpbGFibGUsIG9yIG1ha2UgYSBjdXN0b20gc2hhZGVyCi0gICAgLy8gdGhh
dCBoYW5kbGVzIHN0cmlkZSBhbmQgY29tcGFyZSBwZXJmb3JtYW5jZSB3aXRoIGludGVybWVkaWF0
ZSBjb3B5LgotICAgIHByaXZhdGUgQnl0ZUJ1ZmZlciBjb3B5QnVmZmVyOwotCi0gICAgLyoqCi0g
ICAgICogVXBsb2FkIHxwbGFuZXN8IGludG8gfG91dHB1dFl1dlRleHR1cmVzfCwgdGFraW5nIHN0
cmlkZSBpbnRvIGNvbnNpZGVyYXRpb24uCi0gICAgICogfG91dHB1dFl1dlRleHR1cmVzfCBtdXN0
IGhhdmUgYmVlbiBnZW5lcmF0ZWQgaW4gYWR2YW5jZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9p
ZCB1cGxvYWRZdXZEYXRhKAotICAgICAgICBpbnRbXSBvdXRwdXRZdXZUZXh0dXJlcywgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnRbXSBzdHJpZGVzLCBCeXRlQnVmZmVyW10gcGxhbmVzKSB7Ci0g
ICAgICBmaW5hbCBpbnRbXSBwbGFuZVdpZHRocyA9IG5ldyBpbnRbXSB7d2lkdGgsIHdpZHRoIC8g
Miwgd2lkdGggLyAyfTsKLSAgICAgIGZpbmFsIGludFtdIHBsYW5lSGVpZ2h0cyA9IG5ldyBpbnRb
XSB7aGVpZ2h0LCBoZWlnaHQgLyAyLCBoZWlnaHQgLyAyfTsKLSAgICAgIC8vIE1ha2UgYSBmaXJz
dCBwYXNzIHRvIHNlZSBpZiB3ZSBuZWVkIGEgdGVtcG9yYXJ5IGNvcHkgYnVmZmVyLgotICAgICAg
aW50IGNvcHlDYXBhY2l0eU5lZWRlZCA9IDA7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7
ICsraSkgewotICAgICAgICBpZiAoc3RyaWRlc1tpXSA+IHBsYW5lV2lkdGhzW2ldKSB7Ci0gICAg
ICAgICAgY29weUNhcGFjaXR5TmVlZGVkID0gTWF0aC5tYXgoY29weUNhcGFjaXR5TmVlZGVkLCBw
bGFuZVdpZHRoc1tpXSAqIHBsYW5lSGVpZ2h0c1tpXSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIC8vIEFsbG9jYXRlIGNvcHkgYnVmZmVyIGlmIG5lY2Vzc2FyeS4KLSAgICAgIGlmIChjb3B5
Q2FwYWNpdHlOZWVkZWQgPiAwCi0gICAgICAgICAgJiYgKGNvcHlCdWZmZXIgPT0gbnVsbCB8fCBj
b3B5QnVmZmVyLmNhcGFjaXR5KCkgPCBjb3B5Q2FwYWNpdHlOZWVkZWQpKSB7Ci0gICAgICAgIGNv
cHlCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGNvcHlDYXBhY2l0eU5lZWRlZCk7
Ci0gICAgICB9Ci0gICAgICAvLyBVcGxvYWQgZWFjaCBwbGFuZS4KLSAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIw
LkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5H
TF9URVhUVVJFXzJELCBvdXRwdXRZdXZUZXh0dXJlc1tpXSk7Ci0gICAgICAgIC8vIEdMRVMgb25s
eSBhY2NlcHRzIHBhY2tlZCBkYXRhLCBpLmUuIHN0cmlkZSA9PSBwbGFuZVdpZHRoLgotICAgICAg
ICBmaW5hbCBCeXRlQnVmZmVyIHBhY2tlZEJ5dGVCdWZmZXI7Ci0gICAgICAgIGlmIChzdHJpZGVz
W2ldID09IHBsYW5lV2lkdGhzW2ldKSB7Ci0gICAgICAgICAgLy8gSW5wdXQgaXMgcGFja2VkIGFs
cmVhZHkuCi0gICAgICAgICAgcGFja2VkQnl0ZUJ1ZmZlciA9IHBsYW5lc1tpXTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLm5hdGl2ZUNvcHlQbGFuZSgKLSAgICAg
ICAgICAgICAgcGxhbmVzW2ldLCBwbGFuZVdpZHRoc1tpXSwgcGxhbmVIZWlnaHRzW2ldLCBzdHJp
ZGVzW2ldLCBjb3B5QnVmZmVyLCBwbGFuZVdpZHRoc1tpXSk7Ci0gICAgICAgICAgcGFja2VkQnl0
ZUJ1ZmZlciA9IGNvcHlCdWZmZXI7Ci0gICAgICAgIH0KLSAgICAgICAgR0xFUzIwLmdsVGV4SW1h
Z2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgR0xFUzIwLkdMX0xVTUlOQU5DRSwgcGxhbmVX
aWR0aHNbaV0sCi0gICAgICAgICAgICBwbGFuZUhlaWdodHNbaV0sIDAsIEdMRVMyMC5HTF9MVU1J
TkFOQ0UsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCBwYWNrZWRCeXRlQnVmZmVyKTsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIGNsYXNzIGZvciBkZXRlcm1pbmlu
ZyBsYXlvdXQgc2l6ZSBiYXNlZCBvbiBsYXlvdXQgcmVxdWlyZW1lbnRzLCBzY2FsaW5nIHR5cGUs
IGFuZCB2aWRlbwotICAgKiBhc3BlY3QgcmF0aW8uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNs
YXNzIFZpZGVvTGF5b3V0TWVhc3VyZSB7Ci0gICAgLy8gVGhlIHNjYWxpbmcgdHlwZSBkZXRlcm1p
bmVzIGhvdyB0aGUgdmlkZW8gd2lsbCBmaWxsIHRoZSBhbGxvd2VkIGxheW91dCBhcmVhIGluIG1l
YXN1cmUoKS4gSXQKLSAgICAvLyBjYW4gYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkgZm9yIHRoZSBj
YXNlIHdoZW4gdmlkZW8gaGFzIG1hdGNoZWQgb3JpZW50YXRpb24gd2l0aCBsYXlvdXQgc2l6ZQot
ICAgIC8vIGFuZCB3aGVuIHRoZXJlIGlzIGFuIG9yaWVudGF0aW9uIG1pc21hdGNoLgotICAgIHBy
aXZhdGUgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uID0gU2NhbGluZ1R5
cGUuU0NBTEVfQVNQRUNUX0JBTEFOQ0VEOwotICAgIHByaXZhdGUgU2NhbGluZ1R5cGUgc2NhbGlu
Z1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uID0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0JBTEFO
Q0VEOwotCi0gICAgcHVibGljIHZvaWQgc2V0U2NhbGluZ1R5cGUoU2NhbGluZ1R5cGUgc2NhbGlu
Z1R5cGUpIHsKLSAgICAgIHRoaXMuc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uID0gc2NhbGlu
Z1R5cGU7Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbiA9IHNjYWxp
bmdUeXBlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNjYWxpbmdUeXBlKAotICAgICAg
ICBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24sIFNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbikgewotICAgICAgdGhpcy5zY2FsaW5nVHlwZU1h
dGNoT3JpZW50YXRpb24gPSBzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb247Ci0gICAgICB0aGlz
LnNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbiA9IHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmll
bnRhdGlvbjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgUG9pbnQgbWVhc3VyZShpbnQgd2lkdGhTcGVj
LCBpbnQgaGVpZ2h0U3BlYywgaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCkgewotICAg
ICAgLy8gQ2FsY3VsYXRlIG1heCBhbGxvd2VkIGxheW91dCBzaXplLgotICAgICAgZmluYWwgaW50
IG1heFdpZHRoID0gVmlldy5nZXREZWZhdWx0U2l6ZShJbnRlZ2VyLk1BWF9WQUxVRSwgd2lkdGhT
cGVjKTsKLSAgICAgIGZpbmFsIGludCBtYXhIZWlnaHQgPSBWaWV3LmdldERlZmF1bHRTaXplKElu
dGVnZXIuTUFYX1ZBTFVFLCBoZWlnaHRTcGVjKTsKLSAgICAgIGlmIChmcmFtZVdpZHRoID09IDAg
fHwgZnJhbWVIZWlnaHQgPT0gMCB8fCBtYXhXaWR0aCA9PSAwIHx8IG1heEhlaWdodCA9PSAwKSB7
Ci0gICAgICAgIHJldHVybiBuZXcgUG9pbnQobWF4V2lkdGgsIG1heEhlaWdodCk7Ci0gICAgICB9
Ci0gICAgICAvLyBDYWxjdWxhdGUgZGVzaXJlZCBkaXNwbGF5IHNpemUgYmFzZWQgb24gc2NhbGlu
ZyB0eXBlLCB2aWRlbyBhc3BlY3QgcmF0aW8sCi0gICAgICAvLyBhbmQgbWF4aW11bSBsYXlvdXQg
c2l6ZS4KLSAgICAgIGZpbmFsIGZsb2F0IGZyYW1lQXNwZWN0ID0gZnJhbWVXaWR0aCAvIChmbG9h
dCkgZnJhbWVIZWlnaHQ7Ci0gICAgICBmaW5hbCBmbG9hdCBkaXNwbGF5QXNwZWN0ID0gbWF4V2lk
dGggLyAoZmxvYXQpIG1heEhlaWdodDsKLSAgICAgIGZpbmFsIFNjYWxpbmdUeXBlIHNjYWxpbmdU
eXBlID0gKGZyYW1lQXNwZWN0ID4gMS4wZikgPT0gKGRpc3BsYXlBc3BlY3QgPiAxLjBmKQotICAg
ICAgICAgID8gc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uCi0gICAgICAgICAgOiBzY2FsaW5n
VHlwZU1pc21hdGNoT3JpZW50YXRpb247Ci0gICAgICBmaW5hbCBQb2ludCBsYXlvdXRTaXplID0g
Z2V0RGlzcGxheVNpemUoc2NhbGluZ1R5cGUsIGZyYW1lQXNwZWN0LCBtYXhXaWR0aCwgbWF4SGVp
Z2h0KTsKLQotICAgICAgLy8gSWYgdGhlIG1lYXN1cmUgc3BlY2lmaWNhdGlvbiBpcyBmb3JjaW5n
IGEgc3BlY2lmaWMgc2l6ZSAtIHlpZWxkLgotICAgICAgaWYgKFZpZXcuTWVhc3VyZVNwZWMuZ2V0
TW9kZSh3aWR0aFNwZWMpID09IFZpZXcuTWVhc3VyZVNwZWMuRVhBQ1RMWSkgewotICAgICAgICBs
YXlvdXRTaXplLnggPSBtYXhXaWR0aDsKLSAgICAgIH0KLSAgICAgIGlmIChWaWV3Lk1lYXN1cmVT
cGVjLmdldE1vZGUoaGVpZ2h0U3BlYykgPT0gVmlldy5NZWFzdXJlU3BlYy5FWEFDVExZKSB7Ci0g
ICAgICAgIGxheW91dFNpemUueSA9IG1heEhlaWdodDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBs
YXlvdXRTaXplOwotICAgIH0KLSAgfQotCi0gIC8vIFR5cGVzIG9mIHZpZGVvIHNjYWxpbmc6Ci0g
IC8vIFNDQUxFX0FTUEVDVF9GSVQgLSB2aWRlbyBmcmFtZSBpcyBzY2FsZWQgdG8gZml0IHRoZSBz
aXplIG9mIHRoZSB2aWV3IGJ5Ci0gIC8vICAgIG1haW50YWluaW5nIHRoZSBhc3BlY3QgcmF0aW8g
KGJsYWNrIGJvcmRlcnMgbWF5IGJlIGRpc3BsYXllZCkuCi0gIC8vIFNDQUxFX0FTUEVDVF9GSUxM
IC0gdmlkZW8gZnJhbWUgaXMgc2NhbGVkIHRvIGZpbGwgdGhlIHNpemUgb2YgdGhlIHZpZXcgYnkK
LSAgLy8gICAgbWFpbnRhaW5pbmcgdGhlIGFzcGVjdCByYXRpby4gU29tZSBwb3J0aW9uIG9mIHRo
ZSB2aWRlbyBmcmFtZSBtYXkgYmUKLSAgLy8gICAgY2xpcHBlZC4KLSAgLy8gU0NBTEVfQVNQRUNU
X0JBTEFOQ0VEIC0gQ29tcHJvbWlzZSBiZXR3ZWVuIEZJVCBhbmQgRklMTC4gVmlkZW8gZnJhbWUg
d2lsbCBmaWxsIGFzIG11Y2ggYXMKLSAgLy8gcG9zc2libGUgb2YgdGhlIHZpZXcgd2hpbGUgbWFp
bnRhaW5pbmcgYXNwZWN0IHJhdGlvLCB1bmRlciB0aGUgY29uc3RyYWludCB0aGF0IGF0IGxlYXN0
Ci0gIC8vIHxCQUxBTkNFRF9WSVNJQkxFX0ZSQUNUSU9OfCBvZiB0aGUgZnJhbWUgY29udGVudCB3
aWxsIGJlIHNob3duLgotICBwdWJsaWMgc3RhdGljIGVudW0gU2NhbGluZ1R5cGUgeyBTQ0FMRV9B
U1BFQ1RfRklULCBTQ0FMRV9BU1BFQ1RfRklMTCwgU0NBTEVfQVNQRUNUX0JBTEFOQ0VEIH0KLSAg
Ly8gVGhlIG1pbmltdW0gZnJhY3Rpb24gb2YgdGhlIGZyYW1lIGNvbnRlbnQgdGhhdCB3aWxsIGJl
IHNob3duIGZvciB8U0NBTEVfQVNQRUNUX0JBTEFOQ0VEfC4KLSAgLy8gVGhpcyBsaW1pdHMgZXhj
ZXNzaXZlIGNyb3BwaW5nIHdoZW4gYWRqdXN0aW5nIGRpc3BsYXkgc2l6ZS4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmxvYXQgQkFMQU5DRURfVklTSUJMRV9GUkFDVElPTiA9IDAuNTYyNWY7Ci0gIC8vIGNs
YW5nLWZvcm1hdCBvZmYKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBmbG9hdFtdIGlkZW50aXR5TWF0
cml4KCkgewotICAgIHJldHVybiBuZXcgZmxvYXRbXSB7Ci0gICAgICAgIDEsIDAsIDAsIDAsCi0g
ICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgIDAsIDAsIDAs
IDF9OwotICB9Ci0gIC8vIE1hdHJpeCB3aXRoIHRyYW5zZm9ybSB5JyA9IDEgLSB5LgotICBwdWJs
aWMgc3RhdGljIGZpbmFsIGZsb2F0W10gdmVydGljYWxGbGlwTWF0cml4KCkgewotICAgIHJldHVy
biBuZXcgZmxvYXRbXSB7Ci0gICAgICAgIDEsICAwLCAwLCAwLAotICAgICAgICAwLCAtMSwgMCwg
MCwKLSAgICAgICAgMCwgIDAsIDEsIDAsCi0gICAgICAgIDAsICAxLCAwLCAxfTsKLSAgfQotCi0g
IC8vIE1hdHJpeCB3aXRoIHRyYW5zZm9ybSB4JyA9IDEgLSB4LgotICBwdWJsaWMgc3RhdGljIGZp
bmFsIGZsb2F0W10gaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSB7Ci0gICAgcmV0dXJuIG5ldyBmbG9h
dFtdIHsKLSAgICAgICAgLTEsIDAsIDAsIDAsCi0gICAgICAgICAwLCAxLCAwLCAwLAotICAgICAg
ICAgMCwgMCwgMSwgMCwKLSAgICAgICAgIDEsIDAsIDAsIDF9OwotICB9Ci0gIC8vIGNsYW5nLWZv
cm1hdCBvbgotCi0gIC8qKgotICAgKiBSZXR1cm5zIHRleHR1cmUgbWF0cml4IHRoYXQgd2lsbCBo
YXZlIHRoZSBlZmZlY3Qgb2Ygcm90YXRpbmcgdGhlIGZyYW1lIHxyb3RhdGlvbkRlZ3JlZXwKLSAg
ICogY2xvY2t3aXNlIHdoZW4gcmVuZGVyZWQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGZsb2F0
W10gcm90YXRlVGV4dHVyZU1hdHJpeChmbG9hdFtdIHRleHR1cmVNYXRyaXgsIGZsb2F0IHJvdGF0
aW9uRGVncmVlKSB7Ci0gICAgZmluYWwgZmxvYXRbXSByb3RhdGlvbk1hdHJpeCA9IG5ldyBmbG9h
dFsxNl07Ci0gICAgTWF0cml4LnNldFJvdGF0ZU0ocm90YXRpb25NYXRyaXgsIDAsIHJvdGF0aW9u
RGVncmVlLCAwLCAwLCAxKTsKLSAgICBhZGp1c3RPcmlnaW4ocm90YXRpb25NYXRyaXgpOwotICAg
IHJldHVybiBtdWx0aXBseU1hdHJpY2VzKHRleHR1cmVNYXRyaXgsIHJvdGF0aW9uTWF0cml4KTsK
LSAgfQotCi0gIC8qKgotICAgKiBSZXR1cm5zIG5ldyBtYXRyaXggd2l0aCB0aGUgcmVzdWx0IG9m
IGEgKiBiLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmbG9hdFtdIG11bHRpcGx5TWF0cmljZXMo
ZmxvYXRbXSBhLCBmbG9hdFtdIGIpIHsKLSAgICBmaW5hbCBmbG9hdFtdIHJlc3VsdE1hdHJpeCA9
IG5ldyBmbG9hdFsxNl07Ci0gICAgTWF0cml4Lm11bHRpcGx5TU0ocmVzdWx0TWF0cml4LCAwLCBh
LCAwLCBiLCAwKTsKLSAgICByZXR1cm4gcmVzdWx0TWF0cml4OwotICB9Ci0KLSAgLyoqCi0gICAq
IFJldHVybnMgbGF5b3V0IHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB0aGF0IGFwcGxpZXMgYW4gb3B0
aW9uYWwgbWlycm9yIGVmZmVjdCBhbmQgY29tcGVuc2F0ZXMKLSAgICogZm9yIHZpZGVvIHZzIGRp
c3BsYXkgYXNwZWN0IHJhdGlvLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmbG9hdFtdIGdldExh
eW91dE1hdHJpeCgKLSAgICAgIGJvb2xlYW4gbWlycm9yLCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlv
LCBmbG9hdCBkaXNwbGF5QXNwZWN0UmF0aW8pIHsKLSAgICBmbG9hdCBzY2FsZVggPSAxOwotICAg
IGZsb2F0IHNjYWxlWSA9IDE7Ci0gICAgLy8gU2NhbGUgWCBvciBZIGRpbWVuc2lvbiBzbyB0aGF0
IHZpZGVvIGFuZCBkaXNwbGF5IHNpemUgaGF2ZSBzYW1lIGFzcGVjdCByYXRpby4KLSAgICBpZiAo
ZGlzcGxheUFzcGVjdFJhdGlvID4gdmlkZW9Bc3BlY3RSYXRpbykgewotICAgICAgc2NhbGVZID0g
dmlkZW9Bc3BlY3RSYXRpbyAvIGRpc3BsYXlBc3BlY3RSYXRpbzsKLSAgICB9IGVsc2UgewotICAg
ICAgc2NhbGVYID0gZGlzcGxheUFzcGVjdFJhdGlvIC8gdmlkZW9Bc3BlY3RSYXRpbzsKLSAgICB9
Ci0gICAgLy8gQXBwbHkgb3B0aW9uYWwgaG9yaXpvbnRhbCBmbGlwLgotICAgIGlmIChtaXJyb3Ip
IHsKLSAgICAgIHNjYWxlWCAqPSAtMTsKLSAgICB9Ci0gICAgZmluYWwgZmxvYXQgbWF0cml4W10g
PSBuZXcgZmxvYXRbMTZdOwotICAgIE1hdHJpeC5zZXRJZGVudGl0eU0obWF0cml4LCAwKTsKLSAg
ICBNYXRyaXguc2NhbGVNKG1hdHJpeCwgMCwgc2NhbGVYLCBzY2FsZVksIDEpOwotICAgIGFkanVz
dE9yaWdpbihtYXRyaXgpOwotICAgIHJldHVybiBtYXRyaXg7Ci0gIH0KLQotICAvKioKLSAgICog
Q2FsY3VsYXRlIGRpc3BsYXkgc2l6ZSBiYXNlZCBvbiBzY2FsaW5nIHR5cGUsIHZpZGVvIGFzcGVj
dCByYXRpbywgYW5kIG1heGltdW0gZGlzcGxheSBzaXplLgotICAgKi8KLSAgcHVibGljIHN0YXRp
YyBQb2ludCBnZXREaXNwbGF5U2l6ZSgKLSAgICAgIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBm
bG9hdCB2aWRlb0FzcGVjdFJhdGlvLCBpbnQgbWF4RGlzcGxheVdpZHRoLCBpbnQgbWF4RGlzcGxh
eUhlaWdodCkgewotICAgIHJldHVybiBnZXREaXNwbGF5U2l6ZShjb252ZXJ0U2NhbGluZ1R5cGVU
b1Zpc2libGVGcmFjdGlvbihzY2FsaW5nVHlwZSksIHZpZGVvQXNwZWN0UmF0aW8sCi0gICAgICAg
IG1heERpc3BsYXlXaWR0aCwgbWF4RGlzcGxheUhlaWdodCk7Ci0gIH0KLQotICAvKioKLSAgICog
TW92ZSB8bWF0cml4fCB0cmFuc2Zvcm1hdGlvbiBvcmlnaW4gdG8gKDAuNSwgMC41KS4gVGhpcyBp
cyB0aGUgb3JpZ2luIGZvciB0ZXh0dXJlIGNvb3JkaW5hdGVzCi0gICAqIHRoYXQgYXJlIGluIHRo
ZSByYW5nZSAwIHRvIDEuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFkanVzdE9yaWdp
bihmbG9hdFtdIG1hdHJpeCkgewotICAgIC8vIE5vdGUgdGhhdCBPcGVuR0wgaXMgdXNpbmcgY29s
dW1uLW1ham9yIG9yZGVyLgotICAgIC8vIFByZSB0cmFuc2xhdGUgd2l0aCAtMC41IHRvIG1vdmUg
Y29vcmRpbmF0ZXMgdG8gcmFuZ2UgWy0wLjUsIDAuNV0uCi0gICAgbWF0cml4WzEyXSAtPSAwLjVm
ICogKG1hdHJpeFswXSArIG1hdHJpeFs0XSk7Ci0gICAgbWF0cml4WzEzXSAtPSAwLjVmICogKG1h
dHJpeFsxXSArIG1hdHJpeFs1XSk7Ci0gICAgLy8gUG9zdCB0cmFuc2xhdGUgd2l0aCAwLjUgdG8g
bW92ZSBjb29yZGluYXRlcyB0byByYW5nZSBbMCwgMV0uCi0gICAgbWF0cml4WzEyXSArPSAwLjVm
OwotICAgIG1hdHJpeFsxM10gKz0gMC41ZjsKLSAgfQotCi0gIC8qKgotICAgKiBFYWNoIHNjYWxp
bmcgdHlwZSBoYXMgYSBvbmUtdG8tb25lIGNvcnJlc3BvbmRlbmNlIHRvIGEgbnVtZXJpYyBtaW5p
bXVtIGZyYWN0aW9uIG9mIHRoZSB2aWRlbwotICAgKiB0aGF0IG11c3QgcmVtYWluIHZpc2libGUu
Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmbG9hdCBjb252ZXJ0U2NhbGluZ1R5cGVUb1Zpc2li
bGVGcmFjdGlvbihTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSkgewotICAgIHN3aXRjaCAoc2NhbGlu
Z1R5cGUpIHsKLSAgICAgIGNhc2UgU0NBTEVfQVNQRUNUX0ZJVDoKLSAgICAgICAgcmV0dXJuIDEu
MGY7Ci0gICAgICBjYXNlIFNDQUxFX0FTUEVDVF9GSUxMOgotICAgICAgICByZXR1cm4gMC4wZjsK
LSAgICAgIGNhc2UgU0NBTEVfQVNQRUNUX0JBTEFOQ0VEOgotICAgICAgICByZXR1cm4gQkFMQU5D
RURfVklTSUJMRV9GUkFDVElPTjsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHRocm93IG5ldyBJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2Fs
Y3VsYXRlIGRpc3BsYXkgc2l6ZSBiYXNlZCBvbiBtaW5pbXVtIGZyYWN0aW9uIG9mIHRoZSB2aWRl
byB0aGF0IG11c3QgcmVtYWluIHZpc2libGUsCi0gICAqIHZpZGVvIGFzcGVjdCByYXRpbywgYW5k
IG1heGltdW0gZGlzcGxheSBzaXplLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgUG9pbnQgZ2V0
RGlzcGxheVNpemUoCi0gICAgICBmbG9hdCBtaW5WaXNpYmxlRnJhY3Rpb24sIGZsb2F0IHZpZGVv
QXNwZWN0UmF0aW8sIGludCBtYXhEaXNwbGF5V2lkdGgsIGludCBtYXhEaXNwbGF5SGVpZ2h0KSB7
Ci0gICAgLy8gSWYgdGhlcmUgaXMgbm8gY29uc3RyYWludCBvbiB0aGUgYW1vdW50IG9mIGNyb3Bw
aW5nLCBmaWxsIHRoZSBhbGxvd2VkIGRpc3BsYXkgYXJlYS4KLSAgICBpZiAobWluVmlzaWJsZUZy
YWN0aW9uID09IDAgfHwgdmlkZW9Bc3BlY3RSYXRpbyA9PSAwKSB7Ci0gICAgICByZXR1cm4gbmV3
IFBvaW50KG1heERpc3BsYXlXaWR0aCwgbWF4RGlzcGxheUhlaWdodCk7Ci0gICAgfQotICAgIC8v
IEVhY2ggZGltZW5zaW9uIGlzIGNvbnN0cmFpbmVkIG9uIG1heCBkaXNwbGF5IHNpemUgYW5kIGhv
dyBtdWNoIHdlIGFyZSBhbGxvd2VkIHRvIGNyb3AuCi0gICAgZmluYWwgaW50IHdpZHRoID0gTWF0
aC5taW4oCi0gICAgICAgIG1heERpc3BsYXlXaWR0aCwgTWF0aC5yb3VuZChtYXhEaXNwbGF5SGVp
Z2h0IC8gbWluVmlzaWJsZUZyYWN0aW9uICogdmlkZW9Bc3BlY3RSYXRpbykpOwotICAgIGZpbmFs
IGludCBoZWlnaHQgPSBNYXRoLm1pbigKLSAgICAgICAgbWF4RGlzcGxheUhlaWdodCwgTWF0aC5y
b3VuZChtYXhEaXNwbGF5V2lkdGggLyBtaW5WaXNpYmxlRnJhY3Rpb24gLyB2aWRlb0FzcGVjdFJh
dGlvKSk7Ci0gICAgcmV0dXJuIG5ldyBQb2ludCh3aWR0aCwgaGVpZ2h0KTsKLSAgfQotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvUnRwUGFyYW1ldGVycy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDAg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBv
cnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci0KLS8qKgotICogVGhlIHBhcmFtZXRlcnMgZm9yIGFu
IHtAY29kZSBSdHBTZW5kZXJ9LCBhcyBkZWZpbmVkIGluCi0gKiBodHRwOi8vdzNjLmdpdGh1Yi5p
by93ZWJydGMtcGMvI3J0Y3J0cHNlbmRlci1pbnRlcmZhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBS
dHBQYXJhbWV0ZXJzIHsKLSAgcHVibGljIHN0YXRpYyBjbGFzcyBFbmNvZGluZyB7Ci0gICAgcHVi
bGljIGJvb2xlYW4gYWN0aXZlID0gdHJ1ZTsKLSAgICAvLyBBIG51bGwgdmFsdWUgbWVhbnMgIm5v
IG1heGltdW0gYml0cmF0ZSIuCi0gICAgcHVibGljIEludGVnZXIgbWF4Qml0cmF0ZUJwczsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29kZWMgewotICAgIGludCBwYXlsb2FkVHlwZTsK
LSAgICBTdHJpbmcgbWltZVR5cGU7Ci0gICAgaW50IGNsb2NrUmF0ZTsKLSAgICBpbnQgY2hhbm5l
bHMgPSAxOwotICB9Ci0KLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8RW5jb2Rpbmc+IGVuY29k
aW5nczsKLSAgcHVibGljIGZpbmFsIExpbmtlZExpc3Q8Q29kZWM+IGNvZGVjczsKLQotICBwdWJs
aWMgUnRwUGFyYW1ldGVycygpIHsKLSAgICBlbmNvZGluZ3MgPSBuZXcgTGlua2VkTGlzdDxFbmNv
ZGluZz4oKTsKLSAgICBjb2RlY3MgPSBuZXcgTGlua2VkTGlzdDxDb2RlYz4oKTsKLSAgfQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvUnRwUmVjZWl2ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTkgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2
YSB3cmFwcGVyIGZvciBhIEMrKyBSdHBSZWNlaXZlckludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFz
cyBSdHBSZWNlaXZlciB7Ci0gIGZpbmFsIGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXI7Ci0KLSAgcHJp
dmF0ZSBNZWRpYVN0cmVhbVRyYWNrIGNhY2hlZFRyYWNrOwotCi0gIHB1YmxpYyBSdHBSZWNlaXZl
cihsb25nIG5hdGl2ZVJ0cFJlY2VpdmVyKSB7Ci0gICAgdGhpcy5uYXRpdmVSdHBSZWNlaXZlciA9
IG5hdGl2ZVJ0cFJlY2VpdmVyOwotICAgIGxvbmcgdHJhY2sgPSBuYXRpdmVHZXRUcmFjayhuYXRp
dmVSdHBSZWNlaXZlcik7Ci0gICAgLy8gV2UgY2FuIGFzc3VtZSB0aGF0IGFuIFJ0cFJlY2VpdmVy
IGFsd2F5cyBoYXMgYW4gYXNzb2NpYXRlZCB0cmFjay4KLSAgICBjYWNoZWRUcmFjayA9IG5ldyBN
ZWRpYVN0cmVhbVRyYWNrKHRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNr
IHRyYWNrKCkgewotICAgIHJldHVybiBjYWNoZWRUcmFjazsKLSAgfQotCi0gIHB1YmxpYyBib29s
ZWFuIHNldFBhcmFtZXRlcnMoUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzKSB7Ci0gICAgcmV0dXJu
IG5hdGl2ZVNldFBhcmFtZXRlcnMobmF0aXZlUnRwUmVjZWl2ZXIsIHBhcmFtZXRlcnMpOwotICB9
Ci0KLSAgcHVibGljIFJ0cFBhcmFtZXRlcnMgZ2V0UGFyYW1ldGVycygpIHsKLSAgICByZXR1cm4g
bmF0aXZlR2V0UGFyYW1ldGVycyhuYXRpdmVSdHBSZWNlaXZlcik7Ci0gIH0KLQotICBwdWJsaWMg
U3RyaW5nIGlkKCkgewotICAgIHJldHVybiBuYXRpdmVJZChuYXRpdmVSdHBSZWNlaXZlcik7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGNhY2hlZFRyYWNrLmRpc3Bvc2Uo
KTsKLSAgICBmcmVlKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAgfQotCi0gIC8vIFRoaXMgc2hvdWxk
IGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB0cmFjay4KLSAgLy8gV2lsbCBi
ZSByZWxlYXNlZCBpbiBkaXNwb3NlKCkuCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5h
dGl2ZUdldFRyYWNrKGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSBib29sZWFuIG5hdGl2ZVNldFBhcmFtZXRlcnMoCi0gICAgICBsb25nIG5hdGl2ZVJ0
cFJlY2VpdmVyLCBSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMpOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSBSdHBQYXJhbWV0ZXJzIG5hdGl2ZUdldFBhcmFtZXRlcnMobG9uZyBuYXRpdmVSdHBS
ZWNlaXZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0cmluZyBuYXRpdmVJZChsb25n
IG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVl
KGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpOwotfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUnRw
U2VuZGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBTZW5kZXIuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBTZW5kZXIuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgUnRwU2VuZGVySW50
ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIFJ0cFNlbmRlciB7Ci0gIGZpbmFsIGxvbmcgbmF0aXZl
UnRwU2VuZGVyOwotCi0gIHByaXZhdGUgTWVkaWFTdHJlYW1UcmFjayBjYWNoZWRUcmFjazsKLSAg
cHJpdmF0ZSBib29sZWFuIG93bnNUcmFjayA9IHRydWU7Ci0KLSAgcHVibGljIFJ0cFNlbmRlcihs
b25nIG5hdGl2ZVJ0cFNlbmRlcikgewotICAgIHRoaXMubmF0aXZlUnRwU2VuZGVyID0gbmF0aXZl
UnRwU2VuZGVyOwotICAgIGxvbmcgdHJhY2sgPSBuYXRpdmVHZXRUcmFjayhuYXRpdmVSdHBTZW5k
ZXIpOwotICAgIC8vIEl0IG1heSBiZSBwb3NzaWJsZSBmb3IgYW4gUnRwU2VuZGVyIHRvIGJlIGNy
ZWF0ZWQgd2l0aG91dCBhIHRyYWNrLgotICAgIGNhY2hlZFRyYWNrID0gKHRyYWNrID09IDApID8g
bnVsbCA6IG5ldyBNZWRpYVN0cmVhbVRyYWNrKHRyYWNrKTsKLSAgfQotCi0gIC8vIElmIHx0YWtl
T3duZXJzaGlwfCBpcyB0cnVlLCB0aGUgUnRwU2VuZGVyIHRha2VzIG93bmVyc2hpcCBvZiB0aGUg
dHJhY2sKLSAgLy8gZnJvbSB0aGUgY2FsbGVyLCBhbmQgd2lsbCBhdXRvLWRpc3Bvc2Ugb2YgaXQg
d2hlbiBubyBsb25nZXIgbmVlZGVkLgotICAvLyB8dGFrZU93bmVyc2hpcHwgc2hvdWxkIG9ubHkg
YmUgdXNlZCBpZiB0aGUgY2FsbGVyIG93bnMgdGhlIHRyYWNrOyBpdCBpcwotICAvLyBub3QgYXBw
cm9wcmlhdGUgd2hlbiB0aGUgdHJhY2sgaXMgb3duZWQgYnksIGZvciBleGFtcGxlLCBhbm90aGVy
IFJ0cFNlbmRlcgotICAvLyBvciBhIE1lZGlhU3RyZWFtLgotICBwdWJsaWMgYm9vbGVhbiBzZXRU
cmFjayhNZWRpYVN0cmVhbVRyYWNrIHRyYWNrLCBib29sZWFuIHRha2VPd25lcnNoaXApIHsKLSAg
ICBpZiAoIW5hdGl2ZVNldFRyYWNrKG5hdGl2ZVJ0cFNlbmRlciwgKHRyYWNrID09IG51bGwpID8g
MCA6IHRyYWNrLm5hdGl2ZVRyYWNrKSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBpZiAoY2FjaGVkVHJhY2sgIT0gbnVsbCAmJiBvd25zVHJhY2spIHsKLSAgICAgIGNhY2hlZFRy
YWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgY2FjaGVkVHJhY2sgPSB0cmFjazsKLSAgICBvd25z
VHJhY2sgPSB0YWtlT3duZXJzaGlwOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGlj
IE1lZGlhU3RyZWFtVHJhY2sgdHJhY2soKSB7Ci0gICAgcmV0dXJuIGNhY2hlZFRyYWNrOwotICB9
Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVycyhSdHBQYXJhbWV0ZXJzIHBhcmFtZXRl
cnMpIHsKLSAgICByZXR1cm4gbmF0aXZlU2V0UGFyYW1ldGVycyhuYXRpdmVSdHBTZW5kZXIsIHBh
cmFtZXRlcnMpOwotICB9Ci0KLSAgcHVibGljIFJ0cFBhcmFtZXRlcnMgZ2V0UGFyYW1ldGVycygp
IHsKLSAgICByZXR1cm4gbmF0aXZlR2V0UGFyYW1ldGVycyhuYXRpdmVSdHBTZW5kZXIpOwotICB9
Ci0KLSAgcHVibGljIFN0cmluZyBpZCgpIHsKLSAgICByZXR1cm4gbmF0aXZlSWQobmF0aXZlUnRw
U2VuZGVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaWYgKGNhY2hl
ZFRyYWNrICE9IG51bGwgJiYgb3duc1RyYWNrKSB7Ci0gICAgICBjYWNoZWRUcmFjay5kaXNwb3Nl
KCk7Ci0gICAgfQotICAgIGZyZWUobmF0aXZlUnRwU2VuZGVyKTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVNldFRyYWNrKGxvbmcgbmF0aXZlUnRwU2VuZGVy
LCBsb25nIG5hdGl2ZVRyYWNrKTsKLQotICAvLyBUaGlzIHNob3VsZCBpbmNyZW1lbnQgdGhlIHJl
ZmVyZW5jZSBjb3VudCBvZiB0aGUgdHJhY2suCi0gIC8vIFdpbGwgYmUgcmVsZWFzZWQgaW4gZGlz
cG9zZSgpIG9yIHNldFRyYWNrKCkuCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2
ZUdldFRyYWNrKGxvbmcgbmF0aXZlUnRwU2VuZGVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgYm9vbGVhbiBuYXRpdmVTZXRQYXJhbWV0ZXJzKGxvbmcgbmF0aXZlUnRwU2VuZGVyLCBSdHBQ
YXJhbWV0ZXJzIHBhcmFtZXRlcnMpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBSdHBQYXJh
bWV0ZXJzIG5hdGl2ZUdldFBhcmFtZXRlcnMobG9uZyBuYXRpdmVSdHBTZW5kZXIpOwotCi0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSBTdHJpbmcgbmF0aXZlSWQobG9uZyBuYXRpdmVSdHBTZW5kZXIp
OwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBuYXRpdmVSdHBTZW5k
ZXIpOwotfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2NyZWVuQ2FwdHVyZXJBbmRyb2lkLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TY3JlZW5DYXB0dXJlckFuZHJvaWQu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TY3JlZW5DYXB0dXJl
ckFuZHJvaWQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRp
b24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBv
cnQgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LkRpc3BsYXlNYW5hZ2VyOwotaW1wb3J0IGFuZHJv
aWQuaGFyZHdhcmUuZGlzcGxheS5WaXJ0dWFsRGlzcGxheTsKLWltcG9ydCBhbmRyb2lkLm1lZGlh
LnByb2plY3Rpb24uTWVkaWFQcm9qZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQubWVkaWEucHJvamVj
dGlvbi5NZWRpYVByb2plY3Rpb25NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNl
OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsK
LQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBWaWRlb0NhcHR1cmVyIHRvIGNhcHR1cmUg
dGhlIHNjcmVlbiBjb250ZW50IGFzIGEgdmlkZW8gc3RyZWFtLgotICogQ2FwdHVyaW5nIGlzIGRv
bmUgYnkge0Bjb2RlIE1lZGlhUHJvamVjdGlvbn0gb24gYSB7QGNvZGUgU3VyZmFjZVRleHR1cmV9
LiBXZSBpbnRlcmFjdCB3aXRoIHRoaXMKLSAqIHtAY29kZSBTdXJmYWNlVGV4dHVyZX0gdXNpbmcg
YSB7QGNvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9LgotICogVGhlIHtAY29kZSBTdXJmYWNlVGV4
dHVyZUhlbHBlcn0gaXMgY3JlYXRlZCBieSB0aGUgbmF0aXZlIGNvZGUgYW5kIHBhc3NlZCB0byB0
aGlzIGNhcHR1cmVyIGluCi0gKiB7QGNvZGUgVmlkZW9DYXB0dXJlci5pbml0aWFsaXplKCl9LiBP
biByZWNlaXZpbmcgYSBuZXcgZnJhbWUsIHRoaXMgY2FwdHVyZXIgcGFzc2VzIGl0Ci0gKiBhcyBh
IHRleHR1cmUgdG8gdGhlIG5hdGl2ZSBjb2RlIHZpYSB7QGNvZGUgQ2FwdHVyZXJPYnNlcnZlci5v
blRleHR1cmVGcmFtZUNhcHR1cmVkKCl9LiBUaGlzIHRha2VzCi0gKiBwbGFjZSBvbiB0aGUgSGFu
ZGxlclRocmVhZCBvZiB0aGUgZ2l2ZW4ge0Bjb2RlIFN1cmZhY2VUZXh0dXJlSGVscGVyfS4gV2hl
biBkb25lIHdpdGggZWFjaCBmcmFtZSwKLSAqIHRoZSBuYXRpdmUgY29kZSByZXR1cm5zIHRoZSBi
dWZmZXIgdG8gdGhlICB7QGNvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9IHRvIGJlIHVzZWQgZm9y
IG5ldwotICogZnJhbWVzLiBBdCBhbnkgdGltZSwgYXQgbW9zdCBvbmUgZnJhbWUgaXMgYmVpbmcg
cHJvY2Vzc2VkLgotICovCi1AVGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNzIFNjcmVlbkNhcHR1
cmVyQW5kcm9pZAotICAgIGltcGxlbWVudHMgVmlkZW9DYXB0dXJlciwgU3VyZmFjZVRleHR1cmVI
ZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5lciB7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBESVNQTEFZX0ZMQUdTID0KLSAgICAgIERpc3BsYXlNYW5hZ2VyLlZJUlRVQUxf
RElTUExBWV9GTEFHX1BVQkxJQyB8IERpc3BsYXlNYW5hZ2VyLlZJUlRVQUxfRElTUExBWV9GTEFH
X1BSRVNFTlRBVElPTjsKLSAgLy8gRFBJIGZvciBWaXJ0dWFsRGlzcGxheSwgZG9lcyBub3Qgc2Vl
bSB0byBtYXR0ZXIgZm9yIHVzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklSVFVBTF9E
SVNQTEFZX0RQSSA9IDQwMDsKLQotICBwcml2YXRlIGZpbmFsIEludGVudCBtZWRpYVByb2plY3Rp
b25QZXJtaXNzaW9uUmVzdWx0RGF0YTsKLSAgcHJpdmF0ZSBmaW5hbCBNZWRpYVByb2plY3Rpb24u
Q2FsbGJhY2sgbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2s7Ci0KLSAgcHJpdmF0ZSBpbnQgd2lkdGg7
Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAgcHJpdmF0ZSBWaXJ0dWFsRGlzcGxheSB2aXJ0dWFs
RGlzcGxheTsKLSAgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhl
bHBlcjsKLSAgcHJpdmF0ZSBDYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIHBy
aXZhdGUgbG9uZyBudW1DYXB0dXJlZEZyYW1lcyA9IDA7Ci0gIHByaXZhdGUgTWVkaWFQcm9qZWN0
aW9uIG1lZGlhUHJvamVjdGlvbjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRGlzcG9zZWQgPSBmYWxz
ZTsKLSAgcHJpdmF0ZSBNZWRpYVByb2plY3Rpb25NYW5hZ2VyIG1lZGlhUHJvamVjdGlvbk1hbmFn
ZXI7Ci0KLSAgLyoqCi0gICAqIENvbnN0cnVjdHMgYSBuZXcgU2NyZWVuIENhcHR1cmVyLgotICAg
KgotICAgKiBAcGFyYW0gbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGEgdGhlIHJl
c3VsdCBkYXRhIG9mIE1lZGlhUHJvamVjdGlvbiBwZXJtaXNzaW9uCi0gICAqICAgICBhY3Rpdml0
eTsgdGhlIGNhbGxpbmcgYXBwIG11c3QgdmFsaWRhdGUgdGhhdCByZXN1bHQgY29kZSBpcyBBY3Rp
dml0eS5SRVNVTFRfT0sgYmVmb3JlCi0gICAqICAgICBjYWxsaW5nIHRoaXMgbWV0aG9kLgotICAg
KiBAcGFyYW0gbWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2sgTWVkaWFQcm9qZWN0aW9uIGNhbGxiYWNr
IHRvIGltcGxlbWVudCBhcHBsaWNhdGlvbiBzcGVjaWZpYwotICAgKiAgICAgbG9naWMgaW4gZXZl
bnRzIHN1Y2ggYXMgd2hlbiB0aGUgdXNlciByZXZva2VzIGEgcHJldmlvdXNseSBncmFudGVkIGNh
cHR1cmUgcGVybWlzc2lvbi4KLSAgKiovCi0gIHB1YmxpYyBTY3JlZW5DYXB0dXJlckFuZHJvaWQo
SW50ZW50IG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhLAotICAgICAgTWVkaWFQ
cm9qZWN0aW9uLkNhbGxiYWNrIG1lZGlhUHJvamVjdGlvbkNhbGxiYWNrKSB7Ci0gICAgdGhpcy5t
ZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YSA9IG1lZGlhUHJvamVjdGlvblBlcm1p
c3Npb25SZXN1bHREYXRhOwotICAgIHRoaXMubWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2sgPSBtZWRp
YVByb2plY3Rpb25DYWxsYmFjazsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja05vdERpc3Bv
c2VkKCkgewotICAgIGlmIChpc0Rpc3Bvc2VkKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigiY2FwdHVyZXIgaXMgZGlzcG9zZWQuIik7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBpbml0aWFsaXplKGZpbmFsIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLAotICAgICAgZmluYWwgQ29udGV4dCBh
cHBsaWNhdGlvbkNvbnRleHQsIGZpbmFsIFZpZGVvQ2FwdHVyZXIuQ2FwdHVyZXJPYnNlcnZlciBj
YXB0dXJlck9ic2VydmVyKSB7Ci0gICAgY2hlY2tOb3REaXNwb3NlZCgpOwotCi0gICAgaWYgKGNh
cHR1cmVyT2JzZXJ2ZXIgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oImNhcHR1cmVyT2JzZXJ2ZXIgbm90IHNldC4iKTsKLSAgICB9Ci0gICAgdGhpcy5jYXB0dXJl
ck9ic2VydmVyID0gY2FwdHVyZXJPYnNlcnZlcjsKLQotICAgIGlmIChzdXJmYWNlVGV4dHVyZUhl
bHBlciA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigic3VyZmFj
ZVRleHR1cmVIZWxwZXIgbm90IHNldC4iKTsKLSAgICB9Ci0gICAgdGhpcy5zdXJmYWNlVGV4dHVy
ZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotCi0gICAgbWVkaWFQcm9qZWN0aW9uTWFu
YWdlciA9IChNZWRpYVByb2plY3Rpb25NYW5hZ2VyKSBhcHBsaWNhdGlvbkNvbnRleHQuZ2V0U3lz
dGVtU2VydmljZSgKLSAgICAgICAgQ29udGV4dC5NRURJQV9QUk9KRUNUSU9OX1NFUlZJQ0UpOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzdGFydENhcHR1
cmUoCi0gICAgICBmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBp
Z25vcmVkRnJhbWVyYXRlKSB7Ci0gICAgY2hlY2tOb3REaXNwb3NlZCgpOwotCi0gICAgdGhpcy53
aWR0aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotCi0gICAgbWVkaWFQcm9q
ZWN0aW9uID0gbWVkaWFQcm9qZWN0aW9uTWFuYWdlci5nZXRNZWRpYVByb2plY3Rpb24oCi0gICAg
ICAgIEFjdGl2aXR5LlJFU1VMVF9PSywgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERh
dGEpOwotCi0gICAgLy8gTGV0IE1lZGlhUHJvamVjdGlvbiBjYWxsYmFjayB1c2UgdGhlIFN1cmZh
Y2VUZXh0dXJlSGVscGVyIHRocmVhZC4KLSAgICBtZWRpYVByb2plY3Rpb24ucmVnaXN0ZXJDYWxs
YmFjayhtZWRpYVByb2plY3Rpb25DYWxsYmFjaywgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFu
ZGxlcigpKTsKLQotICAgIGNyZWF0ZVZpcnR1YWxEaXNwbGF5KCk7Ci0gICAgY2FwdHVyZXJPYnNl
cnZlci5vbkNhcHR1cmVyU3RhcnRlZCh0cnVlKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5z
dGFydExpc3RlbmluZyhTY3JlZW5DYXB0dXJlckFuZHJvaWQudGhpcyk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHN0b3BDYXB0dXJlKCkgewotICAgIGNo
ZWNrTm90RGlzcG9zZWQoKTsKLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1
cHRpYmx5KHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIoKSwgbmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHN1
cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLSAgICAgICAgY2FwdHVyZXJPYnNl
cnZlci5vbkNhcHR1cmVyU3RvcHBlZCgpOwotCi0gICAgICAgIGlmICh2aXJ0dWFsRGlzcGxheSAh
PSBudWxsKSB7Ci0gICAgICAgICAgdmlydHVhbERpc3BsYXkucmVsZWFzZSgpOwotICAgICAgICAg
IHZpcnR1YWxEaXNwbGF5ID0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtZWRpYVBy
b2plY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgIC8vIFVucmVnaXN0ZXIgdGhlIGNhbGxiYWNr
IGJlZm9yZSBzdG9wcGluZywgb3RoZXJ3aXNlIHRoZSBjYWxsYmFjayByZWN1cnNpdmVseQotICAg
ICAgICAgIC8vIGNhbGxzIHRoaXMgbWV0aG9kLgotICAgICAgICAgIG1lZGlhUHJvamVjdGlvbi51
bnJlZ2lzdGVyQ2FsbGJhY2sobWVkaWFQcm9qZWN0aW9uQ2FsbGJhY2spOwotICAgICAgICAgIG1l
ZGlhUHJvamVjdGlvbi5zdG9wKCk7Ci0gICAgICAgICAgbWVkaWFQcm9qZWN0aW9uID0gbnVsbDsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyBzeW5jaHJvbml6ZWQgdm9pZCBkaXNwb3NlKCkgewotICAgIGlzRGlzcG9zZWQgPSB0cnVlOwot
ICB9Ci0KLSAgLyoqCi0gICAqIENoYW5nZXMgb3V0cHV0IHZpZGVvIGZvcm1hdC4gVGhpcyBtZXRo
b2QgY2FuIGJlIHVzZWQgdG8gc2NhbGUgdGhlIG91dHB1dAotICAgKiB2aWRlbywgb3IgdG8gY2hh
bmdlIG9yaWVudGF0aW9uIHdoZW4gdGhlIGNhcHR1cmVkIHNjcmVlbiBpcyByb3RhdGVkIGZvciBl
eGFtcGxlLgotICAgKgotICAgKiBAcGFyYW0gd2lkdGggbmV3IG91dHB1dCB2aWRlbyB3aWR0aAot
ICAgKiBAcGFyYW0gaGVpZ2h0IG5ldyBvdXRwdXQgdmlkZW8gaGVpZ2h0Ci0gICAqIEBwYXJhbSBp
Z25vcmVkRnJhbWVyYXRlIGlnbm9yZWQKLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgc3lu
Y2hyb25pemVkIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdCgKLSAgICAgIGZpbmFsIGludCB3aWR0
aCwgZmluYWwgaW50IGhlaWdodCwgZmluYWwgaW50IGlnbm9yZWRGcmFtZXJhdGUpIHsKLSAgICBj
aGVja05vdERpc3Bvc2VkKCk7Ci0KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5o
ZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICBpZiAodmlydHVhbERpc3BsYXkgPT0gbnVsbCkgewotICAg
ICAgLy8gQ2FwdHVyZXIgaXMgc3RvcHBlZCwgdGhlIHZpcnR1YWwgZGlzcGxheSB3aWxsIGJlIGNy
ZWF0ZWQgaW4gc3RhcnRDYXB0dWVyKCkuCi0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
Q3JlYXRlIGEgbmV3IHZpcnR1YWwgZGlzcGxheSBvbiB0aGUgc3VyZmFjZVRleHR1cmVIZWxwZXIg
dGhyZWFkIHRvIGF2b2lkIGludGVyZmVyZW5jZQotICAgIC8vIHdpdGggZnJhbWUgcHJvY2Vzc2lu
Zywgd2hpY2ggaGFwcGVucyBvbiB0aGUgc2FtZSB0aHJlYWQgKHdlIHNlcmlhbGl6ZSBldmVudHMg
YnkgcnVubmluZwotICAgIC8vIHRoZW0gb24gdGhlIHNhbWUgdGhyZWFkKS4KLSAgICBUaHJlYWRV
dGlscy5pbnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KHN1cmZhY2VUZXh0dXJlSGVscGVyLmdl
dEhhbmRsZXIoKSwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHZpcnR1YWxEaXNwbGF5LnJlbGVhc2UoKTsKLSAgICAg
ICAgY3JlYXRlVmlydHVhbERpc3BsYXkoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBjcmVhdGVWaXJ0dWFsRGlzcGxheSgpIHsKLSAgICBzdXJmYWNlVGV4dHVyZUhl
bHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpLnNldERlZmF1bHRCdWZmZXJTaXplKHdpZHRoLCBoZWln
aHQpOwotICAgIHZpcnR1YWxEaXNwbGF5ID0gbWVkaWFQcm9qZWN0aW9uLmNyZWF0ZVZpcnR1YWxE
aXNwbGF5KCJXZWJSVENfU2NyZWVuQ2FwdHVyZSIsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgIFZJ
UlRVQUxfRElTUExBWV9EUEksIERJU1BMQVlfRkxBR1MsIG5ldyBTdXJmYWNlKHN1cmZhY2VUZXh0
dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpLAotICAgICAgICBudWxsIC8qIGNhbGxiYWNr
ICovLCBudWxsIC8qIGNhbGxiYWNrIGhhbmRsZXIgKi8pOwotICB9Ci0KLSAgLy8gVGhpcyBpcyBj
YWxsZWQgb24gdGhlIGludGVybmFsIGxvb3BlciB0aHJlYWQgb2Yge0BDb2RlIFN1cmZhY2VUZXh0
dXJlSGVscGVyfS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQXZh
aWxhYmxlKGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRp
bWVzdGFtcE5zKSB7Ci0gICAgbnVtQ2FwdHVyZWRGcmFtZXMrKzsKLSAgICBjYXB0dXJlck9ic2Vy
dmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIHdpZHRoLCBoZWlnaHQsIG9lc1Rl
eHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LCAwIC8qIHJvdGF0aW9uICovLCB0aW1lc3RhbXBOcyk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gaXNTY3JlZW5jYXN0KCkgewot
ICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHVibGljIGxvbmcgZ2V0TnVtQ2FwdHVyZWRGcmFt
ZXMoKSB7Ci0gICAgcmV0dXJuIG51bUNhcHR1cmVkRnJhbWVzOwotICB9Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1NkcE9ic2VydmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9TZHBPYnNlcnZlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1NkcE9ic2VydmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNiArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBJbnRlcmZhY2UgZm9y
IG9ic2VydmluZyBTRFAtcmVsYXRlZCBldmVudHMuICovCi1wdWJsaWMgaW50ZXJmYWNlIFNkcE9i
c2VydmVyIHsKLSAgLyoqIENhbGxlZCBvbiBzdWNjZXNzIG9mIENyZWF0ZXtPZmZlcixBbnN3ZXJ9
KCkuICovCi0gIHB1YmxpYyB2b2lkIG9uQ3JlYXRlU3VjY2VzcyhTZXNzaW9uRGVzY3JpcHRpb24g
c2RwKTsKLQotICAvKiogQ2FsbGVkIG9uIHN1Y2Nlc3Mgb2YgU2V0e0xvY2FsLFJlbW90ZX1EZXNj
cmlwdGlvbigpLiAqLwotICBwdWJsaWMgdm9pZCBvblNldFN1Y2Nlc3MoKTsKLQotICAvKiogQ2Fs
bGVkIG9uIGVycm9yIG9mIENyZWF0ZXtPZmZlcixBbnN3ZXJ9KCkuICovCi0gIHB1YmxpYyB2b2lk
IG9uQ3JlYXRlRmFpbHVyZShTdHJpbmcgZXJyb3IpOwotCi0gIC8qKiBDYWxsZWQgb24gZXJyb3Ig
b2YgU2V0e0xvY2FsLFJlbW90ZX1EZXNjcmlwdGlvbigpLiAqLwotICBwdWJsaWMgdm9pZCBvblNl
dEZhaWx1cmUoU3RyaW5nIGVycm9yKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2Vzc2lv
bkRlc2NyaXB0aW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TZXNzaW9u
RGVzY3JpcHRpb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9T
ZXNzaW9uRGVzY3JpcHRpb24uamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQxICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqCi0gKiBEZXNjcmlw
dGlvbiBvZiBhbiBSRkMgNDU2NiBTZXNzaW9uLgotICogU0RQcyBhcmUgcGFzc2VkIGFzIHNlcmlh
bGl6ZWQgU3RyaW5ncyBpbiBKYXZhLWxhbmQgYW5kIGFyZSBtYXRlcmlhbGl6ZWQKLSAqIHRvIFNl
c3Npb25EZXNjcmlwdGlvbkludGVyZmFjZSBhcyBhcHByb3ByaWF0ZSBpbiB0aGUgSk5JIGxheWVy
LgotICovCi1wdWJsaWMgY2xhc3MgU2Vzc2lvbkRlc2NyaXB0aW9uIHsKLSAgLyoqIEphdmEtbGFu
ZCBlbnVtIHZlcnNpb24gb2YgU2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlJ3MgdHlwZSgpIHN0
cmluZy4gKi8KLSAgcHVibGljIHN0YXRpYyBlbnVtIFR5cGUgewotICAgIE9GRkVSLAotICAgIFBS
QU5TV0VSLAotICAgIEFOU1dFUjsKLQotICAgIHB1YmxpYyBTdHJpbmcgY2Fub25pY2FsRm9ybSgp
IHsKLSAgICAgIHJldHVybiBuYW1lKCkudG9Mb3dlckNhc2UoKTsKLSAgICB9Ci0KLSAgICBwdWJs
aWMgc3RhdGljIFR5cGUgZnJvbUNhbm9uaWNhbEZvcm0oU3RyaW5nIGNhbm9uaWNhbCkgewotICAg
ICAgcmV0dXJuIFR5cGUudmFsdWVPZihUeXBlLmNsYXNzLCBjYW5vbmljYWwudG9VcHBlckNhc2Uo
KSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFR5cGUgdHlwZTsKLSAgcHVibGljIGZp
bmFsIFN0cmluZyBkZXNjcmlwdGlvbjsKLQotICBwdWJsaWMgU2Vzc2lvbkRlc2NyaXB0aW9uKFR5
cGUgdHlwZSwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAg
ICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvU3RhdHNPYnNlcnZlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvU3RhdHNPYnNlcnZlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL1N0YXRzT2JzZXJ2ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotLyoqIEludGVyZmFjZSBm
b3Igb2JzZXJ2aW5nIFN0YXRzIHJlcG9ydHMgKHNlZSB3ZWJydGM6OlN0YXRzT2JzZXJ2ZXJzKS4g
Ki8KLXB1YmxpYyBpbnRlcmZhY2UgU3RhdHNPYnNlcnZlciB7Ci0gIC8qKiBDYWxsZWQgd2hlbiB0
aGUgcmVwb3J0cyBhcmUgcmVhZHkuKi8KLSAgcHVibGljIHZvaWQgb25Db21wbGV0ZShTdGF0c1Jl
cG9ydFtdIHJlcG9ydHMpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c1JlcG9ydC5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3RhdHNSZXBvcnQuamF2YQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c1JlcG9ydC5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi0vKiogSmF2YSB2ZXJzaW9uIG9mIHdlYnJ0Yzo6U3RhdHNSZXBvcnQuICov
Ci1wdWJsaWMgY2xhc3MgU3RhdHNSZXBvcnQgewotICAvKiogSmF2YSB2ZXJzaW9uIG9mIHdlYnJ0
Yzo6U3RhdHNSZXBvcnQ6OlZhbHVlLiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIFZhbHVlIHsK
LSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIG5hbWU7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB2
YWx1ZTsKLQotICAgIHB1YmxpYyBWYWx1ZShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0g
ICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwotICAgIH0K
LQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgYnVpbGRlci5hcHBlbmQoIlsiKS5h
cHBlbmQobmFtZSkuYXBwZW5kKCI6ICIpLmFwcGVuZCh2YWx1ZSkuYXBwZW5kKCJdIik7Ci0gICAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5h
bCBTdHJpbmcgaWQ7Ci0gIHB1YmxpYyBmaW5hbCBTdHJpbmcgdHlwZTsKLSAgLy8gVGltZSBzaW5j
ZSAxOTcwLTAxLTAxVDAwOjAwOjAwWiBpbiBtaWxsaXNlY29uZHMuCi0gIHB1YmxpYyBmaW5hbCBk
b3VibGUgdGltZXN0YW1wOwotICBwdWJsaWMgZmluYWwgVmFsdWVbXSB2YWx1ZXM7Ci0KLSAgcHVi
bGljIFN0YXRzUmVwb3J0KFN0cmluZyBpZCwgU3RyaW5nIHR5cGUsIGRvdWJsZSB0aW1lc3RhbXAs
IFZhbHVlW10gdmFsdWVzKSB7Ci0gICAgdGhpcy5pZCA9IGlkOwotICAgIHRoaXMudHlwZSA9IHR5
cGU7Ci0gICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Ci0gICAgdGhpcy52YWx1ZXMgPSB2
YWx1ZXM7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQo
ImlkOiAiKQotICAgICAgICAuYXBwZW5kKGlkKQotICAgICAgICAuYXBwZW5kKCIsIHR5cGU6ICIp
Ci0gICAgICAgIC5hcHBlbmQodHlwZSkKLSAgICAgICAgLmFwcGVuZCgiLCB0aW1lc3RhbXA6ICIp
Ci0gICAgICAgIC5hcHBlbmQodGltZXN0YW1wKQotICAgICAgICAuYXBwZW5kKCIsIHZhbHVlczog
Iik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyArK2kpIHsKLSAgICAg
IGJ1aWxkZXIuYXBwZW5kKHZhbHVlc1tpXS50b1N0cmluZygpKS5hcHBlbmQoIiwgIik7Ci0gICAg
fQotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXIuamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDI4MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFu
ZHJvaWQub3BlbmdsLkdMRVMxMUV4dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBv
cnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xv
Y2s7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLkZsb2F0
QnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNhbGxhYmxlOwotaW1wb3J0IGph
dmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vKioKLSAqIEhlbHBlciBjbGFzcyB0byBj
cmVhdGUgYW5kIHN5bmNocm9uaXplIGFjY2VzcyB0byBhIFN1cmZhY2VUZXh0dXJlLiBUaGUgY2Fs
bGVyIHdpbGwgZ2V0IG5vdGlmaWVkCi0gKiBvZiBuZXcgZnJhbWVzIGluIG9uVGV4dHVyZUZyYW1l
QXZhaWxhYmxlKCksIGFuZCBzaG91bGQgY2FsbCByZXR1cm5UZXh0dXJlRnJhbWUoKSB3aGVuIGRv
bmUgd2l0aAotICogdGhlIGZyYW1lLiBPbmx5IG9uZSB0ZXh0dXJlIGZyYW1lIGNhbiBiZSBpbiBm
bGlnaHQgYXQgb25jZSwgc28gcmV0dXJuVGV4dHVyZUZyYW1lKCkgbXVzdCBiZQotICogY2FsbGVk
IGluIG9yZGVyIHRvIHJlY2VpdmUgYSBuZXcgZnJhbWUuIENhbGwgc3RvcExpc3RlbmluZygpIHRv
IHN0b3AgcmVjZWl2ZWluZyBuZXcgZnJhbWVzLiBDYWxsCi0gKiBkaXNwb3NlIHRvIHJlbGVhc2Ug
YWxsIHJlc291cmNlcyBvbmNlIHRoZSB0ZXh0dXJlIGZyYW1lIGlzIHJldHVybmVkLgotICogTm90
ZSB0aGF0IHRoZXJlIGlzIGEgQysrIGNvdW50ZXIgcGFydCBvZiB0aGlzIGNsYXNzIHRoYXQgb3B0
aW9uYWxseSBjYW4gYmUgdXNlZC4gSXQgaXMgdXNlZCBmb3IKLSAqIHdyYXBwaW5nIHRleHR1cmUg
ZnJhbWVzIGludG8gd2VicnRjOjpWaWRlb0ZyYW1lcyBhbmQgYWxzbyBoYW5kbGVzIGNhbGxpbmcg
cmV0dXJuVGV4dHVyZUZyYW1lKCkKLSAqIHdoZW4gdGhlIHdlYnJ0Yzo6VmlkZW9GcmFtZSBpcyBu
byBsb25nZXIgdXNlZC4KLSAqLwotY2xhc3MgU3VyZmFjZVRleHR1cmVIZWxwZXIgewotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlN1cmZhY2VUZXh0dXJlSGVscGVyIjsKLSAg
LyoqCi0gICAqIENhbGxiYWNrIGludGVyZmFjZSBmb3IgYmVpbmcgbm90aWZpZWQgdGhhdCBhIG5l
dyB0ZXh0dXJlIGZyYW1lIGlzIGF2YWlsYWJsZS4gVGhlIGNhbGxzIHdpbGwgYmUKLSAgICogbWFk
ZSBvbiBhIGRlZGljYXRlZCB0aHJlYWQgd2l0aCBhIGJvdW5kIEVHTENvbnRleHQuIFRoZSB0aHJl
YWQgd2lsbCBiZSB0aGUgc2FtZSB0aHJvdWdob3V0IHRoZQotICAgKiBsaWZldGltZSBvZiB0aGUg
U3VyZmFjZVRleHR1cmVIZWxwZXIgaW5zdGFuY2UsIGJ1dCBkaWZmZXJlbnQgZnJvbSB0aGUgdGhy
ZWFkIGNhbGxpbmcgdGhlCi0gICAqIFN1cmZhY2VUZXh0dXJlSGVscGVyIGNvbnN0cnVjdG9yLiBU
aGUgY2FsbGVlIGlzIG5vdCBhbGxvd2VkIHRvIG1ha2UgYW5vdGhlciBFR0xDb250ZXh0IGN1cnJl
bnQKLSAgICogb24gdGhlIGNhbGxpbmcgdGhyZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFj
ZSBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHsKLSAgICBhYnN0cmFjdCB2b2lkIG9u
VGV4dHVyZUZyYW1lQXZhaWxhYmxlKAotICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtd
IHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcyk7Ci0gIH0KLQotICAvKioKLSAgICog
Q29uc3RydWN0IGEgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyIHNoYXJpbmcgT3BlbkdMIHJlc291
cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gQSBkZWRpY2F0ZWQKLSAgICogdGhyZWFkIGFuZCBo
YW5kbGVyIGlzIGNyZWF0ZWQgZm9yIGhhbmRsaW5nIHRoZSBTdXJmYWNlVGV4dHVyZS4gTWF5IHJl
dHVybiBudWxsIGlmIEVHTCBmYWlscyB0bwotICAgKiBpbml0aWFsaXplIGEgcGl4ZWwgYnVmZmVy
IHN1cmZhY2UgYW5kIG1ha2UgaXQgY3VycmVudC4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgY3JlYXRlKAotICAgICAgZmluYWwgU3RyaW5nIHRocmVhZE5hbWUs
IGZpbmFsIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0KSB7Ci0gICAgZmluYWwgSGFuZGxl
clRocmVhZCB0aHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZCh0aHJlYWROYW1lKTsKLSAgICB0aHJl
YWQuc3RhcnQoKTsKLSAgICBmaW5hbCBIYW5kbGVyIGhhbmRsZXIgPSBuZXcgSGFuZGxlcih0aHJl
YWQuZ2V0TG9vcGVyKCkpOwotCi0gICAgLy8gVGhlIG9uRnJhbWVBdmFpbGFibGUoKSBjYWxsYmFj
ayB3aWxsIGJlIGV4ZWN1dGVkIG9uIHRoZSBTdXJmYWNlVGV4dHVyZSBjdG9yIHRocmVhZC4gU2Vl
OgotICAgIC8vIGh0dHA6Ly9ncmVwY29kZS5jb20vZmlsZS9yZXBvc2l0b3J5LmdyZXBjb2RlLmNv
bS9qYXZhL2V4dC9jb20uZ29vZ2xlLmFuZHJvaWQvYW5kcm9pZC81LjEuMV9yMS9hbmRyb2lkL2dy
YXBoaWNzL1N1cmZhY2VUZXh0dXJlLmphdmEjMTk1LgotICAgIC8vIFRoZXJlZm9yZSwgaW4gb3Jk
ZXIgdG8gY29udHJvbCB0aGUgY2FsbGJhY2sgdGhyZWFkIG9uIEFQSSBsdmwgPCAyMSwgdGhlIFN1
cmZhY2VUZXh0dXJlSGVscGVyCi0gICAgLy8gaXMgY29uc3RydWN0ZWQgb24gdGhlIHxoYW5kbGVy
fCB0aHJlYWQuCi0gICAgcmV0dXJuIFRocmVhZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVycnVw
dGlibHkoaGFuZGxlciwgbmV3IENhbGxhYmxlPFN1cmZhY2VUZXh0dXJlSGVscGVyPigpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIFN1cmZhY2VUZXh0dXJlSGVscGVyIGNhbGwoKSB7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgcmV0dXJuIG5ldyBTdXJmYWNlVGV4dHVyZUhlbHBl
cihzaGFyZWRDb250ZXh0LCBoYW5kbGVyKTsKLSAgICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgdGhyZWFkTmFtZSArICIgY3JlYXRl
IGZhaWx1cmUiLCBlKTsKLSAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIGhhbmRsZXI7Ci0gIHBy
aXZhdGUgZmluYWwgRWdsQmFzZSBlZ2xCYXNlOwotICBwcml2YXRlIGZpbmFsIFN1cmZhY2VUZXh0
dXJlIHN1cmZhY2VUZXh0dXJlOwotICBwcml2YXRlIGZpbmFsIGludCBvZXNUZXh0dXJlSWQ7Ci0g
IHByaXZhdGUgWXV2Q29udmVydGVyIHl1dkNvbnZlcnRlcjsKLQotICAvLyBUaGVzZSB2YXJpYWJs
ZXMgYXJlIG9ubHkgYWNjZXNzZWQgZnJvbSB0aGUgfGhhbmRsZXJ8IHRocmVhZC4KLSAgcHJpdmF0
ZSBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIGxpc3RlbmVyOwotICAvLyBUaGUgcG9z
c2libGUgc3RhdGVzIG9mIHRoaXMgY2xhc3MuCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNQZW5kaW5n
VGV4dHVyZSA9IGZhbHNlOwotICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gaXNUZXh0dXJlSW5V
c2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIGlzUXVpdHRpbmcgPSBmYWxzZTsKLSAgLy8g
fHBlbmRpbmdMaXN0ZW5lcnwgaXMgc2V0IGluIHNldExpc3RlbmVyKCkgYW5kIHRoZSBydW5uYWJs
ZSBpcyBwb3N0ZWQgdG8gdGhlIGhhbmRsZXIgdGhyZWFkLgotICAvLyBzZXRMaXN0ZW5lcigpIGlz
IG5vdCBhbGxvd2VkIHRvIGJlIGNhbGxlZCBhZ2FpbiBiZWZvcmUgc3RvcExpc3RlbmluZygpLCBz
byB0aGlzIGlzIHRocmVhZCBzYWZlLgotICBwcml2YXRlIE9uVGV4dHVyZUZyYW1lQXZhaWxhYmxl
TGlzdGVuZXIgcGVuZGluZ0xpc3RlbmVyOwotICBmaW5hbCBSdW5uYWJsZSBzZXRMaXN0ZW5lclJ1
bm5hYmxlID0gbmV3IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJTZXR0aW5nIGxpc3RlbmVyIHRvICIgKyBw
ZW5kaW5nTGlzdGVuZXIpOwotICAgICAgbGlzdGVuZXIgPSBwZW5kaW5nTGlzdGVuZXI7Ci0gICAg
ICBwZW5kaW5nTGlzdGVuZXIgPSBudWxsOwotICAgICAgLy8gTWF5IGhhdmUgYSBwZW5kaW5nIGZy
YW1lIGZyb20gdGhlIHByZXZpb3VzIGNhcHR1cmUgc2Vzc2lvbiAtIGRyb3AgaXQuCi0gICAgICBp
ZiAoaGFzUGVuZGluZ1RleHR1cmUpIHsKLSAgICAgICAgLy8gQ2FsbGluZyB1cGRhdGVUZXhJbWFn
ZSgpIGlzIG5lY2Nlc3NhcnkgaW4gb3JkZXIgdG8gcmVjZWl2ZSBuZXcgZnJhbWVzLgotICAgICAg
ICB1cGRhdGVUZXhJbWFnZSgpOwotICAgICAgICBoYXNQZW5kaW5nVGV4dHVyZSA9IGZhbHNlOwot
ICAgICAgfQotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyKEVn
bEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBIYW5kbGVyIGhhbmRsZXIpIHsKLSAgICBpZiAo
aGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSAhPSBUaHJlYWQuY3VycmVudFRocmVhZCgp
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTdXJmYWNlVGV4dHVy
ZUhlbHBlciBtdXN0IGJlIGNyZWF0ZWQgb24gdGhlIGhhbmRsZXIgdGhyZWFkIik7Ci0gICAgfQot
ICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7Ci0KLSAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVh
dGUoc2hhcmVkQ29udGV4dCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICB0cnkg
ewotICAgICAgLy8gQm90aCB0aGVzZSBzdGF0ZW1lbnRzIGhhdmUgYmVlbiBvYnNlcnZlZCB0byBm
YWlsIG9uIHJhcmUgb2NjYXNpb25zLCBzZWUgQlVHPXdlYnJ0Yzo1NjgyLgotICAgICAgZWdsQmFz
ZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0gICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50
KCk7Ci0gICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBDbGVhbiB1
cCBiZWZvcmUgcmV0aHJvd2luZyB0aGUgZXhjZXB0aW9uLgotICAgICAgZWdsQmFzZS5yZWxlYXNl
KCk7Ci0gICAgICBoYW5kbGVyLmdldExvb3BlcigpLnF1aXQoKTsKLSAgICAgIHRocm93IGU7Ci0g
ICAgfQotCi0gICAgb2VzVGV4dHVyZUlkID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMTFF
eHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMpOwotICAgIHN1cmZhY2VUZXh0dXJlID0gbmV3IFN1
cmZhY2VUZXh0dXJlKG9lc1RleHR1cmVJZCk7Ci0gICAgc3VyZmFjZVRleHR1cmUuc2V0T25GcmFt
ZUF2YWlsYWJsZUxpc3RlbmVyKG5ldyBTdXJmYWNlVGV4dHVyZS5PbkZyYW1lQXZhaWxhYmxlTGlz
dGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRnJhbWVBdmFp
bGFibGUoU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKLSAgICAgICAgaGFzUGVuZGlu
Z1RleHR1cmUgPSB0cnVlOwotICAgICAgICB0cnlEZWxpdmVyVGV4dHVyZUZyYW1lKCk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogU3RhcnQgdG8gc3RyZWFtIHRleHR1cmVz
IHRvIHRoZSBnaXZlbiB8bGlzdGVuZXJ8LiBJZiB5b3UgbmVlZCB0byBjaGFuZ2UgbGlzdGVuZXIs
IHlvdSBuZWVkIHRvCi0gICAqIGNhbGwgc3RvcExpc3RlbmluZygpIGZpcnN0LgotICAgKi8KLSAg
cHVibGljIHZvaWQgc3RhcnRMaXN0ZW5pbmcoZmluYWwgT25UZXh0dXJlRnJhbWVBdmFpbGFibGVM
aXN0ZW5lciBsaXN0ZW5lcikgewotICAgIGlmICh0aGlzLmxpc3RlbmVyICE9IG51bGwgfHwgdGhp
cy5wZW5kaW5nTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigiU3VyZmFjZVRleHR1cmVIZWxwZXIgbGlzdGVuZXIgaGFzIGFscmVhZHkgYmVl
biBzZXQuIik7Ci0gICAgfQotICAgIHRoaXMucGVuZGluZ0xpc3RlbmVyID0gbGlzdGVuZXI7Ci0g
ICAgaGFuZGxlci5wb3N0KHNldExpc3RlbmVyUnVubmFibGUpOwotICB9Ci0KLSAgLyoqCi0gICAq
IFN0b3AgbGlzdGVuaW5nLiBUaGUgbGlzdGVuZXIgc2V0IGluIHN0YXJ0TGlzdGVuaW5nKCkgaXMg
Z3VhcmFudGVkZWQgdG8gbm90IHJlY2VpdmUgYW55IG1vcmUKLSAgICogb25UZXh0dXJlRnJhbWVB
dmFpbGFibGUoKSBjYWxsYmFja3MgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgotICAgKi8K
LSAgcHVibGljIHZvaWQgc3RvcExpc3RlbmluZygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3Rv
cExpc3RlbmluZygpIik7Ci0gICAgaGFuZGxlci5yZW1vdmVDYWxsYmFja3Moc2V0TGlzdGVuZXJS
dW5uYWJsZSk7Ci0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseSho
YW5kbGVyLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgbGlzdGVuZXIgPSBudWxsOwotICAgICAgICBwZW5kaW5nTGlz
dGVuZXIgPSBudWxsOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHJp
ZXZlIHRoZSB1bmRlcmx5aW5nIFN1cmZhY2VUZXh0dXJlLiBUaGUgU3VyZmFjZVRleHR1cmUgc2hv
dWxkIGJlIHBhc3NlZCBpbiB0byBhIHZpZGVvCi0gICAqIHByb2R1Y2VyIHN1Y2ggYXMgYSBjYW1l
cmEgb3IgZGVjb2Rlci4KLSAgICovCi0gIHB1YmxpYyBTdXJmYWNlVGV4dHVyZSBnZXRTdXJmYWNl
VGV4dHVyZSgpIHsKLSAgICByZXR1cm4gc3VyZmFjZVRleHR1cmU7Ci0gIH0KLQotICAvKioKLSAg
ICogUmV0cmlldmUgdGhlIGhhbmRsZXIgdGhhdCBjYWxscyBvblRleHR1cmVGcmFtZUF2YWlsYWJs
ZSgpLiBUaGlzIGhhbmRsZXIgaXMgdmFsaWQgdW50aWwKLSAgICogZGlzcG9zZSgpIGlzIGNhbGxl
ZC4KLSAgICovCi0gIHB1YmxpYyBIYW5kbGVyIGdldEhhbmRsZXIoKSB7Ci0gICAgcmV0dXJuIGhh
bmRsZXI7Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIHNpZ25hbCB0
aGF0IHlvdSBhcmUgZG9uZSB3aXRoIHRoZSBmcmFtZSByZWNlaXZlZCBpbgotICAgKiBvblRleHR1
cmVGcmFtZUF2YWlsYWJsZSgpLiBPbmx5IG9uZSB0ZXh0dXJlIGZyYW1lIGNhbiBiZSBpbiBmbGln
aHQgYXQgb25jZSwgc28geW91IG11c3QgY2FsbAotICAgKiB0aGlzIGZ1bmN0aW9uIGluIG9yZGVy
IHRvIHJlY2VpdmUgYSBuZXcgZnJhbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCByZXR1cm5UZXh0
dXJlRnJhbWUoKSB7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpc1RleHR1cmVJblVz
ZSA9IGZhbHNlOwotICAgICAgICBpZiAoaXNRdWl0dGluZykgewotICAgICAgICAgIHJlbGVhc2Uo
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0cnlEZWxpdmVyVGV4dHVyZUZyYW1lKCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlz
VGV4dHVyZUluVXNlKCkgewotICAgIHJldHVybiBpc1RleHR1cmVJblVzZTsKLSAgfQotCi0gIC8q
KgotICAgKiBDYWxsIGRpc2Nvbm5lY3QoKSB0byBzdG9wIHJlY2VpdmluZyBmcmFtZXMuIE9wZW5H
TCByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIGFuZCB0aGUgaGFuZGxlciBpcwotICAgKiBzdG9wcGVk
IHdoZW4gdGhlIHRleHR1cmUgZnJhbWUgaGFzIGJlZW4gcmV0dXJuZWQgYnkgYSBjYWxsIHRvIHJl
dHVyblRleHR1cmVGcmFtZSgpLiBZb3UgYXJlCi0gICAqIGd1YXJhbnRlZWQgdG8gbm90IHJlY2Vp
dmUgYW55IG1vcmUgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBhZnRlciB0aGlzIGZ1bmN0aW9u
IHJldHVybnMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIExvZ2dpbmcu
ZChUQUcsICJkaXNwb3NlKCkiKTsKLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRl
cnJ1cHRpYmx5KGhhbmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpc1F1aXR0aW5nID0gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFpc1RleHR1cmVJblVzZSkgewotICAgICAgICAgIHJlbGVhc2UoKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGV4dHVyZVRvWVVWKGZp
bmFsIEJ5dGVCdWZmZXIgYnVmLCBmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQsCi0g
ICAgICBmaW5hbCBpbnQgc3RyaWRlLCBmaW5hbCBpbnQgdGV4dHVyZUlkLCBmaW5hbCBmbG9hdFtd
IHRyYW5zZm9ybU1hdHJpeCkgewotICAgIGlmICh0ZXh0dXJlSWQgIT0gb2VzVGV4dHVyZUlkKSB7
Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJ0ZXh0dXJlVG9CeXRlQnVm
ZmVyIGNhbGxlZCB3aXRoIHVuZXhwZWN0ZWQgdGV4dHVyZUlkIik7Ci0gICAgfQotCi0gICAgVGhy
ZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShoYW5kbGVyLCBuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaWYgKHl1dkNvbnZlcnRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgeXV2Q29udmVydGVyID0g
bmV3IFl1dkNvbnZlcnRlcigpOwotICAgICAgICB9Ci0gICAgICAgIHl1dkNvbnZlcnRlci5jb252
ZXJ0KGJ1Ziwgd2lkdGgsIGhlaWdodCwgc3RyaWRlLCB0ZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJp
eCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlVGV4SW1h
Z2UoKSB7Ci0gICAgLy8gU3VyZmFjZVRleHR1cmUudXBkYXRlVGV4SW1hZ2UgYXBwYXJlbnRseSBj
YW4gY29tcGV0ZSBhbmQgZGVhZGxvY2sgd2l0aCBlZ2xTd2FwQnVmZmVycywKLSAgICAvLyBhcyBv
YnNlcnZlZCBvbiBOZXh1cyA1LiBUaGVyZWZvcmUsIHN5bmNocm9uaXplIGl0IHdpdGggdGhlIEVH
TCBmdW5jdGlvbnMuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93ZWJy
dGMvaXNzdWVzL2RldGFpbD9pZD01NzAyIGZvciBtb3JlIGluZm8uCi0gICAgc3luY2hyb25pemVk
IChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIHN1cmZhY2VUZXh0dXJlLnVwZGF0ZVRleEltYWdlKCk7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHRyeURlbGl2ZXJUZXh0dXJlRnJhbWUoKSB7
Ci0gICAgaWYgKGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkgIT0gVGhyZWFkLmN1cnJl
bnRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3Jv
bmcgdGhyZWFkLiIpOwotICAgIH0KLSAgICBpZiAoaXNRdWl0dGluZyB8fCAhaGFzUGVuZGluZ1Rl
eHR1cmUgfHwgaXNUZXh0dXJlSW5Vc2UgfHwgbGlzdGVuZXIgPT0gbnVsbCkgewotICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpc1RleHR1cmVJblVzZSA9IHRydWU7Ci0gICAgaGFzUGVuZGluZ1Rl
eHR1cmUgPSBmYWxzZTsKLQotICAgIHVwZGF0ZVRleEltYWdlKCk7Ci0KLSAgICBmaW5hbCBmbG9h
dFtdIHRyYW5zZm9ybU1hdHJpeCA9IG5ldyBmbG9hdFsxNl07Ci0gICAgc3VyZmFjZVRleHR1cmUu
Z2V0VHJhbnNmb3JtTWF0cml4KHRyYW5zZm9ybU1hdHJpeCk7Ci0gICAgZmluYWwgbG9uZyB0aW1l
c3RhbXBOcyA9IChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5J
Q0VfQ1JFQU1fU0FORFdJQ0gpCi0gICAgICAgID8gc3VyZmFjZVRleHR1cmUuZ2V0VGltZXN0YW1w
KCkKLSAgICAgICAgOiBUaW1lVW5pdC5NSUxMSVNFQ09ORFMudG9OYW5vcyhTeXN0ZW1DbG9jay5l
bGFwc2VkUmVhbHRpbWUoKSk7Ci0gICAgbGlzdGVuZXIub25UZXh0dXJlRnJhbWVBdmFpbGFibGUo
b2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIHRpbWVzdGFtcE5zKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCByZWxlYXNlKCkgewotICAgIGlmIChoYW5kbGVyLmdldExvb3BlcigpLmdldFRo
cmVhZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZC4iKTsKLSAgICB9Ci0gICAgaWYgKGlzVGV4
dHVyZUluVXNlIHx8ICFpc1F1aXR0aW5nKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJVbmV4cGVjdGVkIHJlbGVhc2UuIik7Ci0gICAgfQotICAgIGlmICh5dXZDb252
ZXJ0ZXIgIT0gbnVsbCkgewotICAgICAgeXV2Q29udmVydGVyLnJlbGVhc2UoKTsKLSAgICB9Ci0g
ICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwgbmV3IGludFtdIHtvZXNUZXh0dXJlSWR9LCAw
KTsKLSAgICBzdXJmYWNlVGV4dHVyZS5yZWxlYXNlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7
Ci0gICAgaGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDIyMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRl
bnQucmVzLlJlc291cmNlcy5Ob3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLmdyYXBo
aWNzLlBvaW50OwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5k
cm9pZC52aWV3LlN1cmZhY2VIb2xkZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VWaWV3
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotCi0vKioKLSAq
IEltcGxlbWVudHMgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBieSBkaXNwbGF5
aW5nIHRoZSB2aWRlbyBzdHJlYW0gb24gYSBTdXJmYWNlVmlldy4KLSAqIHJlbmRlckZyYW1lKCkg
aXMgYXN5bmNocm9ub3VzIHRvIGF2b2lkIGJsb2NraW5nIHRoZSBjYWxsaW5nIHRocmVhZC4KLSAq
IFRoaXMgY2xhc3MgaXMgdGhyZWFkIHNhZmUgYW5kIGhhbmRsZXMgYWNjZXNzIGZyb20gcG90ZW50
aWFsbHkgZm91ciBkaWZmZXJlbnQgdGhyZWFkczoKLSAqIEludGVyYWN0aW9uIGZyb20gdGhlIG1h
aW4gYXBwIGluIGluaXQsIHJlbGVhc2UsIHNldE1pcnJvciwgYW5kIHNldFNjYWxpbmd0eXBlLgot
ICogSW50ZXJhY3Rpb24gZnJvbSBDKysgcnRjOjpWaWRlb1NpbmtJbnRlcmZhY2UgaW4gcmVuZGVy
RnJhbWUuCi0gKiBJbnRlcmFjdGlvbiBmcm9tIHRoZSBBY3Rpdml0eSBsaWZlY3ljbGUgaW4gc3Vy
ZmFjZUNyZWF0ZWQsIHN1cmZhY2VDaGFuZ2VkLCBhbmQgc3VyZmFjZURlc3Ryb3llZC4KLSAqIElu
dGVyYWN0aW9uIHdpdGggdGhlIGxheW91dCBmcmFtZXdvcmsgaW4gb25NZWFzdXJlIGFuZCBvblNp
emVDaGFuZ2VkLgotICovCi1wdWJsaWMgY2xhc3MgU3VyZmFjZVZpZXdSZW5kZXJlcgotICAgIGV4
dGVuZHMgU3VyZmFjZVZpZXcgaW1wbGVtZW50cyBTdXJmYWNlSG9sZGVyLkNhbGxiYWNrLCBWaWRl
b1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiU3VyZmFjZVZpZXdSZW5kZXJlciI7Ci0KLSAgLy8gQ2FjaGVkIHJlc291cmNlIG5hbWUuCi0g
IHByaXZhdGUgZmluYWwgU3RyaW5nIHJlc291cmNlTmFtZTsKLSAgcHJpdmF0ZSBmaW5hbCBSZW5k
ZXJlckNvbW1vbi5WaWRlb0xheW91dE1lYXN1cmUgdmlkZW9MYXlvdXRNZWFzdXJlID0KLSAgICAg
IG5ldyBSZW5kZXJlckNvbW1vbi5WaWRlb0xheW91dE1lYXN1cmUoKTsKLSAgcHJpdmF0ZSBmaW5h
bCBFZ2xSZW5kZXJlciBlZ2xSZW5kZXJlcjsKLQotICAvLyBDYWxsYmFjayBmb3IgcmVwb3J0aW5n
IHJlbmRlcmVyIGV2ZW50cy4gUmVhZC1vbmx5IGFmdGVyIGluaXRpbGl6YXRpb24gc28gbm8gbG9j
ayByZXF1aXJlZC4KLSAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5SZW5kZXJlckV2ZW50cyByZW5k
ZXJlckV2ZW50czsKLQotICBwcml2YXRlIGZpbmFsIE9iamVjdCBsYXlvdXRMb2NrID0gbmV3IE9i
amVjdCgpOwotICBwcml2YXRlIGJvb2xlYW4gaXNGaXJzdEZyYW1lUmVuZGVyZWQ7Ci0gIHByaXZh
dGUgaW50IHJvdGF0ZWRGcmFtZVdpZHRoOwotICBwcml2YXRlIGludCByb3RhdGVkRnJhbWVIZWln
aHQ7Ci0gIHByaXZhdGUgaW50IGZyYW1lUm90YXRpb247Ci0KLSAgLyoqCi0gICAqIFN0YW5kYXJk
IFZpZXcgY29uc3RydWN0b3IuIEluIG9yZGVyIHRvIHJlbmRlciBzb21ldGhpbmcsIHlvdSBtdXN0
IGZpcnN0IGNhbGwgaW5pdCgpLgotICAgKi8KLSAgcHVibGljIFN1cmZhY2VWaWV3UmVuZGVyZXIo
Q29udGV4dCBjb250ZXh0KSB7Ci0gICAgc3VwZXIoY29udGV4dCk7Ci0gICAgdGhpcy5yZXNvdXJj
ZU5hbWUgPSBnZXRSZXNvdXJjZU5hbWUoKTsKLSAgICBlZ2xSZW5kZXJlciA9IG5ldyBFZ2xSZW5k
ZXJlcihyZXNvdXJjZU5hbWUpOwotICAgIGdldEhvbGRlcigpLmFkZENhbGxiYWNrKHRoaXMpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFN0YW5kYXJkIFZpZXcgY29uc3RydWN0b3IuIEluIG9yZGVyIHRv
IHJlbmRlciBzb21ldGhpbmcsIHlvdSBtdXN0IGZpcnN0IGNhbGwgaW5pdCgpLgotICAgKi8KLSAg
cHVibGljIFN1cmZhY2VWaWV3UmVuZGVyZXIoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQg
YXR0cnMpIHsKLSAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gICAgdGhpcy5yZXNvdXJjZU5h
bWUgPSBnZXRSZXNvdXJjZU5hbWUoKTsKLSAgICBlZ2xSZW5kZXJlciA9IG5ldyBFZ2xSZW5kZXJl
cihyZXNvdXJjZU5hbWUpOwotICAgIGdldEhvbGRlcigpLmFkZENhbGxiYWNrKHRoaXMpOwotICB9
Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemUgdGhpcyBjbGFzcywgc2hhcmluZyByZXNvdXJjZXMg
d2l0aCB8c2hhcmVkQ29udGV4dHwuIEl0IGlzIGFsbG93ZWQgdG8gY2FsbCBpbml0KCkgdG8KLSAg
ICogcmVpbml0aWFsaXplIHRoZSByZW5kZXJlciBhZnRlciBhIHByZXZpb3VzIGluaXQoKS9yZWxl
YXNlKCkgY3ljbGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KEVnbEJhc2UuQ29udGV4dCBz
aGFyZWRDb250ZXh0LCBSZW5kZXJlckNvbW1vbi5SZW5kZXJlckV2ZW50cyByZW5kZXJlckV2ZW50
cykgewotICAgIGluaXQoc2hhcmVkQ29udGV4dCwgcmVuZGVyZXJFdmVudHMsIEVnbEJhc2UuQ09O
RklHX1BMQUlOLCBuZXcgR2xSZWN0RHJhd2VyKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRp
YWxpemUgdGhpcyBjbGFzcywgc2hhcmluZyByZXNvdXJjZXMgd2l0aCB8c2hhcmVkQ29udGV4dHwu
IFRoZSBjdXN0b20gfGRyYXdlcnwgd2lsbCBiZSB1c2VkCi0gICAqIGZvciBkcmF3aW5nIGZyYW1l
cyBvbiB0aGUgRUdMU3VyZmFjZS4gVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGlu
ZyByZWxlYXNlKCkgb24KLSAgICogfGRyYXdlcnwuIEl0IGlzIGFsbG93ZWQgdG8gY2FsbCBpbml0
KCkgdG8gcmVpbml0aWFsaXplIHRoZSByZW5kZXJlciBhZnRlciBhIHByZXZpb3VzCi0gICAqIGlu
aXQoKS9yZWxlYXNlKCkgY3ljbGUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBpbml0KGZpbmFsIEVn
bEJhc2UuQ29udGV4dCBzaGFyZWRDb250ZXh0LAotICAgICAgUmVuZGVyZXJDb21tb24uUmVuZGVy
ZXJFdmVudHMgcmVuZGVyZXJFdmVudHMsIGZpbmFsIGludFtdIGNvbmZpZ0F0dHJpYnV0ZXMsCi0g
ICAgICBSZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXIpIHsKLSAgICBUaHJlYWRVdGlscy5j
aGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgdGhpcy5yZW5kZXJlckV2ZW50cyA9IHJlbmRlcmVy
RXZlbnRzOwotICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAgICAgcm90YXRlZEZy
YW1lV2lkdGggPSAwOwotICAgICAgcm90YXRlZEZyYW1lSGVpZ2h0ID0gMDsKLSAgICAgIGZyYW1l
Um90YXRpb24gPSAwOwotICAgIH0KLSAgICBlZ2xSZW5kZXJlci5pbml0KHNoYXJlZENvbnRleHQs
IGNvbmZpZ0F0dHJpYnV0ZXMsIGRyYXdlcik7Ci0gIH0KLQotICAvKioKLSAgICogQmxvY2sgdW50
aWwgYW55IHBlbmRpbmcgZnJhbWUgaXMgcmV0dXJuZWQgYW5kIGFsbCBHTCByZXNvdXJjZXMgcmVs
ZWFzZWQsIGV2ZW4gaWYgYW4gaW50ZXJydXB0Ci0gICAqIG9jY3Vycy4gSWYgYW4gaW50ZXJydXB0
IG9jY3VycyBkdXJpbmcgcmVsZWFzZSgpLCB0aGUgaW50ZXJydXB0IGZsYWcgd2lsbCBiZSBzZXQu
IFRoaXMgZnVuY3Rpb24KLSAgICogc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlIEFjdGl2aXR5
IGlzIGRlc3Ryb3llZCBhbmQgdGhlIEVHTENvbnRleHQgaXMgc3RpbGwgdmFsaWQuIElmIHlvdQot
ICAgKiBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24sIHRoZSBHTCByZXNvdXJjZXMgbWlnaHQgbGVh
ay4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgZWdsUmVuZGVyZXIucmVs
ZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBpZiB0aGUgdmlkZW8gc3RyZWFtIHNob3Vs
ZCBiZSBtaXJyb3JlZCBvciBub3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNaXJyb3IoZmlu
YWwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBlZ2xSZW5kZXJlci5zZXRNaXJyb3IobWlycm9yKTsK
LSAgfQotCi0gIC8qKgotICAgKiBTZXQgaG93IHRoZSB2aWRlbyB3aWxsIGZpbGwgdGhlIGFsbG93
ZWQgbGF5b3V0IGFyZWEuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTY2FsaW5nVHlwZShSZW5k
ZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSkgewotICAgIFRocmVhZFV0aWxzLmNo
ZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICB2aWRlb0xheW91dE1lYXN1cmUuc2V0U2NhbGluZ1R5
cGUoc2NhbGluZ1R5cGUpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0U2NhbGluZ1R5cGUoUmVu
ZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNYXRjaE9yaWVudGF0aW9uLAotICAg
ICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0
aW9uKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIHZpZGVv
TGF5b3V0TWVhc3VyZS5zZXRTY2FsaW5nVHlwZShzY2FsaW5nVHlwZU1hdGNoT3JpZW50YXRpb24s
IHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbik7Ci0gIH0KLQotICAvLyBWaWRlb1JlbmRl
cmVyLkNhbGxiYWNrcyBpbnRlcmZhY2UuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZW5k
ZXJGcmFtZShWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgIHVwZGF0ZUZyYW1l
RGltZW5zaW9uc0FuZFJlcG9ydEV2ZW50cyhmcmFtZSk7Ci0gICAgZWdsUmVuZGVyZXIucmVuZGVy
RnJhbWUoZnJhbWUpOwotICB9Ci0KLSAgLy8gVmlldyBsYXlvdXQgaW50ZXJmYWNlLgotICBAT3Zl
cnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aFNwZWMsIGludCBoZWln
aHRTcGVjKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIGZp
bmFsIFBvaW50IHNpemU7Ci0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICBz
aXplID0KLSAgICAgICAgICB2aWRlb0xheW91dE1lYXN1cmUubWVhc3VyZSh3aWR0aFNwZWMsIGhl
aWdodFNwZWMsIHJvdGF0ZWRGcmFtZVdpZHRoLCByb3RhdGVkRnJhbWVIZWlnaHQpOwotICAgIH0K
LSAgICBzZXRNZWFzdXJlZERpbWVuc2lvbihzaXplLngsIHNpemUueSk7Ci0gICAgbG9nRCgib25N
ZWFzdXJlKCkuIE5ldyBzaXplOiAiICsgc2l6ZS54ICsgIngiICsgc2l6ZS55KTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQsIGlu
dCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKLSAgICBUaHJlYWRVdGls
cy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZWdsUmVuZGVyZXIuc2V0TGF5b3V0QXNwZWN0
UmF0aW8oKHJpZ2h0IC0gbGVmdCkgLyAoZmxvYXQpIChib3R0b20gLSB0b3ApKTsKLSAgfQotCi0g
IC8vIFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2sgaW50ZXJmYWNlLgotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgc3VyZmFjZUNyZWF0ZWQoZmluYWwgU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKLSAg
ICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZWdsUmVuZGVyZXIuY3Jl
YXRlRWdsU3VyZmFjZShob2xkZXIuZ2V0U3VyZmFjZSgpKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBzdXJmYWNlRGVzdHJveWVkKFN1cmZhY2VIb2xkZXIgaG9sZGVyKSB7Ci0g
ICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIGZpbmFsIENvdW50RG93
bkxhdGNoIGNvbXBsZXRpb25MYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBlZ2xS
ZW5kZXJlci5yZWxlYXNlRWdsU3VyZmFjZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY29tcGxldGlvbkxhdGNoLmNv
dW50RG93bigpOwotICAgICAgfQotICAgIH0pOwotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRl
cnJ1cHRpYmx5KGNvbXBsZXRpb25MYXRjaCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgc3VyZmFjZUNoYW5nZWQoU3VyZmFjZUhvbGRlciBob2xkZXIsIGludCBmb3JtYXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJl
YWQoKTsKLSAgICBlZ2xSZW5kZXJlci5zdXJmYWNlU2l6ZUNoYW5nZWQod2lkdGgsIGhlaWdodCk7
Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRSZXNvdXJjZU5hbWUoKSB7Ci0gICAgdHJ5IHsK
LSAgICAgIHJldHVybiBnZXRSZXNvdXJjZXMoKS5nZXRSZXNvdXJjZUVudHJ5TmFtZShnZXRJZCgp
KSArICI6ICI7Ci0gICAgfSBjYXRjaCAoTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgcmV0
dXJuICIiOwotICAgIH0KLSAgfQotCi0gIC8vIFVwZGF0ZSBmcmFtZSBkaW1lbnNpb25zIGFuZCBy
ZXBvcnQgYW55IGNoYW5nZXMgdG8gfHJlbmRlcmVyRXZlbnRzfC4KLSAgcHJpdmF0ZSB2b2lkIHVw
ZGF0ZUZyYW1lRGltZW5zaW9uc0FuZFJlcG9ydEV2ZW50cyhWaWRlb1JlbmRlcmVyLkk0MjBGcmFt
ZSBmcmFtZSkgewotICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAgICAgaWYgKCFp
c0ZpcnN0RnJhbWVSZW5kZXJlZCkgewotICAgICAgICBpc0ZpcnN0RnJhbWVSZW5kZXJlZCA9IHRy
dWU7Ci0gICAgICAgIGxvZ0QoIlJlcG9ydGluZyBmaXJzdCByZW5kZXJlZCBmcmFtZS4iKTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyRXZlbnRzICE9IG51bGwpIHsKLSAgICAgICAgICByZW5kZXJlckV2
ZW50cy5vbkZpcnN0RnJhbWVSZW5kZXJlZCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBp
ZiAocm90YXRlZEZyYW1lV2lkdGggIT0gZnJhbWUucm90YXRlZFdpZHRoKCkgfHwgcm90YXRlZEZy
YW1lSGVpZ2h0ICE9IGZyYW1lLnJvdGF0ZWRIZWlnaHQoKQotICAgICAgICAgIHx8IGZyYW1lUm90
YXRpb24gIT0gZnJhbWUucm90YXRpb25EZWdyZWUpIHsKLSAgICAgICAgbG9nRCgiUmVwb3J0aW5n
IGZyYW1lIHJlc29sdXRpb24gY2hhbmdlZCB0byAiICsgZnJhbWUud2lkdGggKyAieCIgKyBmcmFt
ZS5oZWlnaHQKLSAgICAgICAgICAgICsgIiB3aXRoIHJvdGF0aW9uICIgKyBmcmFtZS5yb3RhdGlv
bkRlZ3JlZSk7Ci0gICAgICAgIGlmIChyZW5kZXJlckV2ZW50cyAhPSBudWxsKSB7Ci0gICAgICAg
ICAgcmVuZGVyZXJFdmVudHMub25GcmFtZVJlc29sdXRpb25DaGFuZ2VkKGZyYW1lLndpZHRoLCBm
cmFtZS5oZWlnaHQsIGZyYW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICAgICAgfQotICAgICAgICBy
b3RhdGVkRnJhbWVXaWR0aCA9IGZyYW1lLnJvdGF0ZWRXaWR0aCgpOwotICAgICAgICByb3RhdGVk
RnJhbWVIZWlnaHQgPSBmcmFtZS5yb3RhdGVkSGVpZ2h0KCk7Ci0gICAgICAgIGZyYW1lUm90YXRp
b24gPSBmcmFtZS5yb3RhdGlvbkRlZ3JlZTsKLSAgICAgICAgcG9zdChuZXcgUnVubmFibGUoKSB7
Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICAgICAgcmVxdWVzdExheW91dCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ0QoU3RyaW5nIHN0cmluZykgewot
ICAgIExvZ2dpbmcuZChUQUcsIHJlc291cmNlTmFtZSArIHN0cmluZyk7Ci0gIH0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvVmlkZW9DYXB0dXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvVmlkZW9DYXB0dXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDExMSAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0v
LyBCYXNlIGludGVyZmFjZSBmb3IgYWxsIFZpZGVvQ2FwdHVyZXJzIHRvIGltcGxlbWVudC4KLXB1
YmxpYyBpbnRlcmZhY2UgVmlkZW9DYXB0dXJlciB7Ci0gIC8vIEludGVyZmFjZSB1c2VkIGZvciBw
cm92aWRpbmcgY2FsbGJhY2tzIHRvIGFuIG9ic2VydmVyLgotICBwdWJsaWMgaW50ZXJmYWNlIENh
cHR1cmVyT2JzZXJ2ZXIgewotICAgIC8vIE5vdGlmeSBpZiB0aGUgY2FtZXJhIGhhdmUgYmVlbiBz
dGFydGVkIHN1Y2Nlc3NmdWxseSBvciBub3QuCi0gICAgLy8gQ2FsbGVkIG9uIGEgSmF2YSB0aHJl
YWQgb3duZWQgYnkgVmlkZW9DYXB0dXJlci4KLSAgICB2b2lkIG9uQ2FwdHVyZXJTdGFydGVkKGJv
b2xlYW4gc3VjY2Vzcyk7Ci0gICAgdm9pZCBvbkNhcHR1cmVyU3RvcHBlZCgpOwotCi0gICAgLy8g
RGVsaXZlcnMgYSBjYXB0dXJlZCBmcmFtZS4gQ2FsbGVkIG9uIGEgSmF2YSB0aHJlYWQgb3duZWQg
YnkgVmlkZW9DYXB0dXJlci4KLSAgICB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0g
ICAgICAgIGJ5dGVbXSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwg
bG9uZyB0aW1lU3RhbXApOwotCi0gICAgLy8gRGVsaXZlcnMgYSBjYXB0dXJlZCBmcmFtZSBpbiBh
IHRleHR1cmUgd2l0aCBpZCB8b2VzVGV4dHVyZUlkfC4gQ2FsbGVkIG9uIGEgSmF2YSB0aHJlYWQK
LSAgICAvLyBvd25lZCBieSBWaWRlb0NhcHR1cmVyLgotICAgIHZvaWQgb25UZXh0dXJlRnJhbWVD
YXB0dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10g
dHJhbnNmb3JtTWF0cml4LAotICAgICAgICBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKTsK
LSAgfQotCi0gIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIENhcHR1cmVyT2JzZXJ2ZXIgdGhhdCBm
b3J3YXJkcyBhbGwgY2FsbHMgZnJvbQotICAvLyBKYXZhIHRvIHRoZSBDIGxheWVyLgotICBzdGF0
aWMgY2xhc3MgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VPYnNlcnZlciBpbXBsZW1lbnRzIENhcHR1
cmVyT2JzZXJ2ZXIgewotICAgIC8vIFBvaW50ZXIgdG8gVmlkZW9UcmFja1NvdXJjZVByb3h5IHBy
b3h5aW5nIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBu
YXRpdmVTb3VyY2U7Ci0KLSAgICBwdWJsaWMgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2VPYnNlcnZl
cihsb25nIG5hdGl2ZVNvdXJjZSkgewotICAgICAgdGhpcy5uYXRpdmVTb3VyY2UgPSBuYXRpdmVT
b3VyY2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJl
clN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKSB7Ci0gICAgICBuYXRpdmVDYXB0dXJlclN0YXJ0ZWQo
bmF0aXZlU291cmNlLCBzdWNjZXNzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkNhcHR1cmVyU3RvcHBlZCgpIHsKLSAgICAgIG5hdGl2ZUNhcHR1cmVyU3RvcHBl
ZChuYXRpdmVTb3VyY2UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIGJ5dGVbXSBkYXRhLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lU3RhbXApIHsKLSAgICAgIG5h
dGl2ZU9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgICAgbmF0aXZlU291cmNlLCBk
YXRhLCBkYXRhLmxlbmd0aCwgd2lkdGgsIGhlaWdodCwgcm90YXRpb24sIHRpbWVTdGFtcCk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVDYXB0
dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQsCi0gICAgICAgIGZs
b2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKSB7Ci0g
ICAgICBuYXRpdmVPblRleHR1cmVGcmFtZUNhcHR1cmVkKAotICAgICAgICAgIG5hdGl2ZVNvdXJj
ZSwgd2lkdGgsIGhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIHJvdGF0aW9u
LCB0aW1lc3RhbXApOwotICAgIH0KLQotICAgIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2Fw
dHVyZXJTdGFydGVkKGxvbmcgbmF0aXZlU291cmNlLCBib29sZWFuIHN1Y2Nlc3MpOwotICAgIHBy
aXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2FwdHVyZXJTdG9wcGVkKGxvbmcgbmF0aXZlU291cmNl
KTsKLSAgICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZU9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVy
ZWQobG9uZyBuYXRpdmVTb3VyY2UsIGJ5dGVbXSBkYXRhLCBpbnQgbGVuZ3RoLAotICAgICAgICBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lU3RhbXApOwotICAg
IHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlT25UZXh0dXJlRnJhbWVDYXB0dXJlZChsb25nIG5h
dGl2ZVNvdXJjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAgICBpbnQgb2VzVGV4dHVy
ZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFt
cCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxp
emUgdGhlIGNhbWVyYSB0aHJlYWQsIHRoZSBhbmRyb2lkIGFwcGxpY2F0aW9uIGNvbnRleHQsIGFu
ZCB0aGUKLSAgICogY2FwdHVyZSBvYnNlcnZlci4gSXQgd2lsbCBiZSBjYWxsZWQgb25seSBvbmNl
IGFuZCBiZWZvcmUgYW55IHN0YXJ0Q2FwdHVyZSgpIHJlcXVlc3QuIFRoZQotICAgKiBjYW1lcmEg
dGhyZWFkIGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQgdW50aWwgZGlzcG9zZSgpIGlzIGNhbGxl
ZC4gSWYgdGhlIFZpZGVvQ2FwdHVyZXIgd2FudHMKLSAgICogdG8gZGVsaXZlciB0ZXh0dXJlIGZy
YW1lcywgaXQgc2hvdWxkIGRvIHRoaXMgYnkgcmVuZGVyaW5nIG9uIHRoZSBTdXJmYWNlVGV4dHVy
ZSBpbgotICAgKiB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8LCByZWdpc3RlciBpdHNlbGYgYXMgYSBs
aXN0ZW5lciwgYW5kIGZvcndhcmQgdGhlIHRleHR1cmUgZnJhbWVzIHRvCi0gICAqIENhcHR1cmVy
T2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgpLgotICAgKi8KLSAgdm9pZCBpbml0aWFs
aXplKFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDb250ZXh0IGFw
cGxpY2F0aW9uQ29udGV4dCwKLSAgICAgIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZl
cik7Ci0KLSAgLyoqCi0gICAqIFN0YXJ0IGNhcHR1cmluZyBmcmFtZXMgaW4gYSBmb3JtYXQgdGhh
dCBpcyBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB8d2lkdGh8IHggfGhlaWdodHwgYW5kCi0gICAq
IHxmcmFtZXJhdGV8LgotICAgKi8KLSAgdm9pZCBzdGFydENhcHR1cmUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBpbnQgZnJhbWVyYXRlKTsKLQotICAvKioKLSAgICogU3RvcCBjYXB0dXJpbmcuIFRo
aXMgZnVuY3Rpb24gc2hvdWxkIGJsb2NrIHVudGlsIGNhcHR1cmUgaXMgYWN0dWFsbHkgc3RvcHBl
ZC4KLSAgICovCi0gIHZvaWQgc3RvcENhcHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b247Ci0KLSAgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IGZyYW1lcmF0ZSk7Ci0KLSAgLyoqCi0gICAqIFBlcmZvcm0gYW55IGZpbmFsIGNsZWFudXAg
aGVyZS4gTm8gbW9yZSBjYXB0dXJpbmcgd2lsbCBiZSBkb25lIGFmdGVyIHRoaXMgY2FsbC4KLSAg
ICovCi0gIHZvaWQgZGlzcG9zZSgpOwotCi0gIC8qKgotICAgKiBAcmV0dXJuIHRydWUgaWYtYW5k
LW9ubHktaWYgdGhpcyBpcyBhIHNjcmVlbiBjYXB0dXJlci4KLSAgICovCi0gIGJvb2xlYW4gaXNT
Y3JlZW5jYXN0KCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXJBbmRy
b2lkLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyQW5k
cm9pZC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvQ2Fw
dHVyZXJBbmRyb2lkLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NTAgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250
ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQu
b3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5k
cm9pZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWlt
cG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1w
b3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci1pbXBvcnQgamF2YS51
dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY0Jv
b2xlYW47Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVy
ZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLk1ldHJpY3MuSGlzdG9ncmFtOwotCi0vLyBBbmRy
b2lkIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIFZpZGVvQ2FwdHVyZXIuCi0vLyBBbiBpbnN0
YW5jZSBvZiB0aGlzIGNsYXNzIGNhbiBiZSBjcmVhdGVkIGJ5IGFuIGFwcGxpY2F0aW9uIHVzaW5n
Ci0vLyBWaWRlb0NhcHR1cmVyQW5kcm9pZC5jcmVhdGUoKTsKLS8vIFRoaXMgY2xhc3MgZXh0ZW5k
cyBWaWRlb0NhcHR1cmVyIHdpdGggYSBtZXRob2QgdG8gZWFzaWx5IHN3aXRjaCBiZXR3ZWVuIHRo
ZQotLy8gZnJvbnQgYW5kIGJhY2sgY2FtZXJhLiBJdCBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgZm9y
IGVudW1lcmF0aW5nIHZhbGlkIGRldmljZQotLy8gbmFtZXMuCi0vLwotLy8gVGhyZWFkaW5nIG5v
dGVzOiB0aGlzIGNsYXNzIGlzIGNhbGxlZCBmcm9tIEMrKyBjb2RlLCBBbmRyb2lkIENhbWVyYSBj
YWxsYmFja3MsIGFuZCBwb3NzaWJseQotLy8gYXJiaXRyYXJ5IEphdmEgdGhyZWFkcy4gQWxsIHB1
YmxpYyBlbnRyeSBwb2ludHMgYXJlIHRocmVhZCBzYWZlLCBhbmQgZGVsZWdhdGUgdGhlIHdvcmsg
dG8gdGhlCi0vLyBjYW1lcmEgdGhyZWFkLiBUaGUgaW50ZXJuYWwgKk9uQ2FtZXJhVGhyZWFkKCkg
bWV0aG9kcyBtdXN0IGNoZWNrIHxjYW1lcmF8IGZvciBudWxsIHRvIGNoZWNrIGlmCi0vLyB0aGUg
Y2FtZXJhIGhhcyBiZWVuIHN0b3BwZWQuCi0vLwotLy8gVGhpcyBjbGFzcyBpcyBkZXByZWNhdGVk
IGFuZCB3aWxsIG9ubHkgYmUgdXNlZCBpZiB5b3UgbWFudWFsbHkgY3JlYXRlIGl0LiBQbGVhc2Ug
dXNlCi0vLyBDYW1lcmExQ2FwdHVyZXIgaW5zdGVhZC4KLUBEZXByZWNhdGVkCi1AU3VwcHJlc3NX
YXJuaW5ncygiZGVwcmVjYXRpb24iKQotcHVibGljIGNsYXNzIFZpZGVvQ2FwdHVyZXJBbmRyb2lk
Ci0gICAgaW1wbGVtZW50cyBDYW1lcmFWaWRlb0NhcHR1cmVyLCBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5QcmV2aWV3Q2FsbGJhY2ssCi0gICAgICAgICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBl
ci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIFRBRyA9ICJWaWRlb0NhcHR1cmVyQW5kcm9pZCI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBDQU1FUkFfU1RPUF9USU1FT1VUX01TID0gNzAwMDsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgSGlzdG9ncmFtIHZpZGVvQ2FwdHVyZXJBbmRyb2lkU3RhcnRUaW1lTXNIaXN0b2dy
YW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFuZHJvaWQuVmlkZW9D
YXB0dXJlckFuZHJvaWQuU3RhcnRUaW1lTXMiLCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBIaXN0b2dyYW0gdmlkZW9DYXB0dXJlckFuZHJvaWRTdG9wVGltZU1zSGlzdG9n
cmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5BbmRyb2lkLlZpZGVv
Q2FwdHVyZXJBbmRyb2lkLlN0b3BUaW1lTXMiLCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBIaXN0b2dyYW0gdmlkZW9DYXB0dXJlckFuZHJvaWRSZXNvbHV0aW9uSGlzdG9n
cmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVFbnVtZXJhdGlvbigiV2ViUlRDLkFuZHJvaWQu
VmlkZW9DYXB0dXJlckFuZHJvaWQuUmVzb2x1dGlvbiIsCi0gICAgICAgICAgQ2FtZXJhRW51bWVy
YXRpb25BbmRyb2lkLkNPTU1PTl9SRVNPTFVUSU9OUy5zaXplKCkpOwotCi0gIHByaXZhdGUgYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhOyAvLyBPbmx5IG5vbi1udWxsIHdoaWxlIGNhcHR1
cmluZy4KLSAgcHJpdmF0ZSBmaW5hbCBBdG9taWNCb29sZWFuIGlzQ2FtZXJhUnVubmluZyA9IG5l
dyBBdG9taWNCb29sZWFuKCk7Ci0gIC8vIFVzZSBtYXliZVBvc3RPbkNhbWVyYVRocmVhZCgpIGlu
c3RlYWQgb2YgcG9zdGluZyBkaXJlY3RseSB0byB0aGUgaGFuZGxlciAtIHRoaXMgd2F5IGFsbAot
ICAvLyBjYWxsYmFja3Mgd2l0aCBhIHNwZWNpZmVkIHRva2VuIGNhbiBiZSByZW1vdmVkIGF0IG9u
Y2UuCi0gIHByaXZhdGUgdm9sYXRpbGUgSGFuZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVyOwotICBw
cml2YXRlIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICAvLyBTeW5jaHJvbml6YXRpb24g
bG9jayBmb3IgfGlkfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgY2FtZXJhSWRMb2NrID0gbmV3
IE9iamVjdCgpOwotICBwcml2YXRlIGludCBpZDsKLSAgcHJpdmF0ZSBhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYS5DYW1lcmFJbmZvIGluZm87Ci0gIHByaXZhdGUgQ2FtZXJhU3RhdGlzdGljcyBjYW1l
cmFTdGF0aXN0aWNzOwotICAvLyBSZW1lbWJlciB0aGUgcmVxdWVzdGVkIGZvcm1hdCBpbiBjYXNl
IHdlIHdhbnQgdG8gc3dpdGNoIGNhbWVyYXMuCi0gIHByaXZhdGUgaW50IHJlcXVlc3RlZFdpZHRo
OwotICBwcml2YXRlIGludCByZXF1ZXN0ZWRIZWlnaHQ7Ci0gIHByaXZhdGUgaW50IHJlcXVlc3Rl
ZEZyYW1lcmF0ZTsKLSAgLy8gVGhlIGNhcHR1cmUgZm9ybWF0IHdpbGwgYmUgdGhlIGNsb3Nlc3Qg
c3VwcG9ydGVkIGZvcm1hdCB0byB0aGUgcmVxdWVzdGVkIGZvcm1hdC4KLSAgcHJpdmF0ZSBDYXB0
dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQ7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IHBlbmRpbmdD
YW1lcmFTd2l0Y2hMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIHZvbGF0aWxlIGJvb2xl
YW4gcGVuZGluZ0NhbWVyYVN3aXRjaDsKLSAgcHJpdmF0ZSBDYXB0dXJlck9ic2VydmVyIGZyYW1l
T2JzZXJ2ZXIgPSBudWxsOwotICBwcml2YXRlIGZpbmFsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZl
bnRzSGFuZGxlcjsKLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0RnJhbWVSZXBvcnRlZDsKLSAgLy8g
QXJiaXRyYXJ5IHF1ZXVlIGRlcHRoLiAgSGlnaGVyIG51bWJlciBtZWFucyBtb3JlIG1lbW9yeSBh
bGxvY2F0ZWQgJiBoZWxkLAotICAvLyBsb3dlciBudW1iZXIgbWVhbnMgbW9yZSBzZW5zaXRpdml0
eSB0byBwcm9jZXNzaW5nIHRpbWUgaW4gdGhlIGNsaWVudCAoYW5kCi0gIC8vIHBvdGVudGlhbGx5
IHN0YWxsaW5nIHRoZSBjYXB0dXJlciBpZiBpdCBydW5zIG91dCBvZiBidWZmZXJzIHRvIHdyaXRl
IHRvKS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5VTUJFUl9PRl9DQVBUVVJFX0JVRkZF
UlMgPSAzOwotICBwcml2YXRlIGZpbmFsIFNldDxieXRlW10+IHF1ZXVlZEJ1ZmZlcnMgPSBuZXcg
SGFzaFNldDxieXRlW10+KCk7Ci0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBpc0NhcHR1cmluZ1Rv
VGV4dHVyZTsKLSAgcHJpdmF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlSGVscGVyOwot
ICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQgTUFYX09QRU5fQ0FNRVJBX0FUVEVNUFRTID0gMzsK
LSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IE9QRU5fQ0FNRVJBX0RFTEFZX01TID0gNTAwOwot
ICBwcml2YXRlIGludCBvcGVuQ2FtZXJhQXR0ZW1wdHM7Ci0KLSAgLy8gVXNlZCBmb3Igc3RhdGlz
dGljcy4KLSAgcHJpdmF0ZSBsb25nIHN0YXJ0U3RhcnRUaW1lTnM7IC8vIFRoZSB0aW1lIGluIG5h
bm9zZWNvbmRzIHdoZW4gc3RhcnRpbmcgdGhlIGNhbWVyYSBiZWdhbi4KLQotICAvLyBDYW1lcmEg
ZXJyb3IgY2FsbGJhY2suCi0gIHByaXZhdGUgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEu
RXJyb3JDYWxsYmFjayBjYW1lcmFFcnJvckNhbGxiYWNrID0KLSAgICAgIG5ldyBhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYS5FcnJvckNhbGxiYWNrKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgcHVibGljIHZvaWQgb25FcnJvcihpbnQgZXJyb3IsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
IGNhbWVyYSkgewotICAgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgICAgICAgaWYg
KGVycm9yID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNBTUVSQV9FUlJPUl9TRVJWRVJfRElF
RCkgewotICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBzZXJ2ZXIgZGllZCEiOwot
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAiQ2FtZXJhIGVy
cm9yOiAiICsgZXJyb3I7Ci0gICAgICAgICAgfQotICAgICAgICAgIExvZ2dpbmcuZShUQUcsIGVy
cm9yTWVzc2FnZSk7Ci0gICAgICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAg
ICAgICAgICAgaWYgKGVycm9yID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNBTUVSQV9FUlJP
Ul9FVklDVEVEKSB7Ci0gICAgICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFEaXNjb25u
ZWN0ZWQoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGV2ZW50c0hhbmRs
ZXIub25DYW1lcmFFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgICAgfQotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgfTsKLQotICBwdWJsaWMgc3RhdGljIFZpZGVvQ2FwdHVyZXJB
bmRyb2lkIGNyZWF0ZShTdHJpbmcgbmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5k
bGVyKSB7Ci0gICAgcmV0dXJuIFZpZGVvQ2FwdHVyZXJBbmRyb2lkLmNyZWF0ZShuYW1lLCBldmVu
dHNIYW5kbGVyLCBmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIC8vIFVz
ZSBjdG9yIGRpcmVjdGx5IGluc3RlYWQuCi0gIEBEZXByZWNhdGVkCi0gIHB1YmxpYyBzdGF0aWMg
VmlkZW9DYXB0dXJlckFuZHJvaWQgY3JlYXRlKAotICAgICAgU3RyaW5nIG5hbWUsIENhbWVyYUV2
ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlciwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0g
ICAgdHJ5IHsKLSAgICAgIHJldHVybiBuZXcgVmlkZW9DYXB0dXJlckFuZHJvaWQobmFtZSwgZXZl
bnRzSGFuZGxlciwgY2FwdHVyZVRvVGV4dHVyZSk7Ci0gICAgfSBjYXRjaCAoUnVudGltZUV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ291bGRuJ3QgY3JlYXRlIGNhbWVyYS4i
LCBlKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBy
aW50U3RhY2tUcmFjZSgpIHsKLSAgICBUaHJlYWQgY2FtZXJhVGhyZWFkID0gbnVsbDsKLSAgICBp
ZiAoY2FtZXJhVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmFUaHJlYWQgPSBj
YW1lcmFUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpOwotICAgIH0KLSAgICBp
ZiAoY2FtZXJhVGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNrVHJhY2VFbGVtZW50W10gY2Ft
ZXJhU3RhY2tUcmFjZXMgPSBjYW1lcmFUaHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAgICAgaWYg
KGNhbWVyYVN0YWNrVHJhY2VzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywg
IlZpZGVvQ2FwdHVyZXJBbmRyb2lkIHN0YWNrcyB0cmFjZToiKTsKLSAgICAgICAgZm9yIChTdGFj
a1RyYWNlRWxlbWVudCBzdGFja1RyYWNlIDogY2FtZXJhU3RhY2tUcmFjZXMpIHsKLSAgICAgICAg
ICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gU3dpdGNoIGNhbWVyYSB0byB0aGUgbmV4dCB2YWxpZCBj
YW1lcmEgaWQuIFRoaXMgY2FuIG9ubHkgYmUgY2FsbGVkIHdoaWxlCi0gIC8vIHRoZSBjYW1lcmEg
aXMgcnVubmluZy4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3aXRjaENhbWVyYShmaW5h
bCBDYW1lcmFTd2l0Y2hIYW5kbGVyIHN3aXRjaEV2ZW50c0hhbmRsZXIpIHsKLSAgICBpZiAoYW5k
cm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCkgPCAyKSB7Ci0gICAgICBp
ZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIHN3aXRjaEV2ZW50c0hh
bmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiTm8gY2FtZXJhIHRvIHN3aXRjaCB0by4iKTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChwZW5kaW5nQ2Ft
ZXJhU3dpdGNoTG9jaykgewotICAgICAgaWYgKHBlbmRpbmdDYW1lcmFTd2l0Y2gpIHsKLSAgICAg
ICAgLy8gRG8gbm90IGhhbmRsZSBtdWx0aXBsZSBjYW1lcmEgc3dpdGNoIHJlcXVlc3QgdG8gYXZv
aWQgYmxvY2tpbmcKLSAgICAgICAgLy8gY2FtZXJhIHRocmVhZCBieSBoYW5kbGluZyB0b28gbWFu
eSBzd2l0Y2ggcmVxdWVzdCBmcm9tIGEgcXVldWUuCi0gICAgICAgIExvZ2dpbmcudyhUQUcsICJJ
Z25vcmluZyBjYW1lcmEgc3dpdGNoIHJlcXVlc3QuIik7Ci0gICAgICAgIGlmIChzd2l0Y2hFdmVu
dHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2Ft
ZXJhU3dpdGNoRXJyb3IoIlBlbmRpbmcgY2FtZXJhIHN3aXRjaCBhbHJlYWR5IGluIHByb2dyZXNz
LiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIHBlbmRpbmdD
YW1lcmFTd2l0Y2ggPSB0cnVlOwotICAgIH0KLSAgICBmaW5hbCBib29sZWFuIGRpZFBvc3QgPSBt
YXliZVBvc3RPbkNhbWVyYVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc3dpdGNoQ2FtZXJhT25DYW1lcmFU
aHJlYWQoKTsKLSAgICAgICAgc3luY2hyb25pemVkIChwZW5kaW5nQ2FtZXJhU3dpdGNoTG9jaykg
ewotICAgICAgICAgIHBlbmRpbmdDYW1lcmFTd2l0Y2ggPSBmYWxzZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgc3dpdGNo
RXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaERvbmUoCi0gICAgICAgICAgICAgIGluZm8uZmFj
aW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19G
Uk9OVCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgICBpZiAoIWRpZFBvc3QgJiYg
c3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBzd2l0Y2hFdmVudHNIYW5kbGVy
Lm9uQ2FtZXJhU3dpdGNoRXJyb3IoIkNhbWVyYSBpcyBzdG9wcGVkLiIpOwotICAgIH0KLSAgfQot
Ci0gIC8vIFJlY29uZmlndXJlIHRoZSBjYW1lcmEgdG8gY2FwdHVyZSBpbiBhIG5ldyBmb3JtYXQu
IFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoaWxlIHRoZSBjYW1lcmEKLSAgLy8gaXMgcnVu
bmluZy4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNoYW5nZUNhcHR1cmVGb3JtYXQoZmlu
YWwgaW50IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0g
ICAgbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHN0YXJ0UHJldmlld09uQ2Ft
ZXJhVGhyZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0g
IH0KLQotICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIGN1cnJlbnQgY2FtZXJh
IGlkIHN5bmNocm9ub3VzbHkuIE5vdGUgdGhhdCB0aGUgY2FtZXJhIGlkIG1pZ2h0Ci0gIC8vIGNo
YW5nZSBhdCBhbnkgcG9pbnQgYnkgc3dpdGNoQ2FtZXJhKCkgY2FsbHMuCi0gIHByaXZhdGUgaW50
IGdldEN1cnJlbnRDYW1lcmFJZCgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUlkTG9jaykg
ewotICAgICAgcmV0dXJuIGlkOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGlzIFZpZGVvQ2FwdHVyZXIgaXMgc2V0dXAgdG8gY2FwdHVyZSB2aWRlbyBmcmFtZXMgdG8gYSBT
dXJmYWNlVGV4dHVyZS4KLSAgcHVibGljIGJvb2xlYW4gaXNDYXB0dXJpbmdUb1RleHR1cmUoKSB7
Ci0gICAgcmV0dXJuIGlzQ2FwdHVyaW5nVG9UZXh0dXJlOwotICB9Ci0KLSAgcHVibGljIFZpZGVv
Q2FwdHVyZXJBbmRyb2lkKAotICAgICAgU3RyaW5nIGNhbWVyYU5hbWUsIENhbWVyYUV2ZW50c0hh
bmRsZXIgZXZlbnRzSGFuZGxlciwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgaWYg
KGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLmdldE51bWJlck9mQ2FtZXJhcygpID09IDApIHsKLSAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyBjYW1lcmFzIGF2YWlsYWJsZSIpOwot
ICAgIH0KLSAgICBpZiAoY2FtZXJhTmFtZSA9PSBudWxsIHx8IGNhbWVyYU5hbWUuZXF1YWxzKCIi
KSkgewotICAgICAgdGhpcy5pZCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHRoaXMuaWQgPSBD
YW1lcmExRW51bWVyYXRvci5nZXRDYW1lcmFJbmRleChjYW1lcmFOYW1lKTsKLSAgICB9Ci0gICAg
dGhpcy5ldmVudHNIYW5kbGVyID0gZXZlbnRzSGFuZGxlcjsKLSAgICBpc0NhcHR1cmluZ1RvVGV4
dHVyZSA9IGNhcHR1cmVUb1RleHR1cmU7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvQ2FwdHVy
ZXJBbmRyb2lkIGlzQ2FwdHVyaW5nVG9UZXh0dXJlIDogIiArIGlzQ2FwdHVyaW5nVG9UZXh0dXJl
KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGVja0lzT25DYW1lcmFUaHJlYWQoKSB7Ci0gICAg
aWYgKGNhbWVyYVRocmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
IkNhbWVyYSBpcyBub3QgaW5pdGlhbGl6ZWQgLSBjYW4ndCBjaGVjayB0aHJlYWQuIik7Ci0gICAg
fSBlbHNlIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRocmVhZEhhbmRsZXIu
Z2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVF
eGNlcHRpb24oIldyb25nIHRocmVhZCIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVh
biBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChSdW5uYWJsZSBydW5uYWJsZSkgewotICAgIHJldHVy
biBtYXliZVBvc3REZWxheWVkT25DYW1lcmFUaHJlYWQoMCAvKiBkZWxheU1zICovLCBydW5uYWJs
ZSk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gbWF5YmVQb3N0RGVsYXllZE9uQ2FtZXJhVGhy
ZWFkKGludCBkZWxheU1zLCBSdW5uYWJsZSBydW5uYWJsZSkgewotICAgIHJldHVybiBjYW1lcmFU
aHJlYWRIYW5kbGVyICE9IG51bGwgJiYgaXNDYW1lcmFSdW5uaW5nLmdldCgpCi0gICAgICAgICYm
IGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdEF0VGltZSgKLSAgICAgICAgICAgICAgIHJ1bm5hYmxl
LCB0aGlzIC8qIHRva2VuICovLCBTeXN0ZW1DbG9jay51cHRpbWVNaWxsaXMoKSArIGRlbGF5TXMp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgImRpc3Bvc2UiKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0luaXRp
YWxpemVkKCkgewotICAgIHJldHVybiBhcHBsaWNhdGlvbkNvbnRleHQgIT0gbnVsbCAmJiBmcmFt
ZU9ic2VydmVyICE9IG51bGw7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgaW5p
dGlhbGl6ZShTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgQ29udGV4
dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBDYXB0dXJlck9ic2VydmVyIGZyYW1lT2JzZXJ2
ZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdGlhbGl6ZSIpOwotICAgIGlmIChhcHBsaWNh
dGlvbkNvbnRleHQgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbigiYXBwbGljYXRpb25Db250ZXh0IG5vdCBzZXQuIik7Ci0gICAgfQotICAgIGlmIChm
cmFtZU9ic2VydmVyID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24oImZyYW1lT2JzZXJ2ZXIgbm90IHNldC4iKTsKLSAgICB9Ci0gICAgaWYgKGlzSW5p
dGlhbGl6ZWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQWxy
ZWFkeSBpbml0aWFsaXplZCIpOwotICAgIH0KLSAgICB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dCA9
IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgICB0aGlzLmZyYW1lT2JzZXJ2ZXIgPSBmcmFtZU9ic2Vy
dmVyOwotICAgIHRoaXMuc3VyZmFjZUhlbHBlciA9IHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAg
IHRoaXMuY2FtZXJhVGhyZWFkSGFuZGxlciA9Ci0gICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
ID09IG51bGwgPyBudWxsIDogc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpOwotICB9
Ci0KLSAgLy8gTm90ZSB0aGF0IHRoaXMgYWN0dWFsbHkgb3BlbnMgdGhlIGNhbWVyYSwgYW5kIENh
bWVyYSBjYWxsYmFja3MgcnVuIG9uIHRoZQotICAvLyB0aHJlYWQgdGhhdCBjYWxscyBvcGVuKCks
IHNvIHRoaXMgaXMgZG9uZSBvbiB0aGUgQ2FtZXJhVGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgc3RhcnRDYXB0dXJlKGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwg
ZmluYWwgaW50IGZyYW1lcmF0ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydENhcHR1cmUg
cmVxdWVzdGVkOiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBmcmFtZXJhdGUpOwot
ICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uKCJzdGFydENhcHR1cmUgY2FsbGVkIGluIHVuaW5pdGlhbGl6ZWQgc3RhdGUiKTsK
LSAgICB9Ci0gICAgaWYgKHN1cmZhY2VIZWxwZXIgPT0gbnVsbCkgewotICAgICAgZnJhbWVPYnNl
cnZlci5vbkNhcHR1cmVyU3RhcnRlZChmYWxzZSAvKiBzdWNjZXNzICovKTsKLSAgICAgIGlmIChl
dmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVy
cm9yKCJObyBTdXJmYWNlVGV4dHVyZSBjcmVhdGVkLiIpOwotICAgICAgfQotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoaXNDYW1lcmFSdW5uaW5nLmdldEFuZFNldCh0cnVlKSkgewotICAg
ICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBoYXMgYWxyZWFkeSBiZWVuIHN0YXJ0ZWQuIik7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGZpbmFsIGJvb2xlYW4gZGlkUG9zdCA9IG1heWJlUG9z
dE9uQ2FtZXJhVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBvcGVuQ2FtZXJhQXR0ZW1wdHMgPSAwOwotICAg
ICAgICBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUp
OwotICAgICAgfQotICAgIH0pOwotICAgIGlmICghZGlkUG9zdCkgewotICAgICAgZnJhbWVPYnNl
cnZlci5vbkNhcHR1cmVyU3RhcnRlZChmYWxzZSk7Ci0gICAgICBpZiAoZXZlbnRzSGFuZGxlciAh
PSBudWxsKSB7Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFFcnJvcigiQ291bGQgbm90
IHBvc3QgdGFzayB0byBjYW1lcmEgdGhyZWFkLiIpOwotICAgICAgfQotICAgICAgaXNDYW1lcmFS
dW5uaW5nLnNldChmYWxzZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0Q2Fw
dHVyZU9uQ2FtZXJhVGhyZWFkKGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwgZmlu
YWwgaW50IGZyYW1lcmF0ZSkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIHN0
YXJ0U3RhcnRUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICBpZiAoIWlzQ2FtZXJhUnVu
bmluZy5nZXQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInN0YXJ0Q2FwdHVyZU9uQ2FtZXJh
VGhyZWFkOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoY2FtZXJhICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJzdGFydENhcHR1cmVP
bkNhbWVyYVRocmVhZDogQ2FtZXJhIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZC4iKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy5maXJzdEZyYW1lUmVwb3J0ZWQgPSBmYWxzZTsKLQot
ICAgIHRyeSB7Ci0gICAgICB0cnkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUlkTG9j
aykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJPcGVuaW5nIGNhbWVyYSAiICsgaWQpOwot
ICAgICAgICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIGV2ZW50
c0hhbmRsZXIub25DYW1lcmFPcGVuaW5nKENhbWVyYTFFbnVtZXJhdG9yLmdldERldmljZU5hbWUo
aWQpKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgY2FtZXJhID0gYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEub3BlbihpZCk7Ci0gICAgICAgICAgaW5mbyA9IG5ldyBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5DYW1lcmFJbmZvKCk7Ci0gICAgICAgICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0
Q2FtZXJhSW5mbyhpZCwgaW5mbyk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKFJ1bnRpbWVF
eGNlcHRpb24gZSkgewotICAgICAgICBvcGVuQ2FtZXJhQXR0ZW1wdHMrKzsKLSAgICAgICAgaWYg
KG9wZW5DYW1lcmFBdHRlbXB0cyA8IE1BWF9PUEVOX0NBTUVSQV9BVFRFTVBUUykgewotICAgICAg
ICAgIExvZ2dpbmcuZShUQUcsICJDYW1lcmEub3BlbiBmYWlsZWQsIHJldHJ5aW5nIiwgZSk7Ci0g
ICAgICAgICAgbWF5YmVQb3N0RGVsYXllZE9uQ2FtZXJhVGhyZWFkKE9QRU5fQ0FNRVJBX0RFTEFZ
X01TLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgc3RhcnRDYXB0dXJlT25DYW1lcmFU
aHJlYWQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICB9KTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgZTsKLSAg
ICAgIH0KLQotICAgICAgY2FtZXJhLnNldFByZXZpZXdUZXh0dXJlKHN1cmZhY2VIZWxwZXIuZ2V0
U3VyZmFjZVRleHR1cmUoKSk7Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEgb3JpZW50
YXRpb246ICIgKyBpbmZvLm9yaWVudGF0aW9uICsgIiAuRGV2aWNlIG9yaWVudGF0aW9uOiAiCi0g
ICAgICAgICAgICAgICsgZ2V0RGV2aWNlT3JpZW50YXRpb24oKSk7Ci0gICAgICBjYW1lcmEuc2V0
RXJyb3JDYWxsYmFjayhjYW1lcmFFcnJvckNhbGxiYWNrKTsKLSAgICAgIHN0YXJ0UHJldmlld09u
Q2FtZXJhVGhyZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgICBmcmFtZU9ic2Vy
dmVyLm9uQ2FwdHVyZXJTdGFydGVkKHRydWUpOwotICAgICAgaWYgKGlzQ2FwdHVyaW5nVG9UZXh0
dXJlKSB7Ci0gICAgICAgIHN1cmZhY2VIZWxwZXIuc3RhcnRMaXN0ZW5pbmcodGhpcyk7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIFN0YXJ0IGNhbWVyYSBvYnNlcnZlci4KLSAgICAgIGNhbWVyYVN0YXRp
c3RpY3MgPSBuZXcgQ2FtZXJhU3RhdGlzdGljcyhzdXJmYWNlSGVscGVyLCBldmVudHNIYW5kbGVy
KTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiB8IFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAg
ICAgTG9nZ2luZy5lKFRBRywgInN0YXJ0Q2FwdHVyZSBmYWlsZWQiLCBlKTsKLSAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgY2FtZXJhIGlzIHJlbGVhc2VkLgotICAgICAgc3RvcENhcHR1cmVPbkNhbWVy
YVRocmVhZCh0cnVlIC8qIHN0b3BIYW5kbGVyICovKTsKLSAgICAgIGZyYW1lT2JzZXJ2ZXIub25D
YXB0dXJlclN0YXJ0ZWQoZmFsc2UpOwotICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkg
ewotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoIkNhbWVyYSBjYW4gbm90IGJl
IHN0YXJ0ZWQuIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gKFJlKXN0YXJ0IHByZXZp
ZXcgd2l0aCB0aGUgY2xvc2VzdCBzdXBwb3J0ZWQgZm9ybWF0IHRvIHx3aWR0aHwgeCB8aGVpZ2h0
fCBAIHxmcmFtZXJhdGV8LgotICBwcml2YXRlIHZvaWQgc3RhcnRQcmV2aWV3T25DYW1lcmFUaHJl
YWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgY2hlY2tJc09u
Q2FtZXJhVGhyZWFkKCk7Ci0gICAgaWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkgfHwgY2FtZXJh
ID09IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJzdGFydFByZXZpZXdPbkNhbWVyYVRo
cmVhZDogQ2FtZXJhIGlzIHN0b3BwZWQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9n
Z2luZy5kKAotICAgICAgICBUQUcsICJzdGFydFByZXZpZXdPbkNhbWVyYVRocmVhZCByZXF1ZXN0
ZWQ6ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZSk7Ci0KLSAgICBy
ZXF1ZXN0ZWRXaWR0aCA9IHdpZHRoOwotICAgIHJlcXVlc3RlZEhlaWdodCA9IGhlaWdodDsKLSAg
ICByZXF1ZXN0ZWRGcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0KLSAgICAvLyBGaW5kIGNsb3Nlc3Qg
c3VwcG9ydGVkIGZvcm1hdCBmb3IgfHdpZHRofCB4IHxoZWlnaHR8IEAgfGZyYW1lcmF0ZXwuCi0g
ICAgZmluYWwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0g
Y2FtZXJhLmdldFBhcmFtZXRlcnMoKTsKLSAgICBmaW5hbCBMaXN0PENhcHR1cmVGb3JtYXQuRnJh
bWVyYXRlUmFuZ2U+IHN1cHBvcnRlZEZyYW1lcmF0ZXMgPQotICAgICAgICBDYW1lcmExRW51bWVy
YXRvci5jb252ZXJ0RnJhbWVyYXRlcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZFByZXZpZXdGcHNS
YW5nZSgpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIGZwcyByYW5nZXM6ICIgKyBz
dXBwb3J0ZWRGcmFtZXJhdGVzKTsKLQotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQuRnJhbWVyYXRl
UmFuZ2UgZnBzUmFuZ2UgPQotICAgICAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xv
c2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKHN1cHBvcnRlZEZyYW1lcmF0ZXMsIGZyYW1lcmF0
ZSk7Ci0KLSAgICBmaW5hbCBMaXN0PFNpemU+IHN1cHBvcnRlZFByZXZpZXdTaXplcyA9Ci0gICAg
ICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXplcyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRl
ZFByZXZpZXdTaXplcygpKTsKLSAgICBmaW5hbCBTaXplIHByZXZpZXdTaXplID0KLSAgICAgICAg
Q2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRTaXplKHN1cHBvcnRl
ZFByZXZpZXdTaXplcywgd2lkdGgsIGhlaWdodCk7Ci0gICAgQ2FtZXJhRW51bWVyYXRpb25BbmRy
b2lkLnJlcG9ydENhbWVyYVJlc29sdXRpb24oCi0gICAgICAgIHZpZGVvQ2FwdHVyZXJBbmRyb2lk
UmVzb2x1dGlvbkhpc3RvZ3JhbSwgcHJldmlld1NpemUpOwotICAgIExvZ2dpbmcuZChUQUcsICJB
dmFpbGFibGUgcHJldmlldyBzaXplczogIiArIHN1cHBvcnRlZFByZXZpZXdTaXplcyk7Ci0KLSAg
ICBmaW5hbCBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQgPQotICAgICAgICBuZXcgQ2FwdHVy
ZUZvcm1hdChwcmV2aWV3U2l6ZS53aWR0aCwgcHJldmlld1NpemUuaGVpZ2h0LCBmcHNSYW5nZSk7
Ci0KLSAgICAvLyBDaGVjayBpZiB3ZSBhcmUgYWxyZWFkeSB1c2luZyB0aGlzIGNhcHR1cmUgZm9y
bWF0LCB0aGVuIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcuCi0gICAgaWYgKGNhcHR1cmVG
b3JtYXQuZXF1YWxzKHRoaXMuY2FwdHVyZUZvcm1hdCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICAvLyBVcGRhdGUgY2FtZXJhIHBhcmFtZXRlcnMuCi0gICAgTG9nZ2luZy5kKFRBRywg
ImlzVmlkZW9TdGFiaWxpemF0aW9uU3VwcG9ydGVkOiAiICsgcGFyYW1ldGVycy5pc1ZpZGVvU3Rh
YmlsaXphdGlvblN1cHBvcnRlZCgpKTsKLSAgICBpZiAocGFyYW1ldGVycy5pc1ZpZGVvU3RhYmls
aXphdGlvblN1cHBvcnRlZCgpKSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldFZpZGVvU3RhYmlsaXph
dGlvbih0cnVlKTsKLSAgICB9Ci0gICAgLy8gTm90ZTogc2V0UmVjb3JkaW5nSGludCh0cnVlKSBh
Y3R1YWxseSBkZWNyZWFzZSBmcmFtZSByYXRlIG9uIE41LgotICAgIC8vIHBhcmFtZXRlcnMuc2V0
UmVjb3JkaW5nSGludCh0cnVlKTsKLSAgICBpZiAoY2FwdHVyZUZvcm1hdC5mcmFtZXJhdGUubWF4
ID4gMCkgewotICAgICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3RnBzUmFuZ2UoY2FwdHVyZUZvcm1h
dC5mcmFtZXJhdGUubWluLCBjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXgpOwotICAgIH0KLSAg
ICBwYXJhbWV0ZXJzLnNldFByZXZpZXdTaXplKHByZXZpZXdTaXplLndpZHRoLCBwcmV2aWV3U2l6
ZS5oZWlnaHQpOwotCi0gICAgaWYgKCFpc0NhcHR1cmluZ1RvVGV4dHVyZSkgewotICAgICAgcGFy
YW1ldGVycy5zZXRQcmV2aWV3Rm9ybWF0KGNhcHR1cmVGb3JtYXQuaW1hZ2VGb3JtYXQpOwotICAg
IH0KLSAgICAvLyBQaWN0dXJlIHNpemUgaXMgZm9yIHRha2luZyBwaWN0dXJlcyBhbmQgbm90IGZv
ciBwcmV2aWV3L3ZpZGVvLCBidXQgd2UgbmVlZCB0byBzZXQgaXQgYW55d2F5Ci0gICAgLy8gYXMg
YSB3b3JrYXJvdW5kIGZvciBhbiBhc3BlY3QgcmF0aW8gcHJvYmxlbSBvbiBOZXh1cyA3LgotICAg
IGZpbmFsIFNpemUgcGljdHVyZVNpemUgPSBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xv
c2VzdFN1cHBvcnRlZFNpemUoCi0gICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRTaXpl
cyhwYXJhbWV0ZXJzLmdldFN1cHBvcnRlZFBpY3R1cmVTaXplcygpKSwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgcGFyYW1ldGVycy5zZXRQaWN0dXJlU2l6ZShwaWN0dXJlU2l6ZS53aWR0aCwgcGljdHVy
ZVNpemUuaGVpZ2h0KTsKLQotICAgIC8vIFRlbXBvcmFyaWx5IHN0b3AgcHJldmlldyBpZiBpdCdz
IGFscmVhZHkgcnVubmluZy4KLSAgICBpZiAodGhpcy5jYXB0dXJlRm9ybWF0ICE9IG51bGwpIHsK
LSAgICAgIGNhbWVyYS5zdG9wUHJldmlldygpOwotICAgICAgLy8gQ2FsbGluZyB8c2V0UHJldmll
d0NhbGxiYWNrV2l0aEJ1ZmZlcnwgd2l0aCBudWxsIHNob3VsZCBjbGVhciB0aGUgaW50ZXJuYWwg
Y2FtZXJhIGJ1ZmZlcgotICAgICAgLy8gcXVldWUsIGJ1dCBzb21ldGltZXMgd2UgcmVjZWl2ZSBh
IGZyYW1lIHdpdGggdGhlIG9sZCByZXNvbHV0aW9uIGFmdGVyIHRoaXMgY2FsbCBhbnl3YXkuCi0g
ICAgICBjYW1lcmEuc2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcihudWxsKTsKLSAgICB9Ci0K
LSAgICBMaXN0PFN0cmluZz4gZm9jdXNNb2RlcyA9IHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkRm9j
dXNNb2RlcygpOwotICAgIGlmIChmb2N1c01vZGVzLmNvbnRhaW5zKGFuZHJvaWQuaGFyZHdhcmUu
Q2FtZXJhLlBhcmFtZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKSkgewotICAgICAg
TG9nZ2luZy5kKFRBRywgIkVuYWJsZSBjb250aW51b3VzIGF1dG8gZm9jdXMgbW9kZS4iKTsKLSAg
ICAgIHBhcmFtZXRlcnMuc2V0Rm9jdXNNb2RlKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlBhcmFt
ZXRlcnMuRk9DVVNfTU9ERV9DT05USU5VT1VTX1ZJREVPKTsKLSAgICB9Ci0KLSAgICAvLyAoUmUp
c3RhcnQgcHJldmlldy4KLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RhcnQgY2FwdHVyaW5nOiAiICsg
Y2FwdHVyZUZvcm1hdCk7Ci0gICAgdGhpcy5jYXB0dXJlRm9ybWF0ID0gY2FwdHVyZUZvcm1hdDsK
LQotICAgIGNhbWVyYS5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotICAgIC8vIENhbGN1bGF0
ZSBvcmllbnRhdGlvbiBtYW51YWxseSBhbmQgc2VuZCBpdCBhcyBDVk8gaW5zdGVhZC4KLSAgICBj
YW1lcmEuc2V0RGlzcGxheU9yaWVudGF0aW9uKDAgLyogZGVncmVlcyAqLyk7Ci0gICAgaWYgKCFp
c0NhcHR1cmluZ1RvVGV4dHVyZSkgewotICAgICAgcXVldWVkQnVmZmVycy5jbGVhcigpOwotICAg
ICAgZmluYWwgaW50IGZyYW1lU2l6ZSA9IGNhcHR1cmVGb3JtYXQuZnJhbWVTaXplKCk7Ci0gICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE5VTUJFUl9PRl9DQVBUVVJFX0JVRkZFUlM7ICsraSkgewot
ICAgICAgICBmaW5hbCBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJl
Y3QoZnJhbWVTaXplKTsKLSAgICAgICAgcXVldWVkQnVmZmVycy5hZGQoYnVmZmVyLmFycmF5KCkp
OwotICAgICAgICBjYW1lcmEuYWRkQ2FsbGJhY2tCdWZmZXIoYnVmZmVyLmFycmF5KCkpOwotICAg
ICAgfQotICAgICAgY2FtZXJhLnNldFByZXZpZXdDYWxsYmFja1dpdGhCdWZmZXIodGhpcyk7Ci0g
ICAgfQotICAgIGNhbWVyYS5zdGFydFByZXZpZXcoKTsKLSAgfQotCi0gIC8vIEJsb2NrcyB1bnRp
bCBjYW1lcmEgaXMga25vd24gdG8gYmUgc3RvcHBlZC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIHN0b3BDYXB0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAic3RvcENhcHR1cmUiKTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBiYXJy
aWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIGZpbmFsIGJvb2xlYW4gZGlkUG9zdCA9
IG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBzdG9wQ2FwdHVyZU9uQ2FtZXJh
VGhyZWFkKHRydWUgLyogc3RvcEhhbmRsZXIgKi8pOwotICAgICAgICBiYXJyaWVyLmNvdW50RG93
bigpOwotICAgICAgfQotICAgIH0pOwotICAgIGlmICghZGlkUG9zdCkgewotICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkNhbGxpbmcgc3RvcENhcHR1cmUoKSBmb3IgYWxyZWFkeSBzdG9wcGVkIGNhbWVy
YS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFiYXJyaWVyLmF3YWl0KENBTUVS
QV9TVE9QX1RJTUVPVVRfTVMsIFRpbWVVbml0Lk1JTExJU0VDT05EUykpIHsKLSAgICAgIExvZ2dp
bmcuZShUQUcsICJDYW1lcmEgc3RvcCB0aW1lb3V0Iik7Ci0gICAgICBwcmludFN0YWNrVHJhY2Uo
KTsKLSAgICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgZXZlbnRzSGFu
ZGxlci5vbkNhbWVyYUVycm9yKCJDYW1lcmEgc3RvcCB0aW1lb3V0Iik7Ci0gICAgICB9Ci0gICAg
fQotICAgIGZyYW1lT2JzZXJ2ZXIub25DYXB0dXJlclN0b3BwZWQoKTsKLSAgICBMb2dnaW5nLmQo
VEFHLCAic3RvcENhcHR1cmUgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0b3BDYXB0
dXJlT25DYW1lcmFUaHJlYWQoYm9vbGVhbiBzdG9wSGFuZGxlcikgewotICAgIGNoZWNrSXNPbkNh
bWVyYVRocmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wQ2FwdHVyZU9uQ2FtZXJhVGhy
ZWFkIik7Ci0gICAgZmluYWwgbG9uZyBzdG9wU3RhcnRUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7
Ci0gICAgLy8gTm90ZSB0aGF0IHRoZSBjYW1lcmEgbWlnaHQgc3RpbGwgbm90IGJlIHN0YXJ0ZWQg
aGVyZSBpZiBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZCBmYWlsZWQKLSAgICAvLyBhbmQgd2Ug
cG9zdGVkIGEgcmV0cnkuCi0KLSAgICAvLyBNYWtlIHN1cmUgb25UZXh0dXJlRnJhbWVBdmFpbGFi
bGUoKSBpcyBub3QgY2FsbGVkIGFueW1vcmUuCi0gICAgaWYgKHN1cmZhY2VIZWxwZXIgIT0gbnVs
bCkgewotICAgICAgc3VyZmFjZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgfQotICAgIGlm
IChzdG9wSGFuZGxlcikgewotICAgICAgLy8gQ2xlYXIgdGhlIGNhbWVyYVRocmVhZEhhbmRsZXIg
Zmlyc3QsIGluIGNhc2Ugc3RvcFByZXZpZXcgb3IKLSAgICAgIC8vIG90aGVyIGRyaXZlciBjb2Rl
IGRlYWRsb2Nrcy4gRGVhZGxvY2sgaW4KLSAgICAgIC8vIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
Ll9zdG9wUHJldmlldyhOYXRpdmUgTWV0aG9kKSBoYXMKLSAgICAgIC8vIGJlZW4gb2JzZXJ2ZWQg
b24gTmV4dXMgNSAoaGFtbWVyaGVhZCksIE9TIHZlcnNpb24gTE1ZNDhJLgotICAgICAgLy8gVGhl
IGNhbWVyYSBtaWdodCBwb3N0IGFub3RoZXIgb25lIG9yIHR3byBwcmV2aWV3IGZyYW1lcwotICAg
ICAgLy8gYmVmb3JlIHN0b3BwZWQsIHNvIHdlIGhhdmUgdG8gY2hlY2sgfGlzQ2FtZXJhUnVubmlu
Z3wuCi0gICAgICAvLyBSZW1vdmUgYWxsIHBlbmRpbmcgUnVubmFibGVzIHBvc3RlZCBmcm9tIHx0
aGlzfC4KLSAgICAgIGlzQ2FtZXJhUnVubmluZy5zZXQoZmFsc2UpOwotICAgICAgY2FtZXJhVGhy
ZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFja3NBbmRNZXNzYWdlcyh0aGlzIC8qIHRva2VuICovKTsK
LSAgICB9Ci0gICAgaWYgKGNhbWVyYVN0YXRpc3RpY3MgIT0gbnVsbCkgewotICAgICAgY2FtZXJh
U3RhdGlzdGljcy5yZWxlYXNlKCk7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbnVsbDsKLSAg
ICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgcHJldmlldy4iKTsKLSAgICBpZiAoY2FtZXJh
ICE9IG51bGwpIHsKLSAgICAgIGNhbWVyYS5zdG9wUHJldmlldygpOwotICAgICAgY2FtZXJhLnNl
dFByZXZpZXdDYWxsYmFja1dpdGhCdWZmZXIobnVsbCk7Ci0gICAgfQotICAgIHF1ZXVlZEJ1ZmZl
cnMuY2xlYXIoKTsKLSAgICBjYXB0dXJlRm9ybWF0ID0gbnVsbDsKLQotICAgIExvZ2dpbmcuZChU
QUcsICJSZWxlYXNlIGNhbWVyYS4iKTsKLSAgICBpZiAoY2FtZXJhICE9IG51bGwpIHsKLSAgICAg
IGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgICBjYW1lcmEgPSBudWxsOwotICAgIH0KLSAgICBpZiAo
ZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhQ2xv
c2VkKCk7Ci0gICAgfQotICAgIGZpbmFsIGludCBzdG9wVGltZU1zID0gKGludCkgVGltZVVuaXQu
TkFOT1NFQ09ORFMudG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBzdG9wU3RhcnRUaW1lKTsK
LSAgICB2aWRlb0NhcHR1cmVyQW5kcm9pZFN0b3BUaW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0
b3BUaW1lTXMpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wQ2FwdHVyZU9uQ2FtZXJhVGhyZWFk
IGRvbmUiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzd2l0Y2hDYW1lcmFPbkNhbWVyYVRocmVh
ZCgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoIWlzQ2FtZXJhUnVu
bmluZy5nZXQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInN3aXRjaENhbWVyYU9uQ2FtZXJh
VGhyZWFkOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBM
b2dnaW5nLmQoVEFHLCAic3dpdGNoQ2FtZXJhT25DYW1lcmFUaHJlYWQiKTsKLSAgICBzdG9wQ2Fw
dHVyZU9uQ2FtZXJhVGhyZWFkKGZhbHNlIC8qIHN0b3BIYW5kbGVyICovKTsKLSAgICBzeW5jaHJv
bml6ZWQgKGNhbWVyYUlkTG9jaykgewotICAgICAgaWQgPSAoaWQgKyAxKSAlIGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLmdldE51bWJlck9mQ2FtZXJhcygpOwotICAgIH0KLSAgICBzdGFydENhcHR1
cmVPbkNhbWVyYVRocmVhZChyZXF1ZXN0ZWRXaWR0aCwgcmVxdWVzdGVkSGVpZ2h0LCByZXF1ZXN0
ZWRGcmFtZXJhdGUpOwotICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmFPbkNhbWVyYVRo
cmVhZCBkb25lIik7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXREZXZpY2VPcmllbnRhdGlvbigp
IHsKLSAgICBpbnQgb3JpZW50YXRpb24gPSAwOwotCi0gICAgV2luZG93TWFuYWdlciB3bSA9IChX
aW5kb3dNYW5hZ2VyKSBhcHBsaWNhdGlvbkNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0
LldJTkRPV19TRVJWSUNFKTsKLSAgICBzd2l0Y2ggKHdtLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0
Um90YXRpb24oKSkgewotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzkwOgotICAgICAgICBv
cmllbnRhdGlvbiA9IDkwOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RB
VElPTl8xODA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMTgwOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8yNzA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gMjcw
OwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl8wOgotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAwOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIG9yaWVudGF0aW9uOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RnJhbWVP
cmllbnRhdGlvbigpIHsKLSAgICBpbnQgcm90YXRpb24gPSBnZXREZXZpY2VPcmllbnRhdGlvbigp
OwotICAgIGlmIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJ
bmZvLkNBTUVSQV9GQUNJTkdfQkFDSykgewotICAgICAgcm90YXRpb24gPSAzNjAgLSByb3RhdGlv
bjsKLSAgICB9Ci0gICAgcmV0dXJuIChpbmZvLm9yaWVudGF0aW9uICsgcm90YXRpb24pICUgMzYw
OwotICB9Ci0KLSAgLy8gQ2FsbGVkIG9uIGNhbWVyYVRocmVhZCBzbyBtdXN0IG5vdCAic3luY2hy
b25pemVkIi4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUHJldmlld0ZyYW1lKGJ5dGVb
XSBkYXRhLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYWxsYmFja0NhbWVyYSkgewotICAgIGNo
ZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgIGlmICghaXNDYW1lcmFSdW5uaW5nLmdldCgpKSB7
Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAib25QcmV2aWV3RnJhbWU6IENhbWVyYSBpcyBzdG9wcGVk
Iik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghcXVldWVkQnVmZmVycy5jb250YWlu
cyhkYXRhKSkgewotICAgICAgLy8gfGRhdGF8IGlzIGFuIG9sZCBpbnZhbGlkIGJ1ZmZlci4KLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYSAhPSBjYWxsYmFja0NhbWVyYSkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgY2FtZXJhIGluIGNh
bGxiYWNrISIpOwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgY2FwdHVyZVRpbWVOcyA9IFRpbWVV
bml0Lk1JTExJU0VDT05EUy50b05hbm9zKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsK
LQotICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICBvbkZpcnN0RnJhbWVBdmFp
bGFibGUoKTsKLSAgICB9Ci0gICAgY2FtZXJhU3RhdGlzdGljcy5hZGRGcmFtZSgpOwotICAgIGZy
YW1lT2JzZXJ2ZXIub25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgZGF0YSwgY2Fw
dHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQsIGdldEZyYW1lT3JpZW50YXRp
b24oKSwgY2FwdHVyZVRpbWVOcyk7Ci0gICAgY2FtZXJhLmFkZENhbGxiYWNrQnVmZmVyKGRhdGEp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQXZhaWxh
YmxlKGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVz
dGFtcE5zKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgaWYgKCFpc0NhbWVy
YVJ1bm5pbmcuZ2V0KCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJvblRleHR1cmVGcmFtZUF2
YWlsYWJsZTogQ2FtZXJhIGlzIHN0b3BwZWQiKTsKLSAgICAgIHN1cmZhY2VIZWxwZXIucmV0dXJu
VGV4dHVyZUZyYW1lKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGludCByb3RhdGlvbiA9
IGdldEZyYW1lT3JpZW50YXRpb24oKTsKLSAgICBpZiAoaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5o
YXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0ZST05UKSB7Ci0gICAgICAv
LyBVbmRvIHRoZSBtaXJyb3IgdGhhdCB0aGUgT1MgImhlbHBzIiB1cyB3aXRoLgotICAgICAgLy8g
aHR0cDovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvYW5kcm9pZC9oYXJkd2FyZS9D
YW1lcmEuaHRtbCNzZXREaXNwbGF5T3JpZW50YXRpb24oaW50KQotICAgICAgdHJhbnNmb3JtTWF0
cml4ID0KLSAgICAgICAgICBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHRyYW5zZm9y
bU1hdHJpeCwgUmVuZGVyZXJDb21tb24uaG9yaXpvbnRhbEZsaXBNYXRyaXgoKSk7Ci0gICAgfQot
ICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICBvbkZpcnN0RnJhbWVBdmFpbGFi
bGUoKTsKLSAgICB9Ci0gICAgY2FtZXJhU3RhdGlzdGljcy5hZGRGcmFtZSgpOwotICAgIGZyYW1l
T2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZChjYXB0dXJlRm9ybWF0LndpZHRoLCBjYXB0
dXJlRm9ybWF0LmhlaWdodCwgb2VzVGV4dHVyZUlkLAotICAgICAgICB0cmFuc2Zvcm1NYXRyaXgs
IHJvdGF0aW9uLCB0aW1lc3RhbXBOcyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgb25GaXJzdEZy
YW1lQXZhaWxhYmxlKCkgewotICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAg
IGV2ZW50c0hhbmRsZXIub25GaXJzdEZyYW1lQXZhaWxhYmxlKCk7Ci0gICAgfQotICAgIGZpbmFs
IGludCBzdGFydFRpbWVNcyA9Ci0gICAgICAgIChpbnQpIFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRv
TWlsbGlzKFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnRTdGFydFRpbWVOcyk7Ci0gICAgdmlkZW9D
YXB0dXJlckFuZHJvaWRTdGFydFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMp
OwotICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9IHRydWU7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIGJvb2xlYW4gaXNTY3JlZW5jYXN0KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0ZpbGVSZW5kZXJlci5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9GaWxlUmVuZGVyZXIuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0ZpbGVSZW5kZXJlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMTQ5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdl
YlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9y
dCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBv
cnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci0KLS8qKgotICogQ2FuIGJl
IHVzZWQgdG8gc2F2ZSB0aGUgdmlkZW8gZnJhbWVzIHRvIGZpbGUuCi0gKi8KLXB1YmxpYyBjbGFz
cyBWaWRlb0ZpbGVSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJWaWRlb0ZpbGVSZW5kZXJlciI7
Ci0KLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyVGhyZWFkIHJlbmRlclRocmVhZDsKLSAgcHJpdmF0
ZSBmaW5hbCBPYmplY3QgaGFuZGxlckxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmlu
YWwgSGFuZGxlciByZW5kZXJUaHJlYWRIYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEZpbGVPdXRw
dXRTdHJlYW0gdmlkZW9PdXRGaWxlOwotICBwcml2YXRlIGZpbmFsIGludCBvdXRwdXRGaWxlV2lk
dGg7Ci0gIHByaXZhdGUgZmluYWwgaW50IG91dHB1dEZpbGVIZWlnaHQ7Ci0gIHByaXZhdGUgZmlu
YWwgaW50IG91dHB1dEZyYW1lU2l6ZTsKLSAgcHJpdmF0ZSBmaW5hbCBCeXRlQnVmZmVyIG91dHB1
dEZyYW1lQnVmZmVyOwotICBwcml2YXRlIEVnbEJhc2UgZWdsQmFzZTsKLSAgcHJpdmF0ZSBZdXZD
b252ZXJ0ZXIgeXV2Q29udmVydGVyOwotCi0gIHB1YmxpYyBWaWRlb0ZpbGVSZW5kZXJlcihTdHJp
bmcgb3V0cHV0RmlsZSwgaW50IG91dHB1dEZpbGVXaWR0aCwgaW50IG91dHB1dEZpbGVIZWlnaHQs
Ci0gICAgICBmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCkgdGhyb3dzIElPRXhj
ZXB0aW9uIHsKLSAgICBpZiAoKG91dHB1dEZpbGVXaWR0aCAlIDIpID09IDEgfHwgKG91dHB1dEZp
bGVIZWlnaHQgJSAyKSA9PSAxKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uKCJEb2VzIG5vdCBzdXBwb3J0IHVuZXZlbiB3aWR0aCBvciBoZWlnaHQiKTsKLSAgICB9
Ci0KLSAgICB0aGlzLm91dHB1dEZpbGVXaWR0aCA9IG91dHB1dEZpbGVXaWR0aDsKLSAgICB0aGlz
Lm91dHB1dEZpbGVIZWlnaHQgPSBvdXRwdXRGaWxlSGVpZ2h0OwotCi0gICAgb3V0cHV0RnJhbWVT
aXplID0gb3V0cHV0RmlsZVdpZHRoICogb3V0cHV0RmlsZUhlaWdodCAqIDMgLyAyOwotICAgIG91
dHB1dEZyYW1lQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChvdXRwdXRGcmFtZVNp
emUpOwotCi0gICAgdmlkZW9PdXRGaWxlID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0cHV0Rmls
ZSk7Ci0gICAgdmlkZW9PdXRGaWxlLndyaXRlKAotICAgICAgICAoIllVVjRNUEVHMiBDNDIwIFci
ICsgb3V0cHV0RmlsZVdpZHRoICsgIiBIIiArIG91dHB1dEZpbGVIZWlnaHQgKyAiIElwIEYzMDox
IEExOjFcbiIpCi0gICAgICAgICAgICAuZ2V0Qnl0ZXMoKSk7Ci0KLSAgICByZW5kZXJUaHJlYWQg
PSBuZXcgSGFuZGxlclRocmVhZChUQUcpOwotICAgIHJlbmRlclRocmVhZC5zdGFydCgpOwotICAg
IHJlbmRlclRocmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihyZW5kZXJUaHJlYWQuZ2V0TG9vcGVy
KCkpOwotCi0gICAgVGhyZWFkVXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShyZW5k
ZXJUaHJlYWRIYW5kbGVyLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKHNo
YXJlZENvbnRleHQsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgICAgIGVnbEJh
c2UuY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgpOwotICAgICAgICBlZ2xCYXNlLm1ha2VDdXJy
ZW50KCk7Ci0gICAgICAgIHl1dkNvbnZlcnRlciA9IG5ldyBZdXZDb252ZXJ0ZXIoKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZW5kZXJGcmFt
ZShmaW5hbCBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgIHJlbmRlclRocmVh
ZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgcmVuZGVyRnJhbWVPblJlbmRlclRocmVhZChmcmFt
ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVuZGVyRnJhbWVP
blJlbmRlclRocmVhZChWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgIGZpbmFs
IGZsb2F0IGZyYW1lQXNwZWN0UmF0aW8gPSAoZmxvYXQpIGZyYW1lLnJvdGF0ZWRXaWR0aCgpIC8g
KGZsb2F0KSBmcmFtZS5yb3RhdGVkSGVpZ2h0KCk7Ci0KLSAgICBmaW5hbCBmbG9hdFtdIHJvdGF0
ZWRTYW1wbGluZ01hdHJpeCA9Ci0gICAgICAgIFJlbmRlcmVyQ29tbW9uLnJvdGF0ZVRleHR1cmVN
YXRyaXgoZnJhbWUuc2FtcGxpbmdNYXRyaXgsIGZyYW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICBm
aW5hbCBmbG9hdFtdIGxheW91dE1hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLmdldExheW91dE1hdHJp
eCgKLSAgICAgICAgZmFsc2UsIGZyYW1lQXNwZWN0UmF0aW8sIChmbG9hdCkgb3V0cHV0RmlsZVdp
ZHRoIC8gb3V0cHV0RmlsZUhlaWdodCk7Ci0gICAgZmluYWwgZmxvYXRbXSB0ZXhNYXRyaXggPSBS
ZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHJvdGF0ZWRTYW1wbGluZ01hdHJpeCwgbGF5
b3V0TWF0cml4KTsKLQotICAgIHRyeSB7Ci0gICAgICB2aWRlb091dEZpbGUud3JpdGUoIkZSQU1F
XG4iLmdldEJ5dGVzKCkpOwotICAgICAgaWYgKCFmcmFtZS55dXZGcmFtZSkgewotICAgICAgICB5
dXZDb252ZXJ0ZXIuY29udmVydChvdXRwdXRGcmFtZUJ1ZmZlciwgb3V0cHV0RmlsZVdpZHRoLCBv
dXRwdXRGaWxlSGVpZ2h0LCBvdXRwdXRGaWxlV2lkdGgsCi0gICAgICAgICAgICBmcmFtZS50ZXh0
dXJlSWQsIHRleE1hdHJpeCk7Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IG91dHB1dEZpbGVXaWR0
aDsKLSAgICAgICAgYnl0ZVtdIGRhdGEgPSBvdXRwdXRGcmFtZUJ1ZmZlci5hcnJheSgpOwotICAg
ICAgICBpbnQgb2Zmc2V0ID0gb3V0cHV0RnJhbWVCdWZmZXIuYXJyYXlPZmZzZXQoKTsKLQotICAg
ICAgICAvLyBXcml0ZSBZCi0gICAgICAgIHZpZGVvT3V0RmlsZS53cml0ZShkYXRhLCBvZmZzZXQs
IG91dHB1dEZpbGVXaWR0aCAqIG91dHB1dEZpbGVIZWlnaHQpOwotCi0gICAgICAgIC8vIFdyaXRl
IFUKLSAgICAgICAgZm9yIChpbnQgciA9IG91dHB1dEZpbGVIZWlnaHQ7IHIgPCBvdXRwdXRGaWxl
SGVpZ2h0ICogMyAvIDI7ICsrcikgewotICAgICAgICAgIHZpZGVvT3V0RmlsZS53cml0ZShkYXRh
LCBvZmZzZXQgKyByICogc3RyaWRlLCBzdHJpZGUgLyAyKTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFdyaXRlIFYKLSAgICAgICAgZm9yIChpbnQgciA9IG91dHB1dEZpbGVIZWlnaHQ7IHIgPCBv
dXRwdXRGaWxlSGVpZ2h0ICogMyAvIDI7ICsrcikgewotICAgICAgICAgIHZpZGVvT3V0RmlsZS53
cml0ZShkYXRhLCBvZmZzZXQgKyByICogc3RyaWRlICsgc3RyaWRlIC8gMiwgc3RyaWRlIC8gMik7
Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG5hdGl2ZUk0MjBTY2FsZShmcmFt
ZS55dXZQbGFuZXNbMF0sIGZyYW1lLnl1dlN0cmlkZXNbMF0sIGZyYW1lLnl1dlBsYW5lc1sxXSwK
LSAgICAgICAgICAgIGZyYW1lLnl1dlN0cmlkZXNbMV0sIGZyYW1lLnl1dlBsYW5lc1syXSwgZnJh
bWUueXV2U3RyaWRlc1syXSwgZnJhbWUud2lkdGgsIGZyYW1lLmhlaWdodCwKLSAgICAgICAgICAg
IG91dHB1dEZyYW1lQnVmZmVyLCBvdXRwdXRGaWxlV2lkdGgsIG91dHB1dEZpbGVIZWlnaHQpOwot
ICAgICAgICB2aWRlb091dEZpbGUud3JpdGUoCi0gICAgICAgICAgICBvdXRwdXRGcmFtZUJ1ZmZl
ci5hcnJheSgpLCBvdXRwdXRGcmFtZUJ1ZmZlci5hcnJheU9mZnNldCgpLCBvdXRwdXRGcmFtZVNp
emUpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dp
bmcuZShUQUcsICJGYWlsZWQgdG8gd3JpdGUgdG8gZmlsZSBmb3IgdmlkZW8gb3V0Iik7Ci0gICAg
ICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICB9IGZpbmFsbHkgewotICAgICAg
VmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgIH0KLSAgfQotCi0gIC8q
KgotICAgKiBSZWxlYXNlIGFsbCByZXNvdXJjZXMuIEFsbCBhbHJlYWR5IHBvc3RlZCBmcmFtZXMg
d2lsbCBiZSByZW5kZXJlZCBmaXJzdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7
Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggY2xlYW51cEJhcnJpZXIgPSBuZXcgQ291bnREb3du
TGF0Y2goMSk7Ci0gICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB0cnkg
ewotICAgICAgICAgIHZpZGVvT3V0RmlsZS5jbG9zZSgpOwotICAgICAgICB9IGNhdGNoIChJT0V4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkVycm9yIGNsb3Npbmcgb3V0
cHV0IHZpZGVvIGZpbGUiKTsKLSAgICAgICAgfQotICAgICAgICB5dXZDb252ZXJ0ZXIucmVsZWFz
ZSgpOwotICAgICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICAgICAgcmVuZGVyVGhyZWFkLnF1
aXQoKTsKLSAgICAgICAgY2xlYW51cEJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAg
fSk7Ci0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoY2xlYW51cEJhcnJpZXIp
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVJNDIwU2NhbGUoQnl0
ZUJ1ZmZlciBzcmNZLCBpbnQgc3RyaWRlWSwgQnl0ZUJ1ZmZlciBzcmNVLAotICAgICAgaW50IHN0
cmlkZVUsIEJ5dGVCdWZmZXIgc3JjViwgaW50IHN0cmlkZVYsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgQnl0ZUJ1ZmZlciBkc3QsCi0gICAgICBpbnQgZHN0V2lkdGgsIGludCBkc3RIZWlnaHQpOwot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyLmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5kZXJlci5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMTUwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogSmF2YSB2ZXJzaW9uIG9m
IFZpZGVvU2lua0ludGVyZmFjZS4gIEluIGFkZGl0aW9uIHRvIGFsbG93aW5nIGNsaWVudHMgdG8K
LSAqIGRlZmluZSB0aGVpciBvd24gcmVuZGVyaW5nIGJlaGF2aW9yIChieSBwYXNzaW5nIGluIGEg
Q2FsbGJhY2tzIG9iamVjdCksIHRoaXMKLSAqIGNsYXNzIGFsc28gcHJvdmlkZXMgYSBjcmVhdGVH
dWkoKSBtZXRob2QgZm9yIGNyZWF0aW5nIGEgR1VJLXJlbmRlcmluZyB3aW5kb3cKLSAqIG9uIHZh
cmlvdXMgcGxhdGZvcm1zLgotICovCi1wdWJsaWMgY2xhc3MgVmlkZW9SZW5kZXJlciB7Ci0gIC8q
KgotICAgKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRjOjpWaWRlb0ZyYW1lLiBGcmFtZXMgYXJlIG9u
bHkgY29uc3RydWN0ZWQgZnJvbSBuYXRpdmUgY29kZSBhbmQgdGVzdAotICAgKiBjb2RlLgotICAg
Ki8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBJNDIwRnJhbWUgewotICAgIHB1YmxpYyBmaW5hbCBp
bnQgd2lkdGg7Ci0gICAgcHVibGljIGZpbmFsIGludCBoZWlnaHQ7Ci0gICAgcHVibGljIGZpbmFs
IGludFtdIHl1dlN0cmlkZXM7Ci0gICAgcHVibGljIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXM7Ci0g
ICAgcHVibGljIGZpbmFsIGJvb2xlYW4geXV2RnJhbWU7Ci0gICAgLy8gTWF0cml4IHRoYXQgdHJh
bnNmb3JtcyBzdGFuZGFyZCBjb29yZGluYXRlcyB0byB0aGVpciBwcm9wZXIgc2FtcGxpbmcgbG9j
YXRpb25zIGluCi0gICAgLy8gdGhlIHRleHR1cmUuIFRoaXMgdHJhbnNmb3JtIGNvbXBlbnNhdGVz
IGZvciBhbnkgcHJvcGVydGllcyBvZiB0aGUgdmlkZW8gc291cmNlIHRoYXQKLSAgICAvLyBjYXVz
ZSBpdCB0byBhcHBlYXIgZGlmZmVyZW50IGZyb20gYSBub3JtYWxpemVkIHRleHR1cmUuIFRoaXMg
bWF0cml4IGRvZXMgbm90IHRha2UKLSAgICAvLyB8cm90YXRpb25EZWdyZWV8IGludG8gYWNjb3Vu
dC4KLSAgICBwdWJsaWMgZmluYWwgZmxvYXRbXSBzYW1wbGluZ01hdHJpeDsKLSAgICBwdWJsaWMg
aW50IHRleHR1cmVJZDsKLSAgICAvLyBGcmFtZSBwb2ludGVyIGluIEMrKy4KLSAgICBwcml2YXRl
IGxvbmcgbmF0aXZlRnJhbWVQb2ludGVyOwotCi0gICAgLy8gcm90YXRpb25EZWdyZWUgaXMgdGhl
IGRlZ3JlZSB0aGF0IHRoZSBmcmFtZSBtdXN0IGJlIHJvdGF0ZWQgY2xvY2t3aXNlbHkKLSAgICAv
LyB0byBiZSByZW5kZXJlZCBjb3JyZWN0bHkuCi0gICAgcHVibGljIGludCByb3RhdGlvbkRlZ3Jl
ZTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdCBhIGZyYW1lIG9mIHRoZSBnaXZlbiBkaW1l
bnNpb25zIHdpdGggdGhlIHNwZWNpZmllZCBwbGFuYXIgZGF0YS4KLSAgICAgKi8KLSAgICBJNDIw
RnJhbWUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb25EZWdyZWUsIGludFtdIHl1
dlN0cmlkZXMsIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMsCi0gICAgICAgIGxvbmcgbmF0aXZlRnJh
bWVQb2ludGVyKSB7Ci0gICAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgICB0aGlzLmhlaWdo
dCA9IGhlaWdodDsKLSAgICAgIHRoaXMueXV2U3RyaWRlcyA9IHl1dlN0cmlkZXM7Ci0gICAgICB0
aGlzLnl1dlBsYW5lcyA9IHl1dlBsYW5lczsKLSAgICAgIHRoaXMueXV2RnJhbWUgPSB0cnVlOwot
ICAgICAgdGhpcy5yb3RhdGlvbkRlZ3JlZSA9IHJvdGF0aW9uRGVncmVlOwotICAgICAgdGhpcy5u
YXRpdmVGcmFtZVBvaW50ZXIgPSBuYXRpdmVGcmFtZVBvaW50ZXI7Ci0gICAgICBpZiAocm90YXRp
b25EZWdyZWUgJSA5MCAhPSAwKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24oIlJvdGF0aW9uIGRlZ3JlZSBub3QgbXVsdGlwbGUgb2YgOTA6ICIgKyByb3RhdGlv
bkRlZ3JlZSk7Ci0gICAgICB9Ci0gICAgICAvLyBUaGUgY29udmVudGlvbiBpbiBXZWJSVEMgaXMg
dGhhdCB0aGUgZmlyc3QgZWxlbWVudCBpbiBhIEJ5dGVCdWZmZXIgY29ycmVzcG9uZHMgdG8gdGhl
Ci0gICAgICAvLyB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIGltYWdlLCBidXQgaW4gZ2xUZXhJbWFn
ZTJEKCkgdGhlIGZpcnN0IGVsZW1lbnQgY29ycmVzcG9uZHMgdG8gdGhlCi0gICAgICAvLyBib3R0
b20tbGVmdCBjb3JuZXIuIFRoaXMgZGlzY3JlcGFuY3kgaXMgY29ycmVjdGVkIGJ5IHNldHRpbmcg
YSB2ZXJ0aWNhbCBmbGlwIGFzIHNhbXBsaW5nCi0gICAgICAvLyBtYXRyaXguCi0gICAgICAvLyBj
bGFuZy1mb3JtYXQgb2ZmCi0gICAgICBzYW1wbGluZ01hdHJpeCA9IG5ldyBmbG9hdFtdIHsKLSAg
ICAgICAgICAxLCAgMCwgMCwgMCwKLSAgICAgICAgICAwLCAtMSwgMCwgMCwKLSAgICAgICAgICAw
LCAgMCwgMSwgMCwKLSAgICAgICAgICAwLCAgMSwgMCwgMX07Ci0gICAgICAvLyBjbGFuZy1mb3Jt
YXQgb24KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3QgYSB0ZXh0dXJlIGZyYW1l
IG9mIHRoZSBnaXZlbiBkaW1lbnNpb25zIHdpdGggZGF0YSBpbiBTdXJmYWNlVGV4dHVyZQotICAg
ICAqLwotICAgIEk0MjBGcmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3RhdGlvbkRl
Z3JlZSwgaW50IHRleHR1cmVJZCwgZmxvYXRbXSBzYW1wbGluZ01hdHJpeCwKLSAgICAgICAgbG9u
ZyBuYXRpdmVGcmFtZVBvaW50ZXIpIHsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAg
IHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgdGhpcy55dXZTdHJpZGVzID0gbnVsbDsKLSAg
ICAgIHRoaXMueXV2UGxhbmVzID0gbnVsbDsKLSAgICAgIHRoaXMuc2FtcGxpbmdNYXRyaXggPSBz
YW1wbGluZ01hdHJpeDsKLSAgICAgIHRoaXMudGV4dHVyZUlkID0gdGV4dHVyZUlkOwotICAgICAg
dGhpcy55dXZGcmFtZSA9IGZhbHNlOwotICAgICAgdGhpcy5yb3RhdGlvbkRlZ3JlZSA9IHJvdGF0
aW9uRGVncmVlOwotICAgICAgdGhpcy5uYXRpdmVGcmFtZVBvaW50ZXIgPSBuYXRpdmVGcmFtZVBv
aW50ZXI7Ci0gICAgICBpZiAocm90YXRpb25EZWdyZWUgJSA5MCAhPSAwKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlJvdGF0aW9uIGRlZ3JlZSBub3QgbXVs
dGlwbGUgb2YgOTA6ICIgKyByb3RhdGlvbkRlZ3JlZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
cHVibGljIGludCByb3RhdGVkV2lkdGgoKSB7Ci0gICAgICByZXR1cm4gKHJvdGF0aW9uRGVncmVl
ICUgMTgwID09IDApID8gd2lkdGggOiBoZWlnaHQ7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBy
b3RhdGVkSGVpZ2h0KCkgewotICAgICAgcmV0dXJuIChyb3RhdGlvbkRlZ3JlZSAlIDE4MCA9PSAw
KSA/IGhlaWdodCA6IHdpZHRoOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBT
dHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1cm4gd2lkdGggKyAieCIgKyBoZWlnaHQgKyAi
OiIgKyB5dXZTdHJpZGVzWzBdICsgIjoiICsgeXV2U3RyaWRlc1sxXSArICI6IiArIHl1dlN0cmlk
ZXNbMl07Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIG5hdGl2ZSBmdW5jdGlvbiB0byBkbyBh
IHZpZGVvIGZyYW1lIHBsYW5lIGNvcHlpbmcuCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQg
bmF0aXZlQ29weVBsYW5lKAotICAgICAgQnl0ZUJ1ZmZlciBzcmMsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IHNyY1N0cmlkZSwgQnl0ZUJ1ZmZlciBkc3QsIGludCBkc3RTdHJpZGUpOwotCi0g
IC8qKiBUaGUgcmVhbCBtZWF0IG9mIFZpZGVvU2lua0ludGVyZmFjZS4gKi8KLSAgcHVibGljIHN0
YXRpYyBpbnRlcmZhY2UgQ2FsbGJhY2tzIHsKLSAgICAvLyB8ZnJhbWV8IG1pZ2h0IGhhdmUgcGVu
ZGluZyByb3RhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24gb2YgQ2FsbGJhY2tzCi0gICAgLy8gc2hv
dWxkIGhhbmRsZSB0aGF0IGJ5IGFwcGx5aW5nIHJvdGF0aW9uIGR1cmluZyByZW5kZXJpbmcuIFRo
ZSBjYWxsZWUKLSAgICAvLyBpcyByZXNwb25zaWJsZSBmb3Igc2lnbmFsaW5nIHdoZW4gaXQgaXMg
ZG9uZSB3aXRoIHxmcmFtZXwgYnkgY2FsbGluZwotICAgIC8vIHJlbmRlckZyYW1lRG9uZShmcmFt
ZSkuCi0gICAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoSTQyMEZyYW1lIGZyYW1lKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIGFmdGVyIGV2ZXJ5IHJlbmRlckZyYW1l
KCkgdG8gcmVsZWFzZSB0aGUgZnJhbWUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgcmVu
ZGVyRnJhbWVEb25lKEk0MjBGcmFtZSBmcmFtZSkgewotICAgIGZyYW1lLnl1dlBsYW5lcyA9IG51
bGw7Ci0gICAgZnJhbWUudGV4dHVyZUlkID0gMDsKLSAgICBpZiAoZnJhbWUubmF0aXZlRnJhbWVQ
b2ludGVyICE9IDApIHsKLSAgICAgIHJlbGVhc2VOYXRpdmVGcmFtZShmcmFtZS5uYXRpdmVGcmFt
ZVBvaW50ZXIpOwotICAgICAgZnJhbWUubmF0aXZlRnJhbWVQb2ludGVyID0gMDsKLSAgICB9Ci0g
IH0KLQotICBsb25nIG5hdGl2ZVZpZGVvUmVuZGVyZXI7Ci0KLSAgcHVibGljIFZpZGVvUmVuZGVy
ZXIoQ2FsbGJhY2tzIGNhbGxiYWNrcykgewotICAgIG5hdGl2ZVZpZGVvUmVuZGVyZXIgPSBuYXRp
dmVXcmFwVmlkZW9SZW5kZXJlcihjYWxsYmFja3MpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlz
cG9zZSgpIHsKLSAgICBpZiAobmF0aXZlVmlkZW9SZW5kZXJlciA9PSAwKSB7Ci0gICAgICAvLyBB
bHJlYWR5IGRpc3Bvc2VkLgotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZyZWVXcmFwcGVk
VmlkZW9SZW5kZXJlcihuYXRpdmVWaWRlb1JlbmRlcmVyKTsKLSAgICBuYXRpdmVWaWRlb1JlbmRl
cmVyID0gMDsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZVdyYXBW
aWRlb1JlbmRlcmVyKENhbGxiYWNrcyBjYWxsYmFja3MpOwotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgdm9pZCBmcmVlV3JhcHBlZFZpZGVvUmVuZGVyZXIobG9uZyBuYXRpdmVWaWRlb1JlbmRlcmVy
KTsKLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgcmVsZWFzZU5hdGl2ZUZyYW1lKGxvbmcg
bmF0aXZlRnJhbWVQb2ludGVyKTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5k
ZXJlckd1aS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5kZXJl
ckd1aS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVu
ZGVyZXJHdWkuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDYyOCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLlZpZGVv
UmVuZGVyZXIuSTQyMEZyYW1lOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlN1cHByZXNz
TGludDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IGFuZHJvaWQuZ3Jh
cGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5FR0wxNDsKLWltcG9ydCBhbmRyb2lk
Lm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xTdXJmYWNlVmlldzsKLQot
aW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQu
Q291bnREb3duTGF0Y2g7Ci0KLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wu
RUdMMTA7Ci1pbXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbmZpZzsK
LWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29udGV4dDsKLWltcG9y
dCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5vcGVuZ2xlcy5HTDEwOwotCi0vKioKLSAqIEVm
ZmljaWVudGx5IHJlbmRlcnMgWVVWIGZyYW1lcyB1c2luZyB0aGUgR1BVIGZvciBDU0MuCi0gKiBD
bGllbnRzIHdpbGwgd2FudCBmaXJzdCB0byBjYWxsIHNldFZpZXcoKSB0byBwYXNzIEdMU3VyZmFj
ZVZpZXcKLSAqIGFuZCB0aGVuIGZvciBlYWNoIHZpZGVvIHN0cmVhbSBlaXRoZXIgY3JlYXRlIGlu
c3RhbmNlIG9mIFZpZGVvUmVuZGVyZXIgdXNpbmcKLSAqIGNyZWF0ZUd1aSgpIGNhbGwgb3IgVmlk
ZW9SZW5kZXJlci5DYWxsYmFja3MgaW50ZXJmYWNlIHVzaW5nIGNyZWF0ZSgpIGNhbGwuCi0gKiBP
bmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgY2FuIGJlIGNyZWF0ZWQuCi0gKi8KLXB1Ymxp
YyBjbGFzcyBWaWRlb1JlbmRlcmVyR3VpIGltcGxlbWVudHMgR0xTdXJmYWNlVmlldy5SZW5kZXJl
ciB7Ci0gIC8vIHxpbnN0YW5jZXwsIHxpbnN0YW5jZS5zdXJmYWNlfCwgfGVnbENvbnRleHR8LCBh
bmQgfGVnbENvbnRleHRSZWFkeXwgYXJlIHN5bmNocm9uaXplZCBvbgotICAvLyB8VmlkZW9SZW5k
ZXJlckd1aS5jbGFzc3wuCi0gIHByaXZhdGUgc3RhdGljIFZpZGVvUmVuZGVyZXJHdWkgaW5zdGFu
Y2UgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBSdW5uYWJsZSBlZ2xDb250ZXh0UmVhZHkgPSBu
dWxsOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZpZGVvUmVuZGVyZXJH
dWkiOwotICBwcml2YXRlIEdMU3VyZmFjZVZpZXcgc3VyZmFjZTsKLSAgcHJpdmF0ZSBzdGF0aWMg
RWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQgPSBudWxsOwotICAvLyBJbmRpY2F0ZXMgaWYgU3Vy
ZmFjZVZpZXcuUmVuZGVyZXIub25TdXJmYWNlQ3JlYXRlZCB3YXMgY2FsbGVkLgotICAvLyBJZiB0
cnVlIHRoZW4gZm9yIGV2ZXJ5IG5ld2x5IGNyZWF0ZWQgeXV2IGltYWdlIHJlbmRlcmVyIGNyZWF0
ZVRleHR1cmUoKQotICAvLyBzaG91bGQgYmUgY2FsbGVkLiBUaGUgdmFyaWFibGUgaXMgYWNjZXNz
ZWQgb24gbXVsdGlwbGUgdGhyZWFkcyBhbmQKLSAgLy8gYWxsIGFjY2Vzc2VzIGFyZSBzeW5jaHJv
bml6ZWQgb24geXV2SW1hZ2VSZW5kZXJlcnMnIG9iamVjdCBsb2NrLgotICBwcml2YXRlIGJvb2xl
YW4gb25TdXJmYWNlQ3JlYXRlZENhbGxlZDsKLSAgcHJpdmF0ZSBpbnQgc2NyZWVuV2lkdGg7Ci0g
IHByaXZhdGUgaW50IHNjcmVlbkhlaWdodDsKLSAgLy8gTGlzdCBvZiB5dXYgcmVuZGVyZXJzLgot
ICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxZdXZJbWFnZVJlbmRlcmVyPiB5dXZJbWFnZVJlbmRl
cmVyczsKLSAgLy8gUmVuZGVyIGFuZCBkcmF3IHRocmVhZHMuCi0gIHByaXZhdGUgc3RhdGljIFRo
cmVhZCByZW5kZXJGcmFtZVRocmVhZDsKLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkIGRyYXdUaHJl
YWQ7Ci0KLSAgcHJpdmF0ZSBWaWRlb1JlbmRlcmVyR3VpKEdMU3VyZmFjZVZpZXcgc3VyZmFjZSkg
ewotICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgLy8gQ3JlYXRlIGFuIE9wZW5HTCBF
UyAyLjAgY29udGV4dC4KLSAgICBzdXJmYWNlLnNldFByZXNlcnZlRUdMQ29udGV4dE9uUGF1c2Uo
dHJ1ZSk7Ci0gICAgc3VyZmFjZS5zZXRFR0xDb250ZXh0Q2xpZW50VmVyc2lvbigyKTsKLSAgICBz
dXJmYWNlLnNldFJlbmRlcmVyKHRoaXMpOwotICAgIHN1cmZhY2Uuc2V0UmVuZGVyTW9kZShHTFN1
cmZhY2VWaWV3LlJFTkRFUk1PREVfV0hFTl9ESVJUWSk7Ci0KLSAgICB5dXZJbWFnZVJlbmRlcmVy
cyA9IG5ldyBBcnJheUxpc3Q8WXV2SW1hZ2VSZW5kZXJlcj4oKTsKLSAgfQotCi0gIC8qKgotICAg
KiBDbGFzcyB1c2VkIHRvIGRpc3BsYXkgc3RyZWFtIG9mIFlVVjQyMCBmcmFtZXMgYXQgcGFydGlj
dWxhciBsb2NhdGlvbgotICAgKiBvbiBhIHNjcmVlbi4gTmV3IHZpZGVvIGZyYW1lcyBhcmUgc2Vu
dCB0byBkaXNwbGF5IHVzaW5nIHJlbmRlckZyYW1lKCkKLSAgICogY2FsbC4KLSAgICovCi0gIHBy
aXZhdGUgc3RhdGljIGNsYXNzIFl1dkltYWdlUmVuZGVyZXIgaW1wbGVtZW50cyBWaWRlb1JlbmRl
cmVyLkNhbGxiYWNrcyB7Ci0gICAgLy8gfHN1cmZhY2V8IGlzIHN5bmNocm9uaXplZCBvbiB8dGhp
c3wuCi0gICAgcHJpdmF0ZSBHTFN1cmZhY2VWaWV3IHN1cmZhY2U7Ci0gICAgcHJpdmF0ZSBpbnQg
aWQ7Ci0gICAgLy8gVE9ETyhtYWdqZWQpOiBEZWxldGUgR0wgcmVzb3VyY2VzIGluIHJlbGVhc2Uo
KS4gTXVzdCBiZSBzeW5jaHJvbml6ZWQgd2l0aCBkcmF3KCkuIFdlIGFyZQotICAgIC8vIGN1cnJl
bnRseSBsZWFraW5nIHJlc291cmNlcyB0byBhdm9pZCBhIHJhcmUgY3Jhc2ggaW4gcmVsZWFzZSgp
IHdoZXJlIHRoZSBFR0xDb250ZXh0IGhhcwotICAgIC8vIGJlY29tZSBpbnZhbGlkIGJlZm9yZWhh
bmQuCi0gICAgcHJpdmF0ZSBpbnRbXSB5dXZUZXh0dXJlcyA9IHswLCAwLCAwfTsKLSAgICBwcml2
YXRlIGZpbmFsIFJlbmRlcmVyQ29tbW9uLll1dlVwbG9hZGVyIHl1dlVwbG9hZGVyID0gbmV3IFJl
bmRlcmVyQ29tbW9uLll1dlVwbG9hZGVyKCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBSZW5kZXJlckNv
bW1vbi5HbERyYXdlciBkcmF3ZXI7Ci0gICAgLy8gUmVzb3VyY2VzIGZvciBtYWtpbmcgYSBkZWVw
IGNvcHkgb2YgaW5jb21pbmcgT0VTIHRleHR1cmUgZnJhbWUuCi0gICAgcHJpdmF0ZSBHbFRleHR1
cmVGcmFtZUJ1ZmZlciB0ZXh0dXJlQ29weTsKLQotICAgIC8vIFBlbmRpbmcgZnJhbWUgdG8gcmVu
ZGVyLiBTZXJ2ZXMgYXMgYSBxdWV1ZSB3aXRoIHNpemUgMS4gfHBlbmRpbmdGcmFtZXwgaXMgYWNj
ZXNzZWQgYnkgdHdvCi0gICAgLy8gdGhyZWFkcyAtIGZyYW1lcyBhcmUgcmVjZWl2ZWQgaW4gcmVu
ZGVyRnJhbWUoKSBhbmQgY29uc3VtZWQgaW4gZHJhdygpLiBGcmFtZXMgYXJlIGRyb3BwZWQgaW4K
LSAgICAvLyByZW5kZXJGcmFtZSgpIGlmIHRoZSBwcmV2aW91cyBmcmFtZSBoYXMgbm90IGJlZW4g
cmVuZGVyZWQgeWV0LgotICAgIHByaXZhdGUgSTQyMEZyYW1lIHBlbmRpbmdGcmFtZTsKLSAgICBw
cml2YXRlIGZpbmFsIE9iamVjdCBwZW5kaW5nRnJhbWVMb2NrID0gbmV3IE9iamVjdCgpOwotICAg
IC8vIFR5cGUgb2YgdmlkZW8gZnJhbWUgdXNlZCBmb3IgcmVjZW50IGZyYW1lIHJlbmRlcmluZy4K
LSAgICBwcml2YXRlIHN0YXRpYyBlbnVtIFJlbmRlcmVyVHlwZSB7IFJFTkRFUkVSX1lVViwgUkVO
REVSRVJfVEVYVFVSRSB9Ci0KLSAgICBwcml2YXRlIFJlbmRlcmVyVHlwZSByZW5kZXJlclR5cGU7
Ci0gICAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZTsKLSAg
ICBwcml2YXRlIGJvb2xlYW4gbWlycm9yOwotICAgIHByaXZhdGUgUmVuZGVyZXJDb21tb24uUmVu
ZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHM7Ci0gICAgLy8gRmxhZyBpZiByZW5kZXJGcmFtZSgp
IHdhcyBldmVyIGNhbGxlZC4KLSAgICBib29sZWFuIHNlZW5GcmFtZTsKLSAgICAvLyBUb3RhbCBu
dW1iZXIgb2YgdmlkZW8gZnJhbWVzIHJlY2VpdmVkIGluIHJlbmRlckZyYW1lKCkgY2FsbC4KLSAg
ICBwcml2YXRlIGludCBmcmFtZXNSZWNlaXZlZDsKLSAgICAvLyBOdW1iZXIgb2YgdmlkZW8gZnJh
bWVzIGRyb3BwZWQgYnkgcmVuZGVyRnJhbWUoKSBiZWNhdXNlIHByZXZpb3VzCi0gICAgLy8gZnJh
bWUgaGFzIG5vdCBiZWVuIHJlbmRlcmVkIHlldC4KLSAgICBwcml2YXRlIGludCBmcmFtZXNEcm9w
cGVkOwotICAgIC8vIE51bWJlciBvZiByZW5kZXJlZCB2aWRlbyBmcmFtZXMuCi0gICAgcHJpdmF0
ZSBpbnQgZnJhbWVzUmVuZGVyZWQ7Ci0gICAgLy8gVGltZSBpbiBucyB3aGVuIHRoZSBmaXJzdCB2
aWRlbyBmcmFtZSB3YXMgcmVuZGVyZWQuCi0gICAgcHJpdmF0ZSBsb25nIHN0YXJ0VGltZU5zID0g
LTE7Ci0gICAgLy8gVGltZSBpbiBucyBzcGVudCBpbiBkcmF3KCkgZnVuY3Rpb24uCi0gICAgcHJp
dmF0ZSBsb25nIGRyYXdUaW1lTnM7Ci0gICAgLy8gVGltZSBpbiBucyBzcGVudCBpbiBkcmF3KCkg
Y29weWluZyByZXNvdXJjZXMgZnJvbSB8cGVuZGluZ0ZyYW1lfCAtIGluY2x1ZGluZyB1cGxvYWRp
bmcgZnJhbWUKLSAgICAvLyBkYXRhIHRvIHJlbmRlcmluZyBwbGFuZXMuCi0gICAgcHJpdmF0ZSBs
b25nIGNvcHlUaW1lTnM7Ci0gICAgLy8gVGhlIGFsbG93ZWQgdmlldyBhcmVhIGluIHBlcmNlbnRh
Z2Ugb2Ygc2NyZWVuIHNpemUuCi0gICAgcHJpdmF0ZSBmaW5hbCBSZWN0IGxheW91dEluUGVyY2Vu
dGFnZTsKLSAgICAvLyBUaGUgYWN0dWFsIHZpZXcgYXJlYSBpbiBwaXhlbHMuIEl0IGlzIGEgY2Vu
dGVyZWQgc3VicmVjdGFuZ2xlIG9mIHRoZSByZWN0YW5nbGUgZGVmaW5lZCBieQotICAgIC8vIHxs
YXlvdXRJblBlcmNlbnRhZ2V8LgotICAgIHByaXZhdGUgZmluYWwgUmVjdCBkaXNwbGF5TGF5b3V0
ID0gbmV3IFJlY3QoKTsKLSAgICAvLyBDYWNoZWQgbGF5b3V0IHRyYW5zZm9ybWF0aW9uIG1hdHJp
eCwgY2FsY3VsYXRlZCBmcm9tIGN1cnJlbnQgbGF5b3V0IHBhcmFtZXRlcnMuCi0gICAgcHJpdmF0
ZSBmbG9hdFtdIGxheW91dE1hdHJpeDsKLSAgICAvLyBGbGFnIGlmIGxheW91dCB0cmFuc2Zvcm1h
dGlvbiBtYXRyaXggdXBkYXRlIGlzIG5lZWRlZC4KLSAgICBwcml2YXRlIGJvb2xlYW4gdXBkYXRl
TGF5b3V0UHJvcGVydGllczsKLSAgICAvLyBMYXlvdXQgcHJvcGVydGllcyB1cGRhdGUgbG9jay4g
R3VhcmRzIHx1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzfCwgfHNjcmVlbldpZHRofCwKLSAgICAvLyB8
c2NyZWVuSGVpZ2h0fCwgfHZpZGVvV2lkdGh8LCB8dmlkZW9IZWlnaHR8LCB8cm90YXRpb25EZWdy
ZWV8LCB8c2NhbGluZ1R5cGV8LCBhbmQgfG1pcnJvcnwuCi0gICAgcHJpdmF0ZSBmaW5hbCBPYmpl
Y3QgdXBkYXRlTGF5b3V0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICAvLyBUZXh0dXJlIHNhbXBs
aW5nIG1hdHJpeC4KLSAgICBwcml2YXRlIGZsb2F0W10gcm90YXRlZFNhbXBsaW5nTWF0cml4Owot
ICAgIC8vIFZpZXdwb3J0IGRpbWVuc2lvbnMuCi0gICAgcHJpdmF0ZSBpbnQgc2NyZWVuV2lkdGg7
Ci0gICAgcHJpdmF0ZSBpbnQgc2NyZWVuSGVpZ2h0OwotICAgIC8vIFZpZGVvIGRpbWVuc2lvbi4K
LSAgICBwcml2YXRlIGludCB2aWRlb1dpZHRoOwotICAgIHByaXZhdGUgaW50IHZpZGVvSGVpZ2h0
OwotCi0gICAgLy8gVGhpcyBpcyB0aGUgZGVncmVlIHRoYXQgdGhlIGZyYW1lIHNob3VsZCBiZSBy
b3RhdGVkIGNsb2Nrd2lzZWx5IHRvIGhhdmUKLSAgICAvLyBpdCByZW5kZXJlZCB1cCByaWdodC4K
LSAgICBwcml2YXRlIGludCByb3RhdGlvbkRlZ3JlZTsKLQotICAgIHByaXZhdGUgWXV2SW1hZ2VS
ZW5kZXJlcihHTFN1cmZhY2VWaWV3IHN1cmZhY2UsIGludCBpZCwgaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlLCBib29sZWFuIG1pcnJvciwgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2Vy
KSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiWXV2SW1hZ2VSZW5kZXJlci5DcmVhdGUgaWQ6ICIg
KyBpZCk7Ci0gICAgICB0aGlzLnN1cmZhY2UgPSBzdXJmYWNlOwotICAgICAgdGhpcy5pZCA9IGlk
OwotICAgICAgdGhpcy5zY2FsaW5nVHlwZSA9IHNjYWxpbmdUeXBlOwotICAgICAgdGhpcy5taXJy
b3IgPSBtaXJyb3I7Ci0gICAgICB0aGlzLmRyYXdlciA9IGRyYXdlcjsKLSAgICAgIGxheW91dElu
UGVyY2VudGFnZSA9IG5ldyBSZWN0KHgsIHksIE1hdGgubWluKDEwMCwgeCArIHdpZHRoKSwgTWF0
aC5taW4oMTAwLCB5ICsgaGVpZ2h0KSk7Ci0gICAgICB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzID0g
ZmFsc2U7Ci0gICAgICByb3RhdGlvbkRlZ3JlZSA9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIHN5
bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgewotICAgICAgc2VlbkZyYW1lID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCByZWxlYXNlKCkgewotICAgICAgc3Vy
ZmFjZSA9IG51bGw7Ci0gICAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgICAgc3luY2hyb25pemVk
IChwZW5kaW5nRnJhbWVMb2NrKSB7Ci0gICAgICAgIGlmIChwZW5kaW5nRnJhbWUgIT0gbnVsbCkg
ewotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKHBlbmRpbmdGcmFtZSk7
Ci0gICAgICAgICAgcGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLQotICAgIHByaXZhdGUgdm9pZCBjcmVhdGVUZXh0dXJlcygpIHsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICIgIFl1dkltYWdlUmVuZGVyZXIuY3JlYXRlVGV4dHVyZXMgIiArIGlkICsgIiBvbiBH
TCB0aHJlYWQ6IgotICAgICAgICAgICAgICArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0SWQo
KSk7Ci0KLSAgICAgIC8vIEdlbmVyYXRlIDMgdGV4dHVyZSBpZHMgZm9yIFkvVS9WIGFuZCBwbGFj
ZSB0aGVtIGludG8gfHl1dlRleHR1cmVzfC4KLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsg
aSsrKSB7Ci0gICAgICAgIHl1dlRleHR1cmVzW2ldID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShH
TEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgICB9Ci0gICAgICAvLyBHZW5lcmF0ZSB0ZXh0dXJl
IGFuZCBmcmFtZWJ1ZmZlciBmb3Igb2Zmc2NyZWVuIHRleHR1cmUgY29weS4KLSAgICAgIHRleHR1
cmVDb3B5ID0gbmV3IEdsVGV4dHVyZUZyYW1lQnVmZmVyKEdMRVMyMC5HTF9SR0IpOwotICAgIH0K
LQotICAgIHByaXZhdGUgdm9pZCB1cGRhdGVMYXlvdXRNYXRyaXgoKSB7Ci0gICAgICBzeW5jaHJv
bml6ZWQgKHVwZGF0ZUxheW91dExvY2spIHsKLSAgICAgICAgaWYgKCF1cGRhdGVMYXlvdXRQcm9w
ZXJ0aWVzKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIEluaXRp
YWxpemUgdG8gbWF4aW11bSBhbGxvd2VkIGFyZWEuIFJvdW5kIHRvIGludGVnZXIgY29vcmRpbmF0
ZXMgaW53YXJkcyB0aGUgbGF5b3V0Ci0gICAgICAgIC8vIGJvdW5kaW5nIGJveCAoY2VpbCBsZWZ0
L3RvcCBhbmQgZmxvb3IgcmlnaHQvYm90dG9tKSB0byBub3QgYnJlYWsgY29uc3RyYWludHMuCi0g
ICAgICAgIGRpc3BsYXlMYXlvdXQuc2V0KChzY3JlZW5XaWR0aCAqIGxheW91dEluUGVyY2VudGFn
ZS5sZWZ0ICsgOTkpIC8gMTAwLAotICAgICAgICAgICAgKHNjcmVlbkhlaWdodCAqIGxheW91dElu
UGVyY2VudGFnZS50b3AgKyA5OSkgLyAxMDAsCi0gICAgICAgICAgICAoc2NyZWVuV2lkdGggKiBs
YXlvdXRJblBlcmNlbnRhZ2UucmlnaHQpIC8gMTAwLAotICAgICAgICAgICAgKHNjcmVlbkhlaWdo
dCAqIGxheW91dEluUGVyY2VudGFnZS5ib3R0b20pIC8gMTAwKTsKLSAgICAgICAgTG9nZ2luZy5k
KFRBRywgIklEOiAiICsgaWQgKyAiLiBBZGp1c3RUZXh0dXJlQ29vcmRzLiBBbGxvd2VkIGRpc3Bs
YXkgc2l6ZTogIgotICAgICAgICAgICAgICAgICsgZGlzcGxheUxheW91dC53aWR0aCgpICsgIiB4
ICIgKyBkaXNwbGF5TGF5b3V0LmhlaWdodCgpICsgIi4gVmlkZW86ICIgKyB2aWRlb1dpZHRoCi0g
ICAgICAgICAgICAgICAgKyAiIHggIiArIHZpZGVvSGVpZ2h0ICsgIi4gUm90YXRpb246ICIgKyBy
b3RhdGlvbkRlZ3JlZSArICIuIE1pcnJvcjogIiArIG1pcnJvcik7Ci0gICAgICAgIGZpbmFsIGZs
b2F0IHZpZGVvQXNwZWN0UmF0aW8gPSAocm90YXRpb25EZWdyZWUgJSAxODAgPT0gMCkKLSAgICAg
ICAgICAgID8gKGZsb2F0KSB2aWRlb1dpZHRoIC8gdmlkZW9IZWlnaHQKLSAgICAgICAgICAgIDog
KGZsb2F0KSB2aWRlb0hlaWdodCAvIHZpZGVvV2lkdGg7Ci0gICAgICAgIC8vIEFkanVzdCBkaXNw
bGF5IHNpemUgYmFzZWQgb24gfHNjYWxpbmdUeXBlfC4KLSAgICAgICAgZmluYWwgUG9pbnQgZGlz
cGxheVNpemUgPSBSZW5kZXJlckNvbW1vbi5nZXREaXNwbGF5U2l6ZSgKLSAgICAgICAgICAgIHNj
YWxpbmdUeXBlLCB2aWRlb0FzcGVjdFJhdGlvLCBkaXNwbGF5TGF5b3V0LndpZHRoKCksIGRpc3Bs
YXlMYXlvdXQuaGVpZ2h0KCkpOwotICAgICAgICBkaXNwbGF5TGF5b3V0Lmluc2V0KChkaXNwbGF5
TGF5b3V0LndpZHRoKCkgLSBkaXNwbGF5U2l6ZS54KSAvIDIsCi0gICAgICAgICAgICAoZGlzcGxh
eUxheW91dC5oZWlnaHQoKSAtIGRpc3BsYXlTaXplLnkpIC8gMik7Ci0gICAgICAgIExvZ2dpbmcu
ZChUQUcsCi0gICAgICAgICAgICAiICBBZGp1c3RlZCBkaXNwbGF5IHNpemU6ICIgKyBkaXNwbGF5
TGF5b3V0LndpZHRoKCkgKyAiIHggIiArIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkpOwotICAgICAg
ICBsYXlvdXRNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5nZXRMYXlvdXRNYXRyaXgoCi0gICAgICAg
ICAgICBtaXJyb3IsIHZpZGVvQXNwZWN0UmF0aW8sIChmbG9hdCkgZGlzcGxheUxheW91dC53aWR0
aCgpIC8gZGlzcGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICAgIHVwZGF0ZUxheW91dFByb3Bl
cnRpZXMgPSBmYWxzZTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIiAgQWRqdXN0VGV4dHVyZUNv
b3JkcyBkb25lIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGRyYXcoKSB7
Ci0gICAgICBpZiAoIXNlZW5GcmFtZSkgewotICAgICAgICAvLyBObyBmcmFtZSByZWNlaXZlZCB5
ZXQgLSBub3RoaW5nIHRvIHJlbmRlci4KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAg
bG9uZyBub3cgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLQotICAgICAgZmluYWwgYm9vbGVhbiBpc05l
d0ZyYW1lOwotICAgICAgc3luY2hyb25pemVkIChwZW5kaW5nRnJhbWVMb2NrKSB7Ci0gICAgICAg
IGlzTmV3RnJhbWUgPSAocGVuZGluZ0ZyYW1lICE9IG51bGwpOwotICAgICAgICBpZiAoaXNOZXdG
cmFtZSAmJiBzdGFydFRpbWVOcyA9PSAtMSkgewotICAgICAgICAgIHN0YXJ0VGltZU5zID0gbm93
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzTmV3RnJhbWUpIHsKLSAgICAgICAgICByb3Rh
dGVkU2FtcGxpbmdNYXRyaXggPSBSZW5kZXJlckNvbW1vbi5yb3RhdGVUZXh0dXJlTWF0cml4KAot
ICAgICAgICAgICAgICBwZW5kaW5nRnJhbWUuc2FtcGxpbmdNYXRyaXgsIHBlbmRpbmdGcmFtZS5y
b3RhdGlvbkRlZ3JlZSk7Ci0gICAgICAgICAgaWYgKHBlbmRpbmdGcmFtZS55dXZGcmFtZSkgewot
ICAgICAgICAgICAgcmVuZGVyZXJUeXBlID0gUmVuZGVyZXJUeXBlLlJFTkRFUkVSX1lVVjsKLSAg
ICAgICAgICAgIHl1dlVwbG9hZGVyLnVwbG9hZFl1dkRhdGEoeXV2VGV4dHVyZXMsIHBlbmRpbmdG
cmFtZS53aWR0aCwgcGVuZGluZ0ZyYW1lLmhlaWdodCwKLSAgICAgICAgICAgICAgICBwZW5kaW5n
RnJhbWUueXV2U3RyaWRlcywgcGVuZGluZ0ZyYW1lLnl1dlBsYW5lcyk7Ci0gICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHJlbmRlcmVyVHlwZSA9IFJlbmRlcmVyVHlwZS5SRU5ERVJFUl9U
RVhUVVJFOwotICAgICAgICAgICAgLy8gRXh0ZXJuYWwgdGV4dHVyZSByZW5kZXJpbmcuIE1ha2Ug
YSBkZWVwIGNvcHkgb2YgdGhlIGV4dGVybmFsIHRleHR1cmUuCi0gICAgICAgICAgICAvLyBSZWFs
bG9jYXRlIG9mZnNjcmVlbiB0ZXh0dXJlIGlmIG5lY2Vzc2FyeS4KLSAgICAgICAgICAgIHRleHR1
cmVDb3B5LnNldFNpemUocGVuZGluZ0ZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBwZW5kaW5nRnJhbWUu
cm90YXRlZEhlaWdodCgpKTsKLQotICAgICAgICAgICAgLy8gQmluZCBvdXIgb2Zmc2NyZWVuIGZy
YW1lYnVmZmVyLgotICAgICAgICAgICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5H
TF9GUkFNRUJVRkZFUiwgdGV4dHVyZUNvcHkuZ2V0RnJhbWVCdWZmZXJJZCgpKTsKLSAgICAgICAg
ICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xCaW5kRnJhbWVidWZmZXIiKTsKLQotICAg
ICAgICAgICAgLy8gQ29weSB0aGUgT0VTIHRleHR1cmUgY29udGVudC4gVGhpcyB3aWxsIGFsc28g
bm9ybWFsaXplIHRoZSBzYW1wbGluZyBtYXRyaXguCi0gICAgICAgICAgICBkcmF3ZXIuZHJhd09l
cyhwZW5kaW5nRnJhbWUudGV4dHVyZUlkLCByb3RhdGVkU2FtcGxpbmdNYXRyaXgsIHRleHR1cmVD
b3B5LmdldFdpZHRoKCksCi0gICAgICAgICAgICAgICAgdGV4dHVyZUNvcHkuZ2V0SGVpZ2h0KCks
IDAsIDAsIHRleHR1cmVDb3B5LmdldFdpZHRoKCksIHRleHR1cmVDb3B5LmdldEhlaWdodCgpKTsK
LSAgICAgICAgICAgIHJvdGF0ZWRTYW1wbGluZ01hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLmlkZW50
aXR5TWF0cml4KCk7Ci0KLSAgICAgICAgICAgIC8vIFJlc3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVy
LgotICAgICAgICAgICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJV
RkZFUiwgMCk7Ci0gICAgICAgICAgICBHTEVTMjAuZ2xGaW5pc2goKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgY29weVRpbWVOcyArPSAoU3lzdGVtLm5hbm9UaW1lKCkgLSBub3cpOwotICAgICAg
ICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKHBlbmRpbmdGcmFtZSk7Ci0gICAgICAg
ICAgcGVuZGluZ0ZyYW1lID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB1cGRh
dGVMYXlvdXRNYXRyaXgoKTsKLSAgICAgIGZpbmFsIGZsb2F0W10gdGV4TWF0cml4ID0KLSAgICAg
ICAgICBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHJvdGF0ZWRTYW1wbGluZ01hdHJp
eCwgbGF5b3V0TWF0cml4KTsKLSAgICAgIC8vIE9wZW5HTCBkZWZhdWx0cyB0byBsb3dlciBsZWZ0
IG9yaWdpbiAtIGZsaXAgdmlld3BvcnQgcG9zaXRpb24gdmVydGljYWxseS4KLSAgICAgIGZpbmFs
IGludCB2aWV3cG9ydFkgPSBzY3JlZW5IZWlnaHQgLSBkaXNwbGF5TGF5b3V0LmJvdHRvbTsKLSAg
ICAgIGlmIChyZW5kZXJlclR5cGUgPT0gUmVuZGVyZXJUeXBlLlJFTkRFUkVSX1lVVikgewotICAg
ICAgICBkcmF3ZXIuZHJhd1l1dih5dXZUZXh0dXJlcywgdGV4TWF0cml4LCB2aWRlb1dpZHRoLCB2
aWRlb0hlaWdodCwgZGlzcGxheUxheW91dC5sZWZ0LAotICAgICAgICAgICAgdmlld3BvcnRZLCBk
aXNwbGF5TGF5b3V0LndpZHRoKCksIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkpOwotICAgICAgfSBl
bHNlIHsKLSAgICAgICAgZHJhd2VyLmRyYXdSZ2IodGV4dHVyZUNvcHkuZ2V0VGV4dHVyZUlkKCks
IHRleE1hdHJpeCwgdmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsCi0gICAgICAgICAgICBkaXNwbGF5
TGF5b3V0LmxlZnQsIHZpZXdwb3J0WSwgZGlzcGxheUxheW91dC53aWR0aCgpLCBkaXNwbGF5TGF5
b3V0LmhlaWdodCgpKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGlzTmV3RnJhbWUpIHsKLSAgICAg
ICAgZnJhbWVzUmVuZGVyZWQrKzsKLSAgICAgICAgZHJhd1RpbWVOcyArPSAoU3lzdGVtLm5hbm9U
aW1lKCkgLSBub3cpOwotICAgICAgICBpZiAoKGZyYW1lc1JlbmRlcmVkICUgMzAwKSA9PSAwKSB7
Ci0gICAgICAgICAgbG9nU3RhdGlzdGljcygpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHJpdmF0ZSB2b2lkIGxvZ1N0YXRpc3RpY3MoKSB7Ci0gICAgICBsb25nIHRpbWVTaW5j
ZUZpcnN0RnJhbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpIC0gc3RhcnRUaW1lTnM7Ci0gICAgICBM
b2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCArICIuIFR5cGU6ICIgKyByZW5kZXJlclR5cGUgKyAi
LiBGcmFtZXMgcmVjZWl2ZWQ6ICIKLSAgICAgICAgICAgICAgKyBmcmFtZXNSZWNlaXZlZCArICIu
IERyb3BwZWQ6ICIgKyBmcmFtZXNEcm9wcGVkICsgIi4gUmVuZGVyZWQ6ICIgKyBmcmFtZXNSZW5k
ZXJlZCk7Ci0gICAgICBpZiAoZnJhbWVzUmVjZWl2ZWQgPiAwICYmIGZyYW1lc1JlbmRlcmVkID4g
MCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRHVyYXRpb246ICIgKyAoaW50KSAodGltZVNp
bmNlRmlyc3RGcmFtZU5zIC8gMWU2KSArICIgbXMuIEZQUzogIgotICAgICAgICAgICAgICAgICsg
ZnJhbWVzUmVuZGVyZWQgKiAxZTkgLyB0aW1lU2luY2VGaXJzdEZyYW1lTnMpOwotICAgICAgICBM
b2dnaW5nLmQoVEFHLCAiRHJhdyB0aW1lOiAiICsgKGludCkgKGRyYXdUaW1lTnMgLyAoMTAwMCAq
IGZyYW1lc1JlbmRlcmVkKSkKLSAgICAgICAgICAgICAgICArICIgdXMuIENvcHkgdGltZTogIiAr
IChpbnQpIChjb3B5VGltZU5zIC8gKDEwMDAgKiBmcmFtZXNSZWNlaXZlZCkpICsgIiB1cyIpOwot
ICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFNjcmVlblNpemUoZmluYWwgaW50
IHNjcmVlbldpZHRoLCBmaW5hbCBpbnQgc2NyZWVuSGVpZ2h0KSB7Ci0gICAgICBzeW5jaHJvbml6
ZWQgKHVwZGF0ZUxheW91dExvY2spIHsKLSAgICAgICAgaWYgKHNjcmVlbldpZHRoID09IHRoaXMu
c2NyZWVuV2lkdGggJiYgc2NyZWVuSGVpZ2h0ID09IHRoaXMuc2NyZWVuSGVpZ2h0KSB7Ci0gICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiAr
IGlkICsgIi4gWXV2SW1hZ2VSZW5kZXJlci5zZXRTY3JlZW5TaXplOiAiICsgc2NyZWVuV2lkdGgg
KyAiIHggIgotICAgICAgICAgICAgICAgICsgc2NyZWVuSGVpZ2h0KTsKLSAgICAgICAgdGhpcy5z
Y3JlZW5XaWR0aCA9IHNjcmVlbldpZHRoOwotICAgICAgICB0aGlzLnNjcmVlbkhlaWdodCA9IHNj
cmVlbkhlaWdodDsKLSAgICAgICAgdXBkYXRlTGF5b3V0UHJvcGVydGllcyA9IHRydWU7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0UG9zaXRpb24oaW50IHgsIGludCB5LCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBl
IHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgewotICAgICAgZmluYWwgUmVjdCBsYXlvdXRJ
blBlcmNlbnRhZ2UgPQotICAgICAgICAgIG5ldyBSZWN0KHgsIHksIE1hdGgubWluKDEwMCwgeCAr
IHdpZHRoKSwgTWF0aC5taW4oMTAwLCB5ICsgaGVpZ2h0KSk7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KHVwZGF0ZUxheW91dExvY2spIHsKLSAgICAgICAgaWYgKGxheW91dEluUGVyY2VudGFnZS5lcXVh
bHModGhpcy5sYXlvdXRJblBlcmNlbnRhZ2UpICYmIHNjYWxpbmdUeXBlID09IHRoaXMuc2NhbGlu
Z1R5cGUKLSAgICAgICAgICAgICYmIG1pcnJvciA9PSB0aGlzLm1pcnJvcikgewotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCAr
ICIuIFl1dkltYWdlUmVuZGVyZXIuc2V0UG9zaXRpb246ICgiICsgeCArICIsICIgKyB5ICsgIikg
IgotICAgICAgICAgICAgICAgICsgd2lkdGggKyAiIHggIiArIGhlaWdodCArICIuIFNjYWxpbmc6
ICIgKyBzY2FsaW5nVHlwZSArICIuIE1pcnJvcjogIiArIG1pcnJvcik7Ci0gICAgICAgIHRoaXMu
bGF5b3V0SW5QZXJjZW50YWdlLnNldChsYXlvdXRJblBlcmNlbnRhZ2UpOwotICAgICAgICB0aGlz
LnNjYWxpbmdUeXBlID0gc2NhbGluZ1R5cGU7Ci0gICAgICAgIHRoaXMubWlycm9yID0gbWlycm9y
OwotICAgICAgICB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwcml2YXRlIHZvaWQgc2V0U2l6ZShmaW5hbCBpbnQgdmlkZW9XaWR0aCwgZmluYWwg
aW50IHZpZGVvSGVpZ2h0LCBmaW5hbCBpbnQgcm90YXRpb24pIHsKLSAgICAgIGlmICh2aWRlb1dp
ZHRoID09IHRoaXMudmlkZW9XaWR0aCAmJiB2aWRlb0hlaWdodCA9PSB0aGlzLnZpZGVvSGVpZ2h0
Ci0gICAgICAgICAgJiYgcm90YXRpb24gPT0gcm90YXRpb25EZWdyZWUpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgaWYgKHJlbmRlcmVyRXZlbnRzICE9IG51bGwpIHsKLSAgICAg
ICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBSZXBvcnRpbmcgZnJhbWUgcmVzb2x1
dGlvbiBjaGFuZ2VkIHRvICIgKyB2aWRlb1dpZHRoICsgIiB4ICIKLSAgICAgICAgICAgICAgICAr
IHZpZGVvSGVpZ2h0KTsKLSAgICAgICAgcmVuZGVyZXJFdmVudHMub25GcmFtZVJlc29sdXRpb25D
aGFuZ2VkKHZpZGVvV2lkdGgsIHZpZGVvSGVpZ2h0LCByb3RhdGlvbik7Ci0gICAgICB9Ci0KLSAg
ICAgIHN5bmNocm9uaXplZCAodXBkYXRlTGF5b3V0TG9jaykgewotICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiSUQ6ICIgKyBpZCArICIuIFl1dkltYWdlUmVuZGVyZXIuc2V0U2l6ZTogIiArIHZpZGVv
V2lkdGggKyAiIHggIgotICAgICAgICAgICAgICAgICsgdmlkZW9IZWlnaHQgKyAiIHJvdGF0aW9u
ICIgKyByb3RhdGlvbik7Ci0KLSAgICAgICAgdGhpcy52aWRlb1dpZHRoID0gdmlkZW9XaWR0aDsK
LSAgICAgICAgdGhpcy52aWRlb0hlaWdodCA9IHZpZGVvSGVpZ2h0OwotICAgICAgICByb3RhdGlv
bkRlZ3JlZSA9IHJvdGF0aW9uOwotICAgICAgICB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzID0gdHJ1
ZTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIiAgWXV2SW1hZ2VSZW5kZXJlci5zZXRTaXplIGRv
bmUuIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNo
cm9uaXplZCB2b2lkIHJlbmRlckZyYW1lKEk0MjBGcmFtZSBmcmFtZSkgewotICAgICAgaWYgKHN1
cmZhY2UgPT0gbnVsbCkgewotICAgICAgICAvLyBUaGlzIG9iamVjdCBoYXMgYmVlbiByZWxlYXNl
ZC4KLSAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAocmVuZGVyRnJhbWVUaHJlYWQgPT0gbnVsbCkg
ewotICAgICAgICByZW5kZXJGcmFtZVRocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0g
ICAgICB9Ci0gICAgICBpZiAoIXNlZW5GcmFtZSAmJiByZW5kZXJlckV2ZW50cyAhPSBudWxsKSB7
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsgIi4gUmVwb3J0aW5nIGZpcnN0
IHJlbmRlcmVkIGZyYW1lLiIpOwotICAgICAgICByZW5kZXJlckV2ZW50cy5vbkZpcnN0RnJhbWVS
ZW5kZXJlZCgpOwotICAgICAgfQotICAgICAgZnJhbWVzUmVjZWl2ZWQrKzsKLSAgICAgIHN5bmNo
cm9uaXplZCAocGVuZGluZ0ZyYW1lTG9jaykgewotICAgICAgICAvLyBDaGVjayBpbnB1dCBmcmFt
ZSBwYXJhbWV0ZXJzLgotICAgICAgICBpZiAoZnJhbWUueXV2RnJhbWUpIHsKLSAgICAgICAgICBp
ZiAoZnJhbWUueXV2U3RyaWRlc1swXSA8IGZyYW1lLndpZHRoIHx8IGZyYW1lLnl1dlN0cmlkZXNb
MV0gPCBmcmFtZS53aWR0aCAvIDIKLSAgICAgICAgICAgICAgfHwgZnJhbWUueXV2U3RyaWRlc1sy
XSA8IGZyYW1lLndpZHRoIC8gMikgewotICAgICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkluY29y
cmVjdCBzdHJpZGVzICIgKyBmcmFtZS55dXZTdHJpZGVzWzBdICsgIiwgIiArIGZyYW1lLnl1dlN0
cmlkZXNbMV0KLSAgICAgICAgICAgICAgICAgICAgKyAiLCAiICsgZnJhbWUueXV2U3RyaWRlc1sy
XSk7Ci0gICAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KHBlbmRpbmdGcmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgLy8gU2tpcCByZW5kZXJpbmcgb2Yg
dGhpcyBmcmFtZSBpZiBwcmV2aW91cyBmcmFtZSB3YXMgbm90IHJlbmRlcmVkIHlldC4KLSAgICAg
ICAgICBmcmFtZXNEcm9wcGVkKys7Ci0gICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFt
ZURvbmUoZnJhbWUpOwotICAgICAgICAgIHNlZW5GcmFtZSA9IHRydWU7Ci0gICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIHBlbmRpbmdGcmFtZSA9IGZyYW1lOwotICAgICAgfQot
ICAgICAgc2V0U2l6ZShmcmFtZS53aWR0aCwgZnJhbWUuaGVpZ2h0LCBmcmFtZS5yb3RhdGlvbkRl
Z3JlZSk7Ci0gICAgICBzZWVuRnJhbWUgPSB0cnVlOwotCi0gICAgICAvLyBSZXF1ZXN0IHJlbmRl
cmluZy4KLSAgICAgIHN1cmZhY2UucmVxdWVzdFJlbmRlcigpOwotICAgIH0KLSAgfQotCi0gIC8q
KiBQYXNzZXMgR0xTdXJmYWNlVmlldyB0byB2aWRlbyByZW5kZXJlci4gKi8KLSAgcHVibGljIHN0
YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRWaWV3KEdMU3VyZmFjZVZpZXcgc3VyZmFjZSwgUnVu
bmFibGUgZWdsQ29udGV4dFJlYWR5Q2FsbGJhY2spIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiVmlk
ZW9SZW5kZXJlckd1aS5zZXRWaWV3Iik7Ci0gICAgaW5zdGFuY2UgPSBuZXcgVmlkZW9SZW5kZXJl
ckd1aShzdXJmYWNlKTsKLSAgICBlZ2xDb250ZXh0UmVhZHkgPSBlZ2xDb250ZXh0UmVhZHlDYWxs
YmFjazsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIEVnbEJhc2UuQ29udGV4
dCBnZXRFZ2xCYXNlQ29udGV4dCgpIHsKLSAgICByZXR1cm4gZWdsQ29udGV4dDsKLSAgfQotCi0g
IC8qKiBSZWxlYXNlcyBHTFN1cmZhY2VWaWV3IHZpZGVvIHJlbmRlcmVyLiAqLwotICBwdWJsaWMg
c3RhdGljIHN5bmNocm9uaXplZCB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaWYgKGluc3RhbmNlID09
IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIlZpZGVv
UmVuZGVyZXJHdWkuZGlzcG9zZSIpOwotICAgIHN5bmNocm9uaXplZCAoaW5zdGFuY2UueXV2SW1h
Z2VSZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRl
cmVyIDogaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgICAgeXV2SW1hZ2VSZW5k
ZXJlci5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgICBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVy
cy5jbGVhcigpOwotICAgIH0KLSAgICByZW5kZXJGcmFtZVRocmVhZCA9IG51bGw7Ci0gICAgZHJh
d1RocmVhZCA9IG51bGw7Ci0gICAgaW5zdGFuY2Uuc3VyZmFjZSA9IG51bGw7Ci0gICAgZWdsQ29u
dGV4dCA9IG51bGw7Ci0gICAgZWdsQ29udGV4dFJlYWR5ID0gbnVsbDsKLSAgICBpbnN0YW5jZSA9
IG51bGw7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBWaWRlb1JlbmRlcmVyIHdpdGggdG9w
IGxlZnQgY29ybmVyIGF0ICh4LCB5KSBhbmQgcmVzb2x1dGlvbgotICAgKiAod2lkdGgsIGhlaWdo
dCkuIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbiBwZXJjZW50YWdlIG9mIHNjcmVlbiByZXNvbHV0aW9u
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBWaWRlb1JlbmRlcmVyIGNyZWF0ZUd1aShpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxp
bmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0g
ICAgWXV2SW1hZ2VSZW5kZXJlciBqYXZhR3VpUmVuZGVyZXIgPSBjcmVhdGUoeCwgeSwgd2lkdGgs
IGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvcik7Ci0gICAgcmV0dXJuIG5ldyBWaWRlb1JlbmRl
cmVyKGphdmFHdWlSZW5kZXJlcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFZpZGVvUmVuZGVy
ZXIuQ2FsbGJhY2tzIGNyZWF0ZUd1aVJlbmRlcmVyKAotICAgICAgaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBl
LCBib29sZWFuIG1pcnJvcikgewotICAgIHJldHVybiBjcmVhdGUoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgc2NhbGluZ1R5cGUsIG1pcnJvcik7Ci0gIH0KLQotICAvKioKLSAgICogQ3JlYXRlcyBWaWRl
b1JlbmRlcmVyLkNhbGxiYWNrcyB3aXRoIHRvcCBsZWZ0IGNvcm5lciBhdCAoeCwgeSkgYW5kCi0g
ICAqIHJlc29sdXRpb24gKHdpZHRoLCBoZWlnaHQpLiBBbGwgcGFyYW1ldGVycyBhcmUgaW4gcGVy
Y2VudGFnZSBvZgotICAgKiBzY3JlZW4gcmVzb2x1dGlvbi4KLSAgICovCi0gIHB1YmxpYyBzdGF0
aWMgc3luY2hyb25pemVkIFl1dkltYWdlUmVuZGVyZXIgY3JlYXRlKAotICAgICAgaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlLCBib29sZWFuIG1pcnJvcikgewotICAgIHJldHVybiBjcmVhdGUoeCwgeSwgd2lk
dGgsIGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvciwgbmV3IEdsUmVjdERyYXdlcigpKTsKLSAg
fQotCi0gIC8qKgotICAgKiBDcmVhdGVzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHdpdGggdG9w
IGxlZnQgY29ybmVyIGF0ICh4LCB5KSBhbmQgcmVzb2x1dGlvbiAod2lkdGgsIGhlaWdodCkuCi0g
ICAqIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbiBwZXJjZW50YWdlIG9mIHNjcmVlbiByZXNvbHV0aW9u
LiBUaGUgY3VzdG9tIHxkcmF3ZXJ8IHdpbGwgYmUgdXNlZCBmb3IKLSAgICogZHJhd2luZyBmcmFt
ZXMgb24gdGhlIEVHTFN1cmZhY2UuIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGNhbGxp
bmcgcmVsZWFzZSgpIG9uIHxkcmF3ZXJ8LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJv
bml6ZWQgWXV2SW1hZ2VSZW5kZXJlciBjcmVhdGUoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsCi0gICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwg
Ym9vbGVhbiBtaXJyb3IsIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcikgewotICAgIC8v
IENoZWNrIGRpc3BsYXkgcmVnaW9uIHBhcmFtZXRlcnMuCi0gICAgaWYgKHggPCAwIHx8IHggPiAx
MDAgfHwgeSA8IDAgfHwgeSA+IDEwMCB8fCB3aWR0aCA8IDAgfHwgd2lkdGggPiAxMDAgfHwgaGVp
Z2h0IDwgMAotICAgICAgICB8fCBoZWlnaHQgPiAxMDAgfHwgeCArIHdpZHRoID4gMTAwIHx8IHkg
KyBoZWlnaHQgPiAxMDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbmNv
cnJlY3Qgd2luZG93IHBhcmFtZXRlcnMuIik7Ci0gICAgfQotCi0gICAgaWYgKGluc3RhbmNlID09
IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBdHRlbXB0IHRvIGNy
ZWF0ZSB5dXYgcmVuZGVyZXIgYmVmb3JlIHNldHRpbmcgR0xTdXJmYWNlVmlldyIpOwotICAgIH0K
LSAgICBmaW5hbCBZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgPSBuZXcgWXV2SW1h
Z2VSZW5kZXJlcihpbnN0YW5jZS5zdXJmYWNlLAotICAgICAgICBpbnN0YW5jZS55dXZJbWFnZVJl
bmRlcmVycy5zaXplKCksIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNjYWxpbmdUeXBlLCBtaXJyb3Is
IGRyYXdlcik7Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykg
ewotICAgICAgaWYgKGluc3RhbmNlLm9uU3VyZmFjZUNyZWF0ZWRDYWxsZWQpIHsKLSAgICAgICAg
Ly8gb25TdXJmYWNlQ3JlYXRlZCBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgVmlkZW9SZW5k
ZXJlckd1aSAtCi0gICAgICAgIC8vIG5lZWQgdG8gY3JlYXRlIHRleHR1cmUgZm9yIG5ldyBpbWFn
ZSBhbmQgYWRkIGltYWdlIHRvIHRoZQotICAgICAgICAvLyByZW5kZXJpbmcgbGlzdC4KLSAgICAg
ICAgZmluYWwgQ291bnREb3duTGF0Y2ggY291bnREb3duTGF0Y2ggPSBuZXcgQ291bnREb3duTGF0
Y2goMSk7Ci0gICAgICAgIGluc3RhbmNlLnN1cmZhY2UucXVldWVFdmVudChuZXcgUnVubmFibGUo
KSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5jcmVhdGVUZXh0dXJlcygpOwotICAgICAgICAg
ICAgeXV2SW1hZ2VSZW5kZXJlci5zZXRTY3JlZW5TaXplKGluc3RhbmNlLnNjcmVlbldpZHRoLCBp
bnN0YW5jZS5zY3JlZW5IZWlnaHQpOwotICAgICAgICAgICAgY291bnREb3duTGF0Y2guY291bnRE
b3duKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgICAgLy8gV2FpdCBmb3IgdGFz
ayBjb21wbGV0aW9uLgotICAgICAgICB0cnkgewotICAgICAgICAgIGNvdW50RG93bkxhdGNoLmF3
YWl0KCk7Ci0gICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgLy8gQWRkIHl1diByZW5kZXJlciB0byByZW5kZXJpbmcgbGlzdC4KLSAgICAgIGluc3Rh
bmNlLnl1dkltYWdlUmVuZGVyZXJzLmFkZCh5dXZJbWFnZVJlbmRlcmVyKTsKLSAgICB9Ci0gICAg
cmV0dXJuIHl1dkltYWdlUmVuZGVyZXI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9u
aXplZCB2b2lkIHVwZGF0ZShWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5kZXJlciwgaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsCi0gICAgICBpbnQgaGVpZ2h0LCBSZW5kZXJlckNvbW1vbi5TY2Fs
aW5nVHlwZSBzY2FsaW5nVHlwZSwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiVmlkZW9SZW5kZXJlckd1aS51cGRhdGUiKTsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkF0dGVtcHQgdG8gdXBkYXRlIHl1
diByZW5kZXJlciBiZWZvcmUgc2V0dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIHN5
bmNocm9uaXplZCAoaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2
SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJl
cnMpIHsKLSAgICAgICAgaWYgKHl1dkltYWdlUmVuZGVyZXIgPT0gcmVuZGVyZXIpIHsKLSAgICAg
ICAgICB5dXZJbWFnZVJlbmRlcmVyLnNldFBvc2l0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIHNj
YWxpbmdUeXBlLCBtaXJyb3IpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRSZW5kZXJlckV2ZW50cygKLSAgICAg
IFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbmRlcmVyLCBSZW5kZXJlckNvbW1vbi5SZW5kZXJl
ckV2ZW50cyByZW5kZXJlckV2ZW50cykgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRl
cmVyR3VpLnNldFJlbmRlcmVyRXZlbnRzIik7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsK
LSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBdHRlbXB0IHRvIHNldCByZW5kZXJl
ciBldmVudHMgYmVmb3JlIHNldHRpbmcgR0xTdXJmYWNlVmlldyIpOwotICAgIH0KLSAgICBzeW5j
aHJvbml6ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dklt
YWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJz
KSB7Ci0gICAgICAgIGlmICh5dXZJbWFnZVJlbmRlcmVyID09IHJlbmRlcmVyKSB7Ci0gICAgICAg
ICAgeXV2SW1hZ2VSZW5kZXJlci5yZW5kZXJlckV2ZW50cyA9IHJlbmRlcmVyRXZlbnRzOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6
ZWQgdm9pZCByZW1vdmUoVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVuZGVyZXIpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5yZW1vdmUiKTsKLSAgICBpZiAoaW5zdGFu
Y2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkF0dGVtcHQg
dG8gcmVtb3ZlIHJlbmRlcmVyIGJlZm9yZSBzZXR0aW5nIEdMU3VyZmFjZVZpZXciKTsKLSAgICB9
Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAg
ZmluYWwgaW50IGluZGV4ID0gaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMuaW5kZXhPZihyZW5k
ZXJlcik7Ci0gICAgICBpZiAoaW5kZXggPT0gLTEpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywg
IkNvdWxkbid0IHJlbW92ZSByZW5kZXJlciAobm90IHByZXNlbnQgaW4gY3VycmVudCBsaXN0KSIp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMucmVt
b3ZlKGluZGV4KS5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldChWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5k
ZXJlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3VpLnJlc2V0Iik7Ci0g
ICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJBdHRlbXB0IHRvIHJlc2V0IHJlbmRlcmVyIGJlZm9yZSBzZXR0aW5nIEdMU3VyZmFjZVZp
ZXciKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVy
cykgewotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiBpbnN0
YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICBpZiAoeXV2SW1hZ2VSZW5kZXJlciA9
PSByZW5kZXJlcikgewotICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIucmVzZXQoKTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRT
dGFja1RyYWNlKFRocmVhZCB0aHJlYWQsIFN0cmluZyB0aHJlYWROYW1lKSB7Ci0gICAgaWYgKHRo
cmVhZCAhPSBudWxsKSB7Ci0gICAgICBTdGFja1RyYWNlRWxlbWVudFtdIHN0YWNrVHJhY2VzID0g
dGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChzdGFja1RyYWNlcy5sZW5ndGggPiAw
KSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsIHRocmVhZE5hbWUgKyAiIHN0YWNrcyB0cmFjZToi
KTsKLSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCBzdGFja1RyYWNlIDogc3RhY2tUcmFj
ZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCBzdGFja1RyYWNlLnRvU3RyaW5nKCkpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJv
bml6ZWQgdm9pZCBwcmludFN0YWNrVHJhY2VzKCkgewotICAgIGlmIChpbnN0YW5jZSA9PSBudWxs
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHByaW50U3RhY2tUcmFjZShyZW5kZXJGcmFt
ZVRocmVhZCwgIlJlbmRlciBmcmFtZSB0aHJlYWQiKTsKLSAgICBwcmludFN0YWNrVHJhY2UoZHJh
d1RocmVhZCwgIkRyYXcgdGhyZWFkIik7Ci0gIH0KLQotICBAU3VwcHJlc3NMaW50KCJOZXdBcGki
KQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25TdXJmYWNlQ3JlYXRlZChHTDEwIHVudXNl
ZCwgRUdMQ29uZmlnIGNvbmZpZykgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVy
R3VpLm9uU3VyZmFjZUNyZWF0ZWQiKTsKLSAgICAvLyBTdG9yZSByZW5kZXIgRUdMIGNvbnRleHQu
Ci0gICAgc3luY2hyb25pemVkIChWaWRlb1JlbmRlcmVyR3VpLmNsYXNzKSB7Ci0gICAgICBpZiAo
RWdsQmFzZTE0LmlzRUdMMTRTdXBwb3J0ZWQoKSkgewotICAgICAgICBlZ2xDb250ZXh0ID0gbmV3
IEVnbEJhc2UxNC5Db250ZXh0KEVHTDE0LmVnbEdldEN1cnJlbnRDb250ZXh0KCkpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgZWdsQ29udGV4dCA9IG5ldyBFZ2xCYXNlMTAuQ29udGV4dCgoKEVH
TDEwKSBFR0xDb250ZXh0LmdldEVHTCgpKS5lZ2xHZXRDdXJyZW50Q29udGV4dCgpKTsKLSAgICAg
IH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkgRUdMIENvbnRleHQ6
ICIgKyBlZ2xDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHl1dkltYWdlUmVu
ZGVyZXJzKSB7Ci0gICAgICAvLyBDcmVhdGUgdGV4dHVyZXMgZm9yIGFsbCBpbWFnZXMuCi0gICAg
ICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IHl1dkltYWdlUmVuZGVy
ZXJzKSB7Ci0gICAgICAgIHl1dkltYWdlUmVuZGVyZXIuY3JlYXRlVGV4dHVyZXMoKTsKLSAgICAg
IH0KLSAgICAgIG9uU3VyZmFjZUNyZWF0ZWRDYWxsZWQgPSB0cnVlOwotICAgIH0KLSAgICBHbFV0
aWwuY2hlY2tOb0dMRVMyRXJyb3IoIm9uU3VyZmFjZUNyZWF0ZWQgZG9uZSIpOwotICAgIEdMRVMy
MC5nbFBpeGVsU3RvcmVpKEdMRVMyMC5HTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICBHTEVT
MjAuZ2xDbGVhckNvbG9yKDAuMTVmLCAwLjE1ZiwgMC4xNWYsIDEuMGYpOwotCi0gICAgLy8gRmly
ZSBFR0wgY29udGV4dCByZWFkeSBldmVudC4KLSAgICBzeW5jaHJvbml6ZWQgKFZpZGVvUmVuZGVy
ZXJHdWkuY2xhc3MpIHsKLSAgICAgIGlmIChlZ2xDb250ZXh0UmVhZHkgIT0gbnVsbCkgewotICAg
ICAgICBlZ2xDb250ZXh0UmVhZHkucnVuKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU3VyZmFjZUNoYW5nZWQoR0wxMCB1bnVzZWQsIGludCB3
aWR0aCwgaW50IGhlaWdodCkgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3Vp
Lm9uU3VyZmFjZUNoYW5nZWQ6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0ICsgIiAgIik7Ci0g
ICAgc2NyZWVuV2lkdGggPSB3aWR0aDsKLSAgICBzY3JlZW5IZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
c3luY2hyb25pemVkICh5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgZm9yIChZdXZJbWFnZVJl
bmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiB5dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICB5
dXZJbWFnZVJlbmRlcmVyLnNldFNjcmVlblNpemUoc2NyZWVuV2lkdGgsIHNjcmVlbkhlaWdodCk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uRHJh
d0ZyYW1lKEdMMTAgdW51c2VkKSB7Ci0gICAgaWYgKGRyYXdUaHJlYWQgPT0gbnVsbCkgewotICAg
ICAgZHJhd1RocmVhZCA9IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAgfQotICAgIEdMRVMy
MC5nbFZpZXdwb3J0KDAsIDAsIHNjcmVlbldpZHRoLCBzY3JlZW5IZWlnaHQpOwotICAgIEdMRVMy
MC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICBzeW5jaHJvbml6ZWQg
KHl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1h
Z2VSZW5kZXJlciA6IHl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIHl1dkltYWdlUmVuZGVy
ZXIuZHJhdygpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9WaWRlb1NvdXJjZS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9T
b3VyY2UuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1Nv
dXJjZS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKioKLSAqIEphdmEgd3JhcHBlciBvZiBuYXRp
dmUgQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBWaWRlb1NvdXJj
ZSBleHRlbmRzIE1lZGlhU291cmNlIHsKLSAgcHVibGljIFZpZGVvU291cmNlKGxvbmcgbmF0aXZl
U291cmNlKSB7Ci0gICAgc3VwZXIobmF0aXZlU291cmNlKTsKLSAgfQotCi0gIC8qKgotICAgKiBD
YWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBjYXVzZSBmcmFtZXMgdG8gYmUgc2NhbGVkIGRvd24g
dG8gdGhlIHJlcXVlc3RlZCByZXNvbHV0aW9uLiBBbHNvLAotICAgKiBmcmFtZXMgd2lsbCBiZSBj
cm9wcGVkIHRvIG1hdGNoIHRoZSByZXF1ZXN0ZWQgYXNwZWN0IHJhdGlvLCBhbmQgZnJhbWVzIHdp
bGwgYmUgZHJvcHBlZCB0byBtYXRjaAotICAgKiB0aGUgcmVxdWVzdGVkIGZwcy4gVGhlIHJlcXVl
c3RlZCBhc3BlY3QgcmF0aW8gaXMgb3JpZW50YXRpb24gYWdub3N0aWMgYW5kIHdpbGwgYmUgYWRq
dXN0ZWQgdG8KLSAgICogbWFpbnRhaW4gdGhlIGlucHV0IG9yaWVudGF0aW9uLCBzbyBpdCBkb2Vz
bid0IG1hdHRlciBpZiBlLmcuIDEyODB4NzIwIG9yIDcyMHgxMjgwIGlzIHJlcXVlc3RlZC4KLSAg
ICovCi0gIHB1YmxpYyB2b2lkIGFkYXB0T3V0cHV0Rm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IGZwcykgewotICAgIG5hdGl2ZUFkYXB0T3V0cHV0Rm9ybWF0KG5hdGl2ZVNvdXJjZSwg
d2lkdGgsIGhlaWdodCwgZnBzKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lk
IG5hdGl2ZUFkYXB0T3V0cHV0Rm9ybWF0KAotICAgICAgbG9uZyBuYXRpdmVTb3VyY2UsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IGZwcyk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Zp
ZGVvVHJhY2suamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvVHJhY2su
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1RyYWNrLmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEz
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLQotLyoq
IEphdmEgdmVyc2lvbiBvZiBWaWRlb1RyYWNrSW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIFZp
ZGVvVHJhY2sgZXh0ZW5kcyBNZWRpYVN0cmVhbVRyYWNrIHsKLSAgcHJpdmF0ZSBmaW5hbCBMaW5r
ZWRMaXN0PFZpZGVvUmVuZGVyZXI+IHJlbmRlcmVycyA9IG5ldyBMaW5rZWRMaXN0PFZpZGVvUmVu
ZGVyZXI+KCk7Ci0KLSAgcHVibGljIFZpZGVvVHJhY2sobG9uZyBuYXRpdmVUcmFjaykgewotICAg
IHN1cGVyKG5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFJlbmRlcmVyKFZp
ZGVvUmVuZGVyZXIgcmVuZGVyZXIpIHsKLSAgICByZW5kZXJlcnMuYWRkKHJlbmRlcmVyKTsKLSAg
ICBuYXRpdmVBZGRSZW5kZXJlcihuYXRpdmVUcmFjaywgcmVuZGVyZXIubmF0aXZlVmlkZW9SZW5k
ZXJlcik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVSZW5kZXJlcihWaWRlb1JlbmRlcmVy
IHJlbmRlcmVyKSB7Ci0gICAgaWYgKCFyZW5kZXJlcnMucmVtb3ZlKHJlbmRlcmVyKSkgewotICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBuYXRpdmVSZW1vdmVSZW5kZXJlcihuYXRpdmVUcmFjaywg
cmVuZGVyZXIubmF0aXZlVmlkZW9SZW5kZXJlcik7Ci0gICAgcmVuZGVyZXIuZGlzcG9zZSgpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB3aGlsZSAoIXJlbmRlcmVycy5p
c0VtcHR5KCkpIHsKLSAgICAgIHJlbW92ZVJlbmRlcmVyKHJlbmRlcmVycy5nZXRGaXJzdCgpKTsK
LSAgICB9Ci0gICAgc3VwZXIuZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgdm9pZCBuYXRpdmVBZGRSZW5kZXJlcihsb25nIG5hdGl2ZVRyYWNrLCBsb25nIG5hdGl2ZVJl
bmRlcmVyKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVSZW1vdmVSZW5k
ZXJlcihsb25nIG5hdGl2ZVRyYWNrLCBsb25nIG5hdGl2ZVJlbmRlcmVyKTsKLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEv
c3JjL29yZy93ZWJydGMvWXV2Q29udmVydGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9ZdXZDb252ZXJ0ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9ZdXZDb252ZXJ0ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI1OSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRy
b2lkLm9wZW5nbC5HTEVTMTFFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7Ci0K
LS8qKgotICogQ2xhc3MgZm9yIGNvbnZlcnRpbmcgT0VTIHRleHR1cmVzIHRvIGEgWVVWIEJ5dGVC
dWZmZXIuIEl0IHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBvbiBhIHRocmVhZCB3aXRoCi0gKiBhbiBh
Y3RpdmUgRUdMIGNvbnRleHQsIGFuZCBvbmx5IGJlIHVzZWQgZnJvbSB0aGF0IHRocmVhZC4KLSAq
LwotY2xhc3MgWXV2Q29udmVydGVyIHsKLSAgLy8gVmVydGV4IGNvb3JkaW5hdGVzIGluIE5vcm1h
bGl6ZWQgRGV2aWNlIENvb3JkaW5hdGVzLCBpLmUuCi0gIC8vICgtMSwgLTEpIGlzIGJvdHRvbS1s
ZWZ0IGFuZCAoMSwgMSkgaXMgdG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGbG9h
dEJ1ZmZlciBERVZJQ0VfUkVDVEFOR0xFID0gR2xVdGlsLmNyZWF0ZUZsb2F0QnVmZmVyKG5ldyBm
bG9hdFtdIHsKLSAgICAgIC0xLjBmLCAtMS4wZiwgLy8gQm90dG9tIGxlZnQuCi0gICAgICAxLjBm
LCAtMS4wZiwgLy8gQm90dG9tIHJpZ2h0LgotICAgICAgLTEuMGYsIDEuMGYsIC8vIFRvcCBsZWZ0
LgotICAgICAgMS4wZiwgMS4wZiwgLy8gVG9wIHJpZ2h0LgotICB9KTsKLQotICAvLyBUZXh0dXJl
IGNvb3JkaW5hdGVzIC0gKDAsIDApIGlzIGJvdHRvbS1sZWZ0IGFuZCAoMSwgMSkgaXMgdG9wLXJp
Z2h0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGbG9hdEJ1ZmZlciBURVhUVVJFX1JFQ1RBTkdM
RSA9IEdsVXRpbC5jcmVhdGVGbG9hdEJ1ZmZlcihuZXcgZmxvYXRbXSB7Ci0gICAgICAwLjBmLCAw
LjBmLCAvLyBCb3R0b20gbGVmdC4KLSAgICAgIDEuMGYsIDAuMGYsIC8vIEJvdHRvbSByaWdodC4K
LSAgICAgIDAuMGYsIDEuMGYsIC8vIFRvcCBsZWZ0LgotICAgICAgMS4wZiwgMS4wZiAvLyBUb3Ag
cmlnaHQuCi0gIH0pOwotCi0gIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFZFUlRFWF9TSEFERVIgPQotICAgICAgICAidmFyeWluZyB2ZWMyIGludGVy
cF90YztcbiIKLSAgICAgICsgImF0dHJpYnV0ZSB2ZWM0IGluX3BvcztcbiIKLSAgICAgICsgImF0
dHJpYnV0ZSB2ZWM0IGluX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ1bmlmb3JtIG1h
dDQgdGV4TWF0cml4O1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4oKSB7XG4i
Ci0gICAgICArICIgICAgZ2xfUG9zaXRpb24gPSBpbl9wb3M7XG4iCi0gICAgICArICIgICAgaW50
ZXJwX3RjID0gKHRleE1hdHJpeCAqIGluX3RjKS54eTtcbiIKLSAgICAgICsgIn1cbiI7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZSQUdNRU5UX1NIQURFUiA9Ci0gICAgICAgICIj
ZXh0ZW5zaW9uIEdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwgOiByZXF1aXJlXG4iCi0gICAgICAr
ICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICsgInZhcnlpbmcgdmVjMiBpbnRl
cnBfdGM7XG4iCi0gICAgICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gc2FtcGxlckV4dGVybmFs
T0VTIG9lc1RleDtcbiIKLSAgICAgIC8vIERpZmZlcmVuY2UgaW4gdGV4dHVyZSBjb29yZGluYXRl
IGNvcnJlc3BvbmRpbmcgdG8gb25lCi0gICAgICAvLyBzdWItcGl4ZWwgaW4gdGhlIHggZGlyZWN0
aW9uLgotICAgICAgKyAidW5pZm9ybSB2ZWMyIHhVbml0O1xuIgotICAgICAgLy8gQ29sb3IgY29u
dmVyc2lvbiBjb2VmZmljaWVudHMsIGluY2x1ZGluZyBjb25zdGFudCB0ZXJtCi0gICAgICArICJ1
bmlmb3JtIHZlYzQgY29lZmZzO1xuIgotICAgICAgKyAiXG4iCi0gICAgICArICJ2b2lkIG1haW4o
KSB7XG4iCi0gICAgICAvLyBTaW5jZSB0aGUgYWxwaGEgcmVhZCBmcm9tIHRoZSB0ZXh0dXJlIGlz
IGFsd2F5cyAxLCB0aGlzIGNvdWxkCi0gICAgICAvLyBiZSB3cml0dGVuIGFzIGEgbWF0NCB4IHZl
YzQgbXVsdGlwbHkuIEhvd2V2ZXIsIHRoYXQgc2VlbXMgdG8KLSAgICAgIC8vIGdpdmUgYSB3b3Jz
ZSBmcmFtZXJhdGUsIHBvc3NpYmx5IGJlY2F1c2UgdGhlIGFkZGl0aW9uYWwKLSAgICAgIC8vIG11
bHRpcGxpZXMgYnkgMS4wIGNvbnN1bWUgcmVzb3VyY2VzLiBUT0RPKG5pc3NlKTogQ291bGQgYWxz
bwotICAgICAgLy8gdHJ5IHRvIGRvIGl0IGFzIGEgdmVjMyB4IG1hdDN4NCwgZm9sbG93ZWQgYnkg
YW4gYWRkIGluIG9mIGEKLSAgICAgIC8vIGNvbnN0YW50IHZlY3Rvci4KLSAgICAgICsgIiAgZ2xf
RnJhZ0NvbG9yLnIgPSBjb2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgotICAgICAgKyAiICAg
ICAgdGV4dHVyZTJEKG9lc1RleCwgaW50ZXJwX3RjIC0gMS41ICogeFVuaXQpLnJnYik7XG4iCi0g
ICAgICArICIgIGdsX0ZyYWdDb2xvci5nID0gY29lZmZzLmEgKyBkb3QoY29lZmZzLnJnYixcbiIK
LSAgICAgICsgIiAgICAgIHRleHR1cmUyRChvZXNUZXgsIGludGVycF90YyAtIDAuNSAqIHhVbml0
KS5yZ2IpO1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IuYiA9IGNvZWZmcy5hICsgZG90KGNv
ZWZmcy5yZ2IsXG4iCi0gICAgICArICIgICAgICB0ZXh0dXJlMkQob2VzVGV4LCBpbnRlcnBfdGMg
KyAwLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0NvbG9yLmEgPSBjb2Vm
ZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgotICAgICAgKyAiICAgICAgdGV4dHVyZTJEKG9lc1Rl
eCwgaW50ZXJwX3RjICsgMS41ICogeFVuaXQpLnJnYik7XG4iCi0gICAgICArICJ9XG4iOwotICAv
LyBjbGFuZy1mb3JtYXQgb24KLQotICBwcml2YXRlIGZpbmFsIGludCBmcmFtZUJ1ZmZlcklkOwot
ICBwcml2YXRlIGZpbmFsIGludCBmcmFtZVRleHR1cmVJZDsKLSAgcHJpdmF0ZSBmaW5hbCBHbFNo
YWRlciBzaGFkZXI7Ci0gIHByaXZhdGUgZmluYWwgaW50IHRleE1hdHJpeExvYzsKLSAgcHJpdmF0
ZSBmaW5hbCBpbnQgeFVuaXRMb2M7Ci0gIHByaXZhdGUgZmluYWwgaW50IGNvZWZmc0xvYzsKLSAg
cHJpdmF0ZSBmaW5hbCBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyIHRocmVhZENoZWNrZXIgPSBu
ZXcgVGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlcigpOwotICBwcml2YXRlIGludCBmcmFtZUJ1ZmZl
cldpZHRoOwotICBwcml2YXRlIGludCBmcmFtZUJ1ZmZlckhlaWdodDsKLSAgcHJpdmF0ZSBib29s
ZWFuIHJlbGVhc2VkID0gZmFsc2U7Ci0KLSAgLyoqCi0gICAqIFRoaXMgY2xhc3Mgc2hvdWxkIGJl
IGNvbnN0cnVjdGVkIG9uIGEgdGhyZWFkIHRoYXQgaGFzIGFuIGFjdGl2ZSBFR0wgY29udGV4dC4K
LSAgICovCi0gIHB1YmxpYyBZdXZDb252ZXJ0ZXIoKSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVj
a0lzT25WYWxpZFRocmVhZCgpOwotICAgIGZyYW1lVGV4dHVyZUlkID0gR2xVdGlsLmdlbmVyYXRl
VGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgdGhpcy5mcmFtZUJ1ZmZlcldpZHRo
ID0gMDsKLSAgICB0aGlzLmZyYW1lQnVmZmVySGVpZ2h0ID0gMDsKLQotICAgIC8vIENyZWF0ZSBm
cmFtZWJ1ZmZlciBvYmplY3QgYW5kIGJpbmQgaXQuCi0gICAgZmluYWwgaW50IGZyYW1lQnVmZmVy
c1tdID0gbmV3IGludFsxXTsKLSAgICBHTEVTMjAuZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgZnJhbWVC
dWZmZXJzLCAwKTsKLSAgICBmcmFtZUJ1ZmZlcklkID0gZnJhbWVCdWZmZXJzWzBdOwotICAgIEdM
RVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVy
SWQpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiR2VuZXJhdGUgZnJhbWVidWZmZXIi
KTsKLQotICAgIC8vIEF0dGFjaCB0aGUgdGV4dHVyZSB0byB0aGUgZnJhbWVidWZmZXIgYXMgY29s
b3IgYXR0YWNobWVudC4KLSAgICBHTEVTMjAuZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTEVTMjAu
R0xfRlJBTUVCVUZGRVIsIEdMRVMyMC5HTF9DT0xPUl9BVFRBQ0hNRU5UMCwKLSAgICAgICAgR0xF
UzIwLkdMX1RFWFRVUkVfMkQsIGZyYW1lVGV4dHVyZUlkLCAwKTsKLSAgICBHbFV0aWwuY2hlY2tO
b0dMRVMyRXJyb3IoIkF0dGFjaCB0ZXh0dXJlIHRvIGZyYW1lYnVmZmVyIik7Ci0KLSAgICAvLyBS
ZXN0b3JlIG5vcm1hbCBmcmFtZWJ1ZmZlci4KLSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIo
R0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLQotICAgIHNoYWRlciA9IG5ldyBHbFNoYWRlcihW
RVJURVhfU0hBREVSLCBGUkFHTUVOVF9TSEFERVIpOwotICAgIHNoYWRlci51c2VQcm9ncmFtKCk7
Ci0gICAgdGV4TWF0cml4TG9jID0gc2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigidGV4TWF0cml4
Iik7Ci0gICAgeFVuaXRMb2MgPSBzaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ4VW5pdCIpOwot
ICAgIGNvZWZmc0xvYyA9IHNoYWRlci5nZXRVbmlmb3JtTG9jYXRpb24oImNvZWZmcyIpOwotICAg
IEdMRVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJvZXNUZXgiKSwg
MCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJJbml0aWFsaXplIGZyYWdtZW50IHNo
YWRlciB1bmlmb3JtIHZhbHVlcy4iKTsKLSAgICAvLyBJbml0aWFsaXplIHZlcnRleCBzaGFkZXIg
YXR0cmlidXRlcy4KLSAgICBzaGFkZXIuc2V0VmVydGV4QXR0cmliQXJyYXkoImluX3BvcyIsIDIs
IERFVklDRV9SRUNUQU5HTEUpOwotICAgIC8vIElmIHRoZSB3aWR0aCBpcyBub3QgYSBtdWx0aXBs
ZSBvZiA0IHBpeGVscywgdGhlIHRleHR1cmUKLSAgICAvLyB3aWxsIGJlIHNjYWxlZCB1cCBzbGln
aHRseSBhbmQgY2xpcHBlZCBhdCB0aGUgcmlnaHQgYm9yZGVyLgotICAgIHNoYWRlci5zZXRWZXJ0
ZXhBdHRyaWJBcnJheSgiaW5fdGMiLCAyLCBURVhUVVJFX1JFQ1RBTkdMRSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBjb252ZXJ0KEJ5dGVCdWZmZXIgYnVmLCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBzdHJpZGUsIGludCBzcmNUZXh0dXJlSWQsCi0gICAgICBmbG9hdFtdIHRyYW5zZm9ybU1h
dHJpeCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBp
ZiAocmVsZWFzZWQpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIll1
dkNvbnZlcnRlci5jb252ZXJ0IGNhbGxlZCBvbiByZWxlYXNlZCBvYmplY3QiKTsKLSAgICB9Ci0K
LSAgICAvLyBXZSBkcmF3IGludG8gYSBidWZmZXIgbGFpZCBvdXQgbGlrZQotICAgIC8vCi0gICAg
Ly8gICAgKy0tLS0tLS0tLSsKLSAgICAvLyAgICB8ICAgICAgICAgfAotICAgIC8vICAgIHwgIFkg
ICAgICB8Ci0gICAgLy8gICAgfCAgICAgICAgIHwKLSAgICAvLyAgICB8ICAgICAgICAgfAotICAg
IC8vICAgICstLS0tKy0tLS0rCi0gICAgLy8gICAgfCBVICB8IFYgIHwKLSAgICAvLyAgICB8ICAg
IHwgICAgfAotICAgIC8vICAgICstLS0tKy0tLS0rCi0gICAgLy8KLSAgICAvLyBJbiBtZW1vcnks
IHdlIHVzZSB0aGUgc2FtZSBzdHJpZGUgZm9yIGFsbCBvZiBZLCBVIGFuZCBWLiBUaGUKLSAgICAv
LyBVIGRhdGEgc3RhcnRzIGF0IG9mZnNldCB8aGVpZ2h0fCAqIHxzdHJpZGV8IGZyb20gdGhlIFkg
ZGF0YSwKLSAgICAvLyBhbmQgdGhlIFYgZGF0YSBzdGFydHMgYXQgYXQgb2Zmc2V0IHxzdHJpZGUv
MnwgZnJvbSB0aGUgVQotICAgIC8vIGRhdGEsIHdpdGggcm93cyBvZiBVIGFuZCBWIGRhdGEgYWx0
ZXJuYXRpbmcuCi0gICAgLy8KLSAgICAvLyBOb3csIGl0IHdvdWxkIGhhdmUgbWFkZSBzZW5zZSB0
byBhbGxvY2F0ZSBhIHBpeGVsIGJ1ZmZlciB3aXRoCi0gICAgLy8gYSBzaW5nbGUgYnl0ZSBwZXIg
cGl4ZWwgKEVHTDEwLkVHTF9DT0xPUl9CVUZGRVJfVFlQRSwKLSAgICAvLyBFR0wxMC5FR0xfTFVN
SU5BTkNFX0JVRkZFUiwpLCBidXQgdGhhdCBzZWVtcyB0byBiZQotICAgIC8vIHVuc3VwcG9ydGVk
IGJ5IGRldmljZXMuIFNvIGRvIHRoZSBmb2xsb3dpbmcgaGFjazogQWxsb2NhdGUgYW4KLSAgICAv
LyBSR0JBIGJ1ZmZlciwgb2Ygd2lkdGggfHN0cmlkZXwvNC4gVG8gcmVuZGVyIGVhY2ggb2YgdGhl
c2UKLSAgICAvLyBsYXJnZSBwaXhlbHMsIHNhbXBsZSB0aGUgdGV4dHVyZSBhdCA0IGRpZmZlcmVu
dCB4IGNvb3JkaW5hdGVzCi0gICAgLy8gYW5kIHN0b3JlIHRoZSByZXN1bHRzIGluIHRoZSBmb3Vy
IGNvbXBvbmVudHMuCi0gICAgLy8KLSAgICAvLyBTaW5jZSB0aGUgViBkYXRhIG5lZWRzIHRvIHN0
YXJ0IG9uIGEgYm91bmRhcnkgb2Ygc3VjaCBhCi0gICAgLy8gbGFyZ2VyIHBpeGVsLCBpdCBpcyBu
b3Qgc3VmZmljaWVudCB0aGF0IHxzdHJpZGV8IGlzIGV2ZW4sIGl0Ci0gICAgLy8gaGFzIHRvIGJl
IGEgbXVsdGlwbGUgb2YgOCBwaXhlbHMuCi0KLSAgICBpZiAoc3RyaWRlICUgOCAhPSAwKSB7Ci0g
ICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHN0cmlkZSwg
bXVzdCBiZSBhIG11bHRpcGxlIG9mIDgiKTsKLSAgICB9Ci0gICAgaWYgKHN0cmlkZSA8IHdpZHRo
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHN0
cmlkZSwgbXVzdCA+PSB3aWR0aCIpOwotICAgIH0KLQotICAgIGludCB5X3dpZHRoID0gKHdpZHRo
ICsgMykgLyA0OwotICAgIGludCB1dl93aWR0aCA9ICh3aWR0aCArIDcpIC8gODsKLSAgICBpbnQg
dXZfaGVpZ2h0ID0gKGhlaWdodCArIDEpIC8gMjsKLSAgICBpbnQgdG90YWxfaGVpZ2h0ID0gaGVp
Z2h0ICsgdXZfaGVpZ2h0OwotICAgIGludCBzaXplID0gc3RyaWRlICogdG90YWxfaGVpZ2h0Owot
Ci0gICAgaWYgKGJ1Zi5jYXBhY2l0eSgpIDwgc2l6ZSkgewotICAgICAgdGhyb3cgbmV3IElsbGVn
YWxBcmd1bWVudEV4Y2VwdGlvbigiWXV2Q29udmVydGVyLmNvbnZlcnQgY2FsbGVkIHdpdGggdG9v
IHNtYWxsIGJ1ZmZlciIpOwotICAgIH0KLSAgICAvLyBQcm9kdWNlIGEgZnJhbWUgYnVmZmVyIHN0
YXJ0aW5nIGF0IHRvcC1sZWZ0IGNvcm5lciwgbm90Ci0gICAgLy8gYm90dG9tLWxlZnQuCi0gICAg
dHJhbnNmb3JtTWF0cml4ID0KLSAgICAgICAgUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNl
cyh0cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9uLnZlcnRpY2FsRmxpcE1hdHJpeCgpKTsK
LQotICAgIC8vIEJpbmQgb3VyIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1
ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVySWQpOwotICAgIEdsVXRpbC5j
aGVja05vR0xFUzJFcnJvcigiZ2xCaW5kRnJhbWVidWZmZXIiKTsKLQotICAgIGlmIChmcmFtZUJ1
ZmZlcldpZHRoICE9IHN0cmlkZSAvIDQgfHwgZnJhbWVCdWZmZXJIZWlnaHQgIT0gdG90YWxfaGVp
Z2h0KSB7Ci0gICAgICBmcmFtZUJ1ZmZlcldpZHRoID0gc3RyaWRlIC8gNDsKLSAgICAgIGZyYW1l
QnVmZmVySGVpZ2h0ID0gdG90YWxfaGVpZ2h0OwotICAgICAgLy8gKFJlKS1BbGxvY2F0ZSB0ZXh0
dXJlLgotICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOwot
ICAgICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIGZyYW1lVGV4
dHVyZUlkKTsKLSAgICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQs
IDAsIEdMRVMyMC5HTF9SR0JBLCBmcmFtZUJ1ZmZlcldpZHRoLAotICAgICAgICAgIGZyYW1lQnVm
ZmVySGVpZ2h0LCAwLCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIG51
bGwpOwotCi0gICAgICAvLyBDaGVjayB0aGF0IHRoZSBmcmFtZWJ1ZmZlciBpcyBpbiBhIGdvb2Qg
c3RhdGUuCi0gICAgICBmaW5hbCBpbnQgc3RhdHVzID0gR0xFUzIwLmdsQ2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhHTEVTMjAuR0xfRlJBTUVCVUZGRVIpOwotICAgICAgaWYgKHN0YXR1cyAhPSBHTEVT
MjAuR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbigiRnJhbWVidWZmZXIgbm90IGNvbXBsZXRlLCBzdGF0dXM6ICIgKyBzdGF0
dXMpOwotICAgICAgfQotICAgIH0KLQotICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIw
LkdMX1RFWFRVUkUwKTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMTFFeHQuR0xfVEVY
VFVSRV9FWFRFUk5BTF9PRVMsIHNyY1RleHR1cmVJZCk7Ci0gICAgR0xFUzIwLmdsVW5pZm9ybU1h
dHJpeDRmdih0ZXhNYXRyaXhMb2MsIDEsIGZhbHNlLCB0cmFuc2Zvcm1NYXRyaXgsIDApOwotCi0g
ICAgLy8gRHJhdyBZCi0gICAgR0xFUzIwLmdsVmlld3BvcnQoMCwgMCwgeV93aWR0aCwgaGVpZ2h0
KTsKLSAgICAvLyBNYXRyaXggKiAoMTswOzA7MCkgLyB3aWR0aC4gTm90ZSB0aGF0IG9wZW5nbCB1
c2VzIGNvbHVtbiBtYWpvciBvcmRlci4KLSAgICBHTEVTMjAuZ2xVbmlmb3JtMmYoeFVuaXRMb2Ms
IHRyYW5zZm9ybU1hdHJpeFswXSAvIHdpZHRoLCB0cmFuc2Zvcm1NYXRyaXhbMV0gLyB3aWR0aCk7
Ci0gICAgLy8gWSdVVjQ0NCB0byBSR0I4ODgsIHNlZQotICAgIC8vIGh0dHBzOi8vZW4ud2lraXBl
ZGlhLm9yZy93aWtpL1lVViNZLjI3VVY0NDRfdG9fUkdCODg4X2NvbnZlcnNpb24uCi0gICAgLy8g
V2UgdXNlIHRoZSBJVFUtUiBjb2VmZmljaWVudHMgZm9yIFUgYW5kIFYgKi8KLSAgICBHTEVTMjAu
Z2xVbmlmb3JtNGYoY29lZmZzTG9jLCAwLjI5OWYsIDAuNTg3ZiwgMC4xMTRmLCAwLjBmKTsKLSAg
ICBHTEVTMjAuZ2xEcmF3QXJyYXlzKEdMRVMyMC5HTF9UUklBTkdMRV9TVFJJUCwgMCwgNCk7Ci0K
LSAgICAvLyBEcmF3IFUKLSAgICBHTEVTMjAuZ2xWaWV3cG9ydCgwLCBoZWlnaHQsIHV2X3dpZHRo
LCB1dl9oZWlnaHQpOwotICAgIC8vIE1hdHJpeCAqICgxOzA7MDswKSAvICh3aWR0aCAvIDIpLiBO
b3RlIHRoYXQgb3BlbmdsIHVzZXMgY29sdW1uIG1ham9yIG9yZGVyLgotICAgIEdMRVMyMC5nbFVu
aWZvcm0yZigKLSAgICAgICAgeFVuaXRMb2MsIDIuMGYgKiB0cmFuc2Zvcm1NYXRyaXhbMF0gLyB3
aWR0aCwgMi4wZiAqIHRyYW5zZm9ybU1hdHJpeFsxXSAvIHdpZHRoKTsKLSAgICBHTEVTMjAuZ2xV
bmlmb3JtNGYoY29lZmZzTG9jLCAtMC4xNjlmLCAtMC4zMzFmLCAwLjQ5OWYsIDAuNWYpOwotICAg
IEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIwLkdMX1RSSUFOR0xFX1NUUklQLCAwLCA0KTsKLQot
ICAgIC8vIERyYXcgVgotICAgIEdMRVMyMC5nbFZpZXdwb3J0KHN0cmlkZSAvIDgsIGhlaWdodCwg
dXZfd2lkdGgsIHV2X2hlaWdodCk7Ci0gICAgR0xFUzIwLmdsVW5pZm9ybTRmKGNvZWZmc0xvYywg
MC40OTlmLCAtMC40MThmLCAtMC4wODEzZiwgMC41Zik7Ci0gICAgR0xFUzIwLmdsRHJhd0FycmF5
cyhHTEVTMjAuR0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotCi0gICAgR0xFUzIwLmdsUmVhZFBp
eGVscygKLSAgICAgICAgMCwgMCwgZnJhbWVCdWZmZXJXaWR0aCwgZnJhbWVCdWZmZXJIZWlnaHQs
IEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgYnVmKTsKLQotICAgIEds
VXRpbC5jaGVja05vR0xFUzJFcnJvcigiWXV2Q29udmVydGVyLmNvbnZlcnQiKTsKLQotICAgIC8v
IFJlc3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZl
cihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJELCAwKTsKLQotICAgIC8vIFVuYmluZCB0ZXh0dXJlLiBSZXBvcnRl
ZGx5IG5lZWRlZCBvbiBzb21lIGRldmljZXMgdG8gZ2V0Ci0gICAgLy8gdGhlIHRleHR1cmUgdXBk
YXRlZCBmcm9tIHRoZSBjYW1lcmEuCi0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzExRXh0
LkdMX1RFWFRVUkVfRVhURVJOQUxfT0VTLCAwKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbGVh
c2UoKSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIHJl
bGVhc2VkID0gdHJ1ZTsKLSAgICBzaGFkZXIucmVsZWFzZSgpOwotICAgIEdMRVMyMC5nbERlbGV0
ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7ZnJhbWVUZXh0dXJlSWR9LCAwKTsKLSAgICBHTEVTMjAu
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgbmV3IGludFtdIHtmcmFtZUJ1ZmZlcklkfSwgMCk7Ci0g
ICAgZnJhbWVCdWZmZXJXaWR0aCA9IDA7Ci0gICAgZnJhbWVCdWZmZXJIZWlnaHQgPSAwOwotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0F1ZGlvU291cmNlLmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9BdWRpb1NvdXJjZS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL0F1ZGlvU291cmNlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8q
KgotICogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBBdWRpb1NvdXJjZUludGVyZmFjZS4gIFVzZWQg
YXMgdGhlIHNvdXJjZSBmb3Igb25lIG9yCi0gKiBtb3JlIHtAY29kZSBBdWRpb1RyYWNrfSBvYmpl
Y3RzLgotICovCi1wdWJsaWMgY2xhc3MgQXVkaW9Tb3VyY2UgZXh0ZW5kcyBNZWRpYVNvdXJjZSB7
Ci0gIHB1YmxpYyBBdWRpb1NvdXJjZShsb25nIG5hdGl2ZVNvdXJjZSkgewotICAgIHN1cGVyKG5h
dGl2ZVNvdXJjZSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQXVkaW9UcmFjay5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQXVkaW9UcmFjay5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0F1ZGlvVHJhY2suamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDE4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotLyoqIEphdmEgd3JhcHBlciBmb3IgYSBDKysgQXVkaW9UcmFja0ludGVyZmFj
ZSAqLwotcHVibGljIGNsYXNzIEF1ZGlvVHJhY2sgZXh0ZW5kcyBNZWRpYVN0cmVhbVRyYWNrIHsK
LSAgcHVibGljIEF1ZGlvVHJhY2sobG9uZyBuYXRpdmVUcmFjaykgewotICAgIHN1cGVyKG5hdGl2
ZVRyYWNrKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYWxsU2Vzc2lvbkZpbGVS
b3RhdGluZ0xvZ1NpbmsuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbGxT
ZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luay5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL0NhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luay5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1wdWJsaWMgY2xhc3MgQ2FsbFNlc3Npb25GaWxlUm90YXRpbmdMb2dTaW5rIHsK
LSAgc3RhdGljIHsKLSAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImppbmdsZV9wZWVyY29ubmVjdGlv
bl9zbyIpOwotICB9Ci0KLSAgcHJpdmF0ZSBsb25nIG5hdGl2ZVNpbms7Ci0KLSAgcHVibGljIHN0
YXRpYyBieXRlW10gZ2V0TG9nRGF0YShTdHJpbmcgZGlyUGF0aCkgewotICAgIHJldHVybiBuYXRp
dmVHZXRMb2dEYXRhKGRpclBhdGgpOwotICB9Ci0KLSAgcHVibGljIENhbGxTZXNzaW9uRmlsZVJv
dGF0aW5nTG9nU2luaygKLSAgICAgIFN0cmluZyBkaXJQYXRoLCBpbnQgbWF4RmlsZVNpemUsIExv
Z2dpbmcuU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKLSAgICBuYXRpdmVTaW5rID0gbmF0aXZlQWRkU2lu
ayhkaXJQYXRoLCBtYXhGaWxlU2l6ZSwgc2V2ZXJpdHkub3JkaW5hbCgpKTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgaWYgKG5hdGl2ZVNpbmsgIT0gMCkgewotICAgICAg
bmF0aXZlRGVsZXRlU2luayhuYXRpdmVTaW5rKTsKLSAgICAgIG5hdGl2ZVNpbmsgPSAwOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUFkZFNpbmsoU3Ry
aW5nIGRpclBhdGgsIGludCBtYXhGaWxlU2l6ZSwgaW50IHNldmVyaXR5KTsKLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlRGVsZXRlU2luayhsb25nIG5hdGl2ZVNpbmspOwotICBw
cml2YXRlIHN0YXRpYyBuYXRpdmUgYnl0ZVtdIG5hdGl2ZUdldExvZ0RhdGEoU3RyaW5nIGRpclBh
dGgpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXIuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlci5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQu
Q2FwdHVyZUZvcm1hdDsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotCi1pbXBv
cnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDYW1lcmExQ2FwdHVyZXIgZXh0ZW5k
cyBDYW1lcmFDYXB0dXJlciB7Ci0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0
dXJlOwotCi0gIHB1YmxpYyBDYW1lcmExQ2FwdHVyZXIoCi0gICAgICBTdHJpbmcgY2FtZXJhTmFt
ZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyLCBib29sZWFuIGNhcHR1cmVUb1Rl
eHR1cmUpIHsKLSAgICBzdXBlcihjYW1lcmFOYW1lLCBldmVudHNIYW5kbGVyLCBuZXcgQ2FtZXJh
MUVudW1lcmF0b3IoY2FwdHVyZVRvVGV4dHVyZSkpOwotCi0gICAgdGhpcy5jYXB0dXJlVG9UZXh0
dXJlID0gY2FwdHVyZVRvVGV4dHVyZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQg
dm9pZCBjcmVhdGVDYW1lcmFTZXNzaW9uKENhbWVyYVNlc3Npb24uQ3JlYXRlU2Vzc2lvbkNhbGxi
YWNrIGNyZWF0ZVNlc3Npb25DYWxsYmFjaywKLSAgICAgIENhbWVyYVNlc3Npb24uRXZlbnRzIGV2
ZW50cywgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRleHQsCi0gICAgICBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciwgU3RyaW5nIGNhbWVyYU5hbWUsIGludCB3aWR0aCwg
aW50IGhlaWdodCwKLSAgICAgIGludCBmcmFtZXJhdGUpIHsKLSAgICBDYW1lcmExU2Vzc2lvbi5j
cmVhdGUoY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLCBldmVudHMsIGNhcHR1cmVUb1RleHR1cmUsIGFw
cGxpY2F0aW9uQ29udGV4dCwKLSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENhbWVyYTFF
bnVtZXJhdG9yLmdldENhbWVyYUluZGV4KGNhbWVyYU5hbWUpLCB3aWR0aCwgaGVpZ2h0LAotICAg
ICAgICBmcmFtZXJhdGUpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFF
bnVtZXJhdG9yLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExRW51
bWVyYXRvci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVy
YTFFbnVtZXJhdG9yLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxODQgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5T
eXN0ZW1DbG9jazsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRp
bC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1
cmVGb3JtYXQ7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xh
c3MgQ2FtZXJhMUVudW1lcmF0b3IgaW1wbGVtZW50cyBDYW1lcmFFbnVtZXJhdG9yIHsKLSAgcHJp
dmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJDYW1lcmExRW51bWVyYXRvciI7Ci0gIC8v
IEVhY2ggZW50cnkgY29udGFpbnMgdGhlIHN1cHBvcnRlZCBmb3JtYXRzIGZvciBjb3JyZXNwb25k
aW5nIGNhbWVyYSBpbmRleC4gVGhlIGZvcm1hdHMgZm9yIGFsbAotICAvLyBjYW1lcmFzIGFyZSBl
bnVtZXJhdGVkIG9uIHRoZSBmaXJzdCBjYWxsIHRvIGdldFN1cHBvcnRlZEZvcm1hdHMoKSwgYW5k
IGNhY2hlZCBmb3IgZnV0dXJlCi0gIC8vIHJlZmVyZW5jZS4KLSAgcHJpdmF0ZSBzdGF0aWMgTGlz
dDxMaXN0PENhcHR1cmVGb3JtYXQ+PiBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRzOwotCi0gIHByaXZh
dGUgZmluYWwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlOwotCi0gIHB1YmxpYyBDYW1lcmExRW51
bWVyYXRvcigpIHsKLSAgICB0aGlzKHRydWUgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyk7Ci0gIH0K
LQotICBwdWJsaWMgQ2FtZXJhMUVudW1lcmF0b3IoYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7
Ci0gICAgdGhpcy5jYXB0dXJlVG9UZXh0dXJlID0gY2FwdHVyZVRvVGV4dHVyZTsKLSAgfQotCi0g
IC8vIFJldHVybnMgZGV2aWNlIG5hbWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgbmV3
IFZpZGVvQ2FwdHVyZXJBbmRyb2lkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIFN0cmluZ1tdIGdl
dERldmljZU5hbWVzKCkgewotICAgIEFycmF5TGlzdDxTdHJpbmc+IG5hbWVzTGlzdCA9IG5ldyBB
cnJheUxpc3Q8PigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEuZ2V0TnVtYmVyT2ZDYW1lcmFzKCk7ICsraSkgewotICAgICAgU3RyaW5nIG5hbWUgPSBn
ZXREZXZpY2VOYW1lKGkpOwotICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewotICAgICAgICBuYW1l
c0xpc3QuYWRkKG5hbWUpOwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSW5kZXg6ICIgKyBpICsg
Ii4gIiArIG5hbWUpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIklu
ZGV4OiAiICsgaSArICIuIEZhaWxlZCB0byBxdWVyeSBjYW1lcmEgbmFtZS4iKTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgU3RyaW5nW10gbmFtZXNBcnJheSA9IG5ldyBTdHJpbmdbbmFtZXNMaXN0LnNp
emUoKV07Ci0gICAgcmV0dXJuIG5hbWVzTGlzdC50b0FycmF5KG5hbWVzQXJyYXkpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzRnJvbnRGYWNpbmcoU3RyaW5nIGRldmlj
ZU5hbWUpIHsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8gPSBn
ZXRDYW1lcmFJbmZvKGdldENhbWVyYUluZGV4KGRldmljZU5hbWUpKTsKLSAgICByZXR1cm4gaW5m
byAhPSBudWxsICYmIGluZm8uZmFjaW5nID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVy
YUluZm8uQ0FNRVJBX0ZBQ0lOR19GUk9OVDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
Ym9vbGVhbiBpc0JhY2tGYWNpbmcoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICBhbmRyb2lkLmhh
cmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8gPSBnZXRDYW1lcmFJbmZvKGdldENhbWVyYUlu
ZGV4KGRldmljZU5hbWUpKTsKLSAgICByZXR1cm4gaW5mbyAhPSBudWxsICYmIGluZm8uZmFjaW5n
ID09IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19CQUNL
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBMaXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1
cHBvcnRlZEZvcm1hdHMoU3RyaW5nIGRldmljZU5hbWUpIHsKLSAgICByZXR1cm4gZ2V0U3VwcG9y
dGVkRm9ybWF0cyhnZXRDYW1lcmFJbmRleChkZXZpY2VOYW1lKSk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FwdHVyZXIoCi0gICAgICBT
dHJpbmcgZGV2aWNlTmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVy
IGV2ZW50c0hhbmRsZXIpIHsKLSAgICByZXR1cm4gbmV3IENhbWVyYTFDYXB0dXJlcihkZXZpY2VO
YW1lLCBldmVudHNIYW5kbGVyLCBjYXB0dXJlVG9UZXh0dXJlKTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gZ2V0Q2FtZXJhSW5mbyhp
bnQgaW5kZXgpIHsKLSAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8g
PSBuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ2FtZXJhSW5mbygpOwotICAgIHRyeSB7Ci0g
ICAgICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXRDYW1lcmFJbmZvKGluZGV4LCBpbmZvKTsK
LSAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImdldENh
bWVyYUluZm8gZmFpbGVkIG9uIGluZGV4ICIgKyBpbmRleCwgZSk7Ci0gICAgICByZXR1cm4gbnVs
bDsKLSAgICB9Ci0gICAgcmV0dXJuIGluZm87Ci0gIH0KLQotICBzdGF0aWMgc3luY2hyb25pemVk
IExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhpbnQgY2FtZXJhSWQpIHsK
LSAgICBpZiAoY2FjaGVkU3VwcG9ydGVkRm9ybWF0cyA9PSBudWxsKSB7Ci0gICAgICBjYWNoZWRT
dXBwb3J0ZWRGb3JtYXRzID0gbmV3IEFycmF5TGlzdDxMaXN0PENhcHR1cmVGb3JtYXQ+PigpOwot
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1i
ZXJPZkNhbWVyYXMoKTsgKytpKSB7Ci0gICAgICAgIGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMuYWRk
KGVudW1lcmF0ZUZvcm1hdHMoaSkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gY2FjaGVk
U3VwcG9ydGVkRm9ybWF0cy5nZXQoY2FtZXJhSWQpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
TGlzdDxDYXB0dXJlRm9ybWF0PiBlbnVtZXJhdGVGb3JtYXRzKGludCBjYW1lcmFJZCkgewotICAg
IExvZ2dpbmcuZChUQUcsICJHZXQgc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRleCAi
ICsgY2FtZXJhSWQgKyAiLiIpOwotICAgIGZpbmFsIGxvbmcgc3RhcnRUaW1lTXMgPSBTeXN0ZW1D
bG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVy
YS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2Ft
ZXJhID0gbnVsbDsKLSAgICB0cnkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIk9wZW5pbmcgY2Ft
ZXJhIHdpdGggaW5kZXggIiArIGNhbWVyYUlkKTsKLSAgICAgIGNhbWVyYSA9IGFuZHJvaWQuaGFy
ZHdhcmUuQ2FtZXJhLm9wZW4oY2FtZXJhSWQpOwotICAgICAgcGFyYW1ldGVycyA9IGNhbWVyYS5n
ZXRQYXJhbWV0ZXJzKCk7Ci0gICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAiT3BlbiBjYW1lcmEgZmFpbGVkIG9uIGNhbWVyYSBpbmRleCAiICsg
Y2FtZXJhSWQsIGUpOwotICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4o
KTsKLSAgICB9IGZpbmFsbHkgewotICAgICAgaWYgKGNhbWVyYSAhPSBudWxsKSB7Ci0gICAgICAg
IGNhbWVyYS5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZmluYWwgTGlzdDxDYXB0
dXJlRm9ybWF0PiBmb3JtYXRMaXN0ID0gbmV3IEFycmF5TGlzdDxDYXB0dXJlRm9ybWF0PigpOwot
ICAgIHRyeSB7Ci0gICAgICBpbnQgbWluRnBzID0gMDsKLSAgICAgIGludCBtYXhGcHMgPSAwOwot
ICAgICAgZmluYWwgTGlzdDxpbnRbXT4gbGlzdEZwc1JhbmdlID0gcGFyYW1ldGVycy5nZXRTdXBw
b3J0ZWRQcmV2aWV3RnBzUmFuZ2UoKTsKLSAgICAgIGlmIChsaXN0RnBzUmFuZ2UgIT0gbnVsbCkg
ewotICAgICAgICAvLyBnZXRTdXBwb3J0ZWRQcmV2aWV3RnBzUmFuZ2UoKSByZXR1cm5zIGEgc29y
dGVkIGxpc3QuIFRha2UgdGhlIGZwcyByYW5nZQotICAgICAgICAvLyBjb3JyZXNwb25kaW5nIHRv
IHRoZSBoaWdoZXN0IGZwcy4KLSAgICAgICAgZmluYWwgaW50W10gcmFuZ2UgPSBsaXN0RnBzUmFu
Z2UuZ2V0KGxpc3RGcHNSYW5nZS5zaXplKCkgLSAxKTsKLSAgICAgICAgbWluRnBzID0gcmFuZ2Vb
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycy5QUkVWSUVXX0ZQU19NSU5fSU5ERVhd
OwotICAgICAgICBtYXhGcHMgPSByYW5nZVthbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0
ZXJzLlBSRVZJRVdfRlBTX01BWF9JTkRFWF07Ci0gICAgICB9Ci0gICAgICBmb3IgKGFuZHJvaWQu
aGFyZHdhcmUuQ2FtZXJhLlNpemUgc2l6ZSA6IHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmll
d1NpemVzKCkpIHsKLSAgICAgICAgZm9ybWF0TGlzdC5hZGQobmV3IENhcHR1cmVGb3JtYXQoc2l6
ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIG1pbkZwcywgbWF4RnBzKSk7Ci0gICAgICB9Ci0gICAgfSBj
YXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJnZXRTdXBwb3J0ZWRG
b3JtYXRzKCkgZmFpbGVkIG9uIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQsIGUpOwotICAgIH0K
LQotICAgIGZpbmFsIGxvbmcgZW5kVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1l
KCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkdldCBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgY2FtZXJh
IGluZGV4ICIgKyBjYW1lcmFJZCArICIgZG9uZS4iCi0gICAgICAgICAgICArICIgVGltZSBzcGVu
dDogIiArIChlbmRUaW1lTXMgLSBzdGFydFRpbWVNcykgKyAiIG1zLiIpOwotICAgIHJldHVybiBm
b3JtYXRMaXN0OwotICB9Ci0KLSAgLy8gQ29udmVydCBmcm9tIGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhLlNpemUgdG8gU2l6ZS4KLSAgc3RhdGljIExpc3Q8U2l6ZT4gY29udmVydFNpemVzKExpc3Q8
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuU2l6ZT4gY2FtZXJhU2l6ZXMpIHsKLSAgICBmaW5hbCBM
aXN0PFNpemU+IHNpemVzID0gbmV3IEFycmF5TGlzdDxTaXplPigpOwotICAgIGZvciAoYW5kcm9p
ZC5oYXJkd2FyZS5DYW1lcmEuU2l6ZSBzaXplIDogY2FtZXJhU2l6ZXMpIHsKLSAgICAgIHNpemVz
LmFkZChuZXcgU2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCkpOwotICAgIH0KLSAgICByZXR1
cm4gc2l6ZXM7Ci0gIH0KLQotICAvLyBDb252ZXJ0IGZyb20gaW50WzJdIHRvIENhcHR1cmVGb3Jt
YXQuRnJhbWVyYXRlUmFuZ2UuCi0gIHN0YXRpYyBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRl
UmFuZ2U+IGNvbnZlcnRGcmFtZXJhdGVzKExpc3Q8aW50W10+IGFycmF5UmFuZ2VzKSB7Ci0gICAg
ZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiByYW5nZXMgPSBuZXcgQXJy
YXlMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+KCk7Ci0gICAgZm9yIChpbnRbXSBy
YW5nZSA6IGFycmF5UmFuZ2VzKSB7Ci0gICAgICByYW5nZXMuYWRkKG5ldyBDYXB0dXJlRm9ybWF0
LkZyYW1lcmF0ZVJhbmdlKAotICAgICAgICAgIHJhbmdlW2FuZHJvaWQuaGFyZHdhcmUuQ2FtZXJh
LlBhcmFtZXRlcnMuUFJFVklFV19GUFNfTUlOX0lOREVYXSwKLSAgICAgICAgICByYW5nZVthbmRy
b2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLlBSRVZJRVdfRlBTX01BWF9JTkRFWF0pKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJhbmdlczsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIGNhbWVy
YSBpbmRleCBmb3IgY2FtZXJhIHdpdGggbmFtZSB8ZGV2aWNlTmFtZXwsIG9yIHRocm93cyBJbGxl
Z2FsQXJndW1lbnRFeGNlcHRpb24KLSAgLy8gaWYgbm8gc3VjaCBjYW1lcmEgY2FuIGJlIGZvdW5k
LgotICBzdGF0aWMgaW50IGdldENhbWVyYUluZGV4KFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgImdldENhbWVyYUluZGV4OiAiICsgZGV2aWNlTmFtZSk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1iZXJPZkNhbWVy
YXMoKTsgKytpKSB7Ci0gICAgICBpZiAoZGV2aWNlTmFtZS5lcXVhbHMoZ2V0RGV2aWNlTmFtZShp
KSkpIHsKLSAgICAgICAgcmV0dXJuIGk7Ci0gICAgICB9Ci0gICAgfQotICAgIHRocm93IG5ldyBJ
bGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIk5vIHN1Y2ggY2FtZXJhOiAiICsgZGV2aWNlTmFtZSk7
Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjYW1lcmEgd2l0aCBjYW1lcmEg
aW5kZXguIFJldHVybnMgbnVsbCBpZiB0aGUKLSAgLy8gY2FtZXJhIGNhbiBub3QgYmUgdXNlZC4K
LSAgc3RhdGljIFN0cmluZyBnZXREZXZpY2VOYW1lKGludCBpbmRleCkgewotICAgIGFuZHJvaWQu
aGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbyA9IGdldENhbWVyYUluZm8oaW5kZXgpOwot
ICAgIGlmIChpbmZvID09IG51bGwpIHsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAg
IFN0cmluZyBmYWNpbmcgPQotICAgICAgICAoaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2Fy
ZS5DYW1lcmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0ZST05UKSA/ICJmcm9udCIgOiAiYmFj
ayI7Ci0gICAgcmV0dXJuICJDYW1lcmEgIiArIGluZGV4ICsgIiwgRmFjaW5nICIgKyBmYWNpbmcg
KyAiLCBPcmllbnRhdGlvbiAiICsgaW5mby5vcmllbnRhdGlvbjsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmExU2Vzc2lvbi5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvQ2FtZXJhMVNlc3Npb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmExU2Vzc2lvbi5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzQ0ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0
IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWlt
cG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudmlldy5TdXJmYWNl
OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGphdmEuaW8uSU9F
eGNlcHRpb247Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwu
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBvcmcu
d2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotaW1wb3J0IG9y
Zy53ZWJydGMuTWV0cmljcy5IaXN0b2dyYW07Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNh
dGlvbiIpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMVNlc3Npb24gaW1wbGVtZW50cyBDYW1lcmFTZXNz
aW9uIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmExU2Vzc2lv
biI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBOVU1CRVJfT0ZfQ0FQVFVSRV9CVUZGRVJT
ID0gMzsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMVN0YXJ0VGlt
ZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5BbmRy
b2lkLkNhbWVyYTEuU3RhcnRUaW1lTXMiLCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMVN0b3BUaW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlz
dG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFuZHJvaWQuQ2FtZXJhMS5TdG9wVGltZU1zIiwg
MSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNhbWVyYTFS
ZXNvbHV0aW9uSGlzdG9ncmFtID0gSGlzdG9ncmFtLmNyZWF0ZUVudW1lcmF0aW9uKAotICAgICAg
IldlYlJUQy5BbmRyb2lkLkNhbWVyYTEuUmVzb2x1dGlvbiIsIENhbWVyYUVudW1lcmF0aW9uQW5k
cm9pZC5DT01NT05fUkVTT0xVVElPTlMuc2l6ZSgpKTsKLQotICBwcml2YXRlIHN0YXRpYyBlbnVt
IFNlc3Npb25TdGF0ZSB7IFJVTk5JTkcsIFNUT1BQRUQgfQotCi0gIHByaXZhdGUgZmluYWwgSGFu
ZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIEV2ZW50cyBldmVudHM7
Ci0gIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlOwotICBwcml2YXRlIGZp
bmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICBwcml2YXRlIGZpbmFsIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICBwcml2YXRlIGZpbmFsIGludCBj
YW1lcmFJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgZmluYWwgaW50
IGhlaWdodDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVyYXRlOwotICBwcml2YXRlIGZpbmFs
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhIGNhbWVyYTsKLSAgcHJpdmF0ZSBmaW5hbCBhbmRyb2lk
LmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm87Ci0gIHByaXZhdGUgZmluYWwgQ2FwdHVy
ZUZvcm1hdCBjYXB0dXJlRm9ybWF0OwotICAvLyBVc2VkIG9ubHkgZm9yIHN0YXRzLiBPbmx5IHVz
ZWQgb24gdGhlIGNhbWVyYSB0aHJlYWQuCi0gIHByaXZhdGUgZmluYWwgbG9uZyBjb25zdHJ1Y3Rp
b25UaW1lTnM7IC8vIENvbnN0cnVjdGlvbiB0aW1lIG9mIHRoaXMgY2xhc3MuCi0KLSAgcHJpdmF0
ZSBTZXNzaW9uU3RhdGUgc3RhdGU7Ci0gIHByaXZhdGUgYm9vbGVhbiBmaXJzdEZyYW1lUmVwb3J0
ZWQgPSBmYWxzZTsKLQotICBwdWJsaWMgc3RhdGljIHZvaWQgY3JlYXRlKGZpbmFsIENyZWF0ZVNl
c3Npb25DYWxsYmFjayBjYWxsYmFjaywgZmluYWwgRXZlbnRzIGV2ZW50cywKLSAgICAgIGZpbmFs
IGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSwgZmluYWwgQ29udGV4dCBhcHBsaWNhdGlvbkNvbnRl
eHQsCi0gICAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBl
ciwgZmluYWwgaW50IGNhbWVyYUlkLCBmaW5hbCBpbnQgd2lkdGgsCi0gICAgICBmaW5hbCBpbnQg
aGVpZ2h0LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgZmluYWwgbG9uZyBjb25zdHJ1Y3Rp
b25UaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiT3BlbiBj
YW1lcmEgIiArIGNhbWVyYUlkKTsKLSAgICBldmVudHMub25DYW1lcmFPcGVuaW5nKCk7Ci0KLSAg
ICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmE7Ci0gICAgdHJ5IHsKLSAgICAg
IGNhbWVyYSA9IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oY2FtZXJhSWQpOwotICAgIH0g
Y2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgY2FsbGJhY2sub25GYWlsdXJlKGUu
Z2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0cnkgewotICAgICAg
Y2FtZXJhLnNldFByZXZpZXdUZXh0dXJlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VU
ZXh0dXJlKCkpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIGNhbWVyYS5y
ZWxlYXNlKCk7Ci0gICAgICBjYWxsYmFjay5vbkZhaWx1cmUoZS5nZXRNZXNzYWdlKCkpOwotICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNh
bWVyYUluZm8gaW5mbyA9IG5ldyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvKCk7
Ci0gICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0Q2FtZXJhSW5mbyhjYW1lcmFJZCwgaW5m
byk7Ci0KLSAgICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFt
ZXRlcnMgPSBjYW1lcmEuZ2V0UGFyYW1ldGVycygpOwotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQg
Y2FwdHVyZUZvcm1hdCA9Ci0gICAgICAgIGZpbmRDbG9zZXN0Q2FwdHVyZUZvcm1hdChwYXJhbWV0
ZXJzLCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgIGZpbmFsIFNpemUgcGljdHVyZVNp
emUgPSBmaW5kQ2xvc2VzdFBpY3R1cmVTaXplKHBhcmFtZXRlcnMsIHdpZHRoLCBoZWlnaHQpOwot
Ci0gICAgdXBkYXRlQ2FtZXJhUGFyYW1ldGVycyhjYW1lcmEsIHBhcmFtZXRlcnMsIGNhcHR1cmVG
b3JtYXQsIHBpY3R1cmVTaXplLCBjYXB0dXJlVG9UZXh0dXJlKTsKLQotICAgIC8vIEluaXRpYWxp
emUgdGhlIGNhcHR1cmUgYnVmZmVycy4KLSAgICBpZiAoIWNhcHR1cmVUb1RleHR1cmUpIHsKLSAg
ICAgIGZpbmFsIGludCBmcmFtZVNpemUgPSBjYXB0dXJlRm9ybWF0LmZyYW1lU2l6ZSgpOwotICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0FQVFVSRV9CVUZGRVJTOyArK2kpIHsK
LSAgICAgICAgZmluYWwgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGly
ZWN0KGZyYW1lU2l6ZSk7Ci0gICAgICAgIGNhbWVyYS5hZGRDYWxsYmFja0J1ZmZlcihidWZmZXIu
YXJyYXkoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIG9yaWVudGF0aW9u
IG1hbnVhbGx5IGFuZCBzZW5kIGl0IGFzIENWTyBpbnN0ZWQuCi0gICAgY2FtZXJhLnNldERpc3Bs
YXlPcmllbnRhdGlvbigwIC8qIGRlZ3JlZXMgKi8pOwotCi0gICAgY2FsbGJhY2sub25Eb25lKAot
ICAgICAgICBuZXcgQ2FtZXJhMVNlc3Npb24oZXZlbnRzLCBjYXB0dXJlVG9UZXh0dXJlLCBhcHBs
aWNhdGlvbkNvbnRleHQsIHN1cmZhY2VUZXh0dXJlSGVscGVyLAotICAgICAgICAgICAgY2FtZXJh
SWQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSwgY2FtZXJhLCBpbmZvLCBjYXB0dXJlRm9ybWF0
LCBjb25zdHJ1Y3Rpb25UaW1lTnMpKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgdXBk
YXRlQ2FtZXJhUGFyYW1ldGVycyhhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmEsCi0gICAg
ICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIENhcHR1cmVG
b3JtYXQgY2FwdHVyZUZvcm1hdCwgU2l6ZSBwaWN0dXJlU2l6ZSwKLSAgICAgIGJvb2xlYW4gY2Fw
dHVyZVRvVGV4dHVyZSkgewotICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBmb2N1c01vZGVzID0gcGFy
YW1ldGVycy5nZXRTdXBwb3J0ZWRGb2N1c01vZGVzKCk7Ci0KLSAgICBwYXJhbWV0ZXJzLnNldFBy
ZXZpZXdGcHNSYW5nZShjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5taW4sIGNhcHR1cmVGb3JtYXQu
ZnJhbWVyYXRlLm1heCk7Ci0gICAgcGFyYW1ldGVycy5zZXRQcmV2aWV3U2l6ZShjYXB0dXJlRm9y
bWF0LndpZHRoLCBjYXB0dXJlRm9ybWF0LmhlaWdodCk7Ci0gICAgcGFyYW1ldGVycy5zZXRQaWN0
dXJlU2l6ZShwaWN0dXJlU2l6ZS53aWR0aCwgcGljdHVyZVNpemUuaGVpZ2h0KTsKLSAgICBpZiAo
IWNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld0Zvcm1hdChj
YXB0dXJlRm9ybWF0LmltYWdlRm9ybWF0KTsKLSAgICB9Ci0KLSAgICBpZiAocGFyYW1ldGVycy5p
c1ZpZGVvU3RhYmlsaXphdGlvblN1cHBvcnRlZCgpKSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldFZp
ZGVvU3RhYmlsaXphdGlvbih0cnVlKTsKLSAgICB9Ci0gICAgaWYgKGZvY3VzTW9kZXMuY29udGFp
bnMoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycy5GT0NVU19NT0RFX0NPTlRJTlVP
VVNfVklERU8pKSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldEZvY3VzTW9kZShhbmRyb2lkLmhhcmR3
YXJlLkNhbWVyYS5QYXJhbWV0ZXJzLkZPQ1VTX01PREVfQ09OVElOVU9VU19WSURFTyk7Ci0gICAg
fQotICAgIGNhbWVyYS5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgQ2FwdHVyZUZvcm1hdCBmaW5kQ2xvc2VzdENhcHR1cmVGb3JtYXQoCi0gICAgICBh
bmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAgIC8vIEZpbmQgY2xvc2VzdCBzdXBwb3J0
ZWQgZm9ybWF0IGZvciB8d2lkdGh8IHggfGhlaWdodHwgQCB8ZnJhbWVyYXRlfC4KLSAgICBmaW5h
bCBMaXN0PENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2U+IHN1cHBvcnRlZEZyYW1lcmF0ZXMg
PQotICAgICAgICBDYW1lcmExRW51bWVyYXRvci5jb252ZXJ0RnJhbWVyYXRlcyhwYXJhbWV0ZXJz
LmdldFN1cHBvcnRlZFByZXZpZXdGcHNSYW5nZSgpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXZh
aWxhYmxlIGZwcyByYW5nZXM6ICIgKyBzdXBwb3J0ZWRGcmFtZXJhdGVzKTsKLQotICAgIGZpbmFs
IENhcHR1cmVGb3JtYXQuRnJhbWVyYXRlUmFuZ2UgZnBzUmFuZ2UgPQotICAgICAgICBDYW1lcmFF
bnVtZXJhdGlvbkFuZHJvaWQuZ2V0Q2xvc2VzdFN1cHBvcnRlZEZyYW1lcmF0ZVJhbmdlKHN1cHBv
cnRlZEZyYW1lcmF0ZXMsIGZyYW1lcmF0ZSk7Ci0KLSAgICBmaW5hbCBTaXplIHByZXZpZXdTaXpl
ID0gQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0ZWRTaXplKAotICAg
ICAgICBDYW1lcmExRW51bWVyYXRvci5jb252ZXJ0U2l6ZXMocGFyYW1ldGVycy5nZXRTdXBwb3J0
ZWRQcmV2aWV3U2l6ZXMoKSksIHdpZHRoLCBoZWlnaHQpOwotICAgIENhbWVyYUVudW1lcmF0aW9u
QW5kcm9pZC5yZXBvcnRDYW1lcmFSZXNvbHV0aW9uKGNhbWVyYTFSZXNvbHV0aW9uSGlzdG9ncmFt
LCBwcmV2aWV3U2l6ZSk7Ci0KLSAgICByZXR1cm4gbmV3IENhcHR1cmVGb3JtYXQocHJldmlld1Np
emUud2lkdGgsIHByZXZpZXdTaXplLmhlaWdodCwgZnBzUmFuZ2UpOwotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgU2l6ZSBmaW5kQ2xvc2VzdFBpY3R1cmVTaXplKAotICAgICAgYW5kcm9pZC5oYXJk
d2FyZS5DYW1lcmEuUGFyYW1ldGVycyBwYXJhbWV0ZXJzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
IHsKLSAgICByZXR1cm4gQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmdldENsb3Nlc3RTdXBwb3J0
ZWRTaXplKAotICAgICAgICBDYW1lcmExRW51bWVyYXRvci5jb252ZXJ0U2l6ZXMocGFyYW1ldGVy
cy5nZXRTdXBwb3J0ZWRQaWN0dXJlU2l6ZXMoKSksIHdpZHRoLCBoZWlnaHQpOwotICB9Ci0KLSAg
cHJpdmF0ZSBDYW1lcmExU2Vzc2lvbihFdmVudHMgZXZlbnRzLCBib29sZWFuIGNhcHR1cmVUb1Rl
eHR1cmUsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgU3VyZmFjZVRleHR1cmVI
ZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIGludCBjYW1lcmFJZCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBpbnQgZnJhbWVyYXRlLAotICAgICAgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2Ft
ZXJhLCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvIGluZm8sCi0gICAgICBDYXB0
dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQsIGxvbmcgY29uc3RydWN0aW9uVGltZU5zKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIkNyZWF0ZSBuZXcgY2FtZXJhMSBzZXNzaW9uIG9uIGNhbWVyYSAiICsg
Y2FtZXJhSWQpOwotCi0gICAgdGhpcy5jYW1lcmFUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIo
KTsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgICB0aGlzLmNhcHR1cmVUb1RleHR1cmUg
PSBjYXB0dXJlVG9UZXh0dXJlOwotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGlj
YXRpb25Db250ZXh0OwotICAgIHRoaXMuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4
dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVyYUlkID0gY2FtZXJhSWQ7Ci0gICAgdGhpcy53aWR0
aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHRoaXMuZnJhbWVyYXRl
ID0gZnJhbWVyYXRlOwotICAgIHRoaXMuY2FtZXJhID0gY2FtZXJhOwotICAgIHRoaXMuaW5mbyA9
IGluZm87Ci0gICAgdGhpcy5jYXB0dXJlRm9ybWF0ID0gY2FwdHVyZUZvcm1hdDsKLSAgICB0aGlz
LmNvbnN0cnVjdGlvblRpbWVOcyA9IGNvbnN0cnVjdGlvblRpbWVOczsKLQotICAgIHN0YXJ0Q2Fw
dHVyaW5nKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYW1lcmExIHNlc3Npb24gb24gY2FtZXJhICIgKyBjYW1l
cmFJZCk7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgaWYgKHN0YXRlICE9IFNl
c3Npb25TdGF0ZS5TVE9QUEVEKSB7Ci0gICAgICBmaW5hbCBsb25nIHN0b3BTdGFydFRpbWUgPSBT
eXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHN0YXRlID0gU2Vzc2lvblN0YXRlLlNUT1BQRUQ7Ci0g
ICAgICBzdG9wSW50ZXJuYWwoKTsKLSAgICAgIGZpbmFsIGludCBzdG9wVGltZU1zID0gKGludCkg
VGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBzdG9wU3Rh
cnRUaW1lKTsKLSAgICAgIGNhbWVyYTFTdG9wVGltZU1zSGlzdG9ncmFtLmFkZFNhbXBsZShzdG9w
VGltZU1zKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RhcnRDYXB0dXJpbmcoKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0YXJ0IGNhcHR1cmluZyIpOwotICAgIGNoZWNrSXNPbkNh
bWVyYVRocmVhZCgpOwotCi0gICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUuUlVOTklORzsKLQotICAg
IGNhbWVyYS5zZXRFcnJvckNhbGxiYWNrKG5ldyBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5FcnJv
ckNhbGxiYWNrKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkVycm9y
KGludCBlcnJvciwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhKSB7Ci0gICAgICAgIFN0
cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgICAgIGlmIChlcnJvciA9PSBhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYS5DQU1FUkFfRVJST1JfU0VSVkVSX0RJRUQpIHsKLSAgICAgICAgICBlcnJvck1lc3Nh
Z2UgPSAiQ2FtZXJhIHNlcnZlciBkaWVkISI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gIkNhbWVyYSBlcnJvcjogIiArIGVycm9yOwotICAgICAgICB9Ci0gICAg
ICAgIExvZ2dpbmcuZShUQUcsIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIHN0YXRlID0gU2Vzc2lv
blN0YXRlLlNUT1BQRUQ7Ci0gICAgICAgIHN0b3BJbnRlcm5hbCgpOwotICAgICAgICBpZiAoZXJy
b3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuQ0FNRVJBX0VSUk9SX0VWSUNURUQpIHsKLSAg
ICAgICAgICBldmVudHMub25DYW1lcmFEaXNjb25uZWN0ZWQoQ2FtZXJhMVNlc3Npb24udGhpcyk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZXZlbnRzLm9uQ2FtZXJhRXJyb3IoQ2FtZXJh
MVNlc3Npb24udGhpcywgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0p
OwotCi0gICAgaWYgKGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICAgIGxpc3RlbkZvclRleHR1cmVG
cmFtZXMoKTsKLSAgICB9IGVsc2UgewotICAgICAgbGlzdGVuRm9yQnl0ZWJ1ZmZlckZyYW1lcygp
OwotICAgIH0KLSAgICB0cnkgewotICAgICAgY2FtZXJhLnN0YXJ0UHJldmlldygpOwotICAgIH0g
Y2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkgewotICAgICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUu
U1RPUFBFRDsKLSAgICAgIHN0b3BJbnRlcm5hbCgpOwotICAgICAgZXZlbnRzLm9uQ2FtZXJhRXJy
b3IodGhpcywgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBz
dG9wSW50ZXJuYWwoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgaW50ZXJuYWwiKTsKLSAg
ICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0
b3BMaXN0ZW5pbmcoKTsKLQotICAgIC8vIE5vdGU6IHN0b3BQcmV2aWV3IG9yIG90aGVyIGRyaXZl
ciBjb2RlIG1pZ2h0IGRlYWRsb2NrLiBEZWFkbG9jayBpbgotICAgIC8vIGFuZHJvaWQuaGFyZHdh
cmUuQ2FtZXJhLl9zdG9wUHJldmlldyhOYXRpdmUgTWV0aG9kKSBoYXMgYmVlbiBvYnNlcnZlZCBv
bgotICAgIC8vIE5leHVzIDUgKGhhbW1lcmhlYWQpLCBPUyB2ZXJzaW9uIExNWTQ4SS4KLSAgICBj
YW1lcmEuc3RvcFByZXZpZXcoKTsKLSAgICBjYW1lcmEucmVsZWFzZSgpOwotICAgIGV2ZW50cy5v
bkNhbWVyYUNsb3NlZCh0aGlzKTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJTdG9wIGRvbmUiKTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBsaXN0ZW5Gb3JUZXh0dXJlRnJhbWVzKCkgewotICAgIHN1
cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKG5ldyBTdXJmYWNlVGV4dHVyZUhlbHBl
ci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAgICAgICAgICBpbnQg
b2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykg
ewotICAgICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgICBpZiAoc3RhdGUg
IT0gU2Vzc2lvblN0YXRlLlJVTk5JTkcpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVGV4
dHVyZSBmcmFtZSBjYXB0dXJlZCBidXQgY2FtZXJhIGlzIG5vIGxvbmdlciBydW5uaW5nLiIpOwot
ICAgICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghZmlyc3RGcmFtZVJlcG9y
dGVkKSB7Ci0gICAgICAgICAgZmluYWwgaW50IHN0YXJ0VGltZU1zID0KLSAgICAgICAgICAgICAg
KGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBj
b25zdHJ1Y3Rpb25UaW1lTnMpOwotICAgICAgICAgIGNhbWVyYTFTdGFydFRpbWVNc0hpc3RvZ3Jh
bS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMpOwotICAgICAgICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9
IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgcm90YXRpb24gPSBnZXRGcmFtZU9yaWVu
dGF0aW9uKCk7Ci0gICAgICAgIGlmIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5DYW1lcmFJbmZvLkNBTUVSQV9GQUNJTkdfRlJPTlQpIHsKLSAgICAgICAgICAvLyBVbmRv
IHRoZSBtaXJyb3IgdGhhdCB0aGUgT1MgImhlbHBzIiB1cyB3aXRoLgotICAgICAgICAgIC8vIGh0
dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2Ft
ZXJhLmh0bWwjc2V0RGlzcGxheU9yaWVudGF0aW9uKGludCkKLSAgICAgICAgICB0cmFuc2Zvcm1N
YXRyaXggPSBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKAotICAgICAgICAgICAgICB0
cmFuc2Zvcm1NYXRyaXgsIFJlbmRlcmVyQ29tbW9uLmhvcml6b250YWxGbGlwTWF0cml4KCkpOwot
ICAgICAgICB9Ci0gICAgICAgIGV2ZW50cy5vblRleHR1cmVGcmFtZUNhcHR1cmVkKENhbWVyYTFT
ZXNzaW9uLnRoaXMsIGNhcHR1cmVGb3JtYXQud2lkdGgsCi0gICAgICAgICAgICBjYXB0dXJlRm9y
bWF0LmhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIHJvdGF0aW9uLCB0aW1l
c3RhbXBOcyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbGlzdGVu
Rm9yQnl0ZWJ1ZmZlckZyYW1lcygpIHsKLSAgICBjYW1lcmEuc2V0UHJldmlld0NhbGxiYWNrV2l0
aEJ1ZmZlcihuZXcgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUHJldmlld0NhbGxiYWNrKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblByZXZpZXdGcmFtZShieXRlW10g
ZGF0YSwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FsbGJhY2tDYW1lcmEpIHsKLSAgICAgICAg
Y2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0KLSAgICAgICAgaWYgKGNhbGxiYWNrQ2FtZXJhICE9
IGNhbWVyYSkgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJDYWxsYmFjayBmcm9tIGEgZGlm
ZmVyZW50IGNhbWVyYS4gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiIpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzdGF0ZSAhPSBTZXNzaW9uU3RhdGUuUlVO
TklORykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJCeXRlYnVmZmVyIGZyYW1lIGNhcHR1
cmVkIGJ1dCBjYW1lcmEgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcuIik7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0KLSAgICAgICAgZmluYWwgbG9uZyBjYXB0dXJlVGltZU5zID0gVGltZVVu
aXQuTUlMTElTRUNPTkRTLnRvTmFub3MoU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwot
Ci0gICAgICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAgICAgICAgZmluYWwgaW50
IHN0YXJ0VGltZU1zID0KLSAgICAgICAgICAgICAgKGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMu
dG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBjb25zdHJ1Y3Rpb25UaW1lTnMpOwotICAgICAg
ICAgIGNhbWVyYTFTdGFydFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RhcnRUaW1lTXMpOwot
ICAgICAgICAgIGZpcnN0RnJhbWVSZXBvcnRlZCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBldmVudHMub25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZChDYW1lcmExU2Vzc2lvbi50aGlzLCBk
YXRhLCBjYXB0dXJlRm9ybWF0LndpZHRoLAotICAgICAgICAgICAgY2FwdHVyZUZvcm1hdC5oZWln
aHQsIGdldEZyYW1lT3JpZW50YXRpb24oKSwgY2FwdHVyZVRpbWVOcyk7Ci0gICAgICAgIGNhbWVy
YS5hZGRDYWxsYmFja0J1ZmZlcihkYXRhKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHBy
aXZhdGUgaW50IGdldERldmljZU9yaWVudGF0aW9uKCkgewotICAgIGludCBvcmllbnRhdGlvbiA9
IDA7Ci0KLSAgICBXaW5kb3dNYW5hZ2VyIHdtID0gKFdpbmRvd01hbmFnZXIpIGFwcGxpY2F0aW9u
Q29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwotICAgIHN3
aXRjaCAod20uZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRSb3RhdGlvbigpKSB7Ci0gICAgICBjYXNl
IFN1cmZhY2UuUk9UQVRJT05fOTA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gOTA7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzE4MDoKLSAgICAgICAgb3JpZW50
YXRpb24gPSAxODA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9O
XzI3MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAyNzA7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBTdXJmYWNlLlJPVEFUSU9OXzA6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBvcmllbnRh
dGlvbiA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gb3JpZW50YXRpb247
Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRGcmFtZU9yaWVudGF0aW9uKCkgewotICAgIGludCBy
b3RhdGlvbiA9IGdldERldmljZU9yaWVudGF0aW9uKCk7Ci0gICAgaWYgKGluZm8uZmFjaW5nID09
IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19CQUNLKSB7
Ci0gICAgICByb3RhdGlvbiA9IDM2MCAtIHJvdGF0aW9uOwotICAgIH0KLSAgICByZXR1cm4gKGlu
Zm8ub3JpZW50YXRpb24gKyByb3RhdGlvbikgJSAzNjA7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
Y2hlY2tJc09uQ2FtZXJhVGhyZWFkKCkgewotICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgp
ICE9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25nIHRocmVhZCIpOwotICAgIH0K
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyQ2FwdHVyZXIuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlci5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9y
dCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVy
YTIuQ2FtZXJhTWFuYWdlcjsKLQotQFRhcmdldEFwaSgyMSkKLXB1YmxpYyBjbGFzcyBDYW1lcmEy
Q2FwdHVyZXIgZXh0ZW5kcyBDYW1lcmFDYXB0dXJlciB7Ci0gIHByaXZhdGUgZmluYWwgQ29udGV4
dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsK
LQotICBwdWJsaWMgQ2FtZXJhMkNhcHR1cmVyKENvbnRleHQgY29udGV4dCwgU3RyaW5nIGNhbWVy
YU5hbWUsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgIHN1cGVyKGNh
bWVyYU5hbWUsIGV2ZW50c0hhbmRsZXIsIG5ldyBDYW1lcmEyRW51bWVyYXRvcihjb250ZXh0KSk7
Ci0KLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIGNhbWVyYU1hbmFnZXIgPSAoQ2Ft
ZXJhTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJ
Q0UpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIGNyZWF0ZUNhbWVyYVNl
c3Npb24oQ2FtZXJhU2Vzc2lvbi5DcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNh
bGxiYWNrLAotICAgICAgQ2FtZXJhU2Vzc2lvbi5FdmVudHMgZXZlbnRzLCBDb250ZXh0IGFwcGxp
Y2F0aW9uQ29udGV4dCwKLSAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJl
SGVscGVyLCBTdHJpbmcgY2FtZXJhTmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgICAg
aW50IGZyYW1lcmF0ZSkgewotICAgIENhbWVyYTJTZXNzaW9uLmNyZWF0ZShjcmVhdGVTZXNzaW9u
Q2FsbGJhY2ssIGV2ZW50cywgYXBwbGljYXRpb25Db250ZXh0LCBjYW1lcmFNYW5hZ2VyLAotICAg
ICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlciwgY2FtZXJhTmFtZSwgd2lkdGgsIGhlaWdodCwgZnJh
bWVyYXRlKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyRW51bWVyYXRv
ci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkVudW1lcmF0b3Iu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyRW51bWVy
YXRvci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjQ4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51
bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRp
b24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFu
ZHJvaWQuZ3JhcGhpY3MuUmVjdDsKLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VUZXh0
dXJlOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFDaGFyYWN0ZXJpc3Rp
Y3M7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1pbXBv
cnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhOwotaW1wb3J0IGFuZHJv
aWQuaGFyZHdhcmUuY2FtZXJhMi5wYXJhbXMuU3RyZWFtQ29uZmlndXJhdGlvbk1hcDsKLWltcG9y
dCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBv
cnQgYW5kcm9pZC51dGlsLkFuZHJvaWRFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlJh
bmdlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFz
aE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi1A
VGFyZ2V0QXBpKDIxKQotcHVibGljIGNsYXNzIENhbWVyYTJFbnVtZXJhdG9yIGltcGxlbWVudHMg
Q2FtZXJhRW51bWVyYXRvciB7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAi
Q2FtZXJhMkVudW1lcmF0b3IiOwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBkb3VibGUgTkFOT19T
RUNPTkRTX1BFUl9TRUNPTkQgPSAxLjBlOTsKLQotICAvLyBFYWNoIGVudHJ5IGNvbnRhaW5zIHRo
ZSBzdXBwb3J0ZWQgZm9ybWF0cyBmb3IgYSBnaXZlbiBjYW1lcmEgaW5kZXguIFRoZSBmb3JtYXRz
IGFyZSBlbnVtZXJhdGVkCi0gIC8vIGxhemlseSBpbiBnZXRTdXBwb3J0ZWRGb3JtYXRzKCksIGFu
ZCBjYWNoZWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1h
cDxTdHJpbmcsIExpc3Q8Q2FwdHVyZUZvcm1hdD4+IGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMgPQot
ICAgICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBMaXN0PENhcHR1cmVGb3JtYXQ+PigpOwotCi0gIGZp
bmFsIENvbnRleHQgY29udGV4dDsKLSAgZmluYWwgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2Vy
OwotCi0gIHB1YmxpYyBDYW1lcmEyRW51bWVyYXRvcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICB0
aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMuY2FtZXJhTWFuYWdlciA9IChDYW1lcmFN
YW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFN0cmluZ1tdIGdldERldmljZU5hbWVzKCkg
ewotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gY2FtZXJhTWFuYWdlci5nZXRDYW1lcmFJZExpc3Qo
KTsKLSAgICAgIC8vIE9uIEFuZHJvaWQgT1MgcHJlIDQuNC4yLCBhIGNsYXNzIHdpbGwgbm90IGxv
YWQgYmVjYXVzZSBvZiBWZXJpZnlFcnJvciBpZiBpdCBjb250YWlucyBhCi0gICAgICAvLyBjYXRj
aCBzdGF0ZW1lbnQgd2l0aCBhbiBFeGNlcHRpb24gZnJvbSBhIG5ld2VyIEFQSSwgZXZlbiBpZiB0
aGUgY29kZSBpcyBuZXZlciBleGVjdXRlZC4KLSAgICAgIC8vIGh0dHBzOi8vY29kZS5nb29nbGUu
Y29tL3AvYW5kcm9pZC9pc3N1ZXMvZGV0YWlsP2lkPTIwOTEyOQotICAgIH0gY2F0Y2ggKC8qIENh
bWVyYUFjY2Vzc0V4Y2VwdGlvbiAqLyBBbmRyb2lkRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dp
bmcuZShUQUcsICJDYW1lcmEgYWNjZXNzIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgcmV0dXJu
IG5ldyBTdHJpbmdbXSB7fTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJv
b2xlYW4gaXNGcm9udEZhY2luZyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIENhbWVyYUNoYXJh
Y3RlcmlzdGljcyBjaGFyYWN0ZXJpc3RpY3MgPSBnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoZGV2
aWNlTmFtZSk7Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyaXN0aWNzICE9IG51bGwKLSAgICAgICAg
JiYgY2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuTEVOU19GQUNJTkcp
Ci0gICAgICAgID09IENhbWVyYU1ldGFkYXRhLkxFTlNfRkFDSU5HX0ZST05UOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIGlzQmFja0ZhY2luZyhTdHJpbmcgZGV2aWNlTmFt
ZSkgewotICAgIENhbWVyYUNoYXJhY3RlcmlzdGljcyBjaGFyYWN0ZXJpc3RpY3MgPSBnZXRDYW1l
cmFDaGFyYWN0ZXJpc3RpY3MoZGV2aWNlTmFtZSk7Ci0KLSAgICByZXR1cm4gY2hhcmFjdGVyaXN0
aWNzICE9IG51bGwKLSAgICAgICAgJiYgY2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0
ZXJpc3RpY3MuTEVOU19GQUNJTkcpCi0gICAgICAgID09IENhbWVyYU1ldGFkYXRhLkxFTlNfRkFD
SU5HX0JBQ0s7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIExpc3Q8Q2FwdHVyZUZvcm1h
dD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhTdHJpbmcgZGV2aWNlTmFtZSkgewotICAgIHJldHVybiBn
ZXRTdXBwb3J0ZWRGb3JtYXRzKGNvbnRleHQsIGRldmljZU5hbWUpOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBDYW1lcmFWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAg
U3RyaW5nIGRldmljZU5hbWUsIENhbWVyYVZpZGVvQ2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxl
ciBldmVudHNIYW5kbGVyKSB7Ci0gICAgcmV0dXJuIG5ldyBDYW1lcmEyQ2FwdHVyZXIoY29udGV4
dCwgZGV2aWNlTmFtZSwgZXZlbnRzSGFuZGxlcik7Ci0gIH0KLQotICBwcml2YXRlIENhbWVyYUNo
YXJhY3RlcmlzdGljcyBnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoU3RyaW5nIGRldmljZU5hbWUp
IHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJhQ2hhcmFj
dGVyaXN0aWNzKGRldmljZU5hbWUpOwotICAgICAgLy8gT24gQW5kcm9pZCBPUyBwcmUgNC40LjIs
IGEgY2xhc3Mgd2lsbCBub3QgbG9hZCBiZWNhdXNlIG9mIFZlcmlmeUVycm9yIGlmIGl0IGNvbnRh
aW5zIGEKLSAgICAgIC8vIGNhdGNoIHN0YXRlbWVudCB3aXRoIGFuIEV4Y2VwdGlvbiBmcm9tIGEg
bmV3ZXIgQVBJLCBldmVuIGlmIHRoZSBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkLgotICAgICAgLy8g
aHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA5MTI5
Ci0gICAgfSBjYXRjaCAoLyogQ2FtZXJhQWNjZXNzRXhjZXB0aW9uICovIEFuZHJvaWRFeGNlcHRp
b24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBhY2Nlc3MgZXhjZXB0aW9uOiAi
ICsgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2hl
Y2tzIGlmIEFQSSBpcyBzdXBwb3J0ZWQgYW5kIGFsbCBjYW1lcmFzIGhhdmUgYmV0dGVyIHRoYW4g
bGVnYWN5IHN1cHBvcnQuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTdXBwb3J0
ZWQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1
aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29u
dGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICAgIHRyeSB7
Ci0gICAgICBTdHJpbmdbXSBjYW1lcmFJZHMgPSBjYW1lcmFNYW5hZ2VyLmdldENhbWVyYUlkTGlz
dCgpOwotICAgICAgZm9yIChTdHJpbmcgaWQgOiBjYW1lcmFJZHMpIHsKLSAgICAgICAgQ2FtZXJh
Q2hhcmFjdGVyaXN0aWNzIGNoYXJhY3RlcmlzdGljcyA9IGNhbWVyYU1hbmFnZXIuZ2V0Q2FtZXJh
Q2hhcmFjdGVyaXN0aWNzKGlkKTsKLSAgICAgICAgaWYgKGNoYXJhY3RlcmlzdGljcy5nZXQoQ2Ft
ZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMKQotICAgICAg
ICAgICAgPT0gQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xF
VkVMX0xFR0FDWSkgewotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
fQotICAgICAgLy8gT24gQW5kcm9pZCBPUyBwcmUgNC40LjIsIGEgY2xhc3Mgd2lsbCBub3QgbG9h
ZCBiZWNhdXNlIG9mIFZlcmlmeUVycm9yIGlmIGl0IGNvbnRhaW5zIGEKLSAgICAgIC8vIGNhdGNo
IHN0YXRlbWVudCB3aXRoIGFuIEV4Y2VwdGlvbiBmcm9tIGEgbmV3ZXIgQVBJLCBldmVuIGlmIHRo
ZSBjb2RlIGlzIG5ldmVyIGV4ZWN1dGVkLgotICAgICAgLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5j
b20vcC9hbmRyb2lkL2lzc3Vlcy9kZXRhaWw/aWQ9MjA5MTI5Ci0gICAgfSBjYXRjaCAoLyogQ2Ft
ZXJhQWNjZXNzRXhjZXB0aW9uICovIEFuZHJvaWRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2lu
Zy5lKFRBRywgIkNhbWVyYSBhY2Nlc3MgZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgc3RhdGljIGludCBnZXRG
cHNVbml0RmFjdG9yKFJhbmdlPEludGVnZXI+W10gZnBzUmFuZ2VzKSB7Ci0gICAgaWYgKGZwc1Jh
bmdlcy5sZW5ndGggPT0gMCkgewotICAgICAgcmV0dXJuIDEwMDA7Ci0gICAgfQotICAgIHJldHVy
biBmcHNSYW5nZXNbMF0uZ2V0VXBwZXIoKSA8IDEwMDAgPyAxMDAwIDogMTsKLSAgfQotCi0gIHN0
YXRpYyBMaXN0PFNpemU+IGdldFN1cHBvcnRlZFNpemVzKENhbWVyYUNoYXJhY3RlcmlzdGljcyBj
YW1lcmFDaGFyYWN0ZXJpc3RpY3MpIHsKLSAgICBmaW5hbCBTdHJlYW1Db25maWd1cmF0aW9uTWFw
IHN0cmVhbU1hcCA9Ci0gICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hh
cmFjdGVyaXN0aWNzLlNDQUxFUl9TVFJFQU1fQ09ORklHVVJBVElPTl9NQVApOwotICAgIGZpbmFs
IGludCBzdXBwb3J0TGV2ZWwgPQotICAgICAgICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENh
bWVyYUNoYXJhY3RlcmlzdGljcy5JTkZPX1NVUFBPUlRFRF9IQVJEV0FSRV9MRVZFTCk7Ci0KLSAg
ICBmaW5hbCBhbmRyb2lkLnV0aWwuU2l6ZVtdIG5hdGl2ZVNpemVzID0gc3RyZWFtTWFwLmdldE91
dHB1dFNpemVzKFN1cmZhY2VUZXh0dXJlLmNsYXNzKTsKLSAgICBmaW5hbCBMaXN0PFNpemU+IHNp
emVzID0gY29udmVydFNpemVzKG5hdGl2ZVNpemVzKTsKLQotICAgIC8vIFZpZGVvIG1heSBiZSBz
dHJldGNoZWQgcHJlIExNUjEgb24gbGVnYWN5IGltcGxlbWVudGF0aW9ucy4KLSAgICAvLyBGaWx0
ZXIgb3V0IGZvcm1hdHMgdGhhdCBoYXZlIGRpZmZlcmVudCBhc3BlY3QgcmF0aW8gdGhhbiB0aGUg
c2Vuc29yIGFycmF5LgotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJT
SU9OX0NPREVTLkxPTExJUE9QX01SMQotICAgICAgICAmJiBzdXBwb3J0TGV2ZWwgPT0gQ2FtZXJh
Q2hhcmFjdGVyaXN0aWNzLklORk9fU1VQUE9SVEVEX0hBUkRXQVJFX0xFVkVMX0xFR0FDWSkgewot
ICAgICAgZmluYWwgUmVjdCBhY3RpdmVBcnJheVNpemUgPQotICAgICAgICAgIGNhbWVyYUNoYXJh
Y3RlcmlzdGljcy5nZXQoQ2FtZXJhQ2hhcmFjdGVyaXN0aWNzLlNFTlNPUl9JTkZPX0FDVElWRV9B
UlJBWV9TSVpFKTsKLSAgICAgIGZpbmFsIEFycmF5TGlzdDxTaXplPiBmaWx0ZXJlZFNpemVzID0g
bmV3IEFycmF5TGlzdDxTaXplPigpOwotCi0gICAgICBmb3IgKFNpemUgc2l6ZSA6IHNpemVzKSB7
Ci0gICAgICAgIGlmIChhY3RpdmVBcnJheVNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0ID09IGFj
dGl2ZUFycmF5U2l6ZS5oZWlnaHQoKSAqIHNpemUud2lkdGgpIHsKLSAgICAgICAgICBmaWx0ZXJl
ZFNpemVzLmFkZChzaXplKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICByZXR1cm4gZmls
dGVyZWRTaXplczsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHNpemVzOwotICAgIH0KLSAg
fQotCi0gIHN0YXRpYyBMaXN0PENhcHR1cmVGb3JtYXQ+IGdldFN1cHBvcnRlZEZvcm1hdHMoQ29u
dGV4dCBjb250ZXh0LCBTdHJpbmcgY2FtZXJhSWQpIHsKLSAgICByZXR1cm4gZ2V0U3VwcG9ydGVk
Rm9ybWF0cygKLSAgICAgICAgKENhbWVyYU1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2Vydmlj
ZShDb250ZXh0LkNBTUVSQV9TRVJWSUNFKSwgY2FtZXJhSWQpOwotICB9Ci0KLSAgc3RhdGljIExp
c3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhDYW1lcmFNYW5hZ2VyIGNhbWVy
YU1hbmFnZXIsIFN0cmluZyBjYW1lcmFJZCkgewotICAgIHN5bmNocm9uaXplZCAoY2FjaGVkU3Vw
cG9ydGVkRm9ybWF0cykgewotICAgICAgaWYgKGNhY2hlZFN1cHBvcnRlZEZvcm1hdHMuY29udGFp
bnNLZXkoY2FtZXJhSWQpKSB7Ci0gICAgICAgIHJldHVybiBjYWNoZWRTdXBwb3J0ZWRGb3JtYXRz
LmdldChjYW1lcmFJZCk7Ci0gICAgICB9Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJHZXQgc3Vw
cG9ydGVkIGZvcm1hdHMgZm9yIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQgKyAiLiIpOwotICAg
ICAgZmluYWwgbG9uZyBzdGFydFRpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgp
OwotCi0gICAgICBmaW5hbCBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MgY2FtZXJhQ2hhcmFjdGVyaXN0
aWNzOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzID0gY2FtZXJh
TWFuYWdlci5nZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoY2FtZXJhSWQpOwotICAgICAgfSBjYXRj
aCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJnZXRDYW1lcmFDaGFy
YWN0ZXJpc3RpY3MoKTogIiArIGV4KTsKLSAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8Q2Fw
dHVyZUZvcm1hdD4oKTsKLSAgICAgIH0KLQotICAgICAgZmluYWwgU3RyZWFtQ29uZmlndXJhdGlv
bk1hcCBzdHJlYW1NYXAgPQotICAgICAgICAgIGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoQ2Ft
ZXJhQ2hhcmFjdGVyaXN0aWNzLlNDQUxFUl9TVFJFQU1fQ09ORklHVVJBVElPTl9NQVApOwotCi0g
ICAgICBSYW5nZTxJbnRlZ2VyPltdIGZwc1JhbmdlcyA9Ci0gICAgICAgICAgY2FtZXJhQ2hhcmFj
dGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuQ09OVFJPTF9BRV9BVkFJTEFCTEVf
VEFSR0VUX0ZQU19SQU5HRVMpOwotICAgICAgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJh
bmdlPiBmcmFtZXJhdGVSYW5nZXMgPQotICAgICAgICAgIGNvbnZlcnRGcmFtZXJhdGVzKGZwc1Jh
bmdlcywgZ2V0RnBzVW5pdEZhY3RvcihmcHNSYW5nZXMpKTsKLSAgICAgIExpc3Q8U2l6ZT4gc2l6
ZXMgPSBnZXRTdXBwb3J0ZWRTaXplcyhjYW1lcmFDaGFyYWN0ZXJpc3RpY3MpOwotCi0gICAgICBp
bnQgZGVmYXVsdE1heEZwcyA9IDA7Ci0gICAgICBmb3IgKENhcHR1cmVGb3JtYXQuRnJhbWVyYXRl
UmFuZ2UgZnJhbWVyYXRlUmFuZ2UgOiBmcmFtZXJhdGVSYW5nZXMpIHsKLSAgICAgICAgZGVmYXVs
dE1heEZwcyA9IE1hdGgubWF4KGRlZmF1bHRNYXhGcHMsIGZyYW1lcmF0ZVJhbmdlLm1heCk7Ci0g
ICAgICB9Ci0KLSAgICAgIGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZm9ybWF0TGlzdCA9IG5l
dyBBcnJheUxpc3Q8Q2FwdHVyZUZvcm1hdD4oKTsKLSAgICAgIGZvciAoU2l6ZSBzaXplIDogc2l6
ZXMpIHsKLSAgICAgICAgbG9uZyBtaW5GcmFtZUR1cmF0aW9uTnMgPSAwOwotICAgICAgICB0cnkg
ewotICAgICAgICAgIG1pbkZyYW1lRHVyYXRpb25OcyA9IHN0cmVhbU1hcC5nZXRPdXRwdXRNaW5G
cmFtZUR1cmF0aW9uKAotICAgICAgICAgICAgICBTdXJmYWNlVGV4dHVyZS5jbGFzcywgbmV3IGFu
ZHJvaWQudXRpbC5TaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KSk7Ci0gICAgICAgIH0gY2F0
Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgLy8gZ2V0T3V0cHV0TWluRnJhbWVEdXJhdGlv
bigpIGlzIG5vdCBzdXBwb3J0ZWQgb24gYWxsIGRldmljZXMuIElnbm9yZSBzaWxlbnRseS4KLSAg
ICAgICAgfQotICAgICAgICBmaW5hbCBpbnQgbWF4RnBzID0gKG1pbkZyYW1lRHVyYXRpb25OcyA9
PSAwKQotICAgICAgICAgICAgPyBkZWZhdWx0TWF4RnBzCi0gICAgICAgICAgICA6IChpbnQpIE1h
dGgucm91bmQoTkFOT19TRUNPTkRTX1BFUl9TRUNPTkQgLyBtaW5GcmFtZUR1cmF0aW9uTnMpICog
MTAwMDsKLSAgICAgICAgZm9ybWF0TGlzdC5hZGQobmV3IENhcHR1cmVGb3JtYXQoc2l6ZS53aWR0
aCwgc2l6ZS5oZWlnaHQsIDAsIG1heEZwcykpOwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRm9y
bWF0OiAiICsgc2l6ZS53aWR0aCArICJ4IiArIHNpemUuaGVpZ2h0ICsgIkAiICsgbWF4RnBzKTsK
LSAgICAgIH0KLQotICAgICAgY2FjaGVkU3VwcG9ydGVkRm9ybWF0cy5wdXQoY2FtZXJhSWQsIGZv
cm1hdExpc3QpOwotICAgICAgZmluYWwgbG9uZyBlbmRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFw
c2VkUmVhbHRpbWUoKTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJHZXQgc3VwcG9ydGVkIGZvcm1h
dHMgZm9yIGNhbWVyYSBpbmRleCAiICsgY2FtZXJhSWQgKyAiIGRvbmUuIgotICAgICAgICAgICAg
ICArICIgVGltZSBzcGVudDogIiArIChlbmRUaW1lTXMgLSBzdGFydFRpbWVNcykgKyAiIG1zLiIp
OwotICAgICAgcmV0dXJuIGZvcm1hdExpc3Q7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29udmVydCBm
cm9tIGFuZHJvaWQudXRpbC5TaXplIHRvIFNpemUuCi0gIHByaXZhdGUgc3RhdGljIExpc3Q8U2l6
ZT4gY29udmVydFNpemVzKGFuZHJvaWQudXRpbC5TaXplW10gY2FtZXJhU2l6ZXMpIHsKLSAgICBm
aW5hbCBMaXN0PFNpemU+IHNpemVzID0gbmV3IEFycmF5TGlzdDxTaXplPigpOwotICAgIGZvciAo
YW5kcm9pZC51dGlsLlNpemUgc2l6ZSA6IGNhbWVyYVNpemVzKSB7Ci0gICAgICBzaXplcy5hZGQo
bmV3IFNpemUoc2l6ZS5nZXRXaWR0aCgpLCBzaXplLmdldEhlaWdodCgpKSk7Ci0gICAgfQotICAg
IHJldHVybiBzaXplczsKLSAgfQotCi0gIC8vIENvbnZlcnQgZnJvbSBhbmRyb2lkLnV0aWwuUmFu
Z2U8SW50ZWdlcj4gdG8gQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZS4KLSAgc3RhdGljIExp
c3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gY29udmVydEZyYW1lcmF0ZXMoCi0gICAg
ICBSYW5nZTxJbnRlZ2VyPltdIGFycmF5UmFuZ2VzLCBpbnQgdW5pdEZhY3RvcikgewotICAgIGZp
bmFsIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gcmFuZ2VzID0gbmV3IEFycmF5
TGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPigpOwotICAgIGZvciAoUmFuZ2U8SW50
ZWdlcj4gcmFuZ2UgOiBhcnJheVJhbmdlcykgewotICAgICAgcmFuZ2VzLmFkZChuZXcgQ2FwdHVy
ZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSgKLSAgICAgICAgICByYW5nZS5nZXRMb3dlcigpICogdW5p
dEZhY3RvciwgcmFuZ2UuZ2V0VXBwZXIoKSAqIHVuaXRGYWN0b3IpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHJhbmdlczsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyU2Vzc2lv
bi5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhMlNlc3Npb24uamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyU2Vzc2lvbi5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsNDUxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRB
cGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFw
aGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2Ft
ZXJhQWNjZXNzRXhjZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1l
cmFDYXB0dXJlU2Vzc2lvbjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJh
Q2hhcmFjdGVyaXN0aWNzOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFE
ZXZpY2U7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1p
bXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1ldGFkYXRhOwotaW1wb3J0IGFu
ZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYXB0dXJlRmFpbHVyZTsKLWltcG9ydCBhbmRyb2lkLmhh
cmR3YXJlLmNhbWVyYTIuQ2FwdHVyZVJlcXVlc3Q7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVy
OwotaW1wb3J0IGFuZHJvaWQudXRpbC5SYW5nZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFj
ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBqYXZhLnV0aWwu
QXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJy
ZW50LlRpbWVVbml0OwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lk
LkNhcHR1cmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5NZXRyaWNzLkhpc3RvZ3JhbTsKLQot
QFRhcmdldEFwaSgyMSkKLXB1YmxpYyBjbGFzcyBDYW1lcmEyU2Vzc2lvbiBpbXBsZW1lbnRzIENh
bWVyYVNlc3Npb24gewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVy
YTJTZXNzaW9uIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMlN0
YXJ0VGltZU1zSGlzdG9ncmFtID0KLSAgICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJU
Qy5BbmRyb2lkLkNhbWVyYTIuU3RhcnRUaW1lTXMiLCAxLCAxMDAwMCwgNTApOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gY2FtZXJhMlN0b3BUaW1lTXNIaXN0b2dyYW0gPQotICAg
ICAgSGlzdG9ncmFtLmNyZWF0ZUNvdW50cygiV2ViUlRDLkFuZHJvaWQuQ2FtZXJhMi5TdG9wVGlt
ZU1zIiwgMSwgMTAwMDAsIDUwKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSGlzdG9ncmFtIGNh
bWVyYTJSZXNvbHV0aW9uSGlzdG9ncmFtID0gSGlzdG9ncmFtLmNyZWF0ZUVudW1lcmF0aW9uKAot
ICAgICAgIldlYlJUQy5BbmRyb2lkLkNhbWVyYTIuUmVzb2x1dGlvbiIsIENhbWVyYUVudW1lcmF0
aW9uQW5kcm9pZC5DT01NT05fUkVTT0xVVElPTlMuc2l6ZSgpKTsKLQotICBwcml2YXRlIHN0YXRp
YyBlbnVtIFNlc3Npb25TdGF0ZSB7IFJVTk5JTkcsIFNUT1BQRUQgfQotCi0gIHByaXZhdGUgZmlu
YWwgSGFuZGxlciBjYW1lcmFUaHJlYWRIYW5kbGVyOwotICBwcml2YXRlIGZpbmFsIENyZWF0ZVNl
c3Npb25DYWxsYmFjayBjYWxsYmFjazsKLSAgcHJpdmF0ZSBmaW5hbCBFdmVudHMgZXZlbnRzOwot
ICBwcml2YXRlIGZpbmFsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0OwotICBwcml2YXRlIGZp
bmFsIENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsKLSAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNl
VGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJp
bmcgY2FtZXJhSWQ7Ci0gIHByaXZhdGUgZmluYWwgaW50IHdpZHRoOwotICBwcml2YXRlIGZpbmFs
IGludCBoZWlnaHQ7Ci0gIHByaXZhdGUgZmluYWwgaW50IGZyYW1lcmF0ZTsKLQotICAvLyBJbml0
aWFsaXplZCBhdCBzdGFydAotICBwcml2YXRlIENhbWVyYUNoYXJhY3RlcmlzdGljcyBjYW1lcmFD
aGFyYWN0ZXJpc3RpY3M7Ci0gIHByaXZhdGUgaW50IGNhbWVyYU9yaWVudGF0aW9uOwotICBwcml2
YXRlIGJvb2xlYW4gaXNDYW1lcmFGcm9udEZhY2luZzsKLSAgcHJpdmF0ZSBpbnQgZnBzVW5pdEZh
Y3RvcjsKLSAgcHJpdmF0ZSBDYXB0dXJlRm9ybWF0IGNhcHR1cmVGb3JtYXQ7Ci0KLSAgLy8gSW5p
dGlhbGl6ZWQgd2hlbiBjYW1lcmEgb3BlbnMKLSAgcHJpdmF0ZSBDYW1lcmFEZXZpY2UgY2FtZXJh
RGV2aWNlOwotICBwcml2YXRlIFN1cmZhY2Ugc3VyZmFjZTsKLQotICAvLyBJbml0aWFsaXplZCB3
aGVuIGNhcHR1cmUgc2Vzc2lvbiBpcyBjcmVhdGVkCi0gIHByaXZhdGUgQ2FtZXJhQ2FwdHVyZVNl
c3Npb24gY2FwdHVyZVNlc3Npb247Ci0KLSAgLy8gU3RhdGUKLSAgcHJpdmF0ZSBTZXNzaW9uU3Rh
dGUgc3RhdGUgPSBTZXNzaW9uU3RhdGUuUlVOTklORzsKLSAgcHJpdmF0ZSBib29sZWFuIGZpcnN0
RnJhbWVSZXBvcnRlZCA9IGZhbHNlOwotCi0gIC8vIFVzZWQgb25seSBmb3Igc3RhdHMuIE9ubHkg
dXNlZCBvbiB0aGUgY2FtZXJhIHRocmVhZC4KLSAgcHJpdmF0ZSBmaW5hbCBsb25nIGNvbnN0cnVj
dGlvblRpbWVOczsgLy8gQ29uc3RydWN0aW9uIHRpbWUgb2YgdGhpcyBjbGFzcy4KLQotICBwcml2
YXRlIGNsYXNzIENhbWVyYVN0YXRlQ2FsbGJhY2sgZXh0ZW5kcyBDYW1lcmFEZXZpY2UuU3RhdGVD
YWxsYmFjayB7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RXJyb3JEZXNjcmlwdGlvbihpbnQgZXJy
b3JDb2RlKSB7Ci0gICAgICBzd2l0Y2ggKGVycm9yQ29kZSkgewotICAgICAgICBjYXNlIENhbWVy
YURldmljZS5TdGF0ZUNhbGxiYWNrLkVSUk9SX0NBTUVSQV9ERVZJQ0U6Ci0gICAgICAgICAgcmV0
dXJuICJDYW1lcmEgZGV2aWNlIGhhcyBlbmNvdW50ZXJlZCBhIGZhdGFsIGVycm9yLiI7Ci0gICAg
ICAgIGNhc2UgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2suRVJST1JfQ0FNRVJBX0RJU0FCTEVE
OgotICAgICAgICAgIHJldHVybiAiQ2FtZXJhIGRldmljZSBjb3VsZCBub3QgYmUgb3BlbmVkIGR1
ZSB0byBhIGRldmljZSBwb2xpY3kuIjsKLSAgICAgICAgY2FzZSBDYW1lcmFEZXZpY2UuU3RhdGVD
YWxsYmFjay5FUlJPUl9DQU1FUkFfSU5fVVNFOgotICAgICAgICAgIHJldHVybiAiQ2FtZXJhIGRl
dmljZSBpcyBpbiB1c2UgYWxyZWFkeS4iOwotICAgICAgICBjYXNlIENhbWVyYURldmljZS5TdGF0
ZUNhbGxiYWNrLkVSUk9SX0NBTUVSQV9TRVJWSUNFOgotICAgICAgICAgIHJldHVybiAiQ2FtZXJh
IHNlcnZpY2UgaGFzIGVuY291bnRlcmVkIGEgZmF0YWwgZXJyb3IuIjsKLSAgICAgICAgY2FzZSBD
YW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjay5FUlJPUl9NQVhfQ0FNRVJBU19JTl9VU0U6Ci0gICAg
ICAgICAgcmV0dXJuICJDYW1lcmEgZGV2aWNlIGNvdWxkIG5vdCBiZSBvcGVuZWQgYmVjYXVzZSIK
LSAgICAgICAgICAgICAgKyAiIHRoZXJlIGFyZSB0b28gbWFueSBvdGhlciBvcGVuIGNhbWVyYSBk
ZXZpY2VzLiI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgcmV0dXJuICJVbmtub3duIGNh
bWVyYSBlcnJvcjogIiArIGVycm9yQ29kZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRpc2Nvbm5lY3RlZChDYW1lcmFEZXZpY2UgY2FtZXJhKSB7
Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIGZpbmFsIGJvb2xlYW4gc3Rh
cnRGYWlsdXJlID0gKGNhcHR1cmVTZXNzaW9uID09IG51bGwpOwotICAgICAgc3RhdGUgPSBTZXNz
aW9uU3RhdGUuU1RPUFBFRDsKLSAgICAgIHN0b3BJbnRlcm5hbCgpOwotICAgICAgaWYgKHN0YXJ0
RmFpbHVyZSkgewotICAgICAgICBjYWxsYmFjay5vbkZhaWx1cmUoIkNhbWVyYSBkaXNjb25uZWN0
ZWQgLyBldmljdGVkLiIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZXZlbnRzLm9uQ2FtZXJh
RGlzY29ubmVjdGVkKENhbWVyYTJTZXNzaW9uLnRoaXMpOwotICAgICAgfQotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRXJyb3IoQ2FtZXJhRGV2aWNlIGNhbWVyYSwg
aW50IGVycm9yQ29kZSkgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBy
ZXBvcnRFcnJvcihnZXRFcnJvckRlc2NyaXB0aW9uKGVycm9yQ29kZSkpOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uT3BlbmVkKENhbWVyYURldmljZSBjYW1lcmEp
IHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotCi0gICAgICBMb2dnaW5nLmQoVEFH
LCAiQ2FtZXJhIG9wZW5lZC4iKTsKLSAgICAgIGNhbWVyYURldmljZSA9IGNhbWVyYTsKLQotICAg
ICAgZmluYWwgU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUgPSBzdXJmYWNlVGV4dHVyZUhl
bHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpOwotICAgICAgc3VyZmFjZVRleHR1cmUuc2V0RGVmYXVs
dEJ1ZmZlclNpemUoY2FwdHVyZUZvcm1hdC53aWR0aCwgY2FwdHVyZUZvcm1hdC5oZWlnaHQpOwot
ICAgICAgc3VyZmFjZSA9IG5ldyBTdXJmYWNlKHN1cmZhY2VUZXh0dXJlKTsKLSAgICAgIHRyeSB7
Ci0gICAgICAgIGNhbWVyYS5jcmVhdGVDYXB0dXJlU2Vzc2lvbigKLSAgICAgICAgICAgIEFycmF5
cy5hc0xpc3Qoc3VyZmFjZSksIG5ldyBDYXB0dXJlU2Vzc2lvbkNhbGxiYWNrKCksIGNhbWVyYVRo
cmVhZEhhbmRsZXIpOwotICAgICAgfSBjYXRjaCAoQ2FtZXJhQWNjZXNzRXhjZXB0aW9uIGUpIHsK
LSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgY2FwdHVyZSBzZXNzaW9uLiAi
ICsgZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvbkNsb3NlZChDYW1lcmFEZXZpY2UgY2FtZXJhKSB7Ci0gICAgICBj
aGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhbWVyYSBk
ZXZpY2UgY2xvc2VkLiIpOwotICAgICAgZXZlbnRzLm9uQ2FtZXJhQ2xvc2VkKENhbWVyYTJTZXNz
aW9uLnRoaXMpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgQ2FwdHVyZVNlc3Npb25D
YWxsYmFjayBleHRlbmRzIENhbWVyYUNhcHR1cmVTZXNzaW9uLlN0YXRlQ2FsbGJhY2sgewotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ29uZmlndXJlRmFpbGVkKENhbWVyYUNhcHR1
cmVTZXNzaW9uIHNlc3Npb24pIHsKLSAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAg
ICAgc2Vzc2lvbi5jbG9zZSgpOwotICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjb25maWd1
cmUgY2FwdHVyZSBzZXNzaW9uLiIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uQ29uZmlndXJlZChDYW1lcmFDYXB0dXJlU2Vzc2lvbiBzZXNzaW9uKSB7Ci0gICAg
ICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmEg
Y2FwdHVyZSBzZXNzaW9uIGNvbmZpZ3VyZWQuIik7Ci0gICAgICBjYXB0dXJlU2Vzc2lvbiA9IHNl
c3Npb247Ci0gICAgICB0cnkgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGUgdmlhYmxlIG9w
dGlvbnMgZm9yIHZpZGVvIGNhcHR1cmUgcmVxdWVzdHMgYXJlOgotICAgICAgICAgKiBURU1QTEFU
RV9QUkVWSUVXOiBIaWdoIGZyYW1lIHJhdGUgaXMgZ2l2ZW4gcHJpb3JpdHkgb3ZlciB0aGUgaGln
aGVzdC1xdWFsaXR5Ci0gICAgICAgICAqICAgcG9zdC1wcm9jZXNzaW5nLgotICAgICAgICAgKiBU
RU1QTEFURV9SRUNPUkQ6IFN0YWJsZSBmcmFtZSByYXRlIGlzIHVzZWQsIGFuZCBwb3N0LXByb2Nl
c3NpbmcgaXMgc2V0IGZvciByZWNvcmRpbmcKLSAgICAgICAgICogICBxdWFsaXR5LgotICAgICAg
ICAgKi8KLSAgICAgICAgZmluYWwgQ2FwdHVyZVJlcXVlc3QuQnVpbGRlciBjYXB0dXJlUmVxdWVz
dEJ1aWxkZXIgPQotICAgICAgICAgICAgY2FtZXJhRGV2aWNlLmNyZWF0ZUNhcHR1cmVSZXF1ZXN0
KENhbWVyYURldmljZS5URU1QTEFURV9SRUNPUkQpOwotICAgICAgICAvLyBTZXQgYXV0byBleHBv
c3VyZSBmcHMgcmFuZ2UuCi0gICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2FwdHVy
ZVJlcXVlc3QuQ09OVFJPTF9BRV9UQVJHRVRfRlBTX1JBTkdFLAotICAgICAgICAgICAgbmV3IFJh
bmdlPEludGVnZXI+KGNhcHR1cmVGb3JtYXQuZnJhbWVyYXRlLm1pbiAvIGZwc1VuaXRGYWN0b3Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVGb3JtYXQuZnJh
bWVyYXRlLm1heCAvIGZwc1VuaXRGYWN0b3IpKTsKLSAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWls
ZGVyLnNldCgKLSAgICAgICAgICAgIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfQUVfTU9ERSwgQ2Fw
dHVyZVJlcXVlc3QuQ09OVFJPTF9BRV9NT0RFX09OKTsKLSAgICAgICAgY2FwdHVyZVJlcXVlc3RC
dWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FFX0xPQ0ssIGZhbHNlKTsKLSAgICAg
ICAgY2hvb3NlU3RhYmlsaXphdGlvbk1vZGUoY2FwdHVyZVJlcXVlc3RCdWlsZGVyKTsKLSAgICAg
ICAgY2hvb3NlRm9jdXNNb2RlKGNhcHR1cmVSZXF1ZXN0QnVpbGRlcik7Ci0KLSAgICAgICAgY2Fw
dHVyZVJlcXVlc3RCdWlsZGVyLmFkZFRhcmdldChzdXJmYWNlKTsKLSAgICAgICAgc2Vzc2lvbi5z
ZXRSZXBlYXRpbmdSZXF1ZXN0KAotICAgICAgICAgICAgY2FwdHVyZVJlcXVlc3RCdWlsZGVyLmJ1
aWxkKCksIG5ldyBDYW1lcmFDYXB0dXJlQ2FsbGJhY2soKSwgY2FtZXJhVGhyZWFkSGFuZGxlcik7
Ci0gICAgICB9IGNhdGNoIChDYW1lcmFBY2Nlc3NFeGNlcHRpb24gZSkgewotICAgICAgICByZXBv
cnRFcnJvcigiRmFpbGVkIHRvIHN0YXJ0IGNhcHR1cmUgcmVxdWVzdC4gIiArIGUpOwotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlz
dGVuaW5nKAotICAgICAgICAgIG5ldyBTdXJmYWNlVGV4dHVyZUhlbHBlci5PblRleHR1cmVGcmFt
ZUF2YWlsYWJsZUxpc3RlbmVyKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAg
ICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAgICAgICAgICAgICAgICBp
bnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBO
cykgewotICAgICAgICAgICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgICAgICAg
ICAgICBpZiAoc3RhdGUgIT0gU2Vzc2lvblN0YXRlLlJVTk5JTkcpIHsKLSAgICAgICAgICAgICAg
ICBMb2dnaW5nLmQoVEFHLCAiVGV4dHVyZSBmcmFtZSBjYXB0dXJlZCBidXQgY2FtZXJhIGlzIG5v
IGxvbmdlciBydW5uaW5nLiIpOwotICAgICAgICAgICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgIGlmICghZmlyc3RGcmFtZVJlcG9ydGVkKSB7Ci0gICAg
ICAgICAgICAgICAgZmlyc3RGcmFtZVJlcG9ydGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBm
aW5hbCBpbnQgc3RhcnRUaW1lTXMgPQotICAgICAgICAgICAgICAgICAgICAoaW50KSBUaW1lVW5p
dC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIGNvbnN0cnVjdGlvblRp
bWVOcyk7Ci0gICAgICAgICAgICAgICAgY2FtZXJhMlN0YXJ0VGltZU1zSGlzdG9ncmFtLmFkZFNh
bXBsZShzdGFydFRpbWVNcyk7Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpbnQg
cm90YXRpb24gPSBnZXRGcmFtZU9yaWVudGF0aW9uKCk7Ci0gICAgICAgICAgICAgIGlmIChpc0Nh
bWVyYUZyb250RmFjaW5nKSB7Ci0gICAgICAgICAgICAgICAgLy8gVW5kbyB0aGUgbWlycm9yIHRo
YXQgdGhlIE9TICJoZWxwcyIgdXMgd2l0aC4KLSAgICAgICAgICAgICAgICAvLyBodHRwOi8vZGV2
ZWxvcGVyLmFuZHJvaWQuY29tL3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5odG1s
I3NldERpc3BsYXlPcmllbnRhdGlvbihpbnQpCi0gICAgICAgICAgICAgICAgdHJhbnNmb3JtTWF0
cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNlcygKLSAgICAgICAgICAgICAgICAg
ICAgdHJhbnNmb3JtTWF0cml4LCBSZW5kZXJlckNvbW1vbi5ob3Jpem9udGFsRmxpcE1hdHJpeCgp
KTsKLSAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8vIFVuZG8gY2FtZXJhIG9yaWVu
dGF0aW9uIC0gd2UgcmVwb3J0IGl0IGFzIHJvdGF0aW9uIGluc3RlYWQuCi0gICAgICAgICAgICAg
IHRyYW5zZm9ybU1hdHJpeCA9Ci0gICAgICAgICAgICAgICAgICBSZW5kZXJlckNvbW1vbi5yb3Rh
dGVUZXh0dXJlTWF0cml4KHRyYW5zZm9ybU1hdHJpeCwgLWNhbWVyYU9yaWVudGF0aW9uKTsKLQot
ICAgICAgICAgICAgICBldmVudHMub25UZXh0dXJlRnJhbWVDYXB0dXJlZChDYW1lcmEyU2Vzc2lv
bi50aGlzLCBjYXB0dXJlRm9ybWF0LndpZHRoLAotICAgICAgICAgICAgICAgICAgY2FwdHVyZUZv
cm1hdC5oZWlnaHQsIG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LCByb3RhdGlvbiwgdGlt
ZXN0YW1wTnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0pOwotICAgICAgTG9nZ2luZy5k
KFRBRywgIkNhbWVyYSBkZXZpY2Ugc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQuIik7Ci0gICAgICBjYWxs
YmFjay5vbkRvbmUoQ2FtZXJhMlNlc3Npb24udGhpcyk7Ci0gICAgfQotCi0gICAgLy8gUHJlZmVy
cyBvcHRpY2FsIHN0YWJpbGl6YXRpb24gb3ZlciBzb2Z0d2FyZSBzdGFiaWxpemF0aW9uIGlmIGF2
YWlsYWJsZS4gT25seSBlbmFibGVzIG9uZSBvZgotICAgIC8vIHRoZSBzdGFiaWxpemF0aW9uIG1v
ZGVzIGF0IGEgdGltZSBiZWNhdXNlIGhhdmluZyBib3RoIGVuYWJsZWQgY2FuIGNhdXNlIHN0cmFu
Z2UgcmVzdWx0cy4KLSAgICBwcml2YXRlIHZvaWQgY2hvb3NlU3RhYmlsaXphdGlvbk1vZGUoQ2Fw
dHVyZVJlcXVlc3QuQnVpbGRlciBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIpIHsKLSAgICAgIGZpbmFs
IGludFtdIGF2YWlsYWJsZU9wdGljYWxTdGFiaWxpemF0aW9uID0gY2FtZXJhQ2hhcmFjdGVyaXN0
aWNzLmdldCgKLSAgICAgICAgICBDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuTEVOU19JTkZPX0FWQUlM
QUJMRV9PUFRJQ0FMX1NUQUJJTElaQVRJT04pOwotICAgICAgaWYgKGF2YWlsYWJsZU9wdGljYWxT
dGFiaWxpemF0aW9uICE9IG51bGwpIHsKLSAgICAgICAgZm9yIChpbnQgbW9kZSA6IGF2YWlsYWJs
ZU9wdGljYWxTdGFiaWxpemF0aW9uKSB7Ci0gICAgICAgICAgaWYgKG1vZGUgPT0gQ2FwdHVyZVJl
cXVlc3QuTEVOU19PUFRJQ0FMX1NUQUJJTElaQVRJT05fTU9ERV9PTikgewotICAgICAgICAgICAg
Y2FwdHVyZVJlcXVlc3RCdWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5MRU5TX09QVElDQUxfU1RB
QklMSVpBVElPTl9NT0RFLAotICAgICAgICAgICAgICAgIENhcHR1cmVSZXF1ZXN0LkxFTlNfT1BU
SUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT04pOwotICAgICAgICAgICAgY2FwdHVyZVJlcXVlc3RC
dWlsZGVyLnNldChDYXB0dXJlUmVxdWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTElaQVRJT05fTU9E
RSwKLSAgICAgICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTEla
QVRJT05fTU9ERV9PRkYpOwotICAgICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlVzaW5nIG9wdGlj
YWwgc3RhYmlsaXphdGlvbi4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIElmIG5vIG9wdGljYWwgbW9kZSBpcyBhdmFpbGFi
bGUsIHRyeSBzb2Z0d2FyZS4KLSAgICAgIGZpbmFsIGludFtdIGF2YWlsYWJsZVZpZGVvU3RhYmls
aXphdGlvbiA9IGNhbWVyYUNoYXJhY3RlcmlzdGljcy5nZXQoCi0gICAgICAgICAgQ2FtZXJhQ2hh
cmFjdGVyaXN0aWNzLkNPTlRST0xfQVZBSUxBQkxFX1ZJREVPX1NUQUJJTElaQVRJT05fTU9ERVMp
OwotICAgICAgZm9yIChpbnQgbW9kZSA6IGF2YWlsYWJsZVZpZGVvU3RhYmlsaXphdGlvbikgewot
ICAgICAgICBpZiAobW9kZSA9PSBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX1ZJREVPX1NUQUJJTEla
QVRJT05fTU9ERV9PTikgewotICAgICAgICAgIGNhcHR1cmVSZXF1ZXN0QnVpbGRlci5zZXQoQ2Fw
dHVyZVJlcXVlc3QuQ09OVFJPTF9WSURFT19TVEFCSUxJWkFUSU9OX01PREUsCi0gICAgICAgICAg
ICAgIENhcHR1cmVSZXF1ZXN0LkNPTlRST0xfVklERU9fU1RBQklMSVpBVElPTl9NT0RFX09OKTsK
LSAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KENhcHR1cmVSZXF1ZXN0LkxFTlNf
T1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREUsCi0gICAgICAgICAgICAgIENhcHR1cmVSZXF1ZXN0
LkxFTlNfT1BUSUNBTF9TVEFCSUxJWkFUSU9OX01PREVfT0ZGKTsKLSAgICAgICAgICBMb2dnaW5n
LmQoVEFHLCAiVXNpbmcgdmlkZW8gc3RhYmlsaXphdGlvbi4iKTsKLSAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJTdGFiaWxpemF0aW9u
IG5vdCBhdmFpbGFibGUuIik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNob29zZUZvY3Vz
TW9kZShDYXB0dXJlUmVxdWVzdC5CdWlsZGVyIGNhcHR1cmVSZXF1ZXN0QnVpbGRlcikgewotICAg
ICAgZmluYWwgaW50W10gYXZhaWxhYmxlRm9jdXNNb2RlcyA9Ci0gICAgICAgICAgY2FtZXJhQ2hh
cmFjdGVyaXN0aWNzLmdldChDYW1lcmFDaGFyYWN0ZXJpc3RpY3MuQ09OVFJPTF9BRl9BVkFJTEFC
TEVfTU9ERVMpOwotICAgICAgZm9yIChpbnQgbW9kZSA6IGF2YWlsYWJsZUZvY3VzTW9kZXMpIHsK
LSAgICAgICAgaWYgKG1vZGUgPT0gQ2FwdHVyZVJlcXVlc3QuQ09OVFJPTF9BRl9NT0RFX0NPTlRJ
TlVPVVNfVklERU8pIHsKLSAgICAgICAgICBjYXB0dXJlUmVxdWVzdEJ1aWxkZXIuc2V0KAotICAg
ICAgICAgICAgICBDYXB0dXJlUmVxdWVzdC5DT05UUk9MX0FGX01PREUsIENhcHR1cmVSZXF1ZXN0
LkNPTlRST0xfQUZfTU9ERV9DT05USU5VT1VTX1ZJREVPKTsKLSAgICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiVXNpbmcgY29udGludW91cyB2aWRlbyBhdXRvLWZvY3VzLiIpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1dG8tZm9j
dXMgaXMgbm90IGF2YWlsYWJsZS4iKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIENh
bWVyYUNhcHR1cmVDYWxsYmFjayBleHRlbmRzIENhbWVyYUNhcHR1cmVTZXNzaW9uLkNhcHR1cmVD
YWxsYmFjayB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJlRmFpbGVk
KAotICAgICAgICBDYW1lcmFDYXB0dXJlU2Vzc2lvbiBzZXNzaW9uLCBDYXB0dXJlUmVxdWVzdCBy
ZXF1ZXN0LCBDYXB0dXJlRmFpbHVyZSBmYWlsdXJlKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAi
Q2FwdHVyZSBmYWlsZWQ6ICIgKyBmYWlsdXJlKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIHZvaWQgY3JlYXRlKENyZWF0ZVNlc3Npb25DYWxsYmFjayBjYWxsYmFjaywgRXZlbnRzIGV2
ZW50cywKLSAgICAgIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LCBDYW1lcmFNYW5hZ2VyIGNh
bWVyYU1hbmFnZXIsCi0gICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhl
bHBlciwgU3RyaW5nIGNhbWVyYUlkLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICBpbnQg
ZnJhbWVyYXRlKSB7Ci0gICAgbmV3IENhbWVyYTJTZXNzaW9uKGNhbGxiYWNrLCBldmVudHMsIGFw
cGxpY2F0aW9uQ29udGV4dCwgY2FtZXJhTWFuYWdlciwgc3VyZmFjZVRleHR1cmVIZWxwZXIsCi0g
ICAgICAgIGNhbWVyYUlkLCB3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICB9Ci0KLSAgcHJp
dmF0ZSBDYW1lcmEyU2Vzc2lvbihDcmVhdGVTZXNzaW9uQ2FsbGJhY2sgY2FsbGJhY2ssIEV2ZW50
cyBldmVudHMsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgQ2FtZXJhTWFuYWdl
ciBjYW1lcmFNYW5hZ2VyLCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBl
ciwgU3RyaW5nIGNhbWVyYUlkLAotICAgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJh
bWVyYXRlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0ZSBuZXcgY2FtZXJhMiBzZXNzaW9u
IG9uIGNhbWVyYSAiICsgY2FtZXJhSWQpOwotCi0gICAgY29uc3RydWN0aW9uVGltZU5zID0gU3lz
dGVtLm5hbm9UaW1lKCk7Ci0KLSAgICB0aGlzLmNhbWVyYVRocmVhZEhhbmRsZXIgPSBuZXcgSGFu
ZGxlcigpOwotICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjazsKLSAgICB0aGlzLmV2ZW50cyA9
IGV2ZW50czsKLSAgICB0aGlzLmFwcGxpY2F0aW9uQ29udGV4dCA9IGFwcGxpY2F0aW9uQ29udGV4
dDsKLSAgICB0aGlzLmNhbWVyYU1hbmFnZXIgPSBjYW1lcmFNYW5hZ2VyOwotICAgIHRoaXMuc3Vy
ZmFjZVRleHR1cmVIZWxwZXIgPSBzdXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICB0aGlzLmNhbWVy
YUlkID0gY2FtZXJhSWQ7Ci0gICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgIHRoaXMuaGVpZ2h0
ID0gaGVpZ2h0OwotICAgIHRoaXMuZnJhbWVyYXRlID0gZnJhbWVyYXRlOwotCi0gICAgc3RhcnQo
KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFydCgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFU
aHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnQiKTsKLQotICAgIHRyeSB7Ci0gICAg
ICBjYW1lcmFDaGFyYWN0ZXJpc3RpY3MgPSBjYW1lcmFNYW5hZ2VyLmdldENhbWVyYUNoYXJhY3Rl
cmlzdGljcyhjYW1lcmFJZCk7Ci0gICAgfSBjYXRjaCAoZmluYWwgQ2FtZXJhQWNjZXNzRXhjZXB0
aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJnZXRDYW1lcmFDaGFyYWN0ZXJpc3RpY3MoKTog
IiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgY2FtZXJhT3JpZW50YXRpb24gPSBjYW1l
cmFDaGFyYWN0ZXJpc3RpY3MuZ2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5TRU5TT1JfT1JJRU5U
QVRJT04pOwotICAgIGlzQ2FtZXJhRnJvbnRGYWNpbmcgPSBjYW1lcmFDaGFyYWN0ZXJpc3RpY3Mu
Z2V0KENhbWVyYUNoYXJhY3RlcmlzdGljcy5MRU5TX0ZBQ0lORykKLSAgICAgICAgPT0gQ2FtZXJh
TWV0YWRhdGEuTEVOU19GQUNJTkdfRlJPTlQ7Ci0KLSAgICBmaW5kQ2FwdHVyZUZvcm1hdCgpOwot
ICAgIG9wZW5DYW1lcmEoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBmaW5kQ2FwdHVyZUZvcm1h
dCgpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLQotICAgIFJhbmdlPEludGVnZXI+
W10gZnBzUmFuZ2VzID0KLSAgICAgICAgY2FtZXJhQ2hhcmFjdGVyaXN0aWNzLmdldChDYW1lcmFD
aGFyYWN0ZXJpc3RpY3MuQ09OVFJPTF9BRV9BVkFJTEFCTEVfVEFSR0VUX0ZQU19SQU5HRVMpOwot
ICAgIGZwc1VuaXRGYWN0b3IgPSBDYW1lcmEyRW51bWVyYXRvci5nZXRGcHNVbml0RmFjdG9yKGZw
c1Jhbmdlcyk7Ci0gICAgTGlzdDxDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlPiBmcmFtZXJh
dGVSYW5nZXMgPQotICAgICAgICBDYW1lcmEyRW51bWVyYXRvci5jb252ZXJ0RnJhbWVyYXRlcyhm
cHNSYW5nZXMsIGZwc1VuaXRGYWN0b3IpOwotICAgIExpc3Q8U2l6ZT4gc2l6ZXMgPSBDYW1lcmEy
RW51bWVyYXRvci5nZXRTdXBwb3J0ZWRTaXplcyhjYW1lcmFDaGFyYWN0ZXJpc3RpY3MpOwotICAg
IExvZ2dpbmcuZChUQUcsICJBdmFpbGFibGUgcHJldmlldyBzaXplczogIiArIHNpemVzKTsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiQXZhaWxhYmxlIGZwcyByYW5nZXM6ICIgKyBmcmFtZXJhdGVSYW5n
ZXMpOwotCi0gICAgaWYgKGZyYW1lcmF0ZVJhbmdlcy5pc0VtcHR5KCkgfHwgc2l6ZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICByZXBvcnRFcnJvcigiTm8gc3VwcG9ydGVkIGNhcHR1cmUgZm9ybWF0cy4i
KTsKLSAgICB9Ci0KLSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIGJlc3RG
cHNSYW5nZSA9Ci0gICAgICAgIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3Vw
cG9ydGVkRnJhbWVyYXRlUmFuZ2UoZnJhbWVyYXRlUmFuZ2VzLCBmcmFtZXJhdGUpOwotCi0gICAg
ZmluYWwgU2l6ZSBiZXN0U2l6ZSA9IENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0
U3VwcG9ydGVkU2l6ZShzaXplcywgd2lkdGgsIGhlaWdodCk7Ci0gICAgQ2FtZXJhRW51bWVyYXRp
b25BbmRyb2lkLnJlcG9ydENhbWVyYVJlc29sdXRpb24oY2FtZXJhMlJlc29sdXRpb25IaXN0b2dy
YW0sIGJlc3RTaXplKTsKLQotICAgIGNhcHR1cmVGb3JtYXQgPSBuZXcgQ2FwdHVyZUZvcm1hdChi
ZXN0U2l6ZS53aWR0aCwgYmVzdFNpemUuaGVpZ2h0LCBiZXN0RnBzUmFuZ2UpOwotICAgIExvZ2dp
bmcuZChUQUcsICJVc2luZyBjYXB0dXJlIGZvcm1hdDogIiArIGNhcHR1cmVGb3JtYXQpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIG9wZW5DYW1lcmEoKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhy
ZWFkKCk7Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAiT3BlbmluZyBjYW1lcmEgIiArIGNhbWVyYUlk
KTsKLSAgICBldmVudHMub25DYW1lcmFPcGVuaW5nKCk7Ci0KLSAgICB0cnkgewotICAgICAgY2Ft
ZXJhTWFuYWdlci5vcGVuQ2FtZXJhKGNhbWVyYUlkLCBuZXcgQ2FtZXJhU3RhdGVDYWxsYmFjaygp
LCBjYW1lcmFUaHJlYWRIYW5kbGVyKTsKLSAgICB9IGNhdGNoIChDYW1lcmFBY2Nlc3NFeGNlcHRp
b24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBvcGVuIGNhbWVyYTogIiArIGUp
OwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAg
IExvZ2dpbmcuZChUQUcsICJTdG9wIGNhbWVyYTIgc2Vzc2lvbiBvbiBjYW1lcmEgIiArIGNhbWVy
YUlkKTsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoc3RhdGUgIT0gU2Vz
c2lvblN0YXRlLlNUT1BQRUQpIHsKLSAgICAgIGZpbmFsIGxvbmcgc3RvcFN0YXJ0VGltZSA9IFN5
c3RlbS5uYW5vVGltZSgpOwotICAgICAgc3RhdGUgPSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAg
ICAgIHN0b3BJbnRlcm5hbCgpOwotICAgICAgZmluYWwgaW50IHN0b3BUaW1lTXMgPSAoaW50KSBU
aW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0ubmFub1RpbWUoKSAtIHN0b3BTdGFy
dFRpbWUpOwotICAgICAgY2FtZXJhMlN0b3BUaW1lTXNIaXN0b2dyYW0uYWRkU2FtcGxlKHN0b3BU
aW1lTXMpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdG9wSW50ZXJuYWwoKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgaW50ZXJuYWwiKTsKLSAgICBjaGVja0lzT25DYW1lcmFU
aHJlYWQoKTsKLQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLQot
ICAgIGlmIChjYXB0dXJlU2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICBjYXB0dXJlU2Vzc2lvbi5j
bG9zZSgpOwotICAgICAgY2FwdHVyZVNlc3Npb24gPSBudWxsOwotICAgIH0KLSAgICBpZiAoc3Vy
ZmFjZSAhPSBudWxsKSB7Ci0gICAgICBzdXJmYWNlLnJlbGVhc2UoKTsKLSAgICAgIHN1cmZhY2Ug
PSBudWxsOwotICAgIH0KLSAgICBpZiAoY2FtZXJhRGV2aWNlICE9IG51bGwpIHsKLSAgICAgIGNh
bWVyYURldmljZS5jbG9zZSgpOwotICAgICAgY2FtZXJhRGV2aWNlID0gbnVsbDsKLSAgICB9Ci0K
LSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBkb25lIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
cmVwb3J0RXJyb3IoU3RyaW5nIGVycm9yKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7
Ci0gICAgTG9nZ2luZy5lKFRBRywgIkVycm9yOiAiICsgZXJyb3IpOwotCi0gICAgZmluYWwgYm9v
bGVhbiBzdGFydEZhaWx1cmUgPSAoY2FwdHVyZVNlc3Npb24gPT0gbnVsbCk7Ci0gICAgc3RhdGUg
PSBTZXNzaW9uU3RhdGUuU1RPUFBFRDsKLSAgICBzdG9wSW50ZXJuYWwoKTsKLSAgICBpZiAoc3Rh
cnRGYWlsdXJlKSB7Ci0gICAgICBjYWxsYmFjay5vbkZhaWx1cmUoZXJyb3IpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBldmVudHMub25DYW1lcmFFcnJvcih0aGlzLCBlcnJvcik7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0RGV2aWNlT3JpZW50YXRpb24oKSB7Ci0gICAgaW50IG9yaWVu
dGF0aW9uID0gMDsKLQotICAgIFdpbmRvd01hbmFnZXIgd20gPSAoV2luZG93TWFuYWdlcikgYXBw
bGljYXRpb25Db250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7
Ci0gICAgc3dpdGNoICh3bS5nZXREZWZhdWx0RGlzcGxheSgpLmdldFJvdGF0aW9uKCkpIHsKLSAg
ICAgIGNhc2UgU3VyZmFjZS5ST1RBVElPTl85MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSA5MDsK
LSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMTgwOgotICAgICAg
ICBvcmllbnRhdGlvbiA9IDE4MDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFN1cmZhY2Uu
Uk9UQVRJT05fMjcwOgotICAgICAgICBvcmllbnRhdGlvbiA9IDI3MDsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICBjYXNlIFN1cmZhY2UuUk9UQVRJT05fMDoKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
IG9yaWVudGF0aW9uID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBvcmll
bnRhdGlvbjsKLSAgfQotCi0gIHByaXZhdGUgaW50IGdldEZyYW1lT3JpZW50YXRpb24oKSB7Ci0g
ICAgaW50IHJvdGF0aW9uID0gZ2V0RGV2aWNlT3JpZW50YXRpb24oKTsKLSAgICBpZiAoIWlzQ2Ft
ZXJhRnJvbnRGYWNpbmcpIHsKLSAgICAgIHJvdGF0aW9uID0gMzYwIC0gcm90YXRpb247Ci0gICAg
fQotICAgIHJldHVybiAoY2FtZXJhT3JpZW50YXRpb24gKyByb3RhdGlvbikgJSAzNjA7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCkgewotICAgIGlmIChUaHJl
YWQuY3VycmVudFRocmVhZCgpICE9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0
VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldyb25n
IHRocmVhZCIpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFD
YXB0dXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvQ2FtZXJhQ2FwdHVy
ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFDYXB0
dXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDQzICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250
ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3Bl
cjsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXBy
ZWNhdGlvbiIpCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQ2FtZXJhQ2FwdHVyZXIgaW1wbGVtZW50
cyBDYW1lcmFWaWRlb0NhcHR1cmVyIHsKLSAgZW51bSBTd2l0Y2hTdGF0ZSB7Ci0gICAgSURMRSwg
Ly8gTm8gc3dpdGNoIHJlcXVlc3RlZC4KLSAgICBQRU5ESU5HLCAvLyBXYWl0aW5nIGZvciBwcmV2
aW91cyBjYXB0dXJlIHNlc3Npb24gdG8gb3Blbi4KLSAgICBJTl9QUk9HUkVTUywgLy8gV2FpdGlu
ZyBmb3IgbmV3IHN3aXRjaGVkIGNhcHR1cmUgc2Vzc2lvbiB0byBzdGFydC4KLSAgfQotCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJhQ2FwdHVyZXIiOwotICBwcml2
YXRlIGZpbmFsIHN0YXRpYyBpbnQgTUFYX09QRU5fQ0FNRVJBX0FUVEVNUFRTID0gMzsKLSAgcHJp
dmF0ZSBmaW5hbCBzdGF0aWMgaW50IE9QRU5fQ0FNRVJBX0RFTEFZX01TID0gNTAwOwotICBwcml2
YXRlIGZpbmFsIHN0YXRpYyBpbnQgT1BFTl9DQU1FUkFfVElNRU9VVCA9IDEwMDAwOwotCi0gIHBy
aXZhdGUgZmluYWwgQ2FtZXJhRW51bWVyYXRvciBjYW1lcmFFbnVtZXJhdG9yOwotICBwcml2YXRl
IGZpbmFsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcjsKLSAgcHJpdmF0ZSBmaW5h
bCBIYW5kbGVyIHVpVGhyZWFkSGFuZGxlcjsKLQotICBwcml2YXRlIGZpbmFsIENhbWVyYVNlc3Np
b24uQ3JlYXRlU2Vzc2lvbkNhbGxiYWNrIGNyZWF0ZVNlc3Npb25DYWxsYmFjayA9Ci0gICAgICBu
ZXcgQ2FtZXJhU2Vzc2lvbi5DcmVhdGVTZXNzaW9uQ2FsbGJhY2soKSB7Ci0gICAgICAgIEBPdmVy
cmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkRvbmUoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKSB7
Ci0gICAgICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICAgICAgTG9nZ2luZy5k
KFRBRywgIkNyZWF0ZSBzZXNzaW9uIGRvbmUiKTsKLSAgICAgICAgICB1aVRocmVhZEhhbmRsZXIu
cmVtb3ZlQ2FsbGJhY2tzKG9wZW5DYW1lcmFUaW1lb3V0UnVubmFibGUpOwotICAgICAgICAgIHN5
bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9u
Q2FwdHVyZXJTdGFydGVkKHRydWUgLyogc3VjY2VzcyAqLyk7Ci0gICAgICAgICAgICBzZXNzaW9u
T3BlbmluZyA9IGZhbHNlOwotICAgICAgICAgICAgY3VycmVudFNlc3Npb24gPSBzZXNzaW9uOwot
ICAgICAgICAgICAgY2FtZXJhU3RhdGlzdGljcyA9IG5ldyBDYW1lcmFTdGF0aXN0aWNzKHN1cmZh
Y2VIZWxwZXIsIGV2ZW50c0hhbmRsZXIpOwotICAgICAgICAgICAgZmlyc3RGcmFtZU9ic2VydmVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICBzdGF0ZUxvY2subm90aWZ5QWxsKCk7Ci0KLSAgICAgICAg
ICAgIGlmIChzd2l0Y2hTdGF0ZSA9PSBTd2l0Y2hTdGF0ZS5JTl9QUk9HUkVTUykgewotICAgICAg
ICAgICAgICBpZiAoc3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAg
ICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaERvbmUoY2FtZXJhRW51bWVyYXRv
ci5pc0Zyb250RmFjaW5nKGNhbWVyYU5hbWUpKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2hFdmVu
dHNIYW5kbGVyID0gbnVsbDsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBzd2l0Y2hT
dGF0ZSA9IFN3aXRjaFN0YXRlLklETEU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXRjaFN0
YXRlID09IFN3aXRjaFN0YXRlLlBFTkRJTkcpIHsKLSAgICAgICAgICAgICAgc3dpdGNoU3RhdGUg
PSBTd2l0Y2hTdGF0ZS5JRExFOwotICAgICAgICAgICAgICBzd2l0Y2hDYW1lcmFJbnRlcm5hbChz
d2l0Y2hFdmVudHNIYW5kbGVyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25GYWlsdXJlKFN0
cmluZyBlcnJvcikgewotICAgICAgICAgIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpOwotICAgICAg
ICAgIHVpVGhyZWFkSGFuZGxlci5yZW1vdmVDYWxsYmFja3Mob3BlbkNhbWVyYVRpbWVvdXRSdW5u
YWJsZSk7Ci0gICAgICAgICAgc3luY2hyb25pemVkIChzdGF0ZUxvY2spIHsKLSAgICAgICAgICAg
IGNhcHR1cmVyT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQoZmFsc2UgLyogc3VjY2VzcyAqLyk7
Ci0gICAgICAgICAgICBvcGVuQXR0ZW1wdHNSZW1haW5pbmctLTsKLQotICAgICAgICAgICAgaWYg
KG9wZW5BdHRlbXB0c1JlbWFpbmluZyA8PSAwKSB7Ci0gICAgICAgICAgICAgIExvZ2dpbmcudyhU
QUcsICJPcGVuaW5nIGNhbWVyYSBmYWlsZWQsIHBhc3Npbmc6ICIgKyBlcnJvcik7Ci0gICAgICAg
ICAgICAgIHNlc3Npb25PcGVuaW5nID0gZmFsc2U7Ci0gICAgICAgICAgICAgIHN0YXRlTG9jay5u
b3RpZnlBbGwoKTsKLQotICAgICAgICAgICAgICBpZiAoc3dpdGNoU3RhdGUgIT0gU3dpdGNoU3Rh
dGUuSURMRSkgewotICAgICAgICAgICAgICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51
bGwpIHsKLSAgICAgICAgICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0
Y2hFcnJvcihlcnJvcik7Ci0gICAgICAgICAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyID0g
bnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3dpdGNoU3RhdGUgPSBT
d2l0Y2hTdGF0ZS5JRExFOwotICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgZXZlbnRz
SGFuZGxlci5vbkNhbWVyYUVycm9yKGVycm9yKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJPcGVuaW5nIGNhbWVyYSBmYWlsZWQsIHJldHJ5OiAi
ICsgZXJyb3IpOwotCi0gICAgICAgICAgICAgIGNyZWF0ZVNlc3Npb25JbnRlcm5hbChPUEVOX0NB
TUVSQV9ERUxBWV9NUyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9OwotCi0gIHByaXZhdGUgZmluYWwgQ2FtZXJhU2Vzc2lvbi5FdmVudHMgY2FtZXJhU2Vz
c2lvbkV2ZW50c0hhbmRsZXIgPSBuZXcgQ2FtZXJhU2Vzc2lvbi5FdmVudHMoKSB7Ci0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFPcGVuaW5nKCkgewotICAgICAgY2hlY2tJ
c09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAg
ICAgICBpZiAoY3VycmVudFNlc3Npb24gIT0gbnVsbCkgewotICAgICAgICAgIExvZ2dpbmcudyhU
QUcsICJvbkNhbWVyYU9wZW5pbmcgd2hpbGUgc2Vzc2lvbiB3YXMgb3Blbi4iKTsKLSAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYU9wZW5p
bmcoY2FtZXJhTmFtZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25DYW1lcmFFcnJvcihDYW1lcmFTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBlcnJv
cikgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KHN0YXRlTG9jaykgewotICAgICAgICBpZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lvbikgewot
ICAgICAgICAgIExvZ2dpbmcudyhUQUcsICJvbkNhbWVyYUVycm9yIGZyb20gYW5vdGhlciBzZXNz
aW9uOiAiICsgZXJyb3IpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBl
dmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoZXJyb3IpOwotICAgICAgICBzdG9wQ2FwdHVyZSgp
OwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2Ft
ZXJhRGlzY29ubmVjdGVkKENhbWVyYVNlc3Npb24gc2Vzc2lvbikgewotICAgICAgY2hlY2tJc09u
Q2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAg
ICBpZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vzc2lvbikgewotICAgICAgICAgIExvZ2dpbmcudyhU
QUcsICJvbkNhbWVyYURpc2Nvbm5lY3RlZCBmcm9tIGFub3RoZXIgc2Vzc2lvbi4iKTsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYURp
c2Nvbm5lY3RlZCgpOwotICAgICAgICBzdG9wQ2FwdHVyZSgpOwotICAgICAgfQotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhQ2xvc2VkKENhbWVyYVNlc3Np
b24gc2Vzc2lvbikgewotICAgICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgICBzeW5j
aHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgICBpZiAoc2Vzc2lvbiAhPSBjdXJyZW50U2Vz
c2lvbiAmJiBjdXJyZW50U2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRB
RywgIm9uQ2FtZXJhQ2xvc2VkIGZyb20gYW5vdGhlciBzZXNzaW9uLiIpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhQ2xvc2VkKCk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25CeXRl
QnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBieXRl
W10gZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0
YW1wKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9uaXpl
ZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9uKSB7
Ci0gICAgICAgICAgTG9nZ2luZy53KFRBRywgIm9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQgZnJv
bSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghZmlyc3RGcmFtZU9ic2VydmVkKSB7Ci0gICAgICAgICAgZXZlbnRzSGFuZGxlci5v
bkZpcnN0RnJhbWVBdmFpbGFibGUoKTsKLSAgICAgICAgICBmaXJzdEZyYW1lT2JzZXJ2ZWQgPSB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIGNhbWVyYVN0YXRpc3RpY3MuYWRkRnJhbWUoKTsKLSAg
ICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKGRhdGEsIHdp
ZHRoLCBoZWlnaHQsIHJvdGF0aW9uLCB0aW1lc3RhbXApOwotICAgICAgfQotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoQ2FtZXJh
U2Vzc2lvbiBzZXNzaW9uLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0gICAgICAgIGludCBvZXNU
ZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGlt
ZXN0YW1wKSB7Ci0gICAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICAgIHN5bmNocm9u
aXplZCAoc3RhdGVMb2NrKSB7Ci0gICAgICAgIGlmIChzZXNzaW9uICE9IGN1cnJlbnRTZXNzaW9u
KSB7Ci0gICAgICAgICAgTG9nZ2luZy53KFRBRywgIm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQgZnJv
bSBhbm90aGVyIHNlc3Npb24uIik7Ci0gICAgICAgICAgc3VyZmFjZUhlbHBlci5yZXR1cm5UZXh0
dXJlRnJhbWUoKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFm
aXJzdEZyYW1lT2JzZXJ2ZWQpIHsKLSAgICAgICAgICBldmVudHNIYW5kbGVyLm9uRmlyc3RGcmFt
ZUF2YWlsYWJsZSgpOwotICAgICAgICAgIGZpcnN0RnJhbWVPYnNlcnZlZCA9IHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgY2FtZXJhU3RhdGlzdGljcy5hZGRGcmFtZSgpOwotICAgICAgICBjYXB0
dXJlck9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoCi0gICAgICAgICAgICB3aWR0aCwg
aGVpZ2h0LCBvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJpeCwgcm90YXRpb24sIHRpbWVzdGFt
cCk7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgZmluYWwgUnVubmFibGUgb3Bl
bkNhbWVyYVRpbWVvdXRSdW5uYWJsZSA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJy
b3IoIkNhbWVyYSBmYWlsZWQgdG8gc3RhcnQgd2l0aGluIHRpbWVvdXQuIik7Ci0gICAgfQotICB9
OwotCi0gIC8vIEluaXRpYWxpemVkIG9uIGluaXRpYWxpemUKLSAgLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotICBwcml2YXRlIEhhbmRsZXIgY2FtZXJhVGhyZWFkSGFuZGxlcjsKLSAgcHJp
dmF0ZSBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dDsKLSAgcHJpdmF0ZSBDYXB0dXJlck9ic2Vy
dmVyIGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIHByaXZhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3Vy
ZmFjZUhlbHBlcjsKLQotICBwcml2YXRlIGZpbmFsIE9iamVjdCBzdGF0ZUxvY2sgPSBuZXcgT2Jq
ZWN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBzZXNzaW9uT3BlbmluZzsgLyogZ3VhcmRlZCBieSBz
dGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBDYW1lcmFTZXNzaW9uIGN1cnJlbnRTZXNzaW9uOyAvKiBn
dWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2YXRlIFN0cmluZyBjYW1lcmFOYW1lOyAvKiBn
dWFyZGVkIGJ5IHN0YXRlTG9jayAqLwotICBwcml2YXRlIGludCB3aWR0aDsgLyogZ3VhcmRlZCBi
eSBzdGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0OyAvKiBndWFyZGVkIGJ5IHN0YXRl
TG9jayAqLwotICBwcml2YXRlIGludCBmcmFtZXJhdGU7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2Nr
ICovCi0gIHByaXZhdGUgaW50IG9wZW5BdHRlbXB0c1JlbWFpbmluZzsgLyogZ3VhcmRlZCBieSBz
dGF0ZUxvY2sgKi8KLSAgcHJpdmF0ZSBTd2l0Y2hTdGF0ZSBzd2l0Y2hTdGF0ZSA9IFN3aXRjaFN0
YXRlLklETEU7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgQ2FtZXJhU3dp
dGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5kbGVyOyAvKiBndWFyZGVkIGJ5IHN0YXRlTG9jayAq
LwotICAvLyBWYWxpZCBmcm9tIG9uRG9uZSBjYWxsIHVudGlsIHN0b3BDYXB0dXJlLCBvdGhlcndp
c2UgbnVsbC4KLSAgcHJpdmF0ZSBDYW1lcmFTdGF0aXN0aWNzIGNhbWVyYVN0YXRpc3RpY3M7IC8q
IGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0gIHByaXZhdGUgYm9vbGVhbiBmaXJzdEZyYW1lT2Jz
ZXJ2ZWQ7IC8qIGd1YXJkZWQgYnkgc3RhdGVMb2NrICovCi0KLSAgcHVibGljIENhbWVyYUNhcHR1
cmVyKAotICAgICAgU3RyaW5nIGNhbWVyYU5hbWUsIENhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRz
SGFuZGxlciwgQ2FtZXJhRW51bWVyYXRvciBjYW1lcmFFbnVtZXJhdG9yKSB7Ci0gICAgaWYgKGV2
ZW50c0hhbmRsZXIgPT0gbnVsbCkgewotICAgICAgZXZlbnRzSGFuZGxlciA9IG5ldyBDYW1lcmFF
dmVudHNIYW5kbGVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQg
b25DYW1lcmFFcnJvcihTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbikge30KLSAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRGlzY29ubmVjdGVkKCkge30KLSAgICAg
ICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRnJlZXplZChTdHJpbmcg
ZXJyb3JEZXNjcmlwdGlvbikge30KLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2
b2lkIG9uQ2FtZXJhT3BlbmluZyhTdHJpbmcgY2FtZXJhTmFtZSkge30KLSAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uRmlyc3RGcmFtZUF2YWlsYWJsZSgpIHt9Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYUNsb3NlZCgpIHt9Ci0g
ICAgICB9OwotICAgIH0KLQotICAgIHRoaXMuZXZlbnRzSGFuZGxlciA9IGV2ZW50c0hhbmRsZXI7
Ci0gICAgdGhpcy5jYW1lcmFFbnVtZXJhdG9yID0gY2FtZXJhRW51bWVyYXRvcjsKLSAgICB0aGlz
LmNhbWVyYU5hbWUgPSBjYW1lcmFOYW1lOwotICAgIHVpVGhyZWFkSGFuZGxlciA9IG5ldyBIYW5k
bGVyKExvb3Blci5nZXRNYWluTG9vcGVyKCkpOwotCi0gICAgZmluYWwgU3RyaW5nW10gZGV2aWNl
TmFtZXMgPSBjYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCk7Ci0KLSAgICBpZiAoZGV2
aWNlTmFtZXMubGVuZ3RoID09IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJObyBjYW1lcmFzIGF0dGFjaGVkLiIpOwotICAgIH0KLSAgICBpZiAoIUFycmF5cy5hc0xpc3Qo
ZGV2aWNlTmFtZXMpLmNvbnRhaW5zKHRoaXMuY2FtZXJhTmFtZSkpIHsKLSAgICAgIHRocm93IG5l
dyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oCi0gICAgICAgICAgIkNhbWVyYSBuYW1lICIgKyB0
aGlzLmNhbWVyYU5hbWUgKyAiIGRvZXMgbm90IG1hdGNoIGFueSBrbm93biBjYW1lcmEgZGV2aWNl
LiIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXpl
KFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDb250ZXh0IGFwcGxp
Y2F0aW9uQ29udGV4dCwKLSAgICAgIENhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcikg
ewotICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRpb25Db250ZXh0OwotICAg
IHRoaXMuY2FwdHVyZXJPYnNlcnZlciA9IGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gICAgdGhpcy5zdXJm
YWNlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgdGhpcy5jYW1lcmFUaHJlYWRI
YW5kbGVyID0KLSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0gbnVsbCA/IG51bGwgOiBz
dXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgc3RhcnRDYXB0dXJlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1l
cmF0ZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydENhcHR1cmU6ICIgKyB3aWR0aCArICJ4
IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZSk7Ci0KLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRl
TG9jaykgewotICAgICAgaWYgKHNlc3Npb25PcGVuaW5nIHx8IGN1cnJlbnRTZXNzaW9uICE9IG51
bGwpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIlNlc3Npb24gYWxyZWFkeSBvcGVuIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAg
ICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLmZyYW1lcmF0ZSA9IGZyYW1lcmF0
ZTsKLQotICAgICAgc2Vzc2lvbk9wZW5pbmcgPSB0cnVlOwotICAgICAgb3BlbkF0dGVtcHRzUmVt
YWluaW5nID0gTUFYX09QRU5fQ0FNRVJBX0FUVEVNUFRTOwotICAgICAgY3JlYXRlU2Vzc2lvbklu
dGVybmFsKDApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVTZXNzaW9uSW50
ZXJuYWwoaW50IGRlbGF5TXMpIHsKLSAgICB1aVRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQob3Bl
bkNhbWVyYVRpbWVvdXRSdW5uYWJsZSwgZGVsYXlNcyArIE9QRU5fQ0FNRVJBX1RJTUVPVVQpOwot
ICAgIGNhbWVyYVRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQobmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNyZWF0ZUNh
bWVyYVNlc3Npb24oY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLCBjYW1lcmFTZXNzaW9uRXZlbnRzSGFu
ZGxlciwgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgICAgICAgc3VyZmFjZUhlbHBlciwgY2Ft
ZXJhTmFtZSwgd2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgIH0KLSAgICB9LCBkZWxh
eU1zKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdG9wQ2FwdHVyZSgpIHsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiU3RvcCBjYXB0dXJlIik7Ci0KLSAgICBzeW5jaHJvbml6ZWQg
KHN0YXRlTG9jaykgewotICAgICAgd2hpbGUgKHNlc3Npb25PcGVuaW5nKSB7Ci0gICAgICAgIExv
Z2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmU6IFdhaXRpbmcgZm9yIHNlc3Npb24gdG8gb3BlbiIp
OwotICAgICAgICBUaHJlYWRVdGlscy53YWl0VW5pbnRlcnJ1cHRpYmx5KHN0YXRlTG9jayk7Ci0g
ICAgICB9Ci0KLSAgICAgIGlmIChjdXJyZW50U2Vzc2lvbiAhPSBudWxsKSB7Ci0gICAgICAgIExv
Z2dpbmcuZChUQUcsICJTdG9wIGNhcHR1cmU6IE51bGxpbmcgc2Vzc2lvbiIpOwotICAgICAgICBj
YW1lcmFTdGF0aXN0aWNzLnJlbGVhc2UoKTsKLSAgICAgICAgY2FtZXJhU3RhdGlzdGljcyA9IG51
bGw7Ci0gICAgICAgIGZpbmFsIENhbWVyYVNlc3Npb24gb2xkU2Vzc2lvbiA9IGN1cnJlbnRTZXNz
aW9uOwotICAgICAgICBjYW1lcmFUaHJlYWRIYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgICAgIG9sZFNlc3Npb24uc3RvcCgpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAg
ICAgIGN1cnJlbnRTZXNzaW9uID0gbnVsbDsKLSAgICAgICAgY2FwdHVyZXJPYnNlcnZlci5vbkNh
cHR1cmVyU3RvcHBlZCgpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywg
IlN0b3AgY2FwdHVyZTogTm8gc2Vzc2lvbiBvcGVuIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
TG9nZ2luZy5kKFRBRywgIlN0b3AgY2FwdHVyZSBkb25lIik7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdChpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBmcmFtZXJhdGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY2hhbmdlQ2FwdHVyZUZvcm1h
dDogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlKTsKLSAgICBzeW5j
aHJvbml6ZWQgKHN0YXRlTG9jaykgewotICAgICAgc3RvcENhcHR1cmUoKTsKLSAgICAgIHN0YXJ0
Q2FwdHVyZSh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgIH0KLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJkaXNw
b3NlIik7Ci0gICAgc3RvcENhcHR1cmUoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBzd2l0Y2hDYW1lcmEoZmluYWwgQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVudHNI
YW5kbGVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENhbWVyYSIpOwotICAgIGNhbWVy
YVRocmVhZEhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc3dpdGNoQ2FtZXJhSW50ZXJuYWwoc3dp
dGNoRXZlbnRzSGFuZGxlcik7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGJvb2xlYW4gaXNTY3JlZW5jYXN0KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHByaW50U3RhY2tUcmFjZSgpIHsKLSAgICBUaHJlYWQgY2FtZXJh
VGhyZWFkID0gbnVsbDsKLSAgICBpZiAoY2FtZXJhVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0g
ICAgICBjYW1lcmFUaHJlYWQgPSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExvb3BlcigpLmdldFRo
cmVhZCgpOwotICAgIH0KLSAgICBpZiAoY2FtZXJhVGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0
YWNrVHJhY2VFbGVtZW50W10gY2FtZXJhU3RhY2tUcmFjZSA9IGNhbWVyYVRocmVhZC5nZXRTdGFj
a1RyYWNlKCk7Ci0gICAgICBpZiAoY2FtZXJhU3RhY2tUcmFjZS5sZW5ndGggPiAwKSB7Ci0gICAg
ICAgIExvZ2dpbmcuZChUQUcsICJDYW1lcmFDYXB0dXJlciBzdGFjayB0cmFjZToiKTsKLSAgICAg
ICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCB0cmFjZUVsZW0gOiBjYW1lcmFTdGFja1RyYWNlKSB7
Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgdHJhY2VFbGVtLnRvU3RyaW5nKCkpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN3aXRjaENhbWVyYUlu
dGVybmFsKGZpbmFsIENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNoRXZlbnRzSGFuZGxlcikgewot
ICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmEgaW50ZXJuYWwiKTsKLQotICAgIGZpbmFs
IFN0cmluZ1tdIGRldmljZU5hbWVzID0gY2FtZXJhRW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygp
OwotCi0gICAgaWYgKGRldmljZU5hbWVzLmxlbmd0aCA8IDIpIHsKLSAgICAgIGlmIChzd2l0Y2hF
dmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNh
bWVyYVN3aXRjaEVycm9yKCJObyBjYW1lcmEgdG8gc3dpdGNoIHRvLiIpOwotICAgICAgfQotICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0gICAg
ICBpZiAoc3dpdGNoU3RhdGUgIT0gU3dpdGNoU3RhdGUuSURMRSkgewotICAgICAgICBMb2dnaW5n
LmQoVEFHLCAic3dpdGNoQ2FtZXJhIHN3aXRjaEluUHJvZ3Jlc3MiKTsKLSAgICAgICAgaWYgKHN3
aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICAgIHN3aXRjaEV2ZW50c0hhbmRs
ZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiQ2FtZXJhIHN3aXRjaCBhbHJlYWR5IGluIHByb2dyZXNz
LiIpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKCFz
ZXNzaW9uT3BlbmluZyAmJiBjdXJyZW50U2Vzc2lvbiA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dp
bmcuZChUQUcsICJzd2l0Y2hDYW1lcmE6IE5vIHNlc3Npb24gb3BlbiIpOwotICAgICAgICBpZiAo
c3dpdGNoRXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgc3dpdGNoRXZlbnRzSGFu
ZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJDYW1lcmEgaXMgbm90IHJ1bm5pbmcuIik7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB0aGlzLnN3aXRjaEV2ZW50
c0hhbmRsZXIgPSBzd2l0Y2hFdmVudHNIYW5kbGVyOwotICAgICAgaWYgKHNlc3Npb25PcGVuaW5n
KSB7Ci0gICAgICAgIHN3aXRjaFN0YXRlID0gU3dpdGNoU3RhdGUuUEVORElORzsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgc3dpdGNoU3RhdGUgPSBTd2l0Y2hTdGF0
ZS5JTl9QUk9HUkVTUzsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgInN3aXRjaENh
bWVyYTogU3RvcHBpbmcgc2Vzc2lvbiIpOwotICAgICAgY2FtZXJhU3RhdGlzdGljcy5yZWxlYXNl
KCk7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNzID0gbnVsbDsKLSAgICAgIGZpbmFsIENhbWVyYVNl
c3Npb24gb2xkU2Vzc2lvbiA9IGN1cnJlbnRTZXNzaW9uOwotICAgICAgY2FtZXJhVGhyZWFkSGFu
ZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1
YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBvbGRTZXNzaW9uLnN0b3AoKTsKLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgICBjdXJyZW50U2Vzc2lvbiA9IG51bGw7Ci0KLSAgICAgIGludCBj
YW1lcmFOYW1lSW5kZXggPSBBcnJheXMuYXNMaXN0KGRldmljZU5hbWVzKS5pbmRleE9mKGNhbWVy
YU5hbWUpOwotICAgICAgY2FtZXJhTmFtZSA9IGRldmljZU5hbWVzWyhjYW1lcmFOYW1lSW5kZXgg
KyAxKSAlIGRldmljZU5hbWVzLmxlbmd0aF07Ci0KLSAgICAgIHNlc3Npb25PcGVuaW5nID0gdHJ1
ZTsKLSAgICAgIG9wZW5BdHRlbXB0c1JlbWFpbmluZyA9IDE7Ci0gICAgICBjcmVhdGVTZXNzaW9u
SW50ZXJuYWwoMCk7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmEgZG9u
ZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSXNPbkNhbWVyYVRocmVhZCgpIHsKLSAg
ICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBjYW1lcmFUaHJlYWRIYW5kbGVyLmdldExv
b3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2hlY2sgaXMgb24g
Y2FtZXJhIHRocmVhZCBmYWlsZWQuIik7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiTm90IG9uIGNhbWVyYSB0aHJlYWQuIik7Ci0gICAgfQotICB9Ci0KLSAgcHJvdGVjdGVkIFN0
cmluZyBnZXRDYW1lcmFOYW1lKCkgewotICAgIHN5bmNocm9uaXplZCAoc3RhdGVMb2NrKSB7Ci0g
ICAgICByZXR1cm4gY2FtZXJhTmFtZTsKLSAgICB9Ci0gIH0KLQotICBhYnN0cmFjdCBwcm90ZWN0
ZWQgdm9pZCBjcmVhdGVDYW1lcmFTZXNzaW9uKAotICAgICAgQ2FtZXJhU2Vzc2lvbi5DcmVhdGVT
ZXNzaW9uQ2FsbGJhY2sgY3JlYXRlU2Vzc2lvbkNhbGxiYWNrLCBDYW1lcmFTZXNzaW9uLkV2ZW50
cyBldmVudHMsCi0gICAgICBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIFN0cmluZyBjYW1lcmFOYW1lLAotICAgICAg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKTsKLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDIwNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgamF2YS5sYW5nLk1hdGguYWJzOwotCi1p
bXBvcnQgYW5kcm9pZC5ncmFwaGljcy5JbWFnZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJy
YXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxl
Y3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5M
aXN0OwotaW1wb3J0IG9yZy53ZWJydGMuTWV0cmljcy5IaXN0b2dyYW07Ci0KLUBTdXBwcmVzc1dh
cm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xhc3MgQ2FtZXJhRW51bWVyYXRpb25BbmRy
b2lkIHsKLSAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJDYW1lcmFFbnVtZXJh
dGlvbkFuZHJvaWQiOwotCi0gIHN0YXRpYyBmaW5hbCBBcnJheUxpc3Q8U2l6ZT4gQ09NTU9OX1JF
U09MVVRJT05TID0gbmV3IEFycmF5TGlzdDxTaXplPihBcnJheXMuYXNMaXN0KAotICAgICAgLy8g
MCwgVW5rbm93biByZXNvbHV0aW9uCi0gICAgICBuZXcgU2l6ZSgxNjAsIDEyMCksIC8vIDEsIFFR
VkdBCi0gICAgICBuZXcgU2l6ZSgyNDAsIDE2MCksIC8vIDIsIEhRVkdBCi0gICAgICBuZXcgU2l6
ZSgzMjAsIDI0MCksIC8vIDMsIFFWR0EKLSAgICAgIG5ldyBTaXplKDQwMCwgMjQwKSwgLy8gNCwg
V1FWR0EKLSAgICAgIG5ldyBTaXplKDQ4MCwgMzIwKSwgLy8gNSwgSFZHQQotICAgICAgbmV3IFNp
emUoNjQwLCAzNjApLCAvLyA2LCBuSEQKLSAgICAgIG5ldyBTaXplKDY0MCwgNDgwKSwgLy8gNywg
VkdBCi0gICAgICBuZXcgU2l6ZSg3NjgsIDQ4MCksIC8vIDgsIFdWR0EKLSAgICAgIG5ldyBTaXpl
KDg1NCwgNDgwKSwgLy8gOSwgRldWR0EKLSAgICAgIG5ldyBTaXplKDgwMCwgNjAwKSwgLy8gMTAs
IFNWR0EKLSAgICAgIG5ldyBTaXplKDk2MCwgNTQwKSwgLy8gMTEsIHFIRAotICAgICAgbmV3IFNp
emUoOTYwLCA2NDApLCAvLyAxMiwgRFZHQQotICAgICAgbmV3IFNpemUoMTAyNCwgNTc2KSwgLy8g
MTMsIFdTVkdBCi0gICAgICBuZXcgU2l6ZSgxMDI0LCA2MDApLCAvLyAxNCwgV1ZTR0EKLSAgICAg
IG5ldyBTaXplKDEyODAsIDcyMCksIC8vIDE1LCBIRAotICAgICAgbmV3IFNpemUoMTI4MCwgMTAy
NCksIC8vIDE2LCBTWEdBCi0gICAgICBuZXcgU2l6ZSgxOTIwLCAxMDgwKSwgLy8gMTcsIEZ1bGwg
SEQKLSAgICAgIG5ldyBTaXplKDE5MjAsIDE0NDApLCAvLyAxOCwgRnVsbCBIRCA0OjMKLSAgICAg
IG5ldyBTaXplKDI1NjAsIDE0NDApLCAvLyAxOSwgUUhECi0gICAgICBuZXcgU2l6ZSgzODQwLCAy
MTYwKSAvLyAyMCwgVUhECi0gICAgICApKTsKLQotICBwdWJsaWMgc3RhdGljIGNsYXNzIENhcHR1
cmVGb3JtYXQgewotICAgIC8vIENsYXNzIHRvIHJlcHJlc2VudCBhIGZyYW1lcmF0ZSByYW5nZS4g
VGhlIGZyYW1lcmF0ZSB2YXJpZXMgYmVjYXVzZSBvZiBsaWdodG5pbmcgY29uZGl0aW9ucy4KLSAg
ICAvLyBUaGUgdmFsdWVzIGFyZSBtdWx0aXBsaWVkIGJ5IDEwMDAsIHNvIDEwMDAgcmVwcmVzZW50
cyBvbmUgZnJhbWUgcGVyIHNlY29uZC4KLSAgICBwdWJsaWMgc3RhdGljIGNsYXNzIEZyYW1lcmF0
ZVJhbmdlIHsKLSAgICAgIHB1YmxpYyBpbnQgbWluOwotICAgICAgcHVibGljIGludCBtYXg7Ci0K
LSAgICAgIHB1YmxpYyBGcmFtZXJhdGVSYW5nZShpbnQgbWluLCBpbnQgbWF4KSB7Ci0gICAgICAg
IHRoaXMubWluID0gbWluOwotICAgICAgICB0aGlzLm1heCA9IG1heDsKLSAgICAgIH0KLQotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBy
ZXR1cm4gIlsiICsgKG1pbiAvIDEwMDAuMGYpICsgIjoiICsgKG1heCAvIDEwMDAuMGYpICsgIl0i
OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIGVxdWFs
cyhPYmplY3Qgb3RoZXIpIHsKLSAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBGcmFtZXJh
dGVSYW5nZSkpIHsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
ZmluYWwgRnJhbWVyYXRlUmFuZ2Ugb3RoZXJGcmFtZXJhdGUgPSAoRnJhbWVyYXRlUmFuZ2UpIG90
aGVyOwotICAgICAgICByZXR1cm4gbWluID09IG90aGVyRnJhbWVyYXRlLm1pbiAmJiBtYXggPT0g
b3RoZXJGcmFtZXJhdGUubWF4OwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyBpbnQgaGFzaENvZGUoKSB7Ci0gICAgICAgIC8vIFVzZSBwcmltZSBjbG9zZSB0byAyXjE2
IHRvIGF2b2lkIGNvbGxpc2lvbnMgZm9yIG5vcm1hbCB2YWx1ZXMgbGVzcyB0aGFuIDJeMTYuCi0g
ICAgICAgIHJldHVybiAxICsgNjU1MzcgKiBtaW4gKyBtYXg7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIGZpbmFsIGludCB3aWR0aDsKLSAgICBwdWJsaWMgZmluYWwgaW50IGhlaWdodDsK
LSAgICBwdWJsaWMgZmluYWwgRnJhbWVyYXRlUmFuZ2UgZnJhbWVyYXRlOwotCi0gICAgLy8gVE9E
TyhoYm9zKTogSWYgVmlkZW9DYXB0dXJlci5zdGFydENhcHR1cmUgaXMgdXBkYXRlZCB0byBzdXBw
b3J0IG90aGVyIGltYWdlIGZvcm1hdHMgdGhlbiB0aGlzCi0gICAgLy8gbmVlZHMgdG8gYmUgdXBk
YXRlZCBhbmQgVmlkZW9DYXB0dXJlci5nZXRTdXBwb3J0ZWRGb3JtYXRzIG5lZWQgdG8gcmV0dXJu
IENhcHR1cmVGb3JtYXRzIG9mCi0gICAgLy8gYWxsIGltYWdlRm9ybWF0cy4KLSAgICBwdWJsaWMg
ZmluYWwgaW50IGltYWdlRm9ybWF0ID0gSW1hZ2VGb3JtYXQuTlYyMTsKLQotICAgIHB1YmxpYyBD
YXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1pbkZyYW1lcmF0ZSwgaW50
IG1heEZyYW1lcmF0ZSkgewotICAgICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgdGhpcy5o
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICB0aGlzLmZyYW1lcmF0ZSA9IG5ldyBGcmFtZXJhdGVSYW5n
ZShtaW5GcmFtZXJhdGUsIG1heEZyYW1lcmF0ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIENhcHR1
cmVGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBGcmFtZXJhdGVSYW5nZSBmcmFtZXJhdGUp
IHsKLSAgICAgIHRoaXMud2lkdGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0
OwotICAgICAgdGhpcy5mcmFtZXJhdGUgPSBmcmFtZXJhdGU7Ci0gICAgfQotCi0gICAgLy8gQ2Fs
Y3VsYXRlcyB0aGUgZnJhbWUgc2l6ZSBvZiB0aGlzIGNhcHR1cmUgZm9ybWF0LgotICAgIHB1Ymxp
YyBpbnQgZnJhbWVTaXplKCkgewotICAgICAgcmV0dXJuIGZyYW1lU2l6ZSh3aWR0aCwgaGVpZ2h0
LCBpbWFnZUZvcm1hdCk7Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlcyB0aGUgZnJhbWUgc2l6
ZSBvZiB0aGUgc3BlY2lmaWVkIGltYWdlIGZvcm1hdC4gQ3VycmVudGx5IG9ubHkKLSAgICAvLyBz
dXBwb3J0aW5nIEltYWdlRm9ybWF0Lk5WMjEuCi0gICAgLy8gVGhlIHNpemUgaXMgd2lkdGggKiBo
ZWlnaHQgKiBudW1iZXIgb2YgYnl0ZXMgcGVyIHBpeGVsLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9w
ZXIuYW5kcm9pZC5jb20vcmVmZXJlbmNlL2FuZHJvaWQvaGFyZHdhcmUvQ2FtZXJhLmh0bWwjYWRk
Q2FsbGJhY2tCdWZmZXIoYnl0ZVtdKQotICAgIHB1YmxpYyBzdGF0aWMgaW50IGZyYW1lU2l6ZShp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBpbWFnZUZvcm1hdCkgewotICAgICAgaWYgKGltYWdl
Rm9ybWF0ICE9IEltYWdlRm9ybWF0Lk5WMjEpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9y
dGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJEb24ndCBrbm93IGhvdyB0byBjYWxjdWxhdGUgIgotICAg
ICAgICAgICAgKyAidGhlIGZyYW1lIHNpemUgb2Ygbm9uLU5WMjEgaW1hZ2UgZm9ybWF0cy4iKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiAod2lkdGggKiBoZWlnaHQgKiBJbWFnZUZvcm1hdC5nZXRC
aXRzUGVyUGl4ZWwoaW1hZ2VGb3JtYXQpKSAvIDg7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJldHVybiB3aWR0aCArICJ4IiAr
IGhlaWdodCArICJAIiArIGZyYW1lcmF0ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG90aGVyKSB7Ci0gICAgICBpZiAoIShvdGhlciBp
bnN0YW5jZW9mIENhcHR1cmVGb3JtYXQpKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
IH0KLSAgICAgIGZpbmFsIENhcHR1cmVGb3JtYXQgb3RoZXJGb3JtYXQgPSAoQ2FwdHVyZUZvcm1h
dCkgb3RoZXI7Ci0gICAgICByZXR1cm4gd2lkdGggPT0gb3RoZXJGb3JtYXQud2lkdGggJiYgaGVp
Z2h0ID09IG90aGVyRm9ybWF0LmhlaWdodAotICAgICAgICAgICYmIGZyYW1lcmF0ZS5lcXVhbHMo
b3RoZXJGb3JtYXQuZnJhbWVyYXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgaW50IGhhc2hDb2RlKCkgewotICAgICAgcmV0dXJuIDEgKyAod2lkdGggKiA2NTQ5NyArIGhl
aWdodCkgKiAyNTEgKyBmcmFtZXJhdGUuaGFzaENvZGUoKTsKLSAgICB9Ci0gIH0KLQotICAvLyBI
ZWxwZXIgY2xhc3MgZm9yIGZpbmRpbmcgdGhlIGNsb3Nlc3Qgc3VwcG9ydGVkIGZvcm1hdCBmb3Ig
dGhlIHR3byBmdW5jdGlvbnMgYmVsb3cuIEl0IGNyZWF0ZXMgYQotICAvLyBjb21wYXJhdG9yIGJh
c2VkIG9uIHRoZSBkaWZmZXJlbmNlIHRvIHNvbWUgcmVxdWVzdGVkIHBhcmFtZXRlcnMsIHdoZXJl
IHRoZSBlbGVtZW50IHdpdGggdGhlCi0gIC8vIG1pbmltdW0gZGlmZmVyZW5jZSBpcyB0aGUgZWxl
bWVudCB0aGF0IGlzIGNsb3Nlc3QgdG8gdGhlIHJlcXVlc3RlZCBwYXJhbWV0ZXJzLgotICBwcml2
YXRlIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDbG9zZXN0Q29tcGFyYXRvcjxUPiBpbXBsZW1lbnRz
IENvbXBhcmF0b3I8VD4gewotICAgIC8vIERpZmZlcmVuY2UgYmV0d2VlbiBzdXBwb3J0ZWQgYW5k
IHJlcXVlc3RlZCBwYXJhbWV0ZXIuCi0gICAgYWJzdHJhY3QgaW50IGRpZmYoVCBzdXBwb3J0ZWRQ
YXJhbWV0ZXIpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjb21wYXJlKFQgdDEs
IFQgdDIpIHsKLSAgICAgIHJldHVybiBkaWZmKHQxKSAtIGRpZmYodDIpOwotICAgIH0KLSAgfQot
Ci0gIC8vIFByZWZlciBhIGZwcyByYW5nZSB3aXRoIGFuIHVwcGVyIGJvdW5kIGNsb3NlIHRvIHxm
cmFtZXJhdGV8LiBBbHNvIHByZWZlciBhIGZwcyByYW5nZSB3aXRoIGEgbG93Ci0gIC8vIGxvd2Vy
IGJvdW5kLCB0byBhbGxvdyB0aGUgZnJhbWVyYXRlIHRvIGZsdWN0dWF0ZSBiYXNlZCBvbiBsaWdo
dG5pbmcgY29uZGl0aW9ucy4KLSAgcHVibGljIHN0YXRpYyBDYXB0dXJlRm9ybWF0LkZyYW1lcmF0
ZVJhbmdlIGdldENsb3Nlc3RTdXBwb3J0ZWRGcmFtZXJhdGVSYW5nZSgKLSAgICAgIExpc3Q8Q2Fw
dHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gc3VwcG9ydGVkRnJhbWVyYXRlcywgZmluYWwgaW50
IHJlcXVlc3RlZEZwcykgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy5taW4oCi0gICAgICAgIHN1
cHBvcnRlZEZyYW1lcmF0ZXMsIG5ldyBDbG9zZXN0Q29tcGFyYXRvcjxDYXB0dXJlRm9ybWF0LkZy
YW1lcmF0ZVJhbmdlPigpIHsKLSAgICAgICAgICAvLyBQcm9ncmVzc2l2ZSBwZW5hbHR5IGlmIHRo
ZSB1cHBlciBib3VuZCBpcyBmdXJ0aGVyIGF3YXkgdGhhbiB8TUFYX0ZQU19ESUZGX1RIUkVTSE9M
RHwKLSAgICAgICAgICAvLyBmcm9tIHJlcXVlc3RlZC4KLSAgICAgICAgICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgTUFYX0ZQU19ESUZGX1RIUkVTSE9MRCA9IDUwMDA7Ci0gICAgICAgICAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9GUFNfTE9XX0RJRkZfV0VJR0hUID0gMTsKLSAgICAg
ICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0ZQU19ISUdIX0RJRkZfV0VJR0hUID0g
MzsKLQotICAgICAgICAgIC8vIFByb2dyZXNzaXZlIHBlbmFsdHkgaWYgdGhlIGxvd2VyIGJvdW5k
IGlzIGJpZ2dlciB0aGFuIHxNSU5fRlBTX1RIUkVTSE9MRHwuCi0gICAgICAgICAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IE1JTl9GUFNfVEhSRVNIT0xEID0gODAwMDsKLSAgICAgICAgICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0ZQU19MT1dfVkFMVUVfV0VJR0hUID0gMTsKLSAgICAg
ICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0ZQU19ISUdIX1ZBTFVFX1dFSUdIVCA9
IDQ7Ci0KLSAgICAgICAgICAvLyBVc2Ugb25lIHdlaWdodCBmb3Igc21hbGwgfHZhbHVlfCBsZXNz
IHRoYW4gfHRocmVzaG9sZHwsIGFuZCBhbm90aGVyIHdlaWdodCBhYm92ZS4KLSAgICAgICAgICBw
cml2YXRlIGludCBwcm9ncmVzc2l2ZVBlbmFsdHkoaW50IHZhbHVlLCBpbnQgdGhyZXNob2xkLCBp
bnQgbG93V2VpZ2h0LCBpbnQgaGlnaFdlaWdodCkgewotICAgICAgICAgICAgcmV0dXJuICh2YWx1
ZSA8IHRocmVzaG9sZCkgPyB2YWx1ZSAqIGxvd1dlaWdodAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiB0aHJlc2hvbGQgKiBsb3dXZWlnaHQgKyAodmFsdWUgLSB0aHJl
c2hvbGQpICogaGlnaFdlaWdodDsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBAT3ZlcnJpZGUK
LSAgICAgICAgICBpbnQgZGlmZihDYXB0dXJlRm9ybWF0LkZyYW1lcmF0ZVJhbmdlIHJhbmdlKSB7
Ci0gICAgICAgICAgICBmaW5hbCBpbnQgbWluRnBzRXJyb3IgPSBwcm9ncmVzc2l2ZVBlbmFsdHko
Ci0gICAgICAgICAgICAgICAgcmFuZ2UubWluLCBNSU5fRlBTX1RIUkVTSE9MRCwgTUlOX0ZQU19M
T1dfVkFMVUVfV0VJR0hULCBNSU5fRlBTX0hJR0hfVkFMVUVfV0VJR0hUKTsKLSAgICAgICAgICAg
IGZpbmFsIGludCBtYXhGcHNFcnJvciA9IHByb2dyZXNzaXZlUGVuYWx0eShNYXRoLmFicyhyZXF1
ZXN0ZWRGcHMgKiAxMDAwIC0gcmFuZ2UubWF4KSwKLSAgICAgICAgICAgICAgICBNQVhfRlBTX0RJ
RkZfVEhSRVNIT0xELCBNQVhfRlBTX0xPV19ESUZGX1dFSUdIVCwgTUFYX0ZQU19ISUdIX0RJRkZf
V0VJR0hUKTsKLSAgICAgICAgICAgIHJldHVybiBtaW5GcHNFcnJvciArIG1heEZwc0Vycm9yOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFNpemUgZ2V0
Q2xvc2VzdFN1cHBvcnRlZFNpemUoCi0gICAgICBMaXN0PFNpemU+IHN1cHBvcnRlZFNpemVzLCBm
aW5hbCBpbnQgcmVxdWVzdGVkV2lkdGgsIGZpbmFsIGludCByZXF1ZXN0ZWRIZWlnaHQpIHsKLSAg
ICByZXR1cm4gQ29sbGVjdGlvbnMubWluKHN1cHBvcnRlZFNpemVzLCBuZXcgQ2xvc2VzdENvbXBh
cmF0b3I8U2l6ZT4oKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIGludCBkaWZmKFNpemUgc2l6
ZSkgewotICAgICAgICByZXR1cm4gYWJzKHJlcXVlc3RlZFdpZHRoIC0gc2l6ZS53aWR0aCkgKyBh
YnMocmVxdWVzdGVkSGVpZ2h0IC0gc2l6ZS5oZWlnaHQpOwotICAgICAgfQotICAgIH0pOwotICB9
Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgY2FtZXJhIGNsYXNzZXMuCi0gIHN0YXRpYyB2b2lk
IHJlcG9ydENhbWVyYVJlc29sdXRpb24oSGlzdG9ncmFtIGhpc3RvZ3JhbSwgU2l6ZSByZXNvbHV0
aW9uKSB7Ci0gICAgaW50IGluZGV4ID0gQ09NTU9OX1JFU09MVVRJT05TLmluZGV4T2YocmVzb2x1
dGlvbik7Ci0gICAgLy8gMCBpcyByZXNlcnZlZCBmb3IgdW5rbm93biByZXNvbHV0aW9uLCBzbyBh
ZGQgMS4KLSAgICAvLyBpbmRleE9mIHJldHVybnMgLTEgZm9yIHVua25vd24gcmVzb2x1dGlvbnMg
c28gaXQgYmVjb21lcyAwIGF1dG9tYXRpY2FsbHkuCi0gICAgaGlzdG9ncmFtLmFkZFNhbXBsZShp
bmRleCArIDEpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0
b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0NhbWVyYUVudW1lcmF0b3Iu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFFbnVtZXJh
dG9yLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNSArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1l
cmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0K
LXB1YmxpYyBpbnRlcmZhY2UgQ2FtZXJhRW51bWVyYXRvciB7Ci0gIHB1YmxpYyBTdHJpbmdbXSBn
ZXREZXZpY2VOYW1lcygpOwotICBwdWJsaWMgYm9vbGVhbiBpc0Zyb250RmFjaW5nKFN0cmluZyBk
ZXZpY2VOYW1lKTsKLSAgcHVibGljIGJvb2xlYW4gaXNCYWNrRmFjaW5nKFN0cmluZyBkZXZpY2VO
YW1lKTsKLSAgcHVibGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZ2V0U3VwcG9ydGVkRm9ybWF0cyhT
dHJpbmcgZGV2aWNlTmFtZSk7Ci0KLSAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIgY3JlYXRl
Q2FwdHVyZXIoCi0gICAgICBTdHJpbmcgZGV2aWNlTmFtZSwgQ2FtZXJhVmlkZW9DYXB0dXJlci5D
YW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpOwotfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9DYW1lcmFTZXNzaW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9D
YW1lcmFTZXNzaW9uLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
Q2FtZXJhU2Vzc2lvbi5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzcgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1wdWJsaWMgaW50ZXJmYWNlIENh
bWVyYVNlc3Npb24gewotICAvLyBDYWxsYmFja3MgYXJlIGZpcmVkIG9uIHRoZSBjYW1lcmEgdGhy
ZWFkLgotICBwdWJsaWMgaW50ZXJmYWNlIENyZWF0ZVNlc3Npb25DYWxsYmFjayB7Ci0gICAgdm9p
ZCBvbkRvbmUoQ2FtZXJhU2Vzc2lvbiBzZXNzaW9uKTsKLSAgICB2b2lkIG9uRmFpbHVyZShTdHJp
bmcgZXJyb3IpOwotICB9Ci0KLSAgLy8gRXZlbnRzIGFyZSBmaXJlZCBvbiB0aGUgY2FtZXJhIHRo
cmVhZC4KLSAgcHVibGljIGludGVyZmFjZSBFdmVudHMgewotICAgIHZvaWQgb25DYW1lcmFPcGVu
aW5nKCk7Ci0gICAgdm9pZCBvbkNhbWVyYUVycm9yKENhbWVyYVNlc3Npb24gc2Vzc2lvbiwgU3Ry
aW5nIGVycm9yKTsKLSAgICB2b2lkIG9uQ2FtZXJhRGlzY29ubmVjdGVkKENhbWVyYVNlc3Npb24g
c2Vzc2lvbik7Ci0gICAgdm9pZCBvbkNhbWVyYUNsb3NlZChDYW1lcmFTZXNzaW9uIHNlc3Npb24p
OwotICAgIHZvaWQgb25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgQ2FtZXJhU2Vz
c2lvbiBzZXNzaW9uLCBieXRlW10gZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90
YXRpb24sIGxvbmcgdGltZXN0YW1wKTsKLSAgICB2b2lkIG9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQo
Q2FtZXJhU2Vzc2lvbiBzZXNzaW9uLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0
dXJlSWQsCi0gICAgICAgIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxv
bmcgdGltZXN0YW1wKTsKLSAgfQotCi0gIC8qKgotICAgKiBTdG9wcyB0aGUgY2FwdHVyZS4gV2Fp
dHMgdW50aWwgbm8gbW9yZSBjYWxscyB0byBjYXB0dXJlIG9ic2VydmVyIHdpbGwgYmUgbWFkZS4K
LSAgICogSWYgd2FpdENhbWVyYVN0b3AgaXMgdHJ1ZSwgYWxzbyB3YWl0cyBmb3IgdGhlIGNhbWVy
YSB0byBzdG9wLgotICAgKi8KLSAgdm9pZCBzdG9wKCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0NhbWVyYVZpZGVvQ2FwdHVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MzAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0v
KioKLSAqIEJhc2UgaW50ZXJmYWNlIGZvciBjYW1lcmExIGFuZCBjYW1lcmEyIGltcGxlbWVudGF0
aW9ucy4gRXh0ZW5kcyBWaWRlb0NhcHR1cmVyIHdpdGggYQotICogc3dpdGNoQ2FtZXJhKCkgZnVu
Y3Rpb24uIEFsc28gcHJvdmlkZXMgc3ViaW50ZXJmYWNlcyBmb3IgaGFuZGxpbmcgY2FtZXJhIGV2
ZW50cywgYW5kIGEgaGVscGVyCi0gKiBjbGFzcyBmb3IgZGV0ZWN0aW5nIGNhbWVyYSBmcmVlemVz
LgotICovCi1wdWJsaWMgaW50ZXJmYWNlIENhbWVyYVZpZGVvQ2FwdHVyZXIgZXh0ZW5kcyBWaWRl
b0NhcHR1cmVyIHsKLSAgLyoqCi0gICAqIENhbWVyYSBldmVudHMgaGFuZGxlciAtIGNhbiBiZSB1
c2VkIHRvIGJlIG5vdGlmZWQgYWJvdXQgY2FtZXJhIGV2ZW50cy4gVGhlIGNhbGxiYWNrcyBhcmUK
LSAgICogZXhlY3V0ZWQgZnJvbSBhbiBhcmJpdHJhcnkgdGhyZWFkLgotICAgKi8KLSAgcHVibGlj
IGludGVyZmFjZSBDYW1lcmFFdmVudHNIYW5kbGVyIHsKLSAgICAvLyBDYW1lcmEgZXJyb3IgaGFu
ZGxlciAtIGludm9rZWQgd2hlbiBjYW1lcmEgY2FuIG5vdCBiZSBvcGVuZWQKLSAgICAvLyBvciBh
bnkgY2FtZXJhIGV4Y2VwdGlvbiBoYXBwZW5zIG9uIGNhbWVyYSB0aHJlYWQuCi0gICAgdm9pZCBv
bkNhbWVyYUVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKTsKLQotICAgIC8vIENhbGxlZCB3
aGVuIGNhbWVyYSBpcyBkaXNjb25uZWN0ZWQuCi0gICAgdm9pZCBvbkNhbWVyYURpc2Nvbm5lY3Rl
ZCgpOwotCi0gICAgLy8gSW52b2tlZCB3aGVuIGNhbWVyYSBzdG9wcyByZWNlaXZpbmcgZnJhbWVz
LgotICAgIHZvaWQgb25DYW1lcmFGcmVlemVkKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKTsKLQot
ICAgIC8vIENhbGxiYWNrIGludm9rZWQgd2hlbiBjYW1lcmEgaXMgb3BlbmluZy4KLSAgICB2b2lk
IG9uQ2FtZXJhT3BlbmluZyhTdHJpbmcgY2FtZXJhTmFtZSk7Ci0KLSAgICAvLyBDYWxsYmFjayBp
bnZva2VkIHdoZW4gZmlyc3QgY2FtZXJhIGZyYW1lIGlzIGF2YWlsYWJsZSBhZnRlciBjYW1lcmEg
aXMgc3RhcnRlZC4KLSAgICB2b2lkIG9uRmlyc3RGcmFtZUF2YWlsYWJsZSgpOwotCi0gICAgLy8g
Q2FsbGJhY2sgaW52b2tlZCB3aGVuIGNhbWVyYSBpcyBjbG9zZWQuCi0gICAgdm9pZCBvbkNhbWVy
YUNsb3NlZCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbWVyYSBzd2l0Y2ggaGFuZGxlciAtIG9u
ZSBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGludm9rZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHN3aXRj
aENhbWVyYSgpLgotICAgKiBUaGUgY2FsbGJhY2sgbWF5IGJlIGNhbGxlZCBvbiBhbiBhcmJpdHJh
cnkgdGhyZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBDYW1lcmFTd2l0Y2hIYW5kbGVy
IHsKLSAgICAvLyBJbnZva2VkIG9uIHN1Y2Nlc3MuIHxpc0Zyb250Q2FtZXJhfCBpcyB0cnVlIGlm
IHRoZSBuZXcgY2FtZXJhIGlzIGZyb250IGZhY2luZy4KLSAgICB2b2lkIG9uQ2FtZXJhU3dpdGNo
RG9uZShib29sZWFuIGlzRnJvbnRDYW1lcmEpOwotCi0gICAgLy8gSW52b2tlZCBvbiBmYWlsdXJl
LCBlLmcuIGNhbWVyYSBpcyBzdG9wcGVkIG9yIG9ubHkgb25lIGNhbWVyYSBhdmFpbGFibGUuCi0g
ICAgdm9pZCBvbkNhbWVyYVN3aXRjaEVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKTsKLSAg
fQotCi0gIC8qKgotICAgKiBTd2l0Y2ggY2FtZXJhIHRvIHRoZSBuZXh0IHZhbGlkIGNhbWVyYSBp
ZC4gVGhpcyBjYW4gb25seSBiZSBjYWxsZWQgd2hpbGUgdGhlIGNhbWVyYSBpcyBydW5uaW5nLgot
ICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgotICAgKi8K
LSAgdm9pZCBzd2l0Y2hDYW1lcmEoQ2FtZXJhU3dpdGNoSGFuZGxlciBzd2l0Y2hFdmVudHNIYW5k
bGVyKTsKLQotICAvKioKLSAgICogSGVscGVyIGNsYXNzIHRvIGxvZyBmcmFtZXJhdGUgYW5kIGRl
dGVjdCBpZiB0aGUgY2FtZXJhIGZyZWV6ZXMuIEl0IHdpbGwgcnVuIHBlcmlvZGljIGNhbGxiYWNr
cwotICAgKiBvbiB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgdGhyZWFkIHBhc3NlZCBpbiB0aGUg
Y3RvciwgYW5kIHNob3VsZCBvbmx5IGJlIG9wZXJhdGVkIGZyb20gdGhhdAotICAgKiB0aHJlYWQu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIENhbWVyYVN0YXRpc3RpY3MgewotICAgIHBy
aXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiQ2FtZXJhU3RhdGlzdGljcyI7Ci0gICAg
cHJpdmF0ZSBmaW5hbCBzdGF0aWMgaW50IENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMgPSAyMDAw
OwotICAgIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBDQU1FUkFfRlJFRVpFX1JFUE9SVF9USU1P
VVRfTVMgPSA0MDAwOwotCi0gICAgcHJpdmF0ZSBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBz
dXJmYWNlVGV4dHVyZUhlbHBlcjsKLSAgICBwcml2YXRlIGZpbmFsIENhbWVyYUV2ZW50c0hhbmRs
ZXIgZXZlbnRzSGFuZGxlcjsKLSAgICBwcml2YXRlIGludCBmcmFtZUNvdW50OwotICAgIHByaXZh
dGUgaW50IGZyZWV6ZVBlcmlvZENvdW50OwotICAgIC8vIENhbWVyYSBvYnNlcnZlciAtIG1vbml0
b3JzIGNhbWVyYSBmcmFtZXJhdGUuIE9ic2VydmVyIGlzIGV4ZWN1dGVkIG9uIGNhbWVyYSB0aHJl
YWQuCi0gICAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBjYW1lcmFPYnNlcnZlciA9IG5ldyBSdW5u
YWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICBmaW5hbCBpbnQgY2FtZXJhRnBzID0gTWF0aC5yb3VuZChmcmFtZUNvdW50ICogMTAwMC4w
ZiAvIENBTUVSQV9PQlNFUlZFUl9QRVJJT0RfTVMpOwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
Q2FtZXJhIGZwczogIiArIGNhbWVyYUZwcyArICIuIik7Ci0gICAgICAgIGlmIChmcmFtZUNvdW50
ID09IDApIHsKLSAgICAgICAgICArK2ZyZWV6ZVBlcmlvZENvdW50OwotICAgICAgICAgIGlmIChD
QU1FUkFfT0JTRVJWRVJfUEVSSU9EX01TICogZnJlZXplUGVyaW9kQ291bnQgPj0gQ0FNRVJBX0ZS
RUVaRV9SRVBPUlRfVElNT1VUX01TCi0gICAgICAgICAgICAgICYmIGV2ZW50c0hhbmRsZXIgIT0g
bnVsbCkgewotICAgICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBmcmVlemVkLiIpOwot
ICAgICAgICAgICAgaWYgKHN1cmZhY2VUZXh0dXJlSGVscGVyLmlzVGV4dHVyZUluVXNlKCkpIHsK
LSAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gb25seSBoYXBwZW4gaWYgd2UgYXJlIGNhcHR1cmlu
ZyB0byB0ZXh0dXJlcy4KLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUZyZWV6
ZWQoIkNhbWVyYSBmYWlsdXJlLiBDbGllbnQgbXVzdCByZXR1cm4gdmlkZW8gYnVmZmVycy4iKTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIGV2ZW50c0hhbmRsZXIub25DYW1l
cmFGcmVlemVkKCJDYW1lcmEgZmFpbHVyZS4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJlZXpl
UGVyaW9kQ291bnQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIGZyYW1lQ291bnQgPSAwOwotICAg
ICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdERlbGF5ZWQodGhpcywg
Q0FNRVJBX09CU0VSVkVSX1BFUklPRF9NUyk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIHB1Ymxp
YyBDYW1lcmFTdGF0aXN0aWNzKAotICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNl
VGV4dHVyZUhlbHBlciwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyKSB7Ci0gICAg
ICBpZiAoc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0gbnVsbCkgewotICAgICAgICB0aHJvdyBuZXcg
SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTdXJmYWNlVGV4dHVyZUhlbHBlciBpcyBudWxsIik7
Ci0gICAgICB9Ci0gICAgICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVscGVyID0gc3VyZmFjZVRleHR1
cmVIZWxwZXI7Ci0gICAgICB0aGlzLmV2ZW50c0hhbmRsZXIgPSBldmVudHNIYW5kbGVyOwotICAg
ICAgdGhpcy5mcmFtZUNvdW50ID0gMDsKLSAgICAgIHRoaXMuZnJlZXplUGVyaW9kQ291bnQgPSAw
OwotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnBvc3REZWxheWVkKGNh
bWVyYU9ic2VydmVyLCBDQU1FUkFfT0JTRVJWRVJfUEVSSU9EX01TKTsKLSAgICB9Ci0KLSAgICBw
cml2YXRlIHZvaWQgY2hlY2tUaHJlYWQoKSB7Ci0gICAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJl
YWQoKSAhPSBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkuZ2V0TG9vcGVyKCkuZ2V0
VGhyZWFkKCkpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3Jv
bmcgdGhyZWFkIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkRnJhbWUo
KSB7Ci0gICAgICBjaGVja1RocmVhZCgpOwotICAgICAgKytmcmFtZUNvdW50OwotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5n
ZXRIYW5kbGVyKCkucmVtb3ZlQ2FsbGJhY2tzKGNhbWVyYU9ic2VydmVyKTsKLSAgICB9Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRGF0YUNoYW5uZWwuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL0RhdGFDaGFubmVsLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvRGF0YUNoYW5uZWwuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEy
NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi0vKiogSmF2YSB3cmFwcGVyIGZvciBhIEMrKyBE
YXRhQ2hhbm5lbEludGVyZmFjZS4gKi8KLXB1YmxpYyBjbGFzcyBEYXRhQ2hhbm5lbCB7Ci0gIC8q
KiBKYXZhIHdyYXBwZXIgZm9yIFdlYklETCBSVENEYXRhQ2hhbm5lbC4gKi8KLSAgcHVibGljIHN0
YXRpYyBjbGFzcyBJbml0IHsKLSAgICBwdWJsaWMgYm9vbGVhbiBvcmRlcmVkID0gdHJ1ZTsKLSAg
ICAvLyBPcHRpb25hbCB1bnNpZ25lZCBzaG9ydCBpbiBXZWJJREwsIC0xIG1lYW5zIHVuc3BlY2lm
aWVkLgotICAgIHB1YmxpYyBpbnQgbWF4UmV0cmFuc21pdFRpbWVNcyA9IC0xOwotICAgIC8vIE9w
dGlvbmFsIHVuc2lnbmVkIHNob3J0IGluIFdlYklETCwgLTEgbWVhbnMgdW5zcGVjaWZpZWQuCi0g
ICAgcHVibGljIGludCBtYXhSZXRyYW5zbWl0cyA9IC0xOwotICAgIHB1YmxpYyBTdHJpbmcgcHJv
dG9jb2wgPSAiIjsKLSAgICBwdWJsaWMgYm9vbGVhbiBuZWdvdGlhdGVkID0gZmFsc2U7Ci0gICAg
Ly8gT3B0aW9uYWwgdW5zaWduZWQgc2hvcnQgaW4gV2ViSURMLCAtMSBtZWFucyB1bnNwZWNpZmll
ZC4KLSAgICBwdWJsaWMgaW50IGlkID0gLTE7Ci0KLSAgICBwdWJsaWMgSW5pdCgpIHt9Ci0KLSAg
ICAvLyBDYWxsZWQgb25seSBieSBuYXRpdmUgY29kZS4KLSAgICBwcml2YXRlIEluaXQoYm9vbGVh
biBvcmRlcmVkLCBpbnQgbWF4UmV0cmFuc21pdFRpbWVNcywgaW50IG1heFJldHJhbnNtaXRzLCBT
dHJpbmcgcHJvdG9jb2wsCi0gICAgICAgIGJvb2xlYW4gbmVnb3RpYXRlZCwgaW50IGlkKSB7Ci0g
ICAgICB0aGlzLm9yZGVyZWQgPSBvcmRlcmVkOwotICAgICAgdGhpcy5tYXhSZXRyYW5zbWl0VGlt
ZU1zID0gbWF4UmV0cmFuc21pdFRpbWVNczsKLSAgICAgIHRoaXMubWF4UmV0cmFuc21pdHMgPSBt
YXhSZXRyYW5zbWl0czsKLSAgICAgIHRoaXMucHJvdG9jb2wgPSBwcm90b2NvbDsKLSAgICAgIHRo
aXMubmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7Ci0gICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBDKysgRGF0YUJ1ZmZlci4gIFRoZSBhdG9tIG9m
IGRhdGEgaW4gYSBEYXRhQ2hhbm5lbC4gKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBCdWZmZXIg
ewotICAgIC8qKiBUaGUgdW5kZXJseWluZyBkYXRhLiAqLwotICAgIHB1YmxpYyBmaW5hbCBCeXRl
QnVmZmVyIGRhdGE7Ci0KLSAgICAvKioKLSAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB8ZGF0YXwg
Y29udGFpbnMgVVRGLTggdGV4dCBvciAiYmluYXJ5IGRhdGEiCi0gICAgICogKGkuZS4gYW55dGhp
bmcgZWxzZSkuCi0gICAgICovCi0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gYmluYXJ5OwotCi0g
ICAgcHVibGljIEJ1ZmZlcihCeXRlQnVmZmVyIGRhdGEsIGJvb2xlYW4gYmluYXJ5KSB7Ci0gICAg
ICB0aGlzLmRhdGEgPSBkYXRhOwotICAgICAgdGhpcy5iaW5hcnkgPSBiaW5hcnk7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBDKysgRGF0YUNoYW5uZWxPYnNlcnZlci4gKi8K
LSAgcHVibGljIGludGVyZmFjZSBPYnNlcnZlciB7Ci0gICAgLyoqIFRoZSBkYXRhIGNoYW5uZWwn
cyBidWZmZXJlZEFtb3VudCBoYXMgY2hhbmdlZC4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkJ1ZmZl
cmVkQW1vdW50Q2hhbmdlKGxvbmcgcHJldmlvdXNBbW91bnQpOwotICAgIC8qKiBUaGUgZGF0YSBj
aGFubmVsIHN0YXRlIGhhcyBjaGFuZ2VkLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uU3RhdGVDaGFu
Z2UoKTsKLSAgICAvKioKLSAgICAgKiBBIGRhdGEgYnVmZmVyIHdhcyBzdWNjZXNzZnVsbHkgcmVj
ZWl2ZWQuICBOT1RFOiB8YnVmZmVyLmRhdGF8IHdpbGwgYmUKLSAgICAgKiBmcmVlZCBvbmNlIHRo
aXMgZnVuY3Rpb24gcmV0dXJucyBzbyBjYWxsZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgZGF0YQot
ICAgICAqIGFzeW5jaHJvbm91c2x5IG11c3QgbWFrZSBzdXJlIHRvIGNvcHkgaXQgZmlyc3QuCi0g
ICAgICovCi0gICAgcHVibGljIHZvaWQgb25NZXNzYWdlKEJ1ZmZlciBidWZmZXIpOwotICB9Ci0K
LSAgLyoqIEtlZXAgaW4gc3luYyB3aXRoIERhdGFDaGFubmVsSW50ZXJmYWNlOjpEYXRhU3RhdGUu
ICovCi0gIHB1YmxpYyBlbnVtIFN0YXRlIHsgQ09OTkVDVElORywgT1BFTiwgQ0xPU0lORywgQ0xP
U0VEIH0KLQotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlRGF0YUNoYW5uZWw7Ci0gIHByaXZh
dGUgbG9uZyBuYXRpdmVPYnNlcnZlcjsKLQotICBwdWJsaWMgRGF0YUNoYW5uZWwobG9uZyBuYXRp
dmVEYXRhQ2hhbm5lbCkgewotICAgIHRoaXMubmF0aXZlRGF0YUNoYW5uZWwgPSBuYXRpdmVEYXRh
Q2hhbm5lbDsKLSAgfQotCi0gIC8qKiBSZWdpc3RlciB8b2JzZXJ2ZXJ8LCByZXBsYWNpbmcgYW55
IHByZXZpb3VzbHktcmVnaXN0ZXJlZCBvYnNlcnZlci4gKi8KLSAgcHVibGljIHZvaWQgcmVnaXN0
ZXJPYnNlcnZlcihPYnNlcnZlciBvYnNlcnZlcikgewotICAgIGlmIChuYXRpdmVPYnNlcnZlciAh
PSAwKSB7Ci0gICAgICB1bnJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUobmF0aXZlT2JzZXJ2ZXIpOwot
ICAgIH0KLSAgICBuYXRpdmVPYnNlcnZlciA9IHJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUob2JzZXJ2
ZXIpOwotICB9Ci0gIHByaXZhdGUgbmF0aXZlIGxvbmcgcmVnaXN0ZXJPYnNlcnZlck5hdGl2ZShP
YnNlcnZlciBvYnNlcnZlcik7Ci0KLSAgLyoqIFVucmVnaXN0ZXIgdGhlIChvbmx5KSBvYnNlcnZl
ci4gKi8KLSAgcHVibGljIHZvaWQgdW5yZWdpc3Rlck9ic2VydmVyKCkgewotICAgIHVucmVnaXN0
ZXJPYnNlcnZlck5hdGl2ZShuYXRpdmVPYnNlcnZlcik7Ci0gIH0KLSAgcHJpdmF0ZSBuYXRpdmUg
dm9pZCB1bnJlZ2lzdGVyT2JzZXJ2ZXJOYXRpdmUobG9uZyBuYXRpdmVPYnNlcnZlcik7Ci0KLSAg
cHVibGljIG5hdGl2ZSBTdHJpbmcgbGFiZWwoKTsKLQotICBwdWJsaWMgbmF0aXZlIGludCBpZCgp
OwotCi0gIHB1YmxpYyBuYXRpdmUgU3RhdGUgc3RhdGUoKTsKLQotICAvKioKLSAgICogUmV0dXJu
IHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgYXBwbGljYXRpb24gZGF0YSAoVVRGLTggdGV4dCBhbmQg
YmluYXJ5IGRhdGEpCi0gICAqIHRoYXQgaGF2ZSBiZWVuIHF1ZXVlZCB1c2luZyBTZW5kQnVmZmVy
IGJ1dCBoYXZlIG5vdCB5ZXQgYmVlbiB0cmFuc21pdHRlZAotICAgKiB0byB0aGUgbmV0d29yay4K
LSAgICovCi0gIHB1YmxpYyBuYXRpdmUgbG9uZyBidWZmZXJlZEFtb3VudCgpOwotCi0gIC8qKiBD
bG9zZSB0aGUgY2hhbm5lbC4gKi8KLSAgcHVibGljIG5hdGl2ZSB2b2lkIGNsb3NlKCk7Ci0KLSAg
LyoqIFNlbmQgfGRhdGF8IHRvIHRoZSByZW1vdGUgcGVlcjsgcmV0dXJuIHN1Y2Nlc3MuICovCi0g
IHB1YmxpYyBib29sZWFuIHNlbmQoQnVmZmVyIGJ1ZmZlcikgewotICAgIC8vIFRPRE8oZmlzY2ht
YW4pOiB0aGlzIGNvdWxkIGJlIGNsZXZlcmVyIGFib3V0IGF2b2lkaW5nIGNvcGllcyBpZiB0aGUK
LSAgICAvLyBCeXRlQnVmZmVyIGlzIGRpcmVjdCBhbmQvb3IgaXMgYmFja2VkIGJ5IGFuIGFycmF5
LgotICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbYnVmZmVyLmRhdGEucmVtYWluaW5nKCldOwot
ICAgIGJ1ZmZlci5kYXRhLmdldChkYXRhKTsKLSAgICByZXR1cm4gc2VuZE5hdGl2ZShkYXRhLCBi
dWZmZXIuYmluYXJ5KTsKLSAgfQotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIHNlbmROYXRpdmUo
Ynl0ZVtdIGRhdGEsIGJvb2xlYW4gYmluYXJ5KTsKLQotICAvKiogRGlzcG9zZSBvZiBuYXRpdmUg
cmVzb3VyY2VzIGF0dGFjaGVkIHRvIHRoaXMgY2hhbm5lbC4gKi8KLSAgcHVibGljIG5hdGl2ZSB2
b2lkIGRpc3Bvc2UoKTsKLX07CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UxMC5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTEwLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzMDcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5DYW52YXM7Ci1pbXBvcnQgYW5kcm9pZC5n
cmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1p
bXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2VI
b2xkZXI7Ci0KLWltcG9ydCBqYXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMMTA7Ci1p
bXBvcnQgamF2YXgubWljcm9lZGl0aW9uLmtocm9ub3MuZWdsLkVHTENvbmZpZzsKLWltcG9ydCBq
YXZheC5taWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMQ29udGV4dDsKLWltcG9ydCBqYXZheC5t
aWNyb2VkaXRpb24ua2hyb25vcy5lZ2wuRUdMRGlzcGxheTsKLWltcG9ydCBqYXZheC5taWNyb2Vk
aXRpb24ua2hyb25vcy5lZ2wuRUdMU3VyZmFjZTsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3RhdGUg
YW5kIHV0aWxpdHkgbWV0aG9kcyBmb3IgaGFuZGxpbmcgYW4gZWdsIDEuMCBFR0xDb250ZXh0LCBh
biBFR0xEaXNwbGF5LAotICogYW5kIGFuIEVHTFN1cmZhY2UuCi0gKi8KLXB1YmxpYyBmaW5hbCBj
bGFzcyBFZ2xCYXNlMTAgZXh0ZW5kcyBFZ2xCYXNlIHsKLSAgLy8gVGhpcyBjb25zdGFudCBpcyB0
YWtlbiBmcm9tIEVHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJTSU9OLgotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04gPSAweDMwOTg7Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBFR0wxMCBlZ2w7Ci0gIHByaXZhdGUgRUdMQ29udGV4dCBlZ2xDb250ZXh0
OwotICBwcml2YXRlIEVHTENvbmZpZyBlZ2xDb25maWc7Ci0gIHByaXZhdGUgRUdMRGlzcGxheSBl
Z2xEaXNwbGF5OwotICBwcml2YXRlIEVHTFN1cmZhY2UgZWdsU3VyZmFjZSA9IEVHTDEwLkVHTF9O
T19TVVJGQUNFOwotCi0gIC8vIEVHTCB3cmFwcGVyIGZvciBhbiBhY3R1YWwgRUdMQ29udGV4dC4K
LSAgcHVibGljIHN0YXRpYyBjbGFzcyBDb250ZXh0IGV4dGVuZHMgRWdsQmFzZS5Db250ZXh0IHsK
LSAgICBwcml2YXRlIGZpbmFsIEVHTENvbnRleHQgZWdsQ29udGV4dDsKLQotICAgIHB1YmxpYyBD
b250ZXh0KEVHTENvbnRleHQgZWdsQ29udGV4dCkgewotICAgICAgdGhpcy5lZ2xDb250ZXh0ID0g
ZWdsQ29udGV4dDsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBuZXcgY29udGV4dCB3aXRo
IHRoZSBzcGVjaWZpZWQgY29uZmlnIHR5cGUsIHNoYXJpbmcgZGF0YSB3aXRoIHNoYXJlZENvbnRl
eHQuCi0gIHB1YmxpYyBFZ2xCYXNlMTAoQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBjb25m
aWdBdHRyaWJ1dGVzKSB7Ci0gICAgdGhpcy5lZ2wgPSAoRUdMMTApIEVHTENvbnRleHQuZ2V0RUdM
KCk7Ci0gICAgZWdsRGlzcGxheSA9IGdldEVnbERpc3BsYXkoKTsKLSAgICBlZ2xDb25maWcgPSBn
ZXRFZ2xDb25maWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcyk7Ci0gICAgZWdsQ29udGV4
dCA9IGNyZWF0ZUVnbENvbnRleHQoc2hhcmVkQ29udGV4dCwgZWdsRGlzcGxheSwgZWdsQ29uZmln
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZh
Y2Ugc3VyZmFjZSkgewotICAgIC8qKgotICAgICAqIFdlIGhhdmUgdG8gd3JhcCBTdXJmYWNlIGlu
IGEgU3VyZmFjZUhvbGRlciBiZWNhdXNlIGZvciBzb21lIHJlYXNvbiBlZ2xDcmVhdGVXaW5kb3dT
dXJmYWNlCi0gICAgICogY291bGRuJ3QgYWN0dWFsbHkgdGFrZSBhIFN1cmZhY2Ugb2JqZWN0IHVu
dGlsIEFQSSAxNy4gT2xkZXIgdmVyc2lvbnMgZm9ydHVuYXRlbHkganVzdCBjYWxsCi0gICAgICog
U3VyZmFjZUhvbGRlci5nZXRTdXJmYWNlKCksIHNvIHdlJ2xsIGRvIHRoYXQuIE5vIG90aGVyIG1l
dGhvZHMgYXJlIHJlbGV2YW50LgotICAgICAqLwotICAgIGNsYXNzIEZha2VTdXJmYWNlSG9sZGVy
IGltcGxlbWVudHMgU3VyZmFjZUhvbGRlciB7Ci0gICAgICBwcml2YXRlIGZpbmFsIFN1cmZhY2Ug
c3VyZmFjZTsKLQotICAgICAgRmFrZVN1cmZhY2VIb2xkZXIoU3VyZmFjZSBzdXJmYWNlKSB7Ci0g
ICAgICAgIHRoaXMuc3VyZmFjZSA9IHN1cmZhY2U7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgYWRkQ2FsbGJhY2soQ2FsbGJhY2sgY2FsbGJhY2spIHt9Ci0K
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcmVtb3ZlQ2FsbGJhY2soQ2FsbGJh
Y2sgY2FsbGJhY2spIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4g
aXNDcmVhdGluZygpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotCi0gICAgICBA
RGVwcmVjYXRlZAotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKGlu
dCBpKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHNldEZpeGVkU2l6
ZShpbnQgaSwgaW50IGkyKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHNldFNpemVGcm9tTGF5b3V0KCkge30KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBzZXRGb3JtYXQoaW50IGkpIHt9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgc2V0S2VlcFNjcmVlbk9uKGJvb2xlYW4gYikge30KLQotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgQ2FudmFzIGxvY2tDYW52YXMoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBDYW52YXMgbG9ja0NhbnZh
cyhSZWN0IHJlY3QpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgdW5sb2NrQ2FudmFzQW5kUG9zdChDYW52YXMgY2Fu
dmFzKSB7fQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBSZWN0IGdldFN1cmZhY2VG
cmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIFN1cmZhY2UgZ2V0U3VyZmFjZSgpIHsKLSAgICAgICAgcmV0dXJuIHN1
cmZhY2U7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKG5ldyBG
YWtlU3VyZmFjZUhvbGRlcihzdXJmYWNlKSk7Ci0gIH0KLQotICAvLyBDcmVhdGUgRUdMU3VyZmFj
ZSBmcm9tIHRoZSBBbmRyb2lkIFN1cmZhY2VUZXh0dXJlLgotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSkgewotICAg
IGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChzdXJmYWNlVGV4dHVyZSk7Ci0gIH0KLQotICAvLyBDcmVh
dGUgRUdMU3VyZmFjZSBmcm9tIGVpdGhlciBhIFN1cmZhY2VIb2xkZXIgb3IgYSBTdXJmYWNlVGV4
dHVyZS4KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVN1cmZhY2VJbnRlcm5hbChPYmplY3QgbmF0aXZl
V2luZG93KSB7Ci0gICAgaWYgKCEobmF0aXZlV2luZG93IGluc3RhbmNlb2YgU3VyZmFjZUhvbGRl
cikgJiYgIShuYXRpdmVXaW5kb3cgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIklucHV0IG11c3QgYmUgZWl0aGVyIGEg
U3VyZmFjZUhvbGRlciBvciBTdXJmYWNlVGV4dHVyZSIpOwotICAgIH0KLSAgICBjaGVja0lzTm90
UmVsZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkg
ewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1
cmZhY2UiKTsKLSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTAuRUdMX05P
TkV9OwotICAgIGVnbFN1cmZhY2UgPSBlZ2wuZWdsQ3JlYXRlV2luZG93U3VyZmFjZShlZ2xEaXNw
bGF5LCBlZ2xDb25maWcsIG5hdGl2ZVdpbmRvdywgc3VyZmFjZUF0dHJpYnMpOwotICAgIGlmIChl
Z2xTdXJmYWNlID09IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVu
dGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3cgc3VyZmFj
ZTogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0K
LSAgfQotCi0gIC8vIENyZWF0ZSBkdW1teSAxeDEgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugc28gdGhl
IGNvbnRleHQgY2FuIGJlIG1hZGUgY3VycmVudC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKSB7Ci0gICAgY3JlYXRlUGJ1ZmZlclN1cmZhY2Uo
MSwgMSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY3JlYXRlUGJ1ZmZlclN1
cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7
Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBbHJlYWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7Ci0g
ICAgfQotICAgIGludFtdIHN1cmZhY2VBdHRyaWJzID0ge0VHTDEwLkVHTF9XSURUSCwgd2lkdGgs
IEVHTDEwLkVHTF9IRUlHSFQsIGhlaWdodCwgRUdMMTAuRUdMX05PTkV9OwotICAgIGVnbFN1cmZh
Y2UgPSBlZ2wuZWdsQ3JlYXRlUGJ1ZmZlclN1cmZhY2UoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCBz
dXJmYWNlQXR0cmlicyk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgPT0gRUdMMTAuRUdMX05PX1NVUkZB
Q0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRl
IHBpeGVsIGJ1ZmZlciBzdXJmYWNlIHdpdGggc2l6ZSAiICsgd2lkdGggKyAieCIKLSAgICAgICAg
ICArIGhlaWdodCArICI6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9y
KCkpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIG9yZy53ZWJydGMuRWds
QmFzZS5Db250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAgIHJldHVybiBuZXcgRWdsQmFz
ZTEwLkNvbnRleHQoZWdsQ29udGV4dCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJv
b2xlYW4gaGFzU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZWdsU3VyZmFjZSAhPSBFR0wxMC5FR0xf
Tk9fU1VSRkFDRTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHN1cmZhY2VXaWR0
aCgpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGhBcnJheVtdID0gbmV3IGludFsxXTsKLSAgICBlZ2wu
ZWdsUXVlcnlTdXJmYWNlKGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIEVHTDEwLkVHTF9XSURUSCwg
d2lkdGhBcnJheSk7Ci0gICAgcmV0dXJuIHdpZHRoQXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIGludCBzdXJmYWNlSGVpZ2h0KCkgewotICAgIGZpbmFsIGludCBoZWlnaHRB
cnJheVtdID0gbmV3IGludFsxXTsKLSAgICBlZ2wuZWdsUXVlcnlTdXJmYWNlKGVnbERpc3BsYXks
IGVnbFN1cmZhY2UsIEVHTDEwLkVHTF9IRUlHSFQsIGhlaWdodEFycmF5KTsKLSAgICByZXR1cm4g
aGVpZ2h0QXJyYXlbMF07Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgcmVsZWFz
ZVN1cmZhY2UoKSB7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTAuRUdMX05PX1NVUkZBQ0Up
IHsKLSAgICAgIGVnbC5lZ2xEZXN0cm95U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsK
LSAgICAgIGVnbFN1cmZhY2UgPSBFR0wxMC5FR0xfTk9fU1VSRkFDRTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgY2hlY2tJc05vdFJlbGVhc2VkKCkgewotICAgIGlmIChlZ2xEaXNwbGF5
ID09IEVHTDEwLkVHTF9OT19ESVNQTEFZIHx8IGVnbENvbnRleHQgPT0gRUdMMTAuRUdMX05PX0NP
TlRFWFQKLSAgICAgICAgfHwgZWdsQ29uZmlnID09IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKCJUaGlzIG9iamVjdCBoYXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIGNoZWNr
SXNOb3RSZWxlYXNlZCgpOwotICAgIHJlbGVhc2VTdXJmYWNlKCk7Ci0gICAgZGV0YWNoQ3VycmVu
dCgpOwotICAgIGVnbC5lZ2xEZXN0cm95Q29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb250ZXh0KTsK
LSAgICBlZ2wuZWdsVGVybWluYXRlKGVnbERpc3BsYXkpOwotICAgIGVnbENvbnRleHQgPSBFR0wx
MC5FR0xfTk9fQ09OVEVYVDsKLSAgICBlZ2xEaXNwbGF5ID0gRUdMMTAuRUdMX05PX0RJU1BMQVk7
Ci0gICAgZWdsQ29uZmlnID0gbnVsbDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBtYWtlQ3VycmVudCgpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAoZWds
U3VyZmFjZSA9PSBFR0wxMC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRp
bWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBtYWtlIGN1cnJlbnQiKTsKLSAgICB9
Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIGlmICghZWdsLmVnbE1h
a2VDdXJyZW50KGVnbERpc3BsYXksIGVnbFN1cmZhY2UsIGVnbFN1cmZhY2UsIGVnbENvbnRleHQp
KSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVn
bE1ha2VDdXJyZW50IGZhaWxlZDogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhlZ2wuZWdsR2V0
RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERldGFjaCB0aGUgY3VycmVu
dCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4gYmUgbWFkZSBjdXJyZW50IG9uIGFub3RoZXIg
dGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGV0YWNoQ3VycmVudCgpIHsKLSAg
ICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFlZ2wuZWdsTWFrZUN1
cnJlbnQoCi0gICAgICAgICAgICAgIGVnbERpc3BsYXksIEVHTDEwLkVHTF9OT19TVVJGQUNFLCBF
R0wxMC5FR0xfTk9fU1VSRkFDRSwgRUdMMTAuRUdMX05PX0NPTlRFWFQpKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgImVnbERldGFjaEN1cnJlbnQg
ZmFpbGVkOiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGVnbC5lZ2xHZXRFcnJvcigpKSk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN3YXBCdWZm
ZXJzKCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlmIChlZ2xTdXJmYWNlID09
IEVHTDEwLkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IHN3YXAgYnVmZmVycyIpOwotICAgIH0KLSAgICBzeW5j
aHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgZWdsLmVnbFN3YXBCdWZmZXJzKGVnbERp
c3BsYXksIGVnbFN1cmZhY2UpOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybiBhbiBFR0xEaXNw
bGF5LCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTERpc3BsYXkgZ2V0RWdsRGlzcGxheSgp
IHsKLSAgICBFR0xEaXNwbGF5IGVnbERpc3BsYXkgPSBlZ2wuZWdsR2V0RGlzcGxheShFR0wxMC5F
R0xfREVGQVVMVF9ESVNQTEFZKTsKLSAgICBpZiAoZWdsRGlzcGxheSA9PSBFR0wxMC5FR0xfTk9f
RElTUExBWSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAg
IlVuYWJsZSB0byBnZXQgRUdMMTAgZGlzcGxheTogMHgiICsgSW50ZWdlci50b0hleFN0cmluZyhl
Z2wuZWdsR2V0RXJyb3IoKSkpOwotICAgIH0KLSAgICBpbnRbXSB2ZXJzaW9uID0gbmV3IGludFsy
XTsKLSAgICBpZiAoIWVnbC5lZ2xJbml0aWFsaXplKGVnbERpc3BsYXksIHZlcnNpb24pKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGlu
aXRpYWxpemUgRUdMMTA6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdldEVycm9y
KCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbERpc3BsYXk7Ci0gIH0KLQotICAvLyBSZXR1cm4g
YW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTENvbmZpZyBnZXRFZ2xD
b25maWcoRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBpbnRbXSBjb25maWdBdHRyaWJ1dGVzKSB7Ci0g
ICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07Ci0gICAgaW50W10gbnVt
Q29uZmlncyA9IG5ldyBpbnRbMV07Ci0gICAgaWYgKCFlZ2wuZWdsQ2hvb3NlQ29uZmlnKGVnbERp
c3BsYXksIGNvbmZpZ0F0dHJpYnV0ZXMsIGNvbmZpZ3MsIGNvbmZpZ3MubGVuZ3RoLCBudW1Db25m
aWdzKSkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgImVn
bENob29zZUNvbmZpZyBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoZWdsLmVnbEdl
dEVycm9yKCkpKTsKLSAgICB9Ci0gICAgaWYgKG51bUNvbmZpZ3NbMF0gPD0gMCkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIGFueSBtYXRjaGluZyBF
R0wgY29uZmlnIik7Ci0gICAgfQotICAgIGZpbmFsIEVHTENvbmZpZyBlZ2xDb25maWcgPSBjb25m
aWdzWzBdOwotICAgIGlmIChlZ2xDb25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oImVnbENob29zZUNvbmZpZyByZXR1cm5lZCBudWxsIik7Ci0gICAgfQot
ICAgIHJldHVybiBlZ2xDb25maWc7Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMQ29uZmlnLCBv
ciBkaWUgdHJ5aW5nLgotICBwcml2YXRlIEVHTENvbnRleHQgY3JlYXRlRWdsQ29udGV4dCgKLSAg
ICAgIENvbnRleHQgc2hhcmVkQ29udGV4dCwgRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBFR0xDb25m
aWcgZWdsQ29uZmlnKSB7Ci0gICAgaWYgKHNoYXJlZENvbnRleHQgIT0gbnVsbCAmJiBzaGFyZWRD
b250ZXh0LmVnbENvbnRleHQgPT0gRUdMMTAuRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJJbnZhbGlkIHNoYXJlZENvbnRleHQiKTsKLSAgICB9Ci0g
ICAgaW50W10gY29udGV4dEF0dHJpYnV0ZXMgPSB7RUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04s
IDIsIEVHTDEwLkVHTF9OT05FfTsKLSAgICBFR0xDb250ZXh0IHJvb3RDb250ZXh0ID0KLSAgICAg
ICAgc2hhcmVkQ29udGV4dCA9PSBudWxsID8gRUdMMTAuRUdMX05PX0NPTlRFWFQgOiBzaGFyZWRD
b250ZXh0LmVnbENvbnRleHQ7Ci0gICAgZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0OwotICAg
IHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBlZ2xDb250ZXh0ID0gZWdsLmVn
bENyZWF0ZUNvbnRleHQoZWdsRGlzcGxheSwgZWdsQ29uZmlnLCByb290Q29udGV4dCwgY29udGV4
dEF0dHJpYnV0ZXMpOwotICAgIH0KLSAgICBpZiAoZWdsQ29udGV4dCA9PSBFR0wxMC5FR0xfTk9f
Q09OVEVYVCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAg
IkZhaWxlZCB0byBjcmVhdGUgRUdMIGNvbnRleHQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmco
ZWdsLmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGVnbENvbnRleHQ7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsQmFzZTE0LmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlMTQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI2NCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3Vy
ZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMMTQ7Ci1pbXBvcnQgYW5kcm9p
ZC5vcGVuZ2wuRUdMQ29uZmlnOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkVHTENvbnRleHQ7Ci1p
bXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMRGlzcGxheTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5F
R0xFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuRUdMU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lk
LnZpZXcuU3VyZmFjZTsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3RhdGUgYW5kIHV0aWxpdHkgbWV0
aG9kcyBmb3IgaGFuZGxpbmcgYW4gRUdMMTQgRUdMQ29udGV4dCwgYW4gRUdMRGlzcGxheSwKLSAq
IGFuZCBhbiBFR0xTdXJmYWNlLgotICovCi1AVGFyZ2V0QXBpKDE4KQotcHVibGljIGZpbmFsIGNs
YXNzIEVnbEJhc2UxNCBleHRlbmRzIEVnbEJhc2UgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIkVnbEJhc2UxNCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFR0xF
eHRfU0RLX1ZFUlNJT04gPSBhbmRyb2lkLm9zLkJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVB
Tl9NUjI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDVVJSRU5UX1NES19WRVJTSU9OID0g
YW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0gIHByaXZhdGUgRUdMQ29udGV4dCBl
Z2xDb250ZXh0OwotICBwcml2YXRlIEVHTENvbmZpZyBlZ2xDb25maWc7Ci0gIHByaXZhdGUgRUdM
RGlzcGxheSBlZ2xEaXNwbGF5OwotICBwcml2YXRlIEVHTFN1cmZhY2UgZWdsU3VyZmFjZSA9IEVH
TDE0LkVHTF9OT19TVVJGQUNFOwotCi0gIC8vIEVHTCAxLjQgaXMgc3VwcG9ydGVkIGZyb20gQVBJ
IDE3LiBCdXQgRUdMRXh0IHRoYXQgaXMgdXNlZCBmb3Igc2V0dGluZyBwcmVzZW50YXRpb24KLSAg
Ly8gdGltZSBzdGFtcCBvbiBhIHN1cmZhY2UgaXMgc3VwcG9ydGVkIGZyb20gMTggc28gd2UgcmVx
dWlyZSAxOC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzRUdMMTRTdXBwb3J0ZWQoKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgIlNESyB2ZXJzaW9uOiAiICsgQ1VSUkVOVF9TREtfVkVSU0lPTiAr
ICIuIGlzRUdMMTRTdXBwb3J0ZWQ6ICIKLSAgICAgICAgICAgICsgKENVUlJFTlRfU0RLX1ZFUlNJ
T04gPj0gRUdMRXh0X1NES19WRVJTSU9OKSk7Ci0gICAgcmV0dXJuIChDVVJSRU5UX1NES19WRVJT
SU9OID49IEVHTEV4dF9TREtfVkVSU0lPTik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGNsYXNz
IENvbnRleHQgZXh0ZW5kcyBFZ2xCYXNlLkNvbnRleHQgewotICAgIHByaXZhdGUgZmluYWwgYW5k
cm9pZC5vcGVuZ2wuRUdMQ29udGV4dCBlZ2wxNENvbnRleHQ7Ci0KLSAgICBwdWJsaWMgQ29udGV4
dChhbmRyb2lkLm9wZW5nbC5FR0xDb250ZXh0IGVnbENvbnRleHQpIHsKLSAgICAgIHRoaXMuZWds
MTRDb250ZXh0ID0gZWdsQ29udGV4dDsKLSAgICB9Ci0gIH0KLQotICAvLyBDcmVhdGUgYSBuZXcg
Y29udGV4dCB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlnIHR5cGUsIHNoYXJpbmcgZGF0YSB3aXRo
IHNoYXJlZENvbnRleHQuCi0gIC8vIHxzaGFyZWRDb250ZXh0fCBtYXkgYmUgbnVsbC4KLSAgcHVi
bGljIEVnbEJhc2UxNChFZ2xCYXNlMTQuQ29udGV4dCBzaGFyZWRDb250ZXh0LCBpbnRbXSBjb25m
aWdBdHRyaWJ1dGVzKSB7Ci0gICAgZWdsRGlzcGxheSA9IGdldEVnbERpc3BsYXkoKTsKLSAgICBl
Z2xDb25maWcgPSBnZXRFZ2xDb25maWcoZWdsRGlzcGxheSwgY29uZmlnQXR0cmlidXRlcyk7Ci0g
ICAgZWdsQ29udGV4dCA9IGNyZWF0ZUVnbENvbnRleHQoc2hhcmVkQ29udGV4dCwgZWdsRGlzcGxh
eSwgZWdsQ29uZmlnKTsKLSAgfQotCi0gIC8vIENyZWF0ZSBFR0xTdXJmYWNlIGZyb20gdGhlIEFu
ZHJvaWQgU3VyZmFjZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2Uo
U3VyZmFjZSBzdXJmYWNlKSB7Ci0gICAgY3JlYXRlU3VyZmFjZUludGVybmFsKHN1cmZhY2UpOwot
ICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJmYWNlVGV4
dHVyZS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVN1cmZhY2UoU3VyZmFjZVRl
eHR1cmUgc3VyZmFjZVRleHR1cmUpIHsKLSAgICBjcmVhdGVTdXJmYWNlSW50ZXJuYWwoc3VyZmFj
ZVRleHR1cmUpOwotICB9Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSBlaXRoZXIgU3Vy
ZmFjZSBvciBTdXJmYWNlVGV4dHVyZS4KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVN1cmZhY2VJbnRl
cm5hbChPYmplY3Qgc3VyZmFjZSkgewotICAgIGlmICghKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJm
YWNlKSAmJiAhKHN1cmZhY2UgaW5zdGFuY2VvZiBTdXJmYWNlVGV4dHVyZSkpIHsKLSAgICAgIHRo
cm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIklucHV0IG11c3QgYmUgZWl0aGVyIGEgU3Vy
ZmFjZSBvciBTdXJmYWNlVGV4dHVyZSIpOwotICAgIH0KLSAgICBjaGVja0lzTm90UmVsZWFzZWQo
KTsKLSAgICBpZiAoZWdsU3VyZmFjZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkFscmVhZHkgaGFzIGFuIEVHTFN1cmZhY2UiKTsK
LSAgICB9Ci0gICAgaW50W10gc3VyZmFjZUF0dHJpYnMgPSB7RUdMMTQuRUdMX05PTkV9OwotICAg
IGVnbFN1cmZhY2UgPSBFR0wxNC5lZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGVnbERpc3BsYXksIGVn
bENvbmZpZywgc3VyZmFjZSwgc3VyZmFjZUF0dHJpYnMsIDApOwotICAgIGlmIChlZ2xTdXJmYWNl
ID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigKLSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSB3aW5kb3cgc3VyZmFjZTogMHgiICsg
SW50ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2UoKSB7
Ci0gICAgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoMSwgMSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7
Ci0gICAgY2hlY2tJc05vdFJlbGVhc2VkKCk7Ci0gICAgaWYgKGVnbFN1cmZhY2UgIT0gRUdMMTQu
RUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJBbHJl
YWR5IGhhcyBhbiBFR0xTdXJmYWNlIik7Ci0gICAgfQotICAgIGludFtdIHN1cmZhY2VBdHRyaWJz
ID0ge0VHTDE0LkVHTF9XSURUSCwgd2lkdGgsIEVHTDE0LkVHTF9IRUlHSFQsIGhlaWdodCwgRUdM
MTQuRUdMX05PTkV9OwotICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5lZ2xDcmVhdGVQYnVmZmVyU3Vy
ZmFjZShlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHN1cmZhY2VBdHRyaWJzLCAwKTsKLSAgICBpZiAo
ZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgcGl4ZWwgYnVmZmVyIHN1cmZhY2Ugd2l0
aCBzaXplICIgKyB3aWR0aCArICJ4IgotICAgICAgICAgICsgaGVpZ2h0ICsgIjogMHgiICsgSW50
ZWdlci50b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBDb250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAgIHJl
dHVybiBuZXcgRWdsQmFzZTE0LkNvbnRleHQoZWdsQ29udGV4dCk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIGJvb2xlYW4gaGFzU3VyZmFjZSgpIHsKLSAgICByZXR1cm4gZWdsU3VyZmFj
ZSAhPSBFR0wxNC5FR0xfTk9fU1VSRkFDRTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
aW50IHN1cmZhY2VXaWR0aCgpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGhBcnJheVtdID0gbmV3IGlu
dFsxXTsKLSAgICBFR0wxNC5lZ2xRdWVyeVN1cmZhY2UoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwg
RUdMMTQuRUdMX1dJRFRILCB3aWR0aEFycmF5LCAwKTsKLSAgICByZXR1cm4gd2lkdGhBcnJheVsw
XTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgaW50IHN1cmZhY2VIZWlnaHQoKSB7Ci0g
ICAgZmluYWwgaW50IGhlaWdodEFycmF5W10gPSBuZXcgaW50WzFdOwotICAgIEVHTDE0LmVnbFF1
ZXJ5U3VyZmFjZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBFR0wxNC5FR0xfSEVJR0hULCBoZWln
aHRBcnJheSwgMCk7Ci0gICAgcmV0dXJuIGhlaWdodEFycmF5WzBdOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2VTdXJmYWNlKCkgewotICAgIGlmIChlZ2xTdXJmYWNl
ICE9IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICBFR0wxNC5lZ2xEZXN0cm95U3VyZmFj
ZShlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlKTsKLSAgICAgIGVnbFN1cmZhY2UgPSBFR0wxNC5FR0xf
Tk9fU1VSRkFDRTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hlY2tJc05vdFJlbGVh
c2VkKCkgewotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDE0LkVHTF9OT19ESVNQTEFZIHx8IGVn
bENvbnRleHQgPT0gRUdMMTQuRUdMX05PX0NPTlRFWFQKLSAgICAgICAgfHwgZWdsQ29uZmlnID09
IG51bGwpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGlzIG9iamVjdCBo
YXMgYmVlbiByZWxlYXNlZCIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCByZWxlYXNlKCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIHJlbGVhc2VT
dXJmYWNlKCk7Ci0gICAgZGV0YWNoQ3VycmVudCgpOwotICAgIEVHTDE0LmVnbERlc3Ryb3lDb250
ZXh0KGVnbERpc3BsYXksIGVnbENvbnRleHQpOwotICAgIEVHTDE0LmVnbFJlbGVhc2VUaHJlYWQo
KTsKLSAgICBFR0wxNC5lZ2xUZXJtaW5hdGUoZWdsRGlzcGxheSk7Ci0gICAgZWdsQ29udGV4dCA9
IEVHTDE0LkVHTF9OT19DT05URVhUOwotICAgIGVnbERpc3BsYXkgPSBFR0wxNC5FR0xfTk9fRElT
UExBWTsKLSAgICBlZ2xDb25maWcgPSBudWxsOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG1ha2VDdXJyZW50KCkgewotICAgIGNoZWNrSXNOb3RSZWxlYXNlZCgpOwotICAgIGlm
IChlZ2xTdXJmYWNlID09IEVHTDE0LkVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICB0aHJvdyBuZXcg
UnVudGltZUV4Y2VwdGlvbigiTm8gRUdMU3VyZmFjZSAtIGNhbid0IG1ha2UgY3VycmVudCIpOwot
ICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFFR0wx
NC5lZ2xNYWtlQ3VycmVudChlZ2xEaXNwbGF5LCBlZ2xTdXJmYWNlLCBlZ2xTdXJmYWNlLCBlZ2xD
b250ZXh0KSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAg
ICAgICJlZ2xNYWtlQ3VycmVudCBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdM
MTQuZWdsR2V0RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERldGFjaCB0
aGUgY3VycmVudCBFR0wgY29udGV4dCwgc28gdGhhdCBpdCBjYW4gYmUgbWFkZSBjdXJyZW50IG9u
IGFub3RoZXIgdGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGV0YWNoQ3VycmVu
dCgpIHsKLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgaWYgKCFFR0wx
NC5lZ2xNYWtlQ3VycmVudCgKLSAgICAgICAgICAgICAgZWdsRGlzcGxheSwgRUdMMTQuRUdMX05P
X1NVUkZBQ0UsIEVHTDE0LkVHTF9OT19TVVJGQUNFLCBFR0wxNC5FR0xfTk9fQ09OVEVYVCkpIHsK
LSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiZWdsRGV0
YWNoQ3VycmVudCBmYWlsZWQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0
RXJyb3IoKSkpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBzd2FwQnVmZmVycygpIHsKLSAgICBjaGVja0lzTm90UmVsZWFzZWQoKTsKLSAgICBpZiAo
ZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBzd2FwIGJ1ZmZlcnMiKTsKLSAg
ICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsKLSAgICAgIEVHTDE0LmVnbFN3
YXBCdWZmZXJzKGVnbERpc3BsYXksIGVnbFN1cmZhY2UpOwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHN3YXBCdWZmZXJzKGxvbmcgdGltZVN0YW1wTnMpIHsKLSAgICBjaGVja0lzTm90UmVs
ZWFzZWQoKTsKLSAgICBpZiAoZWdsU3VyZmFjZSA9PSBFR0wxNC5FR0xfTk9fU1VSRkFDRSkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIEVHTFN1cmZhY2UgLSBjYW4ndCBz
d2FwIGJ1ZmZlcnMiKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChFZ2xCYXNlLmxvY2spIHsK
LSAgICAgIC8vIFNlZQotICAgICAgLy8gaHR0cHM6Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20v
cGxhdGZvcm0vZnJhbWV3b3Jrcy9uYXRpdmUvKy90b29sc19yMjIuMi9vcGVuZ2wvc3BlY3MvRUdM
X0FORFJPSURfcHJlc2VudGF0aW9uX3RpbWUudHh0Ci0gICAgICBFR0xFeHQuZWdsUHJlc2VudGF0
aW9uVGltZUFORFJPSUQoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSwgdGltZVN0YW1wTnMpOwotICAg
ICAgRUdMMTQuZWdsU3dhcEJ1ZmZlcnMoZWdsRGlzcGxheSwgZWdsU3VyZmFjZSk7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gUmV0dXJuIGFuIEVHTERpc3BsYXksIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZh
dGUgc3RhdGljIEVHTERpc3BsYXkgZ2V0RWdsRGlzcGxheSgpIHsKLSAgICBFR0xEaXNwbGF5IGVn
bERpc3BsYXkgPSBFR0wxNC5lZ2xHZXREaXNwbGF5KEVHTDE0LkVHTF9ERUZBVUxUX0RJU1BMQVkp
OwotICAgIGlmIChlZ2xEaXNwbGF5ID09IEVHTDE0LkVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGdldCBFR0wx
NCBkaXNwbGF5OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkp
KTsKLSAgICB9Ci0gICAgaW50W10gdmVyc2lvbiA9IG5ldyBpbnRbMl07Ci0gICAgaWYgKCFFR0wx
NC5lZ2xJbml0aWFsaXplKGVnbERpc3BsYXksIHZlcnNpb24sIDAsIHZlcnNpb24sIDEpKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKLSAgICAgICAgICAiVW5hYmxlIHRvIGlu
aXRpYWxpemUgRUdMMTQ6IDB4IiArIEludGVnZXIudG9IZXhTdHJpbmcoRUdMMTQuZWdsR2V0RXJy
b3IoKSkpOwotICAgIH0KLSAgICByZXR1cm4gZWdsRGlzcGxheTsKLSAgfQotCi0gIC8vIFJldHVy
biBhbiBFR0xDb25maWcsIG9yIGRpZSB0cnlpbmcuCi0gIHByaXZhdGUgc3RhdGljIEVHTENvbmZp
ZyBnZXRFZ2xDb25maWcoRUdMRGlzcGxheSBlZ2xEaXNwbGF5LCBpbnRbXSBjb25maWdBdHRyaWJ1
dGVzKSB7Ci0gICAgRUdMQ29uZmlnW10gY29uZmlncyA9IG5ldyBFR0xDb25maWdbMV07Ci0gICAg
aW50W10gbnVtQ29uZmlncyA9IG5ldyBpbnRbMV07Ci0gICAgaWYgKCFFR0wxNC5lZ2xDaG9vc2VD
b25maWcoCi0gICAgICAgICAgICBlZ2xEaXNwbGF5LCBjb25maWdBdHRyaWJ1dGVzLCAwLCBjb25m
aWdzLCAwLCBjb25maWdzLmxlbmd0aCwgbnVtQ29uZmlncywgMCkpIHsKLSAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICJlZ2xDaG9vc2VDb25maWcgZmFpbGVkOiAw
eCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKEVHTDE0LmVnbEdldEVycm9yKCkpKTsKLSAgICB9Ci0g
ICAgaWYgKG51bUNvbmZpZ3NbMF0gPD0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oIlVuYWJsZSB0byBmaW5kIGFueSBtYXRjaGluZyBFR0wgY29uZmlnIik7Ci0gICAgfQot
ICAgIGZpbmFsIEVHTENvbmZpZyBlZ2xDb25maWcgPSBjb25maWdzWzBdOwotICAgIGlmIChlZ2xD
b25maWcgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oImVnbENo
b29zZUNvbmZpZyByZXR1cm5lZCBudWxsIik7Ci0gICAgfQotICAgIHJldHVybiBlZ2xDb25maWc7
Ci0gIH0KLQotICAvLyBSZXR1cm4gYW4gRUdMQ29uZmlnLCBvciBkaWUgdHJ5aW5nLgotICBwcml2
YXRlIHN0YXRpYyBFR0xDb250ZXh0IGNyZWF0ZUVnbENvbnRleHQoCi0gICAgICBFZ2xCYXNlMTQu
Q29udGV4dCBzaGFyZWRDb250ZXh0LCBFR0xEaXNwbGF5IGVnbERpc3BsYXksIEVHTENvbmZpZyBl
Z2xDb25maWcpIHsKLSAgICBpZiAoc2hhcmVkQ29udGV4dCAhPSBudWxsICYmIHNoYXJlZENvbnRl
eHQuZWdsMTRDb250ZXh0ID09IEVHTDE0LkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCBzaGFyZWRDb250ZXh0Iik7Ci0gICAgfQotICAg
IGludFtdIGNvbnRleHRBdHRyaWJ1dGVzID0ge0VHTDE0LkVHTF9DT05URVhUX0NMSUVOVF9WRVJT
SU9OLCAyLCBFR0wxNC5FR0xfTk9ORX07Ci0gICAgRUdMQ29udGV4dCByb290Q29udGV4dCA9Ci0g
ICAgICAgIHNoYXJlZENvbnRleHQgPT0gbnVsbCA/IEVHTDE0LkVHTF9OT19DT05URVhUIDogc2hh
cmVkQ29udGV4dC5lZ2wxNENvbnRleHQ7Ci0gICAgZmluYWwgRUdMQ29udGV4dCBlZ2xDb250ZXh0
OwotICAgIHN5bmNocm9uaXplZCAoRWdsQmFzZS5sb2NrKSB7Ci0gICAgICBlZ2xDb250ZXh0ID0g
RUdMMTQuZWdsQ3JlYXRlQ29udGV4dChlZ2xEaXNwbGF5LCBlZ2xDb25maWcsIHJvb3RDb250ZXh0
LCBjb250ZXh0QXR0cmlidXRlcywgMCk7Ci0gICAgfQotICAgIGlmIChlZ2xDb250ZXh0ID09IEVH
TDE0LkVHTF9OT19DT05URVhUKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigK
LSAgICAgICAgICAiRmFpbGVkIHRvIGNyZWF0ZSBFR0wgY29udGV4dDogMHgiICsgSW50ZWdlci50
b0hleFN0cmluZyhFR0wxNC5lZ2xHZXRFcnJvcigpKSk7Ci0gICAgfQotICAgIHJldHVybiBlZ2xD
b250ZXh0OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0VnbEJhc2UuamF2YQkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xCYXNlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1p
bXBvcnQgYW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLnZp
ZXcuU3VyZmFjZTsKLQotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wx
MDsKLQotLyoqCi0gKiBIb2xkcyBFR0wgc3RhdGUgYW5kIHV0aWxpdHkgbWV0aG9kcyBmb3IgaGFu
ZGxpbmcgYW4gZWdsIDEuMCBFR0xDb250ZXh0LCBhbiBFR0xEaXNwbGF5LAotICogYW5kIGFuIEVH
TFN1cmZhY2UuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBFZ2xCYXNlIHsKLSAgLy8gRUdM
IHdyYXBwZXIgZm9yIGFuIGFjdHVhbCBFR0xDb250ZXh0LgotICBwdWJsaWMgc3RhdGljIGNsYXNz
IENvbnRleHQge30KLQotICAvLyBBY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50YXRpb24sIEVHTCBj
YW4gYmUgdXNlZCBmcm9tIG11bHRpcGxlIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZSBpZiBlYWNo
Ci0gIC8vIHRocmVhZCBoYXMgaXRzIG93biBFR0xDb250ZXh0LCBidXQgaW4gcHJhY3RpY2UgaXQg
ZGVhZGxvY2tzIG9uIHNvbWUgZGV2aWNlcyB3aGVuIGRvaW5nIHRoaXMuCi0gIC8vIFRoZXJlZm9y
ZSwgc3luY2hyb25pemUgb24gdGhpcyBnbG9iYWwgbG9jayBiZWZvcmUgY2FsbGluZyBkYW5nZXJv
dXMgRUdMIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0Ci0gIC8vIGRlYWRsb2NrLiBTZWUgaHR0cHM6Ly9i
dWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTU3MDIgZm9yIG1vcmUg
aW5mby4KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsK
LQotICAvLyBUaGVzZSBjb25zdGFudHMgYXJlIHRha2VuIGZyb20gRUdMMTQuRUdMX09QRU5HTF9F
UzJfQklUIGFuZCBFR0wxNC5FR0xfQ09OVEVYVF9DTElFTlRfVkVSU0lPTi4KLSAgLy8gaHR0cHM6
Ly9hbmRyb2lkLmdvb2dsZXNvdXJjZS5jb20vcGxhdGZvcm0vZnJhbWV3b3Jrcy9iYXNlLysvbWFz
dGVyL29wZW5nbC9qYXZhL2FuZHJvaWQvb3BlbmdsL0VHTDE0LmphdmEKLSAgLy8gVGhpcyBpcyBz
aW1pbGFyIHRvIGhvdyBHbFN1cmZhY2VWaWV3IGRvZXM6Ci0gIC8vIGh0dHA6Ly9ncmVwY29kZS5j
b20vZmlsZS9yZXBvc2l0b3J5LmdyZXBjb2RlLmNvbS9qYXZhL2V4dC9jb20uZ29vZ2xlLmFuZHJv
aWQvYW5kcm9pZC81LjEuMV9yMS9hbmRyb2lkL29wZW5nbC9HTFN1cmZhY2VWaWV3LmphdmEjNzYw
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFR0xfT1BFTkdMX0VTMl9CSVQgPSA0OwotICAv
LyBBbmRyb2lkLXNwZWNpZmljIGV4dGVuc2lvbi4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IEVHTF9SRUNPUkRBQkxFX0FORFJPSUQgPSAweDMxNDI7Ci0KLSAgLy8gY2xhbmctZm9ybWF0IG9m
ZgotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludFtdIENPTkZJR19QTEFJTiA9IHsKLSAgICBFR0wx
MC5FR0xfUkVEX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdM
MTAuRUdMX0JMVUVfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfUkVOREVSQUJMRV9UWVBFLCBFR0xf
T1BFTkdMX0VTMl9CSVQsCi0gICAgRUdMMTAuRUdMX05PTkUKLSAgfTsKLSAgcHVibGljIHN0YXRp
YyBmaW5hbCBpbnRbXSBDT05GSUdfUkdCQSA9IHsKLSAgICBFR0wxMC5FR0xfUkVEX1NJWkUsIDgs
Ci0gICAgRUdMMTAuRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0JMVUVfU0laRSwg
OCwKLSAgICBFR0wxMC5FR0xfQUxQSEFfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfUkVOREVSQUJM
RV9UWVBFLCBFR0xfT1BFTkdMX0VTMl9CSVQsCi0gICAgRUdMMTAuRUdMX05PTkUKLSAgfTsKLSAg
cHVibGljIHN0YXRpYyBmaW5hbCBpbnRbXSBDT05GSUdfUElYRUxfQlVGRkVSID0gewotICAgIEVH
TDEwLkVHTF9SRURfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAgICBF
R0wxMC5FR0xfQkxVRV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUsIEVH
TF9PUEVOR0xfRVMyX0JJVCwKLSAgICBFR0wxMC5FR0xfU1VSRkFDRV9UWVBFLCBFR0wxMC5FR0xf
UEJVRkZFUl9CSVQsCi0gICAgRUdMMTAuRUdMX05PTkUKLSAgfTsKLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBpbnRbXSBDT05GSUdfUElYRUxfUkdCQV9CVUZGRVIgPSB7Ci0gICAgRUdMMTAuRUdMX1JF
RF9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9HUkVFTl9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9C
TFVFX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdMX0FMUEhBX1NJWkUsIDgsCi0gICAgRUdMMTAuRUdM
X1JFTkRFUkFCTEVfVFlQRSwgRUdMX09QRU5HTF9FUzJfQklULAotICAgIEVHTDEwLkVHTF9TVVJG
QUNFX1RZUEUsIEVHTDEwLkVHTF9QQlVGRkVSX0JJVCwKLSAgICBFR0wxMC5FR0xfTk9ORQotICB9
OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludFtdIENPTkZJR19SRUNPUkRBQkxFID0gewotICAg
IEVHTDEwLkVHTF9SRURfU0laRSwgOCwKLSAgICBFR0wxMC5FR0xfR1JFRU5fU0laRSwgOCwKLSAg
ICBFR0wxMC5FR0xfQkxVRV9TSVpFLCA4LAotICAgIEVHTDEwLkVHTF9SRU5ERVJBQkxFX1RZUEUs
IEVHTF9PUEVOR0xfRVMyX0JJVCwKLSAgICBFR0xfUkVDT1JEQUJMRV9BTkRST0lELCAxLAotICAg
IEVHTDEwLkVHTF9OT05FCi0gIH07Ci0gIC8vIGNsYW5nLWZvcm1hdCBvbgotCi0gIC8vIENyZWF0
ZSBhIG5ldyBjb250ZXh0IHdpdGggdGhlIHNwZWNpZmllZCBjb25maWcgYXR0cmlidXRlcywgc2hh
cmluZyBkYXRhIHdpdGggc2hhcmVkQ29udGV4dC4KLSAgLy8gfHNoYXJlZENvbnRleHR8IGNhbiBi
ZSBudWxsLgotICBwdWJsaWMgc3RhdGljIEVnbEJhc2UgY3JlYXRlKENvbnRleHQgc2hhcmVkQ29u
dGV4dCwgaW50W10gY29uZmlnQXR0cmlidXRlcykgewotICAgIHJldHVybiAoRWdsQmFzZTE0Lmlz
RUdMMTRTdXBwb3J0ZWQoKQotICAgICAgICAgICAgICAgJiYgKHNoYXJlZENvbnRleHQgPT0gbnVs
bCB8fCBzaGFyZWRDb250ZXh0IGluc3RhbmNlb2YgRWdsQmFzZTE0LkNvbnRleHQpKQotICAgICAg
ICA/IG5ldyBFZ2xCYXNlMTQoKEVnbEJhc2UxNC5Db250ZXh0KSBzaGFyZWRDb250ZXh0LCBjb25m
aWdBdHRyaWJ1dGVzKQotICAgICAgICA6IG5ldyBFZ2xCYXNlMTAoKEVnbEJhc2UxMC5Db250ZXh0
KSBzaGFyZWRDb250ZXh0LCBjb25maWdBdHRyaWJ1dGVzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgRWdsQmFzZSBjcmVhdGUoKSB7Ci0gICAgcmV0dXJuIGNyZWF0ZShudWxsLCBDT05GSUdfUExB
SU4pOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBFZ2xCYXNlIGNyZWF0ZShDb250ZXh0IHNoYXJl
ZENvbnRleHQpIHsKLSAgICByZXR1cm4gY3JlYXRlKHNoYXJlZENvbnRleHQsIENPTkZJR19QTEFJ
Tik7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3Qgdm9pZCBjcmVhdGVTdXJmYWNlKFN1cmZhY2Ug
c3VyZmFjZSk7Ci0KLSAgLy8gQ3JlYXRlIEVHTFN1cmZhY2UgZnJvbSB0aGUgQW5kcm9pZCBTdXJm
YWNlVGV4dHVyZS4KLSAgcHVibGljIGFic3RyYWN0IHZvaWQgY3JlYXRlU3VyZmFjZShTdXJmYWNl
VGV4dHVyZSBzdXJmYWNlVGV4dHVyZSk7Ci0KLSAgLy8gQ3JlYXRlIGR1bW15IDF4MSBwaXhlbCBi
dWZmZXIgc3VyZmFjZSBzbyB0aGUgY29udGV4dCBjYW4gYmUgbWFkZSBjdXJyZW50LgotICBwdWJs
aWMgYWJzdHJhY3Qgdm9pZCBjcmVhdGVEdW1teVBidWZmZXJTdXJmYWNlKCk7Ci0KLSAgcHVibGlj
IGFic3RyYWN0IHZvaWQgY3JlYXRlUGJ1ZmZlclN1cmZhY2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KTsKLQotICBwdWJsaWMgYWJzdHJhY3QgQ29udGV4dCBnZXRFZ2xCYXNlQ29udGV4dCgpOwotCi0g
IHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGhhc1N1cmZhY2UoKTsKLQotICBwdWJsaWMgYWJzdHJh
Y3QgaW50IHN1cmZhY2VXaWR0aCgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCBpbnQgc3VyZmFjZUhl
aWdodCgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lkIHJlbGVhc2VTdXJmYWNlKCk7Ci0KLSAg
cHVibGljIGFic3RyYWN0IHZvaWQgcmVsZWFzZSgpOwotCi0gIHB1YmxpYyBhYnN0cmFjdCB2b2lk
IG1ha2VDdXJyZW50KCk7Ci0KLSAgLy8gRGV0YWNoIHRoZSBjdXJyZW50IEVHTCBjb250ZXh0LCBz
byB0aGF0IGl0IGNhbiBiZSBtYWRlIGN1cnJlbnQgb24gYW5vdGhlciB0aHJlYWQuCi0gIHB1Ymxp
YyBhYnN0cmFjdCB2b2lkIGRldGFjaEN1cnJlbnQoKTsKLQotICBwdWJsaWMgYWJzdHJhY3Qgdm9p
ZCBzd2FwQnVmZmVycygpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlci5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXIuamF2YQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsNjc2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuQml0bWFwOwotaW1wb3J0IGFu
ZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xF
UzIwOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRs
ZXJUaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3
LlN1cmZhY2U7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwu
QXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwu
Y29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5U
aW1lVW5pdDsKLQotLyoqCi0gKiBJbXBsZW1lbnRzIG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlci5D
YWxsYmFja3MgYnkgZGlzcGxheWluZyB0aGUgdmlkZW8gc3RyZWFtIG9uIGFuIEVHTCBTdXJmYWNl
LgotICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgaGVscGVyIGNsYXNz
IGZvciByZW5kZXJpbmcgb24gU3VyZmFjZVZpZXdzIGFuZAotICogVGV4dHVyZVZpZXdzLgotICov
Ci1wdWJsaWMgY2xhc3MgRWdsUmVuZGVyZXIgaW1wbGVtZW50cyBWaWRlb1JlbmRlcmVyLkNhbGxi
YWNrcyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRWdsUmVuZGVyZXIi
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIExPR19JTlRFUlZBTF9TRUMgPSA0OwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1NVUkZBQ0VfQ0xFQVJfQ09VTlQgPSAzOwotCi0g
IHB1YmxpYyBpbnRlcmZhY2UgRnJhbWVMaXN0ZW5lciB7IHZvaWQgb25GcmFtZShCaXRtYXAgZnJh
bWUpOyB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2NhbGVBbmRGcmFtZUxpc3RlbmVyIHsK
LSAgICBwdWJsaWMgZmluYWwgZmxvYXQgc2NhbGU7Ci0gICAgcHVibGljIGZpbmFsIEZyYW1lTGlz
dGVuZXIgbGlzdGVuZXI7Ci0KLSAgICBwdWJsaWMgU2NhbGVBbmRGcmFtZUxpc3RlbmVyKGZsb2F0
IHNjYWxlLCBGcmFtZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgICB0aGlzLnNjYWxlID0gc2Nh
bGU7Ci0gICAgICB0aGlzLmxpc3RlbmVyID0gbGlzdGVuZXI7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBjbGFzcyBFZ2xTdXJmYWNlQ3JlYXRpb24gaW1wbGVtZW50cyBSdW5uYWJsZSB7Ci0gICAg
cHJpdmF0ZSBPYmplY3Qgc3VyZmFjZTsKLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBz
ZXRTdXJmYWNlKE9iamVjdCBzdXJmYWNlKSB7Ci0gICAgICB0aGlzLnN1cmZhY2UgPSBzdXJmYWNl
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBy
dW4oKSB7Ci0gICAgICBpZiAoc3VyZmFjZSAhPSBudWxsICYmIGVnbEJhc2UgIT0gbnVsbCAmJiAh
ZWdsQmFzZS5oYXNTdXJmYWNlKCkpIHsKLSAgICAgICAgaWYgKHN1cmZhY2UgaW5zdGFuY2VvZiBT
dXJmYWNlKSB7Ci0gICAgICAgICAgZWdsQmFzZS5jcmVhdGVTdXJmYWNlKChTdXJmYWNlKSBzdXJm
YWNlKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdXJmYWNlIGluc3RhbmNlb2YgU3VyZmFjZVRleHR1
cmUpIHsKLSAgICAgICAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2UoKFN1cmZhY2VUZXh0dXJlKSBz
dXJmYWNlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0
YXRlRXhjZXB0aW9uKCJJbnZhbGlkIHN1cmZhY2U6ICIgKyBzdXJmYWNlKTsKLSAgICAgICAgfQot
ICAgICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICAgIC8vIE5lY2Vzc2FyeSBmb3Ig
WVVWIGZyYW1lcyB3aXRoIG9kZCB3aWR0aC4KLSAgICAgICAgR0xFUzIwLmdsUGl4ZWxTdG9yZWko
R0xFUzIwLkdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0KLSAgLy8gfHJlbmRlclRocmVhZEhhbmRsZXJ8
IGlzIGEgaGFuZGxlciBmb3IgY29tbXVuaWNhdGluZyB3aXRoIHxyZW5kZXJUaHJlYWR8LCBhbmQg
aXMgc3luY2hyb25pemVkCi0gIC8vIG9uIHxoYW5kbGVyTG9ja3wuCi0gIHByaXZhdGUgZmluYWwg
T2JqZWN0IGhhbmRsZXJMb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIEhhbmRsZXIgcmVu
ZGVyVGhyZWFkSGFuZGxlcjsKLQotICBwcml2YXRlIGZpbmFsIE9iamVjdCBmcmFtZUxpc3RlbmVy
TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8U2NhbGVBbmRG
cmFtZUxpc3RlbmVyPiBmcmFtZUxpc3RlbmVycyA9IG5ldyBBcnJheUxpc3Q8PigpOwotCi0gIC8v
IFZhcmlhYmxlcyBmb3IgZnBzIHJlZHVjdGlvbi4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgZnBz
UmVkdWN0aW9uTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgLy8gVGltZSBmb3Igd2hlbiBuZXh0IGZy
YW1lIHNob3VsZCBiZSByZW5kZXJlZC4KLSAgcHJpdmF0ZSBsb25nIG5leHRGcmFtZVRpbWVOczsK
LSAgLy8gTWluaW11bSBkdXJhdGlvbiBiZXR3ZWVuIGZyYW1lcyB3aGVuIGZwcyByZWR1Y3Rpb24g
aXMgYWN0aXZlLCBvciAtMSBpZiB2aWRlbyBpcyBjb21wbGV0ZWx5Ci0gIC8vIHBhdXNlZC4KLSAg
cHJpdmF0ZSBsb25nIG1pblJlbmRlclBlcmlvZE5zOwotCi0gIC8vIEVHTCBhbmQgR0wgcmVzb3Vy
Y2VzIGZvciBkcmF3aW5nIFlVVi9PRVMgdGV4dHVyZXMuIEFmdGVyIGluaXRpbGl6YXRpb24sIHRo
ZXNlIGFyZSBvbmx5IGFjY2Vzc2VkCi0gIC8vIGZyb20gdGhlIHJlbmRlciB0aHJlYWQuCi0gIHBy
aXZhdGUgRWdsQmFzZSBlZ2xCYXNlOwotICBwcml2YXRlIGZpbmFsIFJlbmRlcmVyQ29tbW9uLll1
dlVwbG9hZGVyIHl1dlVwbG9hZGVyID0gbmV3IFJlbmRlcmVyQ29tbW9uLll1dlVwbG9hZGVyKCk7
Ci0gIHByaXZhdGUgUmVuZGVyZXJDb21tb24uR2xEcmF3ZXIgZHJhd2VyOwotICAvLyBUZXh0dXJl
IGlkcyBmb3IgWVVWIGZyYW1lcy4gQWxsb2NhdGVkIG9uIGZpcnN0IGFycml2YWwgb2YgYSBZVVYg
ZnJhbWUuCi0gIHByaXZhdGUgaW50W10geXV2VGV4dHVyZXMgPSBudWxsOwotCi0gIC8vIFBlbmRp
bmcgZnJhbWUgdG8gcmVuZGVyLiBTZXJ2ZXMgYXMgYSBxdWV1ZSB3aXRoIHNpemUgMS4gU3luY2hy
b25pemVkIG9uIHxmcmFtZUxvY2t8LgotICBwcml2YXRlIGZpbmFsIE9iamVjdCBmcmFtZUxvY2sg
PSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgcGVuZGlu
Z0ZyYW1lOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3luY2hyb25pemVkIG9uIHxsYXlv
dXRMb2NrfC4KLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbGF5b3V0TG9jayA9IG5ldyBPYmplY3Qo
KTsKLSAgcHJpdmF0ZSBpbnQgc3VyZmFjZVdpZHRoOwotICBwcml2YXRlIGludCBzdXJmYWNlSGVp
Z2h0OwotICBwcml2YXRlIGZsb2F0IGxheW91dEFzcGVjdFJhdGlvOwotICAvLyBJZiB0cnVlLCBt
aXJyb3JzIHRoZSB2aWRlbyBzdHJlYW0gaG9yaXpvbnRhbGx5LgotICBwcml2YXRlIGJvb2xlYW4g
bWlycm9yOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3luY2hyb25pemVkIG9uIHxzdGF0
aXN0aWNzTG9ja3wuCi0gIHByaXZhdGUgZmluYWwgT2JqZWN0IHN0YXRpc3RpY3NMb2NrID0gbmV3
IE9iamVjdCgpOwotICAvLyBUb3RhbCBudW1iZXIgb2YgdmlkZW8gZnJhbWVzIHJlY2VpdmVkIGlu
IHJlbmRlckZyYW1lKCkgY2FsbC4KLSAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVjZWl2ZWQ7Ci0gIC8v
IE51bWJlciBvZiB2aWRlbyBmcmFtZXMgZHJvcHBlZCBieSByZW5kZXJGcmFtZSgpIGJlY2F1c2Ug
cHJldmlvdXMgZnJhbWUgaGFzIG5vdCBiZWVuIHJlbmRlcmVkCi0gIC8vIHlldC4KLSAgcHJpdmF0
ZSBpbnQgZnJhbWVzRHJvcHBlZDsKLSAgLy8gTnVtYmVyIG9mIHJlbmRlcmVkIHZpZGVvIGZyYW1l
cy4KLSAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVuZGVyZWQ7Ci0gIC8vIFN0YXJ0IHRpbWUgZm9yIGNv
dW50aW5nIHRoZXNlIHN0YXRpc3RpY3MsIG9yIDAgaWYgd2UgaGF2ZW4ndCBzdGFydGVkIG1lYXN1
cmluZyB5ZXQuCi0gIHByaXZhdGUgbG9uZyBzdGF0aXN0aWNzU3RhcnRUaW1lTnM7Ci0gIC8vIFRp
bWUgaW4gbnMgc3BlbnQgaW4gcmVuZGVyRnJhbWVPblJlbmRlclRocmVhZCgpIGZ1bmN0aW9uLgot
ICBwcml2YXRlIGxvbmcgcmVuZGVyVGltZU5zOwotICAvLyBUaW1lIGluIG5zIHNwZW50IGJ5IHRo
ZSByZW5kZXIgdGhyZWFkIGluIHRoZSBzd2FwQnVmZmVycygpIGZ1bmN0aW9uLgotICBwcml2YXRl
IGxvbmcgcmVuZGVyU3dhcEJ1ZmZlclRpbWVOczsKLQotICAvLyBVc2VkIGZvciBiaXRtYXAgY2Fw
dHVyaW5nLgotICBwcml2YXRlIEdsVGV4dHVyZUZyYW1lQnVmZmVyIGJpdG1hcFRleHR1cmVGcmFt
ZWJ1ZmZlcjsKLQotICAvLyBSdW5uYWJsZSBmb3IgcG9zdGluZyBmcmFtZXMgdG8gcmVuZGVyIHRo
cmVhZC4KLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSByZW5kZXJGcmFtZVJ1bm5hYmxlID0gbmV3
IFJ1bm5hYmxlKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgIHJlbmRlckZyYW1lT25SZW5kZXJUaHJlYWQoKTsKLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBSdW5uYWJsZSBsb2dTdGF0aXN0aWNzUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgbG9nU3RhdGlz
dGljcygpOwotICAgICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgICBpZiAo
cmVuZGVyVGhyZWFkSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgcmVuZGVyVGhyZWFkSGFu
ZGxlci5yZW1vdmVDYWxsYmFja3MobG9nU3RhdGlzdGljc1J1bm5hYmxlKTsKLSAgICAgICAgICBy
ZW5kZXJUaHJlYWRIYW5kbGVyLnBvc3REZWxheWVkKAotICAgICAgICAgICAgICBsb2dTdGF0aXN0
aWNzUnVubmFibGUsIFRpbWVVbml0LlNFQ09ORFMudG9NaWxsaXMoTE9HX0lOVEVSVkFMX1NFQykp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgZmluYWwgRWds
U3VyZmFjZUNyZWF0aW9uIGVnbFN1cmZhY2VDcmVhdGlvblJ1bm5hYmxlID0gbmV3IEVnbFN1cmZh
Y2VDcmVhdGlvbigpOwotCi0gIC8qKgotICAgKiBTdGFuZGFyZCBjb25zdHJ1Y3Rvci4gVGhlIG5h
bWUgd2lsbCBiZSB1c2VkIGZvciB0aGUgcmVuZGVyIHRocmVhZCBuYW1lIGFuZCBpbmNsdWRlZCB3
aGVuCi0gICAqIGxvZ2dpbmcuIEluIG9yZGVyIHRvIHJlbmRlciBzb21ldGhpbmcsIHlvdSBtdXN0
IGZpcnN0IGNhbGwgaW5pdCgpIGFuZCBjcmVhdGVFZ2xTdXJmYWNlLgotICAgKi8KLSAgcHVibGlj
IEVnbFJlbmRlcmVyKFN0cmluZyBuYW1lKSB7Ci0gICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgfQot
Ci0gIC8qKgotICAgKiBJbml0aWFsaXplIHRoaXMgY2xhc3MsIHNoYXJpbmcgcmVzb3VyY2VzIHdp
dGggfHNoYXJlZENvbnRleHR8LiBUaGUgY3VzdG9tIHxkcmF3ZXJ8IHdpbGwgYmUgdXNlZAotICAg
KiBmb3IgZHJhd2luZyBmcmFtZXMgb24gdGhlIEVHTFN1cmZhY2UuIFRoaXMgY2xhc3MgaXMgcmVz
cG9uc2libGUgZm9yIGNhbGxpbmcgcmVsZWFzZSgpIG9uCi0gICAqIHxkcmF3ZXJ8LiBJdCBpcyBh
bGxvd2VkIHRvIGNhbGwgaW5pdCgpIHRvIHJlaW5pdGlhbGl6ZSB0aGUgcmVuZGVyZXIgYWZ0ZXIg
YSBwcmV2aW91cwotICAgKiBpbml0KCkvcmVsZWFzZSgpIGN5Y2xlLgotICAgKi8KLSAgcHVibGlj
IHZvaWQgaW5pdChmaW5hbCBFZ2xCYXNlLkNvbnRleHQgc2hhcmVkQ29udGV4dCwgZmluYWwgaW50
W10gY29uZmlnQXR0cmlidXRlcywKLSAgICAgIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdl
cikgewotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGlmIChyZW5kZXJU
aHJlYWRIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4
Y2VwdGlvbihuYW1lICsgIkFscmVhZHkgaW5pdGlhbGl6ZWQiKTsKLSAgICAgIH0KLSAgICAgIGxv
Z0QoIkluaXRpYWxpemluZyBFZ2xSZW5kZXJlciIpOwotICAgICAgdGhpcy5kcmF3ZXIgPSBkcmF3
ZXI7Ci0KLSAgICAgIGZpbmFsIEhhbmRsZXJUaHJlYWQgcmVuZGVyVGhyZWFkID0gbmV3IEhhbmRs
ZXJUaHJlYWQobmFtZSArICJFZ2xSZW5kZXJlciIpOwotICAgICAgcmVuZGVyVGhyZWFkLnN0YXJ0
KCk7Ci0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIocmVuZGVyVGhyZWFk
LmdldExvb3BlcigpKTsKLSAgICAgIC8vIENyZWF0ZSBFR0wgY29udGV4dCBvbiB0aGUgbmV3bHkg
Y3JlYXRlZCByZW5kZXIgdGhyZWFkLiBJdCBzaG91bGQgYmUgcG9zc2libHkgdG8gY3JlYXRlIHRo
ZQotICAgICAgLy8gY29udGV4dCBvbiB0aGlzIHRocmVhZCBhbmQgbWFrZSBpdCBjdXJyZW50IG9u
IHRoZSByZW5kZXIgdGhyZWFkLCBidXQgdGhpcyBjYXVzZXMgZmFpbHVyZSBvbgotICAgICAgLy8g
c29tZSBNYXJ2ZWwgYmFzZWQgSkIgZGV2aWNlcy4gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9w
L3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTYzNTAuCi0gICAgICBUaHJlYWRVdGlscy5pbnZva2VB
dEZyb250VW5pbnRlcnJ1cHRpYmx5KHJlbmRlclRocmVhZEhhbmRsZXIsIG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgICAvLyBJZiBzaGFyZWRDb250ZXh0IGlzIG51bGwsIHRoZW4gdGV4dHVyZSBmcmFtZXMgYXJl
IGRpc2FibGVkLiBUaGlzIGlzIHR5cGljYWxseSBmb3Igb2xkCi0gICAgICAgICAgLy8gZGV2aWNl
cyB0aGF0IG1pZ2h0IG5vdCBiZSBmdWxseSBzcGVjIGNvbXBsaWFudCwgc28gZm9yY2UgRUdMIDEu
MCBzaW5jZSBFR0wgMS40IGhhcwotICAgICAgICAgIC8vIGNhdXNlZCB0cm91YmxlIG9uIHNvbWUg
d2VpcmQgZGV2aWNlcy4KLSAgICAgICAgICBpZiAoc2hhcmVkQ29udGV4dCA9PSBudWxsKSB7Ci0g
ICAgICAgICAgICBsb2dEKCJFZ2xCYXNlMTAuY3JlYXRlIGNvbnRleHQiKTsKLSAgICAgICAgICAg
IGVnbEJhc2UgPSBuZXcgRWdsQmFzZTEwKG51bGwgLyogc2hhcmVkQ29udGV4dCAqLywgY29uZmln
QXR0cmlidXRlcyk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGxvZ0QoIkVnbEJh
c2UuY3JlYXRlIHNoYXJlZCBjb250ZXh0Iik7Ci0gICAgICAgICAgICBlZ2xCYXNlID0gRWdsQmFz
ZS5jcmVhdGUoc2hhcmVkQ29udGV4dCwgY29uZmlnQXR0cmlidXRlcyk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9KTsKLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdChlZ2xT
dXJmYWNlQ3JlYXRpb25SdW5uYWJsZSk7Ci0gICAgICBmaW5hbCBsb25nIGN1cnJlbnRUaW1lTnMg
PSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHJlc2V0U3RhdGlzdGljcyhjdXJyZW50VGltZU5z
KTsKLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucG9zdERlbGF5ZWQoCi0gICAgICAgICAgbG9n
U3RhdGlzdGljc1J1bm5hYmxlLCBUaW1lVW5pdC5TRUNPTkRTLnRvTWlsbGlzKExPR19JTlRFUlZB
TF9TRUMpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVFZ2xTdXJmYWNlKFN1
cmZhY2Ugc3VyZmFjZSkgewotICAgIGNyZWF0ZUVnbFN1cmZhY2VJbnRlcm5hbChzdXJmYWNlKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUVnbFN1cmZhY2UoU3VyZmFjZVRleHR1cmUgc3Vy
ZmFjZVRleHR1cmUpIHsKLSAgICBjcmVhdGVFZ2xTdXJmYWNlSW50ZXJuYWwoc3VyZmFjZVRleHR1
cmUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUVnbFN1cmZhY2VJbnRlcm5hbChPYmpl
Y3Qgc3VyZmFjZSkgewotICAgIGVnbFN1cmZhY2VDcmVhdGlvblJ1bm5hYmxlLnNldFN1cmZhY2Uo
c3VyZmFjZSk7Ci0gICAgcG9zdFRvUmVuZGVyVGhyZWFkKGVnbFN1cmZhY2VDcmVhdGlvblJ1bm5h
YmxlKTsKLSAgfQotCi0gIC8qKgotICAgKiBCbG9jayB1bnRpbCBhbnkgcGVuZGluZyBmcmFtZSBp
cyByZXR1cm5lZCBhbmQgYWxsIEdMIHJlc291cmNlcyByZWxlYXNlZCwgZXZlbiBpZiBhbiBpbnRl
cnJ1cHQKLSAgICogb2NjdXJzLiBJZiBhbiBpbnRlcnJ1cHQgb2NjdXJzIGR1cmluZyByZWxlYXNl
KCksIHRoZSBpbnRlcnJ1cHQgZmxhZyB3aWxsIGJlIHNldC4gVGhpcyBmdW5jdGlvbgotICAgKiBz
aG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGUgQWN0aXZpdHkgaXMgZGVzdHJveWVkIGFuZCB0aGUg
RUdMQ29udGV4dCBpcyBzdGlsbCB2YWxpZC4gSWYgeW91Ci0gICAqIGRvbid0IGNhbGwgdGhpcyBm
dW5jdGlvbiwgdGhlIEdMIHJlc291cmNlcyBtaWdodCBsZWFrLgotICAgKi8KLSAgcHVibGljIHZv
aWQgcmVsZWFzZSgpIHsKLSAgICBsb2dEKCJSZWxlYXNpbmcuIik7Ci0gICAgZmluYWwgQ291bnRE
b3duTGF0Y2ggZWdsQ2xlYW51cEJhcnJpZXIgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAg
c3luY2hyb25pemVkIChoYW5kbGVyTG9jaykgewotICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRs
ZXIgPT0gbnVsbCkgewotICAgICAgICBsb2dEKCJBbHJlYWR5IHJlbGVhc2VkIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICAgIH0KLSAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJh
Y2tzKGxvZ1N0YXRpc3RpY3NSdW5uYWJsZSk7Ci0gICAgICAvLyBSZWxlYXNlIEVHTCBhbmQgR0wg
cmVzb3VyY2VzIG9uIHJlbmRlciB0aHJlYWQuCi0gICAgICByZW5kZXJUaHJlYWRIYW5kbGVyLnBv
c3RBdEZyb250T2ZRdWV1ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAg
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYgKGRyYXdlciAhPSBudWxsKSB7
Ci0gICAgICAgICAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgZHJhd2VyID0gbnVs
bDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHl1dlRleHR1cmVzICE9IG51bGwpIHsKLSAg
ICAgICAgICAgIEdMRVMyMC5nbERlbGV0ZVRleHR1cmVzKDMsIHl1dlRleHR1cmVzLCAwKTsKLSAg
ICAgICAgICAgIHl1dlRleHR1cmVzID0gbnVsbDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYg
KGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBiaXRtYXBU
ZXh0dXJlRnJhbWVidWZmZXIucmVsZWFzZSgpOwotICAgICAgICAgICAgYml0bWFwVGV4dHVyZUZy
YW1lYnVmZmVyID0gbnVsbDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGVnbEJhc2UgIT0g
bnVsbCkgewotICAgICAgICAgICAgbG9nRCgiZWdsQmFzZSBkZXRhY2ggYW5kIHJlbGVhc2UuIik7
Ci0gICAgICAgICAgICBlZ2xCYXNlLmRldGFjaEN1cnJlbnQoKTsKLSAgICAgICAgICAgIGVnbEJh
c2UucmVsZWFzZSgpOwotICAgICAgICAgICAgZWdsQmFzZSA9IG51bGw7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIGVnbENsZWFudXBCYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgICB9Ci0gICAg
ICB9KTsKLSAgICAgIGZpbmFsIExvb3BlciByZW5kZXJMb29wZXIgPSByZW5kZXJUaHJlYWRIYW5k
bGVyLmdldExvb3BlcigpOwotICAgICAgLy8gVE9ETyhtYWdqZWQpOiBSZXBsYWNlIHRoaXMgcG9z
dCgpIHdpdGggcmVuZGVyTG9vcGVyLnF1aXRTYWZlbHkoKSB3aGVuIEFQSSBzdXBwb3J0ID49IDE4
LgotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAg
ICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBsb2dE
KCJRdWl0dGluZyByZW5kZXIgdGhyZWFkLiIpOwotICAgICAgICAgIHJlbmRlckxvb3Blci5xdWl0
KCk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgICAgLy8gRG9uJ3QgYWNjZXB0IGFueSBtb3Jl
IGZyYW1lcyBvciBtZXNzYWdlcyB0byB0aGUgcmVuZGVyIHRocmVhZC4KLSAgICAgIHJlbmRlclRo
cmVhZEhhbmRsZXIgPSBudWxsOwotICAgIH0KLSAgICAvLyBNYWtlIHN1cmUgdGhlIEVHTC9HTCBj
bGVhbnVwIHBvc3RlZCBhYm92ZSBpcyBleGVjdXRlZC4KLSAgICBUaHJlYWRVdGlscy5hd2FpdFVu
aW50ZXJydXB0aWJseShlZ2xDbGVhbnVwQmFycmllcik7Ci0gICAgc3luY2hyb25pemVkIChmcmFt
ZUxvY2spIHsKLSAgICAgIGlmIChwZW5kaW5nRnJhbWUgIT0gbnVsbCkgewotICAgICAgICBWaWRl
b1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShwZW5kaW5nRnJhbWUpOwotICAgICAgICBwZW5kaW5n
RnJhbWUgPSBudWxsOwotICAgICAgfQotICAgIH0KLSAgICBsb2dEKCJSZWxlYXNpbmcgZG9uZS4i
KTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXNldCB0aGUgc3RhdGlzdGljcyBsb2dnZWQgaW4gbG9n
U3RhdGlzdGljcygpLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlc2V0U3RhdGlzdGljcyhsb25n
IGN1cnJlbnRUaW1lTnMpIHsKLSAgICBzeW5jaHJvbml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0g
ICAgICBzdGF0aXN0aWNzU3RhcnRUaW1lTnMgPSBjdXJyZW50VGltZU5zOwotICAgICAgZnJhbWVz
UmVjZWl2ZWQgPSAwOwotICAgICAgZnJhbWVzRHJvcHBlZCA9IDA7Ci0gICAgICBmcmFtZXNSZW5k
ZXJlZCA9IDA7Ci0gICAgICByZW5kZXJUaW1lTnMgPSAwOwotICAgICAgcmVuZGVyU3dhcEJ1ZmZl
clRpbWVOcyA9IDA7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNl
KCkgewotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2spIHsKLSAgICAgIGZpbmFsIFRocmVh
ZCByZW5kZXJUaHJlYWQgPQotICAgICAgICAgIChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwp
ID8gbnVsbCA6IHJlbmRlclRocmVhZEhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCk7Ci0g
ICAgICBpZiAocmVuZGVyVGhyZWFkICE9IG51bGwpIHsKLSAgICAgICAgZmluYWwgU3RhY2tUcmFj
ZUVsZW1lbnRbXSByZW5kZXJTdGFja1RyYWNlID0gcmVuZGVyVGhyZWFkLmdldFN0YWNrVHJhY2Uo
KTsKLSAgICAgICAgaWYgKHJlbmRlclN0YWNrVHJhY2UubGVuZ3RoID4gMCkgewotICAgICAgICAg
IGxvZ0QoIkVnbFJlbmRlcmVyIHN0YWNrIHRyYWNlOiIpOwotICAgICAgICAgIGZvciAoU3RhY2tU
cmFjZUVsZW1lbnQgdHJhY2VFbGVtIDogcmVuZGVyU3RhY2tUcmFjZSkgewotICAgICAgICAgICAg
bG9nRCh0cmFjZUVsZW0udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBpZiB0aGUgdmlkZW8gc3RyZWFtIHNo
b3VsZCBiZSBtaXJyb3JlZCBvciBub3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNaXJyb3Io
ZmluYWwgYm9vbGVhbiBtaXJyb3IpIHsKLSAgICBsb2dEKCJzZXRNaXJyb3I6ICIgKyBtaXJyb3Ip
OwotICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAgICAgdGhpcy5taXJyb3IgPSBt
aXJyb3I7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBsYXlvdXQgYXNwZWN0IHJhdGlv
LiBUaGlzIGlzIHVzZWQgdG8gY3JvcCBmcmFtZXMgd2hlbiByZW5kZXJpbmcgdG8gYXZvaWQgc3Ry
ZXRjaGVkIHZpZGVvLgotICAgKiBTZXQgdGhpcyB0byAwIHRvIGRpc2FibGUgY3JvcHBpbmcuCi0g
ICAqLwotICBwdWJsaWMgdm9pZCBzZXRMYXlvdXRBc3BlY3RSYXRpbyhmbG9hdCBsYXlvdXRBc3Bl
Y3RSYXRpbykgewotICAgIGxvZ0QoInNldExheW91dEFzcGVjdFJhdGlvOiAiICsgbGF5b3V0QXNw
ZWN0UmF0aW8pOwotICAgIHN5bmNocm9uaXplZCAobGF5b3V0TG9jaykgewotICAgICAgdGhpcy5s
YXlvdXRBc3BlY3RSYXRpbyA9IGxheW91dEFzcGVjdFJhdGlvOwotICAgIH0KLSAgfQotCi0gIC8q
KgotICAgKiBMaW1pdCByZW5kZXIgZnJhbWVyYXRlLgotICAgKgotICAgKiBAcGFyYW0gZnBzIExp
bWl0IHJlbmRlciBmcmFtZXJhdGUgdG8gdGhpcyB2YWx1ZSwgb3IgdXNlIEZsb2F0LlBPU0lUSVZF
X0lORklOSVRZIHRvIGRpc2FibGUgZnBzCi0gICAqICAgICAgICAgICAgcmVkdWN0aW9uLgotICAg
Ki8KLSAgcHVibGljIHZvaWQgc2V0RnBzUmVkdWN0aW9uKGZsb2F0IGZwcykgewotICAgIGxvZ0Qo
InNldEZwc1JlZHVjdGlvbjogIiArIGZwcyk7Ci0gICAgc3luY2hyb25pemVkIChmcHNSZWR1Y3Rp
b25Mb2NrKSB7Ci0gICAgICBmaW5hbCBsb25nIHByZXZpb3VzUmVuZGVyUGVyaW9kTnMgPSBtaW5S
ZW5kZXJQZXJpb2ROczsKLSAgICAgIGlmIChmcHMgPD0gMCkgewotICAgICAgICBtaW5SZW5kZXJQ
ZXJpb2ROcyA9IExvbmcuTUFYX1ZBTFVFOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbWluUmVu
ZGVyUGVyaW9kTnMgPSAobG9uZykgKFRpbWVVbml0LlNFQ09ORFMudG9OYW5vcygxKSAvIGZwcyk7
Ci0gICAgICB9Ci0gICAgICBpZiAobWluUmVuZGVyUGVyaW9kTnMgIT0gcHJldmlvdXNSZW5kZXJQ
ZXJpb2ROcykgewotICAgICAgICAvLyBGcHMgcmVkdWN0aW9uIGNoYW5nZWQgLSByZXNldCBmcmFt
ZSB0aW1lLgotICAgICAgICBuZXh0RnJhbWVUaW1lTnMgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNhYmxlRnBzUmVkdWN0aW9uKCkg
ewotICAgIHNldEZwc1JlZHVjdGlvbihGbG9hdC5QT1NJVElWRV9JTkZJTklUWSAvKiBmcHMgKi8p
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGF1c2VWaWRlbygpIHsKLSAgICBzZXRGcHNSZWR1Y3Rp
b24oMCAvKiBmcHMgKi8pOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sg
dG8gYmUgaW52b2tlZCB3aGVuIGEgbmV3IHZpZGVvIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkLgot
ICAgKgotICAgKiBAcGFyYW0gbGlzdGVuZXIgVGhlIGNhbGxiYWNrIHRvIGJlIGludm9rZWQuCi0g
ICAqIEBwYXJhbSBzY2FsZSAgICBUaGUgc2NhbGUgb2YgdGhlIEJpdG1hcCBwYXNzZWQgdG8gdGhl
IGNhbGxiYWNrLCBvciAwIGlmIG5vIEJpdG1hcCBpcwotICAgKiAgICAgICAgICAgICAgICAgcmVx
dWlyZWQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBhZGRGcmFtZUxpc3RlbmVyKEZyYW1lTGlzdGVu
ZXIgbGlzdGVuZXIsIGZsb2F0IHNjYWxlKSB7Ci0gICAgc3luY2hyb25pemVkIChmcmFtZUxpc3Rl
bmVyTG9jaykgewotICAgICAgZnJhbWVMaXN0ZW5lcnMuYWRkKG5ldyBTY2FsZUFuZEZyYW1lTGlz
dGVuZXIoc2NhbGUsIGxpc3RlbmVyKSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbW92
ZSBhbnkgcGVuZGluZyBjYWxsYmFjayB0aGF0IHdhcyBhZGRlZCB3aXRoIGFkZEZyYW1lTGlzdGVu
ZXIuIElmIHRoZSBjYWxsYmFjayBpcyBub3QgaW4KLSAgICogdGhlIHF1ZXVlLCBub3RoaW5nIGhh
cHBlbnMuCi0gICAqCi0gICAqIEBwYXJhbSBydW5uYWJsZSBUaGUgY2FsbGJhY2sgdG8gcmVtb3Zl
LgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVtb3ZlRnJhbWVMaXN0ZW5lcihGcmFtZUxpc3RlbmVy
IGxpc3RlbmVyKSB7Ci0gICAgc3luY2hyb25pemVkIChmcmFtZUxpc3RlbmVyTG9jaykgewotICAg
ICAgZmluYWwgSXRlcmF0b3I8U2NhbGVBbmRGcmFtZUxpc3RlbmVyPiBpdGVyID0gZnJhbWVMaXN0
ZW5lcnMuaXRlcmF0b3IoKTsKLSAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgewotICAgICAg
ICBpZiAoaXRlci5uZXh0KCkubGlzdGVuZXIgPT0gbGlzdGVuZXIpIHsKLSAgICAgICAgICBpdGVy
LnJlbW92ZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gVmlkZW9S
ZW5kZXJlci5DYWxsYmFja3MgaW50ZXJmYWNlLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
cmVuZGVyRnJhbWUoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICBzeW5jaHJv
bml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAgICArK2ZyYW1lc1JlY2VpdmVkOwotICAgIH0K
LSAgICBmaW5hbCBib29sZWFuIGRyb3BPbGRGcmFtZTsKLSAgICBzeW5jaHJvbml6ZWQgKGhhbmRs
ZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFuZGxlciA9PSBudWxsKSB7Ci0gICAg
ICAgIGxvZ0QoIkRyb3BwaW5nIGZyYW1lIC0gTm90IGluaXRpYWxpemVkIG9yIGFscmVhZHkgcmVs
ZWFzZWQuIik7Ci0gICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgLy8gQ2hlY2sgaWYgZnBzIHJlZHVjdGlv
biBpcyBhY3RpdmUuCi0gICAgICBzeW5jaHJvbml6ZWQgKGZwc1JlZHVjdGlvbkxvY2spIHsKLSAg
ICAgICAgaWYgKG1pblJlbmRlclBlcmlvZE5zID4gMCkgewotICAgICAgICAgIGZpbmFsIGxvbmcg
Y3VycmVudFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgICAgIGlmIChjdXJyZW50
VGltZU5zIDwgbmV4dEZyYW1lVGltZU5zKSB7Ci0gICAgICAgICAgICBsb2dEKCJEcm9wcGluZyBm
cmFtZSAtIGZwcyByZWR1Y3Rpb24gaXMgYWN0aXZlLiIpOwotICAgICAgICAgICAgVmlkZW9SZW5k
ZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBuZXh0RnJhbWVUaW1lTnMgKz0gbWluUmVuZGVyUGVyaW9kTnM7Ci0g
ICAgICAgICAgLy8gVGhlIHRpbWUgZm9yIHRoZSBuZXh0IGZyYW1lIHNob3VsZCBhbHdheXMgYmUg
aW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgICBuZXh0RnJhbWVUaW1lTnMgPSBNYXRoLm1heChuZXh0
RnJhbWVUaW1lTnMsIGN1cnJlbnRUaW1lTnMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBz
eW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICBkcm9wT2xkRnJhbWUgPSAocGVuZGlu
Z0ZyYW1lICE9IG51bGwpOwotICAgICAgICBpZiAoZHJvcE9sZEZyYW1lKSB7Ci0gICAgICAgICAg
VmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUocGVuZGluZ0ZyYW1lKTsKLSAgICAgICAgfQot
ICAgICAgICBwZW5kaW5nRnJhbWUgPSBmcmFtZTsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFuZGxl
ci5wb3N0KHJlbmRlckZyYW1lUnVubmFibGUpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoZHJv
cE9sZEZyYW1lKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHN0YXRpc3RpY3NMb2NrKSB7Ci0gICAg
ICAgICsrZnJhbWVzRHJvcHBlZDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICog
UmVsZWFzZSBFR0wgc3VyZmFjZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHVudGlsIHRoZSBF
R0wgc3VyZmFjZSBpcyByZWxlYXNlZC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHJlbGVhc2VFZ2xT
dXJmYWNlKGZpbmFsIFJ1bm5hYmxlIGNvbXBsZXRpb25DYWxsYmFjaykgewotICAgIC8vIEVuc3Vy
ZSB0aGF0IHRoZSByZW5kZXIgdGhyZWFkIGlzIG5vIGxvbmdlciB0b3VjaGluZyB0aGUgU3VyZmFj
ZSBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhpcwotICAgIC8vIGZ1bmN0aW9uLgotICAgIGVnbFN1
cmZhY2VDcmVhdGlvblJ1bm5hYmxlLnNldFN1cmZhY2UobnVsbCAvKiBzdXJmYWNlICovKTsKLSAg
ICBzeW5jaHJvbml6ZWQgKGhhbmRsZXJMb2NrKSB7Ci0gICAgICBpZiAocmVuZGVyVGhyZWFkSGFu
ZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIHJlbmRlclRocmVhZEhhbmRsZXIucmVtb3ZlQ2FsbGJh
Y2tzKGVnbFN1cmZhY2VDcmVhdGlvblJ1bm5hYmxlKTsKLSAgICAgICAgcmVuZGVyVGhyZWFkSGFu
ZGxlci5wb3N0QXRGcm9udE9mUXVldWUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVy
cmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIGlmIChlZ2xC
YXNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgZWdsQmFzZS5kZXRhY2hDdXJyZW50KCk7Ci0g
ICAgICAgICAgICAgIGVnbEJhc2UucmVsZWFzZVN1cmZhY2UoKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGNvbXBsZXRpb25DYWxsYmFjay5ydW4oKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0pOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotICAgIGNvbXBsZXRpb25DYWxs
YmFjay5ydW4oKTsKLSAgfQotCi0gIC8qKgotICAgKiBOb3RpZnkgdGhhdCB0aGUgc3VyZmFjZSBz
aXplIGhhcyBjaGFuZ2VkLgotICAgKi8KLSAgcHVibGljIHZvaWQgc3VyZmFjZVNpemVDaGFuZ2Vk
KGludCBzdXJmYWNlV2lkdGgsIGludCBzdXJmYWNlSGVpZ2h0KSB7Ci0gICAgbG9nRCgiU3VyZmFj
ZSBzaXplIGNoYW5nZWQ6ICIgKyBzdXJmYWNlV2lkdGggKyAieCIgKyBzdXJmYWNlSGVpZ2h0KTsK
LSAgICBzeW5jaHJvbml6ZWQgKGxheW91dExvY2spIHsKLSAgICAgIHRoaXMuc3VyZmFjZVdpZHRo
ID0gc3VyZmFjZVdpZHRoOwotICAgICAgdGhpcy5zdXJmYWNlSGVpZ2h0ID0gc3VyZmFjZUhlaWdo
dDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUHJpdmF0ZSBoZWxwZXIgZnVuY3Rpb24gdG8g
cG9zdCB0YXNrcyBzYWZlbHkuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcG9zdFRvUmVuZGVyVGhy
ZWFkKFJ1bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgc3luY2hyb25pemVkIChoYW5kbGVyTG9jaykg
ewotICAgICAgaWYgKHJlbmRlclRocmVhZEhhbmRsZXIgIT0gbnVsbCkgewotICAgICAgICByZW5k
ZXJUaHJlYWRIYW5kbGVyLnBvc3QocnVubmFibGUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBjbGVhclN1cmZhY2VPblJlbmRlclRocmVhZCgpIHsKLSAgICBpZiAoZWds
QmFzZSAhPSBudWxsICYmIGVnbEJhc2UuaGFzU3VyZmFjZSgpKSB7Ci0gICAgICBsb2dEKCJjbGVh
clN1cmZhY2UiKTsKLSAgICAgIEdMRVMyMC5nbENsZWFyQ29sb3IoMCAvKiByZWQgKi8sIDAgLyog
Z3JlZW4gKi8sIDAgLyogYmx1ZSAqLywgMCAvKiBhbHBoYSAqLyk7Ci0gICAgICBHTEVTMjAuZ2xD
bGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgICBlZ2xCYXNlLnN3YXBCdWZm
ZXJzKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFBvc3QgYSB0YXNrIHRvIGNsZWFyIHRo
ZSBUZXh0dXJlVmlldyB0byBhIHRyYW5zcGFyZW50IHVuaWZvcm0gY29sb3IuCi0gICAqLwotICBw
dWJsaWMgdm9pZCBjbGVhckltYWdlKCkgewotICAgIHN5bmNocm9uaXplZCAoaGFuZGxlckxvY2sp
IHsKLSAgICAgIGlmIChyZW5kZXJUaHJlYWRIYW5kbGVyID09IG51bGwpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0QXRGcm9udE9mUXVl
dWUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICAgIGNsZWFyU3VyZmFjZU9uUmVuZGVyVGhyZWFkKCk7Ci0gICAg
ICAgIH0KLSAgICAgIH0pOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBSZW5kZXJzIGFuZCBy
ZWxlYXNlcyB8cGVuZGluZ0ZyYW1lfC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCByZW5kZXJGcmFt
ZU9uUmVuZGVyVGhyZWFkKCkgewotICAgIC8vIEZldGNoIGFuZCByZW5kZXIgfHBlbmRpbmdGcmFt
ZXwuCi0gICAgZmluYWwgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWU7Ci0gICAgc3luY2hy
b25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgIGlmIChwZW5kaW5nRnJhbWUgPT0gbnVsbCkgewot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBmcmFtZSA9IHBlbmRpbmdGcmFtZTsKLSAg
ICAgIHBlbmRpbmdGcmFtZSA9IG51bGw7Ci0gICAgfQotICAgIGlmIChlZ2xCYXNlID09IG51bGwg
fHwgIWVnbEJhc2UuaGFzU3VyZmFjZSgpKSB7Ci0gICAgICBsb2dEKCJEcm9wcGluZyBmcmFtZSAt
IE5vIHN1cmZhY2UiKTsKLSAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1l
KTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5hbCBsb25nIHN0YXJ0VGltZU5zID0g
U3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgZmluYWwgZmxvYXRbXSB0ZXhNYXRyaXggPQotICAgICAg
ICBSZW5kZXJlckNvbW1vbi5yb3RhdGVUZXh0dXJlTWF0cml4KGZyYW1lLnNhbXBsaW5nTWF0cml4
LCBmcmFtZS5yb3RhdGlvbkRlZ3JlZSk7Ci0gICAgZmluYWwgZmxvYXRbXSBkcmF3TWF0cml4Owot
Ci0gICAgLy8gQWZ0ZXIgYSBzdXJmYWNlIHNpemUgY2hhbmdlLCB0aGUgRUdMU3VyZmFjZSBtaWdo
dCBzdGlsbCBoYXZlIGEgYnVmZmVyIG9mIHRoZSBvbGQgc2l6ZSBpbiB0aGUKLSAgICAvLyBwaXBl
bGluZS4gUXVlcnlpbmcgdGhlIEVHTFN1cmZhY2Ugd2lsbCBzaG93IGlmIHRoZSB1bmRlcmx5aW5n
IGJ1ZmZlciBkaW1lbnNpb25zIGhhdmVuJ3QgeWV0Ci0gICAgLy8gY2hhbmdlZC4gU3VjaCBhIGJ1
ZmZlciB3aWxsIGJlIHJlbmRlcmVkIGluY29ycmVjdGx5LCBzbyBmbHVzaCBpdCB3aXRoIGEgYmxh
Y2sgZnJhbWUuCi0gICAgc3luY2hyb25pemVkIChsYXlvdXRMb2NrKSB7Ci0gICAgICBpbnQgc3Vy
ZmFjZUNsZWFyQ291bnQgPSAwOwotICAgICAgd2hpbGUgKGVnbEJhc2Uuc3VyZmFjZVdpZHRoKCkg
IT0gc3VyZmFjZVdpZHRoIHx8IGVnbEJhc2Uuc3VyZmFjZUhlaWdodCgpICE9IHN1cmZhY2VIZWln
aHQpIHsKLSAgICAgICAgKytzdXJmYWNlQ2xlYXJDb3VudDsKLSAgICAgICAgaWYgKHN1cmZhY2VD
bGVhckNvdW50ID4gTUFYX1NVUkZBQ0VfQ0xFQVJfQ09VTlQpIHsKLSAgICAgICAgICBsb2dEKCJG
YWlsZWQgdG8gZ2V0IHN1cmZhY2Ugb2YgZXhwZWN0ZWQgc2l6ZSAtIGRyb3BwaW5nIGZyYW1lLiIp
OwotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbG9nRCgiU3VyZmFjZSBzaXplIG1pc21h
dGNoIC0gY2xlYXJpbmcgc3VyZmFjZS4gU2l6ZTogIiArIGVnbEJhc2Uuc3VyZmFjZVdpZHRoKCkg
KyAieCIKLSAgICAgICAgICAgICsgZWdsQmFzZS5zdXJmYWNlSGVpZ2h0KCkgKyAiIEV4cGVjdGVk
OiAiICsgc3VyZmFjZVdpZHRoICsgIngiICsgc3VyZmFjZUhlaWdodCk7Ci0gICAgICAgIGNsZWFy
U3VyZmFjZU9uUmVuZGVyVGhyZWFkKCk7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBmbG9hdFtdIGxh
eW91dE1hdHJpeDsKLSAgICAgIGlmIChsYXlvdXRBc3BlY3RSYXRpbyA+IDApIHsKLSAgICAgICAg
bGF5b3V0TWF0cml4ID0gUmVuZGVyZXJDb21tb24uZ2V0TGF5b3V0TWF0cml4KAotICAgICAgICAg
ICAgbWlycm9yLCBmcmFtZS5yb3RhdGVkV2lkdGgoKSAvIChmbG9hdCkgZnJhbWUucm90YXRlZEhl
aWdodCgpLCBsYXlvdXRBc3BlY3RSYXRpbyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBsYXlv
dXRNYXRyaXggPQotICAgICAgICAgICAgbWlycm9yID8gUmVuZGVyZXJDb21tb24uaG9yaXpvbnRh
bEZsaXBNYXRyaXgoKSA6IFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCk7Ci0gICAgICB9
Ci0gICAgICBkcmF3TWF0cml4ID0gUmVuZGVyZXJDb21tb24ubXVsdGlwbHlNYXRyaWNlcyh0ZXhN
YXRyaXgsIGxheW91dE1hdHJpeCk7Ci0gICAgfQotCi0gICAgR0xFUzIwLmdsQ2xlYXJDb2xvcigw
IC8qIHJlZCAqLywgMCAvKiBncmVlbiAqLywgMCAvKiBibHVlICovLCAwIC8qIGFscGhhICovKTsK
LSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgaWYg
KGZyYW1lLnl1dkZyYW1lKSB7Ci0gICAgICAvLyBNYWtlIHN1cmUgWVVWIHRleHR1cmVzIGFyZSBh
bGxvY2F0ZWQuCi0gICAgICBpZiAoeXV2VGV4dHVyZXMgPT0gbnVsbCkgewotICAgICAgICB5dXZU
ZXh0dXJlcyA9IG5ldyBpbnRbM107Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsr
KSB7Ci0gICAgICAgICAgeXV2VGV4dHVyZXNbaV0gPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgeXV2VXBsb2Fk
ZXIudXBsb2FkWXV2RGF0YSgKLSAgICAgICAgICB5dXZUZXh0dXJlcywgZnJhbWUud2lkdGgsIGZy
YW1lLmhlaWdodCwgZnJhbWUueXV2U3RyaWRlcywgZnJhbWUueXV2UGxhbmVzKTsKLSAgICAgIGRy
YXdlci5kcmF3WXV2KHl1dlRleHR1cmVzLCBkcmF3TWF0cml4LCBmcmFtZS5yb3RhdGVkV2lkdGgo
KSwgZnJhbWUucm90YXRlZEhlaWdodCgpLCAwLCAwLAotICAgICAgICAgIHN1cmZhY2VXaWR0aCwg
c3VyZmFjZUhlaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRyYXdlci5kcmF3T2VzKGZyYW1l
LnRleHR1cmVJZCwgZHJhd01hdHJpeCwgZnJhbWUucm90YXRlZFdpZHRoKCksIGZyYW1lLnJvdGF0
ZWRIZWlnaHQoKSwgMCwgMCwKLSAgICAgICAgICBzdXJmYWNlV2lkdGgsIHN1cmZhY2VIZWlnaHQp
OwotICAgIH0KLQotICAgIGZpbmFsIGxvbmcgc3dhcEJ1ZmZlcnNTdGFydFRpbWVOcyA9IFN5c3Rl
bS5uYW5vVGltZSgpOwotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLQotICAgIGZpbmFsIGxv
bmcgY3VycmVudFRpbWVOcyA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgIHN5bmNocm9uaXplZCAo
c3RhdGlzdGljc0xvY2spIHsKLSAgICAgICsrZnJhbWVzUmVuZGVyZWQ7Ci0gICAgICByZW5kZXJU
aW1lTnMgKz0gKGN1cnJlbnRUaW1lTnMgLSBzdGFydFRpbWVOcyk7Ci0gICAgICByZW5kZXJTd2Fw
QnVmZmVyVGltZU5zICs9IChjdXJyZW50VGltZU5zIC0gc3dhcEJ1ZmZlcnNTdGFydFRpbWVOcyk7
Ci0gICAgfQotCi0gICAgbm90aWZ5Q2FsbGJhY2tzKGZyYW1lLCB0ZXhNYXRyaXgpOwotICAgIFZp
ZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBub3RpZnlDYWxsYmFja3MoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUsIGZsb2F0W10g
dGV4TWF0cml4KSB7Ci0gICAgLy8gTWFrZSB0ZW1wb3JhcnkgY29weSBvZiBjYWxsYmFjayBsaXN0
IHRvIGF2b2lkIENvbmN1cnJlbnRNb2RpZmljYXRpb25FeGNlcHRpb24sIGluIGNhc2UKLSAgICAv
LyBjYWxsYmFja3MgY2FsbCBhZGRGcmFtZWxpc3RlbmVyIG9yIHJlbW92ZUZyYW1lTGlzdGVuZXIu
Ci0gICAgZmluYWwgQXJyYXlMaXN0PFNjYWxlQW5kRnJhbWVMaXN0ZW5lcj4gdG1wTGlzdDsKLSAg
ICBzeW5jaHJvbml6ZWQgKGZyYW1lTGlzdGVuZXJMb2NrKSB7Ci0gICAgICBpZiAoZnJhbWVMaXN0
ZW5lcnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgICB0bXBMaXN0ID0gbmV3IEFy
cmF5TGlzdDw+KGZyYW1lTGlzdGVuZXJzKTsKLSAgICAgIGZyYW1lTGlzdGVuZXJzLmNsZWFyKCk7
Ci0gICAgfQotCi0gICAgZmluYWwgZmxvYXRbXSBiaXRtYXBNYXRyaXggPSBSZW5kZXJlckNvbW1v
bi5tdWx0aXBseU1hdHJpY2VzKAotICAgICAgICBSZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJp
Y2VzKHRleE1hdHJpeCwKLSAgICAgICAgICAgIG1pcnJvciA/IFJlbmRlcmVyQ29tbW9uLmhvcml6
b250YWxGbGlwTWF0cml4KCkgOiBSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpKSwKLSAg
ICAgICAgUmVuZGVyZXJDb21tb24udmVydGljYWxGbGlwTWF0cml4KCkpOwotCi0gICAgZm9yIChT
Y2FsZUFuZEZyYW1lTGlzdGVuZXIgc2NhbGVBbmRMaXN0ZW5lciA6IHRtcExpc3QpIHsKLSAgICAg
IGZpbmFsIGludCBzY2FsZWRXaWR0aCA9IChpbnQpIChzY2FsZUFuZExpc3RlbmVyLnNjYWxlICog
ZnJhbWUucm90YXRlZFdpZHRoKCkpOwotICAgICAgZmluYWwgaW50IHNjYWxlZEhlaWdodCA9IChp
bnQpIChzY2FsZUFuZExpc3RlbmVyLnNjYWxlICogZnJhbWUucm90YXRlZEhlaWdodCgpKTsKLQot
ICAgICAgaWYgKHNjYWxlZFdpZHRoID09IDAgfHwgc2NhbGVkSGVpZ2h0ID09IDApIHsKLSAgICAg
ICAgc2NhbGVBbmRMaXN0ZW5lci5saXN0ZW5lci5vbkZyYW1lKG51bGwpOwotICAgICAgICBjb250
aW51ZTsKLSAgICAgIH0KLQotICAgICAgaWYgKGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlciA9PSBu
dWxsKSB7Ci0gICAgICAgIGJpdG1hcFRleHR1cmVGcmFtZWJ1ZmZlciA9IG5ldyBHbFRleHR1cmVG
cmFtZUJ1ZmZlcihHTEVTMjAuR0xfUkdCQSk7Ci0gICAgICB9Ci0gICAgICBiaXRtYXBUZXh0dXJl
RnJhbWVidWZmZXIuc2V0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLQotICAgICAg
R0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgYml0bWFwVGV4
dHVyZUZyYW1lYnVmZmVyLmdldEZyYW1lQnVmZmVySWQoKSk7Ci0gICAgICBHTEVTMjAuZ2xGcmFt
ZWJ1ZmZlclRleHR1cmUyRChHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIEdMRVMyMC5HTF9DT0xPUl9B
VFRBQ0hNRU5UMCwKLSAgICAgICAgICBHTEVTMjAuR0xfVEVYVFVSRV8yRCwgYml0bWFwVGV4dHVy
ZUZyYW1lYnVmZmVyLmdldFRleHR1cmVJZCgpLCAwKTsKLQotICAgICAgaWYgKGZyYW1lLnl1dkZy
YW1lKSB7Ci0gICAgICAgIGRyYXdlci5kcmF3WXV2KHl1dlRleHR1cmVzLCBiaXRtYXBNYXRyaXgs
IGZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCksCi0gICAgICAgICAg
ICAwIC8qIHZpZXdwb3J0WCAqLywgMCAvKiB2aWV3cG9ydFkgKi8sIHNjYWxlZFdpZHRoLCBzY2Fs
ZWRIZWlnaHQpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgZHJhd2VyLmRyYXdPZXMoZnJhbWUu
dGV4dHVyZUlkLCBiaXRtYXBNYXRyaXgsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5yb3Rh
dGVkSGVpZ2h0KCksCi0gICAgICAgICAgICAwIC8qIHZpZXdwb3J0WCAqLywgMCAvKiB2aWV3cG9y
dFkgKi8sIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgICAgfQotCi0gICAgICBmaW5h
bCBCeXRlQnVmZmVyIGJpdG1hcEJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qoc2Nh
bGVkV2lkdGggKiBzY2FsZWRIZWlnaHQgKiA0KTsKLSAgICAgIEdMRVMyMC5nbFZpZXdwb3J0KDAs
IDAsIHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgICAgR0xFUzIwLmdsUmVhZFBpeGVs
cygKLSAgICAgICAgICAwLCAwLCBzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0LCBHTEVTMjAuR0xf
UkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIGJpdG1hcEJ1ZmZlcik7Ci0KLSAgICAgIEdM
RVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwotICAgICAg
R2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJFZ2xSZW5kZXJlci5ub3RpZnlDYWxsYmFja3MiKTsK
LQotICAgICAgZmluYWwgQml0bWFwIGJpdG1hcCA9IEJpdG1hcC5jcmVhdGVCaXRtYXAoc2NhbGVk
V2lkdGgsIHNjYWxlZEhlaWdodCwgQml0bWFwLkNvbmZpZy5BUkdCXzg4ODgpOwotICAgICAgYml0
bWFwLmNvcHlQaXhlbHNGcm9tQnVmZmVyKGJpdG1hcEJ1ZmZlcik7Ci0gICAgICBzY2FsZUFuZExp
c3RlbmVyLmxpc3RlbmVyLm9uRnJhbWUoYml0bWFwKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRl
IFN0cmluZyBhdmVyYWdlVGltZUFzU3RyaW5nKGxvbmcgc3VtVGltZU5zLCBpbnQgY291bnQpIHsK
LSAgICByZXR1cm4gKGNvdW50IDw9IDApID8gIk5BIiA6IFRpbWVVbml0Lk5BTk9TRUNPTkRTLnRv
TWljcm9zKHN1bVRpbWVOcyAvIGNvdW50KSArICIgzrxzIjsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBsb2dTdGF0aXN0aWNzKCkgewotICAgIGZpbmFsIGxvbmcgY3VycmVudFRpbWVOcyA9IFN5c3Rl
bS5uYW5vVGltZSgpOwotICAgIHN5bmNocm9uaXplZCAoc3RhdGlzdGljc0xvY2spIHsKLSAgICAg
IGZpbmFsIGxvbmcgZWxhcHNlZFRpbWVOcyA9IGN1cnJlbnRUaW1lTnMgLSBzdGF0aXN0aWNzU3Rh
cnRUaW1lTnM7Ci0gICAgICBpZiAoZWxhcHNlZFRpbWVOcyA8PSAwKSB7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgIH0KLSAgICAgIGZpbmFsIGZsb2F0IHJlbmRlckZwcyA9IGZyYW1lc1JlbmRlcmVk
ICogVGltZVVuaXQuU0VDT05EUy50b05hbm9zKDEpIC8gKGZsb2F0KSBlbGFwc2VkVGltZU5zOwot
ICAgICAgbG9nRCgiRHVyYXRpb246ICIgKyBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhl
bGFwc2VkVGltZU5zKSArICIgbXMuIgotICAgICAgICAgICsgIiBGcmFtZXMgcmVjZWl2ZWQ6ICIg
KyBmcmFtZXNSZWNlaXZlZCArICIuIgotICAgICAgICAgICsgIiBEcm9wcGVkOiAiICsgZnJhbWVz
RHJvcHBlZCArICIuIgotICAgICAgICAgICsgIiBSZW5kZXJlZDogIiArIGZyYW1lc1JlbmRlcmVk
ICsgIi4iCi0gICAgICAgICAgKyAiIFJlbmRlciBmcHM6ICIgKyBTdHJpbmcuZm9ybWF0KCIlLjFm
IiwgcmVuZGVyRnBzKSArICIuIgotICAgICAgICAgICsgIiBBdmVyYWdlIHJlbmRlciB0aW1lOiAi
ICsgYXZlcmFnZVRpbWVBc1N0cmluZyhyZW5kZXJUaW1lTnMsIGZyYW1lc1JlbmRlcmVkKSArICIu
IgotICAgICAgICAgICsgIiBBdmVyYWdlIHN3YXBCdWZmZXIgdGltZTogIgotICAgICAgICAgICsg
YXZlcmFnZVRpbWVBc1N0cmluZyhyZW5kZXJTd2FwQnVmZmVyVGltZU5zLCBmcmFtZXNSZW5kZXJl
ZCkgKyAiLiIpOwotICAgICAgcmVzZXRTdGF0aXN0aWNzKGN1cnJlbnRUaW1lTnMpOwotICAgIH0K
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dEKFN0cmluZyBzdHJpbmcpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCBuYW1lICsgc3RyaW5nKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9G
aWxlVmlkZW9DYXB0dXJlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvRmls
ZVZpZGVvQ2FwdHVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9GaWxlVmlkZW9DYXB0dXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjExICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci0KLWlt
cG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0aWwuVGlt
ZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKLWltcG9ydCBqYXZhLmlvLlJhbmRvbUFj
Y2Vzc0ZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIEZp
bGVWaWRlb0NhcHR1cmVyIGltcGxlbWVudHMgVmlkZW9DYXB0dXJlciB7Ci0gIHByaXZhdGUgaW50
ZXJmYWNlIFZpZGVvUmVhZGVyIHsKLSAgICBpbnQgZ2V0RnJhbWVXaWR0aCgpOwotICAgIGludCBn
ZXRGcmFtZUhlaWdodCgpOwotICAgIGJ5dGVbXSBnZXROZXh0RnJhbWUoKTsKLSAgICB2b2lkIGNs
b3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCB2aWRlbyBkYXRhIGZyb20gZmlsZSBmb3Ig
dGhlIC55NG0gY29udGFpbmVyLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVmlkZW9S
ZWFkZXJZNE0gaW1wbGVtZW50cyBWaWRlb1JlYWRlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBzdGF0
aWMgU3RyaW5nIFRBRyA9ICJWaWRlb1JlYWRlclk0TSI7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQg
ZnJhbWVXaWR0aDsKLSAgICBwcml2YXRlIGZpbmFsIGludCBmcmFtZUhlaWdodDsKLSAgICBwcml2
YXRlIGZpbmFsIGludCBmcmFtZVNpemU7Ci0KLSAgICAvLyBGaXJzdCBjaGFyIGFmdGVyIGhlYWRl
cgotICAgIHByaXZhdGUgZmluYWwgbG9uZyB2aWRlb1N0YXJ0OwotCi0gICAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFk0TV9GUkFNRV9ERUxJTUVURVIgPSAiRlJBTUUiOwotCi0gICAgcHJp
dmF0ZSBmaW5hbCBSYW5kb21BY2Nlc3NGaWxlIG1lZGlhRmlsZVN0cmVhbTsKLQotICAgIHB1Ymxp
YyBpbnQgZ2V0RnJhbWVXaWR0aCgpIHsKLSAgICAgIHJldHVybiBmcmFtZVdpZHRoOwotICAgIH0K
LQotICAgIHB1YmxpYyBpbnQgZ2V0RnJhbWVIZWlnaHQoKSB7Ci0gICAgICByZXR1cm4gZnJhbWVI
ZWlnaHQ7Ci0gICAgfQotCi0gICAgcHVibGljIFZpZGVvUmVhZGVyWTRNKFN0cmluZyBmaWxlKSB0
aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgbWVkaWFGaWxlU3RyZWFtID0gbmV3IFJhbmRvbUFj
Y2Vzc0ZpbGUoZmlsZSwgInIiKTsKLSAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBT
dHJpbmdCdWlsZGVyKCk7Ci0gICAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGludCBjID0gbWVkaWFG
aWxlU3RyZWFtLnJlYWQoKTsKLSAgICAgICAgaWYgKGMgPT0gLTEpIHsKLSAgICAgICAgICAvLyBF
bmQgb2YgZmlsZSByZWFjaGVkLgotICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KCJGb3VuZCBlbmQgb2YgZmlsZSBiZWZvcmUgZW5kIG9mIGhlYWRlciBmb3IgZmlsZTogIiArIGZp
bGUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjID09ICdcbicpIHsKLSAgICAgICAgICAvLyBF
bmQgb2YgaGVhZGVyIGZvdW5kLgotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKChjaGFyKSBjKTsKLSAgICAgIH0KLSAgICAgIHZpZGVvU3RhcnQgPSBt
ZWRpYUZpbGVTdHJlYW0uZ2V0RmlsZVBvaW50ZXIoKTsKLSAgICAgIFN0cmluZyBoZWFkZXIgPSBi
dWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICBTdHJpbmdbXSBoZWFkZXJUb2tlbnMgPSBoZWFkZXIu
c3BsaXQoIlsgXSIpOwotICAgICAgaW50IHcgPSAwOwotICAgICAgaW50IGggPSAwOwotICAgICAg
U3RyaW5nIGNvbG9yU3BhY2UgPSAiIjsKLSAgICAgIGZvciAoU3RyaW5nIHRvayA6IGhlYWRlclRv
a2VucykgewotICAgICAgICBjaGFyIGMgPSB0b2suY2hhckF0KDApOwotICAgICAgICBzd2l0Y2gg
KGMpIHsKLSAgICAgICAgICBjYXNlICdXJzoKLSAgICAgICAgICAgIHcgPSBJbnRlZ2VyLnBhcnNl
SW50KHRvay5zdWJzdHJpbmcoMSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSAnSCc6Ci0gICAgICAgICAgICBoID0gSW50ZWdlci5wYXJzZUludCh0b2suc3Vic3RyaW5nKDEp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgJ0MnOgotICAgICAgICAgICAg
Y29sb3JTcGFjZSA9IHRvay5zdWJzdHJpbmcoMSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNvbG9yIHNwYWNlOiAiICsgY29s
b3JTcGFjZSk7Ci0gICAgICBpZiAoIWNvbG9yU3BhY2UuZXF1YWxzKCI0MjAiKSAmJiAhY29sb3JT
cGFjZS5lcXVhbHMoIjQyMG1wZWcyIikpIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1
bWVudEV4Y2VwdGlvbigKLSAgICAgICAgICAgICJEb2VzIG5vdCBzdXBwb3J0IGFueSBvdGhlciBj
b2xvciBzcGFjZSB0aGFuIEk0MjAgb3IgSTQyMG1wZWcyIik7Ci0gICAgICB9Ci0gICAgICBpZiAo
KHcgJSAyKSA9PSAxIHx8IChoICUgMikgPT0gMSkgewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdh
bEFyZ3VtZW50RXhjZXB0aW9uKCJEb2VzIG5vdCBzdXBwb3J0IG9kZCB3aWR0aCBvciBoZWlnaHQi
KTsKLSAgICAgIH0KLSAgICAgIGZyYW1lV2lkdGggPSB3OwotICAgICAgZnJhbWVIZWlnaHQgPSBo
OwotICAgICAgZnJhbWVTaXplID0gdyAqIGggKiAzIC8gMjsKLSAgICAgIExvZ2dpbmcuZChUQUcs
ICJmcmFtZSBkaW06ICgiICsgdyArICIsICIgKyBoICsgIikgZnJhbWVTaXplOiAiICsgZnJhbWVT
aXplKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYnl0ZVtdIGdldE5leHRGcmFtZSgpIHsKLSAgICAg
IGJ5dGVbXSBmcmFtZSA9IG5ldyBieXRlW2ZyYW1lU2l6ZV07Ci0gICAgICB0cnkgewotICAgICAg
ICBieXRlW10gZnJhbWVEZWxpbSA9IG5ldyBieXRlW1k0TV9GUkFNRV9ERUxJTUVURVIubGVuZ3Ro
KCkgKyAxXTsKLSAgICAgICAgaWYgKG1lZGlhRmlsZVN0cmVhbS5yZWFkKGZyYW1lRGVsaW0pIDwg
ZnJhbWVEZWxpbS5sZW5ndGgpIHsKLSAgICAgICAgICAvLyBXZSByZWFjaCBlbmQgb2YgZmlsZSwg
bG9vcAotICAgICAgICAgIG1lZGlhRmlsZVN0cmVhbS5zZWVrKHZpZGVvU3RhcnQpOwotICAgICAg
ICAgIGlmIChtZWRpYUZpbGVTdHJlYW0ucmVhZChmcmFtZURlbGltKSA8IGZyYW1lRGVsaW0ubGVu
Z3RoKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiRXJyb3IgbG9v
cGluZyB2aWRlbyIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgZnJh
bWVEZWxpbVN0ciA9IG5ldyBTdHJpbmcoZnJhbWVEZWxpbSk7Ci0gICAgICAgIGlmICghZnJhbWVE
ZWxpbVN0ci5lcXVhbHMoWTRNX0ZSQU1FX0RFTElNRVRFUiArICJcbiIpKSB7Ci0gICAgICAgICAg
dGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICJGcmFtZXMgc2hvdWxk
IGJlIGRlbGltaXRlZCBieSBGUkFNRSBwbHVzIG5ld2xpbmUsIGZvdW5kIGRlbGltdGVyIHdhczog
JyIKLSAgICAgICAgICAgICAgKyBmcmFtZURlbGltU3RyICsgIiciKTsKLSAgICAgICAgfQotICAg
ICAgICBtZWRpYUZpbGVTdHJlYW0ucmVhZEZ1bGx5KGZyYW1lKTsKLSAgICAgICAgYnl0ZVtdIG52
MjFGcmFtZSA9IG5ldyBieXRlW2ZyYW1lU2l6ZV07Ci0gICAgICAgIG5hdGl2ZUk0MjBUb05WMjEo
ZnJhbWUsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCBudjIxRnJhbWUpOwotICAgICAgICByZXR1
cm4gbnYyMUZyYW1lOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgdm9pZCBjbG9zZSgpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIG1lZGlhRmlsZVN0cmVhbS5j
bG9zZSgpOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5n
LmUoVEFHLCAiUHJvYmxlbSBjbG9zaW5nIGZpbGUiLCBlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkZpbGVWaWRlb0NhcHR1cmVy
IjsKLSAgcHJpdmF0ZSBmaW5hbCBWaWRlb1JlYWRlciB2aWRlb1JlYWRlcjsKLSAgcHJpdmF0ZSBD
YXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXI7Ci0gIHByaXZhdGUgZmluYWwgVGltZXIg
dGltZXIgPSBuZXcgVGltZXIoKTsKLQotICBwcml2YXRlIGZpbmFsIFRpbWVyVGFzayB0aWNrVGFz
ayA9IG5ldyBUaW1lclRhc2soKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgdGljaygpOwotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIGludCBnZXRGcmFt
ZVdpZHRoKCkgewotICAgIHJldHVybiB2aWRlb1JlYWRlci5nZXRGcmFtZVdpZHRoKCk7Ci0gIH0K
LQotICBwcml2YXRlIGludCBnZXRGcmFtZUhlaWdodCgpIHsKLSAgICByZXR1cm4gdmlkZW9SZWFk
ZXIuZ2V0RnJhbWVIZWlnaHQoKTsKLSAgfQotCi0gIHB1YmxpYyBGaWxlVmlkZW9DYXB0dXJlcihT
dHJpbmcgaW5wdXRGaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIHRyeSB7Ci0gICAgICB2
aWRlb1JlYWRlciA9IG5ldyBWaWRlb1JlYWRlclk0TShpbnB1dEZpbGUpOwotICAgIH0gY2F0Y2gg
KElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDb3VsZCBub3Qgb3BlbiB2
aWRlbyBmaWxlOiAiICsgaW5wdXRGaWxlKTsKLSAgICAgIHRocm93IGU7Ci0gICAgfQotICB9Ci0K
LSAgcHJpdmF0ZSBieXRlW10gZ2V0TmV4dEZyYW1lKCkgewotICAgIHJldHVybiB2aWRlb1JlYWRl
ci5nZXROZXh0RnJhbWUoKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHRpY2soKSB7Ci0gICAgZmlu
YWwgbG9uZyBjYXB0dXJlVGltZU5zID0gVGltZVVuaXQuTUlMTElTRUNPTkRTLnRvTmFub3MoU3lz
dGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwotCi0gICAgYnl0ZVtdIGZyYW1lRGF0YSA9IGdl
dE5leHRGcmFtZSgpOwotICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25CeXRlQnVmZmVyRnJhbWVDYXB0
dXJlZCgKLSAgICAgICAgZnJhbWVEYXRhLCBnZXRGcmFtZVdpZHRoKCksIGdldEZyYW1lSGVpZ2h0
KCksIDAsIGNhcHR1cmVUaW1lTnMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IGluaXRpYWxpemUoU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIsIENv
bnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJl
ck9ic2VydmVyKSB7Ci0gICAgdGhpcy5jYXB0dXJlck9ic2VydmVyID0gY2FwdHVyZXJPYnNlcnZl
cjsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdGFydENhcHR1cmUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgdGltZXIuc2NoZWR1bGUodGlj
a1Rhc2ssIDAsIDEwMDAgLyBmcmFtZXJhdGUpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIHN0b3BDYXB0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICB0
aW1lci5jYW5jZWwoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjaGFuZ2VD
YXB0dXJlRm9ybWF0KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAg
IC8vIEVtcHR5IG9uIHB1cnBvc2UKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBk
aXNwb3NlKCkgewotICAgIHZpZGVvUmVhZGVyLmNsb3NlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGJvb2xlYW4gaXNTY3JlZW5jYXN0KCkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlSTQyMFRvTlYyMShieXRlW10g
c3JjLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGJ5dGVbXSBkc3QpOwotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0dsUmVjdERyYXdlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0dsUmVjdERyYXdlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjEwICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
b3BlbmdsLkdMRVMxMUV4dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQg
amF2YS5uaW8uRmxvYXRCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLklkZW50aXR5SGFzaE1hcDsK
LWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEhlbHBlciBjbGFzcyB0byBkcmF3IGFu
IG9wYXF1ZSBxdWFkIG9uIHRoZSB0YXJnZXQgdmlld3BvcnQgbG9jYXRpb24uIFJvdGF0aW9uLCBt
aXJyb3IsIGFuZAotICogY3JvcHBpbmcgaXMgc3BlY2lmaWVkIHVzaW5nIGEgNHg0IHRleHR1cmUg
Y29vcmRpbmF0ZSB0cmFuc2Zvcm0gbWF0cml4LiBUaGUgZnJhbWUgaW5wdXQgY2FuIGVpdGhlcgot
ICogYmUgYW4gT0VTIHRleHR1cmUgb3IgWVVWIHRleHR1cmVzIGluIEk0MjAgZm9ybWF0LiBUaGUg
R0wgc3RhdGUgbXVzdCBiZSBwcmVzZXJ2ZWQgYmV0d2VlbiBkcmF3Ci0gKiBjYWxscywgdGhpcyBp
cyBpbnRlbnRpb25hbCB0byBtYXhpbWl6ZSBwZXJmb3JtYW5jZS4gVGhlIGZ1bmN0aW9uIHJlbGVh
c2UoKSBtdXN0IGJlIGNhbGxlZAotICogbWFudWFsbHkgdG8gZnJlZSB0aGUgcmVzb3VyY2VzIGhl
bGQgYnkgdGhpcyBvYmplY3QuCi0gKi8KLXB1YmxpYyBjbGFzcyBHbFJlY3REcmF3ZXIgaW1wbGVt
ZW50cyBSZW5kZXJlckNvbW1vbi5HbERyYXdlciB7Ci0gIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAg
Ly8gU2ltcGxlIHZlcnRleCBzaGFkZXIsIHVzZWQgZm9yIGJvdGggWVVWIGFuZCBPRVMuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWRVJURVhfU0hBREVSX1NUUklORyA9Ci0gICAgICAg
ICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAiYXR0cmlidXRlIHZlYzQgaW5f
cG9zO1xuIgotICAgICAgKyAiYXR0cmlidXRlIHZlYzQgaW5fdGM7XG4iCi0gICAgICArICJcbiIK
LSAgICAgICsgInVuaWZvcm0gbWF0NCB0ZXhNYXRyaXg7XG4iCi0gICAgICArICJcbiIKLSAgICAg
ICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICsgIiAgICBnbF9Qb3NpdGlvbiA9IGluX3Bvcztc
biIKLSAgICAgICsgIiAgICBpbnRlcnBfdGMgPSAodGV4TWF0cml4ICogaW5fdGMpLnh5O1xuIgot
ICAgICAgKyAifVxuIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWVVWX0ZSQUdN
RU5UX1NIQURFUl9TVFJJTkcgPQotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4i
Ci0gICAgICArICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAiXG4iCi0gICAg
ICArICJ1bmlmb3JtIHNhbXBsZXIyRCB5X3RleDtcbiIKLSAgICAgICsgInVuaWZvcm0gc2FtcGxl
cjJEIHVfdGV4O1xuIgotICAgICAgKyAidW5pZm9ybSBzYW1wbGVyMkQgdl90ZXg7XG4iCi0gICAg
ICArICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgIC8vIENTQyBhY2NvcmRp
bmcgdG8gaHR0cDovL3d3dy5mb3VyY2Mub3JnL2ZjY3l2cmdiLnBocAotICAgICAgKyAiICBmbG9h
dCB5ID0gdGV4dHVyZTJEKHlfdGV4LCBpbnRlcnBfdGMpLnI7XG4iCi0gICAgICArICIgIGZsb2F0
IHUgPSB0ZXh0dXJlMkQodV90ZXgsIGludGVycF90YykuciAtIDAuNTtcbiIKLSAgICAgICsgIiAg
ZmxvYXQgdiA9IHRleHR1cmUyRCh2X3RleCwgaW50ZXJwX3RjKS5yIC0gMC41O1xuIgotICAgICAg
KyAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHkgKyAxLjQwMyAqIHYsICIKLSAgICAgICsgIiAgICAg
ICAgICAgICAgICAgICAgICB5IC0gMC4zNDQgKiB1IC0gMC43MTQgKiB2LCAiCi0gICAgICArICIg
ICAgICAgICAgICAgICAgICAgICAgeSArIDEuNzcgKiB1LCAxKTtcbiIKLSAgICAgICsgIn1cbiI7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJHQl9GUkFHTUVOVF9TSEFERVJfU1RS
SU5HID0KLSAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIgotICAgICAgKyAidmFy
eWluZyB2ZWMyIGludGVycF90YztcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBz
YW1wbGVyMkQgcmdiX3RleDtcbiIKLSAgICAgICsgIlxuIgotICAgICAgKyAidm9pZCBtYWluKCkg
e1xuIgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQocmdiX3RleCwgaW50ZXJw
X3RjKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IE9FU19GUkFHTUVOVF9TSEFERVJfU1RSSU5HID0KLSAgICAgICAgIiNleHRlbnNpb24gR0xfT0VT
X0VHTF9pbWFnZV9leHRlcm5hbCA6IHJlcXVpcmVcbiIKLSAgICAgICsgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0O1xuIgotICAgICAgKyAidmFyeWluZyB2ZWMyIGludGVycF90YztcbiIKLSAgICAg
ICsgIlxuIgotICAgICAgKyAidW5pZm9ybSBzYW1wbGVyRXh0ZXJuYWxPRVMgb2VzX3RleDtcbiIK
LSAgICAgICsgIlxuIgotICAgICAgKyAidm9pZCBtYWluKCkge1xuIgotICAgICAgKyAiICBnbF9G
cmFnQ29sb3IgPSB0ZXh0dXJlMkQob2VzX3RleCwgaW50ZXJwX3RjKTtcbiIKLSAgICAgICsgIn1c
biI7Ci0gIC8vIGNsYW5nLWZvcm1hdCBvbgotCi0gIC8vIFZlcnRleCBjb29yZGluYXRlcyBpbiBO
b3JtYWxpemVkIERldmljZSBDb29yZGluYXRlcywgaS5lLiAoLTEsIC0xKSBpcyBib3R0b20tbGVm
dCBhbmQgKDEsIDEpIGlzCi0gIC8vIHRvcC1yaWdodC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
RmxvYXRCdWZmZXIgRlVMTF9SRUNUQU5HTEVfQlVGID0gR2xVdGlsLmNyZWF0ZUZsb2F0QnVmZmVy
KG5ldyBmbG9hdFtdIHsKLSAgICAgIC0xLjBmLCAtMS4wZiwgLy8gQm90dG9tIGxlZnQuCi0gICAg
ICAxLjBmLCAtMS4wZiwgLy8gQm90dG9tIHJpZ2h0LgotICAgICAgLTEuMGYsIDEuMGYsIC8vIFRv
cCBsZWZ0LgotICAgICAgMS4wZiwgMS4wZiwgLy8gVG9wIHJpZ2h0LgotICB9KTsKLQotICAvLyBU
ZXh0dXJlIGNvb3JkaW5hdGVzIC0gKDAsIDApIGlzIGJvdHRvbS1sZWZ0IGFuZCAoMSwgMSkgaXMg
dG9wLXJpZ2h0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBGbG9hdEJ1ZmZlciBGVUxMX1JFQ1RB
TkdMRV9URVhfQlVGID0gR2xVdGlsLmNyZWF0ZUZsb2F0QnVmZmVyKG5ldyBmbG9hdFtdIHsKLSAg
ICAgIDAuMGYsIDAuMGYsIC8vIEJvdHRvbSBsZWZ0LgotICAgICAgMS4wZiwgMC4wZiwgLy8gQm90
dG9tIHJpZ2h0LgotICAgICAgMC4wZiwgMS4wZiwgLy8gVG9wIGxlZnQuCi0gICAgICAxLjBmLCAx
LjBmIC8vIFRvcCByaWdodC4KLSAgfSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgU2hhZGVy
IHsKLSAgICBwdWJsaWMgZmluYWwgR2xTaGFkZXIgZ2xTaGFkZXI7Ci0gICAgcHVibGljIGZpbmFs
IGludCB0ZXhNYXRyaXhMb2NhdGlvbjsKLQotICAgIHB1YmxpYyBTaGFkZXIoU3RyaW5nIGZyYWdt
ZW50U2hhZGVyKSB7Ci0gICAgICB0aGlzLmdsU2hhZGVyID0gbmV3IEdsU2hhZGVyKFZFUlRFWF9T
SEFERVJfU1RSSU5HLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgICB0aGlzLnRleE1hdHJpeExvY2F0
aW9uID0gZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ0ZXhNYXRyaXgiKTsKLSAgICB9Ci0g
IH0KLQotICAvLyBUaGUga2V5cyBhcmUgb25lIG9mIHRoZSBmcmFnbWVudHMgc2hhZGVycyBhYm92
ZS4KLSAgcHJpdmF0ZSBmaW5hbCBNYXA8U3RyaW5nLCBTaGFkZXI+IHNoYWRlcnMgPSBuZXcgSWRl
bnRpdHlIYXNoTWFwPFN0cmluZywgU2hhZGVyPigpOwotCi0gIC8qKgotICAgKiBEcmF3IGFuIE9F
UyB0ZXh0dXJlIGZyYW1lIHdpdGggc3BlY2lmaWVkIHRleHR1cmUgdHJhbnNmb3JtYXRpb24gbWF0
cml4LiBSZXF1aXJlZCByZXNvdXJjZXMgYXJlCi0gICAqIGFsbG9jYXRlZCBhdCB0aGUgZmlyc3Qg
Y2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IGRyYXdPZXMoaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRyaXgsIGludCBmcmFtZVdp
ZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAgICBpbnQgdmlld3BvcnRYLCBpbnQgdmlld3BvcnRZ
LCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7Ci0gICAgcHJlcGFyZVNo
YWRlcihPRVNfRlJBR01FTlRfU0hBREVSX1NUUklORywgdGV4TWF0cml4KTsKLSAgICBHTEVTMjAu
Z2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgLy8gdXBkYXRlVGV4SW1h
Z2UoKSBtYXkgYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQgaW4gYW5vdGhlciBFR0wgY29u
dGV4dCwgc28gd2UgbmVlZCB0bwotICAgIC8vIGJpbmQvdW5iaW5kIHRoZSB0ZXh0dXJlIGluIGVh
Y2ggZHJhdyBjYWxsIHNvIHRoYXQgR0xFUyB1bmRlcnN0YWRzIGl0J3MgYSBuZXcgdGV4dHVyZS4K
LSAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9P
RVMsIG9lc1RleHR1cmVJZCk7Ci0gICAgZHJhd1JlY3RhbmdsZSh2aWV3cG9ydFgsIHZpZXdwb3J0
WSwgdmlld3BvcnRXaWR0aCwgdmlld3BvcnRIZWlnaHQpOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0
dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUywgMCk7Ci0gIH0KLQotICAvKioK
LSAgICogRHJhdyBhIFJHQihBKSB0ZXh0dXJlIGZyYW1lIHdpdGggc3BlY2lmaWVkIHRleHR1cmUg
dHJhbnNmb3JtYXRpb24gbWF0cml4LiBSZXF1aXJlZCByZXNvdXJjZXMKLSAgICogYXJlIGFsbG9j
YXRlZCBhdCB0aGUgZmlyc3QgY2FsbCB0byB0aGlzIGZ1bmN0aW9uLgotICAgKi8KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIGRyYXdSZ2IoaW50IHRleHR1cmVJZCwgZmxvYXRbXSB0ZXhNYXRy
aXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAgICBpbnQgdmlld3BvcnRY
LCBpbnQgdmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0KSB7
Ci0gICAgcHJlcGFyZVNoYWRlcihSR0JfRlJBR01FTlRfU0hBREVSX1NUUklORywgdGV4TWF0cml4
KTsKLSAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAg
R0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIHRleHR1cmVJZCk7Ci0g
ICAgZHJhd1JlY3RhbmdsZSh2aWV3cG9ydFgsIHZpZXdwb3J0WSwgdmlld3BvcnRXaWR0aCwgdmll
d3BvcnRIZWlnaHQpOwotICAgIC8vIFVuYmluZCB0aGUgdGV4dHVyZSBhcyBhIHByZWNhdXRpb24u
Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICB9
Ci0KLSAgLyoqCi0gICAqIERyYXcgYSBZVVYgZnJhbWUgd2l0aCBzcGVjaWZpZWQgdGV4dHVyZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXguIFJlcXVpcmVkIHJlc291cmNlcyBhcmUKLSAgICogYWxsb2Nh
dGVkIGF0IHRoZSBmaXJzdCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24uCi0gICAqLwotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgZHJhd1l1dihpbnRbXSB5dXZUZXh0dXJlcywgZmxvYXRbXSB0ZXhN
YXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAgICBpbnQgdmlld3Bv
cnRYLCBpbnQgdmlld3BvcnRZLCBpbnQgdmlld3BvcnRXaWR0aCwgaW50IHZpZXdwb3J0SGVpZ2h0
KSB7Ci0gICAgcHJlcGFyZVNoYWRlcihZVVZfRlJBR01FTlRfU0hBREVSX1NUUklORywgdGV4TWF0
cml4KTsKLSAgICAvLyBCaW5kIHRoZSB0ZXh0dXJlcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDM7ICsraSkgewotICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVS
RTAgKyBpKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJE
LCB5dXZUZXh0dXJlc1tpXSk7Ci0gICAgfQotICAgIGRyYXdSZWN0YW5nbGUodmlld3BvcnRYLCB2
aWV3cG9ydFksIHZpZXdwb3J0V2lkdGgsIHZpZXdwb3J0SGVpZ2h0KTsKLSAgICAvLyBVbmJpbmQg
dGhlIHRleHR1cmVzIGFzIGEgcHJlY2F1dGlvbi4uCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAz
OyArK2kpIHsKLSAgICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUw
ICsgaSk7Ci0gICAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwg
MCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRyYXdSZWN0YW5nbGUoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAvLyBEcmF3IHF1YWQuCi0gICAgR0xF
UzIwLmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgR0xFUzIwLmdsRHJhd0Fy
cmF5cyhHTEVTMjAuR0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHByZXBhcmVTaGFkZXIoU3RyaW5nIGZyYWdtZW50U2hhZGVyLCBmbG9hdFtdIHRleE1hdHJp
eCkgewotICAgIGZpbmFsIFNoYWRlciBzaGFkZXI7Ci0gICAgaWYgKHNoYWRlcnMuY29udGFpbnNL
ZXkoZnJhZ21lbnRTaGFkZXIpKSB7Ci0gICAgICBzaGFkZXIgPSBzaGFkZXJzLmdldChmcmFnbWVu
dFNoYWRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIExhenkgYWxsb2NhdGlvbi4KLSAgICAg
IHNoYWRlciA9IG5ldyBTaGFkZXIoZnJhZ21lbnRTaGFkZXIpOwotICAgICAgc2hhZGVycy5wdXQo
ZnJhZ21lbnRTaGFkZXIsIHNoYWRlcik7Ci0gICAgICBzaGFkZXIuZ2xTaGFkZXIudXNlUHJvZ3Jh
bSgpOwotICAgICAgLy8gSW5pdGlhbGl6ZSBmcmFnbWVudCBzaGFkZXIgdW5pZm9ybSB2YWx1ZXMu
Ci0gICAgICBpZiAoZnJhZ21lbnRTaGFkZXIgPT0gWVVWX0ZSQUdNRU5UX1NIQURFUl9TVFJJTkcp
IHsKLSAgICAgICAgR0xFUzIwLmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRlci5nZXRVbmlmb3Jt
TG9jYXRpb24oInlfdGV4IiksIDApOwotICAgICAgICBHTEVTMjAuZ2xVbmlmb3JtMWkoc2hhZGVy
LmdsU2hhZGVyLmdldFVuaWZvcm1Mb2NhdGlvbigidV90ZXgiKSwgMSk7Ci0gICAgICAgIEdMRVMy
MC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJ2X3RleCIp
LCAyKTsKLSAgICAgIH0gZWxzZSBpZiAoZnJhZ21lbnRTaGFkZXIgPT0gUkdCX0ZSQUdNRU5UX1NI
QURFUl9TVFJJTkcpIHsKLSAgICAgICAgR0xFUzIwLmdsVW5pZm9ybTFpKHNoYWRlci5nbFNoYWRl
ci5nZXRVbmlmb3JtTG9jYXRpb24oInJnYl90ZXgiKSwgMCk7Ci0gICAgICB9IGVsc2UgaWYgKGZy
YWdtZW50U2hhZGVyID09IE9FU19GUkFHTUVOVF9TSEFERVJfU1RSSU5HKSB7Ci0gICAgICAgIEdM
RVMyMC5nbFVuaWZvcm0xaShzaGFkZXIuZ2xTaGFkZXIuZ2V0VW5pZm9ybUxvY2F0aW9uKCJvZXNf
dGV4IiksIDApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0
ZUV4Y2VwdGlvbigiVW5rbm93biBmcmFnbWVudCBzaGFkZXI6ICIgKyBmcmFnbWVudFNoYWRlcik7
Ci0gICAgICB9Ci0gICAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoIkluaXRpYWxpemUgZnJh
Z21lbnQgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLiIpOwotICAgICAgLy8gSW5pdGlhbGl6ZSB2ZXJ0
ZXggc2hhZGVyIGF0dHJpYnV0ZXMuCi0gICAgICBzaGFkZXIuZ2xTaGFkZXIuc2V0VmVydGV4QXR0
cmliQXJyYXkoImluX3BvcyIsIDIsIEZVTExfUkVDVEFOR0xFX0JVRik7Ci0gICAgICBzaGFkZXIu
Z2xTaGFkZXIuc2V0VmVydGV4QXR0cmliQXJyYXkoImluX3RjIiwgMiwgRlVMTF9SRUNUQU5HTEVf
VEVYX0JVRik7Ci0gICAgfQotICAgIHNoYWRlci5nbFNoYWRlci51c2VQcm9ncmFtKCk7Ci0gICAg
Ly8gQ29weSB0aGUgdGV4dHVyZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggb3Zlci4KLSAgICBHTEVT
MjAuZ2xVbmlmb3JtTWF0cml4NGZ2KHNoYWRlci50ZXhNYXRyaXhMb2NhdGlvbiwgMSwgZmFsc2Us
IHRleE1hdHJpeCwgMCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVsZWFzZSBhbGwgR0xFUyByZXNv
dXJjZXMuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBtYW51YWxseSwgb3RoZXJ3aXNlIHRoZSByZXNv
dXJjZXMgYXJlIGxlYWtlZC4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCByZWxl
YXNlKCkgewotICAgIGZvciAoU2hhZGVyIHNoYWRlciA6IHNoYWRlcnMudmFsdWVzKCkpIHsKLSAg
ICAgIHNoYWRlci5nbFNoYWRlci5yZWxlYXNlKCk7Ci0gICAgfQotICAgIHNoYWRlcnMuY2xlYXIo
KTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFNoYWRlci5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xTaGFkZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFNoYWRlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTIx
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLQotaW1wb3J0IGphdmEubmlvLkZsb2F0QnVmZmVy
OwotCi0vLyBIZWxwZXIgY2xhc3MgZm9yIGhhbmRsaW5nIE9wZW5HTCBzaGFkZXJzIGFuZCBzaGFk
ZXIgcHJvZ3JhbXMuCi1wdWJsaWMgY2xhc3MgR2xTaGFkZXIgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIkdsU2hhZGVyIjsKLQotICBwcml2YXRlIHN0YXRpYyBpbnQgY29t
cGlsZVNoYWRlcihpbnQgc2hhZGVyVHlwZSwgU3RyaW5nIHNvdXJjZSkgewotICAgIGZpbmFsIGlu
dCBzaGFkZXIgPSBHTEVTMjAuZ2xDcmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7Ci0gICAgaWYgKHNo
YWRlciA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZ2xDcmVhdGVT
aGFkZXIoKSBmYWlsZWQuIEdMRVMyMCBlcnJvcjogIiArIEdMRVMyMC5nbEdldEVycm9yKCkpOwot
ICAgIH0KLSAgICBHTEVTMjAuZ2xTaGFkZXJTb3VyY2Uoc2hhZGVyLCBzb3VyY2UpOwotICAgIEdM
RVMyMC5nbENvbXBpbGVTaGFkZXIoc2hhZGVyKTsKLSAgICBpbnRbXSBjb21waWxlU3RhdHVzID0g
bmV3IGludFtdIHtHTEVTMjAuR0xfRkFMU0V9OwotICAgIEdMRVMyMC5nbEdldFNoYWRlcml2KHNo
YWRlciwgR0xFUzIwLkdMX0NPTVBJTEVfU1RBVFVTLCBjb21waWxlU3RhdHVzLCAwKTsKLSAgICBp
ZiAoY29tcGlsZVN0YXR1c1swXSAhPSBHTEVTMjAuR0xfVFJVRSkgewotICAgICAgTG9nZ2luZy5l
KAotICAgICAgICAgIFRBRywgIkNvdWxkIG5vdCBjb21waWxlIHNoYWRlciAiICsgc2hhZGVyVHlw
ZSArICI6IiArIEdMRVMyMC5nbEdldFNoYWRlckluZm9Mb2coc2hhZGVyKSk7Ci0gICAgICB0aHJv
dyBuZXcgUnVudGltZUV4Y2VwdGlvbihHTEVTMjAuZ2xHZXRTaGFkZXJJbmZvTG9nKHNoYWRlcikp
OwotICAgIH0KLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImNvbXBpbGVTaGFkZXIiKTsK
LSAgICByZXR1cm4gc2hhZGVyOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgcHJvZ3JhbTsKLQotICBw
dWJsaWMgR2xTaGFkZXIoU3RyaW5nIHZlcnRleFNvdXJjZSwgU3RyaW5nIGZyYWdtZW50U291cmNl
KSB7Ci0gICAgZmluYWwgaW50IHZlcnRleFNoYWRlciA9IGNvbXBpbGVTaGFkZXIoR0xFUzIwLkdM
X1ZFUlRFWF9TSEFERVIsIHZlcnRleFNvdXJjZSk7Ci0gICAgZmluYWwgaW50IGZyYWdtZW50U2hh
ZGVyID0gY29tcGlsZVNoYWRlcihHTEVTMjAuR0xfRlJBR01FTlRfU0hBREVSLCBmcmFnbWVudFNv
dXJjZSk7Ci0gICAgcHJvZ3JhbSA9IEdMRVMyMC5nbENyZWF0ZVByb2dyYW0oKTsKLSAgICBpZiAo
cHJvZ3JhbSA9PSAwKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiZ2xDcmVh
dGVQcm9ncmFtKCkgZmFpbGVkLiBHTEVTMjAgZXJyb3I6ICIgKyBHTEVTMjAuZ2xHZXRFcnJvcigp
KTsKLSAgICB9Ci0gICAgR0xFUzIwLmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRl
cik7Ci0gICAgR0xFUzIwLmdsQXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsK
LSAgICBHTEVTMjAuZ2xMaW5rUHJvZ3JhbShwcm9ncmFtKTsKLSAgICBpbnRbXSBsaW5rU3RhdHVz
ID0gbmV3IGludFtdIHtHTEVTMjAuR0xfRkFMU0V9OwotICAgIEdMRVMyMC5nbEdldFByb2dyYW1p
dihwcm9ncmFtLCBHTEVTMjAuR0xfTElOS19TVEFUVVMsIGxpbmtTdGF0dXMsIDApOwotICAgIGlm
IChsaW5rU3RhdHVzWzBdICE9IEdMRVMyMC5HTF9UUlVFKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFH
LCAiQ291bGQgbm90IGxpbmsgcHJvZ3JhbTogIiArIEdMRVMyMC5nbEdldFByb2dyYW1JbmZvTG9n
KHByb2dyYW0pKTsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKEdMRVMyMC5nbEdl
dFByb2dyYW1JbmZvTG9nKHByb2dyYW0pKTsKLSAgICB9Ci0gICAgLy8gQWNjb3JkaW5nIHRvIHRo
ZSBkb2N1bWVudGF0aW9uIG9mIGdsTGlua1Byb2dyYW0oKToKLSAgICAvLyAiQWZ0ZXIgdGhlIGxp
bmsgb3BlcmF0aW9uLCBhcHBsaWNhdGlvbnMgYXJlIGZyZWUgdG8gbW9kaWZ5IGF0dGFjaGVkIHNo
YWRlciBvYmplY3RzLCBjb21waWxlCi0gICAgLy8gYXR0YWNoZWQgc2hhZGVyIG9iamVjdHMsIGRl
dGFjaCBzaGFkZXIgb2JqZWN0cywgZGVsZXRlIHNoYWRlciBvYmplY3RzLCBhbmQgYXR0YWNoIGFk
ZGl0aW9uYWwKLSAgICAvLyBzaGFkZXIgb2JqZWN0cy4gTm9uZSBvZiB0aGVzZSBvcGVyYXRpb25z
IGFmZmVjdHMgdGhlIGluZm9ybWF0aW9uIGxvZyBvciB0aGUgcHJvZ3JhbSB0aGF0IGlzCi0gICAg
Ly8gcGFydCBvZiB0aGUgcHJvZ3JhbSBvYmplY3QuIgotICAgIC8vIEJ1dCBpbiBwcmFjdGljZSwg
ZGV0YWNoaW5nIHNoYWRlcnMgZnJvbSB0aGUgcHJvZ3JhbSBzZWVtcyB0byBicmVhayBzb21lIGRl
dmljZXMuIERlbGV0aW5nIHRoZQotICAgIC8vIHNoYWRlcnMgYXJlIGZpbmUgaG93ZXZlciAtIGl0
IHdpbGwgZGVsZXRlIHRoZW0gd2hlbiB0aGV5IGFyZSBubyBsb25nZXIgYXR0YWNoZWQgdG8gYSBw
cm9ncmFtLgotICAgIEdMRVMyMC5nbERlbGV0ZVNoYWRlcih2ZXJ0ZXhTaGFkZXIpOwotICAgIEdM
RVMyMC5nbERlbGV0ZVNoYWRlcihmcmFnbWVudFNoYWRlcik7Ci0gICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJDcmVhdGluZyBHbFNoYWRlciIpOwotICB9Ci0KLSAgcHVibGljIGludCBnZXRB
dHRyaWJMb2NhdGlvbihTdHJpbmcgbGFiZWwpIHsKLSAgICBpZiAocHJvZ3JhbSA9PSAtMSkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJl
bGVhc2VkIik7Ci0gICAgfQotICAgIGludCBsb2NhdGlvbiA9IEdMRVMyMC5nbEdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sIGxhYmVsKTsKLSAgICBpZiAobG9jYXRpb24gPCAwKSB7Ci0gICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGxvY2F0ZSAnIiArIGxhYmVsICsg
IicgaW4gcHJvZ3JhbSIpOwotICAgIH0KLSAgICByZXR1cm4gbG9jYXRpb247Ci0gIH0KLQotICAv
KioKLSAgICogRW5hYmxlIGFuZCB1cGxvYWQgYSB2ZXJ0ZXggYXJyYXkgZm9yIGF0dHJpYnV0ZSB8
bGFiZWx8LiBUaGUgdmVydGV4IGRhdGEgaXMgc3BlY2lmaWVkIGluCi0gICAqIHxidWZmZXJ8IHdp
dGggfGRpbWVuc2lvbnwgbnVtYmVyIG9mIGNvbXBvbmVudHMgcGVyIHZlcnRleC4KLSAgICovCi0g
IHB1YmxpYyB2b2lkIHNldFZlcnRleEF0dHJpYkFycmF5KFN0cmluZyBsYWJlbCwgaW50IGRpbWVu
c2lvbiwgRmxvYXRCdWZmZXIgYnVmZmVyKSB7Ci0gICAgaWYgKHByb2dyYW0gPT0gLTEpIHsKLSAg
ICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJUaGUgcHJvZ3JhbSBoYXMgYmVlbiByZWxl
YXNlZCIpOwotICAgIH0KLSAgICBpbnQgbG9jYXRpb24gPSBnZXRBdHRyaWJMb2NhdGlvbihsYWJl
bCk7Ci0gICAgR0xFUzIwLmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobG9jYXRpb24pOwotICAg
IEdMRVMyMC5nbFZlcnRleEF0dHJpYlBvaW50ZXIobG9jYXRpb24sIGRpbWVuc2lvbiwgR0xFUzIw
LkdMX0ZMT0FULCBmYWxzZSwgMCwgYnVmZmVyKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJy
b3IoInNldFZlcnRleEF0dHJpYkFycmF5Iik7Ci0gIH0KLQotICBwdWJsaWMgaW50IGdldFVuaWZv
cm1Mb2NhdGlvbihTdHJpbmcgbGFiZWwpIHsKLSAgICBpZiAocHJvZ3JhbSA9PSAtMSkgewotICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlRoZSBwcm9ncmFtIGhhcyBiZWVuIHJlbGVh
c2VkIik7Ci0gICAgfQotICAgIGludCBsb2NhdGlvbiA9IEdMRVMyMC5nbEdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCBsYWJlbCk7Ci0gICAgaWYgKGxvY2F0aW9uIDwgMCkgewotICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBsb2NhdGUgdW5pZm9ybSAnIiArIGxh
YmVsICsgIicgaW4gcHJvZ3JhbSIpOwotICAgIH0KLSAgICByZXR1cm4gbG9jYXRpb247Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCB1c2VQcm9ncmFtKCkgewotICAgIGlmIChwcm9ncmFtID09IC0xKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlIHByb2dyYW0gaGFzIGJlZW4g
cmVsZWFzZWQiKTsKLSAgICB9Ci0gICAgR0xFUzIwLmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKLSAg
ICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsVXNlUHJvZ3JhbSIpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiRGVsZXRpbmcgc2hhZGVy
LiIpOwotICAgIC8vIERlbGV0ZSBwcm9ncmFtLCBhdXRvbWF0aWNhbGx5IGRldGFjaGluZyBhbnkg
c2hhZGVycyBmcm9tIGl0LgotICAgIGlmIChwcm9ncmFtICE9IC0xKSB7Ci0gICAgICBHTEVTMjAu
Z2xEZWxldGVQcm9ncmFtKHByb2dyYW0pOwotICAgICAgcHJvZ3JhbSA9IC0xOwotICAgIH0KLSAg
fQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFRleHR1cmVGcmFtZUJ1ZmZlci5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvR2xUZXh0dXJlRnJhbWVCdWZmZXIuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9HbFRleHR1cmVGcmFtZUJ1ZmZl
ci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsK
LQotLyoqCi0gKiBIZWxwZXIgY2xhc3MgZm9yIGhhbmRsaW5nIE9wZW5HTCBmcmFtZWJ1ZmZlciB3
aXRoIG9ubHkgY29sb3IgYXR0YWNobWVudCBhbmQgbm8gZGVwdGggb3Igc3RlbmNpbAotICogYnVm
ZmVyLiBJbnRlbmRlZCBmb3Igc2ltcGxlIHRhc2tzIHN1Y2ggYXMgdGV4dHVyZSBjb3B5LCB0ZXh0
dXJlIGRvd25zY2FsaW5nLCBhbmQgdGV4dHVyZSBjb2xvcgotICogY29udmVyc2lvbi4KLSAqLwot
Ly8gVE9ETyhtYWdqZWQpOiBBZGQgdW5pdHRlc3RzIGZvciB0aGlzIGNsYXNzLgotcHVibGljIGNs
YXNzIEdsVGV4dHVyZUZyYW1lQnVmZmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgZnJhbWVCdWZm
ZXJJZDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgdGV4dHVyZUlkOwotICBwcml2YXRlIGZpbmFsIGlu
dCBwaXhlbEZvcm1hdDsKLSAgcHJpdmF0ZSBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdo
dDsKLQotICAvKioKLSAgICogR2VuZXJhdGUgdGV4dHVyZSBhbmQgZnJhbWVidWZmZXIgcmVzb3Vy
Y2VzLiBBbiBFR0xDb250ZXh0IG11c3QgYmUgYm91bmQgb24gdGhlIGN1cnJlbnQgdGhyZWFkCi0g
ICAqIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBUaGUgZnJhbWVidWZmZXIgaXMgbm90IGNv
bXBsZXRlIHVudGlsIHNldFNpemUoKSBpcyBjYWxsZWQuCi0gICAqLwotICBwdWJsaWMgR2xUZXh0
dXJlRnJhbWVCdWZmZXIoaW50IHBpeGVsRm9ybWF0KSB7Ci0gICAgc3dpdGNoIChwaXhlbEZvcm1h
dCkgewotICAgICAgY2FzZSBHTEVTMjAuR0xfTFVNSU5BTkNFOgotICAgICAgY2FzZSBHTEVTMjAu
R0xfUkdCOgotICAgICAgY2FzZSBHTEVTMjAuR0xfUkdCQToKLSAgICAgICAgdGhpcy5waXhlbEZv
cm1hdCA9IHBpeGVsRm9ybWF0OwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcGl4ZWwgZm9y
bWF0OiAiICsgcGl4ZWxGb3JtYXQpOwotICAgIH0KLQotICAgIHRleHR1cmVJZCA9IEdsVXRpbC5n
ZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgIHRoaXMud2lkdGggPSAw
OwotICAgIHRoaXMuaGVpZ2h0ID0gMDsKLQotICAgIC8vIENyZWF0ZSBmcmFtZWJ1ZmZlciBvYmpl
Y3QgYW5kIGJpbmQgaXQuCi0gICAgZmluYWwgaW50IGZyYW1lQnVmZmVyc1tdID0gbmV3IGludFsx
XTsKLSAgICBHTEVTMjAuZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgZnJhbWVCdWZmZXJzLCAwKTsKLSAg
ICBmcmFtZUJ1ZmZlcklkID0gZnJhbWVCdWZmZXJzWzBdOwotICAgIEdMRVMyMC5nbEJpbmRGcmFt
ZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIGZyYW1lQnVmZmVySWQpOwotICAgIEdsVXRp
bC5jaGVja05vR0xFUzJFcnJvcigiR2VuZXJhdGUgZnJhbWVidWZmZXIiKTsKLQotICAgIC8vIEF0
dGFjaCB0aGUgdGV4dHVyZSB0byB0aGUgZnJhbWVidWZmZXIgYXMgY29sb3IgYXR0YWNobWVudC4K
LSAgICBHTEVTMjAuZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRCgKLSAgICAgICAgR0xFUzIwLkdMX0ZS
QU1FQlVGRkVSLCBHTEVTMjAuR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMRVMyMC5HTF9URVhUVVJF
XzJELCB0ZXh0dXJlSWQsIDApOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiQXR0YWNo
IHRleHR1cmUgdG8gZnJhbWVidWZmZXIiKTsKLQotICAgIC8vIFJlc3RvcmUgbm9ybWFsIGZyYW1l
YnVmZmVyLgotICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZG
RVIsIDApOwotICB9Ci0KLSAgLyoqCi0gICAqIChSZSlhbGxvY2F0ZSB0ZXh0dXJlLiBXaWxsIGRv
IG5vdGhpbmcgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGVxdWFscyB0aGUgY3VycmVudCBzaXplLiBB
bgotICAgKiBFR0xDb250ZXh0IG11c3QgYmUgYm91bmQgb24gdGhlIGN1cnJlbnQgdGhyZWFkIHdo
ZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLiBNdXN0IGJlIGNhbGxlZCBhdAotICAgKiBsZWFzdCBv
bmNlIGJlZm9yZSB1c2luZyB0aGUgZnJhbWVidWZmZXIuIE1heSBiZSBjYWxsZWQgbXVsdGlwbGUg
dGltZXMgdG8gY2hhbmdlIHNpemUuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRTaXplKGludCB3
aWR0aCwgaW50IGhlaWdodCkgewotICAgIGlmICh3aWR0aCA9PSAwIHx8IGhlaWdodCA9PSAwKSB7
Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIHNpemU6
ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCk7Ci0gICAgfQotICAgIGlmICh3aWR0aCA9PSB0aGlz
LndpZHRoICYmIGhlaWdodCA9PSB0aGlzLmhlaWdodCkgewotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAg
ICAvLyBCaW5kIG91ciBmcmFtZWJ1ZmZlci4KLSAgICBHTEVTMjAuZ2xCaW5kRnJhbWVidWZmZXIo
R0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCBmcmFtZUJ1ZmZlcklkKTsKLSAgICBHbFV0aWwuY2hlY2tO
b0dMRVMyRXJyb3IoImdsQmluZEZyYW1lYnVmZmVyIik7Ci0KLSAgICAvLyBBbGxvY2F0ZSB0ZXh0
dXJlLgotICAgIEdMRVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAg
ICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgdGV4dHVyZUlkKTsK
LSAgICBHTEVTMjAuZ2xUZXhJbWFnZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBwaXhlbEZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgcGl4ZWxGb3JtYXQsCi0gICAgICAgIEdMRVMyMC5HTF9V
TlNJR05FRF9CWVRFLCBudWxsKTsKLQotICAgIC8vIENoZWNrIHRoYXQgdGhlIGZyYW1lYnVmZmVy
IGlzIGluIGEgZ29vZCBzdGF0ZS4KLSAgICBmaW5hbCBpbnQgc3RhdHVzID0gR0xFUzIwLmdsQ2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhHTEVTMjAuR0xfRlJBTUVCVUZGRVIpOwotICAgIGlmIChzdGF0
dXMgIT0gR0xFUzIwLkdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICB0aHJvdyBuZXcg
SWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJGcmFtZWJ1ZmZlciBub3QgY29tcGxldGUsIHN0YXR1czog
IiArIHN0YXR1cyk7Ci0gICAgfQotCi0gICAgLy8gUmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIu
Ci0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7
Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDApOwotICB9
Ci0KLSAgcHVibGljIGludCBnZXRXaWR0aCgpIHsKLSAgICByZXR1cm4gd2lkdGg7Ci0gIH0KLQot
ICBwdWJsaWMgaW50IGdldEhlaWdodCgpIHsKLSAgICByZXR1cm4gaGVpZ2h0OwotICB9Ci0KLSAg
cHVibGljIGludCBnZXRGcmFtZUJ1ZmZlcklkKCkgewotICAgIHJldHVybiBmcmFtZUJ1ZmZlcklk
OwotICB9Ci0KLSAgcHVibGljIGludCBnZXRUZXh0dXJlSWQoKSB7Ci0gICAgcmV0dXJuIHRleHR1
cmVJZDsKLSAgfQotCi0gIC8qKgotICAgKiBSZWxlYXNlIHRleHR1cmUgYW5kIGZyYW1lYnVmZmVy
LiBBbiBFR0xDb250ZXh0IG11c3QgYmUgYm91bmQgb24gdGhlIGN1cnJlbnQgdGhyZWFkIHdoZW4g
Y2FsbGluZwotICAgKiB0aGlzIGZ1bmN0aW9uLiBUaGlzIG9iamVjdCBzaG91bGQgbm90IGJlIHVz
ZWQgYWZ0ZXIgdGhpcyBjYWxsLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAg
ICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge3RleHR1cmVJZH0sIDApOwot
ICAgIEdMRVMyMC5nbERlbGV0ZUZyYW1lYnVmZmVycygxLCBuZXcgaW50W10ge2ZyYW1lQnVmZmVy
SWR9LCAwKTsKLSAgICB3aWR0aCA9IDA7Ci0gICAgaGVpZ2h0ID0gMDsKLSAgfQotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9HbFV0aWwuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL0dsVXRpbC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL0ds
VXRpbC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIw
OwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5CeXRlT3Jk
ZXI7Ci1pbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7Ci0KLS8qKgotICogU29tZSBPcGVuR0wg
c3RhdGljIHV0aWxpdHkgZnVuY3Rpb25zLgotICovCi1wdWJsaWMgY2xhc3MgR2xVdGlsIHsKLSAg
cHJpdmF0ZSBHbFV0aWwoKSB7fQotCi0gIC8vIEFzc2VydCB0aGF0IG5vIE9wZW5HTCBFUyAyLjAg
ZXJyb3IgaGFzIGJlZW4gcmFpc2VkLgotICBwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tOb0dMRVMy
RXJyb3IoU3RyaW5nIG1zZykgewotICAgIGludCBlcnJvciA9IEdMRVMyMC5nbEdldEVycm9yKCk7
Ci0gICAgaWYgKGVycm9yICE9IEdMRVMyMC5HTF9OT19FUlJPUikgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24obXNnICsgIjogR0xFUzIwIGVycm9yOiAiICsgZXJyb3IpOwotICAg
IH0KLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgRmxvYXRCdWZmZXIgY3JlYXRlRmxvYXRCdWZmZXIo
ZmxvYXRbXSBjb29yZHMpIHsKLSAgICAvLyBBbGxvY2F0ZSBhIGRpcmVjdCBCeXRlQnVmZmVyLCB1
c2luZyA0IGJ5dGVzIHBlciBmbG9hdCwgYW5kIGNvcHkgY29vcmRzIGludG8gaXQuCi0gICAgQnl0
ZUJ1ZmZlciBiYiA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoY29vcmRzLmxlbmd0aCAqIDQp
OwotICAgIGJiLm9yZGVyKEJ5dGVPcmRlci5uYXRpdmVPcmRlcigpKTsKLSAgICBGbG9hdEJ1ZmZl
ciBmYiA9IGJiLmFzRmxvYXRCdWZmZXIoKTsKLSAgICBmYi5wdXQoY29vcmRzKTsKLSAgICBmYi5w
b3NpdGlvbigwKTsKLSAgICByZXR1cm4gZmI7Ci0gIH0KLQotICAvKioKLSAgICogR2VuZXJhdGUg
dGV4dHVyZSB3aXRoIHN0YW5kYXJkIHBhcmFtZXRlcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGlj
IGludCBnZW5lcmF0ZVRleHR1cmUoaW50IHRhcmdldCkgewotICAgIGZpbmFsIGludCB0ZXh0dXJl
QXJyYXlbXSA9IG5ldyBpbnRbMV07Ci0gICAgR0xFUzIwLmdsR2VuVGV4dHVyZXMoMSwgdGV4dHVy
ZUFycmF5LCAwKTsKLSAgICBmaW5hbCBpbnQgdGV4dHVyZUlkID0gdGV4dHVyZUFycmF5WzBdOwot
ICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZUlkKTsKLSAgICBHTEVTMjAu
Z2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xFUzIwLkdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xF
UzIwLkdMX0xJTkVBUik7Ci0gICAgR0xFUzIwLmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIEdMRVMy
MC5HTF9URVhUVVJFX01BR19GSUxURVIsIEdMRVMyMC5HTF9MSU5FQVIpOwotICAgIEdMRVMyMC5n
bFRleFBhcmFtZXRlcmYodGFyZ2V0LCBHTEVTMjAuR0xfVEVYVFVSRV9XUkFQX1MsIEdMRVMyMC5H
TF9DTEFNUF9UT19FREdFKTsKLSAgICBHTEVTMjAuZ2xUZXhQYXJhbWV0ZXJmKHRhcmdldCwgR0xF
UzIwLkdMX1RFWFRVUkVfV1JBUF9ULCBHTEVTMjAuR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgY2hl
Y2tOb0dMRVMyRXJyb3IoImdlbmVyYXRlVGV4dHVyZSIpOwotICAgIHJldHVybiB0ZXh0dXJlSWQ7
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvSWNlQ2FuZGlkYXRlLmphdmEKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUuamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUuamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotLyoqCi0gKiBSZXByZXNlbnRhdGlvbiBvZiBhIHNpbmdsZSBJQ0UgQ2FuZGlkYXRlLCBt
aXJyb3JpbmcKLSAqIHtAY29kZSBJY2VDYW5kaWRhdGVJbnRlcmZhY2V9IGluIHRoZSBDKysgQVBJ
LgotICovCi1wdWJsaWMgY2xhc3MgSWNlQ2FuZGlkYXRlIHsKLSAgcHVibGljIGZpbmFsIFN0cmlu
ZyBzZHBNaWQ7Ci0gIHB1YmxpYyBmaW5hbCBpbnQgc2RwTUxpbmVJbmRleDsKLSAgcHVibGljIGZp
bmFsIFN0cmluZyBzZHA7Ci0KLSAgcHVibGljIEljZUNhbmRpZGF0ZShTdHJpbmcgc2RwTWlkLCBp
bnQgc2RwTUxpbmVJbmRleCwgU3RyaW5nIHNkcCkgewotICAgIHRoaXMuc2RwTWlkID0gc2RwTWlk
OwotICAgIHRoaXMuc2RwTUxpbmVJbmRleCA9IHNkcE1MaW5lSW5kZXg7Ci0gICAgdGhpcy5zZHAg
PSBzZHA7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiBz
ZHBNaWQgKyAiOiIgKyBzZHBNTGluZUluZGV4ICsgIjoiICsgc2RwOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyLmphdmEJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3MTAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjOwotaW1w
b3J0IGFuZHJvaWQubWVkaWEuTWVkaWFDb2RlY0luZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5N
ZWRpYUNvZGVjSW5mby5Db2RlY0NhcGFiaWxpdGllczsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1l
ZGlhQ29kZWNMaXN0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFGb3JtYXQ7Ci1pbXBvcnQg
YW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0
IGFuZHJvaWQudmlldy5TdXJmYWNlOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0
IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGph
dmEudXRpbC5RdWV1ZTsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotaW1wb3J0IGphdmEudXRpbC5j
b25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRp
bWVVbml0OwotCi0vLyBKYXZhLXNpZGUgb2YgcGVlcmNvbm5lY3Rpb25fam5pLmNjOk1lZGlhQ29k
ZWNWaWRlb0RlY29kZXIuCi0vLyBUaGlzIGNsYXNzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFp
bCBvZiB0aGUgSmF2YSBQZWVyQ29ubmVjdGlvbiBBUEkuCi1AU3VwcHJlc3NXYXJuaW5ncygiZGVw
cmVjYXRpb24iKQotcHVibGljIGNsYXNzIE1lZGlhQ29kZWNWaWRlb0RlY29kZXIgewotICAvLyBU
aGlzIGNsYXNzIGlzIGNvbnN0cnVjdGVkLCBvcGVyYXRlZCwgYW5kIGRlc3Ryb3llZCBieSBpdHMg
QysrIGluY2FybmF0aW9uLAotICAvLyBzbyB0aGUgY2xhc3MgYW5kIGl0cyBtZXRob2RzIGhhdmUg
bm9uLXB1YmxpYyB2aXNpYmlsaXR5LiAgVGhlIEFQSSB0aGlzCi0gIC8vIGNsYXNzIGV4cG9zZXMg
YWltcyB0byBtaW1pYyB0aGUgd2VicnRjOjpWaWRlb0RlY29kZXIgQVBJIGFzIGNsb3NlbHkgYXMK
LSAgLy8gcG9zc2libHkgdG8gbWluaW1pemUgdGhlIGFtb3VudCBvZiB0cmFuc2xhdGlvbiB3b3Jr
IG5lY2Vzc2FyeS4KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIk1lZGlh
Q29kZWNWaWRlb0RlY29kZXIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE1BWF9ERUNP
REVfVElNRV9NUyA9IDIwMDsKLQotICAvLyBUcmFja3Mgd2VicnRjOjpWaWRlb0NvZGVjVHlwZS4K
LSAgcHVibGljIGVudW0gVmlkZW9Db2RlY1R5cGUgeyBWSURFT19DT0RFQ19WUDgsIFZJREVPX0NP
REVDX1ZQOSwgVklERU9fQ09ERUNfSDI2NCB9Ci0KLSAgLy8gVGltZW91dCBmb3IgaW5wdXQgYnVm
ZmVyIGRlcXVldWUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERVFVRVVFX0lOUFVUX1RJ
TUVPVVQgPSA1MDAwMDA7Ci0gIC8vIFRpbWVvdXQgZm9yIGNvZGVjIHJlbGVhc2luZy4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IE1FRElBX0NPREVDX1JFTEVBU0VfVElNRU9VVF9NUyA9IDUw
MDA7Ci0gIC8vIE1heCBudW1iZXIgb2Ygb3V0cHV0IGJ1ZmZlcnMgcXVldWVkIGJlZm9yZSBzdGFy
dGluZyB0byBkcm9wIGRlY29kZWQgZnJhbWVzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
TUFYX1FVRVVFRF9PVVRQVVRCVUZGRVJTID0gMzsKLSAgLy8gQWN0aXZlIHJ1bm5pbmcgZGVjb2Rl
ciBpbnN0YW5jZS4gU2V0IGluIGluaXREZWNvZGUoKSAoY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUp
Ci0gIC8vIGFuZCByZXNldCB0byBudWxsIGluIHJlbGVhc2UoKSBjYWxsLgotICBwcml2YXRlIHN0
YXRpYyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIHJ1bm5pbmdJbnN0YW5jZSA9IG51bGw7Ci0gIHBy
aXZhdGUgc3RhdGljIE1lZGlhQ29kZWNWaWRlb0RlY29kZXJFcnJvckNhbGxiYWNrIGVycm9yQ2Fs
bGJhY2sgPSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBpbnQgY29kZWNFcnJvcnMgPSAwOwotICAv
LyBMaXN0IG9mIGRpc2FibGVkIGNvZGVjIHR5cGVzIC0gY2FuIGJlIHNldCBmcm9tIGFwcGxpY2F0
aW9uLgotICBwcml2YXRlIHN0YXRpYyBTZXQ8U3RyaW5nPiBod0RlY29kZXJEaXNhYmxlZFR5cGVz
ID0gbmV3IEhhc2hTZXQ8U3RyaW5nPigpOwotCi0gIHByaXZhdGUgVGhyZWFkIG1lZGlhQ29kZWNU
aHJlYWQ7Ci0gIHByaXZhdGUgTWVkaWFDb2RlYyBtZWRpYUNvZGVjOwotICBwcml2YXRlIEJ5dGVC
dWZmZXJbXSBpbnB1dEJ1ZmZlcnM7Ci0gIHByaXZhdGUgQnl0ZUJ1ZmZlcltdIG91dHB1dEJ1ZmZl
cnM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWUDhfTUlNRV9UWVBFID0gInZpZGVv
L3gtdm5kLm9uMi52cDgiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVlA5X01JTUVf
VFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA5IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIEgyNjRfTUlNRV9UWVBFID0gInZpZGVvL2F2YyI7Ci0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVk
IEhXIFZQOCBkZWNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gc3VwcG9y
dGVkVnA4SHdDb2RlY1ByZWZpeGVzID0gewotICAgICAgIk9NWC5xY29tLiIsICJPTVguTnZpZGlh
LiIsICJPTVguRXh5bm9zLiIsICJPTVguSW50ZWwuIn07Ci0gIC8vIExpc3Qgb2Ygc3VwcG9ydGVk
IEhXIFZQOSBkZWNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gc3VwcG9y
dGVkVnA5SHdDb2RlY1ByZWZpeGVzID0geyJPTVgucWNvbS4iLCAiT01YLkV4eW5vcy4ifTsKLSAg
Ly8gTGlzdCBvZiBzdXBwb3J0ZWQgSFcgSC4yNjQgZGVjb2RlcnMuCi0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZ1tdIHN1cHBvcnRlZEgyNjRId0NvZGVjUHJlZml4ZXMgPSB7Ci0gICAgICAi
T01YLnFjb20uIiwgIk9NWC5JbnRlbC4iLCAiT01YLkV4eW5vcy4ifTsKLQotICAvLyBOVjEyIGNv
bG9yIGZvcm1hdCBzdXBwb3J0ZWQgYnkgUUNPTSBjb2RlYywgYnV0IG5vdCBkZWNsYXJlZCBpbiBN
ZWRpYUNvZGVjIC0KLSAgLy8gc2VlIC9oYXJkd2FyZS9xY29tL21lZGlhL21tLWNvcmUvaW5jL09N
WF9RQ09NRXh0bnMuaAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09MT1JfUUNPTV9GT1JN
QVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMzJtNGthID0gMHg3RkEzMEMwMTsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjE2
bTRrYSA9IDB4N0ZBMzBDMDI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09N
X0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXI2NHgzMlRpbGUybThrYSA9IDB4N0ZBMzBDMDM7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tl
ZFNlbWlQbGFuYXIzMm0gPSAweDdGQTMwQzA0OwotICAvLyBBbGxvd2FibGUgY29sb3IgZm9ybWF0
cyBzdXBwb3J0ZWQgYnkgY29kZWMgLSBpbiBvcmRlciBvZiBwcmVmZXJlbmNlLgotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBMaXN0PEludGVnZXI+IHN1cHBvcnRlZENvbG9yTGlzdCA9IEFycmF5cy5h
c0xpc3QoCi0gICAgICBDb2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIs
IENvZGVjQ2FwYWJpbGl0aWVzLkNPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAgICBD
b2RlY0NhcGFiaWxpdGllcy5DT0xPUl9RQ09NX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0gICAg
ICBDT0xPUl9RQ09NX0ZPUk1BVFlWVTQyMFBhY2tlZFNlbWlQbGFuYXIzMm00a2EsIENPTE9SX1FD
T01fRk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjE2bTRrYSwKLSAgICAgIENPTE9SX1FDT01f
Rk9STUFUWVZVNDIwUGFja2VkU2VtaVBsYW5hcjY0eDMyVGlsZTJtOGthLAotICAgICAgQ09MT1Jf
UUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtKTsKLQotICBwcml2YXRlIGludCBj
b2xvckZvcm1hdDsKLSAgcHJpdmF0ZSBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsK
LSAgcHJpdmF0ZSBpbnQgc3RyaWRlOwotICBwcml2YXRlIGludCBzbGljZUhlaWdodDsKLSAgcHJp
dmF0ZSBib29sZWFuIGhhc0RlY29kZWRGaXJzdEZyYW1lOwotICBwcml2YXRlIGZpbmFsIFF1ZXVl
PFRpbWVTdGFtcHM+IGRlY29kZVN0YXJ0VGltZU1zID0gbmV3IExpbmtlZExpc3Q8VGltZVN0YW1w
cz4oKTsKLSAgcHJpdmF0ZSBib29sZWFuIHVzZVN1cmZhY2U7Ci0KLSAgLy8gVGhlIGJlbG93IHZh
cmlhYmxlcyBhcmUgb25seSB1c2VkIHdoZW4gZGVjb2RpbmcgdG8gYSBTdXJmYWNlLgotICBwcml2
YXRlIFRleHR1cmVMaXN0ZW5lciB0ZXh0dXJlTGlzdGVuZXI7Ci0gIHByaXZhdGUgaW50IGRyb3Bw
ZWRGcmFtZXM7Ci0gIHByaXZhdGUgU3VyZmFjZSBzdXJmYWNlID0gbnVsbDsKLSAgcHJpdmF0ZSBm
aW5hbCBRdWV1ZTxEZWNvZGVkT3V0cHV0QnVmZmVyPiBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZm
ZXJzID0KLSAgICAgIG5ldyBMaW5rZWRMaXN0PERlY29kZWRPdXRwdXRCdWZmZXI+KCk7Ci0KLSAg
Ly8gTWVkaWFDb2RlYyBlcnJvciBoYW5kbGVyIC0gaW52b2tlZCB3aGVuIGNyaXRpY2FsIGVycm9y
IGhhcHBlbnMgd2hpY2ggbWF5IHByZXZlbnQKLSAgLy8gZnVydGhlciB1c2Ugb2YgbWVkaWEgY29k
ZWMgQVBJLiBOb3cgaXQgbWVhbnMgdGhhdCBvbmUgb2YgbWVkaWEgY29kZWMgaW5zdGFuY2VzCi0g
IC8vIGlzIGhhbmdpbmcgYW5kIGNhbiBubyBsb25nZXIgYmUgdXNlZCBpbiB0aGUgbmV4dCBjYWxs
LgotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRXJyb3JD
YWxsYmFjayB7Ci0gICAgdm9pZCBvbk1lZGlhQ29kZWNWaWRlb0RlY29kZXJDcml0aWNhbEVycm9y
KGludCBjb2RlY0Vycm9ycyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0RXJyb3JD
YWxsYmFjayhNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNr
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlNldCBlcnJvciBjYWxsYmFjayIpOwotICAgIE1lZGlh
Q29kZWNWaWRlb0RlY29kZXIuZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2s7Ci0gIH0KLQot
ICAvLyBGdW5jdGlvbnMgdG8gZGlzYWJsZSBIVyBkZWNvZGluZyAtIGNhbiBiZSBjYWxsZWQgZnJv
bSBhcHBsaWNhdGlvbnMgZm9yIHBsYXRmb3JtcwotICAvLyB3aGljaCBoYXZlIGtub3duIEhXIGRl
Y29kaW5nIHByb2JsZW1zLgotICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZVZwOEh3Q29kZWMo
KSB7Ci0gICAgTG9nZ2luZy53KFRBRywgIlZQOCBkZWNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBs
aWNhdGlvbi4iKTsKLSAgICBod0RlY29kZXJEaXNhYmxlZFR5cGVzLmFkZChWUDhfTUlNRV9UWVBF
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlVnA5SHdDb2RlYygpIHsKLSAg
ICBMb2dnaW5nLncoVEFHLCAiVlA5IGRlY29kaW5nIGlzIGRpc2FibGVkIGJ5IGFwcGxpY2F0aW9u
LiIpOwotICAgIGh3RGVjb2RlckRpc2FibGVkVHlwZXMuYWRkKFZQOV9NSU1FX1RZUEUpOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVIMjY0SHdDb2RlYygpIHsKLSAgICBMb2dn
aW5nLncoVEFHLCAiSC4yNjQgZGVjb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBwbGljYXRpb24uIik7
Ci0gICAgaHdEZWNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoSDI2NF9NSU1FX1RZUEUpOwotICB9Ci0K
LSAgLy8gRnVuY3Rpb25zIHRvIHF1ZXJ5IGlmIEhXIGRlY29kaW5nIGlzIHN1cHBvcnRlZC4KLSAg
cHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA4SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFo
d0RlY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRhaW5zKFZQOF9NSU1FX1RZUEUpCi0gICAgICAgICYm
IChmaW5kRGVjb2RlcihWUDhfTUlNRV9UWVBFLCBzdXBwb3J0ZWRWcDhId0NvZGVjUHJlZml4ZXMp
ICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA5SHdTdXBwb3J0
ZWQoKSB7Ci0gICAgcmV0dXJuICFod0RlY29kZXJEaXNhYmxlZFR5cGVzLmNvbnRhaW5zKFZQOV9N
SU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kRGVjb2RlcihWUDlfTUlNRV9UWVBFLCBzdXBwb3J0
ZWRWcDlId0NvZGVjUHJlZml4ZXMpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBi
b29sZWFuIGlzSDI2NEh3U3VwcG9ydGVkKCkgewotICAgIHJldHVybiAhaHdEZWNvZGVyRGlzYWJs
ZWRUeXBlcy5jb250YWlucyhIMjY0X01JTUVfVFlQRSkKLSAgICAgICAgJiYgKGZpbmREZWNvZGVy
KEgyNjRfTUlNRV9UWVBFLCBzdXBwb3J0ZWRIMjY0SHdDb2RlY1ByZWZpeGVzKSAhPSBudWxsKTsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludFN0YWNrVHJhY2UoKSB7Ci0gICAgaWYg
KHJ1bm5pbmdJbnN0YW5jZSAhPSBudWxsICYmIHJ1bm5pbmdJbnN0YW5jZS5tZWRpYUNvZGVjVGhy
ZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNrVHJhY2VFbGVtZW50W10gbWVkaWFDb2RlY1N0YWNr
VHJhY2VzID0gcnVubmluZ0luc3RhbmNlLm1lZGlhQ29kZWNUaHJlYWQuZ2V0U3RhY2tUcmFjZSgp
OwotICAgICAgaWYgKG1lZGlhQ29kZWNTdGFja1RyYWNlcy5sZW5ndGggPiAwKSB7Ci0gICAgICAg
IExvZ2dpbmcuZChUQUcsICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIHN0YWNrcyB0cmFjZToiKTsK
LSAgICAgICAgZm9yIChTdGFja1RyYWNlRWxlbWVudCBzdGFja1RyYWNlIDogbWVkaWFDb2RlY1N0
YWNrVHJhY2VzKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgc3RhY2tUcmFjZS50b1N0cmlu
ZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIEhlbHBlciBzdHJ1
Y3QgZm9yIGZpbmREZWNvZGVyKCkgYmVsb3cuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIERlY29k
ZXJQcm9wZXJ0aWVzIHsKLSAgICBwdWJsaWMgRGVjb2RlclByb3BlcnRpZXMoU3RyaW5nIGNvZGVj
TmFtZSwgaW50IGNvbG9yRm9ybWF0KSB7Ci0gICAgICB0aGlzLmNvZGVjTmFtZSA9IGNvZGVjTmFt
ZTsKLSAgICAgIHRoaXMuY29sb3JGb3JtYXQgPSBjb2xvckZvcm1hdDsKLSAgICB9Ci0gICAgcHVi
bGljIGZpbmFsIFN0cmluZyBjb2RlY05hbWU7IC8vIE9wZW5NYXggY29tcG9uZW50IG5hbWUgZm9y
IFZQOCBjb2RlYy4KLSAgICBwdWJsaWMgZmluYWwgaW50IGNvbG9yRm9ybWF0OyAvLyBDb2xvciBm
b3JtYXQgc3VwcG9ydGVkIGJ5IGNvZGVjLgotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgRGVjb2Rl
clByb3BlcnRpZXMgZmluZERlY29kZXIoU3RyaW5nIG1pbWUsIFN0cmluZ1tdIHN1cHBvcnRlZENv
ZGVjUHJlZml4ZXMpIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVS
U0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIHJldHVybiBudWxsOyAvLyBNZWRpYUNvZGVjLnNl
dFBhcmFtZXRlcnMgaXMgbWlzc2luZy4KLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIlRyeWlu
ZyB0byBmaW5kIEhXIGRlY29kZXIgZm9yIG1pbWUgIiArIG1pbWUpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgTWVkaWFDb2RlY0xpc3QuZ2V0Q29kZWNDb3VudCgpOyArK2kpIHsKLSAgICAgIE1l
ZGlhQ29kZWNJbmZvIGluZm8gPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgaW5mbyA9IE1l
ZGlhQ29kZWNMaXN0LmdldENvZGVjSW5mb0F0KGkpOwotICAgICAgfSBjYXRjaCAoSWxsZWdhbEFy
Z3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbm5vdCByZXRy
aWV2ZSBkZWNvZGVyIGNvZGVjIGluZm8iLCBlKTsKLSAgICAgIH0KLSAgICAgIGlmIChpbmZvID09
IG51bGwgfHwgaW5mby5pc0VuY29kZXIoKSkgewotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0K
LSAgICAgIFN0cmluZyBuYW1lID0gbnVsbDsKLSAgICAgIGZvciAoU3RyaW5nIG1pbWVUeXBlIDog
aW5mby5nZXRTdXBwb3J0ZWRUeXBlcygpKSB7Ci0gICAgICAgIGlmIChtaW1lVHlwZS5lcXVhbHMo
bWltZSkpIHsKLSAgICAgICAgICBuYW1lID0gaW5mby5nZXROYW1lKCk7Ci0gICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChuYW1lID09IG51bGwpIHsKLSAgICAg
ICAgY29udGludWU7IC8vIE5vIEhXIHN1cHBvcnQgaW4gdGhpcyBjb2RlYzsgdHJ5IHRoZSBuZXh0
IG9uZS4KLSAgICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJGb3VuZCBjYW5kaWRhdGUgZGVj
b2RlciAiICsgbmFtZSk7Ci0KLSAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgc3VwcG9ydGVkIGRl
Y29kZXIuCi0gICAgICBib29sZWFuIHN1cHBvcnRlZENvZGVjID0gZmFsc2U7Ci0gICAgICBmb3Ig
KFN0cmluZyBjb2RlY1ByZWZpeCA6IHN1cHBvcnRlZENvZGVjUHJlZml4ZXMpIHsKLSAgICAgICAg
aWYgKG5hbWUuc3RhcnRzV2l0aChjb2RlY1ByZWZpeCkpIHsKLSAgICAgICAgICBzdXBwb3J0ZWRD
b2RlYyA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAg
IGlmICghc3VwcG9ydGVkQ29kZWMpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAg
ICAgIC8vIENoZWNrIGlmIGNvZGVjIHN1cHBvcnRzIGVpdGhlciB5dXY0MjAgb3IgbnYxMi4KLSAg
ICAgIENvZGVjQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKLSAgICAgIHRyeSB7Ci0gICAgICAg
IGNhcGFiaWxpdGllcyA9IGluZm8uZ2V0Q2FwYWJpbGl0aWVzRm9yVHlwZShtaW1lKTsKLSAgICAg
IH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcu
ZShUQUcsICJDYW5ub3QgcmV0cmlldmUgZGVjb2RlciBjYXBhYmlsaXRpZXMiLCBlKTsKLSAgICAg
ICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBmb3IgKGludCBjb2xvckZvcm1hdCA6IGNhcGFi
aWxpdGllcy5jb2xvckZvcm1hdHMpIHsKLSAgICAgICAgTG9nZ2luZy52KFRBRywgIiAgIENvbG9y
OiAweCIgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKGNvbG9yRm9ybWF0KSk7Ci0gICAgICB9Ci0gICAg
ICBmb3IgKGludCBzdXBwb3J0ZWRDb2xvckZvcm1hdCA6IHN1cHBvcnRlZENvbG9yTGlzdCkgewot
ICAgICAgICBmb3IgKGludCBjb2RlY0NvbG9yRm9ybWF0IDogY2FwYWJpbGl0aWVzLmNvbG9yRm9y
bWF0cykgewotICAgICAgICAgIGlmIChjb2RlY0NvbG9yRm9ybWF0ID09IHN1cHBvcnRlZENvbG9y
Rm9ybWF0KSB7Ci0gICAgICAgICAgICAvLyBGb3VuZCBzdXBwb3J0ZWQgSFcgZGVjb2Rlci4KLSAg
ICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJGb3VuZCB0YXJnZXQgZGVjb2RlciAiICsgbmFtZSAr
ICIuIENvbG9yOiAweCIKLSAgICAgICAgICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5n
KGNvZGVjQ29sb3JGb3JtYXQpKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlclByb3Bl
cnRpZXMobmFtZSwgY29kZWNDb2xvckZvcm1hdCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJObyBIVyBkZWNvZGVyIGZvdW5kIGZv
ciBtaW1lICIgKyBtaW1lKTsKLSAgICByZXR1cm4gbnVsbDsgLy8gTm8gSFcgZGVjb2Rlci4KLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpIHRocm93cyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb24gewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFkLmdldElkKCkgIT0g
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdh
bFN0YXRlRXhjZXB0aW9uKCJNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIHByZXZpb3VzbHkgb3BlcmF0
ZWQgb24gIgotICAgICAgICAgICsgbWVkaWFDb2RlY1RocmVhZCArICIgYnV0IGlzIG5vdyBjYWxs
ZWQgb24gIiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFBh
c3MgbnVsbCBpbiB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8IHRvIGNvbmZpZ3VyZSB0aGUgY29kZWMg
Zm9yIEJ5dGVCdWZmZXIgb3V0cHV0LgotICBwcml2YXRlIGJvb2xlYW4gaW5pdERlY29kZSgKLSAg
ICAgIFZpZGVvQ29kZWNUeXBlIHR5cGUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgU3VyZmFjZVRl
eHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIpIHsKLSAgICBpZiAobWVkaWFDb2RlY1Ro
cmVhZCAhPSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiaW5pdERl
Y29kZTogRm9yZ290IHRvIHJlbGVhc2UoKT8iKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgbWltZSA9
IG51bGw7Ci0gICAgdXNlU3VyZmFjZSA9IChzdXJmYWNlVGV4dHVyZUhlbHBlciAhPSBudWxsKTsK
LSAgICBTdHJpbmdbXSBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzID0gbnVsbDsKLSAgICBpZiAodHlw
ZSA9PSBWaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgpIHsKLSAgICAgIG1pbWUgPSBWUDhf
TUlNRV9UWVBFOwotICAgICAgc3VwcG9ydGVkQ29kZWNQcmVmaXhlcyA9IHN1cHBvcnRlZFZwOEh3
Q29kZWNQcmVmaXhlczsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklE
RU9fQ09ERUNfVlA5KSB7Ci0gICAgICBtaW1lID0gVlA5X01JTUVfVFlQRTsKLSAgICAgIHN1cHBv
cnRlZENvZGVjUHJlZml4ZXMgPSBzdXBwb3J0ZWRWcDlId0NvZGVjUHJlZml4ZXM7Ci0gICAgfSBl
bHNlIGlmICh0eXBlID09IFZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX0gyNjQpIHsKLSAgICAg
IG1pbWUgPSBIMjY0X01JTUVfVFlQRTsKLSAgICAgIHN1cHBvcnRlZENvZGVjUHJlZml4ZXMgPSBz
dXBwb3J0ZWRIMjY0SHdDb2RlY1ByZWZpeGVzOwotICAgIH0gZWxzZSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiaW5pdERlY29kZTogTm9uLXN1cHBvcnRlZCBjb2RlYyAiICsg
dHlwZSk7Ci0gICAgfQotICAgIERlY29kZXJQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBmaW5kRGVj
b2RlcihtaW1lLCBzdXBwb3J0ZWRDb2RlY1ByZWZpeGVzKTsKLSAgICBpZiAocHJvcGVydGllcyA9
PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiQ2Fubm90IGZpbmQg
SFcgZGVjb2RlciBmb3IgIiArIHR5cGUpOwotICAgIH0KLQotICAgIExvZ2dpbmcuZChUQUcsICJK
YXZhIGluaXREZWNvZGU6ICIgKyB0eXBlICsgIiA6ICIgKyB3aWR0aCArICIgeCAiICsgaGVpZ2h0
ICsgIi4gQ29sb3I6IDB4IgotICAgICAgICAgICAgKyBJbnRlZ2VyLnRvSGV4U3RyaW5nKHByb3Bl
cnRpZXMuY29sb3JGb3JtYXQpICsgIi4gVXNlIFN1cmZhY2U6ICIgKyB1c2VTdXJmYWNlKTsKLQot
ICAgIHJ1bm5pbmdJbnN0YW5jZSA9IHRoaXM7IC8vIERlY29kZXIgaXMgbm93IHJ1bm5pbmcgYW5k
IGNhbiBiZSBxdWVyaWVkIGZvciBzdGFjayB0cmFjZXMuCi0gICAgbWVkaWFDb2RlY1RocmVhZCA9
IFRocmVhZC5jdXJyZW50VGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIHRoaXMud2lkdGggPSB3
aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgc3RyaWRlID0gd2lkdGg7
Ci0gICAgICBzbGljZUhlaWdodCA9IGhlaWdodDsKLQotICAgICAgaWYgKHVzZVN1cmZhY2UpIHsK
LSAgICAgICAgdGV4dHVyZUxpc3RlbmVyID0gbmV3IFRleHR1cmVMaXN0ZW5lcihzdXJmYWNlVGV4
dHVyZUhlbHBlcik7Ci0gICAgICAgIHN1cmZhY2UgPSBuZXcgU3VyZmFjZShzdXJmYWNlVGV4dHVy
ZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICAgIH0KLQotICAgICAgTWVkaWFGb3Jt
YXQgZm9ybWF0ID0gTWVkaWFGb3JtYXQuY3JlYXRlVmlkZW9Gb3JtYXQobWltZSwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgICBpZiAoIXVzZVN1cmZhY2UpIHsKLSAgICAgICAgZm9ybWF0LnNldEludGVn
ZXIoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCwgcHJvcGVydGllcy5jb2xvckZvcm1hdCk7
Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiICBGb3JtYXQ6ICIgKyBmb3JtYXQpOwot
ICAgICAgbWVkaWFDb2RlYyA9IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuY3JlYXRlQnlDb2RlY05h
bWUocHJvcGVydGllcy5jb2RlY05hbWUpOwotICAgICAgaWYgKG1lZGlhQ29kZWMgPT0gbnVsbCkg
ewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FuIG5vdCBjcmVhdGUgbWVkaWEgZGVjb2RlciIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBtZWRpYUNvZGVjLmNvbmZp
Z3VyZShmb3JtYXQsIHN1cmZhY2UsIG51bGwsIDApOwotICAgICAgbWVkaWFDb2RlYy5zdGFydCgp
OwotCi0gICAgICBjb2xvckZvcm1hdCA9IHByb3BlcnRpZXMuY29sb3JGb3JtYXQ7Ci0gICAgICBv
dXRwdXRCdWZmZXJzID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRCdWZmZXJzKCk7Ci0gICAgICBpbnB1
dEJ1ZmZlcnMgPSBtZWRpYUNvZGVjLmdldElucHV0QnVmZmVycygpOwotICAgICAgZGVjb2RlU3Rh
cnRUaW1lTXMuY2xlYXIoKTsKLSAgICAgIGhhc0RlY29kZWRGaXJzdEZyYW1lID0gZmFsc2U7Ci0g
ICAgICBkZXF1ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLmNsZWFyKCk7Ci0gICAgICBkcm9wcGVk
RnJhbWVzID0gMDsKLSAgICAgIExvZ2dpbmcuZChUQUcsCi0gICAgICAgICAgIklucHV0IGJ1ZmZl
cnM6ICIgKyBpbnB1dEJ1ZmZlcnMubGVuZ3RoICsgIi4gT3V0cHV0IGJ1ZmZlcnM6ICIgKyBvdXRw
dXRCdWZmZXJzLmxlbmd0aCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxl
Z2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgImluaXREZWNvZGUg
ZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVz
ZXRzIHRoZSBkZWNvZGVyIHNvIGl0IGNhbiBzdGFydCBkZWNvZGluZyBmcmFtZXMgd2l0aCBuZXcg
cmVzb2x1dGlvbi4KLSAgLy8gRmx1c2hlcyBNZWRpYUNvZGVjIGFuZCBjbGVhcnMgZGVjb2RlciBv
dXRwdXQgYnVmZmVycy4KLSAgcHJpdmF0ZSB2b2lkIHJlc2V0KGludCB3aWR0aCwgaW50IGhlaWdo
dCkgewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFkID09IG51bGwgfHwgbWVkaWFDb2RlYyA9PSBu
dWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW5jb3JyZWN0IHJlc2V0
IGNhbGwgZm9yIG5vbi1pbml0aWFsaXplZCBkZWNvZGVyLiIpOwotICAgIH0KLSAgICBMb2dnaW5n
LmQoVEFHLCAiSmF2YSByZXNldDogIiArIHdpZHRoICsgIiB4ICIgKyBoZWlnaHQpOwotCi0gICAg
bWVkaWFDb2RlYy5mbHVzaCgpOwotCi0gICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgIHRoaXMu
aGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlY29kZVN0YXJ0VGltZU1zLmNsZWFyKCk7Ci0gICAgZGVx
dWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVycy5jbGVhcigpOwotICAgIGhhc0RlY29kZWRGaXJzdEZy
YW1lID0gZmFsc2U7Ci0gICAgZHJvcHBlZEZyYW1lcyA9IDA7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgcmVsZWFzZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRGVjb2Rlci4g
VG90YWwgbnVtYmVyIG9mIGRyb3BwZWQgZnJhbWVzOiAiICsgZHJvcHBlZEZyYW1lcyk7Ci0gICAg
Y2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLQotICAgIC8vIFJ1biBNZWRpYWNvZGVjIHN0b3Ao
KSBhbmQgcmVsZWFzZSgpIG9uIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBzb21ldGltZQotICAgIC8v
IE1lZGlhY29kZWMuc3RvcCgpIG1heSBoYW5nLgotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIHJl
bGVhc2VEb25lID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotCi0gICAgUnVubmFibGUgcnVuTWVk
aWFDb2RlY1JlbGVhc2UgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiSmF2YSByZWxlYXNlRGVjb2RlciBvbiByZWxlYXNlIHRocmVhZCIpOwotICAgICAgICAg
IG1lZGlhQ29kZWMuc3RvcCgpOwotICAgICAgICAgIG1lZGlhQ29kZWMucmVsZWFzZSgpOwotICAg
ICAgICAgIExvZ2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VEZWNvZGVyIG9uIHJlbGVhc2UgdGhy
ZWFkIGRvbmUiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBM
b2dnaW5nLmUoVEFHLCAiTWVkaWEgZGVjb2RlciByZWxlYXNlIGZhaWxlZCIsIGUpOwotICAgICAg
ICB9Ci0gICAgICAgIHJlbGVhc2VEb25lLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH07Ci0g
ICAgbmV3IFRocmVhZChydW5NZWRpYUNvZGVjUmVsZWFzZSkuc3RhcnQoKTsKLQotICAgIGlmICgh
VGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkocmVsZWFzZURvbmUsIE1FRElBX0NPREVD
X1JFTEVBU0VfVElNRU9VVF9NUykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJNZWRpYSBkZWNv
ZGVyIHJlbGVhc2UgdGltZW91dCIpOwotICAgICAgY29kZWNFcnJvcnMrKzsKLSAgICAgIGlmIChl
cnJvckNhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkludm9rZSBj
b2RlYyBlcnJvciBjYWxsYmFjay4gRXJyb3JzOiAiICsgY29kZWNFcnJvcnMpOwotICAgICAgICBl
cnJvckNhbGxiYWNrLm9uTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckNyaXRpY2FsRXJyb3IoY29kZWNF
cnJvcnMpOwotICAgICAgfQotICAgIH0KLQotICAgIG1lZGlhQ29kZWMgPSBudWxsOwotICAgIG1l
ZGlhQ29kZWNUaHJlYWQgPSBudWxsOwotICAgIHJ1bm5pbmdJbnN0YW5jZSA9IG51bGw7Ci0gICAg
aWYgKHVzZVN1cmZhY2UpIHsKLSAgICAgIHN1cmZhY2UucmVsZWFzZSgpOwotICAgICAgc3VyZmFj
ZSA9IG51bGw7Ci0gICAgICB0ZXh0dXJlTGlzdGVuZXIucmVsZWFzZSgpOwotICAgIH0KLSAgICBM
b2dnaW5nLmQoVEFHLCAiSmF2YSByZWxlYXNlRGVjb2RlciBkb25lIik7Ci0gIH0KLQotICAvLyBE
ZXF1ZXVlIGFuIGlucHV0IGJ1ZmZlciBhbmQgcmV0dXJuIGl0cyBpbmRleCwgLTEgaWYgbm8gaW5w
dXQgYnVmZmVyIGlzCi0gIC8vIGF2YWlsYWJsZSwgb3IgLTIgaWYgdGhlIGNvZGVjIGlzIG5vIGxv
bmdlciBvcGVyYXRpdmUuCi0gIHByaXZhdGUgaW50IGRlcXVldWVJbnB1dEJ1ZmZlcigpIHsKLSAg
ICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gbWVk
aWFDb2RlYy5kZXF1ZXVlSW5wdXRCdWZmZXIoREVRVUVVRV9JTlBVVF9USU1FT1VUKTsKLSAgICB9
IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
ImRlcXVldWVJbnRwdXRCdWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gLTI7Ci0gICAg
fQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHF1ZXVlSW5wdXRCdWZmZXIoaW50IGlucHV0QnVm
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
IGZpbmFsIGxvbmcgZW5kRGVjb2RlVGltZU1zOwotICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBm
b3IgZGVxdWV1ZVRleHR1cmVCdWZmZXIoKSBiZWxvdy4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3Mg
RGVjb2RlZFRleHR1cmVCdWZmZXIgewotICAgIHByaXZhdGUgZmluYWwgaW50IHRleHR1cmVJRDsK
LSAgICBwcml2YXRlIGZpbmFsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4OwotICAgIC8vIFByZXNl
bnRhdGlvbiB0aW1lc3RhbXAgcmV0dXJuZWQgaW4gZGVxdWV1ZU91dHB1dEJ1ZmZlciBjYWxsLgot
ICAgIHByaXZhdGUgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UaW1lU3RhbXBNczsKLSAgICAvLyBD
KysgaW5wdXRJbWFnZS5fdGltZVN0YW1wIHZhbHVlIGZvciBvdXRwdXQgZnJhbWUuCi0gICAgcHJp
dmF0ZSBmaW5hbCBsb25nIHRpbWVTdGFtcE1zOwotICAgIC8vIEMrKyBpbnB1dEltYWdlLm50cF90
aW1lX21zXyB2YWx1ZSBmb3Igb3V0cHV0IGZyYW1lLgotICAgIHByaXZhdGUgZmluYWwgbG9uZyBu
dHBUaW1lU3RhbXBNczsKLSAgICAvLyBOdW1iZXIgb2YgbXMgaXQgdG9vayB0byBkZWNvZGUgdGhp
cyBmcmFtZS4KLSAgICBwcml2YXRlIGZpbmFsIGxvbmcgZGVjb2RlVGltZU1zOwotICAgIC8vIElu
dGVydmFsIGZyb20gd2hlbiB0aGUgZnJhbWUgZmluaXNoZWQgZGVjb2RpbmcgdW50aWwgdGhpcyBi
dWZmZXIgaGFzIGJlZW4gY3JlYXRlZC4KLSAgICAvLyBTaW5jZSB0aGVyZSBpcyBvbmx5IG9uZSB0
ZXh0dXJlLCB0aGlzIGludGVydmFsIGRlcGVuZCBvbiB0aGUgdGltZSBmcm9tIHdoZW4KLSAgICAv
LyBhIGZyYW1lIGlzIGRlY29kZWQgYW5kIHByb3ZpZGVkIHRvIEMrKyBhbmQgdW50aWwgdGhhdCBm
cmFtZSBpcyByZXR1cm5lZCB0byB0aGUgTWVkaWFDb2RlYwotICAgIC8vIHNvIHRoYXQgdGhlIHRl
eHR1cmUgY2FuIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbmV4dCBkZWNvZGVkIGZyYW1lLgotICAgIHBy
aXZhdGUgZmluYWwgbG9uZyBmcmFtZURlbGF5TXM7Ci0KLSAgICAvLyBBIERlY29kZWRUZXh0dXJl
QnVmZmVyIHdpdGggemVybyB8dGV4dHVyZUlEfCBoYXMgc3BlY2lhbCBtZWFuaW5nIGFuZCByZXBy
ZXNlbnRzIGEgZnJhbWUKLSAgICAvLyB0aGF0IHdhcyBkcm9wcGVkLgotICAgIHB1YmxpYyBEZWNv
ZGVkVGV4dHVyZUJ1ZmZlcihpbnQgdGV4dHVyZUlELCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwK
LSAgICAgICAgbG9uZyBwcmVzZW50YXRpb25UaW1lU3RhbXBNcywgbG9uZyB0aW1lU3RhbXBNcywg
bG9uZyBudHBUaW1lU3RhbXBNcywgbG9uZyBkZWNvZGVUaW1lTXMsCi0gICAgICAgIGxvbmcgZnJh
bWVEZWxheSkgewotICAgICAgdGhpcy50ZXh0dXJlSUQgPSB0ZXh0dXJlSUQ7Ci0gICAgICB0aGlz
LnRyYW5zZm9ybU1hdHJpeCA9IHRyYW5zZm9ybU1hdHJpeDsKLSAgICAgIHRoaXMucHJlc2VudGF0
aW9uVGltZVN0YW1wTXMgPSBwcmVzZW50YXRpb25UaW1lU3RhbXBNczsKLSAgICAgIHRoaXMudGlt
ZVN0YW1wTXMgPSB0aW1lU3RhbXBNczsKLSAgICAgIHRoaXMubnRwVGltZVN0YW1wTXMgPSBudHBU
aW1lU3RhbXBNczsKLSAgICAgIHRoaXMuZGVjb2RlVGltZU1zID0gZGVjb2RlVGltZU1zOwotICAg
ICAgdGhpcy5mcmFtZURlbGF5TXMgPSBmcmFtZURlbGF5OwotICAgIH0KLSAgfQotCi0gIC8vIFBv
bGwgYmFzZWQgdGV4dHVyZSBsaXN0ZW5lci4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGV4dHVy
ZUxpc3RlbmVyCi0gICAgICBpbXBsZW1lbnRzIFN1cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVy
ZUZyYW1lQXZhaWxhYmxlTGlzdGVuZXIgewotICAgIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgLy8gfG5ld0ZyYW1lTG9ja3wgaXMg
dXNlZCB0byBzeW5jaHJvbml6ZSBhcnJpdmFsIG9mIG5ldyBmcmFtZXMgd2l0aCB3YWl0KCkvbm90
aWZ5QWxsKCkuCi0gICAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbmV3RnJhbWVMb2NrID0gbmV3IE9i
amVjdCgpOwotICAgIC8vIHxidWZmZXJUb1JlbmRlcnwgaXMgbm9uLW51bGwgd2hlbiB3YWl0aW5n
IGZvciB0cmFuc2l0aW9uIGJldHdlZW4gYWRkQnVmZmVyVG9SZW5kZXIoKSB0bwotICAgIC8vIG9u
VGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAgcHJpdmF0ZSBEZWNvZGVkT3V0cHV0QnVmZmVy
IGJ1ZmZlclRvUmVuZGVyOwotICAgIHByaXZhdGUgRGVjb2RlZFRleHR1cmVCdWZmZXIgcmVuZGVy
ZWRCdWZmZXI7Ci0KLSAgICBwdWJsaWMgVGV4dHVyZUxpc3RlbmVyKFN1cmZhY2VUZXh0dXJlSGVs
cGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyKSB7Ci0gICAgICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVs
cGVyID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5z
dGFydExpc3RlbmluZyh0aGlzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRCdWZmZXJU
b1JlbmRlcihEZWNvZGVkT3V0cHV0QnVmZmVyIGJ1ZmZlcikgewotICAgICAgaWYgKGJ1ZmZlclRv
UmVuZGVyICE9IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIlVuZXhwZWN0ZWQgYWRk
QnVmZmVyVG9SZW5kZXIoKSBjYWxsZWQgd2hpbGUgd2FpdGluZyBmb3IgYSB0ZXh0dXJlLiIpOwot
ICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXYWl0aW5nIGZvciBhIHRl
eHR1cmUuIik7Ci0gICAgICB9Ci0gICAgICBidWZmZXJUb1JlbmRlciA9IGJ1ZmZlcjsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1dhaXRpbmdGb3JUZXh0dXJlKCkgewotICAgICAgc3lu
Y2hyb25pemVkIChuZXdGcmFtZUxvY2spIHsKLSAgICAgICAgcmV0dXJuIGJ1ZmZlclRvUmVuZGVy
ICE9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2FsbGJhY2sgZnJvbSB8c3VyZmFj
ZVRleHR1cmVIZWxwZXJ8LiBNYXkgYmUgY2FsbGVkIG9uIGFuIGFyYml0cmFyeSB0aHJlYWQuCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoCi0g
ICAgICAgIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRp
bWVzdGFtcE5zKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKG5ld0ZyYW1lTG9jaykgewotICAgICAg
ICBpZiAocmVuZGVyZWRCdWZmZXIgIT0gbnVsbCkgewotICAgICAgICAgIExvZ2dpbmcuZSgKLSAg
ICAgICAgICAgICAgVEFHLCAiVW5leHBlY3RlZCBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGNh
bGxlZCB3aGlsZSBhbHJlYWR5IGhvbGRpbmcgYSB0ZXh0dXJlLiIpOwotICAgICAgICAgIHRocm93
IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkFscmVhZHkgaG9sZGluZyBhIHRleHR1cmUuIik7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gfHRpbWVzdGFtcE5zfCBpcyBhbHdheXMgemVybyBvbiBz
b21lIEFuZHJvaWQgdmVyc2lvbnMuCi0gICAgICAgIHJlbmRlcmVkQnVmZmVyID0gbmV3IERlY29k
ZWRUZXh0dXJlQnVmZmVyKG9lc1RleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4LAotICAgICAgICAg
ICAgYnVmZmVyVG9SZW5kZXIucHJlc2VudGF0aW9uVGltZVN0YW1wTXMsIGJ1ZmZlclRvUmVuZGVy
LnRpbWVTdGFtcE1zLAotICAgICAgICAgICAgYnVmZmVyVG9SZW5kZXIubnRwVGltZVN0YW1wTXMs
IGJ1ZmZlclRvUmVuZGVyLmRlY29kZVRpbWVNcywKLSAgICAgICAgICAgIFN5c3RlbUNsb2NrLmVs
YXBzZWRSZWFsdGltZSgpIC0gYnVmZmVyVG9SZW5kZXIuZW5kRGVjb2RlVGltZU1zKTsKLSAgICAg
ICAgYnVmZmVyVG9SZW5kZXIgPSBudWxsOwotICAgICAgICBuZXdGcmFtZUxvY2subm90aWZ5QWxs
KCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gRGVxdWV1ZXMgYW5kIHJldHVybnMgYSBEZWNv
ZGVkVGV4dHVyZUJ1ZmZlciBpZiBhdmFpbGFibGUsIG9yIG51bGwgb3RoZXJ3aXNlLgotICAgIHB1
YmxpYyBEZWNvZGVkVGV4dHVyZUJ1ZmZlciBkZXF1ZXVlVGV4dHVyZUJ1ZmZlcihpbnQgdGltZW91
dE1zKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKG5ld0ZyYW1lTG9jaykgewotICAgICAgICBpZiAo
cmVuZGVyZWRCdWZmZXIgPT0gbnVsbCAmJiB0aW1lb3V0TXMgPiAwICYmIGlzV2FpdGluZ0ZvclRl
eHR1cmUoKSkgewotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBuZXdGcmFtZUxvY2sud2Fp
dCh0aW1lb3V0TXMpOwotICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUp
IHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIGludGVycnVwdGVkIHN0YXR1cyBieSByZWlu
dGVycnVwdGluZyB0aGUgdGhyZWFkLgotICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQo
KS5pbnRlcnJ1cHQoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgRGVjb2RlZFRl
eHR1cmVCdWZmZXIgcmV0dXJuZWRCdWZmZXIgPSByZW5kZXJlZEJ1ZmZlcjsKLSAgICAgICAgcmVu
ZGVyZWRCdWZmZXIgPSBudWxsOwotICAgICAgICByZXR1cm4gcmV0dXJuZWRCdWZmZXI7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgIC8vIFN1cmZh
Y2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKSB3aWxsIGJsb2NrIHVudGlsIGFueSBvblRl
eHR1cmVGcmFtZUF2YWlsYWJsZSgpIGluCi0gICAgICAvLyBwcm9ncmVzcyBpcyBkb25lLiBUaGVy
ZWZvcmUsIHRoZSBjYWxsIG11c3QgYmUgb3V0c2lkZSBhbnkgc3luY2hyb25pemVkCi0gICAgICAv
LyBzdGF0ZW1lbnQgdGhhdCBpcyBhbHNvIHVzZWQgaW4gdGhlIG9uVGV4dHVyZUZyYW1lQXZhaWxh
YmxlKCkgYWJvdmUgdG8gYXZvaWQgZGVhZGxvY2tzLgotICAgICAgc3VyZmFjZVRleHR1cmVIZWxw
ZXIuc3RvcExpc3RlbmluZygpOwotICAgICAgc3luY2hyb25pemVkIChuZXdGcmFtZUxvY2spIHsK
LSAgICAgICAgaWYgKHJlbmRlcmVkQnVmZmVyICE9IG51bGwpIHsKLSAgICAgICAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICAgICAgICByZW5kZXJlZEJ1
ZmZlciA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1
cm5zIG51bGwgaWYgbm8gZGVjb2RlZCBidWZmZXIgaXMgYXZhaWxhYmxlLCBhbmQgb3RoZXJ3aXNl
IGEgRGVjb2RlZEJ5dGVCdWZmZXIuCi0gIC8vIFRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24g
aWYgY2FsbCBpcyBtYWRlIG9uIHRoZSB3cm9uZyB0aHJlYWQsIGlmIGNvbG9yIGZvcm1hdCBjaGFu
Z2VzIHRvIGFuCi0gIC8vIHVuc3VwcG9ydGVkIGZvcm1hdCwgb3IgaWYgfG1lZGlhQ29kZWN8IGlz
IG5vdCBpbiB0aGUgRXhlY3V0aW5nIHN0YXRlLiBUaHJvd3MgQ29kZWNFeGNlcHRpb24KLSAgLy8g
dXBvbiBjb2RlYyBlcnJvci4KLSAgcHJpdmF0ZSBEZWNvZGVkT3V0cHV0QnVmZmVyIGRlcXVldWVP
dXRwdXRCdWZmZXIoaW50IGRlcXVldWVUaW1lb3V0TXMpIHsKLSAgICBjaGVja09uTWVkaWFDb2Rl
Y1RocmVhZCgpOwotICAgIGlmIChkZWNvZGVTdGFydFRpbWVNcy5pc0VtcHR5KCkpIHsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0KLSAgICAvLyBEcmFpbiB0aGUgZGVjb2RlciB1bnRpbCByZWNl
aXZpbmcgYSBkZWNvZGVkIGJ1ZmZlciBvciBoaXR0aW5nCi0gICAgLy8gTWVkaWFDb2RlYy5JTkZP
X1RSWV9BR0FJTl9MQVRFUi4KLSAgICBmaW5hbCBNZWRpYUNvZGVjLkJ1ZmZlckluZm8gaW5mbyA9
IG5ldyBNZWRpYUNvZGVjLkJ1ZmZlckluZm8oKTsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAg
ZmluYWwgaW50IHJlc3VsdCA9Ci0gICAgICAgICAgbWVkaWFDb2RlYy5kZXF1ZXVlT3V0cHV0QnVm
ZmVyKGluZm8sIFRpbWVVbml0Lk1JTExJU0VDT05EUy50b01pY3JvcyhkZXF1ZXVlVGltZW91dE1z
KSk7Ci0gICAgICBzd2l0Y2ggKHJlc3VsdCkgewotICAgICAgICBjYXNlIE1lZGlhQ29kZWMuSU5G
T19PVVRQVVRfQlVGRkVSU19DSEFOR0VEOgotICAgICAgICAgIG91dHB1dEJ1ZmZlcnMgPSBtZWRp
YUNvZGVjLmdldE91dHB1dEJ1ZmZlcnMoKTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRGVj
b2RlciBvdXRwdXQgYnVmZmVycyBjaGFuZ2VkOiAiICsgb3V0cHV0QnVmZmVycy5sZW5ndGgpOwot
ICAgICAgICAgIGlmIChoYXNEZWNvZGVkRmlyc3RGcmFtZSkgewotICAgICAgICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgb3V0cHV0IGJ1ZmZlciBjaGFuZ2UgZXZl
bnQuIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlh
Q29kZWMuSU5GT19PVVRQVVRfRk9STUFUX0NIQU5HRUQ6Ci0gICAgICAgICAgTWVkaWFGb3JtYXQg
Zm9ybWF0ID0gbWVkaWFDb2RlYy5nZXRPdXRwdXRGb3JtYXQoKTsKLSAgICAgICAgICBMb2dnaW5n
LmQoVEFHLCAiRGVjb2RlciBmb3JtYXQgY2hhbmdlZDogIiArIGZvcm1hdC50b1N0cmluZygpKTsK
LSAgICAgICAgICBpbnQgbmV3X3dpZHRoID0gZm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQu
S0VZX1dJRFRIKTsKLSAgICAgICAgICBpbnQgbmV3X2hlaWdodCA9IGZvcm1hdC5nZXRJbnRlZ2Vy
KE1lZGlhRm9ybWF0LktFWV9IRUlHSFQpOwotICAgICAgICAgIGlmIChoYXNEZWNvZGVkRmlyc3RG
cmFtZSAmJiAobmV3X3dpZHRoICE9IHdpZHRoIHx8IG5ld19oZWlnaHQgIT0gaGVpZ2h0KSkgewot
ICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2l6ZSBj
aGFuZ2UuIENvbmZpZ3VyZWQgIiArIHdpZHRoICsgIioiICsgaGVpZ2h0Ci0gICAgICAgICAgICAg
ICAgKyAiLiBOZXcgIiArIG5ld193aWR0aCArICIqIiArIG5ld19oZWlnaHQpOwotICAgICAgICAg
IH0KLSAgICAgICAgICB3aWR0aCA9IGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9X
SURUSCk7Ci0gICAgICAgICAgaGVpZ2h0ID0gZm9ybWF0LmdldEludGVnZXIoTWVkaWFGb3JtYXQu
S0VZX0hFSUdIVCk7Ci0KLSAgICAgICAgICBpZiAoIXVzZVN1cmZhY2UgJiYgZm9ybWF0LmNvbnRh
aW5zS2V5KE1lZGlhRm9ybWF0LktFWV9DT0xPUl9GT1JNQVQpKSB7Ci0gICAgICAgICAgICBjb2xv
ckZvcm1hdCA9IGZvcm1hdC5nZXRJbnRlZ2VyKE1lZGlhRm9ybWF0LktFWV9DT0xPUl9GT1JNQVQp
OwotICAgICAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNvbG9yOiAweCIgKyBJbnRlZ2VyLnRvSGV4
U3RyaW5nKGNvbG9yRm9ybWF0KSk7Ci0gICAgICAgICAgICBpZiAoIXN1cHBvcnRlZENvbG9yTGlz
dC5jb250YWlucyhjb2xvckZvcm1hdCkpIHsKLSAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVn
YWxTdGF0ZUV4Y2VwdGlvbigiTm9uIHN1cHBvcnRlZCBjb2xvciBmb3JtYXQ6ICIgKyBjb2xvckZv
cm1hdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChmb3JtYXQu
Y29udGFpbnNLZXkoInN0cmlkZSIpKSB7Ci0gICAgICAgICAgICBzdHJpZGUgPSBmb3JtYXQuZ2V0
SW50ZWdlcigic3RyaWRlIik7Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChmb3JtYXQuY29u
dGFpbnNLZXkoInNsaWNlLWhlaWdodCIpKSB7Ci0gICAgICAgICAgICBzbGljZUhlaWdodCA9IGZv
cm1hdC5nZXRJbnRlZ2VyKCJzbGljZS1oZWlnaHQiKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
TG9nZ2luZy5kKFRBRywgIkZyYW1lIHN0cmlkZSBhbmQgc2xpY2UgaGVpZ2h0OiAiICsgc3RyaWRl
ICsgIiB4ICIgKyBzbGljZUhlaWdodCk7Ci0gICAgICAgICAgc3RyaWRlID0gTWF0aC5tYXgod2lk
dGgsIHN0cmlkZSk7Ci0gICAgICAgICAgc2xpY2VIZWlnaHQgPSBNYXRoLm1heChoZWlnaHQsIHNs
aWNlSGVpZ2h0KTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNZWRpYUNvZGVjLklO
Rk9fVFJZX0FHQUlOX0xBVEVSOgotICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgIGhhc0RlY29kZWRGaXJzdEZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICBU
aW1lU3RhbXBzIHRpbWVTdGFtcHMgPSBkZWNvZGVTdGFydFRpbWVNcy5yZW1vdmUoKTsKLSAgICAg
ICAgICBsb25nIGRlY29kZVRpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0g
dGltZVN0YW1wcy5kZWNvZGVTdGFydFRpbWVNczsKLSAgICAgICAgICBpZiAoZGVjb2RlVGltZU1z
ID4gTUFYX0RFQ09ERV9USU1FX01TKSB7Ci0gICAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiVmVy
eSBoaWdoIGRlY29kZSB0aW1lOiAiICsgZGVjb2RlVGltZU1zICsgIm1zIgotICAgICAgICAgICAg
ICAgICAgICArICIuIFEgc2l6ZTogIiArIGRlY29kZVN0YXJ0VGltZU1zLnNpemUoKQotICAgICAg
ICAgICAgICAgICAgICArICIuIE1pZ2h0IGJlIGNhdXNlZCBieSByZXN1bWluZyBIMjY0IGRlY29k
aW5nIGFmdGVyIGEgcGF1c2UuIik7Ci0gICAgICAgICAgICBkZWNvZGVUaW1lTXMgPSBNQVhfREVD
T0RFX1RJTUVfTVM7Ci0gICAgICAgICAgfQotICAgICAgICAgIHJldHVybiBuZXcgRGVjb2RlZE91
dHB1dEJ1ZmZlcihyZXN1bHQsIGluZm8ub2Zmc2V0LCBpbmZvLnNpemUsCi0gICAgICAgICAgICAg
IFRpbWVVbml0Lk1JQ1JPU0VDT05EUy50b01pbGxpcyhpbmZvLnByZXNlbnRhdGlvblRpbWVVcyks
IHRpbWVTdGFtcHMudGltZVN0YW1wTXMsCi0gICAgICAgICAgICAgIHRpbWVTdGFtcHMubnRwVGlt
ZVN0YW1wTXMsIGRlY29kZVRpbWVNcywgU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwot
ICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMgbnVsbCBpZiBubyBkZWNvZGVkIGJ1
ZmZlciBpcyBhdmFpbGFibGUsIGFuZCBvdGhlcndpc2UgYSBEZWNvZGVkVGV4dHVyZUJ1ZmZlci4K
LSAgLy8gVGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiBjYWxsIGlzIG1hZGUgb24gdGhl
IHdyb25nIHRocmVhZCwgaWYgY29sb3IgZm9ybWF0IGNoYW5nZXMgdG8gYW4KLSAgLy8gdW5zdXBw
b3J0ZWQgZm9ybWF0LCBvciBpZiB8bWVkaWFDb2RlY3wgaXMgbm90IGluIHRoZSBFeGVjdXRpbmcg
c3RhdGUuIFRocm93cyBDb2RlY0V4Y2VwdGlvbgotICAvLyB1cG9uIGNvZGVjIGVycm9yLiBJZiB8
ZGVxdWV1ZVRpbWVvdXRNc3wgPiAwLCB0aGUgb2xkZXN0IGRlY29kZWQgZnJhbWUgd2lsbCBiZSBk
cm9wcGVkIGlmCi0gIC8vIGEgZnJhbWUgY2FuJ3QgYmUgcmV0dXJuZWQuCi0gIHByaXZhdGUgRGVj
b2RlZFRleHR1cmVCdWZmZXIgZGVxdWV1ZVRleHR1cmVCdWZmZXIoaW50IGRlcXVldWVUaW1lb3V0
TXMpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIGlmICghdXNlU3VyZmFj
ZSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZGVxdWV1ZVRleHR1
cmUoKSBjYWxsZWQgZm9yIGJ5dGUgYnVmZmVyIGRlY29kaW5nLiIpOwotICAgIH0KLSAgICBEZWNv
ZGVkT3V0cHV0QnVmZmVyIG91dHB1dEJ1ZmZlciA9IGRlcXVldWVPdXRwdXRCdWZmZXIoZGVxdWV1
ZVRpbWVvdXRNcyk7Ci0gICAgaWYgKG91dHB1dEJ1ZmZlciAhPSBudWxsKSB7Ci0gICAgICBkZXF1
ZXVlZFN1cmZhY2VPdXRwdXRCdWZmZXJzLmFkZChvdXRwdXRCdWZmZXIpOwotICAgIH0KLQotICAg
IE1heWJlUmVuZGVyRGVjb2RlZFRleHR1cmVCdWZmZXIoKTsKLSAgICAvLyBDaGVjayBpZiB0aGVy
ZSBpcyB0ZXh0dXJlIHJlYWR5IG5vdyBieSB3YWl0aW5nIG1heCB8ZGVxdWV1ZVRpbWVvdXRNc3wu
Ci0gICAgRGVjb2RlZFRleHR1cmVCdWZmZXIgcmVuZGVyZWRCdWZmZXIgPSB0ZXh0dXJlTGlzdGVu
ZXIuZGVxdWV1ZVRleHR1cmVCdWZmZXIoZGVxdWV1ZVRpbWVvdXRNcyk7Ci0gICAgaWYgKHJlbmRl
cmVkQnVmZmVyICE9IG51bGwpIHsKLSAgICAgIE1heWJlUmVuZGVyRGVjb2RlZFRleHR1cmVCdWZm
ZXIoKTsKLSAgICAgIHJldHVybiByZW5kZXJlZEJ1ZmZlcjsKLSAgICB9Ci0KLSAgICBpZiAoKGRl
cXVldWVkU3VyZmFjZU91dHB1dEJ1ZmZlcnMuc2l6ZSgpCi0gICAgICAgICAgICAgICAgPj0gTWF0
aC5taW4oTUFYX1FVRVVFRF9PVVRQVVRCVUZGRVJTLCBvdXRwdXRCdWZmZXJzLmxlbmd0aCkKLSAg
ICAgICAgICAgIHx8IChkZXF1ZXVlVGltZW91dE1zID4gMCAmJiAhZGVxdWV1ZWRTdXJmYWNlT3V0
cHV0QnVmZmVycy5pc0VtcHR5KCkpKSkgewotICAgICAgKytkcm9wcGVkRnJhbWVzOwotICAgICAg
Ly8gRHJvcCB0aGUgb2xkZXN0IGZyYW1lIHN0aWxsIGluIGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1
ZmZlcnMuCi0gICAgICAvLyBUaGUgb2xkZXN0IGZyYW1lIGlzIG93bmVkIGJ5IHx0ZXh0dXJlTGlz
dGVuZXJ8IGFuZCBjYW4ndCBiZSBkcm9wcGVkIHNpbmNlCi0gICAgICAvLyBtZWRpYUNvZGVjLnJl
bGVhc2VPdXRwdXRCdWZmZXIgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQuCi0gICAgICBmaW5hbCBE
ZWNvZGVkT3V0cHV0QnVmZmVyIGRyb3BwZWRGcmFtZSA9IGRlcXVldWVkU3VyZmFjZU91dHB1dEJ1
ZmZlcnMucmVtb3ZlKCk7Ci0gICAgICBpZiAoZGVxdWV1ZVRpbWVvdXRNcyA+IDApIHsKLSAgICAg
ICAgLy8gVE9ETyhwZXJraik6IFJlLWFkZCB0aGUgYmVsb3cgbG9nIHdoZW4gVmlkZW9SZW5kZXJH
VUkgaGFzIGJlZW4gcmVtb3ZlZCBvciBmaXhlZCB0bwotICAgICAgICAvLyByZXR1cm4gdGhlIG9u
ZSBhbmQgb25seSB0ZXh0dXJlIGV2ZW4gaWYgaXQgZG9lcyBub3QgcmVuZGVyLgotICAgICAgICBM
b2dnaW5nLncoVEFHLCAiRHJhaW5pbmcgZGVjb2Rlci4gRHJvcHBpbmcgZnJhbWUgd2l0aCBUUzog
IgotICAgICAgICAgICAgICAgICsgZHJvcHBlZEZyYW1lLnByZXNlbnRhdGlvblRpbWVTdGFtcE1z
ICsgIi4gVG90YWwgbnVtYmVyIG9mIGRyb3BwZWQgZnJhbWVzOiAiCi0gICAgICAgICAgICAgICAg
KyBkcm9wcGVkRnJhbWVzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcs
ICJUb28gbWFueSBvdXRwdXQgYnVmZmVycyAiICsgZGVxdWV1ZWRTdXJmYWNlT3V0cHV0QnVmZmVy
cy5zaXplKCkKLSAgICAgICAgICAgICAgICArICIuIERyb3BwaW5nIGZyYW1lIHdpdGggVFM6ICIg
KyBkcm9wcGVkRnJhbWUucHJlc2VudGF0aW9uVGltZVN0YW1wTXMKLSAgICAgICAgICAgICAgICAr
ICIuIFRvdGFsIG51bWJlciBvZiBkcm9wcGVkIGZyYW1lczogIiArIGRyb3BwZWRGcmFtZXMpOwot
ICAgICAgfQotCi0gICAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoZHJvcHBlZEZy
YW1lLmluZGV4LCBmYWxzZSAvKiByZW5kZXIgKi8pOwotICAgICAgcmV0dXJuIG5ldyBEZWNvZGVk
VGV4dHVyZUJ1ZmZlcigwLCBudWxsLCBkcm9wcGVkRnJhbWUucHJlc2VudGF0aW9uVGltZVN0YW1w
TXMsCi0gICAgICAgICAgZHJvcHBlZEZyYW1lLnRpbWVTdGFtcE1zLCBkcm9wcGVkRnJhbWUubnRw
VGltZVN0YW1wTXMsIGRyb3BwZWRGcmFtZS5kZWNvZGVUaW1lTXMsCi0gICAgICAgICAgU3lzdGVt
Q2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBkcm9wcGVkRnJhbWUuZW5kRGVjb2RlVGltZU1zKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgTWF5YmVSZW5k
ZXJEZWNvZGVkVGV4dHVyZUJ1ZmZlcigpIHsKLSAgICBpZiAoZGVxdWV1ZWRTdXJmYWNlT3V0cHV0
QnVmZmVycy5pc0VtcHR5KCkgfHwgdGV4dHVyZUxpc3RlbmVyLmlzV2FpdGluZ0ZvclRleHR1cmUo
KSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBHZXQgdGhlIGZpcnN0IGZyYW1lIGlu
IHRoZSBxdWV1ZSBhbmQgcmVuZGVyIHRvIHRoZSBkZWNvZGVyIG91dHB1dCBzdXJmYWNlLgotICAg
IGZpbmFsIERlY29kZWRPdXRwdXRCdWZmZXIgYnVmZmVyID0gZGVxdWV1ZWRTdXJmYWNlT3V0cHV0
QnVmZmVycy5yZW1vdmUoKTsKLSAgICB0ZXh0dXJlTGlzdGVuZXIuYWRkQnVmZmVyVG9SZW5kZXIo
YnVmZmVyKTsKLSAgICBtZWRpYUNvZGVjLnJlbGVhc2VPdXRwdXRCdWZmZXIoYnVmZmVyLmluZGV4
LCB0cnVlIC8qIHJlbmRlciAqLyk7Ci0gIH0KLQotICAvLyBSZWxlYXNlIGEgZGVxdWV1ZWQgb3V0
cHV0IGJ5dGUgYnVmZmVyIGJhY2sgdG8gdGhlIGNvZGVjIGZvciByZS11c2UuIFNob3VsZCBvbmx5
IGJlIGNhbGxlZCBmb3IKLSAgLy8gbm9uLXN1cmZhY2UgZGVjb2RpbmcuCi0gIC8vIFRocm93cyBJ
bGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhlIGNhbGwgaXMgbWFkZSBvbiB0aGUgd3JvbmcgdGhy
ZWFkLCBpZiBjb2RlYyBpcyBjb25maWd1cmVkCi0gIC8vIGZvciBzdXJmYWNlIGRlY29kaW5nLCBv
ciBpZiB8bWVkaWFDb2RlY3wgaXMgbm90IGluIHRoZSBFeGVjdXRpbmcgc3RhdGUuIFRocm93cwot
ICAvLyBNZWRpYUNvZGVjLkNvZGVjRXhjZXB0aW9uIHVwb24gY29kZWMgZXJyb3IuCi0gIHByaXZh
dGUgdm9pZCByZXR1cm5EZWNvZGVkT3V0cHV0QnVmZmVyKGludCBpbmRleCkKLSAgICAgIHRocm93
cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24sIE1lZGlhQ29kZWMuQ29kZWNFeGNlcHRpb24gewotICAg
IGNoZWNrT25NZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgaWYgKHVzZVN1cmZhY2UpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInJldHVybkRlY29kZWRPdXRwdXRCdWZm
ZXIoKSBjYWxsZWQgZm9yIHN1cmZhY2UgZGVjb2RpbmcuIik7Ci0gICAgfQotICAgIG1lZGlhQ29k
ZWMucmVsZWFzZU91dHB1dEJ1ZmZlcihpbmRleCwgZmFsc2UgLyogcmVuZGVyICovKTsKLSAgfQot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNzM4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5U
YXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVjOwotaW1wb3J0IGFuZHJv
aWQubWVkaWEuTWVkaWFDb2RlY0luZm87Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5NZWRpYUNvZGVj
SW5mby5Db2RlY0NhcGFiaWxpdGllczsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlhQ29kZWNM
aXN0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFGb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5v
cGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci0KLWltcG9ydCBqYXZhLm5p
by5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGls
Lkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsK
LWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWltcG9ydCBqYXZh
LnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLy8gSmF2YS1zaWRlIG9mIHBlZXJjb25uZWN0
aW9uX2puaS5jYzpNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLgotLy8gVGhpcyBjbGFzcyBpcyBhbiBp
bXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIEphdmEgUGVlckNvbm5lY3Rpb24gQVBJLgotQFRh
cmdldEFwaSgxOSkKLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJsaWMgY2xh
c3MgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciB7Ci0gIC8vIFRoaXMgY2xhc3MgaXMgY29uc3RydWN0
ZWQsIG9wZXJhdGVkLCBhbmQgZGVzdHJveWVkIGJ5IGl0cyBDKysgaW5jYXJuYXRpb24sCi0gIC8v
IHNvIHRoZSBjbGFzcyBhbmQgaXRzIG1ldGhvZHMgaGF2ZSBub24tcHVibGljIHZpc2liaWxpdHku
ICBUaGUgQVBJIHRoaXMKLSAgLy8gY2xhc3MgZXhwb3NlcyBhaW1zIHRvIG1pbWljIHRoZSB3ZWJy
dGM6OlZpZGVvRW5jb2RlciBBUEkgYXMgY2xvc2VseSBhcwotICAvLyBwb3NzaWJseSB0byBtaW5p
bWl6ZSB0aGUgYW1vdW50IG9mIHRyYW5zbGF0aW9uIHdvcmsgbmVjZXNzYXJ5LgotCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciI7Ci0K
LSAgLy8gVHJhY2tzIHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGUuCi0gIHB1YmxpYyBlbnVtIFZpZGVv
Q29kZWNUeXBlIHsgVklERU9fQ09ERUNfVlA4LCBWSURFT19DT0RFQ19WUDksIFZJREVPX0NPREVD
X0gyNjQgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNRURJQV9DT0RFQ19SRUxFQVNF
X1RJTUVPVVRfTVMgPSA1MDAwOyAvLyBUaW1lb3V0IGZvciBjb2RlYyByZWxlYXNpbmcuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBERVFVRVVFX1RJTUVPVVQgPSAwOyAvLyBOb24tYmxvY2tp
bmcsIG5vIHdhaXQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCSVRSQVRFX0FESlVTVE1F
TlRfRlBTID0gMzA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhJTVVNX0lOSVRJQUxf
RlBTID0gMzA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGRvdWJsZSBCSVRSQVRFX0NPUlJFQ1RJ
T05fU0VDID0gMy4wOwotICAvLyBNYXhpbXVtIGJpdHJhdGUgY29ycmVjdGlvbiBzY2FsZSAtIG5v
IG1vcmUgdGhhbiAyIHRpbWVzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBkb3VibGUgQklUUkFU
RV9DT1JSRUNUSU9OX01BWF9TQ0FMRSA9IDI7Ci0gIC8vIEFtb3VudCBvZiBjb3JyZWN0aW9uIHN0
ZXBzIHRvIHJlYWNoIGNvcnJlY3Rpb24gbWF4aW11bSBzY2FsZS4KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IEJJVFJBVEVfQ09SUkVDVElPTl9TVEVQUyA9IDEwOwotCi0gIC8vIEFjdGl2ZSBy
dW5uaW5nIGVuY29kZXIgaW5zdGFuY2UuIFNldCBpbiBpbml0RW5jb2RlKCkgKGNhbGxlZCBmcm9t
IG5hdGl2ZSBjb2RlKQotICAvLyBhbmQgcmVzZXQgdG8gbnVsbCBpbiByZWxlYXNlKCkgY2FsbC4K
LSAgcHJpdmF0ZSBzdGF0aWMgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBydW5uaW5nSW5zdGFuY2Ug
PSBudWxsOwotICBwcml2YXRlIHN0YXRpYyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRXJyb3JDYWxs
YmFjayBlcnJvckNhbGxiYWNrID0gbnVsbDsKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGNvZGVjRXJy
b3JzID0gMDsKLSAgLy8gTGlzdCBvZiBkaXNhYmxlZCBjb2RlYyB0eXBlcyAtIGNhbiBiZSBzZXQg
ZnJvbSBhcHBsaWNhdGlvbi4KLSAgcHJpdmF0ZSBzdGF0aWMgU2V0PFN0cmluZz4gaHdFbmNvZGVy
RGlzYWJsZWRUeXBlcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLQotICBwcml2YXRlIFRocmVh
ZCBtZWRpYUNvZGVjVGhyZWFkOwotICBwcml2YXRlIE1lZGlhQ29kZWMgbWVkaWFDb2RlYzsKLSAg
cHJpdmF0ZSBCeXRlQnVmZmVyW10gb3V0cHV0QnVmZmVyczsKLSAgcHJpdmF0ZSBFZ2xCYXNlMTQg
ZWdsQmFzZTsKLSAgcHJpdmF0ZSBpbnQgd2lkdGg7Ci0gIHByaXZhdGUgaW50IGhlaWdodDsKLSAg
cHJpdmF0ZSBTdXJmYWNlIGlucHV0U3VyZmFjZTsKLSAgcHJpdmF0ZSBHbFJlY3REcmF3ZXIgZHJh
d2VyOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWUDhfTUlNRV9UWVBFID0gInZp
ZGVvL3gtdm5kLm9uMi52cDgiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVlA5X01J
TUVfVFlQRSA9ICJ2aWRlby94LXZuZC5vbjIudnA5IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIEgyNjRfTUlNRV9UWVBFID0gInZpZGVvL2F2YyI7Ci0KLSAgLy8gVHlwZSBvZiBiaXRy
YXRlIGFkanVzdG1lbnQgZm9yIHZpZGVvIGVuY29kZXIuCi0gIHB1YmxpYyBlbnVtIEJpdHJhdGVB
ZGp1c3RtZW50VHlwZSB7Ci0gICAgLy8gTm8gYWRqdXN0bWVudCAtIHZpZGVvIGVuY29kZXIgaGFz
IG5vIGtub3duIGJpdHJhdGUgcHJvYmxlbS4KLSAgICBOT19BREpVU1RNRU5ULAotICAgIC8vIEZy
YW1lcmF0ZSBiYXNlZCBiaXRyYXRlIGFkanVzdG1lbnQgaXMgcmVxdWlyZWQgLSBIVyBlbmNvZGVy
IGRvZXMgbm90IHVzZSBmcmFtZQotICAgIC8vIHRpbWVzdGFtcHMgdG8gY2FsY3VsYXRlIGZyYW1l
IGJpdHJhdGUgYnVkZ2V0IGFuZCBpbnN0ZWFkIGlzIHJlbHlpbmcgb24gaW5pdGlhbAotICAgIC8v
IGZwcyBjb25maWd1cmF0aW9uIGFzc3VtaW5nIHRoYXQgYWxsIGZyYW1lcyBhcmUgY29taW5nIGF0
IGZpeGVkIGluaXRpYWwgZnJhbWUgcmF0ZS4KLSAgICBGUkFNRVJBVEVfQURKVVNUTUVOVCwKLSAg
ICAvLyBEeW5hbWljIGJpdHJhdGUgYWRqdXN0bWVudCBpcyByZXF1aXJlZCAtIEhXIGVuY29kZXIg
dXNlZCBmcmFtZSB0aW1lc3RhbXBzLCBidXQgYWN0dWFsCi0gICAgLy8gYml0cmF0ZSBkZXZpYXRl
cyB0b28gbXVjaCBmcm9tIHRoZSB0YXJnZXQgdmFsdWUuCi0gICAgRFlOQU1JQ19BREpVU1RNRU5U
Ci0gIH0KLQotICAvLyBDbGFzcyBkZXNjcmliaW5nIHN1cHBvcnRlZCBtZWRpYSBjb2RlYyBwcm9w
ZXJ0aWVzLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNZWRpYUNvZGVjUHJvcGVydGllcyB7Ci0g
ICAgcHVibGljIGZpbmFsIFN0cmluZyBjb2RlY1ByZWZpeDsKLSAgICAvLyBNaW5pbXVtIEFuZHJv
aWQgU0RLIHJlcXVpcmVkIGZvciB0aGlzIGNvZGVjIHRvIGJlIHVzZWQuCi0gICAgcHVibGljIGZp
bmFsIGludCBtaW5TZGs7Ci0gICAgLy8gRmxhZyBpZiBlbmNvZGVyIGltcGxlbWVudGF0aW9uIGRv
ZXMgbm90IHVzZSBmcmFtZSB0aW1lc3RhbXBzIHRvIGNhbGN1bGF0ZSBmcmFtZSBiaXRyYXRlCi0g
ICAgLy8gYnVkZ2V0IGFuZCBpbnN0ZWFkIGlzIHJlbHlpbmcgb24gaW5pdGlhbCBmcHMgY29uZmln
dXJhdGlvbiBhc3N1bWluZyB0aGF0IGFsbCBmcmFtZXMgYXJlCi0gICAgLy8gY29taW5nIGF0IGZp
eGVkIGluaXRpYWwgZnJhbWUgcmF0ZS4gQml0cmF0ZSBhZGp1c3RtZW50IGlzIHJlcXVpcmVkIGZv
ciB0aGlzIGNhc2UuCi0gICAgcHVibGljIGZpbmFsIEJpdHJhdGVBZGp1c3RtZW50VHlwZSBiaXRy
YXRlQWRqdXN0bWVudFR5cGU7Ci0KLSAgICBNZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICAg
U3RyaW5nIGNvZGVjUHJlZml4LCBpbnQgbWluU2RrLCBCaXRyYXRlQWRqdXN0bWVudFR5cGUgYml0
cmF0ZUFkanVzdG1lbnRUeXBlKSB7Ci0gICAgICB0aGlzLmNvZGVjUHJlZml4ID0gY29kZWNQcmVm
aXg7Ci0gICAgICB0aGlzLm1pblNkayA9IG1pblNkazsKLSAgICAgIHRoaXMuYml0cmF0ZUFkanVz
dG1lbnRUeXBlID0gYml0cmF0ZUFkanVzdG1lbnRUeXBlOwotICAgIH0KLSAgfQotCi0gIC8vIExp
c3Qgb2Ygc3VwcG9ydGVkIEhXIFZQOCBlbmNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
TWVkaWFDb2RlY1Byb3BlcnRpZXMgcWNvbVZwOEh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVj
UHJvcGVydGllcygKLSAgICAgICJPTVgucWNvbS4iLCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtB
VCwgQml0cmF0ZUFkanVzdG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllcyBleHlub3NWcDhId1Byb3BlcnRpZXMgPSBuZXcg
TWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAiT01YLkV4eW5vcy4iLCBCdWlsZC5WRVJTSU9O
X0NPREVTLk0sIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5EWU5BTUlDX0FESlVTVE1FTlQpOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVydGllc1tdIHZwOEh3TGlzdCA9Ci0g
ICAgICBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB7cWNvbVZwOEh3UHJvcGVydGllcywgZXh5
bm9zVnA4SHdQcm9wZXJ0aWVzfTsKLQotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBIVyBWUDkgZW5j
b2RlcnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIHFjb21W
cDlId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXMoCi0gICAgICAiT01YLnFj
b20uIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5NLCBCaXRyYXRlQWRqdXN0bWVudFR5cGUuTk9fQURK
VVNUTUVOVCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzIGV4
eW5vc1ZwOUh3UHJvcGVydGllcyA9IG5ldyBNZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJP
TVguRXh5bm9zLiIsIEJ1aWxkLlZFUlNJT05fQ09ERVMuTSwgQml0cmF0ZUFkanVzdG1lbnRUeXBl
Lk5PX0FESlVTVE1FTlQpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBNZWRpYUNvZGVjUHJvcGVy
dGllc1tdIHZwOUh3TGlzdCA9Ci0gICAgICBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB7cWNv
bVZwOUh3UHJvcGVydGllcywgZXh5bm9zVnA5SHdQcm9wZXJ0aWVzfTsKLQotICAvLyBMaXN0IG9m
IHN1cHBvcnRlZCBIVyBILjI2NCBlbmNvZGVycy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTWVk
aWFDb2RlY1Byb3BlcnRpZXMgcWNvbUgyNjRId1Byb3BlcnRpZXMgPSBuZXcgTWVkaWFDb2RlY1By
b3BlcnRpZXMoCi0gICAgICAiT01YLnFjb20uIiwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQs
IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UKTsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgTWVkaWFDb2RlY1Byb3BlcnRpZXMgZXh5bm9zSDI2NEh3UHJvcGVydGllcyA9IG5ldyBN
ZWRpYUNvZGVjUHJvcGVydGllcygKLSAgICAgICJPTVguRXh5bm9zLiIsIEJ1aWxkLlZFUlNJT05f
Q09ERVMuTE9MTElQT1AsIEJpdHJhdGVBZGp1c3RtZW50VHlwZS5GUkFNRVJBVEVfQURKVVNUTUVO
VCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE1lZGlhQ29kZWNQcm9wZXJ0aWVzW10gaDI2NEh3
TGlzdCA9Ci0gICAgICBuZXcgTWVkaWFDb2RlY1Byb3BlcnRpZXNbXSB7cWNvbUgyNjRId1Byb3Bl
cnRpZXMsIGV4eW5vc0gyNjRId1Byb3BlcnRpZXN9OwotCi0gIC8vIExpc3Qgb2YgZGV2aWNlcyB3
aXRoIHBvb3IgSC4yNjQgZW5jb2RlciBxdWFsaXR5LgotICAvLyBIVyBILjI2NCBlbmNvZGVyIG9u
IGJlbG93IGRldmljZXMgaGFzIHBvb3IgYml0cmF0ZSBjb250cm9sIC0gYWN0dWFsCi0gIC8vIGJp
dHJhdGVzIGRldmlhdGVzIGEgbG90IGZyb20gdGhlIHRhcmdldCB2YWx1ZS4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nW10gSDI2NF9IV19FWENFUFRJT05fTU9ERUxTID0KLSAgICAgIG5l
dyBTdHJpbmdbXSB7IlNBTVNVTkctU0dILUkzMzciLCAiTmV4dXMgNyIsICJOZXh1cyA0In07Ci0K
LSAgLy8gQml0cmF0ZSBtb2RlcyAtIHNob3VsZCBiZSBpbiBzeW5jIHdpdGggT01YX1ZJREVPX0NP
TlRST0xSQVRFVFlQRSBkZWZpbmVkCi0gIC8vIGluIE9NWF9WaWRlby5oCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBWSURFT19Db250cm9sUmF0ZUNvbnN0YW50ID0gMjsKLSAgLy8gTlYxMiBj
b2xvciBmb3JtYXQgc3VwcG9ydGVkIGJ5IFFDT00gY29kZWMsIGJ1dCBub3QgZGVjbGFyZWQgaW4g
TWVkaWFDb2RlYyAtCi0gIC8vIHNlZSAvaGFyZHdhcmUvcWNvbS9tZWRpYS9tbS1jb3JlL2luYy9P
TVhfUUNPTUV4dG5zLmgKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTE9SX1FDT01fRk9S
TUFUWVVWNDIwUGFja2VkU2VtaVBsYW5hcjMybSA9IDB4N0ZBMzBDMDQ7Ci0gIC8vIEFsbG93YWJs
ZSBjb2xvciBmb3JtYXRzIHN1cHBvcnRlZCBieSBjb2RlYyAtIGluIG9yZGVyIG9mIHByZWZlcmVu
Y2UuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludFtdIHN1cHBvcnRlZENvbG9yTGlzdCA9IHtD
b2RlY0NhcGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIsCi0gICAgICBDb2RlY0Nh
cGFiaWxpdGllcy5DT0xPUl9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyLAotICAgICAgQ29kZWNDYXBh
YmlsaXRpZXMuQ09MT1JfUUNPTV9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyLAotICAgICAgQ09MT1Jf
UUNPTV9GT1JNQVRZVVY0MjBQYWNrZWRTZW1pUGxhbmFyMzJtfTsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50W10gc3VwcG9ydGVkU3VyZmFjZUNvbG9yTGlzdCA9IHtDb2RlY0NhcGFiaWxpdGll
cy5DT0xPUl9Gb3JtYXRTdXJmYWNlfTsKLSAgcHJpdmF0ZSBWaWRlb0NvZGVjVHlwZSB0eXBlOwot
ICBwcml2YXRlIGludCBjb2xvckZvcm1hdDsgLy8gVXNlZCBieSBuYXRpdmUgY29kZS4KLQotICAv
LyBWYXJpYWJsZXMgdXNlZCBmb3IgZHluYW1pYyBiaXRyYXRlIGFkanVzdG1lbnQuCi0gIHByaXZh
dGUgQml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9IEJpdHJhdGVB
ZGp1c3RtZW50VHlwZS5OT19BREpVU1RNRU5UOwotICBwcml2YXRlIGRvdWJsZSBiaXRyYXRlQWNj
dW11bGF0b3I7Ci0gIHByaXZhdGUgZG91YmxlIGJpdHJhdGVBY2N1bXVsYXRvck1heDsKLSAgcHJp
dmF0ZSBkb3VibGUgYml0cmF0ZU9ic2VydmF0aW9uVGltZU1zOwotICBwcml2YXRlIGludCBiaXRy
YXRlQWRqdXN0bWVudFNjYWxlRXhwOwotICBwcml2YXRlIGludCB0YXJnZXRCaXRyYXRlQnBzOwot
ICBwcml2YXRlIGludCB0YXJnZXRGcHM7Ci0KLSAgLy8gU1BTIGFuZCBQUFMgTkFMcyAoQ29uZmln
IGZyYW1lKSBmb3IgSC4yNjQuCi0gIHByaXZhdGUgQnl0ZUJ1ZmZlciBjb25maWdEYXRhID0gbnVs
bDsKLQotICAvLyBNZWRpYUNvZGVjIGVycm9yIGhhbmRsZXIgLSBpbnZva2VkIHdoZW4gY3JpdGlj
YWwgZXJyb3IgaGFwcGVucyB3aGljaCBtYXkgcHJldmVudAotICAvLyBmdXJ0aGVyIHVzZSBvZiBt
ZWRpYSBjb2RlYyBBUEkuIE5vdyBpdCBtZWFucyB0aGF0IG9uZSBvZiBtZWRpYSBjb2RlYyBpbnN0
YW5jZXMKLSAgLy8gaXMgaGFuZ2luZyBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIGluIHRoZSBu
ZXh0IGNhbGwuCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIE1lZGlhQ29kZWNWaWRlb0VuY29k
ZXJFcnJvckNhbGxiYWNrIHsKLSAgICB2b2lkIG9uTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckNyaXRp
Y2FsRXJyb3IoaW50IGNvZGVjRXJyb3JzKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBz
ZXRFcnJvckNhbGxiYWNrKE1lZGlhQ29kZWNWaWRlb0VuY29kZXJFcnJvckNhbGxiYWNrIGVycm9y
Q2FsbGJhY2spIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU2V0IGVycm9yIGNhbGxiYWNrIik7Ci0g
ICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5lcnJvckNhbGxiYWNrID0gZXJyb3JDYWxsYmFjazsK
LSAgfQotCi0gIC8vIEZ1bmN0aW9ucyB0byBkaXNhYmxlIEhXIGVuY29kaW5nIC0gY2FuIGJlIGNh
bGxlZCBmcm9tIGFwcGxpY2F0aW9ucyBmb3IgcGxhdGZvcm1zCi0gIC8vIHdoaWNoIGhhdmUga25v
d24gSFcgZGVjb2RpbmcgcHJvYmxlbXMuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBkaXNhYmxlVnA4
SHdDb2RlYygpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAiVlA4IGVuY29kaW5nIGlzIGRpc2FibGVk
IGJ5IGFwcGxpY2F0aW9uLiIpOwotICAgIGh3RW5jb2RlckRpc2FibGVkVHlwZXMuYWRkKFZQOF9N
SU1FX1RZUEUpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyB2b2lkIGRpc2FibGVWcDlId0NvZGVj
KCkgewotICAgIExvZ2dpbmcudyhUQUcsICJWUDkgZW5jb2RpbmcgaXMgZGlzYWJsZWQgYnkgYXBw
bGljYXRpb24uIik7Ci0gICAgaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5hZGQoVlA5X01JTUVfVFlQ
RSk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgZGlzYWJsZUgyNjRId0NvZGVjKCkgewot
ICAgIExvZ2dpbmcudyhUQUcsICJILjI2NCBlbmNvZGluZyBpcyBkaXNhYmxlZCBieSBhcHBsaWNh
dGlvbi4iKTsKLSAgICBod0VuY29kZXJEaXNhYmxlZFR5cGVzLmFkZChIMjY0X01JTUVfVFlQRSk7
Ci0gIH0KLQotICAvLyBGdW5jdGlvbnMgdG8gcXVlcnkgaWYgSFcgZW5jb2RpbmcgaXMgc3VwcG9y
dGVkLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNWcDhId1N1cHBvcnRlZCgpIHsKLSAgICBy
ZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoVlA4X01JTUVfVFlQRSkKLSAg
ICAgICAgJiYgKGZpbmRId0VuY29kZXIoVlA4X01JTUVfVFlQRSwgdnA4SHdMaXN0LCBzdXBwb3J0
ZWRDb2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlz
VnA5SHdTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuICFod0VuY29kZXJEaXNhYmxlZFR5cGVzLmNv
bnRhaW5zKFZQOV9NSU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVyKFZQOV9NSU1F
X1RZUEUsIHZwOUh3TGlzdCwgc3VwcG9ydGVkQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0gyNjRId1N1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4g
IWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoSDI2NF9NSU1FX1RZUEUpCi0gICAgICAg
ICYmIChmaW5kSHdFbmNvZGVyKEgyNjRfTUlNRV9UWVBFLCBoMjY0SHdMaXN0LCBzdXBwb3J0ZWRD
b2xvckxpc3QpICE9IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA4
SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkgewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJs
ZWRUeXBlcy5jb250YWlucyhWUDhfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZEh3RW5jb2Rl
cihWUDhfTUlNRV9UWVBFLCB2cDhId0xpc3QsIHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QpICE9
IG51bGwpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzVnA5SHdTdXBwb3J0ZWRV
c2luZ1RleHR1cmVzKCkgewotICAgIHJldHVybiAhaHdFbmNvZGVyRGlzYWJsZWRUeXBlcy5jb250
YWlucyhWUDlfTUlNRV9UWVBFKQotICAgICAgICAmJiAoZmluZEh3RW5jb2RlcihWUDlfTUlNRV9U
WVBFLCB2cDlId0xpc3QsIHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QpICE9IG51bGwpOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzSDI2NEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJl
cygpIHsKLSAgICByZXR1cm4gIWh3RW5jb2RlckRpc2FibGVkVHlwZXMuY29udGFpbnMoSDI2NF9N
SU1FX1RZUEUpCi0gICAgICAgICYmIChmaW5kSHdFbmNvZGVyKEgyNjRfTUlNRV9UWVBFLCBoMjY0
SHdMaXN0LCBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0KSAhPSBudWxsKTsKLSAgfQotCi0gIC8v
IEhlbHBlciBzdHJ1Y3QgZm9yIGZpbmRId0VuY29kZXIoKSBiZWxvdy4KLSAgcHJpdmF0ZSBzdGF0
aWMgY2xhc3MgRW5jb2RlclByb3BlcnRpZXMgewotICAgIHB1YmxpYyBFbmNvZGVyUHJvcGVydGll
cygKLSAgICAgICAgU3RyaW5nIGNvZGVjTmFtZSwgaW50IGNvbG9yRm9ybWF0LCBCaXRyYXRlQWRq
dXN0bWVudFR5cGUgYml0cmF0ZUFkanVzdG1lbnRUeXBlKSB7Ci0gICAgICB0aGlzLmNvZGVjTmFt
ZSA9IGNvZGVjTmFtZTsKLSAgICAgIHRoaXMuY29sb3JGb3JtYXQgPSBjb2xvckZvcm1hdDsKLSAg
ICAgIHRoaXMuYml0cmF0ZUFkanVzdG1lbnRUeXBlID0gYml0cmF0ZUFkanVzdG1lbnRUeXBlOwot
ICAgIH0KLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGNvZGVjTmFtZTsgLy8gT3Blbk1heCBjb21w
b25lbnQgbmFtZSBmb3IgSFcgY29kZWMuCi0gICAgcHVibGljIGZpbmFsIGludCBjb2xvckZvcm1h
dDsgLy8gQ29sb3IgZm9ybWF0IHN1cHBvcnRlZCBieSBjb2RlYy4KLSAgICBwdWJsaWMgZmluYWwg
Qml0cmF0ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3RtZW50VHlwZTsgLy8gQml0cmF0ZSBh
ZGp1c3RtZW50IHR5cGUKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIEVuY29kZXJQcm9wZXJ0aWVz
IGZpbmRId0VuY29kZXIoCi0gICAgICBTdHJpbmcgbWltZSwgTWVkaWFDb2RlY1Byb3BlcnRpZXNb
XSBzdXBwb3J0ZWRId0NvZGVjUHJvcGVydGllcywgaW50W10gY29sb3JMaXN0KSB7Ci0gICAgLy8g
TWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzIGlzIG1pc3NpbmcgZm9yIEpCIGFuZCBiZWxvdywgc28g
Yml0cmF0ZQotICAgIC8vIGNhbiBub3QgYmUgYWRqdXN0ZWQgZHluYW1pY2FsbHkuCi0gICAgaWYg
KEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0g
ICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiBkZXZpY2UgaXMgaW4g
SC4yNjQgZXhjZXB0aW9uIGxpc3QuCi0gICAgaWYgKG1pbWUuZXF1YWxzKEgyNjRfTUlNRV9UWVBF
KSkgewotICAgICAgTGlzdDxTdHJpbmc+IGV4Y2VwdGlvbk1vZGVscyA9IEFycmF5cy5hc0xpc3Qo
SDI2NF9IV19FWENFUFRJT05fTU9ERUxTKTsKLSAgICAgIGlmIChleGNlcHRpb25Nb2RlbHMuY29u
dGFpbnMoQnVpbGQuTU9ERUwpKSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJNb2RlbDogIiAr
IEJ1aWxkLk1PREVMICsgIiBoYXMgYmxhY2sgbGlzdGVkIEguMjY0IGVuY29kZXIuIik7Ci0gICAg
ICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgTWVkaWFDb2RlY0xpc3QuZ2V0Q29kZWNDb3VudCgpOyArK2kpIHsKLSAgICAgIE1lZGlhQ29k
ZWNJbmZvIGluZm8gPSBudWxsOwotICAgICAgdHJ5IHsKLSAgICAgICAgaW5mbyA9IE1lZGlhQ29k
ZWNMaXN0LmdldENvZGVjSW5mb0F0KGkpOwotICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbm5vdCByZXRyaWV2ZSBl
bmNvZGVyIGNvZGVjIGluZm8iLCBlKTsKLSAgICAgIH0KLSAgICAgIGlmIChpbmZvID09IG51bGwg
fHwgIWluZm8uaXNFbmNvZGVyKCkpIHsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAg
ICBTdHJpbmcgbmFtZSA9IG51bGw7Ci0gICAgICBmb3IgKFN0cmluZyBtaW1lVHlwZSA6IGluZm8u
Z2V0U3VwcG9ydGVkVHlwZXMoKSkgewotICAgICAgICBpZiAobWltZVR5cGUuZXF1YWxzKG1pbWUp
KSB7Ci0gICAgICAgICAgbmFtZSA9IGluZm8uZ2V0TmFtZSgpOwotICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAobmFtZSA9PSBudWxsKSB7Ci0gICAgICAgIGNv
bnRpbnVlOyAvLyBObyBIVyBzdXBwb3J0IGluIHRoaXMgY29kZWM7IHRyeSB0aGUgbmV4dCBvbmUu
Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLnYoVEFHLCAiRm91bmQgY2FuZGlkYXRlIGVuY29kZXIg
IiArIG5hbWUpOwotCi0gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHN1cHBvcnRlZCBIVyBlbmNv
ZGVyLgotICAgICAgYm9vbGVhbiBzdXBwb3J0ZWRDb2RlYyA9IGZhbHNlOwotICAgICAgQml0cmF0
ZUFkanVzdG1lbnRUeXBlIGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9IEJpdHJhdGVBZGp1c3RtZW50
VHlwZS5OT19BREpVU1RNRU5UOwotICAgICAgZm9yIChNZWRpYUNvZGVjUHJvcGVydGllcyBjb2Rl
Y1Byb3BlcnRpZXMgOiBzdXBwb3J0ZWRId0NvZGVjUHJvcGVydGllcykgewotICAgICAgICBpZiAo
bmFtZS5zdGFydHNXaXRoKGNvZGVjUHJvcGVydGllcy5jb2RlY1ByZWZpeCkpIHsKLSAgICAgICAg
ICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgY29kZWNQcm9wZXJ0aWVzLm1pblNkaykgewot
ICAgICAgICAgICAgTG9nZ2luZy53KAotICAgICAgICAgICAgICAgIFRBRywgIkNvZGVjICIgKyBu
YW1lICsgIiBpcyBkaXNhYmxlZCBkdWUgdG8gU0RLIHZlcnNpb24gIiArIEJ1aWxkLlZFUlNJT04u
U0RLX0lOVCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICB9Ci0gICAgICAgICAg
aWYgKGNvZGVjUHJvcGVydGllcy5iaXRyYXRlQWRqdXN0bWVudFR5cGUgIT0gQml0cmF0ZUFkanVz
dG1lbnRUeXBlLk5PX0FESlVTVE1FTlQpIHsKLSAgICAgICAgICAgIGJpdHJhdGVBZGp1c3RtZW50
VHlwZSA9IGNvZGVjUHJvcGVydGllcy5iaXRyYXRlQWRqdXN0bWVudFR5cGU7Ci0gICAgICAgICAg
ICBMb2dnaW5nLncoCi0gICAgICAgICAgICAgICAgVEFHLCAiQ29kZWMgIiArIG5hbWUgKyAiIHJl
cXVpcmVzIGJpdHJhdGUgYWRqdXN0bWVudDogIiArIGJpdHJhdGVBZGp1c3RtZW50VHlwZSk7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIHN1cHBvcnRlZENvZGVjID0gdHJ1ZTsKLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgaWYgKCFzdXBwb3J0ZWRDb2RlYykgewot
ICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLy8gQ2hlY2sgaWYgSFcgY29kZWMg
c3VwcG9ydHMga25vd24gY29sb3IgZm9ybWF0LgotICAgICAgQ29kZWNDYXBhYmlsaXRpZXMgY2Fw
YWJpbGl0aWVzOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2FwYWJpbGl0aWVzID0gaW5mby5nZXRD
YXBhYmlsaXRpZXNGb3JUeXBlKG1pbWUpOwotICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbm5vdCByZXRyaWV2ZSBl
bmNvZGVyIGNhcGFiaWxpdGllcyIsIGUpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAg
ICAgIGZvciAoaW50IGNvbG9yRm9ybWF0IDogY2FwYWJpbGl0aWVzLmNvbG9yRm9ybWF0cykgewot
ICAgICAgICBMb2dnaW5nLnYoVEFHLCAiICAgQ29sb3I6IDB4IiArIEludGVnZXIudG9IZXhTdHJp
bmcoY29sb3JGb3JtYXQpKTsKLSAgICAgIH0KLQotICAgICAgZm9yIChpbnQgc3VwcG9ydGVkQ29s
b3JGb3JtYXQgOiBjb2xvckxpc3QpIHsKLSAgICAgICAgZm9yIChpbnQgY29kZWNDb2xvckZvcm1h
dCA6IGNhcGFiaWxpdGllcy5jb2xvckZvcm1hdHMpIHsKLSAgICAgICAgICBpZiAoY29kZWNDb2xv
ckZvcm1hdCA9PSBzdXBwb3J0ZWRDb2xvckZvcm1hdCkgewotICAgICAgICAgICAgLy8gRm91bmQg
c3VwcG9ydGVkIEhXIGVuY29kZXIuCi0gICAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiRm91bmQg
dGFyZ2V0IGVuY29kZXIgZm9yIG1pbWUgIiArIG1pbWUgKyAiIDogIiArIG5hbWUgKyAiLiBDb2xv
cjogMHgiCi0gICAgICAgICAgICAgICAgICAgICsgSW50ZWdlci50b0hleFN0cmluZyhjb2RlY0Nv
bG9yRm9ybWF0KSArICIuIEJpdHJhdGUgYWRqdXN0bWVudDogIgotICAgICAgICAgICAgICAgICAg
ICArIGJpdHJhdGVBZGp1c3RtZW50VHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IEVuY29k
ZXJQcm9wZXJ0aWVzKG5hbWUsIGNvZGVjQ29sb3JGb3JtYXQsIGJpdHJhdGVBZGp1c3RtZW50VHlw
ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBu
dWxsOyAvLyBObyBIVyBlbmNvZGVyLgotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrT25NZWRp
YUNvZGVjVGhyZWFkKCkgewotICAgIGlmIChtZWRpYUNvZGVjVGhyZWFkLmdldElkKCkgIT0gVGhy
ZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBwcmV2aW91c2x5IG9wZXJhdGVkIG9uICIg
KyBtZWRpYUNvZGVjVGhyZWFkCi0gICAgICAgICAgKyAiIGJ1dCBpcyBub3cgY2FsbGVkIG9uICIg
KyBUaHJlYWQuY3VycmVudFRocmVhZCgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGlj
IHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAgIGlmIChydW5uaW5nSW5zdGFuY2UgIT0gbnVs
bCAmJiBydW5uaW5nSW5zdGFuY2UubWVkaWFDb2RlY1RocmVhZCAhPSBudWxsKSB7Ci0gICAgICBT
dGFja1RyYWNlRWxlbWVudFtdIG1lZGlhQ29kZWNTdGFja1RyYWNlcyA9IHJ1bm5pbmdJbnN0YW5j
ZS5tZWRpYUNvZGVjVGhyZWFkLmdldFN0YWNrVHJhY2UoKTsKLSAgICAgIGlmIChtZWRpYUNvZGVj
U3RhY2tUcmFjZXMubGVuZ3RoID4gMCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTWVkaWFD
b2RlY1ZpZGVvRW5jb2RlciBzdGFja3MgdHJhY2U6Iik7Ci0gICAgICAgIGZvciAoU3RhY2tUcmFj
ZUVsZW1lbnQgc3RhY2tUcmFjZSA6IG1lZGlhQ29kZWNTdGFja1RyYWNlcykgewotICAgICAgICAg
IExvZ2dpbmcuZChUQUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgTWVkaWFDb2RlYyBjcmVhdGVCeUNvZGVjTmFtZShT
dHJpbmcgY29kZWNOYW1lKSB7Ci0gICAgdHJ5IHsKLSAgICAgIC8vIEluIHRoZSBMLVNESyB0aGlz
IGNhbGwgY2FuIHRocm93IElPRXhjZXB0aW9uIHNvIGluIG9yZGVyIHRvIHdvcmsgaW4KLSAgICAg
IC8vIGJvdGggY2FzZXMgY2F0Y2ggYW4gZXhjZXB0aW9uLgotICAgICAgcmV0dXJuIE1lZGlhQ29k
ZWMuY3JlYXRlQnlDb2RlY05hbWUoY29kZWNOYW1lKTsKLSAgICB9IGNhdGNoIChFeGNlcHRpb24g
ZSkgewotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICB9Ci0KLSAgYm9vbGVhbiBpbml0RW5j
b2RlKFZpZGVvQ29kZWNUeXBlIHR5cGUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGticHMs
IGludCBmcHMsCi0gICAgICBFZ2xCYXNlMTQuQ29udGV4dCBzaGFyZWRDb250ZXh0KSB7Ci0gICAg
ZmluYWwgYm9vbGVhbiB1c2VTdXJmYWNlID0gc2hhcmVkQ29udGV4dCAhPSBudWxsOwotICAgIExv
Z2dpbmcuZChUQUcsICJKYXZhIGluaXRFbmNvZGU6ICIgKyB0eXBlICsgIiA6ICIgKyB3aWR0aCAr
ICIgeCAiICsgaGVpZ2h0ICsgIi4gQCAiICsga2JwcwotICAgICAgICAgICAgKyAiIGticHMuIEZw
czogIiArIGZwcyArICIuIEVuY29kZSBmcm9tIHRleHR1cmUgOiAiICsgdXNlU3VyZmFjZSk7Ci0K
LSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
aWYgKG1lZGlhQ29kZWNUaHJlYWQgIT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oIkZvcmdvdCB0byByZWxlYXNlKCk/Iik7Ci0gICAgfQotICAgIEVuY29kZXJQcm9w
ZXJ0aWVzIHByb3BlcnRpZXMgPSBudWxsOwotICAgIFN0cmluZyBtaW1lID0gbnVsbDsKLSAgICBp
bnQga2V5RnJhbWVJbnRlcnZhbFNlYyA9IDA7Ci0gICAgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5
cGUuVklERU9fQ09ERUNfVlA4KSB7Ci0gICAgICBtaW1lID0gVlA4X01JTUVfVFlQRTsKLSAgICAg
IHByb3BlcnRpZXMgPSBmaW5kSHdFbmNvZGVyKAotICAgICAgICAgIFZQOF9NSU1FX1RZUEUsIHZw
OEh3TGlzdCwgdXNlU3VyZmFjZSA/IHN1cHBvcnRlZFN1cmZhY2VDb2xvckxpc3QgOiBzdXBwb3J0
ZWRDb2xvckxpc3QpOwotICAgICAga2V5RnJhbWVJbnRlcnZhbFNlYyA9IDEwMDsKLSAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA5KSB7Ci0gICAgICBt
aW1lID0gVlA5X01JTUVfVFlQRTsKLSAgICAgIHByb3BlcnRpZXMgPSBmaW5kSHdFbmNvZGVyKAot
ICAgICAgICAgIFZQOV9NSU1FX1RZUEUsIHZwOUh3TGlzdCwgdXNlU3VyZmFjZSA/IHN1cHBvcnRl
ZFN1cmZhY2VDb2xvckxpc3QgOiBzdXBwb3J0ZWRDb2xvckxpc3QpOwotICAgICAga2V5RnJhbWVJ
bnRlcnZhbFNlYyA9IDEwMDsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUu
VklERU9fQ09ERUNfSDI2NCkgewotICAgICAgbWltZSA9IEgyNjRfTUlNRV9UWVBFOwotICAgICAg
cHJvcGVydGllcyA9IGZpbmRId0VuY29kZXIoCi0gICAgICAgICAgSDI2NF9NSU1FX1RZUEUsIGgy
NjRId0xpc3QsIHVzZVN1cmZhY2UgPyBzdXBwb3J0ZWRTdXJmYWNlQ29sb3JMaXN0IDogc3VwcG9y
dGVkQ29sb3JMaXN0KTsKLSAgICAgIGtleUZyYW1lSW50ZXJ2YWxTZWMgPSAyMDsKLSAgICB9Ci0g
ICAgaWYgKHByb3BlcnRpZXMgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oIkNhbiBub3QgZmluZCBIVyBlbmNvZGVyIGZvciAiICsgdHlwZSk7Ci0gICAgfQotICAg
IHJ1bm5pbmdJbnN0YW5jZSA9IHRoaXM7IC8vIEVuY29kZXIgaXMgbm93IHJ1bm5pbmcgYW5kIGNh
biBiZSBxdWVyaWVkIGZvciBzdGFjayB0cmFjZXMuCi0gICAgY29sb3JGb3JtYXQgPSBwcm9wZXJ0
aWVzLmNvbG9yRm9ybWF0OwotICAgIGJpdHJhdGVBZGp1c3RtZW50VHlwZSA9IHByb3BlcnRpZXMu
Yml0cmF0ZUFkanVzdG1lbnRUeXBlOwotICAgIGlmIChiaXRyYXRlQWRqdXN0bWVudFR5cGUgPT0g
Qml0cmF0ZUFkanVzdG1lbnRUeXBlLkZSQU1FUkFURV9BREpVU1RNRU5UKSB7Ci0gICAgICBmcHMg
PSBCSVRSQVRFX0FESlVTVE1FTlRfRlBTOwotICAgIH0gZWxzZSB7Ci0gICAgICBmcHMgPSBNYXRo
Lm1pbihmcHMsIE1BWElNVU1fSU5JVElBTF9GUFMpOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFH
LCAiQ29sb3IgZm9ybWF0OiAiICsgY29sb3JGb3JtYXQgKyAiLiBCaXRyYXRlIGFkanVzdG1lbnQ6
ICIgKyBiaXRyYXRlQWRqdXN0bWVudFR5cGUKLSAgICAgICAgICAgICsgIi4gSW5pdGlhbCBmcHM6
ICIgKyBmcHMpOwotICAgIHRhcmdldEJpdHJhdGVCcHMgPSAxMDAwICoga2JwczsKLSAgICB0YXJn
ZXRGcHMgPSBmcHM7Ci0gICAgYml0cmF0ZUFjY3VtdWxhdG9yTWF4ID0gdGFyZ2V0Qml0cmF0ZUJw
cyAvIDguMDsKLSAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSAwOwotICAgIGJpdHJhdGVPYnNlcnZh
dGlvblRpbWVNcyA9IDA7Ci0gICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCA9IDA7Ci0KLSAg
ICBtZWRpYUNvZGVjVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICB0cnkgewot
ICAgICAgTWVkaWFGb3JtYXQgZm9ybWF0ID0gTWVkaWFGb3JtYXQuY3JlYXRlVmlkZW9Gb3JtYXQo
bWltZSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICBmb3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1h
dC5LRVlfQklUX1JBVEUsIHRhcmdldEJpdHJhdGVCcHMpOwotICAgICAgZm9ybWF0LnNldEludGVn
ZXIoImJpdHJhdGUtbW9kZSIsIFZJREVPX0NvbnRyb2xSYXRlQ29uc3RhbnQpOwotICAgICAgZm9y
bWF0LnNldEludGVnZXIoTWVkaWFGb3JtYXQuS0VZX0NPTE9SX0ZPUk1BVCwgcHJvcGVydGllcy5j
b2xvckZvcm1hdCk7Ci0gICAgICBmb3JtYXQuc2V0SW50ZWdlcihNZWRpYUZvcm1hdC5LRVlfRlJB
TUVfUkFURSwgdGFyZ2V0RnBzKTsKLSAgICAgIGZvcm1hdC5zZXRJbnRlZ2VyKE1lZGlhRm9ybWF0
LktFWV9JX0ZSQU1FX0lOVEVSVkFMLCBrZXlGcmFtZUludGVydmFsU2VjKTsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICIgIEZvcm1hdDogIiArIGZvcm1hdCk7Ci0gICAgICBtZWRpYUNvZGVjID0gY3Jl
YXRlQnlDb2RlY05hbWUocHJvcGVydGllcy5jb2RlY05hbWUpOwotICAgICAgdGhpcy50eXBlID0g
dHlwZTsKLSAgICAgIGlmIChtZWRpYUNvZGVjID09IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5l
KFRBRywgIkNhbiBub3QgY3JlYXRlIG1lZGlhIGVuY29kZXIiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgICAgbWVkaWFDb2RlYy5jb25maWd1cmUoZm9ybWF0LCBudWxsLCBu
dWxsLCBNZWRpYUNvZGVjLkNPTkZJR1VSRV9GTEFHX0VOQ09ERSk7Ci0KLSAgICAgIGlmICh1c2VT
dXJmYWNlKSB7Ci0gICAgICAgIGVnbEJhc2UgPSBuZXcgRWdsQmFzZTE0KHNoYXJlZENvbnRleHQs
IEVnbEJhc2UuQ09ORklHX1JFQ09SREFCTEUpOwotICAgICAgICAvLyBDcmVhdGUgYW4gaW5wdXQg
c3VyZmFjZSBhbmQga2VlcCBhIHJlZmVyZW5jZSBzaW5jZSB3ZSBtdXN0IHJlbGVhc2UgdGhlIHN1
cmZhY2Ugd2hlbiBkb25lLgotICAgICAgICBpbnB1dFN1cmZhY2UgPSBtZWRpYUNvZGVjLmNyZWF0
ZUlucHV0U3VyZmFjZSgpOwotICAgICAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2UoaW5wdXRTdXJm
YWNlKTsKLSAgICAgICAgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotICAgICAgfQotICAg
ICAgbWVkaWFDb2RlYy5zdGFydCgpOwotICAgICAgb3V0cHV0QnVmZmVycyA9IG1lZGlhQ29kZWMu
Z2V0T3V0cHV0QnVmZmVycygpOwotICAgICAgTG9nZ2luZy5kKFRBRywgIk91dHB1dCBidWZmZXJz
OiAiICsgb3V0cHV0QnVmZmVycy5sZW5ndGgpOwotCi0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRl
RXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJpbml0RW5jb2RlIGZhaWxlZCIs
IGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIEJ5dGVCdWZmZXJbXSBnZXRJbnB1dEJ1ZmZlcnMoKSB7Ci0gICAgQnl0ZUJ1ZmZlcltdIGlu
cHV0QnVmZmVycyA9IG1lZGlhQ29kZWMuZ2V0SW5wdXRCdWZmZXJzKCk7Ci0gICAgTG9nZ2luZy5k
KFRBRywgIklucHV0IGJ1ZmZlcnM6ICIgKyBpbnB1dEJ1ZmZlcnMubGVuZ3RoKTsKLSAgICByZXR1
cm4gaW5wdXRCdWZmZXJzOwotICB9Ci0KLSAgYm9vbGVhbiBlbmNvZGVCdWZmZXIoCi0gICAgICBi
b29sZWFuIGlzS2V5ZnJhbWUsIGludCBpbnB1dEJ1ZmZlciwgaW50IHNpemUsIGxvbmcgcHJlc2Vu
dGF0aW9uVGltZXN0YW1wVXMpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAg
IHRyeSB7Ci0gICAgICBpZiAoaXNLZXlmcmFtZSkgewotICAgICAgICAvLyBJZGVhbGx5IE1lZGlh
Q29kZWMgd291bGQgaG9ub3IgQlVGRkVSX0ZMQUdfU1lOQ19GUkFNRSBzbyB3ZSBjb3VsZAotICAg
ICAgICAvLyBpbmRpY2F0ZSB0aGlzIGluIHF1ZXVlSW5wdXRCdWZmZXIoKSBiZWxvdyBhbmQgZ3Vh
cmFudGVlIF90aGlzXyBmcmFtZQotICAgICAgICAvLyBiZSBlbmNvZGVkIGFzIGEga2V5IGZyYW1l
LCBidXQgc2FkbHkgdGhhdCBmbGFnIGlzIGlnbm9yZWQuICBJbnN0ZWFkLAotICAgICAgICAvLyB3
ZSByZXF1ZXN0IGEga2V5IGZyYW1lICJzb29uIi4KLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlN5
bmMgZnJhbWUgcmVxdWVzdCIpOwotICAgICAgICBCdW5kbGUgYiA9IG5ldyBCdW5kbGUoKTsKLSAg
ICAgICAgYi5wdXRJbnQoTWVkaWFDb2RlYy5QQVJBTUVURVJfS0VZX1JFUVVFU1RfU1lOQ19GUkFN
RSwgMCk7Ci0gICAgICAgIG1lZGlhQ29kZWMuc2V0UGFyYW1ldGVycyhiKTsKLSAgICAgIH0KLSAg
ICAgIG1lZGlhQ29kZWMucXVldWVJbnB1dEJ1ZmZlcihpbnB1dEJ1ZmZlciwgMCwgc2l6ZSwgcHJl
c2VudGF0aW9uVGltZXN0YW1wVXMsIDApOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRj
aCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJlbmNv
ZGVCdWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0K
LSAgYm9vbGVhbiBlbmNvZGVUZXh0dXJlKGJvb2xlYW4gaXNLZXlmcmFtZSwgaW50IG9lc1RleHR1
cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1hdGlvbk1hdHJpeCwKLSAgICAgIGxvbmcgcHJlc2VudGF0
aW9uVGltZXN0YW1wVXMpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgpOwotICAgIHRy
eSB7Ci0gICAgICBpZiAoaXNLZXlmcmFtZSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU3lu
YyBmcmFtZSByZXF1ZXN0Iik7Ci0gICAgICAgIEJ1bmRsZSBiID0gbmV3IEJ1bmRsZSgpOwotICAg
ICAgICBiLnB1dEludChNZWRpYUNvZGVjLlBBUkFNRVRFUl9LRVlfUkVRVUVTVF9TWU5DX0ZSQU1F
LCAwKTsKLSAgICAgICAgbWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzKGIpOwotICAgICAgfQotICAg
ICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgLy8gVE9ETyhwZXJraik6IGdsQ2xlYXIo
KSBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5IHNpbmNlIGV2ZXJ5IHBpeGVsIGlzIGNvdmVyZWQgYW55
d2F5LAotICAgICAgLy8gYnV0IGl0J3MgYSB3b3JrYXJvdW5kIGZvciBidWcgd2VicnRjOjUxNDcu
Ci0gICAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAg
ICBkcmF3ZXIuZHJhd09lcyhvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybWF0aW9uTWF0cml4LCB3aWR0
aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgIGVnbEJhc2Uuc3dhcEJ1ZmZl
cnMoVGltZVVuaXQuTUlDUk9TRUNPTkRTLnRvTmFub3MocHJlc2VudGF0aW9uVGltZXN0YW1wVXMp
KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gY2F0Y2ggKFJ1bnRpbWVFeGNlcHRpb24gZSkg
ewotICAgICAgTG9nZ2luZy5lKFRBRywgImVuY29kZVRleHR1cmUgZmFpbGVkIiwgZSk7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCByZWxlYXNlKCkgewotICAgIExv
Z2dpbmcuZChUQUcsICJKYXZhIHJlbGVhc2VFbmNvZGVyIik7Ci0gICAgY2hlY2tPbk1lZGlhQ29k
ZWNUaHJlYWQoKTsKLQotICAgIC8vIFJ1biBNZWRpYWNvZGVjIHN0b3AoKSBhbmQgcmVsZWFzZSgp
IG9uIHNlcGFyYXRlIHRocmVhZCBzaW5jZSBzb21ldGltZQotICAgIC8vIE1lZGlhY29kZWMuc3Rv
cCgpIG1heSBoYW5nLgotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIHJlbGVhc2VEb25lID0gbmV3
IENvdW50RG93bkxhdGNoKDEpOwotCi0gICAgUnVubmFibGUgcnVuTWVkaWFDb2RlY1JlbGVhc2Ug
PSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSmF2YSByZWxl
YXNlRW5jb2RlciBvbiByZWxlYXNlIHRocmVhZCIpOwotICAgICAgICAgIG1lZGlhQ29kZWMuc3Rv
cCgpOwotICAgICAgICAgIG1lZGlhQ29kZWMucmVsZWFzZSgpOwotICAgICAgICAgIExvZ2dpbmcu
ZChUQUcsICJKYXZhIHJlbGVhc2VFbmNvZGVyIG9uIHJlbGVhc2UgdGhyZWFkIGRvbmUiKTsKLSAg
ICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAi
TWVkaWEgZW5jb2RlciByZWxlYXNlIGZhaWxlZCIsIGUpOwotICAgICAgICB9Ci0gICAgICAgIHJl
bGVhc2VEb25lLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH07Ci0gICAgbmV3IFRocmVhZChy
dW5NZWRpYUNvZGVjUmVsZWFzZSkuc3RhcnQoKTsKLQotICAgIGlmICghVGhyZWFkVXRpbHMuYXdh
aXRVbmludGVycnVwdGlibHkocmVsZWFzZURvbmUsIE1FRElBX0NPREVDX1JFTEVBU0VfVElNRU9V
VF9NUykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJNZWRpYSBlbmNvZGVyIHJlbGVhc2UgdGlt
ZW91dCIpOwotICAgICAgY29kZWNFcnJvcnMrKzsKLSAgICAgIGlmIChlcnJvckNhbGxiYWNrICE9
IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkludm9rZSBjb2RlYyBlcnJvciBjYWxs
YmFjay4gRXJyb3JzOiAiICsgY29kZWNFcnJvcnMpOwotICAgICAgICBlcnJvckNhbGxiYWNrLm9u
TWVkaWFDb2RlY1ZpZGVvRW5jb2RlckNyaXRpY2FsRXJyb3IoY29kZWNFcnJvcnMpOwotICAgICAg
fQotICAgIH0KLQotICAgIG1lZGlhQ29kZWMgPSBudWxsOwotICAgIG1lZGlhQ29kZWNUaHJlYWQg
PSBudWxsOwotICAgIGlmIChkcmF3ZXIgIT0gbnVsbCkgewotICAgICAgZHJhd2VyLnJlbGVhc2Uo
KTsKLSAgICAgIGRyYXdlciA9IG51bGw7Ci0gICAgfQotICAgIGlmIChlZ2xCYXNlICE9IG51bGwp
IHsKLSAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAgZWdsQmFzZSA9IG51bGw7Ci0gICAg
fQotICAgIGlmIChpbnB1dFN1cmZhY2UgIT0gbnVsbCkgewotICAgICAgaW5wdXRTdXJmYWNlLnJl
bGVhc2UoKTsKLSAgICAgIGlucHV0U3VyZmFjZSA9IG51bGw7Ci0gICAgfQotICAgIHJ1bm5pbmdJ
bnN0YW5jZSA9IG51bGw7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkphdmEgcmVsZWFzZUVuY29kZXIg
ZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHNldFJhdGVzKGludCBrYnBzLCBpbnQg
ZnJhbWVSYXRlKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJlYWQoKTsKLQotICAgIGludCBj
b2RlY0JpdHJhdGVCcHMgPSAxMDAwICoga2JwczsKLSAgICBpZiAoYml0cmF0ZUFkanVzdG1lbnRU
eXBlID09IEJpdHJhdGVBZGp1c3RtZW50VHlwZS5EWU5BTUlDX0FESlVTVE1FTlQpIHsKLSAgICAg
IGJpdHJhdGVBY2N1bXVsYXRvck1heCA9IGNvZGVjQml0cmF0ZUJwcyAvIDguMDsKLSAgICAgIGlm
ICh0YXJnZXRCaXRyYXRlQnBzID4gMCAmJiBjb2RlY0JpdHJhdGVCcHMgPCB0YXJnZXRCaXRyYXRl
QnBzKSB7Ci0gICAgICAgIC8vIFJlc2NhbGUgdGhlIGFjY3VtdWxhdG9yIGxldmVsIGlmIHRoZSBh
Y2N1bXVsYXRvciBtYXggZGVjcmVhc2VzCi0gICAgICAgIGJpdHJhdGVBY2N1bXVsYXRvciA9IGJp
dHJhdGVBY2N1bXVsYXRvciAqIGNvZGVjQml0cmF0ZUJwcyAvIHRhcmdldEJpdHJhdGVCcHM7Ci0g
ICAgICB9Ci0gICAgfQotICAgIHRhcmdldEJpdHJhdGVCcHMgPSBjb2RlY0JpdHJhdGVCcHM7Ci0g
ICAgdGFyZ2V0RnBzID0gZnJhbWVSYXRlOwotCi0gICAgLy8gQWRqdXN0IGFjdHVhbCBlbmNvZGVy
IGJpdHJhdGUgYmFzZWQgb24gYml0cmF0ZSBhZGp1c3RtZW50IHR5cGUuCi0gICAgaWYgKGJpdHJh
dGVBZGp1c3RtZW50VHlwZSA9PSBCaXRyYXRlQWRqdXN0bWVudFR5cGUuRlJBTUVSQVRFX0FESlVT
VE1FTlQgJiYgdGFyZ2V0RnBzID4gMCkgewotICAgICAgY29kZWNCaXRyYXRlQnBzID0gQklUUkFU
RV9BREpVU1RNRU5UX0ZQUyAqIHRhcmdldEJpdHJhdGVCcHMgLyB0YXJnZXRGcHM7Ci0gICAgICBM
b2dnaW5nLnYoVEFHLAotICAgICAgICAgICJzZXRSYXRlczogIiArIGticHMgKyAiIC0+ICIgKyAo
Y29kZWNCaXRyYXRlQnBzIC8gMTAwMCkgKyAiIGticHMuIEZwczogIiArIHRhcmdldEZwcyk7Ci0g
ICAgfSBlbHNlIGlmIChiaXRyYXRlQWRqdXN0bWVudFR5cGUgPT0gQml0cmF0ZUFkanVzdG1lbnRU
eXBlLkRZTkFNSUNfQURKVVNUTUVOVCkgewotICAgICAgTG9nZ2luZy52KFRBRywgInNldFJhdGVz
OiAiICsga2JwcyArICIga2Jwcy4gRnBzOiAiICsgdGFyZ2V0RnBzICsgIi4gRXhwU2NhbGU6ICIK
LSAgICAgICAgICAgICAgKyBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKTsKLSAgICAgIGlmIChi
aXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwICE9IDApIHsKLSAgICAgICAgY29kZWNCaXRyYXRlQnBz
ID0gKGludCkgKGNvZGVjQml0cmF0ZUJwcyAqIGdldEJpdHJhdGVTY2FsZShiaXRyYXRlQWRqdXN0
bWVudFNjYWxlRXhwKSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZ2dpbmcudihU
QUcsICJzZXRSYXRlczogIiArIGticHMgKyAiIGticHMuIEZwczogIiArIHRhcmdldEZwcyk7Ci0g
ICAgfQotCi0gICAgdHJ5IHsKLSAgICAgIEJ1bmRsZSBwYXJhbXMgPSBuZXcgQnVuZGxlKCk7Ci0g
ICAgICBwYXJhbXMucHV0SW50KE1lZGlhQ29kZWMuUEFSQU1FVEVSX0tFWV9WSURFT19CSVRSQVRF
LCBjb2RlY0JpdHJhdGVCcHMpOwotICAgICAgbWVkaWFDb2RlYy5zZXRQYXJhbWV0ZXJzKHBhcmFt
cyk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRp
b24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgInNldFJhdGVzIGZhaWxlZCIsIGUpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8vIERlcXVldWUgYW4gaW5wdXQgYnVm
ZmVyIGFuZCByZXR1cm4gaXRzIGluZGV4LCAtMSBpZiBubyBpbnB1dCBidWZmZXIgaXMKLSAgLy8g
YXZhaWxhYmxlLCBvciAtMiBpZiB0aGUgY29kZWMgaXMgbm8gbG9uZ2VyIG9wZXJhdGl2ZS4KLSAg
aW50IGRlcXVldWVJbnB1dEJ1ZmZlcigpIHsKLSAgICBjaGVja09uTWVkaWFDb2RlY1RocmVhZCgp
OwotICAgIHRyeSB7Ci0gICAgICByZXR1cm4gbWVkaWFDb2RlYy5kZXF1ZXVlSW5wdXRCdWZmZXIo
REVRVUVVRV9USU1FT1VUKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkg
ewotICAgICAgTG9nZ2luZy5lKFRBRywgImRlcXVldWVJbnRwdXRCdWZmZXIgZmFpbGVkIiwgZSk7
Ci0gICAgICByZXR1cm4gLTI7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIHN0cnVjdCBmb3Ig
ZGVxdWV1ZU91dHB1dEJ1ZmZlcigpIGJlbG93LgotICBzdGF0aWMgY2xhc3MgT3V0cHV0QnVmZmVy
SW5mbyB7Ci0gICAgcHVibGljIE91dHB1dEJ1ZmZlckluZm8oCi0gICAgICAgIGludCBpbmRleCwg
Qnl0ZUJ1ZmZlciBidWZmZXIsIGJvb2xlYW4gaXNLZXlGcmFtZSwgbG9uZyBwcmVzZW50YXRpb25U
aW1lc3RhbXBVcykgewotICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwotICAgICAgdGhpcy5idWZm
ZXIgPSBidWZmZXI7Ci0gICAgICB0aGlzLmlzS2V5RnJhbWUgPSBpc0tleUZyYW1lOwotICAgICAg
dGhpcy5wcmVzZW50YXRpb25UaW1lc3RhbXBVcyA9IHByZXNlbnRhdGlvblRpbWVzdGFtcFVzOwot
ICAgIH0KLQotICAgIHB1YmxpYyBmaW5hbCBpbnQgaW5kZXg7Ci0gICAgcHVibGljIGZpbmFsIEJ5
dGVCdWZmZXIgYnVmZmVyOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGlzS2V5RnJhbWU7Ci0g
ICAgcHVibGljIGZpbmFsIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXM7Ci0gIH0KLQotICAv
LyBEZXF1ZXVlIGFuZCByZXR1cm4gYW4gb3V0cHV0IGJ1ZmZlciwgb3IgbnVsbCBpZiBubyBvdXRw
dXQgaXMgcmVhZHkuICBSZXR1cm4KLSAgLy8gYSBmYWtlIE91dHB1dEJ1ZmZlckluZm8gd2l0aCBp
bmRleCAtMSBpZiB0aGUgY29kZWMgaXMgbm8gbG9uZ2VyIG9wZXJhYmxlLgotICBPdXRwdXRCdWZm
ZXJJbmZvIGRlcXVldWVPdXRwdXRCdWZmZXIoKSB7Ci0gICAgY2hlY2tPbk1lZGlhQ29kZWNUaHJl
YWQoKTsKLSAgICB0cnkgewotICAgICAgTWVkaWFDb2RlYy5CdWZmZXJJbmZvIGluZm8gPSBuZXcg
TWVkaWFDb2RlYy5CdWZmZXJJbmZvKCk7Ci0gICAgICBpbnQgcmVzdWx0ID0gbWVkaWFDb2RlYy5k
ZXF1ZXVlT3V0cHV0QnVmZmVyKGluZm8sIERFUVVFVUVfVElNRU9VVCk7Ci0gICAgICAvLyBDaGVj
ayBpZiB0aGlzIGlzIGNvbmZpZyBmcmFtZSBhbmQgc2F2ZSBjb25maWd1cmF0aW9uIGRhdGEuCi0g
ICAgICBpZiAocmVzdWx0ID49IDApIHsKLSAgICAgICAgYm9vbGVhbiBpc0NvbmZpZ0ZyYW1lID0g
KGluZm8uZmxhZ3MgJiBNZWRpYUNvZGVjLkJVRkZFUl9GTEFHX0NPREVDX0NPTkZJRykgIT0gMDsK
LSAgICAgICAgaWYgKGlzQ29uZmlnRnJhbWUpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
Q29uZmlnIGZyYW1lIGdlbmVyYXRlZC4gT2Zmc2V0OiAiICsgaW5mby5vZmZzZXQgKyAiLiBTaXpl
OiAiICsgaW5mby5zaXplKTsKLSAgICAgICAgICBjb25maWdEYXRhID0gQnl0ZUJ1ZmZlci5hbGxv
Y2F0ZURpcmVjdChpbmZvLnNpemUpOwotICAgICAgICAgIG91dHB1dEJ1ZmZlcnNbcmVzdWx0XS5w
b3NpdGlvbihpbmZvLm9mZnNldCk7Ci0gICAgICAgICAgb3V0cHV0QnVmZmVyc1tyZXN1bHRdLmxp
bWl0KGluZm8ub2Zmc2V0ICsgaW5mby5zaXplKTsKLSAgICAgICAgICBjb25maWdEYXRhLnB1dChv
dXRwdXRCdWZmZXJzW3Jlc3VsdF0pOwotICAgICAgICAgIC8vIFJlbGVhc2UgYnVmZmVyIGJhY2su
Ci0gICAgICAgICAgbWVkaWFDb2RlYy5yZWxlYXNlT3V0cHV0QnVmZmVyKHJlc3VsdCwgZmFsc2Up
OwotICAgICAgICAgIC8vIFF1ZXJ5IG5leHQgb3V0cHV0LgotICAgICAgICAgIHJlc3VsdCA9IG1l
ZGlhQ29kZWMuZGVxdWV1ZU91dHB1dEJ1ZmZlcihpbmZvLCBERVFVRVVFX1RJTUVPVVQpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBpZiAocmVzdWx0ID49IDApIHsKLSAgICAgICAgLy8gTWVk
aWFDb2RlYyBkb2Vzbid0IGNhcmUgYWJvdXQgQnVmZmVyIHBvc2l0aW9uL3JlbWFpbmluZy9ldGMg
c28gd2UgY2FuCi0gICAgICAgIC8vIG1lc3Mgd2l0aCB0aGVtIHRvIGdldCBhIHNsaWNlIGFuZCBh
dm9pZCBoYXZpbmcgdG8gcGFzcyBleHRyYQotICAgICAgICAvLyAoQnVmZmVySW5mby1yZWxhdGVk
KSBwYXJhbWV0ZXJzIGJhY2sgdG8gQysrLgotICAgICAgICBCeXRlQnVmZmVyIG91dHB1dEJ1ZmZl
ciA9IG91dHB1dEJ1ZmZlcnNbcmVzdWx0XS5kdXBsaWNhdGUoKTsKLSAgICAgICAgb3V0cHV0QnVm
ZmVyLnBvc2l0aW9uKGluZm8ub2Zmc2V0KTsKLSAgICAgICAgb3V0cHV0QnVmZmVyLmxpbWl0KGlu
Zm8ub2Zmc2V0ICsgaW5mby5zaXplKTsKLSAgICAgICAgcmVwb3J0RW5jb2RlZEZyYW1lKGluZm8u
c2l6ZSk7Ci0KLSAgICAgICAgLy8gQ2hlY2sga2V5IGZyYW1lIGZsYWcuCi0gICAgICAgIGJvb2xl
YW4gaXNLZXlGcmFtZSA9IChpbmZvLmZsYWdzICYgTWVkaWFDb2RlYy5CVUZGRVJfRkxBR19TWU5D
X0ZSQU1FKSAhPSAwOwotICAgICAgICBpZiAoaXNLZXlGcmFtZSkgewotICAgICAgICAgIExvZ2dp
bmcuZChUQUcsICJTeW5jIGZyYW1lIGdlbmVyYXRlZCIpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChpc0tleUZyYW1lICYmIHR5cGUgPT0gVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfSDI2NCkg
ewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJBcHBlbmRpbmcgY29uZmlnIGZyYW1lIG9mIHNp
emUgIiArIGNvbmZpZ0RhdGEuY2FwYWNpdHkoKQotICAgICAgICAgICAgICAgICAgKyAiIHRvIG91
dHB1dCBidWZmZXIgd2l0aCBvZmZzZXQgIiArIGluZm8ub2Zmc2V0ICsgIiwgc2l6ZSAiICsgaW5m
by5zaXplKTsKLSAgICAgICAgICAvLyBGb3IgSC4yNjQga2V5IGZyYW1lIGFwcGVuZCBTUFMgYW5k
IFBQUyBOQUxzIGF0IHRoZSBzdGFydAotICAgICAgICAgIEJ5dGVCdWZmZXIga2V5RnJhbWVCdWZm
ZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGNvbmZpZ0RhdGEuY2FwYWNpdHkoKSArIGlu
Zm8uc2l6ZSk7Ci0gICAgICAgICAgY29uZmlnRGF0YS5yZXdpbmQoKTsKLSAgICAgICAgICBrZXlG
cmFtZUJ1ZmZlci5wdXQoY29uZmlnRGF0YSk7Ci0gICAgICAgICAga2V5RnJhbWVCdWZmZXIucHV0
KG91dHB1dEJ1ZmZlcik7Ci0gICAgICAgICAga2V5RnJhbWVCdWZmZXIucG9zaXRpb24oMCk7Ci0g
ICAgICAgICAgcmV0dXJuIG5ldyBPdXRwdXRCdWZmZXJJbmZvKHJlc3VsdCwga2V5RnJhbWVCdWZm
ZXIsIGlzS2V5RnJhbWUsIGluZm8ucHJlc2VudGF0aW9uVGltZVVzKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICByZXR1cm4gbmV3IE91dHB1dEJ1ZmZlckluZm8oCi0gICAgICAgICAgICAg
IHJlc3VsdCwgb3V0cHV0QnVmZmVyLnNsaWNlKCksIGlzS2V5RnJhbWUsIGluZm8ucHJlc2VudGF0
aW9uVGltZVVzKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gTWVkaWFD
b2RlYy5JTkZPX09VVFBVVF9CVUZGRVJTX0NIQU5HRUQpIHsKLSAgICAgICAgb3V0cHV0QnVmZmVy
cyA9IG1lZGlhQ29kZWMuZ2V0T3V0cHV0QnVmZmVycygpOwotICAgICAgICByZXR1cm4gZGVxdWV1
ZU91dHB1dEJ1ZmZlcigpOwotICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gTWVkaWFDb2RlYy5J
TkZPX09VVFBVVF9GT1JNQVRfQ0hBTkdFRCkgewotICAgICAgICByZXR1cm4gZGVxdWV1ZU91dHB1
dEJ1ZmZlcigpOwotICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPT0gTWVkaWFDb2RlYy5JTkZPX1RS
WV9BR0FJTl9MQVRFUikgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJkZXF1ZXVlT3V0cHV0QnVmZmVyOiAiICsgcmVzdWx0
KTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2lu
Zy5lKFRBRywgImRlcXVldWVPdXRwdXRCdWZmZXIgZmFpbGVkIiwgZSk7Ci0gICAgICByZXR1cm4g
bmV3IE91dHB1dEJ1ZmZlckluZm8oLTEsIG51bGwsIGZhbHNlLCAtMSk7Ci0gICAgfQotICB9Ci0K
LSAgcHJpdmF0ZSBkb3VibGUgZ2V0Qml0cmF0ZVNjYWxlKGludCBiaXRyYXRlQWRqdXN0bWVudFNj
YWxlRXhwKSB7Ci0gICAgcmV0dXJuIE1hdGgucG93KEJJVFJBVEVfQ09SUkVDVElPTl9NQVhfU0NB
TEUsCi0gICAgICAgIChkb3VibGUpIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAgLyBCSVRSQVRF
X0NPUlJFQ1RJT05fU1RFUFMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVuY29kZWRG
cmFtZShpbnQgc2l6ZSkgewotICAgIGlmICh0YXJnZXRGcHMgPT0gMCB8fCBiaXRyYXRlQWRqdXN0
bWVudFR5cGUgIT0gQml0cmF0ZUFkanVzdG1lbnRUeXBlLkRZTkFNSUNfQURKVVNUTUVOVCkgewot
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEFjY3VtdWxhdGUgdGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbiBhY3RpYWwgYW5kIGV4cGVjdGVkIGZyYW1lIHNpemVzLgotICAgIGRvdWJsZSBleHBl
Y3RlZEJ5dGVzUGVyRnJhbWUgPSB0YXJnZXRCaXRyYXRlQnBzIC8gKDguMCAqIHRhcmdldEZwcyk7
Ci0gICAgYml0cmF0ZUFjY3VtdWxhdG9yICs9IChzaXplIC0gZXhwZWN0ZWRCeXRlc1BlckZyYW1l
KTsKLSAgICBiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgKz0gMTAwMC4wIC8gdGFyZ2V0RnBzOwot
Ci0gICAgLy8gUHV0IGEgY2FwIG9uIHRoZSBhY2N1bXVsYXRvciwgaS5lLiwgZG9uJ3QgbGV0IGl0
IGdyb3cgYmV5b25kIHNvbWUgbGV2ZWwgdG8gYXZvaWQKLSAgICAvLyB1c2luZyB0b28gb2xkIGRh
dGEgZm9yIGJpdHJhdGUgYWRqdXN0bWVudC4KLSAgICBkb3VibGUgYml0cmF0ZUFjY3VtdWxhdG9y
Q2FwID0gQklUUkFURV9DT1JSRUNUSU9OX1NFQyAqIGJpdHJhdGVBY2N1bXVsYXRvck1heDsKLSAg
ICBiaXRyYXRlQWNjdW11bGF0b3IgPSBNYXRoLm1pbihiaXRyYXRlQWNjdW11bGF0b3IsIGJpdHJh
dGVBY2N1bXVsYXRvckNhcCk7Ci0gICAgYml0cmF0ZUFjY3VtdWxhdG9yID0gTWF0aC5tYXgoYml0
cmF0ZUFjY3VtdWxhdG9yLCAtYml0cmF0ZUFjY3VtdWxhdG9yQ2FwKTsKLQotICAgIC8vIERvIGJp
dHJhdGUgYWRqdXN0bWVudCBldmVyeSAzIHNlY29uZHMgaWYgYWN0dWFsIGVuY29kZXIgYml0cmF0
ZSBkZXZpYXRlcyB0b28gbXVjaAotICAgIC8vIGZvcm0gdGhlIHRhcmdldCB2YWx1ZS4KLSAgICBp
ZiAoYml0cmF0ZU9ic2VydmF0aW9uVGltZU1zID4gMTAwMCAqIEJJVFJBVEVfQ09SUkVDVElPTl9T
RUMpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJBY2M6ICIgKyAoaW50KSBiaXRyYXRlQWNjdW11
bGF0b3IgKyAiLiBNYXg6ICIgKyAoaW50KSBiaXRyYXRlQWNjdW11bGF0b3JNYXgKLSAgICAgICAg
ICAgICAgKyAiLiBFeHBTY2FsZTogIiArIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHApOwotICAg
ICAgYm9vbGVhbiBiaXRyYXRlQWRqdXN0bWVudFNjYWxlQ2hhbmdlZCA9IGZhbHNlOwotICAgICAg
aWYgKGJpdHJhdGVBY2N1bXVsYXRvciA+IGJpdHJhdGVBY2N1bXVsYXRvck1heCkgewotICAgICAg
ICAvLyBFbmNvZGVyIGdlbmVyYXRlcyB0b28gaGlnaCBiaXRyYXRlIC0gbmVlZCB0byByZWR1Y2Ug
dGhlIHNjYWxlLgotICAgICAgICBiaXRyYXRlQWNjdW11bGF0b3IgPSBiaXRyYXRlQWNjdW11bGF0
b3JNYXg7Ci0gICAgICAgIGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAtLTsKLSAgICAgICAgYml0
cmF0ZUFkanVzdG1lbnRTY2FsZUNoYW5nZWQgPSB0cnVlOwotICAgICAgfSBlbHNlIGlmIChiaXRy
YXRlQWNjdW11bGF0b3IgPCAtYml0cmF0ZUFjY3VtdWxhdG9yTWF4KSB7Ci0gICAgICAgIC8vIEVu
Y29kZXIgZ2VuZXJhdGVzIHRvbyBsb3cgYml0cmF0ZSAtIG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNj
YWxlLgotICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxlRXhwKys7Ci0gICAgICAgIGJpdHJh
dGVBY2N1bXVsYXRvciA9IC1iaXRyYXRlQWNjdW11bGF0b3JNYXg7Ci0gICAgICAgIGJpdHJhdGVB
ZGp1c3RtZW50U2NhbGVDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgIH0KLSAgICAgIGlmIChiaXRyYXRl
QWRqdXN0bWVudFNjYWxlQ2hhbmdlZCkgewotICAgICAgICBiaXRyYXRlQWRqdXN0bWVudFNjYWxl
RXhwID0gTWF0aC5taW4oYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCwgQklUUkFURV9DT1JSRUNU
SU9OX1NURVBTKTsKLSAgICAgICAgYml0cmF0ZUFkanVzdG1lbnRTY2FsZUV4cCA9IE1hdGgubWF4
KGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHAsIC1CSVRSQVRFX0NPUlJFQ1RJT05fU1RFUFMpOwot
ICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQWRqdXN0aW5nIGJpdHJhdGUgc2NhbGUgdG8gIiArIGJp
dHJhdGVBZGp1c3RtZW50U2NhbGVFeHAgKyAiLiBWYWx1ZTogIgotICAgICAgICAgICAgICAgICsg
Z2V0Qml0cmF0ZVNjYWxlKGJpdHJhdGVBZGp1c3RtZW50U2NhbGVFeHApKTsKLSAgICAgICAgc2V0
UmF0ZXModGFyZ2V0Qml0cmF0ZUJwcyAvIDEwMDAsIHRhcmdldEZwcyk7Ci0gICAgICB9Ci0gICAg
ICBiaXRyYXRlT2JzZXJ2YXRpb25UaW1lTXMgPSAwOwotICAgIH0KLSAgfQotCi0gIC8vIFJlbGVh
c2UgYSBkZXF1ZXVlZCBvdXRwdXQgYnVmZmVyIGJhY2sgdG8gdGhlIGNvZGVjIGZvciByZS11c2Uu
ICBSZXR1cm4KLSAgLy8gZmFsc2UgaWYgdGhlIGNvZGVjIGlzIG5vIGxvbmdlciBvcGVyYWJsZS4K
LSAgYm9vbGVhbiByZWxlYXNlT3V0cHV0QnVmZmVyKGludCBpbmRleCkgewotICAgIGNoZWNrT25N
ZWRpYUNvZGVjVGhyZWFkKCk7Ci0gICAgdHJ5IHsKLSAgICAgIG1lZGlhQ29kZWMucmVsZWFzZU91
dHB1dEJ1ZmZlcihpbmRleCwgZmFsc2UpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBjYXRj
aCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJyZWxl
YXNlT3V0cHV0QnVmZmVyIGZhaWxlZCIsIGUpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvbnN0cmFpbnRzLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvbnN0cmFpbnRzLmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWVkaWFDb25zdHJhaW50cy5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2Fn
ZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogRGVzY3JpcHRpb24gb2YgbWVkaWEgY29uc3RyYWludHMg
Zm9yIHtAY29kZSBNZWRpYVN0cmVhbX0gYW5kCi0gKiB7QGNvZGUgUGVlckNvbm5lY3Rpb259Lgot
ICovCi1wdWJsaWMgY2xhc3MgTWVkaWFDb25zdHJhaW50cyB7Ci0gIC8qKiBTaW1wbGUgU3RyaW5n
IGtleS92YWx1ZSBwYWlyLiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEtleVZhbHVlUGFpciB7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcga2V5OwotICAgIHByaXZhdGUgZmluYWwgU3RyaW5n
IHZhbHVlOwotCi0gICAgcHVibGljIEtleVZhbHVlUGFpcihTdHJpbmcga2V5LCBTdHJpbmcgdmFs
dWUpIHsKLSAgICAgIHRoaXMua2V5ID0ga2V5OwotICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOwot
ICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0S2V5KCkgewotICAgICAgcmV0dXJuIGtleTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldFZhbHVlKCkgewotICAgICAgcmV0dXJuIHZh
bHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgICByZXR1
cm4ga2V5ICsgIjogIiArIHZhbHVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBib29sZWFuIGVxdWFscyhPYmplY3Qgb3RoZXIpIHsKLSAgICAgIGlmICh0aGlzID09IG90aGVy
KSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgICAgaWYgKG90aGVyID09IG51
bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvdGhlci5nZXRDbGFzcygpKSB7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgIH0KLSAgICAgIEtleVZhbHVlUGFpciB0aGF0ID0gKEtleVZhbHVlUGFpcikg
b3RoZXI7Ci0gICAgICByZXR1cm4ga2V5LmVxdWFscyh0aGF0LmtleSkgJiYgdmFsdWUuZXF1YWxz
KHRoYXQudmFsdWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgaGFz
aENvZGUoKSB7Ci0gICAgICByZXR1cm4ga2V5Lmhhc2hDb2RlKCkgKyB2YWx1ZS5oYXNoQ29kZSgp
OwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBmaW5hbCBMaXN0PEtleVZhbHVlUGFpcj4gbWFuZGF0
b3J5OwotICBwdWJsaWMgZmluYWwgTGlzdDxLZXlWYWx1ZVBhaXI+IG9wdGlvbmFsOwotCi0gIHB1
YmxpYyBNZWRpYUNvbnN0cmFpbnRzKCkgewotICAgIG1hbmRhdG9yeSA9IG5ldyBMaW5rZWRMaXN0
PEtleVZhbHVlUGFpcj4oKTsKLSAgICBvcHRpb25hbCA9IG5ldyBMaW5rZWRMaXN0PEtleVZhbHVl
UGFpcj4oKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBzdHJpbmdpZnlLZXlWYWx1
ZVBhaXJMaXN0KExpc3Q8S2V5VmFsdWVQYWlyPiBsaXN0KSB7Ci0gICAgU3RyaW5nQnVpbGRlciBi
dWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoIlsiKTsKLSAgICBmb3IgKEtleVZhbHVlUGFpciBw
YWlyIDogbGlzdCkgewotICAgICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgfQotICAgICAgYnVpbGRlci5hcHBlbmQocGFp
ci50b1N0cmluZygpKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIuYXBwZW5kKCJdIikudG9T
dHJpbmcoKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0gICAgcmV0dXJu
ICJtYW5kYXRvcnk6ICIgKyBzdHJpbmdpZnlLZXlWYWx1ZVBhaXJMaXN0KG1hbmRhdG9yeSkgKyAi
LCBvcHRpb25hbDogIgotICAgICAgICArIHN0cmluZ2lmeUtleVZhbHVlUGFpckxpc3Qob3B0aW9u
YWwpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU291cmNlLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVNvdXJjZS5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU291cmNlLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGM7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIE1lZGlhU291cmNlSW50ZXJmYWNlLiAq
LwotcHVibGljIGNsYXNzIE1lZGlhU291cmNlIHsKLSAgLyoqIFRyYWNrcyBNZWRpYVNvdXJjZUlu
dGVyZmFjZS5Tb3VyY2VTdGF0ZSAqLwotICBwdWJsaWMgZW51bSBTdGF0ZSB7IElOSVRJQUxJWklO
RywgTElWRSwgRU5ERUQsIE1VVEVEIH0KLQotICBmaW5hbCBsb25nIG5hdGl2ZVNvdXJjZTsgLy8g
UGFja2FnZS1wcm90ZWN0ZWQgZm9yIFBlZXJDb25uZWN0aW9uRmFjdG9yeS4KLQotICBwdWJsaWMg
TWVkaWFTb3VyY2UobG9uZyBuYXRpdmVTb3VyY2UpIHsKLSAgICB0aGlzLm5hdGl2ZVNvdXJjZSA9
IG5hdGl2ZVNvdXJjZTsKLSAgfQotCi0gIHB1YmxpYyBTdGF0ZSBzdGF0ZSgpIHsKLSAgICByZXR1
cm4gbmF0aXZlU3RhdGUobmF0aXZlU291cmNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bv
c2UoKSB7Ci0gICAgZnJlZShuYXRpdmVTb3VyY2UpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIFN0YXRlIG5hdGl2ZVN0YXRlKGxvbmcgcG9pbnRlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2ZVNvdXJjZSk7Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL01lZGlhU3RyZWFtLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9NZWRpYVN0cmVhbS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L01lZGlhU3RyZWFtLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDYgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS51dGlsLkxp
bmtlZExpc3Q7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIE1lZGlhU3RyZWFtSW50ZXJm
YWNlLiAqLwotcHVibGljIGNsYXNzIE1lZGlhU3RyZWFtIHsKLSAgcHVibGljIGZpbmFsIExpbmtl
ZExpc3Q8QXVkaW9UcmFjaz4gYXVkaW9UcmFja3M7Ci0gIHB1YmxpYyBmaW5hbCBMaW5rZWRMaXN0
PFZpZGVvVHJhY2s+IHZpZGVvVHJhY2tzOwotICBwdWJsaWMgZmluYWwgTGlua2VkTGlzdDxWaWRl
b1RyYWNrPiBwcmVzZXJ2ZWRWaWRlb1RyYWNrczsKLSAgLy8gUGFja2FnZS1wcm90ZWN0ZWQgZm9y
IFBlZXJDb25uZWN0aW9uLgotICBmaW5hbCBsb25nIG5hdGl2ZVN0cmVhbTsKLQotICBwdWJsaWMg
TWVkaWFTdHJlYW0obG9uZyBuYXRpdmVTdHJlYW0pIHsKLSAgICBhdWRpb1RyYWNrcyA9IG5ldyBM
aW5rZWRMaXN0PEF1ZGlvVHJhY2s+KCk7Ci0gICAgdmlkZW9UcmFja3MgPSBuZXcgTGlua2VkTGlz
dDxWaWRlb1RyYWNrPigpOwotICAgIHByZXNlcnZlZFZpZGVvVHJhY2tzID0gbmV3IExpbmtlZExp
c3Q8VmlkZW9UcmFjaz4oKTsKLSAgICB0aGlzLm5hdGl2ZVN0cmVhbSA9IG5hdGl2ZVN0cmVhbTsK
LSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZFRyYWNrKEF1ZGlvVHJhY2sgdHJhY2spIHsKLSAg
ICBpZiAobmF0aXZlQWRkQXVkaW9UcmFjayhuYXRpdmVTdHJlYW0sIHRyYWNrLm5hdGl2ZVRyYWNr
KSkgewotICAgICAgYXVkaW9UcmFja3MuYWRkKHRyYWNrKTsKLSAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBhZGRUcmFj
ayhWaWRlb1RyYWNrIHRyYWNrKSB7Ci0gICAgaWYgKG5hdGl2ZUFkZFZpZGVvVHJhY2sobmF0aXZl
U3RyZWFtLCB0cmFjay5uYXRpdmVUcmFjaykpIHsKLSAgICAgIHZpZGVvVHJhY2tzLmFkZCh0cmFj
ayk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0K
LSAgLy8gVHJhY2tzIGFkZGVkIGluIGFkZFRyYWNrKCkgY2FsbCB3aWxsIGJlIGF1dG8gcmVsZWFz
ZWQgb25jZSBNZWRpYVN0cmVhbS5kaXNwb3NlKCkKLSAgLy8gaXMgY2FsbGVkLiBJZiB2aWRlbyB0
cmFjayBuZWVkIHRvIGJlIHByZXNlcnZlZCBhZnRlciBNZWRpYVN0cmVhbSBpcyBkZXN0cm95ZWQg
aXQKLSAgLy8gc2hvdWxkIGJlIGFkZGVkIHRvIE1lZGlhU3RyZWFtIHVzaW5nIGFkZFByZXNlcnZl
ZFRyYWNrKCkgY2FsbC4KLSAgcHVibGljIGJvb2xlYW4gYWRkUHJlc2VydmVkVHJhY2soVmlkZW9U
cmFjayB0cmFjaykgewotICAgIGlmIChuYXRpdmVBZGRWaWRlb1RyYWNrKG5hdGl2ZVN0cmVhbSwg
dHJhY2submF0aXZlVHJhY2spKSB7Ci0gICAgICBwcmVzZXJ2ZWRWaWRlb1RyYWNrcy5hZGQodHJh
Y2spOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
Ci0gIHB1YmxpYyBib29sZWFuIHJlbW92ZVRyYWNrKEF1ZGlvVHJhY2sgdHJhY2spIHsKLSAgICBh
dWRpb1RyYWNrcy5yZW1vdmUodHJhY2spOwotICAgIHJldHVybiBuYXRpdmVSZW1vdmVBdWRpb1Ry
YWNrKG5hdGl2ZVN0cmVhbSwgdHJhY2submF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIGJv
b2xlYW4gcmVtb3ZlVHJhY2soVmlkZW9UcmFjayB0cmFjaykgewotICAgIHZpZGVvVHJhY2tzLnJl
bW92ZSh0cmFjayk7Ci0gICAgcHJlc2VydmVkVmlkZW9UcmFja3MucmVtb3ZlKHRyYWNrKTsKLSAg
ICByZXR1cm4gbmF0aXZlUmVtb3ZlVmlkZW9UcmFjayhuYXRpdmVTdHJlYW0sIHRyYWNrLm5hdGl2
ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgLy8gUmVtb3Zl
IGFuZCByZWxlYXNlIHByZXZpb3VzbHkgYWRkZWQgYXVkaW8gYW5kIHZpZGVvIHRyYWNrcy4KLSAg
ICB3aGlsZSAoIWF1ZGlvVHJhY2tzLmlzRW1wdHkoKSkgewotICAgICAgQXVkaW9UcmFjayB0cmFj
ayA9IGF1ZGlvVHJhY2tzLmdldEZpcnN0KCk7Ci0gICAgICByZW1vdmVUcmFjayh0cmFjayk7Ci0g
ICAgICB0cmFjay5kaXNwb3NlKCk7Ci0gICAgfQotICAgIHdoaWxlICghdmlkZW9UcmFja3MuaXNF
bXB0eSgpKSB7Ci0gICAgICBWaWRlb1RyYWNrIHRyYWNrID0gdmlkZW9UcmFja3MuZ2V0Rmlyc3Qo
KTsKLSAgICAgIHJlbW92ZVRyYWNrKHRyYWNrKTsKLSAgICAgIHRyYWNrLmRpc3Bvc2UoKTsKLSAg
ICB9Ci0gICAgLy8gUmVtb3ZlLCBidXQgZG8gbm90IHJlbGVhc2UgcHJlc2VydmVkIHZpZGVvIHRy
YWNrcy4KLSAgICB3aGlsZSAoIXByZXNlcnZlZFZpZGVvVHJhY2tzLmlzRW1wdHkoKSkgewotICAg
ICAgcmVtb3ZlVHJhY2socHJlc2VydmVkVmlkZW9UcmFja3MuZ2V0Rmlyc3QoKSk7Ci0gICAgfQot
ICAgIGZyZWUobmF0aXZlU3RyZWFtKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgbGFiZWwoKSB7
Ci0gICAgcmV0dXJuIG5hdGl2ZUxhYmVsKG5hdGl2ZVN0cmVhbSk7Ci0gIH0KLQotICBwdWJsaWMg
U3RyaW5nIHRvU3RyaW5nKCkgewotICAgIHJldHVybiAiWyIgKyBsYWJlbCgpICsgIjpBPSIgKyBh
dWRpb1RyYWNrcy5zaXplKCkgKyAiOlY9IiArIHZpZGVvVHJhY2tzLnNpemUoKSArICJdIjsKLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUFkZEF1ZGlvVHJhY2so
bG9uZyBuYXRpdmVTdHJlYW0sIGxvbmcgbmF0aXZlQXVkaW9UcmFjayk7Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRkVmlkZW9UcmFjayhsb25nIG5hdGl2ZVN0cmVh
bSwgbG9uZyBuYXRpdmVWaWRlb1RyYWNrKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgYm9v
bGVhbiBuYXRpdmVSZW1vdmVBdWRpb1RyYWNrKGxvbmcgbmF0aXZlU3RyZWFtLCBsb25nIG5hdGl2
ZUF1ZGlvVHJhY2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVJl
bW92ZVZpZGVvVHJhY2sobG9uZyBuYXRpdmVTdHJlYW0sIGxvbmcgbmF0aXZlVmlkZW9UcmFjayk7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0cmluZyBuYXRpdmVMYWJlbChsb25nIG5hdGl2
ZVN0cmVhbSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZShsb25nIG5hdGl2
ZVN0cmVhbSk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU3RyZWFtVHJhY2suamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL01lZGlhU3RyZWFtVHJhY2suamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbVRyYWNrLmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEz
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIE1lZGlhU3Ry
ZWFtVHJhY2tJbnRlcmZhY2UuICovCi1wdWJsaWMgY2xhc3MgTWVkaWFTdHJlYW1UcmFjayB7Ci0g
IC8qKiBUcmFja3MgTWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZS5UcmFja1N0YXRlICovCi0gIHB1
YmxpYyBlbnVtIFN0YXRlIHsgTElWRSwgRU5ERUQgfQotCi0gIGZpbmFsIGxvbmcgbmF0aXZlVHJh
Y2s7Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtVHJhY2sobG9uZyBuYXRpdmVUcmFjaykgewotICAg
IHRoaXMubmF0aXZlVHJhY2sgPSBuYXRpdmVUcmFjazsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcg
aWQoKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUlkKG5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1Ymxp
YyBTdHJpbmcga2luZCgpIHsKLSAgICByZXR1cm4gbmF0aXZlS2luZChuYXRpdmVUcmFjayk7Ci0g
IH0KLQotICBwdWJsaWMgYm9vbGVhbiBlbmFibGVkKCkgewotICAgIHJldHVybiBuYXRpdmVFbmFi
bGVkKG5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIHNldEVuYWJsZWQoYm9v
bGVhbiBlbmFibGUpIHsKLSAgICByZXR1cm4gbmF0aXZlU2V0RW5hYmxlZChuYXRpdmVUcmFjaywg
ZW5hYmxlKTsKLSAgfQotCi0gIHB1YmxpYyBTdGF0ZSBzdGF0ZSgpIHsKLSAgICByZXR1cm4gbmF0
aXZlU3RhdGUobmF0aXZlVHJhY2spOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsK
LSAgICBmcmVlKG5hdGl2ZVRyYWNrKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBT
dHJpbmcgbmF0aXZlSWQobG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0
aXZlIFN0cmluZyBuYXRpdmVLaW5kKGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHByaXZhdGUgc3Rh
dGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUVuYWJsZWQobG9uZyBuYXRpdmVUcmFjayk7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU2V0RW5hYmxlZChsb25nIG5hdGl2
ZVRyYWNrLCBib29sZWFuIGVuYWJsZWQpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBTdGF0
ZSBuYXRpdmVTdGF0ZShsb25nIG5hdGl2ZVRyYWNrKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRp
dmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlVHJhY2spOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9NZXRyaWNzLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9NZXRyaWNzLmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTWV0cmljcy5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsMTE0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEu
dXRpbC5NYXA7Ci0KLS8vIEphdmEtc2lkZSBvZiBhbmRyb2lkbWV0cmljc19qbmkuY2MuCi0vLwot
Ly8gUnRjIGhpc3RvZ3JhbXMgY2FuIGJlIHF1ZXJpZWQgdGhyb3VnaCB0aGUgQVBJLCBnZXRBbmRS
ZXNldCgpLgotLy8gVGhlIHJldHVybmVkIG1hcCBob2xkcyB0aGUgbmFtZSBvZiBhIGhpc3RvZ3Jh
bSBhbmQgaXRzIHNhbXBsZXMuCi0vLwotLy8gRXhhbXBsZSBvZiB8bWFwfCB3aXRoIG9uZSBoaXN0
b2dyYW06Ci0vLyB8bmFtZXw6ICJXZWJSVEMuVmlkZW8uSW5wdXRGcmFtZXNQZXJTZWNvbmQiCi0v
LyAgICAgfG1pbnw6IDEKLS8vICAgICB8bWF4fDogMTAwCi0vLyAgICAgfGJ1Y2tldENvdW50fDog
NTAKLS8vICAgICB8c2FtcGxlc3w6IFszMF06MQotLy8KLS8vIE1vc3QgaGlzdG9ncmFtcyBhcmUg
bm90IHVwZGF0ZWQgZnJlcXVlbnRseSAoZS5nLiBtb3N0IHZpZGVvIG1ldHJpY3MgYXJlIGFuCi0v
LyBhdmVyYWdlIG92ZXIgdGhlIGNhbGwgYW5kIHJlY29yZGVkIHdoZW4gYSBzdHJlYW0gaXMgcmVt
b3ZlZCkuCi0vLyBUaGUgbWV0cmljcyBjYW4gZm9yIGV4YW1wbGUgYmUgcmV0cmlldmVkIHdoZW4g
YSBwZWVyIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotCi1wdWJsaWMgY2xhc3MgTWV0cmljcyB7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTWV0cmljcyI7Ci0KLSAgc3RhdGlj
IHsKLSAgICBTeXN0ZW0ubG9hZExpYnJhcnkoImppbmdsZV9wZWVyY29ubmVjdGlvbl9zbyIpOwot
ICB9Ci0gIHB1YmxpYyBmaW5hbCBNYXA8U3RyaW5nLCBIaXN0b2dyYW1JbmZvPiBtYXAgPQotICAg
ICAgbmV3IEhhc2hNYXA8U3RyaW5nLCBIaXN0b2dyYW1JbmZvPigpOyAvLyA8bmFtZSwgSGlzdG9n
cmFtSW5mbz4KLQotICAvKioKLSAgICogQ2xhc3MgaG9sZGluZyBoaXN0b2dyYW0gaW5mb3JtYXRp
b24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEhpc3RvZ3JhbUluZm8gewotICAgIHB1
YmxpYyBmaW5hbCBpbnQgbWluOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgbWF4OwotICAgIHB1Ymxp
YyBmaW5hbCBpbnQgYnVja2V0Q291bnQ7Ci0gICAgcHVibGljIGZpbmFsIE1hcDxJbnRlZ2VyLCBJ
bnRlZ2VyPiBzYW1wbGVzID0KLSAgICAgICAgbmV3IEhhc2hNYXA8SW50ZWdlciwgSW50ZWdlcj4o
KTsgLy8gPHZhbHVlLCAjIG9mIGV2ZW50cz4KLQotICAgIHB1YmxpYyBIaXN0b2dyYW1JbmZvKGlu
dCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCkgewotICAgICAgdGhpcy5taW4gPSBtaW47
Ci0gICAgICB0aGlzLm1heCA9IG1heDsKLSAgICAgIHRoaXMuYnVja2V0Q291bnQgPSBidWNrZXRD
b3VudDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRTYW1wbGUoaW50IHZhbHVlLCBpbnQg
bnVtRXZlbnRzKSB7Ci0gICAgICBzYW1wbGVzLnB1dCh2YWx1ZSwgbnVtRXZlbnRzKTsKLSAgICB9
Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgZm9yIGhvbGRpbmcgdGhlIG5hdGl2ZSBwb2ludGVy
IG9mIGEgaGlzdG9ncmFtLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gZGVzdHJveSBhCi0gICAq
IGhpc3RvZ3JhbSwgcGxlYXNlIGRvbid0IGNyZWF0ZSB1bm5lY2Vzc2FyeSBpbnN0YW5jZXMgb2Yg
dGhpcyBvYmplY3QuIFRoaXMgY2xhc3MgaXMgdGhyZWFkIHNhZmUuCi0gICAqCi0gICAqIFVzYWdl
IGV4YW1wbGU6Ci0gICAqIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSBzb21lTWV0cmlj
SGlzdG9ncmFtID0KLSAgICogICAgIEhpc3RvZ3JhbS5jcmVhdGVDb3VudHMoIldlYlJUQy5WaWRl
by5Tb21lTWV0cmljIiwgMSwgMTAwMDAsIDUwKTsKLSAgICogc29tZU1ldHJpY0hpc3RvZ3JhbS5h
ZGRTYW1wbGUoc29tZVZhcmlhYmxlKTsKLSAgICovCi0gIHN0YXRpYyBjbGFzcyBIaXN0b2dyYW0g
ewotICAgIHByaXZhdGUgZmluYWwgbG9uZyBoYW5kbGU7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJp
bmcgbmFtZTsgLy8gT25seSB1c2VkIGZvciBsb2dnaW5nLgotCi0gICAgcHJpdmF0ZSBIaXN0b2dy
YW0obG9uZyBoYW5kbGUsIFN0cmluZyBuYW1lKSB7Ci0gICAgICB0aGlzLmhhbmRsZSA9IGhhbmRs
ZTsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgc3RhdGljIHB1YmxpYyBI
aXN0b2dyYW0gY3JlYXRlQ291bnRzKFN0cmluZyBuYW1lLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQg
YnVja2V0Q291bnQpIHsKLSAgICAgIHJldHVybiBuZXcgSGlzdG9ncmFtKG5hdGl2ZUNyZWF0ZUNv
dW50cyhuYW1lLCBtaW4sIG1heCwgYnVja2V0Q291bnQpLCBuYW1lKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgcHVibGljIEhpc3RvZ3JhbSBjcmVhdGVFbnVtZXJhdGlvbihTdHJpbmcgbmFtZSwgaW50
IG1heCkgewotICAgICAgcmV0dXJuIG5ldyBIaXN0b2dyYW0obmF0aXZlQ3JlYXRlRW51bWVyYXRp
b24obmFtZSwgbWF4KSwgbmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkU2FtcGxl
KGludCBzYW1wbGUpIHsKLSAgICAgIG5hdGl2ZUFkZFNhbXBsZShoYW5kbGUsIHNhbXBsZSk7Ci0g
ICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlQ291bnRz
KFN0cmluZyBuYW1lLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpOwotICAgIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZUVudW1lcmF0aW9uKFN0cmluZyBu
YW1lLCBpbnQgbWF4KTsKLSAgICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVBZGRT
YW1wbGUobG9uZyBoYW5kbGUsIGludCBzYW1wbGUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFk
ZChTdHJpbmcgbmFtZSwgSGlzdG9ncmFtSW5mbyBpbmZvKSB7Ci0gICAgbWFwLnB1dChuYW1lLCBp
bmZvKTsKLSAgfQotCi0gIC8vIEVuYWJsZXMgZ2F0aGVyaW5nIG9mIG1ldHJpY3MgKHdoaWNoIGNh
biBiZSBmZXRjaGVkIHdpdGggZ2V0QW5kUmVzZXQoKSkuCi0gIC8vIE11c3QgYmUgY2FsbGVkIGJl
Zm9yZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgaXMgY3JlYXRlZC4KLSAgcHVibGljIHN0YXRpYyB2
b2lkIGVuYWJsZSgpIHsKLSAgICBuYXRpdmVFbmFibGUoKTsKLSAgfQotCi0gIC8vIEdldHMgYW5k
IGNsZWFycyBuYXRpdmUgaGlzdG9ncmFtcy4KLSAgcHVibGljIHN0YXRpYyBNZXRyaWNzIGdldEFu
ZFJlc2V0KCkgewotICAgIHJldHVybiBuYXRpdmVHZXRBbmRSZXNldCgpOwotICB9Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlRW5hYmxlKCk7Ci0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSBNZXRyaWNzIG5hdGl2ZUdldEFuZFJlc2V0KCk7Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL05ldHdvcmtNb25pdG9yLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy9OZXR3b3JrTW9uaXRvci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL05ldHdvcmtNb25pdG9yLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNTQgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGlj
IG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpb25UeXBlOwotaW1w
b3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5JTlZBTElEX05F
VF9JRDsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3Qu
TmV0d29ya0luZm9ybWF0aW9uOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQm9ycm93ZWQgZnJvbSBDaHJvbWl1bSdz
IHNyYy9uZXQvYW5kcm9pZC9qYXZhL3NyYy9vcmcvY2hyb21pdW0vbmV0L05ldHdvcmtDaGFuZ2VO
b3RpZmllci5qYXZhCi0gKgotICogVHJpZ2dlcnMgdXBkYXRlcyB0byB0aGUgdW5kZXJseWluZyBu
ZXR3b3JrIHN0YXRlIGZyb20gT1MgbmV0d29ya2luZyBldmVudHMuCi0gKgotICogV0FSTklORzog
VGhpcyBjbGFzcyBpcyBub3QgdGhyZWFkLXNhZmUuCi0gKi8KLXB1YmxpYyBjbGFzcyBOZXR3b3Jr
TW9uaXRvciB7Ci0gIC8qKgotICAgKiBBbGVydGVkIHdoZW4gdGhlIGNvbm5lY3Rpb24gdHlwZSBv
ZiB0aGUgbmV0d29yayBjaGFuZ2VzLgotICAgKiBUaGUgYWxlcnQgaXMgZmlyZWQgb24gdGhlIFVJ
IHRocmVhZC4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgTmV0d29ya09ic2VydmVyIHsKLSAg
ICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChDb25uZWN0aW9uVHlwZSBjb25u
ZWN0aW9uVHlwZSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0g
Ik5ldHdvcmtNb25pdG9yIjsKLSAgcHJpdmF0ZSBzdGF0aWMgTmV0d29ya01vbml0b3IgaW5zdGFu
Y2U7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dDsKLQotICAv
LyBOYXRpdmUgb2JzZXJ2ZXJzIG9mIHRoZSBjb25uZWN0aW9uIHR5cGUgY2hhbmdlcy4KLSAgcHJp
dmF0ZSBmaW5hbCBBcnJheUxpc3Q8TG9uZz4gbmF0aXZlTmV0d29ya09ic2VydmVyczsKLSAgLy8g
SmF2YSBvYnNlcnZlcnMgb2YgdGhlIGNvbm5lY3Rpb24gdHlwZSBjaGFuZ2VzLgotICBwcml2YXRl
IGZpbmFsIEFycmF5TGlzdDxOZXR3b3JrT2JzZXJ2ZXI+IG5ldHdvcmtPYnNlcnZlcnM7Ci0KLSAg
Ly8gT2JqZWN0IHRoYXQgZGV0ZWN0cyB0aGUgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gIHBy
aXZhdGUgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGF1dG9EZXRlY3RvcjsKLQotICBwcml2YXRl
IENvbm5lY3Rpb25UeXBlIGN1cnJlbnRDb25uZWN0aW9uVHlwZSA9IENvbm5lY3Rpb25UeXBlLkNP
Tk5FQ1RJT05fVU5LTk9XTjsKLQotICBwcml2YXRlIE5ldHdvcmtNb25pdG9yKENvbnRleHQgY29u
dGV4dCkgewotICAgIGFzc2VydElzVHJ1ZShjb250ZXh0ICE9IG51bGwpOwotICAgIGFwcGxpY2F0
aW9uQ29udGV4dCA9Ci0gICAgICAgIGNvbnRleHQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCkgPT0g
bnVsbCA/IGNvbnRleHQgOiBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwotCi0gICAg
bmF0aXZlTmV0d29ya09ic2VydmVycyA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKLSAgICBuZXR3
b3JrT2JzZXJ2ZXJzID0gbmV3IEFycmF5TGlzdDxOZXR3b3JrT2JzZXJ2ZXI+KCk7Ci0gIH0KLQot
ICAvKioKLSAgICogSW5pdGlhbGl6ZXMgdGhlIHNpbmdsZXRvbiBvbmNlLgotICAgKiBDYWxsZWQg
ZnJvbSB0aGUgbmF0aXZlIGNvZGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIE5ldHdvcmtNb25p
dG9yIGluaXQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsK
LSAgICAgIGluc3RhbmNlID0gbmV3IE5ldHdvcmtNb25pdG9yKGNvbnRleHQpOwotICAgIH0KLSAg
ICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNJbml0
aWFsaXplZCgpIHsKLSAgICByZXR1cm4gaW5zdGFuY2UgIT0gbnVsbDsKLSAgfQotCi0gIC8qKgot
ICAgKiBSZXR1cm5zIHRoZSBzaW5nbGV0b24gaW5zdGFuY2UuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIE5ldHdvcmtNb25pdG9yIGdldEluc3RhbmNlKCkgewotICAgIHJldHVybiBpbnN0YW5jZTsK
LSAgfQotCi0gIC8qKgotICAgKiBFbmFibGVzIGF1dG8gZGV0ZWN0aW9uIG9mIHRoZSBjdXJyZW50
IG5ldHdvcmsgc3RhdGUgYmFzZWQgb24gbm90aWZpY2F0aW9ucyBmcm9tIHRoZSBzeXN0ZW0uCi0g
ICAqIE5vdGUgdGhhdCBwYXNzaW5nIHRydWUgaGVyZSByZXF1aXJlcyB0aGUgZW1iZWRkaW5nIGFw
cCBoYXZlIHRoZSBwbGF0Zm9ybSBBQ0NFU1NfTkVUV09SS19TVEFURQotICAgKiBwZXJtaXNzaW9u
LgotICAgKgotICAgKiBAcGFyYW0gc2hvdWxkQXV0b0RldGVjdCB0cnVlIGlmIHRoZSBOZXR3b3Jr
TW9uaXRvciBzaG91bGQgbGlzdGVuIGZvciBzeXN0ZW0gY2hhbmdlcyBpbgotICAgKiAgbmV0d29y
ayBjb25uZWN0aXZpdHkuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0QXV0b0RldGVj
dENvbm5lY3Rpdml0eVN0YXRlKGJvb2xlYW4gc2hvdWxkQXV0b0RldGVjdCkgewotICAgIGdldElu
c3RhbmNlKCkuc2V0QXV0b0RldGVjdENvbm5lY3Rpdml0eVN0YXRlSW50ZXJuYWwoc2hvdWxkQXV0
b0RldGVjdCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydElzVHJ1ZShib29s
ZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcg
QXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIHRvIGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBDYWxsZWQgYnkgdGhlIG5hdGl2ZSBjb2RlLgotICBwcml2YXRlIHZvaWQgc3RhcnRNb25pdG9y
aW5nKGxvbmcgbmF0aXZlT2JzZXJ2ZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiU3RhcnQgbW9u
aXRvcmluZyBmcm9tIG5hdGl2ZSBvYnNlcnZlciAiICsgbmF0aXZlT2JzZXJ2ZXIpOwotICAgIG5h
dGl2ZU5ldHdvcmtPYnNlcnZlcnMuYWRkKG5hdGl2ZU9ic2VydmVyKTsKLSAgICBzZXRBdXRvRGV0
ZWN0Q29ubmVjdGl2aXR5U3RhdGVJbnRlcm5hbCh0cnVlKTsKLSAgfQotCi0gIC8vIENhbGxlZCBi
eSB0aGUgbmF0aXZlIGNvZGUuCi0gIHByaXZhdGUgdm9pZCBzdG9wTW9uaXRvcmluZyhsb25nIG5h
dGl2ZU9ic2VydmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIlN0b3AgbW9uaXRvcmluZyBmcm9t
IG5hdGl2ZSBvYnNlcnZlciAiICsgbmF0aXZlT2JzZXJ2ZXIpOwotICAgIHNldEF1dG9EZXRlY3RD
b25uZWN0aXZpdHlTdGF0ZUludGVybmFsKGZhbHNlKTsKLSAgICBuYXRpdmVOZXR3b3JrT2JzZXJ2
ZXJzLnJlbW92ZShuYXRpdmVPYnNlcnZlcik7Ci0gIH0KLQotICAvLyBDYWxsZWQgYnkgdGhlIG5h
dGl2ZSBjb2RlIHRvIGdldCB0aGUgQW5kcm9pZCBTREsgdmVyc2lvbi4KLSAgcHJpdmF0ZSBzdGF0
aWMgaW50IGFuZHJvaWRTZGtJbnQoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lO
VDsKLSAgfQotCi0gIHByaXZhdGUgQ29ubmVjdGlvblR5cGUgZ2V0Q3VycmVudENvbm5lY3Rpb25U
eXBlKCkgewotICAgIHJldHVybiBjdXJyZW50Q29ubmVjdGlvblR5cGU7Ci0gIH0KLQotICBwcml2
YXRlIGxvbmcgZ2V0Q3VycmVudERlZmF1bHROZXRJZCgpIHsKLSAgICByZXR1cm4gYXV0b0RldGVj
dG9yID09IG51bGwgPyBJTlZBTElEX05FVF9JRCA6IGF1dG9EZXRlY3Rvci5nZXREZWZhdWx0TmV0
SWQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkZXN0cm95QXV0b0RldGVjdG9yKCkgewotICAg
IGlmIChhdXRvRGV0ZWN0b3IgIT0gbnVsbCkgewotICAgICAgYXV0b0RldGVjdG9yLmRlc3Ryb3ko
KTsKLSAgICAgIGF1dG9EZXRlY3RvciA9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHNldEF1dG9EZXRlY3RDb25uZWN0aXZpdHlTdGF0ZUludGVybmFsKGJvb2xlYW4gc2hvdWxk
QXV0b0RldGVjdCkgewotICAgIGlmICghc2hvdWxkQXV0b0RldGVjdCkgewotICAgICAgZGVzdHJv
eUF1dG9EZXRlY3RvcigpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYXV0b0RldGVj
dG9yID09IG51bGwpIHsKLSAgICAgIGF1dG9EZXRlY3RvciA9IG5ldyBOZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QobmV3IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5PYnNlcnZlcigpIHsKLQotICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5n
ZWQoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5cGUpIHsKLSAgICAgICAgICB1cGRhdGVD
dXJyZW50Q29ubmVjdGlvblR5cGUobmV3Q29ubmVjdGlvblR5cGUpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Nvbm5lY3QoTmV0
d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvKSB7Ci0gICAgICAgICAgbm90aWZ5T2JzZXJ2ZXJz
T2ZOZXR3b3JrQ29ubmVjdChuZXR3b3JrSW5mbyk7Ci0gICAgICAgIH0KLQotICAgICAgICBAT3Zl
cnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25OZXR3b3JrRGlzY29ubmVjdChsb25nIG5ldHdv
cmtIYW5kbGUpIHsKLSAgICAgICAgICBub3RpZnlPYnNlcnZlcnNPZk5ldHdvcmtEaXNjb25uZWN0
KG5ldHdvcmtIYW5kbGUpOwotICAgICAgICB9Ci0gICAgICB9LCBhcHBsaWNhdGlvbkNvbnRleHQp
OwotICAgICAgZmluYWwgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtTdGF0ZSBuZXR3
b3JrU3RhdGUgPQotICAgICAgICAgIGF1dG9EZXRlY3Rvci5nZXRDdXJyZW50TmV0d29ya1N0YXRl
KCk7Ci0gICAgICB1cGRhdGVDdXJyZW50Q29ubmVjdGlvblR5cGUoTmV0d29ya01vbml0b3JBdXRv
RGV0ZWN0LmdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSkpOwotICAgICAgdXBkYXRlQWN0
aXZlTmV0d29ya0xpc3QoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlQ3Vy
cmVudENvbm5lY3Rpb25UeXBlKENvbm5lY3Rpb25UeXBlIG5ld0Nvbm5lY3Rpb25UeXBlKSB7Ci0g
ICAgY3VycmVudENvbm5lY3Rpb25UeXBlID0gbmV3Q29ubmVjdGlvblR5cGU7Ci0gICAgbm90aWZ5
T2JzZXJ2ZXJzT2ZDb25uZWN0aW9uVHlwZUNoYW5nZShuZXdDb25uZWN0aW9uVHlwZSk7Ci0gIH0K
LQotICAvKioKLSAgICogQWxlcnRzIGFsbCBvYnNlcnZlcnMgb2YgYSBjb25uZWN0aW9uIGNoYW5n
ZS4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBub3RpZnlPYnNlcnZlcnNPZkNvbm5lY3Rpb25UeXBl
Q2hhbmdlKENvbm5lY3Rpb25UeXBlIG5ld0Nvbm5lY3Rpb25UeXBlKSB7Ci0gICAgZm9yIChsb25n
IG5hdGl2ZU9ic2VydmVyIDogbmF0aXZlTmV0d29ya09ic2VydmVycykgewotICAgICAgbmF0aXZl
Tm90aWZ5Q29ubmVjdGlvblR5cGVDaGFuZ2VkKG5hdGl2ZU9ic2VydmVyKTsKLSAgICB9Ci0gICAg
Zm9yIChOZXR3b3JrT2JzZXJ2ZXIgb2JzZXJ2ZXIgOiBuZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAg
ICBvYnNlcnZlci5vbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChuZXdDb25uZWN0aW9uVHlwZSk7Ci0g
ICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG5vdGlmeU9ic2VydmVyc09mTmV0d29ya0Nvbm5l
Y3QoTmV0d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvKSB7Ci0gICAgZm9yIChsb25nIG5hdGl2
ZU9ic2VydmVyIDogbmF0aXZlTmV0d29ya09ic2VydmVycykgewotICAgICAgbmF0aXZlTm90aWZ5
T2ZOZXR3b3JrQ29ubmVjdChuYXRpdmVPYnNlcnZlciwgbmV0d29ya0luZm8pOwotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBub3RpZnlPYnNlcnZlcnNPZk5ldHdvcmtEaXNjb25uZWN0KGxv
bmcgbmV0d29ya0hhbmRsZSkgewotICAgIGZvciAobG9uZyBuYXRpdmVPYnNlcnZlciA6IG5hdGl2
ZU5ldHdvcmtPYnNlcnZlcnMpIHsKLSAgICAgIG5hdGl2ZU5vdGlmeU9mTmV0d29ya0Rpc2Nvbm5l
Y3QobmF0aXZlT2JzZXJ2ZXIsIG5ldHdvcmtIYW5kbGUpOwotICAgIH0KLSAgfQotCi0gIHByaXZh
dGUgdm9pZCB1cGRhdGVBY3RpdmVOZXR3b3JrTGlzdCgpIHsKLSAgICBMaXN0PE5ldHdvcmtJbmZv
cm1hdGlvbj4gbmV0d29ya0luZm9MaXN0ID0gYXV0b0RldGVjdG9yLmdldEFjdGl2ZU5ldHdvcmtM
aXN0KCk7Ci0gICAgaWYgKG5ldHdvcmtJbmZvTGlzdCA9PSBudWxsIHx8IG5ldHdvcmtJbmZvTGlz
dC5zaXplKCkgPT0gMCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE5ldHdvcmtJbmZv
cm1hdGlvbltdIG5ldHdvcmtJbmZvcyA9IG5ldyBOZXR3b3JrSW5mb3JtYXRpb25bbmV0d29ya0lu
Zm9MaXN0LnNpemUoKV07Ci0gICAgbmV0d29ya0luZm9zID0gbmV0d29ya0luZm9MaXN0LnRvQXJy
YXkobmV0d29ya0luZm9zKTsKLSAgICBmb3IgKGxvbmcgbmF0aXZlT2JzZXJ2ZXIgOiBuYXRpdmVO
ZXR3b3JrT2JzZXJ2ZXJzKSB7Ci0gICAgICBuYXRpdmVOb3RpZnlPZkFjdGl2ZU5ldHdvcmtMaXN0
KG5hdGl2ZU9ic2VydmVyLCBuZXR3b3JrSW5mb3MpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBBZGRzIGFuIG9ic2VydmVyIGZvciBhbnkgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gICAq
LwotICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkTmV0d29ya09ic2VydmVyKE5ldHdvcmtPYnNlcnZl
ciBvYnNlcnZlcikgewotICAgIGdldEluc3RhbmNlKCkuYWRkTmV0d29ya09ic2VydmVySW50ZXJu
YWwob2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGFkZE5ldHdvcmtPYnNlcnZlcklu
dGVybmFsKE5ldHdvcmtPYnNlcnZlciBvYnNlcnZlcikgewotICAgIG5ldHdvcmtPYnNlcnZlcnMu
YWRkKG9ic2VydmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZW1vdmVzIGFuIG9ic2VydmVyIGZv
ciBhbnkgY29ubmVjdGlvbiB0eXBlIGNoYW5nZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIHZv
aWQgcmVtb3ZlTmV0d29ya09ic2VydmVyKE5ldHdvcmtPYnNlcnZlciBvYnNlcnZlcikgewotICAg
IGdldEluc3RhbmNlKCkucmVtb3ZlTmV0d29ya09ic2VydmVySW50ZXJuYWwob2JzZXJ2ZXIpOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbW92ZU5ldHdvcmtPYnNlcnZlckludGVybmFsKE5ldHdv
cmtPYnNlcnZlciBvYnNlcnZlcikgewotICAgIG5ldHdvcmtPYnNlcnZlcnMucmVtb3ZlKG9ic2Vy
dmVyKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3MgaWYgdGhlcmUgY3VycmVudGx5IGlzIGNv
bm5lY3Rpdml0eS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc09ubGluZSgpIHsK
LSAgICBDb25uZWN0aW9uVHlwZSBjb25uZWN0aW9uVHlwZSA9IGdldEluc3RhbmNlKCkuZ2V0Q3Vy
cmVudENvbm5lY3Rpb25UeXBlKCk7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25UeXBlICE9IENvbm5l
Y3Rpb25UeXBlLkNPTk5FQ1RJT05fTk9ORTsKLSAgfQotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQg
bmF0aXZlTm90aWZ5Q29ubmVjdGlvblR5cGVDaGFuZ2VkKGxvbmcgbmF0aXZlUHRyKTsKLSAgcHJp
dmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVOb3RpZnlPZk5ldHdvcmtDb25uZWN0KGxvbmcgbmF0aXZl
UHRyLCBOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm8pOwotICBwcml2YXRlIG5hdGl2ZSB2
b2lkIG5hdGl2ZU5vdGlmeU9mTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBuYXRpdmVQdHIsIGxvbmcg
bmV0d29ya0hhbmRsZSk7Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlTm90aWZ5T2ZBY3Rp
dmVOZXR3b3JrTGlzdCgKLSAgICAgIGxvbmcgbmF0aXZlUHRyLCBOZXR3b3JrSW5mb3JtYXRpb25b
XSBuZXR3b3JrSW5mb3MpOwotCi0gIC8vIEZvciB0ZXN0aW5nIG9ubHkuCi0gIHN0YXRpYyB2b2lk
IHJlc2V0SW5zdGFuY2VGb3JUZXN0cyhDb250ZXh0IGNvbnRleHQpIHsKLSAgICBpbnN0YW5jZSA9
IG5ldyBOZXR3b3JrTW9uaXRvcihjb250ZXh0KTsKLSAgfQotCi0gIC8vIEZvciB0ZXN0aW5nIG9u
bHkuCi0gIHB1YmxpYyBzdGF0aWMgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IGdldEF1dG9EZXRl
Y3RvckZvclRlc3QoKSB7Ci0gICAgcmV0dXJuIGdldEluc3RhbmNlKCkuYXV0b0RldGVjdG9yOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0
ZWN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvTmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MjAgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIGFu
ZHJvaWQubmV0Lk5ldHdvcmtDYXBhYmlsaXRpZXMuTkVUX0NBUEFCSUxJVFlfSU5URVJORVQ7Ci1p
bXBvcnQgc3RhdGljIGFuZHJvaWQubmV0Lk5ldHdvcmtDYXBhYmlsaXRpZXMuVFJBTlNQT1JUX0NF
TExVTEFSOwotCi1pbXBvcnQgYW5kcm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uOwotaW1wb3J0IGFu
ZHJvaWQuYW5ub3RhdGlvbi5TdXBwcmVzc0xpbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkJy
b2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0
IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZp
bHRlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFu
ZHJvaWQubmV0LkNvbm5lY3Rpdml0eU1hbmFnZXIuTmV0d29ya0NhbGxiYWNrOwotaW1wb3J0IGFu
ZHJvaWQubmV0LkxpbmtBZGRyZXNzOwotaW1wb3J0IGFuZHJvaWQubmV0LkxpbmtQcm9wZXJ0aWVz
OwotaW1wb3J0IGFuZHJvaWQubmV0Lk5ldHdvcms7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29y
a0NhcGFiaWxpdGllczsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrSW5mbzsKLWltcG9ydCBh
bmRyb2lkLm5ldC5OZXR3b3JrUmVxdWVzdDsKLWltcG9ydCBhbmRyb2lkLm5ldC53aWZpLldpZmlJ
bmZvOwotaW1wb3J0IGFuZHJvaWQubmV0LndpZmkuV2lmaU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9p
ZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnRlbGVwaG9ueS5UZWxlcGhvbnlNYW5hZ2VyOwot
Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQot
LyoqCi0gKiBCb3Jyb3dlZCBmcm9tIENocm9taXVtJ3MKLSAqIHNyYy9uZXQvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvY2hyb21pdW0vbmV0L05ldHdvcmtDaGFuZ2VOb3RpZmllckF1dG9EZXRlY3QuamF2
YQotICoKLSAqIFVzZWQgYnkgdGhlIE5ldHdvcmtNb25pdG9yIHRvIGxpc3RlbiB0byBwbGF0Zm9y
bSBjaGFuZ2VzIGluIGNvbm5lY3Rpdml0eS4KLSAqIE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBjbGFz
cyByZXF1aXJlcyB0aGF0IHRoZSBhcHAgaGF2ZSB0aGUgcGxhdGZvcm0KLSAqIEFDQ0VTU19ORVRX
T1JLX1NUQVRFIHBlcm1pc3Npb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBOZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QgZXh0ZW5kcyBCcm9hZGNhc3RSZWNlaXZlciB7Ci0gIHB1YmxpYyBzdGF0aWMgZW51
bSBDb25uZWN0aW9uVHlwZSB7Ci0gICAgQ09OTkVDVElPTl9VTktOT1dOLAotICAgIENPTk5FQ1RJ
T05fRVRIRVJORVQsCi0gICAgQ09OTkVDVElPTl9XSUZJLAotICAgIENPTk5FQ1RJT05fNEcsCi0g
ICAgQ09OTkVDVElPTl8zRywKLSAgICBDT05ORUNUSU9OXzJHLAotICAgIENPTk5FQ1RJT05fVU5L
Tk9XTl9DRUxMVUxBUiwKLSAgICBDT05ORUNUSU9OX0JMVUVUT09USCwKLSAgICBDT05ORUNUSU9O
X05PTkUKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgSVBBZGRyZXNzIHsKLSAgICBwdWJs
aWMgZmluYWwgYnl0ZVtdIGFkZHJlc3M7Ci0gICAgcHVibGljIElQQWRkcmVzcyhieXRlW10gYWRk
cmVzcykgewotICAgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKLSAgICB9Ci0gIH0KLQotICAv
KiogSmF2YSB2ZXJzaW9uIG9mIE5ldHdvcmtNb25pdG9yLk5ldHdvcmtJbmZvcm1hdGlvbiAqLwot
ICBwdWJsaWMgc3RhdGljIGNsYXNzIE5ldHdvcmtJbmZvcm1hdGlvbiB7Ci0gICAgcHVibGljIGZp
bmFsIFN0cmluZyBuYW1lOwotICAgIHB1YmxpYyBmaW5hbCBDb25uZWN0aW9uVHlwZSB0eXBlOwot
ICAgIHB1YmxpYyBmaW5hbCBsb25nIGhhbmRsZTsKLSAgICBwdWJsaWMgZmluYWwgSVBBZGRyZXNz
W10gaXBBZGRyZXNzZXM7Ci0gICAgcHVibGljIE5ldHdvcmtJbmZvcm1hdGlvbigKLSAgICAgICAg
U3RyaW5nIG5hbWUsIENvbm5lY3Rpb25UeXBlIHR5cGUsIGxvbmcgaGFuZGxlLCBJUEFkZHJlc3Nb
XSBhZGRyZXNzZXMpIHsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgICB0aGlzLnR5cGUg
PSB0eXBlOwotICAgICAgdGhpcy5oYW5kbGUgPSBoYW5kbGU7Ci0gICAgICB0aGlzLmlwQWRkcmVz
c2VzID0gYWRkcmVzc2VzOwotICAgIH0KLSAgfTsKLQotICBzdGF0aWMgY2xhc3MgTmV0d29ya1N0
YXRlIHsKLSAgICBwcml2YXRlIGZpbmFsIGJvb2xlYW4gY29ubmVjdGVkOwotICAgIC8vIERlZmlu
ZWQgZnJvbSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfWFhYIGZvciBub24tbW9iaWxlOyBmb3Ig
bW9iaWxlLCBpdCBpcwotICAgIC8vIGZ1cnRoZXIgZGl2aWRlZCBpbnRvIDJHLCAzRywgb3IgNEcg
ZnJvbSB0aGUgc3VidHlwZS4KLSAgICBwcml2YXRlIGZpbmFsIGludCB0eXBlOwotICAgIC8vIERl
ZmluZWQgZnJvbSBOZXR3b3JrSW5mby5zdWJ0eXBlLCB3aGljaCBpcyBvbmUgb2YgdGhlIFRlbGVw
aG9ueU1hbmFnZXIuTkVUV09SS19UWVBFX1hYWHMuCi0gICAgLy8gV2lsbCBiZSB1c2VmdWwgdG8g
ZmluZCB0aGUgbWF4aW11bSBiYW5kd2lkdGguCi0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgc3VidHlw
ZTsKLQotICAgIHB1YmxpYyBOZXR3b3JrU3RhdGUoYm9vbGVhbiBjb25uZWN0ZWQsIGludCB0eXBl
LCBpbnQgc3VidHlwZSkgewotICAgICAgdGhpcy5jb25uZWN0ZWQgPSBjb25uZWN0ZWQ7Ci0gICAg
ICB0aGlzLnR5cGUgPSB0eXBlOwotICAgICAgdGhpcy5zdWJ0eXBlID0gc3VidHlwZTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0Nvbm5lY3RlZCgpIHsKLSAgICAgIHJldHVybiBjb25u
ZWN0ZWQ7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBnZXROZXR3b3JrVHlwZSgpIHsKLSAgICAg
IHJldHVybiB0eXBlOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZ2V0TmV0d29ya1N1YlR5cGUo
KSB7Ci0gICAgICByZXR1cm4gc3VidHlwZTsKLSAgICB9Ci0gIH0KLSAgLyoqCi0gICAqIFRoZSBt
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
V2UgaGFuZGxlIHRoYXQKLSAgICAgKiAgZ3JhY2VmdWxseSBiZWxvdy4KLSAgICAgKi8KLSAgICBw
cml2YXRlIGZpbmFsIENvbm5lY3Rpdml0eU1hbmFnZXIgY29ubmVjdGl2aXR5TWFuYWdlcjsKLQot
ICAgIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZShDb250ZXh0IGNvbnRleHQpIHsKLSAgICAg
IGNvbm5lY3Rpdml0eU1hbmFnZXIgPQotICAgICAgICAgIChDb25uZWN0aXZpdHlNYW5hZ2VyKSBj
b250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DT05ORUNUSVZJVFlfU0VSVklDRSk7Ci0g
ICAgfQotCi0gICAgLy8gRm9yIHRlc3RpbmcuCi0gICAgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVn
YXRlKCkgewotICAgICAgLy8gQWxsIHRoZSBtZXRob2RzIGJlbG93IHNob3VsZCBiZSBvdmVycmlk
ZGVuLgotICAgICAgY29ubmVjdGl2aXR5TWFuYWdlciA9IG51bGw7Ci0gICAgfQotCi0gICAgLyoq
Ci0gICAgICogUmV0dXJucyBjb25uZWN0aW9uIHR5cGUgYW5kIHN0YXR1cyBpbmZvcm1hdGlvbiBh
Ym91dCB0aGUgY3VycmVudAotICAgICAqIGRlZmF1bHQgbmV0d29yay4KLSAgICAgKi8KLSAgICBO
ZXR3b3JrU3RhdGUgZ2V0TmV0d29ya1N0YXRlKCkgewotICAgICAgaWYgKGNvbm5lY3Rpdml0eU1h
bmFnZXIgPT0gbnVsbCkgewotICAgICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwg
LTEsIC0xKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBnZXROZXR3b3JrU3RhdGUoY29ubmVjdGl2
aXR5TWFuYWdlci5nZXRBY3RpdmVOZXR3b3JrSW5mbygpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBSZXR1cm5zIGNvbm5lY3Rpb24gdHlwZSBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0
IHxuZXR3b3JrfC4KLSAgICAgKiBPbmx5IGNhbGxhYmxlIG9uIExvbGxpcG9wIGFuZCBuZXdlciBy
ZWxlYXNlcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIE5ldHdv
cmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoTmV0d29yayBuZXR3b3JrKSB7Ci0gICAgICBpZiAoY29u
bmVjdGl2aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0
YXRlKGZhbHNlLCAtMSwgLTEpOwotICAgICAgfQotICAgICAgcmV0dXJuIGdldE5ldHdvcmtTdGF0
ZShjb25uZWN0aXZpdHlNYW5hZ2VyLmdldE5ldHdvcmtJbmZvKG5ldHdvcmspKTsKLSAgICB9Ci0K
LSAgICAvKioKLSAgICAgKiBSZXR1cm5zIGNvbm5lY3Rpb24gdHlwZSBhbmQgc3RhdHVzIGluZm9y
bWF0aW9uIGdsZWFuZWQgZnJvbSBuZXR3b3JrSW5mby4KLSAgICAgKi8KLSAgICBOZXR3b3JrU3Rh
dGUgZ2V0TmV0d29ya1N0YXRlKE5ldHdvcmtJbmZvIG5ldHdvcmtJbmZvKSB7Ci0gICAgICBpZiAo
bmV0d29ya0luZm8gPT0gbnVsbCB8fCAhbmV0d29ya0luZm8uaXNDb25uZWN0ZWQoKSkgewotICAg
ICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwgLTEsIC0xKTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKHRydWUsIG5ldHdvcmtJbmZvLmdldFR5cGUoKSwg
bmV0d29ya0luZm8uZ2V0U3VidHlwZSgpKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1
cm5zIGFsbCBjb25uZWN0ZWQgbmV0d29ya3MuCi0gICAgICogT25seSBjYWxsYWJsZSBvbiBMb2xs
aXBvcCBhbmQgbmV3ZXIgcmVsZWFzZXMuCi0gICAgICovCi0gICAgQFN1cHByZXNzTGludCgiTmV3
QXBpIikKLSAgICBOZXR3b3JrW10gZ2V0QWxsTmV0d29ya3MoKSB7Ci0gICAgICBpZiAoY29ubmVj
dGl2aXR5TWFuYWdlciA9PSBudWxsKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTmV0d29ya1swXTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBjb25uZWN0aXZpdHlNYW5hZ2VyLmdldEFsbE5ldHdvcmtz
KCk7Ci0gICAgfQotCi0gICAgTGlzdDxOZXR3b3JrSW5mb3JtYXRpb24+IGdldEFjdGl2ZU5ldHdv
cmtMaXN0KCkgewotICAgICAgaWYgKCFzdXBwb3J0TmV0d29ya0NhbGxiYWNrKCkpIHsKLSAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICBBcnJheUxpc3Q8TmV0d29ya0luZm9ybWF0
aW9uPiBuZXRJbmZvTGlzdCA9IG5ldyBBcnJheUxpc3Q8TmV0d29ya0luZm9ybWF0aW9uPigpOwot
ICAgICAgZm9yIChOZXR3b3JrIG5ldHdvcmsgOiBnZXRBbGxOZXR3b3JrcygpKSB7Ci0gICAgICAg
IE5ldHdvcmtJbmZvcm1hdGlvbiBpbmZvID0gbmV0d29ya1RvSW5mbyhuZXR3b3JrKTsKLSAgICAg
ICAgaWYgKGluZm8gIT0gbnVsbCkgewotICAgICAgICAgIG5ldEluZm9MaXN0LmFkZChpbmZvKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgcmV0dXJuIG5ldEluZm9MaXN0OwotICAgIH0KLQot
ICAgIC8qKgotICAgICAqIFJldHVybnMgdGhlIE5ldElEIG9mIHRoZSBjdXJyZW50IGRlZmF1bHQg
bmV0d29yay4gUmV0dXJucwotICAgICAqIElOVkFMSURfTkVUX0lEIGlmIG5vIGN1cnJlbnQgZGVm
YXVsdCBuZXR3b3JrIGNvbm5lY3RlZC4KLSAgICAgKiBPbmx5IGNhbGxhYmxlIG9uIExvbGxpcG9w
IGFuZCBuZXdlciByZWxlYXNlcy4KLSAgICAgKi8KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGki
KQotICAgIGxvbmcgZ2V0RGVmYXVsdE5ldElkKCkgewotICAgICAgaWYgKCFzdXBwb3J0TmV0d29y
a0NhbGxiYWNrKCkpIHsKLSAgICAgICAgcmV0dXJuIElOVkFMSURfTkVUX0lEOwotICAgICAgfQot
ICAgICAgLy8gQW5kcm9pZCBMb2xsaXBvcCBoYWQgbm8gQVBJIHRvIGdldCB0aGUgZGVmYXVsdCBu
ZXR3b3JrOyBvbmx5IGFuCi0gICAgICAvLyBBUEkgdG8gcmV0dXJuIHRoZSBOZXR3b3JrSW5mbyBm
b3IgdGhlIGRlZmF1bHQgbmV0d29yay4gVG8KLSAgICAgIC8vIGRldGVybWluZSB0aGUgZGVmYXVs
dCBuZXR3b3JrIG9uZSBjYW4gZmluZCB0aGUgbmV0d29yayB3aXRoCi0gICAgICAvLyB0eXBlIG1h
dGNoaW5nIHRoYXQgb2YgdGhlIGRlZmF1bHQgbmV0d29yay4KLSAgICAgIGZpbmFsIE5ldHdvcmtJ
bmZvIGRlZmF1bHROZXR3b3JrSW5mbyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0QWN0aXZlTmV0
d29ya0luZm8oKTsKLSAgICAgIGlmIChkZWZhdWx0TmV0d29ya0luZm8gPT0gbnVsbCkgewotICAg
ICAgICByZXR1cm4gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgICB9Ci0gICAgICBmaW5hbCBOZXR3b3Jr
W10gbmV0d29ya3MgPSBnZXRBbGxOZXR3b3JrcygpOwotICAgICAgbG9uZyBkZWZhdWx0TmV0SWQg
PSBJTlZBTElEX05FVF9JRDsKLSAgICAgIGZvciAoTmV0d29yayBuZXR3b3JrIDogbmV0d29ya3Mp
IHsKLSAgICAgICAgaWYgKCFoYXNJbnRlcm5ldENhcGFiaWxpdHkobmV0d29yaykpIHsKLSAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBmaW5hbCBOZXR3b3JrSW5mbyBuZXR3
b3JrSW5mbyA9IGNvbm5lY3Rpdml0eU1hbmFnZXIuZ2V0TmV0d29ya0luZm8obmV0d29yayk7Ci0g
ICAgICAgIGlmIChuZXR3b3JrSW5mbyAhPSBudWxsICYmIG5ldHdvcmtJbmZvLmdldFR5cGUoKSA9
PSBkZWZhdWx0TmV0d29ya0luZm8uZ2V0VHlwZSgpKSB7Ci0gICAgICAgICAgLy8gVGhlcmUgc2hv
dWxkIG5vdCBiZSBtdWx0aXBsZSBjb25uZWN0ZWQgbmV0d29ya3Mgb2YgdGhlCi0gICAgICAgICAg
Ly8gc2FtZSB0eXBlLiBBdCBsZWFzdCBhcyBvZiBBbmRyb2lkIE1hcnNobWFsbG93IHRoaXMgaXMK
LSAgICAgICAgICAvLyBub3Qgc3VwcG9ydGVkLiBJZiB0aGlzIGJlY29tZXMgc3VwcG9ydGVkIHRo
aXMgYXNzZXJ0aW9uCi0gICAgICAgICAgLy8gbWF5IHRyaWdnZXIuIEF0IHRoYXQgcG9pbnQgd2Ug
Y291bGQgY29uc2lkZXIgdXNpbmcKLSAgICAgICAgICAvLyBDb25uZWN0aXZpdHlNYW5hZ2VyLmdl
dERlZmF1bHROZXR3b3JrKCkgdGhvdWdoIHRoaXMKLSAgICAgICAgICAvLyBtYXkgZ2l2ZSBjb25m
dXNpbmcgcmVzdWx0cyB3aXRoIFZQTnMgYW5kIGlzIG9ubHkKLSAgICAgICAgICAvLyBhdmFpbGFi
bGUgd2l0aCBBbmRyb2lkIE1hcnNobWFsbG93LgotICAgICAgICAgIGFzc2VydCBkZWZhdWx0TmV0
SWQgPT0gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgICAgICAgZGVmYXVsdE5ldElkID0gbmV0d29ya1Rv
TmV0SWQobmV0d29yayk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJldHVybiBkZWZhdWx0
TmV0SWQ7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBwcml2YXRl
IE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrVG9JbmZvKE5ldHdvcmsgbmV0d29yaykgewotICAg
ICAgTGlua1Byb3BlcnRpZXMgbGlua1Byb3BlcnRpZXMgPSBjb25uZWN0aXZpdHlNYW5hZ2VyLmdl
dExpbmtQcm9wZXJ0aWVzKG5ldHdvcmspOwotICAgICAgLy8gZ2V0TGlua1Byb3BlcnRpZXMgd2ls
bCByZXR1cm4gbnVsbCBpZiB0aGUgbmV0d29yayBpcyB1bmtub3duLgotICAgICAgaWYgKGxpbmtQ
cm9wZXJ0aWVzID09IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIkRldGVjdGVkIHVu
a25vd24gbmV0d29yazogIiArIG5ldHdvcmsudG9TdHJpbmcoKSk7Ci0gICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgfQotICAgICAgaWYgKGxpbmtQcm9wZXJ0aWVzLmdldEludGVyZmFjZU5hbWUo
KSA9PSBudWxsKSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJOdWxsIGludGVyZmFjZSBuYW1l
IGZvciBuZXR3b3JrICIgKyBuZXR3b3JrLnRvU3RyaW5nKCkpOwotICAgICAgICByZXR1cm4gbnVs
bDsKLSAgICAgIH0KLQotICAgICAgTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSA9IGdldE5ldHdv
cmtTdGF0ZShuZXR3b3JrKTsKLSAgICAgIENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlID0g
Z2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0YXRlKTsKLSAgICAgIGlmIChjb25uZWN0aW9uVHlw
ZSA9PSBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX05PTkUpIHsKLSAgICAgICAgLy8gVGhpcyBt
YXkgbm90IGJlIGFuIGVycm9yLiBUaGUgT1MgbWF5IHNpZ25hbCBhIG5ldHdvcmsgZXZlbnQgd2l0
aCBjb25uZWN0aW9uIHR5cGUKLSAgICAgICAgLy8gTk9ORSB3aGVuIHRoZSBuZXR3b3JrIGRpc2Nv
bm5lY3RzLgotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTmV0d29yayAiICsgbmV0d29yay50b1N0
cmluZygpICsgIiBpcyBkaXNjb25uZWN0ZWQiKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIFNvbWUgYW5kcm9pZCBkZXZpY2UgbWF5IHJldHVybiBhIENPTk5FQ1RJ
T05fVU5LTk9XTl9DRUxMVUxBUiBvciBDT05ORUNUSU9OX1VOS05PV04gdHlwZSwKLSAgICAgIC8v
IHdoaWNoIGFwcGVhcnMgdG8gYmUgdXNhYmxlLiBKdXN0IGxvZyB0aGVtIGhlcmUuCi0gICAgICBp
ZiAoY29ubmVjdGlvblR5cGUgPT0gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9VTktOT1dOCi0g
ICAgICAgICAgfHwgY29ubmVjdGlvblR5cGUgPT0gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9V
TktOT1dOX0NFTExVTEFSKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJOZXR3b3JrICIgKyBu
ZXR3b3JrLnRvU3RyaW5nKCkgKyAiIGNvbm5lY3Rpb24gdHlwZSBpcyAiICsgY29ubmVjdGlvblR5
cGUKLSAgICAgICAgICAgICAgICArICIgYmVjYXVzZSBpdCBoYXMgdHlwZSAiICsgbmV0d29ya1N0
YXRlLmdldE5ldHdvcmtUeXBlKCkgKyAiIGFuZCBzdWJ0eXBlICIKLSAgICAgICAgICAgICAgICAr
IG5ldHdvcmtTdGF0ZS5nZXROZXR3b3JrU3ViVHlwZSgpKTsKLSAgICAgIH0KLQotICAgICAgTmV0
d29ya0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvcm1hdGlvbiA9Ci0gICAgICAgICAgbmV3IE5ldHdv
cmtJbmZvcm1hdGlvbihsaW5rUHJvcGVydGllcy5nZXRJbnRlcmZhY2VOYW1lKCksIGNvbm5lY3Rp
b25UeXBlLAotICAgICAgICAgICAgICBuZXR3b3JrVG9OZXRJZChuZXR3b3JrKSwgZ2V0SVBBZGRy
ZXNzZXMobGlua1Byb3BlcnRpZXMpKTsKLSAgICAgIHJldHVybiBuZXR3b3JrSW5mb3JtYXRpb247
Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHtAY29kZSBuZXR3b3Jr
fSBjYW4gcHJvdmlkZSBJbnRlcm5ldCBhY2Nlc3MuIENhbiBiZSB1c2VkIHRvCi0gICAgICogaWdu
b3JlIHNwZWNpYWxpemVkIG5ldHdvcmtzIChlLmcuIElNUywgRk9UQSkuCi0gICAgICovCi0gICAg
QFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBib29sZWFuIGhhc0ludGVybmV0Q2FwYWJpbGl0
eShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIGlmIChjb25uZWN0aXZpdHlNYW5hZ2VyID09IG51
bGwpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgICAgZmluYWwgTmV0d29y
a0NhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXMgPSBjb25uZWN0aXZpdHlNYW5hZ2VyLmdldE5ldHdv
cmtDYXBhYmlsaXRpZXMobmV0d29yayk7Ci0gICAgICByZXR1cm4gY2FwYWJpbGl0aWVzICE9IG51
bGwgJiYgY2FwYWJpbGl0aWVzLmhhc0NhcGFiaWxpdHkoTkVUX0NBUEFCSUxJVFlfSU5URVJORVQp
OwotICAgIH0KLQotICAgIC8qKiBPbmx5IGNhbGxhYmxlIG9uIExvbGxpcG9wIGFuZCBuZXdlciBy
ZWxlYXNlcy4gKi8KLSAgICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICAgIHB1YmxpYyB2b2lk
IHJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKE5ldHdvcmtDYWxsYmFjayBuZXR3b3JrQ2FsbGJhY2sp
IHsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXIucmVnaXN0ZXJOZXR3b3JrQ2FsbGJhY2soCi0g
ICAgICAgICAgbmV3IE5ldHdvcmtSZXF1ZXN0LkJ1aWxkZXIoKS5hZGRDYXBhYmlsaXR5KE5FVF9D
QVBBQklMSVRZX0lOVEVSTkVUKS5idWlsZCgpLAotICAgICAgICAgIG5ldHdvcmtDYWxsYmFjayk7
Ci0gICAgfQotCi0gICAgLyoqIE9ubHkgY2FsbGFibGUgb24gTG9sbGlwb3AgYW5kIG5ld2VyIHJl
bGVhc2VzLiAqLwotICAgIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gICAgcHVibGljIHZvaWQg
cmVxdWVzdE1vYmlsZU5ldHdvcmsoTmV0d29ya0NhbGxiYWNrIG5ldHdvcmtDYWxsYmFjaykgewot
ICAgICAgTmV0d29ya1JlcXVlc3QuQnVpbGRlciBidWlsZGVyID0gbmV3IE5ldHdvcmtSZXF1ZXN0
LkJ1aWxkZXIoKTsKLSAgICAgIGJ1aWxkZXIuYWRkQ2FwYWJpbGl0eShORVRfQ0FQQUJJTElUWV9J
TlRFUk5FVCkuYWRkVHJhbnNwb3J0VHlwZShUUkFOU1BPUlRfQ0VMTFVMQVIpOwotICAgICAgY29u
bmVjdGl2aXR5TWFuYWdlci5yZXF1ZXN0TmV0d29yayhidWlsZGVyLmJ1aWxkKCksIG5ldHdvcmtD
YWxsYmFjayk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzTGludCgiTmV3QXBpIikKLSAgICBJUEFk
ZHJlc3NbXSBnZXRJUEFkZHJlc3NlcyhMaW5rUHJvcGVydGllcyBsaW5rUHJvcGVydGllcykgewot
ICAgICAgSVBBZGRyZXNzW10gaXBBZGRyZXNzZXMgPSBuZXcgSVBBZGRyZXNzW2xpbmtQcm9wZXJ0
aWVzLmdldExpbmtBZGRyZXNzZXMoKS5zaXplKCldOwotICAgICAgaW50IGkgPSAwOwotICAgICAg
Zm9yIChMaW5rQWRkcmVzcyBsaW5rQWRkcmVzcyA6IGxpbmtQcm9wZXJ0aWVzLmdldExpbmtBZGRy
ZXNzZXMoKSkgewotICAgICAgICBpcEFkZHJlc3Nlc1tpXSA9IG5ldyBJUEFkZHJlc3MobGlua0Fk
ZHJlc3MuZ2V0QWRkcmVzcygpLmdldEFkZHJlc3MoKSk7Ci0gICAgICAgICsraTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBpcEFkZHJlc3NlczsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NMaW50KCJO
ZXdBcGkiKQotICAgIHB1YmxpYyB2b2lkIHJlbGVhc2VDYWxsYmFjayhOZXR3b3JrQ2FsbGJhY2sg
bmV0d29ya0NhbGxiYWNrKSB7Ci0gICAgICBpZiAoc3VwcG9ydE5ldHdvcmtDYWxsYmFjaygpKSB7
Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJVbnJlZ2lzdGVyIG5ldHdvcmsgY2FsbGJhY2siKTsK
LSAgICAgICAgY29ubmVjdGl2aXR5TWFuYWdlci51bnJlZ2lzdGVyTmV0d29ya0NhbGxiYWNrKG5l
dHdvcmtDYWxsYmFjayk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3Vw
cG9ydE5ldHdvcmtDYWxsYmFjaygpIHsKLSAgICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19J
TlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCAmJiBjb25uZWN0aXZpdHlNYW5hZ2Vy
ICE9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgLyoqIFF1ZXJpZXMgdGhlIFdpZmlNYW5hZ2VyIGZv
ciBTU0lEIG9mIHRoZSBjdXJyZW50IFdpZmkgY29ubmVjdGlvbi4gKi8KLSAgc3RhdGljIGNsYXNz
IFdpZmlNYW5hZ2VyRGVsZWdhdGUgewotICAgIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0
OwotICAgIFdpZmlNYW5hZ2VyRGVsZWdhdGUoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgICB0aGlz
LmNvbnRleHQgPSBjb250ZXh0OwotICAgIH0KLQotICAgIC8vIEZvciB0ZXN0aW5nLgotICAgIFdp
ZmlNYW5hZ2VyRGVsZWdhdGUoKSB7Ci0gICAgICAvLyBBbGwgdGhlIG1ldGhvZHMgYmVsb3cgc2hv
dWxkIGJlIG92ZXJyaWRkZW4uCi0gICAgICBjb250ZXh0ID0gbnVsbDsKLSAgICB9Ci0KLSAgICBT
dHJpbmcgZ2V0V2lmaVNTSUQoKSB7Ci0gICAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gY29udGV4
dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICAgIG51bGwsIG5ldyBJbnRlbnRGaWx0ZXIoV2lm
aU1hbmFnZXIuTkVUV09SS19TVEFURV9DSEFOR0VEX0FDVElPTikpOwotICAgICAgaWYgKGludGVu
dCAhPSBudWxsKSB7Ci0gICAgICAgIGZpbmFsIFdpZmlJbmZvIHdpZmlJbmZvID0gaW50ZW50Lmdl
dFBhcmNlbGFibGVFeHRyYShXaWZpTWFuYWdlci5FWFRSQV9XSUZJX0lORk8pOwotICAgICAgICBp
ZiAod2lmaUluZm8gIT0gbnVsbCkgewotICAgICAgICAgIGZpbmFsIFN0cmluZyBzc2lkID0gd2lm
aUluZm8uZ2V0U1NJRCgpOwotICAgICAgICAgIGlmIChzc2lkICE9IG51bGwpIHsKLSAgICAgICAg
ICAgIHJldHVybiBzc2lkOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAg
cmV0dXJuICIiOwotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBmaW5hbCBsb25nIElOVkFMSURfTkVU
X0lEID0gLTE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiTmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0IjsKLQotICAvLyBPYnNlcnZlciBmb3IgdGhlIGNvbm5lY3Rpb24gdHlw
ZSBjaGFuZ2UuCi0gIHByaXZhdGUgZmluYWwgT2JzZXJ2ZXIgb2JzZXJ2ZXI7Ci0gIHByaXZhdGUg
ZmluYWwgSW50ZW50RmlsdGVyIGludGVudEZpbHRlcjsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0
IGNvbnRleHQ7Ci0gIC8vIFVzZWQgdG8gcmVxdWVzdCBtb2JpbGUgbmV0d29yay4gSXQgZG9lcyBu
b3QgZG8gYW55dGhpbmcgZXhjZXB0IGZvciBrZWVwaW5nCi0gIC8vIHRoZSBjYWxsYmFjayBmb3Ig
cmVsZWFzaW5nIHRoZSByZXF1ZXN0LgotICBwcml2YXRlIGZpbmFsIE5ldHdvcmtDYWxsYmFjayBt
b2JpbGVOZXR3b3JrQ2FsbGJhY2s7Ci0gIC8vIFVzZWQgdG8gcmVjZWl2ZSB1cGRhdGVzIG9uIGFs
bCBuZXR3b3Jrcy4KLSAgcHJpdmF0ZSBmaW5hbCBOZXR3b3JrQ2FsbGJhY2sgYWxsTmV0d29ya0Nh
bGxiYWNrOwotICAvLyBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgYW5kIHdpZmlNYW5hZ2Vy
RGVsZWdhdGUgYXJlIG9ubHkgbm9uLWZpbmFsIGZvciB0ZXN0aW5nLgotICBwcml2YXRlIENvbm5l
Y3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGU7Ci0gIHBy
aXZhdGUgV2lmaU1hbmFnZXJEZWxlZ2F0ZSB3aWZpTWFuYWdlckRlbGVnYXRlOwotCi0gIHByaXZh
dGUgYm9vbGVhbiBpc1JlZ2lzdGVyZWQ7Ci0gIHByaXZhdGUgQ29ubmVjdGlvblR5cGUgY29ubmVj
dGlvblR5cGU7Ci0gIHByaXZhdGUgU3RyaW5nIHdpZmlTU0lEOwotCi0gIC8qKgotICAgKiBPYnNl
cnZlciBpbnRlcmZhY2UgYnkgd2hpY2ggb2JzZXJ2ZXIgaXMgbm90aWZpZWQgb2YgbmV0d29yayBj
aGFuZ2VzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBpbnRlcmZhY2UgT2JzZXJ2ZXIgewotICAg
IC8qKgotICAgICAqIENhbGxlZCB3aGVuIGRlZmF1bHQgbmV0d29yayBjaGFuZ2VzLgotICAgICAq
LwotICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKENvbm5lY3Rpb25UeXBl
IG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtDb25uZWN0KE5l
dHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mbyk7Ci0gICAgcHVibGljIHZvaWQgb25OZXR3b3Jr
RGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnN0
cnVjdHMgYSBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBv
biBVSSB0aHJlYWQuCi0gICAqLwotICBAU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotICBwdWJsaWMg
TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KE9ic2VydmVyIG9ic2VydmVyLCBDb250ZXh0IGNvbnRl
eHQpIHsKLSAgICB0aGlzLm9ic2VydmVyID0gb2JzZXJ2ZXI7Ci0gICAgdGhpcy5jb250ZXh0ID0g
Y29udGV4dDsKLSAgICBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgPSBuZXcgQ29ubmVjdGl2
aXR5TWFuYWdlckRlbGVnYXRlKGNvbnRleHQpOwotICAgIHdpZmlNYW5hZ2VyRGVsZWdhdGUgPSBu
ZXcgV2lmaU1hbmFnZXJEZWxlZ2F0ZShjb250ZXh0KTsKLQotICAgIGZpbmFsIE5ldHdvcmtTdGF0
ZSBuZXR3b3JrU3RhdGUgPSBjb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUuZ2V0TmV0d29ya1N0
YXRlKCk7Ci0gICAgY29ubmVjdGlvblR5cGUgPSBnZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3Rh
dGUpOwotICAgIHdpZmlTU0lEID0gZ2V0V2lmaVNTSUQobmV0d29ya1N0YXRlKTsKLSAgICBpbnRl
bnRGaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElW
SVRZX0FDVElPTik7Ci0KLSAgICByZWdpc3RlclJlY2VpdmVyKCk7Ci0gICAgaWYgKGNvbm5lY3Rp
dml0eU1hbmFnZXJEZWxlZ2F0ZS5zdXBwb3J0TmV0d29ya0NhbGxiYWNrKCkpIHsKLSAgICAgIC8v
IE9uIEFuZHJvaWQgNi4wLjAsIHRoZSBXUklURV9TRVRUSU5HUyBwZXJtaXNzaW9uIGlzIG5lY2Vz
c2FyeSBmb3IKLSAgICAgIC8vIHJlcXVlc3ROZXR3b3JrLCBzbyBpdCB3aWxsIGZhaWwuIFRoaXMg
d2FzIGZpeGVkIGluIEFuZHJvaWQgNi4wLjEuCi0gICAgICBOZXR3b3JrQ2FsbGJhY2sgdGVtcE5l
dHdvcmtDYWxsYmFjayA9IG5ldyBOZXR3b3JrQ2FsbGJhY2soKTsKLSAgICAgIHRyeSB7Ci0gICAg
ICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5yZXF1ZXN0TW9iaWxlTmV0d29yayh0ZW1w
TmV0d29ya0NhbGxiYWNrKTsKLSAgICAgIH0gY2F0Y2ggKGphdmEubGFuZy5TZWN1cml0eUV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcudyhUQUcsICJVbmFibGUgdG8gb2J0YWluIHBlcm1p
c3Npb24gdG8gcmVxdWVzdCBhIGNlbGx1bGFyIG5ldHdvcmsuIik7Ci0gICAgICAgIHRlbXBOZXR3
b3JrQ2FsbGJhY2sgPSBudWxsOwotICAgICAgfQotICAgICAgbW9iaWxlTmV0d29ya0NhbGxiYWNr
ID0gdGVtcE5ldHdvcmtDYWxsYmFjazsKLSAgICAgIGFsbE5ldHdvcmtDYWxsYmFjayA9IG5ldyBT
aW1wbGVOZXR3b3JrQ2FsbGJhY2soKTsKLSAgICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0
ZS5yZWdpc3Rlck5ldHdvcmtDYWxsYmFjayhhbGxOZXR3b3JrQ2FsbGJhY2spOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBtb2JpbGVOZXR3b3JrQ2FsbGJhY2sgPSBudWxsOwotICAgICAgYWxsTmV0d29y
a0NhbGxiYWNrID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQWxsb3dzIG92ZXJy
aWRpbmcgdGhlIENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBmb3IgdGVzdHMuCi0gICAqLwot
ICB2b2lkIHNldENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZUZvclRlc3RzKENvbm5lY3Rpdml0
eU1hbmFnZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSkgewotICAgIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxl
Z2F0ZSA9IGRlbGVnYXRlOwotICB9Ci0KLSAgLyoqCi0gICAqIEFsbG93cyBvdmVycmlkaW5nIHRo
ZSBXaWZpTWFuYWdlckRlbGVnYXRlIGZvciB0ZXN0cy4KLSAgICovCi0gIHZvaWQgc2V0V2lmaU1h
bmFnZXJEZWxlZ2F0ZUZvclRlc3RzKFdpZmlNYW5hZ2VyRGVsZWdhdGUgZGVsZWdhdGUpIHsKLSAg
ICB3aWZpTWFuYWdlckRlbGVnYXRlID0gZGVsZWdhdGU7Ci0gIH0KLQotICAvKioKLSAgICogUmV0
dXJucyB3aGV0aGVyIHRoZSBvYmplY3QgaGFzIHJlZ2lzdGVyZWQgdG8gcmVjZWl2ZSBuZXR3b3Jr
IGNvbm5lY3Rpdml0eSBpbnRlbnRzLgotICAgKiBWaXNpYmxlIGZvciB0ZXN0aW5nLgotICAgKi8K
LSAgYm9vbGVhbiBpc1JlY2VpdmVyUmVnaXN0ZXJlZEZvclRlc3RpbmcoKSB7Ci0gICAgcmV0dXJu
IGlzUmVnaXN0ZXJlZDsKLSAgfQotCi0gIExpc3Q8TmV0d29ya0luZm9ybWF0aW9uPiBnZXRBY3Rp
dmVOZXR3b3JrTGlzdCgpIHsKLSAgICByZXR1cm4gY29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRl
LmdldEFjdGl2ZU5ldHdvcmtMaXN0KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkZXN0cm95KCkg
ewotICAgIGlmIChhbGxOZXR3b3JrQ2FsbGJhY2sgIT0gbnVsbCkgewotICAgICAgY29ubmVjdGl2
aXR5TWFuYWdlckRlbGVnYXRlLnJlbGVhc2VDYWxsYmFjayhhbGxOZXR3b3JrQ2FsbGJhY2spOwot
ICAgIH0KLSAgICBpZiAobW9iaWxlTmV0d29ya0NhbGxiYWNrICE9IG51bGwpIHsKLSAgICAgIGNv
bm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5yZWxlYXNlQ2FsbGJhY2sobW9iaWxlTmV0d29ya0Nh
bGxiYWNrKTsKLSAgICB9Ci0gICAgdW5yZWdpc3RlclJlY2VpdmVyKCk7Ci0gIH0KLQotICAvKioK
LSAgICogUmVnaXN0ZXJzIGEgQnJvYWRjYXN0UmVjZWl2ZXIgaW4gdGhlIGdpdmVuIGNvbnRleHQu
Ci0gICAqLwotICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJSZWNlaXZlcigpIHsKLSAgICBpZiAoaXNS
ZWdpc3RlcmVkKQotICAgICAgcmV0dXJuOwotCi0gICAgaXNSZWdpc3RlcmVkID0gdHJ1ZTsKLSAg
ICBjb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIodGhpcywgaW50ZW50RmlsdGVyKTsKLSAgfQotCi0g
IC8qKgotICAgKiBVbnJlZ2lzdGVycyB0aGUgQnJvYWRjYXN0UmVjZWl2ZXIgaW4gdGhlIGdpdmVu
IGNvbnRleHQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgdW5yZWdpc3RlclJlY2VpdmVyKCkgewot
ICAgIGlmICghaXNSZWdpc3RlcmVkKQotICAgICAgcmV0dXJuOwotCi0gICAgaXNSZWdpc3RlcmVk
ID0gZmFsc2U7Ci0gICAgY29udGV4dC51bnJlZ2lzdGVyUmVjZWl2ZXIodGhpcyk7Ci0gIH0KLQot
ICBwdWJsaWMgTmV0d29ya1N0YXRlIGdldEN1cnJlbnROZXR3b3JrU3RhdGUoKSB7Ci0gICAgcmV0
dXJuIGNvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZS5nZXROZXR3b3JrU3RhdGUoKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBSZXR1cm5zIE5ldElEIG9mIGRldmljZSdzIGN1cnJlbnQgZGVmYXVsdCBj
b25uZWN0ZWQgbmV0d29yayB1c2VkIGZvcgotICAgKiBjb21tdW5pY2F0aW9uLgotICAgKiBPbmx5
IGltcGxlbWVudGVkIG9uIExvbGxpcG9wIGFuZCBuZXdlciByZWxlYXNlcywgcmV0dXJucyBJTlZB
TElEX05FVF9JRAotICAgKiB3aGVuIG5vdCBpbXBsZW1lbnRlZC4KLSAgICovCi0gIHB1YmxpYyBs
b25nIGdldERlZmF1bHROZXRJZCgpIHsKLSAgICByZXR1cm4gY29ubmVjdGl2aXR5TWFuYWdlckRl
bGVnYXRlLmdldERlZmF1bHROZXRJZCgpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBDb25uZWN0
aW9uVHlwZSBnZXRDb25uZWN0aW9uVHlwZShOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlKSB7Ci0g
ICAgaWYgKCFuZXR3b3JrU3RhdGUuaXNDb25uZWN0ZWQoKSkgewotICAgICAgcmV0dXJuIENvbm5l
Y3Rpb25UeXBlLkNPTk5FQ1RJT05fTk9ORTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKG5ldHdvcmtT
dGF0ZS5nZXROZXR3b3JrVHlwZSgpKSB7Ci0gICAgICBjYXNlIENvbm5lY3Rpdml0eU1hbmFnZXIu
VFlQRV9FVEhFUk5FVDoKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05f
RVRIRVJORVQ7Ci0gICAgICBjYXNlIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9XSUZJOgotICAg
ICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9XSUZJOwotICAgICAgY2FzZSBD
b25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lNQVg6Ci0gICAgICAgIHJldHVybiBDb25uZWN0aW9u
VHlwZS5DT05ORUNUSU9OXzRHOwotICAgICAgY2FzZSBDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVf
QkxVRVRPT1RIOgotICAgICAgICByZXR1cm4gQ29ubmVjdGlvblR5cGUuQ09OTkVDVElPTl9CTFVF
VE9PVEg7Ci0gICAgICBjYXNlIENvbm5lY3Rpdml0eU1hbmFnZXIuVFlQRV9NT0JJTEU6Ci0gICAg
ICAgIC8vIFVzZSBpbmZvcm1hdGlvbiBmcm9tIFRlbGVwaG9ueU1hbmFnZXIgdG8gY2xhc3NpZnkg
dGhlIGNvbm5lY3Rpb24uCi0gICAgICAgIHN3aXRjaCAobmV0d29ya1N0YXRlLmdldE5ldHdvcmtT
dWJUeXBlKCkpIHsKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBF
X0dQUlM6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9FREdF
OgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfQ0RNQToKLSAg
ICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFnZXIuTkVUV09SS19UWVBFXzF4UlRUOgotICAgICAg
ICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfSURFTjoKLSAgICAgICAgICAg
IHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OXzJHOwotICAgICAgICAgIGNhc2UgVGVs
ZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfVU1UUzoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9u
eU1hbmFnZXIuTkVUV09SS19UWVBFX0VWRE9fMDoKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1h
bmFnZXIuTkVUV09SS19UWVBFX0VWRE9fQToKLSAgICAgICAgICBjYXNlIFRlbGVwaG9ueU1hbmFn
ZXIuTkVUV09SS19UWVBFX0hTRFBBOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5O
RVRXT1JLX1RZUEVfSFNVUEE6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdP
UktfVFlQRV9IU1BBOgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZ
UEVfRVZET19COgotICAgICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVf
RUhSUEQ6Ci0gICAgICAgICAgY2FzZSBUZWxlcGhvbnlNYW5hZ2VyLk5FVFdPUktfVFlQRV9IU1BB
UDoKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OXzNHOwotICAg
ICAgICAgIGNhc2UgVGVsZXBob255TWFuYWdlci5ORVRXT1JLX1RZUEVfTFRFOgotICAgICAgICAg
ICAgcmV0dXJuIENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJT05fNEc7Ci0gICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIHJldHVybiBDb25uZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV05f
Q0VMTFVMQVI7Ci0gICAgICAgIH0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDb25u
ZWN0aW9uVHlwZS5DT05ORUNUSU9OX1VOS05PV047Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBT
dHJpbmcgZ2V0V2lmaVNTSUQoTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSkgewotICAgIGlmIChn
ZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUpICE9IENvbm5lY3Rpb25UeXBlLkNPTk5FQ1RJ
T05fV0lGSSkKLSAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gd2lmaU1hbmFnZXJEZWxlZ2F0
ZS5nZXRXaWZpU1NJRCgpOwotICB9Ci0KLSAgLy8gQnJvYWRjYXN0UmVjZWl2ZXIKLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRl
bnQpIHsKLSAgICBmaW5hbCBOZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0gZ2V0Q3VycmVudE5l
dHdvcmtTdGF0ZSgpOwotICAgIGlmIChDb25uZWN0aXZpdHlNYW5hZ2VyLkNPTk5FQ1RJVklUWV9B
Q1RJT04uZXF1YWxzKGludGVudC5nZXRBY3Rpb24oKSkpIHsKLSAgICAgIGNvbm5lY3Rpb25UeXBl
Q2hhbmdlZChuZXR3b3JrU3RhdGUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb25u
ZWN0aW9uVHlwZUNoYW5nZWQoTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSkgewotICAgIENvbm5l
Y3Rpb25UeXBlIG5ld0Nvbm5lY3Rpb25UeXBlID0gZ2V0Q29ubmVjdGlvblR5cGUobmV0d29ya1N0
YXRlKTsKLSAgICBTdHJpbmcgbmV3V2lmaVNTSUQgPSBnZXRXaWZpU1NJRChuZXR3b3JrU3RhdGUp
OwotICAgIGlmIChuZXdDb25uZWN0aW9uVHlwZSA9PSBjb25uZWN0aW9uVHlwZSAmJiBuZXdXaWZp
U1NJRC5lcXVhbHMod2lmaVNTSUQpKQotICAgICAgcmV0dXJuOwotCi0gICAgY29ubmVjdGlvblR5
cGUgPSBuZXdDb25uZWN0aW9uVHlwZTsKLSAgICB3aWZpU1NJRCA9IG5ld1dpZmlTU0lEOwotICAg
IExvZ2dpbmcuZChUQUcsICJOZXR3b3JrIGNvbm5lY3Rpdml0eSBjaGFuZ2VkLCB0eXBlIGlzOiAi
ICsgY29ubmVjdGlvblR5cGUpOwotICAgIG9ic2VydmVyLm9uQ29ubmVjdGlvblR5cGVDaGFuZ2Vk
KG5ld0Nvbm5lY3Rpb25UeXBlKTsKLSAgfQotCi0gIC8qKgotICAgKiBFeHRyYWN0cyBOZXRJRCBv
ZiBuZXR3b3JrIG9uIExvbGxpcG9wIGFuZCBOZXR3b3JrSGFuZGxlICh3aGljaCBpcyBtdW5nbGVk
Ci0gICAqIE5ldElEKSBvbiBNYXJzaG1hbGxvdyBhbmQgbmV3ZXIgcmVsZWFzZXMuIE9ubHkgYXZh
aWxhYmxlIG9uIExvbGxpcG9wIGFuZAotICAgKiBuZXdlciByZWxlYXNlcy4gUmV0dXJucyBsb25n
IHNpbmNlIGdldE5ldHdvcmtIYW5kbGUgcmV0dXJucyBsb25nLgotICAgKi8KLSAgQFN1cHByZXNz
TGludCgiTmV3QXBpIikKLSAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBuZXR3b3JrVG9OZXRJZChOZXR3
b3JrIG5ldHdvcmspIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZF
UlNJT05fQ09ERVMuTSkgewotICAgICAgcmV0dXJuIG5ldHdvcmsuZ2V0TmV0d29ya0hhbmRsZSgp
OwotICAgIH0KLQotICAgIC8vIE5PVEUoaG9uZ2hhaXopOiBUaGlzIGRlcGVuZHMgb24gQW5kcm9p
ZCBmcmFtZXdvcmsgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KLSAgICAvLyBUaGVzZSBkZXRhaWxz
IGNhbm5vdCBjaGFuZ2UgYmVjYXVzZSBMb2xsaXBvcCBoYXMgYmVlbiByZWxlYXNlZC4KLSAgICBy
ZXR1cm4gSW50ZWdlci5wYXJzZUludChuZXR3b3JrLnRvU3RyaW5nKCkpOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL09XTkVSUwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L09XTkVSUwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9PV05FUlMJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0ICswLDAgQEAKLW1hZ2plZEB3ZWJydGMub3JnCi0KLXBlci1maWxl
IENhbWVyYSo9c2FrYWxAd2VicnRjLm9yZwotcGVyLWZpbGUgTWV0cmljcy5qYXZhPXNha2FsQHdl
YnJ0Yy5vcmcKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24uamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24uamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDMxNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51
dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogSmF2YS1s
YW5kIHZlcnNpb24gb2YgdGhlIFBlZXJDb25uZWN0aW9uIEFQSXM7IHdyYXBzIHRoZSBDKysgQVBJ
Ci0gKiBodHRwOi8vd3d3LndlYnJ0Yy5vcmcvcmVmZXJlbmNlL25hdGl2ZS1hcGlzLCB3aGljaCBp
biB0dXJuIGlzIGluc3BpcmVkIGJ5IHRoZQotICogSlMgQVBJczogaHR0cDovL2Rldi53My5vcmcv
MjAxMS93ZWJydGMvZWRpdG9yL3dlYnJ0Yy5odG1sIGFuZAotICogaHR0cDovL3d3dy53My5vcmcv
VFIvbWVkaWFjYXB0dXJlLXN0cmVhbXMvCi0gKi8KLXB1YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlv
biB7Ci0gIHN0YXRpYyB7Ci0gICAgU3lzdGVtLmxvYWRMaWJyYXJ5KCJqaW5nbGVfcGVlcmNvbm5l
Y3Rpb25fc28iKTsKLSAgfQotCi0gIC8qKiBUcmFja3MgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6
OkljZUdhdGhlcmluZ1N0YXRlICovCi0gIHB1YmxpYyBlbnVtIEljZUdhdGhlcmluZ1N0YXRlIHsg
TkVXLCBHQVRIRVJJTkcsIENPTVBMRVRFIH0KLQotICAvKiogVHJhY2tzIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlOjpJY2VDb25uZWN0aW9uU3RhdGUgKi8KLSAgcHVibGljIGVudW0gSWNlQ29ubmVj
dGlvblN0YXRlIHsKLSAgICBORVcsCi0gICAgQ0hFQ0tJTkcsCi0gICAgQ09OTkVDVEVELAotICAg
IENPTVBMRVRFRCwKLSAgICBGQUlMRUQsCi0gICAgRElTQ09OTkVDVEVELAotICAgIENMT1NFRAot
ICB9Ci0KLSAgLyoqIFRyYWNrcyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6U2lnbmFsaW5nU3Rh
dGUgKi8KLSAgcHVibGljIGVudW0gU2lnbmFsaW5nU3RhdGUgewotICAgIFNUQUJMRSwKLSAgICBI
QVZFX0xPQ0FMX09GRkVSLAotICAgIEhBVkVfTE9DQUxfUFJBTlNXRVIsCi0gICAgSEFWRV9SRU1P
VEVfT0ZGRVIsCi0gICAgSEFWRV9SRU1PVEVfUFJBTlNXRVIsCi0gICAgQ0xPU0VECi0gIH0KLQot
ICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9uT2JzZXJ2ZXIuICovCi0gIHB1Ymxp
YyBzdGF0aWMgaW50ZXJmYWNlIE9ic2VydmVyIHsKLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gdGhl
IFNpZ25hbGluZ1N0YXRlIGNoYW5nZXMuICovCi0gICAgcHVibGljIHZvaWQgb25TaWduYWxpbmdD
aGFuZ2UoU2lnbmFsaW5nU3RhdGUgbmV3U3RhdGUpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVu
IHRoZSBJY2VDb25uZWN0aW9uU3RhdGUgY2hhbmdlcy4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbklj
ZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKTsKLQotICAgIC8q
KiBUcmlnZ2VyZWQgd2hlbiB0aGUgSUNFIGNvbm5lY3Rpb24gcmVjZWl2aW5nIHN0YXR1cyBjaGFu
Z2VzLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZShi
b29sZWFuIHJlY2VpdmluZyk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gdGhlIEljZUdhdGhl
cmluZ1N0YXRlIGNoYW5nZXMuICovCi0gICAgcHVibGljIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFu
Z2UoSWNlR2F0aGVyaW5nU3RhdGUgbmV3U3RhdGUpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVu
IGEgbmV3IElDRSBjYW5kaWRhdGUgaGFzIGJlZW4gZm91bmQuICovCi0gICAgcHVibGljIHZvaWQg
b25JY2VDYW5kaWRhdGUoSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSk7Ci0KLSAgICAvKiogVHJpZ2dl
cmVkIHdoZW4gc29tZSBJQ0UgY2FuZGlkYXRlcyBoYXZlIGJlZW4gcmVtb3ZlZC4gKi8KLSAgICBw
dWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVkKEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0
ZXMpOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIG1lZGlhIGlzIHJlY2VpdmVkIG9uIGEgbmV3
IHN0cmVhbSBmcm9tIHJlbW90ZSBwZWVyLiAqLwotICAgIHB1YmxpYyB2b2lkIG9uQWRkU3RyZWFt
KE1lZGlhU3RyZWFtIHN0cmVhbSk7Ci0KLSAgICAvKiogVHJpZ2dlcmVkIHdoZW4gYSByZW1vdGUg
cGVlciBjbG9zZSBhIHN0cmVhbS4gKi8KLSAgICBwdWJsaWMgdm9pZCBvblJlbW92ZVN0cmVhbShN
ZWRpYVN0cmVhbSBzdHJlYW0pOwotCi0gICAgLyoqIFRyaWdnZXJlZCB3aGVuIGEgcmVtb3RlIHBl
ZXIgb3BlbnMgYSBEYXRhQ2hhbm5lbC4gKi8KLSAgICBwdWJsaWMgdm9pZCBvbkRhdGFDaGFubmVs
KERhdGFDaGFubmVsIGRhdGFDaGFubmVsKTsKLQotICAgIC8qKiBUcmlnZ2VyZWQgd2hlbiByZW5l
Z290aWF0aW9uIGlzIG5lY2Vzc2FyeS4gKi8KLSAgICBwdWJsaWMgdm9pZCBvblJlbmVnb3RpYXRp
b25OZWVkZWQoKTsKLSAgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2UuSWNlU2VydmVyLiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEljZVNlcnZlciB7
Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB1cmk7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB1
c2VybmFtZTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHBhc3N3b3JkOwotCi0gICAgLyoqIENv
bnZlbmllbmNlIGNvbnN0cnVjdG9yIGZvciBTVFVOIHNlcnZlcnMuICovCi0gICAgcHVibGljIElj
ZVNlcnZlcihTdHJpbmcgdXJpKSB7Ci0gICAgICB0aGlzKHVyaSwgIiIsICIiKTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgSWNlU2VydmVyKFN0cmluZyB1cmksIFN0cmluZyB1c2VybmFtZSwgU3RyaW5n
IHBhc3N3b3JkKSB7Ci0gICAgICB0aGlzLnVyaSA9IHVyaTsKLSAgICAgIHRoaXMudXNlcm5hbWUg
PSB1c2VybmFtZTsKLSAgICAgIHRoaXMucGFzc3dvcmQgPSBwYXNzd29yZDsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgcmV0dXJuIHVyaSArICJbIiArIHVz
ZXJuYW1lICsgIjoiICsgcGFzc3dvcmQgKyAiXSI7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEphdmEg
dmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5JY2VUcmFuc3BvcnRzVHlwZSAqLwot
ICBwdWJsaWMgZW51bSBJY2VUcmFuc3BvcnRzVHlwZSB7IE5PTkUsIFJFTEFZLCBOT0hPU1QsIEFM
TCB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZS5CdW5k
bGVQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gQnVuZGxlUG9saWN5IHsgQkFMQU5DRUQsIE1BWEJV
TkRMRSwgTUFYQ09NUEFUIH0KLQotICAvKiogSmF2YSB2ZXJzaW9uIG9mIFBlZXJDb25uZWN0aW9u
SW50ZXJmYWNlLlJ0Y3BNdXhQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gUnRjcE11eFBvbGljeSB7
IE5FR09USUFURSwgUkVRVUlSRSB9Ci0KLSAgLyoqIEphdmEgdmVyc2lvbiBvZiBQZWVyQ29ubmVj
dGlvbkludGVyZmFjZS5UY3BDYW5kaWRhdGVQb2xpY3kgKi8KLSAgcHVibGljIGVudW0gVGNwQ2Fu
ZGlkYXRlUG9saWN5IHsgRU5BQkxFRCwgRElTQUJMRUQgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24g
b2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuQ2FuZGlkYXRlTmV0d29ya1BvbGljeSAqLwotICBw
dWJsaWMgZW51bSBDYW5kaWRhdGVOZXR3b3JrUG9saWN5IHsgQUxMLCBMT1dfQ09TVCB9Ci0KLSAg
LyoqIEphdmEgdmVyc2lvbiBvZiBydGM6OktleVR5cGUgKi8KLSAgcHVibGljIGVudW0gS2V5VHlw
ZSB7IFJTQSwgRUNEU0EgfQotCi0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2UuQ29udGludWFsR2F0aGVyaW5nUG9saWN5ICovCi0gIHB1YmxpYyBlbnVtIENvbnRp
bnVhbEdhdGhlcmluZ1BvbGljeSB7IEdBVEhFUl9PTkNFLCBHQVRIRVJfQ09OVElOVUFMTFkgfQot
Ci0gIC8qKiBKYXZhIHZlcnNpb24gb2YgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2UuUlRDQ29uZmln
dXJhdGlvbiAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIFJUQ0NvbmZpZ3VyYXRpb24gewotICAg
IHB1YmxpYyBJY2VUcmFuc3BvcnRzVHlwZSBpY2VUcmFuc3BvcnRzVHlwZTsKLSAgICBwdWJsaWMg
TGlzdDxJY2VTZXJ2ZXI+IGljZVNlcnZlcnM7Ci0gICAgcHVibGljIEJ1bmRsZVBvbGljeSBidW5k
bGVQb2xpY3k7Ci0gICAgcHVibGljIFJ0Y3BNdXhQb2xpY3kgcnRjcE11eFBvbGljeTsKLSAgICBw
dWJsaWMgVGNwQ2FuZGlkYXRlUG9saWN5IHRjcENhbmRpZGF0ZVBvbGljeTsKLSAgICBwdWJsaWMg
Q2FuZGlkYXRlTmV0d29ya1BvbGljeSBjYW5kaWRhdGVOZXR3b3JrUG9saWN5OwotICAgIHB1Ymxp
YyBpbnQgYXVkaW9KaXR0ZXJCdWZmZXJNYXhQYWNrZXRzOwotICAgIHB1YmxpYyBib29sZWFuIGF1
ZGlvSml0dGVyQnVmZmVyRmFzdEFjY2VsZXJhdGU7Ci0gICAgcHVibGljIGludCBpY2VDb25uZWN0
aW9uUmVjZWl2aW5nVGltZW91dDsKLSAgICBwdWJsaWMgaW50IGljZUJhY2t1cENhbmRpZGF0ZVBh
aXJQaW5nSW50ZXJ2YWw7Ci0gICAgcHVibGljIEtleVR5cGUga2V5VHlwZTsKLSAgICBwdWJsaWMg
Q29udGludWFsR2F0aGVyaW5nUG9saWN5IGNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeTsKLSAgICBw
dWJsaWMgaW50IGljZUNhbmRpZGF0ZVBvb2xTaXplOwotICAgIHB1YmxpYyBib29sZWFuIHBydW5l
VHVyblBvcnRzOwotICAgIHB1YmxpYyBib29sZWFuIHByZXN1bWVXcml0YWJsZVdoZW5GdWxseVJl
bGF5ZWQ7Ci0KLSAgICBwdWJsaWMgUlRDQ29uZmlndXJhdGlvbihMaXN0PEljZVNlcnZlcj4gaWNl
U2VydmVycykgewotICAgICAgaWNlVHJhbnNwb3J0c1R5cGUgPSBJY2VUcmFuc3BvcnRzVHlwZS5B
TEw7Ci0gICAgICBidW5kbGVQb2xpY3kgPSBCdW5kbGVQb2xpY3kuQkFMQU5DRUQ7Ci0gICAgICBy
dGNwTXV4UG9saWN5ID0gUnRjcE11eFBvbGljeS5ORUdPVElBVEU7Ci0gICAgICB0Y3BDYW5kaWRh
dGVQb2xpY3kgPSBUY3BDYW5kaWRhdGVQb2xpY3kuRU5BQkxFRDsKLSAgICAgIGNhbmRpZGF0ZU5l
dHdvcmtQb2xpY3kgPSBjYW5kaWRhdGVOZXR3b3JrUG9saWN5LkFMTDsKLSAgICAgIHRoaXMuaWNl
U2VydmVycyA9IGljZVNlcnZlcnM7Ci0gICAgICBhdWRpb0ppdHRlckJ1ZmZlck1heFBhY2tldHMg
PSA1MDsKLSAgICAgIGF1ZGlvSml0dGVyQnVmZmVyRmFzdEFjY2VsZXJhdGUgPSBmYWxzZTsKLSAg
ICAgIGljZUNvbm5lY3Rpb25SZWNlaXZpbmdUaW1lb3V0ID0gLTE7Ci0gICAgICBpY2VCYWNrdXBD
YW5kaWRhdGVQYWlyUGluZ0ludGVydmFsID0gLTE7Ci0gICAgICBrZXlUeXBlID0gS2V5VHlwZS5F
Q0RTQTsKLSAgICAgIGNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSA9IENvbnRpbnVhbEdhdGhlcmlu
Z1BvbGljeS5HQVRIRVJfT05DRTsKLSAgICAgIGljZUNhbmRpZGF0ZVBvb2xTaXplID0gMDsKLSAg
ICAgIHBydW5lVHVyblBvcnRzID0gZmFsc2U7Ci0gICAgICBwcmVzdW1lV3JpdGFibGVXaGVuRnVs
bHlSZWxheWVkID0gZmFsc2U7Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgZmluYWwgTGlzdDxN
ZWRpYVN0cmVhbT4gbG9jYWxTdHJlYW1zOwotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlUGVl
ckNvbm5lY3Rpb247Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVPYnNlcnZlcjsKLSAgcHJp
dmF0ZSBMaXN0PFJ0cFNlbmRlcj4gc2VuZGVyczsKLSAgcHJpdmF0ZSBMaXN0PFJ0cFJlY2VpdmVy
PiByZWNlaXZlcnM7Ci0KLSAgUGVlckNvbm5lY3Rpb24obG9uZyBuYXRpdmVQZWVyQ29ubmVjdGlv
biwgbG9uZyBuYXRpdmVPYnNlcnZlcikgewotICAgIHRoaXMubmF0aXZlUGVlckNvbm5lY3Rpb24g
PSBuYXRpdmVQZWVyQ29ubmVjdGlvbjsKLSAgICB0aGlzLm5hdGl2ZU9ic2VydmVyID0gbmF0aXZl
T2JzZXJ2ZXI7Ci0gICAgbG9jYWxTdHJlYW1zID0gbmV3IExpbmtlZExpc3Q8TWVkaWFTdHJlYW0+
KCk7Ci0gICAgc2VuZGVycyA9IG5ldyBMaW5rZWRMaXN0PFJ0cFNlbmRlcj4oKTsKLSAgICByZWNl
aXZlcnMgPSBuZXcgTGlua2VkTGlzdDxSdHBSZWNlaXZlcj4oKTsKLSAgfQotCi0gIC8vIEpzZXBJ
bnRlcmZhY2UuCi0gIHB1YmxpYyBuYXRpdmUgU2Vzc2lvbkRlc2NyaXB0aW9uIGdldExvY2FsRGVz
Y3JpcHRpb24oKTsKLQotICBwdWJsaWMgbmF0aXZlIFNlc3Npb25EZXNjcmlwdGlvbiBnZXRSZW1v
dGVEZXNjcmlwdGlvbigpOwotCi0gIHB1YmxpYyBuYXRpdmUgRGF0YUNoYW5uZWwgY3JlYXRlRGF0
YUNoYW5uZWwoU3RyaW5nIGxhYmVsLCBEYXRhQ2hhbm5lbC5Jbml0IGluaXQpOwotCi0gIHB1Ymxp
YyBuYXRpdmUgdm9pZCBjcmVhdGVPZmZlcihTZHBPYnNlcnZlciBvYnNlcnZlciwgTWVkaWFDb25z
dHJhaW50cyBjb25zdHJhaW50cyk7Ci0KLSAgcHVibGljIG5hdGl2ZSB2b2lkIGNyZWF0ZUFuc3dl
cihTZHBPYnNlcnZlciBvYnNlcnZlciwgTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cyk7Ci0K
LSAgcHVibGljIG5hdGl2ZSB2b2lkIHNldExvY2FsRGVzY3JpcHRpb24oU2RwT2JzZXJ2ZXIgb2Jz
ZXJ2ZXIsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gIHB1YmxpYyBuYXRpdmUgdm9pZCBz
ZXRSZW1vdGVEZXNjcmlwdGlvbihTZHBPYnNlcnZlciBvYnNlcnZlciwgU2Vzc2lvbkRlc2NyaXB0
aW9uIHNkcCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBib29sZWFuIHNldENvbmZpZ3VyYXRpb24oUlRD
Q29uZmlndXJhdGlvbiBjb25maWcpOwotCi0gIHB1YmxpYyBib29sZWFuIGFkZEljZUNhbmRpZGF0
ZShJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZUFkZEljZUNhbmRp
ZGF0ZShjYW5kaWRhdGUuc2RwTWlkLCBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRl
LnNkcCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiByZW1vdmVJY2VDYW5kaWRhdGVzKGZpbmFs
IEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICByZXR1cm4gbmF0aXZlUmVtb3ZlSWNl
Q2FuZGlkYXRlcyhjYW5kaWRhdGVzKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGFkZFN0cmVh
bShNZWRpYVN0cmVhbSBzdHJlYW0pIHsKLSAgICBib29sZWFuIHJldCA9IG5hdGl2ZUFkZExvY2Fs
U3RyZWFtKHN0cmVhbS5uYXRpdmVTdHJlYW0pOwotICAgIGlmICghcmV0KSB7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGxvY2FsU3RyZWFtcy5hZGQoc3RyZWFtKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVN0cmVhbShNZWRpYVN0cmVhbSBz
dHJlYW0pIHsKLSAgICBuYXRpdmVSZW1vdmVMb2NhbFN0cmVhbShzdHJlYW0ubmF0aXZlU3RyZWFt
KTsKLSAgICBsb2NhbFN0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci0gIH0KLQotICBwdWJsaWMgUnRw
U2VuZGVyIGNyZWF0ZVNlbmRlcihTdHJpbmcga2luZCwgU3RyaW5nIHN0cmVhbV9pZCkgewotICAg
IFJ0cFNlbmRlciBuZXdfc2VuZGVyID0gbmF0aXZlQ3JlYXRlU2VuZGVyKGtpbmQsIHN0cmVhbV9p
ZCk7Ci0gICAgaWYgKG5ld19zZW5kZXIgIT0gbnVsbCkgewotICAgICAgc2VuZGVycy5hZGQobmV3
X3NlbmRlcik7Ci0gICAgfQotICAgIHJldHVybiBuZXdfc2VuZGVyOwotICB9Ci0KLSAgLy8gTm90
ZSB0aGF0IGNhbGxpbmcgZ2V0U2VuZGVycyB3aWxsIGRpc3Bvc2Ugb2YgdGhlIHNlbmRlcnMgcHJl
dmlvdXNseQotICAvLyByZXR1cm5lZCAoYW5kIHNhbWUgZ29lcyBmb3IgZ2V0UmVjZWl2ZXJzKS4K
LSAgcHVibGljIExpc3Q8UnRwU2VuZGVyPiBnZXRTZW5kZXJzKCkgewotICAgIGZvciAoUnRwU2Vu
ZGVyIHNlbmRlciA6IHNlbmRlcnMpIHsKLSAgICAgIHNlbmRlci5kaXNwb3NlKCk7Ci0gICAgfQot
ICAgIHNlbmRlcnMgPSBuYXRpdmVHZXRTZW5kZXJzKCk7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25z
LnVubW9kaWZpYWJsZUxpc3Qoc2VuZGVycyk7Ci0gIH0KLQotICBwdWJsaWMgTGlzdDxSdHBSZWNl
aXZlcj4gZ2V0UmVjZWl2ZXJzKCkgewotICAgIGZvciAoUnRwUmVjZWl2ZXIgcmVjZWl2ZXIgOiBy
ZWNlaXZlcnMpIHsKLSAgICAgIHJlY2VpdmVyLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgcmVjZWl2
ZXJzID0gbmF0aXZlR2V0UmVjZWl2ZXJzKCk7Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9k
aWZpYWJsZUxpc3QocmVjZWl2ZXJzKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGdldFN0YXRz
KFN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIsIE1lZGlhU3RyZWFtVHJhY2sgdHJhY2spIHsKLSAgICBy
ZXR1cm4gbmF0aXZlR2V0U3RhdHMob2JzZXJ2ZXIsICh0cmFjayA9PSBudWxsKSA/IDAgOiB0cmFj
ay5uYXRpdmVUcmFjayk7Ci0gIH0KLQotICAvLyBTdGFydHMgcmVjb3JkaW5nIGFuIFJUQyBldmVu
dCBsb2cuIE93bmVyc2hpcCBvZiB0aGUgZmlsZSBpcyB0cmFuc2ZlcmVkIHRvCi0gIC8vIHRoZSBu
YXRpdmUgY29kZS4gSWYgYW4gUlRDIGV2ZW50IGxvZyBpcyBhbHJlYWR5IGJlaW5nIHJlY29yZGVk
LCBpdCB3aWxsIGJlCi0gIC8vIHN0b3BwZWQgYW5kIGEgbmV3IG9uZSB3aWxsIHN0YXJ0IHVzaW5n
IHRoZSBwcm92aWRlZCBmaWxlLiBMb2dnaW5nIHdpbGwKLSAgLy8gY29udGludWUgdW50aWwgdGhl
IHN0b3BSdGNFdmVudExvZyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSBtYXhfc2l6ZV9ieXRlcwot
ICAvLyBhcmd1bWVudCBpcyBpZ25vcmVkLCBpdCBpcyBhZGRlZCBmb3IgZnV0dXJlIHVzZS4KLSAg
cHVibGljIGJvb2xlYW4gc3RhcnRSdGNFdmVudExvZyhpbnQgZmlsZV9kZXNjcmlwdG9yLCBpbnQg
bWF4X3NpemVfYnl0ZXMpIHsKLSAgICByZXR1cm4gbmF0aXZlU3RhcnRSdGNFdmVudExvZyhmaWxl
X2Rlc2NyaXB0b3IsIG1heF9zaXplX2J5dGVzKTsKLSAgfQotCi0gIC8vIFN0b3BzIHJlY29yZGlu
ZyBhbiBSVEMgZXZlbnQgbG9nLiBJZiBubyBSVEMgZXZlbnQgbG9nIGlzIGN1cnJlbnRseSBiZWlu
ZwotICAvLyByZWNvcmRlZCwgdGhpcyBjYWxsIHdpbGwgaGF2ZSBubyBlZmZlY3QuCi0gIHB1Ymxp
YyB2b2lkIHN0b3BSdGNFdmVudExvZygpIHsKLSAgICBuYXRpdmVTdG9wUnRjRXZlbnRMb2coKTsK
LSAgfQotCi0gIC8vIFRPRE8oZmlzY2htYW4pOiBhZGQgc3VwcG9ydCBmb3IgRFRNRi1yZWxhdGVk
IG1ldGhvZHMgb25jZSB0aGF0IEFQSQotICAvLyBzdGFiaWxpemVzLgotICBwdWJsaWMgbmF0aXZl
IFNpZ25hbGluZ1N0YXRlIHNpZ25hbGluZ1N0YXRlKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBJY2VD
b25uZWN0aW9uU3RhdGUgaWNlQ29ubmVjdGlvblN0YXRlKCk7Ci0KLSAgcHVibGljIG5hdGl2ZSBJ
Y2VHYXRoZXJpbmdTdGF0ZSBpY2VHYXRoZXJpbmdTdGF0ZSgpOwotCi0gIHB1YmxpYyBuYXRpdmUg
dm9pZCBjbG9zZSgpOwotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgY2xvc2UoKTsK
LSAgICBmb3IgKE1lZGlhU3RyZWFtIHN0cmVhbSA6IGxvY2FsU3RyZWFtcykgewotICAgICAgbmF0
aXZlUmVtb3ZlTG9jYWxTdHJlYW0oc3RyZWFtLm5hdGl2ZVN0cmVhbSk7Ci0gICAgICBzdHJlYW0u
ZGlzcG9zZSgpOwotICAgIH0KLSAgICBsb2NhbFN0cmVhbXMuY2xlYXIoKTsKLSAgICBmb3IgKFJ0
cFNlbmRlciBzZW5kZXIgOiBzZW5kZXJzKSB7Ci0gICAgICBzZW5kZXIuZGlzcG9zZSgpOwotICAg
IH0KLSAgICBzZW5kZXJzLmNsZWFyKCk7Ci0gICAgZm9yIChSdHBSZWNlaXZlciByZWNlaXZlciA6
IHJlY2VpdmVycykgewotICAgICAgcmVjZWl2ZXIuZGlzcG9zZSgpOwotICAgIH0KLSAgICByZWNl
aXZlcnMuY2xlYXIoKTsKLSAgICBmcmVlUGVlckNvbm5lY3Rpb24obmF0aXZlUGVlckNvbm5lY3Rp
b24pOwotICAgIGZyZWVPYnNlcnZlcihuYXRpdmVPYnNlcnZlcik7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlUGVlckNvbm5lY3Rpb24obG9uZyBuYXRpdmVQZWVyQ29u
bmVjdGlvbik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgZnJlZU9ic2VydmVyKGxv
bmcgbmF0aXZlT2JzZXJ2ZXIpOwotCi0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZlQWRk
SWNlQ2FuZGlkYXRlKAotICAgICAgU3RyaW5nIHNkcE1pZCwgaW50IHNkcE1MaW5lSW5kZXgsIFN0
cmluZyBpY2VDYW5kaWRhdGVTZHApOwotCi0gIHByaXZhdGUgbmF0aXZlIGJvb2xlYW4gbmF0aXZl
UmVtb3ZlSWNlQ2FuZGlkYXRlcyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKTsKLQot
ICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUFkZExvY2FsU3RyZWFtKGxvbmcgbmF0aXZl
U3RyZWFtKTsKLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZVJlbW92ZUxvY2FsU3RyZWFt
KGxvbmcgbmF0aXZlU3RyZWFtKTsKLQotICBwcml2YXRlIG5hdGl2ZSBib29sZWFuIG5hdGl2ZUdl
dFN0YXRzKFN0YXRzT2JzZXJ2ZXIgb2JzZXJ2ZXIsIGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIHBy
aXZhdGUgbmF0aXZlIFJ0cFNlbmRlciBuYXRpdmVDcmVhdGVTZW5kZXIoU3RyaW5nIGtpbmQsIFN0
cmluZyBzdHJlYW1faWQpOwotCi0gIHByaXZhdGUgbmF0aXZlIExpc3Q8UnRwU2VuZGVyPiBuYXRp
dmVHZXRTZW5kZXJzKCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgTGlzdDxSdHBSZWNlaXZlcj4gbmF0
aXZlR2V0UmVjZWl2ZXJzKCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgYm9vbGVhbiBuYXRpdmVTdGFy
dFJ0Y0V2ZW50TG9nKGludCBmaWxlX2Rlc2NyaXB0b3IsIGludCBtYXhfc2l6ZV9ieXRlcyk7Ci0K
LSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVTdG9wUnRjRXZlbnRMb2coKTsKLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25GYWN0b3J5LmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbkZhY3RvcnkuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDI1NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBKYXZh
IHdyYXBwZXIgZm9yIGEgQysrIFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZS4gIE1haW4g
ZW50cnkgcG9pbnQgdG8KLSAqIHRoZSBQZWVyQ29ubmVjdGlvbiBBUEkgZm9yIGNsaWVudHMuCi0g
Ki8KLXB1YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgewotICBzdGF0aWMgewotICAg
IFN5c3RlbS5sb2FkTGlicmFyeSgiamluZ2xlX3BlZXJjb25uZWN0aW9uX3NvIik7Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlBlZXJDb25uZWN0aW9uRmFjdG9y
eSI7Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVGYWN0b3J5OwotICBwcml2YXRlIHN0YXRp
YyBUaHJlYWQgbmV0d29ya1RocmVhZDsKLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkIHdvcmtlclRo
cmVhZDsKLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkIHNpZ25hbGluZ1RocmVhZDsKLSAgcHJpdmF0
ZSBFZ2xCYXNlIGxvY2FsRWdsYmFzZTsKLSAgcHJpdmF0ZSBFZ2xCYXNlIHJlbW90ZUVnbGJhc2U7
Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBPcHRpb25zIHsKLSAgICAvLyBLZWVwIGluIHN5bmMg
d2l0aCB3ZWJydGMvYmFzZS9uZXR3b3JrLmghCi0gICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVS
X1RZUEVfVU5LTk9XTiA9IDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVSX1RZUEVfRVRI
RVJORVQgPSAxIDw8IDA7Ci0gICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVSX1RZUEVfV0lGSSA9
IDEgPDwgMTsKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9DRUxMVUxBUiA9IDEg
PDwgMjsKLSAgICBzdGF0aWMgZmluYWwgaW50IEFEQVBURVJfVFlQRV9WUE4gPSAxIDw8IDM7Ci0g
ICAgc3RhdGljIGZpbmFsIGludCBBREFQVEVSX1RZUEVfTE9PUEJBQ0sgPSAxIDw8IDQ7Ci0KLSAg
ICBwdWJsaWMgaW50IG5ldHdvcmtJZ25vcmVNYXNrOwotICAgIHB1YmxpYyBib29sZWFuIGRpc2Fi
bGVFbmNyeXB0aW9uOwotICAgIHB1YmxpYyBib29sZWFuIGRpc2FibGVOZXR3b3JrTW9uaXRvcjsK
LSAgfQotCi0gIC8vIHxjb250ZXh0fCBpcyBhbiBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dCBvYmpl
Y3QsIGJ1dCB3ZSBrZWVwIGl0IHVudHlwZWQgaGVyZQotICAvLyB0byBhbGxvdyBidWlsZGluZyBv
biBub24tQW5kcm9pZCBwbGF0Zm9ybXMuCi0gIC8vIENhbGxlcnMgbWF5IHNwZWNpZnkgZWl0aGVy
IHxpbml0aWFsaXplQXVkaW98IG9yIHxpbml0aWFsaXplVmlkZW98IGFzIGZhbHNlCi0gIC8vIHRv
IHNraXAgaW5pdGlhbGl6aW5nIHRoZSByZXNwZWN0aXZlIGVuZ2luZSAoYW5kIGF2b2lkIHRoZSBu
ZWVkIGZvciB0aGUKLSAgLy8gcmVzcGVjdGl2ZSBwZXJtaXNzaW9ucykuCi0gIC8vIHxyZW5kZXJF
R0xDb250ZXh0fCBjYW4gYmUgcHJvdmlkZWQgdG8gc3Vwb3J0IEhXIHZpZGVvIGRlY29kaW5nIHRv
Ci0gIC8vIHRleHR1cmUgYW5kIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYSBzaGFyZWQgRUdMIGNv
bnRleHQgb24gdmlkZW8KLSAgLy8gZGVjb2RpbmcgdGhyZWFkLgotICBwdWJsaWMgc3RhdGljIG5h
dGl2ZSBib29sZWFuIGluaXRpYWxpemVBbmRyb2lkR2xvYmFscyhPYmplY3QgY29udGV4dCwgYm9v
bGVhbiBpbml0aWFsaXplQXVkaW8sCi0gICAgICBib29sZWFuIGluaXRpYWxpemVWaWRlbywgYm9v
bGVhbiB2aWRlb0h3QWNjZWxlcmF0aW9uKTsKLQotICAvLyBGaWVsZCB0cmlhbCBpbml0aWFsaXph
dGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIFBlZXJDb25uZWN0aW9uRmFjdG9yeQotICAvLyBp
cyBjcmVhdGVkLgotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGluaXRpYWxpemVGaWVsZFRy
aWFscyhTdHJpbmcgZmllbGRUcmlhbHNJbml0U3RyaW5nKTsKLSAgLy8gSW50ZXJuYWwgdHJhY2lu
ZyBpbml0aWFsaXphdGlvbi4gTXVzdCBiZSBjYWxsZWQgYmVmb3JlIFBlZXJDb25uZWN0aW9uRmFj
dG9yeSBpcyBjcmVhdGVkIHRvCi0gIC8vIHByZXZlbnQgcmFjaW5nIHdpdGggdHJhY2luZyBjb2Rl
LgotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIGluaXRpYWxpemVJbnRlcm5hbFRyYWNlcigp
OwotICAvLyBJbnRlcm5hbCB0cmFjaW5nIHNodXRkb3duLCBjYWxsZWQgdG8gcHJldmVudCByZXNv
dXJjZSBsZWFrcy4gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIKLSAgLy8gUGVlckNvbm5lY3Rpb25GYWN0
b3J5IGlzIGdvbmUgdG8gcHJldmVudCByYWNlcyB3aXRoIGNvZGUgcGVyZm9ybWluZyB0cmFjaW5n
LgotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lkIHNodXRkb3duSW50ZXJuYWxUcmFjZXIoKTsK
LSAgLy8gU3RhcnQvc3RvcCBpbnRlcm5hbCBjYXB0dXJpbmcgb2YgaW50ZXJuYWwgdHJhY2luZy4K
LSAgcHVibGljIHN0YXRpYyBuYXRpdmUgYm9vbGVhbiBzdGFydEludGVybmFsVHJhY2luZ0NhcHR1
cmUoU3RyaW5nIHRyYWNpbmdfZmlsZW5hbWUpOwotICBwdWJsaWMgc3RhdGljIG5hdGl2ZSB2b2lk
IHN0b3BJbnRlcm5hbFRyYWNpbmdDYXB0dXJlKCk7Ci0KLSAgQERlcHJlY2F0ZWQKLSAgcHVibGlj
IFBlZXJDb25uZWN0aW9uRmFjdG9yeSgpIHsKLSAgICB0aGlzKG51bGwpOwotICB9Ci0KLSAgcHVi
bGljIFBlZXJDb25uZWN0aW9uRmFjdG9yeShPcHRpb25zIG9wdGlvbnMpIHsKLSAgICBuYXRpdmVG
YWN0b3J5ID0gbmF0aXZlQ3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KG9wdGlvbnMpOwotICAg
IGlmIChuYXRpdmVGYWN0b3J5ID09IDApIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkhIik7Ci0gICAg
fQotICB9Ci0KLSAgcHVibGljIFBlZXJDb25uZWN0aW9uIGNyZWF0ZVBlZXJDb25uZWN0aW9uKFBl
ZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gcnRjQ29uZmlnLAotICAgICAgTWVkaWFDb25z
dHJhaW50cyBjb25zdHJhaW50cywgUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgb2JzZXJ2ZXIpIHsK
LSAgICBsb25nIG5hdGl2ZU9ic2VydmVyID0gbmF0aXZlQ3JlYXRlT2JzZXJ2ZXIob2JzZXJ2ZXIp
OwotICAgIGlmIChuYXRpdmVPYnNlcnZlciA9PSAwKSB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci0gICAgbG9uZyBuYXRpdmVQZWVyQ29ubmVjdGlvbiA9Ci0gICAgICAgIG5hdGl2ZUNyZWF0
ZVBlZXJDb25uZWN0aW9uKG5hdGl2ZUZhY3RvcnksIHJ0Y0NvbmZpZywgY29uc3RyYWludHMsIG5h
dGl2ZU9ic2VydmVyKTsKLSAgICBpZiAobmF0aXZlUGVlckNvbm5lY3Rpb24gPT0gMCkgewotICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiBuZXcgUGVlckNvbm5lY3Rpb24obmF0
aXZlUGVlckNvbm5lY3Rpb24sIG5hdGl2ZU9ic2VydmVyKTsKLSAgfQotCi0gIHB1YmxpYyBQZWVy
Q29ubmVjdGlvbiBjcmVhdGVQZWVyQ29ubmVjdGlvbihMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNl
cnZlcj4gaWNlU2VydmVycywKLSAgICAgIE1lZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMsIFBl
ZXJDb25uZWN0aW9uLk9ic2VydmVyIG9ic2VydmVyKSB7Ci0gICAgUGVlckNvbm5lY3Rpb24uUlRD
Q29uZmlndXJhdGlvbiBydGNDb25maWcgPSBuZXcgUGVlckNvbm5lY3Rpb24uUlRDQ29uZmlndXJh
dGlvbihpY2VTZXJ2ZXJzKTsKLSAgICByZXR1cm4gY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29u
ZmlnLCBjb25zdHJhaW50cywgb2JzZXJ2ZXIpOwotICB9Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFt
IGNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0oU3RyaW5nIGxhYmVsKSB7Ci0gICAgcmV0dXJuIG5ldyBN
ZWRpYVN0cmVhbShuYXRpdmVDcmVhdGVMb2NhbE1lZGlhU3RyZWFtKG5hdGl2ZUZhY3RvcnksIGxh
YmVsKSk7Ci0gIH0KLQotICBwdWJsaWMgVmlkZW9Tb3VyY2UgY3JlYXRlVmlkZW9Tb3VyY2UoVmlk
ZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIGZpbmFsIEVnbEJhc2UuQ29udGV4dCBlZ2xDb250
ZXh0ID0KLSAgICAgICAgbG9jYWxFZ2xiYXNlID09IG51bGwgPyBudWxsIDogbG9jYWxFZ2xiYXNl
LmdldEVnbEJhc2VDb250ZXh0KCk7Ci0gICAgbG9uZyBuYXRpdmVBbmRyb2lkVmlkZW9UcmFja1Nv
dXJjZSA9Ci0gICAgICAgIG5hdGl2ZUNyZWF0ZVZpZGVvU291cmNlKG5hdGl2ZUZhY3RvcnksIGVn
bENvbnRleHQsIGNhcHR1cmVyLmlzU2NyZWVuY2FzdCgpKTsKLSAgICBWaWRlb0NhcHR1cmVyLkNh
cHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlciA9Ci0gICAgICAgIG5ldyBWaWRlb0NhcHR1
cmVyLkFuZHJvaWRWaWRlb1RyYWNrU291cmNlT2JzZXJ2ZXIobmF0aXZlQW5kcm9pZFZpZGVvVHJh
Y2tTb3VyY2UpOwotICAgIG5hdGl2ZUluaXRpYWxpemVWaWRlb0NhcHR1cmVyKAotICAgICAgICBu
YXRpdmVGYWN0b3J5LCBjYXB0dXJlciwgbmF0aXZlQW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UsIGNh
cHR1cmVyT2JzZXJ2ZXIpOwotICAgIHJldHVybiBuZXcgVmlkZW9Tb3VyY2UobmF0aXZlQW5kcm9p
ZFZpZGVvVHJhY2tTb3VyY2UpOwotICB9Ci0KLSAgcHVibGljIFZpZGVvVHJhY2sgY3JlYXRlVmlk
ZW9UcmFjayhTdHJpbmcgaWQsIFZpZGVvU291cmNlIHNvdXJjZSkgewotICAgIHJldHVybiBuZXcg
VmlkZW9UcmFjayhuYXRpdmVDcmVhdGVWaWRlb1RyYWNrKG5hdGl2ZUZhY3RvcnksIGlkLCBzb3Vy
Y2UubmF0aXZlU291cmNlKSk7Ci0gIH0KLQotICBwdWJsaWMgQXVkaW9Tb3VyY2UgY3JlYXRlQXVk
aW9Tb3VyY2UoTWVkaWFDb25zdHJhaW50cyBjb25zdHJhaW50cykgewotICAgIHJldHVybiBuZXcg
QXVkaW9Tb3VyY2UobmF0aXZlQ3JlYXRlQXVkaW9Tb3VyY2UobmF0aXZlRmFjdG9yeSwgY29uc3Ry
YWludHMpKTsKLSAgfQotCi0gIHB1YmxpYyBBdWRpb1RyYWNrIGNyZWF0ZUF1ZGlvVHJhY2soU3Ry
aW5nIGlkLCBBdWRpb1NvdXJjZSBzb3VyY2UpIHsKLSAgICByZXR1cm4gbmV3IEF1ZGlvVHJhY2so
bmF0aXZlQ3JlYXRlQXVkaW9UcmFjayhuYXRpdmVGYWN0b3J5LCBpZCwgc291cmNlLm5hdGl2ZVNv
dXJjZSkpOwotICB9Ci0KLSAgLy8gU3RhcnRzIHJlY29yZGluZyBhbiBBRUMgZHVtcC4gT3duZXJz
aGlwIG9mIHRoZSBmaWxlIGlzIHRyYW5zZmVyZWQgdG8gdGhlCi0gIC8vIG5hdGl2ZSBjb2RlLiBJ
ZiBhbiBBRUMgZHVtcCBpcyBhbHJlYWR5IGluIHByb2dyZXNzLCBpdCB3aWxsIGJlIHN0b3BwZWQg
YW5kCi0gIC8vIGEgbmV3IG9uZSB3aWxsIHN0YXJ0IHVzaW5nIHRoZSBwcm92aWRlZCBmaWxlLgot
ICBwdWJsaWMgYm9vbGVhbiBzdGFydEFlY0R1bXAoaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IGZp
bGVzaXplX2xpbWl0X2J5dGVzKSB7Ci0gICAgcmV0dXJuIG5hdGl2ZVN0YXJ0QWVjRHVtcChuYXRp
dmVGYWN0b3J5LCBmaWxlX2Rlc2NyaXB0b3IsIGZpbGVzaXplX2xpbWl0X2J5dGVzKTsKLSAgfQot
Ci0gIC8vIFN0b3BzIHJlY29yZGluZyBhbiBBRUMgZHVtcC4gSWYgbm8gQUVDIGR1bXAgaXMgY3Vy
cmVudGx5IGJlaW5nIHJlY29yZGVkLAotICAvLyB0aGlzIGNhbGwgd2lsbCBoYXZlIG5vIGVmZmVj
dC4KLSAgcHVibGljIHZvaWQgc3RvcEFlY0R1bXAoKSB7Ci0gICAgbmF0aXZlU3RvcEFlY0R1bXAo
bmF0aXZlRmFjdG9yeSk7Ci0gIH0KLQotICBARGVwcmVjYXRlZAotICBwdWJsaWMgdm9pZCBzZXRP
cHRpb25zKE9wdGlvbnMgb3B0aW9ucykgewotICAgIG5hdGl2ZVNldE9wdGlvbnMobmF0aXZlRmFj
dG9yeSwgb3B0aW9ucyk7Ci0gIH0KLQotICAvKiogU2V0IHRoZSBFR0wgY29udGV4dCB1c2VkIGJ5
IEhXIFZpZGVvIGVuY29kaW5nIGFuZCBkZWNvZGluZy4KLSAgICoKLSAgICogQHBhcmFtIGxvY2Fs
RWdsQ29udGV4dCAgIE11c3QgYmUgdGhlIHNhbWUgYXMgdXNlZCBieSBWaWRlb0NhcHR1cmVyQW5k
cm9pZCBhbmQgYW55IGxvY2FsIHZpZGVvCi0gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZW5kZXJlci4KLSAgICogQHBhcmFtIHJlbW90ZUVnbENvbnRleHQgIE11c3QgYmUgdGhlIHNhbWUg
YXMgdXNlZCBieSBhbnkgcmVtb3RlIHZpZGVvIHJlbmRlcmVyLgotICAgKi8KLSAgcHVibGljIHZv
aWQgc2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlvbnMoCi0gICAgICBFZ2xCYXNlLkNvbnRleHQg
bG9jYWxFZ2xDb250ZXh0LCBFZ2xCYXNlLkNvbnRleHQgcmVtb3RlRWdsQ29udGV4dCkgewotICAg
IGlmIChsb2NhbEVnbGJhc2UgIT0gbnVsbCkgewotICAgICAgTG9nZ2luZy53KFRBRywgIkVnbCBj
b250ZXh0IGFscmVhZHkgc2V0LiIpOwotICAgICAgbG9jYWxFZ2xiYXNlLnJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgaWYgKHJlbW90ZUVnbGJhc2UgIT0gbnVsbCkgewotICAgICAgTG9nZ2luZy53KFRB
RywgIkVnbCBjb250ZXh0IGFscmVhZHkgc2V0LiIpOwotICAgICAgcmVtb3RlRWdsYmFzZS5yZWxl
YXNlKCk7Ci0gICAgfQotICAgIGxvY2FsRWdsYmFzZSA9IEVnbEJhc2UuY3JlYXRlKGxvY2FsRWds
Q29udGV4dCk7Ci0gICAgcmVtb3RlRWdsYmFzZSA9IEVnbEJhc2UuY3JlYXRlKHJlbW90ZUVnbENv
bnRleHQpOwotICAgIG5hdGl2ZVNldFZpZGVvSHdBY2NlbGVyYXRpb25PcHRpb25zKAotICAgICAg
ICBuYXRpdmVGYWN0b3J5LCBsb2NhbEVnbGJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgcmVtb3Rl
RWdsYmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bv
c2UoKSB7Ci0gICAgbmF0aXZlRnJlZUZhY3RvcnkobmF0aXZlRmFjdG9yeSk7Ci0gICAgbmV0d29y
a1RocmVhZCA9IG51bGw7Ci0gICAgd29ya2VyVGhyZWFkID0gbnVsbDsKLSAgICBzaWduYWxpbmdU
aHJlYWQgPSBudWxsOwotICAgIGlmIChsb2NhbEVnbGJhc2UgIT0gbnVsbCkKLSAgICAgIGxvY2Fs
RWdsYmFzZS5yZWxlYXNlKCk7Ci0gICAgaWYgKHJlbW90ZUVnbGJhc2UgIT0gbnVsbCkKLSAgICAg
IHJlbW90ZUVnbGJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdGhyZWFkc0Nh
bGxiYWNrcygpIHsKLSAgICBuYXRpdmVUaHJlYWRzQ2FsbGJhY2tzKG5hdGl2ZUZhY3RvcnkpOwot
ICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFN0YWNrVHJhY2UoVGhyZWFkIHRocmVh
ZCwgU3RyaW5nIHRocmVhZE5hbWUpIHsKLSAgICBpZiAodGhyZWFkICE9IG51bGwpIHsKLSAgICAg
IFN0YWNrVHJhY2VFbGVtZW50W10gc3RhY2tUcmFjZXMgPSB0aHJlYWQuZ2V0U3RhY2tUcmFjZSgp
OwotICAgICAgaWYgKHN0YWNrVHJhY2VzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5k
KFRBRywgdGhyZWFkTmFtZSArICIgc3RhY2tzIHRyYWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNr
VHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBzdGFja1RyYWNlcykgewotICAgICAgICAgIExvZ2dp
bmcuZChUQUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRTdGFja1RyYWNlcygpIHsKLSAg
ICBwcmludFN0YWNrVHJhY2UobmV0d29ya1RocmVhZCwgIk5ldHdvcmsgdGhyZWFkIik7Ci0gICAg
cHJpbnRTdGFja1RyYWNlKHdvcmtlclRocmVhZCwgIldvcmtlciB0aHJlYWQiKTsKLSAgICBwcmlu
dFN0YWNrVHJhY2Uoc2lnbmFsaW5nVGhyZWFkLCAiU2lnbmFsaW5nIHRocmVhZCIpOwotICB9Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBvbk5ldHdvcmtUaHJlYWRSZWFkeSgpIHsKLSAgICBuZXR3
b3JrVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
b25OZXR3b3JrVGhyZWFkUmVhZHkiKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgb25X
b3JrZXJUaHJlYWRSZWFkeSgpIHsKLSAgICB3b3JrZXJUaHJlYWQgPSBUaHJlYWQuY3VycmVudFRo
cmVhZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJvbldvcmtlclRocmVhZFJlYWR5Iik7Ci0gIH0K
LQotICBwcml2YXRlIHN0YXRpYyB2b2lkIG9uU2lnbmFsaW5nVGhyZWFkUmVhZHkoKSB7Ci0gICAg
c2lnbmFsaW5nVGhyZWFkID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICBMb2dnaW5nLmQo
VEFHLCAib25TaWduYWxpbmdUaHJlYWRSZWFkeSIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
bmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KE9wdGlvbnMgb3B0
aW9ucyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlQ3JlYXRlT2JzZXJ2
ZXIoUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgb2JzZXJ2ZXIpOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSBsb25nIG5hdGl2ZUNyZWF0ZVBlZXJDb25uZWN0aW9uKGxvbmcgbmF0aXZlRmFjdG9y
eSwKLSAgICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gcnRjQ29uZmlnLCBNZWRp
YUNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzLCBsb25nIG5hdGl2ZU9ic2VydmVyKTsKLQotICBwcml2
YXRlIHN0YXRpYyBuYXRpdmUgbG9uZyBuYXRpdmVDcmVhdGVMb2NhbE1lZGlhU3RyZWFtKGxvbmcg
bmF0aXZlRmFjdG9yeSwgU3RyaW5nIGxhYmVsKTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
bG9uZyBuYXRpdmVDcmVhdGVWaWRlb1NvdXJjZSgKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwg
RWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQsIGJvb2xlYW4gaXNfc2NyZWVuY2FzdCk7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlSW5pdGlhbGl6ZVZpZGVvQ2FwdHVyZXIo
bG9uZyBuYXRpdmVfZmFjdG9yeSwKLSAgICAgIFZpZGVvQ2FwdHVyZXIgal92aWRlb19jYXB0dXJl
ciwgbG9uZyBuYXRpdmVfc291cmNlLAotICAgICAgVmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2Vy
dmVyIGpfZnJhbWVfb2JzZXJ2ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBsb25nIG5h
dGl2ZUNyZWF0ZVZpZGVvVHJhY2soCi0gICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIFN0cmluZyBp
ZCwgbG9uZyBuYXRpdmVWaWRlb1NvdXJjZSk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxv
bmcgbmF0aXZlQ3JlYXRlQXVkaW9Tb3VyY2UoCi0gICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIE1l
ZGlhQ29uc3RyYWludHMgY29uc3RyYWludHMpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBs
b25nIG5hdGl2ZUNyZWF0ZUF1ZGlvVHJhY2soCi0gICAgICBsb25nIG5hdGl2ZUZhY3RvcnksIFN0
cmluZyBpZCwgbG9uZyBuYXRpdmVTb3VyY2UpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBi
b29sZWFuIG5hdGl2ZVN0YXJ0QWVjRHVtcCgKLSAgICAgIGxvbmcgbmF0aXZlRmFjdG9yeSwgaW50
IGZpbGVfZGVzY3JpcHRvciwgaW50IGZpbGVzaXplX2xpbWl0X2J5dGVzKTsKLQotICBwcml2YXRl
IHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVTdG9wQWVjRHVtcChsb25nIG5hdGl2ZUZhY3Rvcnkp
OwotCi0gIEBEZXByZWNhdGVkIHB1YmxpYyBuYXRpdmUgdm9pZCBuYXRpdmVTZXRPcHRpb25zKGxv
bmcgbmF0aXZlRmFjdG9yeSwgT3B0aW9ucyBvcHRpb25zKTsKLQotICBwcml2YXRlIHN0YXRpYyBu
YXRpdmUgdm9pZCBuYXRpdmVTZXRWaWRlb0h3QWNjZWxlcmF0aW9uT3B0aW9ucygKLSAgICAgIGxv
bmcgbmF0aXZlRmFjdG9yeSwgT2JqZWN0IGxvY2FsRUdMQ29udGV4dCwgT2JqZWN0IHJlbW90ZUVH
TENvbnRleHQpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZVRocmVhZHND
YWxsYmFja3MobG9uZyBuYXRpdmVGYWN0b3J5KTsKLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
dm9pZCBuYXRpdmVGcmVlRmFjdG9yeShsb25nIG5hdGl2ZUZhY3RvcnkpOwotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vbi5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvUmVuZGVyZXJDb21tb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vbi5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjk4ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0
IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwot
aW1wb3J0IGFuZHJvaWQub3BlbmdsLk1hdHJpeDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsK
LQotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLS8qKgotICogU3RhdGljIGhlbHBlciBm
dW5jdGlvbnMgZm9yIHJlbmRlcmVyIGltcGxlbWVudGF0aW9ucy4KLSAqLwotcHVibGljIGNsYXNz
IFJlbmRlcmVyQ29tbW9uIHsKLSAgLyoqIEludGVyZmFjZSBmb3IgcmVwb3J0aW5nIHJlbmRlcmlu
ZyBldmVudHMuICovCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIFJlbmRlcmVyRXZlbnRzIHsK
LSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGZpcnN0IGZyYW1lIGlzIHJlbmRl
cmVkLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIG9uRmlyc3RGcmFtZVJlbmRlcmVkKCk7Ci0K
LSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHJlbmRlcmVkIGZyYW1lIHJlc29s
dXRpb24gb3Igcm90YXRpb24gaGFzIGNoYW5nZWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQg
b25GcmFtZVJlc29sdXRpb25DaGFuZ2VkKGludCB2aWRlb1dpZHRoLCBpbnQgdmlkZW9IZWlnaHQs
IGludCByb3RhdGlvbik7Ci0gIH0KLQotICAvKiogSW50ZXJmYWNlIGZvciByZW5kZXJpbmcgZnJh
bWVzIG9uIGFuIEVHTFN1cmZhY2UuICovCi0gIHB1YmxpYyBzdGF0aWMgaW50ZXJmYWNlIEdsRHJh
d2VyIHsKLSAgICAvKioKLSAgICAgKiBGdW5jdGlvbnMgZm9yIGRyYXdpbmcgZnJhbWVzIHdpdGgg
ZGlmZmVyZW50IHNvdXJjZXMuIFRoZSByZW5kZXJpbmcgc3VyZmFjZSB0YXJnZXQgaXMKLSAgICAg
KiBpbXBsaWVkIGJ5IHRoZSBjdXJyZW50IEVHTCBjb250ZXh0IG9mIHRoZSBjYWxsaW5nIHRocmVh
ZCBhbmQgcmVxdWlyZXMgbm8gZXhwbGljaXQgYXJndW1lbnQuCi0gICAgICogVGhlIGNvb3JkaW5h
dGVzIHNwZWNpZnkgdGhlIHZpZXdwb3J0IGxvY2F0aW9uIG9uIHRoZSBzdXJmYWNlIHRhcmdldC4K
LSAgICAgKi8KLSAgICB2b2lkIGRyYXdPZXMoaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0ZXhN
YXRyaXgsIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsCi0gICAgICAgIGludCB2aWV3
cG9ydFgsIGludCB2aWV3cG9ydFksIGludCB2aWV3cG9ydFdpZHRoLCBpbnQgdmlld3BvcnRIZWln
aHQpOwotICAgIHZvaWQgZHJhd1JnYihpbnQgdGV4dHVyZUlkLCBmbG9hdFtdIHRleE1hdHJpeCwg
aW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwgaW50IHZpZXdwb3J0WCwKLSAgICAgICAg
aW50IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCk7Ci0g
ICAgdm9pZCBkcmF3WXV2KGludFtdIHl1dlRleHR1cmVzLCBmbG9hdFtdIHRleE1hdHJpeCwgaW50
IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwKLSAgICAgICAgaW50IHZpZXdwb3J0WCwgaW50
IHZpZXdwb3J0WSwgaW50IHZpZXdwb3J0V2lkdGgsIGludCB2aWV3cG9ydEhlaWdodCk7Ci0KLSAg
ICAvKioKLSAgICAgKiBSZWxlYXNlIGFsbCBHTCByZXNvdXJjZXMuIFRoaXMgbmVlZHMgdG8gYmUg
ZG9uZSBtYW51YWxseSwgb3RoZXJ3aXNlIHJlc291cmNlcyBtYXkgbGVhay4KLSAgICAgKi8KLSAg
ICB2b2lkIHJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBIZWxwZXIgY2xhc3MgZm9yIHVw
bG9hZGluZyBZVVYgYnl0ZWJ1ZmZlciBmcmFtZXMgdG8gdGV4dHVyZXMgdGhhdCBoYW5kbGVzIHN0
cmlkZSA+IHdpZHRoLiBUaGlzCi0gICAqIGNsYXNzIGtlZXBzIGFuIGludGVybmFsIEJ5dGVCdWZm
ZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbnMgZm9yIGludGVybWVkaWF0ZSBjb3Bp
ZXMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIFl1dlVwbG9hZGVyIHsKLSAgICAvLyBJ
bnRlcm1lZGlhdGUgY29weSBidWZmZXIgZm9yIHVwbG9hZGluZyB5dXYgZnJhbWVzIHRoYXQgYXJl
IG5vdCBwYWNrZWQsIGkuZS4gc3RyaWRlID4gd2lkdGguCi0gICAgLy8gVE9ETyhtYWdqZWQpOiBJ
bnZlc3RpZ2F0ZSB3aGVuIEdMX1VOUEFDS19ST1dfTEVOR1RIIGlzIGF2YWlsYWJsZSwgb3IgbWFr
ZSBhIGN1c3RvbSBzaGFkZXIKLSAgICAvLyB0aGF0IGhhbmRsZXMgc3RyaWRlIGFuZCBjb21wYXJl
IHBlcmZvcm1hbmNlIHdpdGggaW50ZXJtZWRpYXRlIGNvcHkuCi0gICAgcHJpdmF0ZSBCeXRlQnVm
ZmVyIGNvcHlCdWZmZXI7Ci0KLSAgICAvKioKLSAgICAgKiBVcGxvYWQgfHBsYW5lc3wgaW50byB8
b3V0cHV0WXV2VGV4dHVyZXN8LCB0YWtpbmcgc3RyaWRlIGludG8gY29uc2lkZXJhdGlvbi4KLSAg
ICAgKiB8b3V0cHV0WXV2VGV4dHVyZXN8IG11c3QgaGF2ZSBiZWVuIGdlbmVyYXRlZCBpbiBhZHZh
bmNlLgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHVwbG9hZFl1dkRhdGEoCi0gICAgICAgIGlu
dFtdIG91dHB1dFl1dlRleHR1cmVzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludFtdIHN0cmlk
ZXMsIEJ5dGVCdWZmZXJbXSBwbGFuZXMpIHsKLSAgICAgIGZpbmFsIGludFtdIHBsYW5lV2lkdGhz
ID0gbmV3IGludFtdIHt3aWR0aCwgd2lkdGggLyAyLCB3aWR0aCAvIDJ9OwotICAgICAgZmluYWwg
aW50W10gcGxhbmVIZWlnaHRzID0gbmV3IGludFtdIHtoZWlnaHQsIGhlaWdodCAvIDIsIGhlaWdo
dCAvIDJ9OwotICAgICAgLy8gTWFrZSBhIGZpcnN0IHBhc3MgdG8gc2VlIGlmIHdlIG5lZWQgYSB0
ZW1wb3JhcnkgY29weSBidWZmZXIuCi0gICAgICBpbnQgY29weUNhcGFjaXR5TmVlZGVkID0gMDsK
LSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAgIGlmIChzdHJpZGVz
W2ldID4gcGxhbmVXaWR0aHNbaV0pIHsKLSAgICAgICAgICBjb3B5Q2FwYWNpdHlOZWVkZWQgPSBN
YXRoLm1heChjb3B5Q2FwYWNpdHlOZWVkZWQsIHBsYW5lV2lkdGhzW2ldICogcGxhbmVIZWlnaHRz
W2ldKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgLy8gQWxsb2NhdGUgY29weSBidWZmZXIg
aWYgbmVjZXNzYXJ5LgotICAgICAgaWYgKGNvcHlDYXBhY2l0eU5lZWRlZCA+IDAKLSAgICAgICAg
ICAmJiAoY29weUJ1ZmZlciA9PSBudWxsIHx8IGNvcHlCdWZmZXIuY2FwYWNpdHkoKSA8IGNvcHlD
YXBhY2l0eU5lZWRlZCkpIHsKLSAgICAgICAgY29weUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2Nh
dGVEaXJlY3QoY29weUNhcGFjaXR5TmVlZGVkKTsKLSAgICAgIH0KLSAgICAgIC8vIFVwbG9hZCBl
YWNoIHBsYW5lLgotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgICAg
R0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTAgKyBpKTsKLSAgICAgICAg
R0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIG91dHB1dFl1dlRleHR1
cmVzW2ldKTsKLSAgICAgICAgLy8gR0xFUyBvbmx5IGFjY2VwdHMgcGFja2VkIGRhdGEsIGkuZS4g
c3RyaWRlID09IHBsYW5lV2lkdGguCi0gICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgcGFja2VkQnl0
ZUJ1ZmZlcjsKLSAgICAgICAgaWYgKHN0cmlkZXNbaV0gPT0gcGxhbmVXaWR0aHNbaV0pIHsKLSAg
ICAgICAgICAvLyBJbnB1dCBpcyBwYWNrZWQgYWxyZWFkeS4KLSAgICAgICAgICBwYWNrZWRCeXRl
QnVmZmVyID0gcGxhbmVzW2ldOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIFZpZGVvUmVu
ZGVyZXIubmF0aXZlQ29weVBsYW5lKAotICAgICAgICAgICAgICBwbGFuZXNbaV0sIHBsYW5lV2lk
dGhzW2ldLCBwbGFuZUhlaWdodHNbaV0sIHN0cmlkZXNbaV0sIGNvcHlCdWZmZXIsIHBsYW5lV2lk
dGhzW2ldKTsKLSAgICAgICAgICBwYWNrZWRCeXRlQnVmZmVyID0gY29weUJ1ZmZlcjsKLSAgICAg
ICAgfQotICAgICAgICBHTEVTMjAuZ2xUZXhJbWFnZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAw
LCBHTEVTMjAuR0xfTFVNSU5BTkNFLCBwbGFuZVdpZHRoc1tpXSwKLSAgICAgICAgICAgIHBsYW5l
SGVpZ2h0c1tpXSwgMCwgR0xFUzIwLkdMX0xVTUlOQU5DRSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZ
VEUsIHBhY2tlZEJ5dGVCdWZmZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBIZWxwZXIgY2xhc3MgZm9yIGRldGVybWluaW5nIGxheW91dCBzaXplIGJhc2VkIG9uIGxheW91
dCByZXF1aXJlbWVudHMsIHNjYWxpbmcgdHlwZSwgYW5kIHZpZGVvCi0gICAqIGFzcGVjdCByYXRp
by4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgVmlkZW9MYXlvdXRNZWFzdXJlIHsKLSAg
ICAvLyBUaGUgc2NhbGluZyB0eXBlIGRldGVybWluZXMgaG93IHRoZSB2aWRlbyB3aWxsIGZpbGwg
dGhlIGFsbG93ZWQgbGF5b3V0IGFyZWEgaW4gbWVhc3VyZSgpLiBJdAotICAgIC8vIGNhbiBiZSBz
cGVjaWZpZWQgc2VwYXJhdGVseSBmb3IgdGhlIGNhc2Ugd2hlbiB2aWRlbyBoYXMgbWF0Y2hlZCBv
cmllbnRhdGlvbiB3aXRoIGxheW91dCBzaXplCi0gICAgLy8gYW5kIHdoZW4gdGhlcmUgaXMgYW4g
b3JpZW50YXRpb24gbWlzbWF0Y2guCi0gICAgcHJpdmF0ZSBTY2FsaW5nVHlwZSBzY2FsaW5nVHlw
ZU1hdGNoT3JpZW50YXRpb24gPSBTY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfQkFMQU5DRUQ7Ci0g
ICAgcHJpdmF0ZSBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb24gPSBT
Y2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfQkFMQU5DRUQ7Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRT
Y2FsaW5nVHlwZShTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSkgewotICAgICAgdGhpcy5zY2FsaW5n
VHlwZU1hdGNoT3JpZW50YXRpb24gPSBzY2FsaW5nVHlwZTsKLSAgICAgIHRoaXMuc2NhbGluZ1R5
cGVNaXNtYXRjaE9yaWVudGF0aW9uID0gc2NhbGluZ1R5cGU7Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgc2V0U2NhbGluZ1R5cGUoCi0gICAgICAgIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlTWF0
Y2hPcmllbnRhdGlvbiwgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9u
KSB7Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBlTWF0Y2hPcmllbnRhdGlvbiA9IHNjYWxpbmdUeXBl
TWF0Y2hPcmllbnRhdGlvbjsKLSAgICAgIHRoaXMuc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0
aW9uID0gc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0aW9uOwotICAgIH0KLQotICAgIHB1Ymxp
YyBQb2ludCBtZWFzdXJlKGludCB3aWR0aFNwZWMsIGludCBoZWlnaHRTcGVjLCBpbnQgZnJhbWVX
aWR0aCwgaW50IGZyYW1lSGVpZ2h0KSB7Ci0gICAgICAvLyBDYWxjdWxhdGUgbWF4IGFsbG93ZWQg
bGF5b3V0IHNpemUuCi0gICAgICBmaW5hbCBpbnQgbWF4V2lkdGggPSBWaWV3LmdldERlZmF1bHRT
aXplKEludGVnZXIuTUFYX1ZBTFVFLCB3aWR0aFNwZWMpOwotICAgICAgZmluYWwgaW50IG1heEhl
aWdodCA9IFZpZXcuZ2V0RGVmYXVsdFNpemUoSW50ZWdlci5NQVhfVkFMVUUsIGhlaWdodFNwZWMp
OwotICAgICAgaWYgKGZyYW1lV2lkdGggPT0gMCB8fCBmcmFtZUhlaWdodCA9PSAwIHx8IG1heFdp
ZHRoID09IDAgfHwgbWF4SGVpZ2h0ID09IDApIHsKLSAgICAgICAgcmV0dXJuIG5ldyBQb2ludCht
YXhXaWR0aCwgbWF4SGVpZ2h0KTsKLSAgICAgIH0KLSAgICAgIC8vIENhbGN1bGF0ZSBkZXNpcmVk
IGRpc3BsYXkgc2l6ZSBiYXNlZCBvbiBzY2FsaW5nIHR5cGUsIHZpZGVvIGFzcGVjdCByYXRpbywK
LSAgICAgIC8vIGFuZCBtYXhpbXVtIGxheW91dCBzaXplLgotICAgICAgZmluYWwgZmxvYXQgZnJh
bWVBc3BlY3QgPSBmcmFtZVdpZHRoIC8gKGZsb2F0KSBmcmFtZUhlaWdodDsKLSAgICAgIGZpbmFs
IGZsb2F0IGRpc3BsYXlBc3BlY3QgPSBtYXhXaWR0aCAvIChmbG9hdCkgbWF4SGVpZ2h0OwotICAg
ICAgZmluYWwgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgPSAoZnJhbWVBc3BlY3QgPiAxLjBmKSA9
PSAoZGlzcGxheUFzcGVjdCA+IDEuMGYpCi0gICAgICAgICAgPyBzY2FsaW5nVHlwZU1hdGNoT3Jp
ZW50YXRpb24KLSAgICAgICAgICA6IHNjYWxpbmdUeXBlTWlzbWF0Y2hPcmllbnRhdGlvbjsKLSAg
ICAgIGZpbmFsIFBvaW50IGxheW91dFNpemUgPSBnZXREaXNwbGF5U2l6ZShzY2FsaW5nVHlwZSwg
ZnJhbWVBc3BlY3QsIG1heFdpZHRoLCBtYXhIZWlnaHQpOwotCi0gICAgICAvLyBJZiB0aGUgbWVh
c3VyZSBzcGVjaWZpY2F0aW9uIGlzIGZvcmNpbmcgYSBzcGVjaWZpYyBzaXplIC0geWllbGQuCi0g
ICAgICBpZiAoVmlldy5NZWFzdXJlU3BlYy5nZXRNb2RlKHdpZHRoU3BlYykgPT0gVmlldy5NZWFz
dXJlU3BlYy5FWEFDVExZKSB7Ci0gICAgICAgIGxheW91dFNpemUueCA9IG1heFdpZHRoOwotICAg
ICAgfQotICAgICAgaWYgKFZpZXcuTWVhc3VyZVNwZWMuZ2V0TW9kZShoZWlnaHRTcGVjKSA9PSBW
aWV3Lk1lYXN1cmVTcGVjLkVYQUNUTFkpIHsKLSAgICAgICAgbGF5b3V0U2l6ZS55ID0gbWF4SGVp
Z2h0OwotICAgICAgfQotICAgICAgcmV0dXJuIGxheW91dFNpemU7Ci0gICAgfQotICB9Ci0KLSAg
Ly8gVHlwZXMgb2YgdmlkZW8gc2NhbGluZzoKLSAgLy8gU0NBTEVfQVNQRUNUX0ZJVCAtIHZpZGVv
IGZyYW1lIGlzIHNjYWxlZCB0byBmaXQgdGhlIHNpemUgb2YgdGhlIHZpZXcgYnkKLSAgLy8gICAg
bWFpbnRhaW5pbmcgdGhlIGFzcGVjdCByYXRpbyAoYmxhY2sgYm9yZGVycyBtYXkgYmUgZGlzcGxh
eWVkKS4KLSAgLy8gU0NBTEVfQVNQRUNUX0ZJTEwgLSB2aWRlbyBmcmFtZSBpcyBzY2FsZWQgdG8g
ZmlsbCB0aGUgc2l6ZSBvZiB0aGUgdmlldyBieQotICAvLyAgICBtYWludGFpbmluZyB0aGUgYXNw
ZWN0IHJhdGlvLiBTb21lIHBvcnRpb24gb2YgdGhlIHZpZGVvIGZyYW1lIG1heSBiZQotICAvLyAg
ICBjbGlwcGVkLgotICAvLyBTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQgLSBDb21wcm9taXNlIGJldHdl
ZW4gRklUIGFuZCBGSUxMLiBWaWRlbyBmcmFtZSB3aWxsIGZpbGwgYXMgbXVjaCBhcwotICAvLyBw
b3NzaWJsZSBvZiB0aGUgdmlldyB3aGlsZSBtYWludGFpbmluZyBhc3BlY3QgcmF0aW8sIHVuZGVy
IHRoZSBjb25zdHJhaW50IHRoYXQgYXQgbGVhc3QKLSAgLy8gfEJBTEFOQ0VEX1ZJU0lCTEVfRlJB
Q1RJT058IG9mIHRoZSBmcmFtZSBjb250ZW50IHdpbGwgYmUgc2hvd24uCi0gIHB1YmxpYyBzdGF0
aWMgZW51bSBTY2FsaW5nVHlwZSB7IFNDQUxFX0FTUEVDVF9GSVQsIFNDQUxFX0FTUEVDVF9GSUxM
LCBTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQgfQotICAvLyBUaGUgbWluaW11bSBmcmFjdGlvbiBvZiB0
aGUgZnJhbWUgY29udGVudCB0aGF0IHdpbGwgYmUgc2hvd24gZm9yIHxTQ0FMRV9BU1BFQ1RfQkFM
QU5DRUR8LgotICAvLyBUaGlzIGxpbWl0cyBleGNlc3NpdmUgY3JvcHBpbmcgd2hlbiBhZGp1c3Rp
bmcgZGlzcGxheSBzaXplLgotICBwcml2YXRlIHN0YXRpYyBmbG9hdCBCQUxBTkNFRF9WSVNJQkxF
X0ZSQUNUSU9OID0gMC41NjI1ZjsKLSAgLy8gY2xhbmctZm9ybWF0IG9mZgotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIGZsb2F0W10gaWRlbnRpdHlNYXRyaXgoKSB7Ci0gICAgcmV0dXJuIG5ldyBmbG9h
dFtdIHsKLSAgICAgICAgMSwgMCwgMCwgMCwKLSAgICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAg
MCwgMCwgMSwgMCwKLSAgICAgICAgMCwgMCwgMCwgMX07Ci0gIH0KLSAgLy8gTWF0cml4IHdpdGgg
dHJhbnNmb3JtIHknID0gMSAtIHkuCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgZmxvYXRbXSB2ZXJ0
aWNhbEZsaXBNYXRyaXgoKSB7Ci0gICAgcmV0dXJuIG5ldyBmbG9hdFtdIHsKLSAgICAgICAgMSwg
IDAsIDAsIDAsCi0gICAgICAgIDAsIC0xLCAwLCAwLAotICAgICAgICAwLCAgMCwgMSwgMCwKLSAg
ICAgICAgMCwgIDEsIDAsIDF9OwotICB9Ci0KLSAgLy8gTWF0cml4IHdpdGggdHJhbnNmb3JtIHgn
ID0gMSAtIHguCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgZmxvYXRbXSBob3Jpem9udGFsRmxpcE1h
dHJpeCgpIHsKLSAgICByZXR1cm4gbmV3IGZsb2F0W10gewotICAgICAgICAtMSwgMCwgMCwgMCwK
LSAgICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgMSwg
MCwgMCwgMX07Ci0gIH0KLSAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgLyoqCi0gICAqIFJldHVy
bnMgdGV4dHVyZSBtYXRyaXggdGhhdCB3aWxsIGhhdmUgdGhlIGVmZmVjdCBvZiByb3RhdGluZyB0
aGUgZnJhbWUgfHJvdGF0aW9uRGVncmVlfAotICAgKiBjbG9ja3dpc2Ugd2hlbiByZW5kZXJlZC4K
LSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmxvYXRbXSByb3RhdGVUZXh0dXJlTWF0cml4KGZsb2F0
W10gdGV4dHVyZU1hdHJpeCwgZmxvYXQgcm90YXRpb25EZWdyZWUpIHsKLSAgICBmaW5hbCBmbG9h
dFtdIHJvdGF0aW9uTWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKLSAgICBNYXRyaXguc2V0Um90YXRl
TShyb3RhdGlvbk1hdHJpeCwgMCwgcm90YXRpb25EZWdyZWUsIDAsIDAsIDEpOwotICAgIGFkanVz
dE9yaWdpbihyb3RhdGlvbk1hdHJpeCk7Ci0gICAgcmV0dXJuIG11bHRpcGx5TWF0cmljZXModGV4
dHVyZU1hdHJpeCwgcm90YXRpb25NYXRyaXgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJldHVybnMg
bmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHQgb2YgYSAqIGIuCi0gICAqLwotICBwdWJsaWMgc3Rh
dGljIGZsb2F0W10gbXVsdGlwbHlNYXRyaWNlcyhmbG9hdFtdIGEsIGZsb2F0W10gYikgewotICAg
IGZpbmFsIGZsb2F0W10gcmVzdWx0TWF0cml4ID0gbmV3IGZsb2F0WzE2XTsKLSAgICBNYXRyaXgu
bXVsdGlwbHlNTShyZXN1bHRNYXRyaXgsIDAsIGEsIDAsIGIsIDApOwotICAgIHJldHVybiByZXN1
bHRNYXRyaXg7Ci0gIH0KLQotICAvKioKLSAgICogUmV0dXJucyBsYXlvdXQgdHJhbnNmb3JtYXRp
b24gbWF0cml4IHRoYXQgYXBwbGllcyBhbiBvcHRpb25hbCBtaXJyb3IgZWZmZWN0IGFuZCBjb21w
ZW5zYXRlcwotICAgKiBmb3IgdmlkZW8gdnMgZGlzcGxheSBhc3BlY3QgcmF0aW8uCi0gICAqLwot
ICBwdWJsaWMgc3RhdGljIGZsb2F0W10gZ2V0TGF5b3V0TWF0cml4KAotICAgICAgYm9vbGVhbiBt
aXJyb3IsIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8sIGZsb2F0IGRpc3BsYXlBc3BlY3RSYXRpbykg
ewotICAgIGZsb2F0IHNjYWxlWCA9IDE7Ci0gICAgZmxvYXQgc2NhbGVZID0gMTsKLSAgICAvLyBT
Y2FsZSBYIG9yIFkgZGltZW5zaW9uIHNvIHRoYXQgdmlkZW8gYW5kIGRpc3BsYXkgc2l6ZSBoYXZl
IHNhbWUgYXNwZWN0IHJhdGlvLgotICAgIGlmIChkaXNwbGF5QXNwZWN0UmF0aW8gPiB2aWRlb0Fz
cGVjdFJhdGlvKSB7Ci0gICAgICBzY2FsZVkgPSB2aWRlb0FzcGVjdFJhdGlvIC8gZGlzcGxheUFz
cGVjdFJhdGlvOwotICAgIH0gZWxzZSB7Ci0gICAgICBzY2FsZVggPSBkaXNwbGF5QXNwZWN0UmF0
aW8gLyB2aWRlb0FzcGVjdFJhdGlvOwotICAgIH0KLSAgICAvLyBBcHBseSBvcHRpb25hbCBob3Jp
em9udGFsIGZsaXAuCi0gICAgaWYgKG1pcnJvcikgewotICAgICAgc2NhbGVYICo9IC0xOwotICAg
IH0KLSAgICBmaW5hbCBmbG9hdCBtYXRyaXhbXSA9IG5ldyBmbG9hdFsxNl07Ci0gICAgTWF0cml4
LnNldElkZW50aXR5TShtYXRyaXgsIDApOwotICAgIE1hdHJpeC5zY2FsZU0obWF0cml4LCAwLCBz
Y2FsZVgsIHNjYWxlWSwgMSk7Ci0gICAgYWRqdXN0T3JpZ2luKG1hdHJpeCk7Ci0gICAgcmV0dXJu
IG1hdHJpeDsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxjdWxhdGUgZGlzcGxheSBzaXplIGJhc2Vk
IG9uIHNjYWxpbmcgdHlwZSwgdmlkZW8gYXNwZWN0IHJhdGlvLCBhbmQgbWF4aW11bSBkaXNwbGF5
IHNpemUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFBvaW50IGdldERpc3BsYXlTaXplKAotICAg
ICAgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8sIGludCBt
YXhEaXNwbGF5V2lkdGgsIGludCBtYXhEaXNwbGF5SGVpZ2h0KSB7Ci0gICAgcmV0dXJuIGdldERp
c3BsYXlTaXplKGNvbnZlcnRTY2FsaW5nVHlwZVRvVmlzaWJsZUZyYWN0aW9uKHNjYWxpbmdUeXBl
KSwgdmlkZW9Bc3BlY3RSYXRpbywKLSAgICAgICAgbWF4RGlzcGxheVdpZHRoLCBtYXhEaXNwbGF5
SGVpZ2h0KTsKLSAgfQotCi0gIC8qKgotICAgKiBNb3ZlIHxtYXRyaXh8IHRyYW5zZm9ybWF0aW9u
IG9yaWdpbiB0byAoMC41LCAwLjUpLiBUaGlzIGlzIHRoZSBvcmlnaW4gZm9yIHRleHR1cmUgY29v
cmRpbmF0ZXMKLSAgICogdGhhdCBhcmUgaW4gdGhlIHJhbmdlIDAgdG8gMS4KLSAgICovCi0gIHBy
aXZhdGUgc3RhdGljIHZvaWQgYWRqdXN0T3JpZ2luKGZsb2F0W10gbWF0cml4KSB7Ci0gICAgLy8g
Tm90ZSB0aGF0IE9wZW5HTCBpcyB1c2luZyBjb2x1bW4tbWFqb3Igb3JkZXIuCi0gICAgLy8gUHJl
IHRyYW5zbGF0ZSB3aXRoIC0wLjUgdG8gbW92ZSBjb29yZGluYXRlcyB0byByYW5nZSBbLTAuNSwg
MC41XS4KLSAgICBtYXRyaXhbMTJdIC09IDAuNWYgKiAobWF0cml4WzBdICsgbWF0cml4WzRdKTsK
LSAgICBtYXRyaXhbMTNdIC09IDAuNWYgKiAobWF0cml4WzFdICsgbWF0cml4WzVdKTsKLSAgICAv
LyBQb3N0IHRyYW5zbGF0ZSB3aXRoIDAuNSB0byBtb3ZlIGNvb3JkaW5hdGVzIHRvIHJhbmdlIFsw
LCAxXS4KLSAgICBtYXRyaXhbMTJdICs9IDAuNWY7Ci0gICAgbWF0cml4WzEzXSArPSAwLjVmOwot
ICB9Ci0KLSAgLyoqCi0gICAqIEVhY2ggc2NhbGluZyB0eXBlIGhhcyBhIG9uZS10by1vbmUgY29y
cmVzcG9uZGVuY2UgdG8gYSBudW1lcmljIG1pbmltdW0gZnJhY3Rpb24gb2YgdGhlIHZpZGVvCi0g
ICAqIHRoYXQgbXVzdCByZW1haW4gdmlzaWJsZS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZs
b2F0IGNvbnZlcnRTY2FsaW5nVHlwZVRvVmlzaWJsZUZyYWN0aW9uKFNjYWxpbmdUeXBlIHNjYWxp
bmdUeXBlKSB7Ci0gICAgc3dpdGNoIChzY2FsaW5nVHlwZSkgewotICAgICAgY2FzZSBTQ0FMRV9B
U1BFQ1RfRklUOgotICAgICAgICByZXR1cm4gMS4wZjsKLSAgICAgIGNhc2UgU0NBTEVfQVNQRUNU
X0ZJTEw6Ci0gICAgICAgIHJldHVybiAwLjBmOwotICAgICAgY2FzZSBTQ0FMRV9BU1BFQ1RfQkFM
QU5DRUQ6Ci0gICAgICAgIHJldHVybiBCQUxBTkNFRF9WSVNJQkxFX0ZSQUNUSU9OOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigpOwot
ICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxjdWxhdGUgZGlzcGxheSBzaXplIGJhc2VkIG9u
IG1pbmltdW0gZnJhY3Rpb24gb2YgdGhlIHZpZGVvIHRoYXQgbXVzdCByZW1haW4gdmlzaWJsZSwK
LSAgICogdmlkZW8gYXNwZWN0IHJhdGlvLCBhbmQgbWF4aW11bSBkaXNwbGF5IHNpemUuCi0gICAq
LwotICBwcml2YXRlIHN0YXRpYyBQb2ludCBnZXREaXNwbGF5U2l6ZSgKLSAgICAgIGZsb2F0IG1p
blZpc2libGVGcmFjdGlvbiwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbywgaW50IG1heERpc3BsYXlX
aWR0aCwgaW50IG1heERpc3BsYXlIZWlnaHQpIHsKLSAgICAvLyBJZiB0aGVyZSBpcyBubyBjb25z
dHJhaW50IG9uIHRoZSBhbW91bnQgb2YgY3JvcHBpbmcsIGZpbGwgdGhlIGFsbG93ZWQgZGlzcGxh
eSBhcmVhLgotICAgIGlmIChtaW5WaXNpYmxlRnJhY3Rpb24gPT0gMCB8fCB2aWRlb0FzcGVjdFJh
dGlvID09IDApIHsKLSAgICAgIHJldHVybiBuZXcgUG9pbnQobWF4RGlzcGxheVdpZHRoLCBtYXhE
aXNwbGF5SGVpZ2h0KTsKLSAgICB9Ci0gICAgLy8gRWFjaCBkaW1lbnNpb24gaXMgY29uc3RyYWlu
ZWQgb24gbWF4IGRpc3BsYXkgc2l6ZSBhbmQgaG93IG11Y2ggd2UgYXJlIGFsbG93ZWQgdG8gY3Jv
cC4KLSAgICBmaW5hbCBpbnQgd2lkdGggPSBNYXRoLm1pbigKLSAgICAgICAgbWF4RGlzcGxheVdp
ZHRoLCBNYXRoLnJvdW5kKG1heERpc3BsYXlIZWlnaHQgLyBtaW5WaXNpYmxlRnJhY3Rpb24gKiB2
aWRlb0FzcGVjdFJhdGlvKSk7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IE1hdGgubWluKAotICAg
ICAgICBtYXhEaXNwbGF5SGVpZ2h0LCBNYXRoLnJvdW5kKG1heERpc3BsYXlXaWR0aCAvIG1pblZp
c2libGVGcmFjdGlvbiAvIHZpZGVvQXNwZWN0UmF0aW8pKTsKLSAgICByZXR1cm4gbmV3IFBvaW50
KHdpZHRoLCBoZWlnaHQpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFBhcmFt
ZXRlcnMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJz
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLQot
LyoqCi0gKiBUaGUgcGFyYW1ldGVycyBmb3IgYW4ge0Bjb2RlIFJ0cFNlbmRlcn0sIGFzIGRlZmlu
ZWQgaW4KLSAqIGh0dHA6Ly93M2MuZ2l0aHViLmlvL3dlYnJ0Yy1wYy8jcnRjcnRwc2VuZGVyLWlu
dGVyZmFjZS4KLSAqLwotcHVibGljIGNsYXNzIFJ0cFBhcmFtZXRlcnMgewotICBwdWJsaWMgc3Rh
dGljIGNsYXNzIEVuY29kaW5nIHsKLSAgICBwdWJsaWMgYm9vbGVhbiBhY3RpdmUgPSB0cnVlOwot
ICAgIC8vIEEgbnVsbCB2YWx1ZSBtZWFucyAibm8gbWF4aW11bSBiaXRyYXRlIi4KLSAgICBwdWJs
aWMgSW50ZWdlciBtYXhCaXRyYXRlQnBzOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBD
b2RlYyB7Ci0gICAgaW50IHBheWxvYWRUeXBlOwotICAgIFN0cmluZyBtaW1lVHlwZTsKLSAgICBp
bnQgY2xvY2tSYXRlOwotICAgIGludCBjaGFubmVscyA9IDE7Ci0gIH0KLQotICBwdWJsaWMgZmlu
YWwgTGlua2VkTGlzdDxFbmNvZGluZz4gZW5jb2RpbmdzOwotICBwdWJsaWMgZmluYWwgTGlua2Vk
TGlzdDxDb2RlYz4gY29kZWNzOwotCi0gIHB1YmxpYyBSdHBQYXJhbWV0ZXJzKCkgewotICAgIGVu
Y29kaW5ncyA9IG5ldyBMaW5rZWRMaXN0PEVuY29kaW5nPigpOwotICAgIGNvZGVjcyA9IG5ldyBM
aW5rZWRMaXN0PENvZGVjPigpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFJl
Y2VpdmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBSZWNlaXZlci5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1J0cFJlY2VpdmVyLmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHdyYXBwZXIgZm9yIGEgQysrIFJ0cFJlY2Vp
dmVySW50ZXJmYWNlLiAqLwotcHVibGljIGNsYXNzIFJ0cFJlY2VpdmVyIHsKLSAgZmluYWwgbG9u
ZyBuYXRpdmVSdHBSZWNlaXZlcjsKLQotICBwcml2YXRlIE1lZGlhU3RyZWFtVHJhY2sgY2FjaGVk
VHJhY2s7Ci0KLSAgcHVibGljIFJ0cFJlY2VpdmVyKGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpIHsK
LSAgICB0aGlzLm5hdGl2ZVJ0cFJlY2VpdmVyID0gbmF0aXZlUnRwUmVjZWl2ZXI7Ci0gICAgbG9u
ZyB0cmFjayA9IG5hdGl2ZUdldFRyYWNrKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAgICAvLyBXZSBj
YW4gYXNzdW1lIHRoYXQgYW4gUnRwUmVjZWl2ZXIgYWx3YXlzIGhhcyBhbiBhc3NvY2lhdGVkIHRy
YWNrLgotICAgIGNhY2hlZFRyYWNrID0gbmV3IE1lZGlhU3RyZWFtVHJhY2sodHJhY2spOwotICB9
Ci0KLSAgcHVibGljIE1lZGlhU3RyZWFtVHJhY2sgdHJhY2soKSB7Ci0gICAgcmV0dXJuIGNhY2hl
ZFRyYWNrOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gc2V0UGFyYW1ldGVycyhSdHBQYXJhbWV0
ZXJzIHBhcmFtZXRlcnMpIHsKLSAgICByZXR1cm4gbmF0aXZlU2V0UGFyYW1ldGVycyhuYXRpdmVS
dHBSZWNlaXZlciwgcGFyYW1ldGVycyk7Ci0gIH0KLQotICBwdWJsaWMgUnRwUGFyYW1ldGVycyBn
ZXRQYXJhbWV0ZXJzKCkgewotICAgIHJldHVybiBuYXRpdmVHZXRQYXJhbWV0ZXJzKG5hdGl2ZVJ0
cFJlY2VpdmVyKTsKLSAgfQotCi0gIHB1YmxpYyBTdHJpbmcgaWQoKSB7Ci0gICAgcmV0dXJuIG5h
dGl2ZUlkKG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2Uo
KSB7Ci0gICAgY2FjaGVkVHJhY2suZGlzcG9zZSgpOwotICAgIGZyZWUobmF0aXZlUnRwUmVjZWl2
ZXIpOwotICB9Ci0KLSAgLy8gVGhpcyBzaG91bGQgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291
bnQgb2YgdGhlIHRyYWNrLgotICAvLyBXaWxsIGJlIHJlbGVhc2VkIGluIGRpc3Bvc2UoKS4KLSAg
cHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlR2V0VHJhY2sobG9uZyBuYXRpdmVSdHBS
ZWNlaXZlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZlU2V0UGFy
YW1ldGVycygKLSAgICAgIGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIsIFJ0cFBhcmFtZXRlcnMgcGFy
YW1ldGVycyk7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFJ0cFBhcmFtZXRlcnMgbmF0aXZl
R2V0UGFyYW1ldGVycyhsb25nIG5hdGl2ZVJ0cFJlY2VpdmVyKTsKLQotICBwcml2YXRlIHN0YXRp
YyBuYXRpdmUgU3RyaW5nIG5hdGl2ZUlkKGxvbmcgbmF0aXZlUnRwUmVjZWl2ZXIpOwotCi0gIHBy
aXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWUobG9uZyBuYXRpdmVSdHBSZWNlaXZlcik7Ci19
OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9SdHBTZW5kZXIuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1J0cFNlbmRlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1J0cFNlbmRlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsODAgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi0vKiogSmF2YSB3
cmFwcGVyIGZvciBhIEMrKyBSdHBTZW5kZXJJbnRlcmZhY2UuICovCi1wdWJsaWMgY2xhc3MgUnRw
U2VuZGVyIHsKLSAgZmluYWwgbG9uZyBuYXRpdmVSdHBTZW5kZXI7Ci0KLSAgcHJpdmF0ZSBNZWRp
YVN0cmVhbVRyYWNrIGNhY2hlZFRyYWNrOwotICBwcml2YXRlIGJvb2xlYW4gb3duc1RyYWNrID0g
dHJ1ZTsKLQotICBwdWJsaWMgUnRwU2VuZGVyKGxvbmcgbmF0aXZlUnRwU2VuZGVyKSB7Ci0gICAg
dGhpcy5uYXRpdmVSdHBTZW5kZXIgPSBuYXRpdmVSdHBTZW5kZXI7Ci0gICAgbG9uZyB0cmFjayA9
IG5hdGl2ZUdldFRyYWNrKG5hdGl2ZVJ0cFNlbmRlcik7Ci0gICAgLy8gSXQgbWF5IGJlIHBvc3Np
YmxlIGZvciBhbiBSdHBTZW5kZXIgdG8gYmUgY3JlYXRlZCB3aXRob3V0IGEgdHJhY2suCi0gICAg
Y2FjaGVkVHJhY2sgPSAodHJhY2sgPT0gMCkgPyBudWxsIDogbmV3IE1lZGlhU3RyZWFtVHJhY2so
dHJhY2spOwotICB9Ci0KLSAgLy8gSWYgfHRha2VPd25lcnNoaXB8IGlzIHRydWUsIHRoZSBSdHBT
ZW5kZXIgdGFrZXMgb3duZXJzaGlwIG9mIHRoZSB0cmFjawotICAvLyBmcm9tIHRoZSBjYWxsZXIs
IGFuZCB3aWxsIGF1dG8tZGlzcG9zZSBvZiBpdCB3aGVuIG5vIGxvbmdlciBuZWVkZWQuCi0gIC8v
IHx0YWtlT3duZXJzaGlwfCBzaG91bGQgb25seSBiZSB1c2VkIGlmIHRoZSBjYWxsZXIgb3ducyB0
aGUgdHJhY2s7IGl0IGlzCi0gIC8vIG5vdCBhcHByb3ByaWF0ZSB3aGVuIHRoZSB0cmFjayBpcyBv
d25lZCBieSwgZm9yIGV4YW1wbGUsIGFub3RoZXIgUnRwU2VuZGVyCi0gIC8vIG9yIGEgTWVkaWFT
dHJlYW0uCi0gIHB1YmxpYyBib29sZWFuIHNldFRyYWNrKE1lZGlhU3RyZWFtVHJhY2sgdHJhY2ss
IGJvb2xlYW4gdGFrZU93bmVyc2hpcCkgewotICAgIGlmICghbmF0aXZlU2V0VHJhY2sobmF0aXZl
UnRwU2VuZGVyLCAodHJhY2sgPT0gbnVsbCkgPyAwIDogdHJhY2submF0aXZlVHJhY2spKSB7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChjYWNoZWRUcmFjayAhPSBudWxsICYm
IG93bnNUcmFjaykgewotICAgICAgY2FjaGVkVHJhY2suZGlzcG9zZSgpOwotICAgIH0KLSAgICBj
YWNoZWRUcmFjayA9IHRyYWNrOwotICAgIG93bnNUcmFjayA9IHRha2VPd25lcnNoaXA7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgTWVkaWFTdHJlYW1UcmFjayB0cmFjaygpIHsK
LSAgICByZXR1cm4gY2FjaGVkVHJhY2s7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBzZXRQYXJh
bWV0ZXJzKFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycykgewotICAgIHJldHVybiBuYXRpdmVTZXRQ
YXJhbWV0ZXJzKG5hdGl2ZVJ0cFNlbmRlciwgcGFyYW1ldGVycyk7Ci0gIH0KLQotICBwdWJsaWMg
UnRwUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgewotICAgIHJldHVybiBuYXRpdmVHZXRQYXJh
bWV0ZXJzKG5hdGl2ZVJ0cFNlbmRlcik7Ci0gIH0KLQotICBwdWJsaWMgU3RyaW5nIGlkKCkgewot
ICAgIHJldHVybiBuYXRpdmVJZChuYXRpdmVSdHBTZW5kZXIpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgZGlzcG9zZSgpIHsKLSAgICBpZiAoY2FjaGVkVHJhY2sgIT0gbnVsbCAmJiBvd25zVHJhY2sp
IHsKLSAgICAgIGNhY2hlZFRyYWNrLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgZnJlZShuYXRpdmVS
dHBTZW5kZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIGJvb2xlYW4gbmF0aXZl
U2V0VHJhY2sobG9uZyBuYXRpdmVSdHBTZW5kZXIsIGxvbmcgbmF0aXZlVHJhY2spOwotCi0gIC8v
IFRoaXMgc2hvdWxkIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSB0cmFjay4K
LSAgLy8gV2lsbCBiZSByZWxlYXNlZCBpbiBkaXNwb3NlKCkgb3Igc2V0VHJhY2soKS4KLSAgcHJp
dmF0ZSBzdGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlR2V0VHJhY2sobG9uZyBuYXRpdmVSdHBTZW5k
ZXIpOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSBib29sZWFuIG5hdGl2ZVNldFBhcmFtZXRl
cnMobG9uZyBuYXRpdmVSdHBTZW5kZXIsIFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycyk7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFJ0cFBhcmFtZXRlcnMgbmF0aXZlR2V0UGFyYW1ldGVycyhs
b25nIG5hdGl2ZVJ0cFNlbmRlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIFN0cmluZyBu
YXRpdmVJZChsb25nIG5hdGl2ZVJ0cFNlbmRlcik7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZl
IHZvaWQgZnJlZShsb25nIG5hdGl2ZVJ0cFNlbmRlcik7Ci19OwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy9TY3JlZW5DYXB0dXJlckFuZHJvaWQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL1NjcmVlbkNhcHR1cmVyQW5kcm9pZC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1NjcmVlbkNhcHR1cmVyQW5kcm9pZC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9p
ZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmRpc3BsYXku
RGlzcGxheU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5kaXNwbGF5LlZpcnR1YWxE
aXNwbGF5OwotaW1wb3J0IGFuZHJvaWQubWVkaWEucHJvamVjdGlvbi5NZWRpYVByb2plY3Rpb247
Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0aW9uLk1lZGlhUHJvamVjdGlvbk1hbmFnZXI7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlN1cmZhY2U7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlM
aXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9u
IG9mIFZpZGVvQ2FwdHVyZXIgdG8gY2FwdHVyZSB0aGUgc2NyZWVuIGNvbnRlbnQgYXMgYSB2aWRl
byBzdHJlYW0uCi0gKiBDYXB0dXJpbmcgaXMgZG9uZSBieSB7QGNvZGUgTWVkaWFQcm9qZWN0aW9u
fSBvbiBhIHtAY29kZSBTdXJmYWNlVGV4dHVyZX0uIFdlIGludGVyYWN0IHdpdGggdGhpcwotICog
e0Bjb2RlIFN1cmZhY2VUZXh0dXJlfSB1c2luZyBhIHtAY29kZSBTdXJmYWNlVGV4dHVyZUhlbHBl
cn0uCi0gKiBUaGUge0Bjb2RlIFN1cmZhY2VUZXh0dXJlSGVscGVyfSBpcyBjcmVhdGVkIGJ5IHRo
ZSBuYXRpdmUgY29kZSBhbmQgcGFzc2VkIHRvIHRoaXMgY2FwdHVyZXIgaW4KLSAqIHtAY29kZSBW
aWRlb0NhcHR1cmVyLmluaXRpYWxpemUoKX0uIE9uIHJlY2VpdmluZyBhIG5ldyBmcmFtZSwgdGhp
cyBjYXB0dXJlciBwYXNzZXMgaXQKLSAqIGFzIGEgdGV4dHVyZSB0byB0aGUgbmF0aXZlIGNvZGUg
dmlhIHtAY29kZSBDYXB0dXJlck9ic2VydmVyLm9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQoKX0uIFRo
aXMgdGFrZXMKLSAqIHBsYWNlIG9uIHRoZSBIYW5kbGVyVGhyZWFkIG9mIHRoZSBnaXZlbiB7QGNv
ZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9LiBXaGVuIGRvbmUgd2l0aCBlYWNoIGZyYW1lLAotICog
dGhlIG5hdGl2ZSBjb2RlIHJldHVybnMgdGhlIGJ1ZmZlciB0byB0aGUgIHtAY29kZSBTdXJmYWNl
VGV4dHVyZUhlbHBlcn0gdG8gYmUgdXNlZCBmb3IgbmV3Ci0gKiBmcmFtZXMuIEF0IGFueSB0aW1l
LCBhdCBtb3N0IG9uZSBmcmFtZSBpcyBiZWluZyBwcm9jZXNzZWQuCi0gKi8KLUBUYXJnZXRBcGko
MjEpCi1wdWJsaWMgY2xhc3MgU2NyZWVuQ2FwdHVyZXJBbmRyb2lkCi0gICAgaW1wbGVtZW50cyBW
aWRlb0NhcHR1cmVyLCBTdXJmYWNlVGV4dHVyZUhlbHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJs
ZUxpc3RlbmVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERJU1BMQVlfRkxBR1MgPQot
ICAgICAgRGlzcGxheU1hbmFnZXIuVklSVFVBTF9ESVNQTEFZX0ZMQUdfUFVCTElDIHwgRGlzcGxh
eU1hbmFnZXIuVklSVFVBTF9ESVNQTEFZX0ZMQUdfUFJFU0VOVEFUSU9OOwotICAvLyBEUEkgZm9y
IFZpcnR1YWxEaXNwbGF5LCBkb2VzIG5vdCBzZWVtIHRvIG1hdHRlciBmb3IgdXMuCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBWSVJUVUFMX0RJU1BMQVlfRFBJID0gNDAwOwotCi0gIHByaXZh
dGUgZmluYWwgSW50ZW50IG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhOwotICBw
cml2YXRlIGZpbmFsIE1lZGlhUHJvamVjdGlvbi5DYWxsYmFjayBtZWRpYVByb2plY3Rpb25DYWxs
YmFjazsKLQotICBwcml2YXRlIGludCB3aWR0aDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0OwotICBw
cml2YXRlIFZpcnR1YWxEaXNwbGF5IHZpcnR1YWxEaXNwbGF5OwotICBwcml2YXRlIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICBwcml2YXRlIENhcHR1cmVyT2Jz
ZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlcjsKLSAgcHJpdmF0ZSBsb25nIG51bUNhcHR1cmVkRnJhbWVz
ID0gMDsKLSAgcHJpdmF0ZSBNZWRpYVByb2plY3Rpb24gbWVkaWFQcm9qZWN0aW9uOwotICBwcml2
YXRlIGJvb2xlYW4gaXNEaXNwb3NlZCA9IGZhbHNlOwotICBwcml2YXRlIE1lZGlhUHJvamVjdGlv
bk1hbmFnZXIgbWVkaWFQcm9qZWN0aW9uTWFuYWdlcjsKLQotICAvKioKLSAgICogQ29uc3RydWN0
cyBhIG5ldyBTY3JlZW4gQ2FwdHVyZXIuCi0gICAqCi0gICAqIEBwYXJhbSBtZWRpYVByb2plY3Rp
b25QZXJtaXNzaW9uUmVzdWx0RGF0YSB0aGUgcmVzdWx0IGRhdGEgb2YgTWVkaWFQcm9qZWN0aW9u
IHBlcm1pc3Npb24KLSAgICogICAgIGFjdGl2aXR5OyB0aGUgY2FsbGluZyBhcHAgbXVzdCB2YWxp
ZGF0ZSB0aGF0IHJlc3VsdCBjb2RlIGlzIEFjdGl2aXR5LlJFU1VMVF9PSyBiZWZvcmUKLSAgICog
ICAgIGNhbGxpbmcgdGhpcyBtZXRob2QuCi0gICAqIEBwYXJhbSBtZWRpYVByb2plY3Rpb25DYWxs
YmFjayBNZWRpYVByb2plY3Rpb24gY2FsbGJhY2sgdG8gaW1wbGVtZW50IGFwcGxpY2F0aW9uIHNw
ZWNpZmljCi0gICAqICAgICBsb2dpYyBpbiBldmVudHMgc3VjaCBhcyB3aGVuIHRoZSB1c2VyIHJl
dm9rZXMgYSBwcmV2aW91c2x5IGdyYW50ZWQgY2FwdHVyZSBwZXJtaXNzaW9uLgotICAqKi8KLSAg
cHVibGljIFNjcmVlbkNhcHR1cmVyQW5kcm9pZChJbnRlbnQgbWVkaWFQcm9qZWN0aW9uUGVybWlz
c2lvblJlc3VsdERhdGEsCi0gICAgICBNZWRpYVByb2plY3Rpb24uQ2FsbGJhY2sgbWVkaWFQcm9q
ZWN0aW9uQ2FsbGJhY2spIHsKLSAgICB0aGlzLm1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1
bHREYXRhID0gbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGE7Ci0gICAgdGhpcy5t
ZWRpYVByb2plY3Rpb25DYWxsYmFjayA9IG1lZGlhUHJvamVjdGlvbkNhbGxiYWNrOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGNoZWNrTm90RGlzcG9zZWQoKSB7Ci0gICAgaWYgKGlzRGlzcG9zZWQp
IHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJjYXB0dXJlciBpcyBkaXNwb3Nl
ZC4iKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2
b2lkIGluaXRpYWxpemUoZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVI
ZWxwZXIsCi0gICAgICBmaW5hbCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwgZmluYWwgVmlk
ZW9DYXB0dXJlci5DYXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIpIHsKLSAgICBjaGVj
a05vdERpc3Bvc2VkKCk7Ci0KLSAgICBpZiAoY2FwdHVyZXJPYnNlcnZlciA9PSBudWxsKSB7Ci0g
ICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiY2FwdHVyZXJPYnNlcnZlciBub3Qgc2V0
LiIpOwotICAgIH0KLSAgICB0aGlzLmNhcHR1cmVyT2JzZXJ2ZXIgPSBjYXB0dXJlck9ic2VydmVy
OwotCi0gICAgaWYgKHN1cmZhY2VUZXh0dXJlSGVscGVyID09IG51bGwpIHsKLSAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJzdXJmYWNlVGV4dHVyZUhlbHBlciBub3Qgc2V0LiIpOwot
ICAgIH0KLSAgICB0aGlzLnN1cmZhY2VUZXh0dXJlSGVscGVyID0gc3VyZmFjZVRleHR1cmVIZWxw
ZXI7Ci0KLSAgICBtZWRpYVByb2plY3Rpb25NYW5hZ2VyID0gKE1lZGlhUHJvamVjdGlvbk1hbmFn
ZXIpIGFwcGxpY2F0aW9uQ29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICBDb250ZXh0
Lk1FRElBX1BST0pFQ1RJT05fU0VSVklDRSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHN5bmNocm9uaXplZCB2b2lkIHN0YXJ0Q2FwdHVyZSgKLSAgICAgIGZpbmFsIGludCB3aWR0aCwg
ZmluYWwgaW50IGhlaWdodCwgZmluYWwgaW50IGlnbm9yZWRGcmFtZXJhdGUpIHsKLSAgICBjaGVj
a05vdERpc3Bvc2VkKCk7Ci0KLSAgICB0aGlzLndpZHRoID0gd2lkdGg7Ci0gICAgdGhpcy5oZWln
aHQgPSBoZWlnaHQ7Ci0KLSAgICBtZWRpYVByb2plY3Rpb24gPSBtZWRpYVByb2plY3Rpb25NYW5h
Z2VyLmdldE1lZGlhUHJvamVjdGlvbigKLSAgICAgICAgQWN0aXZpdHkuUkVTVUxUX09LLCBtZWRp
YVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YSk7Ci0KLSAgICAvLyBMZXQgTWVkaWFQcm9q
ZWN0aW9uIGNhbGxiYWNrIHVzZSB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgdGhyZWFkLgotICAg
IG1lZGlhUHJvamVjdGlvbi5yZWdpc3RlckNhbGxiYWNrKG1lZGlhUHJvamVjdGlvbkNhbGxiYWNr
LCBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkpOwotCi0gICAgY3JlYXRlVmlydHVh
bERpc3BsYXkoKTsKLSAgICBjYXB0dXJlck9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKHRydWUp
OwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKFNjcmVlbkNhcHR1cmVy
QW5kcm9pZC50aGlzKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgc3luY2hyb25pemVk
IHZvaWQgc3RvcENhcHR1cmUoKSB7Ci0gICAgY2hlY2tOb3REaXNwb3NlZCgpOwotICAgIFRocmVh
ZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVycnVwdGlibHkoc3VyZmFjZVRleHR1cmVIZWxwZXIu
Z2V0SGFuZGxlcigpLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3Rl
bmluZygpOwotICAgICAgICBjYXB0dXJlck9ic2VydmVyLm9uQ2FwdHVyZXJTdG9wcGVkKCk7Ci0K
LSAgICAgICAgaWYgKHZpcnR1YWxEaXNwbGF5ICE9IG51bGwpIHsKLSAgICAgICAgICB2aXJ0dWFs
RGlzcGxheS5yZWxlYXNlKCk7Ci0gICAgICAgICAgdmlydHVhbERpc3BsYXkgPSBudWxsOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKG1lZGlhUHJvamVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICAg
ICAgLy8gVW5yZWdpc3RlciB0aGUgY2FsbGJhY2sgYmVmb3JlIHN0b3BwaW5nLCBvdGhlcndpc2Ug
dGhlIGNhbGxiYWNrIHJlY3Vyc2l2ZWx5Ci0gICAgICAgICAgLy8gY2FsbHMgdGhpcyBtZXRob2Qu
Ci0gICAgICAgICAgbWVkaWFQcm9qZWN0aW9uLnVucmVnaXN0ZXJDYWxsYmFjayhtZWRpYVByb2pl
Y3Rpb25DYWxsYmFjayk7Ci0gICAgICAgICAgbWVkaWFQcm9qZWN0aW9uLnN0b3AoKTsKLSAgICAg
ICAgICBtZWRpYVByb2plY3Rpb24gPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGRpc3Bvc2Uo
KSB7Ci0gICAgaXNEaXNwb3NlZCA9IHRydWU7Ci0gIH0KLQotICAvKioKLSAgICogQ2hhbmdlcyBv
dXRwdXQgdmlkZW8gZm9ybWF0LiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBzY2FsZSB0aGUg
b3V0cHV0Ci0gICAqIHZpZGVvLCBvciB0byBjaGFuZ2Ugb3JpZW50YXRpb24gd2hlbiB0aGUgY2Fw
dHVyZWQgc2NyZWVuIGlzIHJvdGF0ZWQgZm9yIGV4YW1wbGUuCi0gICAqCi0gICAqIEBwYXJhbSB3
aWR0aCBuZXcgb3V0cHV0IHZpZGVvIHdpZHRoCi0gICAqIEBwYXJhbSBoZWlnaHQgbmV3IG91dHB1
dCB2aWRlbyBoZWlnaHQKLSAgICogQHBhcmFtIGlnbm9yZWRGcmFtZXJhdGUgaWdub3JlZAotICAg
Ki8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBjaGFuZ2VDYXB0dXJl
Rm9ybWF0KAotICAgICAgZmluYWwgaW50IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBp
bnQgaWdub3JlZEZyYW1lcmF0ZSkgewotICAgIGNoZWNrTm90RGlzcG9zZWQoKTsKLQotICAgIHRo
aXMud2lkdGggPSB3aWR0aDsKLSAgICB0aGlzLmhlaWdodCA9IGhlaWdodDsKLQotICAgIGlmICh2
aXJ0dWFsRGlzcGxheSA9PSBudWxsKSB7Ci0gICAgICAvLyBDYXB0dXJlciBpcyBzdG9wcGVkLCB0
aGUgdmlydHVhbCBkaXNwbGF5IHdpbGwgYmUgY3JlYXRlZCBpbiBzdGFydENhcHR1ZXIoKS4KLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSBuZXcgdmlydHVhbCBkaXNwbGF5
IG9uIHRoZSBzdXJmYWNlVGV4dHVyZUhlbHBlciB0aHJlYWQgdG8gYXZvaWQgaW50ZXJmZXJlbmNl
Ci0gICAgLy8gd2l0aCBmcmFtZSBwcm9jZXNzaW5nLCB3aGljaCBoYXBwZW5zIG9uIHRoZSBzYW1l
IHRocmVhZCAod2Ugc2VyaWFsaXplIGV2ZW50cyBieSBydW5uaW5nCi0gICAgLy8gdGhlbSBvbiB0
aGUgc2FtZSB0aHJlYWQpLgotICAgIFRocmVhZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVycnVw
dGlibHkoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLCBuZXcgUnVubmFibGUoKSB7
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdmly
dHVhbERpc3BsYXkucmVsZWFzZSgpOwotICAgICAgICBjcmVhdGVWaXJ0dWFsRGlzcGxheSgpOwot
ICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVZpcnR1YWxEaXNw
bGF5KCkgewotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkuc2V0
RGVmYXVsdEJ1ZmZlclNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgdmlydHVhbERpc3BsYXkgPSBt
ZWRpYVByb2plY3Rpb24uY3JlYXRlVmlydHVhbERpc3BsYXkoIldlYlJUQ19TY3JlZW5DYXB0dXJl
Iiwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgVklSVFVBTF9ESVNQTEFZX0RQSSwgRElTUExBWV9G
TEFHUywgbmV3IFN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUo
KSksCi0gICAgICAgIG51bGwgLyogY2FsbGJhY2sgKi8sIG51bGwgLyogY2FsbGJhY2sgaGFuZGxl
ciAqLyk7Ci0gIH0KLQotICAvLyBUaGlzIGlzIGNhbGxlZCBvbiB0aGUgaW50ZXJuYWwgbG9vcGVy
IHRocmVhZCBvZiB7QENvZGUgU3VyZmFjZVRleHR1cmVIZWxwZXJ9LgotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoaW50IG9lc1RleHR1cmVJZCwgZmxv
YXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICBudW1DYXB0dXJl
ZEZyYW1lcysrOwotICAgIGNhcHR1cmVyT2JzZXJ2ZXIub25UZXh0dXJlRnJhbWVDYXB0dXJlZCgK
LSAgICAgICAgd2lkdGgsIGhlaWdodCwgb2VzVGV4dHVyZUlkLCB0cmFuc2Zvcm1NYXRyaXgsIDAg
Lyogcm90YXRpb24gKi8sIHRpbWVzdGFtcE5zKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKSB7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBw
dWJsaWMgbG9uZyBnZXROdW1DYXB0dXJlZEZyYW1lcygpIHsKLSAgICByZXR1cm4gbnVtQ2FwdHVy
ZWRGcmFtZXM7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1NkcE9ic2VydmVyLmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU2RwT2JzZXJ2ZXIuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotLyoqIEludGVyZmFjZSBmb3Igb2JzZXJ2aW5nIFNEUC1yZWxhdGVkIGV2ZW50
cy4gKi8KLXB1YmxpYyBpbnRlcmZhY2UgU2RwT2JzZXJ2ZXIgewotICAvKiogQ2FsbGVkIG9uIHN1
Y2Nlc3Mgb2YgQ3JlYXRle09mZmVyLEFuc3dlcn0oKS4gKi8KLSAgcHVibGljIHZvaWQgb25DcmVh
dGVTdWNjZXNzKFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gIC8qKiBDYWxsZWQgb24gc3Vj
Y2VzcyBvZiBTZXR7TG9jYWwsUmVtb3RlfURlc2NyaXB0aW9uKCkuICovCi0gIHB1YmxpYyB2b2lk
IG9uU2V0U3VjY2VzcygpOwotCi0gIC8qKiBDYWxsZWQgb24gZXJyb3Igb2YgQ3JlYXRle09mZmVy
LEFuc3dlcn0oKS4gKi8KLSAgcHVibGljIHZvaWQgb25DcmVhdGVGYWlsdXJlKFN0cmluZyBlcnJv
cik7Ci0KLSAgLyoqIENhbGxlZCBvbiBlcnJvciBvZiBTZXR7TG9jYWwsUmVtb3RlfURlc2NyaXB0
aW9uKCkuICovCi0gIHB1YmxpYyB2b2lkIG9uU2V0RmFpbHVyZShTdHJpbmcgZXJyb3IpOwotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24uamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbi5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Nlc3Npb25EZXNjcmlwdGlvbi5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi0vKioKLSAqIERlc2NyaXB0aW9uIG9mIGFuIFJGQyA0NTY2IFNlc3Npb24u
Ci0gKiBTRFBzIGFyZSBwYXNzZWQgYXMgc2VyaWFsaXplZCBTdHJpbmdzIGluIEphdmEtbGFuZCBh
bmQgYXJlIG1hdGVyaWFsaXplZAotICogdG8gU2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlIGFz
IGFwcHJvcHJpYXRlIGluIHRoZSBKTkkgbGF5ZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXNzaW9u
RGVzY3JpcHRpb24gewotICAvKiogSmF2YS1sYW5kIGVudW0gdmVyc2lvbiBvZiBTZXNzaW9uRGVz
Y3JpcHRpb25JbnRlcmZhY2UncyB0eXBlKCkgc3RyaW5nLiAqLwotICBwdWJsaWMgc3RhdGljIGVu
dW0gVHlwZSB7Ci0gICAgT0ZGRVIsCi0gICAgUFJBTlNXRVIsCi0gICAgQU5TV0VSOwotCi0gICAg
cHVibGljIFN0cmluZyBjYW5vbmljYWxGb3JtKCkgewotICAgICAgcmV0dXJuIG5hbWUoKS50b0xv
d2VyQ2FzZSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgVHlwZSBmcm9tQ2Fub25pY2Fs
Rm9ybShTdHJpbmcgY2Fub25pY2FsKSB7Ci0gICAgICByZXR1cm4gVHlwZS52YWx1ZU9mKFR5cGUu
Y2xhc3MsIGNhbm9uaWNhbC50b1VwcGVyQ2FzZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMg
ZmluYWwgVHlwZSB0eXBlOwotICBwdWJsaWMgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uOwotCi0g
IHB1YmxpYyBTZXNzaW9uRGVzY3JpcHRpb24oVHlwZSB0eXBlLCBTdHJpbmcgZGVzY3JpcHRpb24p
IHsKLSAgICB0aGlzLnR5cGUgPSB0eXBlOwotICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlw
dGlvbjsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c09ic2VydmVyLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdGF0c09ic2VydmVyLmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3RhdHNPYnNlcnZlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMTcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcud2VicnRjOwotCi0vKiogSW50ZXJmYWNlIGZvciBvYnNlcnZpbmcgU3RhdHMgcmVwb3J0cyAo
c2VlIHdlYnJ0Yzo6U3RhdHNPYnNlcnZlcnMpLiAqLwotcHVibGljIGludGVyZmFjZSBTdGF0c09i
c2VydmVyIHsKLSAgLyoqIENhbGxlZCB3aGVuIHRoZSByZXBvcnRzIGFyZSByZWFkeS4qLwotICBw
dWJsaWMgdm9pZCBvbkNvbXBsZXRlKFN0YXRzUmVwb3J0W10gcmVwb3J0cyk7Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1N0YXRzUmVwb3J0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy9TdGF0c1JlcG9ydC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL1N0YXRzUmVwb3J0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLS8qKiBKYXZhIHZlcnNp
b24gb2Ygd2VicnRjOjpTdGF0c1JlcG9ydC4gKi8KLXB1YmxpYyBjbGFzcyBTdGF0c1JlcG9ydCB7
Ci0gIC8qKiBKYXZhIHZlcnNpb24gb2Ygd2VicnRjOjpTdGF0c1JlcG9ydDo6VmFsdWUuICovCi0g
IHB1YmxpYyBzdGF0aWMgY2xhc3MgVmFsdWUgewotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgbmFt
ZTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHZhbHVlOwotCi0gICAgcHVibGljIFZhbHVlKFN0
cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAg
ICB0aGlzLnZhbHVlID0gdmFsdWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmlu
ZygpIHsKLSAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7
Ci0gICAgICBidWlsZGVyLmFwcGVuZCgiWyIpLmFwcGVuZChuYW1lKS5hcHBlbmQoIjogIikuYXBw
ZW5kKHZhbHVlKS5hcHBlbmQoIl0iKTsKLSAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7
Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIGZpbmFsIFN0cmluZyBpZDsKLSAgcHVibGljIGZpbmFs
IFN0cmluZyB0eXBlOwotICAvLyBUaW1lIHNpbmNlIDE5NzAtMDEtMDFUMDA6MDA6MDBaIGluIG1p
bGxpc2Vjb25kcy4KLSAgcHVibGljIGZpbmFsIGRvdWJsZSB0aW1lc3RhbXA7Ci0gIHB1YmxpYyBm
aW5hbCBWYWx1ZVtdIHZhbHVlczsKLQotICBwdWJsaWMgU3RhdHNSZXBvcnQoU3RyaW5nIGlkLCBT
dHJpbmcgdHlwZSwgZG91YmxlIHRpbWVzdGFtcCwgVmFsdWVbXSB2YWx1ZXMpIHsKLSAgICB0aGlz
LmlkID0gaWQ7Ci0gICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICB0aGlzLnRpbWVzdGFtcCA9IHRp
bWVzdGFtcDsKLSAgICB0aGlzLnZhbHVlcyA9IHZhbHVlczsKLSAgfQotCi0gIHB1YmxpYyBTdHJp
bmcgdG9TdHJpbmcoKSB7Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1
aWxkZXIoKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiaWQ6ICIpCi0gICAgICAgIC5hcHBlbmQoaWQp
Ci0gICAgICAgIC5hcHBlbmQoIiwgdHlwZTogIikKLSAgICAgICAgLmFwcGVuZCh0eXBlKQotICAg
ICAgICAuYXBwZW5kKCIsIHRpbWVzdGFtcDogIikKLSAgICAgICAgLmFwcGVuZCh0aW1lc3RhbXAp
Ci0gICAgICAgIC5hcHBlbmQoIiwgdmFsdWVzOiAiKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHZhbHVlcy5sZW5ndGg7ICsraSkgewotICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWVzW2ldLnRv
U3RyaW5nKCkpLmFwcGVuZCgiLCAiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJp
bmcoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBl
ci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxw
ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4
dHVyZUhlbHBlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhp
Y3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzExRXh0OwotaW1w
b3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1w
b3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7
Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVC
dWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uRmxvYXRCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuQ2FsbGFibGU7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7
Ci0KLS8qKgotICogSGVscGVyIGNsYXNzIHRvIGNyZWF0ZSBhbmQgc3luY2hyb25pemUgYWNjZXNz
IHRvIGEgU3VyZmFjZVRleHR1cmUuIFRoZSBjYWxsZXIgd2lsbCBnZXQgbm90aWZpZWQKLSAqIG9m
IG5ldyBmcmFtZXMgaW4gb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSwgYW5kIHNob3VsZCBjYWxs
IHJldHVyblRleHR1cmVGcmFtZSgpIHdoZW4gZG9uZSB3aXRoCi0gKiB0aGUgZnJhbWUuIE9ubHkg
b25lIHRleHR1cmUgZnJhbWUgY2FuIGJlIGluIGZsaWdodCBhdCBvbmNlLCBzbyByZXR1cm5UZXh0
dXJlRnJhbWUoKSBtdXN0IGJlCi0gKiBjYWxsZWQgaW4gb3JkZXIgdG8gcmVjZWl2ZSBhIG5ldyBm
cmFtZS4gQ2FsbCBzdG9wTGlzdGVuaW5nKCkgdG8gc3RvcCByZWNlaXZlaW5nIG5ldyBmcmFtZXMu
IENhbGwKLSAqIGRpc3Bvc2UgdG8gcmVsZWFzZSBhbGwgcmVzb3VyY2VzIG9uY2UgdGhlIHRleHR1
cmUgZnJhbWUgaXMgcmV0dXJuZWQuCi0gKiBOb3RlIHRoYXQgdGhlcmUgaXMgYSBDKysgY291bnRl
ciBwYXJ0IG9mIHRoaXMgY2xhc3MgdGhhdCBvcHRpb25hbGx5IGNhbiBiZSB1c2VkLiBJdCBpcyB1
c2VkIGZvcgotICogd3JhcHBpbmcgdGV4dHVyZSBmcmFtZXMgaW50byB3ZWJydGM6OlZpZGVvRnJh
bWVzIGFuZCBhbHNvIGhhbmRsZXMgY2FsbGluZyByZXR1cm5UZXh0dXJlRnJhbWUoKQotICogd2hl
biB0aGUgd2VicnRjOjpWaWRlb0ZyYW1lIGlzIG5vIGxvbmdlciB1c2VkLgotICovCi1jbGFzcyBT
dXJmYWNlVGV4dHVyZUhlbHBlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiU3VyZmFjZVRleHR1cmVIZWxwZXIiOwotICAvKioKLSAgICogQ2FsbGJhY2sgaW50ZXJmYWNl
IGZvciBiZWluZyBub3RpZmllZCB0aGF0IGEgbmV3IHRleHR1cmUgZnJhbWUgaXMgYXZhaWxhYmxl
LiBUaGUgY2FsbHMgd2lsbCBiZQotICAgKiBtYWRlIG9uIGEgZGVkaWNhdGVkIHRocmVhZCB3aXRo
IGEgYm91bmQgRUdMQ29udGV4dC4gVGhlIHRocmVhZCB3aWxsIGJlIHRoZSBzYW1lIHRocm91Z2hv
dXQgdGhlCi0gICAqIGxpZmV0aW1lIG9mIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBpbnN0YW5j
ZSwgYnV0IGRpZmZlcmVudCBmcm9tIHRoZSB0aHJlYWQgY2FsbGluZyB0aGUKLSAgICogU3VyZmFj
ZVRleHR1cmVIZWxwZXIgY29uc3RydWN0b3IuIFRoZSBjYWxsZWUgaXMgbm90IGFsbG93ZWQgdG8g
bWFrZSBhbm90aGVyIEVHTENvbnRleHQgY3VycmVudAotICAgKiBvbiB0aGUgY2FsbGluZyB0aHJl
YWQuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIE9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlz
dGVuZXIgewotICAgIGFic3RyYWN0IHZvaWQgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoCi0gICAg
ICAgIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVz
dGFtcE5zKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25zdHJ1Y3QgYSBuZXcgU3VyZmFjZVRleHR1
cmVIZWxwZXIgc2hhcmluZyBPcGVuR0wgcmVzb3VyY2VzIHdpdGggfHNoYXJlZENvbnRleHR8LiBB
IGRlZGljYXRlZAotICAgKiB0aHJlYWQgYW5kIGhhbmRsZXIgaXMgY3JlYXRlZCBmb3IgaGFuZGxp
bmcgdGhlIFN1cmZhY2VUZXh0dXJlLiBNYXkgcmV0dXJuIG51bGwgaWYgRUdMIGZhaWxzIHRvCi0g
ICAqIGluaXRpYWxpemUgYSBwaXhlbCBidWZmZXIgc3VyZmFjZSBhbmQgbWFrZSBpdCBjdXJyZW50
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdXJmYWNlVGV4dHVyZUhlbHBlciBjcmVhdGUoCi0g
ICAgICBmaW5hbCBTdHJpbmcgdGhyZWFkTmFtZSwgZmluYWwgRWdsQmFzZS5Db250ZXh0IHNoYXJl
ZENvbnRleHQpIHsKLSAgICBmaW5hbCBIYW5kbGVyVGhyZWFkIHRocmVhZCA9IG5ldyBIYW5kbGVy
VGhyZWFkKHRocmVhZE5hbWUpOwotICAgIHRocmVhZC5zdGFydCgpOwotICAgIGZpbmFsIEhhbmRs
ZXIgaGFuZGxlciA9IG5ldyBIYW5kbGVyKHRocmVhZC5nZXRMb29wZXIoKSk7Ci0KLSAgICAvLyBU
aGUgb25GcmFtZUF2YWlsYWJsZSgpIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgb24gdGhlIFN1
cmZhY2VUZXh0dXJlIGN0b3IgdGhyZWFkLiBTZWU6Ci0gICAgLy8gaHR0cDovL2dyZXBjb2RlLmNv
bS9maWxlL3JlcG9zaXRvcnkuZ3JlcGNvZGUuY29tL2phdmEvZXh0L2NvbS5nb29nbGUuYW5kcm9p
ZC9hbmRyb2lkLzUuMS4xX3IxL2FuZHJvaWQvZ3JhcGhpY3MvU3VyZmFjZVRleHR1cmUuamF2YSMx
OTUuCi0gICAgLy8gVGhlcmVmb3JlLCBpbiBvcmRlciB0byBjb250cm9sIHRoZSBjYWxsYmFjayB0
aHJlYWQgb24gQVBJIGx2bCA8IDIxLCB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIKLSAgICAvLyBp
cyBjb25zdHJ1Y3RlZCBvbiB0aGUgfGhhbmRsZXJ8IHRocmVhZC4KLSAgICByZXR1cm4gVGhyZWFk
VXRpbHMuaW52b2tlQXRGcm9udFVuaW50ZXJydXB0aWJseShoYW5kbGVyLCBuZXcgQ2FsbGFibGU8
U3VyZmFjZVRleHR1cmVIZWxwZXI+KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
U3VyZmFjZVRleHR1cmVIZWxwZXIgY2FsbCgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBy
ZXR1cm4gbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyKHNoYXJlZENvbnRleHQsIGhhbmRsZXIpOwot
ICAgICAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBMb2dnaW5n
LmUoVEFHLCB0aHJlYWROYW1lICsgIiBjcmVhdGUgZmFpbHVyZSIsIGUpOwotICAgICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRl
IGZpbmFsIEhhbmRsZXIgaGFuZGxlcjsKLSAgcHJpdmF0ZSBmaW5hbCBFZ2xCYXNlIGVnbEJhc2U7
Ci0gIHByaXZhdGUgZmluYWwgU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmU7Ci0gIHByaXZh
dGUgZmluYWwgaW50IG9lc1RleHR1cmVJZDsKLSAgcHJpdmF0ZSBZdXZDb252ZXJ0ZXIgeXV2Q29u
dmVydGVyOwotCi0gIC8vIFRoZXNlIHZhcmlhYmxlcyBhcmUgb25seSBhY2Nlc3NlZCBmcm9tIHRo
ZSB8aGFuZGxlcnwgdGhyZWFkLgotICBwcml2YXRlIE9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlz
dGVuZXIgbGlzdGVuZXI7Ci0gIC8vIFRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgdGhpcyBjbGFzcy4K
LSAgcHJpdmF0ZSBib29sZWFuIGhhc1BlbmRpbmdUZXh0dXJlID0gZmFsc2U7Ci0gIHByaXZhdGUg
dm9sYXRpbGUgYm9vbGVhbiBpc1RleHR1cmVJblVzZSA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xl
YW4gaXNRdWl0dGluZyA9IGZhbHNlOwotICAvLyB8cGVuZGluZ0xpc3RlbmVyfCBpcyBzZXQgaW4g
c2V0TGlzdGVuZXIoKSBhbmQgdGhlIHJ1bm5hYmxlIGlzIHBvc3RlZCB0byB0aGUgaGFuZGxlciB0
aHJlYWQuCi0gIC8vIHNldExpc3RlbmVyKCkgaXMgbm90IGFsbG93ZWQgdG8gYmUgY2FsbGVkIGFn
YWluIGJlZm9yZSBzdG9wTGlzdGVuaW5nKCksIHNvIHRoaXMgaXMgdGhyZWFkIHNhZmUuCi0gIHBy
aXZhdGUgT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5lciBwZW5kaW5nTGlzdGVuZXI7Ci0g
IGZpbmFsIFJ1bm5hYmxlIHNldExpc3RlbmVyUnVubmFibGUgPSBuZXcgUnVubmFibGUoKSB7Ci0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgTG9nZ2luZy5kKFRB
RywgIlNldHRpbmcgbGlzdGVuZXIgdG8gIiArIHBlbmRpbmdMaXN0ZW5lcik7Ci0gICAgICBsaXN0
ZW5lciA9IHBlbmRpbmdMaXN0ZW5lcjsKLSAgICAgIHBlbmRpbmdMaXN0ZW5lciA9IG51bGw7Ci0g
ICAgICAvLyBNYXkgaGF2ZSBhIHBlbmRpbmcgZnJhbWUgZnJvbSB0aGUgcHJldmlvdXMgY2FwdHVy
ZSBzZXNzaW9uIC0gZHJvcCBpdC4KLSAgICAgIGlmIChoYXNQZW5kaW5nVGV4dHVyZSkgewotICAg
ICAgICAvLyBDYWxsaW5nIHVwZGF0ZVRleEltYWdlKCkgaXMgbmVjY2Vzc2FyeSBpbiBvcmRlciB0
byByZWNlaXZlIG5ldyBmcmFtZXMuCi0gICAgICAgIHVwZGF0ZVRleEltYWdlKCk7Ci0gICAgICAg
IGhhc1BlbmRpbmdUZXh0dXJlID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIHBy
aXZhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIoRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQs
IEhhbmRsZXIgaGFuZGxlcikgewotICAgIGlmIChoYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVh
ZCgpICE9IFRocmVhZC5jdXJyZW50VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
U3RhdGVFeGNlcHRpb24oIlN1cmZhY2VUZXh0dXJlSGVscGVyIG11c3QgYmUgY3JlYXRlZCBvbiB0
aGUgaGFuZGxlciB0aHJlYWQiKTsKLSAgICB9Ci0gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsK
LQotICAgIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShzaGFyZWRDb250ZXh0LCBFZ2xCYXNlLkNP
TkZJR19QSVhFTF9CVUZGRVIpOwotICAgIHRyeSB7Ci0gICAgICAvLyBCb3RoIHRoZXNlIHN0YXRl
bWVudHMgaGF2ZSBiZWVuIG9ic2VydmVkIHRvIGZhaWwgb24gcmFyZSBvY2Nhc2lvbnMsIHNlZSBC
VUc9d2VicnRjOjU2ODIuCi0gICAgICBlZ2xCYXNlLmNyZWF0ZUR1bW15UGJ1ZmZlclN1cmZhY2Uo
KTsKLSAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIC8vIENsZWFuIHVwIGJlZm9yZSByZXRocm93aW5nIHRoZSBleGNl
cHRpb24uCi0gICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICAgIGhhbmRsZXIuZ2V0TG9vcGVy
KCkucXVpdCgpOwotICAgICAgdGhyb3cgZTsKLSAgICB9Ci0KLSAgICBvZXNUZXh0dXJlSWQgPSBH
bFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUyk7
Ci0gICAgc3VyZmFjZVRleHR1cmUgPSBuZXcgU3VyZmFjZVRleHR1cmUob2VzVGV4dHVyZUlkKTsK
LSAgICBzdXJmYWNlVGV4dHVyZS5zZXRPbkZyYW1lQXZhaWxhYmxlTGlzdGVuZXIobmV3IFN1cmZh
Y2VUZXh0dXJlLk9uRnJhbWVBdmFpbGFibGVMaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgb25GcmFtZUF2YWlsYWJsZShTdXJmYWNlVGV4dHVyZSBzdXJmYWNl
VGV4dHVyZSkgewotICAgICAgICBoYXNQZW5kaW5nVGV4dHVyZSA9IHRydWU7Ci0gICAgICAgIHRy
eURlbGl2ZXJUZXh0dXJlRnJhbWUoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgot
ICAgKiBTdGFydCB0byBzdHJlYW0gdGV4dHVyZXMgdG8gdGhlIGdpdmVuIHxsaXN0ZW5lcnwuIElm
IHlvdSBuZWVkIHRvIGNoYW5nZSBsaXN0ZW5lciwgeW91IG5lZWQgdG8KLSAgICogY2FsbCBzdG9w
TGlzdGVuaW5nKCkgZmlyc3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydExpc3RlbmluZyhm
aW5hbCBPblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0gICAgaWYg
KHRoaXMubGlzdGVuZXIgIT0gbnVsbCB8fCB0aGlzLnBlbmRpbmdMaXN0ZW5lciAhPSBudWxsKSB7
Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJTdXJmYWNlVGV4dHVyZUhl
bHBlciBsaXN0ZW5lciBoYXMgYWxyZWFkeSBiZWVuIHNldC4iKTsKLSAgICB9Ci0gICAgdGhpcy5w
ZW5kaW5nTGlzdGVuZXIgPSBsaXN0ZW5lcjsKLSAgICBoYW5kbGVyLnBvc3Qoc2V0TGlzdGVuZXJS
dW5uYWJsZSk7Ci0gIH0KLQotICAvKioKLSAgICogU3RvcCBsaXN0ZW5pbmcuIFRoZSBsaXN0ZW5l
ciBzZXQgaW4gc3RhcnRMaXN0ZW5pbmcoKSBpcyBndWFyYW50ZWRlZCB0byBub3QgcmVjZWl2ZSBh
bnkgbW9yZQotICAgKiBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGNhbGxiYWNrcyBhZnRlciB0
aGlzIGZ1bmN0aW9uIHJldHVybnMuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wTGlzdGVuaW5n
KCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wTGlzdGVuaW5nKCkiKTsKLSAgICBoYW5kbGVy
LnJlbW92ZUNhbGxiYWNrcyhzZXRMaXN0ZW5lclJ1bm5hYmxlKTsKLSAgICBUaHJlYWRVdGlscy5p
bnZva2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KGhhbmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBsaXN0ZW5l
ciA9IG51bGw7Ci0gICAgICAgIHBlbmRpbmdMaXN0ZW5lciA9IG51bGw7Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICAvKioKLSAgICogUmV0cmlldmUgdGhlIHVuZGVybHlpbmcgU3VyZmFjZVRl
eHR1cmUuIFRoZSBTdXJmYWNlVGV4dHVyZSBzaG91bGQgYmUgcGFzc2VkIGluIHRvIGEgdmlkZW8K
LSAgICogcHJvZHVjZXIgc3VjaCBhcyBhIGNhbWVyYSBvciBkZWNvZGVyLgotICAgKi8KLSAgcHVi
bGljIFN1cmZhY2VUZXh0dXJlIGdldFN1cmZhY2VUZXh0dXJlKCkgewotICAgIHJldHVybiBzdXJm
YWNlVGV4dHVyZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZXRyaWV2ZSB0aGUgaGFuZGxlciB0aGF0
IGNhbGxzIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuIFRoaXMgaGFuZGxlciBpcyB2YWxpZCB1
bnRpbAotICAgKiBkaXNwb3NlKCkgaXMgY2FsbGVkLgotICAgKi8KLSAgcHVibGljIEhhbmRsZXIg
Z2V0SGFuZGxlcigpIHsKLSAgICByZXR1cm4gaGFuZGxlcjsKLSAgfQotCi0gIC8qKgotICAgKiBD
YWxsIHRoaXMgZnVuY3Rpb24gdG8gc2lnbmFsIHRoYXQgeW91IGFyZSBkb25lIHdpdGggdGhlIGZy
YW1lIHJlY2VpdmVkIGluCi0gICAqIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuIE9ubHkgb25l
IHRleHR1cmUgZnJhbWUgY2FuIGJlIGluIGZsaWdodCBhdCBvbmNlLCBzbyB5b3UgbXVzdCBjYWxs
Ci0gICAqIHRoaXMgZnVuY3Rpb24gaW4gb3JkZXIgdG8gcmVjZWl2ZSBhIG5ldyBmcmFtZS4KLSAg
ICovCi0gIHB1YmxpYyB2b2lkIHJldHVyblRleHR1cmVGcmFtZSgpIHsKLSAgICBoYW5kbGVyLnBv
c3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGlzVGV4dHVyZUluVXNlID0gZmFsc2U7Ci0gICAgICAgIGlmIChpc1F1
aXR0aW5nKSB7Ci0gICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIHRyeURlbGl2ZXJUZXh0dXJlRnJhbWUoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNUZXh0dXJlSW5Vc2UoKSB7Ci0gICAgcmV0dXJu
IGlzVGV4dHVyZUluVXNlOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGwgZGlzY29ubmVjdCgpIHRv
IHN0b3AgcmVjZWl2aW5nIGZyYW1lcy4gT3BlbkdMIHJlc291cmNlcyBhcmUgcmVsZWFzZWQgYW5k
IHRoZSBoYW5kbGVyIGlzCi0gICAqIHN0b3BwZWQgd2hlbiB0aGUgdGV4dHVyZSBmcmFtZSBoYXMg
YmVlbiByZXR1cm5lZCBieSBhIGNhbGwgdG8gcmV0dXJuVGV4dHVyZUZyYW1lKCkuIFlvdSBhcmUK
LSAgICogZ3VhcmFudGVlZCB0byBub3QgcmVjZWl2ZSBhbnkgbW9yZSBvblRleHR1cmVGcmFtZUF2
YWlsYWJsZSgpIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4KLSAgICovCi0gIHB1YmxpYyB2
b2lkIGRpc3Bvc2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImRpc3Bvc2UoKSIpOwotICAgIFRo
cmVhZFV0aWxzLmludm9rZUF0RnJvbnRVbmludGVycnVwdGlibHkoaGFuZGxlciwgbmV3IFJ1bm5h
YmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgIGlzUXVpdHRpbmcgPSB0cnVlOwotICAgICAgICBpZiAoIWlzVGV4dHVyZUluVXNlKSB7Ci0g
ICAgICAgICAgcmVsZWFzZSgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB0ZXh0dXJlVG9ZVVYoZmluYWwgQnl0ZUJ1ZmZlciBidWYsIGZpbmFsIGlu
dCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwKLSAgICAgIGZpbmFsIGludCBzdHJpZGUsIGZpbmFs
IGludCB0ZXh0dXJlSWQsIGZpbmFsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4KSB7Ci0gICAgaWYg
KHRleHR1cmVJZCAhPSBvZXNUZXh0dXJlSWQpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3Rh
dGVFeGNlcHRpb24oInRleHR1cmVUb0J5dGVCdWZmZXIgY2FsbGVkIHdpdGggdW5leHBlY3RlZCB0
ZXh0dXJlSWQiKTsKLSAgICB9Ci0KLSAgICBUaHJlYWRVdGlscy5pbnZva2VBdEZyb250VW5pbnRl
cnJ1cHRpYmx5KGhhbmRsZXIsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoeXV2Q29udmVydGVyID09IG51bGwp
IHsKLSAgICAgICAgICB5dXZDb252ZXJ0ZXIgPSBuZXcgWXV2Q29udmVydGVyKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgeXV2Q29udmVydGVyLmNvbnZlcnQoYnVmLCB3aWR0aCwgaGVpZ2h0LCBzdHJp
ZGUsIHRleHR1cmVJZCwgdHJhbnNmb3JtTWF0cml4KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCB1cGRhdGVUZXhJbWFnZSgpIHsKLSAgICAvLyBTdXJmYWNlVGV4dHVy
ZS51cGRhdGVUZXhJbWFnZSBhcHBhcmVudGx5IGNhbiBjb21wZXRlIGFuZCBkZWFkbG9jayB3aXRo
IGVnbFN3YXBCdWZmZXJzLAotICAgIC8vIGFzIG9ic2VydmVkIG9uIE5leHVzIDUuIFRoZXJlZm9y
ZSwgc3luY2hyb25pemUgaXQgd2l0aCB0aGUgRUdMIGZ1bmN0aW9ucy4KLSAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTU3MDIgZm9y
IG1vcmUgaW5mby4KLSAgICBzeW5jaHJvbml6ZWQgKEVnbEJhc2UubG9jaykgewotICAgICAgc3Vy
ZmFjZVRleHR1cmUudXBkYXRlVGV4SW1hZ2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgdHJ5RGVsaXZlclRleHR1cmVGcmFtZSgpIHsKLSAgICBpZiAoaGFuZGxlci5nZXRMb29wZXIo
KS5nZXRUaHJlYWQoKSAhPSBUaHJlYWQuY3VycmVudFRocmVhZCgpKSB7Ci0gICAgICB0aHJvdyBu
ZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXcm9uZyB0aHJlYWQuIik7Ci0gICAgfQotICAgIGlm
IChpc1F1aXR0aW5nIHx8ICFoYXNQZW5kaW5nVGV4dHVyZSB8fCBpc1RleHR1cmVJblVzZSB8fCBs
aXN0ZW5lciA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlzVGV4dHVyZUlu
VXNlID0gdHJ1ZTsKLSAgICBoYXNQZW5kaW5nVGV4dHVyZSA9IGZhbHNlOwotCi0gICAgdXBkYXRl
VGV4SW1hZ2UoKTsKLQotICAgIGZpbmFsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4ID0gbmV3IGZs
b2F0WzE2XTsKLSAgICBzdXJmYWNlVGV4dHVyZS5nZXRUcmFuc2Zvcm1NYXRyaXgodHJhbnNmb3Jt
TWF0cml4KTsKLSAgICBmaW5hbCBsb25nIHRpbWVzdGFtcE5zID0gKEJ1aWxkLlZFUlNJT04uU0RL
X0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLklDRV9DUkVBTV9TQU5EV0lDSCkKLSAgICAgICAg
PyBzdXJmYWNlVGV4dHVyZS5nZXRUaW1lc3RhbXAoKQotICAgICAgICA6IFRpbWVVbml0Lk1JTExJ
U0VDT05EUy50b05hbm9zKFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpKTsKLSAgICBsaXN0
ZW5lci5vblRleHR1cmVGcmFtZUF2YWlsYWJsZShvZXNUZXh0dXJlSWQsIHRyYW5zZm9ybU1hdHJp
eCwgdGltZXN0YW1wTnMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlbGVhc2UoKSB7Ci0gICAg
aWYgKGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkgIT0gVGhyZWFkLmN1cnJlbnRUaHJl
YWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhy
ZWFkLiIpOwotICAgIH0KLSAgICBpZiAoaXNUZXh0dXJlSW5Vc2UgfHwgIWlzUXVpdHRpbmcpIHsK
LSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlVuZXhwZWN0ZWQgcmVsZWFz
ZS4iKTsKLSAgICB9Ci0gICAgaWYgKHl1dkNvbnZlcnRlciAhPSBudWxsKSB7Ci0gICAgICB5dXZD
b252ZXJ0ZXIucmVsZWFzZSgpOwotICAgIH0KLSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygx
LCBuZXcgaW50W10ge29lc1RleHR1cmVJZH0sIDApOwotICAgIHN1cmZhY2VUZXh0dXJlLnJlbGVh
c2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICBoYW5kbGVyLmdldExvb3BlcigpLnF1
aXQoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRlcmVy
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRlcmVy
LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdS
ZW5kZXJlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjIwICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5D
b250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5yZXMuUmVzb3VyY2VzLk5vdEZvdW5kRXhj
ZXB0aW9uOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC51
dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZUhvbGRlcjsKLWlt
cG9ydCBhbmRyb2lkLnZpZXcuU3VyZmFjZVZpZXc7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuQ291bnREb3duTGF0Y2g7Ci0KLS8qKgotICogSW1wbGVtZW50cyBvcmcud2VicnRjLlZpZGVv
UmVuZGVyZXIuQ2FsbGJhY2tzIGJ5IGRpc3BsYXlpbmcgdGhlIHZpZGVvIHN0cmVhbSBvbiBhIFN1
cmZhY2VWaWV3LgotICogcmVuZGVyRnJhbWUoKSBpcyBhc3luY2hyb25vdXMgdG8gYXZvaWQgYmxv
Y2tpbmcgdGhlIGNhbGxpbmcgdGhyZWFkLgotICogVGhpcyBjbGFzcyBpcyB0aHJlYWQgc2FmZSBh
bmQgaGFuZGxlcyBhY2Nlc3MgZnJvbSBwb3RlbnRpYWxseSBmb3VyIGRpZmZlcmVudCB0aHJlYWRz
OgotICogSW50ZXJhY3Rpb24gZnJvbSB0aGUgbWFpbiBhcHAgaW4gaW5pdCwgcmVsZWFzZSwgc2V0
TWlycm9yLCBhbmQgc2V0U2NhbGluZ3R5cGUuCi0gKiBJbnRlcmFjdGlvbiBmcm9tIEMrKyBydGM6
OlZpZGVvU2lua0ludGVyZmFjZSBpbiByZW5kZXJGcmFtZS4KLSAqIEludGVyYWN0aW9uIGZyb20g
dGhlIEFjdGl2aXR5IGxpZmVjeWNsZSBpbiBzdXJmYWNlQ3JlYXRlZCwgc3VyZmFjZUNoYW5nZWQs
IGFuZCBzdXJmYWNlRGVzdHJveWVkLgotICogSW50ZXJhY3Rpb24gd2l0aCB0aGUgbGF5b3V0IGZy
YW1ld29yayBpbiBvbk1lYXN1cmUgYW5kIG9uU2l6ZUNoYW5nZWQuCi0gKi8KLXB1YmxpYyBjbGFz
cyBTdXJmYWNlVmlld1JlbmRlcmVyCi0gICAgZXh0ZW5kcyBTdXJmYWNlVmlldyBpbXBsZW1lbnRz
IFN1cmZhY2VIb2xkZXIuQ2FsbGJhY2ssIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJTdXJmYWNlVmlld1JlbmRlcmVyIjsKLQot
ICAvLyBDYWNoZWQgcmVzb3VyY2UgbmFtZS4KLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcmVzb3Vy
Y2VOYW1lOwotICBwcml2YXRlIGZpbmFsIFJlbmRlcmVyQ29tbW9uLlZpZGVvTGF5b3V0TWVhc3Vy
ZSB2aWRlb0xheW91dE1lYXN1cmUgPQotICAgICAgbmV3IFJlbmRlcmVyQ29tbW9uLlZpZGVvTGF5
b3V0TWVhc3VyZSgpOwotICBwcml2YXRlIGZpbmFsIEVnbFJlbmRlcmVyIGVnbFJlbmRlcmVyOwot
Ci0gIC8vIENhbGxiYWNrIGZvciByZXBvcnRpbmcgcmVuZGVyZXIgZXZlbnRzLiBSZWFkLW9ubHkg
YWZ0ZXIgaW5pdGlsaXphdGlvbiBzbyBubyBsb2NrIHJlcXVpcmVkLgotICBwcml2YXRlIFJlbmRl
cmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzOwotCi0gIHByaXZhdGUgZmlu
YWwgT2JqZWN0IGxheW91dExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBp
c0ZpcnN0RnJhbWVSZW5kZXJlZDsKLSAgcHJpdmF0ZSBpbnQgcm90YXRlZEZyYW1lV2lkdGg7Ci0g
IHByaXZhdGUgaW50IHJvdGF0ZWRGcmFtZUhlaWdodDsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVSb3Rh
dGlvbjsKLQotICAvKioKLSAgICogU3RhbmRhcmQgVmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIg
dG8gcmVuZGVyIHNvbWV0aGluZywgeW91IG11c3QgZmlyc3QgY2FsbCBpbml0KCkuCi0gICAqLwot
ICBwdWJsaWMgU3VyZmFjZVZpZXdSZW5kZXJlcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICBzdXBl
cihjb250ZXh0KTsKLSAgICB0aGlzLnJlc291cmNlTmFtZSA9IGdldFJlc291cmNlTmFtZSgpOwot
ICAgIGVnbFJlbmRlcmVyID0gbmV3IEVnbFJlbmRlcmVyKHJlc291cmNlTmFtZSk7Ci0gICAgZ2V0
SG9sZGVyKCkuYWRkQ2FsbGJhY2sodGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogU3RhbmRhcmQg
VmlldyBjb25zdHJ1Y3Rvci4gSW4gb3JkZXIgdG8gcmVuZGVyIHNvbWV0aGluZywgeW91IG11c3Qg
Zmlyc3QgY2FsbCBpbml0KCkuCi0gICAqLwotICBwdWJsaWMgU3VyZmFjZVZpZXdSZW5kZXJlcihD
b250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycykgewotICAgIHN1cGVyKGNvbnRleHQs
IGF0dHJzKTsKLSAgICB0aGlzLnJlc291cmNlTmFtZSA9IGdldFJlc291cmNlTmFtZSgpOwotICAg
IGVnbFJlbmRlcmVyID0gbmV3IEVnbFJlbmRlcmVyKHJlc291cmNlTmFtZSk7Ci0gICAgZ2V0SG9s
ZGVyKCkuYWRkQ2FsbGJhY2sodGhpcyk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSB0
aGlzIGNsYXNzLCBzaGFyaW5nIHJlc291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gSXQgaXMg
YWxsb3dlZCB0byBjYWxsIGluaXQoKSB0bwotICAgKiByZWluaXRpYWxpemUgdGhlIHJlbmRlcmVy
IGFmdGVyIGEgcHJldmlvdXMgaW5pdCgpL3JlbGVhc2UoKSBjeWNsZS4KLSAgICovCi0gIHB1Ymxp
YyB2b2lkIGluaXQoRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsIFJlbmRlcmVyQ29tbW9u
LlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzKSB7Ci0gICAgaW5pdChzaGFyZWRDb250ZXh0
LCByZW5kZXJlckV2ZW50cywgRWdsQmFzZS5DT05GSUdfUExBSU4sIG5ldyBHbFJlY3REcmF3ZXIo
KSk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlhbGl6ZSB0aGlzIGNsYXNzLCBzaGFyaW5nIHJl
c291cmNlcyB3aXRoIHxzaGFyZWRDb250ZXh0fC4gVGhlIGN1c3RvbSB8ZHJhd2VyfCB3aWxsIGJl
IHVzZWQKLSAgICogZm9yIGRyYXdpbmcgZnJhbWVzIG9uIHRoZSBFR0xTdXJmYWNlLiBUaGlzIGNs
YXNzIGlzIHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIHJlbGVhc2UoKSBvbgotICAgKiB8ZHJhd2Vy
fC4gSXQgaXMgYWxsb3dlZCB0byBjYWxsIGluaXQoKSB0byByZWluaXRpYWxpemUgdGhlIHJlbmRl
cmVyIGFmdGVyIGEgcHJldmlvdXMKLSAgICogaW5pdCgpL3JlbGVhc2UoKSBjeWNsZS4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIGluaXQoZmluYWwgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQs
Ci0gICAgICBSZW5kZXJlckNvbW1vbi5SZW5kZXJlckV2ZW50cyByZW5kZXJlckV2ZW50cywgZmlu
YWwgaW50W10gY29uZmlnQXR0cmlidXRlcywKLSAgICAgIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2Vy
IGRyYXdlcikgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAgICB0
aGlzLnJlbmRlcmVyRXZlbnRzID0gcmVuZGVyZXJFdmVudHM7Ci0gICAgc3luY2hyb25pemVkIChs
YXlvdXRMb2NrKSB7Ci0gICAgICByb3RhdGVkRnJhbWVXaWR0aCA9IDA7Ci0gICAgICByb3RhdGVk
RnJhbWVIZWlnaHQgPSAwOwotICAgICAgZnJhbWVSb3RhdGlvbiA9IDA7Ci0gICAgfQotICAgIGVn
bFJlbmRlcmVyLmluaXQoc2hhcmVkQ29udGV4dCwgY29uZmlnQXR0cmlidXRlcywgZHJhd2VyKTsK
LSAgfQotCi0gIC8qKgotICAgKiBCbG9jayB1bnRpbCBhbnkgcGVuZGluZyBmcmFtZSBpcyByZXR1
cm5lZCBhbmQgYWxsIEdMIHJlc291cmNlcyByZWxlYXNlZCwgZXZlbiBpZiBhbiBpbnRlcnJ1cHQK
LSAgICogb2NjdXJzLiBJZiBhbiBpbnRlcnJ1cHQgb2NjdXJzIGR1cmluZyByZWxlYXNlKCksIHRo
ZSBpbnRlcnJ1cHQgZmxhZyB3aWxsIGJlIHNldC4gVGhpcyBmdW5jdGlvbgotICAgKiBzaG91bGQg
YmUgY2FsbGVkIGJlZm9yZSB0aGUgQWN0aXZpdHkgaXMgZGVzdHJveWVkIGFuZCB0aGUgRUdMQ29u
dGV4dCBpcyBzdGlsbCB2YWxpZC4gSWYgeW91Ci0gICAqIGRvbid0IGNhbGwgdGhpcyBmdW5jdGlv
biwgdGhlIEdMIHJlc291cmNlcyBtaWdodCBsZWFrLgotICAgKi8KLSAgcHVibGljIHZvaWQgcmVs
ZWFzZSgpIHsKLSAgICBlZ2xSZW5kZXJlci5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICog
U2V0IGlmIHRoZSB2aWRlbyBzdHJlYW0gc2hvdWxkIGJlIG1pcnJvcmVkIG9yIG5vdC4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIHNldE1pcnJvcihmaW5hbCBib29sZWFuIG1pcnJvcikgewotICAgIGVn
bFJlbmRlcmVyLnNldE1pcnJvcihtaXJyb3IpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNldCBob3cg
dGhlIHZpZGVvIHdpbGwgZmlsbCB0aGUgYWxsb3dlZCBsYXlvdXQgYXJlYS4KLSAgICovCi0gIHB1
YmxpYyB2b2lkIHNldFNjYWxpbmdUeXBlKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxp
bmdUeXBlKSB7Ci0gICAgVGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIHZp
ZGVvTGF5b3V0TWVhc3VyZS5zZXRTY2FsaW5nVHlwZShzY2FsaW5nVHlwZSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBzZXRTY2FsaW5nVHlwZShSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2Fs
aW5nVHlwZU1hdGNoT3JpZW50YXRpb24sCi0gICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlw
ZSBzY2FsaW5nVHlwZU1pc21hdGNoT3JpZW50YXRpb24pIHsKLSAgICBUaHJlYWRVdGlscy5jaGVj
a0lzT25NYWluVGhyZWFkKCk7Ci0gICAgdmlkZW9MYXlvdXRNZWFzdXJlLnNldFNjYWxpbmdUeXBl
KHNjYWxpbmdUeXBlTWF0Y2hPcmllbnRhdGlvbiwgc2NhbGluZ1R5cGVNaXNtYXRjaE9yaWVudGF0
aW9uKTsKLSAgfQotCi0gIC8vIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGludGVyZmFjZS4KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1lKFZpZGVvUmVuZGVyZXIuSTQyMEZy
YW1lIGZyYW1lKSB7Ci0gICAgdXBkYXRlRnJhbWVEaW1lbnNpb25zQW5kUmVwb3J0RXZlbnRzKGZy
YW1lKTsKLSAgICBlZ2xSZW5kZXJlci5yZW5kZXJGcmFtZShmcmFtZSk7Ci0gIH0KLQotICAvLyBW
aWV3IGxheW91dCBpbnRlcmZhY2UuCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbk1l
YXN1cmUoaW50IHdpZHRoU3BlYywgaW50IGhlaWdodFNwZWMpIHsKLSAgICBUaHJlYWRVdGlscy5j
aGVja0lzT25NYWluVGhyZWFkKCk7Ci0gICAgZmluYWwgUG9pbnQgc2l6ZTsKLSAgICBzeW5jaHJv
bml6ZWQgKGxheW91dExvY2spIHsKLSAgICAgIHNpemUgPQotICAgICAgICAgIHZpZGVvTGF5b3V0
TWVhc3VyZS5tZWFzdXJlKHdpZHRoU3BlYywgaGVpZ2h0U3BlYywgcm90YXRlZEZyYW1lV2lkdGgs
IHJvdGF0ZWRGcmFtZUhlaWdodCk7Ci0gICAgfQotICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKHNp
emUueCwgc2l6ZS55KTsKLSAgICBsb2dEKCJvbk1lYXN1cmUoKS4gTmV3IHNpemU6ICIgKyBzaXpl
LnggKyAieCIgKyBzaXplLnkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lk
IG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwg
aW50IGJvdHRvbSkgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5UaHJlYWQoKTsKLSAg
ICBlZ2xSZW5kZXJlci5zZXRMYXlvdXRBc3BlY3RSYXRpbygocmlnaHQgLSBsZWZ0KSAvIChmbG9h
dCkgKGJvdHRvbSAtIHRvcCkpOwotICB9Ci0KLSAgLy8gU3VyZmFjZUhvbGRlci5DYWxsYmFjayBp
bnRlcmZhY2UuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdXJmYWNlQ3JlYXRlZChmaW5h
bCBTdXJmYWNlSG9sZGVyIGhvbGRlcikgewotICAgIFRocmVhZFV0aWxzLmNoZWNrSXNPbk1haW5U
aHJlYWQoKTsKLSAgICBlZ2xSZW5kZXJlci5jcmVhdGVFZ2xTdXJmYWNlKGhvbGRlci5nZXRTdXJm
YWNlKCkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHN1cmZhY2VEZXN0cm95
ZWQoU3VyZmFjZUhvbGRlciBob2xkZXIpIHsKLSAgICBUaHJlYWRVdGlscy5jaGVja0lzT25NYWlu
VGhyZWFkKCk7Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggY29tcGxldGlvbkxhdGNoID0gbmV3
IENvdW50RG93bkxhdGNoKDEpOwotICAgIGVnbFJlbmRlcmVyLnJlbGVhc2VFZ2xTdXJmYWNlKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBjb21wbGV0aW9uTGF0Y2guY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfSk7
Ci0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoY29tcGxldGlvbkxhdGNoKTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdXJmYWNlQ2hhbmdlZChTdXJmYWNl
SG9sZGVyIGhvbGRlciwgaW50IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAg
VGhyZWFkVXRpbHMuY2hlY2tJc09uTWFpblRocmVhZCgpOwotICAgIGVnbFJlbmRlcmVyLnN1cmZh
Y2VTaXplQ2hhbmdlZCh3aWR0aCwgaGVpZ2h0KTsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdl
dFJlc291cmNlTmFtZSgpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIGdldFJlc291cmNlcygp
LmdldFJlc291cmNlRW50cnlOYW1lKGdldElkKCkpICsgIjogIjsKLSAgICB9IGNhdGNoIChOb3RG
b3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXR1cm4gIiI7Ci0gICAgfQotICB9Ci0KLSAgLy8g
VXBkYXRlIGZyYW1lIGRpbWVuc2lvbnMgYW5kIHJlcG9ydCBhbnkgY2hhbmdlcyB0byB8cmVuZGVy
ZXJFdmVudHN8LgotICBwcml2YXRlIHZvaWQgdXBkYXRlRnJhbWVEaW1lbnNpb25zQW5kUmVwb3J0
RXZlbnRzKFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgc3luY2hyb25pemVk
IChsYXlvdXRMb2NrKSB7Ci0gICAgICBpZiAoIWlzRmlyc3RGcmFtZVJlbmRlcmVkKSB7Ci0gICAg
ICAgIGlzRmlyc3RGcmFtZVJlbmRlcmVkID0gdHJ1ZTsKLSAgICAgICAgbG9nRCgiUmVwb3J0aW5n
IGZpcnN0IHJlbmRlcmVkIGZyYW1lLiIpOwotICAgICAgICBpZiAocmVuZGVyZXJFdmVudHMgIT0g
bnVsbCkgewotICAgICAgICAgIHJlbmRlcmVyRXZlbnRzLm9uRmlyc3RGcmFtZVJlbmRlcmVkKCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGlmIChyb3RhdGVkRnJhbWVXaWR0aCAhPSBmcmFt
ZS5yb3RhdGVkV2lkdGgoKSB8fCByb3RhdGVkRnJhbWVIZWlnaHQgIT0gZnJhbWUucm90YXRlZEhl
aWdodCgpCi0gICAgICAgICAgfHwgZnJhbWVSb3RhdGlvbiAhPSBmcmFtZS5yb3RhdGlvbkRlZ3Jl
ZSkgewotICAgICAgICBsb2dEKCJSZXBvcnRpbmcgZnJhbWUgcmVzb2x1dGlvbiBjaGFuZ2VkIHRv
ICIgKyBmcmFtZS53aWR0aCArICJ4IiArIGZyYW1lLmhlaWdodAotICAgICAgICAgICAgKyAiIHdp
dGggcm90YXRpb24gIiArIGZyYW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICAgICAgaWYgKHJlbmRl
cmVyRXZlbnRzICE9IG51bGwpIHsKLSAgICAgICAgICByZW5kZXJlckV2ZW50cy5vbkZyYW1lUmVz
b2x1dGlvbkNoYW5nZWQoZnJhbWUud2lkdGgsIGZyYW1lLmhlaWdodCwgZnJhbWUucm90YXRpb25E
ZWdyZWUpOwotICAgICAgICB9Ci0gICAgICAgIHJvdGF0ZWRGcmFtZVdpZHRoID0gZnJhbWUucm90
YXRlZFdpZHRoKCk7Ci0gICAgICAgIHJvdGF0ZWRGcmFtZUhlaWdodCA9IGZyYW1lLnJvdGF0ZWRI
ZWlnaHQoKTsKLSAgICAgICAgZnJhbWVSb3RhdGlvbiA9IGZyYW1lLnJvdGF0aW9uRGVncmVlOwot
ICAgICAgICBwb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICByZXF1ZXN0TGF5b3V0KCk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgbG9nRChTdHJpbmcgc3RyaW5nKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgcmVzb3VyY2VO
YW1lICsgc3RyaW5nKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1
cmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyLmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9DYXB0dXJlci5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsMTExICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0Owot
Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8vIEJhc2UgaW50ZXJmYWNlIGZvciBhbGwgVmlk
ZW9DYXB0dXJlcnMgdG8gaW1wbGVtZW50LgotcHVibGljIGludGVyZmFjZSBWaWRlb0NhcHR1cmVy
IHsKLSAgLy8gSW50ZXJmYWNlIHVzZWQgZm9yIHByb3ZpZGluZyBjYWxsYmFja3MgdG8gYW4gb2Jz
ZXJ2ZXIuCi0gIHB1YmxpYyBpbnRlcmZhY2UgQ2FwdHVyZXJPYnNlcnZlciB7Ci0gICAgLy8gTm90
aWZ5IGlmIHRoZSBjYW1lcmEgaGF2ZSBiZWVuIHN0YXJ0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdC4K
LSAgICAvLyBDYWxsZWQgb24gYSBKYXZhIHRocmVhZCBvd25lZCBieSBWaWRlb0NhcHR1cmVyLgot
ICAgIHZvaWQgb25DYXB0dXJlclN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKTsKLSAgICB2b2lkIG9u
Q2FwdHVyZXJTdG9wcGVkKCk7Ci0KLSAgICAvLyBEZWxpdmVycyBhIGNhcHR1cmVkIGZyYW1lLiBD
YWxsZWQgb24gYSBKYXZhIHRocmVhZCBvd25lZCBieSBWaWRlb0NhcHR1cmVyLgotICAgIHZvaWQg
b25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgKLSAgICAgICAgYnl0ZVtdIGRhdGEsIGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVTdGFtcCk7Ci0KLSAgICAvLyBE
ZWxpdmVycyBhIGNhcHR1cmVkIGZyYW1lIGluIGEgdGV4dHVyZSB3aXRoIGlkIHxvZXNUZXh0dXJl
SWR8LiBDYWxsZWQgb24gYSBKYXZhIHRocmVhZAotICAgIC8vIG93bmVkIGJ5IFZpZGVvQ2FwdHVy
ZXIuCi0gICAgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1cmVkKGludCB3aWR0aCwgaW50IGhlaWdo
dCwgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsCi0gICAgICAgIGlu
dCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApOwotICB9Ci0KLSAgLy8gQW4gaW1wbGVtZW50YXRp
b24gb2YgQ2FwdHVyZXJPYnNlcnZlciB0aGF0IGZvcndhcmRzIGFsbCBjYWxscyBmcm9tCi0gIC8v
IEphdmEgdG8gdGhlIEMgbGF5ZXIuCi0gIHN0YXRpYyBjbGFzcyBBbmRyb2lkVmlkZW9UcmFja1Nv
dXJjZU9ic2VydmVyIGltcGxlbWVudHMgQ2FwdHVyZXJPYnNlcnZlciB7Ci0gICAgLy8gUG9pbnRl
ciB0byBWaWRlb1RyYWNrU291cmNlUHJveHkgcHJveHlpbmcgQW5kcm9pZFZpZGVvVHJhY2tTb3Vy
Y2UuCi0gICAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZVNvdXJjZTsKLQotICAgIHB1YmxpYyBB
bmRyb2lkVmlkZW9UcmFja1NvdXJjZU9ic2VydmVyKGxvbmcgbmF0aXZlU291cmNlKSB7Ci0gICAg
ICB0aGlzLm5hdGl2ZVNvdXJjZSA9IG5hdGl2ZVNvdXJjZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVyU3RhcnRlZChib29sZWFuIHN1Y2Nlc3MpIHsK
LSAgICAgIG5hdGl2ZUNhcHR1cmVyU3RhcnRlZChuYXRpdmVTb3VyY2UsIHN1Y2Nlc3MpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdG9wcGVkKCkg
ewotICAgICAgbmF0aXZlQ2FwdHVyZXJTdG9wcGVkKG5hdGl2ZVNvdXJjZSk7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgK
LSAgICAgICAgYnl0ZVtdIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9u
LCBsb25nIHRpbWVTdGFtcCkgewotICAgICAgbmF0aXZlT25CeXRlQnVmZmVyRnJhbWVDYXB0dXJl
ZCgKLSAgICAgICAgICBuYXRpdmVTb3VyY2UsIGRhdGEsIGRhdGEubGVuZ3RoLCB3aWR0aCwgaGVp
Z2h0LCByb3RhdGlvbiwgdGltZVN0YW1wKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1cmVkKGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IG9lc1RleHR1cmVJZCwKLSAgICAgICAgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCBy
b3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApIHsKLSAgICAgIG5hdGl2ZU9uVGV4dHVyZUZyYW1lQ2Fw
dHVyZWQoCi0gICAgICAgICAgbmF0aXZlU291cmNlLCB3aWR0aCwgaGVpZ2h0LCBvZXNUZXh0dXJl
SWQsIHRyYW5zZm9ybU1hdHJpeCwgcm90YXRpb24sIHRpbWVzdGFtcCk7Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYXB0dXJlclN0YXJ0ZWQobG9uZyBuYXRpdmVTb3Vy
Y2UsIGJvb2xlYW4gc3VjY2Vzcyk7Ci0gICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYXB0
dXJlclN0b3BwZWQobG9uZyBuYXRpdmVTb3VyY2UpOwotICAgIHByaXZhdGUgbmF0aXZlIHZvaWQg
bmF0aXZlT25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZChsb25nIG5hdGl2ZVNvdXJjZSwgYnl0ZVtd
IGRhdGEsIGludCBsZW5ndGgsCi0gICAgICAgIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJv
dGF0aW9uLCBsb25nIHRpbWVTdGFtcCk7Ci0gICAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVP
blRleHR1cmVGcmFtZUNhcHR1cmVkKGxvbmcgbmF0aXZlU291cmNlLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsCi0gICAgICAgIGludCBvZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4
LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKTsKLSAgfQotCi0gIC8qKgotICAgKiBUaGlz
IGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgY2FtZXJhIHRocmVhZCwgdGhlIGFu
ZHJvaWQgYXBwbGljYXRpb24gY29udGV4dCwgYW5kIHRoZQotICAgKiBjYXB0dXJlIG9ic2VydmVy
LiBJdCB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UgYW5kIGJlZm9yZSBhbnkgc3RhcnRDYXB0dXJl
KCkgcmVxdWVzdC4gVGhlCi0gICAqIGNhbWVyYSB0aHJlYWQgaXMgZ3VhcmFudGVlZCB0byBiZSB2
YWxpZCB1bnRpbCBkaXNwb3NlKCkgaXMgY2FsbGVkLiBJZiB0aGUgVmlkZW9DYXB0dXJlciB3YW50
cwotICAgKiB0byBkZWxpdmVyIHRleHR1cmUgZnJhbWVzLCBpdCBzaG91bGQgZG8gdGhpcyBieSBy
ZW5kZXJpbmcgb24gdGhlIFN1cmZhY2VUZXh0dXJlIGluCi0gICAqIHxzdXJmYWNlVGV4dHVyZUhl
bHBlcnwsIHJlZ2lzdGVyIGl0c2VsZiBhcyBhIGxpc3RlbmVyLCBhbmQgZm9yd2FyZCB0aGUgdGV4
dHVyZSBmcmFtZXMgdG8KLSAgICogQ2FwdHVyZXJPYnNlcnZlci5vblRleHR1cmVGcmFtZUNhcHR1
cmVkKCkuCi0gICAqLwotICB2b2lkIGluaXRpYWxpemUoU3VyZmFjZVRleHR1cmVIZWxwZXIgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIsIENvbnRleHQgYXBwbGljYXRpb25Db250ZXh0LAotICAgICAgQ2Fw
dHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyKTsKLQotICAvKioKLSAgICogU3RhcnQgY2Fw
dHVyaW5nIGZyYW1lcyBpbiBhIGZvcm1hdCB0aGF0IGlzIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRv
IHx3aWR0aHwgeCB8aGVpZ2h0fCBhbmQKLSAgICogfGZyYW1lcmF0ZXwuCi0gICAqLwotICB2b2lk
IHN0YXJ0Q2FwdHVyZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpOwotCi0g
IC8qKgotICAgKiBTdG9wIGNhcHR1cmluZy4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmxvY2sgdW50
aWwgY2FwdHVyZSBpcyBhY3R1YWxseSBzdG9wcGVkLgotICAgKi8KLSAgdm9pZCBzdG9wQ2FwdHVy
ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbjsKLQotICB2b2lkIGNoYW5nZUNhcHR1cmVG
b3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKTsKLQotICAvKioKLSAg
ICogUGVyZm9ybSBhbnkgZmluYWwgY2xlYW51cCBoZXJlLiBObyBtb3JlIGNhcHR1cmluZyB3aWxs
IGJlIGRvbmUgYWZ0ZXIgdGhpcyBjYWxsLgotICAgKi8KLSAgdm9pZCBkaXNwb3NlKCk7Ci0KLSAg
LyoqCi0gICAqIEByZXR1cm4gdHJ1ZSBpZi1hbmQtb25seS1pZiB0aGlzIGlzIGEgc2NyZWVuIGNh
cHR1cmVyLgotICAgKi8KLSAgYm9vbGVhbiBpc1NjcmVlbmNhc3QoKTsKLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvVmlkZW9DYXB0dXJlckFuZHJvaWQuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL1ZpZGVvQ2FwdHVyZXJBbmRyb2lkLmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9DYXB0dXJlckFuZHJvaWQuamF2YQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDY1MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lk
Lm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRy
b2lkLnZpZXcuU3VyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWlt
cG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1p
bXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQg
amF2YS51dGlsLlNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRj
aDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljQm9vbGVhbjsKLWltcG9ydCBvcmcud2VicnRjLkNh
bWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotaW1wb3J0IG9yZy53ZWJydGMu
TWV0cmljcy5IaXN0b2dyYW07Ci0KLS8vIEFuZHJvaWQgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24g
b2YgVmlkZW9DYXB0dXJlci4KLS8vIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgY2FuIGJlIGNy
ZWF0ZWQgYnkgYW4gYXBwbGljYXRpb24gdXNpbmcKLS8vIFZpZGVvQ2FwdHVyZXJBbmRyb2lkLmNy
ZWF0ZSgpOwotLy8gVGhpcyBjbGFzcyBleHRlbmRzIFZpZGVvQ2FwdHVyZXIgd2l0aCBhIG1ldGhv
ZCB0byBlYXNpbHkgc3dpdGNoIGJldHdlZW4gdGhlCi0vLyBmcm9udCBhbmQgYmFjayBjYW1lcmEu
IEl0IGFsc28gcHJvdmlkZXMgbWV0aG9kcyBmb3IgZW51bWVyYXRpbmcgdmFsaWQgZGV2aWNlCi0v
LyBuYW1lcy4KLS8vCi0vLyBUaHJlYWRpbmcgbm90ZXM6IHRoaXMgY2xhc3MgaXMgY2FsbGVkIGZy
b20gQysrIGNvZGUsIEFuZHJvaWQgQ2FtZXJhIGNhbGxiYWNrcywgYW5kIHBvc3NpYmx5Ci0vLyBh
cmJpdHJhcnkgSmF2YSB0aHJlYWRzLiBBbGwgcHVibGljIGVudHJ5IHBvaW50cyBhcmUgdGhyZWFk
IHNhZmUsIGFuZCBkZWxlZ2F0ZSB0aGUgd29yayB0byB0aGUKLS8vIGNhbWVyYSB0aHJlYWQuIFRo
ZSBpbnRlcm5hbCAqT25DYW1lcmFUaHJlYWQoKSBtZXRob2RzIG11c3QgY2hlY2sgfGNhbWVyYXwg
Zm9yIG51bGwgdG8gY2hlY2sgaWYKLS8vIHRoZSBjYW1lcmEgaGFzIGJlZW4gc3RvcHBlZC4KLS8v
Ci0vLyBUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgb25seSBiZSB1c2VkIGlmIHlv
dSBtYW51YWxseSBjcmVhdGUgaXQuIFBsZWFzZSB1c2UKLS8vIENhbWVyYTFDYXB0dXJlciBpbnN0
ZWFkLgotQERlcHJlY2F0ZWQKLUBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi1wdWJs
aWMgY2xhc3MgVmlkZW9DYXB0dXJlckFuZHJvaWQKLSAgICBpbXBsZW1lbnRzIENhbWVyYVZpZGVv
Q2FwdHVyZXIsIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLlByZXZpZXdDYWxsYmFjaywKLSAgICAg
ICAgICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlTGlz
dGVuZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlZpZGVvQ2FwdHVy
ZXJBbmRyb2lkIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENBTUVSQV9TVE9QX1RJTUVP
VVRfTVMgPSA3MDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBIaXN0b2dyYW0gdmlkZW9DYXB0
dXJlckFuZHJvaWRTdGFydFRpbWVNc0hpc3RvZ3JhbSA9Ci0gICAgICBIaXN0b2dyYW0uY3JlYXRl
Q291bnRzKCJXZWJSVEMuQW5kcm9pZC5WaWRlb0NhcHR1cmVyQW5kcm9pZC5TdGFydFRpbWVNcyIs
IDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSB2aWRlb0Nh
cHR1cmVyQW5kcm9pZFN0b3BUaW1lTXNIaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0
ZUNvdW50cygiV2ViUlRDLkFuZHJvaWQuVmlkZW9DYXB0dXJlckFuZHJvaWQuU3RvcFRpbWVNcyIs
IDEsIDEwMDAwLCA1MCk7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEhpc3RvZ3JhbSB2aWRlb0Nh
cHR1cmVyQW5kcm9pZFJlc29sdXRpb25IaXN0b2dyYW0gPQotICAgICAgSGlzdG9ncmFtLmNyZWF0
ZUVudW1lcmF0aW9uKCJXZWJSVEMuQW5kcm9pZC5WaWRlb0NhcHR1cmVyQW5kcm9pZC5SZXNvbHV0
aW9uIiwKLSAgICAgICAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ09NTU9OX1JFU09MVVRJ
T05TLnNpemUoKSk7Ci0KLSAgcHJpdmF0ZSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSBjYW1lcmE7
IC8vIE9ubHkgbm9uLW51bGwgd2hpbGUgY2FwdHVyaW5nLgotICBwcml2YXRlIGZpbmFsIEF0b21p
Y0Jvb2xlYW4gaXNDYW1lcmFSdW5uaW5nID0gbmV3IEF0b21pY0Jvb2xlYW4oKTsKLSAgLy8gVXNl
IG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKCkgaW5zdGVhZCBvZiBwb3N0aW5nIGRpcmVjdGx5IHRv
IHRoZSBoYW5kbGVyIC0gdGhpcyB3YXkgYWxsCi0gIC8vIGNhbGxiYWNrcyB3aXRoIGEgc3BlY2lm
ZWQgdG9rZW4gY2FuIGJlIHJlbW92ZWQgYXQgb25jZS4KLSAgcHJpdmF0ZSB2b2xhdGlsZSBIYW5k
bGVyIGNhbWVyYVRocmVhZEhhbmRsZXI7Ci0gIHByaXZhdGUgQ29udGV4dCBhcHBsaWNhdGlvbkNv
bnRleHQ7Ci0gIC8vIFN5bmNocm9uaXphdGlvbiBsb2NrIGZvciB8aWR8LgotICBwcml2YXRlIGZp
bmFsIE9iamVjdCBjYW1lcmFJZExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgaW50IGlk
OwotICBwcml2YXRlIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8gaW5mbzsKLSAg
cHJpdmF0ZSBDYW1lcmFTdGF0aXN0aWNzIGNhbWVyYVN0YXRpc3RpY3M7Ci0gIC8vIFJlbWVtYmVy
IHRoZSByZXF1ZXN0ZWQgZm9ybWF0IGluIGNhc2Ugd2Ugd2FudCB0byBzd2l0Y2ggY2FtZXJhcy4K
LSAgcHJpdmF0ZSBpbnQgcmVxdWVzdGVkV2lkdGg7Ci0gIHByaXZhdGUgaW50IHJlcXVlc3RlZEhl
aWdodDsKLSAgcHJpdmF0ZSBpbnQgcmVxdWVzdGVkRnJhbWVyYXRlOwotICAvLyBUaGUgY2FwdHVy
ZSBmb3JtYXQgd2lsbCBiZSB0aGUgY2xvc2VzdCBzdXBwb3J0ZWQgZm9ybWF0IHRvIHRoZSByZXF1
ZXN0ZWQgZm9ybWF0LgotICBwcml2YXRlIENhcHR1cmVGb3JtYXQgY2FwdHVyZUZvcm1hdDsKLSAg
cHJpdmF0ZSBmaW5hbCBPYmplY3QgcGVuZGluZ0NhbWVyYVN3aXRjaExvY2sgPSBuZXcgT2JqZWN0
KCk7Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBwZW5kaW5nQ2FtZXJhU3dpdGNoOwotICBw
cml2YXRlIENhcHR1cmVyT2JzZXJ2ZXIgZnJhbWVPYnNlcnZlciA9IG51bGw7Ci0gIHByaXZhdGUg
ZmluYWwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyOwotICBwcml2YXRlIGJvb2xl
YW4gZmlyc3RGcmFtZVJlcG9ydGVkOwotICAvLyBBcmJpdHJhcnkgcXVldWUgZGVwdGguICBIaWdo
ZXIgbnVtYmVyIG1lYW5zIG1vcmUgbWVtb3J5IGFsbG9jYXRlZCAmIGhlbGQsCi0gIC8vIGxvd2Vy
IG51bWJlciBtZWFucyBtb3JlIHNlbnNpdGl2aXR5IHRvIHByb2Nlc3NpbmcgdGltZSBpbiB0aGUg
Y2xpZW50IChhbmQKLSAgLy8gcG90ZW50aWFsbHkgc3RhbGxpbmcgdGhlIGNhcHR1cmVyIGlmIGl0
IHJ1bnMgb3V0IG9mIGJ1ZmZlcnMgdG8gd3JpdGUgdG8pLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgTlVNQkVSX09GX0NBUFRVUkVfQlVGRkVSUyA9IDM7Ci0gIHByaXZhdGUgZmluYWwgU2V0
PGJ5dGVbXT4gcXVldWVkQnVmZmVycyA9IG5ldyBIYXNoU2V0PGJ5dGVbXT4oKTsKLSAgcHJpdmF0
ZSBmaW5hbCBib29sZWFuIGlzQ2FwdHVyaW5nVG9UZXh0dXJlOwotICBwcml2YXRlIFN1cmZhY2VU
ZXh0dXJlSGVscGVyIHN1cmZhY2VIZWxwZXI7Ci0gIHByaXZhdGUgZmluYWwgc3RhdGljIGludCBN
QVhfT1BFTl9DQU1FUkFfQVRURU1QVFMgPSAzOwotICBwcml2YXRlIGZpbmFsIHN0YXRpYyBpbnQg
T1BFTl9DQU1FUkFfREVMQVlfTVMgPSA1MDA7Ci0gIHByaXZhdGUgaW50IG9wZW5DYW1lcmFBdHRl
bXB0czsKLQotICAvLyBVc2VkIGZvciBzdGF0aXN0aWNzLgotICBwcml2YXRlIGxvbmcgc3RhcnRT
dGFydFRpbWVOczsgLy8gVGhlIHRpbWUgaW4gbmFub3NlY29uZHMgd2hlbiBzdGFydGluZyB0aGUg
Y2FtZXJhIGJlZ2FuLgotCi0gIC8vIENhbWVyYSBlcnJvciBjYWxsYmFjay4KLSAgcHJpdmF0ZSBm
aW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5FcnJvckNhbGxiYWNrIGNhbWVyYUVycm9yQ2Fs
bGJhY2sgPQotICAgICAgbmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkVycm9yQ2FsbGJhY2so
KSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKGludCBl
cnJvciwgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEgY2FtZXJhKSB7Ci0gICAgICAgICAgU3RyaW5n
IGVycm9yTWVzc2FnZTsKLSAgICAgICAgICBpZiAoZXJyb3IgPT0gYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEuQ0FNRVJBX0VSUk9SX1NFUlZFUl9ESUVEKSB7Ci0gICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgPSAiQ2FtZXJhIHNlcnZlciBkaWVkISI7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGVycm9yTWVzc2FnZSA9ICJDYW1lcmEgZXJyb3I6ICIgKyBlcnJvcjsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICBpZiAo
ZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpZiAoZXJyb3IgPT0gYW5kcm9p
ZC5oYXJkd2FyZS5DYW1lcmEuQ0FNRVJBX0VSUk9SX0VWSUNURUQpIHsKLSAgICAgICAgICAgICAg
ZXZlbnRzSGFuZGxlci5vbkNhbWVyYURpc2Nvbm5lY3RlZCgpOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYUVycm9yKGVycm9yTWVzc2Fn
ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9OwotCi0g
IHB1YmxpYyBzdGF0aWMgVmlkZW9DYXB0dXJlckFuZHJvaWQgY3JlYXRlKFN0cmluZyBuYW1lLCBD
YW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICByZXR1cm4gVmlkZW9DYXB0
dXJlckFuZHJvaWQuY3JlYXRlKG5hbWUsIGV2ZW50c0hhbmRsZXIsIGZhbHNlIC8qIGNhcHR1cmVU
b1RleHR1cmUgKi8pOwotICB9Ci0KLSAgLy8gVXNlIGN0b3IgZGlyZWN0bHkgaW5zdGVhZC4KLSAg
QERlcHJlY2F0ZWQKLSAgcHVibGljIHN0YXRpYyBWaWRlb0NhcHR1cmVyQW5kcm9pZCBjcmVhdGUo
Ci0gICAgICBTdHJpbmcgbmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyLCBi
b29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICB0cnkgewotICAgICAgcmV0dXJuIG5ldyBW
aWRlb0NhcHR1cmVyQW5kcm9pZChuYW1lLCBldmVudHNIYW5kbGVyLCBjYXB0dXJlVG9UZXh0dXJl
KTsKLSAgICB9IGNhdGNoIChSdW50aW1lRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJDb3VsZG4ndCBjcmVhdGUgY2FtZXJhLiIsIGUpOwotICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcHJpbnRTdGFja1RyYWNlKCkgewotICAgIFRocmVh
ZCBjYW1lcmFUaHJlYWQgPSBudWxsOwotICAgIGlmIChjYW1lcmFUaHJlYWRIYW5kbGVyICE9IG51
bGwpIHsKLSAgICAgIGNhbWVyYVRocmVhZCA9IGNhbWVyYVRocmVhZEhhbmRsZXIuZ2V0TG9vcGVy
KCkuZ2V0VGhyZWFkKCk7Ci0gICAgfQotICAgIGlmIChjYW1lcmFUaHJlYWQgIT0gbnVsbCkgewot
ICAgICAgU3RhY2tUcmFjZUVsZW1lbnRbXSBjYW1lcmFTdGFja1RyYWNlcyA9IGNhbWVyYVRocmVh
ZC5nZXRTdGFja1RyYWNlKCk7Ci0gICAgICBpZiAoY2FtZXJhU3RhY2tUcmFjZXMubGVuZ3RoID4g
MCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9DYXB0dXJlckFuZHJvaWQgc3RhY2tz
IHRyYWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VFbGVtZW50IHN0YWNrVHJhY2UgOiBj
YW1lcmFTdGFja1RyYWNlcykgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsIHN0YWNrVHJhY2Uu
dG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBTd2l0
Y2ggY2FtZXJhIHRvIHRoZSBuZXh0IHZhbGlkIGNhbWVyYSBpZC4gVGhpcyBjYW4gb25seSBiZSBj
YWxsZWQgd2hpbGUKLSAgLy8gdGhlIGNhbWVyYSBpcyBydW5uaW5nLgotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKGZpbmFsIENhbWVyYVN3aXRjaEhhbmRsZXIgc3dpdGNo
RXZlbnRzSGFuZGxlcikgewotICAgIGlmIChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXROdW1i
ZXJPZkNhbWVyYXMoKSA8IDIpIHsKLSAgICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51
bGwpIHsKLSAgICAgICAgc3dpdGNoRXZlbnRzSGFuZGxlci5vbkNhbWVyYVN3aXRjaEVycm9yKCJO
byBjYW1lcmEgdG8gc3dpdGNoIHRvLiIpOwotICAgICAgfQotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdDYW1lcmFTd2l0Y2hMb2NrKSB7Ci0gICAgICBpZiAo
cGVuZGluZ0NhbWVyYVN3aXRjaCkgewotICAgICAgICAvLyBEbyBub3QgaGFuZGxlIG11bHRpcGxl
IGNhbWVyYSBzd2l0Y2ggcmVxdWVzdCB0byBhdm9pZCBibG9ja2luZwotICAgICAgICAvLyBjYW1l
cmEgdGhyZWFkIGJ5IGhhbmRsaW5nIHRvbyBtYW55IHN3aXRjaCByZXF1ZXN0IGZyb20gYSBxdWV1
ZS4KLSAgICAgICAgTG9nZ2luZy53KFRBRywgIklnbm9yaW5nIGNhbWVyYSBzd2l0Y2ggcmVxdWVz
dC4iKTsKLSAgICAgICAgaWYgKHN3aXRjaEV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAg
ICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiUGVuZGluZyBjYW1l
cmEgc3dpdGNoIGFscmVhZHkgaW4gcHJvZ3Jlc3MuIik7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgcGVuZGluZ0NhbWVyYVN3aXRjaCA9IHRydWU7Ci0gICAgfQot
ICAgIGZpbmFsIGJvb2xlYW4gZGlkUG9zdCA9IG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBzd2l0Y2hDYW1lcmFPbkNhbWVyYVRocmVhZCgpOwotICAgICAgICBzeW5jaHJvbml6
ZWQgKHBlbmRpbmdDYW1lcmFTd2l0Y2hMb2NrKSB7Ci0gICAgICAgICAgcGVuZGluZ0NhbWVyYVN3
aXRjaCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzd2l0Y2hFdmVudHNIYW5kbGVy
ICE9IG51bGwpIHsKLSAgICAgICAgICBzd2l0Y2hFdmVudHNIYW5kbGVyLm9uQ2FtZXJhU3dpdGNo
RG9uZSgKLSAgICAgICAgICAgICAgaW5mby5mYWNpbmcgPT0gYW5kcm9pZC5oYXJkd2FyZS5DYW1l
cmEuQ2FtZXJhSW5mby5DQU1FUkFfRkFDSU5HX0ZST05UKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0pOwotICAgIGlmICghZGlkUG9zdCAmJiBzd2l0Y2hFdmVudHNIYW5kbGVyICE9IG51bGwp
IHsKLSAgICAgIHN3aXRjaEV2ZW50c0hhbmRsZXIub25DYW1lcmFTd2l0Y2hFcnJvcigiQ2FtZXJh
IGlzIHN0b3BwZWQuIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVjb25maWd1cmUgdGhlIGNhbWVy
YSB0byBjYXB0dXJlIGluIGEgbmV3IGZvcm1hdC4gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQg
d2hpbGUgdGhlIGNhbWVyYQotICAvLyBpcyBydW5uaW5nLgotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdChmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWln
aHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBtYXliZVBvc3RPbkNhbWVyYVRocmVhZChu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgc3RhcnRQcmV2aWV3T25DYW1lcmFUaHJlYWQod2lkdGgsIGhlaWdodCwgZnJh
bWVyYXRlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIEhlbHBlciBmdW5jdGlvbiB0
byByZXRyaWV2ZSB0aGUgY3VycmVudCBjYW1lcmEgaWQgc3luY2hyb25vdXNseS4gTm90ZSB0aGF0
IHRoZSBjYW1lcmEgaWQgbWlnaHQKLSAgLy8gY2hhbmdlIGF0IGFueSBwb2ludCBieSBzd2l0Y2hD
YW1lcmEoKSBjYWxscy4KLSAgcHJpdmF0ZSBpbnQgZ2V0Q3VycmVudENhbWVyYUlkKCkgewotICAg
IHN5bmNocm9uaXplZCAoY2FtZXJhSWRMb2NrKSB7Ci0gICAgICByZXR1cm4gaWQ7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgVmlkZW9DYXB0dXJlciBpcyBzZXR1cCB0
byBjYXB0dXJlIHZpZGVvIGZyYW1lcyB0byBhIFN1cmZhY2VUZXh0dXJlLgotICBwdWJsaWMgYm9v
bGVhbiBpc0NhcHR1cmluZ1RvVGV4dHVyZSgpIHsKLSAgICByZXR1cm4gaXNDYXB0dXJpbmdUb1Rl
eHR1cmU7Ci0gIH0KLQotICBwdWJsaWMgVmlkZW9DYXB0dXJlckFuZHJvaWQoCi0gICAgICBTdHJp
bmcgY2FtZXJhTmFtZSwgQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNIYW5kbGVyLCBib29sZWFu
IGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICBpZiAoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0
TnVtYmVyT2ZDYW1lcmFzKCkgPT0gMCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRp
b24oIk5vIGNhbWVyYXMgYXZhaWxhYmxlIik7Ci0gICAgfQotICAgIGlmIChjYW1lcmFOYW1lID09
IG51bGwgfHwgY2FtZXJhTmFtZS5lcXVhbHMoIiIpKSB7Ci0gICAgICB0aGlzLmlkID0gMDsKLSAg
ICB9IGVsc2UgewotICAgICAgdGhpcy5pZCA9IENhbWVyYTFFbnVtZXJhdG9yLmdldENhbWVyYUlu
ZGV4KGNhbWVyYU5hbWUpOwotICAgIH0KLSAgICB0aGlzLmV2ZW50c0hhbmRsZXIgPSBldmVudHNI
YW5kbGVyOwotICAgIGlzQ2FwdHVyaW5nVG9UZXh0dXJlID0gY2FwdHVyZVRvVGV4dHVyZTsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9DYXB0dXJlckFuZHJvaWQgaXNDYXB0dXJpbmdUb1RleHR1
cmUgOiAiICsgaXNDYXB0dXJpbmdUb1RleHR1cmUpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNo
ZWNrSXNPbkNhbWVyYVRocmVhZCgpIHsKLSAgICBpZiAoY2FtZXJhVGhyZWFkSGFuZGxlciA9PSBu
dWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGlzIG5vdCBpbml0aWFsaXplZCAt
IGNhbid0IGNoZWNrIHRocmVhZC4iKTsKLSAgICB9IGVsc2UgaWYgKFRocmVhZC5jdXJyZW50VGhy
ZWFkKCkgIT0gY2FtZXJhVGhyZWFkSGFuZGxlci5nZXRMb29wZXIoKS5nZXRUaHJlYWQoKSkgewot
ICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV3JvbmcgdGhyZWFkIik7Ci0g
ICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIG1heWJlUG9zdE9uQ2FtZXJhVGhyZWFkKFJ1
bm5hYmxlIHJ1bm5hYmxlKSB7Ci0gICAgcmV0dXJuIG1heWJlUG9zdERlbGF5ZWRPbkNhbWVyYVRo
cmVhZCgwIC8qIGRlbGF5TXMgKi8sIHJ1bm5hYmxlKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVh
biBtYXliZVBvc3REZWxheWVkT25DYW1lcmFUaHJlYWQoaW50IGRlbGF5TXMsIFJ1bm5hYmxlIHJ1
bm5hYmxlKSB7Ci0gICAgcmV0dXJuIGNhbWVyYVRocmVhZEhhbmRsZXIgIT0gbnVsbCAmJiBpc0Nh
bWVyYVJ1bm5pbmcuZ2V0KCkKLSAgICAgICAgJiYgY2FtZXJhVGhyZWFkSGFuZGxlci5wb3N0QXRU
aW1lKAotICAgICAgICAgICAgICAgcnVubmFibGUsIHRoaXMgLyogdG9rZW4gKi8sIFN5c3RlbUNs
b2NrLnVwdGltZU1pbGxpcygpICsgZGVsYXlNcyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSIpOwotICB9
Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhbGl6ZWQoKSB7Ci0gICAgcmV0dXJuIGFwcGxp
Y2F0aW9uQ29udGV4dCAhPSBudWxsICYmIGZyYW1lT2JzZXJ2ZXIgIT0gbnVsbDsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBpbml0aWFsaXplKFN1cmZhY2VUZXh0dXJlSGVscGVy
IHN1cmZhY2VUZXh0dXJlSGVscGVyLCBDb250ZXh0IGFwcGxpY2F0aW9uQ29udGV4dCwKLSAgICAg
IENhcHR1cmVyT2JzZXJ2ZXIgZnJhbWVPYnNlcnZlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJp
bml0aWFsaXplIik7Ci0gICAgaWYgKGFwcGxpY2F0aW9uQ29udGV4dCA9PSBudWxsKSB7Ci0gICAg
ICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJhcHBsaWNhdGlvbkNvbnRleHQg
bm90IHNldC4iKTsKLSAgICB9Ci0gICAgaWYgKGZyYW1lT2JzZXJ2ZXIgPT0gbnVsbCkgewotICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiZnJhbWVPYnNlcnZlciBub3Qg
c2V0LiIpOwotICAgIH0KLSAgICBpZiAoaXNJbml0aWFsaXplZCgpKSB7Ci0gICAgICB0aHJvdyBu
ZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJBbHJlYWR5IGluaXRpYWxpemVkIik7Ci0gICAgfQot
ICAgIHRoaXMuYXBwbGljYXRpb25Db250ZXh0ID0gYXBwbGljYXRpb25Db250ZXh0OwotICAgIHRo
aXMuZnJhbWVPYnNlcnZlciA9IGZyYW1lT2JzZXJ2ZXI7Ci0gICAgdGhpcy5zdXJmYWNlSGVscGVy
ID0gc3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgdGhpcy5jYW1lcmFUaHJlYWRIYW5kbGVyID0K
LSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIgPT0gbnVsbCA/IG51bGwgOiBzdXJmYWNlVGV4
dHVyZUhlbHBlci5nZXRIYW5kbGVyKCk7Ci0gIH0KLQotICAvLyBOb3RlIHRoYXQgdGhpcyBhY3R1
YWxseSBvcGVucyB0aGUgY2FtZXJhLCBhbmQgQ2FtZXJhIGNhbGxiYWNrcyBydW4gb24gdGhlCi0g
IC8vIHRocmVhZCB0aGF0IGNhbGxzIG9wZW4oKSwgc28gdGhpcyBpcyBkb25lIG9uIHRoZSBDYW1l
cmFUaHJlYWQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzdGFydENhcHR1cmUoZmluYWwg
aW50IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgInN0YXJ0Q2FwdHVyZSByZXF1ZXN0ZWQ6ICIgKyB3aWR0aCArICJ4IiAr
IGhlaWdodCArICJAIiArIGZyYW1lcmF0ZSk7Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsK
LSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oInN0YXJ0Q2FwdHVyZSBjYWxs
ZWQgaW4gdW5pbml0aWFsaXplZCBzdGF0ZSIpOwotICAgIH0KLSAgICBpZiAoc3VyZmFjZUhlbHBl
ciA9PSBudWxsKSB7Ci0gICAgICBmcmFtZU9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKGZhbHNl
IC8qIHN1Y2Nlc3MgKi8pOwotICAgICAgaWYgKGV2ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAg
ICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoIk5vIFN1cmZhY2VUZXh0dXJlIGNyZWF0
ZWQuIik7Ci0gICAgICB9Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpc0NhbWVyYVJ1
bm5pbmcuZ2V0QW5kU2V0KHRydWUpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FtZXJhIGhh
cyBhbHJlYWR5IGJlZW4gc3RhcnRlZC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZmlu
YWwgYm9vbGVhbiBkaWRQb3N0ID0gbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IG9wZW5DYW1lcmFBdHRlbXB0cyA9IDA7Ci0gICAgICAgIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhy
ZWFkKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgaWYg
KCFkaWRQb3N0KSB7Ci0gICAgICBmcmFtZU9ic2VydmVyLm9uQ2FwdHVyZXJTdGFydGVkKGZhbHNl
KTsKLSAgICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAgICAgICAgZXZlbnRzSGFu
ZGxlci5vbkNhbWVyYUVycm9yKCJDb3VsZCBub3QgcG9zdCB0YXNrIHRvIGNhbWVyYSB0aHJlYWQu
Iik7Ci0gICAgICB9Ci0gICAgICBpc0NhbWVyYVJ1bm5pbmcuc2V0KGZhbHNlKTsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgc3RhcnRDYXB0dXJlT25DYW1lcmFUaHJlYWQoZmluYWwgaW50
IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgY2hl
Y2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgc3RhcnRTdGFydFRpbWVOcyA9IFN5c3RlbS5uYW5v
VGltZSgpOwotICAgIGlmICghaXNDYW1lcmFSdW5uaW5nLmdldCgpKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAic3RhcnRDYXB0dXJlT25DYW1lcmFUaHJlYWQ6IENhbWVyYSBpcyBzdG9wcGVkIik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYW1lcmEgIT0gbnVsbCkgewotICAgICAg
TG9nZ2luZy5lKFRBRywgInN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhyZWFkOiBDYW1lcmEgaGFzIGFs
cmVhZHkgYmVlbiBzdGFydGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0aGlzLmZp
cnN0RnJhbWVSZXBvcnRlZCA9IGZhbHNlOwotCi0gICAgdHJ5IHsKLSAgICAgIHRyeSB7Ci0gICAg
ICAgIHN5bmNocm9uaXplZCAoY2FtZXJhSWRMb2NrKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRB
RywgIk9wZW5pbmcgY2FtZXJhICIgKyBpZCk7Ci0gICAgICAgICAgaWYgKGV2ZW50c0hhbmRsZXIg
IT0gbnVsbCkgewotICAgICAgICAgICAgZXZlbnRzSGFuZGxlci5vbkNhbWVyYU9wZW5pbmcoQ2Ft
ZXJhMUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZShpZCkpOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBjYW1lcmEgPSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5vcGVuKGlkKTsKLSAgICAgICAgICBp
bmZvID0gbmV3IGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8oKTsKLSAgICAgICAg
ICBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5nZXRDYW1lcmFJbmZvKGlkLCBpbmZvKTsKLSAgICAg
ICAgfQotICAgICAgfSBjYXRjaCAoUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIG9wZW5D
YW1lcmFBdHRlbXB0cysrOwotICAgICAgICBpZiAob3BlbkNhbWVyYUF0dGVtcHRzIDwgTUFYX09Q
RU5fQ0FNRVJBX0FUVEVNUFRTKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYS5v
cGVuIGZhaWxlZCwgcmV0cnlpbmciLCBlKTsKLSAgICAgICAgICBtYXliZVBvc3REZWxheWVkT25D
YW1lcmFUaHJlYWQoT1BFTl9DQU1FUkFfREVMQVlfTVMsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAg
ICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICAgICAgICBzdGFydENhcHR1cmVPbkNhbWVyYVRocmVhZCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJh
dGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0pOwotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICB0aHJvdyBlOwotICAgICAgfQotCi0gICAgICBjYW1lcmEuc2V0UHJl
dmlld1RleHR1cmUoc3VyZmFjZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLQotICAgICAg
TG9nZ2luZy5kKFRBRywgIkNhbWVyYSBvcmllbnRhdGlvbjogIiArIGluZm8ub3JpZW50YXRpb24g
KyAiIC5EZXZpY2Ugb3JpZW50YXRpb246ICIKLSAgICAgICAgICAgICAgKyBnZXREZXZpY2VPcmll
bnRhdGlvbigpKTsKLSAgICAgIGNhbWVyYS5zZXRFcnJvckNhbGxiYWNrKGNhbWVyYUVycm9yQ2Fs
bGJhY2spOwotICAgICAgc3RhcnRQcmV2aWV3T25DYW1lcmFUaHJlYWQod2lkdGgsIGhlaWdodCwg
ZnJhbWVyYXRlKTsKLSAgICAgIGZyYW1lT2JzZXJ2ZXIub25DYXB0dXJlclN0YXJ0ZWQodHJ1ZSk7
Ci0gICAgICBpZiAoaXNDYXB0dXJpbmdUb1RleHR1cmUpIHsKLSAgICAgICAgc3VyZmFjZUhlbHBl
ci5zdGFydExpc3RlbmluZyh0aGlzKTsKLSAgICAgIH0KLQotICAgICAgLy8gU3RhcnQgY2FtZXJh
IG9ic2VydmVyLgotICAgICAgY2FtZXJhU3RhdGlzdGljcyA9IG5ldyBDYW1lcmFTdGF0aXN0aWNz
KHN1cmZhY2VIZWxwZXIsIGV2ZW50c0hhbmRsZXIpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9u
IHwgUnVudGltZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAic3RhcnRDYXB0
dXJlIGZhaWxlZCIsIGUpOwotICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjYW1lcmEgaXMgcmVsZWFz
ZWQuCi0gICAgICBzdG9wQ2FwdHVyZU9uQ2FtZXJhVGhyZWFkKHRydWUgLyogc3RvcEhhbmRsZXIg
Ki8pOwotICAgICAgZnJhbWVPYnNlcnZlci5vbkNhcHR1cmVyU3RhcnRlZChmYWxzZSk7Ci0gICAg
ICBpZiAoZXZlbnRzSGFuZGxlciAhPSBudWxsKSB7Ci0gICAgICAgIGV2ZW50c0hhbmRsZXIub25D
YW1lcmFFcnJvcigiQ2FtZXJhIGNhbiBub3QgYmUgc3RhcnRlZC4iKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICAvLyAoUmUpc3RhcnQgcHJldmlldyB3aXRoIHRoZSBjbG9zZXN0IHN1cHBvcnRl
ZCBmb3JtYXQgdG8gfHdpZHRofCB4IHxoZWlnaHR8IEAgfGZyYW1lcmF0ZXwuCi0gIHByaXZhdGUg
dm9pZCBzdGFydFByZXZpZXdPbkNhbWVyYVRocmVhZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGlu
dCBmcmFtZXJhdGUpIHsKLSAgICBjaGVja0lzT25DYW1lcmFUaHJlYWQoKTsKLSAgICBpZiAoIWlz
Q2FtZXJhUnVubmluZy5nZXQoKSB8fCBjYW1lcmEgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5l
KFRBRywgInN0YXJ0UHJldmlld09uQ2FtZXJhVGhyZWFkOiBDYW1lcmEgaXMgc3RvcHBlZCIpOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMb2dnaW5nLmQoCi0gICAgICAgIFRBRywgInN0YXJ0
UHJldmlld09uQ2FtZXJhVGhyZWFkIHJlcXVlc3RlZDogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0
ICsgIkAiICsgZnJhbWVyYXRlKTsKLQotICAgIHJlcXVlc3RlZFdpZHRoID0gd2lkdGg7Ci0gICAg
cmVxdWVzdGVkSGVpZ2h0ID0gaGVpZ2h0OwotICAgIHJlcXVlc3RlZEZyYW1lcmF0ZSA9IGZyYW1l
cmF0ZTsKLQotICAgIC8vIEZpbmQgY2xvc2VzdCBzdXBwb3J0ZWQgZm9ybWF0IGZvciB8d2lkdGh8
IHggfGhlaWdodHwgQCB8ZnJhbWVyYXRlfC4KLSAgICBmaW5hbCBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5QYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBjYW1lcmEuZ2V0UGFyYW1ldGVycygpOwotICAg
IGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZT4gc3VwcG9ydGVkRnJhbWVy
YXRlcyA9Ci0gICAgICAgIENhbWVyYTFFbnVtZXJhdG9yLmNvbnZlcnRGcmFtZXJhdGVzKHBhcmFt
ZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld0Zwc1JhbmdlKCkpOwotICAgIExvZ2dpbmcuZChUQUcs
ICJBdmFpbGFibGUgZnBzIHJhbmdlczogIiArIHN1cHBvcnRlZEZyYW1lcmF0ZXMpOwotCi0gICAg
ZmluYWwgQ2FwdHVyZUZvcm1hdC5GcmFtZXJhdGVSYW5nZSBmcHNSYW5nZSA9Ci0gICAgICAgIENh
bWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkRnJhbWVyYXRlUmFuZ2Uo
c3VwcG9ydGVkRnJhbWVyYXRlcywgZnJhbWVyYXRlKTsKLQotICAgIGZpbmFsIExpc3Q8U2l6ZT4g
c3VwcG9ydGVkUHJldmlld1NpemVzID0KLSAgICAgICAgQ2FtZXJhMUVudW1lcmF0b3IuY29udmVy
dFNpemVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUHJldmlld1NpemVzKCkpOwotICAgIGZpbmFs
IFNpemUgcHJldmlld1NpemUgPQotICAgICAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuZ2V0
Q2xvc2VzdFN1cHBvcnRlZFNpemUoc3VwcG9ydGVkUHJldmlld1NpemVzLCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQucmVwb3J0Q2FtZXJhUmVzb2x1dGlvbigK
LSAgICAgICAgdmlkZW9DYXB0dXJlckFuZHJvaWRSZXNvbHV0aW9uSGlzdG9ncmFtLCBwcmV2aWV3
U2l6ZSk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF2YWlsYWJsZSBwcmV2aWV3IHNpemVzOiAiICsg
c3VwcG9ydGVkUHJldmlld1NpemVzKTsKLQotICAgIGZpbmFsIENhcHR1cmVGb3JtYXQgY2FwdHVy
ZUZvcm1hdCA9Ci0gICAgICAgIG5ldyBDYXB0dXJlRm9ybWF0KHByZXZpZXdTaXplLndpZHRoLCBw
cmV2aWV3U2l6ZS5oZWlnaHQsIGZwc1JhbmdlKTsKLQotICAgIC8vIENoZWNrIGlmIHdlIGFyZSBh
bHJlYWR5IHVzaW5nIHRoaXMgY2FwdHVyZSBmb3JtYXQsIHRoZW4gd2UgZG9uJ3QgbmVlZCB0byBk
byBhbnl0aGluZy4KLSAgICBpZiAoY2FwdHVyZUZvcm1hdC5lcXVhbHModGhpcy5jYXB0dXJlRm9y
bWF0KSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFVwZGF0ZSBjYW1lcmEgcGFy
YW1ldGVycy4KLSAgICBMb2dnaW5nLmQoVEFHLCAiaXNWaWRlb1N0YWJpbGl6YXRpb25TdXBwb3J0
ZWQ6ICIgKyBwYXJhbWV0ZXJzLmlzVmlkZW9TdGFiaWxpemF0aW9uU3VwcG9ydGVkKCkpOwotICAg
IGlmIChwYXJhbWV0ZXJzLmlzVmlkZW9TdGFiaWxpemF0aW9uU3VwcG9ydGVkKCkpIHsKLSAgICAg
IHBhcmFtZXRlcnMuc2V0VmlkZW9TdGFiaWxpemF0aW9uKHRydWUpOwotICAgIH0KLSAgICAvLyBO
b3RlOiBzZXRSZWNvcmRpbmdIaW50KHRydWUpIGFjdHVhbGx5IGRlY3JlYXNlIGZyYW1lIHJhdGUg
b24gTjUuCi0gICAgLy8gcGFyYW1ldGVycy5zZXRSZWNvcmRpbmdIaW50KHRydWUpOwotICAgIGlm
IChjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5tYXggPiAwKSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNl
dFByZXZpZXdGcHNSYW5nZShjYXB0dXJlRm9ybWF0LmZyYW1lcmF0ZS5taW4sIGNhcHR1cmVGb3Jt
YXQuZnJhbWVyYXRlLm1heCk7Ci0gICAgfQotICAgIHBhcmFtZXRlcnMuc2V0UHJldmlld1NpemUo
cHJldmlld1NpemUud2lkdGgsIHByZXZpZXdTaXplLmhlaWdodCk7Ci0KLSAgICBpZiAoIWlzQ2Fw
dHVyaW5nVG9UZXh0dXJlKSB7Ci0gICAgICBwYXJhbWV0ZXJzLnNldFByZXZpZXdGb3JtYXQoY2Fw
dHVyZUZvcm1hdC5pbWFnZUZvcm1hdCk7Ci0gICAgfQotICAgIC8vIFBpY3R1cmUgc2l6ZSBpcyBm
b3IgdGFraW5nIHBpY3R1cmVzIGFuZCBub3QgZm9yIHByZXZpZXcvdmlkZW8sIGJ1dCB3ZSBuZWVk
IHRvIHNldCBpdCBhbnl3YXkKLSAgICAvLyBhcyBhIHdvcmthcm91bmQgZm9yIGFuIGFzcGVjdCBy
YXRpbyBwcm9ibGVtIG9uIE5leHVzIDcuCi0gICAgZmluYWwgU2l6ZSBwaWN0dXJlU2l6ZSA9IENh
bWVyYUVudW1lcmF0aW9uQW5kcm9pZC5nZXRDbG9zZXN0U3VwcG9ydGVkU2l6ZSgKLSAgICAgICAg
Q2FtZXJhMUVudW1lcmF0b3IuY29udmVydFNpemVzKHBhcmFtZXRlcnMuZ2V0U3VwcG9ydGVkUGlj
dHVyZVNpemVzKCkpLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBwYXJhbWV0ZXJzLnNldFBpY3R1cmVT
aXplKHBpY3R1cmVTaXplLndpZHRoLCBwaWN0dXJlU2l6ZS5oZWlnaHQpOwotCi0gICAgLy8gVGVt
cG9yYXJpbHkgc3RvcCBwcmV2aWV3IGlmIGl0J3MgYWxyZWFkeSBydW5uaW5nLgotICAgIGlmICh0
aGlzLmNhcHR1cmVGb3JtYXQgIT0gbnVsbCkgewotICAgICAgY2FtZXJhLnN0b3BQcmV2aWV3KCk7
Ci0gICAgICAvLyBDYWxsaW5nIHxzZXRQcmV2aWV3Q2FsbGJhY2tXaXRoQnVmZmVyfCB3aXRoIG51
bGwgc2hvdWxkIGNsZWFyIHRoZSBpbnRlcm5hbCBjYW1lcmEgYnVmZmVyCi0gICAgICAvLyBxdWV1
ZSwgYnV0IHNvbWV0aW1lcyB3ZSByZWNlaXZlIGEgZnJhbWUgd2l0aCB0aGUgb2xkIHJlc29sdXRp
b24gYWZ0ZXIgdGhpcyBjYWxsIGFueXdheS4KLSAgICAgIGNhbWVyYS5zZXRQcmV2aWV3Q2FsbGJh
Y2tXaXRoQnVmZmVyKG51bGwpOwotICAgIH0KLQotICAgIExpc3Q8U3RyaW5nPiBmb2N1c01vZGVz
ID0gcGFyYW1ldGVycy5nZXRTdXBwb3J0ZWRGb2N1c01vZGVzKCk7Ci0gICAgaWYgKGZvY3VzTW9k
ZXMuY29udGFpbnMoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycy5GT0NVU19NT0RF
X0NPTlRJTlVPVVNfVklERU8pKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiRW5hYmxlIGNvbnRp
bnVvdXMgYXV0byBmb2N1cyBtb2RlLiIpOwotICAgICAgcGFyYW1ldGVycy5zZXRGb2N1c01vZGUo
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuUGFyYW1ldGVycy5GT0NVU19NT0RFX0NPTlRJTlVPVVNf
VklERU8pOwotICAgIH0KLQotICAgIC8vIChSZSlzdGFydCBwcmV2aWV3LgotICAgIExvZ2dpbmcu
ZChUQUcsICJTdGFydCBjYXB0dXJpbmc6ICIgKyBjYXB0dXJlRm9ybWF0KTsKLSAgICB0aGlzLmNh
cHR1cmVGb3JtYXQgPSBjYXB0dXJlRm9ybWF0OwotCi0gICAgY2FtZXJhLnNldFBhcmFtZXRlcnMo
cGFyYW1ldGVycyk7Ci0gICAgLy8gQ2FsY3VsYXRlIG9yaWVudGF0aW9uIG1hbnVhbGx5IGFuZCBz
ZW5kIGl0IGFzIENWTyBpbnN0ZWFkLgotICAgIGNhbWVyYS5zZXREaXNwbGF5T3JpZW50YXRpb24o
MCAvKiBkZWdyZWVzICovKTsKLSAgICBpZiAoIWlzQ2FwdHVyaW5nVG9UZXh0dXJlKSB7Ci0gICAg
ICBxdWV1ZWRCdWZmZXJzLmNsZWFyKCk7Ci0gICAgICBmaW5hbCBpbnQgZnJhbWVTaXplID0gY2Fw
dHVyZUZvcm1hdC5mcmFtZVNpemUoKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNQkVS
X09GX0NBUFRVUkVfQlVGRkVSUzsgKytpKSB7Ci0gICAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgYnVm
ZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChmcmFtZVNpemUpOwotICAgICAgICBxdWV1
ZWRCdWZmZXJzLmFkZChidWZmZXIuYXJyYXkoKSk7Ci0gICAgICAgIGNhbWVyYS5hZGRDYWxsYmFj
a0J1ZmZlcihidWZmZXIuYXJyYXkoKSk7Ci0gICAgICB9Ci0gICAgICBjYW1lcmEuc2V0UHJldmll
d0NhbGxiYWNrV2l0aEJ1ZmZlcih0aGlzKTsKLSAgICB9Ci0gICAgY2FtZXJhLnN0YXJ0UHJldmll
dygpOwotICB9Ci0KLSAgLy8gQmxvY2tzIHVudGlsIGNhbWVyYSBpcyBrbm93biB0byBiZSBzdG9w
cGVkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc3RvcENhcHR1cmUoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wQ2FwdHVyZSIpOwot
ICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGJhcnJpZXIgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7
Ci0gICAgZmluYWwgYm9vbGVhbiBkaWRQb3N0ID0gbWF5YmVQb3N0T25DYW1lcmFUaHJlYWQobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIHN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQodHJ1ZSAvKiBzdG9wSGFuZGxlciAq
Lyk7Ci0gICAgICAgIGJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAg
aWYgKCFkaWRQb3N0KSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ2FsbGluZyBzdG9wQ2FwdHVy
ZSgpIGZvciBhbHJlYWR5IHN0b3BwZWQgY2FtZXJhLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoIWJhcnJpZXIuYXdhaXQoQ0FNRVJBX1NUT1BfVElNRU9VVF9NUywgVGltZVVuaXQu
TUlMTElTRUNPTkRTKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNhbWVyYSBzdG9wIHRpbWVv
dXQiKTsKLSAgICAgIHByaW50U3RhY2tUcmFjZSgpOwotICAgICAgaWYgKGV2ZW50c0hhbmRsZXIg
IT0gbnVsbCkgewotICAgICAgICBldmVudHNIYW5kbGVyLm9uQ2FtZXJhRXJyb3IoIkNhbWVyYSBz
dG9wIHRpbWVvdXQiKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZnJhbWVPYnNlcnZlci5vbkNhcHR1
cmVyU3RvcHBlZCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wQ2FwdHVyZSBkb25lIik7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgc3RvcENhcHR1cmVPbkNhbWVyYVRocmVhZChib29sZWFuIHN0
b3BIYW5kbGVyKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAgTG9nZ2luZy5k
KFRBRywgInN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQiKTsKLSAgICBmaW5hbCBsb25nIHN0b3BT
dGFydFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAvLyBOb3RlIHRoYXQgdGhlIGNhbWVy
YSBtaWdodCBzdGlsbCBub3QgYmUgc3RhcnRlZCBoZXJlIGlmIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJh
VGhyZWFkIGZhaWxlZAotICAgIC8vIGFuZCB3ZSBwb3N0ZWQgYSByZXRyeS4KLQotICAgIC8vIE1h
a2Ugc3VyZSBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGlzIG5vdCBjYWxsZWQgYW55bW9yZS4K
LSAgICBpZiAoc3VyZmFjZUhlbHBlciAhPSBudWxsKSB7Ci0gICAgICBzdXJmYWNlSGVscGVyLnN0
b3BMaXN0ZW5pbmcoKTsKLSAgICB9Ci0gICAgaWYgKHN0b3BIYW5kbGVyKSB7Ci0gICAgICAvLyBD
bGVhciB0aGUgY2FtZXJhVGhyZWFkSGFuZGxlciBmaXJzdCwgaW4gY2FzZSBzdG9wUHJldmlldyBv
cgotICAgICAgLy8gb3RoZXIgZHJpdmVyIGNvZGUgZGVhZGxvY2tzLiBEZWFkbG9jayBpbgotICAg
ICAgLy8gYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuX3N0b3BQcmV2aWV3KE5hdGl2ZSBNZXRob2Qp
IGhhcwotICAgICAgLy8gYmVlbiBvYnNlcnZlZCBvbiBOZXh1cyA1IChoYW1tZXJoZWFkKSwgT1Mg
dmVyc2lvbiBMTVk0OEkuCi0gICAgICAvLyBUaGUgY2FtZXJhIG1pZ2h0IHBvc3QgYW5vdGhlciBv
bmUgb3IgdHdvIHByZXZpZXcgZnJhbWVzCi0gICAgICAvLyBiZWZvcmUgc3RvcHBlZCwgc28gd2Ug
aGF2ZSB0byBjaGVjayB8aXNDYW1lcmFSdW5uaW5nfC4KLSAgICAgIC8vIFJlbW92ZSBhbGwgcGVu
ZGluZyBSdW5uYWJsZXMgcG9zdGVkIGZyb20gfHRoaXN8LgotICAgICAgaXNDYW1lcmFSdW5uaW5n
LnNldChmYWxzZSk7Ci0gICAgICBjYW1lcmFUaHJlYWRIYW5kbGVyLnJlbW92ZUNhbGxiYWNrc0Fu
ZE1lc3NhZ2VzKHRoaXMgLyogdG9rZW4gKi8pOwotICAgIH0KLSAgICBpZiAoY2FtZXJhU3RhdGlz
dGljcyAhPSBudWxsKSB7Ci0gICAgICBjYW1lcmFTdGF0aXN0aWNzLnJlbGVhc2UoKTsKLSAgICAg
IGNhbWVyYVN0YXRpc3RpY3MgPSBudWxsOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiU3Rv
cCBwcmV2aWV3LiIpOwotICAgIGlmIChjYW1lcmEgIT0gbnVsbCkgewotICAgICAgY2FtZXJhLnN0
b3BQcmV2aWV3KCk7Ci0gICAgICBjYW1lcmEuc2V0UHJldmlld0NhbGxiYWNrV2l0aEJ1ZmZlcihu
dWxsKTsKLSAgICB9Ci0gICAgcXVldWVkQnVmZmVycy5jbGVhcigpOwotICAgIGNhcHR1cmVGb3Jt
YXQgPSBudWxsOwotCi0gICAgTG9nZ2luZy5kKFRBRywgIlJlbGVhc2UgY2FtZXJhLiIpOwotICAg
IGlmIChjYW1lcmEgIT0gbnVsbCkgewotICAgICAgY2FtZXJhLnJlbGVhc2UoKTsKLSAgICAgIGNh
bWVyYSA9IG51bGw7Ci0gICAgfQotICAgIGlmIChldmVudHNIYW5kbGVyICE9IG51bGwpIHsKLSAg
ICAgIGV2ZW50c0hhbmRsZXIub25DYW1lcmFDbG9zZWQoKTsKLSAgICB9Ci0gICAgZmluYWwgaW50
IHN0b3BUaW1lTXMgPSAoaW50KSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcyhTeXN0ZW0u
bmFub1RpbWUoKSAtIHN0b3BTdGFydFRpbWUpOwotICAgIHZpZGVvQ2FwdHVyZXJBbmRyb2lkU3Rv
cFRpbWVNc0hpc3RvZ3JhbS5hZGRTYW1wbGUoc3RvcFRpbWVNcyk7Ci0gICAgTG9nZ2luZy5kKFRB
RywgInN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQgZG9uZSIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHN3aXRjaENhbWVyYU9uQ2FtZXJhVGhyZWFkKCkgewotICAgIGNoZWNrSXNPbkNhbWVyYVRo
cmVhZCgpOwotICAgIGlmICghaXNDYW1lcmFSdW5uaW5nLmdldCgpKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCAic3dpdGNoQ2FtZXJhT25DYW1lcmFUaHJlYWQ6IENhbWVyYSBpcyBzdG9wcGVkIik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJzd2l0Y2hDYW1lcmFP
bkNhbWVyYVRocmVhZCIpOwotICAgIHN0b3BDYXB0dXJlT25DYW1lcmFUaHJlYWQoZmFsc2UgLyog
c3RvcEhhbmRsZXIgKi8pOwotICAgIHN5bmNocm9uaXplZCAoY2FtZXJhSWRMb2NrKSB7Ci0gICAg
ICBpZCA9IChpZCArIDEpICUgYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEuZ2V0TnVtYmVyT2ZDYW1l
cmFzKCk7Ci0gICAgfQotICAgIHN0YXJ0Q2FwdHVyZU9uQ2FtZXJhVGhyZWFkKHJlcXVlc3RlZFdp
ZHRoLCByZXF1ZXN0ZWRIZWlnaHQsIHJlcXVlc3RlZEZyYW1lcmF0ZSk7Ci0gICAgTG9nZ2luZy5k
KFRBRywgInN3aXRjaENhbWVyYU9uQ2FtZXJhVGhyZWFkIGRvbmUiKTsKLSAgfQotCi0gIHByaXZh
dGUgaW50IGdldERldmljZU9yaWVudGF0aW9uKCkgewotICAgIGludCBvcmllbnRhdGlvbiA9IDA7
Ci0KLSAgICBXaW5kb3dNYW5hZ2VyIHdtID0gKFdpbmRvd01hbmFnZXIpIGFwcGxpY2F0aW9uQ29u
dGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwotICAgIHN3aXRj
aCAod20uZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRSb3RhdGlvbigpKSB7Ci0gICAgICBjYXNlIFN1
cmZhY2UuUk9UQVRJT05fOTA6Ci0gICAgICAgIG9yaWVudGF0aW9uID0gOTA7Ci0gICAgICAgIGJy
ZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzE4MDoKLSAgICAgICAgb3JpZW50YXRp
b24gPSAxODA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBTdXJmYWNlLlJPVEFUSU9OXzI3
MDoKLSAgICAgICAgb3JpZW50YXRpb24gPSAyNzA7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBTdXJmYWNlLlJPVEFUSU9OXzA6Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBvcmllbnRhdGlv
biA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gb3JpZW50YXRpb247Ci0g
IH0KLQotICBwcml2YXRlIGludCBnZXRGcmFtZU9yaWVudGF0aW9uKCkgewotICAgIGludCByb3Rh
dGlvbiA9IGdldERldmljZU9yaWVudGF0aW9uKCk7Ci0gICAgaWYgKGluZm8uZmFjaW5nID09IGFu
ZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLkNhbWVyYUluZm8uQ0FNRVJBX0ZBQ0lOR19CQUNLKSB7Ci0g
ICAgICByb3RhdGlvbiA9IDM2MCAtIHJvdGF0aW9uOwotICAgIH0KLSAgICByZXR1cm4gKGluZm8u
b3JpZW50YXRpb24gKyByb3RhdGlvbikgJSAzNjA7Ci0gIH0KLQotICAvLyBDYWxsZWQgb24gY2Ft
ZXJhVGhyZWFkIHNvIG11c3Qgbm90ICJzeW5jaHJvbml6ZWQiLgotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25QcmV2aWV3RnJhbWUoYnl0ZVtdIGRhdGEsIGFuZHJvaWQuaGFyZHdhcmUuQ2Ft
ZXJhIGNhbGxiYWNrQ2FtZXJhKSB7Ci0gICAgY2hlY2tJc09uQ2FtZXJhVGhyZWFkKCk7Ci0gICAg
aWYgKCFpc0NhbWVyYVJ1bm5pbmcuZ2V0KCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJvblBy
ZXZpZXdGcmFtZTogQ2FtZXJhIGlzIHN0b3BwZWQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFxdWV1ZWRCdWZmZXJzLmNvbnRhaW5zKGRhdGEpKSB7Ci0gICAgICAvLyB8ZGF0YXwg
aXMgYW4gb2xkIGludmFsaWQgYnVmZmVyLgotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAo
Y2FtZXJhICE9IGNhbGxiYWNrQ2FtZXJhKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2Vw
dGlvbigiVW5leHBlY3RlZCBjYW1lcmEgaW4gY2FsbGJhY2shIik7Ci0gICAgfQotCi0gICAgZmlu
YWwgbG9uZyBjYXB0dXJlVGltZU5zID0gVGltZVVuaXQuTUlMTElTRUNPTkRTLnRvTmFub3MoU3lz
dGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkpOwotCi0gICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0
ZWQpIHsKLSAgICAgIG9uRmlyc3RGcmFtZUF2YWlsYWJsZSgpOwotICAgIH0KLSAgICBjYW1lcmFT
dGF0aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgZnJhbWVPYnNlcnZlci5vbkJ5dGVCdWZmZXJGcmFt
ZUNhcHR1cmVkKAotICAgICAgICBkYXRhLCBjYXB0dXJlRm9ybWF0LndpZHRoLCBjYXB0dXJlRm9y
bWF0LmhlaWdodCwgZ2V0RnJhbWVPcmllbnRhdGlvbigpLCBjYXB0dXJlVGltZU5zKTsKLSAgICBj
YW1lcmEuYWRkQ2FsbGJhY2tCdWZmZXIoZGF0YSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoaW50IG9lc1RleHR1cmVJZCwgZmxvYXRb
XSB0cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICBjaGVja0lzT25DYW1l
cmFUaHJlYWQoKTsKLSAgICBpZiAoIWlzQ2FtZXJhUnVubmluZy5nZXQoKSkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgIm9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlOiBDYW1lcmEgaXMgc3RvcHBlZCIp
OwotICAgICAgc3VyZmFjZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaW50IHJvdGF0aW9uID0gZ2V0RnJhbWVPcmllbnRhdGlvbigpOwotICAg
IGlmIChpbmZvLmZhY2luZyA9PSBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5DYW1lcmFJbmZvLkNB
TUVSQV9GQUNJTkdfRlJPTlQpIHsKLSAgICAgIC8vIFVuZG8gdGhlIG1pcnJvciB0aGF0IHRoZSBP
UyAiaGVscHMiIHVzIHdpdGguCi0gICAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29t
L3JlZmVyZW5jZS9hbmRyb2lkL2hhcmR3YXJlL0NhbWVyYS5odG1sI3NldERpc3BsYXlPcmllbnRh
dGlvbihpbnQpCi0gICAgICB0cmFuc2Zvcm1NYXRyaXggPQotICAgICAgICAgIFJlbmRlcmVyQ29t
bW9uLm11bHRpcGx5TWF0cmljZXModHJhbnNmb3JtTWF0cml4LCBSZW5kZXJlckNvbW1vbi5ob3Jp
em9udGFsRmxpcE1hdHJpeCgpKTsKLSAgICB9Ci0gICAgaWYgKCFmaXJzdEZyYW1lUmVwb3J0ZWQp
IHsKLSAgICAgIG9uRmlyc3RGcmFtZUF2YWlsYWJsZSgpOwotICAgIH0KLSAgICBjYW1lcmFTdGF0
aXN0aWNzLmFkZEZyYW1lKCk7Ci0gICAgZnJhbWVPYnNlcnZlci5vblRleHR1cmVGcmFtZUNhcHR1
cmVkKGNhcHR1cmVGb3JtYXQud2lkdGgsIGNhcHR1cmVGb3JtYXQuaGVpZ2h0LCBvZXNUZXh0dXJl
SWQsCi0gICAgICAgIHRyYW5zZm9ybU1hdHJpeCwgcm90YXRpb24sIHRpbWVzdGFtcE5zKTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBvbkZpcnN0RnJhbWVBdmFpbGFibGUoKSB7Ci0gICAgaWYgKGV2
ZW50c0hhbmRsZXIgIT0gbnVsbCkgewotICAgICAgZXZlbnRzSGFuZGxlci5vbkZpcnN0RnJhbWVB
dmFpbGFibGUoKTsKLSAgICB9Ci0gICAgZmluYWwgaW50IHN0YXJ0VGltZU1zID0KLSAgICAgICAg
KGludCkgVGltZVVuaXQuTkFOT1NFQ09ORFMudG9NaWxsaXMoU3lzdGVtLm5hbm9UaW1lKCkgLSBz
dGFydFN0YXJ0VGltZU5zKTsKLSAgICB2aWRlb0NhcHR1cmVyQW5kcm9pZFN0YXJ0VGltZU1zSGlz
dG9ncmFtLmFkZFNhbXBsZShzdGFydFRpbWVNcyk7Ci0gICAgZmlyc3RGcmFtZVJlcG9ydGVkID0g
dHJ1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBpc1NjcmVlbmNhc3Qo
KSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Zp
ZGVvRmlsZVJlbmRlcmVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRl
b0ZpbGVSZW5kZXJlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L1ZpZGVvRmlsZVJlbmRlcmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNDkgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
b3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgamF2
YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBv
cnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3Vu
dERvd25MYXRjaDsKLQotLyoqCi0gKiBDYW4gYmUgdXNlZCB0byBzYXZlIHRoZSB2aWRlbyBmcmFt
ZXMgdG8gZmlsZS4KLSAqLwotcHVibGljIGNsYXNzIFZpZGVvRmlsZVJlbmRlcmVyIGltcGxlbWVu
dHMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp
bmcgVEFHID0gIlZpZGVvRmlsZVJlbmRlcmVyIjsKLQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXJU
aHJlYWQgcmVuZGVyVGhyZWFkOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBoYW5kbGVyTG9jayA9
IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIHJlbmRlclRocmVhZEhhbmRs
ZXI7Ci0gIHByaXZhdGUgZmluYWwgRmlsZU91dHB1dFN0cmVhbSB2aWRlb091dEZpbGU7Ci0gIHBy
aXZhdGUgZmluYWwgaW50IG91dHB1dEZpbGVXaWR0aDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgb3V0
cHV0RmlsZUhlaWdodDsKLSAgcHJpdmF0ZSBmaW5hbCBpbnQgb3V0cHV0RnJhbWVTaXplOwotICBw
cml2YXRlIGZpbmFsIEJ5dGVCdWZmZXIgb3V0cHV0RnJhbWVCdWZmZXI7Ci0gIHByaXZhdGUgRWds
QmFzZSBlZ2xCYXNlOwotICBwcml2YXRlIFl1dkNvbnZlcnRlciB5dXZDb252ZXJ0ZXI7Ci0KLSAg
cHVibGljIFZpZGVvRmlsZVJlbmRlcmVyKFN0cmluZyBvdXRwdXRGaWxlLCBpbnQgb3V0cHV0Rmls
ZVdpZHRoLCBpbnQgb3V0cHV0RmlsZUhlaWdodCwKLSAgICAgIGZpbmFsIEVnbEJhc2UuQ29udGV4
dCBzaGFyZWRDb250ZXh0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgIGlmICgob3V0cHV0Rmls
ZVdpZHRoICUgMikgPT0gMSB8fCAob3V0cHV0RmlsZUhlaWdodCAlIDIpID09IDEpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkRvZXMgbm90IHN1cHBvcnQgdW5l
dmVuIHdpZHRoIG9yIGhlaWdodCIpOwotICAgIH0KLQotICAgIHRoaXMub3V0cHV0RmlsZVdpZHRo
ID0gb3V0cHV0RmlsZVdpZHRoOwotICAgIHRoaXMub3V0cHV0RmlsZUhlaWdodCA9IG91dHB1dEZp
bGVIZWlnaHQ7Ci0KLSAgICBvdXRwdXRGcmFtZVNpemUgPSBvdXRwdXRGaWxlV2lkdGggKiBvdXRw
dXRGaWxlSGVpZ2h0ICogMyAvIDI7Ci0gICAgb3V0cHV0RnJhbWVCdWZmZXIgPSBCeXRlQnVmZmVy
LmFsbG9jYXRlRGlyZWN0KG91dHB1dEZyYW1lU2l6ZSk7Ci0KLSAgICB2aWRlb091dEZpbGUgPSBu
ZXcgRmlsZU91dHB1dFN0cmVhbShvdXRwdXRGaWxlKTsKLSAgICB2aWRlb091dEZpbGUud3JpdGUo
Ci0gICAgICAgICgiWVVWNE1QRUcyIEM0MjAgVyIgKyBvdXRwdXRGaWxlV2lkdGggKyAiIEgiICsg
b3V0cHV0RmlsZUhlaWdodCArICIgSXAgRjMwOjEgQTE6MVxuIikKLSAgICAgICAgICAgIC5nZXRC
eXRlcygpKTsKLQotICAgIHJlbmRlclRocmVhZCA9IG5ldyBIYW5kbGVyVGhyZWFkKFRBRyk7Ci0g
ICAgcmVuZGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmVuZGVyVGhyZWFkSGFuZGxlciA9IG5ldyBI
YW5kbGVyKHJlbmRlclRocmVhZC5nZXRMb29wZXIoKSk7Ci0KLSAgICBUaHJlYWRVdGlscy5pbnZv
a2VBdEZyb250VW5pbnRlcnJ1cHRpYmx5KHJlbmRlclRocmVhZEhhbmRsZXIsIG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoc2hhcmVkQ29udGV4dCwgRWdsQmFzZS5DT05GSUdf
UElYRUxfQlVGRkVSKTsKLSAgICAgICAgZWdsQmFzZS5jcmVhdGVEdW1teVBidWZmZXJTdXJmYWNl
KCk7Ci0gICAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgeXV2Q29udmVydGVy
ID0gbmV3IFl1dkNvbnZlcnRlcigpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1lKGZpbmFsIFZpZGVvUmVuZGVyZXIuSTQyMEZy
YW1lIGZyYW1lKSB7Ci0gICAgcmVuZGVyVGhyZWFkSGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBy
ZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKGZyYW1lKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCByZW5kZXJGcmFtZU9uUmVuZGVyVGhyZWFkKFZpZGVvUmVuZGVyZXIu
STQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgZmluYWwgZmxvYXQgZnJhbWVBc3BlY3RSYXRpbyA9IChm
bG9hdCkgZnJhbWUucm90YXRlZFdpZHRoKCkgLyAoZmxvYXQpIGZyYW1lLnJvdGF0ZWRIZWlnaHQo
KTsKLQotICAgIGZpbmFsIGZsb2F0W10gcm90YXRlZFNhbXBsaW5nTWF0cml4ID0KLSAgICAgICAg
UmVuZGVyZXJDb21tb24ucm90YXRlVGV4dHVyZU1hdHJpeChmcmFtZS5zYW1wbGluZ01hdHJpeCwg
ZnJhbWUucm90YXRpb25EZWdyZWUpOwotICAgIGZpbmFsIGZsb2F0W10gbGF5b3V0TWF0cml4ID0g
UmVuZGVyZXJDb21tb24uZ2V0TGF5b3V0TWF0cml4KAotICAgICAgICBmYWxzZSwgZnJhbWVBc3Bl
Y3RSYXRpbywgKGZsb2F0KSBvdXRwdXRGaWxlV2lkdGggLyBvdXRwdXRGaWxlSGVpZ2h0KTsKLSAg
ICBmaW5hbCBmbG9hdFtdIHRleE1hdHJpeCA9IFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5TWF0cmlj
ZXMocm90YXRlZFNhbXBsaW5nTWF0cml4LCBsYXlvdXRNYXRyaXgpOwotCi0gICAgdHJ5IHsKLSAg
ICAgIHZpZGVvT3V0RmlsZS53cml0ZSgiRlJBTUVcbiIuZ2V0Qnl0ZXMoKSk7Ci0gICAgICBpZiAo
IWZyYW1lLnl1dkZyYW1lKSB7Ci0gICAgICAgIHl1dkNvbnZlcnRlci5jb252ZXJ0KG91dHB1dEZy
YW1lQnVmZmVyLCBvdXRwdXRGaWxlV2lkdGgsIG91dHB1dEZpbGVIZWlnaHQsIG91dHB1dEZpbGVX
aWR0aCwKLSAgICAgICAgICAgIGZyYW1lLnRleHR1cmVJZCwgdGV4TWF0cml4KTsKLQotICAgICAg
ICBpbnQgc3RyaWRlID0gb3V0cHV0RmlsZVdpZHRoOwotICAgICAgICBieXRlW10gZGF0YSA9IG91
dHB1dEZyYW1lQnVmZmVyLmFycmF5KCk7Ci0gICAgICAgIGludCBvZmZzZXQgPSBvdXRwdXRGcmFt
ZUJ1ZmZlci5hcnJheU9mZnNldCgpOwotCi0gICAgICAgIC8vIFdyaXRlIFkKLSAgICAgICAgdmlk
ZW9PdXRGaWxlLndyaXRlKGRhdGEsIG9mZnNldCwgb3V0cHV0RmlsZVdpZHRoICogb3V0cHV0Rmls
ZUhlaWdodCk7Ci0KLSAgICAgICAgLy8gV3JpdGUgVQotICAgICAgICBmb3IgKGludCByID0gb3V0
cHV0RmlsZUhlaWdodDsgciA8IG91dHB1dEZpbGVIZWlnaHQgKiAzIC8gMjsgKytyKSB7Ci0gICAg
ICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKGRhdGEsIG9mZnNldCArIHIgKiBzdHJpZGUsIHN0cmlk
ZSAvIDIpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gV3JpdGUgVgotICAgICAgICBmb3IgKGlu
dCByID0gb3V0cHV0RmlsZUhlaWdodDsgciA8IG91dHB1dEZpbGVIZWlnaHQgKiAzIC8gMjsgKyty
KSB7Ci0gICAgICAgICAgdmlkZW9PdXRGaWxlLndyaXRlKGRhdGEsIG9mZnNldCArIHIgKiBzdHJp
ZGUgKyBzdHJpZGUgLyAyLCBzdHJpZGUgLyAyKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgbmF0aXZlSTQyMFNjYWxlKGZyYW1lLnl1dlBsYW5lc1swXSwgZnJhbWUueXV2U3Ry
aWRlc1swXSwgZnJhbWUueXV2UGxhbmVzWzFdLAotICAgICAgICAgICAgZnJhbWUueXV2U3RyaWRl
c1sxXSwgZnJhbWUueXV2UGxhbmVzWzJdLCBmcmFtZS55dXZTdHJpZGVzWzJdLCBmcmFtZS53aWR0
aCwgZnJhbWUuaGVpZ2h0LAotICAgICAgICAgICAgb3V0cHV0RnJhbWVCdWZmZXIsIG91dHB1dEZp
bGVXaWR0aCwgb3V0cHV0RmlsZUhlaWdodCk7Ci0gICAgICAgIHZpZGVvT3V0RmlsZS53cml0ZSgK
LSAgICAgICAgICAgIG91dHB1dEZyYW1lQnVmZmVyLmFycmF5KCksIG91dHB1dEZyYW1lQnVmZmVy
LmFycmF5T2Zmc2V0KCksIG91dHB1dEZyYW1lU2l6ZSk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAo
SU9FeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byB3cml0ZSB0
byBmaWxlIGZvciB2aWRlbyBvdXQiKTsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KGUpOwotICAgIH0gZmluYWxseSB7Ci0gICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9u
ZShmcmFtZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFJlbGVhc2UgYWxsIHJlc291cmNl
cy4gQWxsIGFscmVhZHkgcG9zdGVkIGZyYW1lcyB3aWxsIGJlIHJlbmRlcmVkIGZpcnN0LgotICAg
Ki8KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBj
bGVhbnVwQmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICByZW5kZXJUaHJlYWRI
YW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgdmlkZW9PdXRGaWxlLmNs
b3NlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiRXJyb3IgY2xvc2luZyBvdXRwdXQgdmlkZW8gZmlsZSIpOwotICAgICAgICB9
Ci0gICAgICAgIHl1dkNvbnZlcnRlci5yZWxlYXNlKCk7Ci0gICAgICAgIGVnbEJhc2UucmVsZWFz
ZSgpOwotICAgICAgICByZW5kZXJUaHJlYWQucXVpdCgpOwotICAgICAgICBjbGVhbnVwQmFycmll
ci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBUaHJlYWRVdGlscy5hd2FpdFVu
aW50ZXJydXB0aWJseShjbGVhbnVwQmFycmllcik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIG5h
dGl2ZSB2b2lkIG5hdGl2ZUk0MjBTY2FsZShCeXRlQnVmZmVyIHNyY1ksIGludCBzdHJpZGVZLCBC
eXRlQnVmZmVyIHNyY1UsCi0gICAgICBpbnQgc3RyaWRlVSwgQnl0ZUJ1ZmZlciBzcmNWLCBpbnQg
c3RyaWRlViwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBCeXRlQnVmZmVyIGRzdCwKLSAgICAgIGlu
dCBkc3RXaWR0aCwgaW50IGRzdEhlaWdodCk7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1Zp
ZGVvUmVuZGVyZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvUmVu
ZGVyZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1Jl
bmRlcmVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTAgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZl
cjsKLQotLyoqCi0gKiBKYXZhIHZlcnNpb24gb2YgVmlkZW9TaW5rSW50ZXJmYWNlLiAgSW4gYWRk
aXRpb24gdG8gYWxsb3dpbmcgY2xpZW50cyB0bwotICogZGVmaW5lIHRoZWlyIG93biByZW5kZXJp
bmcgYmVoYXZpb3IgKGJ5IHBhc3NpbmcgaW4gYSBDYWxsYmFja3Mgb2JqZWN0KSwgdGhpcwotICog
Y2xhc3MgYWxzbyBwcm92aWRlcyBhIGNyZWF0ZUd1aSgpIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSBH
VUktcmVuZGVyaW5nIHdpbmRvdwotICogb24gdmFyaW91cyBwbGF0Zm9ybXMuCi0gKi8KLXB1Ymxp
YyBjbGFzcyBWaWRlb1JlbmRlcmVyIHsKLSAgLyoqCi0gICAqIEphdmEgdmVyc2lvbiBvZiB3ZWJy
dGM6OlZpZGVvRnJhbWUuIEZyYW1lcyBhcmUgb25seSBjb25zdHJ1Y3RlZCBmcm9tIG5hdGl2ZSBj
b2RlIGFuZCB0ZXN0Ci0gICAqIGNvZGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIEk0
MjBGcmFtZSB7Ci0gICAgcHVibGljIGZpbmFsIGludCB3aWR0aDsKLSAgICBwdWJsaWMgZmluYWwg
aW50IGhlaWdodDsKLSAgICBwdWJsaWMgZmluYWwgaW50W10geXV2U3RyaWRlczsKLSAgICBwdWJs
aWMgQnl0ZUJ1ZmZlcltdIHl1dlBsYW5lczsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB5dXZG
cmFtZTsKLSAgICAvLyBNYXRyaXggdGhhdCB0cmFuc2Zvcm1zIHN0YW5kYXJkIGNvb3JkaW5hdGVz
IHRvIHRoZWlyIHByb3BlciBzYW1wbGluZyBsb2NhdGlvbnMgaW4KLSAgICAvLyB0aGUgdGV4dHVy
ZS4gVGhpcyB0cmFuc2Zvcm0gY29tcGVuc2F0ZXMgZm9yIGFueSBwcm9wZXJ0aWVzIG9mIHRoZSB2
aWRlbyBzb3VyY2UgdGhhdAotICAgIC8vIGNhdXNlIGl0IHRvIGFwcGVhciBkaWZmZXJlbnQgZnJv
bSBhIG5vcm1hbGl6ZWQgdGV4dHVyZS4gVGhpcyBtYXRyaXggZG9lcyBub3QgdGFrZQotICAgIC8v
IHxyb3RhdGlvbkRlZ3JlZXwgaW50byBhY2NvdW50LgotICAgIHB1YmxpYyBmaW5hbCBmbG9hdFtd
IHNhbXBsaW5nTWF0cml4OwotICAgIHB1YmxpYyBpbnQgdGV4dHVyZUlkOwotICAgIC8vIEZyYW1l
IHBvaW50ZXIgaW4gQysrLgotICAgIHByaXZhdGUgbG9uZyBuYXRpdmVGcmFtZVBvaW50ZXI7Ci0K
LSAgICAvLyByb3RhdGlvbkRlZ3JlZSBpcyB0aGUgZGVncmVlIHRoYXQgdGhlIGZyYW1lIG11c3Qg
YmUgcm90YXRlZCBjbG9ja3dpc2VseQotICAgIC8vIHRvIGJlIHJlbmRlcmVkIGNvcnJlY3RseS4K
LSAgICBwdWJsaWMgaW50IHJvdGF0aW9uRGVncmVlOwotCi0gICAgLyoqCi0gICAgICogQ29uc3Ry
dWN0IGEgZnJhbWUgb2YgdGhlIGdpdmVuIGRpbWVuc2lvbnMgd2l0aCB0aGUgc3BlY2lmaWVkIHBs
YW5hciBkYXRhLgotICAgICAqLwotICAgIEk0MjBGcmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCByb3RhdGlvbkRlZ3JlZSwgaW50W10geXV2U3RyaWRlcywgQnl0ZUJ1ZmZlcltdIHl1dlBs
YW5lcywKLSAgICAgICAgbG9uZyBuYXRpdmVGcmFtZVBvaW50ZXIpIHsKLSAgICAgIHRoaXMud2lk
dGggPSB3aWR0aDsKLSAgICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgdGhpcy55dXZT
dHJpZGVzID0geXV2U3RyaWRlczsKLSAgICAgIHRoaXMueXV2UGxhbmVzID0geXV2UGxhbmVzOwot
ICAgICAgdGhpcy55dXZGcmFtZSA9IHRydWU7Ci0gICAgICB0aGlzLnJvdGF0aW9uRGVncmVlID0g
cm90YXRpb25EZWdyZWU7Ci0gICAgICB0aGlzLm5hdGl2ZUZyYW1lUG9pbnRlciA9IG5hdGl2ZUZy
YW1lUG9pbnRlcjsKLSAgICAgIGlmIChyb3RhdGlvbkRlZ3JlZSAlIDkwICE9IDApIHsKLSAgICAg
ICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUm90YXRpb24gZGVncmVlIG5v
dCBtdWx0aXBsZSBvZiA5MDogIiArIHJvdGF0aW9uRGVncmVlKTsKLSAgICAgIH0KLSAgICAgIC8v
IFRoZSBjb252ZW50aW9uIGluIFdlYlJUQyBpcyB0aGF0IHRoZSBmaXJzdCBlbGVtZW50IGluIGEg
Qnl0ZUJ1ZmZlciBjb3JyZXNwb25kcyB0byB0aGUKLSAgICAgIC8vIHRvcC1sZWZ0IGNvcm5lciBv
ZiB0aGUgaW1hZ2UsIGJ1dCBpbiBnbFRleEltYWdlMkQoKSB0aGUgZmlyc3QgZWxlbWVudCBjb3Jy
ZXNwb25kcyB0byB0aGUKLSAgICAgIC8vIGJvdHRvbS1sZWZ0IGNvcm5lci4gVGhpcyBkaXNjcmVw
YW5jeSBpcyBjb3JyZWN0ZWQgYnkgc2V0dGluZyBhIHZlcnRpY2FsIGZsaXAgYXMgc2FtcGxpbmcK
LSAgICAgIC8vIG1hdHJpeC4KLSAgICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICAgIHNhbXBs
aW5nTWF0cml4ID0gbmV3IGZsb2F0W10gewotICAgICAgICAgIDEsICAwLCAwLCAwLAotICAgICAg
ICAgIDAsIC0xLCAwLCAwLAotICAgICAgICAgIDAsICAwLCAxLCAwLAotICAgICAgICAgIDAsICAx
LCAwLCAxfTsKLSAgICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICAgIH0KLQotICAgIC8qKgotICAg
ICAqIENvbnN0cnVjdCBhIHRleHR1cmUgZnJhbWUgb2YgdGhlIGdpdmVuIGRpbWVuc2lvbnMgd2l0
aCBkYXRhIGluIFN1cmZhY2VUZXh0dXJlCi0gICAgICovCi0gICAgSTQyMEZyYW1lKGludCB3aWR0
aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uRGVncmVlLCBpbnQgdGV4dHVyZUlkLCBmbG9hdFtd
IHNhbXBsaW5nTWF0cml4LAotICAgICAgICBsb25nIG5hdGl2ZUZyYW1lUG9pbnRlcikgewotICAg
ICAgdGhpcy53aWR0aCA9IHdpZHRoOwotICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
ICB0aGlzLnl1dlN0cmlkZXMgPSBudWxsOwotICAgICAgdGhpcy55dXZQbGFuZXMgPSBudWxsOwot
ICAgICAgdGhpcy5zYW1wbGluZ01hdHJpeCA9IHNhbXBsaW5nTWF0cml4OwotICAgICAgdGhpcy50
ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7Ci0gICAgICB0aGlzLnl1dkZyYW1lID0gZmFsc2U7Ci0gICAg
ICB0aGlzLnJvdGF0aW9uRGVncmVlID0gcm90YXRpb25EZWdyZWU7Ci0gICAgICB0aGlzLm5hdGl2
ZUZyYW1lUG9pbnRlciA9IG5hdGl2ZUZyYW1lUG9pbnRlcjsKLSAgICAgIGlmIChyb3RhdGlvbkRl
Z3JlZSAlIDkwICE9IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbigiUm90YXRpb24gZGVncmVlIG5vdCBtdWx0aXBsZSBvZiA5MDogIiArIHJvdGF0aW9uRGVn
cmVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHJvdGF0ZWRXaWR0aCgpIHsK
LSAgICAgIHJldHVybiAocm90YXRpb25EZWdyZWUgJSAxODAgPT0gMCkgPyB3aWR0aCA6IGhlaWdo
dDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHJvdGF0ZWRIZWlnaHQoKSB7Ci0gICAgICByZXR1
cm4gKHJvdGF0aW9uRGVncmVlICUgMTgwID09IDApID8gaGVpZ2h0IDogd2lkdGg7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKLSAgICAgIHJl
dHVybiB3aWR0aCArICJ4IiArIGhlaWdodCArICI6IiArIHl1dlN0cmlkZXNbMF0gKyAiOiIgKyB5
dXZTdHJpZGVzWzFdICsgIjoiICsgeXV2U3RyaWRlc1syXTsKLSAgICB9Ci0gIH0KLQotICAvLyBI
ZWxwZXIgbmF0aXZlIGZ1bmN0aW9uIHRvIGRvIGEgdmlkZW8gZnJhbWUgcGxhbmUgY29weWluZy4K
LSAgcHVibGljIHN0YXRpYyBuYXRpdmUgdm9pZCBuYXRpdmVDb3B5UGxhbmUoCi0gICAgICBCeXRl
QnVmZmVyIHNyYywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3JjU3RyaWRlLCBCeXRlQnVm
ZmVyIGRzdCwgaW50IGRzdFN0cmlkZSk7Ci0KLSAgLyoqIFRoZSByZWFsIG1lYXQgb2YgVmlkZW9T
aW5rSW50ZXJmYWNlLiAqLwotICBwdWJsaWMgc3RhdGljIGludGVyZmFjZSBDYWxsYmFja3Mgewot
ICAgIC8vIHxmcmFtZXwgbWlnaHQgaGF2ZSBwZW5kaW5nIHJvdGF0aW9uIGFuZCBpbXBsZW1lbnRh
dGlvbiBvZiBDYWxsYmFja3MKLSAgICAvLyBzaG91bGQgaGFuZGxlIHRoYXQgYnkgYXBwbHlpbmcg
cm90YXRpb24gZHVyaW5nIHJlbmRlcmluZy4gVGhlIGNhbGxlZQotICAgIC8vIGlzIHJlc3BvbnNp
YmxlIGZvciBzaWduYWxpbmcgd2hlbiBpdCBpcyBkb25lIHdpdGggfGZyYW1lfCBieSBjYWxsaW5n
Ci0gICAgLy8gcmVuZGVyRnJhbWVEb25lKGZyYW1lKS4KLSAgICBwdWJsaWMgdm9pZCByZW5kZXJG
cmFtZShJNDIwRnJhbWUgZnJhbWUpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoaXMgbXVzdCBiZSBj
YWxsZWQgYWZ0ZXIgZXZlcnkgcmVuZGVyRnJhbWUoKSB0byByZWxlYXNlIHRoZSBmcmFtZS4KLSAg
ICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCByZW5kZXJGcmFtZURvbmUoSTQyMEZyYW1lIGZyYW1l
KSB7Ci0gICAgZnJhbWUueXV2UGxhbmVzID0gbnVsbDsKLSAgICBmcmFtZS50ZXh0dXJlSWQgPSAw
OwotICAgIGlmIChmcmFtZS5uYXRpdmVGcmFtZVBvaW50ZXIgIT0gMCkgewotICAgICAgcmVsZWFz
ZU5hdGl2ZUZyYW1lKGZyYW1lLm5hdGl2ZUZyYW1lUG9pbnRlcik7Ci0gICAgICBmcmFtZS5uYXRp
dmVGcmFtZVBvaW50ZXIgPSAwOwotICAgIH0KLSAgfQotCi0gIGxvbmcgbmF0aXZlVmlkZW9SZW5k
ZXJlcjsKLQotICBwdWJsaWMgVmlkZW9SZW5kZXJlcihDYWxsYmFja3MgY2FsbGJhY2tzKSB7Ci0g
ICAgbmF0aXZlVmlkZW9SZW5kZXJlciA9IG5hdGl2ZVdyYXBWaWRlb1JlbmRlcmVyKGNhbGxiYWNr
cyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotICAgIGlmIChuYXRpdmVWaWRl
b1JlbmRlcmVyID09IDApIHsKLSAgICAgIC8vIEFscmVhZHkgZGlzcG9zZWQuCi0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgZnJlZVdyYXBwZWRWaWRlb1JlbmRlcmVyKG5hdGl2ZVZpZGVvUmVu
ZGVyZXIpOwotICAgIG5hdGl2ZVZpZGVvUmVuZGVyZXIgPSAwOwotICB9Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgbmF0aXZlIGxvbmcgbmF0aXZlV3JhcFZpZGVvUmVuZGVyZXIoQ2FsbGJhY2tzIGNhbGxi
YWNrcyk7Ci0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIGZyZWVXcmFwcGVkVmlkZW9SZW5k
ZXJlcihsb25nIG5hdGl2ZVZpZGVvUmVuZGVyZXIpOwotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUg
dm9pZCByZWxlYXNlTmF0aXZlRnJhbWUobG9uZyBuYXRpdmVGcmFtZVBvaW50ZXIpOwotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyR3VpLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1JlbmRlcmVyR3VpLmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9SZW5kZXJlckd1aS5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsNjI4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlci5JNDIwRnJhbWU7Ci0KLWltcG9y
dCBhbmRyb2lkLmFubm90YXRpb24uU3VwcHJlc3NMaW50OwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhp
Y3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5SZWN0OwotaW1wb3J0IGFuZHJvaWQu
b3BlbmdsLkVHTDE0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRy
b2lkLm9wZW5nbC5HTFN1cmZhY2VWaWV3OwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsK
LWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLQotaW1wb3J0IGph
dmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9zLmVnbC5FR0wxMDsKLWltcG9ydCBqYXZheC5taWNyb2Vk
aXRpb24ua2hyb25vcy5lZ2wuRUdMQ29uZmlnOwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5r
aHJvbm9zLmVnbC5FR0xDb250ZXh0OwotaW1wb3J0IGphdmF4Lm1pY3JvZWRpdGlvbi5raHJvbm9z
Lm9wZW5nbGVzLkdMMTA7Ci0KLS8qKgotICogRWZmaWNpZW50bHkgcmVuZGVycyBZVVYgZnJhbWVz
IHVzaW5nIHRoZSBHUFUgZm9yIENTQy4KLSAqIENsaWVudHMgd2lsbCB3YW50IGZpcnN0IHRvIGNh
bGwgc2V0VmlldygpIHRvIHBhc3MgR0xTdXJmYWNlVmlldwotICogYW5kIHRoZW4gZm9yIGVhY2gg
dmlkZW8gc3RyZWFtIGVpdGhlciBjcmVhdGUgaW5zdGFuY2Ugb2YgVmlkZW9SZW5kZXJlciB1c2lu
ZwotICogY3JlYXRlR3VpKCkgY2FsbCBvciBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBpbnRlcmZh
Y2UgdXNpbmcgY3JlYXRlKCkgY2FsbC4KLSAqIE9ubHkgb25lIGluc3RhbmNlIG9mIHRoZSBjbGFz
cyBjYW4gYmUgY3JlYXRlZC4KLSAqLwotcHVibGljIGNsYXNzIFZpZGVvUmVuZGVyZXJHdWkgaW1w
bGVtZW50cyBHTFN1cmZhY2VWaWV3LlJlbmRlcmVyIHsKLSAgLy8gfGluc3RhbmNlfCwgfGluc3Rh
bmNlLnN1cmZhY2V8LCB8ZWdsQ29udGV4dHwsIGFuZCB8ZWdsQ29udGV4dFJlYWR5fCBhcmUgc3lu
Y2hyb25pemVkIG9uCi0gIC8vIHxWaWRlb1JlbmRlcmVyR3VpLmNsYXNzfC4KLSAgcHJpdmF0ZSBz
dGF0aWMgVmlkZW9SZW5kZXJlckd1aSBpbnN0YW5jZSA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGlj
IFJ1bm5hYmxlIGVnbENvbnRleHRSZWFkeSA9IG51bGw7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBUQUcgPSAiVmlkZW9SZW5kZXJlckd1aSI7Ci0gIHByaXZhdGUgR0xTdXJmYWNlVmll
dyBzdXJmYWNlOwotICBwcml2YXRlIHN0YXRpYyBFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCA9
IG51bGw7Ci0gIC8vIEluZGljYXRlcyBpZiBTdXJmYWNlVmlldy5SZW5kZXJlci5vblN1cmZhY2VD
cmVhdGVkIHdhcyBjYWxsZWQuCi0gIC8vIElmIHRydWUgdGhlbiBmb3IgZXZlcnkgbmV3bHkgY3Jl
YXRlZCB5dXYgaW1hZ2UgcmVuZGVyZXIgY3JlYXRlVGV4dHVyZSgpCi0gIC8vIHNob3VsZCBiZSBj
YWxsZWQuIFRoZSB2YXJpYWJsZSBpcyBhY2Nlc3NlZCBvbiBtdWx0aXBsZSB0aHJlYWRzIGFuZAot
ICAvLyBhbGwgYWNjZXNzZXMgYXJlIHN5bmNocm9uaXplZCBvbiB5dXZJbWFnZVJlbmRlcmVycycg
b2JqZWN0IGxvY2suCi0gIHByaXZhdGUgYm9vbGVhbiBvblN1cmZhY2VDcmVhdGVkQ2FsbGVkOwot
ICBwcml2YXRlIGludCBzY3JlZW5XaWR0aDsKLSAgcHJpdmF0ZSBpbnQgc2NyZWVuSGVpZ2h0Owot
ICAvLyBMaXN0IG9mIHl1diByZW5kZXJlcnMuCi0gIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PFl1
dkltYWdlUmVuZGVyZXI+IHl1dkltYWdlUmVuZGVyZXJzOwotICAvLyBSZW5kZXIgYW5kIGRyYXcg
dGhyZWFkcy4KLSAgcHJpdmF0ZSBzdGF0aWMgVGhyZWFkIHJlbmRlckZyYW1lVGhyZWFkOwotICBw
cml2YXRlIHN0YXRpYyBUaHJlYWQgZHJhd1RocmVhZDsKLQotICBwcml2YXRlIFZpZGVvUmVuZGVy
ZXJHdWkoR0xTdXJmYWNlVmlldyBzdXJmYWNlKSB7Ci0gICAgdGhpcy5zdXJmYWNlID0gc3VyZmFj
ZTsKLSAgICAvLyBDcmVhdGUgYW4gT3BlbkdMIEVTIDIuMCBjb250ZXh0LgotICAgIHN1cmZhY2Uu
c2V0UHJlc2VydmVFR0xDb250ZXh0T25QYXVzZSh0cnVlKTsKLSAgICBzdXJmYWNlLnNldEVHTENv
bnRleHRDbGllbnRWZXJzaW9uKDIpOwotICAgIHN1cmZhY2Uuc2V0UmVuZGVyZXIodGhpcyk7Ci0g
ICAgc3VyZmFjZS5zZXRSZW5kZXJNb2RlKEdMU3VyZmFjZVZpZXcuUkVOREVSTU9ERV9XSEVOX0RJ
UlRZKTsKLQotICAgIHl1dkltYWdlUmVuZGVyZXJzID0gbmV3IEFycmF5TGlzdDxZdXZJbWFnZVJl
bmRlcmVyPigpOwotICB9Ci0KLSAgLyoqCi0gICAqIENsYXNzIHVzZWQgdG8gZGlzcGxheSBzdHJl
YW0gb2YgWVVWNDIwIGZyYW1lcyBhdCBwYXJ0aWN1bGFyIGxvY2F0aW9uCi0gICAqIG9uIGEgc2Ny
ZWVuLiBOZXcgdmlkZW8gZnJhbWVzIGFyZSBzZW50IHRvIGRpc3BsYXkgdXNpbmcgcmVuZGVyRnJh
bWUoKQotICAgKiBjYWxsLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgWXV2SW1hZ2VS
ZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgICAvLyB8c3Vy
ZmFjZXwgaXMgc3luY2hyb25pemVkIG9uIHx0aGlzfC4KLSAgICBwcml2YXRlIEdMU3VyZmFjZVZp
ZXcgc3VyZmFjZTsKLSAgICBwcml2YXRlIGludCBpZDsKLSAgICAvLyBUT0RPKG1hZ2plZCk6IERl
bGV0ZSBHTCByZXNvdXJjZXMgaW4gcmVsZWFzZSgpLiBNdXN0IGJlIHN5bmNocm9uaXplZCB3aXRo
IGRyYXcoKS4gV2UgYXJlCi0gICAgLy8gY3VycmVudGx5IGxlYWtpbmcgcmVzb3VyY2VzIHRvIGF2
b2lkIGEgcmFyZSBjcmFzaCBpbiByZWxlYXNlKCkgd2hlcmUgdGhlIEVHTENvbnRleHQgaGFzCi0g
ICAgLy8gYmVjb21lIGludmFsaWQgYmVmb3JlaGFuZC4KLSAgICBwcml2YXRlIGludFtdIHl1dlRl
eHR1cmVzID0gezAsIDAsIDB9OwotICAgIHByaXZhdGUgZmluYWwgUmVuZGVyZXJDb21tb24uWXV2
VXBsb2FkZXIgeXV2VXBsb2FkZXIgPSBuZXcgUmVuZGVyZXJDb21tb24uWXV2VXBsb2FkZXIoKTsK
LSAgICBwcml2YXRlIGZpbmFsIFJlbmRlcmVyQ29tbW9uLkdsRHJhd2VyIGRyYXdlcjsKLSAgICAv
LyBSZXNvdXJjZXMgZm9yIG1ha2luZyBhIGRlZXAgY29weSBvZiBpbmNvbWluZyBPRVMgdGV4dHVy
ZSBmcmFtZS4KLSAgICBwcml2YXRlIEdsVGV4dHVyZUZyYW1lQnVmZmVyIHRleHR1cmVDb3B5Owot
Ci0gICAgLy8gUGVuZGluZyBmcmFtZSB0byByZW5kZXIuIFNlcnZlcyBhcyBhIHF1ZXVlIHdpdGgg
c2l6ZSAxLiB8cGVuZGluZ0ZyYW1lfCBpcyBhY2Nlc3NlZCBieSB0d28KLSAgICAvLyB0aHJlYWRz
IC0gZnJhbWVzIGFyZSByZWNlaXZlZCBpbiByZW5kZXJGcmFtZSgpIGFuZCBjb25zdW1lZCBpbiBk
cmF3KCkuIEZyYW1lcyBhcmUgZHJvcHBlZCBpbgotICAgIC8vIHJlbmRlckZyYW1lKCkgaWYgdGhl
IHByZXZpb3VzIGZyYW1lIGhhcyBub3QgYmVlbiByZW5kZXJlZCB5ZXQuCi0gICAgcHJpdmF0ZSBJ
NDIwRnJhbWUgcGVuZGluZ0ZyYW1lOwotICAgIHByaXZhdGUgZmluYWwgT2JqZWN0IHBlbmRpbmdG
cmFtZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgLy8gVHlwZSBvZiB2aWRlbyBmcmFtZSB1c2Vk
IGZvciByZWNlbnQgZnJhbWUgcmVuZGVyaW5nLgotICAgIHByaXZhdGUgc3RhdGljIGVudW0gUmVu
ZGVyZXJUeXBlIHsgUkVOREVSRVJfWVVWLCBSRU5ERVJFUl9URVhUVVJFIH0KLQotICAgIHByaXZh
dGUgUmVuZGVyZXJUeXBlIHJlbmRlcmVyVHlwZTsKLSAgICBwcml2YXRlIFJlbmRlcmVyQ29tbW9u
LlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlOwotICAgIHByaXZhdGUgYm9vbGVhbiBtaXJyb3I7Ci0g
ICAgcHJpdmF0ZSBSZW5kZXJlckNvbW1vbi5SZW5kZXJlckV2ZW50cyByZW5kZXJlckV2ZW50czsK
LSAgICAvLyBGbGFnIGlmIHJlbmRlckZyYW1lKCkgd2FzIGV2ZXIgY2FsbGVkLgotICAgIGJvb2xl
YW4gc2VlbkZyYW1lOwotICAgIC8vIFRvdGFsIG51bWJlciBvZiB2aWRlbyBmcmFtZXMgcmVjZWl2
ZWQgaW4gcmVuZGVyRnJhbWUoKSBjYWxsLgotICAgIHByaXZhdGUgaW50IGZyYW1lc1JlY2VpdmVk
OwotICAgIC8vIE51bWJlciBvZiB2aWRlbyBmcmFtZXMgZHJvcHBlZCBieSByZW5kZXJGcmFtZSgp
IGJlY2F1c2UgcHJldmlvdXMKLSAgICAvLyBmcmFtZSBoYXMgbm90IGJlZW4gcmVuZGVyZWQgeWV0
LgotICAgIHByaXZhdGUgaW50IGZyYW1lc0Ryb3BwZWQ7Ci0gICAgLy8gTnVtYmVyIG9mIHJlbmRl
cmVkIHZpZGVvIGZyYW1lcy4KLSAgICBwcml2YXRlIGludCBmcmFtZXNSZW5kZXJlZDsKLSAgICAv
LyBUaW1lIGluIG5zIHdoZW4gdGhlIGZpcnN0IHZpZGVvIGZyYW1lIHdhcyByZW5kZXJlZC4KLSAg
ICBwcml2YXRlIGxvbmcgc3RhcnRUaW1lTnMgPSAtMTsKLSAgICAvLyBUaW1lIGluIG5zIHNwZW50
IGluIGRyYXcoKSBmdW5jdGlvbi4KLSAgICBwcml2YXRlIGxvbmcgZHJhd1RpbWVOczsKLSAgICAv
LyBUaW1lIGluIG5zIHNwZW50IGluIGRyYXcoKSBjb3B5aW5nIHJlc291cmNlcyBmcm9tIHxwZW5k
aW5nRnJhbWV8IC0gaW5jbHVkaW5nIHVwbG9hZGluZyBmcmFtZQotICAgIC8vIGRhdGEgdG8gcmVu
ZGVyaW5nIHBsYW5lcy4KLSAgICBwcml2YXRlIGxvbmcgY29weVRpbWVOczsKLSAgICAvLyBUaGUg
YWxsb3dlZCB2aWV3IGFyZWEgaW4gcGVyY2VudGFnZSBvZiBzY3JlZW4gc2l6ZS4KLSAgICBwcml2
YXRlIGZpbmFsIFJlY3QgbGF5b3V0SW5QZXJjZW50YWdlOwotICAgIC8vIFRoZSBhY3R1YWwgdmll
dyBhcmVhIGluIHBpeGVscy4gSXQgaXMgYSBjZW50ZXJlZCBzdWJyZWN0YW5nbGUgb2YgdGhlIHJl
Y3RhbmdsZSBkZWZpbmVkIGJ5Ci0gICAgLy8gfGxheW91dEluUGVyY2VudGFnZXwuCi0gICAgcHJp
dmF0ZSBmaW5hbCBSZWN0IGRpc3BsYXlMYXlvdXQgPSBuZXcgUmVjdCgpOwotICAgIC8vIENhY2hl
ZCBsYXlvdXQgdHJhbnNmb3JtYXRpb24gbWF0cml4LCBjYWxjdWxhdGVkIGZyb20gY3VycmVudCBs
YXlvdXQgcGFyYW1ldGVycy4KLSAgICBwcml2YXRlIGZsb2F0W10gbGF5b3V0TWF0cml4OwotICAg
IC8vIEZsYWcgaWYgbGF5b3V0IHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1cGRhdGUgaXMgbmVlZGVk
LgotICAgIHByaXZhdGUgYm9vbGVhbiB1cGRhdGVMYXlvdXRQcm9wZXJ0aWVzOwotICAgIC8vIExh
eW91dCBwcm9wZXJ0aWVzIHVwZGF0ZSBsb2NrLiBHdWFyZHMgfHVwZGF0ZUxheW91dFByb3BlcnRp
ZXN8LCB8c2NyZWVuV2lkdGh8LAotICAgIC8vIHxzY3JlZW5IZWlnaHR8LCB8dmlkZW9XaWR0aHws
IHx2aWRlb0hlaWdodHwsIHxyb3RhdGlvbkRlZ3JlZXwsIHxzY2FsaW5nVHlwZXwsIGFuZCB8bWly
cm9yfC4KLSAgICBwcml2YXRlIGZpbmFsIE9iamVjdCB1cGRhdGVMYXlvdXRMb2NrID0gbmV3IE9i
amVjdCgpOwotICAgIC8vIFRleHR1cmUgc2FtcGxpbmcgbWF0cml4LgotICAgIHByaXZhdGUgZmxv
YXRbXSByb3RhdGVkU2FtcGxpbmdNYXRyaXg7Ci0gICAgLy8gVmlld3BvcnQgZGltZW5zaW9ucy4K
LSAgICBwcml2YXRlIGludCBzY3JlZW5XaWR0aDsKLSAgICBwcml2YXRlIGludCBzY3JlZW5IZWln
aHQ7Ci0gICAgLy8gVmlkZW8gZGltZW5zaW9uLgotICAgIHByaXZhdGUgaW50IHZpZGVvV2lkdGg7
Ci0gICAgcHJpdmF0ZSBpbnQgdmlkZW9IZWlnaHQ7Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBkZWdy
ZWUgdGhhdCB0aGUgZnJhbWUgc2hvdWxkIGJlIHJvdGF0ZWQgY2xvY2t3aXNlbHkgdG8gaGF2ZQot
ICAgIC8vIGl0IHJlbmRlcmVkIHVwIHJpZ2h0LgotICAgIHByaXZhdGUgaW50IHJvdGF0aW9uRGVn
cmVlOwotCi0gICAgcHJpdmF0ZSBZdXZJbWFnZVJlbmRlcmVyKEdMU3VyZmFjZVZpZXcgc3VyZmFj
ZSwgaW50IGlkLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgICAg
UmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yLCBS
ZW5kZXJlckNvbW1vbi5HbERyYXdlciBkcmF3ZXIpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJZ
dXZJbWFnZVJlbmRlcmVyLkNyZWF0ZSBpZDogIiArIGlkKTsKLSAgICAgIHRoaXMuc3VyZmFjZSA9
IHN1cmZhY2U7Ci0gICAgICB0aGlzLmlkID0gaWQ7Ci0gICAgICB0aGlzLnNjYWxpbmdUeXBlID0g
c2NhbGluZ1R5cGU7Ci0gICAgICB0aGlzLm1pcnJvciA9IG1pcnJvcjsKLSAgICAgIHRoaXMuZHJh
d2VyID0gZHJhd2VyOwotICAgICAgbGF5b3V0SW5QZXJjZW50YWdlID0gbmV3IFJlY3QoeCwgeSwg
TWF0aC5taW4oMTAwLCB4ICsgd2lkdGgpLCBNYXRoLm1pbigxMDAsIHkgKyBoZWlnaHQpKTsKLSAg
ICAgIHVwZGF0ZUxheW91dFByb3BlcnRpZXMgPSBmYWxzZTsKLSAgICAgIHJvdGF0aW9uRGVncmVl
ID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoKSB7Ci0g
ICAgICBzZWVuRnJhbWUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN5bmNocm9uaXpl
ZCB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgICBzdXJmYWNlID0gbnVsbDsKLSAgICAgIGRyYXdlci5y
ZWxlYXNlKCk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBlbmRpbmdGcmFtZUxvY2spIHsKLSAgICAg
ICAgaWYgKHBlbmRpbmdGcmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgVmlkZW9SZW5kZXJlci5y
ZW5kZXJGcmFtZURvbmUocGVuZGluZ0ZyYW1lKTsKLSAgICAgICAgICBwZW5kaW5nRnJhbWUgPSBu
dWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNyZWF0
ZVRleHR1cmVzKCkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIiAgWXV2SW1hZ2VSZW5kZXJlci5j
cmVhdGVUZXh0dXJlcyAiICsgaWQgKyAiIG9uIEdMIHRocmVhZDoiCi0gICAgICAgICAgICAgICsg
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpKTsKLQotICAgICAgLy8gR2VuZXJhdGUgMyB0
ZXh0dXJlIGlkcyBmb3IgWS9VL1YgYW5kIHBsYWNlIHRoZW0gaW50byB8eXV2VGV4dHVyZXN8Lgot
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgeXV2VGV4dHVyZXNb
aV0gPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICAg
IH0KLSAgICAgIC8vIEdlbmVyYXRlIHRleHR1cmUgYW5kIGZyYW1lYnVmZmVyIGZvciBvZmZzY3Jl
ZW4gdGV4dHVyZSBjb3B5LgotICAgICAgdGV4dHVyZUNvcHkgPSBuZXcgR2xUZXh0dXJlRnJhbWVC
dWZmZXIoR0xFUzIwLkdMX1JHQik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUxh
eW91dE1hdHJpeCgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAodXBkYXRlTGF5b3V0TG9jaykgewot
ICAgICAgICBpZiAoIXVwZGF0ZUxheW91dFByb3BlcnRpZXMpIHsKLSAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gSW5pdGlhbGl6ZSB0byBtYXhpbXVtIGFsbG93ZWQgYXJl
YS4gUm91bmQgdG8gaW50ZWdlciBjb29yZGluYXRlcyBpbndhcmRzIHRoZSBsYXlvdXQKLSAgICAg
ICAgLy8gYm91bmRpbmcgYm94IChjZWlsIGxlZnQvdG9wIGFuZCBmbG9vciByaWdodC9ib3R0b20p
IHRvIG5vdCBicmVhayBjb25zdHJhaW50cy4KLSAgICAgICAgZGlzcGxheUxheW91dC5zZXQoKHNj
cmVlbldpZHRoICogbGF5b3V0SW5QZXJjZW50YWdlLmxlZnQgKyA5OSkgLyAxMDAsCi0gICAgICAg
ICAgICAoc2NyZWVuSGVpZ2h0ICogbGF5b3V0SW5QZXJjZW50YWdlLnRvcCArIDk5KSAvIDEwMCwK
LSAgICAgICAgICAgIChzY3JlZW5XaWR0aCAqIGxheW91dEluUGVyY2VudGFnZS5yaWdodCkgLyAx
MDAsCi0gICAgICAgICAgICAoc2NyZWVuSGVpZ2h0ICogbGF5b3V0SW5QZXJjZW50YWdlLmJvdHRv
bSkgLyAxMDApOwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBpZCArICIuIEFkanVz
dFRleHR1cmVDb29yZHMuIEFsbG93ZWQgZGlzcGxheSBzaXplOiAiCi0gICAgICAgICAgICAgICAg
KyBkaXNwbGF5TGF5b3V0LndpZHRoKCkgKyAiIHggIiArIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkg
KyAiLiBWaWRlbzogIiArIHZpZGVvV2lkdGgKLSAgICAgICAgICAgICAgICArICIgeCAiICsgdmlk
ZW9IZWlnaHQgKyAiLiBSb3RhdGlvbjogIiArIHJvdGF0aW9uRGVncmVlICsgIi4gTWlycm9yOiAi
ICsgbWlycm9yKTsKLSAgICAgICAgZmluYWwgZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IChyb3Rh
dGlvbkRlZ3JlZSAlIDE4MCA9PSAwKQotICAgICAgICAgICAgPyAoZmxvYXQpIHZpZGVvV2lkdGgg
LyB2aWRlb0hlaWdodAotICAgICAgICAgICAgOiAoZmxvYXQpIHZpZGVvSGVpZ2h0IC8gdmlkZW9X
aWR0aDsKLSAgICAgICAgLy8gQWRqdXN0IGRpc3BsYXkgc2l6ZSBiYXNlZCBvbiB8c2NhbGluZ1R5
cGV8LgotICAgICAgICBmaW5hbCBQb2ludCBkaXNwbGF5U2l6ZSA9IFJlbmRlcmVyQ29tbW9uLmdl
dERpc3BsYXlTaXplKAotICAgICAgICAgICAgc2NhbGluZ1R5cGUsIHZpZGVvQXNwZWN0UmF0aW8s
IGRpc3BsYXlMYXlvdXQud2lkdGgoKSwgZGlzcGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICAg
IGRpc3BsYXlMYXlvdXQuaW5zZXQoKGRpc3BsYXlMYXlvdXQud2lkdGgoKSAtIGRpc3BsYXlTaXpl
LngpIC8gMiwKLSAgICAgICAgICAgIChkaXNwbGF5TGF5b3V0LmhlaWdodCgpIC0gZGlzcGxheVNp
emUueSkgLyAyKTsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywKLSAgICAgICAgICAgICIgIEFkanVz
dGVkIGRpc3BsYXkgc2l6ZTogIiArIGRpc3BsYXlMYXlvdXQud2lkdGgoKSArICIgeCAiICsgZGlz
cGxheUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICAgIGxheW91dE1hdHJpeCA9IFJlbmRlcmVyQ29t
bW9uLmdldExheW91dE1hdHJpeCgKLSAgICAgICAgICAgIG1pcnJvciwgdmlkZW9Bc3BlY3RSYXRp
bywgKGZsb2F0KSBkaXNwbGF5TGF5b3V0LndpZHRoKCkgLyBkaXNwbGF5TGF5b3V0LmhlaWdodCgp
KTsKLSAgICAgICAgdXBkYXRlTGF5b3V0UHJvcGVydGllcyA9IGZhbHNlOwotICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiICBBZGp1c3RUZXh0dXJlQ29vcmRzIGRvbmUiKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBwcml2YXRlIHZvaWQgZHJhdygpIHsKLSAgICAgIGlmICghc2VlbkZyYW1lKSB7Ci0g
ICAgICAgIC8vIE5vIGZyYW1lIHJlY2VpdmVkIHlldCAtIG5vdGhpbmcgdG8gcmVuZGVyLgotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBsb25nIG5vdyA9IFN5c3RlbS5uYW5vVGltZSgp
OwotCi0gICAgICBmaW5hbCBib29sZWFuIGlzTmV3RnJhbWU7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KHBlbmRpbmdGcmFtZUxvY2spIHsKLSAgICAgICAgaXNOZXdGcmFtZSA9IChwZW5kaW5nRnJhbWUg
IT0gbnVsbCk7Ci0gICAgICAgIGlmIChpc05ld0ZyYW1lICYmIHN0YXJ0VGltZU5zID09IC0xKSB7
Ci0gICAgICAgICAgc3RhcnRUaW1lTnMgPSBub3c7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
aXNOZXdGcmFtZSkgewotICAgICAgICAgIHJvdGF0ZWRTYW1wbGluZ01hdHJpeCA9IFJlbmRlcmVy
Q29tbW9uLnJvdGF0ZVRleHR1cmVNYXRyaXgoCi0gICAgICAgICAgICAgIHBlbmRpbmdGcmFtZS5z
YW1wbGluZ01hdHJpeCwgcGVuZGluZ0ZyYW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICAgICAgICBp
ZiAocGVuZGluZ0ZyYW1lLnl1dkZyYW1lKSB7Ci0gICAgICAgICAgICByZW5kZXJlclR5cGUgPSBS
ZW5kZXJlclR5cGUuUkVOREVSRVJfWVVWOwotICAgICAgICAgICAgeXV2VXBsb2FkZXIudXBsb2Fk
WXV2RGF0YSh5dXZUZXh0dXJlcywgcGVuZGluZ0ZyYW1lLndpZHRoLCBwZW5kaW5nRnJhbWUuaGVp
Z2h0LAotICAgICAgICAgICAgICAgIHBlbmRpbmdGcmFtZS55dXZTdHJpZGVzLCBwZW5kaW5nRnJh
bWUueXV2UGxhbmVzKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVuZGVyZXJU
eXBlID0gUmVuZGVyZXJUeXBlLlJFTkRFUkVSX1RFWFRVUkU7Ci0gICAgICAgICAgICAvLyBFeHRl
cm5hbCB0ZXh0dXJlIHJlbmRlcmluZy4gTWFrZSBhIGRlZXAgY29weSBvZiB0aGUgZXh0ZXJuYWwg
dGV4dHVyZS4KLSAgICAgICAgICAgIC8vIFJlYWxsb2NhdGUgb2Zmc2NyZWVuIHRleHR1cmUgaWYg
bmVjZXNzYXJ5LgotICAgICAgICAgICAgdGV4dHVyZUNvcHkuc2V0U2l6ZShwZW5kaW5nRnJhbWUu
cm90YXRlZFdpZHRoKCksIHBlbmRpbmdGcmFtZS5yb3RhdGVkSGVpZ2h0KCkpOwotCi0gICAgICAg
ICAgICAvLyBCaW5kIG91ciBvZmZzY3JlZW4gZnJhbWVidWZmZXIuCi0gICAgICAgICAgICBHTEVT
MjAuZ2xCaW5kRnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCB0ZXh0dXJlQ29weS5n
ZXRGcmFtZUJ1ZmZlcklkKCkpOwotICAgICAgICAgICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9y
KCJnbEJpbmRGcmFtZWJ1ZmZlciIpOwotCi0gICAgICAgICAgICAvLyBDb3B5IHRoZSBPRVMgdGV4
dHVyZSBjb250ZW50LiBUaGlzIHdpbGwgYWxzbyBub3JtYWxpemUgdGhlIHNhbXBsaW5nIG1hdHJp
eC4KLSAgICAgICAgICAgIGRyYXdlci5kcmF3T2VzKHBlbmRpbmdGcmFtZS50ZXh0dXJlSWQsIHJv
dGF0ZWRTYW1wbGluZ01hdHJpeCwgdGV4dHVyZUNvcHkuZ2V0V2lkdGgoKSwKLSAgICAgICAgICAg
ICAgICB0ZXh0dXJlQ29weS5nZXRIZWlnaHQoKSwgMCwgMCwgdGV4dHVyZUNvcHkuZ2V0V2lkdGgo
KSwgdGV4dHVyZUNvcHkuZ2V0SGVpZ2h0KCkpOwotICAgICAgICAgICAgcm90YXRlZFNhbXBsaW5n
TWF0cml4ID0gUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKTsKLQotICAgICAgICAgICAg
Ly8gUmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIuCi0gICAgICAgICAgICBHTEVTMjAuZ2xCaW5k
RnJhbWVidWZmZXIoR0xFUzIwLkdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAgICAgICAgICAgIEdMRVMy
MC5nbEZpbmlzaCgpOwotICAgICAgICAgIH0KLSAgICAgICAgICBjb3B5VGltZU5zICs9IChTeXN0
ZW0ubmFub1RpbWUoKSAtIG5vdyk7Ci0gICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFt
ZURvbmUocGVuZGluZ0ZyYW1lKTsKLSAgICAgICAgICBwZW5kaW5nRnJhbWUgPSBudWxsOwotICAg
ICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHVwZGF0ZUxheW91dE1hdHJpeCgpOwotICAgICAgZmlu
YWwgZmxvYXRbXSB0ZXhNYXRyaXggPQotICAgICAgICAgIFJlbmRlcmVyQ29tbW9uLm11bHRpcGx5
TWF0cmljZXMocm90YXRlZFNhbXBsaW5nTWF0cml4LCBsYXlvdXRNYXRyaXgpOwotICAgICAgLy8g
T3BlbkdMIGRlZmF1bHRzIHRvIGxvd2VyIGxlZnQgb3JpZ2luIC0gZmxpcCB2aWV3cG9ydCBwb3Np
dGlvbiB2ZXJ0aWNhbGx5LgotICAgICAgZmluYWwgaW50IHZpZXdwb3J0WSA9IHNjcmVlbkhlaWdo
dCAtIGRpc3BsYXlMYXlvdXQuYm90dG9tOwotICAgICAgaWYgKHJlbmRlcmVyVHlwZSA9PSBSZW5k
ZXJlclR5cGUuUkVOREVSRVJfWVVWKSB7Ci0gICAgICAgIGRyYXdlci5kcmF3WXV2KHl1dlRleHR1
cmVzLCB0ZXhNYXRyaXgsIHZpZGVvV2lkdGgsIHZpZGVvSGVpZ2h0LCBkaXNwbGF5TGF5b3V0Lmxl
ZnQsCi0gICAgICAgICAgICB2aWV3cG9ydFksIGRpc3BsYXlMYXlvdXQud2lkdGgoKSwgZGlzcGxh
eUxheW91dC5oZWlnaHQoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBkcmF3ZXIuZHJhd1Jn
Yih0ZXh0dXJlQ29weS5nZXRUZXh0dXJlSWQoKSwgdGV4TWF0cml4LCB2aWRlb1dpZHRoLCB2aWRl
b0hlaWdodCwKLSAgICAgICAgICAgIGRpc3BsYXlMYXlvdXQubGVmdCwgdmlld3BvcnRZLCBkaXNw
bGF5TGF5b3V0LndpZHRoKCksIGRpc3BsYXlMYXlvdXQuaGVpZ2h0KCkpOwotICAgICAgfQotCi0g
ICAgICBpZiAoaXNOZXdGcmFtZSkgewotICAgICAgICBmcmFtZXNSZW5kZXJlZCsrOwotICAgICAg
ICBkcmF3VGltZU5zICs9IChTeXN0ZW0ubmFub1RpbWUoKSAtIG5vdyk7Ci0gICAgICAgIGlmICgo
ZnJhbWVzUmVuZGVyZWQgJSAzMDApID09IDApIHsKLSAgICAgICAgICBsb2dTdGF0aXN0aWNzKCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgbG9nU3RhdGlz
dGljcygpIHsKLSAgICAgIGxvbmcgdGltZVNpbmNlRmlyc3RGcmFtZU5zID0gU3lzdGVtLm5hbm9U
aW1lKCkgLSBzdGFydFRpbWVOczsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsg
Ii4gVHlwZTogIiArIHJlbmRlcmVyVHlwZSArICIuIEZyYW1lcyByZWNlaXZlZDogIgotICAgICAg
ICAgICAgICArIGZyYW1lc1JlY2VpdmVkICsgIi4gRHJvcHBlZDogIiArIGZyYW1lc0Ryb3BwZWQg
KyAiLiBSZW5kZXJlZDogIiArIGZyYW1lc1JlbmRlcmVkKTsKLSAgICAgIGlmIChmcmFtZXNSZWNl
aXZlZCA+IDAgJiYgZnJhbWVzUmVuZGVyZWQgPiAwKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcs
ICJEdXJhdGlvbjogIiArIChpbnQpICh0aW1lU2luY2VGaXJzdEZyYW1lTnMgLyAxZTYpICsgIiBt
cy4gRlBTOiAiCi0gICAgICAgICAgICAgICAgKyBmcmFtZXNSZW5kZXJlZCAqIDFlOSAvIHRpbWVT
aW5jZUZpcnN0RnJhbWVOcyk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJEcmF3IHRpbWU6ICIg
KyAoaW50KSAoZHJhd1RpbWVOcyAvICgxMDAwICogZnJhbWVzUmVuZGVyZWQpKQotICAgICAgICAg
ICAgICAgICsgIiB1cy4gQ29weSB0aW1lOiAiICsgKGludCkgKGNvcHlUaW1lTnMgLyAoMTAwMCAq
IGZyYW1lc1JlY2VpdmVkKSkgKyAiIHVzIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgc2V0U2NyZWVuU2l6ZShmaW5hbCBpbnQgc2NyZWVuV2lkdGgsIGZpbmFsIGludCBzY3Jl
ZW5IZWlnaHQpIHsKLSAgICAgIHN5bmNocm9uaXplZCAodXBkYXRlTGF5b3V0TG9jaykgewotICAg
ICAgICBpZiAoc2NyZWVuV2lkdGggPT0gdGhpcy5zY3JlZW5XaWR0aCAmJiBzY3JlZW5IZWlnaHQg
PT0gdGhpcy5zY3JlZW5IZWlnaHQpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIklEOiAiICsgaWQgKyAiLiBZdXZJbWFnZVJlbmRlcmVyLnNl
dFNjcmVlblNpemU6ICIgKyBzY3JlZW5XaWR0aCArICIgeCAiCi0gICAgICAgICAgICAgICAgKyBz
Y3JlZW5IZWlnaHQpOwotICAgICAgICB0aGlzLnNjcmVlbldpZHRoID0gc2NyZWVuV2lkdGg7Ci0g
ICAgICAgIHRoaXMuc2NyZWVuSGVpZ2h0ID0gc2NyZWVuSGVpZ2h0OwotICAgICAgICB1cGRhdGVM
YXlvdXRQcm9wZXJ0aWVzID0gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9p
ZCBzZXRQb3NpdGlvbihpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAg
ICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9y
KSB7Ci0gICAgICBmaW5hbCBSZWN0IGxheW91dEluUGVyY2VudGFnZSA9Ci0gICAgICAgICAgbmV3
IFJlY3QoeCwgeSwgTWF0aC5taW4oMTAwLCB4ICsgd2lkdGgpLCBNYXRoLm1pbigxMDAsIHkgKyBo
ZWlnaHQpKTsKLSAgICAgIHN5bmNocm9uaXplZCAodXBkYXRlTGF5b3V0TG9jaykgewotICAgICAg
ICBpZiAobGF5b3V0SW5QZXJjZW50YWdlLmVxdWFscyh0aGlzLmxheW91dEluUGVyY2VudGFnZSkg
JiYgc2NhbGluZ1R5cGUgPT0gdGhpcy5zY2FsaW5nVHlwZQotICAgICAgICAgICAgJiYgbWlycm9y
ID09IHRoaXMubWlycm9yKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsgIi4gWXV2SW1hZ2VSZW5kZXJlci5zZXRQb3Np
dGlvbjogKCIgKyB4ICsgIiwgIiArIHkgKyAiKSAiCi0gICAgICAgICAgICAgICAgKyB3aWR0aCAr
ICIgeCAiICsgaGVpZ2h0ICsgIi4gU2NhbGluZzogIiArIHNjYWxpbmdUeXBlICsgIi4gTWlycm9y
OiAiICsgbWlycm9yKTsKLSAgICAgICAgdGhpcy5sYXlvdXRJblBlcmNlbnRhZ2Uuc2V0KGxheW91
dEluUGVyY2VudGFnZSk7Ci0gICAgICAgIHRoaXMuc2NhbGluZ1R5cGUgPSBzY2FsaW5nVHlwZTsK
LSAgICAgICAgdGhpcy5taXJyb3IgPSBtaXJyb3I7Ci0gICAgICAgIHVwZGF0ZUxheW91dFByb3Bl
cnRpZXMgPSB0cnVlOwotICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBzZXRTaXpl
KGZpbmFsIGludCB2aWRlb1dpZHRoLCBmaW5hbCBpbnQgdmlkZW9IZWlnaHQsIGZpbmFsIGludCBy
b3RhdGlvbikgewotICAgICAgaWYgKHZpZGVvV2lkdGggPT0gdGhpcy52aWRlb1dpZHRoICYmIHZp
ZGVvSGVpZ2h0ID09IHRoaXMudmlkZW9IZWlnaHQKLSAgICAgICAgICAmJiByb3RhdGlvbiA9PSBy
b3RhdGlvbkRlZ3JlZSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBpZiAocmVu
ZGVyZXJFdmVudHMgIT0gbnVsbCkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiSUQ6ICIgKyBp
ZCArICIuIFJlcG9ydGluZyBmcmFtZSByZXNvbHV0aW9uIGNoYW5nZWQgdG8gIiArIHZpZGVvV2lk
dGggKyAiIHggIgotICAgICAgICAgICAgICAgICsgdmlkZW9IZWlnaHQpOwotICAgICAgICByZW5k
ZXJlckV2ZW50cy5vbkZyYW1lUmVzb2x1dGlvbkNoYW5nZWQodmlkZW9XaWR0aCwgdmlkZW9IZWln
aHQsIHJvdGF0aW9uKTsKLSAgICAgIH0KLQotICAgICAgc3luY2hyb25pemVkICh1cGRhdGVMYXlv
dXRMb2NrKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJJRDogIiArIGlkICsgIi4gWXV2SW1h
Z2VSZW5kZXJlci5zZXRTaXplOiAiICsgdmlkZW9XaWR0aCArICIgeCAiCi0gICAgICAgICAgICAg
ICAgKyB2aWRlb0hlaWdodCArICIgcm90YXRpb24gIiArIHJvdGF0aW9uKTsKLQotICAgICAgICB0
aGlzLnZpZGVvV2lkdGggPSB2aWRlb1dpZHRoOwotICAgICAgICB0aGlzLnZpZGVvSGVpZ2h0ID0g
dmlkZW9IZWlnaHQ7Ci0gICAgICAgIHJvdGF0aW9uRGVncmVlID0gcm90YXRpb247Ci0gICAgICAg
IHVwZGF0ZUxheW91dFByb3BlcnRpZXMgPSB0cnVlOwotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
ICBZdXZJbWFnZVJlbmRlcmVyLnNldFNpemUgZG9uZS4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVuZGVyRnJhbWUoSTQy
MEZyYW1lIGZyYW1lKSB7Ci0gICAgICBpZiAoc3VyZmFjZSA9PSBudWxsKSB7Ci0gICAgICAgIC8v
IFRoaXMgb2JqZWN0IGhhcyBiZWVuIHJlbGVhc2VkLgotICAgICAgICBWaWRlb1JlbmRlcmVyLnJl
bmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGlm
IChyZW5kZXJGcmFtZVRocmVhZCA9PSBudWxsKSB7Ci0gICAgICAgIHJlbmRlckZyYW1lVGhyZWFk
ID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKTsKLSAgICAgIH0KLSAgICAgIGlmICghc2VlbkZyYW1l
ICYmIHJlbmRlcmVyRXZlbnRzICE9IG51bGwpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIklE
OiAiICsgaWQgKyAiLiBSZXBvcnRpbmcgZmlyc3QgcmVuZGVyZWQgZnJhbWUuIik7Ci0gICAgICAg
IHJlbmRlcmVyRXZlbnRzLm9uRmlyc3RGcmFtZVJlbmRlcmVkKCk7Ci0gICAgICB9Ci0gICAgICBm
cmFtZXNSZWNlaXZlZCsrOwotICAgICAgc3luY2hyb25pemVkIChwZW5kaW5nRnJhbWVMb2NrKSB7
Ci0gICAgICAgIC8vIENoZWNrIGlucHV0IGZyYW1lIHBhcmFtZXRlcnMuCi0gICAgICAgIGlmIChm
cmFtZS55dXZGcmFtZSkgewotICAgICAgICAgIGlmIChmcmFtZS55dXZTdHJpZGVzWzBdIDwgZnJh
bWUud2lkdGggfHwgZnJhbWUueXV2U3RyaWRlc1sxXSA8IGZyYW1lLndpZHRoIC8gMgotICAgICAg
ICAgICAgICB8fCBmcmFtZS55dXZTdHJpZGVzWzJdIDwgZnJhbWUud2lkdGggLyAyKSB7Ci0gICAg
ICAgICAgICBMb2dnaW5nLmUoVEFHLCAiSW5jb3JyZWN0IHN0cmlkZXMgIiArIGZyYW1lLnl1dlN0
cmlkZXNbMF0gKyAiLCAiICsgZnJhbWUueXV2U3RyaWRlc1sxXQotICAgICAgICAgICAgICAgICAg
ICArICIsICIgKyBmcmFtZS55dXZTdHJpZGVzWzJdKTsKLSAgICAgICAgICAgIFZpZGVvUmVuZGVy
ZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocGVuZGluZ0ZyYW1lICE9IG51bGwpIHsKLSAg
ICAgICAgICAvLyBTa2lwIHJlbmRlcmluZyBvZiB0aGlzIGZyYW1lIGlmIHByZXZpb3VzIGZyYW1l
IHdhcyBub3QgcmVuZGVyZWQgeWV0LgotICAgICAgICAgIGZyYW1lc0Ryb3BwZWQrKzsKLSAgICAg
ICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgICAgc2Vl
bkZyYW1lID0gdHJ1ZTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcGVu
ZGluZ0ZyYW1lID0gZnJhbWU7Ci0gICAgICB9Ci0gICAgICBzZXRTaXplKGZyYW1lLndpZHRoLCBm
cmFtZS5oZWlnaHQsIGZyYW1lLnJvdGF0aW9uRGVncmVlKTsKLSAgICAgIHNlZW5GcmFtZSA9IHRy
dWU7Ci0KLSAgICAgIC8vIFJlcXVlc3QgcmVuZGVyaW5nLgotICAgICAgc3VyZmFjZS5yZXF1ZXN0
UmVuZGVyKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIFBhc3NlcyBHTFN1cmZhY2VWaWV3IHRvIHZp
ZGVvIHJlbmRlcmVyLiAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFZp
ZXcoR0xTdXJmYWNlVmlldyBzdXJmYWNlLCBSdW5uYWJsZSBlZ2xDb250ZXh0UmVhZHlDYWxsYmFj
aykgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3VpLnNldFZpZXciKTsKLSAg
ICBpbnN0YW5jZSA9IG5ldyBWaWRlb1JlbmRlcmVyR3VpKHN1cmZhY2UpOwotICAgIGVnbENvbnRl
eHRSZWFkeSA9IGVnbENvbnRleHRSZWFkeUNhbGxiYWNrOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBzeW5jaHJvbml6ZWQgRWdsQmFzZS5Db250ZXh0IGdldEVnbEJhc2VDb250ZXh0KCkgewotICAg
IHJldHVybiBlZ2xDb250ZXh0OwotICB9Ci0KLSAgLyoqIFJlbGVhc2VzIEdMU3VyZmFjZVZpZXcg
dmlkZW8gcmVuZGVyZXIuICovCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgZGlz
cG9zZSgpIHsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiVmlkZW9SZW5kZXJlckd1aS5kaXNwb3NlIik7Ci0gICAg
c3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgZm9yIChZ
dXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVyZXIgOiBpbnN0YW5jZS55dXZJbWFnZVJlbmRl
cmVycykgewotICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAg
ICAgIGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzLmNsZWFyKCk7Ci0gICAgfQotICAgIHJlbmRl
ckZyYW1lVGhyZWFkID0gbnVsbDsKLSAgICBkcmF3VGhyZWFkID0gbnVsbDsKLSAgICBpbnN0YW5j
ZS5zdXJmYWNlID0gbnVsbDsKLSAgICBlZ2xDb250ZXh0ID0gbnVsbDsKLSAgICBlZ2xDb250ZXh0
UmVhZHkgPSBudWxsOwotICAgIGluc3RhbmNlID0gbnVsbDsKLSAgfQotCi0gIC8qKgotICAgKiBD
cmVhdGVzIFZpZGVvUmVuZGVyZXIgd2l0aCB0b3AgbGVmdCBjb3JuZXIgYXQgKHgsIHkpIGFuZCBy
ZXNvbHV0aW9uCi0gICAqICh3aWR0aCwgaGVpZ2h0KS4gQWxsIHBhcmFtZXRlcnMgYXJlIGluIHBl
cmNlbnRhZ2Ugb2Ygc2NyZWVuIHJlc29sdXRpb24uCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFZp
ZGVvUmVuZGVyZXIgY3JlYXRlR3VpKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
LAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4g
bWlycm9yKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBZdXZJbWFnZVJlbmRlcmVyIGphdmFHdWlS
ZW5kZXJlciA9IGNyZWF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWlycm9y
KTsKLSAgICByZXR1cm4gbmV3IFZpZGVvUmVuZGVyZXIoamF2YUd1aVJlbmRlcmVyKTsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgY3JlYXRlR3VpUmVuZGVy
ZXIoCi0gICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyZXJD
b21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yKSB7Ci0gICAgcmV0
dXJuIGNyZWF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWlycm9yKTsKLSAg
fQotCi0gIC8qKgotICAgKiBDcmVhdGVzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHdpdGggdG9w
IGxlZnQgY29ybmVyIGF0ICh4LCB5KSBhbmQKLSAgICogcmVzb2x1dGlvbiAod2lkdGgsIGhlaWdo
dCkuIEFsbCBwYXJhbWV0ZXJzIGFyZSBpbiBwZXJjZW50YWdlIG9mCi0gICAqIHNjcmVlbiByZXNv
bHV0aW9uLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgWXV2SW1hZ2VSZW5k
ZXJlciBjcmVhdGUoCi0gICAgICBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
UmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUsIGJvb2xlYW4gbWlycm9yKSB7
Ci0gICAgcmV0dXJuIGNyZWF0ZSh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzY2FsaW5nVHlwZSwgbWly
cm9yLCBuZXcgR2xSZWN0RHJhd2VyKCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENyZWF0ZXMgVmlk
ZW9SZW5kZXJlci5DYWxsYmFja3Mgd2l0aCB0b3AgbGVmdCBjb3JuZXIgYXQgKHgsIHkpIGFuZCBy
ZXNvbHV0aW9uICh3aWR0aCwgaGVpZ2h0KS4KLSAgICogQWxsIHBhcmFtZXRlcnMgYXJlIGluIHBl
cmNlbnRhZ2Ugb2Ygc2NyZWVuIHJlc29sdXRpb24uIFRoZSBjdXN0b20gfGRyYXdlcnwgd2lsbCBi
ZSB1c2VkIGZvcgotICAgKiBkcmF3aW5nIGZyYW1lcyBvbiB0aGUgRUdMU3VyZmFjZS4gVGhpcyBj
bGFzcyBpcyByZXNwb25zaWJsZSBmb3IgY2FsbGluZyByZWxlYXNlKCkgb24gfGRyYXdlcnwuCi0g
ICAqLwotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBZdXZJbWFnZVJlbmRlcmVyIGNyZWF0
ZShpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKLSAgICAgIFJlbmRlcmVyQ29t
bW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFuIG1pcnJvciwgUmVuZGVyZXJDb21t
b24uR2xEcmF3ZXIgZHJhd2VyKSB7Ci0gICAgLy8gQ2hlY2sgZGlzcGxheSByZWdpb24gcGFyYW1l
dGVycy4KLSAgICBpZiAoeCA8IDAgfHwgeCA+IDEwMCB8fCB5IDwgMCB8fCB5ID4gMTAwIHx8IHdp
ZHRoIDwgMCB8fCB3aWR0aCA+IDEwMCB8fCBoZWlnaHQgPCAwCi0gICAgICAgIHx8IGhlaWdodCA+
IDEwMCB8fCB4ICsgd2lkdGggPiAxMDAgfHwgeSArIGhlaWdodCA+IDEwMCkgewotICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkluY29ycmVjdCB3aW5kb3cgcGFyYW1ldGVycy4iKTsK
LSAgICB9Ci0KLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oIkF0dGVtcHQgdG8gY3JlYXRlIHl1diByZW5kZXJlciBiZWZvcmUgc2V0
dGluZyBHTFN1cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIGZpbmFsIFl1dkltYWdlUmVuZGVyZXIg
eXV2SW1hZ2VSZW5kZXJlciA9IG5ldyBZdXZJbWFnZVJlbmRlcmVyKGluc3RhbmNlLnN1cmZhY2Us
Ci0gICAgICAgIGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzLnNpemUoKSwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvciwgZHJhd2VyKTsKLSAgICBzeW5jaHJvbml6ZWQg
KGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBpZiAoaW5zdGFuY2Uub25TdXJm
YWNlQ3JlYXRlZENhbGxlZCkgewotICAgICAgICAvLyBvblN1cmZhY2VDcmVhdGVkIGhhcyBhbHJl
YWR5IGJlZW4gY2FsbGVkIGZvciBWaWRlb1JlbmRlcmVyR3VpIC0KLSAgICAgICAgLy8gbmVlZCB0
byBjcmVhdGUgdGV4dHVyZSBmb3IgbmV3IGltYWdlIGFuZCBhZGQgaW1hZ2UgdG8gdGhlCi0gICAg
ICAgIC8vIHJlbmRlcmluZyBsaXN0LgotICAgICAgICBmaW5hbCBDb3VudERvd25MYXRjaCBjb3Vu
dERvd25MYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICAgICAgaW5zdGFuY2Uuc3Vy
ZmFjZS5xdWV1ZUV2ZW50KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICB5dXZJbWFnZVJlbmRlcmVy
LmNyZWF0ZVRleHR1cmVzKCk7Ci0gICAgICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLnNldFNjcmVl
blNpemUoaW5zdGFuY2Uuc2NyZWVuV2lkdGgsIGluc3RhbmNlLnNjcmVlbkhlaWdodCk7Ci0gICAg
ICAgICAgICBjb3VudERvd25MYXRjaC5jb3VudERvd24oKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0pOwotICAgICAgICAvLyBXYWl0IGZvciB0YXNrIGNvbXBsZXRpb24uCi0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgY291bnREb3duTGF0Y2guYXdhaXQoKTsKLSAgICAgICAgfSBjYXRjaCAoSW50
ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0
aW9uKGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBBZGQgeXV2IHJlbmRlcmVyIHRv
IHJlbmRlcmluZyBsaXN0LgotICAgICAgaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMuYWRkKHl1
dkltYWdlUmVuZGVyZXIpOwotICAgIH0KLSAgICByZXR1cm4geXV2SW1hZ2VSZW5kZXJlcjsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgdXBkYXRlKFZpZGVvUmVuZGVy
ZXIuQ2FsbGJhY2tzIHJlbmRlcmVyLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwKLSAgICAgIGlu
dCBoZWlnaHQsIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlLCBib29sZWFu
IG1pcnJvcikgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVyR3VpLnVwZGF0ZSIp
OwotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbigiQXR0ZW1wdCB0byB1cGRhdGUgeXV2IHJlbmRlcmVyIGJlZm9yZSBzZXR0aW5nIEdM
U3VyZmFjZVZpZXciKTsKLSAgICB9Ci0gICAgc3luY2hyb25pemVkIChpbnN0YW5jZS55dXZJbWFn
ZVJlbmRlcmVycykgewotICAgICAgZm9yIChZdXZJbWFnZVJlbmRlcmVyIHl1dkltYWdlUmVuZGVy
ZXIgOiBpbnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycykgewotICAgICAgICBpZiAoeXV2SW1hZ2VS
ZW5kZXJlciA9PSByZW5kZXJlcikgewotICAgICAgICAgIHl1dkltYWdlUmVuZGVyZXIuc2V0UG9z
aXRpb24oeCwgeSwgd2lkdGgsIGhlaWdodCwgc2NhbGluZ1R5cGUsIG1pcnJvcik7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2
b2lkIHNldFJlbmRlcmVyRXZlbnRzKAotICAgICAgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVu
ZGVyZXIsIFJlbmRlcmVyQ29tbW9uLlJlbmRlcmVyRXZlbnRzIHJlbmRlcmVyRXZlbnRzKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkuc2V0UmVuZGVyZXJFdmVudHMiKTsK
LSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewotICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oIkF0dGVtcHQgdG8gc2V0IHJlbmRlcmVyIGV2ZW50cyBiZWZvcmUgc2V0dGluZyBHTFN1
cmZhY2VWaWV3Iik7Ci0gICAgfQotICAgIHN5bmNocm9uaXplZCAoaW5zdGFuY2UueXV2SW1hZ2VS
ZW5kZXJlcnMpIHsKLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVy
IDogaW5zdGFuY2UueXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgICAgaWYgKHl1dkltYWdlUmVu
ZGVyZXIgPT0gcmVuZGVyZXIpIHsKLSAgICAgICAgICB5dXZJbWFnZVJlbmRlcmVyLnJlbmRlcmVy
RXZlbnRzID0gcmVuZGVyZXJFdmVudHM7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHJlbW92ZShWaWRlb1JlbmRlcmVy
LkNhbGxiYWNrcyByZW5kZXJlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJWaWRlb1JlbmRlcmVy
R3VpLnJlbW92ZSIpOwotICAgIGlmIChpbnN0YW5jZSA9PSBudWxsKSB7Ci0gICAgICB0aHJvdyBu
ZXcgUnVudGltZUV4Y2VwdGlvbigiQXR0ZW1wdCB0byByZW1vdmUgcmVuZGVyZXIgYmVmb3JlIHNl
dHRpbmcgR0xTdXJmYWNlVmlldyIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6ZWQgKGluc3RhbmNl
Lnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmaW5hbCBpbnQgaW5kZXggPSBpbnN0YW5jZS55
dXZJbWFnZVJlbmRlcmVycy5pbmRleE9mKHJlbmRlcmVyKTsKLSAgICAgIGlmIChpbmRleCA9PSAt
MSkgewotICAgICAgICBMb2dnaW5nLncoVEFHLCAiQ291bGRuJ3QgcmVtb3ZlIHJlbmRlcmVyIChu
b3QgcHJlc2VudCBpbiBjdXJyZW50IGxpc3QpIik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBp
bnN0YW5jZS55dXZJbWFnZVJlbmRlcmVycy5yZW1vdmUoaW5kZXgpLnJlbGVhc2UoKTsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0
KFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbmRlcmVyKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywg
IlZpZGVvUmVuZGVyZXJHdWkucmVzZXQiKTsKLSAgICBpZiAoaW5zdGFuY2UgPT0gbnVsbCkgewot
ICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkF0dGVtcHQgdG8gcmVzZXQgcmVuZGVy
ZXIgYmVmb3JlIHNldHRpbmcgR0xTdXJmYWNlVmlldyIpOwotICAgIH0KLSAgICBzeW5jaHJvbml6
ZWQgKGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVu
ZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IGluc3RhbmNlLnl1dkltYWdlUmVuZGVyZXJzKSB7Ci0g
ICAgICAgIGlmICh5dXZJbWFnZVJlbmRlcmVyID09IHJlbmRlcmVyKSB7Ci0gICAgICAgICAgeXV2
SW1hZ2VSZW5kZXJlci5yZXNldCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBwcmludFN0YWNrVHJhY2UoVGhyZWFkIHRocmVhZCwgU3Ry
aW5nIHRocmVhZE5hbWUpIHsKLSAgICBpZiAodGhyZWFkICE9IG51bGwpIHsKLSAgICAgIFN0YWNr
VHJhY2VFbGVtZW50W10gc3RhY2tUcmFjZXMgPSB0aHJlYWQuZ2V0U3RhY2tUcmFjZSgpOwotICAg
ICAgaWYgKHN0YWNrVHJhY2VzLmxlbmd0aCA+IDApIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywg
dGhyZWFkTmFtZSArICIgc3RhY2tzIHRyYWNlOiIpOwotICAgICAgICBmb3IgKFN0YWNrVHJhY2VF
bGVtZW50IHN0YWNrVHJhY2UgOiBzdGFja1RyYWNlcykgewotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsIHN0YWNrVHJhY2UudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0g
IH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHByaW50U3RhY2tUcmFjZXMo
KSB7Ci0gICAgaWYgKGluc3RhbmNlID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgcHJpbnRTdGFja1RyYWNlKHJlbmRlckZyYW1lVGhyZWFkLCAiUmVuZGVyIGZyYW1lIHRocmVh
ZCIpOwotICAgIHByaW50U3RhY2tUcmFjZShkcmF3VGhyZWFkLCAiRHJhdyB0aHJlYWQiKTsKLSAg
fQotCi0gIEBTdXBwcmVzc0xpbnQoIk5ld0FwaSIpCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBvblN1cmZhY2VDcmVhdGVkKEdMMTAgdW51c2VkLCBFR0xDb25maWcgY29uZmlnKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkub25TdXJmYWNlQ3JlYXRlZCIpOwotICAg
IC8vIFN0b3JlIHJlbmRlciBFR0wgY29udGV4dC4KLSAgICBzeW5jaHJvbml6ZWQgKFZpZGVvUmVu
ZGVyZXJHdWkuY2xhc3MpIHsKLSAgICAgIGlmIChFZ2xCYXNlMTQuaXNFR0wxNFN1cHBvcnRlZCgp
KSB7Ci0gICAgICAgIGVnbENvbnRleHQgPSBuZXcgRWdsQmFzZTE0LkNvbnRleHQoRUdMMTQuZWds
R2V0Q3VycmVudENvbnRleHQoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBlZ2xDb250ZXh0
ID0gbmV3IEVnbEJhc2UxMC5Db250ZXh0KCgoRUdMMTApIEVHTENvbnRleHQuZ2V0RUdMKCkpLmVn
bEdldEN1cnJlbnRDb250ZXh0KCkpOwotICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAi
VmlkZW9SZW5kZXJlckd1aSBFR0wgQ29udGV4dDogIiArIGVnbENvbnRleHQpOwotICAgIH0KLQot
ICAgIHN5bmNocm9uaXplZCAoeXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgIC8vIENyZWF0ZSB0
ZXh0dXJlcyBmb3IgYWxsIGltYWdlcy4KLSAgICAgIGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJ
bWFnZVJlbmRlcmVyIDogeXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAgICAgeXV2SW1hZ2VSZW5k
ZXJlci5jcmVhdGVUZXh0dXJlcygpOwotICAgICAgfQotICAgICAgb25TdXJmYWNlQ3JlYXRlZENh
bGxlZCA9IHRydWU7Ci0gICAgfQotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigib25TdXJm
YWNlQ3JlYXRlZCBkb25lIik7Ci0gICAgR0xFUzIwLmdsUGl4ZWxTdG9yZWkoR0xFUzIwLkdMX1VO
UEFDS19BTElHTk1FTlQsIDEpOwotICAgIEdMRVMyMC5nbENsZWFyQ29sb3IoMC4xNWYsIDAuMTVm
LCAwLjE1ZiwgMS4wZik7Ci0KLSAgICAvLyBGaXJlIEVHTCBjb250ZXh0IHJlYWR5IGV2ZW50Lgot
ICAgIHN5bmNocm9uaXplZCAoVmlkZW9SZW5kZXJlckd1aS5jbGFzcykgewotICAgICAgaWYgKGVn
bENvbnRleHRSZWFkeSAhPSBudWxsKSB7Ci0gICAgICAgIGVnbENvbnRleHRSZWFkeS5ydW4oKTsK
LSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25TdXJm
YWNlQ2hhbmdlZChHTDEwIHVudXNlZCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgIlZpZGVvUmVuZGVyZXJHdWkub25TdXJmYWNlQ2hhbmdlZDogIiArIHdpZHRo
ICsgIiB4ICIgKyBoZWlnaHQgKyAiICAiKTsKLSAgICBzY3JlZW5XaWR0aCA9IHdpZHRoOwotICAg
IHNjcmVlbkhlaWdodCA9IGhlaWdodDsKLSAgICBzeW5jaHJvbml6ZWQgKHl1dkltYWdlUmVuZGVy
ZXJzKSB7Ci0gICAgICBmb3IgKFl1dkltYWdlUmVuZGVyZXIgeXV2SW1hZ2VSZW5kZXJlciA6IHl1
dkltYWdlUmVuZGVyZXJzKSB7Ci0gICAgICAgIHl1dkltYWdlUmVuZGVyZXIuc2V0U2NyZWVuU2l6
ZShzY3JlZW5XaWR0aCwgc2NyZWVuSGVpZ2h0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25EcmF3RnJhbWUoR0wxMCB1bnVzZWQpIHsKLSAgICBp
ZiAoZHJhd1RocmVhZCA9PSBudWxsKSB7Ci0gICAgICBkcmF3VGhyZWFkID0gVGhyZWFkLmN1cnJl
bnRUaHJlYWQoKTsKLSAgICB9Ci0gICAgR0xFUzIwLmdsVmlld3BvcnQoMCwgMCwgc2NyZWVuV2lk
dGgsIHNjcmVlbkhlaWdodCk7Ci0gICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JV
RkZFUl9CSVQpOwotICAgIHN5bmNocm9uaXplZCAoeXV2SW1hZ2VSZW5kZXJlcnMpIHsKLSAgICAg
IGZvciAoWXV2SW1hZ2VSZW5kZXJlciB5dXZJbWFnZVJlbmRlcmVyIDogeXV2SW1hZ2VSZW5kZXJl
cnMpIHsKLSAgICAgICAgeXV2SW1hZ2VSZW5kZXJlci5kcmF3KCk7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvU291cmNlLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9WaWRlb1NvdXJjZS5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL1ZpZGVvU291cmNlLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAt
MSwzMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0K
LS8qKgotICogSmF2YSB3cmFwcGVyIG9mIG5hdGl2ZSBBbmRyb2lkVmlkZW9UcmFja1NvdXJjZS4K
LSAqLwotcHVibGljIGNsYXNzIFZpZGVvU291cmNlIGV4dGVuZHMgTWVkaWFTb3VyY2UgewotICBw
dWJsaWMgVmlkZW9Tb3VyY2UobG9uZyBuYXRpdmVTb3VyY2UpIHsKLSAgICBzdXBlcihuYXRpdmVT
b3VyY2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGNh
dXNlIGZyYW1lcyB0byBiZSBzY2FsZWQgZG93biB0byB0aGUgcmVxdWVzdGVkIHJlc29sdXRpb24u
IEFsc28sCi0gICAqIGZyYW1lcyB3aWxsIGJlIGNyb3BwZWQgdG8gbWF0Y2ggdGhlIHJlcXVlc3Rl
ZCBhc3BlY3QgcmF0aW8sIGFuZCBmcmFtZXMgd2lsbCBiZSBkcm9wcGVkIHRvIG1hdGNoCi0gICAq
IHRoZSByZXF1ZXN0ZWQgZnBzLiBUaGUgcmVxdWVzdGVkIGFzcGVjdCByYXRpbyBpcyBvcmllbnRh
dGlvbiBhZ25vc3RpYyBhbmQgd2lsbCBiZSBhZGp1c3RlZCB0bwotICAgKiBtYWludGFpbiB0aGUg
aW5wdXQgb3JpZW50YXRpb24sIHNvIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIGUuZy4gMTI4MHg3MjAg
b3IgNzIweDEyODAgaXMgcmVxdWVzdGVkLgotICAgKi8KLSAgcHVibGljIHZvaWQgYWRhcHRPdXRw
dXRGb3JtYXQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnBzKSB7Ci0gICAgbmF0aXZlQWRh
cHRPdXRwdXRGb3JtYXQobmF0aXZlU291cmNlLCB3aWR0aCwgaGVpZ2h0LCBmcHMpOwotICB9Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgbmF0aXZlIHZvaWQgbmF0aXZlQWRhcHRPdXRwdXRGb3JtYXQoCi0g
ICAgICBsb25nIG5hdGl2ZVNvdXJjZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnBzKTsK
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvVmlkZW9UcmFjay5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvVmlkZW9UcmFjay5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL1ZpZGVvVHJhY2suamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0
IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0vKiogSmF2YSB2ZXJzaW9uIG9mIFZpZGVvVHJhY2tJ
bnRlcmZhY2UuICovCi1wdWJsaWMgY2xhc3MgVmlkZW9UcmFjayBleHRlbmRzIE1lZGlhU3RyZWFt
VHJhY2sgewotICBwcml2YXRlIGZpbmFsIExpbmtlZExpc3Q8VmlkZW9SZW5kZXJlcj4gcmVuZGVy
ZXJzID0gbmV3IExpbmtlZExpc3Q8VmlkZW9SZW5kZXJlcj4oKTsKLQotICBwdWJsaWMgVmlkZW9U
cmFjayhsb25nIG5hdGl2ZVRyYWNrKSB7Ci0gICAgc3VwZXIobmF0aXZlVHJhY2spOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgYWRkUmVuZGVyZXIoVmlkZW9SZW5kZXJlciByZW5kZXJlcikgewotICAg
IHJlbmRlcmVycy5hZGQocmVuZGVyZXIpOwotICAgIG5hdGl2ZUFkZFJlbmRlcmVyKG5hdGl2ZVRy
YWNrLCByZW5kZXJlci5uYXRpdmVWaWRlb1JlbmRlcmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHJlbW92ZVJlbmRlcmVyKFZpZGVvUmVuZGVyZXIgcmVuZGVyZXIpIHsKLSAgICBpZiAoIXJlbmRl
cmVycy5yZW1vdmUocmVuZGVyZXIpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIG5hdGl2
ZVJlbW92ZVJlbmRlcmVyKG5hdGl2ZVRyYWNrLCByZW5kZXJlci5uYXRpdmVWaWRlb1JlbmRlcmVy
KTsKLSAgICByZW5kZXJlci5kaXNwb3NlKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNwb3Nl
KCkgewotICAgIHdoaWxlICghcmVuZGVyZXJzLmlzRW1wdHkoKSkgewotICAgICAgcmVtb3ZlUmVu
ZGVyZXIocmVuZGVyZXJzLmdldEZpcnN0KCkpOwotICAgIH0KLSAgICBzdXBlci5kaXNwb3NlKCk7
Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBuYXRpdmUgdm9pZCBmcmVlKGxvbmcgbmF0aXZlVHJh
Y2spOwotCi0gIHByaXZhdGUgc3RhdGljIG5hdGl2ZSB2b2lkIG5hdGl2ZUFkZFJlbmRlcmVyKGxv
bmcgbmF0aXZlVHJhY2ssIGxvbmcgbmF0aXZlUmVuZGVyZXIpOwotCi0gIHByaXZhdGUgc3RhdGlj
IG5hdGl2ZSB2b2lkIG5hdGl2ZVJlbW92ZVJlbmRlcmVyKGxvbmcgbmF0aXZlVHJhY2ssIGxvbmcg
bmF0aXZlUmVuZGVyZXIpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy9ZdXZDb252ZXJ0ZXIu
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1l1dkNvbnZlcnRlci5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL1l1dkNvbnZlcnRlci5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsMjU5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhl
IFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMxMUV4dDsKLWltcG9y
dCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWlt
cG9ydCBqYXZhLm5pby5GbG9hdEJ1ZmZlcjsKLQotLyoqCi0gKiBDbGFzcyBmb3IgY29udmVydGlu
ZyBPRVMgdGV4dHVyZXMgdG8gYSBZVVYgQnl0ZUJ1ZmZlci4gSXQgc2hvdWxkIGJlIGNvbnN0cnVj
dGVkIG9uIGEgdGhyZWFkIHdpdGgKLSAqIGFuIGFjdGl2ZSBFR0wgY29udGV4dCwgYW5kIG9ubHkg
YmUgdXNlZCBmcm9tIHRoYXQgdGhyZWFkLgotICovCi1jbGFzcyBZdXZDb252ZXJ0ZXIgewotICAv
LyBWZXJ0ZXggY29vcmRpbmF0ZXMgaW4gTm9ybWFsaXplZCBEZXZpY2UgQ29vcmRpbmF0ZXMsIGku
ZS4KLSAgLy8gKC0xLCAtMSkgaXMgYm90dG9tLWxlZnQgYW5kICgxLCAxKSBpcyB0b3AtcmlnaHQu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIEZsb2F0QnVmZmVyIERFVklDRV9SRUNUQU5HTEUgPSBH
bFV0aWwuY3JlYXRlRmxvYXRCdWZmZXIobmV3IGZsb2F0W10gewotICAgICAgLTEuMGYsIC0xLjBm
LCAvLyBCb3R0b20gbGVmdC4KLSAgICAgIDEuMGYsIC0xLjBmLCAvLyBCb3R0b20gcmlnaHQuCi0g
ICAgICAtMS4wZiwgMS4wZiwgLy8gVG9wIGxlZnQuCi0gICAgICAxLjBmLCAxLjBmLCAvLyBUb3Ag
cmlnaHQuCi0gIH0pOwotCi0gIC8vIFRleHR1cmUgY29vcmRpbmF0ZXMgLSAoMCwgMCkgaXMgYm90
dG9tLWxlZnQgYW5kICgxLCAxKSBpcyB0b3AtcmlnaHQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IEZsb2F0QnVmZmVyIFRFWFRVUkVfUkVDVEFOR0xFID0gR2xVdGlsLmNyZWF0ZUZsb2F0QnVmZmVy
KG5ldyBmbG9hdFtdIHsKLSAgICAgIDAuMGYsIDAuMGYsIC8vIEJvdHRvbSBsZWZ0LgotICAgICAg
MS4wZiwgMC4wZiwgLy8gQm90dG9tIHJpZ2h0LgotICAgICAgMC4wZiwgMS4wZiwgLy8gVG9wIGxl
ZnQuCi0gICAgICAxLjBmLCAxLjBmIC8vIFRvcCByaWdodC4KLSAgfSk7Ci0KLSAgLy8gY2xhbmct
Zm9ybWF0IG9mZgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkVSVEVYX1NIQURFUiA9
Ci0gICAgICAgICJ2YXJ5aW5nIHZlYzIgaW50ZXJwX3RjO1xuIgotICAgICAgKyAiYXR0cmlidXRl
IHZlYzQgaW5fcG9zO1xuIgotICAgICAgKyAiYXR0cmlidXRlIHZlYzQgaW5fdGM7XG4iCi0gICAg
ICArICJcbiIKLSAgICAgICsgInVuaWZvcm0gbWF0NCB0ZXhNYXRyaXg7XG4iCi0gICAgICArICJc
biIKLSAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICsgIiAgICBnbF9Qb3NpdGlvbiA9
IGluX3BvcztcbiIKLSAgICAgICsgIiAgICBpbnRlcnBfdGMgPSAodGV4TWF0cml4ICogaW5fdGMp
Lnh5O1xuIgotICAgICAgKyAifVxuIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
RlJBR01FTlRfU0hBREVSID0KLSAgICAgICAgIiNleHRlbnNpb24gR0xfT0VTX0VHTF9pbWFnZV9l
eHRlcm5hbCA6IHJlcXVpcmVcbiIKLSAgICAgICsgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xu
IgotICAgICAgKyAidmFyeWluZyB2ZWMyIGludGVycF90YztcbiIKLSAgICAgICsgIlxuIgotICAg
ICAgKyAidW5pZm9ybSBzYW1wbGVyRXh0ZXJuYWxPRVMgb2VzVGV4O1xuIgotICAgICAgLy8gRGlm
ZmVyZW5jZSBpbiB0ZXh0dXJlIGNvb3JkaW5hdGUgY29ycmVzcG9uZGluZyB0byBvbmUKLSAgICAg
IC8vIHN1Yi1waXhlbCBpbiB0aGUgeCBkaXJlY3Rpb24uCi0gICAgICArICJ1bmlmb3JtIHZlYzIg
eFVuaXQ7XG4iCi0gICAgICAvLyBDb2xvciBjb252ZXJzaW9uIGNvZWZmaWNpZW50cywgaW5jbHVk
aW5nIGNvbnN0YW50IHRlcm0KLSAgICAgICsgInVuaWZvcm0gdmVjNCBjb2VmZnM7XG4iCi0gICAg
ICArICJcbiIKLSAgICAgICsgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgIC8vIFNpbmNlIHRoZSBh
bHBoYSByZWFkIGZyb20gdGhlIHRleHR1cmUgaXMgYWx3YXlzIDEsIHRoaXMgY291bGQKLSAgICAg
IC8vIGJlIHdyaXR0ZW4gYXMgYSBtYXQ0IHggdmVjNCBtdWx0aXBseS4gSG93ZXZlciwgdGhhdCBz
ZWVtcyB0bwotICAgICAgLy8gZ2l2ZSBhIHdvcnNlIGZyYW1lcmF0ZSwgcG9zc2libHkgYmVjYXVz
ZSB0aGUgYWRkaXRpb25hbAotICAgICAgLy8gbXVsdGlwbGllcyBieSAxLjAgY29uc3VtZSByZXNv
dXJjZXMuIFRPRE8obmlzc2UpOiBDb3VsZCBhbHNvCi0gICAgICAvLyB0cnkgdG8gZG8gaXQgYXMg
YSB2ZWMzIHggbWF0M3g0LCBmb2xsb3dlZCBieSBhbiBhZGQgaW4gb2YgYQotICAgICAgLy8gY29u
c3RhbnQgdmVjdG9yLgotICAgICAgKyAiICBnbF9GcmFnQ29sb3IuciA9IGNvZWZmcy5hICsgZG90
KGNvZWZmcy5yZ2IsXG4iCi0gICAgICArICIgICAgICB0ZXh0dXJlMkQob2VzVGV4LCBpbnRlcnBf
dGMgLSAxLjUgKiB4VW5pdCkucmdiKTtcbiIKLSAgICAgICsgIiAgZ2xfRnJhZ0NvbG9yLmcgPSBj
b2VmZnMuYSArIGRvdChjb2VmZnMucmdiLFxuIgotICAgICAgKyAiICAgICAgdGV4dHVyZTJEKG9l
c1RleCwgaW50ZXJwX3RjIC0gMC41ICogeFVuaXQpLnJnYik7XG4iCi0gICAgICArICIgIGdsX0Zy
YWdDb2xvci5iID0gY29lZmZzLmEgKyBkb3QoY29lZmZzLnJnYixcbiIKLSAgICAgICsgIiAgICAg
IHRleHR1cmUyRChvZXNUZXgsIGludGVycF90YyArIDAuNSAqIHhVbml0KS5yZ2IpO1xuIgotICAg
ICAgKyAiICBnbF9GcmFnQ29sb3IuYSA9IGNvZWZmcy5hICsgZG90KGNvZWZmcy5yZ2IsXG4iCi0g
ICAgICArICIgICAgICB0ZXh0dXJlMkQob2VzVGV4LCBpbnRlcnBfdGMgKyAxLjUgKiB4VW5pdCku
cmdiKTtcbiIKLSAgICAgICsgIn1cbiI7Ci0gIC8vIGNsYW5nLWZvcm1hdCBvbgotCi0gIHByaXZh
dGUgZmluYWwgaW50IGZyYW1lQnVmZmVySWQ7Ci0gIHByaXZhdGUgZmluYWwgaW50IGZyYW1lVGV4
dHVyZUlkOwotICBwcml2YXRlIGZpbmFsIEdsU2hhZGVyIHNoYWRlcjsKLSAgcHJpdmF0ZSBmaW5h
bCBpbnQgdGV4TWF0cml4TG9jOwotICBwcml2YXRlIGZpbmFsIGludCB4VW5pdExvYzsKLSAgcHJp
dmF0ZSBmaW5hbCBpbnQgY29lZmZzTG9jOwotICBwcml2YXRlIGZpbmFsIFRocmVhZFV0aWxzLlRo
cmVhZENoZWNrZXIgdGhyZWFkQ2hlY2tlciA9IG5ldyBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2Vy
KCk7Ci0gIHByaXZhdGUgaW50IGZyYW1lQnVmZmVyV2lkdGg7Ci0gIHByaXZhdGUgaW50IGZyYW1l
QnVmZmVySGVpZ2h0OwotICBwcml2YXRlIGJvb2xlYW4gcmVsZWFzZWQgPSBmYWxzZTsKLQotICAv
KioKLSAgICogVGhpcyBjbGFzcyBzaG91bGQgYmUgY29uc3RydWN0ZWQgb24gYSB0aHJlYWQgdGhh
dCBoYXMgYW4gYWN0aXZlIEVHTCBjb250ZXh0LgotICAgKi8KLSAgcHVibGljIFl1dkNvbnZlcnRl
cigpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgZnJh
bWVUZXh0dXJlSWQgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJE
KTsKLSAgICB0aGlzLmZyYW1lQnVmZmVyV2lkdGggPSAwOwotICAgIHRoaXMuZnJhbWVCdWZmZXJI
ZWlnaHQgPSAwOwotCi0gICAgLy8gQ3JlYXRlIGZyYW1lYnVmZmVyIG9iamVjdCBhbmQgYmluZCBp
dC4KLSAgICBmaW5hbCBpbnQgZnJhbWVCdWZmZXJzW10gPSBuZXcgaW50WzFdOwotICAgIEdMRVMy
MC5nbEdlbkZyYW1lYnVmZmVycygxLCBmcmFtZUJ1ZmZlcnMsIDApOwotICAgIGZyYW1lQnVmZmVy
SWQgPSBmcmFtZUJ1ZmZlcnNbMF07Ci0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMy
MC5HTF9GUkFNRUJVRkZFUiwgZnJhbWVCdWZmZXJJZCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVT
MkVycm9yKCJHZW5lcmF0ZSBmcmFtZWJ1ZmZlciIpOwotCi0gICAgLy8gQXR0YWNoIHRoZSB0ZXh0
dXJlIHRvIHRoZSBmcmFtZWJ1ZmZlciBhcyBjb2xvciBhdHRhY2htZW50LgotICAgIEdMRVMyMC5n
bEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgR0xFUzIwLkdMX0NP
TE9SX0FUVEFDSE1FTlQwLAotICAgICAgICBHTEVTMjAuR0xfVEVYVFVSRV8yRCwgZnJhbWVUZXh0
dXJlSWQsIDApOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiQXR0YWNoIHRleHR1cmUg
dG8gZnJhbWVidWZmZXIiKTsKLQotICAgIC8vIFJlc3RvcmUgbm9ybWFsIGZyYW1lYnVmZmVyLgot
ICAgIEdMRVMyMC5nbEJpbmRGcmFtZWJ1ZmZlcihHTEVTMjAuR0xfRlJBTUVCVUZGRVIsIDApOwot
Ci0gICAgc2hhZGVyID0gbmV3IEdsU2hhZGVyKFZFUlRFWF9TSEFERVIsIEZSQUdNRU5UX1NIQURF
Uik7Ci0gICAgc2hhZGVyLnVzZVByb2dyYW0oKTsKLSAgICB0ZXhNYXRyaXhMb2MgPSBzaGFkZXIu
Z2V0VW5pZm9ybUxvY2F0aW9uKCJ0ZXhNYXRyaXgiKTsKLSAgICB4VW5pdExvYyA9IHNoYWRlci5n
ZXRVbmlmb3JtTG9jYXRpb24oInhVbml0Iik7Ci0gICAgY29lZmZzTG9jID0gc2hhZGVyLmdldFVu
aWZvcm1Mb2NhdGlvbigiY29lZmZzIik7Ci0gICAgR0xFUzIwLmdsVW5pZm9ybTFpKHNoYWRlci5n
ZXRVbmlmb3JtTG9jYXRpb24oIm9lc1RleCIpLCAwKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMy
RXJyb3IoIkluaXRpYWxpemUgZnJhZ21lbnQgc2hhZGVyIHVuaWZvcm0gdmFsdWVzLiIpOwotICAg
IC8vIEluaXRpYWxpemUgdmVydGV4IHNoYWRlciBhdHRyaWJ1dGVzLgotICAgIHNoYWRlci5zZXRW
ZXJ0ZXhBdHRyaWJBcnJheSgiaW5fcG9zIiwgMiwgREVWSUNFX1JFQ1RBTkdMRSk7Ci0gICAgLy8g
SWYgdGhlIHdpZHRoIGlzIG5vdCBhIG11bHRpcGxlIG9mIDQgcGl4ZWxzLCB0aGUgdGV4dHVyZQot
ICAgIC8vIHdpbGwgYmUgc2NhbGVkIHVwIHNsaWdodGx5IGFuZCBjbGlwcGVkIGF0IHRoZSByaWdo
dCBib3JkZXIuCi0gICAgc2hhZGVyLnNldFZlcnRleEF0dHJpYkFycmF5KCJpbl90YyIsIDIsIFRF
WFRVUkVfUkVDVEFOR0xFKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNvbnZlcnQoQnl0ZUJ1ZmZl
ciBidWYsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHN0cmlkZSwgaW50IHNyY1RleHR1cmVJ
ZCwKLSAgICAgIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4KSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5j
aGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIGlmIChyZWxlYXNlZCkgewotICAgICAgdGhyb3cg
bmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiWXV2Q29udmVydGVyLmNvbnZlcnQgY2FsbGVkIG9u
IHJlbGVhc2VkIG9iamVjdCIpOwotICAgIH0KLQotICAgIC8vIFdlIGRyYXcgaW50byBhIGJ1ZmZl
ciBsYWlkIG91dCBsaWtlCi0gICAgLy8KLSAgICAvLyAgICArLS0tLS0tLS0tKwotICAgIC8vICAg
IHwgICAgICAgICB8Ci0gICAgLy8gICAgfCAgWSAgICAgIHwKLSAgICAvLyAgICB8ICAgICAgICAg
fAotICAgIC8vICAgIHwgICAgICAgICB8Ci0gICAgLy8gICAgKy0tLS0rLS0tLSsKLSAgICAvLyAg
ICB8IFUgIHwgViAgfAotICAgIC8vICAgIHwgICAgfCAgICB8Ci0gICAgLy8gICAgKy0tLS0rLS0t
LSsKLSAgICAvLwotICAgIC8vIEluIG1lbW9yeSwgd2UgdXNlIHRoZSBzYW1lIHN0cmlkZSBmb3Ig
YWxsIG9mIFksIFUgYW5kIFYuIFRoZQotICAgIC8vIFUgZGF0YSBzdGFydHMgYXQgb2Zmc2V0IHxo
ZWlnaHR8ICogfHN0cmlkZXwgZnJvbSB0aGUgWSBkYXRhLAotICAgIC8vIGFuZCB0aGUgViBkYXRh
IHN0YXJ0cyBhdCBhdCBvZmZzZXQgfHN0cmlkZS8yfCBmcm9tIHRoZSBVCi0gICAgLy8gZGF0YSwg
d2l0aCByb3dzIG9mIFUgYW5kIFYgZGF0YSBhbHRlcm5hdGluZy4KLSAgICAvLwotICAgIC8vIE5v
dywgaXQgd291bGQgaGF2ZSBtYWRlIHNlbnNlIHRvIGFsbG9jYXRlIGEgcGl4ZWwgYnVmZmVyIHdp
dGgKLSAgICAvLyBhIHNpbmdsZSBieXRlIHBlciBwaXhlbCAoRUdMMTAuRUdMX0NPTE9SX0JVRkZF
Ul9UWVBFLAotICAgIC8vIEVHTDEwLkVHTF9MVU1JTkFOQ0VfQlVGRkVSLCksIGJ1dCB0aGF0IHNl
ZW1zIHRvIGJlCi0gICAgLy8gdW5zdXBwb3J0ZWQgYnkgZGV2aWNlcy4gU28gZG8gdGhlIGZvbGxv
d2luZyBoYWNrOiBBbGxvY2F0ZSBhbgotICAgIC8vIFJHQkEgYnVmZmVyLCBvZiB3aWR0aCB8c3Ry
aWRlfC80LiBUbyByZW5kZXIgZWFjaCBvZiB0aGVzZQotICAgIC8vIGxhcmdlIHBpeGVscywgc2Ft
cGxlIHRoZSB0ZXh0dXJlIGF0IDQgZGlmZmVyZW50IHggY29vcmRpbmF0ZXMKLSAgICAvLyBhbmQg
c3RvcmUgdGhlIHJlc3VsdHMgaW4gdGhlIGZvdXIgY29tcG9uZW50cy4KLSAgICAvLwotICAgIC8v
IFNpbmNlIHRoZSBWIGRhdGEgbmVlZHMgdG8gc3RhcnQgb24gYSBib3VuZGFyeSBvZiBzdWNoIGEK
LSAgICAvLyBsYXJnZXIgcGl4ZWwsIGl0IGlzIG5vdCBzdWZmaWNpZW50IHRoYXQgfHN0cmlkZXwg
aXMgZXZlbiwgaXQKLSAgICAvLyBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiA4IHBpeGVscy4KLQot
ICAgIGlmIChzdHJpZGUgJSA4ICE9IDApIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1l
bnRFeGNlcHRpb24oIkludmFsaWQgc3RyaWRlLCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCIpOwot
ICAgIH0KLSAgICBpZiAoc3RyaWRlIDwgd2lkdGgpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgc3RyaWRlLCBtdXN0ID49IHdpZHRoIik7Ci0gICAg
fQotCi0gICAgaW50IHlfd2lkdGggPSAod2lkdGggKyAzKSAvIDQ7Ci0gICAgaW50IHV2X3dpZHRo
ID0gKHdpZHRoICsgNykgLyA4OwotICAgIGludCB1dl9oZWlnaHQgPSAoaGVpZ2h0ICsgMSkgLyAy
OwotICAgIGludCB0b3RhbF9oZWlnaHQgPSBoZWlnaHQgKyB1dl9oZWlnaHQ7Ci0gICAgaW50IHNp
emUgPSBzdHJpZGUgKiB0b3RhbF9oZWlnaHQ7Ci0KLSAgICBpZiAoYnVmLmNhcGFjaXR5KCkgPCBz
aXplKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJZdXZDb252
ZXJ0ZXIuY29udmVydCBjYWxsZWQgd2l0aCB0b28gc21hbGwgYnVmZmVyIik7Ci0gICAgfQotICAg
IC8vIFByb2R1Y2UgYSBmcmFtZSBidWZmZXIgc3RhcnRpbmcgYXQgdG9wLWxlZnQgY29ybmVyLCBu
b3QKLSAgICAvLyBib3R0b20tbGVmdC4KLSAgICB0cmFuc2Zvcm1NYXRyaXggPQotICAgICAgICBS
ZW5kZXJlckNvbW1vbi5tdWx0aXBseU1hdHJpY2VzKHRyYW5zZm9ybU1hdHJpeCwgUmVuZGVyZXJD
b21tb24udmVydGljYWxGbGlwTWF0cml4KCkpOwotCi0gICAgLy8gQmluZCBvdXIgZnJhbWVidWZm
ZXIuCi0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwg
ZnJhbWVCdWZmZXJJZCk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbEJpbmRGcmFt
ZWJ1ZmZlciIpOwotCi0gICAgaWYgKGZyYW1lQnVmZmVyV2lkdGggIT0gc3RyaWRlIC8gNCB8fCBm
cmFtZUJ1ZmZlckhlaWdodCAhPSB0b3RhbF9oZWlnaHQpIHsKLSAgICAgIGZyYW1lQnVmZmVyV2lk
dGggPSBzdHJpZGUgLyA0OwotICAgICAgZnJhbWVCdWZmZXJIZWlnaHQgPSB0b3RhbF9oZWlnaHQ7
Ci0gICAgICAvLyAoUmUpLUFsbG9jYXRlIHRleHR1cmUuCi0gICAgICBHTEVTMjAuZ2xBY3RpdmVU
ZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShH
TEVTMjAuR0xfVEVYVFVSRV8yRCwgZnJhbWVUZXh0dXJlSWQpOwotICAgICAgR0xFUzIwLmdsVGV4
SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgR0xFUzIwLkdMX1JHQkEsIGZyYW1lQnVm
ZmVyV2lkdGgsCi0gICAgICAgICAgZnJhbWVCdWZmZXJIZWlnaHQsIDAsIEdMRVMyMC5HTF9SR0JB
LCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgbnVsbCk7Ci0KLSAgICAgIC8vIENoZWNrIHRoYXQg
dGhlIGZyYW1lYnVmZmVyIGlzIGluIGEgZ29vZCBzdGF0ZS4KLSAgICAgIGZpbmFsIGludCBzdGF0
dXMgPSBHTEVTMjAuZ2xDaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMRVMyMC5HTF9GUkFNRUJVRkZF
Uik7Ci0gICAgICBpZiAoc3RhdHVzICE9IEdMRVMyMC5HTF9GUkFNRUJVRkZFUl9DT01QTEVURSkg
ewotICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJGcmFtZWJ1ZmZlciBu
b3QgY29tcGxldGUsIHN0YXR1czogIiArIHN0YXR1cyk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
R0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAgIEdMRVMyMC5n
bEJpbmRUZXh0dXJlKEdMRVMxMUV4dC5HTF9URVhUVVJFX0VYVEVSTkFMX09FUywgc3JjVGV4dHVy
ZUlkKTsKLSAgICBHTEVTMjAuZ2xVbmlmb3JtTWF0cml4NGZ2KHRleE1hdHJpeExvYywgMSwgZmFs
c2UsIHRyYW5zZm9ybU1hdHJpeCwgMCk7Ci0KLSAgICAvLyBEcmF3IFkKLSAgICBHTEVTMjAuZ2xW
aWV3cG9ydCgwLCAwLCB5X3dpZHRoLCBoZWlnaHQpOwotICAgIC8vIE1hdHJpeCAqICgxOzA7MDsw
KSAvIHdpZHRoLiBOb3RlIHRoYXQgb3BlbmdsIHVzZXMgY29sdW1uIG1ham9yIG9yZGVyLgotICAg
IEdMRVMyMC5nbFVuaWZvcm0yZih4VW5pdExvYywgdHJhbnNmb3JtTWF0cml4WzBdIC8gd2lkdGgs
IHRyYW5zZm9ybU1hdHJpeFsxXSAvIHdpZHRoKTsKLSAgICAvLyBZJ1VWNDQ0IHRvIFJHQjg4OCwg
c2VlCi0gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWVVWI1kuMjdVVjQ0NF90
b19SR0I4ODhfY29udmVyc2lvbi4KLSAgICAvLyBXZSB1c2UgdGhlIElUVS1SIGNvZWZmaWNpZW50
cyBmb3IgVSBhbmQgViAqLwotICAgIEdMRVMyMC5nbFVuaWZvcm00Zihjb2VmZnNMb2MsIDAuMjk5
ZiwgMC41ODdmLCAwLjExNGYsIDAuMGYpOwotICAgIEdMRVMyMC5nbERyYXdBcnJheXMoR0xFUzIw
LkdMX1RSSUFOR0xFX1NUUklQLCAwLCA0KTsKLQotICAgIC8vIERyYXcgVQotICAgIEdMRVMyMC5n
bFZpZXdwb3J0KDAsIGhlaWdodCwgdXZfd2lkdGgsIHV2X2hlaWdodCk7Ci0gICAgLy8gTWF0cml4
ICogKDE7MDswOzApIC8gKHdpZHRoIC8gMikuIE5vdGUgdGhhdCBvcGVuZ2wgdXNlcyBjb2x1bW4g
bWFqb3Igb3JkZXIuCi0gICAgR0xFUzIwLmdsVW5pZm9ybTJmKAotICAgICAgICB4VW5pdExvYywg
Mi4wZiAqIHRyYW5zZm9ybU1hdHJpeFswXSAvIHdpZHRoLCAyLjBmICogdHJhbnNmb3JtTWF0cml4
WzFdIC8gd2lkdGgpOwotICAgIEdMRVMyMC5nbFVuaWZvcm00Zihjb2VmZnNMb2MsIC0wLjE2OWYs
IC0wLjMzMWYsIDAuNDk5ZiwgMC41Zik7Ci0gICAgR0xFUzIwLmdsRHJhd0FycmF5cyhHTEVTMjAu
R0xfVFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotCi0gICAgLy8gRHJhdyBWCi0gICAgR0xFUzIwLmds
Vmlld3BvcnQoc3RyaWRlIC8gOCwgaGVpZ2h0LCB1dl93aWR0aCwgdXZfaGVpZ2h0KTsKLSAgICBH
TEVTMjAuZ2xVbmlmb3JtNGYoY29lZmZzTG9jLCAwLjQ5OWYsIC0wLjQxOGYsIC0wLjA4MTNmLCAw
LjVmKTsKLSAgICBHTEVTMjAuZ2xEcmF3QXJyYXlzKEdMRVMyMC5HTF9UUklBTkdMRV9TVFJJUCwg
MCwgNCk7Ci0KLSAgICBHTEVTMjAuZ2xSZWFkUGl4ZWxzKAotICAgICAgICAwLCAwLCBmcmFtZUJ1
ZmZlcldpZHRoLCBmcmFtZUJ1ZmZlckhlaWdodCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9V
TlNJR05FRF9CWVRFLCBidWYpOwotCi0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJZdXZD
b252ZXJ0ZXIuY29udmVydCIpOwotCi0gICAgLy8gUmVzdG9yZSBub3JtYWwgZnJhbWVidWZmZXIu
Ci0gICAgR0xFUzIwLmdsQmluZEZyYW1lYnVmZmVyKEdMRVMyMC5HTF9GUkFNRUJVRkZFUiwgMCk7
Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDApOwotCi0g
ICAgLy8gVW5iaW5kIHRleHR1cmUuIFJlcG9ydGVkbHkgbmVlZGVkIG9uIHNvbWUgZGV2aWNlcyB0
byBnZXQKLSAgICAvLyB0aGUgdGV4dHVyZSB1cGRhdGVkIGZyb20gdGhlIGNhbWVyYS4KLSAgICBH
TEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMsIDAp
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNo
ZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgcmVsZWFzZWQgPSB0cnVlOwotICAgIHNoYWRlci5y
ZWxlYXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwgbmV3IGludFtdIHtmcmFt
ZVRleHR1cmVJZH0sIDApOwotICAgIEdMRVMyMC5nbERlbGV0ZUZyYW1lYnVmZmVycygxLCBuZXcg
aW50W10ge2ZyYW1lQnVmZmVySWR9LCAwKTsKLSAgICBmcmFtZUJ1ZmZlcldpZHRoID0gMDsKLSAg
ICBmcmFtZUJ1ZmZlckhlaWdodCA9IDA7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9PV05FUlMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvam5pL09XTkVSUwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL09XTkVSUwkobm9uZXhpc3RlbnQp
CkBAIC0xLDExICswLDAgQEAKLXBlci1maWxlIGFuZHJvaWR2aWRlb2NhcHR1cmVyKj1tYWdqZWRA
d2VicnRjLm9yZwotcGVyLWZpbGUgYW5kcm9pZG1lZGlhZW5jb2Rlcio9bWFnamVkQHdlYnJ0Yy5v
cmcKLXBlci1maWxlIGFuZHJvaWRtZWRpYWRlY29kZXIqPW1hZ2plZEB3ZWJydGMub3JnCi1wZXIt
ZmlsZSBhbmRyb2lkbWVkaWFjb2RlY2NvbW1vbi5oPW1hZ2plZEB3ZWJydGMub3JnCi1wZXItZmls
ZSBhbmRyb2lkbWV0cmljc19qbmkuY2M9c2FrYWxAd2VicnRjLm9yZwotcGVyLWZpbGUgYW5kcm9p
ZHZpZGVvdHJhY2tzb3VyY2Vfam5pLmNjPW1hZ2plZEB3ZWJydGMub3JnCi1wZXItZmlsZSBhbmRy
b2lkdmlkZW90cmFja3NvdXJjZV9qbmkuY2M9c2FrYWxAd2VicnRjLm9yZwotcGVyLWZpbGUgc3Vy
ZmFjZXRleHR1cmVoZWxwZXIqPW1hZ2plZEB3ZWJydGMub3JnCi1wZXItZmlsZSBuYXRpdmVfaGFu
ZGxlX2ltcGwqPW1hZ2plZEB3ZWJydGMub3JnCi0jIFZpZGVvIHJlbGF0ZWQgcGFydHMgb2YgcGVl
cmNvbm5lY3Rpb24gb25seS4KLXBlci1maWxlIHBlZXJjb25uZWN0aW9uX2puaS5jYz1tYWdqZWRA
d2VicnRjLm9yZwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWNvZGVjY29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
am5pL2FuZHJvaWRtZWRpYWNvZGVjY29tbW9uLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRy
b2lkbWVkaWFjb2RlY2NvbW1vbi5oCShub25leGlzdGVudCkKQEAgLTEsOTcgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURNRURJ
QUNPREVDQ09NTU9OX0hfCi0jZGVmaW5lIFdFQlJUQ19BUElfSkFWQV9KTklfQU5EUk9JRE1FRElB
Q09ERUNDT01NT05fSF8KLQotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0jaW5jbHVkZSA8c3Ry
aW5nPgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGhyZWFkLmgiCi0jaW5jbHVkZSAid2VicnRj
L2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9s
b2dnaW5nLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGhyZWFkLmgiCi0KLW5hbWVzcGFjZSB3
ZWJydGNfam5pIHsKLQotLy8gVW5jb21tZW50IHRoaXMgZGVmaW5lIHRvIGVuYWJsZSB2ZXJib3Nl
IGxvZ2dpbmcgZm9yIGV2ZXJ5IGVuY29kZWQvZGVjb2RlZAotLy8gdmlkZW8gZnJhbWUuCi0vLyNk
ZWZpbmUgVFJBQ0tfQlVGRkVSX1RJTUlORwotCi0jZGVmaW5lIFRBR19DT01NT04gIk1lZGlhQ29k
ZWNWaWRlbyIKLQotLy8gQ29sb3IgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgZW5jb2RlciBvciBkZWNv
ZGVyIC0gc2hvdWxkIGluY2x1ZGUgYWxsCi0vLyBjb2xvcnMgZnJvbSBzdXBwb3J0ZWRDb2xvckxp
c3QgaW4gTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5qYXZhIGFuZAotLy8gTWVkaWFDb2RlY1ZpZGVv
RGVjb2Rlci5qYXZhLiBTdXBwb3J0ZWQgY29sb3IgZm9ybWF0IHNldCBpbiBlbmNvZGVyCi0vLyBh
bmQgZGVjb2RlciBjb3VsZCBiZSBkaWZmZXJlbnQuCi1lbnVtIENPTE9SX0ZPUk1BVFRZUEUgewot
ICBDT0xPUl9Gb3JtYXRZVVY0MjBQbGFuYXIgPSAweDEzLAotICBDT0xPUl9Gb3JtYXRZVVY0MjBT
ZW1pUGxhbmFyID0gMHgxNSwKLSAgQ09MT1JfUUNPTV9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyID0g
MHg3RkEzMEMwMCwKLSAgLy8gTlYxMiBjb2xvciBmb3JtYXQgc3VwcG9ydGVkIGJ5IFFDT00gY29k
ZWMsIGJ1dCBub3QgZGVjbGFyZWQgaW4gTWVkaWFDb2RlYyAtCi0gIC8vIHNlZSAvaGFyZHdhcmUv
cWNvbS9tZWRpYS9tbS1jb3JlL2luYy9PTVhfUUNPTUV4dG5zLmgKLSAgLy8gVGhpcyBmb3JtYXQg
aXMgcHJlc3VtYWJseSBzaW1pbGFyIHRvIENPTE9SX0Zvcm1hdFlVVjQyMFNlbWlQbGFuYXIsCi0g
IC8vIGJ1dCByZXF1aXJlcyBzb21lICgxNiwgMzI/KSBieXRlIGFsaWdubWVudC4KLSAgQ09MT1Jf
UUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMzJtNGthID0gMHg3RkEzMEMwMSwKLSAg
Q09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyMTZtNGthID0gMHg3RkEzMEMw
MiwKLSAgQ09MT1JfUUNPTV9GT1JNQVRZVlU0MjBQYWNrZWRTZW1pUGxhbmFyNjR4MzJUaWxlMm04
a2EgPSAweDdGQTMwQzAzLAotICBDT0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFu
YXIzMm0gPSAweDdGQTMwQzA0Ci19OwotCi0vLyBBcmJpdHJhcnkgaW50ZXJ2YWwgdG8gcG9sbCB0
aGUgY29kZWMgZm9yIG5ldyBvdXRwdXRzLgotZW51bSB7IGtNZWRpYUNvZGVjUG9sbE1zID0gMTAg
fTsKLS8vIEFyYml0cmFyeSBpbnRlcnZhbCB0byBwb2xsIGF0IHdoZW4gdGhlcmUgc2hvdWxkIGJl
IG5vIG1vcmUgZnJhbWVzLgotZW51bSB7IGtNZWRpYUNvZGVjUG9sbE5vRnJhbWVzTXMgPSAxMDAg
fTsKLS8vIE1lZGlhIGNvZGVjIG1heGltdW0gb3V0cHV0IGJ1ZmZlciByZWFkeSB0aW1lb3V0Lgot
ZW51bSB7IGtNZWRpYUNvZGVjVGltZW91dE1zID0gMTAwMCB9OwotLy8gSW50ZXJ2YWwgdG8gcHJp
bnQgY29kZWMgc3RhdGlzdGljcyAoYml0cmF0ZSwgZnBzLCBlbmNvZGluZy9kZWNvZGluZyB0aW1l
KS4KLWVudW0geyBrTWVkaWFDb2RlY1N0YXRpc3RpY3NJbnRlcnZhbE1zID0gMzAwMCB9OwotLy8g
TWF4aW11bSBhbW91bnQgb2YgcGVuZGluZyBmcmFtZXMgZm9yIFZQOCBkZWNvZGVyLgotZW51bSB7
IGtNYXhQZW5kaW5nRnJhbWVzVnA4ID0gMSB9OwotLy8gTWF4aW11bSBhbW91bnQgb2YgcGVuZGlu
ZyBmcmFtZXMgZm9yIFZQOSBkZWNvZGVyLgotZW51bSB7IGtNYXhQZW5kaW5nRnJhbWVzVnA5ID0g
MSB9OwotLy8gTWF4aW11bSBhbW91bnQgb2YgcGVuZGluZyBmcmFtZXMgZm9yIEguMjY0IGRlY29k
ZXIuCi1lbnVtIHsga01heFBlbmRpbmdGcmFtZXNIMjY0ID0gNCB9OwotLy8gTWF4aW11bSBhbW91
bnQgb2YgZGVjb2RlZCBmcmFtZXMgZm9yIHdoaWNoIHBlci1mcmFtZSBsb2dnaW5nIGlzIGVuYWJs
ZWQuCi1lbnVtIHsga01heERlY29kZWRMb2dGcmFtZXMgPSAxMCB9OwotLy8gTWF4aW11bSBhbW91
bnQgb2YgZW5jb2RlZCBmcmFtZXMgZm9yIHdoaWNoIHBlci1mcmFtZSBsb2dnaW5nIGlzIGVuYWJs
ZWQuCi1lbnVtIHsga01heEVuY29kZWRMb2dGcmFtZXMgPSAxMCB9OwotCi1zdGF0aWMgaW5saW5l
IHZvaWQgQWxsb3dCbG9ja2luZ0NhbGxzKCkgewotICBydGM6OlRocmVhZCogY3VycmVudF90aHJl
YWQgPSBydGM6OlRocmVhZDo6Q3VycmVudCgpOwotICBpZiAoY3VycmVudF90aHJlYWQgIT0gTlVM
TCkKLSAgICBjdXJyZW50X3RocmVhZC0+U2V0QWxsb3dCbG9ja2luZ0NhbGxzKHRydWUpOwotfQot
Ci0vLyBSZXR1cm4gdGhlIChzaW5nbGV0b24pIEphdmEgRW51bSBvYmplY3QgY29ycmVzcG9uZGlu
ZyB0byB8aW5kZXh8OwotLy8gfHN0YXRlX2NsYXNzX2ZyYWdtZW50fCBpcyBzb21ldGhpbmcgbGlr
ZSAiTWVkaWFTb3VyY2UkU3RhdGUiLgotc3RhdGljIGlubGluZSBqb2JqZWN0IEphdmFFbnVtRnJv
bUluZGV4QW5kQ2xhc3NOYW1lKAotICAgIEpOSUVudiogam5pLCBjb25zdCBzdGQ6OnN0cmluZyYg
c3RhdGVfY2xhc3NfZnJhZ21lbnQsIGludCBpbmRleCkgewotICBjb25zdCBzdGQ6OnN0cmluZyBz
dGF0ZV9jbGFzcyA9ICJvcmcvd2VicnRjLyIgKyBzdGF0ZV9jbGFzc19mcmFnbWVudDsKLSAgcmV0
dXJuIEphdmFFbnVtRnJvbUluZGV4KGpuaSwgRmluZENsYXNzKGpuaSwgc3RhdGVfY2xhc3MuY19z
dHIoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZV9jbGFzcywgaW5kZXgpOwot
fQotCi0vLyBDaGVja3MgZm9yIGFueSBKYXZhIGV4Y2VwdGlvbiwgcHJpbnRzIHN0YWNrIGJhY2t0
cmFjZSBhbmQgY2xlYXJzCi0vLyBjdXJyZW50bHkgdGhyb3duIGV4Y2VwdGlvbi4KLXN0YXRpYyBp
bmxpbmUgYm9vbCBDaGVja0V4Y2VwdGlvbihKTklFbnYqIGpuaSkgewotICBpZiAoam5pLT5FeGNl
cHRpb25DaGVjaygpKSB7Ci0gICAgTE9HX1RBRyhydGM6OkxTX0VSUk9SLCBUQUdfQ09NTU9OKSA8
PCAiSmF2YSBKTkkgZXhjZXB0aW9uLiI7Ci0gICAgam5pLT5FeGNlcHRpb25EZXNjcmliZSgpOwot
ICAgIGpuaS0+RXhjZXB0aW9uQ2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotICByZXR1
cm4gZmFsc2U7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCi0KLSNlbmRpZiAgLy8g
V0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lETUVESUFDT0RFQ0NPTU1PTl9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2Fu
ZHJvaWRtZWRpYWRlY29kZXJfam5pLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFkZWNv
ZGVyX2puaS5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29kZXJfam5p
LmNjCShub25leGlzdGVudCkKQEAgLTEsOTg5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHZlY3Rv
cj4KLQotLy8gTk9USUNFOiBhbmRyb2lkbWVkaWFkZWNvZGVyX2puaS5oIG11c3QgYmUgaW5jbHVk
ZWQgYmVmb3JlCi0vLyBhbmRyb2lkbWVkaWFjb2RlY2NvbW1vbi5oIHRvIGF2b2lkIGJ1aWxkIGVy
cm9ycy4KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29k
ZXJfam5pLmgiCi0KLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYv
Y29udmVydC5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di9j
b252ZXJ0X2Zyb20uaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5
dXYvdmlkZW9fY29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRy
b2lkbWVkaWFjb2RlY2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
Y2xhc3NyZWZlcmVuY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5p
L25hdGl2ZV9oYW5kbGVfaW1wbC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
c3VyZmFjZXRleHR1cmVoZWxwZXJfam5pLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYmluZC5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNl
L2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9zY29wZWRfcmVmX3B0ci5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9iYXNlL3RocmVhZC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3RpbWV1
dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9jb21tb25fdmlkZW8vaW5jbHVkZS9pNDIwX2J1ZmZl
cl9wb29sLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL2luY2x1ZGUv
dmlkZW9fY29kZWNfaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFwcGVy
cy9pbmNsdWRlL2xvZ2NhdF90cmFjZV9jb250ZXh0LmgiCi0KLXVzaW5nIHJ0Yzo6QmluZDsKLXVz
aW5nIHJ0Yzo6VGhyZWFkOwotdXNpbmcgcnRjOjpUaHJlYWRNYW5hZ2VyOwotCi11c2luZyB3ZWJy
dGM6OkNvZGVjU3BlY2lmaWNJbmZvOwotdXNpbmcgd2VicnRjOjpEZWNvZGVkSW1hZ2VDYWxsYmFj
azsKLXVzaW5nIHdlYnJ0Yzo6RW5jb2RlZEltYWdlOwotdXNpbmcgd2VicnRjOjpWaWRlb0ZyYW1l
OwotdXNpbmcgd2VicnRjOjpSVFBGcmFnbWVudGF0aW9uSGVhZGVyOwotdXNpbmcgd2VicnRjOjpW
aWRlb0NvZGVjOwotdXNpbmcgd2VicnRjOjpWaWRlb0NvZGVjVHlwZTsKLXVzaW5nIHdlYnJ0Yzo6
a1ZpZGVvQ29kZWNIMjY0OwotdXNpbmcgd2VicnRjOjprVmlkZW9Db2RlY1ZQODsKLXVzaW5nIHdl
YnJ0Yzo6a1ZpZGVvQ29kZWNWUDk7Ci0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotLy8gTG9n
Z2luZyBtYWNyb3MuCi0jZGVmaW5lIFRBR19ERUNPREVSICJNZWRpYUNvZGVjVmlkZW9EZWNvZGVy
IgotI2lmZGVmIFRSQUNLX0JVRkZFUl9USU1JTkcKLSNkZWZpbmUgQUxPR1YoLi4uKQotICBfX2Fu
ZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1ZFUkJPU0UsIFRBR19ERUNPREVSLCBfX1ZBX0FS
R1NfXykKLSNlbHNlCi0jZGVmaW5lIEFMT0dWKC4uLikKLSNlbmRpZgotI2RlZmluZSBBTE9HRCBM
T0dfVEFHKHJ0Yzo6TFNfSU5GTywgVEFHX0RFQ09ERVIpCi0jZGVmaW5lIEFMT0dXIExPR19UQUco
cnRjOjpMU19XQVJOSU5HLCBUQUdfREVDT0RFUikKLSNkZWZpbmUgQUxPR0UgTE9HX1RBRyhydGM6
OkxTX0VSUk9SLCBUQUdfREVDT0RFUikKLQotZW51bSB7IGtNYXhXYXJuaW5nTG9nRnJhbWVzID0g
MiB9OwotCi1jbGFzcyBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyIDogcHVibGljIHdlYnJ0Yzo6Vmlk
ZW9EZWNvZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBydGM6Ok1l
c3NhZ2VIYW5kbGVyIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IE1lZGlhQ29kZWNWaWRlb0RlY29k
ZXIoCi0gICAgICBKTklFbnYqIGpuaSwgVmlkZW9Db2RlY1R5cGUgY29kZWNUeXBlLCBqb2JqZWN0
IHJlbmRlcl9lZ2xfY29udGV4dCk7Ci0gIHZpcnR1YWwgfk1lZGlhQ29kZWNWaWRlb0RlY29kZXIo
KTsKLQotICBpbnQzMl90IEluaXREZWNvZGUoY29uc3QgVmlkZW9Db2RlYyogY29kZWNTZXR0aW5n
cywgaW50MzJfdCBudW1iZXJPZkNvcmVzKQotICAgICAgb3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBE
ZWNvZGUoCi0gICAgICBjb25zdCBFbmNvZGVkSW1hZ2UmIGlucHV0SW1hZ2UsIGJvb2wgbWlzc2lu
Z0ZyYW1lcywKLSAgICAgIGNvbnN0IFJUUEZyYWdtZW50YXRpb25IZWFkZXIqIGZyYWdtZW50YXRp
b24sCi0gICAgICBjb25zdCBDb2RlY1NwZWNpZmljSW5mbyogY29kZWNTcGVjaWZpY0luZm8gPSBO
VUxMLAotICAgICAgaW50NjRfdCByZW5kZXJUaW1lTXMgPSAtMSkgb3ZlcnJpZGU7Ci0KLSAgaW50
MzJfdCBSZWdpc3RlckRlY29kZUNvbXBsZXRlQ2FsbGJhY2soRGVjb2RlZEltYWdlQ2FsbGJhY2sq
IGNhbGxiYWNrKQotICAgICAgb3ZlcnJpZGU7Ci0KLSAgaW50MzJfdCBSZWxlYXNlKCkgb3ZlcnJp
ZGU7Ci0KLSAgYm9vbCBQcmVmZXJzTGF0ZURlY29kaW5nKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gIC8vIHJ0Yzo6TWVzc2FnZUhhbmRsZXIgaW1wbGVtZW50YXRpb24uCi0g
IHZvaWQgT25NZXNzYWdlKHJ0Yzo6TWVzc2FnZSogbXNnKSBvdmVycmlkZTsKLQotICBjb25zdCBj
aGFyKiBJbXBsZW1lbnRhdGlvbk5hbWUoKSBjb25zdCBvdmVycmlkZTsKLQotIHByaXZhdGU6Ci0g
IC8vIENIRUNLLWZhaWwgaWYgbm90IHJ1bm5pbmcgb24gfGNvZGVjX3RocmVhZF98LgotICB2b2lk
IENoZWNrT25Db2RlY1RocmVhZCgpOwotCi0gIGludDMyX3QgSW5pdERlY29kZU9uQ29kZWNUaHJl
YWQoKTsKLSAgaW50MzJfdCBSZXNldERlY29kZU9uQ29kZWNUaHJlYWQoKTsKLSAgaW50MzJfdCBS
ZWxlYXNlT25Db2RlY1RocmVhZCgpOwotICBpbnQzMl90IERlY29kZU9uQ29kZWNUaHJlYWQoY29u
c3QgRW5jb2RlZEltYWdlJiBpbnB1dEltYWdlKTsKLSAgLy8gRGVsaXZlciBhbnkgb3V0cHV0cyBw
ZW5kaW5nIGluIHRoZSBNZWRpYUNvZGVjIHRvIG91ciB8Y2FsbGJhY2tffCBhbmQgcmV0dXJuCi0g
IC8vIHRydWUgb24gc3VjY2Vzcy4KLSAgYm9vbCBEZWxpdmVyUGVuZGluZ091dHB1dHMoSk5JRW52
KiBqbmksIGludCBkZXF1ZXVlX3RpbWVvdXRfdXMpOwotICBpbnQzMl90IFByb2Nlc3NIV0Vycm9y
T25Db2RlY1RocmVhZCgpOwotICB2b2lkIEVuYWJsZUZyYW1lTG9nT25XYXJuaW5nKCk7Ci0gIHZv
aWQgUmVzZXRWYXJpYWJsZXMoKTsKLQotICAvLyBUeXBlIG9mIHZpZGVvIGNvZGVjLgotICBWaWRl
b0NvZGVjVHlwZSBjb2RlY1R5cGVfOwotCi0gIC8vIFJlbmRlciBFR0wgY29udGV4dCAtIG93bmVk
IGJ5IGZhY3RvcnksIHNob3VsZCBub3QgYmUgYWxsb2NhdGVkL2Rlc3Ryb3llZAotICAvLyBieSBW
aWRlb0RlY29kZXIuCi0gIGpvYmplY3QgcmVuZGVyX2VnbF9jb250ZXh0XzsKLQotICBib29sIGtl
eV9mcmFtZV9yZXF1aXJlZF87Ci0gIGJvb2wgaW5pdGVkXzsKLSAgYm9vbCBzd19mYWxsYmFja19y
ZXF1aXJlZF87Ci0gIGJvb2wgdXNlX3N1cmZhY2VfOwotICBWaWRlb0NvZGVjIGNvZGVjXzsKLSAg
d2VicnRjOjpJNDIwQnVmZmVyUG9vbCBkZWNvZGVkX2ZyYW1lX3Bvb2xfOwotICBydGM6OnNjb3Bl
ZF9yZWZwdHI8U3VyZmFjZVRleHR1cmVIZWxwZXI+IHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfOwot
ICBEZWNvZGVkSW1hZ2VDYWxsYmFjayogY2FsbGJhY2tfOwotICBpbnQgZnJhbWVzX3JlY2VpdmVk
XzsgIC8vIE51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgYnkgZGVjb2Rlci4KLSAgaW50IGZyYW1l
c19kZWNvZGVkXzsgIC8vIE51bWJlciBvZiBmcmFtZXMgZGVjb2RlZCBieSBkZWNvZGVyLgotICAv
LyBOdW1iZXIgb2YgZGVjb2RlZCBmcmFtZXMgZm9yIHdoaWNoIGxvZyBpbmZvcm1hdGlvbiBpcyBk
aXNwbGF5ZWQuCi0gIGludCBmcmFtZXNfZGVjb2RlZF9sb2dnZWRfOwotICBpbnQ2NF90IHN0YXJ0
X3RpbWVfbXNfOyAgLy8gU3RhcnQgdGltZSBmb3Igc3RhdGlzdGljcy4KLSAgaW50IGN1cnJlbnRf
ZnJhbWVzXzsgIC8vIE51bWJlciBvZiBmcmFtZXMgaW4gdGhlIGN1cnJlbnQgc3RhdGlzdGljcyBp
bnRlcnZhbC4KLSAgaW50IGN1cnJlbnRfYnl0ZXNfOyAgLy8gRW5jb2RlZCBieXRlcyBpbiB0aGUg
Y3VycmVudCBzdGF0aXN0aWNzIGludGVydmFsLgotICBpbnQgY3VycmVudF9kZWNvZGluZ190aW1l
X21zXzsgIC8vIE92ZXJhbGwgZGVjb2RpbmcgdGltZSBpbiB0aGUgY3VycmVudCBzZWNvbmQKLSAg
aW50IGN1cnJlbnRfZGVsYXlfdGltZV9tc187ICAvLyBPdmVyYWxsIGRlbGF5IHRpbWUgaW4gdGhl
IGN1cnJlbnQgc2Vjb25kLgotICB1aW50MzJfdCBtYXhfcGVuZGluZ19mcmFtZXNfOyAgLy8gTWF4
aW11bSBudW1iZXIgb2YgcGVuZGluZyBpbnB1dCBmcmFtZXMuCi0KLSAgLy8gU3RhdGUgdGhhdCBp
cyBjb25zdGFudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoaXMgb2JqZWN0IG9uY2UgdGhlIGN0b3IK
LSAgLy8gcmV0dXJucy4KLSAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZD4KLSAgICAgIGNvZGVjX3Ro
cmVhZF87ICAvLyBUaHJlYWQgb24gd2hpY2ggdG8gb3BlcmF0ZSBNZWRpYUNvZGVjLgotICBTY29w
ZWRHbG9iYWxSZWY8amNsYXNzPiBqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfOwot
ICBTY29wZWRHbG9iYWxSZWY8am9iamVjdD4gal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXzsK
LSAgam1ldGhvZElEIGpfaW5pdF9kZWNvZGVfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfcmVzZXRf
bWV0aG9kXzsKLSAgam1ldGhvZElEIGpfcmVsZWFzZV9tZXRob2RfOwotICBqbWV0aG9kSUQgal9k
ZXF1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2RfOwotICBqbWV0aG9kSUQgal9xdWV1ZV9pbnB1dF9i
dWZmZXJfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfZGVxdWV1ZV9ieXRlX2J1ZmZlcl9tZXRob2Rf
OwotICBqbWV0aG9kSUQgal9kZXF1ZXVlX3RleHR1cmVfYnVmZmVyX21ldGhvZF87Ci0gIGptZXRo
b2RJRCBqX3JldHVybl9kZWNvZGVkX2J5dGVfYnVmZmVyX21ldGhvZF87Ci0gIC8vIE1lZGlhQ29k
ZWNWaWRlb0RlY29kZXIgZmllbGRzLgotICBqZmllbGRJRCBqX2lucHV0X2J1ZmZlcnNfZmllbGRf
OwotICBqZmllbGRJRCBqX291dHB1dF9idWZmZXJzX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9jb2xv
cl9mb3JtYXRfZmllbGRfOwotICBqZmllbGRJRCBqX3dpZHRoX2ZpZWxkXzsKLSAgamZpZWxkSUQg
al9oZWlnaHRfZmllbGRfOwotICBqZmllbGRJRCBqX3N0cmlkZV9maWVsZF87Ci0gIGpmaWVsZElE
IGpfc2xpY2VfaGVpZ2h0X2ZpZWxkXzsKLSAgLy8gTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlci5EZWNv
ZGVkVGV4dHVyZUJ1ZmZlciBmaWVsZHMuCi0gIGpmaWVsZElEIGpfdGV4dHVyZV9pZF9maWVsZF87
Ci0gIGpmaWVsZElEIGpfdHJhbnNmb3JtX21hdHJpeF9maWVsZF87Ci0gIGpmaWVsZElEIGpfdGV4
dHVyZV9wcmVzZW50YXRpb25fdGltZXN0YW1wX21zX2ZpZWxkXzsKLSAgamZpZWxkSUQgal90ZXh0
dXJlX3RpbWVzdGFtcF9tc19maWVsZF87Ci0gIGpmaWVsZElEIGpfdGV4dHVyZV9udHBfdGltZXN0
YW1wX21zX2ZpZWxkXzsKLSAgamZpZWxkSUQgal90ZXh0dXJlX2RlY29kZV90aW1lX21zX2ZpZWxk
XzsKLSAgamZpZWxkSUQgal90ZXh0dXJlX2ZyYW1lX2RlbGF5X21zX2ZpZWxkXzsKLSAgLy8gTWVk
aWFDb2RlY1ZpZGVvRGVjb2Rlci5EZWNvZGVkT3V0cHV0QnVmZmVyIGZpZWxkcy4KLSAgamZpZWxk
SUQgal9pbmZvX2luZGV4X2ZpZWxkXzsKLSAgamZpZWxkSUQgal9pbmZvX29mZnNldF9maWVsZF87
Ci0gIGpmaWVsZElEIGpfaW5mb19zaXplX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9wcmVzZW50YXRp
b25fdGltZXN0YW1wX21zX2ZpZWxkXzsKLSAgamZpZWxkSUQgal90aW1lc3RhbXBfbXNfZmllbGRf
OwotICBqZmllbGRJRCBqX250cF90aW1lc3RhbXBfbXNfZmllbGRfOwotICBqZmllbGRJRCBqX2J5
dGVfYnVmZmVyX2RlY29kZV90aW1lX21zX2ZpZWxkXzsKLQotICAvLyBHbG9iYWwgcmVmZXJlbmNl
czsgbXVzdCBiZSBkZWxldGVkIGluIFJlbGVhc2UoKS4KLSAgc3RkOjp2ZWN0b3I8am9iamVjdD4g
aW5wdXRfYnVmZmVyc187Ci19OwotCi1NZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpNZWRpYUNvZGVj
VmlkZW9EZWNvZGVyKAotICAgIEpOSUVudiogam5pLCBWaWRlb0NvZGVjVHlwZSBjb2RlY1R5cGUs
IGpvYmplY3QgcmVuZGVyX2VnbF9jb250ZXh0KSA6Ci0gICAgY29kZWNUeXBlXyhjb2RlY1R5cGUp
LAotICAgIHJlbmRlcl9lZ2xfY29udGV4dF8ocmVuZGVyX2VnbF9jb250ZXh0KSwKLSAgICBrZXlf
ZnJhbWVfcmVxdWlyZWRfKHRydWUpLAotICAgIGluaXRlZF8oZmFsc2UpLAotICAgIHN3X2ZhbGxi
YWNrX3JlcXVpcmVkXyhmYWxzZSksCi0gICAgY29kZWNfdGhyZWFkXyhuZXcgVGhyZWFkKCkpLAot
ICAgIGpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18oCi0gICAgICAgIGpuaSwKLSAg
ICAgICAgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciIp
KSwKLSAgICAgICAgICBqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfKAotICAgICAgICAgICAg
ICBqbmksCi0gICAgICAgICAgICAgIGpuaS0+TmV3T2JqZWN0KCpqX21lZGlhX2NvZGVjX3ZpZGVv
X2RlY29kZXJfY2xhc3NfLAotICAgICAgICAgICAgICAgICAgIEdldE1ldGhvZElEKGpuaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJf
Y2xhc3NfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxpbml0PiIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiKClWIikpKSB7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUg
bG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGNvZGVjX3RocmVhZF8tPlNldE5hbWUoIk1lZGlhQ29k
ZWNWaWRlb0RlY29kZXIiLCBOVUxMKTsKLSAgUlRDX0NIRUNLKGNvZGVjX3RocmVhZF8tPlN0YXJ0
KCkpIDw8ICJGYWlsZWQgdG8gc3RhcnQgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciI7Ci0KLSAgal9p
bml0X2RlY29kZV9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAgICBqbmksICpqX21lZGlhX2Nv
ZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAiaW5pdERlY29kZSIsCi0gICAgICAiKExvcmcvd2Vi
cnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIkVmlkZW9Db2RlY1R5cGU7IgotICAgICAgIklJTG9y
Zy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXI7KVoiKTsKLSAgal9yZXNldF9tZXRob2RfID0K
LSAgICAgIEdldE1ldGhvZElEKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFz
c18sICJyZXNldCIsICIoSUkpViIpOwotICBqX3JlbGVhc2VfbWV0aG9kXyA9Ci0gICAgICBHZXRN
ZXRob2RJRChqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAicmVsZWFz
ZSIsICIoKVYiKTsKLSAgal9kZXF1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2RfID0gR2V0TWV0aG9k
SUQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAiZGVx
dWV1ZUlucHV0QnVmZmVyIiwgIigpSSIpOwotICBqX3F1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2Rf
ID0gR2V0TWV0aG9kSUQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJf
Y2xhc3NfLCAicXVldWVJbnB1dEJ1ZmZlciIsICIoSUlKSkopWiIpOwotICBqX2RlcXVldWVfYnl0
ZV9idWZmZXJfbWV0aG9kXyA9IEdldE1ldGhvZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2Rl
Y192aWRlb19kZWNvZGVyX2NsYXNzXywgImRlcXVldWVPdXRwdXRCdWZmZXIiLAotICAgICAgIihJ
KUxvcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIkRGVjb2RlZE91dHB1dEJ1ZmZlcjsi
KTsKLSAgal9kZXF1ZXVlX3RleHR1cmVfYnVmZmVyX21ldGhvZF8gPSBHZXRNZXRob2RJRCgKLSAg
ICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJkZXF1ZXVlVGV4
dHVyZUJ1ZmZlciIsCi0gICAgICAiKEkpTG9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2Rl
ciREZWNvZGVkVGV4dHVyZUJ1ZmZlcjsiKTsKLSAgal9yZXR1cm5fZGVjb2RlZF9ieXRlX2J1ZmZl
cl9tZXRob2RfID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9f
ZGVjb2Rlcl9jbGFzc18sCi0gICAgICAgICAgICAgICAgICAicmV0dXJuRGVjb2RlZE91dHB1dEJ1
ZmZlciIsICIoSSlWIik7Ci0KLSAgal9pbnB1dF9idWZmZXJzX2ZpZWxkXyA9IEdldEZpZWxkSUQo
Ci0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLAotICAgICAg
ImlucHV0QnVmZmVycyIsICJbTGphdmEvbmlvL0J5dGVCdWZmZXI7Iik7Ci0gIGpfb3V0cHV0X2J1
ZmZlcnNfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlk
ZW9fZGVjb2Rlcl9jbGFzc18sCi0gICAgICAib3V0cHV0QnVmZmVycyIsICJbTGphdmEvbmlvL0J5
dGVCdWZmZXI7Iik7Ci0gIGpfY29sb3JfZm9ybWF0X2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAg
ICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAiY29sb3JGb3JtYXQi
LCAiSSIpOwotICBqX3dpZHRoX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksICpqX21l
ZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAid2lkdGgiLCAiSSIpOwotICBqX2hlaWdo
dF9maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19k
ZWNvZGVyX2NsYXNzXywgImhlaWdodCIsICJJIik7Ci0gIGpfc3RyaWRlX2ZpZWxkXyA9IEdldEZp
ZWxkSUQoCi0gICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfY2xhc3NfLCAi
c3RyaWRlIiwgIkkiKTsKLSAgal9zbGljZV9oZWlnaHRfZmllbGRfID0gR2V0RmllbGRJRCgKLSAg
ICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl9jbGFzc18sICJzbGljZUhlaWdo
dCIsICJJIik7Ci0KLSAgamNsYXNzIGpfZGVjb2RlZF90ZXh0dXJlX2J1ZmZlcl9jbGFzcyA9IEZp
bmRDbGFzcyhqbmksCi0gICAgICAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyJERl
Y29kZWRUZXh0dXJlQnVmZmVyIik7Ci0gIGpfdGV4dHVyZV9pZF9maWVsZF8gPSBHZXRGaWVsZElE
KAotICAgICAgam5pLCBqX2RlY29kZWRfdGV4dHVyZV9idWZmZXJfY2xhc3MsICJ0ZXh0dXJlSUQi
LCAiSSIpOwotICBqX3RyYW5zZm9ybV9tYXRyaXhfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAg
IGpuaSwgal9kZWNvZGVkX3RleHR1cmVfYnVmZmVyX2NsYXNzLCAidHJhbnNmb3JtTWF0cml4Iiwg
IltGIik7Ci0gIGpfdGV4dHVyZV9wcmVzZW50YXRpb25fdGltZXN0YW1wX21zX2ZpZWxkXyA9IEdl
dEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF90ZXh0dXJlX2J1ZmZlcl9jbGFzcywgInBy
ZXNlbnRhdGlvblRpbWVTdGFtcE1zIiwgIkoiKTsKLSAgal90ZXh0dXJlX3RpbWVzdGFtcF9tc19m
aWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfdGV4dHVyZV9idWZmZXJf
Y2xhc3MsICJ0aW1lU3RhbXBNcyIsICJKIik7Ci0gIGpfdGV4dHVyZV9udHBfdGltZXN0YW1wX21z
X2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF90ZXh0dXJlX2J1ZmZl
cl9jbGFzcywgIm50cFRpbWVTdGFtcE1zIiwgIkoiKTsKLSAgal90ZXh0dXJlX2RlY29kZV90aW1l
X21zX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF90ZXh0dXJlX2J1
ZmZlcl9jbGFzcywgImRlY29kZVRpbWVNcyIsICJKIik7Ci0gIGpfdGV4dHVyZV9mcmFtZV9kZWxh
eV9tc19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX2RlY29kZWRfdGV4dHVyZV9i
dWZmZXJfY2xhc3MsICJmcmFtZURlbGF5TXMiLCAiSiIpOwotCi0gIGpjbGFzcyBqX2RlY29kZWRf
b3V0cHV0X2J1ZmZlcl9jbGFzcyA9IEZpbmRDbGFzcyhqbmksCi0gICAgICAib3JnL3dlYnJ0Yy9N
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyJERlY29kZWRPdXRwdXRCdWZmZXIiKTsKLSAgal9pbmZvX2lu
ZGV4X2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF9vdXRwdXRfYnVm
ZmVyX2NsYXNzLCAiaW5kZXgiLCAiSSIpOwotICBqX2luZm9fb2Zmc2V0X2ZpZWxkXyA9IEdldEZp
ZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF9vdXRwdXRfYnVmZmVyX2NsYXNzLCAib2Zmc2V0
IiwgIkkiKTsKLSAgal9pbmZvX3NpemVfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwg
al9kZWNvZGVkX291dHB1dF9idWZmZXJfY2xhc3MsICJzaXplIiwgIkkiKTsKLSAgal9wcmVzZW50
YXRpb25fdGltZXN0YW1wX21zX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVj
b2RlZF9vdXRwdXRfYnVmZmVyX2NsYXNzLCAicHJlc2VudGF0aW9uVGltZVN0YW1wTXMiLCAiSiIp
OwotICBqX3RpbWVzdGFtcF9tc19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX2Rl
Y29kZWRfb3V0cHV0X2J1ZmZlcl9jbGFzcywgInRpbWVTdGFtcE1zIiwgIkoiKTsKLSAgal9udHBf
dGltZXN0YW1wX21zX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVjb2RlZF9v
dXRwdXRfYnVmZmVyX2NsYXNzLCAibnRwVGltZVN0YW1wTXMiLCAiSiIpOwotICBqX2J5dGVfYnVm
ZmVyX2RlY29kZV90aW1lX21zX2ZpZWxkXyA9IEdldEZpZWxkSUQoCi0gICAgICBqbmksIGpfZGVj
b2RlZF9vdXRwdXRfYnVmZmVyX2NsYXNzLCAiZGVjb2RlVGltZU1zIiwgIkoiKTsKLQotICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciBjdG9yIGZhaWxlZCI7
Ci0gIHVzZV9zdXJmYWNlXyA9IChyZW5kZXJfZWdsX2NvbnRleHRfICE9IE5VTEwpOwotICBBTE9H
RCA8PCAiTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciBjdG9yLiBVc2Ugc3VyZmFjZTogIiA8PCB1c2Vf
c3VyZmFjZV87Ci0gIG1lbXNldCgmY29kZWNfLCAwLCBzaXplb2YoY29kZWNfKSk7Ci0gIEFsbG93
QmxvY2tpbmdDYWxscygpOwotfQotCi1NZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjp+TWVkaWFDb2Rl
Y1ZpZGVvRGVjb2RlcigpIHsKLSAgLy8gQ2FsbCBSZWxlYXNlKCkgdG8gZW5zdXJlIG5vIG1vcmUg
Y2FsbGJhY2tzIHRvIHVzIGFmdGVyIHdlIGFyZSBkZWxldGVkLgotICBSZWxlYXNlKCk7Ci19Ci0K
LWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6SW5pdERlY29kZShjb25zdCBWaWRlb0Nv
ZGVjKiBpbnN0LAotICAgIGludDMyX3QgbnVtYmVyT2ZDb3JlcykgewotICBBTE9HRCA8PCAiSW5p
dERlY29kZS4iOwotICBpZiAoaW5zdCA9PSBOVUxMKSB7Ci0gICAgQUxPR0UgPDwgIk5VTEwgVmlk
ZW9Db2RlYyBpbnN0YW5jZSI7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJfUEFS
QU1FVEVSOwotICB9Ci0gIC8vIEZhY3Rvcnkgc2hvdWxkIGd1YXJkIGFnYWluc3Qgb3RoZXIgY29k
ZWNzIGJlaW5nIHVzZWQgd2l0aCB1cy4KLSAgUlRDX0NIRUNLKGluc3QtPmNvZGVjVHlwZSA9PSBj
b2RlY1R5cGVfKQotICAgICAgPDwgIlVuc3VwcG9ydGVkIGNvZGVjICIgPDwgaW5zdC0+Y29kZWNU
eXBlIDw8ICIgZm9yICIgPDwgY29kZWNUeXBlXzsKLQotICBpZiAoc3dfZmFsbGJhY2tfcmVxdWly
ZWRfKSB7Ci0gICAgQUxPR0UgPDwgIkluaXREZWNvZGUoKSAtIGZhbGxiYWNrIHRvIFNXIGRlY29k
ZXIiOwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0gIH0KLSAgLy8gU2F2ZSBW
aWRlb0NvZGVjIGluc3RhbmNlIGZvciBsYXRlci4KLSAgaWYgKCZjb2RlY18gIT0gaW5zdCkgewot
ICAgIGNvZGVjXyA9ICppbnN0OwotICB9Ci0gIC8vIElmIG1heEZyYW1lcmF0ZSBpcyBub3Qgc2V0
IHRoZW4gYXNzdW1lIDMwIGZwcy4KLSAgY29kZWNfLm1heEZyYW1lcmF0ZSA9IChjb2RlY18ubWF4
RnJhbWVyYXRlID49IDEpID8gY29kZWNfLm1heEZyYW1lcmF0ZSA6IDMwOwotCi0gIC8vIENhbGwg
SmF2YSBpbml0LgotICByZXR1cm4gY29kZWNfdGhyZWFkXy0+SW52b2tlPGludDMyX3Q+KAotICAg
ICAgUlRDX0ZST01fSEVSRSwKLSAgICAgIEJpbmQoJk1lZGlhQ29kZWNWaWRlb0RlY29kZXI6Oklu
aXREZWNvZGVPbkNvZGVjVGhyZWFkLCB0aGlzKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1ZpZGVv
RGVjb2Rlcjo6UmVzZXRWYXJpYWJsZXMoKSB7Ci0gIENoZWNrT25Db2RlY1RocmVhZCgpOwotCi0g
IGtleV9mcmFtZV9yZXF1aXJlZF8gPSB0cnVlOwotICBmcmFtZXNfcmVjZWl2ZWRfID0gMDsKLSAg
ZnJhbWVzX2RlY29kZWRfID0gMDsKLSAgZnJhbWVzX2RlY29kZWRfbG9nZ2VkXyA9IGtNYXhEZWNv
ZGVkTG9nRnJhbWVzOwotICBzdGFydF90aW1lX21zXyA9IHJ0Yzo6VGltZU1pbGxpcygpOwotICBj
dXJyZW50X2ZyYW1lc18gPSAwOwotICBjdXJyZW50X2J5dGVzXyA9IDA7Ci0gIGN1cnJlbnRfZGVj
b2RpbmdfdGltZV9tc18gPSAwOwotICBjdXJyZW50X2RlbGF5X3RpbWVfbXNfID0gMDsKLX0KLQot
aW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpJbml0RGVjb2RlT25Db2RlY1RocmVhZCgp
IHsKLSAgQ2hlY2tPbkNvZGVjVGhyZWFkKCk7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVu
dFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1l
KGpuaSk7Ci0gIEFMT0dEIDw8ICJJbml0RGVjb2RlT25Db2RlY1RocmVhZCBUeXBlOiAiIDw8IChp
bnQpY29kZWNUeXBlXyA8PCAiLiAiCi0gICAgICA8PCBjb2RlY18ud2lkdGggPDwgIiB4ICIgPDwg
Y29kZWNfLmhlaWdodCA8PCAiLiBGcHM6ICIgPDwKLSAgICAgIChpbnQpY29kZWNfLm1heEZyYW1l
cmF0ZTsKLQotICAvLyBSZWxlYXNlIHByZXZpb3VzIGNvZGVjIGZpcnN0IGlmIGl0IHdhcyBhbGxv
Y2F0ZWQgYmVmb3JlLgotICBpbnQgcmV0X3ZhbCA9IFJlbGVhc2VPbkNvZGVjVGhyZWFkKCk7Ci0g
IGlmIChyZXRfdmFsIDwgMCkgewotICAgIEFMT0dFIDw8ICJSZWxlYXNlIGZhaWx1cmU6ICIgPDwg
cmV0X3ZhbCA8PCAiIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMiOwotICAgIHN3X2ZhbGxiYWNrX3Jl
cXVpcmVkXyA9IHRydWU7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAg
fQotCi0gIFJlc2V0VmFyaWFibGVzKCk7Ci0KLSAgaWYgKHVzZV9zdXJmYWNlXykgewotICAgIHN1
cmZhY2VfdGV4dHVyZV9oZWxwZXJfID0gU3VyZmFjZVRleHR1cmVIZWxwZXI6OmNyZWF0ZSgKLSAg
ICAgICAgam5pLCAiRGVjb2RlciBTdXJmYWNlVGV4dHVyZUhlbHBlciIsIHJlbmRlcl9lZ2xfY29u
dGV4dF8pOwotICAgIGlmICghc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl8pIHsKLSAgICAgIEFMT0dF
IDw8ICJDb3VsZG4ndCBjcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgLSBmYWxsYmFjayB0byBT
VyBjb2RlYyI7Ci0gICAgICBzd19mYWxsYmFja19yZXF1aXJlZF8gPSB0cnVlOwotICAgICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0gIH0KLQotICBqb2JqZWN0IGpf
dmlkZW9fY29kZWNfZW51bSA9IEphdmFFbnVtRnJvbUluZGV4QW5kQ2xhc3NOYW1lKAotICAgICAg
am5pLCAiTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciRWaWRlb0NvZGVjVHlwZSIsIGNvZGVjVHlwZV8p
OwotICBib29sIHN1Y2Nlc3MgPSBqbmktPkNhbGxCb29sZWFuTWV0aG9kKAotICAgICAgKmpfbWVk
aWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8sCi0gICAgICBqX2luaXRfZGVjb2RlX21ldGhvZF8sCi0g
ICAgICBqX3ZpZGVvX2NvZGVjX2VudW0sCi0gICAgICBjb2RlY18ud2lkdGgsCi0gICAgICBjb2Rl
Y18uaGVpZ2h0LAotICAgICAgdXNlX3N1cmZhY2VfID8gc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl8t
PkdldEphdmFTdXJmYWNlVGV4dHVyZUhlbHBlcigpCi0gICAgICAgICAgICAgICAgICAgOiBudWxs
cHRyKTsKLQotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSB8fCAhc3VjY2VzcykgewotICAgIEFM
T0dFIDw8ICJDb2RlYyBpbml0aWFsaXphdGlvbiBlcnJvciAtIGZhbGxiYWNrIHRvIFNXIGNvZGVj
LiI7Ci0gICAgc3dfZmFsbGJhY2tfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0gIGluaXRlZF8gPSB0cnVlOwotCi0gIHN3aXRjaCAo
Y29kZWNUeXBlXykgewotICAgIGNhc2Uga1ZpZGVvQ29kZWNWUDg6Ci0gICAgICBtYXhfcGVuZGlu
Z19mcmFtZXNfID0ga01heFBlbmRpbmdGcmFtZXNWcDg7Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IGtWaWRlb0NvZGVjVlA5OgotICAgICAgbWF4X3BlbmRpbmdfZnJhbWVzXyA9IGtNYXhQZW5kaW5n
RnJhbWVzVnA5OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmlkZW9Db2RlY0gyNjQ6Ci0gICAg
ICBtYXhfcGVuZGluZ19mcmFtZXNfID0ga01heFBlbmRpbmdGcmFtZXNIMjY0OwotICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIG1heF9wZW5kaW5nX2ZyYW1lc18gPSAwOwotICB9Ci0g
IEFMT0dEIDw8ICJNYXhpbXVtIGFtb3VudCBvZiBwZW5kaW5nIGZyYW1lczogIiA8PCBtYXhfcGVu
ZGluZ19mcmFtZXNfOwotCi0gIGpvYmplY3RBcnJheSBpbnB1dF9idWZmZXJzID0gKGpvYmplY3RB
cnJheSlHZXRPYmplY3RGaWVsZCgKLSAgICAgIGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVj
b2Rlcl8sIGpfaW5wdXRfYnVmZmVyc19maWVsZF8pOwotICBzaXplX3QgbnVtX2lucHV0X2J1ZmZl
cnMgPSBqbmktPkdldEFycmF5TGVuZ3RoKGlucHV0X2J1ZmZlcnMpOwotICBpbnB1dF9idWZmZXJz
Xy5yZXNpemUobnVtX2lucHV0X2J1ZmZlcnMpOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51
bV9pbnB1dF9idWZmZXJzOyArK2kpIHsKLSAgICBpbnB1dF9idWZmZXJzX1tpXSA9Ci0gICAgICAg
IGpuaS0+TmV3R2xvYmFsUmVmKGpuaS0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KGlucHV0X2J1ZmZl
cnMsIGkpKTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0UgPDwg
Ik5ld0dsb2JhbFJlZiBlcnJvciAtIGZhbGxiYWNrIHRvIFNXIGNvZGVjLiI7Ci0gICAgICBzd19m
YWxsYmFja19yZXF1aXJlZF8gPSB0cnVlOwotICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RF
Q19FUlJPUjsKLSAgICB9Ci0gIH0KLQotICBjb2RlY190aHJlYWRfLT5Qb3N0RGVsYXllZChSVENf
RlJPTV9IRVJFLCBrTWVkaWFDb2RlY1BvbGxNcywgdGhpcyk7Ci0KLSAgcmV0dXJuIFdFQlJUQ19W
SURFT19DT0RFQ19PSzsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpSZXNl
dERlY29kZU9uQ29kZWNUaHJlYWQoKSB7Ci0gIENoZWNrT25Db2RlY1RocmVhZCgpOwotICBKTklF
bnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJl
ZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBBTE9HRCA8PCAiUmVzZXREZWNvZGVPbkNv
ZGVjVGhyZWFkIFR5cGU6ICIgPDwgKGludCljb2RlY1R5cGVfIDw8ICIuICIKLSAgICAgIDw8IGNv
ZGVjXy53aWR0aCA8PCAiIHggIiA8PCBjb2RlY18uaGVpZ2h0OwotICBBTE9HRCA8PCAiICBGcmFt
ZXMgcmVjZWl2ZWQ6ICIgPDwgZnJhbWVzX3JlY2VpdmVkXyA8PAotICAgICAgIi4gRnJhbWVzIGRl
Y29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfOwotCi0gIGluaXRlZF8gPSBmYWxzZTsKLSAgcnRj
OjpNZXNzYWdlUXVldWVNYW5hZ2VyOjpDbGVhcih0aGlzKTsKLSAgUmVzZXRWYXJpYWJsZXMoKTsK
LQotICBqbmktPkNhbGxWb2lkTWV0aG9kKAotICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVj
b2Rlcl8sCi0gICAgICBqX3Jlc2V0X21ldGhvZF8sCi0gICAgICBjb2RlY18ud2lkdGgsCi0gICAg
ICBjb2RlY18uaGVpZ2h0KTsKLQotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFM
T0dFIDw8ICJTb2Z0IHJlc2V0IGVycm9yIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMuIjsKLSAgICBz
d19mYWxsYmFja19yZXF1aXJlZF8gPSB0cnVlOwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09E
RUNfRVJST1I7Ci0gIH0KLSAgaW5pdGVkXyA9IHRydWU7Ci0KLSAgY29kZWNfdGhyZWFkXy0+UG9z
dERlbGF5ZWQoUlRDX0ZST01fSEVSRSwga01lZGlhQ29kZWNQb2xsTXMsIHRoaXMpOwotCi0gIHJl
dHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVv
RGVjb2Rlcjo6UmVsZWFzZSgpIHsKLSAgQUxPR0QgPDwgIkRlY29kZXJSZWxlYXNlIHJlcXVlc3Qi
OwotICByZXR1cm4gY29kZWNfdGhyZWFkXy0+SW52b2tlPGludDMyX3Q+KAotICAgICAgUlRDX0ZS
T01fSEVSRSwgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6UmVsZWFzZU9uQ29kZWNUaHJl
YWQsIHRoaXMpKTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpSZWxlYXNl
T25Db2RlY1RocmVhZCgpIHsKLSAgaWYgKCFpbml0ZWRfKSB7Ci0gICAgcmV0dXJuIFdFQlJUQ19W
SURFT19DT0RFQ19PSzsKLSAgfQotICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLSAgSk5JRW52KiBq
bmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgQUxPR0QgPDwgIkRlY29kZXJS
ZWxlYXNlT25Db2RlY1RocmVhZDogRnJhbWVzIHJlY2VpdmVkOiAiIDw8Ci0gICAgICBmcmFtZXNf
cmVjZWl2ZWRfIDw8ICIuIEZyYW1lcyBkZWNvZGVkOiAiIDw8IGZyYW1lc19kZWNvZGVkXzsKLSAg
U2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBpbnB1dF9idWZmZXJzXy5zaXplKCk7IGkrKykgewotICAgIGpuaS0+RGVsZXRl
R2xvYmFsUmVmKGlucHV0X2J1ZmZlcnNfW2ldKTsKLSAgfQotICBpbnB1dF9idWZmZXJzXy5jbGVh
cigpOwotICBqbmktPkNhbGxWb2lkTWV0aG9kKCpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJf
LCBqX3JlbGVhc2VfbWV0aG9kXyk7Ci0gIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXJfID0gbnVsbHB0
cjsKLSAgaW5pdGVkXyA9IGZhbHNlOwotICBydGM6Ok1lc3NhZ2VRdWV1ZU1hbmFnZXI6OkNsZWFy
KHRoaXMpOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFMT0dFIDw8ICJEZWNv
ZGVyIHJlbGVhc2UgZXhjZXB0aW9uIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VS
Uk9SOwotICB9Ci0gIEFMT0dEIDw8ICJEZWNvZGVyUmVsZWFzZU9uQ29kZWNUaHJlYWQgZG9uZSI7
Ci0gIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1Zp
ZGVvRGVjb2Rlcjo6Q2hlY2tPbkNvZGVjVGhyZWFkKCkgewotICBSVENfQ0hFQ0soY29kZWNfdGhy
ZWFkXy5nZXQoKSA9PSBUaHJlYWRNYW5hZ2VyOjpJbnN0YW5jZSgpLT5DdXJyZW50VGhyZWFkKCkp
Ci0gICAgICA8PCAiUnVubmluZyBvbiB3cm9uZyB0aHJlYWQhIjsKLX0KLQotdm9pZCBNZWRpYUNv
ZGVjVmlkZW9EZWNvZGVyOjpFbmFibGVGcmFtZUxvZ09uV2FybmluZygpIHsKLSAgLy8gTG9nIG5l
eHQgMiBvdXRwdXQgZnJhbWVzLgotICBmcmFtZXNfZGVjb2RlZF9sb2dnZWRfID0gc3RkOjptYXgo
Ci0gICAgICBmcmFtZXNfZGVjb2RlZF9sb2dnZWRfLCBmcmFtZXNfZGVjb2RlZF8gKyBrTWF4V2Fy
bmluZ0xvZ0ZyYW1lcyk7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6UHJv
Y2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKCkgewotICBDaGVja09uQ29kZWNUaHJlYWQoKTsKLSAg
aW50IHJldF92YWwgPSBSZWxlYXNlT25Db2RlY1RocmVhZCgpOwotICBpZiAocmV0X3ZhbCA8IDAp
IHsKLSAgICBBTE9HRSA8PCAiUHJvY2Vzc0hXRXJyb3I6IFJlbGVhc2UgZmFpbHVyZSI7Ci0gIH0K
LSAgaWYgKGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNIMjY0KSB7Ci0gICAgLy8gRm9yIG5vdyB0
aGVyZSBpcyBubyBTVyBILjI2NCB3aGljaCBjYW4gYmUgdXNlZCBhcyBmYWxsYmFjayBjb2RlYy4K
LSAgICAvLyBTbyB0cnkgdG8gcmVzdGFydCBodyBjb2RlYyBmb3Igbm93LgotICAgIHJldF92YWwg
PSBJbml0RGVjb2RlT25Db2RlY1RocmVhZCgpOwotICAgIEFMT0dFIDw8ICJSZXNldCBILjI2NCBj
b2RlYyBkb25lLiBTdGF0dXM6ICIgPDwgcmV0X3ZhbDsKLSAgICBpZiAocmV0X3ZhbCA9PSBXRUJS
VENfVklERU9fQ09ERUNfT0spIHsKLSAgICAgIC8vIEguMjY0IGNvZGVjIHdhcyBzdWNjZXNmdWxs
eSByZXNldCAtIHJldHVybiByZWd1bGFyIGVycm9yIGNvZGUuCi0gICAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX0VSUk9SOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBGYWlsIHRvIHJlc3Rh
cnQgSC4yNjQgY29kZWMgLSByZXR1cm4gZXJyb3IgY29kZSB3aGljaCBzaG91bGQgc3RvcCB0aGUK
LSAgICAgIC8vIGNhbGwuCi0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNL
X1NPRlRXQVJFOwotICAgIH0KLSAgfSBlbHNlIHsKLSAgICBzd19mYWxsYmFja19yZXF1aXJlZF8g
PSB0cnVlOwotICAgIEFMT0dFIDw8ICJSZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNL
X1NPRlRXQVJFIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRX
QVJFOwotICB9Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6RGVjb2RlKAot
ICAgIGNvbnN0IEVuY29kZWRJbWFnZSYgaW5wdXRJbWFnZSwKLSAgICBib29sIG1pc3NpbmdGcmFt
ZXMsCi0gICAgY29uc3QgUlRQRnJhZ21lbnRhdGlvbkhlYWRlciogZnJhZ21lbnRhdGlvbiwKLSAg
ICBjb25zdCBDb2RlY1NwZWNpZmljSW5mbyogY29kZWNTcGVjaWZpY0luZm8sCi0gICAgaW50NjRf
dCByZW5kZXJUaW1lTXMpIHsKLSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVkXykgewotICAgIEFM
T0dFIDw8ICJEZWNvZGUoKSAtIGZhbGxiYWNrIHRvIFNXIGNvZGVjIjsKLSAgICByZXR1cm4gV0VC
UlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwotICB9Ci0gIGlmIChjYWxsYmFja18g
PT0gTlVMTCkgewotICAgIEFMT0dFIDw8ICJEZWNvZGUoKSAtIGNhbGxiYWNrXyBpcyBOVUxMIjsK
LSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX1VOSU5JVElBTElaRUQ7Ci0gIH0KLSAgaWYg
KGlucHV0SW1hZ2UuX2J1ZmZlciA9PSBOVUxMICYmIGlucHV0SW1hZ2UuX2xlbmd0aCA+IDApIHsK
LSAgICBBTE9HRSA8PCAiRGVjb2RlKCkgLSBpbnB1dEltYWdlIGlzIGluY29ycmVjdCI7Ci0gICAg
cmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJfUEFSQU1FVEVSOwotICB9Ci0gIGlmICghaW5p
dGVkXykgewotICAgIEFMT0dFIDw8ICJEZWNvZGUoKSAtIGRlY29kZXIgaXMgbm90IGluaXRpYWxp
emVkIjsKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX1VOSU5JVElBTElaRUQ7Ci0gIH0K
LQotICAvLyBDaGVjayBpZiBlbmNvZGVkIGZyYW1lIGRpbWVuc2lvbiBoYXMgY2hhbmdlZC4KLSAg
aWYgKChpbnB1dEltYWdlLl9lbmNvZGVkV2lkdGggKiBpbnB1dEltYWdlLl9lbmNvZGVkSGVpZ2h0
ID4gMCkgJiYKLSAgICAgIChpbnB1dEltYWdlLl9lbmNvZGVkV2lkdGggIT0gY29kZWNfLndpZHRo
IHx8Ci0gICAgICBpbnB1dEltYWdlLl9lbmNvZGVkSGVpZ2h0ICE9IGNvZGVjXy5oZWlnaHQpKSB7
Ci0gICAgQUxPR1cgPDwgIklucHV0IHJlc29sdXRpb24gY2hhbmdlZCBmcm9tICIgPDwKLSAgICAg
ICAgY29kZWNfLndpZHRoIDw8ICIgeCAiIDw8IGNvZGVjXy5oZWlnaHQgPDwgIiB0byAiIDw8Ci0g
ICAgICAgIGlucHV0SW1hZ2UuX2VuY29kZWRXaWR0aCA8PCAiIHggIiA8PCBpbnB1dEltYWdlLl9l
bmNvZGVkSGVpZ2h0OwotICAgIGNvZGVjXy53aWR0aCA9IGlucHV0SW1hZ2UuX2VuY29kZWRXaWR0
aDsKLSAgICBjb2RlY18uaGVpZ2h0ID0gaW5wdXRJbWFnZS5fZW5jb2RlZEhlaWdodDsKLSAgICBp
bnQzMl90IHJldDsKLSAgICBpZiAodXNlX3N1cmZhY2VfICYmCi0gICAgICAgIChjb2RlY1R5cGVf
ID09IGtWaWRlb0NvZGVjVlA4IHx8IGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNIMjY0KSkgewot
ICAgICAgLy8gU29mdCBjb2RlYyByZXNldCAtIG9ubHkgZm9yIHN1cmZhY2UgZGVjb2RpbmcuCi0g
ICAgICByZXQgPSBjb2RlY190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0gICAgICAgICAgUlRD
X0ZST01fSEVSRSwKLSAgICAgICAgICBCaW5kKCZNZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpSZXNl
dERlY29kZU9uQ29kZWNUaHJlYWQsIHRoaXMpKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gSGFy
ZCBjb2RlYyByZXNldC4KLSAgICAgIHJldCA9IEluaXREZWNvZGUoJmNvZGVjXywgMSk7Ci0gICAg
fQotICAgIGlmIChyZXQgPCAwKSB7Ci0gICAgICBBTE9HRSA8PCAiSW5pdERlY29kZSBmYWlsdXJl
OiAiIDw8IHJldCA8PCAiIC0gZmFsbGJhY2sgdG8gU1cgY29kZWMiOwotICAgICAgc3dfZmFsbGJh
Y2tfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRkFM
TEJBQ0tfU09GVFdBUkU7Ci0gICAgfQotICB9Ci0KLSAgLy8gQWx3YXlzIHN0YXJ0IHdpdGggYSBj
b21wbGV0ZSBrZXkgZnJhbWUuCi0gIGlmIChrZXlfZnJhbWVfcmVxdWlyZWRfKSB7Ci0gICAgaWYg
KGlucHV0SW1hZ2UuX2ZyYW1lVHlwZSAhPSB3ZWJydGM6OmtWaWRlb0ZyYW1lS2V5KSB7Ci0gICAg
ICBBTE9HRSA8PCAiRGVjb2RlKCkgLSBrZXkgZnJhbWUgaXMgcmVxdWlyZWQiOwotICAgICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0gICAgaWYgKCFpbnB1dEltYWdl
Ll9jb21wbGV0ZUZyYW1lKSB7Ci0gICAgICBBTE9HRSA8PCAiRGVjb2RlKCkgLSBjb21wbGV0ZSBm
cmFtZSBpcyByZXF1aXJlZCI7Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9S
OwotICAgIH0KLSAgICBrZXlfZnJhbWVfcmVxdWlyZWRfID0gZmFsc2U7Ci0gIH0KLSAgaWYgKGlu
cHV0SW1hZ2UuX2xlbmd0aCA9PSAwKSB7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19F
UlJPUjsKLSAgfQotCi0gIHJldHVybiBjb2RlY190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0g
ICAgICBSVENfRlJPTV9IRVJFLAotICAgICAgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRGVjb2Rlcjo6
RGVjb2RlT25Db2RlY1RocmVhZCwgdGhpcywgaW5wdXRJbWFnZSkpOwotfQotCi1pbnQzMl90IE1l
ZGlhQ29kZWNWaWRlb0RlY29kZXI6OkRlY29kZU9uQ29kZWNUaHJlYWQoCi0gICAgY29uc3QgRW5j
b2RlZEltYWdlJiBpbnB1dEltYWdlKSB7Ci0gIENoZWNrT25Db2RlY1RocmVhZCgpOwotICBKTklF
bnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJl
ZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotCi0gIC8vIFRyeSB0byBkcmFpbiB0aGUgZGVj
b2RlciBhbmQgd2FpdCB1bnRpbCBvdXRwdXQgaXMgbm90IHRvbwotICAvLyBtdWNoIGJlaGluZCB0
aGUgaW5wdXQuCi0gIGlmIChjb2RlY1R5cGVfID09IGtWaWRlb0NvZGVjSDI2NCAmJgotICAgICAg
ZnJhbWVzX3JlY2VpdmVkXyA+IGZyYW1lc19kZWNvZGVkXyArIG1heF9wZW5kaW5nX2ZyYW1lc18p
IHsKLSAgICAvLyBQcmludCB3YXJuaW5nIGZvciBILjI2NCBvbmx5IC0gZm9yIFZQOC9WUDkgb25l
IGZyYW1lIGRlbGF5IGlzIG9rLgotICAgIEFMT0dXIDw8ICJEZWNvZGVyIGlzIHRvbyBmYXIgYmVo
aW5kLiBUcnkgdG8gZHJhaW4uIFJlY2VpdmVkOiAiIDw8Ci0gICAgICAgIGZyYW1lc19yZWNlaXZl
ZF8gPDwgIi4gRGVjb2RlZDogIiA8PCBmcmFtZXNfZGVjb2RlZF87Ci0gICAgRW5hYmxlRnJhbWVM
b2dPbldhcm5pbmcoKTsKLSAgfQotICBjb25zdCBpbnQ2NCBkcmFpbl9zdGFydCA9IHJ0Yzo6VGlt
ZU1pbGxpcygpOwotICB3aGlsZSAoKGZyYW1lc19yZWNlaXZlZF8gPiBmcmFtZXNfZGVjb2RlZF8g
KyBtYXhfcGVuZGluZ19mcmFtZXNfKSAmJgotICAgICAgICAgKHJ0Yzo6VGltZU1pbGxpcygpIC0g
ZHJhaW5fc3RhcnQpIDwga01lZGlhQ29kZWNUaW1lb3V0TXMpIHsKLSAgICBpZiAoIURlbGl2ZXJQ
ZW5kaW5nT3V0cHV0cyhqbmksIGtNZWRpYUNvZGVjUG9sbE1zKSkgewotICAgICAgQUxPR0UgPDwg
IkRlbGl2ZXJQZW5kaW5nT3V0cHV0cyBlcnJvci4gRnJhbWVzIHJlY2VpdmVkOiAiIDw8Ci0gICAg
ICAgICAgZnJhbWVzX3JlY2VpdmVkXyA8PCAiLiBGcmFtZXMgZGVjb2RlZDogIiA8PCBmcmFtZXNf
ZGVjb2RlZF87Ci0gICAgICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKCk7Ci0g
ICAgfQotICB9Ci0gIGlmIChmcmFtZXNfcmVjZWl2ZWRfID4gZnJhbWVzX2RlY29kZWRfICsgbWF4
X3BlbmRpbmdfZnJhbWVzXykgewotICAgIEFMT0dFIDw8ICJPdXRwdXQgYnVmZmVyIGRlcXVldWUg
dGltZW91dC4gRnJhbWVzIHJlY2VpdmVkOiAiIDw8Ci0gICAgICAgIGZyYW1lc19yZWNlaXZlZF8g
PDwgIi4gRnJhbWVzIGRlY29kZWQ6ICIgPDwgZnJhbWVzX2RlY29kZWRfOwotICAgIHJldHVybiBQ
cm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsKLSAgfQotCi0gIC8vIEdldCBpbnB1dCBidWZm
ZXIuCi0gIGludCBqX2lucHV0X2J1ZmZlcl9pbmRleCA9IGpuaS0+Q2FsbEludE1ldGhvZCgKLSAg
ICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLCBqX2RlcXVldWVfaW5wdXRfYnVmZmVy
X21ldGhvZF8pOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSB8fCBqX2lucHV0X2J1ZmZlcl9p
bmRleCA8IDApIHsKLSAgICBBTE9HRSA8PCAiZGVxdWV1ZUlucHV0QnVmZmVyIGVycm9yOiAiIDw8
IGpfaW5wdXRfYnVmZmVyX2luZGV4IDw8Ci0gICAgICAgICIuIFJldHJ5IERlbGl2ZXJQZW5kaW5n
T3V0cHV0cy4iOwotICAgIEVuYWJsZUZyYW1lTG9nT25XYXJuaW5nKCk7Ci0gICAgLy8gVHJ5IHRv
IGRyYWluIHRoZSBkZWNvZGVyLgotICAgIGlmICghRGVsaXZlclBlbmRpbmdPdXRwdXRzKGpuaSwg
a01lZGlhQ29kZWNQb2xsTXMpKSB7Ci0gICAgICBBTE9HRSA8PCAiRGVsaXZlclBlbmRpbmdPdXRw
dXRzIGVycm9yLiBGcmFtZXMgcmVjZWl2ZWQ6ICIgPDwKLSAgICAgICAgICBmcmFtZXNfcmVjZWl2
ZWRfIDw8ICIuIEZyYW1lcyBkZWNvZGVkOiAiIDw8IGZyYW1lc19kZWNvZGVkXzsKLSAgICAgIHJl
dHVybiBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsKLSAgICB9Ci0gICAgLy8gVHJ5IGRl
cXVldWUgaW5wdXQgYnVmZmVyIG9uZSBsYXN0IHRpbWUuCi0gICAgal9pbnB1dF9idWZmZXJfaW5k
ZXggPSBqbmktPkNhbGxJbnRNZXRob2QoCi0gICAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2Rl
Y29kZXJfLCBqX2RlcXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF8pOwotICAgIGlmIChDaGVja0V4
Y2VwdGlvbihqbmkpIHx8IGpfaW5wdXRfYnVmZmVyX2luZGV4IDwgMCkgewotICAgICAgQUxPR0Ug
PDwgImRlcXVldWVJbnB1dEJ1ZmZlciBjcml0aWNhbCBlcnJvcjogIiA8PCBqX2lucHV0X2J1ZmZl
cl9pbmRleDsKLSAgICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsKLSAg
ICB9Ci0gIH0KLQotICAvLyBDb3B5IGVuY29kZWQgZGF0YSB0byBKYXZhIEJ5dGVCdWZmZXIuCi0g
IGpvYmplY3Qgal9pbnB1dF9idWZmZXIgPSBpbnB1dF9idWZmZXJzX1tqX2lucHV0X2J1ZmZlcl9p
bmRleF07Ci0gIHVpbnQ4X3QqIGJ1ZmZlciA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPihqbmktPkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9pbnB1dF9idWZmZXIpKTsKLSAgUlRD
X0NIRUNLKGJ1ZmZlcikgPDwgIkluZGlyZWN0IGJ1ZmZlcj8/IjsKLSAgaW50NjRfdCBidWZmZXJf
Y2FwYWNpdHkgPSBqbmktPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KGpfaW5wdXRfYnVmZmVyKTsK
LSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkgfHwgYnVmZmVyX2NhcGFjaXR5IDwgaW5wdXRJbWFn
ZS5fbGVuZ3RoKSB7Ci0gICAgQUxPR0UgPDwgIklucHV0IGZyYW1lIHNpemUgIjw8ICBpbnB1dElt
YWdlLl9sZW5ndGggPDwKLSAgICAgICAgIiBpcyBiaWdnZXIgdGhhbiBidWZmZXIgc2l6ZSAiIDw8
IGJ1ZmZlcl9jYXBhY2l0eTsKLSAgICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFk
KCk7Ci0gIH0KLSAgamxvbmcgcHJlc2VudGF0aW9uX3RpbWVzdGFtcF91cyA9IHN0YXRpY19jYXN0
PGpsb25nPigKLSAgICAgIHN0YXRpY19jYXN0PGludDY0X3Q+KGZyYW1lc19yZWNlaXZlZF8pICog
MTAwMDAwMCAvIGNvZGVjXy5tYXhGcmFtZXJhdGUpOwotICBtZW1jcHkoYnVmZmVyLCBpbnB1dElt
YWdlLl9idWZmZXIsIGlucHV0SW1hZ2UuX2xlbmd0aCk7Ci0KLSAgaWYgKGZyYW1lc19kZWNvZGVk
XyA8IGZyYW1lc19kZWNvZGVkX2xvZ2dlZF8pIHsKLSAgICBBTE9HRCA8PCAiRGVjb2RlciBmcmFt
ZSBpbiAjICIgPDwgZnJhbWVzX3JlY2VpdmVkXyA8PAotICAgICAgICAiLiBUeXBlOiAiIDw8IGlu
cHV0SW1hZ2UuX2ZyYW1lVHlwZSA8PAotICAgICAgICAiLiBCdWZmZXIgIyAiIDw8IGpfaW5wdXRf
YnVmZmVyX2luZGV4IDw8Ci0gICAgICAgICIuIFRTOiAiIDw8IHByZXNlbnRhdGlvbl90aW1lc3Rh
bXBfdXMgLyAxMDAwIDw8Ci0gICAgICAgICIuIFNpemU6ICIgPDwgaW5wdXRJbWFnZS5fbGVuZ3Ro
OwotICB9Ci0KLSAgLy8gU2F2ZSBpbnB1dCBpbWFnZSB0aW1lc3RhbXBzIGZvciBsYXRlciBvdXRw
dXQuCi0gIGZyYW1lc19yZWNlaXZlZF8rKzsKLSAgY3VycmVudF9ieXRlc18gKz0gaW5wdXRJbWFn
ZS5fbGVuZ3RoOwotCi0gIC8vIEZlZWQgaW5wdXQgdG8gZGVjb2Rlci4KLSAgYm9vbCBzdWNjZXNz
ID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZCgKLSAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2Rl
Y29kZXJfLAotICAgICAgal9xdWV1ZV9pbnB1dF9idWZmZXJfbWV0aG9kXywKLSAgICAgIGpfaW5w
dXRfYnVmZmVyX2luZGV4LAotICAgICAgaW5wdXRJbWFnZS5fbGVuZ3RoLAotICAgICAgcHJlc2Vu
dGF0aW9uX3RpbWVzdGFtcF91cywKLSAgICAgIHN0YXRpY19jYXN0PGludDY0X3Q+IChpbnB1dElt
YWdlLl90aW1lU3RhbXApLAotICAgICAgaW5wdXRJbWFnZS5udHBfdGltZV9tc18pOwotICBpZiAo
Q2hlY2tFeGNlcHRpb24oam5pKSB8fCAhc3VjY2VzcykgewotICAgIEFMT0dFIDw8ICJxdWV1ZUlu
cHV0QnVmZmVyIGVycm9yIjsKLSAgICByZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFk
KCk7Ci0gIH0KLQotICAvLyBUcnkgdG8gZHJhaW4gdGhlIGRlY29kZXIKLSAgaWYgKCFEZWxpdmVy
UGVuZGluZ091dHB1dHMoam5pLCAwKSkgewotICAgIEFMT0dFIDw8ICJEZWxpdmVyUGVuZGluZ091
dHB1dHMgZXJyb3IiOwotICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoKTsK
LSAgfQotCi0gIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0KLWJvb2wgTWVkaWFD
b2RlY1ZpZGVvRGVjb2Rlcjo6RGVsaXZlclBlbmRpbmdPdXRwdXRzKAotICAgIEpOSUVudiogam5p
LCBpbnQgZGVxdWV1ZV90aW1lb3V0X21zKSB7Ci0gIGlmIChmcmFtZXNfcmVjZWl2ZWRfIDw9IGZy
YW1lc19kZWNvZGVkXykgewotICAgIC8vIE5vIG5lZWQgdG8gcXVlcnkgZm9yIG91dHB1dCBidWZm
ZXJzIC0gZGVjb2RlciBpcyBkcmFpbmVkLgotICAgIHJldHVybiB0cnVlOwotICB9Ci0gIC8vIEdl
dCBkZWNvZGVyIG91dHB1dC4KLSAgam9iamVjdCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciA9Ci0g
ICAgICBqbmktPkNhbGxPYmplY3RNZXRob2QoKmpfbWVkaWFfY29kZWNfdmlkZW9fZGVjb2Rlcl8s
Ci0gICAgICAgICAgdXNlX3N1cmZhY2VfID8gal9kZXF1ZXVlX3RleHR1cmVfYnVmZmVyX21ldGhv
ZF8KLSAgICAgICAgICAgICAgICAgICAgICAgOiBqX2RlcXVldWVfYnl0ZV9idWZmZXJfbWV0aG9k
XywKLSAgICAgICAgICBkZXF1ZXVlX3RpbWVvdXRfbXMpOwotCi0gIGlmIChDaGVja0V4Y2VwdGlv
bihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgImRlcXVldWVPdXRwdXRCdWZmZXIoKSBlcnJvciI7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGlmIChJc051bGwoam5pLCBqX2RlY29kZXJfb3V0cHV0
X2J1ZmZlcikpIHsKLSAgICAvLyBObyBkZWNvZGVkIGZyYW1lIHJlYWR5LgotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgLy8gR2V0IGRlY29kZWQgdmlkZW8gZnJhbWUgcHJvcGVydGllcy4KLSAg
aW50IGNvbG9yX2Zvcm1hdCA9IEdldEludEZpZWxkKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9f
ZGVjb2Rlcl8sCi0gICAgICBqX2NvbG9yX2Zvcm1hdF9maWVsZF8pOwotICBpbnQgd2lkdGggPSBH
ZXRJbnRGaWVsZChqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2RlY29kZXJfLCBqX3dpZHRoX2Zp
ZWxkXyk7Ci0gIGludCBoZWlnaHQgPSBHZXRJbnRGaWVsZChqbmksICpqX21lZGlhX2NvZGVjX3Zp
ZGVvX2RlY29kZXJfLCBqX2hlaWdodF9maWVsZF8pOwotICBpbnQgc3RyaWRlID0gR2V0SW50Rmll
bGQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19kZWNvZGVyXywgal9zdHJpZGVfZmllbGRfKTsK
LSAgaW50IHNsaWNlX2hlaWdodCA9IEdldEludEZpZWxkKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlk
ZW9fZGVjb2Rlcl8sCi0gICAgICBqX3NsaWNlX2hlaWdodF9maWVsZF8pOwotCi0gIHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IGZyYW1lX2J1ZmZlcjsKLSAgaW50
NjRfdCBwcmVzZW50YXRpb25fdGltZXN0YW1wc19tcyA9IDA7Ci0gIGludDY0X3Qgb3V0cHV0X3Rp
bWVzdGFtcHNfbXMgPSAwOwotICBpbnQ2NF90IG91dHB1dF9udHBfdGltZXN0YW1wc19tcyA9IDA7
Ci0gIGludCBkZWNvZGVfdGltZV9tcyA9IDA7Ci0gIGludDY0X3QgZnJhbWVfZGVsYXllZF9tcyA9
IDA7Ci0gIGlmICh1c2Vfc3VyZmFjZV8pIHsKLSAgICAvLyBFeHRyYWN0IGRhdGEgZnJvbSBKYXZh
IERlY29kZWRUZXh0dXJlQnVmZmVyLgotICAgIHByZXNlbnRhdGlvbl90aW1lc3RhbXBzX21zID0g
R2V0TG9uZ0ZpZWxkKAotICAgICAgICBqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyLAotICAg
ICAgICBqX3RleHR1cmVfcHJlc2VudGF0aW9uX3RpbWVzdGFtcF9tc19maWVsZF8pOwotICAgIG91
dHB1dF90aW1lc3RhbXBzX21zID0gR2V0TG9uZ0ZpZWxkKAotICAgICAgICBqbmksIGpfZGVjb2Rl
cl9vdXRwdXRfYnVmZmVyLCBqX3RleHR1cmVfdGltZXN0YW1wX21zX2ZpZWxkXyk7Ci0gICAgb3V0
cHV0X250cF90aW1lc3RhbXBzX21zID0gR2V0TG9uZ0ZpZWxkKAotICAgICAgICBqbmksIGpfZGVj
b2Rlcl9vdXRwdXRfYnVmZmVyLCBqX3RleHR1cmVfbnRwX3RpbWVzdGFtcF9tc19maWVsZF8pOwot
ICAgIGRlY29kZV90aW1lX21zID0gR2V0TG9uZ0ZpZWxkKAotICAgICAgICBqbmksIGpfZGVjb2Rl
cl9vdXRwdXRfYnVmZmVyLCBqX3RleHR1cmVfZGVjb2RlX3RpbWVfbXNfZmllbGRfKTsKLQotICAg
IGNvbnN0IGludCB0ZXh0dXJlX2lkID0KLSAgICAgICAgR2V0SW50RmllbGQoam5pLCBqX2RlY29k
ZXJfb3V0cHV0X2J1ZmZlciwgal90ZXh0dXJlX2lkX2ZpZWxkXyk7Ci0gICAgaWYgKHRleHR1cmVf
aWQgIT0gMCkgeyAgLy8gfHRleHR1cmVfaWR8ID09IDAgcmVwcmVzZW50cyBhIGRyb3BwZWQgZnJh
bWUuCi0gICAgICBjb25zdCBqZmxvYXRBcnJheSBqX3RyYW5zZm9ybV9tYXRyaXggPQotICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8amZsb2F0QXJyYXk+KEdldE9iamVjdEZpZWxkKAotICAgICAg
ICAgICAgICBqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyLCBqX3RyYW5zZm9ybV9tYXRyaXhf
ZmllbGRfKSk7Ci0gICAgICBmcmFtZV9kZWxheWVkX21zID0gR2V0TG9uZ0ZpZWxkKAotICAgICAg
ICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsIGpfdGV4dHVyZV9mcmFtZV9kZWxheV9t
c19maWVsZF8pOwotCi0gICAgICAvLyBDcmVhdGUgd2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyIHdp
dGggbmF0aXZlIHRleHR1cmUgaGFuZGxlLgotICAgICAgZnJhbWVfYnVmZmVyID0gc3VyZmFjZV90
ZXh0dXJlX2hlbHBlcl8tPkNyZWF0ZVRleHR1cmVGcmFtZSgKLSAgICAgICAgICB3aWR0aCwgaGVp
Z2h0LCBOYXRpdmVIYW5kbGVJbXBsKGpuaSwgdGV4dHVyZV9pZCwgal90cmFuc2Zvcm1fbWF0cml4
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIEVuYWJsZUZyYW1lTG9nT25XYXJuaW5nKCk7Ci0gICAg
fQotICB9IGVsc2UgewotICAgIC8vIEV4dHJhY3QgZGF0YSBmcm9tIEphdmEgQnl0ZUJ1ZmZlciBh
bmQgY3JlYXRlIG91dHB1dCB5dXY0MjAgZnJhbWUgLQotICAgIC8vIGZvciBub24gc3VyZmFjZSBk
ZWNvZGluZyBvbmx5LgotICAgIGNvbnN0IGludCBvdXRwdXRfYnVmZmVyX2luZGV4ID0gR2V0SW50
RmllbGQoCi0gICAgICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsIGpfaW5mb19pbmRl
eF9maWVsZF8pOwotICAgIGNvbnN0IGludCBvdXRwdXRfYnVmZmVyX29mZnNldCA9IEdldEludEZp
ZWxkKAotICAgICAgICBqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyLCBqX2luZm9fb2Zmc2V0
X2ZpZWxkXyk7Ci0gICAgY29uc3QgaW50IG91dHB1dF9idWZmZXJfc2l6ZSA9IEdldEludEZpZWxk
KAotICAgICAgICBqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyLCBqX2luZm9fc2l6ZV9maWVs
ZF8pOwotICAgIHByZXNlbnRhdGlvbl90aW1lc3RhbXBzX21zID0gR2V0TG9uZ0ZpZWxkKAotICAg
ICAgICBqbmksIGpfZGVjb2Rlcl9vdXRwdXRfYnVmZmVyLCBqX3ByZXNlbnRhdGlvbl90aW1lc3Rh
bXBfbXNfZmllbGRfKTsKLSAgICBvdXRwdXRfdGltZXN0YW1wc19tcyA9IEdldExvbmdGaWVsZCgK
LSAgICAgICAgam5pLCBqX2RlY29kZXJfb3V0cHV0X2J1ZmZlciwgal90aW1lc3RhbXBfbXNfZmll
bGRfKTsKLSAgICBvdXRwdXRfbnRwX3RpbWVzdGFtcHNfbXMgPSBHZXRMb25nRmllbGQoCi0gICAg
ICAgIGpuaSwgal9kZWNvZGVyX291dHB1dF9idWZmZXIsIGpfbnRwX3RpbWVzdGFtcF9tc19maWVs
ZF8pOwotCi0gICAgZGVjb2RlX3RpbWVfbXMgPSBHZXRMb25nRmllbGQoam5pLCBqX2RlY29kZXJf
b3V0cHV0X2J1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX2J5dGVf
YnVmZmVyX2RlY29kZV90aW1lX21zX2ZpZWxkXyk7Ci0KLSAgICBpZiAob3V0cHV0X2J1ZmZlcl9z
aXplIDwgd2lkdGggKiBoZWlnaHQgKiAzIC8gMikgewotICAgICAgQUxPR0UgPDwgIkluc3VmZmlj
aWVudCBvdXRwdXQgYnVmZmVyIHNpemU6ICIgPDwgb3V0cHV0X2J1ZmZlcl9zaXplOwotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAob3V0cHV0X2J1ZmZlcl9zaXplIDwgc3RyaWRl
ICogaGVpZ2h0ICogMyAvIDIgJiYKLSAgICAgICAgc2xpY2VfaGVpZ2h0ID09IGhlaWdodCAmJiBz
dHJpZGUgPiB3aWR0aCkgewotICAgICAgLy8gU29tZSBjb2RlY3MgKEV4eW5vcykgaW5jb3JyZWN0
bHkgcmVwb3J0IHN0cmlkZSBpbmZvcm1hdGlvbiBmb3IKLSAgICAgIC8vIG91dHB1dCBieXRlIGJ1
ZmZlciwgc28gYWN0dWFsIHN0cmlkZSB2YWx1ZSBuZWVkIHRvIGJlIGNvcnJlY3RlZC4KLSAgICAg
IHN0cmlkZSA9IG91dHB1dF9idWZmZXJfc2l6ZSAqIDIgLyAoaGVpZ2h0ICogMyk7Ci0gICAgfQot
ICAgIGpvYmplY3RBcnJheSBvdXRwdXRfYnVmZmVycyA9IHJlaW50ZXJwcmV0X2Nhc3Q8am9iamVj
dEFycmF5PihHZXRPYmplY3RGaWVsZCgKLSAgICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRl
b19kZWNvZGVyXywgal9vdXRwdXRfYnVmZmVyc19maWVsZF8pKTsKLSAgICBqb2JqZWN0IG91dHB1
dF9idWZmZXIgPQotICAgICAgICBqbmktPkdldE9iamVjdEFycmF5RWxlbWVudChvdXRwdXRfYnVm
ZmVycywgb3V0cHV0X2J1ZmZlcl9pbmRleCk7Ci0gICAgdWludDhfdCogcGF5bG9hZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcygKLSAgICAg
ICAgb3V0cHV0X2J1ZmZlcikpOwotICAgIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHBheWxvYWQgKz0gb3V0cHV0X2J1ZmZlcl9vZmZz
ZXQ7Ci0KLSAgICAvLyBDcmVhdGUgeXV2NDIwIGZyYW1lLgotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0
cjx3ZWJydGM6Okk0MjBCdWZmZXI+IGk0MjBfYnVmZmVyOwotCi0gICAgaTQyMF9idWZmZXIgPSBk
ZWNvZGVkX2ZyYW1lX3Bvb2xfLkNyZWF0ZUJ1ZmZlcih3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAo
Y29sb3JfZm9ybWF0ID09IENPTE9SX0Zvcm1hdFlVVjQyMFBsYW5hcikgewotICAgICAgUlRDX0NI
RUNLX0VRKDAsIHN0cmlkZSAlIDIpOwotICAgICAgUlRDX0NIRUNLX0VRKDAsIHNsaWNlX2hlaWdo
dCAlIDIpOwotICAgICAgY29uc3QgaW50IHV2X3N0cmlkZSA9IHN0cmlkZSAvIDI7Ci0gICAgICBj
b25zdCBpbnQgdV9zbGljZV9oZWlnaHQgPSBzbGljZV9oZWlnaHQgLyAyOwotICAgICAgY29uc3Qg
dWludDhfdCogeV9wdHIgPSBwYXlsb2FkOwotICAgICAgY29uc3QgdWludDhfdCogdV9wdHIgPSB5
X3B0ciArIHN0cmlkZSAqIHNsaWNlX2hlaWdodDsKLSAgICAgIGNvbnN0IHVpbnQ4X3QqIHZfcHRy
ID0gdV9wdHIgKyB1dl9zdHJpZGUgKiB1X3NsaWNlX2hlaWdodDsKLSAgICAgIGxpYnl1djo6STQy
MENvcHkoeV9wdHIsIHN0cmlkZSwgdV9wdHIsIHV2X3N0cmlkZSwgdl9wdHIsIHV2X3N0cmlkZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgaTQyMF9idWZmZXItPk11dGFibGVEYXRhWSgpLCBpNDIw
X2J1ZmZlci0+U3RyaWRlWSgpLAotICAgICAgICAgICAgICAgICAgICAgICBpNDIwX2J1ZmZlci0+
TXV0YWJsZURhdGFVKCksIGk0MjBfYnVmZmVyLT5TdHJpZGVVKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgIGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVYoKSwgaTQyMF9idWZmZXItPlN0cmlkZVYo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIC8vIEFsbCBvdGhlciBzdXBwb3J0ZWQgZm9ybWF0cyBhcmUgbnYxMi4KLSAgICAgIGNv
bnN0IHVpbnQ4X3QqIHlfcHRyID0gcGF5bG9hZDsKLSAgICAgIGNvbnN0IHVpbnQ4X3QqIHV2X3B0
ciA9IHlfcHRyICsgc3RyaWRlICogc2xpY2VfaGVpZ2h0OwotICAgICAgbGlieXV2OjpOVjEyVG9J
NDIwKHlfcHRyLCBzdHJpZGUsIHV2X3B0ciwgc3RyaWRlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGk0MjBfYnVmZmVyLT5NdXRhYmxlRGF0YVkoKSwgaTQyMF9idWZmZXItPlN0cmlkZVkoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBpNDIwX2J1ZmZlci0+TXV0YWJsZURhdGFVKCksIGk0
MjBfYnVmZmVyLT5TdHJpZGVVKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgaTQyMF9idWZm
ZXItPk11dGFibGVEYXRhVigpLCBpNDIwX2J1ZmZlci0+U3RyaWRlVigpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLSAgICBmcmFtZV9idWZmZXIgPSBp
NDIwX2J1ZmZlcjsKLQotICAgIC8vIFJldHVybiBvdXRwdXQgYnl0ZSBidWZmZXIgYmFjayB0byBj
b2RlYy4KLSAgICBqbmktPkNhbGxWb2lkTWV0aG9kKAotICAgICAgICAqal9tZWRpYV9jb2RlY192
aWRlb19kZWNvZGVyXywKLSAgICAgICAgal9yZXR1cm5fZGVjb2RlZF9ieXRlX2J1ZmZlcl9tZXRo
b2RfLAotICAgICAgICBvdXRwdXRfYnVmZmVyX2luZGV4KTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRp
b24oam5pKSkgewotICAgICAgQUxPR0UgPDwgInJldHVybkRlY29kZWRPdXRwdXRCdWZmZXIgZXJy
b3IiOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotICBpZiAoZnJhbWVzX2RlY29k
ZWRfIDwgZnJhbWVzX2RlY29kZWRfbG9nZ2VkXykgewotICAgIEFMT0dEIDw8ICJEZWNvZGVyIGZy
YW1lIG91dCAjICIgPDwgZnJhbWVzX2RlY29kZWRfIDw8Ci0gICAgICAgICIuICIgPDwgd2lkdGgg
PDwgIiB4ICIgPDwgaGVpZ2h0IDw8Ci0gICAgICAgICIuICIgPDwgc3RyaWRlIDw8ICIgeCAiIDw8
ICBzbGljZV9oZWlnaHQgPDwKLSAgICAgICAgIi4gQ29sb3I6ICIgPDwgY29sb3JfZm9ybWF0IDw8
Ci0gICAgICAgICIuIFRTOiAiIDw8IHByZXNlbnRhdGlvbl90aW1lc3RhbXBzX21zIDw8Ci0gICAg
ICAgICIuIERlY1RpbWU6ICIgPDwgKGludClkZWNvZGVfdGltZV9tcyA8PAotICAgICAgICAiLiBE
ZWxheVRpbWU6ICIgPDwgKGludClmcmFtZV9kZWxheWVkX21zOwotICB9Ci0KLSAgLy8gQ2FsY3Vs
YXRlIGFuZCBwcmludCBkZWNvZGluZyBzdGF0aXN0aWNzIC0gZXZlcnkgMyBzZWNvbmRzLgotICBm
cmFtZXNfZGVjb2RlZF8rKzsKLSAgY3VycmVudF9mcmFtZXNfKys7Ci0gIGN1cnJlbnRfZGVjb2Rp
bmdfdGltZV9tc18gKz0gZGVjb2RlX3RpbWVfbXM7Ci0gIGN1cnJlbnRfZGVsYXlfdGltZV9tc18g
Kz0gZnJhbWVfZGVsYXllZF9tczsKLSAgaW50IHN0YXRpc3RpY190aW1lX21zID0gcnRjOjpUaW1l
TWlsbGlzKCkgLSBzdGFydF90aW1lX21zXzsKLSAgaWYgKHN0YXRpc3RpY190aW1lX21zID49IGtN
ZWRpYUNvZGVjU3RhdGlzdGljc0ludGVydmFsTXMgJiYKLSAgICAgIGN1cnJlbnRfZnJhbWVzXyA+
IDApIHsKLSAgICBpbnQgY3VycmVudF9iaXRyYXRlID0gY3VycmVudF9ieXRlc18gKiA4IC8gc3Rh
dGlzdGljX3RpbWVfbXM7Ci0gICAgaW50IGN1cnJlbnRfZnBzID0KLSAgICAgICAgKGN1cnJlbnRf
ZnJhbWVzXyAqIDEwMDAgKyBzdGF0aXN0aWNfdGltZV9tcyAvIDIpIC8gc3RhdGlzdGljX3RpbWVf
bXM7Ci0gICAgQUxPR0QgPDwgIkZyYW1lcyBkZWNvZGVkOiAiIDw8IGZyYW1lc19kZWNvZGVkXyA8
PAotICAgICAgICAiLiBSZWNlaXZlZDogIiA8PCAgZnJhbWVzX3JlY2VpdmVkXyA8PAotICAgICAg
ICAiLiBCaXRyYXRlOiAiIDw8IGN1cnJlbnRfYml0cmF0ZSA8PCAiIGticHMiIDw8Ci0gICAgICAg
ICIuIEZwczogIiA8PCBjdXJyZW50X2ZwcyA8PAotICAgICAgICAiLiBEZWNUaW1lOiAiIDw8IChj
dXJyZW50X2RlY29kaW5nX3RpbWVfbXNfIC8gY3VycmVudF9mcmFtZXNfKSA8PAotICAgICAgICAi
LiBEZWxheVRpbWU6ICIgPDwgKGN1cnJlbnRfZGVsYXlfdGltZV9tc18gLyBjdXJyZW50X2ZyYW1l
c18pIDw8Ci0gICAgICAgICIgZm9yIGxhc3QgIiA8PCBzdGF0aXN0aWNfdGltZV9tcyA8PCAiIG1z
LiI7Ci0gICAgc3RhcnRfdGltZV9tc18gPSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgICBjdXJyZW50
X2ZyYW1lc18gPSAwOwotICAgIGN1cnJlbnRfYnl0ZXNfID0gMDsKLSAgICBjdXJyZW50X2RlY29k
aW5nX3RpbWVfbXNfID0gMDsKLSAgICBjdXJyZW50X2RlbGF5X3RpbWVfbXNfID0gMDsKLSAgfQot
Ci0gIC8vIElmIHRoZSBmcmFtZSB3YXMgZHJvcHBlZCwgZnJhbWVfYnVmZmVyIGlzIGxlZnQgYXMg
bnVsbHB0ci4KLSAgaWYgKGZyYW1lX2J1ZmZlcikgewotICAgIFZpZGVvRnJhbWUgZGVjb2RlZF9m
cmFtZShmcmFtZV9idWZmZXIsIDAsIDAsIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCk7Ci0gICAg
ZGVjb2RlZF9mcmFtZS5zZXRfdGltZXN0YW1wKG91dHB1dF90aW1lc3RhbXBzX21zKTsKLSAgICBk
ZWNvZGVkX2ZyYW1lLnNldF9udHBfdGltZV9tcyhvdXRwdXRfbnRwX3RpbWVzdGFtcHNfbXMpOwot
Ci0gICAgY29uc3QgaW50MzJfdCBjYWxsYmFja19zdGF0dXMgPQotICAgICAgICBjYWxsYmFja18t
PkRlY29kZWQoZGVjb2RlZF9mcmFtZSwgZGVjb2RlX3RpbWVfbXMpOwotICAgIGlmIChjYWxsYmFj
a19zdGF0dXMgPiAwKSB7Ci0gICAgICBBTE9HRSA8PCAiY2FsbGJhY2sgZXJyb3IiOwotICAgIH0K
LSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVy
OjpSZWdpc3RlckRlY29kZUNvbXBsZXRlQ2FsbGJhY2soCi0gICAgRGVjb2RlZEltYWdlQ2FsbGJh
Y2sqIGNhbGxiYWNrKSB7Ci0gIGNhbGxiYWNrXyA9IGNhbGxiYWNrOwotICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX09LOwotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0RlY29kZXI6Ok9uTWVz
c2FnZShydGM6Ok1lc3NhZ2UqIG1zZykgewotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRU
aHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShq
bmkpOwotICBpZiAoIWluaXRlZF8pIHsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gV2Ugb25seSBl
dmVyIHNlbmQgb25lIG1lc3NhZ2UgdG8gfHRoaXN8IGRpcmVjdGx5IChub3QgdGhyb3VnaCBhIEJp
bmQoKSdkCi0gIC8vIGZ1bmN0b3IpLCBzbyBleHBlY3Qgbm8gSUQvZGF0YS4KLSAgUlRDX0NIRUNL
KCFtc2ctPm1lc3NhZ2VfaWQpIDw8ICJVbmV4cGVjdGVkIG1lc3NhZ2UhIjsKLSAgUlRDX0NIRUNL
KCFtc2ctPnBkYXRhKSA8PCAiVW5leHBlY3RlZCBtZXNzYWdlISI7Ci0gIENoZWNrT25Db2RlY1Ro
cmVhZCgpOwotCi0gIGlmICghRGVsaXZlclBlbmRpbmdPdXRwdXRzKGpuaSwgMCkpIHsKLSAgICBB
TE9HRSA8PCAiT25NZXNzYWdlOiBEZWxpdmVyUGVuZGluZ091dHB1dHMgZXJyb3IiOwotICAgIFBy
b2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgpOwotICAgIHJldHVybjsKLSAgfQotICBjb2RlY190
aHJlYWRfLT5Qb3N0RGVsYXllZChSVENfRlJPTV9IRVJFLCBrTWVkaWFDb2RlY1BvbGxNcywgdGhp
cyk7Ci19Ci0KLU1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5OjpNZWRpYUNvZGVjVmlkZW9E
ZWNvZGVyRmFjdG9yeSgpCi0gICAgOiBlZ2xfY29udGV4dF8obnVsbHB0cikgewotICBBTE9HRCA8
PCAiTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkgY3RvciI7Ci0gIEpOSUVudiogam5pID0g
QXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9j
YWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGpjbGFzcyBqX2RlY29kZXJfY2xhc3MgPSBGaW5kQ2xhc3Mo
am5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyIik7Ci0gIHN1cHBvcnRlZF9j
b2RlY190eXBlc18uY2xlYXIoKTsKLQotICBib29sIGlzX3ZwOF9od19zdXBwb3J0ZWQgPSBqbmkt
PkNhbGxTdGF0aWNCb29sZWFuTWV0aG9kKAotICAgICAgal9kZWNvZGVyX2NsYXNzLAotICAgICAg
R2V0U3RhdGljTWV0aG9kSUQoam5pLCBqX2RlY29kZXJfY2xhc3MsICJpc1ZwOEh3U3VwcG9ydGVk
IiwgIigpWiIpKTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBpc192cDhfaHdf
c3VwcG9ydGVkID0gZmFsc2U7Ci0gIH0KLSAgaWYgKGlzX3ZwOF9od19zdXBwb3J0ZWQpIHsKLSAg
ICBBTE9HRCA8PCAiVlA4IEhXIERlY29kZXIgc3VwcG9ydGVkLiI7Ci0gICAgc3VwcG9ydGVkX2Nv
ZGVjX3R5cGVzXy5wdXNoX2JhY2soa1ZpZGVvQ29kZWNWUDgpOwotICB9Ci0KLSAgYm9vbCBpc192
cDlfaHdfc3VwcG9ydGVkID0gam5pLT5DYWxsU3RhdGljQm9vbGVhbk1ldGhvZCgKLSAgICAgIGpf
ZGVjb2Rlcl9jbGFzcywKLSAgICAgIEdldFN0YXRpY01ldGhvZElEKGpuaSwgal9kZWNvZGVyX2Ns
YXNzLCAiaXNWcDlId1N1cHBvcnRlZCIsICIoKVoiKSk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihq
bmkpKSB7Ci0gICAgaXNfdnA5X2h3X3N1cHBvcnRlZCA9IGZhbHNlOwotICB9Ci0gIGlmIChpc192
cDlfaHdfc3VwcG9ydGVkKSB7Ci0gICAgQUxPR0QgPDwgIlZQOSBIVyBEZWNvZGVyIHN1cHBvcnRl
ZC4iOwotICAgIHN1cHBvcnRlZF9jb2RlY190eXBlc18ucHVzaF9iYWNrKGtWaWRlb0NvZGVjVlA5
KTsKLSAgfQotCi0gIGJvb2wgaXNfaDI2NF9od19zdXBwb3J0ZWQgPSBqbmktPkNhbGxTdGF0aWNC
b29sZWFuTWV0aG9kKAotICAgICAgal9kZWNvZGVyX2NsYXNzLAotICAgICAgR2V0U3RhdGljTWV0
aG9kSUQoam5pLCBqX2RlY29kZXJfY2xhc3MsICJpc0gyNjRId1N1cHBvcnRlZCIsICIoKVoiKSk7
Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgaXNfaDI2NF9od19zdXBwb3J0ZWQg
PSBmYWxzZTsKLSAgfQotICBpZiAoaXNfaDI2NF9od19zdXBwb3J0ZWQpIHsKLSAgICBBTE9HRCA8
PCAiSDI2NCBIVyBEZWNvZGVyIHN1cHBvcnRlZC4iOwotICAgIHN1cHBvcnRlZF9jb2RlY190eXBl
c18ucHVzaF9iYWNrKGtWaWRlb0NvZGVjSDI2NCk7Ci0gIH0KLX0KLQotTWVkaWFDb2RlY1ZpZGVv
RGVjb2RlckZhY3Rvcnk6On5NZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeSgpIHsKLSAgQUxP
R0QgPDwgIk1lZGlhQ29kZWNWaWRlb0RlY29kZXJGYWN0b3J5IGR0b3IiOwotICBpZiAoZWdsX2Nv
bnRleHRfKSB7Ci0gICAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQo
KTsKLSAgICBqbmktPkRlbGV0ZUdsb2JhbFJlZihlZ2xfY29udGV4dF8pOwotICB9Ci19Ci0KLXZv
aWQgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3Rvcnk6OlNldEVHTENvbnRleHQoCi0gICAgSk5J
RW52KiBqbmksIGpvYmplY3QgZWdsX2NvbnRleHQpIHsKLSAgQUxPR0QgPDwgIk1lZGlhQ29kZWNW
aWRlb0RlY29kZXJGYWN0b3J5OjpTZXRFR0xDb250ZXh0IjsKLSAgaWYgKGVnbF9jb250ZXh0Xykg
ewotICAgIGpuaS0+RGVsZXRlR2xvYmFsUmVmKGVnbF9jb250ZXh0Xyk7Ci0gICAgZWdsX2NvbnRl
eHRfID0gbnVsbHB0cjsKLSAgfQotICBlZ2xfY29udGV4dF8gPSBqbmktPk5ld0dsb2JhbFJlZihl
Z2xfY29udGV4dCk7Ci0gIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwg
ImVycm9yIGNhbGxpbmcgTmV3R2xvYmFsUmVmIGZvciBFR0wgQ29udGV4dC4iOwotICB9Ci19Ci0K
LXdlYnJ0Yzo6VmlkZW9EZWNvZGVyKiBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeTo6Q3Jl
YXRlVmlkZW9EZWNvZGVyKAotICAgIFZpZGVvQ29kZWNUeXBlIHR5cGUpIHsKLSAgaWYgKHN1cHBv
cnRlZF9jb2RlY190eXBlc18uZW1wdHkoKSkgewotICAgIEFMT0dXIDw8ICJObyBIVyB2aWRlbyBk
ZWNvZGVyIGZvciB0eXBlICIgPDwgKGludCl0eXBlOwotICAgIHJldHVybiBudWxscHRyOwotICB9
Ci0gIGZvciAoVmlkZW9Db2RlY1R5cGUgY29kZWNfdHlwZSA6IHN1cHBvcnRlZF9jb2RlY190eXBl
c18pIHsKLSAgICBpZiAoY29kZWNfdHlwZSA9PSB0eXBlKSB7Ci0gICAgICBBTE9HRCA8PCAiQ3Jl
YXRlIEhXIHZpZGVvIGRlY29kZXIgZm9yIHR5cGUgIiA8PCAoaW50KXR5cGU7Ci0gICAgICByZXR1
cm4gbmV3IE1lZGlhQ29kZWNWaWRlb0RlY29kZXIoQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVk
KCksIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdsX2Nv
bnRleHRfKTsKLSAgICB9Ci0gIH0KLSAgQUxPR1cgPDwgIkNhbiBub3QgZmluZCBIVyB2aWRlbyBk
ZWNvZGVyIGZvciB0eXBlICIgPDwgKGludCl0eXBlOwotICByZXR1cm4gbnVsbHB0cjsKLX0KLQot
dm9pZCBNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeTo6RGVzdHJveVZpZGVvRGVjb2RlcigK
LSAgICB3ZWJydGM6OlZpZGVvRGVjb2RlciogZGVjb2RlcikgewotICBBTE9HRCA8PCAiRGVzdHJv
eSB2aWRlbyBkZWNvZGVyLiI7Ci0gIGRlbGV0ZSBkZWNvZGVyOwotfQotCi1jb25zdCBjaGFyKiBN
ZWRpYUNvZGVjVmlkZW9EZWNvZGVyOjpJbXBsZW1lbnRhdGlvbk5hbWUoKSBjb25zdCB7Ci0gIHJl
dHVybiAiTWVkaWFDb2RlYyI7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
bmkvYW5kcm9pZG1lZGlhZGVjb2Rlcl9qbmkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlh
ZGVjb2Rlcl9qbmkuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWRlY29kZXJf
am5pLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaWZuZGVmIFdFQlJUQ19BUElfSkFWQV9KTklfQU5EUk9JRE1FRElBREVDT0RFUl9KTklfSF8K
LSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lETUVESUFERUNPREVSX0pOSV9IXwot
Ci0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9tZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9kZWNvZGVyZmFjdG9yeS5oIgotCi1u
YW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIEltcGxlbWVudGF0aW9uIG9mIEFuZHJvaWQgTWVk
aWFDb2RlYyBiYXNlZCBkZWNvZGVyIGZhY3RvcnkuCi1jbGFzcyBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyRmFjdG9yeQotICAgIDogcHVibGljIGNyaWNrZXQ6OldlYlJ0Y1ZpZGVvRGVjb2RlckZhY3Rv
cnkgewotIHB1YmxpYzoKLSAgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkoKTsKLSAgdmly
dHVhbCB+TWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkoKTsKLQotICB2b2lkIFNldEVHTENv
bnRleHQoSk5JRW52KiBqbmksIGpvYmplY3QgcmVuZGVyX2VnbF9jb250ZXh0KTsKLQotICAvLyBX
ZWJSdGNWaWRlb0RlY29kZXJGYWN0b3J5IGltcGxlbWVudGF0aW9uLgotICB3ZWJydGM6OlZpZGVv
RGVjb2RlciogQ3JlYXRlVmlkZW9EZWNvZGVyKHdlYnJ0Yzo6VmlkZW9Db2RlY1R5cGUgdHlwZSkK
LSAgICAgIG92ZXJyaWRlOwotCi0gIHZvaWQgRGVzdHJveVZpZGVvRGVjb2Rlcih3ZWJydGM6OlZp
ZGVvRGVjb2RlciogZGVjb2Rlcikgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICBqb2JqZWN0IGVn
bF9jb250ZXh0XzsKLSAgc3RkOjp2ZWN0b3I8d2VicnRjOjpWaWRlb0NvZGVjVHlwZT4gc3VwcG9y
dGVkX2NvZGVjX3R5cGVzXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCi0KLSNl
bmRpZiAgLy8gV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lETUVESUFERUNPREVSX0pOSV9IXwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWQvam5pL2FuZHJvaWRtZWRpYWVuY29kZXJfam5pLmNjCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lk
bWVkaWFlbmNvZGVyX2puaS5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZWRpYWVu
Y29kZXJfam5pLmNjCShub25leGlzdGVudCkKQEAgLTEsMTM3OSArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi0vLyBOT1RJQ0U6IGFuZHJvaWRtZWRpYWVuY29kZXJfam5pLmggbXVzdCBiZSBp
bmNsdWRlZCBiZWZvcmUKLS8vIGFuZHJvaWRtZWRpYWNvZGVjY29tbW9uLmggdG8gYXZvaWQgYnVp
bGQgZXJyb3JzLgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlh
ZW5jb2Rlcl9qbmkuaCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+
Ci0jaW5jbHVkZSA8bGlzdD4KLQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRl
L2xpYnl1di9jb252ZXJ0LmgiCi0jaW5jbHVkZSAidGhpcmRfcGFydHkvbGlieXV2L2luY2x1ZGUv
bGlieXV2L2NvbnZlcnRfZnJvbS5oIgotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNs
dWRlL2xpYnl1di92aWRlb19jb21tb24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQv
am5pL2FuZHJvaWRtZWRpYWNvZGVjY29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRy
b2lkL2puaS9jbGFzc3JlZmVyZW5jZWhvbGRlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5k
cm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYmlu
ZC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9i
YXNlL2xvZ2dpbmcuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aHJlYWQuaCIKLSNpbmNsdWRl
ICJ3ZWJydGMvYmFzZS90aHJlYWRfY2hlY2tlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3Rp
bWV1dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9jb21tb25fdHlwZXMuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvY29tbW9uX3ZpZGVvL2gyNjQvaDI2NF9iaXRzdHJlYW1fcGFyc2VyLmgiCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL2luY2x1ZGUvdmlkZW9fY29kZWNfaW50ZXJm
YWNlLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdmlkZW9fY29kaW5nL3V0aWxpdHkvcXVh
bGl0eV9zY2FsZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy92aWRlb19jb2RpbmcvdXRp
bGl0eS92cDhfaGVhZGVyX3BhcnNlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBl
cnMvaW5jbHVkZS9maWVsZF90cmlhbC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBl
cnMvaW5jbHVkZS9sb2djYXRfdHJhY2VfY29udGV4dC5oIgotCi11c2luZyBydGM6OkJpbmQ7Ci11
c2luZyBydGM6OlRocmVhZDsKLXVzaW5nIHJ0Yzo6VGhyZWFkTWFuYWdlcjsKLQotdXNpbmcgd2Vi
cnRjOjpDb2RlY1NwZWNpZmljSW5mbzsKLXVzaW5nIHdlYnJ0Yzo6RW5jb2RlZEltYWdlOwotdXNp
bmcgd2VicnRjOjpWaWRlb0ZyYW1lOwotdXNpbmcgd2VicnRjOjpSVFBGcmFnbWVudGF0aW9uSGVh
ZGVyOwotdXNpbmcgd2VicnRjOjpWaWRlb0NvZGVjOwotdXNpbmcgd2VicnRjOjpWaWRlb0NvZGVj
VHlwZTsKLXVzaW5nIHdlYnJ0Yzo6a1ZpZGVvQ29kZWNIMjY0OwotdXNpbmcgd2VicnRjOjprVmlk
ZW9Db2RlY1ZQODsKLXVzaW5nIHdlYnJ0Yzo6a1ZpZGVvQ29kZWNWUDk7Ci11c2luZyB3ZWJydGM6
OlF1YWxpdHlTY2FsZXI7Ci0KLW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotLy8gSC4yNjQgc3Rh
cnQgY29kZSBsZW5ndGguCi0jZGVmaW5lIEgyNjRfU0NfTEVOR1RIIDQKLS8vIE1heGltdW0gYWxs
b3dlZCBOQUxVcyBpbiBvbmUgb3V0cHV0IGZyYW1lLgotI2RlZmluZSBNQVhfTkFMVVNfUEVSRlJB
TUUgMzIKLS8vIE1heGltdW0gc3VwcG9ydGVkIEhXIHZpZGVvIGVuY29kZXIgZnBzLgotI2RlZmlu
ZSBNQVhfVklERU9fRlBTIDMwCi0vLyBNYXhpbXVtIGFsbG93ZWQgZnBzIHZhbHVlIGluIFNldFJh
dGVzKCkgY2FsbC4KLSNkZWZpbmUgTUFYX0FMTE9XRURfVklERU9fRlBTIDYwCi0vLyBNYXhpbXVt
IGFsbG93ZWQgZnJhbWVzIGluIGVuY29kZXIgaW5wdXQgcXVldWUuCi0jZGVmaW5lIE1BWF9FTkNP
REVSX1FfU0laRSAyCi0vLyBNYXhpbXVtIGFtb3VudCBvZiBkcm9wcGVkIGZyYW1lcyBjYXVzZWQg
YnkgZnVsbCBlbmNvZGVyIHF1ZXVlIC0gZXhjZWVkaW5nCi0vLyB0aGlzIHRocmVzaG9sZCBtZWFu
cyB0aGF0IGVuY29kZXIgcHJvYmFibHkgZ290IHN0dWNrIGFuZCBuZWVkIHRvIGJlIHJlc2V0Lgot
I2RlZmluZSBFTkNPREVSX1NUQUxMX0ZSQU1FRFJPUF9USFJFU0hPTEQgNjAKLQotLy8gTG9nZ2lu
ZyBtYWNyb3MuCi0jZGVmaW5lIFRBR19FTkNPREVSICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIgot
I2lmZGVmIFRSQUNLX0JVRkZFUl9USU1JTkcKLSNkZWZpbmUgQUxPR1YoLi4uKQotICBfX2FuZHJv
aWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1ZFUkJPU0UsIFRBR19FTkNPREVSLCBfX1ZBX0FSR1Nf
XykKLSNlbHNlCi0jZGVmaW5lIEFMT0dWKC4uLikKLSNlbmRpZgotI2RlZmluZSBBTE9HRCBMT0df
VEFHKHJ0Yzo6TFNfSU5GTywgVEFHX0VOQ09ERVIpCi0jZGVmaW5lIEFMT0dXIExPR19UQUcocnRj
OjpMU19XQVJOSU5HLCBUQUdfRU5DT0RFUikKLSNkZWZpbmUgQUxPR0UgTE9HX1RBRyhydGM6OkxT
X0VSUk9SLCBUQUdfRU5DT0RFUikKLQotbmFtZXNwYWNlIHsKLS8vIE1heGltdW0gdGltZSBsaW1p
dCBiZXR3ZWVuIGluY29taW5nIGZyYW1lcyBiZWZvcmUgcmVxdWVzdGluZyBhIGtleSBmcmFtZS4K
LWNvbnN0IHNpemVfdCBrRnJhbWVEaWZmVGhyZXNob2xkTXMgPSAzNTA7Ci1jb25zdCBpbnQga01p
bktleUZyYW1lSW50ZXJ2YWwgPSA2OwotfSAgLy8gbmFtZXNwYWNlCi0KLS8vIE1lZGlhQ29kZWNW
aWRlb0VuY29kZXIgaXMgYSB3ZWJydGM6OlZpZGVvRW5jb2RlciBpbXBsZW1lbnRhdGlvbiB0aGF0
IHVzZXMKLS8vIEFuZHJvaWQncyBNZWRpYUNvZGVjIFNESyBBUEkgYmVoaW5kIHRoZSBzY2VuZXMg
dG8gaW1wbGVtZW50IChob3BlZnVsbHkpCi0vLyBIVy1iYWNrZWQgdmlkZW8gZW5jb2RlLiAgVGhp
cyBDKysgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYXMgYSB2ZXJ5IHRoaW4gc2hpbSwKLS8vIGRlbGVn
YXRpbmcgYWxsIG9mIHRoZSBpbnRlcmVzdGluZyB3b3JrIHRvIG9yZy53ZWJydGMuTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2Rlci4KLS8vIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgaXMgY3JlYXRlZCwgb3Bl
cmF0ZWQsIGFuZCBkZXN0cm95ZWQgb24gYSBzaW5nbGUKLS8vIHRocmVhZCwgY3VycmVudGx5IHRo
ZSBsaWJqaW5nbGUgV29ya2VyIHRocmVhZC4KLWNsYXNzIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIg
OiBwdWJsaWMgd2VicnRjOjpWaWRlb0VuY29kZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIHJ0Yzo6TWVzc2FnZUhhbmRsZXIgewotIHB1YmxpYzoKLSAgdmlydHVhbCB+
TWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpOwotICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKEpOSUVu
diogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgIFZpZGVvQ29kZWNUeXBlIGNvZGVjVHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGVnbF9jb250ZXh0KTsKLQotICAv
LyB3ZWJydGM6OlZpZGVvRW5jb2RlciBpbXBsZW1lbnRhdGlvbi4gIEV2ZXJ5dGhpbmcgdHJhbXBv
bGluZXMgdG8KLSAgLy8gfGNvZGVjX3RocmVhZF98IGZvciBleGVjdXRpb24uCi0gIGludDMyX3Qg
SW5pdEVuY29kZShjb25zdCB3ZWJydGM6OlZpZGVvQ29kZWMqIGNvZGVjX3NldHRpbmdzLAotICAg
ICAgICAgICAgICAgICAgICAgaW50MzJfdCAvKiBudW1iZXJfb2ZfY29yZXMgKi8sCi0gICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgLyogbWF4X3BheWxvYWRfc2l6ZSAqLykgb3ZlcnJpZGU7Ci0g
IGludDMyX3QgRW5jb2RlKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgaW5wdXRfaW1hZ2UsCi0g
ICAgICAgICAgICAgICAgIGNvbnN0IHdlYnJ0Yzo6Q29kZWNTcGVjaWZpY0luZm8qIC8qIGNvZGVj
X3NwZWNpZmljX2luZm8gKi8sCi0gICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHdl
YnJ0Yzo6RnJhbWVUeXBlPiogZnJhbWVfdHlwZXMpIG92ZXJyaWRlOwotICBpbnQzMl90IFJlZ2lz
dGVyRW5jb2RlQ29tcGxldGVDYWxsYmFjaygKLSAgICAgIHdlYnJ0Yzo6RW5jb2RlZEltYWdlQ2Fs
bGJhY2sqIGNhbGxiYWNrKSBvdmVycmlkZTsKLSAgaW50MzJfdCBSZWxlYXNlKCkgb3ZlcnJpZGU7
Ci0gIGludDMyX3QgU2V0Q2hhbm5lbFBhcmFtZXRlcnModWludDMyX3QgLyogcGFja2V0X2xvc3Mg
Ki8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCAvKiBydHQgKi8pIG92
ZXJyaWRlOwotICBpbnQzMl90IFNldFJhdGVzKHVpbnQzMl90IG5ld19iaXRfcmF0ZSwgdWludDMy
X3QgZnJhbWVfcmF0ZSkgb3ZlcnJpZGU7Ci0KLSAgLy8gcnRjOjpNZXNzYWdlSGFuZGxlciBpbXBs
ZW1lbnRhdGlvbi4KLSAgdm9pZCBPbk1lc3NhZ2UocnRjOjpNZXNzYWdlKiBtc2cpIG92ZXJyaWRl
OwotCi0gIHZvaWQgT25Ecm9wcGVkRnJhbWUoKSBvdmVycmlkZTsKLQotICBib29sIFN1cHBvcnRz
TmF0aXZlSGFuZGxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZWdsX2NvbnRleHRfICE9IG51
bGxwdHI7IH0KLSAgY29uc3QgY2hhciogSW1wbGVtZW50YXRpb25OYW1lKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0KLSBwcml2YXRlOgotICAvLyBSZXNldENvZGVjT25Db2RlY1RocmVhZCgpIGNhbGxzIFJl
bGVhc2VPbkNvZGVjVGhyZWFkKCkgYW5kCi0gIC8vIEluaXRFbmNvZGVPbkNvZGVjVGhyZWFkKCkg
aW4gYW4gYXR0ZW1wdCB0byByZXN0b3JlIHRoZSBjb2RlYyB0byBhbgotICAvLyBvcGVyYWJsZSBz
dGF0ZS4gIE5lY2Vzc2FyeSBhZnRlciBhbGwgbWFubmVyIG9mIE9NWC1sYXllciBlcnJvcnMuCi0g
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29kZWMgd2FzIHJlc2V0IHN1Y2Nlc3NmdWxseS4KLSAg
Ym9vbCBSZXNldENvZGVjT25Db2RlY1RocmVhZCgpOwotCi0gIC8vIEZhbGxiYWNrIHRvIGEgc29m
dHdhcmUgZW5jb2RlciBpZiBvbmUgaXMgc3VwcG9ydGVkIGVsc2UgdHJ5IHRvIHJlc2V0IHRoZQot
ICAvLyBlbmNvZGVyLiBDYWxsZWQgd2l0aCB8cmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGV8
IGVxdWFsIHRvIGZhbHNlIGZyb20KLSAgLy8gaW5pdC9yZWxlYXNlIGVuY29kZXIgc28gdGhhdCB3
ZSBkb24ndCBnbyBpbnRvIGluZmluaXRlIHJlY3Vyc2lvbi4KLSAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBjb2RlYyB3YXMgcmVzZXQgc3VjY2Vzc2Z1bGx5LgotICBib29sIFByb2Nlc3NIV0Vycm9y
T25Db2RlY1RocmVhZChib29sIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlKTsKLQotICAv
LyBDYWxscyBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQodHJ1ZSkuIFJldHVybnMKLSAgLy8g
V0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFIGlmIHN3X2ZhbGxiYWNrX3JlcXVp
cmVkXyB3YXMgc2V0IG9yCi0gIC8vIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUiBvdGhlcndpc2Uu
Ci0gIGludDMyX3QgUHJvY2Vzc0hXRXJyb3JPbkVuY29kZU9uQ29kZWNUaHJlYWQoKTsKLQotICAv
LyBJbXBsZW1lbnRhdGlvbiBvZiB3ZWJydGM6OlZpZGVvRW5jb2RlciBtZXRob2RzIGFib3ZlLCBh
bGwgcnVubmluZyBvbiB0aGUKLSAgLy8gY29kZWMgdGhyZWFkIGV4Y2x1c2l2ZWx5LgotICAvLwot
ICAvLyBJZiB3aWR0aD09MCB0aGVuIHRoaXMgaXMgYXNzdW1lZCB0byBiZSBhIHJlLWluaXRpYWxp
emF0aW9uIGFuZCB0aGUKLSAgLy8gcHJldmlvdXNseS1jdXJyZW50IHZhbHVlcyBhcmUgcmV1c2Vk
IGluc3RlYWQgb2YgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzCi0gIC8vIChtYWtlcyBpdCBlYXNpZXIg
dG8gcmVhc29uIGFib3V0IHRocmVhZC1zYWZldHkpLgotICBpbnQzMl90IEluaXRFbmNvZGVPbkNv
ZGVjVGhyZWFkKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGticHMsIGludCBmcHMsCi0gICAg
ICBib29sIHVzZV9zdXJmYWNlKTsKLSAgLy8gUmVjb25maWd1cmUgdG8gbWF0Y2ggfGZyYW1lfCBp
biB3aWR0aCwgaGVpZ2h0LiBBbHNvIHJlY29uZmlndXJlcyB0aGUKLSAgLy8gZW5jb2RlciBpZiB8
ZnJhbWV8IGlzIGEgdGV4dHVyZS9ieXRlIGJ1ZmZlciBhbmQgdGhlIGVuY29kZXIgaXMgaW5pdGlh
bGl6ZWQKLSAgLy8gZm9yIGJ5dGUgYnVmZmVyL3RleHR1cmUuIFJldHVybnMgZmFsc2UgaWYgcmVj
b25maWd1cmluZyBmYWlscy4KLSAgYm9vbCBNYXliZVJlY29uZmlndXJlRW5jb2Rlck9uQ29kZWNU
aHJlYWQoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSk7Ci0gIGludDMyX3QgRW5jb2Rl
T25Db2RlY1RocmVhZCgKLSAgICAgIGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgaW5wdXRfaW1h
Z2UsCi0gICAgICBjb25zdCBzdGQ6OnZlY3Rvcjx3ZWJydGM6OkZyYW1lVHlwZT4qIGZyYW1lX3R5
cGVzLAotICAgICAgY29uc3QgaW50NjRfdCBmcmFtZV9pbnB1dF90aW1lX21zKTsKLSAgYm9vbCBF
bmNvZGVCeXRlQnVmZmVyT25Db2RlY1RocmVhZChKTklFbnYqIGpuaSwKLSAgICAgIGJvb2wga2V5
X2ZyYW1lLCBjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lLCBpbnQgaW5wdXRfYnVmZmVy
X2luZGV4KTsKLSAgYm9vbCBFbmNvZGVUZXh0dXJlT25Db2RlY1RocmVhZChKTklFbnYqIGpuaSwK
LSAgICAgIGJvb2wga2V5X2ZyYW1lLCBjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1lKTsK
LQotICBpbnQzMl90IFJlZ2lzdGVyRW5jb2RlQ29tcGxldGVDYWxsYmFja09uQ29kZWNUaHJlYWQo
Ci0gICAgICB3ZWJydGM6OkVuY29kZWRJbWFnZUNhbGxiYWNrKiBjYWxsYmFjayk7Ci0gIGludDMy
X3QgUmVsZWFzZU9uQ29kZWNUaHJlYWQoKTsKLSAgaW50MzJfdCBTZXRSYXRlc09uQ29kZWNUaHJl
YWQodWludDMyX3QgbmV3X2JpdF9yYXRlLCB1aW50MzJfdCBmcmFtZV9yYXRlKTsKLSAgdm9pZCBP
bkRyb3BwZWRGcmFtZU9uQ29kZWNUaHJlYWQoKTsKLQotICAvLyBIZWxwZXIgYWNjZXNzb3JzIGZv
ciBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyJE91dHB1dEJ1ZmZlckluZm8gbWVtYmVycy4KLSAgaW50
IEdldE91dHB1dEJ1ZmZlckluZm9JbmRleChKTklFbnYqIGpuaSwgam9iamVjdCBqX291dHB1dF9i
dWZmZXJfaW5mbyk7Ci0gIGpvYmplY3QgR2V0T3V0cHV0QnVmZmVySW5mb0J1ZmZlcihKTklFbnYq
IGpuaSwgam9iamVjdCBqX291dHB1dF9idWZmZXJfaW5mbyk7Ci0gIGJvb2wgR2V0T3V0cHV0QnVm
ZmVySW5mb0lzS2V5RnJhbWUoSk5JRW52KiBqbmksIGpvYmplY3Qgal9vdXRwdXRfYnVmZmVyX2lu
Zm8pOwotICBqbG9uZyBHZXRPdXRwdXRCdWZmZXJJbmZvUHJlc2VudGF0aW9uVGltZXN0YW1wVXMo
Ci0gICAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX291dHB1dF9idWZmZXJfaW5mbyk7Ci0KLSAg
Ly8gRGVsaXZlciBhbnkgb3V0cHV0cyBwZW5kaW5nIGluIHRoZSBNZWRpYUNvZGVjIHRvIG91ciB8
Y2FsbGJhY2tffCBhbmQgcmV0dXJuCi0gIC8vIHRydWUgb24gc3VjY2Vzcy4KLSAgYm9vbCBEZWxp
dmVyUGVuZGluZ091dHB1dHMoSk5JRW52KiBqbmkpOwotCi0gIC8vIFNlYXJjaCBmb3IgSC4yNjQg
c3RhcnQgY29kZXMuCi0gIGludDMyX3QgTmV4dE5hbHVQb3NpdGlvbih1aW50OF90ICpidWZmZXIs
IHNpemVfdCBidWZmZXJfc2l6ZSk7Ci0KLSAgLy8gRGlzcGxheXMgZW5jb2RlciBzdGF0aXN0aWNz
LgotICB2b2lkIExvZ1N0YXRpc3RpY3MoYm9vbCBmb3JjZV9sb2cpOwotCi0gIC8vIFR5cGUgb2Yg
dmlkZW8gY29kZWMuCi0gIFZpZGVvQ29kZWNUeXBlIGNvZGVjVHlwZV87Ci0KLSAgLy8gVmFsaWQg
YWxsIHRoZSB0aW1lIHNpbmNlIFJlZ2lzdGVyRW5jb2RlQ29tcGxldGVDYWxsYmFjaygpIEludm9r
ZSgpcyB0bwotICAvLyB8Y29kZWNfdGhyZWFkX3wgc3luY2hyb25vdXNseS4KLSAgd2VicnRjOjpF
bmNvZGVkSW1hZ2VDYWxsYmFjayogY2FsbGJhY2tfOwotCi0gIC8vIFN0YXRlIHRoYXQgaXMgY29u
c3RhbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGlzIG9iamVjdCBvbmNlIHRoZSBjdG9yCi0gIC8v
IHJldHVybnMuCi0gIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+Ci0gICAgICBjb2RlY190aHJlYWRf
OyAgLy8gVGhyZWFkIG9uIHdoaWNoIHRvIG9wZXJhdGUgTWVkaWFDb2RlYy4KLSAgcnRjOjpUaHJl
YWRDaGVja2VyIGNvZGVjX3RocmVhZF9jaGVja2VyXzsKLSAgU2NvcGVkR2xvYmFsUmVmPGpjbGFz
cz4gal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXzsKLSAgU2NvcGVkR2xvYmFsUmVm
PGpvYmplY3Q+IGpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl87Ci0gIGptZXRob2RJRCBqX2lu
aXRfZW5jb2RlX21ldGhvZF87Ci0gIGptZXRob2RJRCBqX2dldF9pbnB1dF9idWZmZXJzX21ldGhv
ZF87Ci0gIGptZXRob2RJRCBqX2RlcXVldWVfaW5wdXRfYnVmZmVyX21ldGhvZF87Ci0gIGptZXRo
b2RJRCBqX2VuY29kZV9idWZmZXJfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfZW5jb2RlX3RleHR1
cmVfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfcmVsZWFzZV9tZXRob2RfOwotICBqbWV0aG9kSUQg
al9zZXRfcmF0ZXNfbWV0aG9kXzsKLSAgam1ldGhvZElEIGpfZGVxdWV1ZV9vdXRwdXRfYnVmZmVy
X21ldGhvZF87Ci0gIGptZXRob2RJRCBqX3JlbGVhc2Vfb3V0cHV0X2J1ZmZlcl9tZXRob2RfOwot
ICBqZmllbGRJRCBqX2NvbG9yX2Zvcm1hdF9maWVsZF87Ci0gIGpmaWVsZElEIGpfaW5mb19pbmRl
eF9maWVsZF87Ci0gIGpmaWVsZElEIGpfaW5mb19idWZmZXJfZmllbGRfOwotICBqZmllbGRJRCBq
X2luZm9faXNfa2V5X2ZyYW1lX2ZpZWxkXzsKLSAgamZpZWxkSUQgal9pbmZvX3ByZXNlbnRhdGlv
bl90aW1lc3RhbXBfdXNfZmllbGRfOwotCi0gIC8vIFN0YXRlIHRoYXQgaXMgdmFsaWQgb25seSBi
ZXR3ZWVuIEluaXRFbmNvZGUoKSBhbmQgdGhlIG5leHQgUmVsZWFzZSgpLgotICAvLyBUb3VjaGVk
IG9ubHkgb24gY29kZWNfdGhyZWFkXyBzbyBubyBleHBsaWNpdCBzeW5jaHJvbml6YXRpb24gbmVj
ZXNzYXJ5LgotICBpbnQgd2lkdGhfOyAgIC8vIEZyYW1lIHdpZHRoIGluIHBpeGVscy4KLSAgaW50
IGhlaWdodF87ICAvLyBGcmFtZSBoZWlnaHQgaW4gcGl4ZWxzLgotICBib29sIGluaXRlZF87Ci0g
IGJvb2wgdXNlX3N1cmZhY2VfOwotICB1aW50MTZfdCBwaWN0dXJlX2lkXzsKLSAgZW51bSBsaWJ5
dXY6OkZvdXJDQyBlbmNvZGVyX2ZvdXJjY187ICAvLyBFbmNvZGVyIGNvbG9yIHNwYWNlIGZvcm1h
dC4KLSAgaW50IGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc187ICAvLyBMYXN0LXJlcXVlc3RlZCBiaXRy
YXRlIGluIGticHMuCi0gIGludCBsYXN0X3NldF9mcHNfOyAgLy8gTGFzdC1yZXF1ZXN0ZWQgZnJh
bWUgcmF0ZS4KLSAgaW50NjRfdCBjdXJyZW50X3RpbWVzdGFtcF91c187ICAvLyBDdXJyZW50IGZy
YW1lIHRpbWVzdGFtcHMgaW4gdXMuCi0gIGludCBmcmFtZXNfcmVjZWl2ZWRfOyAgLy8gTnVtYmVy
IG9mIGZyYW1lcyByZWNlaXZlZCBieSBlbmNvZGVyLgotICBpbnQgZnJhbWVzX2VuY29kZWRfOyAg
Ly8gTnVtYmVyIG9mIGZyYW1lcyBlbmNvZGVkIGJ5IGVuY29kZXIuCi0gIGludCBmcmFtZXNfZHJv
cHBlZF9tZWRpYV9lbmNvZGVyXzsgIC8vIE51bWJlciBvZiBmcmFtZXMgZHJvcHBlZCBieSBlbmNv
ZGVyLgotICAvLyBOdW1iZXIgb2YgZHJvcHBlZCBmcmFtZXMgY2F1c2VkIGJ5IGZ1bGwgcXVldWUu
Ci0gIGludCBjb25zZWN1dGl2ZV9mdWxsX3F1ZXVlX2ZyYW1lX2Ryb3BzXzsKLSAgaW50NjRfdCBz
dGF0X3N0YXJ0X3RpbWVfbXNfOyAgLy8gU3RhcnQgdGltZSBmb3Igc3RhdGlzdGljcy4KLSAgaW50
IGN1cnJlbnRfZnJhbWVzXzsgIC8vIE51bWJlciBvZiBmcmFtZXMgaW4gdGhlIGN1cnJlbnQgc3Rh
dGlzdGljcyBpbnRlcnZhbC4KLSAgaW50IGN1cnJlbnRfYnl0ZXNfOyAgLy8gRW5jb2RlZCBieXRl
cyBpbiB0aGUgY3VycmVudCBzdGF0aXN0aWNzIGludGVydmFsLgotICBpbnQgY3VycmVudF9hY2Nf
cXBfOyAvLyBBY2N1bXVsYXRlZCBRUCBpbiB0aGUgY3VycmVudCBzdGF0aXN0aWNzIGludGVydmFs
LgotICBpbnQgY3VycmVudF9lbmNvZGluZ190aW1lX21zXzsgIC8vIE92ZXJhbGwgZW5jb2Rpbmcg
dGltZSBpbiB0aGUgY3VycmVudCBzZWNvbmQKLSAgaW50NjRfdCBsYXN0X2lucHV0X3RpbWVzdGFt
cF9tc187ICAvLyBUaW1lc3RhbXAgb2YgbGFzdCByZWNlaXZlZCB5dXYgZnJhbWUuCi0gIGludDY0
X3QgbGFzdF9vdXRwdXRfdGltZXN0YW1wX21zXzsgIC8vIFRpbWVzdGFtcCBvZiBsYXN0IGVuY29k
ZWQgZnJhbWUuCi0KLSAgc3RydWN0IElucHV0RnJhbWVJbmZvIHsKLSAgICBJbnB1dEZyYW1lSW5m
byhpbnQ2NF90IGVuY29kZV9zdGFydF90aW1lLAotICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
ZnJhbWVfdGltZXN0YW1wLAotICAgICAgICAgICAgICAgICAgIGludDY0X3QgZnJhbWVfcmVuZGVy
X3RpbWVfbXMsCi0gICAgICAgICAgICAgICAgICAgd2VicnRjOjpWaWRlb1JvdGF0aW9uIHJvdGF0
aW9uKQotICAgICAgICA6IGVuY29kZV9zdGFydF90aW1lKGVuY29kZV9zdGFydF90aW1lKSwKLSAg
ICAgICAgICBmcmFtZV90aW1lc3RhbXAoZnJhbWVfdGltZXN0YW1wKSwKLSAgICAgICAgICBmcmFt
ZV9yZW5kZXJfdGltZV9tcyhmcmFtZV9yZW5kZXJfdGltZV9tcyksCi0gICAgICAgICAgcm90YXRp
b24ocm90YXRpb24pIHt9Ci0gICAgLy8gVGltZSB3aGVuIHZpZGVvIGZyYW1lIGlzIHNlbnQgdG8g
ZW5jb2RlciBpbnB1dC4KLSAgICBjb25zdCBpbnQ2NF90IGVuY29kZV9zdGFydF90aW1lOwotCi0g
ICAgLy8gSW5wdXQgZnJhbWUgaW5mb3JtYXRpb24uCi0gICAgY29uc3QgaW50MzJfdCBmcmFtZV90
aW1lc3RhbXA7Ci0gICAgY29uc3QgaW50NjRfdCBmcmFtZV9yZW5kZXJfdGltZV9tczsKLSAgICBj
b25zdCB3ZWJydGM6OlZpZGVvUm90YXRpb24gcm90YXRpb247Ci0gIH07Ci0gIHN0ZDo6bGlzdDxJ
bnB1dEZyYW1lSW5mbz4gaW5wdXRfZnJhbWVfaW5mb3NfOwotICBpbnQzMl90IG91dHB1dF90aW1l
c3RhbXBfOyAgICAgIC8vIExhc3Qgb3V0cHV0IGZyYW1lIHRpbWVzdGFtcCBmcm9tCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfGlucHV0X2ZyYW1lX2luZm9zX3wuCi0gIGlu
dDY0X3Qgb3V0cHV0X3JlbmRlcl90aW1lX21zXzsgLy8gTGFzdCBvdXRwdXQgZnJhbWUgcmVuZGVy
IHRpbWUgZnJvbQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHxpbnB1dF9m
cmFtZV9pbmZvc198LgotICB3ZWJydGM6OlZpZGVvUm90YXRpb24gb3V0cHV0X3JvdGF0aW9uXzsg
IC8vIExhc3Qgb3V0cHV0IGZyYW1lIHJvdGF0aW9uIGZyb20KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB8aW5wdXRfZnJhbWVfaW5mb3NffC4KLSAgLy8gRnJh
bWUgc2l6ZSBpbiBieXRlcyBmZWQgdG8gTWVkaWFDb2RlYy4KLSAgaW50IHl1dl9zaXplXzsKLSAg
Ly8gVHJ1ZSBvbmx5IHdoZW4gYmV0d2VlbiBhIGNhbGxiYWNrXy0+T25FbmNvZGVkSW1hZ2UoKSBj
YWxsIHJldHVybiBhIHBvc2l0aXZlCi0gIC8vIHZhbHVlIGFuZCB0aGUgbmV4dCBFbmNvZGUoKSBj
YWxsIGJlaW5nIGlnbm9yZWQuCi0gIGJvb2wgZHJvcF9uZXh0X2lucHV0X2ZyYW1lXzsKLSAgLy8g
R2xvYmFsIHJlZmVyZW5jZXM7IG11c3QgYmUgZGVsZXRlZCBpbiBSZWxlYXNlKCkuCi0gIHN0ZDo6
dmVjdG9yPGpvYmplY3Q+IGlucHV0X2J1ZmZlcnNfOwotICBRdWFsaXR5U2NhbGVyIHF1YWxpdHlf
c2NhbGVyXzsKLSAgLy8gRHluYW1pYyByZXNvbHV0aW9uIGNoYW5nZSwgb2ZmIGJ5IGRlZmF1bHQu
Ci0gIGJvb2wgc2NhbGVfOwotCi0gIC8vIEgyNjQgYml0c3RyZWFtIHBhcnNlciwgdXNlZCB0byBl
eHRyYWN0IFFQIGZyb20gZW5jb2RlZCBiaXRzdHJlYW1zLgotICB3ZWJydGM6OkgyNjRCaXRzdHJl
YW1QYXJzZXIgaDI2NF9iaXRzdHJlYW1fcGFyc2VyXzsKLQotICAvLyBWUDkgdmFyaWFibGVzIHRv
IHBvcHVsYXRlIGNvZGVjIHNwZWNpZmljIHN0cnVjdHVyZS4KLSAgd2VicnRjOjpHb2ZJbmZvVlA5
IGdvZl87IC8vIENvbnRhaW5zIGVhY2ggZnJhbWUncyB0ZW1wb3JhbCBpbmZvcm1hdGlvbiBmb3IK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5vbi1mbGV4aWJsZSBWUDkgbW9kZS4KLSAg
dWludDhfdCB0bDBfcGljX2lkeF87Ci0gIHNpemVfdCBnb2ZfaWR4XzsKLQotICAvLyBFR0wgY29u
dGV4dCAtIG93bmVkIGJ5IGZhY3RvcnksIHNob3VsZCBub3QgYmUgYWxsb2NhdGVkL2Rlc3Ryb3ll
ZAotICAvLyBieSBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLgotICBqb2JqZWN0IGVnbF9jb250ZXh0
XzsKLQotICAvLyBUZW1wb3JhcnkgZml4IGZvciBWUDguCi0gIC8vIFNlbmRzIGEga2V5IGZyYW1l
IGlmIGZyYW1lcyBhcmUgbGFyZ2VseSBzcGFjZWQgYXBhcnQgKHBvc3NpYmx5Ci0gIC8vIGNvcnJl
c3BvbmRpbmcgdG8gYSBsYXJnZSBpbWFnZSBjaGFuZ2UpLgotICBpbnQ2NF90IGxhc3RfZnJhbWVf
cmVjZWl2ZWRfbXNfOwotICBpbnQgZnJhbWVzX3JlY2VpdmVkX3NpbmNlX2xhc3Rfa2V5XzsKLSAg
d2VicnRjOjpWaWRlb0NvZGVjTW9kZSBjb2RlY19tb2RlXzsKLQotICBib29sIHN3X2ZhbGxiYWNr
X3JlcXVpcmVkXzsKLX07Ci0KLU1lZGlhQ29kZWNWaWRlb0VuY29kZXI6On5NZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyKCkgewotICAvLyBDYWxsIFJlbGVhc2UoKSB0byBlbnN1cmUgbm8gbW9yZSBjYWxs
YmFja3MgdG8gdXMgYWZ0ZXIgd2UgYXJlIGRlbGV0ZWQuCi0gIFJlbGVhc2UoKTsKLX0KLQotTWVk
aWFDb2RlY1ZpZGVvRW5jb2Rlcjo6TWVkaWFDb2RlY1ZpZGVvRW5jb2RlcihKTklFbnYqIGpuaSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9Db2Rl
Y1R5cGUgY29kZWNUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqb2JqZWN0IGVnbF9jb250ZXh0KQotICAgIDogY29kZWNUeXBlXyhjb2RlY1R5cGUp
LAotICAgICAgY2FsbGJhY2tfKE5VTEwpLAotICAgICAgY29kZWNfdGhyZWFkXyhuZXcgVGhyZWFk
KCkpLAotICAgICAgal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXygKLSAgICAgICAg
ICBqbmksCi0gICAgICAgICAgRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1Zp
ZGVvRW5jb2RlciIpKSwKLSAgICAgIGpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8oCi0gICAg
ICAgICAgam5pLAotICAgICAgICAgIGpuaS0+TmV3T2JqZWN0KCpqX21lZGlhX2NvZGVjX3ZpZGVv
X2VuY29kZXJfY2xhc3NfLAotICAgICAgICAgICAgICAgICAgICAgICAgIEdldE1ldGhvZElEKGpu
aSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqal9tZWRpYV9jb2RlY192
aWRlb19lbmNvZGVyX2NsYXNzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiPGluaXQ+IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKClWIikp
KSwKLSAgICAgIGluaXRlZF8oZmFsc2UpLAotICAgICAgdXNlX3N1cmZhY2VfKGZhbHNlKSwKLSAg
ICAgIHBpY3R1cmVfaWRfKDApLAotICAgICAgZWdsX2NvbnRleHRfKGVnbF9jb250ZXh0KSwKLSAg
ICAgIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyhmYWxzZSkgewotICBTY29wZWRMb2NhbFJlZkZyYW1l
IGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIGF2b2lkIHNw
aW5uaW5nIHVwIGEgbmV3IHRocmVhZCBwZXIgTWVkaWFDb2RlYywgYW5kCi0gIC8vIGluc3RlYWQg
cmUtdXNlIGUuZy4gdGhlIFBlZXJDb25uZWN0aW9uRmFjdG9yeSdzIHx3b3JrZXJfdGhyZWFkX3ws
IGJ1dCBidWcKLSAgLy8gMjczMiBtZWFucyB0aGF0IGRlYWRsb2NrcyBhYm91bmQuICBUaGlzIGNs
YXNzIHN5bmNocm9ub3VzbHkgdHJhbXBvbGluZXMKLSAgLy8gdG8gfGNvZGVjX3RocmVhZF98LCBz
byBpZiBhbnl0aGluZyBlbHNlIGNhbiBiZSBjb21pbmcgdG8gX3VzXyBmcm9tCi0gIC8vIHxjb2Rl
Y190aHJlYWRffCwgb3IgZnJvbSBhbnkgdGhyZWFkIGhvbGRpbmcgdGhlIHxfc2VuZENyaXRTZWN0
fCBkZXNjcmliZWQKLSAgLy8gaW4gdGhlIGJ1Zywgd2UgaGF2ZSBhIHByb2JsZW0uICBGb3Igbm93
IHdvcmsgYXJvdW5kIHRoYXQgd2l0aCBhIGRlZGljYXRlZAotICAvLyB0aHJlYWQuCi0gIGNvZGVj
X3RocmVhZF8tPlNldE5hbWUoIk1lZGlhQ29kZWNWaWRlb0VuY29kZXIiLCBOVUxMKTsKLSAgUlRD
X0NIRUNLKGNvZGVjX3RocmVhZF8tPlN0YXJ0KCkpIDw8ICJGYWlsZWQgdG8gc3RhcnQgTWVkaWFD
b2RlY1ZpZGVvRW5jb2RlciI7Ci0gIGNvZGVjX3RocmVhZF9jaGVja2VyXy5EZXRhY2hGcm9tVGhy
ZWFkKCk7Ci0gIGpjbGFzcyBqX291dHB1dF9idWZmZXJfaW5mb19jbGFzcyA9Ci0gICAgICBGaW5k
Q2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyJE91dHB1dEJ1ZmZl
ckluZm8iKTsKLSAgal9pbml0X2VuY29kZV9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAgICBq
bmksCi0gICAgICAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywKLSAgICAgICJp
bml0RW5jb2RlIiwKLSAgICAgICIoTG9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciRW
aWRlb0NvZGVjVHlwZTsiCi0gICAgICAiSUlJSUxvcmcvd2VicnRjL0VnbEJhc2UxNCRDb250ZXh0
OylaIik7Ci0gIGpfZ2V0X2lucHV0X2J1ZmZlcnNfbWV0aG9kXyA9IEdldE1ldGhvZElEKAotICAg
ICAgam5pLAotICAgICAgKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl9jbGFzc18sCi0gICAg
ICAiZ2V0SW5wdXRCdWZmZXJzIiwKLSAgICAgICIoKVtMamF2YS9uaW8vQnl0ZUJ1ZmZlcjsiKTsK
LSAgal9kZXF1ZXVlX2lucHV0X2J1ZmZlcl9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAgICBq
bmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLCAiZGVxdWV1ZUlucHV0QnVm
ZmVyIiwgIigpSSIpOwotICBqX2VuY29kZV9idWZmZXJfbWV0aG9kXyA9IEdldE1ldGhvZElEKAot
ICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywgImVuY29kZUJ1
ZmZlciIsICIoWklJSilaIik7Ci0gIGpfZW5jb2RlX3RleHR1cmVfbWV0aG9kXyA9IEdldE1ldGhv
ZElEKAotICAgICAgICBqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLCAi
ZW5jb2RlVGV4dHVyZSIsCi0gICAgICAgICIoWklbRkopWiIpOwotICBqX3JlbGVhc2VfbWV0aG9k
XyA9Ci0gICAgICBHZXRNZXRob2RJRChqbmksICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJf
Y2xhc3NfLCAicmVsZWFzZSIsICIoKVYiKTsKLSAgal9zZXRfcmF0ZXNfbWV0aG9kXyA9IEdldE1l
dGhvZElEKAotICAgICAgam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywg
InNldFJhdGVzIiwgIihJSSlaIik7Ci0gIGpfZGVxdWV1ZV9vdXRwdXRfYnVmZmVyX21ldGhvZF8g
PSBHZXRNZXRob2RJRCgKLSAgICAgIGpuaSwKLSAgICAgICpqX21lZGlhX2NvZGVjX3ZpZGVvX2Vu
Y29kZXJfY2xhc3NfLAotICAgICAgImRlcXVldWVPdXRwdXRCdWZmZXIiLAotICAgICAgIigpTG9y
Zy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciRPdXRwdXRCdWZmZXJJbmZvOyIpOwotICBq
X3JlbGVhc2Vfb3V0cHV0X2J1ZmZlcl9tZXRob2RfID0gR2V0TWV0aG9kSUQoCi0gICAgICBqbmks
ICpqX21lZGlhX2NvZGVjX3ZpZGVvX2VuY29kZXJfY2xhc3NfLCAicmVsZWFzZU91dHB1dEJ1ZmZl
ciIsICIoSSlaIik7Ci0KLSAgal9jb2xvcl9mb3JtYXRfZmllbGRfID0KLSAgICAgIEdldEZpZWxk
SUQoam5pLCAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyX2NsYXNzXywgImNvbG9yRm9ybWF0
IiwgIkkiKTsKLSAgal9pbmZvX2luZGV4X2ZpZWxkXyA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwg
al9vdXRwdXRfYnVmZmVyX2luZm9fY2xhc3MsICJpbmRleCIsICJJIik7Ci0gIGpfaW5mb19idWZm
ZXJfZmllbGRfID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm9f
Y2xhc3MsICJidWZmZXIiLCAiTGphdmEvbmlvL0J5dGVCdWZmZXI7Iik7Ci0gIGpfaW5mb19pc19r
ZXlfZnJhbWVfZmllbGRfID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX291dHB1dF9idWZmZXJf
aW5mb19jbGFzcywgImlzS2V5RnJhbWUiLCAiWiIpOwotICBqX2luZm9fcHJlc2VudGF0aW9uX3Rp
bWVzdGFtcF91c19maWVsZF8gPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX291dHB1dF9idWZm
ZXJfaW5mb19jbGFzcywgInByZXNlbnRhdGlvblRpbWVzdGFtcFVzIiwgIkoiKTsKLSAgaWYgKENo
ZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HVyA8PCAiTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
ciBjdG9yIGZhaWxlZC4iOwotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCh0cnVlIC8q
IHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgfQotICBzcmFuZCh0aW1lKE5V
TEwpKTsKLSAgQWxsb3dCbG9ja2luZ0NhbGxzKCk7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1Zp
ZGVvRW5jb2Rlcjo6SW5pdEVuY29kZSgKLSAgICBjb25zdCB3ZWJydGM6OlZpZGVvQ29kZWMqIGNv
ZGVjX3NldHRpbmdzLAotICAgIGludDMyX3QgLyogbnVtYmVyX29mX2NvcmVzICovLAotICAgIHNp
emVfdCAvKiBtYXhfcGF5bG9hZF9zaXplICovKSB7Ci0gIGlmIChjb2RlY19zZXR0aW5ncyA9PSBO
VUxMKSB7Ci0gICAgQUxPR0UgPDwgIk5VTEwgVmlkZW9Db2RlYyBpbnN0YW5jZSI7Ci0gICAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJfUEFSQU1FVEVSOwotICB9Ci0gIC8vIEZhY3Rvcnkg
c2hvdWxkIGd1YXJkIGFnYWluc3Qgb3RoZXIgY29kZWNzIGJlaW5nIHVzZWQgd2l0aCB1cy4KLSAg
UlRDX0NIRUNLKGNvZGVjX3NldHRpbmdzLT5jb2RlY1R5cGUgPT0gY29kZWNUeXBlXykKLSAgICAg
IDw8ICJVbnN1cHBvcnRlZCBjb2RlYyAiIDw8IGNvZGVjX3NldHRpbmdzLT5jb2RlY1R5cGUgPDwg
IiBmb3IgIgotICAgICAgPDwgY29kZWNUeXBlXzsKLSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVk
XykgewotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0gIH0KLSAgY29kZWNfbW9k
ZV8gPSBjb2RlY19zZXR0aW5ncy0+bW9kZTsKLSAgaW50IGluaXRfd2lkdGggPSBjb2RlY19zZXR0
aW5ncy0+d2lkdGg7Ci0gIGludCBpbml0X2hlaWdodCA9IGNvZGVjX3NldHRpbmdzLT5oZWlnaHQ7
Ci0gIC8vIFNjYWxpbmcgaXMgZGlzYWJsZWQgZm9yIFZQOSwgYnV0IG9wdGlvbmFsbHkgZW5hYmxl
ZCBmb3IgVlA4LgotICAvLyBUT0RPKHBib3MpOiBFeHRyYWN0IGF1dG9tYXRpY1Jlc2l6ZU9uIG91
dCBvZiBWUDggc2V0dGluZ3MuCi0gIHNjYWxlXyA9IGZhbHNlOwotICBpZiAoY29kZWNUeXBlXyA9
PSBrVmlkZW9Db2RlY1ZQOCkgewotICAgIHNjYWxlXyA9IGNvZGVjX3NldHRpbmdzLT5jb2RlY1Nw
ZWNpZmljLlZQOC5hdXRvbWF0aWNSZXNpemVPbjsKLSAgfSBlbHNlIGlmIChjb2RlY1R5cGVfICE9
IGtWaWRlb0NvZGVjVlA5KSB7Ci0gICAgc2NhbGVfID0gdHJ1ZTsKLSAgfQotCi0gIEFMT0dEIDw8
ICJJbml0RW5jb2RlIHJlcXVlc3Q6ICIgPDwgaW5pdF93aWR0aCA8PCAiIHggIiA8PCBpbml0X2hl
aWdodDsKLSAgQUxPR0QgPDwgIkVuY29kZXIgYXV0b21hdGljIHJlc2l6ZSAiIDw8IChzY2FsZV8g
PyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKLQotICBpZiAoc2NhbGVfKSB7Ci0gICAgaWYgKGNv
ZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNWUDggfHwgY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY0gy
NjQpIHsKLSAgICAgIHF1YWxpdHlfc2NhbGVyXy5Jbml0KGNvZGVjVHlwZV8sIGNvZGVjX3NldHRp
bmdzLT5zdGFydEJpdHJhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY19zZXR0
aW5ncy0+d2lkdGgsIGNvZGVjX3NldHRpbmdzLT5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb2RlY19zZXR0aW5ncy0+bWF4RnJhbWVyYXRlKTsKLSAgICB9IGVsc2UgewotICAg
ICAgLy8gV2hlbiBhZGRpbmcgY29kZWMgc3VwcG9ydCB0byBhZGRpdGlvbmFsIGhhcmR3YXJlIGNv
ZGVjcywgYWxzbyBjb25maWd1cmUKLSAgICAgIC8vIHRoZWlyIFFQIHRocmVzaG9sZHMgZm9yIHNj
YWxpbmcuCi0gICAgICBSVENfTk9UUkVBQ0hFRCgpIDw8ICJVbnN1cHBvcnRlZCBjb2RlYyB3aXRo
b3V0IGNvbmZpZ3VyZWQgUVAgdGhyZXNob2xkcy4iOwotICAgICAgc2NhbGVfID0gZmFsc2U7Ci0g
ICAgfQotICAgIFF1YWxpdHlTY2FsZXI6OlJlc29sdXRpb24gcmVzID0gcXVhbGl0eV9zY2FsZXJf
LkdldFNjYWxlZFJlc29sdXRpb24oKTsKLSAgICBpbml0X3dpZHRoID0gcmVzLndpZHRoOwotICAg
IGluaXRfaGVpZ2h0ID0gcmVzLmhlaWdodDsKLSAgICBBTE9HRCA8PCAiU2NhbGVkIHJlc29sdXRp
b246ICIgPDwgaW5pdF93aWR0aCA8PCAiIHggIiA8PCBpbml0X2hlaWdodDsKLSAgfQotCi0gIHJl
dHVybiBjb2RlY190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0gICAgICBSVENfRlJPTV9IRVJF
LAotICAgICAgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6SW5pdEVuY29kZU9uQ29kZWNU
aHJlYWQsIHRoaXMsIGluaXRfd2lkdGgsCi0gICAgICAgICAgIGluaXRfaGVpZ2h0LCBjb2RlY19z
ZXR0aW5ncy0+c3RhcnRCaXRyYXRlLAotICAgICAgICAgICBjb2RlY19zZXR0aW5ncy0+bWF4RnJh
bWVyYXRlLAotICAgICAgICAgICBjb2RlY19zZXR0aW5ncy0+ZXhwZWN0X2VuY29kZV9mcm9tX3Rl
eHR1cmUpKTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpFbmNvZGUoCi0g
ICAgY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSwKLSAgICBjb25zdCB3ZWJydGM6OkNv
ZGVjU3BlY2lmaWNJbmZvKiAvKiBjb2RlY19zcGVjaWZpY19pbmZvICovLAotICAgIGNvbnN0IHN0
ZDo6dmVjdG9yPHdlYnJ0Yzo6RnJhbWVUeXBlPiogZnJhbWVfdHlwZXMpIHsKLSAgcmV0dXJuIGNv
ZGVjX3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAgIFJUQ19GUk9NX0hFUkUsIEJpbmQo
Jk1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkVuY29kZU9uQ29kZWNUaHJlYWQsIHRoaXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLCBmcmFtZV90eXBlcywgcnRjOjpUaW1lTWlsbGlz
KCkpKTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpSZWdpc3RlckVuY29k
ZUNvbXBsZXRlQ2FsbGJhY2soCi0gICAgd2VicnRjOjpFbmNvZGVkSW1hZ2VDYWxsYmFjayogY2Fs
bGJhY2spIHsKLSAgcmV0dXJuIGNvZGVjX3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAg
IFJUQ19GUk9NX0hFUkUsCi0gICAgICBCaW5kKCZNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpSZWdp
c3RlckVuY29kZUNvbXBsZXRlQ2FsbGJhY2tPbkNvZGVjVGhyZWFkLAotICAgICAgICAgICB0aGlz
LCBjYWxsYmFjaykpOwotfQotCi1pbnQzMl90IE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlJlbGVh
c2UoKSB7Ci0gIEFMT0dEIDw8ICJFbmNvZGVyUmVsZWFzZSByZXF1ZXN0IjsKLSAgcmV0dXJuIGNv
ZGVjX3RocmVhZF8tPkludm9rZTxpbnQzMl90PigKLSAgICAgIFJUQ19GUk9NX0hFUkUsIEJpbmQo
Jk1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlJlbGVhc2VPbkNvZGVjVGhyZWFkLCB0aGlzKSk7Ci19
Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6U2V0Q2hhbm5lbFBhcmFtZXRlcnMo
dWludDMyX3QgLyogcGFja2V0X2xvc3MgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgLyogcnR0ICovKSB7Ci0gIHJldHVybiBX
RUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
cjo6U2V0UmF0ZXModWludDMyX3QgbmV3X2JpdF9yYXRlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmcmFtZV9yYXRlKSB7Ci0gIHJldHVybiBjb2Rl
Y190aHJlYWRfLT5JbnZva2U8aW50MzJfdD4oCi0gICAgICBSVENfRlJPTV9IRVJFLCBCaW5kKCZN
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpTZXRSYXRlc09uQ29kZWNUaHJlYWQsIHRoaXMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld19iaXRfcmF0ZSwgZnJhbWVfcmF0ZSkpOwotfQotCi12
b2lkIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6Ok9uTWVzc2FnZShydGM6Ok1lc3NhZ2UqIG1zZykg
ewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFk
KCkpOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBT
Y29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotCi0gIC8vIFdlIG9ubHkg
ZXZlciBzZW5kIG9uZSBtZXNzYWdlIHRvIHx0aGlzfCBkaXJlY3RseSAobm90IHRocm91Z2ggYSBC
aW5kKCknZAotICAvLyBmdW5jdG9yKSwgc28gZXhwZWN0IG5vIElEL2RhdGEuCi0gIFJUQ19DSEVD
SyghbXNnLT5tZXNzYWdlX2lkKSA8PCAiVW5leHBlY3RlZCBtZXNzYWdlISI7Ci0gIFJUQ19DSEVD
SyghbXNnLT5wZGF0YSkgPDwgIlVuZXhwZWN0ZWQgbWVzc2FnZSEiOwotICBpZiAoIWluaXRlZF8p
IHsKLSAgICByZXR1cm47Ci0gIH0KLQotICAvLyBJdCB3b3VsZCBiZSBuaWNlIHRvIHJlY292ZXIg
ZnJvbSBhIGZhaWx1cmUgaGVyZSBpZiBvbmUgaGFwcGVuZWQsIGJ1dCBpdCdzCi0gIC8vIHVuY2xl
YXIgaG93IHRvIHNpZ25hbCBzdWNoIGEgZmFpbHVyZSB0byB0aGUgYXBwLCBzbyBpbnN0ZWFkIHdl
IHN0YXkgc2lsZW50Ci0gIC8vIGFib3V0IGl0IGFuZCBsZXQgdGhlIG5leHQgYXBwLWNhbGxlZCBB
UEkgbWV0aG9kIHJldmVhbCB0aGUgYm9ya2VkbmVzcy4KLSAgRGVsaXZlclBlbmRpbmdPdXRwdXRz
KGpuaSk7Ci0KLSAgLy8gSWYgdGhlcmUgYXJlbid0IG1vcmUgZnJhbWVzIHRvIGRlbGl2ZXIsIHdl
IGNhbiBzdGFydCBwb2xsaW5nIGF0IGxvd2VyIHJhdGUuCi0gIGlmIChpbnB1dF9mcmFtZV9pbmZv
c18uZW1wdHkoKSkgewotICAgIGNvZGVjX3RocmVhZF8tPlBvc3REZWxheWVkKFJUQ19GUk9NX0hF
UkUsIGtNZWRpYUNvZGVjUG9sbE5vRnJhbWVzTXMsIHRoaXMpOwotICB9IGVsc2UgewotICAgIGNv
ZGVjX3RocmVhZF8tPlBvc3REZWxheWVkKFJUQ19GUk9NX0hFUkUsIGtNZWRpYUNvZGVjUG9sbE1z
LCB0aGlzKTsKLSAgfQotCi0gIC8vIENhbGwgbG9nIHN0YXRpc3RpY3MgaGVyZSBzbyBpdCdzIGNh
bGxlZCBldmVuIGlmIG5vIGZyYW1lcyBhcmUgYmVpbmcKLSAgLy8gZGVsaXZlcmVkLgotICBMb2dT
dGF0aXN0aWNzKGZhbHNlKTsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpSZXNl
dENvZGVjT25Db2RlY1RocmVhZCgpIHsKLSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tl
cl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgQUxPR0UgPDwgIlJlc2V0T25Db2RlY1RocmVh
ZCI7Ci0gIGlmIChSZWxlYXNlT25Db2RlY1RocmVhZCgpICE9IFdFQlJUQ19WSURFT19DT0RFQ19P
SykgewotICAgIEFMT0dFIDw8ICJSZWxlYXNpbmcgY29kZWMgZmFpbGVkIGR1cmluZyByZXNldC4i
OwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotICBpZiAoSW5pdEVuY29kZU9uQ29kZWNUaHJlYWQo
d2lkdGhfLCBoZWlnaHRfLCAwLCAwLCBmYWxzZSkgIT0KLSAgICAgIFdFQlJUQ19WSURFT19DT0RF
Q19PSykgewotICAgIEFMT0dFIDw8ICJJbml0aWFsaXppbmcgZW5jb2RlciBmYWlsZWQgZHVyaW5n
IHJlc2V0LiI7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi1i
b29sIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OlByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZCgK
LSAgICBib29sIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlKSB7Ci0gIEFMT0dFIDw8ICJQ
cm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQiOwotICBpZiAoVmlkZW9FbmNvZGVyOjpJc1N1cHBv
cnRlZFNvZnR3YXJlKAotICAgICAgICAgIFZpZGVvRW5jb2Rlcjo6Q29kZWNUb0VuY29kZXJUeXBl
KGNvZGVjVHlwZV8pKSkgewotICAgIEFMT0dFIDw8ICJGYWxsYmFjayB0byBTVyBlbmNvZGVyLiI7
Ci0gICAgc3dfZmFsbGJhY2tfcmVxdWlyZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0gZWxzZSBpZiAocmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUpIHsKLSAgICBBTE9HRSA8
PCAiUmVzZXQgZW5jb2Rlci4iOwotICAgIHJldHVybiBSZXNldENvZGVjT25Db2RlY1RocmVhZCgp
OwotICB9Ci0gIHJldHVybiBmYWxzZTsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyOjpQcm9jZXNzSFdFcnJvck9uRW5jb2RlT25Db2RlY1RocmVhZCgpIHsKLSAgUHJvY2Vzc0hX
RXJyb3JPbkNvZGVjVGhyZWFkKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUg
Ki8pOwotICByZXR1cm4gc3dfZmFsbGJhY2tfcmVxdWlyZWRfID8gV0VCUlRDX1ZJREVPX0NPREVD
X0ZBTExCQUNLX1NPRlRXQVJFCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBXRUJS
VENfVklERU9fQ09ERUNfRVJST1I7Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
cjo6SW5pdEVuY29kZU9uQ29kZWNUaHJlYWQoCi0gICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQga2JwcywgaW50IGZwcywgYm9vbCB1c2Vfc3VyZmFjZSkgewotICBSVENfRENIRUNLKGNvZGVj
X3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoc3dfZmFsbGJh
Y2tfcmVxdWlyZWRfKSB7Ci0gICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLSAgfQot
ICBSVENfQ0hFQ0soIXVzZV9zdXJmYWNlIHx8IGVnbF9jb250ZXh0XyAhPSBudWxscHRyKSA8PCAi
RUdMIGNvbnRleHQgbm90IHNldC4iOwotICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJl
YWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkp
OwotCi0gIEFMT0dEIDw8ICJJbml0RW5jb2RlT25Db2RlY1RocmVhZCBUeXBlOiAiIDw8ICAoaW50
KWNvZGVjVHlwZV8gPDwgIiwgIiA8PAotICAgICAgd2lkdGggPDwgIiB4ICIgPDwgaGVpZ2h0IDw8
ICIuIEJpdHJhdGU6ICIgPDwga2JwcyA8PAotICAgICAgIiBrYnBzLiBGcHM6ICIgPDwgZnBzOwot
ICBpZiAoa2JwcyA9PSAwKSB7Ci0gICAga2JwcyA9IGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc187Ci0g
IH0KLSAgaWYgKGZwcyA9PSAwKSB7Ci0gICAgZnBzID0gTUFYX1ZJREVPX0ZQUzsKLSAgfQotCi0g
IHdpZHRoXyA9IHdpZHRoOwotICBoZWlnaHRfID0gaGVpZ2h0OwotICBsYXN0X3NldF9iaXRyYXRl
X2ticHNfID0ga2JwczsKLSAgbGFzdF9zZXRfZnBzXyA9IChmcHMgPCBNQVhfVklERU9fRlBTKSA/
IGZwcyA6IE1BWF9WSURFT19GUFM7Ci0gIHl1dl9zaXplXyA9IHdpZHRoXyAqIGhlaWdodF8gKiAz
IC8gMjsKLSAgZnJhbWVzX3JlY2VpdmVkXyA9IDA7Ci0gIGZyYW1lc19lbmNvZGVkXyA9IDA7Ci0g
IGZyYW1lc19kcm9wcGVkX21lZGlhX2VuY29kZXJfID0gMDsKLSAgY29uc2VjdXRpdmVfZnVsbF9x
dWV1ZV9mcmFtZV9kcm9wc18gPSAwOwotICBjdXJyZW50X3RpbWVzdGFtcF91c18gPSAwOwotICBz
dGF0X3N0YXJ0X3RpbWVfbXNfID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gIGN1cnJlbnRfZnJhbWVz
XyA9IDA7Ci0gIGN1cnJlbnRfYnl0ZXNfID0gMDsKLSAgY3VycmVudF9hY2NfcXBfID0gMDsKLSAg
Y3VycmVudF9lbmNvZGluZ190aW1lX21zXyA9IDA7Ci0gIGxhc3RfaW5wdXRfdGltZXN0YW1wX21z
XyA9IC0xOwotICBsYXN0X291dHB1dF90aW1lc3RhbXBfbXNfID0gLTE7Ci0gIG91dHB1dF90aW1l
c3RhbXBfID0gMDsKLSAgb3V0cHV0X3JlbmRlcl90aW1lX21zXyA9IDA7Ci0gIGlucHV0X2ZyYW1l
X2luZm9zXy5jbGVhcigpOwotICBkcm9wX25leHRfaW5wdXRfZnJhbWVfID0gZmFsc2U7Ci0gIHVz
ZV9zdXJmYWNlXyA9IHVzZV9zdXJmYWNlOwotICBwaWN0dXJlX2lkXyA9IHN0YXRpY19jYXN0PHVp
bnQxNl90PihyYW5kKCkpICYgMHg3RkZGOwotICBnb2ZfLlNldEdvZkluZm9WUDkod2VicnRjOjpU
ZW1wb3JhbFN0cnVjdHVyZU1vZGU6OmtUZW1wb3JhbFN0cnVjdHVyZU1vZGUxKTsKLSAgdGwwX3Bp
Y19pZHhfID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocmFuZCgpKTsKLSAgZ29mX2lkeF8gPSAwOwot
ICBsYXN0X2ZyYW1lX3JlY2VpdmVkX21zXyA9IC0xOwotICBmcmFtZXNfcmVjZWl2ZWRfc2luY2Vf
bGFzdF9rZXlfID0ga01pbktleUZyYW1lSW50ZXJ2YWw7Ci0KLSAgLy8gV2UgZW5mb3JjZSBubyBl
eHRyYSBzdHJpZGUvcGFkZGluZyBpbiB0aGUgZm9ybWF0IGNyZWF0aW9uIHN0ZXAuCi0gIGpvYmpl
Y3Qgal92aWRlb19jb2RlY19lbnVtID0gSmF2YUVudW1Gcm9tSW5kZXhBbmRDbGFzc05hbWUoCi0g
ICAgICBqbmksICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyJFZpZGVvQ29kZWNUeXBlIiwgY29kZWNU
eXBlXyk7Ci0gIGNvbnN0IGJvb2wgZW5jb2RlX3N0YXR1cyA9IGpuaS0+Q2FsbEJvb2xlYW5NZXRo
b2QoCi0gICAgICAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXywgal9pbml0X2VuY29kZV9t
ZXRob2RfLAotICAgICAgal92aWRlb19jb2RlY19lbnVtLCB3aWR0aCwgaGVpZ2h0LCBrYnBzLCBm
cHMsCi0gICAgICAodXNlX3N1cmZhY2UgPyBlZ2xfY29udGV4dF8gOiBudWxscHRyKSk7Ci0gIGlm
ICghZW5jb2RlX3N0YXR1cykgewotICAgIEFMT0dFIDw8ICJGYWlsZWQgdG8gY29uZmlndXJlIGVu
Y29kZXIuIjsKLSAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoZmFsc2UgLyogcmVzZXRf
aWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09E
RUNfRVJST1I7Ci0gIH0KLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8
PCAiRXhjZXB0aW9uIGluIGluaXQgZW5jb2RlLiI7Ci0gICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVj
VGhyZWFkKGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAgICBy
ZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0KLSAgaWYgKCF1c2Vfc3VyZmFj
ZSkgewotICAgIGpvYmplY3RBcnJheSBpbnB1dF9idWZmZXJzID0gcmVpbnRlcnByZXRfY2FzdDxq
b2JqZWN0QXJyYXk+KAotICAgICAgICBqbmktPkNhbGxPYmplY3RNZXRob2QoKmpfbWVkaWFfY29k
ZWNfdmlkZW9fZW5jb2Rlcl8sCi0gICAgICAgICAgICBqX2dldF9pbnB1dF9idWZmZXJzX21ldGhv
ZF8pKTsKLSAgICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgICAgQUxPR0UgPDwgIkV4
Y2VwdGlvbiBpbiBnZXQgaW5wdXQgYnVmZmVycy4iOwotICAgICAgUHJvY2Vzc0hXRXJyb3JPbkNv
ZGVjVGhyZWFkKGZhbHNlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAg
ICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgfQotCi0gICAgaWYgKElz
TnVsbChqbmksIGlucHV0X2J1ZmZlcnMpKSB7Ci0gICAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNU
aHJlYWQoZmFsc2UgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgICAg
cmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKEdl
dEludEZpZWxkKGpuaSwgKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sCi0gICAgICAgIGpf
Y29sb3JfZm9ybWF0X2ZpZWxkXykpIHsKLSAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwUGxh
bmFyOgotICAgICAgICBlbmNvZGVyX2ZvdXJjY18gPSBsaWJ5dXY6OkZPVVJDQ19ZVTEyOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgQ09MT1JfRm9ybWF0WVVWNDIwU2VtaVBsYW5hcjoKLSAg
ICAgIGNhc2UgQ09MT1JfUUNPTV9Gb3JtYXRZVVY0MjBTZW1pUGxhbmFyOgotICAgICAgY2FzZSBD
T0xPUl9RQ09NX0ZPUk1BVFlVVjQyMFBhY2tlZFNlbWlQbGFuYXIzMm06Ci0gICAgICAgIGVuY29k
ZXJfZm91cmNjXyA9IGxpYnl1djo6Rk9VUkNDX05WMTI7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgTE9HKExTX0VSUk9SKSA8PCAiV3JvbmcgY29sb3IgZm9ybWF0LiI7
Ci0gICAgICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZChmYWxzZSAvKiByZXNldF9pZl9m
YWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09E
RUNfRVJST1I7Ci0gICAgfQotICAgIHNpemVfdCBudW1faW5wdXRfYnVmZmVycyA9IGpuaS0+R2V0
QXJyYXlMZW5ndGgoaW5wdXRfYnVmZmVycyk7Ci0gICAgUlRDX0NIRUNLKGlucHV0X2J1ZmZlcnNf
LmVtcHR5KCkpCi0gICAgICAgIDw8ICJVbmV4cGVjdGVkIGRvdWJsZSBJbml0RW5jb2RlIHdpdGhv
dXQgUmVsZWFzZSI7Ci0gICAgaW5wdXRfYnVmZmVyc18ucmVzaXplKG51bV9pbnB1dF9idWZmZXJz
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9pbnB1dF9idWZmZXJzOyArK2kpIHsK
LSAgICAgIGlucHV0X2J1ZmZlcnNfW2ldID0KLSAgICAgICAgICBqbmktPk5ld0dsb2JhbFJlZihq
bmktPkdldE9iamVjdEFycmF5RWxlbWVudChpbnB1dF9idWZmZXJzLCBpKSk7Ci0gICAgICBpbnQ2
NF90IHl1dl9idWZmZXJfY2FwYWNpdHkgPQotICAgICAgICAgIGpuaS0+R2V0RGlyZWN0QnVmZmVy
Q2FwYWNpdHkoaW5wdXRfYnVmZmVyc19baV0pOwotICAgICAgaWYgKENoZWNrRXhjZXB0aW9uKGpu
aSkpIHsKLSAgICAgICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBnZXQgZGlyZWN0IGJ1ZmZlciBj
YXBhY2l0eS4iOwotICAgICAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQoZmFsc2UgLyog
cmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgICAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX0VSUk9SOwotICAgICAgfQotICAgICAgUlRDX0NIRUNLKHl1dl9idWZmZXJf
Y2FwYWNpdHkgPj0geXV2X3NpemVfKSA8PCAiSW5zdWZmaWNpZW50IGNhcGFjaXR5IjsKLSAgICB9
Ci0gIH0KLQotICBpbml0ZWRfID0gdHJ1ZTsKLSAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19P
SzsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpFbmNvZGVPbkNvZGVjVGhy
ZWFkKAotICAgIGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSYgZnJhbWUsCi0gICAgY29uc3Qgc3Rk
Ojp2ZWN0b3I8d2VicnRjOjpGcmFtZVR5cGU+KiBmcmFtZV90eXBlcywKLSAgICBjb25zdCBpbnQ2
NF90IGZyYW1lX2lucHV0X3RpbWVfbXMpIHsKLSAgUlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hl
Y2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKHN3X2ZhbGxiYWNrX3JlcXVpcmVk
XykKLSAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX0ZBTExCQUNLX1NPRlRXQVJFOwotICBK
TklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRMb2Nh
bFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotCi0gIGlmICghaW5pdGVkXykgewotICAg
IHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfVU5JTklUSUFMSVpFRDsKLSAgfQotCi0gIGJvb2wg
c2VuZF9rZXlfZnJhbWUgPSBmYWxzZTsKLSAgaWYgKGNvZGVjX21vZGVfID09IHdlYnJ0Yzo6a1Jl
YWx0aW1lVmlkZW8pIHsKLSAgICArK2ZyYW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0X2tleV87Ci0g
ICAgaW50NjRfdCBub3dfbXMgPSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgICBpZiAobGFzdF9mcmFt
ZV9yZWNlaXZlZF9tc18gIT0gLTEgJiYKLSAgICAgICAgKG5vd19tcyAtIGxhc3RfZnJhbWVfcmVj
ZWl2ZWRfbXNfKSA+IGtGcmFtZURpZmZUaHJlc2hvbGRNcykgewotICAgICAgLy8gQWRkIGxpbWl0
IHRvIHByZXZlbnQgdHJpZ2dlcmluZyBhIGtleSBmb3IgZXZlcnkgZnJhbWUgZm9yIHZlcnkgbG93
Ci0gICAgICAvLyBmcmFtZXJhdGVzIChlLmcuIGlmIGZyYW1lIGRpZmYgPiBrRnJhbWVEaWZmVGhy
ZXNob2xkTXMpLgotICAgICAgaWYgKGZyYW1lc19yZWNlaXZlZF9zaW5jZV9sYXN0X2tleV8gPiBr
TWluS2V5RnJhbWVJbnRlcnZhbCkgewotICAgICAgICBBTE9HRCA8PCAiU2VuZCBrZXksIGZyYW1l
IGRpZmY6ICIgPDwgKG5vd19tcyAtIGxhc3RfZnJhbWVfcmVjZWl2ZWRfbXNfKTsKLSAgICAgICAg
c2VuZF9rZXlfZnJhbWUgPSB0cnVlOwotICAgICAgfQotICAgICAgZnJhbWVzX3JlY2VpdmVkX3Np
bmNlX2xhc3Rfa2V5XyA9IDA7Ci0gICAgfQotICAgIGxhc3RfZnJhbWVfcmVjZWl2ZWRfbXNfID0g
bm93X21zOwotICB9Ci0KLSAgZnJhbWVzX3JlY2VpdmVkXysrOwotICBpZiAoIURlbGl2ZXJQZW5k
aW5nT3V0cHV0cyhqbmkpKSB7Ci0gICAgaWYgKCFQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQo
Ci0gICAgICAgICAgICB0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKSkg
ewotICAgICAgcmV0dXJuIHN3X2ZhbGxiYWNrX3JlcXVpcmVkXyA/IFdFQlJUQ19WSURFT19DT0RF
Q19GQUxMQkFDS19TT0ZUV0FSRQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6
IFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgICB9Ci0gIH0KLSAgaWYgKGZyYW1lc19lbmNv
ZGVkXyA8IGtNYXhFbmNvZGVkTG9nRnJhbWVzKSB7Ci0gICAgQUxPR0QgPDwgIkVuY29kZXIgZnJh
bWUgaW4gIyAiIDw8IChmcmFtZXNfcmVjZWl2ZWRfIC0gMSkKLSAgICAgICAgICA8PCAiLiBUUzog
IiA8PCAoaW50KShjdXJyZW50X3RpbWVzdGFtcF91c18gLyAxMDAwKQotICAgICAgICAgIDw8ICIu
IFE6ICIgPDwgaW5wdXRfZnJhbWVfaW5mb3NfLnNpemUoKSA8PCAiLiBGcHM6ICIgPDwgbGFzdF9z
ZXRfZnBzXwotICAgICAgICAgIDw8ICIuIEticHM6ICIgPDwgbGFzdF9zZXRfYml0cmF0ZV9rYnBz
XzsKLSAgfQotCi0gIGlmIChkcm9wX25leHRfaW5wdXRfZnJhbWVfKSB7Ci0gICAgQUxPR1cgPDwg
IkVuY29kZXIgZHJvcCBmcmFtZSAtIGZhaWxlZCBjYWxsYmFjay4iOwotICAgIGRyb3BfbmV4dF9p
bnB1dF9mcmFtZV8gPSBmYWxzZTsKLSAgICBjdXJyZW50X3RpbWVzdGFtcF91c18gKz0gcnRjOjpr
TnVtTWljcm9zZWNzUGVyU2VjIC8gbGFzdF9zZXRfZnBzXzsKLSAgICBmcmFtZXNfZHJvcHBlZF9t
ZWRpYV9lbmNvZGVyXysrOwotICAgIE9uRHJvcHBlZEZyYW1lT25Db2RlY1RocmVhZCgpOwotICAg
IHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0gIH0KLQotICBSVENfQ0hFQ0soZnJhbWVf
dHlwZXMtPnNpemUoKSA9PSAxKSA8PCAiVW5leHBlY3RlZCBzdHJlYW0gY291bnQiOwotCi0gIC8v
IENoZWNrIGlmIHdlIGFjY3VtdWxhdGVkIHRvbyBtYW55IGZyYW1lcyBpbiBlbmNvZGVyIGlucHV0
IGJ1ZmZlcnMgYW5kIGRyb3AKLSAgLy8gZnJhbWUgaWYgc28uCi0gIGlmIChpbnB1dF9mcmFtZV9p
bmZvc18uc2l6ZSgpID4gTUFYX0VOQ09ERVJfUV9TSVpFKSB7Ci0gICAgQUxPR0QgPDwgIkFscmVh
ZHkgIiA8PCBpbnB1dF9mcmFtZV9pbmZvc18uc2l6ZSgpCi0gICAgICAgICAgPDwgIiBmcmFtZXMg
aW4gdGhlIHF1ZXVlLCBkcm9wcGluZyIKLSAgICAgICAgICA8PCAiLiBUUzogIiA8PCAoaW50KShj
dXJyZW50X3RpbWVzdGFtcF91c18gLyAxMDAwKQotICAgICAgICAgIDw8ICIuIEZwczogIiA8PCBs
YXN0X3NldF9mcHNfCi0gICAgICAgICAgPDwgIi4gQ29uc2VjdXRpdmUgZHJvcHM6ICIgPDwgY29u
c2VjdXRpdmVfZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc187Ci0gICAgY3VycmVudF90aW1lc3RhbXBf
dXNfICs9IHJ0Yzo6a051bU1pY3Jvc2Vjc1BlclNlYyAvIGxhc3Rfc2V0X2Zwc187Ci0gICAgY29u
c2VjdXRpdmVfZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc18rKzsKLSAgICBpZiAoY29uc2VjdXRpdmVf
ZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc18gPj0KLSAgICAgICAgRU5DT0RFUl9TVEFMTF9GUkFNRURS
T1BfVEhSRVNIT0xEKSB7Ci0gICAgICBBTE9HRSA8PCAiRW5jb2RlciBnb3Qgc3R1Y2suIjsKLSAg
ICAgIHJldHVybiBQcm9jZXNzSFdFcnJvck9uRW5jb2RlT25Db2RlY1RocmVhZCgpOwotICAgIH0K
LSAgICBmcmFtZXNfZHJvcHBlZF9tZWRpYV9lbmNvZGVyXysrOwotICAgIE9uRHJvcHBlZEZyYW1l
T25Db2RlY1RocmVhZCgpOwotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0gIH0K
LSAgY29uc2VjdXRpdmVfZnVsbF9xdWV1ZV9mcmFtZV9kcm9wc18gPSAwOwotCi0gIHJ0Yzo6c2Nv
cGVkX3JlZnB0cjx3ZWJydGM6OlZpZGVvRnJhbWVCdWZmZXI+IGlucHV0X2J1ZmZlcigKLSAgICAg
IGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpKTsKLSAgaWYgKHNjYWxlXykgewotICAgIC8vIENo
ZWNrIGZyYW1lcmF0ZSBiZWZvcmUgc3BhdGlhbCByZXNvbHV0aW9uIGNoYW5nZS4KLSAgICBxdWFs
aXR5X3NjYWxlcl8uT25FbmNvZGVGcmFtZShmcmFtZS53aWR0aCgpLCBmcmFtZS5oZWlnaHQoKSk7
Ci0gICAgY29uc3Qgd2VicnRjOjpRdWFsaXR5U2NhbGVyOjpSZXNvbHV0aW9uIHNjYWxlZF9yZXNv
bHV0aW9uID0KLSAgICAgICAgcXVhbGl0eV9zY2FsZXJfLkdldFNjYWxlZFJlc29sdXRpb24oKTsK
LSAgICBpZiAoc2NhbGVkX3Jlc29sdXRpb24ud2lkdGggIT0gZnJhbWUud2lkdGgoKSB8fAotICAg
ICAgICBzY2FsZWRfcmVzb2x1dGlvbi5oZWlnaHQgIT0gZnJhbWUuaGVpZ2h0KCkpIHsKLSAgICAg
IGlmIChpbnB1dF9idWZmZXItPm5hdGl2ZV9oYW5kbGUoKSAhPSBudWxscHRyKSB7Ci0gICAgICAg
IGlucHV0X2J1ZmZlciA9IHN0YXRpY19jYXN0PEFuZHJvaWRUZXh0dXJlQnVmZmVyKj4oaW5wdXRf
YnVmZmVyLmdldCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT5Dcm9wU2NhbGVBbmRS
b3RhdGUoZnJhbWUud2lkdGgoKSwgZnJhbWUuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGVkX3Jlc29sdXRpb24ud2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FsZWRfcmVzb2x1
dGlvbi5oZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3ZWJydGM6OmtWaWRlb1JvdGF0aW9uXzApOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
aW5wdXRfYnVmZmVyID0gcXVhbGl0eV9zY2FsZXJfLkdldFNjYWxlZEJ1ZmZlcihpbnB1dF9idWZm
ZXIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIFZpZGVvRnJhbWUgaW5wdXRfZnJhbWUoaW5w
dXRfYnVmZmVyLCBmcmFtZS50aW1lc3RhbXAoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBm
cmFtZS5yZW5kZXJfdGltZV9tcygpLCBmcmFtZS5yb3RhdGlvbigpKTsKLQotICBpZiAoIU1heWJl
UmVjb25maWd1cmVFbmNvZGVyT25Db2RlY1RocmVhZChpbnB1dF9mcmFtZSkpIHsKLSAgICBBTE9H
RSA8PCAiRmFpbGVkIHRvIHJlY29uZmlndXJlIGVuY29kZXIuIjsKLSAgICByZXR1cm4gV0VCUlRD
X1ZJREVPX0NPREVDX0VSUk9SOwotICB9Ci0KLSAgY29uc3QgYm9vbCBrZXlfZnJhbWUgPQotICAg
ICAgZnJhbWVfdHlwZXMtPmZyb250KCkgIT0gd2VicnRjOjprVmlkZW9GcmFtZURlbHRhIHx8IHNl
bmRfa2V5X2ZyYW1lOwotICBib29sIGVuY29kZV9zdGF0dXMgPSB0cnVlOwotICBpZiAoIWlucHV0
X2ZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5uYXRpdmVfaGFuZGxlKCkpIHsKLSAgICBpbnQg
al9pbnB1dF9idWZmZXJfaW5kZXggPSBqbmktPkNhbGxJbnRNZXRob2QoKmpfbWVkaWFfY29kZWNf
dmlkZW9fZW5jb2Rlcl8sCi0gICAgICAgIGpfZGVxdWV1ZV9pbnB1dF9idWZmZXJfbWV0aG9kXyk7
Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICAgIEFMT0dFIDw8ICJFeGNlcHRp
b24gaW4gZGVxdWV1IGlucHV0IGJ1ZmZlci4iOwotICAgICAgcmV0dXJuIFByb2Nlc3NIV0Vycm9y
T25FbmNvZGVPbkNvZGVjVGhyZWFkKCk7Ci0gICAgfQotICAgIGlmIChqX2lucHV0X2J1ZmZlcl9p
bmRleCA9PSAtMSkgewotICAgICAgLy8gVmlkZW8gY29kZWMgZmFsbHMgYmVoaW5kIC0gbm8gaW5w
dXQgYnVmZmVyIGF2YWlsYWJsZS4KLSAgICAgIEFMT0dXIDw8ICJFbmNvZGVyIGRyb3AgZnJhbWUg
LSBubyBpbnB1dCBidWZmZXJzIGF2YWlsYWJsZSI7Ci0gICAgICBpZiAoZnJhbWVzX3JlY2VpdmVk
XyA+IDEpIHsKLSAgICAgICAgY3VycmVudF90aW1lc3RhbXBfdXNfICs9IHJ0Yzo6a051bU1pY3Jv
c2Vjc1BlclNlYyAvIGxhc3Rfc2V0X2Zwc187Ci0gICAgICAgIGZyYW1lc19kcm9wcGVkX21lZGlh
X2VuY29kZXJfKys7Ci0gICAgICAgIE9uRHJvcHBlZEZyYW1lT25Db2RlY1RocmVhZCgpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gSW5wdXQgYnVmZmVycyBhcmUgbm90IHJlYWR5IGFmdGVy
IGNvZGVjIGluaXRpYWxpemF0aW9uLCBIVyBpcyBzdGlsbAotICAgICAgICAvLyBhbGxvY2F0aW5n
IHRobWUgLSB0aGlzIGlzIGV4cGVjdGVkIGFuZCBzaG91bGQgbm90IHJlc3VsdCBpbiBkcm9wCi0g
ICAgICAgIC8vIGZyYW1lIHJlcG9ydC4KLSAgICAgICAgZnJhbWVzX3JlY2VpdmVkXyA9IDA7Ci0g
ICAgICB9Ci0gICAgICByZXR1cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOyAgLy8gVE9ETyhmaXNj
aG1hbik6IHNlZSB3ZWJydGMgYnVnIDI4ODcuCi0gICAgfSBlbHNlIGlmIChqX2lucHV0X2J1ZmZl
cl9pbmRleCA9PSAtMikgewotICAgICAgcmV0dXJuIFByb2Nlc3NIV0Vycm9yT25FbmNvZGVPbkNv
ZGVjVGhyZWFkKCk7Ci0gICAgfQotICAgIGVuY29kZV9zdGF0dXMgPSBFbmNvZGVCeXRlQnVmZmVy
T25Db2RlY1RocmVhZChqbmksIGtleV9mcmFtZSwgaW5wdXRfZnJhbWUsCi0gICAgICAgIGpfaW5w
dXRfYnVmZmVyX2luZGV4KTsKLSAgfSBlbHNlIHsKLSAgICBlbmNvZGVfc3RhdHVzID0gRW5jb2Rl
VGV4dHVyZU9uQ29kZWNUaHJlYWQoam5pLCBrZXlfZnJhbWUsIGlucHV0X2ZyYW1lKTsKLSAgfQot
Ci0gIGlmICghZW5jb2RlX3N0YXR1cykgewotICAgIEFMT0dFIDw8ICJGYWlsZWQgZW5jb2RlIGZy
YW1lIHdpdGggdGltZXN0YW1wOiAiIDw8IGlucHV0X2ZyYW1lLnRpbWVzdGFtcCgpOwotICAgIHJl
dHVybiBQcm9jZXNzSFdFcnJvck9uRW5jb2RlT25Db2RlY1RocmVhZCgpOwotICB9Ci0KLSAgLy8g
U2F2ZSBpbnB1dCBpbWFnZSB0aW1lc3RhbXBzIGZvciBsYXRlciBvdXRwdXQuCi0gIGlucHV0X2Zy
YW1lX2luZm9zXy5lbXBsYWNlX2JhY2soCi0gICAgICBmcmFtZV9pbnB1dF90aW1lX21zLCBpbnB1
dF9mcmFtZS50aW1lc3RhbXAoKSwKLSAgICAgIGlucHV0X2ZyYW1lLnJlbmRlcl90aW1lX21zKCks
IGlucHV0X2ZyYW1lLnJvdGF0aW9uKCkpOwotCi0gIGxhc3RfaW5wdXRfdGltZXN0YW1wX21zXyA9
Ci0gICAgICBjdXJyZW50X3RpbWVzdGFtcF91c18gLyBydGM6OmtOdW1NaWNyb3NlY3NQZXJNaWxs
aXNlYzsKLQotICBjdXJyZW50X3RpbWVzdGFtcF91c18gKz0gcnRjOjprTnVtTWljcm9zZWNzUGVy
U2VjIC8gbGFzdF9zZXRfZnBzXzsKLQotICBjb2RlY190aHJlYWRfLT5DbGVhcih0aGlzKTsKLSAg
Y29kZWNfdGhyZWFkXy0+UG9zdERlbGF5ZWQoUlRDX0ZST01fSEVSRSwga01lZGlhQ29kZWNQb2xs
TXMsIHRoaXMpOwotCi0gIGlmICghRGVsaXZlclBlbmRpbmdPdXRwdXRzKGpuaSkpIHsKLSAgICBy
ZXR1cm4gUHJvY2Vzc0hXRXJyb3JPbkVuY29kZU9uQ29kZWNUaHJlYWQoKTsKLSAgfQotICByZXR1
cm4gV0VCUlRDX1ZJREVPX0NPREVDX09LOwotfQotCi1ib29sIE1lZGlhQ29kZWNWaWRlb0VuY29k
ZXI6Ok1heWJlUmVjb25maWd1cmVFbmNvZGVyT25Db2RlY1RocmVhZCgKLSAgICBjb25zdCB3ZWJy
dGM6OlZpZGVvRnJhbWUmIGZyYW1lKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFkX2NoZWNr
ZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0KLSAgY29uc3QgYm9vbCBpc190ZXh0dXJlX2Zy
YW1lID0KLSAgICAgIGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5uYXRpdmVfaGFuZGxlKCkg
IT0gbnVsbHB0cjsKLSAgY29uc3QgYm9vbCByZWNvbmZpZ3VyZV9kdWVfdG9fZm9ybWF0ID0gaXNf
dGV4dHVyZV9mcmFtZSAhPSB1c2Vfc3VyZmFjZV87Ci0gIGNvbnN0IGJvb2wgcmVjb25maWd1cmVf
ZHVlX3RvX3NpemUgPQotICAgICAgZnJhbWUud2lkdGgoKSAhPSB3aWR0aF8gfHwgZnJhbWUuaGVp
Z2h0KCkgIT0gaGVpZ2h0XzsKLQotICBpZiAocmVjb25maWd1cmVfZHVlX3RvX2Zvcm1hdCkgewot
ICAgICAgQUxPR0QgPDwgIlJlY29uZmlndXJlIGVuY29kZXIgZHVlIHRvIGZvcm1hdCBjaGFuZ2Uu
ICIKLSAgICAgICAgICAgIDw8ICh1c2Vfc3VyZmFjZV8gPwotICAgICAgICAgICAgICAgICJSZWNv
bmZpZ3VyaW5nIHRvIGVuY29kZSBmcm9tIGJ5dGUgYnVmZmVyLiIgOgotICAgICAgICAgICAgICAg
ICJSZWNvbmZpZ3VyaW5nIHRvIGVuY29kZSBmcm9tIHRleHR1cmUuIik7Ci0gICAgICBMb2dTdGF0
aXN0aWNzKHRydWUpOwotICB9Ci0gIGlmIChyZWNvbmZpZ3VyZV9kdWVfdG9fc2l6ZSkgewotICAg
IEFMT0dXIDw8ICJSZWNvbmZpZ3VyZSBlbmNvZGVyIGR1ZSB0byBmcmFtZSByZXNvbHV0aW9uIGNo
YW5nZSBmcm9tICIKLSAgICAgICAgPDwgd2lkdGhfIDw8ICIgeCAiIDw8IGhlaWdodF8gPDwgIiB0
byAiIDw8IGZyYW1lLndpZHRoKCkgPDwgIiB4ICIKLSAgICAgICAgPDwgZnJhbWUuaGVpZ2h0KCk7
Ci0gICAgTG9nU3RhdGlzdGljcyh0cnVlKTsKLSAgICB3aWR0aF8gPSBmcmFtZS53aWR0aCgpOwot
ICAgIGhlaWdodF8gPSBmcmFtZS5oZWlnaHQoKTsKLSAgfQotCi0gIGlmICghcmVjb25maWd1cmVf
ZHVlX3RvX2Zvcm1hdCAmJiAhcmVjb25maWd1cmVfZHVlX3RvX3NpemUpCi0gICAgcmV0dXJuIHRy
dWU7Ci0KLSAgUmVsZWFzZU9uQ29kZWNUaHJlYWQoKTsKLQotICByZXR1cm4gSW5pdEVuY29kZU9u
Q29kZWNUaHJlYWQod2lkdGhfLCBoZWlnaHRfLCAwLCAwICwgaXNfdGV4dHVyZV9mcmFtZSkgPT0K
LSAgICAgIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotYm9vbCBNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyOjpFbmNvZGVCeXRlQnVmZmVyT25Db2RlY1RocmVhZChKTklFbnYqIGpuaSwKLSAgICBi
b29sIGtleV9mcmFtZSwgY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lJiBmcmFtZSwgaW50IGlucHV0
X2J1ZmZlcl9pbmRleCkgewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfQ0hFQ0soIXVzZV9zdXJmYWNlXyk7Ci0KLSAgam9i
amVjdCBqX2lucHV0X2J1ZmZlciA9IGlucHV0X2J1ZmZlcnNfW2lucHV0X2J1ZmZlcl9pbmRleF07
Ci0gIHVpbnQ4X3QqIHl1dl9idWZmZXIgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfaW5wdXRfYnVmZmVyKSk7Ci0gIGlmIChD
aGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgQUxPR0UgPDwgIkV4Y2VwdGlvbiBpbiBnZXQgZGly
ZWN0IGJ1ZmZlciBhZGRyZXNzLiI7Ci0gICAgUHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKHRy
dWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotICBSVENfQ0hFQ0soeXV2X2J1ZmZlcikgPDwgIkluZGlyZWN0IGJ1ZmZlcj8/IjsK
LSAgUlRDX0NIRUNLKCFsaWJ5dXY6OkNvbnZlcnRGcm9tSTQyMCgKLSAgICAgIGZyYW1lLnZpZGVv
X2ZyYW1lX2J1ZmZlcigpLT5EYXRhWSgpLAotICAgICAgZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVy
KCktPlN0cmlkZVkoKSwKLSAgICAgIGZyYW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5EYXRhVSgp
LAotICAgICAgZnJhbWUudmlkZW9fZnJhbWVfYnVmZmVyKCktPlN0cmlkZVUoKSwKLSAgICAgIGZy
YW1lLnZpZGVvX2ZyYW1lX2J1ZmZlcigpLT5EYXRhVigpLAotICAgICAgZnJhbWUudmlkZW9fZnJh
bWVfYnVmZmVyKCktPlN0cmlkZVYoKSwKLSAgICAgIHl1dl9idWZmZXIsIHdpZHRoXywgd2lkdGhf
LCBoZWlnaHRfLCBlbmNvZGVyX2ZvdXJjY18pKQotICAgICAgPDwgIkNvbnZlcnRGcm9tSTQyMCBm
YWlsZWQiOwotCi0gIGJvb2wgZW5jb2RlX3N0YXR1cyA9IGpuaS0+Q2FsbEJvb2xlYW5NZXRob2Qo
KmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgal9lbmNvZGVfYnVmZmVyX21ldGhvZF8sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5X2ZyYW1lLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2J1ZmZlcl9pbmRleCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5dXZfc2l6ZV8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF90
aW1lc3RhbXBfdXNfKTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICBBTE9HRSA8
PCAiRXhjZXB0aW9uIGluIGVuY29kZSBidWZmZXIuIjsKLSAgICBQcm9jZXNzSFdFcnJvck9uQ29k
ZWNUaHJlYWQodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiBlbmNvZGVfc3RhdHVzOwotfQotCi1ib29sIE1l
ZGlhQ29kZWNWaWRlb0VuY29kZXI6OkVuY29kZVRleHR1cmVPbkNvZGVjVGhyZWFkKEpOSUVudiog
am5pLAotICAgIGJvb2wga2V5X2ZyYW1lLCBjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIGZyYW1l
KSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJl
YWQoKSk7Ci0gIFJUQ19DSEVDSyh1c2Vfc3VyZmFjZV8pOwotICBOYXRpdmVIYW5kbGVJbXBsKiBo
YW5kbGUgPSBzdGF0aWNfY2FzdDxOYXRpdmVIYW5kbGVJbXBsKj4oCi0gICAgICBmcmFtZS52aWRl
b19mcmFtZV9idWZmZXIoKS0+bmF0aXZlX2hhbmRsZSgpKTsKLSAgamZsb2F0QXJyYXkgc2FtcGxp
bmdfbWF0cml4ID0gaGFuZGxlLT5zYW1wbGluZ19tYXRyaXguVG9KYXZhKGpuaSk7Ci0gIGJvb2wg
ZW5jb2RlX3N0YXR1cyA9IGpuaS0+Q2FsbEJvb2xlYW5NZXRob2QoKmpfbWVkaWFfY29kZWNfdmlk
ZW9fZW5jb2Rlcl8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgal9lbmNvZGVfdGV4dHVyZV9tZXRob2RfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtleV9mcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoYW5kbGUtPm9lc190ZXh0dXJlX2lkLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsaW5nX21hdHJpeCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3RpbWVzdGFt
cF91c18pOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFMT0dFIDw8ICJFeGNl
cHRpb24gaW4gZW5jb2RlIHRleHR1cmUuIjsKLSAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJl
YWQodHJ1ZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0gIHJldHVybiBlbmNvZGVfc3RhdHVzOwotfQotCi1pbnQzMl90IE1lZGlh
Q29kZWNWaWRlb0VuY29kZXI6OlJlZ2lzdGVyRW5jb2RlQ29tcGxldGVDYWxsYmFja09uQ29kZWNU
aHJlYWQoCi0gICAgd2VicnRjOjpFbmNvZGVkSW1hZ2VDYWxsYmFjayogY2FsbGJhY2spIHsKLSAg
UlRDX0RDSEVDSyhjb2RlY190aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsK
LSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgU2NvcGVk
TG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgY2FsbGJhY2tfID0gY2FsbGJh
Y2s7Ci0gIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0KLWludDMyX3QgTWVkaWFD
b2RlY1ZpZGVvRW5jb2Rlcjo6UmVsZWFzZU9uQ29kZWNUaHJlYWQoKSB7Ci0gIFJUQ19EQ0hFQ0so
Y29kZWNfdGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGlmICghaW5p
dGVkXykgewotICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0gIH0KLSAgSk5JRW52
KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgQUxPR0QgPDwgIkVuY29k
ZXJSZWxlYXNlT25Db2RlY1RocmVhZDogRnJhbWVzIHJlY2VpdmVkOiAiIDw8Ci0gICAgICBmcmFt
ZXNfcmVjZWl2ZWRfIDw8ICIuIEVuY29kZWQ6ICIgPDwgZnJhbWVzX2VuY29kZWRfIDw8Ci0gICAg
ICAiLiBEcm9wcGVkOiAiIDw8IGZyYW1lc19kcm9wcGVkX21lZGlhX2VuY29kZXJfOwotICBTY29w
ZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGlucHV0X2J1ZmZlcnNfLnNpemUoKTsgKytpKQotICAgIGpuaS0+RGVsZXRlR2xvYmFs
UmVmKGlucHV0X2J1ZmZlcnNfW2ldKTsKLSAgaW5wdXRfYnVmZmVyc18uY2xlYXIoKTsKLSAgam5p
LT5DYWxsVm9pZE1ldGhvZCgqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXywgal9yZWxlYXNl
X21ldGhvZF8pOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSkgewotICAgIEFMT0dFIDw8ICJF
eGNlcHRpb24gaW4gcmVsZWFzZS4iOwotICAgIFByb2Nlc3NIV0Vycm9yT25Db2RlY1RocmVhZChm
YWxzZSAvKiByZXNldF9pZl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgcmV0dXJuIFdF
QlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAgfQotICBydGM6Ok1lc3NhZ2VRdWV1ZU1hbmFnZXI6
OkNsZWFyKHRoaXMpOwotICBpbml0ZWRfID0gZmFsc2U7Ci0gIHVzZV9zdXJmYWNlXyA9IGZhbHNl
OwotICBBTE9HRCA8PCAiRW5jb2RlclJlbGVhc2VPbkNvZGVjVGhyZWFkIGRvbmUuIjsKLSAgcmV0
dXJuIFdFQlJUQ19WSURFT19DT0RFQ19PSzsKLX0KLQotaW50MzJfdCBNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyOjpTZXRSYXRlc09uQ29kZWNUaHJlYWQodWludDMyX3QgbmV3X2JpdF9yYXRlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgZnJhbWVfcmF0ZSkgewotICBSVENfRENIRUNLKGNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoc3dfZmFsbGJhY2tfcmVxdWlyZWRfKQotICAgIHJl
dHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci0gIGZyYW1lX3JhdGUgPSAoZnJhbWVfcmF0ZSA8
IE1BWF9BTExPV0VEX1ZJREVPX0ZQUykgPwotICAgICAgZnJhbWVfcmF0ZSA6IE1BWF9BTExPV0VE
X1ZJREVPX0ZQUzsKLSAgaWYgKGxhc3Rfc2V0X2JpdHJhdGVfa2Jwc18gPT0gbmV3X2JpdF9yYXRl
ICYmCi0gICAgICBsYXN0X3NldF9mcHNfID09IGZyYW1lX3JhdGUpIHsKLSAgICByZXR1cm4gV0VC
UlRDX1ZJREVPX0NPREVDX09LOwotICB9Ci0gIGlmIChzY2FsZV8pIHsKLSAgICBxdWFsaXR5X3Nj
YWxlcl8uUmVwb3J0RnJhbWVyYXRlKGZyYW1lX3JhdGUpOwotICB9Ci0gIEpOSUVudiogam5pID0g
QXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9j
YWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGlmIChuZXdfYml0X3JhdGUgPiAwKSB7Ci0gICAgbGFzdF9z
ZXRfYml0cmF0ZV9rYnBzXyA9IG5ld19iaXRfcmF0ZTsKLSAgfQotICBpZiAoZnJhbWVfcmF0ZSA+
IDApIHsKLSAgICBsYXN0X3NldF9mcHNfID0gZnJhbWVfcmF0ZTsKLSAgfQotICBib29sIHJldCA9
IGpuaS0+Q2FsbEJvb2xlYW5NZXRob2QoKmpfbWVkaWFfY29kZWNfdmlkZW9fZW5jb2Rlcl8sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqX3NldF9yYXRlc19tZXRob2Rf
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9zZXRfYml0cmF0
ZV9rYnBzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Rfc2V0
X2Zwc18pOwotICBpZiAoQ2hlY2tFeGNlcHRpb24oam5pKSB8fCAhcmV0KSB7Ci0gICAgUHJvY2Vz
c0hXRXJyb3JPbkNvZGVjVGhyZWFkKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFi
bGUgKi8pOwotICAgIHJldHVybiBzd19mYWxsYmFja19yZXF1aXJlZF8gPyBXRUJSVENfVklERU9f
Q09ERUNfT0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogV0VCUlRDX1ZJREVP
X0NPREVDX0VSUk9SOwotICB9Ci0gIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfT0s7Ci19Ci0K
LWludCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyOjpHZXRPdXRwdXRCdWZmZXJJbmZvSW5kZXgoCi0g
ICAgSk5JRW52KiBqbmksCi0gICAgam9iamVjdCBqX291dHB1dF9idWZmZXJfaW5mbykgewotICBy
ZXR1cm4gR2V0SW50RmllbGQoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbywgal9pbmZvX2luZGV4
X2ZpZWxkXyk7Ci19Ci0KLWpvYmplY3QgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6R2V0T3V0cHV0
QnVmZmVySW5mb0J1ZmZlcigKLSAgICBKTklFbnYqIGpuaSwKLSAgICBqb2JqZWN0IGpfb3V0cHV0
X2J1ZmZlcl9pbmZvKSB7Ci0gIHJldHVybiBHZXRPYmplY3RGaWVsZChqbmksIGpfb3V0cHV0X2J1
ZmZlcl9pbmZvLCBqX2luZm9fYnVmZmVyX2ZpZWxkXyk7Ci19Ci0KLWJvb2wgTWVkaWFDb2RlY1Zp
ZGVvRW5jb2Rlcjo6R2V0T3V0cHV0QnVmZmVySW5mb0lzS2V5RnJhbWUoCi0gICAgSk5JRW52KiBq
bmksCi0gICAgam9iamVjdCBqX291dHB1dF9idWZmZXJfaW5mbykgewotICByZXR1cm4gR2V0Qm9v
bGVhbkZpZWxkKGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8sIGpfaW5mb19pc19rZXlfZnJhbWVf
ZmllbGRfKTsKLX0KLQotamxvbmcgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6R2V0T3V0cHV0QnVm
ZmVySW5mb1ByZXNlbnRhdGlvblRpbWVzdGFtcFVzKAotICAgIEpOSUVudiogam5pLAotICAgIGpv
YmplY3Qgal9vdXRwdXRfYnVmZmVyX2luZm8pIHsKLSAgcmV0dXJuIEdldExvbmdGaWVsZCgKLSAg
ICAgIGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8sIGpfaW5mb19wcmVzZW50YXRpb25fdGltZXN0
YW1wX3VzX2ZpZWxkXyk7Ci19Ci0KLWJvb2wgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6RGVsaXZl
clBlbmRpbmdPdXRwdXRzKEpOSUVudiogam5pKSB7Ci0gIFJUQ19EQ0hFQ0soY29kZWNfdGhyZWFk
X2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0KLSAgd2hpbGUgKHRydWUpIHsKLSAg
ICBqb2JqZWN0IGpfb3V0cHV0X2J1ZmZlcl9pbmZvID0gam5pLT5DYWxsT2JqZWN0TWV0aG9kKAot
ICAgICAgICAqal9tZWRpYV9jb2RlY192aWRlb19lbmNvZGVyXywgal9kZXF1ZXVlX291dHB1dF9i
dWZmZXJfbWV0aG9kXyk7Ci0gICAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsKLSAgICAgIEFM
T0dFIDw8ICJFeGNlcHRpb24gaW4gc2V0IGRlcXVldWUgb3V0cHV0IGJ1ZmZlci4iOwotICAgICAg
UHJvY2Vzc0hXRXJyb3JPbkNvZGVjVGhyZWFkKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5h
dmFpbGFibGUgKi8pOwotICAgICAgcmV0dXJuIFdFQlJUQ19WSURFT19DT0RFQ19FUlJPUjsKLSAg
ICB9Ci0gICAgaWYgKElzTnVsbChqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZvKSkgewotICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaW50IG91dHB1dF9idWZmZXJfaW5kZXggPQotICAgICAgICBH
ZXRPdXRwdXRCdWZmZXJJbmZvSW5kZXgoam5pLCBqX291dHB1dF9idWZmZXJfaW5mbyk7Ci0gICAg
aWYgKG91dHB1dF9idWZmZXJfaW5kZXggPT0gLTEpIHsKLSAgICAgIFByb2Nlc3NIV0Vycm9yT25D
b2RlY1RocmVhZCh0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICovKTsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBHZXQga2V5IGFuZCBjb25maWcgZnJh
bWUgZmxhZ3MuCi0gICAgam9iamVjdCBqX291dHB1dF9idWZmZXIgPQotICAgICAgICBHZXRPdXRw
dXRCdWZmZXJJbmZvQnVmZmVyKGpuaSwgal9vdXRwdXRfYnVmZmVyX2luZm8pOwotICAgIGJvb2wg
a2V5X2ZyYW1lID0gR2V0T3V0cHV0QnVmZmVySW5mb0lzS2V5RnJhbWUoam5pLCBqX291dHB1dF9i
dWZmZXJfaW5mbyk7Ci0KLSAgICAvLyBHZXQgZnJhbWUgdGltZXN0YW1wcyBmcm9tIGEgcXVldWUg
LSBmb3Igbm9uIGNvbmZpZyBmcmFtZXMgb25seS4KLSAgICBpbnQ2NF90IGVuY29kaW5nX3N0YXJ0
X3RpbWVfbXMgPSAwOwotICAgIGludDY0X3QgZnJhbWVfZW5jb2RpbmdfdGltZV9tcyA9IDA7Ci0g
ICAgbGFzdF9vdXRwdXRfdGltZXN0YW1wX21zXyA9Ci0gICAgICAgIEdldE91dHB1dEJ1ZmZlcklu
Zm9QcmVzZW50YXRpb25UaW1lc3RhbXBVcyhqbmksIGpfb3V0cHV0X2J1ZmZlcl9pbmZvKSAvCi0g
ICAgICAgIHJ0Yzo6a051bU1pY3Jvc2Vjc1Blck1pbGxpc2VjOwotICAgIGlmICghaW5wdXRfZnJh
bWVfaW5mb3NfLmVtcHR5KCkpIHsKLSAgICAgIGNvbnN0IElucHV0RnJhbWVJbmZvJiBmcmFtZV9p
bmZvID0gaW5wdXRfZnJhbWVfaW5mb3NfLmZyb250KCk7Ci0gICAgICBvdXRwdXRfdGltZXN0YW1w
XyA9IGZyYW1lX2luZm8uZnJhbWVfdGltZXN0YW1wOwotICAgICAgb3V0cHV0X3JlbmRlcl90aW1l
X21zXyA9IGZyYW1lX2luZm8uZnJhbWVfcmVuZGVyX3RpbWVfbXM7Ci0gICAgICBvdXRwdXRfcm90
YXRpb25fID0gZnJhbWVfaW5mby5yb3RhdGlvbjsKLSAgICAgIGVuY29kaW5nX3N0YXJ0X3RpbWVf
bXMgPSBmcmFtZV9pbmZvLmVuY29kZV9zdGFydF90aW1lOwotICAgICAgaW5wdXRfZnJhbWVfaW5m
b3NfLnBvcF9mcm9udCgpOwotICAgIH0KLQotICAgIC8vIEV4dHJhY3QgcGF5bG9hZC4KLSAgICBz
aXplX3QgcGF5bG9hZF9zaXplID0gam5pLT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShqX291dHB1
dF9idWZmZXIpOwotICAgIHVpbnQ4X3QqIHBheWxvYWQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
X3QqPigKLSAgICAgICAgam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfb3V0cHV0X2J1ZmZl
cikpOwotICAgIGlmIChDaGVja0V4Y2VwdGlvbihqbmkpKSB7Ci0gICAgICBBTE9HRSA8PCAiRXhj
ZXB0aW9uIGluIGdldCBkaXJlY3QgYnVmZmVyIGFkZHJlc3MuIjsKLSAgICAgIFByb2Nlc3NIV0Vy
cm9yT25Db2RlY1RocmVhZCh0cnVlIC8qIHJlc2V0X2lmX2ZhbGxiYWNrX3VuYXZhaWxhYmxlICov
KTsKLSAgICAgIHJldHVybiBXRUJSVENfVklERU9fQ09ERUNfRVJST1I7Ci0gICAgfQotCi0gICAg
Ly8gQ2FsbGJhY2sgLSByZXR1cm4gZW5jb2RlZCBmcmFtZS4KLSAgICB3ZWJydGM6OkVuY29kZWRJ
bWFnZUNhbGxiYWNrOjpSZXN1bHQgY2FsbGJhY2tfcmVzdWx0KAotICAgICAgICB3ZWJydGM6OkVu
Y29kZWRJbWFnZUNhbGxiYWNrOjpSZXN1bHQ6Ok9LKTsKLSAgICBpZiAoY2FsbGJhY2tfKSB7Ci0g
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8d2VicnRjOjpFbmNvZGVkSW1hZ2U+IGltYWdlKAotICAgICAg
ICAgIG5ldyB3ZWJydGM6OkVuY29kZWRJbWFnZShwYXlsb2FkLCBwYXlsb2FkX3NpemUsIHBheWxv
YWRfc2l6ZSkpOwotICAgICAgaW1hZ2UtPl9lbmNvZGVkV2lkdGggPSB3aWR0aF87Ci0gICAgICBp
bWFnZS0+X2VuY29kZWRIZWlnaHQgPSBoZWlnaHRfOwotICAgICAgaW1hZ2UtPl90aW1lU3RhbXAg
PSBvdXRwdXRfdGltZXN0YW1wXzsKLSAgICAgIGltYWdlLT5jYXB0dXJlX3RpbWVfbXNfID0gb3V0
cHV0X3JlbmRlcl90aW1lX21zXzsKLSAgICAgIGltYWdlLT5yb3RhdGlvbl8gPSBvdXRwdXRfcm90
YXRpb25fOwotICAgICAgaW1hZ2UtPl9mcmFtZVR5cGUgPQotICAgICAgICAgIChrZXlfZnJhbWUg
PyB3ZWJydGM6OmtWaWRlb0ZyYW1lS2V5IDogd2VicnRjOjprVmlkZW9GcmFtZURlbHRhKTsKLSAg
ICAgIGltYWdlLT5fY29tcGxldGVGcmFtZSA9IHRydWU7Ci0gICAgICBpbWFnZS0+YWRhcHRfcmVh
c29uXy5xdWFsaXR5X3Jlc29sdXRpb25fZG93bnNjYWxlcyA9Ci0gICAgICAgICAgc2NhbGVfID8g
cXVhbGl0eV9zY2FsZXJfLmRvd25zY2FsZV9zaGlmdCgpIDogLTE7Ci0KLSAgICAgIHdlYnJ0Yzo6
Q29kZWNTcGVjaWZpY0luZm8gaW5mbzsKLSAgICAgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKGlu
Zm8pKTsKLSAgICAgIGluZm8uY29kZWNUeXBlID0gY29kZWNUeXBlXzsKLSAgICAgIGlmIChjb2Rl
Y1R5cGVfID09IGtWaWRlb0NvZGVjVlA4KSB7Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5W
UDgucGljdHVyZUlkID0gcGljdHVyZV9pZF87Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5W
UDgubm9uUmVmZXJlbmNlID0gZmFsc2U7Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDgu
c2ltdWxjYXN0SWR4ID0gMDsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOC50ZW1wb3Jh
bElkeCA9IHdlYnJ0Yzo6a05vVGVtcG9yYWxJZHg7Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZp
Yy5WUDgubGF5ZXJTeW5jID0gZmFsc2U7Ci0gICAgICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDgu
dGwwUGljSWR4ID0gd2VicnRjOjprTm9UbDBQaWNJZHg7Ci0gICAgICAgIGluZm8uY29kZWNTcGVj
aWZpYy5WUDgua2V5SWR4ID0gd2VicnRjOjprTm9LZXlJZHg7Ci0gICAgICB9IGVsc2UgaWYgKGNv
ZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNWUDkpIHsKLSAgICAgICAgaWYgKGtleV9mcmFtZSkgewot
ICAgICAgICAgIGdvZl9pZHhfID0gMDsKLSAgICAgICAgfQotICAgICAgICBpbmZvLmNvZGVjU3Bl
Y2lmaWMuVlA5LnBpY3R1cmVfaWQgPSBwaWN0dXJlX2lkXzsKLSAgICAgICAgaW5mby5jb2RlY1Nw
ZWNpZmljLlZQOS5pbnRlcl9waWNfcHJlZGljdGVkID0ga2V5X2ZyYW1lID8gZmFsc2UgOiB0cnVl
OwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LmZsZXhpYmxlX21vZGUgPSBmYWxzZTsK
LSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5zc19kYXRhX2F2YWlsYWJsZSA9IGtleV9m
cmFtZSA/IHRydWUgOiBmYWxzZTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS50bDBf
cGljX2lkeCA9IHRsMF9waWNfaWR4XysrOwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5
LnRlbXBvcmFsX2lkeCA9IHdlYnJ0Yzo6a05vVGVtcG9yYWxJZHg7Ci0gICAgICAgIGluZm8uY29k
ZWNTcGVjaWZpYy5WUDkuc3BhdGlhbF9pZHggPSB3ZWJydGM6OmtOb1NwYXRpYWxJZHg7Ci0gICAg
ICAgIGluZm8uY29kZWNTcGVjaWZpYy5WUDkudGVtcG9yYWxfdXBfc3dpdGNoID0gdHJ1ZTsKLSAg
ICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5pbnRlcl9sYXllcl9wcmVkaWN0ZWQgPSBmYWxz
ZTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5nb2ZfaWR4ID0KLSAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KGdvZl9pZHhfKysgJSBnb2ZfLm51bV9mcmFtZXNfaW5fZ29m
KTsKLSAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5udW1fc3BhdGlhbF9sYXllcnMgPSAx
OwotICAgICAgICBpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNwYXRpYWxfbGF5ZXJfcmVzb2x1dGlv
bl9wcmVzZW50ID0gZmFsc2U7Ci0gICAgICAgIGlmIChpbmZvLmNvZGVjU3BlY2lmaWMuVlA5LnNz
X2RhdGFfYXZhaWxhYmxlKSB7Ci0gICAgICAgICAgaW5mby5jb2RlY1NwZWNpZmljLlZQOS5zcGF0
aWFsX2xheWVyX3Jlc29sdXRpb25fcHJlc2VudCA9IHRydWU7Ci0gICAgICAgICAgaW5mby5jb2Rl
Y1NwZWNpZmljLlZQOS53aWR0aFswXSA9IHdpZHRoXzsKLSAgICAgICAgICBpbmZvLmNvZGVjU3Bl
Y2lmaWMuVlA5LmhlaWdodFswXSA9IGhlaWdodF87Ci0gICAgICAgICAgaW5mby5jb2RlY1NwZWNp
ZmljLlZQOS5nb2YuQ29weUdvZkluZm9WUDkoZ29mXyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICAgIHBpY3R1cmVfaWRfID0gKHBpY3R1cmVfaWRfICsgMSkgJiAweDdGRkY7Ci0KLSAgICAgIC8v
IEdlbmVyYXRlIGEgaGVhZGVyIGRlc2NyaWJpbmcgYSBzaW5nbGUgZnJhZ21lbnQuCi0gICAgICB3
ZWJydGM6OlJUUEZyYWdtZW50YXRpb25IZWFkZXIgaGVhZGVyOwotICAgICAgbWVtc2V0KCZoZWFk
ZXIsIDAsIHNpemVvZihoZWFkZXIpKTsKLSAgICAgIGlmIChjb2RlY1R5cGVfID09IGtWaWRlb0Nv
ZGVjVlA4IHx8IGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNWUDkpIHsKLSAgICAgICAgaGVhZGVy
LlZlcmlmeUFuZEFsbG9jYXRlRnJhZ21lbnRhdGlvbkhlYWRlcigxKTsKLSAgICAgICAgaGVhZGVy
LmZyYWdtZW50YXRpb25PZmZzZXRbMF0gPSAwOwotICAgICAgICBoZWFkZXIuZnJhZ21lbnRhdGlv
bkxlbmd0aFswXSA9IGltYWdlLT5fbGVuZ3RoOwotICAgICAgICBoZWFkZXIuZnJhZ21lbnRhdGlv
blBsVHlwZVswXSA9IDA7Ci0gICAgICAgIGhlYWRlci5mcmFnbWVudGF0aW9uVGltZURpZmZbMF0g
PSAwOwotICAgICAgICBpZiAoY29kZWNUeXBlXyA9PSBrVmlkZW9Db2RlY1ZQOCAmJiBzY2FsZV8p
IHsKLSAgICAgICAgICBpbnQgcXA7Ci0gICAgICAgICAgaWYgKHdlYnJ0Yzo6dnA4OjpHZXRRcChw
YXlsb2FkLCBwYXlsb2FkX3NpemUsICZxcCkpIHsKLSAgICAgICAgICAgIGN1cnJlbnRfYWNjX3Fw
XyArPSBxcDsKLSAgICAgICAgICAgIHF1YWxpdHlfc2NhbGVyXy5SZXBvcnRRUChxcCk7Ci0gICAg
ICAgICAgICBpbWFnZS0+cXBfID0gcXA7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
IGVsc2UgaWYgKGNvZGVjVHlwZV8gPT0ga1ZpZGVvQ29kZWNIMjY0KSB7Ci0gICAgICAgIGlmIChz
Y2FsZV8pIHsKLSAgICAgICAgICBoMjY0X2JpdHN0cmVhbV9wYXJzZXJfLlBhcnNlQml0c3RyZWFt
KHBheWxvYWQsIHBheWxvYWRfc2l6ZSk7Ci0gICAgICAgICAgaW50IHFwOwotICAgICAgICAgIGlm
IChoMjY0X2JpdHN0cmVhbV9wYXJzZXJfLkdldExhc3RTbGljZVFwKCZxcCkpIHsKLSAgICAgICAg
ICAgIGN1cnJlbnRfYWNjX3FwXyArPSBxcDsKLSAgICAgICAgICAgIHF1YWxpdHlfc2NhbGVyXy5S
ZXBvcnRRUChxcCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vIEZvciBILjI2
NCBzZWFyY2ggZm9yIHN0YXJ0IGNvZGVzLgotICAgICAgICBpbnQzMl90IHNjUG9zaXRpb25zW01B
WF9OQUxVU19QRVJGUkFNRSArIDFdID0ge307Ci0gICAgICAgIGludDMyX3Qgc2NQb3NpdGlvbnNM
ZW5ndGggPSAwOwotICAgICAgICBpbnQzMl90IHNjUG9zaXRpb24gPSAwOwotICAgICAgICB3aGls
ZSAoc2NQb3NpdGlvbnNMZW5ndGggPCBNQVhfTkFMVVNfUEVSRlJBTUUpIHsKLSAgICAgICAgICBp
bnQzMl90IG5hbHVQb3NpdGlvbiA9IE5leHROYWx1UG9zaXRpb24oCi0gICAgICAgICAgICAgIHBh
eWxvYWQgKyBzY1Bvc2l0aW9uLCBwYXlsb2FkX3NpemUgLSBzY1Bvc2l0aW9uKTsKLSAgICAgICAg
ICBpZiAobmFsdVBvc2l0aW9uIDwgMCkgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
fQotICAgICAgICAgIHNjUG9zaXRpb24gKz0gbmFsdVBvc2l0aW9uOwotICAgICAgICAgIHNjUG9z
aXRpb25zW3NjUG9zaXRpb25zTGVuZ3RoKytdID0gc2NQb3NpdGlvbjsKLSAgICAgICAgICBzY1Bv
c2l0aW9uICs9IEgyNjRfU0NfTEVOR1RIOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzY1Bvc2l0
aW9uc0xlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgQUxPR0UgPDwgIlN0YXJ0IGNvZGUgaXMgbm90
IGZvdW5kISI7Ci0gICAgICAgICAgQUxPR0UgPDwgIkRhdGE6IiA8PCAgaW1hZ2UtPl9idWZmZXJb
MF0gPDwgIiAiIDw8IGltYWdlLT5fYnVmZmVyWzFdCi0gICAgICAgICAgICAgIDw8ICIgIiA8PCBp
bWFnZS0+X2J1ZmZlclsyXSA8PCAiICIgPDwgaW1hZ2UtPl9idWZmZXJbM10KLSAgICAgICAgICAg
ICAgPDwgIiAiIDw8IGltYWdlLT5fYnVmZmVyWzRdIDw8ICIgIiA8PCBpbWFnZS0+X2J1ZmZlcls1
XTsKLSAgICAgICAgICBQcm9jZXNzSFdFcnJvck9uQ29kZWNUaHJlYWQodHJ1ZSAvKiByZXNldF9p
Zl9mYWxsYmFja191bmF2YWlsYWJsZSAqLyk7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHNjUG9zaXRpb25zW3NjUG9zaXRpb25zTGVuZ3RoXSA9IHBheWxvYWRf
c2l6ZTsKLSAgICAgICAgaGVhZGVyLlZlcmlmeUFuZEFsbG9jYXRlRnJhZ21lbnRhdGlvbkhlYWRl
cihzY1Bvc2l0aW9uc0xlbmd0aCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NQ
b3NpdGlvbnNMZW5ndGg7IGkrKykgewotICAgICAgICAgIGhlYWRlci5mcmFnbWVudGF0aW9uT2Zm
c2V0W2ldID0gc2NQb3NpdGlvbnNbaV0gKyBIMjY0X1NDX0xFTkdUSDsKLSAgICAgICAgICBoZWFk
ZXIuZnJhZ21lbnRhdGlvbkxlbmd0aFtpXSA9Ci0gICAgICAgICAgICAgIHNjUG9zaXRpb25zW2kg
KyAxXSAtIGhlYWRlci5mcmFnbWVudGF0aW9uT2Zmc2V0W2ldOwotICAgICAgICAgIGhlYWRlci5m
cmFnbWVudGF0aW9uUGxUeXBlW2ldID0gMDsKLSAgICAgICAgICBoZWFkZXIuZnJhZ21lbnRhdGlv
blRpbWVEaWZmW2ldID0gMDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBjYWxsYmFja19y
ZXN1bHQgPSBjYWxsYmFja18tPk9uRW5jb2RlZEltYWdlKCppbWFnZSwgJmluZm8sICZoZWFkZXIp
OwotICAgIH0KLQotICAgIC8vIFJldHVybiBvdXRwdXQgYnVmZmVyIGJhY2sgdG8gdGhlIGVuY29k
ZXIuCi0gICAgYm9vbCBzdWNjZXNzID0gam5pLT5DYWxsQm9vbGVhbk1ldGhvZCgqal9tZWRpYV9j
b2RlY192aWRlb19lbmNvZGVyXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpfcmVsZWFzZV9vdXRwdXRfYnVmZmVyX21ldGhvZF8sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfYnVmZmVyX2luZGV4KTsKLSAgICBpZiAo
Q2hlY2tFeGNlcHRpb24oam5pKSB8fCAhc3VjY2VzcykgewotICAgICAgUHJvY2Vzc0hXRXJyb3JP
bkNvZGVjVGhyZWFkKHRydWUgLyogcmVzZXRfaWZfZmFsbGJhY2tfdW5hdmFpbGFibGUgKi8pOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFByaW50IHBlciBmcmFtZSBzdGF0
aXN0aWNzLgotICAgIGlmIChlbmNvZGluZ19zdGFydF90aW1lX21zID4gMCkgewotICAgICAgZnJh
bWVfZW5jb2RpbmdfdGltZV9tcyA9IHJ0Yzo6VGltZU1pbGxpcygpIC0gZW5jb2Rpbmdfc3RhcnRf
dGltZV9tczsKLSAgICB9Ci0gICAgaWYgKGZyYW1lc19lbmNvZGVkXyA8IGtNYXhFbmNvZGVkTG9n
RnJhbWVzKSB7Ci0gICAgICBpbnQgY3VycmVudF9sYXRlbmN5ID0KLSAgICAgICAgICAoaW50KShs
YXN0X2lucHV0X3RpbWVzdGFtcF9tc18gLSBsYXN0X291dHB1dF90aW1lc3RhbXBfbXNfKTsKLSAg
ICAgIEFMT0dEIDw8ICJFbmNvZGVyIGZyYW1lIG91dCAjICIgPDwgZnJhbWVzX2VuY29kZWRfIDw8
Ci0gICAgICAgICAgIi4gS2V5OiAiIDw8IGtleV9mcmFtZSA8PAotICAgICAgICAgICIuIFNpemU6
ICIgPDwgcGF5bG9hZF9zaXplIDw8Ci0gICAgICAgICAgIi4gVFM6ICIgPDwgKGludClsYXN0X291
dHB1dF90aW1lc3RhbXBfbXNfIDw8Ci0gICAgICAgICAgIi4gTGF0ZW5jeTogIiA8PCBjdXJyZW50
X2xhdGVuY3kgPDwKLSAgICAgICAgICAiLiBFbmNUaW1lOiAiIDw8IGZyYW1lX2VuY29kaW5nX3Rp
bWVfbXM7Ci0gICAgfQotCi0gICAgLy8gQ2FsY3VsYXRlIGFuZCBwcmludCBlbmNvZGluZyBzdGF0
aXN0aWNzIC0gZXZlcnkgMyBzZWNvbmRzLgotICAgIGZyYW1lc19lbmNvZGVkXysrOwotICAgIGN1
cnJlbnRfZnJhbWVzXysrOwotICAgIGN1cnJlbnRfYnl0ZXNfICs9IHBheWxvYWRfc2l6ZTsKLSAg
ICBjdXJyZW50X2VuY29kaW5nX3RpbWVfbXNfICs9IGZyYW1lX2VuY29kaW5nX3RpbWVfbXM7Ci0g
ICAgTG9nU3RhdGlzdGljcyhmYWxzZSk7Ci0KLSAgICAvLyBFcnJvcnMgaW4gY2FsbGJhY2tfcmVz
dWx0IGFyZSBjdXJyZW50bHkgaWdub3JlZC4KLSAgICBpZiAoY2FsbGJhY2tfcmVzdWx0LmRyb3Bf
bmV4dF9mcmFtZSkKLSAgICAgIGRyb3BfbmV4dF9pbnB1dF9mcmFtZV8gPSB0cnVlOwotICB9Ci0g
IHJldHVybiB0cnVlOwotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0VuY29kZXI6OkxvZ1N0YXRp
c3RpY3MoYm9vbCBmb3JjZV9sb2cpIHsKLSAgaW50IHN0YXRpc3RpY190aW1lX21zID0gcnRjOjpU
aW1lTWlsbGlzKCkgLSBzdGF0X3N0YXJ0X3RpbWVfbXNfOwotICBpZiAoKHN0YXRpc3RpY190aW1l
X21zID49IGtNZWRpYUNvZGVjU3RhdGlzdGljc0ludGVydmFsTXMgfHwgZm9yY2VfbG9nKQotICAg
ICAgJiYgc3RhdGlzdGljX3RpbWVfbXMgPiAwKSB7Ci0gICAgLy8gUHJldmVudCBkaXZpc2lvbiBi
eSB6ZXJvLgotICAgIGludCBjdXJyZW50X2ZyYW1lc19kaXZpZGVyID0gY3VycmVudF9mcmFtZXNf
ICE9IDAgPyBjdXJyZW50X2ZyYW1lc18gOiAxOwotCi0gICAgaW50IGN1cnJlbnRfYml0cmF0ZSA9
IGN1cnJlbnRfYnl0ZXNfICogOCAvIHN0YXRpc3RpY190aW1lX21zOwotICAgIGludCBjdXJyZW50
X2ZwcyA9Ci0gICAgICAgIChjdXJyZW50X2ZyYW1lc18gKiAxMDAwICsgc3RhdGlzdGljX3RpbWVf
bXMgLyAyKSAvIHN0YXRpc3RpY190aW1lX21zOwotICAgIEFMT0dEIDw8ICJFbmNvZGVkIGZyYW1l
czogIiA8PCBmcmFtZXNfZW5jb2RlZF8gPDwKLSAgICAgICAgIi4gQml0cmF0ZTogIiA8PCBjdXJy
ZW50X2JpdHJhdGUgPDwKLSAgICAgICAgIiwgdGFyZ2V0OiAiIDw8IGxhc3Rfc2V0X2JpdHJhdGVf
a2Jwc18gPDwgIiBrYnBzIiA8PAotICAgICAgICAiLCBmcHM6ICIgPDwgY3VycmVudF9mcHMgPDwK
LSAgICAgICAgIiwgZW5jVGltZTogIiA8PCAoY3VycmVudF9lbmNvZGluZ190aW1lX21zXyAvIGN1
cnJlbnRfZnJhbWVzX2RpdmlkZXIpIDw8Ci0gICAgICAgICIuIFFQOiAiIDw8IChjdXJyZW50X2Fj
Y19xcF8gLyBjdXJyZW50X2ZyYW1lc19kaXZpZGVyKSA8PAotICAgICAgICAiIGZvciBsYXN0ICIg
PDwgc3RhdGlzdGljX3RpbWVfbXMgPDwgIiBtcy4iOwotICAgIHN0YXRfc3RhcnRfdGltZV9tc18g
PSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgICBjdXJyZW50X2ZyYW1lc18gPSAwOwotICAgIGN1cnJl
bnRfYnl0ZXNfID0gMDsKLSAgICBjdXJyZW50X2FjY19xcF8gPSAwOwotICAgIGN1cnJlbnRfZW5j
b2RpbmdfdGltZV9tc18gPSAwOwotICB9Ci19Ci0KLWludDMyX3QgTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlcjo6TmV4dE5hbHVQb3NpdGlvbigKLSAgICB1aW50OF90ICpidWZmZXIsIHNpemVfdCBidWZm
ZXJfc2l6ZSkgewotICBpZiAoYnVmZmVyX3NpemUgPCBIMjY0X1NDX0xFTkdUSCkgewotICAgIHJl
dHVybiAtMTsKLSAgfQotICB1aW50OF90ICpoZWFkID0gYnVmZmVyOwotICAvLyBTZXQgZW5kIGJ1
ZmZlciBwb2ludGVyIHRvIDQgYnl0ZXMgYmVmb3JlIGFjdHVhbCBidWZmZXIgZW5kIHNvIHdlIGNh
bgotICAvLyBhY2Nlc3MgaGVhZFsxXSwgaGVhZFsyXSBhbmQgaGVhZFszXSBpbiBhIGxvb3Agd2l0
aG91dCBidWZmZXIgb3ZlcnJ1bi4KLSAgdWludDhfdCAqZW5kID0gYnVmZmVyICsgYnVmZmVyX3Np
emUgLSBIMjY0X1NDX0xFTkdUSDsKLQotICB3aGlsZSAoaGVhZCA8IGVuZCkgewotICAgIGlmICho
ZWFkWzBdKSB7Ci0gICAgICBoZWFkKys7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYg
KGhlYWRbMV0pIHsgLy8gZ290IDAweHgKLSAgICAgIGhlYWQgKz0gMjsKLSAgICAgIGNvbnRpbnVl
OwotICAgIH0KLSAgICBpZiAoaGVhZFsyXSkgeyAvLyBnb3QgMDAwMHh4Ci0gICAgICBoZWFkICs9
IDM7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0gICAgaWYgKGhlYWRbM10gIT0gMHgwMSkgeyAv
LyBnb3QgMDAwMDAweHgKLSAgICAgIGhlYWQrKzsgLy8geHggIT0gMSwgY29udGludWUgc2VhcmNo
aW5nLgotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIHJldHVybiAoaW50MzJfdCkoaGVhZCAt
IGJ1ZmZlcik7Ci0gIH0KLSAgcmV0dXJuIC0xOwotfQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0Vu
Y29kZXI6Ok9uRHJvcHBlZEZyYW1lKCkgewotICAvLyBNZXRob2RzIHJ1bm5pbmcgb24gdGhlIGNv
ZGVjIHRocmVhZCBzaG91bGQgY2FsbCBPbkRyb3BwZWRGcmFtZU9uQ29kZWNUaHJlYWQKLSAgLy8g
ZGlyZWN0bHkuCi0gIFJUQ19EQ0hFQ0soIWNvZGVjX3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZh
bGlkVGhyZWFkKCkpOwotICBjb2RlY190aHJlYWRfLT5JbnZva2U8dm9pZD4oCi0gICAgICBSVENf
RlJPTV9IRVJFLAotICAgICAgQmluZCgmTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcjo6T25Ecm9wcGVk
RnJhbWVPbkNvZGVjVGhyZWFkLCB0aGlzKSk7Ci19Ci0KLXZvaWQgTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlcjo6T25Ecm9wcGVkRnJhbWVPbkNvZGVjVGhyZWFkKCkgewotICBSVENfRENIRUNLKGNvZGVj
X3RocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICAvLyBSZXBvcnQgZHJv
cHBlZCBmcmFtZSB0byBxdWFsaXR5X3NjYWxlcl8uCi0gIGlmIChzY2FsZV8pCi0gICAgcXVhbGl0
eV9zY2FsZXJfLlJlcG9ydERyb3BwZWRGcmFtZSgpOwotfQotCi1jb25zdCBjaGFyKiBNZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyOjpJbXBsZW1lbnRhdGlvbk5hbWUoKSBjb25zdCB7Ci0gIHJldHVybiAi
TWVkaWFDb2RlYyI7Ci19Ci0KLU1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0b3J5OjpNZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyRmFjdG9yeSgpCi0gICAgOiBlZ2xfY29udGV4dF8obnVsbHB0cikgewot
ICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICBTY29wZWRM
b2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkpOwotICBqY2xhc3Mgal9lbmNvZGVyX2Ns
YXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciIp
OwotICBzdXBwb3J0ZWRfY29kZWNzXy5jbGVhcigpOwotCi0gIGJvb2wgaXNfdnA4X2h3X3N1cHBv
cnRlZCA9IGpuaS0+Q2FsbFN0YXRpY0Jvb2xlYW5NZXRob2QoCi0gICAgICBqX2VuY29kZXJfY2xh
c3MsCi0gICAgICBHZXRTdGF0aWNNZXRob2RJRChqbmksIGpfZW5jb2Rlcl9jbGFzcywgImlzVnA4
SHdTdXBwb3J0ZWQiLCAiKClaIikpOwotICBDSEVDS19FWENFUFRJT04oam5pKTsKLSAgaWYgKGlz
X3ZwOF9od19zdXBwb3J0ZWQpIHsKLSAgICBBTE9HRCA8PCAiVlA4IEhXIEVuY29kZXIgc3VwcG9y
dGVkLiI7Ci0gICAgc3VwcG9ydGVkX2NvZGVjc18ucHVzaF9iYWNrKGNyaWNrZXQ6OlZpZGVvQ29k
ZWMoIlZQOCIpKTsKLSAgfQotCi0gIGJvb2wgaXNfdnA5X2h3X3N1cHBvcnRlZCA9IGpuaS0+Q2Fs
bFN0YXRpY0Jvb2xlYW5NZXRob2QoCi0gICAgICBqX2VuY29kZXJfY2xhc3MsCi0gICAgICBHZXRT
dGF0aWNNZXRob2RJRChqbmksIGpfZW5jb2Rlcl9jbGFzcywgImlzVnA5SHdTdXBwb3J0ZWQiLCAi
KClaIikpOwotICBDSEVDS19FWENFUFRJT04oam5pKTsKLSAgaWYgKGlzX3ZwOV9od19zdXBwb3J0
ZWQpIHsKLSAgICBBTE9HRCA8PCAiVlA5IEhXIEVuY29kZXIgc3VwcG9ydGVkLiI7Ci0gICAgc3Vw
cG9ydGVkX2NvZGVjc18ucHVzaF9iYWNrKGNyaWNrZXQ6OlZpZGVvQ29kZWMoIlZQOSIpKTsKLSAg
fQotCi0gIGJvb2wgaXNfaDI2NF9od19zdXBwb3J0ZWQgPSBqbmktPkNhbGxTdGF0aWNCb29sZWFu
TWV0aG9kKAotICAgICAgal9lbmNvZGVyX2NsYXNzLAotICAgICAgR2V0U3RhdGljTWV0aG9kSUQo
am5pLCBqX2VuY29kZXJfY2xhc3MsICJpc0gyNjRId1N1cHBvcnRlZCIsICIoKVoiKSk7Ci0gIENI
RUNLX0VYQ0VQVElPTihqbmkpOwotICBpZiAoaXNfaDI2NF9od19zdXBwb3J0ZWQpIHsKLSAgICBB
TE9HRCA8PCAiSC4yNjQgSFcgRW5jb2RlciBzdXBwb3J0ZWQuIjsKLSAgICBzdXBwb3J0ZWRfY29k
ZWNzXy5wdXNoX2JhY2soY3JpY2tldDo6VmlkZW9Db2RlYygiSDI2NCIpKTsKLSAgfQotfQotCi1N
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeTo6fk1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0
b3J5KCkgewotICBBTE9HRCA8PCAiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3RvcnkgZHRvciI7
Ci0gIGlmIChlZ2xfY29udGV4dF8pIHsKLSAgICBKTklFbnYqIGpuaSA9IEF0dGFjaEN1cnJlbnRU
aHJlYWRJZk5lZWRlZCgpOwotICAgIGpuaS0+RGVsZXRlR2xvYmFsUmVmKGVnbF9jb250ZXh0Xyk7
Ci0gIH0KLX0KLQotdm9pZCBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeTo6U2V0RUdMQ29u
dGV4dCgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBlZ2xfY29udGV4dCkgewotICBBTE9HRCA8
PCAiTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3Rvcnk6OlNldEVHTENvbnRleHQiOwotICBpZiAo
ZWdsX2NvbnRleHRfKSB7Ci0gICAgam5pLT5EZWxldGVHbG9iYWxSZWYoZWdsX2NvbnRleHRfKTsK
LSAgICBlZ2xfY29udGV4dF8gPSBudWxscHRyOwotICB9Ci0gIGVnbF9jb250ZXh0XyA9IGpuaS0+
TmV3R2xvYmFsUmVmKGVnbF9jb250ZXh0KTsKLSAgaWYgKENoZWNrRXhjZXB0aW9uKGpuaSkpIHsK
LSAgICBBTE9HRSA8PCAiZXJyb3IgY2FsbGluZyBOZXdHbG9iYWxSZWYgZm9yIEVHTCBDb250ZXh0
LiI7Ci0gIH0KLX0KLQotd2VicnRjOjpWaWRlb0VuY29kZXIqIE1lZGlhQ29kZWNWaWRlb0VuY29k
ZXJGYWN0b3J5OjpDcmVhdGVWaWRlb0VuY29kZXIoCi0gICAgY29uc3QgY3JpY2tldDo6VmlkZW9D
b2RlYyYgY29kZWMpIHsKLSAgaWYgKHN1cHBvcnRlZF9jb2RlY3NfLmVtcHR5KCkpIHsKLSAgICBB
TE9HVyA8PCAiTm8gSFcgdmlkZW8gZW5jb2RlciBmb3IgY29kZWMgIiA8PCBjb2RlYy5uYW1lOwot
ICAgIHJldHVybiBudWxscHRyOwotICB9Ci0gIGlmIChGaW5kTWF0Y2hpbmdDb2RlYyhzdXBwb3J0
ZWRfY29kZWNzXywgY29kZWMpKSB7Ci0gICAgQUxPR0QgPDwgIkNyZWF0ZSBIVyB2aWRlbyBlbmNv
ZGVyIGZvciAiIDw8IGNvZGVjLm5hbWU7Ci0gICAgY29uc3QgVmlkZW9Db2RlY1R5cGUgdHlwZSA9
IGNyaWNrZXQ6OkNvZGVjVHlwZUZyb21OYW1lKGNvZGVjLm5hbWUpOwotICAgIHJldHVybiBuZXcg
TWVkaWFDb2RlY1ZpZGVvRW5jb2RlcihBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKSwgdHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWdsX2NvbnRleHRfKTsK
LSAgfQotICBBTE9HVyA8PCAiQ2FuIG5vdCBmaW5kIEhXIHZpZGVvIGVuY29kZXIgZm9yIHR5cGUg
IiA8PCBjb2RlYy5uYW1lOwotICByZXR1cm4gbnVsbHB0cjsKLX0KLQotY29uc3Qgc3RkOjp2ZWN0
b3I8Y3JpY2tldDo6VmlkZW9Db2RlYz4mCi1NZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeTo6
c3VwcG9ydGVkX2NvZGVjcygpIGNvbnN0IHsKLSAgcmV0dXJuIHN1cHBvcnRlZF9jb2RlY3NfOwot
fQotCi12b2lkIE1lZGlhQ29kZWNWaWRlb0VuY29kZXJGYWN0b3J5OjpEZXN0cm95VmlkZW9FbmNv
ZGVyKAotICAgIHdlYnJ0Yzo6VmlkZW9FbmNvZGVyKiBlbmNvZGVyKSB7Ci0gIEFMT0dEIDw8ICJE
ZXN0cm95IHZpZGVvIGVuY29kZXIuIjsKLSAgZGVsZXRlIGVuY29kZXI7Ci19Ci0KLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGNfam5pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmkuaAkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQv
am5pL2FuZHJvaWRtZWRpYWVuY29kZXJfam5pLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19BUElfSkFWQV9KTklfQU5E
Uk9JRE1FRElBRU5DT0RFUl9KTklfSF8KLSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRS
T0lETUVESUFFTkNPREVSX0pOSV9IXwotCi0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAi
d2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9t
ZWRpYS9lbmdpbmUvd2VicnRjdmlkZW9lbmNvZGVyZmFjdG9yeS5oIgotCi1uYW1lc3BhY2Ugd2Vi
cnRjX2puaSB7Ci0KLS8vIEltcGxlbWVudGF0aW9uIG9mIEFuZHJvaWQgTWVkaWFDb2RlYyBiYXNl
ZCBlbmNvZGVyIGZhY3RvcnkuCi1jbGFzcyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyRmFjdG9yeQot
ICAgIDogcHVibGljIGNyaWNrZXQ6OldlYlJ0Y1ZpZGVvRW5jb2RlckZhY3RvcnkgewotIHB1Ymxp
YzoKLSAgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlckZhY3RvcnkoKTsKLSAgdmlydHVhbCB+TWVkaWFD
b2RlY1ZpZGVvRW5jb2RlckZhY3RvcnkoKTsKLQotICB2b2lkIFNldEVHTENvbnRleHQoSk5JRW52
KiBqbmksIGpvYmplY3QgZWdsX2NvbnRleHQpOwotCi0gIC8vIFdlYlJ0Y1ZpZGVvRW5jb2RlckZh
Y3RvcnkgaW1wbGVtZW50YXRpb24uCi0gIHdlYnJ0Yzo6VmlkZW9FbmNvZGVyKiBDcmVhdGVWaWRl
b0VuY29kZXIoCi0gICAgICBjb25zdCBjcmlja2V0OjpWaWRlb0NvZGVjJiBjb2RlYykgb3ZlcnJp
ZGU7Ci0gIGNvbnN0IHN0ZDo6dmVjdG9yPGNyaWNrZXQ6OlZpZGVvQ29kZWM+JiBzdXBwb3J0ZWRf
Y29kZWNzKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gIHZvaWQgRGVzdHJveVZpZGVvRW5jb2Rlcih3ZWJy
dGM6OlZpZGVvRW5jb2RlciogZW5jb2Rlcikgb3ZlcnJpZGU7Ci0KLSBwcml2YXRlOgotICAvLyBE
aXNhYmxlIG92ZXJsb2FkZWQgdmlydHVhbCBmdW5jdGlvbiB3YXJuaW5nLiBUT0RPKG1hZ2plZCk6
IFJlbW92ZSBvbmNlCi0gIC8vIGh0dHA6Ly9jcmJ1Zy93ZWJydGMvNjQwMiBpcyBmaXhlZC4KLSAg
dXNpbmcgY3JpY2tldDo6V2ViUnRjVmlkZW9FbmNvZGVyRmFjdG9yeTo6Q3JlYXRlVmlkZW9FbmNv
ZGVyOwotCi0gIGpvYmplY3QgZWdsX2NvbnRleHRfOwotCi0gIC8vIEVtcHR5IGlmIHBsYXRmb3Jt
IHN1cHBvcnQgaXMgbGFja2luZywgY29uc3QgYWZ0ZXIgY3RvciByZXR1cm5zLgotICBzdGQ6OnZl
Y3Rvcjxjcmlja2V0OjpWaWRlb0NvZGVjPiBzdXBwb3J0ZWRfY29kZWNzXzsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSB3ZWJydGNfam5pCi0KLSNlbmRpZiAgLy8gV0VCUlRDX0FQSV9KQVZBX0pOSV9B
TkRST0lETUVESUFFTkNPREVSX0pOSV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRtZXRyaWNzX2puaS5jYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1ldHJpY3Nfam5pLmNjCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
bmkvYW5kcm9pZG1ldHJpY3Nfam5pLmNjCShub25leGlzdGVudCkKQEAgLTEsODQgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPG1hcD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0K
LSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmgi
Ci0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgiCi0jaW5jbHVk
ZSAid2VicnRjL3N5c3RlbV93cmFwcGVycy9pbmNsdWRlL21ldHJpY3MuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvbWV0cmljc19kZWZhdWx0LmgiCi0KLS8vIEVu
YWJsZXMgY29sbGVjdGlvbiBvZiBuYXRpdmUgaGlzdG9ncmFtcyBhbmQgY3JlYXRpbmcgdGhlbS4K
LW5hbWVzcGFjZSB3ZWJydGNfam5pIHsKLQotSk9XKHZvaWQsIE1ldHJpY3NfbmF0aXZlRW5hYmxl
KShKTklFbnYqIGpuaSwgamNsYXNzKSB7Ci0gIHdlYnJ0Yzo6bWV0cmljczo6RW5hYmxlKCk7Ci19
Ci0KLS8vIEdldHMgYW5kIGNsZWFycyBuYXRpdmUgaGlzdG9ncmFtcy4KLUpPVyhqb2JqZWN0LCBN
ZXRyaWNzX25hdGl2ZUdldEFuZFJlc2V0KShKTklFbnYqIGpuaSwgamNsYXNzKSB7Ci0gIGpjbGFz
cyBqX21ldHJpY3NfY2xhc3MgPSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZXRyaWNzIik7
Ci0gIGptZXRob2RJRCBqX2FkZCA9Ci0gICAgICBHZXRNZXRob2RJRChqbmksIGpfbWV0cmljc19j
bGFzcywgImFkZCIsCi0gICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0xvcmcv
d2VicnRjL01ldHJpY3MkSGlzdG9ncmFtSW5mbzspViIpOwotICBqY2xhc3Mgal9pbmZvX2NsYXNz
ID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWV0cmljcyRIaXN0b2dyYW1JbmZvIik7Ci0g
IGptZXRob2RJRCBqX2FkZF9zYW1wbGUgPSBHZXRNZXRob2RJRChqbmksIGpfaW5mb19jbGFzcywg
ImFkZFNhbXBsZSIsICIoSUkpViIpOwotCi0gIC8vIENyZWF0ZSB8TWV0cmljc3wuCi0gIGpvYmpl
Y3Qgal9tZXRyaWNzID0gam5pLT5OZXdPYmplY3QoCi0gICAgICBqX21ldHJpY3NfY2xhc3MsIEdl
dE1ldGhvZElEKGpuaSwgal9tZXRyaWNzX2NsYXNzLCAiPGluaXQ+IiwgIigpViIpKTsKLQotICBz
dGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjp1bmlxdWVfcHRyPHdlYnJ0Yzo6bWV0cmljczo6U2Ft
cGxlSW5mbz4+Ci0gICAgICBoaXN0b2dyYW1zOwotICB3ZWJydGM6Om1ldHJpY3M6OkdldEFuZFJl
c2V0KCZoaXN0b2dyYW1zKTsKLSAgZm9yIChjb25zdCBhdXRvJiBrdiA6IGhpc3RvZ3JhbXMpIHsK
LSAgICAvLyBDcmVhdGUgYW5kIGFkZCBzYW1wbGVzIHRvIHxIaXN0b2dyYW1JbmZvfC4KLSAgICBq
b2JqZWN0IGpfaW5mbyA9IGpuaS0+TmV3T2JqZWN0KAotICAgICAgICBqX2luZm9fY2xhc3MsIEdl
dE1ldGhvZElEKGpuaSwgal9pbmZvX2NsYXNzLCAiPGluaXQ+IiwgIihJSUkpViIpLAotICAgICAg
ICBrdi5zZWNvbmQtPm1pbiwga3Yuc2Vjb25kLT5tYXgsCi0gICAgICAgIHN0YXRpY19jYXN0PGlu
dD4oa3Yuc2Vjb25kLT5idWNrZXRfY291bnQpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHNhbXBs
ZSA6IGt2LnNlY29uZC0+c2FtcGxlcykgewotICAgICAgam5pLT5DYWxsVm9pZE1ldGhvZChqX2lu
Zm8sIGpfYWRkX3NhbXBsZSwgc2FtcGxlLmZpcnN0LCBzYW1wbGUuc2Vjb25kKTsKLSAgICB9Ci0g
ICAgLy8gQWRkIHxIaXN0b2dyYW1JbmZvfCB0byB8TWV0cmljc3wuCi0gICAganN0cmluZyBqX25h
bWUgPSBqbmktPk5ld1N0cmluZ1VURihrdi5maXJzdC5jX3N0cigpKTsKLSAgICBqbmktPkNhbGxW
b2lkTWV0aG9kKGpfbWV0cmljcywgal9hZGQsIGpfbmFtZSwgal9pbmZvKTsKLSAgICBqbmktPkRl
bGV0ZUxvY2FsUmVmKGpfbmFtZSk7Ci0gICAgam5pLT5EZWxldGVMb2NhbFJlZihqX2luZm8pOwot
ICB9Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpOwotICByZXR1cm4gal9tZXRyaWNzOwotfQotCi1K
T1coamxvbmcsIE1ldHJpY3NfMDAwMjRIaXN0b2dyYW1fbmF0aXZlQ3JlYXRlQ291bnRzKQotKEpO
SUVudiogam5pLCBqY2xhc3MsIGpzdHJpbmcgal9uYW1lLCBqaW50IG1pbiwgamludCBtYXgsIGpp
bnQgYnVja2V0cykgewotICBzdGQ6OnN0cmluZyBuYW1lID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwg
al9uYW1lKTsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIoCi0gICAgICB3ZWJydGM6Om1ldHJp
Y3M6Okhpc3RvZ3JhbUZhY3RvcnlHZXRDb3VudHMobmFtZSwgbWluLCBtYXgsIGJ1Y2tldHMpKTsK
LX0KLQotSk9XKGpsb25nLCBNZXRyaWNzXzAwMDI0SGlzdG9ncmFtX25hdGl2ZUNyZWF0ZUVudW1l
cmF0aW9uKQotKEpOSUVudiogam5pLCBqY2xhc3MsIGpzdHJpbmcgal9uYW1lLCBqaW50IG1heCkg
ewotICBzdGQ6OnN0cmluZyBuYW1lID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9uYW1lKTsKLSAg
cmV0dXJuIGpsb25nRnJvbVBvaW50ZXIoCi0gICAgICB3ZWJydGM6Om1ldHJpY3M6Okhpc3RvZ3Jh
bUZhY3RvcnlHZXRFbnVtZXJhdGlvbihuYW1lLCBtYXgpKTsKLX0KLQotSk9XKHZvaWQsIE1ldHJp
Y3NfMDAwMjRIaXN0b2dyYW1fbmF0aXZlQWRkU2FtcGxlKQotKEpOSUVudiogam5pLCBqY2xhc3Ms
IGpsb25nIGhpc3RvZ3JhbSwgamludCBzYW1wbGUpIHsKLSAgaWYgKGhpc3RvZ3JhbSkgewotICAg
IEhpc3RvZ3JhbUFkZChyZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6bWV0cmljczo6SGlzdG9ncmFt
Kj4oaGlzdG9ncmFtKSwKLSAgICAgICAgICAgICAgICAgc2FtcGxlKTsKLSAgfQotfQotCi19ICAv
LyBuYW1lc3BhY2Ugd2VicnRjX2puaQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRuZXR3b3JrbW9uaXRvcl9qbmku
Y2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRuZXR3b3JrbW9uaXRvcl9qbmkuY2MJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkL2puaS9hbmRyb2lkbmV0d29ya21vbml0b3Jfam5pLmNjCShub25leGlzdGVudCkK
QEAgLTEsNDM1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMv
YXBpL2FuZHJvaWQvam5pL2FuZHJvaWRuZXR3b3JrbW9uaXRvcl9qbmkuaCIKLQotI2luY2x1ZGUg
PGRsZmNuLmg+Ci0vLyBUaGlzIHdhcyBhZGRlZCBpbiBMb2xsaXBvcCB0byBkbGZjbi5oCi0jZGVm
aW5lIFJUTERfTk9MT0FEIDQKLQotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xh
c3NyZWZlcmVuY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2pu
aV9oZWxwZXJzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYmluZC5oIgotI2luY2x1ZGUgIndl
YnJ0Yy9iYXNlL2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2lwYWRkcmVzcy5oIgot
Ci1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLWVudW0gQW5kcm9pZFNka1ZlcnNpb24gewotICBT
REtfVkVSU0lPTl9MT0xMSVBPUCA9IDIxLAotICBTREtfVkVSU0lPTl9NQVJTSE1BTExPVyA9IDIz
Ci19OwotCi1qb2JqZWN0IEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6YXBwbGljYXRpb25fY29udGV4
dF8gPSBudWxscHRyOwotaW50IEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6YW5kcm9pZF9zZGtfaW50
XyA9IDA7Ci0KLXN0YXRpYyBOZXR3b3JrVHlwZSBHZXROZXR3b3JrVHlwZUZyb21KYXZhKEpOSUVu
diogam5pLCBqb2JqZWN0IGpfbmV0d29ya190eXBlKSB7Ci0gIHN0ZDo6c3RyaW5nIGVudW1fbmFt
ZSA9Ci0gICAgICBHZXRKYXZhRW51bU5hbWUoam5pLCAib3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRv
ckF1dG9EZXRlY3QkQ29ubmVjdGlvblR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgIGpfbmV0
d29ya190eXBlKTsKLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl9VTktOT1dOIikgewot
ICAgIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS19VTktOT1dOOwotICB9Ci0gIGlmIChlbnVt
X25hbWUgPT0gIkNPTk5FQ1RJT05fRVRIRVJORVQiKSB7Ci0gICAgcmV0dXJuIE5ldHdvcmtUeXBl
OjpORVRXT1JLX0VUSEVSTkVUOwotICB9Ci0gIGlmIChlbnVtX25hbWUgPT0gIkNPTk5FQ1RJT05f
V0lGSSIpIHsKLSAgICByZXR1cm4gTmV0d29ya1R5cGU6Ok5FVFdPUktfV0lGSTsKLSAgfQotICBp
ZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9OXzRHIikgewotICAgIHJldHVybiBOZXR3b3JrVHlw
ZTo6TkVUV09SS180RzsKLSAgfQotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9OXzNHIikg
ewotICAgIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09SS18zRzsKLSAgfQotICBpZiAoZW51bV9u
YW1lID09ICJDT05ORUNUSU9OXzJHIikgewotICAgIHJldHVybiBOZXR3b3JrVHlwZTo6TkVUV09S
S18yRzsKLSAgfQotICBpZiAoZW51bV9uYW1lID09ICJDT05ORUNUSU9OX1VOS05PV05fQ0VMTFVM
QVIiKSB7Ci0gICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLX1VOS05PV05fQ0VMTFVMQVI7
Ci0gIH0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQ09OTkVDVElPTl9CTFVFVE9PVEgiKSB7Ci0gICAg
cmV0dXJuIE5ldHdvcmtUeXBlOjpORVRXT1JLX0JMVUVUT09USDsKLSAgfQotICBpZiAoZW51bV9u
YW1lID09ICJDT05ORUNUSU9OX05PTkUiKSB7Ci0gICAgcmV0dXJuIE5ldHdvcmtUeXBlOjpORVRX
T1JLX05PTkU7Ci0gIH0KLSAgQVNTRVJUKGZhbHNlKTsKLSAgcmV0dXJuIE5ldHdvcmtUeXBlOjpO
RVRXT1JLX1VOS05PV047Ci19Ci0KLXN0YXRpYyBydGM6OkFkYXB0ZXJUeXBlIEFkYXB0ZXJUeXBl
RnJvbU5ldHdvcmtUeXBlKE5ldHdvcmtUeXBlIG5ldHdvcmtfdHlwZSkgewotICBzd2l0Y2ggKG5l
dHdvcmtfdHlwZSkgewotICAgIGNhc2UgTkVUV09SS19VTktOT1dOOgotICAgICAgcmV0dXJuIHJ0
Yzo6QURBUFRFUl9UWVBFX1VOS05PV047Ci0gICAgY2FzZSBORVRXT1JLX0VUSEVSTkVUOgotICAg
ICAgcmV0dXJuIHJ0Yzo6QURBUFRFUl9UWVBFX0VUSEVSTkVUOwotICAgIGNhc2UgTkVUV09SS19X
SUZJOgotICAgICAgcmV0dXJuIHJ0Yzo6QURBUFRFUl9UWVBFX1dJRkk7Ci0gICAgY2FzZSBORVRX
T1JLXzRHOgotICAgIGNhc2UgTkVUV09SS18zRzoKLSAgICBjYXNlIE5FVFdPUktfMkc6Ci0gICAg
Y2FzZSBORVRXT1JLX1VOS05PV05fQ0VMTFVMQVI6Ci0gICAgICByZXR1cm4gcnRjOjpBREFQVEVS
X1RZUEVfQ0VMTFVMQVI7Ci0gICAgY2FzZSBORVRXT1JLX0JMVUVUT09USDoKLSAgICAgIC8vIFRo
ZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgbWFwcGluZyBmb3IgYmx1ZXRvb3RoIG5ldHdvcmtzLgot
ICAgICAgLy8gTWFwIGl0IHRvIFZQTiBmb3Igbm93LgotICAgICAgcmV0dXJuIHJ0Yzo6QURBUFRF
Ul9UWVBFX1ZQTjsKLSAgICBkZWZhdWx0OgotICAgICAgUlRDX0RDSEVDSyhmYWxzZSkgPDwgIklu
dmFsaWQgbmV0d29yayB0eXBlICIgPDwgbmV0d29ya190eXBlOwotICAgICAgcmV0dXJuIHJ0Yzo6
QURBUFRFUl9UWVBFX1VOS05PV047Ci0gIH0KLX0KLQotc3RhdGljIHJ0Yzo6SVBBZGRyZXNzIEdl
dElQQWRkcmVzc0Zyb21KYXZhKEpOSUVudiogam5pLCBqb2JqZWN0IGpfaXBfYWRkcmVzcykgewot
ICBqY2xhc3Mgal9pcF9hZGRyZXNzX2NsYXNzID0gR2V0T2JqZWN0Q2xhc3Moam5pLCBqX2lwX2Fk
ZHJlc3MpOwotICBqZmllbGRJRCBqX2FkZHJlc3NfaWQgPSBHZXRGaWVsZElEKGpuaSwgal9pcF9h
ZGRyZXNzX2NsYXNzLCAiYWRkcmVzcyIsICJbQiIpOwotICBqYnl0ZUFycmF5IGpfYWRkcmVzc2Vz
ID0KLSAgICAgIHN0YXRpY19jYXN0PGpieXRlQXJyYXk+KEdldE9iamVjdEZpZWxkKGpuaSwgal9p
cF9hZGRyZXNzLCBqX2FkZHJlc3NfaWQpKTsKLSAgc2l6ZV90IGFkZHJlc3NfbGVuZ3RoID0gam5p
LT5HZXRBcnJheUxlbmd0aChqX2FkZHJlc3Nlcyk7Ci0gIGpieXRlKiBhZGRyX2FycmF5ID0gam5p
LT5HZXRCeXRlQXJyYXlFbGVtZW50cyhqX2FkZHJlc3NlcywgbnVsbHB0cik7Ci0gIENIRUNLX0VY
Q0VQVElPTihqbmkpIDw8ICJFcnJvciBkdXJpbmcgR2V0SVBBZGRyZXNzRnJvbUphdmEiOwotICBp
ZiAoYWRkcmVzc19sZW5ndGggPT0gNCkgewotICAgIC8vIElQNAotICAgIHN0cnVjdCBpbl9hZGRy
IGlwNF9hZGRyOwotICAgIG1lbWNweSgmaXA0X2FkZHIuc19hZGRyLCBhZGRyX2FycmF5LCA0KTsK
LSAgICBqbmktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhqX2FkZHJlc3NlcywgYWRkcl9hcnJh
eSwgSk5JX0FCT1JUKTsKLSAgICByZXR1cm4gcnRjOjpJUEFkZHJlc3MoaXA0X2FkZHIpOwotICB9
Ci0gIC8vIElQNgotICBSVENfQ0hFQ0soYWRkcmVzc19sZW5ndGggPT0gMTYpOwotICBzdHJ1Y3Qg
aW42X2FkZHIgaXA2X2FkZHI7Ci0gIG1lbWNweShpcDZfYWRkci5zNl9hZGRyLCBhZGRyX2FycmF5
LCBhZGRyZXNzX2xlbmd0aCk7Ci0gIGpuaS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRzKGpfYWRk
cmVzc2VzLCBhZGRyX2FycmF5LCBKTklfQUJPUlQpOwotICByZXR1cm4gcnRjOjpJUEFkZHJlc3Mo
aXA2X2FkZHIpOwotfQotCi1zdGF0aWMgdm9pZCBHZXRJUEFkZHJlc3Nlc0Zyb21KYXZhKEpOSUVu
diogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0QXJyYXkg
al9pcF9hZGRyZXNzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dmVjdG9yPHJ0Yzo6SVBBZGRyZXNzPiogaXBfYWRkcmVzc2VzKSB7Ci0gIGlwX2FkZHJlc3Nlcy0+
Y2xlYXIoKTsKLSAgc2l6ZV90IG51bV9hZGRyZXNzZXMgPSBqbmktPkdldEFycmF5TGVuZ3RoKGpf
aXBfYWRkcmVzc2VzKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgIkVycm9yIGR1cmluZyBH
ZXRBcnJheUxlbmd0aCI7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtX2FkZHJlc3Nlczsg
KytpKSB7Ci0gICAgam9iamVjdCBqX2lwX2FkZHJlc3MgPSBqbmktPkdldE9iamVjdEFycmF5RWxl
bWVudChqX2lwX2FkZHJlc3NlcywgaSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgIkVy
cm9yIGR1cmluZyBHZXRPYmplY3RBcnJheUVsZW1lbnQiOwotICAgIHJ0Yzo6SVBBZGRyZXNzIGlw
ID0gR2V0SVBBZGRyZXNzRnJvbUphdmEoam5pLCBqX2lwX2FkZHJlc3MpOwotICAgIGlwX2FkZHJl
c3Nlcy0+cHVzaF9iYWNrKGlwKTsKLSAgfQotfQotCi1zdGF0aWMgTmV0d29ya0luZm9ybWF0aW9u
IEdldE5ldHdvcmtJbmZvcm1hdGlvbkZyb21KYXZhKAotICAgIEpOSUVudiogam5pLAotICAgIGpv
YmplY3Qgal9uZXR3b3JrX2luZm8pIHsKLSAgamNsYXNzIGpfbmV0d29ya19pbmZvX2NsYXNzID0g
R2V0T2JqZWN0Q2xhc3Moam5pLCBqX25ldHdvcmtfaW5mbyk7Ci0gIGpmaWVsZElEIGpfaW50ZXJm
YWNlX25hbWVfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfbmV0d29ya19pbmZvX2NsYXNz
LCAibmFtZSIsICJMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgamZpZWxkSUQgal9oYW5kbGVfaWQg
PSBHZXRGaWVsZElEKGpuaSwgal9uZXR3b3JrX2luZm9fY2xhc3MsICJoYW5kbGUiLCAiSiIpOwot
ICBqZmllbGRJRCBqX3R5cGVfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfbmV0d29ya19p
bmZvX2NsYXNzLCAidHlwZSIsCi0gICAgICAgICAgICAgICAgICJMb3JnL3dlYnJ0Yy9OZXR3b3Jr
TW9uaXRvckF1dG9EZXRlY3QkQ29ubmVjdGlvblR5cGU7Iik7Ci0gIGpmaWVsZElEIGpfaXBfYWRk
cmVzc2VzX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX25ldHdvcmtfaW5mb19jbGFzcywg
ImlwQWRkcmVzc2VzIiwKLSAgICAgICAgICAgICAgICAgIltMb3JnL3dlYnJ0Yy9OZXR3b3JrTW9u
aXRvckF1dG9EZXRlY3QkSVBBZGRyZXNzOyIpOwotCi0gIE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3
b3JrX2luZm87Ci0gIG5ldHdvcmtfaW5mby5pbnRlcmZhY2VfbmFtZSA9IEphdmFUb1N0ZFN0cmlu
ZygKLSAgICAgIGpuaSwgR2V0U3RyaW5nRmllbGQoam5pLCBqX25ldHdvcmtfaW5mbywgal9pbnRl
cmZhY2VfbmFtZV9pZCkpOwotICBuZXR3b3JrX2luZm8uaGFuZGxlID0gc3RhdGljX2Nhc3Q8TmV0
d29ya0hhbmRsZT4oCi0gICAgICBHZXRMb25nRmllbGQoam5pLCBqX25ldHdvcmtfaW5mbywgal9o
YW5kbGVfaWQpKTsKLSAgbmV0d29ya19pbmZvLnR5cGUgPSBHZXROZXR3b3JrVHlwZUZyb21KYXZh
KAotICAgICAgam5pLCBHZXRPYmplY3RGaWVsZChqbmksIGpfbmV0d29ya19pbmZvLCBqX3R5cGVf
aWQpKTsKLSAgam9iamVjdEFycmF5IGpfaXBfYWRkcmVzc2VzID0gc3RhdGljX2Nhc3Q8am9iamVj
dEFycmF5PigKLSAgICAgIEdldE9iamVjdEZpZWxkKGpuaSwgal9uZXR3b3JrX2luZm8sIGpfaXBf
YWRkcmVzc2VzX2lkKSk7Ci0gIEdldElQQWRkcmVzc2VzRnJvbUphdmEoam5pLCBqX2lwX2FkZHJl
c3NlcywgJm5ldHdvcmtfaW5mby5pcF9hZGRyZXNzZXMpOwotICByZXR1cm4gbmV0d29ya19pbmZv
OwotfQotCi1zdGQ6OnN0cmluZyBOZXR3b3JrSW5mb3JtYXRpb246OlRvU3RyaW5nKCkgY29uc3Qg
ewotICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKLSAgc3MgPDwgIk5ldEluZm9bbmFtZSAiIDw8IGlu
dGVyZmFjZV9uYW1lIDw8ICI7IGhhbmRsZSAiIDw8IGhhbmRsZSA8PCAiOyB0eXBlICIKLSAgICAg
PDwgdHlwZSA8PCAiOyBhZGRyZXNzIjsKLSAgZm9yIChjb25zdCBydGM6OklQQWRkcmVzcyBhZGRy
ZXNzIDogaXBfYWRkcmVzc2VzKSB7Ci0gICAgc3MgPDwgIiAiIDw8IGFkZHJlc3MuVG9TdHJpbmco
KTsKLSAgfQotICBzcyA8PCAiXSI7Ci0gIHJldHVybiBzcy5zdHIoKTsKLX0KLQotLy8gc3RhdGlj
Ci12b2lkIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6U2V0QW5kcm9pZENvbnRleHQoSk5JRW52KiBq
bmksIGpvYmplY3QgY29udGV4dCkgewotICBpZiAoYXBwbGljYXRpb25fY29udGV4dF8pIHsKLSAg
ICBqbmktPkRlbGV0ZUdsb2JhbFJlZihhcHBsaWNhdGlvbl9jb250ZXh0Xyk7Ci0gIH0KLSAgYXBw
bGljYXRpb25fY29udGV4dF8gPSBOZXdHbG9iYWxSZWYoam5pLCBjb250ZXh0KTsKLX0KLQotQW5k
cm9pZE5ldHdvcmtNb25pdG9yOjpBbmRyb2lkTmV0d29ya01vbml0b3IoKQotICAgIDogal9uZXR3
b3JrX21vbml0b3JfY2xhc3NfKGpuaSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZpbmRDbGFzcyhqbmkoKSwgIm9yZy93ZWJydGMvTmV0d29ya01vbml0b3IiKSksCi0gICAgICBq
X25ldHdvcmtfbW9uaXRvcl8oCi0gICAgICAgICAgam5pKCksCi0gICAgICAgICAgam5pKCktPkNh
bGxTdGF0aWNPYmplY3RNZXRob2QoCi0gICAgICAgICAgICAgICpqX25ldHdvcmtfbW9uaXRvcl9j
bGFzc18sCi0gICAgICAgICAgICAgIEdldFN0YXRpY01ldGhvZElEKAotICAgICAgICAgICAgICAg
ICAgam5pKCksCi0gICAgICAgICAgICAgICAgICAqal9uZXR3b3JrX21vbml0b3JfY2xhc3NfLAot
ICAgICAgICAgICAgICAgICAgImluaXQiLAotICAgICAgICAgICAgICAgICAgIihMYW5kcm9pZC9j
b250ZW50L0NvbnRleHQ7KUxvcmcvd2VicnRjL05ldHdvcmtNb25pdG9yOyIpLAotICAgICAgICAg
ICAgICBhcHBsaWNhdGlvbl9jb250ZXh0XykpIHsKLSAgQVNTRVJUKGFwcGxpY2F0aW9uX2NvbnRl
eHRfICE9IG51bGxwdHIpOwotICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJFcnJvciBkdXJp
bmcgTmV0d29ya01vbml0b3IuaW5pdCI7Ci0gIGlmIChhbmRyb2lkX3Nka19pbnRfIDw9IDApIHsK
LSAgICBqbWV0aG9kSUQgbSA9IEdldFN0YXRpY01ldGhvZElEKGpuaSgpLCAqal9uZXR3b3JrX21v
bml0b3JfY2xhc3NfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuZHJv
aWRTZGtJbnQiLCAiKClJIik7Ci0gICAgYW5kcm9pZF9zZGtfaW50XyA9IGpuaSgpLT5DYWxsU3Rh
dGljSW50TWV0aG9kKCpqX25ldHdvcmtfbW9uaXRvcl9jbGFzc18sIG0pOwotICAgIENIRUNLX0VY
Q0VQVElPTihqbmkoKSkgPDwgIkVycm9yIGR1cmluZyBOZXR3b3JrTW9uaXRvci5hbmRyb2lkU2Rr
SW50IjsKLSAgfQotfQotCi12b2lkIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6U3RhcnQoKSB7Ci0g
IFJUQ19DSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYg
KHN0YXJ0ZWRfKSB7Ci0gICAgcmV0dXJuOwotICB9Ci0gIHN0YXJ0ZWRfID0gdHJ1ZTsKLQotICAv
LyBUaGlzIGlzIGtpbmQgb2YgbWFnaWMgYmVoYXZpb3IsIGJ1dCBkb2luZyB0aGlzIGFsbG93cyB0
aGUgU29ja2V0U2VydmVyIHRvCi0gIC8vIHVzZSB0aGlzIGFzIGEgTmV0d29ya0JpbmRlciB0byBi
aW5kIHNvY2tldHMgb24gYSBwYXJ0aWN1bGFyIG5ldHdvcmsgd2hlbgotICAvLyBpdCBjcmVhdGVz
IHNvY2tldHMuCi0gIHdvcmtlcl90aHJlYWQoKS0+c29ja2V0c2VydmVyKCktPnNldF9uZXR3b3Jr
X2JpbmRlcih0aGlzKTsKLQotICBqbWV0aG9kSUQgbSA9Ci0gICAgICBHZXRNZXRob2RJRChqbmko
KSwgKmpfbmV0d29ya19tb25pdG9yX2NsYXNzXywgInN0YXJ0TW9uaXRvcmluZyIsICIoSilWIik7
Ci0gIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9uZXR3b3JrX21vbml0b3JfLCBtLCBqbG9uZ0Zy
b21Qb2ludGVyKHRoaXMpKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiRXJyb3IgZHVy
aW5nIENhbGxWb2lkTWV0aG9kIjsKLX0KLQotdm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6OlN0
b3AoKSB7Ci0gIFJUQ19DSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKLSAgaWYgKCFzdGFydGVkXykgewotICAgIHJldHVybjsKLSAgfQotICBzdGFydGVkXyA9IGZh
bHNlOwotCi0gIC8vIE9uY2UgdGhlIG5ldHdvcmsgbW9uaXRvciBzdG9wcywgaXQgd2lsbCBjbGVh
ciBhbGwgbmV0d29yayBpbmZvcm1hdGlvbiBhbmQKLSAgLy8gaXQgd29uJ3QgZmluZCB0aGUgbmV0
d29yayBoYW5kbGUgdG8gYmluZCBhbnl3YXkuCi0gIGlmICh3b3JrZXJfdGhyZWFkKCktPnNvY2tl
dHNlcnZlcigpLT5uZXR3b3JrX2JpbmRlcigpID09IHRoaXMpIHsKLSAgICB3b3JrZXJfdGhyZWFk
KCktPnNvY2tldHNlcnZlcigpLT5zZXRfbmV0d29ya19iaW5kZXIobnVsbHB0cik7Ci0gIH0KLQot
ICBqbWV0aG9kSUQgbSA9Ci0gICAgICBHZXRNZXRob2RJRChqbmkoKSwgKmpfbmV0d29ya19tb25p
dG9yX2NsYXNzXywgInN0b3BNb25pdG9yaW5nIiwgIihKKVYiKTsKLSAgam5pKCktPkNhbGxWb2lk
TWV0aG9kKCpqX25ldHdvcmtfbW9uaXRvcl8sIG0sIGpsb25nRnJvbVBvaW50ZXIodGhpcykpOwot
ICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJFcnJvciBkdXJpbmcgTmV0d29ya01vbml0b3Iu
c3RvcE1vbml0b3JpbmciOwotCi0gIG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJlc3NfLmNsZWFyKCk7
Ci0gIG5ldHdvcmtfaW5mb19ieV9oYW5kbGVfLmNsZWFyKCk7Ci19Ci0KLS8vIFRoZSBpbXBsZW1l
bnRhdGlvbiBpcyBsYXJnZWx5IHRha2VuIGZyb20gVURQU29ja2V0UG9zaXg6OkJpbmRUb05ldHdv
cmsgaW4KLS8vIGh0dHBzOi8vY3MuY2hyb21pdW0ub3JnL2Nocm9taXVtL3NyYy9uZXQvdWRwL3Vk
cF9zb2NrZXRfcG9zaXguY2MKLWludCBBbmRyb2lkTmV0d29ya01vbml0b3I6OkJpbmRTb2NrZXRU
b05ldHdvcmsoaW50IHNvY2tldF9mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgcnRjOjpJUEFkZHJlc3MmIGFkZHJlc3MpIHsKLSAgUlRDX0NI
RUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICAvLyBBbmRyb2lk
IHByaW9yIHRvIExvbGxpcG9wIGRpZG4ndCBoYXZlIHN1cHBvcnQgZm9yIGJpbmRpbmcgc29ja2V0
cyB0bwotICAvLyBuZXR3b3Jrcy4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgaGF2ZSByZWFj
aGVkIGhlcmUgYmVjYXVzZQotICAvLyB8bmV0d29ya19oYW5kbGVfYnlfYWRkcmVzc198IGlzIG9u
bHkgcG9wdWxhdGVkIGluIEFuZHJvaWQgTG9sbGlwb3AKLSAgLy8gYW5kIGFib3ZlLgotICBpZiAo
YW5kcm9pZF9zZGtfaW50XyA8IFNES19WRVJTSU9OX0xPTExJUE9QKSB7Ci0gICAgTE9HKExTX0VS
Uk9SKSA8PCAiQmluZFNvY2tldFRvTmV0d29yayBpcyBub3Qgc3VwcG9ydGVkIGluIEFuZHJvaWQg
U0RLICIKLSAgICAgICAgICAgICAgICAgIDw8IGFuZHJvaWRfc2RrX2ludF87Ci0gICAgcmV0dXJu
IHJ0Yzo6TkVUV09SS19CSU5EX05PVF9JTVBMRU1FTlRFRDsKLSAgfQotCi0gIGF1dG8gaXRlciA9
IG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJlc3NfLmZpbmQoYWRkcmVzcyk7Ci0gIGlmIChpdGVyID09
IG5ldHdvcmtfaGFuZGxlX2J5X2FkZHJlc3NfLmVuZCgpKSB7Ci0gICAgcmV0dXJuIHJ0Yzo6TkVU
V09SS19CSU5EX0FERFJFU1NfTk9UX0ZPVU5EOwotICB9Ci0gIE5ldHdvcmtIYW5kbGUgbmV0d29y
a19oYW5kbGUgPSBpdGVyLT5zZWNvbmQ7Ci0KLSAgaW50IHJ2ID0gMDsKLSAgaWYgKGFuZHJvaWRf
c2RrX2ludF8gPj0gU0RLX1ZFUlNJT05fTUFSU0hNQUxMT1cpIHsKLSAgICAvLyBTZWUgZGVjbGFy
YXRpb24gb2YgYW5kcm9pZF9zZXRzb2NrbmV0d29yaygpIGhlcmU6Ci0gICAgLy8gaHR0cDovL2Fu
ZHJvaWR4cmVmLmNvbS82LjAuMF9yMS94cmVmL2RldmVsb3BtZW50L25kay9wbGF0Zm9ybXMvYW5k
cm9pZC1NL2luY2x1ZGUvYW5kcm9pZC9tdWx0aW5ldHdvcmsuaCM2NQotICAgIC8vIEZ1bmN0aW9u
IGNhbm5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYXMgaXQgd2lsbCBjYXVzZSBhcHAgdG8gZmFpbCB0
byBsb2FkCi0gICAgLy8gb24gcHJlLW1hcnNobWFsbG93IGRldmljZXMuCi0gICAgdHlwZWRlZiBp
bnQgKCpNYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQpKE5ldHdvcmtIYW5kbGUgbmV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29j
a2V0KTsKLSAgICBzdGF0aWMgTWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0IG1hcnNobWFs
bG93U2V0TmV0d29ya0ZvclNvY2tldDsKLSAgICAvLyBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwg
YnV0IHdlIGFyZSBydW5uaW5nIHRoaXMgb25seSBvbiB0aGUgd29ya2VyCi0gICAgLy8gdGhyZWFk
LgotICAgIGlmICghbWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0KSB7Ci0gICAgICBjb25z
dCBzdGQ6OnN0cmluZyBhbmRyb2lkX25hdGl2ZV9saWJfcGF0aCA9ICJsaWJhbmRyb2lkLnNvIjsK
LSAgICAgIHZvaWQqIGxpYiA9IGRsb3BlbihhbmRyb2lkX25hdGl2ZV9saWJfcGF0aC5jX3N0cigp
LCBSVExEX05PVyk7Ci0gICAgICBpZiAobGliID09IG51bGxwdHIpIHsKLSAgICAgICAgTE9HKExT
X0VSUk9SKSA8PCAiTGlicmFyeSAiIDw8IGFuZHJvaWRfbmF0aXZlX2xpYl9wYXRoIDw8ICIgbm90
IGZvdW5kISI7Ci0gICAgICAgIHJldHVybiBydGM6Ok5FVFdPUktfQklORF9OT1RfSU1QTEVNRU5U
RUQ7Ci0gICAgICB9Ci0gICAgICBtYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQgPQotICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0PigK
LSAgICAgICAgICAgICAgZGxzeW0obGliLCAiYW5kcm9pZF9zZXRzb2NrbmV0d29yayIpKTsKLSAg
ICB9Ci0gICAgaWYgKCFtYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQpIHsKLSAgICAgIExP
RyhMU19FUlJPUikgPDwgIlN5bWJvbCBtYXJzaG1hbGxvd1NldE5ldHdvcmtGb3JTb2NrZXQgaXMg
bm90IGZvdW5kIjsKLSAgICAgIHJldHVybiBydGM6Ok5FVFdPUktfQklORF9OT1RfSU1QTEVNRU5U
RUQ7Ci0gICAgfQotICAgIHJ2ID0gbWFyc2htYWxsb3dTZXROZXR3b3JrRm9yU29ja2V0KG5ldHdv
cmtfaGFuZGxlLCBzb2NrZXRfZmQpOwotICB9IGVsc2UgewotICAgIC8vIE5PVEU6IFRoaXMgcmVs
aWVzIG9uIEFuZHJvaWQgaW1wbGVtZW50YXRpb24gZGV0YWlscywgYnV0IGl0IHdvbid0IGNoYW5n
ZQotICAgIC8vIGJlY2F1c2UgTG9sbGlwb3AgaXMgYWxyZWFkeSByZWxlYXNlZC4KLSAgICB0eXBl
ZGVmIGludCAoKkxvbGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldCkodW5zaWduZWQgbmV0LCBpbnQg
c29ja2V0KTsKLSAgICBzdGF0aWMgTG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0IGxvbGxpcG9w
U2V0TmV0d29ya0ZvclNvY2tldDsKLSAgICAvLyBUaGlzIGlzIG5vdCB0aHJlYWRzYWZlLCBidXQg
d2UgYXJlIHJ1bm5pbmcgdGhpcyBvbmx5IG9uIHRoZSB3b3JrZXIKLSAgICAvLyB0aHJlYWQuCi0g
ICAgaWYgKCFsb2xsaXBvcFNldE5ldHdvcmtGb3JTb2NrZXQpIHsKLSAgICAgIC8vIEFuZHJvaWQn
cyBuZXRkIGNsaWVudCBsaWJyYXJ5IHNob3VsZCBhbHdheXMgYmUgbG9hZGVkIGluIG91ciBhZGRy
ZXNzCi0gICAgICAvLyBzcGFjZSBhcyBpdCBzaGltcyBsaWJjIGZ1bmN0aW9ucyBsaWtlIGNvbm5l
Y3QoKS4KLSAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIG5ldF9saWJyYXJ5X3BhdGggPSAibGlibmV0
ZF9jbGllbnQuc28iOwotICAgICAgLy8gVXNlIFJUTERfTk9XIHRvIG1hdGNoIEFuZHJvaWQncyBw
cmlvciBsb2FkaW5nIG9mIHRoZSBsaWJyYXJ5OgotICAgICAgLy8gaHR0cDovL2FuZHJvaWR4cmVm
LmNvbS82LjAuMF9yNS94cmVmL2Jpb25pYy9saWJjL2Jpb25pYy9OZXRkQ2xpZW50LmNwcCMzNwot
ICAgICAgLy8gVXNlIFJUTERfTk9MT0FEIHRvIGFzc2VydCB0aGF0IHRoZSBsaWJyYXJ5IGlzIGFs
cmVhZHkgbG9hZGVkIGFuZAotICAgICAgLy8gYXZvaWQgZG9pbmcgYW55IGRpc2sgSU8uCi0gICAg
ICB2b2lkKiBsaWIgPSBkbG9wZW4obmV0X2xpYnJhcnlfcGF0aC5jX3N0cigpLCBSVExEX05PVyB8
IFJUTERfTk9MT0FEKTsKLSAgICAgIGlmIChsaWIgPT0gbnVsbHB0cikgewotICAgICAgICBMT0co
TFNfRVJST1IpIDw8ICJMaWJyYXJ5ICIgPDwgbmV0X2xpYnJhcnlfcGF0aCA8PCAiIG5vdCBmb3Vu
ZCEiOwotICAgICAgICByZXR1cm4gcnRjOjpORVRXT1JLX0JJTkRfTk9UX0lNUExFTUVOVEVEOwot
ICAgICAgfQotICAgICAgbG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0ID0KLSAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PExvbGxpcG9wU2V0TmV0d29ya0ZvclNvY2tldD4oCi0gICAgICAgICAg
ICAgIGRsc3ltKGxpYiwgInNldE5ldHdvcmtGb3JTb2NrZXQiKSk7Ci0gICAgfQotICAgIGlmICgh
bG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0KSB7Ci0gICAgICBMT0coTFNfRVJST1IpIDw8ICJT
eW1ib2wgbG9sbGlwb3BTZXROZXR3b3JrRm9yU29ja2V0IGlzIG5vdCBmb3VuZCAiOwotICAgICAg
cmV0dXJuIHJ0Yzo6TkVUV09SS19CSU5EX05PVF9JTVBMRU1FTlRFRDsKLSAgICB9Ci0gICAgcnYg
PSBsb2xsaXBvcFNldE5ldHdvcmtGb3JTb2NrZXQobmV0d29ya19oYW5kbGUsIHNvY2tldF9mZCk7
Ci0gIH0KLQotICAvLyBJZiB8bmV0d29ya3wgaGFzIHNpbmNlIGRpc2Nvbm5lY3RlZCwgfHJ2fCB3
aWxsIGJlIEVOT05FVC4gIFN1cmZhY2UgdGhpcyBhcwotICAvLyBFUlJfTkVUV09SS19DSEFOR0VE
LCByYXRoZXIgdGhhbiBNYXBTeXN0ZW1FcnJvcihFTk9ORVQpIHdoaWNoIGdpdmVzIGJhY2sKLSAg
Ly8gdGhlIGxlc3MgZGVzY3JpcHRpdmUgRVJSX0ZBSUxFRC4KLSAgaWYgKHJ2ID09IDApIHsKLSAg
ICByZXR1cm4gcnRjOjpORVRXT1JLX0JJTkRfU1VDQ0VTUzsKLSAgfQotICBpZiAocnYgPT0gRU5P
TkVUKSB7Ci0gICAgcmV0dXJuIHJ0Yzo6TkVUV09SS19CSU5EX05FVFdPUktfQ0hBTkdFRDsKLSAg
fQotICByZXR1cm4gcnRjOjpORVRXT1JLX0JJTkRfRkFJTFVSRTsKLX0KLQotdm9pZCBBbmRyb2lk
TmV0d29ya01vbml0b3I6Ok9uTmV0d29ya0Nvbm5lY3RlZCgKLSAgICBjb25zdCBOZXR3b3JrSW5m
b3JtYXRpb24mIG5ldHdvcmtfaW5mbykgewotICB3b3JrZXJfdGhyZWFkKCktPkludm9rZTx2b2lk
PigKLSAgICAgIFJUQ19GUk9NX0hFUkUsIHJ0Yzo6QmluZCgmQW5kcm9pZE5ldHdvcmtNb25pdG9y
OjpPbk5ldHdvcmtDb25uZWN0ZWRfdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aGlzLCBuZXR3b3JrX2luZm8pKTsKLSAgLy8gRmlyZSBTaWduYWxOZXR3b3Jrc0NoYW5nZWQgdG8g
dXBkYXRlIHRoZSBsaXN0IG9mIG5ldHdvcmtzLgotICBPbk5ldHdvcmtzQ2hhbmdlZCgpOwotfQot
Ci12b2lkIEFuZHJvaWROZXR3b3JrTW9uaXRvcjo6T25OZXR3b3JrQ29ubmVjdGVkX3coCi0gICAg
Y29uc3QgTmV0d29ya0luZm9ybWF0aW9uJiBuZXR3b3JrX2luZm8pIHsKLSAgTE9HKExTX0lORk8p
IDw8ICJOZXR3b3JrIGNvbm5lY3RlZDogIiA8PCBuZXR3b3JrX2luZm8uVG9TdHJpbmcoKTsKLSAg
YWRhcHRlcl90eXBlX2J5X25hbWVfW25ldHdvcmtfaW5mby5pbnRlcmZhY2VfbmFtZV0gPQotICAg
ICAgQWRhcHRlclR5cGVGcm9tTmV0d29ya1R5cGUobmV0d29ya19pbmZvLnR5cGUpOwotICBuZXR3
b3JrX2luZm9fYnlfaGFuZGxlX1tuZXR3b3JrX2luZm8uaGFuZGxlXSA9IG5ldHdvcmtfaW5mbzsK
LSAgZm9yIChjb25zdCBydGM6OklQQWRkcmVzcyYgYWRkcmVzcyA6IG5ldHdvcmtfaW5mby5pcF9h
ZGRyZXNzZXMpIHsKLSAgICBuZXR3b3JrX2hhbmRsZV9ieV9hZGRyZXNzX1thZGRyZXNzXSA9IG5l
dHdvcmtfaW5mby5oYW5kbGU7Ci0gIH0KLX0KLQotdm9pZCBBbmRyb2lkTmV0d29ya01vbml0b3I6
Ok9uTmV0d29ya0Rpc2Nvbm5lY3RlZChOZXR3b3JrSGFuZGxlIGhhbmRsZSkgewotICBMT0coTFNf
SU5GTykgPDwgIk5ldHdvcmsgZGlzY29ubmVjdGVkIGZvciBoYW5kbGUgIiA8PCBoYW5kbGU7Ci0g
IHdvcmtlcl90aHJlYWQoKS0+SW52b2tlPHZvaWQ+KAotICAgICAgUlRDX0ZST01fSEVSRSwKLSAg
ICAgIHJ0Yzo6QmluZCgmQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpPbk5ldHdvcmtEaXNjb25uZWN0
ZWRfdywgdGhpcywgaGFuZGxlKSk7Ci19Ci0KLXZvaWQgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpP
bk5ldHdvcmtEaXNjb25uZWN0ZWRfdyhOZXR3b3JrSGFuZGxlIGhhbmRsZSkgewotICBhdXRvIGl0
ZXIgPSBuZXR3b3JrX2luZm9fYnlfaGFuZGxlXy5maW5kKGhhbmRsZSk7Ci0gIGlmIChpdGVyICE9
IG5ldHdvcmtfaW5mb19ieV9oYW5kbGVfLmVuZCgpKSB7Ci0gICAgZm9yIChjb25zdCBydGM6OklQ
QWRkcmVzcyYgYWRkcmVzcyA6IGl0ZXItPnNlY29uZC5pcF9hZGRyZXNzZXMpIHsKLSAgICAgIG5l
dHdvcmtfaGFuZGxlX2J5X2FkZHJlc3NfLmVyYXNlKGFkZHJlc3MpOwotICAgIH0KLSAgICBuZXR3
b3JrX2luZm9fYnlfaGFuZGxlXy5lcmFzZShpdGVyKTsKLSAgfQotfQotCi12b2lkIEFuZHJvaWRO
ZXR3b3JrTW9uaXRvcjo6U2V0TmV0d29ya0luZm9zKAotICAgIGNvbnN0IHN0ZDo6dmVjdG9yPE5l
dHdvcmtJbmZvcm1hdGlvbj4mIG5ldHdvcmtfaW5mb3MpIHsKLSAgUlRDX0NIRUNLKHRocmVhZF9j
aGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBuZXR3b3JrX2hhbmRsZV9ieV9hZGRy
ZXNzXy5jbGVhcigpOwotICBuZXR3b3JrX2luZm9fYnlfaGFuZGxlXy5jbGVhcigpOwotICBMT0co
TFNfSU5GTykgPDwgIkFuZHJvaWQgbmV0d29yayBtb25pdG9yIGZvdW5kICIgPDwgbmV0d29ya19p
bmZvcy5zaXplKCkKLSAgICAgICAgICAgICAgIDw8ICIgbmV0d29ya3MiOwotICBmb3IgKE5ldHdv
cmtJbmZvcm1hdGlvbiBuZXR3b3JrIDogbmV0d29ya19pbmZvcykgewotICAgIE9uTmV0d29ya0Nv
bm5lY3RlZF93KG5ldHdvcmspOwotICB9Ci19Ci0KLXJ0Yzo6QWRhcHRlclR5cGUgQW5kcm9pZE5l
dHdvcmtNb25pdG9yOjpHZXRBZGFwdGVyVHlwZSgKLSAgICBjb25zdCBzdGQ6OnN0cmluZyYgaWZf
bmFtZSkgewotICBhdXRvIGl0ZXIgPSBhZGFwdGVyX3R5cGVfYnlfbmFtZV8uZmluZChpZl9uYW1l
KTsKLSAgcnRjOjpBZGFwdGVyVHlwZSB0eXBlID0gKGl0ZXIgPT0gYWRhcHRlcl90eXBlX2J5X25h
bWVfLmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBydGM6OkFEQVBURVJf
VFlQRV9VTktOT1dOCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGl0ZXItPnNlY29u
ZDsKLSAgaWYgKHR5cGUgPT0gcnRjOjpBREFQVEVSX1RZUEVfVU5LTk9XTikgewotICAgIExPRyhM
U19XQVJOSU5HKSA8PCAiR2V0IGFuIHVua25vd24gdHlwZSBmb3IgdGhlIGludGVyZmFjZSAiIDw8
IGlmX25hbWU7Ci0gIH0KLSAgcmV0dXJuIHR5cGU7Ci19Ci0KLXJ0Yzo6TmV0d29ya01vbml0b3JJ
bnRlcmZhY2UqCi1BbmRyb2lkTmV0d29ya01vbml0b3JGYWN0b3J5OjpDcmVhdGVOZXR3b3JrTW9u
aXRvcigpIHsKLSAgcmV0dXJuIG5ldyBBbmRyb2lkTmV0d29ya01vbml0b3IoKTsKLX0KLQotSk9X
KHZvaWQsIE5ldHdvcmtNb25pdG9yX25hdGl2ZU5vdGlmeUNvbm5lY3Rpb25UeXBlQ2hhbmdlZCko
Ci0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9tb25pdG9yLCBqbG9uZyBqX25hdGl2ZV9tb25p
dG9yKSB7Ci0gIHJ0Yzo6TmV0d29ya01vbml0b3JJbnRlcmZhY2UqIG5ldHdvcmtfbW9uaXRvciA9
Ci0gICAgICByZWludGVycHJldF9jYXN0PHJ0Yzo6TmV0d29ya01vbml0b3JJbnRlcmZhY2UqPihq
X25hdGl2ZV9tb25pdG9yKTsKLSAgbmV0d29ya19tb25pdG9yLT5Pbk5ldHdvcmtzQ2hhbmdlZCgp
OwotfQotCi1KT1codm9pZCwgTmV0d29ya01vbml0b3JfbmF0aXZlTm90aWZ5T2ZBY3RpdmVOZXR3
b3JrTGlzdCkoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9tb25pdG9yLCBqbG9uZyBqX25h
dGl2ZV9tb25pdG9yLAotICAgIGpvYmplY3RBcnJheSBqX25ldHdvcmtfaW5mb3MpIHsKLSAgQW5k
cm9pZE5ldHdvcmtNb25pdG9yKiBuZXR3b3JrX21vbml0b3IgPQotICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxBbmRyb2lkTmV0d29ya01vbml0b3IqPihqX25hdGl2ZV9tb25pdG9yKTsKLSAgc3RkOjp2
ZWN0b3I8TmV0d29ya0luZm9ybWF0aW9uPiBuZXR3b3JrX2luZm9zOwotICBzaXplX3QgbnVtX25l
dHdvcmtzID0gam5pLT5HZXRBcnJheUxlbmd0aChqX25ldHdvcmtfaW5mb3MpOwotICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bV9uZXR3b3JrczsgKytpKSB7Ci0gICAgam9iamVjdCBqX25ldHdv
cmtfaW5mbyA9IGpuaS0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KGpfbmV0d29ya19pbmZvcywgaSk7
Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgIkVycm9yIGR1cmluZyBHZXRPYmplY3RBcnJh
eUVsZW1lbnQiOwotICAgIG5ldHdvcmtfaW5mb3MucHVzaF9iYWNrKEdldE5ldHdvcmtJbmZvcm1h
dGlvbkZyb21KYXZhKGpuaSwgal9uZXR3b3JrX2luZm8pKTsKLSAgfQotICBuZXR3b3JrX21vbml0
b3ItPlNldE5ldHdvcmtJbmZvcyhuZXR3b3JrX2luZm9zKTsKLX0KLQotSk9XKHZvaWQsIE5ldHdv
cmtNb25pdG9yX25hdGl2ZU5vdGlmeU9mTmV0d29ya0Nvbm5lY3QpKAotICAgIEpOSUVudiogam5p
LCBqb2JqZWN0IGpfbW9uaXRvciwgamxvbmcgal9uYXRpdmVfbW9uaXRvciwKLSAgICBqb2JqZWN0
IGpfbmV0d29ya19pbmZvKSB7Ci0gIEFuZHJvaWROZXR3b3JrTW9uaXRvciogbmV0d29ya19tb25p
dG9yID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QW5kcm9pZE5ldHdvcmtNb25pdG9yKj4oal9u
YXRpdmVfbW9uaXRvcik7Ci0gIE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrX2luZm8gPQotICAg
ICAgR2V0TmV0d29ya0luZm9ybWF0aW9uRnJvbUphdmEoam5pLCBqX25ldHdvcmtfaW5mbyk7Ci0g
IG5ldHdvcmtfbW9uaXRvci0+T25OZXR3b3JrQ29ubmVjdGVkKG5ldHdvcmtfaW5mbyk7Ci19Ci0K
LUpPVyh2b2lkLCBOZXR3b3JrTW9uaXRvcl9uYXRpdmVOb3RpZnlPZk5ldHdvcmtEaXNjb25uZWN0
KSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX21vbml0b3IsIGpsb25nIGpfbmF0aXZlX21v
bml0b3IsCi0gICAgamxvbmcgbmV0d29ya19oYW5kbGUpIHsKLSAgQW5kcm9pZE5ldHdvcmtNb25p
dG9yKiBuZXR3b3JrX21vbml0b3IgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDxBbmRyb2lkTmV0
d29ya01vbml0b3IqPihqX25hdGl2ZV9tb25pdG9yKTsKLSAgbmV0d29ya19tb25pdG9yLT5Pbk5l
dHdvcmtEaXNjb25uZWN0ZWQoCi0gICAgICBzdGF0aWNfY2FzdDxOZXR3b3JrSGFuZGxlPihuZXR3
b3JrX2hhbmRsZSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2Fu
ZHJvaWRuZXR3b3JrbW9uaXRvcl9qbmkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG5ldHdvcmtt
b25pdG9yX2puaS5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG5ldHdvcmttb25pdG9y
X2puaS5oCShub25leGlzdGVudCkKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotI2lmbmRlZiBXRUJSVENfQVBJX0pBVkFfSk5JX0FORFJPSURORVRXT1JLTU9OSVRPUl9KTklf
SF8KLSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9BTkRST0lETkVUV09SS01PTklUT1JfSk5J
X0hfCi0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9uZXR3b3JrbW9uaXRvci5oIgotCi0jaW5jbHVk
ZSA8bWFwPgotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2Jhc2ljdHlwZXMuaCIKLSNpbmNsdWRlICJ3ZWJydGMv
YmFzZS90aHJlYWRfY2hlY2tlci5oIgotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLXR5cGVk
ZWYgaW50NjRfdCBOZXR3b3JrSGFuZGxlOwotCi0vLyBjKysgZXF1aXZhbGVudCBvZiBqYXZhIE5l
dHdvcmtNb25pdG9yQXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZS4KLWVudW0gTmV0d29ya1R5cGUg
ewotICBORVRXT1JLX1VOS05PV04sCi0gIE5FVFdPUktfRVRIRVJORVQsCi0gIE5FVFdPUktfV0lG
SSwKLSAgTkVUV09SS180RywKLSAgTkVUV09SS18zRywKLSAgTkVUV09SS18yRywKLSAgTkVUV09S
S19VTktOT1dOX0NFTExVTEFSLAotICBORVRXT1JLX0JMVUVUT09USCwKLSAgTkVUV09SS19OT05F
Ci19OwotCi0vLyBUaGUgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkIGZyb20gQW5kcm9pZCBPUyBz
byB0aGF0IHRoZSBuYXRpdmUgY29kZSBjYW4gZ2V0Ci0vLyB0aGUgbmV0d29yayB0eXBlIGFuZCBo
YW5kbGUgKEFuZHJvaWQgbmV0d29yayBJRCkgZm9yIGVhY2ggaW50ZXJmYWNlLgotc3RydWN0IE5l
dHdvcmtJbmZvcm1hdGlvbiB7Ci0gIHN0ZDo6c3RyaW5nIGludGVyZmFjZV9uYW1lOwotICBOZXR3
b3JrSGFuZGxlIGhhbmRsZTsKLSAgTmV0d29ya1R5cGUgdHlwZTsKLSAgc3RkOjp2ZWN0b3I8cnRj
OjpJUEFkZHJlc3M+IGlwX2FkZHJlc3NlczsKLQotICBzdGQ6OnN0cmluZyBUb1N0cmluZygpIGNv
bnN0OwotfTsKLQotY2xhc3MgQW5kcm9pZE5ldHdvcmtNb25pdG9yIDogcHVibGljIHJ0Yzo6TmV0
d29ya01vbml0b3JCYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIHJ0
Yzo6TmV0d29ya0JpbmRlckludGVyZmFjZSB7Ci0gcHVibGljOgotICBBbmRyb2lkTmV0d29ya01v
bml0b3IoKTsKLQotICBzdGF0aWMgdm9pZCBTZXRBbmRyb2lkQ29udGV4dChKTklFbnYqIGpuaSwg
am9iamVjdCBjb250ZXh0KTsKLQotICB2b2lkIFN0YXJ0KCkgb3ZlcnJpZGU7Ci0gIHZvaWQgU3Rv
cCgpIG92ZXJyaWRlOwotCi0gIGludCBCaW5kU29ja2V0VG9OZXR3b3JrKGludCBzb2NrZXRfZmQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJ0Yzo6SVBBZGRyZXNzJiBhZGRyZXNz
KSBvdmVycmlkZTsKLSAgcnRjOjpBZGFwdGVyVHlwZSBHZXRBZGFwdGVyVHlwZShjb25zdCBzdGQ6
OnN0cmluZyYgaWZfbmFtZSkgb3ZlcnJpZGU7Ci0gIHZvaWQgT25OZXR3b3JrQ29ubmVjdGVkKGNv
bnN0IE5ldHdvcmtJbmZvcm1hdGlvbiYgbmV0d29ya19pbmZvKTsKLSAgdm9pZCBPbk5ldHdvcmtE
aXNjb25uZWN0ZWQoTmV0d29ya0hhbmRsZSBuZXR3b3JrX2hhbmRsZSk7Ci0gIHZvaWQgU2V0TmV0
d29ya0luZm9zKGNvbnN0IHN0ZDo6dmVjdG9yPE5ldHdvcmtJbmZvcm1hdGlvbj4mIG5ldHdvcmtf
aW5mb3MpOwotCi0gcHJpdmF0ZToKLSAgc3RhdGljIGpvYmplY3QgYXBwbGljYXRpb25fY29udGV4
dF87Ci0gIHN0YXRpYyBpbnQgYW5kcm9pZF9zZGtfaW50XzsKLSAgSk5JRW52KiBqbmkoKSB7IHJl
dHVybiBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKTsgfQotCi0gIHZvaWQgT25OZXR3b3Jr
Q29ubmVjdGVkX3coY29uc3QgTmV0d29ya0luZm9ybWF0aW9uJiBuZXR3b3JrX2luZm8pOwotICB2
b2lkIE9uTmV0d29ya0Rpc2Nvbm5lY3RlZF93KE5ldHdvcmtIYW5kbGUgbmV0d29ya19oYW5kbGUp
OwotCi0gIFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfbmV0d29ya19tb25pdG9yX2NsYXNzXzsK
LSAgU2NvcGVkR2xvYmFsUmVmPGpvYmplY3Q+IGpfbmV0d29ya19tb25pdG9yXzsKLSAgcnRjOjpU
aHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyXzsKLSAgYm9vbCBzdGFydGVkXyA9IGZhbHNlOwot
ICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgcnRjOjpBZGFwdGVyVHlwZT4gYWRhcHRlcl90eXBlX2J5
X25hbWVfOwotICBzdGQ6Om1hcDxydGM6OklQQWRkcmVzcywgTmV0d29ya0hhbmRsZT4gbmV0d29y
a19oYW5kbGVfYnlfYWRkcmVzc187Ci0gIHN0ZDo6bWFwPE5ldHdvcmtIYW5kbGUsIE5ldHdvcmtJ
bmZvcm1hdGlvbj4gbmV0d29ya19pbmZvX2J5X2hhbmRsZV87Ci19OwotCi1jbGFzcyBBbmRyb2lk
TmV0d29ya01vbml0b3JGYWN0b3J5IDogcHVibGljIHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5
IHsKLSBwdWJsaWM6Ci0gIEFuZHJvaWROZXR3b3JrTW9uaXRvckZhY3RvcnkoKSB7fQotCi0gIHJ0
Yzo6TmV0d29ya01vbml0b3JJbnRlcmZhY2UqIENyZWF0ZU5ldHdvcmtNb25pdG9yKCkgb3ZlcnJp
ZGU7Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2puaQotCi0jZW5kaWYgIC8vIFdFQlJU
Q19BUElfSkFWQV9KTklfQU5EUk9JRE5FVFdPUktNT05JVE9SX0pOSV9IXwpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJv
aWR2aWRlb3RyYWNrc291cmNlX2puaS5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZHZpZGVvdHJh
Y2tzb3VyY2Vfam5pLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZHZpZGVvdHJhY2tz
b3VyY2Vfam5pLmNjCShub25leGlzdGVudCkKQEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJl
bmNlaG9sZGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkdmlkZW90cmFja3NvdXJj
ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvdmlkZW9zb3VyY2Vwcm94eS5oIgotCi0vLyBJZGVu
dGlmaWVycyBhcmUgb3ZlciA4MCBjaGFyYWN0ZXJzIGxvbmcgc28gdGhpcyBpcyBuZWVkZWQgdG8g
Zml0IHRoZW0gb24gb25lCi0vLyBsaW5lLgotI2RlZmluZSBKT1dfT0JTRVJWRVJfTUVUSE9EKHJl
dHR5cGUsIG5hbWUpIFwKLSAgSk9XKHJldHR5cGUsIFZpZGVvQ2FwdHVyZXJfMDAwMjRBbmRyb2lk
VmlkZW9UcmFja1NvdXJjZU9ic2VydmVyXyMjbmFtZSkKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkg
ewotCi1zdGF0aWMgd2VicnRjOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSogQW5kcm9pZFZpZGVv
VHJhY2tTb3VyY2VGcm9tSmF2YVByb3h5KAotICAgIGpsb25nIGpfcHJveHkpIHsKLSAgYXV0byBw
cm94eV9zb3VyY2UgPSByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZVBy
b3h5Kj4oal9wcm94eSk7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6QW5kcm9p
ZFZpZGVvVHJhY2tTb3VyY2UqPigKLSAgICAgIHByb3h5X3NvdXJjZS0+aW50ZXJuYWwoKSk7Ci19
Ci0KLUpPV19PQlNFUlZFUl9NRVRIT0Qodm9pZCwgbmF0aXZlT25CeXRlQnVmZmVyRnJhbWVDYXB0
dXJlZCkKLShKTklFbnYqIGpuaSwKLSBqY2xhc3MsCi0gamxvbmcgal9zb3VyY2UsCi0gamJ5dGVB
cnJheSBqX2ZyYW1lLAotIGppbnQgbGVuZ3RoLAotIGppbnQgd2lkdGgsCi0gamludCBoZWlnaHQs
Ci0gamludCByb3RhdGlvbiwKLSBqbG9uZyB0aW1lc3RhbXApIHsKLSAgd2VicnRjOjpBbmRyb2lk
VmlkZW9UcmFja1NvdXJjZSogc291cmNlID0KLSAgICAgIEFuZHJvaWRWaWRlb1RyYWNrU291cmNl
RnJvbUphdmFQcm94eShqX3NvdXJjZSk7Ci0gIGpieXRlKiBieXRlcyA9IGpuaS0+R2V0Qnl0ZUFy
cmF5RWxlbWVudHMoal9mcmFtZSwgbnVsbHB0cik7Ci0gIHNvdXJjZS0+T25CeXRlQnVmZmVyRnJh
bWVDYXB0dXJlZChieXRlcywgbGVuZ3RoLCB3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCk7Ci0gIGpuaS0+UmVsZWFz
ZUJ5dGVBcnJheUVsZW1lbnRzKGpfZnJhbWUsIGJ5dGVzLCBKTklfQUJPUlQpOwotfQotCi1KT1df
T0JTRVJWRVJfTUVUSE9EKHZvaWQsIG5hdGl2ZU9uVGV4dHVyZUZyYW1lQ2FwdHVyZWQpCi0oSk5J
RW52KiBqbmksCi0gamNsYXNzLAotIGpsb25nIGpfc291cmNlLAotIGppbnQgal93aWR0aCwKLSBq
aW50IGpfaGVpZ2h0LAotIGppbnQgal9vZXNfdGV4dHVyZV9pZCwKLSBqZmxvYXRBcnJheSBqX3Ry
YW5zZm9ybV9tYXRyaXgsCi0gamludCBqX3JvdGF0aW9uLAotIGpsb25nIGpfdGltZXN0YW1wKSB7
Ci0gIHdlYnJ0Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UqIHNvdXJjZSA9Ci0gICAgICBBbmRy
b2lkVmlkZW9UcmFja1NvdXJjZUZyb21KYXZhUHJveHkoal9zb3VyY2UpOwotICBzb3VyY2UtPk9u
VGV4dHVyZUZyYW1lQ2FwdHVyZWQoCi0gICAgICBqX3dpZHRoLCBqX2hlaWdodCwgal9yb3RhdGlv
biwgal90aW1lc3RhbXAsCi0gICAgICBOYXRpdmVIYW5kbGVJbXBsKGpuaSwgal9vZXNfdGV4dHVy
ZV9pZCwgal90cmFuc2Zvcm1fbWF0cml4KSk7Ci19Ci0KLUpPV19PQlNFUlZFUl9NRVRIT0Qodm9p
ZCwgbmF0aXZlQ2FwdHVyZXJTdGFydGVkKQotKEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIGpf
c291cmNlLCBqYm9vbGVhbiBqX3N1Y2Nlc3MpIHsKLSAgTE9HKExTX0lORk8pIDw8ICJBbmRyb2lk
VmlkZW9UcmFja1NvdXJjZU9ic2VydmVfbmF0aXZlQ2FwdHVyZXJTdGFydGVkIjsKLSAgd2VicnRj
OjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSogc291cmNlID0KLSAgICAgIEFuZHJvaWRWaWRlb1Ry
YWNrU291cmNlRnJvbUphdmFQcm94eShqX3NvdXJjZSk7Ci0gIHNvdXJjZS0+U2V0U3RhdGUoal9z
dWNjZXNzCi0gICAgICAgICAgICAgICAgICAgICAgID8gd2VicnRjOjpBbmRyb2lkVmlkZW9UcmFj
a1NvdXJjZTo6U291cmNlU3RhdGU6OmtMaXZlCi0gICAgICAgICAgICAgICAgICAgICAgIDogd2Vi
cnRjOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZTo6U291cmNlU3RhdGU6OmtFbmRlZCk7Ci19Ci0K
LUpPV19PQlNFUlZFUl9NRVRIT0Qodm9pZCwgbmF0aXZlQ2FwdHVyZXJTdG9wcGVkKQotKEpOSUVu
diogam5pLCBqY2xhc3MsIGpsb25nIGpfc291cmNlKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiQW5k
cm9pZFZpZGVvVHJhY2tTb3VyY2VPYnNlcnZlX25hdGl2ZUNhcHR1cmVyU3RvcHBlZCI7Ci0gIHdl
YnJ0Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2UqIHNvdXJjZSA9Ci0gICAgICBBbmRyb2lkVmlk
ZW9UcmFja1NvdXJjZUZyb21KYXZhUHJveHkoal9zb3VyY2UpOwotICBzb3VyY2UtPlNldFN0YXRl
KHdlYnJ0Yzo6QW5kcm9pZFZpZGVvVHJhY2tTb3VyY2U6OlNvdXJjZVN0YXRlOjprRW5kZWQpOwot
fQotCi1KT1codm9pZCwgVmlkZW9Tb3VyY2VfbmF0aXZlQWRhcHRPdXRwdXRGb3JtYXQpCi0oSk5J
RW52KiBqbmksIGpjbGFzcywgamxvbmcgal9zb3VyY2UsIGppbnQgal93aWR0aCwgamludCBqX2hl
aWdodCwgamludCBqX2ZwcykgewotICBMT0coTFNfSU5GTykgPDwgIlZpZGVvU291cmNlX25hdGl2
ZUFkYXB0T3V0cHV0Rm9ybWF0IjsKLSAgd2VicnRjOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZSog
c291cmNlID0KLSAgICAgIEFuZHJvaWRWaWRlb1RyYWNrU291cmNlRnJvbUphdmFQcm94eShqX3Nv
dXJjZSk7Ci0gIHNvdXJjZS0+T25PdXRwdXRGb3JtYXRSZXF1ZXN0KGpfd2lkdGgsIGpfaGVpZ2h0
LCBqX2Zwcyk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNfam5pCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3Ny
ZWZlcmVuY2Vob2xkZXIuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmNj
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIuY2MJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxMzYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLSNpbmNsdWRlICJ3ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9sZGVyLmgiCi0KLSNpbmNsdWRlICJ3
ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGNf
am5pIHsKLQotLy8gQ2xhc3NSZWZlcmVuY2VIb2xkZXIgaG9sZHMgZ2xvYmFsIHJlZmVyZW5jZSB0
byBKYXZhIGNsYXNzZXMgaW4gYXBwL3dlYnJ0Yy4KLWNsYXNzIENsYXNzUmVmZXJlbmNlSG9sZGVy
IHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IENsYXNzUmVmZXJlbmNlSG9sZGVyKEpOSUVudiogam5p
KTsKLSAgfkNsYXNzUmVmZXJlbmNlSG9sZGVyKCk7Ci0KLSAgdm9pZCBGcmVlUmVmZXJlbmNlcyhK
TklFbnYqIGpuaSk7Ci0gIGpjbGFzcyBHZXRDbGFzcyhjb25zdCBzdGQ6OnN0cmluZyYgbmFtZSk7
Ci0KLSBwcml2YXRlOgotICB2b2lkIExvYWRDbGFzcyhKTklFbnYqIGpuaSwgY29uc3Qgc3RkOjpz
dHJpbmcmIG5hbWUpOwotCi0gIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBqY2xhc3M+IGNsYXNzZXNf
OwotfTsKLQotLy8gQWxsb2NhdGVkIGluIExvYWRHbG9iYWxDbGFzc1JlZmVyZW5jZUhvbGRlcigp
LAotLy8gZnJlZWQgaW4gRnJlZUdsb2JhbENsYXNzUmVmZXJlbmNlSG9sZGVyKCkuCi1zdGF0aWMg
Q2xhc3NSZWZlcmVuY2VIb2xkZXIqIGdfY2xhc3NfcmVmZXJlbmNlX2hvbGRlciA9IG51bGxwdHI7
Ci0KLXZvaWQgTG9hZEdsb2JhbENsYXNzUmVmZXJlbmNlSG9sZGVyKCkgewotICBSVENfQ0hFQ0so
Z19jbGFzc19yZWZlcmVuY2VfaG9sZGVyID09IG51bGxwdHIpOwotICBnX2NsYXNzX3JlZmVyZW5j
ZV9ob2xkZXIgPSBuZXcgQ2xhc3NSZWZlcmVuY2VIb2xkZXIoR2V0RW52KCkpOwotfQotCi12b2lk
IEZyZWVHbG9iYWxDbGFzc1JlZmVyZW5jZUhvbGRlcigpIHsKLSAgZ19jbGFzc19yZWZlcmVuY2Vf
aG9sZGVyLT5GcmVlUmVmZXJlbmNlcyhBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKSk7Ci0g
IGRlbGV0ZSBnX2NsYXNzX3JlZmVyZW5jZV9ob2xkZXI7Ci0gIGdfY2xhc3NfcmVmZXJlbmNlX2hv
bGRlciA9IG51bGxwdHI7Ci19Ci0KLUNsYXNzUmVmZXJlbmNlSG9sZGVyOjpDbGFzc1JlZmVyZW5j
ZUhvbGRlcihKTklFbnYqIGpuaSkgewotICBMb2FkQ2xhc3Moam5pLCAiYW5kcm9pZC9ncmFwaGlj
cy9TdXJmYWNlVGV4dHVyZSIpOwotICBMb2FkQ2xhc3Moam5pLCAiamF2YS9uaW8vQnl0ZUJ1ZmZl
ciIpOwotICBMb2FkQ2xhc3Moam5pLCAiamF2YS91dGlsL0FycmF5TGlzdCIpOwotICBMb2FkQ2xh
c3Moam5pLCAib3JnL3dlYnJ0Yy9BdWRpb1RyYWNrIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcv
d2VicnRjL0NhbWVyYTFFbnVtZXJhdG9yIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRj
L0NhbWVyYTJFbnVtZXJhdG9yIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL0NhbWVy
YUVudW1lcmF0aW9uQW5kcm9pZCIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9EYXRh
Q2hhbm5lbCIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbCRCdWZm
ZXIiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvRGF0YUNoYW5uZWwkSW5pdCIpOwot
ICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9EYXRhQ2hhbm5lbCRTdGF0ZSIpOwotICBMb2Fk
Q2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9FZ2xCYXNlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcv
d2VicnRjL0VnbEJhc2UkQ29udGV4dCIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9F
Z2xCYXNlMTQkQ29udGV4dCIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9JY2VDYW5k
aWRhdGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5j
b2RlciIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyJE91dHB1dEJ1ZmZlckluZm8iKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVk
aWFDb2RlY1ZpZGVvRW5jb2RlciRWaWRlb0NvZGVjVHlwZSIpOwotICBMb2FkQ2xhc3Moam5pLCAi
b3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9EZWNvZGVyIik7Ci0gIExvYWRDbGFzcyhqbmksICJv
cmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0RlY29kZXIkRGVjb2RlZFRleHR1cmVCdWZmZXIiKTsK
LSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRGVjb2RlciREZWNv
ZGVkT3V0cHV0QnVmZmVyIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01lZGlhQ29k
ZWNWaWRlb0RlY29kZXIkVmlkZW9Db2RlY1R5cGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93
ZWJydGMvTWVkaWFTb3VyY2UkU3RhdGUiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMv
TWVkaWFTdHJlYW0iKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTWVkaWFTdHJlYW1U
cmFjayRTdGF0ZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZXRyaWNzIik7Ci0g
IExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL01ldHJpY3MkSGlzdG9ncmFtSW5mbyIpOwotICBM
b2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvciIpOwotICBMb2FkQ2xhc3Mo
am5pLCAib3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QkQ29ubmVjdGlvblR5cGUi
KTsKLSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0
JElQQWRkcmVzcyIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRv
ckF1dG9EZXRlY3QkTmV0d29ya0luZm9ybWF0aW9uIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcv
d2VicnRjL1BlZXJDb25uZWN0aW9uRmFjdG9yeSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dl
YnJ0Yy9QZWVyQ29ubmVjdGlvbiRCdW5kbGVQb2xpY3kiKTsKLSAgTG9hZENsYXNzKGpuaSwgIm9y
Zy93ZWJydGMvUGVlckNvbm5lY3Rpb24kQ29udGludWFsR2F0aGVyaW5nUG9saWN5Iik7Ci0gIExv
YWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJFJ0Y3BNdXhQb2xpY3kiKTsK
LSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kSWNlQ29ubmVjdGlv
blN0YXRlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJElj
ZUdhdGhlcmluZ1N0YXRlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1BlZXJDb25u
ZWN0aW9uJEljZVRyYW5zcG9ydHNUeXBlIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2VicnRj
L1BlZXJDb25uZWN0aW9uJFRjcENhbmRpZGF0ZVBvbGljeSIpOwotICBMb2FkQ2xhc3Moam5pLCAi
b3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRDYW5kaWRhdGVOZXR3b3JrUG9saWN5Iik7Ci0gIExv
YWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJEtleVR5cGUiKTsKLSAgTG9h
ZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kU2lnbmFsaW5nU3RhdGUiKTsK
LSAgTG9hZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUnRwUmVjZWl2ZXIiKTsKLSAgTG9hZENsYXNz
KGpuaSwgIm9yZy93ZWJydGMvUnRwU2VuZGVyIik7Ci0gIExvYWRDbGFzcyhqbmksICJvcmcvd2Vi
cnRjL1Nlc3Npb25EZXNjcmlwdGlvbiIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9T
ZXNzaW9uRGVzY3JpcHRpb24kVHlwZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9T
dGF0c1JlcG9ydCIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9TdGF0c1JlcG9ydCRW
YWx1ZSIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBl
ciIpOwotICBMb2FkQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyIik7Ci0gIExv
YWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXIkSTQyMEZyYW1lIik7Ci0gIExv
YWRDbGFzcyhqbmksICJvcmcvd2VicnRjL1ZpZGVvVHJhY2siKTsKLX0KLQotQ2xhc3NSZWZlcmVu
Y2VIb2xkZXI6On5DbGFzc1JlZmVyZW5jZUhvbGRlcigpIHsKLSAgUlRDX0NIRUNLKGNsYXNzZXNf
LmVtcHR5KCkpIDw8ICJNdXN0IGNhbGwgRnJlZVJlZmVyZW5jZXMoKSBiZWZvcmUgZHRvciEiOwot
fQotCi12b2lkIENsYXNzUmVmZXJlbmNlSG9sZGVyOjpGcmVlUmVmZXJlbmNlcyhKTklFbnYqIGpu
aSkgewotICBmb3IgKHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBqY2xhc3M+Ojpjb25zdF9pdGVyYXRv
ciBpdCA9IGNsYXNzZXNfLmJlZ2luKCk7Ci0gICAgICBpdCAhPSBjbGFzc2VzXy5lbmQoKTsgKytp
dCkgewotICAgIGpuaS0+RGVsZXRlR2xvYmFsUmVmKGl0LT5zZWNvbmQpOwotICB9Ci0gIGNsYXNz
ZXNfLmNsZWFyKCk7Ci19Ci0KLWpjbGFzcyBDbGFzc1JlZmVyZW5jZUhvbGRlcjo6R2V0Q2xhc3Mo
Y29uc3Qgc3RkOjpzdHJpbmcmIG5hbWUpIHsKLSAgc3RkOjptYXA8c3RkOjpzdHJpbmcsIGpjbGFz
cz46Oml0ZXJhdG9yIGl0ID0gY2xhc3Nlc18uZmluZChuYW1lKTsKLSAgUlRDX0NIRUNLKGl0ICE9
IGNsYXNzZXNfLmVuZCgpKSA8PCAiVW5leHBlY3RlZCBHZXRDbGFzcygpIGNhbGwgZm9yOiAiIDw8
IG5hbWU7Ci0gIHJldHVybiBpdC0+c2Vjb25kOwotfQotCi12b2lkIENsYXNzUmVmZXJlbmNlSG9s
ZGVyOjpMb2FkQ2xhc3MoSk5JRW52KiBqbmksIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lKSB7Ci0g
IGpjbGFzcyBsb2NhbFJlZiA9IGpuaS0+RmluZENsYXNzKG5hbWUuY19zdHIoKSk7Ci0gIENIRUNL
X0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgRmluZENsYXNzOiAiIDw8IG5hbWU7Ci0g
IFJUQ19DSEVDSyhsb2NhbFJlZikgPDwgbmFtZTsKLSAgamNsYXNzIGdsb2JhbFJlZiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8amNsYXNzPihqbmktPk5ld0dsb2JhbFJlZihsb2NhbFJlZikpOwotICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld0dsb2JhbFJlZjogIiA8PCBuYW1l
OwotICBSVENfQ0hFQ0soZ2xvYmFsUmVmKSA8PCBuYW1lOwotICBib29sIGluc2VydGVkID0gY2xh
c3Nlc18uaW5zZXJ0KHN0ZDo6bWFrZV9wYWlyKG5hbWUsIGdsb2JhbFJlZikpLnNlY29uZDsKLSAg
UlRDX0NIRUNLKGluc2VydGVkKSA8PCAiRHVwbGljYXRlIGNsYXNzIG5hbWU6ICIgPDwgbmFtZTsK
LX0KLQotLy8gUmV0dXJucyBhIGdsb2JhbCByZWZlcmVuY2UgZ3VhcmFudGVlZCB0byBiZSB2YWxp
ZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZQotLy8gcHJvY2Vzcy4KLWpjbGFzcyBGaW5kQ2xhc3Mo
Sk5JRW52KiBqbmksIGNvbnN0IGNoYXIqIG5hbWUpIHsKLSAgcmV0dXJuIGdfY2xhc3NfcmVmZXJl
bmNlX2hvbGRlci0+R2V0Q2xhc3MobmFtZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGNf
am5pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvY2xhc3Ny
ZWZlcmVuY2Vob2xkZXIuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNlaG9s
ZGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0vLyBBbmRyb2lkJ3MgRmluZENsYXNzKCkgaXMgdHJpY2tpZXIgdGhhbiB1c3VhbCBiZWNhdXNl
IHRoZSBhcHAtc3BlY2lmaWMKLS8vIENsYXNzTG9hZGVyIGlzIG5vdCBjb25zdWx0ZWQgd2hlbiB0
aGVyZSBpcyBubyBhcHAtc3BlY2lmaWMgZnJhbWUgb24gdGhlCi0vLyBzdGFjay4gIENvbnNlcXVl
bnRseSwgd2Ugb25seSBsb29rIHVwIGFsbCBjbGFzc2VzIG9uY2UgaW4gYXBwL3dlYnJ0Yy4KLS8v
IGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5jb20vdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1qbmku
aHRtbCNmYXFfRmluZENsYXNzCi0KLSNpZm5kZWYgV0VCUlRDX0FQSV9KQVZBX0pOSV9DTEFTU1JF
RkVSRU5DRUhPTERFUl9IXwotI2RlZmluZSBXRUJSVENfQVBJX0pBVkFfSk5JX0NMQVNTUkVGRVJF
TkNFSE9MREVSX0hfCi0KLSNpbmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxtYXA+Ci0jaW5jbHVk
ZSA8c3RyaW5nPgotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIExvYWRHbG9iYWxDbGFz
c1JlZmVyZW5jZUhvbGRlciBtdXN0IGJlIGNhbGxlZCBpbiBKTklfT25Mb2FkLgotdm9pZCBMb2Fk
R2xvYmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIoKTsKLS8vIEZyZWVHbG9iYWxDbGFzc1JlZmVyZW5j
ZUhvbGRlciBtdXN0IGJlIGNhbGxlZCBpbiBKTklfVW5Mb2FkLgotdm9pZCBGcmVlR2xvYmFsQ2xh
c3NSZWZlcmVuY2VIb2xkZXIoKTsKLQotLy8gUmV0dXJucyBhIGdsb2JhbCByZWZlcmVuY2UgZ3Vh
cmFudGVlZCB0byBiZSB2YWxpZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZQotLy8gcHJvY2Vzcy4K
LWpjbGFzcyBGaW5kQ2xhc3MoSk5JRW52KiBqbmksIGNvbnN0IGNoYXIqIG5hbWUpOwotCi0vLyBD
b252ZW5pZW5jZSBtYWNybyBkZWZpbmluZyBKTkktYWNjZXNzaWJsZSBtZXRob2RzIGluIHRoZSBv
cmcud2VicnRjIHBhY2thZ2UuCi0vLyBFbGltaW5hdGVzIHVubmVjZXNzYXJ5IGJvaWxlcnBsYXRl
IGFuZCBsaW5lLXdyYXBzLCByZWR1Y2luZyB2aXN1YWwgY2x1dHRlci4KLSNkZWZpbmUgSk9XKHJl
dHR5cGUsIG5hbWUpIGV4dGVybiAiQyIgcmV0dHlwZSBKTklFWFBPUlQgSk5JQ0FMTCBcCi0gIEph
dmFfb3JnX3dlYnJ0Y18jI25hbWUKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2Vu
ZGlmICAvLyBXRUJSVENfQVBJX0pBVkFfSk5JX0NMQVNTUkVGRVJFTkNFSE9MREVSX0hfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
bmkvam5pX2hlbHBlcnMuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmNjCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNTAgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5p
L2puaV9oZWxwZXJzLmgiCi0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNz
cmVmZXJlbmNlaG9sZGVyLmgiCi0KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0jaW5jbHVkZSA8
c3lzL3ByY3RsLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2NhbGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQu
aD4KLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi1zdGF0aWMgSmF2YVZNKiBnX2p2bSA9IG51
bGxwdHI7Ci0KLXN0YXRpYyBwdGhyZWFkX29uY2VfdCBnX2puaV9wdHJfb25jZSA9IFBUSFJFQURf
T05DRV9JTklUOwotCi0vLyBLZXkgZm9yIHBlci10aHJlYWQgSk5JRW52KiBkYXRhLiAgTm9uLU5V
TEwgaW4gdGhyZWFkcyBhdHRhY2hlZCB0byB8Z19qdm18IGJ5Ci0vLyBBdHRhY2hDdXJyZW50VGhy
ZWFkSWZOZWVkZWQoKSwgTlVMTCBpbiB1bmF0dGFjaGVkIHRocmVhZHMgYW5kIHRocmVhZHMgdGhh
dAotLy8gd2VyZSBhdHRhY2hlZCBieSB0aGUgSlZNIGJlY2F1c2Ugb2YgYSBKYXZhLT5uYXRpdmUg
Y2FsbC4KLXN0YXRpYyBwdGhyZWFkX2tleV90IGdfam5pX3B0cjsKLQotSmF2YVZNICpHZXRKVk0o
KSB7Ci0gIFJUQ19DSEVDSyhnX2p2bSkgPDwgIkpOSV9PbkxvYWQgZmFpbGVkIHRvIHJ1bj8iOwot
ICByZXR1cm4gZ19qdm07Ci19Ci0KLS8vIFJldHVybiBhIHxKTklFbnYqfCB1c2FibGUgb24gdGhp
cyB0aHJlYWQgb3IgTlVMTCBpZiB0aGlzIHRocmVhZCBpcyBkZXRhY2hlZC4KLUpOSUVudiogR2V0
RW52KCkgewotICB2b2lkKiBlbnYgPSBudWxscHRyOwotICBqaW50IHN0YXR1cyA9IGdfanZtLT5H
ZXRFbnYoJmVudiwgSk5JX1ZFUlNJT05fMV82KTsKLSAgUlRDX0NIRUNLKCgoZW52ICE9IG51bGxw
dHIpICYmIChzdGF0dXMgPT0gSk5JX09LKSkgfHwKLSAgICAgICAgICAgICgoZW52ID09IG51bGxw
dHIpICYmIChzdGF0dXMgPT0gSk5JX0VERVRBQ0hFRCkpKQotICAgICAgPDwgIlVuZXhwZWN0ZWQg
R2V0RW52IHJldHVybjogIiA8PCBzdGF0dXMgPDwgIjoiIDw8IGVudjsKLSAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Sk5JRW52Kj4oZW52KTsKLX0KLQotc3RhdGljIHZvaWQgVGhyZWFkRGVzdHJ1
Y3Rvcih2b2lkKiBwcmV2X2puaV9wdHIpIHsKLSAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IHJ1bnMg
b24gdGhyZWFkcyB3aGVyZSB8Z19qbmlfcHRyfCBpcyBub24tTlVMTCwgbWVhbmluZwotICAvLyB3
ZSB3ZXJlIHJlc3BvbnNpYmxlIGZvciBvcmlnaW5hbGx5IGF0dGFjaGluZyB0aGUgdGhyZWFkLCBz
byBhcmUgcmVzcG9uc2libGUKLSAgLy8gZm9yIGRldGFjaGluZyBpdCBub3cuICBIb3dldmVyLCBi
ZWNhdXNlIHNvbWUgSlZNIGltcGxlbWVudGF0aW9ucyAobm90YWJseQotICAvLyBPcmFjbGUncyBo
dHRwOi8vZ29vLmdsL2VIQXBZVCkgYWxzbyB1c2UgdGhlIHB0aHJlYWRfa2V5X2NyZWF0ZSBtZWNo
YW5pc20sCi0gIC8vIHRoZSBKVk1zIGFjY291bnRpbmcgaW5mbyBmb3IgdGhpcyB0aHJlYWQgbWF5
IGFscmVhZHkgYmUgd2lwZWQgb3V0IGJ5IHRoZQotICAvLyB0aW1lIHRoaXMgaXMgY2FsbGVkLiBU
aHVzIGl0IG1heSBhcHBlYXIgd2UgYXJlIGFscmVhZHkgZGV0YWNoZWQgZXZlbiB0aG91Z2gKLSAg
Ly8gaXQgd2FzIG91ciByZXNwb25zaWJpbGl0eSB0byBkZXRhY2ghICBPaCB3ZWxsLgotICBpZiAo
IUdldEVudigpKQotICAgIHJldHVybjsKLQotICBSVENfQ0hFQ0soR2V0RW52KCkgPT0gcHJldl9q
bmlfcHRyKQotICAgICAgPDwgIkRldGFjaGluZyBmcm9tIGFub3RoZXIgdGhyZWFkOiAiIDw8IHBy
ZXZfam5pX3B0ciA8PCAiOiIgPDwgR2V0RW52KCk7Ci0gIGppbnQgc3RhdHVzID0gZ19qdm0tPkRl
dGFjaEN1cnJlbnRUaHJlYWQoKTsKLSAgUlRDX0NIRUNLKHN0YXR1cyA9PSBKTklfT0spIDw8ICJG
YWlsZWQgdG8gZGV0YWNoIHRocmVhZDogIiA8PCBzdGF0dXM7Ci0gIFJUQ19DSEVDSyghR2V0RW52
KCkpIDw8ICJEZXRhY2hpbmcgd2FzIGEgc3VjY2Vzc2Z1bCBuby1vcD8/PyI7Ci19Ci0KLXN0YXRp
YyB2b2lkIENyZWF0ZUpOSVB0cktleSgpIHsKLSAgUlRDX0NIRUNLKCFwdGhyZWFkX2tleV9jcmVh
dGUoJmdfam5pX3B0ciwgJlRocmVhZERlc3RydWN0b3IpKQotICAgICAgPDwgInB0aHJlYWRfa2V5
X2NyZWF0ZSI7Ci19Ci0KLWppbnQgSW5pdEdsb2JhbEpuaVZhcmlhYmxlcyhKYXZhVk0gKmp2bSkg
ewotICBSVENfQ0hFQ0soIWdfanZtKSA8PCAiSW5pdEdsb2JhbEpuaVZhcmlhYmxlcyEiOwotICBn
X2p2bSA9IGp2bTsKLSAgUlRDX0NIRUNLKGdfanZtKSA8PCAiSW5pdEdsb2JhbEpuaVZhcmlhYmxl
cyBoYW5kZWQgTlVMTD8iOwotCi0gIFJUQ19DSEVDSyghcHRocmVhZF9vbmNlKCZnX2puaV9wdHJf
b25jZSwgJkNyZWF0ZUpOSVB0cktleSkpIDw8ICJwdGhyZWFkX29uY2UiOwotCi0gIEpOSUVudiog
am5pID0gbnVsbHB0cjsKLSAgaWYgKGp2bS0+R2V0RW52KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoq
Pigmam5pKSwgSk5JX1ZFUlNJT05fMV82KSAhPSBKTklfT0spCi0gICAgcmV0dXJuIC0xOwotCi0g
IHJldHVybiBKTklfVkVSU0lPTl8xXzY7Ci19Ci0KLS8vIFJldHVybiB0aHJlYWQgSUQgYXMgYSBz
dHJpbmcuCi1zdGF0aWMgc3RkOjpzdHJpbmcgR2V0VGhyZWFkSWQoKSB7Ci0gIGNoYXIgYnVmWzIx
XTsgIC8vIEJpZyBlbm91Z2ggdG8gaG9sZCBhIGt1aW50NjRtYXggcGx1cyB0ZXJtaW5hdGluZyBO
VUxMLgotICBSVENfQ0hFQ0tfTFQoc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVsZCIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxsb25nPihzeXNjYWxsKF9fTlJfZ2V0
dGlkKSkpLAotICAgICAgICAgICAgICAgc2l6ZW9mKGJ1ZikpCi0gICAgICA8PCAiVGhyZWFkIGlk
IGlzIGJpZ2dlciB0aGFuIHVpbnQ2ND8/IjsKLSAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1Zik7Ci19
Ci0KLS8vIFJldHVybiB0aGUgY3VycmVudCB0aHJlYWQncyBuYW1lLgotc3RhdGljIHN0ZDo6c3Ry
aW5nIEdldFRocmVhZE5hbWUoKSB7Ci0gIGNoYXIgbmFtZVsxN10gPSB7MH07Ci0gIGlmIChwcmN0
bChQUl9HRVRfTkFNRSwgbmFtZSkgIT0gMCkKLSAgICByZXR1cm4gc3RkOjpzdHJpbmcoIjxub25h
bWU+Iik7Ci0gIHJldHVybiBzdGQ6OnN0cmluZyhuYW1lKTsKLX0KLQotLy8gUmV0dXJuIGEgfEpO
SUVudip8IHVzYWJsZSBvbiB0aGlzIHRocmVhZC4gIEF0dGFjaGVzIHRvIHxnX2p2bXwgaWYgbmVj
ZXNzYXJ5LgotSk5JRW52KiBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQoKSB7Ci0gIEpOSUVu
diogam5pID0gR2V0RW52KCk7Ci0gIGlmIChqbmkpCi0gICAgcmV0dXJuIGpuaTsKLSAgUlRDX0NI
RUNLKCFwdGhyZWFkX2dldHNwZWNpZmljKGdfam5pX3B0cikpCi0gICAgICA8PCAiVExTIGhhcyBh
IEpOSUVudiogYnV0IG5vdCBhdHRhY2hlZD8iOwotCi0gIHN0ZDo6c3RyaW5nIG5hbWUoR2V0VGhy
ZWFkTmFtZSgpICsgIiAtICIgKyBHZXRUaHJlYWRJZCgpKTsKLSAgSmF2YVZNQXR0YWNoQXJncyBh
cmdzOwotICBhcmdzLnZlcnNpb24gPSBKTklfVkVSU0lPTl8xXzY7Ci0gIGFyZ3MubmFtZSA9ICZu
YW1lWzBdOwotICBhcmdzLmdyb3VwID0gbnVsbHB0cjsKLSAgLy8gRGVhbCB3aXRoIGRpZmZlcmVu
Y2UgaW4gc2lnbmF0dXJlcyBiZXR3ZWVuIE9yYWNsZSdzIGpuaS5oIGFuZCBBbmRyb2lkJ3MuCi0j
aWZkZWYgX0pBVkFTT0ZUX0pOSV9IXyAgLy8gT3JhY2xlJ3Mgam5pLmggdmlvbGF0ZXMgdGhlIEpO
SSBzcGVjIQotICB2b2lkKiBlbnYgPSBudWxscHRyOwotI2Vsc2UKLSAgSk5JRW52KiBlbnYgPSBu
dWxscHRyOwotI2VuZGlmCi0gIFJUQ19DSEVDSyghZ19qdm0tPkF0dGFjaEN1cnJlbnRUaHJlYWQo
JmVudiwgJmFyZ3MpKQotICAgICAgPDwgIkZhaWxlZCB0byBhdHRhY2ggdGhyZWFkIjsKLSAgUlRD
X0NIRUNLKGVudikgPDwgIkF0dGFjaEN1cnJlbnRUaHJlYWQgaGFuZGVkIGJhY2sgTlVMTCEiOwot
ICBqbmkgPSByZWludGVycHJldF9jYXN0PEpOSUVudio+KGVudik7Ci0gIFJUQ19DSEVDSyghcHRo
cmVhZF9zZXRzcGVjaWZpYyhnX2puaV9wdHIsIGpuaSkpIDw8ICJwdGhyZWFkX3NldHNwZWNpZmlj
IjsKLSAgcmV0dXJuIGpuaTsKLX0KLQotLy8gUmV0dXJuIGEgfGpsb25nfCB0aGF0IHdpbGwgY29y
cmVjdGx5IGNvbnZlcnQgYmFjayB0byB8cHRyfC4gIFRoaXMgaXMgbmVlZGVkCi0vLyBiZWNhdXNl
IHRoZSBhbHRlcm5hdGl2ZSAob2Ygc2lsZW50bHkgcGFzc2luZyBhIDMyLWJpdCBwb2ludGVyIHRv
IGEgdmFyYXJnCi0vLyBmdW5jdGlvbiBleHBlY3RpbmcgYSA2NC1iaXQgcGFyYW0pIHBpY2tzIHVw
IGdhcmJhZ2UgaW4gdGhlIGhpZ2ggMzIgYml0cy4KLWpsb25nIGpsb25nRnJvbVBvaW50ZXIodm9p
ZCogcHRyKSB7Ci0gIHN0YXRpY19hc3NlcnQoc2l6ZW9mKGludHB0cl90KSA8PSBzaXplb2Yoamxv
bmcpLAotICAgICAgICAgICAgICAgICJUaW1lIHRvIHJldGhpbmsgdGhlIHVzZSBvZiBqbG9uZ3Mi
KTsKLSAgLy8gR29pbmcgdGhyb3VnaCBpbnRwdHJfdCB0byBiZSBvYnZpb3VzIGFib3V0IHRoZSBk
ZWZpbmVkbmVzcyBvZiB0aGUKLSAgLy8gY29udmVyc2lvbiBmcm9tIHBvaW50ZXIgdG8gaW50ZWdy
YWwgdHlwZS4gIGludHB0cl90IHRvIGpsb25nIGlzIGEgc3RhbmRhcmQKLSAgLy8gd2lkZW5pbmcg
YnkgdGhlIHN0YXRpY19hc3NlcnQgYWJvdmUuCi0gIGpsb25nIHJldCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHB0cik7Ci0gIFJUQ19EQ0hFQ0socmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmV0KSA9PSBwdHIpOwotICByZXR1cm4gcmV0OwotfQotCi0vLyBKTklFbnYtaGVscGVyIG1ldGhv
ZHMgdGhhdCBSVENfQ0hFQ0sgc3VjY2Vzczogbm8gSmF2YSBleGNlcHRpb24gdGhyb3duIGFuZAot
Ly8gZm91bmQgb2JqZWN0L2NsYXNzL21ldGhvZC9maWVsZCBpcyBub24tbnVsbC4KLWptZXRob2RJ
RCBHZXRNZXRob2RJRCgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzIGMsIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBuYW1lLCBjb25zdCBjaGFyKiBzaWduYXR1cmUpIHsKLSAgam1ldGhvZElEIG0gPSBqbmkt
PkdldE1ldGhvZElEKGMsIG5hbWUuY19zdHIoKSwgc2lnbmF0dXJlKTsKLSAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBHZXRNZXRob2RJRDogIiA8PCBuYW1lIDw8ICIsICIK
LSAgICAgICAgICAgICAgICAgICAgICAgPDwgc2lnbmF0dXJlOwotICBSVENfQ0hFQ0sobSkgPDwg
bmFtZSA8PCAiLCAiIDw8IHNpZ25hdHVyZTsKLSAgcmV0dXJuIG07Ci19Ci0KLWptZXRob2RJRCBH
ZXRTdGF0aWNNZXRob2RJRCgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzIGMsIGNvbnN0IGNoYXIq
IG5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSkgewotICBqbWV0aG9kSUQgbSA9IGpuaS0+R2V0
U3RhdGljTWV0aG9kSUQoYywgbmFtZSwgc2lnbmF0dXJlKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpu
aSkgPDwgImVycm9yIGR1cmluZyBHZXRTdGF0aWNNZXRob2RJRDogIiA8PCBuYW1lIDw8ICIsICIK
LSAgICAgICAgICAgICAgICAgICAgICAgPDwgc2lnbmF0dXJlOwotICBSVENfQ0hFQ0sobSkgPDwg
bmFtZSA8PCAiLCAiIDw8IHNpZ25hdHVyZTsKLSAgcmV0dXJuIG07Ci19Ci0KLWpmaWVsZElEIEdl
dEZpZWxkSUQoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBjb25zdCBjaGFyKiBuYW1lLCBj
b25zdCBjaGFyKiBzaWduYXR1cmUpIHsKLSAgamZpZWxkSUQgZiA9IGpuaS0+R2V0RmllbGRJRChj
LCBuYW1lLCBzaWduYXR1cmUpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVy
aW5nIEdldEZpZWxkSUQiOwotICBSVENfQ0hFQ0soZikgPDwgbmFtZSA8PCAiLCAiIDw8IHNpZ25h
dHVyZTsKLSAgcmV0dXJuIGY7Ci19Ci0KLWpjbGFzcyBHZXRPYmplY3RDbGFzcyhKTklFbnYqIGpu
aSwgam9iamVjdCBvYmplY3QpIHsKLSAgamNsYXNzIGMgPSBqbmktPkdldE9iamVjdENsYXNzKG9i
amVjdCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgR2V0T2JqZWN0
Q2xhc3MiOwotICBSVENfQ0hFQ0soYykgPDwgIkdldE9iamVjdENsYXNzIHJldHVybmVkIE5VTEwi
OwotICByZXR1cm4gYzsKLX0KLQotam9iamVjdCBHZXRPYmplY3RGaWVsZChKTklFbnYqIGpuaSwg
am9iamVjdCBvYmplY3QsIGpmaWVsZElEIGlkKSB7Ci0gIGpvYmplY3QgbyA9IGpuaS0+R2V0T2Jq
ZWN0RmllbGQob2JqZWN0LCBpZCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBk
dXJpbmcgR2V0T2JqZWN0RmllbGQiOwotICBSVENfQ0hFQ0soIUlzTnVsbChqbmksIG8pKSA8PCAi
R2V0T2JqZWN0RmllbGQgcmV0dXJuZWQgTlVMTCI7Ci0gIHJldHVybiBvOwotfQotCi1qb2JqZWN0
IEdldE51bGxhYmxlT2JqZWN0RmllbGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBqZmll
bGRJRCBpZCkgewotICBqb2JqZWN0IG8gPSBqbmktPkdldE9iamVjdEZpZWxkKG9iamVjdCwgaWQp
OwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIEdldE9iamVjdEZpZWxk
IjsKLSAgcmV0dXJuIG87Ci19Ci0KLWpzdHJpbmcgR2V0U3RyaW5nRmllbGQoSk5JRW52KiBqbmks
IGpvYmplY3Qgb2JqZWN0LCBqZmllbGRJRCBpZCkgewotICByZXR1cm4gc3RhdGljX2Nhc3Q8anN0
cmluZz4oR2V0T2JqZWN0RmllbGQoam5pLCBvYmplY3QsIGlkKSk7Ci19Ci0KLWpsb25nIEdldExv
bmdGaWVsZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QsIGpmaWVsZElEIGlkKSB7Ci0gIGps
b25nIGwgPSBqbmktPkdldExvbmdGaWVsZChvYmplY3QsIGlkKTsKLSAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgImVycm9yIGR1cmluZyBHZXRMb25nRmllbGQiOwotICByZXR1cm4gbDsKLX0KLQot
amludCBHZXRJbnRGaWVsZChKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QsIGpmaWVsZElEIGlk
KSB7Ci0gIGppbnQgaSA9IGpuaS0+R2V0SW50RmllbGQob2JqZWN0LCBpZCk7Ci0gIENIRUNLX0VY
Q0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgR2V0SW50RmllbGQiOwotICByZXR1cm4gaTsK
LX0KLQotYm9vbCBHZXRCb29sZWFuRmllbGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBq
ZmllbGRJRCBpZCkgewotICBqYm9vbGVhbiBiID0gam5pLT5HZXRCb29sZWFuRmllbGQob2JqZWN0
LCBpZCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgR2V0Qm9vbGVh
bkZpZWxkIjsKLSAgcmV0dXJuIGI7Ci19Ci0KLWJvb2wgSXNOdWxsKEpOSUVudiogam5pLCBqb2Jq
ZWN0IG9iaikgewotICByZXR1cm4gam5pLT5Jc1NhbWVPYmplY3Qob2JqLCBudWxscHRyKTsKLX0K
LQotLy8gR2l2ZW4gYSBVVEYtOCBlbmNvZGVkIHxuYXRpdmV8IHN0cmluZyByZXR1cm4gYSBuZXcg
KFVURi0xNikganN0cmluZy4KLWpzdHJpbmcgSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoSk5JRW52
KiBqbmksIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYXRpdmUpIHsKLSAganN0cmluZyBqc3RyID0gam5p
LT5OZXdTdHJpbmdVVEYobmF0aXZlLmNfc3RyKCkpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8
PCAiZXJyb3IgZHVyaW5nIE5ld1N0cmluZ1VURiI7Ci0gIHJldHVybiBqc3RyOwotfQotCi0vLyBH
aXZlbiBhIChVVEYtMTYpIGpzdHJpbmcgcmV0dXJuIGEgbmV3IFVURi04IG5hdGl2ZSBzdHJpbmcu
Ci1zdGQ6OnN0cmluZyBKYXZhVG9TdGRTdHJpbmcoSk5JRW52KiBqbmksIGNvbnN0IGpzdHJpbmcm
IGpfc3RyaW5nKSB7Ci0gIGNvbnN0IGNoYXIqIGNoYXJzID0gam5pLT5HZXRTdHJpbmdVVEZDaGFy
cyhqX3N0cmluZywgbnVsbHB0cik7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJFcnJvciBk
dXJpbmcgR2V0U3RyaW5nVVRGQ2hhcnMiOwotICBzdGQ6OnN0cmluZyBzdHIoY2hhcnMsIGpuaS0+
R2V0U3RyaW5nVVRGTGVuZ3RoKGpfc3RyaW5nKSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8
ICJFcnJvciBkdXJpbmcgR2V0U3RyaW5nVVRGTGVuZ3RoIjsKLSAgam5pLT5SZWxlYXNlU3RyaW5n
VVRGQ2hhcnMoal9zdHJpbmcsIGNoYXJzKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgIkVy
cm9yIGR1cmluZyBSZWxlYXNlU3RyaW5nVVRGQ2hhcnMiOwotICByZXR1cm4gc3RyOwotfQotCi0v
LyBSZXR1cm4gdGhlIChzaW5nbGV0b24pIEphdmEgRW51bSBvYmplY3QgY29ycmVzcG9uZGluZyB0
byB8aW5kZXh8Owotam9iamVjdCBKYXZhRW51bUZyb21JbmRleChKTklFbnYqIGpuaSwgamNsYXNz
IHN0YXRlX2NsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgc3RhdGVfY2xhc3NfbmFtZSwgaW50IGluZGV4KSB7Ci0gIGptZXRob2RJRCBzdGF0ZV92YWx1
ZXNfaWQgPSBHZXRTdGF0aWNNZXRob2RJRCgKLSAgICAgIGpuaSwgc3RhdGVfY2xhc3MsICJ2YWx1
ZXMiLCAoIigpW0wiICsgc3RhdGVfY2xhc3NfbmFtZSAgKyAiOyIpLmNfc3RyKCkpOwotICBqb2Jq
ZWN0QXJyYXkgc3RhdGVfdmFsdWVzID0gc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PigKLSAgICAg
IGpuaS0+Q2FsbFN0YXRpY09iamVjdE1ldGhvZChzdGF0ZV9jbGFzcywgc3RhdGVfdmFsdWVzX2lk
KSk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFN0YXRpY09i
amVjdE1ldGhvZCI7Ci0gIGpvYmplY3QgcmV0ID0gam5pLT5HZXRPYmplY3RBcnJheUVsZW1lbnQo
c3RhdGVfdmFsdWVzLCBpbmRleCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBk
dXJpbmcgR2V0T2JqZWN0QXJyYXlFbGVtZW50IjsKLSAgcmV0dXJuIHJldDsKLX0KLQotc3RkOjpz
dHJpbmcgR2V0SmF2YUVudW1OYW1lKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgam9iamVjdCBqX2VudW0pIHsKLSAgamNsYXNzIGVudW1DbGFzcyA9IEZpbmRDbGFz
cyhqbmksIGNsYXNzTmFtZS5jX3N0cigpKTsKLSAgam1ldGhvZElEIG5hbWVNZXRob2QgPQotICAg
ICAgR2V0TWV0aG9kSUQoam5pLCBlbnVtQ2xhc3MsICJuYW1lIiwgIigpTGphdmEvbGFuZy9TdHJp
bmc7Iik7Ci0gIGpzdHJpbmcgbmFtZSA9Ci0gICAgICByZWludGVycHJldF9jYXN0PGpzdHJpbmc+
KGpuaS0+Q2FsbE9iamVjdE1ldGhvZChqX2VudW0sIG5hbWVNZXRob2QpKTsKLSAgQ0hFQ0tfRVhD
RVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsT2JqZWN0TWV0aG9kIGZvciAiIDw8IGNs
YXNzTmFtZQotICAgICAgICAgICAgICAgICAgICAgICA8PCAiLm5hbWUiOwotICByZXR1cm4gSmF2
YVRvU3RkU3RyaW5nKGpuaSwgbmFtZSk7Ci19Ci0KLWpvYmplY3QgTmV3R2xvYmFsUmVmKEpOSUVu
diogam5pLCBqb2JqZWN0IG8pIHsKLSAgam9iamVjdCByZXQgPSBqbmktPk5ld0dsb2JhbFJlZihv
KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdHbG9iYWxSZWYi
OwotICBSVENfQ0hFQ0socmV0KTsKLSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBEZWxldGVHbG9i
YWxSZWYoSk5JRW52KiBqbmksIGpvYmplY3QgbykgewotICBqbmktPkRlbGV0ZUdsb2JhbFJlZihv
KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBEZWxldGVHbG9iYWxS
ZWYiOwotfQotCi0vLyBTY29wZSBKYXZhIGxvY2FsIHJlZmVyZW5jZXMgdG8gdGhlIGxpZmV0aW1l
IG9mIHRoaXMgb2JqZWN0LiAgVXNlIGluIGFsbCBDKysKLS8vIGNhbGxiYWNrcyAoaS5lLiBlbnRy
eSBwb2ludHMgdGhhdCBkb24ndCBvcmlnaW5hdGUgaW4gYSBKYXZhIGNhbGxzdGFjawotLy8gdGhy
b3VnaCBhICJuYXRpdmUiIG1ldGhvZCBjYWxsKS4KLVNjb3BlZExvY2FsUmVmRnJhbWU6OlNjb3Bl
ZExvY2FsUmVmRnJhbWUoSk5JRW52KiBqbmkpIDogam5pXyhqbmkpIHsKLSAgUlRDX0NIRUNLKCFq
bmlfLT5QdXNoTG9jYWxGcmFtZSgwKSkgPDwgIkZhaWxlZCB0byBQdXNoTG9jYWxGcmFtZSI7Ci19
Ci1TY29wZWRMb2NhbFJlZkZyYW1lOjp+U2NvcGVkTG9jYWxSZWZGcmFtZSgpIHsKLSAgam5pXy0+
UG9wTG9jYWxGcmFtZShudWxscHRyKTsKLX0KLQotLy8gQ3JlYXRlcyBhbiBpdGVyYXRvciByZXBy
ZXNlbnRpbmcgdGhlIGVuZCBvZiBhbnkgY29sbGVjdGlvbi4KLUl0ZXJhYmxlOjpJdGVyYXRvcjo6
SXRlcmF0b3IoKSA6IGl0ZXJhdG9yXyhudWxscHRyKSB7fQotCi0vLyBDcmVhdGVzIGFuIGl0ZXJh
dG9yIHBvaW50aW5nIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNwZWNpZmllZCBjb2xsZWN0aW9u
LgotSXRlcmFibGU6Okl0ZXJhdG9yOjpJdGVyYXRvcihKTklFbnYqIGpuaSwgam9iamVjdCBpdGVy
YWJsZSkgOiBqbmlfKGpuaSkgewotICBqY2xhc3Mgal9jbGFzcyA9IEdldE9iamVjdENsYXNzKGpu
aSwgaXRlcmFibGUpOwotICBqbWV0aG9kSUQgaXRlcmF0b3JfaWQgPQotICAgICAgR2V0TWV0aG9k
SUQoam5pLCBqX2NsYXNzLCAiaXRlcmF0b3IiLCAiKClMamF2YS91dGlsL0l0ZXJhdG9yOyIpOwot
ICBpdGVyYXRvcl8gPSBqbmktPkNhbGxPYmplY3RNZXRob2QoaXRlcmFibGUsIGl0ZXJhdG9yX2lk
KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsT2JqZWN0TWV0
aG9kIjsKLSAgUlRDX0NIRUNLKGl0ZXJhdG9yXyAhPSBudWxscHRyKTsKLQotICBqY2xhc3MgaXRl
cmF0b3JfY2xhc3MgPSBHZXRPYmplY3RDbGFzcyhqbmksIGl0ZXJhdG9yXyk7Ci0gIGhhc19uZXh0
X2lkXyA9IEdldE1ldGhvZElEKGpuaSwgaXRlcmF0b3JfY2xhc3MsICJoYXNOZXh0IiwgIigpWiIp
OwotICBuZXh0X2lkXyA9IEdldE1ldGhvZElEKGpuaSwgaXRlcmF0b3JfY2xhc3MsICJuZXh0Iiwg
IigpTGphdmEvbGFuZy9PYmplY3Q7Iik7Ci0KLSAgLy8gU3RhcnQgYXQgdGhlIGZpcnN0IGVsZW1l
bnQgaW4gdGhlIGNvbGxlY3Rpb24uCi0gICsrKCp0aGlzKTsKLX0KLQotLy8gTW92ZSBjb25zdHJ1
Y3RvciAtIG5lY2Vzc2FyeSB0byBiZSBhYmxlIHRvIHJldHVybiBpdGVyYXRvciB0eXBlcyBmcm9t
Ci0vLyBmdW5jdGlvbnMuCi1JdGVyYWJsZTo6SXRlcmF0b3I6Okl0ZXJhdG9yKEl0ZXJhdG9yJiYg
b3RoZXIpCi0gICAgOiBqbmlfKHN0ZDo6bW92ZShvdGhlci5qbmlfKSksCi0gICAgICBpdGVyYXRv
cl8oc3RkOjptb3ZlKG90aGVyLml0ZXJhdG9yXykpLAotICAgICAgdmFsdWVfKHN0ZDo6bW92ZShv
dGhlci52YWx1ZV8pKSwKLSAgICAgIGhhc19uZXh0X2lkXyhzdGQ6Om1vdmUob3RoZXIuaGFzX25l
eHRfaWRfKSksCi0gICAgICBuZXh0X2lkXyhzdGQ6Om1vdmUob3RoZXIubmV4dF9pZF8pKSwKLSAg
ICAgIHRocmVhZF9jaGVja2VyXyhzdGQ6Om1vdmUob3RoZXIudGhyZWFkX2NoZWNrZXJfKSl7fTsK
LQotLy8gQWR2YW5jZXMgdGhlIGl0ZXJhdG9yIG9uZSBzdGVwLgotSXRlcmFibGU6Okl0ZXJhdG9y
JiBJdGVyYWJsZTo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKSB7Ci0gIFJUQ19DSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKEF0RW5kKCkpIHsKLSAgICAv
LyBDYW4ndCBtb3ZlIHBhc3QgdGhlIGVuZC4KLSAgICByZXR1cm4gKnRoaXM7Ci0gIH0KLSAgYm9v
bCBoYXNfbmV4dCA9IGpuaV8tPkNhbGxCb29sZWFuTWV0aG9kKGl0ZXJhdG9yXywgaGFzX25leHRf
aWRfKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaV8pIDw8ICJlcnJvciBkdXJpbmcgQ2FsbEJvb2xl
YW5NZXRob2QiOwotICBpZiAoIWhhc19uZXh0KSB7Ci0gICAgaXRlcmF0b3JfID0gbnVsbHB0cjsK
LSAgICB2YWx1ZV8gPSBudWxscHRyOwotICAgIHJldHVybiAqdGhpczsKLSAgfQotCi0gIHZhbHVl
XyA9IGpuaV8tPkNhbGxPYmplY3RNZXRob2QoaXRlcmF0b3JfLCBuZXh0X2lkXyk7Ci0gIENIRUNL
X0VYQ0VQVElPTihqbmlfKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxPYmplY3RNZXRob2QiOwotICBy
ZXR1cm4gKnRoaXM7Ci19Ci0KLS8vIFByb3ZpZGVzIGEgd2F5IHRvIGNvbXBhcmUgdGhlIGl0ZXJh
dG9yIHdpdGggaXRzZWxmIGFuZCB3aXRoIHRoZSBlbmQgaXRlcmF0b3IuCi0vLyBOb3RlOiBhbGwg
b3RoZXIgY29tcGFyaXNvbiByZXN1bHRzIGFyZSB1bmRlZmluZWQsIGp1c3QgbGlrZSBmb3IgQysr
IGlucHV0Ci0vLyBpdGVyYXRvcnMuCi1ib29sIEl0ZXJhYmxlOjpJdGVyYXRvcjo6b3BlcmF0b3I9
PShjb25zdCBJdGVyYWJsZTo6SXRlcmF0b3ImIG90aGVyKSB7Ci0gIC8vIFR3byBkaWZmZXJlbnQg
YWN0aXZlIGl0ZXJhdG9ycyBzaG91bGQgbmV2ZXIgYmUgY29tcGFyZWQuCi0gIFJUQ19EQ0hFQ0so
dGhpcyA9PSAmb3RoZXIgfHwgQXRFbmQoKSB8fCBvdGhlci5BdEVuZCgpKTsKLSAgcmV0dXJuIEF0
RW5kKCkgPT0gb3RoZXIuQXRFbmQoKTsKLX0KLQotam9iamVjdCBJdGVyYWJsZTo6SXRlcmF0b3I6
Om9wZXJhdG9yKigpIHsKLSAgUlRDX0NIRUNLKCFBdEVuZCgpKTsKLSAgcmV0dXJuIHZhbHVlXzsK
LX0KLQotYm9vbCBJdGVyYWJsZTo6SXRlcmF0b3I6OkF0RW5kKCkgY29uc3QgewotICBSVENfQ0hF
Q0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVybiBqbmlf
ID09IG51bGxwdHIgfHwgSXNOdWxsKGpuaV8sIGl0ZXJhdG9yXyk7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSB3ZWJydGNfam5pCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5p
X2hlbHBlcnMuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL2puaV9oZWxwZXJzLmgJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotLy8gVGhpcyBmaWxl
IGNvbnRhaW4gY29udmVuaWVuY2UgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGZvciBKTkkuCi0vLyBC
ZWZvcmUgdXNpbmcgYW55IG9mIHRoZSBtZXRob2RzLCBJbml0R2xvYmFsSm5pVmFyaWFibGVzIG11
c3QgYmUgY2FsbGVkLgotCi0jaWZuZGVmIFdFQlJUQ19BUElfSkFWQV9KTklfSk5JX0hFTFBFUlNf
SF8KLSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9KTklfSEVMUEVSU19IXwotCi0jaW5jbHVk
ZSA8am5pLmg+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY29u
c3RydWN0b3JtYWdpYy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0KLS8vIEFib3J0IHRoZSBwcm9jZXNz
IGlmIHxqbml8IGhhcyBhIEphdmEgZXhjZXB0aW9uIHBlbmRpbmcuCi0vLyBUaGlzIG1hY3JvcyB1
c2VzIHRoZSBjb21tYSBvcGVyYXRvciB0byBleGVjdXRlIEV4Y2VwdGlvbkRlc2NyaWJlCi0vLyBh
bmQgRXhjZXB0aW9uQ2xlYXIgaWdub3JpbmcgdGhlaXIgcmV0dXJuIHZhbHVlcyBhbmQgc2VuZGlu
ZyAiIgotLy8gdG8gdGhlIGVycm9yIHN0cmVhbS4KLSNkZWZpbmUgQ0hFQ0tfRVhDRVBUSU9OKGpu
aSkgICAgICAgIFwKLSAgUlRDX0NIRUNLKCFqbmktPkV4Y2VwdGlvbkNoZWNrKCkpIFwKLSAgICAg
IDw8IChqbmktPkV4Y2VwdGlvbkRlc2NyaWJlKCksIGpuaS0+RXhjZXB0aW9uQ2xlYXIoKSwgIiIp
Ci0KLS8vIEhlbHBlciB0aGF0IGNhbGxzIHB0ci0+UmVsZWFzZSgpIGFuZCBhYm9ydHMgdGhlIHBy
b2Nlc3Mgd2l0aCBhIHVzZWZ1bAotLy8gbWVzc2FnZSBpZiB0aGF0IGRpZG4ndCBhY3R1YWxseSBk
ZWxldGUgKnB0ciBiZWNhdXNlIG9mIGV4dHJhIHJlZmNvdW50cy4KLSNkZWZpbmUgQ0hFQ0tfUkVM
RUFTRShwdHIpIFwKLSAgUlRDX0NIRUNLX0VRKDAsIChwdHIpLT5SZWxlYXNlKCkpIDw8ICJVbmV4
cGVjdGVkIHJlZmNvdW50LiIKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi1qaW50IEluaXRH
bG9iYWxKbmlWYXJpYWJsZXMoSmF2YVZNICpqdm0pOwotCi0vLyBSZXR1cm4gYSB8Sk5JRW52Knwg
dXNhYmxlIG9uIHRoaXMgdGhyZWFkIG9yIE5VTEwgaWYgdGhpcyB0aHJlYWQgaXMgZGV0YWNoZWQu
Ci1KTklFbnYqIEdldEVudigpOwotCi1KYXZhVk0gKkdldEpWTSgpOwotCi0vLyBSZXR1cm4gYSB8
Sk5JRW52KnwgdXNhYmxlIG9uIHRoaXMgdGhyZWFkLiAgQXR0YWNoZXMgdG8gfGdfanZtfCBpZiBu
ZWNlc3NhcnkuCi1KTklFbnYqIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotCi0vLyBS
ZXR1cm4gYSB8amxvbmd8IHRoYXQgd2lsbCBjb3JyZWN0bHkgY29udmVydCBiYWNrIHRvIHxwdHJ8
LiAgVGhpcyBpcyBuZWVkZWQKLS8vIGJlY2F1c2UgdGhlIGFsdGVybmF0aXZlIChvZiBzaWxlbnRs
eSBwYXNzaW5nIGEgMzItYml0IHBvaW50ZXIgdG8gYSB2YXJhcmcKLS8vIGZ1bmN0aW9uIGV4cGVj
dGluZyBhIDY0LWJpdCBwYXJhbSkgcGlja3MgdXAgZ2FyYmFnZSBpbiB0aGUgaGlnaCAzMiBiaXRz
LgotamxvbmcgamxvbmdGcm9tUG9pbnRlcih2b2lkKiBwdHIpOwotCi0vLyBKTklFbnYtaGVscGVy
IG1ldGhvZHMgdGhhdCBSVENfQ0hFQ0sgc3VjY2Vzczogbm8gSmF2YSBleGNlcHRpb24gdGhyb3du
IGFuZAotLy8gZm91bmQgb2JqZWN0L2NsYXNzL21ldGhvZC9maWVsZCBpcyBub24tbnVsbC4KLWpt
ZXRob2RJRCBHZXRNZXRob2RJRCgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzIGMsIGNvbnN0IHN0
ZDo6c3RyaW5nJiBuYW1lLCBjb25zdCBjaGFyKiBzaWduYXR1cmUpOwotCi1qbWV0aG9kSUQgR2V0
U3RhdGljTWV0aG9kSUQoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBjaGFyKiBzaWduYXR1cmUpOwotCi1qZmllbGRJRCBHZXRGaWVsZElEKEpOSUVu
diogam5pLCBqY2xhc3MgYywgY29uc3QgY2hhciogbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogc2lnbmF0dXJlKTsKLQotamNsYXNzIEdldE9iamVjdENsYXNzKEpOSUVudiog
am5pLCBqb2JqZWN0IG9iamVjdCk7Ci0KLS8vIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIG9i
amVjdCBmaWVsZCBpcyBudWxsLgotam9iamVjdCBHZXRPYmplY3RGaWVsZChKTklFbnYqIGpuaSwg
am9iamVjdCBvYmplY3QsIGpmaWVsZElEIGlkKTsKLQotam9iamVjdCBHZXROdWxsYWJsZU9iamVj
dEZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpOwotCi1qc3Ry
aW5nIEdldFN0cmluZ0ZpZWxkKEpOSUVudiogam5pLCBqb2JqZWN0IG9iamVjdCwgamZpZWxkSUQg
aWQpOwotCi1qbG9uZyBHZXRMb25nRmllbGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqZWN0LCBq
ZmllbGRJRCBpZCk7Ci0KLWppbnQgR2V0SW50RmllbGQoSk5JRW52KiBqbmksIGpvYmplY3Qgb2Jq
ZWN0LCBqZmllbGRJRCBpZCk7Ci0KLWJvb2wgR2V0Qm9vbGVhbkZpZWxkKEpOSUVudiogam5pLCBq
b2JqZWN0IG9iamVjdCwgamZpZWxkSUQgaWQpOwotCi0vLyBSZXR1cm5zIHRydWUgaWYgfG9ianwg
PT0gbnVsbCBpbiBKYXZhLgotYm9vbCBJc051bGwoSk5JRW52KiBqbmksIGpvYmplY3Qgb2JqKTsK
LQotLy8gR2l2ZW4gYSBVVEYtOCBlbmNvZGVkIHxuYXRpdmV8IHN0cmluZyByZXR1cm4gYSBuZXcg
KFVURi0xNikganN0cmluZy4KLWpzdHJpbmcgSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoSk5JRW52
KiBqbmksIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYXRpdmUpOwotCi0vLyBHaXZlbiBhIChVVEYtMTYp
IGpzdHJpbmcgcmV0dXJuIGEgbmV3IFVURi04IG5hdGl2ZSBzdHJpbmcuCi1zdGQ6OnN0cmluZyBK
YXZhVG9TdGRTdHJpbmcoSk5JRW52KiBqbmksIGNvbnN0IGpzdHJpbmcmIGpfc3RyaW5nKTsKLQot
Ly8gUmV0dXJuIHRoZSAoc2luZ2xldG9uKSBKYXZhIEVudW0gb2JqZWN0IGNvcnJlc3BvbmRpbmcg
dG8gfGluZGV4fDsKLWpvYmplY3QgSmF2YUVudW1Gcm9tSW5kZXgoSk5JRW52KiBqbmksIGpjbGFz
cyBzdGF0ZV9jbGFzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJp
bmcmIHN0YXRlX2NsYXNzX25hbWUsIGludCBpbmRleCk7Ci0KLS8vIFJldHVybnMgdGhlIG5hbWUg
b2YgYSBKYXZhIGVudW0uCi1zdGQ6OnN0cmluZyBHZXRKYXZhRW51bU5hbWUoSk5JRW52KiBqbmks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGNsYXNzTmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGpfZW51bSk7Ci0KLWpvYmpl
Y3QgTmV3R2xvYmFsUmVmKEpOSUVudiogam5pLCBqb2JqZWN0IG8pOwotCi12b2lkIERlbGV0ZUds
b2JhbFJlZihKTklFbnYqIGpuaSwgam9iamVjdCBvKTsKLQotLy8gU2NvcGUgSmF2YSBsb2NhbCBy
ZWZlcmVuY2VzIHRvIHRoZSBsaWZldGltZSBvZiB0aGlzIG9iamVjdC4gIFVzZSBpbiBhbGwgQysr
Ci0vLyBjYWxsYmFja3MgKGkuZS4gZW50cnkgcG9pbnRzIHRoYXQgZG9uJ3Qgb3JpZ2luYXRlIGlu
IGEgSmF2YSBjYWxsc3RhY2sKLS8vIHRocm91Z2ggYSAibmF0aXZlIiBtZXRob2QgY2FsbCkuCi1j
bGFzcyBTY29wZWRMb2NhbFJlZkZyYW1lIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFNjb3BlZExv
Y2FsUmVmRnJhbWUoSk5JRW52KiBqbmkpOwotICB+U2NvcGVkTG9jYWxSZWZGcmFtZSgpOwotCi0g
cHJpdmF0ZToKLSAgSk5JRW52KiBqbmlfOwotfTsKLQotLy8gU2NvcGVkIGhvbGRlciBmb3IgZ2xv
YmFsIEphdmEgcmVmcy4KLXRlbXBsYXRlPGNsYXNzIFQ+ICAvLyBUIGlzIGpjbGFzcywgam9iamVj
dCwgamludEFycmF5LCBldGMuCi1jbGFzcyBTY29wZWRHbG9iYWxSZWYgewotIHB1YmxpYzoKLSAg
U2NvcGVkR2xvYmFsUmVmKEpOSUVudiogam5pLCBUIG9iaikKLSAgICAgIDogb2JqXyhzdGF0aWNf
Y2FzdDxUPihqbmktPk5ld0dsb2JhbFJlZihvYmopKSkge30KLSAgflNjb3BlZEdsb2JhbFJlZigp
IHsKLSAgICBEZWxldGVHbG9iYWxSZWYoQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCksIG9i
al8pOwotICB9Ci0gIFQgb3BlcmF0b3IqKCkgY29uc3QgewotICAgIHJldHVybiBvYmpfOwotICB9
Ci0gcHJpdmF0ZToKLSAgVCBvYmpfOwotfTsKLQotLy8gUHJvdmlkZXMgYSBjb252ZW5pZW50IHdh
eSB0byBpdGVyYXRlIG92ZXIgYSBKYXZhIEl0ZXJhYmxlIHVzaW5nIHRoZQotLy8gQysrIHJhbmdl
LWZvciBsb29wLgotLy8gRS5nLiBmb3IgKGpvYmplY3QgdmFsdWUgOiBJdGVyYWJsZShqbmksIGpf
aXRlcmFibGUpKSB7IC4uLiB9Ci0vLyBOb3RlOiBTaW5jZSBKYXZhIGl0ZXJhdG9ycyBjYW5ub3Qg
YmUgZHVwbGljYXRlZCwgdGhlIGl0ZXJhdG9yIGNsYXNzIGlzIG5vdAotLy8gY29weWFibGUgdG8g
cHJldmVudCBjcmVhdGluZyBtdWx0aXBsZSBDKysgaXRlcmF0b3JzIHRoYXQgcmVmZXIgdG8gdGhl
IHNhbWUKLS8vIEphdmEgaXRlcmF0b3IuCi1jbGFzcyBJdGVyYWJsZSB7Ci0gcHVibGljOgotICBJ
dGVyYWJsZShKTklFbnYqIGpuaSwgam9iamVjdCBpdGVyYWJsZSkgOiBqbmlfKGpuaSksIGl0ZXJh
YmxlXyhpdGVyYWJsZSkge30KLQotICBjbGFzcyBJdGVyYXRvciB7Ci0gICBwdWJsaWM6Ci0gICAg
Ly8gQ3JlYXRlcyBhbiBpdGVyYXRvciByZXByZXNlbnRpbmcgdGhlIGVuZCBvZiBhbnkgY29sbGVj
dGlvbi4KLSAgICBJdGVyYXRvcigpOwotICAgIC8vIENyZWF0ZXMgYW4gaXRlcmF0b3IgcG9pbnRp
bmcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3BlY2lmaWVkCi0gICAgLy8gY29sbGVjdGlvbi4K
LSAgICBJdGVyYXRvcihKTklFbnYqIGpuaSwgam9iamVjdCBpdGVyYWJsZSk7Ci0KLSAgICAvLyBN
b3ZlIGNvbnN0cnVjdG9yIC0gbmVjZXNzYXJ5IHRvIGJlIGFibGUgdG8gcmV0dXJuIGl0ZXJhdG9y
IHR5cGVzIGZyb20KLSAgICAvLyBmdW5jdGlvbnMuCi0gICAgSXRlcmF0b3IoSXRlcmF0b3ImJiBv
dGhlcik7Ci0KLSAgICAvLyBNb3ZlIGFzc2lnbm1lbnQgc2hvdWxkIG5vdCBiZSB1c2VkLgotICAg
IEl0ZXJhdG9yJiBvcGVyYXRvcj0oSXRlcmF0b3ImJikgPSBkZWxldGU7Ci0KLSAgICAvLyBBZHZh
bmNlcyB0aGUgaXRlcmF0b3Igb25lIHN0ZXAuCi0gICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsK
LQotICAgIC8vIFByb3ZpZGVzIGEgd2F5IHRvIGNvbXBhcmUgdGhlIGl0ZXJhdG9yIHdpdGggaXRz
ZWxmIGFuZCB3aXRoIHRoZSBlbmQKLSAgICAvLyBpdGVyYXRvci4KLSAgICAvLyBOb3RlOiBhbGwg
b3RoZXIgY29tcGFyaXNvbiByZXN1bHRzIGFyZSB1bmRlZmluZWQsIGp1c3QgbGlrZSBmb3IgQysr
IGlucHV0Ci0gICAgLy8gaXRlcmF0b3JzLgotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVy
YXRvciYgb3RoZXIpOwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJdGVyYXRvciYgb3RoZXIp
IHsgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOyB9Ci0gICAgam9iamVjdCBvcGVyYXRvciooKTsK
LQotICAgcHJpdmF0ZToKLSAgICBib29sIEF0RW5kKCkgY29uc3Q7Ci0KLSAgICBKTklFbnYqIGpu
aV8gPSBudWxscHRyOwotICAgIGpvYmplY3QgaXRlcmF0b3JfID0gbnVsbHB0cjsKLSAgICBqb2Jq
ZWN0IHZhbHVlXyA9IG51bGxwdHI7Ci0gICAgam1ldGhvZElEIGhhc19uZXh0X2lkXyA9IG51bGxw
dHI7Ci0gICAgam1ldGhvZElEIG5leHRfaWRfID0gbnVsbHB0cjsKLSAgICBydGM6OlRocmVhZENo
ZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotCi0gICAgUlRDX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lH
TihJdGVyYXRvcik7Ci0gIH07Ci0KLSAgSXRlcmFibGU6Okl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gSXRlcmFibGU6Okl0ZXJhdG9yKGpuaV8sIGl0ZXJhYmxlXyk7IH0KLSAgSXRlcmFibGU6Okl0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIEl0ZXJhYmxlOjpJdGVyYXRvcigpOyB9Ci0KLSBwcml2YXRl
OgotICBKTklFbnYqIGpuaV87Ci0gIGpvYmplY3QgaXRlcmFibGVfOwotCi0gIFJUQ19ESVNBTExP
V19DT1BZX0FORF9BU1NJR04oSXRlcmFibGUpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0
Y19qbmkKLQotI2VuZGlmICAvLyBXRUJSVENfQVBJX0pBVkFfSk5JX0pOSV9IRUxQRVJTX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qbmkvam5pX29ubG9hZC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX29ubG9hZC5jYwkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWQvam5pL2puaV9vbmxvYWQuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8am5pLmg+Ci0jdW5kZWYgSk5JRVhQ
T1JUCi0jZGVmaW5lIEpOSUVYUE9SVCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0
IikpKQotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9jbGFzc3JlZmVyZW5jZWhv
bGRlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvam5pX2hlbHBlcnMuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9zc2xhZGFwdGVyLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGNf
am5pIHsKLQotZXh0ZXJuICJDIiBqaW50IEpOSUVYUE9SVCBKTklDQUxMIEpOSV9PbkxvYWQoSmF2
YVZNICpqdm0sIHZvaWQgKnJlc2VydmVkKSB7Ci0gIGppbnQgcmV0ID0gSW5pdEdsb2JhbEpuaVZh
cmlhYmxlcyhqdm0pOwotICBSVENfRENIRUNLX0dFKHJldCwgMCk7Ci0gIGlmIChyZXQgPCAwKQot
ICAgIHJldHVybiAtMTsKLQotICBSVENfQ0hFQ0socnRjOjpJbml0aWFsaXplU1NMKCkpIDw8ICJG
YWlsZWQgdG8gSW5pdGlhbGl6ZVNTTCgpIjsKLSAgTG9hZEdsb2JhbENsYXNzUmVmZXJlbmNlSG9s
ZGVyKCk7Ci0KLSAgcmV0dXJuIHJldDsKLX0KLQotZXh0ZXJuICJDIiB2b2lkIEpOSUVYUE9SVCBK
TklDQUxMIEpOSV9PblVuTG9hZChKYXZhVk0gKmp2bSwgdm9pZCAqcmVzZXJ2ZWQpIHsKLSAgRnJl
ZUdsb2JhbENsYXNzUmVmZXJlbmNlSG9sZGVyKCk7Ci0gIFJUQ19DSEVDSyhydGM6OkNsZWFudXBT
U0woKSkgPDwgIkZhaWxlZCB0byBDbGVhbnVwU1NMKCkiOwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjX2puaQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1wbC5jYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
bmF0aXZlX2hhbmRsZV9pbXBsLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hhbmRs
ZV9pbXBsLmNjCShub25leGlzdGVudCkKQEAgLTEsMjE1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1w
bC5oIgotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lk
L2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2JpbmQuaCIKLSNpbmNs
dWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9rZWVwX3Jl
Zl91bnRpbF9kb25lLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvbG9nZ2luZy5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9iYXNlL3Njb3BlZF9yZWZfcHRyLmgiCi0KLXVzaW5nIHdlYnJ0Yzo6TmF0aXZl
SGFuZGxlQnVmZmVyOwotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLU1hdHJpeDo6TWF0cml4
KEpOSUVudiogam5pLCBqZmxvYXRBcnJheSBhKSB7Ci0gIFJUQ19DSEVDS19FUSgxNiwgam5pLT5H
ZXRBcnJheUxlbmd0aChhKSk7Ci0gIGpmbG9hdCogcHRyID0gam5pLT5HZXRGbG9hdEFycmF5RWxl
bWVudHMoYSwgbnVsbHB0cik7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwgMTY7ICsraSkgewotICAg
IGVsZW1fW2ldID0gcHRyW2ldOwotICB9Ci0gIGpuaS0+UmVsZWFzZUZsb2F0QXJyYXlFbGVtZW50
cyhhLCBwdHIsIDApOwotfQotCi1qZmxvYXRBcnJheSBNYXRyaXg6OlRvSmF2YShKTklFbnYqIGpu
aSkgewotICBqZmxvYXRBcnJheSBtYXRyaXggPSBqbmktPk5ld0Zsb2F0QXJyYXkoMTYpOwotICBq
bmktPlNldEZsb2F0QXJyYXlSZWdpb24obWF0cml4LCAwLCAxNiwgZWxlbV8pOwotICByZXR1cm4g
bWF0cml4OwotfQotCi12b2lkIE1hdHJpeDo6Um90YXRlKHdlYnJ0Yzo6VmlkZW9Sb3RhdGlvbiBy
b3RhdGlvbikgewotICAvLyBUZXh0dXJlIGNvb3JkaW5hdGVzIGFyZSBpbiB0aGUgcmFuZ2UgMCB0
byAxLiBUaGUgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGxhc3QKLSAgLy8gcm93IGluIGVhY2ggcm90
YXRpb24gbWF0cml4IGlzIG5lZWRlZCBmb3IgcHJvcGVyIHRyYW5zbGF0aW9uLCBlLmcsIHRvCi0g
IC8vIG1pcnJvciB4LCB3ZSBkb24ndCByZXBsYWNlIHggYnkgLXgsIGJ1dCBieSAxLXguCi0gIHN3
aXRjaCAocm90YXRpb24pIHsKLSAgICBjYXNlIHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMDoKLSAg
ICAgIGJyZWFrOwotICAgIGNhc2Ugd2VicnRjOjprVmlkZW9Sb3RhdGlvbl85MDogewotICAgICAg
Y29uc3QgZmxvYXQgUk9UQVRFXzkwWzE2XSA9Ci0gICAgICAgICAgeyBlbGVtX1s0XSwgZWxlbV9b
NV0sIGVsZW1fWzZdLCBlbGVtX1s3XSwKLSAgICAgICAgICAgIC1lbGVtX1swXSwgLWVsZW1fWzFd
LCAtZWxlbV9bMl0sIC1lbGVtX1szXSwKLSAgICAgICAgICAgIGVsZW1fWzhdLCBlbGVtX1s5XSwg
ZWxlbV9bMTBdLCBlbGVtX1sxMV0sCi0gICAgICAgICAgICBlbGVtX1swXSArIGVsZW1fWzEyXSwg
ZWxlbV9bMV0gKyBlbGVtX1sxM10sCi0gICAgICAgICAgICBlbGVtX1syXSArIGVsZW1fWzE0XSwg
ZWxlbV9bM10gKyBlbGVtX1sxNV19OwotICAgICAgbWVtY3B5KGVsZW1fLCBST1RBVEVfOTAsIHNp
emVvZihlbGVtXykpOwotICAgIH0gYnJlYWs7Ci0gICAgY2FzZSB3ZWJydGM6OmtWaWRlb1JvdGF0
aW9uXzE4MDogewotICAgICAgY29uc3QgZmxvYXQgUk9UQVRFXzE4MFsxNl0gPQotICAgICAgICAg
IHsgLWVsZW1fWzBdLCAtZWxlbV9bMV0sIC1lbGVtX1syXSwgLWVsZW1fWzNdLAotICAgICAgICAg
ICAgLWVsZW1fWzRdLCAtZWxlbV9bNV0sIC1lbGVtX1s2XSwgLWVsZW1fWzddLAotICAgICAgICAg
ICAgZWxlbV9bOF0sIGVsZW1fWzldLCBlbGVtX1sxMF0sIGVsZW1fWzExXSwKLSAgICAgICAgICAg
IGVsZW1fWzBdICsgZWxlbV9bNF0gKyBlbGVtX1sxMl0sIGVsZW1fWzFdICsgZWxlbV9bNV0gKyBl
bGVtX1sxM10sCi0gICAgICAgICAgICBlbGVtX1syXSArIGVsZW1fWzZdICsgZWxlbV9bMTRdLCBl
bGVtX1szXSArIGVsZW1fWzExXSsgZWxlbV9bMTVdfTsKLSAgICAgICAgbWVtY3B5KGVsZW1fLCBS
T1RBVEVfMTgwLCBzaXplb2YoZWxlbV8pKTsKLSAgICB9IGJyZWFrOwotICAgIGNhc2Ugd2VicnRj
OjprVmlkZW9Sb3RhdGlvbl8yNzA6IHsKLSAgICAgIGNvbnN0IGZsb2F0IFJPVEFURV8yNzBbMTZd
ID0KLSAgICAgICAgICB7IC1lbGVtX1s0XSwgLWVsZW1fWzVdLCAtZWxlbV9bNl0sIC1lbGVtX1s3
XSwKLSAgICAgICAgICAgIGVsZW1fWzBdLCBlbGVtX1sxXSwgZWxlbV9bMl0sIGVsZW1fWzNdLAot
ICAgICAgICAgICAgZWxlbV9bOF0sIGVsZW1fWzldLCBlbGVtX1sxMF0sIGVsZW1fWzExXSwKLSAg
ICAgICAgICAgIGVsZW1fWzRdICsgZWxlbV9bMTJdLCBlbGVtX1s1XSArIGVsZW1fWzEzXSwKLSAg
ICAgICAgICAgIGVsZW1fWzZdICsgZWxlbV9bMTRdLCBlbGVtX1s3XSArIGVsZW1fWzE1XX07Ci0g
ICAgICBtZW1jcHkoZWxlbV8sIFJPVEFURV8yNzAsIHNpemVvZihlbGVtXykpOwotICAgIH0gYnJl
YWs7Ci0gIH0KLX0KLQotLy8gQ2FsY3VsYXRlcyByZXN1bHQgPSBhICogYiwgaW4gY29sdW1uLW1h
am9yIG9yZGVyLgotdm9pZCBNYXRyaXg6Ok11bHRpcGx5KGNvbnN0IGZsb2F0IGFbMTZdLCBjb25z
dCBmbG9hdCBiWzE2XSwgZmxvYXQgcmVzdWx0WzE2XSkgewotICBmb3IgKGludCBpID0gMDsgaSA8
IDQ7ICsraSkgewotICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgKytqKSB7Ci0gICAgICBmbG9h
dCBzdW0gPSAwOwotICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCA0OyArK2spIHsKLSAgICAgICAg
c3VtICs9IGFbayAqIDQgKyBqXSAqIGJbaSAqIDQgKyBrXTsKLSAgICAgIH0KLSAgICAgIHJlc3Vs
dFtpICogNCArIGpdID0gc3VtOwotICAgIH0KLSAgfQotfQotCi0vLyBDZW50ZXIgY3JvcCBieSBr
ZWVwaW5nIHhGcmFjdGlvbiBvZiB0aGUgd2lkdGggYW5kIHlGcmFjdGlvbiBvZiB0aGUgaGVpZ2h0
LAotLy8gc28gZS5nLiBjcm9wcGluZyBmcm9tIDY0MHg0ODAgdG8gNjQweDM2MCB3b3VsZCB1c2UK
LS8vIHhGcmFjdGlvbj0xLCB5RnJhY3Rpb249MzYwLzQ4MC4KLXZvaWQgTWF0cml4OjpDcm9wKGZs
b2F0IHhGcmFjdGlvbiwKLSAgICAgICAgICAgICAgICAgIGZsb2F0IHlGcmFjdGlvbiwKLSAgICAg
ICAgICAgICAgICAgIGZsb2F0IHhPZmZzZXQsCi0gICAgICAgICAgICAgICAgICBmbG9hdCB5T2Zm
c2V0KSB7Ci0gIGNvbnN0IGZsb2F0IGNyb3BfbWF0cml4WzE2XSA9Ci0gICAgICB7eEZyYWN0aW9u
LCAwLCAwLCAwLAotICAgICAgIDAsIHlGcmFjdGlvbiwgMCwgMCwKLSAgICAgICAwLCAwLCAxLCAw
LAotICAgICAgIHhPZmZzZXQsIHlPZmZzZXQsIDAsIDF9OwotICBjb25zdCBNYXRyaXggb2xkID0g
KnRoaXM7Ci0gIE11bHRpcGx5KGNyb3BfbWF0cml4LCBvbGQuZWxlbV8sIHRoaXMtPmVsZW1fKTsK
LX0KLQotLy8gQWxpZ25pbmcgcG9pbnRlciB0byA2NCBieXRlcyBmb3IgaW1wcm92ZWQgcGVyZm9y
bWFuY2UsIGUuZy4gdXNlIFNJTUQuCi1zdGF0aWMgY29uc3QgaW50IGtCdWZmZXJBbGlnbm1lbnQg
PSA2NDsKLQotTmF0aXZlSGFuZGxlSW1wbDo6TmF0aXZlSGFuZGxlSW1wbChpbnQgaWQsIGNvbnN0
IE1hdHJpeCYgbWF0cml4KQotICAgIDogb2VzX3RleHR1cmVfaWQoaWQpLCBzYW1wbGluZ19tYXRy
aXgobWF0cml4KSB7fQotCi1OYXRpdmVIYW5kbGVJbXBsOjpOYXRpdmVIYW5kbGVJbXBsKEpOSUVu
diogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGpfb2VzX3Rl
eHR1cmVfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmbG9hdEFycmF5
IGpfdHJhbnNmb3JtX21hdHJpeCkKLSAgICA6IG9lc190ZXh0dXJlX2lkKGpfb2VzX3RleHR1cmVf
aWQpLAotICAgICAgc2FtcGxpbmdfbWF0cml4KGpuaSwgal90cmFuc2Zvcm1fbWF0cml4KSB7fQot
Ci1BbmRyb2lkVGV4dHVyZUJ1ZmZlcjo6QW5kcm9pZFRleHR1cmVCdWZmZXIoCi0gICAgaW50IHdp
ZHRoLAotICAgIGludCBoZWlnaHQsCi0gICAgY29uc3QgTmF0aXZlSGFuZGxlSW1wbCYgbmF0aXZl
X2hhbmRsZSwKLSAgICBqb2JqZWN0IHN1cmZhY2VfdGV4dHVyZV9oZWxwZXIsCi0gICAgY29uc3Qg
cnRjOjpDYWxsYmFjazA8dm9pZD4mIG5vX2xvbmdlcl91c2VkKQotICAgIDogd2VicnRjOjpOYXRp
dmVIYW5kbGVCdWZmZXIoJm5hdGl2ZV9oYW5kbGVfLCB3aWR0aCwgaGVpZ2h0KSwKLSAgICAgIG5h
dGl2ZV9oYW5kbGVfKG5hdGl2ZV9oYW5kbGUpLAotICAgICAgc3VyZmFjZV90ZXh0dXJlX2hlbHBl
cl8oc3VyZmFjZV90ZXh0dXJlX2hlbHBlciksCi0gICAgICBub19sb25nZXJfdXNlZF9jYl8obm9f
bG9uZ2VyX3VzZWQpIHt9Ci0KLUFuZHJvaWRUZXh0dXJlQnVmZmVyOjp+QW5kcm9pZFRleHR1cmVC
dWZmZXIoKSB7Ci0gIG5vX2xvbmdlcl91c2VkX2NiXygpOwotfQotCi1ydGM6OnNjb3BlZF9yZWZw
dHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPgotQW5kcm9pZFRleHR1cmVCdWZmZXI6Ok5hdGl2
ZVRvSTQyMEJ1ZmZlcigpIHsKLSAgaW50IHV2X3dpZHRoID0gKHdpZHRoKCkrNykgLyA4OwotICBp
bnQgc3RyaWRlID0gOCAqIHV2X3dpZHRoOwotICBpbnQgdXZfaGVpZ2h0ID0gKGhlaWdodCgpKzEp
LzI7Ci0gIHNpemVfdCBzaXplID0gc3RyaWRlICogKGhlaWdodCgpICsgdXZfaGVpZ2h0KTsKLSAg
Ly8gVGhlIGRhdGEgaXMgb3duZWQgYnkgdGhlIGZyYW1lLCBhbmQgdGhlIG5vcm1hbCBjYXNlIGlz
IHRoYXQgdGhlCi0gIC8vIGRhdGEgaXMgZGVsZXRlZCBieSB0aGUgZnJhbWUncyBkZXN0cnVjdG9y
IGNhbGxiYWNrLgotICAvLwotICAvLyBUT0RPKG5pc3NlKTogVXNlIGFuIEk0MjBCdWZmZXJQb29s
LiBXZSB0aGVuIG5lZWQgdG8gZXh0ZW5kIHRoYXQKLSAgLy8gY2xhc3MsIGFuZCBJNDIwQnVmZmVy
LCB0byBzdXBwb3J0IG91ciBtZW1vcnkgbGF5b3V0LgotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhf
dCwgd2VicnRjOjpBbGlnbmVkRnJlZURlbGV0ZXI+IHl1dl9kYXRhKAotICAgICAgc3RhdGljX2Nh
c3Q8dWludDhfdCo+KHdlYnJ0Yzo6QWxpZ25lZE1hbGxvYyhzaXplLCBrQnVmZmVyQWxpZ25tZW50
KSkpOwotICAvLyBTZWUgWXV2Q29udmVydGVyLmphdmEgZm9yIHRoZSByZXF1aXJlZCBsYXlvdXQu
Ci0gIHVpbnQ4X3QqIHlfZGF0YSA9IHl1dl9kYXRhLmdldCgpOwotICB1aW50OF90KiB1X2RhdGEg
PSB5X2RhdGEgKyBoZWlnaHQoKSAqIHN0cmlkZTsKLSAgdWludDhfdCogdl9kYXRhID0gdV9kYXRh
ICsgc3RyaWRlLzI7Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1
ZmZlcj4gY29weSA9Ci0gICAgbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDx3ZWJydGM6OldyYXBw
ZWRJNDIwQnVmZmVyPigKLSAgICAgICAgd2lkdGgoKSwgaGVpZ2h0KCksCi0gICAgICAgIHlfZGF0
YSwgc3RyaWRlLAotICAgICAgICB1X2RhdGEsIHN0cmlkZSwKLSAgICAgICAgdl9kYXRhLCBzdHJp
ZGUsCi0gICAgICAgIHJ0Yzo6QmluZCgmd2VicnRjOjpBbGlnbmVkRnJlZSwgeXV2X2RhdGEucmVs
ZWFzZSgpKSk7Ci0KLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQo
KTsKLSAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLQotICBqbWV0
aG9kSUQgdHJhbnNmb3JtX21pZCA9IEdldE1ldGhvZElEKAotICAgICAgam5pLAotICAgICAgR2V0
T2JqZWN0Q2xhc3Moam5pLCBzdXJmYWNlX3RleHR1cmVfaGVscGVyXyksCi0gICAgICAidGV4dHVy
ZVRvWVVWIiwKLSAgICAgICIoTGphdmEvbmlvL0J5dGVCdWZmZXI7SUlJSVtGKVYiKTsKLQotICBq
b2JqZWN0IGJ5dGVfYnVmZmVyID0gam5pLT5OZXdEaXJlY3RCeXRlQnVmZmVyKHlfZGF0YSwgc2l6
ZSk7Ci0KLSAgamZsb2F0QXJyYXkgc2FtcGxpbmdfbWF0cml4ID0gbmF0aXZlX2hhbmRsZV8uc2Ft
cGxpbmdfbWF0cml4LlRvSmF2YShqbmkpOwotICBqbmktPkNhbGxWb2lkTWV0aG9kKHN1cmZhY2Vf
dGV4dHVyZV9oZWxwZXJfLAotICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV9taWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgYnl0ZV9idWZmZXIsIHdpZHRoKCksIGhlaWdodCgpLCBzdHJp
ZGUsCi0gICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX2hhbmRsZV8ub2VzX3RleHR1cmVfaWQs
IHNhbXBsaW5nX21hdHJpeCk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJ0ZXh0dXJlVG9Z
VVYgdGhyb3dlZCBhbiBleGNlcHRpb24iOwotCi0gIHJldHVybiBjb3B5OwotfQotCi1ydGM6OnNj
b3BlZF9yZWZwdHI8QW5kcm9pZFRleHR1cmVCdWZmZXI+Ci1BbmRyb2lkVGV4dHVyZUJ1ZmZlcjo6
Q3JvcFNjYWxlQW5kUm90YXRlKGludCBjcm9wcGVkX3dpZHRoLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3JvcHBlZF9oZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcm9wX3gsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjcm9wX3ksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkc3Rfd2lkdGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBkc3RfaGVpZ2h0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gcm90YXRpb24pIHsK
LSAgaWYgKGNyb3BwZWRfd2lkdGggPT0gZHN0X3dpZHRoICYmIGNyb3BwZWRfaGVpZ2h0ID09IGRz
dF9oZWlnaHQgJiYKLSAgICAgIHdpZHRoKCkgPT0gZHN0X3dpZHRoICYmIGhlaWdodCgpID09IGRz
dF9oZWlnaHQgJiYKLSAgICAgIHJvdGF0aW9uID09IHdlYnJ0Yzo6a1ZpZGVvUm90YXRpb25fMCkg
ewotICAgIHJldHVybiB0aGlzOwotICB9Ci0gIGludCByb3RhdGVkX3dpZHRoID0gKHJvdGF0aW9u
ICUgMTgwID09IDApID8gZHN0X3dpZHRoIDogZHN0X2hlaWdodDsKLSAgaW50IHJvdGF0ZWRfaGVp
Z2h0ID0gKHJvdGF0aW9uICUgMTgwID09IDApID8gZHN0X2hlaWdodCA6IGRzdF93aWR0aDsKLQot
ICAvLyBIZXJlIHdlIHVzZSBCaW5kIG1hZ2ljIHRvIGFkZCBhIHJlZmVyZW5jZSBjb3VudCB0byB8
dGhpc3wgdW50aWwgdGhlIG5ld2x5Ci0gIC8vIGNyZWF0ZWQgQW5kcm9pZFRleHR1cmVCdWZmZXIg
aXMgZGVzdHJ1Y3RlZAotICBydGM6OnNjb3BlZF9yZWZwdHI8QW5kcm9pZFRleHR1cmVCdWZmZXI+
IGJ1ZmZlcigKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8QW5kcm9pZFRleHR1cmVC
dWZmZXI+KAotICAgICAgICAgIHJvdGF0ZWRfd2lkdGgsIHJvdGF0ZWRfaGVpZ2h0LCBuYXRpdmVf
aGFuZGxlXywKLSAgICAgICAgICBzdXJmYWNlX3RleHR1cmVfaGVscGVyXywgcnRjOjpLZWVwUmVm
VW50aWxEb25lKHRoaXMpKSk7Ci0KLSAgaWYgKGNyb3BwZWRfd2lkdGggIT0gd2lkdGgoKSB8fCBj
cm9wcGVkX2hlaWdodCAhPSBoZWlnaHQoKSkgewotICAgIGJ1ZmZlci0+bmF0aXZlX2hhbmRsZV8u
c2FtcGxpbmdfbWF0cml4LkNyb3AoCi0gICAgICAgIGNyb3BwZWRfd2lkdGggLyBzdGF0aWNfY2Fz
dDxmbG9hdD4od2lkdGgoKSksCi0gICAgICAgIGNyb3BwZWRfaGVpZ2h0IC8gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGhlaWdodCgpKSwKLSAgICAgICAgY3JvcF94IC8gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdp
ZHRoKCkpLAotICAgICAgICBjcm9wX3kgLyBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0KCkpKTsK
LSAgfQotICBidWZmZXItPm5hdGl2ZV9oYW5kbGVfLnNhbXBsaW5nX21hdHJpeC5Sb3RhdGUocm90
YXRpb24pOwotICByZXR1cm4gYnVmZmVyOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjX2pu
aQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9uYXRpdmVfaGFu
ZGxlX2ltcGwuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL25hdGl2ZV9oYW5kbGVfaW1wbC5oCShu
b25leGlzdGVudCkKQEAgLTEsODcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUg
V2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRl
ZiBXRUJSVENfQVBJX0pBVkFfSk5JX05BVElWRV9IQU5ETEVfSU1QTF9IXwotI2RlZmluZSBXRUJS
VENfQVBJX0pBVkFfSk5JX05BVElWRV9IQU5ETEVfSU1QTF9IXwotCi0jaW5jbHVkZSA8am5pLmg+
Ci0KLSNpbmNsdWRlICJ3ZWJydGMvY29tbW9uX3ZpZGVvL2luY2x1ZGUvdmlkZW9fZnJhbWVfYnVm
ZmVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2NvbW1vbl92aWRlby9yb3RhdGlvbi5oIgotCi1uYW1l
c3BhY2Ugd2VicnRjX2puaSB7Ci0KLS8vIE9wZW4gZ2wgdGV4dHVyZSBtYXRyaXgsIGluIGNvbHVt
bi1tYWpvciBvcmRlci4gT3BlcmF0aW9ucyBhcmUKLS8vIGluLXBsYWNlLgotY2xhc3MgTWF0cml4
IHsKLSBwdWJsaWM6Ci0gIE1hdHJpeChKTklFbnYqIGpuaSwgamZsb2F0QXJyYXkgYSk7Ci0KLSAg
amZsb2F0QXJyYXkgVG9KYXZhKEpOSUVudiogam5pKTsKLQotICAvLyBDcm9wIGFyZ3VtZW50cyBh
cmUgcmVsYXRpdmUgdG8gb3JpZ2luYWwgc2l6ZS4KLSAgdm9pZCBDcm9wKGZsb2F0IGNyb3BwZWRf
d2lkdGgsCi0gICAgICAgICAgICBmbG9hdCBjcm9wcGVkX2hlaWdodCwKLSAgICAgICAgICAgIGZs
b2F0IGNyb3BfeCwKLSAgICAgICAgICAgIGZsb2F0IGNyb3BfeSk7Ci0KLSAgdm9pZCBSb3RhdGUo
d2VicnRjOjpWaWRlb1JvdGF0aW9uIHJvdGF0aW9uKTsKLQotIHByaXZhdGU6Ci0gIHN0YXRpYyB2
b2lkIE11bHRpcGx5KGNvbnN0IGZsb2F0IGFbMTZdLCBjb25zdCBmbG9hdCBiWzE2XSwgZmxvYXQg
cmVzdWx0WzE2XSk7Ci0gIGZsb2F0IGVsZW1fWzE2XTsKLX07Ci0KLS8vIFdyYXBwZXIgZm9yIHRl
eHR1cmUgb2JqZWN0Lgotc3RydWN0IE5hdGl2ZUhhbmRsZUltcGwgewotICBOYXRpdmVIYW5kbGVJ
bXBsKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgIGppbnQgal9vZXNfdGV4dHVyZV9p
ZCwKLSAgICAgICAgICAgICAgICAgICBqZmxvYXRBcnJheSBqX3RyYW5zZm9ybV9tYXRyaXgpOwot
Ci0gIE5hdGl2ZUhhbmRsZUltcGwoaW50IGlkLCBjb25zdCBNYXRyaXgmIG1hdHJpeCk7Ci0KLSAg
Y29uc3QgaW50IG9lc190ZXh0dXJlX2lkOwotICBNYXRyaXggc2FtcGxpbmdfbWF0cml4OwotfTsK
LQotY2xhc3MgQW5kcm9pZFRleHR1cmVCdWZmZXIgOiBwdWJsaWMgd2VicnRjOjpOYXRpdmVIYW5k
bGVCdWZmZXIgewotIHB1YmxpYzoKLSAgQW5kcm9pZFRleHR1cmVCdWZmZXIoaW50IHdpZHRoLAot
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOYXRpdmVIYW5kbGVJbXBsJiBuYXRpdmVfaGFuZGxlLAotICAgICAgICAgICAgICAg
ICAgICAgICBqb2JqZWN0IHN1cmZhY2VfdGV4dHVyZV9oZWxwZXIsCi0gICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHJ0Yzo6Q2FsbGJhY2swPHZvaWQ+JiBub19sb25nZXJfdXNlZCk7Ci0gIH5B
bmRyb2lkVGV4dHVyZUJ1ZmZlcigpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8VmlkZW9GcmFtZUJ1
ZmZlcj4gTmF0aXZlVG9JNDIwQnVmZmVyKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gRmlyc3QgY3JvcCwg
dGhlbiBzY2FsZSB0byBkc3QgcmVzb2x1dGlvbiwgYW5kIHRoZW4gcm90YXRlLgotICBydGM6OnNj
b3BlZF9yZWZwdHI8QW5kcm9pZFRleHR1cmVCdWZmZXI+IENyb3BTY2FsZUFuZFJvdGF0ZSgKLSAg
ICAgIGludCBjcm9wcGVkX3dpZHRoLAotICAgICAgaW50IGNyb3BwZWRfaGVpZ2h0LAotICAgICAg
aW50IGNyb3BfeCwKLSAgICAgIGludCBjcm9wX3ksCi0gICAgICBpbnQgZHN0X3dpZHRoLAotICAg
ICAgaW50IGRzdF9oZWlnaHQsCi0gICAgICB3ZWJydGM6OlZpZGVvUm90YXRpb24gcm90YXRpb24p
OwotCi0gcHJpdmF0ZToKLSAgTmF0aXZlSGFuZGxlSW1wbCBuYXRpdmVfaGFuZGxlXzsKLSAgLy8g
UmF3IG9iamVjdCBwb2ludGVyLCByZWx5aW5nIG9uIHRoZSBjYWxsZXIsIGkuZS4sCi0gIC8vIEFu
ZHJvaWRWaWRlb0NhcHR1cmVySm5pIG9yIHRoZSBDKysgU3VyZmFjZVRleHR1cmVIZWxwZXIsIHRv
IGtlZXAKLSAgLy8gYSBnbG9iYWwgcmVmZXJlbmNlLiBUT0RPKG5pc3NlKTogTWFrZSB0aGlzIGEg
cmVmZXJlbmNlIHRvIHRoZSBDKysKLSAgLy8gU3VyZmFjZVRleHR1cmVIZWxwZXIgaW5zdGVhZCwg
YnV0IHRoYXQgcmVxdWlyZXMgc29tZSByZWZhY3RvcmluZwotICAvLyBvZiBBbmRyb2lkVmlkZW9D
YXB0dXJlckpuaS4KLSAgam9iamVjdCBzdXJmYWNlX3RleHR1cmVfaGVscGVyXzsKLSAgcnRjOjpD
YWxsYmFjazA8dm9pZD4gbm9fbG9uZ2VyX3VzZWRfY2JfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNl
IHdlYnJ0Y19qbmkKLQotI2VuZGlmICAvLyBXRUJSVENfQVBJX0pBVkFfSk5JX05BVElWRV9IQU5E
TEVfSU1QTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWQvam5pL3BlZXJjb25uZWN0aW9uX2puaS5jYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkv
cGVlcmNvbm5lY3Rpb25fam5pLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvcGVlcmNvbm5lY3Rp
b25fam5pLmNjCShub25leGlzdGVudCkKQEAgLTEsMjQxNCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi0vLyBIaW50cyBmb3IgZnV0dXJlIHZpc2l0b3JzOgotLy8gVGhpcyBlbnRpcmUgZmls
ZSBpcyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgb2YgdGhlIG9yZy53ZWJydGMgSmF2YSBwYWNr
YWdlLAotLy8gdGhlIG1vc3QgaW50ZXJlc3RpbmcgYml0cyBvZiB3aGljaCBhcmUgb3JnLndlYnJ0
Yy5QZWVyQ29ubmVjdGlvbnssRmFjdG9yeX0uCi0vLyBUaGUgbGF5b3V0IG9mIHRoaXMgZmlsZSBp
cyByb3VnaGx5OgotLy8gLSB2YXJpb3VzIGhlbHBlciBDKysgZnVuY3Rpb25zICYgY2xhc3NlcyB0
aGF0IHdyYXAgSmF2YSBjb3VudGVycGFydHMgYW5kCi0vLyAgIGV4cG9zZSBhIEMrKyBpbnRlcmZh
Y2UgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBDKysgUGVlckNvbm5lY3Rpb24gQVBJcwotLy8g
LSBpbXBsZW1lbnRhdGlvbnMgb2YgbWV0aG9kcyBkZWNsYXJlZCAic3RhdGljIiBpbiB0aGUgSmF2
YSBwYWNrYWdlIChuYW1lZAotLy8gICB0aGluZ3MgbGlrZSBKYXZhX29yZ193ZWJydGNfT01HX0Nh
bl9UaGlzX05hbWVfQmVfQW55X0xvbmdlciwgcHJlc2NyaWJlZCBieQotLy8gICB0aGUgSk5JIHNw
ZWMpLgotLy8KLS8vIExpZmVjeWNsZSBub3Rlczogb2JqZWN0cyBhcmUgb3duZWQgd2hlcmUgdGhl
eSB3aWxsIGJlIGNhbGxlZDsgaW4gb3RoZXIgd29yZHMKLS8vIEZvb09ic2VydmVycyBhcmUgb3du
ZWQgYnkgQysrLWxhbmQsIGFuZCB1c2VyLWNhbGxhYmxlIG9iamVjdHMgKGUuZy4KLS8vIFBlZXJD
b25uZWN0aW9uIGFuZCBWaWRlb1RyYWNrKSBhcmUgb3duZWQgYnkgSmF2YS1sYW5kLgotLy8gV2hl
biB0aGlzIGZpbGUgYWxsb2NhdGVzIEMrKyBSZWZDb3VudEludGVyZmFjZXMgaXQgQWRkUmVmKClz
IGFuIGFydGlmaWNpYWwKLS8vIHJlZiBzaW11bGF0aW5nIHRoZSBqbG9uZyBoZWxkIGluIEphdmEt
bGFuZCwgYW5kIHRoZW4gUmVsZWFzZSgpcyB0aGUgcmVmIGluCi0vLyB0aGUgcmVzcGVjdGl2ZSBm
cmVlIGNhbGwuICBTb21ldGltZXMgdGhpcyBBZGRSZWYgaXMgaW1wbGljaXQgaW4gdGhlCi0vLyBj
b25zdHJ1Y3Rpb24gb2YgYSBzY29wZWRfcmVmcHRyPD4gd2hpY2ggaXMgdGhlbiAucmVsZWFzZSgp
ZC4KLS8vIEFueSBwZXJzaXN0ZW50IChub24tbG9jYWwpIHJlZmVyZW5jZXMgZnJvbSBDKysgdG8g
SmF2YSBtdXN0IGJlIGdsb2JhbCBvciB3ZWFrCi0vLyAoaW4gd2hpY2ggY2FzZSB0aGV5IG11c3Qg
YmUgY2hlY2tlZCBiZWZvcmUgdXNlKSEKLS8vCi0vLyBFeGNlcHRpb24gbm90ZXM6IHByZXR0eSBt
dWNoIGFsbCBKTkkgY2FsbHMgY2FuIHRocm93IEphdmEgZXhjZXB0aW9ucywgc28gZWFjaAotLy8g
Y2FsbCB0aHJvdWdoIGEgSk5JRW52KiBwb2ludGVyIG5lZWRzIHRvIGJlIGZvbGxvd2VkIGJ5IGFu
IEV4Y2VwdGlvbkNoZWNrKCkKLS8vIGNhbGwuICBJbiB0aGlzIGZpbGUgdGhpcyBpcyBkb25lIGlu
IENIRUNLX0VYQ0VQVElPTiwgbWFraW5nIGZvciBtdWNoIGVhc2llcgotLy8gZGVidWdnaW5nIGlu
IGNhc2Ugb2YgZmFpbHVyZSAodGhlIGFsdGVybmF0aXZlIGlzIHRvIHdhaXQgZm9yIGNvbnRyb2wg
dG8KLS8vIHJldHVybiB0byB0aGUgSmF2YSBmcmFtZSB0aGF0IGNhbGxlZCBjb2RlIGluIHRoaXMg
ZmlsZSwgYXQgd2hpY2ggcG9pbnQgaXQncwotLy8gaW1wb3NzaWJsZSB0byB0ZWxsIHdoaWNoIEpO
SSBjYWxsIGJyb2tlKS4KLQotI2luY2x1ZGUgPGpuaS5oPgotI3VuZGVmIEpOSUVYUE9SVAotI2Rl
ZmluZSBKTklFWFBPUlQgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSkKLQot
I2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8dXRpbGl0eT4K
LQotI2luY2x1ZGUgInRoaXJkX3BhcnR5L2xpYnl1di9pbmNsdWRlL2xpYnl1di9jb252ZXJ0X2Zy
b20uaCIKLSNpbmNsdWRlICJ0aGlyZF9wYXJ0eS9saWJ5dXYvaW5jbHVkZS9saWJ5dXYvc2NhbGUu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWR2aWRlb3RyYWNrc291cmNlLmgiCi0jaW5j
bHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9hbmRyb2lkbWVkaWFkZWNvZGVyX2puaS5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvYW5kcm9pZG1lZGlhZW5jb2Rlcl9qbmku
aCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2FuZHJvaWRuZXR3b3JrbW9uaXRv
cl9qbmkuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVmZXJlbmNl
aG9sZGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5kcm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgi
Ci0jaW5jbHVkZSAid2VicnRjL2FwaS9tZWRpYWNvbnN0cmFpbnRzaW50ZXJmYWNlLmgiCi0jaW5j
bHVkZSAid2VicnRjL2FwaS9wZWVyY29ubmVjdGlvbmludGVyZmFjZS5oIgotI2luY2x1ZGUgIndl
YnJ0Yy9hcGkvcnRwcmVjZWl2ZXJpbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYXBpL3J0
cHNlbmRlcmludGVyZmFjZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvdmlkZW9zb3VyY2Vwcm94
eS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvd2VicnRjc2RwLmgiCi0jaW5jbHVkZSAid2VicnRj
L2Jhc2UvYmluZC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9iYXNlL2V2ZW50X3RyYWNlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2xvZ2dp
bmcuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9sb2dzaW5rcy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9iYXNlL21lc3NhZ2VxdWV1ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL25ldHdvcmttb25p
dG9yLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvcnRjY2VydGlmaWNhdGVnZW5lcmF0b3IuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9zc2xhZGFwdGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jh
c2Uvc3RyaW5ndXRpbHMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbWVkaWEvYmFzZS92aWRlb2NhcHR1
cmVyLmgiCi0jaW5jbHVkZSAid2VicnRjL21lZGlhL2VuZ2luZS93ZWJydGN2aWRlb2RlY29kZXJm
YWN0b3J5LmgiCi0jaW5jbHVkZSAid2VicnRjL21lZGlhL2VuZ2luZS93ZWJydGN2aWRlb2VuY29k
ZXJmYWN0b3J5LmgiCi0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFwcGVycy9pbmNsdWRlL2Zp
ZWxkX3RyaWFsX2RlZmF1bHQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2lu
Y2x1ZGUvbG9nY2F0X3RyYWNlX2NvbnRleHQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvc3lzdGVtX3dy
YXBwZXJzL2luY2x1ZGUvdHJhY2UuaCIKLSNpbmNsdWRlICJ3ZWJydGMvdm9pY2VfZW5naW5lL2lu
Y2x1ZGUvdm9lX2Jhc2UuaCIKLQotdXNpbmcgY3JpY2tldDo6V2ViUnRjVmlkZW9EZWNvZGVyRmFj
dG9yeTsKLXVzaW5nIGNyaWNrZXQ6OldlYlJ0Y1ZpZGVvRW5jb2RlckZhY3Rvcnk7Ci11c2luZyBy
dGM6OkJpbmQ7Ci11c2luZyBydGM6OlRocmVhZDsKLXVzaW5nIHJ0Yzo6VGhyZWFkTWFuYWdlcjsK
LXVzaW5nIHdlYnJ0Yzo6QXVkaW9Tb3VyY2VJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OkF1ZGlv
VHJhY2tJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OkF1ZGlvVHJhY2tWZWN0b3I7Ci11c2luZyB3
ZWJydGM6OkNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbk9ic2VydmVyOwotdXNpbmcgd2VicnRjOjpE
YXRhQnVmZmVyOwotdXNpbmcgd2VicnRjOjpEYXRhQ2hhbm5lbEluaXQ7Ci11c2luZyB3ZWJydGM6
OkRhdGFDaGFubmVsSW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpEYXRhQ2hhbm5lbE9ic2VydmVy
OwotdXNpbmcgd2VicnRjOjpJY2VDYW5kaWRhdGVJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6Okxv
Z2NhdFRyYWNlQ29udGV4dDsKLXVzaW5nIHdlYnJ0Yzo6TWVkaWFDb25zdHJhaW50c0ludGVyZmFj
ZTsKLXVzaW5nIHdlYnJ0Yzo6TWVkaWFTb3VyY2VJbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6Ok1l
ZGlhU3RyZWFtSW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpNZWRpYVN0cmVhbVRyYWNrSW50ZXJm
YWNlOwotdXNpbmcgd2VicnRjOjpQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U7Ci11c2lu
ZyB3ZWJydGM6OlBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpQZWVyQ29u
bmVjdGlvbk9ic2VydmVyOwotdXNpbmcgd2VicnRjOjpSdHBSZWNlaXZlckludGVyZmFjZTsKLXVz
aW5nIHdlYnJ0Yzo6UnRwU2VuZGVySW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpTZXNzaW9uRGVz
Y3JpcHRpb25JbnRlcmZhY2U7Ci11c2luZyB3ZWJydGM6OlNldFNlc3Npb25EZXNjcmlwdGlvbk9i
c2VydmVyOwotdXNpbmcgd2VicnRjOjpTdGF0c09ic2VydmVyOwotdXNpbmcgd2VicnRjOjpTdGF0
c1JlcG9ydDsKLXVzaW5nIHdlYnJ0Yzo6U3RhdHNSZXBvcnRzOwotdXNpbmcgd2VicnRjOjpWaWRl
b1RyYWNrU291cmNlSW50ZXJmYWNlOwotdXNpbmcgd2VicnRjOjpWaWRlb1RyYWNrSW50ZXJmYWNl
OwotdXNpbmcgd2VicnRjOjpWaWRlb1RyYWNrVmVjdG9yOwotdXNpbmcgd2VicnRjOjprVmlkZW9D
b2RlY1ZQODsKLQotbmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi0vLyBGaWVsZCB0cmlhbHMgaW5p
dGlhbGl6YXRpb24gc3RyaW5nCi1zdGF0aWMgY2hhciAqZmllbGRfdHJpYWxzX2luaXRfc3RyaW5n
ID0gTlVMTDsKLQotLy8gU2V0IGluIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9pbml0aWFsaXplQW5k
cm9pZEdsb2JhbHMoKS4KLXN0YXRpYyBib29sIGZhY3Rvcnlfc3RhdGljX2luaXRpYWxpemVkID0g
ZmFsc2U7Ci1zdGF0aWMgYm9vbCB2aWRlb19od19hY2NlbGVyYXRpb25fZW5hYmxlZCA9IHRydWU7
Ci1zdGF0aWMgam9iamVjdCBqX2FwcGxpY2F0aW9uX2NvbnRleHQgPSBudWxscHRyOwotCi0vLyBS
ZXR1cm4gdGhlIChzaW5nbGV0b24pIEphdmEgRW51bSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB8
aW5kZXh8OwotLy8gfHN0YXRlX2NsYXNzX2ZyYWdtZW50fCBpcyBzb21ldGhpbmcgbGlrZSAiTWVk
aWFTb3VyY2UkU3RhdGUiLgotc3RhdGljIGpvYmplY3QgSmF2YUVudW1Gcm9tSW5kZXgoCi0gICAg
Sk5JRW52KiBqbmksIGNvbnN0IHN0ZDo6c3RyaW5nJiBzdGF0ZV9jbGFzc19mcmFnbWVudCwgaW50
IGluZGV4KSB7Ci0gIGNvbnN0IHN0ZDo6c3RyaW5nIHN0YXRlX2NsYXNzID0gIm9yZy93ZWJydGMv
IiArIHN0YXRlX2NsYXNzX2ZyYWdtZW50OwotICByZXR1cm4gSmF2YUVudW1Gcm9tSW5kZXgoam5p
LCBGaW5kQ2xhc3Moam5pLCBzdGF0ZV9jbGFzcy5jX3N0cigpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlX2NsYXNzLCBpbmRleCk7Ci19Ci0KLXN0YXRpYyBEYXRhQ2hhbm5lbElu
aXQgSmF2YURhdGFDaGFubmVsSW5pdFRvTmF0aXZlKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0
IGpfaW5pdCkgewotICBEYXRhQ2hhbm5lbEluaXQgaW5pdDsKLQotICBqY2xhc3Mgal9pbml0X2Ns
YXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvRGF0YUNoYW5uZWwkSW5pdCIpOwotICBq
ZmllbGRJRCBvcmRlcmVkX2lkID0gR2V0RmllbGRJRChqbmksIGpfaW5pdF9jbGFzcywgIm9yZGVy
ZWQiLCAiWiIpOwotICBqZmllbGRJRCBtYXhfcmV0cmFuc21pdF90aW1lX2lkID0KLSAgICAgIEdl
dEZpZWxkSUQoam5pLCBqX2luaXRfY2xhc3MsICJtYXhSZXRyYW5zbWl0VGltZU1zIiwgIkkiKTsK
LSAgamZpZWxkSUQgbWF4X3JldHJhbnNtaXRzX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBq
X2luaXRfY2xhc3MsICJtYXhSZXRyYW5zbWl0cyIsICJJIik7Ci0gIGpmaWVsZElEIHByb3RvY29s
X2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX2luaXRfY2xhc3MsICJwcm90b2NvbCIsICJM
amF2YS9sYW5nL1N0cmluZzsiKTsKLSAgamZpZWxkSUQgbmVnb3RpYXRlZF9pZCA9IEdldEZpZWxk
SUQoam5pLCBqX2luaXRfY2xhc3MsICJuZWdvdGlhdGVkIiwgIloiKTsKLSAgamZpZWxkSUQgaWRf
aWQgPSBHZXRGaWVsZElEKGpuaSwgal9pbml0X2NsYXNzLCAiaWQiLCAiSSIpOwotCi0gIGluaXQu
b3JkZXJlZCA9IEdldEJvb2xlYW5GaWVsZChqbmksIGpfaW5pdCwgb3JkZXJlZF9pZCk7Ci0gIGlu
aXQubWF4UmV0cmFuc21pdFRpbWUgPSBHZXRJbnRGaWVsZChqbmksIGpfaW5pdCwgbWF4X3JldHJh
bnNtaXRfdGltZV9pZCk7Ci0gIGluaXQubWF4UmV0cmFuc21pdHMgPSBHZXRJbnRGaWVsZChqbmks
IGpfaW5pdCwgbWF4X3JldHJhbnNtaXRzX2lkKTsKLSAgaW5pdC5wcm90b2NvbCA9IEphdmFUb1N0
ZFN0cmluZygKLSAgICAgIGpuaSwgR2V0U3RyaW5nRmllbGQoam5pLCBqX2luaXQsIHByb3RvY29s
X2lkKSk7Ci0gIGluaXQubmVnb3RpYXRlZCA9IEdldEJvb2xlYW5GaWVsZChqbmksIGpfaW5pdCwg
bmVnb3RpYXRlZF9pZCk7Ci0gIGluaXQuaWQgPSBHZXRJbnRGaWVsZChqbmksIGpfaW5pdCwgaWRf
aWQpOwotCi0gIHJldHVybiBpbml0OwotfQotCi1jbGFzcyBDb25zdHJhaW50c1dyYXBwZXI7Ci0K
LS8vIEFkYXB0ZXIgYmV0d2VlbiB0aGUgQysrIFBlZXJDb25uZWN0aW9uT2JzZXJ2ZXIgaW50ZXJm
YWNlIGFuZCB0aGUgSmF2YQotLy8gUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgaW50ZXJmYWNlLiAg
V3JhcHMgYW4gaW5zdGFuY2Ugb2YgdGhlIEphdmEgaW50ZXJmYWNlCi0vLyBhbmQgZGlzcGF0Y2hl
cyBDKysgY2FsbGJhY2tzIHRvIEphdmEuCi1jbGFzcyBQQ09KYXZhIDogcHVibGljIFBlZXJDb25u
ZWN0aW9uT2JzZXJ2ZXIgewotIHB1YmxpYzoKLSAgLy8gV2UgbmVlZCB0aGVzZSB1c2luZyBkZWNs
YXJhdGlvbnMgYmVjYXVzZSB0aGVyZSBhcmUgdHdvIHZlcnNpb25zIG9mIGVhY2ggb2YKLSAgLy8g
dGhlIGJlbG93IG1ldGhvZHMgYW5kIHdlIG9ubHkgb3ZlcnJpZGUgb25lIG9mIHRoZW0uCi0gIC8v
IFRPRE8oZGVhZGJlZWYpOiBSZW1vdmUgb25jZSB0aGVyZSdzIG9ubHkgb25lIHZlcnNpb24gb2Yg
dGhlIG1ldGhvZHMuCi0gIHVzaW5nIFBlZXJDb25uZWN0aW9uT2JzZXJ2ZXI6Ok9uQWRkU3RyZWFt
OwotICB1c2luZyBQZWVyQ29ubmVjdGlvbk9ic2VydmVyOjpPblJlbW92ZVN0cmVhbTsKLSAgdXNp
bmcgUGVlckNvbm5lY3Rpb25PYnNlcnZlcjo6T25EYXRhQ2hhbm5lbDsKLQotICBQQ09KYXZhKEpO
SUVudiogam5pLCBqb2JqZWN0IGpfb2JzZXJ2ZXIpCi0gICAgICA6IGpfb2JzZXJ2ZXJfZ2xvYmFs
XyhqbmksIGpfb2JzZXJ2ZXIpLAotICAgICAgICBqX29ic2VydmVyX2NsYXNzXyhqbmksIEdldE9i
amVjdENsYXNzKGpuaSwgKmpfb2JzZXJ2ZXJfZ2xvYmFsXykpLAotICAgICAgICBqX21lZGlhX3N0
cmVhbV9jbGFzc18oam5pLCBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9NZWRpYVN0cmVhbSIp
KSwKLSAgICAgICAgal9tZWRpYV9zdHJlYW1fY3Rvcl8oR2V0TWV0aG9kSUQoCi0gICAgICAgICAg
ICBqbmksICpqX21lZGlhX3N0cmVhbV9jbGFzc18sICI8aW5pdD4iLCAiKEopViIpKSwKLSAgICAg
ICAgal9hdWRpb190cmFja19jbGFzc18oam5pLCBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9B
dWRpb1RyYWNrIikpLAotICAgICAgICBqX2F1ZGlvX3RyYWNrX2N0b3JfKEdldE1ldGhvZElEKAot
ICAgICAgICAgICAgam5pLCAqal9hdWRpb190cmFja19jbGFzc18sICI8aW5pdD4iLCAiKEopViIp
KSwKLSAgICAgICAgal92aWRlb190cmFja19jbGFzc18oam5pLCBGaW5kQ2xhc3Moam5pLCAib3Jn
L3dlYnJ0Yy9WaWRlb1RyYWNrIikpLAotICAgICAgICBqX3ZpZGVvX3RyYWNrX2N0b3JfKEdldE1l
dGhvZElEKAotICAgICAgICAgICAgam5pLCAqal92aWRlb190cmFja19jbGFzc18sICI8aW5pdD4i
LCAiKEopViIpKSwKLSAgICAgICAgal9kYXRhX2NoYW5uZWxfY2xhc3NfKGpuaSwgRmluZENsYXNz
KGpuaSwgIm9yZy93ZWJydGMvRGF0YUNoYW5uZWwiKSksCi0gICAgICAgIGpfZGF0YV9jaGFubmVs
X2N0b3JfKEdldE1ldGhvZElEKAotICAgICAgICAgICAgam5pLCAqal9kYXRhX2NoYW5uZWxfY2xh
c3NfLCAiPGluaXQ+IiwgIihKKVYiKSkgewotICB9Ci0KLSAgdmlydHVhbCB+UENPSmF2YSgpIHsK
LSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgd2hp
bGUgKCFyZW1vdGVfc3RyZWFtc18uZW1wdHkoKSkKLSAgICAgIERpc3Bvc2VSZW1vdGVTdHJlYW0o
cmVtb3RlX3N0cmVhbXNfLmJlZ2luKCkpOwotICB9Ci0KLSAgdm9pZCBPbkljZUNhbmRpZGF0ZShj
b25zdCBJY2VDYW5kaWRhdGVJbnRlcmZhY2UqIGNhbmRpZGF0ZSkgb3ZlcnJpZGUgewotICAgIFNj
b3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBzdGQ6OnN0cmlu
ZyBzZHA7Ci0gICAgUlRDX0NIRUNLKGNhbmRpZGF0ZS0+VG9TdHJpbmcoJnNkcCkpIDw8ICJnb3Qg
c28gZmFyOiAiIDw8IHNkcDsKLSAgICBqY2xhc3MgY2FuZGlkYXRlX2NsYXNzID0gRmluZENsYXNz
KGpuaSgpLCAib3JnL3dlYnJ0Yy9JY2VDYW5kaWRhdGUiKTsKLSAgICBqbWV0aG9kSUQgY3RvciA9
IEdldE1ldGhvZElEKGpuaSgpLCBjYW5kaWRhdGVfY2xhc3MsCi0gICAgICAgICI8aW5pdD4iLCAi
KExqYXZhL2xhbmcvU3RyaW5nO0lMamF2YS9sYW5nL1N0cmluZzspViIpOwotICAgIGpzdHJpbmcg
al9taWQgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmkoKSwgY2FuZGlkYXRlLT5zZHBfbWlk
KCkpOwotICAgIGpzdHJpbmcgal9zZHAgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmkoKSwg
c2RwKTsKLSAgICBqb2JqZWN0IGpfY2FuZGlkYXRlID0gam5pKCktPk5ld09iamVjdChjYW5kaWRh
dGVfY2xhc3MsIGN0b3IsIGpfbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmRpZGF0ZS0+c2RwX21saW5lX2luZGV4KCksIGpfc2RwKTsKLSAgICBDSEVD
S19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLSAgICBqbWV0
aG9kSUQgbSA9IEdldE1ldGhvZElEKGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAib25JY2VDYW5kaWRhdGUiLCAiKExvcmcvd2VicnRjL0lj
ZUNhbmRpZGF0ZTspViIpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9n
bG9iYWxfLCBtLCBqX2NhbmRpZGF0ZSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAi
ZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIHZvaWQgT25JY2VDYW5kaWRh
dGVzUmVtb3ZlZCgKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNyaWNrZXQ6OkNhbmRpZGF0ZT4m
IGNhbmRpZGF0ZXMpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3Jl
Zl9mcmFtZShqbmkoKSk7Ci0gICAgam9iamVjdEFycmF5IGNhbmRpZGF0ZXNfYXJyYXkgPSBUb0ph
dmFDYW5kaWRhdGVBcnJheShqbmkoKSwgY2FuZGlkYXRlcyk7Ci0gICAgam1ldGhvZElEIG0gPQot
ICAgICAgICBHZXRNZXRob2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25JY2VDYW5k
aWRhdGVzUmVtb3ZlZCIsCi0gICAgICAgICAgICAgICAgICAgICIoW0xvcmcvd2VicnRjL0ljZUNh
bmRpZGF0ZTspViIpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9i
YWxfLCBtLCBjYW5kaWRhdGVzX2FycmF5KTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8
ICJFcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAgdm9pZCBPblNpZ25hbGlu
Z0NoYW5nZSgKLSAgICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpTaWduYWxpbmdTdGF0ZSBu
ZXdfc3RhdGUpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9m
cmFtZShqbmkoKSk7Ci0gICAgam1ldGhvZElEIG0gPSBHZXRNZXRob2RJRCgKLSAgICAgICAgam5p
KCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uU2lnbmFsaW5nQ2hhbmdlIiwKLSAgICAgICAgIihM
b3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRTaWduYWxpbmdTdGF0ZTspViIpOwotICAgIGpvYmpl
Y3QgbmV3X3N0YXRlX2VudW0gPQotICAgICAgICBKYXZhRW51bUZyb21JbmRleChqbmkoKSwgIlBl
ZXJDb25uZWN0aW9uJFNpZ25hbGluZ1N0YXRlIiwgbmV3X3N0YXRlKTsKLSAgICBqbmkoKS0+Q2Fs
bFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgbmV3X3N0YXRlX2VudW0pOwotICAg
IENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7
Ci0gIH0KLQotICB2b2lkIE9uSWNlQ29ubmVjdGlvbkNoYW5nZSgKLSAgICAgIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjpJY2VDb25uZWN0aW9uU3RhdGUgbmV3X3N0YXRlKSBvdmVycmlkZSB7Ci0g
ICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwotICAgIGptZXRo
b2RJRCBtID0gR2V0TWV0aG9kSUQoCi0gICAgICAgIGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18s
ICJvbkljZUNvbm5lY3Rpb25DaGFuZ2UiLAotICAgICAgICAiKExvcmcvd2VicnRjL1BlZXJDb25u
ZWN0aW9uJEljZUNvbm5lY3Rpb25TdGF0ZTspViIpOwotICAgIGpvYmplY3QgbmV3X3N0YXRlX2Vu
dW0gPSBKYXZhRW51bUZyb21JbmRleCgKLSAgICAgICAgam5pKCksICJQZWVyQ29ubmVjdGlvbiRJ
Y2VDb25uZWN0aW9uU3RhdGUiLCBuZXdfc3RhdGUpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhv
ZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBtLCBuZXdfc3RhdGVfZW51bSk7Ci0gICAgQ0hFQ0tfRVhD
RVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAgfQotCi0g
IHZvaWQgT25JY2VDb25uZWN0aW9uUmVjZWl2aW5nQ2hhbmdlKGJvb2wgcmVjZWl2aW5nKSBvdmVy
cmlkZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKCkpOwot
ICAgIGptZXRob2RJRCBtID0gR2V0TWV0aG9kSUQoCi0gICAgICAgIGpuaSgpLCAqal9vYnNlcnZl
cl9jbGFzc18sICJvbkljZUNvbm5lY3Rpb25SZWNlaXZpbmdDaGFuZ2UiLCAiKFopViIpOwotICAg
IGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxfLCBtLCByZWNlaXZpbmcp
OwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1l
dGhvZCI7Ci0gIH0KLQotICB2b2lkIE9uSWNlR2F0aGVyaW5nQ2hhbmdlKAotICAgICAgUGVlckNv
bm5lY3Rpb25JbnRlcmZhY2U6OkljZUdhdGhlcmluZ1N0YXRlIG5ld19zdGF0ZSkgb3ZlcnJpZGUg
ewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBq
bWV0aG9kSUQgbSA9IEdldE1ldGhvZElEKAotICAgICAgICBqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xh
c3NfLCAib25JY2VHYXRoZXJpbmdDaGFuZ2UiLAotICAgICAgICAiKExvcmcvd2VicnRjL1BlZXJD
b25uZWN0aW9uJEljZUdhdGhlcmluZ1N0YXRlOylWIik7Ci0gICAgam9iamVjdCBuZXdfc3RhdGVf
ZW51bSA9IEphdmFFbnVtRnJvbUluZGV4KAotICAgICAgICBqbmkoKSwgIlBlZXJDb25uZWN0aW9u
JEljZUdhdGhlcmluZ1N0YXRlIiwgbmV3X3N0YXRlKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRo
b2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgbmV3X3N0YXRlX2VudW0pOwotICAgIENIRUNLX0VY
Q0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQot
ICB2b2lkIE9uQWRkU3RyZWFtKHJ0Yzo6c2NvcGVkX3JlZnB0cjxNZWRpYVN0cmVhbUludGVyZmFj
ZT4gc3RyZWFtKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZf
ZnJhbWUoam5pKCkpOwotICAgIC8vIEphdmEgTWVkaWFTdHJlYW0gaG9sZHMgb25lIHJlZmVyZW5j
ZS4gQ29ycmVzcG9uZGluZyBSZWxlYXNlKCkgaXMgaW4KLSAgICAvLyBNZWRpYVN0cmVhbV9mcmVl
LCB0cmlnZ2VyZWQgYnkgTWVkaWFTdHJlYW0uZGlzcG9zZSgpLgotICAgIHN0cmVhbS0+QWRkUmVm
KCk7Ci0gICAgam9iamVjdCBqX3N0cmVhbSA9Ci0gICAgICAgIGpuaSgpLT5OZXdPYmplY3QoKmpf
bWVkaWFfc3RyZWFtX2NsYXNzXywgal9tZWRpYV9zdHJlYW1fY3Rvcl8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4oc3RyZWFtLmdldCgpKSk7Ci0gICAg
Q0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0KLSAg
ICBmb3IgKGNvbnN0IGF1dG8mIHRyYWNrIDogc3RyZWFtLT5HZXRBdWRpb1RyYWNrcygpKSB7Ci0g
ICAgICBqc3RyaW5nIGlkID0gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5pKCksIHRyYWNrLT5p
ZCgpKTsKLSAgICAgIC8vIEphdmEgQXVkaW9UcmFjayBob2xkcyBvbmUgcmVmZXJlbmNlLiBDb3Jy
ZXNwb25kaW5nIFJlbGVhc2UoKSBpcyBpbgotICAgICAgLy8gTWVkaWFTdHJlYW1UcmFja19mcmVl
LCB0cmlnZ2VyZWQgYnkgQXVkaW9UcmFjay5kaXNwb3NlKCkuCi0gICAgICB0cmFjay0+QWRkUmVm
KCk7Ci0gICAgICBqb2JqZWN0IGpfdHJhY2sgPQotICAgICAgICAgIGpuaSgpLT5OZXdPYmplY3Qo
KmpfYXVkaW9fdHJhY2tfY2xhc3NfLCBqX2F1ZGlvX3RyYWNrX2N0b3JfLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4odHJhY2suZ2V0KCkpLCBpZCk7
Ci0gICAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0
IjsKLSAgICAgIGpmaWVsZElEIGF1ZGlvX3RyYWNrc19pZCA9IEdldEZpZWxkSUQoam5pKCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpqX21lZGlhX3N0cmVh
bV9jbGFzc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh
dWRpb1RyYWNrcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJMamF2YS91dGlsL0xpbmtlZExpc3Q7Iik7Ci0gICAgICBqb2JqZWN0IGF1ZGlvX3RyYWNrcyA9
IEdldE9iamVjdEZpZWxkKGpuaSgpLCBqX3N0cmVhbSwgYXVkaW9fdHJhY2tzX2lkKTsKLSAgICAg
IGptZXRob2RJRCBhZGQgPSBHZXRNZXRob2RJRChqbmkoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHZXRPYmplY3RDbGFzcyhqbmkoKSwgYXVkaW9fdHJhY2tzKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWRkIiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvT2JqZWN0OylaIik7Ci0gICAgICBqYm9vbGVhbiBh
ZGRlZCA9IGpuaSgpLT5DYWxsQm9vbGVhbk1ldGhvZChhdWRpb190cmFja3MsIGFkZCwgal90cmFj
ayk7Ci0gICAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbEJv
b2xlYW5NZXRob2QiOwotICAgICAgUlRDX0NIRUNLKGFkZGVkKTsKLSAgICB9Ci0KLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHRyYWNrIDogc3RyZWFtLT5HZXRWaWRlb1RyYWNrcygpKSB7Ci0gICAgICBq
c3RyaW5nIGlkID0gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5pKCksIHRyYWNrLT5pZCgpKTsK
LSAgICAgIC8vIEphdmEgVmlkZW9UcmFjayBob2xkcyBvbmUgcmVmZXJlbmNlLiBDb3JyZXNwb25k
aW5nIFJlbGVhc2UoKSBpcyBpbgotICAgICAgLy8gTWVkaWFTdHJlYW1UcmFja19mcmVlLCB0cmln
Z2VyZWQgYnkgVmlkZW9UcmFjay5kaXNwb3NlKCkuCi0gICAgICB0cmFjay0+QWRkUmVmKCk7Ci0g
ICAgICBqb2JqZWN0IGpfdHJhY2sgPQotICAgICAgICAgIGpuaSgpLT5OZXdPYmplY3QoKmpfdmlk
ZW9fdHJhY2tfY2xhc3NfLCBqX3ZpZGVvX3RyYWNrX2N0b3JfLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxqbG9uZz4odHJhY2suZ2V0KCkpLCBpZCk7Ci0gICAg
ICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLSAg
ICAgIGpmaWVsZElEIHZpZGVvX3RyYWNrc19pZCA9IEdldEZpZWxkSUQoam5pKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpqX21lZGlhX3N0cmVhbV9jbGFz
c18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2aWRlb1Ry
YWNrcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJMamF2
YS91dGlsL0xpbmtlZExpc3Q7Iik7Ci0gICAgICBqb2JqZWN0IHZpZGVvX3RyYWNrcyA9IEdldE9i
amVjdEZpZWxkKGpuaSgpLCBqX3N0cmVhbSwgdmlkZW9fdHJhY2tzX2lkKTsKLSAgICAgIGptZXRo
b2RJRCBhZGQgPSBHZXRNZXRob2RJRChqbmkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHZXRPYmplY3RDbGFzcyhqbmkoKSwgdmlkZW9fdHJhY2tzKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiYWRkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiKExqYXZhL2xhbmcvT2JqZWN0OylaIik7Ci0gICAgICBqYm9vbGVhbiBhZGRlZCA9
IGpuaSgpLT5DYWxsQm9vbGVhbk1ldGhvZCh2aWRlb190cmFja3MsIGFkZCwgal90cmFjayk7Ci0g
ICAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbEJvb2xlYW5N
ZXRob2QiOwotICAgICAgUlRDX0NIRUNLKGFkZGVkKTsKLSAgICB9Ci0gICAgcmVtb3RlX3N0cmVh
bXNfW3N0cmVhbV0gPSBOZXdHbG9iYWxSZWYoam5pKCksIGpfc3RyZWFtKTsKLQotICAgIGptZXRo
b2RJRCBtID0gR2V0TWV0aG9kSUQoam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uQWRkU3Ry
ZWFtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoTG9yZy93ZWJydGMvTWVkaWFT
dHJlYW07KVYiKTsKLSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFs
XywgbSwgal9zdHJlYW0pOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1
cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotICB2b2lkIE9uUmVtb3ZlU3RyZWFtKAotICAg
ICAgcnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJmYWNlPiBzdHJlYW0pIG92ZXJy
aWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0g
ICAgTmF0aXZlVG9KYXZhU3RyZWFtc01hcDo6aXRlcmF0b3IgaXQgPSByZW1vdGVfc3RyZWFtc18u
ZmluZChzdHJlYW0pOwotICAgIFJUQ19DSEVDSyhpdCAhPSByZW1vdGVfc3RyZWFtc18uZW5kKCkp
IDw8ICJ1bmV4cGVjdGVkIHN0cmVhbTogIiA8PCBzdGQ6OmhleAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHN0cmVhbTsKLSAgICBqb2JqZWN0IGpfc3RyZWFt
ID0gaXQtPnNlY29uZDsKLSAgICBqbWV0aG9kSUQgbSA9IEdldE1ldGhvZElEKGpuaSgpLCAqal9v
YnNlcnZlcl9jbGFzc18sICJvblJlbW92ZVN0cmVhbSIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiKExvcmcvd2VicnRjL01lZGlhU3RyZWFtOylWIik7Ci0gICAgam5pKCktPkNhbGxW
b2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIG0sIGpfc3RyZWFtKTsKLSAgICBDSEVDS19F
WENFUFRJT04oam5pKCkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICAgIC8v
IFJlbGVhc2UgdGhlIHJlZnB0ciByZWZlcmVuY2Ugc28gdGhhdCBEaXNwb3NlUmVtb3RlU3RyZWFt
IGNhbiBhc3NlcnQKLSAgICAvLyBpdCByZW1vdmVzIHRoZSBmaW5hbCByZWZlcmVuY2UuCi0gICAg
c3RyZWFtID0gbnVsbHB0cjsKLSAgICBEaXNwb3NlUmVtb3RlU3RyZWFtKGl0KTsKLSAgfQotCi0g
IHZvaWQgT25EYXRhQ2hhbm5lbCgKLSAgICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxEYXRhQ2hhbm5l
bEludGVyZmFjZT4gY2hhbm5lbCkgb3ZlcnJpZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUg
bG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBqb2JqZWN0IGpfY2hhbm5lbCA9IGpuaSgpLT5O
ZXdPYmplY3QoCi0gICAgICAgICpqX2RhdGFfY2hhbm5lbF9jbGFzc18sIGpfZGF0YV9jaGFubmVs
X2N0b3JfLCAoamxvbmcpY2hhbm5lbC5nZXQoKSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgp
KSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0KLSAgICBqbWV0aG9kSUQgbSA9IEdldE1l
dGhvZElEKGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18sICJvbkRhdGFDaGFubmVsIiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICIoTG9yZy93ZWJydGMvRGF0YUNoYW5uZWw7KVYiKTsK
LSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgal9jaGFu
bmVsKTsKLQotICAgIC8vIENoYW5uZWwgaXMgbm93IG93bmVkIGJ5IEphdmEgb2JqZWN0LCBhbmQg
d2lsbCBiZSBmcmVlZCBmcm9tCi0gICAgLy8gRGF0YUNoYW5uZWwuZGlzcG9zZSgpLiAgSW1wb3J0
YW50IHRoYXQgdGhpcyBiZSBkb25lIF9hZnRlcl8gdGhlCi0gICAgLy8gQ2FsbFZvaWRNZXRob2Qg
YWJvdmUgYXMgSmF2YSBjb2RlIG1pZ2h0IGNhbGwgYmFjayBpbnRvIG5hdGl2ZSBjb2RlIGFuZCBi
ZQotICAgIC8vIHN1cnByaXNlZCB0byBzZWUgYSByZWZjb3VudCBvZiAyLgotICAgIGludCBidW1w
ZWRfY291bnQgPSBjaGFubmVsLT5BZGRSZWYoKTsKLSAgICBSVENfQ0hFQ0soYnVtcGVkX2NvdW50
ID09IDIpIDw8ICJVbmV4cGVjdGVkIHJlZmNvdW50IE9uRGF0YUNoYW5uZWwiOwotCi0gICAgQ0hF
Q0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAg
fQotCi0gIHZvaWQgT25SZW5lZ290aWF0aW9uTmVlZGVkKCkgb3ZlcnJpZGUgewotICAgIFNjb3Bl
ZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBqbWV0aG9kSUQgbSA9
Ci0gICAgICAgIEdldE1ldGhvZElEKGpuaSgpLCAqal9vYnNlcnZlcl9jbGFzc18sICJvblJlbmVn
b3RpYXRpb25OZWVkZWQiLCAiKClWIik7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29i
c2VydmVyX2dsb2JhbF8sIG0pOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9y
IGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotICB2b2lkIFNldENvbnN0cmFpbnRzKENv
bnN0cmFpbnRzV3JhcHBlciogY29uc3RyYWludHMpIHsKLSAgICBSVENfQ0hFQ0soIWNvbnN0cmFp
bnRzXy5nZXQoKSkgPDwgImNvbnN0cmFpbnRzIGFscmVhZHkgc2V0ISI7Ci0gICAgY29uc3RyYWlu
dHNfLnJlc2V0KGNvbnN0cmFpbnRzKTsKLSAgfQotCi0gIGNvbnN0IENvbnN0cmFpbnRzV3JhcHBl
ciogY29uc3RyYWludHMoKSB7IHJldHVybiBjb25zdHJhaW50c18uZ2V0KCk7IH0KLQotIHByaXZh
dGU6Ci0gIHR5cGVkZWYgc3RkOjptYXA8TWVkaWFTdHJlYW1JbnRlcmZhY2UqLCBqb2JqZWN0PiBO
YXRpdmVUb0phdmFTdHJlYW1zTWFwOwotCi0gIHZvaWQgRGlzcG9zZVJlbW90ZVN0cmVhbShjb25z
dCBOYXRpdmVUb0phdmFTdHJlYW1zTWFwOjppdGVyYXRvciYgaXQpIHsKLSAgICBqb2JqZWN0IGpf
c3RyZWFtID0gaXQtPnNlY29uZDsKLSAgICByZW1vdGVfc3RyZWFtc18uZXJhc2UoaXQpOwotICAg
IGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgKLSAgICAgICAgal9zdHJlYW0sIEdldE1ldGhvZElEKGpu
aSgpLCAqal9tZWRpYV9zdHJlYW1fY2xhc3NfLCAiZGlzcG9zZSIsICIoKVYiKSk7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIE1lZGlhU3RyZWFtLmRpc3Bvc2Uo
KSI7Ci0gICAgRGVsZXRlR2xvYmFsUmVmKGpuaSgpLCBqX3N0cmVhbSk7Ci0gIH0KLQotICBqb2Jq
ZWN0IFRvSmF2YUNhbmRpZGF0ZShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgamNsYXNzKiBjYW5kaWRhdGVfY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IGNyaWNrZXQ6OkNhbmRpZGF0ZSYgY2FuZGlkYXRlKSB7Ci0gICAgc3RkOjpzdHJpbmcgc2Rw
ID0gd2VicnRjOjpTZHBTZXJpYWxpemVDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICBSVENfQ0hF
Q0soIXNkcC5lbXB0eSgpKSA8PCAiZ290IGFuIGVtcHR5IElDRSBjYW5kaWRhdGUiOwotICAgIGpt
ZXRob2RJRCBjdG9yID0gR2V0TWV0aG9kSUQoam5pLCAqY2FuZGlkYXRlX2NsYXNzLCAiPGluaXQ+
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoTGphdmEvbGFuZy9TdHJpbmc7
SUxqYXZhL2xhbmcvU3RyaW5nOylWIik7Ci0gICAganN0cmluZyBqX21pZCA9IEphdmFTdHJpbmdG
cm9tU3RkU3RyaW5nKGpuaSwgY2FuZGlkYXRlLnRyYW5zcG9ydF9uYW1lKCkpOwotICAgIGpzdHJp
bmcgal9zZHAgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmksIHNkcCk7Ci0gICAgLy8gc2Rw
X21saW5lX2luZGV4IGlzIG5vdCB1c2VkLCBwYXNzIGFuIGludmFsaWQgdmFsdWUgLTEuCi0gICAg
am9iamVjdCBqX2NhbmRpZGF0ZSA9Ci0gICAgICAgIGpuaS0+TmV3T2JqZWN0KCpjYW5kaWRhdGVf
Y2xhc3MsIGN0b3IsIGpfbWlkLCAtMSwgal9zZHApOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkp
IDw8ICJlcnJvciBkdXJpbmcgSmF2YSBDYW5kaWRhdGUgTmV3T2JqZWN0IjsKLSAgICByZXR1cm4g
al9jYW5kaWRhdGU7Ci0gIH0KLQotICBqb2JqZWN0QXJyYXkgVG9KYXZhQ2FuZGlkYXRlQXJyYXko
Ci0gICAgICBKTklFbnYqIGpuaSwKLSAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGNyaWNrZXQ6OkNh
bmRpZGF0ZT4mIGNhbmRpZGF0ZXMpIHsKLSAgICBqY2xhc3MgY2FuZGlkYXRlX2NsYXNzID0gRmlu
ZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvSWNlQ2FuZGlkYXRlIik7Ci0gICAgam9iamVjdEFycmF5
IGphdmFfY2FuZGlkYXRlcyA9Ci0gICAgICAgIGpuaS0+TmV3T2JqZWN0QXJyYXkoY2FuZGlkYXRl
cy5zaXplKCksIGNhbmRpZGF0ZV9jbGFzcywgTlVMTCk7Ci0gICAgaW50IGkgPSAwOwotICAgIGZv
ciAoY29uc3QgY3JpY2tldDo6Q2FuZGlkYXRlJiBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7Ci0g
ICAgICBqb2JqZWN0IGpfY2FuZGlkYXRlID0gVG9KYXZhQ2FuZGlkYXRlKGpuaSwgJmNhbmRpZGF0
ZV9jbGFzcywgY2FuZGlkYXRlKTsKLSAgICAgIGpuaS0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KGph
dmFfY2FuZGlkYXRlcywgaSsrLCBqX2NhbmRpZGF0ZSk7Ci0gICAgfQotICAgIHJldHVybiBqYXZh
X2NhbmRpZGF0ZXM7Ci0gIH0KLQotICBKTklFbnYqIGpuaSgpIHsKLSAgICByZXR1cm4gQXR0YWNo
Q3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIH0KLQotICBjb25zdCBTY29wZWRHbG9iYWxSZWY8
am9iamVjdD4gal9vYnNlcnZlcl9nbG9iYWxfOwotICBjb25zdCBTY29wZWRHbG9iYWxSZWY8amNs
YXNzPiBqX29ic2VydmVyX2NsYXNzXzsKLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4g
al9tZWRpYV9zdHJlYW1fY2xhc3NfOwotICBjb25zdCBqbWV0aG9kSUQgal9tZWRpYV9zdHJlYW1f
Y3Rvcl87Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfYXVkaW9fdHJhY2tfY2xh
c3NfOwotICBjb25zdCBqbWV0aG9kSUQgal9hdWRpb190cmFja19jdG9yXzsKLSAgY29uc3QgU2Nv
cGVkR2xvYmFsUmVmPGpjbGFzcz4gal92aWRlb190cmFja19jbGFzc187Ci0gIGNvbnN0IGptZXRo
b2RJRCBqX3ZpZGVvX3RyYWNrX2N0b3JfOwotICBjb25zdCBTY29wZWRHbG9iYWxSZWY8amNsYXNz
PiBqX2RhdGFfY2hhbm5lbF9jbGFzc187Ci0gIGNvbnN0IGptZXRob2RJRCBqX2RhdGFfY2hhbm5l
bF9jdG9yXzsKLSAgLy8gQysrIC0+IEphdmEgcmVtb3RlIHN0cmVhbXMuIFRoZSBzdG9yZWQgam9i
ZWN0cyBhcmUgZ2xvYmFsIHJlZnMgYW5kIG11c3QgYmUKLSAgLy8gbWFudWFsbHkgZGVsZXRlZCB1
cG9uIHJlbW92YWwuIFVzZSBEaXNwb3NlUmVtb3RlU3RyZWFtKCkuCi0gIE5hdGl2ZVRvSmF2YVN0
cmVhbXNNYXAgcmVtb3RlX3N0cmVhbXNfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RyYWludHNX
cmFwcGVyPiBjb25zdHJhaW50c187Ci19OwotCi0vLyBXcmFwcGVyIGZvciBhIEphdmEgTWVkaWFD
b25zdHJhaW50cyBvYmplY3QuICBDb3BpZXMgYWxsIG5lZWRlZCBkYXRhIHNvIHdoZW4KLS8vIHRo
ZSBjb25zdHJ1Y3RvciByZXR1cm5zIHRoZSBKYXZhIG9iamVjdCBpcyBubyBsb25nZXIgbmVlZGVk
LgotY2xhc3MgQ29uc3RyYWludHNXcmFwcGVyIDogcHVibGljIE1lZGlhQ29uc3RyYWludHNJbnRl
cmZhY2UgewotIHB1YmxpYzoKLSAgQ29uc3RyYWludHNXcmFwcGVyKEpOSUVudiogam5pLCBqb2Jq
ZWN0IGpfY29uc3RyYWludHMpIHsKLSAgICBQb3B1bGF0ZUNvbnN0cmFpbnRzRnJvbUphdmFQYWly
TGlzdCgKLSAgICAgICAgam5pLCBqX2NvbnN0cmFpbnRzLCAibWFuZGF0b3J5IiwgJm1hbmRhdG9y
eV8pOwotICAgIFBvcHVsYXRlQ29uc3RyYWludHNGcm9tSmF2YVBhaXJMaXN0KAotICAgICAgICBq
bmksIGpfY29uc3RyYWludHMsICJvcHRpb25hbCIsICZvcHRpb25hbF8pOwotICB9Ci0KLSAgdmly
dHVhbCB+Q29uc3RyYWludHNXcmFwcGVyKCkge30KLQotICAvLyBNZWRpYUNvbnN0cmFpbnRzSW50
ZXJmYWNlLgotICBjb25zdCBDb25zdHJhaW50cyYgR2V0TWFuZGF0b3J5KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbWFuZGF0b3J5XzsgfQotCi0gIGNvbnN0IENvbnN0cmFpbnRzJiBHZXRPcHRp
b25hbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG9wdGlvbmFsXzsgfQotCi0gcHJpdmF0ZToK
LSAgLy8gSGVscGVyIGZvciB0cmFuc2xhdGluZyBhIExpc3Q8UGFpcjxTdHJpbmcsIFN0cmluZz4+
IHRvIGEgQ29uc3RyYWludHMuCi0gIHN0YXRpYyB2b2lkIFBvcHVsYXRlQ29uc3RyYWludHNGcm9t
SmF2YVBhaXJMaXN0KAotICAgICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9jb25zdHJhaW50cywK
LSAgICAgIGNvbnN0IGNoYXIqIGZpZWxkX25hbWUsIENvbnN0cmFpbnRzKiBmaWVsZCkgewotICAg
IGpmaWVsZElEIGpfaWQgPSBHZXRGaWVsZElEKGpuaSwKLSAgICAgICAgR2V0T2JqZWN0Q2xhc3Mo
am5pLCBqX2NvbnN0cmFpbnRzKSwgZmllbGRfbmFtZSwgIkxqYXZhL3V0aWwvTGlzdDsiKTsKLSAg
ICBqb2JqZWN0IGpfbGlzdCA9IEdldE9iamVjdEZpZWxkKGpuaSwgal9jb25zdHJhaW50cywgal9p
ZCk7Ci0gICAgZm9yIChqb2JqZWN0IGVudHJ5IDogSXRlcmFibGUoam5pLCBqX2xpc3QpKSB7Ci0g
ICAgICBqbWV0aG9kSUQgZ2V0X2tleSA9IEdldE1ldGhvZElEKGpuaSwKLSAgICAgICAgICBHZXRP
YmplY3RDbGFzcyhqbmksIGVudHJ5KSwgImdldEtleSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIp
OwotICAgICAganN0cmluZyBqX2tleSA9IHJlaW50ZXJwcmV0X2Nhc3Q8anN0cmluZz4oCi0gICAg
ICAgICAgam5pLT5DYWxsT2JqZWN0TWV0aG9kKGVudHJ5LCBnZXRfa2V5KSk7Ci0gICAgICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxPYmplY3RNZXRob2QiOwotICAg
ICAgam1ldGhvZElEIGdldF92YWx1ZSA9IEdldE1ldGhvZElEKGpuaSwKLSAgICAgICAgICBHZXRP
YmplY3RDbGFzcyhqbmksIGVudHJ5KSwgImdldFZhbHVlIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7
Iik7Ci0gICAgICBqc3RyaW5nIGpfdmFsdWUgPSByZWludGVycHJldF9jYXN0PGpzdHJpbmc+KAot
ICAgICAgICAgIGpuaS0+Q2FsbE9iamVjdE1ldGhvZChlbnRyeSwgZ2V0X3ZhbHVlKSk7Ci0gICAg
ICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxPYmplY3RNZXRob2Qi
OwotICAgICAgZmllbGQtPnB1c2hfYmFjayhDb25zdHJhaW50KEphdmFUb1N0ZFN0cmluZyhqbmks
IGpfa2V5KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXZhVG9TdGRTdHJp
bmcoam5pLCBqX3ZhbHVlKSkpOwotICAgIH0KLSAgfQotCi0gIENvbnN0cmFpbnRzIG1hbmRhdG9y
eV87Ci0gIENvbnN0cmFpbnRzIG9wdGlvbmFsXzsKLX07Ci0KLXN0YXRpYyBqb2JqZWN0IEphdmFT
ZHBGcm9tTmF0aXZlU2RwKAotICAgIEpOSUVudiogam5pLCBjb25zdCBTZXNzaW9uRGVzY3JpcHRp
b25JbnRlcmZhY2UqIGRlc2MpIHsKLSAgc3RkOjpzdHJpbmcgc2RwOwotICBSVENfQ0hFQ0soZGVz
Yy0+VG9TdHJpbmcoJnNkcCkpIDw8ICJnb3Qgc28gZmFyOiAiIDw8IHNkcDsKLSAganN0cmluZyBq
X2Rlc2NyaXB0aW9uID0gSmF2YVN0cmluZ0Zyb21TdGRTdHJpbmcoam5pLCBzZHApOwotCi0gIGpj
bGFzcyBqX3R5cGVfY2xhc3MgPSBGaW5kQ2xhc3MoCi0gICAgICBqbmksICJvcmcvd2VicnRjL1Nl
c3Npb25EZXNjcmlwdGlvbiRUeXBlIik7Ci0gIGptZXRob2RJRCBqX3R5cGVfZnJvbV9jYW5vbmlj
YWwgPSBHZXRTdGF0aWNNZXRob2RJRCgKLSAgICAgIGpuaSwgal90eXBlX2NsYXNzLCAiZnJvbUNh
bm9uaWNhbEZvcm0iLAotICAgICAgIihMamF2YS9sYW5nL1N0cmluZzspTG9yZy93ZWJydGMvU2Vz
c2lvbkRlc2NyaXB0aW9uJFR5cGU7Iik7Ci0gIGpzdHJpbmcgal90eXBlX3N0cmluZyA9IEphdmFT
dHJpbmdGcm9tU3RkU3RyaW5nKGpuaSwgZGVzYy0+dHlwZSgpKTsKLSAgam9iamVjdCBqX3R5cGUg
PSBqbmktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoCi0gICAgICBqX3R5cGVfY2xhc3MsIGpfdHlw
ZV9mcm9tX2Nhbm9uaWNhbCwgal90eXBlX3N0cmluZyk7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkp
IDw8ICJlcnJvciBkdXJpbmcgQ2FsbE9iamVjdE1ldGhvZCI7Ci0KLSAgamNsYXNzIGpfc2RwX2Ns
YXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uIik7Ci0g
IGptZXRob2RJRCBqX3NkcF9jdG9yID0gR2V0TWV0aG9kSUQoCi0gICAgICBqbmksIGpfc2RwX2Ns
YXNzLCAiPGluaXQ+IiwKLSAgICAgICIoTG9yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uJFR5
cGU7TGphdmEvbGFuZy9TdHJpbmc7KVYiKTsKLSAgam9iamVjdCBqX3NkcCA9IGpuaS0+TmV3T2Jq
ZWN0KAotICAgICAgal9zZHBfY2xhc3MsIGpfc2RwX2N0b3IsIGpfdHlwZSwgal9kZXNjcmlwdGlv
bik7Ci0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsK
LSAgcmV0dXJuIGpfc2RwOwotfQotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gIC8vIFQgaXMgb25lIG9m
IHtDcmVhdGUsU2V0fVNlc3Npb25EZXNjcmlwdGlvbk9ic2VydmVyLgotY2xhc3MgU2RwT2JzZXJ2
ZXJXcmFwcGVyIDogcHVibGljIFQgewotIHB1YmxpYzoKLSAgU2RwT2JzZXJ2ZXJXcmFwcGVyKEpO
SUVudiogam5pLCBqb2JqZWN0IGpfb2JzZXJ2ZXIsCi0gICAgICAgICAgICAgICAgICAgICBDb25z
dHJhaW50c1dyYXBwZXIqIGNvbnN0cmFpbnRzKQotICAgICAgOiBjb25zdHJhaW50c18oY29uc3Ry
YWludHMpLAotICAgICAgICBqX29ic2VydmVyX2dsb2JhbF8oam5pLCBqX29ic2VydmVyKSwKLSAg
ICAgICAgal9vYnNlcnZlcl9jbGFzc18oam5pLCBHZXRPYmplY3RDbGFzcyhqbmksIGpfb2JzZXJ2
ZXIpKSB7Ci0gIH0KLQotICB2aXJ0dWFsIH5TZHBPYnNlcnZlcldyYXBwZXIoKSB7fQotCi0gIC8v
IENhbid0IG1hcmsgb3ZlcnJpZGUgYmVjYXVzZSBvZiB0ZW1wbGF0aW5nLgotICB2aXJ0dWFsIHZv
aWQgT25TdWNjZXNzKCkgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1l
KGpuaSgpKTsKLSAgICBqbWV0aG9kSUQgbSA9IEdldE1ldGhvZElEKGpuaSgpLCAqal9vYnNlcnZl
cl9jbGFzc18sICJvblNldFN1Y2Nlc3MiLCAiKClWIik7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0
aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIG0pOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkg
PDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotICAvLyBDYW4ndCBtYXJr
IG92ZXJyaWRlIGJlY2F1c2Ugb2YgdGVtcGxhdGluZy4KLSAgdmlydHVhbCB2b2lkIE9uU3VjY2Vz
cyhTZXNzaW9uRGVzY3JpcHRpb25JbnRlcmZhY2UqIGRlc2MpIHsKLSAgICBTY29wZWRMb2NhbFJl
ZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam1ldGhvZElEIG0gPSBHZXRNZXRo
b2RJRCgKLSAgICAgICAgam5pKCksICpqX29ic2VydmVyX2NsYXNzXywgIm9uQ3JlYXRlU3VjY2Vz
cyIsCi0gICAgICAgICIoTG9yZy93ZWJydGMvU2Vzc2lvbkRlc2NyaXB0aW9uOylWIik7Ci0gICAg
am9iamVjdCBqX3NkcCA9IEphdmFTZHBGcm9tTmF0aXZlU2RwKGpuaSgpLCBkZXNjKTsKLSAgICBq
bmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgbSwgal9zZHApOwotICAg
IENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxsVm9pZE1ldGhvZCI7
Ci0gIH0KLQotIHByb3RlY3RlZDoKLSAgLy8gQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBmYWls
dXJlIG9mIFNldCAmIENyZWF0ZSB0eXBlcywgZGlzdGluZ3Vpc2hlZCBieQotICAvLyB8b3B8IGJl
aW5nICJTZXQiIG9yICJDcmVhdGUiLgotICB2b2lkIERvT25GYWlsdXJlKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBvcCwgY29uc3Qgc3RkOjpzdHJpbmcmIGVycm9yKSB7Ci0gICAgam1ldGhvZElEIG0gPSBH
ZXRNZXRob2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib24iICsgb3AgKyAiRmFpbHVy
ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nOylW
Iik7Ci0gICAganN0cmluZyBqX2Vycm9yX3N0cmluZyA9IEphdmFTdHJpbmdGcm9tU3RkU3RyaW5n
KGpuaSgpLCBlcnJvcik7Ci0gICAgam5pKCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2ds
b2JhbF8sIG0sIGpfZXJyb3Jfc3RyaW5nKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8
ICJlcnJvciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSAgSk5JRW52KiBqbmkoKSB7
Ci0gICAgcmV0dXJuIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICB9Ci0KLSBwcml2
YXRlOgotICBzdGQ6OnVuaXF1ZV9wdHI8Q29uc3RyYWludHNXcmFwcGVyPiBjb25zdHJhaW50c187
Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqb2JqZWN0PiBqX29ic2VydmVyX2dsb2JhbF87Ci0g
IGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfb2JzZXJ2ZXJfY2xhc3NfOwotfTsKLQot
Y2xhc3MgQ3JlYXRlU2RwT2JzZXJ2ZXJXcmFwcGVyCi0gICAgOiBwdWJsaWMgU2RwT2JzZXJ2ZXJX
cmFwcGVyPENyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbk9ic2VydmVyPiB7Ci0gcHVibGljOgotICBD
cmVhdGVTZHBPYnNlcnZlcldyYXBwZXIoSk5JRW52KiBqbmksIGpvYmplY3Qgal9vYnNlcnZlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0cmFpbnRzV3JhcHBlciogY29uc3RyYWlu
dHMpCi0gICAgICA6IFNkcE9ic2VydmVyV3JhcHBlcihqbmksIGpfb2JzZXJ2ZXIsIGNvbnN0cmFp
bnRzKSB7fQotCi0gIHZvaWQgT25GYWlsdXJlKGNvbnN0IHN0ZDo6c3RyaW5nJiBlcnJvcikgb3Zl
cnJpZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsK
LSAgICBTZHBPYnNlcnZlcldyYXBwZXI6OkRvT25GYWlsdXJlKHN0ZDo6c3RyaW5nKCJDcmVhdGUi
KSwgZXJyb3IpOwotICB9Ci19OwotCi1jbGFzcyBTZXRTZHBPYnNlcnZlcldyYXBwZXIKLSAgICA6
IHB1YmxpYyBTZHBPYnNlcnZlcldyYXBwZXI8U2V0U2Vzc2lvbkRlc2NyaXB0aW9uT2JzZXJ2ZXI+
IHsKLSBwdWJsaWM6Ci0gIFNldFNkcE9ic2VydmVyV3JhcHBlcihKTklFbnYqIGpuaSwgam9iamVj
dCBqX29ic2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgQ29uc3RyYWludHNXcmFwcGVy
KiBjb25zdHJhaW50cykKLSAgICAgIDogU2RwT2JzZXJ2ZXJXcmFwcGVyKGpuaSwgal9vYnNlcnZl
ciwgY29uc3RyYWludHMpIHt9Ci0KLSAgdm9pZCBPbkZhaWx1cmUoY29uc3Qgc3RkOjpzdHJpbmcm
IGVycm9yKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJh
bWUoam5pKCkpOwotICAgIFNkcE9ic2VydmVyV3JhcHBlcjo6RG9PbkZhaWx1cmUoc3RkOjpzdHJp
bmcoIlNldCIpLCBlcnJvcik7Ci0gIH0KLX07Ci0KLS8vIEFkYXB0ZXIgZm9yIGEgSmF2YSBEYXRh
Q2hhbm5lbCRPYnNlcnZlciBwcmVzZW50aW5nIGEgQysrIERhdGFDaGFubmVsT2JzZXJ2ZXIKLS8v
IGFuZCBkaXNwYXRjaGluZyB0aGUgY2FsbGJhY2sgZnJvbSBDKysgYmFjayB0byBKYXZhLgotY2xh
c3MgRGF0YUNoYW5uZWxPYnNlcnZlcldyYXBwZXIgOiBwdWJsaWMgRGF0YUNoYW5uZWxPYnNlcnZl
ciB7Ci0gcHVibGljOgotICBEYXRhQ2hhbm5lbE9ic2VydmVyV3JhcHBlcihKTklFbnYqIGpuaSwg
am9iamVjdCBqX29ic2VydmVyKQotICAgICAgOiBqX29ic2VydmVyX2dsb2JhbF8oam5pLCBqX29i
c2VydmVyKSwKLSAgICAgICAgal9vYnNlcnZlcl9jbGFzc18oam5pLCBHZXRPYmplY3RDbGFzcyhq
bmksIGpfb2JzZXJ2ZXIpKSwKLSAgICAgICAgal9idWZmZXJfY2xhc3NfKGpuaSwgRmluZENsYXNz
KGpuaSwgIm9yZy93ZWJydGMvRGF0YUNoYW5uZWwkQnVmZmVyIikpLAotICAgICAgICBqX29uX2J1
ZmZlcmVkX2Ftb3VudF9jaGFuZ2VfbWlkXyhHZXRNZXRob2RJRCgKLSAgICAgICAgICAgIGpuaSwg
Kmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25CdWZmZXJlZEFtb3VudENoYW5nZSIsICIoSilWIikpLAot
ICAgICAgICBqX29uX3N0YXRlX2NoYW5nZV9taWRfKAotICAgICAgICAgICAgR2V0TWV0aG9kSUQo
am5pLCAqal9vYnNlcnZlcl9jbGFzc18sICJvblN0YXRlQ2hhbmdlIiwgIigpViIpKSwKLSAgICAg
ICAgal9vbl9tZXNzYWdlX21pZF8oR2V0TWV0aG9kSUQoam5pLCAqal9vYnNlcnZlcl9jbGFzc18s
ICJvbk1lc3NhZ2UiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKExv
cmcvd2VicnRjL0RhdGFDaGFubmVsJEJ1ZmZlcjspViIpKSwKLSAgICAgICAgal9idWZmZXJfY3Rv
cl8oR2V0TWV0aG9kSUQoam5pLCAqal9idWZmZXJfY2xhc3NfLCAiPGluaXQ+IiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIihMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtaKVYiKSkg
e30KLQotICB2aXJ0dWFsIH5EYXRhQ2hhbm5lbE9ic2VydmVyV3JhcHBlcigpIHt9Ci0KLSAgdm9p
ZCBPbkJ1ZmZlcmVkQW1vdW50Q2hhbmdlKHVpbnQ2NF90IHByZXZpb3VzX2Ftb3VudCkgb3ZlcnJp
ZGUgewotICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAg
ICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgal9vbl9idWZmZXJl
ZF9hbW91bnRfY2hhbmdlX21pZF8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3Vz
X2Ftb3VudCk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKSA8PCAiZXJyb3IgZHVyaW5nIENh
bGxWb2lkTWV0aG9kIjsKLSAgfQotCi0gIHZvaWQgT25TdGF0ZUNoYW5nZSgpIG92ZXJyaWRlIHsK
LSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFtZShqbmkoKSk7Ci0gICAgam5p
KCktPkNhbGxWb2lkTWV0aG9kKCpqX29ic2VydmVyX2dsb2JhbF8sIGpfb25fc3RhdGVfY2hhbmdl
X21pZF8pOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1cmluZyBDYWxs
Vm9pZE1ldGhvZCI7Ci0gIH0KLQotICB2b2lkIE9uTWVzc2FnZShjb25zdCBEYXRhQnVmZmVyJiBi
dWZmZXIpIG92ZXJyaWRlIHsKLSAgICBTY29wZWRMb2NhbFJlZkZyYW1lIGxvY2FsX3JlZl9mcmFt
ZShqbmkoKSk7Ci0gICAgam9iamVjdCBieXRlX2J1ZmZlciA9IGpuaSgpLT5OZXdEaXJlY3RCeXRl
QnVmZmVyKAotICAgICAgICBjb25zdF9jYXN0PGNoYXIqPihidWZmZXIuZGF0YS5kYXRhPGNoYXI+
KCkpLCBidWZmZXIuZGF0YS5zaXplKCkpOwotICAgIGpvYmplY3Qgal9idWZmZXIgPSBqbmkoKS0+
TmV3T2JqZWN0KCpqX2J1ZmZlcl9jbGFzc18sIGpfYnVmZmVyX2N0b3JfLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVfYnVmZmVyLCBidWZmZXIuYmluYXJ5KTsK
LSAgICBqbmkoKS0+Q2FsbFZvaWRNZXRob2QoKmpfb2JzZXJ2ZXJfZ2xvYmFsXywgal9vbl9tZXNz
YWdlX21pZF8sIGpfYnVmZmVyKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKCkpIDw8ICJlcnJv
ciBkdXJpbmcgQ2FsbFZvaWRNZXRob2QiOwotICB9Ci0KLSBwcml2YXRlOgotICBKTklFbnYqIGpu
aSgpIHsKLSAgICByZXR1cm4gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIH0KLQot
ICBjb25zdCBTY29wZWRHbG9iYWxSZWY8am9iamVjdD4gal9vYnNlcnZlcl9nbG9iYWxfOwotICBj
b25zdCBTY29wZWRHbG9iYWxSZWY8amNsYXNzPiBqX29ic2VydmVyX2NsYXNzXzsKLSAgY29uc3Qg
U2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9idWZmZXJfY2xhc3NfOwotICBjb25zdCBqbWV0aG9k
SUQgal9vbl9idWZmZXJlZF9hbW91bnRfY2hhbmdlX21pZF87Ci0gIGNvbnN0IGptZXRob2RJRCBq
X29uX3N0YXRlX2NoYW5nZV9taWRfOwotICBjb25zdCBqbWV0aG9kSUQgal9vbl9tZXNzYWdlX21p
ZF87Ci0gIGNvbnN0IGptZXRob2RJRCBqX2J1ZmZlcl9jdG9yXzsKLX07Ci0KLS8vIEFkYXB0ZXIg
Zm9yIGEgSmF2YSBTdGF0c09ic2VydmVyIHByZXNlbnRpbmcgYSBDKysgU3RhdHNPYnNlcnZlciBh
bmQKLS8vIGRpc3BhdGNoaW5nIHRoZSBjYWxsYmFjayBmcm9tIEMrKyBiYWNrIHRvIEphdmEuCi1j
bGFzcyBTdGF0c09ic2VydmVyV3JhcHBlciA6IHB1YmxpYyBTdGF0c09ic2VydmVyIHsKLSBwdWJs
aWM6Ci0gIFN0YXRzT2JzZXJ2ZXJXcmFwcGVyKEpOSUVudiogam5pLCBqb2JqZWN0IGpfb2JzZXJ2
ZXIpCi0gICAgICA6IGpfb2JzZXJ2ZXJfZ2xvYmFsXyhqbmksIGpfb2JzZXJ2ZXIpLAotICAgICAg
ICBqX29ic2VydmVyX2NsYXNzXyhqbmksIEdldE9iamVjdENsYXNzKGpuaSwgal9vYnNlcnZlcikp
LAotICAgICAgICBqX3N0YXRzX3JlcG9ydF9jbGFzc18oam5pLCBGaW5kQ2xhc3Moam5pLCAib3Jn
L3dlYnJ0Yy9TdGF0c1JlcG9ydCIpKSwKLSAgICAgICAgal9zdGF0c19yZXBvcnRfY3Rvcl8oR2V0
TWV0aG9kSUQoCi0gICAgICAgICAgICBqbmksICpqX3N0YXRzX3JlcG9ydF9jbGFzc18sICI8aW5p
dD4iLAotICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztE
IgotICAgICAgICAgICAgIltMb3JnL3dlYnJ0Yy9TdGF0c1JlcG9ydCRWYWx1ZTspViIpKSwKLSAg
ICAgICAgal92YWx1ZV9jbGFzc18oam5pLCBGaW5kQ2xhc3MoCi0gICAgICAgICAgICBqbmksICJv
cmcvd2VicnRjL1N0YXRzUmVwb3J0JFZhbHVlIikpLAotICAgICAgICBqX3ZhbHVlX2N0b3JfKEdl
dE1ldGhvZElEKAotICAgICAgICAgICAgam5pLCAqal92YWx1ZV9jbGFzc18sICI8aW5pdD4iLAot
ICAgICAgICAgICAgIihMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZzspViIpKSB7
Ci0gIH0KLQotICB2aXJ0dWFsIH5TdGF0c09ic2VydmVyV3JhcHBlcigpIHt9Ci0KLSAgdm9pZCBP
bkNvbXBsZXRlKGNvbnN0IFN0YXRzUmVwb3J0cyYgcmVwb3J0cykgb3ZlcnJpZGUgewotICAgIFNj
b3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSgpKTsKLSAgICBqb2JqZWN0QXJy
YXkgal9yZXBvcnRzID0gUmVwb3J0c1RvSmF2YShqbmkoKSwgcmVwb3J0cyk7Ci0gICAgam1ldGhv
ZElEIG0gPSBHZXRNZXRob2RJRChqbmkoKSwgKmpfb2JzZXJ2ZXJfY2xhc3NfLCAib25Db21wbGV0
ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFtMb3JnL3dlYnJ0Yy9TdGF0c1Jl
cG9ydDspViIpOwotICAgIGpuaSgpLT5DYWxsVm9pZE1ldGhvZCgqal9vYnNlcnZlcl9nbG9iYWxf
LCBtLCBqX3JlcG9ydHMpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkoKSkgPDwgImVycm9yIGR1
cmluZyBDYWxsVm9pZE1ldGhvZCI7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIGpvYmplY3RBcnJheSBS
ZXBvcnRzVG9KYXZhKAotICAgICAgSk5JRW52KiBqbmksIGNvbnN0IFN0YXRzUmVwb3J0cyYgcmVw
b3J0cykgewotICAgIGpvYmplY3RBcnJheSByZXBvcnRzX2FycmF5ID0gam5pLT5OZXdPYmplY3RB
cnJheSgKLSAgICAgICAgcmVwb3J0cy5zaXplKCksICpqX3N0YXRzX3JlcG9ydF9jbGFzc18sIE5V
TEwpOwotICAgIGludCBpID0gMDsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIHJlcG9ydCA6IHJlcG9y
dHMpIHsKLSAgICAgIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0g
ICAgICBqc3RyaW5nIGpfaWQgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmksIHJlcG9ydC0+
aWQoKS0+VG9TdHJpbmcoKSk7Ci0gICAgICBqc3RyaW5nIGpfdHlwZSA9IEphdmFTdHJpbmdGcm9t
U3RkU3RyaW5nKGpuaSwgcmVwb3J0LT5UeXBlVG9TdHJpbmcoKSk7Ci0gICAgICBqb2JqZWN0QXJy
YXkgal92YWx1ZXMgPSBWYWx1ZXNUb0phdmEoam5pLCByZXBvcnQtPnZhbHVlcygpKTsKLSAgICAg
IGpvYmplY3Qgal9yZXBvcnQgPSBqbmktPk5ld09iamVjdCgqal9zdGF0c19yZXBvcnRfY2xhc3Nf
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfc3RhdHNfcmVwb3J0
X2N0b3JfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfaWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal90eXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydC0+dGltZXN0YW1wKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgal92YWx1ZXMpOwotICAgICAgam5p
LT5TZXRPYmplY3RBcnJheUVsZW1lbnQocmVwb3J0c19hcnJheSwgaSsrLCBqX3JlcG9ydCk7Ci0g
ICAgfQotICAgIHJldHVybiByZXBvcnRzX2FycmF5OwotICB9Ci0KLSAgam9iamVjdEFycmF5IFZh
bHVlc1RvSmF2YShKTklFbnYqIGpuaSwgY29uc3QgU3RhdHNSZXBvcnQ6OlZhbHVlcyYgdmFsdWVz
KSB7Ci0gICAgam9iamVjdEFycmF5IGpfdmFsdWVzID0gam5pLT5OZXdPYmplY3RBcnJheSgKLSAg
ICAgICAgdmFsdWVzLnNpemUoKSwgKmpfdmFsdWVfY2xhc3NfLCBOVUxMKTsKLSAgICBpbnQgaSA9
IDA7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdCA6IHZhbHVlcykgewotICAgICAgU2NvcGVkTG9j
YWxSZWZGcmFtZSBsb2NhbF9yZWZfZnJhbWUoam5pKTsKLSAgICAgIC8vIFNob3VsZCB3ZSB1c2Ug
dGhlICcubmFtZScgZW51bSB2YWx1ZSBoZXJlIGluc3RlYWQgb2YgY29udmVydGluZyB0aGUKLSAg
ICAgIC8vIG5hbWUgdG8gYSBzdHJpbmc/Ci0gICAgICBqc3RyaW5nIGpfbmFtZSA9IEphdmFTdHJp
bmdGcm9tU3RkU3RyaW5nKGpuaSwgaXQuc2Vjb25kLT5kaXNwbGF5X25hbWUoKSk7Ci0gICAgICBq
c3RyaW5nIGpfdmFsdWUgPSBKYXZhU3RyaW5nRnJvbVN0ZFN0cmluZyhqbmksIGl0LnNlY29uZC0+
VG9TdHJpbmcoKSk7Ci0gICAgICBqb2JqZWN0IGpfZWxlbWVudF92YWx1ZSA9Ci0gICAgICAgICAg
am5pLT5OZXdPYmplY3QoKmpfdmFsdWVfY2xhc3NfLCBqX3ZhbHVlX2N0b3JfLCBqX25hbWUsIGpf
dmFsdWUpOwotICAgICAgam5pLT5TZXRPYmplY3RBcnJheUVsZW1lbnQoal92YWx1ZXMsIGkrKywg
al9lbGVtZW50X3ZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGpfdmFsdWVzOwotICB9Ci0KLSAg
Sk5JRW52KiBqbmkoKSB7Ci0gICAgcmV0dXJuIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgp
OwotICB9Ci0KLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpvYmplY3Q+IGpfb2JzZXJ2ZXJfZ2xv
YmFsXzsKLSAgY29uc3QgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9vYnNlcnZlcl9jbGFzc187
Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqY2xhc3M+IGpfc3RhdHNfcmVwb3J0X2NsYXNzXzsK
LSAgY29uc3Qgam1ldGhvZElEIGpfc3RhdHNfcmVwb3J0X2N0b3JfOwotICBjb25zdCBTY29wZWRH
bG9iYWxSZWY8amNsYXNzPiBqX3ZhbHVlX2NsYXNzXzsKLSAgY29uc3Qgam1ldGhvZElEIGpfdmFs
dWVfY3Rvcl87Ci19OwotCi0vLyBXcmFwcGVyIGRpc3BhdGNoaW5nIHJ0Yzo6VmlkZW9TaW5rSW50
ZXJmYWNlIHRvIGEgSmF2YSBWaWRlb1JlbmRlcmVyCi0vLyBpbnN0YW5jZS4KLWNsYXNzIEphdmFW
aWRlb1JlbmRlcmVyV3JhcHBlcgotICAgIDogcHVibGljIHJ0Yzo6VmlkZW9TaW5rSW50ZXJmYWNl
PHdlYnJ0Yzo6VmlkZW9GcmFtZT4gewotIHB1YmxpYzoKLSAgSmF2YVZpZGVvUmVuZGVyZXJXcmFw
cGVyKEpOSUVudiogam5pLCBqb2JqZWN0IGpfY2FsbGJhY2tzKQotICAgICAgOiBqX2NhbGxiYWNr
c18oam5pLCBqX2NhbGxiYWNrcyksCi0gICAgICAgIGpfcmVuZGVyX2ZyYW1lX2lkXyhHZXRNZXRo
b2RJRCgKLSAgICAgICAgICAgIGpuaSwgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX2NhbGxiYWNrcyks
ICJyZW5kZXJGcmFtZSIsCi0gICAgICAgICAgICAiKExvcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXIk
STQyMEZyYW1lOylWIikpLAotICAgICAgICBqX2ZyYW1lX2NsYXNzXyhqbmksCi0gICAgICAgICAg
ICAgICAgICAgICAgIEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL1ZpZGVvUmVuZGVyZXIkSTQy
MEZyYW1lIikpLAotICAgICAgICBqX2k0MjBfZnJhbWVfY3Rvcl9pZF8oR2V0TWV0aG9kSUQoCi0g
ICAgICAgICAgICBqbmksICpqX2ZyYW1lX2NsYXNzXywgIjxpbml0PiIsICIoSUlJW0lbTGphdmEv
bmlvL0J5dGVCdWZmZXI7SilWIikpLAotICAgICAgICBqX3RleHR1cmVfZnJhbWVfY3Rvcl9pZF8o
R2V0TWV0aG9kSUQoCi0gICAgICAgICAgICBqbmksICpqX2ZyYW1lX2NsYXNzXywgIjxpbml0PiIs
Ci0gICAgICAgICAgICAiKElJSUlbRkopViIpKSwKLSAgICAgICAgal9ieXRlX2J1ZmZlcl9jbGFz
c18oam5pLCBGaW5kQ2xhc3Moam5pLCAiamF2YS9uaW8vQnl0ZUJ1ZmZlciIpKSB7Ci0gICAgQ0hF
Q0tfRVhDRVBUSU9OKGpuaSk7Ci0gIH0KLQotICB2aXJ0dWFsIH5KYXZhVmlkZW9SZW5kZXJlcldy
YXBwZXIoKSB7fQotCi0gIHZvaWQgT25GcmFtZShjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUmIHZp
ZGVvX2ZyYW1lKSBvdmVycmlkZSB7Ci0gICAgU2NvcGVkTG9jYWxSZWZGcmFtZSBsb2NhbF9yZWZf
ZnJhbWUoam5pKCkpOwotICAgIGpvYmplY3Qgal9mcmFtZSA9Ci0gICAgICAgICh2aWRlb19mcmFt
ZS52aWRlb19mcmFtZV9idWZmZXIoKS0+bmF0aXZlX2hhbmRsZSgpICE9IG51bGxwdHIpCi0gICAg
ICAgICAgICA/IENyaWNrZXRUb0phdmFUZXh0dXJlRnJhbWUoJnZpZGVvX2ZyYW1lKQotICAgICAg
ICAgICAgOiBDcmlja2V0VG9KYXZhSTQyMEZyYW1lKCZ2aWRlb19mcmFtZSk7Ci0gICAgLy8gfGpf
Y2FsbGJhY2tzX3wgaXMgcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB8al9mcmFtZXwgd2l0aAot
ICAgIC8vIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKCkuCi0gICAgam5pKCktPkNhbGxW
b2lkTWV0aG9kKCpqX2NhbGxiYWNrc18sIGpfcmVuZGVyX2ZyYW1lX2lkXywgal9mcmFtZSk7Ci0g
ICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSgpKTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgLy8gTWFrZSBh
IHNoYWxsb3cgY29weSBvZiB8ZnJhbWV8IHRvIGJlIHVzZWQgd2l0aCBKYXZhLiBUaGUgY2FsbGVl
IGhhcwotICAvLyBvd25lcnNoaXAgb2YgdGhlIGZyYW1lLCBhbmQgdGhlIGZyYW1lIHNob3VsZCBi
ZSByZWxlYXNlZCB3aXRoCi0gIC8vIFZpZGVvUmVuZGVyZXIucmVsZWFzZU5hdGl2ZUZyYW1lKCku
Ci0gIHN0YXRpYyBqbG9uZyBqYXZhU2hhbGxvd0NvcHkoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1l
KiBmcmFtZSkgewotICAgIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKG5ldyB3ZWJydGM6OlZpZGVv
RnJhbWUoKmZyYW1lKSk7Ci0gIH0KLQotICAvLyBSZXR1cm4gYSBWaWRlb1JlbmRlcmVyLkk0MjBG
cmFtZSByZWZlcnJpbmcgdG8gdGhlIGRhdGEgaW4gfGZyYW1lfC4KLSAgam9iamVjdCBDcmlja2V0
VG9KYXZhSTQyMEZyYW1lKGNvbnN0IHdlYnJ0Yzo6VmlkZW9GcmFtZSogZnJhbWUpIHsKLSAgICBq
aW50QXJyYXkgc3RyaWRlcyA9IGpuaSgpLT5OZXdJbnRBcnJheSgzKTsKLSAgICBqaW50KiBzdHJp
ZGVzX2FycmF5ID0gam5pKCktPkdldEludEFycmF5RWxlbWVudHMoc3RyaWRlcywgTlVMTCk7Ci0g
ICAgc3RyaWRlc19hcnJheVswXSA9IGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+U3RyaWRl
WSgpOwotICAgIHN0cmlkZXNfYXJyYXlbMV0gPSBmcmFtZS0+dmlkZW9fZnJhbWVfYnVmZmVyKCkt
PlN0cmlkZVUoKTsKLSAgICBzdHJpZGVzX2FycmF5WzJdID0gZnJhbWUtPnZpZGVvX2ZyYW1lX2J1
ZmZlcigpLT5TdHJpZGVWKCk7Ci0gICAgam5pKCktPlJlbGVhc2VJbnRBcnJheUVsZW1lbnRzKHN0
cmlkZXMsIHN0cmlkZXNfYXJyYXksIDApOwotICAgIGpvYmplY3RBcnJheSBwbGFuZXMgPSBqbmko
KS0+TmV3T2JqZWN0QXJyYXkoMywgKmpfYnl0ZV9idWZmZXJfY2xhc3NfLCBOVUxMKTsKLSAgICBq
b2JqZWN0IHlfYnVmZmVyID0gam5pKCktPk5ld0RpcmVjdEJ5dGVCdWZmZXIoCi0gICAgICAgIGNv
bnN0X2Nhc3Q8dWludDhfdCo+KGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+RGF0YVkoKSks
Ci0gICAgICAgIGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+U3RyaWRlWSgpICoKLSAgICAg
ICAgICAgIGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+aGVpZ2h0KCkpOwotICAgIHNpemVf
dCBjaHJvbWFfaGVpZ2h0ID0gKGZyYW1lLT5oZWlnaHQoKSArIDEpIC8gMjsKLSAgICBqb2JqZWN0
IHVfYnVmZmVyID0gam5pKCktPk5ld0RpcmVjdEJ5dGVCdWZmZXIoCi0gICAgICAgIGNvbnN0X2Nh
c3Q8dWludDhfdCo+KGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+RGF0YVUoKSksCi0gICAg
ICAgIGZyYW1lLT52aWRlb19mcmFtZV9idWZmZXIoKS0+U3RyaWRlVSgpICogY2hyb21hX2hlaWdo
dCk7Ci0gICAgam9iamVjdCB2X2J1ZmZlciA9IGpuaSgpLT5OZXdEaXJlY3RCeXRlQnVmZmVyKAot
ICAgICAgICBjb25zdF9jYXN0PHVpbnQ4X3QqPihmcmFtZS0+dmlkZW9fZnJhbWVfYnVmZmVyKCkt
PkRhdGFWKCkpLAotICAgICAgICBmcmFtZS0+dmlkZW9fZnJhbWVfYnVmZmVyKCktPlN0cmlkZVYo
KSAqIGNocm9tYV9oZWlnaHQpOwotCi0gICAgam5pKCktPlNldE9iamVjdEFycmF5RWxlbWVudChw
bGFuZXMsIDAsIHlfYnVmZmVyKTsKLSAgICBqbmkoKS0+U2V0T2JqZWN0QXJyYXlFbGVtZW50KHBs
YW5lcywgMSwgdV9idWZmZXIpOwotICAgIGpuaSgpLT5TZXRPYmplY3RBcnJheUVsZW1lbnQocGxh
bmVzLCAyLCB2X2J1ZmZlcik7Ci0gICAgcmV0dXJuIGpuaSgpLT5OZXdPYmplY3QoCi0gICAgICAg
ICpqX2ZyYW1lX2NsYXNzXywgal9pNDIwX2ZyYW1lX2N0b3JfaWRfLAotICAgICAgICBmcmFtZS0+
d2lkdGgoKSwgZnJhbWUtPmhlaWdodCgpLAotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGZyYW1l
LT5yb3RhdGlvbigpKSwKLSAgICAgICAgc3RyaWRlcywgcGxhbmVzLCBqYXZhU2hhbGxvd0NvcHko
ZnJhbWUpKTsKLSAgfQotCi0gIC8vIFJldHVybiBhIFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIHJl
ZmVycmluZyB0ZXh0dXJlIG9iamVjdCBpbiB8ZnJhbWV8LgotICBqb2JqZWN0IENyaWNrZXRUb0ph
dmFUZXh0dXJlRnJhbWUoY29uc3Qgd2VicnRjOjpWaWRlb0ZyYW1lKiBmcmFtZSkgewotICAgIE5h
dGl2ZUhhbmRsZUltcGwqIGhhbmRsZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8TmF0aXZlSGFuZGxlSW1w
bCo+KAotICAgICAgICBmcmFtZS0+dmlkZW9fZnJhbWVfYnVmZmVyKCktPm5hdGl2ZV9oYW5kbGUo
KSk7Ci0gICAgamZsb2F0QXJyYXkgc2FtcGxpbmdfbWF0cml4ID0gaGFuZGxlLT5zYW1wbGluZ19t
YXRyaXguVG9KYXZhKGpuaSgpKTsKLQotICAgIHJldHVybiBqbmkoKS0+TmV3T2JqZWN0KAotICAg
ICAgICAqal9mcmFtZV9jbGFzc18sIGpfdGV4dHVyZV9mcmFtZV9jdG9yX2lkXywKLSAgICAgICAg
ZnJhbWUtPndpZHRoKCksIGZyYW1lLT5oZWlnaHQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8aW50
PihmcmFtZS0+cm90YXRpb24oKSksCi0gICAgICAgIGhhbmRsZS0+b2VzX3RleHR1cmVfaWQsIHNh
bXBsaW5nX21hdHJpeCwgamF2YVNoYWxsb3dDb3B5KGZyYW1lKSk7Ci0gIH0KLQotICBKTklFbnYq
IGpuaSgpIHsKLSAgICByZXR1cm4gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0gIH0K
LQotICBTY29wZWRHbG9iYWxSZWY8am9iamVjdD4gal9jYWxsYmFja3NfOwotICBqbWV0aG9kSUQg
al9yZW5kZXJfZnJhbWVfaWRfOwotICBTY29wZWRHbG9iYWxSZWY8amNsYXNzPiBqX2ZyYW1lX2Ns
YXNzXzsKLSAgam1ldGhvZElEIGpfaTQyMF9mcmFtZV9jdG9yX2lkXzsKLSAgam1ldGhvZElEIGpf
dGV4dHVyZV9mcmFtZV9jdG9yX2lkXzsKLSAgU2NvcGVkR2xvYmFsUmVmPGpjbGFzcz4gal9ieXRl
X2J1ZmZlcl9jbGFzc187Ci19OwotCi0KLXN0YXRpYyBEYXRhQ2hhbm5lbEludGVyZmFjZSogRXh0
cmFjdE5hdGl2ZURDKEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMpIHsKLSAgamZpZWxkSUQgbmF0
aXZlX2RjX2lkID0gR2V0RmllbGRJRChqbmksCi0gICAgICBHZXRPYmplY3RDbGFzcyhqbmksIGpf
ZGMpLCAibmF0aXZlRGF0YUNoYW5uZWwiLCAiSiIpOwotICBqbG9uZyBqX2QgPSBHZXRMb25nRmll
bGQoam5pLCBqX2RjLCBuYXRpdmVfZGNfaWQpOwotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxE
YXRhQ2hhbm5lbEludGVyZmFjZSo+KGpfZCk7Ci19Ci0KLUpPVyhqbG9uZywgRGF0YUNoYW5uZWxf
cmVnaXN0ZXJPYnNlcnZlck5hdGl2ZSkoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9kYywg
am9iamVjdCBqX29ic2VydmVyKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxEYXRhQ2hhbm5lbE9ic2Vy
dmVyV3JhcHBlcj4gb2JzZXJ2ZXIoCi0gICAgICBuZXcgRGF0YUNoYW5uZWxPYnNlcnZlcldyYXBw
ZXIoam5pLCBqX29ic2VydmVyKSk7Ci0gIEV4dHJhY3ROYXRpdmVEQyhqbmksIGpfZGMpLT5SZWdp
c3Rlck9ic2VydmVyKG9ic2VydmVyLmdldCgpKTsKLSAgcmV0dXJuIGpsb25nRnJvbVBvaW50ZXIo
b2JzZXJ2ZXIucmVsZWFzZSgpKTsKLX0KLQotSk9XKHZvaWQsIERhdGFDaGFubmVsX3VucmVnaXN0
ZXJPYnNlcnZlck5hdGl2ZSkoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9kYywgamxvbmcg
bmF0aXZlX29ic2VydmVyKSB7Ci0gIEV4dHJhY3ROYXRpdmVEQyhqbmksIGpfZGMpLT5VbnJlZ2lz
dGVyT2JzZXJ2ZXIoKTsKLSAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8RGF0YUNoYW5uZWxPYnNl
cnZlcldyYXBwZXIqPihuYXRpdmVfb2JzZXJ2ZXIpOwotfQotCi1KT1coanN0cmluZywgRGF0YUNo
YW5uZWxfbGFiZWwpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMpIHsKLSAgcmV0dXJuIEphdmFT
dHJpbmdGcm9tU3RkU3RyaW5nKGpuaSwgRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPmxhYmVs
KCkpOwotfQotCi1KT1coamludCwgRGF0YUNoYW5uZWxfaWQpKEpOSUVudiogam5pLCBqb2JqZWN0
IGpfZGMpIHsKLSAgaW50IGlkID0gRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPmlkKCk7Ci0g
IFJUQ19DSEVDS19MRShpZCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWF4KCkpCi0g
ICAgICA8PCAiaWQgb3ZlcmZsb3dlZCBqaW50ISI7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxqaW50
PihpZCk7Ci19Ci0KLUpPVyhqb2JqZWN0LCBEYXRhQ2hhbm5lbF9zdGF0ZSkoSk5JRW52KiBqbmks
IGpvYmplY3Qgal9kYykgewotICByZXR1cm4gSmF2YUVudW1Gcm9tSW5kZXgoCi0gICAgICBqbmks
ICJEYXRhQ2hhbm5lbCRTdGF0ZSIsIEV4dHJhY3ROYXRpdmVEQyhqbmksIGpfZGMpLT5zdGF0ZSgp
KTsKLX0KLQotSk9XKGpsb25nLCBEYXRhQ2hhbm5lbF9idWZmZXJlZEFtb3VudCkoSk5JRW52KiBq
bmksIGpvYmplY3Qgal9kYykgewotICB1aW50NjRfdCBidWZmZXJlZF9hbW91bnQgPSBFeHRyYWN0
TmF0aXZlREMoam5pLCBqX2RjKS0+YnVmZmVyZWRfYW1vdW50KCk7Ci0gIFJUQ19DSEVDS19MRShi
dWZmZXJlZF9hbW91bnQsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKQotICAg
ICAgPDwgImJ1ZmZlcmVkX2Ftb3VudCBvdmVyZmxvd2VkIGpsb25nISI7Ci0gIHJldHVybiBzdGF0
aWNfY2FzdDxqbG9uZz4oYnVmZmVyZWRfYW1vdW50KTsKLX0KLQotSk9XKHZvaWQsIERhdGFDaGFu
bmVsX2Nsb3NlKShKTklFbnYqIGpuaSwgam9iamVjdCBqX2RjKSB7Ci0gIEV4dHJhY3ROYXRpdmVE
QyhqbmksIGpfZGMpLT5DbG9zZSgpOwotfQotCi1KT1coamJvb2xlYW4sIERhdGFDaGFubmVsX3Nl
bmROYXRpdmUpKEpOSUVudiogam5pLCBqb2JqZWN0IGpfZGMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpieXRlQXJyYXkgZGF0YSwgamJvb2xlYW4gYmluYXJ5KSB7Ci0g
IGpieXRlKiBieXRlcyA9IGpuaS0+R2V0Qnl0ZUFycmF5RWxlbWVudHMoZGF0YSwgTlVMTCk7Ci0g
IGJvb2wgcmV0ID0gRXh0cmFjdE5hdGl2ZURDKGpuaSwgal9kYyktPlNlbmQoRGF0YUJ1ZmZlcigK
LSAgICAgIHJ0Yzo6Q29weU9uV3JpdGVCdWZmZXIoYnl0ZXMsIGpuaS0+R2V0QXJyYXlMZW5ndGgo
ZGF0YSkpLAotICAgICAgYmluYXJ5KSk7Ci0gIGpuaS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRz
KGRhdGEsIGJ5dGVzLCBKTklfQUJPUlQpOwotICByZXR1cm4gcmV0OwotfQotCi1KT1codm9pZCwg
RGF0YUNoYW5uZWxfZGlzcG9zZSkoSk5JRW52KiBqbmksIGpvYmplY3Qgal9kYykgewotICBDSEVD
S19SRUxFQVNFKEV4dHJhY3ROYXRpdmVEQyhqbmksIGpfZGMpKTsKLX0KLQotSk9XKHZvaWQsIExv
Z2dpbmdfbmF0aXZlRW5hYmxlVHJhY2luZykoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywganN0
cmluZyBqX3BhdGgsIGppbnQgbmF0aXZlTGV2ZWxzKSB7Ci0gIHN0ZDo6c3RyaW5nIHBhdGggPSBK
YXZhVG9TdGRTdHJpbmcoam5pLCBqX3BhdGgpOwotICBpZiAobmF0aXZlTGV2ZWxzICE9IHdlYnJ0
Yzo6a1RyYWNlTm9uZSkgewotICAgIHdlYnJ0Yzo6VHJhY2U6OnNldF9sZXZlbF9maWx0ZXIobmF0
aXZlTGV2ZWxzKTsKLSAgICBpZiAocGF0aCAhPSAibG9nY2F0OiIpIHsKLSAgICAgIFJUQ19DSEVD
S19FUSgwLCB3ZWJydGM6OlRyYWNlOjpTZXRUcmFjZUZpbGUocGF0aC5jX3N0cigpLCBmYWxzZSkp
Ci0gICAgICAgICAgPDwgIlNldFRyYWNlRmlsZSBmYWlsZWQiOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAvLyBJbnRlbnRpb25hbGx5IGxlYWsgdGhpcyB0byBhdm9pZCBuZWVkaW5nIHRvIHJlYXNvbiBh
Ym91dCBpdHMgbGlmZWN5Y2xlLgotICAgICAgLy8gSXQga2VlcHMgbm8gc3RhdGUgYW5kIGZ1bmN0
aW9ucyBvbmx5IGFzIGEgZGlzcGF0Y2ggcG9pbnQuCi0gICAgICBzdGF0aWMgTG9nY2F0VHJhY2VD
b250ZXh0KiBnX3RyYWNlX2NhbGxiYWNrID0gbmV3IExvZ2NhdFRyYWNlQ29udGV4dCgpOwotICAg
IH0KLSAgfQotfQotCi1KT1codm9pZCwgTG9nZ2luZ19uYXRpdmVFbmFibGVMb2dUb0RlYnVnT3V0
cHV0KQotICAgIChKTklFbnYgKmpuaSwgamNsYXNzLCBqaW50IG5hdGl2ZVNldmVyaXR5KSB7Ci0g
IGlmIChuYXRpdmVTZXZlcml0eSA+PSBydGM6OkxTX1NFTlNJVElWRSAmJiBuYXRpdmVTZXZlcml0
eSA8PSBydGM6OkxTX05PTkUpIHsKLSAgICBydGM6OkxvZ01lc3NhZ2U6OkxvZ1RvRGVidWcoCi0g
ICAgICAgIHN0YXRpY19jYXN0PHJ0Yzo6TG9nZ2luZ1NldmVyaXR5PihuYXRpdmVTZXZlcml0eSkp
OwotICB9Ci19Ci0KLUpPVyh2b2lkLCBMb2dnaW5nX25hdGl2ZUVuYWJsZUxvZ1RocmVhZHMpKEpO
SUVudiogam5pLCBqY2xhc3MpIHsKLSAgcnRjOjpMb2dNZXNzYWdlOjpMb2dUaHJlYWRzKHRydWUp
OwotfQotCi1KT1codm9pZCwgTG9nZ2luZ19uYXRpdmVFbmFibGVMb2dUaW1lU3RhbXBzKShKTklF
bnYqIGpuaSwgamNsYXNzKSB7Ci0gIHJ0Yzo6TG9nTWVzc2FnZTo6TG9nVGltZXN0YW1wcyh0cnVl
KTsKLX0KLQotSk9XKHZvaWQsIExvZ2dpbmdfbmF0aXZlTG9nKSgKLSAgICBKTklFbnYqIGpuaSwg
amNsYXNzLCBqaW50IGpfc2V2ZXJpdHksIGpzdHJpbmcgal90YWcsIGpzdHJpbmcgal9tZXNzYWdl
KSB7Ci0gIHN0ZDo6c3RyaW5nIG1lc3NhZ2UgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX21lc3Nh
Z2UpOwotICBzdGQ6OnN0cmluZyB0YWcgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX3RhZyk7Ci0g
IExPR19UQUcoc3RhdGljX2Nhc3Q8cnRjOjpMb2dnaW5nU2V2ZXJpdHk+KGpfc2V2ZXJpdHkpLCB0
YWcpIDw8IG1lc3NhZ2U7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbl9mcmVlUGVlckNv
bm5lY3Rpb24pKEpOSUVudiosIGpjbGFzcywgamxvbmcgal9wKSB7Ci0gIENIRUNLX1JFTEVBU0Uo
cmVpbnRlcnByZXRfY2FzdDxQZWVyQ29ubmVjdGlvbkludGVyZmFjZSo+KGpfcCkpOwotfQotCi1K
T1codm9pZCwgUGVlckNvbm5lY3Rpb25fZnJlZU9ic2VydmVyKShKTklFbnYqLCBqY2xhc3MsIGps
b25nIGpfcCkgewotICBQQ09KYXZhKiBwID0gcmVpbnRlcnByZXRfY2FzdDxQQ09KYXZhKj4oal9w
KTsKLSAgZGVsZXRlIHA7Ci19Ci0KLUpPVyh2b2lkLCBNZWRpYVNvdXJjZV9mcmVlKShKTklFbnYq
LCBqY2xhc3MsIGpsb25nIGpfcCkgewotICByZWludGVycHJldF9jYXN0PHJ0Yzo6UmVmQ291bnRJ
bnRlcmZhY2UqPihqX3ApLT5SZWxlYXNlKCk7Ci19Ci0KLUpPVyh2b2lkLCBWaWRlb1JlbmRlcmVy
X2ZyZWVXcmFwcGVkVmlkZW9SZW5kZXJlcikoSk5JRW52KiwgamNsYXNzLCBqbG9uZyBqX3ApIHsK
LSAgZGVsZXRlIHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVZpZGVvUmVuZGVyZXJXcmFwcGVyKj4oal9w
KTsKLX0KLQotSk9XKHZvaWQsIFZpZGVvUmVuZGVyZXJfcmVsZWFzZU5hdGl2ZUZyYW1lKSgKLSAg
ICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX2ZyYW1lX3B0cikgewotICBkZWxldGUgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB3ZWJydGM6OlZpZGVvRnJhbWUqPihqX2ZyYW1lX3B0cik7Ci19
Ci0KLUpPVyh2b2lkLCBNZWRpYVN0cmVhbVRyYWNrX2ZyZWUpKEpOSUVudiosIGpjbGFzcywgamxv
bmcgal9wKSB7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSo+
KGpfcCktPlJlbGVhc2UoKTsKLX0KLQotSk9XKGpib29sZWFuLCBNZWRpYVN0cmVhbV9uYXRpdmVB
ZGRBdWRpb1RyYWNrKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBwb2ludGVyLCBq
bG9uZyBqX2F1ZGlvX3RyYWNrX3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihwb2ludGVyKS0+QWRkVHJhY2soCi0gICAgICByZWludGVy
cHJldF9jYXN0PEF1ZGlvVHJhY2tJbnRlcmZhY2UqPihqX2F1ZGlvX3RyYWNrX3BvaW50ZXIpKTsK
LX0KLQotSk9XKGpib29sZWFuLCBNZWRpYVN0cmVhbV9uYXRpdmVBZGRWaWRlb1RyYWNrKSgKLSAg
ICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBwb2ludGVyLCBqbG9uZyBqX3ZpZGVvX3RyYWNr
X3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZh
Y2UqPihwb2ludGVyKQotICAgICAgLT5BZGRUcmFjayhyZWludGVycHJldF9jYXN0PFZpZGVvVHJh
Y2tJbnRlcmZhY2UqPihqX3ZpZGVvX3RyYWNrX3BvaW50ZXIpKTsKLX0KLQotSk9XKGpib29sZWFu
LCBNZWRpYVN0cmVhbV9uYXRpdmVSZW1vdmVBdWRpb1RyYWNrKSgKLSAgICBKTklFbnYqIGpuaSwg
amNsYXNzLCBqbG9uZyBwb2ludGVyLCBqbG9uZyBqX2F1ZGlvX3RyYWNrX3BvaW50ZXIpIHsKLSAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihwb2ludGVyKS0+
UmVtb3ZlVHJhY2soCi0gICAgICByZWludGVycHJldF9jYXN0PEF1ZGlvVHJhY2tJbnRlcmZhY2Uq
PihqX2F1ZGlvX3RyYWNrX3BvaW50ZXIpKTsKLX0KLQotSk9XKGpib29sZWFuLCBNZWRpYVN0cmVh
bV9uYXRpdmVSZW1vdmVWaWRlb1RyYWNrKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9u
ZyBwb2ludGVyLCBqbG9uZyBqX3ZpZGVvX3RyYWNrX3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihwb2ludGVyKS0+UmVtb3ZlVHJhY2so
Ci0gICAgICByZWludGVycHJldF9jYXN0PFZpZGVvVHJhY2tJbnRlcmZhY2UqPihqX3ZpZGVvX3Ry
YWNrX3BvaW50ZXIpKTsKLX0KLQotSk9XKGpzdHJpbmcsIE1lZGlhU3RyZWFtX25hdGl2ZUxhYmVs
KShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgcmV0dXJuIEphdmFTdHJpbmdG
cm9tU3RkU3RyaW5nKAotICAgICAgam5pLCByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtSW50
ZXJmYWNlKj4oal9wKS0+bGFiZWwoKSk7Ci19Ci0KLUpPVyh2b2lkLCBNZWRpYVN0cmVhbV9mcmVl
KShKTklFbnYqLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICBDSEVDS19SRUxFQVNFKHJlaW50ZXJw
cmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihqX3ApKTsKLX0KLQotSk9XKGpsb25nLCBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlQ3JlYXRlT2JzZXJ2ZXIpKAotICAgIEpOSUVudiAq
IGpuaSwgamNsYXNzLCBqb2JqZWN0IGpfb2JzZXJ2ZXIpIHsKLSAgcmV0dXJuIChqbG9uZyluZXcg
UENPSmF2YShqbmksIGpfb2JzZXJ2ZXIpOwotfQotCi1KT1coamJvb2xlYW4sIFBlZXJDb25uZWN0
aW9uRmFjdG9yeV9pbml0aWFsaXplQW5kcm9pZEdsb2JhbHMpCi0oSk5JRW52KiBqbmksCi0gamNs
YXNzLAotIGpvYmplY3QgY29udGV4dCwKLSBqYm9vbGVhbiBpbml0aWFsaXplX2F1ZGlvLAotIGpi
b29sZWFuIGluaXRpYWxpemVfdmlkZW8sCi0gamJvb2xlYW4gdmlkZW9faHdfYWNjZWxlcmF0aW9u
KSB7Ci0gIGJvb2wgZmFpbHVyZSA9IGZhbHNlOwotICB2aWRlb19od19hY2NlbGVyYXRpb25fZW5h
YmxlZCA9IHZpZGVvX2h3X2FjY2VsZXJhdGlvbjsKLSAgQW5kcm9pZE5ldHdvcmtNb25pdG9yOjpT
ZXRBbmRyb2lkQ29udGV4dChqbmksIGNvbnRleHQpOwotICBpZiAoIWZhY3Rvcnlfc3RhdGljX2lu
aXRpYWxpemVkKSB7Ci0gICAgUlRDX0RDSEVDSyhqX2FwcGxpY2F0aW9uX2NvbnRleHQgPT0gbnVs
bHB0cik7Ci0gICAgal9hcHBsaWNhdGlvbl9jb250ZXh0ID0gTmV3R2xvYmFsUmVmKGpuaSwgY29u
dGV4dCk7Ci0KLSAgICBpZiAoaW5pdGlhbGl6ZV9hdWRpbykKLSAgICAgIGZhaWx1cmUgfD0gd2Vi
cnRjOjpWb2ljZUVuZ2luZTo6U2V0QW5kcm9pZE9iamVjdHMoR2V0SlZNKCksIGNvbnRleHQpOwot
ICAgIGZhY3Rvcnlfc3RhdGljX2luaXRpYWxpemVkID0gdHJ1ZTsKLSAgfQotICByZXR1cm4gIWZh
aWx1cmU7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfaW5pdGlhbGl6ZUZp
ZWxkVHJpYWxzKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqc3RyaW5nIGpfdHJpYWxzX2lu
aXRfc3RyaW5nKSB7Ci0gIGZpZWxkX3RyaWFsc19pbml0X3N0cmluZyA9IE5VTEw7Ci0gIGlmIChq
X3RyaWFsc19pbml0X3N0cmluZyAhPSBOVUxMKSB7Ci0gICAgY29uc3QgY2hhciogaW5pdF9zdHJp
bmcgPQotICAgICAgICBqbmktPkdldFN0cmluZ1VURkNoYXJzKGpfdHJpYWxzX2luaXRfc3RyaW5n
LCBOVUxMKTsKLSAgICBpbnQgaW5pdF9zdHJpbmdfbGVuZ3RoID0gam5pLT5HZXRTdHJpbmdVVEZM
ZW5ndGgoal90cmlhbHNfaW5pdF9zdHJpbmcpOwotICAgIGZpZWxkX3RyaWFsc19pbml0X3N0cmlu
ZyA9IG5ldyBjaGFyW2luaXRfc3RyaW5nX2xlbmd0aCArIDFdOwotICAgIHJ0Yzo6c3RyY3B5bihm
aWVsZF90cmlhbHNfaW5pdF9zdHJpbmcsIGluaXRfc3RyaW5nX2xlbmd0aCArIDEsIGluaXRfc3Ry
aW5nKTsKLSAgICBqbmktPlJlbGVhc2VTdHJpbmdVVEZDaGFycyhqX3RyaWFsc19pbml0X3N0cmlu
ZywgaW5pdF9zdHJpbmcpOwotICAgIExPRyhMU19JTkZPKSA8PCAiaW5pdGlhbGl6ZUZpZWxkVHJp
YWxzOiAiIDw8IGZpZWxkX3RyaWFsc19pbml0X3N0cmluZzsKLSAgfQotICB3ZWJydGM6OmZpZWxk
X3RyaWFsOjpJbml0RmllbGRUcmlhbHNGcm9tU3RyaW5nKGZpZWxkX3RyaWFsc19pbml0X3N0cmlu
Zyk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfaW5pdGlhbGl6ZUludGVy
bmFsVHJhY2VyKShKTklFbnYqIGpuaSwgamNsYXNzKSB7Ci0gIHJ0Yzo6dHJhY2luZzo6U2V0dXBJ
bnRlcm5hbFRyYWNlcigpOwotfQotCi1KT1coamJvb2xlYW4sIFBlZXJDb25uZWN0aW9uRmFjdG9y
eV9zdGFydEludGVybmFsVHJhY2luZ0NhcHR1cmUpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3Ms
IGpzdHJpbmcgal9ldmVudF90cmFjaW5nX2ZpbGVuYW1lKSB7Ci0gIGlmICghal9ldmVudF90cmFj
aW5nX2ZpbGVuYW1lKQotICAgIHJldHVybiBmYWxzZTsKLQotICBjb25zdCBjaGFyKiBpbml0X3N0
cmluZyA9Ci0gICAgICBqbmktPkdldFN0cmluZ1VURkNoYXJzKGpfZXZlbnRfdHJhY2luZ19maWxl
bmFtZSwgTlVMTCk7Ci0gIExPRyhMU19JTkZPKSA8PCAiU3RhcnRpbmcgaW50ZXJuYWwgdHJhY2lu
ZyB0bzogIiA8PCBpbml0X3N0cmluZzsKLSAgYm9vbCByZXQgPSBydGM6OnRyYWNpbmc6OlN0YXJ0
SW50ZXJuYWxDYXB0dXJlKGluaXRfc3RyaW5nKTsKLSAgam5pLT5SZWxlYXNlU3RyaW5nVVRGQ2hh
cnMoal9ldmVudF90cmFjaW5nX2ZpbGVuYW1lLCBpbml0X3N0cmluZyk7Ci0gIHJldHVybiByZXQ7
Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbkZhY3Rvcnlfc3RvcEludGVybmFsVHJhY2lu
Z0NhcHR1cmUpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MpIHsKLSAgcnRjOjp0cmFjaW5nOjpT
dG9wSW50ZXJuYWxDYXB0dXJlKCk7Ci19Ci0KLUpPVyh2b2lkLCBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnlfc2h1dGRvd25JbnRlcm5hbFRyYWNlcikoSk5JRW52KiBqbmksIGpjbGFzcykgewotICBydGM6
OnRyYWNpbmc6OlNodXRkb3duSW50ZXJuYWxUcmFjZXIoKTsKLX0KLQotLy8gSGVscGVyIHN0cnVj
dCBmb3Igd29ya2luZyBhcm91bmQgdGhlIGZhY3QgdGhhdCBDcmVhdGVQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkoKQotLy8gY29tZXMgaW4gdHdvIGZsYXZvcnM6IGVpdGhlciBlbnRpcmVseSBhdXRvbWFn
aWNhbCAoY29uc3RydWN0aW5nIGl0cyBvd24KLS8vIHRocmVhZHMgYW5kIGRlbGV0aW5nIHRoZW0g
b24gdGVhcmRvd24sIGJ1dCBubyBleHRlcm5hbCBjb2RlYyBmYWN0b3J5IHN1cHBvcnQpCi0vLyBv
ciBlbnRpcmVseSBtYW51YWwgKHJlcXVpcmVzIGNhbGxlciB0byBkZWxldGUgdGhyZWFkcyBhZnRl
ciBmYWN0b3J5Ci0vLyB0ZWFyZG93bikuICBUaGlzIHN0cnVjdCB0YWtlcyBvd25lcnNoaXAgb2Yg
aXRzIGN0b3IncyBhcmd1bWVudHMgdG8gcHJlc2VudCBhCi0vLyBzaW5nbGUgdGhpbmcgZm9yIEph
dmEgdG8gaG9sZCBhbmQgZXZlbnR1YWxseSBmcmVlLgotY2xhc3MgT3duZWRGYWN0b3J5QW5kVGhy
ZWFkcyB7Ci0gcHVibGljOgotICBPd25lZEZhY3RvcnlBbmRUaHJlYWRzKHN0ZDo6dW5pcXVlX3B0
cjxUaHJlYWQ+IG5ldHdvcmtfdGhyZWFkLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxUaHJlYWQ+IHdvcmtlcl90aHJlYWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPFRocmVhZD4gc2lnbmFsaW5nX3RocmVhZCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJSdGNWaWRlb0VuY29kZXJGYWN0b3J5KiBlbmNvZGVyX2ZhY3Rvcnks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgV2ViUnRjVmlkZW9EZWNvZGVyRmFjdG9yeSogZGVj
b2Rlcl9mYWN0b3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgIHJ0Yzo6TmV0d29ya01vbml0
b3JGYWN0b3J5KiBuZXR3b3JrX21vbml0b3JfZmFjdG9yeSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UqIGZhY3RvcnkpCi0gICAgICA6IG5l
dHdvcmtfdGhyZWFkXyhzdGQ6Om1vdmUobmV0d29ya190aHJlYWQpKSwKLSAgICAgICAgd29ya2Vy
X3RocmVhZF8oc3RkOjptb3ZlKHdvcmtlcl90aHJlYWQpKSwKLSAgICAgICAgc2lnbmFsaW5nX3Ro
cmVhZF8oc3RkOjptb3ZlKHNpZ25hbGluZ190aHJlYWQpKSwKLSAgICAgICAgZW5jb2Rlcl9mYWN0
b3J5XyhlbmNvZGVyX2ZhY3RvcnkpLAotICAgICAgICBkZWNvZGVyX2ZhY3RvcnlfKGRlY29kZXJf
ZmFjdG9yeSksCi0gICAgICAgIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5XyhuZXR3b3JrX21vbml0
b3JfZmFjdG9yeSksCi0gICAgICAgIGZhY3RvcnlfKGZhY3RvcnkpIHt9Ci0KLSAgfk93bmVkRmFj
dG9yeUFuZFRocmVhZHMoKSB7Ci0gICAgQ0hFQ0tfUkVMRUFTRShmYWN0b3J5Xyk7Ci0gICAgaWYg
KG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5XyAhPSBudWxscHRyKSB7Ci0gICAgICBydGM6Ok5ldHdv
cmtNb25pdG9yRmFjdG9yeTo6UmVsZWFzZUZhY3RvcnkobmV0d29ya19tb25pdG9yX2ZhY3Rvcnlf
KTsKLSAgICB9Ci0gIH0KLQotICBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2UqIGZhY3Rv
cnkoKSB7IHJldHVybiBmYWN0b3J5XzsgfQotICBUaHJlYWQqIHNpZ25hbGluZ190aHJlYWQoKSB7
IHJldHVybiBzaWduYWxpbmdfdGhyZWFkXy5nZXQoKTsgfQotICBUaHJlYWQqIHdvcmtlcl90aHJl
YWQoKSB7IHJldHVybiB3b3JrZXJfdGhyZWFkXy5nZXQoKTsgfQotICBXZWJSdGNWaWRlb0VuY29k
ZXJGYWN0b3J5KiBlbmNvZGVyX2ZhY3RvcnkoKSB7IHJldHVybiBlbmNvZGVyX2ZhY3RvcnlfOyB9
Ci0gIFdlYlJ0Y1ZpZGVvRGVjb2RlckZhY3RvcnkqIGRlY29kZXJfZmFjdG9yeSgpIHsgcmV0dXJu
IGRlY29kZXJfZmFjdG9yeV87IH0KLSAgcnRjOjpOZXR3b3JrTW9uaXRvckZhY3RvcnkqIG5ldHdv
cmtfbW9uaXRvcl9mYWN0b3J5KCkgewotICAgIHJldHVybiBuZXR3b3JrX21vbml0b3JfZmFjdG9y
eV87Ci0gIH0KLSAgdm9pZCBjbGVhcl9uZXR3b3JrX21vbml0b3JfZmFjdG9yeSgpIHsgbmV0d29y
a19tb25pdG9yX2ZhY3RvcnlfID0gbnVsbHB0cjsgfQotICB2b2lkIEludm9rZUphdmFDYWxsYmFj
a3NPbkZhY3RvcnlUaHJlYWRzKCk7Ci0KLSBwcml2YXRlOgotICB2b2lkIEphdmFDYWxsYmFja09u
RmFjdG9yeVRocmVhZHMoKTsKLQotICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPiBuZXR3
b3JrX3RocmVhZF87Ci0gIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+IHdvcmtlcl90aHJl
YWRfOwotICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8VGhyZWFkPiBzaWduYWxpbmdfdGhyZWFkXzsK
LSAgV2ViUnRjVmlkZW9FbmNvZGVyRmFjdG9yeSogZW5jb2Rlcl9mYWN0b3J5XzsKLSAgV2ViUnRj
VmlkZW9EZWNvZGVyRmFjdG9yeSogZGVjb2Rlcl9mYWN0b3J5XzsKLSAgcnRjOjpOZXR3b3JrTW9u
aXRvckZhY3RvcnkqIG5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5XzsKLSAgUGVlckNvbm5lY3Rpb25G
YWN0b3J5SW50ZXJmYWNlKiBmYWN0b3J5XzsgIC8vIENvbnN0IGFmdGVyIGN0b3IgZXhjZXB0IGR0
b3IuCi19OwotCi12b2lkIE93bmVkRmFjdG9yeUFuZFRocmVhZHM6OkphdmFDYWxsYmFja09uRmFj
dG9yeVRocmVhZHMoKSB7Ci0gIEpOSUVudiogam5pID0gQXR0YWNoQ3VycmVudFRocmVhZElmTmVl
ZGVkKCk7Ci0gIFNjb3BlZExvY2FsUmVmRnJhbWUgbG9jYWxfcmVmX2ZyYW1lKGpuaSk7Ci0gIGpj
bGFzcyBqX2ZhY3RvcnlfY2xhc3MgPSBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29u
bmVjdGlvbkZhY3RvcnkiKTsKLSAgam1ldGhvZElEIG0gPSBudWxscHRyOwotICBpZiAobmV0d29y
a190aHJlYWRfLT5Jc0N1cnJlbnQoKSkgewotICAgIExPRyhMU19JTkZPKSA8PCAiTmV0d29yayB0
aHJlYWQgSmF2YUNhbGxiYWNrIjsKLSAgICBtID0gR2V0U3RhdGljTWV0aG9kSUQoam5pLCBqX2Zh
Y3RvcnlfY2xhc3MsICJvbk5ldHdvcmtUaHJlYWRSZWFkeSIsICIoKVYiKTsKLSAgfQotICBpZiAo
d29ya2VyX3RocmVhZF8tPklzQ3VycmVudCgpKSB7Ci0gICAgTE9HKExTX0lORk8pIDw8ICJXb3Jr
ZXIgdGhyZWFkIEphdmFDYWxsYmFjayI7Ci0gICAgbSA9IEdldFN0YXRpY01ldGhvZElEKGpuaSwg
al9mYWN0b3J5X2NsYXNzLCAib25Xb3JrZXJUaHJlYWRSZWFkeSIsICIoKVYiKTsKLSAgfQotICBp
ZiAoc2lnbmFsaW5nX3RocmVhZF8tPklzQ3VycmVudCgpKSB7Ci0gICAgTE9HKExTX0lORk8pIDw8
ICJTaWduYWxpbmcgdGhyZWFkIEphdmFDYWxsYmFjayI7Ci0gICAgbSA9IEdldFN0YXRpY01ldGhv
ZElEKAotICAgICAgICBqbmksIGpfZmFjdG9yeV9jbGFzcywgIm9uU2lnbmFsaW5nVGhyZWFkUmVh
ZHkiLCAiKClWIik7Ci0gIH0KLSAgaWYgKG0gIT0gbnVsbHB0cikgewotICAgIGpuaS0+Q2FsbFN0
YXRpY1ZvaWRNZXRob2Qoal9mYWN0b3J5X2NsYXNzLCBtKTsKLSAgICBDSEVDS19FWENFUFRJT04o
am5pKSA8PCAiZXJyb3IgZHVyaW5nIEphdmFDYWxsYmFjazo6Q2FsbFN0YXRpY1ZvaWRNZXRob2Qi
OwotICB9Ci19Ci0KLXZvaWQgT3duZWRGYWN0b3J5QW5kVGhyZWFkczo6SW52b2tlSmF2YUNhbGxi
YWNrc09uRmFjdG9yeVRocmVhZHMoKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiSW52b2tlSmF2YUNh
bGxiYWNrc09uRmFjdG9yeVRocmVhZHMuIjsKLSAgbmV0d29ya190aHJlYWRfLT5JbnZva2U8dm9p
ZD4oUlRDX0ZST01fSEVSRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoaXNd
IHsgSmF2YUNhbGxiYWNrT25GYWN0b3J5VGhyZWFkcygpOyB9KTsKLSAgd29ya2VyX3RocmVhZF8t
Pkludm9rZTx2b2lkPihSVENfRlJPTV9IRVJFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFt0aGlzXSB7IEphdmFDYWxsYmFja09uRmFjdG9yeVRocmVhZHMoKTsgfSk7Ci0gIHNpZ25h
bGluZ190aHJlYWRfLT5JbnZva2U8dm9pZD4oUlRDX0ZST01fSEVSRSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbdGhpc10geyBKYXZhQ2FsbGJhY2tPbkZhY3RvcnlUaHJlYWRz
KCk7IH0pOwotfQotCi1QZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U6Ok9wdGlvbnMgUGFy
c2VPcHRpb25zRnJvbUphdmEoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBvcHRpb25zKSB7Ci0g
IGpjbGFzcyBvcHRpb25zX2NsYXNzID0gam5pLT5HZXRPYmplY3RDbGFzcyhvcHRpb25zKTsKLSAg
amZpZWxkSUQgbmV0d29ya19pZ25vcmVfbWFza19maWVsZCA9Ci0gICAgICBqbmktPkdldEZpZWxk
SUQob3B0aW9uc19jbGFzcywgIm5ldHdvcmtJZ25vcmVNYXNrIiwgIkkiKTsKLSAgaW50IG5ldHdv
cmtfaWdub3JlX21hc2sgPQotICAgICAgam5pLT5HZXRJbnRGaWVsZChvcHRpb25zLCBuZXR3b3Jr
X2lnbm9yZV9tYXNrX2ZpZWxkKTsKLQotICBqZmllbGRJRCBkaXNhYmxlX2VuY3J5cHRpb25fZmll
bGQgPQotICAgICAgam5pLT5HZXRGaWVsZElEKG9wdGlvbnNfY2xhc3MsICJkaXNhYmxlRW5jcnlw
dGlvbiIsICJaIik7Ci0gIGJvb2wgZGlzYWJsZV9lbmNyeXB0aW9uID0KLSAgICAgIGpuaS0+R2V0
Qm9vbGVhbkZpZWxkKG9wdGlvbnMsIGRpc2FibGVfZW5jcnlwdGlvbl9maWVsZCk7Ci0KLSAgamZp
ZWxkSUQgZGlzYWJsZV9uZXR3b3JrX21vbml0b3JfZmllbGQgPQotICAgICAgam5pLT5HZXRGaWVs
ZElEKG9wdGlvbnNfY2xhc3MsICJkaXNhYmxlTmV0d29ya01vbml0b3IiLCAiWiIpOwotICBib29s
IGRpc2FibGVfbmV0d29ya19tb25pdG9yID0KLSAgICAgIGpuaS0+R2V0Qm9vbGVhbkZpZWxkKG9w
dGlvbnMsIGRpc2FibGVfbmV0d29ya19tb25pdG9yX2ZpZWxkKTsKLQotICBQZWVyQ29ubmVjdGlv
bkZhY3RvcnlJbnRlcmZhY2U6Ok9wdGlvbnMgbmF0aXZlX29wdGlvbnM7Ci0KLSAgLy8gVGhpcyBk
b2Vzbid0IG5lY2Vzc2FyaWx5IG1hdGNoIHRoZSBjKysgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdDsg
ZmVlbCBmcmVlCi0gIC8vIHRvIGFkZCBtb3JlIHBhcmFtZXRlcnMgYXMgbmVjZXNzYXJ5LgotICBu
YXRpdmVfb3B0aW9ucy5uZXR3b3JrX2lnbm9yZV9tYXNrID0gbmV0d29ya19pZ25vcmVfbWFzazsK
LSAgbmF0aXZlX29wdGlvbnMuZGlzYWJsZV9lbmNyeXB0aW9uID0gZGlzYWJsZV9lbmNyeXB0aW9u
OwotICBuYXRpdmVfb3B0aW9ucy5kaXNhYmxlX25ldHdvcmtfbW9uaXRvciA9IGRpc2FibGVfbmV0
d29ya19tb25pdG9yOwotICByZXR1cm4gbmF0aXZlX29wdGlvbnM7Ci19Ci0KLUpPVyhqbG9uZywg
UGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZUNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeSko
Ci0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgam9iamVjdCBqb3B0aW9ucykgewotICAvLyB0YWxr
LyBhc3N1bWVzIHByZXR0eSB3aWRlbHkgdGhhdCB0aGUgY3VycmVudCBUaHJlYWQgaXMgVGhyZWFk
TWFuYWdlcidkLCBidXQKLSAgLy8gVGhyZWFkTWFuYWdlciBvbmx5IFdyYXBDdXJyZW50VGhyZWFk
KClzIHRoZSB0aHJlYWQgd2hlcmUgaXQgaXMgZmlyc3QKLSAgLy8gY3JlYXRlZC4gIFNpbmNlIHRo
ZSBzZW1hbnRpY3MgYXJvdW5kIHdoZW4gYXV0by13cmFwcGluZyBoYXBwZW5zIGluCi0gIC8vIHdl
YnJ0Yy9iYXNlLyBhcmUgY29udm9sdXRlZCwgd2Ugc2ltcGx5IHdyYXAgaGVyZSB0byBhdm9pZCBo
YXZpbmcgdG8gdGhpbmsKLSAgLy8gYWJvdXQgcmFtaWZpY2F0aW9ucyBvZiBhdXRvLXdyYXBwaW5n
IHRoZXJlLgotICBydGM6OlRocmVhZE1hbmFnZXI6Okluc3RhbmNlKCktPldyYXBDdXJyZW50VGhy
ZWFkKCk7Ci0gIHdlYnJ0Yzo6VHJhY2U6OkNyZWF0ZVRyYWNlKCk7Ci0KLSAgc3RkOjp1bmlxdWVf
cHRyPFRocmVhZD4gbmV0d29ya190aHJlYWQgPQotICAgICAgcnRjOjpUaHJlYWQ6OkNyZWF0ZVdp
dGhTb2NrZXRTZXJ2ZXIoKTsKLSAgbmV0d29ya190aHJlYWQtPlNldE5hbWUoIm5ldHdvcmtfdGhy
ZWFkIiwgbnVsbHB0cik7Ci0gIFJUQ19DSEVDSyhuZXR3b3JrX3RocmVhZC0+U3RhcnQoKSkgPDwg
IkZhaWxlZCB0byBzdGFydCB0aHJlYWQiOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWQ+IHdv
cmtlcl90aHJlYWQgPSBydGM6OlRocmVhZDo6Q3JlYXRlKCk7Ci0gIHdvcmtlcl90aHJlYWQtPlNl
dE5hbWUoIndvcmtlcl90aHJlYWQiLCBudWxscHRyKTsKLSAgUlRDX0NIRUNLKHdvcmtlcl90aHJl
YWQtPlN0YXJ0KCkpIDw8ICJGYWlsZWQgdG8gc3RhcnQgdGhyZWFkIjsKLQotICBzdGQ6OnVuaXF1
ZV9wdHI8VGhyZWFkPiBzaWduYWxpbmdfdGhyZWFkID0gcnRjOjpUaHJlYWQ6OkNyZWF0ZSgpOwot
ICBzaWduYWxpbmdfdGhyZWFkLT5TZXROYW1lKCJzaWduYWxpbmdfdGhyZWFkIiwgTlVMTCk7Ci0g
IFJUQ19DSEVDSyhzaWduYWxpbmdfdGhyZWFkLT5TdGFydCgpKSA8PCAiRmFpbGVkIHRvIHN0YXJ0
IHRocmVhZCI7Ci0KLSAgV2ViUnRjVmlkZW9FbmNvZGVyRmFjdG9yeSogZW5jb2Rlcl9mYWN0b3J5
ID0gbnVsbHB0cjsKLSAgV2ViUnRjVmlkZW9EZWNvZGVyRmFjdG9yeSogZGVjb2Rlcl9mYWN0b3J5
ID0gbnVsbHB0cjsKLSAgcnRjOjpOZXR3b3JrTW9uaXRvckZhY3RvcnkqIG5ldHdvcmtfbW9uaXRv
cl9mYWN0b3J5ID0gbnVsbHB0cjsKLQotICBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U6
Ok9wdGlvbnMgb3B0aW9uczsKLSAgYm9vbCBoYXNfb3B0aW9ucyA9IGpvcHRpb25zICE9IE5VTEw7
Ci0gIGlmIChoYXNfb3B0aW9ucykgewotICAgIG9wdGlvbnMgPSBQYXJzZU9wdGlvbnNGcm9tSmF2
YShqbmksIGpvcHRpb25zKTsKLSAgfQotCi0gIGlmICh2aWRlb19od19hY2NlbGVyYXRpb25fZW5h
YmxlZCkgewotICAgIGVuY29kZXJfZmFjdG9yeSA9IG5ldyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVy
RmFjdG9yeSgpOwotICAgIGRlY29kZXJfZmFjdG9yeSA9IG5ldyBNZWRpYUNvZGVjVmlkZW9EZWNv
ZGVyRmFjdG9yeSgpOwotICB9Ci0gIC8vIERvIG5vdCBjcmVhdGUgbmV0d29ya19tb25pdG9yX2Zh
Y3Rvcnkgb25seSBpZiB0aGUgb3B0aW9ucyBhcmUKLSAgLy8gcHJvdmlkZWQgYW5kIGRpc2FibGVf
bmV0d29ya19tb25pdG9yIHRoZXJlaW4gaXMgc2V0IHRvIHRydWUuCi0gIGlmICghKGhhc19vcHRp
b25zICYmIG9wdGlvbnMuZGlzYWJsZV9uZXR3b3JrX21vbml0b3IpKSB7Ci0gICAgbmV0d29ya19t
b25pdG9yX2ZhY3RvcnkgPSBuZXcgQW5kcm9pZE5ldHdvcmtNb25pdG9yRmFjdG9yeSgpOwotICAg
IHJ0Yzo6TmV0d29ya01vbml0b3JGYWN0b3J5OjpTZXRGYWN0b3J5KG5ldHdvcmtfbW9uaXRvcl9m
YWN0b3J5KTsKLSAgfQotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29ubmVjdGlvbkZhY3Rv
cnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICB3ZWJydGM6OkNyZWF0ZVBlZXJDb25uZWN0aW9u
RmFjdG9yeSgKLSAgICAgICAgICBuZXR3b3JrX3RocmVhZC5nZXQoKSwgd29ya2VyX3RocmVhZC5n
ZXQoKSwgc2lnbmFsaW5nX3RocmVhZC5nZXQoKSwKLSAgICAgICAgICBudWxscHRyLCBlbmNvZGVy
X2ZhY3RvcnksIGRlY29kZXJfZmFjdG9yeSkpOwotICBSVENfQ0hFQ0soZmFjdG9yeSkgPDwgIkZh
aWxlZCB0byBjcmVhdGUgdGhlIHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5OyAiCi0gICAgICAgICAg
ICAgICAgICAgICA8PCAiV2ViUlRDL2xpYmppbmdsZSBpbml0IGxpa2VseSBmYWlsZWQgb24gdGhp
cyBkZXZpY2UiOwotICAvLyBUT0RPKGhvbmdoYWl6KTogTWF5YmUgcHV0IHRoZSBvcHRpb25zIGFz
IHRoZSBhcmd1bWVudCBvZgotICAvLyBDcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkuCi0gIGlm
IChoYXNfb3B0aW9ucykgewotICAgIGZhY3RvcnktPlNldE9wdGlvbnMob3B0aW9ucyk7Ci0gIH0K
LSAgT3duZWRGYWN0b3J5QW5kVGhyZWFkcyogb3duZWRfZmFjdG9yeSA9IG5ldyBPd25lZEZhY3Rv
cnlBbmRUaHJlYWRzKAotICAgICAgc3RkOjptb3ZlKG5ldHdvcmtfdGhyZWFkKSwgc3RkOjptb3Zl
KHdvcmtlcl90aHJlYWQpLAotICAgICAgc3RkOjptb3ZlKHNpZ25hbGluZ190aHJlYWQpLCBlbmNv
ZGVyX2ZhY3RvcnksIGRlY29kZXJfZmFjdG9yeSwKLSAgICAgIG5ldHdvcmtfbW9uaXRvcl9mYWN0
b3J5LCBmYWN0b3J5LnJlbGVhc2UoKSk7Ci0gIG93bmVkX2ZhY3RvcnktPkludm9rZUphdmFDYWxs
YmFja3NPbkZhY3RvcnlUaHJlYWRzKCk7Ci0gIHJldHVybiBqbG9uZ0Zyb21Qb2ludGVyKG93bmVk
X2ZhY3RvcnkpOwotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZUZy
ZWVGYWN0b3J5KShKTklFbnYqLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICBkZWxldGUgcmVpbnRl
cnByZXRfY2FzdDxPd25lZEZhY3RvcnlBbmRUaHJlYWRzKj4oal9wKTsKLSAgaWYgKGZpZWxkX3Ry
aWFsc19pbml0X3N0cmluZykgewotICAgIHdlYnJ0Yzo6ZmllbGRfdHJpYWw6OkluaXRGaWVsZFRy
aWFsc0Zyb21TdHJpbmcoTlVMTCk7Ci0gICAgZGVsZXRlIGZpZWxkX3RyaWFsc19pbml0X3N0cmlu
ZzsKLSAgICBmaWVsZF90cmlhbHNfaW5pdF9zdHJpbmcgPSBOVUxMOwotICB9Ci0gIHdlYnJ0Yzo6
VHJhY2U6OlJldHVyblRyYWNlKCk7Ci19Ci0KLXN0YXRpYyBQZWVyQ29ubmVjdGlvbkZhY3RvcnlJ
bnRlcmZhY2UqIGZhY3RvcnlGcm9tSmF2YShqbG9uZyBqX3ApIHsKLSAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8T3duZWRGYWN0b3J5QW5kVGhyZWFkcyo+KGpfcCktPmZhY3RvcnkoKTsKLX0KLQot
Sk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVUaHJlYWRzQ2FsbGJhY2tzKSgK
LSAgICBKTklFbnYqLCBqY2xhc3MsIGpsb25nIGpfcCkgewotICBPd25lZEZhY3RvcnlBbmRUaHJl
YWRzICpmYWN0b3J5ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8T3duZWRGYWN0b3J5QW5kVGhy
ZWFkcyo+KGpfcCk7Ci0gIGZhY3RvcnktPkludm9rZUphdmFDYWxsYmFja3NPbkZhY3RvcnlUaHJl
YWRzKCk7Ci19Ci0KLUpPVyhqbG9uZywgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZUNyZWF0
ZUxvY2FsTWVkaWFTdHJlYW0pKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2
ZV9mYWN0b3J5LCBqc3RyaW5nIGxhYmVsKSB7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxQZWVyQ29u
bmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICBmYWN0b3J5RnJvbUphdmEo
bmF0aXZlX2ZhY3RvcnkpKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPE1lZGlhU3RyZWFtSW50ZXJm
YWNlPiBzdHJlYW0oCi0gICAgICBmYWN0b3J5LT5DcmVhdGVMb2NhbE1lZGlhU3RyZWFtKEphdmFU
b1N0ZFN0cmluZyhqbmksIGxhYmVsKSkpOwotICByZXR1cm4gKGpsb25nKXN0cmVhbS5yZWxlYXNl
KCk7Ci19Ci0KLUpPVyhqbG9uZywgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZUNyZWF0ZVZp
ZGVvU291cmNlKQotKEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2ZV9mYWN0b3J5LCBq
b2JqZWN0IGpfZWdsX2NvbnRleHQsCi0gICAgamJvb2xlYW4gaXNfc2NyZWVuY2FzdCkgewotICBP
d25lZEZhY3RvcnlBbmRUaHJlYWRzKiBmYWN0b3J5ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
T3duZWRGYWN0b3J5QW5kVGhyZWFkcyo+KG5hdGl2ZV9mYWN0b3J5KTsKLQotICBydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpBbmRyb2lkVmlkZW9UcmFja1NvdXJjZT4gc291cmNlKAotICAgICAg
bmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDx3ZWJydGM6OkFuZHJvaWRWaWRlb1RyYWNrU291cmNl
PigKLSAgICAgICAgICBmYWN0b3J5LT5zaWduYWxpbmdfdGhyZWFkKCksIGpuaSwgal9lZ2xfY29u
dGV4dCwgaXNfc2NyZWVuY2FzdCkpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8d2VicnRjOjpWaWRl
b1RyYWNrU291cmNlUHJveHk+IHByb3h5X3NvdXJjZSA9Ci0gICAgICB3ZWJydGM6OlZpZGVvVHJh
Y2tTb3VyY2VQcm94eTo6Q3JlYXRlKGZhY3RvcnktPnNpZ25hbGluZ190aHJlYWQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeS0+d29ya2VyX3Ro
cmVhZCgpLCBzb3VyY2UpOwotCi0gIHJldHVybiAoamxvbmcpcHJveHlfc291cmNlLnJlbGVhc2Uo
KTsKLX0KLQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVJbml0aWFsaXpl
VmlkZW9DYXB0dXJlcikKLShKTklFbnYqIGpuaSwKLSBqY2xhc3MsCi0gamxvbmcgbmF0aXZlX2Zh
Y3RvcnksCi0gam9iamVjdCBqX3ZpZGVvX2NhcHR1cmVyLAotIGpsb25nIG5hdGl2ZV9zb3VyY2Us
Ci0gam9iamVjdCBqX2ZyYW1lX29ic2VydmVyKSB7Ci0gIExPRyhMU19JTkZPKSA8PCAiUGVlckNv
bm5lY3Rpb25GYWN0b3J5X25hdGl2ZUluaXRpYWxpemVWaWRlb0NhcHR1cmVyIjsKLSAgcnRjOjpz
Y29wZWRfcmVmcHRyPFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeSgKLSAg
ICAgIGZhY3RvcnlGcm9tSmF2YShuYXRpdmVfZmFjdG9yeSkpOwotICBhdXRvIHByb3h5X3NvdXJj
ZSA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6VmlkZW9UcmFja1NvdXJjZVByb3h5
Kj4obmF0aXZlX3NvdXJjZSk7Ci0gIGF1dG8gc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDx3ZWJy
dGM6OkFuZHJvaWRWaWRlb1RyYWNrU291cmNlKj4oCi0gICAgICBwcm94eV9zb3VyY2UtPmludGVy
bmFsKCkpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8U3VyZmFjZVRleHR1cmVIZWxwZXI+IHN1cmZh
Y2VfdGV4dHVyZV9oZWxwZXIgPQotICAgICAgc291cmNlLT5zdXJmYWNlX3RleHR1cmVfaGVscGVy
KCk7Ci0gIGpuaS0+Q2FsbFZvaWRNZXRob2QoCi0gICAgICBqX3ZpZGVvX2NhcHR1cmVyLAotICAg
ICAgR2V0TWV0aG9kSUQoam5pLCBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9WaWRlb0NhcHR1
cmVyIiksICJpbml0aWFsaXplIiwKLSAgICAgICAgICAgICAgICAgICIoTG9yZy93ZWJydGMvU3Vy
ZmFjZVRleHR1cmVIZWxwZXI7TGFuZHJvaWQvY29udGVudC8iCi0gICAgICAgICAgICAgICAgICAi
Q29udGV4dDtMb3JnL3dlYnJ0Yy9WaWRlb0NhcHR1cmVyJENhcHR1cmVyT2JzZXJ2ZXI7KVYiKSwK
LSAgICAgIHN1cmZhY2VfdGV4dHVyZV9oZWxwZXIKLSAgICAgICAgICA/IHN1cmZhY2VfdGV4dHVy
ZV9oZWxwZXItPkdldEphdmFTdXJmYWNlVGV4dHVyZUhlbHBlcigpCi0gICAgICAgICAgOiBudWxs
cHRyLAotICAgICAgal9hcHBsaWNhdGlvbl9jb250ZXh0LCBqX2ZyYW1lX29ic2VydmVyKTsKLSAg
Q0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBWaWRlb0NhcHR1cmVyLmluaXRp
YWxpemUoKSI7Ci19Ci0KLUpPVyhqbG9uZywgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZUNy
ZWF0ZVZpZGVvVHJhY2spKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2ZV9m
YWN0b3J5LCBqc3RyaW5nIGlkLAotICAgIGpsb25nIG5hdGl2ZV9zb3VyY2UpIHsKLSAgcnRjOjpz
Y29wZWRfcmVmcHRyPFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeSgKLSAg
ICAgIGZhY3RvcnlGcm9tSmF2YShuYXRpdmVfZmFjdG9yeSkpOwotICBydGM6OnNjb3BlZF9yZWZw
dHI8VmlkZW9UcmFja0ludGVyZmFjZT4gdHJhY2soZmFjdG9yeS0+Q3JlYXRlVmlkZW9UcmFjaygK
LSAgICAgIEphdmFUb1N0ZFN0cmluZyhqbmksIGlkKSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
VmlkZW9UcmFja1NvdXJjZUludGVyZmFjZSo+KG5hdGl2ZV9zb3VyY2UpKSk7Ci0gIHJldHVybiAo
amxvbmcpdHJhY2sucmVsZWFzZSgpOwotfQotCi1KT1coamxvbmcsIFBlZXJDb25uZWN0aW9uRmFj
dG9yeV9uYXRpdmVDcmVhdGVBdWRpb1NvdXJjZSkoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywg
amxvbmcgbmF0aXZlX2ZhY3RvcnksIGpvYmplY3Qgal9jb25zdHJhaW50cykgewotICBzdGQ6OnVu
aXF1ZV9wdHI8Q29uc3RyYWludHNXcmFwcGVyPiBjb25zdHJhaW50cygKLSAgICAgIG5ldyBDb25z
dHJhaW50c1dyYXBwZXIoam5pLCBqX2NvbnN0cmFpbnRzKSk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0
cjxQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U+IGZhY3RvcnkoCi0gICAgICBmYWN0b3J5
RnJvbUphdmEobmF0aXZlX2ZhY3RvcnkpKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvU291
cmNlSW50ZXJmYWNlPiBzb3VyY2UoCi0gICAgICBmYWN0b3J5LT5DcmVhdGVBdWRpb1NvdXJjZShj
b25zdHJhaW50cy5nZXQoKSkpOwotICByZXR1cm4gKGpsb25nKXNvdXJjZS5yZWxlYXNlKCk7Ci19
Ci0KLUpPVyhqbG9uZywgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZUNyZWF0ZUF1ZGlvVHJh
Y2spKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2ZV9mYWN0b3J5LCBqc3Ry
aW5nIGlkLAotICAgIGpsb25nIG5hdGl2ZV9zb3VyY2UpIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRy
PFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeSgKLSAgICAgIGZhY3RvcnlG
cm9tSmF2YShuYXRpdmVfZmFjdG9yeSkpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9UcmFj
a0ludGVyZmFjZT4gdHJhY2soZmFjdG9yeS0+Q3JlYXRlQXVkaW9UcmFjaygKLSAgICAgIEphdmFU
b1N0ZFN0cmluZyhqbmksIGlkKSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9Tb3VyY2VJ
bnRlcmZhY2UqPihuYXRpdmVfc291cmNlKSkpOwotICByZXR1cm4gKGpsb25nKXRyYWNrLnJlbGVh
c2UoKTsKLX0KLQotSk9XKGpib29sZWFuLCBQZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlU3Rh
cnRBZWNEdW1wKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBuYXRpdmVfZmFjdG9y
eSwgamludCBmaWxlLAotICAgIGppbnQgZmlsZXNpemVfbGltaXRfYnl0ZXMpIHsKLSAgcnRjOjpz
Y29wZWRfcmVmcHRyPFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeSgKLSAg
ICAgIGZhY3RvcnlGcm9tSmF2YShuYXRpdmVfZmFjdG9yeSkpOwotICByZXR1cm4gZmFjdG9yeS0+
U3RhcnRBZWNEdW1wKGZpbGUsIGZpbGVzaXplX2xpbWl0X2J5dGVzKTsKLX0KLQotSk9XKHZvaWQs
IFBlZXJDb25uZWN0aW9uRmFjdG9yeV9uYXRpdmVTdG9wQWVjRHVtcCkoCi0gICAgSk5JRW52KiBq
bmksIGpjbGFzcywgamxvbmcgbmF0aXZlX2ZhY3RvcnkpIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRy
PFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFjZT4gZmFjdG9yeSgKLSAgICAgIGZhY3RvcnlG
cm9tSmF2YShuYXRpdmVfZmFjdG9yeSkpOwotICBmYWN0b3J5LT5TdG9wQWVjRHVtcCgpOwotfQot
Ci1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25hdGl2ZVNldE9wdGlvbnMpKAotICAg
IEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2ZV9mYWN0b3J5LCBqb2JqZWN0IG9wdGlv
bnMpIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVyZmFj
ZT4gZmFjdG9yeSgKLSAgICAgIGZhY3RvcnlGcm9tSmF2YShuYXRpdmVfZmFjdG9yeSkpOwotICBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcmZhY2U6Ok9wdGlvbnMgb3B0aW9uc190b19zZXQgPQot
ICAgICAgUGFyc2VPcHRpb25zRnJvbUphdmEoam5pLCBvcHRpb25zKTsKLSAgZmFjdG9yeS0+U2V0
T3B0aW9ucyhvcHRpb25zX3RvX3NldCk7Ci0KLSAgaWYgKG9wdGlvbnNfdG9fc2V0LmRpc2FibGVf
bmV0d29ya19tb25pdG9yKSB7Ci0gICAgT3duZWRGYWN0b3J5QW5kVGhyZWFkcyogb3duZXIgPQot
ICAgICAgICByZWludGVycHJldF9jYXN0PE93bmVkRmFjdG9yeUFuZFRocmVhZHMqPihuYXRpdmVf
ZmFjdG9yeSk7Ci0gICAgaWYgKG93bmVyLT5uZXR3b3JrX21vbml0b3JfZmFjdG9yeSgpKSB7Ci0g
ICAgICBydGM6Ok5ldHdvcmtNb25pdG9yRmFjdG9yeTo6UmVsZWFzZUZhY3RvcnkoCi0gICAgICAg
ICAgb3duZXItPm5ldHdvcmtfbW9uaXRvcl9mYWN0b3J5KCkpOwotICAgICAgb3duZXItPmNsZWFy
X25ldHdvcmtfbW9uaXRvcl9mYWN0b3J5KCk7Ci0gICAgfQotICB9Ci19Ci0KLUpPVyh2b2lkLCBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnlfbmF0aXZlU2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlvbnMp
KAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsIGpsb25nIG5hdGl2ZV9mYWN0b3J5LCBqb2JqZWN0
IGxvY2FsX2VnbF9jb250ZXh0LAotICAgIGpvYmplY3QgcmVtb3RlX2VnbF9jb250ZXh0KSB7Ci0g
IE93bmVkRmFjdG9yeUFuZFRocmVhZHMqIG93bmVkX2ZhY3RvcnkgPQotICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxPd25lZEZhY3RvcnlBbmRUaHJlYWRzKj4obmF0aXZlX2ZhY3RvcnkpOwotCi0gIGpj
bGFzcyBqX2VnbGJhc2UxNF9jb250ZXh0X2NsYXNzID0KLSAgICAgIEZpbmRDbGFzcyhqbmksICJv
cmcvd2VicnRjL0VnbEJhc2UxNCRDb250ZXh0Iik7Ci0KLSAgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
ckZhY3RvcnkqIGVuY29kZXJfZmFjdG9yeSA9Ci0gICAgICBzdGF0aWNfY2FzdDxNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyRmFjdG9yeSo+Ci0gICAgICAgICAgKG93bmVkX2ZhY3RvcnktPmVuY29kZXJf
ZmFjdG9yeSgpKTsKLSAgaWYgKGVuY29kZXJfZmFjdG9yeSAmJgotICAgICAgam5pLT5Jc0luc3Rh
bmNlT2YobG9jYWxfZWdsX2NvbnRleHQsIGpfZWdsYmFzZTE0X2NvbnRleHRfY2xhc3MpKSB7Ci0g
ICAgTE9HKExTX0lORk8pIDw8ICJTZXQgRUdMIGNvbnRleHQgZm9yIEhXIGVuY29kaW5nLiI7Ci0g
ICAgZW5jb2Rlcl9mYWN0b3J5LT5TZXRFR0xDb250ZXh0KGpuaSwgbG9jYWxfZWdsX2NvbnRleHQp
OwotICB9Ci0KLSAgTWVkaWFDb2RlY1ZpZGVvRGVjb2RlckZhY3RvcnkqIGRlY29kZXJfZmFjdG9y
eSA9Ci0gICAgICBzdGF0aWNfY2FzdDxNZWRpYUNvZGVjVmlkZW9EZWNvZGVyRmFjdG9yeSo+Ci0g
ICAgICAgICAgKG93bmVkX2ZhY3RvcnktPmRlY29kZXJfZmFjdG9yeSgpKTsKLSAgaWYgKGRlY29k
ZXJfZmFjdG9yeSkgewotICAgIExPRyhMU19JTkZPKSA8PCAiU2V0IEVHTCBjb250ZXh0IGZvciBI
VyBkZWNvZGluZy4iOwotICAgIGRlY29kZXJfZmFjdG9yeS0+U2V0RUdMQ29udGV4dChqbmksIHJl
bW90ZV9lZ2xfY29udGV4dCk7Ci0gIH0KLX0KLQotc3RhdGljIFBlZXJDb25uZWN0aW9uSW50ZXJm
YWNlOjpJY2VUcmFuc3BvcnRzVHlwZQotSmF2YUljZVRyYW5zcG9ydHNUeXBlVG9OYXRpdmVUeXBl
KEpOSUVudiogam5pLCBqb2JqZWN0IGpfaWNlX3RyYW5zcG9ydHNfdHlwZSkgewotICBzdGQ6OnN0
cmluZyBlbnVtX25hbWUgPSBHZXRKYXZhRW51bU5hbWUoCi0gICAgICBqbmksICJvcmcvd2VicnRj
L1BlZXJDb25uZWN0aW9uJEljZVRyYW5zcG9ydHNUeXBlIiwKLSAgICAgIGpfaWNlX3RyYW5zcG9y
dHNfdHlwZSk7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQUxMIikKLSAgICByZXR1cm4gUGVlckNv
bm5lY3Rpb25JbnRlcmZhY2U6OmtBbGw7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiUkVMQVkiKQot
ICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a1JlbGF5OwotCi0gIGlmIChlbnVt
X25hbWUgPT0gIk5PSE9TVCIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpr
Tm9Ib3N0OwotCi0gIGlmIChlbnVtX25hbWUgPT0gIk5PTkUiKQotICAgIHJldHVybiBQZWVyQ29u
bmVjdGlvbkludGVyZmFjZTo6a05vbmU7Ci0KLSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5leHBl
Y3RlZCBJY2VUcmFuc3BvcnRzVHlwZSBlbnVtX25hbWUgIiA8PCBlbnVtX25hbWU7Ci0gIHJldHVy
biBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a0FsbDsKLX0KLQotc3RhdGljIFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlOjpCdW5kbGVQb2xpY3kKLUphdmFCdW5kbGVQb2xpY3lUb05hdGl2ZVR5cGUo
Sk5JRW52KiBqbmksIGpvYmplY3Qgal9idW5kbGVfcG9saWN5KSB7Ci0gIHN0ZDo6c3RyaW5nIGVu
dW1fbmFtZSA9IEdldEphdmFFbnVtTmFtZSgKLSAgICAgIGpuaSwgIm9yZy93ZWJydGMvUGVlckNv
bm5lY3Rpb24kQnVuZGxlUG9saWN5IiwKLSAgICAgIGpfYnVuZGxlX3BvbGljeSk7Ci0KLSAgaWYg
KGVudW1fbmFtZSA9PSAiQkFMQU5DRUQiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVy
ZmFjZTo6a0J1bmRsZVBvbGljeUJhbGFuY2VkOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIk1BWEJV
TkRMRSIpCi0gICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprQnVuZGxlUG9saWN5
TWF4QnVuZGxlOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIk1BWENPTVBBVCIpCi0gICAgcmV0dXJu
IFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprQnVuZGxlUG9saWN5TWF4Q29tcGF0OwotCi0gIFJU
Q19DSEVDSyhmYWxzZSkgPDwgIlVuZXhwZWN0ZWQgQnVuZGxlUG9saWN5IGVudW1fbmFtZSAiIDw8
IGVudW1fbmFtZTsKLSAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprQnVuZGxlUG9s
aWN5QmFsYW5jZWQ7Ci19Ci0KLXN0YXRpYyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6UnRjcE11
eFBvbGljeQotSmF2YVJ0Y3BNdXhQb2xpY3lUb05hdGl2ZVR5cGUoSk5JRW52KiBqbmksIGpvYmpl
Y3Qgal9ydGNwX211eF9wb2xpY3kpIHsKLSAgc3RkOjpzdHJpbmcgZW51bV9uYW1lID0gR2V0SmF2
YUVudW1OYW1lKAotICAgICAgam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRSdGNwTXV4
UG9saWN5IiwKLSAgICAgIGpfcnRjcF9tdXhfcG9saWN5KTsKLQotICBpZiAoZW51bV9uYW1lID09
ICJORUdPVElBVEUiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a1J0Y3BN
dXhQb2xpY3lOZWdvdGlhdGU7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiUkVRVUlSRSIpCi0gICAg
cmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprUnRjcE11eFBvbGljeVJlcXVpcmU7Ci0K
LSAgUlRDX0NIRUNLKGZhbHNlKSA8PCAiVW5leHBlY3RlZCBSdGNwTXV4UG9saWN5IGVudW1fbmFt
ZSAiIDw8IGVudW1fbmFtZTsKLSAgcmV0dXJuIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjprUnRj
cE11eFBvbGljeU5lZ290aWF0ZTsKLX0KLQotc3RhdGljIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNl
OjpUY3BDYW5kaWRhdGVQb2xpY3kKLUphdmFUY3BDYW5kaWRhdGVQb2xpY3lUb05hdGl2ZVR5cGUo
Ci0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal90Y3BfY2FuZGlkYXRlX3BvbGljeSkgewotICBz
dGQ6OnN0cmluZyBlbnVtX25hbWUgPSBHZXRKYXZhRW51bU5hbWUoCi0gICAgICBqbmksICJvcmcv
d2VicnRjL1BlZXJDb25uZWN0aW9uJFRjcENhbmRpZGF0ZVBvbGljeSIsCi0gICAgICBqX3RjcF9j
YW5kaWRhdGVfcG9saWN5KTsKLQotICBpZiAoZW51bV9uYW1lID09ICJFTkFCTEVEIikKLSAgICBy
ZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtUY3BDYW5kaWRhdGVQb2xpY3lFbmFibGVk
OwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkRJU0FCTEVEIikKLSAgICByZXR1cm4gUGVlckNvbm5l
Y3Rpb25JbnRlcmZhY2U6OmtUY3BDYW5kaWRhdGVQb2xpY3lEaXNhYmxlZDsKLQotICBSVENfQ0hF
Q0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIFRjcENhbmRpZGF0ZVBvbGljeSBlbnVtX25hbWUgIiA8
PCBlbnVtX25hbWU7Ci0gIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a1RjcENhbmRp
ZGF0ZVBvbGljeUVuYWJsZWQ7Ci19Ci0KLXN0YXRpYyBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6
Q2FuZGlkYXRlTmV0d29ya1BvbGljeQotSmF2YUNhbmRpZGF0ZU5ldHdvcmtQb2xpY3lUb05hdGl2
ZVR5cGUoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqb2JqZWN0IGpfY2FuZGlkYXRlX25ldHdvcmtfcG9saWN5KSB7Ci0gIHN0ZDo6c3RyaW5nIGVu
dW1fbmFtZSA9Ci0gICAgICBHZXRKYXZhRW51bU5hbWUoam5pLCAib3JnL3dlYnJ0Yy9QZWVyQ29u
bmVjdGlvbiRDYW5kaWRhdGVOZXR3b3JrUG9saWN5IiwKLSAgICAgICAgICAgICAgICAgICAgICBq
X2NhbmRpZGF0ZV9uZXR3b3JrX3BvbGljeSk7Ci0KLSAgaWYgKGVudW1fbmFtZSA9PSAiQUxMIikK
LSAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtDYW5kaWRhdGVOZXR3b3JrUG9s
aWN5QWxsOwotCi0gIGlmIChlbnVtX25hbWUgPT0gIkxPV19DT1NUIikKLSAgICByZXR1cm4gUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtDYW5kaWRhdGVOZXR3b3JrUG9saWN5TG93Q29zdDsKLQot
ICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbmV4cGVjdGVkIENhbmRpZGF0ZU5ldHdvcmtQb2xpY3kg
ZW51bV9uYW1lICIKLSAgICAgICAgICAgICAgICAgICA8PCBlbnVtX25hbWU7Ci0gIHJldHVybiBQ
ZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6a0NhbmRpZGF0ZU5ldHdvcmtQb2xpY3lBbGw7Ci19Ci0K
LXN0YXRpYyBydGM6OktleVR5cGUgSmF2YUtleVR5cGVUb05hdGl2ZVR5cGUoSk5JRW52KiBqbmks
IGpvYmplY3Qgal9rZXlfdHlwZSkgewotICBzdGQ6OnN0cmluZyBlbnVtX25hbWUgPSBHZXRKYXZh
RW51bU5hbWUoCi0gICAgICBqbmksICJvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJEtleVR5cGUi
LCBqX2tleV90eXBlKTsKLQotICBpZiAoZW51bV9uYW1lID09ICJSU0EiKQotICAgIHJldHVybiBy
dGM6OktUX1JTQTsKLSAgaWYgKGVudW1fbmFtZSA9PSAiRUNEU0EiKQotICAgIHJldHVybiBydGM6
OktUX0VDRFNBOwotCi0gIFJUQ19DSEVDSyhmYWxzZSkgPDwgIlVuZXhwZWN0ZWQgS2V5VHlwZSBl
bnVtX25hbWUgIiA8PCBlbnVtX25hbWU7Ci0gIHJldHVybiBydGM6OktUX0VDRFNBOwotfQotCi1z
dGF0aWMgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeQot
ICAgIEphdmFDb250aW51YWxHYXRoZXJpbmdQb2xpY3lUb05hdGl2ZVR5cGUoCi0gICAgICAgIEpO
SUVudiogam5pLCBqb2JqZWN0IGpfZ2F0aGVyaW5nX3BvbGljeSkgewotICBzdGQ6OnN0cmluZyBl
bnVtX25hbWUgPSBHZXRKYXZhRW51bU5hbWUoCi0gICAgICBqbmksICJvcmcvd2VicnRjL1BlZXJD
b25uZWN0aW9uJENvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSIsCi0gICAgICBqX2dhdGhlcmluZ19w
b2xpY3kpOwotICBpZiAoZW51bV9uYW1lID09ICJHQVRIRVJfT05DRSIpCi0gICAgcmV0dXJuIFBl
ZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpHQVRIRVJfT05DRTsKLQotICBpZiAoZW51bV9uYW1lID09
ICJHQVRIRVJfQ09OVElOVUFMTFkiKQotICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkludGVyZmFj
ZTo6R0FUSEVSX0NPTlRJTlVBTExZOwotCi0gIFJUQ19DSEVDSyhmYWxzZSkgPDwgIlVuZXhwZWN0
ZWQgQ29udGludWFsR2F0aGVyaW5nUG9saWN5IGVudW0gbmFtZSAiCi0gICAgICAgICAgICAgICAg
ICAgPDwgZW51bV9uYW1lOwotICByZXR1cm4gUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OkdBVEhF
Ul9PTkNFOwotfQotCi1zdGF0aWMgdm9pZCBKYXZhSWNlU2VydmVyc1RvSnNlcEljZVNlcnZlcnMo
Ci0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9pY2Vfc2VydmVycywKLSAgICBQZWVyQ29ubmVj
dGlvbkludGVyZmFjZTo6SWNlU2VydmVycyogaWNlX3NlcnZlcnMpIHsKLSAgZm9yIChqb2JqZWN0
IGpfaWNlX3NlcnZlciA6IEl0ZXJhYmxlKGpuaSwgal9pY2Vfc2VydmVycykpIHsKLSAgICBqY2xh
c3Mgal9pY2Vfc2VydmVyX2NsYXNzID0gR2V0T2JqZWN0Q2xhc3Moam5pLCBqX2ljZV9zZXJ2ZXIp
OwotICAgIGpmaWVsZElEIGpfaWNlX3NlcnZlcl91cmlfaWQgPQotICAgICAgICBHZXRGaWVsZElE
KGpuaSwgal9pY2Vfc2VydmVyX2NsYXNzLCAidXJpIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOwot
ICAgIGpmaWVsZElEIGpfaWNlX3NlcnZlcl91c2VybmFtZV9pZCA9Ci0gICAgICAgIEdldEZpZWxk
SUQoam5pLCBqX2ljZV9zZXJ2ZXJfY2xhc3MsICJ1c2VybmFtZSIsICJMamF2YS9sYW5nL1N0cmlu
ZzsiKTsKLSAgICBqZmllbGRJRCBqX2ljZV9zZXJ2ZXJfcGFzc3dvcmRfaWQgPQotICAgICAgICBH
ZXRGaWVsZElEKGpuaSwgal9pY2Vfc2VydmVyX2NsYXNzLCAicGFzc3dvcmQiLCAiTGphdmEvbGFu
Zy9TdHJpbmc7Iik7Ci0gICAganN0cmluZyB1cmkgPSByZWludGVycHJldF9jYXN0PGpzdHJpbmc+
KAotICAgICAgICBHZXRPYmplY3RGaWVsZChqbmksIGpfaWNlX3NlcnZlciwgal9pY2Vfc2VydmVy
X3VyaV9pZCkpOwotICAgIGpzdHJpbmcgdXNlcm5hbWUgPSByZWludGVycHJldF9jYXN0PGpzdHJp
bmc+KAotICAgICAgICBHZXRPYmplY3RGaWVsZChqbmksIGpfaWNlX3NlcnZlciwgal9pY2Vfc2Vy
dmVyX3VzZXJuYW1lX2lkKSk7Ci0gICAganN0cmluZyBwYXNzd29yZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8anN0cmluZz4oCi0gICAgICAgIEdldE9iamVjdEZpZWxkKGpuaSwgal9pY2Vfc2VydmVyLCBq
X2ljZV9zZXJ2ZXJfcGFzc3dvcmRfaWQpKTsKLSAgICBQZWVyQ29ubmVjdGlvbkludGVyZmFjZTo6
SWNlU2VydmVyIHNlcnZlcjsKLSAgICBzZXJ2ZXIudXJpID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwg
dXJpKTsKLSAgICBzZXJ2ZXIudXNlcm5hbWUgPSBKYXZhVG9TdGRTdHJpbmcoam5pLCB1c2VybmFt
ZSk7Ci0gICAgc2VydmVyLnBhc3N3b3JkID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgcGFzc3dvcmQp
OwotICAgIGljZV9zZXJ2ZXJzLT5wdXNoX2JhY2soc2VydmVyKTsKLSAgfQotfQotCi1zdGF0aWMg
dm9pZCBKYXZhUlRDQ29uZmlndXJhdGlvblRvSnNlcFJUQ0NvbmZpZ3VyYXRpb24oCi0gICAgSk5J
RW52KiBqbmksCi0gICAgam9iamVjdCBqX3J0Y19jb25maWcsCi0gICAgUGVlckNvbm5lY3Rpb25J
bnRlcmZhY2U6OlJUQ0NvbmZpZ3VyYXRpb24qIHJ0Y19jb25maWcpIHsKLSAgamNsYXNzIGpfcnRj
X2NvbmZpZ19jbGFzcyA9IEdldE9iamVjdENsYXNzKGpuaSwgal9ydGNfY29uZmlnKTsKLQotICBq
ZmllbGRJRCBqX2ljZV90cmFuc3BvcnRzX3R5cGVfaWQgPSBHZXRGaWVsZElEKAotICAgICAgam5p
LCBqX3J0Y19jb25maWdfY2xhc3MsICJpY2VUcmFuc3BvcnRzVHlwZSIsCi0gICAgICAiTG9yZy93
ZWJydGMvUGVlckNvbm5lY3Rpb24kSWNlVHJhbnNwb3J0c1R5cGU7Iik7Ci0gIGpvYmplY3Qgal9p
Y2VfdHJhbnNwb3J0c190eXBlID0gR2V0T2JqZWN0RmllbGQoCi0gICAgICBqbmksIGpfcnRjX2Nv
bmZpZywgal9pY2VfdHJhbnNwb3J0c190eXBlX2lkKTsKLQotICBqZmllbGRJRCBqX2J1bmRsZV9w
b2xpY3lfaWQgPSBHZXRGaWVsZElEKAotICAgICAgam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJi
dW5kbGVQb2xpY3kiLAotICAgICAgIkxvcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uJEJ1bmRsZVBv
bGljeTsiKTsKLSAgam9iamVjdCBqX2J1bmRsZV9wb2xpY3kgPSBHZXRPYmplY3RGaWVsZCgKLSAg
ICAgIGpuaSwgal9ydGNfY29uZmlnLCBqX2J1bmRsZV9wb2xpY3lfaWQpOwotCi0gIGpmaWVsZElE
IGpfcnRjcF9tdXhfcG9saWN5X2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgal9ydGNfY29u
ZmlnX2NsYXNzLCAicnRjcE11eFBvbGljeSIsCi0gICAgICAiTG9yZy93ZWJydGMvUGVlckNvbm5l
Y3Rpb24kUnRjcE11eFBvbGljeTsiKTsKLSAgam9iamVjdCBqX3J0Y3BfbXV4X3BvbGljeSA9IEdl
dE9iamVjdEZpZWxkKAotICAgICAgam5pLCBqX3J0Y19jb25maWcsIGpfcnRjcF9tdXhfcG9saWN5
X2lkKTsKLQotICBqZmllbGRJRCBqX3RjcF9jYW5kaWRhdGVfcG9saWN5X2lkID0gR2V0RmllbGRJ
RCgKLSAgICAgIGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAidGNwQ2FuZGlkYXRlUG9saWN5IiwK
LSAgICAgICJMb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvbiRUY3BDYW5kaWRhdGVQb2xpY3k7Iik7
Ci0gIGpvYmplY3Qgal90Y3BfY2FuZGlkYXRlX3BvbGljeSA9IEdldE9iamVjdEZpZWxkKAotICAg
ICAgam5pLCBqX3J0Y19jb25maWcsIGpfdGNwX2NhbmRpZGF0ZV9wb2xpY3lfaWQpOwotCi0gIGpm
aWVsZElEIGpfY2FuZGlkYXRlX25ldHdvcmtfcG9saWN5X2lkID0gR2V0RmllbGRJRCgKLSAgICAg
IGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAiY2FuZGlkYXRlTmV0d29ya1BvbGljeSIsCi0gICAg
ICAiTG9yZy93ZWJydGMvUGVlckNvbm5lY3Rpb24kQ2FuZGlkYXRlTmV0d29ya1BvbGljeTsiKTsK
LSAgam9iamVjdCBqX2NhbmRpZGF0ZV9uZXR3b3JrX3BvbGljeSA9IEdldE9iamVjdEZpZWxkKAot
ICAgICAgam5pLCBqX3J0Y19jb25maWcsIGpfY2FuZGlkYXRlX25ldHdvcmtfcG9saWN5X2lkKTsK
LQotICBqZmllbGRJRCBqX2ljZV9zZXJ2ZXJzX2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwg
al9ydGNfY29uZmlnX2NsYXNzLCAiaWNlU2VydmVycyIsICJMamF2YS91dGlsL0xpc3Q7Iik7Ci0g
IGpvYmplY3Qgal9pY2Vfc2VydmVycyA9IEdldE9iamVjdEZpZWxkKGpuaSwgal9ydGNfY29uZmln
LCBqX2ljZV9zZXJ2ZXJzX2lkKTsKLQotICBqZmllbGRJRCBqX2F1ZGlvX2ppdHRlcl9idWZmZXJf
bWF4X3BhY2tldHNfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfcnRjX2NvbmZpZ19jbGFz
cywgImF1ZGlvSml0dGVyQnVmZmVyTWF4UGFja2V0cyIsICJJIik7Ci0gIGpmaWVsZElEIGpfYXVk
aW9faml0dGVyX2J1ZmZlcl9mYXN0X2FjY2VsZXJhdGVfaWQgPSBHZXRGaWVsZElEKAotICAgICAg
am5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJhdWRpb0ppdHRlckJ1ZmZlckZhc3RBY2NlbGVyYXRl
IiwgIloiKTsKLQotICBqZmllbGRJRCBqX2ljZV9jb25uZWN0aW9uX3JlY2VpdmluZ190aW1lb3V0
X2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJpY2VDb25u
ZWN0aW9uUmVjZWl2aW5nVGltZW91dCIsICJJIik7Ci0KLSAgamZpZWxkSUQgal9pY2VfYmFja3Vw
X2NhbmRpZGF0ZV9wYWlyX3BpbmdfaW50ZXJ2YWxfaWQgPSBHZXRGaWVsZElEKAotICAgICAgam5p
LCBqX3J0Y19jb25maWdfY2xhc3MsICJpY2VCYWNrdXBDYW5kaWRhdGVQYWlyUGluZ0ludGVydmFs
IiwgIkkiKTsKLQotICBqZmllbGRJRCBqX2NvbnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5X2lkID0K
LSAgICAgIEdldEZpZWxkSUQoam5pLCBqX3J0Y19jb25maWdfY2xhc3MsICJjb250aW51YWxHYXRo
ZXJpbmdQb2xpY3kiLAotICAgICAgICAgICAgICAgICAiTG9yZy93ZWJydGMvUGVlckNvbm5lY3Rp
b24kQ29udGludWFsR2F0aGVyaW5nUG9saWN5OyIpOwotICBqb2JqZWN0IGpfY29udGludWFsX2dh
dGhlcmluZ19wb2xpY3kgPQotICAgICAgR2V0T2JqZWN0RmllbGQoam5pLCBqX3J0Y19jb25maWcs
IGpfY29udGludWFsX2dhdGhlcmluZ19wb2xpY3lfaWQpOwotCi0gIGpmaWVsZElEIGpfaWNlX2Nh
bmRpZGF0ZV9wb29sX3NpemVfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIGpfcnRjX2NvbmZp
Z19jbGFzcywgImljZUNhbmRpZGF0ZVBvb2xTaXplIiwgIkkiKTsKLSAgamZpZWxkSUQgal9wcmVz
dW1lX3dyaXRhYmxlX3doZW5fZnVsbHlfcmVsYXllZF9pZCA9IEdldEZpZWxkSUQoCi0gICAgICBq
bmksIGpfcnRjX2NvbmZpZ19jbGFzcywgInByZXN1bWVXcml0YWJsZVdoZW5GdWxseVJlbGF5ZWQi
LCAiWiIpOwotCi0gIGpmaWVsZElEIGpfcHJ1bmVfdHVybl9wb3J0c19pZCA9Ci0gICAgICBHZXRG
aWVsZElEKGpuaSwgal9ydGNfY29uZmlnX2NsYXNzLCAicHJ1bmVUdXJuUG9ydHMiLCAiWiIpOwot
Ci0gIHJ0Y19jb25maWctPnR5cGUgPQotICAgICAgSmF2YUljZVRyYW5zcG9ydHNUeXBlVG9OYXRp
dmVUeXBlKGpuaSwgal9pY2VfdHJhbnNwb3J0c190eXBlKTsKLSAgcnRjX2NvbmZpZy0+YnVuZGxl
X3BvbGljeSA9Ci0gICAgICBKYXZhQnVuZGxlUG9saWN5VG9OYXRpdmVUeXBlKGpuaSwgal9idW5k
bGVfcG9saWN5KTsKLSAgcnRjX2NvbmZpZy0+cnRjcF9tdXhfcG9saWN5ID0KLSAgICAgIEphdmFS
dGNwTXV4UG9saWN5VG9OYXRpdmVUeXBlKGpuaSwgal9ydGNwX211eF9wb2xpY3kpOwotICBydGNf
Y29uZmlnLT50Y3BfY2FuZGlkYXRlX3BvbGljeSA9Ci0gICAgICBKYXZhVGNwQ2FuZGlkYXRlUG9s
aWN5VG9OYXRpdmVUeXBlKGpuaSwgal90Y3BfY2FuZGlkYXRlX3BvbGljeSk7Ci0gIHJ0Y19jb25m
aWctPmNhbmRpZGF0ZV9uZXR3b3JrX3BvbGljeSA9Ci0gICAgICBKYXZhQ2FuZGlkYXRlTmV0d29y
a1BvbGljeVRvTmF0aXZlVHlwZShqbmksIGpfY2FuZGlkYXRlX25ldHdvcmtfcG9saWN5KTsKLSAg
SmF2YUljZVNlcnZlcnNUb0pzZXBJY2VTZXJ2ZXJzKGpuaSwgal9pY2Vfc2VydmVycywgJnJ0Y19j
b25maWctPnNlcnZlcnMpOwotICBydGNfY29uZmlnLT5hdWRpb19qaXR0ZXJfYnVmZmVyX21heF9w
YWNrZXRzID0KLSAgICAgIEdldEludEZpZWxkKGpuaSwgal9ydGNfY29uZmlnLCBqX2F1ZGlvX2pp
dHRlcl9idWZmZXJfbWF4X3BhY2tldHNfaWQpOwotICBydGNfY29uZmlnLT5hdWRpb19qaXR0ZXJf
YnVmZmVyX2Zhc3RfYWNjZWxlcmF0ZSA9IEdldEJvb2xlYW5GaWVsZCgKLSAgICAgIGpuaSwgal9y
dGNfY29uZmlnLCBqX2F1ZGlvX2ppdHRlcl9idWZmZXJfZmFzdF9hY2NlbGVyYXRlX2lkKTsKLSAg
cnRjX2NvbmZpZy0+aWNlX2Nvbm5lY3Rpb25fcmVjZWl2aW5nX3RpbWVvdXQgPQotICAgICAgR2V0
SW50RmllbGQoam5pLCBqX3J0Y19jb25maWcsIGpfaWNlX2Nvbm5lY3Rpb25fcmVjZWl2aW5nX3Rp
bWVvdXRfaWQpOwotICBydGNfY29uZmlnLT5pY2VfYmFja3VwX2NhbmRpZGF0ZV9wYWlyX3Bpbmdf
aW50ZXJ2YWwgPSBHZXRJbnRGaWVsZCgKLSAgICAgIGpuaSwgal9ydGNfY29uZmlnLCBqX2ljZV9i
YWNrdXBfY2FuZGlkYXRlX3BhaXJfcGluZ19pbnRlcnZhbF9pZCk7Ci0gIHJ0Y19jb25maWctPmNv
bnRpbnVhbF9nYXRoZXJpbmdfcG9saWN5ID0KLSAgICAgIEphdmFDb250aW51YWxHYXRoZXJpbmdQ
b2xpY3lUb05hdGl2ZVR5cGUoCi0gICAgICAgICAgam5pLCBqX2NvbnRpbnVhbF9nYXRoZXJpbmdf
cG9saWN5KTsKLSAgcnRjX2NvbmZpZy0+aWNlX2NhbmRpZGF0ZV9wb29sX3NpemUgPQotICAgICAg
R2V0SW50RmllbGQoam5pLCBqX3J0Y19jb25maWcsIGpfaWNlX2NhbmRpZGF0ZV9wb29sX3NpemVf
aWQpOwotICBydGNfY29uZmlnLT5wcnVuZV90dXJuX3BvcnRzID0KLSAgICAgIEdldEJvb2xlYW5G
aWVsZChqbmksIGpfcnRjX2NvbmZpZywgal9wcnVuZV90dXJuX3BvcnRzX2lkKTsKLSAgcnRjX2Nv
bmZpZy0+cHJlc3VtZV93cml0YWJsZV93aGVuX2Z1bGx5X3JlbGF5ZWQgPSBHZXRCb29sZWFuRmll
bGQoCi0gICAgICBqbmksIGpfcnRjX2NvbmZpZywgal9wcmVzdW1lX3dyaXRhYmxlX3doZW5fZnVs
bHlfcmVsYXllZF9pZCk7Ci19Ci0KLUpPVyhqbG9uZywgUGVlckNvbm5lY3Rpb25GYWN0b3J5X25h
dGl2ZUNyZWF0ZVBlZXJDb25uZWN0aW9uKSgKLSAgICBKTklFbnYgKmpuaSwgamNsYXNzLCBqbG9u
ZyBmYWN0b3J5LCBqb2JqZWN0IGpfcnRjX2NvbmZpZywKLSAgICBqb2JqZWN0IGpfY29uc3RyYWlu
dHMsIGpsb25nIG9ic2VydmVyX3ApIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFBlZXJDb25uZWN0
aW9uRmFjdG9yeUludGVyZmFjZT4gZigKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UGVlckNvbm5l
Y3Rpb25GYWN0b3J5SW50ZXJmYWNlKj4oCi0gICAgICAgICAgZmFjdG9yeUZyb21KYXZhKGZhY3Rv
cnkpKSk7Ci0KLSAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlJUQ0NvbmZpZ3VyYXRpb24gcnRj
X2NvbmZpZygKLSAgICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSVENDb25maWd1cmF0aW9u
VHlwZTo6a0FnZ3Jlc3NpdmUpOwotICBKYXZhUlRDQ29uZmlndXJhdGlvblRvSnNlcFJUQ0NvbmZp
Z3VyYXRpb24oam5pLCBqX3J0Y19jb25maWcsICZydGNfY29uZmlnKTsKLQotICBqY2xhc3Mgal9y
dGNfY29uZmlnX2NsYXNzID0gR2V0T2JqZWN0Q2xhc3Moam5pLCBqX3J0Y19jb25maWcpOwotICBq
ZmllbGRJRCBqX2tleV90eXBlX2lkID0gR2V0RmllbGRJRChqbmksIGpfcnRjX2NvbmZpZ19jbGFz
cywgImtleVR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9y
Zy93ZWJydGMvUGVlckNvbm5lY3Rpb24kS2V5VHlwZTsiKTsKLSAgam9iamVjdCBqX2tleV90eXBl
ID0gR2V0T2JqZWN0RmllbGQoam5pLCBqX3J0Y19jb25maWcsIGpfa2V5X3R5cGVfaWQpOwotCi0g
IC8vIEdlbmVyYXRlIG5vbi1kZWZhdWx0IGNlcnRpZmljYXRlLgotICBydGM6OktleVR5cGUga2V5
X3R5cGUgPSBKYXZhS2V5VHlwZVRvTmF0aXZlVHlwZShqbmksIGpfa2V5X3R5cGUpOwotICBpZiAo
a2V5X3R5cGUgIT0gcnRjOjpLVF9ERUZBVUxUKSB7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPHJ0
Yzo6UlRDQ2VydGlmaWNhdGU+IGNlcnRpZmljYXRlID0KLSAgICAgICAgcnRjOjpSVENDZXJ0aWZp
Y2F0ZUdlbmVyYXRvcjo6R2VuZXJhdGVDZXJ0aWZpY2F0ZSgKLSAgICAgICAgICAgIHJ0Yzo6S2V5
UGFyYW1zKGtleV90eXBlKSwgcnRjOjpPcHRpb25hbDx1aW50NjRfdD4oKSk7Ci0gICAgaWYgKCFj
ZXJ0aWZpY2F0ZSkgewotICAgICAgTE9HKExTX0VSUk9SKSA8PCAiRmFpbGVkIHRvIGdlbmVyYXRl
IGNlcnRpZmljYXRlLiBLZXlUeXBlOiAiIDw8IGtleV90eXBlOwotICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotICAgIHJ0Y19jb25maWcuY2VydGlmaWNhdGVzLnB1c2hfYmFjayhjZXJ0aWZpY2F0ZSk7
Ci0gIH0KLQotICBQQ09KYXZhKiBvYnNlcnZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8UENPSmF2YSo+
KG9ic2VydmVyX3ApOwotICBvYnNlcnZlci0+U2V0Q29uc3RyYWludHMobmV3IENvbnN0cmFpbnRz
V3JhcHBlcihqbmksIGpfY29uc3RyYWludHMpKTsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFBlZXJD
b25uZWN0aW9uSW50ZXJmYWNlPiBwYyhmLT5DcmVhdGVQZWVyQ29ubmVjdGlvbigKLSAgICAgIHJ0
Y19jb25maWcsIG9ic2VydmVyLT5jb25zdHJhaW50cygpLCBOVUxMLCBOVUxMLCBvYnNlcnZlcikp
OwotICByZXR1cm4gKGpsb25nKXBjLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIHJ0Yzo6c2NvcGVk
X3JlZnB0cjxQZWVyQ29ubmVjdGlvbkludGVyZmFjZT4gRXh0cmFjdE5hdGl2ZVBDKAotICAgIEpO
SUVudiogam5pLCBqb2JqZWN0IGpfcGMpIHsKLSAgamZpZWxkSUQgbmF0aXZlX3BjX2lkID0gR2V0
RmllbGRJRChqbmksCi0gICAgICBHZXRPYmplY3RDbGFzcyhqbmksIGpfcGMpLCAibmF0aXZlUGVl
ckNvbm5lY3Rpb24iLCAiSiIpOwotICBqbG9uZyBqX3AgPSBHZXRMb25nRmllbGQoam5pLCBqX3Bj
LCBuYXRpdmVfcGNfaWQpOwotICByZXR1cm4gcnRjOjpzY29wZWRfcmVmcHRyPFBlZXJDb25uZWN0
aW9uSW50ZXJmYWNlPigKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UGVlckNvbm5lY3Rpb25JbnRl
cmZhY2UqPihqX3ApKTsKLX0KLQotSk9XKGpvYmplY3QsIFBlZXJDb25uZWN0aW9uX2dldExvY2Fs
RGVzY3JpcHRpb24pKEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMpIHsKLSAgY29uc3QgU2Vzc2lv
bkRlc2NyaXB0aW9uSW50ZXJmYWNlKiBzZHAgPQotICAgICAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwg
al9wYyktPmxvY2FsX2Rlc2NyaXB0aW9uKCk7Ci0gIHJldHVybiBzZHAgPyBKYXZhU2RwRnJvbU5h
dGl2ZVNkcChqbmksIHNkcCkgOiBOVUxMOwotfQotCi1KT1coam9iamVjdCwgUGVlckNvbm5lY3Rp
b25fZ2V0UmVtb3RlRGVzY3JpcHRpb24pKEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMpIHsKLSAg
Y29uc3QgU2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlKiBzZHAgPQotICAgICAgRXh0cmFjdE5h
dGl2ZVBDKGpuaSwgal9wYyktPnJlbW90ZV9kZXNjcmlwdGlvbigpOwotICByZXR1cm4gc2RwID8g
SmF2YVNkcEZyb21OYXRpdmVTZHAoam5pLCBzZHApIDogTlVMTDsKLX0KLQotSk9XKGpvYmplY3Qs
IFBlZXJDb25uZWN0aW9uX2NyZWF0ZURhdGFDaGFubmVsKSgKLSAgICBKTklFbnYqIGpuaSwgam9i
amVjdCBqX3BjLCBqc3RyaW5nIGpfbGFiZWwsIGpvYmplY3Qgal9pbml0KSB7Ci0gIERhdGFDaGFu
bmVsSW5pdCBpbml0ID0gSmF2YURhdGFDaGFubmVsSW5pdFRvTmF0aXZlKGpuaSwgal9pbml0KTsK
LSAgcnRjOjpzY29wZWRfcmVmcHRyPERhdGFDaGFubmVsSW50ZXJmYWNlPiBjaGFubmVsKAotICAg
ICAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkNyZWF0ZURhdGFDaGFubmVsKAotICAgICAg
ICAgIEphdmFUb1N0ZFN0cmluZyhqbmksIGpfbGFiZWwpLCAmaW5pdCkpOwotICAvLyBNdXN0bid0
IHBhc3MgY2hhbm5lbC5nZXQoKSBkaXJlY3RseSB0aHJvdWdoIE5ld09iamVjdCB0byBhdm9pZCBy
ZWFkaW5nIGl0cwotICAvLyB2YXJhcmcgcGFyYW1ldGVyIGFzIDY0LWJpdCBhbmQgcmVhZGluZyBt
ZW1vcnkgdGhhdCBkb2Vzbid0IGJlbG9uZyB0byB0aGUKLSAgLy8gMzItYml0IHBhcmFtZXRlci4K
LSAgamxvbmcgbmF0aXZlQ2hhbm5lbFB0ciA9IGpsb25nRnJvbVBvaW50ZXIoY2hhbm5lbC5nZXQo
KSk7Ci0gIGlmICghbmF0aXZlQ2hhbm5lbFB0cikgewotICAgIExPRyhMU19FUlJPUikgPDwgIkZh
aWxlZCB0byBjcmVhdGUgRGF0YUNoYW5uZWwiOwotICAgIHJldHVybiBudWxscHRyOwotICB9Ci0g
IGpjbGFzcyBqX2RhdGFfY2hhbm5lbF9jbGFzcyA9IEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRj
L0RhdGFDaGFubmVsIik7Ci0gIGptZXRob2RJRCBqX2RhdGFfY2hhbm5lbF9jdG9yID0gR2V0TWV0
aG9kSUQoCi0gICAgICBqbmksIGpfZGF0YV9jaGFubmVsX2NsYXNzLCAiPGluaXQ+IiwgIihKKVYi
KTsKLSAgam9iamVjdCBqX2NoYW5uZWwgPSBqbmktPk5ld09iamVjdCgKLSAgICAgIGpfZGF0YV9j
aGFubmVsX2NsYXNzLCBqX2RhdGFfY2hhbm5lbF9jdG9yLCBuYXRpdmVDaGFubmVsUHRyKTsKLSAg
Q0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotICAvLyBD
aGFubmVsIGlzIG5vdyBvd25lZCBieSBKYXZhIG9iamVjdCwgYW5kIHdpbGwgYmUgZnJlZWQgZnJv
bSB0aGVyZS4KLSAgaW50IGJ1bXBlZF9jb3VudCA9IGNoYW5uZWwtPkFkZFJlZigpOwotICBSVENf
Q0hFQ0soYnVtcGVkX2NvdW50ID09IDIpIDw8ICJVbmV4cGVjdGVkIHJlZmNvdW50IjsKLSAgcmV0
dXJuIGpfY2hhbm5lbDsKLX0KLQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uX2NyZWF0ZU9mZmVy
KSgKLSAgICBKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjLCBqb2JqZWN0IGpfb2JzZXJ2ZXIsIGpv
YmplY3Qgal9jb25zdHJhaW50cykgewotICBDb25zdHJhaW50c1dyYXBwZXIqIGNvbnN0cmFpbnRz
ID0KLSAgICAgIG5ldyBDb25zdHJhaW50c1dyYXBwZXIoam5pLCBqX2NvbnN0cmFpbnRzKTsKLSAg
cnRjOjpzY29wZWRfcmVmcHRyPENyZWF0ZVNkcE9ic2VydmVyV3JhcHBlcj4gb2JzZXJ2ZXIoCi0g
ICAgICBuZXcgcnRjOjpSZWZDb3VudGVkT2JqZWN0PENyZWF0ZVNkcE9ic2VydmVyV3JhcHBlcj4o
Ci0gICAgICAgICAgam5pLCBqX29ic2VydmVyLCBjb25zdHJhaW50cykpOwotICBFeHRyYWN0TmF0
aXZlUEMoam5pLCBqX3BjKS0+Q3JlYXRlT2ZmZXIob2JzZXJ2ZXIsIGNvbnN0cmFpbnRzKTsKLX0K
LQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uX2NyZWF0ZUFuc3dlcikoCi0gICAgSk5JRW52KiBq
bmksIGpvYmplY3Qgal9wYywgam9iamVjdCBqX29ic2VydmVyLCBqb2JqZWN0IGpfY29uc3RyYWlu
dHMpIHsKLSAgQ29uc3RyYWludHNXcmFwcGVyKiBjb25zdHJhaW50cyA9Ci0gICAgICBuZXcgQ29u
c3RyYWludHNXcmFwcGVyKGpuaSwgal9jb25zdHJhaW50cyk7Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0
cjxDcmVhdGVTZHBPYnNlcnZlcldyYXBwZXI+IG9ic2VydmVyKAotICAgICAgbmV3IHJ0Yzo6UmVm
Q291bnRlZE9iamVjdDxDcmVhdGVTZHBPYnNlcnZlcldyYXBwZXI+KAotICAgICAgICAgIGpuaSwg
al9vYnNlcnZlciwgY29uc3RyYWludHMpKTsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYykt
PkNyZWF0ZUFuc3dlcihvYnNlcnZlciwgY29uc3RyYWludHMpOwotfQotCi0vLyBIZWxwZXIgdG8g
Y3JlYXRlIGEgU2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlIGZyb20gYSBTZXNzaW9uRGVzY3Jp
cHRpb24uCi1zdGF0aWMgU2Vzc2lvbkRlc2NyaXB0aW9uSW50ZXJmYWNlKiBKYXZhU2RwVG9OYXRp
dmVTZHAoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9zZHApIHsKLSAgamZpZWxkSUQgal90
eXBlX2lkID0gR2V0RmllbGRJRCgKLSAgICAgIGpuaSwgR2V0T2JqZWN0Q2xhc3Moam5pLCBqX3Nk
cCksICJ0eXBlIiwKLSAgICAgICJMb3JnL3dlYnJ0Yy9TZXNzaW9uRGVzY3JpcHRpb24kVHlwZTsi
KTsKLSAgam9iamVjdCBqX3R5cGUgPSBHZXRPYmplY3RGaWVsZChqbmksIGpfc2RwLCBqX3R5cGVf
aWQpOwotICBqbWV0aG9kSUQgal9jYW5vbmljYWxfZm9ybV9pZCA9IEdldE1ldGhvZElEKAotICAg
ICAgam5pLCBHZXRPYmplY3RDbGFzcyhqbmksIGpfdHlwZSksICJjYW5vbmljYWxGb3JtIiwKLSAg
ICAgICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBqc3RyaW5nIGpfdHlwZV9zdHJpbmcgPSAo
anN0cmluZylqbmktPkNhbGxPYmplY3RNZXRob2QoCi0gICAgICBqX3R5cGUsIGpfY2Fub25pY2Fs
X2Zvcm1faWQpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxP
YmplY3RNZXRob2QiOwotICBzdGQ6OnN0cmluZyBzdGRfdHlwZSA9IEphdmFUb1N0ZFN0cmluZyhq
bmksIGpfdHlwZV9zdHJpbmcpOwotCi0gIGpmaWVsZElEIGpfZGVzY3JpcHRpb25faWQgPSBHZXRG
aWVsZElEKAotICAgICAgam5pLCBHZXRPYmplY3RDbGFzcyhqbmksIGpfc2RwKSwgImRlc2NyaXB0
aW9uIiwgIkxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBqc3RyaW5nIGpfZGVzY3JpcHRpb24gPSAo
anN0cmluZylHZXRPYmplY3RGaWVsZChqbmksIGpfc2RwLCBqX2Rlc2NyaXB0aW9uX2lkKTsKLSAg
c3RkOjpzdHJpbmcgc3RkX2Rlc2NyaXB0aW9uID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwgal9kZXNj
cmlwdGlvbik7Ci0KLSAgcmV0dXJuIHdlYnJ0Yzo6Q3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uKAot
ICAgICAgc3RkX3R5cGUsIHN0ZF9kZXNjcmlwdGlvbiwgTlVMTCk7Ci19Ci0KLUpPVyh2b2lkLCBQ
ZWVyQ29ubmVjdGlvbl9zZXRMb2NhbERlc2NyaXB0aW9uKSgKLSAgICBKTklFbnYqIGpuaSwgam9i
amVjdCBqX3BjLAotICAgIGpvYmplY3Qgal9vYnNlcnZlciwgam9iamVjdCBqX3NkcCkgewotICBy
dGM6OnNjb3BlZF9yZWZwdHI8U2V0U2RwT2JzZXJ2ZXJXcmFwcGVyPiBvYnNlcnZlcigKLSAgICAg
IG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8U2V0U2RwT2JzZXJ2ZXJXcmFwcGVyPigKLSAgICAg
ICAgICBqbmksIGpfb2JzZXJ2ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Q29uc3RyYWludHNXcmFwcGVy
Kj4oTlVMTCkpKTsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlNldExvY2FsRGVzY3Jp
cHRpb24oCi0gICAgICBvYnNlcnZlciwgSmF2YVNkcFRvTmF0aXZlU2RwKGpuaSwgal9zZHApKTsK
LX0KLQotSk9XKHZvaWQsIFBlZXJDb25uZWN0aW9uX3NldFJlbW90ZURlc2NyaXB0aW9uKSgKLSAg
ICBKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjLAotICAgIGpvYmplY3Qgal9vYnNlcnZlciwgam9i
amVjdCBqX3NkcCkgewotICBydGM6OnNjb3BlZF9yZWZwdHI8U2V0U2RwT2JzZXJ2ZXJXcmFwcGVy
PiBvYnNlcnZlcigKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8U2V0U2RwT2JzZXJ2
ZXJXcmFwcGVyPigKLSAgICAgICAgICBqbmksIGpfb2JzZXJ2ZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8
Q29uc3RyYWludHNXcmFwcGVyKj4oTlVMTCkpKTsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9w
YyktPlNldFJlbW90ZURlc2NyaXB0aW9uKAotICAgICAgb2JzZXJ2ZXIsIEphdmFTZHBUb05hdGl2
ZVNkcChqbmksIGpfc2RwKSk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUGVlckNvbm5lY3Rpb25fc2V0
Q29uZmlndXJhdGlvbikoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywgam9iamVjdCBq
X3J0Y19jb25maWcpIHsKLSAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlJUQ0NvbmZpZ3VyYXRp
b24gcnRjX2NvbmZpZygKLSAgICAgIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpSVENDb25maWd1
cmF0aW9uVHlwZTo6a0FnZ3Jlc3NpdmUpOwotICBKYXZhUlRDQ29uZmlndXJhdGlvblRvSnNlcFJU
Q0NvbmZpZ3VyYXRpb24oam5pLCBqX3J0Y19jb25maWcsICZydGNfY29uZmlnKTsKLSAgcmV0dXJu
IEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5TZXRDb25maWd1cmF0aW9uKHJ0Y19jb25maWcp
OwotfQotCi1KT1coamJvb2xlYW4sIFBlZXJDb25uZWN0aW9uX25hdGl2ZUFkZEljZUNhbmRpZGF0
ZSkoCi0gICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywganN0cmluZyBqX3NkcF9taWQsCi0g
ICAgamludCBqX3NkcF9tbGluZV9pbmRleCwganN0cmluZyBqX2NhbmRpZGF0ZV9zZHApIHsKLSAg
c3RkOjpzdHJpbmcgc2RwX21pZCA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfc2RwX21pZCk7Ci0g
IHN0ZDo6c3RyaW5nIHNkcCA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfY2FuZGlkYXRlX3NkcCk7
Ci0gIHN0ZDo6dW5pcXVlX3B0cjxJY2VDYW5kaWRhdGVJbnRlcmZhY2U+IGNhbmRpZGF0ZSgKLSAg
ICAgIHdlYnJ0Yzo6Q3JlYXRlSWNlQ2FuZGlkYXRlKHNkcF9taWQsIGpfc2RwX21saW5lX2luZGV4
LCBzZHAsIE5VTEwpKTsKLSAgcmV0dXJuIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5BZGRJ
Y2VDYW5kaWRhdGUoY2FuZGlkYXRlLmdldCgpKTsKLX0KLQotc3RhdGljIGNyaWNrZXQ6OkNhbmRp
ZGF0ZSBHZXRDYW5kaWRhdGVGcm9tSmF2YShKTklFbnYqIGpuaSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBqX2NhbmRpZGF0ZSkgewotICBq
Y2xhc3Mgal9jYW5kaWRhdGVfY2xhc3MgPSBHZXRPYmplY3RDbGFzcyhqbmksIGpfY2FuZGlkYXRl
KTsKLSAgamZpZWxkSUQgal9zZHBfbWlkX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX2Nh
bmRpZGF0ZV9jbGFzcywgInNkcE1pZCIsICJMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgc3RkOjpz
dHJpbmcgc2RwX21pZCA9Ci0gICAgICBKYXZhVG9TdGRTdHJpbmcoam5pLCBHZXRTdHJpbmdGaWVs
ZChqbmksIGpfY2FuZGlkYXRlLCBqX3NkcF9taWRfaWQpKTsKLSAgamZpZWxkSUQgal9zZHBfaWQg
PQotICAgICAgR2V0RmllbGRJRChqbmksIGpfY2FuZGlkYXRlX2NsYXNzLCAic2RwIiwgIkxqYXZh
L2xhbmcvU3RyaW5nOyIpOwotICBzdGQ6OnN0cmluZyBzZHAgPQotICAgICAgSmF2YVRvU3RkU3Ry
aW5nKGpuaSwgR2V0U3RyaW5nRmllbGQoam5pLCBqX2NhbmRpZGF0ZSwgal9zZHBfaWQpKTsKLSAg
Y3JpY2tldDo6Q2FuZGlkYXRlIGNhbmRpZGF0ZTsKLSAgaWYgKCF3ZWJydGM6OlNkcERlc2VyaWFs
aXplQ2FuZGlkYXRlKHNkcF9taWQsIHNkcCwgJmNhbmRpZGF0ZSwgTlVMTCkpIHsKLSAgICBMT0co
TFNfRVJST1IpIDw8ICJTZHBEZXNjcmlhbGl6ZUNhbmRpZGF0ZSBmYWlsZWQgd2l0aCBzZHAgIiA8
PCBzZHA7Ci0gIH0KLSAgcmV0dXJuIGNhbmRpZGF0ZTsKLX0KLQotSk9XKGpib29sZWFuLCBQZWVy
Q29ubmVjdGlvbl9uYXRpdmVSZW1vdmVJY2VDYW5kaWRhdGVzKQotKEpOSUVudiogam5pLCBqb2Jq
ZWN0IGpfcGMsIGpvYmplY3RBcnJheSBqX2NhbmRpZGF0ZXMpIHsKLSAgc3RkOjp2ZWN0b3I8Y3Jp
Y2tldDo6Q2FuZGlkYXRlPiBjYW5kaWRhdGVzOwotICBzaXplX3QgbnVtX2NhbmRpZGF0ZXMgPSBq
bmktPkdldEFycmF5TGVuZ3RoKGpfY2FuZGlkYXRlcyk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtX2NhbmRpZGF0ZXM7ICsraSkgewotICAgIGpvYmplY3Qgal9jYW5kaWRhdGUgPSBqbmkt
PkdldE9iamVjdEFycmF5RWxlbWVudChqX2NhbmRpZGF0ZXMsIGkpOwotICAgIGNhbmRpZGF0ZXMu
cHVzaF9iYWNrKEdldENhbmRpZGF0ZUZyb21KYXZhKGpuaSwgal9jYW5kaWRhdGUpKTsKLSAgfQot
ICByZXR1cm4gRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlJlbW92ZUljZUNhbmRpZGF0ZXMo
Y2FuZGlkYXRlcyk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUGVlckNvbm5lY3Rpb25fbmF0aXZlQWRk
TG9jYWxTdHJlYW0pKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMsIGpsb25nIG5hdGl2
ZV9zdHJlYW0pIHsKLSAgcmV0dXJuIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5BZGRTdHJl
YW0oCi0gICAgICByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtSW50ZXJmYWNlKj4obmF0aXZl
X3N0cmVhbSkpOwotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25fbmF0aXZlUmVtb3ZlTG9j
YWxTdHJlYW0pKAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMsIGpsb25nIG5hdGl2ZV9z
dHJlYW0pIHsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlJlbW92ZVN0cmVhbSgKLSAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1JbnRlcmZhY2UqPihuYXRpdmVfc3RyZWFt
KSk7Ci19Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVDcmVhdGVTZW5kZXIp
KAotICAgIEpOSUVudiogam5pLCBqb2JqZWN0IGpfcGMsIGpzdHJpbmcgal9raW5kLCBqc3RyaW5n
IGpfc3RyZWFtX2lkKSB7Ci0gIGpjbGFzcyBqX3J0cF9zZW5kZXJfY2xhc3MgPSBGaW5kQ2xhc3Mo
am5pLCAib3JnL3dlYnJ0Yy9SdHBTZW5kZXIiKTsKLSAgam1ldGhvZElEIGpfcnRwX3NlbmRlcl9j
dG9yID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9ydHBfc2VuZGVyX2NsYXNzLCAiPGluaXQ+
IiwgIihKKVYiKTsKLQotICBzdGQ6OnN0cmluZyBraW5kID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwg
al9raW5kKTsKLSAgc3RkOjpzdHJpbmcgc3RyZWFtX2lkID0gSmF2YVRvU3RkU3RyaW5nKGpuaSwg
al9zdHJlYW1faWQpOwotICBydGM6OnNjb3BlZF9yZWZwdHI8UnRwU2VuZGVySW50ZXJmYWNlPiBz
ZW5kZXIgPQotICAgICAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkNyZWF0ZVNlbmRlcihr
aW5kLCBzdHJlYW1faWQpOwotICBpZiAoIXNlbmRlci5nZXQoKSkgewotICAgIHJldHVybiBudWxs
cHRyOwotICB9Ci0gIGpsb25nIG5hdGl2ZVNlbmRlclB0ciA9IGpsb25nRnJvbVBvaW50ZXIoc2Vu
ZGVyLmdldCgpKTsKLSAgam9iamVjdCBqX3NlbmRlciA9Ci0gICAgICBqbmktPk5ld09iamVjdChq
X3J0cF9zZW5kZXJfY2xhc3MsIGpfcnRwX3NlbmRlcl9jdG9yLCBuYXRpdmVTZW5kZXJQdHIpOwot
ICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gIC8v
IFNlbmRlciBpcyBub3cgb3duZWQgYnkgdGhlIEphdmEgb2JqZWN0LCBhbmQgd2lsbCBiZSBmcmVl
ZCBmcm9tCi0gIC8vIFJ0cFNlbmRlci5kaXNwb3NlKCksIGNhbGxlZCBieSBQZWVyQ29ubmVjdGlv
bi5kaXNwb3NlKCkgb3IgZ2V0U2VuZGVycygpLgotICBzZW5kZXItPkFkZFJlZigpOwotICByZXR1
cm4gal9zZW5kZXI7Ci19Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVHZXRT
ZW5kZXJzKShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjKSB7Ci0gIGpjbGFzcyBqX2FycmF5X2xp
c3RfY2xhc3MgPSBGaW5kQ2xhc3Moam5pLCAiamF2YS91dGlsL0FycmF5TGlzdCIpOwotICBqbWV0
aG9kSUQgal9hcnJheV9saXN0X2N0b3IgPQotICAgICAgR2V0TWV0aG9kSUQoam5pLCBqX2FycmF5
X2xpc3RfY2xhc3MsICI8aW5pdD4iLCAiKClWIik7Ci0gIGptZXRob2RJRCBqX2FycmF5X2xpc3Rf
YWRkID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9hcnJheV9saXN0X2NsYXNzLCAiYWRkIiwg
IihMamF2YS9sYW5nL09iamVjdDspWiIpOwotICBqb2JqZWN0IGpfc2VuZGVycyA9IGpuaS0+TmV3
T2JqZWN0KGpfYXJyYXlfbGlzdF9jbGFzcywgal9hcnJheV9saXN0X2N0b3IpOwotICBDSEVDS19F
WENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0KLSAgamNsYXNzIGpf
cnRwX3NlbmRlcl9jbGFzcyA9IEZpbmRDbGFzcyhqbmksICJvcmcvd2VicnRjL1J0cFNlbmRlciIp
OwotICBqbWV0aG9kSUQgal9ydHBfc2VuZGVyX2N0b3IgPQotICAgICAgR2V0TWV0aG9kSUQoam5p
LCBqX3J0cF9zZW5kZXJfY2xhc3MsICI8aW5pdD4iLCAiKEopViIpOwotCi0gIGF1dG8gc2VuZGVy
cyA9IEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5HZXRTZW5kZXJzKCk7Ci0gIGZvciAoY29u
c3QgYXV0byYgc2VuZGVyIDogc2VuZGVycykgewotICAgIGpsb25nIG5hdGl2ZVNlbmRlclB0ciA9
IGpsb25nRnJvbVBvaW50ZXIoc2VuZGVyLmdldCgpKTsKLSAgICBqb2JqZWN0IGpfc2VuZGVyID0K
LSAgICAgICAgam5pLT5OZXdPYmplY3Qoal9ydHBfc2VuZGVyX2NsYXNzLCBqX3J0cF9zZW5kZXJf
Y3RvciwgbmF0aXZlU2VuZGVyUHRyKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJy
b3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgLy8gU2VuZGVyIGlzIG5vdyBvd25lZCBieSB0aGUg
SmF2YSBvYmplY3QsIGFuZCB3aWxsIGJlIGZyZWVkIGZyb20KLSAgICAvLyBSdHBTZW5kZXIuZGlz
cG9zZSgpLCBjYWxsZWQgYnkgUGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpIG9yIGdldFNlbmRlcnMo
KS4KLSAgICBzZW5kZXItPkFkZFJlZigpOwotICAgIGpuaS0+Q2FsbEJvb2xlYW5NZXRob2Qoal9z
ZW5kZXJzLCBqX2FycmF5X2xpc3RfYWRkLCBqX3NlbmRlcik7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsQm9vbGVhbk1ldGhvZCI7Ci0gIH0KLSAgcmV0dXJu
IGpfc2VuZGVyczsKLX0KLQotSk9XKGpvYmplY3QsIFBlZXJDb25uZWN0aW9uX25hdGl2ZUdldFJl
Y2VpdmVycykoSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYykgewotICBqY2xhc3Mgal9hcnJheV9s
aXN0X2NsYXNzID0gRmluZENsYXNzKGpuaSwgImphdmEvdXRpbC9BcnJheUxpc3QiKTsKLSAgam1l
dGhvZElEIGpfYXJyYXlfbGlzdF9jdG9yID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgal9hcnJh
eV9saXN0X2NsYXNzLCAiPGluaXQ+IiwgIigpViIpOwotICBqbWV0aG9kSUQgal9hcnJheV9saXN0
X2FkZCA9Ci0gICAgICBHZXRNZXRob2RJRChqbmksIGpfYXJyYXlfbGlzdF9jbGFzcywgImFkZCIs
ICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiKTsKLSAgam9iamVjdCBqX3JlY2VpdmVycyA9IGpuaS0+
TmV3T2JqZWN0KGpfYXJyYXlfbGlzdF9jbGFzcywgal9hcnJheV9saXN0X2N0b3IpOwotICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0KLSAgamNsYXNz
IGpfcnRwX3JlY2VpdmVyX2NsYXNzID0gRmluZENsYXNzKGpuaSwgIm9yZy93ZWJydGMvUnRwUmVj
ZWl2ZXIiKTsKLSAgam1ldGhvZElEIGpfcnRwX3JlY2VpdmVyX2N0b3IgPQotICAgICAgR2V0TWV0
aG9kSUQoam5pLCBqX3J0cF9yZWNlaXZlcl9jbGFzcywgIjxpbml0PiIsICIoSilWIik7Ci0KLSAg
YXV0byByZWNlaXZlcnMgPSBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+R2V0UmVjZWl2ZXJz
KCk7Ci0gIGZvciAoY29uc3QgYXV0byYgcmVjZWl2ZXIgOiByZWNlaXZlcnMpIHsKLSAgICBqbG9u
ZyBuYXRpdmVSZWNlaXZlclB0ciA9IGpsb25nRnJvbVBvaW50ZXIocmVjZWl2ZXIuZ2V0KCkpOwot
ICAgIGpvYmplY3Qgal9yZWNlaXZlciA9IGpuaS0+TmV3T2JqZWN0KGpfcnRwX3JlY2VpdmVyX2Ns
YXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpfcnRwX3JlY2Vp
dmVyX2N0b3IsIG5hdGl2ZVJlY2VpdmVyUHRyKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8
PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgLy8gUmVjZWl2ZXIgaXMgbm93IG93bmVk
IGJ5IEphdmEgb2JqZWN0LCBhbmQgd2lsbCBiZSBmcmVlZCBmcm9tIHRoZXJlLgotICAgIHJlY2Vp
dmVyLT5BZGRSZWYoKTsKLSAgICBqbmktPkNhbGxCb29sZWFuTWV0aG9kKGpfcmVjZWl2ZXJzLCBq
X2FycmF5X2xpc3RfYWRkLCBqX3JlY2VpdmVyKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8
PCAiZXJyb3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAgfQotICByZXR1cm4gal9yZWNl
aXZlcnM7Ci19Ci0KLUpPVyhib29sLCBQZWVyQ29ubmVjdGlvbl9uYXRpdmVHZXRTdGF0cykoCi0g
ICAgSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYywgam9iamVjdCBqX29ic2VydmVyLCBqbG9uZyBu
YXRpdmVfdHJhY2spIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPFN0YXRzT2JzZXJ2ZXJXcmFwcGVy
PiBvYnNlcnZlcigKLSAgICAgIG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8U3RhdHNPYnNlcnZl
cldyYXBwZXI+KGpuaSwgal9vYnNlcnZlcikpOwotICByZXR1cm4gRXh0cmFjdE5hdGl2ZVBDKGpu
aSwgal9wYyktPkdldFN0YXRzKAotICAgICAgb2JzZXJ2ZXIsCi0gICAgICByZWludGVycHJldF9j
YXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRlcmZhY2UqPihuYXRpdmVfdHJhY2spLAotICAgICAgUGVl
ckNvbm5lY3Rpb25JbnRlcmZhY2U6OmtTdGF0c091dHB1dExldmVsU3RhbmRhcmQpOwotfQotCi1K
T1coYm9vbCwgUGVlckNvbm5lY3Rpb25fbmF0aXZlU3RhcnRSdGNFdmVudExvZykoCi0gICAgSk5J
RW52KiBqbmksIGpvYmplY3Qgal9wYywgaW50IGZpbGVfZGVzY3JpcHRvciwgaW50IG1heF9zaXpl
X2J5dGVzKSB7Ci0gIHJldHVybiBFeHRyYWN0TmF0aXZlUEMoam5pLCBqX3BjKS0+U3RhcnRSdGNF
dmVudExvZyhmaWxlX2Rlc2NyaXB0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXhfc2l6ZV9ieXRlcyk7Ci19Ci0KLUpPVyh2b2lkLCBQ
ZWVyQ29ubmVjdGlvbl9uYXRpdmVTdG9wUnRjRXZlbnRMb2cpKEpOSUVudiogam5pLCBqb2JqZWN0
IGpfcGMpIHsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPlN0b3BSdGNFdmVudExvZygp
OwotfQotCi1KT1coam9iamVjdCwgUGVlckNvbm5lY3Rpb25fc2lnbmFsaW5nU3RhdGUpKEpOSUVu
diogam5pLCBqb2JqZWN0IGpfcGMpIHsKLSAgUGVlckNvbm5lY3Rpb25JbnRlcmZhY2U6OlNpZ25h
bGluZ1N0YXRlIHN0YXRlID0KLSAgICAgIEV4dHJhY3ROYXRpdmVQQyhqbmksIGpfcGMpLT5zaWdu
YWxpbmdfc3RhdGUoKTsKLSAgcmV0dXJuIEphdmFFbnVtRnJvbUluZGV4KGpuaSwgIlBlZXJDb25u
ZWN0aW9uJFNpZ25hbGluZ1N0YXRlIiwgc3RhdGUpOwotfQotCi1KT1coam9iamVjdCwgUGVlckNv
bm5lY3Rpb25faWNlQ29ubmVjdGlvblN0YXRlKShKTklFbnYqIGpuaSwgam9iamVjdCBqX3BjKSB7
Ci0gIFBlZXJDb25uZWN0aW9uSW50ZXJmYWNlOjpJY2VDb25uZWN0aW9uU3RhdGUgc3RhdGUgPQot
ICAgICAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPmljZV9jb25uZWN0aW9uX3N0YXRlKCk7
Ci0gIHJldHVybiBKYXZhRW51bUZyb21JbmRleChqbmksICJQZWVyQ29ubmVjdGlvbiRJY2VDb25u
ZWN0aW9uU3RhdGUiLCBzdGF0ZSk7Ci19Ci0KLUpPVyhqb2JqZWN0LCBQZWVyQ29ubmVjdGlvbl9p
Y2VHYXRoZXJpbmdTdGF0ZSkoSk5JRW52KiBqbmksIGpvYmplY3Qgal9wYykgewotICBQZWVyQ29u
bmVjdGlvbkludGVyZmFjZTo6SWNlR2F0aGVyaW5nU3RhdGUgc3RhdGUgPQotICAgICAgRXh0cmFj
dE5hdGl2ZVBDKGpuaSwgal9wYyktPmljZV9nYXRoZXJpbmdfc3RhdGUoKTsKLSAgcmV0dXJuIEph
dmFFbnVtRnJvbUluZGV4KGpuaSwgIlBlZXJDb25uZWN0aW9uJEljZUdhdGhlcmluZ1N0YXRlIiwg
c3RhdGUpOwotfQotCi1KT1codm9pZCwgUGVlckNvbm5lY3Rpb25fY2xvc2UpKEpOSUVudiogam5p
LCBqb2JqZWN0IGpfcGMpIHsKLSAgRXh0cmFjdE5hdGl2ZVBDKGpuaSwgal9wYyktPkNsb3NlKCk7
Ci0gIHJldHVybjsKLX0KLQotSk9XKGpvYmplY3QsIE1lZGlhU291cmNlX25hdGl2ZVN0YXRlKShK
TklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgcnRjOjpzY29wZWRfcmVmcHRyPE1l
ZGlhU291cmNlSW50ZXJmYWNlPiBwKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxNZWRpYVNvdXJj
ZUludGVyZmFjZSo+KGpfcCkpOwotICByZXR1cm4gSmF2YUVudW1Gcm9tSW5kZXgoam5pLCAiTWVk
aWFTb3VyY2UkU3RhdGUiLCBwLT5zdGF0ZSgpKTsKLX0KLQotSk9XKGpsb25nLCBWaWRlb1JlbmRl
cmVyX25hdGl2ZVdyYXBWaWRlb1JlbmRlcmVyKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNzLCBq
b2JqZWN0IGpfY2FsbGJhY2tzKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxKYXZhVmlkZW9SZW5kZXJl
cldyYXBwZXI+IHJlbmRlcmVyKAotICAgICAgbmV3IEphdmFWaWRlb1JlbmRlcmVyV3JhcHBlcihq
bmksIGpfY2FsbGJhY2tzKSk7Ci0gIHJldHVybiAoamxvbmcpcmVuZGVyZXIucmVsZWFzZSgpOwot
fQotCi1KT1codm9pZCwgVmlkZW9SZW5kZXJlcl9uYXRpdmVDb3B5UGxhbmUpKAotICAgIEpOSUVu
diAqam5pLCBqY2xhc3MsIGpvYmplY3Qgal9zcmNfYnVmZmVyLCBqaW50IHdpZHRoLCBqaW50IGhl
aWdodCwKLSAgICBqaW50IHNyY19zdHJpZGUsIGpvYmplY3Qgal9kc3RfYnVmZmVyLCBqaW50IGRz
dF9zdHJpZGUpIHsKLSAgc2l6ZV90IHNyY19zaXplID0gam5pLT5HZXREaXJlY3RCdWZmZXJDYXBh
Y2l0eShqX3NyY19idWZmZXIpOwotICBzaXplX3QgZHN0X3NpemUgPSBqbmktPkdldERpcmVjdEJ1
ZmZlckNhcGFjaXR5KGpfZHN0X2J1ZmZlcik7Ci0gIFJUQ19DSEVDSyhzcmNfc3RyaWRlID49IHdp
ZHRoKSA8PCAiV3Jvbmcgc291cmNlIHN0cmlkZSAiIDw8IHNyY19zdHJpZGU7Ci0gIFJUQ19DSEVD
Syhkc3Rfc3RyaWRlID49IHdpZHRoKSA8PCAiV3JvbmcgZGVzdGluYXRpb24gc3RyaWRlICIgPDwg
ZHN0X3N0cmlkZTsKLSAgUlRDX0NIRUNLKHNyY19zaXplID49IHNyY19zdHJpZGUgKiBoZWlnaHQp
Ci0gICAgICA8PCAiSW5zdWZmaWNpZW50IHNvdXJjZSBidWZmZXIgY2FwYWNpdHkgIiA8PCBzcmNf
c2l6ZTsKLSAgUlRDX0NIRUNLKGRzdF9zaXplID49IGRzdF9zdHJpZGUgKiBoZWlnaHQpCi0gICAg
ICA8PCAiSW5zdWZmaWNpZW50IGRlc3RpbmF0aW9uIGJ1ZmZlciBjYXBhY2l0eSAiIDw8IGRzdF9z
aXplOwotICB1aW50OF90ICpzcmMgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
am5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfc3JjX2J1ZmZlcikpOwotICB1aW50OF90ICpk
c3QgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZm
ZXJBZGRyZXNzKGpfZHN0X2J1ZmZlcikpOwotICBpZiAoc3JjX3N0cmlkZSA9PSBkc3Rfc3RyaWRl
KSB7Ci0gICAgbWVtY3B5KGRzdCwgc3JjLCBzcmNfc3RyaWRlICogaGVpZ2h0KTsKLSAgfSBlbHNl
IHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7Ci0gICAgICBtZW1jcHko
ZHN0LCBzcmMsIHdpZHRoKTsKLSAgICAgIHNyYyArPSBzcmNfc3RyaWRlOwotICAgICAgZHN0ICs9
IGRzdF9zdHJpZGU7Ci0gICAgfQotICB9Ci19Ci0KLUpPVyh2b2lkLCBGaWxlVmlkZW9DYXB0dXJl
cl9uYXRpdmVJNDIwVG9OVjIxKSgKLSAgICBKTklFbnYgKmpuaSwgamNsYXNzLCBqYnl0ZUFycmF5
IGpfc3JjX2J1ZmZlciwgamludCB3aWR0aCwgamludCBoZWlnaHQsCi0gICAgamJ5dGVBcnJheSBq
X2RzdF9idWZmZXIpIHsKLSAgc2l6ZV90IHNyY19zaXplID0gam5pLT5HZXRBcnJheUxlbmd0aChq
X3NyY19idWZmZXIpOwotICBzaXplX3QgZHN0X3NpemUgPSBqbmktPkdldEFycmF5TGVuZ3RoKGpf
ZHN0X2J1ZmZlcik7Ci0gIGludCBzcmNfc3RyaWRlID0gd2lkdGg7Ci0gIGludCBkc3Rfc3RyaWRl
ID0gd2lkdGg7Ci0gIFJUQ19DSEVDS19HRShzcmNfc2l6ZSwgc3JjX3N0cmlkZSAqIGhlaWdodCAq
IDMgLyAyKTsKLSAgUlRDX0NIRUNLX0dFKGRzdF9zaXplLCBkc3Rfc3RyaWRlICogaGVpZ2h0ICog
MyAvIDIpOwotCi0gIGpieXRlKiBzcmNfYnl0ZXMgPSBqbmktPkdldEJ5dGVBcnJheUVsZW1lbnRz
KGpfc3JjX2J1ZmZlciwgMCk7Ci0gIHVpbnQ4X3QqIHNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KHNyY19ieXRlcyk7Ci0gIGpieXRlKiBkc3RfYnl0ZXMgPSBqbmktPkdldEJ5dGVBcnJh
eUVsZW1lbnRzKGpfZHN0X2J1ZmZlciwgMCk7Ci0gIHVpbnQ4X3QqIGRzdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRzdF9ieXRlcyk7Ci0KLSAgdWludDhfdCogc3JjX3kgPSBzcmM7Ci0g
IHNpemVfdCBzcmNfc3RyaWRlX3kgPSBzcmNfc3RyaWRlOwotICB1aW50OF90KiBzcmNfdSA9IHNy
YyArIHNyY19zdHJpZGUgKiBoZWlnaHQ7Ci0gIHNpemVfdCBzcmNfc3RyaWRlX3UgPSBzcmNfc3Ry
aWRlIC8gMjsKLSAgdWludDhfdCogc3JjX3YgPSBzcmMgKyBzcmNfc3RyaWRlICogaGVpZ2h0ICog
NSAvIDQ7Ci0gIHNpemVfdCBzcmNfc3RyaWRlX3YgPSBzcmNfc3RyaWRlIC8gMjsKLQotICB1aW50
OF90KiBkc3RfeSA9IGRzdDsKLSAgc2l6ZV90IGRzdF9zdHJpZGVfeSA9IGRzdF9zdHJpZGU7Ci0g
IHNpemVfdCBkc3Rfc3RyaWRlX3V2ID0gZHN0X3N0cmlkZTsKLSAgdWludDhfdCogZHN0X3V2ID0g
ZHN0ICsgZHN0X3N0cmlkZSAqIGhlaWdodDsKLQotICBpbnQgcmV0ID0gbGlieXV2OjpJNDIwVG9O
VjIxKHNyY195LCBzcmNfc3RyaWRlX3ksIHNyY191LCBzcmNfc3RyaWRlX3UsIHNyY192LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19zdHJpZGVfdiwgZHN0X3ksIGRzdF9zdHJp
ZGVfeSwgZHN0X3V2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdF9zdHJpZGVf
dXYsIHdpZHRoLCBoZWlnaHQpOwotICBqbmktPlJlbGVhc2VCeXRlQXJyYXlFbGVtZW50cyhqX3Ny
Y19idWZmZXIsIHNyY19ieXRlcywgMCk7Ci0gIGpuaS0+UmVsZWFzZUJ5dGVBcnJheUVsZW1lbnRz
KGpfZHN0X2J1ZmZlciwgZHN0X2J5dGVzLCAwKTsKLSAgaWYgKHJldCkgewotICAgIExPRyhMU19F
UlJPUikgPDwgIkVycm9yIGNvbnZlcnRpbmcgSTQyMCBmcmFtZSB0byBOVjIxOiAiIDw8IHJldDsK
LSAgfQotfQotCi1KT1codm9pZCwgVmlkZW9GaWxlUmVuZGVyZXJfbmF0aXZlSTQyMFNjYWxlKSgK
LSAgICBKTklFbnYgKmpuaSwgamNsYXNzLAotICAgIGpvYmplY3Qgal9zcmNfYnVmZmVyX3ksIGpp
bnQgal9zcmNfc3RyaWRlX3ksCi0gICAgam9iamVjdCBqX3NyY19idWZmZXJfdSwgamludCBqX3Ny
Y19zdHJpZGVfdSwKLSAgICBqb2JqZWN0IGpfc3JjX2J1ZmZlcl92LCBqaW50IGpfc3JjX3N0cmlk
ZV92LAotICAgIGppbnQgd2lkdGgsIGppbnQgaGVpZ2h0LAotICAgIGpieXRlQXJyYXkgal9kc3Rf
YnVmZmVyLCBqaW50IGRzdFdpZHRoLCBqaW50IGRzdEhlaWdodCkgewotICBzaXplX3Qgc3JjX3Np
emVfeSA9IGpuaS0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoal9zcmNfYnVmZmVyX3kpOwotICBz
aXplX3Qgc3JjX3NpemVfdSA9IGpuaS0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoal9zcmNfYnVm
ZmVyX3UpOwotICBzaXplX3Qgc3JjX3NpemVfdiA9IGpuaS0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNp
dHkoal9zcmNfYnVmZmVyX3YpOwotICBzaXplX3QgZHN0X3NpemUgPSBqbmktPkdldERpcmVjdEJ1
ZmZlckNhcGFjaXR5KGpfZHN0X2J1ZmZlcik7Ci0gIGludCBkc3Rfc3RyaWRlID0gZHN0V2lkdGg7
Ci0gIFJUQ19DSEVDS19HRShzcmNfc2l6ZV95LCBqX3NyY19zdHJpZGVfeSAqIGhlaWdodCk7Ci0g
IFJUQ19DSEVDS19HRShzcmNfc2l6ZV91LCBqX3NyY19zdHJpZGVfdSAqIGhlaWdodCAvIDQpOwot
ICBSVENfQ0hFQ0tfR0Uoc3JjX3NpemVfdiwgal9zcmNfc3RyaWRlX3YgKiBoZWlnaHQgLyA0KTsK
LSAgUlRDX0NIRUNLX0dFKGRzdF9zaXplLCBkc3Rfc3RyaWRlICogaGVpZ2h0ICogMyAvIDIpOwot
ICB1aW50OF90KiBzcmNfeSA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihqbmkt
PkdldERpcmVjdEJ1ZmZlckFkZHJlc3Moal9zcmNfYnVmZmVyX3kpKTsKLSAgdWludDhfdCogc3Jj
X3UgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZm
ZXJBZGRyZXNzKGpfc3JjX2J1ZmZlcl91KSk7Ci0gIHVpbnQ4X3QqIHNyY192ID0KLSAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGpuaS0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhqX3Ny
Y19idWZmZXJfdikpOwotICB1aW50OF90KiBkc3QgPQotICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oam5pLT5HZXREaXJlY3RCdWZmZXJBZGRyZXNzKGpfZHN0X2J1ZmZlcikpOwotCi0g
IHVpbnQ4X3QqIGRzdF95ID0gZHN0OwotICBzaXplX3QgZHN0X3N0cmlkZV95ID0gZHN0X3N0cmlk
ZTsKLSAgdWludDhfdCogZHN0X3UgPSBkc3QgKyBkc3Rfc3RyaWRlICogZHN0SGVpZ2h0OwotICBz
aXplX3QgZHN0X3N0cmlkZV91ID0gZHN0X3N0cmlkZSAvIDI7Ci0gIHVpbnQ4X3QqIGRzdF92ID0g
ZHN0ICsgZHN0X3N0cmlkZSAqIGRzdEhlaWdodCAqIDUgLyA0OwotICBzaXplX3QgZHN0X3N0cmlk
ZV92ID0gZHN0X3N0cmlkZSAvIDI7Ci0KLSAgaW50IHJldCA9IGxpYnl1djo6STQyMFNjYWxlKAot
ICAgICAgc3JjX3ksIGpfc3JjX3N0cmlkZV95LCBzcmNfdSwgal9zcmNfc3RyaWRlX3UsIHNyY192
LCBqX3NyY19zdHJpZGVfdiwKLSAgICAgIHdpZHRoLCBoZWlnaHQsIGRzdF95LCBkc3Rfc3RyaWRl
X3ksIGRzdF91LCBkc3Rfc3RyaWRlX3UsIGRzdF92LAotICAgICAgZHN0X3N0cmlkZV92LCBkc3RX
aWR0aCwgZHN0SGVpZ2h0LCBsaWJ5dXY6OmtGaWx0ZXJCaWxpbmVhcik7Ci0gIGlmIChyZXQpIHsK
LSAgICBMT0coTFNfRVJST1IpIDw8ICJFcnJvciBzY2FsaW5nIEk0MjAgZnJhbWU6ICIgPDwgcmV0
OwotICB9Ci19Ci0KLUpPVyhqc3RyaW5nLCBNZWRpYVN0cmVhbVRyYWNrX25hdGl2ZUlkKShKTklF
bnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3ApIHsKLSAgcmV0dXJuIEphdmFTdHJpbmdGcm9tU3Rk
U3RyaW5nKAotICAgICAgam5pLCByZWludGVycHJldF9jYXN0PE1lZGlhU3RyZWFtVHJhY2tJbnRl
cmZhY2UqPihqX3ApLT5pZCgpKTsKLX0KLQotSk9XKGpzdHJpbmcsIE1lZGlhU3RyZWFtVHJhY2tf
bmF0aXZlS2luZCkoSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9wKSB7Ci0gIHJldHVybiBK
YXZhU3RyaW5nRnJvbVN0ZFN0cmluZygKLSAgICAgIGpuaSwgcmVpbnRlcnByZXRfY2FzdDxNZWRp
YVN0cmVhbVRyYWNrSW50ZXJmYWNlKj4oal9wKS0+a2luZCgpKTsKLX0KLQotSk9XKGpib29sZWFu
LCBNZWRpYVN0cmVhbVRyYWNrX25hdGl2ZUVuYWJsZWQpKEpOSUVudiogam5pLCBqY2xhc3MsIGps
b25nIGpfcCkgewotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZWRpYVN0cmVhbVRyYWNrSW50
ZXJmYWNlKj4oal9wKS0+ZW5hYmxlZCgpOwotfQotCi1KT1coam9iamVjdCwgTWVkaWFTdHJlYW1U
cmFja19uYXRpdmVTdGF0ZSkoSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9wKSB7Ci0gIHJl
dHVybiBKYXZhRW51bUZyb21JbmRleCgKLSAgICAgIGpuaSwKLSAgICAgICJNZWRpYVN0cmVhbVRy
YWNrJFN0YXRlIiwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1UcmFja0ludGVy
ZmFjZSo+KGpfcCktPnN0YXRlKCkpOwotfQotCi1KT1coamJvb2xlYW4sIE1lZGlhU3RyZWFtVHJh
Y2tfbmF0aXZlU2V0RW5hYmxlZCkoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9w
LCBqYm9vbGVhbiBlbmFibGVkKSB7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PE1lZGlhU3Ry
ZWFtVHJhY2tJbnRlcmZhY2UqPihqX3ApCi0gICAgICAtPnNldF9lbmFibGVkKGVuYWJsZWQpOwot
fQotCi1KT1codm9pZCwgVmlkZW9UcmFja19uYXRpdmVBZGRSZW5kZXJlcikoCi0gICAgSk5JRW52
KiBqbmksIGpjbGFzcywKLSAgICBqbG9uZyBqX3ZpZGVvX3RyYWNrX3BvaW50ZXIsIGpsb25nIGpf
cmVuZGVyZXJfcG9pbnRlcikgewotICBMT0coTFNfSU5GTykgPDwgIlZpZGVvVHJhY2s6Om5hdGl2
ZUFkZFJlbmRlcmVyIjsKLSAgcmVpbnRlcnByZXRfY2FzdDxWaWRlb1RyYWNrSW50ZXJmYWNlKj4o
al92aWRlb190cmFja19wb2ludGVyKQotICAgICAgLT5BZGRPclVwZGF0ZVNpbmsoCi0gICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxydGM6OlZpZGVvU2lua0ludGVyZmFjZTx3ZWJydGM6OlZpZGVv
RnJhbWU+Kj4oCi0gICAgICAgICAgICAgIGpfcmVuZGVyZXJfcG9pbnRlciksCi0gICAgICAgICAg
cnRjOjpWaWRlb1NpbmtXYW50cygpKTsKLX0KLQotSk9XKHZvaWQsIFZpZGVvVHJhY2tfbmF0aXZl
UmVtb3ZlUmVuZGVyZXIpKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MsCi0gICAgamxvbmcgal92
aWRlb190cmFja19wb2ludGVyLCBqbG9uZyBqX3JlbmRlcmVyX3BvaW50ZXIpIHsKLSAgcmVpbnRl
cnByZXRfY2FzdDxWaWRlb1RyYWNrSW50ZXJmYWNlKj4oal92aWRlb190cmFja19wb2ludGVyKQot
ICAgICAgLT5SZW1vdmVTaW5rKAotICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cnRjOjpWaWRl
b1NpbmtJbnRlcmZhY2U8d2VicnRjOjpWaWRlb0ZyYW1lPio+KAotICAgICAgICAgICAgICBqX3Jl
bmRlcmVyX3BvaW50ZXIpKTsKLX0KLQotSk9XKGpsb25nLCBDYWxsU2Vzc2lvbkZpbGVSb3RhdGlu
Z0xvZ1NpbmtfbmF0aXZlQWRkU2luaykoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcywKLSAgICBq
c3RyaW5nIGpfZGlyUGF0aCwgamludCBqX21heEZpbGVTaXplLCBqaW50IGpfc2V2ZXJpdHkpIHsK
LSAgc3RkOjpzdHJpbmcgZGlyX3BhdGggPSBKYXZhVG9TdGRTdHJpbmcoam5pLCBqX2RpclBhdGgp
OwotICBydGM6OkNhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2luayogc2luayA9Ci0gICAgICBu
ZXcgcnRjOjpDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmsoZGlyX3BhdGgsIGpfbWF4Rmls
ZVNpemUpOwotICBpZiAoIXNpbmstPkluaXQoKSkgewotICAgIExPR19WKHJ0Yzo6TG9nZ2luZ1Nl
dmVyaXR5OjpMU19XQVJOSU5HKSA8PAotICAgICAgICAiRmFpbGVkIHRvIGluaXQgQ2FsbFNlc3Np
b25GaWxlUm90YXRpbmdMb2dTaW5rIGZvciBwYXRoICIgPDwgZGlyX3BhdGg7Ci0gICAgZGVsZXRl
IHNpbms7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgcnRjOjpMb2dNZXNzYWdlOjpBZGRMb2dUb1N0
cmVhbSgKLSAgICAgIHNpbmssIHN0YXRpY19jYXN0PHJ0Yzo6TG9nZ2luZ1NldmVyaXR5PihqX3Nl
dmVyaXR5KSk7Ci0gIHJldHVybiAoamxvbmcpIHNpbms7Ci19Ci0KLUpPVyh2b2lkLCBDYWxsU2Vz
c2lvbkZpbGVSb3RhdGluZ0xvZ1NpbmtfbmF0aXZlRGVsZXRlU2luaykoCi0gICAgSk5JRW52KiBq
bmksIGpjbGFzcywgamxvbmcgal9zaW5rKSB7Ci0gIHJ0Yzo6Q2FsbFNlc3Npb25GaWxlUm90YXRp
bmdMb2dTaW5rKiBzaW5rID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8cnRjOjpDYWxsU2Vzc2lv
bkZpbGVSb3RhdGluZ0xvZ1NpbmsqPihqX3NpbmspOwotICBydGM6OkxvZ01lc3NhZ2U6OlJlbW92
ZUxvZ1RvU3RyZWFtKHNpbmspOwotICBkZWxldGUgc2luazsKLX0KLQotSk9XKGpieXRlQXJyYXks
IENhbGxTZXNzaW9uRmlsZVJvdGF0aW5nTG9nU2lua19uYXRpdmVHZXRMb2dEYXRhKSgKLSAgICBK
TklFbnYqIGpuaSwgamNsYXNzLCBqc3RyaW5nIGpfZGlyUGF0aCkgewotICBzdGQ6OnN0cmluZyBk
aXJfcGF0aCA9IEphdmFUb1N0ZFN0cmluZyhqbmksIGpfZGlyUGF0aCk7Ci0gIHN0ZDo6dW5pcXVl
X3B0cjxydGM6OkNhbGxTZXNzaW9uRmlsZVJvdGF0aW5nU3RyZWFtPiBzdHJlYW0oCi0gICAgICBu
ZXcgcnRjOjpDYWxsU2Vzc2lvbkZpbGVSb3RhdGluZ1N0cmVhbShkaXJfcGF0aCkpOwotICBpZiAo
IXN0cmVhbS0+T3BlbigpKSB7Ci0gICAgTE9HX1YocnRjOjpMb2dnaW5nU2V2ZXJpdHk6OkxTX1dB
Uk5JTkcpIDw8Ci0gICAgICAgICJGYWlsZWQgdG8gb3BlbiBDYWxsU2Vzc2lvbkZpbGVSb3RhdGlu
Z1N0cmVhbSBmb3IgcGF0aCAiIDw8IGRpcl9wYXRoOwotICAgIHJldHVybiBqbmktPk5ld0J5dGVB
cnJheSgwKTsKLSAgfQotICBzaXplX3QgbG9nX3NpemUgPSAwOwotICBpZiAoIXN0cmVhbS0+R2V0
U2l6ZSgmbG9nX3NpemUpIHx8IGxvZ19zaXplID09IDApIHsKLSAgICBMT0dfVihydGM6OkxvZ2dp
bmdTZXZlcml0eTo6TFNfV0FSTklORykgPDwKLSAgICAgICAgIkNhbGxTZXNzaW9uRmlsZVJvdGF0
aW5nU3RyZWFtIHJldHVybnMgMCBzaXplIGZvciBwYXRoICIgPDwgZGlyX3BhdGg7Ci0gICAgcmV0
dXJuIGpuaS0+TmV3Qnl0ZUFycmF5KDApOwotICB9Ci0KLSAgc2l6ZV90IHJlYWQgPSAwOwotICBz
dGQ6OnVuaXF1ZV9wdHI8amJ5dGU+IGJ1ZmZlcihzdGF0aWNfY2FzdDxqYnl0ZSo+KG1hbGxvYyhs
b2dfc2l6ZSkpKTsKLSAgc3RyZWFtLT5SZWFkQWxsKGJ1ZmZlci5nZXQoKSwgbG9nX3NpemUsICZy
ZWFkLCBudWxscHRyKTsKLQotICBqYnl0ZUFycmF5IHJlc3VsdCA9IGpuaS0+TmV3Qnl0ZUFycmF5
KHJlYWQpOwotICBqbmktPlNldEJ5dGVBcnJheVJlZ2lvbihyZXN1bHQsIDAsIHJlYWQsIGJ1ZmZl
ci5nZXQoKSk7Ci0KLSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotSk9XKGpib29sZWFuLCBSdHBTZW5k
ZXJfbmF0aXZlU2V0VHJhY2spKEpOSUVudiogam5pLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgamNsYXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
amxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBqbG9uZyBqX3RyYWNrX3BvaW50ZXIpIHsKLSAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8UnRwU2VuZGVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIpCi0gICAgICAtPlNl
dFRyYWNrKHJlaW50ZXJwcmV0X2Nhc3Q8TWVkaWFTdHJlYW1UcmFja0ludGVyZmFjZSo+KGpfdHJh
Y2tfcG9pbnRlcikpOwotfQotCi1KT1coamxvbmcsIFJ0cFNlbmRlcl9uYXRpdmVHZXRUcmFjayko
Sk5JRW52KiBqbmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamNsYXNzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfcnRwX3NlbmRlcl9wb2lu
dGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpsb25nIGpfdHJhY2tfcG9p
bnRlcikgewotICByZXR1cm4gamxvbmdGcm9tUG9pbnRlcigKLSAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8UnRwU2VuZGVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIpCi0gICAgICAgICAg
LT50cmFjaygpCi0gICAgICAgICAgLnJlbGVhc2UoKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIEphdmFS
dHBQYXJhbWV0ZXJzVG9Kc2VwUnRwUGFyYW1ldGVycygKLSAgICBKTklFbnYqIGpuaSwKLSAgICBq
b2JqZWN0IGpfcGFyYW1ldGVycywKLSAgICB3ZWJydGM6OlJ0cFBhcmFtZXRlcnMqIHBhcmFtZXRl
cnMpIHsKLSAgUlRDX0NIRUNLKHBhcmFtZXRlcnMgIT0gbnVsbHB0cik7Ci0gIGpjbGFzcyBwYXJh
bWV0ZXJzX2NsYXNzID0gam5pLT5GaW5kQ2xhc3MoIm9yZy93ZWJydGMvUnRwUGFyYW1ldGVycyIp
OwotICBqZmllbGRJRCBlbmNvZGluZ3NfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIHBhcmFt
ZXRlcnNfY2xhc3MsICJlbmNvZGluZ3MiLCAiTGphdmEvdXRpbC9MaW5rZWRMaXN0OyIpOwotICBq
ZmllbGRJRCBjb2RlY3NfaWQgPQotICAgICAgR2V0RmllbGRJRChqbmksIHBhcmFtZXRlcnNfY2xh
c3MsICJjb2RlY3MiLCAiTGphdmEvdXRpbC9MaW5rZWRMaXN0OyIpOwotCi0gIC8vIENvbnZlcnQg
ZW5jb2RpbmdzLgotICBqb2JqZWN0IGpfZW5jb2RpbmdzID0gR2V0T2JqZWN0RmllbGQoam5pLCBq
X3BhcmFtZXRlcnMsIGVuY29kaW5nc19pZCk7Ci0gIGNvbnN0IGludCBrQml0cmF0ZVVubGltaXRl
ZCA9IC0xOwotICBqY2xhc3Mgal9lbmNvZGluZ19wYXJhbWV0ZXJzX2NsYXNzID0KLSAgICAgIGpu
aS0+RmluZENsYXNzKCJvcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMkRW5jb2RpbmciKTsKLSAgamZp
ZWxkSUQgYWN0aXZlX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBqX2VuY29kaW5nX3BhcmFt
ZXRlcnNfY2xhc3MsICJhY3RpdmUiLCAiWiIpOwotICBqZmllbGRJRCBiaXRyYXRlX2lkID0gR2V0
RmllbGRJRChqbmksIGpfZW5jb2RpbmdfcGFyYW1ldGVyc19jbGFzcywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIm1heEJpdHJhdGVCcHMiLCAiTGphdmEvbGFuZy9JbnRlZ2Vy
OyIpOwotICBqY2xhc3Mgal9pbnRlZ2VyX2NsYXNzID0gam5pLT5GaW5kQ2xhc3MoImphdmEvbGFu
Zy9JbnRlZ2VyIik7Ci0gIGptZXRob2RJRCBpbnRfdmFsdWVfaWQgPSBHZXRNZXRob2RJRChqbmks
IGpfaW50ZWdlcl9jbGFzcywgImludFZhbHVlIiwgIigpSSIpOwotCi0gIGZvciAoam9iamVjdCBq
X2VuY29kaW5nX3BhcmFtZXRlcnMgOiBJdGVyYWJsZShqbmksIGpfZW5jb2RpbmdzKSkgewotICAg
IHdlYnJ0Yzo6UnRwRW5jb2RpbmdQYXJhbWV0ZXJzIGVuY29kaW5nOwotICAgIGVuY29kaW5nLmFj
dGl2ZSA9IEdldEJvb2xlYW5GaWVsZChqbmksIGpfZW5jb2RpbmdfcGFyYW1ldGVycywgYWN0aXZl
X2lkKTsKLSAgICBqb2JqZWN0IGpfYml0cmF0ZSA9Ci0gICAgICAgIEdldE51bGxhYmxlT2JqZWN0
RmllbGQoam5pLCBqX2VuY29kaW5nX3BhcmFtZXRlcnMsIGJpdHJhdGVfaWQpOwotICAgIGlmICgh
SXNOdWxsKGpuaSwgal9iaXRyYXRlKSkgewotICAgICAgaW50IGJpdHJhdGVfdmFsdWUgPSBqbmkt
PkNhbGxJbnRNZXRob2Qoal9iaXRyYXRlLCBpbnRfdmFsdWVfaWQpOwotICAgICAgQ0hFQ0tfRVhD
RVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBDYWxsSW50TWV0aG9kIjsKLSAgICAgIGVuY29k
aW5nLm1heF9iaXRyYXRlX2JwcyA9IGJpdHJhdGVfdmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGVuY29kaW5nLm1heF9iaXRyYXRlX2JwcyA9IGtCaXRyYXRlVW5saW1pdGVkOwotICAgIH0KLSAg
ICBwYXJhbWV0ZXJzLT5lbmNvZGluZ3MucHVzaF9iYWNrKGVuY29kaW5nKTsKLSAgfQotCi0gIC8v
IENvbnZlcnQgY29kZWNzLgotICBqb2JqZWN0IGpfY29kZWNzID0gR2V0T2JqZWN0RmllbGQoam5p
LCBqX3BhcmFtZXRlcnMsIGNvZGVjc19pZCk7Ci0gIGpjbGFzcyBjb2RlY19jbGFzcyA9IGpuaS0+
RmluZENsYXNzKCJvcmcvd2VicnRjL1J0cFBhcmFtZXRlcnMkQ29kZWMiKTsKLSAgamZpZWxkSUQg
cGF5bG9hZF90eXBlX2lkID0gR2V0RmllbGRJRChqbmksIGNvZGVjX2NsYXNzLCAicGF5bG9hZFR5
cGUiLCAiSSIpOwotICBqZmllbGRJRCBtaW1lX3R5cGVfaWQgPQotICAgICAgR2V0RmllbGRJRChq
bmksIGNvZGVjX2NsYXNzLCAibWltZVR5cGUiLCAiTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gIGpm
aWVsZElEIGNsb2NrX3JhdGVfaWQgPSBHZXRGaWVsZElEKGpuaSwgY29kZWNfY2xhc3MsICJjbG9j
a1JhdGUiLCAiSSIpOwotICBqZmllbGRJRCBjaGFubmVsc19pZCA9IEdldEZpZWxkSUQoam5pLCBj
b2RlY19jbGFzcywgImNoYW5uZWxzIiwgIkkiKTsKLQotICBmb3IgKGpvYmplY3Qgal9jb2RlYyA6
IEl0ZXJhYmxlKGpuaSwgal9jb2RlY3MpKSB7Ci0gICAgd2VicnRjOjpSdHBDb2RlY1BhcmFtZXRl
cnMgY29kZWM7Ci0gICAgY29kZWMucGF5bG9hZF90eXBlID0gR2V0SW50RmllbGQoam5pLCBqX2Nv
ZGVjLCBwYXlsb2FkX3R5cGVfaWQpOwotICAgIGNvZGVjLm1pbWVfdHlwZSA9Ci0gICAgICAgIEph
dmFUb1N0ZFN0cmluZyhqbmksIEdldFN0cmluZ0ZpZWxkKGpuaSwgal9jb2RlYywgbWltZV90eXBl
X2lkKSk7Ci0gICAgY29kZWMuY2xvY2tfcmF0ZSA9IEdldEludEZpZWxkKGpuaSwgal9jb2RlYywg
Y2xvY2tfcmF0ZV9pZCk7Ci0gICAgY29kZWMuY2hhbm5lbHMgPSBHZXRJbnRGaWVsZChqbmksIGpf
Y29kZWMsIGNoYW5uZWxzX2lkKTsKLSAgICBwYXJhbWV0ZXJzLT5jb2RlY3MucHVzaF9iYWNrKGNv
ZGVjKTsKLSAgfQotfQotCi1zdGF0aWMgam9iamVjdCBKc2VwUnRwUGFyYW1ldGVyc1RvSmF2YVJ0
cFBhcmFtZXRlcnMoCi0gICAgSk5JRW52KiBqbmksCi0gICAgY29uc3Qgd2VicnRjOjpSdHBQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKSB7Ci0gIGpjbGFzcyBwYXJhbWV0ZXJzX2NsYXNzID0gam5pLT5G
aW5kQ2xhc3MoIm9yZy93ZWJydGMvUnRwUGFyYW1ldGVycyIpOwotICBqbWV0aG9kSUQgcGFyYW1l
dGVyc19jdG9yID0KLSAgICAgIEdldE1ldGhvZElEKGpuaSwgcGFyYW1ldGVyc19jbGFzcywgIjxp
bml0PiIsICIoKVYiKTsKLSAgam9iamVjdCBqX3BhcmFtZXRlcnMgPSBqbmktPk5ld09iamVjdChw
YXJhbWV0ZXJzX2NsYXNzLCBwYXJhbWV0ZXJzX2N0b3IpOwotICBDSEVDS19FWENFUFRJT04oam5p
KSA8PCAiZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0KLSAgLy8gQWRkIGVuY29kaW5ncy4KLSAg
amNsYXNzIGVuY29kaW5nX2NsYXNzID0gam5pLT5GaW5kQ2xhc3MoIm9yZy93ZWJydGMvUnRwUGFy
YW1ldGVycyRFbmNvZGluZyIpOwotICBqbWV0aG9kSUQgZW5jb2RpbmdfY3RvciA9IEdldE1ldGhv
ZElEKGpuaSwgZW5jb2RpbmdfY2xhc3MsICI8aW5pdD4iLCAiKClWIik7Ci0gIGpmaWVsZElEIGVu
Y29kaW5nc19pZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgcGFyYW1ldGVyc19jbGFzcywgImVu
Y29kaW5ncyIsICJMamF2YS91dGlsL0xpbmtlZExpc3Q7Iik7Ci0gIGpvYmplY3Qgal9lbmNvZGlu
Z3MgPSBHZXRPYmplY3RGaWVsZChqbmksIGpfcGFyYW1ldGVycywgZW5jb2RpbmdzX2lkKTsKLSAg
am1ldGhvZElEIGVuY29kaW5nc19hZGQgPSBHZXRNZXRob2RJRChqbmksIEdldE9iamVjdENsYXNz
KGpuaSwgal9lbmNvZGluZ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJhZGQiLCAiKExqYXZhL2xhbmcvT2JqZWN0OylaIik7Ci0gIGpmaWVsZElEIGFjdGl2ZV9p
ZCA9Ci0gICAgICBHZXRGaWVsZElEKGpuaSwgZW5jb2RpbmdfY2xhc3MsICJhY3RpdmUiLCAiWiIp
OwotICBqZmllbGRJRCBiaXRyYXRlX2lkID0KLSAgICAgIEdldEZpZWxkSUQoam5pLCBlbmNvZGlu
Z19jbGFzcywgIm1heEJpdHJhdGVCcHMiLCAiTGphdmEvbGFuZy9JbnRlZ2VyOyIpOwotCi0gIGpj
bGFzcyBpbnRlZ2VyX2NsYXNzID0gam5pLT5GaW5kQ2xhc3MoImphdmEvbGFuZy9JbnRlZ2VyIik7
Ci0gIGptZXRob2RJRCBpbnRlZ2VyX2N0b3IgPSBHZXRNZXRob2RJRChqbmksIGludGVnZXJfY2xh
c3MsICI8aW5pdD4iLCAiKEkpViIpOwotCi0gIGZvciAoY29uc3Qgd2VicnRjOjpSdHBFbmNvZGlu
Z1BhcmFtZXRlcnMmIGVuY29kaW5nIDogcGFyYW1ldGVycy5lbmNvZGluZ3MpIHsKLSAgICBqb2Jq
ZWN0IGpfZW5jb2RpbmdfcGFyYW1ldGVycyA9Ci0gICAgICAgIGpuaS0+TmV3T2JqZWN0KGVuY29k
aW5nX2NsYXNzLCBlbmNvZGluZ19jdG9yKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAi
ZXJyb3IgZHVyaW5nIE5ld09iamVjdCI7Ci0gICAgam5pLT5TZXRCb29sZWFuRmllbGQoal9lbmNv
ZGluZ19wYXJhbWV0ZXJzLCBhY3RpdmVfaWQsIGVuY29kaW5nLmFjdGl2ZSk7Ci0gICAgQ0hFQ0tf
RVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBTZXRCb29sZWFuRmllbGQiOwotICAgIGlm
IChlbmNvZGluZy5tYXhfYml0cmF0ZV9icHMgPiAwKSB7Ci0gICAgICBqb2JqZWN0IGpfYml0cmF0
ZV92YWx1ZSA9Ci0gICAgICAgICAgam5pLT5OZXdPYmplY3QoaW50ZWdlcl9jbGFzcywgaW50ZWdl
cl9jdG9yLCBlbmNvZGluZy5tYXhfYml0cmF0ZV9icHMpOwotICAgICAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgImVycm9yIGR1cmluZyBOZXdPYmplY3QiOwotICAgICAgam5pLT5TZXRPYmplY3RG
aWVsZChqX2VuY29kaW5nX3BhcmFtZXRlcnMsIGJpdHJhdGVfaWQsIGpfYml0cmF0ZV92YWx1ZSk7
Ci0gICAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIFNldE9iamVjdEZp
ZWxkIjsKLSAgICB9Ci0gICAgamJvb2xlYW4gYWRkZWQgPSBqbmktPkNhbGxCb29sZWFuTWV0aG9k
KGpfZW5jb2RpbmdzLCBlbmNvZGluZ3NfYWRkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBqX2VuY29kaW5nX3BhcmFtZXRlcnMpOwotICAgIENIRUNLX0VYQ0VQ
VElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgQ2FsbEJvb2xlYW5NZXRob2QiOwotICAgIFJUQ19D
SEVDSyhhZGRlZCk7Ci0gIH0KLQotICAvLyBBZGQgY29kZWNzLgotICBqY2xhc3MgY29kZWNfY2xh
c3MgPSBqbmktPkZpbmRDbGFzcygib3JnL3dlYnJ0Yy9SdHBQYXJhbWV0ZXJzJENvZGVjIik7Ci0g
IGptZXRob2RJRCBjb2RlY19jdG9yID0gR2V0TWV0aG9kSUQoam5pLCBjb2RlY19jbGFzcywgIjxp
bml0PiIsICIoKVYiKTsKLSAgamZpZWxkSUQgY29kZWNzX2lkID0KLSAgICAgIEdldEZpZWxkSUQo
am5pLCBwYXJhbWV0ZXJzX2NsYXNzLCAiY29kZWNzIiwgIkxqYXZhL3V0aWwvTGlua2VkTGlzdDsi
KTsKLSAgam9iamVjdCBqX2NvZGVjcyA9IEdldE9iamVjdEZpZWxkKGpuaSwgal9wYXJhbWV0ZXJz
LCBjb2RlY3NfaWQpOwotICBqbWV0aG9kSUQgY29kZWNzX2FkZCA9IEdldE1ldGhvZElEKGpuaSwg
R2V0T2JqZWN0Q2xhc3Moam5pLCBqX2NvZGVjcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImFkZCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KVoiKTsKLSAgamZpZWxkSUQg
cGF5bG9hZF90eXBlX2lkID0gR2V0RmllbGRJRChqbmksIGNvZGVjX2NsYXNzLCAicGF5bG9hZFR5
cGUiLCAiSSIpOwotICBqZmllbGRJRCBtaW1lX3R5cGVfaWQgPQotICAgICAgR2V0RmllbGRJRChq
bmksIGNvZGVjX2NsYXNzLCAibWltZVR5cGUiLCAiTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gIGpm
aWVsZElEIGNsb2NrX3JhdGVfaWQgPSBHZXRGaWVsZElEKGpuaSwgY29kZWNfY2xhc3MsICJjbG9j
a1JhdGUiLCAiSSIpOwotICBqZmllbGRJRCBjaGFubmVsc19pZCA9IEdldEZpZWxkSUQoam5pLCBj
b2RlY19jbGFzcywgImNoYW5uZWxzIiwgIkkiKTsKLQotICBmb3IgKGNvbnN0IHdlYnJ0Yzo6UnRw
Q29kZWNQYXJhbWV0ZXJzJiBjb2RlYyA6IHBhcmFtZXRlcnMuY29kZWNzKSB7Ci0gICAgam9iamVj
dCBqX2NvZGVjID0gam5pLT5OZXdPYmplY3QoY29kZWNfY2xhc3MsIGNvZGVjX2N0b3IpOwotICAg
IENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgTmV3T2JqZWN0IjsKLSAgICBq
bmktPlNldEludEZpZWxkKGpfY29kZWMsIHBheWxvYWRfdHlwZV9pZCwgY29kZWMucGF5bG9hZF90
eXBlKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIFNldEludEZp
ZWxkIjsKLSAgICBqbmktPlNldE9iamVjdEZpZWxkKGpfY29kZWMsIG1pbWVfdHlwZV9pZCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKGpuaSwgY29kZWMu
bWltZV90eXBlKSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgImVycm9yIGR1cmluZyBT
ZXRPYmplY3RGaWVsZCI7Ci0gICAgam5pLT5TZXRJbnRGaWVsZChqX2NvZGVjLCBjbG9ja19yYXRl
X2lkLCBjb2RlYy5jbG9ja19yYXRlKTsKLSAgICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJy
b3IgZHVyaW5nIFNldEludEZpZWxkIjsKLSAgICBqbmktPlNldEludEZpZWxkKGpfY29kZWMsIGNo
YW5uZWxzX2lkLCBjb2RlYy5jaGFubmVscyk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwg
ImVycm9yIGR1cmluZyBTZXRJbnRGaWVsZCI7Ci0gICAgamJvb2xlYW4gYWRkZWQgPSBqbmktPkNh
bGxCb29sZWFuTWV0aG9kKGpfY29kZWNzLCBjb2RlY3NfYWRkLCBqX2NvZGVjKTsKLSAgICBDSEVD
S19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAg
ICBSVENfQ0hFQ0soYWRkZWQpOwotICB9Ci0KLSAgcmV0dXJuIGpfcGFyYW1ldGVyczsKLX0KLQot
Sk9XKGpib29sZWFuLCBSdHBTZW5kZXJfbmF0aXZlU2V0UGFyYW1ldGVycykKLShKTklFbnYqIGpu
aSwgamNsYXNzLCBqbG9uZyBqX3J0cF9zZW5kZXJfcG9pbnRlciwgam9iamVjdCBqX3BhcmFtZXRl
cnMpIHsKLSAgaWYgKElzTnVsbChqbmksIGpfcGFyYW1ldGVycykpIHsKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIH0KLSAgd2VicnRjOjpSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gIEphdmFSdHBQ
YXJhbWV0ZXJzVG9Kc2VwUnRwUGFyYW1ldGVycyhqbmksIGpfcGFyYW1ldGVycywgJnBhcmFtZXRl
cnMpOwotICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSdHBTZW5kZXJJbnRlcmZhY2UqPihqX3J0
cF9zZW5kZXJfcG9pbnRlcikKLSAgICAgIC0+U2V0UGFyYW1ldGVycyhwYXJhbWV0ZXJzKTsKLX0K
LQotSk9XKGpvYmplY3QsIFJ0cFNlbmRlcl9uYXRpdmVHZXRQYXJhbWV0ZXJzKQotKEpOSUVudiog
am5pLCBqY2xhc3MsIGpsb25nIGpfcnRwX3NlbmRlcl9wb2ludGVyKSB7Ci0gIHdlYnJ0Yzo6UnRw
UGFyYW1ldGVycyBwYXJhbWV0ZXJzID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwU2VuZGVy
SW50ZXJmYWNlKj4oal9ydHBfc2VuZGVyX3BvaW50ZXIpCi0gICAgICAgICAgLT5HZXRQYXJhbWV0
ZXJzKCk7Ci0gIHJldHVybiBKc2VwUnRwUGFyYW1ldGVyc1RvSmF2YVJ0cFBhcmFtZXRlcnMoam5p
LCBwYXJhbWV0ZXJzKTsKLX0KLQotSk9XKGpzdHJpbmcsIFJ0cFNlbmRlcl9uYXRpdmVJZCkoCi0g
ICAgSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcgal9ydHBfc2VuZGVyX3BvaW50ZXIpIHsKLSAg
cmV0dXJuIEphdmFTdHJpbmdGcm9tU3RkU3RyaW5nKAotICAgICAgam5pLCByZWludGVycHJldF9j
YXN0PFJ0cFNlbmRlckludGVyZmFjZSo+KGpfcnRwX3NlbmRlcl9wb2ludGVyKS0+aWQoKSk7Ci19
Ci0KLUpPVyh2b2lkLCBSdHBTZW5kZXJfZnJlZSkoSk5JRW52KiBqbmksIGpjbGFzcywgamxvbmcg
al9ydHBfc2VuZGVyX3BvaW50ZXIpIHsKLSAgcmVpbnRlcnByZXRfY2FzdDxSdHBTZW5kZXJJbnRl
cmZhY2UqPihqX3J0cF9zZW5kZXJfcG9pbnRlciktPlJlbGVhc2UoKTsKLX0KLQotSk9XKGpsb25n
LCBSdHBSZWNlaXZlcl9uYXRpdmVHZXRUcmFjaykoSk5JRW52KiBqbmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqY2xhc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBqbG9uZyBqX3J0cF9yZWNlaXZlcl9wb2ludGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgamxvbmcgal90cmFja19wb2ludGVyKSB7Ci0gIHJldHVybiBq
bG9uZ0Zyb21Qb2ludGVyKAotICAgICAgcmVpbnRlcnByZXRfY2FzdDxSdHBSZWNlaXZlckludGVy
ZmFjZSo+KGpfcnRwX3JlY2VpdmVyX3BvaW50ZXIpCi0gICAgICAgICAgLT50cmFjaygpCi0gICAg
ICAgICAgLnJlbGVhc2UoKSk7Ci19Ci0KLUpPVyhqYm9vbGVhbiwgUnRwUmVjZWl2ZXJfbmF0aXZl
U2V0UGFyYW1ldGVycykKLShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3J0cF9zZW5kZXJf
cG9pbnRlciwgam9iamVjdCBqX3BhcmFtZXRlcnMpIHsKLSAgaWYgKElzTnVsbChqbmksIGpfcGFy
YW1ldGVycykpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgd2VicnRjOjpSdHBQYXJhbWV0
ZXJzIHBhcmFtZXRlcnM7Ci0gIEphdmFSdHBQYXJhbWV0ZXJzVG9Kc2VwUnRwUGFyYW1ldGVycyhq
bmksIGpfcGFyYW1ldGVycywgJnBhcmFtZXRlcnMpOwotICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxSdHBSZWNlaXZlckludGVyZmFjZSo+KGpfcnRwX3NlbmRlcl9wb2ludGVyKQotICAgICAgLT5T
ZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpOwotfQotCi1KT1coam9iamVjdCwgUnRwUmVjZWl2ZXJf
bmF0aXZlR2V0UGFyYW1ldGVycykKLShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3J0cF9z
ZW5kZXJfcG9pbnRlcikgewotICB3ZWJydGM6OlJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycyA9Ci0g
ICAgICByZWludGVycHJldF9jYXN0PFJ0cFJlY2VpdmVySW50ZXJmYWNlKj4oal9ydHBfc2VuZGVy
X3BvaW50ZXIpCi0gICAgICAgICAgLT5HZXRQYXJhbWV0ZXJzKCk7Ci0gIHJldHVybiBKc2VwUnRw
UGFyYW1ldGVyc1RvSmF2YVJ0cFBhcmFtZXRlcnMoam5pLCBwYXJhbWV0ZXJzKTsKLX0KLQotSk9X
KGpzdHJpbmcsIFJ0cFJlY2VpdmVyX25hdGl2ZUlkKSgKLSAgICBKTklFbnYqIGpuaSwgamNsYXNz
LCBqbG9uZyBqX3J0cF9yZWNlaXZlcl9wb2ludGVyKSB7Ci0gIHJldHVybiBKYXZhU3RyaW5nRnJv
bVN0ZFN0cmluZygKLSAgICAgIGpuaSwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwUmVjZWl2
ZXJJbnRlcmZhY2UqPihqX3J0cF9yZWNlaXZlcl9wb2ludGVyKS0+aWQoKSk7Ci19Ci0KLUpPVyh2
b2lkLCBSdHBSZWNlaXZlcl9mcmVlKShKTklFbnYqIGpuaSwgamNsYXNzLCBqbG9uZyBqX3J0cF9y
ZWNlaXZlcl9wb2ludGVyKSB7Ci0gIHJlaW50ZXJwcmV0X2Nhc3Q8UnRwUmVjZWl2ZXJJbnRlcmZh
Y2UqPihqX3J0cF9yZWNlaXZlcl9wb2ludGVyKS0+UmVsZWFzZSgpOwotfQotCi19ICAvLyBuYW1l
c3BhY2Ugd2VicnRjX2puaQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWQvam5pL3N1cmZhY2V0ZXh0dXJlaGVscGVyX2puaS5jYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZC9qbmkvc3VyZmFjZXRleHR1cmVoZWxwZXJfam5pLmNjCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9p
ZC9qbmkvc3VyZmFjZXRleHR1cmVoZWxwZXJfam5pLmNjCShub25leGlzdGVudCkKQEAgLTEsODIg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRy
b2lkL2puaS9zdXJmYWNldGV4dHVyZWhlbHBlcl9qbmkuaCIKLQotI2luY2x1ZGUgIndlYnJ0Yy9h
cGkvYW5kcm9pZC9qbmkvY2xhc3NyZWZlcmVuY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMv
YmFzZS9iaW5kLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAi
d2VicnRjL2Jhc2UvbG9nZ2luZy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjX2puaSB7Ci0KLXJ0Yzo6
c2NvcGVkX3JlZnB0cjxTdXJmYWNlVGV4dHVyZUhlbHBlcj4gU3VyZmFjZVRleHR1cmVIZWxwZXI6
OmNyZWF0ZSgKLSAgICBKTklFbnYqIGpuaSwKLSAgICBjb25zdCBjaGFyKiB0aHJlYWRfbmFtZSwK
LSAgICBqb2JqZWN0IGpfZWdsX2NvbnRleHQpIHsKLSAgam9iamVjdCBqX3N1cmZhY2VfdGV4dHVy
ZV9oZWxwZXIgPSBqbmktPkNhbGxTdGF0aWNPYmplY3RNZXRob2QoCi0gICAgICBGaW5kQ2xhc3Mo
am5pLCAib3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlciIpLAotICAgICAgR2V0U3RhdGlj
TWV0aG9kSUQoam5pLCBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhl
bHBlciIpLAotICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZSIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAiKExqYXZhL2xhbmcvU3RyaW5nO0xvcmcvd2VicnRjL0VnbEJhc2UkQ29udGV4
dDspIgotICAgICAgICAgICAgICAgICAgICAgICAgIkxvcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJl
SGVscGVyOyIpLAotICAgICAgam5pLT5OZXdTdHJpbmdVVEYodGhyZWFkX25hbWUpLCBqX2VnbF9j
b250ZXh0KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkKLSAgICAgIDw8ICJlcnJvciBkdXJpbmcg
aW5pdGlhbGl6YXRpb24gb2YgSmF2YSBTdXJmYWNlVGV4dHVyZUhlbHBlciI7Ci0gIGlmIChJc051
bGwoam5pLCBqX3N1cmZhY2VfdGV4dHVyZV9oZWxwZXIpKQotICAgIHJldHVybiBudWxscHRyOwot
ICByZXR1cm4gbmV3IHJ0Yzo6UmVmQ291bnRlZE9iamVjdDxTdXJmYWNlVGV4dHVyZUhlbHBlcj4o
Ci0gICAgICBqbmksIGpfc3VyZmFjZV90ZXh0dXJlX2hlbHBlcik7Ci19Ci0KLVN1cmZhY2VUZXh0
dXJlSGVscGVyOjpTdXJmYWNlVGV4dHVyZUhlbHBlcihKTklFbnYqIGpuaSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGpfc3VyZmFjZV90ZXh0dXJl
X2hlbHBlcikKLSAgICA6IGpfc3VyZmFjZV90ZXh0dXJlX2hlbHBlcl8oam5pLCBqX3N1cmZhY2Vf
dGV4dHVyZV9oZWxwZXIpLAotICAgICAgal9yZXR1cm5fdGV4dHVyZV9tZXRob2RfKAotICAgICAg
ICAgIEdldE1ldGhvZElEKGpuaSwKLSAgICAgICAgICAgICAgICAgICAgICBGaW5kQ2xhc3Moam5p
LCAib3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlciIpLAotICAgICAgICAgICAgICAgICAg
ICAgICJyZXR1cm5UZXh0dXJlRnJhbWUiLAotICAgICAgICAgICAgICAgICAgICAgICIoKVYiKSkg
ewotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiZXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9u
IG9mIFN1cmZhY2VUZXh0dXJlSGVscGVyIjsKLX0KLQotU3VyZmFjZVRleHR1cmVIZWxwZXI6On5T
dXJmYWNlVGV4dHVyZUhlbHBlcigpIHsKLSAgTE9HKExTX0lORk8pIDw8ICJTdXJmYWNlVGV4dHVy
ZUhlbHBlciBkdG9yIjsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVk
ZWQoKTsKLSAgam5pLT5DYWxsVm9pZE1ldGhvZCgKLSAgICAgICpqX3N1cmZhY2VfdGV4dHVyZV9o
ZWxwZXJfLAotICAgICAgR2V0TWV0aG9kSUQoam5pLCBGaW5kQ2xhc3Moam5pLCAib3JnL3dlYnJ0
Yy9TdXJmYWNlVGV4dHVyZUhlbHBlciIpLAotICAgICAgICAgICAgICAgICAgImRpc3Bvc2UiLCAi
KClWIikpOwotCi0gIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJlcnJvciBkdXJpbmcgU3VyZmFj
ZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpIjsKLX0KLQotam9iamVjdCBTdXJmYWNlVGV4dHVyZUhl
bHBlcjo6R2V0SmF2YVN1cmZhY2VUZXh0dXJlSGVscGVyKCkgY29uc3QgewotICByZXR1cm4gKmpf
c3VyZmFjZV90ZXh0dXJlX2hlbHBlcl87Ci19Ci0KLXZvaWQgU3VyZmFjZVRleHR1cmVIZWxwZXI6
OlJldHVyblRleHR1cmVGcmFtZSgpIGNvbnN0IHsKLSAgSk5JRW52KiBqbmkgPSBBdHRhY2hDdXJy
ZW50VGhyZWFkSWZOZWVkZWQoKTsKLSAgam5pLT5DYWxsVm9pZE1ldGhvZCgqal9zdXJmYWNlX3Rl
eHR1cmVfaGVscGVyXywgal9yZXR1cm5fdGV4dHVyZV9tZXRob2RfKTsKLQotICBDSEVDS19FWENF
UFRJT04oCi0gICAgICBqbmkpIDw8ICJlcnJvciBkdXJpbmcgU3VyZmFjZVRleHR1cmVIZWxwZXIu
cmV0dXJuVGV4dHVyZUZyYW1lIjsKLX0KLQotcnRjOjpzY29wZWRfcmVmcHRyPHdlYnJ0Yzo6Vmlk
ZW9GcmFtZUJ1ZmZlcj4KLVN1cmZhY2VUZXh0dXJlSGVscGVyOjpDcmVhdGVUZXh0dXJlRnJhbWUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotICAgIGNvbnN0IE5hdGl2ZUhhbmRsZUltcGwmIG5hdGl2
ZV9oYW5kbGUpIHsKLSAgcmV0dXJuIG5ldyBydGM6OlJlZkNvdW50ZWRPYmplY3Q8QW5kcm9pZFRl
eHR1cmVCdWZmZXI+KAotICAgICAgd2lkdGgsIGhlaWdodCwgbmF0aXZlX2hhbmRsZSwgKmpfc3Vy
ZmFjZV90ZXh0dXJlX2hlbHBlcl8sCi0gICAgICBydGM6OkJpbmQoJlN1cmZhY2VUZXh0dXJlSGVs
cGVyOjpSZXR1cm5UZXh0dXJlRnJhbWUsIHRoaXMpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdl
YnJ0Y19qbmkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkL2puaS9zdXJmYWNldGV4dHVyZWhlbHBlcl9qbmkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZC9q
bmkvc3VyZmFjZXRleHR1cmVoZWxwZXJfam5pLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkL2puaS9zdXJm
YWNldGV4dHVyZWhlbHBlcl9qbmkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDY4ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX0FQSV9KQVZBX0pOSV9TVVJGQUNFVEVY
VFVSRUhFTFBFUl9KTklfSF8KLSNkZWZpbmUgV0VCUlRDX0FQSV9KQVZBX0pOSV9TVVJGQUNFVEVY
VFVSRUhFTFBFUl9KTklfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAid2VicnRj
L2FwaS9hbmRyb2lkL2puaS9qbmlfaGVscGVycy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9hcGkvYW5k
cm9pZC9qbmkvbmF0aXZlX2hhbmRsZV9pbXBsLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvcmVm
Y291bnQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9zY29wZWRfcmVmX3B0ci5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9jb21tb25fdmlkZW8vaW5jbHVkZS92aWRlb19mcmFtZV9idWZmZXIuaCIKLQot
bmFtZXNwYWNlIHdlYnJ0Y19qbmkgewotCi0vLyBIZWxwZXIgY2xhc3MgdG8gY3JlYXRlIGFuZCBz
eW5jaHJvbml6ZSBhY2Nlc3MgdG8gYW4gQW5kcm9pZCBTdXJmYWNlVGV4dHVyZS4KLS8vIEl0IGlz
IHVzZWQgZm9yIGNyZWF0aW5nIHdlYnJ0Yzo6VmlkZW9GcmFtZUJ1ZmZlcnMgZnJvbSBhIFN1cmZh
Y2VUZXh0dXJlIHdoZW4KLS8vIHRoZSBTdXJmYWNlVGV4dHVyZSBoYXMgYmVlbiB1cGRhdGVkLgot
Ly8gV2hlbiB0aGUgVmlkZW9GcmFtZUJ1ZmZlciBpcyByZWxlYXNlZCwgdGhpcyBjbGFzcyByZXR1
cm5zIHRoZSBidWZmZXIgdG8gdGhlCi0vLyBqYXZhIFN1cmZhY2VUZXh0dXJlSGVscGVyIHNvIGl0
IGNhbiBiZSB1cGRhdGVkIHNhZmVseS4gVGhlIFZpZGVvRnJhbWVCdWZmZXIKLS8vIGNhbiBiZSBy
ZWxlYXNlZCBvbiBhbiBhcmJpdHJhcnkgdGhyZWFkLgotLy8gU3VyZmFjZVRleHR1cmVIZWxwZXIg
aXMgcmVmZXJlbmNlIGNvdW50ZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgaXMgbm90Ci0vLyBkZXN0
cm95ZWQgd2hpbGUgYSBWaWRlb0ZyYW1lQnVmZmVyIGlzIGluIHVzZS4KLS8vIFRoaXMgY2xhc3Mg
aXMgdGhlIEMrKyBjb3VudGVycGFydCBvZiB0aGUgamF2YSBjbGFzcyBTdXJmYWNlVGV4dHVyZUhl
bHBlci4KLS8vIEl0IG93bnMgdGhlIGNvcnJlc3BvbmRpbmcgamF2YSBvYmplY3QsIGFuZCBjYWxs
cyB0aGUgamF2YSBkaXNwb3NlCi0vLyBtZXRob2Qgd2hlbiBkZXN0cm95ZWQuCi0vLyBVc2FnZToK
LS8vIDEuIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgotLy8gMi4gR2V0IHRoZSBK
YXZhIFN1cmZhY2VUZXh0dXJlSGVscGVyIHdpdGggR2V0SmF2YVN1cmZhY2VUZXh0dXJlSGVscGVy
KCkuCi0vLyAzLiBSZWdpc3RlciBhIGxpc3RlbmVyIHRvIHRoZSBKYXZhIFN1cmZhY2VMaXN0ZW5l
ciBhbmQgc3RhcnQgcHJvZHVjaW5nCi0vLyBuZXcgYnVmZmVycy4KLS8vIDQuIENhbGwgQ3JlYXRl
VGV4dHVyZUZyYW1lIHRvIHdyYXAgdGhlIEphdmEgdGV4dHVyZSBpbiBhIFZpZGVvRnJhbWVCdWZm
ZXIuCi1jbGFzcyBTdXJmYWNlVGV4dHVyZUhlbHBlciA6IHB1YmxpYyBydGM6OlJlZkNvdW50SW50
ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIC8vIE1pZ2h0IHJldHVybiBudWxsIGlmIGNyZWF0aW5nIHRo
ZSBKYXZhIFN1cmZhY2VUZXh0dXJlSGVscGVyIGZhaWxzLgotICBzdGF0aWMgcnRjOjpzY29wZWRf
cmVmcHRyPFN1cmZhY2VUZXh0dXJlSGVscGVyPiBjcmVhdGUoCi0gICAgICBKTklFbnYqIGpuaSwg
Y29uc3QgY2hhciogdGhyZWFkX25hbWUsIGpvYmplY3Qgal9lZ2xfY29udGV4dCk7Ci0KLSAgam9i
amVjdCBHZXRKYXZhU3VyZmFjZVRleHR1cmVIZWxwZXIoKSBjb25zdDsKLQotICBydGM6OnNjb3Bl
ZF9yZWZwdHI8d2VicnRjOjpWaWRlb0ZyYW1lQnVmZmVyPiBDcmVhdGVUZXh0dXJlRnJhbWUoCi0g
ICAgICBpbnQgd2lkdGgsCi0gICAgICBpbnQgaGVpZ2h0LAotICAgICAgY29uc3QgTmF0aXZlSGFu
ZGxlSW1wbCYgbmF0aXZlX2hhbmRsZSk7Ci0KLSAgLy8gTWF5IGJlIGNhbGxlZCBvbiBhcmJpdHJh
cnkgdGhyZWFkLgotICB2b2lkIFJldHVyblRleHR1cmVGcmFtZSgpIGNvbnN0OwotCi0gcHJvdGVj
dGVkOgotICB+U3VyZmFjZVRleHR1cmVIZWxwZXIoKTsKLSAgU3VyZmFjZVRleHR1cmVIZWxwZXIo
Sk5JRW52KiBqbmksIGpvYmplY3Qgal9zdXJmYWNlX3RleHR1cmVfaGVscGVyKTsKLQotIHByaXZh
dGU6Ci0gIGNvbnN0IFNjb3BlZEdsb2JhbFJlZjxqb2JqZWN0PiBqX3N1cmZhY2VfdGV4dHVyZV9o
ZWxwZXJfOwotICBjb25zdCBqbWV0aG9kSUQgal9yZXR1cm5fdGV4dHVyZV9tZXRob2RfOwotfTsK
LQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0Y19qbmkKLQotI2VuZGlmICAvLyBXRUJSVENfQVBJX0pB
VkFfSk5JX1NVUkZBQ0VURVhUVVJFSEVMUEVSX0pOSV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9BbmRyb2lkTWFuaWZl
c3QueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWR0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCShub25leGlzdGVudCkKQEAgLTEsMjkgKzAs
MCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxtYW5pZmVzdCB4
bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQi
Ci0gICAgcGFja2FnZT0ib3JnLndlYnJ0Yy50ZXN0IgotICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9
IjEiCi0gICAgYW5kcm9pZDp2ZXJzaW9uTmFtZT0iMS4wIiA+Ci0gICAgPHVzZXMtZmVhdHVyZSBh
bmRyb2lkOm5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhIiAvPgotICAgIDx1c2VzLWZlYXR1
cmUgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9jdXMiIC8+Ci0g
ICAgPHVzZXMtZmVhdHVyZSBhbmRyb2lkOmdsRXNWZXJzaW9uPSIweDAwMDIwMDAwIiBhbmRyb2lk
OnJlcXVpcmVkPSJ0cnVlIiAvPgotCi0gICAgPHVzZXMtc2RrIGFuZHJvaWQ6bWluU2RrVmVyc2lv
bj0iMTQiIGFuZHJvaWQ6dGFyZ2V0U2RrVmVyc2lvbj0iMjEiIC8+Ci0KLSAgICA8dXNlcy1wZXJt
aXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkNBTUVSQSIgLz4KLSAgICA8
dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9B
VURJT19TRVRUSU5HUyIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5k
cm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTyIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFu
ZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLklOVEVSTkVUIiAvPgotICAgIDx1c2VzLXBl
cm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxf
U1RPUkFHRSIvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBl
cm1pc3Npb24uQUNDRVNTX05FVFdPUktfU1RBVEUiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBh
bmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DSEFOR0VfTkVUV09SS19TVEFURSIgLz4K
LQotICAgIDxpbnN0cnVtZW50YXRpb24KLSAgICAgICAgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRl
c3QuSW5zdHJ1bWVudGF0aW9uVGVzdFJ1bm5lciIKLSAgICAgICAgYW5kcm9pZDp0YXJnZXRQYWNr
YWdlPSJvcmcud2VicnRjLnRlc3QiIC8+Ci0KLSAgICA8YXBwbGljYXRpb24KLSAgICAgICAgYW5k
cm9pZDpsYWJlbD0iQW5kcm9pZFBlZXJjb25uZWN0aW9uVGVzdHMiID4KLSAgICAgICAgPHVzZXMt
bGlicmFyeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQudGVzdC5ydW5uZXIiIC8+Ci0gICAgPC9hcHBs
aWNhdGlvbj4KLQotPC9tYW5pZmVzdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvT1dORVJTCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMv
T1dORVJTCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL09XTkVSUwkobm9uZXhpc3RlbnQpCkBAIC0x
ICswLDAgQEAKLW1hZ2plZEB3ZWJydGMub3JnCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL2FudC5wcm9wZXJ0aWVzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvYW50LnByb3BlcnRpZXMJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvYW50LnBy
b3BlcnRpZXMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxOCArMCwwIEBACi0jIFRoaXMgZmlsZSBpcyB1
c2VkIHRvIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIHVzZWQgYnkgdGhlIEFudCBidWlsZCBzeXN0
ZW0uCi0jCi0jIFRoaXMgZmlsZSBtdXN0IGJlIGNoZWNrZWQgaW50byBWZXJzaW9uIENvbnRyb2wg
U3lzdGVtcywgYXMgaXQgaXMKLSMgaW50ZWdyYWwgdG8gdGhlIGJ1aWxkIHN5c3RlbSBvZiB5b3Vy
IHByb2plY3QuCi0KLSMgVGhpcyBmaWxlIGlzIG9ubHkgdXNlZCBieSB0aGUgQW50IHNjcmlwdC4K
LQotIyBZb3UgY2FuIHVzZSB0aGlzIHRvIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIHN1Y2ggYXMK
LSMgICdzb3VyY2UuZGlyJyBmb3IgdGhlIGxvY2F0aW9uIG9mIHlvdXIgamF2YSBzb3VyY2UgZm9s
ZGVyIGFuZAotIyAgJ291dC5kaXInIGZvciB0aGUgbG9jYXRpb24gb2YgeW91ciBvdXRwdXQgZm9s
ZGVyLgotCi0jIFlvdSBjYW4gYWxzbyB1c2UgaXQgZGVmaW5lIGhvdyB0aGUgcmVsZWFzZSBidWls
ZHMgYXJlIHNpZ25lZCBieSBkZWNsYXJpbmcKLSMgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgot
IyAgJ2tleS5zdG9yZScgZm9yIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGtleXN0b3JlIGFuZAotIyAg
J2tleS5hbGlhcycgZm9yIHRoZSBuYW1lIG9mIHRoZSBrZXkgdG8gdXNlLgotIyBUaGUgcGFzc3dv
cmQgd2lsbCBiZSBhc2tlZCBkdXJpbmcgdGhlIGJ1aWxkIHdoZW4geW91IHVzZSB0aGUgJ3JlbGVh
c2UnIHRhcmdldC4KLQotc291cmNlLmRpcj0uLi9qYXZhL3Rlc3Rjb21tb24vc3JjO3NyYwpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvYnVpbGQueG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVz
dHMvYnVpbGQueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL2J1aWxkLnhtbAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04
Ij8+Ci08cHJvamVjdCBuYW1lPSJsaWJqaW5nbGVfcGVlcmNvbm5lY3Rpb25fYW5kcm9pZF91bml0
dGVzdCIgZGVmYXVsdD0iaGVscCI+Ci0KLSAgICA8IS0tIFRoZSBsb2NhbC5wcm9wZXJ0aWVzIGZp
bGUgaXMgY3JlYXRlZCBhbmQgdXBkYXRlZCBieSB0aGUgJ2FuZHJvaWQnIHRvb2wuCi0gICAgICAg
ICBJdCBjb250YWlucyB0aGUgcGF0aCB0byB0aGUgU0RLLiBJdCBzaG91bGQgKk5PVCogYmUgY2hl
Y2tlZCBpbnRvCi0gICAgICAgICBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4gLS0+Ci0gICAgPHBy
b3BlcnR5IGZpbGU9ImxvY2FsLnByb3BlcnRpZXMiIC8+Ci0KLSAgICA8IS0tIFRoZSBhbnQucHJv
cGVydGllcyBmaWxlIGNhbiBiZSBjcmVhdGVkIGJ5IHlvdS4gSXQgaXMgb25seSBlZGl0ZWQgYnkg
dGhlCi0gICAgICAgICAnYW5kcm9pZCcgdG9vbCB0byBhZGQgcHJvcGVydGllcyB0byBpdC4KLSAg
ICAgICAgIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNoYW5nZSBzb21lIEFudCBzcGVjaWZpYyBidWls
ZCBwcm9wZXJ0aWVzLgotICAgICAgICAgSGVyZSBhcmUgc29tZSBwcm9wZXJ0aWVzIHlvdSBtYXkg
d2FudCB0byBjaGFuZ2UvdXBkYXRlOgotCi0gICAgICAgICBzb3VyY2UuZGlyCi0gICAgICAgICAg
ICAgVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkuIERlZmF1bHQgaXMgJ3NyYycuCi0g
ICAgICAgICBvdXQuZGlyCi0gICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBkaXJl
Y3RvcnkuIERlZmF1bHQgaXMgJ2JpbicuCi0KLSAgICAgICAgIEZvciBvdGhlciBvdmVycmlkYWJs
ZSBwcm9wZXJ0aWVzLCBsb29rIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1bGVzCi0gICAgICAg
ICBmaWxlcyBpbiB0aGUgU0RLLCBhdCB0b29scy9hbnQvYnVpbGQueG1sCi0KLSAgICAgICAgIFBy
b3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgU0RLIGxvY2F0aW9uIG9yIHRoZSBwcm9qZWN0IHRhcmdl
dCBzaG91bGQKLSAgICAgICAgIGJlIHVwZGF0ZWQgdXNpbmcgdGhlICdhbmRyb2lkJyB0b29sIHdp
dGggdGhlICd1cGRhdGUnIGFjdGlvbi4KLQotICAgICAgICAgVGhpcyBmaWxlIGlzIGFuIGludGVn
cmFsIHBhcnQgb2YgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgeW91cgotICAgICAgICAgYXBwbGljYXRp
b24gYW5kIHNob3VsZCBiZSBjaGVja2VkIGludG8gVmVyc2lvbiBDb250cm9sIFN5c3RlbXMuCi0K
LSAgICAgICAgIC0tPgotICAgIDxwcm9wZXJ0eSBmaWxlPSJhbnQucHJvcGVydGllcyIgLz4KLQot
ICAgIDwhLS0gaWYgc2RrLmRpciB3YXMgbm90IHNldCBmcm9tIG9uZSBvZiB0aGUgcHJvcGVydHkg
ZmlsZSwgdGhlbgotICAgICAgICAgZ2V0IGl0IGZyb20gdGhlIEFORFJPSURfSE9NRSBlbnYgdmFy
LgotICAgICAgICAgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHdlIGxvYWQgcHJvamVjdC5wcm9w
ZXJ0aWVzIHNpbmNlCi0gICAgICAgICB0aGUgcHJvZ3VhcmQgY29uZmlnIGNhbiB1c2Ugc2RrLmRp
ciAtLT4KLSAgICA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIgLz4KLSAgICA8Y29uZGl0aW9u
IHByb3BlcnR5PSJzZGsuZGlyIiB2YWx1ZT0iJHtlbnYuQU5EUk9JRF9TREtfUk9PVH0iPgotICAg
ICAgICA8aXNzZXQgcHJvcGVydHk9ImVudi5BTkRST0lEX1NES19ST09UIiAvPgotICAgIDwvY29u
ZGl0aW9uPgotCi0gICAgPCEtLSBUaGUgcHJvamVjdC5wcm9wZXJ0aWVzIGZpbGUgaXMgY3JlYXRl
ZCBhbmQgdXBkYXRlZCBieSB0aGUgJ2FuZHJvaWQnCi0gICAgICAgICB0b29sLCBhcyB3ZWxsIGFz
IEFEVC4KLQotICAgICAgICAgVGhpcyBjb250YWlucyBwcm9qZWN0IHNwZWNpZmljIHByb3BlcnRp
ZXMgc3VjaCBhcyBwcm9qZWN0IHRhcmdldCwgYW5kIGxpYnJhcnkKLSAgICAgICAgIGRlcGVuZGVu
Y2llcy4gTG93ZXIgbGV2ZWwgYnVpbGQgcHJvcGVydGllcyBhcmUgc3RvcmVkIGluIGFudC5wcm9w
ZXJ0aWVzCi0gICAgICAgICAob3IgaW4gLmNsYXNzcGF0aCBmb3IgRWNsaXBzZSBwcm9qZWN0cyku
Ci0KLSAgICAgICAgIFRoaXMgZmlsZSBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBidWlsZCBz
eXN0ZW0gZm9yIHlvdXIKLSAgICAgICAgIGFwcGxpY2F0aW9uIGFuZCBzaG91bGQgYmUgY2hlY2tl
ZCBpbnRvIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zLiAtLT4KLSAgICA8bG9hZHByb3BlcnRpZXMg
c3JjRmlsZT0icHJvamVjdC5wcm9wZXJ0aWVzIiAvPgotCi0gICAgPCEtLSBxdWljayBjaGVjayBv
biBzZGsuZGlyIC0tPgotICAgIDxmYWlsCi0gICAgICAgICAgICBtZXNzYWdlPSJzZGsuZGlyIGlz
IG1pc3NpbmcuIE1ha2Ugc3VyZSB0byBnZW5lcmF0ZSBsb2NhbC5wcm9wZXJ0aWVzIHVzaW5nICdh
bmRyb2lkIHVwZGF0ZSBwcm9qZWN0JyBvciB0byBpbmplY3QgaXQgdGhyb3VnaCB0aGUgQU5EUk9J
RF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlLiIKLSAgICAgICAgICAgIHVubGVzcz0ic2RrLmRp
ciIKLSAgICAvPgotCi0gICAgPCEtLQotICAgICAgICBJbXBvcnQgcGVyIHByb2plY3QgY3VzdG9t
IGJ1aWxkIHJ1bGVzIGlmIHByZXNlbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QuCi0gICAg
ICAgIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHB1dCBjdXN0b20gaW50ZXJtZWRpYXJ5IHRhcmdldHMg
c3VjaCBhczoKLSAgICAgICAgICAgIC1wcmUtYnVpbGQKLSAgICAgICAgICAgIC1wcmUtY29tcGls
ZQotICAgICAgICAgICAgLXBvc3QtY29tcGlsZSAoVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3Ig
Y29kZSBvYmZ1c2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBpbGVkIGNv
ZGUgbG9jYXRpb246ICR7b3V0LmNsYXNzZXMuYWJzb2x1dGUuZGlyfQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSWYgdGhpcyBpcyBub3QgZG9uZSBpbiBwbGFjZSwgb3ZlcnJpZGUgJHtvdXQu
ZGV4LmlucHV0LmFic29sdXRlLmRpcn0pCi0gICAgICAgICAgICAtcG9zdC1wYWNrYWdlCi0gICAg
ICAgICAgICAtcG9zdC1idWlsZAotICAgICAgICAgICAgLXByZS1jbGVhbgotICAgIC0tPgotICAg
IDxpbXBvcnQgZmlsZT0iY3VzdG9tX3J1bGVzLnhtbCIgb3B0aW9uYWw9InRydWUiIC8+Ci0KLSAg
ICA8IS0tIEltcG9ydCB0aGUgYWN0dWFsIGJ1aWxkIGZpbGUuCi0KLSAgICAgICAgIFRvIGN1c3Rv
bWl6ZSBleGlzdGluZyB0YXJnZXRzLCB0aGVyZSBhcmUgdHdvIG9wdGlvbnM6Ci0gICAgICAgICAt
IEN1c3RvbWl6ZSBvbmx5IG9uZSB0YXJnZXQ6Ci0gICAgICAgICAgICAgLSBjb3B5L3Bhc3RlIHRo
ZSB0YXJnZXQgaW50byB0aGlzIGZpbGUsICpiZWZvcmUqIHRoZQotICAgICAgICAgICAgICAgPGlt
cG9ydD4gdGFzay4KLSAgICAgICAgICAgICAtIGN1c3RvbWl6ZSBpdCB0byB5b3VyIG5lZWRzLgot
ICAgICAgICAgLSBDdXN0b21pemUgdGhlIHdob2xlIGNvbnRlbnQgb2YgYnVpbGQueG1sCi0gICAg
ICAgICAgICAgLSBjb3B5L3Bhc3RlIHRoZSBjb250ZW50IG9mIHRoZSBydWxlcyBmaWxlcyAobWlu
dXMgdGhlIHRvcCBub2RlKQotICAgICAgICAgICAgICAgaW50byB0aGlzIGZpbGUsIHJlcGxhY2lu
ZyB0aGUgPGltcG9ydD4gdGFzay4KLSAgICAgICAgICAgICAtIGN1c3RvbWl6ZSB0byB5b3VyIG5l
ZWRzLgotCi0gICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgKioqKioq
IElNUE9SVEFOVCAqKioqKioKLSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0gICAg
ICAgICBJbiBhbGwgY2FzZXMgeW91IG11c3QgdXBkYXRlIHRoZSB2YWx1ZSBvZiB2ZXJzaW9uLXRh
ZyBiZWxvdyB0byByZWFkICdjdXN0b20nIGluc3RlYWQgb2YgYW4gaW50ZWdlciwKLSAgICAgICAg
IGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB5b3VyIGZpbGUgYmUgb3ZlcnJpZGRlbiBieSB0b29s
cyBzdWNoIGFzICJhbmRyb2lkIHVwZGF0ZSBwcm9qZWN0IgotICAgIC0tPgotICAgIDwhLS0gdmVy
c2lvbi10YWc6IDEgLS0+Ci0gICAgPGltcG9ydCBmaWxlPSIke3Nkay5kaXJ9L3Rvb2xzL2FudC9i
dWlsZC54bWwiIC8+Ci0KLTwvcHJvamVjdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcHJvamVjdC5wcm9wZXJ0aWVzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvcHJvamVjdC5wcm9wZXJ0aWVzCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3Byb2plY3QucHJvcGVydGllcwkobm9uZXhpc3RlbnQpCkBAIC0xLDE2ICswLDAgQEAKLSMgVGhp
cyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IEFuZHJvaWQgVG9vbHMuCi0jIERv
IG5vdCBtb2RpZnkgdGhpcyBmaWxlIC0tIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIEVSQVNFRCEKLSMK
LSMgVGhpcyBmaWxlIG11c3QgYmUgY2hlY2tlZCBpbiBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4K
LSMKLSMgVG8gY3VzdG9taXplIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgQW50IGJ1aWxkIHN5c3Rl
bSBlZGl0Ci0jICJhbnQucHJvcGVydGllcyIsIGFuZCBvdmVycmlkZSB2YWx1ZXMgdG8gYWRhcHQg
dGhlIHNjcmlwdCB0byB5b3VyCi0jIHByb2plY3Qgc3RydWN0dXJlLgotIwotIyBUbyBlbmFibGUg
UHJvR3VhcmQgdG8gc2hyaW5rIGFuZCBvYmZ1c2NhdGUgeW91ciBjb2RlLCB1bmNvbW1lbnQgdGhp
cyAoYXZhaWxhYmxlIHByb3BlcnRpZXM6IHNkay5kaXIsIHVzZXIuaG9tZSk6Ci0jcHJvZ3VhcmQu
Y29uZmlnPSR7c2RrLmRpcn0vdG9vbHMvcHJvZ3VhcmQvcHJvZ3VhcmQtYW5kcm9pZC50eHQ6cHJv
Z3VhcmQtcHJvamVjdC50eHQKLQotIyBQcm9qZWN0IHRhcmdldC4KLXRhcmdldD1hbmRyb2lkLTIy
Ci0KLWphdmEuY29tcGlsZXJhcmdzPS1YbGludDphbGwgLVdlcnJvcgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJh
d2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmls
ZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCShub25leGlz
dGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNo
ZXIucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1h
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5u
b3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtbGRwaS9pY19s
YXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hl
ci5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNo
ZXIucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxl
LWxkcGkvaWNfbGF1bmNoZXIucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQoj
IyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVu
ZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4K
c3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJh
d2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUt
bWRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxl
LW1kcGkvaWNfbGF1bmNoZXIucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVz
dHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDog
c3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUteGhkcGkv
aWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFz
IGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkdGVzdHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRl
c3RzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
dGVzdHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhpc3RlbnQpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzL3N0cmlu
Z3MueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwJKG5v
bmV4aXN0ZW50KQpAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9
InV0Zi04Ij8+Ci08cmVzb3VyY2VzPgotCi0gICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+QW5k
cm9pZFBlZXJDb25uZWN0aW9uVGVzdHM8L3N0cmluZz4KLQotPC9yZXNvdXJjZXM+CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRlc3QuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1
ZmZlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1l
cmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1p
bXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3Ry
dW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5u
b3RhdGlvbi5MYXJnZVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5v
dGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5v
dGF0aW9uLlNtYWxsVGVzdDsKLQotcHVibGljIGNsYXNzIENhbWVyYTFDYXB0dXJlclVzaW5nQnl0
ZUJ1ZmZlclRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRlc3QiOwot
Ci0gIHByaXZhdGUgY2xhc3MgVGVzdE9iamVjdEZhY3RvcnkgZXh0ZW5kcyBDYW1lcmFWaWRlb0Nh
cHR1cmVyVGVzdEZpeHR1cmVzLlRlc3RPYmplY3RGYWN0b3J5IHsKLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgYm9vbGVhbiBpc0NhcHR1cmluZ1RvVGV4dHVyZSgpIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2FtZXJhRW51bWVyYXRv
ciBnZXRDYW1lcmFFbnVtZXJhdG9yKCkgewotICAgICAgcmV0dXJuIG5ldyBDYW1lcmExRW51bWVy
YXRvcihmYWxzZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQg
Z2V0QXBwQ29udGV4dCgpIHsKLSAgICAgIHJldHVybiBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRU
YXJnZXRDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0
aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHJhd09wZW5DYW1lcmEoU3Ry
aW5nIGNhbWVyYU5hbWUpIHsKLSAgICAgIHJldHVybiBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5v
cGVuKENhbWVyYTFFbnVtZXJhdG9yLmdldENhbWVyYUluZGV4KGNhbWVyYU5hbWUpKTsKLSAgICB9
Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIHJhd0Nsb3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEpIHsKLSAgICAgICgo
YW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEpIGNhbWVyYSkucmVsZWFzZSgpOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyBmaXh0dXJlczsKLQot
ICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0gICAgZml4dHVyZXMgPSBu
ZXcgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyhuZXcgVGVzdE9iamVjdEZhY3Rvcnko
KSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0g
ICAgZml4dHVyZXMuZGlzcG9zZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0Q3JlYXRlQW5kRGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCk7Ci0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlTm9uRXhpc3RpbmdDYW1l
cmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0
ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRl
byByZW5kZXJlciB1c2luZyBhICJkZWZhdWx0IiBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90
aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdENyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUg
ZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5n
IHRoZSBmcm9udCBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhl
IEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RTdGFydEZyb250RmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigp
OwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBh
bmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJl
bmRlcmVyIHVzaW5nIHRoZSBiYWNrIGZhY2luZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVz
dHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFN0YXJ0QmFja0ZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUJhY2tGYWNpbmdDYXB0dXJlckFu
ZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGRlZmF1bHQgY2FtZXJh
IGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBjYW1lcmEgY2FuCi0gIC8vIGxhdGVyIGJlIHN3
aXRjaGVkIHRvIGFub3RoZXIgY2FtZXJhLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFu
ZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNo
VmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVy
ZXMuc3dpdGNoQ2FtZXJhKCk7Ci0gIH0KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0Q2FtZXJhRXZlbnRzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0
dXJlcy5jYW1lcmFFdmVudHNJbnZva2VkKCk7Ci0gIH0KLQotICAvLyBUZXN0IHdoYXQgaGFwcGVu
cyB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBlLmcuIHN3aXRjaENhbWVyYSgpIGFmdGVyIGNhbWVy
YSBoYXMgYmVlbiBzdG9wcGVkLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2Ft
ZXJhQ2FsbHNBZnRlclN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZp
eHR1cmVzLmNhbWVyYUNhbGxzQWZ0ZXJTdG9wKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhh
dCB0aGUgVmlkZW9Tb3VyY2UgdGhhdCB0aGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBjb25uZWN0
ZWQgdG8gY2FuCi0gIC8vIGJlIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQgdGVzdHMgYm90aCB0
aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0U3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuc3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpOwotICB9Ci0KLSAgLy8gVGhp
cyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhdCBkaWZmZXJlbnQgcmVzb2x1
dGlvbnMuCi0gIC8vIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIuCi0gIEBM
YXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0
aW9ucygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRT
dG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3Qgd2hh
dCBoYXBwZW5zIGlmIGJ1ZmZlcnMgYXJlIHJldHVybmVkIGFmdGVyIHRoZSBjYXB0dXJlciBoYXZl
Ci0gIC8vIGJlZW4gc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVz
ZSB0aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5C
dWZmZXJMYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5y
ZXR1cm5CdWZmZXJMYXRlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB3ZSBjYW4gY2Fw
dHVyZSBmcmFtZXMsIGtlZXAgdGhlIGZyYW1lcyBpbiBhIGxvY2FsIHJlbmRlcmVyLCBzdG9wIGNh
cHR1cmluZywKLSAgLy8gYW5kIHRoZW4gcmV0dXJuIHRoZSBmcmFtZXMuIFRoZSBkaWZmZXJlbmNl
IGJldHdlZW4gdGhlIHRlc3QgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSBpcyB0aGF0IHdlCi0gIC8v
IGFsc28gdGVzdCB0aGUgSk5JIGFuZCBDKysgQW5kcm9pZFZpZGVvQ2FwdHVyZXIgcGFydHMuCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZl
ckxhdGVFbmRUb0VuZCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgZnJhbWVzIGZvcndh
cmRlZCB0byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBpZiBhZGFwdE91dHB1dEZvcm1hdCBpcwotICAv
LyBjYWxsZWQuIFRoaXMgdGVzdCBib3RoIEphdmEgYW5kIEMrKyBwYXJ0cyBvZiBvZiB0aGUgc3Rh
Y2suCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTY2FsZUNhbWVyYU91dHB1dCgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc2NhbGVDYW1lcmFP
dXRwdXQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGFuIGVycm9yIGlzIHJlcG9ydGVk
IGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAgLy8gd2hlbiBDYW1lcmFWaWRlb0Nh
cHR1cmVyIGlzIHN0YXJ0ZWQuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0
V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW4gYmUgc3RhcnRlZCwgZXZl
biBpZiB0aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIGlmIHRoZSBjYW1lcmEgaXMg
Y2xvc2VkIHdoaWxlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgcmUtdHJ5aW5nIHRvIHN0YXJ0Lgot
ICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5
T3BlbkFuZENsb3NlQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBm
aXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCk7Ci0g
IH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyLnN0b3AgY2FuIGJl
IGNhbGxlZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzCi0gIC8vIHJlLXRyeWluZyB0byBz
dGFydC4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJ
c0FscmVhZHlPcGVuQW5kU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
Zml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCk7Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVzdC5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdU
ZXh0dXJlVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0Nh
bWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3
NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1
bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5v
dGF0aW9uLkxhcmdlVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90
YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90
YXRpb24uU21hbGxUZXN0OwotCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0
dXJlVGVzdCBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsKLSAgc3RhdGljIGZpbmFs
IFN0cmluZyBUQUcgPSAiQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVzdCI7Ci0KLSAgcHJp
dmF0ZSBjbGFzcyBUZXN0T2JqZWN0RmFjdG9yeSBleHRlbmRzIENhbWVyYVZpZGVvQ2FwdHVyZXJU
ZXN0Rml4dHVyZXMuVGVzdE9iamVjdEZhY3RvcnkgewotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBDYW1lcmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3IoKSB7Ci0gICAgICByZXR1cm4g
bmV3IENhbWVyYTFFbnVtZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIENvbnRleHQgZ2V0QXBwQ29udGV4dCgpIHsKLSAgICAgIHJldHVybiBnZXRJbnN0cnVtZW50
YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2Fybmlu
Z3MoImRlcHJlY2F0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHJhd09w
ZW5DYW1lcmEoU3RyaW5nIGNhbWVyYU5hbWUpIHsKLSAgICAgIHJldHVybiBhbmRyb2lkLmhhcmR3
YXJlLkNhbWVyYS5vcGVuKENhbWVyYTFFbnVtZXJhdG9yLmdldENhbWVyYUluZGV4KGNhbWVyYU5h
bWUpKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJhd0Nsb3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEp
IHsKLSAgICAgICgoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEpIGNhbWVyYSkucmVsZWFzZSgpOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyBm
aXh0dXJlczsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0gICAg
Zml4dHVyZXMgPSBuZXcgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyhuZXcgVGVzdE9i
amVjdEZhY3RvcnkoKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgdGVh
ckRvd24oKSB7Ci0gICAgZml4dHVyZXMuZGlzcG9zZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQW5kRGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCk7Ci0gIH0K
LQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOb25FeGlzdGluZ0NhbWVy
YSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlTm9u
RXhpc3RpbmdDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEg
Y2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRv
IGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyBhICJkZWZhdWx0IiBjYXB0dXJlci4KLSAgLy8g
SXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVDYXB0dXJlckFuZFJlbmRlcigp
OwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBh
bmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJl
bmRlcmVyIHVzaW5nIHRoZSBmcm9udCBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRl
c3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RTdGFydEZyb250RmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJl
ckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4g
YmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBK
YXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBiYWNrIGZhY2luZyB2aWRlbyBjYXB0dXJlci4K
LSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1
bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0QmFja0ZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUJhY2tGYWNp
bmdDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGRl
ZmF1bHQgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBjYW1lcmEgY2FuCi0gIC8v
IGxhdGVyIGJlIHN3aXRjaGVkIHRvIGFub3RoZXIgY2FtZXJhLgotICAvLyBJdCB0ZXN0cyBib3Ro
IHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0U3dpdGNoVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuc3dpdGNoQ2FtZXJhKCk7Ci0gIH0KLQotICBATWVkaXVtVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0Q2FtZXJhRXZlbnRzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBmaXh0dXJlcy5jYW1lcmFFdmVudHNJbnZva2VkKCk7Ci0gIH0KLQotICAvLyBUZXN0
IHdoYXQgaGFwcGVucyB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBlLmcuIHN3aXRjaENhbWVyYSgp
IGFmdGVyIGNhbWVyYSBoYXMgYmVlbiBzdG9wcGVkLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0Q2FtZXJhQ2FsbHNBZnRlclN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGZpeHR1cmVzLmNhbWVyYUNhbGxzQWZ0ZXJTdG9wKCk7Ci0gIH0KLQotICAvLyBU
aGlzIHRlc3QgdGhhdCB0aGUgVmlkZW9Tb3VyY2UgdGhhdCB0aGUgQ2FtZXJhVmlkZW9DYXB0dXJl
ciBpcyBjb25uZWN0ZWQgdG8gY2FuCi0gIC8vIGJlIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQg
dGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0U3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpOwotICB9
Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhdCBkaWZm
ZXJlbnQgcmVzb2x1dGlvbnMuCi0gIC8vIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysg
bGF5ZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0U3RvcFdpdGhEaWZm
ZXJlbnRSZXNvbHV0aW9ucygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4
dHVyZXMuc3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCk7Ci0gIH0KLQotICAvLyBU
aGlzIHRlc3Qgd2hhdCBoYXBwZW5zIGlmIGJ1ZmZlcnMgYXJlIHJldHVybmVkIGFmdGVyIHRoZSBj
YXB0dXJlciBoYXZlCi0gIC8vIGJlZW4gc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCBkb2VzIG5v
dCB0ZXN0IG9yIHVzZSB0aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lk
IHRlc3RSZXR1cm5CdWZmZXJMYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBmaXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhh
dCB3ZSBjYW4gY2FwdHVyZSBmcmFtZXMsIGtlZXAgdGhlIGZyYW1lcyBpbiBhIGxvY2FsIHJlbmRl
cmVyLCBzdG9wIGNhcHR1cmluZywKLSAgLy8gYW5kIHRoZW4gcmV0dXJuIHRoZSBmcmFtZXMuIFRo
ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRlc3QgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSBpcyB0
aGF0IHdlCi0gIC8vIGFsc28gdGVzdCB0aGUgSk5JIGFuZCBDKysgQW5kcm9pZFZpZGVvQ2FwdHVy
ZXIgcGFydHMuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJM
YXRlRW5kVG9FbmQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVz
LnJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQg
Q2FtZXJhRXZlbnRzSGFuZGxlci5vbkVycm9yIGlzIHRyaWdnZXJlZCBpZiB2aWRlbyBidWZmZXJz
IGFyZSBub3QgcmV0dXJuZWQgdG8KLSAgLy8gdGhlIGNhcHR1cmVyLgotICBATGFyZ2VUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFGcmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRpb24oKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUZyZWV6ZWRF
dmVudE9uQnVmZmVyU3RhcnZhdGlvbigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgZnJh
bWVzIGZvcndhcmRlZCB0byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBpZiBhZGFwdE91dHB1dEZvcm1h
dCBpcwotICAvLyBjYWxsZWQuIFRoaXMgdGVzdCBib3RoIEphdmEgYW5kIEMrKyBwYXJ0cyBvZiBv
ZiB0aGUgc3RhY2suCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTY2FsZUNhbWVy
YU91dHB1dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc2Nh
bGVDYW1lcmFPdXRwdXQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGFuIGVycm9yIGlz
IHJlcG9ydGVkIGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAgLy8gd2hlbiBDYW1l
cmFWaWRlb0NhcHR1cmVyIGlzIHN0YXJ0ZWQuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpOwot
ICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW4gYmUgc3Rh
cnRlZCwgZXZlbiBpZiB0aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIGlmIHRoZSBj
YW1lcmEgaXMgY2xvc2VkIHdoaWxlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgcmUtdHJ5aW5nIHRv
IHN0YXJ0LgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJh
SXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2Ft
ZXJhKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyLnN0
b3AgY2FuIGJlIGNhbGxlZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzCi0gIC8vIHJlLXRy
eWluZyB0byBzdGFydC4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hp
bGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCk7
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRl
c3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4
dDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9u
OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2U7Ci1pbXBvcnQg
YW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQudGVz
dC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWls
ZGVyLmFubm90YXRpb24uTGFyZ2VUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxk
ZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxk
ZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5D
b3VudERvd25MYXRjaDsKLQotcHVibGljIGNsYXNzIENhbWVyYTJDYXB0dXJlclRlc3QgZXh0ZW5k
cyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0g
IkNhbWVyYTJDYXB0dXJlclRlc3QiOwotCi0gIC8qKgotICAgKiBTaW1wbGUgY2FtZXJhMiBpbXBs
ZW1lbnRhdGlvbiB0aGF0IG9ubHkga25vd3MgaG93IHRvIG9wZW4gdGhlIGNhbWVyYSBhbmQgY2xv
c2UgaXQuCi0gICAqLwotICBwcml2YXRlIGNsYXNzIFNpbXBsZUNhbWVyYTIgewotICAgIGZpbmFs
IENhbWVyYU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsKLSAgICBmaW5hbCBMb29wZXJUaHJlYWQgbG9v
cGVyVGhyZWFkOwotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIG9wZW5Eb25lU2lnbmFsOwotICAg
IGZpbmFsIE9iamVjdCBjYW1lcmFEZXZpY2VMb2NrOwotICAgIENhbWVyYURldmljZSBjYW1lcmFE
ZXZpY2U7IC8vIEd1YXJkZWQgYnkgY2FtZXJhRGV2aWNlTG9jawotICAgIGJvb2xlYW4gb3BlblN1
Y2NlZWRlZDsgLy8gR3VhcmRlZCBieSBjYW1lcmFEZXZpY2VMb2NrCi0KLSAgICBwcml2YXRlIGNs
YXNzIExvb3BlclRocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgICBmaW5hbCBDb3VudERvd25M
YXRjaCBzdGFydGVkU2lnbmFsID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgICAgcHJpdmF0
ZSBIYW5kbGVyIGhhbmRsZXI7Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICBMb29wZXIucHJlcGFyZSgpOwotICAgICAgICBoYW5kbGVyID0gbmV3
IEhhbmRsZXIoKTsKLSAgICAgICAgc3RhcnRlZFNpZ25hbC5jb3VudERvd24oKTsKLSAgICAgICAg
TG9vcGVyLmxvb3AoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2FpdFRvU3RhcnQo
KSB7Ci0gICAgICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5KHN0YXJ0ZWRTaWdu
YWwpOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZXF1ZXN0U3RvcCgpIHsKLSAgICAg
ICAgaGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBI
YW5kbGVyIGdldEhhbmRsZXIoKSB7Ci0gICAgICAgIHJldHVybiBoYW5kbGVyOwotICAgICAgfQot
ICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgQ2FtZXJhU3RhdGVDYWxsYmFjayBleHRlbmRzIENh
bWVyYURldmljZS5TdGF0ZUNhbGxiYWNrIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgb25DbG9zZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZSkgewotICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiU2ltcGxlIGNhbWVyYTIgY2xvc2VkLiIpOwotCi0gICAgICAgIHN5bmNocm9u
aXplZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICAgIFNpbXBsZUNhbWVyYTIudGhpcy5j
YW1lcmFEZXZpY2UgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgb25EaXNjb25uZWN0ZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYURl
dmljZSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU2ltcGxlIGNhbWVyYTIgZGlzY29ubmVj
dGVkLiIpOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAg
ICAgICAgIFNpbXBsZUNhbWVyYTIudGhpcy5jYW1lcmFEZXZpY2UgPSBudWxsOwotICAgICAgICB9
Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25FcnJvcihD
YW1lcmFEZXZpY2UgY2FtZXJhRGV2aWNlLCBpbnQgZXJyb3JDb2RlKSB7Ci0gICAgICAgIExvZ2dp
bmcudyhUQUcsICJTaW1wbGUgY2FtZXJhMiBlcnJvcjogIiArIGVycm9yQ29kZSk7Ci0KLSAgICAg
ICAgc3luY2hyb25pemVkIChjYW1lcmFEZXZpY2VMb2NrKSB7Ci0gICAgICAgICAgU2ltcGxlQ2Ft
ZXJhMi50aGlzLmNhbWVyYURldmljZSA9IGNhbWVyYURldmljZTsKLSAgICAgICAgICBvcGVuU3Vj
Y2VlZGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBvcGVuRG9uZVNpZ25hbC5jb3Vu
dERvd24oKTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBv
bk9wZW5lZChDYW1lcmFEZXZpY2UgY2FtZXJhRGV2aWNlKSB7Ci0gICAgICAgIExvZ2dpbmcuZChU
QUcsICJTaW1wbGUgY2FtZXJhMiBvcGVuZWQuIik7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChj
YW1lcmFEZXZpY2VMb2NrKSB7Ci0gICAgICAgICAgU2ltcGxlQ2FtZXJhMi50aGlzLmNhbWVyYURl
dmljZSA9IGNhbWVyYURldmljZTsKLSAgICAgICAgICBvcGVuU3VjY2VlZGVkID0gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIG9wZW5Eb25lU2lnbmFsLmNvdW50RG93bigpOwotICAgICAgfQot
ICAgIH0KLQotICAgIFNpbXBsZUNhbWVyYTIoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgZGV2aWNl
TmFtZSkgewotICAgICAgY2FtZXJhTWFuYWdlciA9IChDYW1lcmFNYW5hZ2VyKSBjb250ZXh0Lmdl
dFN5c3RlbVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSk7Ci0gICAgICBsb29wZXJUaHJl
YWQgPSBuZXcgTG9vcGVyVGhyZWFkKCk7Ci0gICAgICBsb29wZXJUaHJlYWQuc3RhcnQoKTsKLSAg
ICAgIGxvb3BlclRocmVhZC53YWl0VG9TdGFydCgpOwotICAgICAgY2FtZXJhRGV2aWNlTG9jayA9
IG5ldyBPYmplY3QoKTsKLSAgICAgIG9wZW5Eb25lU2lnbmFsID0gbmV3IENvdW50RG93bkxhdGNo
KDEpOwotICAgICAgY2FtZXJhRGV2aWNlID0gbnVsbDsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJP
cGVuaW5nIHNpbXBsZSBjYW1lcmEyLiIpOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2FtZXJhTWFu
YWdlci5vcGVuQ2FtZXJhKGRldmljZU5hbWUsIG5ldyBDYW1lcmFTdGF0ZUNhbGxiYWNrKCksIGxv
b3BlclRocmVhZC5nZXRIYW5kbGVyKCkpOwotICAgICAgfSBjYXRjaCAoQ2FtZXJhQWNjZXNzRXhj
ZXB0aW9uIGUpIHsKLSAgICAgICAgZmFpbCgiU2ltcGxlIGNhbWVyYTIgQ2FtZXJhQWNjZXNzRXhj
ZXB0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQo
VEFHLCAiV2FpdGluZyBmb3Igc2ltcGxlIGNhbWVyYTIgdG8gb3Blbi4iKTsKLSAgICAgIFRocmVh
ZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5KG9wZW5Eb25lU2lnbmFsKTsKLSAgICAgIHN5bmNo
cm9uaXplZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICBpZiAoIW9wZW5TdWNjZWVkZWQp
IHsKLSAgICAgICAgICBmYWlsKCJPcGVuaW5nIHNpbXBsZSBjYW1lcmEyIGZhaWxlZC4iKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAg
ICAgTG9nZ2luZy5kKFRBRywgIkNsb3Npbmcgc2ltcGxlIGNhbWVyYTIuIik7Ci0gICAgICBzeW5j
aHJvbml6ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAgaWYgKGNhbWVyYURldmljZSAh
PSBudWxsKSB7Ci0gICAgICAgICAgY2FtZXJhRGV2aWNlLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLQotICAgICAgbG9vcGVyVGhyZWFkLnJlcXVlc3RTdG9wKCk7Ci0gICAgICBUaHJlYWRV
dGlscy5qb2luVW5pbnRlcnJ1cHRpYmx5KGxvb3BlclRocmVhZCk7Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSBjbGFzcyBUZXN0T2JqZWN0RmFjdG9yeSBleHRlbmRzIENhbWVyYVZpZGVvQ2FwdHVy
ZXJUZXN0Rml4dHVyZXMuVGVzdE9iamVjdEZhY3RvcnkgewotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBDYW1lcmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3IoKSB7Ci0gICAgICByZXR1
cm4gbmV3IENhbWVyYTJFbnVtZXJhdG9yKGdldEFwcENvbnRleHQoKSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgZ2V0QXBwQ29udGV4dCgpIHsKLSAgICAgIHJl
dHVybiBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0gICAgfQotCi0g
ICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgT2JqZWN0IHJhd09wZW5DYW1lcmEoU3RyaW5nIGNhbWVyYU5hbWUpIHsKLSAgICAgIHJl
dHVybiBuZXcgU2ltcGxlQ2FtZXJhMihnZXRBcHBDb250ZXh0KCksIGNhbWVyYU5hbWUpOwotICAg
IH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgcmF3Q2xvc2VDYW1lcmEoT2JqZWN0IGNhbWVyYSkgewotICAgICAg
KChTaW1wbGVDYW1lcmEyKSBjYW1lcmEpLmNsb3NlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0
ZSBDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzIGZpeHR1cmVzOwotCi0gIEBPdmVycmlk
ZQotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLSAgICBmaXh0dXJlcyA9IG5ldyBDYW1lcmFW
aWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzKG5ldyBUZXN0T2JqZWN0RmFjdG9yeSgpKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBmaXh0dXJl
cy5kaXNwb3NlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVh
dGVBbmREaXNwb3NlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJl
cy5jcmVhdGVDYXB0dXJlckFuZERpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdENyZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpOwotICB9
Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhh
dCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVy
IHVzaW5nIGEgImRlZmF1bHQiIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZh
IGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3Jl
YXRlQ2FwdHVyZXJBbmRSZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGZpeHR1cmVzLmNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRl
c3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJl
IGZvcndhcmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgdGhlIGZyb250
IGZhY2luZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQg
dGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0RnJv
bnRGYWNpbmdWaWRlb0NhcHR1cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBmaXh0dXJlcy5jcmVhdGVGcm9udEZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQot
ICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRo
ZSBmcmFtZXMgYXJlIGZvcndhcmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNp
bmcgdGhlIGJhY2sgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRo
ZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0U3RhcnRCYWNrRmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQmFja0ZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7
Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgZGVmYXVsdCBjYW1lcmEgY2FuIGJlIHN0
YXJ0ZWQgYW5kIHRoYXQgdGhlIGNhbWVyYSBjYW4KLSAgLy8gbGF0ZXIgYmUgc3dpdGNoZWQgdG8g
YW5vdGhlciBjYW1lcmEuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysg
bGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hWaWRlb0NhcHR1
cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zd2l0Y2hD
YW1lcmEoKTsKLSAgfQotCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFF
dmVudHMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVy
YUV2ZW50c0ludm9rZWQoKTsKLSAgfQotCi0gIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gYXR0
ZW1wdGluZyB0byBjYWxsIGUuZy4gc3dpdGNoQ2FtZXJhKCkgYWZ0ZXIgY2FtZXJhIGhhcyBiZWVu
IHN0b3BwZWQuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFDYWxsc0Fm
dGVyU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY2Ft
ZXJhQ2FsbHNBZnRlclN0b3AoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBWaWRl
b1NvdXJjZSB0aGF0IHRoZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIGNvbm5lY3RlZCB0byBjYW4K
LSAgLy8gYmUgc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFu
ZCB0aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdG9wUmVz
dGFydFZpZGVvU291cmNlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0
dXJlcy5zdG9wUmVzdGFydFZpZGVvU291cmNlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhh
dCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGF0IGRpZmZlcmVudCByZXNvbHV0aW9ucy4KLSAg
Ly8gSXQgZG9lcyBub3QgdGVzdCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFN0b3BXaXRoRGlm
ZmVyZW50UmVzb2x1dGlvbnMoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB3aGF0IGhhcHBlbnMg
aWYgYnVmZmVycyBhcmUgcmV0dXJuZWQgYWZ0ZXIgdGhlIGNhcHR1cmVyIGhhdmUKLSAgLy8gYmVl
biBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQuIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysg
bGF5ZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFJldHVybkJ1ZmZlckxhdGUo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZl
ckxhdGUoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHdlIGNhbiBjYXB0dXJlIGZyYW1l
cywga2VlcCB0aGUgZnJhbWVzIGluIGEgbG9jYWwgcmVuZGVyZXIsIHN0b3AgY2FwdHVyaW5nLAot
ICAvLyBhbmQgdGhlbiByZXR1cm4gdGhlIGZyYW1lcy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0
aGUgdGVzdCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZSgpIGlzIHRoYXQgd2UKLSAgLy8gYWxzbyB0ZXN0
IHRoZSBKTkkgYW5kIEMrKyBBbmRyb2lkVmlkZW9DYXB0dXJlciBwYXJ0cy4KLSAgQE1lZGl1bVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZUVuZFRv
RW5kKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFFdmVudHNIYW5kbGVyLm9u
RXJyb3IgaXMgdHJpZ2dlcmVkIGlmIHZpZGVvIGJ1ZmZlcnMgYXJlIG5vdCByZXR1cm5lZCB0bwot
ICAvLyB0aGUgY2FwdHVyZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVy
YUZyZWV6ZWRFdmVudE9uQnVmZmVyU3RhcnZhdGlvbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuY2FtZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0aW9u
KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBmcmFtZXMgZm9yd2FyZGVkIHRvIGEgcmVu
ZGVyZXIgaXMgc2NhbGVkIGlmIGFkYXB0T3V0cHV0Rm9ybWF0IGlzCi0gIC8vIGNhbGxlZC4gVGhp
cyB0ZXN0IGJvdGggSmF2YSBhbmQgQysrIHBhcnRzIG9mIG9mIHRoZSBzdGFjay4KLSAgQE1lZGl1
bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNjYWxlQ2FtZXJhT3V0cHV0KCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zY2FsZUNhbWVyYU91dHB1dCgpOwotICB9
Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgdGhlIGNhbWVy
YSBpcyBhbHJlYWR5IG9wZW5lZAotICAvLyB3aGVuIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgc3Rh
cnRlZC4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlz
QWxyZWFkeU9wZW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVz
LnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3Qg
dGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyIGNhbiBiZSBzdGFydGVkLCBldmVuIGlmIHRoZSBjYW1l
cmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAgLy8gaWYgdGhlIGNhbWVyYSBpcyBjbG9zZWQgd2hpbGUg
Q2FtZXJhVmlkZW9DYXB0dXJlciBpcyByZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBMYXJnZVRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VD
YW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0
V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRo
aXMgdGVzdCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVyZXIuc3RvcCBjYW4gYmUgY2FsbGVkIHdoaWxl
IENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMKLSAgLy8gcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBATWVk
aXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5B
bmRTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFy
dFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKTsKLSAgfQotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMv
b3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzLmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhVmlkZW9DYXB0
dXJlclRlc3RGaXh0dXJlcy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNzMzICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMganVu
aXQuZnJhbWV3b3JrLkFzc2VydC4qOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJh
dGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvUmVuZGVy
ZXIuSTQyMEZyYW1lOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci0KLWltcG9y
dCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGph
dmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotCi1jbGFzcyBDYW1lcmFWaWRlb0Nh
cHR1cmVyVGVzdEZpeHR1cmVzIHsKLSAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJh
VmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyI7Ci0gIC8vIERlZmF1bHQgdmFsdWVzIHVzZWQgZm9y
IHN0YXJ0aW5nIGNhcHR1cmluZwotICBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfV0lEVEggPSA2
NDA7Ci0gIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9IRUlHSFQgPSA0ODA7Ci0gIHN0YXRpYyBm
aW5hbCBpbnQgREVGQVVMVF9GUFMgPSAxNTsKLQotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBSZW5k
ZXJlckNhbGxiYWNrcyBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgICBw
cml2YXRlIGludCBmcmFtZXNSZW5kZXJlZCA9IDA7Ci0gICAgcHJpdmF0ZSBPYmplY3QgZnJhbWVM
b2NrID0gMDsKLSAgICBwcml2YXRlIGludCB3aWR0aCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgaGVp
Z2h0ID0gMDsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1lKEk0
MjBGcmFtZSBmcmFtZSkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAg
ICAgKytmcmFtZXNSZW5kZXJlZDsKLSAgICAgICAgd2lkdGggPSBmcmFtZS5yb3RhdGVkV2lkdGgo
KTsKLSAgICAgICAgaGVpZ2h0ID0gZnJhbWUucm90YXRlZEhlaWdodCgpOwotICAgICAgICBmcmFt
ZUxvY2subm90aWZ5KCk7Ci0gICAgICB9Ci0gICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1l
RG9uZShmcmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBmcmFtZVdpZHRoKCkgewotICAg
ICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgcmV0dXJuIHdpZHRoOwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZnJhbWVIZWlnaHQoKSB7Ci0gICAgICBzeW5j
aHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICByZXR1cm4gaGVpZ2h0OwotICAgICAgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBpbnQgd2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZv
ciB0aGUgbmV4dCBmcmFtZSB0byByZW5kZXIiKTsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVM
b2NrKSB7Ci0gICAgICAgIGZyYW1lTG9jay53YWl0KCk7Ci0gICAgICAgIHJldHVybiBmcmFtZXNS
ZW5kZXJlZDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBG
YWtlQXN5bmNSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAg
ICBwcml2YXRlIGZpbmFsIExpc3Q8STQyMEZyYW1lPiBwZW5kaW5nRnJhbWVzID0gbmV3IEFycmF5
TGlzdDxJNDIwRnJhbWU+KCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW5k
ZXJGcmFtZShJNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0Zy
YW1lcykgewotICAgICAgICBwZW5kaW5nRnJhbWVzLmFkZChmcmFtZSk7Ci0gICAgICAgIHBlbmRp
bmdGcmFtZXMubm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gV2FpdCB1bnRp
bCBhdCBsZWFzdCBvbmUgZnJhbWUgaGF2ZSBiZWVuIHJlY2VpdmVkLCBiZWZvcmUgcmV0dXJuaW5n
IHRoZW0uCi0gICAgcHVibGljIExpc3Q8STQyMEZyYW1lPiB3YWl0Rm9yUGVuZGluZ0ZyYW1lcygp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2Fp
dGluZyBmb3IgcGVuZGluZyBmcmFtZXMiKTsKLSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0Zy
YW1lcykgewotICAgICAgICB3aGlsZSAocGVuZGluZ0ZyYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICBwZW5kaW5nRnJhbWVzLndhaXQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3
IEFycmF5TGlzdDxJNDIwRnJhbWU+KHBlbmRpbmdGcmFtZXMpOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIEZha2VDYXB0dXJlck9ic2VydmVyIGltcGxlbWVu
dHMgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2VydmVyIHsKLSAgICBwcml2YXRlIGlu
dCBmcmFtZXNDYXB0dXJlZCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVTaXplID0gMDsKLSAg
ICBwcml2YXRlIGludCBmcmFtZVdpZHRoID0gMDsKLSAgICBwcml2YXRlIGludCBmcmFtZUhlaWdo
dCA9IDA7Ci0gICAgZmluYWwgcHJpdmF0ZSBPYmplY3QgZnJhbWVMb2NrID0gbmV3IE9iamVjdCgp
OwotICAgIGZpbmFsIHByaXZhdGUgT2JqZWN0IGNhcHR1cmVyU3RhcnRMb2NrID0gbmV3IE9iamVj
dCgpOwotICAgIHByaXZhdGUgYm9vbGVhbiBjYXB0dXJlclN0YXJ0UmVzdWx0ID0gZmFsc2U7Ci0g
ICAgZmluYWwgcHJpdmF0ZSBMaXN0PExvbmc+IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXlMaXN0PExv
bmc+KCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVyU3RhcnRl
ZChib29sZWFuIHN1Y2Nlc3MpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJvbkNhcHR1cmVyU3Rh
cnRlZDogIiArIHN1Y2Nlc3MpOwotCi0gICAgICBzeW5jaHJvbml6ZWQgKGNhcHR1cmVyU3RhcnRM
b2NrKSB7Ci0gICAgICAgIGNhcHR1cmVyU3RhcnRSZXN1bHQgPSBzdWNjZXNzOwotICAgICAgICBj
YXB0dXJlclN0YXJ0TG9jay5ub3RpZnlBbGwoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVyU3RvcHBlZCgpIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICJvbkNhcHR1cmVyU3RvcHBlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIGJ5dGVb
XSBmcmFtZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZVN0
YW1wKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICArK2ZyYW1l
c0NhcHR1cmVkOwotICAgICAgICBmcmFtZVNpemUgPSBmcmFtZS5sZW5ndGg7Ci0gICAgICAgIGZy
YW1lV2lkdGggPSB3aWR0aDsKLSAgICAgICAgZnJhbWVIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAg
IHRpbWVzdGFtcHMuYWRkKHRpbWVTdGFtcCk7Ci0gICAgICAgIGZyYW1lTG9jay5ub3RpZnkoKTsK
LSAgICAgIH0KLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0dXJl
RnJhbWVDYXB0dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQsCi0g
ICAgICAgIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZVN0
YW1wKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICArK2ZyYW1l
c0NhcHR1cmVkOwotICAgICAgICBmcmFtZVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIGZyYW1lSGVp
Z2h0ID0gaGVpZ2h0OwotICAgICAgICBmcmFtZVNpemUgPSAwOwotICAgICAgICB0aW1lc3RhbXBz
LmFkZCh0aW1lU3RhbXApOwotICAgICAgICBmcmFtZUxvY2subm90aWZ5KCk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvckNhcHR1cmVyVG9TdGFydCgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2FpdGluZyBm
b3IgdGhlIGNhcHR1cmVyIHRvIHN0YXJ0Iik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhcHR1cmVy
U3RhcnRMb2NrKSB7Ci0gICAgICAgIGNhcHR1cmVyU3RhcnRMb2NrLndhaXQoKTsKLSAgICAgICAg
cmV0dXJuIGNhcHR1cmVyU3RhcnRSZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGlj
IGludCB3YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBuZXh0IGNhcHR1cmVk
IGZyYW1lIik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICBmcmFt
ZUxvY2sud2FpdCgpOwotICAgICAgICByZXR1cm4gZnJhbWVzQ2FwdHVyZWQ7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgaW50IGZyYW1lU2l6ZSgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVM
b2NrKSB7Ci0gICAgICAgIHJldHVybiBmcmFtZVNpemU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
aW50IGZyYW1lV2lkdGgoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAg
ICAgICByZXR1cm4gZnJhbWVXaWR0aDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgZnJhbWVI
ZWlnaHQoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICByZXR1
cm4gZnJhbWVIZWlnaHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgTGlzdDxMb25nPiBnZXRDb3B5
QW5kUmVzZXRMaXN0T2Z0aW1lU3RhbXBzKCkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxv
Y2spIHsKLSAgICAgICAgQXJyYXlMaXN0PExvbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PExvbmc+
KHRpbWVzdGFtcHMpOwotICAgICAgICB0aW1lc3RhbXBzLmNsZWFyKCk7Ci0gICAgICAgIHJldHVy
biBsaXN0OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBjbGFzcyBDYW1lcmFFdmVu
dHMgaW1wbGVtZW50cyBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYUV2ZW50c0hhbmRsZXIgewot
ICAgIHB1YmxpYyBib29sZWFuIG9uQ2FtZXJhT3BlbmluZ0NhbGxlZDsKLSAgICBwdWJsaWMgYm9v
bGVhbiBvbkZpcnN0RnJhbWVBdmFpbGFibGVDYWxsZWQ7Ci0gICAgcHVibGljIGZpbmFsIE9iamVj
dCBvbkNhbWVyYUZyZWV6ZWRMb2NrID0gbmV3IE9iamVjdCgpOwotICAgIHByaXZhdGUgU3RyaW5n
IG9uQ2FtZXJhRnJlZXplZERlc2NyaXB0aW9uOwotICAgIHB1YmxpYyBmaW5hbCBPYmplY3QgY2Ft
ZXJhQ2xvc2VkTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gY2FtZXJh
Q2xvc2VkID0gdHJ1ZTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJh
RXJyb3IoU3RyaW5nIGVycm9yRGVzY3JpcHRpb24pIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJD
YW1lcmEgZXJyb3I6ICIgKyBlcnJvckRlc2NyaXB0aW9uKTsKLSAgICAgIGNhbWVyYUNsb3NlZCA9
IHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFE
aXNjb25uZWN0ZWQoKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1l
cmFGcmVlemVkKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KG9uQ2FtZXJhRnJlZXplZExvY2spIHsKLSAgICAgICAgb25DYW1lcmFGcmVlemVkRGVzY3JpcHRp
b24gPSBlcnJvckRlc2NyaXB0aW9uOwotICAgICAgICBvbkNhbWVyYUZyZWV6ZWRMb2NrLm5vdGlm
eUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IG9uQ2FtZXJhT3BlbmluZyhTdHJpbmcgY2FtZXJhTmFtZSkgewotICAgICAgb25DYW1lcmFPcGVu
aW5nQ2FsbGVkID0gdHJ1ZTsKLSAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhQ2xvc2VkTG9jaykg
ewotICAgICAgICBjYW1lcmFDbG9zZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkZpcnN0RnJhbWVBdmFpbGFibGUoKSB7Ci0gICAg
ICBvbkZpcnN0RnJhbWVBdmFpbGFibGVDYWxsZWQgPSB0cnVlOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhQ2xvc2VkKCkgewotICAgICAgc3luY2hyb25p
emVkIChjYW1lcmFDbG9zZWRMb2NrKSB7Ci0gICAgICAgIGNhbWVyYUNsb3NlZCA9IHRydWU7Ci0g
ICAgICAgIGNhbWVyYUNsb3NlZExvY2subm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIFN0cmluZyB3YWl0Rm9yQ2FtZXJhRnJlZXplZCgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2FpdGluZyBmb3IgdGhlIGNhbWVy
YSB0byBmcmVlemUiKTsKLSAgICAgIHN5bmNocm9uaXplZCAob25DYW1lcmFGcmVlemVkTG9jaykg
ewotICAgICAgICBvbkNhbWVyYUZyZWV6ZWRMb2NrLndhaXQoKTsKLSAgICAgICAgcmV0dXJuIG9u
Q2FtZXJhRnJlZXplZERlc2NyaXB0aW9uOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2
b2lkIHdhaXRGb3JDYW1lcmFDbG9zZWQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgICAgc3luY2hyb25pemVkIChjYW1lcmFDbG9zZWRMb2NrKSB7Ci0gICAgICAgIHdoaWxlICgh
Y2FtZXJhQ2xvc2VkKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRo
ZSBjYW1lcmEgdG8gY2xvc2UuIik7Ci0gICAgICAgICAgY2FtZXJhQ2xvc2VkTG9jay53YWl0KCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgdG8g
Y29sbGVjdCBhbGwgY2xhc3NlcyByZWxhdGVkIHRvIHNpbmdsZSBjYXB0dXJlciBpbnN0YW5jZS4K
LSAgICovCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIENhcHR1cmVySW5zdGFuY2UgewotICAgIHB1
YmxpYyBDYW1lcmFWaWRlb0NhcHR1cmVyIGNhcHR1cmVyOwotICAgIHB1YmxpYyBDYW1lcmFFdmVu
dHMgY2FtZXJhRXZlbnRzOwotICAgIHB1YmxpYyBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNl
VGV4dHVyZUhlbHBlcjsKLSAgICBwdWJsaWMgRmFrZUNhcHR1cmVyT2JzZXJ2ZXIgb2JzZXJ2ZXI7
Ci0gICAgcHVibGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gc3VwcG9ydGVkRm9ybWF0czsKLSAgICBw
dWJsaWMgQ2FwdHVyZUZvcm1hdCBmb3JtYXQ7Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgdXNl
ZCBmb3IgY29sbGVjdGluZyBhIFZpZGVvU291cmNlLCBhIFZpZGVvVHJhY2sgYW5kIGEgcmVuZGVy
ZXIuIFRoZSBjbGFzcwotICAgKiBpcyB1c2VkIGZvciB0ZXN0aW5nIGxvY2FsIHJlbmRlcmluZyBm
cm9tIGEgY2FwdHVyZXIuCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBWaWRlb1RyYWNr
V2l0aFJlbmRlcmVyIHsKLSAgICBwdWJsaWMgVmlkZW9Tb3VyY2Ugc291cmNlOwotICAgIHB1Ymxp
YyBWaWRlb1RyYWNrIHRyYWNrOwotICAgIHB1YmxpYyBSZW5kZXJlckNhbGxiYWNrcyByZW5kZXJl
ckNhbGxiYWNrczsKLSAgICBwdWJsaWMgRmFrZUFzeW5jUmVuZGVyZXIgZmFrZUFzeW5jUmVuZGVy
ZXI7Ci0gIH0KLQotICBwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIFRlc3RPYmplY3RGYWN0
b3J5IHsKLSAgICBmaW5hbCBDYW1lcmFFbnVtZXJhdG9yIGNhbWVyYUVudW1lcmF0b3I7Ci0KLSAg
ICBUZXN0T2JqZWN0RmFjdG9yeSgpIHsKLSAgICAgIGNhbWVyYUVudW1lcmF0b3IgPSBnZXRDYW1l
cmFFbnVtZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIg
Y3JlYXRlQ2FwdHVyZXIoCi0gICAgICAgIFN0cmluZyBuYW1lLCBDYW1lcmFWaWRlb0NhcHR1cmVy
LkNhbWVyYUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgICAgcmV0dXJuIGNhbWVy
YUVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIobmFtZSwgZXZlbnRzSGFuZGxlcik7Ci0gICAgfQot
Ci0gICAgcHVibGljIFN0cmluZyBnZXROYW1lT2ZGcm9udEZhY2luZ0RldmljZSgpIHsKLSAgICAg
IGZvciAoU3RyaW5nIGRldmljZU5hbWUgOiBjYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVz
KCkpIHsKLSAgICAgICAgaWYgKGNhbWVyYUVudW1lcmF0b3IuaXNGcm9udEZhY2luZyhkZXZpY2VO
YW1lKSkgewotICAgICAgICAgIHJldHVybiBkZXZpY2VOYW1lOwotICAgICAgICB9Ci0gICAgICB9
Ci0KLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFt
ZU9mQmFja0ZhY2luZ0RldmljZSgpIHsKLSAgICAgIGZvciAoU3RyaW5nIGRldmljZU5hbWUgOiBj
YW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCkpIHsKLSAgICAgICAgaWYgKGNhbWVyYUVu
dW1lcmF0b3IuaXNCYWNrRmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAgICAgcmV0dXJuIGRl
dmljZU5hbWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotCi0gICAgcHVibGljIGJvb2xlYW4gaGF2ZVR3b0NhbWVyYXMoKSB7Ci0gICAgICByZXR1cm4g
Y2FtZXJhRW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpLmxlbmd0aCA+PSAyOwotICAgIH0KLQot
ICAgIHB1YmxpYyBib29sZWFuIGlzQ2FwdHVyaW5nVG9UZXh0dXJlKCkgewotICAgICAgLy8gSW4g
dGhlIGZ1dHVyZSwgd2UgcGxhbiB0byBvbmx5IHN1cHBvcnQgY2FwdHVyaW5nIHRvIHRleHR1cmUs
IHNvIGRlZmF1bHQgdG8gdHJ1ZQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYWJz
dHJhY3QgcHVibGljIENhbWVyYUVudW1lcmF0b3IgZ2V0Q2FtZXJhRW51bWVyYXRvcigpOwotICAg
IGFic3RyYWN0IHB1YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKTsKLQotICAgIC8vIENhbWVy
YVZpZGVvQ2FwdHVyZXIgQVBJIGlzIHRvbyBzbG93IGZvciBzb21lIG9mIG91ciB0ZXN0cyB3aGVy
ZSB3ZSBuZWVkIHRvIG9wZW4gYSBjb21wZXRpbmcKLSAgICAvLyBjYW1lcmEuIFRoZXNlIG1ldGhv
ZHMgYXJlIHVzZWQgaW5zdGVhZC4KLSAgICBhYnN0cmFjdCBwdWJsaWMgT2JqZWN0IHJhd09wZW5D
YW1lcmEoU3RyaW5nIGNhbWVyYU5hbWUpOwotICAgIGFic3RyYWN0IHB1YmxpYyB2b2lkIHJhd0Ns
b3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEpOwotICB9Ci0KLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlv
bkZhY3RvcnkgcGVlckNvbm5lY3Rpb25GYWN0b3J5OwotICBwcml2YXRlIFRlc3RPYmplY3RGYWN0
b3J5IHRlc3RPYmplY3RGYWN0b3J5OwotCi0gIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVy
ZXMoVGVzdE9iamVjdEZhY3RvcnkgdGVzdE9iamVjdEZhY3RvcnkpIHsKLSAgICBQZWVyQ29ubmVj
dGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKAotICAgICAgICB0ZXN0T2JqZWN0
RmFjdG9yeS5nZXRBcHBDb250ZXh0KCksIHRydWUsIHRydWUsIHRydWUpOwotCi0gICAgdGhpcy5w
ZWVyQ29ubmVjdGlvbkZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5KG51bGwgLyog
b3B0aW9ucyAqLyk7Ci0gICAgdGhpcy50ZXN0T2JqZWN0RmFjdG9yeSA9IHRlc3RPYmplY3RGYWN0
b3J5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB0aGlzLnBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5kaXNwb3NlKCk7Ci0gIH0KLQotICAvLyBJbnRlcm5hbCBoZWxwZXIgbWV0
aG9kcwotICBwcml2YXRlIENhcHR1cmVySW5zdGFuY2UgY3JlYXRlQ2FwdHVyZXIoU3RyaW5nIG5h
bWUsIGJvb2xlYW4gaW5pdGlhbGl6ZSkgewotICAgIENhcHR1cmVySW5zdGFuY2UgaW5zdGFuY2Ug
PSBuZXcgQ2FwdHVyZXJJbnN0YW5jZSgpOwotICAgIGluc3RhbmNlLmNhbWVyYUV2ZW50cyA9IG5l
dyBDYW1lcmFFdmVudHMoKTsKLSAgICBpbnN0YW5jZS5jYXB0dXJlciA9IHRlc3RPYmplY3RGYWN0
b3J5LmNyZWF0ZUNhcHR1cmVyKG5hbWUsIGluc3RhbmNlLmNhbWVyYUV2ZW50cyk7Ci0gICAgaW5z
dGFuY2Uuc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUo
Ci0gICAgICAgICJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBu
dWxsIC8qIHNoYXJlZENvbnRleHQgKi8pOwotICAgIGluc3RhbmNlLm9ic2VydmVyID0gbmV3IEZh
a2VDYXB0dXJlck9ic2VydmVyKCk7Ci0gICAgaWYgKGluaXRpYWxpemUpIHsKLSAgICAgIGluc3Rh
bmNlLmNhcHR1cmVyLmluaXRpYWxpemUoCi0gICAgICAgICAgaW5zdGFuY2Uuc3VyZmFjZVRleHR1
cmVIZWxwZXIsIHRlc3RPYmplY3RGYWN0b3J5LmdldEFwcENvbnRleHQoKSwgaW5zdGFuY2Uub2Jz
ZXJ2ZXIpOwotICAgIH0KLSAgICBpbnN0YW5jZS5zdXBwb3J0ZWRGb3JtYXRzID0gdGVzdE9iamVj
dEZhY3RvcnkuY2FtZXJhRW51bWVyYXRvci5nZXRTdXBwb3J0ZWRGb3JtYXRzKG5hbWUpOwotICAg
IHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIHByaXZhdGUgQ2FwdHVyZXJJbnN0YW5jZSBjcmVh
dGVDYXB0dXJlcihib29sZWFuIGluaXRpYWxpemUpIHsKLSAgICBTdHJpbmcgbmFtZSA9IHRlc3RP
YmplY3RGYWN0b3J5LmNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKVswXTsKLSAgICBy
ZXR1cm4gY3JlYXRlQ2FwdHVyZXIobmFtZSwgaW5pdGlhbGl6ZSk7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgc3RhcnRDYXB0dXJlKENhcHR1cmVySW5zdGFuY2UgaW5zdGFuY2UpIHsKLSAgICBzdGFy
dENhcHR1cmUoaW5zdGFuY2UsIDApOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0Q2FwdHVy
ZShDYXB0dXJlckluc3RhbmNlIGluc3RhbmNlLCBpbnQgZm9ybWF0SW5kZXgpIHsKLSAgICBmaW5h
bCBDYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdCBmb3JtYXQgPQotICAgICAg
ICBpbnN0YW5jZS5zdXBwb3J0ZWRGb3JtYXRzLmdldChmb3JtYXRJbmRleCk7Ci0KLSAgICBpbnN0
YW5jZS5jYXB0dXJlci5zdGFydENhcHR1cmUoZm9ybWF0LndpZHRoLCBmb3JtYXQuaGVpZ2h0LCBm
b3JtYXQuZnJhbWVyYXRlLm1heCk7Ci0gICAgaW5zdGFuY2UuZm9ybWF0ID0gZm9ybWF0OwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGRpc3Bvc2VDYXB0dXJlcihDYXB0dXJlckluc3RhbmNlIGluc3Rh
bmNlKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGluc3RhbmNlLmNhcHR1cmVy
LnN0b3BDYXB0dXJlKCk7Ci0gICAgaW5zdGFuY2UuY2FtZXJhRXZlbnRzLndhaXRGb3JDYW1lcmFD
bG9zZWQoKTsKLSAgICBpbnN0YW5jZS5jYXB0dXJlci5kaXNwb3NlKCk7Ci0gICAgaW5zdGFuY2Uu
c3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgaW5zdGFuY2Uu
c3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb1Ry
YWNrV2l0aFJlbmRlcmVyIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoCi0gICAgICBDYW1l
cmFWaWRlb0NhcHR1cmVyIGNhcHR1cmVyLCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5kZXJl
ckNhbGxiYWNrcykgewotICAgIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhS
ZW5kZXJlciA9IG5ldyBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKCk7Ci0gICAgdmlkZW9UcmFja1dp
dGhSZW5kZXJlci5zb3VyY2UgPSBwZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlVmlkZW9Tb3Vy
Y2UoY2FwdHVyZXIpOwotICAgIGNhcHR1cmVyLnN0YXJ0Q2FwdHVyZShERUZBVUxUX1dJRFRILCBE
RUZBVUxUX0hFSUdIVCwgREVGQVVMVF9GUFMpOwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIu
dHJhY2sgPQotICAgICAgICBwZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlVmlkZW9UcmFjaygi
ZHVtbXkiLCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZSk7Ci0gICAgdmlkZW9UcmFja1dp
dGhSZW5kZXJlci50cmFjay5hZGRSZW5kZXJlcihuZXcgVmlkZW9SZW5kZXJlcihyZW5kZXJlckNh
bGxiYWNrcykpOwotICAgIHJldHVybiB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyOwotICB9Ci0KLSAg
cHJpdmF0ZSBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIoQ2FtZXJhVmlkZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIFJlbmRlcmVyQ2FsbGJhY2tz
IHJlbmRlcmVyQ2FsbGJhY2tzID0gbmV3IFJlbmRlcmVyQ2FsbGJhY2tzKCk7Ci0gICAgVmlkZW9U
cmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRl
VmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlciwgcmVuZGVyZXJDYWxsYmFja3MpOwotICAg
IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3MgPSByZW5kZXJlckNhbGxi
YWNrczsKLSAgICByZXR1cm4gdmlkZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAgfQotCi0gIHByaXZh
dGUgVmlkZW9UcmFja1dpdGhSZW5kZXJlciBjcmVhdGVWaWRlb1RyYWNrV2l0aEZha2VBc3luY1Jl
bmRlcmVyKAotICAgICAgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIEZha2VB
c3luY1JlbmRlcmVyIGZha2VBc3luY1JlbmRlcmVyID0gbmV3IEZha2VBc3luY1JlbmRlcmVyKCk7
Ci0gICAgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAg
ICAgICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlciwgZmFrZUFzeW5jUmVu
ZGVyZXIpOwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVyZXIgPSBm
YWtlQXN5bmNSZW5kZXJlcjsKLSAgICByZXR1cm4gdmlkZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBkaXNwb3NlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihWaWRlb1Ry
YWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIpIHsKLSAgICB2aWRlb1RyYWNr
V2l0aFJlbmRlcmVyLnRyYWNrLmRpc3Bvc2UoKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVy
LnNvdXJjZS5kaXNwb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd2FpdFVudGlsSWRsZShD
YXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25M
YXRjaCgxKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhh
bmRsZXIoKS5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgfQot
ICAgIH0pOwotICAgIGJhcnJpZXIuYXdhaXQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVh
dGVDYXB0dXJlckFuZFJlbmRlcihTdHJpbmcgbmFtZSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBpZiAobmFtZSA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiU2tp
cHBpbmcgdmlkZW8gY2FwdHVyZXIgdGVzdCBiZWNhdXNlIGRldmljZSBuYW1lIGlzIG51bGwuIik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0
dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIobmFtZSwgZmFsc2UgLyogaW5pdGlhbGl6ZSAq
Lyk7Ci0gICAgZmluYWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRl
cmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlckluc3Rh
bmNlLmNhcHR1cmVyKTsKLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVu
ZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLSAgICBkaXNw
b3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIodmlkZW9UcmFja1dpdGhSZW5kZXJlcik7Ci0gIH0KLQotICAvLyBUZXN0IG1ldGhv
ZHMKLSAgcHVibGljIHZvaWQgY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY3JlYXRlQ2FwdHVyZXIodHJ1
ZSAvKiBpbml0aWFsaXplICovKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVOb25FeGlz
dGluZ0NhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAg
ICAgIGRpc3Bvc2VDYXB0dXJlcihjcmVhdGVDYXB0dXJlcigibm9uLWV4aXN0aW5nIGNhbWVyYSIs
IGZhbHNlIC8qIGluaXRpYWxpemUgKi8pKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRF
eGNlcHRpb24gZSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZhaWwoIkV4cGVjdGVk
IGlsbGVnYWwgYXJndW1lbnQgZXhjZXB0aW9uIHdoZW4gY3JlYXRpbmcgbm9uLWV4aXN0aW5nIGNh
bWVyYS4iKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgbmFtZSA9IHRlc3RPYmpl
Y3RGYWN0b3J5LmNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKVswXTsKLSAgICBjcmVh
dGVDYXB0dXJlckFuZFJlbmRlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUZy
b250RmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKHRlc3RPYmplY3RGYWN0b3J5LmdldE5hbWVP
ZkZyb250RmFjaW5nRGV2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlQmFja0Zh
Y2luZ0NhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBjcmVhdGVDYXB0dXJlckFuZFJlbmRlcih0ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZCYWNr
RmFjaW5nRGV2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoIXRlc3RPYmplY3RGYWN0b3J5Lmhh
dmVUd29DYW1lcmFzKCkpIHsKLSAgICAgIExvZ2dpbmcudygKLSAgICAgICAgICBUQUcsICJTa2lw
cGluZyB0ZXN0IHN3aXRjaCB2aWRlbyBjYXB0dXJlciBiZWNhdXNlIHRoZSBkZXZpY2UgZG9lc24n
dCBoYXZlIHR3byBjYW1lcmFzLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFs
IENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGZhbHNl
IC8qIGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlk
ZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAgLy8gV2FpdCBmb3IgdGhlIGNhbWVy
YSB0byBzdGFydCBzbyB3ZSBjYW4gc3dpdGNoIGl0Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNr
V2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigp
ID4gMCk7Ci0KLSAgICAvLyBBcnJheSB3aXRoIG9uZSBlbGVtZW50IHRvIGF2b2lkIGZpbmFsIHBy
b2JsZW0gaW4gbmVzdGVkIGNsYXNzZXMuCi0gICAgZmluYWwgYm9vbGVhbltdIGNhbWVyYVN3aXRj
aFN1Y2Nlc3NmdWwgPSBuZXcgYm9vbGVhblsxXTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBi
YXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIGNhcHR1cmVySW5zdGFuY2UuY2Fw
dHVyZXIuc3dpdGNoQ2FtZXJhKG5ldyBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYVN3aXRjaEhh
bmRsZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhU3dp
dGNoRG9uZShib29sZWFuIGlzRnJvbnRDYW1lcmEpIHsKLSAgICAgICAgY2FtZXJhU3dpdGNoU3Vj
Y2Vzc2Z1bFswXSA9IHRydWU7Ci0gICAgICAgIGJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICB9
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhU3dpdGNoRXJyb3Io
U3RyaW5nIGVycm9yRGVzY3JpcHRpb24pIHsKLSAgICAgICAgY2FtZXJhU3dpdGNoU3VjY2Vzc2Z1
bFswXSA9IGZhbHNlOwotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgfQotICAg
IH0pOwotICAgIC8vIFdhaXQgdW50aWwgdGhlIGNhbWVyYSBoYXMgYmVlbiBzd2l0Y2hlZC4KLSAg
ICBiYXJyaWVyLmF3YWl0KCk7Ci0KLSAgICAvLyBDaGVjayByZXN1bHQuCi0gICAgYXNzZXJ0VHJ1
ZShjYW1lcmFTd2l0Y2hTdWNjZXNzZnVsWzBdKTsKLSAgICAvLyBFbnN1cmUgdGhhdCBmcmFtZXMg
YXJlIHJlY2VpdmVkLgotICAgIGFzc2VydFRydWUodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5k
ZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKSA+IDApOwotICAgIGRpc3Bv
c2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dpdGhS
ZW5kZXJlcih2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNh
bWVyYUV2ZW50c0ludm9rZWQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZp
bmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKHRy
dWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2Up
OwotICAgIC8vIE1ha2Ugc3VyZSBjYW1lcmEgaXMgc3RhcnRlZCBhbmQgZmlyc3QgZnJhbWUgaXMg
cmVjZWl2ZWQgYW5kIHRoZW4gc3RvcCBpdC4KLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFu
Y2Uub2JzZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLSAgICBjYXB0dXJlckluc3Rh
bmNlLm9ic2VydmVyLndhaXRGb3JOZXh0Q2FwdHVyZWRGcmFtZSgpOwotICAgIGRpc3Bvc2VDYXB0
dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLQotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5j
ZS5jYW1lcmFFdmVudHMub25DYW1lcmFPcGVuaW5nQ2FsbGVkKTsKLSAgICBhc3NlcnRUcnVlKGNh
cHR1cmVySW5zdGFuY2UuY2FtZXJhRXZlbnRzLm9uRmlyc3RGcmFtZUF2YWlsYWJsZUNhbGxlZCk7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjYW1lcmFDYWxsc0FmdGVyU3RvcCgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlcklu
c3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBzdGFy
dENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgLy8gTWFrZSBzdXJlIGNhbWVyYSBpcyBz
dGFydGVkIGFuZCB0aGVuIHN0b3AgaXQuCi0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNl
Lm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAgY2FwdHVyZXJJbnN0YW5j
ZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIGNhcHR1cmVySW5zdGFuY2Uuc3VyZmFjZVRl
eHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAvLyBXZSBjYW4ndCBjaGFu
Z2UgfGNhcHR1cmVyfCBhdCB0aGlzIHBvaW50LCBidXQgd2Ugc2hvdWxkIG5vdCBjcmFzaC4KLSAg
ICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN3aXRjaENhbWVyYShudWxsIC8qIHN3aXRjaEV2
ZW50c0hhbmRsZXIgKi8pOwotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuY2hhbmdlQ2Fw
dHVyZUZvcm1hdChERUZBVUxUX1dJRFRILCBERUZBVUxUX0hFSUdIVCwgREVGQVVMVF9GUFMpOwot
Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgc3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRl
Q2FwdHVyZXIoZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgZmluYWwgVmlkZW9UcmFja1dp
dGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9U
cmFja1dpdGhSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyKTsKLQotICAgIGFzc2Vy
dFRydWUodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4
dEZyYW1lVG9SZW5kZXIoKSA+IDApOwotICAgIGFzc2VydEVxdWFscyhNZWRpYVNvdXJjZS5TdGF0
ZS5MSVZFLCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZS5zdGF0ZSgpKTsKLQotICAgIGNh
cHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBhc3NlcnRFcXVhbHMo
TWVkaWFTb3VyY2UuU3RhdGUuRU5ERUQsIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuc291cmNlLnN0
YXRlKCkpOwotCi0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotICAgIGFzc2Vy
dFRydWUodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4
dEZyYW1lVG9SZW5kZXIoKSA+IDApOwotICAgIGFzc2VydEVxdWFscyhNZWRpYVNvdXJjZS5TdGF0
ZS5MSVZFLCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZS5zdGF0ZSgpKTsKLQotICAgIGRp
c3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dp
dGhSZW5kZXJlcih2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0g
Y3JlYXRlQ2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLQotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSwg
aSk7Ci0gICAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvckNh
cHR1cmVyVG9TdGFydCgpKTsKLSAgICAgIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZv
ck5leHRDYXB0dXJlZEZyYW1lKCk7Ci0KLSAgICAgIC8vIENoZWNrIHRoZSBmcmFtZSBzaXplLiBU
aGUgYWN0dWFsIHdpZHRoIGFuZCBoZWlnaHQgZGVwZW5kIG9uIGhvdyB0aGUgY2FwdHVyZXIgaXMg
bW91bnRlZC4KLSAgICAgIGZpbmFsIGJvb2xlYW4gaWRlbnRpY2FsUmVzb2x1dGlvbiA9Ci0gICAg
ICAgICAgKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVXaWR0aCgpID09IGNhcHR1cmVy
SW5zdGFuY2UuZm9ybWF0LndpZHRoCi0gICAgICAgICAgICAgICYmIGNhcHR1cmVySW5zdGFuY2Uu
b2JzZXJ2ZXIuZnJhbWVIZWlnaHQoKSA9PSBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC5oZWlnaHQp
OwotICAgICAgZmluYWwgYm9vbGVhbiBmbGlwcGVkUmVzb2x1dGlvbiA9Ci0gICAgICAgICAgKGNh
cHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVXaWR0aCgpID09IGNhcHR1cmVySW5zdGFuY2Uu
Zm9ybWF0LmhlaWdodAotICAgICAgICAgICAgICAmJiBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVy
LmZyYW1lSGVpZ2h0KCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQud2lkdGgpOwotICAgICAg
aWYgKCFpZGVudGljYWxSZXNvbHV0aW9uICYmICFmbGlwcGVkUmVzb2x1dGlvbikgewotICAgICAg
ICBmYWlsKCJXcm9uZyByZXNvbHV0aW9uLCBnb3Q6ICIgKyBjYXB0dXJlckluc3RhbmNlLm9ic2Vy
dmVyLmZyYW1lV2lkdGgoKSArICJ4IgotICAgICAgICAgICAgKyBjYXB0dXJlckluc3RhbmNlLm9i
c2VydmVyLmZyYW1lSGVpZ2h0KCkgKyAiIGV4cGVjdGVkOiAiCi0gICAgICAgICAgICArIGNhcHR1
cmVySW5zdGFuY2UuZm9ybWF0LndpZHRoICsgIngiICsgY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQu
aGVpZ2h0ICsgIiBvciAiCi0gICAgICAgICAgICArIGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0Lmhl
aWdodCArICJ4IiArIGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0LndpZHRoKTsKLSAgICAgIH0KLQot
ICAgICAgaWYgKHRlc3RPYmplY3RGYWN0b3J5LmlzQ2FwdHVyaW5nVG9UZXh0dXJlKCkpIHsKLSAg
ICAgICAgYXNzZXJ0RXF1YWxzKDAsIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVTaXpl
KCkpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNl
LmZvcm1hdC5mcmFtZVNpemUoKSA8PSBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZyYW1lU2l6
ZSgpKTsKLSAgICAgIH0KLSAgICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1
cmUoKTsKLSAgICAgIGNhcHR1cmVySW5zdGFuY2Uuc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJu
VGV4dHVyZUZyYW1lKCk7Ci0gICAgfQotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3Rh
bmNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJldHVybkJ1ZmZlckxhdGUoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJ
bnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgc3Rh
cnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0
YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotCi0gICAgY2FwdHVyZXJJ
bnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKTsKLSAgICBjYXB0dXJl
ckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgTGlzdDxMb25nPiBsaXN0T2Z0
aW1lc3RhbXBzID0gY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5nZXRDb3B5QW5kUmVzZXRMaXN0
T2Z0aW1lU3RhbXBzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0T2Z0aW1lc3RhbXBzLnNpemUoKSA+
PSAxKTsKLQotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlLCAxKTsKLSAgICBjYXB0
dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKTsKLSAgICBjYXB0
dXJlckluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwot
Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUo
KTsKLSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0KLSAgICBs
aXN0T2Z0aW1lc3RhbXBzID0gY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5nZXRDb3B5QW5kUmVz
ZXRMaXN0T2Z0aW1lU3RhbXBzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0T2Z0aW1lc3RhbXBzLnNp
emUoKSA+PSAxKTsKLQotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlcklu
c3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIoZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgZmlu
YWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAg
ICAgY3JlYXRlVmlkZW9UcmFja1dpdGhGYWtlQXN5bmNSZW5kZXJlcihjYXB0dXJlckluc3RhbmNl
LmNhcHR1cmVyKTsKLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUgZnJhbWUgdGhhdCBoYXMg
bm90IGJlZW4gcmV0dXJuZWQuCi0gICAgYXNzZXJ0RmFsc2UodmlkZW9UcmFja1dpdGhSZW5kZXJl
ci5mYWtlQXN5bmNSZW5kZXJlci53YWl0Rm9yUGVuZGluZ0ZyYW1lcygpLmlzRW1wdHkoKSk7Ci0K
LSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0KLSAgICAvLyBE
aXNwb3NlIGV2ZXJ5dGhpbmcuCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2Up
OwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIpOwotCi0gICAgLy8gUmV0dXJuIHRoZSBmcmFtZShzKSwgb24gYSBkaWZmZXJlbnQgdGhyZWFk
IG91dCBvZiBzcGl0ZS4KLSAgICBmaW5hbCBMaXN0PEk0MjBGcmFtZT4gcGVuZGluZ0ZyYW1lcyA9
Ci0gICAgICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVyZXIud2FpdEZv
clBlbmRpbmdGcmFtZXMoKTsKLSAgICBmaW5hbCBUaHJlYWQgcmV0dXJuVGhyZWFkID0gbmV3IFRo
cmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgZm9yIChJNDIwRnJhbWUgZnJhbWUgOiBwZW5kaW5nRnJhbWVzKSB7
Ci0gICAgICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0
dXJuVGhyZWFkLmpvaW4oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNhbWVyYUZyZWV6ZWRFdmVu
dE9uQnVmZmVyU3RhcnZhdGlvbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
ZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIo
dHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5j
ZSk7Ci0gICAgLy8gTWFrZSBzdXJlIGNhbWVyYSBpcyBzdGFydGVkLgotICAgIGFzc2VydFRydWUo
Y2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAg
IC8vIFNpbmNlIHdlIGRvbid0IHJldHVybiB0aGUgYnVmZmVyLCB3ZSBzaG91bGQgZ2V0IGEgc3Rh
cnZhdGlvbiBtZXNzYWdlIGlmIHdlIGFyZQotICAgIC8vIGNhcHR1cmluZyB0byBhIHRleHR1cmUu
Ci0gICAgYXNzZXJ0RXF1YWxzKCJDYW1lcmEgZmFpbHVyZS4gQ2xpZW50IG11c3QgcmV0dXJuIHZp
ZGVvIGJ1ZmZlcnMuIiwKLSAgICAgICAgY2FwdHVyZXJJbnN0YW5jZS5jYW1lcmFFdmVudHMud2Fp
dEZvckNhbWVyYUZyZWV6ZWQoKSk7Ci0KLSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0
b3BDYXB0dXJlKCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgc2NhbGVDYW1lcmFPdXRwdXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9
IGNyZWF0ZUNhcHR1cmVyKGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0
ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAg
YXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRG
b3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0KLSAgICBmaW5hbCBpbnQgc3RhcnRXaWR0aCA9
IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3MuZnJhbWVXaWR0aCgpOwot
ICAgIGZpbmFsIGludCBzdGFydEhlaWdodCA9IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVy
ZXJDYWxsYmFja3MuZnJhbWVIZWlnaHQoKTsKLSAgICBmaW5hbCBpbnQgZnJhbWVSYXRlID0gMzA7
Ci0gICAgZmluYWwgaW50IHNjYWxlZFdpZHRoID0gc3RhcnRXaWR0aCAvIDI7Ci0gICAgZmluYWwg
aW50IHNjYWxlZEhlaWdodCA9IHN0YXJ0SGVpZ2h0IC8gMjsKLQotICAgIC8vIFJlcXVlc3QgdGhl
IGNhcHR1cmVkIGZyYW1lcyB0byBiZSBzY2FsZWQuCi0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJl
ci5zb3VyY2UuYWRhcHRPdXRwdXRGb3JtYXQoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgZnJh
bWVSYXRlKTsKLQotICAgIGJvb2xlYW4gZ290RXhwZWN0ZWRSZXNvbHV0aW9uID0gZmFsc2U7Ci0g
ICAgaW50IG51bWJlck9mSW5zcGVjdGVkRnJhbWVzID0gMDsKLQotICAgIGRvIHsKLSAgICAgIHZp
ZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRv
UmVuZGVyKCk7Ci0gICAgICArK251bWJlck9mSW5zcGVjdGVkRnJhbWVzOwotCi0gICAgICBnb3RF
eHBlY3RlZFJlc29sdXRpb24gPSAodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxi
YWNrcy5mcmFtZVdpZHRoKCkgPT0gc2NhbGVkV2lkdGgKLSAgICAgICAgICAmJiB2aWRlb1RyYWNr
V2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lSGVpZ2h0KCkgPT0gc2NhbGVkSGVp
Z2h0KTsKLSAgICB9IHdoaWxlICghZ290RXhwZWN0ZWRSZXNvbHV0aW9uICYmIG51bWJlck9mSW5z
cGVjdGVkRnJhbWVzIDwgMzApOwotCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFu
Y2UpOwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVu
ZGVyZXIpOwotCi0gICAgYXNzZXJ0VHJ1ZShnb3RFeHBlY3RlZFJlc29sdXRpb24pOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIFN0cmluZyBjYW1lcmFOYW1lID0gdGVzdE9i
amVjdEZhY3RvcnkuZ2V0TmFtZU9mQmFja0ZhY2luZ0RldmljZSgpOwotICAgIC8vIEF0IHRoaXMg
cG9pbnQgY2FtZXJhIGlzIG5vdCBhY3R1YWxseSBvcGVuZWQuCi0gICAgZmluYWwgQ2FwdHVyZXJJ
bnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIoY2FtZXJhTmFtZSwgdHJ1
ZSAvKiBpbml0aWFsaXplICovKTsKLQotICAgIGZpbmFsIE9iamVjdCBjb21wZXRpbmdDYW1lcmEg
PSB0ZXN0T2JqZWN0RmFjdG9yeS5yYXdPcGVuQ2FtZXJhKGNhbWVyYU5hbWUpOwotCi0gICAgc3Rh
cnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotCi0gICAgaWYgKGFuZHJvaWQub3MuQnVpbGQu
VkVSU0lPTi5TREtfSU5UID4gYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9Q
X01SMSkgewotICAgICAgLy8gVGhlIGZpcnN0IG9wZW5lZCBjYW1lcmEgY2xpZW50IHdpbGwgYmUg
ZXZpY3RlZC4KLSAgICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0
Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBhc3NlcnRGYWxzZShj
YXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAg
fQotCi0gICAgdGVzdE9iamVjdEZhY3RvcnkucmF3Q2xvc2VDYW1lcmEoY29tcGV0aW5nQ2FtZXJh
KTsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCBzdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdHJpbmcgY2FtZXJhTmFtZSA9
IHRlc3RPYmplY3RGYWN0b3J5LmdldE5hbWVPZkJhY2tGYWNpbmdEZXZpY2UoKTsKLSAgICAvLyBB
dCB0aGlzIHBvaW50IGNhbWVyYSBpcyBub3QgYWN0dWFsbHkgb3BlbmVkLgotICAgIGZpbmFsIENh
cHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGNhbWVyYU5h
bWUsIGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwotCi0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0
V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmE6IE9wZW5pbmcgY29tcGV0aW5n
IGNhbWVyYS4iKTsKLSAgICBmaW5hbCBPYmplY3QgY29tcGV0aW5nQ2FtZXJhID0gdGVzdE9iamVj
dEZhY3RvcnkucmF3T3BlbkNhbWVyYShjYW1lcmFOYW1lKTsKLQotICAgIExvZ2dpbmcuZChUQUcs
ICJzdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBPcGVuaW5nIGNh
bWVyYS4iKTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKGNhcHR1cmVy
SW5zdGFuY2UuY2FwdHVyZXIpOwotICAgIHdhaXRVbnRpbElkbGUoY2FwdHVyZXJJbnN0YW5jZSk7
Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRD
bG9zZUNhbWVyYTogQ2xvc2luZyBjb21wZXRpbmcgY2FtZXJhLiIpOwotICAgIHRlc3RPYmplY3RG
YWN0b3J5LnJhd0Nsb3NlQ2FtZXJhKGNvbXBldGluZ0NhbWVyYSk7Ci0KLSAgICAvLyBNYWtlIHN1
cmUgY2FtZXJhIGlzIHN0YXJ0ZWQgYW5kIGZpcnN0IGZyYW1lIGlzIHJlY2VpdmVkIGFuZCB0aGVu
IHN0b3AgaXQuCi0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlP
cGVuQW5kQ2xvc2VDYW1lcmE6IFdhaXRpbmcgZm9yIGNhcHR1cmUgdG8gc3RhcnQuIik7Ci0gICAg
dmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1l
VG9SZW5kZXIoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFk
eU9wZW5BbmRDbG9zZUNhbWVyYTogU3RvcHBpbmcgY2FwdHVyZS4iKTsKLSAgICBkaXNwb3NlQ2Fw
dHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdGFydFdoaWxl
Q2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpbmFsIFN0cmluZyBjYW1lcmFOYW1lID0gdGVzdE9iamVjdEZhY3RvcnkuZ2V0TmFt
ZU9mQmFja0ZhY2luZ0RldmljZSgpOwotICAgIC8vIEF0IHRoaXMgcG9pbnQgY2FtZXJhIGlzIG5v
dCBhY3R1YWxseSBvcGVuZWQuCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlcklu
c3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIoY2FtZXJhTmFtZSwgdHJ1ZSAvKiBpbml0aWFsaXplICov
KTsKLQotICAgIGZpbmFsIE9iamVjdCBjb21wZXRpbmdDYW1lcmEgPSB0ZXN0T2JqZWN0RmFjdG9y
eS5yYXdPcGVuQ2FtZXJhKGNhbWVyYU5hbWUpOwotCi0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVy
SW5zdGFuY2UpOwotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLQotICAg
IHRlc3RPYmplY3RGYWN0b3J5LnJhd0Nsb3NlQ2FtZXJhKGNvbXBldGluZ0NhbWVyYSk7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXJUZXN0LmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlclRlc3QuamF2YQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDI2NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lk
LmdyYXBoaWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMxMUV4
dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lklu
c3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIu
YW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9y
dCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQg
amF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8vIEVtcHR5QWN0aXZpdHkgaXMgbmVlZGVkIGZvciB0aGUg
c3VyZmFjZS4KLXB1YmxpYyBjbGFzcyBFZ2xSZW5kZXJlclRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50
YXRpb25UZXN0Q2FzZSB7Ci0gIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkVnbFJlbmRlcmVy
VGVzdCI7Ci0gIGZpbmFsIHN0YXRpYyBpbnQgUkVOREVSX1dBSVRfTVMgPSAxMDAwOwotICBmaW5h
bCBzdGF0aWMgaW50IFNVUkZBQ0VfV0FJVF9NUyA9IDEwMDA7Ci0gIGZpbmFsIHN0YXRpYyBpbnQg
VEVTVF9GUkFNRV9XSURUSCA9IDQ7Ci0gIGZpbmFsIHN0YXRpYyBpbnQgVEVTVF9GUkFNRV9IRUlH
SFQgPSA0OwotICAvLyBTb21lIGFyYml0cmFyeSBmcmFtZXMuCi0gIGZpbmFsIHN0YXRpYyBCeXRl
QnVmZmVyW11bXSBURVNUX0ZSQU1FUyA9IHsKLSAgICAgIHsKLSAgICAgICAgICBCeXRlQnVmZmVy
LndyYXAobmV3IGJ5dGVbXSB7Ci0gICAgICAgICAgICAgIDExLCAtMTIsIDEzLCAtMTQsIC0xNSwg
MTYsIC0xNywgMTgsIDE5LCAtMTEwLCAxMTEsIC0xMTIsIC0xMTMsIDExNCwgLTExNSwgMTE2fSks
Ci0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gezExNywgMTE4LCAxMTksIDEy
MH0pLAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMjEsIDEyMiwgMTIz
LCAxMjR9KSwKLSAgICAgIH0sCi0gICAgICB7Ci0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5l
dyBieXRlW10gey0xMSwgLTEyLCAtMTMsIC0xNCwgLTE1LCAtMTYsIC0xNywgLTE4LCAtMTksIC0x
MTAsIC0xMTEsIC0xMTIsCi0gICAgICAgICAgICAgIC0xMTMsIC0xMTQsIC0xMTUsIC0xMTZ9KSwK
LSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7LTEyMSwgLTEyMiwgLTEyMywg
LTEyNH0pLAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHstMTE3LCAtMTE4
LCAtMTE5LCAtMTIwfSksCi0gICAgICB9LAotICAgICAgewotICAgICAgICAgIEJ5dGVCdWZmZXIu
d3JhcChuZXcgYnl0ZVtdIHstMTEsIC0xMiwgLTEzLCAtMTQsIC0xNSwgLTE2LCAtMTcsIC0xOCwg
LTE5LCAtMTEwLCAtMTExLCAtMTEyLAotICAgICAgICAgICAgICAtMTEzLCAtMTE0LCAtMTE1LCAt
MTE2fSksCi0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gezExNywgMTE4LCAx
MTksIDEyMH0pLAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMjEsIDEy
MiwgMTIzLCAxMjR9KSwKLSAgICAgIH0sCi0gIH07Ci0KLSAgcHJpdmF0ZSBjbGFzcyBUZXN0RnJh
bWVMaXN0ZW5lciBpbXBsZW1lbnRzIEVnbFJlbmRlcmVyLkZyYW1lTGlzdGVuZXIgewotICAgIGZp
bmFsIHByaXZhdGUgQXJyYXlMaXN0PEJpdG1hcD4gYml0bWFwcyA9IG5ldyBBcnJheUxpc3Q8Qml0
bWFwPigpOwotICAgIGJvb2xlYW4gYml0bWFwUmVjZWl2ZWQ7Ci0gICAgQml0bWFwIHN0b3JlZEJp
dG1hcDsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkZy
YW1lKEJpdG1hcCBiaXRtYXApIHsKLSAgICAgIGlmIChiaXRtYXBSZWNlaXZlZCkgewotICAgICAg
ICBmYWlsKCJVbmV4cGVjdGVkIGJpdG1hcCB3YXMgcmVjZWl2ZWQuIik7Ci0gICAgICB9Ci0KLSAg
ICAgIGJpdG1hcFJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgIHN0b3JlZEJpdG1hcCA9IGJpdG1hcDsK
LSAgICAgIG5vdGlmeSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVh
biB3YWl0Rm9yQml0bWFwKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgICBpZiAoIWJpdG1hcFJlY2VpdmVkKSB7Ci0gICAgICAgIHdhaXQodGltZW91dE1z
KTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBiaXRtYXBSZWNlaXZlZDsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgc3luY2hyb25pemVkIEJpdG1hcCByZXNldEFuZEdldEJpdG1hcCgpIHsKLSAgICAgIGJp
dG1hcFJlY2VpdmVkID0gZmFsc2U7Ci0gICAgICByZXR1cm4gc3RvcmVkQml0bWFwOwotICAgIH0K
LSAgfQotCi0gIGZpbmFsIFRlc3RGcmFtZUxpc3RlbmVyIHRlc3RGcmFtZUxpc3RlbmVyID0gbmV3
IFRlc3RGcmFtZUxpc3RlbmVyKCk7Ci0KLSAgRWdsUmVuZGVyZXIgZWdsUmVuZGVyZXI7Ci0gIENv
dW50RG93bkxhdGNoIHN1cmZhY2VSZWFkeUxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwot
ICBpbnQgb2VzVGV4dHVyZUlkOwotICBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZTsKLQot
ICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsK
LSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKGdldElu
c3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSwKLSAgICAgICAgdHJ1ZSAvKiBpbml0
aWFsaXplQXVkaW8gKi8sIHRydWUgLyogaW5pdGlhbGl6ZVZpZGVvICovLCB0cnVlIC8qIHZpZGVv
SHdBY2NlbGVyYXRpb24gKi8pOwotICAgIGVnbFJlbmRlcmVyID0gbmV3IEVnbFJlbmRlcmVyKCJU
ZXN0UmVuZGVyZXI6ICIpOwotICAgIGVnbFJlbmRlcmVyLmluaXQobnVsbCAvKiBzaGFyZWRDb250
ZXh0ICovLCBFZ2xCYXNlLkNPTkZJR19SR0JBLCBuZXcgR2xSZWN0RHJhd2VyKCkpOwotICAgIG9l
c1RleHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVf
RVhURVJOQUxfT0VTKTsKLSAgICBzdXJmYWNlVGV4dHVyZSA9IG5ldyBTdXJmYWNlVGV4dHVyZShv
ZXNUZXh0dXJlSWQpOwotICAgIHN1cmZhY2VUZXh0dXJlLnNldERlZmF1bHRCdWZmZXJTaXplKDEg
Lyogd2lkdGggKi8sIDEgLyogaGVpZ2h0ICovKTsKLSAgICBlZ2xSZW5kZXJlci5jcmVhdGVFZ2xT
dXJmYWNlKHN1cmZhY2VUZXh0dXJlKTsKLSAgICBlZ2xSZW5kZXJlci5zdXJmYWNlU2l6ZUNoYW5n
ZWQoMSAvKiB3aWR0aCAqLywgMSAvKiBoZWlnaHQgKi8pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIHN1cmZhY2VUZXh0dXJlLnJlbGVhc2UoKTsK
LSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxIC8qIG4gKi8sIG5ldyBpbnRbXSB7b2VzVGV4
dHVyZUlkfSwgMCAvKiBvZmZzZXQgKi8pOwotICAgIGVnbFJlbmRlcmVyLnJlbGVhc2UoKTsKLSAg
fQotCi0gIC8qKiBDaGVja3MgdGhlIGJpdG1hcCBpcyBub3QgbnVsbCBhbmQgdGhlIGNvcnJlY3Qg
c2l6ZS4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0JpdG1hcChCaXRtYXAgYml0bWFw
LCBmbG9hdCBzY2FsZSkgewotICAgIGFzc2VydE5vdE51bGwoYml0bWFwKTsKLSAgICBhc3NlcnRF
cXVhbHMoKGludCkgKFRFU1RfRlJBTUVfV0lEVEggKiBzY2FsZSksIGJpdG1hcC5nZXRXaWR0aCgp
KTsKLSAgICBhc3NlcnRFcXVhbHMoKGludCkgKFRFU1RfRlJBTUVfSEVJR0hUICogc2NhbGUpLCBi
aXRtYXAuZ2V0SGVpZ2h0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgbGluZWFyIHNhbXBs
aW5nIG9uIFUvViBwbGFuZSBvZiB0ZXN0IGRhdGEuCi0gICAqCi0gICAqIEBwYXJhbSBkYXRhIFBs
YW5lIGRhdGEgdG8gYmUgc2FtcGxlZCBmcm9tLgotICAgKiBAcGFyYW0gcGxhbmVXaWR0aCBXaWR0
aCBvZiB0aGUgcGxhbmUgZGF0YS4gVGhpcyBpcyBhbHNvIGFzc3VtZWQgdG8gYmUgdGhlIHN0cmlk
ZS4KLSAgICogQHBhcmFtIHBsYW5lSGVpZ2h0IEhlaWdodCBvZiB0aGUgcGxhbmUgZGF0YS4KLSAg
ICogQHBhcmFtIHggWC1jb29yZGluYXRlIGluIHJhbmdlIFswLCAxXS4KLSAgICogQHBhcmFtIHkg
WS1jb29yZGluYXRlIGluIHJhbmdlIFswLCAxXS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZs
b2F0IGxpbmVhclNhbXBsZSgKLSAgICAgIEJ5dGVCdWZmZXIgcGxhbmUsIGludCBwbGFuZVdpZHRo
LCBpbnQgcGxhbmVIZWlnaHQsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICBmaW5hbCBpbnQgc3Ry
aWRlID0gcGxhbmVXaWR0aDsKLQotICAgIGZpbmFsIGZsb2F0IGNvb3JkWCA9IHggKiBwbGFuZVdp
ZHRoOwotICAgIGZpbmFsIGZsb2F0IGNvb3JkWSA9IHkgKiBwbGFuZUhlaWdodDsKLQotICAgIGlu
dCBsb3dJbmRleFggPSAoaW50KSBNYXRoLmZsb29yKGNvb3JkWCAtIDAuNWYpOwotICAgIGludCBs
b3dJbmRleFkgPSAoaW50KSBNYXRoLmZsb29yKGNvb3JkWSAtIDAuNWYpOwotICAgIGludCBoaWdo
SW5kZXhYID0gbG93SW5kZXhYICsgMTsKLSAgICBpbnQgaGlnaEluZGV4WSA9IGxvd0luZGV4WSAr
IDE7Ci0KLSAgICBmaW5hbCBmbG9hdCBoaWdoV2VpZ2h0WCA9IGNvb3JkWCAtIGxvd0luZGV4WCAt
IDAuNWY7Ci0gICAgZmluYWwgZmxvYXQgaGlnaFdlaWdodFkgPSBjb29yZFkgLSBsb3dJbmRleFkg
LSAwLjVmOwotICAgIGZpbmFsIGZsb2F0IGxvd1dlaWdodFggPSAxZiAtIGhpZ2hXZWlnaHRYOwot
ICAgIGZpbmFsIGZsb2F0IGxvd1dlaWdodFkgPSAxZiAtIGhpZ2hXZWlnaHRZOwotCi0gICAgLy8g
Q2xhbXAgb24gdGhlIGVkZ2VzLgotICAgIGxvd0luZGV4WCA9IE1hdGgubWF4KDAsIGxvd0luZGV4
WCk7Ci0gICAgbG93SW5kZXhZID0gTWF0aC5tYXgoMCwgbG93SW5kZXhZKTsKLSAgICBoaWdoSW5k
ZXhYID0gTWF0aC5taW4ocGxhbmVXaWR0aCAtIDEsIGhpZ2hJbmRleFgpOwotICAgIGhpZ2hJbmRl
eFkgPSBNYXRoLm1pbihwbGFuZUhlaWdodCAtIDEsIGhpZ2hJbmRleFkpOwotCi0gICAgZmxvYXQg
bG93WVZhbHVlID0gKHBsYW5lLmdldChsb3dJbmRleFkgKiBzdHJpZGUgKyBsb3dJbmRleFgpICYg
MHhGRikgKiBsb3dXZWlnaHRYCi0gICAgICAgICsgKHBsYW5lLmdldChsb3dJbmRleFkgKiBzdHJp
ZGUgKyBoaWdoSW5kZXhYKSAmIDB4RkYpICogaGlnaFdlaWdodFg7Ci0gICAgZmxvYXQgaGlnaFlW
YWx1ZSA9IChwbGFuZS5nZXQoaGlnaEluZGV4WSAqIHN0cmlkZSArIGxvd0luZGV4WCkgJiAweEZG
KSAqIGxvd1dlaWdodFgKLSAgICAgICAgKyAocGxhbmUuZ2V0KGhpZ2hJbmRleFkgKiBzdHJpZGUg
KyBoaWdoSW5kZXhYKSAmIDB4RkYpICogaGlnaFdlaWdodFg7Ci0KLSAgICByZXR1cm4gKGxvd1dl
aWdodFkgKiBsb3dZVmFsdWUgKyBoaWdoV2VpZ2h0WSAqIGhpZ2hZVmFsdWUpIC8gMjU1ZjsKLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIGJ5dGUgc2F0dXJhdGVkRmxvYXRUb0J5dGUoZmxvYXQgYykg
ewotICAgIHJldHVybiAoYnl0ZSkgTWF0aC5yb3VuZCgyNTVmICogTWF0aC5tYXgoMGYsIE1hdGgu
bWluKDFmLCBjKSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnRzIHRlc3QgZGF0YSBZVVYg
ZnJhbWUgdG8gZXhwZWN0ZWQgUkdCQSBmcmFtZS4gVHJpZXMgdG8gbWF0Y2ggdGhlIGJlaGF2aW9y
IG9mIE9wZW5HTAotICAgKiBZVVYgZHJhd2VyIHNoYWRlci4gRG9lcyBsaW5lYXIgc2FtcGxpbmcg
b24gdGhlIFUtIGFuZCBWLXBsYW5lcy4KLSAgICoKLSAgICogQHBhcmFtIHl1dkZyYW1lIEFycmF5
IG9mIHNpemUgMyBjb250YWluaW5nIFktLCBVLSwgVi1wbGFuZXMgZm9yIGltYWdlIG9mIHNpemUK
LSAgICogICAgICAgICAgICAgICAgIChURVNUX0ZSQU1FX1dJRFRILCBURVNUX0ZSQU1FX0hFSUdI
VCkuIFUtIGFuZCBWLXBsYW5lcyBzaG91bGQgYmUgaGFsZiB0aGUgc2l6ZQotICAgKiAgICAgICAg
ICAgICAgICAgb2YgdGhlIFktcGxhbmUuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBieXRlW10g
Y29udmVydFlVVkZyYW1lVG9SR0JBKEJ5dGVCdWZmZXJbXSB5dXZGcmFtZSkgewotICAgIGZpbmFs
IGJ5dGVbXSBhcmdiRnJhbWUgPSBuZXcgYnl0ZVtURVNUX0ZSQU1FX1dJRFRIICogVEVTVF9GUkFN
RV9IRUlHSFQgKiA0XTsKLSAgICBmaW5hbCBpbnQgYXJnYlN0cmlkZSA9IFRFU1RfRlJBTUVfV0lE
VEggKiA0OwotICAgIGZpbmFsIGludCB5U3RyaWRlID0gVEVTVF9GUkFNRV9XSURUSDsKLQotICAg
IGZpbmFsIGludCB2U3RyaWRlID0gVEVTVF9GUkFNRV9XSURUSCAvIDI7Ci0KLSAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IFRFU1RfRlJBTUVfSEVJR0hUOyB5KyspIHsKLSAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgVEVTVF9GUkFNRV9XSURUSDsgeCsrKSB7Ci0gICAgICAgIGZpbmFsIGludCB4MiA9
IHggLyAyOwotICAgICAgICBmaW5hbCBpbnQgeTIgPSB5IC8gMjsKLQotICAgICAgICBmaW5hbCBm
bG9hdCB5QyA9ICh5dXZGcmFtZVswXS5nZXQoeSAqIHlTdHJpZGUgKyB4KSAmIDB4RkYpIC8gMjU1
ZjsKLSAgICAgICAgZmluYWwgZmxvYXQgdUMgPSBsaW5lYXJTYW1wbGUoeXV2RnJhbWVbMV0sIFRF
U1RfRlJBTUVfV0lEVEggLyAyLCBURVNUX0ZSQU1FX0hFSUdIVCAvIDIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh4ICsgMC41ZikgLyBURVNUX0ZSQU1FX1dJRFRILCAoeSArIDAuNWYp
IC8gVEVTVF9GUkFNRV9IRUlHSFQpCi0gICAgICAgICAgICAtIDAuNWY7Ci0gICAgICAgIGZpbmFs
IGZsb2F0IHZDID0gbGluZWFyU2FtcGxlKHl1dkZyYW1lWzJdLCBURVNUX0ZSQU1FX1dJRFRIIC8g
MiwgVEVTVF9GUkFNRV9IRUlHSFQgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
eCArIDAuNWYpIC8gVEVTVF9GUkFNRV9XSURUSCwgKHkgKyAwLjVmKSAvIFRFU1RfRlJBTUVfSEVJ
R0hUKQotICAgICAgICAgICAgLSAwLjVmOwotICAgICAgICBmaW5hbCBmbG9hdCByQyA9IHlDICsg
MS40MDNmICogdkM7Ci0gICAgICAgIGZpbmFsIGZsb2F0IGdDID0geUMgLSAwLjM0NGYgKiB1QyAt
IDAuNzE0ZiAqIHZDOwotICAgICAgICBmaW5hbCBmbG9hdCBiQyA9IHlDICsgMS43N2YgKiB1QzsK
LQotICAgICAgICBhcmdiRnJhbWVbeSAqIGFyZ2JTdHJpZGUgKyB4ICogNCArIDBdID0gc2F0dXJh
dGVkRmxvYXRUb0J5dGUockMpOwotICAgICAgICBhcmdiRnJhbWVbeSAqIGFyZ2JTdHJpZGUgKyB4
ICogNCArIDFdID0gc2F0dXJhdGVkRmxvYXRUb0J5dGUoZ0MpOwotICAgICAgICBhcmdiRnJhbWVb
eSAqIGFyZ2JTdHJpZGUgKyB4ICogNCArIDJdID0gc2F0dXJhdGVkRmxvYXRUb0J5dGUoYkMpOwot
ICAgICAgICBhcmdiRnJhbWVbeSAqIGFyZ2JTdHJpZGUgKyB4ICogNCArIDNdID0gKGJ5dGUpIDI1
NTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYXJnYkZyYW1lOwotICB9Ci0KLSAgLyoq
IENoZWNrcyB0aGF0IHRoZSBiaXRtYXAgY29udGVudCBtYXRjaGVzIHRoZSB0ZXN0IGZyYW1lIHdp
dGggdGhlIGdpdmVuIGluZGV4LiAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrQml0bWFw
Q29udGVudChCaXRtYXAgYml0bWFwLCBpbnQgZnJhbWUpIHsKLSAgICBjaGVja0JpdG1hcChiaXRt
YXAsIDFmKTsKLQotICAgIGJ5dGVbXSBleHBlY3RlZFJHQkEgPSBjb252ZXJ0WVVWRnJhbWVUb1JH
QkEoVEVTVF9GUkFNRVNbZnJhbWVdKTsKLSAgICBCeXRlQnVmZmVyIGJpdG1hcEJ1ZmZlciA9IEJ5
dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoYml0bWFwLmdldEJ5dGVDb3VudCgpKTsKLSAgICBiaXRt
YXAuY29weVBpeGVsc1RvQnVmZmVyKGJpdG1hcEJ1ZmZlcik7Ci0KLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGV4cGVjdGVkUkdCQS5sZW5ndGg7IGkrKykgewotICAgICAgaW50IGV4cGVjdGVkID0g
ZXhwZWN0ZWRSR0JBW2ldICYgMHhGRjsKLSAgICAgIGludCB2YWx1ZSA9IGJpdG1hcEJ1ZmZlci5n
ZXQoaSkgJiAweEZGOwotICAgICAgLy8gRHVlIHRvIHVua25vd24gY29udmVyc2lvbiBkaWZmZXJl
bmNlcyBjaGVjayB2YWx1ZSBtYXRjaGVzICstMS4KLSAgICAgIGlmIChNYXRoLmFicyh2YWx1ZSAt
IGV4cGVjdGVkKSA+IDEpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkV4cGVjdGVkIGJpdG1h
cCBjb250ZW50OiAiICsgQXJyYXlzLnRvU3RyaW5nKGV4cGVjdGVkUkdCQSkpOwotICAgICAgICBM
b2dnaW5nLmQoVEFHLCAiQml0bWFwIGNvbnRlbnQ6ICIgKyBBcnJheXMudG9TdHJpbmcoYml0bWFw
QnVmZmVyLmFycmF5KCkpKTsKLSAgICAgICAgZmFpbCgiRnJhbWUgZG9lc24ndCBtYXRjaCBvcmln
aW5hbCBmcmFtZSBvbiBieXRlICIgKyBpICsgIi4gRXhwZWN0ZWQ6ICIgKyBleHBlY3RlZAotICAg
ICAgICAgICAgKyAiIFJlc3VsdDogIiArIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICAvKiogVGVsbHMgZWdsUmVuZGVyZXIgdG8gcmVuZGVyIHRlc3QgZnJhbWUgd2l0aCBnaXZlbiBp
bmRleC4gKi8KLSAgcHJpdmF0ZSB2b2lkIGZlZWRGcmFtZShpbnQgaSkgewotICAgIGVnbFJlbmRl
cmVyLnJlbmRlckZyYW1lKG5ldyBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZShURVNUX0ZSQU1FX1dJ
RFRILCBURVNUX0ZSQU1FX0hFSUdIVCwgMCwKLSAgICAgICAgbmV3IGludFtdIHtURVNUX0ZSQU1F
X1dJRFRILCBURVNUX0ZSQU1FX1dJRFRIIC8gMiwgVEVTVF9GUkFNRV9XSURUSCAvIDJ9LCBURVNU
X0ZSQU1FU1tpXSwKLSAgICAgICAgMCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0QWRkRnJhbWVMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotICAgIGVnbFJl
bmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVuZXIsIDBmIC8qIHNjYWxlRmFj
dG9yICovKTsKLSAgICBmZWVkRnJhbWUoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVMaXN0
ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgYXNzZXJ0TnVsbCh0ZXN0
RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpKTsKLSAgICBlZ2xSZW5kZXJlci5hZGRG
cmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCAwZiAvKiBzY2FsZUZhY3RvciAqLyk7Ci0g
ICAgZmVlZEZyYW1lKDEpOwotICAgIGFzc2VydFRydWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZv
ckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICAgIGFzc2VydE51bGwodGVzdEZyYW1lTGlzdGVu
ZXIucmVzZXRBbmRHZXRCaXRtYXAoKSk7Ci0gICAgZmVlZEZyYW1lKDIpOwotICAgIC8vIENoZWNr
IHdlIGdldCBubyBtb3JlIGJpdG1hcHMgdGhhbiB0d28uCi0gICAgYXNzZXJ0RmFsc2UodGVzdEZy
YW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICB9Ci0KLSAgQFNt
YWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkRnJhbWVMaXN0ZW5lckJpdG1hcCgpIHRocm93
cyBFeGNlcHRpb24gewotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1l
TGlzdGVuZXIsIDFmIC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJhbWUoMCk7Ci0gICAg
YXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01T
KSk7Ci0gICAgY2hlY2tCaXRtYXBDb250ZW50KHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0
Qml0bWFwKCksIDApOwotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1l
TGlzdGVuZXIsIDFmIC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJhbWUoMSk7Ci0gICAg
YXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01T
KSk7Ci0gICAgY2hlY2tCaXRtYXBDb250ZW50KHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0
Qml0bWFwKCksIDEpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0QWRk
RnJhbWVMaXN0ZW5lckJpdG1hcFNjYWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIGZsb2F0IHNjYWxlID0gaSAqIDAuNWYgKyAw
LjVmOwotICAgICAgZWdsUmVuZGVyZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0RnJhbWVMaXN0ZW5l
ciwgc2NhbGUpOwotICAgICAgZmVlZEZyYW1lKGkpOwotICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0RnJh
bWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgICBjaGVja0Jp
dG1hcCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpLCBzY2FsZSk7Ci0gICAg
fQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0dsUmVjdERyYXdlclRlc3QuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0dsUmVjdERyYXdlclRlc3QuamF2YQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0LmphdmEJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwyOTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLXBhY2th
Z2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7
Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rp
dml0eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlv
bi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlv
bi5TbWFsbFRlc3Q7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEu
dXRpbC5SYW5kb207Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBHbFJlY3REcmF3ZXJUZXN0IGV4dGVu
ZHMgQWN0aXZpdHlUZXN0Q2FzZSB7Ci0gIC8vIFJlc29sdXRpb24gb2YgdGhlIHRlc3QgaW1hZ2Uu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSURUSCA9IDE2OwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgSEVJR0hUID0gMTY7Ci0gIC8vIFNlZWQgZm9yIHJhbmRvbSBwaXhlbCBjcmVh
dGlvbi4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFRUQgPSA0MjsKLSAgLy8gV2hlbiBj
b21wYXJpbmcgcGl4ZWxzLCBhbGxvdyBzb21lIHNsYWNrIGZvciBmbG9hdCBhcml0aG1ldGljIGFu
ZCBpbnRlZ2VyIHJvdW5kaW5nLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBNQVhfRElG
RiA9IDEuNWY7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgbm9ybWFsaXplZEJ5dGUoYnl0ZSBi
KSB7Ci0gICAgcmV0dXJuIChiICYgMHhGRikgLyAyNTUuMGY7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBmbG9hdCBzYXR1cmF0ZWRDb252ZXJ0KGZsb2F0IGMpIHsKLSAgICByZXR1cm4gMjU1LjBm
ICogTWF0aC5tYXgoMCwgTWF0aC5taW4oYywgMSkpOwotICB9Ci0KLSAgLy8gQXNzZXJ0IFJHQiBC
eXRlQnVmZmVycyBhcmUgcGl4ZWwgcGVyZmVjdCBpZGVudGljYWwuCi0gIHByaXZhdGUgc3RhdGlj
IHZvaWQgYXNzZXJ0RXF1YWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgQnl0ZUJ1ZmZlciBhY3R1
YWwsIEJ5dGVCdWZmZXIgZXhwZWN0ZWQpIHsKLSAgICBhY3R1YWwucmV3aW5kKCk7Ci0gICAgZXhw
ZWN0ZWQucmV3aW5kKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFjdHVhbC5yZW1haW5pbmcoKSwgd2lk
dGggKiBoZWlnaHQgKiAzKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQucmVtYWluaW5nKCks
IHdpZHRoICogaGVpZ2h0ICogMyk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsr
eSkgewotICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgIGZp
bmFsIGludCBhY3R1YWxSID0gYWN0dWFsLmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwgaW50
IGFjdHVhbEcgPSBhY3R1YWwuZ2V0KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgYWN0dWFs
QiA9IGFjdHVhbC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBleHBlY3RlZFIgPSBl
eHBlY3RlZC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBleHBlY3RlZEcgPSBleHBl
Y3RlZC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBleHBlY3RlZEIgPSBleHBlY3Rl
ZC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGlmIChhY3R1YWxSICE9IGV4cGVjdGVkUiB8fCBhY3R1
YWxHICE9IGV4cGVjdGVkRyB8fCBhY3R1YWxCICE9IGV4cGVjdGVkQikgewotICAgICAgICAgIGZh
aWwoIkJ5dGVCdWZmZXJzIG9mIHNpemUgIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIiBub3Qg
ZXF1YWwgYXQgcG9zaXRpb24gIgotICAgICAgICAgICAgICArICIoIiArIHggKyAiLCAiICsgeSAr
ICIpLiBFeHBlY3RlZCBjb2xvciAoUixHLEIpOiAiCi0gICAgICAgICAgICAgICsgIigiICsgZXhw
ZWN0ZWRSICsgIiwgIiArIGV4cGVjdGVkRyArICIsICIgKyBleHBlY3RlZEIgKyAiKSIKLSAgICAg
ICAgICAgICAgKyAiIGJ1dCB3YXM6ICIKLSAgICAgICAgICAgICAgKyAiKCIgKyBhY3R1YWxSICsg
IiwgIiArIGFjdHVhbEcgKyAiLCAiICsgYWN0dWFsQiArICIpLiIpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29udmVydCBSR0JBIEJ5dGVCdWZmZXIgdG8gUkdCIEJ5
dGVCdWZmZXIuCi0gIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXIgc3RyaXBBbHBoYUNoYW5uZWwo
Qnl0ZUJ1ZmZlciByZ2JhQnVmZmVyKSB7Ci0gICAgcmdiYUJ1ZmZlci5yZXdpbmQoKTsKLSAgICBh
c3NlcnRFcXVhbHMocmdiYUJ1ZmZlci5yZW1haW5pbmcoKSAlIDQsIDApOwotICAgIGZpbmFsIGlu
dCBudW1iZXJPZlBpeGVscyA9IHJnYmFCdWZmZXIucmVtYWluaW5nKCkgLyA0OwotICAgIGZpbmFs
IEJ5dGVCdWZmZXIgcmdiQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChudW1iZXJP
ZlBpeGVscyAqIDMpOwotICAgIHdoaWxlIChyZ2JhQnVmZmVyLmhhc1JlbWFpbmluZygpKSB7Ci0g
ICAgICAvLyBDb3B5IFJHQi4KLSAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwg
MzsgKytjaGFubmVsKSB7Ci0gICAgICAgIHJnYkJ1ZmZlci5wdXQocmdiYUJ1ZmZlci5nZXQoKSk7
Ci0gICAgICB9Ci0gICAgICAvLyBEcm9wIGFscGhhLgotICAgICAgcmdiYUJ1ZmZlci5nZXQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHJnYkJ1ZmZlcjsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFJnYlJlbmRlcmluZygpIHsKLSAgICAvLyBDcmVhdGUgRUdMIGJhc2Ugd2l0
aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4KLSAgICBmaW5hbCBFZ2xCYXNlIGVn
bEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhFTF9CVUZGRVIp
OwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2UoV0lEVEgsIEhFSUdIVCk7Ci0gICAg
ZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotCi0gICAgLy8gQ3JlYXRlIFJHQiBieXRlIGJ1ZmZlciBw
bGFuZSB3aXRoIHJhbmRvbSBjb250ZW50LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiUGxhbmUg
PSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRIICogSEVJR0hUICogMyk7Ci0gICAgZmlu
YWwgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oU0VFRCk7Ci0gICAgcmFuZG9tLm5leHRCeXRl
cyhyZ2JQbGFuZS5hcnJheSgpKTsKLQotICAgIC8vIFVwbG9hZCB0aGUgUkdCIGJ5dGUgYnVmZmVy
IGRhdGEgYXMgYSB0ZXh0dXJlLgotICAgIGZpbmFsIGludCByZ2JUZXh0dXJlID0gR2xVdGlsLmdl
bmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgR0xFUzIwLmdsQWN0aXZl
VGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdM
RVMyMC5HTF9URVhUVVJFXzJELCByZ2JUZXh0dXJlKTsKLSAgICBHTEVTMjAuZ2xUZXhJbWFnZTJE
KEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfUkdCLCBXSURUSCwgSEVJR0hULCAw
LCBHTEVTMjAuR0xfUkdCLAotICAgICAgICBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgcmdiUGxh
bmUpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xUZXhJbWFnZTJEIik7Ci0KLSAg
ICAvLyBEcmF3IHRoZSBSR0IgZnJhbWUgb250byB0aGUgcGl4ZWwgYnVmZmVyLgotICAgIGZpbmFs
IEdsUmVjdERyYXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRy
YXdSZ2IocmdiVGV4dHVyZSwgUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKSwgV0lEVEgs
IEhFSUdIVCwgMCAvKiB2aWV3cG9ydFggKi8sCi0gICAgICAgIDAgLyogdmlld3BvcnRZICovLCBX
SURUSCwgSEVJR0hUKTsKLQotICAgIC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4gdGhlIHBpeGVs
IGJ1ZmZlciBhcyBSR0JBLiBOb3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwgZS5nLiBOZXh1
cyA5LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiYURhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRl
RGlyZWN0KFdJRFRIICogSEVJR0hUICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAw
LCBXSURUSCwgSEVJR0hULCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUs
IHJnYmFEYXRhKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIp
OwotCi0gICAgLy8gQXNzZXJ0IHJlbmRlcmVkIGltYWdlIGlzIHBpeGVsIHBlcmZlY3QgdG8gc291
cmNlIFJHQi4KLSAgICBhc3NlcnRFcXVhbHMoV0lEVEgsIEhFSUdIVCwgc3RyaXBBbHBoYUNoYW5u
ZWwocmdiYURhdGEpLCByZ2JQbGFuZSk7Ci0KLSAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgIEdM
RVMyMC5nbERlbGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7cmdiVGV4dHVyZX0sIDApOwotICAg
IGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0WXV2UmVuZGVyaW5nKCkgewotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwg
YnVmZmVyIGFzIGRpc3BsYXkgb3V0cHV0LgotICAgIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2Uu
Y3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5j
cmVhdGVQYnVmZmVyU3VyZmFjZShXSURUSCwgSEVJR0hUKTsKLSAgICBlZ2xCYXNlLm1ha2VDdXJy
ZW50KCk7Ci0KLSAgICAvLyBDcmVhdGUgWVVWIGJ5dGUgYnVmZmVyIHBsYW5lcyB3aXRoIHJhbmRv
bSBjb250ZW50LgotICAgIGZpbmFsIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1
ZmZlclszXTsKLSAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShTRUVEKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgeXV2UGxhbmVzW2ldID0gQnl0
ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCk7Ci0gICAgICByYW5kb20ubmV4
dEJ5dGVzKHl1dlBsYW5lc1tpXS5hcnJheSgpKTsKLSAgICB9Ci0KLSAgICAvLyBHZW5lcmF0ZSAz
IHRleHR1cmUgaWRzIGZvciBZL1UvVi4KLSAgICBmaW5hbCBpbnQgeXV2VGV4dHVyZXNbXSA9IG5l
dyBpbnRbM107Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgIHl1dlRl
eHR1cmVzW2ldID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7
Ci0gICAgfQotCi0gICAgLy8gVXBsb2FkIHRoZSBZVVYgYnl0ZSBidWZmZXIgZGF0YSBhcyB0ZXh0
dXJlcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgR0xFUzIwLmds
QWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTAgKyBpKTsKLSAgICAgIEdMRVMyMC5nbEJp
bmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCB5dXZUZXh0dXJlc1tpXSk7Ci0gICAgICBH
TEVTMjAuZ2xUZXhJbWFnZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfTFVN
SU5BTkNFLCBXSURUSCwgSEVJR0hULCAwLAotICAgICAgICAgIEdMRVMyMC5HTF9MVU1JTkFOQ0Us
IEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCB5dXZQbGFuZXNbaV0pOwotICAgICAgR2xVdGlsLmNo
ZWNrTm9HTEVTMkVycm9yKCJnbFRleEltYWdlMkQiKTsKLSAgICB9Ci0KLSAgICAvLyBEcmF3IHRo
ZSBZVVYgZnJhbWUgb250byB0aGUgcGl4ZWwgYnVmZmVyLgotICAgIGZpbmFsIEdsUmVjdERyYXdl
ciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdZdXYoeXV2VGV4
dHVyZXMsIFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCksIFdJRFRILCBIRUlHSFQsIDAg
Lyogdmlld3BvcnRYICovLAotICAgICAgICAwIC8qIHZpZXdwb3J0WSAqLywgV0lEVEgsIEhFSUdI
VCk7Ci0KLSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIgYXMg
UkdCQS4gTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUuZy4gTmV4dXMgOS4KLSAgICBm
aW5hbCBCeXRlQnVmZmVyIGRhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRIICog
SEVJR0hUICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCBXSURUSCwgSEVJR0hU
LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpOwotICAgIEds
VXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xSZWFkUGl4ZWxzIik7Ci0KLSAgICAvLyBDb21wYXJl
IHRoZSBZVVYgZGF0YSB3aXRoIHRoZSBSR0JBIHJlc3VsdC4KLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IEhFSUdIVDsgKyt5KSB7Ci0gICAgICBmb3IgKGludCB4ID0gMDsgeCA8IFdJRFRIOyArK3gp
IHsKLSAgICAgICAgLy8gWVVWIGNvbG9yIHNwYWNlLiBZIGluIFswLCAxXSwgVVYgaW4gWy0wLjUs
IDAuNV0uIFRoZSBjb25zdGFudHMgYXJlIHRha2VuIGZyb20gdGhlIFlVVgotICAgICAgICAvLyBm
cmFnbWVudCBzaGFkZXIgY29kZSBpbiBHbFJlY3REcmF3ZXIuCi0gICAgICAgIGZpbmFsIGZsb2F0
IHlfbHVtYSA9IG5vcm1hbGl6ZWRCeXRlKHl1dlBsYW5lc1swXS5nZXQoKSk7Ci0gICAgICAgIGZp
bmFsIGZsb2F0IHVfY2hyb21hID0gbm9ybWFsaXplZEJ5dGUoeXV2UGxhbmVzWzFdLmdldCgpKSAt
IDAuNWY7Ci0gICAgICAgIGZpbmFsIGZsb2F0IHZfY2hyb21hID0gbm9ybWFsaXplZEJ5dGUoeXV2
UGxhbmVzWzJdLmdldCgpKSAtIDAuNWY7Ci0gICAgICAgIC8vIEV4cGVjdGVkIGNvbG9yIGluIHVu
cm91bmRlZCBSR0IgWzAuMGYsIDI1NS4wZl0uCi0gICAgICAgIGZpbmFsIGZsb2F0IGV4cGVjdGVk
UmVkID0gc2F0dXJhdGVkQ29udmVydCh5X2x1bWEgKyAxLjQwM2YgKiB2X2Nocm9tYSk7Ci0gICAg
ICAgIGZpbmFsIGZsb2F0IGV4cGVjdGVkR3JlZW4gPQotICAgICAgICAgICAgc2F0dXJhdGVkQ29u
dmVydCh5X2x1bWEgLSAwLjM0NGYgKiB1X2Nocm9tYSAtIDAuNzE0ZiAqIHZfY2hyb21hKTsKLSAg
ICAgICAgZmluYWwgZmxvYXQgZXhwZWN0ZWRCbHVlID0gc2F0dXJhdGVkQ29udmVydCh5X2x1bWEg
KyAxLjc3ZiAqIHVfY2hyb21hKTsKLQotICAgICAgICAvLyBBY3R1YWwgY29sb3IgaW4gUkdCODg4
OC4KLSAgICAgICAgZmluYWwgaW50IGFjdHVhbFJlZCA9IGRhdGEuZ2V0KCkgJiAweEZGOwotICAg
ICAgICBmaW5hbCBpbnQgYWN0dWFsR3JlZW4gPSBkYXRhLmdldCgpICYgMHhGRjsKLSAgICAgICAg
ZmluYWwgaW50IGFjdHVhbEJsdWUgPSBkYXRhLmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwg
aW50IGFjdHVhbEFscGhhID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0KLSAgICAgICAgLy8gQXNzZXJ0
IHJlbmRlcmVkIGltYWdlIGlzIGNsb3NlIHRvIHBpeGVsIHBlcmZlY3QgZnJvbSBzb3VyY2UgWVVW
LgotICAgICAgICBhc3NlcnRUcnVlKE1hdGguYWJzKGFjdHVhbFJlZCAtIGV4cGVjdGVkUmVkKSA8
IE1BWF9ESUZGKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShNYXRoLmFicyhhY3R1YWxHcmVlbiAtIGV4
cGVjdGVkR3JlZW4pIDwgTUFYX0RJRkYpOwotICAgICAgICBhc3NlcnRUcnVlKE1hdGguYWJzKGFj
dHVhbEJsdWUgLSBleHBlY3RlZEJsdWUpIDwgTUFYX0RJRkYpOwotICAgICAgICBhc3NlcnRFcXVh
bHMoYWN0dWFsQWxwaGEsIDI1NSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZHJhd2VyLnJlbGVh
c2UoKTsKLSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygzLCB5dXZUZXh0dXJlcywgMCk7Ci0g
ICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHB1cnBvc2UgaGVy
ZSBpcyB0byB0ZXN0IEdsUmVjdERyYXdlci5vZXNEcmF3KCkuIFVuZm9ydHVuYXRlbHksIHRoZXJl
IGlzIG5vIGVhc3kgd2F5IHRvCi0gICAqIGNyZWF0ZSBhbiBPRVMgdGV4dHVyZSwgd2hpY2ggaXMg
bmVlZGVkIGZvciBpbnB1dCB0byBvZXNEcmF3KCkuIE1vc3Qgb2YgdGhlIHRlc3QgaXMgY29uY2Vy
bmVkCi0gICAqIHdpdGggY3JlYXRpbmcgT0VTIHRleHR1cmVzIGluIHRoZSBmb2xsb3dpbmcgd2F5
OgotICAgKiAgLSBDcmVhdGUgU3VyZmFjZVRleHR1cmUgd2l0aCBoZWxwIGZyb20gU3VyZmFjZVRl
eHR1cmVIZWxwZXIuCi0gICAqICAtIENyZWF0ZSBhbiBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VU
ZXh0dXJlIGFzIEVHTFN1cmZhY2UuCi0gICAqICAtIFVwbG9hZCBSR0IgdGV4dHVyZSB3aXRoIGtu
b3duIGNvbnRlbnQuCi0gICAqICAtIERyYXcgdGhlIFJHQiB0ZXh0dXJlIG9udG8gdGhlIEVnbEJh
c2Ugd2l0aCB0aGUgU3VyZmFjZVRleHR1cmUgYXMgdGFyZ2V0LgotICAgKiAgLSBXYWl0IGZvciBh
biBPRVMgdGV4dHVyZSB0byBiZSBwcm9kdWNlZC4KLSAgICogVGhlIGFjdHVhbCBvZXNEcmF3KCkg
dGVzdCBpcyB0aGlzOgotICAgKiAgLSBDcmVhdGUgYW4gRWdsQmFzZSB3aXRoIGEgcGl4ZWwgYnVm
ZmVyIGFzIHRhcmdldC4KLSAgICogIC0gUmVuZGVyIHRoZSBPRVMgdGV4dHVyZSBvbnRvIHRoZSBw
aXhlbCBidWZmZXIuCi0gICAqICAtIFJlYWQgYmFjayB0aGUgcGl4ZWwgYnVmZmVyIGFuZCBjb21w
YXJlIGl0IHdpdGggdGhlIGtub3duIFJHQiBkYXRhLgotICAgKi8KLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdE9lc1JlbmRlcmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgLyoqCi0gICAgICogU3R1YiBjbGFzcyB0byBjb252ZXJ0IFJHQiBCeXRlQnVmZmVy
cyB0byBPRVMgdGV4dHVyZXMgYnkgZHJhd2luZyBvbnRvIGEgU3VyZmFjZVRleHR1cmUuCi0gICAg
ICovCi0gICAgY2xhc3MgU3R1Yk9lc1RleHR1cmVQcm9kdWNlciB7Ci0gICAgICBwcml2YXRlIGZp
bmFsIEVnbEJhc2UgZWdsQmFzZTsKLSAgICAgIHByaXZhdGUgZmluYWwgR2xSZWN0RHJhd2VyIGRy
YXdlcjsKLSAgICAgIHByaXZhdGUgZmluYWwgaW50IHJnYlRleHR1cmU7Ci0KLSAgICAgIHB1Ymxp
YyBTdHViT2VzVGV4dHVyZVByb2R1Y2VyKAotICAgICAgICAgIEVnbEJhc2UuQ29udGV4dCBzaGFy
ZWRDb250ZXh0LCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KSB7Ci0gICAgICAgIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShzaGFyZWRDb250ZXh0
LCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7Ci0gICAgICAgIHN1cmZhY2VUZXh0dXJlLnNldERlZmF1
bHRCdWZmZXJTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZh
Y2Uoc3VyZmFjZVRleHR1cmUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNl
V2lkdGgoKSwgd2lkdGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlSGVp
Z2h0KCksIGhlaWdodCk7Ci0KLSAgICAgICAgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwot
Ci0gICAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgcmdiVGV4dHVyZSA9IEds
VXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgICAgfQotCi0g
ICAgICBwdWJsaWMgdm9pZCBkcmF3KEJ5dGVCdWZmZXIgcmdiUGxhbmUpIHsKLSAgICAgICAgZWds
QmFzZS5tYWtlQ3VycmVudCgpOwotCi0gICAgICAgIC8vIFVwbG9hZCBSR0IgZGF0YSB0byB0ZXh0
dXJlLgotICAgICAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7
Ci0gICAgICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCByZ2JU
ZXh0dXJlKTsKLSAgICAgICAgR0xFUzIwLmdsVGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8y
RCwgMCwgR0xFUzIwLkdMX1JHQiwgV0lEVEgsIEhFSUdIVCwgMCwgR0xFUzIwLkdMX1JHQiwKLSAg
ICAgICAgICAgIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JQbGFuZSk7Ci0gICAgICAgIC8v
IERyYXcgdGhlIFJHQiBkYXRhIG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgICAgICBkcmF3
ZXIuZHJhd1JnYihyZ2JUZXh0dXJlLCBSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpLCBX
SURUSCwgSEVJR0hULAotICAgICAgICAgICAgMCAvKiB2aWV3cG9ydFggKi8sIDAgLyogdmlld3Bv
cnRZICovLCBXSURUSCwgSEVJR0hUKTsKLSAgICAgICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwot
ICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBlZ2xCYXNl
Lm1ha2VDdXJyZW50KCk7Ci0gICAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgICAgIEdMRVMy
MC5nbERlbGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7cmdiVGV4dHVyZX0sIDApOwotICAgICAg
ICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgRUdM
IGJhc2Ugd2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4KLSAgICBmaW5hbCBF
Z2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhF
TF9CVUZGRVIpOwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2UoV0lEVEgsIEhFSUdI
VCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2VzIGZvciBnZW5lcmF0aW5nIE9FUyB0ZXh0dXJl
cy4KLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9
IFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVs
cGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7
Ci0gICAgZmluYWwgU3R1Yk9lc1RleHR1cmVQcm9kdWNlciBvZXNQcm9kdWNlciA9IG5ldyBTdHVi
T2VzVGV4dHVyZVByb2R1Y2VyKAotICAgICAgICBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCks
IHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCksIFdJRFRILCBIRUlHSFQp
OwotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5Nb2NrVGV4dHVyZUxpc3RlbmVy
IGxpc3RlbmVyID0KLSAgICAgICAgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5Nb2NrVGV4
dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmco
bGlzdGVuZXIpOwotCi0gICAgLy8gQ3JlYXRlIFJHQiBieXRlIGJ1ZmZlciBwbGFuZSB3aXRoIHJh
bmRvbSBjb250ZW50LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiUGxhbmUgPSBCeXRlQnVmZmVy
LmFsbG9jYXRlRGlyZWN0KFdJRFRIICogSEVJR0hUICogMyk7Ci0gICAgZmluYWwgUmFuZG9tIHJh
bmRvbSA9IG5ldyBSYW5kb20oU0VFRCk7Ci0gICAgcmFuZG9tLm5leHRCeXRlcyhyZ2JQbGFuZS5h
cnJheSgpKTsKLQotICAgIC8vIERyYXcgdGhlIGZyYW1lIGFuZCBibG9jayB1bnRpbCBhbiBPRVMg
dGV4dHVyZSBpcyBkZWxpdmVyZWQuCi0gICAgb2VzUHJvZHVjZXIuZHJhdyhyZ2JQbGFuZSk7Ci0g
ICAgbGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKCk7Ci0KLSAgICAvLyBSZWFsIHRlc3Qgc3RhcnRz
IGhlcmUuCi0gICAgLy8gRHJhdyB0aGUgT0VTIHRleHR1cmUgb24gdGhlIHBpeGVsIGJ1ZmZlci4K
LSAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdl
ciA9IG5ldyBHbFJlY3REcmF3ZXIoKTsKLSAgICBkcmF3ZXIuZHJhd09lcyhsaXN0ZW5lci5vZXNU
ZXh0dXJlSWQsIGxpc3RlbmVyLnRyYW5zZm9ybU1hdHJpeCwgV0lEVEgsIEhFSUdIVCwKLSAgICAg
ICAgMCAvKiB2aWV3cG9ydFggKi8sIDAgLyogdmlld3BvcnRZICovLCBXSURUSCwgSEVJR0hUKTsK
LQotICAgIC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4gdGhlIHBpeGVsIGJ1ZmZlciBhcyBSR0JB
LiBOb3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwgZS5nLiBOZXh1cyA5LgotICAgIGZpbmFs
IEJ5dGVCdWZmZXIgcmdiYURhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRIICog
SEVJR0hUICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCBXSURUSCwgSEVJR0hU
LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYmFEYXRhKTsKLSAg
ICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIpOwotCi0gICAgLy8gQXNz
ZXJ0IHJlbmRlcmVkIGltYWdlIGlzIHBpeGVsIHBlcmZlY3QgdG8gc291cmNlIFJHQi4KLSAgICBh
c3NlcnRFcXVhbHMoV0lEVEgsIEhFSUdIVCwgc3RyaXBBbHBoYUNoYW5uZWwocmdiYURhdGEpLCBy
Z2JQbGFuZSk7Ci0KLSAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVs
cGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgIG9lc1Byb2R1Y2VyLnJlbGVhc2UoKTsKLSAg
ICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlclRl
c3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0Vu
Y29kZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTWVk
aWFDb2RlY1ZpZGVvRW5jb2RlclRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1OCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3Jn
LndlYnJ0Yy5NZWRpYUNvZGVjVmlkZW9FbmNvZGVyLk91dHB1dEJ1ZmZlckluZm87Ci0KLWltcG9y
dCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdM
RVMxMUV4dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9ydCBh
bmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFu
ZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi1AVGFyZ2V0
QXBpKEJ1aWxkLlZFUlNJT05fQ09ERVMuSUNFX0NSRUFNX1NBTkRXSUNIX01SMSkKLXB1YmxpYyBm
aW5hbCBjbGFzcyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyVGVzdCBleHRlbmRzIEFjdGl2aXR5VGVz
dENhc2UgewotICBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyVGVzdCI7Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEluaXRp
YWxpemVVc2luZ0J5dGVCdWZmZXIoKSB7Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNvZGVy
LmlzVnA4SHdTdXBwb3J0ZWQoKSkgewotICAgICAgTG9nLmkoVEFHLCAiSGFyZHdhcmUgZG9lcyBu
b3Qgc3VwcG9ydCBWUDggZW5jb2RpbmcsIHNraXBwaW5nIHRlc3RJbml0UmVsZWFzZVVzaW5nQnl0
ZUJ1ZmZlciIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyIGVuY29kZXIgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpOwotICAgIGFzc2VydFRy
dWUoZW5jb2Rlci5pbml0RW5jb2RlKAotICAgICAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLlZp
ZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCwgNjQwLCA0ODAsIDMwMCwgMzAsIG51bGwpKTsK
LSAgICBlbmNvZGVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0
YXRpYyB2b2lkIHRlc3RJbml0aWxpemVVc2luZ1RleHR1cmVzKCkgewotICAgIGlmICghTWVkaWFD
b2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpKSB7Ci0gICAg
ICBMb2cuaShUQUcsICJoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFZQOCBlbmNvZGluZywgc2tp
cHBpbmcgdGVzdEVuY29kZXJVc2luZ1RleHR1cmVzIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIEVnbEJhc2UxNCBlZ2xCYXNlID0gbmV3IEVnbEJhc2UxNChudWxsLCBFZ2xCYXNlLkNPTkZJ
R19QTEFJTik7Ci0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlh
Q29kZWNWaWRlb0VuY29kZXIoKTsKLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZShN
ZWRpYUNvZGVjVmlkZW9FbmNvZGVyLlZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCwgNjQw
LCA0ODAsCi0gICAgICAgIDMwMCwgMzAsIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSkpOwot
ICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAg
QFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEluaXRpYWxpemVVc2luZ0J5dGVC
dWZmZXJSZUluaXRpbGl6ZVVzaW5nVGV4dHVyZXMoKSB7Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyLmlzVnA4SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5p
KFRBRywgImhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgVlA4IGVuY29kaW5nLCBza2lwcGluZyB0
ZXN0RW5jb2RlclVzaW5nVGV4dHVyZXMiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTWVk
aWFDb2RlY1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIo
KTsKLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZSgKLSAgICAgICAgTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2Rlci5WaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgsIDY0MCwgNDgwLCAz
MDAsIDMwLCBudWxsKSk7Ci0gICAgZW5jb2Rlci5yZWxlYXNlKCk7Ci0gICAgRWdsQmFzZTE0IGVn
bEJhc2UgPSBuZXcgRWdsQmFzZTE0KG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBh
c3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZShNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLlZpZGVv
Q29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCwgNjQwLCA0ODAsCi0gICAgICAgIDMwMCwgMzAsIGVn
bEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSkpOwotICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAg
IGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGlj
IHZvaWQgdGVzdEVuY29kZXJVc2luZ0J5dGVCdWZmZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVk
KCkpIHsKLSAgICAgIExvZy5pKFRBRywgIkhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgVlA4IGVu
Y29kaW5nLCBza2lwcGluZyB0ZXN0RW5jb2RlclVzaW5nQnl0ZUJ1ZmZlciIpOwotICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGZpbmFsIGludCB3aWR0aCA9IDY0MDsKLSAgICBmaW5hbCBpbnQg
aGVpZ2h0ID0gNDgwOwotICAgIGZpbmFsIGludCBtaW5fc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICog
MyAvIDI7Ci0gICAgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UaW1lc3RhbXBVcyA9IDI7Ci0KLSAg
ICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGVuY29kZXIgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5j
b2RlcigpOwotCi0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmluaXRFbmNvZGUoCi0gICAgICAgIE1l
ZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4LCB3aWR0
aCwgaGVpZ2h0LCAzMDAsIDMwLCBudWxsKSk7Ci0gICAgQnl0ZUJ1ZmZlcltdIGlucHV0QnVmZmVy
cyA9IGVuY29kZXIuZ2V0SW5wdXRCdWZmZXJzKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChpbnB1dEJ1
ZmZlcnMpOwotICAgIGFzc2VydFRydWUobWluX3NpemUgPD0gaW5wdXRCdWZmZXJzWzBdLmNhcGFj
aXR5KCkpOwotCi0gICAgaW50IGJ1ZmZlckluZGV4OwotICAgIGRvIHsKLSAgICAgIFRocmVhZC5z
bGVlcCgxMCk7Ci0gICAgICBidWZmZXJJbmRleCA9IGVuY29kZXIuZGVxdWV1ZUlucHV0QnVmZmVy
KCk7Ci0gICAgfSB3aGlsZSAoYnVmZmVySW5kZXggPT0gLTEpOyAvLyB8LTF8IGlzIHJldHVybmVk
IHdoZW4gdGhlcmUgaXMgbm8gYnVmZmVyIGF2YWlsYWJsZSB5ZXQuCi0KLSAgICBhc3NlcnRUcnVl
KGJ1ZmZlckluZGV4ID49IDApOwotICAgIGFzc2VydFRydWUoYnVmZmVySW5kZXggPCBpbnB1dEJ1
ZmZlcnMubGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuZW5jb2RlQnVmZmVyKHRydWUs
IGJ1ZmZlckluZGV4LCBtaW5fc2l6ZSwgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMpKTsKLQotICAg
IE91dHB1dEJ1ZmZlckluZm8gaW5mbzsKLSAgICBkbyB7Ci0gICAgICBpbmZvID0gZW5jb2Rlci5k
ZXF1ZXVlT3V0cHV0QnVmZmVyKCk7Ci0gICAgICBUaHJlYWQuc2xlZXAoMTApOwotICAgIH0gd2hp
bGUgKGluZm8gPT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbmZvLmluZGV4ID49IDApOwotICAg
IGFzc2VydEVxdWFscyhwcmVzZW50YXRpb25UaW1lc3RhbXBVcywgaW5mby5wcmVzZW50YXRpb25U
aW1lc3RhbXBVcyk7Ci0gICAgYXNzZXJ0VHJ1ZShpbmZvLmJ1ZmZlci5jYXBhY2l0eSgpID4gMCk7
Ci0gICAgZW5jb2Rlci5yZWxlYXNlT3V0cHV0QnVmZmVyKGluZm8uaW5kZXgpOwotCi0gICAgZW5j
b2Rlci5yZWxlYXNlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9p
ZCB0ZXN0RW5jb2RlclVzaW5nVGV4dHVyZXMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkVXNpbmdU
ZXh0dXJlcygpKSB7Ci0gICAgICBMb2cuaShUQUcsICJIYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0
IFZQOCBlbmNvZGluZywgc2tpcHBpbmcgdGVzdEVuY29kZXJVc2luZ1RleHR1cmVzIik7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgaW50IHdpZHRoID0gNjQwOwotICAgIGZpbmFs
IGludCBoZWlnaHQgPSA0ODA7Ci0gICAgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UcyA9IDI7Ci0K
LSAgICBmaW5hbCBFZ2xCYXNlMTQgZWdsT2VzQmFzZSA9IG5ldyBFZ2xCYXNlMTQobnVsbCwgRWds
QmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICBlZ2xPZXNCYXNlLmNyZWF0ZUR1bW15UGJ1
ZmZlclN1cmZhY2UoKTsKLSAgICBlZ2xPZXNCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgaW50IG9l
c1RleHR1cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVf
RVhURVJOQUxfT0VTKTsKLQotICAgIC8vIFRPRE8ocGVya2opOiBUaGlzIHRlc3QgaXMgd2VlayBz
aW5jZSB3ZSBkb24ndCBmaWxsIHRoZSB0ZXh0dXJlIHdpdGggdmFsaWQgZGF0YSB3aXRoIGNvcnJl
Y3QKLSAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGFuZCB2ZXJpZnkgdGhlIGVuY29kZWQgZGF0YS4g
RmlsbCB0aGUgT0VTIHRleHR1cmUgYW5kIGZpZ3VyZSBvdXQgYSB3YXkgdG8KLSAgICAvLyB2ZXJp
ZnkgdGhhdCB0aGUgb3V0cHV0IG1ha2Ugc2Vuc2UuCi0KLSAgICBNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyIGVuY29kZXIgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpOwotCi0gICAgYXNzZXJ0
VHJ1ZShlbmNvZGVyLmluaXRFbmNvZGUoTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5WaWRlb0NvZGVj
VHlwZS5WSURFT19DT0RFQ19WUDgsIHdpZHRoLAotICAgICAgICBoZWlnaHQsIDMwMCwgMzAsIGVn
bE9lc0Jhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSkpOwotICAgIGFzc2VydFRydWUoCi0gICAgICAg
IGVuY29kZXIuZW5jb2RlVGV4dHVyZSh0cnVlLCBvZXNUZXh0dXJlSWQsIFJlbmRlcmVyQ29tbW9u
LmlkZW50aXR5TWF0cml4KCksIHByZXNlbnRhdGlvblRzKSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJlbmNvZGVUZXh0dXJlIik7Ci0KLSAgICAvLyBJdCBzaG91bGQgYmUgT2sgdG8g
ZGVsZXRlIHRoZSB0ZXh0dXJlIGFmdGVyIGNhbGxpbmcgZW5jb2RlVGV4dHVyZS4KLSAgICBHTEVT
MjAuZ2xEZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge29lc1RleHR1cmVJZH0sIDApOwotCi0g
ICAgT3V0cHV0QnVmZmVySW5mbyBpbmZvID0gZW5jb2Rlci5kZXF1ZXVlT3V0cHV0QnVmZmVyKCk7
Ci0gICAgd2hpbGUgKGluZm8gPT0gbnVsbCkgewotICAgICAgaW5mbyA9IGVuY29kZXIuZGVxdWV1
ZU91dHB1dEJ1ZmZlcigpOwotICAgICAgVGhyZWFkLnNsZWVwKDIwKTsKLSAgICB9Ci0gICAgYXNz
ZXJ0VHJ1ZShpbmZvLmluZGV4ICE9IC0xKTsKLSAgICBhc3NlcnRUcnVlKGluZm8uYnVmZmVyLmNh
cGFjaXR5KCkgPiAwKTsKLSAgICBhc3NlcnRFcXVhbHMocHJlc2VudGF0aW9uVHMsIGluZm8ucHJl
c2VudGF0aW9uVGltZXN0YW1wVXMpOwotICAgIGVuY29kZXIucmVsZWFzZU91dHB1dEJ1ZmZlcihp
bmZvLmluZGV4KTsKLQotICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAgIGVnbE9lc0Jhc2UucmVs
ZWFzZSgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yVGVz
dC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JUZXN0
LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0
b3JUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNzQgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5l
dHdvcmtNb25pdG9yQXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZTsKLWltcG9ydCBzdGF0aWMgb3Jn
LndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVn
YXRlOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5J
TlZBTElEX05FVF9JRDsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1
dG9EZXRlY3QuTmV0d29ya0luZm9ybWF0aW9uOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5l
dHdvcmtNb25pdG9yQXV0b0RldGVjdC5OZXR3b3JrU3RhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmFu
bm90YXRpb24uU3VwcHJlc3NMaW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVj
dGl2aXR5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrOwotaW1wb3J0IGFuZHJv
aWQubmV0LndpZmkuV2lmaU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9y
dCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQg
YW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LlVpVGhy
ZWFkVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTWVk
aXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21h
bGxUZXN0OwotCi0vKioKLSAqIFRlc3RzIGZvciBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yLgot
ICovCi1AU3VwcHJlc3NMaW50KCJOZXdBcGkiKQotcHVibGljIGNsYXNzIE5ldHdvcmtNb25pdG9y
VGVzdCBleHRlbmRzIEFjdGl2aXR5VGVzdENhc2UgewotICAvKioKLSAgICogTGlzdGVucyBmb3Ig
YWxlcnRzIGZpcmVkIGJ5IHRoZSBOZXR3b3JrTW9uaXRvciB3aGVuIG5ldHdvcmsgc3RhdHVzIGNo
YW5nZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBOZXR3b3JrTW9uaXRvclRlc3RP
YnNlcnZlciBpbXBsZW1lbnRzIE5ldHdvcmtNb25pdG9yLk5ldHdvcmtPYnNlcnZlciB7Ci0gICAg
cHJpdmF0ZSBib29sZWFuIHJlY2VpdmVkTm90aWZpY2F0aW9uID0gZmFsc2U7Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChDb25uZWN0aW9u
VHlwZSBjb25uZWN0aW9uVHlwZSkgewotICAgICAgcmVjZWl2ZWROb3RpZmljYXRpb24gPSB0cnVl
OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkg
ewotICAgICAgcmV0dXJuIHJlY2VpdmVkTm90aWZpY2F0aW9uOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIHJlc2V0SGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSB7Ci0gICAgICByZWNlaXZlZE5v
dGlmaWNhdGlvbiA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNb2NrcyBvdXQg
Y2FsbHMgdG8gdGhlIENvbm5lY3Rpdml0eU1hbmFnZXIuCi0gICAqLwotICBwcml2YXRlIHN0YXRp
YyBjbGFzcyBNb2NrQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGV4dGVuZHMgQ29ubmVjdGl2
aXR5TWFuYWdlckRlbGVnYXRlIHsKLSAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlTmV0d29ya0V4
aXN0czsKLSAgICBwcml2YXRlIGludCBuZXR3b3JrVHlwZTsKLSAgICBwcml2YXRlIGludCBuZXR3
b3JrU3VidHlwZTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBOZXR3b3JrU3RhdGUgZ2V0
TmV0d29ya1N0YXRlKCkgewotICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUoYWN0aXZlTmV0
d29ya0V4aXN0cywgbmV0d29ya1R5cGUsIG5ldHdvcmtTdWJ0eXBlKTsKLSAgICB9Ci0KLSAgICAv
LyBEdW1teSBpbXBsZW1lbnRhdGlvbnMgdG8gYXZvaWQgTnVsbFBvaW50ZXJFeGNlcHRpb25zIGlu
IGRlZmF1bHQgaW1wbGVtZW50YXRpb25zOgotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxv
bmcgZ2V0RGVmYXVsdE5ldElkKCkgewotICAgICAgcmV0dXJuIElOVkFMSURfTkVUX0lEOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBOZXR3b3JrW10gZ2V0QWxsTmV0d29ya3Mo
KSB7Ci0gICAgICByZXR1cm4gbmV3IE5ldHdvcmtbMF07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIE5ldHdvcmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoTmV0d29yayBuZXR3b3Jr
KSB7Ci0gICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwgLTEsIC0xKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRBY3RpdmVOZXR3b3JrRXhpc3RzKGJvb2xlYW4gbmV0d29y
a0V4aXN0cykgewotICAgICAgYWN0aXZlTmV0d29ya0V4aXN0cyA9IG5ldHdvcmtFeGlzdHM7Ci0g
ICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1R5cGUoaW50IG5ldHdvcmtUeXBlKSB7
Ci0gICAgICB0aGlzLm5ldHdvcmtUeXBlID0gbmV0d29ya1R5cGU7Ci0gICAgfQotCi0gICAgcHVi
bGljIHZvaWQgc2V0TmV0d29ya1N1YnR5cGUoaW50IG5ldHdvcmtTdWJ0eXBlKSB7Ci0gICAgICB0
aGlzLm5ldHdvcmtTdWJ0eXBlID0gbmV0d29ya1N1YnR5cGU7Ci0gICAgfQotICB9Ci0KLSAgLyoq
Ci0gICAqIE1vY2tzIG91dCBjYWxscyB0byB0aGUgV2lmaU1hbmFnZXIuCi0gICAqLwotICBwcml2
YXRlIHN0YXRpYyBjbGFzcyBNb2NrV2lmaU1hbmFnZXJEZWxlZ2F0ZQotICAgICAgZXh0ZW5kcyBO
ZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuV2lmaU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0
ZSBTdHJpbmcgd2lmaVNTSUQ7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdl
dFdpZmlTU0lEKCkgewotICAgICAgcmV0dXJuIHdpZmlTU0lEOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIHNldFdpZmlTU0lEKFN0cmluZyB3aWZpU1NJRCkgewotICAgICAgdGhpcy53aWZpU1NJ
RCA9IHdpZmlTU0lEOwotICAgIH0KLSAgfQotCi0gIC8vIEEgZHVtbXkgTmV0d29ya01vbml0b3JB
dXRvRGV0ZWN0Lk9ic2VydmVyLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0TmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0T2JzZXJ2ZXIKLSAgICAgIGltcGxlbWVudHMgTmV0d29ya01vbml0b3JB
dXRvRGV0ZWN0Lk9ic2VydmVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNv
bm5lY3Rpb25UeXBlQ2hhbmdlZChDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSkge30K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Nvbm5lY3QoTmV0d29y
a0luZm9ybWF0aW9uIG5ldHdvcmtJbmZvKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25OZXR3b3JrRGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUpIHt9Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJp
dmF0ZSBzdGF0aWMgSGFuZGxlciB1aVRocmVhZEhhbmRsZXIgPSBudWxsOwotCi0gIHByaXZhdGUg
TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IHJlY2VpdmVyOwotICBwcml2YXRlIE1vY2tDb25uZWN0
aXZpdHlNYW5hZ2VyRGVsZWdhdGUgY29ubmVjdGl2aXR5RGVsZWdhdGU7Ci0gIHByaXZhdGUgTW9j
a1dpZmlNYW5hZ2VyRGVsZWdhdGUgd2lmaURlbGVnYXRlOwotCi0gIHByaXZhdGUgc3RhdGljIEhh
bmRsZXIgZ2V0VWlUaHJlYWRIYW5kbGVyKCkgewotICAgIHN5bmNocm9uaXplZCAobG9jaykgewot
ICAgICAgaWYgKHVpVGhyZWFkSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICAgIHVpVGhyZWFkSGFu
ZGxlciA9IG5ldyBIYW5kbGVyKExvb3Blci5nZXRNYWluTG9vcGVyKCkpOwotICAgICAgfQotICAg
ICAgcmV0dXJuIHVpVGhyZWFkSGFuZGxlcjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSGVs
cGVyIG1ldGhvZCB0byBjcmVhdGUgYSBuZXR3b3JrIG1vbml0b3IgYW5kIGRlbGVnYXRlcyBmb3Ig
dGVzdGluZy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVUZXN0TW9uaXRvcigpIHsKLSAg
ICBDb250ZXh0IGNvbnRleHQgPSBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0
KCk7Ci0gICAgTmV0d29ya01vbml0b3IucmVzZXRJbnN0YW5jZUZvclRlc3RzKGNvbnRleHQpOwot
ICAgIE5ldHdvcmtNb25pdG9yLnNldEF1dG9EZXRlY3RDb25uZWN0aXZpdHlTdGF0ZSh0cnVlKTsK
LSAgICByZWNlaXZlciA9IE5ldHdvcmtNb25pdG9yLmdldEF1dG9EZXRlY3RvckZvclRlc3QoKTsK
LSAgICBhc3NlcnROb3ROdWxsKHJlY2VpdmVyKTsKLQotICAgIGNvbm5lY3Rpdml0eURlbGVnYXRl
ID0gbmV3IE1vY2tDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUoKTsKLSAgICBjb25uZWN0aXZp
dHlEZWxlZ2F0ZS5zZXRBY3RpdmVOZXR3b3JrRXhpc3RzKHRydWUpOwotICAgIHJlY2VpdmVyLnNl
dENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZUZvclRlc3RzKGNvbm5lY3Rpdml0eURlbGVnYXRl
KTsKLQotICAgIHdpZmlEZWxlZ2F0ZSA9IG5ldyBNb2NrV2lmaU1hbmFnZXJEZWxlZ2F0ZSgpOwot
ICAgIHJlY2VpdmVyLnNldFdpZmlNYW5hZ2VyRGVsZWdhdGVGb3JUZXN0cyh3aWZpRGVsZWdhdGUp
OwotICAgIHdpZmlEZWxlZ2F0ZS5zZXRXaWZpU1NJRCgiZm9vIik7Ci0gIH0KLQotICBwcml2YXRl
IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZSBnZXRDdXJyZW50Q29ubmVj
dGlvblR5cGUoKSB7Ci0gICAgZmluYWwgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtT
dGF0ZSBuZXR3b3JrU3RhdGUgPSByZWNlaXZlci5nZXRDdXJyZW50TmV0d29ya1N0YXRlKCk7Ci0g
ICAgcmV0dXJuIHJlY2VpdmVyLmdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9u
IHsKLSAgICBzdXBlci5zZXRVcCgpOwotICAgIGdldFVpVGhyZWFkSGFuZGxlcigpLnBvc3QobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjcmVhdGVU
ZXN0TW9uaXRvcigpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Rz
IHRoYXQgdGhlIHJlY2VpdmVyIHJlZ2lzdGVycyBmb3IgY29ubmVjdGl2aXR5IGludGVudHMgZHVy
aW5nIGNvbnN0cnVjdGlvbi4KLSAgICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQFNtYWxsVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0TmV0d29ya01vbml0b3JSZWdpc3RlcnNJbkNvbnN0cnVjdG9yKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRJ
bnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0KLSAgICBOZXR3b3JrTW9uaXRv
ckF1dG9EZXRlY3QuT2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBuZXcgVGVzdE5ldHdvcmtNb25pdG9yQXV0
b0RldGVjdE9ic2VydmVyKCk7Ci0KLSAgICBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgcmVjZWl2
ZXIgPSBuZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KG9ic2VydmVyLCBjb250ZXh0KTsKLQot
ICAgIGFzc2VydFRydWUocmVjZWl2ZXIuaXNSZWNlaXZlclJlZ2lzdGVyZWRGb3JUZXN0aW5nKCkp
OwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgd2hlbiB0aGVyZSBpcyBhbiBpbnRlbnQg
aW5kaWNhdGluZyBhIGNoYW5nZSBpbiBuZXR3b3JrIGNvbm5lY3Rpdml0eSwgaXQgc2VuZHMgYQot
ICAgKiBub3RpZmljYXRpb24gdG8gSmF2YSBvYnNlcnZlcnMuCi0gICAqLwotICBAVWlUaHJlYWRU
ZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3ROZXR3b3JrTW9uaXRvckphdmFP
YnNlcnZlcnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIC8vIEluaXRpYWxp
emUgdGhlIE5ldHdvcmtNb25pdG9yIHdpdGggYSBjb25uZWN0aW9uLgotICAgIEludGVudCBjb25u
ZWN0aXZpdHlJbnRlbnQgPSBuZXcgSW50ZW50KENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElW
SVRZX0FDVElPTik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlvbigp
LmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50KTsKLQotICAgIC8vIFdlIHNo
b3VsZG4ndCBiZSByZS1ub3RpZmllZCBpZiB0aGUgY29ubmVjdGlvbiBoYXNuJ3QgYWN0dWFsbHkg
Y2hhbmdlZC4KLSAgICBOZXR3b3JrTW9uaXRvclRlc3RPYnNlcnZlciBvYnNlcnZlciA9IG5ldyBO
ZXR3b3JrTW9uaXRvclRlc3RPYnNlcnZlcigpOwotICAgIE5ldHdvcmtNb25pdG9yLmFkZE5ldHdv
cmtPYnNlcnZlcihvYnNlcnZlcik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1l
bnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBh
c3NlcnRGYWxzZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpKTsKLQotICAgIC8v
IFdlIHNob3VsZG4ndCBiZSBub3RpZmllZCBpZiB3ZSdyZSBjb25uZWN0ZWQgdG8gbm9uLVdpZmkg
YW5kIHRoZSBXaWZpIFNTSUQgY2hhbmdlcy4KLSAgICB3aWZpRGVsZWdhdGUuc2V0V2lmaVNTSUQo
ImJhciIpOwotICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRU
YXJnZXRDb250ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0RmFsc2Uob2Jz
ZXJ2ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0KLSAgICAvLyBXZSBzaG91bGQgYmUg
bm90aWZpZWQgd2hlbiB3ZSBjaGFuZ2UgdG8gV2lmaS4KLSAgICBjb25uZWN0aXZpdHlEZWxlZ2F0
ZS5zZXROZXR3b3JrVHlwZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSSk7Ci0gICAgcmVj
ZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSwg
Y29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBhc3NlcnRUcnVlKG9ic2VydmVyLmhhc1JlY2VpdmVk
Tm90aWZpY2F0aW9uKCkpOwotICAgIG9ic2VydmVyLnJlc2V0SGFzUmVjZWl2ZWROb3RpZmljYXRp
b24oKTsKLQotICAgIC8vIFdlIHNob3VsZCBiZSBub3RpZmllZCB3aGVuIHRoZSBXaWZpIFNTSUQg
Y2hhbmdlcy4KLSAgICB3aWZpRGVsZWdhdGUuc2V0V2lmaVNTSUQoImZvbyIpOwotICAgIHJlY2Vp
dmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksIGNv
bm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0VHJ1ZShvYnNlcnZlci5oYXNSZWNlaXZlZE5v
dGlmaWNhdGlvbigpKTsKLSAgICBvYnNlcnZlci5yZXNldEhhc1JlY2VpdmVkTm90aWZpY2F0aW9u
KCk7Ci0KLSAgICAvLyBXZSBzaG91bGRuJ3QgYmUgcmUtbm90aWZpZWQgaWYgdGhlIFdpZmkgU1NJ
RCBoYXNuJ3QgYWN0dWFsbHkgY2hhbmdlZC4KLSAgICByZWNlaXZlci5vblJlY2VpdmUoZ2V0SW5z
dHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQpOwot
ICAgIGFzc2VydEZhbHNlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkpOwotCi0g
ICAgLy8gTWltaWMgdGhhdCBjb25uZWN0aXZpdHkgaGFzIGJlZW4gbG9zdCBhbmQgZW5zdXJlIHRo
YXQgdGhlIG9ic2VydmVyIGdldHMgdGhlIG5vdGlmaWNhdGlvbi4KLSAgICBjb25uZWN0aXZpdHlE
ZWxlZ2F0ZS5zZXRBY3RpdmVOZXR3b3JrRXhpc3RzKGZhbHNlKTsKLSAgICBJbnRlbnQgbm9Db25u
ZWN0aXZpdHlJbnRlbnQgPSBuZXcgSW50ZW50KENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElW
SVRZX0FDVElPTik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlvbigp
LmdldFRhcmdldENvbnRleHQoKSwgbm9Db25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFzc2VydFRy
dWUob2JzZXJ2ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0gIH0KLQotICAvKioKLSAg
ICogVGVzdHMgdGhhdCBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgZG9lc24ndCBjcmFzaC4g
VGhpcyB0ZXN0IGNhbm5vdCByZWx5IG9uIGhhdmluZyBhbnkKLSAgICogYWN0aXZlIG5ldHdvcmsg
Y29ubmVjdGlvbnMgc28gaXQgY2Fubm90IHVzZWZ1bGx5IGNoZWNrIHJlc3VsdHMsIGJ1dCBpdCBj
YW4gYXQgbGVhc3QgY2hlY2sKLSAgICogdGhhdCB0aGUgZnVuY3Rpb25zIGRvbid0IGNyYXNoLgot
ICAgKi8KLSAgQFVpVGhyZWFkVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RD
b25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGVEb2VzTm90Q3Jhc2goKSB7Ci0gICAgQ29ubmVjdGl2
aXR5TWFuYWdlckRlbGVnYXRlIGRlbGVnYXRlID0KLSAgICAgICAgbmV3IENvbm5lY3Rpdml0eU1h
bmFnZXJEZWxlZ2F0ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCkpOwot
ICAgIGRlbGVnYXRlLmdldE5ldHdvcmtTdGF0ZSgpOwotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNE
S19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCkgewotICAgICAgTmV0d29ya1td
IG5ldHdvcmtzID0gZGVsZWdhdGUuZ2V0QWxsTmV0d29ya3MoKTsKLSAgICAgIGlmIChuZXR3b3Jr
cy5sZW5ndGggPj0gMSkgewotICAgICAgICBkZWxlZ2F0ZS5nZXROZXR3b3JrU3RhdGUobmV0d29y
a3NbMF0pOwotICAgICAgICBkZWxlZ2F0ZS5oYXNJbnRlcm5ldENhcGFiaWxpdHkobmV0d29ya3Nb
MF0pOwotICAgICAgfQotICAgICAgZGVsZWdhdGUuZ2V0RGVmYXVsdE5ldElkKCk7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IHF1
ZXJ5YWJsZSBBUElzIGRvbid0IGNyYXNoLiBUaGlzIHRlc3QgY2Fubm90IHJlbHkKLSAgICogb24g
aGF2aW5nIGFueSBhY3RpdmUgbmV0d29yayBjb25uZWN0aW9ucyBzbyBpdCBjYW5ub3QgdXNlZnVs
bHkgY2hlY2sgcmVzdWx0cywgYnV0IGl0IGNhbiBhdAotICAgKiBsZWFzdCBjaGVjayB0aGF0IHRo
ZSBmdW5jdGlvbnMgZG9uJ3QgY3Jhc2guCi0gICAqLwotICBAVWlUaHJlYWRUZXN0Ci0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFF1ZXJ5YWJsZUFQSXNEb05vdENyYXNoKCkgewotICAg
IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5PYnNlcnZlciBvYnNlcnZlciA9IG5ldyBUZXN0TmV0
d29ya01vbml0b3JBdXRvRGV0ZWN0T2JzZXJ2ZXIoKTsKLSAgICBOZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QgbmNuID0KLSAgICAgICAgbmV3IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdChvYnNlcnZl
ciwgZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpKTsKLSAgICBuY24uZ2V0
RGVmYXVsdE5ldElkKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5l
Y3Rpb25UZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVj
dGlvblRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVy
Q29ubmVjdGlvblRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMjUgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0
Yy5NZXRyaWNzLkhpc3RvZ3JhbUluZm87Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlv
bi5JY2VDb25uZWN0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbi5J
Y2VHYXRoZXJpbmdTdGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uLlNpZ25h
bGluZ1N0YXRlOwotCi1pbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBv
cnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci0KLWlt
cG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwot
aW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFy
c2V0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7
Ci1pbXBvcnQgamF2YS51dGlsLklkZW50aXR5SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlu
a2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwot
aW1wb3J0IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNv
dW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0v
KiogRW5kLXRvLWVuZCB0ZXN0cyBmb3IgUGVlckNvbm5lY3Rpb24uamF2YS4gKi8KLXB1YmxpYyBj
bGFzcyBQZWVyQ29ubmVjdGlvblRlc3QgZXh0ZW5kcyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJTUVPVVRfU0VDT05EUyA9IDIwOwotICBwcml2YXRlIFRy
ZWVTZXQ8U3RyaW5nPiB0aHJlYWRzQmVmb3JlVGVzdCA9IG51bGw7Ci0KLSAgQE92ZXJyaWRlCi0g
IHByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotICAgIGFzc2VydFRydWUoUGVlckNvbm5lY3Rpb25G
YWN0b3J5LmluaXRpYWxpemVBbmRyb2lkR2xvYmFscygKLSAgICAgICAgZ2V0SW5zdHJ1bWVudGF0
aW9uKCkuZ2V0Q29udGV4dCgpLCB0cnVlLCB0cnVlLCB0cnVlKSk7Ci0gIH0KLQotICBwcml2YXRl
IHN0YXRpYyBjbGFzcyBPYnNlcnZlckV4cGVjdGF0aW9ucyBpbXBsZW1lbnRzIFBlZXJDb25uZWN0
aW9uLk9ic2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFDaGFubmVsLk9ic2VydmVy
LCBTdGF0c09ic2VydmVyIHsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwotICAgIHBy
aXZhdGUgaW50IGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZXhw
ZWN0ZWRFcnJvcnMgPSAwOwotICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVuZWdvdGlhdGlvbnMg
PSAwOwotICAgIHByaXZhdGUgaW50IGV4cGVjdGVkV2lkdGggPSAwOwotICAgIHByaXZhdGUgaW50
IGV4cGVjdGVkSGVpZ2h0ID0gMDsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZEZyYW1lc0RlbGl2
ZXJlZCA9IDA7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PFNpZ25hbGluZ1N0YXRlPiBleHBlY3Rl
ZFNpZ25hbGluZ0NoYW5nZXMgPSBuZXcgTGlua2VkTGlzdDxTaWduYWxpbmdTdGF0ZT4oKTsKLSAg
ICBwcml2YXRlIExpbmtlZExpc3Q8SWNlQ29ubmVjdGlvblN0YXRlPiBleHBlY3RlZEljZUNvbm5l
Y3Rpb25DaGFuZ2VzID0KLSAgICAgICAgbmV3IExpbmtlZExpc3Q8SWNlQ29ubmVjdGlvblN0YXRl
PigpOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxJY2VHYXRoZXJpbmdTdGF0ZT4gZXhwZWN0ZWRJ
Y2VHYXRoZXJpbmdDaGFuZ2VzID0KLSAgICAgICAgbmV3IExpbmtlZExpc3Q8SWNlR2F0aGVyaW5n
U3RhdGU+KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PFN0cmluZz4gZXhwZWN0ZWRBZGRTdHJl
YW1MYWJlbHMgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRM
aXN0PFN0cmluZz4gZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMgPSBuZXcgTGlua2VkTGlzdDxT
dHJpbmc+KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4gZ290
SWNlQ2FuZGlkYXRlcyA9IG5ldyBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4oKTsKLSAgICBwcml2
YXRlIE1hcDxNZWRpYVN0cmVhbSwgV2Vha1JlZmVyZW5jZTxWaWRlb1JlbmRlcmVyPj4gcmVuZGVy
ZXJzID0KLSAgICAgICAgbmV3IElkZW50aXR5SGFzaE1hcDxNZWRpYVN0cmVhbSwgV2Vha1JlZmVy
ZW5jZTxWaWRlb1JlbmRlcmVyPj4oKTsKLSAgICBwcml2YXRlIERhdGFDaGFubmVsIGRhdGFDaGFu
bmVsOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxEYXRhQ2hhbm5lbC5CdWZmZXI+IGV4cGVjdGVk
QnVmZmVycyA9IG5ldyBMaW5rZWRMaXN0PERhdGFDaGFubmVsLkJ1ZmZlcj4oKTsKLSAgICBwcml2
YXRlIExpbmtlZExpc3Q8RGF0YUNoYW5uZWwuU3RhdGU+IGV4cGVjdGVkU3RhdGVDaGFuZ2VzID0K
LSAgICAgICAgbmV3IExpbmtlZExpc3Q8RGF0YUNoYW5uZWwuU3RhdGU+KCk7Ci0gICAgcHJpdmF0
ZSBMaW5rZWRMaXN0PFN0cmluZz4gZXhwZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExhYmVscyA9IG5l
dyBMaW5rZWRMaXN0PFN0cmluZz4oKTsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZFN0YXRzQ2Fs
bGJhY2tzID0gMDsKLSAgICBwcml2YXRlIExpbmtlZExpc3Q8U3RhdHNSZXBvcnRbXT4gZ290U3Rh
dHNSZXBvcnRzID0gbmV3IExpbmtlZExpc3Q8U3RhdHNSZXBvcnRbXT4oKTsKLSAgICBwcml2YXRl
IGZpbmFsIEhhc2hTZXQ8TWVkaWFTdHJlYW0+IGdvdFJlbW90ZVN0cmVhbXMgPSBuZXcgSGFzaFNl
dDxNZWRpYVN0cmVhbT4oKTsKLQotICAgIHB1YmxpYyBPYnNlcnZlckV4cGVjdGF0aW9ucyhTdHJp
bmcgbmFtZSkgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
c3luY2hyb25pemVkIHZvaWQgc2V0RGF0YUNoYW5uZWwoRGF0YUNoYW5uZWwgZGF0YUNoYW5uZWwp
IHsKLSAgICAgIGFzc2VydE51bGwodGhpcy5kYXRhQ2hhbm5lbCk7Ci0gICAgICB0aGlzLmRhdGFD
aGFubmVsID0gZGF0YUNoYW5uZWw7Ci0gICAgICB0aGlzLmRhdGFDaGFubmVsLnJlZ2lzdGVyT2Jz
ZXJ2ZXIodGhpcyk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHRoaXMuZGF0YUNoYW5uZWwpOwotICAg
IH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RJY2VDYW5kaWRhdGVzKGlu
dCBjb3VudCkgewotICAgICAgZXhwZWN0ZWRJY2VDYW5kaWRhdGVzICs9IGNvdW50OwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkljZUNhbmRp
ZGF0ZShJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgICAtLWV4cGVjdGVkSWNlQ2FuZGlk
YXRlczsKLQotICAgICAgLy8gV2UgZG9uJ3QgYXNzZXJ0IGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyA+
PSAwIGJlY2F1c2UgaXQncyBoYXJkIHRvIGtub3cKLSAgICAgIC8vIGhvdyBtYW55IHRvIGV4cGVj
dCwgaW4gZ2VuZXJhbC4gIFdlIG9ubHkgdXNlIGV4cGVjdEljZUNhbmRpZGF0ZXMgdG8KLSAgICAg
IC8vIGFzc2VydCBhIG1pbmltYWwgY291bnQuCi0gICAgICBzeW5jaHJvbml6ZWQgKGdvdEljZUNh
bmRpZGF0ZXMpIHsKLSAgICAgICAgZ290SWNlQ2FuZGlkYXRlcy5hZGQoY2FuZGlkYXRlKTsKLSAg
ICAgICAgZ290SWNlQ2FuZGlkYXRlcy5ub3RpZnlBbGwoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVkKEljZUNh
bmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHt9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
c2V0RXhwZWN0ZWRSZXNvbHV0aW9uKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgZXhw
ZWN0ZWRXaWR0aCA9IHdpZHRoOwotICAgICAgZXhwZWN0ZWRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAg
fQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdEZyYW1lc0RlbGl2ZXJlZChp
bnQgY291bnQpIHsKLSAgICAgIGV4cGVjdGVkRnJhbWVzRGVsaXZlcmVkICs9IGNvdW50OwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW5kZXJG
cmFtZShWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgICAgYXNzZXJ0VHJ1ZShl
eHBlY3RlZFdpZHRoID4gMCk7Ci0gICAgICBhc3NlcnRUcnVlKGV4cGVjdGVkSGVpZ2h0ID4gMCk7
Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRXaWR0aCwgZnJhbWUucm90YXRlZFdpZHRoKCkp
OwotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkSGVpZ2h0LCBmcmFtZS5yb3RhdGVkSGVpZ2h0
KCkpOwotICAgICAgLS1leHBlY3RlZEZyYW1lc0RlbGl2ZXJlZDsKLSAgICAgIFZpZGVvUmVuZGVy
ZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25p
emVkIHZvaWQgZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlIG5ld1N0YXRlKSB7
Ci0gICAgICBleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXMuYWRkKG5ld1N0YXRlKTsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25TaWduYWxpbmdD
aGFuZ2UoU2lnbmFsaW5nU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBl
Y3RlZFNpZ25hbGluZ0NoYW5nZXMucmVtb3ZlRmlyc3QoKSwgbmV3U3RhdGUpOwotICAgIH0KLQot
ICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKElj
ZUNvbm5lY3Rpb25TdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgZXhwZWN0ZWRJY2VDb25uZWN0aW9u
Q2hhbmdlcy5hZGQobmV3U3RhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyBzeW5jaHJvbml6ZWQgdm9pZCBvbkljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0
YXRlIG5ld1N0YXRlKSB7Ci0gICAgICAvLyBUT0RPKGJlbWFzYyk6IHJlbW92ZSBvbmNlIGRlbGl2
ZXJ5IG9mIElDRUNvbXBsZXRlZCBpcyByZWxpYWJsZQotICAgICAgLy8gKGh0dHBzOi8vY29kZS5n
b29nbGUuY29tL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9MzAyMSkuCi0gICAgICBpZiAobmV3
U3RhdGUuZXF1YWxzKEljZUNvbm5lY3Rpb25TdGF0ZS5DT01QTEVURUQpKSB7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLQotICAgICAgaWYgKGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuYW1lICsgIkdvdCBhbiB1
bmV4cGVjdGVkIGljZSBjb25uZWN0aW9uIGNoYW5nZSAiICsgbmV3U3RhdGUpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEljZUNvbm5lY3Rp
b25DaGFuZ2VzLnJlbW92ZUZpcnN0KCksIG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25JY2VDb25uZWN0aW9uUmVjZWl2aW5n
Q2hhbmdlKGJvb2xlYW4gcmVjZWl2aW5nKSB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFt
ZSArICJHb3QgYW4gaWNlIGNvbm5lY3Rpb24gcmVjZWl2aW5nIGNoYW5nZSAiICsgcmVjZWl2aW5n
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0SWNlR2F0aGVy
aW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBleHBlY3RlZElj
ZUdhdGhlcmluZ0NoYW5nZXMuYWRkKG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0
aGVyaW5nU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIC8vIEl0J3MgZmluZSB0byBnZXQgYSB2YXJp
YWJsZSBudW1iZXIgb2YgR0FUSEVSSU5HIG1lc3NhZ2VzIGJlZm9yZQotICAgICAgLy8gQ09NUExF
VEUgZmlyZXMgKGRlcGVuZGluZyBvbiBob3cgbG9uZyB0aGUgdGVzdCBydW5zKSBzbyB3ZSBkb24n
dCBhc3NlcnQKLSAgICAgIC8vIGFueSBwYXJ0aWN1bGFyIGNvdW50LgotICAgICAgaWYgKG5ld1N0
YXRlID09IEljZUdhdGhlcmluZ1N0YXRlLkdBVEhFUklORykgewotICAgICAgICByZXR1cm47Ci0g
ICAgICB9Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzLnJl
bW92ZUZpcnN0KCksIG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVk
IHZvaWQgZXhwZWN0QWRkU3RyZWFtKFN0cmluZyBsYWJlbCkgewotICAgICAgZXhwZWN0ZWRBZGRT
dHJlYW1MYWJlbHMuYWRkKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgc3luY2hyb25pemVkIHZvaWQgb25BZGRTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0g
ICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRBZGRTdHJlYW1MYWJlbHMucmVtb3ZlRmlyc3QoKSwg
c3RyZWFtLmxhYmVsKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN0cmVhbS52aWRlb1RyYWNr
cy5zaXplKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN0cmVhbS5hdWRpb1RyYWNrcy5zaXpl
KCkpOwotICAgICAgYXNzZXJ0VHJ1ZShzdHJlYW0udmlkZW9UcmFja3MuZ2V0KDApLmlkKCkuZW5k
c1dpdGgoIlZpZGVvVHJhY2siKSk7Ci0gICAgICBhc3NlcnRUcnVlKHN0cmVhbS5hdWRpb1RyYWNr
cy5nZXQoMCkuaWQoKS5lbmRzV2l0aCgiQXVkaW9UcmFjayIpKTsKLSAgICAgIGFzc2VydEVxdWFs
cygidmlkZW8iLCBzdHJlYW0udmlkZW9UcmFja3MuZ2V0KDApLmtpbmQoKSk7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoImF1ZGlvIiwgc3RyZWFtLmF1ZGlvVHJhY2tzLmdldCgwKS5raW5kKCkpOwotICAg
ICAgVmlkZW9SZW5kZXJlciByZW5kZXJlciA9IGNyZWF0ZVZpZGVvUmVuZGVyZXIodGhpcyk7Ci0g
ICAgICBzdHJlYW0udmlkZW9UcmFja3MuZ2V0KDApLmFkZFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAg
ICAgIGFzc2VydE51bGwocmVuZGVyZXJzLnB1dChzdHJlYW0sIG5ldyBXZWFrUmVmZXJlbmNlPFZp
ZGVvUmVuZGVyZXI+KHJlbmRlcmVyKSkpOwotICAgICAgZ290UmVtb3RlU3RyZWFtcy5hZGQoc3Ry
ZWFtKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0UmVtb3Zl
U3RyZWFtKFN0cmluZyBsYWJlbCkgewotICAgICAgZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMu
YWRkKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25p
emVkIHZvaWQgb25SZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMucmVtb3ZlRmlyc3QoKSwgc3RyZWFt
LmxhYmVsKCkpOwotICAgICAgV2Vha1JlZmVyZW5jZTxWaWRlb1JlbmRlcmVyPiByZW5kZXJlciA9
IHJlbmRlcmVycy5yZW1vdmUoc3RyZWFtKTsKLSAgICAgIGFzc2VydE5vdE51bGwocmVuZGVyZXIp
OwotICAgICAgYXNzZXJ0Tm90TnVsbChyZW5kZXJlci5nZXQoKSk7Ci0gICAgICBhc3NlcnRFcXVh
bHMoMSwgc3RyZWFtLnZpZGVvVHJhY2tzLnNpemUoKSk7Ci0gICAgICBzdHJlYW0udmlkZW9UcmFj
a3MuZ2V0KDApLnJlbW92ZVJlbmRlcmVyKHJlbmRlcmVyLmdldCgpKTsKLSAgICAgIGdvdFJlbW90
ZVN0cmVhbXMucmVtb3ZlKHN0cmVhbSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXpl
ZCB2b2lkIGV4cGVjdERhdGFDaGFubmVsKFN0cmluZyBsYWJlbCkgewotICAgICAgZXhwZWN0ZWRS
ZW1vdGVEYXRhQ2hhbm5lbExhYmVscy5hZGQobGFiZWwpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkRhdGFDaGFubmVsKERhdGFDaGFubmVs
IHJlbW90ZURhdGFDaGFubmVsKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRSZW1vdGVE
YXRhQ2hhbm5lbExhYmVscy5yZW1vdmVGaXJzdCgpLCByZW1vdGVEYXRhQ2hhbm5lbC5sYWJlbCgp
KTsKLSAgICAgIHNldERhdGFDaGFubmVsKHJlbW90ZURhdGFDaGFubmVsKTsKLSAgICAgIGFzc2Vy
dEVxdWFscyhEYXRhQ2hhbm5lbC5TdGF0ZS5DT05ORUNUSU5HLCBkYXRhQ2hhbm5lbC5zdGF0ZSgp
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0UmVuZWdvdGlh
dGlvbk5lZWRlZCgpIHsKLSAgICAgICsrZXhwZWN0ZWRSZW5lZ290aWF0aW9uczsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25SZW5lZ290aWF0
aW9uTmVlZGVkKCkgewotICAgICAgYXNzZXJ0VHJ1ZSgtLWV4cGVjdGVkUmVuZWdvdGlhdGlvbnMg
Pj0gMCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdE1lc3Nh
Z2UoQnl0ZUJ1ZmZlciBleHBlY3RlZEJ1ZmZlciwgYm9vbGVhbiBleHBlY3RlZEJpbmFyeSkgewot
ICAgICAgZXhwZWN0ZWRCdWZmZXJzLmFkZChuZXcgRGF0YUNoYW5uZWwuQnVmZmVyKGV4cGVjdGVk
QnVmZmVyLCBleHBlY3RlZEJpbmFyeSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbk1lc3NhZ2UoRGF0YUNoYW5uZWwuQnVmZmVyIGJ1ZmZl
cikgewotICAgICAgRGF0YUNoYW5uZWwuQnVmZmVyIGV4cGVjdGVkID0gZXhwZWN0ZWRCdWZmZXJz
LnJlbW92ZUZpcnN0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuYmluYXJ5LCBidWZm
ZXIuYmluYXJ5KTsKLSAgICAgIGFzc2VydFRydWUoZXhwZWN0ZWQuZGF0YS5lcXVhbHMoYnVmZmVy
LmRhdGEpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVk
IHZvaWQgb25CdWZmZXJlZEFtb3VudENoYW5nZShsb25nIHByZXZpb3VzQW1vdW50KSB7Ci0gICAg
ICBhc3NlcnRGYWxzZShwcmV2aW91c0Ftb3VudCA9PSBkYXRhQ2hhbm5lbC5idWZmZXJlZEFtb3Vu
dCgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZv
aWQgb25TdGF0ZUNoYW5nZSgpIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFN0YXRlQ2hh
bmdlcy5yZW1vdmVGaXJzdCgpLCBkYXRhQ2hhbm5lbC5zdGF0ZSgpKTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3Rh
dGUgc3RhdGUpIHsKLSAgICAgIGV4cGVjdGVkU3RhdGVDaGFuZ2VzLmFkZChzdGF0ZSk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uQ29tcGxl
dGUoU3RhdHNSZXBvcnRbXSByZXBvcnRzKSB7Ci0gICAgICBpZiAoLS1leHBlY3RlZFN0YXRzQ2Fs
bGJhY2tzIDwgMCkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBl
Y3RlZCBzdGF0cyByZXBvcnQ6ICIgKyByZXBvcnRzKTsKLSAgICAgIH0KLSAgICAgIGdvdFN0YXRz
UmVwb3J0cy5hZGQocmVwb3J0cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2
b2lkIGV4cGVjdFN0YXRzQ2FsbGJhY2soKSB7Ci0gICAgICArK2V4cGVjdGVkU3RhdHNDYWxsYmFj
a3M7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBMaW5rZWRMaXN0PFN0YXRzUmVw
b3J0W10+IHRha2VTdGF0c1JlcG9ydHMoKSB7Ci0gICAgICBMaW5rZWRMaXN0PFN0YXRzUmVwb3J0
W10+IGdvdCA9IGdvdFN0YXRzUmVwb3J0czsKLSAgICAgIGdvdFN0YXRzUmVwb3J0cyA9IG5ldyBM
aW5rZWRMaXN0PFN0YXRzUmVwb3J0W10+KCk7Ci0gICAgICByZXR1cm4gZ290OwotICAgIH0KLQot
ICAgIC8vIFJldHVybiBhIHNldCBvZiBleHBlY3RhdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gc2F0
aXNmaWVkIHlldCwgcG9zc2libHkKLSAgICAvLyBlbXB0eSBpZiBubyBzdWNoIGV4cGVjdGF0aW9u
cyBleGlzdC4KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIFRyZWVTZXQ8U3RyaW5nPiB1bnNhdGlz
ZmllZEV4cGVjdGF0aW9ucygpIHsKLSAgICAgIFRyZWVTZXQ8U3RyaW5nPiBzdGlsbFdhaXRpbmdG
b3JFeHBlY3RhdGlvbnMgPSBuZXcgVHJlZVNldDxTdHJpbmc+KCk7Ci0gICAgICBpZiAoZXhwZWN0
ZWRJY2VDYW5kaWRhdGVzID4gMCkgeyAvLyBTZWUgY29tbWVudCBpbiBvbkljZUNhbmRpZGF0ZS4K
LSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRJY2VDYW5k
aWRhdGVzIik7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRFcnJvcnMgIT0gMCkgewotICAg
ICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKCJleHBlY3RlZEVycm9yczogIiAr
IGV4cGVjdGVkRXJyb3JzKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZFNpZ25hbGluZ0No
YW5nZXMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25z
LmFkZCgKLSAgICAgICAgICAgICJleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXM6ICIgKyBleHBlY3Rl
ZFNpZ25hbGluZ0NoYW5nZXMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZElj
ZUNvbm5lY3Rpb25DaGFuZ2VzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0Zv
ckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRJY2VDb25uZWN0aW9uQ2hh
bmdlczogIiArIGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuc2l6ZSgpKTsKLSAgICAgIH0K
LSAgICAgIGlmIChleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXMuc2l6ZSgpICE9IDApIHsKLSAg
ICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgKLSAgICAgICAgICAgICJleHBl
Y3RlZEljZUdhdGhlcmluZ0NoYW5nZXM6ICIgKyBleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXMu
c2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZEFkZFN0cmVhbUxhYmVscy5zaXpl
KCkgIT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKAotICAg
ICAgICAgICAgImV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzOiAiICsgZXhwZWN0ZWRBZGRTdHJlYW1M
YWJlbHMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZFJlbW92ZVN0cmVhbUxh
YmVscy5zaXplKCkgIT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMu
YWRkKAotICAgICAgICAgICAgImV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFiZWxzOiAiICsgZXhwZWN0
ZWRSZW1vdmVTdHJlYW1MYWJlbHMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3Rl
ZEZyYW1lc0RlbGl2ZXJlZCA+IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRp
b25zLmFkZCgiZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQ6ICIgKyBleHBlY3RlZEZyYW1lc0RlbGl2
ZXJlZCk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4cGVjdGVkQnVmZmVycy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRCdWZmZXJz
OiAiICsgZXhwZWN0ZWRCdWZmZXJzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4cGVj
dGVkU3RhdGVDaGFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBl
Y3RhdGlvbnMuYWRkKCJleHBlY3RlZFN0YXRlQ2hhbmdlczogIiArIGV4cGVjdGVkU3RhdGVDaGFu
Z2VzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4cGVjdGVkUmVtb3RlRGF0YUNoYW5u
ZWxMYWJlbHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9u
cy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExhYmVsczogIiAr
IGV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAg
IGlmIChleHBlY3RlZFN0YXRzQ2FsbGJhY2tzICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5n
Rm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRTdGF0c0NhbGxiYWNrczogIiArIGV4cGVjdGVk
U3RhdHNDYWxsYmFja3MpOwotICAgICAgfQotICAgICAgcmV0dXJuIHN0aWxsV2FpdGluZ0ZvckV4
cGVjdGF0aW9uczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB3YWl0Rm9yQWxsRXhwZWN0
YXRpb25zVG9CZVNhdGlzZmllZChpbnQgdGltZW91dFNlY29uZHMpIHsKLSAgICAgIC8vIFRPRE8o
ZmlzY2htYW4pOiBwcm9ibGVtcyB3aXRoIHRoaXMgYXBwcm9hY2g6Ci0gICAgICAvLyAtIGNvbWUg
dXAgd2l0aCBzb21ldGhpbmcgYmV0dGVyIHRoYW4gYSBwb2xsIGxvb3AKLSAgICAgIC8vIC0gYXZv
aWQgc2VyaWFsaXppbmcgZXhwZWN0YXRpb25zIGV4cGxpY2l0bHk7IHRoZSB0ZXN0IGlzIG5vdCBh
cyByb2J1c3QKLSAgICAgIC8vICAgYXMgaXQgY291bGQgYmUgYmVjYXVzZSBpdCBtdXN0IHBsYWNl
IGV4cGVjdGF0aW9ucyBiZXR3ZWVuIHdhaXQKLSAgICAgIC8vICAgc3RhdGVtZW50cyB2ZXJ5IHBy
ZWNpc2VseSAoZS5nLiBmcmFtZSBtdXN0IG5vdCBhcnJpdmUgYmVmb3JlIGl0cwotICAgICAgLy8g
ICBleHBlY3RhdGlvbiwgYW5kIGV4cGVjdGF0aW9uIG11c3Qgbm90IGJlIHJlZ2lzdGVyZWQgc28g
ZWFybHkgYXMgdG8KLSAgICAgIC8vICAgc3RhbGwgYSB3YWl0KS4gIFVzZSBjYWxsYmFja3MgdG8g
ZmlyZSBvZmYgZGVwZW5kZW50IHN0ZXBzIGluc3RlYWQgb2YKLSAgICAgIC8vICAgZXhwbGljaXRs
eSB3YWl0aW5nLCBzbyB0aGVyZSBjYW4gYmUganVzdCBhIHNpbmdsZSB3YWl0IGF0IHRoZSBlbmQg
b2YKLSAgICAgIC8vICAgdGhlIHRlc3QuCi0gICAgICBsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3Vy
cmVudFRpbWVNaWxsaXMoKSArIDEwMDAgKiB0aW1lb3V0U2Vjb25kczsKLSAgICAgIFRyZWVTZXQ8
U3RyaW5nPiBwcmV2ID0gbnVsbDsKLSAgICAgIFRyZWVTZXQ8U3RyaW5nPiBzdGlsbFdhaXRpbmdG
b3JFeHBlY3RhdGlvbnMgPSB1bnNhdGlzZmllZEV4cGVjdGF0aW9ucygpOwotICAgICAgd2hpbGUg
KCFzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICgh
c3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmVxdWFscyhwcmV2KSkgewotICAgICAgICAgIFN5
c3RlbS5vdXQucHJpbnRsbihuYW1lICsgIiBzdGlsbCB3YWl0aW5nIGF0XG4gICAgIiArIChuZXcg
VGhyb3dhYmxlKCkpLmdldFN0YWNrVHJhY2UoKVsxXQotICAgICAgICAgICAgICArICJcbiAgICBm
b3I6ICIgKyBBcnJheXMudG9TdHJpbmcoc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLnRvQXJy
YXkoKSkpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmRUaW1lIDwgU3lzdGVtLmN1cnJlbnRU
aW1lTWlsbGlzKCkpIHsKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICIgdGlt
ZWQgb3V0IHdhaXRpbmcgZm9yOiAiCi0gICAgICAgICAgICAgICsgQXJyYXlzLnRvU3RyaW5nKHN0
aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy50b0FycmF5KCkpKTsKLSAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBUaHJlYWQuc2xlZXAo
MTApOwotICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAg
ICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJl
diA9IHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9uczsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9y
RXhwZWN0YXRpb25zID0gdW5zYXRpc2ZpZWRFeHBlY3RhdGlvbnMoKTsKLSAgICAgIH0KLSAgICAg
IGlmIChwcmV2ID09IG51bGwpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAg
ICAgICAgbmFtZSArICIgZGlkbid0IG5lZWQgdG8gd2FpdCBhdFxuICAgICIgKyAobmV3IFRocm93
YWJsZSgpKS5nZXRTdGFja1RyYWNlKClbMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRob2RzIHJldHVybiBhIGxpc3Qgb2YgYWxsIGN1cnJl
bnRseSBnYXRoZXJlZCBpY2UgY2FuZGlkYXRlcyBvciB3YWl0cyB1bnRpbAotICAgIC8vIDEgY2Fu
ZGlkYXRlIGhhdmUgYmVlbiBnYXRoZXJlZC4KLSAgICBwdWJsaWMgTGlzdDxJY2VDYW5kaWRhdGU+
IGdldEF0TGVhc3RPbmVJY2VDYW5kaWRhdGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgICAgc3luY2hyb25pemVkIChnb3RJY2VDYW5kaWRhdGVzKSB7Ci0gICAgICAgIHdoaWxl
IChnb3RJY2VDYW5kaWRhdGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgIGdvdEljZUNhbmRpZGF0
ZXMud2FpdCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgTGlua2VkTGlzdDxJY2VD
YW5kaWRhdGU+KGdvdEljZUNhbmRpZGF0ZXMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8v
IFNldHMgdGhlIGV4cGVjdGVkIHJlc29sdXRpb24gZm9yIGFuIE9ic2VydmVyRXhwZWN0YXRpb25z
IG9uY2UgYSBmcmFtZQotICAvLyBoYXMgYmVlbiBjYXB0dXJlZC4KLSAgcHJpdmF0ZSBzdGF0aWMg
Y2xhc3MgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5D
YWxsYmFja3MgewotICAgIHByaXZhdGUgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2JzZXJ2ZXI7Ci0K
LSAgICBwdWJsaWMgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyKE9ic2VydmVyRXhwZWN0YXRpb25z
IG9ic2VydmVyKSB7Ci0gICAgICB0aGlzLm9ic2VydmVyID0gb2JzZXJ2ZXI7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlbmRlckZyYW1lKFZp
ZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgICAvLyBCZWNhdXNlIGRpZmZlcmVu
dCBjYW1lcmEgZGV2aWNlcyAoZmFrZSAmIHBoeXNpY2FsKSBwcm9kdWNlIGRpZmZlcmVudAotICAg
ICAgLy8gcmVzb2x1dGlvbnMsIHdlIG9ubHkgc2FuaXR5LWNoZWNrIHRoZSBzZXQgc2l6ZXMsCi0g
ICAgICBhc3NlcnRUcnVlKGZyYW1lLnJvdGF0ZWRXaWR0aCgpID4gMCk7Ci0gICAgICBhc3NlcnRU
cnVlKGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSA+IDApOwotICAgICAgb2JzZXJ2ZXIuc2V0RXhwZWN0
ZWRSZXNvbHV0aW9uKGZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCkp
OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFNkcE9ic2VydmVyTGF0Y2gg
aW1wbGVtZW50cyBTZHBPYnNlcnZlciB7Ci0gICAgcHJpdmF0ZSBib29sZWFuIHN1Y2Nlc3MgPSBm
YWxzZTsKLSAgICBwcml2YXRlIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAgPSBudWxsOwotICAgIHBy
aXZhdGUgU3RyaW5nIGVycm9yID0gbnVsbDsKLSAgICBwcml2YXRlIENvdW50RG93bkxhdGNoIGxh
dGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotCi0gICAgcHVibGljIFNkcE9ic2VydmVyTGF0
Y2goKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGVTdWNjZXNz
KFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICAgIHRoaXMuc2RwID0gc2RwOwotICAgICAg
b25TZXRTdWNjZXNzKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25TZXRTdWNjZXNzKCkgewotICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICBsYXRjaC5jb3Vu
dERvd24oKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0
ZUZhaWx1cmUoU3RyaW5nIGVycm9yKSB7Ci0gICAgICBvblNldEZhaWx1cmUoZXJyb3IpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2V0RmFpbHVyZShTdHJpbmcg
ZXJyb3IpIHsKLSAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsKLSAgICAgIGxhdGNoLmNvdW50RG93
bigpOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGF3YWl0KCkgewotICAgICAgdHJ5IHsK
LSAgICAgICAgYXNzZXJ0VHJ1ZShsYXRjaC5hd2FpdCgxMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09O
RFMpKTsKLSAgICAgICAgcmV0dXJuIGdldFN1Y2Nlc3MoKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAg
fQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGdldFN1Y2Nlc3MoKSB7Ci0gICAgICByZXR1
cm4gc3VjY2VzczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2Vzc2lvbkRlc2NyaXB0aW9uIGdldFNk
cCgpIHsKLSAgICAgIHJldHVybiBzZHA7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRF
cnJvcigpIHsKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgaW50
IHZpZGVvV2luZG93c01hcHBlZCA9IC0xOwotCi0gIHByaXZhdGUgc3RhdGljIFZpZGVvUmVuZGVy
ZXIgY3JlYXRlVmlkZW9SZW5kZXJlcihWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB2aWRlb0NhbGxi
YWNrcykgewotICAgIHJldHVybiBuZXcgVmlkZW9SZW5kZXJlcih2aWRlb0NhbGxiYWNrcyk7Ci0g
IH0KLQotICAvLyBSZXR1cm4gYSB3ZWFrIHJlZmVyZW5jZSB0byB0ZXN0IHRoYXQgb3duZXJzaGlw
IGlzIGNvcnJlY3RseSBoZWxkIGJ5Ci0gIC8vIFBlZXJDb25uZWN0aW9uLCBub3QgYnkgdGVzdCBj
b2RlLgotICBwcml2YXRlIHN0YXRpYyBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBhZGRUcmFj
a3NUb1BDKFBlZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5LAotICAgICAgUGVlckNvbm5lY3Rp
b24gcGMsIFZpZGVvU291cmNlIHZpZGVvU291cmNlLCBTdHJpbmcgc3RyZWFtTGFiZWwsIFN0cmlu
ZyB2aWRlb1RyYWNrSWQsCi0gICAgICBTdHJpbmcgYXVkaW9UcmFja0lkLCBWaWRlb1JlbmRlcmVy
LkNhbGxiYWNrcyB2aWRlb0NhbGxiYWNrcykgewotICAgIE1lZGlhU3RyZWFtIGxNUyA9IGZhY3Rv
cnkuY3JlYXRlTG9jYWxNZWRpYVN0cmVhbShzdHJlYW1MYWJlbCk7Ci0gICAgVmlkZW9UcmFjayB2
aWRlb1RyYWNrID0gZmFjdG9yeS5jcmVhdGVWaWRlb1RyYWNrKHZpZGVvVHJhY2tJZCwgdmlkZW9T
b3VyY2UpOwotICAgIGFzc2VydE5vdE51bGwodmlkZW9UcmFjayk7Ci0gICAgVmlkZW9SZW5kZXJl
ciB2aWRlb1JlbmRlcmVyID0gY3JlYXRlVmlkZW9SZW5kZXJlcih2aWRlb0NhbGxiYWNrcyk7Ci0g
ICAgYXNzZXJ0Tm90TnVsbCh2aWRlb1JlbmRlcmVyKTsKLSAgICB2aWRlb1RyYWNrLmFkZFJlbmRl
cmVyKHZpZGVvUmVuZGVyZXIpOwotICAgIGxNUy5hZGRUcmFjayh2aWRlb1RyYWNrKTsKLSAgICAv
LyBKdXN0IGZvciBmdW4sIGxldCdzIHJlbW92ZSBhbmQgcmUtYWRkIHRoZSB0cmFjay4KLSAgICBs
TVMucmVtb3ZlVHJhY2sodmlkZW9UcmFjayk7Ci0gICAgbE1TLmFkZFRyYWNrKHZpZGVvVHJhY2sp
OwotICAgIGxNUy5hZGRUcmFjaygKLSAgICAgICAgZmFjdG9yeS5jcmVhdGVBdWRpb1RyYWNrKGF1
ZGlvVHJhY2tJZCwgZmFjdG9yeS5jcmVhdGVBdWRpb1NvdXJjZShuZXcgTWVkaWFDb25zdHJhaW50
cygpKSkpOwotICAgIHBjLmFkZFN0cmVhbShsTVMpOwotICAgIHJldHVybiBuZXcgV2Vha1JlZmVy
ZW5jZTxNZWRpYVN0cmVhbT4obE1TKTsKLSAgfQotCi0gIC8vIFVzZWQgZm9yIG1ha2luZyBzdXJl
IHRocmVhZCBoYW5kbGVzIGFyZSBub3QgbGVha2VkLgotICAvLyBDYWxsIGluaXRpYWxpemVUaHJl
YWRDaGVjayBiZWZvcmUgYSB0ZXN0IGFuZCBmaW5hbGl6ZVRocmVhZENoZWNrIGFmdGVyCi0gIC8v
IGEgdGVzdC4KLSAgdm9pZCBpbml0aWFsaXplVGhyZWFkQ2hlY2soKSB7Ci0gICAgU3lzdGVtLmdj
KCk7IC8vIEVuY291cmFnZSBhbnkgR0MtcmVsYXRlZCB0aHJlYWRzIHRvIHN0YXJ0IHVwLgotICAg
IHRocmVhZHNCZWZvcmVUZXN0ID0gYWxsVGhyZWFkcygpOwotICB9Ci0KLSAgdm9pZCBmaW5hbGl6
ZVRocmVhZENoZWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gVHJlZVNldDxTdHJpbmc+
IHRocmVhZHNBZnRlclRlc3QgPSBhbGxUaHJlYWRzKCk7Ci0KLSAgICAvLyBUT0RPKHRvbW1pKTog
RmlndXJlIG91dCBhIG1vcmUgcmVsaWFibGUgd2F5IHRvIGRvIHRoaXMgdGVzdC4gIEFzIGlzCi0g
ICAgLy8gd2UncmUgc2VlaW5nIHRocmVlIHBvc3NpYmxlICdub3JtYWwnIHNpdHVhdGlvbnM6Ci0g
ICAgLy8gMS4gIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0cyBhcmUgZXF1YWwuCi0gICAgLy8gMi4gIGJl
Zm9yZSBjb250YWlucyAzIHRocmVhZHMgdGhhdCBkbyBub3QgZXhpc3QgaW4gYWZ0ZXIuCi0gICAg
Ly8gMy4gIGFmdGVyIGNvbnRhaW5zIDMgdGhyZWFkcyB0aGF0IGRvIG5vdCBleGlzdCBpbiBiZWZv
cmUuCi0gICAgLy8KLSAgICAvLyBNYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZG8gdGhlIHRo
cmVhZCBlbnVtZXJhdGlvbiBmcm9tIEMrKyBhbmQgZ2V0Ci0gICAgLy8gdGhlIHRocmVhZCBuYW1l
cyBhcyB3ZWxsLCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hhdCB0aGVzZSAzIHRocmVhZHMgYXJl
LgotCi0gICAgLy8gYXNzZXJ0RXF1YWxzKHRocmVhZHNCZWZvcmVUZXN0LCB0aHJlYWRzQWZ0ZXJU
ZXN0KTsKLSAgICAvLyBUaHJlYWQuc2xlZXAoMTAwKTsKLSAgfQotCi0gIC8vIFRPRE8oZmlzY2ht
YW4pIE1PQVIgdGVzdCBpZGVhczoKLSAgLy8gLSBUZXN0IHRoYXQgUEMucmVtb3ZlU3RyZWFtKCkg
d29ya3M7IHJlcXVpcmVzIGEgc2Vjb25kCi0gIC8vICAgY3JlYXRlT2ZmZXIvY3JlYXRlQW5zd2Vy
IGRhbmNlLgotICAvLyAtIGF1ZGl0IGVhY2ggcGxhY2UgdGhhdCB1c2VzIHxjb25zdHJhaW50c3wg
Zm9yIHNwZWNpZnlpbmcgbm9uLXRyaXZpYWwKLSAgLy8gICBjb25zdHJhaW50cyAoYW5kIGVuc3Vy
ZSB0aGV5J3JlIGhvbm9yZWQpLgotICAvLyAtIHRlc3QgZXJyb3IgY2FzZXMKLSAgLy8gLSBlbnN1
cmUgcmVhc29uYWJsZSBjb3ZlcmFnZSBvZiBfam5pLmNjIGlzIGFjaGlldmVkLiAgQ292ZXJhZ2Ug
aXMKLSAgLy8gICBleHRyYS1pbXBvcnRhbnQgYmVjYXVzZSBvZiBhbGwgdGhlIGZyZWUtdGV4dCAo
Y2xhc3MvbWV0aG9kIG5hbWVzLCBldGMpCi0gIC8vICAgaW4gSk5JLXN0eWxlIHByb2dyYW1taW5n
OyBtYWtlIHN1cmUgbm8gdHlwb3MhCi0gIC8vIC0gVGVzdCB0aGF0IHNodXRkb3duIG1pZC1pbnRl
cmFjdGlvbiBpcyBjcmFzaC1mcmVlLgotCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RDb21wbGV0ZVNlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBNZXRyaWNzLmVuYWJs
ZSgpOwotICAgIC8vIEFsbG93IGxvb3BiYWNrIGludGVyZmFjZXMgdG9vIHNpbmNlIG91ciBBbmRy
b2lkIGRldmljZXMgb2Z0ZW4gZG9uJ3QKLSAgICAvLyBoYXZlIHRob3NlLgotICAgIFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5
Lk9wdGlvbnMoKTsKLSAgICBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrID0gMDsKLSAgICBQZWVy
Q29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkob3B0
aW9ucyk7Ci0gICAgLy8gVW5jb21tZW50IHRvIGdldCBBTEwgV2ViUlRDIHRyYWNpbmcgYW5kIFNF
TlNJVElWRSBsaWJqaW5nbGUgbG9nZ2luZy4KLSAgICAvLyBOT1RFOiB0aGlzIF9tdXN0XyBoYXBw
ZW4gd2hpbGUgfGZhY3Rvcnl8IGlzIGFsaXZlIQotICAgIC8vIExvZ2dpbmcuZW5hYmxlVHJhY2lu
ZygKLSAgICAvLyAgICAgIi90bXAvUGVlckNvbm5lY3Rpb25UZXN0LWxvZy50eHQiLAotICAgIC8v
ICAgICBFbnVtU2V0Lm9mKExvZ2dpbmcuVHJhY2VMZXZlbC5UUkFDRV9BTEwpLAotICAgIC8vICAg
ICBMb2dnaW5nLlNldmVyaXR5LkxTX1NFTlNJVElWRSk7Ci0KLSAgICBNZWRpYUNvbnN0cmFpbnRz
IHBjQ29uc3RyYWludHMgPSBuZXcgTWVkaWFDb25zdHJhaW50cygpOwotICAgIHBjQ29uc3RyYWlu
dHMubWFuZGF0b3J5LmFkZChuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoIkR0bHNT
cnRwS2V5QWdyZWVtZW50IiwgInRydWUiKSk7Ci0KLSAgICBMaW5rZWRMaXN0PFBlZXJDb25uZWN0
aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycyA9IG5ldyBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9u
LkljZVNlcnZlcj4oKTsKLSAgICBpY2VTZXJ2ZXJzLmFkZChuZXcgUGVlckNvbm5lY3Rpb24uSWNl
U2VydmVyKCJzdHVuOnN0dW4ubC5nb29nbGUuY29tOjE5MzAyIikpOwotICAgIGljZVNlcnZlcnMu
YWRkKAotICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyKCJ0dXJuOmZha2UuZXhh
bXBsZS5jb20iLCAiZmFrZVVzZXJuYW1lIiwgImZha2VQYXNzd29yZCIpKTsKLSAgICBPYnNlcnZl
ckV4cGVjdGF0aW9ucyBvZmZlcmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBPYnNlcnZlckV4cGVjdGF0
aW9ucygiUENUZXN0Om9mZmVyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBvZmZlcmluZ1BDID0K
LSAgICAgICAgZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihpY2VTZXJ2ZXJzLCBwY0NvbnN0
cmFpbnRzLCBvZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvZmZlcmlu
Z1BDKTsKLQotICAgIE9ic2VydmVyRXhwZWN0YXRpb25zIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyA9
IG5ldyBPYnNlcnZlckV4cGVjdGF0aW9ucygiUENUZXN0OmFuc3dlcmVyIik7Ci0gICAgUGVlckNv
bm5lY3Rpb24gYW5zd2VyaW5nUEMgPQotICAgICAgICBmYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0
aW9uKGljZVNlcnZlcnMsIHBjQ29uc3RyYWludHMsIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0g
ICAgYXNzZXJ0Tm90TnVsbChhbnN3ZXJpbmdQQyk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHVzZSB0
aGUgc2FtZSBjYW1lcmEgZm9yIG9mZmVyZXIgJiBhbnN3ZXJlciwgc28gY3JlYXRlIGl0IGhlcmUK
LSAgICAvLyBpbnN0ZWFkIG9mIGluIGFkZFRyYWNrc1RvUEMuCi0gICAgZmluYWwgQ2FtZXJhRW51
bWVyYXRvciBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGZhbHNlIC8qIGNhcHR1
cmVUb1RleHR1cmUgKi8pOwotICAgIGZpbmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9
Ci0gICAgICAgIGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZW51bWVyYXRvci5nZXREZXZpY2VO
YW1lcygpWzBdLCBudWxsKTsKLSAgICBmaW5hbCBWaWRlb1NvdXJjZSB2aWRlb1NvdXJjZSA9IGZh
Y3RvcnkuY3JlYXRlVmlkZW9Tb3VyY2UodmlkZW9DYXB0dXJlcik7Ci0gICAgdmlkZW9DYXB0dXJl
ci5zdGFydENhcHR1cmUoNjQwLCA0ODAsIDMwKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBXZWFrUmVmZXJlbmNlPE1lZGlhU3Ry
ZWFtPiBvTE1TID0KLSAgICAgICAgYWRkVHJhY2tzVG9QQyhmYWN0b3J5LCBvZmZlcmluZ1BDLCB2
aWRlb1NvdXJjZSwgIm9mZmVyZWRNZWRpYVN0cmVhbSIsICJvZmZlcmVkVmlkZW9UcmFjayIsCi0g
ICAgICAgICAgICAib2ZmZXJlZEF1ZGlvVHJhY2siLCBuZXcgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0
dGVyKGFuc3dlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMu
ZXhwZWN0UmVuZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIERhdGFDaGFubmVsIG9mZmVyaW5nREMg
PSBvZmZlcmluZ1BDLmNyZWF0ZURhdGFDaGFubmVsKCJvZmZlcmluZ0RDIiwgbmV3IERhdGFDaGFu
bmVsLkluaXQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJvZmZlcmluZ0RDIiwgb2ZmZXJpbmdEQy5s
YWJlbCgpKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLnNldERhdGFDaGFubmVsKG9mZmVy
aW5nREMpOwotICAgIFNkcE9ic2VydmVyTGF0Y2ggc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJM
YXRjaCgpOwotICAgIG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNv
bnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vz
c2lvbkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSKTsKLSAg
ICBhc3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgc2Rw
TGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9u
cy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9SRU1PVEVfT0ZGRVIp
OwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RBZGRTdHJlYW0oIm9mZmVyZWRNZWRp
YVN0cmVhbSIpOwotICAgIC8vIFNDVFAgRGF0YUNoYW5uZWxzIGFyZSBhbm5vdW5jZWQgdmlhIE9Q
RU4gbWVzc2FnZXMgb3ZlciB0aGUgZXN0YWJsaXNoZWQKLSAgICAvLyBjb25uZWN0aW9uIChub3Qg
dmlhIFNEUCksIHNvIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyBjYW4gb25seSByZWdpc3RlcgotICAg
IC8vIGV4cGVjdGluZyB0aGUgY2hhbm5lbCBkdXJpbmcgSUNFLCBiZWxvdy4KLSAgICBhbnN3ZXJp
bmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2Vy
dEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIG9mZmVyaW5nUEMu
c2lnbmFsaW5nU3RhdGUoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAg
ICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIGFuc3dlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gICAgV2Vha1JlZmVyZW5jZTxNZWRp
YVN0cmVhbT4gYUxNUyA9IGFkZFRyYWNrc1RvUEMoZmFjdG9yeSwgYW5zd2VyaW5nUEMsIHZpZGVv
U291cmNlLAotICAgICAgICAiYW5zd2VyZWRNZWRpYVN0cmVhbSIsICJhbnN3ZXJlZFZpZGVvVHJh
Y2siLCAiYW5zd2VyZWRBdWRpb1RyYWNrIiwKLSAgICAgICAgbmV3IEV4cGVjdGVkUmVzb2x1dGlv
blNldHRlcihvZmZlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2Rw
T2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ1BDLmNyZWF0ZUFuc3dlcihzZHBMYXRjaCwg
bmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgp
KTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gYW5zd2VyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlw
ZS5BTlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5
KCkpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsK
LSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsKLQotICAg
IG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJp
bmdTdGF0ZS5DT01QTEVURSk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUdh
dGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZS5DT01QTEVURSk7Ci0KLSAgICBzZHBMYXRj
aCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4
cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIGFuc3dlcmlu
Z1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0
VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgp
KTsKLQotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmlu
Z0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9M
T0NBTF9PRkZFUik7Ci0gICAgb2ZmZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNo
LCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3Nl
cnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZl
ckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdl
KFNpZ25hbGluZ1N0YXRlLlNUQUJMRSk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0
QWRkU3RyZWFtKCJhbnN3ZXJlZE1lZGlhU3RyZWFtIik7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DSEVDS0lO
Ryk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJ
Y2VDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLSAgICAvLyBUT0RPKGJlbWFzYyk6IHVuY29t
bWVudCBvbmNlIGRlbGl2ZXJ5IG9mIElDRUNvbXBsZXRlZCBpcyByZWxpYWJsZQotICAgIC8vICho
dHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTMwMjEpLgot
ICAgIC8vCi0gICAgLy8gb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNo
YW5nZSgKLSAgICAvLyAgICAgSWNlQ29ubmVjdGlvblN0YXRlLkNPTVBMRVRFRCk7Ci0gICAgYW5z
d2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlv
blN0YXRlLkNIRUNLSU5HKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29u
bmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLQotICAgIG9mZmVy
aW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNk
cCgpKTsKLQotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldExvY2FsRGVzY3JpcHRpb24o
KS50eXBlLCBvZmZlclNkcC50eXBlKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRS
ZW1vdGVEZXNjcmlwdGlvbigpLnR5cGUsIGFuc3dlclNkcC50eXBlKTsKLSAgICBhc3NlcnRFcXVh
bHMoYW5zd2VyaW5nUEMuZ2V0TG9jYWxEZXNjcmlwdGlvbigpLnR5cGUsIGFuc3dlclNkcC50eXBl
KTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyaW5nUEMuZ2V0UmVtb3RlRGVzY3JpcHRpb24oKS50
eXBlLCBvZmZlclNkcC50eXBlKTsKLQotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldFNl
bmRlcnMoKS5zaXplKCksIDIpOwotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldFJlY2Vp
dmVycygpLnNpemUoKSwgMik7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlcmluZ1BDLmdldFNlbmRl
cnMoKS5zaXplKCksIDIpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJpbmdQQy5nZXRSZWNlaXZl
cnMoKS5zaXplKCksIDIpOwotCi0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgc29tZSBmcmFtZXMg
dG8gYmUgZGVsaXZlcmVkIGF0IGVhY2ggZW5kIChudW1iZXIKLSAgICAvLyBjaG9zZW4gYXJiaXRy
YXJpbHkpLgotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEZyYW1lc0RlbGl2ZXJlZCgx
MCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEZyYW1lc0RlbGl2ZXJlZCgxMCk7
Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5l
bC5TdGF0ZS5PUEVOKTsKLSAgICAvLyBTZWUgY29tbWVudGFyeSBhYm91dCBTQ1RQIERhdGFDaGFu
bmVscyBhYm92ZSBmb3Igd2h5IHRoaXMgaXMgaGVyZS4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlv
bnMuZXhwZWN0RGF0YUNoYW5uZWwoIm9mZmVyaW5nREMiKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuT1BFTik7Ci0KLSAgICAv
LyBXYWl0IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNhbmRpZGF0ZSBmcm9tIHRoZSBvZmZlcmluZyBQ
QyBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoZSBhbnN3ZXJpbmcKLSAgICAvLyBQQy4KLSAgICBmb3Ig
KEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBvZmZlcmluZ0V4cGVjdGF0aW9ucy5nZXRBdExlYXN0
T25lSWNlQ2FuZGlkYXRlKCkpIHsKLSAgICAgIGFuc3dlcmluZ1BDLmFkZEljZUNhbmRpZGF0ZShj
YW5kaWRhdGUpOwotICAgIH0KLQotICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0IG9uZSBpY2UgY2Fu
ZGlkYXRlIGZyb20gdGhlIGFuc3dlcmluZyBQQyBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoZSBvZmZl
cmluZwotICAgIC8vIFBDLgotICAgIGZvciAoSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA6IGFuc3dl
cmluZ0V4cGVjdGF0aW9ucy5nZXRBdExlYXN0T25lSWNlQ2FuZGlkYXRlKCkpIHsKLSAgICAgIG9m
ZmVyaW5nUEMuYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgYXNzZXJ0
VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlz
ZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0
aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMp
KTsKLQotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFC
TEUsIG9mZmVyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFBlZXJD
b25uZWN0aW9uLlNpZ25hbGluZ1N0YXRlLlNUQUJMRSwgYW5zd2VyaW5nUEMuc2lnbmFsaW5nU3Rh
dGUoKSk7Ci0KLSAgICAvLyBTZXQgYSBiaXRyYXRlIGxpbWl0IGZvciB0aGUgb3V0Z29pbmcgdmlk
ZW8gc3RyZWFtIGZvciB0aGUgb2ZmZXJlci4KLSAgICBSdHBTZW5kZXIgdmlkZW9TZW5kZXIgPSBu
dWxsOwotICAgIGZvciAoUnRwU2VuZGVyIHNlbmRlciA6IG9mZmVyaW5nUEMuZ2V0U2VuZGVycygp
KSB7Ci0gICAgICBpZiAoc2VuZGVyLnRyYWNrKCkua2luZCgpLmVxdWFscygidmlkZW8iKSkgewot
ICAgICAgICB2aWRlb1NlbmRlciA9IHNlbmRlcjsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0
Tm90TnVsbCh2aWRlb1NlbmRlcik7Ci0gICAgUnRwUGFyYW1ldGVycyBydHBQYXJhbWV0ZXJzID0g
dmlkZW9TZW5kZXIuZ2V0UGFyYW1ldGVycygpOwotICAgIGFzc2VydE5vdE51bGwocnRwUGFyYW1l
dGVycyk7Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJ0cFBhcmFtZXRlcnMuZW5jb2RpbmdzLnNpemUo
KSk7Ci0gICAgYXNzZXJ0TnVsbChydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWF4Qml0
cmF0ZUJwcyk7Ci0KLSAgICBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWF4Qml0cmF0
ZUJwcyA9IDMwMDAwMDsKLSAgICBhc3NlcnRUcnVlKHZpZGVvU2VuZGVyLnNldFBhcmFtZXRlcnMo
cnRwUGFyYW1ldGVycykpOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgd2UgY2FuIHJlYWQgYmFjayB0
aGUgdXBkYXRlZCB2YWx1ZS4KLSAgICBydHBQYXJhbWV0ZXJzID0gdmlkZW9TZW5kZXIuZ2V0UGFy
YW1ldGVycygpOwotICAgIGFzc2VydEVxdWFscygzMDAwMDAsIChpbnQpIHJ0cFBhcmFtZXRlcnMu
ZW5jb2RpbmdzLmdldCgwKS5tYXhCaXRyYXRlQnBzKTsKLQotICAgIC8vIFRlc3Qgc2VuZCAmIHJl
Y2VpdmUgVVRGLTggdGV4dC4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0TWVzc2Fn
ZSgKLSAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKCJoZWxsbyEiLmdldEJ5dGVzKENoYXJzZXQuZm9y
TmFtZSgiVVRGLTgiKSkpLCBmYWxzZSk7Ci0gICAgRGF0YUNoYW5uZWwuQnVmZmVyIGJ1ZmZlciA9
Ci0gICAgICAgIG5ldyBEYXRhQ2hhbm5lbC5CdWZmZXIoQnl0ZUJ1ZmZlci53cmFwKCJoZWxsbyEi
LmdldEJ5dGVzKENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSkpLCBmYWxzZSk7Ci0gICAgYXNzZXJ0
VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy5kYXRhQ2hhbm5lbC5zZW5kKGJ1ZmZlcikpOwotICAg
IGFzc2VydFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNU
b0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotCi0gICAgLy8gQ29uc3RydWN0IHRoaXMg
YmluYXJ5IG1lc3NhZ2UgdHdvIGRpZmZlcmVudCB3YXlzIHRvIGVuc3VyZSBubwotICAgIC8vIHNo
b3J0Y3V0cyBhcmUgdGFrZW4uCi0gICAgQnl0ZUJ1ZmZlciBleHBlY3RlZEJpbmFyeU1lc3NhZ2Ug
PSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KDUpOwotICAgIGZvciAoYnl0ZSBpID0gMTsgaSA8
IDY7ICsraSkgewotICAgICAgZXhwZWN0ZWRCaW5hcnlNZXNzYWdlLnB1dChpKTsKLSAgICB9Ci0g
ICAgZXhwZWN0ZWRCaW5hcnlNZXNzYWdlLmZsaXAoKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9u
cy5leHBlY3RNZXNzYWdlKGV4cGVjdGVkQmluYXJ5TWVzc2FnZSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0
VHJ1ZShhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwuc2VuZCgKLSAgICAgICAgbmV3
IERhdGFDaGFubmVsLkJ1ZmZlcihCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7MSwgMiwgMywg
NCwgNX0pLCB0cnVlKSkpOwotICAgIGFzc2VydFRydWUob2ZmZXJpbmdFeHBlY3RhdGlvbnMud2Fp
dEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0KLSAg
ICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5lbC5TdGF0
ZS5DTE9TSU5HKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2Uo
RGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0lORyk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0VEKTsKLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0VEKTsK
LSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwuY2xvc2UoKTsKLSAgICBvZmZl
cmluZ0V4cGVjdGF0aW9ucy5kYXRhQ2hhbm5lbC5jbG9zZSgpOwotCi0gICAgLy8gRnJlZSB0aGUg
SmF2YS1sYW5kIG9iamVjdHMgYW5kIGNvbGxlY3QgdGhlbS4KLSAgICBzaHV0ZG93blBDKG9mZmVy
aW5nUEMsIG9mZmVyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBvZmZlcmluZ1BDID0gbnVsbDsKLSAg
ICBzaHV0ZG93blBDKGFuc3dlcmluZ1BDLCBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIGFu
c3dlcmluZ1BDID0gbnVsbDsKLSAgICBnZXRNZXRyaWNzKCk7Ci0gICAgdmlkZW9DYXB0dXJlci5z
dG9wQ2FwdHVyZSgpOwotICAgIHZpZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotICAgIHZpZGVvU291
cmNlLmRpc3Bvc2UoKTsKLSAgICBmYWN0b3J5LmRpc3Bvc2UoKTsKLSAgICBTeXN0ZW0uZ2MoKTsK
LSAgfQotCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RUcmFja1JlbW92YWwoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAvLyBBbGxvdyBsb29wYmFjayBpbnRlcmZhY2VzIHRvbyBz
aW5jZSBvdXIgQW5kcm9pZCBkZXZpY2VzIG9mdGVuIGRvbid0Ci0gICAgLy8gaGF2ZSB0aG9zZS4K
LSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9
IDA7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rp
b25GYWN0b3J5KG9wdGlvbnMpOwotCi0gICAgTWVkaWFDb25zdHJhaW50cyBwY0NvbnN0cmFpbnRz
ID0gbmV3IE1lZGlhQ29uc3RyYWludHMoKTsKLSAgICBwY0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5h
ZGQobmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKCJEdGxzU3J0cEtleUFncmVlbWVu
dCIsICJ0cnVlIikpOwotCi0gICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+
IGljZVNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+KCk7
Ci0gICAgaWNlU2VydmVycy5hZGQobmV3IFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcigic3R1bjpz
dHVuLmwuZ29vZ2xlLmNvbToxOTMwMiIpKTsKLQotICAgIE9ic2VydmVyRXhwZWN0YXRpb25zIG9m
ZmVyaW5nRXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0YXRpb25zKCJQQ1Rlc3Q6b2Zm
ZXJlciIpOwotICAgIFBlZXJDb25uZWN0aW9uIG9mZmVyaW5nUEMgPQotICAgICAgICBmYWN0b3J5
LmNyZWF0ZVBlZXJDb25uZWN0aW9uKGljZVNlcnZlcnMsIHBjQ29uc3RyYWludHMsIG9mZmVyaW5n
RXhwZWN0YXRpb25zKTsKLSAgICBhc3NlcnROb3ROdWxsKG9mZmVyaW5nUEMpOwotCi0gICAgT2Jz
ZXJ2ZXJFeHBlY3RhdGlvbnMgYW5zd2VyaW5nRXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhw
ZWN0YXRpb25zKCJQQ1Rlc3Q6YW5zd2VyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBhbnN3ZXJp
bmdQQyA9Ci0gICAgICAgIGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24oaWNlU2VydmVycywg
cGNDb25zdHJhaW50cywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBhc3NlcnROb3ROdWxs
KGFuc3dlcmluZ1BDKTsKLQotICAgIC8vIFdlIHdhbnQgdG8gdXNlIHRoZSBzYW1lIGNhbWVyYSBm
b3Igb2ZmZXJlciAmIGFuc3dlcmVyLCBzbyBjcmVhdGUgaXQgaGVyZQotICAgIC8vIGluc3RlYWQg
b2YgaW4gYWRkVHJhY2tzVG9QQy4KLSAgICBmaW5hbCBDYW1lcmFFbnVtZXJhdG9yIGVudW1lcmF0
b3IgPSBuZXcgQ2FtZXJhMUVudW1lcmF0b3IoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyk7
Ci0gICAgZmluYWwgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0KLSAgICAgICAgZW51bWVy
YXRvci5jcmVhdGVDYXB0dXJlcihlbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF0sIG51bGwp
OwotICAgIGZpbmFsIFZpZGVvU291cmNlIHZpZGVvU291cmNlID0gZmFjdG9yeS5jcmVhdGVWaWRl
b1NvdXJjZSh2aWRlb0NhcHR1cmVyKTsKLSAgICB2aWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZSg2
NDAsIDQ4MCwgMzApOwotCi0gICAgLy8gQWRkIG9mZmVyZXIgbWVkaWEgc3RyZWFtLgotICAgIG9m
ZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBXZWFr
UmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBvTE1TID0KLSAgICAgICAgYWRkVHJhY2tzVG9QQyhmYWN0
b3J5LCBvZmZlcmluZ1BDLCB2aWRlb1NvdXJjZSwgIm9mZmVyZWRNZWRpYVN0cmVhbSIsICJvZmZl
cmVkVmlkZW9UcmFjayIsCi0gICAgICAgICAgICAib2ZmZXJlZEF1ZGlvVHJhY2siLCBuZXcgRXhw
ZWN0ZWRSZXNvbHV0aW9uU2V0dGVyKGFuc3dlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0gICAgLy8g
Q3JlYXRlIG9mZmVyLgotICAgIFNkcE9ic2VydmVyTGF0Y2ggc2RwTGF0Y2ggPSBuZXcgU2RwT2Jz
ZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBN
ZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0g
ICAgU2Vzc2lvbkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVS
KTsKLSAgICBhc3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0g
ICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0g
bmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RT
aWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9MT0NBTF9PRkZFUik7Ci0gICAgb2Zm
ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsKLSAgICBvZmZlcmluZ0V4
cGVjdGF0aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUuQ09N
UExFVEUpOwotICAgIG9mZmVyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2Zm
ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVs
bChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZv
ciBhbnN3ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAg
YW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0
ZS5IQVZFX1JFTU9URV9PRkZFUik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEFk
ZFN0cmVhbSgib2ZmZXJlZE1lZGlhU3RyZWFtIik7Ci0gICAgYW5zd2VyaW5nUEMuc2V0UmVtb3Rl
RGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNo
LmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8g
QWRkIGFuc3dlcmVyIG1lZGlhIHN0cmVhbS4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0UmVuZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIFdlYWtSZWZlcmVuY2U8TWVkaWFTdHJlYW0+
IGFMTVMgPSBhZGRUcmFja3NUb1BDKGZhY3RvcnksIGFuc3dlcmluZ1BDLCB2aWRlb1NvdXJjZSwK
LSAgICAgICAgImFuc3dlcmVkTWVkaWFTdHJlYW0iLCAiYW5zd2VyZWRWaWRlb1RyYWNrIiwgImFu
c3dlcmVkQXVkaW9UcmFjayIsCi0gICAgICAgIG5ldyBFeHBlY3RlZFJlc29sdXRpb25TZXR0ZXIo
b2ZmZXJpbmdFeHBlY3RhdGlvbnMpKTsKLQotICAgIC8vIENyZWF0ZSBhbnN3ZXIuCi0gICAgc2Rw
TGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ1BDLmNyZWF0ZUFu
c3dlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShz
ZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gYW5zd2VyU2RwID0gc2Rw
TGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBTZXNzaW9u
RGVzY3JpcHRpb24uVHlwZS5BTlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNkcC5kZXNj
cmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBh
bnN3ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5z
d2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5T
VEFCTEUpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDYW5kaWRhdGVzKDIp
OwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNl
R2F0aGVyaW5nU3RhdGUuQ09NUExFVEUpOwotICAgIGFuc3dlcmluZ1BDLnNldExvY2FsRGVzY3Jp
cHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2Fp
dCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIFNldCBy
ZW1vdGUgZGVzY3JpcHRpb24gZm9yIG9mZmVyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2Jz
ZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0No
YW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4
cGVjdEFkZFN0cmVhbSgiYW5zd2VyZWRNZWRpYVN0cmVhbSIpOwotCi0gICAgb2ZmZXJpbmdFeHBl
Y3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0hF
Q0tJTkcpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFu
Z2UoSWNlQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0gICAgLy8gVE9ETyhiZW1hc2MpOiB1
bmNvbW1lbnQgb25jZSBkZWxpdmVyeSBvZiBJQ0VDb21wbGV0ZWQgaXMgcmVsaWFibGUKLSAgICAv
LyAoaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD0zMDIx
KS4KLSAgICAvLwotICAgIC8vIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rp
b25DaGFuZ2UoCi0gICAgLy8gICAgIEljZUNvbm5lY3Rpb25TdGF0ZS5DT01QTEVURUQpOwotICAg
IGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5l
Y3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdElj
ZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0KLSAgICBv
ZmZlcmluZ1BDLnNldFJlbW90ZURlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAg
IGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5n
ZXRTZHAoKSk7Ci0KLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNhbmRpZGF0ZSBm
cm9tIHRoZSBvZmZlcmluZyBQQyBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoZSBhbnN3ZXJpbmcKLSAg
ICAvLyBQQy4KLSAgICBmb3IgKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5nZXRBdExlYXN0T25lSWNlQ2FuZGlkYXRlKCkpIHsKLSAgICAgIGFuc3dlcmluZ1BD
LmFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIH0KLQotICAgIC8vIFdhaXQgZm9yIGF0
IGxlYXN0IG9uZSBpY2UgY2FuZGlkYXRlIGZyb20gdGhlIGFuc3dlcmluZyBQQyBhbmQgZm9yd2Fy
ZCB0aGVtIHRvIHRoZSBvZmZlcmluZwotICAgIC8vIFBDLgotICAgIGZvciAoSWNlQ2FuZGlkYXRl
IGNhbmRpZGF0ZSA6IGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5nZXRBdExlYXN0T25lSWNlQ2FuZGlk
YXRlKCkpIHsKLSAgICAgIG9mZmVyaW5nUEMuYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0g
ICAgfQotCi0gICAgLy8gV2FpdCBmb3Igb25lIGZyYW1lIG9mIHRoZSBjb3JyZWN0IHNpemUgdG8g
YmUgZGVsaXZlcmVkLgotICAgIC8vIE90aGVyd2lzZSB3ZSBjb3VsZCBnZXQgYSBkdW1teSBibGFj
ayBmcmFtZSBvZiB1bmV4cGN0ZWQgc2l6ZSB3aGVuIHRoZQotICAgIC8vIHZpZGVvIHRyYWNrIGlz
IHJlbW92ZWQuCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0RnJhbWVzRGVsaXZlcmVk
KDEpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RGcmFtZXNEZWxpdmVyZWQoMSk7
Ci0KLSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3Rh
dGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotICAgIGFzc2VydFRydWUoYW5z
d2VyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJ
TUVPVVRfU0VDT05EUykpOwotCi0gICAgYXNzZXJ0RXF1YWxzKFBlZXJDb25uZWN0aW9uLlNpZ25h
bGluZ1N0YXRlLlNUQUJMRSwgb2ZmZXJpbmdQQy5zaWduYWxpbmdTdGF0ZSgpKTsKLSAgICBhc3Nl
cnRFcXVhbHMoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGUuU1RBQkxFLCBhbnN3ZXJpbmdQ
Qy5zaWduYWxpbmdTdGF0ZSgpKTsKLQotICAgIC8vIE5vdyBkbyBhbm90aGVyIG5lZ290aWF0aW9u
LCByZW1vdmluZyB0aGUgdmlkZW8gdHJhY2sgZnJvbSBvbmUgcGVlci4KLSAgICAvLyBUaGlzIHBy
ZXZpb3VzbHkgY2F1c2VkIGEgY3Jhc2ggb24gcGMuZGlzcG9zZSgpLgotICAgIC8vIFNlZTogaHR0
cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTUxMjgKLSAg
ICBWaWRlb1RyYWNrIG9mZmVyZXJWaWRlb1RyYWNrID0gb0xNUy5nZXQoKS52aWRlb1RyYWNrcy5n
ZXQoMCk7Ci0gICAgLy8gTm90ZSB0aGF0IHdoZW4gd2UgY2FsbCByZW1vdmVUcmFjaywgd2UgcmVn
YWluIHJlc3BvbnNpYmlsaXR5IGZvcgotICAgIC8vIGRpc3Bvc2luZyBvZiB0aGUgdHJhY2suCi0g
ICAgb0xNUy5nZXQoKS5yZW1vdmVUcmFjayhvZmZlcmVyVmlkZW9UcmFjayk7Ci0KLSAgICAvLyBD
cmVhdGUgb2ZmZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAg
IG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkp
OwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgb2ZmZXJTZHAgPSBzZHBM
YXRjaC5nZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJTZHAudHlwZSwgU2Vzc2lvbkRl
c2NyaXB0aW9uLlR5cGUuT0ZGRVIpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyU2RwLmRlc2NyaXB0
aW9uLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIG9mZmVy
ZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX0xP
Q0FMX09GRkVSKTsKLSAgICBvZmZlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gs
IG9mZmVyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2Vy
dE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlv
biBmb3IgYW5zd2VyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwot
ICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5n
U3RhdGUuSEFWRV9SRU1PVEVfT0ZGRVIpOwotICAgIGFuc3dlcmluZ1BDLnNldFJlbW90ZURlc2Ny
aXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2Fp
dCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIENyZWF0
ZSBhbnN3ZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFu
c3dlcmluZ1BDLmNyZWF0ZUFuc3dlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7
Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhbnN3ZXJTZHAgPSBzZHBM
YXRjaC5nZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyU2RwLnR5cGUsIFNlc3Npb25E
ZXNjcmlwdGlvbi5UeXBlLkFOU1dFUik7Ci0gICAgYXNzZXJ0RmFsc2UoYW5zd2VyU2RwLmRlc2Ny
aXB0aW9uLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIGFu
c3dlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNU
QUJMRSk7Ci0gICAgYW5zd2VyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5z
d2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51
bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBm
b3Igb2ZmZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAg
b2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRl
LlNUQUJMRSk7Ci0gICAgb2ZmZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwg
YW5zd2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2Vy
dE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSB0cmFjayB3
YXMgcmVhbGx5IHJlbW92ZWQuCi0gICAgLy8gVE9ETyhkZWFkYmVlZik6IEN1cnJlbnRseSB0aGUg
ZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgdmlkZW8gdHJhY2sncwotICAgIC8vIHN0YXRlIHdpbGwg
YmUgc2V0IHRvICJlbmRlZCIuIEhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIGl0J3MgbGlrZWx5IHRo
YXQKLSAgICAvLyB0aGUgdmlkZW8gdHJhY2sgd2lsbCBiZSBjb21wbGV0ZWx5IHJlbW92ZWQgZnJv
bSB0aGUgcmVtb3RlIHN0cmVhbQotICAgIC8vIChhcyBpdCBpcyBvbiB0aGUgQysrIGxldmVsKS4K
LSAgICBNZWRpYVN0cmVhbSBhUk1TID0gYW5zd2VyaW5nRXhwZWN0YXRpb25zLmdvdFJlbW90ZVN0
cmVhbXMuaXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFSTVMudmlkZW9UcmFj
a3MuZ2V0KDApLnN0YXRlKCksIE1lZGlhU3RyZWFtVHJhY2suU3RhdGUuRU5ERUQpOwotCi0gICAg
Ly8gRmluYWxseSwgcmVtb3ZlIHRoZSBhdWRpbyB0cmFjayBhcyB3ZWxsLCB3aGljaCBzaG91bGQg
Y29tcGxldGVseSByZW1vdmUKLSAgICAvLyB0aGUgcmVtb3RlIHN0cmVhbS4gVGhpcyB1c2VkIHRv
IHRyaWdnZXIgYW4gYXNzZXJ0LgotICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9y
Zy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTUxMjgKLSAgICBBdWRpb1RyYWNrIG9mZmVyZXJB
dWRpb1RyYWNrID0gb0xNUy5nZXQoKS5hdWRpb1RyYWNrcy5nZXQoMCk7Ci0gICAgb0xNUy5nZXQo
KS5yZW1vdmVUcmFjayhvZmZlcmVyQXVkaW9UcmFjayk7Ci0KLSAgICAvLyBDcmVhdGUgb2ZmZXIu
Ci0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nUEMu
Y3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2Vy
dFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgb2ZmZXJTZHAgPSBzZHBMYXRjaC5nZXRTZHAo
KTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5
cGUuT0ZGRVIpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyU2RwLmRlc2NyaXB0aW9uLmlzRW1wdHko
KSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIG9mZmVyZXIuCi0gICAgc2Rw
TGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX0xPQ0FMX09GRkVSKTsK
LSAgICBvZmZlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsK
LSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0
Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBmb3IgYW5zd2Vy
ZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmlu
Z0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9S
RU1PVEVfT0ZGRVIpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW1vdmVTdHJl
YW0oIm9mZmVyZWRNZWRpYVN0cmVhbSIpOwotICAgIGFuc3dlcmluZ1BDLnNldFJlbW90ZURlc2Ny
aXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2Fp
dCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIENyZWF0
ZSBhbnN3ZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFu
c3dlcmluZ1BDLmNyZWF0ZUFuc3dlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7
Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhbnN3ZXJTZHAgPSBzZHBM
YXRjaC5nZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyU2RwLnR5cGUsIFNlc3Npb25E
ZXNjcmlwdGlvbi5UeXBlLkFOU1dFUik7Ci0gICAgYXNzZXJ0RmFsc2UoYW5zd2VyU2RwLmRlc2Ny
aXB0aW9uLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIGFu
c3dlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNU
QUJMRSk7Ci0gICAgYW5zd2VyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5z
d2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51
bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBm
b3Igb2ZmZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAg
b2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRl
LlNUQUJMRSk7Ci0gICAgb2ZmZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwg
YW5zd2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2Vy
dE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzdHJlYW0g
d2FzIHJlYWxseSByZW1vdmVkLgotICAgIGFzc2VydFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25z
LmdvdFJlbW90ZVN0cmVhbXMuaXNFbXB0eSgpKTsKLQotICAgIC8vIEZyZWUgdGhlIEphdmEtbGFu
ZCBvYmplY3RzIGFuZCBjb2xsZWN0IHRoZW0uCi0gICAgc2h1dGRvd25QQyhvZmZlcmluZ1BDLCBv
ZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgb2ZmZXJpbmdQQyA9IG51bGw7Ci0gICAgc2h1dGRv
d25QQyhhbnN3ZXJpbmdQQywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBhbnN3ZXJpbmdQ
QyA9IG51bGw7Ci0gICAgb2ZmZXJlclZpZGVvVHJhY2suZGlzcG9zZSgpOwotICAgIG9mZmVyZXJB
dWRpb1RyYWNrLmRpc3Bvc2UoKTsKLSAgICB2aWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0g
ICAgdmlkZW9DYXB0dXJlci5kaXNwb3NlKCk7Ci0gICAgdmlkZW9Tb3VyY2UuZGlzcG9zZSgpOwot
ICAgIGZhY3RvcnkuZGlzcG9zZSgpOwotICAgIFN5c3RlbS5nYygpOwotICB9Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgdm9pZCBnZXRNZXRyaWNzKCkgewotICAgIE1ldHJpY3MgbWV0cmljcyA9IE1ldHJp
Y3MuZ2V0QW5kUmVzZXQoKTsKLSAgICBhc3NlcnRUcnVlKG1ldHJpY3MubWFwLnNpemUoKSA+IDAp
OwotICAgIC8vIFRlc3QgZm9yIGV4YW1wbGUgdGhhdCB0aGUgbGlmZXRpbWUgb2YgYSBDYWxsIGlz
IHJlY29yZGVkLgotICAgIFN0cmluZyBuYW1lID0gIldlYlJUQy5DYWxsLkxpZmV0aW1lSW5TZWNv
bmRzIjsKLSAgICBhc3NlcnRUcnVlKG1ldHJpY3MubWFwLmNvbnRhaW5zS2V5KG5hbWUpKTsKLSAg
ICBIaXN0b2dyYW1JbmZvIGluZm8gPSBtZXRyaWNzLm1hcC5nZXQobmFtZSk7Ci0gICAgYXNzZXJ0
VHJ1ZShpbmZvLnNhbXBsZXMuc2l6ZSgpID4gMCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2
b2lkIHNodXRkb3duUEMoUGVlckNvbm5lY3Rpb24gcGMsIE9ic2VydmVyRXhwZWN0YXRpb25zIGV4
cGVjdGF0aW9ucykgewotICAgIGlmIChleHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwgIT0gbnVsbCkg
ewotICAgICAgZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLnVucmVnaXN0ZXJPYnNlcnZlcigpOwot
ICAgICAgZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgZXhw
ZWN0YXRpb25zLmV4cGVjdFN0YXRzQ2FsbGJhY2soKTsKLSAgICBhc3NlcnRUcnVlKHBjLmdldFN0
YXRzKGV4cGVjdGF0aW9ucywgbnVsbCkpOwotICAgIGFzc2VydFRydWUoZXhwZWN0YXRpb25zLndh
aXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotICAg
IGV4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0
ZS5DTE9TRUQpOwotICAgIGV4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFs
aW5nU3RhdGUuQ0xPU0VEKTsKLSAgICBwYy5jbG9zZSgpOwotICAgIGFzc2VydFRydWUoZXhwZWN0
YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05E
UykpOwotICAgIGV4cGVjdGF0aW9ucy5leHBlY3RTdGF0c0NhbGxiYWNrKCk7Ci0gICAgYXNzZXJ0
VHJ1ZShwYy5nZXRTdGF0cyhleHBlY3RhdGlvbnMsIG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKGV4
cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NF
Q09ORFMpKTsKLQotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRllJIHN0YXRzOiAiKTsKLSAgICBp
bnQgcmVwb3J0SW5kZXggPSAtMTsKLSAgICBmb3IgKFN0YXRzUmVwb3J0W10gcmVwb3J0cyA6IGV4
cGVjdGF0aW9ucy50YWtlU3RhdHNSZXBvcnRzKCkpIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRs
bigiIFJlcG9ydCAjIiArICgrK3JlcG9ydEluZGV4KSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlcG9ydHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIg
ICIgKyByZXBvcnRzW2ldLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnRF
cXVhbHMoMSwgcmVwb3J0SW5kZXgpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5kIHN0YXRz
LiIpOwotCi0gICAgcGMuZGlzcG9zZSgpOwotICB9Ci0KLSAgLy8gUmV0dXJucyBhIHNldCBvZiB0
aHJlYWQgSURzIGJlbG9uZ2luZyB0byB0aGlzIHByb2Nlc3MsIGFzIFN0cmluZ3MuCi0gIHByaXZh
dGUgc3RhdGljIFRyZWVTZXQ8U3RyaW5nPiBhbGxUaHJlYWRzKCkgewotICAgIFRyZWVTZXQ8U3Ry
aW5nPiB0aHJlYWRzID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOwotICAgIC8vIFRoaXMgcG9rZXMg
YXQgL3Byb2MgaW5zdGVhZCBvZiB1c2luZyB0aGUgSmF2YSBBUElzIGJlY2F1c2Ugd2UncmUgYWxz
bwotICAgIC8vIGxvb2tpbmcgZm9yIGxpYmppbmdsZS93ZWJydGMgbmF0aXZlIHRocmVhZHMsIG1v
c3Qgb2Ygd2hpY2ggd29uJ3QgaGF2ZQotICAgIC8vIGF0dGFjaGVkIHRvIHRoZSBKVk0uCi0gICAg
Zm9yIChTdHJpbmcgdGhyZWFkSWQgOiAobmV3IEZpbGUoIi9wcm9jL3NlbGYvdGFzayIpKS5saXN0
KCkpIHsKLSAgICAgIHRocmVhZHMuYWRkKHRocmVhZElkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRo
cmVhZHM7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb25UZXN0
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vblRlc3Qu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1v
blRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE4MyArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5S
ZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZS4qOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJl
bmRlcmVyQ29tbW9uLmdldERpc3BsYXlTaXplOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJl
bmRlcmVyQ29tbW9uLmdldExheW91dE1hdHJpeDsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5S
ZW5kZXJlckNvbW1vbi5yb3RhdGVUZXh0dXJlTWF0cml4OwotCi1pbXBvcnQgYW5kcm9pZC5ncmFw
aGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9y
dCBhbmRyb2lkLnRlc3QuTW9yZUFzc2VydHM7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVp
bGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFJlbmRlcmVy
Q29tbW9uVGVzdCBleHRlbmRzIEFjdGl2aXR5VGVzdENhc2UgewotICBAU21hbGxUZXN0Ci0gIHN0
YXRpYyBwdWJsaWMgdm9pZCB0ZXN0RGlzcGxheVNpemVOb0ZyYW1lKCkgewotICAgIGFzc2VydEVx
dWFscyhuZXcgUG9pbnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDAu
MGYsIDAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5
U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgMC4wZiwgMCwgMCkpOwotICAgIGFzc2VydEVxdWFscyhu
ZXcgUG9pbnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMC4w
ZiwgMCwgMCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVz
dERpc3BsYXlTaXplRGVnZW5lcmF0ZUFzcGVjdFJhdGlvKCkgewotICAgIGFzc2VydEVxdWFscyhu
ZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMC4w
ZiwgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBn
ZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgMC4wZiwgMTI4MCwgNzIwKSk7Ci0gICAg
YXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9B
U1BFQ1RfQkFMQU5DRUQsIDAuMGYsIDEyODAsIDcyMCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAot
ICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFplcm9EaXNwbGF5U2l6ZSgpIHsKLSAgICBhc3NlcnRF
cXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAx
Ni4wZiAvIDksIDAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXRE
aXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgMTYuMGYgLyA5LCAwLCAwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JB
TEFOQ0VELCAxNi4wZiAvIDksIDAsIDApKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHN0YXRpYyB2b2lkIHRlc3REaXNwbGF5U2l6ZVBlcmZlY3RGaXQoKSB7Ci0gICAgYXNzZXJ0RXF1
YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklU
LCAxNi4wZiAvIDksIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4
MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDE2LjBmIC8gOSwgMTI4
MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNw
bGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDE2LjBmIC8gOSwgMTI4MCwgNzIwKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDEyODApLCBnZXREaXNwbGF5U2l6ZShTQ0FM
RV9BU1BFQ1RfRklULCA5LjBmIC8gMTYsIDcyMCwgMTI4MCkpOwotICAgIGFzc2VydEVxdWFscyhu
ZXcgUG9pbnQoNzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDku
MGYgLyAxNiwgNzIwLCAxMjgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDEy
ODApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDkuMGYgLyAxNiwgNzIw
LCAxMjgwKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0
TGFuZHNjYXBlVmlkZW9JblBvcnRyYWl0RGlzcGxheSgpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3
IFBvaW50KDcyMCwgNDA1KSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMTYuMGYg
LyA5LCA3MjAsIDEyODApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDcyMCwgMTI4MCks
IGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCAxNi4wZiAvIDksIDcyMCwgMTI4MCkp
OwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShT
Q0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDE2LjBmIC8gOSwgNzIwLCAxMjgwKSk7Ci0gIH0KLQotICBA
U21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0UG9ydHJhaXRWaWRlb0luTGFuZHNj
YXBlRGlzcGxheSgpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDQwNSwgNzIwKSwgZ2V0
RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgOS4wZiAvIDE2LCAxMjgwLCA3MjApKTsKLSAg
ICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxF
X0FTUEVDVF9GSUxMLCA5LjBmIC8gMTYsIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhu
ZXcgUG9pbnQoNzIwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQs
IDkuMGYgLyAxNiwgMTI4MCwgNzIwKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBz
dGF0aWMgdm9pZCB0ZXN0Rm91clRvVGhyZWVWaWRlb0luU2l4dGVlblRvTmluZURpc3BsYXkoKSB7
Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg5NjAsIDcyMCksIGdldERpc3BsYXlTaXplKFND
QUxFX0FTUEVDVF9GSVQsIDQuMGYgLyAzLCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMo
bmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCA0
LjBmIC8gMywgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3
MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDQuMGYgLyAzLCAxMjgw
LCA3MjApKTsKLSAgfQotCi0gIC8vIE9ubHkga2VlcCAyIHJvdW5kZWQgZGVjaW1hbHMgdG8gbWFr
ZSBmbG9hdCBjb21wYXJpc29uIHJvYnVzdC4KLSAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlW10gcm91
bmQoZmxvYXRbXSBhcnJheSkgewotICAgIGFzc2VydEVxdWFscygxNiwgYXJyYXkubGVuZ3RoKTsK
LSAgICBmaW5hbCBkb3VibGVbXSBkb3VibGVBcnJheSA9IG5ldyBkb3VibGVbMTZdOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMTY7ICsraSkgewotICAgICAgZG91YmxlQXJyYXlbaV0gPSBNYXRo
LnJvdW5kKDEwMCAqIGFycmF5W2ldKSAvIDEwMC4wOwotICAgIH0KLSAgICByZXR1cm4gZG91Ymxl
QXJyYXk7Ci0gIH0KLQotICAvLyBCcmllZiBzdW1tYXJ5IGFib3V0IG1hdHJpeCB0cmFuc2Zvcm1h
dGlvbnM6Ci0gIC8vIEEgY29vcmRpbmF0ZSBwID0gW3UsIHYsIDAsIDFdIGlzIHRyYW5zZm9ybWVk
IGJ5IG1hdHJpeCBtIGxpa2UgdGhpcyBwJyA9IFt1JywgdicsIDAsIDFdID0gbSAqIHAuCi0gIC8v
IE9wZW5HTCB1c2VzIGNvbHVtbi1tYWpvciBvcmRlciwgc286Ci0gIC8vIHUnID0gdSAqIG1bMF0g
KyB2ICogbVs0XSArIG1bMTJdLgotICAvLyB2JyA9IHUgKiBtWzFdICsgdiAqIG1bNV0gKyBtWzEz
XS4KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGF5b3V0TWF0cml4
RGVmYXVsdCgpIHsKLSAgICBmaW5hbCBmbG9hdCBsYXlvdXRNYXRyaXhbXSA9IGdldExheW91dE1h
dHJpeChmYWxzZSwgMS4wZiwgMS4wZik7Ci0gICAgLy8gQXNzZXJ0OgotICAgIC8vIHUnID0gdS4K
LSAgICAvLyB2JyA9IHYuCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIE1vcmVBc3NlcnRz
LmFzc2VydEVxdWFscyhuZXcgZG91YmxlW10gewotICAgICAgICAxLCAwLCAwLCAwLAotICAgICAg
ICAwLCAxLCAwLCAwLAotICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAwLCAwLCAwLCAxfSwg
cm91bmQobGF5b3V0TWF0cml4KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBA
U21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGF5b3V0TWF0cml4TWlycm9yKCkg
ewotICAgIGZpbmFsIGZsb2F0IGxheW91dE1hdHJpeFtdID0gZ2V0TGF5b3V0TWF0cml4KHRydWUs
IDEuMGYsIDEuMGYpOwotICAgIC8vIEFzc2VydDoKLSAgICAvLyB1JyA9IDEgLSB1LgotICAgIC8v
IHYnID0gdi4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgTW9yZUFzc2VydHMuYXNzZXJ0
RXF1YWxzKG5ldyBkb3VibGVbXSB7Ci0gICAgICAgIC0xLCAwLCAwLCAwLAotICAgICAgICAgMCwg
MSwgMCwgMCwKLSAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAxLCAwLCAwLCAxfSwgcm91
bmQobGF5b3V0TWF0cml4KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAU21h
bGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGF5b3V0TWF0cml4U2NhbGUoKSB7Ci0g
ICAgLy8gVmlkZW8gaGFzIGFzcGVjdCByYXRpbyAyLCBidXQgbGF5b3V0IGlzIHNxdWFyZS4gVGhp
cyB3aWxsIGNhdXNlIG9ubHkgdGhlIGNlbnRlciBwYXJ0IG9mIHRoZQotICAgIC8vIHZpZGVvIHRv
IGJlIHZpc2libGUsIGkuZS4gdGhlIHUgY29vcmRpbmF0ZSB3aWxsIGdvIGZyb20gMC4yNSB0byAw
Ljc1IGluc3RlYWQgb2YgZnJvbSAwIHRvIDEuCi0gICAgZmluYWwgZmxvYXQgbGF5b3V0TWF0cml4
W10gPSBnZXRMYXlvdXRNYXRyaXgoZmFsc2UsIDIuMGYsIDEuMGYpOwotICAgIC8vIEFzc2VydDoK
LSAgICAvLyB1JyA9IDAuMjUgKyAwLjUgdS4KLSAgICAvLyB2JyA9IHYuCi0gICAgLy8gY2xhbmct
Zm9ybWF0IG9mZgotICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFscyhuZXcgZG91YmxlW10gewot
ICAgICAgICAgMC41LCAwLCAwLCAwLAotICAgICAgICAgICAwLCAxLCAwLCAwLAotICAgICAgICAg
ICAwLCAwLCAxLCAwLAotICAgICAgICAwLjI1LCAwLCAwLCAxfSwgcm91bmQobGF5b3V0TWF0cml4
KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1Ymxp
YyBzdGF0aWMgdm9pZCB0ZXN0Um90YXRlVGV4dHVyZU1hdHJpeERlZmF1bHQoKSB7Ci0gICAgLy8g
VGVzdCB0aGF0IHJvdGF0aW9uIHdpdGggMCBkZWdyZWVzIHJldHVybnMgYW4gaWRlbnRpY2FsIG1h
dHJpeC4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgZmluYWwgZmxvYXRbXSBtYXRyaXgg
PSBuZXcgZmxvYXRbXSB7Ci0gICAgICAgIDEsIDIsIDMsIDQsCi0gICAgICAgIDUsIDYsIDcsIDgs
Ci0gICAgICAgIDksIDAsIDEsIDIsCi0gICAgICAgIDMsIDQsIDUsIDYKLSAgICB9OwotICAgIC8v
IGNsYW5nLWZvcm1hdCBvbgotICAgIGZpbmFsIGZsb2F0IHJvdGF0ZWRNYXRyaXhbXSA9IHJvdGF0
ZVRleHR1cmVNYXRyaXgobWF0cml4LCAwKTsKLSAgICBNb3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMo
cm91bmQobWF0cml4KSwgcm91bmQocm90YXRlZE1hdHJpeCkpOwotICB9Ci0KLSAgQFNtYWxsVGVz
dAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFJvdGF0ZVRleHR1cmVNYXRyaXg5MERlZygpIHsK
LSAgICBmaW5hbCBmbG9hdCBzYW1wbGluZ01hdHJpeFtdID0gcm90YXRlVGV4dHVyZU1hdHJpeChS
ZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpLCA5MCk7Ci0gICAgLy8gQXNzZXJ0OgotICAg
IC8vIHUnID0gMSAtIHYuCi0gICAgLy8gdicgPSB1LgotICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYK
LSAgICBNb3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMobmV3IGRvdWJsZVtdIHsKLSAgICAgICAgIDAs
IDEsIDAsIDAsCi0gICAgICAgIC0xLCAwLCAwLCAwLAotICAgICAgICAgMCwgMCwgMSwgMCwKLSAg
ICAgICAgIDEsIDAsIDAsIDF9LCByb3VuZChzYW1wbGluZ01hdHJpeCkpOwotICAgIC8vIGNsYW5n
LWZvcm1hdCBvbgotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVz
dFJvdGF0ZVRleHR1cmVNYXRyaXgxODBEZWcoKSB7Ci0gICAgZmluYWwgZmxvYXQgc2FtcGxpbmdN
YXRyaXhbXSA9IHJvdGF0ZVRleHR1cmVNYXRyaXgoUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRy
aXgoKSwgMTgwKTsKLSAgICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSAxIC0gdS4KLSAgICAvLyB2
JyA9IDEgLSB2LgotICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBNb3JlQXNzZXJ0cy5hc3Nl
cnRFcXVhbHMobmV3IGRvdWJsZVtdIHsKLSAgICAgICAgLTEsICAwLCAwLCAwLAotICAgICAgICAg
MCwgLTEsIDAsIDAsCi0gICAgICAgICAwLCAgMCwgMSwgMCwKLSAgICAgICAgIDEsICAxLCAwLCAx
fSwgcm91bmQoc2FtcGxpbmdNYXRyaXgpKTsKLSAgICAvLyBjbGFuZy1mb3JtYXQgb24KLSAgfQot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlclRlc3QuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJl
SGVscGVyVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDg5ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNz
LlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBh
bmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0eVRlc3RD
YXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1U
ZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRl
c3Q7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25j
dXJyZW50LkNvdW50RG93bkxhdGNoOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3VyZmFjZVRleHR1
cmVIZWxwZXJUZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0Q2FzZSB7Ci0gIC8qKgotICAgKiBNb2Nr
IHRleHR1cmUgbGlzdGVuZXIgd2l0aCBibG9ja2luZyB3YWl0IGZ1bmN0aW9uYWxpdHkuCi0gICAq
LwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIE1vY2tUZXh0dXJlTGlzdGVuZXIKLSAgICAg
IGltcGxlbWVudHMgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVM
aXN0ZW5lciB7Ci0gICAgcHVibGljIGludCBvZXNUZXh0dXJlSWQ7Ci0gICAgcHVibGljIGZsb2F0
W10gdHJhbnNmb3JtTWF0cml4OwotICAgIHByaXZhdGUgYm9vbGVhbiBoYXNOZXdGcmFtZSA9IGZh
bHNlOwotICAgIC8vIFRocmVhZCB3aGVyZSBmcmFtZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHJlY2Vp
dmVkIG9uLgotICAgIHByaXZhdGUgZmluYWwgVGhyZWFkIGV4cGVjdGVkVGhyZWFkOwotCi0gICAg
TW9ja1RleHR1cmVMaXN0ZW5lcigpIHsKLSAgICAgIHRoaXMuZXhwZWN0ZWRUaHJlYWQgPSBudWxs
OwotICAgIH0KLQotICAgIE1vY2tUZXh0dXJlTGlzdGVuZXIoVGhyZWFkIGV4cGVjdGVkVGhyZWFk
KSB7Ci0gICAgICB0aGlzLmV4cGVjdGVkVGhyZWFkID0gZXhwZWN0ZWRUaHJlYWQ7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uVGV4dHVyZUZy
YW1lQXZhaWxhYmxlKAotICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9y
bU1hdHJpeCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgICAgaWYgKGV4cGVjdGVkVGhyZWFkICE9
IG51bGwgJiYgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBleHBlY3RlZFRocmVhZCkgewotICAg
ICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJvblRleHR1cmVGcmFtZUF2YWls
YWJsZSBjYWxsZWQgb24gd3JvbmcgdGhyZWFkLiIpOwotICAgICAgfQotICAgICAgdGhpcy5vZXNU
ZXh0dXJlSWQgPSBvZXNUZXh0dXJlSWQ7Ci0gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHRy
YW5zZm9ybU1hdHJpeDsKLSAgICAgIGhhc05ld0ZyYW1lID0gdHJ1ZTsKLSAgICAgIG5vdGlmeUFs
bCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFdhaXQgaW5kZWZpbml0ZWx5IGZvciBhIG5l
dyBmcmFtZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd2FpdEZvck5l
d0ZyYW1lKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIHdoaWxlICghaGFz
TmV3RnJhbWUpIHsKLSAgICAgICAgd2FpdCgpOwotICAgICAgfQotICAgICAgaGFzTmV3RnJhbWUg
PSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXYWl0IGZvciBhIG5ldyBmcmFtZSwg
b3IgdW50aWwgdGhlIHNwZWNpZmllZCB0aW1lb3V0IGVsYXBzZXMuIFJldHVybnMgdHJ1ZSBpZiBh
IG5ldyBmcmFtZSB3YXMKLSAgICAgKiByZWNlaXZlZCBiZWZvcmUgdGhlIHRpbWVvdXQuCi0gICAg
ICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIHdhaXRGb3JOZXdGcmFtZShmaW5h
bCBsb25nIHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIGZp
bmFsIGxvbmcgc3RhcnRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAg
ICAgIGxvbmcgdGltZVJlbWFpbmluZ01zID0gdGltZW91dE1zOwotICAgICAgd2hpbGUgKCFoYXNO
ZXdGcmFtZSAmJiB0aW1lUmVtYWluaW5nTXMgPiAwKSB7Ci0gICAgICAgIHdhaXQodGltZVJlbWFp
bmluZ01zKTsKLSAgICAgICAgZmluYWwgbG9uZyBlbGFwc2VkVGltZU1zID0gU3lzdGVtQ2xvY2su
ZWxhcHNlZFJlYWx0aW1lKCkgLSBzdGFydFRpbWVNczsKLSAgICAgICAgdGltZVJlbWFpbmluZ01z
ID0gdGltZW91dE1zIC0gZWxhcHNlZFRpbWVNczsKLSAgICAgIH0KLSAgICAgIGZpbmFsIGJvb2xl
YW4gZGlkUmVjZWl2ZUZyYW1lID0gaGFzTmV3RnJhbWU7Ci0gICAgICBoYXNOZXdGcmFtZSA9IGZh
bHNlOwotICAgICAgcmV0dXJuIGRpZFJlY2VpdmVGcmFtZTsKLSAgICB9Ci0gIH0KLQotICAvKiog
QXNzZXJ0IHRoYXQgdHdvIGludGVnZXJzIGFyZSBjbG9zZSwgd2l0aCBkaWZmZXJlbmNlIGF0IG1v
c3QKLSAgICoge0Bjb2RlIHRocmVzaG9sZH0uICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3Nl
cnRDbG9zZShpbnQgdGhyZXNob2xkLCBpbnQgZXhwZWN0ZWQsIGludCBhY3R1YWwpIHsKLSAgICBp
ZiAoTWF0aC5hYnMoZXhwZWN0ZWQgLSBhY3R1YWwpIDw9IHRocmVzaG9sZCkKLSAgICAgIHJldHVy
bjsKLSAgICBmYWlsTm90RXF1YWxzKCJOb3QgY2xvc2UgZW5vdWdoLCB0aHJlc2hvbGQgIiArIHRo
cmVzaG9sZCwgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBub3Jt
YWwgdXNlIGJ5IHJlY2VpdmluZyB0aHJlZSB1bmlmb3JtIHRleHR1cmUgZnJhbWVzLiBUZXh0dXJl
IGZyYW1lcyBhcmUgcmV0dXJuZWQgYXMgZWFybHkKLSAgICogYXMgcG9zc2libGUuIFRoZSB0ZXh0
dXJlIHBpeGVsIHZhbHVlcyBhcmUgaW5zcGVjdGVkIGJ5IGRyYXdpbmcgdGhlIHRleHR1cmUgZnJh
bWUgdG8gYSBwaXhlbAotICAgKiBidWZmZXIgYW5kIHJlYWRpbmcgaXQgYmFjayB3aXRoIGdsUmVh
ZFBpeGVscygpLgotICAgKi8KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRl
c3RUaHJlZUNvbnN0YW50Q29sb3JGcmFtZXMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpbmFsIGludCB3aWR0aCA9IDE2OwotICAgIGZpbmFsIGludCBoZWlnaHQgPSAxNjsK
LSAgICAvLyBDcmVhdGUgRUdMIGJhc2Ugd2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91
dHB1dC4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBF
Z2xCYXNlLkNPTkZJR19QSVhFTF9CVUZGRVIpOwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1
cmZhY2Uod2lkdGgsIGhlaWdodCk7Ci0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5l
dyBHbFJlY3REcmF3ZXIoKTsKLQotICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBh
bmQgbGlzdGVuZXIuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1
cmVIZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoCi0gICAgICAgICJTdXJmYWNl
VGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBlZ2xCYXNlLmdldEVnbEJhc2VD
b250ZXh0KCkpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcg
TW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlz
dGVuaW5nKGxpc3RlbmVyKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4
dHVyZSgpLnNldERlZmF1bHRCdWZmZXJTaXplKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gQ3Jl
YXRlIHJlc291cmNlcyBmb3Igc3R1YmJpbmcgYW4gT0VTIHRleHR1cmUgcHJvZHVjZXIuIHxlZ2xP
ZXNCYXNlfCBoYXMgdGhlIFN1cmZhY2VUZXh0dXJlIGluCi0gICAgLy8gfHN1cmZhY2VUZXh0dXJl
SGVscGVyfCBhcyB0aGUgdGFyZ2V0IEVHTFN1cmZhY2UuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xP
ZXNCYXNlID0gRWdsQmFzZS5jcmVhdGUoZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBFZ2xC
YXNlLkNPTkZJR19QTEFJTik7Ci0gICAgZWdsT2VzQmFzZS5jcmVhdGVTdXJmYWNlKHN1cmZhY2VU
ZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGFzc2VydEVxdWFscyhlZ2xP
ZXNCYXNlLnN1cmZhY2VXaWR0aCgpLCB3aWR0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbE9lc0Jh
c2Uuc3VyZmFjZUhlaWdodCgpLCBoZWlnaHQpOwotCi0gICAgZmluYWwgaW50IHJlZFtdID0gbmV3
IGludFtdIHs3OSwgMTQ0LCAxODV9OwotICAgIGZpbmFsIGludCBncmVlbltdID0gbmV3IGludFtd
IHs2NiwgMjEwLCAxNjJ9OwotICAgIGZpbmFsIGludCBibHVlW10gPSBuZXcgaW50W10gezE2MSwg
MTE3LCAxNTh9OwotICAgIC8vIERyYXcgdGhyZWUgZnJhbWVzLgotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMzsgKytpKSB7Ci0gICAgICAvLyBEcmF3IGEgY29uc3RhbnQgY29sb3IgZnJhbWUgb250
byB0aGUgU3VyZmFjZVRleHR1cmUuCi0gICAgICBlZ2xPZXNCYXNlLm1ha2VDdXJyZW50KCk7Ci0g
ICAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKHJlZFtpXSAvIDI1NS4wZiwgZ3JlZW5baV0gLyAyNTUu
MGYsIGJsdWVbaV0gLyAyNTUuMGYsIDEuMGYpOwotICAgICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIw
LkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGlt
YXRlbHkgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAgICAgZWdsT2VzQmFz
ZS5zd2FwQnVmZmVycygpOwotCi0gICAgICAvLyBXYWl0IGZvciBhbiBPRVMgdGV4dHVyZSB0byBh
cnJpdmUgYW5kIGRyYXcgaXQgb250byB0aGUgcGl4ZWwgYnVmZmVyLgotICAgICAgbGlzdGVuZXIu
d2FpdEZvck5ld0ZyYW1lKCk7Ci0gICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICBk
cmF3ZXIuZHJhd09lcygKLSAgICAgICAgICBsaXN0ZW5lci5vZXNUZXh0dXJlSWQsIGxpc3RlbmVy
LnRyYW5zZm9ybU1hdHJpeCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0K
LSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotCi0gICAg
ICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4gTm90
IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUuZy4KLSAgICAgIC8vIE5leHVzIDkuCi0gICAg
ICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh3
aWR0aCAqIGhlaWdodCAqIDQpOwotICAgICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYmFE
YXRhKTsKLSAgICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xSZWFkUGl4ZWxzIik7Ci0K
LSAgICAgIC8vIEFzc2VydCByZW5kZXJlZCBpbWFnZSBpcyBleHBlY3RlZCBjb25zdGFudCBjb2xv
ci4KLSAgICAgIHdoaWxlIChyZ2JhRGF0YS5oYXNSZW1haW5pbmcoKSkgewotICAgICAgICBhc3Nl
cnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCByZWRbaV0pOwotICAgICAgICBhc3NlcnRF
cXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCBncmVlbltpXSk7Ci0gICAgICAgIGFzc2VydEVx
dWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYsIGJsdWVbaV0pOwotICAgICAgICBhc3NlcnRFcXVh
bHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCAyNTUpOwotICAgICAgfQotICAgIH0KLQotICAgIGRy
YXdlci5yZWxlYXNlKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAg
IGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgZGlzcG9zaW5nIHRo
ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciB3aGlsZSBob2xkaW5nIGEgcGVuZGluZyB0ZXh0dXJlIGZy
YW1lLiBUaGUgcGVuZGluZwotICAgKiB0ZXh0dXJlIGZyYW1lIHNob3VsZCBzdGlsbCBiZSB2YWxp
ZCwgYW5kIHRoaXMgaXMgdGVzdGVkIGJ5IGRyYXdpbmcgdGhlIHRleHR1cmUgZnJhbWUgdG8gYSBw
aXhlbAotICAgKiBidWZmZXIgYW5kIHJlYWRpbmcgaXQgYmFjayB3aXRoIGdsUmVhZFBpeGVscygp
LgotICAgKi8KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RMYXRlUmV0
dXJuRnJhbWUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIGludCB3
aWR0aCA9IDE2OwotICAgIGZpbmFsIGludCBoZWlnaHQgPSAxNjsKLSAgICAvLyBDcmVhdGUgRUdM
IGJhc2Ugd2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4KLSAgICBmaW5hbCBF
Z2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhF
TF9CVUZGRVIpOwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2Uod2lkdGgsIGhlaWdo
dCk7Ci0KLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgYW5kIGxpc3RlbmVyLgot
ICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0gU3Vy
ZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKAotICAgICAgICAiU3VyZmFjZVRleHR1cmVIZWxwZXIg
dGVzdCIgLyogdGhyZWFkTmFtZSAqLywgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAg
ICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlz
dGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5l
cik7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKS5zZXREZWZh
dWx0QnVmZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZXMg
Zm9yIHN0dWJiaW5nIGFuIE9FUyB0ZXh0dXJlIHByb2R1Y2VyLiB8ZWdsT2VzQmFzZXwgaGFzIHRo
ZSBTdXJmYWNlVGV4dHVyZSBpbgotICAgIC8vIHxzdXJmYWNlVGV4dHVyZUhlbHBlcnwgYXMgdGhl
IHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsT2VzQmFzZSA9IEVnbEJh
c2UuY3JlYXRlKGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgRWdsQmFzZS5DT05GSUdfUExB
SU4pOwotICAgIGVnbE9lc0Jhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5n
ZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsT2VzQmFzZS5zdXJmYWNl
V2lkdGgoKSwgd2lkdGgpOwotICAgIGFzc2VydEVxdWFscyhlZ2xPZXNCYXNlLnN1cmZhY2VIZWln
aHQoKSwgaGVpZ2h0KTsKLQotICAgIGZpbmFsIGludCByZWQgPSA3OTsKLSAgICBmaW5hbCBpbnQg
Z3JlZW4gPSA2NjsKLSAgICBmaW5hbCBpbnQgYmx1ZSA9IDE2MTsKLSAgICAvLyBEcmF3IGEgY29u
c3RhbnQgY29sb3IgZnJhbWUgb250byB0aGUgU3VyZmFjZVRleHR1cmUuCi0gICAgZWdsT2VzQmFz
ZS5tYWtlQ3VycmVudCgpOwotICAgIEdMRVMyMC5nbENsZWFyQ29sb3IocmVkIC8gMjU1LjBmLCBn
cmVlbiAvIDI1NS4wZiwgYmx1ZSAvIDI1NS4wZiwgMS4wZik7Ci0gICAgR0xFUzIwLmdsQ2xlYXIo
R0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1
bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICBlZ2xPZXNC
YXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgZWdsT2VzQmFzZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBX
YWl0IGZvciBPRVMgdGV4dHVyZSBmcmFtZS4KLSAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUo
KTsKLSAgICAvLyBEaWNvbm5lY3Qgd2hpbGUgaG9sZGluZyB0aGUgZnJhbWUuCi0gICAgc3VyZmFj
ZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotCi0gICAgLy8gRHJhdyB0aGUgcGVuZGluZyB0ZXh0
dXJlIGZyYW1lIG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICBlZ2xCYXNlLm1ha2VDdXJyZW50
KCk7Ci0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5ldyBHbFJlY3REcmF3ZXIoKTsK
LSAgICBkcmF3ZXIuZHJhd09lcygKLSAgICAgICAgbGlzdGVuZXIub2VzVGV4dHVyZUlkLCBsaXN0
ZW5lci50cmFuc2Zvcm1NYXRyaXgsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQp
OwotICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0KLSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGlu
IHRoZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4gTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0Is
IGUuZy4gTmV4dXMgOS4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZl
ci5hbGxvY2F0ZURpcmVjdCh3aWR0aCAqIGhlaWdodCAqIDQpOwotICAgIEdMRVMyMC5nbFJlYWRQ
aXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJ
R05FRF9CWVRFLCByZ2JhRGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJl
YWRQaXhlbHMiKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLQotICAgIC8vIEFzc2VydCByZW5k
ZXJlZCBpbWFnZSBpcyBleHBlY3RlZCBjb25zdGFudCBjb2xvci4KLSAgICB3aGlsZSAocmdiYURh
dGEuaGFzUmVtYWluaW5nKCkpIHsKLSAgICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAm
IDB4RkYsIHJlZCk7Ci0gICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCBn
cmVlbik7Ci0gICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCBibHVlKTsK
LSAgICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYsIDI1NSk7Ci0gICAgfQot
ICAgIC8vIExhdGUgZnJhbWUgcmV0dXJuIGFmdGVyIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gZGlzcG9z
ZWQgYW5kIHJlbGVhc2VkLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVG
cmFtZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgZGlzcG9zaW5nIHRoZSBTdXJmYWNlVGV4
dHVyZUhlbHBlciwgYnV0IGtlZXAgdHJ5aW5nIHRvIHByb2R1Y2UgbW9yZSB0ZXh0dXJlIGZyYW1l
cy4gTm8KLSAgICogZnJhbWVzIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8gdGhlIGxpc3RlbmVyLgot
ICAgKi8KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3REaXNwb3NlKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1
cmVIZWxwZXIgYW5kIGxpc3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1
cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRl
KCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxsKTsKLSAg
ICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlz
dGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5l
cik7Ci0gICAgLy8gQ3JlYXRlIEVnbEJhc2Ugd2l0aCB0aGUgU3VyZmFjZVRleHR1cmUgYXMgdGFy
Z2V0IEVHTFN1cmZhY2UuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVh
dGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFj
ZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICBlZ2xCYXNl
Lm1ha2VDdXJyZW50KCk7Ci0gICAgLy8gQXNzZXJ0IG5vIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVk
IHlldC4KLSAgICBhc3NlcnRGYWxzZShsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoMSkpOwotICAg
IC8vIERyYXcgYW5kIHdhaXQgZm9yIG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVT
MjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGlt
YXRlbHkgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAgIGVnbEJhc2Uuc3dh
cEJ1ZmZlcnMoKTsKLSAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoKTsKLSAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgIC8vIERpc3Bvc2UgLSB3
ZSBzaG91bGQgbm90IHJlY2VpdmUgYW55IHRleHR1cmVzIGFmdGVyIHRoaXMuCi0gICAgc3VyZmFj
ZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotCi0gICAgLy8gRHJhdyBvbmUgZnJhbWUuCi0gICAg
R0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGVnbEJhc2Uu
c3dhcEJ1ZmZlcnMoKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHNob3VsZCBub3QgdHJpZ2dlciBv
blRleHR1cmVGcmFtZUF2YWlsYWJsZSgpIGJlY2F1c2UgZGlzcG9zZWQgaGFzIGJlZW4gY2FsbGVk
LgotICAgIC8vIEFzc2VydCB0aGF0IG5vIE9FUyB0ZXh0dXJlIHdhcyBkZWxpdmVyZWQuCi0gICAg
YXNzZXJ0RmFsc2UobGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKDUwMCkpOwotCi0gICAgZWdsQmFz
ZS5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBkaXNwb3NpbmcgdGhlIFN1cmZh
Y2VUZXh0dXJlSGVscGVyIGltbWVkaWF0ZWx5IGFmdGVyIGlzIGhhcyBiZWVuIHNldHVwIHRvIHVz
ZSBhCi0gICAqIHNoYXJlZCBjb250ZXh0LiBObyBmcmFtZXMgc2hvdWxkIGJlIGRlbGl2ZXJlZCB0
byB0aGUgbGlzdGVuZXIuCi0gICAqLwotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9p
ZCB0ZXN0RGlzcG9zZUltbWVkaWF0ZWx5KCkgewotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVs
cGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIu
Y3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxs
KTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICAvKioKLSAg
ICogQ2FsbCBzdG9wTGlzdGVuaW5nKCksIGJ1dCBrZWVwIHRyeWluZyB0byBwcm9kdWNlIG1vcmUg
dGV4dHVyZSBmcmFtZXMuIE5vIGZyYW1lcyBzaG91bGQgYmUKLSAgICogZGVsaXZlcmVkIHRvIHRo
ZSBsaXN0ZW5lci4KLSAgICovCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0
ZXN0U3RvcExpc3RlbmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgLy8g
Q3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBTdXJm
YWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VU
ZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFk
TmFtZSAqLywgbnVsbCk7Ci0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9
IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3Rh
cnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGggdGhlIFN1
cmZhY2VUZXh0dXJlIGFzIHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWds
QmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBl
Z2xCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1
cmUoKSk7Ci0gICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIC8vIEFzc2VydCBubyBmcmFt
ZSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVuZXIud2FpdEZv
ck5ld0ZyYW1lKDEpKTsKLSAgICAvLyBEcmF3IGFuZCB3YWl0IGZvciBvbmUgZnJhbWUuCi0gICAg
R0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIC8vIHN3YXBC
dWZmZXJzKCkgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUo
KS4KLSAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgbGlzdGVuZXIud2FpdEZvck5ld0Zy
YW1lKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0K
LSAgICAvLyBTdG9wIGxpc3RlbmluZyAtIHdlIHNob3VsZCBub3QgcmVjZWl2ZSBhbnkgdGV4dHVy
ZXMgYWZ0ZXIgdGhpcy4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7
Ci0KLSAgICAvLyBEcmF3IG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xf
Q09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIC8vIHN3
YXBCdWZmZXJzKCkgc2hvdWxkIG5vdCB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkg
YmVjYXVzZSBkaXNwb3NlZCBoYXMgYmVlbiBjYWxsZWQuCi0gICAgLy8gQXNzZXJ0IHRoYXQgbm8g
T0VTIHRleHR1cmUgd2FzIGRlbGl2ZXJlZC4KLSAgICBhc3NlcnRGYWxzZShsaXN0ZW5lci53YWl0
Rm9yTmV3RnJhbWUoNTAwKSk7Ci0KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7
Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBzdG9wTGlz
dGVuaW5nKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGhhcyBi
ZWVuIHNldHVwLgotICAgKi8KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVz
dFN0b3BMaXN0ZW5pbmdJbW1lZGlhdGVseSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPQot
ICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoIlN1cmZhY2VUZXh0dXJlSGVscGVy
IHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlz
dGVuZXIgbGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLSAgICBzdXJmYWNlVGV4dHVy
ZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9z
ZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qgc3RvcExpc3RlbmluZygpIGltbWVkaWF0ZWx5
IGFmdGVyIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBoYXMgYmVlbiBzZXR1cCBvbiB0aGUgaGFu
ZGxlcgotICAgKiB0aHJlYWQuCi0gICAqLwotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMg
dm9pZCB0ZXN0U3RvcExpc3RlbmluZ0ltbWVkaWF0ZWx5T25IYW5kbGVyVGhyZWFkKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBz
dXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0
ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0g
ICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxp
c3RlbmVyKCk7Ci0KLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBzdG9wTGlzdGVuaW5nQmFycmll
ciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBzdG9w
TGlzdGVuaW5nQmFycmllckRvbmUgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgLy8gU3Rh
cnQgYnkgcG9zdGluZyB0byB0aGUgaGFuZGxlciB0aHJlYWQgdG8ga2VlcCBpdCBvY2N1cGllZC4K
LSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
VGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoc3RvcExpc3RlbmluZ0JhcnJpZXIpOwot
ICAgICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgICAgIHN0
b3BMaXN0ZW5pbmdCYXJyaWVyRG9uZS5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLQot
ICAgIC8vIHN0YXJ0TGlzdGVuaW5nKCkgaXMgYXN5bmNocm9ub3VzIGFuZCB3aWxsIHBvc3QgdG8g
dGhlIG9jY3VwaWVkIGhhbmRsZXIgdGhyZWFkLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0
YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLSAgICAvLyBXYWl0IGZvciBzdG9wTGlzdGVuaW5nKCkg
dG8gYmUgY2FsbGVkIG9uIHRoZSBoYW5kbGVyIHRocmVhZC4KLSAgICBzdG9wTGlzdGVuaW5nQmFy
cmllci5jb3VudERvd24oKTsKLSAgICBzdG9wTGlzdGVuaW5nQmFycmllckRvbmUuYXdhaXQoKTsK
LSAgICAvLyBXYWl0IHVudGlsIGhhbmRsZXIgdGhyZWFkIGlzIGlkbGUgdG8gdHJ5IHRvIGNhdGNo
IGxhdGUgc3RhcnRMaXN0ZW5pbmcoKSBjYWxsLgotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGJh
cnJpZXIgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
Z2V0SGFuZGxlcigpLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGJhcnJpZXIuY291bnREb3duKCk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoYmFycmll
cik7Ci0gICAgLy8gUHJldmlvdXMgc3RhcnRMaXN0ZW5pbmcoKSBjYWxsIHNob3VsZCBuZXZlciBo
YXZlIHRha2VuIHBsYWNlIGFuZCBpdCBzaG91bGQgYmUgb2sgdG8gY2FsbCBpdAotICAgIC8vIGFn
YWluLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsK
LQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8qKgotICAg
KiBUZXN0IGNhbGxpbmcgc3RhcnRMaXN0ZW5pbmcoKSB3aXRoIGEgbmV3IGxpc3RlbmVyIGFmdGVy
IHN0b3BMaXN0ZW5pbmcoKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAqLwotICBATWVkaXVtVGVzdAot
ICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFJlc3RhcnRMaXN0ZW5pbmdXaXRoTmV3TGlzdGVuZXIo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4
dHVyZUhlbHBlciBhbmQgbGlzdGVuZXIuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIg
c3VyZmFjZVRleHR1cmVIZWxwZXIgPQotICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVh
dGUoIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwot
ICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIxID0gbmV3IE1vY2tUZXh0dXJl
TGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0
ZW5lcjEpOwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJlIGFz
IHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2Uu
Y3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVN1
cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgZWds
QmFzZS5tYWtlQ3VycmVudCgpOwotICAgIC8vIEFzc2VydCBubyBmcmFtZSBoYXMgYmVlbiByZWNl
aXZlZCB5ZXQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVuZXIxLndhaXRGb3JOZXdGcmFtZSgxKSk7
Ci0gICAgLy8gRHJhdyBhbmQgd2FpdCBmb3Igb25lIGZyYW1lLgotICAgIEdMRVMyMC5nbENsZWFy
KEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHdpbGwg
dWx0aW1hdGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAgZWdsQmFz
ZS5zd2FwQnVmZmVycygpOwotICAgIGxpc3RlbmVyMS53YWl0Rm9yTmV3RnJhbWUoKTsKLSAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgIC8vIFN0b3Ag
bGlzdGVuaW5nIC0gfGxpc3RlbmVyMXwgc2hvdWxkIG5vdCByZWNlaXZlIGFueSB0ZXh0dXJlcyBh
ZnRlciB0aGlzLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLQot
ICAgIC8vIENvbm5lY3QgZGlmZmVyZW50IGxpc3RlbmVyLgotICAgIGZpbmFsIE1vY2tUZXh0dXJl
TGlzdGVuZXIgbGlzdGVuZXIyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJm
YWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcjIpOwotICAgIC8vIEFzc2Vy
dCBubyBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVu
ZXIyLndhaXRGb3JOZXdGcmFtZSgxKSk7Ci0KLSAgICAvLyBEcmF3IG9uZSBmcmFtZS4KLSAgICBH
TEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgZWdsQmFzZS5z
d2FwQnVmZmVycygpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB8bGlzdGVuZXIyfCByZWNlaXZlZCB0
aGUgZnJhbWUsIGFuZCBub3QgfGxpc3RlbmVyMXwuCi0gICAgbGlzdGVuZXIyLndhaXRGb3JOZXdG
cmFtZSgpOwotICAgIGFzc2VydEZhbHNlKGxpc3RlbmVyMS53YWl0Rm9yTmV3RnJhbWUoMSkpOwot
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0g
IH0KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFRleHR1cmV0b1lV
VigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0g
MTY7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IDE2OwotCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xC
YXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotCi0gICAg
Ly8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBT
dXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VUZXh0dXJl
SGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRo
cmVhZE5hbWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgZmluYWwgTW9j
a1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0g
ICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAgIHN1
cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkuc2V0RGVmYXVsdEJ1ZmZlclNp
emUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2VzIGZvciBzdHViYmlu
ZyBhbiBPRVMgdGV4dHVyZSBwcm9kdWNlci4gfGVnbEJhc2V8IGhhcyB0aGUgU3VyZmFjZVRleHR1
cmUgaW4KLSAgICAvLyB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8IGFzIHRoZSB0YXJnZXQgRUdMU3Vy
ZmFjZS4KLQotICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5n
ZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlV2lk
dGgoKSwgd2lkdGgpOwotICAgIGFzc2VydEVxdWFscyhlZ2xCYXNlLnN1cmZhY2VIZWlnaHQoKSwg
aGVpZ2h0KTsKLQotICAgIGZpbmFsIGludCByZWRbXSA9IG5ldyBpbnRbXSB7NzksIDE0NCwgMTg1
fTsKLSAgICBmaW5hbCBpbnQgZ3JlZW5bXSA9IG5ldyBpbnRbXSB7NjYsIDIxMCwgMTYyfTsKLSAg
ICBmaW5hbCBpbnQgYmx1ZVtdID0gbmV3IGludFtdIHsxNjEsIDExNywgMTU4fTsKLQotICAgIGZp
bmFsIGludCByZWZfeVtdID0gbmV3IGludFtdIHs4MSwgMTgwLCAxNjh9OwotICAgIGZpbmFsIGlu
dCByZWZfdVtdID0gbmV3IGludFtdIHsxNzMsIDkzLCAxMjJ9OwotICAgIGZpbmFsIGludCByZWZf
dltdID0gbmV3IGludFtdIHsxMjcsIDEwMywgMTQwfTsKLQotICAgIC8vIERyYXcgdGhyZWUgZnJh
bWVzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAvLyBEcmF3IGEg
Y29uc3RhbnQgY29sb3IgZnJhbWUgb250byB0aGUgU3VyZmFjZVRleHR1cmUuCi0gICAgICBlZ2xC
YXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKHJlZFtpXSAvIDI1
NS4wZiwgZ3JlZW5baV0gLyAyNTUuMGYsIGJsdWVbaV0gLyAyNTUuMGYsIDEuMGYpOwotICAgICAg
R0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgICAgLy8gc3dh
cEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJs
ZSgpLgotICAgICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotCi0gICAgICAvLyBXYWl0IGZvciBh
biBPRVMgdGV4dHVyZSB0byBhcnJpdmUuCi0gICAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUo
KTsKLQotICAgICAgLy8gTWVtb3J5IGxheW91dDogTGluZXMgYXJlIDE2IGJ5dGVzLiBGaXJzdCAx
NiBsaW5lcyBhcmUKLSAgICAgIC8vIHRoZSBZIGRhdGEuIFRoZXNlIGFyZSBmb2xsb3dlZCBieSA4
IGxpbmVzIHdpdGggOCBieXRlcyBvZiBVCi0gICAgICAvLyBkYXRhIG9uIHRoZSBsZWZ0IGFuZCA4
IGJ5dGVzIG9mIFYgZGF0YSBvbiB0aGUgcmlnaHQuCi0gICAgICAvLwotICAgICAgLy8gT2Zmc2V0
Ci0gICAgICAvLyAgICAgIDAgWVlZWVlZWVkgWVlZWVlZWVkKLSAgICAgIC8vICAgICAxNiBZWVlZ
WVlZWSBZWVlZWVlZWQotICAgICAgLy8gICAgLi4uCi0gICAgICAvLyAgICAyNDAgWVlZWVlZWVkg
WVlZWVlZWVkKLSAgICAgIC8vICAgIDI1NiBVVVVVVVVVVSBWVlZWVlZWVgotICAgICAgLy8gICAg
MjcyIFVVVVVVVVVVIFZWVlZWVlZWCi0gICAgICAvLyAgICAuLi4KLSAgICAgIC8vICAgIDM2OCBV
VVVVVVVVVSBWVlZWVlZWVgotICAgICAgLy8gICAgMzg0IGJ1ZmZlciBlbmQKLSAgICAgIEJ5dGVC
dWZmZXIgYnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh3aWR0aCAqIGhlaWdodCAq
IDMgLyAyKTsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnRleHR1cmVUb1lVVigKLSAgICAg
ICAgICBidWZmZXIsIHdpZHRoLCBoZWlnaHQsIHdpZHRoLCBsaXN0ZW5lci5vZXNUZXh0dXJlSWQs
IGxpc3RlbmVyLnRyYW5zZm9ybU1hdHJpeCk7Ci0KLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LnJldHVyblRleHR1cmVGcmFtZSgpOwotCi0gICAgICAvLyBBbGxvdyBvZmYtYnktb25lIGRpZmZl
cmVuY2VzIGR1ZSB0byBkaWZmZXJlbnQgcm91bmRpbmcuCi0gICAgICB3aGlsZSAoYnVmZmVyLnBv
c2l0aW9uKCkgPCB3aWR0aCAqIGhlaWdodCkgewotICAgICAgICBhc3NlcnRDbG9zZSgxLCBidWZm
ZXIuZ2V0KCkgJiAweGZmLCByZWZfeVtpXSk7Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoYnVmZmVy
Lmhhc1JlbWFpbmluZygpKSB7Ci0gICAgICAgIGlmIChidWZmZXIucG9zaXRpb24oKSAlIHdpZHRo
IDwgd2lkdGggLyAyKQotICAgICAgICAgIGFzc2VydENsb3NlKDEsIGJ1ZmZlci5nZXQoKSAmIDB4
ZmYsIHJlZl91W2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGFzc2VydENsb3NlKDEsIGJ1
ZmZlci5nZXQoKSAmIDB4ZmYsIHJlZl92W2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzdXJm
YWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRl
c3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVy
ZXJPbk1lYXN1cmVUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJy
dGMvU3VyZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDIyMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IGFuZHJvaWQudGVzdC5B
Y3Rpdml0eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5VaVRocmVhZFRlc3Q7Ci1pbXBv
cnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBv
cnQgYW5kcm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWM7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1
ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0Owot
Ci1wdWJsaWMgZmluYWwgY2xhc3MgU3VyZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRlc3QgZXh0
ZW5kcyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgLyoqCi0gICAqIExpc3Qgd2l0aCBhbGwgcG9zc2li
bGUgc2NhbGluZyB0eXBlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8UmVu
ZGVyZXJDb21tb24uU2NhbGluZ1R5cGU+IHNjYWxpbmdUeXBlcyA9IEFycmF5cy5hc0xpc3QoCi0g
ICAgICBSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklULCBSZW5kZXJl
ckNvbW1vbi5TY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklMTCwKLSAgICAgIFJlbmRlcmVyQ29t
bW9uLlNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9CQUxBTkNFRCk7Ci0KLSAgLyoqCi0gICAqIExp
c3Qgd2l0aCBNZWFzdXJlU3BlYyBtb2Rlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IExpc3Q8SW50ZWdlcj4gbWVhc3VyZVNwZWNNb2RlcyA9Ci0gICAgICBBcnJheXMuYXNMaXN0KE1l
YXN1cmVTcGVjLkVYQUNUTFksIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotCi0gIC8qKgotICAgKiBS
ZXR1cm5zIGEgZHVtbXkgWVVWIGZyYW1lLgotICAgKi8KLSAgc3RhdGljIFZpZGVvUmVuZGVyZXIu
STQyMEZyYW1lIGNyZWF0ZUZyYW1lKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9u
RGVncmVlKSB7Ci0gICAgZmluYWwgaW50W10geXV2U3RyaWRlcyA9IG5ldyBpbnRbXSB7d2lkdGgs
ICh3aWR0aCArIDEpIC8gMiwgKHdpZHRoICsgMSkgLyAyfTsKLSAgICBmaW5hbCBpbnRbXSB5dXZI
ZWlnaHRzID0gbmV3IGludFtdIHtoZWlnaHQsIChoZWlnaHQgKyAxKSAvIDIsIChoZWlnaHQgKyAx
KSAvIDJ9OwotICAgIGZpbmFsIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZl
clszXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgeXV2UGxhbmVz
W2ldID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh5dXZTdHJpZGVzW2ldICogeXV2SGVpZ2h0
c1tpXSk7Ci0gICAgfQotICAgIHJldHVybiBuZXcgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUod2lk
dGgsIGhlaWdodCwgcm90YXRpb25EZWdyZWUsIHl1dlN0cmlkZXMsIHl1dlBsYW5lcywgMCk7Ci0g
IH0KLQotICAvKioKLSAgICogQXNzZXJ0IG9uTWVhc3VyZSgpIHdpdGggZ2l2ZW4gcGFyYW1ldGVy
cyB3aWxsIHJlc3VsdCBpbiBleHBlY3RlZCBtZWFzdXJlZCBzaXplLgotICAgKi8KLSAgcHJpdmF0
ZSBzdGF0aWMgdm9pZCBhc3NlcnRNZWFzdXJlZFNpemUoU3VyZmFjZVZpZXdSZW5kZXJlciBzdXJm
YWNlVmlld1JlbmRlcmVyLAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGlu
Z1R5cGUsIFN0cmluZyBmcmFtZURpbWVuc2lvbnMsIGludCBleHBlY3RlZFdpZHRoLAotICAgICAg
aW50IGV4cGVjdGVkSGVpZ2h0LCBpbnQgd2lkdGhTcGVjLCBpbnQgaGVpZ2h0U3BlYykgewotICAg
IHN1cmZhY2VWaWV3UmVuZGVyZXIuc2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGUpOwotICAgIHN1
cmZhY2VWaWV3UmVuZGVyZXIub25NZWFzdXJlKHdpZHRoU3BlYywgaGVpZ2h0U3BlYyk7Ci0gICAg
ZmluYWwgaW50IG1lYXN1cmVkV2lkdGggPSBzdXJmYWNlVmlld1JlbmRlcmVyLmdldE1lYXN1cmVk
V2lkdGgoKTsKLSAgICBmaW5hbCBpbnQgbWVhc3VyZWRIZWlnaHQgPSBzdXJmYWNlVmlld1JlbmRl
cmVyLmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgaWYgKG1lYXN1cmVkV2lkdGggIT0gZXhwZWN0
ZWRXaWR0aCB8fCBtZWFzdXJlZEhlaWdodCAhPSBleHBlY3RlZEhlaWdodCkgewotICAgICAgZmFp
bCgib25NZWFzdXJlKCIgKyBNZWFzdXJlU3BlYy50b1N0cmluZyh3aWR0aFNwZWMpICsgIiwgIiAr
IE1lYXN1cmVTcGVjLnRvU3RyaW5nKGhlaWdodFNwZWMpCi0gICAgICAgICAgKyAiKSIKLSAgICAg
ICAgICArICIgd2l0aCBzY2FsaW5nIHR5cGUgIiArIHNjYWxpbmdUeXBlICsgIiBhbmQgZnJhbWU6
ICIgKyBmcmFtZURpbWVuc2lvbnMKLSAgICAgICAgICArICIgZXhwZWN0ZWQgbWVhc3VyZWQgc2l6
ZSAiICsgZXhwZWN0ZWRXaWR0aCArICJ4IiArIGV4cGVjdGVkSGVpZ2h0ICsgIiwgYnV0IHdhcyAi
Ci0gICAgICAgICAgKyBtZWFzdXJlZFdpZHRoICsgIngiICsgbWVhc3VyZWRIZWlnaHQpOwotICAg
IH0KLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IGhvdyBTdXJmYWNlVmlld1JlbmRlcmVyLm9uTWVh
c3VyZSgpIGJlaGF2ZXMgd2hlbiBubyBmcmFtZSBoYXMgYmVlbiBkZWxpdmVyZWQuCi0gICAqLwot
ICBAVWlUaHJlYWRUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3ROb0ZyYW1l
KCkgewotICAgIGZpbmFsIFN1cmZhY2VWaWV3UmVuZGVyZXIgc3VyZmFjZVZpZXdSZW5kZXJlciA9
Ci0gICAgICAgIG5ldyBTdXJmYWNlVmlld1JlbmRlcmVyKGdldEluc3RydW1lbnRhdGlvbigpLmdl
dENvbnRleHQoKSk7Ci0gICAgZmluYWwgU3RyaW5nIGZyYW1lRGltZW5zaW9ucyA9ICJudWxsIjsK
LQotICAgIC8vIFRlc3QgYmVoYXZpb3VyIGJlZm9yZSBTdXJmYWNlVmlld1JlbmRlcmVyLmluaXQo
KSBpcyBjYWxsZWQuCi0gICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5n
VHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAgZm9yIChpbnQgbWVhc3VyZVNwZWNNb2RlIDog
bWVhc3VyZVNwZWNNb2RlcykgewotICAgICAgICBmaW5hbCBpbnQgemVyb01lYXN1cmVTaXplID0g
TWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDAsIG1lYXN1cmVTcGVjTW9kZSk7Ci0gICAgICAg
IGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJh
bWVEaW1lbnNpb25zLCAwLCAwLCB6ZXJvTWVhc3VyZVNpemUsCi0gICAgICAgICAgICB6ZXJvTWVh
c3VyZVNpemUpOwotICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJl
ciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgMTI4MCwgNzIwLAotICAgICAgICAgICAg
TWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIG1lYXN1cmVTcGVjTW9kZSksCi0gICAg
ICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoNzIwLCBtZWFzdXJlU3BlY01vZGUp
KTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUZXN0IGJlaGF2aW91ciBhZnRlciBTdXJmYWNl
Vmlld1JlbmRlcmVyLmluaXQoKSBpcyBjYWxsZWQsIGJ1dCBzdGlsbCBubyBmcmFtZS4KLSAgICBz
dXJmYWNlVmlld1JlbmRlcmVyLmluaXQoKEVnbEJhc2UuQ29udGV4dCkgbnVsbCwgbnVsbCk7Ci0g
ICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdU
eXBlcykgewotICAgICAgZm9yIChpbnQgbWVhc3VyZVNwZWNNb2RlIDogbWVhc3VyZVNwZWNNb2Rl
cykgewotICAgICAgICBmaW5hbCBpbnQgemVyb01lYXN1cmVTaXplID0gTWVhc3VyZVNwZWMubWFr
ZU1lYXN1cmVTcGVjKDAsIG1lYXN1cmVTcGVjTW9kZSk7Ci0gICAgICAgIGFzc2VydE1lYXN1cmVk
U2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCAw
LCAwLCB6ZXJvTWVhc3VyZVNpemUsCi0gICAgICAgICAgICB6ZXJvTWVhc3VyZVNpemUpOwotICAg
ICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUs
IGZyYW1lRGltZW5zaW9ucywgMTI4MCwgNzIwLAotICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFr
ZU1lYXN1cmVTcGVjKDEyODAsIG1lYXN1cmVTcGVjTW9kZSksCi0gICAgICAgICAgICBNZWFzdXJl
U3BlYy5tYWtlTWVhc3VyZVNwZWMoNzIwLCBtZWFzdXJlU3BlY01vZGUpKTsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBzdXJmYWNlVmlld1JlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBUZXN0IGhvdyBTdXJmYWNlVmlld1JlbmRlcmVyLm9uTWVhc3VyZSgpIGJlaGF2ZXMgd2l0
aCBhIDEyODB4NzIwIGZyYW1lLgotICAgKi8KLSAgQFVpVGhyZWFkVGVzdAotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0RnJhbWUxMjgweDcyMCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZmluYWwgU3VyZmFjZVZpZXdSZW5kZXJlciBzdXJmYWNlVmlld1JlbmRl
cmVyID0KLSAgICAgICAgbmV3IFN1cmZhY2VWaWV3UmVuZGVyZXIoZ2V0SW5zdHJ1bWVudGF0aW9u
KCkuZ2V0Q29udGV4dCgpKTsKLSAgICAvKioKLSAgICAgKiBNb2NrIHJlbmRlcmVyIGV2ZW50cyB3
aXRoIGJsb2NraW5nIHdhaXQgZnVuY3Rpb25hbGl0eSBmb3IgZnJhbWUgc2l6ZSBjaGFuZ2VzLgot
ICAgICAqLwotICAgIGNsYXNzIE1vY2tSZW5kZXJlckV2ZW50cyBpbXBsZW1lbnRzIFJlbmRlcmVy
Q29tbW9uLlJlbmRlcmVyRXZlbnRzIHsKLSAgICAgIHByaXZhdGUgaW50IGZyYW1lV2lkdGg7Ci0g
ICAgICBwcml2YXRlIGludCBmcmFtZUhlaWdodDsKLSAgICAgIHByaXZhdGUgaW50IHJvdGF0aW9u
OwotCi0gICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd2FpdEZvckZyYW1lU2l6ZShpbnQg
ZnJhbWVXaWR0aCwgaW50IGZyYW1lSGVpZ2h0LCBpbnQgcm90YXRpb24pCi0gICAgICAgICAgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgICAgd2hpbGUgKHRoaXMuZnJhbWVXaWR0
aCAhPSBmcmFtZVdpZHRoIHx8IHRoaXMuZnJhbWVIZWlnaHQgIT0gZnJhbWVIZWlnaHQKLSAgICAg
ICAgICAgIHx8IHRoaXMucm90YXRpb24gIT0gcm90YXRpb24pIHsKLSAgICAgICAgICB3YWl0KCk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lUmVu
ZGVyZWQoKSB7fQotCi0gICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25GcmFtZVJlc29s
dXRpb25DaGFuZ2VkKAotICAgICAgICAgIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQs
IGludCByb3RhdGlvbikgewotICAgICAgICB0aGlzLmZyYW1lV2lkdGggPSBmcmFtZVdpZHRoOwot
ICAgICAgICB0aGlzLmZyYW1lSGVpZ2h0ID0gZnJhbWVIZWlnaHQ7Ci0gICAgICAgIHRoaXMucm90
YXRpb24gPSByb3RhdGlvbjsKLSAgICAgICAgbm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQot
ICAgIGZpbmFsIE1vY2tSZW5kZXJlckV2ZW50cyByZW5kZXJlckV2ZW50cyA9IG5ldyBNb2NrUmVu
ZGVyZXJFdmVudHMoKTsKLSAgICBzdXJmYWNlVmlld1JlbmRlcmVyLmluaXQoKEVnbEJhc2UuQ29u
dGV4dCkgbnVsbCwgcmVuZGVyZXJFdmVudHMpOwotCi0gICAgLy8gVGVzdCBkaWZmZXJlbnQgcm90
YXRpb24gZGVncmVzcywgYnV0IHNhbWUgcm90YXRlZCBzaXplLgotICAgIGZvciAoaW50IHJvdGF0
aW9uRGVncmVlIDogbmV3IGludFtdIHswLCA5MCwgMTgwLCAyNzB9KSB7Ci0gICAgICBmaW5hbCBp
bnQgcm90YXRlZFdpZHRoID0gMTI4MDsKLSAgICAgIGZpbmFsIGludCByb3RhdGVkSGVpZ2h0ID0g
NzIwOwotICAgICAgZmluYWwgaW50IHVucm90YXRlZFdpZHRoID0gKHJvdGF0aW9uRGVncmVlICUg
MTgwID09IDAgPyByb3RhdGVkV2lkdGggOiByb3RhdGVkSGVpZ2h0KTsKLSAgICAgIGZpbmFsIGlu
dCB1bnJvdGF0ZWRIZWlnaHQgPSAocm90YXRpb25EZWdyZWUgJSAxODAgPT0gMCA/IHJvdGF0ZWRI
ZWlnaHQgOiByb3RhdGVkV2lkdGgpOwotICAgICAgZmluYWwgVmlkZW9SZW5kZXJlci5JNDIwRnJh
bWUgZnJhbWUgPQotICAgICAgICAgIGNyZWF0ZUZyYW1lKHVucm90YXRlZFdpZHRoLCB1bnJvdGF0
ZWRIZWlnaHQsIHJvdGF0aW9uRGVncmVlKTsKLSAgICAgIGFzc2VydEVxdWFscyhyb3RhdGVkV2lk
dGgsIGZyYW1lLnJvdGF0ZWRXaWR0aCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhyb3RhdGVkSGVp
Z2h0LCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCkpOwotICAgICAgZmluYWwgU3RyaW5nIGZyYW1lRGlt
ZW5zaW9ucyA9Ci0gICAgICAgICAgdW5yb3RhdGVkV2lkdGggKyAieCIgKyB1bnJvdGF0ZWRIZWln
aHQgKyAiIHdpdGggcm90YXRpb24gIiArIHJvdGF0aW9uRGVncmVlOwotICAgICAgc3VyZmFjZVZp
ZXdSZW5kZXJlci5yZW5kZXJGcmFtZShmcmFtZSk7Ci0gICAgICByZW5kZXJlckV2ZW50cy53YWl0
Rm9yRnJhbWVTaXplKHVucm90YXRlZFdpZHRoLCB1bnJvdGF0ZWRIZWlnaHQsIHJvdGF0aW9uRGVn
cmVlKTsKLQotICAgICAgLy8gVGVzdCBmb3JjaW5nIHRvIHplcm8gc2l6ZS4KLSAgICAgIGZvciAo
UmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsK
LSAgICAgICAgZm9yIChpbnQgbWVhc3VyZVNwZWNNb2RlIDogbWVhc3VyZVNwZWNNb2Rlcykgewot
ICAgICAgICAgIGZpbmFsIGludCB6ZXJvTWVhc3VyZVNpemUgPSBNZWFzdXJlU3BlYy5tYWtlTWVh
c3VyZVNwZWMoMCwgbWVhc3VyZVNwZWNNb2RlKTsKLSAgICAgICAgICBhc3NlcnRNZWFzdXJlZFNp
emUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgMCwg
MCwKLSAgICAgICAgICAgICAgemVyb01lYXN1cmVTaXplLCB6ZXJvTWVhc3VyZVNpemUpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRlc3QgcGVyZmVjdCBmaXQuCi0gICAgICBmb3Ig
KFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7
Ci0gICAgICAgIGZvciAoaW50IG1lYXN1cmVTcGVjTW9kZSA6IG1lYXN1cmVTcGVjTW9kZXMpIHsK
LSAgICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGlu
Z1R5cGUsIGZyYW1lRGltZW5zaW9ucywgcm90YXRlZFdpZHRoLAotICAgICAgICAgICAgICByb3Rh
dGVkSGVpZ2h0LCBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMocm90YXRlZFdpZHRoLCBtZWFz
dXJlU3BlY01vZGUpLAotICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMo
cm90YXRlZEhlaWdodCwgbWVhc3VyZVNwZWNNb2RlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQot
ICAgICAgLy8gRm9yY2Ugc3BlYyBzaXplIHdpdGggZGlmZmVyZW50IGFzcGVjdCByYXRpbyB0aGFu
IGZyYW1lIGFzcGVjdCByYXRpby4KLSAgICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5
cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgICAgYXNzZXJ0TWVhc3VyZWRT
aXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDcy
MCwgMTI4MCwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIE1l
YXN1cmVTcGVjLkVYQUNUTFkpLAotICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVT
cGVjKDEyODAsIE1lYXN1cmVTcGVjLkVYQUNUTFkpKTsKLSAgICAgIH0KLQotICAgICAgZmluYWwg
ZmxvYXQgdmlkZW9Bc3BlY3RSYXRpbyA9IChmbG9hdCkgcm90YXRlZFdpZHRoIC8gcm90YXRlZEhl
aWdodDsKLSAgICAgIHsKLSAgICAgICAgLy8gUmVsYXggYm90aCB3aWR0aCBhbmQgaGVpZ2h0IGNv
bnN0cmFpbnRzLgotICAgICAgICBmaW5hbCBpbnQgd2lkdGhTcGVjID0gTWVhc3VyZVNwZWMubWFr
ZU1lYXN1cmVTcGVjKDcyMCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgICAgIGZpbmFsIGlu
dCBoZWlnaHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIE1lYXN1cmVT
cGVjLkFUX01PU1QpOwotICAgICAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAgICAgICAgZmluYWwgUG9pbnQgZXhwZWN0
ZWRTaXplID0KLSAgICAgICAgICAgICAgUmVuZGVyZXJDb21tb24uZ2V0RGlzcGxheVNpemUoc2Nh
bGluZ1R5cGUsIHZpZGVvQXNwZWN0UmF0aW8sIDcyMCwgMTI4MCk7Ci0gICAgICAgICAgYXNzZXJ0
TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVu
c2lvbnMsIGV4cGVjdGVkU2l6ZS54LAotICAgICAgICAgICAgICBleHBlY3RlZFNpemUueSwgd2lk
dGhTcGVjLCBoZWlnaHRTcGVjKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAg
ICAvLyBGb3JjZSB3aWR0aCB0byA3MjAsIGJ1dCByZWxheCBoZWlnaHQgY29uc3RyYWludC4gVGhp
cyB3aWxsIGdpdmUgdGhlIHNhbWUgcmVzdWx0IGFzCi0gICAgICAgIC8vIGFib3ZlLCBiZWNhdXNl
IHdpZHRoIGlzIGFscmVhZHkgdGhlIGxpbWl0aW5nIGZhY3RvciBhbmQgd2lsbCBiZSBtYXhlZCBv
dXQuCi0gICAgICAgIGZpbmFsIGludCB3aWR0aFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3Vy
ZVNwZWMoNzIwLCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKLSAgICAgICAgZmluYWwgaW50IGhlaWdo
dFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgTWVhc3VyZVNwZWMuQVRf
TU9TVCk7Ci0gICAgICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5
cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgICAgICBmaW5hbCBQb2ludCBleHBlY3RlZFNpemUg
PQotICAgICAgICAgICAgICBSZW5kZXJlckNvbW1vbi5nZXREaXNwbGF5U2l6ZShzY2FsaW5nVHlw
ZSwgdmlkZW9Bc3BlY3RSYXRpbywgNzIwLCAxMjgwKTsKLSAgICAgICAgICBhc3NlcnRNZWFzdXJl
ZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywg
ZXhwZWN0ZWRTaXplLngsCi0gICAgICAgICAgICAgIGV4cGVjdGVkU2l6ZS55LCB3aWR0aFNwZWMs
IGhlaWdodFNwZWMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgIC8vIEZv
cmNlIGhlaWdodCwgYnV0IHJlbGF4IHdpZHRoIGNvbnN0cmFpbnQuIFRoaXMgd2lsbCBmb3JjZSBh
IGJhZCBsYXlvdXQgc2l6ZS4KLSAgICAgICAgZmluYWwgaW50IHdpZHRoU3BlYyA9IE1lYXN1cmVT
cGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgICAgICBm
aW5hbCBpbnQgaGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygxMjgwLCBN
ZWFzdXJlU3BlYy5FWEFDVExZKTsKLSAgICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5n
VHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAgICAgIGFzc2VydE1lYXN1
cmVkU2l6ZSgKLSAgICAgICAgICAgICAgc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUs
IGZyYW1lRGltZW5zaW9ucywgNzIwLCAxMjgwLCB3aWR0aFNwZWMsIGhlaWdodFNwZWMpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc3VyZmFjZVZpZXdSZW5kZXJlci5yZWxlYXNl
KCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvV2ViUnRjSm5pQm9vdFRlc3QuamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1dlYlJ0Y0puaUJvb3RUZXN0LmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvV2ViUnRjSm5pQm9vdFRlc3Qu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjLnRlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnRlc3Qu
SW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRl
ci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rp
b25GYWN0b3J5OwotCi0vLyBUaGlzIHRlc3QgaXMgaW50ZW5kZWQgdG8gcnVuIG9uIEFSTSBhbmQg
Y2F0Y2ggTG9hZExpYnJhcnkgZXJyb3JzIHdoZW4gd2UgbG9hZCB0aGUgV2ViUlRDCi0vLyBKTkku
IEl0IGNhbid0IHJlYWxseSBiZSBzZXR0aW5nIHVwIGNhbGxzIHNpbmNlIEFSTSBlbXVsYXRvcnMg
YXJlIHRvbyBzbG93LCBidXQgaW5zdGFudGlhdGluZwotLy8gYSBwZWVyIGNvbm5lY3Rpb24gaXNu
J3QgdGltaW5nLXNlbnNpdGl2ZSwgc28gd2UgY2FuIGF0IGxlYXN0IGRvIHRoYXQuCi1wdWJsaWMg
Y2xhc3MgV2ViUnRjSm5pQm9vdFRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7
Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEpuaUxvYWRzV2l0aG91dEVycm9yKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3Rvcnku
aW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENv
bnRleHQoKSwKLSAgICAgICAgdHJ1ZSAvKiBpbml0aWFsaXplQXVkaW8gKi8sIHRydWUgLyogaW5p
dGlhbGl6ZVZpZGVvICovLAotICAgICAgICBmYWxzZSAvKiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRp
b24gKi8pOwotCi0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5l
dyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucygpOwotICAgIG5ldyBQZWVyQ29ubmVjdGlv
bkZhY3Rvcnkob3B0aW9ucyk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNf
bGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEg
YmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
dGVzdHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMv
cmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2Ry
YXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZp
bGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhp
c3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5j
aGVyLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwot
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkdGVzdHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNf
bGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNo
ZXIucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5j
aGVyLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJs
ZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUK
IyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBu
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9k
cmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2Fi
bGUteGhkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3
YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzL3N0
cmluZ3MueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCShub25leGlzdGVudCkKQEAg
LTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHJl
c291cmNlcz4KLQotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPkFuZHJvaWRQZWVyQ29ubmVj
dGlvblRlc3RzPC9zdHJpbmc+Ci0KLTwvcmVzb3VyY2VzPgpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUt
aGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJr
ZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRy
b2lkdGVzdHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCShub25leGlzdGVudCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0
cy9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlz
cGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hl
ci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5n
CShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLWxkcGkv
aWNfbGF1bmNoZXIucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSAr
MCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1p
bWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUt
bWRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUtbWRwaS9p
Y19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVzL2RyYXdhYmxlLW1kcGkv
aWNfbGF1bmNoZXIucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvcmVz
L2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1p
bWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1
bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVz
dHMvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jl
cy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMv
cmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy92
YWx1ZXMvc3RyaW5ncy54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9yZXMvdmFsdWVzL3N0cmluZ3MueG1s
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwJKG5vbmV4aXN0
ZW50KQpAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04
Ij8+Ci08cmVzb3VyY2VzPgotCi0gICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+QW5kcm9pZFBl
ZXJDb25uZWN0aW9uVGVzdHM8L3N0cmluZz4KLQotPC9yZXNvdXJjZXM+CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRlc3QuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRl
c3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2Fw
dHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzIgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRh
dGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlv
bi5MYXJnZVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9u
Lk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9u
LlNtYWxsVGVzdDsKLQotcHVibGljIGNsYXNzIENhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZl
clRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIkNhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRlc3QiOwotCi0gIHBy
aXZhdGUgY2xhc3MgVGVzdE9iamVjdEZhY3RvcnkgZXh0ZW5kcyBDYW1lcmFWaWRlb0NhcHR1cmVy
VGVzdEZpeHR1cmVzLlRlc3RPYmplY3RGYWN0b3J5IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgYm9vbGVhbiBpc0NhcHR1cmluZ1RvVGV4dHVyZSgpIHsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ2FtZXJhRW51bWVyYXRvciBnZXRD
YW1lcmFFbnVtZXJhdG9yKCkgewotICAgICAgcmV0dXJuIG5ldyBDYW1lcmExRW51bWVyYXRvcihm
YWxzZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENvbnRleHQgZ2V0QXBw
Q29udGV4dCgpIHsKLSAgICAgIHJldHVybiBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRD
b250ZXh0KCk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikK
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHJhd09wZW5DYW1lcmEoU3RyaW5nIGNh
bWVyYU5hbWUpIHsKLSAgICAgIHJldHVybiBhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYS5vcGVuKENh
bWVyYTFFbnVtZXJhdG9yLmdldENhbWVyYUluZGV4KGNhbWVyYU5hbWUpKTsKLSAgICB9Ci0KLSAg
ICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIHJhd0Nsb3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEpIHsKLSAgICAgICgoYW5kcm9p
ZC5oYXJkd2FyZS5DYW1lcmEpIGNhbWVyYSkucmVsZWFzZSgpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyBmaXh0dXJlczsKLQotICBAT3Zl
cnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0gICAgZml4dHVyZXMgPSBuZXcgQ2Ft
ZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyhuZXcgVGVzdE9iamVjdEZhY3RvcnkoKSk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0gICAgZml4
dHVyZXMuZGlzcG9zZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
Q3JlYXRlQW5kRGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4
dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKTsK
LSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5k
IHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5k
ZXJlciB1c2luZyBhICJkZWZhdWx0IiBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUg
SmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dENyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBmaXh0dXJlcy5jcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhp
cyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVz
IGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBm
cm9udCBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEg
YW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFy
dEZyb250RmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuY3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigpOwotICB9
Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhh
dCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVy
IHVzaW5nIHRoZSBiYWNrIGZhY2luZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90
aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdFN0YXJ0QmFja0ZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUJhY2tGYWNpbmdDYXB0dXJlckFuZFJlbmRl
cigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGRlZmF1bHQgY2FtZXJhIGNhbiBi
ZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBjYW1lcmEgY2FuCi0gIC8vIGxhdGVyIGJlIHN3aXRjaGVk
IHRvIGFub3RoZXIgY2FtZXJhLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUg
QysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoVmlkZW9D
YXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3dp
dGNoQ2FtZXJhKCk7Ci0gIH0KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2Ft
ZXJhRXZlbnRzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5j
YW1lcmFFdmVudHNJbnZva2VkKCk7Ci0gIH0KLQotICAvLyBUZXN0IHdoYXQgaGFwcGVucyB3aGVu
IGF0dGVtcHRpbmcgdG8gY2FsbCBlLmcuIHN3aXRjaENhbWVyYSgpIGFmdGVyIGNhbWVyYSBoYXMg
YmVlbiBzdG9wcGVkLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhQ2Fs
bHNBZnRlclN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVz
LmNhbWVyYUNhbGxzQWZ0ZXJTdG9wKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUg
VmlkZW9Tb3VyY2UgdGhhdCB0aGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBjb25uZWN0ZWQgdG8g
Y2FuCi0gIC8vIGJlIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQgdGVzdHMgYm90aCB0aGUgSmF2
YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3Rv
cFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
Zml4dHVyZXMuc3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0
IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhdCBkaWZmZXJlbnQgcmVzb2x1dGlvbnMu
Ci0gIC8vIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJnZVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRTdG9wV2l0
aERpZmZlcmVudFJlc29sdXRpb25zKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3Qgd2hhdCBoYXBw
ZW5zIGlmIGJ1ZmZlcnMgYXJlIHJldHVybmVkIGFmdGVyIHRoZSBjYXB0dXJlciBoYXZlCi0gIC8v
IGJlZW4gc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0aGUg
QysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJM
YXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1cm5C
dWZmZXJMYXRlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB3ZSBjYW4gY2FwdHVyZSBm
cmFtZXMsIGtlZXAgdGhlIGZyYW1lcyBpbiBhIGxvY2FsIHJlbmRlcmVyLCBzdG9wIGNhcHR1cmlu
ZywKLSAgLy8gYW5kIHRoZW4gcmV0dXJuIHRoZSBmcmFtZXMuIFRoZSBkaWZmZXJlbmNlIGJldHdl
ZW4gdGhlIHRlc3QgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSBpcyB0aGF0IHdlCi0gIC8vIGFsc28g
dGVzdCB0aGUgSk5JIGFuZCBDKysgQW5kcm9pZFZpZGVvQ2FwdHVyZXIgcGFydHMuCi0gIEBNZWRp
dW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZlckxhdGVF
bmRUb0VuZCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgZnJhbWVzIGZvcndhcmRlZCB0
byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBpZiBhZGFwdE91dHB1dEZvcm1hdCBpcwotICAvLyBjYWxs
ZWQuIFRoaXMgdGVzdCBib3RoIEphdmEgYW5kIEMrKyBwYXJ0cyBvZiBvZiB0aGUgc3RhY2suCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTY2FsZUNhbWVyYU91dHB1dCgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc2NhbGVDYW1lcmFPdXRwdXQo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGFuIGVycm9yIGlzIHJlcG9ydGVkIGlmIHRo
ZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAgLy8gd2hlbiBDYW1lcmFWaWRlb0NhcHR1cmVy
IGlzIHN0YXJ0ZWQuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVD
YW1lcmFJc0FscmVhZHlPcGVuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBm
aXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpOwotICB9Ci0KLSAgLy8gVGhp
cyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW4gYmUgc3RhcnRlZCwgZXZlbiBpZiB0
aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIGlmIHRoZSBjYW1lcmEgaXMgY2xvc2Vk
IHdoaWxlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBATGFy
Z2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFu
ZENsb3NlQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJl
cy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCk7Ci0gIH0KLQot
ICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyLnN0b3AgY2FuIGJlIGNhbGxl
ZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzCi0gIC8vIHJlLXRyeWluZyB0byBzdGFydC4K
LSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVh
ZHlPcGVuQW5kU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVy
ZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCk7Ci0gIH0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVz
dHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVzdC5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJl
VGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFD
YXB0dXJlclVzaW5nVGV4dHVyZVRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3NCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0
aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9u
LkxhcmdlVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24u
TWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24u
U21hbGxUZXN0OwotCi1wdWJsaWMgY2xhc3MgQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVz
dCBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsKLSAgc3RhdGljIGZpbmFsIFN0cmlu
ZyBUQUcgPSAiQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVzdCI7Ci0KLSAgcHJpdmF0ZSBj
bGFzcyBUZXN0T2JqZWN0RmFjdG9yeSBleHRlbmRzIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4
dHVyZXMuVGVzdE9iamVjdEZhY3RvcnkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDYW1l
cmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3IoKSB7Ci0gICAgICByZXR1cm4gbmV3IENh
bWVyYTFFbnVtZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENv
bnRleHQgZ2V0QXBwQ29udGV4dCgpIHsKLSAgICAgIHJldHVybiBnZXRJbnN0cnVtZW50YXRpb24o
KS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoImRl
cHJlY2F0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgT2JqZWN0IHJhd09wZW5DYW1l
cmEoU3RyaW5nIGNhbWVyYU5hbWUpIHsKLSAgICAgIHJldHVybiBhbmRyb2lkLmhhcmR3YXJlLkNh
bWVyYS5vcGVuKENhbWVyYTFFbnVtZXJhdG9yLmdldENhbWVyYUluZGV4KGNhbWVyYU5hbWUpKTsK
LSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIHJhd0Nsb3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEpIHsKLSAg
ICAgICgoYW5kcm9pZC5oYXJkd2FyZS5DYW1lcmEpIGNhbWVyYSkucmVsZWFzZSgpOwotICAgIH0K
LSAgfQotCi0gIHByaXZhdGUgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyBmaXh0dXJl
czsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0gICAgZml4dHVy
ZXMgPSBuZXcgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyhuZXcgVGVzdE9iamVjdEZh
Y3RvcnkoKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24o
KSB7Ci0gICAgZml4dHVyZXMuZGlzcG9zZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0Q3JlYXRlQW5kRGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCk7Ci0gIH0KLQotICBA
U21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlTm9uRXhpc3Rp
bmdDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJl
IHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2
YSB2aWRlbyByZW5kZXJlciB1c2luZyBhICJkZWZhdWx0IiBjYXB0dXJlci4KLSAgLy8gSXQgdGVz
dHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdENyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpOwotICB9
Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhh
dCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVy
IHVzaW5nIHRoZSBmcm9udCBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJv
dGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2
b2lkIHRlc3RTdGFydEZyb250RmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJlckFuZFJl
bmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3Rh
cnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZp
ZGVvIHJlbmRlcmVyIHVzaW5nIHRoZSBiYWNrIGZhY2luZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8g
SXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0QmFja0ZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUJhY2tGYWNpbmdDYXB0
dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGRlZmF1bHQg
Y2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBjYW1lcmEgY2FuCi0gIC8vIGxhdGVy
IGJlIHN3aXRjaGVkIHRvIGFub3RoZXIgY2FtZXJhLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBK
YXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
U3dpdGNoVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
Zml4dHVyZXMuc3dpdGNoQ2FtZXJhKCk7Ci0gIH0KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0Q2FtZXJhRXZlbnRzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBmaXh0dXJlcy5jYW1lcmFFdmVudHNJbnZva2VkKCk7Ci0gIH0KLQotICAvLyBUZXN0IHdoYXQg
aGFwcGVucyB3aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBlLmcuIHN3aXRjaENhbWVyYSgpIGFmdGVy
IGNhbWVyYSBoYXMgYmVlbiBzdG9wcGVkLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0Q2FtZXJhQ2FsbHNBZnRlclN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIGZpeHR1cmVzLmNhbWVyYUNhbGxzQWZ0ZXJTdG9wKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRl
c3QgdGhhdCB0aGUgVmlkZW9Tb3VyY2UgdGhhdCB0aGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBj
b25uZWN0ZWQgdG8gY2FuCi0gIC8vIGJlIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQgdGVzdHMg
Ym90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0U3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuc3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhdCBkaWZmZXJlbnQg
cmVzb2x1dGlvbnMuCi0gIC8vIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIu
Ci0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRS
ZXNvbHV0aW9ucygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
c3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRl
c3Qgd2hhdCBoYXBwZW5zIGlmIGJ1ZmZlcnMgYXJlIHJldHVybmVkIGFmdGVyIHRoZSBjYXB0dXJl
ciBoYXZlCi0gIC8vIGJlZW4gc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCBkb2VzIG5vdCB0ZXN0
IG9yIHVzZSB0aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RS
ZXR1cm5CdWZmZXJMYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0
dXJlcy5yZXR1cm5CdWZmZXJMYXRlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB3ZSBj
YW4gY2FwdHVyZSBmcmFtZXMsIGtlZXAgdGhlIGZyYW1lcyBpbiBhIGxvY2FsIHJlbmRlcmVyLCBz
dG9wIGNhcHR1cmluZywKLSAgLy8gYW5kIHRoZW4gcmV0dXJuIHRoZSBmcmFtZXMuIFRoZSBkaWZm
ZXJlbmNlIGJldHdlZW4gdGhlIHRlc3QgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSBpcyB0aGF0IHdl
Ci0gIC8vIGFsc28gdGVzdCB0aGUgSk5JIGFuZCBDKysgQW5kcm9pZFZpZGVvQ2FwdHVyZXIgcGFy
dHMuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJMYXRlRW5k
VG9FbmQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVy
bkJ1ZmZlckxhdGVFbmRUb0VuZCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJh
RXZlbnRzSGFuZGxlci5vbkVycm9yIGlzIHRyaWdnZXJlZCBpZiB2aWRlbyBidWZmZXJzIGFyZSBu
b3QgcmV0dXJuZWQgdG8KLSAgLy8gdGhlIGNhcHR1cmVyLgotICBATGFyZ2VUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RDYW1lcmFGcmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRpb24oKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUZyZWV6ZWRFdmVudE9u
QnVmZmVyU3RhcnZhdGlvbigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgZnJhbWVzIGZv
cndhcmRlZCB0byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBpZiBhZGFwdE91dHB1dEZvcm1hdCBpcwot
ICAvLyBjYWxsZWQuIFRoaXMgdGVzdCBib3RoIEphdmEgYW5kIEMrKyBwYXJ0cyBvZiBvZiB0aGUg
c3RhY2suCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTY2FsZUNhbWVyYU91dHB1
dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc2NhbGVDYW1l
cmFPdXRwdXQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGFuIGVycm9yIGlzIHJlcG9y
dGVkIGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAgLy8gd2hlbiBDYW1lcmFWaWRl
b0NhcHR1cmVyIGlzIHN0YXJ0ZWQuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0
YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpOwotICB9Ci0K
LSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW4gYmUgc3RhcnRlZCwg
ZXZlbiBpZiB0aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIGlmIHRoZSBjYW1lcmEg
aXMgY2xvc2VkIHdoaWxlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgcmUtdHJ5aW5nIHRvIHN0YXJ0
LgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJl
YWR5T3BlbkFuZENsb3NlQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCk7
Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyLnN0b3AgY2Fu
IGJlIGNhbGxlZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzCi0gIC8vIHJlLXRyeWluZyB0
byBzdGFydC4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1l
cmFJc0FscmVhZHlPcGVuQW5kU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCk7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRlc3QuamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWlt
cG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhQWNjZXNzRXhjZXB0aW9uOwotaW1w
b3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFEZXZpY2U7Ci1pbXBvcnQgYW5kcm9p
ZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5k
bGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwotaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0
cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFu
bm90YXRpb24uTGFyZ2VUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5u
b3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5u
b3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERv
d25MYXRjaDsKLQotcHVibGljIGNsYXNzIENhbWVyYTJDYXB0dXJlclRlc3QgZXh0ZW5kcyBJbnN0
cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVy
YTJDYXB0dXJlclRlc3QiOwotCi0gIC8qKgotICAgKiBTaW1wbGUgY2FtZXJhMiBpbXBsZW1lbnRh
dGlvbiB0aGF0IG9ubHkga25vd3MgaG93IHRvIG9wZW4gdGhlIGNhbWVyYSBhbmQgY2xvc2UgaXQu
Ci0gICAqLwotICBwcml2YXRlIGNsYXNzIFNpbXBsZUNhbWVyYTIgewotICAgIGZpbmFsIENhbWVy
YU1hbmFnZXIgY2FtZXJhTWFuYWdlcjsKLSAgICBmaW5hbCBMb29wZXJUaHJlYWQgbG9vcGVyVGhy
ZWFkOwotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIG9wZW5Eb25lU2lnbmFsOwotICAgIGZpbmFs
IE9iamVjdCBjYW1lcmFEZXZpY2VMb2NrOwotICAgIENhbWVyYURldmljZSBjYW1lcmFEZXZpY2U7
IC8vIEd1YXJkZWQgYnkgY2FtZXJhRGV2aWNlTG9jawotICAgIGJvb2xlYW4gb3BlblN1Y2NlZWRl
ZDsgLy8gR3VhcmRlZCBieSBjYW1lcmFEZXZpY2VMb2NrCi0KLSAgICBwcml2YXRlIGNsYXNzIExv
b3BlclRocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgICBmaW5hbCBDb3VudERvd25MYXRjaCBz
dGFydGVkU2lnbmFsID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgICAgcHJpdmF0ZSBIYW5k
bGVyIGhhbmRsZXI7Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBMb29wZXIucHJlcGFyZSgpOwotICAgICAgICBoYW5kbGVyID0gbmV3IEhhbmRs
ZXIoKTsKLSAgICAgICAgc3RhcnRlZFNpZ25hbC5jb3VudERvd24oKTsKLSAgICAgICAgTG9vcGVy
Lmxvb3AoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgd2FpdFRvU3RhcnQoKSB7Ci0g
ICAgICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5KHN0YXJ0ZWRTaWduYWwpOwot
ICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCByZXF1ZXN0U3RvcCgpIHsKLSAgICAgICAgaGFu
ZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyBIYW5kbGVy
IGdldEhhbmRsZXIoKSB7Ci0gICAgICAgIHJldHVybiBoYW5kbGVyOwotICAgICAgfQotICAgIH0K
LQotICAgIHByaXZhdGUgY2xhc3MgQ2FtZXJhU3RhdGVDYWxsYmFjayBleHRlbmRzIENhbWVyYURl
dmljZS5TdGF0ZUNhbGxiYWNrIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
b25DbG9zZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZSkgewotICAgICAgICBMb2dnaW5nLmQo
VEFHLCAiU2ltcGxlIGNhbWVyYTIgY2xvc2VkLiIpOwotCi0gICAgICAgIHN5bmNocm9uaXplZCAo
Y2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICAgIFNpbXBsZUNhbWVyYTIudGhpcy5jYW1lcmFE
ZXZpY2UgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgb25EaXNjb25uZWN0ZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZSkg
ewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU2ltcGxlIGNhbWVyYTIgZGlzY29ubmVjdGVkLiIp
OwotCi0gICAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICAg
IFNpbXBsZUNhbWVyYTIudGhpcy5jYW1lcmFEZXZpY2UgPSBudWxsOwotICAgICAgICB9Ci0gICAg
ICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25FcnJvcihDYW1lcmFE
ZXZpY2UgY2FtZXJhRGV2aWNlLCBpbnQgZXJyb3JDb2RlKSB7Ci0gICAgICAgIExvZ2dpbmcudyhU
QUcsICJTaW1wbGUgY2FtZXJhMiBlcnJvcjogIiArIGVycm9yQ29kZSk7Ci0KLSAgICAgICAgc3lu
Y2hyb25pemVkIChjYW1lcmFEZXZpY2VMb2NrKSB7Ci0gICAgICAgICAgU2ltcGxlQ2FtZXJhMi50
aGlzLmNhbWVyYURldmljZSA9IGNhbWVyYURldmljZTsKLSAgICAgICAgICBvcGVuU3VjY2VlZGVk
ID0gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICBvcGVuRG9uZVNpZ25hbC5jb3VudERvd24o
KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbk9wZW5l
ZChDYW1lcmFEZXZpY2UgY2FtZXJhRGV2aWNlKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJT
aW1wbGUgY2FtZXJhMiBvcGVuZWQuIik7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChjYW1lcmFE
ZXZpY2VMb2NrKSB7Ci0gICAgICAgICAgU2ltcGxlQ2FtZXJhMi50aGlzLmNhbWVyYURldmljZSA9
IGNhbWVyYURldmljZTsKLSAgICAgICAgICBvcGVuU3VjY2VlZGVkID0gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIG9wZW5Eb25lU2lnbmFsLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0K
LQotICAgIFNpbXBsZUNhbWVyYTIoQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgZGV2aWNlTmFtZSkg
ewotICAgICAgY2FtZXJhTWFuYWdlciA9IChDYW1lcmFNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3Rl
bVNlcnZpY2UoQ29udGV4dC5DQU1FUkFfU0VSVklDRSk7Ci0gICAgICBsb29wZXJUaHJlYWQgPSBu
ZXcgTG9vcGVyVGhyZWFkKCk7Ci0gICAgICBsb29wZXJUaHJlYWQuc3RhcnQoKTsKLSAgICAgIGxv
b3BlclRocmVhZC53YWl0VG9TdGFydCgpOwotICAgICAgY2FtZXJhRGV2aWNlTG9jayA9IG5ldyBP
YmplY3QoKTsKLSAgICAgIG9wZW5Eb25lU2lnbmFsID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwot
ICAgICAgY2FtZXJhRGV2aWNlID0gbnVsbDsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJPcGVuaW5n
IHNpbXBsZSBjYW1lcmEyLiIpOwotICAgICAgdHJ5IHsKLSAgICAgICAgY2FtZXJhTWFuYWdlci5v
cGVuQ2FtZXJhKGRldmljZU5hbWUsIG5ldyBDYW1lcmFTdGF0ZUNhbGxiYWNrKCksIGxvb3BlclRo
cmVhZC5nZXRIYW5kbGVyKCkpOwotICAgICAgfSBjYXRjaCAoQ2FtZXJhQWNjZXNzRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgZmFpbCgiU2ltcGxlIGNhbWVyYTIgQ2FtZXJhQWNjZXNzRXhjZXB0aW9u
OiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAi
V2FpdGluZyBmb3Igc2ltcGxlIGNhbWVyYTIgdG8gb3Blbi4iKTsKLSAgICAgIFRocmVhZFV0aWxz
LmF3YWl0VW5pbnRlcnJ1cHRpYmx5KG9wZW5Eb25lU2lnbmFsKTsKLSAgICAgIHN5bmNocm9uaXpl
ZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICBpZiAoIW9wZW5TdWNjZWVkZWQpIHsKLSAg
ICAgICAgICBmYWlsKCJPcGVuaW5nIHNpbXBsZSBjYW1lcmEyIGZhaWxlZC4iKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAgICAgTG9n
Z2luZy5kKFRBRywgIkNsb3Npbmcgc2ltcGxlIGNhbWVyYTIuIik7Ci0gICAgICBzeW5jaHJvbml6
ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAgaWYgKGNhbWVyYURldmljZSAhPSBudWxs
KSB7Ci0gICAgICAgICAgY2FtZXJhRGV2aWNlLmNsb3NlKCk7Ci0gICAgICAgIH0KLSAgICAgIH0K
LQotICAgICAgbG9vcGVyVGhyZWFkLnJlcXVlc3RTdG9wKCk7Ci0gICAgICBUaHJlYWRVdGlscy5q
b2luVW5pbnRlcnJ1cHRpYmx5KGxvb3BlclRocmVhZCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0
ZSBjbGFzcyBUZXN0T2JqZWN0RmFjdG9yeSBleHRlbmRzIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0
Rml4dHVyZXMuVGVzdE9iamVjdEZhY3RvcnkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBD
YW1lcmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3IoKSB7Ci0gICAgICByZXR1cm4gbmV3
IENhbWVyYTJFbnVtZXJhdG9yKGdldEFwcENvbnRleHQoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIENvbnRleHQgZ2V0QXBwQ29udGV4dCgpIHsKLSAgICAgIHJldHVybiBn
ZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0gICAgfQotCi0gICAgQFN1
cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
T2JqZWN0IHJhd09wZW5DYW1lcmEoU3RyaW5nIGNhbWVyYU5hbWUpIHsKLSAgICAgIHJldHVybiBu
ZXcgU2ltcGxlQ2FtZXJhMihnZXRBcHBDb250ZXh0KCksIGNhbWVyYU5hbWUpOwotICAgIH0KLQot
ICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgcmF3Q2xvc2VDYW1lcmEoT2JqZWN0IGNhbWVyYSkgewotICAgICAgKChTaW1w
bGVDYW1lcmEyKSBjYW1lcmEpLmNsb3NlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBDYW1l
cmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzIGZpeHR1cmVzOwotCi0gIEBPdmVycmlkZQotICBw
cm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLSAgICBmaXh0dXJlcyA9IG5ldyBDYW1lcmFWaWRlb0Nh
cHR1cmVyVGVzdEZpeHR1cmVzKG5ldyBUZXN0T2JqZWN0RmFjdG9yeSgpKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBmaXh0dXJlcy5kaXNw
b3NlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVBbmRE
aXNwb3NlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVh
dGVDYXB0dXJlckFuZERpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdENyZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUg
ZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5n
IGEgImRlZmF1bHQiIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0
aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQ2Fw
dHVyZXJBbmRSZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLmNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhh
dCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndh
cmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgdGhlIGZyb250IGZhY2lu
ZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMr
KyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0RnJvbnRGYWNp
bmdWaWRlb0NhcHR1cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0
dXJlcy5jcmVhdGVGcm9udEZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBU
aGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFt
ZXMgYXJlIGZvcndhcmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgdGhl
IGJhY2sgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZh
IGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3Rh
cnRCYWNrRmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuY3JlYXRlQmFja0ZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0K
LQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgZGVmYXVsdCBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQg
YW5kIHRoYXQgdGhlIGNhbWVyYSBjYW4KLSAgLy8gbGF0ZXIgYmUgc3dpdGNoZWQgdG8gYW5vdGhl
ciBjYW1lcmEuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIu
Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hWaWRlb0NhcHR1cmVyKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zd2l0Y2hDYW1lcmEo
KTsKLSAgfQotCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFFdmVudHMo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUV2ZW50
c0ludm9rZWQoKTsKLSAgfQotCi0gIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gYXR0ZW1wdGlu
ZyB0byBjYWxsIGUuZy4gc3dpdGNoQ2FtZXJhKCkgYWZ0ZXIgY2FtZXJhIGhhcyBiZWVuIHN0b3Bw
ZWQuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFDYWxsc0FmdGVyU3Rv
cCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY2FtZXJhQ2Fs
bHNBZnRlclN0b3AoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBWaWRlb1NvdXJj
ZSB0aGF0IHRoZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIGNvbm5lY3RlZCB0byBjYW4KLSAgLy8g
YmUgc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUg
QysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdG9wUmVzdGFydFZp
ZGVvU291cmNlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5z
dG9wUmVzdGFydFZpZGVvU291cmNlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUg
Y2FtZXJhIGNhbiBiZSBzdGFydGVkIGF0IGRpZmZlcmVudCByZXNvbHV0aW9ucy4KLSAgLy8gSXQg
ZG9lcyBub3QgdGVzdCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0U3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFN0b3BXaXRoRGlmZmVyZW50
UmVzb2x1dGlvbnMoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB3aGF0IGhhcHBlbnMgaWYgYnVm
ZmVycyBhcmUgcmV0dXJuZWQgYWZ0ZXIgdGhlIGNhcHR1cmVyIGhhdmUKLSAgLy8gYmVlbiBzdG9w
cGVkIGFuZCByZXN0YXJ0ZWQuIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIu
Ci0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZlckxhdGUo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHdlIGNhbiBjYXB0dXJlIGZyYW1lcywga2Vl
cCB0aGUgZnJhbWVzIGluIGEgbG9jYWwgcmVuZGVyZXIsIHN0b3AgY2FwdHVyaW5nLAotICAvLyBh
bmQgdGhlbiByZXR1cm4gdGhlIGZyYW1lcy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGVz
dCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZSgpIGlzIHRoYXQgd2UKLSAgLy8gYWxzbyB0ZXN0IHRoZSBK
TkkgYW5kIEMrKyBBbmRyb2lkVmlkZW9DYXB0dXJlciBwYXJ0cy4KLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdFJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZUVuZFRvRW5kKCk7
Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFFdmVudHNIYW5kbGVyLm9uRXJyb3Ig
aXMgdHJpZ2dlcmVkIGlmIHZpZGVvIGJ1ZmZlcnMgYXJlIG5vdCByZXR1cm5lZCB0bwotICAvLyB0
aGUgY2FwdHVyZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYUZyZWV6
ZWRFdmVudE9uQnVmZmVyU3RhcnZhdGlvbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuY2FtZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0aW9uKCk7Ci0g
IH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBmcmFtZXMgZm9yd2FyZGVkIHRvIGEgcmVuZGVyZXIg
aXMgc2NhbGVkIGlmIGFkYXB0T3V0cHV0Rm9ybWF0IGlzCi0gIC8vIGNhbGxlZC4gVGhpcyB0ZXN0
IGJvdGggSmF2YSBhbmQgQysrIHBhcnRzIG9mIG9mIHRoZSBzdGFjay4KLSAgQE1lZGl1bVRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdFNjYWxlQ2FtZXJhT3V0cHV0KCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zY2FsZUNhbWVyYU91dHB1dCgpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgdGhlIGNhbWVyYSBpcyBh
bHJlYWR5IG9wZW5lZAotICAvLyB3aGVuIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgc3RhcnRlZC4K
LSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFk
eU9wZW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0
V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBD
YW1lcmFWaWRlb0NhcHR1cmVyIGNhbiBiZSBzdGFydGVkLCBldmVuIGlmIHRoZSBjYW1lcmEgaXMg
YWxyZWFkeSBvcGVuZWQKLSAgLy8gaWYgdGhlIGNhbWVyYSBpcyBjbG9zZWQgd2hpbGUgQ2FtZXJh
VmlkZW9DYXB0dXJlciBpcyByZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBMYXJnZVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVD
YW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVyZXIuc3RvcCBjYW4gYmUgY2FsbGVkIHdoaWxlIENhbWVy
YVZpZGVvQ2FwdHVyZXIgaXMKLSAgLy8gcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9w
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxl
Q2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0
cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzLmphdmEJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhVmlkZW9DYXB0dXJlclRl
c3RGaXh0dXJlcy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNzMzICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMganVuaXQuZnJh
bWV3b3JrLkFzc2VydC4qOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFu
ZHJvaWQuQ2FwdHVyZUZvcm1hdDsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXIuSTQy
MEZyYW1lOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci0KLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRp
bC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotCi1jbGFzcyBDYW1lcmFWaWRlb0NhcHR1cmVy
VGVzdEZpeHR1cmVzIHsKLSAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJhVmlkZW9D
YXB0dXJlclRlc3RGaXh0dXJlcyI7Ci0gIC8vIERlZmF1bHQgdmFsdWVzIHVzZWQgZm9yIHN0YXJ0
aW5nIGNhcHR1cmluZwotICBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfV0lEVEggPSA2NDA7Ci0g
IHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9IRUlHSFQgPSA0ODA7Ci0gIHN0YXRpYyBmaW5hbCBp
bnQgREVGQVVMVF9GUFMgPSAxNTsKLQotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBSZW5kZXJlckNh
bGxiYWNrcyBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgICBwcml2YXRl
IGludCBmcmFtZXNSZW5kZXJlZCA9IDA7Ci0gICAgcHJpdmF0ZSBPYmplY3QgZnJhbWVMb2NrID0g
MDsKLSAgICBwcml2YXRlIGludCB3aWR0aCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgaGVpZ2h0ID0g
MDsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1lKEk0MjBGcmFt
ZSBmcmFtZSkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgKytm
cmFtZXNSZW5kZXJlZDsKLSAgICAgICAgd2lkdGggPSBmcmFtZS5yb3RhdGVkV2lkdGgoKTsKLSAg
ICAgICAgaGVpZ2h0ID0gZnJhbWUucm90YXRlZEhlaWdodCgpOwotICAgICAgICBmcmFtZUxvY2su
bm90aWZ5KCk7Ci0gICAgICB9Ci0gICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShm
cmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIGludCBmcmFtZVdpZHRoKCkgewotICAgICAgc3lu
Y2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgcmV0dXJuIHdpZHRoOwotICAgICAgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZnJhbWVIZWlnaHQoKSB7Ci0gICAgICBzeW5jaHJvbml6
ZWQgKGZyYW1lTG9jaykgewotICAgICAgICByZXR1cm4gaGVpZ2h0OwotICAgICAgfQotICAgIH0K
LQotICAgIHB1YmxpYyBpbnQgd2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZvciB0aGUg
bmV4dCBmcmFtZSB0byByZW5kZXIiKTsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7
Ci0gICAgICAgIGZyYW1lTG9jay53YWl0KCk7Ci0gICAgICAgIHJldHVybiBmcmFtZXNSZW5kZXJl
ZDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBGYWtlQXN5
bmNSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgICBwcml2
YXRlIGZpbmFsIExpc3Q8STQyMEZyYW1lPiBwZW5kaW5nRnJhbWVzID0gbmV3IEFycmF5TGlzdDxJ
NDIwRnJhbWU+KCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW5kZXJGcmFt
ZShJNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0ZyYW1lcykg
ewotICAgICAgICBwZW5kaW5nRnJhbWVzLmFkZChmcmFtZSk7Ci0gICAgICAgIHBlbmRpbmdGcmFt
ZXMubm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gV2FpdCB1bnRpbCBhdCBs
ZWFzdCBvbmUgZnJhbWUgaGF2ZSBiZWVuIHJlY2VpdmVkLCBiZWZvcmUgcmV0dXJuaW5nIHRoZW0u
Ci0gICAgcHVibGljIExpc3Q8STQyMEZyYW1lPiB3YWl0Rm9yUGVuZGluZ0ZyYW1lcygpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2FpdGluZyBm
b3IgcGVuZGluZyBmcmFtZXMiKTsKLSAgICAgIHN5bmNocm9uaXplZCAocGVuZGluZ0ZyYW1lcykg
ewotICAgICAgICB3aGlsZSAocGVuZGluZ0ZyYW1lcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICBw
ZW5kaW5nRnJhbWVzLndhaXQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IEFycmF5
TGlzdDxJNDIwRnJhbWU+KHBlbmRpbmdGcmFtZXMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0g
IHN0YXRpYyBwcml2YXRlIGNsYXNzIEZha2VDYXB0dXJlck9ic2VydmVyIGltcGxlbWVudHMgQ2Ft
ZXJhVmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2VydmVyIHsKLSAgICBwcml2YXRlIGludCBmcmFt
ZXNDYXB0dXJlZCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVTaXplID0gMDsKLSAgICBwcml2
YXRlIGludCBmcmFtZVdpZHRoID0gMDsKLSAgICBwcml2YXRlIGludCBmcmFtZUhlaWdodCA9IDA7
Ci0gICAgZmluYWwgcHJpdmF0ZSBPYmplY3QgZnJhbWVMb2NrID0gbmV3IE9iamVjdCgpOwotICAg
IGZpbmFsIHByaXZhdGUgT2JqZWN0IGNhcHR1cmVyU3RhcnRMb2NrID0gbmV3IE9iamVjdCgpOwot
ICAgIHByaXZhdGUgYm9vbGVhbiBjYXB0dXJlclN0YXJ0UmVzdWx0ID0gZmFsc2U7Ci0gICAgZmlu
YWwgcHJpdmF0ZSBMaXN0PExvbmc+IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXlMaXN0PExvbmc+KCk7
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVyU3RhcnRlZChib29s
ZWFuIHN1Y2Nlc3MpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJvbkNhcHR1cmVyU3RhcnRlZDog
IiArIHN1Y2Nlc3MpOwotCi0gICAgICBzeW5jaHJvbml6ZWQgKGNhcHR1cmVyU3RhcnRMb2NrKSB7
Ci0gICAgICAgIGNhcHR1cmVyU3RhcnRSZXN1bHQgPSBzdWNjZXNzOwotICAgICAgICBjYXB0dXJl
clN0YXJ0TG9jay5ub3RpZnlBbGwoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVyU3RvcHBlZCgpIHsKLSAgICAgIExvZ2dpbmcuZChU
QUcsICJvbkNhcHR1cmVyU3RvcHBlZCIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIGJ5dGVbXSBmcmFt
ZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZVN0YW1wKSB7
Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICArK2ZyYW1lc0NhcHR1
cmVkOwotICAgICAgICBmcmFtZVNpemUgPSBmcmFtZS5sZW5ndGg7Ci0gICAgICAgIGZyYW1lV2lk
dGggPSB3aWR0aDsKLSAgICAgICAgZnJhbWVIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIHRpbWVz
dGFtcHMuYWRkKHRpbWVTdGFtcCk7Ci0gICAgICAgIGZyYW1lTG9jay5ub3RpZnkoKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVD
YXB0dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQsCi0gICAgICAg
IGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZVN0YW1wKSB7
Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICArK2ZyYW1lc0NhcHR1
cmVkOwotICAgICAgICBmcmFtZVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIGZyYW1lSGVpZ2h0ID0g
aGVpZ2h0OwotICAgICAgICBmcmFtZVNpemUgPSAwOwotICAgICAgICB0aW1lc3RhbXBzLmFkZCh0
aW1lU3RhbXApOwotICAgICAgICBmcmFtZUxvY2subm90aWZ5KCk7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvckNhcHR1cmVyVG9TdGFydCgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2FpdGluZyBmb3IgdGhl
IGNhcHR1cmVyIHRvIHN0YXJ0Iik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhcHR1cmVyU3RhcnRM
b2NrKSB7Ci0gICAgICAgIGNhcHR1cmVyU3RhcnRMb2NrLndhaXQoKTsKLSAgICAgICAgcmV0dXJu
IGNhcHR1cmVyU3RhcnRSZXN1bHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCB3
YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBuZXh0IGNhcHR1cmVkIGZyYW1l
Iik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICBmcmFtZUxvY2su
d2FpdCgpOwotICAgICAgICByZXR1cm4gZnJhbWVzQ2FwdHVyZWQ7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgaW50IGZyYW1lU2l6ZSgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7
Ci0gICAgICAgIHJldHVybiBmcmFtZVNpemU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaW50IGZy
YW1lV2lkdGgoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICBy
ZXR1cm4gZnJhbWVXaWR0aDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgZnJhbWVIZWlnaHQo
KSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICByZXR1cm4gZnJh
bWVIZWlnaHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgTGlzdDxMb25nPiBnZXRDb3B5QW5kUmVz
ZXRMaXN0T2Z0aW1lU3RhbXBzKCkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsK
LSAgICAgICAgQXJyYXlMaXN0PExvbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PExvbmc+KHRpbWVz
dGFtcHMpOwotICAgICAgICB0aW1lc3RhbXBzLmNsZWFyKCk7Ci0gICAgICAgIHJldHVybiBsaXN0
OwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBjbGFzcyBDYW1lcmFFdmVudHMgaW1w
bGVtZW50cyBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYUV2ZW50c0hhbmRsZXIgewotICAgIHB1
YmxpYyBib29sZWFuIG9uQ2FtZXJhT3BlbmluZ0NhbGxlZDsKLSAgICBwdWJsaWMgYm9vbGVhbiBv
bkZpcnN0RnJhbWVBdmFpbGFibGVDYWxsZWQ7Ci0gICAgcHVibGljIGZpbmFsIE9iamVjdCBvbkNh
bWVyYUZyZWV6ZWRMb2NrID0gbmV3IE9iamVjdCgpOwotICAgIHByaXZhdGUgU3RyaW5nIG9uQ2Ft
ZXJhRnJlZXplZERlc2NyaXB0aW9uOwotICAgIHB1YmxpYyBmaW5hbCBPYmplY3QgY2FtZXJhQ2xv
c2VkTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gY2FtZXJhQ2xvc2Vk
ID0gdHJ1ZTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhRXJyb3Io
U3RyaW5nIGVycm9yRGVzY3JpcHRpb24pIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJDYW1lcmEg
ZXJyb3I6ICIgKyBlcnJvckRlc2NyaXB0aW9uKTsKLSAgICAgIGNhbWVyYUNsb3NlZCA9IHRydWU7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFEaXNjb25u
ZWN0ZWQoKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFGcmVl
emVkKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKG9uQ2Ft
ZXJhRnJlZXplZExvY2spIHsKLSAgICAgICAgb25DYW1lcmFGcmVlemVkRGVzY3JpcHRpb24gPSBl
cnJvckRlc2NyaXB0aW9uOwotICAgICAgICBvbkNhbWVyYUZyZWV6ZWRMb2NrLm5vdGlmeUFsbCgp
OwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2Ft
ZXJhT3BlbmluZyhTdHJpbmcgY2FtZXJhTmFtZSkgewotICAgICAgb25DYW1lcmFPcGVuaW5nQ2Fs
bGVkID0gdHJ1ZTsKLSAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhQ2xvc2VkTG9jaykgewotICAg
ICAgICBjYW1lcmFDbG9zZWQgPSBmYWxzZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkZpcnN0RnJhbWVBdmFpbGFibGUoKSB7Ci0gICAgICBvbkZp
cnN0RnJhbWVBdmFpbGFibGVDYWxsZWQgPSB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhQ2xvc2VkKCkgewotICAgICAgc3luY2hyb25pemVkIChj
YW1lcmFDbG9zZWRMb2NrKSB7Ci0gICAgICAgIGNhbWVyYUNsb3NlZCA9IHRydWU7Ci0gICAgICAg
IGNhbWVyYUNsb3NlZExvY2subm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVi
bGljIFN0cmluZyB3YWl0Rm9yQ2FtZXJhRnJlZXplZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2FpdGluZyBmb3IgdGhlIGNhbWVyYSB0byBm
cmVlemUiKTsKLSAgICAgIHN5bmNocm9uaXplZCAob25DYW1lcmFGcmVlemVkTG9jaykgewotICAg
ICAgICBvbkNhbWVyYUZyZWV6ZWRMb2NrLndhaXQoKTsKLSAgICAgICAgcmV0dXJuIG9uQ2FtZXJh
RnJlZXplZERlc2NyaXB0aW9uOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHdh
aXRGb3JDYW1lcmFDbG9zZWQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAg
c3luY2hyb25pemVkIChjYW1lcmFDbG9zZWRMb2NrKSB7Ci0gICAgICAgIHdoaWxlICghY2FtZXJh
Q2xvc2VkKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBjYW1l
cmEgdG8gY2xvc2UuIik7Ci0gICAgICAgICAgY2FtZXJhQ2xvc2VkTG9jay53YWl0KCk7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgdG8gY29sbGVj
dCBhbGwgY2xhc3NlcyByZWxhdGVkIHRvIHNpbmdsZSBjYXB0dXJlciBpbnN0YW5jZS4KLSAgICov
Ci0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIENhcHR1cmVySW5zdGFuY2UgewotICAgIHB1YmxpYyBD
YW1lcmFWaWRlb0NhcHR1cmVyIGNhcHR1cmVyOwotICAgIHB1YmxpYyBDYW1lcmFFdmVudHMgY2Ft
ZXJhRXZlbnRzOwotICAgIHB1YmxpYyBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVy
ZUhlbHBlcjsKLSAgICBwdWJsaWMgRmFrZUNhcHR1cmVyT2JzZXJ2ZXIgb2JzZXJ2ZXI7Ci0gICAg
cHVibGljIExpc3Q8Q2FwdHVyZUZvcm1hdD4gc3VwcG9ydGVkRm9ybWF0czsKLSAgICBwdWJsaWMg
Q2FwdHVyZUZvcm1hdCBmb3JtYXQ7Ci0gIH0KLQotICAvKioKLSAgICogQ2xhc3MgdXNlZCBmb3Ig
Y29sbGVjdGluZyBhIFZpZGVvU291cmNlLCBhIFZpZGVvVHJhY2sgYW5kIGEgcmVuZGVyZXIuIFRo
ZSBjbGFzcwotICAgKiBpcyB1c2VkIGZvciB0ZXN0aW5nIGxvY2FsIHJlbmRlcmluZyBmcm9tIGEg
Y2FwdHVyZXIuCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBWaWRlb1RyYWNrV2l0aFJl
bmRlcmVyIHsKLSAgICBwdWJsaWMgVmlkZW9Tb3VyY2Ugc291cmNlOwotICAgIHB1YmxpYyBWaWRl
b1RyYWNrIHRyYWNrOwotICAgIHB1YmxpYyBSZW5kZXJlckNhbGxiYWNrcyByZW5kZXJlckNhbGxi
YWNrczsKLSAgICBwdWJsaWMgRmFrZUFzeW5jUmVuZGVyZXIgZmFrZUFzeW5jUmVuZGVyZXI7Ci0g
IH0KLQotICBwdWJsaWMgYWJzdHJhY3Qgc3RhdGljIGNsYXNzIFRlc3RPYmplY3RGYWN0b3J5IHsK
LSAgICBmaW5hbCBDYW1lcmFFbnVtZXJhdG9yIGNhbWVyYUVudW1lcmF0b3I7Ci0KLSAgICBUZXN0
T2JqZWN0RmFjdG9yeSgpIHsKLSAgICAgIGNhbWVyYUVudW1lcmF0b3IgPSBnZXRDYW1lcmFFbnVt
ZXJhdG9yKCk7Ci0gICAgfQotCi0gICAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIgY3JlYXRl
Q2FwdHVyZXIoCi0gICAgICAgIFN0cmluZyBuYW1lLCBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVy
YUV2ZW50c0hhbmRsZXIgZXZlbnRzSGFuZGxlcikgewotICAgICAgcmV0dXJuIGNhbWVyYUVudW1l
cmF0b3IuY3JlYXRlQ2FwdHVyZXIobmFtZSwgZXZlbnRzSGFuZGxlcik7Ci0gICAgfQotCi0gICAg
cHVibGljIFN0cmluZyBnZXROYW1lT2ZGcm9udEZhY2luZ0RldmljZSgpIHsKLSAgICAgIGZvciAo
U3RyaW5nIGRldmljZU5hbWUgOiBjYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCkpIHsK
LSAgICAgICAgaWYgKGNhbWVyYUVudW1lcmF0b3IuaXNGcm9udEZhY2luZyhkZXZpY2VOYW1lKSkg
ewotICAgICAgICAgIHJldHVybiBkZXZpY2VOYW1lOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAg
ICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZU9mQmFj
a0ZhY2luZ0RldmljZSgpIHsKLSAgICAgIGZvciAoU3RyaW5nIGRldmljZU5hbWUgOiBjYW1lcmFF
bnVtZXJhdG9yLmdldERldmljZU5hbWVzKCkpIHsKLSAgICAgICAgaWYgKGNhbWVyYUVudW1lcmF0
b3IuaXNCYWNrRmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAgICAgcmV0dXJuIGRldmljZU5h
bWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0g
ICAgcHVibGljIGJvb2xlYW4gaGF2ZVR3b0NhbWVyYXMoKSB7Ci0gICAgICByZXR1cm4gY2FtZXJh
RW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpLmxlbmd0aCA+PSAyOwotICAgIH0KLQotICAgIHB1
YmxpYyBib29sZWFuIGlzQ2FwdHVyaW5nVG9UZXh0dXJlKCkgewotICAgICAgLy8gSW4gdGhlIGZ1
dHVyZSwgd2UgcGxhbiB0byBvbmx5IHN1cHBvcnQgY2FwdHVyaW5nIHRvIHRleHR1cmUsIHNvIGRl
ZmF1bHQgdG8gdHJ1ZQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYWJzdHJhY3Qg
cHVibGljIENhbWVyYUVudW1lcmF0b3IgZ2V0Q2FtZXJhRW51bWVyYXRvcigpOwotICAgIGFic3Ry
YWN0IHB1YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKTsKLQotICAgIC8vIENhbWVyYVZpZGVv
Q2FwdHVyZXIgQVBJIGlzIHRvbyBzbG93IGZvciBzb21lIG9mIG91ciB0ZXN0cyB3aGVyZSB3ZSBu
ZWVkIHRvIG9wZW4gYSBjb21wZXRpbmcKLSAgICAvLyBjYW1lcmEuIFRoZXNlIG1ldGhvZHMgYXJl
IHVzZWQgaW5zdGVhZC4KLSAgICBhYnN0cmFjdCBwdWJsaWMgT2JqZWN0IHJhd09wZW5DYW1lcmEo
U3RyaW5nIGNhbWVyYU5hbWUpOwotICAgIGFic3RyYWN0IHB1YmxpYyB2b2lkIHJhd0Nsb3NlQ2Ft
ZXJhKE9iamVjdCBjYW1lcmEpOwotICB9Ci0KLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkgcGVlckNvbm5lY3Rpb25GYWN0b3J5OwotICBwcml2YXRlIFRlc3RPYmplY3RGYWN0b3J5IHRl
c3RPYmplY3RGYWN0b3J5OwotCi0gIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMoVGVz
dE9iamVjdEZhY3RvcnkgdGVzdE9iamVjdEZhY3RvcnkpIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkuaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKAotICAgICAgICB0ZXN0T2JqZWN0RmFjdG9y
eS5nZXRBcHBDb250ZXh0KCksIHRydWUsIHRydWUsIHRydWUpOwotCi0gICAgdGhpcy5wZWVyQ29u
bmVjdGlvbkZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5KG51bGwgLyogb3B0aW9u
cyAqLyk7Ci0gICAgdGhpcy50ZXN0T2JqZWN0RmFjdG9yeSA9IHRlc3RPYmplY3RGYWN0b3J5Owot
ICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLSAgICB0aGlzLnBlZXJDb25uZWN0aW9u
RmFjdG9yeS5kaXNwb3NlKCk7Ci0gIH0KLQotICAvLyBJbnRlcm5hbCBoZWxwZXIgbWV0aG9kcwot
ICBwcml2YXRlIENhcHR1cmVySW5zdGFuY2UgY3JlYXRlQ2FwdHVyZXIoU3RyaW5nIG5hbWUsIGJv
b2xlYW4gaW5pdGlhbGl6ZSkgewotICAgIENhcHR1cmVySW5zdGFuY2UgaW5zdGFuY2UgPSBuZXcg
Q2FwdHVyZXJJbnN0YW5jZSgpOwotICAgIGluc3RhbmNlLmNhbWVyYUV2ZW50cyA9IG5ldyBDYW1l
cmFFdmVudHMoKTsKLSAgICBpbnN0YW5jZS5jYXB0dXJlciA9IHRlc3RPYmplY3RGYWN0b3J5LmNy
ZWF0ZUNhcHR1cmVyKG5hbWUsIGluc3RhbmNlLmNhbWVyYUV2ZW50cyk7Ci0gICAgaW5zdGFuY2Uu
c3VyZmFjZVRleHR1cmVIZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoCi0gICAg
ICAgICJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxsIC8q
IHNoYXJlZENvbnRleHQgKi8pOwotICAgIGluc3RhbmNlLm9ic2VydmVyID0gbmV3IEZha2VDYXB0
dXJlck9ic2VydmVyKCk7Ci0gICAgaWYgKGluaXRpYWxpemUpIHsKLSAgICAgIGluc3RhbmNlLmNh
cHR1cmVyLmluaXRpYWxpemUoCi0gICAgICAgICAgaW5zdGFuY2Uuc3VyZmFjZVRleHR1cmVIZWxw
ZXIsIHRlc3RPYmplY3RGYWN0b3J5LmdldEFwcENvbnRleHQoKSwgaW5zdGFuY2Uub2JzZXJ2ZXIp
OwotICAgIH0KLSAgICBpbnN0YW5jZS5zdXBwb3J0ZWRGb3JtYXRzID0gdGVzdE9iamVjdEZhY3Rv
cnkuY2FtZXJhRW51bWVyYXRvci5nZXRTdXBwb3J0ZWRGb3JtYXRzKG5hbWUpOwotICAgIHJldHVy
biBpbnN0YW5jZTsKLSAgfQotCi0gIHByaXZhdGUgQ2FwdHVyZXJJbnN0YW5jZSBjcmVhdGVDYXB0
dXJlcihib29sZWFuIGluaXRpYWxpemUpIHsKLSAgICBTdHJpbmcgbmFtZSA9IHRlc3RPYmplY3RG
YWN0b3J5LmNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKVswXTsKLSAgICByZXR1cm4g
Y3JlYXRlQ2FwdHVyZXIobmFtZSwgaW5pdGlhbGl6ZSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
c3RhcnRDYXB0dXJlKENhcHR1cmVySW5zdGFuY2UgaW5zdGFuY2UpIHsKLSAgICBzdGFydENhcHR1
cmUoaW5zdGFuY2UsIDApOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0Q2FwdHVyZShDYXB0
dXJlckluc3RhbmNlIGluc3RhbmNlLCBpbnQgZm9ybWF0SW5kZXgpIHsKLSAgICBmaW5hbCBDYW1l
cmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVyZUZvcm1hdCBmb3JtYXQgPQotICAgICAgICBpbnN0
YW5jZS5zdXBwb3J0ZWRGb3JtYXRzLmdldChmb3JtYXRJbmRleCk7Ci0KLSAgICBpbnN0YW5jZS5j
YXB0dXJlci5zdGFydENhcHR1cmUoZm9ybWF0LndpZHRoLCBmb3JtYXQuaGVpZ2h0LCBmb3JtYXQu
ZnJhbWVyYXRlLm1heCk7Ci0gICAgaW5zdGFuY2UuZm9ybWF0ID0gZm9ybWF0OwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIGRpc3Bvc2VDYXB0dXJlcihDYXB0dXJlckluc3RhbmNlIGluc3RhbmNlKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGluc3RhbmNlLmNhcHR1cmVyLnN0b3BD
YXB0dXJlKCk7Ci0gICAgaW5zdGFuY2UuY2FtZXJhRXZlbnRzLndhaXRGb3JDYW1lcmFDbG9zZWQo
KTsKLSAgICBpbnN0YW5jZS5jYXB0dXJlci5kaXNwb3NlKCk7Ci0gICAgaW5zdGFuY2Uuc3VyZmFj
ZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gICAgaW5zdGFuY2Uuc3VyZmFj
ZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb1RyYWNrV2l0
aFJlbmRlcmVyIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoCi0gICAgICBDYW1lcmFWaWRl
b0NhcHR1cmVyIGNhcHR1cmVyLCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW5kZXJlckNhbGxi
YWNrcykgewotICAgIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJl
ciA9IG5ldyBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKCk7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5k
ZXJlci5zb3VyY2UgPSBwZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlVmlkZW9Tb3VyY2UoY2Fw
dHVyZXIpOwotICAgIGNhcHR1cmVyLnN0YXJ0Q2FwdHVyZShERUZBVUxUX1dJRFRILCBERUZBVUxU
X0hFSUdIVCwgREVGQVVMVF9GUFMpOwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIudHJhY2sg
PQotICAgICAgICBwZWVyQ29ubmVjdGlvbkZhY3RvcnkuY3JlYXRlVmlkZW9UcmFjaygiZHVtbXki
LCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZSk7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5k
ZXJlci50cmFjay5hZGRSZW5kZXJlcihuZXcgVmlkZW9SZW5kZXJlcihyZW5kZXJlckNhbGxiYWNr
cykpOwotICAgIHJldHVybiB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyOwotICB9Ci0KLSAgcHJpdmF0
ZSBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoQ2Ft
ZXJhVmlkZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIFJlbmRlcmVyQ2FsbGJhY2tzIHJlbmRl
cmVyQ2FsbGJhY2tzID0gbmV3IFJlbmRlcmVyQ2FsbGJhY2tzKCk7Ci0gICAgVmlkZW9UcmFja1dp
dGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9U
cmFja1dpdGhSZW5kZXJlcihjYXB0dXJlciwgcmVuZGVyZXJDYWxsYmFja3MpOwotICAgIHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3MgPSByZW5kZXJlckNhbGxiYWNrczsK
LSAgICByZXR1cm4gdmlkZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAgfQotCi0gIHByaXZhdGUgVmlk
ZW9UcmFja1dpdGhSZW5kZXJlciBjcmVhdGVWaWRlb1RyYWNrV2l0aEZha2VBc3luY1JlbmRlcmVy
KAotICAgICAgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIEZha2VBc3luY1Jl
bmRlcmVyIGZha2VBc3luY1JlbmRlcmVyID0gbmV3IEZha2VBc3luY1JlbmRlcmVyKCk7Ci0gICAg
VmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAg
Y3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlciwgZmFrZUFzeW5jUmVuZGVyZXIp
OwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVyZXIgPSBmYWtlQXN5
bmNSZW5kZXJlcjsKLSAgICByZXR1cm4gdmlkZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBkaXNwb3NlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihWaWRlb1RyYWNrV2l0
aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIpIHsKLSAgICB2aWRlb1RyYWNrV2l0aFJl
bmRlcmVyLnRyYWNrLmRpc3Bvc2UoKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJj
ZS5kaXNwb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgd2FpdFVudGlsSWRsZShDYXB0dXJl
ckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgx
KTsKLSAgICBjYXB0dXJlckluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLmdldEhhbmRsZXIo
KS5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0p
OwotICAgIGJhcnJpZXIuYXdhaXQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVDYXB0
dXJlckFuZFJlbmRlcihTdHJpbmcgbmFtZSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBpZiAobmFtZSA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiU2tpcHBpbmcg
dmlkZW8gY2FwdHVyZXIgdGVzdCBiZWNhdXNlIGRldmljZSBuYW1lIGlzIG51bGwuIik7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlcklu
c3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIobmFtZSwgZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0g
ICAgZmluYWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0K
LSAgICAgICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNh
cHR1cmVyKTsKLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJD
YWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLSAgICBkaXNwb3NlQ2Fw
dHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIodmlkZW9UcmFja1dpdGhSZW5kZXJlcik7Ci0gIH0KLQotICAvLyBUZXN0IG1ldGhvZHMKLSAg
cHVibGljIHZvaWQgY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY3JlYXRlQ2FwdHVyZXIodHJ1ZSAvKiBp
bml0aWFsaXplICovKSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVOb25FeGlzdGluZ0Nh
bWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgdHJ5IHsKLSAgICAgIGRp
c3Bvc2VDYXB0dXJlcihjcmVhdGVDYXB0dXJlcigibm9uLWV4aXN0aW5nIGNhbWVyYSIsIGZhbHNl
IC8qIGluaXRpYWxpemUgKi8pKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRp
b24gZSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZhaWwoIkV4cGVjdGVkIGlsbGVn
YWwgYXJndW1lbnQgZXhjZXB0aW9uIHdoZW4gY3JlYXRpbmcgbm9uLWV4aXN0aW5nIGNhbWVyYS4i
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBTdHJpbmcgbmFtZSA9IHRlc3RPYmplY3RGYWN0
b3J5LmNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKVswXTsKLSAgICBjcmVhdGVDYXB0
dXJlckFuZFJlbmRlcihuYW1lKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUZyb250RmFj
aW5nQ2FwdHVyZXJBbmRSZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKHRlc3RPYmplY3RGYWN0b3J5LmdldE5hbWVPZkZyb250
RmFjaW5nRGV2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlQmFja0ZhY2luZ0Nh
cHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBjcmVh
dGVDYXB0dXJlckFuZFJlbmRlcih0ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZCYWNrRmFjaW5n
RGV2aWNlKCkpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoIXRlc3RPYmplY3RGYWN0b3J5LmhhdmVUd29D
YW1lcmFzKCkpIHsKLSAgICAgIExvZ2dpbmcudygKLSAgICAgICAgICBUQUcsICJTa2lwcGluZyB0
ZXN0IHN3aXRjaCB2aWRlbyBjYXB0dXJlciBiZWNhdXNlIHRoZSBkZXZpY2UgZG9lc24ndCBoYXZl
IHR3byBjYW1lcmFzLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFsIENhcHR1
cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGZhbHNlIC8qIGlu
aXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFj
a1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2Fw
dHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAgLy8gV2FpdCBmb3IgdGhlIGNhbWVyYSB0byBz
dGFydCBzbyB3ZSBjYW4gc3dpdGNoIGl0Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJl
bmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7
Ci0KLSAgICAvLyBBcnJheSB3aXRoIG9uZSBlbGVtZW50IHRvIGF2b2lkIGZpbmFsIHByb2JsZW0g
aW4gbmVzdGVkIGNsYXNzZXMuCi0gICAgZmluYWwgYm9vbGVhbltdIGNhbWVyYVN3aXRjaFN1Y2Nl
c3NmdWwgPSBuZXcgYm9vbGVhblsxXTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBiYXJyaWVy
ID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIu
c3dpdGNoQ2FtZXJhKG5ldyBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhbWVyYVN3aXRjaEhhbmRsZXIo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhU3dpdGNoRG9u
ZShib29sZWFuIGlzRnJvbnRDYW1lcmEpIHsKLSAgICAgICAgY2FtZXJhU3dpdGNoU3VjY2Vzc2Z1
bFswXSA9IHRydWU7Ci0gICAgICAgIGJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2FtZXJhU3dpdGNoRXJyb3IoU3RyaW5n
IGVycm9yRGVzY3JpcHRpb24pIHsKLSAgICAgICAgY2FtZXJhU3dpdGNoU3VjY2Vzc2Z1bFswXSA9
IGZhbHNlOwotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwotICAgICAgfQotICAgIH0pOwot
ICAgIC8vIFdhaXQgdW50aWwgdGhlIGNhbWVyYSBoYXMgYmVlbiBzd2l0Y2hlZC4KLSAgICBiYXJy
aWVyLmF3YWl0KCk7Ci0KLSAgICAvLyBDaGVjayByZXN1bHQuCi0gICAgYXNzZXJ0VHJ1ZShjYW1l
cmFTd2l0Y2hTdWNjZXNzZnVsWzBdKTsKLSAgICAvLyBFbnN1cmUgdGhhdCBmcmFtZXMgYXJlIHJl
Y2VpdmVkLgotICAgIGFzc2VydFRydWUodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNh
bGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKSA+IDApOwotICAgIGRpc3Bvc2VDYXB0
dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dpdGhSZW5kZXJl
cih2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNhbWVyYUV2
ZW50c0ludm9rZWQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENh
cHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKHRydWUgLyog
aW5pdGlhbGl6ZSAqLyk7Ci0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotICAg
IC8vIE1ha2Ugc3VyZSBjYW1lcmEgaXMgc3RhcnRlZCBhbmQgZmlyc3QgZnJhbWUgaXMgcmVjZWl2
ZWQgYW5kIHRoZW4gc3RvcCBpdC4KLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2Jz
ZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLm9i
c2VydmVyLndhaXRGb3JOZXh0Q2FwdHVyZWRGcmFtZSgpOwotICAgIGRpc3Bvc2VDYXB0dXJlcihj
YXB0dXJlckluc3RhbmNlKTsKLQotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5jYW1l
cmFFdmVudHMub25DYW1lcmFPcGVuaW5nQ2FsbGVkKTsKLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVy
SW5zdGFuY2UuY2FtZXJhRXZlbnRzLm9uRmlyc3RGcmFtZUF2YWlsYWJsZUNhbGxlZCk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBjYW1lcmFDYWxsc0FmdGVyU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNl
ID0gY3JlYXRlQ2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBzdGFydENhcHR1
cmUoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgLy8gTWFrZSBzdXJlIGNhbWVyYSBpcyBzdGFydGVk
IGFuZCB0aGVuIHN0b3AgaXQuCi0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLm9ic2Vy
dmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0
dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIGNhcHR1cmVySW5zdGFuY2Uuc3VyZmFjZVRleHR1cmVI
ZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAvLyBXZSBjYW4ndCBjaGFuZ2UgfGNh
cHR1cmVyfCBhdCB0aGlzIHBvaW50LCBidXQgd2Ugc2hvdWxkIG5vdCBjcmFzaC4KLSAgICBjYXB0
dXJlckluc3RhbmNlLmNhcHR1cmVyLnN3aXRjaENhbWVyYShudWxsIC8qIHN3aXRjaEV2ZW50c0hh
bmRsZXIgKi8pOwotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuY2hhbmdlQ2FwdHVyZUZv
cm1hdChERUZBVUxUX1dJRFRILCBERUZBVUxUX0hFSUdIVCwgREVGQVVMVF9GUFMpOwotCi0gICAg
ZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
c3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVy
ZXIoZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgZmluYWwgVmlkZW9UcmFja1dpdGhSZW5k
ZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9UcmFja1dp
dGhSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyKTsKLQotICAgIGFzc2VydFRydWUo
dmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1l
VG9SZW5kZXIoKSA+IDApOwotICAgIGFzc2VydEVxdWFscyhNZWRpYVNvdXJjZS5TdGF0ZS5MSVZF
LCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZS5zdGF0ZSgpKTsKLQotICAgIGNhcHR1cmVy
SW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBhc3NlcnRFcXVhbHMoTWVkaWFT
b3VyY2UuU3RhdGUuRU5ERUQsIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuc291cmNlLnN0YXRlKCkp
OwotCi0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotICAgIGFzc2VydFRydWUo
dmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1l
VG9SZW5kZXIoKSA+IDApOwotICAgIGFzc2VydEVxdWFscyhNZWRpYVNvdXJjZS5TdGF0ZS5MSVZF
LCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZS5zdGF0ZSgpKTsKLQotICAgIGRpc3Bvc2VD
YXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dpdGhSZW5k
ZXJlcih2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0YXJ0
U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRl
Q2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMzsgKytpKSB7Ci0gICAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSwgaSk7Ci0g
ICAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvckNhcHR1cmVy
VG9TdGFydCgpKTsKLSAgICAgIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvck5leHRD
YXB0dXJlZEZyYW1lKCk7Ci0KLSAgICAgIC8vIENoZWNrIHRoZSBmcmFtZSBzaXplLiBUaGUgYWN0
dWFsIHdpZHRoIGFuZCBoZWlnaHQgZGVwZW5kIG9uIGhvdyB0aGUgY2FwdHVyZXIgaXMgbW91bnRl
ZC4KLSAgICAgIGZpbmFsIGJvb2xlYW4gaWRlbnRpY2FsUmVzb2x1dGlvbiA9Ci0gICAgICAgICAg
KGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVXaWR0aCgpID09IGNhcHR1cmVySW5zdGFu
Y2UuZm9ybWF0LndpZHRoCi0gICAgICAgICAgICAgICYmIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2
ZXIuZnJhbWVIZWlnaHQoKSA9PSBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC5oZWlnaHQpOwotICAg
ICAgZmluYWwgYm9vbGVhbiBmbGlwcGVkUmVzb2x1dGlvbiA9Ci0gICAgICAgICAgKGNhcHR1cmVy
SW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVXaWR0aCgpID09IGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0
LmhlaWdodAotICAgICAgICAgICAgICAmJiBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZyYW1l
SGVpZ2h0KCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQud2lkdGgpOwotICAgICAgaWYgKCFp
ZGVudGljYWxSZXNvbHV0aW9uICYmICFmbGlwcGVkUmVzb2x1dGlvbikgewotICAgICAgICBmYWls
KCJXcm9uZyByZXNvbHV0aW9uLCBnb3Q6ICIgKyBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZy
YW1lV2lkdGgoKSArICJ4IgotICAgICAgICAgICAgKyBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVy
LmZyYW1lSGVpZ2h0KCkgKyAiIGV4cGVjdGVkOiAiCi0gICAgICAgICAgICArIGNhcHR1cmVySW5z
dGFuY2UuZm9ybWF0LndpZHRoICsgIngiICsgY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQuaGVpZ2h0
ICsgIiBvciAiCi0gICAgICAgICAgICArIGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0LmhlaWdodCAr
ICJ4IiArIGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0LndpZHRoKTsKLSAgICAgIH0KLQotICAgICAg
aWYgKHRlc3RPYmplY3RGYWN0b3J5LmlzQ2FwdHVyaW5nVG9UZXh0dXJlKCkpIHsKLSAgICAgICAg
YXNzZXJ0RXF1YWxzKDAsIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVTaXplKCkpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLmZvcm1h
dC5mcmFtZVNpemUoKSA8PSBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZyYW1lU2l6ZSgpKTsK
LSAgICAgIH0KLSAgICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1cmUoKTsK
LSAgICAgIGNhcHR1cmVySW5zdGFuY2Uuc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVy
ZUZyYW1lKCk7Ci0gICAgfQotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHJldHVybkJ1ZmZlckxhdGUoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5j
ZSA9IGNyZWF0ZUNhcHR1cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgc3RhcnRDYXB0
dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5v
YnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotCi0gICAgY2FwdHVyZXJJbnN0YW5j
ZS5vYnNlcnZlci53YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKTsKLSAgICBjYXB0dXJlckluc3Rh
bmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgTGlzdDxMb25nPiBsaXN0T2Z0aW1lc3Rh
bXBzID0gY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5nZXRDb3B5QW5kUmVzZXRMaXN0T2Z0aW1l
U3RhbXBzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0T2Z0aW1lc3RhbXBzLnNpemUoKSA+PSAxKTsK
LQotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlLCAxKTsKLSAgICBjYXB0dXJlcklu
c3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKTsKLSAgICBjYXB0dXJlcklu
c3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotCi0gICAg
Y2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKTsKLSAg
ICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0KLSAgICBsaXN0T2Z0
aW1lc3RhbXBzID0gY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5nZXRDb3B5QW5kUmVzZXRMaXN0
T2Z0aW1lU3RhbXBzKCk7Ci0gICAgYXNzZXJ0VHJ1ZShsaXN0T2Z0aW1lc3RhbXBzLnNpemUoKSA+
PSAxKTsKLQotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNl
ID0gY3JlYXRlQ2FwdHVyZXIoZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgZmluYWwgVmlk
ZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3Jl
YXRlVmlkZW9UcmFja1dpdGhGYWtlQXN5bmNSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNhcHR1
cmVyKTsKLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUgZnJhbWUgdGhhdCBoYXMgbm90IGJl
ZW4gcmV0dXJuZWQuCi0gICAgYXNzZXJ0RmFsc2UodmlkZW9UcmFja1dpdGhSZW5kZXJlci5mYWtl
QXN5bmNSZW5kZXJlci53YWl0Rm9yUGVuZGluZ0ZyYW1lcygpLmlzRW1wdHkoKSk7Ci0KLSAgICBj
YXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0KLSAgICAvLyBEaXNwb3Nl
IGV2ZXJ5dGhpbmcuCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICAg
IGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIpOwot
Ci0gICAgLy8gUmV0dXJuIHRoZSBmcmFtZShzKSwgb24gYSBkaWZmZXJlbnQgdGhyZWFkIG91dCBv
ZiBzcGl0ZS4KLSAgICBmaW5hbCBMaXN0PEk0MjBGcmFtZT4gcGVuZGluZ0ZyYW1lcyA9Ci0gICAg
ICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVyZXIud2FpdEZvclBlbmRp
bmdGcmFtZXMoKTsKLSAgICBmaW5hbCBUaHJlYWQgcmV0dXJuVGhyZWFkID0gbmV3IFRocmVhZChu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgZm9yIChJNDIwRnJhbWUgZnJhbWUgOiBwZW5kaW5nRnJhbWVzKSB7Ci0gICAg
ICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gICAgcmV0dXJuVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJuVGhy
ZWFkLmpvaW4oKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNhbWVyYUZyZWV6ZWRFdmVudE9uQnVm
ZmVyU3RhcnZhdGlvbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwg
Q2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIodHJ1ZSAv
KiBpbml0aWFsaXplICovKTsKLSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSk7Ci0g
ICAgLy8gTWFrZSBzdXJlIGNhbWVyYSBpcyBzdGFydGVkLgotICAgIGFzc2VydFRydWUoY2FwdHVy
ZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgIC8vIFNp
bmNlIHdlIGRvbid0IHJldHVybiB0aGUgYnVmZmVyLCB3ZSBzaG91bGQgZ2V0IGEgc3RhcnZhdGlv
biBtZXNzYWdlIGlmIHdlIGFyZQotICAgIC8vIGNhcHR1cmluZyB0byBhIHRleHR1cmUuCi0gICAg
YXNzZXJ0RXF1YWxzKCJDYW1lcmEgZmFpbHVyZS4gQ2xpZW50IG11c3QgcmV0dXJuIHZpZGVvIGJ1
ZmZlcnMuIiwKLSAgICAgICAgY2FwdHVyZXJJbnN0YW5jZS5jYW1lcmFFdmVudHMud2FpdEZvckNh
bWVyYUZyZWV6ZWQoKSk7Ci0KLSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0
dXJlKCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgc2NhbGVDYW1lcmFPdXRwdXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0
ZUNhcHR1cmVyKGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVvVHJhY2tX
aXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAgYXNzZXJ0
VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0
RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0KLSAgICBmaW5hbCBpbnQgc3RhcnRXaWR0aCA9IHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3MuZnJhbWVXaWR0aCgpOwotICAgIGZp
bmFsIGludCBzdGFydEhlaWdodCA9IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxs
YmFja3MuZnJhbWVIZWlnaHQoKTsKLSAgICBmaW5hbCBpbnQgZnJhbWVSYXRlID0gMzA7Ci0gICAg
ZmluYWwgaW50IHNjYWxlZFdpZHRoID0gc3RhcnRXaWR0aCAvIDI7Ci0gICAgZmluYWwgaW50IHNj
YWxlZEhlaWdodCA9IHN0YXJ0SGVpZ2h0IC8gMjsKLQotICAgIC8vIFJlcXVlc3QgdGhlIGNhcHR1
cmVkIGZyYW1lcyB0byBiZSBzY2FsZWQuCi0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5zb3Vy
Y2UuYWRhcHRPdXRwdXRGb3JtYXQoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCwgZnJhbWVSYXRl
KTsKLQotICAgIGJvb2xlYW4gZ290RXhwZWN0ZWRSZXNvbHV0aW9uID0gZmFsc2U7Ci0gICAgaW50
IG51bWJlck9mSW5zcGVjdGVkRnJhbWVzID0gMDsKLQotICAgIGRvIHsKLSAgICAgIHZpZGVvVHJh
Y2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVy
KCk7Ci0gICAgICArK251bWJlck9mSW5zcGVjdGVkRnJhbWVzOwotCi0gICAgICBnb3RFeHBlY3Rl
ZFJlc29sdXRpb24gPSAodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy5m
cmFtZVdpZHRoKCkgPT0gc2NhbGVkV2lkdGgKLSAgICAgICAgICAmJiB2aWRlb1RyYWNrV2l0aFJl
bmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lSGVpZ2h0KCkgPT0gc2NhbGVkSGVpZ2h0KTsK
LSAgICB9IHdoaWxlICghZ290RXhwZWN0ZWRSZXNvbHV0aW9uICYmIG51bWJlck9mSW5zcGVjdGVk
RnJhbWVzIDwgMzApOwotCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwot
ICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIp
OwotCi0gICAgYXNzZXJ0VHJ1ZShnb3RFeHBlY3RlZFJlc29sdXRpb24pOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIFN0cmluZyBjYW1lcmFOYW1lID0gdGVzdE9iamVjdEZh
Y3RvcnkuZ2V0TmFtZU9mQmFja0ZhY2luZ0RldmljZSgpOwotICAgIC8vIEF0IHRoaXMgcG9pbnQg
Y2FtZXJhIGlzIG5vdCBhY3R1YWxseSBvcGVuZWQuCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5j
ZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIoY2FtZXJhTmFtZSwgdHJ1ZSAvKiBp
bml0aWFsaXplICovKTsKLQotICAgIGZpbmFsIE9iamVjdCBjb21wZXRpbmdDYW1lcmEgPSB0ZXN0
T2JqZWN0RmFjdG9yeS5yYXdPcGVuQ2FtZXJhKGNhbWVyYU5hbWUpOwotCi0gICAgc3RhcnRDYXB0
dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotCi0gICAgaWYgKGFuZHJvaWQub3MuQnVpbGQuVkVSU0lP
Ti5TREtfSU5UID4gYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QX01SMSkg
ewotICAgICAgLy8gVGhlIGZpcnN0IG9wZW5lZCBjYW1lcmEgY2xpZW50IHdpbGwgYmUgZXZpY3Rl
ZC4KLSAgICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2Fw
dHVyZXJUb1N0YXJ0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBhc3NlcnRGYWxzZShjYXB0dXJl
ckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAgfQotCi0g
ICAgdGVzdE9iamVjdEZhY3RvcnkucmF3Q2xvc2VDYW1lcmEoY29tcGV0aW5nQ2FtZXJhKTsKLSAg
ICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBzdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdHJpbmcgY2FtZXJhTmFtZSA9IHRlc3RP
YmplY3RGYWN0b3J5LmdldE5hbWVPZkJhY2tGYWNpbmdEZXZpY2UoKTsKLSAgICAvLyBBdCB0aGlz
IHBvaW50IGNhbWVyYSBpcyBub3QgYWN0dWFsbHkgb3BlbmVkLgotICAgIGZpbmFsIENhcHR1cmVy
SW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGNhbWVyYU5hbWUsIGZh
bHNlIC8qIGluaXRpYWxpemUgKi8pOwotCi0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVD
YW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmE6IE9wZW5pbmcgY29tcGV0aW5nIGNhbWVy
YS4iKTsKLSAgICBmaW5hbCBPYmplY3QgY29tcGV0aW5nQ2FtZXJhID0gdGVzdE9iamVjdEZhY3Rv
cnkucmF3T3BlbkNhbWVyYShjYW1lcmFOYW1lKTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJzdGFy
dFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBPcGVuaW5nIGNhbWVyYS4i
KTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKGNhcHR1cmVySW5zdGFu
Y2UuY2FwdHVyZXIpOwotICAgIHdhaXRVbnRpbElkbGUoY2FwdHVyZXJJbnN0YW5jZSk7Ci0KLSAg
ICBMb2dnaW5nLmQoVEFHLCAic3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNh
bWVyYTogQ2xvc2luZyBjb21wZXRpbmcgY2FtZXJhLiIpOwotICAgIHRlc3RPYmplY3RGYWN0b3J5
LnJhd0Nsb3NlQ2FtZXJhKGNvbXBldGluZ0NhbWVyYSk7Ci0KLSAgICAvLyBNYWtlIHN1cmUgY2Ft
ZXJhIGlzIHN0YXJ0ZWQgYW5kIGZpcnN0IGZyYW1lIGlzIHJlY2VpdmVkIGFuZCB0aGVuIHN0b3Ag
aXQuCi0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5k
Q2xvc2VDYW1lcmE6IFdhaXRpbmcgZm9yIGNhcHR1cmUgdG8gc3RhcnQuIik7Ci0gICAgdmlkZW9U
cmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5k
ZXIoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5B
bmRDbG9zZUNhbWVyYTogU3RvcHBpbmcgY2FwdHVyZS4iKTsKLSAgICBkaXNwb3NlQ2FwdHVyZXIo
Y2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdGFydFdoaWxlQ2FtZXJh
SXNBbHJlYWR5T3BlbkFuZFN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGZpbmFsIFN0cmluZyBjYW1lcmFOYW1lID0gdGVzdE9iamVjdEZhY3RvcnkuZ2V0TmFtZU9mQmFj
a0ZhY2luZ0RldmljZSgpOwotICAgIC8vIEF0IHRoaXMgcG9pbnQgY2FtZXJhIGlzIG5vdCBhY3R1
YWxseSBvcGVuZWQuCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNl
ID0gY3JlYXRlQ2FwdHVyZXIoY2FtZXJhTmFtZSwgdHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLQot
ICAgIGZpbmFsIE9iamVjdCBjb21wZXRpbmdDYW1lcmEgPSB0ZXN0T2JqZWN0RmFjdG9yeS5yYXdP
cGVuQ2FtZXJhKGNhbWVyYU5hbWUpOwotCi0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFu
Y2UpOwotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLQotICAgIHRlc3RP
YmplY3RGYWN0b3J5LnJhd0Nsb3NlQ2FtZXJhKGNvbXBldGluZ0NhbWVyYSk7Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
dGVzdHMvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0
cy9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0
ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9FZ2xSZW5kZXJlclRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDI2NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLkJpdG1hcDsKLWltcG9ydCBhbmRyb2lkLmdyYXBo
aWNzLlN1cmZhY2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMxMUV4dDsKLWlt
cG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1l
bnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3Rh
dGlvbi5TbWFsbFRlc3Q7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51
dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuVGltZVVuaXQ7Ci0KLS8vIEVtcHR5QWN0aXZpdHkgaXMgbmVlZGVkIGZvciB0aGUgc3VyZmFj
ZS4KLXB1YmxpYyBjbGFzcyBFZ2xSZW5kZXJlclRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25U
ZXN0Q2FzZSB7Ci0gIGZpbmFsIHN0YXRpYyBTdHJpbmcgVEFHID0gIkVnbFJlbmRlcmVyVGVzdCI7
Ci0gIGZpbmFsIHN0YXRpYyBpbnQgUkVOREVSX1dBSVRfTVMgPSAxMDAwOwotICBmaW5hbCBzdGF0
aWMgaW50IFNVUkZBQ0VfV0FJVF9NUyA9IDEwMDA7Ci0gIGZpbmFsIHN0YXRpYyBpbnQgVEVTVF9G
UkFNRV9XSURUSCA9IDQ7Ci0gIGZpbmFsIHN0YXRpYyBpbnQgVEVTVF9GUkFNRV9IRUlHSFQgPSA0
OwotICAvLyBTb21lIGFyYml0cmFyeSBmcmFtZXMuCi0gIGZpbmFsIHN0YXRpYyBCeXRlQnVmZmVy
W11bXSBURVNUX0ZSQU1FUyA9IHsKLSAgICAgIHsKLSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAo
bmV3IGJ5dGVbXSB7Ci0gICAgICAgICAgICAgIDExLCAtMTIsIDEzLCAtMTQsIC0xNSwgMTYsIC0x
NywgMTgsIDE5LCAtMTEwLCAxMTEsIC0xMTIsIC0xMTMsIDExNCwgLTExNSwgMTE2fSksCi0gICAg
ICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gezExNywgMTE4LCAxMTksIDEyMH0pLAot
ICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMjEsIDEyMiwgMTIzLCAxMjR9
KSwKLSAgICAgIH0sCi0gICAgICB7Ci0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRl
W10gey0xMSwgLTEyLCAtMTMsIC0xNCwgLTE1LCAtMTYsIC0xNywgLTE4LCAtMTksIC0xMTAsIC0x
MTEsIC0xMTIsCi0gICAgICAgICAgICAgIC0xMTMsIC0xMTQsIC0xMTUsIC0xMTZ9KSwKLSAgICAg
ICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7LTEyMSwgLTEyMiwgLTEyMywgLTEyNH0p
LAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHstMTE3LCAtMTE4LCAtMTE5
LCAtMTIwfSksCi0gICAgICB9LAotICAgICAgewotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChu
ZXcgYnl0ZVtdIHstMTEsIC0xMiwgLTEzLCAtMTQsIC0xNSwgLTE2LCAtMTcsIC0xOCwgLTE5LCAt
MTEwLCAtMTExLCAtMTEyLAotICAgICAgICAgICAgICAtMTEzLCAtMTE0LCAtMTE1LCAtMTE2fSks
Ci0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gezExNywgMTE4LCAxMTksIDEy
MH0pLAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMjEsIDEyMiwgMTIz
LCAxMjR9KSwKLSAgICAgIH0sCi0gIH07Ci0KLSAgcHJpdmF0ZSBjbGFzcyBUZXN0RnJhbWVMaXN0
ZW5lciBpbXBsZW1lbnRzIEVnbFJlbmRlcmVyLkZyYW1lTGlzdGVuZXIgewotICAgIGZpbmFsIHBy
aXZhdGUgQXJyYXlMaXN0PEJpdG1hcD4gYml0bWFwcyA9IG5ldyBBcnJheUxpc3Q8Qml0bWFwPigp
OwotICAgIGJvb2xlYW4gYml0bWFwUmVjZWl2ZWQ7Ci0gICAgQml0bWFwIHN0b3JlZEJpdG1hcDsK
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkZyYW1lKEJp
dG1hcCBiaXRtYXApIHsKLSAgICAgIGlmIChiaXRtYXBSZWNlaXZlZCkgewotICAgICAgICBmYWls
KCJVbmV4cGVjdGVkIGJpdG1hcCB3YXMgcmVjZWl2ZWQuIik7Ci0gICAgICB9Ci0KLSAgICAgIGJp
dG1hcFJlY2VpdmVkID0gdHJ1ZTsKLSAgICAgIHN0b3JlZEJpdG1hcCA9IGJpdG1hcDsKLSAgICAg
IG5vdGlmeSgpOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB3YWl0
Rm9yQml0bWFwKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgICBpZiAoIWJpdG1hcFJlY2VpdmVkKSB7Ci0gICAgICAgIHdhaXQodGltZW91dE1zKTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBiaXRtYXBSZWNlaXZlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
c3luY2hyb25pemVkIEJpdG1hcCByZXNldEFuZEdldEJpdG1hcCgpIHsKLSAgICAgIGJpdG1hcFJl
Y2VpdmVkID0gZmFsc2U7Ci0gICAgICByZXR1cm4gc3RvcmVkQml0bWFwOwotICAgIH0KLSAgfQot
Ci0gIGZpbmFsIFRlc3RGcmFtZUxpc3RlbmVyIHRlc3RGcmFtZUxpc3RlbmVyID0gbmV3IFRlc3RG
cmFtZUxpc3RlbmVyKCk7Ci0KLSAgRWdsUmVuZGVyZXIgZWdsUmVuZGVyZXI7Ci0gIENvdW50RG93
bkxhdGNoIHN1cmZhY2VSZWFkeUxhdGNoID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICBpbnQg
b2VzVGV4dHVyZUlkOwotICBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZTsKLQotICBAT3Zl
cnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKGdldEluc3RydW1l
bnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSwKLSAgICAgICAgdHJ1ZSAvKiBpbml0aWFsaXpl
QXVkaW8gKi8sIHRydWUgLyogaW5pdGlhbGl6ZVZpZGVvICovLCB0cnVlIC8qIHZpZGVvSHdBY2Nl
bGVyYXRpb24gKi8pOwotICAgIGVnbFJlbmRlcmVyID0gbmV3IEVnbFJlbmRlcmVyKCJUZXN0UmVu
ZGVyZXI6ICIpOwotICAgIGVnbFJlbmRlcmVyLmluaXQobnVsbCAvKiBzaGFyZWRDb250ZXh0ICov
LCBFZ2xCYXNlLkNPTkZJR19SR0JBLCBuZXcgR2xSZWN0RHJhd2VyKCkpOwotICAgIG9lc1RleHR1
cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJO
QUxfT0VTKTsKLSAgICBzdXJmYWNlVGV4dHVyZSA9IG5ldyBTdXJmYWNlVGV4dHVyZShvZXNUZXh0
dXJlSWQpOwotICAgIHN1cmZhY2VUZXh0dXJlLnNldERlZmF1bHRCdWZmZXJTaXplKDEgLyogd2lk
dGggKi8sIDEgLyogaGVpZ2h0ICovKTsKLSAgICBlZ2xSZW5kZXJlci5jcmVhdGVFZ2xTdXJmYWNl
KHN1cmZhY2VUZXh0dXJlKTsKLSAgICBlZ2xSZW5kZXJlci5zdXJmYWNlU2l6ZUNoYW5nZWQoMSAv
KiB3aWR0aCAqLywgMSAvKiBoZWlnaHQgKi8pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIHRlYXJEb3duKCkgewotICAgIHN1cmZhY2VUZXh0dXJlLnJlbGVhc2UoKTsKLSAgICBH
TEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxIC8qIG4gKi8sIG5ldyBpbnRbXSB7b2VzVGV4dHVyZUlk
fSwgMCAvKiBvZmZzZXQgKi8pOwotICAgIGVnbFJlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotCi0g
IC8qKiBDaGVja3MgdGhlIGJpdG1hcCBpcyBub3QgbnVsbCBhbmQgdGhlIGNvcnJlY3Qgc2l6ZS4g
Ki8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVja0JpdG1hcChCaXRtYXAgYml0bWFwLCBmbG9h
dCBzY2FsZSkgewotICAgIGFzc2VydE5vdE51bGwoYml0bWFwKTsKLSAgICBhc3NlcnRFcXVhbHMo
KGludCkgKFRFU1RfRlJBTUVfV0lEVEggKiBzY2FsZSksIGJpdG1hcC5nZXRXaWR0aCgpKTsKLSAg
ICBhc3NlcnRFcXVhbHMoKGludCkgKFRFU1RfRlJBTUVfSEVJR0hUICogc2NhbGUpLCBiaXRtYXAu
Z2V0SGVpZ2h0KCkpOwotICB9Ci0KLSAgLyoqCi0gICAqIERvZXMgbGluZWFyIHNhbXBsaW5nIG9u
IFUvViBwbGFuZSBvZiB0ZXN0IGRhdGEuCi0gICAqCi0gICAqIEBwYXJhbSBkYXRhIFBsYW5lIGRh
dGEgdG8gYmUgc2FtcGxlZCBmcm9tLgotICAgKiBAcGFyYW0gcGxhbmVXaWR0aCBXaWR0aCBvZiB0
aGUgcGxhbmUgZGF0YS4gVGhpcyBpcyBhbHNvIGFzc3VtZWQgdG8gYmUgdGhlIHN0cmlkZS4KLSAg
ICogQHBhcmFtIHBsYW5lSGVpZ2h0IEhlaWdodCBvZiB0aGUgcGxhbmUgZGF0YS4KLSAgICogQHBh
cmFtIHggWC1jb29yZGluYXRlIGluIHJhbmdlIFswLCAxXS4KLSAgICogQHBhcmFtIHkgWS1jb29y
ZGluYXRlIGluIHJhbmdlIFswLCAxXS4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZsb2F0IGxp
bmVhclNhbXBsZSgKLSAgICAgIEJ5dGVCdWZmZXIgcGxhbmUsIGludCBwbGFuZVdpZHRoLCBpbnQg
cGxhbmVIZWlnaHQsIGZsb2F0IHgsIGZsb2F0IHkpIHsKLSAgICBmaW5hbCBpbnQgc3RyaWRlID0g
cGxhbmVXaWR0aDsKLQotICAgIGZpbmFsIGZsb2F0IGNvb3JkWCA9IHggKiBwbGFuZVdpZHRoOwot
ICAgIGZpbmFsIGZsb2F0IGNvb3JkWSA9IHkgKiBwbGFuZUhlaWdodDsKLQotICAgIGludCBsb3dJ
bmRleFggPSAoaW50KSBNYXRoLmZsb29yKGNvb3JkWCAtIDAuNWYpOwotICAgIGludCBsb3dJbmRl
eFkgPSAoaW50KSBNYXRoLmZsb29yKGNvb3JkWSAtIDAuNWYpOwotICAgIGludCBoaWdoSW5kZXhY
ID0gbG93SW5kZXhYICsgMTsKLSAgICBpbnQgaGlnaEluZGV4WSA9IGxvd0luZGV4WSArIDE7Ci0K
LSAgICBmaW5hbCBmbG9hdCBoaWdoV2VpZ2h0WCA9IGNvb3JkWCAtIGxvd0luZGV4WCAtIDAuNWY7
Ci0gICAgZmluYWwgZmxvYXQgaGlnaFdlaWdodFkgPSBjb29yZFkgLSBsb3dJbmRleFkgLSAwLjVm
OwotICAgIGZpbmFsIGZsb2F0IGxvd1dlaWdodFggPSAxZiAtIGhpZ2hXZWlnaHRYOwotICAgIGZp
bmFsIGZsb2F0IGxvd1dlaWdodFkgPSAxZiAtIGhpZ2hXZWlnaHRZOwotCi0gICAgLy8gQ2xhbXAg
b24gdGhlIGVkZ2VzLgotICAgIGxvd0luZGV4WCA9IE1hdGgubWF4KDAsIGxvd0luZGV4WCk7Ci0g
ICAgbG93SW5kZXhZID0gTWF0aC5tYXgoMCwgbG93SW5kZXhZKTsKLSAgICBoaWdoSW5kZXhYID0g
TWF0aC5taW4ocGxhbmVXaWR0aCAtIDEsIGhpZ2hJbmRleFgpOwotICAgIGhpZ2hJbmRleFkgPSBN
YXRoLm1pbihwbGFuZUhlaWdodCAtIDEsIGhpZ2hJbmRleFkpOwotCi0gICAgZmxvYXQgbG93WVZh
bHVlID0gKHBsYW5lLmdldChsb3dJbmRleFkgKiBzdHJpZGUgKyBsb3dJbmRleFgpICYgMHhGRikg
KiBsb3dXZWlnaHRYCi0gICAgICAgICsgKHBsYW5lLmdldChsb3dJbmRleFkgKiBzdHJpZGUgKyBo
aWdoSW5kZXhYKSAmIDB4RkYpICogaGlnaFdlaWdodFg7Ci0gICAgZmxvYXQgaGlnaFlWYWx1ZSA9
IChwbGFuZS5nZXQoaGlnaEluZGV4WSAqIHN0cmlkZSArIGxvd0luZGV4WCkgJiAweEZGKSAqIGxv
d1dlaWdodFgKLSAgICAgICAgKyAocGxhbmUuZ2V0KGhpZ2hJbmRleFkgKiBzdHJpZGUgKyBoaWdo
SW5kZXhYKSAmIDB4RkYpICogaGlnaFdlaWdodFg7Ci0KLSAgICByZXR1cm4gKGxvd1dlaWdodFkg
KiBsb3dZVmFsdWUgKyBoaWdoV2VpZ2h0WSAqIGhpZ2hZVmFsdWUpIC8gMjU1ZjsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIGJ5dGUgc2F0dXJhdGVkRmxvYXRUb0J5dGUoZmxvYXQgYykgewotICAg
IHJldHVybiAoYnl0ZSkgTWF0aC5yb3VuZCgyNTVmICogTWF0aC5tYXgoMGYsIE1hdGgubWluKDFm
LCBjKSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbnZlcnRzIHRlc3QgZGF0YSBZVVYgZnJhbWUg
dG8gZXhwZWN0ZWQgUkdCQSBmcmFtZS4gVHJpZXMgdG8gbWF0Y2ggdGhlIGJlaGF2aW9yIG9mIE9w
ZW5HTAotICAgKiBZVVYgZHJhd2VyIHNoYWRlci4gRG9lcyBsaW5lYXIgc2FtcGxpbmcgb24gdGhl
IFUtIGFuZCBWLXBsYW5lcy4KLSAgICoKLSAgICogQHBhcmFtIHl1dkZyYW1lIEFycmF5IG9mIHNp
emUgMyBjb250YWluaW5nIFktLCBVLSwgVi1wbGFuZXMgZm9yIGltYWdlIG9mIHNpemUKLSAgICog
ICAgICAgICAgICAgICAgIChURVNUX0ZSQU1FX1dJRFRILCBURVNUX0ZSQU1FX0hFSUdIVCkuIFUt
IGFuZCBWLXBsYW5lcyBzaG91bGQgYmUgaGFsZiB0aGUgc2l6ZQotICAgKiAgICAgICAgICAgICAg
ICAgb2YgdGhlIFktcGxhbmUuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBieXRlW10gY29udmVy
dFlVVkZyYW1lVG9SR0JBKEJ5dGVCdWZmZXJbXSB5dXZGcmFtZSkgewotICAgIGZpbmFsIGJ5dGVb
XSBhcmdiRnJhbWUgPSBuZXcgYnl0ZVtURVNUX0ZSQU1FX1dJRFRIICogVEVTVF9GUkFNRV9IRUlH
SFQgKiA0XTsKLSAgICBmaW5hbCBpbnQgYXJnYlN0cmlkZSA9IFRFU1RfRlJBTUVfV0lEVEggKiA0
OwotICAgIGZpbmFsIGludCB5U3RyaWRlID0gVEVTVF9GUkFNRV9XSURUSDsKLQotICAgIGZpbmFs
IGludCB2U3RyaWRlID0gVEVTVF9GUkFNRV9XSURUSCAvIDI7Ci0KLSAgICBmb3IgKGludCB5ID0g
MDsgeSA8IFRFU1RfRlJBTUVfSEVJR0hUOyB5KyspIHsKLSAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgVEVTVF9GUkFNRV9XSURUSDsgeCsrKSB7Ci0gICAgICAgIGZpbmFsIGludCB4MiA9IHggLyAy
OwotICAgICAgICBmaW5hbCBpbnQgeTIgPSB5IC8gMjsKLQotICAgICAgICBmaW5hbCBmbG9hdCB5
QyA9ICh5dXZGcmFtZVswXS5nZXQoeSAqIHlTdHJpZGUgKyB4KSAmIDB4RkYpIC8gMjU1ZjsKLSAg
ICAgICAgZmluYWwgZmxvYXQgdUMgPSBsaW5lYXJTYW1wbGUoeXV2RnJhbWVbMV0sIFRFU1RfRlJB
TUVfV0lEVEggLyAyLCBURVNUX0ZSQU1FX0hFSUdIVCAvIDIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh4ICsgMC41ZikgLyBURVNUX0ZSQU1FX1dJRFRILCAoeSArIDAuNWYpIC8gVEVT
VF9GUkFNRV9IRUlHSFQpCi0gICAgICAgICAgICAtIDAuNWY7Ci0gICAgICAgIGZpbmFsIGZsb2F0
IHZDID0gbGluZWFyU2FtcGxlKHl1dkZyYW1lWzJdLCBURVNUX0ZSQU1FX1dJRFRIIC8gMiwgVEVT
VF9GUkFNRV9IRUlHSFQgLyAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeCArIDAu
NWYpIC8gVEVTVF9GUkFNRV9XSURUSCwgKHkgKyAwLjVmKSAvIFRFU1RfRlJBTUVfSEVJR0hUKQot
ICAgICAgICAgICAgLSAwLjVmOwotICAgICAgICBmaW5hbCBmbG9hdCByQyA9IHlDICsgMS40MDNm
ICogdkM7Ci0gICAgICAgIGZpbmFsIGZsb2F0IGdDID0geUMgLSAwLjM0NGYgKiB1QyAtIDAuNzE0
ZiAqIHZDOwotICAgICAgICBmaW5hbCBmbG9hdCBiQyA9IHlDICsgMS43N2YgKiB1QzsKLQotICAg
ICAgICBhcmdiRnJhbWVbeSAqIGFyZ2JTdHJpZGUgKyB4ICogNCArIDBdID0gc2F0dXJhdGVkRmxv
YXRUb0J5dGUockMpOwotICAgICAgICBhcmdiRnJhbWVbeSAqIGFyZ2JTdHJpZGUgKyB4ICogNCAr
IDFdID0gc2F0dXJhdGVkRmxvYXRUb0J5dGUoZ0MpOwotICAgICAgICBhcmdiRnJhbWVbeSAqIGFy
Z2JTdHJpZGUgKyB4ICogNCArIDJdID0gc2F0dXJhdGVkRmxvYXRUb0J5dGUoYkMpOwotICAgICAg
ICBhcmdiRnJhbWVbeSAqIGFyZ2JTdHJpZGUgKyB4ICogNCArIDNdID0gKGJ5dGUpIDI1NTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYXJnYkZyYW1lOwotICB9Ci0KLSAgLyoqIENoZWNr
cyB0aGF0IHRoZSBiaXRtYXAgY29udGVudCBtYXRjaGVzIHRoZSB0ZXN0IGZyYW1lIHdpdGggdGhl
IGdpdmVuIGluZGV4LiAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGNoZWNrQml0bWFwQ29udGVu
dChCaXRtYXAgYml0bWFwLCBpbnQgZnJhbWUpIHsKLSAgICBjaGVja0JpdG1hcChiaXRtYXAsIDFm
KTsKLQotICAgIGJ5dGVbXSBleHBlY3RlZFJHQkEgPSBjb252ZXJ0WVVWRnJhbWVUb1JHQkEoVEVT
VF9GUkFNRVNbZnJhbWVdKTsKLSAgICBCeXRlQnVmZmVyIGJpdG1hcEJ1ZmZlciA9IEJ5dGVCdWZm
ZXIuYWxsb2NhdGVEaXJlY3QoYml0bWFwLmdldEJ5dGVDb3VudCgpKTsKLSAgICBiaXRtYXAuY29w
eVBpeGVsc1RvQnVmZmVyKGJpdG1hcEJ1ZmZlcik7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGV4cGVjdGVkUkdCQS5sZW5ndGg7IGkrKykgewotICAgICAgaW50IGV4cGVjdGVkID0gZXhwZWN0
ZWRSR0JBW2ldICYgMHhGRjsKLSAgICAgIGludCB2YWx1ZSA9IGJpdG1hcEJ1ZmZlci5nZXQoaSkg
JiAweEZGOwotICAgICAgLy8gRHVlIHRvIHVua25vd24gY29udmVyc2lvbiBkaWZmZXJlbmNlcyBj
aGVjayB2YWx1ZSBtYXRjaGVzICstMS4KLSAgICAgIGlmIChNYXRoLmFicyh2YWx1ZSAtIGV4cGVj
dGVkKSA+IDEpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkV4cGVjdGVkIGJpdG1hcCBjb250
ZW50OiAiICsgQXJyYXlzLnRvU3RyaW5nKGV4cGVjdGVkUkdCQSkpOwotICAgICAgICBMb2dnaW5n
LmQoVEFHLCAiQml0bWFwIGNvbnRlbnQ6ICIgKyBBcnJheXMudG9TdHJpbmcoYml0bWFwQnVmZmVy
LmFycmF5KCkpKTsKLSAgICAgICAgZmFpbCgiRnJhbWUgZG9lc24ndCBtYXRjaCBvcmlnaW5hbCBm
cmFtZSBvbiBieXRlICIgKyBpICsgIi4gRXhwZWN0ZWQ6ICIgKyBleHBlY3RlZAotICAgICAgICAg
ICAgKyAiIFJlc3VsdDogIiArIHZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiog
VGVsbHMgZWdsUmVuZGVyZXIgdG8gcmVuZGVyIHRlc3QgZnJhbWUgd2l0aCBnaXZlbiBpbmRleC4g
Ki8KLSAgcHJpdmF0ZSB2b2lkIGZlZWRGcmFtZShpbnQgaSkgewotICAgIGVnbFJlbmRlcmVyLnJl
bmRlckZyYW1lKG5ldyBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZShURVNUX0ZSQU1FX1dJRFRILCBU
RVNUX0ZSQU1FX0hFSUdIVCwgMCwKLSAgICAgICAgbmV3IGludFtdIHtURVNUX0ZSQU1FX1dJRFRI
LCBURVNUX0ZSQU1FX1dJRFRIIC8gMiwgVEVTVF9GUkFNRV9XSURUSCAvIDJ9LCBURVNUX0ZSQU1F
U1tpXSwKLSAgICAgICAgMCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0QWRkRnJhbWVMaXN0ZW5lcigpIHRocm93cyBFeGNlcHRpb24gewotICAgIGVnbFJlbmRlcmVy
LmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVuZXIsIDBmIC8qIHNjYWxlRmFjdG9yICov
KTsKLSAgICBmZWVkRnJhbWUoMCk7Ci0gICAgYXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53
YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgYXNzZXJ0TnVsbCh0ZXN0RnJhbWVM
aXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpKTsKLSAgICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxp
c3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCAwZiAvKiBzY2FsZUZhY3RvciAqLyk7Ci0gICAgZmVl
ZEZyYW1lKDEpOwotICAgIGFzc2VydFRydWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1h
cChSRU5ERVJfV0FJVF9NUykpOwotICAgIGFzc2VydE51bGwodGVzdEZyYW1lTGlzdGVuZXIucmVz
ZXRBbmRHZXRCaXRtYXAoKSk7Ci0gICAgZmVlZEZyYW1lKDIpOwotICAgIC8vIENoZWNrIHdlIGdl
dCBubyBtb3JlIGJpdG1hcHMgdGhhbiB0d28uCi0gICAgYXNzZXJ0RmFsc2UodGVzdEZyYW1lTGlz
dGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICB9Ci0KLSAgQFNtYWxsVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkRnJhbWVMaXN0ZW5lckJpdG1hcCgpIHRocm93cyBFeGNl
cHRpb24gewotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVu
ZXIsIDFmIC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJhbWUoMCk7Ci0gICAgYXNzZXJ0
VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0g
ICAgY2hlY2tCaXRtYXBDb250ZW50KHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0bWFw
KCksIDApOwotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVu
ZXIsIDFmIC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJhbWUoMSk7Ci0gICAgYXNzZXJ0
VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0g
ICAgY2hlY2tCaXRtYXBDb250ZW50KHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0bWFw
KCksIDEpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0QWRkRnJhbWVM
aXN0ZW5lckJpdG1hcFNjYWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIGZsb2F0IHNjYWxlID0gaSAqIDAuNWYgKyAwLjVmOwot
ICAgICAgZWdsUmVuZGVyZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0RnJhbWVMaXN0ZW5lciwgc2Nh
bGUpOwotICAgICAgZmVlZEZyYW1lKGkpOwotICAgICAgYXNzZXJ0VHJ1ZSh0ZXN0RnJhbWVMaXN0
ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0gICAgICBjaGVja0JpdG1hcCh0
ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpLCBzY2FsZSk7Ci0gICAgfQotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0dsUmVjdERyYXdlclRlc3QuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0dsUmVjdERyYXdlclRlc3QuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBp
L2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0LmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyOTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBv
cnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0eVRl
c3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRp
dW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFs
bFRlc3Q7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5S
YW5kb207Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBHbFJlY3REcmF3ZXJUZXN0IGV4dGVuZHMgQWN0
aXZpdHlUZXN0Q2FzZSB7Ci0gIC8vIFJlc29sdXRpb24gb2YgdGhlIHRlc3QgaW1hZ2UuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBXSURUSCA9IDE2OwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgSEVJR0hUID0gMTY7Ci0gIC8vIFNlZWQgZm9yIHJhbmRvbSBwaXhlbCBjcmVhdGlvbi4K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFRUQgPSA0MjsKLSAgLy8gV2hlbiBjb21wYXJp
bmcgcGl4ZWxzLCBhbGxvdyBzb21lIHNsYWNrIGZvciBmbG9hdCBhcml0aG1ldGljIGFuZCBpbnRl
Z2VyIHJvdW5kaW5nLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBmbG9hdCBNQVhfRElGRiA9IDEu
NWY7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgbm9ybWFsaXplZEJ5dGUoYnl0ZSBiKSB7Ci0g
ICAgcmV0dXJuIChiICYgMHhGRikgLyAyNTUuMGY7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBm
bG9hdCBzYXR1cmF0ZWRDb252ZXJ0KGZsb2F0IGMpIHsKLSAgICByZXR1cm4gMjU1LjBmICogTWF0
aC5tYXgoMCwgTWF0aC5taW4oYywgMSkpOwotICB9Ci0KLSAgLy8gQXNzZXJ0IFJHQiBCeXRlQnVm
ZmVycyBhcmUgcGl4ZWwgcGVyZmVjdCBpZGVudGljYWwuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQg
YXNzZXJ0RXF1YWxzKGludCB3aWR0aCwgaW50IGhlaWdodCwgQnl0ZUJ1ZmZlciBhY3R1YWwsIEJ5
dGVCdWZmZXIgZXhwZWN0ZWQpIHsKLSAgICBhY3R1YWwucmV3aW5kKCk7Ci0gICAgZXhwZWN0ZWQu
cmV3aW5kKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFjdHVhbC5yZW1haW5pbmcoKSwgd2lkdGggKiBo
ZWlnaHQgKiAzKTsKLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQucmVtYWluaW5nKCksIHdpZHRo
ICogaGVpZ2h0ICogMyk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewot
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgIGZpbmFsIGlu
dCBhY3R1YWxSID0gYWN0dWFsLmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwgaW50IGFjdHVh
bEcgPSBhY3R1YWwuZ2V0KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgYWN0dWFsQiA9IGFj
dHVhbC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBleHBlY3RlZFIgPSBleHBlY3Rl
ZC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBleHBlY3RlZEcgPSBleHBlY3RlZC5n
ZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBleHBlY3RlZEIgPSBleHBlY3RlZC5nZXQo
KSAmIDB4RkY7Ci0gICAgICAgIGlmIChhY3R1YWxSICE9IGV4cGVjdGVkUiB8fCBhY3R1YWxHICE9
IGV4cGVjdGVkRyB8fCBhY3R1YWxCICE9IGV4cGVjdGVkQikgewotICAgICAgICAgIGZhaWwoIkJ5
dGVCdWZmZXJzIG9mIHNpemUgIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIiBub3QgZXF1YWwg
YXQgcG9zaXRpb24gIgotICAgICAgICAgICAgICArICIoIiArIHggKyAiLCAiICsgeSArICIpLiBF
eHBlY3RlZCBjb2xvciAoUixHLEIpOiAiCi0gICAgICAgICAgICAgICsgIigiICsgZXhwZWN0ZWRS
ICsgIiwgIiArIGV4cGVjdGVkRyArICIsICIgKyBleHBlY3RlZEIgKyAiKSIKLSAgICAgICAgICAg
ICAgKyAiIGJ1dCB3YXM6ICIKLSAgICAgICAgICAgICAgKyAiKCIgKyBhY3R1YWxSICsgIiwgIiAr
IGFjdHVhbEcgKyAiLCAiICsgYWN0dWFsQiArICIpLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgLy8gQ29udmVydCBSR0JBIEJ5dGVCdWZmZXIgdG8gUkdCIEJ5dGVCdWZm
ZXIuCi0gIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXIgc3RyaXBBbHBoYUNoYW5uZWwoQnl0ZUJ1
ZmZlciByZ2JhQnVmZmVyKSB7Ci0gICAgcmdiYUJ1ZmZlci5yZXdpbmQoKTsKLSAgICBhc3NlcnRF
cXVhbHMocmdiYUJ1ZmZlci5yZW1haW5pbmcoKSAlIDQsIDApOwotICAgIGZpbmFsIGludCBudW1i
ZXJPZlBpeGVscyA9IHJnYmFCdWZmZXIucmVtYWluaW5nKCkgLyA0OwotICAgIGZpbmFsIEJ5dGVC
dWZmZXIgcmdiQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChudW1iZXJPZlBpeGVs
cyAqIDMpOwotICAgIHdoaWxlIChyZ2JhQnVmZmVyLmhhc1JlbWFpbmluZygpKSB7Ci0gICAgICAv
LyBDb3B5IFJHQi4KLSAgICAgIGZvciAoaW50IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgMzsgKytj
aGFubmVsKSB7Ci0gICAgICAgIHJnYkJ1ZmZlci5wdXQocmdiYUJ1ZmZlci5nZXQoKSk7Ci0gICAg
ICB9Ci0gICAgICAvLyBEcm9wIGFscGhhLgotICAgICAgcmdiYUJ1ZmZlci5nZXQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJnYkJ1ZmZlcjsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdFJnYlJlbmRlcmluZygpIHsKLSAgICAvLyBDcmVhdGUgRUdMIGJhc2Ugd2l0aCBhIHBp
eGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbEJhc2Ug
PSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhFTF9CVUZGRVIpOwotICAg
IGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2UoV0lEVEgsIEhFSUdIVCk7Ci0gICAgZWdsQmFz
ZS5tYWtlQ3VycmVudCgpOwotCi0gICAgLy8gQ3JlYXRlIFJHQiBieXRlIGJ1ZmZlciBwbGFuZSB3
aXRoIHJhbmRvbSBjb250ZW50LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiUGxhbmUgPSBCeXRl
QnVmZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRIICogSEVJR0hUICogMyk7Ci0gICAgZmluYWwgUmFu
ZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oU0VFRCk7Ci0gICAgcmFuZG9tLm5leHRCeXRlcyhyZ2JQ
bGFuZS5hcnJheSgpKTsKLQotICAgIC8vIFVwbG9hZCB0aGUgUkdCIGJ5dGUgYnVmZmVyIGRhdGEg
YXMgYSB0ZXh0dXJlLgotICAgIGZpbmFsIGludCByZ2JUZXh0dXJlID0gR2xVdGlsLmdlbmVyYXRl
VGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVy
ZShHTEVTMjAuR0xfVEVYVFVSRTApOwotICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5H
TF9URVhUVVJFXzJELCByZ2JUZXh0dXJlKTsKLSAgICBHTEVTMjAuZ2xUZXhJbWFnZTJEKEdMRVMy
MC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfUkdCLCBXSURUSCwgSEVJR0hULCAwLCBHTEVT
MjAuR0xfUkdCLAotICAgICAgICBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgcmdiUGxhbmUpOwot
ICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xUZXhJbWFnZTJEIik7Ci0KLSAgICAvLyBE
cmF3IHRoZSBSR0IgZnJhbWUgb250byB0aGUgcGl4ZWwgYnVmZmVyLgotICAgIGZpbmFsIEdsUmVj
dERyYXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdSZ2Io
cmdiVGV4dHVyZSwgUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKSwgV0lEVEgsIEhFSUdI
VCwgMCAvKiB2aWV3cG9ydFggKi8sCi0gICAgICAgIDAgLyogdmlld3BvcnRZICovLCBXSURUSCwg
SEVJR0hUKTsKLQotICAgIC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4gdGhlIHBpeGVsIGJ1ZmZl
ciBhcyBSR0JBLiBOb3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwgZS5nLiBOZXh1cyA5Lgot
ICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiYURhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0
KFdJRFRIICogSEVJR0hUICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCBXSURU
SCwgSEVJR0hULCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYmFE
YXRhKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIpOwotCi0g
ICAgLy8gQXNzZXJ0IHJlbmRlcmVkIGltYWdlIGlzIHBpeGVsIHBlcmZlY3QgdG8gc291cmNlIFJH
Qi4KLSAgICBhc3NlcnRFcXVhbHMoV0lEVEgsIEhFSUdIVCwgc3RyaXBBbHBoYUNoYW5uZWwocmdi
YURhdGEpLCByZ2JQbGFuZSk7Ci0KLSAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgIEdMRVMyMC5n
bERlbGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7cmdiVGV4dHVyZX0sIDApOwotICAgIGVnbEJh
c2UucmVsZWFzZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0WXV2
UmVuZGVyaW5nKCkgewotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVy
IGFzIGRpc3BsYXkgb3V0cHV0LgotICAgIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRl
KG51bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5jcmVhdGVQ
YnVmZmVyU3VyZmFjZShXSURUSCwgSEVJR0hUKTsKLSAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7
Ci0KLSAgICAvLyBDcmVhdGUgWVVWIGJ5dGUgYnVmZmVyIHBsYW5lcyB3aXRoIHJhbmRvbSBjb250
ZW50LgotICAgIGZpbmFsIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclsz
XTsKLSAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShTRUVEKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgeXV2UGxhbmVzW2ldID0gQnl0ZUJ1ZmZl
ci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCk7Ci0gICAgICByYW5kb20ubmV4dEJ5dGVz
KHl1dlBsYW5lc1tpXS5hcnJheSgpKTsKLSAgICB9Ci0KLSAgICAvLyBHZW5lcmF0ZSAzIHRleHR1
cmUgaWRzIGZvciBZL1UvVi4KLSAgICBmaW5hbCBpbnQgeXV2VGV4dHVyZXNbXSA9IG5ldyBpbnRb
M107Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgIHl1dlRleHR1cmVz
W2ldID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCk7Ci0gICAg
fQotCi0gICAgLy8gVXBsb2FkIHRoZSBZVVYgYnl0ZSBidWZmZXIgZGF0YSBhcyB0ZXh0dXJlcy4K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgR0xFUzIwLmdsQWN0aXZl
VGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRTAgKyBpKTsKLSAgICAgIEdMRVMyMC5nbEJpbmRUZXh0
dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCB5dXZUZXh0dXJlc1tpXSk7Ci0gICAgICBHTEVTMjAu
Z2xUZXhJbWFnZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfTFVNSU5BTkNF
LCBXSURUSCwgSEVJR0hULCAwLAotICAgICAgICAgIEdMRVMyMC5HTF9MVU1JTkFOQ0UsIEdMRVMy
MC5HTF9VTlNJR05FRF9CWVRFLCB5dXZQbGFuZXNbaV0pOwotICAgICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJnbFRleEltYWdlMkQiKTsKLSAgICB9Ci0KLSAgICAvLyBEcmF3IHRoZSBZVVYg
ZnJhbWUgb250byB0aGUgcGl4ZWwgYnVmZmVyLgotICAgIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3
ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdZdXYoeXV2VGV4dHVyZXMs
IFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCksIFdJRFRILCBIRUlHSFQsIDAgLyogdmll
d3BvcnRYICovLAotICAgICAgICAwIC8qIHZpZXdwb3J0WSAqLywgV0lEVEgsIEhFSUdIVCk7Ci0K
LSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4g
Tm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUuZy4gTmV4dXMgOS4KLSAgICBmaW5hbCBC
eXRlQnVmZmVyIGRhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRIICogSEVJR0hU
ICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCBXSURUSCwgSEVJR0hULCBHTEVT
MjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIGRhdGEpOwotICAgIEdsVXRpbC5j
aGVja05vR0xFUzJFcnJvcigiZ2xSZWFkUGl4ZWxzIik7Ci0KLSAgICAvLyBDb21wYXJlIHRoZSBZ
VVYgZGF0YSB3aXRoIHRoZSBSR0JBIHJlc3VsdC4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IEhF
SUdIVDsgKyt5KSB7Ci0gICAgICBmb3IgKGludCB4ID0gMDsgeCA8IFdJRFRIOyArK3gpIHsKLSAg
ICAgICAgLy8gWVVWIGNvbG9yIHNwYWNlLiBZIGluIFswLCAxXSwgVVYgaW4gWy0wLjUsIDAuNV0u
IFRoZSBjb25zdGFudHMgYXJlIHRha2VuIGZyb20gdGhlIFlVVgotICAgICAgICAvLyBmcmFnbWVu
dCBzaGFkZXIgY29kZSBpbiBHbFJlY3REcmF3ZXIuCi0gICAgICAgIGZpbmFsIGZsb2F0IHlfbHVt
YSA9IG5vcm1hbGl6ZWRCeXRlKHl1dlBsYW5lc1swXS5nZXQoKSk7Ci0gICAgICAgIGZpbmFsIGZs
b2F0IHVfY2hyb21hID0gbm9ybWFsaXplZEJ5dGUoeXV2UGxhbmVzWzFdLmdldCgpKSAtIDAuNWY7
Ci0gICAgICAgIGZpbmFsIGZsb2F0IHZfY2hyb21hID0gbm9ybWFsaXplZEJ5dGUoeXV2UGxhbmVz
WzJdLmdldCgpKSAtIDAuNWY7Ci0gICAgICAgIC8vIEV4cGVjdGVkIGNvbG9yIGluIHVucm91bmRl
ZCBSR0IgWzAuMGYsIDI1NS4wZl0uCi0gICAgICAgIGZpbmFsIGZsb2F0IGV4cGVjdGVkUmVkID0g
c2F0dXJhdGVkQ29udmVydCh5X2x1bWEgKyAxLjQwM2YgKiB2X2Nocm9tYSk7Ci0gICAgICAgIGZp
bmFsIGZsb2F0IGV4cGVjdGVkR3JlZW4gPQotICAgICAgICAgICAgc2F0dXJhdGVkQ29udmVydCh5
X2x1bWEgLSAwLjM0NGYgKiB1X2Nocm9tYSAtIDAuNzE0ZiAqIHZfY2hyb21hKTsKLSAgICAgICAg
ZmluYWwgZmxvYXQgZXhwZWN0ZWRCbHVlID0gc2F0dXJhdGVkQ29udmVydCh5X2x1bWEgKyAxLjc3
ZiAqIHVfY2hyb21hKTsKLQotICAgICAgICAvLyBBY3R1YWwgY29sb3IgaW4gUkdCODg4OC4KLSAg
ICAgICAgZmluYWwgaW50IGFjdHVhbFJlZCA9IGRhdGEuZ2V0KCkgJiAweEZGOwotICAgICAgICBm
aW5hbCBpbnQgYWN0dWFsR3JlZW4gPSBkYXRhLmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwg
aW50IGFjdHVhbEJsdWUgPSBkYXRhLmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwgaW50IGFj
dHVhbEFscGhhID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0KLSAgICAgICAgLy8gQXNzZXJ0IHJlbmRl
cmVkIGltYWdlIGlzIGNsb3NlIHRvIHBpeGVsIHBlcmZlY3QgZnJvbSBzb3VyY2UgWVVWLgotICAg
ICAgICBhc3NlcnRUcnVlKE1hdGguYWJzKGFjdHVhbFJlZCAtIGV4cGVjdGVkUmVkKSA8IE1BWF9E
SUZGKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShNYXRoLmFicyhhY3R1YWxHcmVlbiAtIGV4cGVjdGVk
R3JlZW4pIDwgTUFYX0RJRkYpOwotICAgICAgICBhc3NlcnRUcnVlKE1hdGguYWJzKGFjdHVhbEJs
dWUgLSBleHBlY3RlZEJsdWUpIDwgTUFYX0RJRkYpOwotICAgICAgICBhc3NlcnRFcXVhbHMoYWN0
dWFsQWxwaGEsIDI1NSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZHJhd2VyLnJlbGVhc2UoKTsK
LSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygzLCB5dXZUZXh0dXJlcywgMCk7Ci0gICAgZWds
QmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGhlIHB1cnBvc2UgaGVyZSBpcyB0
byB0ZXN0IEdsUmVjdERyYXdlci5vZXNEcmF3KCkuIFVuZm9ydHVuYXRlbHksIHRoZXJlIGlzIG5v
IGVhc3kgd2F5IHRvCi0gICAqIGNyZWF0ZSBhbiBPRVMgdGV4dHVyZSwgd2hpY2ggaXMgbmVlZGVk
IGZvciBpbnB1dCB0byBvZXNEcmF3KCkuIE1vc3Qgb2YgdGhlIHRlc3QgaXMgY29uY2VybmVkCi0g
ICAqIHdpdGggY3JlYXRpbmcgT0VTIHRleHR1cmVzIGluIHRoZSBmb2xsb3dpbmcgd2F5OgotICAg
KiAgLSBDcmVhdGUgU3VyZmFjZVRleHR1cmUgd2l0aCBoZWxwIGZyb20gU3VyZmFjZVRleHR1cmVI
ZWxwZXIuCi0gICAqICAtIENyZWF0ZSBhbiBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJl
IGFzIEVHTFN1cmZhY2UuCi0gICAqICAtIFVwbG9hZCBSR0IgdGV4dHVyZSB3aXRoIGtub3duIGNv
bnRlbnQuCi0gICAqICAtIERyYXcgdGhlIFJHQiB0ZXh0dXJlIG9udG8gdGhlIEVnbEJhc2Ugd2l0
aCB0aGUgU3VyZmFjZVRleHR1cmUgYXMgdGFyZ2V0LgotICAgKiAgLSBXYWl0IGZvciBhbiBPRVMg
dGV4dHVyZSB0byBiZSBwcm9kdWNlZC4KLSAgICogVGhlIGFjdHVhbCBvZXNEcmF3KCkgdGVzdCBp
cyB0aGlzOgotICAgKiAgLSBDcmVhdGUgYW4gRWdsQmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVyIGFz
IHRhcmdldC4KLSAgICogIC0gUmVuZGVyIHRoZSBPRVMgdGV4dHVyZSBvbnRvIHRoZSBwaXhlbCBi
dWZmZXIuCi0gICAqICAtIFJlYWQgYmFjayB0aGUgcGl4ZWwgYnVmZmVyIGFuZCBjb21wYXJlIGl0
IHdpdGggdGhlIGtub3duIFJHQiBkYXRhLgotICAgKi8KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdE9lc1JlbmRlcmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgLyoqCi0gICAgICogU3R1YiBjbGFzcyB0byBjb252ZXJ0IFJHQiBCeXRlQnVmZmVycyB0byBP
RVMgdGV4dHVyZXMgYnkgZHJhd2luZyBvbnRvIGEgU3VyZmFjZVRleHR1cmUuCi0gICAgICovCi0g
ICAgY2xhc3MgU3R1Yk9lc1RleHR1cmVQcm9kdWNlciB7Ci0gICAgICBwcml2YXRlIGZpbmFsIEVn
bEJhc2UgZWdsQmFzZTsKLSAgICAgIHByaXZhdGUgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlcjsK
LSAgICAgIHByaXZhdGUgZmluYWwgaW50IHJnYlRleHR1cmU7Ci0KLSAgICAgIHB1YmxpYyBTdHVi
T2VzVGV4dHVyZVByb2R1Y2VyKAotICAgICAgICAgIEVnbEJhc2UuQ29udGV4dCBzaGFyZWRDb250
ZXh0LCBTdXJmYWNlVGV4dHVyZSBzdXJmYWNlVGV4dHVyZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KSB7Ci0gICAgICAgIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShzaGFyZWRDb250ZXh0LCBFZ2xC
YXNlLkNPTkZJR19QTEFJTik7Ci0gICAgICAgIHN1cmZhY2VUZXh0dXJlLnNldERlZmF1bHRCdWZm
ZXJTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2Uoc3Vy
ZmFjZVRleHR1cmUpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlV2lkdGgo
KSwgd2lkdGgpOwotICAgICAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlSGVpZ2h0KCks
IGhlaWdodCk7Ci0KLSAgICAgICAgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotCi0gICAg
ICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgcmdiVGV4dHVyZSA9IEdsVXRpbC5n
ZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgICAgfQotCi0gICAgICBw
dWJsaWMgdm9pZCBkcmF3KEJ5dGVCdWZmZXIgcmdiUGxhbmUpIHsKLSAgICAgICAgZWdsQmFzZS5t
YWtlQ3VycmVudCgpOwotCi0gICAgICAgIC8vIFVwbG9hZCBSR0IgZGF0YSB0byB0ZXh0dXJlLgot
ICAgICAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7Ci0gICAg
ICAgIEdMRVMyMC5nbEJpbmRUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJELCByZ2JUZXh0dXJl
KTsKLSAgICAgICAgR0xFUzIwLmdsVGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwg
R0xFUzIwLkdMX1JHQiwgV0lEVEgsIEhFSUdIVCwgMCwgR0xFUzIwLkdMX1JHQiwKLSAgICAgICAg
ICAgIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JQbGFuZSk7Ci0gICAgICAgIC8vIERyYXcg
dGhlIFJHQiBkYXRhIG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgICAgICBkcmF3ZXIuZHJh
d1JnYihyZ2JUZXh0dXJlLCBSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpLCBXSURUSCwg
SEVJR0hULAotICAgICAgICAgICAgMCAvKiB2aWV3cG9ydFggKi8sIDAgLyogdmlld3BvcnRZICov
LCBXSURUSCwgSEVJR0hUKTsKLSAgICAgICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgICAg
fQotCi0gICAgICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgICAgICBlZ2xCYXNlLm1ha2VD
dXJyZW50KCk7Ci0gICAgICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgICAgIEdMRVMyMC5nbERl
bGV0ZVRleHR1cmVzKDEsIG5ldyBpbnRbXSB7cmdiVGV4dHVyZX0sIDApOwotICAgICAgICBlZ2xC
YXNlLnJlbGVhc2UoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgRUdMIGJhc2Ug
d2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4KLSAgICBmaW5hbCBFZ2xCYXNl
IGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhFTF9CVUZG
RVIpOwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2UoV0lEVEgsIEhFSUdIVCk7Ci0K
LSAgICAvLyBDcmVhdGUgcmVzb3VyY2VzIGZvciBnZW5lcmF0aW5nIE9FUyB0ZXh0dXJlcy4KLSAg
ICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZh
Y2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRl
c3QiIC8qIHRocmVhZE5hbWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAg
ZmluYWwgU3R1Yk9lc1RleHR1cmVQcm9kdWNlciBvZXNQcm9kdWNlciA9IG5ldyBTdHViT2VzVGV4
dHVyZVByb2R1Y2VyKAotICAgICAgICBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIHN1cmZh
Y2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCksIFdJRFRILCBIRUlHSFQpOwotICAg
IGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5Nb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3Rl
bmVyID0KLSAgICAgICAgbmV3IFN1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5Nb2NrVGV4dHVyZUxp
c3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVu
ZXIpOwotCi0gICAgLy8gQ3JlYXRlIFJHQiBieXRlIGJ1ZmZlciBwbGFuZSB3aXRoIHJhbmRvbSBj
b250ZW50LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiUGxhbmUgPSBCeXRlQnVmZmVyLmFsbG9j
YXRlRGlyZWN0KFdJRFRIICogSEVJR0hUICogMyk7Ci0gICAgZmluYWwgUmFuZG9tIHJhbmRvbSA9
IG5ldyBSYW5kb20oU0VFRCk7Ci0gICAgcmFuZG9tLm5leHRCeXRlcyhyZ2JQbGFuZS5hcnJheSgp
KTsKLQotICAgIC8vIERyYXcgdGhlIGZyYW1lIGFuZCBibG9jayB1bnRpbCBhbiBPRVMgdGV4dHVy
ZSBpcyBkZWxpdmVyZWQuCi0gICAgb2VzUHJvZHVjZXIuZHJhdyhyZ2JQbGFuZSk7Ci0gICAgbGlz
dGVuZXIud2FpdEZvck5ld0ZyYW1lKCk7Ci0KLSAgICAvLyBSZWFsIHRlc3Qgc3RhcnRzIGhlcmUu
Ci0gICAgLy8gRHJhdyB0aGUgT0VTIHRleHR1cmUgb24gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICBl
Z2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5l
dyBHbFJlY3REcmF3ZXIoKTsKLSAgICBkcmF3ZXIuZHJhd09lcyhsaXN0ZW5lci5vZXNUZXh0dXJl
SWQsIGxpc3RlbmVyLnRyYW5zZm9ybU1hdHJpeCwgV0lEVEgsIEhFSUdIVCwKLSAgICAgICAgMCAv
KiB2aWV3cG9ydFggKi8sIDAgLyogdmlld3BvcnRZICovLCBXSURUSCwgSEVJR0hUKTsKLQotICAg
IC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4gdGhlIHBpeGVsIGJ1ZmZlciBhcyBSR0JBLiBOb3Qg
YWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwgZS5nLiBOZXh1cyA5LgotICAgIGZpbmFsIEJ5dGVC
dWZmZXIgcmdiYURhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRIICogSEVJR0hU
ICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCBXSURUSCwgSEVJR0hULCBHTEVT
MjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYmFEYXRhKTsKLSAgICBHbFV0
aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIpOwotCi0gICAgLy8gQXNzZXJ0IHJl
bmRlcmVkIGltYWdlIGlzIHBpeGVsIHBlcmZlY3QgdG8gc291cmNlIFJHQi4KLSAgICBhc3NlcnRF
cXVhbHMoV0lEVEgsIEhFSUdIVCwgc3RyaXBBbHBoYUNoYW5uZWwocmdiYURhdGEpLCByZ2JQbGFu
ZSk7Ci0KLSAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJl
dHVyblRleHR1cmVGcmFtZSgpOwotICAgIG9lc1Byb2R1Y2VyLnJlbGVhc2UoKTsKLSAgICBzdXJm
YWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlclRlc3QuamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXJU
ZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2RlclRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1OCArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0
Yy5NZWRpYUNvZGVjVmlkZW9FbmNvZGVyLk91dHB1dEJ1ZmZlckluZm87Ci0KLWltcG9ydCBhbmRy
b2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMxMUV4
dDsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWls
ZDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lk
LnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQu
dXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi1AVGFyZ2V0QXBpKEJ1
aWxkLlZFUlNJT05fQ09ERVMuSUNFX0NSRUFNX1NBTkRXSUNIX01SMSkKLXB1YmxpYyBmaW5hbCBj
bGFzcyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyVGVzdCBleHRlbmRzIEFjdGl2aXR5VGVzdENhc2Ug
ewotICBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJNZWRpYUNvZGVjVmlkZW9FbmNvZGVyVGVz
dCI7Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEluaXRpYWxpemVV
c2luZ0J5dGVCdWZmZXIoKSB7Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmlzVnA4
SHdTdXBwb3J0ZWQoKSkgewotICAgICAgTG9nLmkoVEFHLCAiSGFyZHdhcmUgZG9lcyBub3Qgc3Vw
cG9ydCBWUDggZW5jb2RpbmcsIHNraXBwaW5nIHRlc3RJbml0UmVsZWFzZVVzaW5nQnl0ZUJ1ZmZl
ciIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGVu
Y29kZXIgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpOwotICAgIGFzc2VydFRydWUoZW5j
b2Rlci5pbml0RW5jb2RlKAotICAgICAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLlZpZGVvQ29k
ZWNUeXBlLlZJREVPX0NPREVDX1ZQOCwgNjQwLCA0ODAsIDMwMCwgMzAsIG51bGwpKTsKLSAgICBl
bmNvZGVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3RJbml0aWxpemVVc2luZ1RleHR1cmVzKCkgewotICAgIGlmICghTWVkaWFDb2RlY1Zp
ZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpKSB7Ci0gICAgICBMb2cu
aShUQUcsICJoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFZQOCBlbmNvZGluZywgc2tpcHBpbmcg
dGVzdEVuY29kZXJVc2luZ1RleHR1cmVzIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIEVn
bEJhc2UxNCBlZ2xCYXNlID0gbmV3IEVnbEJhc2UxNChudWxsLCBFZ2xCYXNlLkNPTkZJR19QTEFJ
Tik7Ci0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNW
aWRlb0VuY29kZXIoKTsKLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZShNZWRpYUNv
ZGVjVmlkZW9FbmNvZGVyLlZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCwgNjQwLCA0ODAs
Ci0gICAgICAgIDMwMCwgMzAsIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSkpOwotICAgIGVu
Y29kZXIucmVsZWFzZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgQFNtYWxs
VGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEluaXRpYWxpemVVc2luZ0J5dGVCdWZmZXJS
ZUluaXRpbGl6ZVVzaW5nVGV4dHVyZXMoKSB7Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNv
ZGVyLmlzVnA4SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5pKFRBRywg
ImhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgVlA4IGVuY29kaW5nLCBza2lwcGluZyB0ZXN0RW5j
b2RlclVzaW5nVGV4dHVyZXMiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTWVkaWFDb2Rl
Y1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsKLSAg
ICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZSgKLSAgICAgICAgTWVkaWFDb2RlY1ZpZGVv
RW5jb2Rlci5WaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgsIDY0MCwgNDgwLCAzMDAsIDMw
LCBudWxsKSk7Ci0gICAgZW5jb2Rlci5yZWxlYXNlKCk7Ci0gICAgRWdsQmFzZTE0IGVnbEJhc2Ug
PSBuZXcgRWdsQmFzZTE0KG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBhc3NlcnRU
cnVlKGVuY29kZXIuaW5pdEVuY29kZShNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLlZpZGVvQ29kZWNU
eXBlLlZJREVPX0NPREVDX1ZQOCwgNjQwLCA0ODAsCi0gICAgICAgIDMwMCwgMzAsIGVnbEJhc2Uu
Z2V0RWdsQmFzZUNvbnRleHQoKSkpOwotICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAgIGVnbEJh
c2UucmVsZWFzZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQg
dGVzdEVuY29kZXJVc2luZ0J5dGVCdWZmZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkKCkpIHsK
LSAgICAgIExvZy5pKFRBRywgIkhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgVlA4IGVuY29kaW5n
LCBza2lwcGluZyB0ZXN0RW5jb2RlclVzaW5nQnl0ZUJ1ZmZlciIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGZpbmFsIGludCB3aWR0aCA9IDY0MDsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0
ID0gNDgwOwotICAgIGZpbmFsIGludCBtaW5fc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogMyAvIDI7
Ci0gICAgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UaW1lc3RhbXBVcyA9IDI7Ci0KLSAgICBNZWRp
YUNvZGVjVmlkZW9FbmNvZGVyIGVuY29kZXIgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlcigp
OwotCi0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmluaXRFbmNvZGUoCi0gICAgICAgIE1lZGlhQ29k
ZWNWaWRlb0VuY29kZXIuVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4LCB3aWR0aCwgaGVp
Z2h0LCAzMDAsIDMwLCBudWxsKSk7Ci0gICAgQnl0ZUJ1ZmZlcltdIGlucHV0QnVmZmVycyA9IGVu
Y29kZXIuZ2V0SW5wdXRCdWZmZXJzKCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChpbnB1dEJ1ZmZlcnMp
OwotICAgIGFzc2VydFRydWUobWluX3NpemUgPD0gaW5wdXRCdWZmZXJzWzBdLmNhcGFjaXR5KCkp
OwotCi0gICAgaW50IGJ1ZmZlckluZGV4OwotICAgIGRvIHsKLSAgICAgIFRocmVhZC5zbGVlcCgx
MCk7Ci0gICAgICBidWZmZXJJbmRleCA9IGVuY29kZXIuZGVxdWV1ZUlucHV0QnVmZmVyKCk7Ci0g
ICAgfSB3aGlsZSAoYnVmZmVySW5kZXggPT0gLTEpOyAvLyB8LTF8IGlzIHJldHVybmVkIHdoZW4g
dGhlcmUgaXMgbm8gYnVmZmVyIGF2YWlsYWJsZSB5ZXQuCi0KLSAgICBhc3NlcnRUcnVlKGJ1ZmZl
ckluZGV4ID49IDApOwotICAgIGFzc2VydFRydWUoYnVmZmVySW5kZXggPCBpbnB1dEJ1ZmZlcnMu
bGVuZ3RoKTsKLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuZW5jb2RlQnVmZmVyKHRydWUsIGJ1ZmZl
ckluZGV4LCBtaW5fc2l6ZSwgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMpKTsKLQotICAgIE91dHB1
dEJ1ZmZlckluZm8gaW5mbzsKLSAgICBkbyB7Ci0gICAgICBpbmZvID0gZW5jb2Rlci5kZXF1ZXVl
T3V0cHV0QnVmZmVyKCk7Ci0gICAgICBUaHJlYWQuc2xlZXAoMTApOwotICAgIH0gd2hpbGUgKGlu
Zm8gPT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShpbmZvLmluZGV4ID49IDApOwotICAgIGFzc2Vy
dEVxdWFscyhwcmVzZW50YXRpb25UaW1lc3RhbXBVcywgaW5mby5wcmVzZW50YXRpb25UaW1lc3Rh
bXBVcyk7Ci0gICAgYXNzZXJ0VHJ1ZShpbmZvLmJ1ZmZlci5jYXBhY2l0eSgpID4gMCk7Ci0gICAg
ZW5jb2Rlci5yZWxlYXNlT3V0cHV0QnVmZmVyKGluZm8uaW5kZXgpOwotCi0gICAgZW5jb2Rlci5y
ZWxlYXNlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0
RW5jb2RlclVzaW5nVGV4dHVyZXMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJl
cygpKSB7Ci0gICAgICBMb2cuaShUQUcsICJIYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFZQOCBl
bmNvZGluZywgc2tpcHBpbmcgdGVzdEVuY29kZXJVc2luZ1RleHR1cmVzIik7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgZmluYWwgaW50IHdpZHRoID0gNjQwOwotICAgIGZpbmFsIGludCBo
ZWlnaHQgPSA0ODA7Ci0gICAgZmluYWwgbG9uZyBwcmVzZW50YXRpb25UcyA9IDI7Ci0KLSAgICBm
aW5hbCBFZ2xCYXNlMTQgZWdsT2VzQmFzZSA9IG5ldyBFZ2xCYXNlMTQobnVsbCwgRWdsQmFzZS5D
T05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICBlZ2xPZXNCYXNlLmNyZWF0ZUR1bW15UGJ1ZmZlclN1
cmZhY2UoKTsKLSAgICBlZ2xPZXNCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgaW50IG9lc1RleHR1
cmVJZCA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzExRXh0LkdMX1RFWFRVUkVfRVhURVJO
QUxfT0VTKTsKLQotICAgIC8vIFRPRE8ocGVya2opOiBUaGlzIHRlc3QgaXMgd2VlayBzaW5jZSB3
ZSBkb24ndCBmaWxsIHRoZSB0ZXh0dXJlIHdpdGggdmFsaWQgZGF0YSB3aXRoIGNvcnJlY3QKLSAg
ICAvLyB3aWR0aCBhbmQgaGVpZ2h0IGFuZCB2ZXJpZnkgdGhlIGVuY29kZWQgZGF0YS4gRmlsbCB0
aGUgT0VTIHRleHR1cmUgYW5kIGZpZ3VyZSBvdXQgYSB3YXkgdG8KLSAgICAvLyB2ZXJpZnkgdGhh
dCB0aGUgb3V0cHV0IG1ha2Ugc2Vuc2UuCi0KLSAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGVu
Y29kZXIgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpOwotCi0gICAgYXNzZXJ0VHJ1ZShl
bmNvZGVyLmluaXRFbmNvZGUoTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5WaWRlb0NvZGVjVHlwZS5W
SURFT19DT0RFQ19WUDgsIHdpZHRoLAotICAgICAgICBoZWlnaHQsIDMwMCwgMzAsIGVnbE9lc0Jh
c2UuZ2V0RWdsQmFzZUNvbnRleHQoKSkpOwotICAgIGFzc2VydFRydWUoCi0gICAgICAgIGVuY29k
ZXIuZW5jb2RlVGV4dHVyZSh0cnVlLCBvZXNUZXh0dXJlSWQsIFJlbmRlcmVyQ29tbW9uLmlkZW50
aXR5TWF0cml4KCksIHByZXNlbnRhdGlvblRzKSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVy
cm9yKCJlbmNvZGVUZXh0dXJlIik7Ci0KLSAgICAvLyBJdCBzaG91bGQgYmUgT2sgdG8gZGVsZXRl
IHRoZSB0ZXh0dXJlIGFmdGVyIGNhbGxpbmcgZW5jb2RlVGV4dHVyZS4KLSAgICBHTEVTMjAuZ2xE
ZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge29lc1RleHR1cmVJZH0sIDApOwotCi0gICAgT3V0
cHV0QnVmZmVySW5mbyBpbmZvID0gZW5jb2Rlci5kZXF1ZXVlT3V0cHV0QnVmZmVyKCk7Ci0gICAg
d2hpbGUgKGluZm8gPT0gbnVsbCkgewotICAgICAgaW5mbyA9IGVuY29kZXIuZGVxdWV1ZU91dHB1
dEJ1ZmZlcigpOwotICAgICAgVGhyZWFkLnNsZWVwKDIwKTsKLSAgICB9Ci0gICAgYXNzZXJ0VHJ1
ZShpbmZvLmluZGV4ICE9IC0xKTsKLSAgICBhc3NlcnRUcnVlKGluZm8uYnVmZmVyLmNhcGFjaXR5
KCkgPiAwKTsKLSAgICBhc3NlcnRFcXVhbHMocHJlc2VudGF0aW9uVHMsIGluZm8ucHJlc2VudGF0
aW9uVGltZXN0YW1wVXMpOwotICAgIGVuY29kZXIucmVsZWFzZU91dHB1dEJ1ZmZlcihpbmZvLmlu
ZGV4KTsKLQotICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAgIGVnbE9lc0Jhc2UucmVsZWFzZSgp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25pdG9yVGVzdC5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JUZXN0LmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvTmV0d29ya01vbml0b3JUZXN0
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNzQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZTsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0
Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlOwot
aW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5JTlZBTElE
X05FVF9JRDsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRl
Y3QuTmV0d29ya0luZm9ybWF0aW9uOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdC5OZXR3b3JrU3RhdGU7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRp
b24uU3VwcHJlc3NMaW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0
IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuQ29ubmVjdGl2aXR5
TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5OZXR3b3JrOwotaW1wb3J0IGFuZHJvaWQubmV0
LndpZmkuV2lmaU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRy
b2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9p
ZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LlVpVGhyZWFkVGVz
dDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTWVkaXVtVGVz
dDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0
OwotCi0vKioKLSAqIFRlc3RzIGZvciBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yLgotICovCi1A
U3VwcHJlc3NMaW50KCJOZXdBcGkiKQotcHVibGljIGNsYXNzIE5ldHdvcmtNb25pdG9yVGVzdCBl
eHRlbmRzIEFjdGl2aXR5VGVzdENhc2UgewotICAvKioKLSAgICogTGlzdGVucyBmb3IgYWxlcnRz
IGZpcmVkIGJ5IHRoZSBOZXR3b3JrTW9uaXRvciB3aGVuIG5ldHdvcmsgc3RhdHVzIGNoYW5nZXMu
Ci0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBOZXR3b3JrTW9uaXRvclRlc3RPYnNlcnZl
ciBpbXBsZW1lbnRzIE5ldHdvcmtNb25pdG9yLk5ldHdvcmtPYnNlcnZlciB7Ci0gICAgcHJpdmF0
ZSBib29sZWFuIHJlY2VpdmVkTm90aWZpY2F0aW9uID0gZmFsc2U7Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rpb25UeXBlQ2hhbmdlZChDb25uZWN0aW9uVHlwZSBj
b25uZWN0aW9uVHlwZSkgewotICAgICAgcmVjZWl2ZWROb3RpZmljYXRpb24gPSB0cnVlOwotICAg
IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkgewotICAg
ICAgcmV0dXJuIHJlY2VpdmVkTm90aWZpY2F0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IHJlc2V0SGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSB7Ci0gICAgICByZWNlaXZlZE5vdGlmaWNh
dGlvbiA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBNb2NrcyBvdXQgY2FsbHMg
dG8gdGhlIENvbm5lY3Rpdml0eU1hbmFnZXIuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBjbGFz
cyBNb2NrQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGV4dGVuZHMgQ29ubmVjdGl2aXR5TWFu
YWdlckRlbGVnYXRlIHsKLSAgICBwcml2YXRlIGJvb2xlYW4gYWN0aXZlTmV0d29ya0V4aXN0czsK
LSAgICBwcml2YXRlIGludCBuZXR3b3JrVHlwZTsKLSAgICBwcml2YXRlIGludCBuZXR3b3JrU3Vi
dHlwZTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBOZXR3b3JrU3RhdGUgZ2V0TmV0d29y
a1N0YXRlKCkgewotICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUoYWN0aXZlTmV0d29ya0V4
aXN0cywgbmV0d29ya1R5cGUsIG5ldHdvcmtTdWJ0eXBlKTsKLSAgICB9Ci0KLSAgICAvLyBEdW1t
eSBpbXBsZW1lbnRhdGlvbnMgdG8gYXZvaWQgTnVsbFBvaW50ZXJFeGNlcHRpb25zIGluIGRlZmF1
bHQgaW1wbGVtZW50YXRpb25zOgotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGxvbmcgZ2V0
RGVmYXVsdE5ldElkKCkgewotICAgICAgcmV0dXJuIElOVkFMSURfTkVUX0lEOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBOZXR3b3JrW10gZ2V0QWxsTmV0d29ya3MoKSB7Ci0g
ICAgICByZXR1cm4gbmV3IE5ldHdvcmtbMF07Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIE5ldHdvcmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoTmV0d29yayBuZXR3b3JrKSB7Ci0g
ICAgICByZXR1cm4gbmV3IE5ldHdvcmtTdGF0ZShmYWxzZSwgLTEsIC0xKTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgdm9pZCBzZXRBY3RpdmVOZXR3b3JrRXhpc3RzKGJvb2xlYW4gbmV0d29ya0V4aXN0
cykgewotICAgICAgYWN0aXZlTmV0d29ya0V4aXN0cyA9IG5ldHdvcmtFeGlzdHM7Ci0gICAgfQot
Ci0gICAgcHVibGljIHZvaWQgc2V0TmV0d29ya1R5cGUoaW50IG5ldHdvcmtUeXBlKSB7Ci0gICAg
ICB0aGlzLm5ldHdvcmtUeXBlID0gbmV0d29ya1R5cGU7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgc2V0TmV0d29ya1N1YnR5cGUoaW50IG5ldHdvcmtTdWJ0eXBlKSB7Ci0gICAgICB0aGlzLm5l
dHdvcmtTdWJ0eXBlID0gbmV0d29ya1N1YnR5cGU7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAq
IE1vY2tzIG91dCBjYWxscyB0byB0aGUgV2lmaU1hbmFnZXIuCi0gICAqLwotICBwcml2YXRlIHN0
YXRpYyBjbGFzcyBNb2NrV2lmaU1hbmFnZXJEZWxlZ2F0ZQotICAgICAgZXh0ZW5kcyBOZXR3b3Jr
TW9uaXRvckF1dG9EZXRlY3QuV2lmaU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBTdHJp
bmcgd2lmaVNTSUQ7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIGdldFdpZmlT
U0lEKCkgewotICAgICAgcmV0dXJuIHdpZmlTU0lEOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lk
IHNldFdpZmlTU0lEKFN0cmluZyB3aWZpU1NJRCkgewotICAgICAgdGhpcy53aWZpU1NJRCA9IHdp
ZmlTU0lEOwotICAgIH0KLSAgfQotCi0gIC8vIEEgZHVtbXkgTmV0d29ya01vbml0b3JBdXRvRGV0
ZWN0Lk9ic2VydmVyLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUZXN0TmV0d29ya01vbml0b3JB
dXRvRGV0ZWN0T2JzZXJ2ZXIKLSAgICAgIGltcGxlbWVudHMgTmV0d29ya01vbml0b3JBdXRvRGV0
ZWN0Lk9ic2VydmVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNvbm5lY3Rp
b25UeXBlQ2hhbmdlZChDb25uZWN0aW9uVHlwZSBuZXdDb25uZWN0aW9uVHlwZSkge30KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uTmV0d29ya0Nvbm5lY3QoTmV0d29ya0luZm9y
bWF0aW9uIG5ldHdvcmtJbmZvKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25OZXR3b3JrRGlzY29ubmVjdChsb25nIG5ldHdvcmtIYW5kbGUpIHt9Ci0gIH0KLQotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBPYmplY3QgbG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBz
dGF0aWMgSGFuZGxlciB1aVRocmVhZEhhbmRsZXIgPSBudWxsOwotCi0gIHByaXZhdGUgTmV0d29y
a01vbml0b3JBdXRvRGV0ZWN0IHJlY2VpdmVyOwotICBwcml2YXRlIE1vY2tDb25uZWN0aXZpdHlN
YW5hZ2VyRGVsZWdhdGUgY29ubmVjdGl2aXR5RGVsZWdhdGU7Ci0gIHByaXZhdGUgTW9ja1dpZmlN
YW5hZ2VyRGVsZWdhdGUgd2lmaURlbGVnYXRlOwotCi0gIHByaXZhdGUgc3RhdGljIEhhbmRsZXIg
Z2V0VWlUaHJlYWRIYW5kbGVyKCkgewotICAgIHN5bmNocm9uaXplZCAobG9jaykgewotICAgICAg
aWYgKHVpVGhyZWFkSGFuZGxlciA9PSBudWxsKSB7Ci0gICAgICAgIHVpVGhyZWFkSGFuZGxlciA9
IG5ldyBIYW5kbGVyKExvb3Blci5nZXRNYWluTG9vcGVyKCkpOwotICAgICAgfQotICAgICAgcmV0
dXJuIHVpVGhyZWFkSGFuZGxlcjsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIG1l
dGhvZCB0byBjcmVhdGUgYSBuZXR3b3JrIG1vbml0b3IgYW5kIGRlbGVnYXRlcyBmb3IgdGVzdGlu
Zy4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVUZXN0TW9uaXRvcigpIHsKLSAgICBDb250
ZXh0IGNvbnRleHQgPSBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0g
ICAgTmV0d29ya01vbml0b3IucmVzZXRJbnN0YW5jZUZvclRlc3RzKGNvbnRleHQpOwotICAgIE5l
dHdvcmtNb25pdG9yLnNldEF1dG9EZXRlY3RDb25uZWN0aXZpdHlTdGF0ZSh0cnVlKTsKLSAgICBy
ZWNlaXZlciA9IE5ldHdvcmtNb25pdG9yLmdldEF1dG9EZXRlY3RvckZvclRlc3QoKTsKLSAgICBh
c3NlcnROb3ROdWxsKHJlY2VpdmVyKTsKLQotICAgIGNvbm5lY3Rpdml0eURlbGVnYXRlID0gbmV3
IE1vY2tDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUoKTsKLSAgICBjb25uZWN0aXZpdHlEZWxl
Z2F0ZS5zZXRBY3RpdmVOZXR3b3JrRXhpc3RzKHRydWUpOwotICAgIHJlY2VpdmVyLnNldENvbm5l
Y3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZUZvclRlc3RzKGNvbm5lY3Rpdml0eURlbGVnYXRlKTsKLQot
ICAgIHdpZmlEZWxlZ2F0ZSA9IG5ldyBNb2NrV2lmaU1hbmFnZXJEZWxlZ2F0ZSgpOwotICAgIHJl
Y2VpdmVyLnNldFdpZmlNYW5hZ2VyRGVsZWdhdGVGb3JUZXN0cyh3aWZpRGVsZWdhdGUpOwotICAg
IHdpZmlEZWxlZ2F0ZS5zZXRXaWZpU1NJRCgiZm9vIik7Ci0gIH0KLQotICBwcml2YXRlIE5ldHdv
cmtNb25pdG9yQXV0b0RldGVjdC5Db25uZWN0aW9uVHlwZSBnZXRDdXJyZW50Q29ubmVjdGlvblR5
cGUoKSB7Ci0gICAgZmluYWwgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtTdGF0ZSBu
ZXR3b3JrU3RhdGUgPSByZWNlaXZlci5nZXRDdXJyZW50TmV0d29ya1N0YXRlKCk7Ci0gICAgcmV0
dXJuIHJlY2VpdmVyLmdldENvbm5lY3Rpb25UeXBlKG5ldHdvcmtTdGF0ZSk7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBzdXBlci5zZXRVcCgpOwotICAgIGdldFVpVGhyZWFkSGFuZGxlcigpLnBvc3QobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjcmVhdGVUZXN0TW9u
aXRvcigpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQg
dGhlIHJlY2VpdmVyIHJlZ2lzdGVycyBmb3IgY29ubmVjdGl2aXR5IGludGVudHMgZHVyaW5nIGNv
bnN0cnVjdGlvbi4KLSAgICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0TmV0d29ya01vbml0b3JSZWdpc3RlcnNJbkNvbnN0cnVjdG9yKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBDb250ZXh0IGNvbnRleHQgPSBnZXRJbnN0cnVt
ZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCk7Ci0KLSAgICBOZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QuT2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBuZXcgVGVzdE5ldHdvcmtNb25pdG9yQXV0b0RldGVj
dE9ic2VydmVyKCk7Ci0KLSAgICBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgcmVjZWl2ZXIgPSBu
ZXcgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0KG9ic2VydmVyLCBjb250ZXh0KTsKLQotICAgIGFz
c2VydFRydWUocmVjZWl2ZXIuaXNSZWNlaXZlclJlZ2lzdGVyZWRGb3JUZXN0aW5nKCkpOwotICB9
Ci0KLSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgd2hlbiB0aGVyZSBpcyBhbiBpbnRlbnQgaW5kaWNh
dGluZyBhIGNoYW5nZSBpbiBuZXR3b3JrIGNvbm5lY3Rpdml0eSwgaXQgc2VuZHMgYQotICAgKiBu
b3RpZmljYXRpb24gdG8gSmF2YSBvYnNlcnZlcnMuCi0gICAqLwotICBAVWlUaHJlYWRUZXN0Ci0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3ROZXR3b3JrTW9uaXRvckphdmFPYnNlcnZl
cnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIC8vIEluaXRpYWxpemUgdGhl
IE5ldHdvcmtNb25pdG9yIHdpdGggYSBjb25uZWN0aW9uLgotICAgIEludGVudCBjb25uZWN0aXZp
dHlJbnRlbnQgPSBuZXcgSW50ZW50KENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElWSVRZX0FD
VElPTik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRh
cmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50KTsKLQotICAgIC8vIFdlIHNob3VsZG4n
dCBiZSByZS1ub3RpZmllZCBpZiB0aGUgY29ubmVjdGlvbiBoYXNuJ3QgYWN0dWFsbHkgY2hhbmdl
ZC4KLSAgICBOZXR3b3JrTW9uaXRvclRlc3RPYnNlcnZlciBvYnNlcnZlciA9IG5ldyBOZXR3b3Jr
TW9uaXRvclRlc3RPYnNlcnZlcigpOwotICAgIE5ldHdvcmtNb25pdG9yLmFkZE5ldHdvcmtPYnNl
cnZlcihvYnNlcnZlcik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlv
bigpLmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBhc3NlcnRG
YWxzZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpKTsKLQotICAgIC8vIFdlIHNo
b3VsZG4ndCBiZSBub3RpZmllZCBpZiB3ZSdyZSBjb25uZWN0ZWQgdG8gbm9uLVdpZmkgYW5kIHRo
ZSBXaWZpIFNTSUQgY2hhbmdlcy4KLSAgICB3aWZpRGVsZWdhdGUuc2V0V2lmaVNTSUQoImJhciIp
OwotICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRD
b250ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0RmFsc2Uob2JzZXJ2ZXIu
aGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0KLSAgICAvLyBXZSBzaG91bGQgYmUgbm90aWZp
ZWQgd2hlbiB3ZSBjaGFuZ2UgdG8gV2lmaS4KLSAgICBjb25uZWN0aXZpdHlEZWxlZ2F0ZS5zZXRO
ZXR3b3JrVHlwZShDb25uZWN0aXZpdHlNYW5hZ2VyLlRZUEVfV0lGSSk7Ci0gICAgcmVjZWl2ZXIu
b25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSwgY29ubmVj
dGl2aXR5SW50ZW50KTsKLSAgICBhc3NlcnRUcnVlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZp
Y2F0aW9uKCkpOwotICAgIG9ic2VydmVyLnJlc2V0SGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKTsK
LQotICAgIC8vIFdlIHNob3VsZCBiZSBub3RpZmllZCB3aGVuIHRoZSBXaWZpIFNTSUQgY2hhbmdl
cy4KLSAgICB3aWZpRGVsZWdhdGUuc2V0V2lmaVNTSUQoImZvbyIpOwotICAgIHJlY2VpdmVyLm9u
UmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksIGNvbm5lY3Rp
dml0eUludGVudCk7Ci0gICAgYXNzZXJ0VHJ1ZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNh
dGlvbigpKTsKLSAgICBvYnNlcnZlci5yZXNldEhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCk7Ci0K
LSAgICAvLyBXZSBzaG91bGRuJ3QgYmUgcmUtbm90aWZpZWQgaWYgdGhlIFdpZmkgU1NJRCBoYXNu
J3QgYWN0dWFsbHkgY2hhbmdlZC4KLSAgICByZWNlaXZlci5vblJlY2VpdmUoZ2V0SW5zdHJ1bWVu
dGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFz
c2VydEZhbHNlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkpOwotCi0gICAgLy8g
TWltaWMgdGhhdCBjb25uZWN0aXZpdHkgaGFzIGJlZW4gbG9zdCBhbmQgZW5zdXJlIHRoYXQgdGhl
IG9ic2VydmVyIGdldHMgdGhlIG5vdGlmaWNhdGlvbi4KLSAgICBjb25uZWN0aXZpdHlEZWxlZ2F0
ZS5zZXRBY3RpdmVOZXR3b3JrRXhpc3RzKGZhbHNlKTsKLSAgICBJbnRlbnQgbm9Db25uZWN0aXZp
dHlJbnRlbnQgPSBuZXcgSW50ZW50KENvbm5lY3Rpdml0eU1hbmFnZXIuQ09OTkVDVElWSVRZX0FD
VElPTik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRh
cmdldENvbnRleHQoKSwgbm9Db25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFzc2VydFRydWUob2Jz
ZXJ2ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVz
dHMgdGhhdCBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgZG9lc24ndCBjcmFzaC4gVGhpcyB0
ZXN0IGNhbm5vdCByZWx5IG9uIGhhdmluZyBhbnkKLSAgICogYWN0aXZlIG5ldHdvcmsgY29ubmVj
dGlvbnMgc28gaXQgY2Fubm90IHVzZWZ1bGx5IGNoZWNrIHJlc3VsdHMsIGJ1dCBpdCBjYW4gYXQg
bGVhc3QgY2hlY2sKLSAgICogdGhhdCB0aGUgZnVuY3Rpb25zIGRvbid0IGNyYXNoLgotICAgKi8K
LSAgQFVpVGhyZWFkVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDb25uZWN0
aXZpdHlNYW5hZ2VyRGVsZWdhdGVEb2VzTm90Q3Jhc2goKSB7Ci0gICAgQ29ubmVjdGl2aXR5TWFu
YWdlckRlbGVnYXRlIGRlbGVnYXRlID0KLSAgICAgICAgbmV3IENvbm5lY3Rpdml0eU1hbmFnZXJE
ZWxlZ2F0ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCkpOwotICAgIGRl
bGVnYXRlLmdldE5ldHdvcmtTdGF0ZSgpOwotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQg
Pj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCkgewotICAgICAgTmV0d29ya1tdIG5ldHdv
cmtzID0gZGVsZWdhdGUuZ2V0QWxsTmV0d29ya3MoKTsKLSAgICAgIGlmIChuZXR3b3Jrcy5sZW5n
dGggPj0gMSkgewotICAgICAgICBkZWxlZ2F0ZS5nZXROZXR3b3JrU3RhdGUobmV0d29ya3NbMF0p
OwotICAgICAgICBkZWxlZ2F0ZS5oYXNJbnRlcm5ldENhcGFiaWxpdHkobmV0d29ya3NbMF0pOwot
ICAgICAgfQotICAgICAgZGVsZWdhdGUuZ2V0RGVmYXVsdE5ldElkKCk7Ci0gICAgfQotICB9Ci0K
LSAgLyoqCi0gICAqIFRlc3RzIHRoYXQgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0IHF1ZXJ5YWJs
ZSBBUElzIGRvbid0IGNyYXNoLiBUaGlzIHRlc3QgY2Fubm90IHJlbHkKLSAgICogb24gaGF2aW5n
IGFueSBhY3RpdmUgbmV0d29yayBjb25uZWN0aW9ucyBzbyBpdCBjYW5ub3QgdXNlZnVsbHkgY2hl
Y2sgcmVzdWx0cywgYnV0IGl0IGNhbiBhdAotICAgKiBsZWFzdCBjaGVjayB0aGF0IHRoZSBmdW5j
dGlvbnMgZG9uJ3QgY3Jhc2guCi0gICAqLwotICBAVWlUaHJlYWRUZXN0Ci0gIEBTbWFsbFRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdFF1ZXJ5YWJsZUFQSXNEb05vdENyYXNoKCkgewotICAgIE5ldHdv
cmtNb25pdG9yQXV0b0RldGVjdC5PYnNlcnZlciBvYnNlcnZlciA9IG5ldyBUZXN0TmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0T2JzZXJ2ZXIoKTsKLSAgICBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3Qg
bmNuID0KLSAgICAgICAgbmV3IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdChvYnNlcnZlciwgZ2V0
SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpKTsKLSAgICBuY24uZ2V0RGVmYXVs
dE5ldElkKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUGVlckNvbm5lY3Rpb25U
ZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvblRl
c3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVj
dGlvblRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMjUgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5NZXRy
aWNzLkhpc3RvZ3JhbUluZm87Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbi5JY2VD
b25uZWN0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbi5JY2VHYXRo
ZXJpbmdTdGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uLlNpZ25hbGluZ1N0
YXRlOwotCi1pbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5k
cm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci0KLWltcG9ydCBq
YXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZi5XZWFrUmVmZXJlbmNlOwotaW1wb3J0
IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0Owot
aW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBv
cnQgamF2YS51dGlsLklkZW50aXR5SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlz
dDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0
IGphdmEudXRpbC5UcmVlU2V0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93
bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vKiogRW5k
LXRvLWVuZCB0ZXN0cyBmb3IgUGVlckNvbm5lY3Rpb24uamF2YS4gKi8KLXB1YmxpYyBjbGFzcyBQ
ZWVyQ29ubmVjdGlvblRlc3QgZXh0ZW5kcyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IFRJTUVPVVRfU0VDT05EUyA9IDIwOwotICBwcml2YXRlIFRyZWVTZXQ8
U3RyaW5nPiB0aHJlYWRzQmVmb3JlVGVzdCA9IG51bGw7Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3Rl
Y3RlZCB2b2lkIHNldFVwKCkgewotICAgIGFzc2VydFRydWUoUGVlckNvbm5lY3Rpb25GYWN0b3J5
LmluaXRpYWxpemVBbmRyb2lkR2xvYmFscygKLSAgICAgICAgZ2V0SW5zdHJ1bWVudGF0aW9uKCku
Z2V0Q29udGV4dCgpLCB0cnVlLCB0cnVlLCB0cnVlKSk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRp
YyBjbGFzcyBPYnNlcnZlckV4cGVjdGF0aW9ucyBpbXBsZW1lbnRzIFBlZXJDb25uZWN0aW9uLk9i
c2VydmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERhdGFDaGFubmVsLk9ic2VydmVyLCBTdGF0
c09ic2VydmVyIHsKLSAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBuYW1lOwotICAgIHByaXZhdGUg
aW50IGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRF
cnJvcnMgPSAwOwotICAgIHByaXZhdGUgaW50IGV4cGVjdGVkUmVuZWdvdGlhdGlvbnMgPSAwOwot
ICAgIHByaXZhdGUgaW50IGV4cGVjdGVkV2lkdGggPSAwOwotICAgIHByaXZhdGUgaW50IGV4cGVj
dGVkSGVpZ2h0ID0gMDsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZEZyYW1lc0RlbGl2ZXJlZCA9
IDA7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PFNpZ25hbGluZ1N0YXRlPiBleHBlY3RlZFNpZ25h
bGluZ0NoYW5nZXMgPSBuZXcgTGlua2VkTGlzdDxTaWduYWxpbmdTdGF0ZT4oKTsKLSAgICBwcml2
YXRlIExpbmtlZExpc3Q8SWNlQ29ubmVjdGlvblN0YXRlPiBleHBlY3RlZEljZUNvbm5lY3Rpb25D
aGFuZ2VzID0KLSAgICAgICAgbmV3IExpbmtlZExpc3Q8SWNlQ29ubmVjdGlvblN0YXRlPigpOwot
ICAgIHByaXZhdGUgTGlua2VkTGlzdDxJY2VHYXRoZXJpbmdTdGF0ZT4gZXhwZWN0ZWRJY2VHYXRo
ZXJpbmdDaGFuZ2VzID0KLSAgICAgICAgbmV3IExpbmtlZExpc3Q8SWNlR2F0aGVyaW5nU3RhdGU+
KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PFN0cmluZz4gZXhwZWN0ZWRBZGRTdHJlYW1MYWJl
bHMgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PFN0
cmluZz4gZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+
KCk7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4gZ290SWNlQ2Fu
ZGlkYXRlcyA9IG5ldyBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4oKTsKLSAgICBwcml2YXRlIE1h
cDxNZWRpYVN0cmVhbSwgV2Vha1JlZmVyZW5jZTxWaWRlb1JlbmRlcmVyPj4gcmVuZGVyZXJzID0K
LSAgICAgICAgbmV3IElkZW50aXR5SGFzaE1hcDxNZWRpYVN0cmVhbSwgV2Vha1JlZmVyZW5jZTxW
aWRlb1JlbmRlcmVyPj4oKTsKLSAgICBwcml2YXRlIERhdGFDaGFubmVsIGRhdGFDaGFubmVsOwot
ICAgIHByaXZhdGUgTGlua2VkTGlzdDxEYXRhQ2hhbm5lbC5CdWZmZXI+IGV4cGVjdGVkQnVmZmVy
cyA9IG5ldyBMaW5rZWRMaXN0PERhdGFDaGFubmVsLkJ1ZmZlcj4oKTsKLSAgICBwcml2YXRlIExp
bmtlZExpc3Q8RGF0YUNoYW5uZWwuU3RhdGU+IGV4cGVjdGVkU3RhdGVDaGFuZ2VzID0KLSAgICAg
ICAgbmV3IExpbmtlZExpc3Q8RGF0YUNoYW5uZWwuU3RhdGU+KCk7Ci0gICAgcHJpdmF0ZSBMaW5r
ZWRMaXN0PFN0cmluZz4gZXhwZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExhYmVscyA9IG5ldyBMaW5r
ZWRMaXN0PFN0cmluZz4oKTsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZFN0YXRzQ2FsbGJhY2tz
ID0gMDsKLSAgICBwcml2YXRlIExpbmtlZExpc3Q8U3RhdHNSZXBvcnRbXT4gZ290U3RhdHNSZXBv
cnRzID0gbmV3IExpbmtlZExpc3Q8U3RhdHNSZXBvcnRbXT4oKTsKLSAgICBwcml2YXRlIGZpbmFs
IEhhc2hTZXQ8TWVkaWFTdHJlYW0+IGdvdFJlbW90ZVN0cmVhbXMgPSBuZXcgSGFzaFNldDxNZWRp
YVN0cmVhbT4oKTsKLQotICAgIHB1YmxpYyBPYnNlcnZlckV4cGVjdGF0aW9ucyhTdHJpbmcgbmFt
ZSkgewotICAgICAgdGhpcy5uYW1lID0gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hy
b25pemVkIHZvaWQgc2V0RGF0YUNoYW5uZWwoRGF0YUNoYW5uZWwgZGF0YUNoYW5uZWwpIHsKLSAg
ICAgIGFzc2VydE51bGwodGhpcy5kYXRhQ2hhbm5lbCk7Ci0gICAgICB0aGlzLmRhdGFDaGFubmVs
ID0gZGF0YUNoYW5uZWw7Ci0gICAgICB0aGlzLmRhdGFDaGFubmVsLnJlZ2lzdGVyT2JzZXJ2ZXIo
dGhpcyk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHRoaXMuZGF0YUNoYW5uZWwpOwotICAgIH0KLQot
ICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RJY2VDYW5kaWRhdGVzKGludCBjb3Vu
dCkgewotICAgICAgZXhwZWN0ZWRJY2VDYW5kaWRhdGVzICs9IGNvdW50OwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkljZUNhbmRpZGF0ZShJ
Y2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgICAtLWV4cGVjdGVkSWNlQ2FuZGlkYXRlczsK
LQotICAgICAgLy8gV2UgZG9uJ3QgYXNzZXJ0IGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyA+PSAwIGJl
Y2F1c2UgaXQncyBoYXJkIHRvIGtub3cKLSAgICAgIC8vIGhvdyBtYW55IHRvIGV4cGVjdCwgaW4g
Z2VuZXJhbC4gIFdlIG9ubHkgdXNlIGV4cGVjdEljZUNhbmRpZGF0ZXMgdG8KLSAgICAgIC8vIGFz
c2VydCBhIG1pbmltYWwgY291bnQuCi0gICAgICBzeW5jaHJvbml6ZWQgKGdvdEljZUNhbmRpZGF0
ZXMpIHsKLSAgICAgICAgZ290SWNlQ2FuZGlkYXRlcy5hZGQoY2FuZGlkYXRlKTsKLSAgICAgICAg
Z290SWNlQ2FuZGlkYXRlcy5ub3RpZnlBbGwoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVkKEljZUNhbmRpZGF0
ZVtdIGNhbmRpZGF0ZXMpIHt9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgc2V0RXhw
ZWN0ZWRSZXNvbHV0aW9uKGludCB3aWR0aCwgaW50IGhlaWdodCkgewotICAgICAgZXhwZWN0ZWRX
aWR0aCA9IHdpZHRoOwotICAgICAgZXhwZWN0ZWRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgfQotCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdEZyYW1lc0RlbGl2ZXJlZChpbnQgY291
bnQpIHsKLSAgICAgIGV4cGVjdGVkRnJhbWVzRGVsaXZlcmVkICs9IGNvdW50OwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW5kZXJGcmFtZShW
aWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgICAgYXNzZXJ0VHJ1ZShleHBlY3Rl
ZFdpZHRoID4gMCk7Ci0gICAgICBhc3NlcnRUcnVlKGV4cGVjdGVkSGVpZ2h0ID4gMCk7Ci0gICAg
ICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRXaWR0aCwgZnJhbWUucm90YXRlZFdpZHRoKCkpOwotICAg
ICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkSGVpZ2h0LCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCkpOwot
ICAgICAgLS1leHBlY3RlZEZyYW1lc0RlbGl2ZXJlZDsKLSAgICAgIFZpZGVvUmVuZGVyZXIucmVu
ZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZv
aWQgZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAg
ICBleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXMuYWRkKG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25TaWduYWxpbmdDaGFuZ2Uo
U2lnbmFsaW5nU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFNp
Z25hbGluZ0NoYW5nZXMucmVtb3ZlRmlyc3QoKSwgbmV3U3RhdGUpOwotICAgIH0KLQotICAgIHB1
YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5l
Y3Rpb25TdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgZXhwZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdl
cy5hZGQobmV3U3RhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5j
aHJvbml6ZWQgdm9pZCBvbkljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlIG5l
d1N0YXRlKSB7Ci0gICAgICAvLyBUT0RPKGJlbWFzYyk6IHJlbW92ZSBvbmNlIGRlbGl2ZXJ5IG9m
IElDRUNvbXBsZXRlZCBpcyByZWxpYWJsZQotICAgICAgLy8gKGh0dHBzOi8vY29kZS5nb29nbGUu
Y29tL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9MzAyMSkuCi0gICAgICBpZiAobmV3U3RhdGUu
ZXF1YWxzKEljZUNvbm5lY3Rpb25TdGF0ZS5DT01QTEVURUQpKSB7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLQotICAgICAgaWYgKGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuYW1lICsgIkdvdCBhbiB1bmV4cGVj
dGVkIGljZSBjb25uZWN0aW9uIGNoYW5nZSAiICsgbmV3U3RhdGUpOwotICAgICAgICByZXR1cm47
Ci0gICAgICB9Ci0KLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFu
Z2VzLnJlbW92ZUZpcnN0KCksIG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25JY2VDb25uZWN0aW9uUmVjZWl2aW5nQ2hhbmdl
KGJvb2xlYW4gcmVjZWl2aW5nKSB7Ci0gICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICJH
b3QgYW4gaWNlIGNvbm5lY3Rpb24gcmVjZWl2aW5nIGNoYW5nZSAiICsgcmVjZWl2aW5nKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0SWNlR2F0aGVyaW5nQ2hh
bmdlKEljZUdhdGhlcmluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBleHBlY3RlZEljZUdhdGhl
cmluZ0NoYW5nZXMuYWRkKG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5n
U3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIC8vIEl0J3MgZmluZSB0byBnZXQgYSB2YXJpYWJsZSBu
dW1iZXIgb2YgR0FUSEVSSU5HIG1lc3NhZ2VzIGJlZm9yZQotICAgICAgLy8gQ09NUExFVEUgZmly
ZXMgKGRlcGVuZGluZyBvbiBob3cgbG9uZyB0aGUgdGVzdCBydW5zKSBzbyB3ZSBkb24ndCBhc3Nl
cnQKLSAgICAgIC8vIGFueSBwYXJ0aWN1bGFyIGNvdW50LgotICAgICAgaWYgKG5ld1N0YXRlID09
IEljZUdhdGhlcmluZ1N0YXRlLkdBVEhFUklORykgewotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzLnJlbW92ZUZp
cnN0KCksIG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
ZXhwZWN0QWRkU3RyZWFtKFN0cmluZyBsYWJlbCkgewotICAgICAgZXhwZWN0ZWRBZGRTdHJlYW1M
YWJlbHMuYWRkKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3lu
Y2hyb25pemVkIHZvaWQgb25BZGRTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAgICBh
c3NlcnRFcXVhbHMoZXhwZWN0ZWRBZGRTdHJlYW1MYWJlbHMucmVtb3ZlRmlyc3QoKSwgc3RyZWFt
LmxhYmVsKCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN0cmVhbS52aWRlb1RyYWNrcy5zaXpl
KCkpOwotICAgICAgYXNzZXJ0RXF1YWxzKDEsIHN0cmVhbS5hdWRpb1RyYWNrcy5zaXplKCkpOwot
ICAgICAgYXNzZXJ0VHJ1ZShzdHJlYW0udmlkZW9UcmFja3MuZ2V0KDApLmlkKCkuZW5kc1dpdGgo
IlZpZGVvVHJhY2siKSk7Ci0gICAgICBhc3NlcnRUcnVlKHN0cmVhbS5hdWRpb1RyYWNrcy5nZXQo
MCkuaWQoKS5lbmRzV2l0aCgiQXVkaW9UcmFjayIpKTsKLSAgICAgIGFzc2VydEVxdWFscygidmlk
ZW8iLCBzdHJlYW0udmlkZW9UcmFja3MuZ2V0KDApLmtpbmQoKSk7Ci0gICAgICBhc3NlcnRFcXVh
bHMoImF1ZGlvIiwgc3RyZWFtLmF1ZGlvVHJhY2tzLmdldCgwKS5raW5kKCkpOwotICAgICAgVmlk
ZW9SZW5kZXJlciByZW5kZXJlciA9IGNyZWF0ZVZpZGVvUmVuZGVyZXIodGhpcyk7Ci0gICAgICBz
dHJlYW0udmlkZW9UcmFja3MuZ2V0KDApLmFkZFJlbmRlcmVyKHJlbmRlcmVyKTsKLSAgICAgIGFz
c2VydE51bGwocmVuZGVyZXJzLnB1dChzdHJlYW0sIG5ldyBXZWFrUmVmZXJlbmNlPFZpZGVvUmVu
ZGVyZXI+KHJlbmRlcmVyKSkpOwotICAgICAgZ290UmVtb3RlU3RyZWFtcy5hZGQoc3RyZWFtKTsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0UmVtb3ZlU3RyZWFt
KFN0cmluZyBsYWJlbCkgewotICAgICAgZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMuYWRkKGxh
YmVsKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZv
aWQgb25SZW1vdmVTdHJlYW0oTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAgICBhc3NlcnRFcXVh
bHMoZXhwZWN0ZWRSZW1vdmVTdHJlYW1MYWJlbHMucmVtb3ZlRmlyc3QoKSwgc3RyZWFtLmxhYmVs
KCkpOwotICAgICAgV2Vha1JlZmVyZW5jZTxWaWRlb1JlbmRlcmVyPiByZW5kZXJlciA9IHJlbmRl
cmVycy5yZW1vdmUoc3RyZWFtKTsKLSAgICAgIGFzc2VydE5vdE51bGwocmVuZGVyZXIpOwotICAg
ICAgYXNzZXJ0Tm90TnVsbChyZW5kZXJlci5nZXQoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoMSwg
c3RyZWFtLnZpZGVvVHJhY2tzLnNpemUoKSk7Ci0gICAgICBzdHJlYW0udmlkZW9UcmFja3MuZ2V0
KDApLnJlbW92ZVJlbmRlcmVyKHJlbmRlcmVyLmdldCgpKTsKLSAgICAgIGdvdFJlbW90ZVN0cmVh
bXMucmVtb3ZlKHN0cmVhbSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lk
IGV4cGVjdERhdGFDaGFubmVsKFN0cmluZyBsYWJlbCkgewotICAgICAgZXhwZWN0ZWRSZW1vdGVE
YXRhQ2hhbm5lbExhYmVscy5hZGQobGFiZWwpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkRhdGFDaGFubmVsKERhdGFDaGFubmVsIHJlbW90
ZURhdGFDaGFubmVsKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRSZW1vdGVEYXRhQ2hh
bm5lbExhYmVscy5yZW1vdmVGaXJzdCgpLCByZW1vdGVEYXRhQ2hhbm5lbC5sYWJlbCgpKTsKLSAg
ICAgIHNldERhdGFDaGFubmVsKHJlbW90ZURhdGFDaGFubmVsKTsKLSAgICAgIGFzc2VydEVxdWFs
cyhEYXRhQ2hhbm5lbC5TdGF0ZS5DT05ORUNUSU5HLCBkYXRhQ2hhbm5lbC5zdGF0ZSgpKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0UmVuZWdvdGlhdGlvbk5l
ZWRlZCgpIHsKLSAgICAgICsrZXhwZWN0ZWRSZW5lZ290aWF0aW9uczsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25SZW5lZ290aWF0aW9uTmVl
ZGVkKCkgewotICAgICAgYXNzZXJ0VHJ1ZSgtLWV4cGVjdGVkUmVuZWdvdGlhdGlvbnMgPj0gMCk7
Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdE1lc3NhZ2UoQnl0
ZUJ1ZmZlciBleHBlY3RlZEJ1ZmZlciwgYm9vbGVhbiBleHBlY3RlZEJpbmFyeSkgewotICAgICAg
ZXhwZWN0ZWRCdWZmZXJzLmFkZChuZXcgRGF0YUNoYW5uZWwuQnVmZmVyKGV4cGVjdGVkQnVmZmVy
LCBleHBlY3RlZEJpbmFyeSkpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCBvbk1lc3NhZ2UoRGF0YUNoYW5uZWwuQnVmZmVyIGJ1ZmZlcikgewot
ICAgICAgRGF0YUNoYW5uZWwuQnVmZmVyIGV4cGVjdGVkID0gZXhwZWN0ZWRCdWZmZXJzLnJlbW92
ZUZpcnN0KCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQuYmluYXJ5LCBidWZmZXIuYmlu
YXJ5KTsKLSAgICAgIGFzc2VydFRydWUoZXhwZWN0ZWQuZGF0YS5lcXVhbHMoYnVmZmVyLmRhdGEp
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
b25CdWZmZXJlZEFtb3VudENoYW5nZShsb25nIHByZXZpb3VzQW1vdW50KSB7Ci0gICAgICBhc3Nl
cnRGYWxzZShwcmV2aW91c0Ftb3VudCA9PSBkYXRhQ2hhbm5lbC5idWZmZXJlZEFtb3VudCgpKTsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25T
dGF0ZUNoYW5nZSgpIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFN0YXRlQ2hhbmdlcy5y
ZW1vdmVGaXJzdCgpLCBkYXRhQ2hhbm5lbC5zdGF0ZSgpKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
c3luY2hyb25pemVkIHZvaWQgZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUgc3Rh
dGUpIHsKLSAgICAgIGV4cGVjdGVkU3RhdGVDaGFuZ2VzLmFkZChzdGF0ZSk7Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uQ29tcGxldGUoU3Rh
dHNSZXBvcnRbXSByZXBvcnRzKSB7Ci0gICAgICBpZiAoLS1leHBlY3RlZFN0YXRzQ2FsbGJhY2tz
IDwgMCkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVW5leHBlY3RlZCBz
dGF0cyByZXBvcnQ6ICIgKyByZXBvcnRzKTsKLSAgICAgIH0KLSAgICAgIGdvdFN0YXRzUmVwb3J0
cy5hZGQocmVwb3J0cyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4
cGVjdFN0YXRzQ2FsbGJhY2soKSB7Ci0gICAgICArK2V4cGVjdGVkU3RhdHNDYWxsYmFja3M7Ci0g
ICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBMaW5rZWRMaXN0PFN0YXRzUmVwb3J0W10+
IHRha2VTdGF0c1JlcG9ydHMoKSB7Ci0gICAgICBMaW5rZWRMaXN0PFN0YXRzUmVwb3J0W10+IGdv
dCA9IGdvdFN0YXRzUmVwb3J0czsKLSAgICAgIGdvdFN0YXRzUmVwb3J0cyA9IG5ldyBMaW5rZWRM
aXN0PFN0YXRzUmVwb3J0W10+KCk7Ci0gICAgICByZXR1cm4gZ290OwotICAgIH0KLQotICAgIC8v
IFJldHVybiBhIHNldCBvZiBleHBlY3RhdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gc2F0aXNmaWVk
IHlldCwgcG9zc2libHkKLSAgICAvLyBlbXB0eSBpZiBubyBzdWNoIGV4cGVjdGF0aW9ucyBleGlz
dC4KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIFRyZWVTZXQ8U3RyaW5nPiB1bnNhdGlzZmllZEV4
cGVjdGF0aW9ucygpIHsKLSAgICAgIFRyZWVTZXQ8U3RyaW5nPiBzdGlsbFdhaXRpbmdGb3JFeHBl
Y3RhdGlvbnMgPSBuZXcgVHJlZVNldDxTdHJpbmc+KCk7Ci0gICAgICBpZiAoZXhwZWN0ZWRJY2VD
YW5kaWRhdGVzID4gMCkgeyAvLyBTZWUgY29tbWVudCBpbiBvbkljZUNhbmRpZGF0ZS4KLSAgICAg
ICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRJY2VDYW5kaWRhdGVz
Iik7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRFcnJvcnMgIT0gMCkgewotICAgICAgICBz
dGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKCJleHBlY3RlZEVycm9yczogIiArIGV4cGVj
dGVkRXJyb3JzKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXMu
c2l6ZSgpICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgK
LSAgICAgICAgICAgICJleHBlY3RlZFNpZ25hbGluZ0NoYW5nZXM6ICIgKyBleHBlY3RlZFNpZ25h
bGluZ0NoYW5nZXMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZEljZUNvbm5l
Y3Rpb25DaGFuZ2VzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVj
dGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdlczog
IiArIGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAg
IGlmIChleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAg
c3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgKLSAgICAgICAgICAgICJleHBlY3RlZElj
ZUdhdGhlcmluZ0NoYW5nZXM6ICIgKyBleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXMuc2l6ZSgp
KTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZEFkZFN0cmVhbUxhYmVscy5zaXplKCkgIT0g
MCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKAotICAgICAgICAg
ICAgImV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzOiAiICsgZXhwZWN0ZWRBZGRTdHJlYW1MYWJlbHMu
c2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZFJlbW92ZVN0cmVhbUxhYmVscy5z
aXplKCkgIT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKAot
ICAgICAgICAgICAgImV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFiZWxzOiAiICsgZXhwZWN0ZWRSZW1v
dmVTdHJlYW1MYWJlbHMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChleHBlY3RlZEZyYW1l
c0RlbGl2ZXJlZCA+IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFk
ZCgiZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQ6ICIgKyBleHBlY3RlZEZyYW1lc0RlbGl2ZXJlZCk7
Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4cGVjdGVkQnVmZmVycy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRCdWZmZXJzOiAiICsg
ZXhwZWN0ZWRCdWZmZXJzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4cGVjdGVkU3Rh
dGVDaGFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlv
bnMuYWRkKCJleHBlY3RlZFN0YXRlQ2hhbmdlczogIiArIGV4cGVjdGVkU3RhdGVDaGFuZ2VzLnNp
emUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJl
bHMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQo
Ci0gICAgICAgICAgICAiZXhwZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExhYmVsczogIiArIGV4cGVj
dGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAgIGlmIChl
eHBlY3RlZFN0YXRzQ2FsbGJhY2tzICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhw
ZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRTdGF0c0NhbGxiYWNrczogIiArIGV4cGVjdGVkU3RhdHND
YWxsYmFja3MpOwotICAgICAgfQotICAgICAgcmV0dXJuIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0
aW9uczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB3YWl0Rm9yQWxsRXhwZWN0YXRpb25z
VG9CZVNhdGlzZmllZChpbnQgdGltZW91dFNlY29uZHMpIHsKLSAgICAgIC8vIFRPRE8oZmlzY2ht
YW4pOiBwcm9ibGVtcyB3aXRoIHRoaXMgYXBwcm9hY2g6Ci0gICAgICAvLyAtIGNvbWUgdXAgd2l0
aCBzb21ldGhpbmcgYmV0dGVyIHRoYW4gYSBwb2xsIGxvb3AKLSAgICAgIC8vIC0gYXZvaWQgc2Vy
aWFsaXppbmcgZXhwZWN0YXRpb25zIGV4cGxpY2l0bHk7IHRoZSB0ZXN0IGlzIG5vdCBhcyByb2J1
c3QKLSAgICAgIC8vICAgYXMgaXQgY291bGQgYmUgYmVjYXVzZSBpdCBtdXN0IHBsYWNlIGV4cGVj
dGF0aW9ucyBiZXR3ZWVuIHdhaXQKLSAgICAgIC8vICAgc3RhdGVtZW50cyB2ZXJ5IHByZWNpc2Vs
eSAoZS5nLiBmcmFtZSBtdXN0IG5vdCBhcnJpdmUgYmVmb3JlIGl0cwotICAgICAgLy8gICBleHBl
Y3RhdGlvbiwgYW5kIGV4cGVjdGF0aW9uIG11c3Qgbm90IGJlIHJlZ2lzdGVyZWQgc28gZWFybHkg
YXMgdG8KLSAgICAgIC8vICAgc3RhbGwgYSB3YWl0KS4gIFVzZSBjYWxsYmFja3MgdG8gZmlyZSBv
ZmYgZGVwZW5kZW50IHN0ZXBzIGluc3RlYWQgb2YKLSAgICAgIC8vICAgZXhwbGljaXRseSB3YWl0
aW5nLCBzbyB0aGVyZSBjYW4gYmUganVzdCBhIHNpbmdsZSB3YWl0IGF0IHRoZSBlbmQgb2YKLSAg
ICAgIC8vICAgdGhlIHRlc3QuCi0gICAgICBsb25nIGVuZFRpbWUgPSBTeXN0ZW0uY3VycmVudFRp
bWVNaWxsaXMoKSArIDEwMDAgKiB0aW1lb3V0U2Vjb25kczsKLSAgICAgIFRyZWVTZXQ8U3RyaW5n
PiBwcmV2ID0gbnVsbDsKLSAgICAgIFRyZWVTZXQ8U3RyaW5nPiBzdGlsbFdhaXRpbmdGb3JFeHBl
Y3RhdGlvbnMgPSB1bnNhdGlzZmllZEV4cGVjdGF0aW9ucygpOwotICAgICAgd2hpbGUgKCFzdGls
bFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmICghc3RpbGxX
YWl0aW5nRm9yRXhwZWN0YXRpb25zLmVxdWFscyhwcmV2KSkgewotICAgICAgICAgIFN5c3RlbS5v
dXQucHJpbnRsbihuYW1lICsgIiBzdGlsbCB3YWl0aW5nIGF0XG4gICAgIiArIChuZXcgVGhyb3dh
YmxlKCkpLmdldFN0YWNrVHJhY2UoKVsxXQotICAgICAgICAgICAgICArICJcbiAgICBmb3I6ICIg
KyBBcnJheXMudG9TdHJpbmcoc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLnRvQXJyYXkoKSkp
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmRUaW1lIDwgU3lzdGVtLmN1cnJlbnRUaW1lTWls
bGlzKCkpIHsKLSAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICIgdGltZWQgb3V0
IHdhaXRpbmcgZm9yOiAiCi0gICAgICAgICAgICAgICsgQXJyYXlzLnRvU3RyaW5nKHN0aWxsV2Fp
dGluZ0ZvckV4cGVjdGF0aW9ucy50b0FycmF5KCkpKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBUaHJlYWQuc2xlZXAoMTApOwot
ICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdGhy
b3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJldiA9IHN0
aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9uczsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0
YXRpb25zID0gdW5zYXRpc2ZpZWRFeHBlY3RhdGlvbnMoKTsKLSAgICAgIH0KLSAgICAgIGlmIChw
cmV2ID09IG51bGwpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKAotICAgICAgICAgICAg
bmFtZSArICIgZGlkbid0IG5lZWQgdG8gd2FpdCBhdFxuICAgICIgKyAobmV3IFRocm93YWJsZSgp
KS5nZXRTdGFja1RyYWNlKClbMV0pOwotICAgICAgfQotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBtZXRob2RzIHJldHVybiBhIGxpc3Qgb2YgYWxsIGN1cnJlbnRseSBn
YXRoZXJlZCBpY2UgY2FuZGlkYXRlcyBvciB3YWl0cyB1bnRpbAotICAgIC8vIDEgY2FuZGlkYXRl
IGhhdmUgYmVlbiBnYXRoZXJlZC4KLSAgICBwdWJsaWMgTGlzdDxJY2VDYW5kaWRhdGU+IGdldEF0
TGVhc3RPbmVJY2VDYW5kaWRhdGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
ICAgc3luY2hyb25pemVkIChnb3RJY2VDYW5kaWRhdGVzKSB7Ci0gICAgICAgIHdoaWxlIChnb3RJ
Y2VDYW5kaWRhdGVzLmlzRW1wdHkoKSkgewotICAgICAgICAgIGdvdEljZUNhbmRpZGF0ZXMud2Fp
dCgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgTGlua2VkTGlzdDxJY2VDYW5kaWRh
dGU+KGdvdEljZUNhbmRpZGF0ZXMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFNldHMg
dGhlIGV4cGVjdGVkIHJlc29sdXRpb24gZm9yIGFuIE9ic2VydmVyRXhwZWN0YXRpb25zIG9uY2Ug
YSBmcmFtZQotICAvLyBoYXMgYmVlbiBjYXB0dXJlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3Mg
RXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5DYWxsYmFj
a3MgewotICAgIHByaXZhdGUgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2JzZXJ2ZXI7Ci0KLSAgICBw
dWJsaWMgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyKE9ic2VydmVyRXhwZWN0YXRpb25zIG9ic2Vy
dmVyKSB7Ci0gICAgICB0aGlzLm9ic2VydmVyID0gb2JzZXJ2ZXI7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlbmRlckZyYW1lKFZpZGVvUmVu
ZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgICAvLyBCZWNhdXNlIGRpZmZlcmVudCBjYW1l
cmEgZGV2aWNlcyAoZmFrZSAmIHBoeXNpY2FsKSBwcm9kdWNlIGRpZmZlcmVudAotICAgICAgLy8g
cmVzb2x1dGlvbnMsIHdlIG9ubHkgc2FuaXR5LWNoZWNrIHRoZSBzZXQgc2l6ZXMsCi0gICAgICBh
c3NlcnRUcnVlKGZyYW1lLnJvdGF0ZWRXaWR0aCgpID4gMCk7Ci0gICAgICBhc3NlcnRUcnVlKGZy
YW1lLnJvdGF0ZWRIZWlnaHQoKSA+IDApOwotICAgICAgb2JzZXJ2ZXIuc2V0RXhwZWN0ZWRSZXNv
bHV0aW9uKGZyYW1lLnJvdGF0ZWRXaWR0aCgpLCBmcmFtZS5yb3RhdGVkSGVpZ2h0KCkpOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFNkcE9ic2VydmVyTGF0Y2ggaW1wbGVt
ZW50cyBTZHBPYnNlcnZlciB7Ci0gICAgcHJpdmF0ZSBib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsK
LSAgICBwcml2YXRlIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAgPSBudWxsOwotICAgIHByaXZhdGUg
U3RyaW5nIGVycm9yID0gbnVsbDsKLSAgICBwcml2YXRlIENvdW50RG93bkxhdGNoIGxhdGNoID0g
bmV3IENvdW50RG93bkxhdGNoKDEpOwotCi0gICAgcHVibGljIFNkcE9ic2VydmVyTGF0Y2goKSB7
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGVTdWNjZXNzKFNlc3Np
b25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICAgIHRoaXMuc2RwID0gc2RwOwotICAgICAgb25TZXRT
dWNjZXNzKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TZXRT
dWNjZXNzKCkgewotICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICBsYXRjaC5jb3VudERvd24o
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZUZhaWx1
cmUoU3RyaW5nIGVycm9yKSB7Ci0gICAgICBvblNldEZhaWx1cmUoZXJyb3IpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2V0RmFpbHVyZShTdHJpbmcgZXJyb3Ip
IHsKLSAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjsKLSAgICAgIGxhdGNoLmNvdW50RG93bigpOwot
ICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGF3YWl0KCkgewotICAgICAgdHJ5IHsKLSAgICAg
ICAgYXNzZXJ0VHJ1ZShsYXRjaC5hd2FpdCgxMDAwLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpKTsK
LSAgICAgICAgcmV0dXJuIGdldFN1Y2Nlc3MoKTsKLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgfQotICAg
IH0KLQotICAgIHB1YmxpYyBib29sZWFuIGdldFN1Y2Nlc3MoKSB7Ci0gICAgICByZXR1cm4gc3Vj
Y2VzczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU2Vzc2lvbkRlc2NyaXB0aW9uIGdldFNkcCgpIHsK
LSAgICAgIHJldHVybiBzZHA7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRFcnJvcigp
IHsKLSAgICAgIHJldHVybiBlcnJvcjsKLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgaW50IHZpZGVv
V2luZG93c01hcHBlZCA9IC0xOwotCi0gIHByaXZhdGUgc3RhdGljIFZpZGVvUmVuZGVyZXIgY3Jl
YXRlVmlkZW9SZW5kZXJlcihWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB2aWRlb0NhbGxiYWNrcykg
ewotICAgIHJldHVybiBuZXcgVmlkZW9SZW5kZXJlcih2aWRlb0NhbGxiYWNrcyk7Ci0gIH0KLQot
ICAvLyBSZXR1cm4gYSB3ZWFrIHJlZmVyZW5jZSB0byB0ZXN0IHRoYXQgb3duZXJzaGlwIGlzIGNv
cnJlY3RseSBoZWxkIGJ5Ci0gIC8vIFBlZXJDb25uZWN0aW9uLCBub3QgYnkgdGVzdCBjb2RlLgot
ICBwcml2YXRlIHN0YXRpYyBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBhZGRUcmFja3NUb1BD
KFBlZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5LAotICAgICAgUGVlckNvbm5lY3Rpb24gcGMs
IFZpZGVvU291cmNlIHZpZGVvU291cmNlLCBTdHJpbmcgc3RyZWFtTGFiZWwsIFN0cmluZyB2aWRl
b1RyYWNrSWQsCi0gICAgICBTdHJpbmcgYXVkaW9UcmFja0lkLCBWaWRlb1JlbmRlcmVyLkNhbGxi
YWNrcyB2aWRlb0NhbGxiYWNrcykgewotICAgIE1lZGlhU3RyZWFtIGxNUyA9IGZhY3RvcnkuY3Jl
YXRlTG9jYWxNZWRpYVN0cmVhbShzdHJlYW1MYWJlbCk7Ci0gICAgVmlkZW9UcmFjayB2aWRlb1Ry
YWNrID0gZmFjdG9yeS5jcmVhdGVWaWRlb1RyYWNrKHZpZGVvVHJhY2tJZCwgdmlkZW9Tb3VyY2Up
OwotICAgIGFzc2VydE5vdE51bGwodmlkZW9UcmFjayk7Ci0gICAgVmlkZW9SZW5kZXJlciB2aWRl
b1JlbmRlcmVyID0gY3JlYXRlVmlkZW9SZW5kZXJlcih2aWRlb0NhbGxiYWNrcyk7Ci0gICAgYXNz
ZXJ0Tm90TnVsbCh2aWRlb1JlbmRlcmVyKTsKLSAgICB2aWRlb1RyYWNrLmFkZFJlbmRlcmVyKHZp
ZGVvUmVuZGVyZXIpOwotICAgIGxNUy5hZGRUcmFjayh2aWRlb1RyYWNrKTsKLSAgICAvLyBKdXN0
IGZvciBmdW4sIGxldCdzIHJlbW92ZSBhbmQgcmUtYWRkIHRoZSB0cmFjay4KLSAgICBsTVMucmVt
b3ZlVHJhY2sodmlkZW9UcmFjayk7Ci0gICAgbE1TLmFkZFRyYWNrKHZpZGVvVHJhY2spOwotICAg
IGxNUy5hZGRUcmFjaygKLSAgICAgICAgZmFjdG9yeS5jcmVhdGVBdWRpb1RyYWNrKGF1ZGlvVHJh
Y2tJZCwgZmFjdG9yeS5jcmVhdGVBdWRpb1NvdXJjZShuZXcgTWVkaWFDb25zdHJhaW50cygpKSkp
OwotICAgIHBjLmFkZFN0cmVhbShsTVMpOwotICAgIHJldHVybiBuZXcgV2Vha1JlZmVyZW5jZTxN
ZWRpYVN0cmVhbT4obE1TKTsKLSAgfQotCi0gIC8vIFVzZWQgZm9yIG1ha2luZyBzdXJlIHRocmVh
ZCBoYW5kbGVzIGFyZSBub3QgbGVha2VkLgotICAvLyBDYWxsIGluaXRpYWxpemVUaHJlYWRDaGVj
ayBiZWZvcmUgYSB0ZXN0IGFuZCBmaW5hbGl6ZVRocmVhZENoZWNrIGFmdGVyCi0gIC8vIGEgdGVz
dC4KLSAgdm9pZCBpbml0aWFsaXplVGhyZWFkQ2hlY2soKSB7Ci0gICAgU3lzdGVtLmdjKCk7IC8v
IEVuY291cmFnZSBhbnkgR0MtcmVsYXRlZCB0aHJlYWRzIHRvIHN0YXJ0IHVwLgotICAgIHRocmVh
ZHNCZWZvcmVUZXN0ID0gYWxsVGhyZWFkcygpOwotICB9Ci0KLSAgdm9pZCBmaW5hbGl6ZVRocmVh
ZENoZWNrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gVHJlZVNldDxTdHJpbmc+IHRocmVh
ZHNBZnRlclRlc3QgPSBhbGxUaHJlYWRzKCk7Ci0KLSAgICAvLyBUT0RPKHRvbW1pKTogRmlndXJl
IG91dCBhIG1vcmUgcmVsaWFibGUgd2F5IHRvIGRvIHRoaXMgdGVzdC4gIEFzIGlzCi0gICAgLy8g
d2UncmUgc2VlaW5nIHRocmVlIHBvc3NpYmxlICdub3JtYWwnIHNpdHVhdGlvbnM6Ci0gICAgLy8g
MS4gIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0cyBhcmUgZXF1YWwuCi0gICAgLy8gMi4gIGJlZm9yZSBj
b250YWlucyAzIHRocmVhZHMgdGhhdCBkbyBub3QgZXhpc3QgaW4gYWZ0ZXIuCi0gICAgLy8gMy4g
IGFmdGVyIGNvbnRhaW5zIDMgdGhyZWFkcyB0aGF0IGRvIG5vdCBleGlzdCBpbiBiZWZvcmUuCi0g
ICAgLy8KLSAgICAvLyBNYXliZSBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gZG8gdGhlIHRocmVhZCBl
bnVtZXJhdGlvbiBmcm9tIEMrKyBhbmQgZ2V0Ci0gICAgLy8gdGhlIHRocmVhZCBuYW1lcyBhcyB3
ZWxsLCBpbiBvcmRlciB0byBkZXRlcm1pbmUgd2hhdCB0aGVzZSAzIHRocmVhZHMgYXJlLgotCi0g
ICAgLy8gYXNzZXJ0RXF1YWxzKHRocmVhZHNCZWZvcmVUZXN0LCB0aHJlYWRzQWZ0ZXJUZXN0KTsK
LSAgICAvLyBUaHJlYWQuc2xlZXAoMTAwKTsKLSAgfQotCi0gIC8vIFRPRE8oZmlzY2htYW4pIE1P
QVIgdGVzdCBpZGVhczoKLSAgLy8gLSBUZXN0IHRoYXQgUEMucmVtb3ZlU3RyZWFtKCkgd29ya3M7
IHJlcXVpcmVzIGEgc2Vjb25kCi0gIC8vICAgY3JlYXRlT2ZmZXIvY3JlYXRlQW5zd2VyIGRhbmNl
LgotICAvLyAtIGF1ZGl0IGVhY2ggcGxhY2UgdGhhdCB1c2VzIHxjb25zdHJhaW50c3wgZm9yIHNw
ZWNpZnlpbmcgbm9uLXRyaXZpYWwKLSAgLy8gICBjb25zdHJhaW50cyAoYW5kIGVuc3VyZSB0aGV5
J3JlIGhvbm9yZWQpLgotICAvLyAtIHRlc3QgZXJyb3IgY2FzZXMKLSAgLy8gLSBlbnN1cmUgcmVh
c29uYWJsZSBjb3ZlcmFnZSBvZiBfam5pLmNjIGlzIGFjaGlldmVkLiAgQ292ZXJhZ2UgaXMKLSAg
Ly8gICBleHRyYS1pbXBvcnRhbnQgYmVjYXVzZSBvZiBhbGwgdGhlIGZyZWUtdGV4dCAoY2xhc3Mv
bWV0aG9kIG5hbWVzLCBldGMpCi0gIC8vICAgaW4gSk5JLXN0eWxlIHByb2dyYW1taW5nOyBtYWtl
IHN1cmUgbm8gdHlwb3MhCi0gIC8vIC0gVGVzdCB0aGF0IHNodXRkb3duIG1pZC1pbnRlcmFjdGlv
biBpcyBjcmFzaC1mcmVlLgotCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDb21w
bGV0ZVNlc3Npb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBNZXRyaWNzLmVuYWJsZSgpOwot
ICAgIC8vIEFsbG93IGxvb3BiYWNrIGludGVyZmFjZXMgdG9vIHNpbmNlIG91ciBBbmRyb2lkIGRl
dmljZXMgb2Z0ZW4gZG9uJ3QKLSAgICAvLyBoYXZlIHRob3NlLgotICAgIFBlZXJDb25uZWN0aW9u
RmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlv
bnMoKTsKLSAgICBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrID0gMDsKLSAgICBQZWVyQ29ubmVj
dGlvbkZhY3RvcnkgZmFjdG9yeSA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkob3B0aW9ucyk7
Ci0gICAgLy8gVW5jb21tZW50IHRvIGdldCBBTEwgV2ViUlRDIHRyYWNpbmcgYW5kIFNFTlNJVElW
RSBsaWJqaW5nbGUgbG9nZ2luZy4KLSAgICAvLyBOT1RFOiB0aGlzIF9tdXN0XyBoYXBwZW4gd2hp
bGUgfGZhY3Rvcnl8IGlzIGFsaXZlIQotICAgIC8vIExvZ2dpbmcuZW5hYmxlVHJhY2luZygKLSAg
ICAvLyAgICAgIi90bXAvUGVlckNvbm5lY3Rpb25UZXN0LWxvZy50eHQiLAotICAgIC8vICAgICBF
bnVtU2V0Lm9mKExvZ2dpbmcuVHJhY2VMZXZlbC5UUkFDRV9BTEwpLAotICAgIC8vICAgICBMb2dn
aW5nLlNldmVyaXR5LkxTX1NFTlNJVElWRSk7Ci0KLSAgICBNZWRpYUNvbnN0cmFpbnRzIHBjQ29u
c3RyYWludHMgPSBuZXcgTWVkaWFDb25zdHJhaW50cygpOwotICAgIHBjQ29uc3RyYWludHMubWFu
ZGF0b3J5LmFkZChuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoIkR0bHNTcnRwS2V5
QWdyZWVtZW50IiwgInRydWUiKSk7Ci0KLSAgICBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLklj
ZVNlcnZlcj4gaWNlU2VydmVycyA9IG5ldyBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNl
cnZlcj4oKTsKLSAgICBpY2VTZXJ2ZXJzLmFkZChuZXcgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVy
KCJzdHVuOnN0dW4ubC5nb29nbGUuY29tOjE5MzAyIikpOwotICAgIGljZVNlcnZlcnMuYWRkKAot
ICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyKCJ0dXJuOmZha2UuZXhhbXBsZS5j
b20iLCAiZmFrZVVzZXJuYW1lIiwgImZha2VQYXNzd29yZCIpKTsKLSAgICBPYnNlcnZlckV4cGVj
dGF0aW9ucyBvZmZlcmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBPYnNlcnZlckV4cGVjdGF0aW9ucygi
UENUZXN0Om9mZmVyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBvZmZlcmluZ1BDID0KLSAgICAg
ICAgZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihpY2VTZXJ2ZXJzLCBwY0NvbnN0cmFpbnRz
LCBvZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvZmZlcmluZ1BDKTsK
LQotICAgIE9ic2VydmVyRXhwZWN0YXRpb25zIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBP
YnNlcnZlckV4cGVjdGF0aW9ucygiUENUZXN0OmFuc3dlcmVyIik7Ci0gICAgUGVlckNvbm5lY3Rp
b24gYW5zd2VyaW5nUEMgPQotICAgICAgICBmYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKGlj
ZVNlcnZlcnMsIHBjQ29uc3RyYWludHMsIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNz
ZXJ0Tm90TnVsbChhbnN3ZXJpbmdQQyk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHVzZSB0aGUgc2Ft
ZSBjYW1lcmEgZm9yIG9mZmVyZXIgJiBhbnN3ZXJlciwgc28gY3JlYXRlIGl0IGhlcmUKLSAgICAv
LyBpbnN0ZWFkIG9mIGluIGFkZFRyYWNrc1RvUEMuCi0gICAgZmluYWwgQ2FtZXJhRW51bWVyYXRv
ciBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGZhbHNlIC8qIGNhcHR1cmVUb1Rl
eHR1cmUgKi8pOwotICAgIGZpbmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9Ci0gICAg
ICAgIGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygp
WzBdLCBudWxsKTsKLSAgICBmaW5hbCBWaWRlb1NvdXJjZSB2aWRlb1NvdXJjZSA9IGZhY3Rvcnku
Y3JlYXRlVmlkZW9Tb3VyY2UodmlkZW9DYXB0dXJlcik7Ci0gICAgdmlkZW9DYXB0dXJlci5zdGFy
dENhcHR1cmUoNjQwLCA0ODAsIDMwKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBv
TE1TID0KLSAgICAgICAgYWRkVHJhY2tzVG9QQyhmYWN0b3J5LCBvZmZlcmluZ1BDLCB2aWRlb1Nv
dXJjZSwgIm9mZmVyZWRNZWRpYVN0cmVhbSIsICJvZmZlcmVkVmlkZW9UcmFjayIsCi0gICAgICAg
ICAgICAib2ZmZXJlZEF1ZGlvVHJhY2siLCBuZXcgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyKGFu
c3dlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0
UmVuZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIERhdGFDaGFubmVsIG9mZmVyaW5nREMgPSBvZmZl
cmluZ1BDLmNyZWF0ZURhdGFDaGFubmVsKCJvZmZlcmluZ0RDIiwgbmV3IERhdGFDaGFubmVsLklu
aXQoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCJvZmZlcmluZ0RDIiwgb2ZmZXJpbmdEQy5sYWJlbCgp
KTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLnNldERhdGFDaGFubmVsKG9mZmVyaW5nREMp
OwotICAgIFNkcE9ic2VydmVyTGF0Y2ggc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgp
OwotICAgIG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFp
bnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRl
c2NyaXB0aW9uIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSKTsKLSAgICBhc3Nl
cnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgc2RwTGF0Y2gg
PSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBl
Y3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9SRU1PVEVfT0ZGRVIpOwotICAg
IGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RBZGRTdHJlYW0oIm9mZmVyZWRNZWRpYVN0cmVh
bSIpOwotICAgIC8vIFNDVFAgRGF0YUNoYW5uZWxzIGFyZSBhbm5vdW5jZWQgdmlhIE9QRU4gbWVz
c2FnZXMgb3ZlciB0aGUgZXN0YWJsaXNoZWQKLSAgICAvLyBjb25uZWN0aW9uIChub3QgdmlhIFNE
UCksIHNvIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyBjYW4gb25seSByZWdpc3RlcgotICAgIC8vIGV4
cGVjdGluZyB0aGUgY2hhbm5lbCBkdXJpbmcgSUNFLCBiZWxvdy4KLSAgICBhbnN3ZXJpbmdQQy5z
ZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydEVxdWFs
cyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIG9mZmVyaW5nUEMuc2lnbmFs
aW5nU3RhdGUoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3Nl
cnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gICAgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVh
bT4gYUxNUyA9IGFkZFRyYWNrc1RvUEMoZmFjdG9yeSwgYW5zd2VyaW5nUEMsIHZpZGVvU291cmNl
LAotICAgICAgICAiYW5zd2VyZWRNZWRpYVN0cmVhbSIsICJhbnN3ZXJlZFZpZGVvVHJhY2siLCAi
YW5zd2VyZWRBdWRpb1RyYWNrIiwKLSAgICAgICAgbmV3IEV4cGVjdGVkUmVzb2x1dGlvblNldHRl
cihvZmZlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2
ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ1BDLmNyZWF0ZUFuc3dlcihzZHBMYXRjaCwgbmV3IE1l
ZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAg
ICBTZXNzaW9uRGVzY3JpcHRpb24gYW5zd2VyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5BTlNX
RVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwot
Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsKLSAgICBh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsKLQotICAgIG9mZmVy
aW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0
ZS5DT01QTEVURSk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUdhdGhlcmlu
Z0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZS5DT01QTEVURSk7Ci0KLSAgICBzZHBMYXRjaCA9IG5l
dyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNp
Z25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIGFuc3dlcmluZ1BDLnNl
dExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShz
ZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQot
ICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9MT0NBTF9P
RkZFUik7Ci0gICAgb2ZmZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZl
clNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxs
KHNkcExhdGNoLmdldFNkcCgpKTsKLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNo
KCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25h
bGluZ1N0YXRlLlNUQUJMRSk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0QWRkU3Ry
ZWFtKCJhbnN3ZXJlZE1lZGlhU3RyZWFtIik7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0g
ICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25u
ZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLSAgICAvLyBUT0RPKGJlbWFzYyk6IHVuY29tbWVudCBv
bmNlIGRlbGl2ZXJ5IG9mIElDRUNvbXBsZXRlZCBpcyByZWxpYWJsZQotICAgIC8vIChodHRwczov
L2NvZGUuZ29vZ2xlLmNvbS9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTMwMjEpLgotICAgIC8v
Ci0gICAgLy8gb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZSgK
LSAgICAvLyAgICAgSWNlQ29ubmVjdGlvblN0YXRlLkNPTVBMRVRFRCk7Ci0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRl
LkNIRUNLSU5HKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlv
bkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKTsKLQotICAgIG9mZmVyaW5nUEMu
c2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1
ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsK
LQotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldExvY2FsRGVzY3JpcHRpb24oKS50eXBl
LCBvZmZlclNkcC50eXBlKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRSZW1vdGVE
ZXNjcmlwdGlvbigpLnR5cGUsIGFuc3dlclNkcC50eXBlKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5z
d2VyaW5nUEMuZ2V0TG9jYWxEZXNjcmlwdGlvbigpLnR5cGUsIGFuc3dlclNkcC50eXBlKTsKLSAg
ICBhc3NlcnRFcXVhbHMoYW5zd2VyaW5nUEMuZ2V0UmVtb3RlRGVzY3JpcHRpb24oKS50eXBlLCBv
ZmZlclNkcC50eXBlKTsKLQotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldFNlbmRlcnMo
KS5zaXplKCksIDIpOwotICAgIGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldFJlY2VpdmVycygp
LnNpemUoKSwgMik7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlcmluZ1BDLmdldFNlbmRlcnMoKS5z
aXplKCksIDIpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJpbmdQQy5nZXRSZWNlaXZlcnMoKS5z
aXplKCksIDIpOwotCi0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgc29tZSBmcmFtZXMgdG8gYmUg
ZGVsaXZlcmVkIGF0IGVhY2ggZW5kIChudW1iZXIKLSAgICAvLyBjaG9zZW4gYXJiaXRyYXJpbHkp
LgotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEZyYW1lc0RlbGl2ZXJlZCgxMCk7Ci0g
ICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEZyYW1lc0RlbGl2ZXJlZCgxMCk7Ci0KLSAg
ICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5lbC5TdGF0
ZS5PUEVOKTsKLSAgICAvLyBTZWUgY29tbWVudGFyeSBhYm91dCBTQ1RQIERhdGFDaGFubmVscyBh
Ym92ZSBmb3Igd2h5IHRoaXMgaXMgaGVyZS4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhw
ZWN0RGF0YUNoYW5uZWwoIm9mZmVyaW5nREMiKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMu
ZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuT1BFTik7Ci0KLSAgICAvLyBXYWl0
IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNhbmRpZGF0ZSBmcm9tIHRoZSBvZmZlcmluZyBQQyBhbmQg
Zm9yd2FyZCB0aGVtIHRvIHRoZSBhbnN3ZXJpbmcKLSAgICAvLyBQQy4KLSAgICBmb3IgKEljZUNh
bmRpZGF0ZSBjYW5kaWRhdGUgOiBvZmZlcmluZ0V4cGVjdGF0aW9ucy5nZXRBdExlYXN0T25lSWNl
Q2FuZGlkYXRlKCkpIHsKLSAgICAgIGFuc3dlcmluZ1BDLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRh
dGUpOwotICAgIH0KLQotICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0IG9uZSBpY2UgY2FuZGlkYXRl
IGZyb20gdGhlIGFuc3dlcmluZyBQQyBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoZSBvZmZlcmluZwot
ICAgIC8vIFBDLgotICAgIGZvciAoSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA6IGFuc3dlcmluZ0V4
cGVjdGF0aW9ucy5nZXRBdExlYXN0T25lSWNlQ2FuZGlkYXRlKCkpIHsKLSAgICAgIG9mZmVyaW5n
UEMuYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgYXNzZXJ0VHJ1ZShv
ZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChU
SU1FT1VUX1NFQ09ORFMpKTsKLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9ucy53
YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLQot
ICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIG9m
ZmVyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKFBlZXJDb25uZWN0
aW9uLlNpZ25hbGluZ1N0YXRlLlNUQUJMRSwgYW5zd2VyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7
Ci0KLSAgICAvLyBTZXQgYSBiaXRyYXRlIGxpbWl0IGZvciB0aGUgb3V0Z29pbmcgdmlkZW8gc3Ry
ZWFtIGZvciB0aGUgb2ZmZXJlci4KLSAgICBSdHBTZW5kZXIgdmlkZW9TZW5kZXIgPSBudWxsOwot
ICAgIGZvciAoUnRwU2VuZGVyIHNlbmRlciA6IG9mZmVyaW5nUEMuZ2V0U2VuZGVycygpKSB7Ci0g
ICAgICBpZiAoc2VuZGVyLnRyYWNrKCkua2luZCgpLmVxdWFscygidmlkZW8iKSkgewotICAgICAg
ICB2aWRlb1NlbmRlciA9IHNlbmRlcjsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0Tm90TnVs
bCh2aWRlb1NlbmRlcik7Ci0gICAgUnRwUGFyYW1ldGVycyBydHBQYXJhbWV0ZXJzID0gdmlkZW9T
ZW5kZXIuZ2V0UGFyYW1ldGVycygpOwotICAgIGFzc2VydE5vdE51bGwocnRwUGFyYW1ldGVycyk7
Ci0gICAgYXNzZXJ0RXF1YWxzKDEsIHJ0cFBhcmFtZXRlcnMuZW5jb2RpbmdzLnNpemUoKSk7Ci0g
ICAgYXNzZXJ0TnVsbChydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWF4Qml0cmF0ZUJw
cyk7Ci0KLSAgICBydHBQYXJhbWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWF4Qml0cmF0ZUJwcyA9
IDMwMDAwMDsKLSAgICBhc3NlcnRUcnVlKHZpZGVvU2VuZGVyLnNldFBhcmFtZXRlcnMocnRwUGFy
YW1ldGVycykpOwotCi0gICAgLy8gVmVyaWZ5IHRoYXQgd2UgY2FuIHJlYWQgYmFjayB0aGUgdXBk
YXRlZCB2YWx1ZS4KLSAgICBydHBQYXJhbWV0ZXJzID0gdmlkZW9TZW5kZXIuZ2V0UGFyYW1ldGVy
cygpOwotICAgIGFzc2VydEVxdWFscygzMDAwMDAsIChpbnQpIHJ0cFBhcmFtZXRlcnMuZW5jb2Rp
bmdzLmdldCgwKS5tYXhCaXRyYXRlQnBzKTsKLQotICAgIC8vIFRlc3Qgc2VuZCAmIHJlY2VpdmUg
VVRGLTggdGV4dC4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0TWVzc2FnZSgKLSAg
ICAgICAgQnl0ZUJ1ZmZlci53cmFwKCJoZWxsbyEiLmdldEJ5dGVzKENoYXJzZXQuZm9yTmFtZSgi
VVRGLTgiKSkpLCBmYWxzZSk7Ci0gICAgRGF0YUNoYW5uZWwuQnVmZmVyIGJ1ZmZlciA9Ci0gICAg
ICAgIG5ldyBEYXRhQ2hhbm5lbC5CdWZmZXIoQnl0ZUJ1ZmZlci53cmFwKCJoZWxsbyEiLmdldEJ5
dGVzKENoYXJzZXQuZm9yTmFtZSgiVVRGLTgiKSkpLCBmYWxzZSk7Ci0gICAgYXNzZXJ0VHJ1ZShv
ZmZlcmluZ0V4cGVjdGF0aW9ucy5kYXRhQ2hhbm5lbC5zZW5kKGJ1ZmZlcikpOwotICAgIGFzc2Vy
dFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0
aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotCi0gICAgLy8gQ29uc3RydWN0IHRoaXMgYmluYXJ5
IG1lc3NhZ2UgdHdvIGRpZmZlcmVudCB3YXlzIHRvIGVuc3VyZSBubwotICAgIC8vIHNob3J0Y3V0
cyBhcmUgdGFrZW4uCi0gICAgQnl0ZUJ1ZmZlciBleHBlY3RlZEJpbmFyeU1lc3NhZ2UgPSBCeXRl
QnVmZmVyLmFsbG9jYXRlRGlyZWN0KDUpOwotICAgIGZvciAoYnl0ZSBpID0gMTsgaSA8IDY7ICsr
aSkgewotICAgICAgZXhwZWN0ZWRCaW5hcnlNZXNzYWdlLnB1dChpKTsKLSAgICB9Ci0gICAgZXhw
ZWN0ZWRCaW5hcnlNZXNzYWdlLmZsaXAoKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBl
Y3RNZXNzYWdlKGV4cGVjdGVkQmluYXJ5TWVzc2FnZSwgdHJ1ZSk7Ci0gICAgYXNzZXJ0VHJ1ZShh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwuc2VuZCgKLSAgICAgICAgbmV3IERhdGFD
aGFubmVsLkJ1ZmZlcihCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7MSwgMiwgMywgNCwgNX0p
LCB0cnVlKSkpOwotICAgIGFzc2VydFRydWUob2ZmZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZvckFs
bEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0KLSAgICBvZmZl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5lbC5TdGF0ZS5DTE9T
SU5HKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNo
YW5uZWwuU3RhdGUuQ0xPU0lORyk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U3Rh
dGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0VEKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5uZWwuU3RhdGUuQ0xPU0VEKTsKLSAgICBh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwuY2xvc2UoKTsKLSAgICBvZmZlcmluZ0V4
cGVjdGF0aW9ucy5kYXRhQ2hhbm5lbC5jbG9zZSgpOwotCi0gICAgLy8gRnJlZSB0aGUgSmF2YS1s
YW5kIG9iamVjdHMgYW5kIGNvbGxlY3QgdGhlbS4KLSAgICBzaHV0ZG93blBDKG9mZmVyaW5nUEMs
IG9mZmVyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBvZmZlcmluZ1BDID0gbnVsbDsKLSAgICBzaHV0
ZG93blBDKGFuc3dlcmluZ1BDLCBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIGFuc3dlcmlu
Z1BDID0gbnVsbDsKLSAgICBnZXRNZXRyaWNzKCk7Ci0gICAgdmlkZW9DYXB0dXJlci5zdG9wQ2Fw
dHVyZSgpOwotICAgIHZpZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotICAgIHZpZGVvU291cmNlLmRp
c3Bvc2UoKTsKLSAgICBmYWN0b3J5LmRpc3Bvc2UoKTsKLSAgICBTeXN0ZW0uZ2MoKTsKLSAgfQot
Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RUcmFja1JlbW92YWwoKSB0aHJvd3Mg
RXhjZXB0aW9uIHsKLSAgICAvLyBBbGxvdyBsb29wYmFjayBpbnRlcmZhY2VzIHRvbyBzaW5jZSBv
dXIgQW5kcm9pZCBkZXZpY2VzIG9mdGVuIGRvbid0Ci0gICAgLy8gaGF2ZSB0aG9zZS4KLSAgICBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25uZWN0aW9u
RmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9IDA7Ci0g
ICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0
b3J5KG9wdGlvbnMpOwotCi0gICAgTWVkaWFDb25zdHJhaW50cyBwY0NvbnN0cmFpbnRzID0gbmV3
IE1lZGlhQ29uc3RyYWludHMoKTsKLSAgICBwY0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQobmV3
IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKCJEdGxzU3J0cEtleUFncmVlbWVudCIsICJ0
cnVlIikpOwotCi0gICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNl
cnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+KCk7Ci0gICAg
aWNlU2VydmVycy5hZGQobmV3IFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcigic3R1bjpzdHVuLmwu
Z29vZ2xlLmNvbToxOTMwMiIpKTsKLQotICAgIE9ic2VydmVyRXhwZWN0YXRpb25zIG9mZmVyaW5n
RXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0YXRpb25zKCJQQ1Rlc3Q6b2ZmZXJlciIp
OwotICAgIFBlZXJDb25uZWN0aW9uIG9mZmVyaW5nUEMgPQotICAgICAgICBmYWN0b3J5LmNyZWF0
ZVBlZXJDb25uZWN0aW9uKGljZVNlcnZlcnMsIHBjQ29uc3RyYWludHMsIG9mZmVyaW5nRXhwZWN0
YXRpb25zKTsKLSAgICBhc3NlcnROb3ROdWxsKG9mZmVyaW5nUEMpOwotCi0gICAgT2JzZXJ2ZXJF
eHBlY3RhdGlvbnMgYW5zd2VyaW5nRXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0YXRp
b25zKCJQQ1Rlc3Q6YW5zd2VyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBhbnN3ZXJpbmdQQyA9
Ci0gICAgICAgIGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24oaWNlU2VydmVycywgcGNDb25z
dHJhaW50cywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBhc3NlcnROb3ROdWxsKGFuc3dl
cmluZ1BDKTsKLQotICAgIC8vIFdlIHdhbnQgdG8gdXNlIHRoZSBzYW1lIGNhbWVyYSBmb3Igb2Zm
ZXJlciAmIGFuc3dlcmVyLCBzbyBjcmVhdGUgaXQgaGVyZQotICAgIC8vIGluc3RlYWQgb2YgaW4g
YWRkVHJhY2tzVG9QQy4KLSAgICBmaW5hbCBDYW1lcmFFbnVtZXJhdG9yIGVudW1lcmF0b3IgPSBu
ZXcgQ2FtZXJhMUVudW1lcmF0b3IoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyk7Ci0gICAg
ZmluYWwgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0KLSAgICAgICAgZW51bWVyYXRvci5j
cmVhdGVDYXB0dXJlcihlbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF0sIG51bGwpOwotICAg
IGZpbmFsIFZpZGVvU291cmNlIHZpZGVvU291cmNlID0gZmFjdG9yeS5jcmVhdGVWaWRlb1NvdXJj
ZSh2aWRlb0NhcHR1cmVyKTsKLSAgICB2aWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZSg2NDAsIDQ4
MCwgMzApOwotCi0gICAgLy8gQWRkIG9mZmVyZXIgbWVkaWEgc3RyZWFtLgotICAgIG9mZmVyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBXZWFrUmVmZXJl
bmNlPE1lZGlhU3RyZWFtPiBvTE1TID0KLSAgICAgICAgYWRkVHJhY2tzVG9QQyhmYWN0b3J5LCBv
ZmZlcmluZ1BDLCB2aWRlb1NvdXJjZSwgIm9mZmVyZWRNZWRpYVN0cmVhbSIsICJvZmZlcmVkVmlk
ZW9UcmFjayIsCi0gICAgICAgICAgICAib2ZmZXJlZEF1ZGlvVHJhY2siLCBuZXcgRXhwZWN0ZWRS
ZXNvbHV0aW9uU2V0dGVyKGFuc3dlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0gICAgLy8gQ3JlYXRl
IG9mZmVyLgotICAgIFNkcE9ic2VydmVyTGF0Y2ggc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJM
YXRjaCgpOwotICAgIG9mZmVyaW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNv
bnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vz
c2lvbkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSKTsKLSAg
ICBhc3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgLy8g
U2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNk
cE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxp
bmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9MT0NBTF9PRkZFUik7Ci0gICAgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlkYXRlcygyKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUuQ09NUExFVEUp
OwotICAgIG9mZmVyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHAp
OwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBM
YXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZvciBhbnN3
ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2Vy
aW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZF
X1JFTU9URV9PRkZFUik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEFkZFN0cmVh
bSgib2ZmZXJlZE1lZGlhU3RyZWFtIik7Ci0gICAgYW5zd2VyaW5nUEMuc2V0UmVtb3RlRGVzY3Jp
cHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0
KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gQWRkIGFu
c3dlcmVyIG1lZGlhIHN0cmVhbS4KLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVu
ZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIFdlYWtSZWZlcmVuY2U8TWVkaWFTdHJlYW0+IGFMTVMg
PSBhZGRUcmFja3NUb1BDKGZhY3RvcnksIGFuc3dlcmluZ1BDLCB2aWRlb1NvdXJjZSwKLSAgICAg
ICAgImFuc3dlcmVkTWVkaWFTdHJlYW0iLCAiYW5zd2VyZWRWaWRlb1RyYWNrIiwgImFuc3dlcmVk
QXVkaW9UcmFjayIsCi0gICAgICAgIG5ldyBFeHBlY3RlZFJlc29sdXRpb25TZXR0ZXIob2ZmZXJp
bmdFeHBlY3RhdGlvbnMpKTsKLQotICAgIC8vIENyZWF0ZSBhbnN3ZXIuCi0gICAgc2RwTGF0Y2gg
PSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ1BDLmNyZWF0ZUFuc3dlcihz
ZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRj
aC5hd2FpdCgpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gYW5zd2VyU2RwID0gc2RwTGF0Y2gu
Z2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBTZXNzaW9uRGVzY3Jp
cHRpb24uVHlwZS5BTlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNkcC5kZXNjcmlwdGlv
bi5pc0VtcHR5KCkpOwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBhbnN3ZXJl
ci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUp
OwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDYW5kaWRhdGVzKDIpOwotICAg
IGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVy
aW5nU3RhdGUuQ09NUExFVEUpOwotICAgIGFuc3dlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24o
c2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsK
LSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUg
ZGVzY3JpcHRpb24gZm9yIG9mZmVyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJM
YXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShT
aWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEFk
ZFN0cmVhbSgiYW5zd2VyZWRNZWRpYVN0cmVhbSIpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlv
bnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcp
OwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNl
Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0gICAgLy8gVE9ETyhiZW1hc2MpOiB1bmNvbW1l
bnQgb25jZSBkZWxpdmVyeSBvZiBJQ0VDb21wbGV0ZWQgaXMgcmVsaWFibGUKLSAgICAvLyAoaHR0
cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD0zMDIxKS4KLSAg
ICAvLwotICAgIC8vIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFu
Z2UoCi0gICAgLy8gICAgIEljZUNvbm5lY3Rpb25TdGF0ZS5DT01QTEVURUQpOwotICAgIGFuc3dl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25T
dGF0ZS5DSEVDS0lORyk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5l
Y3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0KLSAgICBvZmZlcmlu
Z1BDLnNldFJlbW90ZURlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2Vy
dFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAo
KSk7Ci0KLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNhbmRpZGF0ZSBmcm9tIHRo
ZSBvZmZlcmluZyBQQyBhbmQgZm9yd2FyZCB0aGVtIHRvIHRoZSBhbnN3ZXJpbmcKLSAgICAvLyBQ
Qy4KLSAgICBmb3IgKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBvZmZlcmluZ0V4cGVjdGF0aW9u
cy5nZXRBdExlYXN0T25lSWNlQ2FuZGlkYXRlKCkpIHsKLSAgICAgIGFuc3dlcmluZ1BDLmFkZElj
ZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIH0KLQotICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0
IG9uZSBpY2UgY2FuZGlkYXRlIGZyb20gdGhlIGFuc3dlcmluZyBQQyBhbmQgZm9yd2FyZCB0aGVt
IHRvIHRoZSBvZmZlcmluZwotICAgIC8vIFBDLgotICAgIGZvciAoSWNlQ2FuZGlkYXRlIGNhbmRp
ZGF0ZSA6IGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5nZXRBdExlYXN0T25lSWNlQ2FuZGlkYXRlKCkp
IHsKLSAgICAgIG9mZmVyaW5nUEMuYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgfQot
Ci0gICAgLy8gV2FpdCBmb3Igb25lIGZyYW1lIG9mIHRoZSBjb3JyZWN0IHNpemUgdG8gYmUgZGVs
aXZlcmVkLgotICAgIC8vIE90aGVyd2lzZSB3ZSBjb3VsZCBnZXQgYSBkdW1teSBibGFjayBmcmFt
ZSBvZiB1bmV4cGN0ZWQgc2l6ZSB3aGVuIHRoZQotICAgIC8vIHZpZGVvIHRyYWNrIGlzIHJlbW92
ZWQuCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0RnJhbWVzRGVsaXZlcmVkKDEpOwot
ICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RGcmFtZXNEZWxpdmVyZWQoMSk7Ci0KLSAg
ICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNU
b0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotICAgIGFzc2VydFRydWUoYW5zd2VyaW5n
RXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRf
U0VDT05EUykpOwotCi0gICAgYXNzZXJ0RXF1YWxzKFBlZXJDb25uZWN0aW9uLlNpZ25hbGluZ1N0
YXRlLlNUQUJMRSwgb2ZmZXJpbmdQQy5zaWduYWxpbmdTdGF0ZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGUuU1RBQkxFLCBhbnN3ZXJpbmdQQy5zaWdu
YWxpbmdTdGF0ZSgpKTsKLQotICAgIC8vIE5vdyBkbyBhbm90aGVyIG5lZ290aWF0aW9uLCByZW1v
dmluZyB0aGUgdmlkZW8gdHJhY2sgZnJvbSBvbmUgcGVlci4KLSAgICAvLyBUaGlzIHByZXZpb3Vz
bHkgY2F1c2VkIGEgY3Jhc2ggb24gcGMuZGlzcG9zZSgpLgotICAgIC8vIFNlZTogaHR0cHM6Ly9i
dWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTUxMjgKLSAgICBWaWRl
b1RyYWNrIG9mZmVyZXJWaWRlb1RyYWNrID0gb0xNUy5nZXQoKS52aWRlb1RyYWNrcy5nZXQoMCk7
Ci0gICAgLy8gTm90ZSB0aGF0IHdoZW4gd2UgY2FsbCByZW1vdmVUcmFjaywgd2UgcmVnYWluIHJl
c3BvbnNpYmlsaXR5IGZvcgotICAgIC8vIGRpc3Bvc2luZyBvZiB0aGUgdHJhY2suCi0gICAgb0xN
Uy5nZXQoKS5yZW1vdmVUcmFjayhvZmZlcmVyVmlkZW9UcmFjayk7Ci0KLSAgICAvLyBDcmVhdGUg
b2ZmZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVy
aW5nUEMuY3JlYXRlT2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAg
IGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgb2ZmZXJTZHAgPSBzZHBMYXRjaC5n
ZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0
aW9uLlR5cGUuT0ZGRVIpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyU2RwLmRlc2NyaXB0aW9uLmlz
RW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIG9mZmVyZXIuCi0g
ICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0
YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX0xPQ0FMX09G
RkVSKTsKLSAgICBvZmZlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVy
U2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwo
c2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBmb3Ig
YW5zd2VyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFu
c3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUu
SEFWRV9SRU1PVEVfT0ZGRVIpOwotICAgIGFuc3dlcmluZ1BDLnNldFJlbW90ZURlc2NyaXB0aW9u
KHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsK
LSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIENyZWF0ZSBhbnN3
ZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmlu
Z1BDLmNyZWF0ZUFuc3dlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAg
YXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhbnN3ZXJTZHAgPSBzZHBMYXRjaC5n
ZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlw
dGlvbi5UeXBlLkFOU1dFUik7Ci0gICAgYXNzZXJ0RmFsc2UoYW5zd2VyU2RwLmRlc2NyaXB0aW9u
LmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVy
LgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJMRSk7
Ci0gICAgYW5zd2VyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2Rw
KTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2Rw
TGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBmb3Igb2Zm
ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJp
bmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJM
RSk7Ci0gICAgb2ZmZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2Vy
U2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwo
c2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSB0cmFjayB3YXMgcmVh
bGx5IHJlbW92ZWQuCi0gICAgLy8gVE9ETyhkZWFkYmVlZik6IEN1cnJlbnRseSB0aGUgZXhwZWN0
YXRpb24gaXMgdGhhdCB0aGUgdmlkZW8gdHJhY2sncwotICAgIC8vIHN0YXRlIHdpbGwgYmUgc2V0
IHRvICJlbmRlZCIuIEhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIGl0J3MgbGlrZWx5IHRoYXQKLSAg
ICAvLyB0aGUgdmlkZW8gdHJhY2sgd2lsbCBiZSBjb21wbGV0ZWx5IHJlbW92ZWQgZnJvbSB0aGUg
cmVtb3RlIHN0cmVhbQotICAgIC8vIChhcyBpdCBpcyBvbiB0aGUgQysrIGxldmVsKS4KLSAgICBN
ZWRpYVN0cmVhbSBhUk1TID0gYW5zd2VyaW5nRXhwZWN0YXRpb25zLmdvdFJlbW90ZVN0cmVhbXMu
aXRlcmF0b3IoKS5uZXh0KCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFSTVMudmlkZW9UcmFja3MuZ2V0
KDApLnN0YXRlKCksIE1lZGlhU3RyZWFtVHJhY2suU3RhdGUuRU5ERUQpOwotCi0gICAgLy8gRmlu
YWxseSwgcmVtb3ZlIHRoZSBhdWRpbyB0cmFjayBhcyB3ZWxsLCB3aGljaCBzaG91bGQgY29tcGxl
dGVseSByZW1vdmUKLSAgICAvLyB0aGUgcmVtb3RlIHN0cmVhbS4gVGhpcyB1c2VkIHRvIHRyaWdn
ZXIgYW4gYXNzZXJ0LgotICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dl
YnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTUxMjgKLSAgICBBdWRpb1RyYWNrIG9mZmVyZXJBdWRpb1Ry
YWNrID0gb0xNUy5nZXQoKS5hdWRpb1RyYWNrcy5nZXQoMCk7Ci0gICAgb0xNUy5nZXQoKS5yZW1v
dmVUcmFjayhvZmZlcmVyQXVkaW9UcmFjayk7Ci0KLSAgICAvLyBDcmVhdGUgb2ZmZXIuCi0gICAg
c2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nUEMuY3JlYXRl
T2ZmZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUo
c2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgb2ZmZXJTZHAgPSBzZHBMYXRjaC5nZXRTZHAoKTsKLSAg
ICBhc3NlcnRFcXVhbHMob2ZmZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuT0ZG
RVIpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyU2RwLmRlc2NyaXB0aW9uLmlzRW1wdHkoKSk7Ci0K
LSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIG9mZmVyZXIuCi0gICAgc2RwTGF0Y2gg
PSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX0xPQ0FMX09GRkVSKTsKLSAgICBv
ZmZlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAgICBh
c3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0
U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBmb3IgYW5zd2VyZXIuCi0g
ICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9SRU1PVEVf
T0ZGRVIpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW1vdmVTdHJlYW0oIm9m
ZmVyZWRNZWRpYVN0cmVhbSIpOwotICAgIGFuc3dlcmluZ1BDLnNldFJlbW90ZURlc2NyaXB0aW9u
KHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsK
LSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIENyZWF0ZSBhbnN3
ZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmlu
Z1BDLmNyZWF0ZUFuc3dlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAg
YXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhbnN3ZXJTZHAgPSBzZHBMYXRjaC5n
ZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlw
dGlvbi5UeXBlLkFOU1dFUik7Ci0gICAgYXNzZXJ0RmFsc2UoYW5zd2VyU2RwLmRlc2NyaXB0aW9u
LmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVy
LgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJMRSk7
Ci0gICAgYW5zd2VyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2Rw
KTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2Rw
TGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBmb3Igb2Zm
ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJp
bmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJM
RSk7Ci0gICAgb2ZmZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2Vy
U2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwo
c2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBzdHJlYW0gd2FzIHJl
YWxseSByZW1vdmVkLgotICAgIGFzc2VydFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25zLmdvdFJl
bW90ZVN0cmVhbXMuaXNFbXB0eSgpKTsKLQotICAgIC8vIEZyZWUgdGhlIEphdmEtbGFuZCBvYmpl
Y3RzIGFuZCBjb2xsZWN0IHRoZW0uCi0gICAgc2h1dGRvd25QQyhvZmZlcmluZ1BDLCBvZmZlcmlu
Z0V4cGVjdGF0aW9ucyk7Ci0gICAgb2ZmZXJpbmdQQyA9IG51bGw7Ci0gICAgc2h1dGRvd25QQyhh
bnN3ZXJpbmdQQywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBhbnN3ZXJpbmdQQyA9IG51
bGw7Ci0gICAgb2ZmZXJlclZpZGVvVHJhY2suZGlzcG9zZSgpOwotICAgIG9mZmVyZXJBdWRpb1Ry
YWNrLmRpc3Bvc2UoKTsKLSAgICB2aWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgdmlk
ZW9DYXB0dXJlci5kaXNwb3NlKCk7Ci0gICAgdmlkZW9Tb3VyY2UuZGlzcG9zZSgpOwotICAgIGZh
Y3RvcnkuZGlzcG9zZSgpOwotICAgIFN5c3RlbS5nYygpOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBnZXRNZXRyaWNzKCkgewotICAgIE1ldHJpY3MgbWV0cmljcyA9IE1ldHJpY3MuZ2V0
QW5kUmVzZXQoKTsKLSAgICBhc3NlcnRUcnVlKG1ldHJpY3MubWFwLnNpemUoKSA+IDApOwotICAg
IC8vIFRlc3QgZm9yIGV4YW1wbGUgdGhhdCB0aGUgbGlmZXRpbWUgb2YgYSBDYWxsIGlzIHJlY29y
ZGVkLgotICAgIFN0cmluZyBuYW1lID0gIldlYlJUQy5DYWxsLkxpZmV0aW1lSW5TZWNvbmRzIjsK
LSAgICBhc3NlcnRUcnVlKG1ldHJpY3MubWFwLmNvbnRhaW5zS2V5KG5hbWUpKTsKLSAgICBIaXN0
b2dyYW1JbmZvIGluZm8gPSBtZXRyaWNzLm1hcC5nZXQobmFtZSk7Ci0gICAgYXNzZXJ0VHJ1ZShp
bmZvLnNhbXBsZXMuc2l6ZSgpID4gMCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIHNo
dXRkb3duUEMoUGVlckNvbm5lY3Rpb24gcGMsIE9ic2VydmVyRXhwZWN0YXRpb25zIGV4cGVjdGF0
aW9ucykgewotICAgIGlmIChleHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwgIT0gbnVsbCkgewotICAg
ICAgZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLnVucmVnaXN0ZXJPYnNlcnZlcigpOwotICAgICAg
ZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLmRpc3Bvc2UoKTsKLSAgICB9Ci0gICAgZXhwZWN0YXRp
b25zLmV4cGVjdFN0YXRzQ2FsbGJhY2soKTsKLSAgICBhc3NlcnRUcnVlKHBjLmdldFN0YXRzKGV4
cGVjdGF0aW9ucywgbnVsbCkpOwotICAgIGFzc2VydFRydWUoZXhwZWN0YXRpb25zLndhaXRGb3JB
bGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotICAgIGV4cGVj
dGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DTE9T
RUQpOwotICAgIGV4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3Rh
dGUuQ0xPU0VEKTsKLSAgICBwYy5jbG9zZSgpOwotICAgIGFzc2VydFRydWUoZXhwZWN0YXRpb25z
LndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwot
ICAgIGV4cGVjdGF0aW9ucy5leHBlY3RTdGF0c0NhbGxiYWNrKCk7Ci0gICAgYXNzZXJ0VHJ1ZShw
Yy5nZXRTdGF0cyhleHBlY3RhdGlvbnMsIG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKGV4cGVjdGF0
aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMp
KTsKLQotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRllJIHN0YXRzOiAiKTsKLSAgICBpbnQgcmVw
b3J0SW5kZXggPSAtMTsKLSAgICBmb3IgKFN0YXRzUmVwb3J0W10gcmVwb3J0cyA6IGV4cGVjdGF0
aW9ucy50YWtlU3RhdHNSZXBvcnRzKCkpIHsKLSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiIFJl
cG9ydCAjIiArICgrK3JlcG9ydEluZGV4KSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJl
cG9ydHMubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgICIgKyBy
ZXBvcnRzW2ldLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnRFcXVhbHMo
MSwgcmVwb3J0SW5kZXgpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW5kIHN0YXRzLiIpOwot
Ci0gICAgcGMuZGlzcG9zZSgpOwotICB9Ci0KLSAgLy8gUmV0dXJucyBhIHNldCBvZiB0aHJlYWQg
SURzIGJlbG9uZ2luZyB0byB0aGlzIHByb2Nlc3MsIGFzIFN0cmluZ3MuCi0gIHByaXZhdGUgc3Rh
dGljIFRyZWVTZXQ8U3RyaW5nPiBhbGxUaHJlYWRzKCkgewotICAgIFRyZWVTZXQ8U3RyaW5nPiB0
aHJlYWRzID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOwotICAgIC8vIFRoaXMgcG9rZXMgYXQgL3By
b2MgaW5zdGVhZCBvZiB1c2luZyB0aGUgSmF2YSBBUElzIGJlY2F1c2Ugd2UncmUgYWxzbwotICAg
IC8vIGxvb2tpbmcgZm9yIGxpYmppbmdsZS93ZWJydGMgbmF0aXZlIHRocmVhZHMsIG1vc3Qgb2Yg
d2hpY2ggd29uJ3QgaGF2ZQotICAgIC8vIGF0dGFjaGVkIHRvIHRoZSBKVk0uCi0gICAgZm9yIChT
dHJpbmcgdGhyZWFkSWQgOiAobmV3IEZpbGUoIi9wcm9jL3NlbGYvdGFzayIpKS5saXN0KCkpIHsK
LSAgICAgIHRocmVhZHMuYWRkKHRocmVhZElkKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRocmVhZHM7
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21tb25UZXN0LmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vblRlc3QuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vblRlc3Qu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE4MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5SZW5kZXJl
ckNvbW1vbi5TY2FsaW5nVHlwZS4qOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJlbmRlcmVy
Q29tbW9uLmdldERpc3BsYXlTaXplOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJlbmRlcmVy
Q29tbW9uLmdldExheW91dE1hdHJpeDsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5SZW5kZXJl
ckNvbW1vbi5yb3RhdGVUZXh0dXJlTWF0cml4OwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Q
b2ludDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9ydCBhbmRy
b2lkLnRlc3QuTW9yZUFzc2VydHM7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5h
bm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFJlbmRlcmVyQ29tbW9u
VGVzdCBleHRlbmRzIEFjdGl2aXR5VGVzdENhc2UgewotICBAU21hbGxUZXN0Ci0gIHN0YXRpYyBw
dWJsaWMgdm9pZCB0ZXN0RGlzcGxheVNpemVOb0ZyYW1lKCkgewotICAgIGFzc2VydEVxdWFscyhu
ZXcgUG9pbnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDAuMGYsIDAs
IDApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5U2l6ZShT
Q0FMRV9BU1BFQ1RfRklMTCwgMC4wZiwgMCwgMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9p
bnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMC4wZiwgMCwg
MCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdERpc3Bs
YXlTaXplRGVnZW5lcmF0ZUFzcGVjdFJhdGlvKCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgUG9p
bnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMC4wZiwgMTI4
MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNw
bGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgMC4wZiwgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1Rf
QkFMQU5DRUQsIDAuMGYsIDEyODAsIDcyMCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJs
aWMgc3RhdGljIHZvaWQgdGVzdFplcm9EaXNwbGF5U2l6ZSgpIHsKLSAgICBhc3NlcnRFcXVhbHMo
bmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAxNi4wZiAv
IDksIDAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5
U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgMTYuMGYgLyA5LCAwLCAwKSk7Ci0gICAgYXNzZXJ0RXF1
YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VE
LCAxNi4wZiAvIDksIDAsIDApKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRp
YyB2b2lkIHRlc3REaXNwbGF5U2l6ZVBlcmZlY3RGaXQoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5l
dyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAxNi4w
ZiAvIDksIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIw
KSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDE2LjBmIC8gOSwgMTI4MCwgNzIw
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6
ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDE2LjBmIC8gOSwgMTI4MCwgNzIwKSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDEyODApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BF
Q1RfRklULCA5LjBmIC8gMTYsIDcyMCwgMTI4MCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9p
bnQoNzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDkuMGYgLyAx
NiwgNzIwLCAxMjgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDEyODApLCBn
ZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDkuMGYgLyAxNiwgNzIwLCAxMjgw
KSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGFuZHNj
YXBlVmlkZW9JblBvcnRyYWl0RGlzcGxheSgpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50
KDcyMCwgNDA1KSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMTYuMGYgLyA5LCA3
MjAsIDEyODApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDcyMCwgMTI4MCksIGdldERp
c3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCAxNi4wZiAvIDksIDcyMCwgMTI4MCkpOwotICAg
IGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9B
U1BFQ1RfQkFMQU5DRUQsIDE2LjBmIC8gOSwgNzIwLCAxMjgwKSk7Ci0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0UG9ydHJhaXRWaWRlb0luTGFuZHNjYXBlRGlz
cGxheSgpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDQwNSwgNzIwKSwgZ2V0RGlzcGxh
eVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgOS4wZiAvIDE2LCAxMjgwLCA3MjApKTsKLSAgICBhc3Nl
cnRFcXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVD
VF9GSUxMLCA5LjBmIC8gMTYsIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9p
bnQoNzIwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDkuMGYg
LyAxNiwgMTI4MCwgNzIwKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMg
dm9pZCB0ZXN0Rm91clRvVGhyZWVWaWRlb0luU2l4dGVlblRvTmluZURpc3BsYXkoKSB7Ci0gICAg
YXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg5NjAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FT
UEVDVF9GSVQsIDQuMGYgLyAzLCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBv
aW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCA0LjBmIC8g
MywgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBn
ZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDQuMGYgLyAzLCAxMjgwLCA3MjAp
KTsKLSAgfQotCi0gIC8vIE9ubHkga2VlcCAyIHJvdW5kZWQgZGVjaW1hbHMgdG8gbWFrZSBmbG9h
dCBjb21wYXJpc29uIHJvYnVzdC4KLSAgcHJpdmF0ZSBzdGF0aWMgZG91YmxlW10gcm91bmQoZmxv
YXRbXSBhcnJheSkgewotICAgIGFzc2VydEVxdWFscygxNiwgYXJyYXkubGVuZ3RoKTsKLSAgICBm
aW5hbCBkb3VibGVbXSBkb3VibGVBcnJheSA9IG5ldyBkb3VibGVbMTZdOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgMTY7ICsraSkgewotICAgICAgZG91YmxlQXJyYXlbaV0gPSBNYXRoLnJvdW5k
KDEwMCAqIGFycmF5W2ldKSAvIDEwMC4wOwotICAgIH0KLSAgICByZXR1cm4gZG91YmxlQXJyYXk7
Ci0gIH0KLQotICAvLyBCcmllZiBzdW1tYXJ5IGFib3V0IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnM6
Ci0gIC8vIEEgY29vcmRpbmF0ZSBwID0gW3UsIHYsIDAsIDFdIGlzIHRyYW5zZm9ybWVkIGJ5IG1h
dHJpeCBtIGxpa2UgdGhpcyBwJyA9IFt1JywgdicsIDAsIDFdID0gbSAqIHAuCi0gIC8vIE9wZW5H
TCB1c2VzIGNvbHVtbi1tYWpvciBvcmRlciwgc286Ci0gIC8vIHUnID0gdSAqIG1bMF0gKyB2ICog
bVs0XSArIG1bMTJdLgotICAvLyB2JyA9IHUgKiBtWzFdICsgdiAqIG1bNV0gKyBtWzEzXS4KLQot
ICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGF5b3V0TWF0cml4RGVmYXVs
dCgpIHsKLSAgICBmaW5hbCBmbG9hdCBsYXlvdXRNYXRyaXhbXSA9IGdldExheW91dE1hdHJpeChm
YWxzZSwgMS4wZiwgMS4wZik7Ci0gICAgLy8gQXNzZXJ0OgotICAgIC8vIHUnID0gdS4KLSAgICAv
LyB2JyA9IHYuCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIE1vcmVBc3NlcnRzLmFzc2Vy
dEVxdWFscyhuZXcgZG91YmxlW10gewotICAgICAgICAxLCAwLCAwLCAwLAotICAgICAgICAwLCAx
LCAwLCAwLAotICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAwLCAwLCAwLCAxfSwgcm91bmQo
bGF5b3V0TWF0cml4KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGF5b3V0TWF0cml4TWlycm9yKCkgewotICAg
IGZpbmFsIGZsb2F0IGxheW91dE1hdHJpeFtdID0gZ2V0TGF5b3V0TWF0cml4KHRydWUsIDEuMGYs
IDEuMGYpOwotICAgIC8vIEFzc2VydDoKLSAgICAvLyB1JyA9IDEgLSB1LgotICAgIC8vIHYnID0g
di4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgTW9yZUFzc2VydHMuYXNzZXJ0RXF1YWxz
KG5ldyBkb3VibGVbXSB7Ci0gICAgICAgIC0xLCAwLCAwLCAwLAotICAgICAgICAgMCwgMSwgMCwg
MCwKLSAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgICAxLCAwLCAwLCAxfSwgcm91bmQobGF5
b3V0TWF0cml4KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0TGF5b3V0TWF0cml4U2NhbGUoKSB7Ci0gICAgLy8g
VmlkZW8gaGFzIGFzcGVjdCByYXRpbyAyLCBidXQgbGF5b3V0IGlzIHNxdWFyZS4gVGhpcyB3aWxs
IGNhdXNlIG9ubHkgdGhlIGNlbnRlciBwYXJ0IG9mIHRoZQotICAgIC8vIHZpZGVvIHRvIGJlIHZp
c2libGUsIGkuZS4gdGhlIHUgY29vcmRpbmF0ZSB3aWxsIGdvIGZyb20gMC4yNSB0byAwLjc1IGlu
c3RlYWQgb2YgZnJvbSAwIHRvIDEuCi0gICAgZmluYWwgZmxvYXQgbGF5b3V0TWF0cml4W10gPSBn
ZXRMYXlvdXRNYXRyaXgoZmFsc2UsIDIuMGYsIDEuMGYpOwotICAgIC8vIEFzc2VydDoKLSAgICAv
LyB1JyA9IDAuMjUgKyAwLjUgdS4KLSAgICAvLyB2JyA9IHYuCi0gICAgLy8gY2xhbmctZm9ybWF0
IG9mZgotICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFscyhuZXcgZG91YmxlW10gewotICAgICAg
ICAgMC41LCAwLCAwLCAwLAotICAgICAgICAgICAwLCAxLCAwLCAwLAotICAgICAgICAgICAwLCAw
LCAxLCAwLAotICAgICAgICAwLjI1LCAwLCAwLCAxfSwgcm91bmQobGF5b3V0TWF0cml4KSk7Ci0g
ICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0
aWMgdm9pZCB0ZXN0Um90YXRlVGV4dHVyZU1hdHJpeERlZmF1bHQoKSB7Ci0gICAgLy8gVGVzdCB0
aGF0IHJvdGF0aW9uIHdpdGggMCBkZWdyZWVzIHJldHVybnMgYW4gaWRlbnRpY2FsIG1hdHJpeC4K
LSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgZmluYWwgZmxvYXRbXSBtYXRyaXggPSBuZXcg
ZmxvYXRbXSB7Ci0gICAgICAgIDEsIDIsIDMsIDQsCi0gICAgICAgIDUsIDYsIDcsIDgsCi0gICAg
ICAgIDksIDAsIDEsIDIsCi0gICAgICAgIDMsIDQsIDUsIDYKLSAgICB9OwotICAgIC8vIGNsYW5n
LWZvcm1hdCBvbgotICAgIGZpbmFsIGZsb2F0IHJvdGF0ZWRNYXRyaXhbXSA9IHJvdGF0ZVRleHR1
cmVNYXRyaXgobWF0cml4LCAwKTsKLSAgICBNb3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMocm91bmQo
bWF0cml4KSwgcm91bmQocm90YXRlZE1hdHJpeCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgc3RhdGljIHZvaWQgdGVzdFJvdGF0ZVRleHR1cmVNYXRyaXg5MERlZygpIHsKLSAgICBm
aW5hbCBmbG9hdCBzYW1wbGluZ01hdHJpeFtdID0gcm90YXRlVGV4dHVyZU1hdHJpeChSZW5kZXJl
ckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpLCA5MCk7Ci0gICAgLy8gQXNzZXJ0OgotICAgIC8vIHUn
ID0gMSAtIHYuCi0gICAgLy8gdicgPSB1LgotICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBN
b3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMobmV3IGRvdWJsZVtdIHsKLSAgICAgICAgIDAsIDEsIDAs
IDAsCi0gICAgICAgIC0xLCAwLCAwLCAwLAotICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAg
IDEsIDAsIDAsIDF9LCByb3VuZChzYW1wbGluZ01hdHJpeCkpOwotICAgIC8vIGNsYW5nLWZvcm1h
dCBvbgotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFJvdGF0
ZVRleHR1cmVNYXRyaXgxODBEZWcoKSB7Ci0gICAgZmluYWwgZmxvYXQgc2FtcGxpbmdNYXRyaXhb
XSA9IHJvdGF0ZVRleHR1cmVNYXRyaXgoUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKSwg
MTgwKTsKLSAgICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSAxIC0gdS4KLSAgICAvLyB2JyA9IDEg
LSB2LgotICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBNb3JlQXNzZXJ0cy5hc3NlcnRFcXVh
bHMobmV3IGRvdWJsZVtdIHsKLSAgICAgICAgLTEsICAwLCAwLCAwLAotICAgICAgICAgMCwgLTEs
IDAsIDAsCi0gICAgICAgICAwLCAgMCwgMSwgMCwKLSAgICAgICAgIDEsICAxLCAwLCAxfSwgcm91
bmQoc2FtcGxpbmdNYXRyaXgpKTsKLSAgICAvLyBjbGFuZy1mb3JtYXQgb24KLSAgfQotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0
ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBlclRlc3QuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VUZXh0dXJlSGVscGVy
VGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDg5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZh
Y2VUZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lk
Lm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0eVRlc3RDYXNlOwot
aW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0Owot
aW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0K
LWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50
LkNvdW50RG93bkxhdGNoOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgU3VyZmFjZVRleHR1cmVIZWxw
ZXJUZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0Q2FzZSB7Ci0gIC8qKgotICAgKiBNb2NrIHRleHR1
cmUgbGlzdGVuZXIgd2l0aCBibG9ja2luZyB3YWl0IGZ1bmN0aW9uYWxpdHkuCi0gICAqLwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIE1vY2tUZXh0dXJlTGlzdGVuZXIKLSAgICAgIGltcGxl
bWVudHMgU3VyZmFjZVRleHR1cmVIZWxwZXIuT25UZXh0dXJlRnJhbWVBdmFpbGFibGVMaXN0ZW5l
ciB7Ci0gICAgcHVibGljIGludCBvZXNUZXh0dXJlSWQ7Ci0gICAgcHVibGljIGZsb2F0W10gdHJh
bnNmb3JtTWF0cml4OwotICAgIHByaXZhdGUgYm9vbGVhbiBoYXNOZXdGcmFtZSA9IGZhbHNlOwot
ICAgIC8vIFRocmVhZCB3aGVyZSBmcmFtZXMgYXJlIGV4cGVjdGVkIHRvIGJlIHJlY2VpdmVkIG9u
LgotICAgIHByaXZhdGUgZmluYWwgVGhyZWFkIGV4cGVjdGVkVGhyZWFkOwotCi0gICAgTW9ja1Rl
eHR1cmVMaXN0ZW5lcigpIHsKLSAgICAgIHRoaXMuZXhwZWN0ZWRUaHJlYWQgPSBudWxsOwotICAg
IH0KLQotICAgIE1vY2tUZXh0dXJlTGlzdGVuZXIoVGhyZWFkIGV4cGVjdGVkVGhyZWFkKSB7Ci0g
ICAgICB0aGlzLmV4cGVjdGVkVGhyZWFkID0gZXhwZWN0ZWRUaHJlYWQ7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uVGV4dHVyZUZyYW1lQXZh
aWxhYmxlKAotICAgICAgICBpbnQgb2VzVGV4dHVyZUlkLCBmbG9hdFtdIHRyYW5zZm9ybU1hdHJp
eCwgbG9uZyB0aW1lc3RhbXBOcykgewotICAgICAgaWYgKGV4cGVjdGVkVGhyZWFkICE9IG51bGwg
JiYgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBleHBlY3RlZFRocmVhZCkgewotICAgICAgICB0
aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJvblRleHR1cmVGcmFtZUF2YWlsYWJsZSBj
YWxsZWQgb24gd3JvbmcgdGhyZWFkLiIpOwotICAgICAgfQotICAgICAgdGhpcy5vZXNUZXh0dXJl
SWQgPSBvZXNUZXh0dXJlSWQ7Ci0gICAgICB0aGlzLnRyYW5zZm9ybU1hdHJpeCA9IHRyYW5zZm9y
bU1hdHJpeDsKLSAgICAgIGhhc05ld0ZyYW1lID0gdHJ1ZTsKLSAgICAgIG5vdGlmeUFsbCgpOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIFdhaXQgaW5kZWZpbml0ZWx5IGZvciBhIG5ldyBmcmFt
ZS4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd2FpdEZvck5ld0ZyYW1l
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIHdoaWxlICghaGFzTmV3RnJh
bWUpIHsKLSAgICAgICAgd2FpdCgpOwotICAgICAgfQotICAgICAgaGFzTmV3RnJhbWUgPSBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXYWl0IGZvciBhIG5ldyBmcmFtZSwgb3IgdW50
aWwgdGhlIHNwZWNpZmllZCB0aW1lb3V0IGVsYXBzZXMuIFJldHVybnMgdHJ1ZSBpZiBhIG5ldyBm
cmFtZSB3YXMKLSAgICAgKiByZWNlaXZlZCBiZWZvcmUgdGhlIHRpbWVvdXQuCi0gICAgICovCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIHdhaXRGb3JOZXdGcmFtZShmaW5hbCBsb25n
IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIGZpbmFsIGxv
bmcgc3RhcnRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgIGxv
bmcgdGltZVJlbWFpbmluZ01zID0gdGltZW91dE1zOwotICAgICAgd2hpbGUgKCFoYXNOZXdGcmFt
ZSAmJiB0aW1lUmVtYWluaW5nTXMgPiAwKSB7Ci0gICAgICAgIHdhaXQodGltZVJlbWFpbmluZ01z
KTsKLSAgICAgICAgZmluYWwgbG9uZyBlbGFwc2VkVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNl
ZFJlYWx0aW1lKCkgLSBzdGFydFRpbWVNczsKLSAgICAgICAgdGltZVJlbWFpbmluZ01zID0gdGlt
ZW91dE1zIC0gZWxhcHNlZFRpbWVNczsKLSAgICAgIH0KLSAgICAgIGZpbmFsIGJvb2xlYW4gZGlk
UmVjZWl2ZUZyYW1lID0gaGFzTmV3RnJhbWU7Ci0gICAgICBoYXNOZXdGcmFtZSA9IGZhbHNlOwot
ICAgICAgcmV0dXJuIGRpZFJlY2VpdmVGcmFtZTsKLSAgICB9Ci0gIH0KLQotICAvKiogQXNzZXJ0
IHRoYXQgdHdvIGludGVnZXJzIGFyZSBjbG9zZSwgd2l0aCBkaWZmZXJlbmNlIGF0IG1vc3QKLSAg
ICoge0Bjb2RlIHRocmVzaG9sZH0uICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRDbG9z
ZShpbnQgdGhyZXNob2xkLCBpbnQgZXhwZWN0ZWQsIGludCBhY3R1YWwpIHsKLSAgICBpZiAoTWF0
aC5hYnMoZXhwZWN0ZWQgLSBhY3R1YWwpIDw9IHRocmVzaG9sZCkKLSAgICAgIHJldHVybjsKLSAg
ICBmYWlsTm90RXF1YWxzKCJOb3QgY2xvc2UgZW5vdWdoLCB0aHJlc2hvbGQgIiArIHRocmVzaG9s
ZCwgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBub3JtYWwgdXNl
IGJ5IHJlY2VpdmluZyB0aHJlZSB1bmlmb3JtIHRleHR1cmUgZnJhbWVzLiBUZXh0dXJlIGZyYW1l
cyBhcmUgcmV0dXJuZWQgYXMgZWFybHkKLSAgICogYXMgcG9zc2libGUuIFRoZSB0ZXh0dXJlIHBp
eGVsIHZhbHVlcyBhcmUgaW5zcGVjdGVkIGJ5IGRyYXdpbmcgdGhlIHRleHR1cmUgZnJhbWUgdG8g
YSBwaXhlbAotICAgKiBidWZmZXIgYW5kIHJlYWRpbmcgaXQgYmFjayB3aXRoIGdsUmVhZFBpeGVs
cygpLgotICAgKi8KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RUaHJl
ZUNvbnN0YW50Q29sb3JGcmFtZXMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGZpbmFsIGludCB3aWR0aCA9IDE2OwotICAgIGZpbmFsIGludCBoZWlnaHQgPSAxNjsKLSAgICAv
LyBDcmVhdGUgRUdMIGJhc2Ugd2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4K
LSAgICBmaW5hbCBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNl
LkNPTkZJR19QSVhFTF9CVUZGRVIpOwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2Uo
d2lkdGgsIGhlaWdodCk7Ci0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5ldyBHbFJl
Y3REcmF3ZXIoKTsKLQotICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBhbmQgbGlz
dGVuZXIuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxw
ZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoCi0gICAgICAgICJTdXJmYWNlVGV4dHVy
ZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0
KCkpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTW9ja1Rl
eHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5n
KGxpc3RlbmVyKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgp
LnNldERlZmF1bHRCdWZmZXJTaXplKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gQ3JlYXRlIHJl
c291cmNlcyBmb3Igc3R1YmJpbmcgYW4gT0VTIHRleHR1cmUgcHJvZHVjZXIuIHxlZ2xPZXNCYXNl
fCBoYXMgdGhlIFN1cmZhY2VUZXh0dXJlIGluCi0gICAgLy8gfHN1cmZhY2VUZXh0dXJlSGVscGVy
fCBhcyB0aGUgdGFyZ2V0IEVHTFN1cmZhY2UuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xPZXNCYXNl
ID0gRWdsQmFzZS5jcmVhdGUoZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBFZ2xCYXNlLkNP
TkZJR19QTEFJTik7Ci0gICAgZWdsT2VzQmFzZS5jcmVhdGVTdXJmYWNlKHN1cmZhY2VUZXh0dXJl
SGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGFzc2VydEVxdWFscyhlZ2xPZXNCYXNl
LnN1cmZhY2VXaWR0aCgpLCB3aWR0aCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbE9lc0Jhc2Uuc3Vy
ZmFjZUhlaWdodCgpLCBoZWlnaHQpOwotCi0gICAgZmluYWwgaW50IHJlZFtdID0gbmV3IGludFtd
IHs3OSwgMTQ0LCAxODV9OwotICAgIGZpbmFsIGludCBncmVlbltdID0gbmV3IGludFtdIHs2Niwg
MjEwLCAxNjJ9OwotICAgIGZpbmFsIGludCBibHVlW10gPSBuZXcgaW50W10gezE2MSwgMTE3LCAx
NTh9OwotICAgIC8vIERyYXcgdGhyZWUgZnJhbWVzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgKytpKSB7Ci0gICAgICAvLyBEcmF3IGEgY29uc3RhbnQgY29sb3IgZnJhbWUgb250byB0aGUg
U3VyZmFjZVRleHR1cmUuCi0gICAgICBlZ2xPZXNCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICBH
TEVTMjAuZ2xDbGVhckNvbG9yKHJlZFtpXSAvIDI1NS4wZiwgZ3JlZW5baV0gLyAyNTUuMGYsIGJs
dWVbaV0gLyAyNTUuMGYsIDEuMGYpOwotICAgICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NP
TE9SX0JVRkZFUl9CSVQpOwotICAgICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkg
dHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAgICAgZWdsT2VzQmFzZS5zd2Fw
QnVmZmVycygpOwotCi0gICAgICAvLyBXYWl0IGZvciBhbiBPRVMgdGV4dHVyZSB0byBhcnJpdmUg
YW5kIGRyYXcgaXQgb250byB0aGUgcGl4ZWwgYnVmZmVyLgotICAgICAgbGlzdGVuZXIud2FpdEZv
ck5ld0ZyYW1lKCk7Ci0gICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICBkcmF3ZXIu
ZHJhd09lcygKLSAgICAgICAgICBsaXN0ZW5lci5vZXNUZXh0dXJlSWQsIGxpc3RlbmVyLnRyYW5z
Zm9ybU1hdHJpeCwgd2lkdGgsIGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0KLSAgICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotCi0gICAgICAvLyBE
b3dubG9hZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4gTm90IGFsbCBw
bGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUuZy4KLSAgICAgIC8vIE5leHVzIDkuCi0gICAgICBmaW5h
bCBCeXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh3aWR0aCAq
IGhlaWdodCAqIDQpOwotICAgICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVp
Z2h0LCBHTEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYmFEYXRhKTsK
LSAgICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xSZWFkUGl4ZWxzIik7Ci0KLSAgICAg
IC8vIEFzc2VydCByZW5kZXJlZCBpbWFnZSBpcyBleHBlY3RlZCBjb25zdGFudCBjb2xvci4KLSAg
ICAgIHdoaWxlIChyZ2JhRGF0YS5oYXNSZW1haW5pbmcoKSkgewotICAgICAgICBhc3NlcnRFcXVh
bHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCByZWRbaV0pOwotICAgICAgICBhc3NlcnRFcXVhbHMo
cmdiYURhdGEuZ2V0KCkgJiAweEZGLCBncmVlbltpXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhy
Z2JhRGF0YS5nZXQoKSAmIDB4RkYsIGJsdWVbaV0pOwotICAgICAgICBhc3NlcnRFcXVhbHMocmdi
YURhdGEuZ2V0KCkgJiAweEZGLCAyNTUpOwotICAgICAgfQotICAgIH0KLQotICAgIGRyYXdlci5y
ZWxlYXNlKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgIGVnbEJh
c2UucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgZGlzcG9zaW5nIHRoZSBTdXJm
YWNlVGV4dHVyZUhlbHBlciB3aGlsZSBob2xkaW5nIGEgcGVuZGluZyB0ZXh0dXJlIGZyYW1lLiBU
aGUgcGVuZGluZwotICAgKiB0ZXh0dXJlIGZyYW1lIHNob3VsZCBzdGlsbCBiZSB2YWxpZCwgYW5k
IHRoaXMgaXMgdGVzdGVkIGJ5IGRyYXdpbmcgdGhlIHRleHR1cmUgZnJhbWUgdG8gYSBwaXhlbAot
ICAgKiBidWZmZXIgYW5kIHJlYWRpbmcgaXQgYmFjayB3aXRoIGdsUmVhZFBpeGVscygpLgotICAg
Ki8KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RMYXRlUmV0dXJuRnJh
bWUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIGludCB3aWR0aCA9
IDE2OwotICAgIGZpbmFsIGludCBoZWlnaHQgPSAxNjsKLSAgICAvLyBDcmVhdGUgRUdMIGJhc2Ug
d2l0aCBhIHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4KLSAgICBmaW5hbCBFZ2xCYXNl
IGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhFTF9CVUZG
RVIpOwotICAgIGVnbEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2Uod2lkdGgsIGhlaWdodCk7Ci0K
LSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgYW5kIGxpc3RlbmVyLgotICAgIGZp
bmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0gU3VyZmFjZVRl
eHR1cmVIZWxwZXIuY3JlYXRlKAotICAgICAgICAiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIg
LyogdGhyZWFkTmFtZSAqLywgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAgICBmaW5h
bCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIo
KTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0g
ICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKS5zZXREZWZhdWx0QnVm
ZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8vIENyZWF0ZSByZXNvdXJjZXMgZm9yIHN0
dWJiaW5nIGFuIE9FUyB0ZXh0dXJlIHByb2R1Y2VyLiB8ZWdsT2VzQmFzZXwgaGFzIHRoZSBTdXJm
YWNlVGV4dHVyZSBpbgotICAgIC8vIHxzdXJmYWNlVGV4dHVyZUhlbHBlcnwgYXMgdGhlIHRhcmdl
dCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsT2VzQmFzZSA9IEVnbEJhc2UuY3Jl
YXRlKGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwot
ICAgIGVnbE9lc0Jhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJm
YWNlVGV4dHVyZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsT2VzQmFzZS5zdXJmYWNlV2lkdGgo
KSwgd2lkdGgpOwotICAgIGFzc2VydEVxdWFscyhlZ2xPZXNCYXNlLnN1cmZhY2VIZWlnaHQoKSwg
aGVpZ2h0KTsKLQotICAgIGZpbmFsIGludCByZWQgPSA3OTsKLSAgICBmaW5hbCBpbnQgZ3JlZW4g
PSA2NjsKLSAgICBmaW5hbCBpbnQgYmx1ZSA9IDE2MTsKLSAgICAvLyBEcmF3IGEgY29uc3RhbnQg
Y29sb3IgZnJhbWUgb250byB0aGUgU3VyZmFjZVRleHR1cmUuCi0gICAgZWdsT2VzQmFzZS5tYWtl
Q3VycmVudCgpOwotICAgIEdMRVMyMC5nbENsZWFyQ29sb3IocmVkIC8gMjU1LjBmLCBncmVlbiAv
IDI1NS4wZiwgYmx1ZSAvIDI1NS4wZiwgMS4wZik7Ci0gICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIw
LkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1bHRpbWF0
ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICBlZ2xPZXNCYXNlLnN3
YXBCdWZmZXJzKCk7Ci0gICAgZWdsT2VzQmFzZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBXYWl0IGZv
ciBPRVMgdGV4dHVyZSBmcmFtZS4KLSAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoKTsKLSAg
ICAvLyBEaWNvbm5lY3Qgd2hpbGUgaG9sZGluZyB0aGUgZnJhbWUuCi0gICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIuZGlzcG9zZSgpOwotCi0gICAgLy8gRHJhdyB0aGUgcGVuZGluZyB0ZXh0dXJlIGZy
YW1lIG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0g
ICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5ldyBHbFJlY3REcmF3ZXIoKTsKLSAgICBk
cmF3ZXIuZHJhd09lcygKLSAgICAgICAgbGlzdGVuZXIub2VzVGV4dHVyZUlkLCBsaXN0ZW5lci50
cmFuc2Zvcm1NYXRyaXgsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwotICAg
IGRyYXdlci5yZWxlYXNlKCk7Ci0KLSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRoZSBw
aXhlbCBidWZmZXIgYXMgUkdCQS4gTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUuZy4g
TmV4dXMgOS4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZlci5hbGxv
Y2F0ZURpcmVjdCh3aWR0aCAqIGhlaWdodCAqIDQpOwotICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMo
MCwgMCwgd2lkdGgsIGhlaWdodCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9C
WVRFLCByZ2JhRGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJlYWRQaXhl
bHMiKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLQotICAgIC8vIEFzc2VydCByZW5kZXJlZCBp
bWFnZSBpcyBleHBlY3RlZCBjb25zdGFudCBjb2xvci4KLSAgICB3aGlsZSAocmdiYURhdGEuaGFz
UmVtYWluaW5nKCkpIHsKLSAgICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYs
IHJlZCk7Ci0gICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCBncmVlbik7
Ci0gICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCBibHVlKTsKLSAgICAg
IGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYsIDI1NSk7Ci0gICAgfQotICAgIC8v
IExhdGUgZnJhbWUgcmV0dXJuIGFmdGVyIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gZGlzcG9zZWQgYW5k
IHJlbGVhc2VkLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgp
OwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgZGlzcG9zaW5nIHRoZSBTdXJmYWNlVGV4dHVyZUhl
bHBlciwgYnV0IGtlZXAgdHJ5aW5nIHRvIHByb2R1Y2UgbW9yZSB0ZXh0dXJlIGZyYW1lcy4gTm8K
LSAgICogZnJhbWVzIHNob3VsZCBiZSBkZWxpdmVyZWQgdG8gdGhlIGxpc3RlbmVyLgotICAgKi8K
LSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3REaXNwb3NlKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxw
ZXIgYW5kIGxpc3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VU
ZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJm
YWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxsKTsKLSAgICBmaW5h
bCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIo
KTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0g
ICAgLy8gQ3JlYXRlIEVnbEJhc2Ugd2l0aCB0aGUgU3VyZmFjZVRleHR1cmUgYXMgdGFyZ2V0IEVH
TFN1cmZhY2UuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVs
bCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShzdXJm
YWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICBlZ2xCYXNlLm1ha2VD
dXJyZW50KCk7Ci0gICAgLy8gQXNzZXJ0IG5vIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkIHlldC4K
LSAgICBhc3NlcnRGYWxzZShsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoMSkpOwotICAgIC8vIERy
YXcgYW5kIHdhaXQgZm9yIG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xf
Q09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkg
dHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZl
cnMoKTsKLSAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoKTsKLSAgICBzdXJmYWNlVGV4dHVy
ZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgIC8vIERpc3Bvc2UgLSB3ZSBzaG91
bGQgbm90IHJlY2VpdmUgYW55IHRleHR1cmVzIGFmdGVyIHRoaXMuCi0gICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIuZGlzcG9zZSgpOwotCi0gICAgLy8gRHJhdyBvbmUgZnJhbWUuCi0gICAgR0xFUzIw
LmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGVnbEJhc2Uuc3dhcEJ1
ZmZlcnMoKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHNob3VsZCBub3QgdHJpZ2dlciBvblRleHR1
cmVGcmFtZUF2YWlsYWJsZSgpIGJlY2F1c2UgZGlzcG9zZWQgaGFzIGJlZW4gY2FsbGVkLgotICAg
IC8vIEFzc2VydCB0aGF0IG5vIE9FUyB0ZXh0dXJlIHdhcyBkZWxpdmVyZWQuCi0gICAgYXNzZXJ0
RmFsc2UobGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKDUwMCkpOwotCi0gICAgZWdsQmFzZS5yZWxl
YXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBkaXNwb3NpbmcgdGhlIFN1cmZhY2VUZXh0
dXJlSGVscGVyIGltbWVkaWF0ZWx5IGFmdGVyIGlzIGhhcyBiZWVuIHNldHVwIHRvIHVzZSBhCi0g
ICAqIHNoYXJlZCBjb250ZXh0LiBObyBmcmFtZXMgc2hvdWxkIGJlIGRlbGl2ZXJlZCB0byB0aGUg
bGlzdGVuZXIuCi0gICAqLwotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0
RGlzcG9zZUltbWVkaWF0ZWx5KCkgewotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1
cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRl
KCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxsKTsKLSAg
ICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogQ2Fs
bCBzdG9wTGlzdGVuaW5nKCksIGJ1dCBrZWVwIHRyeWluZyB0byBwcm9kdWNlIG1vcmUgdGV4dHVy
ZSBmcmFtZXMuIE5vIGZyYW1lcyBzaG91bGQgYmUKLSAgICogZGVsaXZlcmVkIHRvIHRoZSBsaXN0
ZW5lci4KLSAgICovCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0U3Rv
cExpc3RlbmluZygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgLy8gQ3JlYXRl
IFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBTdXJmYWNlVGV4
dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJl
SGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAq
LywgbnVsbCk7Ci0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBN
b2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0
ZW5pbmcobGlzdGVuZXIpOwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VU
ZXh0dXJlIGFzIHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9
IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBlZ2xCYXNl
LmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7
Ci0gICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIC8vIEFzc2VydCBubyBmcmFtZSBoYXMg
YmVlbiByZWNlaXZlZCB5ZXQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVuZXIud2FpdEZvck5ld0Zy
YW1lKDEpKTsKLSAgICAvLyBEcmF3IGFuZCB3YWl0IGZvciBvbmUgZnJhbWUuCi0gICAgR0xFUzIw
LmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIC8vIHN3YXBCdWZmZXJz
KCkgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAg
ICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgbGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKCk7
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAv
LyBTdG9wIGxpc3RlbmluZyAtIHdlIHNob3VsZCBub3QgcmVjZWl2ZSBhbnkgdGV4dHVyZXMgYWZ0
ZXIgdGhpcy4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0KLSAg
ICAvLyBEcmF3IG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1Jf
QlVGRkVSX0JJVCk7Ci0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIC8vIHN3YXBCdWZm
ZXJzKCkgc2hvdWxkIG5vdCB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgYmVjYXVz
ZSBkaXNwb3NlZCBoYXMgYmVlbiBjYWxsZWQuCi0gICAgLy8gQXNzZXJ0IHRoYXQgbm8gT0VTIHRl
eHR1cmUgd2FzIGRlbGl2ZXJlZC4KLSAgICBhc3NlcnRGYWxzZShsaXN0ZW5lci53YWl0Rm9yTmV3
RnJhbWUoNTAwKSk7Ci0KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAg
ZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBzdG9wTGlzdGVuaW5n
KCkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGhhcyBiZWVuIHNl
dHVwLgotICAgKi8KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFN0b3BM
aXN0ZW5pbmdJbW1lZGlhdGVseSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
ZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPQotICAgICAg
ICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3Qi
IC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIg
bGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwot
ICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qgc3RvcExpc3RlbmluZygpIGltbWVkaWF0ZWx5IGFmdGVy
IHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBoYXMgYmVlbiBzZXR1cCBvbiB0aGUgaGFuZGxlcgot
ICAgKiB0aHJlYWQuCi0gICAqLwotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0
ZXN0U3RvcExpc3RlbmluZ0ltbWVkaWF0ZWx5T25IYW5kbGVyVGhyZWFkKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNl
VGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0gICAgZmlu
YWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVy
KCk7Ci0KLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBzdG9wTGlzdGVuaW5nQmFycmllciA9IG5l
dyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBzdG9wTGlzdGVu
aW5nQmFycmllckRvbmUgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgLy8gU3RhcnQgYnkg
cG9zdGluZyB0byB0aGUgaGFuZGxlciB0aHJlYWQgdG8ga2VlcCBpdCBvY2N1cGllZC4KLSAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgVGhyZWFk
VXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoc3RvcExpc3RlbmluZ0JhcnJpZXIpOwotICAgICAg
ICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5nKCk7Ci0gICAgICAgIHN0b3BMaXN0
ZW5pbmdCYXJyaWVyRG9uZS5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8v
IHN0YXJ0TGlzdGVuaW5nKCkgaXMgYXN5bmNocm9ub3VzIGFuZCB3aWxsIHBvc3QgdG8gdGhlIG9j
Y3VwaWVkIGhhbmRsZXIgdGhyZWFkLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlz
dGVuaW5nKGxpc3RlbmVyKTsKLSAgICAvLyBXYWl0IGZvciBzdG9wTGlzdGVuaW5nKCkgdG8gYmUg
Y2FsbGVkIG9uIHRoZSBoYW5kbGVyIHRocmVhZC4KLSAgICBzdG9wTGlzdGVuaW5nQmFycmllci5j
b3VudERvd24oKTsKLSAgICBzdG9wTGlzdGVuaW5nQmFycmllckRvbmUuYXdhaXQoKTsKLSAgICAv
LyBXYWl0IHVudGlsIGhhbmRsZXIgdGhyZWFkIGlzIGlkbGUgdG8gdHJ5IHRvIGNhdGNoIGxhdGUg
c3RhcnRMaXN0ZW5pbmcoKSBjYWxsLgotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGJhcnJpZXIg
PSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFu
ZGxlcigpLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGJhcnJpZXIuY291bnREb3duKCk7Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHkoYmFycmllcik7Ci0g
ICAgLy8gUHJldmlvdXMgc3RhcnRMaXN0ZW5pbmcoKSBjYWxsIHNob3VsZCBuZXZlciBoYXZlIHRh
a2VuIHBsYWNlIGFuZCBpdCBzaG91bGQgYmUgb2sgdG8gY2FsbCBpdAotICAgIC8vIGFnYWluLgot
ICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLQotICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0
IGNhbGxpbmcgc3RhcnRMaXN0ZW5pbmcoKSB3aXRoIGEgbmV3IGxpc3RlbmVyIGFmdGVyIHN0b3BM
aXN0ZW5pbmcoKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAqLwotICBATWVkaXVtVGVzdAotICBwdWJs
aWMgc3RhdGljIHZvaWQgdGVzdFJlc3RhcnRMaXN0ZW5pbmdXaXRoTmV3TGlzdGVuZXIoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4dHVyZUhl
bHBlciBhbmQgbGlzdGVuZXIuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFj
ZVRleHR1cmVIZWxwZXIgPQotICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoIlN1
cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwotICAgIGZp
bmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIxID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVu
ZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcjEp
OwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJlIGFzIHRhcmdl
dCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRl
KG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2Uo
c3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgZWdsQmFzZS5t
YWtlQ3VycmVudCgpOwotICAgIC8vIEFzc2VydCBubyBmcmFtZSBoYXMgYmVlbiByZWNlaXZlZCB5
ZXQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVuZXIxLndhaXRGb3JOZXdGcmFtZSgxKSk7Ci0gICAg
Ly8gRHJhdyBhbmQgd2FpdCBmb3Igb25lIGZyYW1lLgotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMy
MC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAvLyBzd2FwQnVmZmVycygpIHdpbGwgdWx0aW1h
dGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAgZWdsQmFzZS5zd2Fw
QnVmZmVycygpOwotICAgIGxpc3RlbmVyMS53YWl0Rm9yTmV3RnJhbWUoKTsKLSAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgIC8vIFN0b3AgbGlzdGVu
aW5nIC0gfGxpc3RlbmVyMXwgc2hvdWxkIG5vdCByZWNlaXZlIGFueSB0ZXh0dXJlcyBhZnRlciB0
aGlzLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLQotICAgIC8v
IENvbm5lY3QgZGlmZmVyZW50IGxpc3RlbmVyLgotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVu
ZXIgbGlzdGVuZXIyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcjIpOwotICAgIC8vIEFzc2VydCBubyBm
cmFtZSBoYXMgYmVlbiByZWNlaXZlZCB5ZXQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVuZXIyLndh
aXRGb3JOZXdGcmFtZSgxKSk7Ci0KLSAgICAvLyBEcmF3IG9uZSBmcmFtZS4KLSAgICBHTEVTMjAu
Z2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgZWdsQmFzZS5zd2FwQnVm
ZmVycygpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCB8bGlzdGVuZXIyfCByZWNlaXZlZCB0aGUgZnJh
bWUsIGFuZCBub3QgfGxpc3RlbmVyMXwuCi0gICAgbGlzdGVuZXIyLndhaXRGb3JOZXdGcmFtZSgp
OwotICAgIGFzc2VydEZhbHNlKGxpc3RlbmVyMS53YWl0Rm9yTmV3RnJhbWUoMSkpOwotCi0gICAg
c3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQot
ICBATWVkaXVtVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFRleHR1cmV0b1lVVigpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0gMTY7Ci0g
ICAgZmluYWwgaW50IGhlaWdodCA9IDE2OwotCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0g
RWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotCi0gICAgLy8gQ3Jl
YXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBTdXJmYWNl
VGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VUZXh0dXJlSGVscGVy
LmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVhZE5h
bWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgZmluYWwgTW9ja1RleHR1
cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3Vy
ZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkuc2V0RGVmYXVsdEJ1ZmZlclNpemUod2lk
dGgsIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2VzIGZvciBzdHViYmluZyBhbiBP
RVMgdGV4dHVyZSBwcm9kdWNlci4gfGVnbEJhc2V8IGhhcyB0aGUgU3VyZmFjZVRleHR1cmUgaW4K
LSAgICAvLyB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8IGFzIHRoZSB0YXJnZXQgRUdMU3VyZmFjZS4K
LQotICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJm
YWNlVGV4dHVyZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlV2lkdGgoKSwg
d2lkdGgpOwotICAgIGFzc2VydEVxdWFscyhlZ2xCYXNlLnN1cmZhY2VIZWlnaHQoKSwgaGVpZ2h0
KTsKLQotICAgIGZpbmFsIGludCByZWRbXSA9IG5ldyBpbnRbXSB7NzksIDE0NCwgMTg1fTsKLSAg
ICBmaW5hbCBpbnQgZ3JlZW5bXSA9IG5ldyBpbnRbXSB7NjYsIDIxMCwgMTYyfTsKLSAgICBmaW5h
bCBpbnQgYmx1ZVtdID0gbmV3IGludFtdIHsxNjEsIDExNywgMTU4fTsKLQotICAgIGZpbmFsIGlu
dCByZWZfeVtdID0gbmV3IGludFtdIHs4MSwgMTgwLCAxNjh9OwotICAgIGZpbmFsIGludCByZWZf
dVtdID0gbmV3IGludFtdIHsxNzMsIDkzLCAxMjJ9OwotICAgIGZpbmFsIGludCByZWZfdltdID0g
bmV3IGludFtdIHsxMjcsIDEwMywgMTQwfTsKLQotICAgIC8vIERyYXcgdGhyZWUgZnJhbWVzLgot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICAvLyBEcmF3IGEgY29uc3Rh
bnQgY29sb3IgZnJhbWUgb250byB0aGUgU3VyZmFjZVRleHR1cmUuCi0gICAgICBlZ2xCYXNlLm1h
a2VDdXJyZW50KCk7Ci0gICAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKHJlZFtpXSAvIDI1NS4wZiwg
Z3JlZW5baV0gLyAyNTUuMGYsIGJsdWVbaV0gLyAyNTUuMGYsIDEuMGYpOwotICAgICAgR0xFUzIw
LmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgICAgLy8gc3dhcEJ1ZmZl
cnMoKSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgot
ICAgICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotCi0gICAgICAvLyBXYWl0IGZvciBhbiBPRVMg
dGV4dHVyZSB0byBhcnJpdmUuCi0gICAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoKTsKLQot
ICAgICAgLy8gTWVtb3J5IGxheW91dDogTGluZXMgYXJlIDE2IGJ5dGVzLiBGaXJzdCAxNiBsaW5l
cyBhcmUKLSAgICAgIC8vIHRoZSBZIGRhdGEuIFRoZXNlIGFyZSBmb2xsb3dlZCBieSA4IGxpbmVz
IHdpdGggOCBieXRlcyBvZiBVCi0gICAgICAvLyBkYXRhIG9uIHRoZSBsZWZ0IGFuZCA4IGJ5dGVz
IG9mIFYgZGF0YSBvbiB0aGUgcmlnaHQuCi0gICAgICAvLwotICAgICAgLy8gT2Zmc2V0Ci0gICAg
ICAvLyAgICAgIDAgWVlZWVlZWVkgWVlZWVlZWVkKLSAgICAgIC8vICAgICAxNiBZWVlZWVlZWSBZ
WVlZWVlZWQotICAgICAgLy8gICAgLi4uCi0gICAgICAvLyAgICAyNDAgWVlZWVlZWVkgWVlZWVlZ
WVkKLSAgICAgIC8vICAgIDI1NiBVVVVVVVVVVSBWVlZWVlZWVgotICAgICAgLy8gICAgMjcyIFVV
VVVVVVVVIFZWVlZWVlZWCi0gICAgICAvLyAgICAuLi4KLSAgICAgIC8vICAgIDM2OCBVVVVVVVVV
VSBWVlZWVlZWVgotICAgICAgLy8gICAgMzg0IGJ1ZmZlciBlbmQKLSAgICAgIEJ5dGVCdWZmZXIg
YnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh3aWR0aCAqIGhlaWdodCAqIDMgLyAy
KTsKLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnRleHR1cmVUb1lVVigKLSAgICAgICAgICBi
dWZmZXIsIHdpZHRoLCBoZWlnaHQsIHdpZHRoLCBsaXN0ZW5lci5vZXNUZXh0dXJlSWQsIGxpc3Rl
bmVyLnRyYW5zZm9ybU1hdHJpeCk7Ci0KLSAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVy
blRleHR1cmVGcmFtZSgpOwotCi0gICAgICAvLyBBbGxvdyBvZmYtYnktb25lIGRpZmZlcmVuY2Vz
IGR1ZSB0byBkaWZmZXJlbnQgcm91bmRpbmcuCi0gICAgICB3aGlsZSAoYnVmZmVyLnBvc2l0aW9u
KCkgPCB3aWR0aCAqIGhlaWdodCkgewotICAgICAgICBhc3NlcnRDbG9zZSgxLCBidWZmZXIuZ2V0
KCkgJiAweGZmLCByZWZfeVtpXSk7Ci0gICAgICB9Ci0gICAgICB3aGlsZSAoYnVmZmVyLmhhc1Jl
bWFpbmluZygpKSB7Ci0gICAgICAgIGlmIChidWZmZXIucG9zaXRpb24oKSAlIHdpZHRoIDwgd2lk
dGggLyAyKQotICAgICAgICAgIGFzc2VydENsb3NlKDEsIGJ1ZmZlci5nZXQoKSAmIDB4ZmYsIHJl
Zl91W2ldKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGFzc2VydENsb3NlKDEsIGJ1ZmZlci5n
ZXQoKSAmIDB4ZmYsIHJlZl92W2ldKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lk
dGVzdHMvc3JjL29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRlc3QuamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXJPbk1l
YXN1cmVUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvU3Vy
ZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIy
MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWlt
cG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0
eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5VaVRocmVhZFRlc3Q7Ci1pbXBvcnQgYW5k
cm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5k
cm9pZC52aWV3LlZpZXcuTWVhc3VyZVNwZWM7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsK
LWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJs
aWMgZmluYWwgY2xhc3MgU3VyZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRlc3QgZXh0ZW5kcyBB
Y3Rpdml0eVRlc3RDYXNlIHsKLSAgLyoqCi0gICAqIExpc3Qgd2l0aCBhbGwgcG9zc2libGUgc2Nh
bGluZyB0eXBlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8UmVuZGVyZXJD
b21tb24uU2NhbGluZ1R5cGU+IHNjYWxpbmdUeXBlcyA9IEFycmF5cy5hc0xpc3QoCi0gICAgICBS
ZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklULCBSZW5kZXJlckNvbW1v
bi5TY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklMTCwKLSAgICAgIFJlbmRlcmVyQ29tbW9uLlNj
YWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9CQUxBTkNFRCk7Ci0KLSAgLyoqCi0gICAqIExpc3Qgd2l0
aCBNZWFzdXJlU3BlYyBtb2Rlcy4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIExpc3Q8
SW50ZWdlcj4gbWVhc3VyZVNwZWNNb2RlcyA9Ci0gICAgICBBcnJheXMuYXNMaXN0KE1lYXN1cmVT
cGVjLkVYQUNUTFksIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotCi0gIC8qKgotICAgKiBSZXR1cm5z
IGEgZHVtbXkgWVVWIGZyYW1lLgotICAgKi8KLSAgc3RhdGljIFZpZGVvUmVuZGVyZXIuSTQyMEZy
YW1lIGNyZWF0ZUZyYW1lKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uRGVncmVl
KSB7Ci0gICAgZmluYWwgaW50W10geXV2U3RyaWRlcyA9IG5ldyBpbnRbXSB7d2lkdGgsICh3aWR0
aCArIDEpIC8gMiwgKHdpZHRoICsgMSkgLyAyfTsKLSAgICBmaW5hbCBpbnRbXSB5dXZIZWlnaHRz
ID0gbmV3IGludFtdIHtoZWlnaHQsIChoZWlnaHQgKyAxKSAvIDIsIChoZWlnaHQgKyAxKSAvIDJ9
OwotICAgIGZpbmFsIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclszXTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgeXV2UGxhbmVzW2ldID0g
Qnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCh5dXZTdHJpZGVzW2ldICogeXV2SGVpZ2h0c1tpXSk7
Ci0gICAgfQotICAgIHJldHVybiBuZXcgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUod2lkdGgsIGhl
aWdodCwgcm90YXRpb25EZWdyZWUsIHl1dlN0cmlkZXMsIHl1dlBsYW5lcywgMCk7Ci0gIH0KLQot
ICAvKioKLSAgICogQXNzZXJ0IG9uTWVhc3VyZSgpIHdpdGggZ2l2ZW4gcGFyYW1ldGVycyB3aWxs
IHJlc3VsdCBpbiBleHBlY3RlZCBtZWFzdXJlZCBzaXplLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0
aWMgdm9pZCBhc3NlcnRNZWFzdXJlZFNpemUoU3VyZmFjZVZpZXdSZW5kZXJlciBzdXJmYWNlVmll
d1JlbmRlcmVyLAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUs
IFN0cmluZyBmcmFtZURpbWVuc2lvbnMsIGludCBleHBlY3RlZFdpZHRoLAotICAgICAgaW50IGV4
cGVjdGVkSGVpZ2h0LCBpbnQgd2lkdGhTcGVjLCBpbnQgaGVpZ2h0U3BlYykgewotICAgIHN1cmZh
Y2VWaWV3UmVuZGVyZXIuc2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGUpOwotICAgIHN1cmZhY2VW
aWV3UmVuZGVyZXIub25NZWFzdXJlKHdpZHRoU3BlYywgaGVpZ2h0U3BlYyk7Ci0gICAgZmluYWwg
aW50IG1lYXN1cmVkV2lkdGggPSBzdXJmYWNlVmlld1JlbmRlcmVyLmdldE1lYXN1cmVkV2lkdGgo
KTsKLSAgICBmaW5hbCBpbnQgbWVhc3VyZWRIZWlnaHQgPSBzdXJmYWNlVmlld1JlbmRlcmVyLmdl
dE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgaWYgKG1lYXN1cmVkV2lkdGggIT0gZXhwZWN0ZWRXaWR0
aCB8fCBtZWFzdXJlZEhlaWdodCAhPSBleHBlY3RlZEhlaWdodCkgewotICAgICAgZmFpbCgib25N
ZWFzdXJlKCIgKyBNZWFzdXJlU3BlYy50b1N0cmluZyh3aWR0aFNwZWMpICsgIiwgIiArIE1lYXN1
cmVTcGVjLnRvU3RyaW5nKGhlaWdodFNwZWMpCi0gICAgICAgICAgKyAiKSIKLSAgICAgICAgICAr
ICIgd2l0aCBzY2FsaW5nIHR5cGUgIiArIHNjYWxpbmdUeXBlICsgIiBhbmQgZnJhbWU6ICIgKyBm
cmFtZURpbWVuc2lvbnMKLSAgICAgICAgICArICIgZXhwZWN0ZWQgbWVhc3VyZWQgc2l6ZSAiICsg
ZXhwZWN0ZWRXaWR0aCArICJ4IiArIGV4cGVjdGVkSGVpZ2h0ICsgIiwgYnV0IHdhcyAiCi0gICAg
ICAgICAgKyBtZWFzdXJlZFdpZHRoICsgIngiICsgbWVhc3VyZWRIZWlnaHQpOwotICAgIH0KLSAg
fQotCi0gIC8qKgotICAgKiBUZXN0IGhvdyBTdXJmYWNlVmlld1JlbmRlcmVyLm9uTWVhc3VyZSgp
IGJlaGF2ZXMgd2hlbiBubyBmcmFtZSBoYXMgYmVlbiBkZWxpdmVyZWQuCi0gICAqLwotICBAVWlU
aHJlYWRUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3ROb0ZyYW1lKCkgewot
ICAgIGZpbmFsIFN1cmZhY2VWaWV3UmVuZGVyZXIgc3VyZmFjZVZpZXdSZW5kZXJlciA9Ci0gICAg
ICAgIG5ldyBTdXJmYWNlVmlld1JlbmRlcmVyKGdldEluc3RydW1lbnRhdGlvbigpLmdldENvbnRl
eHQoKSk7Ci0gICAgZmluYWwgU3RyaW5nIGZyYW1lRGltZW5zaW9ucyA9ICJudWxsIjsKLQotICAg
IC8vIFRlc3QgYmVoYXZpb3VyIGJlZm9yZSBTdXJmYWNlVmlld1JlbmRlcmVyLmluaXQoKSBpcyBj
YWxsZWQuCi0gICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6
IHNjYWxpbmdUeXBlcykgewotICAgICAgZm9yIChpbnQgbWVhc3VyZVNwZWNNb2RlIDogbWVhc3Vy
ZVNwZWNNb2RlcykgewotICAgICAgICBmaW5hbCBpbnQgemVyb01lYXN1cmVTaXplID0gTWVhc3Vy
ZVNwZWMubWFrZU1lYXN1cmVTcGVjKDAsIG1lYXN1cmVTcGVjTW9kZSk7Ci0gICAgICAgIGFzc2Vy
dE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1l
bnNpb25zLCAwLCAwLCB6ZXJvTWVhc3VyZVNpemUsCi0gICAgICAgICAgICB6ZXJvTWVhc3VyZVNp
emUpOwotICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2Nh
bGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgMTI4MCwgNzIwLAotICAgICAgICAgICAgTWVhc3Vy
ZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIG1lYXN1cmVTcGVjTW9kZSksCi0gICAgICAgICAg
ICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoNzIwLCBtZWFzdXJlU3BlY01vZGUpKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUZXN0IGJlaGF2aW91ciBhZnRlciBTdXJmYWNlVmlld1Jl
bmRlcmVyLmluaXQoKSBpcyBjYWxsZWQsIGJ1dCBzdGlsbCBubyBmcmFtZS4KLSAgICBzdXJmYWNl
Vmlld1JlbmRlcmVyLmluaXQoKEVnbEJhc2UuQ29udGV4dCkgbnVsbCwgbnVsbCk7Ci0gICAgZm9y
IChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykg
ewotICAgICAgZm9yIChpbnQgbWVhc3VyZVNwZWNNb2RlIDogbWVhc3VyZVNwZWNNb2Rlcykgewot
ICAgICAgICBmaW5hbCBpbnQgemVyb01lYXN1cmVTaXplID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1
cmVTcGVjKDAsIG1lYXN1cmVTcGVjTW9kZSk7Ci0gICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShz
dXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCAwLCAwLCB6
ZXJvTWVhc3VyZVNpemUsCi0gICAgICAgICAgICB6ZXJvTWVhc3VyZVNpemUpOwotICAgICAgICBh
c3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1l
RGltZW5zaW9ucywgMTI4MCwgNzIwLAotICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1
cmVTcGVjKDEyODAsIG1lYXN1cmVTcGVjTW9kZSksCi0gICAgICAgICAgICBNZWFzdXJlU3BlYy5t
YWtlTWVhc3VyZVNwZWMoNzIwLCBtZWFzdXJlU3BlY01vZGUpKTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBzdXJmYWNlVmlld1JlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBU
ZXN0IGhvdyBTdXJmYWNlVmlld1JlbmRlcmVyLm9uTWVhc3VyZSgpIGJlaGF2ZXMgd2l0aCBhIDEy
ODB4NzIwIGZyYW1lLgotICAgKi8KLSAgQFVpVGhyZWFkVGVzdAotICBATWVkaXVtVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0RnJhbWUxMjgweDcyMCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZmluYWwgU3VyZmFjZVZpZXdSZW5kZXJlciBzdXJmYWNlVmlld1JlbmRlcmVyID0K
LSAgICAgICAgbmV3IFN1cmZhY2VWaWV3UmVuZGVyZXIoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0
Q29udGV4dCgpKTsKLSAgICAvKioKLSAgICAgKiBNb2NrIHJlbmRlcmVyIGV2ZW50cyB3aXRoIGJs
b2NraW5nIHdhaXQgZnVuY3Rpb25hbGl0eSBmb3IgZnJhbWUgc2l6ZSBjaGFuZ2VzLgotICAgICAq
LwotICAgIGNsYXNzIE1vY2tSZW5kZXJlckV2ZW50cyBpbXBsZW1lbnRzIFJlbmRlcmVyQ29tbW9u
LlJlbmRlcmVyRXZlbnRzIHsKLSAgICAgIHByaXZhdGUgaW50IGZyYW1lV2lkdGg7Ci0gICAgICBw
cml2YXRlIGludCBmcmFtZUhlaWdodDsKLSAgICAgIHByaXZhdGUgaW50IHJvdGF0aW9uOwotCi0g
ICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgd2FpdEZvckZyYW1lU2l6ZShpbnQgZnJhbWVX
aWR0aCwgaW50IGZyYW1lSGVpZ2h0LCBpbnQgcm90YXRpb24pCi0gICAgICAgICAgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgICAgd2hpbGUgKHRoaXMuZnJhbWVXaWR0aCAhPSBm
cmFtZVdpZHRoIHx8IHRoaXMuZnJhbWVIZWlnaHQgIT0gZnJhbWVIZWlnaHQKLSAgICAgICAgICAg
IHx8IHRoaXMucm90YXRpb24gIT0gcm90YXRpb24pIHsKLSAgICAgICAgICB3YWl0KCk7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lUmVuZGVyZWQo
KSB7fQotCi0gICAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25GcmFtZVJlc29sdXRpb25D
aGFuZ2VkKAotICAgICAgICAgIGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQsIGludCBy
b3RhdGlvbikgewotICAgICAgICB0aGlzLmZyYW1lV2lkdGggPSBmcmFtZVdpZHRoOwotICAgICAg
ICB0aGlzLmZyYW1lSGVpZ2h0ID0gZnJhbWVIZWlnaHQ7Ci0gICAgICAgIHRoaXMucm90YXRpb24g
PSByb3RhdGlvbjsKLSAgICAgICAgbm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGZp
bmFsIE1vY2tSZW5kZXJlckV2ZW50cyByZW5kZXJlckV2ZW50cyA9IG5ldyBNb2NrUmVuZGVyZXJF
dmVudHMoKTsKLSAgICBzdXJmYWNlVmlld1JlbmRlcmVyLmluaXQoKEVnbEJhc2UuQ29udGV4dCkg
bnVsbCwgcmVuZGVyZXJFdmVudHMpOwotCi0gICAgLy8gVGVzdCBkaWZmZXJlbnQgcm90YXRpb24g
ZGVncmVzcywgYnV0IHNhbWUgcm90YXRlZCBzaXplLgotICAgIGZvciAoaW50IHJvdGF0aW9uRGVn
cmVlIDogbmV3IGludFtdIHswLCA5MCwgMTgwLCAyNzB9KSB7Ci0gICAgICBmaW5hbCBpbnQgcm90
YXRlZFdpZHRoID0gMTI4MDsKLSAgICAgIGZpbmFsIGludCByb3RhdGVkSGVpZ2h0ID0gNzIwOwot
ICAgICAgZmluYWwgaW50IHVucm90YXRlZFdpZHRoID0gKHJvdGF0aW9uRGVncmVlICUgMTgwID09
IDAgPyByb3RhdGVkV2lkdGggOiByb3RhdGVkSGVpZ2h0KTsKLSAgICAgIGZpbmFsIGludCB1bnJv
dGF0ZWRIZWlnaHQgPSAocm90YXRpb25EZWdyZWUgJSAxODAgPT0gMCA/IHJvdGF0ZWRIZWlnaHQg
OiByb3RhdGVkV2lkdGgpOwotICAgICAgZmluYWwgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJh
bWUgPQotICAgICAgICAgIGNyZWF0ZUZyYW1lKHVucm90YXRlZFdpZHRoLCB1bnJvdGF0ZWRIZWln
aHQsIHJvdGF0aW9uRGVncmVlKTsKLSAgICAgIGFzc2VydEVxdWFscyhyb3RhdGVkV2lkdGgsIGZy
YW1lLnJvdGF0ZWRXaWR0aCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhyb3RhdGVkSGVpZ2h0LCBm
cmFtZS5yb3RhdGVkSGVpZ2h0KCkpOwotICAgICAgZmluYWwgU3RyaW5nIGZyYW1lRGltZW5zaW9u
cyA9Ci0gICAgICAgICAgdW5yb3RhdGVkV2lkdGggKyAieCIgKyB1bnJvdGF0ZWRIZWlnaHQgKyAi
IHdpdGggcm90YXRpb24gIiArIHJvdGF0aW9uRGVncmVlOwotICAgICAgc3VyZmFjZVZpZXdSZW5k
ZXJlci5yZW5kZXJGcmFtZShmcmFtZSk7Ci0gICAgICByZW5kZXJlckV2ZW50cy53YWl0Rm9yRnJh
bWVTaXplKHVucm90YXRlZFdpZHRoLCB1bnJvdGF0ZWRIZWlnaHQsIHJvdGF0aW9uRGVncmVlKTsK
LQotICAgICAgLy8gVGVzdCBmb3JjaW5nIHRvIHplcm8gc2l6ZS4KLSAgICAgIGZvciAoUmVuZGVy
ZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAg
ICAgZm9yIChpbnQgbWVhc3VyZVNwZWNNb2RlIDogbWVhc3VyZVNwZWNNb2RlcykgewotICAgICAg
ICAgIGZpbmFsIGludCB6ZXJvTWVhc3VyZVNpemUgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNw
ZWMoMCwgbWVhc3VyZVNwZWNNb2RlKTsKLSAgICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3Vy
ZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgMCwgMCwKLSAg
ICAgICAgICAgICAgemVyb01lYXN1cmVTaXplLCB6ZXJvTWVhc3VyZVNpemUpOwotICAgICAgICB9
Ci0gICAgICB9Ci0KLSAgICAgIC8vIFRlc3QgcGVyZmVjdCBmaXQuCi0gICAgICBmb3IgKFJlbmRl
cmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAg
ICAgIGZvciAoaW50IG1lYXN1cmVTcGVjTW9kZSA6IG1lYXN1cmVTcGVjTW9kZXMpIHsKLSAgICAg
ICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUs
IGZyYW1lRGltZW5zaW9ucywgcm90YXRlZFdpZHRoLAotICAgICAgICAgICAgICByb3RhdGVkSGVp
Z2h0LCBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMocm90YXRlZFdpZHRoLCBtZWFzdXJlU3Bl
Y01vZGUpLAotICAgICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMocm90YXRl
ZEhlaWdodCwgbWVhc3VyZVNwZWNNb2RlKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAg
Ly8gRm9yY2Ugc3BlYyBzaXplIHdpdGggZGlmZmVyZW50IGFzcGVjdCByYXRpbyB0aGFuIGZyYW1l
IGFzcGVjdCByYXRpby4KLSAgICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2Nh
bGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1
cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDcyMCwgMTI4
MCwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIE1lYXN1cmVT
cGVjLkVYQUNUTFkpLAotICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEy
ODAsIE1lYXN1cmVTcGVjLkVYQUNUTFkpKTsKLSAgICAgIH0KLQotICAgICAgZmluYWwgZmxvYXQg
dmlkZW9Bc3BlY3RSYXRpbyA9IChmbG9hdCkgcm90YXRlZFdpZHRoIC8gcm90YXRlZEhlaWdodDsK
LSAgICAgIHsKLSAgICAgICAgLy8gUmVsYXggYm90aCB3aWR0aCBhbmQgaGVpZ2h0IGNvbnN0cmFp
bnRzLgotICAgICAgICBmaW5hbCBpbnQgd2lkdGhTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1
cmVTcGVjKDcyMCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgICAgIGZpbmFsIGludCBoZWln
aHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIE1lYXN1cmVTcGVjLkFU
X01PU1QpOwotICAgICAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdU
eXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAgICAgICAgZmluYWwgUG9pbnQgZXhwZWN0ZWRTaXpl
ID0KLSAgICAgICAgICAgICAgUmVuZGVyZXJDb21tb24uZ2V0RGlzcGxheVNpemUoc2NhbGluZ1R5
cGUsIHZpZGVvQXNwZWN0UmF0aW8sIDcyMCwgMTI4MCk7Ci0gICAgICAgICAgYXNzZXJ0TWVhc3Vy
ZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMs
IGV4cGVjdGVkU2l6ZS54LAotICAgICAgICAgICAgICBleHBlY3RlZFNpemUueSwgd2lkdGhTcGVj
LCBoZWlnaHRTcGVjKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAgICAvLyBG
b3JjZSB3aWR0aCB0byA3MjAsIGJ1dCByZWxheCBoZWlnaHQgY29uc3RyYWludC4gVGhpcyB3aWxs
IGdpdmUgdGhlIHNhbWUgcmVzdWx0IGFzCi0gICAgICAgIC8vIGFib3ZlLCBiZWNhdXNlIHdpZHRo
IGlzIGFscmVhZHkgdGhlIGxpbWl0aW5nIGZhY3RvciBhbmQgd2lsbCBiZSBtYXhlZCBvdXQuCi0g
ICAgICAgIGZpbmFsIGludCB3aWR0aFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMo
NzIwLCBNZWFzdXJlU3BlYy5FWEFDVExZKTsKLSAgICAgICAgZmluYWwgaW50IGhlaWdodFNwZWMg
PSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7
Ci0gICAgICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBz
Y2FsaW5nVHlwZXMpIHsKLSAgICAgICAgICBmaW5hbCBQb2ludCBleHBlY3RlZFNpemUgPQotICAg
ICAgICAgICAgICBSZW5kZXJlckNvbW1vbi5nZXREaXNwbGF5U2l6ZShzY2FsaW5nVHlwZSwgdmlk
ZW9Bc3BlY3RSYXRpbywgNzIwLCAxMjgwKTsKLSAgICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUo
c3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgZXhwZWN0
ZWRTaXplLngsCi0gICAgICAgICAgICAgIGV4cGVjdGVkU2l6ZS55LCB3aWR0aFNwZWMsIGhlaWdo
dFNwZWMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgIC8vIEZvcmNlIGhl
aWdodCwgYnV0IHJlbGF4IHdpZHRoIGNvbnN0cmFpbnQuIFRoaXMgd2lsbCBmb3JjZSBhIGJhZCBs
YXlvdXQgc2l6ZS4KLSAgICAgICAgZmluYWwgaW50IHdpZHRoU3BlYyA9IE1lYXN1cmVTcGVjLm1h
a2VNZWFzdXJlU3BlYyg3MjAsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgICAgICBmaW5hbCBp
bnQgaGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygxMjgwLCBNZWFzdXJl
U3BlYy5FWEFDVExZKTsKLSAgICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBz
Y2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAgICAgIGFzc2VydE1lYXN1cmVkU2l6
ZSgKLSAgICAgICAgICAgICAgc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1l
RGltZW5zaW9ucywgNzIwLCAxMjgwLCB3aWR0aFNwZWMsIGhlaWdodFNwZWMpOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgc3VyZmFjZVZpZXdSZW5kZXJlci5yZWxlYXNlKCk7Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvV2ViUnRjSm5pQm9vdFRlc3QuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkv
YW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1dlYlJ0Y0puaUJvb3RUZXN0LmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvV2ViUnRjSm5pQm9vdFRlc3QuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhl
IFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLmFwcHNwb3QuYXBwcnRjLnRlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1
bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5v
dGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb25GYWN0
b3J5OwotCi0vLyBUaGlzIHRlc3QgaXMgaW50ZW5kZWQgdG8gcnVuIG9uIEFSTSBhbmQgY2F0Y2gg
TG9hZExpYnJhcnkgZXJyb3JzIHdoZW4gd2UgbG9hZCB0aGUgV2ViUlRDCi0vLyBKTkkuIEl0IGNh
bid0IHJlYWxseSBiZSBzZXR0aW5nIHVwIGNhbGxzIHNpbmNlIEFSTSBlbXVsYXRvcnMgYXJlIHRv
byBzbG93LCBidXQgaW5zdGFudGlhdGluZwotLy8gYSBwZWVyIGNvbm5lY3Rpb24gaXNuJ3QgdGlt
aW5nLXNlbnNpdGl2ZSwgc28gd2UgY2FuIGF0IGxlYXN0IGRvIHRoYXQuCi1wdWJsaWMgY2xhc3Mg
V2ViUnRjSm5pQm9vdFRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIEBT
bWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEpuaUxvYWRzV2l0aG91dEVycm9yKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlh
bGl6ZUFuZHJvaWRHbG9iYWxzKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQo
KSwKLSAgICAgICAgdHJ1ZSAvKiBpbml0aWFsaXplQXVkaW8gKi8sIHRydWUgLyogaW5pdGlhbGl6
ZVZpZGVvICovLAotICAgICAgICBmYWxzZSAvKiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24gKi8p
OwotCi0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVy
Q29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucygpOwotICAgIG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkob3B0aW9ucyk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1
cmVyVXNpbmdCeXRlQnVmZmVyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJy
dGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdCeXRlQnVmZmVyVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nQnl0ZUJ1ZmZlclRl
c3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4
dDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQg
YW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLkxhcmdlVGVzdDsKLWltcG9ydCBh
bmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBh
bmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotCi1wdWJsaWMg
Y2xhc3MgQ2FtZXJhMUNhcHR1cmVyVXNpbmdCeXRlQnVmZmVyVGVzdCBleHRlbmRzIEluc3RydW1l
bnRhdGlvblRlc3RDYXNlIHsKLSAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJhMUNh
cHR1cmVyVXNpbmdCeXRlQnVmZmVyVGVzdCI7Ci0KLSAgcHJpdmF0ZSBjbGFzcyBUZXN0T2JqZWN0
RmFjdG9yeSBleHRlbmRzIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMuVGVzdE9iamVj
dEZhY3RvcnkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzQ2FwdHVyaW5n
VG9UZXh0dXJlKCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBDYW1lcmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3IoKSB7Ci0g
ICAgICByZXR1cm4gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29udGV4dCBnZXRBcHBDb250ZXh0KCkgewotICAgICAgcmV0
dXJuIGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKTsKLSAgICB9Ci0KLSAg
ICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBPYmplY3QgcmF3T3BlbkNhbWVyYShTdHJpbmcgY2FtZXJhTmFtZSkgewotICAgICAgcmV0
dXJuIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oQ2FtZXJhMUVudW1lcmF0b3IuZ2V0Q2Ft
ZXJhSW5kZXgoY2FtZXJhTmFtZSkpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJk
ZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcmF3Q2xvc2VDYW1l
cmEoT2JqZWN0IGNhbWVyYSkgewotICAgICAgKChhbmRyb2lkLmhhcmR3YXJlLkNhbWVyYSkgY2Ft
ZXJhKS5yZWxlYXNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBDYW1lcmFWaWRlb0NhcHR1
cmVyVGVzdEZpeHR1cmVzIGZpeHR1cmVzOwotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9p
ZCBzZXRVcCgpIHsKLSAgICBmaXh0dXJlcyA9IG5ldyBDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZp
eHR1cmVzKG5ldyBUZXN0T2JqZWN0RmFjdG9yeSgpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
cm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBmaXh0dXJlcy5kaXNwb3NlKCk7Ci0gIH0K
LQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVBbmREaXNwb3NlKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVDYXB0dXJlckFu
ZERpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0
ZU5vbkV4aXN0aW5nQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBm
aXh0dXJlcy5jcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0
IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJhbWVzIGFyZSBm
b3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIGEgImRlZmF1bHQi
IGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVy
LgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQ2FwdHVyZXJBbmRSZW5k
ZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUNh
cHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJh
IGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndhcmRlZAotICAvLyB0
byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgdGhlIGZyb250IGZhY2luZyB2aWRlbyBjYXB0
dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAg
QE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0RnJvbnRGYWNpbmdWaWRlb0NhcHR1
cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVG
cm9udEZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhh
dCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndh
cmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgdGhlIGJhY2sgZmFjaW5n
IHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysr
IGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRCYWNrRmFjaW5n
VmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVy
ZXMuY3JlYXRlQmFja0ZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBUaGlz
IHRlc3QgdGhhdCB0aGUgZGVmYXVsdCBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhl
IGNhbWVyYSBjYW4KLSAgLy8gbGF0ZXIgYmUgc3dpdGNoZWQgdG8gYW5vdGhlciBjYW1lcmEuCi0g
IC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1U
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hWaWRlb0NhcHR1cmVyKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zd2l0Y2hDYW1lcmEoKTsKLSAgfQotCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFFdmVudHMoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUV2ZW50c0ludm9rZWQoKTsK
LSAgfQotCi0gIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gYXR0ZW1wdGluZyB0byBjYWxsIGUu
Zy4gc3dpdGNoQ2FtZXJhKCkgYWZ0ZXIgY2FtZXJhIGhhcyBiZWVuIHN0b3BwZWQuCi0gIEBNZWRp
dW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFDYWxsc0FmdGVyU3RvcCgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY2FtZXJhQ2FsbHNBZnRlclN0b3Ao
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBWaWRlb1NvdXJjZSB0aGF0IHRoZSBD
YW1lcmFWaWRlb0NhcHR1cmVyIGlzIGNvbm5lY3RlZCB0byBjYW4KLSAgLy8gYmUgc3RvcHBlZCBh
bmQgcmVzdGFydGVkLiBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgot
ICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdG9wUmVzdGFydFZpZGVvU291cmNlKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdG9wUmVzdGFydFZp
ZGVvU291cmNlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBi
ZSBzdGFydGVkIGF0IGRpZmZlcmVudCByZXNvbHV0aW9ucy4KLSAgLy8gSXQgZG9lcyBub3QgdGVz
dCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
U3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFN0b3BXaXRoRGlmZmVyZW50UmVzb2x1dGlvbnMo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB3aGF0IGhhcHBlbnMgaWYgYnVmZmVycyBhcmUgcmV0
dXJuZWQgYWZ0ZXIgdGhlIGNhcHR1cmVyIGhhdmUKLSAgLy8gYmVlbiBzdG9wcGVkIGFuZCByZXN0
YXJ0ZWQuIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJnZVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZlckxhdGUoKTsKLSAgfQotCi0g
IC8vIFRoaXMgdGVzdCB0aGF0IHdlIGNhbiBjYXB0dXJlIGZyYW1lcywga2VlcCB0aGUgZnJhbWVz
IGluIGEgbG9jYWwgcmVuZGVyZXIsIHN0b3AgY2FwdHVyaW5nLAotICAvLyBhbmQgdGhlbiByZXR1
cm4gdGhlIGZyYW1lcy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGVzdCB0ZXN0UmV0dXJu
QnVmZmVyTGF0ZSgpIGlzIHRoYXQgd2UKLSAgLy8gYWxzbyB0ZXN0IHRoZSBKTkkgYW5kIEMrKyBB
bmRyb2lkVmlkZW9DYXB0dXJlciBwYXJ0cy4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdFJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZUVuZFRvRW5kKCk7Ci0gIH0KLQotICAv
LyBUaGlzIHRlc3QgdGhhdCBmcmFtZXMgZm9yd2FyZGVkIHRvIGEgcmVuZGVyZXIgaXMgc2NhbGVk
IGlmIGFkYXB0T3V0cHV0Rm9ybWF0IGlzCi0gIC8vIGNhbGxlZC4gVGhpcyB0ZXN0IGJvdGggSmF2
YSBhbmQgQysrIHBhcnRzIG9mIG9mIHRoZSBzdGFjay4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFNjYWxlQ2FtZXJhT3V0cHV0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBmaXh0dXJlcy5zY2FsZUNhbWVyYU91dHB1dCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgdGhlIGNhbWVyYSBpcyBhbHJlYWR5IG9w
ZW5lZAotICAvLyB3aGVuIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgc3RhcnRlZC4KLSAgQExhcmdl
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1l
cmFJc0FscmVhZHlPcGVuKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRl
b0NhcHR1cmVyIGNhbiBiZSBzdGFydGVkLCBldmVuIGlmIHRoZSBjYW1lcmEgaXMgYWxyZWFkeSBv
cGVuZWQKLSAgLy8gaWYgdGhlIGNhbWVyYSBpcyBjbG9zZWQgd2hpbGUgQ2FtZXJhVmlkZW9DYXB0
dXJlciBpcyByZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0Fs
cmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENh
bWVyYVZpZGVvQ2FwdHVyZXIuc3RvcCBjYW4gYmUgY2FsbGVkIHdoaWxlIENhbWVyYVZpZGVvQ2Fw
dHVyZXIgaXMKLSAgLy8gcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBATWVkaXVtVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNB
bHJlYWR5T3BlbkFuZFN0b3AoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1l
cmExQ2FwdHVyZXJVc2luZ1RleHR1cmVUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3Jn
L3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2luZ1RleHR1cmVUZXN0LmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9h
bmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdUZXh0dXJlVGVz
dC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTc0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0
OwotaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBh
bmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTGFyZ2VUZXN0OwotaW1wb3J0IGFu
ZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFu
ZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLXB1YmxpYyBj
bGFzcyBDYW1lcmExQ2FwdHVyZXJVc2luZ1RleHR1cmVUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0
aW9uVGVzdENhc2UgewotICBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmExQ2FwdHVy
ZXJVc2luZ1RleHR1cmVUZXN0IjsKLQotICBwcml2YXRlIGNsYXNzIFRlc3RPYmplY3RGYWN0b3J5
IGV4dGVuZHMgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcy5UZXN0T2JqZWN0RmFjdG9y
eSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENhbWVyYUVudW1lcmF0b3IgZ2V0Q2FtZXJh
RW51bWVyYXRvcigpIHsKLSAgICAgIHJldHVybiBuZXcgQ2FtZXJhMUVudW1lcmF0b3IoKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29udGV4dCBnZXRBcHBDb250ZXh0KCkg
ewotICAgICAgcmV0dXJuIGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKTsK
LSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBPYmplY3QgcmF3T3BlbkNhbWVyYShTdHJpbmcgY2FtZXJhTmFtZSkg
ewotICAgICAgcmV0dXJuIGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhLm9wZW4oQ2FtZXJhMUVudW1l
cmF0b3IuZ2V0Q2FtZXJhSW5kZXgoY2FtZXJhTmFtZSkpOwotICAgIH0KLQotICAgIEBTdXBwcmVz
c1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
cmF3Q2xvc2VDYW1lcmEoT2JqZWN0IGNhbWVyYSkgewotICAgICAgKChhbmRyb2lkLmhhcmR3YXJl
LkNhbWVyYSkgY2FtZXJhKS5yZWxlYXNlKCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBDYW1l
cmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzIGZpeHR1cmVzOwotCi0gIEBPdmVycmlkZQotICBw
cm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLSAgICBmaXh0dXJlcyA9IG5ldyBDYW1lcmFWaWRlb0Nh
cHR1cmVyVGVzdEZpeHR1cmVzKG5ldyBUZXN0T2JqZWN0RmFjdG9yeSgpKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBmaXh0dXJlcy5kaXNw
b3NlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVBbmRE
aXNwb3NlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVh
dGVDYXB0dXJlckFuZERpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdENyZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUg
ZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5n
IGEgImRlZmF1bHQiIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0
aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlQ2Fw
dHVyZXJBbmRSZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLmNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhh
dCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndh
cmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgdGhlIGZyb250IGZhY2lu
ZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMr
KyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0RnJvbnRGYWNp
bmdWaWRlb0NhcHR1cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0
dXJlcy5jcmVhdGVGcm9udEZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0KLQotICAvLyBU
aGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFt
ZXMgYXJlIGZvcndhcmRlZAotICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgdGhl
IGJhY2sgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZh
IGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3Rh
cnRCYWNrRmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuY3JlYXRlQmFja0ZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCk7Ci0gIH0K
LQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgZGVmYXVsdCBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQg
YW5kIHRoYXQgdGhlIGNhbWVyYSBjYW4KLSAgLy8gbGF0ZXIgYmUgc3dpdGNoZWQgdG8gYW5vdGhl
ciBjYW1lcmEuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIu
Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTd2l0Y2hWaWRlb0NhcHR1cmVyKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zd2l0Y2hDYW1lcmEo
KTsKLSAgfQotCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFFdmVudHMo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUV2ZW50
c0ludm9rZWQoKTsKLSAgfQotCi0gIC8vIFRlc3Qgd2hhdCBoYXBwZW5zIHdoZW4gYXR0ZW1wdGlu
ZyB0byBjYWxsIGUuZy4gc3dpdGNoQ2FtZXJhKCkgYWZ0ZXIgY2FtZXJhIGhhcyBiZWVuIHN0b3Bw
ZWQuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFDYWxsc0FmdGVyU3Rv
cCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY2FtZXJhQ2Fs
bHNBZnRlclN0b3AoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBWaWRlb1NvdXJj
ZSB0aGF0IHRoZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIGNvbm5lY3RlZCB0byBjYW4KLSAgLy8g
YmUgc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUg
QysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdG9wUmVzdGFydFZp
ZGVvU291cmNlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5z
dG9wUmVzdGFydFZpZGVvU291cmNlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUg
Y2FtZXJhIGNhbiBiZSBzdGFydGVkIGF0IGRpZmZlcmVudCByZXNvbHV0aW9ucy4KLSAgLy8gSXQg
ZG9lcyBub3QgdGVzdCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0U3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29sdXRpb25zKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFN0b3BXaXRoRGlmZmVyZW50
UmVzb2x1dGlvbnMoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB3aGF0IGhhcHBlbnMgaWYgYnVm
ZmVycyBhcmUgcmV0dXJuZWQgYWZ0ZXIgdGhlIGNhcHR1cmVyIGhhdmUKLSAgLy8gYmVlbiBzdG9w
cGVkIGFuZCByZXN0YXJ0ZWQuIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIu
Ci0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZlckxhdGUo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHdlIGNhbiBjYXB0dXJlIGZyYW1lcywga2Vl
cCB0aGUgZnJhbWVzIGluIGEgbG9jYWwgcmVuZGVyZXIsIHN0b3AgY2FwdHVyaW5nLAotICAvLyBh
bmQgdGhlbiByZXR1cm4gdGhlIGZyYW1lcy4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdGVz
dCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZSgpIGlzIHRoYXQgd2UKLSAgLy8gYWxzbyB0ZXN0IHRoZSBK
TkkgYW5kIEMrKyBBbmRyb2lkVmlkZW9DYXB0dXJlciBwYXJ0cy4KLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdFJldHVybkJ1ZmZlckxhdGVFbmRUb0VuZCgpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZUVuZFRvRW5kKCk7
Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFFdmVudHNIYW5kbGVyLm9uRXJyb3Ig
aXMgdHJpZ2dlcmVkIGlmIHZpZGVvIGJ1ZmZlcnMgYXJlIG5vdCByZXR1cm5lZCB0bwotICAvLyB0
aGUgY2FwdHVyZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYUZyZWV6
ZWRFdmVudE9uQnVmZmVyU3RhcnZhdGlvbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuY2FtZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0aW9uKCk7Ci0g
IH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBmcmFtZXMgZm9yd2FyZGVkIHRvIGEgcmVuZGVyZXIg
aXMgc2NhbGVkIGlmIGFkYXB0T3V0cHV0Rm9ybWF0IGlzCi0gIC8vIGNhbGxlZC4gVGhpcyB0ZXN0
IGJvdGggSmF2YSBhbmQgQysrIHBhcnRzIG9mIG9mIHRoZSBzdGFjay4KLSAgQE1lZGl1bVRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdFNjYWxlQ2FtZXJhT3V0cHV0KCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zY2FsZUNhbWVyYU91dHB1dCgpOwotICB9Ci0KLSAg
Ly8gVGhpcyB0ZXN0IHRoYXQgYW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgdGhlIGNhbWVyYSBpcyBh
bHJlYWR5IG9wZW5lZAotICAvLyB3aGVuIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgc3RhcnRlZC4K
LSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFk
eU9wZW4oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0
V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBD
YW1lcmFWaWRlb0NhcHR1cmVyIGNhbiBiZSBzdGFydGVkLCBldmVuIGlmIHRoZSBjYW1lcmEgaXMg
YWxyZWFkeSBvcGVuZWQKLSAgLy8gaWYgdGhlIGNhbWVyYSBpcyBjbG9zZWQgd2hpbGUgQ2FtZXJh
VmlkZW9DYXB0dXJlciBpcyByZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBMYXJnZVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVD
YW1lcmFJc0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVyZXIuc3RvcCBjYW4gYmUgY2FsbGVkIHdoaWxlIENhbWVy
YVZpZGVvQ2FwdHVyZXIgaXMKLSAgLy8gcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9w
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5zdGFydFdoaWxl
Q2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9DYW1lcmEyQ2FwdHVyZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9DYW1lcmEyQ2FwdHVyZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3Jj
L29yZy93ZWJydGMvQ2FtZXJhMkNhcHR1cmVyVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
Mjk4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUu
Y2FtZXJhMi5DYW1lcmFBY2Nlc3NFeGNlcHRpb247Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5j
YW1lcmEyLkNhbWVyYURldmljZTsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2Ft
ZXJhTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5Mb29wZXI7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOwot
aW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5MYXJnZVRlc3Q7Ci1p
bXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1p
bXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotCi1wdWJsaWMgY2xh
c3MgQ2FtZXJhMkNhcHR1cmVyVGVzdCBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsK
LSAgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FtZXJhMkNhcHR1cmVyVGVzdCI7Ci0KLSAg
LyoqCi0gICAqIFNpbXBsZSBjYW1lcmEyIGltcGxlbWVudGF0aW9uIHRoYXQgb25seSBrbm93cyBo
b3cgdG8gb3BlbiB0aGUgY2FtZXJhIGFuZCBjbG9zZSBpdC4KLSAgICovCi0gIHByaXZhdGUgY2xh
c3MgU2ltcGxlQ2FtZXJhMiB7Ci0gICAgZmluYWwgQ2FtZXJhTWFuYWdlciBjYW1lcmFNYW5hZ2Vy
OwotICAgIGZpbmFsIExvb3BlclRocmVhZCBsb29wZXJUaHJlYWQ7Ci0gICAgZmluYWwgQ291bnRE
b3duTGF0Y2ggb3BlbkRvbmVTaWduYWw7Ci0gICAgZmluYWwgT2JqZWN0IGNhbWVyYURldmljZUxv
Y2s7Ci0gICAgQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZTsgLy8gR3VhcmRlZCBieSBjYW1lcmFE
ZXZpY2VMb2NrCi0gICAgYm9vbGVhbiBvcGVuU3VjY2VlZGVkOyAvLyBHdWFyZGVkIGJ5IGNhbWVy
YURldmljZUxvY2sKLQotICAgIHByaXZhdGUgY2xhc3MgTG9vcGVyVGhyZWFkIGV4dGVuZHMgVGhy
ZWFkIHsKLSAgICAgIGZpbmFsIENvdW50RG93bkxhdGNoIHN0YXJ0ZWRTaWduYWwgPSBuZXcgQ291
bnREb3duTGF0Y2goMSk7Ci0gICAgICBwcml2YXRlIEhhbmRsZXIgaGFuZGxlcjsKLQotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIExvb3Blci5wcmVw
YXJlKCk7Ci0gICAgICAgIGhhbmRsZXIgPSBuZXcgSGFuZGxlcigpOwotICAgICAgICBzdGFydGVk
U2lnbmFsLmNvdW50RG93bigpOwotICAgICAgICBMb29wZXIubG9vcCgpOwotICAgICAgfQotCi0g
ICAgICBwdWJsaWMgdm9pZCB3YWl0VG9TdGFydCgpIHsKLSAgICAgICAgVGhyZWFkVXRpbHMuYXdh
aXRVbmludGVycnVwdGlibHkoc3RhcnRlZFNpZ25hbCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1Ymxp
YyB2b2lkIHJlcXVlc3RTdG9wKCkgewotICAgICAgICBoYW5kbGVyLmdldExvb3BlcigpLnF1aXQo
KTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIEhhbmRsZXIgZ2V0SGFuZGxlcigpIHsKLSAgICAg
ICAgcmV0dXJuIGhhbmRsZXI7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBjbGFzcyBD
YW1lcmFTdGF0ZUNhbGxiYWNrIGV4dGVuZHMgQ2FtZXJhRGV2aWNlLlN0YXRlQ2FsbGJhY2sgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNsb3NlZChDYW1lcmFEZXZpY2Ug
Y2FtZXJhRGV2aWNlKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJTaW1wbGUgY2FtZXJhMiBj
bG9zZWQuIik7Ci0KLSAgICAgICAgc3luY2hyb25pemVkIChjYW1lcmFEZXZpY2VMb2NrKSB7Ci0g
ICAgICAgICAgU2ltcGxlQ2FtZXJhMi50aGlzLmNhbWVyYURldmljZSA9IG51bGw7Ci0gICAgICAg
IH0KLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkRpc2Nv
bm5lY3RlZChDYW1lcmFEZXZpY2UgY2FtZXJhRGV2aWNlKSB7Ci0gICAgICAgIExvZ2dpbmcuZChU
QUcsICJTaW1wbGUgY2FtZXJhMiBkaXNjb25uZWN0ZWQuIik7Ci0KLSAgICAgICAgc3luY2hyb25p
emVkIChjYW1lcmFEZXZpY2VMb2NrKSB7Ci0gICAgICAgICAgU2ltcGxlQ2FtZXJhMi50aGlzLmNh
bWVyYURldmljZSA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBvbkVycm9yKENhbWVyYURldmljZSBjYW1lcmFEZXZpY2UsIGlu
dCBlcnJvckNvZGUpIHsKLSAgICAgICAgTG9nZ2luZy53KFRBRywgIlNpbXBsZSBjYW1lcmEyIGVy
cm9yOiAiICsgZXJyb3JDb2RlKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYURldmlj
ZUxvY2spIHsKLSAgICAgICAgICBTaW1wbGVDYW1lcmEyLnRoaXMuY2FtZXJhRGV2aWNlID0gY2Ft
ZXJhRGV2aWNlOwotICAgICAgICAgIG9wZW5TdWNjZWVkZWQgPSBmYWxzZTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG9wZW5Eb25lU2lnbmFsLmNvdW50RG93bigpOwotICAgICAgfQotCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uT3BlbmVkKENhbWVyYURldmljZSBjYW1lcmFE
ZXZpY2UpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlNpbXBsZSBjYW1lcmEyIG9wZW5lZC4i
KTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAg
ICBTaW1wbGVDYW1lcmEyLnRoaXMuY2FtZXJhRGV2aWNlID0gY2FtZXJhRGV2aWNlOwotICAgICAg
ICAgIG9wZW5TdWNjZWVkZWQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgb3BlbkRvbmVT
aWduYWwuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU2ltcGxlQ2FtZXJhMihD
b250ZXh0IGNvbnRleHQsIFN0cmluZyBkZXZpY2VOYW1lKSB7Ci0gICAgICBjYW1lcmFNYW5hZ2Vy
ID0gKENhbWVyYU1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkNBTUVS
QV9TRVJWSUNFKTsKLSAgICAgIGxvb3BlclRocmVhZCA9IG5ldyBMb29wZXJUaHJlYWQoKTsKLSAg
ICAgIGxvb3BlclRocmVhZC5zdGFydCgpOwotICAgICAgbG9vcGVyVGhyZWFkLndhaXRUb1N0YXJ0
KCk7Ci0gICAgICBjYW1lcmFEZXZpY2VMb2NrID0gbmV3IE9iamVjdCgpOwotICAgICAgb3BlbkRv
bmVTaWduYWwgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgICBjYW1lcmFEZXZpY2UgPSBu
dWxsOwotICAgICAgTG9nZ2luZy5kKFRBRywgIk9wZW5pbmcgc2ltcGxlIGNhbWVyYTIuIik7Ci0g
ICAgICB0cnkgewotICAgICAgICBjYW1lcmFNYW5hZ2VyLm9wZW5DYW1lcmEoZGV2aWNlTmFtZSwg
bmV3IENhbWVyYVN0YXRlQ2FsbGJhY2soKSwgbG9vcGVyVGhyZWFkLmdldEhhbmRsZXIoKSk7Ci0g
ICAgICB9IGNhdGNoIChDYW1lcmFBY2Nlc3NFeGNlcHRpb24gZSkgewotICAgICAgICBmYWlsKCJT
aW1wbGUgY2FtZXJhMiBDYW1lcmFBY2Nlc3NFeGNlcHRpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7
Ci0gICAgICB9Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZvciBzaW1wbGUgY2Ft
ZXJhMiB0byBvcGVuLiIpOwotICAgICAgVGhyZWFkVXRpbHMuYXdhaXRVbmludGVycnVwdGlibHko
b3BlbkRvbmVTaWduYWwpOwotICAgICAgc3luY2hyb25pemVkIChjYW1lcmFEZXZpY2VMb2NrKSB7
Ci0gICAgICAgIGlmICghb3BlblN1Y2NlZWRlZCkgewotICAgICAgICAgIGZhaWwoIk9wZW5pbmcg
c2ltcGxlIGNhbWVyYTIgZmFpbGVkLiIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2xvc2luZyBz
aW1wbGUgY2FtZXJhMi4iKTsKLSAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhRGV2aWNlTG9jaykg
ewotICAgICAgICBpZiAoY2FtZXJhRGV2aWNlICE9IG51bGwpIHsKLSAgICAgICAgICBjYW1lcmFE
ZXZpY2UuY2xvc2UoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBsb29wZXJUaHJlYWQu
cmVxdWVzdFN0b3AoKTsKLSAgICAgIFRocmVhZFV0aWxzLmpvaW5VbmludGVycnVwdGlibHkobG9v
cGVyVGhyZWFkKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFRlc3RPYmplY3RGYWN0
b3J5IGV4dGVuZHMgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcy5UZXN0T2JqZWN0RmFj
dG9yeSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENhbWVyYUVudW1lcmF0b3IgZ2V0Q2Ft
ZXJhRW51bWVyYXRvcigpIHsKLSAgICAgIHJldHVybiBuZXcgQ2FtZXJhMkVudW1lcmF0b3IoZ2V0
QXBwQ29udGV4dCgpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgQ29udGV4
dCBnZXRBcHBDb250ZXh0KCkgewotICAgICAgcmV0dXJuIGdldEluc3RydW1lbnRhdGlvbigpLmdl
dFRhcmdldENvbnRleHQoKTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVj
YXRpb24iKQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgcmF3T3BlbkNhbWVyYShT
dHJpbmcgY2FtZXJhTmFtZSkgewotICAgICAgcmV0dXJuIG5ldyBTaW1wbGVDYW1lcmEyKGdldEFw
cENvbnRleHQoKSwgY2FtZXJhTmFtZSk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3Mo
ImRlcHJlY2F0aW9uIikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByYXdDbG9zZUNh
bWVyYShPYmplY3QgY2FtZXJhKSB7Ci0gICAgICAoKFNpbXBsZUNhbWVyYTIpIGNhbWVyYSkuY2xv
c2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4
dHVyZXMgZml4dHVyZXM7Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkg
ewotICAgIGZpeHR1cmVzID0gbmV3IENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMobmV3
IFRlc3RPYmplY3RGYWN0b3J5KCkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2
b2lkIHRlYXJEb3duKCkgewotICAgIGZpeHR1cmVzLmRpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUFuZERpc3Bvc2UoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUNhcHR1cmVyQW5kRGlzcG9zZSgp
OwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTm9uRXhpc3Rp
bmdDYW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNy
ZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUg
Y2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndhcmRlZAot
ICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgYSAiZGVmYXVsdCIgY2FwdHVyZXIu
Ci0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRp
dW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmRS
ZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0
YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2
aWRlbyByZW5kZXJlciB1c2luZyB0aGUgZnJvbnQgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAv
LyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRGcm9udEZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUZyb250RmFjaW5n
Q2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1l
cmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8v
IHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyB0aGUgYmFjayBmYWNpbmcgdmlkZW8gY2Fw
dHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEJhY2tGYWNpbmdWaWRlb0NhcHR1
cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVC
YWNrRmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0
IHRoZSBkZWZhdWx0IGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgY2FtZXJhIGNh
bgotICAvLyBsYXRlciBiZSBzd2l0Y2hlZCB0byBhbm90aGVyIGNhbWVyYS4KLSAgLy8gSXQgdGVz
dHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFN3aXRjaFZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIGZpeHR1cmVzLnN3aXRjaENhbWVyYSgpOwotICB9Ci0KLSAgQE1lZGl1bVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYUV2ZW50cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY2FtZXJhRXZlbnRzSW52b2tlZCgpOwotICB9Ci0KLSAg
Ly8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiBhdHRlbXB0aW5nIHRvIGNhbGwgZS5nLiBzd2l0Y2hD
YW1lcmEoKSBhZnRlciBjYW1lcmEgaGFzIGJlZW4gc3RvcHBlZC4KLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdENhbWVyYUNhbGxzQWZ0ZXJTdG9wKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFDYWxsc0FmdGVyU3RvcCgpOwotICB9Ci0K
LSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIFZpZGVvU291cmNlIHRoYXQgdGhlIENhbWVyYVZpZGVv
Q2FwdHVyZXIgaXMgY29ubmVjdGVkIHRvIGNhbgotICAvLyBiZSBzdG9wcGVkIGFuZCByZXN0YXJ0
ZWQuIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJnZVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2Uo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQg
YXQgZGlmZmVyZW50IHJlc29sdXRpb25zLgotICAvLyBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0
aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFN0b3BX
aXRoRGlmZmVyZW50UmVzb2x1dGlvbnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIGZpeHR1cmVzLnN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpOwotICB9Ci0K
LSAgLy8gVGhpcyB0ZXN0IHdoYXQgaGFwcGVucyBpZiBidWZmZXJzIGFyZSByZXR1cm5lZCBhZnRl
ciB0aGUgY2FwdHVyZXIgaGF2ZQotICAvLyBiZWVuIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQg
ZG9lcyBub3QgdGVzdCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgd2UgY2FuIGNhcHR1cmUgZnJhbWVzLCBrZWVwIHRoZSBmcmFtZXMgaW4gYSBsb2Nh
bCByZW5kZXJlciwgc3RvcCBjYXB0dXJpbmcsCi0gIC8vIGFuZCB0aGVuIHJldHVybiB0aGUgZnJh
bWVzLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0ZXN0IHRlc3RSZXR1cm5CdWZmZXJMYXRl
KCkgaXMgdGhhdCB3ZQotICAvLyBhbHNvIHRlc3QgdGhlIEpOSSBhbmQgQysrIEFuZHJvaWRWaWRl
b0NhcHR1cmVyIHBhcnRzLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJu
QnVmZmVyTGF0ZUVuZFRvRW5kKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBm
aXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IENhbWVyYUV2ZW50c0hhbmRsZXIub25FcnJvciBpcyB0cmlnZ2VyZWQgaWYgdmlkZW8g
YnVmZmVycyBhcmUgbm90IHJldHVybmVkIHRvCi0gIC8vIHRoZSBjYXB0dXJlci4KLSAgQExhcmdl
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0
aW9uKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFG
cmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRpb24oKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0
aGF0IGZyYW1lcyBmb3J3YXJkZWQgdG8gYSByZW5kZXJlciBpcyBzY2FsZWQgaWYgYWRhcHRPdXRw
dXRGb3JtYXQgaXMKLSAgLy8gY2FsbGVkLiBUaGlzIHRlc3QgYm90aCBKYXZhIGFuZCBDKysgcGFy
dHMgb2Ygb2YgdGhlIHN0YWNrLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2Nh
bGVDYW1lcmFPdXRwdXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLnNjYWxlQ2FtZXJhT3V0cHV0KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBhbiBl
cnJvciBpcyByZXBvcnRlZCBpZiB0aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIHdo
ZW4gQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBzdGFydGVkLgotICBATGFyZ2VUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9w
ZW4oKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVyZXIgY2Fu
IGJlIHN0YXJ0ZWQsIGV2ZW4gaWYgdGhlIGNhbWVyYSBpcyBhbHJlYWR5IG9wZW5lZAotICAvLyBp
ZiB0aGUgY2FtZXJhIGlzIGNsb3NlZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIHJlLXRy
eWluZyB0byBzdGFydC4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGls
ZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRD
bG9zZUNhbWVyYSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0
dXJlci5zdG9wIGNhbiBiZSBjYWxsZWQgd2hpbGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcwotICAv
LyByZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RT
dGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5k
U3RvcCgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYVZpZGVvQ2FwdHVy
ZXJUZXN0Rml4dHVyZXMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVy
YVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9z
cmMvb3JnL3dlYnJ0Yy9DYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzLmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSw3MzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IHN0YXRpYyBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0Lio7Ci0KLWlt
cG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0Owot
aW1wb3J0IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlci5JNDIwRnJhbWU7Ci0KLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQuQ29udGV4dDsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBv
cnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3du
TGF0Y2g7Ci0KLWNsYXNzIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMgewotICBzdGF0
aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmFWaWRlb0NhcHR1cmVyVGVzdEZpeHR1cmVzIjsK
LSAgLy8gRGVmYXVsdCB2YWx1ZXMgdXNlZCBmb3Igc3RhcnRpbmcgY2FwdHVyaW5nCi0gIHN0YXRp
YyBmaW5hbCBpbnQgREVGQVVMVF9XSURUSCA9IDY0MDsKLSAgc3RhdGljIGZpbmFsIGludCBERUZB
VUxUX0hFSUdIVCA9IDQ4MDsKLSAgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0ZQUyA9IDE1Owot
Ci0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIFJlbmRlcmVyQ2FsbGJhY2tzIGltcGxlbWVudHMgVmlk
ZW9SZW5kZXJlci5DYWxsYmFja3MgewotICAgIHByaXZhdGUgaW50IGZyYW1lc1JlbmRlcmVkID0g
MDsKLSAgICBwcml2YXRlIE9iamVjdCBmcmFtZUxvY2sgPSAwOwotICAgIHByaXZhdGUgaW50IHdp
ZHRoID0gMDsKLSAgICBwcml2YXRlIGludCBoZWlnaHQgPSAwOwotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgcmVuZGVyRnJhbWUoSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgICBzeW5j
aHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICArK2ZyYW1lc1JlbmRlcmVkOwotICAgICAg
ICB3aWR0aCA9IGZyYW1lLnJvdGF0ZWRXaWR0aCgpOwotICAgICAgICBoZWlnaHQgPSBmcmFtZS5y
b3RhdGVkSGVpZ2h0KCk7Ci0gICAgICAgIGZyYW1lTG9jay5ub3RpZnkoKTsKLSAgICAgIH0KLSAg
ICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICB9Ci0KLSAgICBw
dWJsaWMgaW50IGZyYW1lV2lkdGgoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykg
ewotICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGlu
dCBmcmFtZUhlaWdodCgpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAg
ICAgIHJldHVybiBoZWlnaHQ7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGludCB3YWl0
Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
ICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRoZSBuZXh0IGZyYW1lIHRvIHJlbmRlciIp
OwotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgZnJhbWVMb2NrLndh
aXQoKTsKLSAgICAgICAgcmV0dXJuIGZyYW1lc1JlbmRlcmVkOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHN0YXRpYyBwcml2YXRlIGNsYXNzIEZha2VBc3luY1JlbmRlcmVyIGltcGxlbWVudHMg
VmlkZW9SZW5kZXJlci5DYWxsYmFja3MgewotICAgIHByaXZhdGUgZmluYWwgTGlzdDxJNDIwRnJh
bWU+IHBlbmRpbmdGcmFtZXMgPSBuZXcgQXJyYXlMaXN0PEk0MjBGcmFtZT4oKTsKLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJlbmRlckZyYW1lKEk0MjBGcmFtZSBmcmFtZSkgewot
ICAgICAgc3luY2hyb25pemVkIChwZW5kaW5nRnJhbWVzKSB7Ci0gICAgICAgIHBlbmRpbmdGcmFt
ZXMuYWRkKGZyYW1lKTsKLSAgICAgICAgcGVuZGluZ0ZyYW1lcy5ub3RpZnlBbGwoKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBXYWl0IHVudGlsIGF0IGxlYXN0IG9uZSBmcmFtZSBoYXZlIGJl
ZW4gcmVjZWl2ZWQsIGJlZm9yZSByZXR1cm5pbmcgdGhlbS4KLSAgICBwdWJsaWMgTGlzdDxJNDIw
RnJhbWU+IHdhaXRGb3JQZW5kaW5nRnJhbWVzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZvciBwZW5kaW5nIGZyYW1lcyIpOwot
ICAgICAgc3luY2hyb25pemVkIChwZW5kaW5nRnJhbWVzKSB7Ci0gICAgICAgIHdoaWxlIChwZW5k
aW5nRnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICAgIHBlbmRpbmdGcmFtZXMud2FpdCgpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PEk0MjBGcmFtZT4ocGVuZGlu
Z0ZyYW1lcyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIHByaXZhdGUgY2xhc3Mg
RmFrZUNhcHR1cmVyT2JzZXJ2ZXIgaW1wbGVtZW50cyBDYW1lcmFWaWRlb0NhcHR1cmVyLkNhcHR1
cmVyT2JzZXJ2ZXIgewotICAgIHByaXZhdGUgaW50IGZyYW1lc0NhcHR1cmVkID0gMDsKLSAgICBw
cml2YXRlIGludCBmcmFtZVNpemUgPSAwOwotICAgIHByaXZhdGUgaW50IGZyYW1lV2lkdGggPSAw
OwotICAgIHByaXZhdGUgaW50IGZyYW1lSGVpZ2h0ID0gMDsKLSAgICBmaW5hbCBwcml2YXRlIE9i
amVjdCBmcmFtZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgZmluYWwgcHJpdmF0ZSBPYmplY3Qg
Y2FwdHVyZXJTdGFydExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGNh
cHR1cmVyU3RhcnRSZXN1bHQgPSBmYWxzZTsKLSAgICBmaW5hbCBwcml2YXRlIExpc3Q8TG9uZz4g
dGltZXN0YW1wcyA9IG5ldyBBcnJheUxpc3Q8TG9uZz4oKTsKLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdGFydGVkKGJvb2xlYW4gc3VjY2VzcykgewotICAgICAg
TG9nZ2luZy5kKFRBRywgIm9uQ2FwdHVyZXJTdGFydGVkOiAiICsgc3VjY2Vzcyk7Ci0KLSAgICAg
IHN5bmNocm9uaXplZCAoY2FwdHVyZXJTdGFydExvY2spIHsKLSAgICAgICAgY2FwdHVyZXJTdGFy
dFJlc3VsdCA9IHN1Y2Nlc3M7Ci0gICAgICAgIGNhcHR1cmVyU3RhcnRMb2NrLm5vdGlmeUFsbCgp
OwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2Fw
dHVyZXJTdG9wcGVkKCkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIm9uQ2FwdHVyZXJTdG9wcGVk
Iik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25CeXRlQnVmZmVy
RnJhbWVDYXB0dXJlZCgKLSAgICAgICAgYnl0ZVtdIGZyYW1lLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lU3RhbXApIHsKLSAgICAgIHN5bmNocm9uaXplZCAo
ZnJhbWVMb2NrKSB7Ci0gICAgICAgICsrZnJhbWVzQ2FwdHVyZWQ7Ci0gICAgICAgIGZyYW1lU2l6
ZSA9IGZyYW1lLmxlbmd0aDsKLSAgICAgICAgZnJhbWVXaWR0aCA9IHdpZHRoOwotICAgICAgICBm
cmFtZUhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgdGltZXN0YW1wcy5hZGQodGltZVN0YW1wKTsK
LSAgICAgICAgZnJhbWVMb2NrLm5vdGlmeSgpOwotICAgICAgfQotICAgIH0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1cmVkKGludCB3aWR0aCwgaW50
IGhlaWdodCwgaW50IG9lc1RleHR1cmVJZCwKLSAgICAgICAgZmxvYXRbXSB0cmFuc2Zvcm1NYXRy
aXgsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lU3RhbXApIHsKLSAgICAgIHN5bmNocm9uaXplZCAo
ZnJhbWVMb2NrKSB7Ci0gICAgICAgICsrZnJhbWVzQ2FwdHVyZWQ7Ci0gICAgICAgIGZyYW1lV2lk
dGggPSB3aWR0aDsKLSAgICAgICAgZnJhbWVIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGZyYW1l
U2l6ZSA9IDA7Ci0gICAgICAgIHRpbWVzdGFtcHMuYWRkKHRpbWVTdGFtcCk7Ci0gICAgICAgIGZy
YW1lTG9jay5ub3RpZnkoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiB3
YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZvciB0aGUgY2FwdHVyZXIgdG8gc3RhcnQiKTsK
LSAgICAgIHN5bmNocm9uaXplZCAoY2FwdHVyZXJTdGFydExvY2spIHsKLSAgICAgICAgY2FwdHVy
ZXJTdGFydExvY2sud2FpdCgpOwotICAgICAgICByZXR1cm4gY2FwdHVyZXJTdGFydFJlc3VsdDsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHdhaXRGb3JOZXh0Q2FwdHVyZWRGcmFt
ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAi
V2FpdGluZyBmb3IgdGhlIG5leHQgY2FwdHVyZWQgZnJhbWUiKTsKLSAgICAgIHN5bmNocm9uaXpl
ZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIGZyYW1lTG9jay53YWl0KCk7Ci0gICAgICAgIHJldHVy
biBmcmFtZXNDYXB0dXJlZDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgZnJhbWVTaXplKCkg
ewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgcmV0dXJuIGZyYW1l
U2l6ZTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgZnJhbWVXaWR0aCgpIHsKLSAgICAgIHN5
bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIHJldHVybiBmcmFtZVdpZHRoOwotICAg
ICAgfQotICAgIH0KLQotICAgIGludCBmcmFtZUhlaWdodCgpIHsKLSAgICAgIHN5bmNocm9uaXpl
ZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIHJldHVybiBmcmFtZUhlaWdodDsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBMaXN0PExvbmc+IGdldENvcHlBbmRSZXNldExpc3RPZnRpbWVTdGFtcHMoKSB7
Ci0gICAgICBzeW5jaHJvbml6ZWQgKGZyYW1lTG9jaykgewotICAgICAgICBBcnJheUxpc3Q8TG9u
Zz4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8TG9uZz4odGltZXN0YW1wcyk7Ci0gICAgICAgIHRpbWVz
dGFtcHMuY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuIGxpc3Q7Ci0gICAgICB9Ci0gICAgfQotICB9
Ci0KLSAgc3RhdGljIGNsYXNzIENhbWVyYUV2ZW50cyBpbXBsZW1lbnRzIENhbWVyYVZpZGVvQ2Fw
dHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxlciB7Ci0gICAgcHVibGljIGJvb2xlYW4gb25DYW1lcmFP
cGVuaW5nQ2FsbGVkOwotICAgIHB1YmxpYyBib29sZWFuIG9uRmlyc3RGcmFtZUF2YWlsYWJsZUNh
bGxlZDsKLSAgICBwdWJsaWMgZmluYWwgT2JqZWN0IG9uQ2FtZXJhRnJlZXplZExvY2sgPSBuZXcg
T2JqZWN0KCk7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgb25DYW1lcmFGcmVlemVkRGVzY3JpcHRpb247
Ci0gICAgcHVibGljIGZpbmFsIE9iamVjdCBjYW1lcmFDbG9zZWRMb2NrID0gbmV3IE9iamVjdCgp
OwotICAgIHByaXZhdGUgYm9vbGVhbiBjYW1lcmFDbG9zZWQgPSB0cnVlOwotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFFcnJvcihTdHJpbmcgZXJyb3JEZXNjcmlwdGlv
bikgewotICAgICAgTG9nZ2luZy53KFRBRywgIkNhbWVyYSBlcnJvcjogIiArIGVycm9yRGVzY3Jp
cHRpb24pOwotICAgICAgY2FtZXJhQ2xvc2VkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYURpc2Nvbm5lY3RlZCgpIHt9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYUZyZWV6ZWQoU3RyaW5nIGVycm9yRGVzY3Jp
cHRpb24pIHsKLSAgICAgIHN5bmNocm9uaXplZCAob25DYW1lcmFGcmVlemVkTG9jaykgewotICAg
ICAgICBvbkNhbWVyYUZyZWV6ZWREZXNjcmlwdGlvbiA9IGVycm9yRGVzY3JpcHRpb247Ci0gICAg
ICAgIG9uQ2FtZXJhRnJlZXplZExvY2subm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1lcmFPcGVuaW5nKFN0cmluZyBjYW1l
cmFOYW1lKSB7Ci0gICAgICBvbkNhbWVyYU9wZW5pbmdDYWxsZWQgPSB0cnVlOwotICAgICAgc3lu
Y2hyb25pemVkIChjYW1lcmFDbG9zZWRMb2NrKSB7Ci0gICAgICAgIGNhbWVyYUNsb3NlZCA9IGZh
bHNlOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
Rmlyc3RGcmFtZUF2YWlsYWJsZSgpIHsKLSAgICAgIG9uRmlyc3RGcmFtZUF2YWlsYWJsZUNhbGxl
ZCA9IHRydWU7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYW1l
cmFDbG9zZWQoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUNsb3NlZExvY2spIHsKLSAg
ICAgICAgY2FtZXJhQ2xvc2VkID0gdHJ1ZTsKLSAgICAgICAgY2FtZXJhQ2xvc2VkTG9jay5ub3Rp
ZnlBbGwoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIHdhaXRGb3JDYW1l
cmFGcmVlemVkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJXYWl0aW5nIGZvciB0aGUgY2FtZXJhIHRvIGZyZWV6ZSIpOwotICAgICAgc3luY2hy
b25pemVkIChvbkNhbWVyYUZyZWV6ZWRMb2NrKSB7Ci0gICAgICAgIG9uQ2FtZXJhRnJlZXplZExv
Y2sud2FpdCgpOwotICAgICAgICByZXR1cm4gb25DYW1lcmFGcmVlemVkRGVzY3JpcHRpb247Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgd2FpdEZvckNhbWVyYUNsb3NlZCgpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUNs
b3NlZExvY2spIHsKLSAgICAgICAgd2hpbGUgKCFjYW1lcmFDbG9zZWQpIHsKLSAgICAgICAgICBM
b2dnaW5nLmQoVEFHLCAiV2FpdGluZyBmb3IgdGhlIGNhbWVyYSB0byBjbG9zZS4iKTsKLSAgICAg
ICAgICBjYW1lcmFDbG9zZWRMb2NrLndhaXQoKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIC8qKgotICAgKiBDbGFzcyB0byBjb2xsZWN0IGFsbCBjbGFzc2VzIHJlbGF0ZWQg
dG8gc2luZ2xlIGNhcHR1cmVyIGluc3RhbmNlLgotICAgKi8KLSAgc3RhdGljIHByaXZhdGUgY2xh
c3MgQ2FwdHVyZXJJbnN0YW5jZSB7Ci0gICAgcHVibGljIENhbWVyYVZpZGVvQ2FwdHVyZXIgY2Fw
dHVyZXI7Ci0gICAgcHVibGljIENhbWVyYUV2ZW50cyBjYW1lcmFFdmVudHM7Ci0gICAgcHVibGlj
IFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyOwotICAgIHB1YmxpYyBG
YWtlQ2FwdHVyZXJPYnNlcnZlciBvYnNlcnZlcjsKLSAgICBwdWJsaWMgTGlzdDxDYXB0dXJlRm9y
bWF0PiBzdXBwb3J0ZWRGb3JtYXRzOwotICAgIHB1YmxpYyBDYXB0dXJlRm9ybWF0IGZvcm1hdDsK
LSAgfQotCi0gIC8qKgotICAgKiBDbGFzcyB1c2VkIGZvciBjb2xsZWN0aW5nIGEgVmlkZW9Tb3Vy
Y2UsIGEgVmlkZW9UcmFjayBhbmQgYSByZW5kZXJlci4gVGhlIGNsYXNzCi0gICAqIGlzIHVzZWQg
Zm9yIHRlc3RpbmcgbG9jYWwgcmVuZGVyaW5nIGZyb20gYSBjYXB0dXJlci4KLSAgICovCi0gIHN0
YXRpYyBwcml2YXRlIGNsYXNzIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgewotICAgIHB1YmxpYyBW
aWRlb1NvdXJjZSBzb3VyY2U7Ci0gICAgcHVibGljIFZpZGVvVHJhY2sgdHJhY2s7Ci0gICAgcHVi
bGljIFJlbmRlcmVyQ2FsbGJhY2tzIHJlbmRlcmVyQ2FsbGJhY2tzOwotICAgIHB1YmxpYyBGYWtl
QXN5bmNSZW5kZXJlciBmYWtlQXN5bmNSZW5kZXJlcjsKLSAgfQotCi0gIHB1YmxpYyBhYnN0cmFj
dCBzdGF0aWMgY2xhc3MgVGVzdE9iamVjdEZhY3RvcnkgewotICAgIGZpbmFsIENhbWVyYUVudW1l
cmF0b3IgY2FtZXJhRW51bWVyYXRvcjsKLQotICAgIFRlc3RPYmplY3RGYWN0b3J5KCkgewotICAg
ICAgY2FtZXJhRW51bWVyYXRvciA9IGdldENhbWVyYUVudW1lcmF0b3IoKTsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0dXJlciBjcmVhdGVDYXB0dXJlcigKLSAgICAgICAgU3Ry
aW5nIG5hbWUsIENhbWVyYVZpZGVvQ2FwdHVyZXIuQ2FtZXJhRXZlbnRzSGFuZGxlciBldmVudHNI
YW5kbGVyKSB7Ci0gICAgICByZXR1cm4gY2FtZXJhRW51bWVyYXRvci5jcmVhdGVDYXB0dXJlcihu
YW1lLCBldmVudHNIYW5kbGVyKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWVP
ZkZyb250RmFjaW5nRGV2aWNlKCkgewotICAgICAgZm9yIChTdHJpbmcgZGV2aWNlTmFtZSA6IGNh
bWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKSkgewotICAgICAgICBpZiAoY2FtZXJhRW51
bWVyYXRvci5pc0Zyb250RmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAgICAgcmV0dXJuIGRl
dmljZU5hbWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lT2ZCYWNrRmFjaW5nRGV2aWNlKCkgewotICAg
ICAgZm9yIChTdHJpbmcgZGV2aWNlTmFtZSA6IGNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFt
ZXMoKSkgewotICAgICAgICBpZiAoY2FtZXJhRW51bWVyYXRvci5pc0JhY2tGYWNpbmcoZGV2aWNl
TmFtZSkpIHsKLSAgICAgICAgICByZXR1cm4gZGV2aWNlTmFtZTsKLSAgICAgICAgfQotICAgICAg
fQotCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXZl
VHdvQ2FtZXJhcygpIHsKLSAgICAgIHJldHVybiBjYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5h
bWVzKCkubGVuZ3RoID49IDI7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNDYXB0dXJp
bmdUb1RleHR1cmUoKSB7Ci0gICAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBwbGFuIHRvIG9ubHkg
c3VwcG9ydCBjYXB0dXJpbmcgdG8gdGV4dHVyZSwgc28gZGVmYXVsdCB0byB0cnVlCi0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBhYnN0cmFjdCBwdWJsaWMgQ2FtZXJhRW51bWVyYXRv
ciBnZXRDYW1lcmFFbnVtZXJhdG9yKCk7Ci0gICAgYWJzdHJhY3QgcHVibGljIENvbnRleHQgZ2V0
QXBwQ29udGV4dCgpOwotCi0gICAgLy8gQ2FtZXJhVmlkZW9DYXB0dXJlciBBUEkgaXMgdG9vIHNs
b3cgZm9yIHNvbWUgb2Ygb3VyIHRlc3RzIHdoZXJlIHdlIG5lZWQgdG8gb3BlbiBhIGNvbXBldGlu
ZwotICAgIC8vIGNhbWVyYS4gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBpbnN0ZWFkLgotICAgIGFi
c3RyYWN0IHB1YmxpYyBPYmplY3QgcmF3T3BlbkNhbWVyYShTdHJpbmcgY2FtZXJhTmFtZSk7Ci0g
ICAgYWJzdHJhY3QgcHVibGljIHZvaWQgcmF3Q2xvc2VDYW1lcmEoT2JqZWN0IGNhbWVyYSk7Ci0g
IH0KLQotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBwZWVyQ29ubmVjdGlvbkZhY3Rv
cnk7Ci0gIHByaXZhdGUgVGVzdE9iamVjdEZhY3RvcnkgdGVzdE9iamVjdEZhY3Rvcnk7Ci0KLSAg
Q2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyhUZXN0T2JqZWN0RmFjdG9yeSB0ZXN0T2Jq
ZWN0RmFjdG9yeSkgewotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplQW5kcm9p
ZEdsb2JhbHMoCi0gICAgICAgIHRlc3RPYmplY3RGYWN0b3J5LmdldEFwcENvbnRleHQoKSwgdHJ1
ZSwgdHJ1ZSwgdHJ1ZSk7Ci0KLSAgICB0aGlzLnBlZXJDb25uZWN0aW9uRmFjdG9yeSA9IG5ldyBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkobnVsbCAvKiBvcHRpb25zICovKTsKLSAgICB0aGlzLnRlc3RP
YmplY3RGYWN0b3J5ID0gdGVzdE9iamVjdEZhY3Rvcnk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBk
aXNwb3NlKCkgewotICAgIHRoaXMucGVlckNvbm5lY3Rpb25GYWN0b3J5LmRpc3Bvc2UoKTsKLSAg
fQotCi0gIC8vIEludGVybmFsIGhlbHBlciBtZXRob2RzCi0gIHByaXZhdGUgQ2FwdHVyZXJJbnN0
YW5jZSBjcmVhdGVDYXB0dXJlcihTdHJpbmcgbmFtZSwgYm9vbGVhbiBpbml0aWFsaXplKSB7Ci0g
ICAgQ2FwdHVyZXJJbnN0YW5jZSBpbnN0YW5jZSA9IG5ldyBDYXB0dXJlckluc3RhbmNlKCk7Ci0g
ICAgaW5zdGFuY2UuY2FtZXJhRXZlbnRzID0gbmV3IENhbWVyYUV2ZW50cygpOwotICAgIGluc3Rh
bmNlLmNhcHR1cmVyID0gdGVzdE9iamVjdEZhY3RvcnkuY3JlYXRlQ2FwdHVyZXIobmFtZSwgaW5z
dGFuY2UuY2FtZXJhRXZlbnRzKTsKLSAgICBpbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlciA9
IFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVs
cGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwgLyogc2hhcmVkQ29udGV4dCAqLyk7Ci0g
ICAgaW5zdGFuY2Uub2JzZXJ2ZXIgPSBuZXcgRmFrZUNhcHR1cmVyT2JzZXJ2ZXIoKTsKLSAgICBp
ZiAoaW5pdGlhbGl6ZSkgewotICAgICAgaW5zdGFuY2UuY2FwdHVyZXIuaW5pdGlhbGl6ZSgKLSAg
ICAgICAgICBpbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlciwgdGVzdE9iamVjdEZhY3Rvcnku
Z2V0QXBwQ29udGV4dCgpLCBpbnN0YW5jZS5vYnNlcnZlcik7Ci0gICAgfQotICAgIGluc3RhbmNl
LnN1cHBvcnRlZEZvcm1hdHMgPSB0ZXN0T2JqZWN0RmFjdG9yeS5jYW1lcmFFbnVtZXJhdG9yLmdl
dFN1cHBvcnRlZEZvcm1hdHMobmFtZSk7Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAg
cHJpdmF0ZSBDYXB0dXJlckluc3RhbmNlIGNyZWF0ZUNhcHR1cmVyKGJvb2xlYW4gaW5pdGlhbGl6
ZSkgewotICAgIFN0cmluZyBuYW1lID0gdGVzdE9iamVjdEZhY3RvcnkuY2FtZXJhRW51bWVyYXRv
ci5nZXREZXZpY2VOYW1lcygpWzBdOwotICAgIHJldHVybiBjcmVhdGVDYXB0dXJlcihuYW1lLCBp
bml0aWFsaXplKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFydENhcHR1cmUoQ2FwdHVyZXJJ
bnN0YW5jZSBpbnN0YW5jZSkgewotICAgIHN0YXJ0Q2FwdHVyZShpbnN0YW5jZSwgMCk7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgc3RhcnRDYXB0dXJlKENhcHR1cmVySW5zdGFuY2UgaW5zdGFuY2Us
IGludCBmb3JtYXRJbmRleCkgewotICAgIGZpbmFsIENhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5D
YXB0dXJlRm9ybWF0IGZvcm1hdCA9Ci0gICAgICAgIGluc3RhbmNlLnN1cHBvcnRlZEZvcm1hdHMu
Z2V0KGZvcm1hdEluZGV4KTsKLQotICAgIGluc3RhbmNlLmNhcHR1cmVyLnN0YXJ0Q2FwdHVyZShm
b3JtYXQud2lkdGgsIGZvcm1hdC5oZWlnaHQsIGZvcm1hdC5mcmFtZXJhdGUubWF4KTsKLSAgICBp
bnN0YW5jZS5mb3JtYXQgPSBmb3JtYXQ7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZGlzcG9zZUNh
cHR1cmVyKENhcHR1cmVySW5zdGFuY2UgaW5zdGFuY2UpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgaW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBpbnN0YW5j
ZS5jYW1lcmFFdmVudHMud2FpdEZvckNhbWVyYUNsb3NlZCgpOwotICAgIGluc3RhbmNlLmNhcHR1
cmVyLmRpc3Bvc2UoKTsKLSAgICBpbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5U
ZXh0dXJlRnJhbWUoKTsKLSAgICBpbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3Nl
KCk7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgY3JlYXRlVmlkZW9U
cmFja1dpdGhSZW5kZXJlcigKLSAgICAgIENhbWVyYVZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIsIFZp
ZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbmRlcmVyQ2FsbGJhY2tzKSB7Ci0gICAgVmlkZW9UcmFj
a1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0gbmV3IFZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIoKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZSA9IHBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5jcmVhdGVWaWRlb1NvdXJjZShjYXB0dXJlcik7Ci0gICAgY2FwdHVyZXIu
c3RhcnRDYXB0dXJlKERFRkFVTFRfV0lEVEgsIERFRkFVTFRfSEVJR0hULCBERUZBVUxUX0ZQUyk7
Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci50cmFjayA9Ci0gICAgICAgIHBlZXJDb25uZWN0
aW9uRmFjdG9yeS5jcmVhdGVWaWRlb1RyYWNrKCJkdW1teSIsIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIuc291cmNlKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnRyYWNrLmFkZFJlbmRlcmVy
KG5ldyBWaWRlb1JlbmRlcmVyKHJlbmRlcmVyQ2FsbGJhY2tzKSk7Ci0gICAgcmV0dXJuIHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXI7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihDYW1lcmFWaWRlb0NhcHR1cmVyIGNhcHR1
cmVyKSB7Ci0gICAgUmVuZGVyZXJDYWxsYmFja3MgcmVuZGVyZXJDYWxsYmFja3MgPSBuZXcgUmVu
ZGVyZXJDYWxsYmFja3MoKTsKLSAgICBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tX
aXRoUmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKGNhcHR1
cmVyLCByZW5kZXJlckNhbGxiYWNrcyk7Ci0gICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5k
ZXJlckNhbGxiYWNrcyA9IHJlbmRlcmVyQ2FsbGJhY2tzOwotICAgIHJldHVybiB2aWRlb1RyYWNr
V2l0aFJlbmRlcmVyOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIGNy
ZWF0ZVZpZGVvVHJhY2tXaXRoRmFrZUFzeW5jUmVuZGVyZXIoCi0gICAgICBDYW1lcmFWaWRlb0Nh
cHR1cmVyIGNhcHR1cmVyKSB7Ci0gICAgRmFrZUFzeW5jUmVuZGVyZXIgZmFrZUFzeW5jUmVuZGVy
ZXIgPSBuZXcgRmFrZUFzeW5jUmVuZGVyZXIoKTsKLSAgICBWaWRlb1RyYWNrV2l0aFJlbmRlcmVy
IHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJl
bmRlcmVyKGNhcHR1cmVyLCBmYWtlQXN5bmNSZW5kZXJlcik7Ci0gICAgdmlkZW9UcmFja1dpdGhS
ZW5kZXJlci5mYWtlQXN5bmNSZW5kZXJlciA9IGZha2VBc3luY1JlbmRlcmVyOwotICAgIHJldHVy
biB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRpc3Bvc2VW
aWRlb1RyYWNrV2l0aFJlbmRlcmVyKFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dp
dGhSZW5kZXJlcikgewotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIudHJhY2suZGlzcG9zZSgp
OwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIuc291cmNlLmRpc3Bvc2UoKTsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCB3YWl0VW50aWxJZGxlKENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0
YW5jZSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDb3VudERvd25M
YXRjaCBiYXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIGNhcHR1cmVySW5zdGFu
Y2Uuc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnBvc3QobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGJh
cnJpZXIuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgYmFycmllci5hd2FpdCgp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKFN0cmluZyBu
YW1lKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChuYW1lID09IG51bGwp
IHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJTa2lwcGluZyB2aWRlbyBjYXB0dXJlciB0ZXN0IGJl
Y2F1c2UgZGV2aWNlIG5hbWUgaXMgbnVsbC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJl
cihuYW1lLCBmYWxzZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0
aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1Ry
YWNrV2l0aFJlbmRlcmVyKGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIpOwotICAgIGFzc2VydFRy
dWUodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZy
YW1lVG9SZW5kZXIoKSA+IDApOwotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNl
KTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dpdGhSZW5kZXJlcih2aWRlb1RyYWNrV2l0aFJlbmRl
cmVyKTsKLSAgfQotCi0gIC8vIFRlc3QgbWV0aG9kcwotICBwdWJsaWMgdm9pZCBjcmVhdGVDYXB0
dXJlckFuZERpc3Bvc2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGRpc3Bv
c2VDYXB0dXJlcihjcmVhdGVDYXB0dXJlcih0cnVlIC8qIGluaXRpYWxpemUgKi8pKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIGNyZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICB0cnkgewotICAgICAgZGlzcG9zZUNhcHR1cmVyKGNyZWF0ZUNh
cHR1cmVyKCJub24tZXhpc3RpbmcgY2FtZXJhIiwgZmFsc2UgLyogaW5pdGlhbGl6ZSAqLykpOwot
ICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZmFpbCgiRXhwZWN0ZWQgaWxsZWdhbCBhcmd1bWVudCBleGNlcHRpb24g
d2hlbiBjcmVhdGluZyBub24tZXhpc3RpbmcgY2FtZXJhLiIpOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIFN0cmluZyBuYW1lID0gdGVzdE9iamVjdEZhY3RvcnkuY2FtZXJhRW51bWVyYXRvci5n
ZXREZXZpY2VOYW1lcygpWzBdOwotICAgIGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKG5hbWUpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgY3JlYXRlQ2FwdHVyZXJBbmRSZW5k
ZXIodGVzdE9iamVjdEZhY3RvcnkuZ2V0TmFtZU9mRnJvbnRGYWNpbmdEZXZpY2UoKSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBjcmVhdGVCYWNrRmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGNyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKHRl
c3RPYmplY3RGYWN0b3J5LmdldE5hbWVPZkJhY2tGYWNpbmdEZXZpY2UoKSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBzd2l0Y2hDYW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIGlmICghdGVzdE9iamVjdEZhY3RvcnkuaGF2ZVR3b0NhbWVyYXMoKSkgewotICAgICAgTG9n
Z2luZy53KAotICAgICAgICAgIFRBRywgIlNraXBwaW5nIHRlc3Qgc3dpdGNoIHZpZGVvIGNhcHR1
cmVyIGJlY2F1c2UgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUgdHdvIGNhbWVyYXMuIik7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlcklu
c3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIoZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgZmlu
YWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyID0KLSAgICAg
ICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVy
KTsKLSAgICAvLyBXYWl0IGZvciB0aGUgY2FtZXJhIHRvIHN0YXJ0IHNvIHdlIGNhbiBzd2l0Y2gg
aXQKLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFj
a3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLQotICAgIC8vIEFycmF5IHdpdGgg
b25lIGVsZW1lbnQgdG8gYXZvaWQgZmluYWwgcHJvYmxlbSBpbiBuZXN0ZWQgY2xhc3Nlcy4KLSAg
ICBmaW5hbCBib29sZWFuW10gY2FtZXJhU3dpdGNoU3VjY2Vzc2Z1bCA9IG5ldyBib29sZWFuWzFd
OwotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGJhcnJpZXIgPSBuZXcgQ291bnREb3duTGF0Y2go
MSk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zd2l0Y2hDYW1lcmEobmV3IENhbWVy
YVZpZGVvQ2FwdHVyZXIuQ2FtZXJhU3dpdGNoSGFuZGxlcigpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgb25DYW1lcmFTd2l0Y2hEb25lKGJvb2xlYW4gaXNGcm9udENhbWVy
YSkgewotICAgICAgICBjYW1lcmFTd2l0Y2hTdWNjZXNzZnVsWzBdID0gdHJ1ZTsKLSAgICAgICAg
YmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgb25DYW1lcmFTd2l0Y2hFcnJvcihTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbikgewot
ICAgICAgICBjYW1lcmFTd2l0Y2hTdWNjZXNzZnVsWzBdID0gZmFsc2U7Ci0gICAgICAgIGJhcnJp
ZXIuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgLy8gV2FpdCB1bnRpbCB0aGUg
Y2FtZXJhIGhhcyBiZWVuIHN3aXRjaGVkLgotICAgIGJhcnJpZXIuYXdhaXQoKTsKLQotICAgIC8v
IENoZWNrIHJlc3VsdC4KLSAgICBhc3NlcnRUcnVlKGNhbWVyYVN3aXRjaFN1Y2Nlc3NmdWxbMF0p
OwotICAgIC8vIEVuc3VyZSB0aGF0IGZyYW1lcyBhcmUgcmVjZWl2ZWQuCi0gICAgYXNzZXJ0VHJ1
ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJh
bWVUb1JlbmRlcigpID4gMCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2Up
OwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2FtZXJhRXZlbnRzSW52b2tlZCgpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJl
ckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIodHJ1ZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBz
dGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgLy8gTWFrZSBzdXJlIGNhbWVyYSBp
cyBzdGFydGVkIGFuZCBmaXJzdCBmcmFtZSBpcyByZWNlaXZlZCBhbmQgdGhlbiBzdG9wIGl0Lgot
ICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJU
b1N0YXJ0KCkpOwotICAgIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvck5leHRDYXB0
dXJlZEZyYW1lKCk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotCi0g
ICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLmNhbWVyYUV2ZW50cy5vbkNhbWVyYU9wZW5p
bmdDYWxsZWQpOwotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJbnN0YW5jZS5jYW1lcmFFdmVudHMu
b25GaXJzdEZyYW1lQXZhaWxhYmxlQ2FsbGVkKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNhbWVy
YUNhbGxzQWZ0ZXJTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5h
bCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcih0cnVl
IC8qIGluaXRpYWxpemUgKi8pOwotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsK
LSAgICAvLyBNYWtlIHN1cmUgY2FtZXJhIGlzIHN0YXJ0ZWQgYW5kIHRoZW4gc3RvcCBpdC4KLSAg
ICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9T
dGFydCgpKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0g
ICAgY2FwdHVyZXJJbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJh
bWUoKTsKLQotICAgIC8vIFdlIGNhbid0IGNoYW5nZSB8Y2FwdHVyZXJ8IGF0IHRoaXMgcG9pbnQs
IGJ1dCB3ZSBzaG91bGQgbm90IGNyYXNoLgotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIu
c3dpdGNoQ2FtZXJhKG51bGwgLyogc3dpdGNoRXZlbnRzSGFuZGxlciAqLyk7Ci0gICAgY2FwdHVy
ZXJJbnN0YW5jZS5jYXB0dXJlci5jaGFuZ2VDYXB0dXJlRm9ybWF0KERFRkFVTFRfV0lEVEgsIERF
RkFVTFRfSEVJR0hULCBERUZBVUxUX0ZQUyk7Ci0KLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVy
ZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdG9wUmVzdGFydFZpZGVvU291cmNl
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3Rh
bmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihmYWxzZSAvKiBpbml0aWFsaXpl
ICovKTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVu
ZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKGNhcHR1cmVySW5z
dGFuY2UuY2FwdHVyZXIpOwotCi0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVy
LnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKE1lZGlhU291cmNlLlN0YXRlLkxJVkUsIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIuc291cmNlLnN0YXRlKCkpOwotCi0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zdG9w
Q2FwdHVyZSgpOwotICAgIGFzc2VydEVxdWFscyhNZWRpYVNvdXJjZS5TdGF0ZS5FTkRFRCwgdmlk
ZW9UcmFja1dpdGhSZW5kZXJlci5zb3VyY2Uuc3RhdGUoKSk7Ci0KLSAgICBzdGFydENhcHR1cmUo
Y2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVy
LnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKE1lZGlhU291cmNlLlN0YXRlLkxJVkUsIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIuc291cmNlLnN0YXRlKCkpOwotCi0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFu
Y2UpOwotICAgIGRpc3Bvc2VWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVu
ZGVyZXIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3RhcnRTdG9wV2l0aERpZmZlcmVudFJlc29s
dXRpb25zKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJl
ckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcih0cnVlIC8qIGluaXRp
YWxpemUgKi8pOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIHN0
YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlLCBpKTsKLSAgICAgIGFzc2VydFRydWUoY2FwdHVy
ZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgICAgY2Fw
dHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKTsKLQotICAg
ICAgLy8gQ2hlY2sgdGhlIGZyYW1lIHNpemUuIFRoZSBhY3R1YWwgd2lkdGggYW5kIGhlaWdodCBk
ZXBlbmQgb24gaG93IHRoZSBjYXB0dXJlciBpcyBtb3VudGVkLgotICAgICAgZmluYWwgYm9vbGVh
biBpZGVudGljYWxSZXNvbHV0aW9uID0KLSAgICAgICAgICAoY2FwdHVyZXJJbnN0YW5jZS5vYnNl
cnZlci5mcmFtZVdpZHRoKCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQud2lkdGgKLSAgICAg
ICAgICAgICAgJiYgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZUhlaWdodCgpID09IGNh
cHR1cmVySW5zdGFuY2UuZm9ybWF0LmhlaWdodCk7Ci0gICAgICBmaW5hbCBib29sZWFuIGZsaXBw
ZWRSZXNvbHV0aW9uID0KLSAgICAgICAgICAoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFt
ZVdpZHRoKCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQuaGVpZ2h0Ci0gICAgICAgICAgICAg
ICYmIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVIZWlnaHQoKSA9PSBjYXB0dXJlcklu
c3RhbmNlLmZvcm1hdC53aWR0aCk7Ci0gICAgICBpZiAoIWlkZW50aWNhbFJlc29sdXRpb24gJiYg
IWZsaXBwZWRSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGZhaWwoIldyb25nIHJlc29sdXRpb24sIGdv
dDogIiArIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVXaWR0aCgpICsgIngiCi0gICAg
ICAgICAgICArIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVIZWlnaHQoKSArICIgZXhw
ZWN0ZWQ6ICIKLSAgICAgICAgICAgICsgY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQud2lkdGggKyAi
eCIgKyBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC5oZWlnaHQgKyAiIG9yICIKLSAgICAgICAgICAg
ICsgY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQuaGVpZ2h0ICsgIngiICsgY2FwdHVyZXJJbnN0YW5j
ZS5mb3JtYXQud2lkdGgpOwotICAgICAgfQotCi0gICAgICBpZiAodGVzdE9iamVjdEZhY3Rvcnku
aXNDYXB0dXJpbmdUb1RleHR1cmUoKSkgewotICAgICAgICBhc3NlcnRFcXVhbHMoMCwgY2FwdHVy
ZXJJbnN0YW5jZS5vYnNlcnZlci5mcmFtZVNpemUoKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0LmZyYW1lU2l6ZSgpIDw9IGNhcHR1
cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZnJhbWVTaXplKCkpOwotICAgICAgfQotICAgICAgY2FwdHVy
ZXJJbnN0YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgICAgY2FwdHVyZXJJbnN0YW5j
ZS5zdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICB9Ci0gICAg
ZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
cmV0dXJuQnVmZmVyTGF0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmlu
YWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIodHJ1
ZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSk7
Ci0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJl
clRvU3RhcnQoKSk7Ci0KLSAgICBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JOZXh0
Q2FwdHVyZWRGcmFtZSgpOwotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1
cmUoKTsKLSAgICBMaXN0PExvbmc+IGxpc3RPZnRpbWVzdGFtcHMgPSBjYXB0dXJlckluc3RhbmNl
Lm9ic2VydmVyLmdldENvcHlBbmRSZXNldExpc3RPZnRpbWVTdGFtcHMoKTsKLSAgICBhc3NlcnRU
cnVlKGxpc3RPZnRpbWVzdGFtcHMuc2l6ZSgpID49IDEpOwotCi0gICAgc3RhcnRDYXB0dXJlKGNh
cHR1cmVySW5zdGFuY2UsIDEpOwotICAgIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZv
ckNhcHR1cmVyVG9TdGFydCgpOwotICAgIGNhcHR1cmVySW5zdGFuY2Uuc3VyZmFjZVRleHR1cmVI
ZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICBjYXB0dXJlckluc3RhbmNlLm9ic2Vy
dmVyLndhaXRGb3JOZXh0Q2FwdHVyZWRGcmFtZSgpOwotICAgIGNhcHR1cmVySW5zdGFuY2UuY2Fw
dHVyZXIuc3RvcENhcHR1cmUoKTsKLQotICAgIGxpc3RPZnRpbWVzdGFtcHMgPSBjYXB0dXJlcklu
c3RhbmNlLm9ic2VydmVyLmdldENvcHlBbmRSZXNldExpc3RPZnRpbWVTdGFtcHMoKTsKLSAgICBh
c3NlcnRUcnVlKGxpc3RPZnRpbWVzdGFtcHMuc2l6ZSgpID49IDEpOwotCi0gICAgZGlzcG9zZUNh
cHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmV0dXJuQnVm
ZmVyTGF0ZUVuZFRvRW5kKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5h
bCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihmYWxz
ZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZp
ZGVvVHJhY2tXaXRoUmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0aEZha2VB
c3luY1JlbmRlcmVyKGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIpOwotICAgIC8vIFdhaXQgZm9y
IGF0IGxlYXN0IG9uZSBmcmFtZSB0aGF0IGhhcyBub3QgYmVlbiByZXR1cm5lZC4KLSAgICBhc3Nl
cnRGYWxzZSh2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLmZha2VBc3luY1JlbmRlcmVyLndhaXRGb3JQ
ZW5kaW5nRnJhbWVzKCkuaXNFbXB0eSgpKTsKLQotICAgIGNhcHR1cmVySW5zdGFuY2UuY2FwdHVy
ZXIuc3RvcENhcHR1cmUoKTsKLQotICAgIC8vIERpc3Bvc2UgZXZlcnl0aGluZy4KLSAgICBkaXNw
b3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIodmlkZW9UcmFja1dpdGhSZW5kZXJlcik7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIGZy
YW1lKHMpLCBvbiBhIGRpZmZlcmVudCB0aHJlYWQgb3V0IG9mIHNwaXRlLgotICAgIGZpbmFsIExp
c3Q8STQyMEZyYW1lPiBwZW5kaW5nRnJhbWVzID0KLSAgICAgICAgdmlkZW9UcmFja1dpdGhSZW5k
ZXJlci5mYWtlQXN5bmNSZW5kZXJlci53YWl0Rm9yUGVuZGluZ0ZyYW1lcygpOwotICAgIGZpbmFs
IFRocmVhZCByZXR1cm5UaHJlYWQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAg
IEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBmb3IgKEk0MjBG
cmFtZSBmcmFtZSA6IHBlbmRpbmdGcmFtZXMpIHsKLSAgICAgICAgICBWaWRlb1JlbmRlcmVyLnJl
bmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgICBy
ZXR1cm5UaHJlYWQuc3RhcnQoKTsKLSAgICByZXR1cm5UaHJlYWQuam9pbigpOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgY2FtZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0aW9uKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1
cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcih0cnVlIC8qIGluaXRpYWxpemUgKi8pOwotICAg
IHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLSAgICAvLyBNYWtlIHN1cmUgY2FtZXJh
IGlzIHN0YXJ0ZWQuCi0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndh
aXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAgLy8gU2luY2Ugd2UgZG9uJ3QgcmV0dXJuIHRo
ZSBidWZmZXIsIHdlIHNob3VsZCBnZXQgYSBzdGFydmF0aW9uIG1lc3NhZ2UgaWYgd2UgYXJlCi0g
ICAgLy8gY2FwdHVyaW5nIHRvIGEgdGV4dHVyZS4KLSAgICBhc3NlcnRFcXVhbHMoIkNhbWVyYSBm
YWlsdXJlLiBDbGllbnQgbXVzdCByZXR1cm4gdmlkZW8gYnVmZmVycy4iLAotICAgICAgICBjYXB0
dXJlckluc3RhbmNlLmNhbWVyYUV2ZW50cy53YWl0Rm9yQ2FtZXJhRnJlZXplZCgpKTsKLQotICAg
IGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBkaXNwb3NlQ2Fw
dHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzY2FsZUNhbWVy
YU91dHB1dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgQ2FwdHVy
ZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlID0gY3JlYXRlQ2FwdHVyZXIoZmFsc2UgLyogaW5p
dGlhbGl6ZSAqLyk7Ci0gICAgZmluYWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNr
V2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihjYXB0
dXJlckluc3RhbmNlLmNhcHR1cmVyKTsKLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVu
ZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsK
LQotICAgIGZpbmFsIGludCBzdGFydFdpZHRoID0gdmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5k
ZXJlckNhbGxiYWNrcy5mcmFtZVdpZHRoKCk7Ci0gICAgZmluYWwgaW50IHN0YXJ0SGVpZ2h0ID0g
dmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy5mcmFtZUhlaWdodCgpOwot
ICAgIGZpbmFsIGludCBmcmFtZVJhdGUgPSAzMDsKLSAgICBmaW5hbCBpbnQgc2NhbGVkV2lkdGgg
PSBzdGFydFdpZHRoIC8gMjsKLSAgICBmaW5hbCBpbnQgc2NhbGVkSGVpZ2h0ID0gc3RhcnRIZWln
aHQgLyAyOwotCi0gICAgLy8gUmVxdWVzdCB0aGUgY2FwdHVyZWQgZnJhbWVzIHRvIGJlIHNjYWxl
ZC4KLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNvdXJjZS5hZGFwdE91dHB1dEZvcm1hdChz
Y2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0LCBmcmFtZVJhdGUpOwotCi0gICAgYm9vbGVhbiBnb3RF
eHBlY3RlZFJlc29sdXRpb24gPSBmYWxzZTsKLSAgICBpbnQgbnVtYmVyT2ZJbnNwZWN0ZWRGcmFt
ZXMgPSAwOwotCi0gICAgZG8gewotICAgICAgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJl
ckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKTsKLSAgICAgICsrbnVtYmVyT2ZJ
bnNwZWN0ZWRGcmFtZXM7Ci0KLSAgICAgIGdvdEV4cGVjdGVkUmVzb2x1dGlvbiA9ICh2aWRlb1Ry
YWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lV2lkdGgoKSA9PSBzY2FsZWRX
aWR0aAotICAgICAgICAgICYmIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFj
a3MuZnJhbWVIZWlnaHQoKSA9PSBzY2FsZWRIZWlnaHQpOwotICAgIH0gd2hpbGUgKCFnb3RFeHBl
Y3RlZFJlc29sdXRpb24gJiYgbnVtYmVyT2ZJbnNwZWN0ZWRGcmFtZXMgPCAzMCk7Ci0KLSAgICBk
aXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJhY2tX
aXRoUmVuZGVyZXIodmlkZW9UcmFja1dpdGhSZW5kZXJlcik7Ci0KLSAgICBhc3NlcnRUcnVlKGdv
dEV4cGVjdGVkUmVzb2x1dGlvbik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdGFydFdoaWxlQ2Ft
ZXJhSXNBbHJlYWR5T3BlbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmlu
YWwgU3RyaW5nIGNhbWVyYU5hbWUgPSB0ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZCYWNrRmFj
aW5nRGV2aWNlKCk7Ci0gICAgLy8gQXQgdGhpcyBwb2ludCBjYW1lcmEgaXMgbm90IGFjdHVhbGx5
IG9wZW5lZC4KLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBj
cmVhdGVDYXB0dXJlcihjYW1lcmFOYW1lLCB0cnVlIC8qIGluaXRpYWxpemUgKi8pOwotCi0gICAg
ZmluYWwgT2JqZWN0IGNvbXBldGluZ0NhbWVyYSA9IHRlc3RPYmplY3RGYWN0b3J5LnJhd09wZW5D
YW1lcmEoY2FtZXJhTmFtZSk7Ci0KLSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSk7
Ci0KLSAgICBpZiAoYW5kcm9pZC5vcy5CdWlsZC5WRVJTSU9OLlNES19JTlQgPiBhbmRyb2lkLm9z
LkJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1BfTVIxKSB7Ci0gICAgICAvLyBUaGUgZmlyc3Qg
b3BlbmVkIGNhbWVyYSBjbGllbnQgd2lsbCBiZSBldmljdGVkLgotICAgICAgYXNzZXJ0VHJ1ZShj
YXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIGFzc2VydEZhbHNlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2Fp
dEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLSAgICB9Ci0KLSAgICB0ZXN0T2JqZWN0RmFjdG9yeS5y
YXdDbG9zZUNhbWVyYShjb21wZXRpbmdDYW1lcmEpOwotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0
dXJlckluc3RhbmNlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0YXJ0V2hpbGVDYW1lcmFJc0Fs
cmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIGZpbmFsIFN0cmluZyBjYW1lcmFOYW1lID0gdGVzdE9iamVjdEZhY3RvcnkuZ2V0TmFtZU9m
QmFja0ZhY2luZ0RldmljZSgpOwotICAgIC8vIEF0IHRoaXMgcG9pbnQgY2FtZXJhIGlzIG5vdCBh
Y3R1YWxseSBvcGVuZWQuCi0gICAgZmluYWwgQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3Rh
bmNlID0gY3JlYXRlQ2FwdHVyZXIoY2FtZXJhTmFtZSwgZmFsc2UgLyogaW5pdGlhbGl6ZSAqLyk7
Ci0KLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRD
bG9zZUNhbWVyYTogT3BlbmluZyBjb21wZXRpbmcgY2FtZXJhLiIpOwotICAgIGZpbmFsIE9iamVj
dCBjb21wZXRpbmdDYW1lcmEgPSB0ZXN0T2JqZWN0RmFjdG9yeS5yYXdPcGVuQ2FtZXJhKGNhbWVy
YU5hbWUpOwotCi0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlP
cGVuQW5kQ2xvc2VDYW1lcmE6IE9wZW5pbmcgY2FtZXJhLiIpOwotICAgIGZpbmFsIFZpZGVvVHJh
Y2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZp
ZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAgd2Fp
dFVudGlsSWRsZShjYXB0dXJlckluc3RhbmNlKTsKLQotICAgIExvZ2dpbmcuZChUQUcsICJzdGFy
dFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBDbG9zaW5nIGNvbXBldGlu
ZyBjYW1lcmEuIik7Ci0gICAgdGVzdE9iamVjdEZhY3RvcnkucmF3Q2xvc2VDYW1lcmEoY29tcGV0
aW5nQ2FtZXJhKTsKLQotICAgIC8vIE1ha2Ugc3VyZSBjYW1lcmEgaXMgc3RhcnRlZCBhbmQgZmly
c3QgZnJhbWUgaXMgcmVjZWl2ZWQgYW5kIHRoZW4gc3RvcCBpdC4KLSAgICBMb2dnaW5nLmQoVEFH
LCAic3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYTogV2FpdGluZyBm
b3IgY2FwdHVyZSB0byBzdGFydC4iKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRl
cmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpOwotICAgIExvZ2dpbmcuZChU
QUcsICJzdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBTdG9wcGlu
ZyBjYXB0dXJlLiIpOwotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kU3RvcCgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgU3RyaW5nIGNhbWVyYU5h
bWUgPSB0ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZCYWNrRmFjaW5nRGV2aWNlKCk7Ci0gICAg
Ly8gQXQgdGhpcyBwb2ludCBjYW1lcmEgaXMgbm90IGFjdHVhbGx5IG9wZW5lZC4KLSAgICBmaW5h
bCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihjYW1l
cmFOYW1lLCB0cnVlIC8qIGluaXRpYWxpemUgKi8pOwotCi0gICAgZmluYWwgT2JqZWN0IGNvbXBl
dGluZ0NhbWVyYSA9IHRlc3RPYmplY3RGYWN0b3J5LnJhd09wZW5DYW1lcmEoY2FtZXJhTmFtZSk7
Ci0KLSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZUNhcHR1
cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotCi0gICAgdGVzdE9iamVjdEZhY3RvcnkucmF3Q2xvc2VD
YW1lcmEoY29tcGV0aW5nQ2FtZXJhKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9F
Z2xSZW5kZXJlclRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0VnbFJl
bmRlcmVyVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0Vn
bFJlbmRlcmVyVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjY3ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3Jh
cGhpY3MuQml0bWFwOwotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1p
bXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzExRXh0OwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdM
RVMyMDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBv
cnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLWltcG9y
dCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBv
cnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERv
d25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLy8gRW1w
dHlBY3Rpdml0eSBpcyBuZWVkZWQgZm9yIHRoZSBzdXJmYWNlLgotcHVibGljIGNsYXNzIEVnbFJl
bmRlcmVyVGVzdCBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsKLSAgZmluYWwgc3Rh
dGljIFN0cmluZyBUQUcgPSAiRWdsUmVuZGVyZXJUZXN0IjsKLSAgZmluYWwgc3RhdGljIGludCBS
RU5ERVJfV0FJVF9NUyA9IDEwMDA7Ci0gIGZpbmFsIHN0YXRpYyBpbnQgU1VSRkFDRV9XQUlUX01T
ID0gMTAwMDsKLSAgZmluYWwgc3RhdGljIGludCBURVNUX0ZSQU1FX1dJRFRIID0gNDsKLSAgZmlu
YWwgc3RhdGljIGludCBURVNUX0ZSQU1FX0hFSUdIVCA9IDQ7Ci0gIC8vIFNvbWUgYXJiaXRyYXJ5
IGZyYW1lcy4KLSAgZmluYWwgc3RhdGljIEJ5dGVCdWZmZXJbXVtdIFRFU1RfRlJBTUVTID0gewot
ICAgICAgewotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsKLSAgICAgICAg
ICAgICAgMTEsIC0xMiwgMTMsIC0xNCwgLTE1LCAxNiwgLTE3LCAxOCwgMTksIC0xMTAsIDExMSwg
LTExMiwgLTExMywgMTE0LCAtMTE1LCAxMTZ9KSwKLSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAo
bmV3IGJ5dGVbXSB7MTE3LCAxMTgsIDExOSwgMTIwfSksCi0gICAgICAgICAgQnl0ZUJ1ZmZlci53
cmFwKG5ldyBieXRlW10gezEyMSwgMTIyLCAxMjMsIDEyNH0pLAotICAgICAgfSwKLSAgICAgIHsK
LSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7LTExLCAtMTIsIC0xMywgLTE0
LCAtMTUsIC0xNiwgLTE3LCAtMTgsIC0xOSwgLTExMCwgLTExMSwgLTExMiwKLSAgICAgICAgICAg
ICAgLTExMywgLTExNCwgLTExNSwgLTExNn0pLAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChu
ZXcgYnl0ZVtdIHstMTIxLCAtMTIyLCAtMTIzLCAtMTI0fSksCi0gICAgICAgICAgQnl0ZUJ1ZmZl
ci53cmFwKG5ldyBieXRlW10gey0xMTcsIC0xMTgsIC0xMTksIC0xMjB9KSwKLSAgICAgIH0sCi0g
ICAgICB7Ci0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gey0xMSwgLTEyLCAt
MTMsIC0xNCwgLTE1LCAtMTYsIC0xNywgLTE4LCAtMTksIC0xMTAsIC0xMTEsIC0xMTIsCi0gICAg
ICAgICAgICAgIC0xMTMsIC0xMTQsIC0xMTUsIC0xMTZ9KSwKLSAgICAgICAgICBCeXRlQnVmZmVy
LndyYXAobmV3IGJ5dGVbXSB7MTE3LCAxMTgsIDExOSwgMTIwfSksCi0gICAgICAgICAgQnl0ZUJ1
ZmZlci53cmFwKG5ldyBieXRlW10gezEyMSwgMTIyLCAxMjMsIDEyNH0pLAotICAgICAgfSwKLSAg
fTsKLQotICBwcml2YXRlIGNsYXNzIFRlc3RGcmFtZUxpc3RlbmVyIGltcGxlbWVudHMgRWdsUmVu
ZGVyZXIuRnJhbWVMaXN0ZW5lciB7Ci0gICAgZmluYWwgcHJpdmF0ZSBBcnJheUxpc3Q8Qml0bWFw
PiBiaXRtYXBzID0gbmV3IEFycmF5TGlzdDxCaXRtYXA+KCk7Ci0gICAgYm9vbGVhbiBiaXRtYXBS
ZWNlaXZlZDsKLSAgICBCaXRtYXAgc3RvcmVkQml0bWFwOwotCi0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uRnJhbWUoQml0bWFwIGJpdG1hcCkgewotICAgICAg
aWYgKGJpdG1hcFJlY2VpdmVkKSB7Ci0gICAgICAgIGZhaWwoIlVuZXhwZWN0ZWQgYml0bWFwIHdh
cyByZWNlaXZlZC4iKTsKLSAgICAgIH0KLQotICAgICAgYml0bWFwUmVjZWl2ZWQgPSB0cnVlOwot
ICAgICAgc3RvcmVkQml0bWFwID0gYml0bWFwOwotICAgICAgbm90aWZ5KCk7Ci0gICAgfQotCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCBib29sZWFuIHdhaXRGb3JCaXRtYXAoaW50IHRpbWVvdXRN
cykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIGlmICghYml0bWFwUmVjZWl2
ZWQpIHsKLSAgICAgICAgd2FpdCh0aW1lb3V0TXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIGJp
dG1hcFJlY2VpdmVkOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgQml0bWFwIHJl
c2V0QW5kR2V0Qml0bWFwKCkgewotICAgICAgYml0bWFwUmVjZWl2ZWQgPSBmYWxzZTsKLSAgICAg
IHJldHVybiBzdG9yZWRCaXRtYXA7Ci0gICAgfQotICB9Ci0KLSAgZmluYWwgVGVzdEZyYW1lTGlz
dGVuZXIgdGVzdEZyYW1lTGlzdGVuZXIgPSBuZXcgVGVzdEZyYW1lTGlzdGVuZXIoKTsKLQotICBF
Z2xSZW5kZXJlciBlZ2xSZW5kZXJlcjsKLSAgQ291bnREb3duTGF0Y2ggc3VyZmFjZVJlYWR5TGF0
Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gIGludCBvZXNUZXh0dXJlSWQ7Ci0gIFN1cmZh
Y2VUZXh0dXJlIHN1cmZhY2VUZXh0dXJlOwotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9p
ZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5p
bml0aWFsaXplQW5kcm9pZEdsb2JhbHMoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29u
dGV4dCgpLAotICAgICAgICB0cnVlIC8qIGluaXRpYWxpemVBdWRpbyAqLywgdHJ1ZSAvKiBpbml0
aWFsaXplVmlkZW8gKi8sIHRydWUgLyogdmlkZW9Id0FjY2VsZXJhdGlvbiAqLyk7Ci0gICAgZWds
UmVuZGVyZXIgPSBuZXcgRWdsUmVuZGVyZXIoIlRlc3RSZW5kZXJlcjogIik7Ci0gICAgZWdsUmVu
ZGVyZXIuaW5pdChudWxsIC8qIHNoYXJlZENvbnRleHQgKi8sIEVnbEJhc2UuQ09ORklHX1JHQkEs
IG5ldyBHbFJlY3REcmF3ZXIoKSk7Ci0gICAgb2VzVGV4dHVyZUlkID0gR2xVdGlsLmdlbmVyYXRl
VGV4dHVyZShHTEVTMTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMpOwotICAgIHN1cmZhY2VU
ZXh0dXJlID0gbmV3IFN1cmZhY2VUZXh0dXJlKG9lc1RleHR1cmVJZCk7Ci0gICAgc3VyZmFjZVRl
eHR1cmUuc2V0RGVmYXVsdEJ1ZmZlclNpemUoMSAvKiB3aWR0aCAqLywgMSAvKiBoZWlnaHQgKi8p
OwotICAgIGVnbFJlbmRlcmVyLmNyZWF0ZUVnbFN1cmZhY2Uoc3VyZmFjZVRleHR1cmUpOwotICAg
IGVnbFJlbmRlcmVyLnN1cmZhY2VTaXplQ2hhbmdlZCgxIC8qIHdpZHRoICovLCAxIC8qIGhlaWdo
dCAqLyk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0g
ICAgc3VyZmFjZVRleHR1cmUucmVsZWFzZSgpOwotICAgIEdMRVMyMC5nbERlbGV0ZVRleHR1cmVz
KDEgLyogbiAqLywgbmV3IGludFtdIHtvZXNUZXh0dXJlSWR9LCAwIC8qIG9mZnNldCAqLyk7Ci0g
ICAgZWdsUmVuZGVyZXIucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqIENoZWNrcyB0aGUgYml0bWFw
IGlzIG5vdCBudWxsIGFuZCB0aGUgY29ycmVjdCBzaXplLiAqLwotICBwcml2YXRlIHN0YXRpYyB2
b2lkIGNoZWNrQml0bWFwKEJpdG1hcCBiaXRtYXAsIGZsb2F0IHNjYWxlKSB7Ci0gICAgYXNzZXJ0
Tm90TnVsbChiaXRtYXApOwotICAgIGFzc2VydEVxdWFscygoaW50KSAoVEVTVF9GUkFNRV9XSURU
SCAqIHNjYWxlKSwgYml0bWFwLmdldFdpZHRoKCkpOwotICAgIGFzc2VydEVxdWFscygoaW50KSAo
VEVTVF9GUkFNRV9IRUlHSFQgKiBzY2FsZSksIGJpdG1hcC5nZXRIZWlnaHQoKSk7Ci0gIH0KLQot
ICAvKioKLSAgICogRG9lcyBsaW5lYXIgc2FtcGxpbmcgb24gVS9WIHBsYW5lIG9mIHRlc3QgZGF0
YS4KLSAgICoKLSAgICogQHBhcmFtIGRhdGEgUGxhbmUgZGF0YSB0byBiZSBzYW1wbGVkIGZyb20u
Ci0gICAqIEBwYXJhbSBwbGFuZVdpZHRoIFdpZHRoIG9mIHRoZSBwbGFuZSBkYXRhLiBUaGlzIGlz
IGFsc28gYXNzdW1lZCB0byBiZSB0aGUgc3RyaWRlLgotICAgKiBAcGFyYW0gcGxhbmVIZWlnaHQg
SGVpZ2h0IG9mIHRoZSBwbGFuZSBkYXRhLgotICAgKiBAcGFyYW0geCBYLWNvb3JkaW5hdGUgaW4g
cmFuZ2UgWzAsIDFdLgotICAgKiBAcGFyYW0geSBZLWNvb3JkaW5hdGUgaW4gcmFuZ2UgWzAsIDFd
LgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmxvYXQgbGluZWFyU2FtcGxlKAotICAgICAgQnl0
ZUJ1ZmZlciBwbGFuZSwgaW50IHBsYW5lV2lkdGgsIGludCBwbGFuZUhlaWdodCwgZmxvYXQgeCwg
ZmxvYXQgeSkgewotICAgIGZpbmFsIGludCBzdHJpZGUgPSBwbGFuZVdpZHRoOwotCi0gICAgZmlu
YWwgZmxvYXQgY29vcmRYID0geCAqIHBsYW5lV2lkdGg7Ci0gICAgZmluYWwgZmxvYXQgY29vcmRZ
ID0geSAqIHBsYW5lSGVpZ2h0OwotCi0gICAgaW50IGxvd0luZGV4WCA9IChpbnQpIE1hdGguZmxv
b3IoY29vcmRYIC0gMC41Zik7Ci0gICAgaW50IGxvd0luZGV4WSA9IChpbnQpIE1hdGguZmxvb3Io
Y29vcmRZIC0gMC41Zik7Ci0gICAgaW50IGhpZ2hJbmRleFggPSBsb3dJbmRleFggKyAxOwotICAg
IGludCBoaWdoSW5kZXhZID0gbG93SW5kZXhZICsgMTsKLQotICAgIGZpbmFsIGZsb2F0IGhpZ2hX
ZWlnaHRYID0gY29vcmRYIC0gbG93SW5kZXhYIC0gMC41ZjsKLSAgICBmaW5hbCBmbG9hdCBoaWdo
V2VpZ2h0WSA9IGNvb3JkWSAtIGxvd0luZGV4WSAtIDAuNWY7Ci0gICAgZmluYWwgZmxvYXQgbG93
V2VpZ2h0WCA9IDFmIC0gaGlnaFdlaWdodFg7Ci0gICAgZmluYWwgZmxvYXQgbG93V2VpZ2h0WSA9
IDFmIC0gaGlnaFdlaWdodFk7Ci0KLSAgICAvLyBDbGFtcCBvbiB0aGUgZWRnZXMuCi0gICAgbG93
SW5kZXhYID0gTWF0aC5tYXgoMCwgbG93SW5kZXhYKTsKLSAgICBsb3dJbmRleFkgPSBNYXRoLm1h
eCgwLCBsb3dJbmRleFkpOwotICAgIGhpZ2hJbmRleFggPSBNYXRoLm1pbihwbGFuZVdpZHRoIC0g
MSwgaGlnaEluZGV4WCk7Ci0gICAgaGlnaEluZGV4WSA9IE1hdGgubWluKHBsYW5lSGVpZ2h0IC0g
MSwgaGlnaEluZGV4WSk7Ci0KLSAgICBmbG9hdCBsb3dZVmFsdWUgPSAocGxhbmUuZ2V0KGxvd0lu
ZGV4WSAqIHN0cmlkZSArIGxvd0luZGV4WCkgJiAweEZGKSAqIGxvd1dlaWdodFgKLSAgICAgICAg
KyAocGxhbmUuZ2V0KGxvd0luZGV4WSAqIHN0cmlkZSArIGhpZ2hJbmRleFgpICYgMHhGRikgKiBo
aWdoV2VpZ2h0WDsKLSAgICBmbG9hdCBoaWdoWVZhbHVlID0gKHBsYW5lLmdldChoaWdoSW5kZXhZ
ICogc3RyaWRlICsgbG93SW5kZXhYKSAmIDB4RkYpICogbG93V2VpZ2h0WAotICAgICAgICArIChw
bGFuZS5nZXQoaGlnaEluZGV4WSAqIHN0cmlkZSArIGhpZ2hJbmRleFgpICYgMHhGRikgKiBoaWdo
V2VpZ2h0WDsKLQotICAgIHJldHVybiAobG93V2VpZ2h0WSAqIGxvd1lWYWx1ZSArIGhpZ2hXZWln
aHRZICogaGlnaFlWYWx1ZSkgLyAyNTVmOwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYnl0ZSBz
YXR1cmF0ZWRGbG9hdFRvQnl0ZShmbG9hdCBjKSB7Ci0gICAgcmV0dXJuIChieXRlKSBNYXRoLnJv
dW5kKDI1NWYgKiBNYXRoLm1heCgwZiwgTWF0aC5taW4oMWYsIGMpKSk7Ci0gIH0KLQotICAvKioK
LSAgICogQ29udmVydHMgdGVzdCBkYXRhIFlVViBmcmFtZSB0byBleHBlY3RlZCBSR0JBIGZyYW1l
LiBUcmllcyB0byBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgT3BlbkdMCi0gICAqIFlVViBkcmF3ZXIg
c2hhZGVyLiBEb2VzIGxpbmVhciBzYW1wbGluZyBvbiB0aGUgVS0gYW5kIFYtcGxhbmVzLgotICAg
KgotICAgKiBAcGFyYW0geXV2RnJhbWUgQXJyYXkgb2Ygc2l6ZSAzIGNvbnRhaW5pbmcgWS0sIFUt
LCBWLXBsYW5lcyBmb3IgaW1hZ2Ugb2Ygc2l6ZQotICAgKiAgICAgICAgICAgICAgICAgKFRFU1Rf
RlJBTUVfV0lEVEgsIFRFU1RfRlJBTUVfSEVJR0hUKS4gVS0gYW5kIFYtcGxhbmVzIHNob3VsZCBi
ZSBoYWxmIHRoZSBzaXplCi0gICAqICAgICAgICAgICAgICAgICBvZiB0aGUgWS1wbGFuZS4KLSAg
ICovCi0gIHByaXZhdGUgc3RhdGljIGJ5dGVbXSBjb252ZXJ0WVVWRnJhbWVUb1JHQkEoQnl0ZUJ1
ZmZlcltdIHl1dkZyYW1lKSB7Ci0gICAgZmluYWwgYnl0ZVtdIGFyZ2JGcmFtZSA9IG5ldyBieXRl
W1RFU1RfRlJBTUVfV0lEVEggKiBURVNUX0ZSQU1FX0hFSUdIVCAqIDRdOwotICAgIGZpbmFsIGlu
dCBhcmdiU3RyaWRlID0gVEVTVF9GUkFNRV9XSURUSCAqIDQ7Ci0gICAgZmluYWwgaW50IHlTdHJp
ZGUgPSBURVNUX0ZSQU1FX1dJRFRIOwotCi0gICAgZmluYWwgaW50IHZTdHJpZGUgPSBURVNUX0ZS
QU1FX1dJRFRIIC8gMjsKLQotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgVEVTVF9GUkFNRV9IRUlH
SFQ7IHkrKykgewotICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBURVNUX0ZSQU1FX1dJRFRIOyB4
KyspIHsKLSAgICAgICAgZmluYWwgaW50IHgyID0geCAvIDI7Ci0gICAgICAgIGZpbmFsIGludCB5
MiA9IHkgLyAyOwotCi0gICAgICAgIGZpbmFsIGZsb2F0IHlDID0gKHl1dkZyYW1lWzBdLmdldCh5
ICogeVN0cmlkZSArIHgpICYgMHhGRikgLyAyNTVmOwotICAgICAgICBmaW5hbCBmbG9hdCB1QyA9
IGxpbmVhclNhbXBsZSh5dXZGcmFtZVsxXSwgVEVTVF9GUkFNRV9XSURUSCAvIDIsIFRFU1RfRlJB
TUVfSEVJR0hUIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHggKyAwLjVmKSAv
IFRFU1RfRlJBTUVfV0lEVEgsICh5ICsgMC41ZikgLyBURVNUX0ZSQU1FX0hFSUdIVCkKLSAgICAg
ICAgICAgIC0gMC41ZjsKLSAgICAgICAgZmluYWwgZmxvYXQgdkMgPSBsaW5lYXJTYW1wbGUoeXV2
RnJhbWVbMl0sIFRFU1RfRlJBTUVfV0lEVEggLyAyLCBURVNUX0ZSQU1FX0hFSUdIVCAvIDIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh4ICsgMC41ZikgLyBURVNUX0ZSQU1FX1dJRFRI
LCAoeSArIDAuNWYpIC8gVEVTVF9GUkFNRV9IRUlHSFQpCi0gICAgICAgICAgICAtIDAuNWY7Ci0g
ICAgICAgIGZpbmFsIGZsb2F0IHJDID0geUMgKyAxLjQwM2YgKiB2QzsKLSAgICAgICAgZmluYWwg
ZmxvYXQgZ0MgPSB5QyAtIDAuMzQ0ZiAqIHVDIC0gMC43MTRmICogdkM7Ci0gICAgICAgIGZpbmFs
IGZsb2F0IGJDID0geUMgKyAxLjc3ZiAqIHVDOwotCi0gICAgICAgIGFyZ2JGcmFtZVt5ICogYXJn
YlN0cmlkZSArIHggKiA0ICsgMF0gPSBzYXR1cmF0ZWRGbG9hdFRvQnl0ZShyQyk7Ci0gICAgICAg
IGFyZ2JGcmFtZVt5ICogYXJnYlN0cmlkZSArIHggKiA0ICsgMV0gPSBzYXR1cmF0ZWRGbG9hdFRv
Qnl0ZShnQyk7Ci0gICAgICAgIGFyZ2JGcmFtZVt5ICogYXJnYlN0cmlkZSArIHggKiA0ICsgMl0g
PSBzYXR1cmF0ZWRGbG9hdFRvQnl0ZShiQyk7Ci0gICAgICAgIGFyZ2JGcmFtZVt5ICogYXJnYlN0
cmlkZSArIHggKiA0ICsgM10gPSAoYnl0ZSkgMjU1OwotICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBhcmdiRnJhbWU7Ci0gIH0KLQotICAvKiogQ2hlY2tzIHRoYXQgdGhlIGJpdG1hcCBjb250
ZW50IG1hdGNoZXMgdGhlIHRlc3QgZnJhbWUgd2l0aCB0aGUgZ2l2ZW4gaW5kZXguICovCi0gIHBy
aXZhdGUgc3RhdGljIHZvaWQgY2hlY2tCaXRtYXBDb250ZW50KEJpdG1hcCBiaXRtYXAsIGludCBm
cmFtZSkgewotICAgIGNoZWNrQml0bWFwKGJpdG1hcCwgMWYpOwotCi0gICAgYnl0ZVtdIGV4cGVj
dGVkUkdCQSA9IGNvbnZlcnRZVVZGcmFtZVRvUkdCQShURVNUX0ZSQU1FU1tmcmFtZV0pOwotICAg
IEJ5dGVCdWZmZXIgYml0bWFwQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChiaXRt
YXAuZ2V0Qnl0ZUNvdW50KCkpOwotICAgIGJpdG1hcC5jb3B5UGl4ZWxzVG9CdWZmZXIoYml0bWFw
QnVmZmVyKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRSR0JBLmxlbmd0aDsg
aSsrKSB7Ci0gICAgICBpbnQgZXhwZWN0ZWQgPSBleHBlY3RlZFJHQkFbaV0gJiAweEZGOwotICAg
ICAgaW50IHZhbHVlID0gYml0bWFwQnVmZmVyLmdldChpKSAmIDB4RkY7Ci0gICAgICAvLyBEdWUg
dG8gdW5rbm93biBjb252ZXJzaW9uIGRpZmZlcmVuY2VzIGNoZWNrIHZhbHVlIG1hdGNoZXMgKy0x
LgotICAgICAgaWYgKE1hdGguYWJzKHZhbHVlIC0gZXhwZWN0ZWQpID4gMSkgewotICAgICAgICBM
b2dnaW5nLmQoVEFHLCAiRXhwZWN0ZWQgYml0bWFwIGNvbnRlbnQ6ICIgKyBBcnJheXMudG9TdHJp
bmcoZXhwZWN0ZWRSR0JBKSk7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJCaXRtYXAgY29udGVu
dDogIiArIEFycmF5cy50b1N0cmluZyhiaXRtYXBCdWZmZXIuYXJyYXkoKSkpOwotICAgICAgICBm
YWlsKCJGcmFtZSBkb2Vzbid0IG1hdGNoIG9yaWdpbmFsIGZyYW1lIG9uIGJ5dGUgIiArIGkgKyAi
LiBFeHBlY3RlZDogIiArIGV4cGVjdGVkCi0gICAgICAgICAgICArICIgUmVzdWx0OiAiICsgdmFs
dWUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKiBUZWxscyBlZ2xSZW5kZXJlciB0byBy
ZW5kZXIgdGVzdCBmcmFtZSB3aXRoIGdpdmVuIGluZGV4LiAqLwotICBwcml2YXRlIHZvaWQgZmVl
ZEZyYW1lKGludCBpKSB7Ci0gICAgZWdsUmVuZGVyZXIucmVuZGVyRnJhbWUobmV3IFZpZGVvUmVu
ZGVyZXIuSTQyMEZyYW1lKFRFU1RfRlJBTUVfV0lEVEgsIFRFU1RfRlJBTUVfSEVJR0hULCAwLAot
ICAgICAgICBuZXcgaW50W10ge1RFU1RfRlJBTUVfV0lEVEgsIFRFU1RfRlJBTUVfV0lEVEggLyAy
LCBURVNUX0ZSQU1FX1dJRFRIIC8gMn0sIFRFU1RfRlJBTUVTW2ldLAotICAgICAgICAwKSk7Ci0g
IH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RBZGRGcmFtZUxpc3RlbmVyKCkg
dGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZWdsUmVuZGVyZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0
RnJhbWVMaXN0ZW5lciwgMGYgLyogc2NhbGVGYWN0b3IgKi8pOwotICAgIGZlZWRGcmFtZSgwKTsK
LSAgICBhc3NlcnRUcnVlKHRlc3RGcmFtZUxpc3RlbmVyLndhaXRGb3JCaXRtYXAoUkVOREVSX1dB
SVRfTVMpKTsKLSAgICBhc3NlcnROdWxsKHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0
bWFwKCkpOwotICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1lTGlzdGVu
ZXIsIDBmIC8qIHNjYWxlRmFjdG9yICovKTsKLSAgICBmZWVkRnJhbWUoMSk7Ci0gICAgYXNzZXJ0
VHJ1ZSh0ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJFTkRFUl9XQUlUX01TKSk7Ci0g
ICAgYXNzZXJ0TnVsbCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNldEFuZEdldEJpdG1hcCgpKTsKLSAg
ICBmZWVkRnJhbWUoMik7Ci0gICAgLy8gQ2hlY2sgd2UgZ2V0IG5vIG1vcmUgYml0bWFwcyB0aGFu
IHR3by4KLSAgICBhc3NlcnRGYWxzZSh0ZXN0RnJhbWVMaXN0ZW5lci53YWl0Rm9yQml0bWFwKFJF
TkRFUl9XQUlUX01TKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RB
ZGRGcmFtZUxpc3RlbmVyQml0bWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgZWdsUmVuZGVy
ZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0RnJhbWVMaXN0ZW5lciwgMWYgLyogc2NhbGVGYWN0b3Ig
Ki8pOwotICAgIGZlZWRGcmFtZSgwKTsKLSAgICBhc3NlcnRUcnVlKHRlc3RGcmFtZUxpc3RlbmVy
LndhaXRGb3JCaXRtYXAoUkVOREVSX1dBSVRfTVMpKTsKLSAgICBjaGVja0JpdG1hcENvbnRlbnQo
dGVzdEZyYW1lTGlzdGVuZXIucmVzZXRBbmRHZXRCaXRtYXAoKSwgMCk7Ci0gICAgZWdsUmVuZGVy
ZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0RnJhbWVMaXN0ZW5lciwgMWYgLyogc2NhbGVGYWN0b3Ig
Ki8pOwotICAgIGZlZWRGcmFtZSgxKTsKLSAgICBhc3NlcnRUcnVlKHRlc3RGcmFtZUxpc3RlbmVy
LndhaXRGb3JCaXRtYXAoUkVOREVSX1dBSVRfTVMpKTsKLSAgICBjaGVja0JpdG1hcENvbnRlbnQo
dGVzdEZyYW1lTGlzdGVuZXIucmVzZXRBbmRHZXRCaXRtYXAoKSwgMSk7Ci0gIH0KLQotICBAU21h
bGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RBZGRGcmFtZUxpc3RlbmVyQml0bWFwU2NhbGUoKSB0
aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAg
ICAgZmxvYXQgc2NhbGUgPSBpICogMC41ZiArIDAuNWY7Ci0gICAgICBlZ2xSZW5kZXJlci5hZGRG
cmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCBzY2FsZSk7Ci0gICAgICBmZWVkRnJhbWUo
aSk7Ci0gICAgICBhc3NlcnRUcnVlKHRlc3RGcmFtZUxpc3RlbmVyLndhaXRGb3JCaXRtYXAoUkVO
REVSX1dBSVRfTVMpKTsKLSAgICAgIGNoZWNrQml0bWFwKHRlc3RGcmFtZUxpc3RlbmVyLnJlc2V0
QW5kR2V0Qml0bWFwKCksIHNjYWxlKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93
ZWJydGMvR2xSZWN0RHJhd2VyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJy
dGMvR2xSZWN0RHJhd2VyVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcv
d2VicnRjL0dsUmVjdERyYXdlclRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI5NCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5k
cm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVT
MjA7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9p
ZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9p
ZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0IGphdmEu
bmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotcHVibGljIGZpbmFs
IGNsYXNzIEdsUmVjdERyYXdlclRlc3QgZXh0ZW5kcyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgLy8g
UmVzb2x1dGlvbiBvZiB0aGUgdGVzdCBpbWFnZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IFdJRFRIID0gMTY7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUlHSFQgPSAxNjsKLSAg
Ly8gU2VlZCBmb3IgcmFuZG9tIHBpeGVsIGNyZWF0aW9uLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgU0VFRCA9IDQyOwotICAvLyBXaGVuIGNvbXBhcmluZyBwaXhlbHMsIGFsbG93IHNvbWUg
c2xhY2sgZm9yIGZsb2F0IGFyaXRobWV0aWMgYW5kIGludGVnZXIgcm91bmRpbmcuCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGZsb2F0IE1BWF9ESUZGID0gMS41ZjsKLQotICBwcml2YXRlIHN0YXRp
YyBmbG9hdCBub3JtYWxpemVkQnl0ZShieXRlIGIpIHsKLSAgICByZXR1cm4gKGIgJiAweEZGKSAv
IDI1NS4wZjsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZsb2F0IHNhdHVyYXRlZENvbnZlcnQo
ZmxvYXQgYykgewotICAgIHJldHVybiAyNTUuMGYgKiBNYXRoLm1heCgwLCBNYXRoLm1pbihjLCAx
KSk7Ci0gIH0KLQotICAvLyBBc3NlcnQgUkdCIEJ5dGVCdWZmZXJzIGFyZSBwaXhlbCBwZXJmZWN0
IGlkZW50aWNhbC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbHMoaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBCeXRlQnVmZmVyIGFjdHVhbCwgQnl0ZUJ1ZmZlciBleHBlY3RlZCkgewot
ICAgIGFjdHVhbC5yZXdpbmQoKTsKLSAgICBleHBlY3RlZC5yZXdpbmQoKTsKLSAgICBhc3NlcnRF
cXVhbHMoYWN0dWFsLnJlbWFpbmluZygpLCB3aWR0aCAqIGhlaWdodCAqIDMpOwotICAgIGFzc2Vy
dEVxdWFscyhleHBlY3RlZC5yZW1haW5pbmcoKSwgd2lkdGggKiBoZWlnaHQgKiAzKTsKLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7Ci0gICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyArK3gpIHsKLSAgICAgICAgZmluYWwgaW50IGFjdHVhbFIgPSBhY3R1YWwuZ2V0
KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgYWN0dWFsRyA9IGFjdHVhbC5nZXQoKSAmIDB4
RkY7Ci0gICAgICAgIGZpbmFsIGludCBhY3R1YWxCID0gYWN0dWFsLmdldCgpICYgMHhGRjsKLSAg
ICAgICAgZmluYWwgaW50IGV4cGVjdGVkUiA9IGV4cGVjdGVkLmdldCgpICYgMHhGRjsKLSAgICAg
ICAgZmluYWwgaW50IGV4cGVjdGVkRyA9IGV4cGVjdGVkLmdldCgpICYgMHhGRjsKLSAgICAgICAg
ZmluYWwgaW50IGV4cGVjdGVkQiA9IGV4cGVjdGVkLmdldCgpICYgMHhGRjsKLSAgICAgICAgaWYg
KGFjdHVhbFIgIT0gZXhwZWN0ZWRSIHx8IGFjdHVhbEcgIT0gZXhwZWN0ZWRHIHx8IGFjdHVhbEIg
IT0gZXhwZWN0ZWRCKSB7Ci0gICAgICAgICAgZmFpbCgiQnl0ZUJ1ZmZlcnMgb2Ygc2l6ZSAiICsg
d2lkdGggKyAieCIgKyBoZWlnaHQgKyAiIG5vdCBlcXVhbCBhdCBwb3NpdGlvbiAiCi0gICAgICAg
ICAgICAgICsgIigiICsgeCArICIsICIgKyB5ICsgIikuIEV4cGVjdGVkIGNvbG9yIChSLEcsQik6
ICIKLSAgICAgICAgICAgICAgKyAiKCIgKyBleHBlY3RlZFIgKyAiLCAiICsgZXhwZWN0ZWRHICsg
IiwgIiArIGV4cGVjdGVkQiArICIpIgotICAgICAgICAgICAgICArICIgYnV0IHdhczogIgotICAg
ICAgICAgICAgICArICIoIiArIGFjdHVhbFIgKyAiLCAiICsgYWN0dWFsRyArICIsICIgKyBhY3R1
YWxCICsgIikuIik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvLyBDb252
ZXJ0IFJHQkEgQnl0ZUJ1ZmZlciB0byBSR0IgQnl0ZUJ1ZmZlci4KLSAgcHJpdmF0ZSBzdGF0aWMg
Qnl0ZUJ1ZmZlciBzdHJpcEFscGhhQ2hhbm5lbChCeXRlQnVmZmVyIHJnYmFCdWZmZXIpIHsKLSAg
ICByZ2JhQnVmZmVyLnJld2luZCgpOwotICAgIGFzc2VydEVxdWFscyhyZ2JhQnVmZmVyLnJlbWFp
bmluZygpICUgNCwgMCk7Ci0gICAgZmluYWwgaW50IG51bWJlck9mUGl4ZWxzID0gcmdiYUJ1ZmZl
ci5yZW1haW5pbmcoKSAvIDQ7Ci0gICAgZmluYWwgQnl0ZUJ1ZmZlciByZ2JCdWZmZXIgPSBCeXRl
QnVmZmVyLmFsbG9jYXRlRGlyZWN0KG51bWJlck9mUGl4ZWxzICogMyk7Ci0gICAgd2hpbGUgKHJn
YmFCdWZmZXIuaGFzUmVtYWluaW5nKCkpIHsKLSAgICAgIC8vIENvcHkgUkdCLgotICAgICAgZm9y
IChpbnQgY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCAzOyArK2NoYW5uZWwpIHsKLSAgICAgICAgcmdi
QnVmZmVyLnB1dChyZ2JhQnVmZmVyLmdldCgpKTsKLSAgICAgIH0KLSAgICAgIC8vIERyb3AgYWxw
aGEuCi0gICAgICByZ2JhQnVmZmVyLmdldCgpOwotICAgIH0KLSAgICByZXR1cm4gcmdiQnVmZmVy
OwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmdiUmVuZGVyaW5nKCkg
ewotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVyIGFzIGRpc3BsYXkg
b3V0cHV0LgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGws
IEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5jcmVhdGVQYnVmZmVy
U3VyZmFjZShXSURUSCwgSEVJR0hUKTsKLSAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0KLSAg
ICAvLyBDcmVhdGUgUkdCIGJ5dGUgYnVmZmVyIHBsYW5lIHdpdGggcmFuZG9tIGNvbnRlbnQuCi0g
ICAgZmluYWwgQnl0ZUJ1ZmZlciByZ2JQbGFuZSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qo
V0lEVEggKiBIRUlHSFQgKiAzKTsKLSAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRv
bShTRUVEKTsKLSAgICByYW5kb20ubmV4dEJ5dGVzKHJnYlBsYW5lLmFycmF5KCkpOwotCi0gICAg
Ly8gVXBsb2FkIHRoZSBSR0IgYnl0ZSBidWZmZXIgZGF0YSBhcyBhIHRleHR1cmUuCi0gICAgZmlu
YWwgaW50IHJnYlRleHR1cmUgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMyMC5HTF9URVhU
VVJFXzJEKTsKLSAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFMCk7
Ci0gICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIHJnYlRleHR1
cmUpOwotICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIDAsIEdM
RVMyMC5HTF9SR0IsIFdJRFRILCBIRUlHSFQsIDAsIEdMRVMyMC5HTF9SR0IsCi0gICAgICAgIEdM
RVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JQbGFuZSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVT
MkVycm9yKCJnbFRleEltYWdlMkQiKTsKLQotICAgIC8vIERyYXcgdGhlIFJHQiBmcmFtZSBvbnRv
IHRoZSBwaXhlbCBidWZmZXIuCi0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5ldyBH
bFJlY3REcmF3ZXIoKTsKLSAgICBkcmF3ZXIuZHJhd1JnYihyZ2JUZXh0dXJlLCBSZW5kZXJlckNv
bW1vbi5pZGVudGl0eU1hdHJpeCgpLCBXSURUSCwgSEVJR0hULCAwIC8qIHZpZXdwb3J0WCAqLywK
LSAgICAgICAgMCAvKiB2aWV3cG9ydFkgKi8sIFdJRFRILCBIRUlHSFQpOwotCi0gICAgLy8gRG93
bmxvYWQgdGhlIHBpeGVscyBpbiB0aGUgcGl4ZWwgYnVmZmVyIGFzIFJHQkEuIE5vdCBhbGwgcGxh
dGZvcm1zIHN1cHBvcnQgUkdCLCBlLmcuIE5leHVzIDkuCi0gICAgZmluYWwgQnl0ZUJ1ZmZlciBy
Z2JhRGF0YSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoV0lEVEggKiBIRUlHSFQgKiA0KTsK
LSAgICBHTEVTMjAuZ2xSZWFkUGl4ZWxzKDAsIDAsIFdJRFRILCBIRUlHSFQsIEdMRVMyMC5HTF9S
R0JBLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgcmdiYURhdGEpOwotICAgIEdsVXRpbC5jaGVj
a05vR0xFUzJFcnJvcigiZ2xSZWFkUGl4ZWxzIik7Ci0KLSAgICAvLyBBc3NlcnQgcmVuZGVyZWQg
aW1hZ2UgaXMgcGl4ZWwgcGVyZmVjdCB0byBzb3VyY2UgUkdCLgotICAgIGFzc2VydEVxdWFscyhX
SURUSCwgSEVJR0hULCBzdHJpcEFscGhhQ2hhbm5lbChyZ2JhRGF0YSksIHJnYlBsYW5lKTsKLQot
ICAgIGRyYXdlci5yZWxlYXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwgbmV3
IGludFtdIHtyZ2JUZXh0dXJlfSwgMCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQot
ICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RZdXZSZW5kZXJpbmcoKSB7Ci0gICAgLy8g
Q3JlYXRlIEVHTCBiYXNlIHdpdGggYSBwaXhlbCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0g
ICAgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdf
UElYRUxfQlVGRkVSKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKFdJRFRILCBI
RUlHSFQpOwotICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLQotICAgIC8vIENyZWF0ZSBZVVYg
Ynl0ZSBidWZmZXIgcGxhbmVzIHdpdGggcmFuZG9tIGNvbnRlbnQuCi0gICAgZmluYWwgQnl0ZUJ1
ZmZlcltdIHl1dlBsYW5lcyA9IG5ldyBCeXRlQnVmZmVyWzNdOwotICAgIGZpbmFsIFJhbmRvbSBy
YW5kb20gPSBuZXcgUmFuZG9tKFNFRUQpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytp
KSB7Ci0gICAgICB5dXZQbGFuZXNbaV0gPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KFdJRFRI
ICogSEVJR0hUKTsKLSAgICAgIHJhbmRvbS5uZXh0Qnl0ZXMoeXV2UGxhbmVzW2ldLmFycmF5KCkp
OwotICAgIH0KLQotICAgIC8vIEdlbmVyYXRlIDMgdGV4dHVyZSBpZHMgZm9yIFkvVS9WLgotICAg
IGZpbmFsIGludCB5dXZUZXh0dXJlc1tdID0gbmV3IGludFszXTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IDM7IGkrKykgewotICAgICAgeXV2VGV4dHVyZXNbaV0gPSBHbFV0aWwuZ2VuZXJhdGVU
ZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICB9Ci0KLSAgICAvLyBVcGxvYWQgdGhl
IFlVViBieXRlIGJ1ZmZlciBkYXRhIGFzIHRleHR1cmVzLgotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMzsgKytpKSB7Ci0gICAgICBHTEVTMjAuZ2xBY3RpdmVUZXh0dXJlKEdMRVMyMC5HTF9URVhU
VVJFMCArIGkpOwotICAgICAgR0xFUzIwLmdsQmluZFRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVf
MkQsIHl1dlRleHR1cmVzW2ldKTsKLSAgICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdM
X1RFWFRVUkVfMkQsIDAsIEdMRVMyMC5HTF9MVU1JTkFOQ0UsIFdJRFRILCBIRUlHSFQsIDAsCi0g
ICAgICAgICAgR0xFUzIwLkdMX0xVTUlOQU5DRSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHl1
dlBsYW5lc1tpXSk7Ci0gICAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsVGV4SW1hZ2Uy
RCIpOwotICAgIH0KLQotICAgIC8vIERyYXcgdGhlIFlVViBmcmFtZSBvbnRvIHRoZSBwaXhlbCBi
dWZmZXIuCi0gICAgZmluYWwgR2xSZWN0RHJhd2VyIGRyYXdlciA9IG5ldyBHbFJlY3REcmF3ZXIo
KTsKLSAgICBkcmF3ZXIuZHJhd1l1dih5dXZUZXh0dXJlcywgUmVuZGVyZXJDb21tb24uaWRlbnRp
dHlNYXRyaXgoKSwgV0lEVEgsIEhFSUdIVCwgMCAvKiB2aWV3cG9ydFggKi8sCi0gICAgICAgIDAg
Lyogdmlld3BvcnRZICovLCBXSURUSCwgSEVJR0hUKTsKLQotICAgIC8vIERvd25sb2FkIHRoZSBw
aXhlbHMgaW4gdGhlIHBpeGVsIGJ1ZmZlciBhcyBSR0JBLiBOb3QgYWxsIHBsYXRmb3JtcyBzdXBw
b3J0IFJHQiwgZS5nLiBOZXh1cyA5LgotICAgIGZpbmFsIEJ5dGVCdWZmZXIgZGF0YSA9IEJ5dGVC
dWZmZXIuYWxsb2NhdGVEaXJlY3QoV0lEVEggKiBIRUlHSFQgKiA0KTsKLSAgICBHTEVTMjAuZ2xS
ZWFkUGl4ZWxzKDAsIDAsIFdJRFRILCBIRUlHSFQsIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xf
VU5TSUdORURfQllURSwgZGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJl
YWRQaXhlbHMiKTsKLQotICAgIC8vIENvbXBhcmUgdGhlIFlVViBkYXRhIHdpdGggdGhlIFJHQkEg
cmVzdWx0LgotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgSEVJR0hUOyArK3kpIHsKLSAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgV0lEVEg7ICsreCkgewotICAgICAgICAvLyBZVVYgY29sb3Igc3Bh
Y2UuIFkgaW4gWzAsIDFdLCBVViBpbiBbLTAuNSwgMC41XS4gVGhlIGNvbnN0YW50cyBhcmUgdGFr
ZW4gZnJvbSB0aGUgWVVWCi0gICAgICAgIC8vIGZyYWdtZW50IHNoYWRlciBjb2RlIGluIEdsUmVj
dERyYXdlci4KLSAgICAgICAgZmluYWwgZmxvYXQgeV9sdW1hID0gbm9ybWFsaXplZEJ5dGUoeXV2
UGxhbmVzWzBdLmdldCgpKTsKLSAgICAgICAgZmluYWwgZmxvYXQgdV9jaHJvbWEgPSBub3JtYWxp
emVkQnl0ZSh5dXZQbGFuZXNbMV0uZ2V0KCkpIC0gMC41ZjsKLSAgICAgICAgZmluYWwgZmxvYXQg
dl9jaHJvbWEgPSBub3JtYWxpemVkQnl0ZSh5dXZQbGFuZXNbMl0uZ2V0KCkpIC0gMC41ZjsKLSAg
ICAgICAgLy8gRXhwZWN0ZWQgY29sb3IgaW4gdW5yb3VuZGVkIFJHQiBbMC4wZiwgMjU1LjBmXS4K
LSAgICAgICAgZmluYWwgZmxvYXQgZXhwZWN0ZWRSZWQgPSBzYXR1cmF0ZWRDb252ZXJ0KHlfbHVt
YSArIDEuNDAzZiAqIHZfY2hyb21hKTsKLSAgICAgICAgZmluYWwgZmxvYXQgZXhwZWN0ZWRHcmVl
biA9Ci0gICAgICAgICAgICBzYXR1cmF0ZWRDb252ZXJ0KHlfbHVtYSAtIDAuMzQ0ZiAqIHVfY2hy
b21hIC0gMC43MTRmICogdl9jaHJvbWEpOwotICAgICAgICBmaW5hbCBmbG9hdCBleHBlY3RlZEJs
dWUgPSBzYXR1cmF0ZWRDb252ZXJ0KHlfbHVtYSArIDEuNzdmICogdV9jaHJvbWEpOwotCi0gICAg
ICAgIC8vIEFjdHVhbCBjb2xvciBpbiBSR0I4ODg4LgotICAgICAgICBmaW5hbCBpbnQgYWN0dWFs
UmVkID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZpbmFsIGludCBhY3R1YWxHcmVlbiA9
IGRhdGEuZ2V0KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgYWN0dWFsQmx1ZSA9IGRhdGEu
Z2V0KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgYWN0dWFsQWxwaGEgPSBkYXRhLmdldCgp
ICYgMHhGRjsKLQotICAgICAgICAvLyBBc3NlcnQgcmVuZGVyZWQgaW1hZ2UgaXMgY2xvc2UgdG8g
cGl4ZWwgcGVyZmVjdCBmcm9tIHNvdXJjZSBZVVYuCi0gICAgICAgIGFzc2VydFRydWUoTWF0aC5h
YnMoYWN0dWFsUmVkIC0gZXhwZWN0ZWRSZWQpIDwgTUFYX0RJRkYpOwotICAgICAgICBhc3NlcnRU
cnVlKE1hdGguYWJzKGFjdHVhbEdyZWVuIC0gZXhwZWN0ZWRHcmVlbikgPCBNQVhfRElGRik7Ci0g
ICAgICAgIGFzc2VydFRydWUoTWF0aC5hYnMoYWN0dWFsQmx1ZSAtIGV4cGVjdGVkQmx1ZSkgPCBN
QVhfRElGRik7Ci0gICAgICAgIGFzc2VydEVxdWFscyhhY3R1YWxBbHBoYSwgMjU1KTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgIEdMRVMyMC5nbERlbGV0ZVRl
eHR1cmVzKDMsIHl1dlRleHR1cmVzLCAwKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBUaGUgcHVycG9zZSBoZXJlIGlzIHRvIHRlc3QgR2xSZWN0RHJhd2VyLm9l
c0RyYXcoKS4gVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8KLSAgICogY3Jl
YXRlIGFuIE9FUyB0ZXh0dXJlLCB3aGljaCBpcyBuZWVkZWQgZm9yIGlucHV0IHRvIG9lc0RyYXco
KS4gTW9zdCBvZiB0aGUgdGVzdCBpcyBjb25jZXJuZWQKLSAgICogd2l0aCBjcmVhdGluZyBPRVMg
dGV4dHVyZXMgaW4gdGhlIGZvbGxvd2luZyB3YXk6Ci0gICAqICAtIENyZWF0ZSBTdXJmYWNlVGV4
dHVyZSB3aXRoIGhlbHAgZnJvbSBTdXJmYWNlVGV4dHVyZUhlbHBlci4KLSAgICogIC0gQ3JlYXRl
IGFuIEVnbEJhc2Ugd2l0aCB0aGUgU3VyZmFjZVRleHR1cmUgYXMgRUdMU3VyZmFjZS4KLSAgICog
IC0gVXBsb2FkIFJHQiB0ZXh0dXJlIHdpdGgga25vd24gY29udGVudC4KLSAgICogIC0gRHJhdyB0
aGUgUkdCIHRleHR1cmUgb250byB0aGUgRWdsQmFzZSB3aXRoIHRoZSBTdXJmYWNlVGV4dHVyZSBh
cyB0YXJnZXQuCi0gICAqICAtIFdhaXQgZm9yIGFuIE9FUyB0ZXh0dXJlIHRvIGJlIHByb2R1Y2Vk
LgotICAgKiBUaGUgYWN0dWFsIG9lc0RyYXcoKSB0ZXN0IGlzIHRoaXM6Ci0gICAqICAtIENyZWF0
ZSBhbiBFZ2xCYXNlIHdpdGggYSBwaXhlbCBidWZmZXIgYXMgdGFyZ2V0LgotICAgKiAgLSBSZW5k
ZXIgdGhlIE9FUyB0ZXh0dXJlIG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICogIC0gUmVhZCBi
YWNrIHRoZSBwaXhlbCBidWZmZXIgYW5kIGNvbXBhcmUgaXQgd2l0aCB0aGUga25vd24gUkdCIGRh
dGEuCi0gICAqLwotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0T2VzUmVuZGVyaW5n
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAvKioKLSAgICAgKiBTdHViIGNs
YXNzIHRvIGNvbnZlcnQgUkdCIEJ5dGVCdWZmZXJzIHRvIE9FUyB0ZXh0dXJlcyBieSBkcmF3aW5n
IG9udG8gYSBTdXJmYWNlVGV4dHVyZS4KLSAgICAgKi8KLSAgICBjbGFzcyBTdHViT2VzVGV4dHVy
ZVByb2R1Y2VyIHsKLSAgICAgIHByaXZhdGUgZmluYWwgRWdsQmFzZSBlZ2xCYXNlOwotICAgICAg
cHJpdmF0ZSBmaW5hbCBHbFJlY3REcmF3ZXIgZHJhd2VyOwotICAgICAgcHJpdmF0ZSBmaW5hbCBp
bnQgcmdiVGV4dHVyZTsKLQotICAgICAgcHVibGljIFN0dWJPZXNUZXh0dXJlUHJvZHVjZXIoCi0g
ICAgICAgICAgRWdsQmFzZS5Db250ZXh0IHNoYXJlZENvbnRleHQsIFN1cmZhY2VUZXh0dXJlIHN1
cmZhY2VUZXh0dXJlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAgICAgICAgZWdsQmFzZSA9
IEVnbEJhc2UuY3JlYXRlKHNoYXJlZENvbnRleHQsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAg
ICAgICAgc3VyZmFjZVRleHR1cmUuc2V0RGVmYXVsdEJ1ZmZlclNpemUod2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNlVGV4dHVyZSk7Ci0gICAgICAg
IGFzc2VydEVxdWFscyhlZ2xCYXNlLnN1cmZhY2VXaWR0aCgpLCB3aWR0aCk7Ci0gICAgICAgIGFz
c2VydEVxdWFscyhlZ2xCYXNlLnN1cmZhY2VIZWlnaHQoKSwgaGVpZ2h0KTsKLQotICAgICAgICBk
cmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0KLSAgICAgICAgZWdsQmFzZS5tYWtlQ3VycmVu
dCgpOwotICAgICAgICByZ2JUZXh0dXJlID0gR2xVdGlsLmdlbmVyYXRlVGV4dHVyZShHTEVTMjAu
R0xfVEVYVFVSRV8yRCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIGRyYXcoQnl0ZUJ1
ZmZlciByZ2JQbGFuZSkgewotICAgICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0KLSAgICAg
ICAgLy8gVXBsb2FkIFJHQiBkYXRhIHRvIHRleHR1cmUuCi0gICAgICAgIEdMRVMyMC5nbEFjdGl2
ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICAgICAgR0xFUzIwLmdsQmluZFRleHR1
cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQsIHJnYlRleHR1cmUpOwotICAgICAgICBHTEVTMjAuZ2xU
ZXhJbWFnZTJEKEdMRVMyMC5HTF9URVhUVVJFXzJELCAwLCBHTEVTMjAuR0xfUkdCLCBXSURUSCwg
SEVJR0hULCAwLCBHTEVTMjAuR0xfUkdCLAotICAgICAgICAgICAgR0xFUzIwLkdMX1VOU0lHTkVE
X0JZVEUsIHJnYlBsYW5lKTsKLSAgICAgICAgLy8gRHJhdyB0aGUgUkdCIGRhdGEgb250byB0aGUg
U3VyZmFjZVRleHR1cmUuCi0gICAgICAgIGRyYXdlci5kcmF3UmdiKHJnYlRleHR1cmUsIFJlbmRl
cmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCksIFdJRFRILCBIRUlHSFQsCi0gICAgICAgICAgICAw
IC8qIHZpZXdwb3J0WCAqLywgMCAvKiB2aWV3cG9ydFkgKi8sIFdJRFRILCBIRUlHSFQpOwotICAg
ICAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lk
IHJlbGVhc2UoKSB7Ci0gICAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgICAgZHJh
d2VyLnJlbGVhc2UoKTsKLSAgICAgICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwgbmV3IGlu
dFtdIHtyZ2JUZXh0dXJlfSwgMCk7Ci0gICAgICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICAgICAg
fQotICAgIH0KLQotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVyIGFz
IGRpc3BsYXkgb3V0cHV0LgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3Jl
YXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5jcmVh
dGVQYnVmZmVyU3VyZmFjZShXSURUSCwgSEVJR0hUKTsKLQotICAgIC8vIENyZWF0ZSByZXNvdXJj
ZXMgZm9yIGdlbmVyYXRpbmcgT0VTIHRleHR1cmVzLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJl
SGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0gU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRl
KAotICAgICAgICAiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywg
ZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAgICBmaW5hbCBTdHViT2VzVGV4dHVyZVBy
b2R1Y2VyIG9lc1Byb2R1Y2VyID0gbmV3IFN0dWJPZXNUZXh0dXJlUHJvZHVjZXIoCi0gICAgICAg
IGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3Vy
ZmFjZVRleHR1cmUoKSwgV0lEVEgsIEhFSUdIVCk7Ci0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVI
ZWxwZXJUZXN0Lk1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPQotICAgICAgICBuZXcgU3Vy
ZmFjZVRleHR1cmVIZWxwZXJUZXN0Lk1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0KLSAgICAvLyBDcmVhdGUg
UkdCIGJ5dGUgYnVmZmVyIHBsYW5lIHdpdGggcmFuZG9tIGNvbnRlbnQuCi0gICAgZmluYWwgQnl0
ZUJ1ZmZlciByZ2JQbGFuZSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoV0lEVEggKiBIRUlH
SFQgKiAzKTsKLSAgICBmaW5hbCBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShTRUVEKTsKLSAg
ICByYW5kb20ubmV4dEJ5dGVzKHJnYlBsYW5lLmFycmF5KCkpOwotCi0gICAgLy8gRHJhdyB0aGUg
ZnJhbWUgYW5kIGJsb2NrIHVudGlsIGFuIE9FUyB0ZXh0dXJlIGlzIGRlbGl2ZXJlZC4KLSAgICBv
ZXNQcm9kdWNlci5kcmF3KHJnYlBsYW5lKTsKLSAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUo
KTsKLQotICAgIC8vIFJlYWwgdGVzdCBzdGFydHMgaGVyZS4KLSAgICAvLyBEcmF3IHRoZSBPRVMg
dGV4dHVyZSBvbiB0aGUgcGl4ZWwgYnVmZmVyLgotICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsK
LSAgICBmaW5hbCBHbFJlY3REcmF3ZXIgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotICAg
IGRyYXdlci5kcmF3T2VzKGxpc3RlbmVyLm9lc1RleHR1cmVJZCwgbGlzdGVuZXIudHJhbnNmb3Jt
TWF0cml4LCBXSURUSCwgSEVJR0hULAotICAgICAgICAwIC8qIHZpZXdwb3J0WCAqLywgMCAvKiB2
aWV3cG9ydFkgKi8sIFdJRFRILCBIRUlHSFQpOwotCi0gICAgLy8gRG93bmxvYWQgdGhlIHBpeGVs
cyBpbiB0aGUgcGl4ZWwgYnVmZmVyIGFzIFJHQkEuIE5vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQg
UkdCLCBlLmcuIE5leHVzIDkuCi0gICAgZmluYWwgQnl0ZUJ1ZmZlciByZ2JhRGF0YSA9IEJ5dGVC
dWZmZXIuYWxsb2NhdGVEaXJlY3QoV0lEVEggKiBIRUlHSFQgKiA0KTsKLSAgICBHTEVTMjAuZ2xS
ZWFkUGl4ZWxzKDAsIDAsIFdJRFRILCBIRUlHSFQsIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAuR0xf
VU5TSUdORURfQllURSwgcmdiYURhdGEpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJvcigi
Z2xSZWFkUGl4ZWxzIik7Ci0KLSAgICAvLyBBc3NlcnQgcmVuZGVyZWQgaW1hZ2UgaXMgcGl4ZWwg
cGVyZmVjdCB0byBzb3VyY2UgUkdCLgotICAgIGFzc2VydEVxdWFscyhXSURUSCwgSEVJR0hULCBz
dHJpcEFscGhhQ2hhbm5lbChyZ2JhRGF0YSksIHJnYlBsYW5lKTsKLQotICAgIGRyYXdlci5yZWxl
YXNlKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0g
ICAgb2VzUHJvZHVjZXIucmVsZWFzZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bv
c2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3Jj
L29yZy93ZWJydGMvTWVkaWFDb2RlY1ZpZGVvRW5jb2RlclRlc3QuamF2YQkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2Fu
ZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVjVmlkZW9FbmNvZGVyVGVzdC5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi1wYWNr
YWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLk1lZGlhQ29kZWNWaWRlb0VuY29k
ZXIuT3V0cHV0QnVmZmVySW5mbzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRB
cGk7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzExRXh0OwotaW1wb3J0IGFuZHJvaWQub3Bl
bmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQudGVz
dC5BY3Rpdml0eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5u
b3RhdGlvbi5TbWFsbFRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGph
dmEubmlvLkJ5dGVCdWZmZXI7Ci0KLUBUYXJnZXRBcGkoQnVpbGQuVkVSU0lPTl9DT0RFUy5JQ0Vf
Q1JFQU1fU0FORFdJQ0hfTVIxKQotcHVibGljIGZpbmFsIGNsYXNzIE1lZGlhQ29kZWNWaWRlb0Vu
Y29kZXJUZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0Q2FzZSB7Ci0gIGZpbmFsIHN0YXRpYyBTdHJp
bmcgVEFHID0gIk1lZGlhQ29kZWNWaWRlb0VuY29kZXJUZXN0IjsKLQotICBAU21hbGxUZXN0Ci0g
IHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0SW5pdGlhbGl6ZVVzaW5nQnl0ZUJ1ZmZlcigpIHsKLSAg
ICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1cHBvcnRlZCgpKSB7Ci0gICAg
ICBMb2cuaShUQUcsICJIYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFZQOCBlbmNvZGluZywgc2tp
cHBpbmcgdGVzdEluaXRSZWxlYXNlVXNpbmdCeXRlQnVmZmVyIik7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgZW5jb2RlciA9IG5ldyBNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyKCk7Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmluaXRFbmNvZGUoCi0gICAg
ICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4
LCA2NDAsIDQ4MCwgMzAwLCAzMCwgbnVsbCkpOwotICAgIGVuY29kZXIucmVsZWFzZSgpOwotICB9
Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdEluaXRpbGl6ZVVzaW5n
VGV4dHVyZXMoKSB7Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmlzVnA4SHdTdXBw
b3J0ZWRVc2luZ1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5pKFRBRywgImhhcmR3YXJlIGRvZXMg
bm90IHN1cHBvcnQgVlA4IGVuY29kaW5nLCBza2lwcGluZyB0ZXN0RW5jb2RlclVzaW5nVGV4dHVy
ZXMiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgRWdsQmFzZTE0IGVnbEJhc2UgPSBuZXcg
RWdsQmFzZTE0KG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBNZWRpYUNvZGVjVmlk
ZW9FbmNvZGVyIGVuY29kZXIgPSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpOwotICAgIGFz
c2VydFRydWUoZW5jb2Rlci5pbml0RW5jb2RlKE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlkZW9D
b2RlY1R5cGUuVklERU9fQ09ERUNfVlA4LCA2NDAsIDQ4MCwKLSAgICAgICAgMzAwLCAzMCwgZWds
QmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKSk7Ci0gICAgZW5jb2Rlci5yZWxlYXNlKCk7Ci0gICAg
ZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMg
dm9pZCB0ZXN0SW5pdGlhbGl6ZVVzaW5nQnl0ZUJ1ZmZlclJlSW5pdGlsaXplVXNpbmdUZXh0dXJl
cygpIHsKLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1cHBvcnRlZFVz
aW5nVGV4dHVyZXMoKSkgewotICAgICAgTG9nLmkoVEFHLCAiaGFyZHdhcmUgZG9lcyBub3Qgc3Vw
cG9ydCBWUDggZW5jb2RpbmcsIHNraXBwaW5nIHRlc3RFbmNvZGVyVXNpbmdUZXh0dXJlcyIpOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyIGVuY29kZXIg
PSBuZXcgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcigpOwotICAgIGFzc2VydFRydWUoZW5jb2Rlci5p
bml0RW5jb2RlKAotICAgICAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLlZpZGVvQ29kZWNUeXBl
LlZJREVPX0NPREVDX1ZQOCwgNjQwLCA0ODAsIDMwMCwgMzAsIG51bGwpKTsKLSAgICBlbmNvZGVy
LnJlbGVhc2UoKTsKLSAgICBFZ2xCYXNlMTQgZWdsQmFzZSA9IG5ldyBFZ2xCYXNlMTQobnVsbCwg
RWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgIGFzc2VydFRydWUoZW5jb2Rlci5pbml0RW5jb2Rl
KE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4LCA2
NDAsIDQ4MCwKLSAgICAgICAgMzAwLCAzMCwgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKSk7
Ci0gICAgZW5jb2Rlci5yZWxlYXNlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQot
ICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0RW5jb2RlclVzaW5nQnl0ZUJ1
ZmZlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKCFNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyLmlzVnA4SHdTdXBwb3J0ZWQoKSkgewotICAgICAgTG9nLmkoVEFHLCAiSGFy
ZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBWUDggZW5jb2RpbmcsIHNraXBwaW5nIHRlc3RFbmNvZGVy
VXNpbmdCeXRlQnVmZmVyIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZmluYWwgaW50
IHdpZHRoID0gNjQwOwotICAgIGZpbmFsIGludCBoZWlnaHQgPSA0ODA7Ci0gICAgZmluYWwgaW50
IG1pbl9zaXplID0gd2lkdGggKiBoZWlnaHQgKiAzIC8gMjsKLSAgICBmaW5hbCBsb25nIHByZXNl
bnRhdGlvblRpbWVzdGFtcFVzID0gMjsKLQotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgZW5j
b2RlciA9IG5ldyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKCk7Ci0KLSAgICBhc3NlcnRUcnVlKGVu
Y29kZXIuaW5pdEVuY29kZSgKLSAgICAgICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5WaWRlb0Nv
ZGVjVHlwZS5WSURFT19DT0RFQ19WUDgsIHdpZHRoLCBoZWlnaHQsIDMwMCwgMzAsIG51bGwpKTsK
LSAgICBCeXRlQnVmZmVyW10gaW5wdXRCdWZmZXJzID0gZW5jb2Rlci5nZXRJbnB1dEJ1ZmZlcnMo
KTsKLSAgICBhc3NlcnROb3ROdWxsKGlucHV0QnVmZmVycyk7Ci0gICAgYXNzZXJ0VHJ1ZShtaW5f
c2l6ZSA8PSBpbnB1dEJ1ZmZlcnNbMF0uY2FwYWNpdHkoKSk7Ci0KLSAgICBpbnQgYnVmZmVySW5k
ZXg7Ci0gICAgZG8gewotICAgICAgVGhyZWFkLnNsZWVwKDEwKTsKLSAgICAgIGJ1ZmZlckluZGV4
ID0gZW5jb2Rlci5kZXF1ZXVlSW5wdXRCdWZmZXIoKTsKLSAgICB9IHdoaWxlIChidWZmZXJJbmRl
eCA9PSAtMSk7IC8vIHwtMXwgaXMgcmV0dXJuZWQgd2hlbiB0aGVyZSBpcyBubyBidWZmZXIgYXZh
aWxhYmxlIHlldC4KLQotICAgIGFzc2VydFRydWUoYnVmZmVySW5kZXggPj0gMCk7Ci0gICAgYXNz
ZXJ0VHJ1ZShidWZmZXJJbmRleCA8IGlucHV0QnVmZmVycy5sZW5ndGgpOwotICAgIGFzc2VydFRy
dWUoZW5jb2Rlci5lbmNvZGVCdWZmZXIodHJ1ZSwgYnVmZmVySW5kZXgsIG1pbl9zaXplLCBwcmVz
ZW50YXRpb25UaW1lc3RhbXBVcykpOwotCi0gICAgT3V0cHV0QnVmZmVySW5mbyBpbmZvOwotICAg
IGRvIHsKLSAgICAgIGluZm8gPSBlbmNvZGVyLmRlcXVldWVPdXRwdXRCdWZmZXIoKTsKLSAgICAg
IFRocmVhZC5zbGVlcCgxMCk7Ci0gICAgfSB3aGlsZSAoaW5mbyA9PSBudWxsKTsKLSAgICBhc3Nl
cnRUcnVlKGluZm8uaW5kZXggPj0gMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHByZXNlbnRhdGlvblRp
bWVzdGFtcFVzLCBpbmZvLnByZXNlbnRhdGlvblRpbWVzdGFtcFVzKTsKLSAgICBhc3NlcnRUcnVl
KGluZm8uYnVmZmVyLmNhcGFjaXR5KCkgPiAwKTsKLSAgICBlbmNvZGVyLnJlbGVhc2VPdXRwdXRC
dWZmZXIoaW5mby5pbmRleCk7Ci0KLSAgICBlbmNvZGVyLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBT
bWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RFbmNvZGVyVXNpbmdUZXh0dXJlcygp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyLmlzVnA4SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5pKFRB
RywgIkhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQgVlA4IGVuY29kaW5nLCBza2lwcGluZyB0ZXN0
RW5jb2RlclVzaW5nVGV4dHVyZXMiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5h
bCBpbnQgd2lkdGggPSA2NDA7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IDQ4MDsKLSAgICBmaW5h
bCBsb25nIHByZXNlbnRhdGlvblRzID0gMjsKLQotICAgIGZpbmFsIEVnbEJhc2UxNCBlZ2xPZXNC
YXNlID0gbmV3IEVnbEJhc2UxNChudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhFTF9CVUZGRVIpOwot
ICAgIGVnbE9lc0Jhc2UuY3JlYXRlRHVtbXlQYnVmZmVyU3VyZmFjZSgpOwotICAgIGVnbE9lc0Jh
c2UubWFrZUN1cnJlbnQoKTsKLSAgICBpbnQgb2VzVGV4dHVyZUlkID0gR2xVdGlsLmdlbmVyYXRl
VGV4dHVyZShHTEVTMTFFeHQuR0xfVEVYVFVSRV9FWFRFUk5BTF9PRVMpOwotCi0gICAgLy8gVE9E
TyhwZXJraik6IFRoaXMgdGVzdCBpcyB3ZWVrIHNpbmNlIHdlIGRvbid0IGZpbGwgdGhlIHRleHR1
cmUgd2l0aCB2YWxpZCBkYXRhIHdpdGggY29ycmVjdAotICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQg
YW5kIHZlcmlmeSB0aGUgZW5jb2RlZCBkYXRhLiBGaWxsIHRoZSBPRVMgdGV4dHVyZSBhbmQgZmln
dXJlIG91dCBhIHdheSB0bwotICAgIC8vIHZlcmlmeSB0aGF0IHRoZSBvdXRwdXQgbWFrZSBzZW5z
ZS4KLQotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgZW5jb2RlciA9IG5ldyBNZWRpYUNvZGVj
VmlkZW9FbmNvZGVyKCk7Ci0KLSAgICBhc3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZShNZWRp
YUNvZGVjVmlkZW9FbmNvZGVyLlZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQOCwgd2lkdGgs
Ci0gICAgICAgIGhlaWdodCwgMzAwLCAzMCwgZWdsT2VzQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgp
KSk7Ci0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgZW5jb2Rlci5lbmNvZGVUZXh0dXJlKHRydWUs
IG9lc1RleHR1cmVJZCwgUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKSwgcHJlc2VudGF0
aW9uVHMpKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImVuY29kZVRleHR1cmUiKTsK
LQotICAgIC8vIEl0IHNob3VsZCBiZSBPayB0byBkZWxldGUgdGhlIHRleHR1cmUgYWZ0ZXIgY2Fs
bGluZyBlbmNvZGVUZXh0dXJlLgotICAgIEdMRVMyMC5nbERlbGV0ZVRleHR1cmVzKDEsIG5ldyBp
bnRbXSB7b2VzVGV4dHVyZUlkfSwgMCk7Ci0KLSAgICBPdXRwdXRCdWZmZXJJbmZvIGluZm8gPSBl
bmNvZGVyLmRlcXVldWVPdXRwdXRCdWZmZXIoKTsKLSAgICB3aGlsZSAoaW5mbyA9PSBudWxsKSB7
Ci0gICAgICBpbmZvID0gZW5jb2Rlci5kZXF1ZXVlT3V0cHV0QnVmZmVyKCk7Ci0gICAgICBUaHJl
YWQuc2xlZXAoMjApOwotICAgIH0KLSAgICBhc3NlcnRUcnVlKGluZm8uaW5kZXggIT0gLTEpOwot
ICAgIGFzc2VydFRydWUoaW5mby5idWZmZXIuY2FwYWNpdHkoKSA+IDApOwotICAgIGFzc2VydEVx
dWFscyhwcmVzZW50YXRpb25UcywgaW5mby5wcmVzZW50YXRpb25UaW1lc3RhbXBVcyk7Ci0gICAg
ZW5jb2Rlci5yZWxlYXNlT3V0cHV0QnVmZmVyKGluZm8uaW5kZXgpOwotCi0gICAgZW5jb2Rlci5y
ZWxlYXNlKCk7Ci0gICAgZWdsT2VzQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3Jj
L29yZy93ZWJydGMvTmV0d29ya01vbml0b3JUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMv
b3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0
cy9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9uaXRvclRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDI3NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwot
Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5l
Y3Rpb25UeXBlOwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0b0Rl
dGVjdC5Db25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGU7Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJy
dGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LklOVkFMSURfTkVUX0lEOwotaW1wb3J0IHN0YXRp
YyBvcmcud2VicnRjLk5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5OZXR3b3JrSW5mb3JtYXRpb247
Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk5ldHdv
cmtTdGF0ZTsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5TdXBwcmVzc0xpbnQ7Ci1pbXBv
cnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVu
dDsKLWltcG9ydCBhbmRyb2lkLm5ldC5Db25uZWN0aXZpdHlNYW5hZ2VyOwotaW1wb3J0IGFuZHJv
aWQubmV0Lk5ldHdvcms7Ci1pbXBvcnQgYW5kcm9pZC5uZXQud2lmaS5XaWZpTWFuYWdlcjsKLWlt
cG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9y
dCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZpdHlUZXN0Q2Fz
ZTsKLWltcG9ydCBhbmRyb2lkLnRlc3QuVWlUaHJlYWRUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVz
dC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVz
dC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLS8qKgotICogVGVzdHMgZm9y
IG9yZy53ZWJydGMuTmV0d29ya01vbml0b3IuCi0gKi8KLUBTdXBwcmVzc0xpbnQoIk5ld0FwaSIp
Ci1wdWJsaWMgY2xhc3MgTmV0d29ya01vbml0b3JUZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0Q2Fz
ZSB7Ci0gIC8qKgotICAgKiBMaXN0ZW5zIGZvciBhbGVydHMgZmlyZWQgYnkgdGhlIE5ldHdvcmtN
b25pdG9yIHdoZW4gbmV0d29yayBzdGF0dXMgY2hhbmdlcy4KLSAgICovCi0gIHByaXZhdGUgc3Rh
dGljIGNsYXNzIE5ldHdvcmtNb25pdG9yVGVzdE9ic2VydmVyIGltcGxlbWVudHMgTmV0d29ya01v
bml0b3IuTmV0d29ya09ic2VydmVyIHsKLSAgICBwcml2YXRlIGJvb2xlYW4gcmVjZWl2ZWROb3Rp
ZmljYXRpb24gPSBmYWxzZTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ29u
bmVjdGlvblR5cGVDaGFuZ2VkKENvbm5lY3Rpb25UeXBlIGNvbm5lY3Rpb25UeXBlKSB7Ci0gICAg
ICByZWNlaXZlZE5vdGlmaWNhdGlvbiA9IHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xl
YW4gaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSB7Ci0gICAgICByZXR1cm4gcmVjZWl2ZWROb3Rp
ZmljYXRpb247Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzZXRIYXNSZWNlaXZlZE5vdGlm
aWNhdGlvbigpIHsKLSAgICAgIHJlY2VpdmVkTm90aWZpY2F0aW9uID0gZmFsc2U7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqCi0gICAqIE1vY2tzIG91dCBjYWxscyB0byB0aGUgQ29ubmVjdGl2aXR5TWFu
YWdlci4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tDb25uZWN0aXZpdHlNYW5h
Z2VyRGVsZWdhdGUgZXh0ZW5kcyBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgewotICAgIHBy
aXZhdGUgYm9vbGVhbiBhY3RpdmVOZXR3b3JrRXhpc3RzOwotICAgIHByaXZhdGUgaW50IG5ldHdv
cmtUeXBlOwotICAgIHByaXZhdGUgaW50IG5ldHdvcmtTdWJ0eXBlOwotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIE5ldHdvcmtTdGF0ZSBnZXROZXR3b3JrU3RhdGUoKSB7Ci0gICAgICByZXR1
cm4gbmV3IE5ldHdvcmtTdGF0ZShhY3RpdmVOZXR3b3JrRXhpc3RzLCBuZXR3b3JrVHlwZSwgbmV0
d29ya1N1YnR5cGUpOwotICAgIH0KLQotICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyB0byBh
dm9pZCBOdWxsUG9pbnRlckV4Y2VwdGlvbnMgaW4gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnM6Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgbG9uZyBnZXREZWZhdWx0TmV0SWQoKSB7Ci0gICAg
ICByZXR1cm4gSU5WQUxJRF9ORVRfSUQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIE5ldHdvcmtbXSBnZXRBbGxOZXR3b3JrcygpIHsKLSAgICAgIHJldHVybiBuZXcgTmV0d29y
a1swXTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTmV0d29ya1N0YXRlIGdl
dE5ldHdvcmtTdGF0ZShOZXR3b3JrIG5ldHdvcmspIHsKLSAgICAgIHJldHVybiBuZXcgTmV0d29y
a1N0YXRlKGZhbHNlLCAtMSwgLTEpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEFjdGl2
ZU5ldHdvcmtFeGlzdHMoYm9vbGVhbiBuZXR3b3JrRXhpc3RzKSB7Ci0gICAgICBhY3RpdmVOZXR3
b3JrRXhpc3RzID0gbmV0d29ya0V4aXN0czsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRO
ZXR3b3JrVHlwZShpbnQgbmV0d29ya1R5cGUpIHsKLSAgICAgIHRoaXMubmV0d29ya1R5cGUgPSBu
ZXR3b3JrVHlwZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROZXR3b3JrU3VidHlwZShp
bnQgbmV0d29ya1N1YnR5cGUpIHsKLSAgICAgIHRoaXMubmV0d29ya1N1YnR5cGUgPSBuZXR3b3Jr
U3VidHlwZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTW9ja3Mgb3V0IGNhbGxzIHRvIHRo
ZSBXaWZpTWFuYWdlci4KLSAgICovCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tXaWZpTWFu
YWdlckRlbGVnYXRlCi0gICAgICBleHRlbmRzIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5XaWZp
TWFuYWdlckRlbGVnYXRlIHsKLSAgICBwcml2YXRlIFN0cmluZyB3aWZpU1NJRDsKLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0V2lmaVNTSUQoKSB7Ci0gICAgICByZXR1cm4g
d2lmaVNTSUQ7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0V2lmaVNTSUQoU3RyaW5nIHdp
ZmlTU0lEKSB7Ci0gICAgICB0aGlzLndpZmlTU0lEID0gd2lmaVNTSUQ7Ci0gICAgfQotICB9Ci0K
LSAgLy8gQSBkdW1teSBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuT2JzZXJ2ZXIuCi0gIHByaXZh
dGUgc3RhdGljIGNsYXNzIFRlc3ROZXR3b3JrTW9uaXRvckF1dG9EZXRlY3RPYnNlcnZlcgotICAg
ICAgaW1wbGVtZW50cyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuT2JzZXJ2ZXIgewotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ29ubmVjdGlvblR5cGVDaGFuZ2VkKENvbm5lY3Rp
b25UeXBlIG5ld0Nvbm5lY3Rpb25UeXBlKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25OZXR3b3JrQ29ubmVjdChOZXR3b3JrSW5mb3JtYXRpb24gbmV0d29ya0luZm8pIHt9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtEaXNjb25uZWN0KGxv
bmcgbmV0d29ya0hhbmRsZSkge30KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIE9iamVj
dCBsb2NrID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIHN0YXRpYyBIYW5kbGVyIHVpVGhyZWFk
SGFuZGxlciA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgcmVj
ZWl2ZXI7Ci0gIHByaXZhdGUgTW9ja0Nvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBjb25uZWN0
aXZpdHlEZWxlZ2F0ZTsKLSAgcHJpdmF0ZSBNb2NrV2lmaU1hbmFnZXJEZWxlZ2F0ZSB3aWZpRGVs
ZWdhdGU7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgSGFuZGxlciBnZXRVaVRocmVhZEhhbmRsZXIoKSB7
Ci0gICAgc3luY2hyb25pemVkIChsb2NrKSB7Ci0gICAgICBpZiAodWlUaHJlYWRIYW5kbGVyID09
IG51bGwpIHsKLSAgICAgICAgdWlUaHJlYWRIYW5kbGVyID0gbmV3IEhhbmRsZXIoTG9vcGVyLmdl
dE1haW5Mb29wZXIoKSk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdWlUaHJlYWRIYW5kbGVyOwot
ICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldHdv
cmsgbW9uaXRvciBhbmQgZGVsZWdhdGVzIGZvciB0ZXN0aW5nLgotICAgKi8KLSAgcHJpdmF0ZSB2
b2lkIGNyZWF0ZVRlc3RNb25pdG9yKCkgewotICAgIENvbnRleHQgY29udGV4dCA9IGdldEluc3Ry
dW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKTsKLSAgICBOZXR3b3JrTW9uaXRvci5yZXNl
dEluc3RhbmNlRm9yVGVzdHMoY29udGV4dCk7Ci0gICAgTmV0d29ya01vbml0b3Iuc2V0QXV0b0Rl
dGVjdENvbm5lY3Rpdml0eVN0YXRlKHRydWUpOwotICAgIHJlY2VpdmVyID0gTmV0d29ya01vbml0
b3IuZ2V0QXV0b0RldGVjdG9yRm9yVGVzdCgpOwotICAgIGFzc2VydE5vdE51bGwocmVjZWl2ZXIp
OwotCi0gICAgY29ubmVjdGl2aXR5RGVsZWdhdGUgPSBuZXcgTW9ja0Nvbm5lY3Rpdml0eU1hbmFn
ZXJEZWxlZ2F0ZSgpOwotICAgIGNvbm5lY3Rpdml0eURlbGVnYXRlLnNldEFjdGl2ZU5ldHdvcmtF
eGlzdHModHJ1ZSk7Ci0gICAgcmVjZWl2ZXIuc2V0Q29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRl
Rm9yVGVzdHMoY29ubmVjdGl2aXR5RGVsZWdhdGUpOwotCi0gICAgd2lmaURlbGVnYXRlID0gbmV3
IE1vY2tXaWZpTWFuYWdlckRlbGVnYXRlKCk7Ci0gICAgcmVjZWl2ZXIuc2V0V2lmaU1hbmFnZXJE
ZWxlZ2F0ZUZvclRlc3RzKHdpZmlEZWxlZ2F0ZSk7Ci0gICAgd2lmaURlbGVnYXRlLnNldFdpZmlT
U0lEKCJmb28iKTsKLSAgfQotCi0gIHByaXZhdGUgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNv
bm5lY3Rpb25UeXBlIGdldEN1cnJlbnRDb25uZWN0aW9uVHlwZSgpIHsKLSAgICBmaW5hbCBOZXR3
b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya1N0YXRlIG5ldHdvcmtTdGF0ZSA9IHJlY2VpdmVy
LmdldEN1cnJlbnROZXR3b3JrU3RhdGUoKTsKLSAgICByZXR1cm4gcmVjZWl2ZXIuZ2V0Q29ubmVj
dGlvblR5cGUobmV0d29ya1N0YXRlKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQg
dm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIHN1cGVyLnNldFVwKCk7Ci0gICAg
Z2V0VWlUaHJlYWRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgIGNyZWF0ZVRlc3RNb25pdG9yKCk7Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhhdCB0aGUgcmVjZWl2ZXIgcmVnaXN0ZXJz
IGZvciBjb25uZWN0aXZpdHkgaW50ZW50cyBkdXJpbmcgY29uc3RydWN0aW9uLgotICAgKi8KLSAg
QFVpVGhyZWFkVGVzdAotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3ROZXR3b3JrTW9u
aXRvclJlZ2lzdGVyc0luQ29uc3RydWN0b3IoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIENvbnRleHQgY29udGV4dCA9IGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENv
bnRleHQoKTsKLQotICAgIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5PYnNlcnZlciBvYnNlcnZl
ciA9IG5ldyBUZXN0TmV0d29ya01vbml0b3JBdXRvRGV0ZWN0T2JzZXJ2ZXIoKTsKLQotICAgIE5l
dHdvcmtNb25pdG9yQXV0b0RldGVjdCByZWNlaXZlciA9IG5ldyBOZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3Qob2JzZXJ2ZXIsIGNvbnRleHQpOwotCi0gICAgYXNzZXJ0VHJ1ZShyZWNlaXZlci5pc1Jl
Y2VpdmVyUmVnaXN0ZXJlZEZvclRlc3RpbmcoKSk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMg
dGhhdCB3aGVuIHRoZXJlIGlzIGFuIGludGVudCBpbmRpY2F0aW5nIGEgY2hhbmdlIGluIG5ldHdv
cmsgY29ubmVjdGl2aXR5LCBpdCBzZW5kcyBhCi0gICAqIG5vdGlmaWNhdGlvbiB0byBKYXZhIG9i
c2VydmVycy4KLSAgICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQE1lZGl1bVRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdE5ldHdvcmtNb25pdG9ySmF2YU9ic2VydmVycygpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSB0aGUgTmV0d29ya01vbml0b3Igd2l0aCBh
IGNvbm5lY3Rpb24uCi0gICAgSW50ZW50IGNvbm5lY3Rpdml0eUludGVudCA9IG5ldyBJbnRlbnQo
Q29ubmVjdGl2aXR5TWFuYWdlci5DT05ORUNUSVZJVFlfQUNUSU9OKTsKLSAgICByZWNlaXZlci5v
blJlY2VpdmUoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0
aXZpdHlJbnRlbnQpOwotCi0gICAgLy8gV2Ugc2hvdWxkbid0IGJlIHJlLW5vdGlmaWVkIGlmIHRo
ZSBjb25uZWN0aW9uIGhhc24ndCBhY3R1YWxseSBjaGFuZ2VkLgotICAgIE5ldHdvcmtNb25pdG9y
VGVzdE9ic2VydmVyIG9ic2VydmVyID0gbmV3IE5ldHdvcmtNb25pdG9yVGVzdE9ic2VydmVyKCk7
Ci0gICAgTmV0d29ya01vbml0b3IuYWRkTmV0d29ya09ic2VydmVyKG9ic2VydmVyKTsKLSAgICBy
ZWNlaXZlci5vblJlY2VpdmUoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgp
LCBjb25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFzc2VydEZhbHNlKG9ic2VydmVyLmhhc1JlY2Vp
dmVkTm90aWZpY2F0aW9uKCkpOwotCi0gICAgLy8gV2Ugc2hvdWxkbid0IGJlIG5vdGlmaWVkIGlm
IHdlJ3JlIGNvbm5lY3RlZCB0byBub24tV2lmaSBhbmQgdGhlIFdpZmkgU1NJRCBjaGFuZ2VzLgot
ICAgIHdpZmlEZWxlZ2F0ZS5zZXRXaWZpU1NJRCgiYmFyIik7Ci0gICAgcmVjZWl2ZXIub25SZWNl
aXZlKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5
SW50ZW50KTsKLSAgICBhc3NlcnRGYWxzZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNhdGlv
bigpKTsKLQotICAgIC8vIFdlIHNob3VsZCBiZSBub3RpZmllZCB3aGVuIHdlIGNoYW5nZSB0byBX
aWZpLgotICAgIGNvbm5lY3Rpdml0eURlbGVnYXRlLnNldE5ldHdvcmtUeXBlKENvbm5lY3Rpdml0
eU1hbmFnZXIuVFlQRV9XSUZJKTsKLSAgICByZWNlaXZlci5vblJlY2VpdmUoZ2V0SW5zdHJ1bWVu
dGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFz
c2VydFRydWUob2JzZXJ2ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0gICAgb2JzZXJ2
ZXIucmVzZXRIYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigpOwotCi0gICAgLy8gV2Ugc2hvdWxkIGJl
IG5vdGlmaWVkIHdoZW4gdGhlIFdpZmkgU1NJRCBjaGFuZ2VzLgotICAgIHdpZmlEZWxlZ2F0ZS5z
ZXRXaWZpU1NJRCgiZm9vIik7Ci0gICAgcmVjZWl2ZXIub25SZWNlaXZlKGdldEluc3RydW1lbnRh
dGlvbigpLmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBhc3Nl
cnRUcnVlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkpOwotICAgIG9ic2VydmVy
LnJlc2V0SGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKTsKLQotICAgIC8vIFdlIHNob3VsZG4ndCBi
ZSByZS1ub3RpZmllZCBpZiB0aGUgV2lmaSBTU0lEIGhhc24ndCBhY3R1YWxseSBjaGFuZ2VkLgot
ICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250
ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0RmFsc2Uob2JzZXJ2ZXIuaGFz
UmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0KLSAgICAvLyBNaW1pYyB0aGF0IGNvbm5lY3Rpdml0
eSBoYXMgYmVlbiBsb3N0IGFuZCBlbnN1cmUgdGhhdCB0aGUgb2JzZXJ2ZXIgZ2V0cyB0aGUgbm90
aWZpY2F0aW9uLgotICAgIGNvbm5lY3Rpdml0eURlbGVnYXRlLnNldEFjdGl2ZU5ldHdvcmtFeGlz
dHMoZmFsc2UpOwotICAgIEludGVudCBub0Nvbm5lY3Rpdml0eUludGVudCA9IG5ldyBJbnRlbnQo
Q29ubmVjdGl2aXR5TWFuYWdlci5DT05ORUNUSVZJVFlfQUNUSU9OKTsKLSAgICByZWNlaXZlci5v
blJlY2VpdmUoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBub0Nvbm5l
Y3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0VHJ1ZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlm
aWNhdGlvbigpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB0aGF0IENvbm5lY3Rpdml0eU1h
bmFnZXJEZWxlZ2F0ZSBkb2Vzbid0IGNyYXNoLiBUaGlzIHRlc3QgY2Fubm90IHJlbHkgb24gaGF2
aW5nIGFueQotICAgKiBhY3RpdmUgbmV0d29yayBjb25uZWN0aW9ucyBzbyBpdCBjYW5ub3QgdXNl
ZnVsbHkgY2hlY2sgcmVzdWx0cywgYnV0IGl0IGNhbiBhdCBsZWFzdCBjaGVjawotICAgKiB0aGF0
IHRoZSBmdW5jdGlvbnMgZG9uJ3QgY3Jhc2guCi0gICAqLwotICBAVWlUaHJlYWRUZXN0Ci0gIEBT
bWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZURv
ZXNOb3RDcmFzaCgpIHsKLSAgICBDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGUgZGVsZWdhdGUg
PQotICAgICAgICBuZXcgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlKGdldEluc3RydW1lbnRh
dGlvbigpLmdldFRhcmdldENvbnRleHQoKSk7Ci0gICAgZGVsZWdhdGUuZ2V0TmV0d29ya1N0YXRl
KCk7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVT
LkxPTExJUE9QKSB7Ci0gICAgICBOZXR3b3JrW10gbmV0d29ya3MgPSBkZWxlZ2F0ZS5nZXRBbGxO
ZXR3b3JrcygpOwotICAgICAgaWYgKG5ldHdvcmtzLmxlbmd0aCA+PSAxKSB7Ci0gICAgICAgIGRl
bGVnYXRlLmdldE5ldHdvcmtTdGF0ZShuZXR3b3Jrc1swXSk7Ci0gICAgICAgIGRlbGVnYXRlLmhh
c0ludGVybmV0Q2FwYWJpbGl0eShuZXR3b3Jrc1swXSk7Ci0gICAgICB9Ci0gICAgICBkZWxlZ2F0
ZS5nZXREZWZhdWx0TmV0SWQoKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdHMgdGhh
dCBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QgcXVlcnlhYmxlIEFQSXMgZG9uJ3QgY3Jhc2guIFRo
aXMgdGVzdCBjYW5ub3QgcmVseQotICAgKiBvbiBoYXZpbmcgYW55IGFjdGl2ZSBuZXR3b3JrIGNv
bm5lY3Rpb25zIHNvIGl0IGNhbm5vdCB1c2VmdWxseSBjaGVjayByZXN1bHRzLCBidXQgaXQgY2Fu
IGF0Ci0gICAqIGxlYXN0IGNoZWNrIHRoYXQgdGhlIGZ1bmN0aW9ucyBkb24ndCBjcmFzaC4KLSAg
ICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UXVl
cnlhYmxlQVBJc0RvTm90Q3Jhc2goKSB7Ci0gICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0Lk9i
c2VydmVyIG9ic2VydmVyID0gbmV3IFRlc3ROZXR3b3JrTW9uaXRvckF1dG9EZXRlY3RPYnNlcnZl
cigpOwotICAgIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCBuY24gPQotICAgICAgICBuZXcgTmV0
d29ya01vbml0b3JBdXRvRGV0ZWN0KG9ic2VydmVyLCBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRU
YXJnZXRDb250ZXh0KCkpOwotICAgIG5jbi5nZXREZWZhdWx0TmV0SWQoKTsKLSAgfQotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0
ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9QZWVyQ29ubmVjdGlvblRlc3QuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRl
c3RzL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5k
cm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1BlZXJDb25uZWN0aW9uVGVzdC5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMTAyNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLk1ldHJpY3MuSGlzdG9ncmFtSW5mbzsKLWlt
cG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uLkljZUNvbm5lY3Rpb25TdGF0ZTsKLWltcG9y
dCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uLkljZUdhdGhlcmluZ1N0YXRlOwotaW1wb3J0IG9y
Zy53ZWJydGMuUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGU7Ci0KLWltcG9ydCBhbmRyb2lk
LnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVy
LmFubm90YXRpb24uTWVkaXVtVGVzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBq
YXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7Ci1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsK
LWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5
czsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuSWRlbnRpdHlI
YXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5M
aXN0OwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlRyZWVTZXQ7Ci1p
bXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51
dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8qKiBFbmQtdG8tZW5kIHRlc3RzIGZvciBQZWVy
Q29ubmVjdGlvbi5qYXZhLiAqLwotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uVGVzdCBleHRl
bmRzIEFjdGl2aXR5VGVzdENhc2UgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVElNRU9V
VF9TRUNPTkRTID0gMjA7Ci0gIHByaXZhdGUgVHJlZVNldDxTdHJpbmc+IHRocmVhZHNCZWZvcmVU
ZXN0ID0gbnVsbDsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0g
ICAgYXNzZXJ0VHJ1ZShQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUFuZHJvaWRHbG9i
YWxzKAotICAgICAgICBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRDb250ZXh0KCksIHRydWUsIHRy
dWUsIHRydWUpKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE9ic2VydmVyRXhwZWN0
YXRpb25zIGltcGxlbWVudHMgUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW9SZW5kZXJlci5D
YWxsYmFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRGF0YUNoYW5uZWwuT2JzZXJ2ZXIsIFN0YXRzT2JzZXJ2ZXIgewotICAgIHByaXZh
dGUgZmluYWwgU3RyaW5nIG5hbWU7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRJY2VDYW5kaWRh
dGVzID0gMDsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZEVycm9ycyA9IDA7Ci0gICAgcHJpdmF0
ZSBpbnQgZXhwZWN0ZWRSZW5lZ290aWF0aW9ucyA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0
ZWRXaWR0aCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRIZWlnaHQgPSAwOwotICAgIHBy
aXZhdGUgaW50IGV4cGVjdGVkRnJhbWVzRGVsaXZlcmVkID0gMDsKLSAgICBwcml2YXRlIExpbmtl
ZExpc3Q8U2lnbmFsaW5nU3RhdGU+IGV4cGVjdGVkU2lnbmFsaW5nQ2hhbmdlcyA9IG5ldyBMaW5r
ZWRMaXN0PFNpZ25hbGluZ1N0YXRlPigpOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxJY2VDb25u
ZWN0aW9uU3RhdGU+IGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMgPQotICAgICAgICBuZXcg
TGlua2VkTGlzdDxJY2VDb25uZWN0aW9uU3RhdGU+KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0
PEljZUdhdGhlcmluZ1N0YXRlPiBleHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXMgPQotICAgICAg
ICBuZXcgTGlua2VkTGlzdDxJY2VHYXRoZXJpbmdTdGF0ZT4oKTsKLSAgICBwcml2YXRlIExpbmtl
ZExpc3Q8U3RyaW5nPiBleHBlY3RlZEFkZFN0cmVhbUxhYmVscyA9IG5ldyBMaW5rZWRMaXN0PFN0
cmluZz4oKTsKLSAgICBwcml2YXRlIExpbmtlZExpc3Q8U3RyaW5nPiBleHBlY3RlZFJlbW92ZVN0
cmVhbUxhYmVscyA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4oKTsKLSAgICBwcml2YXRlIGZpbmFs
IExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPiBnb3RJY2VDYW5kaWRhdGVzID0gbmV3IExpbmtlZExp
c3Q8SWNlQ2FuZGlkYXRlPigpOwotICAgIHByaXZhdGUgTWFwPE1lZGlhU3RyZWFtLCBXZWFrUmVm
ZXJlbmNlPFZpZGVvUmVuZGVyZXI+PiByZW5kZXJlcnMgPQotICAgICAgICBuZXcgSWRlbnRpdHlI
YXNoTWFwPE1lZGlhU3RyZWFtLCBXZWFrUmVmZXJlbmNlPFZpZGVvUmVuZGVyZXI+PigpOwotICAg
IHByaXZhdGUgRGF0YUNoYW5uZWwgZGF0YUNoYW5uZWw7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0
PERhdGFDaGFubmVsLkJ1ZmZlcj4gZXhwZWN0ZWRCdWZmZXJzID0gbmV3IExpbmtlZExpc3Q8RGF0
YUNoYW5uZWwuQnVmZmVyPigpOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxEYXRhQ2hhbm5lbC5T
dGF0ZT4gZXhwZWN0ZWRTdGF0ZUNoYW5nZXMgPQotICAgICAgICBuZXcgTGlua2VkTGlzdDxEYXRh
Q2hhbm5lbC5TdGF0ZT4oKTsKLSAgICBwcml2YXRlIExpbmtlZExpc3Q8U3RyaW5nPiBleHBlY3Rl
ZFJlbW90ZURhdGFDaGFubmVsTGFiZWxzID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOwotICAg
IHByaXZhdGUgaW50IGV4cGVjdGVkU3RhdHNDYWxsYmFja3MgPSAwOwotICAgIHByaXZhdGUgTGlu
a2VkTGlzdDxTdGF0c1JlcG9ydFtdPiBnb3RTdGF0c1JlcG9ydHMgPSBuZXcgTGlua2VkTGlzdDxT
dGF0c1JlcG9ydFtdPigpOwotICAgIHByaXZhdGUgZmluYWwgSGFzaFNldDxNZWRpYVN0cmVhbT4g
Z290UmVtb3RlU3RyZWFtcyA9IG5ldyBIYXNoU2V0PE1lZGlhU3RyZWFtPigpOwotCi0gICAgcHVi
bGljIE9ic2VydmVyRXhwZWN0YXRpb25zKFN0cmluZyBuYW1lKSB7Ci0gICAgICB0aGlzLm5hbWUg
PSBuYW1lOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREYXRhQ2hh
bm5lbChEYXRhQ2hhbm5lbCBkYXRhQ2hhbm5lbCkgewotICAgICAgYXNzZXJ0TnVsbCh0aGlzLmRh
dGFDaGFubmVsKTsKLSAgICAgIHRoaXMuZGF0YUNoYW5uZWwgPSBkYXRhQ2hhbm5lbDsKLSAgICAg
IHRoaXMuZGF0YUNoYW5uZWwucmVnaXN0ZXJPYnNlcnZlcih0aGlzKTsKLSAgICAgIGFzc2VydE5v
dE51bGwodGhpcy5kYXRhQ2hhbm5lbCk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXpl
ZCB2b2lkIGV4cGVjdEljZUNhbmRpZGF0ZXMoaW50IGNvdW50KSB7Ci0gICAgICBleHBlY3RlZElj
ZUNhbmRpZGF0ZXMgKz0gY291bnQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHN5bmNocm9uaXplZCB2b2lkIG9uSWNlQ2FuZGlkYXRlKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUp
IHsKLSAgICAgIC0tZXhwZWN0ZWRJY2VDYW5kaWRhdGVzOwotCi0gICAgICAvLyBXZSBkb24ndCBh
c3NlcnQgZXhwZWN0ZWRJY2VDYW5kaWRhdGVzID49IDAgYmVjYXVzZSBpdCdzIGhhcmQgdG8ga25v
dwotICAgICAgLy8gaG93IG1hbnkgdG8gZXhwZWN0LCBpbiBnZW5lcmFsLiAgV2Ugb25seSB1c2Ug
ZXhwZWN0SWNlQ2FuZGlkYXRlcyB0bwotICAgICAgLy8gYXNzZXJ0IGEgbWluaW1hbCBjb3VudC4K
LSAgICAgIHN5bmNocm9uaXplZCAoZ290SWNlQ2FuZGlkYXRlcykgewotICAgICAgICBnb3RJY2VD
YW5kaWRhdGVzLmFkZChjYW5kaWRhdGUpOwotICAgICAgICBnb3RJY2VDYW5kaWRhdGVzLm5vdGlm
eUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykge30KLQot
ICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRFeHBlY3RlZFJlc29sdXRpb24oaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KSB7Ci0gICAgICBleHBlY3RlZFdpZHRoID0gd2lkdGg7Ci0gICAgICBl
eHBlY3RlZEhlaWdodCA9IGhlaWdodDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVk
IHZvaWQgZXhwZWN0RnJhbWVzRGVsaXZlcmVkKGludCBjb3VudCkgewotICAgICAgZXhwZWN0ZWRG
cmFtZXNEZWxpdmVyZWQgKz0gY291bnQ7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHN5bmNocm9uaXplZCB2b2lkIHJlbmRlckZyYW1lKFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1l
IGZyYW1lKSB7Ci0gICAgICBhc3NlcnRUcnVlKGV4cGVjdGVkV2lkdGggPiAwKTsKLSAgICAgIGFz
c2VydFRydWUoZXhwZWN0ZWRIZWlnaHQgPiAwKTsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3Rl
ZFdpZHRoLCBmcmFtZS5yb3RhdGVkV2lkdGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0
ZWRIZWlnaHQsIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7Ci0gICAgICAtLWV4cGVjdGVkRnJhbWVz
RGVsaXZlcmVkOwotICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwot
ICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RTaWduYWxpbmdDaGFu
Z2UoU2lnbmFsaW5nU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIGV4cGVjdGVkU2lnbmFsaW5nQ2hh
bmdlcy5hZGQobmV3U3RhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCBvblNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZSBuZXdTdGF0
ZSkgewotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU2lnbmFsaW5nQ2hhbmdlcy5yZW1vdmVG
aXJzdCgpLCBuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lk
IGV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7
Ci0gICAgICBleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFuZ2VzLmFkZChuZXdTdGF0ZSk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uSWNlQ29u
bmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIC8vIFRP
RE8oYmVtYXNjKTogcmVtb3ZlIG9uY2UgZGVsaXZlcnkgb2YgSUNFQ29tcGxldGVkIGlzIHJlbGlh
YmxlCi0gICAgICAvLyAoaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC93ZWJydGMvaXNzdWVzL2Rl
dGFpbD9pZD0zMDIxKS4KLSAgICAgIGlmIChuZXdTdGF0ZS5lcXVhbHMoSWNlQ29ubmVjdGlvblN0
YXRlLkNPTVBMRVRFRCkpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBpZiAo
ZXhwZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3lzdGVt
Lm91dC5wcmludGxuKG5hbWUgKyAiR290IGFuIHVuZXhwZWN0ZWQgaWNlIGNvbm5lY3Rpb24gY2hh
bmdlICIgKyBuZXdTdGF0ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgYXNz
ZXJ0RXF1YWxzKGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMucmVtb3ZlRmlyc3QoKSwgbmV3
U3RhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQg
dm9pZCBvbkljZUNvbm5lY3Rpb25SZWNlaXZpbmdDaGFuZ2UoYm9vbGVhbiByZWNlaXZpbmcpIHsK
LSAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihuYW1lICsgIkdvdCBhbiBpY2UgY29ubmVjdGlvbiBy
ZWNlaXZpbmcgY2hhbmdlICIgKyByZWNlaXZpbmcpOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5j
aHJvbml6ZWQgdm9pZCBleHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUg
bmV3U3RhdGUpIHsKLSAgICAgIGV4cGVjdGVkSWNlR2F0aGVyaW5nQ2hhbmdlcy5hZGQobmV3U3Rh
dGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9p
ZCBvbkljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZSBuZXdTdGF0ZSkgewotICAg
ICAgLy8gSXQncyBmaW5lIHRvIGdldCBhIHZhcmlhYmxlIG51bWJlciBvZiBHQVRIRVJJTkcgbWVz
c2FnZXMgYmVmb3JlCi0gICAgICAvLyBDT01QTEVURSBmaXJlcyAoZGVwZW5kaW5nIG9uIGhvdyBs
b25nIHRoZSB0ZXN0IHJ1bnMpIHNvIHdlIGRvbid0IGFzc2VydAotICAgICAgLy8gYW55IHBhcnRp
Y3VsYXIgY291bnQuCi0gICAgICBpZiAobmV3U3RhdGUgPT0gSWNlR2F0aGVyaW5nU3RhdGUuR0FU
SEVSSU5HKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIGFzc2VydEVxdWFscyhl
eHBlY3RlZEljZUdhdGhlcmluZ0NoYW5nZXMucmVtb3ZlRmlyc3QoKSwgbmV3U3RhdGUpOwotICAg
IH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RBZGRTdHJlYW0oU3RyaW5n
IGxhYmVsKSB7Ci0gICAgICBleHBlY3RlZEFkZFN0cmVhbUxhYmVscy5hZGQobGFiZWwpOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkFkZFN0
cmVhbShNZWRpYVN0cmVhbSBzdHJlYW0pIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEFk
ZFN0cmVhbUxhYmVscy5yZW1vdmVGaXJzdCgpLCBzdHJlYW0ubGFiZWwoKSk7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoMSwgc3RyZWFtLnZpZGVvVHJhY2tzLnNpemUoKSk7Ci0gICAgICBhc3NlcnRFcXVh
bHMoMSwgc3RyZWFtLmF1ZGlvVHJhY2tzLnNpemUoKSk7Ci0gICAgICBhc3NlcnRUcnVlKHN0cmVh
bS52aWRlb1RyYWNrcy5nZXQoMCkuaWQoKS5lbmRzV2l0aCgiVmlkZW9UcmFjayIpKTsKLSAgICAg
IGFzc2VydFRydWUoc3RyZWFtLmF1ZGlvVHJhY2tzLmdldCgwKS5pZCgpLmVuZHNXaXRoKCJBdWRp
b1RyYWNrIikpOwotICAgICAgYXNzZXJ0RXF1YWxzKCJ2aWRlbyIsIHN0cmVhbS52aWRlb1RyYWNr
cy5nZXQoMCkua2luZCgpKTsKLSAgICAgIGFzc2VydEVxdWFscygiYXVkaW8iLCBzdHJlYW0uYXVk
aW9UcmFja3MuZ2V0KDApLmtpbmQoKSk7Ci0gICAgICBWaWRlb1JlbmRlcmVyIHJlbmRlcmVyID0g
Y3JlYXRlVmlkZW9SZW5kZXJlcih0aGlzKTsKLSAgICAgIHN0cmVhbS52aWRlb1RyYWNrcy5nZXQo
MCkuYWRkUmVuZGVyZXIocmVuZGVyZXIpOwotICAgICAgYXNzZXJ0TnVsbChyZW5kZXJlcnMucHV0
KHN0cmVhbSwgbmV3IFdlYWtSZWZlcmVuY2U8VmlkZW9SZW5kZXJlcj4ocmVuZGVyZXIpKSk7Ci0g
ICAgICBnb3RSZW1vdGVTdHJlYW1zLmFkZChzdHJlYW0pOwotICAgIH0KLQotICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCBleHBlY3RSZW1vdmVTdHJlYW0oU3RyaW5nIGxhYmVsKSB7Ci0gICAg
ICBleHBlY3RlZFJlbW92ZVN0cmVhbUxhYmVscy5hZGQobGFiZWwpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvblJlbW92ZVN0cmVhbShNZWRp
YVN0cmVhbSBzdHJlYW0pIHsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZFJlbW92ZVN0cmVh
bUxhYmVscy5yZW1vdmVGaXJzdCgpLCBzdHJlYW0ubGFiZWwoKSk7Ci0gICAgICBXZWFrUmVmZXJl
bmNlPFZpZGVvUmVuZGVyZXI+IHJlbmRlcmVyID0gcmVuZGVyZXJzLnJlbW92ZShzdHJlYW0pOwot
ICAgICAgYXNzZXJ0Tm90TnVsbChyZW5kZXJlcik7Ci0gICAgICBhc3NlcnROb3ROdWxsKHJlbmRl
cmVyLmdldCgpKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzdHJlYW0udmlkZW9UcmFja3Muc2l6
ZSgpKTsKLSAgICAgIHN0cmVhbS52aWRlb1RyYWNrcy5nZXQoMCkucmVtb3ZlUmVuZGVyZXIocmVu
ZGVyZXIuZ2V0KCkpOwotICAgICAgZ290UmVtb3RlU3RyZWFtcy5yZW1vdmUoc3RyZWFtKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0RGF0YUNoYW5uZWwoU3Ry
aW5nIGxhYmVsKSB7Ci0gICAgICBleHBlY3RlZFJlbW90ZURhdGFDaGFubmVsTGFiZWxzLmFkZChs
YWJlbCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2
b2lkIG9uRGF0YUNoYW5uZWwoRGF0YUNoYW5uZWwgcmVtb3RlRGF0YUNoYW5uZWwpIHsKLSAgICAg
IGFzc2VydEVxdWFscyhleHBlY3RlZFJlbW90ZURhdGFDaGFubmVsTGFiZWxzLnJlbW92ZUZpcnN0
KCksIHJlbW90ZURhdGFDaGFubmVsLmxhYmVsKCkpOwotICAgICAgc2V0RGF0YUNoYW5uZWwocmVt
b3RlRGF0YUNoYW5uZWwpOwotICAgICAgYXNzZXJ0RXF1YWxzKERhdGFDaGFubmVsLlN0YXRlLkNP
Tk5FQ1RJTkcsIGRhdGFDaGFubmVsLnN0YXRlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5j
aHJvbml6ZWQgdm9pZCBleHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCkgewotICAgICAgKytleHBl
Y3RlZFJlbmVnb3RpYXRpb25zOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCBvblJlbmVnb3RpYXRpb25OZWVkZWQoKSB7Ci0gICAgICBhc3NlcnRU
cnVlKC0tZXhwZWN0ZWRSZW5lZ290aWF0aW9ucyA+PSAwKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMg
c3luY2hyb25pemVkIHZvaWQgZXhwZWN0TWVzc2FnZShCeXRlQnVmZmVyIGV4cGVjdGVkQnVmZmVy
LCBib29sZWFuIGV4cGVjdGVkQmluYXJ5KSB7Ci0gICAgICBleHBlY3RlZEJ1ZmZlcnMuYWRkKG5l
dyBEYXRhQ2hhbm5lbC5CdWZmZXIoZXhwZWN0ZWRCdWZmZXIsIGV4cGVjdGVkQmluYXJ5KSk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uTWVz
c2FnZShEYXRhQ2hhbm5lbC5CdWZmZXIgYnVmZmVyKSB7Ci0gICAgICBEYXRhQ2hhbm5lbC5CdWZm
ZXIgZXhwZWN0ZWQgPSBleHBlY3RlZEJ1ZmZlcnMucmVtb3ZlRmlyc3QoKTsKLSAgICAgIGFzc2Vy
dEVxdWFscyhleHBlY3RlZC5iaW5hcnksIGJ1ZmZlci5iaW5hcnkpOwotICAgICAgYXNzZXJ0VHJ1
ZShleHBlY3RlZC5kYXRhLmVxdWFscyhidWZmZXIuZGF0YSkpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkJ1ZmZlcmVkQW1vdW50Q2hhbmdl
KGxvbmcgcHJldmlvdXNBbW91bnQpIHsKLSAgICAgIGFzc2VydEZhbHNlKHByZXZpb3VzQW1vdW50
ID09IGRhdGFDaGFubmVsLmJ1ZmZlcmVkQW1vdW50KCkpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvblN0YXRlQ2hhbmdlKCkgewotICAgICAg
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RhdGVDaGFuZ2VzLnJlbW92ZUZpcnN0KCksIGRhdGFDaGFu
bmVsLnN0YXRlKCkpOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBl
Y3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5lbC5TdGF0ZSBzdGF0ZSkgewotICAgICAgZXhwZWN0ZWRT
dGF0ZUNoYW5nZXMuYWRkKHN0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgc3luY2hyb25pemVkIHZvaWQgb25Db21wbGV0ZShTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHsK
LSAgICAgIGlmICgtLWV4cGVjdGVkU3RhdHNDYWxsYmFja3MgPCAwKSB7Ci0gICAgICAgIHRocm93
IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHN0YXRzIHJlcG9ydDogIiArIHJlcG9y
dHMpOwotICAgICAgfQotICAgICAgZ290U3RhdHNSZXBvcnRzLmFkZChyZXBvcnRzKTsKLSAgICB9
Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0U3RhdHNDYWxsYmFjaygpIHsK
LSAgICAgICsrZXhwZWN0ZWRTdGF0c0NhbGxiYWNrczsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3lu
Y2hyb25pemVkIExpbmtlZExpc3Q8U3RhdHNSZXBvcnRbXT4gdGFrZVN0YXRzUmVwb3J0cygpIHsK
LSAgICAgIExpbmtlZExpc3Q8U3RhdHNSZXBvcnRbXT4gZ290ID0gZ290U3RhdHNSZXBvcnRzOwot
ICAgICAgZ290U3RhdHNSZXBvcnRzID0gbmV3IExpbmtlZExpc3Q8U3RhdHNSZXBvcnRbXT4oKTsK
LSAgICAgIHJldHVybiBnb3Q7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIGEgc2V0IG9mIGV4cGVj
dGF0aW9ucyB0aGF0IGhhdmVuJ3QgYmVlbiBzYXRpc2ZpZWQgeWV0LCBwb3NzaWJseQotICAgIC8v
IGVtcHR5IGlmIG5vIHN1Y2ggZXhwZWN0YXRpb25zIGV4aXN0LgotICAgIHB1YmxpYyBzeW5jaHJv
bml6ZWQgVHJlZVNldDxTdHJpbmc+IHVuc2F0aXNmaWVkRXhwZWN0YXRpb25zKCkgewotICAgICAg
VHJlZVNldDxTdHJpbmc+IHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucyA9IG5ldyBUcmVlU2V0
PFN0cmluZz4oKTsKLSAgICAgIGlmIChleHBlY3RlZEljZUNhbmRpZGF0ZXMgPiAwKSB7IC8vIFNl
ZSBjb21tZW50IGluIG9uSWNlQ2FuZGlkYXRlLgotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBl
Y3RhdGlvbnMuYWRkKCJleHBlY3RlZEljZUNhbmRpZGF0ZXMiKTsKLSAgICAgIH0KLSAgICAgIGlm
IChleHBlY3RlZEVycm9ycyAhPSAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0
aW9ucy5hZGQoImV4cGVjdGVkRXJyb3JzOiAiICsgZXhwZWN0ZWRFcnJvcnMpOwotICAgICAgfQot
ICAgICAgaWYgKGV4cGVjdGVkU2lnbmFsaW5nQ2hhbmdlcy5zaXplKCkgIT0gMCkgewotICAgICAg
ICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKAotICAgICAgICAgICAgImV4cGVjdGVk
U2lnbmFsaW5nQ2hhbmdlczogIiArIGV4cGVjdGVkU2lnbmFsaW5nQ2hhbmdlcy5zaXplKCkpOwot
ICAgICAgfQotICAgICAgaWYgKGV4cGVjdGVkSWNlQ29ubmVjdGlvbkNoYW5nZXMuc2l6ZSgpICE9
IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgKLSAgICAgICAg
ICAgICJleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFuZ2VzOiAiICsgZXhwZWN0ZWRJY2VDb25uZWN0
aW9uQ2hhbmdlcy5zaXplKCkpOwotICAgICAgfQotICAgICAgaWYgKGV4cGVjdGVkSWNlR2F0aGVy
aW5nQ2hhbmdlcy5zaXplKCkgIT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3Rh
dGlvbnMuYWRkKAotICAgICAgICAgICAgImV4cGVjdGVkSWNlR2F0aGVyaW5nQ2hhbmdlczogIiAr
IGV4cGVjdGVkSWNlR2F0aGVyaW5nQ2hhbmdlcy5zaXplKCkpOwotICAgICAgfQotICAgICAgaWYg
KGV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIHN0aWxsV2Fp
dGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRBZGRTdHJlYW1M
YWJlbHM6ICIgKyBleHBlY3RlZEFkZFN0cmVhbUxhYmVscy5zaXplKCkpOwotICAgICAgfQotICAg
ICAgaWYgKGV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFiZWxzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAg
IHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRS
ZW1vdmVTdHJlYW1MYWJlbHM6ICIgKyBleHBlY3RlZFJlbW92ZVN0cmVhbUxhYmVscy5zaXplKCkp
OwotICAgICAgfQotICAgICAgaWYgKGV4cGVjdGVkRnJhbWVzRGVsaXZlcmVkID4gMCkgewotICAg
ICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKCJleHBlY3RlZEZyYW1lc0RlbGl2
ZXJlZDogIiArIGV4cGVjdGVkRnJhbWVzRGVsaXZlcmVkKTsKLSAgICAgIH0KLSAgICAgIGlmICgh
ZXhwZWN0ZWRCdWZmZXJzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBl
Y3RhdGlvbnMuYWRkKCJleHBlY3RlZEJ1ZmZlcnM6ICIgKyBleHBlY3RlZEJ1ZmZlcnMuc2l6ZSgp
KTsKLSAgICAgIH0KLSAgICAgIGlmICghZXhwZWN0ZWRTdGF0ZUNoYW5nZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVkU3RhdGVD
aGFuZ2VzOiAiICsgZXhwZWN0ZWRTdGF0ZUNoYW5nZXMuc2l6ZSgpKTsKLSAgICAgIH0KLSAgICAg
IGlmICghZXhwZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExhYmVscy5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgKLSAgICAgICAgICAgICJleHBlY3Rl
ZFJlbW90ZURhdGFDaGFubmVsTGFiZWxzOiAiICsgZXhwZWN0ZWRSZW1vdGVEYXRhQ2hhbm5lbExh
YmVscy5zaXplKCkpOwotICAgICAgfQotICAgICAgaWYgKGV4cGVjdGVkU3RhdHNDYWxsYmFja3Mg
IT0gMCkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKCJleHBlY3Rl
ZFN0YXRzQ2FsbGJhY2tzOiAiICsgZXhwZWN0ZWRTdGF0c0NhbGxiYWNrcyk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zOwotICAgIH0KLQotICAgIHB1
YmxpYyBib29sZWFuIHdhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKGludCB0aW1l
b3V0U2Vjb25kcykgewotICAgICAgLy8gVE9ETyhmaXNjaG1hbik6IHByb2JsZW1zIHdpdGggdGhp
cyBhcHByb2FjaDoKLSAgICAgIC8vIC0gY29tZSB1cCB3aXRoIHNvbWV0aGluZyBiZXR0ZXIgdGhh
biBhIHBvbGwgbG9vcAotICAgICAgLy8gLSBhdm9pZCBzZXJpYWxpemluZyBleHBlY3RhdGlvbnMg
ZXhwbGljaXRseTsgdGhlIHRlc3QgaXMgbm90IGFzIHJvYnVzdAotICAgICAgLy8gICBhcyBpdCBj
b3VsZCBiZSBiZWNhdXNlIGl0IG11c3QgcGxhY2UgZXhwZWN0YXRpb25zIGJldHdlZW4gd2FpdAot
ICAgICAgLy8gICBzdGF0ZW1lbnRzIHZlcnkgcHJlY2lzZWx5IChlLmcuIGZyYW1lIG11c3Qgbm90
IGFycml2ZSBiZWZvcmUgaXRzCi0gICAgICAvLyAgIGV4cGVjdGF0aW9uLCBhbmQgZXhwZWN0YXRp
b24gbXVzdCBub3QgYmUgcmVnaXN0ZXJlZCBzbyBlYXJseSBhcyB0bwotICAgICAgLy8gICBzdGFs
bCBhIHdhaXQpLiAgVXNlIGNhbGxiYWNrcyB0byBmaXJlIG9mZiBkZXBlbmRlbnQgc3RlcHMgaW5z
dGVhZCBvZgotICAgICAgLy8gICBleHBsaWNpdGx5IHdhaXRpbmcsIHNvIHRoZXJlIGNhbiBiZSBq
dXN0IGEgc2luZ2xlIHdhaXQgYXQgdGhlIGVuZCBvZgotICAgICAgLy8gICB0aGUgdGVzdC4KLSAg
ICAgIGxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpICsgMTAwMCAqIHRp
bWVvdXRTZWNvbmRzOwotICAgICAgVHJlZVNldDxTdHJpbmc+IHByZXYgPSBudWxsOwotICAgICAg
VHJlZVNldDxTdHJpbmc+IHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucyA9IHVuc2F0aXNmaWVk
RXhwZWN0YXRpb25zKCk7Ci0gICAgICB3aGlsZSAoIXN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9u
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMu
ZXF1YWxzKHByZXYpKSB7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUgKyAiIHN0
aWxsIHdhaXRpbmcgYXRcbiAgICAiICsgKG5ldyBUaHJvd2FibGUoKSkuZ2V0U3RhY2tUcmFjZSgp
WzFdCi0gICAgICAgICAgICAgICsgIlxuICAgIGZvcjogIiArIEFycmF5cy50b1N0cmluZyhzdGls
bFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMudG9BcnJheSgpKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGVuZFRpbWUgPCBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSkgewotICAgICAgICAgIFN5
c3RlbS5vdXQucHJpbnRsbihuYW1lICsgIiB0aW1lZCBvdXQgd2FpdGluZyBmb3I6ICIKLSAgICAg
ICAgICAgICAgKyBBcnJheXMudG9TdHJpbmcoc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLnRv
QXJyYXkoKSkpOwotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICB0
cnkgewotICAgICAgICAgIFRocmVhZC5zbGVlcCgxMCk7Ci0gICAgICAgIH0gY2F0Y2ggKEludGVy
cnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bihlKTsKLSAgICAgICAgfQotICAgICAgICBwcmV2ID0gc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRp
b25zOwotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMgPSB1bnNhdGlzZmllZEV4
cGVjdGF0aW9ucygpOwotICAgICAgfQotICAgICAgaWYgKHByZXYgPT0gbnVsbCkgewotICAgICAg
ICBTeXN0ZW0ub3V0LnByaW50bG4oCi0gICAgICAgICAgICBuYW1lICsgIiBkaWRuJ3QgbmVlZCB0
byB3YWl0IGF0XG4gICAgIiArIChuZXcgVGhyb3dhYmxlKCkpLmdldFN0YWNrVHJhY2UoKVsxXSk7
Ci0gICAgICB9Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhv
ZHMgcmV0dXJuIGEgbGlzdCBvZiBhbGwgY3VycmVudGx5IGdhdGhlcmVkIGljZSBjYW5kaWRhdGVz
IG9yIHdhaXRzIHVudGlsCi0gICAgLy8gMSBjYW5kaWRhdGUgaGF2ZSBiZWVuIGdhdGhlcmVkLgot
ICAgIHB1YmxpYyBMaXN0PEljZUNhbmRpZGF0ZT4gZ2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGdvdElj
ZUNhbmRpZGF0ZXMpIHsKLSAgICAgICAgd2hpbGUgKGdvdEljZUNhbmRpZGF0ZXMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgZ290SWNlQ2FuZGlkYXRlcy53YWl0KCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG5ldyBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4oZ290SWNlQ2FuZGlkYXRlcyk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gU2V0cyB0aGUgZXhwZWN0ZWQgcmVzb2x1dGlv
biBmb3IgYW4gT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb25jZSBhIGZyYW1lCi0gIC8vIGhhcyBiZWVu
IGNhcHR1cmVkLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBFeHBlY3RlZFJlc29sdXRpb25TZXR0
ZXIgaW1wbGVtZW50cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gICAgcHJpdmF0ZSBPYnNl
cnZlckV4cGVjdGF0aW9ucyBvYnNlcnZlcjsKLQotICAgIHB1YmxpYyBFeHBlY3RlZFJlc29sdXRp
b25TZXR0ZXIoT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2JzZXJ2ZXIpIHsKLSAgICAgIHRoaXMub2Jz
ZXJ2ZXIgPSBvYnNlcnZlcjsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3lu
Y2hyb25pemVkIHZvaWQgcmVuZGVyRnJhbWUoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUp
IHsKLSAgICAgIC8vIEJlY2F1c2UgZGlmZmVyZW50IGNhbWVyYSBkZXZpY2VzIChmYWtlICYgcGh5
c2ljYWwpIHByb2R1Y2UgZGlmZmVyZW50Ci0gICAgICAvLyByZXNvbHV0aW9ucywgd2Ugb25seSBz
YW5pdHktY2hlY2sgdGhlIHNldCBzaXplcywKLSAgICAgIGFzc2VydFRydWUoZnJhbWUucm90YXRl
ZFdpZHRoKCkgPiAwKTsKLSAgICAgIGFzc2VydFRydWUoZnJhbWUucm90YXRlZEhlaWdodCgpID4g
MCk7Ci0gICAgICBvYnNlcnZlci5zZXRFeHBlY3RlZFJlc29sdXRpb24oZnJhbWUucm90YXRlZFdp
ZHRoKCksIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgY2xhc3MgU2RwT2JzZXJ2ZXJMYXRjaCBpbXBsZW1lbnRzIFNkcE9ic2VydmVyIHsKLSAg
ICBwcml2YXRlIGJvb2xlYW4gc3VjY2VzcyA9IGZhbHNlOwotICAgIHByaXZhdGUgU2Vzc2lvbkRl
c2NyaXB0aW9uIHNkcCA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgZXJyb3IgPSBudWxsOwot
ICAgIHByaXZhdGUgQ291bnREb3duTGF0Y2ggbGF0Y2ggPSBuZXcgQ291bnREb3duTGF0Y2goMSk7
Ci0KLSAgICBwdWJsaWMgU2RwT2JzZXJ2ZXJMYXRjaCgpIHt9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVN1Y2Nlc3MoU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewot
ICAgICAgdGhpcy5zZHAgPSBzZHA7Ci0gICAgICBvblNldFN1Y2Nlc3MoKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblNldFN1Y2Nlc3MoKSB7Ci0gICAgICBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICAgIGxhdGNoLmNvdW50RG93bigpOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlRmFpbHVyZShTdHJpbmcgZXJyb3IpIHsKLSAg
ICAgIG9uU2V0RmFpbHVyZShlcnJvcik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25TZXRGYWlsdXJlKFN0cmluZyBlcnJvcikgewotICAgICAgdGhpcy5lcnJvciA9
IGVycm9yOwotICAgICAgbGF0Y2guY291bnREb3duKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGJv
b2xlYW4gYXdhaXQoKSB7Ci0gICAgICB0cnkgewotICAgICAgICBhc3NlcnRUcnVlKGxhdGNoLmF3
YWl0KDEwMDAsIFRpbWVVbml0Lk1JTExJU0VDT05EUykpOwotICAgICAgICByZXR1cm4gZ2V0U3Vj
Y2VzcygpOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xl
YW4gZ2V0U3VjY2VzcygpIHsKLSAgICAgIHJldHVybiBzdWNjZXNzOwotICAgIH0KLQotICAgIHB1
YmxpYyBTZXNzaW9uRGVzY3JpcHRpb24gZ2V0U2RwKCkgewotICAgICAgcmV0dXJuIHNkcDsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEVycm9yKCkgewotICAgICAgcmV0dXJuIGVycm9y
OwotICAgIH0KLSAgfQotCi0gIHN0YXRpYyBpbnQgdmlkZW9XaW5kb3dzTWFwcGVkID0gLTE7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgVmlkZW9SZW5kZXJlciBjcmVhdGVWaWRlb1JlbmRlcmVyKFZpZGVv
UmVuZGVyZXIuQ2FsbGJhY2tzIHZpZGVvQ2FsbGJhY2tzKSB7Ci0gICAgcmV0dXJuIG5ldyBWaWRl
b1JlbmRlcmVyKHZpZGVvQ2FsbGJhY2tzKTsKLSAgfQotCi0gIC8vIFJldHVybiBhIHdlYWsgcmVm
ZXJlbmNlIHRvIHRlc3QgdGhhdCBvd25lcnNoaXAgaXMgY29ycmVjdGx5IGhlbGQgYnkKLSAgLy8g
UGVlckNvbm5lY3Rpb24sIG5vdCBieSB0ZXN0IGNvZGUuCi0gIHByaXZhdGUgc3RhdGljIFdlYWtS
ZWZlcmVuY2U8TWVkaWFTdHJlYW0+IGFkZFRyYWNrc1RvUEMoUGVlckNvbm5lY3Rpb25GYWN0b3J5
IGZhY3RvcnksCi0gICAgICBQZWVyQ29ubmVjdGlvbiBwYywgVmlkZW9Tb3VyY2UgdmlkZW9Tb3Vy
Y2UsIFN0cmluZyBzdHJlYW1MYWJlbCwgU3RyaW5nIHZpZGVvVHJhY2tJZCwKLSAgICAgIFN0cmlu
ZyBhdWRpb1RyYWNrSWQsIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHZpZGVvQ2FsbGJhY2tzKSB7
Ci0gICAgTWVkaWFTdHJlYW0gbE1TID0gZmFjdG9yeS5jcmVhdGVMb2NhbE1lZGlhU3RyZWFtKHN0
cmVhbUxhYmVsKTsKLSAgICBWaWRlb1RyYWNrIHZpZGVvVHJhY2sgPSBmYWN0b3J5LmNyZWF0ZVZp
ZGVvVHJhY2sodmlkZW9UcmFja0lkLCB2aWRlb1NvdXJjZSk7Ci0gICAgYXNzZXJ0Tm90TnVsbCh2
aWRlb1RyYWNrKTsKLSAgICBWaWRlb1JlbmRlcmVyIHZpZGVvUmVuZGVyZXIgPSBjcmVhdGVWaWRl
b1JlbmRlcmVyKHZpZGVvQ2FsbGJhY2tzKTsKLSAgICBhc3NlcnROb3ROdWxsKHZpZGVvUmVuZGVy
ZXIpOwotICAgIHZpZGVvVHJhY2suYWRkUmVuZGVyZXIodmlkZW9SZW5kZXJlcik7Ci0gICAgbE1T
LmFkZFRyYWNrKHZpZGVvVHJhY2spOwotICAgIC8vIEp1c3QgZm9yIGZ1biwgbGV0J3MgcmVtb3Zl
IGFuZCByZS1hZGQgdGhlIHRyYWNrLgotICAgIGxNUy5yZW1vdmVUcmFjayh2aWRlb1RyYWNrKTsK
LSAgICBsTVMuYWRkVHJhY2sodmlkZW9UcmFjayk7Ci0gICAgbE1TLmFkZFRyYWNrKAotICAgICAg
ICBmYWN0b3J5LmNyZWF0ZUF1ZGlvVHJhY2soYXVkaW9UcmFja0lkLCBmYWN0b3J5LmNyZWF0ZUF1
ZGlvU291cmNlKG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpKSk7Ci0gICAgcGMuYWRkU3RyZWFtKGxN
Uyk7Ci0gICAgcmV0dXJuIG5ldyBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPihsTVMpOwotICB9
Ci0KLSAgLy8gVXNlZCBmb3IgbWFraW5nIHN1cmUgdGhyZWFkIGhhbmRsZXMgYXJlIG5vdCBsZWFr
ZWQuCi0gIC8vIENhbGwgaW5pdGlhbGl6ZVRocmVhZENoZWNrIGJlZm9yZSBhIHRlc3QgYW5kIGZp
bmFsaXplVGhyZWFkQ2hlY2sgYWZ0ZXIKLSAgLy8gYSB0ZXN0LgotICB2b2lkIGluaXRpYWxpemVU
aHJlYWRDaGVjaygpIHsKLSAgICBTeXN0ZW0uZ2MoKTsgLy8gRW5jb3VyYWdlIGFueSBHQy1yZWxh
dGVkIHRocmVhZHMgdG8gc3RhcnQgdXAuCi0gICAgdGhyZWFkc0JlZm9yZVRlc3QgPSBhbGxUaHJl
YWRzKCk7Ci0gIH0KLQotICB2b2lkIGZpbmFsaXplVGhyZWFkQ2hlY2soKSB0aHJvd3MgRXhjZXB0
aW9uIHsKLSAgICAvLyBUcmVlU2V0PFN0cmluZz4gdGhyZWFkc0FmdGVyVGVzdCA9IGFsbFRocmVh
ZHMoKTsKLQotICAgIC8vIFRPRE8odG9tbWkpOiBGaWd1cmUgb3V0IGEgbW9yZSByZWxpYWJsZSB3
YXkgdG8gZG8gdGhpcyB0ZXN0LiAgQXMgaXMKLSAgICAvLyB3ZSdyZSBzZWVpbmcgdGhyZWUgcG9z
c2libGUgJ25vcm1hbCcgc2l0dWF0aW9uczoKLSAgICAvLyAxLiAgYmVmb3JlIGFuZCBhZnRlciBz
ZXRzIGFyZSBlcXVhbC4KLSAgICAvLyAyLiAgYmVmb3JlIGNvbnRhaW5zIDMgdGhyZWFkcyB0aGF0
IGRvIG5vdCBleGlzdCBpbiBhZnRlci4KLSAgICAvLyAzLiAgYWZ0ZXIgY29udGFpbnMgMyB0aHJl
YWRzIHRoYXQgZG8gbm90IGV4aXN0IGluIGJlZm9yZS4KLSAgICAvLwotICAgIC8vIE1heWJlIGl0
IHdvdWxkIGJlIGJldHRlciB0byBkbyB0aGUgdGhyZWFkIGVudW1lcmF0aW9uIGZyb20gQysrIGFu
ZCBnZXQKLSAgICAvLyB0aGUgdGhyZWFkIG5hbWVzIGFzIHdlbGwsIGluIG9yZGVyIHRvIGRldGVy
bWluZSB3aGF0IHRoZXNlIDMgdGhyZWFkcyBhcmUuCi0KLSAgICAvLyBhc3NlcnRFcXVhbHModGhy
ZWFkc0JlZm9yZVRlc3QsIHRocmVhZHNBZnRlclRlc3QpOwotICAgIC8vIFRocmVhZC5zbGVlcCgx
MDApOwotICB9Ci0KLSAgLy8gVE9ETyhmaXNjaG1hbikgTU9BUiB0ZXN0IGlkZWFzOgotICAvLyAt
IFRlc3QgdGhhdCBQQy5yZW1vdmVTdHJlYW0oKSB3b3JrczsgcmVxdWlyZXMgYSBzZWNvbmQKLSAg
Ly8gICBjcmVhdGVPZmZlci9jcmVhdGVBbnN3ZXIgZGFuY2UuCi0gIC8vIC0gYXVkaXQgZWFjaCBw
bGFjZSB0aGF0IHVzZXMgfGNvbnN0cmFpbnRzfCBmb3Igc3BlY2lmeWluZyBub24tdHJpdmlhbAot
ICAvLyAgIGNvbnN0cmFpbnRzIChhbmQgZW5zdXJlIHRoZXkncmUgaG9ub3JlZCkuCi0gIC8vIC0g
dGVzdCBlcnJvciBjYXNlcwotICAvLyAtIGVuc3VyZSByZWFzb25hYmxlIGNvdmVyYWdlIG9mIF9q
bmkuY2MgaXMgYWNoaWV2ZWQuICBDb3ZlcmFnZSBpcwotICAvLyAgIGV4dHJhLWltcG9ydGFudCBi
ZWNhdXNlIG9mIGFsbCB0aGUgZnJlZS10ZXh0IChjbGFzcy9tZXRob2QgbmFtZXMsIGV0YykKLSAg
Ly8gICBpbiBKTkktc3R5bGUgcHJvZ3JhbW1pbmc7IG1ha2Ugc3VyZSBubyB0eXBvcyEKLSAgLy8g
LSBUZXN0IHRoYXQgc2h1dGRvd24gbWlkLWludGVyYWN0aW9uIGlzIGNyYXNoLWZyZWUuCi0KLSAg
QE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENvbXBsZXRlU2Vzc2lvbigpIHRocm93cyBF
eGNlcHRpb24gewotICAgIE1ldHJpY3MuZW5hYmxlKCk7Ci0gICAgLy8gQWxsb3cgbG9vcGJhY2sg
aW50ZXJmYWNlcyB0b28gc2luY2Ugb3VyIEFuZHJvaWQgZGV2aWNlcyBvZnRlbiBkb24ndAotICAg
IC8vIGhhdmUgdGhvc2UuCi0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9u
cyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucygpOwotICAgIG9wdGlvbnMubmV0
d29ya0lnbm9yZU1hc2sgPSAwOwotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0g
bmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeShvcHRpb25zKTsKLSAgICAvLyBVbmNvbW1lbnQgdG8g
Z2V0IEFMTCBXZWJSVEMgdHJhY2luZyBhbmQgU0VOU0lUSVZFIGxpYmppbmdsZSBsb2dnaW5nLgot
ICAgIC8vIE5PVEU6IHRoaXMgX211c3RfIGhhcHBlbiB3aGlsZSB8ZmFjdG9yeXwgaXMgYWxpdmUh
Ci0gICAgLy8gTG9nZ2luZy5lbmFibGVUcmFjaW5nKAotICAgIC8vICAgICAiL3RtcC9QZWVyQ29u
bmVjdGlvblRlc3QtbG9nLnR4dCIsCi0gICAgLy8gICAgIEVudW1TZXQub2YoTG9nZ2luZy5UcmFj
ZUxldmVsLlRSQUNFX0FMTCksCi0gICAgLy8gICAgIExvZ2dpbmcuU2V2ZXJpdHkuTFNfU0VOU0lU
SVZFKTsKLQotICAgIE1lZGlhQ29uc3RyYWludHMgcGNDb25zdHJhaW50cyA9IG5ldyBNZWRpYUNv
bnN0cmFpbnRzKCk7Ci0gICAgcGNDb25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKG5ldyBNZWRpYUNv
bnN0cmFpbnRzLktleVZhbHVlUGFpcigiRHRsc1NydHBLZXlBZ3JlZW1lbnQiLCAidHJ1ZSIpKTsK
LQotICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzID0g
bmV3IExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPigpOwotICAgIGljZVNlcnZl
cnMuYWRkKG5ldyBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIoInN0dW46c3R1bi5sLmdvb2dsZS5j
b206MTkzMDIiKSk7Ci0gICAgaWNlU2VydmVycy5hZGQoCi0gICAgICAgIG5ldyBQZWVyQ29ubmVj
dGlvbi5JY2VTZXJ2ZXIoInR1cm46ZmFrZS5leGFtcGxlLmNvbSIsICJmYWtlVXNlcm5hbWUiLCAi
ZmFrZVBhc3N3b3JkIikpOwotICAgIE9ic2VydmVyRXhwZWN0YXRpb25zIG9mZmVyaW5nRXhwZWN0
YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0YXRpb25zKCJQQ1Rlc3Q6b2ZmZXJlciIpOwotICAg
IFBlZXJDb25uZWN0aW9uIG9mZmVyaW5nUEMgPQotICAgICAgICBmYWN0b3J5LmNyZWF0ZVBlZXJD
b25uZWN0aW9uKGljZVNlcnZlcnMsIHBjQ29uc3RyYWludHMsIG9mZmVyaW5nRXhwZWN0YXRpb25z
KTsKLSAgICBhc3NlcnROb3ROdWxsKG9mZmVyaW5nUEMpOwotCi0gICAgT2JzZXJ2ZXJFeHBlY3Rh
dGlvbnMgYW5zd2VyaW5nRXhwZWN0YXRpb25zID0gbmV3IE9ic2VydmVyRXhwZWN0YXRpb25zKCJQ
Q1Rlc3Q6YW5zd2VyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBhbnN3ZXJpbmdQQyA9Ci0gICAg
ICAgIGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24oaWNlU2VydmVycywgcGNDb25zdHJhaW50
cywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBhc3NlcnROb3ROdWxsKGFuc3dlcmluZ1BD
KTsKLQotICAgIC8vIFdlIHdhbnQgdG8gdXNlIHRoZSBzYW1lIGNhbWVyYSBmb3Igb2ZmZXJlciAm
IGFuc3dlcmVyLCBzbyBjcmVhdGUgaXQgaGVyZQotICAgIC8vIGluc3RlYWQgb2YgaW4gYWRkVHJh
Y2tzVG9QQy4KLSAgICBmaW5hbCBDYW1lcmFFbnVtZXJhdG9yIGVudW1lcmF0b3IgPSBuZXcgQ2Ft
ZXJhMUVudW1lcmF0b3IoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyk7Ci0gICAgZmluYWwg
VmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0KLSAgICAgICAgZW51bWVyYXRvci5jcmVhdGVD
YXB0dXJlcihlbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF0sIG51bGwpOwotICAgIGZpbmFs
IFZpZGVvU291cmNlIHZpZGVvU291cmNlID0gZmFjdG9yeS5jcmVhdGVWaWRlb1NvdXJjZSh2aWRl
b0NhcHR1cmVyKTsKLSAgICB2aWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZSg2NDAsIDQ4MCwgMzAp
OwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVuZWdvdGlhdGlvbk5lZWRlZCgp
OwotICAgIFdlYWtSZWZlcmVuY2U8TWVkaWFTdHJlYW0+IG9MTVMgPQotICAgICAgICBhZGRUcmFj
a3NUb1BDKGZhY3RvcnksIG9mZmVyaW5nUEMsIHZpZGVvU291cmNlLCAib2ZmZXJlZE1lZGlhU3Ry
ZWFtIiwgIm9mZmVyZWRWaWRlb1RyYWNrIiwKLSAgICAgICAgICAgICJvZmZlcmVkQXVkaW9UcmFj
ayIsIG5ldyBFeHBlY3RlZFJlc29sdXRpb25TZXR0ZXIoYW5zd2VyaW5nRXhwZWN0YXRpb25zKSk7
Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7
Ci0gICAgRGF0YUNoYW5uZWwgb2ZmZXJpbmdEQyA9IG9mZmVyaW5nUEMuY3JlYXRlRGF0YUNoYW5u
ZWwoIm9mZmVyaW5nREMiLCBuZXcgRGF0YUNoYW5uZWwuSW5pdCgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoIm9mZmVyaW5nREMiLCBvZmZlcmluZ0RDLmxhYmVsKCkpOwotCi0gICAgb2ZmZXJpbmdFeHBl
Y3RhdGlvbnMuc2V0RGF0YUNoYW5uZWwob2ZmZXJpbmdEQyk7Ci0gICAgU2RwT2JzZXJ2ZXJMYXRj
aCBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdQQy5jcmVh
dGVPZmZlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1
ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAgPSBz
ZHBMYXRjaC5nZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJTZHAudHlwZSwgU2Vzc2lv
bkRlc2NyaXB0aW9uLlR5cGUuT0ZGRVIpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyU2RwLmRlc2Ny
aXB0aW9uLmlzRW1wdHkoKSk7Ci0KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNo
KCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWdu
YWxpbmdTdGF0ZS5IQVZFX1JFTU9URV9PRkZFUik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdEFkZFN0cmVhbSgib2ZmZXJlZE1lZGlhU3RyZWFtIik7Ci0gICAgLy8gU0NUUCBEYXRh
Q2hhbm5lbHMgYXJlIGFubm91bmNlZCB2aWEgT1BFTiBtZXNzYWdlcyBvdmVyIHRoZSBlc3RhYmxp
c2hlZAotICAgIC8vIGNvbm5lY3Rpb24gKG5vdCB2aWEgU0RQKSwgc28gYW5zd2VyaW5nRXhwZWN0
YXRpb25zIGNhbiBvbmx5IHJlZ2lzdGVyCi0gICAgLy8gZXhwZWN0aW5nIHRoZSBjaGFubmVsIGR1
cmluZyBJQ0UsIGJlbG93LgotICAgIGFuc3dlcmluZ1BDLnNldFJlbW90ZURlc2NyaXB0aW9uKHNk
cExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0RXF1YWxzKFBlZXJDb25uZWN0aW9uLlNpZ25h
bGluZ1N0YXRlLlNUQUJMRSwgb2ZmZXJpbmdQQy5zaWduYWxpbmdTdGF0ZSgpKTsKLSAgICBhc3Nl
cnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2Rw
KCkpOwotCi0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVk
ZWQoKTsKLSAgICBXZWFrUmVmZXJlbmNlPE1lZGlhU3RyZWFtPiBhTE1TID0gYWRkVHJhY2tzVG9Q
QyhmYWN0b3J5LCBhbnN3ZXJpbmdQQywgdmlkZW9Tb3VyY2UsCi0gICAgICAgICJhbnN3ZXJlZE1l
ZGlhU3RyZWFtIiwgImFuc3dlcmVkVmlkZW9UcmFjayIsICJhbnN3ZXJlZEF1ZGlvVHJhY2siLAot
ICAgICAgICBuZXcgRXhwZWN0ZWRSZXNvbHV0aW9uU2V0dGVyKG9mZmVyaW5nRXhwZWN0YXRpb25z
KSk7Ci0KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2Vy
aW5nUEMuY3JlYXRlQW5zd2VyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAg
ICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiBh
bnN3ZXJTZHAgPSBzZHBMYXRjaC5nZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyU2Rw
LnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLkFOU1dFUik7Ci0gICAgYXNzZXJ0RmFsc2Uo
YW5zd2VyU2RwLmRlc2NyaXB0aW9uLmlzRW1wdHkoKSk7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RJY2VDYW5kaWRhdGVzKDIpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RJY2VDYW5kaWRhdGVzKDIpOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0
SWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0YXRlLkNPTVBMRVRFKTsKLSAgICBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0
YXRlLkNPTVBMRVRFKTsKLQotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsK
LSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGlu
Z1N0YXRlLlNUQUJMRSk7Ci0gICAgYW5zd2VyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBM
YXRjaCwgYW5zd2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAg
IGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2Rw
T2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGlu
Z0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX0xPQ0FMX09GRkVSKTsKLSAgICBvZmZlcmluZ1BD
LnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAgICBhc3NlcnRUcnVl
KHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwot
ICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAg
ICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RBZGRTdHJlYW0oImFuc3dlcmVkTWVkaWFTdHJl
YW0iKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFu
Z2UoSWNlQ29ubmVjdGlvblN0YXRlLkNIRUNLSU5HKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9u
cy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQp
OwotICAgIC8vIFRPRE8oYmVtYXNjKTogdW5jb21tZW50IG9uY2UgZGVsaXZlcnkgb2YgSUNFQ29t
cGxldGVkIGlzIHJlbGlhYmxlCi0gICAgLy8gKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avd2Vi
cnRjL2lzc3Vlcy9kZXRhaWw/aWQ9MzAyMSkuCi0gICAgLy8KLSAgICAvLyBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKAotICAgIC8vICAgICBJY2VDb25uZWN0
aW9uU3RhdGUuQ09NUExFVEVEKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNl
Q29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIGFuc3dl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25T
dGF0ZS5DT05ORUNURUQpOwotCi0gICAgb2ZmZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihz
ZHBMYXRjaCwgYW5zd2VyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwot
ICAgIGFzc2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgYXNzZXJ0RXF1YWxzKG9m
ZmVyaW5nUEMuZ2V0TG9jYWxEZXNjcmlwdGlvbigpLnR5cGUsIG9mZmVyU2RwLnR5cGUpOwotICAg
IGFzc2VydEVxdWFscyhvZmZlcmluZ1BDLmdldFJlbW90ZURlc2NyaXB0aW9uKCkudHlwZSwgYW5z
d2VyU2RwLnR5cGUpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJpbmdQQy5nZXRMb2NhbERlc2Ny
aXB0aW9uKCkudHlwZSwgYW5zd2VyU2RwLnR5cGUpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJp
bmdQQy5nZXRSZW1vdGVEZXNjcmlwdGlvbigpLnR5cGUsIG9mZmVyU2RwLnR5cGUpOwotCi0gICAg
YXNzZXJ0RXF1YWxzKG9mZmVyaW5nUEMuZ2V0U2VuZGVycygpLnNpemUoKSwgMik7Ci0gICAgYXNz
ZXJ0RXF1YWxzKG9mZmVyaW5nUEMuZ2V0UmVjZWl2ZXJzKCkuc2l6ZSgpLCAyKTsKLSAgICBhc3Nl
cnRFcXVhbHMoYW5zd2VyaW5nUEMuZ2V0U2VuZGVycygpLnNpemUoKSwgMik7Ci0gICAgYXNzZXJ0
RXF1YWxzKGFuc3dlcmluZ1BDLmdldFJlY2VpdmVycygpLnNpemUoKSwgMik7Ci0KLSAgICAvLyBX
YWl0IGZvciBhdCBsZWFzdCBzb21lIGZyYW1lcyB0byBiZSBkZWxpdmVyZWQgYXQgZWFjaCBlbmQg
KG51bWJlcgotICAgIC8vIGNob3NlbiBhcmJpdHJhcmlseSkuCi0gICAgb2ZmZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0RnJhbWVzRGVsaXZlcmVkKDEwKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlv
bnMuZXhwZWN0RnJhbWVzRGVsaXZlcmVkKDEwKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLk9QRU4pOwotICAgIC8vIFNlZSBj
b21tZW50YXJ5IGFib3V0IFNDVFAgRGF0YUNoYW5uZWxzIGFib3ZlIGZvciB3aHkgdGhpcyBpcyBo
ZXJlLgotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3REYXRhQ2hhbm5lbCgib2ZmZXJp
bmdEQyIpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRh
Q2hhbm5lbC5TdGF0ZS5PUEVOKTsKLQotICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0IG9uZSBpY2Ug
Y2FuZGlkYXRlIGZyb20gdGhlIG9mZmVyaW5nIFBDIGFuZCBmb3J3YXJkIHRoZW0gdG8gdGhlIGFu
c3dlcmluZwotICAgIC8vIFBDLgotICAgIGZvciAoSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA6IG9m
ZmVyaW5nRXhwZWN0YXRpb25zLmdldEF0TGVhc3RPbmVJY2VDYW5kaWRhdGUoKSkgewotICAgICAg
YW5zd2VyaW5nUEMuYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgfQotCi0gICAgLy8g
V2FpdCBmb3IgYXQgbGVhc3Qgb25lIGljZSBjYW5kaWRhdGUgZnJvbSB0aGUgYW5zd2VyaW5nIFBD
IGFuZCBmb3J3YXJkIHRoZW0gdG8gdGhlIG9mZmVyaW5nCi0gICAgLy8gUEMuCi0gICAgZm9yIChJ
Y2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogYW5zd2VyaW5nRXhwZWN0YXRpb25zLmdldEF0TGVhc3RP
bmVJY2VDYW5kaWRhdGUoKSkgewotICAgICAgb2ZmZXJpbmdQQy5hZGRJY2VDYW5kaWRhdGUoY2Fu
ZGlkYXRlKTsKLSAgICB9Ci0KLSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25zLndh
aXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotICAg
IGFzc2VydFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNU
b0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotCi0gICAgYXNzZXJ0RXF1YWxzKFBlZXJD
b25uZWN0aW9uLlNpZ25hbGluZ1N0YXRlLlNUQUJMRSwgb2ZmZXJpbmdQQy5zaWduYWxpbmdTdGF0
ZSgpKTsKLSAgICBhc3NlcnRFcXVhbHMoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGUuU1RB
QkxFLCBhbnN3ZXJpbmdQQy5zaWduYWxpbmdTdGF0ZSgpKTsKLQotICAgIC8vIFNldCBhIGJpdHJh
dGUgbGltaXQgZm9yIHRoZSBvdXRnb2luZyB2aWRlbyBzdHJlYW0gZm9yIHRoZSBvZmZlcmVyLgot
ICAgIFJ0cFNlbmRlciB2aWRlb1NlbmRlciA9IG51bGw7Ci0gICAgZm9yIChSdHBTZW5kZXIgc2Vu
ZGVyIDogb2ZmZXJpbmdQQy5nZXRTZW5kZXJzKCkpIHsKLSAgICAgIGlmIChzZW5kZXIudHJhY2so
KS5raW5kKCkuZXF1YWxzKCJ2aWRlbyIpKSB7Ci0gICAgICAgIHZpZGVvU2VuZGVyID0gc2VuZGVy
OwotICAgICAgfQotICAgIH0KLSAgICBhc3NlcnROb3ROdWxsKHZpZGVvU2VuZGVyKTsKLSAgICBS
dHBQYXJhbWV0ZXJzIHJ0cFBhcmFtZXRlcnMgPSB2aWRlb1NlbmRlci5nZXRQYXJhbWV0ZXJzKCk7
Ci0gICAgYXNzZXJ0Tm90TnVsbChydHBQYXJhbWV0ZXJzKTsKLSAgICBhc3NlcnRFcXVhbHMoMSwg
cnRwUGFyYW1ldGVycy5lbmNvZGluZ3Muc2l6ZSgpKTsKLSAgICBhc3NlcnROdWxsKHJ0cFBhcmFt
ZXRlcnMuZW5jb2RpbmdzLmdldCgwKS5tYXhCaXRyYXRlQnBzKTsKLQotICAgIHJ0cFBhcmFtZXRl
cnMuZW5jb2RpbmdzLmdldCgwKS5tYXhCaXRyYXRlQnBzID0gMzAwMDAwOwotICAgIGFzc2VydFRy
dWUodmlkZW9TZW5kZXIuc2V0UGFyYW1ldGVycyhydHBQYXJhbWV0ZXJzKSk7Ci0KLSAgICAvLyBW
ZXJpZnkgdGhhdCB3ZSBjYW4gcmVhZCBiYWNrIHRoZSB1cGRhdGVkIHZhbHVlLgotICAgIHJ0cFBh
cmFtZXRlcnMgPSB2aWRlb1NlbmRlci5nZXRQYXJhbWV0ZXJzKCk7Ci0gICAgYXNzZXJ0RXF1YWxz
KDMwMDAwMCwgKGludCkgcnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLm1heEJpdHJhdGVC
cHMpOwotCi0gICAgLy8gVGVzdCBzZW5kICYgcmVjZWl2ZSBVVEYtOCB0ZXh0LgotICAgIGFuc3dl
cmluZ0V4cGVjdGF0aW9ucy5leHBlY3RNZXNzYWdlKAotICAgICAgICBCeXRlQnVmZmVyLndyYXAo
ImhlbGxvISIuZ2V0Qnl0ZXMoQ2hhcnNldC5mb3JOYW1lKCJVVEYtOCIpKSksIGZhbHNlKTsKLSAg
ICBEYXRhQ2hhbm5lbC5CdWZmZXIgYnVmZmVyID0KLSAgICAgICAgbmV3IERhdGFDaGFubmVsLkJ1
ZmZlcihCeXRlQnVmZmVyLndyYXAoImhlbGxvISIuZ2V0Qnl0ZXMoQ2hhcnNldC5mb3JOYW1lKCJV
VEYtOCIpKSksIGZhbHNlKTsKLSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRpb25zLmRh
dGFDaGFubmVsLnNlbmQoYnVmZmVyKSk7Ci0gICAgYXNzZXJ0VHJ1ZShhbnN3ZXJpbmdFeHBlY3Rh
dGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRT
KSk7Ci0KLSAgICAvLyBDb25zdHJ1Y3QgdGhpcyBiaW5hcnkgbWVzc2FnZSB0d28gZGlmZmVyZW50
IHdheXMgdG8gZW5zdXJlIG5vCi0gICAgLy8gc2hvcnRjdXRzIGFyZSB0YWtlbi4KLSAgICBCeXRl
QnVmZmVyIGV4cGVjdGVkQmluYXJ5TWVzc2FnZSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qo
NSk7Ci0gICAgZm9yIChieXRlIGkgPSAxOyBpIDwgNjsgKytpKSB7Ci0gICAgICBleHBlY3RlZEJp
bmFyeU1lc3NhZ2UucHV0KGkpOwotICAgIH0KLSAgICBleHBlY3RlZEJpbmFyeU1lc3NhZ2UuZmxp
cCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdE1lc3NhZ2UoZXhwZWN0ZWRCaW5h
cnlNZXNzYWdlLCB0cnVlKTsKLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5k
YXRhQ2hhbm5lbC5zZW5kKAotICAgICAgICBuZXcgRGF0YUNoYW5uZWwuQnVmZmVyKEJ5dGVCdWZm
ZXIud3JhcChuZXcgYnl0ZVtdIHsxLCAyLCAzLCA0LCA1fSksIHRydWUpKSk7Ci0gICAgYXNzZXJ0
VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlz
ZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLkNMT1NJTkcpOwotICAgIGFuc3dlcmluZ0V4
cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5lbC5TdGF0ZS5DTE9TSU5HKTsK
LSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5nZShEYXRhQ2hhbm5lbC5T
dGF0ZS5DTE9TRUQpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTdGF0ZUNoYW5n
ZShEYXRhQ2hhbm5lbC5TdGF0ZS5DTE9TRUQpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5k
YXRhQ2hhbm5lbC5jbG9zZSgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmRhdGFDaGFubmVs
LmNsb3NlKCk7Ci0KLSAgICAvLyBGcmVlIHRoZSBKYXZhLWxhbmQgb2JqZWN0cyBhbmQgY29sbGVj
dCB0aGVtLgotICAgIHNodXRkb3duUEMob2ZmZXJpbmdQQywgb2ZmZXJpbmdFeHBlY3RhdGlvbnMp
OwotICAgIG9mZmVyaW5nUEMgPSBudWxsOwotICAgIHNodXRkb3duUEMoYW5zd2VyaW5nUEMsIGFu
c3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYW5zd2VyaW5nUEMgPSBudWxsOwotICAgIGdldE1l
dHJpY3MoKTsKLSAgICB2aWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgdmlkZW9DYXB0
dXJlci5kaXNwb3NlKCk7Ci0gICAgdmlkZW9Tb3VyY2UuZGlzcG9zZSgpOwotICAgIGZhY3Rvcnku
ZGlzcG9zZSgpOwotICAgIFN5c3RlbS5nYygpOwotICB9Ci0KLSAgQE1lZGl1bVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFRyYWNrUmVtb3ZhbCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIEFs
bG93IGxvb3BiYWNrIGludGVyZmFjZXMgdG9vIHNpbmNlIG91ciBBbmRyb2lkIGRldmljZXMgb2Z0
ZW4gZG9uJ3QKLSAgICAvLyBoYXZlIHRob3NlLgotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5P
cHRpb25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMoKTsKLSAg
ICBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrID0gMDsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkgZmFjdG9yeSA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkob3B0aW9ucyk7Ci0KLSAgICBN
ZWRpYUNvbnN0cmFpbnRzIHBjQ29uc3RyYWludHMgPSBuZXcgTWVkaWFDb25zdHJhaW50cygpOwot
ICAgIHBjQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZChuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlW
YWx1ZVBhaXIoIkR0bHNTcnRwS2V5QWdyZWVtZW50IiwgInRydWUiKSk7Ci0KLSAgICBMaW5rZWRM
aXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycyA9IG5ldyBMaW5rZWRMaXN0
PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4oKTsKLSAgICBpY2VTZXJ2ZXJzLmFkZChuZXcgUGVl
ckNvbm5lY3Rpb24uSWNlU2VydmVyKCJzdHVuOnN0dW4ubC5nb29nbGUuY29tOjE5MzAyIikpOwot
Ci0gICAgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2ZmZXJpbmdFeHBlY3RhdGlvbnMgPSBuZXcgT2Jz
ZXJ2ZXJFeHBlY3RhdGlvbnMoIlBDVGVzdDpvZmZlcmVyIik7Ci0gICAgUGVlckNvbm5lY3Rpb24g
b2ZmZXJpbmdQQyA9Ci0gICAgICAgIGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24oaWNlU2Vy
dmVycywgcGNDb25zdHJhaW50cywgb2ZmZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIGFzc2VydE5v
dE51bGwob2ZmZXJpbmdQQyk7Ci0KLSAgICBPYnNlcnZlckV4cGVjdGF0aW9ucyBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMgPSBuZXcgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMoIlBDVGVzdDphbnN3ZXJlciIp
OwotICAgIFBlZXJDb25uZWN0aW9uIGFuc3dlcmluZ1BDID0KLSAgICAgICAgZmFjdG9yeS5jcmVh
dGVQZWVyQ29ubmVjdGlvbihpY2VTZXJ2ZXJzLCBwY0NvbnN0cmFpbnRzLCBhbnN3ZXJpbmdFeHBl
Y3RhdGlvbnMpOwotICAgIGFzc2VydE5vdE51bGwoYW5zd2VyaW5nUEMpOwotCi0gICAgLy8gV2Ug
d2FudCB0byB1c2UgdGhlIHNhbWUgY2FtZXJhIGZvciBvZmZlcmVyICYgYW5zd2VyZXIsIHNvIGNy
ZWF0ZSBpdCBoZXJlCi0gICAgLy8gaW5zdGVhZCBvZiBpbiBhZGRUcmFja3NUb1BDLgotICAgIGZp
bmFsIENhbWVyYUVudW1lcmF0b3IgZW51bWVyYXRvciA9IG5ldyBDYW1lcmExRW51bWVyYXRvcihm
YWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKTsKLSAgICBmaW5hbCBWaWRlb0NhcHR1cmVyIHZp
ZGVvQ2FwdHVyZXIgPQotICAgICAgICBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGVudW1lcmF0
b3IuZ2V0RGV2aWNlTmFtZXMoKVswXSwgbnVsbCk7Ci0gICAgZmluYWwgVmlkZW9Tb3VyY2Ugdmlk
ZW9Tb3VyY2UgPSBmYWN0b3J5LmNyZWF0ZVZpZGVvU291cmNlKHZpZGVvQ2FwdHVyZXIpOwotICAg
IHZpZGVvQ2FwdHVyZXIuc3RhcnRDYXB0dXJlKDY0MCwgNDgwLCAzMCk7Ci0KLSAgICAvLyBBZGQg
b2ZmZXJlciBtZWRpYSBzdHJlYW0uCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVu
ZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIFdlYWtSZWZlcmVuY2U8TWVkaWFTdHJlYW0+IG9MTVMg
PQotICAgICAgICBhZGRUcmFja3NUb1BDKGZhY3RvcnksIG9mZmVyaW5nUEMsIHZpZGVvU291cmNl
LCAib2ZmZXJlZE1lZGlhU3RyZWFtIiwgIm9mZmVyZWRWaWRlb1RyYWNrIiwKLSAgICAgICAgICAg
ICJvZmZlcmVkQXVkaW9UcmFjayIsIG5ldyBFeHBlY3RlZFJlc29sdXRpb25TZXR0ZXIoYW5zd2Vy
aW5nRXhwZWN0YXRpb25zKSk7Ci0KLSAgICAvLyBDcmVhdGUgb2ZmZXIuCi0gICAgU2RwT2JzZXJ2
ZXJMYXRjaCBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdQ
Qy5jcmVhdGVPZmZlcihzZHBMYXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJT
ZHAgPSBzZHBMYXRjaC5nZXRTZHAoKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJTZHAudHlwZSwg
U2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuT0ZGRVIpOwotICAgIGFzc2VydEZhbHNlKG9mZmVyU2Rw
LmRlc2NyaXB0aW9uLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBTZXQgbG9jYWwgZGVzY3JpcHRpb24g
Zm9yIG9mZmVyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAg
IG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0
ZS5IQVZFX0xPQ0FMX09GRkVSKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VD
YW5kaWRhdGVzKDIpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUdhdGhlcmlu
Z0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZS5DT01QTEVURSk7Ci0gICAgb2ZmZXJpbmdQQy5zZXRM
b2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBM
YXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAg
IC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVyLgotICAgIHNkcExhdGNoID0g
bmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0
U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfUkVNT1RFX09GRkVSKTsKLSAgICBh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0QWRkU3RyZWFtKCJvZmZlcmVkTWVkaWFTdHJlYW0i
KTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJT
ZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChz
ZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBBZGQgYW5zd2VyZXIgbWVkaWEgc3RyZWFtLgot
ICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0g
ICAgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVhbT4gYUxNUyA9IGFkZFRyYWNrc1RvUEMoZmFjdG9y
eSwgYW5zd2VyaW5nUEMsIHZpZGVvU291cmNlLAotICAgICAgICAiYW5zd2VyZWRNZWRpYVN0cmVh
bSIsICJhbnN3ZXJlZFZpZGVvVHJhY2siLCAiYW5zd2VyZWRBdWRpb1RyYWNrIiwKLSAgICAgICAg
bmV3IEV4cGVjdGVkUmVzb2x1dGlvblNldHRlcihvZmZlcmluZ0V4cGVjdGF0aW9ucykpOwotCi0g
ICAgLy8gQ3JlYXRlIGFuc3dlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNo
KCk7Ci0gICAgYW5zd2VyaW5nUEMuY3JlYXRlQW5zd2VyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25z
dHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIFNlc3Np
b25EZXNjcmlwdGlvbiBhbnN3ZXJTZHAgPSBzZHBMYXRjaC5nZXRTZHAoKTsKLSAgICBhc3NlcnRF
cXVhbHMoYW5zd2VyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLkFOU1dFUik7Ci0g
ICAgYXNzZXJ0RmFsc2UoYW5zd2VyU2RwLmRlc2NyaXB0aW9uLmlzRW1wdHkoKSk7Ci0KLSAgICAv
LyBTZXQgbG9jYWwgZGVzY3JpcHRpb24gZm9yIGFuc3dlcmVyLgotICAgIHNkcExhdGNoID0gbmV3
IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2ln
bmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJMRSk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0
YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdEljZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZS5DT01QTEVURSk7Ci0g
ICAgYW5zd2VyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2RwKTsK
LSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0
Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBmb3Igb2ZmZXJl
ci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLlNUQUJMRSk7
Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0QWRkU3RyZWFtKCJhbnN3ZXJlZE1lZGlh
U3RyZWFtIik7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9u
Q2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0gICAgb2ZmZXJpbmdFeHBlY3Rh
dGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUuQ09OTkVD
VEVEKTsKLSAgICAvLyBUT0RPKGJlbWFzYyk6IHVuY29tbWVudCBvbmNlIGRlbGl2ZXJ5IG9mIElD
RUNvbXBsZXRlZCBpcyByZWxpYWJsZQotICAgIC8vIChodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9w
L3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTMwMjEpLgotICAgIC8vCi0gICAgLy8gb2ZmZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZSgKLSAgICAvLyAgICAgSWNlQ29u
bmVjdGlvblN0YXRlLkNPTVBMRVRFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNIRUNLSU5HKTsKLSAgICBh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0
aW9uU3RhdGUuQ09OTkVDVEVEKTsKLQotICAgIG9mZmVyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRp
b24oc2RwTGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgp
KTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIFdhaXQgZm9y
IGF0IGxlYXN0IG9uZSBpY2UgY2FuZGlkYXRlIGZyb20gdGhlIG9mZmVyaW5nIFBDIGFuZCBmb3J3
YXJkIHRoZW0gdG8gdGhlIGFuc3dlcmluZwotICAgIC8vIFBDLgotICAgIGZvciAoSWNlQ2FuZGlk
YXRlIGNhbmRpZGF0ZSA6IG9mZmVyaW5nRXhwZWN0YXRpb25zLmdldEF0TGVhc3RPbmVJY2VDYW5k
aWRhdGUoKSkgewotICAgICAgYW5zd2VyaW5nUEMuYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7
Ci0gICAgfQotCi0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGljZSBjYW5kaWRhdGUgZnJv
bSB0aGUgYW5zd2VyaW5nIFBDIGFuZCBmb3J3YXJkIHRoZW0gdG8gdGhlIG9mZmVyaW5nCi0gICAg
Ly8gUEMuCi0gICAgZm9yIChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogYW5zd2VyaW5nRXhwZWN0
YXRpb25zLmdldEF0TGVhc3RPbmVJY2VDYW5kaWRhdGUoKSkgewotICAgICAgb2ZmZXJpbmdQQy5h
ZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0IGZvciBvbmUg
ZnJhbWUgb2YgdGhlIGNvcnJlY3Qgc2l6ZSB0byBiZSBkZWxpdmVyZWQuCi0gICAgLy8gT3RoZXJ3
aXNlIHdlIGNvdWxkIGdldCBhIGR1bW15IGJsYWNrIGZyYW1lIG9mIHVuZXhwY3RlZCBzaXplIHdo
ZW4gdGhlCi0gICAgLy8gdmlkZW8gdHJhY2sgaXMgcmVtb3ZlZC4KLSAgICBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RGcmFtZXNEZWxpdmVyZWQoMSk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRp
b25zLmV4cGVjdEZyYW1lc0RlbGl2ZXJlZCgxKTsKLQotICAgIGFzc2VydFRydWUob2ZmZXJpbmdF
eHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9T
RUNPTkRTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShhbnN3ZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZvckFs
bEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHMoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGUuU1RBQkxFLCBvZmZlcmluZ1BD
LnNpZ25hbGluZ1N0YXRlKCkpOwotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlvbi5TaWdu
YWxpbmdTdGF0ZS5TVEFCTEUsIGFuc3dlcmluZ1BDLnNpZ25hbGluZ1N0YXRlKCkpOwotCi0gICAg
Ly8gTm93IGRvIGFub3RoZXIgbmVnb3RpYXRpb24sIHJlbW92aW5nIHRoZSB2aWRlbyB0cmFjayBm
cm9tIG9uZSBwZWVyLgotICAgIC8vIFRoaXMgcHJldmlvdXNseSBjYXVzZWQgYSBjcmFzaCBvbiBw
Yy5kaXNwb3NlKCkuCi0gICAgLy8gU2VlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2Vi
cnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NTEyOAotICAgIFZpZGVvVHJhY2sgb2ZmZXJlclZpZGVvVHJh
Y2sgPSBvTE1TLmdldCgpLnZpZGVvVHJhY2tzLmdldCgwKTsKLSAgICAvLyBOb3RlIHRoYXQgd2hl
biB3ZSBjYWxsIHJlbW92ZVRyYWNrLCB3ZSByZWdhaW4gcmVzcG9uc2liaWxpdHkgZm9yCi0gICAg
Ly8gZGlzcG9zaW5nIG9mIHRoZSB0cmFjay4KLSAgICBvTE1TLmdldCgpLnJlbW92ZVRyYWNrKG9m
ZmVyZXJWaWRlb1RyYWNrKTsKLQotICAgIC8vIENyZWF0ZSBvZmZlci4KLSAgICBzZHBMYXRjaCA9
IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdQQy5jcmVhdGVPZmZlcihzZHBM
YXRjaCwgbmV3IE1lZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5h
d2FpdCgpKTsKLSAgICBvZmZlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVx
dWFscyhvZmZlclNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5PRkZFUik7Ci0gICAg
YXNzZXJ0RmFsc2Uob2ZmZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIC8vIFNl
dCBsb2NhbCBkZXNjcmlwdGlvbiBmb3Igb2ZmZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBP
YnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5n
Q2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfTE9DQUxfT0ZGRVIpOwotICAgIG9mZmVyaW5nUEMu
c2V0TG9jYWxEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUo
c2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0K
LSAgICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZvciBhbnN3ZXJlci4KLSAgICBzZHBMYXRj
aCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4
cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX1JFTU9URV9PRkZFUik7Ci0g
ICAgYW5zd2VyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsK
LSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0
Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuc3dlci4KLSAgICBzZHBMYXRjaCA9IG5l
dyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nUEMuY3JlYXRlQW5zd2VyKHNkcExh
dGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3
YWl0KCkpOwotICAgIGFuc3dlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVx
dWFscyhhbnN3ZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSKTsKLSAg
ICBhc3NlcnRGYWxzZShhbnN3ZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIC8v
IFNldCBsb2NhbCBkZXNjcmlwdGlvbiBmb3IgYW5zd2VyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcg
U2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWdu
YWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRM
b2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2Rw
TGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAg
ICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0g
bmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RT
aWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBvZmZlcmluZ1BDLnNl
dFJlbW90ZURlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUo
c2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0K
LSAgICAvLyBNYWtlIHN1cmUgdGhlIHRyYWNrIHdhcyByZWFsbHkgcmVtb3ZlZC4KLSAgICAvLyBU
T0RPKGRlYWRiZWVmKTogQ3VycmVudGx5IHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSB2aWRl
byB0cmFjaydzCi0gICAgLy8gc3RhdGUgd2lsbCBiZSBzZXQgdG8gImVuZGVkIi4gSG93ZXZlciwg
aW4gdGhlIGZ1dHVyZSwgaXQncyBsaWtlbHkgdGhhdAotICAgIC8vIHRoZSB2aWRlbyB0cmFjayB3
aWxsIGJlIGNvbXBsZXRlbHkgcmVtb3ZlZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtCi0gICAgLy8g
KGFzIGl0IGlzIG9uIHRoZSBDKysgbGV2ZWwpLgotICAgIE1lZGlhU3RyZWFtIGFSTVMgPSBhbnN3
ZXJpbmdFeHBlY3RhdGlvbnMuZ290UmVtb3RlU3RyZWFtcy5pdGVyYXRvcigpLm5leHQoKTsKLSAg
ICBhc3NlcnRFcXVhbHMoYVJNUy52aWRlb1RyYWNrcy5nZXQoMCkuc3RhdGUoKSwgTWVkaWFTdHJl
YW1UcmFjay5TdGF0ZS5FTkRFRCk7Ci0KLSAgICAvLyBGaW5hbGx5LCByZW1vdmUgdGhlIGF1ZGlv
IHRyYWNrIGFzIHdlbGwsIHdoaWNoIHNob3VsZCBjb21wbGV0ZWx5IHJlbW92ZQotICAgIC8vIHRo
ZSByZW1vdGUgc3RyZWFtLiBUaGlzIHVzZWQgdG8gdHJpZ2dlciBhbiBhc3NlcnQuCi0gICAgLy8g
U2VlOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9
NTEyOAotICAgIEF1ZGlvVHJhY2sgb2ZmZXJlckF1ZGlvVHJhY2sgPSBvTE1TLmdldCgpLmF1ZGlv
VHJhY2tzLmdldCgwKTsKLSAgICBvTE1TLmdldCgpLnJlbW92ZVRyYWNrKG9mZmVyZXJBdWRpb1Ry
YWNrKTsKLQotICAgIC8vIENyZWF0ZSBvZmZlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNl
cnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdQQy5jcmVhdGVPZmZlcihzZHBMYXRjaCwgbmV3IE1l
ZGlhQ29uc3RyYWludHMoKSk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAg
ICBvZmZlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFscyhvZmZlclNk
cC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5PRkZFUik7Ci0gICAgYXNzZXJ0RmFsc2Uo
b2ZmZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIC8vIFNldCBsb2NhbCBkZXNj
cmlwdGlvbiBmb3Igb2ZmZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNo
KCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25h
bGluZ1N0YXRlLkhBVkVfTE9DQUxfT0ZGRVIpOwotICAgIG9mZmVyaW5nUEMuc2V0TG9jYWxEZXNj
cmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdh
aXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAvLyBTZXQg
cmVtb3RlIGRlc2NyaXB0aW9uIGZvciBhbnN3ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBP
YnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGlu
Z0NoYW5nZShTaWduYWxpbmdTdGF0ZS5IQVZFX1JFTU9URV9PRkZFUik7Ci0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFJlbW92ZVN0cmVhbSgib2ZmZXJlZE1lZGlhU3RyZWFtIik7Ci0g
ICAgYW5zd2VyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsK
LSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2RwTGF0
Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gQ3JlYXRlIGFuc3dlci4KLSAgICBzZHBMYXRjaCA9IG5l
dyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgYW5zd2VyaW5nUEMuY3JlYXRlQW5zd2VyKHNkcExh
dGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3
YWl0KCkpOwotICAgIGFuc3dlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVx
dWFscyhhbnN3ZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSKTsKLSAg
ICBhc3NlcnRGYWxzZShhbnN3ZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIC8v
IFNldCBsb2NhbCBkZXNjcmlwdGlvbiBmb3IgYW5zd2VyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcg
U2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWdu
YWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRM
b2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2Rw
TGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAg
ICAvLyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0g
bmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RT
aWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBvZmZlcmluZ1BDLnNl
dFJlbW90ZURlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUo
c2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0K
LSAgICAvLyBNYWtlIHN1cmUgdGhlIHN0cmVhbSB3YXMgcmVhbGx5IHJlbW92ZWQuCi0gICAgYXNz
ZXJ0VHJ1ZShhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZ290UmVtb3RlU3RyZWFtcy5pc0VtcHR5KCkp
OwotCi0gICAgLy8gRnJlZSB0aGUgSmF2YS1sYW5kIG9iamVjdHMgYW5kIGNvbGxlY3QgdGhlbS4K
LSAgICBzaHV0ZG93blBDKG9mZmVyaW5nUEMsIG9mZmVyaW5nRXhwZWN0YXRpb25zKTsKLSAgICBv
ZmZlcmluZ1BDID0gbnVsbDsKLSAgICBzaHV0ZG93blBDKGFuc3dlcmluZ1BDLCBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMpOwotICAgIGFuc3dlcmluZ1BDID0gbnVsbDsKLSAgICBvZmZlcmVyVmlkZW9U
cmFjay5kaXNwb3NlKCk7Ci0gICAgb2ZmZXJlckF1ZGlvVHJhY2suZGlzcG9zZSgpOwotICAgIHZp
ZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICB2aWRlb0NhcHR1cmVyLmRpc3Bvc2UoKTsK
LSAgICB2aWRlb1NvdXJjZS5kaXNwb3NlKCk7Ci0gICAgZmFjdG9yeS5kaXNwb3NlKCk7Ci0gICAg
U3lzdGVtLmdjKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyB2b2lkIGdldE1ldHJpY3MoKSB7
Ci0gICAgTWV0cmljcyBtZXRyaWNzID0gTWV0cmljcy5nZXRBbmRSZXNldCgpOwotICAgIGFzc2Vy
dFRydWUobWV0cmljcy5tYXAuc2l6ZSgpID4gMCk7Ci0gICAgLy8gVGVzdCBmb3IgZXhhbXBsZSB0
aGF0IHRoZSBsaWZldGltZSBvZiBhIENhbGwgaXMgcmVjb3JkZWQuCi0gICAgU3RyaW5nIG5hbWUg
PSAiV2ViUlRDLkNhbGwuTGlmZXRpbWVJblNlY29uZHMiOwotICAgIGFzc2VydFRydWUobWV0cmlj
cy5tYXAuY29udGFpbnNLZXkobmFtZSkpOwotICAgIEhpc3RvZ3JhbUluZm8gaW5mbyA9IG1ldHJp
Y3MubWFwLmdldChuYW1lKTsKLSAgICBhc3NlcnRUcnVlKGluZm8uc2FtcGxlcy5zaXplKCkgPiAw
KTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgc2h1dGRvd25QQyhQZWVyQ29ubmVjdGlv
biBwYywgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgZXhwZWN0YXRpb25zKSB7Ci0gICAgaWYgKGV4cGVj
dGF0aW9ucy5kYXRhQ2hhbm5lbCAhPSBudWxsKSB7Ci0gICAgICBleHBlY3RhdGlvbnMuZGF0YUNo
YW5uZWwudW5yZWdpc3Rlck9ic2VydmVyKCk7Ci0gICAgICBleHBlY3RhdGlvbnMuZGF0YUNoYW5u
ZWwuZGlzcG9zZSgpOwotICAgIH0KLSAgICBleHBlY3RhdGlvbnMuZXhwZWN0U3RhdHNDYWxsYmFj
aygpOwotICAgIGFzc2VydFRydWUocGMuZ2V0U3RhdHMoZXhwZWN0YXRpb25zLCBudWxsKSk7Ci0g
ICAgYXNzZXJ0VHJ1ZShleHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRp
c2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0gICAgZXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5l
Y3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNMT1NFRCk7Ci0gICAgZXhwZWN0YXRpb25z
LmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZS5DTE9TRUQpOwotICAgIHBjLmNs
b3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZShleHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9u
c1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0gICAgZXhwZWN0YXRpb25zLmV4cGVj
dFN0YXRzQ2FsbGJhY2soKTsKLSAgICBhc3NlcnRUcnVlKHBjLmdldFN0YXRzKGV4cGVjdGF0aW9u
cywgbnVsbCkpOwotICAgIGFzc2VydFRydWUoZXhwZWN0YXRpb25zLndhaXRGb3JBbGxFeHBlY3Rh
dGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykpOwotCi0gICAgU3lzdGVtLm91dC5w
cmludGxuKCJGWUkgc3RhdHM6ICIpOwotICAgIGludCByZXBvcnRJbmRleCA9IC0xOwotICAgIGZv
ciAoU3RhdHNSZXBvcnRbXSByZXBvcnRzIDogZXhwZWN0YXRpb25zLnRha2VTdGF0c1JlcG9ydHMo
KSkgewotICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIgUmVwb3J0ICMiICsgKCsrcmVwb3J0SW5k
ZXgpKTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVwb3J0cy5sZW5ndGg7ICsraSkgewot
ICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIiAgIiArIHJlcG9ydHNbaV0udG9TdHJpbmcoKSk7
Ci0gICAgICB9Ci0gICAgfQotICAgIGFzc2VydEVxdWFscygxLCByZXBvcnRJbmRleCk7Ci0gICAg
U3lzdGVtLm91dC5wcmludGxuKCJFbmQgc3RhdHMuIik7Ci0KLSAgICBwYy5kaXNwb3NlKCk7Ci0g
IH0KLQotICAvLyBSZXR1cm5zIGEgc2V0IG9mIHRocmVhZCBJRHMgYmVsb25naW5nIHRvIHRoaXMg
cHJvY2VzcywgYXMgU3RyaW5ncy4KLSAgcHJpdmF0ZSBzdGF0aWMgVHJlZVNldDxTdHJpbmc+IGFs
bFRocmVhZHMoKSB7Ci0gICAgVHJlZVNldDxTdHJpbmc+IHRocmVhZHMgPSBuZXcgVHJlZVNldDxT
dHJpbmc+KCk7Ci0gICAgLy8gVGhpcyBwb2tlcyBhdCAvcHJvYyBpbnN0ZWFkIG9mIHVzaW5nIHRo
ZSBKYXZhIEFQSXMgYmVjYXVzZSB3ZSdyZSBhbHNvCi0gICAgLy8gbG9va2luZyBmb3IgbGliamlu
Z2xlL3dlYnJ0YyBuYXRpdmUgdGhyZWFkcywgbW9zdCBvZiB3aGljaCB3b24ndCBoYXZlCi0gICAg
Ly8gYXR0YWNoZWQgdG8gdGhlIEpWTS4KLSAgICBmb3IgKFN0cmluZyB0aHJlYWRJZCA6IChuZXcg
RmlsZSgiL3Byb2Mvc2VsZi90YXNrIikpLmxpc3QoKSkgewotICAgICAgdGhyZWFkcy5hZGQodGhy
ZWFkSWQpOwotICAgIH0KLSAgICByZXR1cm4gdGhyZWFkczsKLSAgfQotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMv
b3JnL3dlYnJ0Yy9SZW5kZXJlckNvbW1vblRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvd2VicnRjL1JlbmRlcmVyQ29tbW9uVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMTgzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsK
LQotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlLio7
Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb24uZ2V0RGlzcGxheVNpemU7
Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb24uZ2V0TGF5b3V0TWF0cml4
OwotaW1wb3J0IHN0YXRpYyBvcmcud2VicnRjLlJlbmRlcmVyQ29tbW9uLnJvdGF0ZVRleHR1cmVN
YXRyaXg7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlBvaW50OwotaW1wb3J0IGFuZHJvaWQu
dGVzdC5BY3Rpdml0eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5Nb3JlQXNzZXJ0czsK
LWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0Owot
Ci1wdWJsaWMgZmluYWwgY2xhc3MgUmVuZGVyZXJDb21tb25UZXN0IGV4dGVuZHMgQWN0aXZpdHlU
ZXN0Q2FzZSB7Ci0gIEBTbWFsbFRlc3QKLSAgc3RhdGljIHB1YmxpYyB2b2lkIHRlc3REaXNwbGF5
U2l6ZU5vRnJhbWUoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlz
cGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgMC4wZiwgMCwgMCkpOwotICAgIGFzc2VydEVxdWFs
cyhuZXcgUG9pbnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCAwLjBm
LCAwLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlzcGxheVNp
emUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCAwLjBmLCAwLCAwKSk7Ci0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0RGlzcGxheVNpemVEZWdlbmVyYXRlQXNwZWN0
UmF0aW8oKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNw
bGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAwLjBmLCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRF
cXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9G
SUxMLCAwLjBmLCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDEyODAs
IDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMC4wZiwgMTI4MCwg
NzIwKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0WmVy
b0Rpc3BsYXlTaXplKCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMCwgMCksIGdldERp
c3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDE2LjBmIC8gOSwgMCwgMCkpOwotICAgIGFzc2Vy
dEVxdWFscyhuZXcgUG9pbnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxM
LCAxNi4wZiAvIDksIDAsIDApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDAsIDApLCBn
ZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5DRUQsIDE2LjBmIC8gOSwgMCwgMCkpOwot
ICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdERpc3BsYXlTaXpl
UGVyZmVjdEZpdCgpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdl
dERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDE2LjBmIC8gOSwgMTI4MCwgNzIwKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FM
RV9BU1BFQ1RfRklMTCwgMTYuMGYgLyA5LCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMo
bmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNF
RCwgMTYuMGYgLyA5LCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDcy
MCwgMTI4MCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDkuMGYgLyAxNiwgNzIw
LCAxMjgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDEyODApLCBnZXREaXNw
bGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgOS4wZiAvIDE2LCA3MjAsIDEyODApKTsKLSAgICBh
c3NlcnRFcXVhbHMobmV3IFBvaW50KDcyMCwgMTI4MCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FT
UEVDVF9CQUxBTkNFRCwgOS4wZiAvIDE2LCA3MjAsIDEyODApKTsKLSAgfQotCi0gIEBTbWFsbFRl
c3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RMYW5kc2NhcGVWaWRlb0luUG9ydHJhaXREaXNw
bGF5KCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCA0MDUpLCBnZXREaXNwbGF5
U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCAxNi4wZiAvIDksIDcyMCwgMTI4MCkpOwotICAgIGFzc2Vy
dEVxdWFscyhuZXcgUG9pbnQoNzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNU
X0ZJTEwsIDE2LjBmIC8gOSwgNzIwLCAxMjgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2lu
dCg3MjAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgMTYuMGYg
LyA5LCA3MjAsIDEyODApKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3RQb3J0cmFpdFZpZGVvSW5MYW5kc2NhcGVEaXNwbGF5KCkgewotICAgIGFzc2VydEVx
dWFscyhuZXcgUG9pbnQoNDA1LCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklU
LCA5LjBmIC8gMTYsIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4
MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDkuMGYgLyAxNiwgMTI4
MCwgNzIwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAsIDcyMCksIGdldERpc3Bs
YXlTaXplKFNDQUxFX0FTUEVDVF9CQUxBTkNFRCwgOS4wZiAvIDE2LCAxMjgwLCA3MjApKTsKLSAg
fQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RGb3VyVG9UaHJlZVZp
ZGVvSW5TaXh0ZWVuVG9OaW5lRGlzcGxheSgpIHsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50
KDk2MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJVCwgNC4wZiAvIDMsIDEy
ODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlz
cGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDQuMGYgLyAzLCAxMjgwLCA3MjApKTsKLSAgICBh
c3NlcnRFcXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FT
UEVDVF9CQUxBTkNFRCwgNC4wZiAvIDMsIDEyODAsIDcyMCkpOwotICB9Ci0KLSAgLy8gT25seSBr
ZWVwIDIgcm91bmRlZCBkZWNpbWFscyB0byBtYWtlIGZsb2F0IGNvbXBhcmlzb24gcm9idXN0Lgot
ICBwcml2YXRlIHN0YXRpYyBkb3VibGVbXSByb3VuZChmbG9hdFtdIGFycmF5KSB7Ci0gICAgYXNz
ZXJ0RXF1YWxzKDE2LCBhcnJheS5sZW5ndGgpOwotICAgIGZpbmFsIGRvdWJsZVtdIGRvdWJsZUFy
cmF5ID0gbmV3IGRvdWJsZVsxNl07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgKytpKSB7
Ci0gICAgICBkb3VibGVBcnJheVtpXSA9IE1hdGgucm91bmQoMTAwICogYXJyYXlbaV0pIC8gMTAw
LjA7Ci0gICAgfQotICAgIHJldHVybiBkb3VibGVBcnJheTsKLSAgfQotCi0gIC8vIEJyaWVmIHN1
bW1hcnkgYWJvdXQgbWF0cml4IHRyYW5zZm9ybWF0aW9uczoKLSAgLy8gQSBjb29yZGluYXRlIHAg
PSBbdSwgdiwgMCwgMV0gaXMgdHJhbnNmb3JtZWQgYnkgbWF0cml4IG0gbGlrZSB0aGlzIHAnID0g
W3UnLCB2JywgMCwgMV0gPSBtICogcC4KLSAgLy8gT3BlbkdMIHVzZXMgY29sdW1uLW1ham9yIG9y
ZGVyLCBzbzoKLSAgLy8gdScgPSB1ICogbVswXSArIHYgKiBtWzRdICsgbVsxMl0uCi0gIC8vIHYn
ID0gdSAqIG1bMV0gKyB2ICogbVs1XSArIG1bMTNdLgotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHN0YXRpYyB2b2lkIHRlc3RMYXlvdXRNYXRyaXhEZWZhdWx0KCkgewotICAgIGZpbmFsIGZsb2F0
IGxheW91dE1hdHJpeFtdID0gZ2V0TGF5b3V0TWF0cml4KGZhbHNlLCAxLjBmLCAxLjBmKTsKLSAg
ICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSB1LgotICAgIC8vIHYnID0gdi4KLSAgICAvLyBjbGFu
Zy1mb3JtYXQgb2ZmCi0gICAgTW9yZUFzc2VydHMuYXNzZXJ0RXF1YWxzKG5ldyBkb3VibGVbXSB7
Ci0gICAgICAgIDEsIDAsIDAsIDAsCi0gICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAgIDAsIDAs
IDEsIDAsCi0gICAgICAgIDAsIDAsIDAsIDF9LCByb3VuZChsYXlvdXRNYXRyaXgpKTsKLSAgICAv
LyBjbGFuZy1mb3JtYXQgb24KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3RMYXlvdXRNYXRyaXhNaXJyb3IoKSB7Ci0gICAgZmluYWwgZmxvYXQgbGF5b3V0TWF0
cml4W10gPSBnZXRMYXlvdXRNYXRyaXgodHJ1ZSwgMS4wZiwgMS4wZik7Ci0gICAgLy8gQXNzZXJ0
OgotICAgIC8vIHUnID0gMSAtIHUuCi0gICAgLy8gdicgPSB2LgotICAgIC8vIGNsYW5nLWZvcm1h
dCBvZmYKLSAgICBNb3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMobmV3IGRvdWJsZVtdIHsKLSAgICAg
ICAgLTEsIDAsIDAsIDAsCi0gICAgICAgICAwLCAxLCAwLCAwLAotICAgICAgICAgMCwgMCwgMSwg
MCwKLSAgICAgICAgIDEsIDAsIDAsIDF9LCByb3VuZChsYXlvdXRNYXRyaXgpKTsKLSAgICAvLyBj
bGFuZy1mb3JtYXQgb24KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lk
IHRlc3RMYXlvdXRNYXRyaXhTY2FsZSgpIHsKLSAgICAvLyBWaWRlbyBoYXMgYXNwZWN0IHJhdGlv
IDIsIGJ1dCBsYXlvdXQgaXMgc3F1YXJlLiBUaGlzIHdpbGwgY2F1c2Ugb25seSB0aGUgY2VudGVy
IHBhcnQgb2YgdGhlCi0gICAgLy8gdmlkZW8gdG8gYmUgdmlzaWJsZSwgaS5lLiB0aGUgdSBjb29y
ZGluYXRlIHdpbGwgZ28gZnJvbSAwLjI1IHRvIDAuNzUgaW5zdGVhZCBvZiBmcm9tIDAgdG8gMS4K
LSAgICBmaW5hbCBmbG9hdCBsYXlvdXRNYXRyaXhbXSA9IGdldExheW91dE1hdHJpeChmYWxzZSwg
Mi4wZiwgMS4wZik7Ci0gICAgLy8gQXNzZXJ0OgotICAgIC8vIHUnID0gMC4yNSArIDAuNSB1Lgot
ICAgIC8vIHYnID0gdi4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgTW9yZUFzc2VydHMu
YXNzZXJ0RXF1YWxzKG5ldyBkb3VibGVbXSB7Ci0gICAgICAgICAwLjUsIDAsIDAsIDAsCi0gICAg
ICAgICAgIDAsIDEsIDAsIDAsCi0gICAgICAgICAgIDAsIDAsIDEsIDAsCi0gICAgICAgIDAuMjUs
IDAsIDAsIDF9LCByb3VuZChsYXlvdXRNYXRyaXgpKTsKLSAgICAvLyBjbGFuZy1mb3JtYXQgb24K
LSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RSb3RhdGVUZXh0
dXJlTWF0cml4RGVmYXVsdCgpIHsKLSAgICAvLyBUZXN0IHRoYXQgcm90YXRpb24gd2l0aCAwIGRl
Z3JlZXMgcmV0dXJucyBhbiBpZGVudGljYWwgbWF0cml4LgotICAgIC8vIGNsYW5nLWZvcm1hdCBv
ZmYKLSAgICBmaW5hbCBmbG9hdFtdIG1hdHJpeCA9IG5ldyBmbG9hdFtdIHsKLSAgICAgICAgMSwg
MiwgMywgNCwKLSAgICAgICAgNSwgNiwgNywgOCwKLSAgICAgICAgOSwgMCwgMSwgMiwKLSAgICAg
ICAgMywgNCwgNSwgNgotICAgIH07Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gICAgZmluYWwg
ZmxvYXQgcm90YXRlZE1hdHJpeFtdID0gcm90YXRlVGV4dHVyZU1hdHJpeChtYXRyaXgsIDApOwot
ICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFscyhyb3VuZChtYXRyaXgpLCByb3VuZChyb3RhdGVk
TWF0cml4KSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0
Um90YXRlVGV4dHVyZU1hdHJpeDkwRGVnKCkgewotICAgIGZpbmFsIGZsb2F0IHNhbXBsaW5nTWF0
cml4W10gPSByb3RhdGVUZXh0dXJlTWF0cml4KFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4
KCksIDkwKTsKLSAgICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSAxIC0gdi4KLSAgICAvLyB2JyA9
IHUuCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFs
cyhuZXcgZG91YmxlW10gewotICAgICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgLTEsIDAsIDAs
IDAsCi0gICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgMSwgMCwgMCwgMX0sIHJvdW5kKHNh
bXBsaW5nTWF0cml4KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0Um90YXRlVGV4dHVyZU1hdHJpeDE4MERlZygp
IHsKLSAgICBmaW5hbCBmbG9hdCBzYW1wbGluZ01hdHJpeFtdID0gcm90YXRlVGV4dHVyZU1hdHJp
eChSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpLCAxODApOwotICAgIC8vIEFzc2VydDoK
LSAgICAvLyB1JyA9IDEgLSB1LgotICAgIC8vIHYnID0gMSAtIHYuCi0gICAgLy8gY2xhbmctZm9y
bWF0IG9mZgotICAgIE1vcmVBc3NlcnRzLmFzc2VydEVxdWFscyhuZXcgZG91YmxlW10gewotICAg
ICAgICAtMSwgIDAsIDAsIDAsCi0gICAgICAgICAwLCAtMSwgMCwgMCwKLSAgICAgICAgIDAsICAw
LCAxLCAwLAotICAgICAgICAgMSwgIDEsIDAsIDF9LCByb3VuZChzYW1wbGluZ01hdHJpeCkpOwot
ICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1
cmZhY2VUZXh0dXJlSGVscGVyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJy
dGMvU3VyZmFjZVRleHR1cmVIZWxwZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMv
c3JjL29yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0ODkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3MuU3VyZmFjZVRleHR1cmU7Ci1pbXBvcnQgYW5k
cm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBv
cnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1
aXRlYnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1
aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0IGphdmEubmlvLkJ5dGVC
dWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnREb3duTGF0Y2g7Ci0KLXB1
YmxpYyBmaW5hbCBjbGFzcyBTdXJmYWNlVGV4dHVyZUhlbHBlclRlc3QgZXh0ZW5kcyBBY3Rpdml0
eVRlc3RDYXNlIHsKLSAgLyoqCi0gICAqIE1vY2sgdGV4dHVyZSBsaXN0ZW5lciB3aXRoIGJsb2Nr
aW5nIHdhaXQgZnVuY3Rpb25hbGl0eS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xh
c3MgTW9ja1RleHR1cmVMaXN0ZW5lcgotICAgICAgaW1wbGVtZW50cyBTdXJmYWNlVGV4dHVyZUhl
bHBlci5PblRleHR1cmVGcmFtZUF2YWlsYWJsZUxpc3RlbmVyIHsKLSAgICBwdWJsaWMgaW50IG9l
c1RleHR1cmVJZDsKLSAgICBwdWJsaWMgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXg7Ci0gICAgcHJp
dmF0ZSBib29sZWFuIGhhc05ld0ZyYW1lID0gZmFsc2U7Ci0gICAgLy8gVGhyZWFkIHdoZXJlIGZy
YW1lcyBhcmUgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQgb24uCi0gICAgcHJpdmF0ZSBmaW5hbCBU
aHJlYWQgZXhwZWN0ZWRUaHJlYWQ7Ci0KLSAgICBNb2NrVGV4dHVyZUxpc3RlbmVyKCkgewotICAg
ICAgdGhpcy5leHBlY3RlZFRocmVhZCA9IG51bGw7Ci0gICAgfQotCi0gICAgTW9ja1RleHR1cmVM
aXN0ZW5lcihUaHJlYWQgZXhwZWN0ZWRUaHJlYWQpIHsKLSAgICAgIHRoaXMuZXhwZWN0ZWRUaHJl
YWQgPSBleHBlY3RlZFRocmVhZDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
c3luY2hyb25pemVkIHZvaWQgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoCi0gICAgICAgIGludCBv
ZXNUZXh0dXJlSWQsIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBsb25nIHRpbWVzdGFtcE5zKSB7
Ci0gICAgICBpZiAoZXhwZWN0ZWRUaHJlYWQgIT0gbnVsbCAmJiBUaHJlYWQuY3VycmVudFRocmVh
ZCgpICE9IGV4cGVjdGVkVGhyZWFkKSB7Ci0gICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVF
eGNlcHRpb24oIm9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlIGNhbGxlZCBvbiB3cm9uZyB0aHJlYWQu
Iik7Ci0gICAgICB9Ci0gICAgICB0aGlzLm9lc1RleHR1cmVJZCA9IG9lc1RleHR1cmVJZDsKLSAg
ICAgIHRoaXMudHJhbnNmb3JtTWF0cml4ID0gdHJhbnNmb3JtTWF0cml4OwotICAgICAgaGFzTmV3
RnJhbWUgPSB0cnVlOwotICAgICAgbm90aWZ5QWxsKCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogV2FpdCBpbmRlZmluaXRlbHkgZm9yIGEgbmV3IGZyYW1lLgotICAgICAqLwotICAgIHB1Ymxp
YyBzeW5jaHJvbml6ZWQgdm9pZCB3YWl0Rm9yTmV3RnJhbWUoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgICAgd2hpbGUgKCFoYXNOZXdGcmFtZSkgewotICAgICAgICB3YWl0KCk7
Ci0gICAgICB9Ci0gICAgICBoYXNOZXdGcmFtZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8qKgot
ICAgICAqIFdhaXQgZm9yIGEgbmV3IGZyYW1lLCBvciB1bnRpbCB0aGUgc3BlY2lmaWVkIHRpbWVv
dXQgZWxhcHNlcy4gUmV0dXJucyB0cnVlIGlmIGEgbmV3IGZyYW1lIHdhcwotICAgICAqIHJlY2Vp
dmVkIGJlZm9yZSB0aGUgdGltZW91dC4KLSAgICAgKi8KLSAgICBwdWJsaWMgc3luY2hyb25pemVk
IGJvb2xlYW4gd2FpdEZvck5ld0ZyYW1lKGZpbmFsIGxvbmcgdGltZW91dE1zKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgZmluYWwgbG9uZyBzdGFydFRpbWVNcyA9IFN5c3Rl
bUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgbG9uZyB0aW1lUmVtYWluaW5nTXMgPSB0
aW1lb3V0TXM7Ci0gICAgICB3aGlsZSAoIWhhc05ld0ZyYW1lICYmIHRpbWVSZW1haW5pbmdNcyA+
IDApIHsKLSAgICAgICAgd2FpdCh0aW1lUmVtYWluaW5nTXMpOwotICAgICAgICBmaW5hbCBsb25n
IGVsYXBzZWRUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIHN0YXJ0VGlt
ZU1zOwotICAgICAgICB0aW1lUmVtYWluaW5nTXMgPSB0aW1lb3V0TXMgLSBlbGFwc2VkVGltZU1z
OwotICAgICAgfQotICAgICAgZmluYWwgYm9vbGVhbiBkaWRSZWNlaXZlRnJhbWUgPSBoYXNOZXdG
cmFtZTsKLSAgICAgIGhhc05ld0ZyYW1lID0gZmFsc2U7Ci0gICAgICByZXR1cm4gZGlkUmVjZWl2
ZUZyYW1lOwotICAgIH0KLSAgfQotCi0gIC8qKiBBc3NlcnQgdGhhdCB0d28gaW50ZWdlcnMgYXJl
IGNsb3NlLCB3aXRoIGRpZmZlcmVuY2UgYXQgbW9zdAotICAgKiB7QGNvZGUgdGhyZXNob2xkfS4g
Ki8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydENsb3NlKGludCB0aHJlc2hvbGQsIGludCBl
eHBlY3RlZCwgaW50IGFjdHVhbCkgewotICAgIGlmIChNYXRoLmFicyhleHBlY3RlZCAtIGFjdHVh
bCkgPD0gdGhyZXNob2xkKQotICAgICAgcmV0dXJuOwotICAgIGZhaWxOb3RFcXVhbHMoIk5vdCBj
bG9zZSBlbm91Z2gsIHRocmVzaG9sZCAiICsgdGhyZXNob2xkLCBleHBlY3RlZCwgYWN0dWFsKTsK
LSAgfQotCi0gIC8qKgotICAgKiBUZXN0IG5vcm1hbCB1c2UgYnkgcmVjZWl2aW5nIHRocmVlIHVu
aWZvcm0gdGV4dHVyZSBmcmFtZXMuIFRleHR1cmUgZnJhbWVzIGFyZSByZXR1cm5lZCBhcyBlYXJs
eQotICAgKiBhcyBwb3NzaWJsZS4gVGhlIHRleHR1cmUgcGl4ZWwgdmFsdWVzIGFyZSBpbnNwZWN0
ZWQgYnkgZHJhd2luZyB0aGUgdGV4dHVyZSBmcmFtZSB0byBhIHBpeGVsCi0gICAqIGJ1ZmZlciBh
bmQgcmVhZGluZyBpdCBiYWNrIHdpdGggZ2xSZWFkUGl4ZWxzKCkuCi0gICAqLwotICBATWVkaXVt
VGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFRocmVlQ29uc3RhbnRDb2xvckZyYW1lcygp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0gMTY7
Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IDE2OwotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRo
IGEgcGl4ZWwgYnVmZmVyIGFzIGRpc3BsYXkgb3V0cHV0LgotICAgIGZpbmFsIEVnbEJhc2UgZWds
QmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7
Ci0gICAgZWdsQmFzZS5jcmVhdGVQYnVmZmVyU3VyZmFjZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICBm
aW5hbCBHbFJlY3REcmF3ZXIgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotCi0gICAgLy8g
Q3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBTdXJm
YWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9IFN1cmZhY2VUZXh0dXJlSGVs
cGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVh
ZE5hbWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAgZmluYWwgTW9ja1Rl
eHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAg
c3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAgIHN1cmZh
Y2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkuc2V0RGVmYXVsdEJ1ZmZlclNpemUo
d2lkdGgsIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVzb3VyY2VzIGZvciBzdHViYmluZyBh
biBPRVMgdGV4dHVyZSBwcm9kdWNlci4gfGVnbE9lc0Jhc2V8IGhhcyB0aGUgU3VyZmFjZVRleHR1
cmUgaW4KLSAgICAvLyB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8IGFzIHRoZSB0YXJnZXQgRUdMU3Vy
ZmFjZS4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbE9lc0Jhc2UgPSBFZ2xCYXNlLmNyZWF0ZShlZ2xC
YXNlLmdldEVnbEJhc2VDb250ZXh0KCksIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBlZ2xP
ZXNCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1
cmUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbE9lc0Jhc2Uuc3VyZmFjZVdpZHRoKCksIHdpZHRo
KTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsT2VzQmFzZS5zdXJmYWNlSGVpZ2h0KCksIGhlaWdodCk7
Ci0KLSAgICBmaW5hbCBpbnQgcmVkW10gPSBuZXcgaW50W10gezc5LCAxNDQsIDE4NX07Ci0gICAg
ZmluYWwgaW50IGdyZWVuW10gPSBuZXcgaW50W10gezY2LCAyMTAsIDE2Mn07Ci0gICAgZmluYWwg
aW50IGJsdWVbXSA9IG5ldyBpbnRbXSB7MTYxLCAxMTcsIDE1OH07Ci0gICAgLy8gRHJhdyB0aHJl
ZSBmcmFtZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIC8vIERy
YXcgYSBjb25zdGFudCBjb2xvciBmcmFtZSBvbnRvIHRoZSBTdXJmYWNlVGV4dHVyZS4KLSAgICAg
IGVnbE9lc0Jhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgIEdMRVMyMC5nbENsZWFyQ29sb3IocmVk
W2ldIC8gMjU1LjBmLCBncmVlbltpXSAvIDI1NS4wZiwgYmx1ZVtpXSAvIDI1NS4wZiwgMS4wZik7
Ci0gICAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAg
ICAvLyBzd2FwQnVmZmVycygpIHdpbGwgdWx0aW1hdGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1l
QXZhaWxhYmxlKCkuCi0gICAgICBlZ2xPZXNCYXNlLnN3YXBCdWZmZXJzKCk7Ci0KLSAgICAgIC8v
IFdhaXQgZm9yIGFuIE9FUyB0ZXh0dXJlIHRvIGFycml2ZSBhbmQgZHJhdyBpdCBvbnRvIHRoZSBw
aXhlbCBidWZmZXIuCi0gICAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoKTsKLSAgICAgIGVn
bEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgIGRyYXdlci5kcmF3T2VzKAotICAgICAgICAgIGxp
c3RlbmVyLm9lc1RleHR1cmVJZCwgbGlzdGVuZXIudHJhbnNmb3JtTWF0cml4LCB3aWR0aCwgaGVp
Z2h0LCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKLQotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
cmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAgIC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4g
dGhlIHBpeGVsIGJ1ZmZlciBhcyBSR0JBLiBOb3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwg
ZS5nLgotICAgICAgLy8gTmV4dXMgOS4KLSAgICAgIGZpbmFsIEJ5dGVCdWZmZXIgcmdiYURhdGEg
PSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KHdpZHRoICogaGVpZ2h0ICogNCk7Ci0gICAgICBH
TEVTMjAuZ2xSZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIEdMRVMyMC5HTF9SR0JBLCBH
TEVTMjAuR0xfVU5TSUdORURfQllURSwgcmdiYURhdGEpOwotICAgICAgR2xVdGlsLmNoZWNrTm9H
TEVTMkVycm9yKCJnbFJlYWRQaXhlbHMiKTsKLQotICAgICAgLy8gQXNzZXJ0IHJlbmRlcmVkIGlt
YWdlIGlzIGV4cGVjdGVkIGNvbnN0YW50IGNvbG9yLgotICAgICAgd2hpbGUgKHJnYmFEYXRhLmhh
c1JlbWFpbmluZygpKSB7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4
RkYsIHJlZFtpXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYs
IGdyZWVuW2ldKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwg
Ymx1ZVtpXSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYsIDI1
NSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgZHJhd2VyLnJlbGVhc2UoKTsKLSAgICBzdXJmYWNl
VGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gIH0KLQot
ICAvKioKLSAgICogVGVzdCBkaXNwb3NpbmcgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyIHdoaWxl
IGhvbGRpbmcgYSBwZW5kaW5nIHRleHR1cmUgZnJhbWUuIFRoZSBwZW5kaW5nCi0gICAqIHRleHR1
cmUgZnJhbWUgc2hvdWxkIHN0aWxsIGJlIHZhbGlkLCBhbmQgdGhpcyBpcyB0ZXN0ZWQgYnkgZHJh
d2luZyB0aGUgdGV4dHVyZSBmcmFtZSB0byBhIHBpeGVsCi0gICAqIGJ1ZmZlciBhbmQgcmVhZGlu
ZyBpdCBiYWNrIHdpdGggZ2xSZWFkUGl4ZWxzKCkuCi0gICAqLwotICBATWVkaXVtVGVzdAotICBw
dWJsaWMgc3RhdGljIHZvaWQgdGVzdExhdGVSZXR1cm5GcmFtZSgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0gMTY7Ci0gICAgZmluYWwgaW50IGhl
aWdodCA9IDE2OwotICAgIC8vIENyZWF0ZSBFR0wgYmFzZSB3aXRoIGEgcGl4ZWwgYnVmZmVyIGFz
IGRpc3BsYXkgb3V0cHV0LgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3Jl
YXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsQmFzZS5jcmVh
dGVQYnVmZmVyU3VyZmFjZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8vIENyZWF0ZSBTdXJmYWNl
VGV4dHVyZUhlbHBlciBhbmQgbGlzdGVuZXIuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxw
ZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoCi0g
ICAgICAgICJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBlZ2xC
YXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIg
bGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBl
ci5nZXRTdXJmYWNlVGV4dHVyZSgpLnNldERlZmF1bHRCdWZmZXJTaXplKHdpZHRoLCBoZWlnaHQp
OwotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlcyBmb3Igc3R1YmJpbmcgYW4gT0VTIHRleHR1cmUg
cHJvZHVjZXIuIHxlZ2xPZXNCYXNlfCBoYXMgdGhlIFN1cmZhY2VUZXh0dXJlIGluCi0gICAgLy8g
fHN1cmZhY2VUZXh0dXJlSGVscGVyfCBhcyB0aGUgdGFyZ2V0IEVHTFN1cmZhY2UuCi0gICAgZmlu
YWwgRWdsQmFzZSBlZ2xPZXNCYXNlID0gRWdsQmFzZS5jcmVhdGUoZWdsQmFzZS5nZXRFZ2xCYXNl
Q29udGV4dCgpLCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7Ci0gICAgZWdsT2VzQmFzZS5jcmVhdGVT
dXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGFz
c2VydEVxdWFscyhlZ2xPZXNCYXNlLnN1cmZhY2VXaWR0aCgpLCB3aWR0aCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKGVnbE9lc0Jhc2Uuc3VyZmFjZUhlaWdodCgpLCBoZWlnaHQpOwotCi0gICAgZmluYWwg
aW50IHJlZCA9IDc5OwotICAgIGZpbmFsIGludCBncmVlbiA9IDY2OwotICAgIGZpbmFsIGludCBi
bHVlID0gMTYxOwotICAgIC8vIERyYXcgYSBjb25zdGFudCBjb2xvciBmcmFtZSBvbnRvIHRoZSBT
dXJmYWNlVGV4dHVyZS4KLSAgICBlZ2xPZXNCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgR0xFUzIw
LmdsQ2xlYXJDb2xvcihyZWQgLyAyNTUuMGYsIGdyZWVuIC8gMjU1LjBmLCBibHVlIC8gMjU1LjBm
LCAxLjBmKTsKLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7
Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciBvblRleHR1cmVG
cmFtZUF2YWlsYWJsZSgpLgotICAgIGVnbE9lc0Jhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAgICBlZ2xP
ZXNCYXNlLnJlbGVhc2UoKTsKLQotICAgIC8vIFdhaXQgZm9yIE9FUyB0ZXh0dXJlIGZyYW1lLgot
ICAgIGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSgpOwotICAgIC8vIERpY29ubmVjdCB3aGlsZSBo
b2xkaW5nIHRoZSBmcmFtZS4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0K
LSAgICAvLyBEcmF3IHRoZSBwZW5kaW5nIHRleHR1cmUgZnJhbWUgb250byB0aGUgcGl4ZWwgYnVm
ZmVyLgotICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICBmaW5hbCBHbFJlY3REcmF3ZXIg
ZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotICAgIGRyYXdlci5kcmF3T2VzKAotICAgICAg
ICBsaXN0ZW5lci5vZXNUZXh0dXJlSWQsIGxpc3RlbmVyLnRyYW5zZm9ybU1hdHJpeCwgd2lkdGgs
IGhlaWdodCwgMCwgMCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgZHJhd2VyLnJlbGVhc2UoKTsKLQot
ICAgIC8vIERvd25sb2FkIHRoZSBwaXhlbHMgaW4gdGhlIHBpeGVsIGJ1ZmZlciBhcyBSR0JBLiBO
b3QgYWxsIHBsYXRmb3JtcyBzdXBwb3J0IFJHQiwgZS5nLiBOZXh1cyA5LgotICAgIGZpbmFsIEJ5
dGVCdWZmZXIgcmdiYURhdGEgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KHdpZHRoICogaGVp
Z2h0ICogNCk7Ci0gICAgR0xFUzIwLmdsUmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBH
TEVTMjAuR0xfUkdCQSwgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUsIHJnYmFEYXRhKTsKLSAgICBH
bFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIpOwotICAgIGVnbEJhc2UucmVs
ZWFzZSgpOwotCi0gICAgLy8gQXNzZXJ0IHJlbmRlcmVkIGltYWdlIGlzIGV4cGVjdGVkIGNvbnN0
YW50IGNvbG9yLgotICAgIHdoaWxlIChyZ2JhRGF0YS5oYXNSZW1haW5pbmcoKSkgewotICAgICAg
YXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgcmVkKTsKLSAgICAgIGFzc2VydEVx
dWFscyhyZ2JhRGF0YS5nZXQoKSAmIDB4RkYsIGdyZWVuKTsKLSAgICAgIGFzc2VydEVxdWFscyhy
Z2JhRGF0YS5nZXQoKSAmIDB4RkYsIGJsdWUpOwotICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRh
LmdldCgpICYgMHhGRiwgMjU1KTsKLSAgICB9Ci0gICAgLy8gTGF0ZSBmcmFtZSByZXR1cm4gYWZ0
ZXIgZXZlcnl0aGluZyBoYXMgYmVlbiBkaXNwb3NlZCBhbmQgcmVsZWFzZWQuCi0gICAgc3VyZmFj
ZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0gIH0KLQotICAvKioKLSAgICog
VGVzdCBkaXNwb3NpbmcgdGhlIFN1cmZhY2VUZXh0dXJlSGVscGVyLCBidXQga2VlcCB0cnlpbmcg
dG8gcHJvZHVjZSBtb3JlIHRleHR1cmUgZnJhbWVzLiBObwotICAgKiBmcmFtZXMgc2hvdWxkIGJl
IGRlbGl2ZXJlZCB0byB0aGUgbGlzdGVuZXIuCi0gICAqLwotICBATWVkaXVtVGVzdAotICBwdWJs
aWMgc3RhdGljIHZvaWQgdGVzdERpc3Bvc2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBhbmQgbGlzdGVuZXIuCi0gICAg
ZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPQotICAgICAg
ICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3Qi
IC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIg
bGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLSAgICAvLyBDcmVhdGUgRWdsQmFzZSB3
aXRoIHRoZSBTdXJmYWNlVGV4dHVyZSBhcyB0YXJnZXQgRUdMU3VyZmFjZS4KLSAgICBmaW5hbCBF
Z2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QTEFJ
Tik7Ci0gICAgZWdsQmFzZS5jcmVhdGVTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1
cmZhY2VUZXh0dXJlKCkpOwotICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAvLyBBc3Nl
cnQgbm8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LgotICAgIGFzc2VydEZhbHNlKGxpc3Rl
bmVyLndhaXRGb3JOZXdGcmFtZSgxKSk7Ci0gICAgLy8gRHJhdyBhbmQgd2FpdCBmb3Igb25lIGZy
YW1lLgotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAg
ICAvLyBzd2FwQnVmZmVycygpIHdpbGwgdWx0aW1hdGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1l
QXZhaWxhYmxlKCkuCi0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIGxpc3RlbmVyLndh
aXRGb3JOZXdGcmFtZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVG
cmFtZSgpOwotCi0gICAgLy8gRGlzcG9zZSAtIHdlIHNob3VsZCBub3QgcmVjZWl2ZSBhbnkgdGV4
dHVyZXMgYWZ0ZXIgdGhpcy4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0K
LSAgICAvLyBEcmF3IG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09M
T1JfQlVGRkVSX0JJVCk7Ci0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIC8vIHN3YXBC
dWZmZXJzKCkgc2hvdWxkIG5vdCB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkgYmVj
YXVzZSBkaXNwb3NlZCBoYXMgYmVlbiBjYWxsZWQuCi0gICAgLy8gQXNzZXJ0IHRoYXQgbm8gT0VT
IHRleHR1cmUgd2FzIGRlbGl2ZXJlZC4KLSAgICBhc3NlcnRGYWxzZShsaXN0ZW5lci53YWl0Rm9y
TmV3RnJhbWUoNTAwKSk7Ci0KLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBUZXN0IGRpc3Bvc2luZyB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgaW1tZWRpYXRlbHkg
YWZ0ZXIgaXMgaGFzIGJlZW4gc2V0dXAgdG8gdXNlIGEKLSAgICogc2hhcmVkIGNvbnRleHQuIE5v
IGZyYW1lcyBzaG91bGQgYmUgZGVsaXZlcmVkIHRvIHRoZSBsaXN0ZW5lci4KLSAgICovCi0gIEBT
bWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3REaXNwb3NlSW1tZWRpYXRlbHkoKSB7
Ci0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPQot
ICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoIlN1cmZhY2VUZXh0dXJlSGVscGVy
IHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51bGwpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBDYWxsIHN0b3BMaXN0ZW5pbmcoKSwgYnV0
IGtlZXAgdHJ5aW5nIHRvIHByb2R1Y2UgbW9yZSB0ZXh0dXJlIGZyYW1lcy4gTm8gZnJhbWVzIHNo
b3VsZCBiZQotICAgKiBkZWxpdmVyZWQgdG8gdGhlIGxpc3RlbmVyLgotICAgKi8KLSAgQE1lZGl1
bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RTdG9wTGlzdGVuaW5nKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxwZXIg
YW5kIGxpc3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0
dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJmYWNl
VGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxsKTsKLSAgICBmaW5hbCBN
b2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsK
LSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAg
Ly8gQ3JlYXRlIEVnbEJhc2Ugd2l0aCB0aGUgU3VyZmFjZVRleHR1cmUgYXMgdGFyZ2V0IEVHTFN1
cmZhY2UuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwg
RWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNl
VGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICBlZ2xCYXNlLm1ha2VDdXJy
ZW50KCk7Ci0gICAgLy8gQXNzZXJ0IG5vIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkIHlldC4KLSAg
ICBhc3NlcnRGYWxzZShsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoMSkpOwotICAgIC8vIERyYXcg
YW5kIHdhaXQgZm9yIG9uZSBmcmFtZS4KLSAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09M
T1JfQlVGRkVSX0JJVCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSB3aWxsIHVsdGltYXRlbHkgdHJp
Z2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMo
KTsKLSAgICBsaXN0ZW5lci53YWl0Rm9yTmV3RnJhbWUoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhl
bHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgIC8vIFN0b3AgbGlzdGVuaW5nIC0gd2Ug
c2hvdWxkIG5vdCByZWNlaXZlIGFueSB0ZXh0dXJlcyBhZnRlciB0aGlzLgotICAgIHN1cmZhY2VU
ZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLQotICAgIC8vIERyYXcgb25lIGZyYW1lLgot
ICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICBlZ2xC
YXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSBzaG91bGQgbm90IHRyaWdn
ZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBiZWNhdXNlIGRpc3Bvc2VkIGhhcyBiZWVuIGNh
bGxlZC4KLSAgICAvLyBBc3NlcnQgdGhhdCBubyBPRVMgdGV4dHVyZSB3YXMgZGVsaXZlcmVkLgot
ICAgIGFzc2VydEZhbHNlKGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSg1MDApKTsKLQotICAgIHN1
cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAg
fQotCi0gIC8qKgotICAgKiBUZXN0IHN0b3BMaXN0ZW5pbmcoKSBpbW1lZGlhdGVseSBhZnRlciB0
aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgaGFzIGJlZW4gc2V0dXAuCi0gICAqLwotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0U3RvcExpc3RlbmluZ0ltbWVkaWF0ZWx5KCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVy
LmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVs
bCk7Ci0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4
dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmco
bGlzdGVuZXIpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0b3BMaXN0ZW5pbmcoKTsKLSAg
ICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVz
dCBzdG9wTGlzdGVuaW5nKCkgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIFN1cmZhY2VUZXh0dXJlSGVs
cGVyIGhhcyBiZWVuIHNldHVwIG9uIHRoZSBoYW5kbGVyCi0gICAqIHRocmVhZC4KLSAgICovCi0g
IEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RTdG9wTGlzdGVuaW5nSW1tZWRp
YXRlbHlPbkhhbmRsZXJUaHJlYWQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAg
ICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0
IiAvKiB0aHJlYWROYW1lICovLCBudWxsKTsKLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVy
IGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLQotICAgIGZpbmFsIENvdW50
RG93bkxhdGNoIHN0b3BMaXN0ZW5pbmdCYXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwot
ICAgIGZpbmFsIENvdW50RG93bkxhdGNoIHN0b3BMaXN0ZW5pbmdCYXJyaWVyRG9uZSA9IG5ldyBD
b3VudERvd25MYXRjaCgxKTsKLSAgICAvLyBTdGFydCBieSBwb3N0aW5nIHRvIHRoZSBoYW5kbGVy
IHRocmVhZCB0byBrZWVwIGl0IG9jY3VwaWVkLgotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmdl
dEhhbmRsZXIoKS5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0
aWJseShzdG9wTGlzdGVuaW5nQmFycmllcik7Ci0gICAgICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LnN0b3BMaXN0ZW5pbmcoKTsKLSAgICAgICAgc3RvcExpc3RlbmluZ0JhcnJpZXJEb25lLmNvdW50
RG93bigpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgLy8gc3RhcnRMaXN0ZW5pbmcoKSBpcyBh
c3luY2hyb25vdXMgYW5kIHdpbGwgcG9zdCB0byB0aGUgb2NjdXBpZWQgaGFuZGxlciB0aHJlYWQu
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotICAg
IC8vIFdhaXQgZm9yIHN0b3BMaXN0ZW5pbmcoKSB0byBiZSBjYWxsZWQgb24gdGhlIGhhbmRsZXIg
dGhyZWFkLgotICAgIHN0b3BMaXN0ZW5pbmdCYXJyaWVyLmNvdW50RG93bigpOwotICAgIHN0b3BM
aXN0ZW5pbmdCYXJyaWVyRG9uZS5hd2FpdCgpOwotICAgIC8vIFdhaXQgdW50aWwgaGFuZGxlciB0
aHJlYWQgaXMgaWRsZSB0byB0cnkgdG8gY2F0Y2ggbGF0ZSBzdGFydExpc3RlbmluZygpIGNhbGwu
Ci0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgx
KTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgYmFycmllci5jb3VudERvd24oKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBUaHJlYWRVdGls
cy5hd2FpdFVuaW50ZXJydXB0aWJseShiYXJyaWVyKTsKLSAgICAvLyBQcmV2aW91cyBzdGFydExp
c3RlbmluZygpIGNhbGwgc2hvdWxkIG5ldmVyIGhhdmUgdGFrZW4gcGxhY2UgYW5kIGl0IHNob3Vs
ZCBiZSBvayB0byBjYWxsIGl0Ci0gICAgLy8gYWdhaW4uCi0gICAgc3VyZmFjZVRleHR1cmVIZWxw
ZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIu
ZGlzcG9zZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgY2FsbGluZyBzdGFydExpc3Rlbmlu
ZygpIHdpdGggYSBuZXcgbGlzdGVuZXIgYWZ0ZXIgc3RvcExpc3RlbmluZygpIGhhcyBiZWVuIGNh
bGxlZC4KLSAgICovCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0UmVz
dGFydExpc3RlbmluZ1dpdGhOZXdMaXN0ZW5lcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgLy8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAg
ICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAg
ICAgIFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVz
dCIgLyogdGhyZWFkTmFtZSAqLywgbnVsbCk7Ci0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5l
ciBsaXN0ZW5lcjEgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0
dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyMSk7Ci0gICAgLy8gQ3JlYXRlIEVnbEJh
c2Ugd2l0aCB0aGUgU3VyZmFjZVRleHR1cmUgYXMgdGFyZ2V0IEVHTFN1cmZhY2UuCi0gICAgZmlu
YWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdf
UExBSU4pOwotICAgIGVnbEJhc2UuY3JlYXRlU3VyZmFjZShzdXJmYWNlVGV4dHVyZUhlbHBlci5n
ZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgLy8g
QXNzZXJ0IG5vIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkIHlldC4KLSAgICBhc3NlcnRGYWxzZShs
aXN0ZW5lcjEud2FpdEZvck5ld0ZyYW1lKDEpKTsKLSAgICAvLyBEcmF3IGFuZCB3YWl0IGZvciBv
bmUgZnJhbWUuCi0gICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQp
OwotICAgIC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJl
RnJhbWVBdmFpbGFibGUoKS4KLSAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgbGlzdGVu
ZXIxLndhaXRGb3JOZXdGcmFtZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRl
eHR1cmVGcmFtZSgpOwotCi0gICAgLy8gU3RvcCBsaXN0ZW5pbmcgLSB8bGlzdGVuZXIxfCBzaG91
bGQgbm90IHJlY2VpdmUgYW55IHRleHR1cmVzIGFmdGVyIHRoaXMuCi0gICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotCi0gICAgLy8gQ29ubmVjdCBkaWZmZXJlbnQgbGlz
dGVuZXIuCi0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lcjIgPSBuZXcgTW9j
a1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVu
aW5nKGxpc3RlbmVyMik7Ci0gICAgLy8gQXNzZXJ0IG5vIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVk
IHlldC4KLSAgICBhc3NlcnRGYWxzZShsaXN0ZW5lcjIud2FpdEZvck5ld0ZyYW1lKDEpKTsKLQot
ICAgIC8vIERyYXcgb25lIGZyYW1lLgotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xP
Ul9CVUZGRVJfQklUKTsKLSAgICBlZ2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0KLSAgICAvLyBDaGVj
ayB0aGF0IHxsaXN0ZW5lcjJ8IHJlY2VpdmVkIHRoZSBmcmFtZSwgYW5kIG5vdCB8bGlzdGVuZXIx
fC4KLSAgICBsaXN0ZW5lcjIud2FpdEZvck5ld0ZyYW1lKCk7Ci0gICAgYXNzZXJ0RmFsc2UobGlz
dGVuZXIxLndhaXRGb3JOZXdGcmFtZSgxKSk7Ci0KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5y
ZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2Uo
KTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBNZWRpdW1UZXN0Ci0gIHB1Ymxp
YyBzdGF0aWMgdm9pZCB0ZXN0VGV4dHVyZXRvWVVWKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSAxNjsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0g
MTY7Ci0KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBF
Z2xCYXNlLkNPTkZJR19QTEFJTik7Ci0KLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVIZWxw
ZXIgYW5kIGxpc3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VU
ZXh0dXJlSGVscGVyID0gU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKAotICAgICAgICAiU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgZWdsQmFzZS5nZXRFZ2xC
YXNlQ29udGV4dCgpKTsKLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0g
bmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFy
dExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFj
ZVRleHR1cmUoKS5zZXREZWZhdWx0QnVmZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8v
IENyZWF0ZSByZXNvdXJjZXMgZm9yIHN0dWJiaW5nIGFuIE9FUyB0ZXh0dXJlIHByb2R1Y2VyLiB8
ZWdsQmFzZXwgaGFzIHRoZSBTdXJmYWNlVGV4dHVyZSBpbgotICAgIC8vIHxzdXJmYWNlVGV4dHVy
ZUhlbHBlcnwgYXMgdGhlIHRhcmdldCBFR0xTdXJmYWNlLgotCi0gICAgZWdsQmFzZS5jcmVhdGVT
dXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwotICAgIGFz
c2VydEVxdWFscyhlZ2xCYXNlLnN1cmZhY2VXaWR0aCgpLCB3aWR0aCk7Ci0gICAgYXNzZXJ0RXF1
YWxzKGVnbEJhc2Uuc3VyZmFjZUhlaWdodCgpLCBoZWlnaHQpOwotCi0gICAgZmluYWwgaW50IHJl
ZFtdID0gbmV3IGludFtdIHs3OSwgMTQ0LCAxODV9OwotICAgIGZpbmFsIGludCBncmVlbltdID0g
bmV3IGludFtdIHs2NiwgMjEwLCAxNjJ9OwotICAgIGZpbmFsIGludCBibHVlW10gPSBuZXcgaW50
W10gezE2MSwgMTE3LCAxNTh9OwotCi0gICAgZmluYWwgaW50IHJlZl95W10gPSBuZXcgaW50W10g
ezgxLCAxODAsIDE2OH07Ci0gICAgZmluYWwgaW50IHJlZl91W10gPSBuZXcgaW50W10gezE3Mywg
OTMsIDEyMn07Ci0gICAgZmluYWwgaW50IHJlZl92W10gPSBuZXcgaW50W10gezEyNywgMTAzLCAx
NDB9OwotCi0gICAgLy8gRHJhdyB0aHJlZSBmcmFtZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCAzOyArK2kpIHsKLSAgICAgIC8vIERyYXcgYSBjb25zdGFudCBjb2xvciBmcmFtZSBvbnRvIHRo
ZSBTdXJmYWNlVGV4dHVyZS4KLSAgICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAgIEdM
RVMyMC5nbENsZWFyQ29sb3IocmVkW2ldIC8gMjU1LjBmLCBncmVlbltpXSAvIDI1NS4wZiwgYmx1
ZVtpXSAvIDI1NS4wZiwgMS4wZik7Ci0gICAgICBHTEVTMjAuZ2xDbGVhcihHTEVTMjAuR0xfQ09M
T1JfQlVGRkVSX0JJVCk7Ci0gICAgICAvLyBzd2FwQnVmZmVycygpIHdpbGwgdWx0aW1hdGVseSB0
cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAgICBlZ2xCYXNlLnN3YXBCdWZm
ZXJzKCk7Ci0KLSAgICAgIC8vIFdhaXQgZm9yIGFuIE9FUyB0ZXh0dXJlIHRvIGFycml2ZS4KLSAg
ICAgIGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSgpOwotCi0gICAgICAvLyBNZW1vcnkgbGF5b3V0
OiBMaW5lcyBhcmUgMTYgYnl0ZXMuIEZpcnN0IDE2IGxpbmVzIGFyZQotICAgICAgLy8gdGhlIFkg
ZGF0YS4gVGhlc2UgYXJlIGZvbGxvd2VkIGJ5IDggbGluZXMgd2l0aCA4IGJ5dGVzIG9mIFUKLSAg
ICAgIC8vIGRhdGEgb24gdGhlIGxlZnQgYW5kIDggYnl0ZXMgb2YgViBkYXRhIG9uIHRoZSByaWdo
dC4KLSAgICAgIC8vCi0gICAgICAvLyBPZmZzZXQKLSAgICAgIC8vICAgICAgMCBZWVlZWVlZWSBZ
WVlZWVlZWQotICAgICAgLy8gICAgIDE2IFlZWVlZWVlZIFlZWVlZWVlZCi0gICAgICAvLyAgICAu
Li4KLSAgICAgIC8vICAgIDI0MCBZWVlZWVlZWSBZWVlZWVlZWQotICAgICAgLy8gICAgMjU2IFVV
VVVVVVVVIFZWVlZWVlZWCi0gICAgICAvLyAgICAyNzIgVVVVVVVVVVUgVlZWVlZWVlYKLSAgICAg
IC8vICAgIC4uLgotICAgICAgLy8gICAgMzY4IFVVVVVVVVVVIFZWVlZWVlZWCi0gICAgICAvLyAg
ICAzODQgYnVmZmVyIGVuZAotICAgICAgQnl0ZUJ1ZmZlciBidWZmZXIgPSBCeXRlQnVmZmVyLmFs
bG9jYXRlRGlyZWN0KHdpZHRoICogaGVpZ2h0ICogMyAvIDIpOwotICAgICAgc3VyZmFjZVRleHR1
cmVIZWxwZXIudGV4dHVyZVRvWVVWKAotICAgICAgICAgIGJ1ZmZlciwgd2lkdGgsIGhlaWdodCwg
d2lkdGgsIGxpc3RlbmVyLm9lc1RleHR1cmVJZCwgbGlzdGVuZXIudHJhbnNmb3JtTWF0cml4KTsK
LQotICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAg
ICAgIC8vIEFsbG93IG9mZi1ieS1vbmUgZGlmZmVyZW5jZXMgZHVlIHRvIGRpZmZlcmVudCByb3Vu
ZGluZy4KLSAgICAgIHdoaWxlIChidWZmZXIucG9zaXRpb24oKSA8IHdpZHRoICogaGVpZ2h0KSB7
Ci0gICAgICAgIGFzc2VydENsb3NlKDEsIGJ1ZmZlci5nZXQoKSAmIDB4ZmYsIHJlZl95W2ldKTsK
LSAgICAgIH0KLSAgICAgIHdoaWxlIChidWZmZXIuaGFzUmVtYWluaW5nKCkpIHsKLSAgICAgICAg
aWYgKGJ1ZmZlci5wb3NpdGlvbigpICUgd2lkdGggPCB3aWR0aCAvIDIpCi0gICAgICAgICAgYXNz
ZXJ0Q2xvc2UoMSwgYnVmZmVyLmdldCgpICYgMHhmZiwgcmVmX3VbaV0pOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgYXNzZXJ0Q2xvc2UoMSwgYnVmZmVyLmdldCgpICYgMHhmZiwgcmVmX3ZbaV0p
OwotICAgICAgfQotICAgIH0KLQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsK
LSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9T
dXJmYWNlVmlld1JlbmRlcmVyT25NZWFzdXJlVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3Jj
L29yZy93ZWJydGMvU3VyZmFjZVZpZXdSZW5kZXJlck9uTWVhc3VyZVRlc3QuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
YXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVmlld1JlbmRlcmVyT25NZWFz
dXJlVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjIwICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuZ3JhcGhpY3Mu
UG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1pbXBvcnQgYW5k
cm9pZC50ZXN0LlVpVGhyZWFkVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVy
LmFubm90YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5NZWFzdXJl
U3BlYzsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBTdXJmYWNl
Vmlld1JlbmRlcmVyT25NZWFzdXJlVGVzdCBleHRlbmRzIEFjdGl2aXR5VGVzdENhc2UgewotICAv
KioKLSAgICogTGlzdCB3aXRoIGFsbCBwb3NzaWJsZSBzY2FsaW5nIHR5cGVzLgotICAgKi8KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZT4gc2Nh
bGluZ1R5cGVzID0gQXJyYXlzLmFzTGlzdCgKLSAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdU
eXBlLlNDQUxFX0FTUEVDVF9GSVQsIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlLlNDQUxFX0FT
UEVDVF9GSUxMLAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNU
X0JBTEFOQ0VEKTsKLQotICAvKioKLSAgICogTGlzdCB3aXRoIE1lYXN1cmVTcGVjIG1vZGVzLgot
ICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgTGlzdDxJbnRlZ2VyPiBtZWFzdXJlU3BlY01v
ZGVzID0KLSAgICAgIEFycmF5cy5hc0xpc3QoTWVhc3VyZVNwZWMuRVhBQ1RMWSwgTWVhc3VyZVNw
ZWMuQVRfTU9TVCk7Ci0KLSAgLyoqCi0gICAqIFJldHVybnMgYSBkdW1teSBZVVYgZnJhbWUuCi0g
ICAqLwotICBzdGF0aWMgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgY3JlYXRlRnJhbWUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgcm90YXRpb25EZWdyZWUpIHsKLSAgICBmaW5hbCBpbnRbXSB5
dXZTdHJpZGVzID0gbmV3IGludFtdIHt3aWR0aCwgKHdpZHRoICsgMSkgLyAyLCAod2lkdGggKyAx
KSAvIDJ9OwotICAgIGZpbmFsIGludFtdIHl1dkhlaWdodHMgPSBuZXcgaW50W10ge2hlaWdodCwg
KGhlaWdodCArIDEpIC8gMiwgKGhlaWdodCArIDEpIC8gMn07Ci0gICAgZmluYWwgQnl0ZUJ1ZmZl
cltdIHl1dlBsYW5lcyA9IG5ldyBCeXRlQnVmZmVyWzNdOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgMzsgKytpKSB7Ci0gICAgICB5dXZQbGFuZXNbaV0gPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGly
ZWN0KHl1dlN0cmlkZXNbaV0gKiB5dXZIZWlnaHRzW2ldKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5l
dyBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSh3aWR0aCwgaGVpZ2h0LCByb3RhdGlvbkRlZ3JlZSwg
eXV2U3RyaWRlcywgeXV2UGxhbmVzLCAwKTsKLSAgfQotCi0gIC8qKgotICAgKiBBc3NlcnQgb25N
ZWFzdXJlKCkgd2l0aCBnaXZlbiBwYXJhbWV0ZXJzIHdpbGwgcmVzdWx0IGluIGV4cGVjdGVkIG1l
YXN1cmVkIHNpemUuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydE1lYXN1cmVk
U2l6ZShTdXJmYWNlVmlld1JlbmRlcmVyIHN1cmZhY2VWaWV3UmVuZGVyZXIsCi0gICAgICBSZW5k
ZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSwgU3RyaW5nIGZyYW1lRGltZW5zaW9u
cywgaW50IGV4cGVjdGVkV2lkdGgsCi0gICAgICBpbnQgZXhwZWN0ZWRIZWlnaHQsIGludCB3aWR0
aFNwZWMsIGludCBoZWlnaHRTcGVjKSB7Ci0gICAgc3VyZmFjZVZpZXdSZW5kZXJlci5zZXRTY2Fs
aW5nVHlwZShzY2FsaW5nVHlwZSk7Ci0gICAgc3VyZmFjZVZpZXdSZW5kZXJlci5vbk1lYXN1cmUo
d2lkdGhTcGVjLCBoZWlnaHRTcGVjKTsKLSAgICBmaW5hbCBpbnQgbWVhc3VyZWRXaWR0aCA9IHN1
cmZhY2VWaWV3UmVuZGVyZXIuZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgIGZpbmFsIGludCBtZWFz
dXJlZEhlaWdodCA9IHN1cmZhY2VWaWV3UmVuZGVyZXIuZ2V0TWVhc3VyZWRIZWlnaHQoKTsKLSAg
ICBpZiAobWVhc3VyZWRXaWR0aCAhPSBleHBlY3RlZFdpZHRoIHx8IG1lYXN1cmVkSGVpZ2h0ICE9
IGV4cGVjdGVkSGVpZ2h0KSB7Ci0gICAgICBmYWlsKCJvbk1lYXN1cmUoIiArIE1lYXN1cmVTcGVj
LnRvU3RyaW5nKHdpZHRoU3BlYykgKyAiLCAiICsgTWVhc3VyZVNwZWMudG9TdHJpbmcoaGVpZ2h0
U3BlYykKLSAgICAgICAgICArICIpIgotICAgICAgICAgICsgIiB3aXRoIHNjYWxpbmcgdHlwZSAi
ICsgc2NhbGluZ1R5cGUgKyAiIGFuZCBmcmFtZTogIiArIGZyYW1lRGltZW5zaW9ucwotICAgICAg
ICAgICsgIiBleHBlY3RlZCBtZWFzdXJlZCBzaXplICIgKyBleHBlY3RlZFdpZHRoICsgIngiICsg
ZXhwZWN0ZWRIZWlnaHQgKyAiLCBidXQgd2FzICIKLSAgICAgICAgICArIG1lYXN1cmVkV2lkdGgg
KyAieCIgKyBtZWFzdXJlZEhlaWdodCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qg
aG93IFN1cmZhY2VWaWV3UmVuZGVyZXIub25NZWFzdXJlKCkgYmVoYXZlcyB3aGVuIG5vIGZyYW1l
IGhhcyBiZWVuIGRlbGl2ZXJlZC4KLSAgICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQE1lZGl1bVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdE5vRnJhbWUoKSB7Ci0gICAgZmluYWwgU3VyZmFjZVZpZXdS
ZW5kZXJlciBzdXJmYWNlVmlld1JlbmRlcmVyID0KLSAgICAgICAgbmV3IFN1cmZhY2VWaWV3UmVu
ZGVyZXIoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0Q29udGV4dCgpKTsKLSAgICBmaW5hbCBTdHJp
bmcgZnJhbWVEaW1lbnNpb25zID0gIm51bGwiOwotCi0gICAgLy8gVGVzdCBiZWhhdmlvdXIgYmVm
b3JlIFN1cmZhY2VWaWV3UmVuZGVyZXIuaW5pdCgpIGlzIGNhbGxlZC4KLSAgICBmb3IgKFJlbmRl
cmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAg
ICBmb3IgKGludCBtZWFzdXJlU3BlY01vZGUgOiBtZWFzdXJlU3BlY01vZGVzKSB7Ci0gICAgICAg
IGZpbmFsIGludCB6ZXJvTWVhc3VyZVNpemUgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMo
MCwgbWVhc3VyZVNwZWNNb2RlKTsKLSAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VW
aWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDAsIDAsIHplcm9NZWFz
dXJlU2l6ZSwKLSAgICAgICAgICAgIHplcm9NZWFzdXJlU2l6ZSk7Ci0gICAgICAgIGFzc2VydE1l
YXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNp
b25zLCAxMjgwLCA3MjAsCi0gICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMo
MTI4MCwgbWVhc3VyZVNwZWNNb2RlKSwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFz
dXJlU3BlYyg3MjAsIG1lYXN1cmVTcGVjTW9kZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8v
IFRlc3QgYmVoYXZpb3VyIGFmdGVyIFN1cmZhY2VWaWV3UmVuZGVyZXIuaW5pdCgpIGlzIGNhbGxl
ZCwgYnV0IHN0aWxsIG5vIGZyYW1lLgotICAgIHN1cmZhY2VWaWV3UmVuZGVyZXIuaW5pdCgoRWds
QmFzZS5Db250ZXh0KSBudWxsLCBudWxsKTsKLSAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxp
bmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAgICBmb3IgKGludCBtZWFz
dXJlU3BlY01vZGUgOiBtZWFzdXJlU3BlY01vZGVzKSB7Ci0gICAgICAgIGZpbmFsIGludCB6ZXJv
TWVhc3VyZVNpemUgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMCwgbWVhc3VyZVNwZWNN
b2RlKTsKLSAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNj
YWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDAsIDAsIHplcm9NZWFzdXJlU2l6ZSwKLSAgICAg
ICAgICAgIHplcm9NZWFzdXJlU2l6ZSk7Ci0gICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJm
YWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCAxMjgwLCA3MjAs
Ci0gICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgbWVhc3VyZVNw
ZWNNb2RlKSwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIG1l
YXN1cmVTcGVjTW9kZSkpOwotICAgICAgfQotICAgIH0KLQotICAgIHN1cmZhY2VWaWV3UmVuZGVy
ZXIucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgaG93IFN1cmZhY2VWaWV3UmVu
ZGVyZXIub25NZWFzdXJlKCkgYmVoYXZlcyB3aXRoIGEgMTI4MHg3MjAgZnJhbWUuCi0gICAqLwot
ICBAVWlUaHJlYWRUZXN0Ci0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RGcmFtZTEy
ODB4NzIwKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdXJmYWNl
Vmlld1JlbmRlcmVyIHN1cmZhY2VWaWV3UmVuZGVyZXIgPQotICAgICAgICBuZXcgU3VyZmFjZVZp
ZXdSZW5kZXJlcihnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRDb250ZXh0KCkpOwotICAgIC8qKgot
ICAgICAqIE1vY2sgcmVuZGVyZXIgZXZlbnRzIHdpdGggYmxvY2tpbmcgd2FpdCBmdW5jdGlvbmFs
aXR5IGZvciBmcmFtZSBzaXplIGNoYW5nZXMuCi0gICAgICovCi0gICAgY2xhc3MgTW9ja1JlbmRl
cmVyRXZlbnRzIGltcGxlbWVudHMgUmVuZGVyZXJDb21tb24uUmVuZGVyZXJFdmVudHMgewotICAg
ICAgcHJpdmF0ZSBpbnQgZnJhbWVXaWR0aDsKLSAgICAgIHByaXZhdGUgaW50IGZyYW1lSGVpZ2h0
OwotICAgICAgcHJpdmF0ZSBpbnQgcm90YXRpb247Ci0KLSAgICAgIHB1YmxpYyBzeW5jaHJvbml6
ZWQgdm9pZCB3YWl0Rm9yRnJhbWVTaXplKGludCBmcmFtZVdpZHRoLCBpbnQgZnJhbWVIZWlnaHQs
IGludCByb3RhdGlvbikKLSAgICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgICAgICB3aGlsZSAodGhpcy5mcmFtZVdpZHRoICE9IGZyYW1lV2lkdGggfHwgdGhpcy5mcmFt
ZUhlaWdodCAhPSBmcmFtZUhlaWdodAotICAgICAgICAgICAgfHwgdGhpcy5yb3RhdGlvbiAhPSBy
b3RhdGlvbikgewotICAgICAgICAgIHdhaXQoKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAg
ICBwdWJsaWMgdm9pZCBvbkZpcnN0RnJhbWVSZW5kZXJlZCgpIHt9Ci0KLSAgICAgIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCBvbkZyYW1lUmVzb2x1dGlvbkNoYW5nZWQoCi0gICAgICAgICAgaW50
IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwgaW50IHJvdGF0aW9uKSB7Ci0gICAgICAgIHRo
aXMuZnJhbWVXaWR0aCA9IGZyYW1lV2lkdGg7Ci0gICAgICAgIHRoaXMuZnJhbWVIZWlnaHQgPSBm
cmFtZUhlaWdodDsKLSAgICAgICAgdGhpcy5yb3RhdGlvbiA9IHJvdGF0aW9uOwotICAgICAgICBu
b3RpZnlBbGwoKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgZmluYWwgTW9ja1JlbmRlcmVyRXZlbnRz
IHJlbmRlcmVyRXZlbnRzID0gbmV3IE1vY2tSZW5kZXJlckV2ZW50cygpOwotICAgIHN1cmZhY2VW
aWV3UmVuZGVyZXIuaW5pdCgoRWdsQmFzZS5Db250ZXh0KSBudWxsLCByZW5kZXJlckV2ZW50cyk7
Ci0KLSAgICAvLyBUZXN0IGRpZmZlcmVudCByb3RhdGlvbiBkZWdyZXNzLCBidXQgc2FtZSByb3Rh
dGVkIHNpemUuCi0gICAgZm9yIChpbnQgcm90YXRpb25EZWdyZWUgOiBuZXcgaW50W10gezAsIDkw
LCAxODAsIDI3MH0pIHsKLSAgICAgIGZpbmFsIGludCByb3RhdGVkV2lkdGggPSAxMjgwOwotICAg
ICAgZmluYWwgaW50IHJvdGF0ZWRIZWlnaHQgPSA3MjA7Ci0gICAgICBmaW5hbCBpbnQgdW5yb3Rh
dGVkV2lkdGggPSAocm90YXRpb25EZWdyZWUgJSAxODAgPT0gMCA/IHJvdGF0ZWRXaWR0aCA6IHJv
dGF0ZWRIZWlnaHQpOwotICAgICAgZmluYWwgaW50IHVucm90YXRlZEhlaWdodCA9IChyb3RhdGlv
bkRlZ3JlZSAlIDE4MCA9PSAwID8gcm90YXRlZEhlaWdodCA6IHJvdGF0ZWRXaWR0aCk7Ci0gICAg
ICBmaW5hbCBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSA9Ci0gICAgICAgICAgY3JlYXRl
RnJhbWUodW5yb3RhdGVkV2lkdGgsIHVucm90YXRlZEhlaWdodCwgcm90YXRpb25EZWdyZWUpOwot
ICAgICAgYXNzZXJ0RXF1YWxzKHJvdGF0ZWRXaWR0aCwgZnJhbWUucm90YXRlZFdpZHRoKCkpOwot
ICAgICAgYXNzZXJ0RXF1YWxzKHJvdGF0ZWRIZWlnaHQsIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7
Ci0gICAgICBmaW5hbCBTdHJpbmcgZnJhbWVEaW1lbnNpb25zID0KLSAgICAgICAgICB1bnJvdGF0
ZWRXaWR0aCArICJ4IiArIHVucm90YXRlZEhlaWdodCArICIgd2l0aCByb3RhdGlvbiAiICsgcm90
YXRpb25EZWdyZWU7Ci0gICAgICBzdXJmYWNlVmlld1JlbmRlcmVyLnJlbmRlckZyYW1lKGZyYW1l
KTsKLSAgICAgIHJlbmRlcmVyRXZlbnRzLndhaXRGb3JGcmFtZVNpemUodW5yb3RhdGVkV2lkdGgs
IHVucm90YXRlZEhlaWdodCwgcm90YXRpb25EZWdyZWUpOwotCi0gICAgICAvLyBUZXN0IGZvcmNp
bmcgdG8gemVybyBzaXplLgotICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBz
Y2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAgICBmb3IgKGludCBtZWFzdXJlU3Bl
Y01vZGUgOiBtZWFzdXJlU3BlY01vZGVzKSB7Ci0gICAgICAgICAgZmluYWwgaW50IHplcm9NZWFz
dXJlU2l6ZSA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygwLCBtZWFzdXJlU3BlY01vZGUp
OwotICAgICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2Fs
aW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCAwLCAwLAotICAgICAgICAgICAgICB6ZXJvTWVhc3Vy
ZVNpemUsIHplcm9NZWFzdXJlU2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgLy8g
VGVzdCBwZXJmZWN0IGZpdC4KLSAgICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUg
c2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgICAgZm9yIChpbnQgbWVhc3VyZVNw
ZWNNb2RlIDogbWVhc3VyZVNwZWNNb2RlcykgewotICAgICAgICAgIGFzc2VydE1lYXN1cmVkU2l6
ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCByb3Rh
dGVkV2lkdGgsCi0gICAgICAgICAgICAgIHJvdGF0ZWRIZWlnaHQsIE1lYXN1cmVTcGVjLm1ha2VN
ZWFzdXJlU3BlYyhyb3RhdGVkV2lkdGgsIG1lYXN1cmVTcGVjTW9kZSksCi0gICAgICAgICAgICAg
IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhyb3RhdGVkSGVpZ2h0LCBtZWFzdXJlU3BlY01v
ZGUpKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBGb3JjZSBzcGVjIHNpemUgd2l0
aCBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvIHRoYW4gZnJhbWUgYXNwZWN0IHJhdGlvLgotICAgICAg
Zm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBl
cykgewotICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2Nh
bGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgNzIwLCAxMjgwLAotICAgICAgICAgICAgTWVhc3Vy
ZVNwZWMubWFrZU1lYXN1cmVTcGVjKDcyMCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSksCi0gICAgICAg
ICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoMTI4MCwgTWVhc3VyZVNwZWMuRVhBQ1RM
WSkpOwotICAgICAgfQotCi0gICAgICBmaW5hbCBmbG9hdCB2aWRlb0FzcGVjdFJhdGlvID0gKGZs
b2F0KSByb3RhdGVkV2lkdGggLyByb3RhdGVkSGVpZ2h0OwotICAgICAgewotICAgICAgICAvLyBS
ZWxheCBib3RoIHdpZHRoIGFuZCBoZWlnaHQgY29uc3RyYWludHMuCi0gICAgICAgIGZpbmFsIGlu
dCB3aWR0aFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoNzIwLCBNZWFzdXJlU3Bl
Yy5BVF9NT1NUKTsKLSAgICAgICAgZmluYWwgaW50IGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5t
YWtlTWVhc3VyZVNwZWMoMTI4MCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgICAgIGZvciAo
UmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsK
LSAgICAgICAgICBmaW5hbCBQb2ludCBleHBlY3RlZFNpemUgPQotICAgICAgICAgICAgICBSZW5k
ZXJlckNvbW1vbi5nZXREaXNwbGF5U2l6ZShzY2FsaW5nVHlwZSwgdmlkZW9Bc3BlY3RSYXRpbywg
NzIwLCAxMjgwKTsKLSAgICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5k
ZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5zaW9ucywgZXhwZWN0ZWRTaXplLngsCi0gICAg
ICAgICAgICAgIGV4cGVjdGVkU2l6ZS55LCB3aWR0aFNwZWMsIGhlaWdodFNwZWMpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgICB7Ci0gICAgICAgIC8vIEZvcmNlIHdpZHRoIHRvIDcyMCwgYnV0
IHJlbGF4IGhlaWdodCBjb25zdHJhaW50LiBUaGlzIHdpbGwgZ2l2ZSB0aGUgc2FtZSByZXN1bHQg
YXMKLSAgICAgICAgLy8gYWJvdmUsIGJlY2F1c2Ugd2lkdGggaXMgYWxyZWFkeSB0aGUgbGltaXRp
bmcgZmFjdG9yIGFuZCB3aWxsIGJlIG1heGVkIG91dC4KLSAgICAgICAgZmluYWwgaW50IHdpZHRo
U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIE1lYXN1cmVTcGVjLkVYQUNU
TFkpOwotICAgICAgICBmaW5hbCBpbnQgaGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFz
dXJlU3BlYygxMjgwLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAgICAgICAgZm9yIChSZW5kZXJl
ckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAg
ICAgIGZpbmFsIFBvaW50IGV4cGVjdGVkU2l6ZSA9Ci0gICAgICAgICAgICAgIFJlbmRlcmVyQ29t
bW9uLmdldERpc3BsYXlTaXplKHNjYWxpbmdUeXBlLCB2aWRlb0FzcGVjdFJhdGlvLCA3MjAsIDEy
ODApOwotICAgICAgICAgIGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBz
Y2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCBleHBlY3RlZFNpemUueCwKLSAgICAgICAgICAg
ICAgZXhwZWN0ZWRTaXplLnksIHdpZHRoU3BlYywgaGVpZ2h0U3BlYyk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICAgIHsKLSAgICAgICAgLy8gRm9yY2UgaGVpZ2h0LCBidXQgcmVsYXggd2lkdGgg
Y29uc3RyYWludC4gVGhpcyB3aWxsIGZvcmNlIGEgYmFkIGxheW91dCBzaXplLgotICAgICAgICBm
aW5hbCBpbnQgd2lkdGhTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDcyMCwgTWVh
c3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgICAgIGZpbmFsIGludCBoZWlnaHRTcGVjID0gTWVhc3Vy
ZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIE1lYXN1cmVTcGVjLkVYQUNUTFkpOwotICAgICAg
ICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5
cGVzKSB7Ci0gICAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKAotICAgICAgICAgICAgICBzdXJm
YWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNpb25zLCA3MjAsIDEyODAs
IHdpZHRoU3BlYywgaGVpZ2h0U3BlYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBzdXJmYWNlVmlld1JlbmRlcmVyLnJlbGVhc2UoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3Jn
L3dlYnJ0Yy9XZWJSdGNKbmlCb290VGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93
ZWJydGMvV2ViUnRjSm5pQm9vdFRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMv
b3JnL3dlYnJ0Yy9XZWJSdGNKbmlCb290VGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzEg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGMu
dGVzdDsKLQotaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWlt
cG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotCi1p
bXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbkZhY3Rvcnk7Ci0KLS8vIFRoaXMgdGVzdCBp
cyBpbnRlbmRlZCB0byBydW4gb24gQVJNIGFuZCBjYXRjaCBMb2FkTGlicmFyeSBlcnJvcnMgd2hl
biB3ZSBsb2FkIHRoZSBXZWJSVEMKLS8vIEpOSS4gSXQgY2FuJ3QgcmVhbGx5IGJlIHNldHRpbmcg
dXAgY2FsbHMgc2luY2UgQVJNIGVtdWxhdG9ycyBhcmUgdG9vIHNsb3csIGJ1dCBpbnN0YW50aWF0
aW5nCi0vLyBhIHBlZXIgY29ubmVjdGlvbiBpc24ndCB0aW1pbmctc2Vuc2l0aXZlLCBzbyB3ZSBj
YW4gYXQgbGVhc3QgZG8gdGhhdC4KLXB1YmxpYyBjbGFzcyBXZWJSdGNKbmlCb290VGVzdCBleHRl
bmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0Sm5pTG9hZHNXaXRob3V0RXJyb3IoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplQW5kcm9pZEdsb2JhbHMoZ2V0
SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpLAotICAgICAgICB0cnVlIC8qIGlu
aXRpYWxpemVBdWRpbyAqLywgdHJ1ZSAvKiBpbml0aWFsaXplVmlkZW8gKi8sCi0gICAgICAgIGZh
bHNlIC8qIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbiAqLyk7Ci0KLSAgICBQZWVyQ29ubmVjdGlv
bkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRp
b25zKCk7Ci0gICAgbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeShvcHRpb25zKTsKLSAgfQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJv
aWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJUZXN0
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2lu
Z0J5dGVCdWZmZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJy
dGMvQ2FtZXJhMUNhcHR1cmVyVXNpbmdCeXRlQnVmZmVyVGVzdC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMTcyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudGVz
dC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWls
ZGVyLmFubm90YXRpb24uTGFyZ2VUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxk
ZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxk
ZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDYW1lcmExQ2FwdHVyZXJV
c2luZ0J5dGVCdWZmZXJUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBz
dGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYW1lcmExQ2FwdHVyZXJVc2luZ0J5dGVCdWZmZXJU
ZXN0IjsKLQotICBwcml2YXRlIGNsYXNzIFRlc3RPYmplY3RGYWN0b3J5IGV4dGVuZHMgQ2FtZXJh
VmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcy5UZXN0T2JqZWN0RmFjdG9yeSB7Ci0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNDYXB0dXJpbmdUb1RleHR1cmUoKSB7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIENhbWVyYUVu
dW1lcmF0b3IgZ2V0Q2FtZXJhRW51bWVyYXRvcigpIHsKLSAgICAgIHJldHVybiBuZXcgQ2FtZXJh
MUVudW1lcmF0b3IoZmFsc2UpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBD
b250ZXh0IGdldEFwcENvbnRleHQoKSB7Ci0gICAgICByZXR1cm4gZ2V0SW5zdHJ1bWVudGF0aW9u
KCkuZ2V0VGFyZ2V0Q29udGV4dCgpOwotICAgIH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJk
ZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCByYXdPcGVuQ2Ft
ZXJhKFN0cmluZyBjYW1lcmFOYW1lKSB7Ci0gICAgICByZXR1cm4gYW5kcm9pZC5oYXJkd2FyZS5D
YW1lcmEub3BlbihDYW1lcmExRW51bWVyYXRvci5nZXRDYW1lcmFJbmRleChjYW1lcmFOYW1lKSk7
Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCByYXdDbG9zZUNhbWVyYShPYmplY3QgY2FtZXJhKSB7Ci0g
ICAgICAoKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhKSBjYW1lcmEpLnJlbGVhc2UoKTsKLSAgICB9
Ci0gIH0KLQotICBwcml2YXRlIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMgZml4dHVy
ZXM7Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgewotICAgIGZpeHR1
cmVzID0gbmV3IENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMobmV3IFRlc3RPYmplY3RG
YWN0b3J5KCkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3du
KCkgewotICAgIGZpeHR1cmVzLmRpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdENyZWF0ZUFuZERpc3Bvc2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUNhcHR1cmVyQW5kRGlzcG9zZSgpOwotICB9Ci0KLSAg
QFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZU5vbkV4aXN0
aW5nQ2FtZXJhKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUgY2FtZXJhIGNhbiBi
ZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndhcmRlZAotICAvLyB0byBhIEph
dmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgYSAiZGVmYXVsdCIgY2FwdHVyZXIuCi0gIC8vIEl0IHRl
c3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RDcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAg
fQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRo
YXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyByZW5kZXJl
ciB1c2luZyB0aGUgZnJvbnQgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAvLyBJdCB0ZXN0cyBi
b3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0U3RhcnRGcm9udEZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUZyb250RmFjaW5nQ2FwdHVyZXJBbmRS
ZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0
YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2
aWRlbyByZW5kZXJlciB1c2luZyB0aGUgYmFjayBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8v
IEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEJhY2tGYWNpbmdWaWRlb0NhcHR1cmVyKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVCYWNrRmFjaW5nQ2Fw
dHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBkZWZhdWx0
IGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgY2FtZXJhIGNhbgotICAvLyBsYXRl
ciBiZSBzd2l0Y2hlZCB0byBhbm90aGVyIGNhbWVyYS4KLSAgLy8gSXQgdGVzdHMgYm90aCB0aGUg
SmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dFN3aXRjaFZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGZpeHR1cmVzLnN3aXRjaENhbWVyYSgpOwotICB9Ci0KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdENhbWVyYUV2ZW50cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgZml4dHVyZXMuY2FtZXJhRXZlbnRzSW52b2tlZCgpOwotICB9Ci0KLSAgLy8gVGVzdCB3aGF0
IGhhcHBlbnMgd2hlbiBhdHRlbXB0aW5nIHRvIGNhbGwgZS5nLiBzd2l0Y2hDYW1lcmEoKSBhZnRl
ciBjYW1lcmEgaGFzIGJlZW4gc3RvcHBlZC4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdENhbWVyYUNhbGxzQWZ0ZXJTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBmaXh0dXJlcy5jYW1lcmFDYWxsc0FmdGVyU3RvcCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgdGhlIFZpZGVvU291cmNlIHRoYXQgdGhlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMg
Y29ubmVjdGVkIHRvIGNhbgotICAvLyBiZSBzdG9wcGVkIGFuZCByZXN0YXJ0ZWQuIEl0IHRlc3Rz
IGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIGZpeHR1cmVzLnN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKTsKLSAgfQotCi0g
IC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQgYXQgZGlmZmVyZW50
IHJlc29sdXRpb25zLgotICAvLyBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0aGUgQysrIGxheWVy
LgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFN0b3BXaXRoRGlmZmVyZW50
UmVzb2x1dGlvbnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVz
LnN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHdoYXQgaGFwcGVucyBpZiBidWZmZXJzIGFyZSByZXR1cm5lZCBhZnRlciB0aGUgY2FwdHVy
ZXIgaGF2ZQotICAvLyBiZWVuIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQgZG9lcyBub3QgdGVz
dCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
UmV0dXJuQnVmZmVyTGF0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4
dHVyZXMucmV0dXJuQnVmZmVyTGF0ZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgd2Ug
Y2FuIGNhcHR1cmUgZnJhbWVzLCBrZWVwIHRoZSBmcmFtZXMgaW4gYSBsb2NhbCByZW5kZXJlciwg
c3RvcCBjYXB0dXJpbmcsCi0gIC8vIGFuZCB0aGVuIHJldHVybiB0aGUgZnJhbWVzLiBUaGUgZGlm
ZmVyZW5jZSBiZXR3ZWVuIHRoZSB0ZXN0IHRlc3RSZXR1cm5CdWZmZXJMYXRlKCkgaXMgdGhhdCB3
ZQotICAvLyBhbHNvIHRlc3QgdGhlIEpOSSBhbmQgQysrIEFuZHJvaWRWaWRlb0NhcHR1cmVyIHBh
cnRzLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZUVu
ZFRvRW5kKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1
cm5CdWZmZXJMYXRlRW5kVG9FbmQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGZyYW1l
cyBmb3J3YXJkZWQgdG8gYSByZW5kZXJlciBpcyBzY2FsZWQgaWYgYWRhcHRPdXRwdXRGb3JtYXQg
aXMKLSAgLy8gY2FsbGVkLiBUaGlzIHRlc3QgYm90aCBKYXZhIGFuZCBDKysgcGFydHMgb2Ygb2Yg
dGhlIHN0YWNrLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2NhbGVDYW1lcmFP
dXRwdXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnNjYWxl
Q2FtZXJhT3V0cHV0KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBhbiBlcnJvciBpcyBy
ZXBvcnRlZCBpZiB0aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIHdoZW4gQ2FtZXJh
VmlkZW9DYXB0dXJlciBpcyBzdGFydGVkLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW4oKTsKLSAg
fQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVyZXIgY2FuIGJlIHN0YXJ0
ZWQsIGV2ZW4gaWYgdGhlIGNhbWVyYSBpcyBhbHJlYWR5IG9wZW5lZAotICAvLyBpZiB0aGUgY2Ft
ZXJhIGlzIGNsb3NlZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIHJlLXRyeWluZyB0byBz
dGFydC4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGlsZUNhbWVyYUlz
QWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVy
YSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlci5zdG9w
IGNhbiBiZSBjYWxsZWQgd2hpbGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcwotICAvLyByZS10cnlp
bmcgdG8gc3RhcnQuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxl
Q2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5kU3RvcCgpOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9h
cGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVy
ZVRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTFDYXB0dXJl
clVzaW5nVGV4dHVyZVRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dl
YnJ0Yy9DYW1lcmExQ2FwdHVyZXJVc2luZ1RleHR1cmVUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxNzQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRj
OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0
Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxk
ZXIuYW5ub3RhdGlvbi5MYXJnZVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRl
ci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRl
ci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotcHVibGljIGNsYXNzIENhbWVyYTFDYXB0dXJlclVz
aW5nVGV4dHVyZVRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHN0YXRp
YyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbWVyYTFDYXB0dXJlclVzaW5nVGV4dHVyZVRlc3QiOwot
Ci0gIHByaXZhdGUgY2xhc3MgVGVzdE9iamVjdEZhY3RvcnkgZXh0ZW5kcyBDYW1lcmFWaWRlb0Nh
cHR1cmVyVGVzdEZpeHR1cmVzLlRlc3RPYmplY3RGYWN0b3J5IHsKLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgQ2FtZXJhRW51bWVyYXRvciBnZXRDYW1lcmFFbnVtZXJhdG9yKCkgewotICAgICAg
cmV0dXJuIG5ldyBDYW1lcmExRW51bWVyYXRvcigpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKSB7Ci0gICAgICByZXR1cm4gZ2V0SW5z
dHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpOwotICAgIH0KLQotICAgIEBTdXBwcmVz
c1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVj
dCByYXdPcGVuQ2FtZXJhKFN0cmluZyBjYW1lcmFOYW1lKSB7Ci0gICAgICByZXR1cm4gYW5kcm9p
ZC5oYXJkd2FyZS5DYW1lcmEub3BlbihDYW1lcmExRW51bWVyYXRvci5nZXRDYW1lcmFJbmRleChj
YW1lcmFOYW1lKSk7Ci0gICAgfQotCi0gICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9u
IikKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByYXdDbG9zZUNhbWVyYShPYmplY3Qg
Y2FtZXJhKSB7Ci0gICAgICAoKGFuZHJvaWQuaGFyZHdhcmUuQ2FtZXJhKSBjYW1lcmEpLnJlbGVh
c2UoKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4
dHVyZXMgZml4dHVyZXM7Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkg
ewotICAgIGZpeHR1cmVzID0gbmV3IENhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMobmV3
IFRlc3RPYmplY3RGYWN0b3J5KCkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2
b2lkIHRlYXJEb3duKCkgewotICAgIGZpeHR1cmVzLmRpc3Bvc2UoKTsKLSAgfQotCi0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENyZWF0ZUFuZERpc3Bvc2UoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUNhcHR1cmVyQW5kRGlzcG9zZSgp
OwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTm9uRXhpc3Rp
bmdDYW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNy
ZWF0ZU5vbkV4aXN0aW5nQ2FtZXJhKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0aGUg
Y2FtZXJhIGNhbiBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBmcmFtZXMgYXJlIGZvcndhcmRlZAot
ICAvLyB0byBhIEphdmEgdmlkZW8gcmVuZGVyZXIgdXNpbmcgYSAiZGVmYXVsdCIgY2FwdHVyZXIu
Ci0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRp
dW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmRS
ZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0
YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2
aWRlbyByZW5kZXJlciB1c2luZyB0aGUgZnJvbnQgZmFjaW5nIHZpZGVvIGNhcHR1cmVyLgotICAv
LyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRGcm9udEZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUZyb250RmFjaW5n
Q2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1l
cmEgY2FuIGJlIHN0YXJ0ZWQgYW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8v
IHRvIGEgSmF2YSB2aWRlbyByZW5kZXJlciB1c2luZyB0aGUgYmFjayBmYWNpbmcgdmlkZW8gY2Fw
dHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydEJhY2tGYWNpbmdWaWRlb0NhcHR1
cmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jcmVhdGVC
YWNrRmFjaW5nQ2FwdHVyZXJBbmRSZW5kZXIoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0
IHRoZSBkZWZhdWx0IGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgY2FtZXJhIGNh
bgotICAvLyBsYXRlciBiZSBzd2l0Y2hlZCB0byBhbm90aGVyIGNhbWVyYS4KLSAgLy8gSXQgdGVz
dHMgYm90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFN3aXRjaFZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIGZpeHR1cmVzLnN3aXRjaENhbWVyYSgpOwotICB9Ci0KLSAgQE1lZGl1bVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYUV2ZW50cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY2FtZXJhRXZlbnRzSW52b2tlZCgpOwotICB9Ci0KLSAg
Ly8gVGVzdCB3aGF0IGhhcHBlbnMgd2hlbiBhdHRlbXB0aW5nIHRvIGNhbGwgZS5nLiBzd2l0Y2hD
YW1lcmEoKSBhZnRlciBjYW1lcmEgaGFzIGJlZW4gc3RvcHBlZC4KLSAgQE1lZGl1bVRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdENhbWVyYUNhbGxzQWZ0ZXJTdG9wKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFDYWxsc0FmdGVyU3RvcCgpOwotICB9Ci0K
LSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIFZpZGVvU291cmNlIHRoYXQgdGhlIENhbWVyYVZpZGVv
Q2FwdHVyZXIgaXMgY29ubmVjdGVkIHRvIGNhbgotICAvLyBiZSBzdG9wcGVkIGFuZCByZXN0YXJ0
ZWQuIEl0IHRlc3RzIGJvdGggdGhlIEphdmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJnZVRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2Uo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQg
YXQgZGlmZmVyZW50IHJlc29sdXRpb25zLgotICAvLyBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0
aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFN0b3BX
aXRoRGlmZmVyZW50UmVzb2x1dGlvbnMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIGZpeHR1cmVzLnN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9ucygpOwotICB9Ci0K
LSAgLy8gVGhpcyB0ZXN0IHdoYXQgaGFwcGVucyBpZiBidWZmZXJzIGFyZSByZXR1cm5lZCBhZnRl
ciB0aGUgY2FwdHVyZXIgaGF2ZQotICAvLyBiZWVuIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQg
ZG9lcyBub3QgdGVzdCBvciB1c2UgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJs
aWMgdm9pZCB0ZXN0UmV0dXJuQnVmZmVyTGF0ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMucmV0dXJuQnVmZmVyTGF0ZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgd2UgY2FuIGNhcHR1cmUgZnJhbWVzLCBrZWVwIHRoZSBmcmFtZXMgaW4gYSBsb2Nh
bCByZW5kZXJlciwgc3RvcCBjYXB0dXJpbmcsCi0gIC8vIGFuZCB0aGVuIHJldHVybiB0aGUgZnJh
bWVzLiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0ZXN0IHRlc3RSZXR1cm5CdWZmZXJMYXRl
KCkgaXMgdGhhdCB3ZQotICAvLyBhbHNvIHRlc3QgdGhlIEpOSSBhbmQgQysrIEFuZHJvaWRWaWRl
b0NhcHR1cmVyIHBhcnRzLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0UmV0dXJu
QnVmZmVyTGF0ZUVuZFRvRW5kKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBm
aXh0dXJlcy5yZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVz
dCB0aGF0IENhbWVyYUV2ZW50c0hhbmRsZXIub25FcnJvciBpcyB0cmlnZ2VyZWQgaWYgdmlkZW8g
YnVmZmVycyBhcmUgbm90IHJldHVybmVkIHRvCi0gIC8vIHRoZSBjYXB0dXJlci4KLSAgQExhcmdl
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJhRnJlZXplZEV2ZW50T25CdWZmZXJTdGFydmF0
aW9uKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5jYW1lcmFG
cmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRpb24oKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0
aGF0IGZyYW1lcyBmb3J3YXJkZWQgdG8gYSByZW5kZXJlciBpcyBzY2FsZWQgaWYgYWRhcHRPdXRw
dXRGb3JtYXQgaXMKLSAgLy8gY2FsbGVkLiBUaGlzIHRlc3QgYm90aCBKYXZhIGFuZCBDKysgcGFy
dHMgb2Ygb2YgdGhlIHN0YWNrLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2Nh
bGVDYW1lcmFPdXRwdXQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLnNjYWxlQ2FtZXJhT3V0cHV0KCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCBhbiBl
cnJvciBpcyByZXBvcnRlZCBpZiB0aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIHdo
ZW4gQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBzdGFydGVkLgotICBATGFyZ2VUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9w
ZW4oKTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IENhbWVyYVZpZGVvQ2FwdHVyZXIgY2Fu
IGJlIHN0YXJ0ZWQsIGV2ZW4gaWYgdGhlIGNhbWVyYSBpcyBhbHJlYWR5IG9wZW5lZAotICAvLyBp
ZiB0aGUgY2FtZXJhIGlzIGNsb3NlZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzIHJlLXRy
eWluZyB0byBzdGFydC4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRXaGls
ZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRD
bG9zZUNhbWVyYSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0
dXJlci5zdG9wIGNhbiBiZSBjYWxsZWQgd2hpbGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcwotICAv
LyByZS10cnlpbmcgdG8gc3RhcnQuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RT
dGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZFN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIGZpeHR1cmVzLnN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuQW5k
U3RvcCgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRl
c3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYTJDYXB0dXJlclRl
c3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9DYW1lcmEyQ2Fw
dHVyZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTggKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50
LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEyLkNhbWVyYUFjY2Vzc0V4
Y2VwdGlvbjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYTIuQ2FtZXJhRGV2aWNlOwot
aW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhMi5DYW1lcmFNYW5hZ2VyOwotaW1wb3J0IGFu
ZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkxvb3BlcjsKLWltcG9ydCBhbmRy
b2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1
aXRlYnVpbGRlci5hbm5vdGF0aW9uLkxhcmdlVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3Vp
dGVidWlsZGVyLmFubm90YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3Vp
dGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1
cnJlbnQuQ291bnREb3duTGF0Y2g7Ci0KLXB1YmxpYyBjbGFzcyBDYW1lcmEyQ2FwdHVyZXJUZXN0
IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBzdGF0aWMgZmluYWwgU3RyaW5n
IFRBRyA9ICJDYW1lcmEyQ2FwdHVyZXJUZXN0IjsKLQotICAvKioKLSAgICogU2ltcGxlIGNhbWVy
YTIgaW1wbGVtZW50YXRpb24gdGhhdCBvbmx5IGtub3dzIGhvdyB0byBvcGVuIHRoZSBjYW1lcmEg
YW5kIGNsb3NlIGl0LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBTaW1wbGVDYW1lcmEyIHsKLSAg
ICBmaW5hbCBDYW1lcmFNYW5hZ2VyIGNhbWVyYU1hbmFnZXI7Ci0gICAgZmluYWwgTG9vcGVyVGhy
ZWFkIGxvb3BlclRocmVhZDsKLSAgICBmaW5hbCBDb3VudERvd25MYXRjaCBvcGVuRG9uZVNpZ25h
bDsKLSAgICBmaW5hbCBPYmplY3QgY2FtZXJhRGV2aWNlTG9jazsKLSAgICBDYW1lcmFEZXZpY2Ug
Y2FtZXJhRGV2aWNlOyAvLyBHdWFyZGVkIGJ5IGNhbWVyYURldmljZUxvY2sKLSAgICBib29sZWFu
IG9wZW5TdWNjZWVkZWQ7IC8vIEd1YXJkZWQgYnkgY2FtZXJhRGV2aWNlTG9jawotCi0gICAgcHJp
dmF0ZSBjbGFzcyBMb29wZXJUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotICAgICAgZmluYWwgQ291
bnREb3duTGF0Y2ggc3RhcnRlZFNpZ25hbCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICAg
IHByaXZhdGUgSGFuZGxlciBoYW5kbGVyOwotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgTG9vcGVyLnByZXBhcmUoKTsKLSAgICAgICAgaGFuZGxl
ciA9IG5ldyBIYW5kbGVyKCk7Ci0gICAgICAgIHN0YXJ0ZWRTaWduYWwuY291bnREb3duKCk7Ci0g
ICAgICAgIExvb3Blci5sb29wKCk7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHdhaXRU
b1N0YXJ0KCkgewotICAgICAgICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShzdGFy
dGVkU2lnbmFsKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVxdWVzdFN0b3AoKSB7
Ci0gICAgICAgIGhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdCgpOwotICAgICAgfQotCi0gICAgICBw
dWJsaWMgSGFuZGxlciBnZXRIYW5kbGVyKCkgewotICAgICAgICByZXR1cm4gaGFuZGxlcjsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIENhbWVyYVN0YXRlQ2FsbGJhY2sgZXh0
ZW5kcyBDYW1lcmFEZXZpY2UuU3RhdGVDYWxsYmFjayB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIG9uQ2xvc2VkKENhbWVyYURldmljZSBjYW1lcmFEZXZpY2UpIHsKLSAgICAg
ICAgTG9nZ2luZy5kKFRBRywgIlNpbXBsZSBjYW1lcmEyIGNsb3NlZC4iKTsKLQotICAgICAgICBz
eW5jaHJvbml6ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAgICBTaW1wbGVDYW1lcmEy
LnRoaXMuY2FtZXJhRGV2aWNlID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uRGlzY29ubmVjdGVkKENhbWVyYURldmljZSBj
YW1lcmFEZXZpY2UpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIlNpbXBsZSBjYW1lcmEyIGRp
c2Nvbm5lY3RlZC4iKTsKLQotICAgICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYURldmljZUxvY2sp
IHsKLSAgICAgICAgICBTaW1wbGVDYW1lcmEyLnRoaXMuY2FtZXJhRGV2aWNlID0gbnVsbDsKLSAg
ICAgICAgfQotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9u
RXJyb3IoQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZSwgaW50IGVycm9yQ29kZSkgewotICAgICAg
ICBMb2dnaW5nLncoVEFHLCAiU2ltcGxlIGNhbWVyYTIgZXJyb3I6ICIgKyBlcnJvckNvZGUpOwot
Ci0gICAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICAgIFNp
bXBsZUNhbWVyYTIudGhpcy5jYW1lcmFEZXZpY2UgPSBjYW1lcmFEZXZpY2U7Ci0gICAgICAgICAg
b3BlblN1Y2NlZWRlZCA9IGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgb3BlbkRvbmVTaWdu
YWwuY291bnREb3duKCk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgb25PcGVuZWQoQ2FtZXJhRGV2aWNlIGNhbWVyYURldmljZSkgewotICAgICAgICBMb2dn
aW5nLmQoVEFHLCAiU2ltcGxlIGNhbWVyYTIgb3BlbmVkLiIpOwotCi0gICAgICAgIHN5bmNocm9u
aXplZCAoY2FtZXJhRGV2aWNlTG9jaykgewotICAgICAgICAgIFNpbXBsZUNhbWVyYTIudGhpcy5j
YW1lcmFEZXZpY2UgPSBjYW1lcmFEZXZpY2U7Ci0gICAgICAgICAgb3BlblN1Y2NlZWRlZCA9IHRy
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICBvcGVuRG9uZVNpZ25hbC5jb3VudERvd24oKTsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBTaW1wbGVDYW1lcmEyKENvbnRleHQgY29udGV4dCwgU3RyaW5n
IGRldmljZU5hbWUpIHsKLSAgICAgIGNhbWVyYU1hbmFnZXIgPSAoQ2FtZXJhTWFuYWdlcikgY29u
dGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQ0FNRVJBX1NFUlZJQ0UpOwotICAgICAgbG9v
cGVyVGhyZWFkID0gbmV3IExvb3BlclRocmVhZCgpOwotICAgICAgbG9vcGVyVGhyZWFkLnN0YXJ0
KCk7Ci0gICAgICBsb29wZXJUaHJlYWQud2FpdFRvU3RhcnQoKTsKLSAgICAgIGNhbWVyYURldmlj
ZUxvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgICBvcGVuRG9uZVNpZ25hbCA9IG5ldyBDb3VudERv
d25MYXRjaCgxKTsKLSAgICAgIGNhbWVyYURldmljZSA9IG51bGw7Ci0gICAgICBMb2dnaW5nLmQo
VEFHLCAiT3BlbmluZyBzaW1wbGUgY2FtZXJhMi4iKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGNh
bWVyYU1hbmFnZXIub3BlbkNhbWVyYShkZXZpY2VOYW1lLCBuZXcgQ2FtZXJhU3RhdGVDYWxsYmFj
aygpLCBsb29wZXJUaHJlYWQuZ2V0SGFuZGxlcigpKTsKLSAgICAgIH0gY2F0Y2ggKENhbWVyYUFj
Y2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIGZhaWwoIlNpbXBsZSBjYW1lcmEyIENhbWVyYUFj
Y2Vzc0V4Y2VwdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLQotICAgICAgTG9n
Z2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHNpbXBsZSBjYW1lcmEyIHRvIG9wZW4uIik7Ci0gICAg
ICBUaHJlYWRVdGlscy5hd2FpdFVuaW50ZXJydXB0aWJseShvcGVuRG9uZVNpZ25hbCk7Ci0gICAg
ICBzeW5jaHJvbml6ZWQgKGNhbWVyYURldmljZUxvY2spIHsKLSAgICAgICAgaWYgKCFvcGVuU3Vj
Y2VlZGVkKSB7Ci0gICAgICAgICAgZmFpbCgiT3BlbmluZyBzaW1wbGUgY2FtZXJhMiBmYWlsZWQu
Iik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgp
IHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDbG9zaW5nIHNpbXBsZSBjYW1lcmEyLiIpOwotICAg
ICAgc3luY2hyb25pemVkIChjYW1lcmFEZXZpY2VMb2NrKSB7Ci0gICAgICAgIGlmIChjYW1lcmFE
ZXZpY2UgIT0gbnVsbCkgewotICAgICAgICAgIGNhbWVyYURldmljZS5jbG9zZSgpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0KLSAgICAgIGxvb3BlclRocmVhZC5yZXF1ZXN0U3RvcCgpOwotICAgICAg
VGhyZWFkVXRpbHMuam9pblVuaW50ZXJydXB0aWJseShsb29wZXJUaHJlYWQpOwotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgY2xhc3MgVGVzdE9iamVjdEZhY3RvcnkgZXh0ZW5kcyBDYW1lcmFWaWRl
b0NhcHR1cmVyVGVzdEZpeHR1cmVzLlRlc3RPYmplY3RGYWN0b3J5IHsKLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgQ2FtZXJhRW51bWVyYXRvciBnZXRDYW1lcmFFbnVtZXJhdG9yKCkgewotICAg
ICAgcmV0dXJuIG5ldyBDYW1lcmEyRW51bWVyYXRvcihnZXRBcHBDb250ZXh0KCkpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBDb250ZXh0IGdldEFwcENvbnRleHQoKSB7Ci0g
ICAgICByZXR1cm4gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpOwotICAg
IH0KLQotICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJkZXByZWNhdGlvbiIpCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIE9iamVjdCByYXdPcGVuQ2FtZXJhKFN0cmluZyBjYW1lcmFOYW1lKSB7Ci0g
ICAgICByZXR1cm4gbmV3IFNpbXBsZUNhbWVyYTIoZ2V0QXBwQ29udGV4dCgpLCBjYW1lcmFOYW1l
KTsKLSAgICB9Ci0KLSAgICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJhd0Nsb3NlQ2FtZXJhKE9iamVjdCBjYW1lcmEpIHsK
LSAgICAgICgoU2ltcGxlQ2FtZXJhMikgY2FtZXJhKS5jbG9zZSgpOwotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyBmaXh0dXJlczsKLQotICBA
T3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0gICAgZml4dHVyZXMgPSBuZXcg
Q2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyhuZXcgVGVzdE9iamVjdEZhY3RvcnkoKSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0gICAg
Zml4dHVyZXMuZGlzcG9zZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0Q3JlYXRlQW5kRGlzcG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
Zml4dHVyZXMuY3JlYXRlQ2FwdHVyZXJBbmREaXNwb3NlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOb25FeGlzdGluZ0NhbWVyYSgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuY3JlYXRlTm9uRXhpc3RpbmdDYW1lcmEo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IHRoZSBjYW1lcmEgY2FuIGJlIHN0YXJ0ZWQg
YW5kIHRoYXQgdGhlIGZyYW1lcyBhcmUgZm9yd2FyZGVkCi0gIC8vIHRvIGEgSmF2YSB2aWRlbyBy
ZW5kZXJlciB1c2luZyBhICJkZWZhdWx0IiBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMgYm90aCB0
aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdENyZWF0ZUNhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBmaXh0dXJlcy5jcmVhdGVDYXB0dXJlckFuZFJlbmRlcigpOwotICB9Ci0KLSAgLy8g
VGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQgdGhhdCB0aGUgZnJh
bWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRlcmVyIHVzaW5nIHRo
ZSBmcm9udCBmYWNpbmcgdmlkZW8gY2FwdHVyZXIuCi0gIC8vIEl0IHRlc3RzIGJvdGggdGhlIEph
dmEgYW5kIHRoZSBDKysgbGF5ZXIuCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RT
dGFydEZyb250RmFjaW5nVmlkZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgZml4dHVyZXMuY3JlYXRlRnJvbnRGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigpOwot
ICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhbmQg
dGhhdCB0aGUgZnJhbWVzIGFyZSBmb3J3YXJkZWQKLSAgLy8gdG8gYSBKYXZhIHZpZGVvIHJlbmRl
cmVyIHVzaW5nIHRoZSBiYWNrIGZhY2luZyB2aWRlbyBjYXB0dXJlci4KLSAgLy8gSXQgdGVzdHMg
Ym90aCB0aGUgSmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFN0YXJ0QmFja0ZhY2luZ1ZpZGVvQ2FwdHVyZXIoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNyZWF0ZUJhY2tGYWNpbmdDYXB0dXJlckFuZFJl
bmRlcigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgdGhlIGRlZmF1bHQgY2FtZXJhIGNh
biBiZSBzdGFydGVkIGFuZCB0aGF0IHRoZSBjYW1lcmEgY2FuCi0gIC8vIGxhdGVyIGJlIHN3aXRj
aGVkIHRvIGFub3RoZXIgY2FtZXJhLgotICAvLyBJdCB0ZXN0cyBib3RoIHRoZSBKYXZhIGFuZCB0
aGUgQysrIGxheWVyLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U3dpdGNoVmlk
ZW9DYXB0dXJlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMu
c3dpdGNoQ2FtZXJhKCk7Ci0gIH0KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
Q2FtZXJhRXZlbnRzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJl
cy5jYW1lcmFFdmVudHNJbnZva2VkKCk7Ci0gIH0KLQotICAvLyBUZXN0IHdoYXQgaGFwcGVucyB3
aGVuIGF0dGVtcHRpbmcgdG8gY2FsbCBlLmcuIHN3aXRjaENhbWVyYSgpIGFmdGVyIGNhbWVyYSBo
YXMgYmVlbiBzdG9wcGVkLgotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FtZXJh
Q2FsbHNBZnRlclN0b3AoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1
cmVzLmNhbWVyYUNhbGxzQWZ0ZXJTdG9wKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB0
aGUgVmlkZW9Tb3VyY2UgdGhhdCB0aGUgQ2FtZXJhVmlkZW9DYXB0dXJlciBpcyBjb25uZWN0ZWQg
dG8gY2FuCi0gIC8vIGJlIHN0b3BwZWQgYW5kIHJlc3RhcnRlZC4gSXQgdGVzdHMgYm90aCB0aGUg
SmF2YSBhbmQgdGhlIEMrKyBsYXllci4KLSAgQExhcmdlVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
U3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgZml4dHVyZXMuc3RvcFJlc3RhcnRWaWRlb1NvdXJjZSgpOwotICB9Ci0KLSAgLy8gVGhpcyB0
ZXN0IHRoYXQgdGhlIGNhbWVyYSBjYW4gYmUgc3RhcnRlZCBhdCBkaWZmZXJlbnQgcmVzb2x1dGlv
bnMuCi0gIC8vIEl0IGRvZXMgbm90IHRlc3Qgb3IgdXNlIHRoZSBDKysgbGF5ZXIuCi0gIEBMYXJn
ZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0U3RvcFdpdGhEaWZmZXJlbnRSZXNvbHV0aW9u
cygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc3RhcnRTdG9w
V2l0aERpZmZlcmVudFJlc29sdXRpb25zKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3Qgd2hhdCBo
YXBwZW5zIGlmIGJ1ZmZlcnMgYXJlIHJldHVybmVkIGFmdGVyIHRoZSBjYXB0dXJlciBoYXZlCi0g
IC8vIGJlZW4gc3RvcHBlZCBhbmQgcmVzdGFydGVkLiBJdCBkb2VzIG5vdCB0ZXN0IG9yIHVzZSB0
aGUgQysrIGxheWVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZm
ZXJMYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJlcy5yZXR1
cm5CdWZmZXJMYXRlKCk7Ci0gIH0KLQotICAvLyBUaGlzIHRlc3QgdGhhdCB3ZSBjYW4gY2FwdHVy
ZSBmcmFtZXMsIGtlZXAgdGhlIGZyYW1lcyBpbiBhIGxvY2FsIHJlbmRlcmVyLCBzdG9wIGNhcHR1
cmluZywKLSAgLy8gYW5kIHRoZW4gcmV0dXJuIHRoZSBmcmFtZXMuIFRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4gdGhlIHRlc3QgdGVzdFJldHVybkJ1ZmZlckxhdGUoKSBpcyB0aGF0IHdlCi0gIC8vIGFs
c28gdGVzdCB0aGUgSk5JIGFuZCBDKysgQW5kcm9pZFZpZGVvQ2FwdHVyZXIgcGFydHMuCi0gIEBN
ZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLnJldHVybkJ1ZmZlckxh
dGVFbmRUb0VuZCgpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgQ2FtZXJhRXZlbnRzSGFu
ZGxlci5vbkVycm9yIGlzIHRyaWdnZXJlZCBpZiB2aWRlbyBidWZmZXJzIGFyZSBub3QgcmV0dXJu
ZWQgdG8KLSAgLy8gdGhlIGNhcHR1cmVyLgotICBATGFyZ2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RDYW1lcmFGcmVlemVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRpb24oKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpeHR1cmVzLmNhbWVyYUZyZWV6ZWRFdmVudE9uQnVmZmVyU3Rh
cnZhdGlvbigpOwotICB9Ci0KLSAgLy8gVGhpcyB0ZXN0IHRoYXQgZnJhbWVzIGZvcndhcmRlZCB0
byBhIHJlbmRlcmVyIGlzIHNjYWxlZCBpZiBhZGFwdE91dHB1dEZvcm1hdCBpcwotICAvLyBjYWxs
ZWQuIFRoaXMgdGVzdCBib3RoIEphdmEgYW5kIEMrKyBwYXJ0cyBvZiBvZiB0aGUgc3RhY2suCi0g
IEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTY2FsZUNhbWVyYU91dHB1dCgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVyZXMuc2NhbGVDYW1lcmFPdXRwdXQo
KTsKLSAgfQotCi0gIC8vIFRoaXMgdGVzdCB0aGF0IGFuIGVycm9yIGlzIHJlcG9ydGVkIGlmIHRo
ZSBjYW1lcmEgaXMgYWxyZWFkeSBvcGVuZWQKLSAgLy8gd2hlbiBDYW1lcmFWaWRlb0NhcHR1cmVy
IGlzIHN0YXJ0ZWQuCi0gIEBMYXJnZVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVD
YW1lcmFJc0FscmVhZHlPcGVuKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBm
aXh0dXJlcy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbigpOwotICB9Ci0KLSAgLy8gVGhp
cyB0ZXN0IHRoYXQgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW4gYmUgc3RhcnRlZCwgZXZlbiBpZiB0
aGUgY2FtZXJhIGlzIGFscmVhZHkgb3BlbmVkCi0gIC8vIGlmIHRoZSBjYW1lcmEgaXMgY2xvc2Vk
IHdoaWxlIENhbWVyYVZpZGVvQ2FwdHVyZXIgaXMgcmUtdHJ5aW5nIHRvIHN0YXJ0LgotICBATGFy
Z2VUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RTdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFu
ZENsb3NlQ2FtZXJhKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaXh0dXJl
cy5zdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhKCk7Ci0gIH0KLQot
ICAvLyBUaGlzIHRlc3QgdGhhdCBDYW1lcmFWaWRlb0NhcHR1cmVyLnN0b3AgY2FuIGJlIGNhbGxl
ZCB3aGlsZSBDYW1lcmFWaWRlb0NhcHR1cmVyIGlzCi0gIC8vIHJlLXRyeWluZyB0byBzdGFydC4K
LSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFN0YXJ0V2hpbGVDYW1lcmFJc0FscmVh
ZHlPcGVuQW5kU3RvcCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZml4dHVy
ZXMuc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCk7Ci0gIH0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVz
dHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcy5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvQ2FtZXJhVmlkZW9DYXB0dXJlclRlc3RGaXh0
dXJlcy5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0NhbWVyYVZp
ZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDczMyArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3Rh
dGljIGp1bml0LmZyYW1ld29yay5Bc3NlcnQuKjsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJh
RW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRl
b1JlbmRlcmVyLkk0MjBGcmFtZTsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0Owot
Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWlt
cG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLQotY2xhc3MgQ2FtZXJh
VmlkZW9DYXB0dXJlclRlc3RGaXh0dXJlcyB7Ci0gIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0g
IkNhbWVyYVZpZGVvQ2FwdHVyZXJUZXN0Rml4dHVyZXMiOwotICAvLyBEZWZhdWx0IHZhbHVlcyB1
c2VkIGZvciBzdGFydGluZyBjYXB0dXJpbmcKLSAgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1dJ
RFRIID0gNjQwOwotICBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfSEVJR0hUID0gNDgwOwotICBz
dGF0aWMgZmluYWwgaW50IERFRkFVTFRfRlBTID0gMTU7Ci0KLSAgc3RhdGljIHByaXZhdGUgY2xh
c3MgUmVuZGVyZXJDYWxsYmFja3MgaW1wbGVtZW50cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7
Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVzUmVuZGVyZWQgPSAwOwotICAgIHByaXZhdGUgT2JqZWN0
IGZyYW1lTG9jayA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgd2lkdGggPSAwOwotICAgIHByaXZhdGUg
aW50IGhlaWdodCA9IDA7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCByZW5kZXJG
cmFtZShJNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7
Ci0gICAgICAgICsrZnJhbWVzUmVuZGVyZWQ7Ci0gICAgICAgIHdpZHRoID0gZnJhbWUucm90YXRl
ZFdpZHRoKCk7Ci0gICAgICAgIGhlaWdodCA9IGZyYW1lLnJvdGF0ZWRIZWlnaHQoKTsKLSAgICAg
ICAgZnJhbWVMb2NrLm5vdGlmeSgpOwotICAgICAgfQotICAgICAgVmlkZW9SZW5kZXJlci5yZW5k
ZXJGcmFtZURvbmUoZnJhbWUpOwotICAgIH0KLQotICAgIHB1YmxpYyBpbnQgZnJhbWVXaWR0aCgp
IHsKLSAgICAgIHN5bmNocm9uaXplZCAoZnJhbWVMb2NrKSB7Ci0gICAgICAgIHJldHVybiB3aWR0
aDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGZyYW1lSGVpZ2h0KCkgewotICAg
ICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAgcmV0dXJuIGhlaWdodDsKLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IHdhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiV2Fp
dGluZyBmb3IgdGhlIG5leHQgZnJhbWUgdG8gcmVuZGVyIik7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KGZyYW1lTG9jaykgewotICAgICAgICBmcmFtZUxvY2sud2FpdCgpOwotICAgICAgICByZXR1cm4g
ZnJhbWVzUmVuZGVyZWQ7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgc3RhdGljIHByaXZhdGUg
Y2xhc3MgRmFrZUFzeW5jUmVuZGVyZXIgaW1wbGVtZW50cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNr
cyB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBMaXN0PEk0MjBGcmFtZT4gcGVuZGluZ0ZyYW1lcyA9IG5l
dyBBcnJheUxpc3Q8STQyMEZyYW1lPigpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgcmVuZGVyRnJhbWUoSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBl
bmRpbmdGcmFtZXMpIHsKLSAgICAgICAgcGVuZGluZ0ZyYW1lcy5hZGQoZnJhbWUpOwotICAgICAg
ICBwZW5kaW5nRnJhbWVzLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFdh
aXQgdW50aWwgYXQgbGVhc3Qgb25lIGZyYW1lIGhhdmUgYmVlbiByZWNlaXZlZCwgYmVmb3JlIHJl
dHVybmluZyB0aGVtLgotICAgIHB1YmxpYyBMaXN0PEk0MjBGcmFtZT4gd2FpdEZvclBlbmRpbmdG
cmFtZXMoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgTG9nZ2luZy5kKFRB
RywgIldhaXRpbmcgZm9yIHBlbmRpbmcgZnJhbWVzIik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKHBl
bmRpbmdGcmFtZXMpIHsKLSAgICAgICAgd2hpbGUgKHBlbmRpbmdGcmFtZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgcGVuZGluZ0ZyYW1lcy53YWl0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG5ldyBBcnJheUxpc3Q8STQyMEZyYW1lPihwZW5kaW5nRnJhbWVzKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH0KLQotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBGYWtlQ2FwdHVyZXJPYnNlcnZlciBp
bXBsZW1lbnRzIENhbWVyYVZpZGVvQ2FwdHVyZXIuQ2FwdHVyZXJPYnNlcnZlciB7Ci0gICAgcHJp
dmF0ZSBpbnQgZnJhbWVzQ2FwdHVyZWQgPSAwOwotICAgIHByaXZhdGUgaW50IGZyYW1lU2l6ZSA9
IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZnJhbWVXaWR0aCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZnJh
bWVIZWlnaHQgPSAwOwotICAgIGZpbmFsIHByaXZhdGUgT2JqZWN0IGZyYW1lTG9jayA9IG5ldyBP
YmplY3QoKTsKLSAgICBmaW5hbCBwcml2YXRlIE9iamVjdCBjYXB0dXJlclN0YXJ0TG9jayA9IG5l
dyBPYmplY3QoKTsKLSAgICBwcml2YXRlIGJvb2xlYW4gY2FwdHVyZXJTdGFydFJlc3VsdCA9IGZh
bHNlOwotICAgIGZpbmFsIHByaXZhdGUgTGlzdDxMb25nPiB0aW1lc3RhbXBzID0gbmV3IEFycmF5
TGlzdDxMb25nPigpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJl
clN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAib25DYXB0
dXJlclN0YXJ0ZWQ6ICIgKyBzdWNjZXNzKTsKLQotICAgICAgc3luY2hyb25pemVkIChjYXB0dXJl
clN0YXJ0TG9jaykgewotICAgICAgICBjYXB0dXJlclN0YXJ0UmVzdWx0ID0gc3VjY2VzczsKLSAg
ICAgICAgY2FwdHVyZXJTdGFydExvY2subm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJlclN0b3BwZWQoKSB7Ci0gICAg
ICBMb2dnaW5nLmQoVEFHLCAib25DYXB0dXJlclN0b3BwZWQiKTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkJ5dGVCdWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAg
ICBieXRlW10gZnJhbWUsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9uLCBsb25n
IHRpbWVTdGFtcCkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAg
KytmcmFtZXNDYXB0dXJlZDsKLSAgICAgICAgZnJhbWVTaXplID0gZnJhbWUubGVuZ3RoOwotICAg
ICAgICBmcmFtZVdpZHRoID0gd2lkdGg7Ci0gICAgICAgIGZyYW1lSGVpZ2h0ID0gaGVpZ2h0Owot
ICAgICAgICB0aW1lc3RhbXBzLmFkZCh0aW1lU3RhbXApOwotICAgICAgICBmcmFtZUxvY2subm90
aWZ5KCk7Ci0gICAgICB9Ci0gICAgfQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
VGV4dHVyZUZyYW1lQ2FwdHVyZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb2VzVGV4dHVy
ZUlkLAotICAgICAgICBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25n
IHRpbWVTdGFtcCkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAgICAg
KytmcmFtZXNDYXB0dXJlZDsKLSAgICAgICAgZnJhbWVXaWR0aCA9IHdpZHRoOwotICAgICAgICBm
cmFtZUhlaWdodCA9IGhlaWdodDsKLSAgICAgICAgZnJhbWVTaXplID0gMDsKLSAgICAgICAgdGlt
ZXN0YW1wcy5hZGQodGltZVN0YW1wKTsKLSAgICAgICAgZnJhbWVMb2NrLm5vdGlmeSgpOwotICAg
ICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIHdhaXRGb3JDYXB0dXJlclRvU3RhcnQo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgTG9nZ2luZy5kKFRBRywgIldh
aXRpbmcgZm9yIHRoZSBjYXB0dXJlciB0byBzdGFydCIpOwotICAgICAgc3luY2hyb25pemVkIChj
YXB0dXJlclN0YXJ0TG9jaykgewotICAgICAgICBjYXB0dXJlclN0YXJ0TG9jay53YWl0KCk7Ci0g
ICAgICAgIHJldHVybiBjYXB0dXJlclN0YXJ0UmVzdWx0OwotICAgICAgfQotICAgIH0KLQotICAg
IHB1YmxpYyBpbnQgd2FpdEZvck5leHRDYXB0dXJlZEZyYW1lKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5nIGZvciB0aGUgbmV4dCBj
YXB0dXJlZCBmcmFtZSIpOwotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAg
ICAgZnJhbWVMb2NrLndhaXQoKTsKLSAgICAgICAgcmV0dXJuIGZyYW1lc0NhcHR1cmVkOwotICAg
ICAgfQotICAgIH0KLQotICAgIGludCBmcmFtZVNpemUoKSB7Ci0gICAgICBzeW5jaHJvbml6ZWQg
KGZyYW1lTG9jaykgewotICAgICAgICByZXR1cm4gZnJhbWVTaXplOwotICAgICAgfQotICAgIH0K
LQotICAgIGludCBmcmFtZVdpZHRoKCkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2sp
IHsKLSAgICAgICAgcmV0dXJuIGZyYW1lV2lkdGg7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaW50
IGZyYW1lSGVpZ2h0KCkgewotICAgICAgc3luY2hyb25pemVkIChmcmFtZUxvY2spIHsKLSAgICAg
ICAgcmV0dXJuIGZyYW1lSGVpZ2h0OwotICAgICAgfQotICAgIH0KLQotICAgIExpc3Q8TG9uZz4g
Z2V0Q29weUFuZFJlc2V0TGlzdE9mdGltZVN0YW1wcygpIHsKLSAgICAgIHN5bmNocm9uaXplZCAo
ZnJhbWVMb2NrKSB7Ci0gICAgICAgIEFycmF5TGlzdDxMb25nPiBsaXN0ID0gbmV3IEFycmF5TGlz
dDxMb25nPih0aW1lc3RhbXBzKTsKLSAgICAgICAgdGltZXN0YW1wcy5jbGVhcigpOwotICAgICAg
ICByZXR1cm4gbGlzdDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBzdGF0aWMgY2xhc3MgQ2Ft
ZXJhRXZlbnRzIGltcGxlbWVudHMgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFFdmVudHNIYW5k
bGVyIHsKLSAgICBwdWJsaWMgYm9vbGVhbiBvbkNhbWVyYU9wZW5pbmdDYWxsZWQ7Ci0gICAgcHVi
bGljIGJvb2xlYW4gb25GaXJzdEZyYW1lQXZhaWxhYmxlQ2FsbGVkOwotICAgIHB1YmxpYyBmaW5h
bCBPYmplY3Qgb25DYW1lcmFGcmVlemVkTG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICBwcml2YXRl
IFN0cmluZyBvbkNhbWVyYUZyZWV6ZWREZXNjcmlwdGlvbjsKLSAgICBwdWJsaWMgZmluYWwgT2Jq
ZWN0IGNhbWVyYUNsb3NlZExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgcHJpdmF0ZSBib29sZWFu
IGNhbWVyYUNsb3NlZCA9IHRydWU7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bkNhbWVyYUVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7Ci0gICAgICBMb2dnaW5nLnco
VEFHLCAiQ2FtZXJhIGVycm9yOiAiICsgZXJyb3JEZXNjcmlwdGlvbik7Ci0gICAgICBjYW1lcmFD
bG9zZWQgPSB0cnVlOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
Q2FtZXJhRGlzY29ubmVjdGVkKCkge30KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lk
IG9uQ2FtZXJhRnJlZXplZChTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbikgewotICAgICAgc3luY2hy
b25pemVkIChvbkNhbWVyYUZyZWV6ZWRMb2NrKSB7Ci0gICAgICAgIG9uQ2FtZXJhRnJlZXplZERl
c2NyaXB0aW9uID0gZXJyb3JEZXNjcmlwdGlvbjsKLSAgICAgICAgb25DYW1lcmFGcmVlemVkTG9j
ay5ub3RpZnlBbGwoKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkNhbWVyYU9wZW5pbmcoU3RyaW5nIGNhbWVyYU5hbWUpIHsKLSAgICAgIG9uQ2Ft
ZXJhT3BlbmluZ0NhbGxlZCA9IHRydWU7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNhbWVyYUNsb3Nl
ZExvY2spIHsKLSAgICAgICAgY2FtZXJhQ2xvc2VkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25GaXJzdEZyYW1lQXZhaWxhYmxlKCkg
ewotICAgICAgb25GaXJzdEZyYW1lQXZhaWxhYmxlQ2FsbGVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYUNsb3NlZCgpIHsKLSAgICAgIHN5
bmNocm9uaXplZCAoY2FtZXJhQ2xvc2VkTG9jaykgewotICAgICAgICBjYW1lcmFDbG9zZWQgPSB0
cnVlOwotICAgICAgICBjYW1lcmFDbG9zZWRMb2NrLm5vdGlmeUFsbCgpOwotICAgICAgfQotICAg
IH0KLQotICAgIHB1YmxpYyBTdHJpbmcgd2FpdEZvckNhbWVyYUZyZWV6ZWQoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgTG9nZ2luZy5kKFRBRywgIldhaXRpbmcgZm9yIHRo
ZSBjYW1lcmEgdG8gZnJlZXplIik7Ci0gICAgICBzeW5jaHJvbml6ZWQgKG9uQ2FtZXJhRnJlZXpl
ZExvY2spIHsKLSAgICAgICAgb25DYW1lcmFGcmVlemVkTG9jay53YWl0KCk7Ci0gICAgICAgIHJl
dHVybiBvbkNhbWVyYUZyZWV6ZWREZXNjcmlwdGlvbjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBw
dWJsaWMgdm9pZCB3YWl0Rm9yQ2FtZXJhQ2xvc2VkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0
aW9uIHsKLSAgICAgIHN5bmNocm9uaXplZCAoY2FtZXJhQ2xvc2VkTG9jaykgewotICAgICAgICB3
aGlsZSAoIWNhbWVyYUNsb3NlZCkgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJXYWl0aW5n
IGZvciB0aGUgY2FtZXJhIHRvIGNsb3NlLiIpOwotICAgICAgICAgIGNhbWVyYUNsb3NlZExvY2su
d2FpdCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENs
YXNzIHRvIGNvbGxlY3QgYWxsIGNsYXNzZXMgcmVsYXRlZCB0byBzaW5nbGUgY2FwdHVyZXIgaW5z
dGFuY2UuCi0gICAqLwotICBzdGF0aWMgcHJpdmF0ZSBjbGFzcyBDYXB0dXJlckluc3RhbmNlIHsK
LSAgICBwdWJsaWMgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYXB0dXJlcjsKLSAgICBwdWJsaWMgQ2Ft
ZXJhRXZlbnRzIGNhbWVyYUV2ZW50czsKLSAgICBwdWJsaWMgU3VyZmFjZVRleHR1cmVIZWxwZXIg
c3VyZmFjZVRleHR1cmVIZWxwZXI7Ci0gICAgcHVibGljIEZha2VDYXB0dXJlck9ic2VydmVyIG9i
c2VydmVyOwotICAgIHB1YmxpYyBMaXN0PENhcHR1cmVGb3JtYXQ+IHN1cHBvcnRlZEZvcm1hdHM7
Ci0gICAgcHVibGljIENhcHR1cmVGb3JtYXQgZm9ybWF0OwotICB9Ci0KLSAgLyoqCi0gICAqIENs
YXNzIHVzZWQgZm9yIGNvbGxlY3RpbmcgYSBWaWRlb1NvdXJjZSwgYSBWaWRlb1RyYWNrIGFuZCBh
IHJlbmRlcmVyLiBUaGUgY2xhc3MKLSAgICogaXMgdXNlZCBmb3IgdGVzdGluZyBsb2NhbCByZW5k
ZXJpbmcgZnJvbSBhIGNhcHR1cmVyLgotICAgKi8KLSAgc3RhdGljIHByaXZhdGUgY2xhc3MgVmlk
ZW9UcmFja1dpdGhSZW5kZXJlciB7Ci0gICAgcHVibGljIFZpZGVvU291cmNlIHNvdXJjZTsKLSAg
ICBwdWJsaWMgVmlkZW9UcmFjayB0cmFjazsKLSAgICBwdWJsaWMgUmVuZGVyZXJDYWxsYmFja3Mg
cmVuZGVyZXJDYWxsYmFja3M7Ci0gICAgcHVibGljIEZha2VBc3luY1JlbmRlcmVyIGZha2VBc3lu
Y1JlbmRlcmVyOwotICB9Ci0KLSAgcHVibGljIGFic3RyYWN0IHN0YXRpYyBjbGFzcyBUZXN0T2Jq
ZWN0RmFjdG9yeSB7Ci0gICAgZmluYWwgQ2FtZXJhRW51bWVyYXRvciBjYW1lcmFFbnVtZXJhdG9y
OwotCi0gICAgVGVzdE9iamVjdEZhY3RvcnkoKSB7Ci0gICAgICBjYW1lcmFFbnVtZXJhdG9yID0g
Z2V0Q2FtZXJhRW51bWVyYXRvcigpOwotICAgIH0KLQotICAgIHB1YmxpYyBDYW1lcmFWaWRlb0Nh
cHR1cmVyIGNyZWF0ZUNhcHR1cmVyKAotICAgICAgICBTdHJpbmcgbmFtZSwgQ2FtZXJhVmlkZW9D
YXB0dXJlci5DYW1lcmFFdmVudHNIYW5kbGVyIGV2ZW50c0hhbmRsZXIpIHsKLSAgICAgIHJldHVy
biBjYW1lcmFFbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKG5hbWUsIGV2ZW50c0hhbmRsZXIpOwot
ICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZU9mRnJvbnRGYWNpbmdEZXZpY2UoKSB7
Ci0gICAgICBmb3IgKFN0cmluZyBkZXZpY2VOYW1lIDogY2FtZXJhRW51bWVyYXRvci5nZXREZXZp
Y2VOYW1lcygpKSB7Ci0gICAgICAgIGlmIChjYW1lcmFFbnVtZXJhdG9yLmlzRnJvbnRGYWNpbmco
ZGV2aWNlTmFtZSkpIHsKLSAgICAgICAgICByZXR1cm4gZGV2aWNlTmFtZTsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5n
IGdldE5hbWVPZkJhY2tGYWNpbmdEZXZpY2UoKSB7Ci0gICAgICBmb3IgKFN0cmluZyBkZXZpY2VO
YW1lIDogY2FtZXJhRW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpKSB7Ci0gICAgICAgIGlmIChj
YW1lcmFFbnVtZXJhdG9yLmlzQmFja0ZhY2luZyhkZXZpY2VOYW1lKSkgewotICAgICAgICAgIHJl
dHVybiBkZXZpY2VOYW1lOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBudWxs
OwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGhhdmVUd29DYW1lcmFzKCkgewotICAgICAg
cmV0dXJuIGNhbWVyYUVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKS5sZW5ndGggPj0gMjsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc0NhcHR1cmluZ1RvVGV4dHVyZSgpIHsKLSAgICAg
IC8vIEluIHRoZSBmdXR1cmUsIHdlIHBsYW4gdG8gb25seSBzdXBwb3J0IGNhcHR1cmluZyB0byB0
ZXh0dXJlLCBzbyBkZWZhdWx0IHRvIHRydWUKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIGFic3RyYWN0IHB1YmxpYyBDYW1lcmFFbnVtZXJhdG9yIGdldENhbWVyYUVudW1lcmF0b3Io
KTsKLSAgICBhYnN0cmFjdCBwdWJsaWMgQ29udGV4dCBnZXRBcHBDb250ZXh0KCk7Ci0KLSAgICAv
LyBDYW1lcmFWaWRlb0NhcHR1cmVyIEFQSSBpcyB0b28gc2xvdyBmb3Igc29tZSBvZiBvdXIgdGVz
dHMgd2hlcmUgd2UgbmVlZCB0byBvcGVuIGEgY29tcGV0aW5nCi0gICAgLy8gY2FtZXJhLiBUaGVz
ZSBtZXRob2RzIGFyZSB1c2VkIGluc3RlYWQuCi0gICAgYWJzdHJhY3QgcHVibGljIE9iamVjdCBy
YXdPcGVuQ2FtZXJhKFN0cmluZyBjYW1lcmFOYW1lKTsKLSAgICBhYnN0cmFjdCBwdWJsaWMgdm9p
ZCByYXdDbG9zZUNhbWVyYShPYmplY3QgY2FtZXJhKTsKLSAgfQotCi0gIHByaXZhdGUgUGVlckNv
bm5lY3Rpb25GYWN0b3J5IHBlZXJDb25uZWN0aW9uRmFjdG9yeTsKLSAgcHJpdmF0ZSBUZXN0T2Jq
ZWN0RmFjdG9yeSB0ZXN0T2JqZWN0RmFjdG9yeTsKLQotICBDYW1lcmFWaWRlb0NhcHR1cmVyVGVz
dEZpeHR1cmVzKFRlc3RPYmplY3RGYWN0b3J5IHRlc3RPYmplY3RGYWN0b3J5KSB7Ci0gICAgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVBbmRyb2lkR2xvYmFscygKLSAgICAgICAgdGVz
dE9iamVjdEZhY3RvcnkuZ2V0QXBwQ29udGV4dCgpLCB0cnVlLCB0cnVlLCB0cnVlKTsKLQotICAg
IHRoaXMucGVlckNvbm5lY3Rpb25GYWN0b3J5ID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeShu
dWxsIC8qIG9wdGlvbnMgKi8pOwotICAgIHRoaXMudGVzdE9iamVjdEZhY3RvcnkgPSB0ZXN0T2Jq
ZWN0RmFjdG9yeTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgdGhpcy5w
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuZGlzcG9zZSgpOwotICB9Ci0KLSAgLy8gSW50ZXJuYWwgaGVs
cGVyIG1ldGhvZHMKLSAgcHJpdmF0ZSBDYXB0dXJlckluc3RhbmNlIGNyZWF0ZUNhcHR1cmVyKFN0
cmluZyBuYW1lLCBib29sZWFuIGluaXRpYWxpemUpIHsKLSAgICBDYXB0dXJlckluc3RhbmNlIGlu
c3RhbmNlID0gbmV3IENhcHR1cmVySW5zdGFuY2UoKTsKLSAgICBpbnN0YW5jZS5jYW1lcmFFdmVu
dHMgPSBuZXcgQ2FtZXJhRXZlbnRzKCk7Ci0gICAgaW5zdGFuY2UuY2FwdHVyZXIgPSB0ZXN0T2Jq
ZWN0RmFjdG9yeS5jcmVhdGVDYXB0dXJlcihuYW1lLCBpbnN0YW5jZS5jYW1lcmFFdmVudHMpOwot
ICAgIGluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyID0gU3VyZmFjZVRleHR1cmVIZWxwZXIu
Y3JlYXRlKAotICAgICAgICAiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFt
ZSAqLywgbnVsbCAvKiBzaGFyZWRDb250ZXh0ICovKTsKLSAgICBpbnN0YW5jZS5vYnNlcnZlciA9
IG5ldyBGYWtlQ2FwdHVyZXJPYnNlcnZlcigpOwotICAgIGlmIChpbml0aWFsaXplKSB7Ci0gICAg
ICBpbnN0YW5jZS5jYXB0dXJlci5pbml0aWFsaXplKAotICAgICAgICAgIGluc3RhbmNlLnN1cmZh
Y2VUZXh0dXJlSGVscGVyLCB0ZXN0T2JqZWN0RmFjdG9yeS5nZXRBcHBDb250ZXh0KCksIGluc3Rh
bmNlLm9ic2VydmVyKTsKLSAgICB9Ci0gICAgaW5zdGFuY2Uuc3VwcG9ydGVkRm9ybWF0cyA9IHRl
c3RPYmplY3RGYWN0b3J5LmNhbWVyYUVudW1lcmF0b3IuZ2V0U3VwcG9ydGVkRm9ybWF0cyhuYW1l
KTsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwcml2YXRlIENhcHR1cmVySW5zdGFu
Y2UgY3JlYXRlQ2FwdHVyZXIoYm9vbGVhbiBpbml0aWFsaXplKSB7Ci0gICAgU3RyaW5nIG5hbWUg
PSB0ZXN0T2JqZWN0RmFjdG9yeS5jYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF07
Ci0gICAgcmV0dXJuIGNyZWF0ZUNhcHR1cmVyKG5hbWUsIGluaXRpYWxpemUpOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHN0YXJ0Q2FwdHVyZShDYXB0dXJlckluc3RhbmNlIGluc3RhbmNlKSB7Ci0g
ICAgc3RhcnRDYXB0dXJlKGluc3RhbmNlLCAwKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdGFy
dENhcHR1cmUoQ2FwdHVyZXJJbnN0YW5jZSBpbnN0YW5jZSwgaW50IGZvcm1hdEluZGV4KSB7Ci0g
ICAgZmluYWwgQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQgZm9ybWF0ID0K
LSAgICAgICAgaW5zdGFuY2Uuc3VwcG9ydGVkRm9ybWF0cy5nZXQoZm9ybWF0SW5kZXgpOwotCi0g
ICAgaW5zdGFuY2UuY2FwdHVyZXIuc3RhcnRDYXB0dXJlKGZvcm1hdC53aWR0aCwgZm9ybWF0Lmhl
aWdodCwgZm9ybWF0LmZyYW1lcmF0ZS5tYXgpOwotICAgIGluc3RhbmNlLmZvcm1hdCA9IGZvcm1h
dDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkaXNwb3NlQ2FwdHVyZXIoQ2FwdHVyZXJJbnN0YW5j
ZSBpbnN0YW5jZSkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpbnN0YW5jZS5j
YXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIGluc3RhbmNlLmNhbWVyYUV2ZW50cy53YWl0Rm9y
Q2FtZXJhQ2xvc2VkKCk7Ci0gICAgaW5zdGFuY2UuY2FwdHVyZXIuZGlzcG9zZSgpOwotICAgIGlu
c3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgIGlu
c3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLSAgfQotCi0gIHByaXZhdGUg
VmlkZW9UcmFja1dpdGhSZW5kZXJlciBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKAotICAg
ICAgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYXB0dXJlciwgVmlkZW9SZW5kZXJlci5DYWxsYmFja3Mg
cmVuZGVyZXJDYWxsYmFja3MpIHsKLSAgICBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJh
Y2tXaXRoUmVuZGVyZXIgPSBuZXcgVmlkZW9UcmFja1dpdGhSZW5kZXJlcigpOwotICAgIHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIuc291cmNlID0gcGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVZp
ZGVvU291cmNlKGNhcHR1cmVyKTsKLSAgICBjYXB0dXJlci5zdGFydENhcHR1cmUoREVGQVVMVF9X
SURUSCwgREVGQVVMVF9IRUlHSFQsIERFRkFVTFRfRlBTKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJl
bmRlcmVyLnRyYWNrID0KLSAgICAgICAgcGVlckNvbm5lY3Rpb25GYWN0b3J5LmNyZWF0ZVZpZGVv
VHJhY2soImR1bW15IiwgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5zb3VyY2UpOwotICAgIHZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIudHJhY2suYWRkUmVuZGVyZXIobmV3IFZpZGVvUmVuZGVyZXIocmVu
ZGVyZXJDYWxsYmFja3MpKTsKLSAgICByZXR1cm4gdmlkZW9UcmFja1dpdGhSZW5kZXJlcjsKLSAg
fQotCi0gIHByaXZhdGUgVmlkZW9UcmFja1dpdGhSZW5kZXJlciBjcmVhdGVWaWRlb1RyYWNrV2l0
aFJlbmRlcmVyKENhbWVyYVZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIpIHsKLSAgICBSZW5kZXJlckNh
bGxiYWNrcyByZW5kZXJlckNhbGxiYWNrcyA9IG5ldyBSZW5kZXJlckNhbGxiYWNrcygpOwotICAg
IFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAg
IGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXIsIHJlbmRlcmVyQ2FsbGJhY2tz
KTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzID0gcmVuZGVy
ZXJDYWxsYmFja3M7Ci0gICAgcmV0dXJuIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXI7Ci0gIH0KLQot
ICBwcml2YXRlIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgY3JlYXRlVmlkZW9UcmFja1dpdGhGYWtl
QXN5bmNSZW5kZXJlcigKLSAgICAgIENhbWVyYVZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIpIHsKLSAg
ICBGYWtlQXN5bmNSZW5kZXJlciBmYWtlQXN5bmNSZW5kZXJlciA9IG5ldyBGYWtlQXN5bmNSZW5k
ZXJlcigpOwotICAgIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJl
ciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXIsIGZha2VB
c3luY1JlbmRlcmVyKTsKLSAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLmZha2VBc3luY1JlbmRl
cmVyID0gZmFrZUFzeW5jUmVuZGVyZXI7Ci0gICAgcmV0dXJuIHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXI7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZGlzcG9zZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIo
VmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyKSB7Ci0gICAgdmlk
ZW9UcmFja1dpdGhSZW5kZXJlci50cmFjay5kaXNwb3NlKCk7Ci0gICAgdmlkZW9UcmFja1dpdGhS
ZW5kZXJlci5zb3VyY2UuZGlzcG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHdhaXRVbnRp
bElkbGUoQ2FwdHVyZXJJbnN0YW5jZSBjYXB0dXJlckluc3RhbmNlKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENvdW50RG93bkxhdGNoIGJhcnJpZXIgPSBuZXcgQ291
bnREb3duTGF0Y2goMSk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBl
ci5nZXRIYW5kbGVyKCkucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgYmFycmllci5jb3VudERvd24oKTsKLSAg
ICAgIH0KLSAgICB9KTsKLSAgICBiYXJyaWVyLmF3YWl0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIoU3RyaW5nIG5hbWUpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKG5hbWUgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy53KFRB
RywgIlNraXBwaW5nIHZpZGVvIGNhcHR1cmVyIHRlc3QgYmVjYXVzZSBkZXZpY2UgbmFtZSBpcyBu
dWxsLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFsIENhcHR1cmVySW5zdGFu
Y2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKG5hbWUsIGZhbHNlIC8qIGluaXRp
YWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dp
dGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVy
ZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1RyYWNrV2l0aFJlbmRl
cmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0RnJhbWVUb1JlbmRlcigpID4gMCk7Ci0g
ICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICAgIGRpc3Bvc2VWaWRlb1Ry
YWNrV2l0aFJlbmRlcmVyKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIpOwotICB9Ci0KLSAgLy8gVGVz
dCBtZXRob2RzCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUNhcHR1cmVyQW5kRGlzcG9zZSgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNyZWF0ZUNhcHR1
cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAqLykpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRl
Tm9uRXhpc3RpbmdDYW1lcmEoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIHRy
eSB7Ci0gICAgICBkaXNwb3NlQ2FwdHVyZXIoY3JlYXRlQ2FwdHVyZXIoIm5vbi1leGlzdGluZyBj
YW1lcmEiLCBmYWxzZSAvKiBpbml0aWFsaXplICovKSk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFy
Z3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmYWlsKCJF
eHBlY3RlZCBpbGxlZ2FsIGFyZ3VtZW50IGV4Y2VwdGlvbiB3aGVuIGNyZWF0aW5nIG5vbi1leGlz
dGluZyBjYW1lcmEuIik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVDYXB0dXJlckFuZFJl
bmRlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgU3RyaW5nIG5hbWUgPSB0
ZXN0T2JqZWN0RmFjdG9yeS5jYW1lcmFFbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF07Ci0g
ICAgY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIobmFtZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBj
cmVhdGVGcm9udEZhY2luZ0NhcHR1cmVyQW5kUmVuZGVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBjcmVhdGVDYXB0dXJlckFuZFJlbmRlcih0ZXN0T2JqZWN0RmFjdG9yeS5n
ZXROYW1lT2ZGcm9udEZhY2luZ0RldmljZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0
ZUJhY2tGYWNpbmdDYXB0dXJlckFuZFJlbmRlcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgY3JlYXRlQ2FwdHVyZXJBbmRSZW5kZXIodGVzdE9iamVjdEZhY3RvcnkuZ2V0TmFt
ZU9mQmFja0ZhY2luZ0RldmljZSgpKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN3aXRjaENhbWVy
YSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKCF0ZXN0T2JqZWN0RmFj
dG9yeS5oYXZlVHdvQ2FtZXJhcygpKSB7Ci0gICAgICBMb2dnaW5nLncoCi0gICAgICAgICAgVEFH
LCAiU2tpcHBpbmcgdGVzdCBzd2l0Y2ggdmlkZW8gY2FwdHVyZXIgYmVjYXVzZSB0aGUgZGV2aWNl
IGRvZXNuJ3QgaGF2ZSB0d28gY2FtZXJhcy4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJl
cihmYWxzZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBmaW5hbCBWaWRlb1RyYWNrV2l0aFJlbmRl
cmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgPQotICAgICAgICBjcmVhdGVWaWRlb1RyYWNrV2l0
aFJlbmRlcmVyKGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIpOwotICAgIC8vIFdhaXQgZm9yIHRo
ZSBjYW1lcmEgdG8gc3RhcnQgc28gd2UgY2FuIHN3aXRjaCBpdAotICAgIGFzc2VydFRydWUodmlk
ZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy53YWl0Rm9yTmV4dEZyYW1lVG9S
ZW5kZXIoKSA+IDApOwotCi0gICAgLy8gQXJyYXkgd2l0aCBvbmUgZWxlbWVudCB0byBhdm9pZCBm
aW5hbCBwcm9ibGVtIGluIG5lc3RlZCBjbGFzc2VzLgotICAgIGZpbmFsIGJvb2xlYW5bXSBjYW1l
cmFTd2l0Y2hTdWNjZXNzZnVsID0gbmV3IGJvb2xlYW5bMV07Ci0gICAgZmluYWwgQ291bnREb3du
TGF0Y2ggYmFycmllciA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLSAgICBjYXB0dXJlckluc3Rh
bmNlLmNhcHR1cmVyLnN3aXRjaENhbWVyYShuZXcgQ2FtZXJhVmlkZW9DYXB0dXJlci5DYW1lcmFT
d2l0Y2hIYW5kbGVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNh
bWVyYVN3aXRjaERvbmUoYm9vbGVhbiBpc0Zyb250Q2FtZXJhKSB7Ci0gICAgICAgIGNhbWVyYVN3
aXRjaFN1Y2Nlc3NmdWxbMF0gPSB0cnVlOwotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigpOwot
ICAgICAgfQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNhbWVyYVN3aXRj
aEVycm9yKFN0cmluZyBlcnJvckRlc2NyaXB0aW9uKSB7Ci0gICAgICAgIGNhbWVyYVN3aXRjaFN1
Y2Nlc3NmdWxbMF0gPSBmYWxzZTsKLSAgICAgICAgYmFycmllci5jb3VudERvd24oKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgICAvLyBXYWl0IHVudGlsIHRoZSBjYW1lcmEgaGFzIGJlZW4gc3dpdGNo
ZWQuCi0gICAgYmFycmllci5hd2FpdCgpOwotCi0gICAgLy8gQ2hlY2sgcmVzdWx0LgotICAgIGFz
c2VydFRydWUoY2FtZXJhU3dpdGNoU3VjY2Vzc2Z1bFswXSk7Ci0gICAgLy8gRW5zdXJlIHRoYXQg
ZnJhbWVzIGFyZSByZWNlaXZlZC4KLSAgICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVy
ZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLSAg
ICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVvVHJh
Y2tXaXRoUmVuZGVyZXIodmlkZW9UcmFja1dpdGhSZW5kZXJlcik7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBjYW1lcmFFdmVudHNJbnZva2VkKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0
dXJlcih0cnVlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlcklu
c3RhbmNlKTsKLSAgICAvLyBNYWtlIHN1cmUgY2FtZXJhIGlzIHN0YXJ0ZWQgYW5kIGZpcnN0IGZy
YW1lIGlzIHJlY2VpdmVkIGFuZCB0aGVuIHN0b3AgaXQuCi0gICAgYXNzZXJ0VHJ1ZShjYXB0dXJl
ckluc3RhbmNlLm9ic2VydmVyLndhaXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAgY2FwdHVy
ZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yTmV4dENhcHR1cmVkRnJhbWUoKTsKLSAgICBkaXNw
b3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0KLSAgICBhc3NlcnRUcnVlKGNhcHR1cmVy
SW5zdGFuY2UuY2FtZXJhRXZlbnRzLm9uQ2FtZXJhT3BlbmluZ0NhbGxlZCk7Ci0gICAgYXNzZXJ0
VHJ1ZShjYXB0dXJlckluc3RhbmNlLmNhbWVyYUV2ZW50cy5vbkZpcnN0RnJhbWVBdmFpbGFibGVD
YWxsZWQpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2FtZXJhQ2FsbHNBZnRlclN0b3AoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2Fw
dHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0g
ICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5zdGFuY2UpOwotICAgIC8vIE1ha2Ugc3VyZSBjYW1l
cmEgaXMgc3RhcnRlZCBhbmQgdGhlbiBzdG9wIGl0LgotICAgIGFzc2VydFRydWUoY2FwdHVyZXJJ
bnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkpOwotICAgIGNhcHR1cmVy
SW5zdGFuY2UuY2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLnN1
cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwotCi0gICAgLy8gV2UgY2Fu
J3QgY2hhbmdlIHxjYXB0dXJlcnwgYXQgdGhpcyBwb2ludCwgYnV0IHdlIHNob3VsZCBub3QgY3Jh
c2guCi0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zd2l0Y2hDYW1lcmEobnVsbCAvKiBz
d2l0Y2hFdmVudHNIYW5kbGVyICovKTsKLSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLmNo
YW5nZUNhcHR1cmVGb3JtYXQoREVGQVVMVF9XSURUSCwgREVGQVVMVF9IRUlHSFQsIERFRkFVTFRf
RlBTKTsKLQotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNlKTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHN0b3BSZXN0YXJ0VmlkZW9Tb3VyY2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9
IGNyZWF0ZUNhcHR1cmVyKGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwotICAgIGZpbmFsIFZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9Ci0gICAgICAgIGNyZWF0
ZVZpZGVvVHJhY2tXaXRoUmVuZGVyZXIoY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlcik7Ci0KLSAg
ICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2Fp
dEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLSAgICBhc3NlcnRFcXVhbHMoTWVkaWFTb3Vy
Y2UuU3RhdGUuTElWRSwgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5zb3VyY2Uuc3RhdGUoKSk7Ci0K
LSAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgYXNzZXJ0
RXF1YWxzKE1lZGlhU291cmNlLlN0YXRlLkVOREVELCB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnNv
dXJjZS5zdGF0ZSgpKTsKLQotICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLSAg
ICBhc3NlcnRUcnVlKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2Fp
dEZvck5leHRGcmFtZVRvUmVuZGVyKCkgPiAwKTsKLSAgICBhc3NlcnRFcXVhbHMoTWVkaWFTb3Vy
Y2UuU3RhdGUuTElWRSwgdmlkZW9UcmFja1dpdGhSZW5kZXJlci5zb3VyY2Uuc3RhdGUoKSk7Ci0K
LSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7Ci0gICAgZGlzcG9zZVZpZGVv
VHJhY2tXaXRoUmVuZGVyZXIodmlkZW9UcmFja1dpdGhSZW5kZXJlcik7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCBzdGFydFN0b3BXaXRoRGlmZmVyZW50UmVzb2x1dGlvbnMoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0
YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVySW5z
dGFuY2UsIGkpOwotICAgICAgYXNzZXJ0VHJ1ZShjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLndh
aXRGb3JDYXB0dXJlclRvU3RhcnQoKSk7Ci0gICAgICBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVy
LndhaXRGb3JOZXh0Q2FwdHVyZWRGcmFtZSgpOwotCi0gICAgICAvLyBDaGVjayB0aGUgZnJhbWUg
c2l6ZS4gVGhlIGFjdHVhbCB3aWR0aCBhbmQgaGVpZ2h0IGRlcGVuZCBvbiBob3cgdGhlIGNhcHR1
cmVyIGlzIG1vdW50ZWQuCi0gICAgICBmaW5hbCBib29sZWFuIGlkZW50aWNhbFJlc29sdXRpb24g
PQotICAgICAgICAgIChjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZyYW1lV2lkdGgoKSA9PSBj
YXB0dXJlckluc3RhbmNlLmZvcm1hdC53aWR0aAotICAgICAgICAgICAgICAmJiBjYXB0dXJlcklu
c3RhbmNlLm9ic2VydmVyLmZyYW1lSGVpZ2h0KCkgPT0gY2FwdHVyZXJJbnN0YW5jZS5mb3JtYXQu
aGVpZ2h0KTsKLSAgICAgIGZpbmFsIGJvb2xlYW4gZmxpcHBlZFJlc29sdXRpb24gPQotICAgICAg
ICAgIChjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZyYW1lV2lkdGgoKSA9PSBjYXB0dXJlcklu
c3RhbmNlLmZvcm1hdC5oZWlnaHQKLSAgICAgICAgICAgICAgJiYgY2FwdHVyZXJJbnN0YW5jZS5v
YnNlcnZlci5mcmFtZUhlaWdodCgpID09IGNhcHR1cmVySW5zdGFuY2UuZm9ybWF0LndpZHRoKTsK
LSAgICAgIGlmICghaWRlbnRpY2FsUmVzb2x1dGlvbiAmJiAhZmxpcHBlZFJlc29sdXRpb24pIHsK
LSAgICAgICAgZmFpbCgiV3JvbmcgcmVzb2x1dGlvbiwgZ290OiAiICsgY2FwdHVyZXJJbnN0YW5j
ZS5vYnNlcnZlci5mcmFtZVdpZHRoKCkgKyAieCIKLSAgICAgICAgICAgICsgY2FwdHVyZXJJbnN0
YW5jZS5vYnNlcnZlci5mcmFtZUhlaWdodCgpICsgIiBleHBlY3RlZDogIgotICAgICAgICAgICAg
KyBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC53aWR0aCArICJ4IiArIGNhcHR1cmVySW5zdGFuY2Uu
Zm9ybWF0LmhlaWdodCArICIgb3IgIgotICAgICAgICAgICAgKyBjYXB0dXJlckluc3RhbmNlLmZv
cm1hdC5oZWlnaHQgKyAieCIgKyBjYXB0dXJlckluc3RhbmNlLmZvcm1hdC53aWR0aCk7Ci0gICAg
ICB9Ci0KLSAgICAgIGlmICh0ZXN0T2JqZWN0RmFjdG9yeS5pc0NhcHR1cmluZ1RvVGV4dHVyZSgp
KSB7Ci0gICAgICAgIGFzc2VydEVxdWFscygwLCBjYXB0dXJlckluc3RhbmNlLm9ic2VydmVyLmZy
YW1lU2l6ZSgpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFzc2VydFRydWUoY2FwdHVyZXJJ
bnN0YW5jZS5mb3JtYXQuZnJhbWVTaXplKCkgPD0gY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci5m
cmFtZVNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBjYXB0dXJlckluc3RhbmNlLmNhcHR1cmVyLnN0
b3BDYXB0dXJlKCk7Ci0gICAgICBjYXB0dXJlckluc3RhbmNlLnN1cmZhY2VUZXh0dXJlSGVscGVy
LnJldHVyblRleHR1cmVGcmFtZSgpOwotICAgIH0KLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVy
ZXJJbnN0YW5jZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXR1cm5CdWZmZXJMYXRlKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNh
cHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcih0cnVlIC8qIGluaXRpYWxpemUgKi8pOwot
ICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLSAgICBhc3NlcnRUcnVlKGNhcHR1
cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLQotICAgIGNh
cHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvck5leHRDYXB0dXJlZEZyYW1lKCk7Ci0gICAg
Y2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIExpc3Q8TG9uZz4g
bGlzdE9mdGltZXN0YW1wcyA9IGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZ2V0Q29weUFuZFJl
c2V0TGlzdE9mdGltZVN0YW1wcygpOwotICAgIGFzc2VydFRydWUobGlzdE9mdGltZXN0YW1wcy5z
aXplKCkgPj0gMSk7Ci0KLSAgICBzdGFydENhcHR1cmUoY2FwdHVyZXJJbnN0YW5jZSwgMSk7Ci0g
ICAgY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCk7Ci0g
ICAgY2FwdHVyZXJJbnN0YW5jZS5zdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJh
bWUoKTsKLQotICAgIGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvck5leHRDYXB0dXJl
ZEZyYW1lKCk7Ci0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwot
Ci0gICAgbGlzdE9mdGltZXN0YW1wcyA9IGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIuZ2V0Q29w
eUFuZFJlc2V0TGlzdE9mdGltZVN0YW1wcygpOwotICAgIGFzc2VydFRydWUobGlzdE9mdGltZXN0
YW1wcy5zaXplKCkgPj0gMSk7Ci0KLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5j
ZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZXR1cm5CdWZmZXJMYXRlRW5kVG9FbmQoKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2Fw
dHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGZhbHNlIC8qIGluaXRpYWxpemUgKi8pOwot
ICAgIGZpbmFsIFZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgdmlkZW9UcmFja1dpdGhSZW5kZXJlciA9
Ci0gICAgICAgIGNyZWF0ZVZpZGVvVHJhY2tXaXRoRmFrZUFzeW5jUmVuZGVyZXIoY2FwdHVyZXJJ
bnN0YW5jZS5jYXB0dXJlcik7Ci0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGZyYW1lIHRo
YXQgaGFzIG5vdCBiZWVuIHJldHVybmVkLgotICAgIGFzc2VydEZhbHNlKHZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIuZmFrZUFzeW5jUmVuZGVyZXIud2FpdEZvclBlbmRpbmdGcmFtZXMoKS5pc0VtcHR5
KCkpOwotCi0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotCi0g
ICAgLy8gRGlzcG9zZSBldmVyeXRoaW5nLgotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlcklu
c3RhbmNlKTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dpdGhSZW5kZXJlcih2aWRlb1RyYWNrV2l0
aFJlbmRlcmVyKTsKLQotICAgIC8vIFJldHVybiB0aGUgZnJhbWUocyksIG9uIGEgZGlmZmVyZW50
IHRocmVhZCBvdXQgb2Ygc3BpdGUuCi0gICAgZmluYWwgTGlzdDxJNDIwRnJhbWU+IHBlbmRpbmdG
cmFtZXMgPQotICAgICAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLmZha2VBc3luY1JlbmRlcmVy
LndhaXRGb3JQZW5kaW5nRnJhbWVzKCk7Ci0gICAgZmluYWwgVGhyZWFkIHJldHVyblRocmVhZCA9
IG5ldyBUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGZvciAoSTQyMEZyYW1lIGZyYW1lIDogcGVuZGluZ0Zy
YW1lcykgewotICAgICAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICAgIHJldHVyblRocmVhZC5zdGFydCgpOwot
ICAgIHJldHVyblRocmVhZC5qb2luKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjYW1lcmFGcmVl
emVkRXZlbnRPbkJ1ZmZlclN0YXJ2YXRpb24oKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNh
cHR1cmVyKHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0gICAgc3RhcnRDYXB0dXJlKGNhcHR1cmVy
SW5zdGFuY2UpOwotICAgIC8vIE1ha2Ugc3VyZSBjYW1lcmEgaXMgc3RhcnRlZC4KLSAgICBhc3Nl
cnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFydCgp
KTsKLSAgICAvLyBTaW5jZSB3ZSBkb24ndCByZXR1cm4gdGhlIGJ1ZmZlciwgd2Ugc2hvdWxkIGdl
dCBhIHN0YXJ2YXRpb24gbWVzc2FnZSBpZiB3ZSBhcmUKLSAgICAvLyBjYXB0dXJpbmcgdG8gYSB0
ZXh0dXJlLgotICAgIGFzc2VydEVxdWFscygiQ2FtZXJhIGZhaWx1cmUuIENsaWVudCBtdXN0IHJl
dHVybiB2aWRlbyBidWZmZXJzLiIsCi0gICAgICAgIGNhcHR1cmVySW5zdGFuY2UuY2FtZXJhRXZl
bnRzLndhaXRGb3JDYW1lcmFGcmVlemVkKCkpOwotCi0gICAgY2FwdHVyZXJJbnN0YW5jZS5jYXB0
dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJlckluc3RhbmNl
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNjYWxlQ2FtZXJhT3V0cHV0KCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5z
dGFuY2UgPSBjcmVhdGVDYXB0dXJlcihmYWxzZSAvKiBpbml0aWFsaXplICovKTsKLSAgICBmaW5h
bCBWaWRlb1RyYWNrV2l0aFJlbmRlcmVyIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIgPQotICAgICAg
ICBjcmVhdGVWaWRlb1RyYWNrV2l0aFJlbmRlcmVyKGNhcHR1cmVySW5zdGFuY2UuY2FwdHVyZXIp
OwotICAgIGFzc2VydFRydWUodmlkZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNr
cy53YWl0Rm9yTmV4dEZyYW1lVG9SZW5kZXIoKSA+IDApOwotCi0gICAgZmluYWwgaW50IHN0YXJ0
V2lkdGggPSB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lV2lk
dGgoKTsKLSAgICBmaW5hbCBpbnQgc3RhcnRIZWlnaHQgPSB2aWRlb1RyYWNrV2l0aFJlbmRlcmVy
LnJlbmRlcmVyQ2FsbGJhY2tzLmZyYW1lSGVpZ2h0KCk7Ci0gICAgZmluYWwgaW50IGZyYW1lUmF0
ZSA9IDMwOwotICAgIGZpbmFsIGludCBzY2FsZWRXaWR0aCA9IHN0YXJ0V2lkdGggLyAyOwotICAg
IGZpbmFsIGludCBzY2FsZWRIZWlnaHQgPSBzdGFydEhlaWdodCAvIDI7Ci0KLSAgICAvLyBSZXF1
ZXN0IHRoZSBjYXB0dXJlZCBmcmFtZXMgdG8gYmUgc2NhbGVkLgotICAgIHZpZGVvVHJhY2tXaXRo
UmVuZGVyZXIuc291cmNlLmFkYXB0T3V0cHV0Rm9ybWF0KHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQsIGZyYW1lUmF0ZSk7Ci0KLSAgICBib29sZWFuIGdvdEV4cGVjdGVkUmVzb2x1dGlvbiA9IGZh
bHNlOwotICAgIGludCBudW1iZXJPZkluc3BlY3RlZEZyYW1lcyA9IDA7Ci0KLSAgICBkbyB7Ci0g
ICAgICB2aWRlb1RyYWNrV2l0aFJlbmRlcmVyLnJlbmRlcmVyQ2FsbGJhY2tzLndhaXRGb3JOZXh0
RnJhbWVUb1JlbmRlcigpOwotICAgICAgKytudW1iZXJPZkluc3BlY3RlZEZyYW1lczsKLQotICAg
ICAgZ290RXhwZWN0ZWRSZXNvbHV0aW9uID0gKHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVy
ZXJDYWxsYmFja3MuZnJhbWVXaWR0aCgpID09IHNjYWxlZFdpZHRoCi0gICAgICAgICAgJiYgdmlk
ZW9UcmFja1dpdGhSZW5kZXJlci5yZW5kZXJlckNhbGxiYWNrcy5mcmFtZUhlaWdodCgpID09IHNj
YWxlZEhlaWdodCk7Ci0gICAgfSB3aGlsZSAoIWdvdEV4cGVjdGVkUmVzb2x1dGlvbiAmJiBudW1i
ZXJPZkluc3BlY3RlZEZyYW1lcyA8IDMwKTsKLQotICAgIGRpc3Bvc2VDYXB0dXJlcihjYXB0dXJl
ckluc3RhbmNlKTsKLSAgICBkaXNwb3NlVmlkZW9UcmFja1dpdGhSZW5kZXJlcih2aWRlb1RyYWNr
V2l0aFJlbmRlcmVyKTsKLQotICAgIGFzc2VydFRydWUoZ290RXhwZWN0ZWRSZXNvbHV0aW9uKTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlPcGVuKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5hbCBTdHJpbmcgY2FtZXJhTmFtZSA9
IHRlc3RPYmplY3RGYWN0b3J5LmdldE5hbWVPZkJhY2tGYWNpbmdEZXZpY2UoKTsKLSAgICAvLyBB
dCB0aGlzIHBvaW50IGNhbWVyYSBpcyBub3QgYWN0dWFsbHkgb3BlbmVkLgotICAgIGZpbmFsIENh
cHR1cmVySW5zdGFuY2UgY2FwdHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGNhbWVyYU5h
bWUsIHRydWUgLyogaW5pdGlhbGl6ZSAqLyk7Ci0KLSAgICBmaW5hbCBPYmplY3QgY29tcGV0aW5n
Q2FtZXJhID0gdGVzdE9iamVjdEZhY3RvcnkucmF3T3BlbkNhbWVyYShjYW1lcmFOYW1lKTsKLQot
ICAgIHN0YXJ0Q2FwdHVyZShjYXB0dXJlckluc3RhbmNlKTsKLQotICAgIGlmIChhbmRyb2lkLm9z
LkJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+IGFuZHJvaWQub3MuQnVpbGQuVkVSU0lPTl9DT0RFUy5M
T0xMSVBPUF9NUjEpIHsKLSAgICAgIC8vIFRoZSBmaXJzdCBvcGVuZWQgY2FtZXJhIGNsaWVudCB3
aWxsIGJlIGV2aWN0ZWQuCi0gICAgICBhc3NlcnRUcnVlKGNhcHR1cmVySW5zdGFuY2Uub2JzZXJ2
ZXIud2FpdEZvckNhcHR1cmVyVG9TdGFydCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgYXNzZXJ0
RmFsc2UoY2FwdHVyZXJJbnN0YW5jZS5vYnNlcnZlci53YWl0Rm9yQ2FwdHVyZXJUb1N0YXJ0KCkp
OwotICAgIH0KLQotICAgIHRlc3RPYmplY3RGYWN0b3J5LnJhd0Nsb3NlQ2FtZXJhKGNvbXBldGlu
Z0NhbWVyYSk7Ci0gICAgZGlzcG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgc3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVy
YSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgU3RyaW5nIGNhbWVy
YU5hbWUgPSB0ZXN0T2JqZWN0RmFjdG9yeS5nZXROYW1lT2ZCYWNrRmFjaW5nRGV2aWNlKCk7Ci0g
ICAgLy8gQXQgdGhpcyBwb2ludCBjYW1lcmEgaXMgbm90IGFjdHVhbGx5IG9wZW5lZC4KLSAgICBm
aW5hbCBDYXB0dXJlckluc3RhbmNlIGNhcHR1cmVySW5zdGFuY2UgPSBjcmVhdGVDYXB0dXJlcihj
YW1lcmFOYW1lLCBmYWxzZSAvKiBpbml0aWFsaXplICovKTsKLQotICAgIExvZ2dpbmcuZChUQUcs
ICJzdGFydFdoaWxlQ2FtZXJhSXNBbHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBPcGVuaW5nIGNv
bXBldGluZyBjYW1lcmEuIik7Ci0gICAgZmluYWwgT2JqZWN0IGNvbXBldGluZ0NhbWVyYSA9IHRl
c3RPYmplY3RGYWN0b3J5LnJhd09wZW5DYW1lcmEoY2FtZXJhTmFtZSk7Ci0KLSAgICBMb2dnaW5n
LmQoVEFHLCAic3RhcnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRDbG9zZUNhbWVyYTogT3Bl
bmluZyBjYW1lcmEuIik7Ci0gICAgZmluYWwgVmlkZW9UcmFja1dpdGhSZW5kZXJlciB2aWRlb1Ry
YWNrV2l0aFJlbmRlcmVyID0KLSAgICAgICAgY3JlYXRlVmlkZW9UcmFja1dpdGhSZW5kZXJlcihj
YXB0dXJlckluc3RhbmNlLmNhcHR1cmVyKTsKLSAgICB3YWl0VW50aWxJZGxlKGNhcHR1cmVySW5z
dGFuY2UpOwotCi0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJc0FscmVhZHlP
cGVuQW5kQ2xvc2VDYW1lcmE6IENsb3NpbmcgY29tcGV0aW5nIGNhbWVyYS4iKTsKLSAgICB0ZXN0
T2JqZWN0RmFjdG9yeS5yYXdDbG9zZUNhbWVyYShjb21wZXRpbmdDYW1lcmEpOwotCi0gICAgLy8g
TWFrZSBzdXJlIGNhbWVyYSBpcyBzdGFydGVkIGFuZCBmaXJzdCBmcmFtZSBpcyByZWNlaXZlZCBh
bmQgdGhlbiBzdG9wIGl0LgotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFdoaWxlQ2FtZXJhSXNB
bHJlYWR5T3BlbkFuZENsb3NlQ2FtZXJhOiBXYWl0aW5nIGZvciBjYXB0dXJlIHRvIHN0YXJ0LiIp
OwotICAgIHZpZGVvVHJhY2tXaXRoUmVuZGVyZXIucmVuZGVyZXJDYWxsYmFja3Mud2FpdEZvck5l
eHRGcmFtZVRvUmVuZGVyKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0V2hpbGVDYW1lcmFJ
c0FscmVhZHlPcGVuQW5kQ2xvc2VDYW1lcmE6IFN0b3BwaW5nIGNhcHR1cmUuIik7Ci0gICAgZGlz
cG9zZUNhcHR1cmVyKGNhcHR1cmVySW5zdGFuY2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3Rh
cnRXaGlsZUNhbWVyYUlzQWxyZWFkeU9wZW5BbmRTdG9wKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBmaW5hbCBTdHJpbmcgY2FtZXJhTmFtZSA9IHRlc3RPYmplY3RGYWN0b3J5
LmdldE5hbWVPZkJhY2tGYWNpbmdEZXZpY2UoKTsKLSAgICAvLyBBdCB0aGlzIHBvaW50IGNhbWVy
YSBpcyBub3QgYWN0dWFsbHkgb3BlbmVkLgotICAgIGZpbmFsIENhcHR1cmVySW5zdGFuY2UgY2Fw
dHVyZXJJbnN0YW5jZSA9IGNyZWF0ZUNhcHR1cmVyKGNhbWVyYU5hbWUsIHRydWUgLyogaW5pdGlh
bGl6ZSAqLyk7Ci0KLSAgICBmaW5hbCBPYmplY3QgY29tcGV0aW5nQ2FtZXJhID0gdGVzdE9iamVj
dEZhY3RvcnkucmF3T3BlbkNhbWVyYShjYW1lcmFOYW1lKTsKLQotICAgIHN0YXJ0Q2FwdHVyZShj
YXB0dXJlckluc3RhbmNlKTsKLSAgICBkaXNwb3NlQ2FwdHVyZXIoY2FwdHVyZXJJbnN0YW5jZSk7
Ci0KLSAgICB0ZXN0T2JqZWN0RmFjdG9yeS5yYXdDbG9zZUNhbWVyYShjb21wZXRpbmdDYW1lcmEp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL0VnbFJlbmRlcmVyVGVzdC5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Fw
aS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXJUZXN0LmphdmEJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvRWdsUmVuZGVyZXJUZXN0LmphdmEJKG5v
bmV4aXN0ZW50KQpAQCAtMSwyNjcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUg
V2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2Fn
ZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5CaXRtYXA7Ci1pbXBvcnQg
YW5kcm9pZC5ncmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5H
TEVTMTFFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFuZHJvaWQu
dGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVi
dWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7
Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEu
dXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vLyBFbXB0eUFjdGl2aXR5IGlzIG5lZWRlZCBm
b3IgdGhlIHN1cmZhY2UuCi1wdWJsaWMgY2xhc3MgRWdsUmVuZGVyZXJUZXN0IGV4dGVuZHMgSW5z
dHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBmaW5hbCBzdGF0aWMgU3RyaW5nIFRBRyA9ICJFZ2xS
ZW5kZXJlclRlc3QiOwotICBmaW5hbCBzdGF0aWMgaW50IFJFTkRFUl9XQUlUX01TID0gMTAwMDsK
LSAgZmluYWwgc3RhdGljIGludCBTVVJGQUNFX1dBSVRfTVMgPSAxMDAwOwotICBmaW5hbCBzdGF0
aWMgaW50IFRFU1RfRlJBTUVfV0lEVEggPSA0OwotICBmaW5hbCBzdGF0aWMgaW50IFRFU1RfRlJB
TUVfSEVJR0hUID0gNDsKLSAgLy8gU29tZSBhcmJpdHJhcnkgZnJhbWVzLgotICBmaW5hbCBzdGF0
aWMgQnl0ZUJ1ZmZlcltdW10gVEVTVF9GUkFNRVMgPSB7Ci0gICAgICB7Ci0gICAgICAgICAgQnl0
ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gewotICAgICAgICAgICAgICAxMSwgLTEyLCAxMywgLTE0
LCAtMTUsIDE2LCAtMTcsIDE4LCAxOSwgLTExMCwgMTExLCAtMTEyLCAtMTEzLCAxMTQsIC0xMTUs
IDExNn0pLAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMTcsIDExOCwg
MTE5LCAxMjB9KSwKLSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7MTIxLCAx
MjIsIDEyMywgMTI0fSksCi0gICAgICB9LAotICAgICAgewotICAgICAgICAgIEJ5dGVCdWZmZXIu
d3JhcChuZXcgYnl0ZVtdIHstMTEsIC0xMiwgLTEzLCAtMTQsIC0xNSwgLTE2LCAtMTcsIC0xOCwg
LTE5LCAtMTEwLCAtMTExLCAtMTEyLAotICAgICAgICAgICAgICAtMTEzLCAtMTE0LCAtMTE1LCAt
MTE2fSksCi0gICAgICAgICAgQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gey0xMjEsIC0xMjIs
IC0xMjMsIC0xMjR9KSwKLSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7LTEx
NywgLTExOCwgLTExOSwgLTEyMH0pLAotICAgICAgfSwKLSAgICAgIHsKLSAgICAgICAgICBCeXRl
QnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7LTExLCAtMTIsIC0xMywgLTE0LCAtMTUsIC0xNiwgLTE3
LCAtMTgsIC0xOSwgLTExMCwgLTExMSwgLTExMiwKLSAgICAgICAgICAgICAgLTExMywgLTExNCwg
LTExNSwgLTExNn0pLAotICAgICAgICAgIEJ5dGVCdWZmZXIud3JhcChuZXcgYnl0ZVtdIHsxMTcs
IDExOCwgMTE5LCAxMjB9KSwKLSAgICAgICAgICBCeXRlQnVmZmVyLndyYXAobmV3IGJ5dGVbXSB7
MTIxLCAxMjIsIDEyMywgMTI0fSksCi0gICAgICB9LAotICB9OwotCi0gIHByaXZhdGUgY2xhc3Mg
VGVzdEZyYW1lTGlzdGVuZXIgaW1wbGVtZW50cyBFZ2xSZW5kZXJlci5GcmFtZUxpc3RlbmVyIHsK
LSAgICBmaW5hbCBwcml2YXRlIEFycmF5TGlzdDxCaXRtYXA+IGJpdG1hcHMgPSBuZXcgQXJyYXlM
aXN0PEJpdG1hcD4oKTsKLSAgICBib29sZWFuIGJpdG1hcFJlY2VpdmVkOwotICAgIEJpdG1hcCBz
dG9yZWRCaXRtYXA7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZv
aWQgb25GcmFtZShCaXRtYXAgYml0bWFwKSB7Ci0gICAgICBpZiAoYml0bWFwUmVjZWl2ZWQpIHsK
LSAgICAgICAgZmFpbCgiVW5leHBlY3RlZCBiaXRtYXAgd2FzIHJlY2VpdmVkLiIpOwotICAgICAg
fQotCi0gICAgICBiaXRtYXBSZWNlaXZlZCA9IHRydWU7Ci0gICAgICBzdG9yZWRCaXRtYXAgPSBi
aXRtYXA7Ci0gICAgICBub3RpZnkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVk
IGJvb2xlYW4gd2FpdEZvckJpdG1hcChpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgICAgaWYgKCFiaXRtYXBSZWNlaXZlZCkgewotICAgICAgICB3YWl0KHRp
bWVvdXRNcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gYml0bWFwUmVjZWl2ZWQ7Ci0gICAgfQot
Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCBCaXRtYXAgcmVzZXRBbmRHZXRCaXRtYXAoKSB7Ci0g
ICAgICBiaXRtYXBSZWNlaXZlZCA9IGZhbHNlOwotICAgICAgcmV0dXJuIHN0b3JlZEJpdG1hcDsK
LSAgICB9Ci0gIH0KLQotICBmaW5hbCBUZXN0RnJhbWVMaXN0ZW5lciB0ZXN0RnJhbWVMaXN0ZW5l
ciA9IG5ldyBUZXN0RnJhbWVMaXN0ZW5lcigpOwotCi0gIEVnbFJlbmRlcmVyIGVnbFJlbmRlcmVy
OwotICBDb3VudERvd25MYXRjaCBzdXJmYWNlUmVhZHlMYXRjaCA9IG5ldyBDb3VudERvd25MYXRj
aCgxKTsKLSAgaW50IG9lc1RleHR1cmVJZDsKLSAgU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1
cmU7Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2Vw
dGlvbiB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVBbmRyb2lkR2xvYmFs
cyhnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksCi0gICAgICAgIHRydWUg
LyogaW5pdGlhbGl6ZUF1ZGlvICovLCB0cnVlIC8qIGluaXRpYWxpemVWaWRlbyAqLywgdHJ1ZSAv
KiB2aWRlb0h3QWNjZWxlcmF0aW9uICovKTsKLSAgICBlZ2xSZW5kZXJlciA9IG5ldyBFZ2xSZW5k
ZXJlcigiVGVzdFJlbmRlcmVyOiAiKTsKLSAgICBlZ2xSZW5kZXJlci5pbml0KG51bGwgLyogc2hh
cmVkQ29udGV4dCAqLywgRWdsQmFzZS5DT05GSUdfUkdCQSwgbmV3IEdsUmVjdERyYXdlcigpKTsK
LSAgICBvZXNUZXh0dXJlSWQgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMxMUV4dC5HTF9U
RVhUVVJFX0VYVEVSTkFMX09FUyk7Ci0gICAgc3VyZmFjZVRleHR1cmUgPSBuZXcgU3VyZmFjZVRl
eHR1cmUob2VzVGV4dHVyZUlkKTsKLSAgICBzdXJmYWNlVGV4dHVyZS5zZXREZWZhdWx0QnVmZmVy
U2l6ZSgxIC8qIHdpZHRoICovLCAxIC8qIGhlaWdodCAqLyk7Ci0gICAgZWdsUmVuZGVyZXIuY3Jl
YXRlRWdsU3VyZmFjZShzdXJmYWNlVGV4dHVyZSk7Ci0gICAgZWdsUmVuZGVyZXIuc3VyZmFjZVNp
emVDaGFuZ2VkKDEgLyogd2lkdGggKi8sIDEgLyogaGVpZ2h0ICovKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBzdXJmYWNlVGV4dHVyZS5yZWxl
YXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSAvKiBuICovLCBuZXcgaW50W10g
e29lc1RleHR1cmVJZH0sIDAgLyogb2Zmc2V0ICovKTsKLSAgICBlZ2xSZW5kZXJlci5yZWxlYXNl
KCk7Ci0gIH0KLQotICAvKiogQ2hlY2tzIHRoZSBiaXRtYXAgaXMgbm90IG51bGwgYW5kIHRoZSBj
b3JyZWN0IHNpemUuICovCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgY2hlY2tCaXRtYXAoQml0bWFw
IGJpdG1hcCwgZmxvYXQgc2NhbGUpIHsKLSAgICBhc3NlcnROb3ROdWxsKGJpdG1hcCk7Ci0gICAg
YXNzZXJ0RXF1YWxzKChpbnQpIChURVNUX0ZSQU1FX1dJRFRIICogc2NhbGUpLCBiaXRtYXAuZ2V0
V2lkdGgoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKChpbnQpIChURVNUX0ZSQU1FX0hFSUdIVCAqIHNj
YWxlKSwgYml0bWFwLmdldEhlaWdodCgpKTsKLSAgfQotCi0gIC8qKgotICAgKiBEb2VzIGxpbmVh
ciBzYW1wbGluZyBvbiBVL1YgcGxhbmUgb2YgdGVzdCBkYXRhLgotICAgKgotICAgKiBAcGFyYW0g
ZGF0YSBQbGFuZSBkYXRhIHRvIGJlIHNhbXBsZWQgZnJvbS4KLSAgICogQHBhcmFtIHBsYW5lV2lk
dGggV2lkdGggb2YgdGhlIHBsYW5lIGRhdGEuIFRoaXMgaXMgYWxzbyBhc3N1bWVkIHRvIGJlIHRo
ZSBzdHJpZGUuCi0gICAqIEBwYXJhbSBwbGFuZUhlaWdodCBIZWlnaHQgb2YgdGhlIHBsYW5lIGRh
dGEuCi0gICAqIEBwYXJhbSB4IFgtY29vcmRpbmF0ZSBpbiByYW5nZSBbMCwgMV0uCi0gICAqIEBw
YXJhbSB5IFktY29vcmRpbmF0ZSBpbiByYW5nZSBbMCwgMV0uCi0gICAqLwotICBwcml2YXRlIHN0
YXRpYyBmbG9hdCBsaW5lYXJTYW1wbGUoCi0gICAgICBCeXRlQnVmZmVyIHBsYW5lLCBpbnQgcGxh
bmVXaWR0aCwgaW50IHBsYW5lSGVpZ2h0LCBmbG9hdCB4LCBmbG9hdCB5KSB7Ci0gICAgZmluYWwg
aW50IHN0cmlkZSA9IHBsYW5lV2lkdGg7Ci0KLSAgICBmaW5hbCBmbG9hdCBjb29yZFggPSB4ICog
cGxhbmVXaWR0aDsKLSAgICBmaW5hbCBmbG9hdCBjb29yZFkgPSB5ICogcGxhbmVIZWlnaHQ7Ci0K
LSAgICBpbnQgbG93SW5kZXhYID0gKGludCkgTWF0aC5mbG9vcihjb29yZFggLSAwLjVmKTsKLSAg
ICBpbnQgbG93SW5kZXhZID0gKGludCkgTWF0aC5mbG9vcihjb29yZFkgLSAwLjVmKTsKLSAgICBp
bnQgaGlnaEluZGV4WCA9IGxvd0luZGV4WCArIDE7Ci0gICAgaW50IGhpZ2hJbmRleFkgPSBsb3dJ
bmRleFkgKyAxOwotCi0gICAgZmluYWwgZmxvYXQgaGlnaFdlaWdodFggPSBjb29yZFggLSBsb3dJ
bmRleFggLSAwLjVmOwotICAgIGZpbmFsIGZsb2F0IGhpZ2hXZWlnaHRZID0gY29vcmRZIC0gbG93
SW5kZXhZIC0gMC41ZjsKLSAgICBmaW5hbCBmbG9hdCBsb3dXZWlnaHRYID0gMWYgLSBoaWdoV2Vp
Z2h0WDsKLSAgICBmaW5hbCBmbG9hdCBsb3dXZWlnaHRZID0gMWYgLSBoaWdoV2VpZ2h0WTsKLQot
ICAgIC8vIENsYW1wIG9uIHRoZSBlZGdlcy4KLSAgICBsb3dJbmRleFggPSBNYXRoLm1heCgwLCBs
b3dJbmRleFgpOwotICAgIGxvd0luZGV4WSA9IE1hdGgubWF4KDAsIGxvd0luZGV4WSk7Ci0gICAg
aGlnaEluZGV4WCA9IE1hdGgubWluKHBsYW5lV2lkdGggLSAxLCBoaWdoSW5kZXhYKTsKLSAgICBo
aWdoSW5kZXhZID0gTWF0aC5taW4ocGxhbmVIZWlnaHQgLSAxLCBoaWdoSW5kZXhZKTsKLQotICAg
IGZsb2F0IGxvd1lWYWx1ZSA9IChwbGFuZS5nZXQobG93SW5kZXhZICogc3RyaWRlICsgbG93SW5k
ZXhYKSAmIDB4RkYpICogbG93V2VpZ2h0WAotICAgICAgICArIChwbGFuZS5nZXQobG93SW5kZXhZ
ICogc3RyaWRlICsgaGlnaEluZGV4WCkgJiAweEZGKSAqIGhpZ2hXZWlnaHRYOwotICAgIGZsb2F0
IGhpZ2hZVmFsdWUgPSAocGxhbmUuZ2V0KGhpZ2hJbmRleFkgKiBzdHJpZGUgKyBsb3dJbmRleFgp
ICYgMHhGRikgKiBsb3dXZWlnaHRYCi0gICAgICAgICsgKHBsYW5lLmdldChoaWdoSW5kZXhZICog
c3RyaWRlICsgaGlnaEluZGV4WCkgJiAweEZGKSAqIGhpZ2hXZWlnaHRYOwotCi0gICAgcmV0dXJu
IChsb3dXZWlnaHRZICogbG93WVZhbHVlICsgaGlnaFdlaWdodFkgKiBoaWdoWVZhbHVlKSAvIDI1
NWY7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBieXRlIHNhdHVyYXRlZEZsb2F0VG9CeXRlKGZs
b2F0IGMpIHsKLSAgICByZXR1cm4gKGJ5dGUpIE1hdGgucm91bmQoMjU1ZiAqIE1hdGgubWF4KDBm
LCBNYXRoLm1pbigxZiwgYykpKTsKLSAgfQotCi0gIC8qKgotICAgKiBDb252ZXJ0cyB0ZXN0IGRh
dGEgWVVWIGZyYW1lIHRvIGV4cGVjdGVkIFJHQkEgZnJhbWUuIFRyaWVzIHRvIG1hdGNoIHRoZSBi
ZWhhdmlvciBvZiBPcGVuR0wKLSAgICogWVVWIGRyYXdlciBzaGFkZXIuIERvZXMgbGluZWFyIHNh
bXBsaW5nIG9uIHRoZSBVLSBhbmQgVi1wbGFuZXMuCi0gICAqCi0gICAqIEBwYXJhbSB5dXZGcmFt
ZSBBcnJheSBvZiBzaXplIDMgY29udGFpbmluZyBZLSwgVS0sIFYtcGxhbmVzIGZvciBpbWFnZSBv
ZiBzaXplCi0gICAqICAgICAgICAgICAgICAgICAoVEVTVF9GUkFNRV9XSURUSCwgVEVTVF9GUkFN
RV9IRUlHSFQpLiBVLSBhbmQgVi1wbGFuZXMgc2hvdWxkIGJlIGhhbGYgdGhlIHNpemUKLSAgICog
ICAgICAgICAgICAgICAgIG9mIHRoZSBZLXBsYW5lLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMg
Ynl0ZVtdIGNvbnZlcnRZVVZGcmFtZVRvUkdCQShCeXRlQnVmZmVyW10geXV2RnJhbWUpIHsKLSAg
ICBmaW5hbCBieXRlW10gYXJnYkZyYW1lID0gbmV3IGJ5dGVbVEVTVF9GUkFNRV9XSURUSCAqIFRF
U1RfRlJBTUVfSEVJR0hUICogNF07Ci0gICAgZmluYWwgaW50IGFyZ2JTdHJpZGUgPSBURVNUX0ZS
QU1FX1dJRFRIICogNDsKLSAgICBmaW5hbCBpbnQgeVN0cmlkZSA9IFRFU1RfRlJBTUVfV0lEVEg7
Ci0KLSAgICBmaW5hbCBpbnQgdlN0cmlkZSA9IFRFU1RfRlJBTUVfV0lEVEggLyAyOwotCi0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBURVNUX0ZSQU1FX0hFSUdIVDsgeSsrKSB7Ci0gICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IFRFU1RfRlJBTUVfV0lEVEg7IHgrKykgewotICAgICAgICBmaW5hbCBp
bnQgeDIgPSB4IC8gMjsKLSAgICAgICAgZmluYWwgaW50IHkyID0geSAvIDI7Ci0KLSAgICAgICAg
ZmluYWwgZmxvYXQgeUMgPSAoeXV2RnJhbWVbMF0uZ2V0KHkgKiB5U3RyaWRlICsgeCkgJiAweEZG
KSAvIDI1NWY7Ci0gICAgICAgIGZpbmFsIGZsb2F0IHVDID0gbGluZWFyU2FtcGxlKHl1dkZyYW1l
WzFdLCBURVNUX0ZSQU1FX1dJRFRIIC8gMiwgVEVTVF9GUkFNRV9IRUlHSFQgLyAyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoeCArIDAuNWYpIC8gVEVTVF9GUkFNRV9XSURUSCwgKHkg
KyAwLjVmKSAvIFRFU1RfRlJBTUVfSEVJR0hUKQotICAgICAgICAgICAgLSAwLjVmOwotICAgICAg
ICBmaW5hbCBmbG9hdCB2QyA9IGxpbmVhclNhbXBsZSh5dXZGcmFtZVsyXSwgVEVTVF9GUkFNRV9X
SURUSCAvIDIsIFRFU1RfRlJBTUVfSEVJR0hUIC8gMiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHggKyAwLjVmKSAvIFRFU1RfRlJBTUVfV0lEVEgsICh5ICsgMC41ZikgLyBURVNUX0ZS
QU1FX0hFSUdIVCkKLSAgICAgICAgICAgIC0gMC41ZjsKLSAgICAgICAgZmluYWwgZmxvYXQgckMg
PSB5QyArIDEuNDAzZiAqIHZDOwotICAgICAgICBmaW5hbCBmbG9hdCBnQyA9IHlDIC0gMC4zNDRm
ICogdUMgLSAwLjcxNGYgKiB2QzsKLSAgICAgICAgZmluYWwgZmxvYXQgYkMgPSB5QyArIDEuNzdm
ICogdUM7Ci0KLSAgICAgICAgYXJnYkZyYW1lW3kgKiBhcmdiU3RyaWRlICsgeCAqIDQgKyAwXSA9
IHNhdHVyYXRlZEZsb2F0VG9CeXRlKHJDKTsKLSAgICAgICAgYXJnYkZyYW1lW3kgKiBhcmdiU3Ry
aWRlICsgeCAqIDQgKyAxXSA9IHNhdHVyYXRlZEZsb2F0VG9CeXRlKGdDKTsKLSAgICAgICAgYXJn
YkZyYW1lW3kgKiBhcmdiU3RyaWRlICsgeCAqIDQgKyAyXSA9IHNhdHVyYXRlZEZsb2F0VG9CeXRl
KGJDKTsKLSAgICAgICAgYXJnYkZyYW1lW3kgKiBhcmdiU3RyaWRlICsgeCAqIDQgKyAzXSA9IChi
eXRlKSAyNTU7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGFyZ2JGcmFtZTsKLSAgfQot
Ci0gIC8qKiBDaGVja3MgdGhhdCB0aGUgYml0bWFwIGNvbnRlbnQgbWF0Y2hlcyB0aGUgdGVzdCBm
cmFtZSB3aXRoIHRoZSBnaXZlbiBpbmRleC4gKi8KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBjaGVj
a0JpdG1hcENvbnRlbnQoQml0bWFwIGJpdG1hcCwgaW50IGZyYW1lKSB7Ci0gICAgY2hlY2tCaXRt
YXAoYml0bWFwLCAxZik7Ci0KLSAgICBieXRlW10gZXhwZWN0ZWRSR0JBID0gY29udmVydFlVVkZy
YW1lVG9SR0JBKFRFU1RfRlJBTUVTW2ZyYW1lXSk7Ci0gICAgQnl0ZUJ1ZmZlciBiaXRtYXBCdWZm
ZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGJpdG1hcC5nZXRCeXRlQ291bnQoKSk7Ci0g
ICAgYml0bWFwLmNvcHlQaXhlbHNUb0J1ZmZlcihiaXRtYXBCdWZmZXIpOwotCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBleHBlY3RlZFJHQkEubGVuZ3RoOyBpKyspIHsKLSAgICAgIGludCBleHBl
Y3RlZCA9IGV4cGVjdGVkUkdCQVtpXSAmIDB4RkY7Ci0gICAgICBpbnQgdmFsdWUgPSBiaXRtYXBC
dWZmZXIuZ2V0KGkpICYgMHhGRjsKLSAgICAgIC8vIER1ZSB0byB1bmtub3duIGNvbnZlcnNpb24g
ZGlmZmVyZW5jZXMgY2hlY2sgdmFsdWUgbWF0Y2hlcyArLTEuCi0gICAgICBpZiAoTWF0aC5hYnMo
dmFsdWUgLSBleHBlY3RlZCkgPiAxKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJFeHBlY3Rl
ZCBiaXRtYXAgY29udGVudDogIiArIEFycmF5cy50b1N0cmluZyhleHBlY3RlZFJHQkEpKTsKLSAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIkJpdG1hcCBjb250ZW50OiAiICsgQXJyYXlzLnRvU3RyaW5n
KGJpdG1hcEJ1ZmZlci5hcnJheSgpKSk7Ci0gICAgICAgIGZhaWwoIkZyYW1lIGRvZXNuJ3QgbWF0
Y2ggb3JpZ2luYWwgZnJhbWUgb24gYnl0ZSAiICsgaSArICIuIEV4cGVjdGVkOiAiICsgZXhwZWN0
ZWQKLSAgICAgICAgICAgICsgIiBSZXN1bHQ6ICIgKyB2YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgLyoqIFRlbGxzIGVnbFJlbmRlcmVyIHRvIHJlbmRlciB0ZXN0IGZyYW1lIHdpdGgg
Z2l2ZW4gaW5kZXguICovCi0gIHByaXZhdGUgdm9pZCBmZWVkRnJhbWUoaW50IGkpIHsKLSAgICBl
Z2xSZW5kZXJlci5yZW5kZXJGcmFtZShuZXcgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUoVEVTVF9G
UkFNRV9XSURUSCwgVEVTVF9GUkFNRV9IRUlHSFQsIDAsCi0gICAgICAgIG5ldyBpbnRbXSB7VEVT
VF9GUkFNRV9XSURUSCwgVEVTVF9GUkFNRV9XSURUSCAvIDIsIFRFU1RfRlJBTUVfV0lEVEggLyAy
fSwgVEVTVF9GUkFNRVNbaV0sCi0gICAgICAgIDApKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdEFkZEZyYW1lTGlzdGVuZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAg
ICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKHRlc3RGcmFtZUxpc3RlbmVyLCAwZiAvKiBz
Y2FsZUZhY3RvciAqLyk7Ci0gICAgZmVlZEZyYW1lKDApOwotICAgIGFzc2VydFRydWUodGVzdEZy
YW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICAgIGFzc2VydE51
bGwodGVzdEZyYW1lTGlzdGVuZXIucmVzZXRBbmRHZXRCaXRtYXAoKSk7Ci0gICAgZWdsUmVuZGVy
ZXIuYWRkRnJhbWVMaXN0ZW5lcih0ZXN0RnJhbWVMaXN0ZW5lciwgMGYgLyogc2NhbGVGYWN0b3Ig
Ki8pOwotICAgIGZlZWRGcmFtZSgxKTsKLSAgICBhc3NlcnRUcnVlKHRlc3RGcmFtZUxpc3RlbmVy
LndhaXRGb3JCaXRtYXAoUkVOREVSX1dBSVRfTVMpKTsKLSAgICBhc3NlcnROdWxsKHRlc3RGcmFt
ZUxpc3RlbmVyLnJlc2V0QW5kR2V0Qml0bWFwKCkpOwotICAgIGZlZWRGcmFtZSgyKTsKLSAgICAv
LyBDaGVjayB3ZSBnZXQgbm8gbW9yZSBiaXRtYXBzIHRoYW4gdHdvLgotICAgIGFzc2VydEZhbHNl
KHRlc3RGcmFtZUxpc3RlbmVyLndhaXRGb3JCaXRtYXAoUkVOREVSX1dBSVRfTVMpKTsKLSAgfQot
Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEFkZEZyYW1lTGlzdGVuZXJCaXRtYXAo
KSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKHRl
c3RGcmFtZUxpc3RlbmVyLCAxZiAvKiBzY2FsZUZhY3RvciAqLyk7Ci0gICAgZmVlZEZyYW1lKDAp
OwotICAgIGFzc2VydFRydWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJf
V0FJVF9NUykpOwotICAgIGNoZWNrQml0bWFwQ29udGVudCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNl
dEFuZEdldEJpdG1hcCgpLCAwKTsKLSAgICBlZ2xSZW5kZXJlci5hZGRGcmFtZUxpc3RlbmVyKHRl
c3RGcmFtZUxpc3RlbmVyLCAxZiAvKiBzY2FsZUZhY3RvciAqLyk7Ci0gICAgZmVlZEZyYW1lKDEp
OwotICAgIGFzc2VydFRydWUodGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJf
V0FJVF9NUykpOwotICAgIGNoZWNrQml0bWFwQ29udGVudCh0ZXN0RnJhbWVMaXN0ZW5lci5yZXNl
dEFuZEdldEJpdG1hcCgpLCAxKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdEFkZEZyYW1lTGlzdGVuZXJCaXRtYXBTY2FsZSgpIHRocm93cyBFeGNlcHRpb24gewotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMzsgKytpKSB7Ci0gICAgICBmbG9hdCBzY2FsZSA9IGkgKiAw
LjVmICsgMC41ZjsKLSAgICAgIGVnbFJlbmRlcmVyLmFkZEZyYW1lTGlzdGVuZXIodGVzdEZyYW1l
TGlzdGVuZXIsIHNjYWxlKTsKLSAgICAgIGZlZWRGcmFtZShpKTsKLSAgICAgIGFzc2VydFRydWUo
dGVzdEZyYW1lTGlzdGVuZXIud2FpdEZvckJpdG1hcChSRU5ERVJfV0FJVF9NUykpOwotICAgICAg
Y2hlY2tCaXRtYXAodGVzdEZyYW1lTGlzdGVuZXIucmVzZXRBbmRHZXRCaXRtYXAoKSwgc2NhbGUp
OwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9HbFJlY3REcmF3ZXJUZXN0Lmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvR2xSZWN0RHJhd2VyVGVz
dC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmdyYXBoaWNzLlN1cmZhY2VU
ZXh0dXJlOwotaW1wb3J0IGFuZHJvaWQub3BlbmdsLkdMRVMyMDsKLWltcG9ydCBhbmRyb2lkLnRl
c3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFu
bm90YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFu
bm90YXRpb24uU21hbGxUZXN0OwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9y
dCBqYXZhLnV0aWwuUmFuZG9tOwotCi1wdWJsaWMgZmluYWwgY2xhc3MgR2xSZWN0RHJhd2VyVGVz
dCBleHRlbmRzIEFjdGl2aXR5VGVzdENhc2UgewotICAvLyBSZXNvbHV0aW9uIG9mIHRoZSB0ZXN0
IGltYWdlLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEggPSAxNjsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IEhFSUdIVCA9IDE2OwotICAvLyBTZWVkIGZvciByYW5kb20gcGl4
ZWwgY3JlYXRpb24uCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRUVEID0gNDI7Ci0gIC8v
IFdoZW4gY29tcGFyaW5nIHBpeGVscywgYWxsb3cgc29tZSBzbGFjayBmb3IgZmxvYXQgYXJpdGht
ZXRpYyBhbmQgaW50ZWdlciByb3VuZGluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgZmxvYXQg
TUFYX0RJRkYgPSAxLjVmOwotCi0gIHByaXZhdGUgc3RhdGljIGZsb2F0IG5vcm1hbGl6ZWRCeXRl
KGJ5dGUgYikgewotICAgIHJldHVybiAoYiAmIDB4RkYpIC8gMjU1LjBmOwotICB9Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgZmxvYXQgc2F0dXJhdGVkQ29udmVydChmbG9hdCBjKSB7Ci0gICAgcmV0dXJu
IDI1NS4wZiAqIE1hdGgubWF4KDAsIE1hdGgubWluKGMsIDEpKTsKLSAgfQotCi0gIC8vIEFzc2Vy
dCBSR0IgQnl0ZUJ1ZmZlcnMgYXJlIHBpeGVsIHBlcmZlY3QgaWRlbnRpY2FsLgotICBwcml2YXRl
IHN0YXRpYyB2b2lkIGFzc2VydEVxdWFscyhpbnQgd2lkdGgsIGludCBoZWlnaHQsIEJ5dGVCdWZm
ZXIgYWN0dWFsLCBCeXRlQnVmZmVyIGV4cGVjdGVkKSB7Ci0gICAgYWN0dWFsLnJld2luZCgpOwot
ICAgIGV4cGVjdGVkLnJld2luZCgpOwotICAgIGFzc2VydEVxdWFscyhhY3R1YWwucmVtYWluaW5n
KCksIHdpZHRoICogaGVpZ2h0ICogMyk7Ci0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLnJlbWFp
bmluZygpLCB3aWR0aCAqIGhlaWdodCAqIDMpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyArK3kpIHsKLSAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewotICAg
ICAgICBmaW5hbCBpbnQgYWN0dWFsUiA9IGFjdHVhbC5nZXQoKSAmIDB4RkY7Ci0gICAgICAgIGZp
bmFsIGludCBhY3R1YWxHID0gYWN0dWFsLmdldCgpICYgMHhGRjsKLSAgICAgICAgZmluYWwgaW50
IGFjdHVhbEIgPSBhY3R1YWwuZ2V0KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgZXhwZWN0
ZWRSID0gZXhwZWN0ZWQuZ2V0KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgZXhwZWN0ZWRH
ID0gZXhwZWN0ZWQuZ2V0KCkgJiAweEZGOwotICAgICAgICBmaW5hbCBpbnQgZXhwZWN0ZWRCID0g
ZXhwZWN0ZWQuZ2V0KCkgJiAweEZGOwotICAgICAgICBpZiAoYWN0dWFsUiAhPSBleHBlY3RlZFIg
fHwgYWN0dWFsRyAhPSBleHBlY3RlZEcgfHwgYWN0dWFsQiAhPSBleHBlY3RlZEIpIHsKLSAgICAg
ICAgICBmYWlsKCJCeXRlQnVmZmVycyBvZiBzaXplICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCAr
ICIgbm90IGVxdWFsIGF0IHBvc2l0aW9uICIKLSAgICAgICAgICAgICAgKyAiKCIgKyB4ICsgIiwg
IiArIHkgKyAiKS4gRXhwZWN0ZWQgY29sb3IgKFIsRyxCKTogIgotICAgICAgICAgICAgICArICIo
IiArIGV4cGVjdGVkUiArICIsICIgKyBleHBlY3RlZEcgKyAiLCAiICsgZXhwZWN0ZWRCICsgIiki
Ci0gICAgICAgICAgICAgICsgIiBidXQgd2FzOiAiCi0gICAgICAgICAgICAgICsgIigiICsgYWN0
dWFsUiArICIsICIgKyBhY3R1YWxHICsgIiwgIiArIGFjdHVhbEIgKyAiKS4iKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIENvbnZlcnQgUkdCQSBCeXRlQnVmZmVyIHRv
IFJHQiBCeXRlQnVmZmVyLgotICBwcml2YXRlIHN0YXRpYyBCeXRlQnVmZmVyIHN0cmlwQWxwaGFD
aGFubmVsKEJ5dGVCdWZmZXIgcmdiYUJ1ZmZlcikgewotICAgIHJnYmFCdWZmZXIucmV3aW5kKCk7
Ci0gICAgYXNzZXJ0RXF1YWxzKHJnYmFCdWZmZXIucmVtYWluaW5nKCkgJSA0LCAwKTsKLSAgICBm
aW5hbCBpbnQgbnVtYmVyT2ZQaXhlbHMgPSByZ2JhQnVmZmVyLnJlbWFpbmluZygpIC8gNDsKLSAg
ICBmaW5hbCBCeXRlQnVmZmVyIHJnYkJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qo
bnVtYmVyT2ZQaXhlbHMgKiAzKTsKLSAgICB3aGlsZSAocmdiYUJ1ZmZlci5oYXNSZW1haW5pbmco
KSkgewotICAgICAgLy8gQ29weSBSR0IuCi0gICAgICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hh
bm5lbCA8IDM7ICsrY2hhbm5lbCkgewotICAgICAgICByZ2JCdWZmZXIucHV0KHJnYmFCdWZmZXIu
Z2V0KCkpOwotICAgICAgfQotICAgICAgLy8gRHJvcCBhbHBoYS4KLSAgICAgIHJnYmFCdWZmZXIu
Z2V0KCk7Ci0gICAgfQotICAgIHJldHVybiByZ2JCdWZmZXI7Ci0gIH0KLQotICBAU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RSZ2JSZW5kZXJpbmcoKSB7Ci0gICAgLy8gQ3JlYXRlIEVHTCBi
YXNlIHdpdGggYSBwaXhlbCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAgZmluYWwgRWds
QmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05GSUdfUElYRUxf
QlVGRkVSKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKFdJRFRILCBIRUlHSFQp
OwotICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLQotICAgIC8vIENyZWF0ZSBSR0IgYnl0ZSBi
dWZmZXIgcGxhbmUgd2l0aCByYW5kb20gY29udGVudC4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJn
YlBsYW5lID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDMpOwot
ICAgIGZpbmFsIFJhbmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKFNFRUQpOwotICAgIHJhbmRvbS5u
ZXh0Qnl0ZXMocmdiUGxhbmUuYXJyYXkoKSk7Ci0KLSAgICAvLyBVcGxvYWQgdGhlIFJHQiBieXRl
IGJ1ZmZlciBkYXRhIGFzIGEgdGV4dHVyZS4KLSAgICBmaW5hbCBpbnQgcmdiVGV4dHVyZSA9IEds
VXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkVfMkQpOwotICAgIEdMRVMyMC5n
bEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwKTsKLSAgICBHTEVTMjAuZ2xCaW5kVGV4
dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgcmdiVGV4dHVyZSk7Ci0gICAgR0xFUzIwLmdsVGV4
SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgR0xFUzIwLkdMX1JHQiwgV0lEVEgsIEhF
SUdIVCwgMCwgR0xFUzIwLkdMX1JHQiwKLSAgICAgICAgR0xFUzIwLkdMX1VOU0lHTkVEX0JZVEUs
IHJnYlBsYW5lKTsKLSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsVGV4SW1hZ2UyRCIp
OwotCi0gICAgLy8gRHJhdyB0aGUgUkdCIGZyYW1lIG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAg
ICBmaW5hbCBHbFJlY3REcmF3ZXIgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotICAgIGRy
YXdlci5kcmF3UmdiKHJnYlRleHR1cmUsIFJlbmRlcmVyQ29tbW9uLmlkZW50aXR5TWF0cml4KCks
IFdJRFRILCBIRUlHSFQsIDAgLyogdmlld3BvcnRYICovLAotICAgICAgICAwIC8qIHZpZXdwb3J0
WSAqLywgV0lEVEgsIEhFSUdIVCk7Ci0KLSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRo
ZSBwaXhlbCBidWZmZXIgYXMgUkdCQS4gTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUu
Zy4gTmV4dXMgOS4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZlci5h
bGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDQpOwotICAgIEdMRVMyMC5nbFJlYWRQaXhl
bHMoMCwgMCwgV0lEVEgsIEhFSUdIVCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05F
RF9CWVRFLCByZ2JhRGF0YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJlYWRQ
aXhlbHMiKTsKLQotICAgIC8vIEFzc2VydCByZW5kZXJlZCBpbWFnZSBpcyBwaXhlbCBwZXJmZWN0
IHRvIHNvdXJjZSBSR0IuCi0gICAgYXNzZXJ0RXF1YWxzKFdJRFRILCBIRUlHSFQsIHN0cmlwQWxw
aGFDaGFubmVsKHJnYmFEYXRhKSwgcmdiUGxhbmUpOwotCi0gICAgZHJhd2VyLnJlbGVhc2UoKTsK
LSAgICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge3JnYlRleHR1cmV9LCAw
KTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFl1dlJlbmRlcmluZygpIHsKLSAgICAvLyBDcmVhdGUgRUdMIGJhc2Ugd2l0aCBh
IHBpeGVsIGJ1ZmZlciBhcyBkaXNwbGF5IG91dHB1dC4KLSAgICBFZ2xCYXNlIGVnbEJhc2UgPSBF
Z2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QSVhFTF9CVUZGRVIpOwotICAgIGVn
bEJhc2UuY3JlYXRlUGJ1ZmZlclN1cmZhY2UoV0lEVEgsIEhFSUdIVCk7Ci0gICAgZWdsQmFzZS5t
YWtlQ3VycmVudCgpOwotCi0gICAgLy8gQ3JlYXRlIFlVViBieXRlIGJ1ZmZlciBwbGFuZXMgd2l0
aCByYW5kb20gY29udGVudC4KLSAgICBmaW5hbCBCeXRlQnVmZmVyW10geXV2UGxhbmVzID0gbmV3
IEJ5dGVCdWZmZXJbM107Ci0gICAgZmluYWwgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oU0VF
RCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIHl1dlBsYW5lc1tp
XSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoV0lEVEggKiBIRUlHSFQpOwotICAgICAgcmFu
ZG9tLm5leHRCeXRlcyh5dXZQbGFuZXNbaV0uYXJyYXkoKSk7Ci0gICAgfQotCi0gICAgLy8gR2Vu
ZXJhdGUgMyB0ZXh0dXJlIGlkcyBmb3IgWS9VL1YuCi0gICAgZmluYWwgaW50IHl1dlRleHR1cmVz
W10gPSBuZXcgaW50WzNdOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAg
ICB5dXZUZXh0dXJlc1tpXSA9IEdsVXRpbC5nZW5lcmF0ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRV
UkVfMkQpOwotICAgIH0KLQotICAgIC8vIFVwbG9hZCB0aGUgWVVWIGJ5dGUgYnVmZmVyIGRhdGEg
YXMgdGV4dHVyZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIEdM
RVMyMC5nbEFjdGl2ZVRleHR1cmUoR0xFUzIwLkdMX1RFWFRVUkUwICsgaSk7Ci0gICAgICBHTEVT
MjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8yRCwgeXV2VGV4dHVyZXNbaV0pOwot
ICAgICAgR0xFUzIwLmdsVGV4SW1hZ2UyRChHTEVTMjAuR0xfVEVYVFVSRV8yRCwgMCwgR0xFUzIw
LkdMX0xVTUlOQU5DRSwgV0lEVEgsIEhFSUdIVCwgMCwKLSAgICAgICAgICBHTEVTMjAuR0xfTFVN
SU5BTkNFLCBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgeXV2UGxhbmVzW2ldKTsKLSAgICAgIEds
VXRpbC5jaGVja05vR0xFUzJFcnJvcigiZ2xUZXhJbWFnZTJEIik7Ci0gICAgfQotCi0gICAgLy8g
RHJhdyB0aGUgWVVWIGZyYW1lIG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICBmaW5hbCBHbFJl
Y3REcmF3ZXIgZHJhd2VyID0gbmV3IEdsUmVjdERyYXdlcigpOwotICAgIGRyYXdlci5kcmF3WXV2
KHl1dlRleHR1cmVzLCBSZW5kZXJlckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpLCBXSURUSCwgSEVJ
R0hULCAwIC8qIHZpZXdwb3J0WCAqLywKLSAgICAgICAgMCAvKiB2aWV3cG9ydFkgKi8sIFdJRFRI
LCBIRUlHSFQpOwotCi0gICAgLy8gRG93bmxvYWQgdGhlIHBpeGVscyBpbiB0aGUgcGl4ZWwgYnVm
ZmVyIGFzIFJHQkEuIE5vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgUkdCLCBlLmcuIE5leHVzIDku
Ci0gICAgZmluYWwgQnl0ZUJ1ZmZlciBkYXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChX
SURUSCAqIEhFSUdIVCAqIDQpOwotICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwgMCwgV0lEVEgs
IEhFSUdIVCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCBkYXRhKTsK
LSAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVscyIpOwotCi0gICAgLy8g
Q29tcGFyZSB0aGUgWVVWIGRhdGEgd2l0aCB0aGUgUkdCQSByZXN1bHQuCi0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBIRUlHSFQ7ICsreSkgewotICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBXSURU
SDsgKyt4KSB7Ci0gICAgICAgIC8vIFlVViBjb2xvciBzcGFjZS4gWSBpbiBbMCwgMV0sIFVWIGlu
IFstMC41LCAwLjVdLiBUaGUgY29uc3RhbnRzIGFyZSB0YWtlbiBmcm9tIHRoZSBZVVYKLSAgICAg
ICAgLy8gZnJhZ21lbnQgc2hhZGVyIGNvZGUgaW4gR2xSZWN0RHJhd2VyLgotICAgICAgICBmaW5h
bCBmbG9hdCB5X2x1bWEgPSBub3JtYWxpemVkQnl0ZSh5dXZQbGFuZXNbMF0uZ2V0KCkpOwotICAg
ICAgICBmaW5hbCBmbG9hdCB1X2Nocm9tYSA9IG5vcm1hbGl6ZWRCeXRlKHl1dlBsYW5lc1sxXS5n
ZXQoKSkgLSAwLjVmOwotICAgICAgICBmaW5hbCBmbG9hdCB2X2Nocm9tYSA9IG5vcm1hbGl6ZWRC
eXRlKHl1dlBsYW5lc1syXS5nZXQoKSkgLSAwLjVmOwotICAgICAgICAvLyBFeHBlY3RlZCBjb2xv
ciBpbiB1bnJvdW5kZWQgUkdCIFswLjBmLCAyNTUuMGZdLgotICAgICAgICBmaW5hbCBmbG9hdCBl
eHBlY3RlZFJlZCA9IHNhdHVyYXRlZENvbnZlcnQoeV9sdW1hICsgMS40MDNmICogdl9jaHJvbWEp
OwotICAgICAgICBmaW5hbCBmbG9hdCBleHBlY3RlZEdyZWVuID0KLSAgICAgICAgICAgIHNhdHVy
YXRlZENvbnZlcnQoeV9sdW1hIC0gMC4zNDRmICogdV9jaHJvbWEgLSAwLjcxNGYgKiB2X2Nocm9t
YSk7Ci0gICAgICAgIGZpbmFsIGZsb2F0IGV4cGVjdGVkQmx1ZSA9IHNhdHVyYXRlZENvbnZlcnQo
eV9sdW1hICsgMS43N2YgKiB1X2Nocm9tYSk7Ci0KLSAgICAgICAgLy8gQWN0dWFsIGNvbG9yIGlu
IFJHQjg4ODguCi0gICAgICAgIGZpbmFsIGludCBhY3R1YWxSZWQgPSBkYXRhLmdldCgpICYgMHhG
RjsKLSAgICAgICAgZmluYWwgaW50IGFjdHVhbEdyZWVuID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0g
ICAgICAgIGZpbmFsIGludCBhY3R1YWxCbHVlID0gZGF0YS5nZXQoKSAmIDB4RkY7Ci0gICAgICAg
IGZpbmFsIGludCBhY3R1YWxBbHBoYSA9IGRhdGEuZ2V0KCkgJiAweEZGOwotCi0gICAgICAgIC8v
IEFzc2VydCByZW5kZXJlZCBpbWFnZSBpcyBjbG9zZSB0byBwaXhlbCBwZXJmZWN0IGZyb20gc291
cmNlIFlVVi4KLSAgICAgICAgYXNzZXJ0VHJ1ZShNYXRoLmFicyhhY3R1YWxSZWQgLSBleHBlY3Rl
ZFJlZCkgPCBNQVhfRElGRik7Ci0gICAgICAgIGFzc2VydFRydWUoTWF0aC5hYnMoYWN0dWFsR3Jl
ZW4gLSBleHBlY3RlZEdyZWVuKSA8IE1BWF9ESUZGKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShNYXRo
LmFicyhhY3R1YWxCbHVlIC0gZXhwZWN0ZWRCbHVlKSA8IE1BWF9ESUZGKTsKLSAgICAgICAgYXNz
ZXJ0RXF1YWxzKGFjdHVhbEFscGhhLCAyNTUpOwotICAgICAgfQotICAgIH0KLQotICAgIGRyYXdl
ci5yZWxlYXNlKCk7Ci0gICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMywgeXV2VGV4dHVyZXMs
IDApOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRoZSBwdXJw
b3NlIGhlcmUgaXMgdG8gdGVzdCBHbFJlY3REcmF3ZXIub2VzRHJhdygpLiBVbmZvcnR1bmF0ZWx5
LCB0aGVyZSBpcyBubyBlYXN5IHdheSB0bwotICAgKiBjcmVhdGUgYW4gT0VTIHRleHR1cmUsIHdo
aWNoIGlzIG5lZWRlZCBmb3IgaW5wdXQgdG8gb2VzRHJhdygpLiBNb3N0IG9mIHRoZSB0ZXN0IGlz
IGNvbmNlcm5lZAotICAgKiB3aXRoIGNyZWF0aW5nIE9FUyB0ZXh0dXJlcyBpbiB0aGUgZm9sbG93
aW5nIHdheToKLSAgICogIC0gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlIHdpdGggaGVscCBmcm9tIFN1
cmZhY2VUZXh0dXJlSGVscGVyLgotICAgKiAgLSBDcmVhdGUgYW4gRWdsQmFzZSB3aXRoIHRoZSBT
dXJmYWNlVGV4dHVyZSBhcyBFR0xTdXJmYWNlLgotICAgKiAgLSBVcGxvYWQgUkdCIHRleHR1cmUg
d2l0aCBrbm93biBjb250ZW50LgotICAgKiAgLSBEcmF3IHRoZSBSR0IgdGV4dHVyZSBvbnRvIHRo
ZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJlIGFzIHRhcmdldC4KLSAgICogIC0gV2Fp
dCBmb3IgYW4gT0VTIHRleHR1cmUgdG8gYmUgcHJvZHVjZWQuCi0gICAqIFRoZSBhY3R1YWwgb2Vz
RHJhdygpIHRlc3QgaXMgdGhpczoKLSAgICogIC0gQ3JlYXRlIGFuIEVnbEJhc2Ugd2l0aCBhIHBp
eGVsIGJ1ZmZlciBhcyB0YXJnZXQuCi0gICAqICAtIFJlbmRlciB0aGUgT0VTIHRleHR1cmUgb250
byB0aGUgcGl4ZWwgYnVmZmVyLgotICAgKiAgLSBSZWFkIGJhY2sgdGhlIHBpeGVsIGJ1ZmZlciBh
bmQgY29tcGFyZSBpdCB3aXRoIHRoZSBrbm93biBSR0IgZGF0YS4KLSAgICovCi0gIEBNZWRpdW1U
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RPZXNSZW5kZXJpbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIC8qKgotICAgICAqIFN0dWIgY2xhc3MgdG8gY29udmVydCBSR0IgQnl0
ZUJ1ZmZlcnMgdG8gT0VTIHRleHR1cmVzIGJ5IGRyYXdpbmcgb250byBhIFN1cmZhY2VUZXh0dXJl
LgotICAgICAqLwotICAgIGNsYXNzIFN0dWJPZXNUZXh0dXJlUHJvZHVjZXIgewotICAgICAgcHJp
dmF0ZSBmaW5hbCBFZ2xCYXNlIGVnbEJhc2U7Ci0gICAgICBwcml2YXRlIGZpbmFsIEdsUmVjdERy
YXdlciBkcmF3ZXI7Ci0gICAgICBwcml2YXRlIGZpbmFsIGludCByZ2JUZXh0dXJlOwotCi0gICAg
ICBwdWJsaWMgU3R1Yk9lc1RleHR1cmVQcm9kdWNlcigKLSAgICAgICAgICBFZ2xCYXNlLkNvbnRl
eHQgc2hhcmVkQ29udGV4dCwgU3VyZmFjZVRleHR1cmUgc3VyZmFjZVRleHR1cmUsIGludCB3aWR0
aCwgaW50IGhlaWdodCkgewotICAgICAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoc2hhcmVk
Q29udGV4dCwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgICAgICBzdXJmYWNlVGV4dHVyZS5z
ZXREZWZhdWx0QnVmZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgZWdsQmFzZS5jcmVh
dGVTdXJmYWNlKHN1cmZhY2VUZXh0dXJlKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGVnbEJhc2Uu
c3VyZmFjZVdpZHRoKCksIHdpZHRoKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGVnbEJhc2Uuc3Vy
ZmFjZUhlaWdodCgpLCBoZWlnaHQpOwotCi0gICAgICAgIGRyYXdlciA9IG5ldyBHbFJlY3REcmF3
ZXIoKTsKLQotICAgICAgICBlZ2xCYXNlLm1ha2VDdXJyZW50KCk7Ci0gICAgICAgIHJnYlRleHR1
cmUgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMyMC5HTF9URVhUVVJFXzJEKTsKLSAgICAg
IH0KLQotICAgICAgcHVibGljIHZvaWQgZHJhdyhCeXRlQnVmZmVyIHJnYlBsYW5lKSB7Ci0gICAg
ICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLQotICAgICAgICAvLyBVcGxvYWQgUkdCIGRhdGEg
dG8gdGV4dHVyZS4KLSAgICAgICAgR0xFUzIwLmdsQWN0aXZlVGV4dHVyZShHTEVTMjAuR0xfVEVY
VFVSRTApOwotICAgICAgICBHTEVTMjAuZ2xCaW5kVGV4dHVyZShHTEVTMjAuR0xfVEVYVFVSRV8y
RCwgcmdiVGV4dHVyZSk7Ci0gICAgICAgIEdMRVMyMC5nbFRleEltYWdlMkQoR0xFUzIwLkdMX1RF
WFRVUkVfMkQsIDAsIEdMRVMyMC5HTF9SR0IsIFdJRFRILCBIRUlHSFQsIDAsIEdMRVMyMC5HTF9S
R0IsCi0gICAgICAgICAgICBHTEVTMjAuR0xfVU5TSUdORURfQllURSwgcmdiUGxhbmUpOwotICAg
ICAgICAvLyBEcmF3IHRoZSBSR0IgZGF0YSBvbnRvIHRoZSBTdXJmYWNlVGV4dHVyZS4KLSAgICAg
ICAgZHJhd2VyLmRyYXdSZ2IocmdiVGV4dHVyZSwgUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRy
aXgoKSwgV0lEVEgsIEhFSUdIVCwKLSAgICAgICAgICAgIDAgLyogdmlld3BvcnRYICovLCAwIC8q
IHZpZXdwb3J0WSAqLywgV0lEVEgsIEhFSUdIVCk7Ci0gICAgICAgIGVnbEJhc2Uuc3dhcEJ1ZmZl
cnMoKTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICAgICAg
ZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgICAg
ICBHTEVTMjAuZ2xEZWxldGVUZXh0dXJlcygxLCBuZXcgaW50W10ge3JnYlRleHR1cmV9LCAwKTsK
LSAgICAgICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ3Jl
YXRlIEVHTCBiYXNlIHdpdGggYSBwaXhlbCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAg
ZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05G
SUdfUElYRUxfQlVGRkVSKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKFdJRFRI
LCBIRUlHSFQpOwotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlcyBmb3IgZ2VuZXJhdGluZyBPRVMg
dGV4dHVyZXMuCi0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVI
ZWxwZXIgPSBTdXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoCi0gICAgICAgICJTdXJmYWNlVGV4
dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250
ZXh0KCkpOwotICAgIGZpbmFsIFN0dWJPZXNUZXh0dXJlUHJvZHVjZXIgb2VzUHJvZHVjZXIgPSBu
ZXcgU3R1Yk9lc1RleHR1cmVQcm9kdWNlcigKLSAgICAgICAgZWdsQmFzZS5nZXRFZ2xCYXNlQ29u
dGV4dCgpLCBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpLCBXSURUSCwg
SEVJR0hUKTsKLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlclRlc3QuTW9ja1RleHR1cmVM
aXN0ZW5lciBsaXN0ZW5lciA9Ci0gICAgICAgIG5ldyBTdXJmYWNlVGV4dHVyZUhlbHBlclRlc3Qu
TW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlz
dGVuaW5nKGxpc3RlbmVyKTsKLQotICAgIC8vIENyZWF0ZSBSR0IgYnl0ZSBidWZmZXIgcGxhbmUg
d2l0aCByYW5kb20gY29udGVudC4KLSAgICBmaW5hbCBCeXRlQnVmZmVyIHJnYlBsYW5lID0gQnl0
ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChXSURUSCAqIEhFSUdIVCAqIDMpOwotICAgIGZpbmFsIFJh
bmRvbSByYW5kb20gPSBuZXcgUmFuZG9tKFNFRUQpOwotICAgIHJhbmRvbS5uZXh0Qnl0ZXMocmdi
UGxhbmUuYXJyYXkoKSk7Ci0KLSAgICAvLyBEcmF3IHRoZSBmcmFtZSBhbmQgYmxvY2sgdW50aWwg
YW4gT0VTIHRleHR1cmUgaXMgZGVsaXZlcmVkLgotICAgIG9lc1Byb2R1Y2VyLmRyYXcocmdiUGxh
bmUpOwotICAgIGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSgpOwotCi0gICAgLy8gUmVhbCB0ZXN0
IHN0YXJ0cyBoZXJlLgotICAgIC8vIERyYXcgdGhlIE9FUyB0ZXh0dXJlIG9uIHRoZSBwaXhlbCBi
dWZmZXIuCi0gICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIGZpbmFsIEdsUmVjdERyYXdl
ciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdPZXMobGlzdGVu
ZXIub2VzVGV4dHVyZUlkLCBsaXN0ZW5lci50cmFuc2Zvcm1NYXRyaXgsIFdJRFRILCBIRUlHSFQs
Ci0gICAgICAgIDAgLyogdmlld3BvcnRYICovLCAwIC8qIHZpZXdwb3J0WSAqLywgV0lEVEgsIEhF
SUdIVCk7Ci0KLSAgICAvLyBEb3dubG9hZCB0aGUgcGl4ZWxzIGluIHRoZSBwaXhlbCBidWZmZXIg
YXMgUkdCQS4gTm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBSR0IsIGUuZy4gTmV4dXMgOS4KLSAg
ICBmaW5hbCBCeXRlQnVmZmVyIHJnYmFEYXRhID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChX
SURUSCAqIEhFSUdIVCAqIDQpOwotICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwgMCwgV0lEVEgs
IEhFSUdIVCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRFLCByZ2JhRGF0
YSk7Ci0gICAgR2xVdGlsLmNoZWNrTm9HTEVTMkVycm9yKCJnbFJlYWRQaXhlbHMiKTsKLQotICAg
IC8vIEFzc2VydCByZW5kZXJlZCBpbWFnZSBpcyBwaXhlbCBwZXJmZWN0IHRvIHNvdXJjZSBSR0Iu
Ci0gICAgYXNzZXJ0RXF1YWxzKFdJRFRILCBIRUlHSFQsIHN0cmlwQWxwaGFDaGFubmVsKHJnYmFE
YXRhKSwgcmdiUGxhbmUpOwotCi0gICAgZHJhd2VyLnJlbGVhc2UoKTsKLSAgICBzdXJmYWNlVGV4
dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLSAgICBvZXNQcm9kdWNlci5yZWxlYXNl
KCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVs
ZWFzZSgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL01lZGlhQ29kZWNWaWRlb0Vu
Y29kZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9NZWRpYUNvZGVj
VmlkZW9FbmNvZGVyVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2Vi
cnRjL01lZGlhQ29kZWNWaWRlb0VuY29kZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NTggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1w
b3J0IG9yZy53ZWJydGMuTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5PdXRwdXRCdWZmZXJJbmZvOwot
Ci1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLm9w
ZW5nbC5HTEVTMTFFeHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcGVuZ2wuR0xFUzIwOwotaW1wb3J0IGFu
ZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7Ci1p
bXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLWlt
cG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLQot
QFRhcmdldEFwaShCdWlsZC5WRVJTSU9OX0NPREVTLklDRV9DUkVBTV9TQU5EV0lDSF9NUjEpCi1w
dWJsaWMgZmluYWwgY2xhc3MgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlclRlc3QgZXh0ZW5kcyBBY3Rp
dml0eVRlc3RDYXNlIHsKLSAgZmluYWwgc3RhdGljIFN0cmluZyBUQUcgPSAiTWVkaWFDb2RlY1Zp
ZGVvRW5jb2RlclRlc3QiOwotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRl
c3RJbml0aWFsaXplVXNpbmdCeXRlQnVmZmVyKCkgewotICAgIGlmICghTWVkaWFDb2RlY1ZpZGVv
RW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkKCkpIHsKLSAgICAgIExvZy5pKFRBRywgIkhhcmR3YXJl
IGRvZXMgbm90IHN1cHBvcnQgVlA4IGVuY29kaW5nLCBza2lwcGluZyB0ZXN0SW5pdFJlbGVhc2VV
c2luZ0J5dGVCdWZmZXIiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTWVkaWFDb2RlY1Zp
ZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsKLSAgICBh
c3NlcnRUcnVlKGVuY29kZXIuaW5pdEVuY29kZSgKLSAgICAgICAgTWVkaWFDb2RlY1ZpZGVvRW5j
b2Rlci5WaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgsIDY0MCwgNDgwLCAzMDAsIDMwLCBu
dWxsKSk7Ci0gICAgZW5jb2Rlci5yZWxlYXNlKCk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1
YmxpYyBzdGF0aWMgdm9pZCB0ZXN0SW5pdGlsaXplVXNpbmdUZXh0dXJlcygpIHsKLSAgICBpZiAo
IU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkg
ewotICAgICAgTG9nLmkoVEFHLCAiaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCBWUDggZW5jb2Rp
bmcsIHNraXBwaW5nIHRlc3RFbmNvZGVyVXNpbmdUZXh0dXJlcyIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBFZ2xCYXNlMTQgZWdsQmFzZSA9IG5ldyBFZ2xCYXNlMTQobnVsbCwgRWdsQmFz
ZS5DT05GSUdfUExBSU4pOwotICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgZW5jb2RlciA9IG5l
dyBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyKCk7Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmluaXRF
bmNvZGUoTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5WaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19W
UDgsIDY0MCwgNDgwLAotICAgICAgICAzMDAsIDMwLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0
KCkpKTsKLSAgICBlbmNvZGVyLnJlbGVhc2UoKTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAg
fQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RJbml0aWFsaXplVXNp
bmdCeXRlQnVmZmVyUmVJbml0aWxpemVVc2luZ1RleHR1cmVzKCkgewotICAgIGlmICghTWVkaWFD
b2RlY1ZpZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpKSB7Ci0gICAg
ICBMb2cuaShUQUcsICJoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IFZQOCBlbmNvZGluZywgc2tp
cHBpbmcgdGVzdEVuY29kZXJVc2luZ1RleHR1cmVzIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIE1lZGlhQ29kZWNWaWRlb0VuY29kZXIgZW5jb2RlciA9IG5ldyBNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyKCk7Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmluaXRFbmNvZGUoCi0gICAgICAgIE1l
ZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlkZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4LCA2NDAs
IDQ4MCwgMzAwLCAzMCwgbnVsbCkpOwotICAgIGVuY29kZXIucmVsZWFzZSgpOwotICAgIEVnbEJh
c2UxNCBlZ2xCYXNlID0gbmV3IEVnbEJhc2UxNChudWxsLCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7
Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmluaXRFbmNvZGUoTWVkaWFDb2RlY1ZpZGVvRW5jb2Rl
ci5WaWRlb0NvZGVjVHlwZS5WSURFT19DT0RFQ19WUDgsIDY0MCwgNDgwLAotICAgICAgICAzMDAs
IDMwLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpKTsKLSAgICBlbmNvZGVyLnJlbGVhc2Uo
KTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHN0YXRpYyB2b2lkIHRlc3RFbmNvZGVyVXNpbmdCeXRlQnVmZmVyKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1
cHBvcnRlZCgpKSB7Ci0gICAgICBMb2cuaShUQUcsICJIYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0
IFZQOCBlbmNvZGluZywgc2tpcHBpbmcgdGVzdEVuY29kZXJVc2luZ0J5dGVCdWZmZXIiKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBmaW5hbCBpbnQgd2lkdGggPSA2NDA7Ci0gICAgZmlu
YWwgaW50IGhlaWdodCA9IDQ4MDsKLSAgICBmaW5hbCBpbnQgbWluX3NpemUgPSB3aWR0aCAqIGhl
aWdodCAqIDMgLyAyOwotICAgIGZpbmFsIGxvbmcgcHJlc2VudGF0aW9uVGltZXN0YW1wVXMgPSAy
OwotCi0gICAgTWVkaWFDb2RlY1ZpZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNW
aWRlb0VuY29kZXIoKTsKLQotICAgIGFzc2VydFRydWUoZW5jb2Rlci5pbml0RW5jb2RlKAotICAg
ICAgICBNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLlZpZGVvQ29kZWNUeXBlLlZJREVPX0NPREVDX1ZQ
OCwgd2lkdGgsIGhlaWdodCwgMzAwLCAzMCwgbnVsbCkpOwotICAgIEJ5dGVCdWZmZXJbXSBpbnB1
dEJ1ZmZlcnMgPSBlbmNvZGVyLmdldElucHV0QnVmZmVycygpOwotICAgIGFzc2VydE5vdE51bGwo
aW5wdXRCdWZmZXJzKTsKLSAgICBhc3NlcnRUcnVlKG1pbl9zaXplIDw9IGlucHV0QnVmZmVyc1sw
XS5jYXBhY2l0eSgpKTsKLQotICAgIGludCBidWZmZXJJbmRleDsKLSAgICBkbyB7Ci0gICAgICBU
aHJlYWQuc2xlZXAoMTApOwotICAgICAgYnVmZmVySW5kZXggPSBlbmNvZGVyLmRlcXVldWVJbnB1
dEJ1ZmZlcigpOwotICAgIH0gd2hpbGUgKGJ1ZmZlckluZGV4ID09IC0xKTsgLy8gfC0xfCBpcyBy
ZXR1cm5lZCB3aGVuIHRoZXJlIGlzIG5vIGJ1ZmZlciBhdmFpbGFibGUgeWV0LgotCi0gICAgYXNz
ZXJ0VHJ1ZShidWZmZXJJbmRleCA+PSAwKTsKLSAgICBhc3NlcnRUcnVlKGJ1ZmZlckluZGV4IDwg
aW5wdXRCdWZmZXJzLmxlbmd0aCk7Ci0gICAgYXNzZXJ0VHJ1ZShlbmNvZGVyLmVuY29kZUJ1ZmZl
cih0cnVlLCBidWZmZXJJbmRleCwgbWluX3NpemUsIHByZXNlbnRhdGlvblRpbWVzdGFtcFVzKSk7
Ci0KLSAgICBPdXRwdXRCdWZmZXJJbmZvIGluZm87Ci0gICAgZG8gewotICAgICAgaW5mbyA9IGVu
Y29kZXIuZGVxdWV1ZU91dHB1dEJ1ZmZlcigpOwotICAgICAgVGhyZWFkLnNsZWVwKDEwKTsKLSAg
ICB9IHdoaWxlIChpbmZvID09IG51bGwpOwotICAgIGFzc2VydFRydWUoaW5mby5pbmRleCA+PSAw
KTsKLSAgICBhc3NlcnRFcXVhbHMocHJlc2VudGF0aW9uVGltZXN0YW1wVXMsIGluZm8ucHJlc2Vu
dGF0aW9uVGltZXN0YW1wVXMpOwotICAgIGFzc2VydFRydWUoaW5mby5idWZmZXIuY2FwYWNpdHko
KSA+IDApOwotICAgIGVuY29kZXIucmVsZWFzZU91dHB1dEJ1ZmZlcihpbmZvLmluZGV4KTsKLQot
ICAgIGVuY29kZXIucmVsZWFzZSgpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3Rh
dGljIHZvaWQgdGVzdEVuY29kZXJVc2luZ1RleHR1cmVzKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1cHBvcnRl
ZFVzaW5nVGV4dHVyZXMoKSkgewotICAgICAgTG9nLmkoVEFHLCAiSGFyZHdhcmUgZG9lcyBub3Qg
c3VwcG9ydCBWUDggZW5jb2RpbmcsIHNraXBwaW5nIHRlc3RFbmNvZGVyVXNpbmdUZXh0dXJlcyIp
OwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZpbmFsIGludCB3aWR0aCA9IDY0MDsKLSAg
ICBmaW5hbCBpbnQgaGVpZ2h0ID0gNDgwOwotICAgIGZpbmFsIGxvbmcgcHJlc2VudGF0aW9uVHMg
PSAyOwotCi0gICAgZmluYWwgRWdsQmFzZTE0IGVnbE9lc0Jhc2UgPSBuZXcgRWdsQmFzZTE0KG51
bGwsIEVnbEJhc2UuQ09ORklHX1BJWEVMX0JVRkZFUik7Ci0gICAgZWdsT2VzQmFzZS5jcmVhdGVE
dW1teVBidWZmZXJTdXJmYWNlKCk7Ci0gICAgZWdsT2VzQmFzZS5tYWtlQ3VycmVudCgpOwotICAg
IGludCBvZXNUZXh0dXJlSWQgPSBHbFV0aWwuZ2VuZXJhdGVUZXh0dXJlKEdMRVMxMUV4dC5HTF9U
RVhUVVJFX0VYVEVSTkFMX09FUyk7Ci0KLSAgICAvLyBUT0RPKHBlcmtqKTogVGhpcyB0ZXN0IGlz
IHdlZWsgc2luY2Ugd2UgZG9uJ3QgZmlsbCB0aGUgdGV4dHVyZSB3aXRoIHZhbGlkIGRhdGEgd2l0
aCBjb3JyZWN0Ci0gICAgLy8gd2lkdGggYW5kIGhlaWdodCBhbmQgdmVyaWZ5IHRoZSBlbmNvZGVk
IGRhdGEuIEZpbGwgdGhlIE9FUyB0ZXh0dXJlIGFuZCBmaWd1cmUgb3V0IGEgd2F5IHRvCi0gICAg
Ly8gdmVyaWZ5IHRoYXQgdGhlIG91dHB1dCBtYWtlIHNlbnNlLgotCi0gICAgTWVkaWFDb2RlY1Zp
ZGVvRW5jb2RlciBlbmNvZGVyID0gbmV3IE1lZGlhQ29kZWNWaWRlb0VuY29kZXIoKTsKLQotICAg
IGFzc2VydFRydWUoZW5jb2Rlci5pbml0RW5jb2RlKE1lZGlhQ29kZWNWaWRlb0VuY29kZXIuVmlk
ZW9Db2RlY1R5cGUuVklERU9fQ09ERUNfVlA4LCB3aWR0aCwKLSAgICAgICAgaGVpZ2h0LCAzMDAs
IDMwLCBlZ2xPZXNCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpKTsKLSAgICBhc3NlcnRUcnVlKAot
ICAgICAgICBlbmNvZGVyLmVuY29kZVRleHR1cmUodHJ1ZSwgb2VzVGV4dHVyZUlkLCBSZW5kZXJl
ckNvbW1vbi5pZGVudGl0eU1hdHJpeCgpLCBwcmVzZW50YXRpb25UcykpOwotICAgIEdsVXRpbC5j
aGVja05vR0xFUzJFcnJvcigiZW5jb2RlVGV4dHVyZSIpOwotCi0gICAgLy8gSXQgc2hvdWxkIGJl
IE9rIHRvIGRlbGV0ZSB0aGUgdGV4dHVyZSBhZnRlciBjYWxsaW5nIGVuY29kZVRleHR1cmUuCi0g
ICAgR0xFUzIwLmdsRGVsZXRlVGV4dHVyZXMoMSwgbmV3IGludFtdIHtvZXNUZXh0dXJlSWR9LCAw
KTsKLQotICAgIE91dHB1dEJ1ZmZlckluZm8gaW5mbyA9IGVuY29kZXIuZGVxdWV1ZU91dHB1dEJ1
ZmZlcigpOwotICAgIHdoaWxlIChpbmZvID09IG51bGwpIHsKLSAgICAgIGluZm8gPSBlbmNvZGVy
LmRlcXVldWVPdXRwdXRCdWZmZXIoKTsKLSAgICAgIFRocmVhZC5zbGVlcCgyMCk7Ci0gICAgfQot
ICAgIGFzc2VydFRydWUoaW5mby5pbmRleCAhPSAtMSk7Ci0gICAgYXNzZXJ0VHJ1ZShpbmZvLmJ1
ZmZlci5jYXBhY2l0eSgpID4gMCk7Ci0gICAgYXNzZXJ0RXF1YWxzKHByZXNlbnRhdGlvblRzLCBp
bmZvLnByZXNlbnRhdGlvblRpbWVzdGFtcFVzKTsKLSAgICBlbmNvZGVyLnJlbGVhc2VPdXRwdXRC
dWZmZXIoaW5mby5pbmRleCk7Ci0KLSAgICBlbmNvZGVyLnJlbGVhc2UoKTsKLSAgICBlZ2xPZXNC
YXNlLnJlbGVhc2UoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9OZXR3b3JrTW9u
aXRvclRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL05ldHdvcmtNb25p
dG9yVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL05ldHdv
cmtNb25pdG9yVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjc0ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi1wYWNrYWdlIG9yZy53ZWJydGM7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLndl
YnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGlvblR5cGU7Ci1pbXBvcnQgc3Rh
dGljIG9yZy53ZWJydGMuTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LkNvbm5lY3Rpdml0eU1hbmFn
ZXJEZWxlZ2F0ZTsKLWltcG9ydCBzdGF0aWMgb3JnLndlYnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9E
ZXRlY3QuSU5WQUxJRF9ORVRfSUQ7Ci1pbXBvcnQgc3RhdGljIG9yZy53ZWJydGMuTmV0d29ya01v
bml0b3JBdXRvRGV0ZWN0Lk5ldHdvcmtJbmZvcm1hdGlvbjsKLWltcG9ydCBzdGF0aWMgb3JnLndl
YnJ0Yy5OZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuTmV0d29ya1N0YXRlOwotCi1pbXBvcnQgYW5k
cm9pZC5hbm5vdGF0aW9uLlN1cHByZXNzTGludDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29u
dGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQubmV0
LkNvbm5lY3Rpdml0eU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuTmV0d29yazsKLWltcG9y
dCBhbmRyb2lkLm5ldC53aWZpLldpZmlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7
Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuTG9vcGVyOwot
aW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0eVRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVz
dC5VaVRocmVhZFRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0
aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0
aW9uLlNtYWxsVGVzdDsKLQotLyoqCi0gKiBUZXN0cyBmb3Igb3JnLndlYnJ0Yy5OZXR3b3JrTW9u
aXRvci4KLSAqLwotQFN1cHByZXNzTGludCgiTmV3QXBpIikKLXB1YmxpYyBjbGFzcyBOZXR3b3Jr
TW9uaXRvclRlc3QgZXh0ZW5kcyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgLyoqCi0gICAqIExpc3Rl
bnMgZm9yIGFsZXJ0cyBmaXJlZCBieSB0aGUgTmV0d29ya01vbml0b3Igd2hlbiBuZXR3b3JrIHN0
YXR1cyBjaGFuZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTmV0d29ya01vbml0
b3JUZXN0T2JzZXJ2ZXIgaW1wbGVtZW50cyBOZXR3b3JrTW9uaXRvci5OZXR3b3JrT2JzZXJ2ZXIg
ewotICAgIHByaXZhdGUgYm9vbGVhbiByZWNlaXZlZE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoQ29u
bmVjdGlvblR5cGUgY29ubmVjdGlvblR5cGUpIHsKLSAgICAgIHJlY2VpdmVkTm90aWZpY2F0aW9u
ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBoYXNSZWNlaXZlZE5vdGlmaWNh
dGlvbigpIHsKLSAgICAgIHJldHVybiByZWNlaXZlZE5vdGlmaWNhdGlvbjsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgdm9pZCByZXNldEhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkgewotICAgICAgcmVj
ZWl2ZWROb3RpZmljYXRpb24gPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogTW9j
a3Mgb3V0IGNhbGxzIHRvIHRoZSBDb25uZWN0aXZpdHlNYW5hZ2VyLgotICAgKi8KLSAgcHJpdmF0
ZSBzdGF0aWMgY2xhc3MgTW9ja0Nvbm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBleHRlbmRzIENv
bm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSB7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGFjdGl2ZU5l
dHdvcmtFeGlzdHM7Ci0gICAgcHJpdmF0ZSBpbnQgbmV0d29ya1R5cGU7Ci0gICAgcHJpdmF0ZSBp
bnQgbmV0d29ya1N1YnR5cGU7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTmV0d29ya1N0
YXRlIGdldE5ldHdvcmtTdGF0ZSgpIHsKLSAgICAgIHJldHVybiBuZXcgTmV0d29ya1N0YXRlKGFj
dGl2ZU5ldHdvcmtFeGlzdHMsIG5ldHdvcmtUeXBlLCBuZXR3b3JrU3VidHlwZSk7Ci0gICAgfQot
Ci0gICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb25zIHRvIGF2b2lkIE51bGxQb2ludGVyRXhjZXB0
aW9ucyBpbiBkZWZhdWx0IGltcGxlbWVudGF0aW9uczoKLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBsb25nIGdldERlZmF1bHROZXRJZCgpIHsKLSAgICAgIHJldHVybiBJTlZBTElEX05FVF9J
RDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgTmV0d29ya1tdIGdldEFsbE5l
dHdvcmtzKCkgewotICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrWzBdOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBOZXR3b3JrU3RhdGUgZ2V0TmV0d29ya1N0YXRlKE5ldHdvcmsg
bmV0d29yaykgewotICAgICAgcmV0dXJuIG5ldyBOZXR3b3JrU3RhdGUoZmFsc2UsIC0xLCAtMSk7
Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0QWN0aXZlTmV0d29ya0V4aXN0cyhib29sZWFu
IG5ldHdvcmtFeGlzdHMpIHsKLSAgICAgIGFjdGl2ZU5ldHdvcmtFeGlzdHMgPSBuZXR3b3JrRXhp
c3RzOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtUeXBlKGludCBuZXR3b3Jr
VHlwZSkgewotICAgICAgdGhpcy5uZXR3b3JrVHlwZSA9IG5ldHdvcmtUeXBlOwotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIHNldE5ldHdvcmtTdWJ0eXBlKGludCBuZXR3b3JrU3VidHlwZSkgewot
ICAgICAgdGhpcy5uZXR3b3JrU3VidHlwZSA9IG5ldHdvcmtTdWJ0eXBlOwotICAgIH0KLSAgfQot
Ci0gIC8qKgotICAgKiBNb2NrcyBvdXQgY2FsbHMgdG8gdGhlIFdpZmlNYW5hZ2VyLgotICAgKi8K
LSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW9ja1dpZmlNYW5hZ2VyRGVsZWdhdGUKLSAgICAgIGV4
dGVuZHMgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0LldpZmlNYW5hZ2VyRGVsZWdhdGUgewotICAg
IHByaXZhdGUgU3RyaW5nIHdpZmlTU0lEOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFN0
cmluZyBnZXRXaWZpU1NJRCgpIHsKLSAgICAgIHJldHVybiB3aWZpU1NJRDsKLSAgICB9Ci0KLSAg
ICBwdWJsaWMgdm9pZCBzZXRXaWZpU1NJRChTdHJpbmcgd2lmaVNTSUQpIHsKLSAgICAgIHRoaXMu
d2lmaVNTSUQgPSB3aWZpU1NJRDsKLSAgICB9Ci0gIH0KLQotICAvLyBBIGR1bW15IE5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdC5PYnNlcnZlci4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgVGVzdE5l
dHdvcmtNb25pdG9yQXV0b0RldGVjdE9ic2VydmVyCi0gICAgICBpbXBsZW1lbnRzIE5ldHdvcmtN
b25pdG9yQXV0b0RldGVjdC5PYnNlcnZlciB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgb25Db25uZWN0aW9uVHlwZUNoYW5nZWQoQ29ubmVjdGlvblR5cGUgbmV3Q29ubmVjdGlvblR5
cGUpIHt9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbk5ldHdvcmtDb25uZWN0
KE5ldHdvcmtJbmZvcm1hdGlvbiBuZXR3b3JrSW5mbykge30KLQotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyB2b2lkIG9uTmV0d29ya0Rpc2Nvbm5lY3QobG9uZyBuZXR3b3JrSGFuZGxlKSB7fQot
ICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgT2JqZWN0IGxvY2sgPSBuZXcgT2JqZWN0KCk7
Ci0gIHByaXZhdGUgc3RhdGljIEhhbmRsZXIgdWlUaHJlYWRIYW5kbGVyID0gbnVsbDsKLQotICBw
cml2YXRlIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdCByZWNlaXZlcjsKLSAgcHJpdmF0ZSBNb2Nr
Q29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGNvbm5lY3Rpdml0eURlbGVnYXRlOwotICBwcml2
YXRlIE1vY2tXaWZpTWFuYWdlckRlbGVnYXRlIHdpZmlEZWxlZ2F0ZTsKLQotICBwcml2YXRlIHN0
YXRpYyBIYW5kbGVyIGdldFVpVGhyZWFkSGFuZGxlcigpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGxv
Y2spIHsKLSAgICAgIGlmICh1aVRocmVhZEhhbmRsZXIgPT0gbnVsbCkgewotICAgICAgICB1aVRo
cmVhZEhhbmRsZXIgPSBuZXcgSGFuZGxlcihMb29wZXIuZ2V0TWFpbkxvb3BlcigpKTsKLSAgICAg
IH0KLSAgICAgIHJldHVybiB1aVRocmVhZEhhbmRsZXI7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIEhlbHBlciBtZXRob2QgdG8gY3JlYXRlIGEgbmV0d29yayBtb25pdG9yIGFuZCBkZWxlZ2F0
ZXMgZm9yIHRlc3RpbmcuCi0gICAqLwotICBwcml2YXRlIHZvaWQgY3JlYXRlVGVzdE1vbml0b3Io
KSB7Ci0gICAgQ29udGV4dCBjb250ZXh0ID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0
Q29udGV4dCgpOwotICAgIE5ldHdvcmtNb25pdG9yLnJlc2V0SW5zdGFuY2VGb3JUZXN0cyhjb250
ZXh0KTsKLSAgICBOZXR3b3JrTW9uaXRvci5zZXRBdXRvRGV0ZWN0Q29ubmVjdGl2aXR5U3RhdGUo
dHJ1ZSk7Ci0gICAgcmVjZWl2ZXIgPSBOZXR3b3JrTW9uaXRvci5nZXRBdXRvRGV0ZWN0b3JGb3JU
ZXN0KCk7Ci0gICAgYXNzZXJ0Tm90TnVsbChyZWNlaXZlcik7Ci0KLSAgICBjb25uZWN0aXZpdHlE
ZWxlZ2F0ZSA9IG5ldyBNb2NrQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlKCk7Ci0gICAgY29u
bmVjdGl2aXR5RGVsZWdhdGUuc2V0QWN0aXZlTmV0d29ya0V4aXN0cyh0cnVlKTsKLSAgICByZWNl
aXZlci5zZXRDb25uZWN0aXZpdHlNYW5hZ2VyRGVsZWdhdGVGb3JUZXN0cyhjb25uZWN0aXZpdHlE
ZWxlZ2F0ZSk7Ci0KLSAgICB3aWZpRGVsZWdhdGUgPSBuZXcgTW9ja1dpZmlNYW5hZ2VyRGVsZWdh
dGUoKTsKLSAgICByZWNlaXZlci5zZXRXaWZpTWFuYWdlckRlbGVnYXRlRm9yVGVzdHMod2lmaURl
bGVnYXRlKTsKLSAgICB3aWZpRGVsZWdhdGUuc2V0V2lmaVNTSUQoImZvbyIpOwotICB9Ci0KLSAg
cHJpdmF0ZSBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuQ29ubmVjdGlvblR5cGUgZ2V0Q3VycmVu
dENvbm5lY3Rpb25UeXBlKCkgewotICAgIGZpbmFsIE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdC5O
ZXR3b3JrU3RhdGUgbmV0d29ya1N0YXRlID0gcmVjZWl2ZXIuZ2V0Q3VycmVudE5ldHdvcmtTdGF0
ZSgpOwotICAgIHJldHVybiByZWNlaXZlci5nZXRDb25uZWN0aW9uVHlwZShuZXR3b3JrU3RhdGUp
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4
Y2VwdGlvbiB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgICBnZXRVaVRocmVhZEhhbmRsZXIoKS5w
b3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
Y3JlYXRlVGVzdE1vbml0b3IoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAg
KiBUZXN0cyB0aGF0IHRoZSByZWNlaXZlciByZWdpc3RlcnMgZm9yIGNvbm5lY3Rpdml0eSBpbnRl
bnRzIGR1cmluZyBjb25zdHJ1Y3Rpb24uCi0gICAqLwotICBAVWlUaHJlYWRUZXN0Ci0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdE5ldHdvcmtNb25pdG9yUmVnaXN0ZXJzSW5Db25zdHJ1
Y3RvcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgQ29udGV4dCBjb250ZXh0
ID0gZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpOwotCi0gICAgTmV0d29y
a01vbml0b3JBdXRvRGV0ZWN0Lk9ic2VydmVyIG9ic2VydmVyID0gbmV3IFRlc3ROZXR3b3JrTW9u
aXRvckF1dG9EZXRlY3RPYnNlcnZlcigpOwotCi0gICAgTmV0d29ya01vbml0b3JBdXRvRGV0ZWN0
IHJlY2VpdmVyID0gbmV3IE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdChvYnNlcnZlciwgY29udGV4
dCk7Ci0KLSAgICBhc3NlcnRUcnVlKHJlY2VpdmVyLmlzUmVjZWl2ZXJSZWdpc3RlcmVkRm9yVGVz
dGluZygpKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB0aGF0IHdoZW4gdGhlcmUgaXMgYW4g
aW50ZW50IGluZGljYXRpbmcgYSBjaGFuZ2UgaW4gbmV0d29yayBjb25uZWN0aXZpdHksIGl0IHNl
bmRzIGEKLSAgICogbm90aWZpY2F0aW9uIHRvIEphdmEgb2JzZXJ2ZXJzLgotICAgKi8KLSAgQFVp
VGhyZWFkVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TmV0d29ya01vbml0
b3JKYXZhT2JzZXJ2ZXJzKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAvLyBJ
bml0aWFsaXplIHRoZSBOZXR3b3JrTW9uaXRvciB3aXRoIGEgY29ubmVjdGlvbi4KLSAgICBJbnRl
bnQgY29ubmVjdGl2aXR5SW50ZW50ID0gbmV3IEludGVudChDb25uZWN0aXZpdHlNYW5hZ2VyLkNP
Tk5FQ1RJVklUWV9BQ1RJT04pOwotICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50
YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0KLSAgICAv
LyBXZSBzaG91bGRuJ3QgYmUgcmUtbm90aWZpZWQgaWYgdGhlIGNvbm5lY3Rpb24gaGFzbid0IGFj
dHVhbGx5IGNoYW5nZWQuCi0gICAgTmV0d29ya01vbml0b3JUZXN0T2JzZXJ2ZXIgb2JzZXJ2ZXIg
PSBuZXcgTmV0d29ya01vbml0b3JUZXN0T2JzZXJ2ZXIoKTsKLSAgICBOZXR3b3JrTW9uaXRvci5h
ZGROZXR3b3JrT2JzZXJ2ZXIob2JzZXJ2ZXIpOwotICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJ
bnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7
Ci0gICAgYXNzZXJ0RmFsc2Uob2JzZXJ2ZXIuaGFzUmVjZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0K
LSAgICAvLyBXZSBzaG91bGRuJ3QgYmUgbm90aWZpZWQgaWYgd2UncmUgY29ubmVjdGVkIHRvIG5v
bi1XaWZpIGFuZCB0aGUgV2lmaSBTU0lEIGNoYW5nZXMuCi0gICAgd2lmaURlbGVnYXRlLnNldFdp
ZmlTU0lEKCJiYXIiKTsKLSAgICByZWNlaXZlci5vblJlY2VpdmUoZ2V0SW5zdHJ1bWVudGF0aW9u
KCkuZ2V0VGFyZ2V0Q29udGV4dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFzc2VydEZh
bHNlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkpOwotCi0gICAgLy8gV2Ugc2hv
dWxkIGJlIG5vdGlmaWVkIHdoZW4gd2UgY2hhbmdlIHRvIFdpZmkuCi0gICAgY29ubmVjdGl2aXR5
RGVsZWdhdGUuc2V0TmV0d29ya1R5cGUoQ29ubmVjdGl2aXR5TWFuYWdlci5UWVBFX1dJRkkpOwot
ICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250
ZXh0KCksIGNvbm5lY3Rpdml0eUludGVudCk7Ci0gICAgYXNzZXJ0VHJ1ZShvYnNlcnZlci5oYXNS
ZWNlaXZlZE5vdGlmaWNhdGlvbigpKTsKLSAgICBvYnNlcnZlci5yZXNldEhhc1JlY2VpdmVkTm90
aWZpY2F0aW9uKCk7Ci0KLSAgICAvLyBXZSBzaG91bGQgYmUgbm90aWZpZWQgd2hlbiB0aGUgV2lm
aSBTU0lEIGNoYW5nZXMuCi0gICAgd2lmaURlbGVnYXRlLnNldFdpZmlTU0lEKCJmb28iKTsKLSAg
ICByZWNlaXZlci5vblJlY2VpdmUoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4
dCgpLCBjb25uZWN0aXZpdHlJbnRlbnQpOwotICAgIGFzc2VydFRydWUob2JzZXJ2ZXIuaGFzUmVj
ZWl2ZWROb3RpZmljYXRpb24oKSk7Ci0gICAgb2JzZXJ2ZXIucmVzZXRIYXNSZWNlaXZlZE5vdGlm
aWNhdGlvbigpOwotCi0gICAgLy8gV2Ugc2hvdWxkbid0IGJlIHJlLW5vdGlmaWVkIGlmIHRoZSBX
aWZpIFNTSUQgaGFzbid0IGFjdHVhbGx5IGNoYW5nZWQuCi0gICAgcmVjZWl2ZXIub25SZWNlaXZl
KGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSwgY29ubmVjdGl2aXR5SW50
ZW50KTsKLSAgICBhc3NlcnRGYWxzZShvYnNlcnZlci5oYXNSZWNlaXZlZE5vdGlmaWNhdGlvbigp
KTsKLQotICAgIC8vIE1pbWljIHRoYXQgY29ubmVjdGl2aXR5IGhhcyBiZWVuIGxvc3QgYW5kIGVu
c3VyZSB0aGF0IHRoZSBvYnNlcnZlciBnZXRzIHRoZSBub3RpZmljYXRpb24uCi0gICAgY29ubmVj
dGl2aXR5RGVsZWdhdGUuc2V0QWN0aXZlTmV0d29ya0V4aXN0cyhmYWxzZSk7Ci0gICAgSW50ZW50
IG5vQ29ubmVjdGl2aXR5SW50ZW50ID0gbmV3IEludGVudChDb25uZWN0aXZpdHlNYW5hZ2VyLkNP
Tk5FQ1RJVklUWV9BQ1RJT04pOwotICAgIHJlY2VpdmVyLm9uUmVjZWl2ZShnZXRJbnN0cnVtZW50
YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCksIG5vQ29ubmVjdGl2aXR5SW50ZW50KTsKLSAgICBh
c3NlcnRUcnVlKG9ic2VydmVyLmhhc1JlY2VpdmVkTm90aWZpY2F0aW9uKCkpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFRlc3RzIHRoYXQgQ29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlIGRvZXNuJ3Qg
Y3Jhc2guIFRoaXMgdGVzdCBjYW5ub3QgcmVseSBvbiBoYXZpbmcgYW55Ci0gICAqIGFjdGl2ZSBu
ZXR3b3JrIGNvbm5lY3Rpb25zIHNvIGl0IGNhbm5vdCB1c2VmdWxseSBjaGVjayByZXN1bHRzLCBi
dXQgaXQgY2FuIGF0IGxlYXN0IGNoZWNrCi0gICAqIHRoYXQgdGhlIGZ1bmN0aW9ucyBkb24ndCBj
cmFzaC4KLSAgICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0Q29ubmVjdGl2aXR5TWFuYWdlckRlbGVnYXRlRG9lc05vdENyYXNoKCkgewotICAgIENv
bm5lY3Rpdml0eU1hbmFnZXJEZWxlZ2F0ZSBkZWxlZ2F0ZSA9Ci0gICAgICAgIG5ldyBDb25uZWN0
aXZpdHlNYW5hZ2VyRGVsZWdhdGUoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4
dCgpKTsKLSAgICBkZWxlZ2F0ZS5nZXROZXR3b3JrU3RhdGUoKTsKLSAgICBpZiAoQnVpbGQuVkVS
U0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApIHsKLSAgICAgIE5l
dHdvcmtbXSBuZXR3b3JrcyA9IGRlbGVnYXRlLmdldEFsbE5ldHdvcmtzKCk7Ci0gICAgICBpZiAo
bmV0d29ya3MubGVuZ3RoID49IDEpIHsKLSAgICAgICAgZGVsZWdhdGUuZ2V0TmV0d29ya1N0YXRl
KG5ldHdvcmtzWzBdKTsKLSAgICAgICAgZGVsZWdhdGUuaGFzSW50ZXJuZXRDYXBhYmlsaXR5KG5l
dHdvcmtzWzBdKTsKLSAgICAgIH0KLSAgICAgIGRlbGVnYXRlLmdldERlZmF1bHROZXRJZCgpOwot
ICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBUZXN0cyB0aGF0IE5ldHdvcmtNb25pdG9yQXV0b0Rl
dGVjdCBxdWVyeWFibGUgQVBJcyBkb24ndCBjcmFzaC4gVGhpcyB0ZXN0IGNhbm5vdCByZWx5Ci0g
ICAqIG9uIGhhdmluZyBhbnkgYWN0aXZlIG5ldHdvcmsgY29ubmVjdGlvbnMgc28gaXQgY2Fubm90
IHVzZWZ1bGx5IGNoZWNrIHJlc3VsdHMsIGJ1dCBpdCBjYW4gYXQKLSAgICogbGVhc3QgY2hlY2sg
dGhhdCB0aGUgZnVuY3Rpb25zIGRvbid0IGNyYXNoLgotICAgKi8KLSAgQFVpVGhyZWFkVGVzdAot
ICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RRdWVyeWFibGVBUElzRG9Ob3RDcmFzaCgp
IHsKLSAgICBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3QuT2JzZXJ2ZXIgb2JzZXJ2ZXIgPSBuZXcg
VGVzdE5ldHdvcmtNb25pdG9yQXV0b0RldGVjdE9ic2VydmVyKCk7Ci0gICAgTmV0d29ya01vbml0
b3JBdXRvRGV0ZWN0IG5jbiA9Ci0gICAgICAgIG5ldyBOZXR3b3JrTW9uaXRvckF1dG9EZXRlY3Qo
b2JzZXJ2ZXIsIGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSk7Ci0gICAg
bmNuLmdldERlZmF1bHROZXRJZCgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1Bl
ZXJDb25uZWN0aW9uVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUGVl
ckNvbm5lY3Rpb25UZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJy
dGMvUGVlckNvbm5lY3Rpb25UZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDI1ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IG9y
Zy53ZWJydGMuTWV0cmljcy5IaXN0b2dyYW1JbmZvOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNv
bm5lY3Rpb24uSWNlQ29ubmVjdGlvblN0YXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5l
Y3Rpb24uSWNlR2F0aGVyaW5nU3RhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlv
bi5TaWduYWxpbmdTdGF0ZTsKLQotaW1wb3J0IGFuZHJvaWQudGVzdC5BY3Rpdml0eVRlc3RDYXNl
OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0
OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEubGFuZy5yZWYuV2Vha1JlZmVy
ZW5jZTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJz
ZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5I
YXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5JZGVudGl0eUhhc2hNYXA7Ci1pbXBvcnQgamF2YS51
dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGls
Lk1hcDsKLWltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3Vy
cmVudC5Db3VudERvd25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5p
dDsKLQotLyoqIEVuZC10by1lbmQgdGVzdHMgZm9yIFBlZXJDb25uZWN0aW9uLmphdmEuICovCi1w
dWJsaWMgY2xhc3MgUGVlckNvbm5lY3Rpb25UZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0Q2FzZSB7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FT1VUX1NFQ09ORFMgPSAyMDsKLSAgcHJp
dmF0ZSBUcmVlU2V0PFN0cmluZz4gdGhyZWFkc0JlZm9yZVRlc3QgPSBudWxsOwotCi0gIEBPdmVy
cmlkZQotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsKLSAgICBhc3NlcnRUcnVlKFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplQW5kcm9pZEdsb2JhbHMoCi0gICAgICAgIGdldEluc3Ry
dW1lbnRhdGlvbigpLmdldENvbnRleHQoKSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSkpOwotICB9Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMgaW1wbGVtZW50cyBQZWVy
Q29ubmVjdGlvbi5PYnNlcnZlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhQ2hhbm5lbC5P
YnNlcnZlciwgU3RhdHNPYnNlcnZlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbmFtZTsK
LSAgICBwcml2YXRlIGludCBleHBlY3RlZEljZUNhbmRpZGF0ZXMgPSAwOwotICAgIHByaXZhdGUg
aW50IGV4cGVjdGVkRXJyb3JzID0gMDsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZFJlbmVnb3Rp
YXRpb25zID0gMDsKLSAgICBwcml2YXRlIGludCBleHBlY3RlZFdpZHRoID0gMDsKLSAgICBwcml2
YXRlIGludCBleHBlY3RlZEhlaWdodCA9IDA7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRGcmFt
ZXNEZWxpdmVyZWQgPSAwOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxTaWduYWxpbmdTdGF0ZT4g
ZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2VzID0gbmV3IExpbmtlZExpc3Q8U2lnbmFsaW5nU3RhdGU+
KCk7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PEljZUNvbm5lY3Rpb25TdGF0ZT4gZXhwZWN0ZWRJ
Y2VDb25uZWN0aW9uQ2hhbmdlcyA9Ci0gICAgICAgIG5ldyBMaW5rZWRMaXN0PEljZUNvbm5lY3Rp
b25TdGF0ZT4oKTsKLSAgICBwcml2YXRlIExpbmtlZExpc3Q8SWNlR2F0aGVyaW5nU3RhdGU+IGV4
cGVjdGVkSWNlR2F0aGVyaW5nQ2hhbmdlcyA9Ci0gICAgICAgIG5ldyBMaW5rZWRMaXN0PEljZUdh
dGhlcmluZ1N0YXRlPigpOwotICAgIHByaXZhdGUgTGlua2VkTGlzdDxTdHJpbmc+IGV4cGVjdGVk
QWRkU3RyZWFtTGFiZWxzID0gbmV3IExpbmtlZExpc3Q8U3RyaW5nPigpOwotICAgIHByaXZhdGUg
TGlua2VkTGlzdDxTdHJpbmc+IGV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFiZWxzID0gbmV3IExpbmtl
ZExpc3Q8U3RyaW5nPigpOwotICAgIHByaXZhdGUgZmluYWwgTGlua2VkTGlzdDxJY2VDYW5kaWRh
dGU+IGdvdEljZUNhbmRpZGF0ZXMgPSBuZXcgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+KCk7Ci0g
ICAgcHJpdmF0ZSBNYXA8TWVkaWFTdHJlYW0sIFdlYWtSZWZlcmVuY2U8VmlkZW9SZW5kZXJlcj4+
IHJlbmRlcmVycyA9Ci0gICAgICAgIG5ldyBJZGVudGl0eUhhc2hNYXA8TWVkaWFTdHJlYW0sIFdl
YWtSZWZlcmVuY2U8VmlkZW9SZW5kZXJlcj4+KCk7Ci0gICAgcHJpdmF0ZSBEYXRhQ2hhbm5lbCBk
YXRhQ2hhbm5lbDsKLSAgICBwcml2YXRlIExpbmtlZExpc3Q8RGF0YUNoYW5uZWwuQnVmZmVyPiBl
eHBlY3RlZEJ1ZmZlcnMgPSBuZXcgTGlua2VkTGlzdDxEYXRhQ2hhbm5lbC5CdWZmZXI+KCk7Ci0g
ICAgcHJpdmF0ZSBMaW5rZWRMaXN0PERhdGFDaGFubmVsLlN0YXRlPiBleHBlY3RlZFN0YXRlQ2hh
bmdlcyA9Ci0gICAgICAgIG5ldyBMaW5rZWRMaXN0PERhdGFDaGFubmVsLlN0YXRlPigpOwotICAg
IHByaXZhdGUgTGlua2VkTGlzdDxTdHJpbmc+IGV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJl
bHMgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0gICAgcHJpdmF0ZSBpbnQgZXhwZWN0ZWRT
dGF0c0NhbGxiYWNrcyA9IDA7Ci0gICAgcHJpdmF0ZSBMaW5rZWRMaXN0PFN0YXRzUmVwb3J0W10+
IGdvdFN0YXRzUmVwb3J0cyA9IG5ldyBMaW5rZWRMaXN0PFN0YXRzUmVwb3J0W10+KCk7Ci0gICAg
cHJpdmF0ZSBmaW5hbCBIYXNoU2V0PE1lZGlhU3RyZWFtPiBnb3RSZW1vdGVTdHJlYW1zID0gbmV3
IEhhc2hTZXQ8TWVkaWFTdHJlYW0+KCk7Ci0KLSAgICBwdWJsaWMgT2JzZXJ2ZXJFeHBlY3RhdGlv
bnMoU3RyaW5nIG5hbWUpIHsKLSAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAg
cHVibGljIHN5bmNocm9uaXplZCB2b2lkIHNldERhdGFDaGFubmVsKERhdGFDaGFubmVsIGRhdGFD
aGFubmVsKSB7Ci0gICAgICBhc3NlcnROdWxsKHRoaXMuZGF0YUNoYW5uZWwpOwotICAgICAgdGhp
cy5kYXRhQ2hhbm5lbCA9IGRhdGFDaGFubmVsOwotICAgICAgdGhpcy5kYXRhQ2hhbm5lbC5yZWdp
c3Rlck9ic2VydmVyKHRoaXMpOwotICAgICAgYXNzZXJ0Tm90TnVsbCh0aGlzLmRhdGFDaGFubmVs
KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0SWNlQ2FuZGlk
YXRlcyhpbnQgY291bnQpIHsKLSAgICAgIGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyArPSBjb3VudDsK
LSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25J
Y2VDYW5kaWRhdGUoSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgICAgLS1leHBlY3RlZElj
ZUNhbmRpZGF0ZXM7Ci0KLSAgICAgIC8vIFdlIGRvbid0IGFzc2VydCBleHBlY3RlZEljZUNhbmRp
ZGF0ZXMgPj0gMCBiZWNhdXNlIGl0J3MgaGFyZCB0byBrbm93Ci0gICAgICAvLyBob3cgbWFueSB0
byBleHBlY3QsIGluIGdlbmVyYWwuICBXZSBvbmx5IHVzZSBleHBlY3RJY2VDYW5kaWRhdGVzIHRv
Ci0gICAgICAvLyBhc3NlcnQgYSBtaW5pbWFsIGNvdW50LgotICAgICAgc3luY2hyb25pemVkIChn
b3RJY2VDYW5kaWRhdGVzKSB7Ci0gICAgICAgIGdvdEljZUNhbmRpZGF0ZXMuYWRkKGNhbmRpZGF0
ZSk7Ci0gICAgICAgIGdvdEljZUNhbmRpZGF0ZXMubm90aWZ5QWxsKCk7Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGVzUmVtb3Zl
ZChJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7fQotCi0gICAgcHVibGljIHN5bmNocm9uaXpl
ZCB2b2lkIHNldEV4cGVjdGVkUmVzb2x1dGlvbihpbnQgd2lkdGgsIGludCBoZWlnaHQpIHsKLSAg
ICAgIGV4cGVjdGVkV2lkdGggPSB3aWR0aDsKLSAgICAgIGV4cGVjdGVkSGVpZ2h0ID0gaGVpZ2h0
OwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBlY3RGcmFtZXNEZWxp
dmVyZWQoaW50IGNvdW50KSB7Ci0gICAgICBleHBlY3RlZEZyYW1lc0RlbGl2ZXJlZCArPSBjb3Vu
dDsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
cmVuZGVyRnJhbWUoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIGFzc2Vy
dFRydWUoZXhwZWN0ZWRXaWR0aCA+IDApOwotICAgICAgYXNzZXJ0VHJ1ZShleHBlY3RlZEhlaWdo
dCA+IDApOwotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkV2lkdGgsIGZyYW1lLnJvdGF0ZWRX
aWR0aCgpKTsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEhlaWdodCwgZnJhbWUucm90YXRl
ZEhlaWdodCgpKTsKLSAgICAgIC0tZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQ7Ci0gICAgICBWaWRl
b1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5
bmNocm9uaXplZCB2b2lkIGV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdTdGF0ZSBuZXdT
dGF0ZSkgewotICAgICAgZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2VzLmFkZChuZXdTdGF0ZSk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uU2ln
bmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBhc3NlcnRFcXVh
bHMoZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2VzLnJlbW92ZUZpcnN0KCksIG5ld1N0YXRlKTsKLSAg
ICB9Ci0KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgZXhwZWN0SWNlQ29ubmVjdGlvbkNo
YW5nZShJY2VDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIGV4cGVjdGVkSWNlQ29u
bmVjdGlvbkNoYW5nZXMuYWRkKG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25JY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5l
Y3Rpb25TdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgLy8gVE9ETyhiZW1hc2MpOiByZW1vdmUgb25j
ZSBkZWxpdmVyeSBvZiBJQ0VDb21wbGV0ZWQgaXMgcmVsaWFibGUKLSAgICAgIC8vIChodHRwczov
L2NvZGUuZ29vZ2xlLmNvbS9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTMwMjEpLgotICAgICAg
aWYgKG5ld1N0YXRlLmVxdWFscyhJY2VDb25uZWN0aW9uU3RhdGUuQ09NUExFVEVEKSkgewotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIGlmIChleHBlY3RlZEljZUNvbm5lY3Rpb25D
aGFuZ2VzLmlzRW1wdHkoKSkgewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICJH
b3QgYW4gdW5leHBlY3RlZCBpY2UgY29ubmVjdGlvbiBjaGFuZ2UgIiArIG5ld1N0YXRlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRJY2VD
b25uZWN0aW9uQ2hhbmdlcy5yZW1vdmVGaXJzdCgpLCBuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uSWNlQ29ubmVjdGlvblJl
Y2VpdmluZ0NoYW5nZShib29sZWFuIHJlY2VpdmluZykgewotICAgICAgU3lzdGVtLm91dC5wcmlu
dGxuKG5hbWUgKyAiR290IGFuIGljZSBjb25uZWN0aW9uIHJlY2VpdmluZyBjaGFuZ2UgIiArIHJl
Y2VpdmluZyk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdElj
ZUdhdGhlcmluZ0NoYW5nZShJY2VHYXRoZXJpbmdTdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgZXhw
ZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzLmFkZChuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uSWNlR2F0aGVyaW5nQ2hhbmdl
KEljZUdhdGhlcmluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICAvLyBJdCdzIGZpbmUgdG8gZ2V0
IGEgdmFyaWFibGUgbnVtYmVyIG9mIEdBVEhFUklORyBtZXNzYWdlcyBiZWZvcmUKLSAgICAgIC8v
IENPTVBMRVRFIGZpcmVzIChkZXBlbmRpbmcgb24gaG93IGxvbmcgdGhlIHRlc3QgcnVucykgc28g
d2UgZG9uJ3QgYXNzZXJ0Ci0gICAgICAvLyBhbnkgcGFydGljdWxhciBjb3VudC4KLSAgICAgIGlm
IChuZXdTdGF0ZSA9PSBJY2VHYXRoZXJpbmdTdGF0ZS5HQVRIRVJJTkcpIHsKLSAgICAgICAgcmV0
dXJuOwotICAgICAgfQotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkSWNlR2F0aGVyaW5nQ2hh
bmdlcy5yZW1vdmVGaXJzdCgpLCBuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNo
cm9uaXplZCB2b2lkIGV4cGVjdEFkZFN0cmVhbShTdHJpbmcgbGFiZWwpIHsKLSAgICAgIGV4cGVj
dGVkQWRkU3RyZWFtTGFiZWxzLmFkZChsYWJlbCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uQWRkU3RyZWFtKE1lZGlhU3RyZWFtIHN0cmVh
bSkgewotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkQWRkU3RyZWFtTGFiZWxzLnJlbW92ZUZp
cnN0KCksIHN0cmVhbS5sYWJlbCgpKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzdHJlYW0udmlk
ZW9UcmFja3Muc2l6ZSgpKTsKLSAgICAgIGFzc2VydEVxdWFscygxLCBzdHJlYW0uYXVkaW9UcmFj
a3Muc2l6ZSgpKTsKLSAgICAgIGFzc2VydFRydWUoc3RyZWFtLnZpZGVvVHJhY2tzLmdldCgwKS5p
ZCgpLmVuZHNXaXRoKCJWaWRlb1RyYWNrIikpOwotICAgICAgYXNzZXJ0VHJ1ZShzdHJlYW0uYXVk
aW9UcmFja3MuZ2V0KDApLmlkKCkuZW5kc1dpdGgoIkF1ZGlvVHJhY2siKSk7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoInZpZGVvIiwgc3RyZWFtLnZpZGVvVHJhY2tzLmdldCgwKS5raW5kKCkpOwotICAg
ICAgYXNzZXJ0RXF1YWxzKCJhdWRpbyIsIHN0cmVhbS5hdWRpb1RyYWNrcy5nZXQoMCkua2luZCgp
KTsKLSAgICAgIFZpZGVvUmVuZGVyZXIgcmVuZGVyZXIgPSBjcmVhdGVWaWRlb1JlbmRlcmVyKHRo
aXMpOwotICAgICAgc3RyZWFtLnZpZGVvVHJhY2tzLmdldCgwKS5hZGRSZW5kZXJlcihyZW5kZXJl
cik7Ci0gICAgICBhc3NlcnROdWxsKHJlbmRlcmVycy5wdXQoc3RyZWFtLCBuZXcgV2Vha1JlZmVy
ZW5jZTxWaWRlb1JlbmRlcmVyPihyZW5kZXJlcikpKTsKLSAgICAgIGdvdFJlbW90ZVN0cmVhbXMu
YWRkKHN0cmVhbSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVj
dFJlbW92ZVN0cmVhbShTdHJpbmcgbGFiZWwpIHsKLSAgICAgIGV4cGVjdGVkUmVtb3ZlU3RyZWFt
TGFiZWxzLmFkZChsYWJlbCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5
bmNocm9uaXplZCB2b2lkIG9uUmVtb3ZlU3RyZWFtKE1lZGlhU3RyZWFtIHN0cmVhbSkgewotICAg
ICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFiZWxzLnJlbW92ZUZpcnN0KCks
IHN0cmVhbS5sYWJlbCgpKTsKLSAgICAgIFdlYWtSZWZlcmVuY2U8VmlkZW9SZW5kZXJlcj4gcmVu
ZGVyZXIgPSByZW5kZXJlcnMucmVtb3ZlKHN0cmVhbSk7Ci0gICAgICBhc3NlcnROb3ROdWxsKHJl
bmRlcmVyKTsKLSAgICAgIGFzc2VydE5vdE51bGwocmVuZGVyZXIuZ2V0KCkpOwotICAgICAgYXNz
ZXJ0RXF1YWxzKDEsIHN0cmVhbS52aWRlb1RyYWNrcy5zaXplKCkpOwotICAgICAgc3RyZWFtLnZp
ZGVvVHJhY2tzLmdldCgwKS5yZW1vdmVSZW5kZXJlcihyZW5kZXJlci5nZXQoKSk7Ci0gICAgICBn
b3RSZW1vdGVTdHJlYW1zLnJlbW92ZShzdHJlYW0pOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5j
aHJvbml6ZWQgdm9pZCBleHBlY3REYXRhQ2hhbm5lbChTdHJpbmcgbGFiZWwpIHsKLSAgICAgIGV4
cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMuYWRkKGxhYmVsKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25EYXRhQ2hhbm5lbChEYXRh
Q2hhbm5lbCByZW1vdGVEYXRhQ2hhbm5lbCkgewotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVk
UmVtb3RlRGF0YUNoYW5uZWxMYWJlbHMucmVtb3ZlRmlyc3QoKSwgcmVtb3RlRGF0YUNoYW5uZWwu
bGFiZWwoKSk7Ci0gICAgICBzZXREYXRhQ2hhbm5lbChyZW1vdGVEYXRhQ2hhbm5lbCk7Ci0gICAg
ICBhc3NlcnRFcXVhbHMoRGF0YUNoYW5uZWwuU3RhdGUuQ09OTkVDVElORywgZGF0YUNoYW5uZWwu
c3RhdGUoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdFJl
bmVnb3RpYXRpb25OZWVkZWQoKSB7Ci0gICAgICArK2V4cGVjdGVkUmVuZWdvdGlhdGlvbnM7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uUmVu
ZWdvdGlhdGlvbk5lZWRlZCgpIHsKLSAgICAgIGFzc2VydFRydWUoLS1leHBlY3RlZFJlbmVnb3Rp
YXRpb25zID49IDApOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBleHBl
Y3RNZXNzYWdlKEJ5dGVCdWZmZXIgZXhwZWN0ZWRCdWZmZXIsIGJvb2xlYW4gZXhwZWN0ZWRCaW5h
cnkpIHsKLSAgICAgIGV4cGVjdGVkQnVmZmVycy5hZGQobmV3IERhdGFDaGFubmVsLkJ1ZmZlcihl
eHBlY3RlZEJ1ZmZlciwgZXhwZWN0ZWRCaW5hcnkpKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25NZXNzYWdlKERhdGFDaGFubmVsLkJ1ZmZl
ciBidWZmZXIpIHsKLSAgICAgIERhdGFDaGFubmVsLkJ1ZmZlciBleHBlY3RlZCA9IGV4cGVjdGVk
QnVmZmVycy5yZW1vdmVGaXJzdCgpOwotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmJpbmFy
eSwgYnVmZmVyLmJpbmFyeSk7Ci0gICAgICBhc3NlcnRUcnVlKGV4cGVjdGVkLmRhdGEuZXF1YWxz
KGJ1ZmZlci5kYXRhKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNo
cm9uaXplZCB2b2lkIG9uQnVmZmVyZWRBbW91bnRDaGFuZ2UobG9uZyBwcmV2aW91c0Ftb3VudCkg
ewotICAgICAgYXNzZXJ0RmFsc2UocHJldmlvdXNBbW91bnQgPT0gZGF0YUNoYW5uZWwuYnVmZmVy
ZWRBbW91bnQoKSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9u
aXplZCB2b2lkIG9uU3RhdGVDaGFuZ2UoKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRT
dGF0ZUNoYW5nZXMucmVtb3ZlRmlyc3QoKSwgZGF0YUNoYW5uZWwuc3RhdGUoKSk7Ci0gICAgfQot
Ci0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFu
bmVsLlN0YXRlIHN0YXRlKSB7Ci0gICAgICBleHBlY3RlZFN0YXRlQ2hhbmdlcy5hZGQoc3RhdGUp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBv
bkNvbXBsZXRlKFN0YXRzUmVwb3J0W10gcmVwb3J0cykgewotICAgICAgaWYgKC0tZXhwZWN0ZWRT
dGF0c0NhbGxiYWNrcyA8IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24o
IlVuZXhwZWN0ZWQgc3RhdHMgcmVwb3J0OiAiICsgcmVwb3J0cyk7Ci0gICAgICB9Ci0gICAgICBn
b3RTdGF0c1JlcG9ydHMuYWRkKHJlcG9ydHMpOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJv
bml6ZWQgdm9pZCBleHBlY3RTdGF0c0NhbGxiYWNrKCkgewotICAgICAgKytleHBlY3RlZFN0YXRz
Q2FsbGJhY2tzOwotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgTGlua2VkTGlzdDxT
dGF0c1JlcG9ydFtdPiB0YWtlU3RhdHNSZXBvcnRzKCkgewotICAgICAgTGlua2VkTGlzdDxTdGF0
c1JlcG9ydFtdPiBnb3QgPSBnb3RTdGF0c1JlcG9ydHM7Ci0gICAgICBnb3RTdGF0c1JlcG9ydHMg
PSBuZXcgTGlua2VkTGlzdDxTdGF0c1JlcG9ydFtdPigpOwotICAgICAgcmV0dXJuIGdvdDsKLSAg
ICB9Ci0KLSAgICAvLyBSZXR1cm4gYSBzZXQgb2YgZXhwZWN0YXRpb25zIHRoYXQgaGF2ZW4ndCBi
ZWVuIHNhdGlzZmllZCB5ZXQsIHBvc3NpYmx5Ci0gICAgLy8gZW1wdHkgaWYgbm8gc3VjaCBleHBl
Y3RhdGlvbnMgZXhpc3QuCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBUcmVlU2V0PFN0cmluZz4g
dW5zYXRpc2ZpZWRFeHBlY3RhdGlvbnMoKSB7Ci0gICAgICBUcmVlU2V0PFN0cmluZz4gc3RpbGxX
YWl0aW5nRm9yRXhwZWN0YXRpb25zID0gbmV3IFRyZWVTZXQ8U3RyaW5nPigpOwotICAgICAgaWYg
KGV4cGVjdGVkSWNlQ2FuZGlkYXRlcyA+IDApIHsgLy8gU2VlIGNvbW1lbnQgaW4gb25JY2VDYW5k
aWRhdGUuCi0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVk
SWNlQ2FuZGlkYXRlcyIpOwotICAgICAgfQotICAgICAgaWYgKGV4cGVjdGVkRXJyb3JzICE9IDAp
IHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRFcnJv
cnM6ICIgKyBleHBlY3RlZEVycm9ycyk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRTaWdu
YWxpbmdDaGFuZ2VzLnNpemUoKSAhPSAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVj
dGF0aW9ucy5hZGQoCi0gICAgICAgICAgICAiZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2VzOiAiICsg
ZXhwZWN0ZWRTaWduYWxpbmdDaGFuZ2VzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhw
ZWN0ZWRJY2VDb25uZWN0aW9uQ2hhbmdlcy5zaXplKCkgIT0gMCkgewotICAgICAgICBzdGlsbFdh
aXRpbmdGb3JFeHBlY3RhdGlvbnMuYWRkKAotICAgICAgICAgICAgImV4cGVjdGVkSWNlQ29ubmVj
dGlvbkNoYW5nZXM6ICIgKyBleHBlY3RlZEljZUNvbm5lY3Rpb25DaGFuZ2VzLnNpemUoKSk7Ci0g
ICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzLnNpemUoKSAhPSAw
KSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoCi0gICAgICAgICAg
ICAiZXhwZWN0ZWRJY2VHYXRoZXJpbmdDaGFuZ2VzOiAiICsgZXhwZWN0ZWRJY2VHYXRoZXJpbmdD
aGFuZ2VzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRBZGRTdHJlYW1MYWJl
bHMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmFk
ZCgKLSAgICAgICAgICAgICJleHBlY3RlZEFkZFN0cmVhbUxhYmVsczogIiArIGV4cGVjdGVkQWRk
U3RyZWFtTGFiZWxzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAoZXhwZWN0ZWRSZW1vdmVT
dHJlYW1MYWJlbHMuc2l6ZSgpICE9IDApIHsKLSAgICAgICAgc3RpbGxXYWl0aW5nRm9yRXhwZWN0
YXRpb25zLmFkZCgKLSAgICAgICAgICAgICJleHBlY3RlZFJlbW92ZVN0cmVhbUxhYmVsczogIiAr
IGV4cGVjdGVkUmVtb3ZlU3RyZWFtTGFiZWxzLnNpemUoKSk7Ci0gICAgICB9Ci0gICAgICBpZiAo
ZXhwZWN0ZWRGcmFtZXNEZWxpdmVyZWQgPiAwKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4
cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVkRnJhbWVzRGVsaXZlcmVkOiAiICsgZXhwZWN0ZWRGcmFt
ZXNEZWxpdmVyZWQpOwotICAgICAgfQotICAgICAgaWYgKCFleHBlY3RlZEJ1ZmZlcnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVk
QnVmZmVyczogIiArIGV4cGVjdGVkQnVmZmVycy5zaXplKCkpOwotICAgICAgfQotICAgICAgaWYg
KCFleHBlY3RlZFN0YXRlQ2hhbmdlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3RpbGxXYWl0aW5n
Rm9yRXhwZWN0YXRpb25zLmFkZCgiZXhwZWN0ZWRTdGF0ZUNoYW5nZXM6ICIgKyBleHBlY3RlZFN0
YXRlQ2hhbmdlcy5zaXplKCkpOwotICAgICAgfQotICAgICAgaWYgKCFleHBlY3RlZFJlbW90ZURh
dGFDaGFubmVsTGFiZWxzLmlzRW1wdHkoKSkgewotICAgICAgICBzdGlsbFdhaXRpbmdGb3JFeHBl
Y3RhdGlvbnMuYWRkKAotICAgICAgICAgICAgImV4cGVjdGVkUmVtb3RlRGF0YUNoYW5uZWxMYWJl
bHM6ICIgKyBleHBlY3RlZFJlbW90ZURhdGFDaGFubmVsTGFiZWxzLnNpemUoKSk7Ci0gICAgICB9
Ci0gICAgICBpZiAoZXhwZWN0ZWRTdGF0c0NhbGxiYWNrcyAhPSAwKSB7Ci0gICAgICAgIHN0aWxs
V2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5hZGQoImV4cGVjdGVkU3RhdHNDYWxsYmFja3M6ICIgKyBl
eHBlY3RlZFN0YXRzQ2FsbGJhY2tzKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBzdGlsbFdhaXRp
bmdGb3JFeHBlY3RhdGlvbnM7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvckFs
bEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoaW50IHRpbWVvdXRTZWNvbmRzKSB7Ci0gICAgICAv
LyBUT0RPKGZpc2NobWFuKTogcHJvYmxlbXMgd2l0aCB0aGlzIGFwcHJvYWNoOgotICAgICAgLy8g
LSBjb21lIHVwIHdpdGggc29tZXRoaW5nIGJldHRlciB0aGFuIGEgcG9sbCBsb29wCi0gICAgICAv
LyAtIGF2b2lkIHNlcmlhbGl6aW5nIGV4cGVjdGF0aW9ucyBleHBsaWNpdGx5OyB0aGUgdGVzdCBp
cyBub3QgYXMgcm9idXN0Ci0gICAgICAvLyAgIGFzIGl0IGNvdWxkIGJlIGJlY2F1c2UgaXQgbXVz
dCBwbGFjZSBleHBlY3RhdGlvbnMgYmV0d2VlbiB3YWl0Ci0gICAgICAvLyAgIHN0YXRlbWVudHMg
dmVyeSBwcmVjaXNlbHkgKGUuZy4gZnJhbWUgbXVzdCBub3QgYXJyaXZlIGJlZm9yZSBpdHMKLSAg
ICAgIC8vICAgZXhwZWN0YXRpb24sIGFuZCBleHBlY3RhdGlvbiBtdXN0IG5vdCBiZSByZWdpc3Rl
cmVkIHNvIGVhcmx5IGFzIHRvCi0gICAgICAvLyAgIHN0YWxsIGEgd2FpdCkuICBVc2UgY2FsbGJh
Y2tzIHRvIGZpcmUgb2ZmIGRlcGVuZGVudCBzdGVwcyBpbnN0ZWFkIG9mCi0gICAgICAvLyAgIGV4
cGxpY2l0bHkgd2FpdGluZywgc28gdGhlcmUgY2FuIGJlIGp1c3QgYSBzaW5nbGUgd2FpdCBhdCB0
aGUgZW5kIG9mCi0gICAgICAvLyAgIHRoZSB0ZXN0LgotICAgICAgbG9uZyBlbmRUaW1lID0gU3lz
dGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgKyAxMDAwICogdGltZW91dFNlY29uZHM7Ci0gICAgICBU
cmVlU2V0PFN0cmluZz4gcHJldiA9IG51bGw7Ci0gICAgICBUcmVlU2V0PFN0cmluZz4gc3RpbGxX
YWl0aW5nRm9yRXhwZWN0YXRpb25zID0gdW5zYXRpc2ZpZWRFeHBlY3RhdGlvbnMoKTsKLSAgICAg
IHdoaWxlICghc3RpbGxXYWl0aW5nRm9yRXhwZWN0YXRpb25zLmlzRW1wdHkoKSkgewotICAgICAg
ICBpZiAoIXN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9ucy5lcXVhbHMocHJldikpIHsKLSAgICAg
ICAgICBTeXN0ZW0ub3V0LnByaW50bG4obmFtZSArICIgc3RpbGwgd2FpdGluZyBhdFxuICAgICIg
KyAobmV3IFRocm93YWJsZSgpKS5nZXRTdGFja1RyYWNlKClbMV0KLSAgICAgICAgICAgICAgKyAi
XG4gICAgZm9yOiAiICsgQXJyYXlzLnRvU3RyaW5nKHN0aWxsV2FpdGluZ0ZvckV4cGVjdGF0aW9u
cy50b0FycmF5KCkpKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5kVGltZSA8IFN5c3RlbS5j
dXJyZW50VGltZU1pbGxpcygpKSB7Ci0gICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKG5hbWUg
KyAiIHRpbWVkIG91dCB3YWl0aW5nIGZvcjogIgotICAgICAgICAgICAgICArIEFycmF5cy50b1N0
cmluZyhzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnMudG9BcnJheSgpKSk7Ci0gICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgVGhyZWFk
LnNsZWVwKDEwKTsKLSAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewot
ICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAg
ICAgIHByZXYgPSBzdGlsbFdhaXRpbmdGb3JFeHBlY3RhdGlvbnM7Ci0gICAgICAgIHN0aWxsV2Fp
dGluZ0ZvckV4cGVjdGF0aW9ucyA9IHVuc2F0aXNmaWVkRXhwZWN0YXRpb25zKCk7Ci0gICAgICB9
Ci0gICAgICBpZiAocHJldiA9PSBudWxsKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigK
LSAgICAgICAgICAgIG5hbWUgKyAiIGRpZG4ndCBuZWVkIHRvIHdhaXQgYXRcbiAgICAiICsgKG5l
dyBUaHJvd2FibGUoKSkuZ2V0U3RhY2tUcmFjZSgpWzFdKTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIC8vIFRoaXMgbWV0aG9kcyByZXR1cm4gYSBsaXN0IG9mIGFs
bCBjdXJyZW50bHkgZ2F0aGVyZWQgaWNlIGNhbmRpZGF0ZXMgb3Igd2FpdHMgdW50aWwKLSAgICAv
LyAxIGNhbmRpZGF0ZSBoYXZlIGJlZW4gZ2F0aGVyZWQuCi0gICAgcHVibGljIExpc3Q8SWNlQ2Fu
ZGlkYXRlPiBnZXRBdExlYXN0T25lSWNlQ2FuZGlkYXRlKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICAgIHN5bmNocm9uaXplZCAoZ290SWNlQ2FuZGlkYXRlcykgewotICAgICAg
ICB3aGlsZSAoZ290SWNlQ2FuZGlkYXRlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICBnb3RJY2VD
YW5kaWRhdGVzLndhaXQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbmV3IExpbmtlZExp
c3Q8SWNlQ2FuZGlkYXRlPihnb3RJY2VDYW5kaWRhdGVzKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0K
LQotICAvLyBTZXRzIHRoZSBleHBlY3RlZCByZXNvbHV0aW9uIGZvciBhbiBPYnNlcnZlckV4cGVj
dGF0aW9ucyBvbmNlIGEgZnJhbWUKLSAgLy8gaGFzIGJlZW4gY2FwdHVyZWQuCi0gIHByaXZhdGUg
c3RhdGljIGNsYXNzIEV4cGVjdGVkUmVzb2x1dGlvblNldHRlciBpbXBsZW1lbnRzIFZpZGVvUmVu
ZGVyZXIuQ2FsbGJhY2tzIHsKLSAgICBwcml2YXRlIE9ic2VydmVyRXhwZWN0YXRpb25zIG9ic2Vy
dmVyOwotCi0gICAgcHVibGljIEV4cGVjdGVkUmVzb2x1dGlvblNldHRlcihPYnNlcnZlckV4cGVj
dGF0aW9ucyBvYnNlcnZlcikgewotICAgICAgdGhpcy5vYnNlcnZlciA9IG9ic2VydmVyOwotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW5kZXJG
cmFtZShWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgICAgLy8gQmVjYXVzZSBk
aWZmZXJlbnQgY2FtZXJhIGRldmljZXMgKGZha2UgJiBwaHlzaWNhbCkgcHJvZHVjZSBkaWZmZXJl
bnQKLSAgICAgIC8vIHJlc29sdXRpb25zLCB3ZSBvbmx5IHNhbml0eS1jaGVjayB0aGUgc2V0IHNp
emVzLAotICAgICAgYXNzZXJ0VHJ1ZShmcmFtZS5yb3RhdGVkV2lkdGgoKSA+IDApOwotICAgICAg
YXNzZXJ0VHJ1ZShmcmFtZS5yb3RhdGVkSGVpZ2h0KCkgPiAwKTsKLSAgICAgIG9ic2VydmVyLnNl
dEV4cGVjdGVkUmVzb2x1dGlvbihmcmFtZS5yb3RhdGVkV2lkdGgoKSwgZnJhbWUucm90YXRlZEhl
aWdodCgpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBTZHBPYnNlcnZl
ckxhdGNoIGltcGxlbWVudHMgU2RwT2JzZXJ2ZXIgewotICAgIHByaXZhdGUgYm9vbGVhbiBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgcHJpdmF0ZSBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbnVsbDsK
LSAgICBwcml2YXRlIFN0cmluZyBlcnJvciA9IG51bGw7Ci0gICAgcHJpdmF0ZSBDb3VudERvd25M
YXRjaCBsYXRjaCA9IG5ldyBDb3VudERvd25MYXRjaCgxKTsKLQotICAgIHB1YmxpYyBTZHBPYnNl
cnZlckxhdGNoKCkge30KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRl
U3VjY2VzcyhTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgICB0aGlzLnNkcCA9IHNkcDsK
LSAgICAgIG9uU2V0U3VjY2VzcygpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uU2V0U3VjY2VzcygpIHsKLSAgICAgIHN1Y2Nlc3MgPSB0cnVlOwotICAgICAgbGF0
Y2guY291bnREb3duKCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25DcmVhdGVGYWlsdXJlKFN0cmluZyBlcnJvcikgewotICAgICAgb25TZXRGYWlsdXJlKGVycm9y
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblNldEZhaWx1cmUo
U3RyaW5nIGVycm9yKSB7Ci0gICAgICB0aGlzLmVycm9yID0gZXJyb3I7Ci0gICAgICBsYXRjaC5j
b3VudERvd24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBhd2FpdCgpIHsKLSAgICAg
IHRyeSB7Ci0gICAgICAgIGFzc2VydFRydWUobGF0Y2guYXdhaXQoMTAwMCwgVGltZVVuaXQuTUlM
TElTRUNPTkRTKSk7Ci0gICAgICAgIHJldHVybiBnZXRTdWNjZXNzKCk7Ci0gICAgICB9IGNhdGNo
IChFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBnZXRTdWNjZXNzKCkgewotICAg
ICAgcmV0dXJuIHN1Y2Nlc3M7Ci0gICAgfQotCi0gICAgcHVibGljIFNlc3Npb25EZXNjcmlwdGlv
biBnZXRTZHAoKSB7Ci0gICAgICByZXR1cm4gc2RwOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJp
bmcgZ2V0RXJyb3IoKSB7Ci0gICAgICByZXR1cm4gZXJyb3I7Ci0gICAgfQotICB9Ci0KLSAgc3Rh
dGljIGludCB2aWRlb1dpbmRvd3NNYXBwZWQgPSAtMTsKLQotICBwcml2YXRlIHN0YXRpYyBWaWRl
b1JlbmRlcmVyIGNyZWF0ZVZpZGVvUmVuZGVyZXIoVmlkZW9SZW5kZXJlci5DYWxsYmFja3Mgdmlk
ZW9DYWxsYmFja3MpIHsKLSAgICByZXR1cm4gbmV3IFZpZGVvUmVuZGVyZXIodmlkZW9DYWxsYmFj
a3MpOwotICB9Ci0KLSAgLy8gUmV0dXJuIGEgd2VhayByZWZlcmVuY2UgdG8gdGVzdCB0aGF0IG93
bmVyc2hpcCBpcyBjb3JyZWN0bHkgaGVsZCBieQotICAvLyBQZWVyQ29ubmVjdGlvbiwgbm90IGJ5
IHRlc3QgY29kZS4KLSAgcHJpdmF0ZSBzdGF0aWMgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVhbT4g
YWRkVHJhY2tzVG9QQyhQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeSwKLSAgICAgIFBlZXJD
b25uZWN0aW9uIHBjLCBWaWRlb1NvdXJjZSB2aWRlb1NvdXJjZSwgU3RyaW5nIHN0cmVhbUxhYmVs
LCBTdHJpbmcgdmlkZW9UcmFja0lkLAotICAgICAgU3RyaW5nIGF1ZGlvVHJhY2tJZCwgVmlkZW9S
ZW5kZXJlci5DYWxsYmFja3MgdmlkZW9DYWxsYmFja3MpIHsKLSAgICBNZWRpYVN0cmVhbSBsTVMg
PSBmYWN0b3J5LmNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0oc3RyZWFtTGFiZWwpOwotICAgIFZpZGVv
VHJhY2sgdmlkZW9UcmFjayA9IGZhY3RvcnkuY3JlYXRlVmlkZW9UcmFjayh2aWRlb1RyYWNrSWQs
IHZpZGVvU291cmNlKTsKLSAgICBhc3NlcnROb3ROdWxsKHZpZGVvVHJhY2spOwotICAgIFZpZGVv
UmVuZGVyZXIgdmlkZW9SZW5kZXJlciA9IGNyZWF0ZVZpZGVvUmVuZGVyZXIodmlkZW9DYWxsYmFj
a3MpOwotICAgIGFzc2VydE5vdE51bGwodmlkZW9SZW5kZXJlcik7Ci0gICAgdmlkZW9UcmFjay5h
ZGRSZW5kZXJlcih2aWRlb1JlbmRlcmVyKTsKLSAgICBsTVMuYWRkVHJhY2sodmlkZW9UcmFjayk7
Ci0gICAgLy8gSnVzdCBmb3IgZnVuLCBsZXQncyByZW1vdmUgYW5kIHJlLWFkZCB0aGUgdHJhY2su
Ci0gICAgbE1TLnJlbW92ZVRyYWNrKHZpZGVvVHJhY2spOwotICAgIGxNUy5hZGRUcmFjayh2aWRl
b1RyYWNrKTsKLSAgICBsTVMuYWRkVHJhY2soCi0gICAgICAgIGZhY3RvcnkuY3JlYXRlQXVkaW9U
cmFjayhhdWRpb1RyYWNrSWQsIGZhY3RvcnkuY3JlYXRlQXVkaW9Tb3VyY2UobmV3IE1lZGlhQ29u
c3RyYWludHMoKSkpKTsKLSAgICBwYy5hZGRTdHJlYW0obE1TKTsKLSAgICByZXR1cm4gbmV3IFdl
YWtSZWZlcmVuY2U8TWVkaWFTdHJlYW0+KGxNUyk7Ci0gIH0KLQotICAvLyBVc2VkIGZvciBtYWtp
bmcgc3VyZSB0aHJlYWQgaGFuZGxlcyBhcmUgbm90IGxlYWtlZC4KLSAgLy8gQ2FsbCBpbml0aWFs
aXplVGhyZWFkQ2hlY2sgYmVmb3JlIGEgdGVzdCBhbmQgZmluYWxpemVUaHJlYWRDaGVjayBhZnRl
cgotICAvLyBhIHRlc3QuCi0gIHZvaWQgaW5pdGlhbGl6ZVRocmVhZENoZWNrKCkgewotICAgIFN5
c3RlbS5nYygpOyAvLyBFbmNvdXJhZ2UgYW55IEdDLXJlbGF0ZWQgdGhyZWFkcyB0byBzdGFydCB1
cC4KLSAgICB0aHJlYWRzQmVmb3JlVGVzdCA9IGFsbFRocmVhZHMoKTsKLSAgfQotCi0gIHZvaWQg
ZmluYWxpemVUaHJlYWRDaGVjaygpIHRocm93cyBFeGNlcHRpb24gewotICAgIC8vIFRyZWVTZXQ8
U3RyaW5nPiB0aHJlYWRzQWZ0ZXJUZXN0ID0gYWxsVGhyZWFkcygpOwotCi0gICAgLy8gVE9ETyh0
b21taSk6IEZpZ3VyZSBvdXQgYSBtb3JlIHJlbGlhYmxlIHdheSB0byBkbyB0aGlzIHRlc3QuICBB
cyBpcwotICAgIC8vIHdlJ3JlIHNlZWluZyB0aHJlZSBwb3NzaWJsZSAnbm9ybWFsJyBzaXR1YXRp
b25zOgotICAgIC8vIDEuICBiZWZvcmUgYW5kIGFmdGVyIHNldHMgYXJlIGVxdWFsLgotICAgIC8v
IDIuICBiZWZvcmUgY29udGFpbnMgMyB0aHJlYWRzIHRoYXQgZG8gbm90IGV4aXN0IGluIGFmdGVy
LgotICAgIC8vIDMuICBhZnRlciBjb250YWlucyAzIHRocmVhZHMgdGhhdCBkbyBub3QgZXhpc3Qg
aW4gYmVmb3JlLgotICAgIC8vCi0gICAgLy8gTWF5YmUgaXQgd291bGQgYmUgYmV0dGVyIHRvIGRv
IHRoZSB0aHJlYWQgZW51bWVyYXRpb24gZnJvbSBDKysgYW5kIGdldAotICAgIC8vIHRoZSB0aHJl
YWQgbmFtZXMgYXMgd2VsbCwgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlc2UgMyB0aHJl
YWRzIGFyZS4KLQotICAgIC8vIGFzc2VydEVxdWFscyh0aHJlYWRzQmVmb3JlVGVzdCwgdGhyZWFk
c0FmdGVyVGVzdCk7Ci0gICAgLy8gVGhyZWFkLnNsZWVwKDEwMCk7Ci0gIH0KLQotICAvLyBUT0RP
KGZpc2NobWFuKSBNT0FSIHRlc3QgaWRlYXM6Ci0gIC8vIC0gVGVzdCB0aGF0IFBDLnJlbW92ZVN0
cmVhbSgpIHdvcmtzOyByZXF1aXJlcyBhIHNlY29uZAotICAvLyAgIGNyZWF0ZU9mZmVyL2NyZWF0
ZUFuc3dlciBkYW5jZS4KLSAgLy8gLSBhdWRpdCBlYWNoIHBsYWNlIHRoYXQgdXNlcyB8Y29uc3Ry
YWludHN8IGZvciBzcGVjaWZ5aW5nIG5vbi10cml2aWFsCi0gIC8vICAgY29uc3RyYWludHMgKGFu
ZCBlbnN1cmUgdGhleSdyZSBob25vcmVkKS4KLSAgLy8gLSB0ZXN0IGVycm9yIGNhc2VzCi0gIC8v
IC0gZW5zdXJlIHJlYXNvbmFibGUgY292ZXJhZ2Ugb2YgX2puaS5jYyBpcyBhY2hpZXZlZC4gIENv
dmVyYWdlIGlzCi0gIC8vICAgZXh0cmEtaW1wb3J0YW50IGJlY2F1c2Ugb2YgYWxsIHRoZSBmcmVl
LXRleHQgKGNsYXNzL21ldGhvZCBuYW1lcywgZXRjKQotICAvLyAgIGluIEpOSS1zdHlsZSBwcm9n
cmFtbWluZzsgbWFrZSBzdXJlIG5vIHR5cG9zIQotICAvLyAtIFRlc3QgdGhhdCBzaHV0ZG93biBt
aWQtaW50ZXJhY3Rpb24gaXMgY3Jhc2gtZnJlZS4KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0Q29tcGxldGVTZXNzaW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgTWV0cmlj
cy5lbmFibGUoKTsKLSAgICAvLyBBbGxvdyBsb29wYmFjayBpbnRlcmZhY2VzIHRvbyBzaW5jZSBv
dXIgQW5kcm9pZCBkZXZpY2VzIG9mdGVuIGRvbid0Ci0gICAgLy8gaGF2ZSB0aG9zZS4KLSAgICBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25uZWN0aW9u
RmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9IDA7Ci0g
ICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0
b3J5KG9wdGlvbnMpOwotICAgIC8vIFVuY29tbWVudCB0byBnZXQgQUxMIFdlYlJUQyB0cmFjaW5n
IGFuZCBTRU5TSVRJVkUgbGliamluZ2xlIGxvZ2dpbmcuCi0gICAgLy8gTk9URTogdGhpcyBfbXVz
dF8gaGFwcGVuIHdoaWxlIHxmYWN0b3J5fCBpcyBhbGl2ZSEKLSAgICAvLyBMb2dnaW5nLmVuYWJs
ZVRyYWNpbmcoCi0gICAgLy8gICAgICIvdG1wL1BlZXJDb25uZWN0aW9uVGVzdC1sb2cudHh0IiwK
LSAgICAvLyAgICAgRW51bVNldC5vZihMb2dnaW5nLlRyYWNlTGV2ZWwuVFJBQ0VfQUxMKSwKLSAg
ICAvLyAgICAgTG9nZ2luZy5TZXZlcml0eS5MU19TRU5TSVRJVkUpOwotCi0gICAgTWVkaWFDb25z
dHJhaW50cyBwY0NvbnN0cmFpbnRzID0gbmV3IE1lZGlhQ29uc3RyYWludHMoKTsKLSAgICBwY0Nv
bnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQobmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWly
KCJEdGxzU3J0cEtleUFncmVlbWVudCIsICJ0cnVlIikpOwotCi0gICAgTGlua2VkTGlzdDxQZWVy
Q29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29u
bmVjdGlvbi5JY2VTZXJ2ZXI+KCk7Ci0gICAgaWNlU2VydmVycy5hZGQobmV3IFBlZXJDb25uZWN0
aW9uLkljZVNlcnZlcigic3R1bjpzdHVuLmwuZ29vZ2xlLmNvbToxOTMwMiIpKTsKLSAgICBpY2VT
ZXJ2ZXJzLmFkZCgKLSAgICAgICAgbmV3IFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcigidHVybjpm
YWtlLmV4YW1wbGUuY29tIiwgImZha2VVc2VybmFtZSIsICJmYWtlUGFzc3dvcmQiKSk7Ci0gICAg
T2JzZXJ2ZXJFeHBlY3RhdGlvbnMgb2ZmZXJpbmdFeHBlY3RhdGlvbnMgPSBuZXcgT2JzZXJ2ZXJF
eHBlY3RhdGlvbnMoIlBDVGVzdDpvZmZlcmVyIik7Ci0gICAgUGVlckNvbm5lY3Rpb24gb2ZmZXJp
bmdQQyA9Ci0gICAgICAgIGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24oaWNlU2VydmVycywg
cGNDb25zdHJhaW50cywgb2ZmZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIGFzc2VydE5vdE51bGwo
b2ZmZXJpbmdQQyk7Ci0KLSAgICBPYnNlcnZlckV4cGVjdGF0aW9ucyBhbnN3ZXJpbmdFeHBlY3Rh
dGlvbnMgPSBuZXcgT2JzZXJ2ZXJFeHBlY3RhdGlvbnMoIlBDVGVzdDphbnN3ZXJlciIpOwotICAg
IFBlZXJDb25uZWN0aW9uIGFuc3dlcmluZ1BDID0KLSAgICAgICAgZmFjdG9yeS5jcmVhdGVQZWVy
Q29ubmVjdGlvbihpY2VTZXJ2ZXJzLCBwY0NvbnN0cmFpbnRzLCBhbnN3ZXJpbmdFeHBlY3RhdGlv
bnMpOwotICAgIGFzc2VydE5vdE51bGwoYW5zd2VyaW5nUEMpOwotCi0gICAgLy8gV2Ugd2FudCB0
byB1c2UgdGhlIHNhbWUgY2FtZXJhIGZvciBvZmZlcmVyICYgYW5zd2VyZXIsIHNvIGNyZWF0ZSBp
dCBoZXJlCi0gICAgLy8gaW5zdGVhZCBvZiBpbiBhZGRUcmFja3NUb1BDLgotICAgIGZpbmFsIENh
bWVyYUVudW1lcmF0b3IgZW51bWVyYXRvciA9IG5ldyBDYW1lcmExRW51bWVyYXRvcihmYWxzZSAv
KiBjYXB0dXJlVG9UZXh0dXJlICovKTsKLSAgICBmaW5hbCBWaWRlb0NhcHR1cmVyIHZpZGVvQ2Fw
dHVyZXIgPQotICAgICAgICBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGVudW1lcmF0b3IuZ2V0
RGV2aWNlTmFtZXMoKVswXSwgbnVsbCk7Ci0gICAgZmluYWwgVmlkZW9Tb3VyY2UgdmlkZW9Tb3Vy
Y2UgPSBmYWN0b3J5LmNyZWF0ZVZpZGVvU291cmNlKHZpZGVvQ2FwdHVyZXIpOwotICAgIHZpZGVv
Q2FwdHVyZXIuc3RhcnRDYXB0dXJlKDY0MCwgNDgwLCAzMCk7Ci0KLSAgICBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0gICAgV2Vha1JlZmVyZW5jZTxN
ZWRpYVN0cmVhbT4gb0xNUyA9Ci0gICAgICAgIGFkZFRyYWNrc1RvUEMoZmFjdG9yeSwgb2ZmZXJp
bmdQQywgdmlkZW9Tb3VyY2UsICJvZmZlcmVkTWVkaWFTdHJlYW0iLCAib2ZmZXJlZFZpZGVvVHJh
Y2siLAotICAgICAgICAgICAgIm9mZmVyZWRBdWRpb1RyYWNrIiwgbmV3IEV4cGVjdGVkUmVzb2x1
dGlvblNldHRlcihhbnN3ZXJpbmdFeHBlY3RhdGlvbnMpKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0
YXRpb25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBEYXRhQ2hhbm5lbCBvZmZl
cmluZ0RDID0gb2ZmZXJpbmdQQy5jcmVhdGVEYXRhQ2hhbm5lbCgib2ZmZXJpbmdEQyIsIG5ldyBE
YXRhQ2hhbm5lbC5Jbml0KCkpOwotICAgIGFzc2VydEVxdWFscygib2ZmZXJpbmdEQyIsIG9mZmVy
aW5nREMubGFiZWwoKSk7Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5zZXREYXRhQ2hhbm5l
bChvZmZlcmluZ0RDKTsKLSAgICBTZHBPYnNlcnZlckxhdGNoIHNkcExhdGNoID0gbmV3IFNkcE9i
c2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNoLCBuZXcg
TWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwot
ICAgIFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAg
IGFzc2VydEVxdWFscyhvZmZlclNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5PRkZF
Uik7Ci0gICAgYXNzZXJ0RmFsc2Uob2ZmZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQot
ICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBl
Y3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfUkVNT1RF
X09GRkVSKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0QWRkU3RyZWFtKCJvZmZl
cmVkTWVkaWFTdHJlYW0iKTsKLSAgICAvLyBTQ1RQIERhdGFDaGFubmVscyBhcmUgYW5ub3VuY2Vk
IHZpYSBPUEVOIG1lc3NhZ2VzIG92ZXIgdGhlIGVzdGFibGlzaGVkCi0gICAgLy8gY29ubmVjdGlv
biAobm90IHZpYSBTRFApLCBzbyBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMgY2FuIG9ubHkgcmVnaXN0
ZXIKLSAgICAvLyBleHBlY3RpbmcgdGhlIGNoYW5uZWwgZHVyaW5nIElDRSwgYmVsb3cuCi0gICAg
YW5zd2VyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwTGF0Y2gsIG9mZmVyU2RwKTsKLSAg
ICBhc3NlcnRFcXVhbHMoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGUuU1RBQkxFLCBvZmZl
cmluZ1BDLnNpZ25hbGluZ1N0YXRlKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQo
KSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICBhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0UmVuZWdvdGlhdGlvbk5lZWRlZCgpOwotICAgIFdlYWtSZWZlcmVu
Y2U8TWVkaWFTdHJlYW0+IGFMTVMgPSBhZGRUcmFja3NUb1BDKGZhY3RvcnksIGFuc3dlcmluZ1BD
LCB2aWRlb1NvdXJjZSwKLSAgICAgICAgImFuc3dlcmVkTWVkaWFTdHJlYW0iLCAiYW5zd2VyZWRW
aWRlb1RyYWNrIiwgImFuc3dlcmVkQXVkaW9UcmFjayIsCi0gICAgICAgIG5ldyBFeHBlY3RlZFJl
c29sdXRpb25TZXR0ZXIob2ZmZXJpbmdFeHBlY3RhdGlvbnMpKTsKLQotICAgIHNkcExhdGNoID0g
bmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVBbnN3ZXIoc2Rw
TGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2gu
YXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dlclNkcCA9IHNkcExhdGNoLmdl
dFNkcCgpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJTZHAudHlwZSwgU2Vzc2lvbkRlc2NyaXB0
aW9uLlR5cGUuQU5TV0VSKTsKLSAgICBhc3NlcnRGYWxzZShhbnN3ZXJTZHAuZGVzY3JpcHRpb24u
aXNFbXB0eSgpKTsKLQotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0
ZXMoMik7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7
Ci0KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNl
R2F0aGVyaW5nU3RhdGUuQ09NUExFVEUpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBl
Y3RJY2VHYXRoZXJpbmdDaGFuZ2UoSWNlR2F0aGVyaW5nU3RhdGUuQ09NUExFVEUpOwotCi0gICAg
c2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBh
bnN3ZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAg
IGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5n
ZXRTZHAoKSk7Ci0KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAg
b2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRl
LkhBVkVfTE9DQUxfT0ZGRVIpOwotICAgIG9mZmVyaW5nUEMuc2V0TG9jYWxEZXNjcmlwdGlvbihz
ZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0g
ICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0gICAgc2RwTGF0Y2ggPSBuZXcgU2Rw
T2JzZXJ2ZXJMYXRjaCgpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGlu
Z0NoYW5nZShTaWduYWxpbmdTdGF0ZS5TVEFCTEUpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25z
LmV4cGVjdEFkZFN0cmVhbSgiYW5zd2VyZWRNZWRpYVN0cmVhbSIpOwotCi0gICAgb2ZmZXJpbmdF
eHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0aW9uU3RhdGUu
Q0hFQ0tJTkcpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25D
aGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0gICAgLy8gVE9ETyhiZW1hc2Mp
OiB1bmNvbW1lbnQgb25jZSBkZWxpdmVyeSBvZiBJQ0VDb21wbGV0ZWQgaXMgcmVsaWFibGUKLSAg
ICAvLyAoaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD0z
MDIxKS4KLSAgICAvLwotICAgIC8vIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5l
Y3Rpb25DaGFuZ2UoCi0gICAgLy8gICAgIEljZUNvbm5lY3Rpb25TdGF0ZS5DT01QTEVURUQpOwot
ICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNv
bm5lY3Rpb25TdGF0ZS5DSEVDS0lORyk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCk7Ci0KLSAg
ICBvZmZlcmluZ1BDLnNldFJlbW90ZURlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwot
ICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRj
aC5nZXRTZHAoKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5nZXRMb2NhbERlc2Ny
aXB0aW9uKCkudHlwZSwgb2ZmZXJTZHAudHlwZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9mZmVyaW5n
UEMuZ2V0UmVtb3RlRGVzY3JpcHRpb24oKS50eXBlLCBhbnN3ZXJTZHAudHlwZSk7Ci0gICAgYXNz
ZXJ0RXF1YWxzKGFuc3dlcmluZ1BDLmdldExvY2FsRGVzY3JpcHRpb24oKS50eXBlLCBhbnN3ZXJT
ZHAudHlwZSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlcmluZ1BDLmdldFJlbW90ZURlc2NyaXB0
aW9uKCkudHlwZSwgb2ZmZXJTZHAudHlwZSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQ
Qy5nZXRTZW5kZXJzKCkuc2l6ZSgpLCAyKTsKLSAgICBhc3NlcnRFcXVhbHMob2ZmZXJpbmdQQy5n
ZXRSZWNlaXZlcnMoKS5zaXplKCksIDIpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJpbmdQQy5n
ZXRTZW5kZXJzKCkuc2l6ZSgpLCAyKTsKLSAgICBhc3NlcnRFcXVhbHMoYW5zd2VyaW5nUEMuZ2V0
UmVjZWl2ZXJzKCkuc2l6ZSgpLCAyKTsKLQotICAgIC8vIFdhaXQgZm9yIGF0IGxlYXN0IHNvbWUg
ZnJhbWVzIHRvIGJlIGRlbGl2ZXJlZCBhdCBlYWNoIGVuZCAobnVtYmVyCi0gICAgLy8gY2hvc2Vu
IGFyYml0cmFyaWx5KS4KLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RGcmFtZXNEZWxp
dmVyZWQoMTApOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RGcmFtZXNEZWxpdmVy
ZWQoMTApOwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0
YUNoYW5uZWwuU3RhdGUuT1BFTik7Ci0gICAgLy8gU2VlIGNvbW1lbnRhcnkgYWJvdXQgU0NUUCBE
YXRhQ2hhbm5lbHMgYWJvdmUgZm9yIHdoeSB0aGlzIGlzIGhlcmUuCi0gICAgYW5zd2VyaW5nRXhw
ZWN0YXRpb25zLmV4cGVjdERhdGFDaGFubmVsKCJvZmZlcmluZ0RDIik7Ci0gICAgYW5zd2VyaW5n
RXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLk9QRU4pOwot
Ci0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGljZSBjYW5kaWRhdGUgZnJvbSB0aGUgb2Zm
ZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgYW5zd2VyaW5nCi0gICAgLy8gUEMuCi0g
ICAgZm9yIChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZ2V0
QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBhbnN3ZXJpbmdQQy5hZGRJY2VDYW5k
aWRhdGUoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0IGZvciBhdCBsZWFzdCBvbmUg
aWNlIGNhbmRpZGF0ZSBmcm9tIHRoZSBhbnN3ZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0
aGUgb2ZmZXJpbmcKLSAgICAvLyBQQy4KLSAgICBmb3IgKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUg
OiBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0g
ICAgICBvZmZlcmluZ1BDLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIH0KLQotICAg
IGFzc2VydFRydWUob2ZmZXJpbmdFeHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1Rv
QmVTYXRpc2ZpZWQoVElNRU9VVF9TRUNPTkRTKSk7Ci0gICAgYXNzZXJ0VHJ1ZShhbnN3ZXJpbmdF
eHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElNRU9VVF9T
RUNPTkRTKSk7Ci0KLSAgICBhc3NlcnRFcXVhbHMoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3Rh
dGUuU1RBQkxFLCBvZmZlcmluZ1BDLnNpZ25hbGluZ1N0YXRlKCkpOwotICAgIGFzc2VydEVxdWFs
cyhQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIGFuc3dlcmluZ1BDLnNpZ25h
bGluZ1N0YXRlKCkpOwotCi0gICAgLy8gU2V0IGEgYml0cmF0ZSBsaW1pdCBmb3IgdGhlIG91dGdv
aW5nIHZpZGVvIHN0cmVhbSBmb3IgdGhlIG9mZmVyZXIuCi0gICAgUnRwU2VuZGVyIHZpZGVvU2Vu
ZGVyID0gbnVsbDsKLSAgICBmb3IgKFJ0cFNlbmRlciBzZW5kZXIgOiBvZmZlcmluZ1BDLmdldFNl
bmRlcnMoKSkgewotICAgICAgaWYgKHNlbmRlci50cmFjaygpLmtpbmQoKS5lcXVhbHMoInZpZGVv
IikpIHsKLSAgICAgICAgdmlkZW9TZW5kZXIgPSBzZW5kZXI7Ci0gICAgICB9Ci0gICAgfQotICAg
IGFzc2VydE5vdE51bGwodmlkZW9TZW5kZXIpOwotICAgIFJ0cFBhcmFtZXRlcnMgcnRwUGFyYW1l
dGVycyA9IHZpZGVvU2VuZGVyLmdldFBhcmFtZXRlcnMoKTsKLSAgICBhc3NlcnROb3ROdWxsKHJ0
cFBhcmFtZXRlcnMpOwotICAgIGFzc2VydEVxdWFscygxLCBydHBQYXJhbWV0ZXJzLmVuY29kaW5n
cy5zaXplKCkpOwotICAgIGFzc2VydE51bGwocnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDAp
Lm1heEJpdHJhdGVCcHMpOwotCi0gICAgcnRwUGFyYW1ldGVycy5lbmNvZGluZ3MuZ2V0KDApLm1h
eEJpdHJhdGVCcHMgPSAzMDAwMDA7Ci0gICAgYXNzZXJ0VHJ1ZSh2aWRlb1NlbmRlci5zZXRQYXJh
bWV0ZXJzKHJ0cFBhcmFtZXRlcnMpKTsKLQotICAgIC8vIFZlcmlmeSB0aGF0IHdlIGNhbiByZWFk
IGJhY2sgdGhlIHVwZGF0ZWQgdmFsdWUuCi0gICAgcnRwUGFyYW1ldGVycyA9IHZpZGVvU2VuZGVy
LmdldFBhcmFtZXRlcnMoKTsKLSAgICBhc3NlcnRFcXVhbHMoMzAwMDAwLCAoaW50KSBydHBQYXJh
bWV0ZXJzLmVuY29kaW5ncy5nZXQoMCkubWF4Qml0cmF0ZUJwcyk7Ci0KLSAgICAvLyBUZXN0IHNl
bmQgJiByZWNlaXZlIFVURi04IHRleHQuCi0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVj
dE1lc3NhZ2UoCi0gICAgICAgIEJ5dGVCdWZmZXIud3JhcCgiaGVsbG8hIi5nZXRCeXRlcyhDaGFy
c2V0LmZvck5hbWUoIlVURi04IikpKSwgZmFsc2UpOwotICAgIERhdGFDaGFubmVsLkJ1ZmZlciBi
dWZmZXIgPQotICAgICAgICBuZXcgRGF0YUNoYW5uZWwuQnVmZmVyKEJ5dGVCdWZmZXIud3JhcCgi
aGVsbG8hIi5nZXRCeXRlcyhDaGFyc2V0LmZvck5hbWUoIlVURi04IikpKSwgZmFsc2UpOwotICAg
IGFzc2VydFRydWUob2ZmZXJpbmdFeHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwuc2VuZChidWZmZXIp
KTsKLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0
YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLQotICAgIC8vIENvbnN0cnVj
dCB0aGlzIGJpbmFyeSBtZXNzYWdlIHR3byBkaWZmZXJlbnQgd2F5cyB0byBlbnN1cmUgbm8KLSAg
ICAvLyBzaG9ydGN1dHMgYXJlIHRha2VuLgotICAgIEJ5dGVCdWZmZXIgZXhwZWN0ZWRCaW5hcnlN
ZXNzYWdlID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdCg1KTsKLSAgICBmb3IgKGJ5dGUgaSA9
IDE7IGkgPCA2OyArK2kpIHsKLSAgICAgIGV4cGVjdGVkQmluYXJ5TWVzc2FnZS5wdXQoaSk7Ci0g
ICAgfQotICAgIGV4cGVjdGVkQmluYXJ5TWVzc2FnZS5mbGlwKCk7Ci0gICAgb2ZmZXJpbmdFeHBl
Y3RhdGlvbnMuZXhwZWN0TWVzc2FnZShleHBlY3RlZEJpbmFyeU1lc3NhZ2UsIHRydWUpOwotICAg
IGFzc2VydFRydWUoYW5zd2VyaW5nRXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLnNlbmQoCi0gICAg
ICAgIG5ldyBEYXRhQ2hhbm5lbC5CdWZmZXIoQnl0ZUJ1ZmZlci53cmFwKG5ldyBieXRlW10gezEs
IDIsIDMsIDQsIDV9KSwgdHJ1ZSkpKTsKLSAgICBhc3NlcnRUcnVlKG9mZmVyaW5nRXhwZWN0YXRp
b25zLndhaXRGb3JBbGxFeHBlY3RhdGlvbnNUb0JlU2F0aXNmaWVkKFRJTUVPVVRfU0VDT05EUykp
OwotCi0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U3RhdGVDaGFuZ2UoRGF0YUNoYW5u
ZWwuU3RhdGUuQ0xPU0lORyk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRl
Q2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLkNMT1NJTkcpOwotICAgIG9mZmVyaW5nRXhwZWN0YXRp
b25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLkNMT1NFRCk7Ci0gICAgYW5z
d2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFN0YXRlQ2hhbmdlKERhdGFDaGFubmVsLlN0YXRlLkNM
T1NFRCk7Ci0gICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmRhdGFDaGFubmVsLmNsb3NlKCk7Ci0g
ICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMuZGF0YUNoYW5uZWwuY2xvc2UoKTsKLQotICAgIC8vIEZy
ZWUgdGhlIEphdmEtbGFuZCBvYmplY3RzIGFuZCBjb2xsZWN0IHRoZW0uCi0gICAgc2h1dGRvd25Q
QyhvZmZlcmluZ1BDLCBvZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgb2ZmZXJpbmdQQyA9IG51
bGw7Ci0gICAgc2h1dGRvd25QQyhhbnN3ZXJpbmdQQywgYW5zd2VyaW5nRXhwZWN0YXRpb25zKTsK
LSAgICBhbnN3ZXJpbmdQQyA9IG51bGw7Ci0gICAgZ2V0TWV0cmljcygpOwotICAgIHZpZGVvQ2Fw
dHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICB2aWRlb0NhcHR1cmVyLmRpc3Bvc2UoKTsKLSAgICB2
aWRlb1NvdXJjZS5kaXNwb3NlKCk7Ci0gICAgZmFjdG9yeS5kaXNwb3NlKCk7Ci0gICAgU3lzdGVt
LmdjKCk7Ci0gIH0KLQotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0VHJhY2tSZW1v
dmFsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgLy8gQWxsb3cgbG9vcGJhY2sgaW50ZXJmYWNl
cyB0b28gc2luY2Ugb3VyIEFuZHJvaWQgZGV2aWNlcyBvZnRlbiBkb24ndAotICAgIC8vIGhhdmUg
dGhvc2UuCi0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9y
ZU1hc2sgPSAwOwotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5ID0gbmV3IFBlZXJD
b25uZWN0aW9uRmFjdG9yeShvcHRpb25zKTsKLQotICAgIE1lZGlhQ29uc3RyYWludHMgcGNDb25z
dHJhaW50cyA9IG5ldyBNZWRpYUNvbnN0cmFpbnRzKCk7Ci0gICAgcGNDb25zdHJhaW50cy5tYW5k
YXRvcnkuYWRkKG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcigiRHRsc1NydHBLZXlB
Z3JlZW1lbnQiLCAidHJ1ZSIpKTsKLQotICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNl
U2VydmVyPiBpY2VTZXJ2ZXJzID0gbmV3IExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2Vy
dmVyPigpOwotICAgIGljZVNlcnZlcnMuYWRkKG5ldyBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIo
InN0dW46c3R1bi5sLmdvb2dsZS5jb206MTkzMDIiKSk7Ci0KLSAgICBPYnNlcnZlckV4cGVjdGF0
aW9ucyBvZmZlcmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBPYnNlcnZlckV4cGVjdGF0aW9ucygiUENU
ZXN0Om9mZmVyZXIiKTsKLSAgICBQZWVyQ29ubmVjdGlvbiBvZmZlcmluZ1BDID0KLSAgICAgICAg
ZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihpY2VTZXJ2ZXJzLCBwY0NvbnN0cmFpbnRzLCBv
ZmZlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNzZXJ0Tm90TnVsbChvZmZlcmluZ1BDKTsKLQot
ICAgIE9ic2VydmVyRXhwZWN0YXRpb25zIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyA9IG5ldyBPYnNl
cnZlckV4cGVjdGF0aW9ucygiUENUZXN0OmFuc3dlcmVyIik7Ci0gICAgUGVlckNvbm5lY3Rpb24g
YW5zd2VyaW5nUEMgPQotICAgICAgICBmYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKGljZVNl
cnZlcnMsIHBjQ29uc3RyYWludHMsIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYXNzZXJ0
Tm90TnVsbChhbnN3ZXJpbmdQQyk7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHVzZSB0aGUgc2FtZSBj
YW1lcmEgZm9yIG9mZmVyZXIgJiBhbnN3ZXJlciwgc28gY3JlYXRlIGl0IGhlcmUKLSAgICAvLyBp
bnN0ZWFkIG9mIGluIGFkZFRyYWNrc1RvUEMuCi0gICAgZmluYWwgQ2FtZXJhRW51bWVyYXRvciBl
bnVtZXJhdG9yID0gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1
cmUgKi8pOwotICAgIGZpbmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9Ci0gICAgICAg
IGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpWzBd
LCBudWxsKTsKLSAgICBmaW5hbCBWaWRlb1NvdXJjZSB2aWRlb1NvdXJjZSA9IGZhY3RvcnkuY3Jl
YXRlVmlkZW9Tb3VyY2UodmlkZW9DYXB0dXJlcik7Ci0gICAgdmlkZW9DYXB0dXJlci5zdGFydENh
cHR1cmUoNjQwLCA0ODAsIDMwKTsKLQotICAgIC8vIEFkZCBvZmZlcmVyIG1lZGlhIHN0cmVhbS4K
LSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RSZW5lZ290aWF0aW9uTmVlZGVkKCk7Ci0g
ICAgV2Vha1JlZmVyZW5jZTxNZWRpYVN0cmVhbT4gb0xNUyA9Ci0gICAgICAgIGFkZFRyYWNrc1Rv
UEMoZmFjdG9yeSwgb2ZmZXJpbmdQQywgdmlkZW9Tb3VyY2UsICJvZmZlcmVkTWVkaWFTdHJlYW0i
LCAib2ZmZXJlZFZpZGVvVHJhY2siLAotICAgICAgICAgICAgIm9mZmVyZWRBdWRpb1RyYWNrIiwg
bmV3IEV4cGVjdGVkUmVzb2x1dGlvblNldHRlcihhbnN3ZXJpbmdFeHBlY3RhdGlvbnMpKTsKLQot
ICAgIC8vIENyZWF0ZSBvZmZlci4KLSAgICBTZHBPYnNlcnZlckxhdGNoIHNkcExhdGNoID0gbmV3
IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNo
LCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0
KCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCA9IHNkcExhdGNoLmdldFNkcCgp
OwotICAgIGFzc2VydEVxdWFscyhvZmZlclNkcC50eXBlLCBTZXNzaW9uRGVzY3JpcHRpb24uVHlw
ZS5PRkZFUik7Ci0gICAgYXNzZXJ0RmFsc2Uob2ZmZXJTZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgp
KTsKLQotICAgIC8vIFNldCBsb2NhbCBkZXNjcmlwdGlvbiBmb3Igb2ZmZXJlci4KLSAgICBzZHBM
YXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0gICAgb2ZmZXJpbmdFeHBlY3RhdGlvbnMu
ZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRlLkhBVkVfTE9DQUxfT0ZGRVIpOwot
ICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNhbmRpZGF0ZXMoMik7Ci0gICAgb2Zm
ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlR2F0aGVyaW5nQ2hhbmdlKEljZUdhdGhlcmluZ1N0
YXRlLkNPTVBMRVRFKTsKLSAgICBvZmZlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0
Y2gsIG9mZmVyU2RwKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFz
c2VydE51bGwoc2RwTGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gU2V0IHJlbW90ZSBkZXNjcmlw
dGlvbiBmb3IgYW5zd2VyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgp
OwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFs
aW5nU3RhdGUuSEFWRV9SRU1PVEVfT0ZGRVIpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RBZGRTdHJlYW0oIm9mZmVyZWRNZWRpYVN0cmVhbSIpOwotICAgIGFuc3dlcmluZ1BDLnNl
dFJlbW90ZURlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShz
ZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQot
ICAgIC8vIEFkZCBhbnN3ZXJlciBtZWRpYSBzdHJlYW0uCi0gICAgYW5zd2VyaW5nRXhwZWN0YXRp
b25zLmV4cGVjdFJlbmVnb3RpYXRpb25OZWVkZWQoKTsKLSAgICBXZWFrUmVmZXJlbmNlPE1lZGlh
U3RyZWFtPiBhTE1TID0gYWRkVHJhY2tzVG9QQyhmYWN0b3J5LCBhbnN3ZXJpbmdQQywgdmlkZW9T
b3VyY2UsCi0gICAgICAgICJhbnN3ZXJlZE1lZGlhU3RyZWFtIiwgImFuc3dlcmVkVmlkZW9UcmFj
ayIsICJhbnN3ZXJlZEF1ZGlvVHJhY2siLAotICAgICAgICBuZXcgRXhwZWN0ZWRSZXNvbHV0aW9u
U2V0dGVyKG9mZmVyaW5nRXhwZWN0YXRpb25zKSk7Ci0KLSAgICAvLyBDcmVhdGUgYW5zd2VyLgot
ICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBhbnN3ZXJpbmdQQy5j
cmVhdGVBbnN3ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFpbnRzKCkpOwotICAgIGFzc2Vy
dFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dlclNk
cCA9IHNkcExhdGNoLmdldFNkcCgpOwotICAgIGFzc2VydEVxdWFscyhhbnN3ZXJTZHAudHlwZSwg
U2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSKTsKLSAgICBhc3NlcnRGYWxzZShhbnN3ZXJT
ZHAuZGVzY3JpcHRpb24uaXNFbXB0eSgpKTsKLQotICAgIC8vIFNldCBsb2NhbCBkZXNjcmlwdGlv
biBmb3IgYW5zd2VyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgpOwot
ICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5n
U3RhdGUuU1RBQkxFKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ2FuZGlk
YXRlcygyKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlR2F0aGVyaW5nQ2hh
bmdlKEljZUdhdGhlcmluZ1N0YXRlLkNPTVBMRVRFKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRMb2Nh
bERlc2NyaXB0aW9uKHNkcExhdGNoLCBhbnN3ZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0
Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAv
LyBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0gbmV3
IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWdu
YWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuU1RBQkxFKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0
aW9ucy5leHBlY3RBZGRTdHJlYW0oImFuc3dlcmVkTWVkaWFTdHJlYW0iKTsKLQotICAgIG9mZmVy
aW5nRXhwZWN0YXRpb25zLmV4cGVjdEljZUNvbm5lY3Rpb25DaGFuZ2UoSWNlQ29ubmVjdGlvblN0
YXRlLkNIRUNLSU5HKTsKLSAgICBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VDb25uZWN0
aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwotICAgIC8vIFRPRE8oYmVt
YXNjKTogdW5jb21tZW50IG9uY2UgZGVsaXZlcnkgb2YgSUNFQ29tcGxldGVkIGlzIHJlbGlhYmxl
Ci0gICAgLy8gKGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/
aWQ9MzAyMSkuCi0gICAgLy8KLSAgICAvLyBvZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RJY2VD
b25uZWN0aW9uQ2hhbmdlKAotICAgIC8vICAgICBJY2VDb25uZWN0aW9uU3RhdGUuQ09NUExFVEVE
KTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJ
Y2VDb25uZWN0aW9uU3RhdGUuQ0hFQ0tJTkcpOwotICAgIGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5l
eHBlY3RJY2VDb25uZWN0aW9uQ2hhbmdlKEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpOwot
Ci0gICAgb2ZmZXJpbmdQQy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgYW5zd2VyU2Rw
KTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIGFzc2VydE51bGwoc2Rw
TGF0Y2guZ2V0U2RwKCkpOwotCi0gICAgLy8gV2FpdCBmb3IgYXQgbGVhc3Qgb25lIGljZSBjYW5k
aWRhdGUgZnJvbSB0aGUgb2ZmZXJpbmcgUEMgYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgYW5zd2Vy
aW5nCi0gICAgLy8gUEMuCi0gICAgZm9yIChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogb2ZmZXJp
bmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUljZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBhbnN3
ZXJpbmdQQy5hZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB9Ci0KLSAgICAvLyBXYWl0
IGZvciBhdCBsZWFzdCBvbmUgaWNlIGNhbmRpZGF0ZSBmcm9tIHRoZSBhbnN3ZXJpbmcgUEMgYW5k
IGZvcndhcmQgdGhlbSB0byB0aGUgb2ZmZXJpbmcKLSAgICAvLyBQQy4KLSAgICBmb3IgKEljZUNh
bmRpZGF0ZSBjYW5kaWRhdGUgOiBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZ2V0QXRMZWFzdE9uZUlj
ZUNhbmRpZGF0ZSgpKSB7Ci0gICAgICBvZmZlcmluZ1BDLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRh
dGUpOwotICAgIH0KLQotICAgIC8vIFdhaXQgZm9yIG9uZSBmcmFtZSBvZiB0aGUgY29ycmVjdCBz
aXplIHRvIGJlIGRlbGl2ZXJlZC4KLSAgICAvLyBPdGhlcndpc2Ugd2UgY291bGQgZ2V0IGEgZHVt
bXkgYmxhY2sgZnJhbWUgb2YgdW5leHBjdGVkIHNpemUgd2hlbiB0aGUKLSAgICAvLyB2aWRlbyB0
cmFjayBpcyByZW1vdmVkLgotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdEZyYW1lc0Rl
bGl2ZXJlZCgxKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0RnJhbWVzRGVsaXZl
cmVkKDEpOwotCi0gICAgYXNzZXJ0VHJ1ZShvZmZlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxs
RXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLSAgICBhc3NlcnRU
cnVlKGFuc3dlcmluZ0V4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlz
ZmllZChUSU1FT1VUX1NFQ09ORFMpKTsKLQotICAgIGFzc2VydEVxdWFscyhQZWVyQ29ubmVjdGlv
bi5TaWduYWxpbmdTdGF0ZS5TVEFCTEUsIG9mZmVyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7Ci0g
ICAgYXNzZXJ0RXF1YWxzKFBlZXJDb25uZWN0aW9uLlNpZ25hbGluZ1N0YXRlLlNUQUJMRSwgYW5z
d2VyaW5nUEMuc2lnbmFsaW5nU3RhdGUoKSk7Ci0KLSAgICAvLyBOb3cgZG8gYW5vdGhlciBuZWdv
dGlhdGlvbiwgcmVtb3ZpbmcgdGhlIHZpZGVvIHRyYWNrIGZyb20gb25lIHBlZXIuCi0gICAgLy8g
VGhpcyBwcmV2aW91c2x5IGNhdXNlZCBhIGNyYXNoIG9uIHBjLmRpc3Bvc2UoKS4KLSAgICAvLyBT
ZWU6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD01
MTI4Ci0gICAgVmlkZW9UcmFjayBvZmZlcmVyVmlkZW9UcmFjayA9IG9MTVMuZ2V0KCkudmlkZW9U
cmFja3MuZ2V0KDApOwotICAgIC8vIE5vdGUgdGhhdCB3aGVuIHdlIGNhbGwgcmVtb3ZlVHJhY2ss
IHdlIHJlZ2FpbiByZXNwb25zaWJpbGl0eSBmb3IKLSAgICAvLyBkaXNwb3Npbmcgb2YgdGhlIHRy
YWNrLgotICAgIG9MTVMuZ2V0KCkucmVtb3ZlVHJhY2sob2ZmZXJlclZpZGVvVHJhY2spOwotCi0g
ICAgLy8gQ3JlYXRlIG9mZmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2go
KTsKLSAgICBvZmZlcmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25zdHJh
aW50cygpKTsKLSAgICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIG9mZmVyU2Rw
ID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNl
c3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSKTsKLSAgICBhc3NlcnRGYWxzZShvZmZlclNkcC5k
ZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZv
ciBvZmZlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBv
ZmZlcmluZ0V4cGVjdGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUu
SEFWRV9MT0NBTF9PRkZFUik7Ci0gICAgb2ZmZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNk
cExhdGNoLCBvZmZlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAg
ICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVz
Y3JpcHRpb24gZm9yIGFuc3dlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0
Y2goKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNp
Z25hbGluZ1N0YXRlLkhBVkVfUkVNT1RFX09GRkVSKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1v
dGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0
Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAv
LyBDcmVhdGUgYW5zd2VyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsK
LSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVBbnN3ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFp
bnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYW5zd2VyU2Rw
ID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBT
ZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5BTlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNk
cC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9u
IGZvciBhbnN3ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0g
ICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdT
dGF0ZS5TVEFCTEUpOwotICAgIGFuc3dlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0
Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBh
c3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3Jp
cHRpb24gZm9yIG9mZmVyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgp
OwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxp
bmdTdGF0ZS5TVEFCTEUpOwotICAgIG9mZmVyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Rw
TGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAg
ICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUg
dHJhY2sgd2FzIHJlYWxseSByZW1vdmVkLgotICAgIC8vIFRPRE8oZGVhZGJlZWYpOiBDdXJyZW50
bHkgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIHZpZGVvIHRyYWNrJ3MKLSAgICAvLyBzdGF0
ZSB3aWxsIGJlIHNldCB0byAiZW5kZWQiLiBIb3dldmVyLCBpbiB0aGUgZnV0dXJlLCBpdCdzIGxp
a2VseSB0aGF0Ci0gICAgLy8gdGhlIHZpZGVvIHRyYWNrIHdpbGwgYmUgY29tcGxldGVseSByZW1v
dmVkIGZyb20gdGhlIHJlbW90ZSBzdHJlYW0KLSAgICAvLyAoYXMgaXQgaXMgb24gdGhlIEMrKyBs
ZXZlbCkuCi0gICAgTWVkaWFTdHJlYW0gYVJNUyA9IGFuc3dlcmluZ0V4cGVjdGF0aW9ucy5nb3RS
ZW1vdGVTdHJlYW1zLml0ZXJhdG9yKCkubmV4dCgpOwotICAgIGFzc2VydEVxdWFscyhhUk1TLnZp
ZGVvVHJhY2tzLmdldCgwKS5zdGF0ZSgpLCBNZWRpYVN0cmVhbVRyYWNrLlN0YXRlLkVOREVEKTsK
LQotICAgIC8vIEZpbmFsbHksIHJlbW92ZSB0aGUgYXVkaW8gdHJhY2sgYXMgd2VsbCwgd2hpY2gg
c2hvdWxkIGNvbXBsZXRlbHkgcmVtb3ZlCi0gICAgLy8gdGhlIHJlbW90ZSBzdHJlYW0uIFRoaXMg
dXNlZCB0byB0cmlnZ2VyIGFuIGFzc2VydC4KLSAgICAvLyBTZWU6IGh0dHBzOi8vYnVncy5jaHJv
bWl1bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD01MTI4Ci0gICAgQXVkaW9UcmFjayBv
ZmZlcmVyQXVkaW9UcmFjayA9IG9MTVMuZ2V0KCkuYXVkaW9UcmFja3MuZ2V0KDApOwotICAgIG9M
TVMuZ2V0KCkucmVtb3ZlVHJhY2sob2ZmZXJlckF1ZGlvVHJhY2spOwotCi0gICAgLy8gQ3JlYXRl
IG9mZmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZl
cmluZ1BDLmNyZWF0ZU9mZmVyKHNkcExhdGNoLCBuZXcgTWVkaWFDb25zdHJhaW50cygpKTsKLSAg
ICBhc3NlcnRUcnVlKHNkcExhdGNoLmF3YWl0KCkpOwotICAgIG9mZmVyU2RwID0gc2RwTGF0Y2gu
Z2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKG9mZmVyU2RwLnR5cGUsIFNlc3Npb25EZXNjcmlw
dGlvbi5UeXBlLk9GRkVSKTsKLSAgICBhc3NlcnRGYWxzZShvZmZlclNkcC5kZXNjcmlwdGlvbi5p
c0VtcHR5KCkpOwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9uIGZvciBvZmZlcmVyLgot
ICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBvZmZlcmluZ0V4cGVj
dGF0aW9ucy5leHBlY3RTaWduYWxpbmdDaGFuZ2UoU2lnbmFsaW5nU3RhdGUuSEFWRV9MT0NBTF9P
RkZFUik7Ci0gICAgb2ZmZXJpbmdQQy5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcExhdGNoLCBvZmZl
clNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBhc3NlcnROdWxs
KHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3JpcHRpb24gZm9y
IGFuc3dlcmVyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsKLSAgICBh
bnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdlKFNpZ25hbGluZ1N0YXRl
LkhBVkVfUkVNT1RFX09GRkVSKTsKLSAgICBhbnN3ZXJpbmdFeHBlY3RhdGlvbnMuZXhwZWN0UmVt
b3ZlU3RyZWFtKCJvZmZlcmVkTWVkaWFTdHJlYW0iKTsKLSAgICBhbnN3ZXJpbmdQQy5zZXRSZW1v
dGVEZXNjcmlwdGlvbihzZHBMYXRjaCwgb2ZmZXJTZHApOwotICAgIGFzc2VydFRydWUoc2RwTGF0
Y2guYXdhaXQoKSk7Ci0gICAgYXNzZXJ0TnVsbChzZHBMYXRjaC5nZXRTZHAoKSk7Ci0KLSAgICAv
LyBDcmVhdGUgYW5zd2VyLgotICAgIHNkcExhdGNoID0gbmV3IFNkcE9ic2VydmVyTGF0Y2goKTsK
LSAgICBhbnN3ZXJpbmdQQy5jcmVhdGVBbnN3ZXIoc2RwTGF0Y2gsIG5ldyBNZWRpYUNvbnN0cmFp
bnRzKCkpOwotICAgIGFzc2VydFRydWUoc2RwTGF0Y2guYXdhaXQoKSk7Ci0gICAgYW5zd2VyU2Rw
ID0gc2RwTGF0Y2guZ2V0U2RwKCk7Ci0gICAgYXNzZXJ0RXF1YWxzKGFuc3dlclNkcC50eXBlLCBT
ZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5BTlNXRVIpOwotICAgIGFzc2VydEZhbHNlKGFuc3dlclNk
cC5kZXNjcmlwdGlvbi5pc0VtcHR5KCkpOwotCi0gICAgLy8gU2V0IGxvY2FsIGRlc2NyaXB0aW9u
IGZvciBhbnN3ZXJlci4KLSAgICBzZHBMYXRjaCA9IG5ldyBTZHBPYnNlcnZlckxhdGNoKCk7Ci0g
ICAgYW5zd2VyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxpbmdT
dGF0ZS5TVEFCTEUpOwotICAgIGFuc3dlcmluZ1BDLnNldExvY2FsRGVzY3JpcHRpb24oc2RwTGF0
Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAgICBh
c3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIFNldCByZW1vdGUgZGVzY3Jp
cHRpb24gZm9yIG9mZmVyZXIuCi0gICAgc2RwTGF0Y2ggPSBuZXcgU2RwT2JzZXJ2ZXJMYXRjaCgp
OwotICAgIG9mZmVyaW5nRXhwZWN0YXRpb25zLmV4cGVjdFNpZ25hbGluZ0NoYW5nZShTaWduYWxp
bmdTdGF0ZS5TVEFCTEUpOwotICAgIG9mZmVyaW5nUEMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Rw
TGF0Y2gsIGFuc3dlclNkcCk7Ci0gICAgYXNzZXJ0VHJ1ZShzZHBMYXRjaC5hd2FpdCgpKTsKLSAg
ICBhc3NlcnROdWxsKHNkcExhdGNoLmdldFNkcCgpKTsKLQotICAgIC8vIE1ha2Ugc3VyZSB0aGUg
c3RyZWFtIHdhcyByZWFsbHkgcmVtb3ZlZC4KLSAgICBhc3NlcnRUcnVlKGFuc3dlcmluZ0V4cGVj
dGF0aW9ucy5nb3RSZW1vdGVTdHJlYW1zLmlzRW1wdHkoKSk7Ci0KLSAgICAvLyBGcmVlIHRoZSBK
YXZhLWxhbmQgb2JqZWN0cyBhbmQgY29sbGVjdCB0aGVtLgotICAgIHNodXRkb3duUEMob2ZmZXJp
bmdQQywgb2ZmZXJpbmdFeHBlY3RhdGlvbnMpOwotICAgIG9mZmVyaW5nUEMgPSBudWxsOwotICAg
IHNodXRkb3duUEMoYW5zd2VyaW5nUEMsIGFuc3dlcmluZ0V4cGVjdGF0aW9ucyk7Ci0gICAgYW5z
d2VyaW5nUEMgPSBudWxsOwotICAgIG9mZmVyZXJWaWRlb1RyYWNrLmRpc3Bvc2UoKTsKLSAgICBv
ZmZlcmVyQXVkaW9UcmFjay5kaXNwb3NlKCk7Ci0gICAgdmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVy
ZSgpOwotICAgIHZpZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotICAgIHZpZGVvU291cmNlLmRpc3Bv
c2UoKTsKLSAgICBmYWN0b3J5LmRpc3Bvc2UoKTsKLSAgICBTeXN0ZW0uZ2MoKTsKLSAgfQotCi0g
IHByaXZhdGUgc3RhdGljIHZvaWQgZ2V0TWV0cmljcygpIHsKLSAgICBNZXRyaWNzIG1ldHJpY3Mg
PSBNZXRyaWNzLmdldEFuZFJlc2V0KCk7Ci0gICAgYXNzZXJ0VHJ1ZShtZXRyaWNzLm1hcC5zaXpl
KCkgPiAwKTsKLSAgICAvLyBUZXN0IGZvciBleGFtcGxlIHRoYXQgdGhlIGxpZmV0aW1lIG9mIGEg
Q2FsbCBpcyByZWNvcmRlZC4KLSAgICBTdHJpbmcgbmFtZSA9ICJXZWJSVEMuQ2FsbC5MaWZldGlt
ZUluU2Vjb25kcyI7Ci0gICAgYXNzZXJ0VHJ1ZShtZXRyaWNzLm1hcC5jb250YWluc0tleShuYW1l
KSk7Ci0gICAgSGlzdG9ncmFtSW5mbyBpbmZvID0gbWV0cmljcy5tYXAuZ2V0KG5hbWUpOwotICAg
IGFzc2VydFRydWUoaW5mby5zYW1wbGVzLnNpemUoKSA+IDApOwotICB9Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgdm9pZCBzaHV0ZG93blBDKFBlZXJDb25uZWN0aW9uIHBjLCBPYnNlcnZlckV4cGVjdGF0
aW9ucyBleHBlY3RhdGlvbnMpIHsKLSAgICBpZiAoZXhwZWN0YXRpb25zLmRhdGFDaGFubmVsICE9
IG51bGwpIHsKLSAgICAgIGV4cGVjdGF0aW9ucy5kYXRhQ2hhbm5lbC51bnJlZ2lzdGVyT2JzZXJ2
ZXIoKTsKLSAgICAgIGV4cGVjdGF0aW9ucy5kYXRhQ2hhbm5lbC5kaXNwb3NlKCk7Ci0gICAgfQot
ICAgIGV4cGVjdGF0aW9ucy5leHBlY3RTdGF0c0NhbGxiYWNrKCk7Ci0gICAgYXNzZXJ0VHJ1ZShw
Yy5nZXRTdGF0cyhleHBlY3RhdGlvbnMsIG51bGwpKTsKLSAgICBhc3NlcnRUcnVlKGV4cGVjdGF0
aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VUX1NFQ09ORFMp
KTsKLSAgICBleHBlY3RhdGlvbnMuZXhwZWN0SWNlQ29ubmVjdGlvbkNoYW5nZShJY2VDb25uZWN0
aW9uU3RhdGUuQ0xPU0VEKTsKLSAgICBleHBlY3RhdGlvbnMuZXhwZWN0U2lnbmFsaW5nQ2hhbmdl
KFNpZ25hbGluZ1N0YXRlLkNMT1NFRCk7Ci0gICAgcGMuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVl
KGV4cGVjdGF0aW9ucy53YWl0Rm9yQWxsRXhwZWN0YXRpb25zVG9CZVNhdGlzZmllZChUSU1FT1VU
X1NFQ09ORFMpKTsKLSAgICBleHBlY3RhdGlvbnMuZXhwZWN0U3RhdHNDYWxsYmFjaygpOwotICAg
IGFzc2VydFRydWUocGMuZ2V0U3RhdHMoZXhwZWN0YXRpb25zLCBudWxsKSk7Ci0gICAgYXNzZXJ0
VHJ1ZShleHBlY3RhdGlvbnMud2FpdEZvckFsbEV4cGVjdGF0aW9uc1RvQmVTYXRpc2ZpZWQoVElN
RU9VVF9TRUNPTkRTKSk7Ci0KLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkZZSSBzdGF0czogIik7
Ci0gICAgaW50IHJlcG9ydEluZGV4ID0gLTE7Ci0gICAgZm9yIChTdGF0c1JlcG9ydFtdIHJlcG9y
dHMgOiBleHBlY3RhdGlvbnMudGFrZVN0YXRzUmVwb3J0cygpKSB7Ci0gICAgICBTeXN0ZW0ub3V0
LnByaW50bG4oIiBSZXBvcnQgIyIgKyAoKytyZXBvcnRJbmRleCkpOwotICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZXBvcnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJp
bnRsbigiICAiICsgcmVwb3J0c1tpXS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAg
YXNzZXJ0RXF1YWxzKDEsIHJlcG9ydEluZGV4KTsKLSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVu
ZCBzdGF0cy4iKTsKLQotICAgIHBjLmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgYSBz
ZXQgb2YgdGhyZWFkIElEcyBiZWxvbmdpbmcgdG8gdGhpcyBwcm9jZXNzLCBhcyBTdHJpbmdzLgot
ICBwcml2YXRlIHN0YXRpYyBUcmVlU2V0PFN0cmluZz4gYWxsVGhyZWFkcygpIHsKLSAgICBUcmVl
U2V0PFN0cmluZz4gdGhyZWFkcyA9IG5ldyBUcmVlU2V0PFN0cmluZz4oKTsKLSAgICAvLyBUaGlz
IHBva2VzIGF0IC9wcm9jIGluc3RlYWQgb2YgdXNpbmcgdGhlIEphdmEgQVBJcyBiZWNhdXNlIHdl
J3JlIGFsc28KLSAgICAvLyBsb29raW5nIGZvciBsaWJqaW5nbGUvd2VicnRjIG5hdGl2ZSB0aHJl
YWRzLCBtb3N0IG9mIHdoaWNoIHdvbid0IGhhdmUKLSAgICAvLyBhdHRhY2hlZCB0byB0aGUgSlZN
LgotICAgIGZvciAoU3RyaW5nIHRocmVhZElkIDogKG5ldyBGaWxlKCIvcHJvYy9zZWxmL3Rhc2si
KSkubGlzdCgpKSB7Ci0gICAgICB0aHJlYWRzLmFkZCh0aHJlYWRJZCk7Ci0gICAgfQotICAgIHJl
dHVybiB0aHJlYWRzOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1JlbmRlcmVyQ29t
bW9uVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVyZXJDb21t
b25UZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvUmVuZGVy
ZXJDb21tb25UZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy53
ZWJydGMuUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUuKjsKLWltcG9ydCBzdGF0aWMgb3JnLndl
YnJ0Yy5SZW5kZXJlckNvbW1vbi5nZXREaXNwbGF5U2l6ZTsKLWltcG9ydCBzdGF0aWMgb3JnLndl
YnJ0Yy5SZW5kZXJlckNvbW1vbi5nZXRMYXlvdXRNYXRyaXg7Ci1pbXBvcnQgc3RhdGljIG9yZy53
ZWJydGMuUmVuZGVyZXJDb21tb24ucm90YXRlVGV4dHVyZU1hdHJpeDsKLQotaW1wb3J0IGFuZHJv
aWQuZ3JhcGhpY3MuUG9pbnQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LkFjdGl2aXR5VGVzdENhc2U7
Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lk1vcmVBc3NlcnRzOwotaW1wb3J0IGFuZHJvaWQudGVzdC5z
dWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBS
ZW5kZXJlckNvbW1vblRlc3QgZXh0ZW5kcyBBY3Rpdml0eVRlc3RDYXNlIHsKLSAgQFNtYWxsVGVz
dAotICBzdGF0aWMgcHVibGljIHZvaWQgdGVzdERpc3BsYXlTaXplTm9GcmFtZSgpIHsKLSAgICBh
c3NlcnRFcXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1Rf
RklULCAwLjBmLCAwLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0
RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDAuMGYsIDAsIDApKTsKLSAgICBhc3NlcnRF
cXVhbHMobmV3IFBvaW50KDAsIDApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfQkFMQU5D
RUQsIDAuMGYsIDAsIDApKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3REaXNwbGF5U2l6ZURlZ2VuZXJhdGVBc3BlY3RSYXRpbygpIHsKLSAgICBhc3NlcnRF
cXVhbHMobmV3IFBvaW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9G
SVQsIDAuMGYsIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwg
NzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDAuMGYsIDEyODAsIDcyMCkp
OwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUo
U0NBTEVfQVNQRUNUX0JBTEFOQ0VELCAwLjBmLCAxMjgwLCA3MjApKTsKLSAgfQotCi0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RaZXJvRGlzcGxheVNpemUoKSB7Ci0gICAg
YXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNU
X0ZJVCwgMTYuMGYgLyA5LCAwLCAwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgwLCAw
KSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0ZJTEwsIDE2LjBmIC8gOSwgMCwgMCkpOwot
ICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMCwgMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FT
UEVDVF9CQUxBTkNFRCwgMTYuMGYgLyA5LCAwLCAwKSk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0g
IHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0RGlzcGxheVNpemVQZXJmZWN0Rml0KCkgewotICAgIGFz
c2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQ
RUNUX0ZJVCwgMTYuMGYgLyA5LCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBv
aW50KDEyODAsIDcyMCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSUxMLCAxNi4wZiAv
IDksIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoMTI4MCwgNzIwKSwg
Z2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCAxNi4wZiAvIDksIDEyODAsIDcy
MCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoNzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNp
emUoU0NBTEVfQVNQRUNUX0ZJVCwgOS4wZiAvIDE2LCA3MjAsIDEyODApKTsKLSAgICBhc3NlcnRF
cXVhbHMobmV3IFBvaW50KDcyMCwgMTI4MCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9G
SUxMLCA5LjBmIC8gMTYsIDcyMCwgMTI4MCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQo
NzIwLCAxMjgwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCA5LjBmIC8g
MTYsIDcyMCwgMTI4MCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZv
aWQgdGVzdExhbmRzY2FwZVZpZGVvSW5Qb3J0cmFpdERpc3BsYXkoKSB7Ci0gICAgYXNzZXJ0RXF1
YWxzKG5ldyBQb2ludCg3MjAsIDQwNSksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQs
IDE2LjBmIC8gOSwgNzIwLCAxMjgwKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg3MjAs
IDEyODApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1RfRklMTCwgMTYuMGYgLyA5LCA3MjAs
IDEyODApKTsKLSAgICBhc3NlcnRFcXVhbHMobmV3IFBvaW50KDcyMCwgNzIwKSwgZ2V0RGlzcGxh
eVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCAxNi4wZiAvIDksIDcyMCwgMTI4MCkpOwotICB9
Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFBvcnRyYWl0VmlkZW9J
bkxhbmRzY2FwZURpc3BsYXkoKSB7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCg0MDUsIDcy
MCksIGdldERpc3BsYXlTaXplKFNDQUxFX0FTUEVDVF9GSVQsIDkuMGYgLyAxNiwgMTI4MCwgNzIw
KSk7Ci0gICAgYXNzZXJ0RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6
ZShTQ0FMRV9BU1BFQ1RfRklMTCwgOS4wZiAvIDE2LCAxMjgwLCA3MjApKTsKLSAgICBhc3NlcnRF
cXVhbHMobmV3IFBvaW50KDcyMCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JB
TEFOQ0VELCA5LjBmIC8gMTYsIDEyODAsIDcyMCkpOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgc3RhdGljIHZvaWQgdGVzdEZvdXJUb1RocmVlVmlkZW9JblNpeHRlZW5Ub05pbmVEaXNw
bGF5KCkgewotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQoOTYwLCA3MjApLCBnZXREaXNwbGF5
U2l6ZShTQ0FMRV9BU1BFQ1RfRklULCA0LjBmIC8gMywgMTI4MCwgNzIwKSk7Ci0gICAgYXNzZXJ0
RXF1YWxzKG5ldyBQb2ludCgxMjgwLCA3MjApLCBnZXREaXNwbGF5U2l6ZShTQ0FMRV9BU1BFQ1Rf
RklMTCwgNC4wZiAvIDMsIDEyODAsIDcyMCkpOwotICAgIGFzc2VydEVxdWFscyhuZXcgUG9pbnQo
MTI4MCwgNzIwKSwgZ2V0RGlzcGxheVNpemUoU0NBTEVfQVNQRUNUX0JBTEFOQ0VELCA0LjBmIC8g
MywgMTI4MCwgNzIwKSk7Ci0gIH0KLQotICAvLyBPbmx5IGtlZXAgMiByb3VuZGVkIGRlY2ltYWxz
IHRvIG1ha2UgZmxvYXQgY29tcGFyaXNvbiByb2J1c3QuCi0gIHByaXZhdGUgc3RhdGljIGRvdWJs
ZVtdIHJvdW5kKGZsb2F0W10gYXJyYXkpIHsKLSAgICBhc3NlcnRFcXVhbHMoMTYsIGFycmF5Lmxl
bmd0aCk7Ci0gICAgZmluYWwgZG91YmxlW10gZG91YmxlQXJyYXkgPSBuZXcgZG91YmxlWzE2XTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDE2OyArK2kpIHsKLSAgICAgIGRvdWJsZUFycmF5W2ld
ID0gTWF0aC5yb3VuZCgxMDAgKiBhcnJheVtpXSkgLyAxMDAuMDsKLSAgICB9Ci0gICAgcmV0dXJu
IGRvdWJsZUFycmF5OwotICB9Ci0KLSAgLy8gQnJpZWYgc3VtbWFyeSBhYm91dCBtYXRyaXggdHJh
bnNmb3JtYXRpb25zOgotICAvLyBBIGNvb3JkaW5hdGUgcCA9IFt1LCB2LCAwLCAxXSBpcyB0cmFu
c2Zvcm1lZCBieSBtYXRyaXggbSBsaWtlIHRoaXMgcCcgPSBbdScsIHYnLCAwLCAxXSA9IG0gKiBw
LgotICAvLyBPcGVuR0wgdXNlcyBjb2x1bW4tbWFqb3Igb3JkZXIsIHNvOgotICAvLyB1JyA9IHUg
KiBtWzBdICsgdiAqIG1bNF0gKyBtWzEyXS4KLSAgLy8gdicgPSB1ICogbVsxXSArIHYgKiBtWzVd
ICsgbVsxM10uCi0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdExheW91
dE1hdHJpeERlZmF1bHQoKSB7Ci0gICAgZmluYWwgZmxvYXQgbGF5b3V0TWF0cml4W10gPSBnZXRM
YXlvdXRNYXRyaXgoZmFsc2UsIDEuMGYsIDEuMGYpOwotICAgIC8vIEFzc2VydDoKLSAgICAvLyB1
JyA9IHUuCi0gICAgLy8gdicgPSB2LgotICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBNb3Jl
QXNzZXJ0cy5hc3NlcnRFcXVhbHMobmV3IGRvdWJsZVtdIHsKLSAgICAgICAgMSwgMCwgMCwgMCwK
LSAgICAgICAgMCwgMSwgMCwgMCwKLSAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgMCwgMCwg
MCwgMX0sIHJvdW5kKGxheW91dE1hdHJpeCkpOwotICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICB9
Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdExheW91dE1hdHJpeE1p
cnJvcigpIHsKLSAgICBmaW5hbCBmbG9hdCBsYXlvdXRNYXRyaXhbXSA9IGdldExheW91dE1hdHJp
eCh0cnVlLCAxLjBmLCAxLjBmKTsKLSAgICAvLyBBc3NlcnQ6Ci0gICAgLy8gdScgPSAxIC0gdS4K
LSAgICAvLyB2JyA9IHYuCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIE1vcmVBc3NlcnRz
LmFzc2VydEVxdWFscyhuZXcgZG91YmxlW10gewotICAgICAgICAtMSwgMCwgMCwgMCwKLSAgICAg
ICAgIDAsIDEsIDAsIDAsCi0gICAgICAgICAwLCAwLCAxLCAwLAotICAgICAgICAgMSwgMCwgMCwg
MX0sIHJvdW5kKGxheW91dE1hdHJpeCkpOwotICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICB9Ci0K
LSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdExheW91dE1hdHJpeFNjYWxl
KCkgewotICAgIC8vIFZpZGVvIGhhcyBhc3BlY3QgcmF0aW8gMiwgYnV0IGxheW91dCBpcyBzcXVh
cmUuIFRoaXMgd2lsbCBjYXVzZSBvbmx5IHRoZSBjZW50ZXIgcGFydCBvZiB0aGUKLSAgICAvLyB2
aWRlbyB0byBiZSB2aXNpYmxlLCBpLmUuIHRoZSB1IGNvb3JkaW5hdGUgd2lsbCBnbyBmcm9tIDAu
MjUgdG8gMC43NSBpbnN0ZWFkIG9mIGZyb20gMCB0byAxLgotICAgIGZpbmFsIGZsb2F0IGxheW91
dE1hdHJpeFtdID0gZ2V0TGF5b3V0TWF0cml4KGZhbHNlLCAyLjBmLCAxLjBmKTsKLSAgICAvLyBB
c3NlcnQ6Ci0gICAgLy8gdScgPSAwLjI1ICsgMC41IHUuCi0gICAgLy8gdicgPSB2LgotICAgIC8v
IGNsYW5nLWZvcm1hdCBvZmYKLSAgICBNb3JlQXNzZXJ0cy5hc3NlcnRFcXVhbHMobmV3IGRvdWJs
ZVtdIHsKLSAgICAgICAgIDAuNSwgMCwgMCwgMCwKLSAgICAgICAgICAgMCwgMSwgMCwgMCwKLSAg
ICAgICAgICAgMCwgMCwgMSwgMCwKLSAgICAgICAgMC4yNSwgMCwgMCwgMX0sIHJvdW5kKGxheW91
dE1hdHJpeCkpOwotICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICB9Ci0KLSAgQFNtYWxsVGVzdAot
ICBwdWJsaWMgc3RhdGljIHZvaWQgdGVzdFJvdGF0ZVRleHR1cmVNYXRyaXhEZWZhdWx0KCkgewot
ICAgIC8vIFRlc3QgdGhhdCByb3RhdGlvbiB3aXRoIDAgZGVncmVlcyByZXR1cm5zIGFuIGlkZW50
aWNhbCBtYXRyaXguCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIGZpbmFsIGZsb2F0W10g
bWF0cml4ID0gbmV3IGZsb2F0W10gewotICAgICAgICAxLCAyLCAzLCA0LAotICAgICAgICA1LCA2
LCA3LCA4LAotICAgICAgICA5LCAwLCAxLCAyLAotICAgICAgICAzLCA0LCA1LCA2Ci0gICAgfTsK
LSAgICAvLyBjbGFuZy1mb3JtYXQgb24KLSAgICBmaW5hbCBmbG9hdCByb3RhdGVkTWF0cml4W10g
PSByb3RhdGVUZXh0dXJlTWF0cml4KG1hdHJpeCwgMCk7Ci0gICAgTW9yZUFzc2VydHMuYXNzZXJ0
RXF1YWxzKHJvdW5kKG1hdHJpeCksIHJvdW5kKHJvdGF0ZWRNYXRyaXgpKTsKLSAgfQotCi0gIEBT
bWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RSb3RhdGVUZXh0dXJlTWF0cml4OTBE
ZWcoKSB7Ci0gICAgZmluYWwgZmxvYXQgc2FtcGxpbmdNYXRyaXhbXSA9IHJvdGF0ZVRleHR1cmVN
YXRyaXgoUmVuZGVyZXJDb21tb24uaWRlbnRpdHlNYXRyaXgoKSwgOTApOwotICAgIC8vIEFzc2Vy
dDoKLSAgICAvLyB1JyA9IDEgLSB2LgotICAgIC8vIHYnID0gdS4KLSAgICAvLyBjbGFuZy1mb3Jt
YXQgb2ZmCi0gICAgTW9yZUFzc2VydHMuYXNzZXJ0RXF1YWxzKG5ldyBkb3VibGVbXSB7Ci0gICAg
ICAgICAwLCAxLCAwLCAwLAotICAgICAgICAtMSwgMCwgMCwgMCwKLSAgICAgICAgIDAsIDAsIDEs
IDAsCi0gICAgICAgICAxLCAwLCAwLCAxfSwgcm91bmQoc2FtcGxpbmdNYXRyaXgpKTsKLSAgICAv
LyBjbGFuZy1mb3JtYXQgb24KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3RSb3RhdGVUZXh0dXJlTWF0cml4MTgwRGVnKCkgewotICAgIGZpbmFsIGZsb2F0IHNh
bXBsaW5nTWF0cml4W10gPSByb3RhdGVUZXh0dXJlTWF0cml4KFJlbmRlcmVyQ29tbW9uLmlkZW50
aXR5TWF0cml4KCksIDE4MCk7Ci0gICAgLy8gQXNzZXJ0OgotICAgIC8vIHUnID0gMSAtIHUuCi0g
ICAgLy8gdicgPSAxIC0gdi4KLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgTW9yZUFzc2Vy
dHMuYXNzZXJ0RXF1YWxzKG5ldyBkb3VibGVbXSB7Ci0gICAgICAgIC0xLCAgMCwgMCwgMCwKLSAg
ICAgICAgIDAsIC0xLCAwLCAwLAotICAgICAgICAgMCwgIDAsIDEsIDAsCi0gICAgICAgICAxLCAg
MSwgMCwgMX0sIHJvdW5kKHNhbXBsaW5nTWF0cml4KSk7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9u
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2FwaS9hbmRyb2lkdGVzdHMvc3JjL29yZy93ZWJydGMvU3VyZmFjZVRleHR1cmVIZWxwZXJUZXN0
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVGV4dHVyZUhlbHBl
clRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNl
VGV4dHVyZUhlbHBlclRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQ4OSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotcGFja2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5n
cmFwaGljcy5TdXJmYWNlVGV4dHVyZTsKLWltcG9ydCBhbmRyb2lkLm9wZW5nbC5HTEVTMjA7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnRlc3QuQWN0aXZp
dHlUZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24u
TWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24u
U21hbGxUZXN0OwotCi1pbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN1cmZh
Y2VUZXh0dXJlSGVscGVyVGVzdCBleHRlbmRzIEFjdGl2aXR5VGVzdENhc2UgewotICAvKioKLSAg
ICogTW9jayB0ZXh0dXJlIGxpc3RlbmVyIHdpdGggYmxvY2tpbmcgd2FpdCBmdW5jdGlvbmFsaXR5
LgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBNb2NrVGV4dHVyZUxpc3RlbmVy
Ci0gICAgICBpbXBsZW1lbnRzIFN1cmZhY2VUZXh0dXJlSGVscGVyLk9uVGV4dHVyZUZyYW1lQXZh
aWxhYmxlTGlzdGVuZXIgewotICAgIHB1YmxpYyBpbnQgb2VzVGV4dHVyZUlkOwotICAgIHB1Ymxp
YyBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeDsKLSAgICBwcml2YXRlIGJvb2xlYW4gaGFzTmV3RnJh
bWUgPSBmYWxzZTsKLSAgICAvLyBUaHJlYWQgd2hlcmUgZnJhbWVzIGFyZSBleHBlY3RlZCB0byBi
ZSByZWNlaXZlZCBvbi4KLSAgICBwcml2YXRlIGZpbmFsIFRocmVhZCBleHBlY3RlZFRocmVhZDsK
LQotICAgIE1vY2tUZXh0dXJlTGlzdGVuZXIoKSB7Ci0gICAgICB0aGlzLmV4cGVjdGVkVGhyZWFk
ID0gbnVsbDsKLSAgICB9Ci0KLSAgICBNb2NrVGV4dHVyZUxpc3RlbmVyKFRocmVhZCBleHBlY3Rl
ZFRocmVhZCkgewotICAgICAgdGhpcy5leHBlY3RlZFRocmVhZCA9IGV4cGVjdGVkVGhyZWFkOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvblRl
eHR1cmVGcmFtZUF2YWlsYWJsZSgKLSAgICAgICAgaW50IG9lc1RleHR1cmVJZCwgZmxvYXRbXSB0
cmFuc2Zvcm1NYXRyaXgsIGxvbmcgdGltZXN0YW1wTnMpIHsKLSAgICAgIGlmIChleHBlY3RlZFRo
cmVhZCAhPSBudWxsICYmIFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0gZXhwZWN0ZWRUaHJlYWQp
IHsKLSAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigib25UZXh0dXJlRnJh
bWVBdmFpbGFibGUgY2FsbGVkIG9uIHdyb25nIHRocmVhZC4iKTsKLSAgICAgIH0KLSAgICAgIHRo
aXMub2VzVGV4dHVyZUlkID0gb2VzVGV4dHVyZUlkOwotICAgICAgdGhpcy50cmFuc2Zvcm1NYXRy
aXggPSB0cmFuc2Zvcm1NYXRyaXg7Ci0gICAgICBoYXNOZXdGcmFtZSA9IHRydWU7Ci0gICAgICBu
b3RpZnlBbGwoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBXYWl0IGluZGVmaW5pdGVseSBm
b3IgYSBuZXcgZnJhbWUuCi0gICAgICovCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdh
aXRGb3JOZXdGcmFtZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICB3aGls
ZSAoIWhhc05ld0ZyYW1lKSB7Ci0gICAgICAgIHdhaXQoKTsKLSAgICAgIH0KLSAgICAgIGhhc05l
d0ZyYW1lID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogV2FpdCBmb3IgYSBuZXcg
ZnJhbWUsIG9yIHVudGlsIHRoZSBzcGVjaWZpZWQgdGltZW91dCBlbGFwc2VzLiBSZXR1cm5zIHRy
dWUgaWYgYSBuZXcgZnJhbWUgd2FzCi0gICAgICogcmVjZWl2ZWQgYmVmb3JlIHRoZSB0aW1lb3V0
LgotICAgICAqLwotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB3YWl0Rm9yTmV3RnJh
bWUoZmluYWwgbG9uZyB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgICBmaW5hbCBsb25nIHN0YXJ0VGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1l
KCk7Ci0gICAgICBsb25nIHRpbWVSZW1haW5pbmdNcyA9IHRpbWVvdXRNczsKLSAgICAgIHdoaWxl
ICghaGFzTmV3RnJhbWUgJiYgdGltZVJlbWFpbmluZ01zID4gMCkgewotICAgICAgICB3YWl0KHRp
bWVSZW1haW5pbmdNcyk7Ci0gICAgICAgIGZpbmFsIGxvbmcgZWxhcHNlZFRpbWVNcyA9IFN5c3Rl
bUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gc3RhcnRUaW1lTXM7Ci0gICAgICAgIHRpbWVSZW1h
aW5pbmdNcyA9IHRpbWVvdXRNcyAtIGVsYXBzZWRUaW1lTXM7Ci0gICAgICB9Ci0gICAgICBmaW5h
bCBib29sZWFuIGRpZFJlY2VpdmVGcmFtZSA9IGhhc05ld0ZyYW1lOwotICAgICAgaGFzTmV3RnJh
bWUgPSBmYWxzZTsKLSAgICAgIHJldHVybiBkaWRSZWNlaXZlRnJhbWU7Ci0gICAgfQotICB9Ci0K
LSAgLyoqIEFzc2VydCB0aGF0IHR3byBpbnRlZ2VycyBhcmUgY2xvc2UsIHdpdGggZGlmZmVyZW5j
ZSBhdCBtb3N0Ci0gICAqIHtAY29kZSB0aHJlc2hvbGR9LiAqLwotICBwdWJsaWMgc3RhdGljIHZv
aWQgYXNzZXJ0Q2xvc2UoaW50IHRocmVzaG9sZCwgaW50IGV4cGVjdGVkLCBpbnQgYWN0dWFsKSB7
Ci0gICAgaWYgKE1hdGguYWJzKGV4cGVjdGVkIC0gYWN0dWFsKSA8PSB0aHJlc2hvbGQpCi0gICAg
ICByZXR1cm47Ci0gICAgZmFpbE5vdEVxdWFscygiTm90IGNsb3NlIGVub3VnaCwgdGhyZXNob2xk
ICIgKyB0aHJlc2hvbGQsIGV4cGVjdGVkLCBhY3R1YWwpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRl
c3Qgbm9ybWFsIHVzZSBieSByZWNlaXZpbmcgdGhyZWUgdW5pZm9ybSB0ZXh0dXJlIGZyYW1lcy4g
VGV4dHVyZSBmcmFtZXMgYXJlIHJldHVybmVkIGFzIGVhcmx5Ci0gICAqIGFzIHBvc3NpYmxlLiBU
aGUgdGV4dHVyZSBwaXhlbCB2YWx1ZXMgYXJlIGluc3BlY3RlZCBieSBkcmF3aW5nIHRoZSB0ZXh0
dXJlIGZyYW1lIHRvIGEgcGl4ZWwKLSAgICogYnVmZmVyIGFuZCByZWFkaW5nIGl0IGJhY2sgd2l0
aCBnbFJlYWRQaXhlbHMoKS4KLSAgICovCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMg
dm9pZCB0ZXN0VGhyZWVDb25zdGFudENvbG9yRnJhbWVzKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSAxNjsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0
ID0gMTY7Ci0gICAgLy8gQ3JlYXRlIEVHTCBiYXNlIHdpdGggYSBwaXhlbCBidWZmZXIgYXMgZGlz
cGxheSBvdXRwdXQuCi0gICAgZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUo
bnVsbCwgRWdsQmFzZS5DT05GSUdfUElYRUxfQlVGRkVSKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVBi
dWZmZXJTdXJmYWNlKHdpZHRoLCBoZWlnaHQpOwotICAgIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3
ZXIgPSBuZXcgR2xSZWN0RHJhd2VyKCk7Ci0KLSAgICAvLyBDcmVhdGUgU3VyZmFjZVRleHR1cmVI
ZWxwZXIgYW5kIGxpc3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZh
Y2VUZXh0dXJlSGVscGVyID0gU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKAotICAgICAgICAi
U3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgZWdsQmFzZS5nZXRF
Z2xCYXNlQ29udGV4dCgpKTsKLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVy
ID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5z
dGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3Vy
ZmFjZVRleHR1cmUoKS5zZXREZWZhdWx0QnVmZmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAg
IC8vIENyZWF0ZSByZXNvdXJjZXMgZm9yIHN0dWJiaW5nIGFuIE9FUyB0ZXh0dXJlIHByb2R1Y2Vy
LiB8ZWdsT2VzQmFzZXwgaGFzIHRoZSBTdXJmYWNlVGV4dHVyZSBpbgotICAgIC8vIHxzdXJmYWNl
VGV4dHVyZUhlbHBlcnwgYXMgdGhlIHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJh
c2UgZWdsT2VzQmFzZSA9IEVnbEJhc2UuY3JlYXRlKGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQo
KSwgRWdsQmFzZS5DT05GSUdfUExBSU4pOwotICAgIGVnbE9lc0Jhc2UuY3JlYXRlU3VyZmFjZShz
dXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpKTsKLSAgICBhc3NlcnRFcXVh
bHMoZWdsT2VzQmFzZS5zdXJmYWNlV2lkdGgoKSwgd2lkdGgpOwotICAgIGFzc2VydEVxdWFscyhl
Z2xPZXNCYXNlLnN1cmZhY2VIZWlnaHQoKSwgaGVpZ2h0KTsKLQotICAgIGZpbmFsIGludCByZWRb
XSA9IG5ldyBpbnRbXSB7NzksIDE0NCwgMTg1fTsKLSAgICBmaW5hbCBpbnQgZ3JlZW5bXSA9IG5l
dyBpbnRbXSB7NjYsIDIxMCwgMTYyfTsKLSAgICBmaW5hbCBpbnQgYmx1ZVtdID0gbmV3IGludFtd
IHsxNjEsIDExNywgMTU4fTsKLSAgICAvLyBEcmF3IHRocmVlIGZyYW1lcy4KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgLy8gRHJhdyBhIGNvbnN0YW50IGNvbG9yIGZy
YW1lIG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgICAgZWdsT2VzQmFzZS5tYWtlQ3VycmVu
dCgpOwotICAgICAgR0xFUzIwLmdsQ2xlYXJDb2xvcihyZWRbaV0gLyAyNTUuMGYsIGdyZWVuW2ld
IC8gMjU1LjBmLCBibHVlW2ldIC8gMjU1LjBmLCAxLjBmKTsKLSAgICAgIEdMRVMyMC5nbENsZWFy
KEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAgIC8vIHN3YXBCdWZmZXJzKCkgd2ls
bCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICAgIGVn
bE9lc0Jhc2Uuc3dhcEJ1ZmZlcnMoKTsKLQotICAgICAgLy8gV2FpdCBmb3IgYW4gT0VTIHRleHR1
cmUgdG8gYXJyaXZlIGFuZCBkcmF3IGl0IG9udG8gdGhlIHBpeGVsIGJ1ZmZlci4KLSAgICAgIGxp
c3RlbmVyLndhaXRGb3JOZXdGcmFtZSgpOwotICAgICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwot
ICAgICAgZHJhd2VyLmRyYXdPZXMoCi0gICAgICAgICAgbGlzdGVuZXIub2VzVGV4dHVyZUlkLCBs
aXN0ZW5lci50cmFuc2Zvcm1NYXRyaXgsIHdpZHRoLCBoZWlnaHQsIDAsIDAsIHdpZHRoLCBoZWln
aHQpOwotCi0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsK
LQotICAgICAgLy8gRG93bmxvYWQgdGhlIHBpeGVscyBpbiB0aGUgcGl4ZWwgYnVmZmVyIGFzIFJH
QkEuIE5vdCBhbGwgcGxhdGZvcm1zIHN1cHBvcnQgUkdCLCBlLmcuCi0gICAgICAvLyBOZXh1cyA5
LgotICAgICAgZmluYWwgQnl0ZUJ1ZmZlciByZ2JhRGF0YSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVE
aXJlY3Qod2lkdGggKiBoZWlnaHQgKiA0KTsKLSAgICAgIEdMRVMyMC5nbFJlYWRQaXhlbHMoMCwg
MCwgd2lkdGgsIGhlaWdodCwgR0xFUzIwLkdMX1JHQkEsIEdMRVMyMC5HTF9VTlNJR05FRF9CWVRF
LCByZ2JhRGF0YSk7Ci0gICAgICBHbFV0aWwuY2hlY2tOb0dMRVMyRXJyb3IoImdsUmVhZFBpeGVs
cyIpOwotCi0gICAgICAvLyBBc3NlcnQgcmVuZGVyZWQgaW1hZ2UgaXMgZXhwZWN0ZWQgY29uc3Rh
bnQgY29sb3IuCi0gICAgICB3aGlsZSAocmdiYURhdGEuaGFzUmVtYWluaW5nKCkpIHsKLSAgICAg
ICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgcmVkW2ldKTsKLSAgICAgICAg
YXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgZ3JlZW5baV0pOwotICAgICAgICBh
c3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCBibHVlW2ldKTsKLSAgICAgICAgYXNz
ZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwgMjU1KTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBkcmF3ZXIucmVsZWFzZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2Uo
KTsKLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IGRpc3Bv
c2luZyB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgd2hpbGUgaG9sZGluZyBhIHBlbmRpbmcgdGV4
dHVyZSBmcmFtZS4gVGhlIHBlbmRpbmcKLSAgICogdGV4dHVyZSBmcmFtZSBzaG91bGQgc3RpbGwg
YmUgdmFsaWQsIGFuZCB0aGlzIGlzIHRlc3RlZCBieSBkcmF3aW5nIHRoZSB0ZXh0dXJlIGZyYW1l
IHRvIGEgcGl4ZWwKLSAgICogYnVmZmVyIGFuZCByZWFkaW5nIGl0IGJhY2sgd2l0aCBnbFJlYWRQ
aXhlbHMoKS4KLSAgICovCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0
TGF0ZVJldHVybkZyYW1lKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBmaW5h
bCBpbnQgd2lkdGggPSAxNjsKLSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gMTY7Ci0gICAgLy8gQ3Jl
YXRlIEVHTCBiYXNlIHdpdGggYSBwaXhlbCBidWZmZXIgYXMgZGlzcGxheSBvdXRwdXQuCi0gICAg
ZmluYWwgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUobnVsbCwgRWdsQmFzZS5DT05G
SUdfUElYRUxfQlVGRkVSKTsKLSAgICBlZ2xCYXNlLmNyZWF0ZVBidWZmZXJTdXJmYWNlKHdpZHRo
LCBoZWlnaHQpOwotCi0gICAgLy8gQ3JlYXRlIFN1cmZhY2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0
ZW5lci4KLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBl
ciA9IFN1cmZhY2VUZXh0dXJlSGVscGVyLmNyZWF0ZSgKLSAgICAgICAgIlN1cmZhY2VUZXh0dXJl
SGVscGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQo
KSk7Ci0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4
dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmco
bGlzdGVuZXIpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCku
c2V0RGVmYXVsdEJ1ZmZlclNpemUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICAvLyBDcmVhdGUgcmVz
b3VyY2VzIGZvciBzdHViYmluZyBhbiBPRVMgdGV4dHVyZSBwcm9kdWNlci4gfGVnbE9lc0Jhc2V8
IGhhcyB0aGUgU3VyZmFjZVRleHR1cmUgaW4KLSAgICAvLyB8c3VyZmFjZVRleHR1cmVIZWxwZXJ8
IGFzIHRoZSB0YXJnZXQgRUdMU3VyZmFjZS4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbE9lc0Jhc2Ug
PSBFZ2xCYXNlLmNyZWF0ZShlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIEVnbEJhc2UuQ09O
RklHX1BMQUlOKTsKLSAgICBlZ2xPZXNCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVI
ZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbE9lc0Jhc2Uu
c3VyZmFjZVdpZHRoKCksIHdpZHRoKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsT2VzQmFzZS5zdXJm
YWNlSGVpZ2h0KCksIGhlaWdodCk7Ci0KLSAgICBmaW5hbCBpbnQgcmVkID0gNzk7Ci0gICAgZmlu
YWwgaW50IGdyZWVuID0gNjY7Ci0gICAgZmluYWwgaW50IGJsdWUgPSAxNjE7Ci0gICAgLy8gRHJh
dyBhIGNvbnN0YW50IGNvbG9yIGZyYW1lIG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAgIGVn
bE9lc0Jhc2UubWFrZUN1cnJlbnQoKTsKLSAgICBHTEVTMjAuZ2xDbGVhckNvbG9yKHJlZCAvIDI1
NS4wZiwgZ3JlZW4gLyAyNTUuMGYsIGJsdWUgLyAyNTUuMGYsIDEuMGYpOwotICAgIEdMRVMyMC5n
bENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAvLyBzd2FwQnVmZmVycygp
IHdpbGwgdWx0aW1hdGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZhaWxhYmxlKCkuCi0gICAg
ZWdsT2VzQmFzZS5zd2FwQnVmZmVycygpOwotICAgIGVnbE9lc0Jhc2UucmVsZWFzZSgpOwotCi0g
ICAgLy8gV2FpdCBmb3IgT0VTIHRleHR1cmUgZnJhbWUuCi0gICAgbGlzdGVuZXIud2FpdEZvck5l
d0ZyYW1lKCk7Ci0gICAgLy8gRGljb25uZWN0IHdoaWxlIGhvbGRpbmcgdGhlIGZyYW1lLgotICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLQotICAgIC8vIERyYXcgdGhlIHBlbmRp
bmcgdGV4dHVyZSBmcmFtZSBvbnRvIHRoZSBwaXhlbCBidWZmZXIuCi0gICAgZWdsQmFzZS5tYWtl
Q3VycmVudCgpOwotICAgIGZpbmFsIEdsUmVjdERyYXdlciBkcmF3ZXIgPSBuZXcgR2xSZWN0RHJh
d2VyKCk7Ci0gICAgZHJhd2VyLmRyYXdPZXMoCi0gICAgICAgIGxpc3RlbmVyLm9lc1RleHR1cmVJ
ZCwgbGlzdGVuZXIudHJhbnNmb3JtTWF0cml4LCB3aWR0aCwgaGVpZ2h0LCAwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICBkcmF3ZXIucmVsZWFzZSgpOwotCi0gICAgLy8gRG93bmxvYWQgdGhlIHBp
eGVscyBpbiB0aGUgcGl4ZWwgYnVmZmVyIGFzIFJHQkEuIE5vdCBhbGwgcGxhdGZvcm1zIHN1cHBv
cnQgUkdCLCBlLmcuIE5leHVzIDkuCi0gICAgZmluYWwgQnl0ZUJ1ZmZlciByZ2JhRGF0YSA9IEJ5
dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qod2lkdGggKiBoZWlnaHQgKiA0KTsKLSAgICBHTEVTMjAu
Z2xSZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIEdMRVMyMC5HTF9SR0JBLCBHTEVTMjAu
R0xfVU5TSUdORURfQllURSwgcmdiYURhdGEpOwotICAgIEdsVXRpbC5jaGVja05vR0xFUzJFcnJv
cigiZ2xSZWFkUGl4ZWxzIik7Ci0gICAgZWdsQmFzZS5yZWxlYXNlKCk7Ci0KLSAgICAvLyBBc3Nl
cnQgcmVuZGVyZWQgaW1hZ2UgaXMgZXhwZWN0ZWQgY29uc3RhbnQgY29sb3IuCi0gICAgd2hpbGUg
KHJnYmFEYXRhLmhhc1JlbWFpbmluZygpKSB7Ci0gICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEu
Z2V0KCkgJiAweEZGLCByZWQpOwotICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYg
MHhGRiwgZ3JlZW4pOwotICAgICAgYXNzZXJ0RXF1YWxzKHJnYmFEYXRhLmdldCgpICYgMHhGRiwg
Ymx1ZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocmdiYURhdGEuZ2V0KCkgJiAweEZGLCAyNTUpOwot
ICAgIH0KLSAgICAvLyBMYXRlIGZyYW1lIHJldHVybiBhZnRlciBldmVyeXRoaW5nIGhhcyBiZWVu
IGRpc3Bvc2VkIGFuZCByZWxlYXNlZC4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5yZXR1cm5U
ZXh0dXJlRnJhbWUoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IGRpc3Bvc2luZyB0aGUgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIsIGJ1dCBrZWVwIHRyeWluZyB0byBwcm9kdWNlIG1vcmUgdGV4dHVy
ZSBmcmFtZXMuIE5vCi0gICAqIGZyYW1lcyBzaG91bGQgYmUgZGVsaXZlcmVkIHRvIHRoZSBsaXN0
ZW5lci4KLSAgICovCi0gIEBNZWRpdW1UZXN0Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZXN0RGlz
cG9zZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgLy8gQ3JlYXRlIFN1cmZh
Y2VUZXh0dXJlSGVscGVyIGFuZCBsaXN0ZW5lci4KLSAgICBmaW5hbCBTdXJmYWNlVGV4dHVyZUhl
bHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJlSGVscGVy
LmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAqLywgbnVs
bCk7Ci0gICAgZmluYWwgTW9ja1RleHR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBNb2NrVGV4
dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmco
bGlzdGVuZXIpOwotICAgIC8vIENyZWF0ZSBFZ2xCYXNlIHdpdGggdGhlIFN1cmZhY2VUZXh0dXJl
IGFzIHRhcmdldCBFR0xTdXJmYWNlLgotICAgIGZpbmFsIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJh
c2UuY3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsKLSAgICBlZ2xCYXNlLmNyZWF0
ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAg
ZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgIC8vIEFzc2VydCBubyBmcmFtZSBoYXMgYmVlbiBy
ZWNlaXZlZCB5ZXQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKDEp
KTsKLSAgICAvLyBEcmF3IGFuZCB3YWl0IGZvciBvbmUgZnJhbWUuCi0gICAgR0xFUzIwLmdsQ2xl
YXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIC8vIHN3YXBCdWZmZXJzKCkgd2ls
bCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKS4KLSAgICBlZ2xC
YXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgbGlzdGVuZXIud2FpdEZvck5ld0ZyYW1lKCk7Ci0gICAg
c3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAvLyBEaXNw
b3NlIC0gd2Ugc2hvdWxkIG5vdCByZWNlaXZlIGFueSB0ZXh0dXJlcyBhZnRlciB0aGlzLgotICAg
IHN1cmZhY2VUZXh0dXJlSGVscGVyLmRpc3Bvc2UoKTsKLQotICAgIC8vIERyYXcgb25lIGZyYW1l
LgotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICBl
Z2xCYXNlLnN3YXBCdWZmZXJzKCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMoKSBzaG91bGQgbm90IHRy
aWdnZXIgb25UZXh0dXJlRnJhbWVBdmFpbGFibGUoKSBiZWNhdXNlIGRpc3Bvc2VkIGhhcyBiZWVu
IGNhbGxlZC4KLSAgICAvLyBBc3NlcnQgdGhhdCBubyBPRVMgdGV4dHVyZSB3YXMgZGVsaXZlcmVk
LgotICAgIGFzc2VydEZhbHNlKGxpc3RlbmVyLndhaXRGb3JOZXdGcmFtZSg1MDApKTsKLQotICAg
IGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3QgZGlzcG9zaW5nIHRo
ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBpbW1lZGlhdGVseSBhZnRlciBpcyBoYXMgYmVlbiBzZXR1
cCB0byB1c2UgYQotICAgKiBzaGFyZWQgY29udGV4dC4gTm8gZnJhbWVzIHNob3VsZCBiZSBkZWxp
dmVyZWQgdG8gdGhlIGxpc3RlbmVyLgotICAgKi8KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgc3Rh
dGljIHZvaWQgdGVzdERpc3Bvc2VJbW1lZGlhdGVseSgpIHsKLSAgICBmaW5hbCBTdXJmYWNlVGV4
dHVyZUhlbHBlciBzdXJmYWNlVGV4dHVyZUhlbHBlciA9Ci0gICAgICAgIFN1cmZhY2VUZXh0dXJl
SGVscGVyLmNyZWF0ZSgiU3VyZmFjZVRleHR1cmVIZWxwZXIgdGVzdCIgLyogdGhyZWFkTmFtZSAq
LywgbnVsbCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICB9Ci0KLSAg
LyoqCi0gICAqIENhbGwgc3RvcExpc3RlbmluZygpLCBidXQga2VlcCB0cnlpbmcgdG8gcHJvZHVj
ZSBtb3JlIHRleHR1cmUgZnJhbWVzLiBObyBmcmFtZXMgc2hvdWxkIGJlCi0gICAqIGRlbGl2ZXJl
ZCB0byB0aGUgbGlzdGVuZXIuCi0gICAqLwotICBATWVkaXVtVGVzdAotICBwdWJsaWMgc3RhdGlj
IHZvaWQgdGVzdFN0b3BMaXN0ZW5pbmcoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBhbmQgbGlzdGVuZXIuCi0gICAgZmlu
YWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPQotICAgICAgICBT
dXJmYWNlVGV4dHVyZUhlbHBlci5jcmVhdGUoIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8q
IHRocmVhZE5hbWUgKi8sIG51bGwpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlz
dGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5lcigpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVs
cGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsKLSAgICAvLyBDcmVhdGUgRWdsQmFzZSB3aXRo
IHRoZSBTdXJmYWNlVGV4dHVyZSBhcyB0YXJnZXQgRUdMU3VyZmFjZS4KLSAgICBmaW5hbCBFZ2xC
YXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7
Ci0gICAgZWdsQmFzZS5jcmVhdGVTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZh
Y2VUZXh0dXJlKCkpOwotICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAvLyBBc3NlcnQg
bm8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LgotICAgIGFzc2VydEZhbHNlKGxpc3RlbmVy
LndhaXRGb3JOZXdGcmFtZSgxKSk7Ci0gICAgLy8gRHJhdyBhbmQgd2FpdCBmb3Igb25lIGZyYW1l
LgotICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAv
LyBzd2FwQnVmZmVycygpIHdpbGwgdWx0aW1hdGVseSB0cmlnZ2VyIG9uVGV4dHVyZUZyYW1lQXZh
aWxhYmxlKCkuCi0gICAgZWdsQmFzZS5zd2FwQnVmZmVycygpOwotICAgIGxpc3RlbmVyLndhaXRG
b3JOZXdGcmFtZSgpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFt
ZSgpOwotCi0gICAgLy8gU3RvcCBsaXN0ZW5pbmcgLSB3ZSBzaG91bGQgbm90IHJlY2VpdmUgYW55
IHRleHR1cmVzIGFmdGVyIHRoaXMuCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3Rl
bmluZygpOwotCi0gICAgLy8gRHJhdyBvbmUgZnJhbWUuCi0gICAgR0xFUzIwLmdsQ2xlYXIoR0xF
UzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAg
ICAvLyBzd2FwQnVmZmVycygpIHNob3VsZCBub3QgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWls
YWJsZSgpIGJlY2F1c2UgZGlzcG9zZWQgaGFzIGJlZW4gY2FsbGVkLgotICAgIC8vIEFzc2VydCB0
aGF0IG5vIE9FUyB0ZXh0dXJlIHdhcyBkZWxpdmVyZWQuCi0gICAgYXNzZXJ0RmFsc2UobGlzdGVu
ZXIud2FpdEZvck5ld0ZyYW1lKDUwMCkpOwotCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlz
cG9zZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFRlc3Qg
c3RvcExpc3RlbmluZygpIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBTdXJmYWNlVGV4dHVyZUhlbHBl
ciBoYXMgYmVlbiBzZXR1cC4KLSAgICovCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHN0YXRpYyB2
b2lkIHRlc3RTdG9wTGlzdGVuaW5nSW1tZWRpYXRlbHkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJlSGVscGVyIHN1cmZhY2VUZXh0dXJlSGVs
cGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxwZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVy
ZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBudWxsKTsKLSAgICBmaW5hbCBNb2NrVGV4
dHVyZUxpc3RlbmVyIGxpc3RlbmVyID0gbmV3IE1vY2tUZXh0dXJlTGlzdGVuZXIoKTsKLSAgICBz
dXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAgc3VyZmFj
ZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVy
LmRpc3Bvc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBUZXN0IHN0b3BMaXN0ZW5pbmcoKSBpbW1l
ZGlhdGVseSBhZnRlciB0aGUgU3VyZmFjZVRleHR1cmVIZWxwZXIgaGFzIGJlZW4gc2V0dXAgb24g
dGhlIGhhbmRsZXIKLSAgICogdGhyZWFkLgotICAgKi8KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMg
c3RhdGljIHZvaWQgdGVzdFN0b3BMaXN0ZW5pbmdJbW1lZGlhdGVseU9uSGFuZGxlclRocmVhZCgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZmluYWwgU3VyZmFjZVRleHR1cmVI
ZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPQotICAgICAgICBTdXJmYWNlVGV4dHVyZUhlbHBl
ci5jcmVhdGUoIlN1cmZhY2VUZXh0dXJlSGVscGVyIHRlc3QiIC8qIHRocmVhZE5hbWUgKi8sIG51
bGwpOwotICAgIGZpbmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTW9ja1Rl
eHR1cmVMaXN0ZW5lcigpOwotCi0gICAgZmluYWwgQ291bnREb3duTGF0Y2ggc3RvcExpc3Rlbmlu
Z0JhcnJpZXIgPSBuZXcgQ291bnREb3duTGF0Y2goMSk7Ci0gICAgZmluYWwgQ291bnREb3duTGF0
Y2ggc3RvcExpc3RlbmluZ0JhcnJpZXJEb25lID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAg
IC8vIFN0YXJ0IGJ5IHBvc3RpbmcgdG8gdGhlIGhhbmRsZXIgdGhyZWFkIHRvIGtlZXAgaXQgb2Nj
dXBpZWQuCi0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZ2V0SGFuZGxlcigpLnBvc3QobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5KHN0b3BMaXN0ZW5pbmdCYXJy
aWVyKTsKLSAgICAgICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RvcExpc3RlbmluZygpOwotICAg
ICAgICBzdG9wTGlzdGVuaW5nQmFycmllckRvbmUuY291bnREb3duKCk7Ci0gICAgICB9Ci0gICAg
fSk7Ci0KLSAgICAvLyBzdGFydExpc3RlbmluZygpIGlzIGFzeW5jaHJvbm91cyBhbmQgd2lsbCBw
b3N0IHRvIHRoZSBvY2N1cGllZCBoYW5kbGVyIHRocmVhZC4KLSAgICBzdXJmYWNlVGV4dHVyZUhl
bHBlci5zdGFydExpc3RlbmluZyhsaXN0ZW5lcik7Ci0gICAgLy8gV2FpdCBmb3Igc3RvcExpc3Rl
bmluZygpIHRvIGJlIGNhbGxlZCBvbiB0aGUgaGFuZGxlciB0aHJlYWQuCi0gICAgc3RvcExpc3Rl
bmluZ0JhcnJpZXIuY291bnREb3duKCk7Ci0gICAgc3RvcExpc3RlbmluZ0JhcnJpZXJEb25lLmF3
YWl0KCk7Ci0gICAgLy8gV2FpdCB1bnRpbCBoYW5kbGVyIHRocmVhZCBpcyBpZGxlIHRvIHRyeSB0
byBjYXRjaCBsYXRlIHN0YXJ0TGlzdGVuaW5nKCkgY2FsbC4KLSAgICBmaW5hbCBDb3VudERvd25M
YXRjaCBiYXJyaWVyID0gbmV3IENvdW50RG93bkxhdGNoKDEpOwotICAgIHN1cmZhY2VUZXh0dXJl
SGVscGVyLmdldEhhbmRsZXIoKS5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBiYXJyaWVyLmNvdW50RG93bigp
OwotICAgICAgfQotICAgIH0pOwotICAgIFRocmVhZFV0aWxzLmF3YWl0VW5pbnRlcnJ1cHRpYmx5
KGJhcnJpZXIpOwotICAgIC8vIFByZXZpb3VzIHN0YXJ0TGlzdGVuaW5nKCkgY2FsbCBzaG91bGQg
bmV2ZXIgaGF2ZSB0YWtlbiBwbGFjZSBhbmQgaXQgc2hvdWxkIGJlIG9rIHRvIGNhbGwgaXQKLSAg
ICAvLyBhZ2Fpbi4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdGFydExpc3RlbmluZyhsaXN0
ZW5lcik7Ci0KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5kaXNwb3NlKCk7Ci0gIH0KLQotICAv
KioKLSAgICogVGVzdCBjYWxsaW5nIHN0YXJ0TGlzdGVuaW5nKCkgd2l0aCBhIG5ldyBsaXN0ZW5l
ciBhZnRlciBzdG9wTGlzdGVuaW5nKCkgaGFzIGJlZW4gY2FsbGVkLgotICAgKi8KLSAgQE1lZGl1
bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RSZXN0YXJ0TGlzdGVuaW5nV2l0aE5ld0xp
c3RlbmVyKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAvLyBDcmVhdGUgU3Vy
ZmFjZVRleHR1cmVIZWxwZXIgYW5kIGxpc3RlbmVyLgotICAgIGZpbmFsIFN1cmZhY2VUZXh0dXJl
SGVscGVyIHN1cmZhY2VUZXh0dXJlSGVscGVyID0KLSAgICAgICAgU3VyZmFjZVRleHR1cmVIZWxw
ZXIuY3JlYXRlKCJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0IiAvKiB0aHJlYWROYW1lICovLCBu
dWxsKTsKLSAgICBmaW5hbCBNb2NrVGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyMSA9IG5ldyBNb2Nr
VGV4dHVyZUxpc3RlbmVyKCk7Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5p
bmcobGlzdGVuZXIxKTsKLSAgICAvLyBDcmVhdGUgRWdsQmFzZSB3aXRoIHRoZSBTdXJmYWNlVGV4
dHVyZSBhcyB0YXJnZXQgRUdMU3VyZmFjZS4KLSAgICBmaW5hbCBFZ2xCYXNlIGVnbEJhc2UgPSBF
Z2xCYXNlLmNyZWF0ZShudWxsLCBFZ2xCYXNlLkNPTkZJR19QTEFJTik7Ci0gICAgZWdsQmFzZS5j
cmVhdGVTdXJmYWNlKHN1cmZhY2VUZXh0dXJlSGVscGVyLmdldFN1cmZhY2VUZXh0dXJlKCkpOwot
ICAgIGVnbEJhc2UubWFrZUN1cnJlbnQoKTsKLSAgICAvLyBBc3NlcnQgbm8gZnJhbWUgaGFzIGJl
ZW4gcmVjZWl2ZWQgeWV0LgotICAgIGFzc2VydEZhbHNlKGxpc3RlbmVyMS53YWl0Rm9yTmV3RnJh
bWUoMSkpOwotICAgIC8vIERyYXcgYW5kIHdhaXQgZm9yIG9uZSBmcmFtZS4KLSAgICBHTEVTMjAu
Z2xDbGVhcihHTEVTMjAuR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgLy8gc3dhcEJ1ZmZlcnMo
KSB3aWxsIHVsdGltYXRlbHkgdHJpZ2dlciBvblRleHR1cmVGcmFtZUF2YWlsYWJsZSgpLgotICAg
IGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLSAgICBsaXN0ZW5lcjEud2FpdEZvck5ld0ZyYW1lKCk7
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIucmV0dXJuVGV4dHVyZUZyYW1lKCk7Ci0KLSAgICAv
LyBTdG9wIGxpc3RlbmluZyAtIHxsaXN0ZW5lcjF8IHNob3VsZCBub3QgcmVjZWl2ZSBhbnkgdGV4
dHVyZXMgYWZ0ZXIgdGhpcy4KLSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5zdG9wTGlzdGVuaW5n
KCk7Ci0KLSAgICAvLyBDb25uZWN0IGRpZmZlcmVudCBsaXN0ZW5lci4KLSAgICBmaW5hbCBNb2Nr
VGV4dHVyZUxpc3RlbmVyIGxpc3RlbmVyMiA9IG5ldyBNb2NrVGV4dHVyZUxpc3RlbmVyKCk7Ci0g
ICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuc3RhcnRMaXN0ZW5pbmcobGlzdGVuZXIyKTsKLSAgICAv
LyBBc3NlcnQgbm8gZnJhbWUgaGFzIGJlZW4gcmVjZWl2ZWQgeWV0LgotICAgIGFzc2VydEZhbHNl
KGxpc3RlbmVyMi53YWl0Rm9yTmV3RnJhbWUoMSkpOwotCi0gICAgLy8gRHJhdyBvbmUgZnJhbWUu
Ci0gICAgR0xFUzIwLmdsQ2xlYXIoR0xFUzIwLkdMX0NPTE9SX0JVRkZFUl9CSVQpOwotICAgIGVn
bEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLQotICAgIC8vIENoZWNrIHRoYXQgfGxpc3RlbmVyMnwgcmVj
ZWl2ZWQgdGhlIGZyYW1lLCBhbmQgbm90IHxsaXN0ZW5lcjF8LgotICAgIGxpc3RlbmVyMi53YWl0
Rm9yTmV3RnJhbWUoKTsKLSAgICBhc3NlcnRGYWxzZShsaXN0ZW5lcjEud2FpdEZvck5ld0ZyYW1l
KDEpKTsKLQotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnJldHVyblRleHR1cmVGcmFtZSgpOwot
Ci0gICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVsZWFz
ZSgpOwotICB9Ci0KLSAgQE1lZGl1bVRlc3QKLSAgcHVibGljIHN0YXRpYyB2b2lkIHRlc3RUZXh0
dXJldG9ZVVYoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIGludCB3
aWR0aCA9IDE2OwotICAgIGZpbmFsIGludCBoZWlnaHQgPSAxNjsKLQotICAgIGZpbmFsIEVnbEJh
c2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKG51bGwsIEVnbEJhc2UuQ09ORklHX1BMQUlOKTsK
LQotICAgIC8vIENyZWF0ZSBTdXJmYWNlVGV4dHVyZUhlbHBlciBhbmQgbGlzdGVuZXIuCi0gICAg
ZmluYWwgU3VyZmFjZVRleHR1cmVIZWxwZXIgc3VyZmFjZVRleHR1cmVIZWxwZXIgPSBTdXJmYWNl
VGV4dHVyZUhlbHBlci5jcmVhdGUoCi0gICAgICAgICJTdXJmYWNlVGV4dHVyZUhlbHBlciB0ZXN0
IiAvKiB0aHJlYWROYW1lICovLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotICAgIGZp
bmFsIE1vY2tUZXh0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgTW9ja1RleHR1cmVMaXN0ZW5l
cigpOwotICAgIHN1cmZhY2VUZXh0dXJlSGVscGVyLnN0YXJ0TGlzdGVuaW5nKGxpc3RlbmVyKTsK
LSAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci5nZXRTdXJmYWNlVGV4dHVyZSgpLnNldERlZmF1bHRC
dWZmZXJTaXplKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gQ3JlYXRlIHJlc291cmNlcyBmb3Ig
c3R1YmJpbmcgYW4gT0VTIHRleHR1cmUgcHJvZHVjZXIuIHxlZ2xCYXNlfCBoYXMgdGhlIFN1cmZh
Y2VUZXh0dXJlIGluCi0gICAgLy8gfHN1cmZhY2VUZXh0dXJlSGVscGVyfCBhcyB0aGUgdGFyZ2V0
IEVHTFN1cmZhY2UuCi0KLSAgICBlZ2xCYXNlLmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZVRleHR1cmVI
ZWxwZXIuZ2V0U3VyZmFjZVRleHR1cmUoKSk7Ci0gICAgYXNzZXJ0RXF1YWxzKGVnbEJhc2Uuc3Vy
ZmFjZVdpZHRoKCksIHdpZHRoKTsKLSAgICBhc3NlcnRFcXVhbHMoZWdsQmFzZS5zdXJmYWNlSGVp
Z2h0KCksIGhlaWdodCk7Ci0KLSAgICBmaW5hbCBpbnQgcmVkW10gPSBuZXcgaW50W10gezc5LCAx
NDQsIDE4NX07Ci0gICAgZmluYWwgaW50IGdyZWVuW10gPSBuZXcgaW50W10gezY2LCAyMTAsIDE2
Mn07Ci0gICAgZmluYWwgaW50IGJsdWVbXSA9IG5ldyBpbnRbXSB7MTYxLCAxMTcsIDE1OH07Ci0K
LSAgICBmaW5hbCBpbnQgcmVmX3lbXSA9IG5ldyBpbnRbXSB7ODEsIDE4MCwgMTY4fTsKLSAgICBm
aW5hbCBpbnQgcmVmX3VbXSA9IG5ldyBpbnRbXSB7MTczLCA5MywgMTIyfTsKLSAgICBmaW5hbCBp
bnQgcmVmX3ZbXSA9IG5ldyBpbnRbXSB7MTI3LCAxMDMsIDE0MH07Ci0KLSAgICAvLyBEcmF3IHRo
cmVlIGZyYW1lcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7ICsraSkgewotICAgICAgLy8g
RHJhdyBhIGNvbnN0YW50IGNvbG9yIGZyYW1lIG9udG8gdGhlIFN1cmZhY2VUZXh0dXJlLgotICAg
ICAgZWdsQmFzZS5tYWtlQ3VycmVudCgpOwotICAgICAgR0xFUzIwLmdsQ2xlYXJDb2xvcihyZWRb
aV0gLyAyNTUuMGYsIGdyZWVuW2ldIC8gMjU1LjBmLCBibHVlW2ldIC8gMjU1LjBmLCAxLjBmKTsK
LSAgICAgIEdMRVMyMC5nbENsZWFyKEdMRVMyMC5HTF9DT0xPUl9CVUZGRVJfQklUKTsKLSAgICAg
IC8vIHN3YXBCdWZmZXJzKCkgd2lsbCB1bHRpbWF0ZWx5IHRyaWdnZXIgb25UZXh0dXJlRnJhbWVB
dmFpbGFibGUoKS4KLSAgICAgIGVnbEJhc2Uuc3dhcEJ1ZmZlcnMoKTsKLQotICAgICAgLy8gV2Fp
dCBmb3IgYW4gT0VTIHRleHR1cmUgdG8gYXJyaXZlLgotICAgICAgbGlzdGVuZXIud2FpdEZvck5l
d0ZyYW1lKCk7Ci0KLSAgICAgIC8vIE1lbW9yeSBsYXlvdXQ6IExpbmVzIGFyZSAxNiBieXRlcy4g
Rmlyc3QgMTYgbGluZXMgYXJlCi0gICAgICAvLyB0aGUgWSBkYXRhLiBUaGVzZSBhcmUgZm9sbG93
ZWQgYnkgOCBsaW5lcyB3aXRoIDggYnl0ZXMgb2YgVQotICAgICAgLy8gZGF0YSBvbiB0aGUgbGVm
dCBhbmQgOCBieXRlcyBvZiBWIGRhdGEgb24gdGhlIHJpZ2h0LgotICAgICAgLy8KLSAgICAgIC8v
IE9mZnNldAotICAgICAgLy8gICAgICAwIFlZWVlZWVlZIFlZWVlZWVlZCi0gICAgICAvLyAgICAg
MTYgWVlZWVlZWVkgWVlZWVlZWVkKLSAgICAgIC8vICAgIC4uLgotICAgICAgLy8gICAgMjQwIFlZ
WVlZWVlZIFlZWVlZWVlZCi0gICAgICAvLyAgICAyNTYgVVVVVVVVVVUgVlZWVlZWVlYKLSAgICAg
IC8vICAgIDI3MiBVVVVVVVVVVSBWVlZWVlZWVgotICAgICAgLy8gICAgLi4uCi0gICAgICAvLyAg
ICAzNjggVVVVVVVVVVUgVlZWVlZWVlYKLSAgICAgIC8vICAgIDM4NCBidWZmZXIgZW5kCi0gICAg
ICBCeXRlQnVmZmVyIGJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qod2lkdGggKiBo
ZWlnaHQgKiAzIC8gMik7Ci0gICAgICBzdXJmYWNlVGV4dHVyZUhlbHBlci50ZXh0dXJlVG9ZVVYo
Ci0gICAgICAgICAgYnVmZmVyLCB3aWR0aCwgaGVpZ2h0LCB3aWR0aCwgbGlzdGVuZXIub2VzVGV4
dHVyZUlkLCBsaXN0ZW5lci50cmFuc2Zvcm1NYXRyaXgpOwotCi0gICAgICBzdXJmYWNlVGV4dHVy
ZUhlbHBlci5yZXR1cm5UZXh0dXJlRnJhbWUoKTsKLQotICAgICAgLy8gQWxsb3cgb2ZmLWJ5LW9u
ZSBkaWZmZXJlbmNlcyBkdWUgdG8gZGlmZmVyZW50IHJvdW5kaW5nLgotICAgICAgd2hpbGUgKGJ1
ZmZlci5wb3NpdGlvbigpIDwgd2lkdGggKiBoZWlnaHQpIHsKLSAgICAgICAgYXNzZXJ0Q2xvc2Uo
MSwgYnVmZmVyLmdldCgpICYgMHhmZiwgcmVmX3lbaV0pOwotICAgICAgfQotICAgICAgd2hpbGUg
KGJ1ZmZlci5oYXNSZW1haW5pbmcoKSkgewotICAgICAgICBpZiAoYnVmZmVyLnBvc2l0aW9uKCkg
JSB3aWR0aCA8IHdpZHRoIC8gMikKLSAgICAgICAgICBhc3NlcnRDbG9zZSgxLCBidWZmZXIuZ2V0
KCkgJiAweGZmLCByZWZfdVtpXSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBhc3NlcnRDbG9z
ZSgxLCBidWZmZXIuZ2V0KCkgJiAweGZmLCByZWZfdltpXSk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgc3VyZmFjZVRleHR1cmVIZWxwZXIuZGlzcG9zZSgpOwotICAgIGVnbEJhc2UucmVsZWFzZSgp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXJPbk1l
YXN1cmVUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9TdXJmYWNlVmll
d1JlbmRlcmVyT25NZWFzdXJlVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvd2VicnRjL1N1cmZhY2VWaWV3UmVuZGVyZXJPbk1lYXN1cmVUZXN0LmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC5ncmFwaGljcy5Qb2ludDsKLWltcG9ydCBhbmRyb2lk
LnRlc3QuQWN0aXZpdHlUZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3QuVWlUaHJlYWRUZXN0
OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0
OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk1lYXN1cmVTcGVjOwotaW1wb3J0IGphdmEubmlv
LkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwu
TGlzdDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFN1cmZhY2VWaWV3UmVuZGVyZXJPbk1lYXN1cmVU
ZXN0IGV4dGVuZHMgQWN0aXZpdHlUZXN0Q2FzZSB7Ci0gIC8qKgotICAgKiBMaXN0IHdpdGggYWxs
IHBvc3NpYmxlIHNjYWxpbmcgdHlwZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBM
aXN0PFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlPiBzY2FsaW5nVHlwZXMgPSBBcnJheXMuYXNM
aXN0KAotICAgICAgUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJVCwg
UmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJTEwsCi0gICAgICBSZW5k
ZXJlckNvbW1vbi5TY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfQkFMQU5DRUQpOwotCi0gIC8qKgot
ICAgKiBMaXN0IHdpdGggTWVhc3VyZVNwZWMgbW9kZXMuCi0gICAqLwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBMaXN0PEludGVnZXI+IG1lYXN1cmVTcGVjTW9kZXMgPQotICAgICAgQXJyYXlzLmFz
TGlzdChNZWFzdXJlU3BlYy5FWEFDVExZLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLQotICAvKioK
LSAgICogUmV0dXJucyBhIGR1bW15IFlVViBmcmFtZS4KLSAgICovCi0gIHN0YXRpYyBWaWRlb1Jl
bmRlcmVyLkk0MjBGcmFtZSBjcmVhdGVGcmFtZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBy
b3RhdGlvbkRlZ3JlZSkgewotICAgIGZpbmFsIGludFtdIHl1dlN0cmlkZXMgPSBuZXcgaW50W10g
e3dpZHRoLCAod2lkdGggKyAxKSAvIDIsICh3aWR0aCArIDEpIC8gMn07Ci0gICAgZmluYWwgaW50
W10geXV2SGVpZ2h0cyA9IG5ldyBpbnRbXSB7aGVpZ2h0LCAoaGVpZ2h0ICsgMSkgLyAyLCAoaGVp
Z2h0ICsgMSkgLyAyfTsKLSAgICBmaW5hbCBCeXRlQnVmZmVyW10geXV2UGxhbmVzID0gbmV3IEJ5
dGVCdWZmZXJbM107Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyArK2kpIHsKLSAgICAgIHl1
dlBsYW5lc1tpXSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoeXV2U3RyaWRlc1tpXSAqIHl1
dkhlaWdodHNbaV0pOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFZpZGVvUmVuZGVyZXIuSTQyMEZy
YW1lKHdpZHRoLCBoZWlnaHQsIHJvdGF0aW9uRGVncmVlLCB5dXZTdHJpZGVzLCB5dXZQbGFuZXMs
IDApOwotICB9Ci0KLSAgLyoqCi0gICAqIEFzc2VydCBvbk1lYXN1cmUoKSB3aXRoIGdpdmVuIHBh
cmFtZXRlcnMgd2lsbCByZXN1bHQgaW4gZXhwZWN0ZWQgbWVhc3VyZWQgc2l6ZS4KLSAgICovCi0g
IHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0TWVhc3VyZWRTaXplKFN1cmZhY2VWaWV3UmVuZGVy
ZXIgc3VyZmFjZVZpZXdSZW5kZXJlciwKLSAgICAgIFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBl
IHNjYWxpbmdUeXBlLCBTdHJpbmcgZnJhbWVEaW1lbnNpb25zLCBpbnQgZXhwZWN0ZWRXaWR0aCwK
LSAgICAgIGludCBleHBlY3RlZEhlaWdodCwgaW50IHdpZHRoU3BlYywgaW50IGhlaWdodFNwZWMp
IHsKLSAgICBzdXJmYWNlVmlld1JlbmRlcmVyLnNldFNjYWxpbmdUeXBlKHNjYWxpbmdUeXBlKTsK
LSAgICBzdXJmYWNlVmlld1JlbmRlcmVyLm9uTWVhc3VyZSh3aWR0aFNwZWMsIGhlaWdodFNwZWMp
OwotICAgIGZpbmFsIGludCBtZWFzdXJlZFdpZHRoID0gc3VyZmFjZVZpZXdSZW5kZXJlci5nZXRN
ZWFzdXJlZFdpZHRoKCk7Ci0gICAgZmluYWwgaW50IG1lYXN1cmVkSGVpZ2h0ID0gc3VyZmFjZVZp
ZXdSZW5kZXJlci5nZXRNZWFzdXJlZEhlaWdodCgpOwotICAgIGlmIChtZWFzdXJlZFdpZHRoICE9
IGV4cGVjdGVkV2lkdGggfHwgbWVhc3VyZWRIZWlnaHQgIT0gZXhwZWN0ZWRIZWlnaHQpIHsKLSAg
ICAgIGZhaWwoIm9uTWVhc3VyZSgiICsgTWVhc3VyZVNwZWMudG9TdHJpbmcod2lkdGhTcGVjKSAr
ICIsICIgKyBNZWFzdXJlU3BlYy50b1N0cmluZyhoZWlnaHRTcGVjKQotICAgICAgICAgICsgIiki
Ci0gICAgICAgICAgKyAiIHdpdGggc2NhbGluZyB0eXBlICIgKyBzY2FsaW5nVHlwZSArICIgYW5k
IGZyYW1lOiAiICsgZnJhbWVEaW1lbnNpb25zCi0gICAgICAgICAgKyAiIGV4cGVjdGVkIG1lYXN1
cmVkIHNpemUgIiArIGV4cGVjdGVkV2lkdGggKyAieCIgKyBleHBlY3RlZEhlaWdodCArICIsIGJ1
dCB3YXMgIgotICAgICAgICAgICsgbWVhc3VyZWRXaWR0aCArICJ4IiArIG1lYXN1cmVkSGVpZ2h0
KTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCBob3cgU3VyZmFjZVZpZXdSZW5kZXJl
ci5vbk1lYXN1cmUoKSBiZWhhdmVzIHdoZW4gbm8gZnJhbWUgaGFzIGJlZW4gZGVsaXZlcmVkLgot
ICAgKi8KLSAgQFVpVGhyZWFkVGVzdAotICBATWVkaXVtVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
Tm9GcmFtZSgpIHsKLSAgICBmaW5hbCBTdXJmYWNlVmlld1JlbmRlcmVyIHN1cmZhY2VWaWV3UmVu
ZGVyZXIgPQotICAgICAgICBuZXcgU3VyZmFjZVZpZXdSZW5kZXJlcihnZXRJbnN0cnVtZW50YXRp
b24oKS5nZXRDb250ZXh0KCkpOwotICAgIGZpbmFsIFN0cmluZyBmcmFtZURpbWVuc2lvbnMgPSAi
bnVsbCI7Ci0KLSAgICAvLyBUZXN0IGJlaGF2aW91ciBiZWZvcmUgU3VyZmFjZVZpZXdSZW5kZXJl
ci5pbml0KCkgaXMgY2FsbGVkLgotICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUg
c2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgIGZvciAoaW50IG1lYXN1cmVTcGVj
TW9kZSA6IG1lYXN1cmVTcGVjTW9kZXMpIHsKLSAgICAgICAgZmluYWwgaW50IHplcm9NZWFzdXJl
U2l6ZSA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygwLCBtZWFzdXJlU3BlY01vZGUpOwot
ICAgICAgICBhc3NlcnRNZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5
cGUsIGZyYW1lRGltZW5zaW9ucywgMCwgMCwgemVyb01lYXN1cmVTaXplLAotICAgICAgICAgICAg
emVyb01lYXN1cmVTaXplKTsKLSAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3
UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDEyODAsIDcyMCwKLSAgICAg
ICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygxMjgwLCBtZWFzdXJlU3BlY01vZGUp
LAotICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDcyMCwgbWVhc3VyZVNw
ZWNNb2RlKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGVzdCBiZWhhdmlvdXIgYWZ0ZXIg
U3VyZmFjZVZpZXdSZW5kZXJlci5pbml0KCkgaXMgY2FsbGVkLCBidXQgc3RpbGwgbm8gZnJhbWUu
Ci0gICAgc3VyZmFjZVZpZXdSZW5kZXJlci5pbml0KChFZ2xCYXNlLkNvbnRleHQpIG51bGwsIG51
bGwpOwotICAgIGZvciAoUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBz
Y2FsaW5nVHlwZXMpIHsKLSAgICAgIGZvciAoaW50IG1lYXN1cmVTcGVjTW9kZSA6IG1lYXN1cmVT
cGVjTW9kZXMpIHsKLSAgICAgICAgZmluYWwgaW50IHplcm9NZWFzdXJlU2l6ZSA9IE1lYXN1cmVT
cGVjLm1ha2VNZWFzdXJlU3BlYygwLCBtZWFzdXJlU3BlY01vZGUpOwotICAgICAgICBhc3NlcnRN
ZWFzdXJlZFNpemUoc3VyZmFjZVZpZXdSZW5kZXJlciwgc2NhbGluZ1R5cGUsIGZyYW1lRGltZW5z
aW9ucywgMCwgMCwgemVyb01lYXN1cmVTaXplLAotICAgICAgICAgICAgemVyb01lYXN1cmVTaXpl
KTsKLSAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxp
bmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDEyODAsIDcyMCwKLSAgICAgICAgICAgIE1lYXN1cmVT
cGVjLm1ha2VNZWFzdXJlU3BlYygxMjgwLCBtZWFzdXJlU3BlY01vZGUpLAotICAgICAgICAgICAg
TWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDcyMCwgbWVhc3VyZVNwZWNNb2RlKSk7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgc3VyZmFjZVZpZXdSZW5kZXJlci5yZWxlYXNlKCk7Ci0gIH0KLQot
ICAvKioKLSAgICogVGVzdCBob3cgU3VyZmFjZVZpZXdSZW5kZXJlci5vbk1lYXN1cmUoKSBiZWhh
dmVzIHdpdGggYSAxMjgweDcyMCBmcmFtZS4KLSAgICovCi0gIEBVaVRocmVhZFRlc3QKLSAgQE1l
ZGl1bVRlc3QKLSAgcHVibGljIHZvaWQgdGVzdEZyYW1lMTI4MHg3MjAoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGZpbmFsIFN1cmZhY2VWaWV3UmVuZGVyZXIgc3VyZmFjZVZp
ZXdSZW5kZXJlciA9Ci0gICAgICAgIG5ldyBTdXJmYWNlVmlld1JlbmRlcmVyKGdldEluc3RydW1l
bnRhdGlvbigpLmdldENvbnRleHQoKSk7Ci0gICAgLyoqCi0gICAgICogTW9jayByZW5kZXJlciBl
dmVudHMgd2l0aCBibG9ja2luZyB3YWl0IGZ1bmN0aW9uYWxpdHkgZm9yIGZyYW1lIHNpemUgY2hh
bmdlcy4KLSAgICAgKi8KLSAgICBjbGFzcyBNb2NrUmVuZGVyZXJFdmVudHMgaW1wbGVtZW50cyBS
ZW5kZXJlckNvbW1vbi5SZW5kZXJlckV2ZW50cyB7Ci0gICAgICBwcml2YXRlIGludCBmcmFtZVdp
ZHRoOwotICAgICAgcHJpdmF0ZSBpbnQgZnJhbWVIZWlnaHQ7Ci0gICAgICBwcml2YXRlIGludCBy
b3RhdGlvbjsKLQotICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHdhaXRGb3JGcmFtZVNp
emUoaW50IGZyYW1lV2lkdGgsIGludCBmcmFtZUhlaWdodCwgaW50IHJvdGF0aW9uKQotICAgICAg
ICAgIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHdoaWxlICh0aGlzLmZy
YW1lV2lkdGggIT0gZnJhbWVXaWR0aCB8fCB0aGlzLmZyYW1lSGVpZ2h0ICE9IGZyYW1lSGVpZ2h0
Ci0gICAgICAgICAgICB8fCB0aGlzLnJvdGF0aW9uICE9IHJvdGF0aW9uKSB7Ci0gICAgICAgICAg
d2FpdCgpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIG9uRmlyc3RG
cmFtZVJlbmRlcmVkKCkge30KLQotICAgICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uRnJh
bWVSZXNvbHV0aW9uQ2hhbmdlZCgKLSAgICAgICAgICBpbnQgZnJhbWVXaWR0aCwgaW50IGZyYW1l
SGVpZ2h0LCBpbnQgcm90YXRpb24pIHsKLSAgICAgICAgdGhpcy5mcmFtZVdpZHRoID0gZnJhbWVX
aWR0aDsKLSAgICAgICAgdGhpcy5mcmFtZUhlaWdodCA9IGZyYW1lSGVpZ2h0OwotICAgICAgICB0
aGlzLnJvdGF0aW9uID0gcm90YXRpb247Ci0gICAgICAgIG5vdGlmeUFsbCgpOwotICAgICAgfQot
ICAgIH0KLSAgICBmaW5hbCBNb2NrUmVuZGVyZXJFdmVudHMgcmVuZGVyZXJFdmVudHMgPSBuZXcg
TW9ja1JlbmRlcmVyRXZlbnRzKCk7Ci0gICAgc3VyZmFjZVZpZXdSZW5kZXJlci5pbml0KChFZ2xC
YXNlLkNvbnRleHQpIG51bGwsIHJlbmRlcmVyRXZlbnRzKTsKLQotICAgIC8vIFRlc3QgZGlmZmVy
ZW50IHJvdGF0aW9uIGRlZ3Jlc3MsIGJ1dCBzYW1lIHJvdGF0ZWQgc2l6ZS4KLSAgICBmb3IgKGlu
dCByb3RhdGlvbkRlZ3JlZSA6IG5ldyBpbnRbXSB7MCwgOTAsIDE4MCwgMjcwfSkgewotICAgICAg
ZmluYWwgaW50IHJvdGF0ZWRXaWR0aCA9IDEyODA7Ci0gICAgICBmaW5hbCBpbnQgcm90YXRlZEhl
aWdodCA9IDcyMDsKLSAgICAgIGZpbmFsIGludCB1bnJvdGF0ZWRXaWR0aCA9IChyb3RhdGlvbkRl
Z3JlZSAlIDE4MCA9PSAwID8gcm90YXRlZFdpZHRoIDogcm90YXRlZEhlaWdodCk7Ci0gICAgICBm
aW5hbCBpbnQgdW5yb3RhdGVkSGVpZ2h0ID0gKHJvdGF0aW9uRGVncmVlICUgMTgwID09IDAgPyBy
b3RhdGVkSGVpZ2h0IDogcm90YXRlZFdpZHRoKTsKLSAgICAgIGZpbmFsIFZpZGVvUmVuZGVyZXIu
STQyMEZyYW1lIGZyYW1lID0KLSAgICAgICAgICBjcmVhdGVGcmFtZSh1bnJvdGF0ZWRXaWR0aCwg
dW5yb3RhdGVkSGVpZ2h0LCByb3RhdGlvbkRlZ3JlZSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocm90
YXRlZFdpZHRoLCBmcmFtZS5yb3RhdGVkV2lkdGgoKSk7Ci0gICAgICBhc3NlcnRFcXVhbHMocm90
YXRlZEhlaWdodCwgZnJhbWUucm90YXRlZEhlaWdodCgpKTsKLSAgICAgIGZpbmFsIFN0cmluZyBm
cmFtZURpbWVuc2lvbnMgPQotICAgICAgICAgIHVucm90YXRlZFdpZHRoICsgIngiICsgdW5yb3Rh
dGVkSGVpZ2h0ICsgIiB3aXRoIHJvdGF0aW9uICIgKyByb3RhdGlvbkRlZ3JlZTsKLSAgICAgIHN1
cmZhY2VWaWV3UmVuZGVyZXIucmVuZGVyRnJhbWUoZnJhbWUpOwotICAgICAgcmVuZGVyZXJFdmVu
dHMud2FpdEZvckZyYW1lU2l6ZSh1bnJvdGF0ZWRXaWR0aCwgdW5yb3RhdGVkSGVpZ2h0LCByb3Rh
dGlvbkRlZ3JlZSk7Ci0KLSAgICAgIC8vIFRlc3QgZm9yY2luZyB0byB6ZXJvIHNpemUuCi0gICAg
ICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5
cGVzKSB7Ci0gICAgICAgIGZvciAoaW50IG1lYXN1cmVTcGVjTW9kZSA6IG1lYXN1cmVTcGVjTW9k
ZXMpIHsKLSAgICAgICAgICBmaW5hbCBpbnQgemVyb01lYXN1cmVTaXplID0gTWVhc3VyZVNwZWMu
bWFrZU1lYXN1cmVTcGVjKDAsIG1lYXN1cmVTcGVjTW9kZSk7Ci0gICAgICAgICAgYXNzZXJ0TWVh
c3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lv
bnMsIDAsIDAsCi0gICAgICAgICAgICAgIHplcm9NZWFzdXJlU2l6ZSwgemVyb01lYXN1cmVTaXpl
KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICAvLyBUZXN0IHBlcmZlY3QgZml0LgotICAg
ICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdU
eXBlcykgewotICAgICAgICBmb3IgKGludCBtZWFzdXJlU3BlY01vZGUgOiBtZWFzdXJlU3BlY01v
ZGVzKSB7Ci0gICAgICAgICAgYXNzZXJ0TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIs
IHNjYWxpbmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIHJvdGF0ZWRXaWR0aCwKLSAgICAgICAgICAg
ICAgcm90YXRlZEhlaWdodCwgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHJvdGF0ZWRXaWR0
aCwgbWVhc3VyZVNwZWNNb2RlKSwKLSAgICAgICAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1
cmVTcGVjKHJvdGF0ZWRIZWlnaHQsIG1lYXN1cmVTcGVjTW9kZSkpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIEZvcmNlIHNwZWMgc2l6ZSB3aXRoIGRpZmZlcmVudCBhc3BlY3QgcmF0
aW8gdGhhbiBmcmFtZSBhc3BlY3QgcmF0aW8uCi0gICAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNj
YWxpbmdUeXBlIHNjYWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAgICAgIGFzc2VydE1l
YXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJhbWVEaW1lbnNp
b25zLCA3MjAsIDEyODAsCi0gICAgICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMo
NzIwLCBNZWFzdXJlU3BlYy5FWEFDVExZKSwKLSAgICAgICAgICAgIE1lYXN1cmVTcGVjLm1ha2VN
ZWFzdXJlU3BlYygxMjgwLCBNZWFzdXJlU3BlYy5FWEFDVExZKSk7Ci0gICAgICB9Ci0KLSAgICAg
IGZpbmFsIGZsb2F0IHZpZGVvQXNwZWN0UmF0aW8gPSAoZmxvYXQpIHJvdGF0ZWRXaWR0aCAvIHJv
dGF0ZWRIZWlnaHQ7Ci0gICAgICB7Ci0gICAgICAgIC8vIFJlbGF4IGJvdGggd2lkdGggYW5kIGhl
aWdodCBjb25zdHJhaW50cy4KLSAgICAgICAgZmluYWwgaW50IHdpZHRoU3BlYyA9IE1lYXN1cmVT
cGVjLm1ha2VNZWFzdXJlU3BlYyg3MjAsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgICAgICBm
aW5hbCBpbnQgaGVpZ2h0U3BlYyA9IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYygxMjgwLCBN
ZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAgICAgICAgZm9yIChSZW5kZXJlckNvbW1vbi5TY2FsaW5n
VHlwZSBzY2FsaW5nVHlwZSA6IHNjYWxpbmdUeXBlcykgewotICAgICAgICAgIGZpbmFsIFBvaW50
IGV4cGVjdGVkU2l6ZSA9Ci0gICAgICAgICAgICAgIFJlbmRlcmVyQ29tbW9uLmdldERpc3BsYXlT
aXplKHNjYWxpbmdUeXBlLCB2aWRlb0FzcGVjdFJhdGlvLCA3MjAsIDEyODApOwotICAgICAgICAg
IGFzc2VydE1lYXN1cmVkU2l6ZShzdXJmYWNlVmlld1JlbmRlcmVyLCBzY2FsaW5nVHlwZSwgZnJh
bWVEaW1lbnNpb25zLCBleHBlY3RlZFNpemUueCwKLSAgICAgICAgICAgICAgZXhwZWN0ZWRTaXpl
LnksIHdpZHRoU3BlYywgaGVpZ2h0U3BlYyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHsK
LSAgICAgICAgLy8gRm9yY2Ugd2lkdGggdG8gNzIwLCBidXQgcmVsYXggaGVpZ2h0IGNvbnN0cmFp
bnQuIFRoaXMgd2lsbCBnaXZlIHRoZSBzYW1lIHJlc3VsdCBhcwotICAgICAgICAvLyBhYm92ZSwg
YmVjYXVzZSB3aWR0aCBpcyBhbHJlYWR5IHRoZSBsaW1pdGluZyBmYWN0b3IgYW5kIHdpbGwgYmUg
bWF4ZWQgb3V0LgotICAgICAgICBmaW5hbCBpbnQgd2lkdGhTcGVjID0gTWVhc3VyZVNwZWMubWFr
ZU1lYXN1cmVTcGVjKDcyMCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7Ci0gICAgICAgIGZpbmFsIGlu
dCBoZWlnaHRTcGVjID0gTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKDEyODAsIE1lYXN1cmVT
cGVjLkFUX01PU1QpOwotICAgICAgICBmb3IgKFJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlIDogc2NhbGluZ1R5cGVzKSB7Ci0gICAgICAgICAgZmluYWwgUG9pbnQgZXhwZWN0
ZWRTaXplID0KLSAgICAgICAgICAgICAgUmVuZGVyZXJDb21tb24uZ2V0RGlzcGxheVNpemUoc2Nh
bGluZ1R5cGUsIHZpZGVvQXNwZWN0UmF0aW8sIDcyMCwgMTI4MCk7Ci0gICAgICAgICAgYXNzZXJ0
TWVhc3VyZWRTaXplKHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxpbmdUeXBlLCBmcmFtZURpbWVu
c2lvbnMsIGV4cGVjdGVkU2l6ZS54LAotICAgICAgICAgICAgICBleHBlY3RlZFNpemUueSwgd2lk
dGhTcGVjLCBoZWlnaHRTcGVjKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgewotICAgICAg
ICAvLyBGb3JjZSBoZWlnaHQsIGJ1dCByZWxheCB3aWR0aCBjb25zdHJhaW50LiBUaGlzIHdpbGwg
Zm9yY2UgYSBiYWQgbGF5b3V0IHNpemUuCi0gICAgICAgIGZpbmFsIGludCB3aWR0aFNwZWMgPSBN
ZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoNzIwLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAg
ICAgICAgZmluYWwgaW50IGhlaWdodFNwZWMgPSBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMo
MTI4MCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSk7Ci0gICAgICAgIGZvciAoUmVuZGVyZXJDb21tb24u
U2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUgOiBzY2FsaW5nVHlwZXMpIHsKLSAgICAgICAgICBhc3Nl
cnRNZWFzdXJlZFNpemUoCi0gICAgICAgICAgICAgIHN1cmZhY2VWaWV3UmVuZGVyZXIsIHNjYWxp
bmdUeXBlLCBmcmFtZURpbWVuc2lvbnMsIDcyMCwgMTI4MCwgd2lkdGhTcGVjLCBoZWlnaHRTcGVj
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHN1cmZhY2VWaWV3UmVuZGVyZXIu
cmVsZWFzZSgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1dlYlJ0Y0puaUJvb3RU
ZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvYXBpL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL3dlYnJ0Yy9XZWJSdGNKbmlCb290VGVz
dC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9hcGkvYW5kcm9pZHRlc3RzL3NyYy9vcmcvd2VicnRjL1dlYlJ0Y0puaUJv
b3RUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMSArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy50ZXN0OwotCi1pbXBvcnQgYW5kcm9p
ZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0
ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLWltcG9ydCBvcmcud2VicnRjLlBlZXJD
b25uZWN0aW9uRmFjdG9yeTsKLQotLy8gVGhpcyB0ZXN0IGlzIGludGVuZGVkIHRvIHJ1biBvbiBB
Uk0gYW5kIGNhdGNoIExvYWRMaWJyYXJ5IGVycm9ycyB3aGVuIHdlIGxvYWQgdGhlIFdlYlJUQwot
Ly8gSk5JLiBJdCBjYW4ndCByZWFsbHkgYmUgc2V0dGluZyB1cCBjYWxscyBzaW5jZSBBUk0gZW11
bGF0b3JzIGFyZSB0b28gc2xvdywgYnV0IGluc3RhbnRpYXRpbmcKLS8vIGEgcGVlciBjb25uZWN0
aW9uIGlzbid0IHRpbWluZy1zZW5zaXRpdmUsIHNvIHdlIGNhbiBhdCBsZWFzdCBkbyB0aGF0Lgot
cHVibGljIGNsYXNzIFdlYlJ0Y0puaUJvb3RUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVz
dENhc2UgewotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RKbmlMb2Fkc1dpdGhvdXRF
cnJvcigpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgUGVlckNvbm5lY3Rpb25G
YWN0b3J5LmluaXRpYWxpemVBbmRyb2lkR2xvYmFscyhnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRU
YXJnZXRDb250ZXh0KCksCi0gICAgICAgIHRydWUgLyogaW5pdGlhbGl6ZUF1ZGlvICovLCB0cnVl
IC8qIGluaXRpYWxpemVWaWRlbyAqLywKLSAgICAgICAgZmFsc2UgLyogdmlkZW9Db2RlY0h3QWNj
ZWxlcmF0aW9uICovKTsKLQotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlv
bnMgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMoKTsKLSAgICBuZXcgUGVlckNv
bm5lY3Rpb25GYWN0b3J5KG9wdGlvbnMpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvdGVzdC9hbmRyb2lkdGVzdGluaXRpYWxpemVy
LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2FwaS90ZXN0L2FuZHJvaWR0ZXN0aW5pdGlhbGl6ZXIuY2MJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2FwaS90ZXN0L2Fu
ZHJvaWR0ZXN0aW5pdGlhbGl6ZXIuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw2MSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAid2VicnRjL2FwaS90ZXN0L2FuZHJvaWR0ZXN0
aW5pdGlhbGl6ZXIuaCIKLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotI2luY2x1ZGUgIndlYnJ0
Yy9iYXNlL2lnbm9yZV93dW5kZWYuaCIKLQotLy8gTm90ZTogdGhpcyBkZXBlbmRlbmN5IGlzIGRh
bmdlcm91cyBzaW5jZSBpdCByZWFjaGVzIGludG8gQ2hyb21pdW0ncyBiYXNlLgotLy8gVGhlcmUn
cyBhIHJpc2sgb2YgZS5nLiBtYWNybyBjbGFzaGVzLiBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgdXNl
ZCBpbiB0ZXN0cy4KLS8vIFNpbmNlIHdlIHVzZSBDaHJvbWVzIGJ1aWxkIHN5c3RlbSBmb3IgY3Jl
YXRpbmcgdGhlIGd0ZXN0IGJpbmFyeSwgdGhpcyBzaG91bGQKLS8vIGJlIGZpbmUuCi1SVENfUFVT
SF9JR05PUklOR19XVU5ERUYoKQotI2luY2x1ZGUgImJhc2UvYW5kcm9pZC9jb250ZXh0X3V0aWxz
LmgiCi0jaW5jbHVkZSAiYmFzZS9hbmRyb2lkL2puaV9hbmRyb2lkLmgiCi1SVENfUE9QX0lHTk9S
SU5HX1dVTkRFRigpCi0KLSNpbmNsdWRlICJ3ZWJydGMvYXBpL2FuZHJvaWQvam5pL2NsYXNzcmVm
ZXJlbmNlaG9sZGVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2FwaS9hbmRyb2lkL2puaS9qbmlfaGVs
cGVycy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9iYXNlL3NzbGFkYXB0ZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvdm9pY2VfZW5naW5lL2luY2x1
ZGUvdm9lX2Jhc2UuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLW5hbWVzcGFjZSB7Ci0KLXN0
YXRpYyBwdGhyZWFkX29uY2VfdCBnX2luaXRpYWxpemVfb25jZSA9IFBUSFJFQURfT05DRV9JTklU
OwotCi0vLyBUaGVyZSBjYW4gb25seSBiZSBvbmUgSk5JX09uTG9hZCBpbiBlYWNoIGJpbmFyeS4g
U28gc2luY2UgdGhpcyBpcyBhIEdURVNUCi0vLyBDKysgcnVubmVyIGJpbmFyeSwgd2Ugd2FudCB0
byBpbml0aWFsaXplIHRoZSBzYW1lIGdsb2JhbCBvYmplY3RzIHdlIG5vcm1hbGx5Ci0vLyBkbyBp
ZiB0aGlzIGhhZCBiZWVuIGEgSmF2YSBiaW5hcnkuCi12b2lkIEVuc3VyZUluaXRpYWxpemVkT25j
ZSgpIHsKLSAgUlRDX0NIRUNLKDo6YmFzZTo6YW5kcm9pZDo6SXNWTUluaXRpYWxpemVkKCkpOwot
ICBKTklFbnYqIGpuaSA9IDo6YmFzZTo6YW5kcm9pZDo6QXR0YWNoQ3VycmVudFRocmVhZCgpOwot
ICBKYXZhVk0qIGp2bSA9IE5VTEw7Ci0gIFJUQ19DSEVDS19FUSgwLCBqbmktPkdldEphdmFWTSgm
anZtKSk7Ci0gIGpvYmplY3QgY29udGV4dCA9IDo6YmFzZTo6YW5kcm9pZDo6R2V0QXBwbGljYXRp
b25Db250ZXh0KCkub2JqKCk7Ci0KLSAgUlRDX0NIRUNLX0dFKHdlYnJ0Y19qbmk6OkluaXRHbG9i
YWxKbmlWYXJpYWJsZXMoanZtKSwgMCk7Ci0gIFJUQ19DSEVDSyhydGM6OkluaXRpYWxpemVTU0wo
KSkgPDwgIkZhaWxlZCB0byBJbml0aWFsaXplU1NMKCkiOwotICB3ZWJydGNfam5pOjpMb2FkR2xv
YmFsQ2xhc3NSZWZlcmVuY2VIb2xkZXIoKTsKLQotICB3ZWJydGM6OlZvaWNlRW5naW5lOjpTZXRB
bmRyb2lkT2JqZWN0cyhqdm0sIGNvbnRleHQpOwotfQotCi19ICAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCi0KLXZvaWQgSW5pdGlhbGl6ZUFuZHJvaWRPYmplY3RzKCkgewotICBSVENfQ0hFQ0tfRVEo
MCwgcHRocmVhZF9vbmNlKCZnX2luaXRpYWxpemVfb25jZSwgJkVuc3VyZUluaXRpYWxpemVkT25j
ZSkpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvdGVzdC9hbmRyb2lkdGVzdGluaXRpYWxpemVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYXBpL3Rlc3QvYW5kcm9pZHRlc3Rpbml0aWFsaXplci5oCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9hcGkvdGVzdC9hbmRy
b2lkdGVzdGluaXRpYWxpemVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19BUElfVEVTVF9BTkRST0lEVEVTVElOSVRJ
QUxJWkVSX0hfCi0jZGVmaW5lIFdFQlJUQ19BUElfVEVTVF9BTkRST0lEVEVTVElOSVRJQUxJWkVS
X0hfCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi12b2lkIEluaXRpYWxpemVBbmRyb2lkT2JqZWN0
cygpOwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX0FQSV9U
RVNUX0FORFJPSURURVNUSU5JVElBTElaRVJfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Jhc2UvaWZhZGRycy1hbmRyb2lkLmNjCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Jhc2UvaWZhZGRy
cy1hbmRyb2lkLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9iYXNlL2lmYWRkcnMtYW5kcm9pZC5jYwkobm9uZXhpc3RlbnQp
CkBAIC0xLDIyMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEyIFRoZSBXZWJSVEMgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWYgZGVmaW5lZChXRUJS
VENfQU5EUk9JRCkKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9pZmFkZHJzLWFuZHJvaWQuaCIKLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4K
LSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVk
ZSA8bmV0L2lmLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNp
bmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0K
LW5hbWVzcGFjZSB7Ci0KLXN0cnVjdCBuZXRsaW5rcmVxdWVzdCB7Ci0gIG5sbXNnaGRyIGhlYWRl
cjsKLSAgaWZhZGRybXNnIG1zZzsKLX07Ci0KLWNvbnN0IGludCBrTWF4UmVhZFNpemUgPSA0MDk2
OwotCi19ICAvLyBuYW1lc3BhY2UKLQotbmFtZXNwYWNlIHJ0YyB7Ci0KLWludCBzZXRfaWZuYW1l
KHN0cnVjdCBpZmFkZHJzKiBpZmFkZHIsIGludCBpbnRlcmZhY2UpIHsKLSAgY2hhciBidWZbSUZO
QU1TSVpdID0gezB9OwotICBjaGFyKiBuYW1lID0gaWZfaW5kZXh0b25hbWUoaW50ZXJmYWNlLCBi
dWYpOwotICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIGlmYWRk
ci0+aWZhX25hbWUgPSBuZXcgY2hhcltzdHJsZW4obmFtZSkgKyAxXTsKLSAgc3RybmNweShpZmFk
ZHItPmlmYV9uYW1lLCBuYW1lLCBzdHJsZW4obmFtZSkgKyAxKTsKLSAgcmV0dXJuIDA7Ci19Ci0K
LWludCBzZXRfZmxhZ3Moc3RydWN0IGlmYWRkcnMqIGlmYWRkcikgewotICBpbnQgZmQgPSBzb2Nr
ZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7Ci0gIGlmIChmZCA9PSAtMSkgewotICAgIHJldHVy
biAtMTsKLSAgfQotICBpZnJlcSBpZnI7Ci0gIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7
Ci0gIHN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpZmFkZHItPmlmYV9uYW1lLCBJRk5BTVNJWiAtIDEp
OwotICBpbnQgcmMgPSBpb2N0bChmZCwgU0lPQ0dJRkZMQUdTLCAmaWZyKTsKLSAgY2xvc2UoZmQp
OwotICBpZiAocmMgPT0gLTEpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaWZhZGRyLT5pZmFf
ZmxhZ3MgPSBpZnIuaWZyX2ZsYWdzOwotICByZXR1cm4gMDsKLX0KLQotaW50IHNldF9hZGRyZXNz
ZXMoc3RydWN0IGlmYWRkcnMqIGlmYWRkciwgaWZhZGRybXNnKiBtc2csIHZvaWQqIGRhdGEsCi0g
ICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKSB7Ci0gIGlmIChtc2ctPmlmYV9mYW1pbHkgPT0g
QUZfSU5FVCkgewotICAgIHNvY2thZGRyX2luKiBzYSA9IG5ldyBzb2NrYWRkcl9pbjsKLSAgICBz
YS0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgbWVtY3B5KCZzYS0+c2luX2FkZHIsIGRhdGEs
IGxlbik7Ci0gICAgaWZhZGRyLT5pZmFfYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIq
PihzYSk7Ci0gIH0gZWxzZSBpZiAobXNnLT5pZmFfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0gICAg
c29ja2FkZHJfaW42KiBzYSA9IG5ldyBzb2NrYWRkcl9pbjY7Ci0gICAgc2EtPnNpbjZfZmFtaWx5
ID0gQUZfSU5FVDY7Ci0gICAgc2EtPnNpbjZfc2NvcGVfaWQgPSBtc2ctPmlmYV9pbmRleDsKLSAg
ICBtZW1jcHkoJnNhLT5zaW42X2FkZHIsIGRhdGEsIGxlbik7Ci0gICAgaWZhZGRyLT5pZmFfYWRk
ciA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIqPihzYSk7Ci0gIH0gZWxzZSB7Ci0gICAgcmV0
dXJuIC0xOwotICB9Ci0gIHJldHVybiAwOwotfQotCi1pbnQgbWFrZV9wcmVmaXhlcyhzdHJ1Y3Qg
aWZhZGRycyogaWZhZGRyLCBpbnQgZmFtaWx5LCBpbnQgcHJlZml4bGVuKSB7Ci0gIGNoYXIqIHBy
ZWZpeCA9IE5VTEw7Ci0gIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkgewotICAgIHNvY2thZGRyX2lu
KiBtYXNrID0gbmV3IHNvY2thZGRyX2luOwotICAgIG1hc2stPnNpbl9mYW1pbHkgPSBBRl9JTkVU
OwotICAgIG1lbXNldCgmbWFzay0+c2luX2FkZHIsIDAsIHNpemVvZihpbl9hZGRyKSk7Ci0gICAg
aWZhZGRyLT5pZmFfbmV0bWFzayA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIqPihtYXNrKTsK
LSAgICBpZiAocHJlZml4bGVuID4gMzIpIHsKLSAgICAgIHByZWZpeGxlbiA9IDMyOwotICAgIH0K
LSAgICBwcmVmaXggPSByZWludGVycHJldF9jYXN0PGNoYXIqPigmbWFzay0+c2luX2FkZHIpOwot
ICB9IGVsc2UgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgewotICAgIHNvY2thZGRyX2luNiogbWFz
ayA9IG5ldyBzb2NrYWRkcl9pbjY7Ci0gICAgbWFzay0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
LSAgICBtZW1zZXQoJm1hc2stPnNpbjZfYWRkciwgMCwgc2l6ZW9mKGluNl9hZGRyKSk7Ci0gICAg
aWZhZGRyLT5pZmFfbmV0bWFzayA9IHJlaW50ZXJwcmV0X2Nhc3Q8c29ja2FkZHIqPihtYXNrKTsK
LSAgICBpZiAocHJlZml4bGVuID4gMTI4KSB7Ci0gICAgICBwcmVmaXhsZW4gPSAxMjg7Ci0gICAg
fQotICAgIHByZWZpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KCZtYXNrLT5zaW42X2FkZHIp
OwotICB9IGVsc2UgewotICAgIHJldHVybiAtMTsKLSAgfQotICBmb3IgKGludCBpID0gMDsgaSA8
IChwcmVmaXhsZW4gLyA4KTsgaSsrKSB7Ci0gICAgKnByZWZpeCsrID0gMHhGRjsKLSAgfQotICBj
aGFyIHJlbWFpbmRlciA9IDB4ZmY7Ci0gIHJlbWFpbmRlciA8PD0gKDggLSBwcmVmaXhsZW4gJSA4
KTsKLSAgKnByZWZpeCA9IHJlbWFpbmRlcjsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBwb3B1bGF0
ZV9pZmFkZHJzKHN0cnVjdCBpZmFkZHJzKiBpZmFkZHIsIGlmYWRkcm1zZyogbXNnLCB2b2lkKiBi
eXRlcywKLSAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pIHsKLSAgaWYgKHNldF9pZm5h
bWUoaWZhZGRyLCBtc2ctPmlmYV9pbmRleCkgIT0gMCkgewotICAgIHJldHVybiAtMTsKLSAgfQot
ICBpZiAoc2V0X2ZsYWdzKGlmYWRkcikgIT0gMCkgewotICAgIHJldHVybiAtMTsKLSAgfQotICBp
ZiAoc2V0X2FkZHJlc3NlcyhpZmFkZHIsIG1zZywgYnl0ZXMsIGxlbikgIT0gMCkgewotICAgIHJl
dHVybiAtMTsKLSAgfQotICBpZiAobWFrZV9wcmVmaXhlcyhpZmFkZHIsIG1zZy0+aWZhX2ZhbWls
eSwgbXNnLT5pZmFfcHJlZml4bGVuKSAhPSAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIHJl
dHVybiAwOwotfQotCi1pbnQgZ2V0aWZhZGRycyhzdHJ1Y3QgaWZhZGRycyoqIHJlc3VsdCkgewot
ICBpbnQgZmQgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19SQVcsIE5FVExJTktfUk9VVEUpOwot
ICBpZiAoZmQgPCAwKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgbmV0bGlua3JlcXVlc3Qg
aWZhZGRyX3JlcXVlc3Q7Ci0gIG1lbXNldCgmaWZhZGRyX3JlcXVlc3QsIDAsIHNpemVvZihpZmFk
ZHJfcmVxdWVzdCkpOwotICBpZmFkZHJfcmVxdWVzdC5oZWFkZXIubmxtc2dfZmxhZ3MgPSBOTE1f
Rl9ST09UIHwgTkxNX0ZfUkVRVUVTVDsKLSAgaWZhZGRyX3JlcXVlc3QuaGVhZGVyLm5sbXNnX3R5
cGUgPSBSVE1fR0VUQUREUjsKLSAgaWZhZGRyX3JlcXVlc3QuaGVhZGVyLm5sbXNnX2xlbiA9IE5M
TVNHX0xFTkdUSChzaXplb2YoaWZhZGRybXNnKSk7Ci0KLSAgc3NpemVfdCBjb3VudCA9IHNlbmQo
ZmQsICZpZmFkZHJfcmVxdWVzdCwgaWZhZGRyX3JlcXVlc3QuaGVhZGVyLm5sbXNnX2xlbiwgMCk7
Ci0gIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGNvdW50KSAhPSBpZmFkZHJfcmVxdWVzdC5oZWFk
ZXIubmxtc2dfbGVuKSB7Ci0gICAgY2xvc2UoZmQpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBz
dHJ1Y3QgaWZhZGRycyogc3RhcnQgPSBOVUxMOwotICBzdHJ1Y3QgaWZhZGRycyogY3VycmVudCA9
IE5VTEw7Ci0gIGNoYXIgYnVmW2tNYXhSZWFkU2l6ZV07Ci0gIHNzaXplX3QgYW1vdW50X3JlYWQg
PSByZWN2KGZkLCAmYnVmLCBrTWF4UmVhZFNpemUsIDApOwotICB3aGlsZSAoYW1vdW50X3JlYWQg
PiAwKSB7Ci0gICAgbmxtc2doZHIqIGhlYWRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8bmxtc2doZHIq
PigmYnVmWzBdKTsKLSAgICBzaXplX3QgaGVhZGVyX3NpemUgPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KGFtb3VudF9yZWFkKTsKLSAgICBmb3IgKCA7IE5MTVNHX09LKGhlYWRlciwgaGVhZGVyX3NpemUp
OwotICAgICAgICAgIGhlYWRlciA9IE5MTVNHX05FWFQoaGVhZGVyLCBoZWFkZXJfc2l6ZSkpIHsK
LSAgICAgIHN3aXRjaCAoaGVhZGVyLT5ubG1zZ190eXBlKSB7Ci0gICAgICAgIGNhc2UgTkxNU0df
RE9ORToKLSAgICAgICAgICAvLyBTdWNjZXNzLiBSZXR1cm4uCi0gICAgICAgICAgKnJlc3VsdCA9
IHN0YXJ0OwotICAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgY2FzZSBOTE1TR19FUlJPUjoKLSAgICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgICAgZnJl
ZWlmYWRkcnMoc3RhcnQpOwotICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgY2FzZSBSVE1f
TkVXQUREUjogewotICAgICAgICAgIGlmYWRkcm1zZyogYWRkcmVzc19tc2cgPQotICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PGlmYWRkcm1zZyo+KE5MTVNHX0RBVEEoaGVhZGVyKSk7Ci0g
ICAgICAgICAgcnRhdHRyKiBydGEgPSBJRkFfUlRBKGFkZHJlc3NfbXNnKTsKLSAgICAgICAgICBz
c2l6ZV90IHBheWxvYWRfbGVuID0gSUZBX1BBWUxPQUQoaGVhZGVyKTsKLSAgICAgICAgICB3aGls
ZSAoUlRBX09LKHJ0YSwgcGF5bG9hZF9sZW4pKSB7Ci0gICAgICAgICAgICBpZiAocnRhLT5ydGFf
dHlwZSA9PSBJRkFfQUREUkVTUykgewotICAgICAgICAgICAgICBpbnQgZmFtaWx5ID0gYWRkcmVz
c19tc2ctPmlmYV9mYW1pbHk7Ci0gICAgICAgICAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCB8
fCBmYW1pbHkgPT0gQUZfSU5FVDYpIHsKLSAgICAgICAgICAgICAgICBpZmFkZHJzKiBuZXdlc3Qg
PSBuZXcgaWZhZGRyczsKLSAgICAgICAgICAgICAgICBtZW1zZXQobmV3ZXN0LCAwLCBzaXplb2Yo
aWZhZGRycykpOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50KSB7Ci0gICAgICAgICAgICAg
ICAgICBjdXJyZW50LT5pZmFfbmV4dCA9IG5ld2VzdDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgc3RhcnQgPSBuZXdlc3Q7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIGlmIChwb3B1bGF0ZV9pZmFkZHJzKG5ld2VzdCwgYWRkcmVzc19tc2cs
IFJUQV9EQVRBKHJ0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlRB
X1BBWUxPQUQocnRhKSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgZnJlZWlmYWRkcnMoc3Rh
cnQpOwotICAgICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGN1cnJlbnQg
PSBuZXdlc3Q7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJ0
YSA9IFJUQV9ORVhUKHJ0YSwgcGF5bG9hZF9sZW4pOwotICAgICAgICAgIH0KLSAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBhbW91bnRfcmVhZCA9IHJlY3Yo
ZmQsICZidWYsIGtNYXhSZWFkU2l6ZSwgMCk7Ci0gIH0KLSAgY2xvc2UoZmQpOwotICBmcmVlaWZh
ZGRycyhzdGFydCk7Ci0gIHJldHVybiAtMTsKLX0KLQotdm9pZCBmcmVlaWZhZGRycyhzdHJ1Y3Qg
aWZhZGRycyogYWRkcnMpIHsKLSAgc3RydWN0IGlmYWRkcnMqIGxhc3QgPSBOVUxMOwotICBzdHJ1
Y3QgaWZhZGRycyogY3Vyc29yID0gYWRkcnM7Ci0gIHdoaWxlIChjdXJzb3IpIHsKLSAgICBkZWxl
dGVbXSBjdXJzb3ItPmlmYV9uYW1lOwotICAgIGRlbGV0ZSBjdXJzb3ItPmlmYV9hZGRyOwotICAg
IGRlbGV0ZSBjdXJzb3ItPmlmYV9uZXRtYXNrOwotICAgIGxhc3QgPSBjdXJzb3I7Ci0gICAgY3Vy
c29yID0gY3Vyc29yLT5pZmFfbmV4dDsKLSAgICBkZWxldGUgbGFzdDsKLSAgfQotfQotCi19ICAv
LyBuYW1lc3BhY2UgcnRjCi0jZW5kaWYgIC8vIGRlZmluZWQoV0VCUlRDX0FORFJPSUQpCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9iYXNlL2lmYWRkcnMt
YW5kcm9pZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2Jhc2UvaWZhZGRycy1hbmRyb2lkLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2Jhc2UvaWZhZGRycy1hbmRy
b2lkLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDEzIFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaWZuZGVmIFdFQlJUQ19CQVNFX0lGQUREUlNfQU5EUk9JRF9IXwotI2RlZmluZSBXRUJSVENf
QkFTRV9JRkFERFJTX0FORFJPSURfSF8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
c3lzL3NvY2tldC5oPgotCi0KLS8vIEltcGxlbWVudGF0aW9uIG9mIGdldGlmYWRkcnMgZm9yIEFu
ZHJvaWQuCi0vLyBGaWxscyBvdXQgYSBsaXN0IG9mIGlmYWRkciBzdHJ1Y3RzIChzZWUgYmVsb3cp
IHdoaWNoIGNvbnRhaW4gaW5mb3JtYXRpb24KLS8vIGFib3V0IGV2ZXJ5IG5ldHdvcmsgaW50ZXJm
YWNlIGF2YWlsYWJsZSBvbiB0aGUgaG9zdC4KLS8vIFNlZSAnbWFuIGdldGlmYWRkcnMnIG9uIExp
bnV4IG9yIE9TIFggKG5iOiBpdCBpcyBub3QgYSBQT1NJWCBmdW5jdGlvbikuCi1zdHJ1Y3QgaWZh
ZGRycyB7Ci0gIHN0cnVjdCBpZmFkZHJzKiBpZmFfbmV4dDsKLSAgY2hhciogaWZhX25hbWU7Ci0g
IHVuc2lnbmVkIGludCBpZmFfZmxhZ3M7Ci0gIHN0cnVjdCBzb2NrYWRkciogaWZhX2FkZHI7Ci0g
IHN0cnVjdCBzb2NrYWRkciogaWZhX25ldG1hc2s7Ci0gIC8vIFJlYWwgaWZhZGRycyBoYXMgYnJv
YWRjYXN0LCBwb2ludCB0byBwb2ludCBhbmQgZGF0YSBtZW1iZXJzLgotICAvLyBXZSBkb24ndCBu
ZWVkIHRoZW0gKHlldD8pLgotfTsKLQotbmFtZXNwYWNlIHJ0YyB7Ci0KLWludCBnZXRpZmFkZHJz
KHN0cnVjdCBpZmFkZHJzKiogcmVzdWx0KTsKLXZvaWQgZnJlZWlmYWRkcnMoc3RydWN0IGlmYWRk
cnMqIGFkZHJzKTsKLQotfSAgLy8gbmFtZXNwYWNlIHJ0YwotCi0jZW5kaWYgIC8vIFdFQlJUQ19C
QVNFX0lGQUREUlNfQU5EUk9JRF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZC9BbmRyb2lkTWFuaWZlc3QueG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2J1aWxkL2Fu
ZHJvaWQvQW5kcm9pZE1hbmlmZXN0LnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZC9BbmRyb2lkTWFu
aWZlc3QueG1sCShub25leGlzdGVudCkKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0KLSAgVGhpcyBpcyBhIGR1bW15IG1hbmlmZXN0
IHdoaWNoIGlzIHJlcXVpcmVkIGJ5OgotICAxLiBhYXB0IHdoZW4gZ2VuZXJhdGluZyBSLmphdmEg
aW4gamF2YS5neXBpOgotICAgICBOb3RoaW5nIGluIHRoZSBtYW5pZmVzdCBpcyB1c2VkLCBidXQg
aXQgaXMgc3RpbGwgcmVxdWlyZWQgYnkgYWFwdC4KLSAgMi4gbGludDogW21pbnx0YXJnZXRdU2Rr
VmVyc2lvbiBhcmUgcmVxdWlyZWQgYnkgbGludCBhbmQgc2hvdWxkCi0gICAgIGJlIGtlcHQgdXAt
dG8tZGF0ZS4KLS0tPgotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFu
ZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBwYWNrYWdlPSJkdW1teS5wYWNrYWdlIj4K
LQotICAgICAgPHVzZXMtc2RrIGFuZHJvaWQ6bWluU2RrVmVyc2lvbj0iMTYiIGFuZHJvaWQ6dGFy
Z2V0U2RrVmVyc2lvbj0iMjMiIC8+Ci0KLTwvbWFuaWZlc3Q+CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9idWlsZC9hbmRyb2lkL3N1cHByZXNzaW9ucy54
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvYnVpbGQvYW5kcm9pZC9zdXBwcmVzc2lvbnMueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9idWlsZC9hbmRyb2lkL3N1
cHByZXNzaW9ucy54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi08P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPGxpbnQ+Ci0gIDwhLS0gVGhlc2UgbGludCBz
ZXR0aW5ncyBpcyBmb3IgdGhlIEFuZHJvaWQgbGludGVyIHRoYXQgZ2V0cyBydW4gYnkKLSAgICAg
ICBsaW50X2FjdGlvbi5neXBpIG9uIGNvbXBpbGUgb2YgV2ViUlRDIGphdmEgY29kZS4gQWxsIFdl
YlJUQyBqYXZhIGNvZGUKLSAgICAgICBzaG91bGQgbGludCBjbGVhbmx5IGZvciB0aGUgaXNzdWVz
IGJlbG93LiAtLT4KLSAgPCEtLSBUT0RPKHBob2dsdW5kKTogbWFrZSB3b3JrIHdpdGggc3VwcHJl
c3MucHkgb3IgcmVtb3ZlIHByaW50b3V0IHJlZmVycmluZwotICAgICAgIHRvIHN1cHByZXNzLnB5
LiAtLT4KLSAgPGlzc3VlIGlkPSJOZXdBcGkiPjwvaXNzdWU+Ci0KLSAgPGlzc3VlIGlkPSJMb2Nh
bGUiIHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJTZENhcmRQYXRoIiBzZXZlcml0
eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iVXNlVmFsdWVPZiIgc2V2ZXJpdHk9Imlnbm9yZSIv
PgotICA8aXNzdWUgaWQ9IklubGluZWRBcGkiIHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlzc3Vl
IGlkPSJEZWZhdWx0TG9jYWxlIiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iQXNz
ZXJ0IiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iVXNlU3BhcnNlQXJyYXlzIiBz
ZXZlcml0eT0iaWdub3JlIi8+Ci0KLSAgPGlzc3VlIGlkPSJMb25nTG9nVGFnIiBzZXZlcml0eT0i
aWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iUmVnaXN0ZXJlZCIgc2V2ZXJpdHk9Imlnbm9yZSIvPgot
ICA8aXNzdWUgaWQ9IlJlY3ljbGUiIHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJN
aXNzaW5nUGVybWlzc2lvbiIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9IkNvbW1p
dFByZWZFZGl0cyIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9IlVudXNlZFJlc291
cmNlcyIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9Ikljb25Db2xvcnMiIHNldmVy
aXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJJY29uRGlwU2l6ZSIgc2V2ZXJpdHk9Imlnbm9y
ZSIvPgotICA8aXNzdWUgaWQ9Ikljb25EdXBsaWNhdGVzQ29uZmlnIiBzZXZlcml0eT0iaWdub3Jl
Ii8+Ci0gIDxpc3N1ZSBpZD0iUmVsYXRpdmVPdmVybGFwIiBzZXZlcml0eT0iaWdub3JlIi8+Ci0g
IDxpc3N1ZSBpZD0iUnRsQ29tcGF0IiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0i
SWNvbk1pc3NpbmdEZW5zaXR5Rm9sZGVyIiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBp
ZD0iV3JvbmdDYWxsIiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iTmV3QXBpIiBz
ZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iT2xkVGFyZ2V0QXBpIiBzZXZlcml0eT0i
aWdub3JlIi8+Ci0KLSAgPGlzc3VlIGlkPSJHb29nbGVBcHBJbmRleGluZ1dhcm5pbmciIHNldmVy
aXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJNaXNzaW5nUmVnaXN0ZXJlZCIgc2V2ZXJpdHk9
Imlnbm9yZSIvPgotCi0gIDwhLS0gVGhlc2UgYXJlIGp1c3QgZnJvbSB0aGUgZHVtbXkgQW5kcm9p
ZE1hbmlmZXN0LnhtbCB3ZSB1c2UgZm9yIGxpbnRpbmcuCi0gICAgICAgSXQncyBpbiB0aGUgc2Ft
ZSBkaXJlY3RvcnkgYXMgdGhpcyBmaWxlLiAtLT4KLSAgPGlzc3VlIGlkPSJNaXNzaW5nQXBwbGlj
YXRpb25JY29uIiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iQWxsb3dCYWNrdXAi
IHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJNaXNzaW5nVmVyc2lvbiIgc2V2ZXJp
dHk9Imlnbm9yZSIvPgotPC9saW50PgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZC90ZXN0X3J1bm5lci5weQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9idWlsZC9hbmRyb2lk
L3Rlc3RfcnVubmVyLnB5CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9idWlsZC9hbmRyb2lkL3Rlc3RfcnVubmVyLnB5CShub25l
eGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCi0jIENvcHly
aWdodCAoYykgMjAxNCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSMKLSMgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotIyB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSMgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotIyBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0jIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotCi0iIiIK
LVJ1bnMgdGVzdHMgb24gQW5kcm9pZCBkZXZpY2VzLgotCi1UaGlzIHNjcmlwdCBleGlzdHMgdG8g
YXZvaWQgV2ViUlRDIGJlaW5nIGJyb2tlbiBieSBjaGFuZ2VzIGluIHRoZSBDaHJvbWUgQW5kcm9p
ZAotdGVzdCBleGVjdXRpb24gdG9vbGNoYWluLiBJdCBhbHNvIGNvbnZlbmllbnRseSBzZXRzIHRo
ZSBDSEVDS09VVF9TT1VSQ0VfUk9PVAotZW52aXJvbm1lbnQgdmFyaWFibGUuCi0iIiIKLQotaW1w
b3J0IG9zCi1pbXBvcnQgc3lzCi0KLVNDUklQVF9ESVIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxl
X18pCi1TUkNfRElSID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihTQ1JJUFRfRElSLCBv
cy5wYXJkaXIsIG9zLnBhcmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9zLnBhcmRpcikpCi1DSFJPTUlVTV9CVUlMRF9BTkRST0lEX0RJUiA9IG9zLnBhdGguam9p
bihTUkNfRElSLCAnYnVpbGQnLCAnYW5kcm9pZCcpCi1zeXMucGF0aC5pbnNlcnQoMCwgQ0hST01J
VU1fQlVJTERfQU5EUk9JRF9ESVIpCi0KLQotaW1wb3J0IHRlc3RfcnVubmVyICAjIHB5bGludDog
ZGlzYWJsZT1XMDQwNgotCi1kZWYgbWFpbigpOgotICAjIE92ZXJyaWRlIGVudmlyb25tZW50IHZh
cmlhYmxlIHRvIG1ha2UgaXQgcG9zc2libGUgZm9yIHRoZSBzY3JpcHRzIHRvIGZpbmQKLSAgIyB0
aGUgcm9vdCBkaXJlY3RvcnkgKG91ciBzeW1saW5raW5nIG9mIHRoZSBDaHJvbWl1bSBidWlsZCB0
b29sY2hhaW4gd291bGQKLSAgIyBvdGhlcndpc2UgbWFrZSB0aGVtIGZhaWwgdG8gZG8gc28pLgot
ICBvcy5lbnZpcm9uWydDSEVDS09VVF9TT1VSQ0VfUk9PVCddID0gU1JDX0RJUgotICByZXR1cm4g
dGVzdF9ydW5uZXIubWFpbigpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gIHN5cy5l
eGl0KG1haW4oKSkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2J1aWxkL2FuZHJvaWQvdGVzdF9ydW5uZXIucHkKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46ZXhlY3V0YWJsZQojIyAtMSArMCwwICMjCi0qClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2J1aWxkL2FuZHJvaWQvQW5kcm9pZE1hbmlmZXN0LnhtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9idWlsZC9hbmRyb2lk
L0FuZHJvaWRNYW5pZmVzdC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2J1aWxkL2FuZHJvaWQvQW5kcm9pZE1hbmlmZXN0
LnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tCi0gIFRoaXMgaXMgYSBkdW1teSBtYW5pZmVzdCB3aGlj
aCBpcyByZXF1aXJlZCBieToKLSAgMS4gYWFwdCB3aGVuIGdlbmVyYXRpbmcgUi5qYXZhIGluIGph
dmEuZ3lwaToKLSAgICAgTm90aGluZyBpbiB0aGUgbWFuaWZlc3QgaXMgdXNlZCwgYnV0IGl0IGlz
IHN0aWxsIHJlcXVpcmVkIGJ5IGFhcHQuCi0gIDIuIGxpbnQ6IFttaW58dGFyZ2V0XVNka1ZlcnNp
b24gYXJlIHJlcXVpcmVkIGJ5IGxpbnQgYW5kIHNob3VsZAotICAgICBiZSBrZXB0IHVwLXRvLWRh
dGUuCi0tLT4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lk
LmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgcGFja2FnZT0iZHVtbXkucGFja2FnZSI+Ci0KLSAg
ICAgIDx1c2VzLXNkayBhbmRyb2lkOm1pblNka1ZlcnNpb249IjE2IiBhbmRyb2lkOnRhcmdldFNk
a1ZlcnNpb249IjIzIiAvPgotCi08L21hbmlmZXN0PgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZC9zdXBwcmVzc2lvbnMueG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2J1
aWxkL2FuZHJvaWQvc3VwcHJlc3Npb25zLnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZC9zdXBwcmVz
c2lvbnMueG1sCShub25leGlzdGVudCkKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxsaW50PgotICA8IS0tIFRoZXNlIGxpbnQgc2V0dGlu
Z3MgaXMgZm9yIHRoZSBBbmRyb2lkIGxpbnRlciB0aGF0IGdldHMgcnVuIGJ5Ci0gICAgICAgbGlu
dF9hY3Rpb24uZ3lwaSBvbiBjb21waWxlIG9mIFdlYlJUQyBqYXZhIGNvZGUuIEFsbCBXZWJSVEMg
amF2YSBjb2RlCi0gICAgICAgc2hvdWxkIGxpbnQgY2xlYW5seSBmb3IgdGhlIGlzc3VlcyBiZWxv
dy4gLS0+Ci0gIDwhLS0gVE9ETyhwaG9nbHVuZCk6IG1ha2Ugd29yayB3aXRoIHN1cHByZXNzLnB5
IG9yIHJlbW92ZSBwcmludG91dCByZWZlcnJpbmcKLSAgICAgICB0byBzdXBwcmVzcy5weS4gLS0+
Ci0gIDxpc3N1ZSBpZD0iTmV3QXBpIj48L2lzc3VlPgotCi0gIDxpc3N1ZSBpZD0iTG9jYWxlIiBz
ZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iU2RDYXJkUGF0aCIgc2V2ZXJpdHk9Imln
bm9yZSIvPgotICA8aXNzdWUgaWQ9IlVzZVZhbHVlT2YiIHNldmVyaXR5PSJpZ25vcmUiLz4KLSAg
PGlzc3VlIGlkPSJJbmxpbmVkQXBpIiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0i
RGVmYXVsdExvY2FsZSIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9IkFzc2VydCIg
c2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9IlVzZVNwYXJzZUFycmF5cyIgc2V2ZXJp
dHk9Imlnbm9yZSIvPgotCi0gIDxpc3N1ZSBpZD0iTG9uZ0xvZ1RhZyIgc2V2ZXJpdHk9Imlnbm9y
ZSIvPgotICA8aXNzdWUgaWQ9IlJlZ2lzdGVyZWQiIHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlz
c3VlIGlkPSJSZWN5Y2xlIiBzZXZlcml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iTWlzc2lu
Z1Blcm1pc3Npb24iIHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJDb21taXRQcmVm
RWRpdHMiIHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJVbnVzZWRSZXNvdXJjZXMi
IHNldmVyaXR5PSJpZ25vcmUiLz4KLSAgPGlzc3VlIGlkPSJJY29uQ29sb3JzIiBzZXZlcml0eT0i
aWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iSWNvbkRpcFNpemUiIHNldmVyaXR5PSJpZ25vcmUiLz4K
LSAgPGlzc3VlIGlkPSJJY29uRHVwbGljYXRlc0NvbmZpZyIgc2V2ZXJpdHk9Imlnbm9yZSIvPgot
ICA8aXNzdWUgaWQ9IlJlbGF0aXZlT3ZlcmxhcCIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNz
dWUgaWQ9IlJ0bENvbXBhdCIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9Ikljb25N
aXNzaW5nRGVuc2l0eUZvbGRlciIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9Ildy
b25nQ2FsbCIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9Ik5ld0FwaSIgc2V2ZXJp
dHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9Ik9sZFRhcmdldEFwaSIgc2V2ZXJpdHk9Imlnbm9y
ZSIvPgotCi0gIDxpc3N1ZSBpZD0iR29vZ2xlQXBwSW5kZXhpbmdXYXJuaW5nIiBzZXZlcml0eT0i
aWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iTWlzc2luZ1JlZ2lzdGVyZWQiIHNldmVyaXR5PSJpZ25v
cmUiLz4KLQotICA8IS0tIFRoZXNlIGFyZSBqdXN0IGZyb20gdGhlIGR1bW15IEFuZHJvaWRNYW5p
ZmVzdC54bWwgd2UgdXNlIGZvciBsaW50aW5nLgotICAgICAgIEl0J3MgaW4gdGhlIHNhbWUgZGly
ZWN0b3J5IGFzIHRoaXMgZmlsZS4gLS0+Ci0gIDxpc3N1ZSBpZD0iTWlzc2luZ0FwcGxpY2F0aW9u
SWNvbiIgc2V2ZXJpdHk9Imlnbm9yZSIvPgotICA8aXNzdWUgaWQ9IkFsbG93QmFja3VwIiBzZXZl
cml0eT0iaWdub3JlIi8+Ci0gIDxpc3N1ZSBpZD0iTWlzc2luZ1ZlcnNpb24iIHNldmVyaXR5PSJp
Z25vcmUiLz4KLTwvbGludD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2J1aWxkL2FuZHJvaWQvdGVzdF9ydW5uZXIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZC90ZXN0
X3J1bm5lci5weQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvYnVpbGQvYW5kcm9pZC90ZXN0X3J1bm5lci5weQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDM4ICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQg
KGMpIDIwMTQgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0jCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0jIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSMgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotIyBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLQotIiIiCi1SdW5z
IHRlc3RzIG9uIEFuZHJvaWQgZGV2aWNlcy4KLQotVGhpcyBzY3JpcHQgZXhpc3RzIHRvIGF2b2lk
IFdlYlJUQyBiZWluZyBicm9rZW4gYnkgY2hhbmdlcyBpbiB0aGUgQ2hyb21lIEFuZHJvaWQKLXRl
c3QgZXhlY3V0aW9uIHRvb2xjaGFpbi4gSXQgYWxzbyBjb252ZW5pZW50bHkgc2V0cyB0aGUgQ0hF
Q0tPVVRfU09VUkNFX1JPT1QKLWVudmlyb25tZW50IHZhcmlhYmxlLgotIiIiCi0KLWltcG9ydCBv
cwotaW1wb3J0IHN5cwotCi1TQ1JJUFRfRElSID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQot
U1JDX0RJUiA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oU0NSSVBUX0RJUiwgb3MucGFy
ZGlyLCBvcy5wYXJkaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
cy5wYXJkaXIpKQotQ0hST01JVU1fQlVJTERfQU5EUk9JRF9ESVIgPSBvcy5wYXRoLmpvaW4oU1JD
X0RJUiwgJ2J1aWxkJywgJ2FuZHJvaWQnKQotc3lzLnBhdGguaW5zZXJ0KDAsIENIUk9NSVVNX0JV
SUxEX0FORFJPSURfRElSKQotCi0KLWltcG9ydCB0ZXN0X3J1bm5lciAgIyBweWxpbnQ6IGRpc2Fi
bGU9VzA0MDYKLQotZGVmIG1haW4oKToKLSAgIyBPdmVycmlkZSBlbnZpcm9ubWVudCB2YXJpYWJs
ZSB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciB0aGUgc2NyaXB0cyB0byBmaW5kCi0gICMgdGhlIHJv
b3QgZGlyZWN0b3J5IChvdXIgc3ltbGlua2luZyBvZiB0aGUgQ2hyb21pdW0gYnVpbGQgdG9vbGNo
YWluIHdvdWxkCi0gICMgb3RoZXJ3aXNlIG1ha2UgdGhlbSBmYWlsIHRvIGRvIHNvKS4KLSAgb3Mu
ZW52aXJvblsnQ0hFQ0tPVVRfU09VUkNFX1JPT1QnXSA9IFNSQ19ESVIKLSAgcmV0dXJuIHRlc3Rf
cnVubmVyLm1haW4oKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBzeXMuZXhpdCht
YWluKCkpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9idWlsZC9hbmRyb2lkL3Rlc3RfcnVubmVyLnB5Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOmV4ZWN1dGFibGUKIyMgLTEgKzAsMCAjIwotKgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL0FuZHJvaWRNYW5pZmVzdC54bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9BbmRyb2lkTWFuaWZlc3QueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL0Fu
ZHJvaWRNYW5pZmVzdC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MyArMCwwIEBACi08P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9
Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICAgICAgICBw
YWNrYWdlPSJvcmcuYXBwc3BvdC5hcHBydGMiCi0gICAgICAgICAgYW5kcm9pZDp2ZXJzaW9uQ29k
ZT0iMSIKLSAgICAgICAgICBhbmRyb2lkOnZlcnNpb25OYW1lPSIxLjAiPgotCi0gICAgPHVzZXMt
ZmVhdHVyZSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaGFyZHdhcmUuY2FtZXJhIiAvPgotICAgIDx1
c2VzLWZlYXR1cmUgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYS5hdXRvZm9j
dXMiIC8+Ci0gICAgPHVzZXMtZmVhdHVyZSBhbmRyb2lkOmdsRXNWZXJzaW9uPSIweDAwMDIwMDAw
IiBhbmRyb2lkOnJlcXVpcmVkPSJ0cnVlIiAvPgotICAgIDx1c2VzLXNkayBhbmRyb2lkOm1pblNk
a1ZlcnNpb249IjE2IiBhbmRyb2lkOnRhcmdldFNka1ZlcnNpb249IjIxIiAvPgotCi0gICAgPHVz
ZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5DQU1FUkEiIC8+
Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5D
SEFOR0VfTkVUV09SS19TVEFURSIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFt
ZT0iYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9BVURJT19TRVRUSU5HUyIgLz4KLSAgICA8dXNl
cy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJ
TyIgLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNz
aW9uLklOVEVSTkVUIiAvPgotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRy
b2lkLnBlcm1pc3Npb24uV1JJVEVfRVhURVJOQUxfU1RPUkFHRSIvPgotICAgIDx1c2VzLXBlcm1p
c3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQUNDRVNTX05FVFdPUktfU1RB
VEUiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlz
c2lvbi5DQVBUVVJFX1ZJREVPX09VVFBVVCIgLz4KLQotICAgIDxhcHBsaWNhdGlvbiBhbmRyb2lk
OmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmljb249
IkBkcmF3YWJsZS9pY19sYXVuY2hlciIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDphbGxvd0Jh
Y2t1cD0iZmFsc2UiPgotCi0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IkNvbm5lY3RB
Y3Rpdml0eSIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25h
bWUiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOndpbmRvd1NvZnRJbnB1dE1vZGU9ImFkanVz
dFBhbiI+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0
aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iLz4KLSAgICAgICAg
ICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5M
QVVOQ0hFUiIvPgotICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotCi0gICAgICAgICAgICA8
aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5k
cm9pZC5pbnRlbnQuYWN0aW9uLlZJRVciLz4KLSAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5k
cm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5jYXRlZ29yeS5ERUZBVUxUIi8+Ci0gICAgICAgICAg
ICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuQlJP
V1NBQkxFIi8+Ci0gICAgICAgICAgICAgICAgPGRhdGEgYW5kcm9pZDpzY2hlbWU9Imh0dHBzIiBh
bmRyb2lkOmhvc3Q9ImFwcHIudGMiLz4KLSAgICAgICAgICAgICAgICA8ZGF0YSBhbmRyb2lkOnNj
aGVtZT0iaHR0cCIgYW5kcm9pZDpob3N0PSJhcHByLnRjIi8+Ci0gICAgICAgICAgICA8L2ludGVu
dC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJv
aWQ6bmFtZT0iU2V0dGluZ3NBY3Rpdml0eSIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFi
ZWw9IkBzdHJpbmcvc2V0dGluZ3NfbmFtZSI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0KLSAgICAg
ICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iQ2FsbEFjdGl2aXR5IgotICAgICAgICAgICAgICAg
ICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSIKLSAgICAgICAgICAgICAgICAgIGFu
ZHJvaWQ6c2NyZWVuT3JpZW50YXRpb249ImZ1bGxVc2VyIgotICAgICAgICAgICAgICAgICAgYW5k
cm9pZDpjb25maWdDaGFuZ2VzPSJvcmllbnRhdGlvbnxzY3JlZW5TaXplIgotICAgICAgICAgICAg
ICAgICAgYW5kcm9pZDp0aGVtZT0iQHN0eWxlL0NhbGxBY3Rpdml0eVRoZW1lIj4KLSAgICAgICAg
PC9hY3Rpdml0eT4KLSAgICA8L2FwcGxpY2F0aW9uPgotPC9tYW5pZmVzdD4KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
T1dORVJTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvT1dORVJTCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL09XTkVSUwkobm9uZXhpc3RlbnQpCkBAIC0xLDIgKzAsMCBAQAotbWFnamVkQHdlYnJ0Yy5v
cmcKLXNha2FsQHdlYnJ0Yy5vcmcKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvUkVBRE1FCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvUkVBRE1FCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL1JFQURNRQkobm9uZXhpc3RlbnQp
CkBAIC0xLDIzICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGFuIGV4YW1wbGUgQW5k
cm9pZCBjbGllbnQgZm9yIGh0dHBzOi8vYXBwci50YwotCi1QcmVyZXF1aXNpdGVzOgotLSAiR2V0
dGluZyB0aGUgY29kZSIsICJDb21waWxpbmciLCBhbmQgIlVzaW5nIHRoZSBCdW5kbGVkIEFuZHJv
aWQgU0RLL05ESyIKLSAgb24gaHR0cDovL3d3dy53ZWJydGMub3JnL25hdGl2ZS1jb2RlL2FuZHJv
aWQKLQotRXhhbXBsZSBvZiBidWlsZGluZyAmIHVzaW5nIHRoZSBhcHA6Ci0KLWNkIDxwYXRoL3Rv
L3dlYnJ0Yz4vc3JjCi1uaW5qYSAtQyBvdXQvRGVmYXVsdCBBcHBSVENNb2JpbGUKLWFkYiBpbnN0
YWxsIC1yIG91dC9EZWZhdWx0L2Fwa3MvQXBwUlRDTW9iaWxlLmFwawotCi1JbiBkZXNrdG9wIGNo
cm9tZSwgbmF2aWdhdGUgdG8gaHR0cHM6Ly9hcHByLnRjIGFuZCBub3RlIHRoZSByPTxOTk4+IHJv
b20KLXRoaXMgcmVkaXJlY3RzIHRvIG9yIG5hdmlnYXRlIGRpcmVjdGx5IHRvIGh0dHBzOi8vYXBw
ci50Yy9yLzxOTk4+IHdpdGgKLXlvdXIgb3duIHJvb20gbnVtYmVyLiBMYXVuY2ggQXBwUlRDIG9u
IHRoZSBkZXZpY2UgYW5kIGFkZCBzYW1lIDxOTk4+IGludG8gdGhlIHJvb20gbmFtZSBsaXN0Lgot
Ci1Zb3UgY2FuIGFsc28gcnVuIGFwcGxpY2F0aW9uIGZyb20gYSBjb21tYW5kIGxpbmUgdG8gY29u
bmVjdCB0byB0aGUgZmlyc3Qgcm9vbSBpbiBhIGxpc3Q6Ci1hZGIgc2hlbGwgYW0gc3RhcnQgLW4g
b3JnLmFwcHNwb3QuYXBwcnRjLy5Db25uZWN0QWN0aXZpdHkgLWEgYW5kcm9pZC5pbnRlbnQuYWN0
aW9uLlZJRVcKLVRoaXMgc2hvdWxkIHJlc3VsdCBpbiB0aGUgYXBwIGxhdW5jaGluZyBvbiBBbmRy
b2lkIGFuZCBjb25uZWN0aW5nIHRvIHRoZSAzLWRvdC1hcHBydGMKLXBhZ2UgZGlzcGxheWVkIGlu
IHRoZSBkZXNrdG9wIGJyb3dzZXIuCi1UbyBydW4gbG9vcGJhY2sgdGVzdCBleGVjdXRlIGZvbGxv
d2luZyBjb21tYW5kOgotYWRiIHNoZWxsIGFtIHN0YXJ0IC1uIG9yZy5hcHBzcG90LmFwcHJ0Yy8u
Q29ubmVjdEFjdGl2aXR5IC1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXIC0tZXogIm9yZy5h
cHBzcG90LmFwcHJ0Yy5MT09QQkFDSyIgdHJ1ZQotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL2FudC5wcm9wZXJ0aWVz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvYW50LnByb3BlcnRpZXMJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvYW50LnByb3BlcnRpZXMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNyArMCwwIEBACi0jIFRo
aXMgZmlsZSBpcyB1c2VkIHRvIG92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIHVzZWQgYnkgdGhlIEFu
dCBidWlsZCBzeXN0ZW0uCi0jCi0jIFRoaXMgZmlsZSBtdXN0IGJlIGNoZWNrZWQgaW50byBWZXJz
aW9uIENvbnRyb2wgU3lzdGVtcywgYXMgaXQgaXMKLSMgaW50ZWdyYWwgdG8gdGhlIGJ1aWxkIHN5
c3RlbSBvZiB5b3VyIHByb2plY3QuCi0KLSMgVGhpcyBmaWxlIGlzIG9ubHkgdXNlZCBieSB0aGUg
QW50IHNjcmlwdC4KLQotIyBZb3UgY2FuIHVzZSB0aGlzIHRvIG92ZXJyaWRlIGRlZmF1bHQgdmFs
dWVzIHN1Y2ggYXMKLSMgICdzb3VyY2UuZGlyJyBmb3IgdGhlIGxvY2F0aW9uIG9mIHlvdXIgamF2
YSBzb3VyY2UgZm9sZGVyIGFuZAotIyAgJ291dC5kaXInIGZvciB0aGUgbG9jYXRpb24gb2YgeW91
ciBvdXRwdXQgZm9sZGVyLgotCi0jIFlvdSBjYW4gYWxzbyB1c2UgaXQgZGVmaW5lIGhvdyB0aGUg
cmVsZWFzZSBidWlsZHMgYXJlIHNpZ25lZCBieSBkZWNsYXJpbmcKLSMgdGhlIGZvbGxvd2luZyBw
cm9wZXJ0aWVzOgotIyAgJ2tleS5zdG9yZScgZm9yIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGtleXN0
b3JlIGFuZAotIyAgJ2tleS5hbGlhcycgZm9yIHRoZSBuYW1lIG9mIHRoZSBrZXkgdG8gdXNlLgot
IyBUaGUgcGFzc3dvcmQgd2lsbCBiZSBhc2tlZCBkdXJpbmcgdGhlIGJ1aWxkIHdoZW4geW91IHVz
ZSB0aGUgJ3JlbGVhc2UnIHRhcmdldC4KLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9idWlsZC54bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9idWlsZC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvYnVpbGQueG1s
CShub25leGlzdGVudCkKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IG5hbWU9IkFwcFJUQ01vYmlsZSIgZGVmYXVsdD0iaGVs
cCI+Ci0KLSAgICA8IS0tIFRoZSBsb2NhbC5wcm9wZXJ0aWVzIGZpbGUgaXMgY3JlYXRlZCBhbmQg
dXBkYXRlZCBieSB0aGUgJ2FuZHJvaWQnIHRvb2wuCi0gICAgICAgICBJdCBjb250YWlucyB0aGUg
cGF0aCB0byB0aGUgU0RLLiBJdCBzaG91bGQgKk5PVCogYmUgY2hlY2tlZCBpbnRvCi0gICAgICAg
ICBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4gLS0+Ci0gICAgPHByb3BlcnR5IGZpbGU9ImxvY2Fs
LnByb3BlcnRpZXMiIC8+Ci0KLSAgICA8IS0tIFRoZSBhbnQucHJvcGVydGllcyBmaWxlIGNhbiBi
ZSBjcmVhdGVkIGJ5IHlvdS4gSXQgaXMgb25seSBlZGl0ZWQgYnkgdGhlCi0gICAgICAgICAnYW5k
cm9pZCcgdG9vbCB0byBhZGQgcHJvcGVydGllcyB0byBpdC4KLSAgICAgICAgIFRoaXMgaXMgdGhl
IHBsYWNlIHRvIGNoYW5nZSBzb21lIEFudCBzcGVjaWZpYyBidWlsZCBwcm9wZXJ0aWVzLgotICAg
ICAgICAgSGVyZSBhcmUgc29tZSBwcm9wZXJ0aWVzIHlvdSBtYXkgd2FudCB0byBjaGFuZ2UvdXBk
YXRlOgotCi0gICAgICAgICBzb3VyY2UuZGlyCi0gICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhl
IHNvdXJjZSBkaXJlY3RvcnkuIERlZmF1bHQgaXMgJ3NyYycuCi0gICAgICAgICBvdXQuZGlyCi0g
ICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIG91dHB1dCBkaXJlY3RvcnkuIERlZmF1bHQgaXMg
J2JpbicuCi0KLSAgICAgICAgIEZvciBvdGhlciBvdmVycmlkYWJsZSBwcm9wZXJ0aWVzLCBsb29r
IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1bGVzCi0gICAgICAgICBmaWxlcyBpbiB0aGUgU0RL
LCBhdCB0b29scy9hbnQvYnVpbGQueG1sCi0KLSAgICAgICAgIFByb3BlcnRpZXMgcmVsYXRlZCB0
byB0aGUgU0RLIGxvY2F0aW9uIG9yIHRoZSBwcm9qZWN0IHRhcmdldCBzaG91bGQKLSAgICAgICAg
IGJlIHVwZGF0ZWQgdXNpbmcgdGhlICdhbmRyb2lkJyB0b29sIHdpdGggdGhlICd1cGRhdGUnIGFj
dGlvbi4KLQotICAgICAgICAgVGhpcyBmaWxlIGlzIGFuIGludGVncmFsIHBhcnQgb2YgdGhlIGJ1
aWxkIHN5c3RlbSBmb3IgeW91cgotICAgICAgICAgYXBwbGljYXRpb24gYW5kIHNob3VsZCBiZSBj
aGVja2VkIGludG8gVmVyc2lvbiBDb250cm9sIFN5c3RlbXMuCi0KLSAgICAgICAgIC0tPgotICAg
IDxwcm9wZXJ0eSBmaWxlPSJhbnQucHJvcGVydGllcyIgLz4KLQotICAgIDwhLS0gaWYgc2RrLmRp
ciB3YXMgbm90IHNldCBmcm9tIG9uZSBvZiB0aGUgcHJvcGVydHkgZmlsZSwgdGhlbgotICAgICAg
ICAgZ2V0IGl0IGZyb20gdGhlIEFORFJPSURfSE9NRSBlbnYgdmFyLgotICAgICAgICAgVGhpcyBt
dXN0IGJlIGRvbmUgYmVmb3JlIHdlIGxvYWQgcHJvamVjdC5wcm9wZXJ0aWVzIHNpbmNlCi0gICAg
ICAgICB0aGUgcHJvZ3VhcmQgY29uZmlnIGNhbiB1c2Ugc2RrLmRpciAtLT4KLSAgICA8cHJvcGVy
dHkgZW52aXJvbm1lbnQ9ImVudiIgLz4KLSAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJzZGsuZGly
IiB2YWx1ZT0iJHtlbnYuQU5EUk9JRF9TREtfUk9PVH0iPgotICAgICAgICA8aXNzZXQgcHJvcGVy
dHk9ImVudi5BTkRST0lEX1NES19ST09UIiAvPgotICAgIDwvY29uZGl0aW9uPgotCi0gICAgPCEt
LSBUaGUgcHJvamVjdC5wcm9wZXJ0aWVzIGZpbGUgaXMgY3JlYXRlZCBhbmQgdXBkYXRlZCBieSB0
aGUgJ2FuZHJvaWQnCi0gICAgICAgICB0b29sLCBhcyB3ZWxsIGFzIEFEVC4KLQotICAgICAgICAg
VGhpcyBjb250YWlucyBwcm9qZWN0IHNwZWNpZmljIHByb3BlcnRpZXMgc3VjaCBhcyBwcm9qZWN0
IHRhcmdldCwgYW5kIGxpYnJhcnkKLSAgICAgICAgIGRlcGVuZGVuY2llcy4gTG93ZXIgbGV2ZWwg
YnVpbGQgcHJvcGVydGllcyBhcmUgc3RvcmVkIGluIGFudC5wcm9wZXJ0aWVzCi0gICAgICAgICAo
b3IgaW4gLmNsYXNzcGF0aCBmb3IgRWNsaXBzZSBwcm9qZWN0cykuCi0KLSAgICAgICAgIFRoaXMg
ZmlsZSBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHlvdXIKLSAg
ICAgICAgIGFwcGxpY2F0aW9uIGFuZCBzaG91bGQgYmUgY2hlY2tlZCBpbnRvIFZlcnNpb24gQ29u
dHJvbCBTeXN0ZW1zLiAtLT4KLSAgICA8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0icHJvamVjdC5w
cm9wZXJ0aWVzIiAvPgotCi0gICAgPCEtLSBxdWljayBjaGVjayBvbiBzZGsuZGlyIC0tPgotICAg
IDxmYWlsCi0gICAgICAgICAgICBtZXNzYWdlPSJzZGsuZGlyIGlzIG1pc3NpbmcuIE1ha2Ugc3Vy
ZSB0byBnZW5lcmF0ZSBsb2NhbC5wcm9wZXJ0aWVzIHVzaW5nICdhbmRyb2lkIHVwZGF0ZSBwcm9q
ZWN0JyBvciB0byBpbmplY3QgaXQgdGhyb3VnaCB0aGUgQU5EUk9JRF9IT01FIGVudmlyb25tZW50
IHZhcmlhYmxlLiIKLSAgICAgICAgICAgIHVubGVzcz0ic2RrLmRpciIKLSAgICAvPgotCi0gICAg
PCEtLQotICAgICAgICBJbXBvcnQgcGVyIHByb2plY3QgY3VzdG9tIGJ1aWxkIHJ1bGVzIGlmIHBy
ZXNlbnQgYXQgdGhlIHJvb3Qgb2YgdGhlIHByb2plY3QuCi0gICAgICAgIFRoaXMgaXMgdGhlIHBs
YWNlIHRvIHB1dCBjdXN0b20gaW50ZXJtZWRpYXJ5IHRhcmdldHMgc3VjaCBhczoKLSAgICAgICAg
ICAgIC1wcmUtYnVpbGQKLSAgICAgICAgICAgIC1wcmUtY29tcGlsZQotICAgICAgICAgICAgLXBv
c3QtY29tcGlsZSAoVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgY29kZSBvYmZ1c2NhdGlvbi4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBpbGVkIGNvZGUgbG9jYXRpb246ICR7b3V0
LmNsYXNzZXMuYWJzb2x1dGUuZGlyfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhp
cyBpcyBub3QgZG9uZSBpbiBwbGFjZSwgb3ZlcnJpZGUgJHtvdXQuZGV4LmlucHV0LmFic29sdXRl
LmRpcn0pCi0gICAgICAgICAgICAtcG9zdC1wYWNrYWdlCi0gICAgICAgICAgICAtcG9zdC1idWls
ZAotICAgICAgICAgICAgLXByZS1jbGVhbgotICAgIC0tPgotICAgIDxpbXBvcnQgZmlsZT0iY3Vz
dG9tX3J1bGVzLnhtbCIgb3B0aW9uYWw9InRydWUiIC8+Ci0KLSAgICA8IS0tIEltcG9ydCB0aGUg
YWN0dWFsIGJ1aWxkIGZpbGUuCi0KLSAgICAgICAgIFRvIGN1c3RvbWl6ZSBleGlzdGluZyB0YXJn
ZXRzLCB0aGVyZSBhcmUgdHdvIG9wdGlvbnM6Ci0gICAgICAgICAtIEN1c3RvbWl6ZSBvbmx5IG9u
ZSB0YXJnZXQ6Ci0gICAgICAgICAgICAgLSBjb3B5L3Bhc3RlIHRoZSB0YXJnZXQgaW50byB0aGlz
IGZpbGUsICpiZWZvcmUqIHRoZQotICAgICAgICAgICAgICAgPGltcG9ydD4gdGFzay4KLSAgICAg
ICAgICAgICAtIGN1c3RvbWl6ZSBpdCB0byB5b3VyIG5lZWRzLgotICAgICAgICAgLSBDdXN0b21p
emUgdGhlIHdob2xlIGNvbnRlbnQgb2YgYnVpbGQueG1sCi0gICAgICAgICAgICAgLSBjb3B5L3Bh
c3RlIHRoZSBjb250ZW50IG9mIHRoZSBydWxlcyBmaWxlcyAobWludXMgdGhlIHRvcCBub2RlKQot
ICAgICAgICAgICAgICAgaW50byB0aGlzIGZpbGUsIHJlcGxhY2luZyB0aGUgPGltcG9ydD4gdGFz
ay4KLSAgICAgICAgICAgICAtIGN1c3RvbWl6ZSB0byB5b3VyIG5lZWRzLgotCi0gICAgICAgICAq
KioqKioqKioqKioqKioqKioqKioqKgotICAgICAgICAgKioqKioqIElNUE9SVEFOVCAqKioqKioK
LSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqCi0gICAgICAgICBJbiBhbGwgY2FzZXMg
eW91IG11c3QgdXBkYXRlIHRoZSB2YWx1ZSBvZiB2ZXJzaW9uLXRhZyBiZWxvdyB0byByZWFkICdj
dXN0b20nIGluc3RlYWQgb2YgYW4gaW50ZWdlciwKLSAgICAgICAgIGluIG9yZGVyIHRvIGF2b2lk
IGhhdmluZyB5b3VyIGZpbGUgYmUgb3ZlcnJpZGRlbiBieSB0b29scyBzdWNoIGFzICJhbmRyb2lk
IHVwZGF0ZSBwcm9qZWN0IgotICAgIC0tPgotICAgIDwhLS0gdmVyc2lvbi10YWc6IDEgLS0+Ci0g
ICAgPGltcG9ydCBmaWxlPSIke3Nkay5kaXJ9L3Rvb2xzL2FudC9idWlsZC54bWwiIC8+Ci0KLTwv
cHJvamVjdD4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcHJvamVjdC5wcm9wZXJ0aWVzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcHJvamVjdC5wcm9wZXJ0aWVzCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Byb2plY3Qu
cHJvcGVydGllcwkobm9uZXhpc3RlbnQpCkBAIC0xLDE2ICswLDAgQEAKLSMgVGhpcyBmaWxlIGlz
IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IEFuZHJvaWQgVG9vbHMuCi0jIERvIG5vdCBtb2Rp
ZnkgdGhpcyBmaWxlIC0tIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIEVSQVNFRCEKLSMKLSMgVGhpcyBm
aWxlIG11c3QgYmUgY2hlY2tlZCBpbiBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4KLSMKLSMgVG8g
Y3VzdG9taXplIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgQW50IGJ1aWxkIHN5c3RlbSBlZGl0Ci0j
ICJhbnQucHJvcGVydGllcyIsIGFuZCBvdmVycmlkZSB2YWx1ZXMgdG8gYWRhcHQgdGhlIHNjcmlw
dCB0byB5b3VyCi0jIHByb2plY3Qgc3RydWN0dXJlLgotIwotIyBUbyBlbmFibGUgUHJvR3VhcmQg
dG8gc2hyaW5rIGFuZCBvYmZ1c2NhdGUgeW91ciBjb2RlLCB1bmNvbW1lbnQgdGhpcyAoYXZhaWxh
YmxlIHByb3BlcnRpZXM6IHNkay5kaXIsIHVzZXIuaG9tZSk6Ci0jcHJvZ3VhcmQuY29uZmlnPSR7
c2RrLmRpcn0vdG9vbHMvcHJvZ3VhcmQvcHJvZ3VhcmQtYW5kcm9pZC50eHQ6cHJvZ3VhcmQtcHJv
amVjdC50eHQKLQotIyBQcm9qZWN0IHRhcmdldC4KLXRhcmdldD1hbmRyb2lkLTIyCi0KLWphdmEu
Y29tcGlsZXJhcmdzPS1YbGludDphbGwgLVdlcnJvcgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
aGRwaS9kaXNjb25uZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtl
ZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2Rpc2Nvbm5lY3QucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvZGlzY29ubmVjdC5wbmcJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvZGlzY29ubmVjdC5wbmcJKG5vbmV4aXN0
ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9kaXNjb25u
ZWN0LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwot
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5w
bmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
aGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1p
bWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19h
Y3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3Bs
YXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9u
X3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1oZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9t
X2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xh
dW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5j
aGVyLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19s
YXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
ZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWlt
ZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xv
b3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFz
IGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sb29wYmFja19jYWxsLnBuZwkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sb29wYmFja19jYWxs
LnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJs
ZS1oZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUt
dHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9kaXNjb25u
ZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFy
eSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2Rpc2Nvbm5lY3QucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLWxkcGkvZGlzY29ubmVjdC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2RyYXdhYmxlLWxkcGkvZGlzY29ubmVjdC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9kaXNjb25uZWN0LnBuZwpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNh
bm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBl
ID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBp
L2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUtbGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0
ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rp
b25fZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAt
MSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fcmV0dXJu
X2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9t
X2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2lj
X2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVu
LnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJs
ZS1sZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpE
ZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcJ
KG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRw
aS9pY19sYXVuY2hlci5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0x
ICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xvb3BiYWNrX2NhbGwu
cG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLWxkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvZHJhd2FibGUtbGRwaS9pY19sb29wYmFja19jYWxsLnBuZwkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sb29wYmFja19jYWxsLnBuZwkobm9uZXhp
c3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xv
b3BiYWNrX2NhbGwucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSAr
MCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9kaXNjb25uZWN0LnBuZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46
bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1tZHBpL2Rpc2Nvbm5lY3QucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LW1kcGkvZGlzY29ubmVjdC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdh
YmxlLW1kcGkvZGlzY29ubmVjdC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9kaXNjb25uZWN0LnBuZwpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LW1kcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9m
dWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19h
Y3Rpb25fZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1tZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fZnVsbF9zY3Jl
ZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1h
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9z
Y3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVu
LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9yZXR1
cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2Ry
YXdhYmxlLW1kcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhp
c3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2Fj
dGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46
bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2lj
X2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hl
ci5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LW1kcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUtbWRwaS9pY19sb29wYmFja19jYWxsLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9y
ZXMvZHJhd2FibGUtbWRwaS9pY19sb29wYmFja19jYWxsLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xvb3BiYWNrX2NhbGwu
cG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvZGlzY29ubmVjdC5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5u
b3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkv
ZGlzY29ubmVjdC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvZGlz
Y29ubmVjdC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBp
L2Rpc2Nvbm5lY3QucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLXhoZHBpL2Rpc2Nvbm5lY3QucG5nCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3Zu
Om1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkv
aWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fZnVsbF9z
Y3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlv
bl9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LXhoZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVu
LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3Nj
cmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVu
LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fcmV0
dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS14aGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCShub25l
eGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2lj
X2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRw
aS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQg
YXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nCShub25l
eGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2lj
X2xhdW5jaGVyLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAs
MCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUu
CnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2RyYXdhYmxlLXhoZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sb29wYmFja19jYWxsLnBuZwkobm9uZXhp
c3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19s
b29wYmFja19jYWxsLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEg
KzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9hY3Rpdml0eV9jYWxsLnhtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQvYWN0aXZpdHlfY2FsbC54bWwJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2xheW91dC9hY3Rpdml0eV9jYWxsLnhtbAkobm9uZXhpc3RlbnQpCkBA
IC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci0K
LTxSZWxhdGl2ZUxheW91dAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJv
aWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hf
cGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KLQotICAg
IDxvcmcuYXBwc3BvdC5hcHBydGMuUGVyY2VudEZyYW1lTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6
aWQ9IkAraWQvcmVtb3RlX3ZpZGVvX2xheW91dCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lk
dGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9w
YXJlbnQiPgotICAgICAgICA8b3JnLndlYnJ0Yy5TdXJmYWNlVmlld1JlbmRlcmVyCi0gICAgICAg
ICAgICBhbmRyb2lkOmlkPSJAK2lkL3JlbW90ZV92aWRlb192aWV3IgotICAgICAgICAgICAgYW5k
cm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5
b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgotICAgIDwvb3JnLmFwcHNwb3QuYXBwcnRjLlBl
cmNlbnRGcmFtZUxheW91dD4KLQotICAgIDxvcmcuYXBwc3BvdC5hcHBydGMuUGVyY2VudEZyYW1l
TGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbG9jYWxfdmlkZW9fbGF5b3V0IgotICAg
ICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lk
OmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+Ci0gICAgICAgIDxvcmcud2VicnRjLlN1cmZh
Y2VWaWV3UmVuZGVyZXIKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvbG9jYWxfdmlkZW9f
dmlldyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0g
ICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIgLz4KLSAgICA8
L29yZy5hcHBzcG90LmFwcHJ0Yy5QZXJjZW50RnJhbWVMYXlvdXQ+Ci0KLSAgICA8RnJhbWVMYXlv
dXQKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jYWxsX2ZyYWdtZW50X2NvbnRhaW5lciIKLSAg
ICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9p
ZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiIC8+Ci0gICAgPEZyYW1lTGF5b3V0Ci0gICAg
ICAgIGFuZHJvaWQ6aWQ9IkAraWQvaHVkX2ZyYWdtZW50X2NvbnRhaW5lciIKLSAgICAgICAgYW5k
cm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRf
aGVpZ2h0PSJtYXRjaF9wYXJlbnQiIC8+Ci0KLTwvUmVsYXRpdmVMYXlvdXQ+CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9sYXlvdXQvYWN0aXZpdHlfY29ubmVjdC54bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
bGF5b3V0L2FjdGl2aXR5X2Nvbm5lY3QueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy9sYXlvdXQvYWN0aXZpdHlfY29ubmVjdC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NyArMCww
IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPExpbmVhckxheW91
dAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMv
YW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjE2ZHAiCi0gICAgYW5kcm9pZDps
YXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1h
dGNoX3BhcmVudCIKLSAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRy
b2lkOndlaWdodFN1bT0iMSIKLSAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJIb3Jpem9udGFsPSJ0
cnVlIj4KLQotICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3Jvb21fZWRp
dHRleHRfZGVzY3JpcHRpb24iCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9w
YXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAg
ICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcm9vbV9kZXNjcmlwdGlvbiIvPgotCi0gICAgPExp
bmVhckxheW91dAotICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAg
ICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lk
OmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJj
ZW50ZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iOGRwIj4KLQotICAg
ICAgICA8RWRpdFRleHQKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcm9vbV9lZGl0dGV4
dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSIwZHAiCi0gICAgICAgICAgICBh
bmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6
bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAgIGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIK
LSAgICAgICAgICAgIGFuZHJvaWQ6aW1lT3B0aW9ucz0iYWN0aW9uRG9uZSIKLSAgICAgICAgICAg
IGFuZHJvaWQ6aW5wdXRUeXBlPSJ0ZXh0Ii8+Ci0KLSAgICAgICAgPEltYWdlQnV0dG9uCi0gICAg
ICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2Nvbm5lY3RfYnV0dG9uIgotICAgICAgICAgICAgYW5k
cm9pZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWln
aHQ9IjQ4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmlu
Zy9jb25uZWN0X2Rlc2NyaXB0aW9uIgotICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJA
YW5kcm9pZDpkcmF3YWJsZS9zeW1fYWN0aW9uX2NhbGwiIC8+Ci0KLSAgICAgICAgPEltYWdlQnV0
dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FkZF9mYXZvcml0ZV9idXR0b24iCi0g
ICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDhkcCIKLSAgICAgICAgICAgIGFuZHJv
aWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2Ny
aXB0aW9uPSJAc3RyaW5nL2FkZF9mYXZvcml0ZV9kZXNjcmlwdGlvbiIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvaWNfaW5wdXRfYWRkIiAvPgotICAg
IDwvTGluZWFyTGF5b3V0PgotCi0gICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAr
aWQvcm9vbV9saXN0dmlld19kZXNjcmlwdGlvbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lk
dGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgot
ICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Ub3A9IjhkcCIKLSAgICAgICAgYW5kcm9pZDps
aW5lcz0iMSIKLSAgICAgICAgYW5kcm9pZDptYXhMaW5lcz0iMSIKLSAgICAgICAgYW5kcm9pZDp0
ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90ZXh0QXBwZWFyYW5jZU1lZGl1bSIKLSAgICAg
ICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2Zhdm9yaXRlcyIKLSAgICAgICAgYW5kcm9pZDpncmF2
aXR5PSJjZW50ZXJfdmVydGljYWwiLz4KLQotICAgIDxGcmFtZUxheW91dAotICAgICAgICBhbmRy
b2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9o
ZWlnaHQ9IjBkcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2VpZ2h0PSIxIj4KLQotICAgICAg
ICA8TGlzdFZpZXcKLSAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcm9vbV9saXN0dmlldyIK
LSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAg
ICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9ImZhbHNlIiAvPgotCi0gICAgICAgIDxUZXh0Vmlldwot
ICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJvaWQ6aWQvZW1wdHkiCi0gICAgICAgICAgICBh
bmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDps
YXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9
ImNlbnRlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0cmluZy9ub19mYXZvcml0ZXMi
IC8+Ci0gICAgPC9GcmFtZUxheW91dD4KLTwvTGluZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9mcmFnbWVudF9jYWxsLnhtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQvZnJhZ21lbnRfY2FsbC54bWwJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9mcmFnbWVudF9jYWxsLnhtbAkobm9uZXhpc3RlbnQp
CkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+
Ci0KLTxSZWxhdGl2ZUxheW91dAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFu
ZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0
Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KLQot
ICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2NvbnRhY3RfbmFtZV9jYWxs
IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBh
bmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlv
dXRfY2VudGVySG9yaXpvbnRhbD0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWJvdmU9
IkAraWQvYnV0dG9uc19jYWxsX2NvbnRhaW5lciIKLSAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0i
MjRzcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSI4ZHAiLz4KLQotICAgIDxMaW5l
YXJMYXlvdXQKLSAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0b25zX2NhbGxfY29udGFp
bmVyIgotICAgICAgICAgICBhbmRyb2lkOm9yaWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAg
ICAgICBhbmRyb2lkOmxheW91dF9hYm92ZT0iQCtpZC9jYXB0dXJlX2Zvcm1hdF90ZXh0X2NhbGwi
Ci0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduV2l0aFBhcmVudElmTWlzc2luZz0idHJ1
ZSIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSIzMmRwIgotICAgICAg
ICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJIb3Jpem9udGFsPSJ0cnVlIgotICAgICAgICAgICBh
bmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICBhbmRyb2lkOmxh
eW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+Ci0KLSAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAg
ICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0b25fY2FsbF9kaXNjb25uZWN0IgotICAgICAgICAg
ICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9kaXNjb25uZWN0IgotICAgICAgICAgICBh
bmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9kaXNjb25uZWN0X2NhbGwiCi0gICAg
ICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iMTZkcCIKLSAgICAgICAgICAgYW5kcm9p
ZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0i
NDhkcCIvPgotCi0gICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAr
aWQvYnV0dG9uX2NhbGxfc3dpdGNoX2NhbWVyYSIKLSAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3Jv
dW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X2NhbWVyYSIKLSAgICAgICAgICAgYW5kcm9p
ZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvc3dpdGNoX2NhbWVyYSIKLSAgICAgICAgICAg
YW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI4ZHAiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0
X3dpZHRoPSI0OGRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiLz4K
LQotICAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0
b25fY2FsbF9zY2FsaW5nX21vZGUiCi0gICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRy
YXdhYmxlL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbiIKLSAgICAgICAgICAgYW5k
cm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvZGlzY29ubmVjdF9jYWxsIgotICAgICAg
ICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDhkcCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfaGVpZ2h0PSI0OGRwIi8+Ci0KLSAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAgICAgICAgYW5k
cm9pZDppZD0iQCtpZC9idXR0b25fY2FsbF90b2dnbGVfbWljIgotICAgICAgICAgICBhbmRyb2lk
OmJhY2tncm91bmQ9IkBhbmRyb2lkOmRyYXdhYmxlL2ljX2J0bl9zcGVha19ub3ciCi0gICAgICAg
ICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL3RvZ2dsZV9taWMiCi0gICAg
ICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVuZD0iOGRwIgotICAgICAgICAgICBhbmRyb2lk
OmxheW91dF93aWR0aD0iNDhkcCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0
OGRwIi8+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci0KLSAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5k
cm9pZDppZD0iQCtpZC9jYXB0dXJlX2Zvcm1hdF90ZXh0X2NhbGwiCi0gICAgICAgIGFuZHJvaWQ6
bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdo
dD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJIb3Jpem9udGFs
PSJ0cnVlIgotICAgICAgICBhbmRyb2lkOmxheW91dF9hYm92ZT0iQCtpZC9jYXB0dXJlX2Zvcm1h
dF9zbGlkZXJfY2FsbCIKLSAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMTZzcCIKLSAgICAgICAg
YW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NhcHR1cmVfZm9ybWF0X2NoYW5nZV90ZXh0Ii8+Ci0KLSAg
ICA8U2Vla0JhcgotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2NhcHR1cmVfZm9ybWF0X3NsaWRl
cl9jYWxsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAg
ICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9p
ZDpsYXlvdXRfY2VudGVySG9yaXpvbnRhbD0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRf
YWxpZ25QYXJlbnRCb3R0b209InRydWUiCi0gICAgICAgIGFuZHJvaWQ6cHJvZ3Jlc3M9IjUwIgot
ICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjhkcCIvPgotCi08L1JlbGF0aXZlTGF5b3V0
PgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2ZyYWdtZW50X2h1ZC54bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvbGF5b3V0L2ZyYWdtZW50X2h1ZC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2xheW91dC9mcmFnbWVudF9odWQueG1sCShub25leGlzdGVudCkKQEAgLTEsNzQgKzAs
MCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLQotPFJlbGF0aXZl
TGF5b3V0Ci0gICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBr
L3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0g
ICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgotCi0gICAgPEltYWdlQnV0
dG9uCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYnV0dG9uX3RvZ2dsZV9kZWJ1ZyIKLSAgICAg
ICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X2luZm9fZGV0
YWlscyIKLSAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvdG9nZ2xl
X2RlYnVnIgotICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudEJvdHRvbT0idHJ1ZSIK
LSAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRTdGFydD0idHJ1ZSIKLSAgICAgICAg
YW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdo
dD0iNDhkcCIvPgotCi0gICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZW5j
b2Rlcl9zdGF0X2NhbGwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRl
bnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAg
ICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudEVuZD0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDp0
ZXh0U3R5bGU9ImJvbGQiCi0gICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSIjQzAwMEZGMDAiCi0g
ICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjEyc3AiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X21h
cmdpbj0iOGRwIi8+Ci0KLSAgICA8VGFibGVMYXlvdXQKLSAgICAgICAgICAgYW5kcm9pZDppZD0i
QCtpZC9odWR2aWV3X2NvbnRhaW5lciIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9
Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9w
YXJlbnQiPgotCi0gICAgICAgICAgIDxUYWJsZVJvdz4KLSAgICAgICAgICAgICAgPFRleHRWaWV3
Ci0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaHVkX3N0YXRfYndlIgotICAgICAg
ICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAg
ICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAg
ICAgICAgYW5kcm9pZDphbHBoYT0iMC40IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRp
bmc9IjJkaXAiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6
Y29sb3Ivd2hpdGUiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAYW5kcm9p
ZDpjb2xvci9ibGFjayIgLz4KLQotICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAg
ICAgICAgYW5kcm9pZDppZD0iQCtpZC9odWRfc3RhdF9jb25uZWN0aW9uIgotICAgICAgICAgICAg
ICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAg
ICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAg
YW5kcm9pZDphbHBoYT0iMC40IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjJk
aXAiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6Y29sb3Iv
d2hpdGUiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAYW5kcm9pZDpjb2xv
ci9ibGFjayIgLz4KLQotICAgICAgICAgICA8L1RhYmxlUm93PgotCi0gICAgICAgICAgIDxUYWJs
ZVJvdz4KLSAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6
aWQ9IkAraWQvaHVkX3N0YXRfdmlkZW9fc2VuZCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDps
YXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6YWxwaGE9
IjAuNCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSIyZGlwIgotICAgICAgICAg
ICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmNvbG9yL3doaXRlIgotICAgICAg
ICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGFuZHJvaWQ6Y29sb3IvYmxhY2siIC8+Ci0K
LSAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAr
aWQvaHVkX3N0YXRfdmlkZW9fcmVjdiIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRf
d2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVp
Z2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMmRp
cCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC40IgotICAgICAgICAgICAgICAg
ICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmNvbG9yL3doaXRlIgotICAgICAgICAgICAg
ICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGFuZHJvaWQ6Y29sb3IvYmxhY2siIC8+Ci0gICAgICAg
ICAgICA8L1RhYmxlUm93PgotICAgIDwvVGFibGVMYXlvdXQ+Ci0KLTwvUmVsYXRpdmVMYXlvdXQ+
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy9tZW51L2Nvbm5lY3RfbWVudS54bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvbWVudS9jb25uZWN0X21lbnUueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy9tZW51L2Nvbm5lY3RfbWVudS54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMyArMCwwIEBACi08
bWVudSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2Fu
ZHJvaWQiPgotICAgIDxpdGVtCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWN0aW9uX2xvb3Bi
YWNrIgotICAgICAgICBhbmRyb2lkOmljb249IkBkcmF3YWJsZS9pY19sb29wYmFja19jYWxsIgot
ICAgICAgICBhbmRyb2lkOnNob3dBc0FjdGlvbj0iYWx3YXlzIgotICAgICAgICBhbmRyb2lkOnRp
dGxlPSJAc3RyaW5nL2FjdGlvbl9sb29wYmFjayIvPgotICAgIDxpdGVtCi0gICAgICAgIGFuZHJv
aWQ6aWQ9IkAraWQvYWN0aW9uX3NldHRpbmdzIgotICAgICAgICBhbmRyb2lkOm9yZGVySW5DYXRl
Z29yeT0iMTAwIgotICAgICAgICBhbmRyb2lkOmljb249IkBhbmRyb2lkOmRyYXdhYmxlL2ljX21l
bnVfcHJlZmVyZW5jZXMiCi0gICAgICAgIGFuZHJvaWQ6c2hvd0FzQWN0aW9uPSJpZlJvb20iCi0g
ICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvYWN0aW9uX3NldHRpbmdzIi8+Ci08L21lbnU+
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy92YWx1ZXMvYXJyYXlzLnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVz
L2FycmF5cy54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHJlc291cmNlcz4KLSAgICA8c3RyaW5nLWFycmF5
IG5hbWU9InZpZGVvUmVzb2x1dGlvbnMiPgotICAgICAgICA8aXRlbT5EZWZhdWx0PC9pdGVtPgot
ICAgICAgICA8aXRlbT5IRCAoMTI4MCB4IDcyMCk8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlZHQSAo
NjQwIHggNDgwKTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+UVZHQSAoMzIwIHggMjQwKTwvaXRlbT4K
LSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0idmlkZW9SZXNv
bHV0aW9uc1ZhbHVlcyI+Ci0gICAgICAgIDxpdGVtPkRlZmF1bHQ8L2l0ZW0+Ci0gICAgICAgIDxp
dGVtPjEyODAgeCA3MjA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjY0MCB4IDQ4MDwvaXRlbT4KLSAg
ICAgICAgPGl0ZW0+MzIwIHggMjQwPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi0gICAg
PHN0cmluZy1hcnJheSBuYW1lPSJjYW1lcmFGcHMiPgotICAgICAgICA8aXRlbT5EZWZhdWx0PC9p
dGVtPgotICAgICAgICA8aXRlbT4zMCBmcHM8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjE1IGZwczwv
aXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic3Rh
cnRCaXRyYXRlIj4KLSAgICAgICAgPGl0ZW0+RGVmYXVsdDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+
TWFudWFsPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi0gICAgPHN0cmluZy1hcnJheSBu
YW1lPSJ2aWRlb0NvZGVjcyI+Ci0gICAgICAgIDxpdGVtPlZQODwvaXRlbT4KLSAgICAgICAgPGl0
ZW0+VlA5PC9pdGVtPgotICAgICAgICA8aXRlbT5IMjY0PC9pdGVtPgotICAgIDwvc3RyaW5nLWFy
cmF5PgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJhdWRpb0NvZGVjcyI+Ci0gICAgICAgIDxp
dGVtPk9QVVM8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPklTQUM8L2l0ZW0+Ci0gICAgPC9zdHJpbmct
YXJyYXk+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InNwZWFrZXJwaG9uZSI+Ci0gICAgICAg
IDxpdGVtPkF1dG8gKHByb3hpbWl0eSBzZW5zb3IpPC9pdGVtPgotICAgICAgICA8aXRlbT5FbmFi
bGVkPC9pdGVtPgotICAgICAgICA8aXRlbT5EaXNhYmxlZDwvaXRlbT4KLSAgICA8L3N0cmluZy1h
cnJheT4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic3BlYWtlcnBob25lVmFsdWVzIj4KLSAg
ICAgICAgPGl0ZW0+YXV0bzwvaXRlbT4KLSAgICAgICAgPGl0ZW0+dHJ1ZTwvaXRlbT4KLSAgICAg
ICAgPGl0ZW0+ZmFsc2U8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLSAgICA8c3RyaW5n
LWFycmF5IG5hbWU9InJvb21MaXN0Q29udGV4dE1lbnUiPgotICAgICAgICA8aXRlbT5SZW1vdmUg
ZmF2b3JpdGU8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLTwvcmVzb3VyY2VzPgpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3Zh
bHVlcy9zdHJpbmdzLnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzL3N0
cmluZ3MueG1sCShub25leGlzdGVudCkKQEAgLTEsMTcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08cmVzb3VyY2VzPgotICAgIDxzdHJpbmcgbmFtZT0i
YXBwX25hbWUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkFwcFJUQzwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0ic2V0dGluZ3NfbmFtZSIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+QXBwUlRDIFNldHRp
bmdzPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJkaXNjb25uZWN0X2NhbGwiPkRpc2Nvbm5l
Y3QgQ2FsbDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icm9vbV9kZXNjcmlwdGlvbiI+Ci0g
ICAgICAgIFBsZWFzZSBlbnRlciBhIHJvb20gbmFtZS4gUm9vbSBuYW1lcyBhcmUgc2hhcmVkIHdp
dGggZXZlcnlvbmUsIHNvIHRoaW5rCi0gICAgICAgIG9mIHNvbWV0aGluZyB1bmlxdWUgYW5kIHNl
bmQgaXQgdG8gYSBmcmllbmQuCi0gICAgPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYXZv
cml0ZXMiPkZhdm9yaXRlczwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibm9fZmF2b3JpdGVz
Ij5ObyBmYXZvcml0ZXM8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfdXJsX3Rp
dGxlIj5JbnZhbGlkIFVSTDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF91cmxf
dGV4dCI+VGhlIFVSTCBvciByb29tIG5hbWUgeW91IGVudGVyZWQgcmVzdWx0ZWQgaW4gYW4gaW52
YWxpZCBVUkw6ICUxJHMKLSAgICA8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNoYW5uZWxf
ZXJyb3JfdGl0bGUiPkNvbm5lY3Rpb24gZXJyb3I8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9
ImNvbm5lY3RpbmdfdG8iPkNvbm5lY3RpbmcgdG86ICUxJHM8L3N0cmluZz4KLSAgICA8c3RyaW5n
IG5hbWU9Im1pc3NpbmdfdXJsIj5GQVRBTCBFUlJPUjogTWlzc2luZyBVUkwgdG8gY29ubmVjdCB0
by48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhbWVyYTJfdGV4dHVyZV9vbmx5X2Vycm9y
Ij5DYW1lcmEyIG9ubHkgc3VwcG9ydHMgY2FwdHVyaW5nIHRvIHRleHR1cmUuIEVpdGhlciBkaXNh
YmxlIENhbWVyYTIgb3IgZW5hYmxlIGNhcHR1cmluZyB0byB0ZXh0dXJlIGluIHRoZSBvcHRpb25z
Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ib2siPk9LPC9zdHJpbmc+Ci0gICAgPHN0cmlu
ZyBuYW1lPSJzd2l0Y2hfY2FtZXJhIj5Td2l0Y2ggZnJvbnQvYmFjayBjYW1lcmE8L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9ImNhcHR1cmVfZm9ybWF0X2NoYW5nZV90ZXh0Ij5TbGlkZSB0byBj
aGFuZ2UgY2FwdHVyZSBmb3JtYXQ8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im11dGVkIj5N
dXRlZDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9nZ2xlX2RlYnVnIj5Ub2dnbGUgZGVi
dWcgdmlldzwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0idG9nZ2xlX21pYyI+VG9nZ2xlIG1p
Y3JvcGhvbmUgb24vb2ZmPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fc2V0dGlu
Z3MiPlNldHRpbmdzPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhY3Rpb25fbG9vcGJhY2si
Pkxvb3BiYWNrIGNvbm5lY3Rpb248L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbm5lY3Rf
ZGVzY3JpcHRpb24iPkNvbm5lY3QgdG8gdGhlIHJvb208L3N0cmluZz4KLSAgICA8c3RyaW5nIG5h
bWU9ImFkZF9mYXZvcml0ZV9kZXNjcmlwdGlvbiI+QWRkIGZhdm9yaXRlPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJmb3JtYXRfZGVzY3JpcHRpb24iPiUxJGR4JTIkZCBAICUzJGQgZnBzPC9z
dHJpbmc+Ci0KLSAgICA8IS0tIFNldHRpbmdzIHN0cmluZ3MuIC0tPgotICAgIDxzdHJpbmcgbmFt
ZT0icHJlZl9yb29tX2tleSI+cm9vbV9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX3Jvb21fbGlzdF9rZXkiPnJvb21fbGlzdF9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0K
LSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmlkZW9zZXR0aW5nc19rZXkiPnZpZGVvX3NldHRpbmdz
X2tleTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb3NldHRpbmdzX3RpdGxl
Ij5XZWJSVEMgdmlkZW8gc2V0dGluZ3MuPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfdmlkZW9jYWxsX2tleSI+dmlkZW9jYWxsX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3Ry
aW5nIG5hbWU9InByZWZfdmlkZW9jYWxsX3RpdGxlIj5WaWRlbyBjYWxsLjwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2NhbGxfZGxnIj5FbmFibGUgdmlkZW8gaW4gYSBjYWxs
Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2NhbGxfZGVmYXVsdCI+dHJ1
ZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3NjcmVlbmNhcHR1cmVfa2V5Ij5z
Y3JlZW5jYXB0dXJlX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZf
c2NyZWVuY2FwdHVyZV90aXRsZSI+VXNlIHNjcmVlbmNhcHR1cmUuPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX3NjcmVlbmNhcHR1cmVfZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLQot
ICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYW1lcmEyX2tleSI+Y2FtZXJhMl9wcmVmZXJlbmNlPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2NhbWVyYTJfdGl0bGUiPlVzZSBDYW1lcmEy
Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYW1lcmEyX2RlZmF1bHQiPnRydWU8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfY2FtZXJhMl9ub3Rfc3VwcG9ydGVkIj5O
b3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLjwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX3Jlc29sdXRpb25fa2V5Ij5yZXNvbHV0aW9uX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfcmVzb2x1dGlvbl90aXRsZSI+VmlkZW8gcmVzb2x1dGlvbi48
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcmVzb2x1dGlvbl9kbGciPkVudGVyIEFw
cFJUQyBsb2NhbCB2aWRlbyByZXNvbHV0aW9uLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl9yZXNvbHV0aW9uX2RlZmF1bHQiPkRlZmF1bHQ8L3N0cmluZz4KLQotICAgIDxzdHJpbmcg
bmFtZT0icHJlZl9mcHNfa2V5Ij5mcHNfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcg
bmFtZT0icHJlZl9mcHNfdGl0bGUiPkNhbWVyYSBmcHMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX2Zwc19kbGciPkVudGVyIGxvY2FsIGNhbWVyYSBmcHMuPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX2Zwc19kZWZhdWx0Ij5EZWZhdWx0PC9zdHJpbmc+Ci0KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfa2V5Ij5jYXB0dXJlcXVhbGl0
eXNsaWRlcl9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2NhcHR1
cmVxdWFsaXR5c2xpZGVyX3RpdGxlIj5DYXB0dXJlIHF1YWxpdHkgc2xpZGVyLjwvc3RyaW5nPgot
ICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRlcl9kbGciPkVuYWJsZSBz
bGlkZXIgZm9yIGNoYW5naW5nIGNhcHR1cmUgcXVhbGl0eS48L3N0cmluZz4KLSAgICA8c3RyaW5n
IG5hbWU9InByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4K
LQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJhdGVfa2V5Ij5tYXh2aWRlb2Jp
dHJhdGVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRl
b2JpdHJhdGVfdGl0bGUiPk1heGltdW0gdmlkZW8gYml0cmF0ZSBzZXR0aW5nLjwvc3RyaW5nPgot
ICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJhdGVfZGxnIj5NYXhpbXVtIHZpZGVv
IGJpdHJhdGUgc2V0dGluZy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbWF4dmlk
ZW9iaXRyYXRlX2RlZmF1bHQiPkRlZmF1bHQ8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9rZXkiPm1heHZpZGVvYml0cmF0ZXZhbHVlX3ByZWZl
cmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbWF4dmlkZW9iaXRyYXRldmFs
dWVfdGl0bGUiPlZpZGVvIGVuY29kZXIgbWF4aW11bSBiaXRyYXRlLjwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9kbGciPkVudGVyIHZpZGVvIGVu
Y29kZXIgbWF4aW11bSBiaXRyYXRlIGluIGticHMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX2RlZmF1bHQiPjE3MDA8L3N0cmluZz4KLQotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2NvZGVjX2tleSI+dmlkZW9jb2RlY19wcmVmZXJlbmNl
PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3ZpZGVvY29kZWNfdGl0bGUiPkRlZmF1
bHQgdmlkZW8gY29kZWMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3ZpZGVvY29k
ZWNfZGxnIj5TZWxlY3QgZGVmYXVsdCB2aWRlbyBjb2RlYy48L3N0cmluZz4KLSAgICA8c3RyaW5n
IG5hbWU9InByZWZfdmlkZW9jb2RlY19kZWZhdWx0Ij5WUDg8L3N0cmluZz4KLQotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9od2NvZGVjX2tleSI+aHdjb2RlY19wcmVmZXJlbmNlPC9zdHJpbmc+Ci0g
ICAgPHN0cmluZyBuYW1lPSJwcmVmX2h3Y29kZWNfdGl0bGUiPlZpZGVvIGNvZGVjIGhhcmR3YXJl
IGFjY2VsZXJhdGlvbi48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfaHdjb2RlY19k
bGciPlVzZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCB2aWRlbyBjb2RlYyAoaWYgYXZhaWxhYmxlKS48
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfaHdjb2RlY19kZWZhdWx0Ij50cnVlPC9z
dHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXkiPmNh
cHR1cmV0b3RleHR1cmVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9jYXB0dXJldG90ZXh0dXJlX3RpdGxlIj5WaWRlbyBjYXB0dXJlIHRvIHN1cmZhY2UgdGV4dHVy
ZS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfY2FwdHVyZXRvdGV4dHVyZV9kbGci
PkNhcHR1cmUgdmlkZW8gdG8gdGV4dHVyZXMgKGlmIGF2YWlsYWJsZSkuPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX2NhcHR1cmV0b3RleHR1cmVfZGVmYXVsdCI+dHJ1ZTwvc3RyaW5n
PgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3ZhbHVlX2VuYWJsZWQiPkVuYWJsZWQ8L3N0cmlu
Zz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmFsdWVfZGlzYWJsZWQiPkRpc2FibGVkPC9zdHJp
bmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYXVkaW9zZXR0aW5nc19rZXkiPmF1ZGlvX3Nl
dHRpbmdzX2tleTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hdWRpb3NldHRpbmdz
X3RpdGxlIj5XZWJSVEMgYXVkaW8gc2V0dGluZ3MuPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGVfa2V5Ij5zdGFydGF1ZGlvYml0cmF0ZV9wcmVmZXJl
bmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX3Rp
dGxlIj5BdWRpbyBiaXRyYXRlIHNldHRpbmcuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2RsZyI+QXVkaW8gYml0cmF0ZSBzZXR0aW5nLjwvc3RyaW5n
PgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9kZWZhdWx0Ij5EZWZh
dWx0PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGV2
YWx1ZV9rZXkiPnN0YXJ0YXVkaW9iaXRyYXRldmFsdWVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX3RpdGxlIj5BdWRpbyBj
b2RlYyBiaXRyYXRlLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlv
Yml0cmF0ZXZhbHVlX2RsZyI+RW50ZXIgYXVkaW8gY29kZWMgYml0cmF0ZSBpbiBrYnBzLjwvc3Ry
aW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2RlZmF1
bHQiPjMyPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYXVkaW9jb2RlY19rZXki
PmF1ZGlvY29kZWNfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9h
dWRpb2NvZGVjX3RpdGxlIj5EZWZhdWx0IGF1ZGlvIGNvZGVjLjwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9hdWRpb2NvZGVjX2RsZyI+U2VsZWN0IGRlZmF1bHQgYXVkaW8gY29kZWMu
PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2F1ZGlvY29kZWNfZGVmYXVsdCI+T1BV
Uzwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX25vYXVkaW9wcm9jZXNzaW5nX2tl
eSI+YXVkaW9wcm9jZXNzaW5nX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9
InByZWZfbm9hdWRpb3Byb2Nlc3NpbmdfdGl0bGUiPkRpc2FibGUgYXVkaW8gcHJvY2Vzc2luZy48
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbm9hdWRpb3Byb2Nlc3NpbmdfZGxnIj5E
aXNhYmxlIGF1ZGlvIHByb2Nlc3NpbmcgcGlwZWxpbmUuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX25vYXVkaW9wcm9jZXNzaW5nX2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfYWVjZHVtcF9rZXkiPmFlY2R1bXBfcHJlZmVyZW5jZTwvc3Ry
aW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZWNkdW1wX3RpdGxlIj5DcmVhdGUgYWVjZHVt
cC48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYWVjZHVtcF9kbGciPkVuYWJsZSBk
aWFnbm9zdGljIGF1ZGlvIHJlY29yZGluZ3MuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2FlY2R1bXBfZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl9vcGVuc2xlc19rZXkiPm9wZW5zbGVzX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3Ry
aW5nIG5hbWU9InByZWZfb3BlbnNsZXNfdGl0bGUiPlVzZSBPcGVuU0wgRVMgZm9yIGF1ZGlvIHBs
YXliYWNrLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9vcGVuc2xlc19kbGciPlVz
ZSBPcGVuU0wgRVMgZm9yIGF1ZGlvIHBsYXliYWNrLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFt
ZT0icHJlZl9vcGVuc2xlc19kZWZhdWx0Ij5mYWxzZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2tleSI+ZGlzYWJsZV9idWlsdF9pbl9hZWNf
cHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0
X2luX2FlY190aXRsZSI+RGlzYWJsZSBoYXJkd2FyZSBBRUMuPC9zdHJpbmc+Ci0gICAgPHN0cmlu
ZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2RsZyI+RGlzYWJsZSBoYXJkd2FyZSBB
RUMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVj
X2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2J1aWx0X2lu
X2FlY19ub3RfYXZhaWxhYmxlIj5IYXJkd2FyZSBBRUMgaXMgbm90IGF2YWlsYWJsZTwvc3RyaW5n
PgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2tleSI+ZGlz
YWJsZV9idWlsdF9pbl9hZ2NfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY190aXRsZSI+RGlzYWJsZSBoYXJkd2FyZSBBR0MuPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2RsZyI+
RGlzYWJsZSBoYXJkd2FyZSBBR0MuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rp
c2FibGVfYnVpbHRfaW5fYWdjX2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX2J1aWx0X2luX2FnY19ub3RfYXZhaWxhYmxlIj5IYXJkd2FyZSBBR0MgaXMgbm90
IGF2YWlsYWJsZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVp
bHRfaW5fbnNfa2V5Ij5kaXNhYmxlX2J1aWx0X2luX25zX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9uc190aXRsZSI+RGlzYWJsZSBo
YXJkd2FyZSBOUy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWls
dF9pbl9uc19kbGciPkRpc2FibGUgaGFyZHdhcmUgTlMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfYnVpbHRfaW5fbnNfbm90X2F2YWlsYWJsZSI+SGFyZHdhcmUg
TlMgaXMgbm90IGF2YWlsYWJsZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Vu
YWJsZV9sZXZlbF9jb250cm9sX2tleSI+ZW5hYmxlX2xldmVsX2NvbnRyb2xfcHJlZmVyZW5jZTwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9lbmFibGVfbGV2ZWxfY29udHJvbF90aXRs
ZSI+RW5hYmxlIGxldmVsIGNvbnRyb2wuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVm
X2VuYWJsZV9sZXZlbF9jb250cm9sX2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3Ry
aW5nIG5hbWU9InByZWZfc3BlYWtlcnBob25lX2tleSI+c3BlYWtlcnBob25lX3ByZWZlcmVuY2U8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3BlYWtlcnBob25lX3RpdGxlIj5TcGVh
a2VycGhvbmUuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3NwZWFrZXJwaG9uZV9k
bGciPlNwZWFrZXJwaG9uZS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3BlYWtl
cnBob25lX2RlZmF1bHQiPmF1dG88L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9t
aXNjc2V0dGluZ3Nfa2V5Ij5taXNjX3NldHRpbmdzX2tleTwvc3RyaW5nPgotICAgIDxzdHJpbmcg
bmFtZT0icHJlZl9taXNjc2V0dGluZ3NfdGl0bGUiPk1pc2NlbGxhbmVvdXMgc2V0dGluZ3MuPC9z
dHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcm9vbV9zZXJ2ZXJfdXJsX2tleSI+cm9v
bV9zZXJ2ZXJfdXJsX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZf
cm9vbV9zZXJ2ZXJfdXJsX3RpdGxlIj5Sb29tIHNlcnZlciBVUkwuPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX3Jvb21fc2VydmVyX3VybF9kbGciPkVudGVyIGEgcm9vbSBzZXJ2ZXIg
VVJMLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9yb29tX3NlcnZlcl91cmxfZGVm
YXVsdCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+aHR0cHM6Ly9hcHByLnRjPC9zdHJpbmc+Ci0KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfZGlzcGxheWh1ZF9rZXkiPmRpc3BsYXlodWRfcHJlZmVyZW5j
ZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNwbGF5aHVkX3RpdGxlIj5EaXNw
bGF5IGNhbGwgc3RhdGlzdGljcy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlz
cGxheWh1ZF9kbGciPkRpc3BsYXkgY2FsbCBzdGF0aXN0aWNzLjwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9kaXNwbGF5aHVkX2RlZmF1bHQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmZh
bHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdHJhY2luZ19rZXkiPnRyYWNp
bmdfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl90cmFjaW5nX3Rp
dGxlIj5EZWJ1ZyBwZXJmb3JtYW5jZSB0cmFjaW5nLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFt
ZT0icHJlZl90cmFjaW5nX2RsZyI+RGVidWcgcGVyZm9ybWFuY2UgdHJhY2luZy48L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9InByZWZfdHJhY2luZ19kZWZhdWx0IiB0cmFuc2xhdGFibGU9ImZh
bHNlIj5mYWxzZTwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMt
djE3L3N0eWxlcy54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzLXYxNy9zdHlsZXMu
eG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMtdjE3L3N0eWxlcy54bWwJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9InV0Zi04Ij8+Ci08cmVzb3VyY2VzPgotICA8c3R5bGUgbmFtZT0iQ2FsbEFjdGl2aXR5VGhl
bWUiIHBhcmVudD0iYW5kcm9pZDpUaGVtZS5CbGFjayI+Ci0gICAgPGl0ZW0gbmFtZT0iYW5kcm9p
ZDp3aW5kb3dBY3Rpb25CYXIiPmZhbHNlPC9pdGVtPgotICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6
d2luZG93RnVsbHNjcmVlbiI+dHJ1ZTwvaXRlbT4KLSAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndp
bmRvd05vVGl0bGUiPnRydWU8L2l0ZW0+Ci0gIDwvc3R5bGU+Ci08L3Jlc291cmNlcz4KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL3ZhbHVlcy12MjEvc3R5bGVzLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92
YWx1ZXMtdjIxL3N0eWxlcy54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVl
cy12MjEvc3R5bGVzLnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxyZXNvdXJjZXM+Ci0gIDxzdHlsZSBuYW1l
PSJBcHBSVENNb2JpbGVBY3Rpdml0eVRoZW1lIiBwYXJlbnQ9ImFuZHJvaWQ6VGhlbWUuTWF0ZXJp
YWwiPgotICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QWN0aW9uQmFyIj5mYWxzZTwvaXRl
bT4KLSAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0Z1bGxzY3JlZW4iPnRydWU8L2l0ZW0+
Ci0gICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dOb1RpdGxlIj50cnVlPC9pdGVtPgotICA8
L3N0eWxlPgotPC9yZXNvdXJjZXM+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy94bWwvcHJlZmVyZW5jZXMueG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3htbC9wcmVmZXJlbmNlcy54bWwJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL3htbC9wcmVmZXJlbmNlcy54bWwJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxODIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQ
cmVmZXJlbmNlU2NyZWVuIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29t
L2Fway9yZXMvYW5kcm9pZCI+Ci0gICAgPFByZWZlcmVuY2VDYXRlZ29yeQotICAgICAgICBhbmRy
b2lkOmtleT0iQHN0cmluZy9wcmVmX3ZpZGVvc2V0dGluZ3Nfa2V5IgotICAgICAgICBhbmRyb2lk
OnRpdGxlPSJAc3RyaW5nL3ByZWZfdmlkZW9zZXR0aW5nc190aXRsZSI+Ci0KLSAgICAgICAgPENo
ZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl92
aWRlb2NhbGxfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3Zp
ZGVvY2FsbF90aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcv
cHJlZl92aWRlb2NhbGxfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBz
dHJpbmcvcHJlZl92aWRlb2NhbGxfZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVm
ZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3NjcmVlbmNhcHR1
cmVfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3NjcmVlbmNh
cHR1cmVfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9w
cmVmX3NjcmVlbmNhcHR1cmVfZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJl
bmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2NhbWVyYTJfa2V5Igot
ICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2NhbWVyYTJfdGl0bGUiCi0g
ICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2NhbWVyYTJfZGVm
YXVsdCIgLz4KLQotICAgICAgICA8TGlzdFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6
a2V5PSJAc3RyaW5nL3ByZWZfcmVzb2x1dGlvbl9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRp
dGxlPSJAc3RyaW5nL3ByZWZfcmVzb2x1dGlvbl90aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6
ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfcmVzb2x1dGlvbl9kZWZhdWx0IgotICAgICAgICAg
ICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX3Jlc29sdXRpb25fZGxnIgotICAg
ICAgICAgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvdmlkZW9SZXNvbHV0aW9ucyIKLSAgICAg
ICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS92aWRlb1Jlc29sdXRpb25zVmFsdWVz
IiAvPgotCi0gICAgICAgIDxMaXN0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9
IkBzdHJpbmcvcHJlZl9mcHNfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmlu
Zy9wcmVmX2Zwc190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3Ry
aW5nL3ByZWZfZnBzX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJA
c3RyaW5nL3ByZWZfZnBzX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5
L2NhbWVyYUZwcyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9jYW1l
cmFGcHMiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5k
cm9pZDprZXk9IkBzdHJpbmcvcHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRlcl9rZXkiCi0gICAgICAg
ICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfdGl0
bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfY2FwdHVy
ZXF1YWxpdHlzbGlkZXJfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBz
dHJpbmcvcHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRlcl9kZWZhdWx0IiAvPgotCi0gICAgICAgIDxM
aXN0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9tYXh2
aWRlb2JpdHJhdGVfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVm
X21heHZpZGVvYml0cmF0ZV90aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVl
PSJAc3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRlX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRy
b2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRlX2RsZyIKLSAgICAg
ICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L3N0YXJ0Qml0cmF0ZSIKLSAgICAgICAgICAg
IGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9zdGFydEJpdHJhdGUiIC8+Ci0KLSAgICAgICAg
PEVkaXRUZXh0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJl
Zl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJA
c3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRldmFsdWVfdGl0bGUiCi0gICAgICAgICAgICBhbmRy
b2lkOmlucHV0VHlwZT0ibnVtYmVyIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9
IkBzdHJpbmcvcHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9kZWZhdWx0IgotICAgICAgICAgICAg
YW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX2Rs
ZyIgLz4KLQotICAgICAgICA8TGlzdFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5
PSJAc3RyaW5nL3ByZWZfdmlkZW9jb2RlY19rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxl
PSJAc3RyaW5nL3ByZWZfdmlkZW9jb2RlY190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVm
YXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfdmlkZW9jb2RlY19kZWZhdWx0IgotICAgICAgICAgICAg
YW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX3ZpZGVvY29kZWNfZGxnIgotICAgICAg
ICAgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvdmlkZW9Db2RlY3MiCi0gICAgICAgICAgICBh
bmRyb2lkOmVudHJ5VmFsdWVzPSJAYXJyYXkvdmlkZW9Db2RlY3MiIC8+Ci0KLSAgICAgICAgPENo
ZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9o
d2NvZGVjX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9od2Nv
ZGVjX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVm
X2h3Y29kZWNfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcv
cHJlZl9od2NvZGVjX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQot
ICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9jYXB0dXJldG90ZXh0dXJlX2tl
eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9jYXB0dXJldG90ZXh0
dXJlX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVm
X2NhcHR1cmV0b3RleHR1cmVfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9
IkBzdHJpbmcvcHJlZl9jYXB0dXJldG90ZXh0dXJlX2RlZmF1bHQiIC8+Ci0gICAgPC9QcmVmZXJl
bmNlQ2F0ZWdvcnk+Ci0KLSAgICA8UHJlZmVyZW5jZUNhdGVnb3J5Ci0gICAgICAgIGFuZHJvaWQ6
a2V5PSJAc3RyaW5nL3ByZWZfYXVkaW9zZXR0aW5nc19rZXkiCi0gICAgICAgIGFuZHJvaWQ6dGl0
bGU9IkBzdHJpbmcvcHJlZl9hdWRpb3NldHRpbmdzX3RpdGxlIj4KLQotICAgICAgICA8TGlzdFBy
ZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRp
b2JpdHJhdGVfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3N0
YXJ0YXVkaW9iaXRyYXRlX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9
IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9kZWZhdWx0IgotICAgICAgICAgICAgYW5k
cm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2RsZyIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L3N0YXJ0Qml0cmF0ZSIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9zdGFydEJpdHJhdGUiIC8+Ci0KLSAgICAg
ICAgPEVkaXRUZXh0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcv
cHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0
bGU9IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX3RpdGxlIgotICAgICAgICAg
ICAgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVs
dFZhbHVlPSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9kZWZhdWx0IgotICAg
ICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX3N0YXJ0YXVkaW9iaXRy
YXRldmFsdWVfZGxnIiAvPgotCi0gICAgICAgIDxMaXN0UHJlZmVyZW5jZQotICAgICAgICAgICAg
YW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9hdWRpb2NvZGVjX2tleSIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9hdWRpb2NvZGVjX3RpdGxlIgotICAgICAgICAgICAg
YW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9hdWRpb2NvZGVjX2RlZmF1bHQiCi0g
ICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfYXVkaW9jb2RlY19k
bGciCi0gICAgICAgICAgICBhbmRyb2lkOmVudHJpZXM9IkBhcnJheS9hdWRpb0NvZGVjcyIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9hdWRpb0NvZGVjcyIgLz4KLQot
ICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0
cmluZy9wcmVmX25vYXVkaW9wcm9jZXNzaW5nX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0
bGU9IkBzdHJpbmcvcHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ190aXRsZSIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19kbGciCi0g
ICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX25vYXVkaW9wcm9j
ZXNzaW5nX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAg
ICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9hZWNkdW1wX2tleSIKLSAgICAgICAgICAg
IGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9hZWNkdW1wX3RpdGxlIgotICAgICAgICAgICAg
YW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2FlY2R1bXBfZGxnIgotICAgICAgICAg
ICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9hZWNkdW1wX2RlZmF1bHQiIC8+
Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9
IkBzdHJpbmcvcHJlZl9vcGVuc2xlc19rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJA
c3RyaW5nL3ByZWZfb3BlbnNsZXNfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1Rp
dGxlPSJAc3RyaW5nL3ByZWZfb3BlbnNsZXNfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZh
dWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9vcGVuc2xlc19kZWZhdWx0IiAvPgotCi0gICAgICAgIDxD
aGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZf
ZGlzYWJsZV9idWlsdF9pbl9hZWNfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0
cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9p
ZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2RsZyIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWls
dF9pbl9hZWNfZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAg
ICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2tl
eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0
X2luX2FnY190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcv
cHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1
bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2RlZmF1bHQiIC8+Ci0K
LSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBz
dHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6
dGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX3RpdGxlIgotICAgICAgICAg
ICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNf
ZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9kaXNh
YmxlX2J1aWx0X2luX25zX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5j
ZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9lbmFibGVfbGV2ZWxfY29u
dHJvbF9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfZW5hYmxl
X2xldmVsX2NvbnRyb2xfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0i
QHN0cmluZy9wcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAg
PExpc3RQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3Nw
ZWFrZXJwaG9uZV9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZf
c3BlYWtlcnBob25lX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBz
dHJpbmcvcHJlZl9zcGVha2VycGhvbmVfZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlh
bG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9zcGVha2VycGhvbmVfZGxnIgotICAgICAgICAgICAgYW5k
cm9pZDplbnRyaWVzPSJAYXJyYXkvc3BlYWtlcnBob25lIgotICAgICAgICAgICAgYW5kcm9pZDpl
bnRyeVZhbHVlcz0iQGFycmF5L3NwZWFrZXJwaG9uZVZhbHVlcyIgLz4KLSAgICA8L1ByZWZlcmVu
Y2VDYXRlZ29yeT4KLQotICAgIDxQcmVmZXJlbmNlQ2F0ZWdvcnkKLSAgICAgICAgYW5kcm9pZDpr
ZXk9IkBzdHJpbmcvcHJlZl9taXNjc2V0dGluZ3Nfa2V5IgotICAgICAgICBhbmRyb2lkOnRpdGxl
PSJAc3RyaW5nL3ByZWZfbWlzY3NldHRpbmdzX3RpdGxlIj4KLQotICAgICAgICA8RWRpdFRleHRQ
cmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3Jvb21fc2Vy
dmVyX3VybF9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfcm9v
bV9zZXJ2ZXJfdXJsX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDppbnB1dFR5cGU9InRleHQi
Ci0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX3Jvb21fc2Vy
dmVyX3VybF9kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmlu
Zy9wcmVmX3Jvb21fc2VydmVyX3VybF9kbGciIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVy
ZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9kaXNwbGF5aHVkX2tl
eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNwbGF5aHVkX3Rp
dGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2Rpc3Bs
YXlodWRfZGxnIgotICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVm
X2Rpc3BsYXlodWRfZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0g
ICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3RyYWNpbmdfa2V5IgotICAgICAg
ICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3RyYWNpbmdfdGl0bGUiCi0gICAgICAg
ICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfdHJhY2luZ19kbGciCi0gICAg
ICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfdHJhY2luZ19kZWZhdWx0
IiAvPgotICAgIDwvUHJlZmVyZW5jZUNhdGVnb3J5PgotCi08L1ByZWZlcmVuY2VTY3JlZW4+Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDQXVkaW9NYW5hZ2VyLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0F1ZGlvTWFu
YWdlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvQXBwUlRDQXVkaW9NYW5hZ2VyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MTkgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWlt
cG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5BcHBSVENVdGlsczsKLQotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29u
dGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29u
dGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVu
Y2VzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBh
bmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJl
ZmVyZW5jZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEu
dXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZh
LnV0aWwuU2V0OwotCi0vKioKLSAqIEFwcFJUQ0F1ZGlvTWFuYWdlciBtYW5hZ2VzIGFsbCBhdWRp
byByZWxhdGVkIHBhcnRzIG9mIHRoZSBBcHBSVEMgZGVtby4KLSAqLwotcHVibGljIGNsYXNzIEFw
cFJUQ0F1ZGlvTWFuYWdlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAi
QXBwUlRDQXVkaW9NYW5hZ2VyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUFL
RVJQSE9ORV9BVVRPID0gImF1dG8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BF
QUtFUlBIT05FX1RSVUUgPSAidHJ1ZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBT
UEVBS0VSUEhPTkVfRkFMU0UgPSAiZmFsc2UiOwotCi0gIC8qKgotICAgKiBBdWRpb0RldmljZSBp
cyB0aGUgbmFtZXMgb2YgcG9zc2libGUgYXVkaW8gZGV2aWNlcyB0aGF0IHdlIGN1cnJlbnRseQot
ICAgKiBzdXBwb3J0LgotICAgKi8KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN1cHBvcnQgZm9y
IEJMVUVUT09USCBhcyB3ZWxsLgotICBwdWJsaWMgZW51bSBBdWRpb0RldmljZSB7Ci0gICAgU1BF
QUtFUl9QSE9ORSwKLSAgICBXSVJFRF9IRUFEU0VULAotICAgIEVBUlBJRUNFLAotICB9Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcHJ0Y0NvbnRleHQ7Ci0gIHByaXZhdGUgZmluYWwgUnVu
bmFibGUgb25TdGF0ZUNoYW5nZUxpc3RlbmVyOwotICBwcml2YXRlIGJvb2xlYW4gaW5pdGlhbGl6
ZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotICBwcml2
YXRlIGludCBzYXZlZEF1ZGlvTW9kZSA9IEF1ZGlvTWFuYWdlci5NT0RFX0lOVkFMSUQ7Ci0gIHBy
aXZhdGUgYm9vbGVhbiBzYXZlZElzU3BlYWtlclBob25lT24gPSBmYWxzZTsKLSAgcHJpdmF0ZSBi
b29sZWFuIHNhdmVkSXNNaWNyb3Bob25lTXV0ZSA9IGZhbHNlOwotCi0gIHByaXZhdGUgZmluYWwg
QXVkaW9EZXZpY2UgZGVmYXVsdEF1ZGlvRGV2aWNlOwotCi0gIC8vIENvbnRhaW5zIHNwZWFrZXJw
aG9uZSBzZXR0aW5nOiBhdXRvLCB0cnVlIG9yIGZhbHNlCi0gIHByaXZhdGUgZmluYWwgU3RyaW5n
IHVzZVNwZWFrZXJwaG9uZTsKLQotICAvLyBQcm94aW1pdHkgc2Vuc29yIG9iamVjdC4gSXQgbWVh
c3VyZXMgdGhlIHByb3hpbWl0eSBvZiBhbiBvYmplY3QgaW4gY20KLSAgLy8gcmVsYXRpdmUgdG8g
dGhlIHZpZXcgc2NyZWVuIG9mIGEgZGV2aWNlIGFuZCBjYW4gdGhlcmVmb3JlIGJlIHVzZWQgdG8K
LSAgLy8gYXNzaXN0IGRldmljZSBzd2l0Y2hpbmcgKGNsb3NlIHRvIGVhciA8PT4gdXNlIGhlYWRz
ZXQgZWFycGllY2UgaWYKLSAgLy8gYXZhaWxhYmxlLCBmYXIgZnJvbSBlYXIgPD0+IHVzZSBzcGVh
a2VyIHBob25lKS4KLSAgcHJpdmF0ZSBBcHBSVENQcm94aW1pdHlTZW5zb3IgcHJveGltaXR5U2Vu
c29yID0gbnVsbDsKLQotICAvLyBDb250YWlucyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGF1ZGlv
IGRldmljZS4KLSAgcHJpdmF0ZSBBdWRpb0RldmljZSBzZWxlY3RlZEF1ZGlvRGV2aWNlOwotCi0g
IC8vIENvbnRhaW5zIGEgbGlzdCBvZiBhdmFpbGFibGUgYXVkaW8gZGV2aWNlcy4gQSBTZXQgY29s
bGVjdGlvbiBpcyB1c2VkIHRvCi0gIC8vIGF2b2lkIGR1cGxpY2F0ZSBlbGVtZW50cy4KLSAgcHJp
dmF0ZSBmaW5hbCBTZXQ8QXVkaW9EZXZpY2U+IGF1ZGlvRGV2aWNlcyA9IG5ldyBIYXNoU2V0PEF1
ZGlvRGV2aWNlPigpOwotCi0gIC8vIEJyb2FkY2FzdCByZWNlaXZlciBmb3Igd2lyZWQgaGVhZHNl
dCBpbnRlbnQgYnJvYWRjYXN0cy4KLSAgcHJpdmF0ZSBCcm9hZGNhc3RSZWNlaXZlciB3aXJlZEhl
YWRzZXRSZWNlaXZlcjsKLQotICAvLyBDYWxsYmFjayBtZXRob2QgZm9yIGNoYW5nZXMgaW4gYXVk
aW8gZm9jdXMuCi0gIHByaXZhdGUgQXVkaW9NYW5hZ2VyLk9uQXVkaW9Gb2N1c0NoYW5nZUxpc3Rl
bmVyIGF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcjsKLQotICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxs
ZWQgd2hlbiB0aGUgcHJveGltaXR5IHNlbnNvciByZXBvcnRzIGEgc3RhdGUgY2hhbmdlLAotICAv
LyBlLmcuIGZyb20gIk5FQVIgdG8gRkFSIiBvciBmcm9tICJGQVIgdG8gTkVBUiIuCi0gIHByaXZh
dGUgdm9pZCBvblByb3hpbWl0eVNlbnNvckNoYW5nZWRTdGF0ZSgpIHsKLSAgICBpZiAoIXVzZVNw
ZWFrZXJwaG9uZS5lcXVhbHMoU1BFQUtFUlBIT05FX0FVVE8pKSB7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gVGhlIHByb3hpbWl0eSBzZW5zb3Igc2hvdWxkIG9ubHkgYmUgYWN0aXZh
dGVkIHdoZW4gdGhlcmUgYXJlIGV4YWN0bHkgdHdvCi0gICAgLy8gYXZhaWxhYmxlIGF1ZGlvIGRl
dmljZXMuCi0gICAgaWYgKGF1ZGlvRGV2aWNlcy5zaXplKCkgPT0gMiAmJiBhdWRpb0RldmljZXMu
Y29udGFpbnMoQXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNlLkVBUlBJRUNFKQotICAgICAg
ICAmJiBhdWRpb0RldmljZXMuY29udGFpbnMoQXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNl
LlNQRUFLRVJfUEhPTkUpKSB7Ci0gICAgICBpZiAocHJveGltaXR5U2Vuc29yLnNlbnNvclJlcG9y
dHNOZWFyU3RhdGUoKSkgewotICAgICAgICAvLyBTZW5zb3IgcmVwb3J0cyB0aGF0IGEgImhhbmRz
ZXQgaXMgYmVpbmcgaGVsZCB1cCB0byBhIHBlcnNvbidzIGVhciIsCi0gICAgICAgIC8vIG9yICJz
b21ldGhpbmcgaXMgY292ZXJpbmcgdGhlIGxpZ2h0IHNlbnNvciIuCi0gICAgICAgIHNldEF1ZGlv
RGV2aWNlKEFwcFJUQ0F1ZGlvTWFuYWdlci5BdWRpb0RldmljZS5FQVJQSUVDRSk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyBTZW5zb3IgcmVwb3J0cyB0aGF0IGEgImhhbmRzZXQgaXMgcmVt
b3ZlZCBmcm9tIGEgcGVyc29uJ3MgZWFyIiwgb3IKLSAgICAgICAgLy8gInRoZSBsaWdodCBzZW5z
b3IgaXMgbm8gbG9uZ2VyIGNvdmVyZWQiLgotICAgICAgICBzZXRBdWRpb0RldmljZShBcHBSVENB
dWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuU1BFQUtFUl9QSE9ORSk7Ci0gICAgICB9Ci0gICAgfQot
ICB9Ci0KLSAgLyoqIENvbnN0cnVjdGlvbiAqLwotICBzdGF0aWMgQXBwUlRDQXVkaW9NYW5hZ2Vy
IGNyZWF0ZShDb250ZXh0IGNvbnRleHQsIFJ1bm5hYmxlIGRldmljZVN0YXRlQ2hhbmdlTGlzdGVu
ZXIpIHsKLSAgICByZXR1cm4gbmV3IEFwcFJUQ0F1ZGlvTWFuYWdlcihjb250ZXh0LCBkZXZpY2VT
dGF0ZUNoYW5nZUxpc3RlbmVyKTsKLSAgfQotCi0gIHByaXZhdGUgQXBwUlRDQXVkaW9NYW5hZ2Vy
KENvbnRleHQgY29udGV4dCwgUnVubmFibGUgZGV2aWNlU3RhdGVDaGFuZ2VMaXN0ZW5lcikgewot
ICAgIGFwcHJ0Y0NvbnRleHQgPSBjb250ZXh0OwotICAgIG9uU3RhdGVDaGFuZ2VMaXN0ZW5lciA9
IGRldmljZVN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci0gICAgYXVkaW9NYW5hZ2VyID0gKChBdWRpb01h
bmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpKTsK
LQotICAgIFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzID0gUHJlZmVyZW5jZU1h
bmFnZXIuZ2V0RGVmYXVsdFNoYXJlZFByZWZlcmVuY2VzKGNvbnRleHQpOwotICAgIHVzZVNwZWFr
ZXJwaG9uZSA9IHNoYXJlZFByZWZlcmVuY2VzLmdldFN0cmluZyhjb250ZXh0LmdldFN0cmluZyhS
LnN0cmluZy5wcmVmX3NwZWFrZXJwaG9uZV9rZXkpLAotICAgICAgICBjb250ZXh0LmdldFN0cmlu
ZyhSLnN0cmluZy5wcmVmX3NwZWFrZXJwaG9uZV9kZWZhdWx0KSk7Ci0KLSAgICBpZiAodXNlU3Bl
YWtlcnBob25lLmVxdWFscyhTUEVBS0VSUEhPTkVfRkFMU0UpKSB7Ci0gICAgICBkZWZhdWx0QXVk
aW9EZXZpY2UgPSBBdWRpb0RldmljZS5FQVJQSUVDRTsKLSAgICB9IGVsc2UgewotICAgICAgZGVm
YXVsdEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZpY2UuU1BFQUtFUl9QSE9ORTsKLSAgICB9Ci0KLSAg
ICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIHByb3hpbWl0eSBzZW5zb3IuCi0gICAgLy8g
VGFibGV0IGRldmljZXMgKGUuZy4gTmV4dXMgNykgZG9lcyBub3Qgc3VwcG9ydCBwcm94aW1pdHkg
c2Vuc29ycy4KLSAgICAvLyBOb3RlIHRoYXQsIHRoZSBzZW5zb3Igd2lsbCBub3QgYmUgYWN0aXZl
IHVudGlsIHN0YXJ0KCkgaGFzIGJlZW4gY2FsbGVkLgotICAgIHByb3hpbWl0eVNlbnNvciA9IEFw
cFJUQ1Byb3hpbWl0eVNlbnNvci5jcmVhdGUoY29udGV4dCwgbmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIGEgc3RhdGUgY2hhbmdl
IGlzIGRldGVjdGVkLgotICAgICAgLy8gRXhhbXBsZTogdXNlciBob2xkcyBoaXMgaGFuZCBvdmVy
IHRoZSBkZXZpY2UgKGNsb3NlciB0aGFuIH41IGNtKSwKLSAgICAgIC8vIG9yIHJlbW92ZXMgaGlz
IGhhbmQgZnJvbSB0aGUgZGV2aWNlLgotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICBvblByb3hpbWl0eVNlbnNvckNoYW5nZWRTdGF0ZSgpOwotICAgICAgfQotICAgIH0pOwotICAg
IEFwcFJUQ1V0aWxzLmxvZ0RldmljZUluZm8oVEFHKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGlu
aXQoKSB7Ci0gICAgTG9nLmQoVEFHLCAiaW5pdCIpOwotICAgIGlmIChpbml0aWFsaXplZCkgewot
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFN0b3JlIGN1cnJlbnQgYXVkaW8gc3RhdGUg
c28gd2UgY2FuIHJlc3RvcmUgaXQgd2hlbiBjbG9zZSgpIGlzIGNhbGxlZC4KLSAgICBzYXZlZEF1
ZGlvTW9kZSA9IGF1ZGlvTWFuYWdlci5nZXRNb2RlKCk7Ci0gICAgc2F2ZWRJc1NwZWFrZXJQaG9u
ZU9uID0gYXVkaW9NYW5hZ2VyLmlzU3BlYWtlcnBob25lT24oKTsKLSAgICBzYXZlZElzTWljcm9w
aG9uZU11dGUgPSBhdWRpb01hbmFnZXIuaXNNaWNyb3Bob25lTXV0ZSgpOwotCi0gICAgLy8gQ3Jl
YXRlIGFuIEF1ZGlvTWFuYWdlci5PbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciBpbnN0YW5jZS4K
LSAgICBhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIgPSBuZXcgQXVkaW9NYW5hZ2VyLk9uQXVkaW9G
b2N1c0NoYW5nZUxpc3RlbmVyKCkgewotICAgICAgLy8gQ2FsbGVkIG9uIHRoZSBsaXN0ZW5lciB0
byBub3RpZnkgaWYgdGhlIGF1ZGlvIGZvY3VzIGZvciB0aGlzIGxpc3RlbmVyIGhhcyBiZWVuIGNo
YW5nZWQuCi0gICAgICAvLyBUaGUgfGZvY3VzQ2hhbmdlfCB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhl
ciB0aGUgZm9jdXMgd2FzIGdhaW5lZCwgd2hldGhlciB0aGUgZm9jdXMgd2FzIGxvc3QsCi0gICAg
ICAvLyBhbmQgd2hldGhlciB0aGF0IGxvc3MgaXMgdHJhbnNpZW50LCBvciB3aGV0aGVyIHRoZSBu
ZXcgZm9jdXMgaG9sZGVyIHdpbGwgaG9sZCBpdCBmb3IgYW4KLSAgICAgIC8vIHVua25vd24gYW1v
dW50IG9mIHRpbWUuCi0gICAgICAvLyBUT0RPKGhlbnJpa2EpOiBwb3NzaWJseSBleHRlbmQgc3Vw
cG9ydCBvZiBoYW5kbGluZyBhdWRpby1mb2N1cyBjaGFuZ2VzLiBPbmx5IGNvbnRhaW5zCi0gICAg
ICAvLyBsb2dnaW5nIGZvciBub3cuCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IG9uQXVkaW9Gb2N1c0NoYW5nZShpbnQgZm9jdXNDaGFuZ2UpIHsKLSAgICAgICAgU3RyaW5nIHR5
cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX05PVF9ERUZJTkVEIjsKLSAgICAgICAgc3dpdGNoIChm
b2N1c0NoYW5nZSkgewotICAgICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJ
TjoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0dBSU4iOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlO
X1RSQU5TSUVOVDoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0dBSU5f
VFJBTlNJRU5UIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQXVkaW9NYW5h
Z2VyLkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlRfRVhDTFVTSVZFOgotICAgICAgICAgICAgdHlw
ZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlRfRVhDTFVTSVZFIjsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJ
Tl9UUkFOU0lFTlRfTUFZX0RVQ0s6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9G
T0NVU19HQUlOX1RSQU5TSUVOVF9NQVlfRFVDSyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0xPU1M6Ci0gICAgICAgICAgICB0eXBl
T2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19MT1NTIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfTE9TU19UUkFOU0lFTlQ6Ci0gICAgICAg
ICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19MT1NTX1RSQU5TSUVOVCI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0xPU1Nf
VFJBTlNJRU5UX0NBTl9EVUNLOgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9D
VVNfTE9TU19UUkFOU0lFTlRfQ0FOX0RVQ0siOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0lOVkFM
SUQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgTG9nLmQoVEFHLCAi
b25BdWRpb0ZvY3VzQ2hhbmdlOiAiICsgdHlwZU9mQ2hhbmdlKTsKLSAgICAgIH0KLSAgICB9Owot
Ci0gICAgLy8gUmVxdWVzdCBhdWRpbyBwbGF5b3V0IGZvY3VzICh3aXRob3V0IGR1Y2tpbmcpIGFu
ZCBpbnN0YWxsIGxpc3RlbmVyIGZvciBjaGFuZ2VzIGluIGZvY3VzLgotICAgIGludCByZXN1bHQg
PSBhdWRpb01hbmFnZXIucmVxdWVzdEF1ZGlvRm9jdXMoYXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVy
LAotICAgICAgICBBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwsIEF1ZGlvTWFuYWdlci5B
VURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5UKTsKLSAgICBpZiAocmVzdWx0ID09IEF1ZGlvTWFuYWdl
ci5BVURJT0ZPQ1VTX1JFUVVFU1RfR1JBTlRFRCkgewotICAgICAgTG9nLmQoVEFHLCAiQXVkaW8g
Zm9jdXMgcmVxdWVzdCBncmFudGVkIGZvciBWT0lDRV9DQUxMIHN0cmVhbXMiKTsKLSAgICB9IGVs
c2UgewotICAgICAgTG9nLmUoVEFHLCAiQXVkaW8gZm9jdXMgcmVxdWVzdCBmYWlsZWQiKTsKLSAg
ICB9Ci0KLSAgICAvLyBTdGFydCBieSBzZXR0aW5nIE1PREVfSU5fQ09NTVVOSUNBVElPTiBhcyBk
ZWZhdWx0IGF1ZGlvIG1vZGUuIEl0IGlzCi0gICAgLy8gcmVxdWlyZWQgdG8gYmUgaW4gdGhpcyBt
b2RlIHdoZW4gcGxheW91dCBhbmQvb3IgcmVjb3JkaW5nIHN0YXJ0cyBmb3IKLSAgICAvLyBiZXN0
IHBvc3NpYmxlIFZvSVAgcGVyZm9ybWFuY2UuCi0gICAgLy8gVE9ETyhoZW5yaWthKTogd2UgbWln
aCB3YW50IHRvIHN0YXJ0IHdpdGggUklOR1RPTkUgbW9kZSBoZXJlIGluc3RlYWQuCi0gICAgYXVk
aW9NYW5hZ2VyLnNldE1vZGUoQXVkaW9NYW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNBVElPTik7Ci0K
LSAgICAvLyBBbHdheXMgZGlzYWJsZSBtaWNyb3Bob25lIG11dGUgZHVyaW5nIGEgV2ViUlRDIGNh
bGwuCi0gICAgc2V0TWljcm9waG9uZU11dGUoZmFsc2UpOwotCi0gICAgLy8gRG8gaW5pdGlhbCBz
ZWxlY3Rpb24gb2YgYXVkaW8gZGV2aWNlLiBUaGlzIHNldHRpbmcgY2FuIGxhdGVyIGJlIGNoYW5n
ZWQKLSAgICAvLyBlaXRoZXIgYnkgYWRkaW5nL3JlbW92aW5nIGEgd2lyZWQgaGVhZHNldCBvciBi
eSBjb3ZlcmluZy91bmNvdmVyaW5nIHRoZQotICAgIC8vIHByb3hpbWl0eSBzZW5zb3IuCi0gICAg
dXBkYXRlQXVkaW9EZXZpY2VTdGF0ZShoYXNXaXJlZEhlYWRzZXQoKSk7Ci0KLSAgICAvLyBSZWdp
c3RlciByZWNlaXZlciBmb3IgYnJvYWRjYXN0IGludGVudHMgcmVsYXRlZCB0byBhZGRpbmcvcmVt
b3ZpbmcgYQotICAgIC8vIHdpcmVkIGhlYWRzZXQgKEludGVudC5BQ1RJT05fSEVBRFNFVF9QTFVH
KS4KLSAgICByZWdpc3RlckZvcldpcmVkSGVhZHNldEludGVudEJyb2FkY2FzdCgpOwotCi0gICAg
aW5pdGlhbGl6ZWQgPSB0cnVlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAg
TG9nLmQoVEFHLCAiY2xvc2UiKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgdW5yZWdpc3RlckZvcldpcmVkSGVhZHNldEludGVudEJyb2FkY2Fz
dCgpOwotCi0gICAgLy8gUmVzdG9yZSBwcmV2aW91c2x5IHN0b3JlZCBhdWRpbyBzdGF0ZXMuCi0g
ICAgc2V0U3BlYWtlcnBob25lT24oc2F2ZWRJc1NwZWFrZXJQaG9uZU9uKTsKLSAgICBzZXRNaWNy
b3Bob25lTXV0ZShzYXZlZElzTWljcm9waG9uZU11dGUpOwotICAgIGF1ZGlvTWFuYWdlci5zZXRN
b2RlKHNhdmVkQXVkaW9Nb2RlKTsKLQotICAgIC8vIEFiYW5kb24gYXVkaW8gZm9jdXMuIEdpdmVz
IHRoZSBwcmV2aW91cyBmb2N1cyBvd25lciwgaWYgYW55LCBmb2N1cy4KLSAgICBhdWRpb01hbmFn
ZXIuYWJhbmRvbkF1ZGlvRm9jdXMoYXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyKTsKLSAgICBhdWRp
b0ZvY3VzQ2hhbmdlTGlzdGVuZXIgPSBudWxsOwotICAgIExvZy5kKFRBRywgIkFiYW5kb25lZCBh
dWRpbyBmb2N1cyBmb3IgVk9JQ0VfQ0FMTCBzdHJlYW1zIik7Ci0KLSAgICBpZiAocHJveGltaXR5
U2Vuc29yICE9IG51bGwpIHsKLSAgICAgIHByb3hpbWl0eVNlbnNvci5zdG9wKCk7Ci0gICAgICBw
cm94aW1pdHlTZW5zb3IgPSBudWxsOwotICAgIH0KLQotICAgIGluaXRpYWxpemVkID0gZmFsc2U7
Ci0gIH0KLQotICAvKiogQ2hhbmdlcyBzZWxlY3Rpb24gb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUg
YXVkaW8gZGV2aWNlLiAqLwotICBwdWJsaWMgdm9pZCBzZXRBdWRpb0RldmljZShBdWRpb0Rldmlj
ZSBkZXZpY2UpIHsKLSAgICBMb2cuZChUQUcsICJzZXRBdWRpb0RldmljZShkZXZpY2U9IiArIGRl
dmljZSArICIpIik7Ci0gICAgQXBwUlRDVXRpbHMuYXNzZXJ0SXNUcnVlKGF1ZGlvRGV2aWNlcy5j
b250YWlucyhkZXZpY2UpKTsKLQotICAgIHN3aXRjaCAoZGV2aWNlKSB7Ci0gICAgICBjYXNlIFNQ
RUFLRVJfUEhPTkU6Ci0gICAgICAgIHNldFNwZWFrZXJwaG9uZU9uKHRydWUpOwotICAgICAgICBz
ZWxlY3RlZEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZpY2UuU1BFQUtFUl9QSE9ORTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIEVBUlBJRUNFOgotICAgICAgICBzZXRTcGVha2VycGhvbmVPbihm
YWxzZSk7Ci0gICAgICAgIHNlbGVjdGVkQXVkaW9EZXZpY2UgPSBBdWRpb0RldmljZS5FQVJQSUVD
RTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFdJUkVEX0hFQURTRVQ6Ci0gICAgICAgIHNl
dFNwZWFrZXJwaG9uZU9uKGZhbHNlKTsKLSAgICAgICAgc2VsZWN0ZWRBdWRpb0RldmljZSA9IEF1
ZGlvRGV2aWNlLldJUkVEX0hFQURTRVQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoK
LSAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBhdWRpbyBkZXZpY2Ugc2VsZWN0aW9uIik7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBvbkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgpOwot
ICB9Ci0KLSAgLyoqIFJldHVybnMgY3VycmVudCBzZXQgb2YgYXZhaWxhYmxlL3NlbGVjdGFibGUg
YXVkaW8gZGV2aWNlcy4gKi8KLSAgcHVibGljIFNldDxBdWRpb0RldmljZT4gZ2V0QXVkaW9EZXZp
Y2VzKCkgewotICAgIHJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVTZXQobmV3IEhhc2hT
ZXQ8QXVkaW9EZXZpY2U+KGF1ZGlvRGV2aWNlcykpOwotICB9Ci0KLSAgLyoqIFJldHVybnMgdGhl
IGN1cnJlbnRseSBzZWxlY3RlZCBhdWRpbyBkZXZpY2UuICovCi0gIHB1YmxpYyBBdWRpb0Rldmlj
ZSBnZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKCkgewotICAgIHJldHVybiBzZWxlY3RlZEF1ZGlvRGV2
aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlZ2lzdGVycyByZWNlaXZlciBmb3IgdGhlIGJyb2Fk
Y2FzdGVkIGludGVudCB3aGVuIGEgd2lyZWQgaGVhZHNldCBpcwotICAgKiBwbHVnZ2VkIGluIG9y
IHVucGx1Z2dlZC4gVGhlIHJlY2VpdmVkIGludGVudCB3aWxsIGhhdmUgYW4gZXh0cmEKLSAgICog
J3N0YXRlJyB2YWx1ZSB3aGVyZSAwIG1lYW5zIHVucGx1Z2dlZCwgYW5kIDEgbWVhbnMgcGx1Z2dl
ZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCByZWdpc3RlckZvcldpcmVkSGVhZHNldEludGVudEJy
b2FkY2FzdCgpIHsKLSAgICBJbnRlbnRGaWx0ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJ
bnRlbnQuQUNUSU9OX0hFQURTRVRfUExVRyk7Ci0KLSAgICAvKiogUmVjZWl2ZXIgd2hpY2ggaGFu
ZGxlcyBjaGFuZ2VzIGluIHdpcmVkIGhlYWRzZXQgYXZhaWxhYmlsaXR5LiAqLwotICAgIHdpcmVk
SGVhZHNldFJlY2VpdmVyID0gbmV3IEJyb2FkY2FzdFJlY2VpdmVyKCkgewotICAgICAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VOUExVR0dFRCA9IDA7Ci0gICAgICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgU1RBVEVfUExVR0dFRCA9IDE7Ci0gICAgICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgSEFTX05PX01JQyA9IDA7Ci0gICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
SEFTX01JQyA9IDE7Ci0KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25SZWNl
aXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50IGludGVudCkgewotICAgICAgICBpbnQgc3RhdGUg
PSBpbnRlbnQuZ2V0SW50RXh0cmEoInN0YXRlIiwgU1RBVEVfVU5QTFVHR0VEKTsKLSAgICAgICAg
aW50IG1pY3JvcGhvbmUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoIm1pY3JvcGhvbmUiLCBIQVNfTk9f
TUlDKTsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoIm5hbWUi
KTsKLSAgICAgICAgTG9nLmQoVEFHLCAiQnJvYWRjYXN0UmVjZWl2ZXIub25SZWNlaXZlIiArIEFw
cFJUQ1V0aWxzLmdldFRocmVhZEluZm8oKSArICI6ICIKLSAgICAgICAgICAgICAgICArICJhPSIg
KyBpbnRlbnQuZ2V0QWN0aW9uKCkgKyAiLCBzPSIKLSAgICAgICAgICAgICAgICArIChzdGF0ZSA9
PSBTVEFURV9VTlBMVUdHRUQgPyAidW5wbHVnZ2VkIiA6ICJwbHVnZ2VkIikgKyAiLCBtPSIKLSAg
ICAgICAgICAgICAgICArIChtaWNyb3Bob25lID09IEhBU19NSUMgPyAibWljIiA6ICJubyBtaWMi
KSArICIsIG49IiArIG5hbWUgKyAiLCBzYj0iCi0gICAgICAgICAgICAgICAgKyBpc0luaXRpYWxT
dGlja3lCcm9hZGNhc3QoKSk7Ci0KLSAgICAgICAgYm9vbGVhbiBoYXNXaXJlZEhlYWRzZXQgPSAo
c3RhdGUgPT0gU1RBVEVfUExVR0dFRCk7Ci0gICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAg
ICAgICBjYXNlIFNUQVRFX1VOUExVR0dFRDoKLSAgICAgICAgICAgIHVwZGF0ZUF1ZGlvRGV2aWNl
U3RhdGUoaGFzV2lyZWRIZWFkc2V0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgU1RBVEVfUExVR0dFRDoKLSAgICAgICAgICAgIGlmIChzZWxlY3RlZEF1ZGlvRGV2aWNlICE9
IEF1ZGlvRGV2aWNlLldJUkVEX0hFQURTRVQpIHsKLSAgICAgICAgICAgICAgdXBkYXRlQXVkaW9E
ZXZpY2VTdGF0ZShoYXNXaXJlZEhlYWRzZXQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIExvZy5lKFRBRywgIkludmFs
aWQgc3RhdGUiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fTsKLQotICAgIGFwcHJ0Y0NvbnRleHQucmVnaXN0ZXJSZWNlaXZlcih3aXJlZEhlYWRzZXRSZWNl
aXZlciwgZmlsdGVyKTsKLSAgfQotCi0gIC8qKiBVbnJlZ2lzdGVyIHJlY2VpdmVyIGZvciBicm9h
ZGNhc3RlZCBBQ1RJT05fSEVBRFNFVF9QTFVHIGludGVudC4gKi8KLSAgcHJpdmF0ZSB2b2lkIHVu
cmVnaXN0ZXJGb3JXaXJlZEhlYWRzZXRJbnRlbnRCcm9hZGNhc3QoKSB7Ci0gICAgYXBwcnRjQ29u
dGV4dC51bnJlZ2lzdGVyUmVjZWl2ZXIod2lyZWRIZWFkc2V0UmVjZWl2ZXIpOwotICAgIHdpcmVk
SGVhZHNldFJlY2VpdmVyID0gbnVsbDsKLSAgfQotCi0gIC8qKiBTZXRzIHRoZSBzcGVha2VyIHBo
b25lIG1vZGUuICovCi0gIHByaXZhdGUgdm9pZCBzZXRTcGVha2VycGhvbmVPbihib29sZWFuIG9u
KSB7Ci0gICAgYm9vbGVhbiB3YXNPbiA9IGF1ZGlvTWFuYWdlci5pc1NwZWFrZXJwaG9uZU9uKCk7
Ci0gICAgaWYgKHdhc09uID09IG9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1ZGlv
TWFuYWdlci5zZXRTcGVha2VycGhvbmVPbihvbik7Ci0gIH0KLQotICAvKiogU2V0cyB0aGUgbWlj
cm9waG9uZSBtdXRlIHN0YXRlLiAqLwotICBwcml2YXRlIHZvaWQgc2V0TWljcm9waG9uZU11dGUo
Ym9vbGVhbiBvbikgewotICAgIGJvb2xlYW4gd2FzTXV0ZWQgPSBhdWRpb01hbmFnZXIuaXNNaWNy
b3Bob25lTXV0ZSgpOwotICAgIGlmICh3YXNNdXRlZCA9PSBvbikgewotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBhdWRpb01hbmFnZXIuc2V0TWljcm9waG9uZU11dGUob24pOwotICB9Ci0KLSAg
LyoqIEdldHMgdGhlIGN1cnJlbnQgZWFycGllY2Ugc3RhdGUuICovCi0gIHByaXZhdGUgYm9vbGVh
biBoYXNFYXJwaWVjZSgpIHsKLSAgICByZXR1cm4gYXBwcnRjQ29udGV4dC5nZXRQYWNrYWdlTWFu
YWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFja2FnZU1hbmFnZXIuRkVBVFVSRV9URUxFUEhPTlkp
OwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNrcyB3aGV0aGVyIGEgd2lyZWQgaGVhZHNldCBpcyBj
b25uZWN0ZWQgb3Igbm90LgotICAgKiBUaGlzIGlzIG5vdCBhIHZhbGlkIGluZGljYXRpb24gdGhh
dCBhdWRpbyBwbGF5YmFjayBpcyBhY3R1YWxseSBvdmVyCi0gICAqIHRoZSB3aXJlZCBoZWFkc2V0
IGFzIGF1ZGlvIHJvdXRpbmcgZGVwZW5kcyBvbiBvdGhlciBjb25kaXRpb25zLiBXZQotICAgKiBv
bmx5IHVzZSBpdCBhcyBhbiBlYXJseSBpbmRpY2F0b3IgKGR1cmluZyBpbml0aWFsaXphdGlvbikg
b2YgYW4gYXR0YWNoZWQKLSAgICogd2lyZWQgaGVhZHNldC4KLSAgICovCi0gIEBEZXByZWNhdGVk
Ci0gIHByaXZhdGUgYm9vbGVhbiBoYXNXaXJlZEhlYWRzZXQoKSB7Ci0gICAgcmV0dXJuIGF1ZGlv
TWFuYWdlci5pc1dpcmVkSGVhZHNldE9uKCk7Ci0gIH0KLQotICAvKiogVXBkYXRlIGxpc3Qgb2Yg
cG9zc2libGUgYXVkaW8gZGV2aWNlcyBhbmQgbWFrZSBuZXcgZGV2aWNlIHNlbGVjdGlvbi4gKi8K
LSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUF1ZGlvRGV2aWNlU3RhdGUoYm9vbGVhbiBoYXNXaXJlZEhl
YWRzZXQpIHsKLSAgICAvLyBVcGRhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGF1ZGlvIGRldmlj
ZXMuCi0gICAgYXVkaW9EZXZpY2VzLmNsZWFyKCk7Ci0gICAgaWYgKGhhc1dpcmVkSGVhZHNldCkg
ewotICAgICAgLy8gSWYgYSB3aXJlZCBoZWFkc2V0IGlzIGNvbm5lY3RlZCwgdGhlbiBpdCBpcyB0
aGUgb25seSBwb3NzaWJsZSBvcHRpb24uCi0gICAgICBhdWRpb0RldmljZXMuYWRkKEF1ZGlvRGV2
aWNlLldJUkVEX0hFQURTRVQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBObyB3aXJlZCBoZWFk
c2V0LCBoZW5jZSB0aGUgYXVkaW8tZGV2aWNlIGxpc3QgY2FuIGNvbnRhaW4gc3BlYWtlcgotICAg
ICAgLy8gcGhvbmUgKG9uIGEgdGFibGV0KSwgb3Igc3BlYWtlciBwaG9uZSBhbmQgZWFycGllY2Ug
KG9uIG1vYmlsZSBwaG9uZSkuCi0gICAgICBhdWRpb0RldmljZXMuYWRkKEF1ZGlvRGV2aWNlLlNQ
RUFLRVJfUEhPTkUpOwotICAgICAgaWYgKGhhc0VhcnBpZWNlKCkpIHsKLSAgICAgICAgYXVkaW9E
ZXZpY2VzLmFkZChBdWRpb0RldmljZS5FQVJQSUVDRSk7Ci0gICAgICB9Ci0gICAgfQotICAgIExv
Zy5kKFRBRywgImF1ZGlvRGV2aWNlczogIiArIGF1ZGlvRGV2aWNlcyk7Ci0KLSAgICAvLyBTd2l0
Y2ggdG8gY29ycmVjdCBhdWRpbyBkZXZpY2UgZ2l2ZW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGF1
ZGlvIGRldmljZXMuCi0gICAgaWYgKGhhc1dpcmVkSGVhZHNldCkgewotICAgICAgc2V0QXVkaW9E
ZXZpY2UoQXVkaW9EZXZpY2UuV0lSRURfSEVBRFNFVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNl
dEF1ZGlvRGV2aWNlKGRlZmF1bHRBdWRpb0RldmljZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIENh
bGxlZCBlYWNoIHRpbWUgYSBuZXcgYXVkaW8gZGV2aWNlIGhhcyBiZWVuIGFkZGVkIG9yIHJlbW92
ZWQuICovCi0gIHByaXZhdGUgdm9pZCBvbkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgpIHsKLSAg
ICBMb2cuZChUQUcsICJvbkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZTogZGV2aWNlcz0iICsgYXVk
aW9EZXZpY2VzICsgIiwgc2VsZWN0ZWQ9IgotICAgICAgICAgICAgKyBzZWxlY3RlZEF1ZGlvRGV2
aWNlKTsKLQotICAgIC8vIEVuYWJsZSB0aGUgcHJveGltaXR5IHNlbnNvciBpZiB0aGVyZSBhcmUg
dHdvIGF2YWlsYWJsZSBhdWRpbyBkZXZpY2VzCi0gICAgLy8gaW4gdGhlIGxpc3QuIEdpdmVuIHRo
ZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB3ZSBrbm93IHRoYXQgdGhlIGNob2ljZQotICAgIC8v
IHdpbGwgdGhlbiBiZSBiZXR3ZWVuIEVBUlBJRUNFIGFuZCBTUEVBS0VSX1BIT05FLgotICAgIGlm
IChhdWRpb0RldmljZXMuc2l6ZSgpID09IDIpIHsKLSAgICAgIEFwcFJUQ1V0aWxzLmFzc2VydElz
VHJ1ZShhdWRpb0RldmljZXMuY29udGFpbnMoQXVkaW9EZXZpY2UuRUFSUElFQ0UpCi0gICAgICAg
ICAgJiYgYXVkaW9EZXZpY2VzLmNvbnRhaW5zKEF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkUpKTsK
LSAgICAgIC8vIFN0YXJ0IHRoZSBwcm94aW1pdHkgc2Vuc29yLgotICAgICAgcHJveGltaXR5U2Vu
c29yLnN0YXJ0KCk7Ci0gICAgfSBlbHNlIGlmIChhdWRpb0RldmljZXMuc2l6ZSgpID09IDEpIHsK
LSAgICAgIC8vIFN0b3AgdGhlIHByb3hpbWl0eSBzZW5zb3Igc2luY2UgaXQgaXMgbm8gbG9uZ2Vy
IG5lZWRlZC4KLSAgICAgIHByb3hpbWl0eVNlbnNvci5zdG9wKCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIExvZy5lKFRBRywgIkludmFsaWQgZGV2aWNlIGxpc3QiKTsKLSAgICB9Ci0KLSAgICBpZiAo
b25TdGF0ZUNoYW5nZUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgIC8vIFJ1biBjYWxsYmFjayB0
byBub3RpZnkgYSBsaXN0ZW5pbmcgY2xpZW50LiBUaGUgY2xpZW50IGNhbiB0aGVuCi0gICAgICAv
LyB1c2UgcHVibGljIGdldHRlcnMgdG8gcXVlcnkgdGhlIG5ldyBzdGF0ZS4KLSAgICAgIG9uU3Rh
dGVDaGFuZ2VMaXN0ZW5lci5ydW4oKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29y
Zy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENDbGllbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Ny
Yy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENDbGllbnQuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDEzMSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJS
VEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1w
b3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9u
RGVzY3JpcHRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotLyoqCi0gKiBBcHBSVEND
bGllbnQgaXMgdGhlIGludGVyZmFjZSByZXByZXNlbnRpbmcgYW4gQXBwUlRDIGNsaWVudC4KLSAq
LwotcHVibGljIGludGVyZmFjZSBBcHBSVENDbGllbnQgewotICAvKioKLSAgICogU3RydWN0IGhv
bGRpbmcgdGhlIGNvbm5lY3Rpb24gcGFyYW1ldGVycyBvZiBhbiBBcHBSVEMgcm9vbS4KLSAgICov
Ci0gIGNsYXNzIFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyB7Ci0gICAgcHVibGljIGZpbmFsIFN0
cmluZyByb29tVXJsOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgcm9vbUlkOwotICAgIHB1Ymxp
YyBmaW5hbCBib29sZWFuIGxvb3BiYWNrOwotICAgIHB1YmxpYyBSb29tQ29ubmVjdGlvblBhcmFt
ZXRlcnMoU3RyaW5nIHJvb21VcmwsIFN0cmluZyByb29tSWQsIGJvb2xlYW4gbG9vcGJhY2spIHsK
LSAgICAgIHRoaXMucm9vbVVybCA9IHJvb21Vcmw7Ci0gICAgICB0aGlzLnJvb21JZCA9IHJvb21J
ZDsKLSAgICAgIHRoaXMubG9vcGJhY2sgPSBsb29wYmFjazsKLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICogQXN5bmNocm9ub3VzbHkgY29ubmVjdCB0byBhbiBBcHBSVEMgcm9vbSBVUkwgdXNpbmcg
c3VwcGxpZWQgY29ubmVjdGlvbgotICAgKiBwYXJhbWV0ZXJzLiBPbmNlIGNvbm5lY3Rpb24gaXMg
ZXN0YWJsaXNoZWQgb25Db25uZWN0ZWRUb1Jvb20oKQotICAgKiBjYWxsYmFjayB3aXRoIHJvb20g
cGFyYW1ldGVycyBpcyBpbnZva2VkLgotICAgKi8KLSAgdm9pZCBjb25uZWN0VG9Sb29tKFJvb21D
b25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVycyk7Ci0KLSAgLyoqCi0gICAq
IFNlbmQgb2ZmZXIgU0RQIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgICovCi0gIHZvaWQg
c2VuZE9mZmVyU2RwKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gIC8qKgotICAg
KiBTZW5kIGFuc3dlciBTRFAgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICAgKi8KLSAgdm9p
ZCBzZW5kQW5zd2VyU2RwKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gIC8qKgot
ICAgKiBTZW5kIEljZSBjYW5kaWRhdGUgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICAgKi8K
LSAgdm9pZCBzZW5kTG9jYWxJY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0
ZSk7Ci0KLSAgLyoqCi0gICAqIFNlbmQgcmVtb3ZlZCBJQ0UgY2FuZGlkYXRlcyB0byB0aGUgb3Ro
ZXIgcGFydGljaXBhbnQuCi0gICAqLwotICB2b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZVJlbW92
YWxzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpOwotCi0gIC8qKgotICAgKiBEaXNj
b25uZWN0IGZyb20gcm9vbS4KLSAgICovCi0gIHZvaWQgZGlzY29ubmVjdEZyb21Sb29tKCk7Ci0K
LSAgLyoqCi0gICAqIFN0cnVjdCBob2xkaW5nIHRoZSBzaWduYWxpbmcgcGFyYW1ldGVycyBvZiBh
biBBcHBSVEMgcm9vbS4KLSAgICovCi0gIGNsYXNzIFNpZ25hbGluZ1BhcmFtZXRlcnMgewotICAg
IHB1YmxpYyBmaW5hbCBMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVyczsK
LSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBpbml0aWF0b3I7Ci0gICAgcHVibGljIGZpbmFsIFN0
cmluZyBjbGllbnRJZDsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHdzc1VybDsKLSAgICBwdWJs
aWMgZmluYWwgU3RyaW5nIHdzc1Bvc3RVcmw7Ci0gICAgcHVibGljIGZpbmFsIFNlc3Npb25EZXNj
cmlwdGlvbiBvZmZlclNkcDsKLSAgICBwdWJsaWMgZmluYWwgTGlzdDxJY2VDYW5kaWRhdGU+IGlj
ZUNhbmRpZGF0ZXM7Ci0KLSAgICBwdWJsaWMgU2lnbmFsaW5nUGFyYW1ldGVycyhMaXN0PFBlZXJD
b25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycywgYm9vbGVhbiBpbml0aWF0b3IsCi0gICAg
ICAgIFN0cmluZyBjbGllbnRJZCwgU3RyaW5nIHdzc1VybCwgU3RyaW5nIHdzc1Bvc3RVcmwsIFNl
c3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCwKLSAgICAgICAgTGlzdDxJY2VDYW5kaWRhdGU+IGlj
ZUNhbmRpZGF0ZXMpIHsKLSAgICAgIHRoaXMuaWNlU2VydmVycyA9IGljZVNlcnZlcnM7Ci0gICAg
ICB0aGlzLmluaXRpYXRvciA9IGluaXRpYXRvcjsKLSAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGll
bnRJZDsKLSAgICAgIHRoaXMud3NzVXJsID0gd3NzVXJsOwotICAgICAgdGhpcy53c3NQb3N0VXJs
ID0gd3NzUG9zdFVybDsKLSAgICAgIHRoaXMub2ZmZXJTZHAgPSBvZmZlclNkcDsKLSAgICAgIHRo
aXMuaWNlQ2FuZGlkYXRlcyA9IGljZUNhbmRpZGF0ZXM7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0g
ICAqIENhbGxiYWNrIGludGVyZmFjZSBmb3IgbWVzc2FnZXMgZGVsaXZlcmVkIG9uIHNpZ25hbGlu
ZyBjaGFubmVsLgotICAgKgotICAgKiA8cD5NZXRob2RzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGlu
dm9rZWQgb24gdGhlIFVJIHRocmVhZCBvZiB8YWN0aXZpdHl8LgotICAgKi8KLSAgaW50ZXJmYWNl
IFNpZ25hbGluZ0V2ZW50cyB7Ci0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSB0
aGUgcm9vbSdzIHNpZ25hbGluZyBwYXJhbWV0ZXJzCi0gICAgICogU2lnbmFsaW5nUGFyYW1ldGVy
cyBhcmUgZXh0cmFjdGVkLgotICAgICAqLwotICAgIHZvaWQgb25Db25uZWN0ZWRUb1Jvb20oZmlu
YWwgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbXMpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJh
Y2sgZmlyZWQgb25jZSByZW1vdGUgU0RQIGlzIHJlY2VpdmVkLgotICAgICAqLwotICAgIHZvaWQg
b25SZW1vdGVEZXNjcmlwdGlvbihmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKTsKLQotICAg
IC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcmVtb3RlIEljZSBjYW5kaWRhdGUgaXMg
cmVjZWl2ZWQuCi0gICAgICovCi0gICAgdm9pZCBvblJlbW90ZUljZUNhbmRpZGF0ZShmaW5hbCBJ
Y2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVk
IG9uY2UgcmVtb3RlIEljZSBjYW5kaWRhdGUgcmVtb3ZhbHMgYXJlIHJlY2VpdmVkLgotICAgICAq
LwotICAgIHZvaWQgb25SZW1vdGVJY2VDYW5kaWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRh
dGVbXSBjYW5kaWRhdGVzKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2Ug
Y2hhbm5lbCBpcyBjbG9zZWQuCi0gICAgICovCi0gICAgdm9pZCBvbkNoYW5uZWxDbG9zZSgpOwot
Ci0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBjaGFubmVsIGVycm9yIGhhcHBl
bmVkLgotICAgICAqLwotICAgIHZvaWQgb25DaGFubmVsRXJyb3IoZmluYWwgU3RyaW5nIGRlc2Ny
aXB0aW9uKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJU
Q1Byb3hpbWl0eVNlbnNvci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9BcHBSVENQcm94aW1pdHlTZW5zb3IuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ1Byb3hpbWl0eVNlbnNvci5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhl
IFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwu
QXBwUlRDVXRpbHM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBh
bmRyb2lkLmhhcmR3YXJlLlNlbnNvcjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvckV2
ZW50OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuU2Vuc29yRXZlbnRMaXN0ZW5lcjsKLWltcG9y
dCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvck1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWls
ZDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5UaHJlYWRV
dGlsczsKLQotLyoqCi0gKiBBcHBSVENQcm94aW1pdHlTZW5zb3IgbWFuYWdlcyBmdW5jdGlvbnMg
cmVsYXRlZCB0byB0aGUgcHJveGltaXR5IHNlbnNvciBpbgotICogdGhlIEFwcFJUQyBkZW1vLgot
ICogT24gbW9zdCBkZXZpY2UsIHRoZSBwcm94aW1pdHkgc2Vuc29yIGlzIGltcGxlbWVudGVkIGFz
IGEgYm9vbGVhbi1zZW5zb3IuCi0gKiBJdCByZXR1cm5zIGp1c3QgdHdvIHZhbHVlcyAiTkVBUiIg
b3IgIkZBUiIuIFRocmVzaG9sZGluZyBpcyBkb25lIG9uIHRoZSBMVVgKLSAqIHZhbHVlIGkuZS4g
dGhlIExVWCB2YWx1ZSBvZiB0aGUgbGlnaHQgc2Vuc29yIGlzIGNvbXBhcmVkIHdpdGggYSB0aHJl
c2hvbGQuCi0gKiBBIExVWC12YWx1ZSBtb3JlIHRoYW4gdGhlIHRocmVzaG9sZCBtZWFucyB0aGUg
cHJveGltaXR5IHNlbnNvciByZXR1cm5zICJGQVIiLgotICogQW55dGhpbmcgbGVzcyB0aGFuIHRo
ZSB0aHJlc2hvbGQgdmFsdWUgYW5kIHRoZSBzZW5zb3IgIHJldHVybnMgIk5FQVIiLgotICovCi1w
dWJsaWMgY2xhc3MgQXBwUlRDUHJveGltaXR5U2Vuc29yIGltcGxlbWVudHMgU2Vuc29yRXZlbnRM
aXN0ZW5lciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQXBwUlRDUHJv
eGltaXR5U2Vuc29yIjsKLQotICAvLyBUaGlzIGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkLCBzdGFy
dGVkIGFuZCBzdG9wcGVkIG9uIG9uZSB0aHJlYWQKLSAgLy8gKGUuZy4gdGhlIG1haW4gdGhyZWFk
KS4gV2UgdXNlIHxub25UaHJlYWRTYWZlfCB0byBlbnN1cmUgdGhhdCB0aGlzIGlzCi0gIC8vIHRo
ZSBjYXNlLiBPbmx5IGFjdGl2ZSB3aGVuIHxERUJVR3wgaXMgc2V0IHRvIHRydWUuCi0gIHByaXZh
dGUgZmluYWwgVGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlciB0aHJlYWRDaGVja2VyID0gbmV3IFRo
cmVhZFV0aWxzLlRocmVhZENoZWNrZXIoKTsKLQotICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG9u
U2Vuc29yU3RhdGVMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBmaW5hbCBTZW5zb3JNYW5hZ2VyIHNlbnNv
ck1hbmFnZXI7Ci0gIHByaXZhdGUgU2Vuc29yIHByb3hpbWl0eVNlbnNvciA9IG51bGw7Ci0gIHBy
aXZhdGUgYm9vbGVhbiBsYXN0U3RhdGVSZXBvcnRJc05lYXIgPSBmYWxzZTsKLQotICAvKiogQ29u
c3RydWN0aW9uICovCi0gIHN0YXRpYyBBcHBSVENQcm94aW1pdHlTZW5zb3IgY3JlYXRlKENvbnRl
eHQgY29udGV4dCwgUnVubmFibGUgc2Vuc29yU3RhdGVMaXN0ZW5lcikgewotICAgIHJldHVybiBu
ZXcgQXBwUlRDUHJveGltaXR5U2Vuc29yKGNvbnRleHQsIHNlbnNvclN0YXRlTGlzdGVuZXIpOwot
ICB9Ci0KLSAgcHJpdmF0ZSBBcHBSVENQcm94aW1pdHlTZW5zb3IoQ29udGV4dCBjb250ZXh0LCBS
dW5uYWJsZSBzZW5zb3JTdGF0ZUxpc3RlbmVyKSB7Ci0gICAgTG9nLmQoVEFHLCAiQXBwUlRDUHJv
eGltaXR5U2Vuc29yIiArIEFwcFJUQ1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgb25TZW5z
b3JTdGF0ZUxpc3RlbmVyID0gc2Vuc29yU3RhdGVMaXN0ZW5lcjsKLSAgICBzZW5zb3JNYW5hZ2Vy
ID0gKChTZW5zb3JNYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5TRU5T
T1JfU0VSVklDRSkpOwotICB9Ci0KLSAgLyoqCi0gICAqIEFjdGl2YXRlIHRoZSBwcm94aW1pdHkg
c2Vuc29yLiBBbHNvIGRvIGluaXRpYWxpemF0aW9uIGlmIGNhbGxlZCBmb3IgdGhlCi0gICAqIGZp
cnN0IHRpbWUuCi0gICAqLwotICBwdWJsaWMgYm9vbGVhbiBzdGFydCgpIHsKLSAgICB0aHJlYWRD
aGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nLmQoVEFHLCAic3RhcnQiICsg
QXBwUlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICBpZiAoIWluaXREZWZhdWx0U2Vuc29y
KCkpIHsKLSAgICAgIC8vIFByb3hpbWl0eSBzZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlz
IGRldmljZS4KLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc2Vuc29yTWFuYWdlci5y
ZWdpc3Rlckxpc3RlbmVyKHRoaXMsIHByb3hpbWl0eVNlbnNvciwgU2Vuc29yTWFuYWdlci5TRU5T
T1JfREVMQVlfTk9STUFMKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKiBEZWFjdGl2
YXRlIHRoZSBwcm94aW1pdHkgc2Vuc29yLiAqLwotICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAg
IHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2cuZChUQUcsICJz
dG9wIiArIEFwcFJUQ1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKHByb3hpbWl0eVNl
bnNvciA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHNlbnNvck1hbmFnZXIu
dW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMsIHByb3hpbWl0eVNlbnNvcik7Ci0gIH0KLQotICAvKiog
R2V0dGVyIGZvciBsYXN0IHJlcG9ydGVkIHN0YXRlLiBTZXQgdG8gdHJ1ZSBpZiAibmVhciIgaXMg
cmVwb3J0ZWQuICovCi0gIHB1YmxpYyBib29sZWFuIHNlbnNvclJlcG9ydHNOZWFyU3RhdGUoKSB7
Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIHJldHVybiBs
YXN0U3RhdGVSZXBvcnRJc05lYXI7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFs
IHZvaWQgb25BY2N1cmFjeUNoYW5nZWQoU2Vuc29yIHNlbnNvciwgaW50IGFjY3VyYWN5KSB7Ci0g
ICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIEFwcFJUQ1V0aWxz
LmFzc2VydElzVHJ1ZShzZW5zb3IuZ2V0VHlwZSgpID09IFNlbnNvci5UWVBFX1BST1hJTUlUWSk7
Ci0gICAgaWYgKGFjY3VyYWN5ID09IFNlbnNvck1hbmFnZXIuU0VOU09SX1NUQVRVU19VTlJFTElB
QkxFKSB7Ci0gICAgICBMb2cuZShUQUcsICJUaGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoaXMgc2Vu
c29yIGNhbm5vdCBiZSB0cnVzdGVkIik7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBmaW5hbCB2b2lkIG9uU2Vuc29yQ2hhbmdlZChTZW5zb3JFdmVudCBldmVudCkgewotICAg
IHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBBcHBSVENVdGlscy5h
c3NlcnRJc1RydWUoZXZlbnQuc2Vuc29yLmdldFR5cGUoKSA9PSBTZW5zb3IuVFlQRV9QUk9YSU1J
VFkpOwotICAgIC8vIEFzIGEgYmVzdCBwcmFjdGljZTsgZG8gYXMgbGl0dGxlIGFzIHBvc3NpYmxl
IHdpdGhpbiB0aGlzIG1ldGhvZCBhbmQKLSAgICAvLyBhdm9pZCBibG9ja2luZy4KLSAgICBmbG9h
dCBkaXN0YW5jZUluQ2VudGltZXRlcnMgPSBldmVudC52YWx1ZXNbMF07Ci0gICAgaWYgKGRpc3Rh
bmNlSW5DZW50aW1ldGVycyA8IHByb3hpbWl0eVNlbnNvci5nZXRNYXhpbXVtUmFuZ2UoKSkgewot
ICAgICAgTG9nLmQoVEFHLCAiUHJveGltaXR5IHNlbnNvciA9PiBORUFSIHN0YXRlIik7Ci0gICAg
ICBsYXN0U3RhdGVSZXBvcnRJc05lYXIgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cu
ZChUQUcsICJQcm94aW1pdHkgc2Vuc29yID0+IEZBUiBzdGF0ZSIpOwotICAgICAgbGFzdFN0YXRl
UmVwb3J0SXNOZWFyID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gUmVwb3J0IGFib3V0IG5ldyBz
dGF0ZSB0byBsaXN0ZW5pbmcgY2xpZW50LiBDbGllbnQgY2FuIHRoZW4gY2FsbAotICAgIC8vIHNl
bnNvclJlcG9ydHNOZWFyU3RhdGUoKSB0byBxdWVyeSB0aGUgY3VycmVudCBzdGF0ZSAoTkVBUiBv
ciBGQVIpLgotICAgIGlmIChvblNlbnNvclN0YXRlTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAg
b25TZW5zb3JTdGF0ZUxpc3RlbmVyLnJ1bigpOwotICAgIH0KLQotICAgIExvZy5kKFRBRywgIm9u
U2Vuc29yQ2hhbmdlZCIgKyBBcHBSVENVdGlscy5nZXRUaHJlYWRJbmZvKCkgKyAiOiAiCi0gICAg
ICAgICAgICArICJhY2N1cmFjeT0iICsgZXZlbnQuYWNjdXJhY3kgKyAiLCB0aW1lc3RhbXA9IiAr
IGV2ZW50LnRpbWVzdGFtcCArICIsIGRpc3RhbmNlPSIKLSAgICAgICAgICAgICsgZXZlbnQudmFs
dWVzWzBdKTsKLSAgfQotCi0gIC8qKgotICAgKiBHZXQgZGVmYXVsdCBwcm94aW1pdHkgc2Vuc29y
IGlmIGl0IGV4aXN0cy4gVGFibGV0IGRldmljZXMgKGUuZy4gTmV4dXMgNykKLSAgICogZG9lcyBu
b3Qgc3VwcG9ydCB0aGlzIHR5cGUgb2Ygc2Vuc29yIGFuZCBmYWxzZSB3aWxsIGJlIHJldHVybmVk
IGluIHN1Y2gKLSAgICogY2FzZXMuCi0gICAqLwotICBwcml2YXRlIGJvb2xlYW4gaW5pdERlZmF1
bHRTZW5zb3IoKSB7Ci0gICAgaWYgKHByb3hpbWl0eVNlbnNvciAhPSBudWxsKSB7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcHJveGltaXR5U2Vuc29yID0gc2Vuc29yTWFuYWdlci5n
ZXREZWZhdWx0U2Vuc29yKFNlbnNvci5UWVBFX1BST1hJTUlUWSk7Ci0gICAgaWYgKHByb3hpbWl0
eVNlbnNvciA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGxvZ1By
b3hpbWl0eVNlbnNvckluZm8oKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKiBIZWxw
ZXIgbWV0aG9kIGZvciBsb2dnaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm94aW1pdHkgc2Vu
c29yLiAqLwotICBwcml2YXRlIHZvaWQgbG9nUHJveGltaXR5U2Vuc29ySW5mbygpIHsKLSAgICBp
ZiAocHJveGltaXR5U2Vuc29yID09IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
U3RyaW5nQnVpbGRlciBpbmZvID0gbmV3IFN0cmluZ0J1aWxkZXIoIlByb3hpbWl0eSBzZW5zb3I6
ICIpOwotICAgIGluZm8uYXBwZW5kKCJuYW1lPSIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0
TmFtZSgpKTsKLSAgICBpbmZvLmFwcGVuZCgiLCB2ZW5kb3I6ICIpLmFwcGVuZChwcm94aW1pdHlT
ZW5zb3IuZ2V0VmVuZG9yKCkpOwotICAgIGluZm8uYXBwZW5kKCIsIHBvd2VyOiAiKS5hcHBlbmQo
cHJveGltaXR5U2Vuc29yLmdldFBvd2VyKCkpOwotICAgIGluZm8uYXBwZW5kKCIsIHJlc29sdXRp
b246ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0UmVzb2x1dGlvbigpKTsKLSAgICBpbmZv
LmFwcGVuZCgiLCBtYXggcmFuZ2U6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0TWF4aW11
bVJhbmdlKCkpOwotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lP
Tl9DT0RFUy5HSU5HRVJCUkVBRCkgewotICAgICAgLy8gQWRkZWQgaW4gQVBJIGxldmVsIDkuCi0g
ICAgICBpbmZvLmFwcGVuZCgiLCBtaW4gZGVsYXk6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3Iu
Z2V0TWluRGVsYXkoKSk7Ci0gICAgfQotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0g
QnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVRfV0FUQ0gpIHsKLSAgICAgIC8vIEFkZGVkIGluIEFQ
SSBsZXZlbCAyMC4KLSAgICAgIGluZm8uYXBwZW5kKCIsIHR5cGU6ICIpLmFwcGVuZChwcm94aW1p
dHlTZW5zb3IuZ2V0U3RyaW5nVHlwZSgpKTsKLSAgICB9Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04u
U0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QKSB7Ci0gICAgICAvLyBBZGRl
ZCBpbiBBUEkgbGV2ZWwgMjEuCi0gICAgICBpbmZvLmFwcGVuZCgiLCBtYXggZGVsYXk6ICIpLmFw
cGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0TWF4RGVsYXkoKSk7Ci0gICAgICBpbmZvLmFwcGVuZCgi
LCByZXBvcnRpbmcgbW9kZTogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRSZXBvcnRpbmdN
b2RlKCkpOwotICAgICAgaW5mby5hcHBlbmQoIiwgaXNXYWtlVXBTZW5zb3I6ICIpLmFwcGVuZChw
cm94aW1pdHlTZW5zb3IuaXNXYWtlVXBTZW5zb3IoKSk7Ci0gICAgfQotICAgIExvZy5kKFRBRywg
aW5mby50b1N0cmluZygpKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBw
cnRjL0NhbGxBY3Rpdml0eS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9DYWxsQWN0aXZpdHkuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMv
b3JnL2FwcHNwb3QvYXBwcnRjL0NhbGxBY3Rpdml0eS5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
ODcxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBw
cnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAu
QWxlcnREaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuRnJhZ21lbnRUcmFuc2FjdGlvbjsKLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlh
bG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5k
cm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEucHJv
amVjdGlvbi5NZWRpYVByb2plY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0aW9u
Lk1lZGlhUHJvamVjdGlvbk1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0
IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBh
bmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWlt
cG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1w
b3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5k
b3dNYW5hZ2VyLkxheW91dFBhcmFtczsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKLWlt
cG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5SdW50aW1lRXhjZXB0
aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7
Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5Sb29tQ29ubmVjdGlvblBh
cmFtZXRlcnM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWduYWxp
bmdQYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlvbkNs
aWVudC5QZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmEx
RW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYTJFbnVtZXJhdG9yOwotaW1wb3J0
IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLkVnbEJhc2U7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5GaWxlVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRj
LkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5QZWVyQ29ubmVjdGlvbkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SZW5kZXJlckNv
bW1vbi5TY2FsaW5nVHlwZTsKLWltcG9ydCBvcmcud2VicnRjLlNjcmVlbkNhcHR1cmVyQW5kcm9p
ZDsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcud2Vi
cnRjLlN0YXRzUmVwb3J0OwotaW1wb3J0IG9yZy53ZWJydGMuU3VyZmFjZVZpZXdSZW5kZXJlcjsK
LWltcG9ydCBvcmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRl
b0ZpbGVSZW5kZXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXI7Ci0KLS8qKgot
ICogQWN0aXZpdHkgZm9yIHBlZXIgY29ubmVjdGlvbiBjYWxsIHNldHVwLCBjYWxsIHdhaXRpbmcK
LSAqIGFuZCBjYWxsIHZpZXcuCi0gKi8KLXB1YmxpYyBjbGFzcyBDYWxsQWN0aXZpdHkgZXh0ZW5k
cyBBY3Rpdml0eSBpbXBsZW1lbnRzIEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQZWVyQ29u
bmVjdGlvbkNsaWVudC5QZWVyQ29ubmVjdGlvbkV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxGcmFnbWVudC5PbkNhbGxFdmVu
dHMgewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ST09NSUQgPSAib3JnLmFw
cHNwb3QuYXBwcnRjLlJPT01JRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJB
X0xPT1BCQUNLID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5MT09QQkFDSyI7Ci0gIHB1YmxpYyBzdGF0
aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVPX0NBTEwgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJ
REVPX0NBTEwiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9TQ1JFRU5DQVBU
VVJFID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5TQ1JFRU5DQVBUVVJFIjsKLSAgcHVibGljIHN0YXRp
YyBmaW5hbCBTdHJpbmcgRVhUUkFfQ0FNRVJBMiA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQ0FNRVJB
MiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVPX1dJRFRIID0gIm9y
Zy5hcHBzcG90LmFwcHJ0Yy5WSURFT19XSURUSCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3Ry
aW5nIEVYVFJBX1ZJREVPX0hFSUdIVCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fSEVJR0hU
IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9fRlBTID0gIm9yZy5h
cHBzcG90LmFwcHJ0Yy5WSURFT19GUFMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBF
WFRSQV9WSURFT19DQVBUVVJFUVVBTElUWVNMSURFUl9FTkFCTEVEID0KLSAgICAgICJvcmcuYXBw
c29wdC5hcHBydGMuVklERU9fQ0FQVFVSRVFVQUxJVFlTTElERVIiOwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19CSVRSQVRFID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5W
SURFT19CSVRSQVRFIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9D
T0RFQyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9DT0RFQyI7Ci0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgU3RyaW5nIEVYVFJBX0hXQ09ERUNfRU5BQkxFRCA9ICJvcmcuYXBwc3BvdC5hcHBydGMu
SFdDT0RFQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0NBUFRVUkVUT1RF
WFRVUkVfRU5BQkxFRCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQ0FQVFVSRVRPVEVYVFVSRSI7Ci0g
IHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0FVRElPX0JJVFJBVEUgPSAib3JnLmFw
cHNwb3QuYXBwcnRjLkFVRElPX0JJVFJBVEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmlu
ZyBFWFRSQV9BVURJT0NPREVDID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5BVURJT0NPREVDIjsKLSAg
cHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfTk9BVURJT1BST0NFU1NJTkdfRU5BQkxF
RCA9Ci0gICAgICAib3JnLmFwcHNwb3QuYXBwcnRjLk5PQVVESU9QUk9DRVNTSU5HIjsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQUVDRFVNUF9FTkFCTEVEID0gIm9yZy5hcHBz
cG90LmFwcHJ0Yy5BRUNEVU1QIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFf
T1BFTlNMRVNfRU5BQkxFRCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuT1BFTlNMRVMiOwotICBwdWJs
aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FFQyA9ICJvcmcu
YXBwc3BvdC5hcHBydGMuRElTQUJMRV9CVUlMVF9JTl9BRUMiOwotICBwdWJsaWMgc3RhdGljIGZp
bmFsIFN0cmluZyBFWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FHQyA9ICJvcmcuYXBwc3BvdC5hcHBy
dGMuRElTQUJMRV9CVUlMVF9JTl9BR0MiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBF
WFRSQV9ESVNBQkxFX0JVSUxUX0lOX05TID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5ESVNBQkxFX0JV
SUxUX0lOX05TIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfRU5BQkxFX0xF
VkVMX0NPTlRST0wgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkVOQUJMRV9MRVZFTF9DT05UUk9MIjsK
LSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfRElTUExBWV9IVUQgPSAib3JnLmFw
cHNwb3QuYXBwcnRjLkRJU1BMQVlfSFVEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg
RVhUUkFfVFJBQ0lORyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVFJBQ0lORyI7Ci0gIHB1YmxpYyBz
dGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0NNRExJTkUgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkNN
RExJTkUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9SVU5USU1FID0gIm9y
Zy5hcHBzcG90LmFwcHJ0Yy5SVU5USU1FIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg
RVhUUkFfVklERU9fRklMRV9BU19DQU1FUkEgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJREVPX0ZJ
TEVfQVNfQ0FNRVJBIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU0FWRV9S
RU1PVEVfVklERU9fVE9fRklMRSA9Ci0gICAgICAib3JnLmFwcHNwb3QuYXBwcnRjLlNBVkVfUkVN
T1RFX1ZJREVPX1RPX0ZJTEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9T
QVZFX1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRIID0KLSAgICAgICJvcmcuYXBwc3BvdC5hcHBy
dGMuU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9XSURUSCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nIEVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hUID0KLSAgICAg
ICJvcmcuYXBwc3BvdC5hcHBydGMuU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQiOwot
ICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9VU0VfVkFMVUVTX0ZST01fSU5URU5U
ID0KLSAgICAgICJvcmcuYXBwc3BvdC5hcHBydGMuVVNFX1ZBTFVFU19GUk9NX0lOVEVOVCI7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ2FsbFJUQ0NsaWVudCI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBDQVBUVVJFX1BFUk1JU1NJT05fUkVRVUVTVF9DT0RFID0g
MTsKLQotICAvLyBMaXN0IG9mIG1hbmRhdG9yeSBhcHBsaWNhdGlvbiBwZXJtaXNzaW9ucy4KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gTUFOREFUT1JZX1BFUk1JU1NJT05TID0geyJh
bmRyb2lkLnBlcm1pc3Npb24uTU9ESUZZX0FVRElPX1NFVFRJTkdTIiwKLSAgICAgICJhbmRyb2lk
LnBlcm1pc3Npb24uUkVDT1JEX0FVRElPIiwgImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCJ9
OwotCi0gIC8vIFBlZXIgY29ubmVjdGlvbiBzdGF0aXN0aWNzIGNhbGxiYWNrIHBlcmlvZCBpbiBt
cy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRfQ0FMTEJBQ0tfUEVSSU9EID0gMTAw
MDsKLSAgLy8gTG9jYWwgcHJldmlldyBzY3JlZW4gcG9zaXRpb24gYmVmb3JlIGNhbGwgaXMgY29u
bmVjdGVkLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfWF9DT05ORUNUSU5HID0g
MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX1lfQ09OTkVDVElORyA9IDA7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9XSURUSF9DT05ORUNUSU5HID0gMTAwOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfSEVJR0hUX0NPTk5FQ1RJTkcgPSAxMDA7
Ci0gIC8vIExvY2FsIHByZXZpZXcgc2NyZWVuIHBvc2l0aW9uIGFmdGVyIGNhbGwgaXMgY29ubmVj
dGVkLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfWF9DT05ORUNURUQgPSA3MjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX1lfQ09OTkVDVEVEID0gNzI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9XSURUSF9DT05ORUNURUQgPSAyNTsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX0hFSUdIVF9DT05ORUNURUQgPSAyNTsKLSAgLy8g
UmVtb3RlIHZpZGVvIHNjcmVlbiBwb3NpdGlvbgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
UkVNT1RFX1ggPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVNT1RFX1kgPSAwOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVNT1RFX1dJRFRIID0gMTAwOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgUkVNT1RFX0hFSUdIVCA9IDEwMDsKLSAgcHJpdmF0ZSBQZWVyQ29u
bmVjdGlvbkNsaWVudCBwZWVyQ29ubmVjdGlvbkNsaWVudCA9IG51bGw7Ci0gIHByaXZhdGUgQXBw
UlRDQ2xpZW50IGFwcFJ0Y0NsaWVudDsKLSAgcHJpdmF0ZSBTaWduYWxpbmdQYXJhbWV0ZXJzIHNp
Z25hbGluZ1BhcmFtZXRlcnM7Ci0gIHByaXZhdGUgQXBwUlRDQXVkaW9NYW5hZ2VyIGF1ZGlvTWFu
YWdlciA9IG51bGw7Ci0gIHByaXZhdGUgRWdsQmFzZSByb290RWdsQmFzZTsKLSAgcHJpdmF0ZSBT
dXJmYWNlVmlld1JlbmRlcmVyIGxvY2FsUmVuZGVyOwotICBwcml2YXRlIFN1cmZhY2VWaWV3UmVu
ZGVyZXIgcmVtb3RlUmVuZGVyU2NyZWVuOwotICBwcml2YXRlIFZpZGVvRmlsZVJlbmRlcmVyIHZp
ZGVvRmlsZVJlbmRlcmVyOwotICBwcml2YXRlIGZpbmFsIExpc3Q8VmlkZW9SZW5kZXJlci5DYWxs
YmFja3M+IHJlbW90ZVJlbmRlcmVycyA9Ci0gICAgICBuZXcgQXJyYXlMaXN0PFZpZGVvUmVuZGVy
ZXIuQ2FsbGJhY2tzPigpOwotICBwcml2YXRlIFBlcmNlbnRGcmFtZUxheW91dCBsb2NhbFJlbmRl
ckxheW91dDsKLSAgcHJpdmF0ZSBQZXJjZW50RnJhbWVMYXlvdXQgcmVtb3RlUmVuZGVyTGF5b3V0
OwotICBwcml2YXRlIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlOwotICBwcml2YXRlIFRvYXN0IGxv
Z1RvYXN0OwotICBwcml2YXRlIGJvb2xlYW4gY29tbWFuZExpbmVSdW47Ci0gIHByaXZhdGUgaW50
IHJ1blRpbWVNczsKLSAgcHJpdmF0ZSBib29sZWFuIGFjdGl2aXR5UnVubmluZzsKLSAgcHJpdmF0
ZSBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgcm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICBw
cml2YXRlIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7
Ci0gIHByaXZhdGUgYm9vbGVhbiBpY2VDb25uZWN0ZWQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0Vy
cm9yOwotICBwcml2YXRlIGJvb2xlYW4gY2FsbENvbnRyb2xGcmFnbWVudFZpc2libGUgPSB0cnVl
OwotICBwcml2YXRlIGxvbmcgY2FsbFN0YXJ0ZWRUaW1lTXMgPSAwOwotICBwcml2YXRlIGJvb2xl
YW4gbWljRW5hYmxlZCA9IHRydWU7Ci0gIHByaXZhdGUgYm9vbGVhbiBzY3JlZW5jYXB0dXJlRW5h
YmxlZCA9IGZhbHNlOwotICBwcml2YXRlIHN0YXRpYyBJbnRlbnQgbWVkaWFQcm9qZWN0aW9uUGVy
bWlzc2lvblJlc3VsdERhdGE7Ci0gIHByaXZhdGUgc3RhdGljIGludCBtZWRpYVByb2plY3Rpb25Q
ZXJtaXNzaW9uUmVzdWx0Q29kZTsKLQotICAvLyBDb250cm9scwotICBwcml2YXRlIENhbGxGcmFn
bWVudCBjYWxsRnJhZ21lbnQ7Ci0gIHByaXZhdGUgSHVkRnJhZ21lbnQgaHVkRnJhZ21lbnQ7Ci0g
IHByaXZhdGUgQ3B1TW9uaXRvciBjcHVNb25pdG9yOwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgc3VwZXIub25D
cmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLSAgICBUaHJlYWQuc2V0RGVmYXVsdFVuY2F1Z2h0
RXhjZXB0aW9uSGFuZGxlcihuZXcgVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxlcih0aGlzKSk7Ci0K
LSAgICAvLyBTZXQgd2luZG93IHN0eWxlcyBmb3IgZnVsbHNjcmVlbi13aW5kb3cgc2l6ZS4gTmVl
ZHMgdG8gYmUgZG9uZSBiZWZvcmUKLSAgICAvLyBhZGRpbmcgY29udGVudC4KLSAgICByZXF1ZXN0
V2luZG93RmVhdHVyZShXaW5kb3cuRkVBVFVSRV9OT19USVRMRSk7Ci0gICAgZ2V0V2luZG93KCku
YWRkRmxhZ3MoTGF5b3V0UGFyYW1zLkZMQUdfRlVMTFNDUkVFTiB8IExheW91dFBhcmFtcy5GTEFH
X0tFRVBfU0NSRUVOX09OCi0gICAgICAgIHwgTGF5b3V0UGFyYW1zLkZMQUdfRElTTUlTU19LRVlH
VUFSRCB8IExheW91dFBhcmFtcy5GTEFHX1NIT1dfV0hFTl9MT0NLRUQKLSAgICAgICAgfCBMYXlv
dXRQYXJhbXMuRkxBR19UVVJOX1NDUkVFTl9PTik7Ci0gICAgZ2V0V2luZG93KCkuZ2V0RGVjb3JW
aWV3KCkuc2V0U3lzdGVtVWlWaXNpYmlsaXR5KFZpZXcuU1lTVEVNX1VJX0ZMQUdfSElERV9OQVZJ
R0FUSU9OCi0gICAgICAgIHwgVmlldy5TWVNURU1fVUlfRkxBR19GVUxMU0NSRUVOIHwgVmlldy5T
WVNURU1fVUlfRkxBR19JTU1FUlNJVkVfU1RJQ0tZKTsKLSAgICBzZXRDb250ZW50VmlldyhSLmxh
eW91dC5hY3Rpdml0eV9jYWxsKTsKLQotICAgIGljZUNvbm5lY3RlZCA9IGZhbHNlOwotICAgIHNp
Z25hbGluZ1BhcmFtZXRlcnMgPSBudWxsOwotICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUu
U0NBTEVfQVNQRUNUX0ZJTEw7Ci0KLSAgICAvLyBDcmVhdGUgVUkgY29udHJvbHMuCi0gICAgbG9j
YWxSZW5kZXIgPSAoU3VyZmFjZVZpZXdSZW5kZXJlcikgZmluZFZpZXdCeUlkKFIuaWQubG9jYWxf
dmlkZW9fdmlldyk7Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuID0gKFN1cmZhY2VWaWV3UmVuZGVy
ZXIpIGZpbmRWaWV3QnlJZChSLmlkLnJlbW90ZV92aWRlb192aWV3KTsKLSAgICBsb2NhbFJlbmRl
ckxheW91dCA9IChQZXJjZW50RnJhbWVMYXlvdXQpIGZpbmRWaWV3QnlJZChSLmlkLmxvY2FsX3Zp
ZGVvX2xheW91dCk7Ci0gICAgcmVtb3RlUmVuZGVyTGF5b3V0ID0gKFBlcmNlbnRGcmFtZUxheW91
dCkgZmluZFZpZXdCeUlkKFIuaWQucmVtb3RlX3ZpZGVvX2xheW91dCk7Ci0gICAgY2FsbEZyYWdt
ZW50ID0gbmV3IENhbGxGcmFnbWVudCgpOwotICAgIGh1ZEZyYWdtZW50ID0gbmV3IEh1ZEZyYWdt
ZW50KCk7Ci0KLSAgICAvLyBTaG93L2hpZGUgY2FsbCBjb250cm9sIGZyYWdtZW50IG9uIHZpZXcg
Y2xpY2suCi0gICAgVmlldy5PbkNsaWNrTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVmlldy5PbkNs
aWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xp
Y2soVmlldyB2aWV3KSB7Ci0gICAgICAgIHRvZ2dsZUNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmls
aXR5KCk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIGxvY2FsUmVuZGVyLnNldE9uQ2xpY2tMaXN0
ZW5lcihsaXN0ZW5lcik7Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuLnNldE9uQ2xpY2tMaXN0ZW5l
cihsaXN0ZW5lcik7Ci0gICAgcmVtb3RlUmVuZGVyZXJzLmFkZChyZW1vdGVSZW5kZXJTY3JlZW4p
OwotCi0gICAgZmluYWwgSW50ZW50IGludGVudCA9IGdldEludGVudCgpOwotCi0gICAgLy8gQ3Jl
YXRlIHZpZGVvIHJlbmRlcmVycy4KLSAgICByb290RWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKCk7
Ci0gICAgbG9jYWxSZW5kZXIuaW5pdChyb290RWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBu
dWxsKTsKLSAgICBTdHJpbmcgc2F2ZVJlbW90ZVZpZGVvVG9GaWxlID0gaW50ZW50LmdldFN0cmlu
Z0V4dHJhKEVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUpOwotCi0gICAgLy8gV2hlbiBz
YXZlUmVtb3RlVmlkZW9Ub0ZpbGUgaXMgc2V0IHdlIHNhdmUgdGhlIHZpZGVvIGZyb20gdGhlIHJl
bW90ZSB0byBhIGZpbGUuCi0gICAgaWYgKHNhdmVSZW1vdGVWaWRlb1RvRmlsZSAhPSBudWxsKSB7
Ci0gICAgICBpbnQgdmlkZW9PdXRXaWR0aCA9IGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9TQVZF
X1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRILCAwKTsKLSAgICAgIGludCB2aWRlb091dEhlaWdo
dCA9IGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hF
SUdIVCwgMCk7Ci0gICAgICB0cnkgewotICAgICAgICB2aWRlb0ZpbGVSZW5kZXJlciA9IG5ldyBW
aWRlb0ZpbGVSZW5kZXJlcigKLSAgICAgICAgICAgIHNhdmVSZW1vdGVWaWRlb1RvRmlsZSwgdmlk
ZW9PdXRXaWR0aCwgdmlkZW9PdXRIZWlnaHQsIHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0
KCkpOwotICAgICAgICByZW1vdGVSZW5kZXJlcnMuYWRkKHZpZGVvRmlsZVJlbmRlcmVyKTsKLSAg
ICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oCi0gICAgICAgICAgICAiRmFpbGVkIHRvIG9wZW4gdmlkZW8gZmlsZSBmb3Igb3V0
cHV0OiAiICsgc2F2ZVJlbW90ZVZpZGVvVG9GaWxlLCBlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAg
cmVtb3RlUmVuZGVyU2NyZWVuLmluaXQocm9vdEVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwg
bnVsbCk7Ci0KLSAgICBsb2NhbFJlbmRlci5zZXRaT3JkZXJNZWRpYU92ZXJsYXkodHJ1ZSk7Ci0g
ICAgdXBkYXRlVmlkZW9WaWV3KCk7Ci0KLSAgICAvLyBDaGVjayBmb3IgbWFuZGF0b3J5IHBlcm1p
c3Npb25zLgotICAgIGZvciAoU3RyaW5nIHBlcm1pc3Npb24gOiBNQU5EQVRPUllfUEVSTUlTU0lP
TlMpIHsKLSAgICAgIGlmIChjaGVja0NhbGxpbmdPclNlbGZQZXJtaXNzaW9uKHBlcm1pc3Npb24p
ICE9IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJT05fR1JBTlRFRCkgewotICAgICAgICBsb2dBbmRU
b2FzdCgiUGVybWlzc2lvbiAiICsgcGVybWlzc2lvbiArICIgaXMgbm90IGdyYW50ZWQiKTsKLSAg
ICAgICAgc2V0UmVzdWx0KFJFU1VMVF9DQU5DRUxFRCk7Ci0gICAgICAgIGZpbmlzaCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfQotCi0gICAgVXJpIHJvb21VcmkgPSBpbnRlbnQu
Z2V0RGF0YSgpOwotICAgIGlmIChyb29tVXJpID09IG51bGwpIHsKLSAgICAgIGxvZ0FuZFRvYXN0
KGdldFN0cmluZyhSLnN0cmluZy5taXNzaW5nX3VybCkpOwotICAgICAgTG9nLmUoVEFHLCAiRGlk
bid0IGdldCBhbnkgVVJMIGluIGludGVudCEiKTsKLSAgICAgIHNldFJlc3VsdChSRVNVTFRfQ0FO
Q0VMRUQpOwotICAgICAgZmluaXNoKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
R2V0IEludGVudCBwYXJhbWV0ZXJzLgotICAgIFN0cmluZyByb29tSWQgPSBpbnRlbnQuZ2V0U3Ry
aW5nRXh0cmEoRVhUUkFfUk9PTUlEKTsKLSAgICBMb2cuZChUQUcsICJSb29tIElEOiAiICsgcm9v
bUlkKTsKLSAgICBpZiAocm9vbUlkID09IG51bGwgfHwgcm9vbUlkLmxlbmd0aCgpID09IDApIHsK
LSAgICAgIGxvZ0FuZFRvYXN0KGdldFN0cmluZyhSLnN0cmluZy5taXNzaW5nX3VybCkpOwotICAg
ICAgTG9nLmUoVEFHLCAiSW5jb3JyZWN0IHJvb20gSUQgaW4gaW50ZW50ISIpOwotICAgICAgc2V0
UmVzdWx0KFJFU1VMVF9DQU5DRUxFRCk7Ci0gICAgICBmaW5pc2goKTsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBib29sZWFuIGxvb3BiYWNrID0gaW50ZW50LmdldEJvb2xlYW5FeHRyYShF
WFRSQV9MT09QQkFDSywgZmFsc2UpOwotICAgIGJvb2xlYW4gdHJhY2luZyA9IGludGVudC5nZXRC
b29sZWFuRXh0cmEoRVhUUkFfVFJBQ0lORywgZmFsc2UpOwotCi0gICAgaW50IHZpZGVvV2lkdGgg
PSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfVklERU9fV0lEVEgsIDApOwotICAgIGludCB2aWRl
b0hlaWdodCA9IGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9WSURFT19IRUlHSFQsIDApOwotCi0g
ICAgc2NyZWVuY2FwdHVyZUVuYWJsZWQgPSBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX1ND
UkVFTkNBUFRVUkUsIGZhbHNlKTsKLSAgICAvLyBJZiBjYXB0dXJpbmcgZm9ybWF0IGlzIG5vdCBz
cGVjaWZpZWQgZm9yIHNjcmVlbmNhcHR1cmUsIHVzZSBzY3JlZW4gcmVzb2x1dGlvbi4KLSAgICBp
ZiAoc2NyZWVuY2FwdHVyZUVuYWJsZWQgJiYgdmlkZW9XaWR0aCA9PSAwICYmIHZpZGVvSGVpZ2h0
ID09IDApIHsKLSAgICAgIERpc3BsYXlNZXRyaWNzIGRpc3BsYXlNZXRyaWNzID0gbmV3IERpc3Bs
YXlNZXRyaWNzKCk7Ci0gICAgICBXaW5kb3dNYW5hZ2VyIHdpbmRvd01hbmFnZXIgPQotICAgICAg
ICAgIChXaW5kb3dNYW5hZ2VyKSBnZXRBcHBsaWNhdGlvbigpLmdldFN5c3RlbVNlcnZpY2UoQ29u
dGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAgICB3aW5kb3dNYW5hZ2VyLmdldERlZmF1bHREaXNw
bGF5KCkuZ2V0UmVhbE1ldHJpY3MoZGlzcGxheU1ldHJpY3MpOwotICAgICAgdmlkZW9XaWR0aCA9
IGRpc3BsYXlNZXRyaWNzLndpZHRoUGl4ZWxzOwotICAgICAgdmlkZW9IZWlnaHQgPSBkaXNwbGF5
TWV0cmljcy5oZWlnaHRQaXhlbHM7Ci0gICAgfQotCi0gICAgcGVlckNvbm5lY3Rpb25QYXJhbWV0
ZXJzID0KLSAgICAgICAgbmV3IFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyhpbnRlbnQuZ2V0Qm9v
bGVhbkV4dHJhKEVYVFJBX1ZJREVPX0NBTEwsIHRydWUpLCBsb29wYmFjaywKLSAgICAgICAgICAg
IHRyYWNpbmcsIHZpZGVvV2lkdGgsIHZpZGVvSGVpZ2h0LCBpbnRlbnQuZ2V0SW50RXh0cmEoRVhU
UkFfVklERU9fRlBTLCAwKSwKLSAgICAgICAgICAgIGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9W
SURFT19CSVRSQVRFLCAwKSwgaW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX1ZJREVPQ09ERUMp
LAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9IV0NPREVDX0VOQUJM
RUQsIHRydWUpLAotICAgICAgICAgICAgaW50ZW50LmdldEludEV4dHJhKEVYVFJBX0FVRElPX0JJ
VFJBVEUsIDApLCBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfQVVESU9DT0RFQyksCi0gICAg
ICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX05PQVVESU9QUk9DRVNTSU5HX0VO
QUJMRUQsIGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFf
QUVDRFVNUF9FTkFCTEVELCBmYWxzZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4
dHJhKEVYVFJBX09QRU5TTEVTX0VOQUJMRUQsIGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5n
ZXRCb29sZWFuRXh0cmEoRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BRUMsIGZhbHNlKSwKLSAgICAg
ICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BR0Ms
IGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfRElTQUJM
RV9CVUlMVF9JTl9OUywgZmFsc2UpLAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRy
YShFWFRSQV9FTkFCTEVfTEVWRUxfQ09OVFJPTCwgZmFsc2UpKTsKLSAgICBjb21tYW5kTGluZVJ1
biA9IGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfQ01ETElORSwgZmFsc2UpOwotICAgIHJ1
blRpbWVNcyA9IGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9SVU5USU1FLCAwKTsKLQotICAgIExv
Zy5kKFRBRywgIlZJREVPX0ZJTEU6ICciICsgaW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX1ZJ
REVPX0ZJTEVfQVNfQ0FNRVJBKSArICInIik7Ci0KLSAgICAvLyBDcmVhdGUgY29ubmVjdGlvbiBj
bGllbnQuIFVzZSBEaXJlY3RSVENDbGllbnQgaWYgcm9vbSBuYW1lIGlzIGFuIElQIG90aGVyd2lz
ZSB1c2UgdGhlCi0gICAgLy8gc3RhbmRhcmQgV2ViU29ja2V0UlRDQ2xpZW50LgotICAgIGlmIChs
b29wYmFjayB8fCAhRGlyZWN0UlRDQ2xpZW50LklQX1BBVFRFUk4ubWF0Y2hlcihyb29tSWQpLm1h
dGNoZXMoKSkgewotICAgICAgYXBwUnRjQ2xpZW50ID0gbmV3IFdlYlNvY2tldFJUQ0NsaWVudCh0
aGlzKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmkoVEFHLCAiVXNpbmcgRGlyZWN0UlRDQ2xp
ZW50IGJlY2F1c2Ugcm9vbSBuYW1lIGxvb2tzIGxpa2UgYW4gSVAuIik7Ci0gICAgICBhcHBSdGND
bGllbnQgPSBuZXcgRGlyZWN0UlRDQ2xpZW50KHRoaXMpOwotICAgIH0KLSAgICAvLyBDcmVhdGUg
Y29ubmVjdGlvbiBwYXJhbWV0ZXJzLgotICAgIHJvb21Db25uZWN0aW9uUGFyYW1ldGVycyA9IG5l
dyBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMocm9vbVVyaS50b1N0cmluZygpLCByb29tSWQsIGxv
b3BiYWNrKTsKLQotICAgIC8vIENyZWF0ZSBDUFUgbW9uaXRvcgotICAgIGNwdU1vbml0b3IgPSBu
ZXcgQ3B1TW9uaXRvcih0aGlzKTsKLSAgICBodWRGcmFnbWVudC5zZXRDcHVNb25pdG9yKGNwdU1v
bml0b3IpOwotCi0gICAgLy8gU2VuZCBpbnRlbnQgYXJndW1lbnRzIHRvIGZyYWdtZW50cy4KLSAg
ICBjYWxsRnJhZ21lbnQuc2V0QXJndW1lbnRzKGludGVudC5nZXRFeHRyYXMoKSk7Ci0gICAgaHVk
RnJhZ21lbnQuc2V0QXJndW1lbnRzKGludGVudC5nZXRFeHRyYXMoKSk7Ci0gICAgLy8gQWN0aXZh
dGUgY2FsbCBhbmQgSFVEIGZyYWdtZW50cyBhbmQgc3RhcnQgdGhlIGNhbGwuCi0gICAgRnJhZ21l
bnRUcmFuc2FjdGlvbiBmdCA9IGdldEZyYWdtZW50TWFuYWdlcigpLmJlZ2luVHJhbnNhY3Rpb24o
KTsKLSAgICBmdC5hZGQoUi5pZC5jYWxsX2ZyYWdtZW50X2NvbnRhaW5lciwgY2FsbEZyYWdtZW50
KTsKLSAgICBmdC5hZGQoUi5pZC5odWRfZnJhZ21lbnRfY29udGFpbmVyLCBodWRGcmFnbWVudCk7
Ci0gICAgZnQuY29tbWl0KCk7Ci0KLSAgICAvLyBGb3IgY29tbWFuZCBsaW5lIGV4ZWN1dGlvbiBy
dW4gY29ubmVjdGlvbiBmb3IgPHJ1blRpbWVNcz4gYW5kIGV4aXQuCi0gICAgaWYgKGNvbW1hbmRM
aW5lUnVuICYmIHJ1blRpbWVNcyA+IDApIHsKLSAgICAgIChuZXcgSGFuZGxlcigpKS5wb3N0RGVs
YXllZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgICAgZGlzY29ubmVjdCgpOwotICAgICAgICB9Ci0gICAgICB9
LCBydW5UaW1lTXMpOwotICAgIH0KLQotICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50ID0gUGVlckNv
bm5lY3Rpb25DbGllbnQuZ2V0SW5zdGFuY2UoKTsKLSAgICBpZiAobG9vcGJhY2spIHsKLSAgICAg
IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rp
b25GYWN0b3J5Lk9wdGlvbnMoKTsKLSAgICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAw
OwotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc2V0UGVlckNvbm5lY3Rpb25GYWN0b3J5T3B0
aW9ucyhvcHRpb25zKTsKLSAgICB9Ci0gICAgcGVlckNvbm5lY3Rpb25DbGllbnQuY3JlYXRlUGVl
ckNvbm5lY3Rpb25GYWN0b3J5KAotICAgICAgICBDYWxsQWN0aXZpdHkudGhpcywgcGVlckNvbm5l
Y3Rpb25QYXJhbWV0ZXJzLCBDYWxsQWN0aXZpdHkudGhpcyk7Ci0KLSAgICBpZiAoc2NyZWVuY2Fw
dHVyZUVuYWJsZWQpIHsKLSAgICAgIE1lZGlhUHJvamVjdGlvbk1hbmFnZXIgbWVkaWFQcm9qZWN0
aW9uTWFuYWdlciA9Ci0gICAgICAgICAgKE1lZGlhUHJvamVjdGlvbk1hbmFnZXIpIGdldEFwcGxp
Y2F0aW9uKCkuZ2V0U3lzdGVtU2VydmljZSgKLSAgICAgICAgICAgICAgQ29udGV4dC5NRURJQV9Q
Uk9KRUNUSU9OX1NFUlZJQ0UpOwotICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdCgKLSAgICAg
ICAgICBtZWRpYVByb2plY3Rpb25NYW5hZ2VyLmNyZWF0ZVNjcmVlbkNhcHR1cmVJbnRlbnQoKSwg
Q0FQVFVSRV9QRVJNSVNTSU9OX1JFUVVFU1RfQ09ERSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0
YXJ0Q2FsbCgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkFj
dGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBkYXRh
KSB7Ci0gICAgaWYgKHJlcXVlc3RDb2RlICE9IENBUFRVUkVfUEVSTUlTU0lPTl9SRVFVRVNUX0NP
REUpCi0gICAgICByZXR1cm47Ci0gICAgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdENv
ZGUgPSByZXN1bHRDb2RlOwotICAgIG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRh
ID0gZGF0YTsKLSAgICBzdGFydENhbGwoKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB1c2VD
YW1lcmEyKCkgewotICAgIHJldHVybiBDYW1lcmEyRW51bWVyYXRvci5pc1N1cHBvcnRlZCh0aGlz
KSAmJiBnZXRJbnRlbnQoKS5nZXRCb29sZWFuRXh0cmEoRVhUUkFfQ0FNRVJBMiwgdHJ1ZSk7Ci0g
IH0KLQotICBwcml2YXRlIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSgpIHsKLSAgICByZXR1cm4g
Z2V0SW50ZW50KCkuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0NBUFRVUkVUT1RFWFRVUkVfRU5BQkxF
RCwgZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhbWVyYUNh
cHR1cmVyKENhbWVyYUVudW1lcmF0b3IgZW51bWVyYXRvcikgewotICAgIGZpbmFsIFN0cmluZ1td
IGRldmljZU5hbWVzID0gZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpOwotCi0gICAgLy8gRmly
c3QsIHRyeSB0byBmaW5kIGZyb250IGZhY2luZyBjYW1lcmEKLSAgICBMb2dnaW5nLmQoVEFHLCAi
TG9va2luZyBmb3IgZnJvbnQgZmFjaW5nIGNhbWVyYXMuIik7Ci0gICAgZm9yIChTdHJpbmcgZGV2
aWNlTmFtZSA6IGRldmljZU5hbWVzKSB7Ci0gICAgICBpZiAoZW51bWVyYXRvci5pc0Zyb250RmFj
aW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGluZyBmcm9u
dCBmYWNpbmcgY2FtZXJhIGNhcHR1cmVyLiIpOwotICAgICAgICBWaWRlb0NhcHR1cmVyIHZpZGVv
Q2FwdHVyZXIgPSBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGRldmljZU5hbWUsIG51bGwpOwot
Ci0gICAgICAgIGlmICh2aWRlb0NhcHR1cmVyICE9IG51bGwpIHsKLSAgICAgICAgICByZXR1cm4g
dmlkZW9DYXB0dXJlcjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIEZyb250
IGZhY2luZyBjYW1lcmEgbm90IGZvdW5kLCB0cnkgc29tZXRoaW5nIGVsc2UKLSAgICBMb2dnaW5n
LmQoVEFHLCAiTG9va2luZyBmb3Igb3RoZXIgY2FtZXJhcy4iKTsKLSAgICBmb3IgKFN0cmluZyBk
ZXZpY2VOYW1lIDogZGV2aWNlTmFtZXMpIHsKLSAgICAgIGlmICghZW51bWVyYXRvci5pc0Zyb250
RmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGluZyBv
dGhlciBjYW1lcmEgY2FwdHVyZXIuIik7Ci0gICAgICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0
dXJlciA9IGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZGV2aWNlTmFtZSwgbnVsbCk7Ci0KLSAg
ICAgICAgaWYgKHZpZGVvQ2FwdHVyZXIgIT0gbnVsbCkgewotICAgICAgICAgIHJldHVybiB2aWRl
b0NhcHR1cmVyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7
Ci0gIH0KLQotICAvLyBBY3Rpdml0eSBpbnRlcmZhY2VzCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvblBhdXNlKCkgewotICAgIHN1cGVyLm9uUGF1c2UoKTsKLSAgICBhY3Rpdml0eVJ1bm5p
bmcgPSBmYWxzZTsKLSAgICAvLyBEb24ndCBzdG9wIHRoZSB2aWRlbyB3aGVuIHVzaW5nIHNjcmVl
bmNhcHR1cmUgdG8gYWxsb3cgdXNlciB0byBzaG93IG90aGVyIGFwcHMgdG8gdGhlIHJlbW90ZQot
ICAgIC8vIGVuZC4KLSAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCAmJiAhc2Ny
ZWVuY2FwdHVyZUVuYWJsZWQpIHsKLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnN0b3BWaWRl
b1NvdXJjZSgpOwotICAgIH0KLSAgICBjcHVNb25pdG9yLnBhdXNlKCk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgb25SZXN1bWUoKSB7Ci0gICAgc3VwZXIub25SZXN1bWUoKTsK
LSAgICBhY3Rpdml0eVJ1bm5pbmcgPSB0cnVlOwotICAgIC8vIFZpZGVvIGlzIG5vdCBwYXVzZWQg
Zm9yIHNjcmVlbmNhcHR1cmUuIFNlZSBvblBhdXNlLgotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNs
aWVudCAhPSBudWxsICYmICFzY3JlZW5jYXB0dXJlRW5hYmxlZCkgewotICAgICAgcGVlckNvbm5l
Y3Rpb25DbGllbnQuc3RhcnRWaWRlb1NvdXJjZSgpOwotICAgIH0KLSAgICBjcHVNb25pdG9yLnJl
c3VtZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uRGVzdHJveSgp
IHsKLSAgICBkaXNjb25uZWN0KCk7Ci0gICAgaWYgKGxvZ1RvYXN0ICE9IG51bGwpIHsKLSAgICAg
IGxvZ1RvYXN0LmNhbmNlbCgpOwotICAgIH0KLSAgICBhY3Rpdml0eVJ1bm5pbmcgPSBmYWxzZTsK
LSAgICByb290RWdsQmFzZS5yZWxlYXNlKCk7Ci0gICAgc3VwZXIub25EZXN0cm95KCk7Ci0gIH0K
LQotICAvLyBDYWxsRnJhZ21lbnQuT25DYWxsRXZlbnRzIGludGVyZmFjZSBpbXBsZW1lbnRhdGlv
bi4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2FsbEhhbmdVcCgpIHsKLSAgICBkaXNj
b25uZWN0KCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DYW1lcmFTd2l0
Y2goKSB7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgIHBl
ZXJDb25uZWN0aW9uQ2xpZW50LnN3aXRjaENhbWVyYSgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBvblZpZGVvU2NhbGluZ1N3aXRjaChTY2FsaW5nVHlwZSBzY2Fs
aW5nVHlwZSkgewotICAgIHRoaXMuc2NhbGluZ1R5cGUgPSBzY2FsaW5nVHlwZTsKLSAgICB1cGRh
dGVWaWRlb1ZpZXcoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNhcHR1
cmVGb3JtYXRDaGFuZ2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0g
ICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgIHBlZXJDb25uZWN0
aW9uQ2xpZW50LmNoYW5nZUNhcHR1cmVGb3JtYXQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsK
LSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gb25Ub2dnbGVNaWMo
KSB7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgIG1pY0Vu
YWJsZWQgPSAhbWljRW5hYmxlZDsKLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnNldEF1ZGlv
RW5hYmxlZChtaWNFbmFibGVkKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1pY0VuYWJsZWQ7Ci0gIH0K
LQotICAvLyBIZWxwZXIgZnVuY3Rpb25zLgotICBwcml2YXRlIHZvaWQgdG9nZ2xlQ2FsbENvbnRy
b2xGcmFnbWVudFZpc2liaWxpdHkoKSB7Ci0gICAgaWYgKCFpY2VDb25uZWN0ZWQgfHwgIWNhbGxG
cmFnbWVudC5pc0FkZGVkKCkpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2hvdy9o
aWRlIGNhbGwgY29udHJvbCBmcmFnbWVudAotICAgIGNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmxl
ID0gIWNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmxlOwotICAgIEZyYWdtZW50VHJhbnNhY3Rpb24g
ZnQgPSBnZXRGcmFnbWVudE1hbmFnZXIoKS5iZWdpblRyYW5zYWN0aW9uKCk7Ci0gICAgaWYgKGNh
bGxDb250cm9sRnJhZ21lbnRWaXNpYmxlKSB7Ci0gICAgICBmdC5zaG93KGNhbGxGcmFnbWVudCk7
Ci0gICAgICBmdC5zaG93KGh1ZEZyYWdtZW50KTsKLSAgICB9IGVsc2UgewotICAgICAgZnQuaGlk
ZShjYWxsRnJhZ21lbnQpOwotICAgICAgZnQuaGlkZShodWRGcmFnbWVudCk7Ci0gICAgfQotICAg
IGZ0LnNldFRyYW5zaXRpb24oRnJhZ21lbnRUcmFuc2FjdGlvbi5UUkFOU0lUX0ZSQUdNRU5UX0ZB
REUpOwotICAgIGZ0LmNvbW1pdCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVZpZGVv
VmlldygpIHsKLSAgICByZW1vdGVSZW5kZXJMYXlvdXQuc2V0UG9zaXRpb24oUkVNT1RFX1gsIFJF
TU9URV9ZLCBSRU1PVEVfV0lEVEgsIFJFTU9URV9IRUlHSFQpOwotICAgIHJlbW90ZVJlbmRlclNj
cmVlbi5zZXRTY2FsaW5nVHlwZShzY2FsaW5nVHlwZSk7Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVu
LnNldE1pcnJvcihmYWxzZSk7Ci0KLSAgICBpZiAoaWNlQ29ubmVjdGVkKSB7Ci0gICAgICBsb2Nh
bFJlbmRlckxheW91dC5zZXRQb3NpdGlvbigKLSAgICAgICAgICBMT0NBTF9YX0NPTk5FQ1RFRCwg
TE9DQUxfWV9DT05ORUNURUQsIExPQ0FMX1dJRFRIX0NPTk5FQ1RFRCwgTE9DQUxfSEVJR0hUX0NP
Tk5FQ1RFRCk7Ci0gICAgICBsb2NhbFJlbmRlci5zZXRTY2FsaW5nVHlwZShTY2FsaW5nVHlwZS5T
Q0FMRV9BU1BFQ1RfRklUKTsKLSAgICB9IGVsc2UgewotICAgICAgbG9jYWxSZW5kZXJMYXlvdXQu
c2V0UG9zaXRpb24oCi0gICAgICAgICAgTE9DQUxfWF9DT05ORUNUSU5HLCBMT0NBTF9ZX0NPTk5F
Q1RJTkcsIExPQ0FMX1dJRFRIX0NPTk5FQ1RJTkcsIExPQ0FMX0hFSUdIVF9DT05ORUNUSU5HKTsK
LSAgICAgIGxvY2FsUmVuZGVyLnNldFNjYWxpbmdUeXBlKHNjYWxpbmdUeXBlKTsKLSAgICB9Ci0g
ICAgbG9jYWxSZW5kZXIuc2V0TWlycm9yKHRydWUpOwotCi0gICAgbG9jYWxSZW5kZXIucmVxdWVz
dExheW91dCgpOwotICAgIHJlbW90ZVJlbmRlclNjcmVlbi5yZXF1ZXN0TGF5b3V0KCk7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgc3RhcnRDYWxsKCkgewotICAgIGlmIChhcHBSdGNDbGllbnQgPT0g
bnVsbCkgewotICAgICAgTG9nLmUoVEFHLCAiQXBwUlRDIGNsaWVudCBpcyBub3QgYWxsb2NhdGVk
IGZvciBhIGNhbGwuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGNhbGxTdGFydGVkVGlt
ZU1zID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0KLSAgICAvLyBTdGFydCByb29tIGNv
bm5lY3Rpb24uCi0gICAgbG9nQW5kVG9hc3QoZ2V0U3RyaW5nKFIuc3RyaW5nLmNvbm5lY3Rpbmdf
dG8sIHJvb21Db25uZWN0aW9uUGFyYW1ldGVycy5yb29tVXJsKSk7Ci0gICAgYXBwUnRjQ2xpZW50
LmNvbm5lY3RUb1Jvb20ocm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzKTsKLQotICAgIC8vIENyZWF0
ZSBhbmQgYXVkaW8gbWFuYWdlciB0aGF0IHdpbGwgdGFrZSBjYXJlIG9mIGF1ZGlvIHJvdXRpbmcs
Ci0gICAgLy8gYXVkaW8gbW9kZXMsIGF1ZGlvIGRldmljZSBlbnVtZXJhdGlvbiBldGMuCi0gICAg
YXVkaW9NYW5hZ2VyID0gQXBwUlRDQXVkaW9NYW5hZ2VyLmNyZWF0ZSh0aGlzLCBuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICAvLyBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgdGhl
IGF1ZGlvIHN0YXRlIChudW1iZXIgYW5kCi0gICAgICAvLyB0eXBlIG9mIGRldmljZXMpIGhhcyBi
ZWVuIGNoYW5nZWQuCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgb25BdWRpb01hbmFnZXJDaGFuZ2VkU3RhdGUoKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgICAvLyBTdG9yZSBleGlzdGluZyBhdWRpbyBzZXR0aW5ncyBhbmQgY2hhbmdlIGF1ZGlvIG1v
ZGUgdG8KLSAgICAvLyBNT0RFX0lOX0NPTU1VTklDQVRJT04gZm9yIGJlc3QgcG9zc2libGUgVm9J
UCBwZXJmb3JtYW5jZS4KLSAgICBMb2cuZChUQUcsICJJbml0aWFsaXppbmcgdGhlIGF1ZGlvIG1h
bmFnZXIuLi4iKTsKLSAgICBhdWRpb01hbmFnZXIuaW5pdCgpOwotICB9Ci0KLSAgLy8gU2hvdWxk
IGJlIGNhbGxlZCBmcm9tIFVJIHRocmVhZAotICBwcml2YXRlIHZvaWQgY2FsbENvbm5lY3RlZCgp
IHsKLSAgICBmaW5hbCBsb25nIGRlbHRhID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBj
YWxsU3RhcnRlZFRpbWVNczsKLSAgICBMb2cuaShUQUcsICJDYWxsIGNvbm5lY3RlZDogZGVsYXk9
IiArIGRlbHRhICsgIm1zIik7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ID09IG51bGwg
fHwgaXNFcnJvcikgewotICAgICAgTG9nLncoVEFHLCAiQ2FsbCBpcyBjb25uZWN0ZWQgaW4gY2xv
c2VkIG9yIGVycm9yIHN0YXRlIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFVwZGF0
ZSB2aWRlbyB2aWV3LgotICAgIHVwZGF0ZVZpZGVvVmlldygpOwotICAgIC8vIEVuYWJsZSBzdGF0
aXN0aWNzIGNhbGxiYWNrLgotICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmVuYWJsZVN0YXRzRXZl
bnRzKHRydWUsIFNUQVRfQ0FMTEJBQ0tfUEVSSU9EKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBv
bkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgpIHsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBkaXNh
YmxlIHZpZGVvIGlmIEFwcFJUQ0F1ZGlvTWFuYWdlci5BdWRpb0RldmljZS5FQVJQSUVDRQotICAg
IC8vIGlzIGFjdGl2ZS4KLSAgfQotCi0gIC8vIERpc2Nvbm5lY3QgZnJvbSByZW1vdGUgcmVzb3Vy
Y2VzLCBkaXNwb3NlIG9mIGxvY2FsIHJlc291cmNlcywgYW5kIGV4aXQuCi0gIHByaXZhdGUgdm9p
ZCBkaXNjb25uZWN0KCkgewotICAgIGFjdGl2aXR5UnVubmluZyA9IGZhbHNlOwotICAgIGlmIChh
cHBSdGNDbGllbnQgIT0gbnVsbCkgewotICAgICAgYXBwUnRjQ2xpZW50LmRpc2Nvbm5lY3RGcm9t
Um9vbSgpOwotICAgICAgYXBwUnRjQ2xpZW50ID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHBlZXJD
b25uZWN0aW9uQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNs
b3NlKCk7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudCA9IG51bGw7Ci0gICAgfQotICAgIGlm
IChsb2NhbFJlbmRlciAhPSBudWxsKSB7Ci0gICAgICBsb2NhbFJlbmRlci5yZWxlYXNlKCk7Ci0g
ICAgICBsb2NhbFJlbmRlciA9IG51bGw7Ci0gICAgfQotICAgIGlmICh2aWRlb0ZpbGVSZW5kZXJl
ciAhPSBudWxsKSB7Ci0gICAgICB2aWRlb0ZpbGVSZW5kZXJlci5yZWxlYXNlKCk7Ci0gICAgICB2
aWRlb0ZpbGVSZW5kZXJlciA9IG51bGw7Ci0gICAgfQotICAgIGlmIChyZW1vdGVSZW5kZXJTY3Jl
ZW4gIT0gbnVsbCkgewotICAgICAgcmVtb3RlUmVuZGVyU2NyZWVuLnJlbGVhc2UoKTsKLSAgICAg
IHJlbW90ZVJlbmRlclNjcmVlbiA9IG51bGw7Ci0gICAgfQotICAgIGlmIChhdWRpb01hbmFnZXIg
IT0gbnVsbCkgewotICAgICAgYXVkaW9NYW5hZ2VyLmNsb3NlKCk7Ci0gICAgICBhdWRpb01hbmFn
ZXIgPSBudWxsOwotICAgIH0KLSAgICBpZiAoaWNlQ29ubmVjdGVkICYmICFpc0Vycm9yKSB7Ci0g
ICAgICBzZXRSZXN1bHQoUkVTVUxUX09LKTsKLSAgICB9IGVsc2UgewotICAgICAgc2V0UmVzdWx0
KFJFU1VMVF9DQU5DRUxFRCk7Ci0gICAgfQotICAgIGZpbmlzaCgpOwotICB9Ci0KLSAgcHJpdmF0
ZSB2b2lkIGRpc2Nvbm5lY3RXaXRoRXJyb3JNZXNzYWdlKGZpbmFsIFN0cmluZyBlcnJvck1lc3Nh
Z2UpIHsKLSAgICBpZiAoY29tbWFuZExpbmVSdW4gfHwgIWFjdGl2aXR5UnVubmluZykgewotICAg
ICAgTG9nLmUoVEFHLCAiQ3JpdGljYWwgZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgICAg
ZGlzY29ubmVjdCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBuZXcgQWxlcnREaWFsb2cuQnVpbGRl
cih0aGlzKQotICAgICAgICAgIC5zZXRUaXRsZShnZXRUZXh0KFIuc3RyaW5nLmNoYW5uZWxfZXJy
b3JfdGl0bGUpKQotICAgICAgICAgIC5zZXRNZXNzYWdlKGVycm9yTWVzc2FnZSkKLSAgICAgICAg
ICAuc2V0Q2FuY2VsYWJsZShmYWxzZSkKLSAgICAgICAgICAuc2V0TmV1dHJhbEJ1dHRvbihSLnN0
cmluZy5vaywKLSAgICAgICAgICAgICAgbmV3IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVu
ZXIoKSB7Ci0gICAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGlj
IHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgaWQpIHsKLSAgICAgICAg
ICAgICAgICAgIGRpYWxvZy5jYW5jZWwoKTsKLSAgICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3Qo
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pCi0gICAgICAgICAgLmNyZWF0
ZSgpCi0gICAgICAgICAgLnNob3coKTsKLSAgICB9Ci0gIH0KLQotICAvLyBMb2cgfG1zZ3wgYW5k
IFRvYXN0IGFib3V0IGl0LgotICBwcml2YXRlIHZvaWQgbG9nQW5kVG9hc3QoU3RyaW5nIG1zZykg
ewotICAgIExvZy5kKFRBRywgbXNnKTsKLSAgICBpZiAobG9nVG9hc3QgIT0gbnVsbCkgewotICAg
ICAgbG9nVG9hc3QuY2FuY2VsKCk7Ci0gICAgfQotICAgIGxvZ1RvYXN0ID0gVG9hc3QubWFrZVRl
eHQodGhpcywgbXNnLCBUb2FzdC5MRU5HVEhfU0hPUlQpOwotICAgIGxvZ1RvYXN0LnNob3coKTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRp
b24pIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoIWlzRXJyb3IpIHsKLSAg
ICAgICAgICBpc0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgICBkaXNjb25uZWN0V2l0aEVycm9yTWVz
c2FnZShkZXNjcmlwdGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0g
IHByaXZhdGUgVmlkZW9DYXB0dXJlciBjcmVhdGVWaWRlb0NhcHR1cmVyKCkgewotICAgIFZpZGVv
Q2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9IG51bGw7Ci0gICAgU3RyaW5nIHZpZGVvRmlsZUFzQ2Ft
ZXJhID0gZ2V0SW50ZW50KCkuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfVklERU9fRklMRV9BU19DQU1F
UkEpOwotICAgIGlmICh2aWRlb0ZpbGVBc0NhbWVyYSAhPSBudWxsKSB7Ci0gICAgICB0cnkgewot
ICAgICAgICB2aWRlb0NhcHR1cmVyID0gbmV3IEZpbGVWaWRlb0NhcHR1cmVyKHZpZGVvRmlsZUFz
Q2FtZXJhKTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0
RXJyb3IoIkZhaWxlZCB0byBvcGVuIHZpZGVvIGZpbGUgZm9yIGVtdWxhdGVkIGNhbWVyYSIpOwot
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHNjcmVlbmNhcHR1
cmVFbmFibGVkKSB7Ci0gICAgICBpZiAobWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdENv
ZGUgIT0gQWN0aXZpdHkuUkVTVUxUX09LKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJVc2VyIGRp
ZG4ndCBnaXZlIHBlcm1pc3Npb24gdG8gY2FwdHVyZSB0aGUgc2NyZWVuLiIpOwotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAgIHJldHVybiBuZXcgU2NyZWVuQ2FwdHVyZXJBbmRy
b2lkKAotICAgICAgICAgIG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhLCBuZXcg
TWVkaWFQcm9qZWN0aW9uLkNhbGxiYWNrKCkgewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAg
ICAgICAgICBwdWJsaWMgdm9pZCBvblN0b3AoKSB7Ci0gICAgICAgICAgICAgIHJlcG9ydEVycm9y
KCJVc2VyIHJldm9rZWQgcGVybWlzc2lvbiB0byBjYXB0dXJlIHRoZSBzY3JlZW4uIik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0gICAgfSBlbHNlIGlmICh1c2VDYW1lcmEyKCkpIHsK
LSAgICAgIGlmICghY2FwdHVyZVRvVGV4dHVyZSgpKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKGdl
dFN0cmluZyhSLnN0cmluZy5jYW1lcmEyX3RleHR1cmVfb25seV9lcnJvcikpOwotICAgICAgICBy
ZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIGNh
cHR1cmVyIHVzaW5nIGNhbWVyYTIgQVBJLiIpOwotICAgICAgdmlkZW9DYXB0dXJlciA9IGNyZWF0
ZUNhbWVyYUNhcHR1cmVyKG5ldyBDYW1lcmEyRW51bWVyYXRvcih0aGlzKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGluZyBjYXB0dXJlciB1c2luZyBjYW1lcmEx
IEFQSS4iKTsKLSAgICAgIHZpZGVvQ2FwdHVyZXIgPSBjcmVhdGVDYW1lcmFDYXB0dXJlcihuZXcg
Q2FtZXJhMUVudW1lcmF0b3IoY2FwdHVyZVRvVGV4dHVyZSgpKSk7Ci0gICAgfQotICAgIGlmICh2
aWRlb0NhcHR1cmVyID09IG51bGwpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gb3Bl
biBjYW1lcmEiKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gdmlkZW9D
YXB0dXJlcjsKLSAgfQotCi0gIC8vIC0tLS0tSW1wbGVtZW50YXRpb24gb2YgQXBwUlRDQ2xpZW50
LkFwcFJUQ1NpZ25hbGluZ0V2ZW50cyAtLS0tLS0tLS0tLS0tLS0KLSAgLy8gQWxsIGNhbGxiYWNr
cyBhcmUgaW52b2tlZCBmcm9tIHdlYnNvY2tldCBzaWduYWxpbmcgbG9vcGVyIHRocmVhZCBhbmQK
LSAgLy8gYXJlIHJvdXRlZCB0byBVSSB0aHJlYWQuCi0gIHByaXZhdGUgdm9pZCBvbkNvbm5lY3Rl
ZFRvUm9vbUludGVybmFsKGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zKSB7Ci0gICAg
ZmluYWwgbG9uZyBkZWx0YSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0
ZWRUaW1lTXM7Ci0KLSAgICBzaWduYWxpbmdQYXJhbWV0ZXJzID0gcGFyYW1zOwotICAgIGxvZ0Fu
ZFRvYXN0KCJDcmVhdGluZyBwZWVyIGNvbm5lY3Rpb24sIGRlbGF5PSIgKyBkZWx0YSArICJtcyIp
OwotICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9IG51bGw7Ci0gICAgaWYgKHBlZXJD
b25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICB2aWRlb0NhcHR1
cmVyID0gY3JlYXRlVmlkZW9DYXB0dXJlcigpOwotICAgIH0KLSAgICBwZWVyQ29ubmVjdGlvbkNs
aWVudC5jcmVhdGVQZWVyQ29ubmVjdGlvbihyb290RWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgp
LCBsb2NhbFJlbmRlciwKLSAgICAgICAgcmVtb3RlUmVuZGVyZXJzLCB2aWRlb0NhcHR1cmVyLCBz
aWduYWxpbmdQYXJhbWV0ZXJzKTsKLQotICAgIGlmIChzaWduYWxpbmdQYXJhbWV0ZXJzLmluaXRp
YXRvcikgewotICAgICAgbG9nQW5kVG9hc3QoIkNyZWF0aW5nIE9GRkVSLi4uIik7Ci0gICAgICAv
LyBDcmVhdGUgb2ZmZXIuIE9mZmVyIFNEUCB3aWxsIGJlIHNlbnQgdG8gYW5zd2VyaW5nIGNsaWVu
dCBpbgotICAgICAgLy8gUGVlckNvbm5lY3Rpb25FdmVudHMub25Mb2NhbERlc2NyaXB0aW9uIGV2
ZW50LgotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuY3JlYXRlT2ZmZXIoKTsKLSAgICB9IGVs
c2UgewotICAgICAgaWYgKHBhcmFtcy5vZmZlclNkcCAhPSBudWxsKSB7Ci0gICAgICAgIHBlZXJD
b25uZWN0aW9uQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHBhcmFtcy5vZmZlclNkcCk7Ci0g
ICAgICAgIGxvZ0FuZFRvYXN0KCJDcmVhdGluZyBBTlNXRVIuLi4iKTsKLSAgICAgICAgLy8gQ3Jl
YXRlIGFuc3dlci4gQW5zd2VyIFNEUCB3aWxsIGJlIHNlbnQgdG8gb2ZmZXJpbmcgY2xpZW50IGlu
Ci0gICAgICAgIC8vIFBlZXJDb25uZWN0aW9uRXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbiBldmVu
dC4KLSAgICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuY3JlYXRlQW5zd2VyKCk7Ci0gICAgICB9
Ci0gICAgICBpZiAocGFyYW1zLmljZUNhbmRpZGF0ZXMgIT0gbnVsbCkgewotICAgICAgICAvLyBB
ZGQgcmVtb3RlIElDRSBjYW5kaWRhdGVzIGZyb20gcm9vbS4KLSAgICAgICAgZm9yIChJY2VDYW5k
aWRhdGUgaWNlQ2FuZGlkYXRlIDogcGFyYW1zLmljZUNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICBw
ZWVyQ29ubmVjdGlvbkNsaWVudC5hZGRSZW1vdGVJY2VDYW5kaWRhdGUoaWNlQ2FuZGlkYXRlKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvbkNvbm5lY3RlZFRvUm9vbShmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtcykg
ewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIG9uQ29ubmVjdGVkVG9Sb29tSW50ZXJu
YWwocGFyYW1zKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvblJlbW90ZURlc2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAp
IHsKLSAgICBmaW5hbCBsb25nIGRlbHRhID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBj
YWxsU3RhcnRlZFRpbWVNczsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVl
ckNvbm5lY3Rpb25DbGllbnQgPT0gbnVsbCkgewotICAgICAgICAgIExvZy5lKFRBRywgIlJlY2Vp
dmVkIHJlbW90ZSBTRFAgZm9yIG5vbi1pbml0aWxpemVkIHBlZXIgY29ubmVjdGlvbi4iKTsKLSAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbG9nQW5kVG9hc3QoIlJlY2VpdmVk
IHJlbW90ZSAiICsgc2RwLnR5cGUgKyAiLCBkZWxheT0iICsgZGVsdGEgKyAibXMiKTsKLSAgICAg
ICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwKTsKLSAgICAg
ICAgaWYgKCFzaWduYWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvcikgewotICAgICAgICAgIGxvZ0Fu
ZFRvYXN0KCJDcmVhdGluZyBBTlNXRVIuLi4iKTsKLSAgICAgICAgICAvLyBDcmVhdGUgYW5zd2Vy
LiBBbnN3ZXIgU0RQIHdpbGwgYmUgc2VudCB0byBvZmZlcmluZyBjbGllbnQgaW4KLSAgICAgICAg
ICAvLyBQZWVyQ29ubmVjdGlvbkV2ZW50cy5vbkxvY2FsRGVzY3JpcHRpb24gZXZlbnQuCi0gICAg
ICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuY3JlYXRlQW5zd2VyKCk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblJlbW90
ZUljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgcnVuT25V
aVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ID09IG51bGwpIHsK
LSAgICAgICAgICBMb2cuZShUQUcsICJSZWNlaXZlZCBJQ0UgY2FuZGlkYXRlIGZvciBhIG5vbi1p
bml0aWFsaXplZCBwZWVyIGNvbm5lY3Rpb24uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmFkZFJlbW90ZUljZUNhbmRpZGF0ZShj
YW5kaWRhdGUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG9uUmVtb3RlSWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10g
Y2FuZGlkYXRlcykgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29u
bmVjdGlvbkNsaWVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiUmVjZWl2ZWQg
SUNFIGNhbmRpZGF0ZSByZW1vdmFscyBmb3IgYSBub24taW5pdGlhbGl6ZWQgcGVlciBjb25uZWN0
aW9uLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwZWVyQ29ubmVj
dGlvbkNsaWVudC5yZW1vdmVSZW1vdGVJY2VDYW5kaWRhdGVzKGNhbmRpZGF0ZXMpOwotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2hhbm5lbENs
b3NlKCkgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJSZW1v
dGUgZW5kIGh1bmcgdXA7IGRyb3BwaW5nIFBlZXJDb25uZWN0aW9uIik7Ci0gICAgICAgIGRpc2Nv
bm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvbkNoYW5uZWxFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICByZXBv
cnRFcnJvcihkZXNjcmlwdGlvbik7Ci0gIH0KLQotICAvLyAtLS0tLUltcGxlbWVudGF0aW9uIG9m
IFBlZXJDb25uZWN0aW9uQ2xpZW50LlBlZXJDb25uZWN0aW9uRXZlbnRzLi0tLS0tLS0tLQotICAv
LyBTZW5kIGxvY2FsIHBlZXIgY29ubmVjdGlvbiBTRFAgYW5kIElDRSBjYW5kaWRhdGVzIHRvIHJl
bW90ZSBwYXJ0eS4KLSAgLy8gQWxsIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmcm9tIHBlZXIgY29u
bmVjdGlvbiBjbGllbnQgbG9vcGVyIHRocmVhZCBhbmQKLSAgLy8gYXJlIHJvdXRlZCB0byBVSSB0
aHJlYWQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkxvY2FsRGVzY3JpcHRpb24oZmlu
YWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGZpbmFsIGxvbmcgZGVsdGEgPSBTeXN0
ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNhbGxTdGFydGVkVGltZU1zOwotICAgIHJ1bk9uVWlU
aHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIGlmIChhcHBSdGNDbGllbnQgIT0gbnVsbCkgewotICAgICAgICAg
IGxvZ0FuZFRvYXN0KCJTZW5kaW5nICIgKyBzZHAudHlwZSArICIsIGRlbGF5PSIgKyBkZWx0YSAr
ICJtcyIpOwotICAgICAgICAgIGlmIChzaWduYWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvcikgewot
ICAgICAgICAgICAgYXBwUnRjQ2xpZW50LnNlbmRPZmZlclNkcChzZHApOwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBhcHBSdGNDbGllbnQuc2VuZEFuc3dlclNkcChzZHApOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJz
LnZpZGVvTWF4Qml0cmF0ZSA+IDApIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJTZXQgdmlkZW8g
bWF4aW11bSBiaXRyYXRlOiAiICsgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvTWF4Qml0
cmF0ZSk7Ci0gICAgICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc2V0VmlkZW9NYXhCaXRyYXRl
KHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb01heEJpdHJhdGUpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VD
YW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgIHJ1bk9uVWlUaHJl
YWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGlmIChhcHBSdGNDbGllbnQgIT0gbnVsbCkgewotICAgICAgICAgIGFw
cFJ0Y0NsaWVudC5zZW5kTG9jYWxJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNl
Q2FuZGlkYXRlc1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAg
IHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChhcHBSdGNDbGllbnQgIT0gbnVsbCkgewot
ICAgICAgICAgIGFwcFJ0Y0NsaWVudC5zZW5kTG9jYWxJY2VDYW5kaWRhdGVSZW1vdmFscyhjYW5k
aWRhdGVzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIG9uSWNlQ29ubmVjdGVkKCkgewotICAgIGZpbmFsIGxvbmcgZGVsdGEg
PSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNhbGxTdGFydGVkVGltZU1zOwotICAgIHJ1
bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJJQ0UgY29ubmVjdGVkLCBkZWxh
eT0iICsgZGVsdGEgKyAibXMiKTsKLSAgICAgICAgaWNlQ29ubmVjdGVkID0gdHJ1ZTsKLSAgICAg
ICAgY2FsbENvbm5lY3RlZCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIG9uSWNlRGlzY29ubmVjdGVkKCkgewotICAgIHJ1bk9uVWlUaHJlYWQo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJJQ0UgZGlzY29ubmVjdGVkIik7Ci0gICAgICAgIGlj
ZUNvbm5lY3RlZCA9IGZhbHNlOwotICAgICAgICBkaXNjb25uZWN0KCk7Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVyQ29ubmVjdGlvbkNs
b3NlZCgpIHt9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rpb25T
dGF0c1JlYWR5KGZpbmFsIFN0YXRzUmVwb3J0W10gcmVwb3J0cykgewotICAgIHJ1bk9uVWlUaHJl
YWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGlmICghaXNFcnJvciAmJiBpY2VDb25uZWN0ZWQpIHsKLSAgICAgICAg
ICBodWRGcmFnbWVudC51cGRhdGVFbmNvZGVyU3RhdGlzdGljcyhyZXBvcnRzKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
UGVlckNvbm5lY3Rpb25FcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICByZXBv
cnRFcnJvcihkZXNjcmlwdGlvbik7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9DYWxsRnJhZ21lbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvQ2FsbEZyYWdtZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYWxsRnJhZ21lbnQuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDEzOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90
LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQu
YXBwLkZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQu
dmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBh
bmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9u
OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNlZWtCYXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQu
VGV4dFZpZXc7Ci0KLWltcG9ydCBvcmcud2VicnRjLlJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBl
OwotCi0vKioKLSAqIEZyYWdtZW50IGZvciBjYWxsIGNvbnRyb2wuCi0gKi8KLXB1YmxpYyBjbGFz
cyBDYWxsRnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCB7Ci0gIHByaXZhdGUgVmlldyBjb250cm9s
VmlldzsKLSAgcHJpdmF0ZSBUZXh0VmlldyBjb250YWN0VmlldzsKLSAgcHJpdmF0ZSBJbWFnZUJ1
dHRvbiBkaXNjb25uZWN0QnV0dG9uOwotICBwcml2YXRlIEltYWdlQnV0dG9uIGNhbWVyYVN3aXRj
aEJ1dHRvbjsKLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiB2aWRlb1NjYWxpbmdCdXR0b247Ci0gIHBy
aXZhdGUgSW1hZ2VCdXR0b24gdG9nZ2xlTXV0ZUJ1dHRvbjsKLSAgcHJpdmF0ZSBUZXh0VmlldyBj
YXB0dXJlRm9ybWF0VGV4dDsKLSAgcHJpdmF0ZSBTZWVrQmFyIGNhcHR1cmVGb3JtYXRTbGlkZXI7
Ci0gIHByaXZhdGUgT25DYWxsRXZlbnRzIGNhbGxFdmVudHM7Ci0gIHByaXZhdGUgU2NhbGluZ1R5
cGUgc2NhbGluZ1R5cGU7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aWRlb0NhbGxFbmFibGVkID0gdHJ1
ZTsKLQotICAvKioKLSAgICogQ2FsbCBjb250cm9sIGludGVyZmFjZSBmb3IgY29udGFpbmVyIGFj
dGl2aXR5LgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBPbkNhbGxFdmVudHMgewotICAgIHZv
aWQgb25DYWxsSGFuZ1VwKCk7Ci0gICAgdm9pZCBvbkNhbWVyYVN3aXRjaCgpOwotICAgIHZvaWQg
b25WaWRlb1NjYWxpbmdTd2l0Y2goU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUpOwotICAgIHZvaWQg
b25DYXB0dXJlRm9ybWF0Q2hhbmdlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0
ZSk7Ci0gICAgYm9vbGVhbiBvblRvZ2dsZU1pYygpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBWaWV3IG9uQ3JlYXRlVmlldygKLSAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyLCBW
aWV3R3JvdXAgY29udGFpbmVyLCBCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgY29u
dHJvbFZpZXcgPSBpbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0LmZyYWdtZW50X2NhbGwsIGNvbnRh
aW5lciwgZmFsc2UpOwotCi0gICAgLy8gQ3JlYXRlIFVJIGNvbnRyb2xzLgotICAgIGNvbnRhY3RW
aWV3ID0gKFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5jb250YWN0X25h
bWVfY2FsbCk7Ci0gICAgZGlzY29ubmVjdEJ1dHRvbiA9IChJbWFnZUJ1dHRvbikgY29udHJvbFZp
ZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0dG9uX2NhbGxfZGlzY29ubmVjdCk7Ci0gICAgY2FtZXJh
U3dpdGNoQnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5p
ZC5idXR0b25fY2FsbF9zd2l0Y2hfY2FtZXJhKTsKLSAgICB2aWRlb1NjYWxpbmdCdXR0b24gPSAo
SW1hZ2VCdXR0b24pIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmJ1dHRvbl9jYWxsX3Nj
YWxpbmdfbW9kZSk7Ci0gICAgdG9nZ2xlTXV0ZUJ1dHRvbiA9IChJbWFnZUJ1dHRvbikgY29udHJv
bFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0dG9uX2NhbGxfdG9nZ2xlX21pYyk7Ci0gICAgY2Fw
dHVyZUZvcm1hdFRleHQgPSAoVGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlk
LmNhcHR1cmVfZm9ybWF0X3RleHRfY2FsbCk7Ci0gICAgY2FwdHVyZUZvcm1hdFNsaWRlciA9IChT
ZWVrQmFyKSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5jYXB0dXJlX2Zvcm1hdF9zbGlk
ZXJfY2FsbCk7Ci0KLSAgICAvLyBBZGQgYnV0dG9ucyBjbGljayBldmVudHMuCi0gICAgZGlzY29u
bmVjdEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykg
ewotICAgICAgICBjYWxsRXZlbnRzLm9uQ2FsbEhhbmdVcCgpOwotICAgICAgfQotICAgIH0pOwot
Ci0gICAgY2FtZXJhU3dpdGNoQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNs
aWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xp
Y2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGNhbGxFdmVudHMub25DYW1lcmFTd2l0Y2goKTsKLSAg
ICAgIH0KLSAgICB9KTsKLQotICAgIHZpZGVvU2NhbGluZ0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVu
ZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgICBpZiAoc2NhbGluZ1R5cGUg
PT0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJTEwpIHsKLSAgICAgICAgICB2aWRlb1NjYWxp
bmdCdXR0b24uc2V0QmFja2dyb3VuZFJlc291cmNlKFIuZHJhd2FibGUuaWNfYWN0aW9uX2Z1bGxf
c2NyZWVuKTsKLSAgICAgICAgICBzY2FsaW5nVHlwZSA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVD
VF9GSVQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgdmlkZW9TY2FsaW5nQnV0dG9uLnNl
dEJhY2tncm91bmRSZXNvdXJjZShSLmRyYXdhYmxlLmljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxs
X3NjcmVlbik7Ci0gICAgICAgICAgc2NhbGluZ1R5cGUgPSBTY2FsaW5nVHlwZS5TQ0FMRV9BU1BF
Q1RfRklMTDsKLSAgICAgICAgfQotICAgICAgICBjYWxsRXZlbnRzLm9uVmlkZW9TY2FsaW5nU3dp
dGNoKHNjYWxpbmdUeXBlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBzY2FsaW5nVHlwZSA9IFNj
YWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSUxMOwotCi0gICAgdG9nZ2xlTXV0ZUJ1dHRvbi5zZXRP
bkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgICBib29s
ZWFuIGVuYWJsZWQgPSBjYWxsRXZlbnRzLm9uVG9nZ2xlTWljKCk7Ci0gICAgICAgIHRvZ2dsZU11
dGVCdXR0b24uc2V0QWxwaGEoZW5hYmxlZCA/IDEuMGYgOiAwLjNmKTsKLSAgICAgIH0KLSAgICB9
KTsKLQotICAgIHJldHVybiBjb250cm9sVmlldzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvblN0YXJ0KCkgewotICAgIHN1cGVyLm9uU3RhcnQoKTsKLQotICAgIGJvb2xlYW4g
Y2FwdHVyZVNsaWRlckVuYWJsZWQgPSBmYWxzZTsKLSAgICBCdW5kbGUgYXJncyA9IGdldEFyZ3Vt
ZW50cygpOwotICAgIGlmIChhcmdzICE9IG51bGwpIHsKLSAgICAgIFN0cmluZyBjb250YWN0TmFt
ZSA9IGFyZ3MuZ2V0U3RyaW5nKENhbGxBY3Rpdml0eS5FWFRSQV9ST09NSUQpOwotICAgICAgY29u
dGFjdFZpZXcuc2V0VGV4dChjb250YWN0TmFtZSk7Ci0gICAgICB2aWRlb0NhbGxFbmFibGVkID0g
YXJncy5nZXRCb29sZWFuKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQUxMLCB0cnVlKTsKLSAg
ICAgIGNhcHR1cmVTbGlkZXJFbmFibGVkID0gdmlkZW9DYWxsRW5hYmxlZAotICAgICAgICAgICYm
IGFyZ3MuZ2V0Qm9vbGVhbihDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FQVFVSRVFVQUxJVFlT
TElERVJfRU5BQkxFRCwgZmFsc2UpOwotICAgIH0KLSAgICBpZiAoIXZpZGVvQ2FsbEVuYWJsZWQp
IHsKLSAgICAgIGNhbWVyYVN3aXRjaEJ1dHRvbi5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxF
KTsKLSAgICB9Ci0gICAgaWYgKGNhcHR1cmVTbGlkZXJFbmFibGVkKSB7Ci0gICAgICBjYXB0dXJl
Rm9ybWF0U2xpZGVyLnNldE9uU2Vla0JhckNoYW5nZUxpc3RlbmVyKAotICAgICAgICAgIG5ldyBD
YXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIoY2FwdHVyZUZvcm1hdFRleHQsIGNhbGxFdmVudHMpKTsK
LSAgICB9IGVsc2UgewotICAgICAgY2FwdHVyZUZvcm1hdFRleHQuc2V0VmlzaWJpbGl0eShWaWV3
LkdPTkUpOwotICAgICAgY2FwdHVyZUZvcm1hdFNsaWRlci5zZXRWaXNpYmlsaXR5KFZpZXcuR09O
RSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gVE9ETyhzYWthbCk6IFJlcGxhY2Ugd2l0aCBvbkF0dGFj
aChDb250ZXh0KSBvbmNlIHdlIG9ubHkgc3VwcG9ydCBBUEkgbGV2ZWwgMjMrLgotICBAU3VwcHJl
c3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25B
dHRhY2goQWN0aXZpdHkgYWN0aXZpdHkpIHsKLSAgICBzdXBlci5vbkF0dGFjaChhY3Rpdml0eSk7
Ci0gICAgY2FsbEV2ZW50cyA9IChPbkNhbGxFdmVudHMpIGFjdGl2aXR5OwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FwdHVyZVF1YWxpdHlDb250cm9sbGVyLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhcHR1cmVRdWFs
aXR5Q29udHJvbGxlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvQ2FwdHVyZVF1YWxpdHlDb250cm9sbGVyLmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3Bv
dC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLndpZGdldC5TZWVrQmFyOwotaW1wb3J0IGFuZHJv
aWQud2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2
YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0
IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRy
b2lkLkNhcHR1cmVGb3JtYXQ7Ci0KLS8qKgotICogQ29udHJvbCBjYXB0dXJlIGZvcm1hdCBiYXNl
ZCBvbiBhIHNlZWtiYXIgbGlzdGVuZXIuCi0gKi8KLXB1YmxpYyBjbGFzcyBDYXB0dXJlUXVhbGl0
eUNvbnRyb2xsZXIgaW1wbGVtZW50cyBTZWVrQmFyLk9uU2Vla0JhckNoYW5nZUxpc3RlbmVyIHsK
LSAgcHJpdmF0ZSBmaW5hbCBMaXN0PENhcHR1cmVGb3JtYXQ+IGZvcm1hdHMgPQotICAgICAgQXJy
YXlzLmFzTGlzdChuZXcgQ2FwdHVyZUZvcm1hdCgxMjgwLCA3MjAsIDAsIDMwMDAwKSwgbmV3IENh
cHR1cmVGb3JtYXQoOTYwLCA1NDAsIDAsIDMwMDAwKSwKLSAgICAgICAgICBuZXcgQ2FwdHVyZUZv
cm1hdCg2NDAsIDQ4MCwgMCwgMzAwMDApLCBuZXcgQ2FwdHVyZUZvcm1hdCg0ODAsIDM2MCwgMCwg
MzAwMDApLAotICAgICAgICAgIG5ldyBDYXB0dXJlRm9ybWF0KDMyMCwgMjQwLCAwLCAzMDAwMCks
IG5ldyBDYXB0dXJlRm9ybWF0KDI1NiwgMTQ0LCAwLCAzMDAwMCkpOwotICAvLyBQcmlvcml0aXpl
IGZyYW1lcmF0ZSBiZWxvdyB0aGlzIHRocmVzaG9sZCBhbmQgcmVzb2x1dGlvbiBhYm92ZSB0aGUg
dGhyZXNob2xkLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRlJBTUVSQVRFX1RIUkVTSE9M
RCA9IDE1OwotICBwcml2YXRlIFRleHRWaWV3IGNhcHR1cmVGb3JtYXRUZXh0OwotICBwcml2YXRl
IENhbGxGcmFnbWVudC5PbkNhbGxFdmVudHMgY2FsbEV2ZW50czsKLSAgcHJpdmF0ZSBpbnQgd2lk
dGggPSAwOwotICBwcml2YXRlIGludCBoZWlnaHQgPSAwOwotICBwcml2YXRlIGludCBmcmFtZXJh
dGUgPSAwOwotICBwcml2YXRlIGRvdWJsZSB0YXJnZXRCYW5kd2lkdGggPSAwOwotCi0gIHB1Ymxp
YyBDYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIoCi0gICAgICBUZXh0VmlldyBjYXB0dXJlRm9ybWF0
VGV4dCwgQ2FsbEZyYWdtZW50Lk9uQ2FsbEV2ZW50cyBjYWxsRXZlbnRzKSB7Ci0gICAgdGhpcy5j
YXB0dXJlRm9ybWF0VGV4dCA9IGNhcHR1cmVGb3JtYXRUZXh0OwotICAgIHRoaXMuY2FsbEV2ZW50
cyA9IGNhbGxFdmVudHM7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIENvbXBhcmF0b3I8Q2FwdHVy
ZUZvcm1hdD4gY29tcGFyZUZvcm1hdHMgPSBuZXcgQ29tcGFyYXRvcjxDYXB0dXJlRm9ybWF0Pigp
IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgaW50IGNvbXBhcmUoQ2FwdHVyZUZvcm1hdCBm
aXJzdCwgQ2FwdHVyZUZvcm1hdCBzZWNvbmQpIHsKLSAgICAgIGludCBmaXJzdEZwcyA9IGNhbGN1
bGF0ZUZyYW1lcmF0ZSh0YXJnZXRCYW5kd2lkdGgsIGZpcnN0KTsKLSAgICAgIGludCBzZWNvbmRG
cHMgPSBjYWxjdWxhdGVGcmFtZXJhdGUodGFyZ2V0QmFuZHdpZHRoLCBzZWNvbmQpOwotCi0gICAg
ICBpZiAoZmlyc3RGcHMgPj0gRlJBTUVSQVRFX1RIUkVTSE9MRCAmJiBzZWNvbmRGcHMgPj0gRlJB
TUVSQVRFX1RIUkVTSE9MRAotICAgICAgICAgIHx8IGZpcnN0RnBzID09IHNlY29uZEZwcykgewot
ICAgICAgICAvLyBDb21wYXJlIHJlc29sdXRpb24uCi0gICAgICAgIHJldHVybiBmaXJzdC53aWR0
aCAqIGZpcnN0LmhlaWdodCAtIHNlY29uZC53aWR0aCAqIHNlY29uZC5oZWlnaHQ7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICAvLyBDb21wYXJlIGZwcy4KLSAgICAgICAgcmV0dXJuIGZpcnN0RnBz
IC0gc2Vjb25kRnBzOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25Qcm9ncmVzc0NoYW5nZWQoU2Vla0JhciBzZWVrQmFyLCBpbnQgcHJvZ3Jlc3Ms
IGJvb2xlYW4gZnJvbVVzZXIpIHsKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMCkgewotICAgICAgd2lk
dGggPSAwOwotICAgICAgaGVpZ2h0ID0gMDsKLSAgICAgIGZyYW1lcmF0ZSA9IDA7Ci0gICAgICBj
YXB0dXJlRm9ybWF0VGV4dC5zZXRUZXh0KFIuc3RyaW5nLm11dGVkKTsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBFeHRyYWN0IG1heCBiYW5kd2lkdGggKGluIG1pbGxpcGl4ZWxzIC8g
c2Vjb25kKS4KLSAgICBsb25nIG1heENhcHR1cmVCYW5kd2lkdGggPSBqYXZhLmxhbmcuTG9uZy5N
SU5fVkFMVUU7Ci0gICAgZm9yIChDYXB0dXJlRm9ybWF0IGZvcm1hdCA6IGZvcm1hdHMpIHsKLSAg
ICAgIG1heENhcHR1cmVCYW5kd2lkdGggPQotICAgICAgICAgIE1hdGgubWF4KG1heENhcHR1cmVC
YW5kd2lkdGgsIChsb25nKSBmb3JtYXQud2lkdGggKiBmb3JtYXQuaGVpZ2h0ICogZm9ybWF0LmZy
YW1lcmF0ZS5tYXgpOwotICAgIH0KLQotICAgIC8vIEZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMS4K
LSAgICBkb3VibGUgYmFuZHdpZHRoRnJhY3Rpb24gPSAoZG91YmxlKSBwcm9ncmVzcyAvIDEwMC4w
OwotICAgIC8vIE1ha2UgYSBsb2ctc2NhbGUgdHJhbnNmb3JtYXRpb24sIHN0aWxsIGJldHdlZW4g
MCBhbmQgMS4KLSAgICBmaW5hbCBkb3VibGUga0V4cENvbnN0YW50ID0gMy4wOwotICAgIGJhbmR3
aWR0aEZyYWN0aW9uID0KLSAgICAgICAgKE1hdGguZXhwKGtFeHBDb25zdGFudCAqIGJhbmR3aWR0
aEZyYWN0aW9uKSAtIDEpIC8gKE1hdGguZXhwKGtFeHBDb25zdGFudCkgLSAxKTsKLSAgICB0YXJn
ZXRCYW5kd2lkdGggPSBiYW5kd2lkdGhGcmFjdGlvbiAqIG1heENhcHR1cmVCYW5kd2lkdGg7Ci0K
LSAgICAvLyBDaG9vc2UgdGhlIGJlc3QgZm9ybWF0IGdpdmVuIGEgdGFyZ2V0IGJhbmR3aWR0aC4K
LSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0IGJlc3RGb3JtYXQgPSBDb2xsZWN0aW9ucy5tYXgoZm9y
bWF0cywgY29tcGFyZUZvcm1hdHMpOwotICAgIHdpZHRoID0gYmVzdEZvcm1hdC53aWR0aDsKLSAg
ICBoZWlnaHQgPSBiZXN0Rm9ybWF0LmhlaWdodDsKLSAgICBmcmFtZXJhdGUgPSBjYWxjdWxhdGVG
cmFtZXJhdGUodGFyZ2V0QmFuZHdpZHRoLCBiZXN0Rm9ybWF0KTsKLSAgICBjYXB0dXJlRm9ybWF0
VGV4dC5zZXRUZXh0KAotICAgICAgICBTdHJpbmcuZm9ybWF0KGNhcHR1cmVGb3JtYXRUZXh0Lmdl
dENvbnRleHQoKS5nZXRTdHJpbmcoUi5zdHJpbmcuZm9ybWF0X2Rlc2NyaXB0aW9uKSwgd2lkdGgs
Ci0gICAgICAgICAgICBoZWlnaHQsIGZyYW1lcmF0ZSkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIG9uU3RhcnRUcmFja2luZ1RvdWNoKFNlZWtCYXIgc2Vla0Jhcikge30KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25TdG9wVHJhY2tpbmdUb3VjaChTZWVrQmFyIHNl
ZWtCYXIpIHsKLSAgICBjYWxsRXZlbnRzLm9uQ2FwdHVyZUZvcm1hdENoYW5nZSh3aWR0aCwgaGVp
Z2h0LCBmcmFtZXJhdGUpOwotICB9Ci0KLSAgLy8gUmV0dXJuIHRoZSBoaWdoZXN0IGZyYW1lIHJh
dGUgcG9zc2libGUgYmFzZWQgb24gYmFuZHdpZHRoIGFuZCBmb3JtYXQuCi0gIHByaXZhdGUgaW50
IGNhbGN1bGF0ZUZyYW1lcmF0ZShkb3VibGUgYmFuZHdpZHRoLCBDYXB0dXJlRm9ybWF0IGZvcm1h
dCkgewotICAgIHJldHVybiAoaW50KSBNYXRoLnJvdW5kKAotICAgICAgICBNYXRoLm1pbihmb3Jt
YXQuZnJhbWVyYXRlLm1heCwgKGludCkgTWF0aC5yb3VuZChiYW5kd2lkdGggLyAoZm9ybWF0Lndp
ZHRoICogZm9ybWF0LmhlaWdodCkpKQotICAgICAgICAvIDEwMDAuMCk7Ci0gIH0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Db25uZWN0QWN0aXZpdHkuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ29ubmVjdEFjdGl2aXR5LmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Db25uZWN0
QWN0aXZpdHkuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDU0NSArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
YXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwotaW1wb3J0IGFu
ZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50Lklu
dGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7Ci1pbXBvcnQg
YW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJv
aWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9n
OwotaW1wb3J0IGFuZHJvaWQudmlldy5Db250ZXh0TWVudTsKLWltcG9ydCBhbmRyb2lkLnZpZXcu
S2V5RXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3
Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmll
dy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2Qu
RWRpdG9ySW5mbzsKLWltcG9ydCBhbmRyb2lkLndlYmtpdC5VUkxVdGlsOwotaW1wb3J0IGFuZHJv
aWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRl
cjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5FZGl0VGV4dDsKLWltcG9ydCBhbmRyb2lkLndpZGdl
dC5JbWFnZUJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5MaXN0VmlldzsKLWltcG9ydCBh
bmRyb2lkLndpZGdldC5UZXh0VmlldzsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1w
b3J0IGphdmEudXRpbC5SYW5kb207Ci1pbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5OwotaW1wb3J0
IG9yZy5qc29uLkpTT05FeGNlcHRpb247Ci0KLS8qKgotICogSGFuZGxlcyB0aGUgaW5pdGlhbCBz
ZXR1cCB3aGVyZSB0aGUgdXNlciBzZWxlY3RzIHdoaWNoIHJvb20gdG8gam9pbi4KLSAqLwotcHVi
bGljIGNsYXNzIENvbm5lY3RBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IHsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDb25uZWN0QWN0aXZpdHkiOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTl9SRVFVRVNUID0gMTsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IFJFTU9WRV9GQVZPUklURV9JTkRFWCA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGJv
b2xlYW4gY29tbWFuZExpbmVSdW4gPSBmYWxzZTsKLQotICBwcml2YXRlIEltYWdlQnV0dG9uIGNv
bm5lY3RCdXR0b247Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gYWRkRmF2b3JpdGVCdXR0b247Ci0g
IHByaXZhdGUgRWRpdFRleHQgcm9vbUVkaXRUZXh0OwotICBwcml2YXRlIExpc3RWaWV3IHJvb21M
aXN0VmlldzsKLSAgcHJpdmF0ZSBTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmOwotICBwcml2
YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9DYWxsRW5hYmxlZDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZlNjcmVlbmNhcHR1cmU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZDYW1lcmEyOwotICBw
cml2YXRlIFN0cmluZyBrZXlwcmVmUmVzb2x1dGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJl
ZkZwczsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVyOwotICBw
cml2YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9CaXRyYXRlVHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZlZpZGVvQml0cmF0ZVZhbHVlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9D
b2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkF1ZGlvQml0cmF0ZVR5cGU7Ci0gIHByaXZh
dGUgU3RyaW5nIGtleXByZWZBdWRpb0JpdHJhdGVWYWx1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZkF1ZGlvQ29kZWM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZId0NvZGVjQWNjZWxlcmF0
aW9uOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQ2FwdHVyZVRvVGV4dHVyZTsKLSAgcHJpdmF0
ZSBTdHJpbmcga2V5cHJlZk5vQXVkaW9Qcm9jZXNzaW5nUGlwZWxpbmU7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZBZWNEdW1wOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmT3BlblNMRVM7Ci0g
IHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVpbHRJbkFlYzsKLSAgcHJpdmF0ZSBTdHJp
bmcga2V5cHJlZkRpc2FibGVCdWlsdEluQWdjOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRGlz
YWJsZUJ1aWx0SW5OczsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkVuYWJsZUxldmVsQ29udHJv
bDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkRpc3BsYXlIdWQ7Ci0gIHByaXZhdGUgU3RyaW5n
IGtleXByZWZUcmFjaW5nOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmUm9vbVNlcnZlclVybDsK
LSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJvb207Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZS
b29tTGlzdDsKLSAgcHJpdmF0ZSBBcnJheUxpc3Q8U3RyaW5nPiByb29tTGlzdDsKLSAgcHJpdmF0
ZSBBcnJheUFkYXB0ZXI8U3RyaW5nPiBhZGFwdGVyOwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgc3VwZXIub25D
cmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLQotICAgIC8vIEdldCBzZXR0aW5nIGtleXMuCi0g
ICAgUHJlZmVyZW5jZU1hbmFnZXIuc2V0RGVmYXVsdFZhbHVlcyh0aGlzLCBSLnhtbC5wcmVmZXJl
bmNlcywgZmFsc2UpOwotICAgIHNoYXJlZFByZWYgPSBQcmVmZXJlbmNlTWFuYWdlci5nZXREZWZh
dWx0U2hhcmVkUHJlZmVyZW5jZXModGhpcyk7Ci0gICAga2V5cHJlZlZpZGVvQ2FsbEVuYWJsZWQg
PSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl92aWRlb2NhbGxfa2V5KTsKLSAgICBrZXlwcmVmU2Ny
ZWVuY2FwdHVyZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3NjcmVlbmNhcHR1cmVfa2V5KTsK
LSAgICBrZXlwcmVmQ2FtZXJhMiA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhbWVyYTJfa2V5
KTsKLSAgICBrZXlwcmVmUmVzb2x1dGlvbiA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jlc29s
dXRpb25fa2V5KTsKLSAgICBrZXlwcmVmRnBzID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZnBz
X2tleSk7Ci0gICAga2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVyID0gZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfa2V5KTsKLSAgICBrZXlwcmVmVmlkZW9CaXRy
YXRlVHlwZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVvYml0cmF0ZV9rZXkpOwot
ICAgIGtleXByZWZWaWRlb0JpdHJhdGVWYWx1ZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21h
eHZpZGVvYml0cmF0ZXZhbHVlX2tleSk7Ci0gICAga2V5cHJlZlZpZGVvQ29kZWMgPSBnZXRTdHJp
bmcoUi5zdHJpbmcucHJlZl92aWRlb2NvZGVjX2tleSk7Ci0gICAga2V5cHJlZkh3Q29kZWNBY2Nl
bGVyYXRpb24gPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9od2NvZGVjX2tleSk7Ci0gICAga2V5
cHJlZkNhcHR1cmVUb1RleHR1cmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9jYXB0dXJldG90
ZXh0dXJlX2tleSk7Ci0gICAga2V5cHJlZkF1ZGlvQml0cmF0ZVR5cGUgPSBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9rZXkpOwotICAgIGtleXByZWZBdWRpb0JpdHJh
dGVWYWx1ZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVf
a2V5KTsKLSAgICBrZXlwcmVmQXVkaW9Db2RlYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2F1
ZGlvY29kZWNfa2V5KTsKLSAgICBrZXlwcmVmTm9BdWRpb1Byb2Nlc3NpbmdQaXBlbGluZSA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX25vYXVkaW9wcm9jZXNzaW5nX2tleSk7Ci0gICAga2V5cHJl
ZkFlY0R1bXAgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9hZWNkdW1wX2tleSk7Ci0gICAga2V5
cHJlZk9wZW5TTEVTID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfb3BlbnNsZXNfa2V5KTsKLSAg
ICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BZWMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNh
YmxlX2J1aWx0X2luX2FlY19rZXkpOwotICAgIGtleXByZWZEaXNhYmxlQnVpbHRJbkFnYyA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2tleSk7Ci0gICAga2V5
cHJlZkRpc2FibGVCdWlsdEluTnMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1
aWx0X2luX25zX2tleSk7Ci0gICAga2V5cHJlZkVuYWJsZUxldmVsQ29udHJvbCA9IGdldFN0cmlu
ZyhSLnN0cmluZy5wcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2tleSk7Ci0gICAga2V5cHJlZkRp
c3BsYXlIdWQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNwbGF5aHVkX2tleSk7Ci0gICAg
a2V5cHJlZlRyYWNpbmcgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl90cmFjaW5nX2tleSk7Ci0g
ICAga2V5cHJlZlJvb21TZXJ2ZXJVcmwgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yb29tX3Nl
cnZlcl91cmxfa2V5KTsKLSAgICBrZXlwcmVmUm9vbSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X3Jvb21fa2V5KTsKLSAgICBrZXlwcmVmUm9vbUxpc3QgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl9yb29tX2xpc3Rfa2V5KTsKLQotICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmFjdGl2aXR5
X2Nvbm5lY3QpOwotCi0gICAgcm9vbUVkaXRUZXh0ID0gKEVkaXRUZXh0KSBmaW5kVmlld0J5SWQo
Ui5pZC5yb29tX2VkaXR0ZXh0KTsKLSAgICByb29tRWRpdFRleHQuc2V0T25FZGl0b3JBY3Rpb25M
aXN0ZW5lcihuZXcgVGV4dFZpZXcuT25FZGl0b3JBY3Rpb25MaXN0ZW5lcigpIHsKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIGJvb2xlYW4gb25FZGl0b3JBY3Rpb24oVGV4dFZpZXcgdGV4
dFZpZXcsIGludCBpLCBLZXlFdmVudCBrZXlFdmVudCkgewotICAgICAgICBpZiAoaSA9PSBFZGl0
b3JJbmZvLklNRV9BQ1RJT05fRE9ORSkgewotICAgICAgICAgIGFkZEZhdm9yaXRlQnV0dG9uLnBl
cmZvcm1DbGljaygpOwotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICByb29tRWRpdFRleHQucmVxdWVz
dEZvY3VzKCk7Ci0KLSAgICByb29tTGlzdFZpZXcgPSAoTGlzdFZpZXcpIGZpbmRWaWV3QnlJZChS
LmlkLnJvb21fbGlzdHZpZXcpOwotICAgIHJvb21MaXN0Vmlldy5zZXRFbXB0eVZpZXcoZmluZFZp
ZXdCeUlkKGFuZHJvaWQuUi5pZC5lbXB0eSkpOwotICAgIHJvb21MaXN0Vmlldy5zZXRPbkl0ZW1D
bGlja0xpc3RlbmVyKHJvb21MaXN0Q2xpY2tMaXN0ZW5lcik7Ci0gICAgcmVnaXN0ZXJGb3JDb250
ZXh0TWVudShyb29tTGlzdFZpZXcpOwotICAgIGNvbm5lY3RCdXR0b24gPSAoSW1hZ2VCdXR0b24p
IGZpbmRWaWV3QnlJZChSLmlkLmNvbm5lY3RfYnV0dG9uKTsKLSAgICBjb25uZWN0QnV0dG9uLnNl
dE9uQ2xpY2tMaXN0ZW5lcihjb25uZWN0TGlzdGVuZXIpOwotICAgIGFkZEZhdm9yaXRlQnV0dG9u
ID0gKEltYWdlQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5hZGRfZmF2b3JpdGVfYnV0dG9uKTsK
LSAgICBhZGRGYXZvcml0ZUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIoYWRkRmF2b3JpdGVMaXN0
ZW5lcik7Ci0KLSAgICAvLyBJZiBhbiBpbXBsaWNpdCBWSUVXIGludGVudCBpcyBsYXVuY2hpbmcg
dGhlIGFwcCwgZ28gZGlyZWN0bHkgdG8gdGhhdCBVUkwuCi0gICAgZmluYWwgSW50ZW50IGludGVu
dCA9IGdldEludGVudCgpOwotICAgIGlmICgiYW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVciLmVx
dWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpICYmICFjb21tYW5kTGluZVJ1bikgewotICAgICAgYm9v
bGVhbiBsb29wYmFjayA9IGludGVudC5nZXRCb29sZWFuRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJB
X0xPT1BCQUNLLCBmYWxzZSk7Ci0gICAgICBpbnQgcnVuVGltZU1zID0gaW50ZW50LmdldEludEV4
dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9SVU5USU1FLCAwKTsKLSAgICAgIGJvb2xlYW4gdXNlVmFs
dWVzRnJvbUludGVudCA9Ci0gICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShDYWxsQWN0
aXZpdHkuRVhUUkFfVVNFX1ZBTFVFU19GUk9NX0lOVEVOVCwgZmFsc2UpOwotICAgICAgU3RyaW5n
IHJvb20gPSBzaGFyZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmUm9vbSwgIiIpOwotICAgICAgY29u
bmVjdFRvUm9vbShyb29tLCB0cnVlLCBsb29wYmFjaywgdXNlVmFsdWVzRnJvbUludGVudCwgcnVu
VGltZU1zKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gb25D
cmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUpIHsKLSAgICBnZXRNZW51SW5mbGF0ZXIoKS5pbmZs
YXRlKFIubWVudS5jb25uZWN0X21lbnUsIG1lbnUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ3JlYXRlQ29udGV4dE1lbnUoQ29udGV4dE1l
bnUgbWVudSwgVmlldyB2LCBDb250ZXh0TWVudS5Db250ZXh0TWVudUluZm8gbWVudUluZm8pIHsK
LSAgICBpZiAodi5nZXRJZCgpID09IFIuaWQucm9vbV9saXN0dmlldykgewotICAgICAgQWRhcHRl
clZpZXcuQWRhcHRlckNvbnRleHRNZW51SW5mbyBpbmZvID0gKEFkYXB0ZXJWaWV3LkFkYXB0ZXJD
b250ZXh0TWVudUluZm8pIG1lbnVJbmZvOwotICAgICAgbWVudS5zZXRIZWFkZXJUaXRsZShyb29t
TGlzdC5nZXQoaW5mby5wb3NpdGlvbikpOwotICAgICAgU3RyaW5nW10gbWVudUl0ZW1zID0gZ2V0
UmVzb3VyY2VzKCkuZ2V0U3RyaW5nQXJyYXkoUi5hcnJheS5yb29tTGlzdENvbnRleHRNZW51KTsK
LSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICAgIG1lbnUuYWRkKE1lbnUuTk9ORSwgaSwgaSwgbWVudUl0ZW1zW2ldKTsKLSAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgc3VwZXIub25DcmVhdGVDb250ZXh0TWVudShtZW51LCB2LCBtZW51
SW5mbyk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIG9uQ29u
dGV4dEl0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7Ci0gICAgaWYgKGl0ZW0uZ2V0SXRlbUlk
KCkgPT0gUkVNT1ZFX0ZBVk9SSVRFX0lOREVYKSB7Ci0gICAgICBBZGFwdGVyVmlldy5BZGFwdGVy
Q29udGV4dE1lbnVJbmZvIGluZm8gPQotICAgICAgICAgIChBZGFwdGVyVmlldy5BZGFwdGVyQ29u
dGV4dE1lbnVJbmZvKSBpdGVtLmdldE1lbnVJbmZvKCk7Ci0gICAgICByb29tTGlzdC5yZW1vdmUo
aW5mby5wb3NpdGlvbik7Ci0gICAgICBhZGFwdGVyLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3VwZXIub25Db250ZXh0SXRl
bVNlbGVjdGVkKGl0ZW0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIG9u
T3B0aW9uc0l0ZW1TZWxlY3RlZChNZW51SXRlbSBpdGVtKSB7Ci0gICAgLy8gSGFuZGxlIHByZXNz
ZXMgb24gdGhlIGFjdGlvbiBiYXIgaXRlbXMuCi0gICAgaWYgKGl0ZW0uZ2V0SXRlbUlkKCkgPT0g
Ui5pZC5hY3Rpb25fc2V0dGluZ3MpIHsKLSAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50
KHRoaXMsIFNldHRpbmdzQWN0aXZpdHkuY2xhc3MpOwotICAgICAgc3RhcnRBY3Rpdml0eShpbnRl
bnQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIGlmIChpdGVtLmdldEl0ZW1JZCgp
ID09IFIuaWQuYWN0aW9uX2xvb3BiYWNrKSB7Ci0gICAgICBjb25uZWN0VG9Sb29tKG51bGwsIGZh
bHNlLCB0cnVlLCBmYWxzZSwgMCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgcmV0dXJuIHN1cGVyLm9uT3B0aW9uc0l0ZW1TZWxlY3RlZChpdGVtKTsKLSAgICB9Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QYXVzZSgpIHsKLSAgICBzdXBlci5v
blBhdXNlKCk7Ci0gICAgU3RyaW5nIHJvb20gPSByb29tRWRpdFRleHQuZ2V0VGV4dCgpLnRvU3Ry
aW5nKCk7Ci0gICAgU3RyaW5nIHJvb21MaXN0SnNvbiA9IG5ldyBKU09OQXJyYXkocm9vbUxpc3Qp
LnRvU3RyaW5nKCk7Ci0gICAgU2hhcmVkUHJlZmVyZW5jZXMuRWRpdG9yIGVkaXRvciA9IHNoYXJl
ZFByZWYuZWRpdCgpOwotICAgIGVkaXRvci5wdXRTdHJpbmcoa2V5cHJlZlJvb20sIHJvb20pOwot
ICAgIGVkaXRvci5wdXRTdHJpbmcoa2V5cHJlZlJvb21MaXN0LCByb29tTGlzdEpzb24pOwotICAg
IGVkaXRvci5jb21taXQoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblJl
c3VtZSgpIHsKLSAgICBzdXBlci5vblJlc3VtZSgpOwotICAgIFN0cmluZyByb29tID0gc2hhcmVk
UHJlZi5nZXRTdHJpbmcoa2V5cHJlZlJvb20sICIiKTsKLSAgICByb29tRWRpdFRleHQuc2V0VGV4
dChyb29tKTsKLSAgICByb29tTGlzdCA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIFN0
cmluZyByb29tTGlzdEpzb24gPSBzaGFyZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmUm9vbUxpc3Qs
IG51bGwpOwotICAgIGlmIChyb29tTGlzdEpzb24gIT0gbnVsbCkgewotICAgICAgdHJ5IHsKLSAg
ICAgICAgSlNPTkFycmF5IGpzb25BcnJheSA9IG5ldyBKU09OQXJyYXkocm9vbUxpc3RKc29uKTsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBqc29uQXJyYXkubGVuZ3RoKCk7IGkrKykgewot
ICAgICAgICAgIHJvb21MaXN0LmFkZChqc29uQXJyYXkuZ2V0KGkpLnRvU3RyaW5nKCkpOwotICAg
ICAgICB9Ci0gICAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUo
VEFHLCAiRmFpbGVkIHRvIGxvYWQgcm9vbSBsaXN0OiAiICsgZS50b1N0cmluZygpKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgYWRhcHRlciA9IG5ldyBBcnJheUFkYXB0ZXI8U3RyaW5nPih0aGlzLCBh
bmRyb2lkLlIubGF5b3V0LnNpbXBsZV9saXN0X2l0ZW1fMSwgcm9vbUxpc3QpOwotICAgIHJvb21M
aXN0Vmlldy5zZXRBZGFwdGVyKGFkYXB0ZXIpOwotICAgIGlmIChhZGFwdGVyLmdldENvdW50KCkg
PiAwKSB7Ci0gICAgICByb29tTGlzdFZpZXcucmVxdWVzdEZvY3VzKCk7Ci0gICAgICByb29tTGlz
dFZpZXcuc2V0SXRlbUNoZWNrZWQoMCwgdHJ1ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHByb3RlY3RlZCB2b2lkIG9uQWN0aXZpdHlSZXN1bHQoaW50IHJlcXVlc3RDb2RlLCBpbnQg
cmVzdWx0Q29kZSwgSW50ZW50IGRhdGEpIHsKLSAgICBpZiAocmVxdWVzdENvZGUgPT0gQ09OTkVD
VElPTl9SRVFVRVNUICYmIGNvbW1hbmRMaW5lUnVuKSB7Ci0gICAgICBMb2cuZChUQUcsICJSZXR1
cm46ICIgKyByZXN1bHRDb2RlKTsKLSAgICAgIHNldFJlc3VsdChyZXN1bHRDb2RlKTsKLSAgICAg
IGNvbW1hbmRMaW5lUnVuID0gZmFsc2U7Ci0gICAgICBmaW5pc2goKTsKLSAgICB9Ci0gIH0KLQot
ICAvKioKLSAgICogR2V0IGEgdmFsdWUgZnJvbSB0aGUgc2hhcmVkIHByZWZlcmVuY2Ugb3IgZnJv
bSB0aGUgaW50ZW50LCBpZiBpdCBkb2VzIG5vdAotICAgKiBleGlzdCB0aGUgZGVmYXVsdCBpcyB1
c2VkLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgc2hhcmVkUHJlZkdldFN0cmluZygKLSAgICAg
IGludCBhdHRyaWJ1dGVJZCwgU3RyaW5nIGludGVudE5hbWUsIGludCBkZWZhdWx0SWQsIGJvb2xl
YW4gdXNlRnJvbUludGVudCkgewotICAgIFN0cmluZyBkZWZhdWx0VmFsdWUgPSBnZXRTdHJpbmco
ZGVmYXVsdElkKTsKLSAgICBpZiAodXNlRnJvbUludGVudCkgewotICAgICAgU3RyaW5nIHZhbHVl
ID0gZ2V0SW50ZW50KCkuZ2V0U3RyaW5nRXh0cmEoaW50ZW50TmFtZSk7Ci0gICAgICBpZiAodmFs
dWUgIT0gbnVsbCkgewotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gZGVmYXVsdFZhbHVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFt
ZSA9IGdldFN0cmluZyhhdHRyaWJ1dGVJZCk7Ci0gICAgICByZXR1cm4gc2hhcmVkUHJlZi5nZXRT
dHJpbmcoYXR0cmlidXRlTmFtZSwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICAvKioK
LSAgICogR2V0IGEgdmFsdWUgZnJvbSB0aGUgc2hhcmVkIHByZWZlcmVuY2Ugb3IgZnJvbSB0aGUg
aW50ZW50LCBpZiBpdCBkb2VzIG5vdAotICAgKiBleGlzdCB0aGUgZGVmYXVsdCBpcyB1c2VkLgot
ICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNoYXJlZFByZWZHZXRCb29sZWFuKAotICAgICAgaW50
IGF0dHJpYnV0ZUlkLCBTdHJpbmcgaW50ZW50TmFtZSwgaW50IGRlZmF1bHRJZCwgYm9vbGVhbiB1
c2VGcm9tSW50ZW50KSB7Ci0gICAgYm9vbGVhbiBkZWZhdWx0VmFsdWUgPSBCb29sZWFuLnZhbHVl
T2YoZ2V0U3RyaW5nKGRlZmF1bHRJZCkpOwotICAgIGlmICh1c2VGcm9tSW50ZW50KSB7Ci0gICAg
ICByZXR1cm4gZ2V0SW50ZW50KCkuZ2V0Qm9vbGVhbkV4dHJhKGludGVudE5hbWUsIGRlZmF1bHRW
YWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gZ2V0U3Ry
aW5nKGF0dHJpYnV0ZUlkKTsKLSAgICAgIHJldHVybiBzaGFyZWRQcmVmLmdldEJvb2xlYW4oYXR0
cmlidXRlTmFtZSwgZGVmYXVsdFZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
Y29ubmVjdFRvUm9vbShTdHJpbmcgcm9vbUlkLCBib29sZWFuIGNvbW1hbmRMaW5lUnVuLCBib29s
ZWFuIGxvb3BiYWNrLAotICAgICAgYm9vbGVhbiB1c2VWYWx1ZXNGcm9tSW50ZW50LCBpbnQgcnVu
VGltZU1zKSB7Ci0gICAgdGhpcy5jb21tYW5kTGluZVJ1biA9IGNvbW1hbmRMaW5lUnVuOwotCi0g
ICAgLy8gcm9vbUlkIGlzIHJhbmRvbSBmb3IgbG9vcGJhY2suCi0gICAgaWYgKGxvb3BiYWNrKSB7
Ci0gICAgICByb29tSWQgPSBJbnRlZ2VyLnRvU3RyaW5nKChuZXcgUmFuZG9tKCkpLm5leHRJbnQo
MTAwMDAwMDAwKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIHJvb21VcmwgPSBzaGFyZWRQcmVmLmdl
dFN0cmluZygKLSAgICAgICAga2V5cHJlZlJvb21TZXJ2ZXJVcmwsIGdldFN0cmluZyhSLnN0cmlu
Zy5wcmVmX3Jvb21fc2VydmVyX3VybF9kZWZhdWx0KSk7Ci0KLSAgICAvLyBWaWRlbyBjYWxsIGVu
YWJsZWQgZmxhZy4KLSAgICBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQgPSBzaGFyZWRQcmVmR2V0
Qm9vbGVhbihSLnN0cmluZy5wcmVmX3ZpZGVvY2FsbF9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0
eS5FWFRSQV9WSURFT19DQUxMLCBSLnN0cmluZy5wcmVmX3ZpZGVvY2FsbF9kZWZhdWx0LCB1c2VW
YWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIFVzZSBzY3JlZW5jYXB0dXJlIG9wdGlvbi4KLSAg
ICBib29sZWFuIHVzZVNjcmVlbmNhcHR1cmUgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmlu
Zy5wcmVmX3NjcmVlbmNhcHR1cmVfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfU0NS
RUVOQ0FQVFVSRSwgUi5zdHJpbmcucHJlZl9zY3JlZW5jYXB0dXJlX2RlZmF1bHQsIHVzZVZhbHVl
c0Zyb21JbnRlbnQpOwotCi0gICAgLy8gVXNlIENhbWVyYTIgb3B0aW9uLgotICAgIGJvb2xlYW4g
dXNlQ2FtZXJhMiA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfY2FtZXJhMl9r
ZXksIENhbGxBY3Rpdml0eS5FWFRSQV9DQU1FUkEyLAotICAgICAgICBSLnN0cmluZy5wcmVmX2Nh
bWVyYTJfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBHZXQgZGVmYXVs
dCBjb2RlY3MuCi0gICAgU3RyaW5nIHZpZGVvQ29kZWMgPSBzaGFyZWRQcmVmR2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfdmlkZW9jb2RlY19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9W
SURFT0NPREVDLCBSLnN0cmluZy5wcmVmX3ZpZGVvY29kZWNfZGVmYXVsdCwgdXNlVmFsdWVzRnJv
bUludGVudCk7Ci0gICAgU3RyaW5nIGF1ZGlvQ29kZWMgPSBzaGFyZWRQcmVmR2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfYXVkaW9jb2RlY19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9B
VURJT0NPREVDLCBSLnN0cmluZy5wcmVmX2F1ZGlvY29kZWNfZGVmYXVsdCwgdXNlVmFsdWVzRnJv
bUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBIVyBjb2RlYyBmbGFnLgotICAgIGJvb2xlYW4gaHdD
b2RlYyA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfaHdjb2RlY19rZXksCi0g
ICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9IV0NPREVDX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZf
aHdjb2RlY19kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIENh
cHR1cmUgdG8gdGV4dHVyZS4KLSAgICBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUgPSBzaGFyZWRQ
cmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2NhcHR1cmV0b3RleHR1cmVfa2V5LAotICAgICAg
ICBDYWxsQWN0aXZpdHkuRVhUUkFfQ0FQVFVSRVRPVEVYVFVSRV9FTkFCTEVELCBSLnN0cmluZy5w
cmVmX2NhcHR1cmV0b3RleHR1cmVfZGVmYXVsdCwKLSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVu
dCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxlIEF1ZGlvIFByb2Nlc3NpbmcgZmxhZy4KLSAgICBi
b29sZWFuIG5vQXVkaW9Qcm9jZXNzaW5nID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcu
cHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9O
T0FVRElPUFJPQ0VTU0lOR19FTkFCTEVELCBSLnN0cmluZy5wcmVmX25vYXVkaW9wcm9jZXNzaW5n
X2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sg
RGlzYWJsZSBBdWRpbyBQcm9jZXNzaW5nIGZsYWcuCi0gICAgYm9vbGVhbiBhZWNEdW1wID0gc2hh
cmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9hZWNkdW1wX2tleSwKLSAgICAgICAgQ2Fs
bEFjdGl2aXR5LkVYVFJBX0FFQ0RVTVBfRU5BQkxFRCwgUi5zdHJpbmcucHJlZl9hZWNkdW1wX2Rl
ZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgT3BlblNMIEVTIGVu
YWJsZWQgZmxhZy4KLSAgICBib29sZWFuIHVzZU9wZW5TTEVTID0gc2hhcmVkUHJlZkdldEJvb2xl
YW4oUi5zdHJpbmcucHJlZl9vcGVuc2xlc19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRS
QV9PUEVOU0xFU19FTkFCTEVELCBSLnN0cmluZy5wcmVmX29wZW5zbGVzX2RlZmF1bHQsIHVzZVZh
bHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgRGlzYWJsZSBidWlsdC1pbiBBRUMgZmxh
Zy4KLSAgICBib29sZWFuIGRpc2FibGVCdWlsdEluQUVDID0gc2hhcmVkUHJlZkdldEJvb2xlYW4o
Ui5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FlY19rZXksCi0gICAgICAgIENhbGxBY3Rp
dml0eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FFQywgUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1
aWx0X2luX2FlY19kZWZhdWx0LAotICAgICAgICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAg
IC8vIENoZWNrIERpc2FibGUgYnVpbHQtaW4gQUdDIGZsYWcuCi0gICAgYm9vbGVhbiBkaXNhYmxl
QnVpbHRJbkFHQyA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9i
dWlsdF9pbl9hZ2Nfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlM
VF9JTl9BR0MsIFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2NfZGVmYXVsdCwKLSAg
ICAgICAgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxlIGJ1aWx0
LWluIE5TIGZsYWcuCi0gICAgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbk5TID0gc2hhcmVkUHJlZkdl
dEJvb2xlYW4oUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2tleSwKLSAgICAgICAg
Q2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fTlMsIFIuc3RyaW5nLnByZWZfZGlz
YWJsZV9idWlsdF9pbl9uc19kZWZhdWx0LAotICAgICAgICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsK
LQotICAgIC8vIENoZWNrIEVuYWJsZSBsZXZlbCBjb250cm9sLgotICAgIGJvb2xlYW4gZW5hYmxl
TGV2ZWxDb250cm9sID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9lbmFibGVf
bGV2ZWxfY29udHJvbF9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9FTkFCTEVfTEVW
RUxfQ09OVFJPTCwgUi5zdHJpbmcucHJlZl9lbmFibGVfbGV2ZWxfY29udHJvbF9rZXksCi0gICAg
ICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gR2V0IHZpZGVvIHJlc29sdXRpb24g
ZnJvbSBzZXR0aW5ncy4KLSAgICBpbnQgdmlkZW9XaWR0aCA9IDA7Ci0gICAgaW50IHZpZGVvSGVp
Z2h0ID0gMDsKLSAgICBpZiAodXNlVmFsdWVzRnJvbUludGVudCkgewotICAgICAgdmlkZW9XaWR0
aCA9IGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19XSURU
SCwgMCk7Ci0gICAgICB2aWRlb0hlaWdodCA9IGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxB
Y3Rpdml0eS5FWFRSQV9WSURFT19IRUlHSFQsIDApOwotICAgIH0KLSAgICBpZiAodmlkZW9XaWR0
aCA9PSAwICYmIHZpZGVvSGVpZ2h0ID09IDApIHsKLSAgICAgIFN0cmluZyByZXNvbHV0aW9uID0K
LSAgICAgICAgICBzaGFyZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmUmVzb2x1dGlvbiwgZ2V0U3Ry
aW5nKFIuc3RyaW5nLnByZWZfcmVzb2x1dGlvbl9kZWZhdWx0KSk7Ci0gICAgICBTdHJpbmdbXSBk
aW1lbnNpb25zID0gcmVzb2x1dGlvbi5zcGxpdCgiWyB4XSsiKTsKLSAgICAgIGlmIChkaW1lbnNp
b25zLmxlbmd0aCA9PSAyKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgdmlkZW9XaWR0aCA9
IEludGVnZXIucGFyc2VJbnQoZGltZW5zaW9uc1swXSk7Ci0gICAgICAgICAgdmlkZW9IZWlnaHQg
PSBJbnRlZ2VyLnBhcnNlSW50KGRpbWVuc2lvbnNbMV0pOwotICAgICAgICB9IGNhdGNoIChOdW1i
ZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgIHZpZGVvV2lkdGggPSAwOwotICAgICAg
ICAgIHZpZGVvSGVpZ2h0ID0gMDsKLSAgICAgICAgICBMb2cuZShUQUcsICJXcm9uZyB2aWRlbyBy
ZXNvbHV0aW9uIHNldHRpbmc6ICIgKyByZXNvbHV0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLQotICAgIC8vIEdldCBjYW1lcmEgZnBzIGZyb20gc2V0dGluZ3MuCi0gICAgaW50IGNh
bWVyYUZwcyA9IDA7Ci0gICAgaWYgKHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsKLSAgICAgIGNhbWVy
YUZwcyA9IGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19G
UFMsIDApOwotICAgIH0KLSAgICBpZiAoY2FtZXJhRnBzID09IDApIHsKLSAgICAgIFN0cmluZyBm
cHMgPSBzaGFyZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmRnBzLCBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9mcHNfZGVmYXVsdCkpOwotICAgICAgU3RyaW5nW10gZnBzVmFsdWVzID0gZnBzLnNwbGl0
KCJbIHhdKyIpOwotICAgICAgaWYgKGZwc1ZhbHVlcy5sZW5ndGggPT0gMikgewotICAgICAgICB0
cnkgewotICAgICAgICAgIGNhbWVyYUZwcyA9IEludGVnZXIucGFyc2VJbnQoZnBzVmFsdWVzWzBd
KTsKLSAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
ICBjYW1lcmFGcHMgPSAwOwotICAgICAgICAgIExvZy5lKFRBRywgIldyb25nIGNhbWVyYSBmcHMg
c2V0dGluZzogIiArIGZwcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBD
aGVjayBjYXB0dXJlIHF1YWxpdHkgc2xpZGVyIGZsYWcuCi0gICAgYm9vbGVhbiBjYXB0dXJlUXVh
bGl0eVNsaWRlciA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfY2FwdHVyZXF1
YWxpdHlzbGlkZXJfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FQVFVS
RVFVQUxJVFlTTElERVJfRU5BQkxFRCwKLSAgICAgICAgUi5zdHJpbmcucHJlZl9jYXB0dXJlcXVh
bGl0eXNsaWRlcl9kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIEdldCB2
aWRlbyBhbmQgYXVkaW8gc3RhcnQgYml0cmF0ZS4KLSAgICBpbnQgdmlkZW9TdGFydEJpdHJhdGUg
PSAwOwotICAgIGlmICh1c2VWYWx1ZXNGcm9tSW50ZW50KSB7Ci0gICAgICB2aWRlb1N0YXJ0Qml0
cmF0ZSA9IGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19C
SVRSQVRFLCAwKTsKLSAgICB9Ci0gICAgaWYgKHZpZGVvU3RhcnRCaXRyYXRlID09IDApIHsKLSAg
ICAgIFN0cmluZyBiaXRyYXRlVHlwZURlZmF1bHQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9t
YXh2aWRlb2JpdHJhdGVfZGVmYXVsdCk7Ci0gICAgICBTdHJpbmcgYml0cmF0ZVR5cGUgPSBzaGFy
ZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmVmlkZW9CaXRyYXRlVHlwZSwgYml0cmF0ZVR5cGVEZWZh
dWx0KTsKLSAgICAgIGlmICghYml0cmF0ZVR5cGUuZXF1YWxzKGJpdHJhdGVUeXBlRGVmYXVsdCkp
IHsKLSAgICAgICAgU3RyaW5nIGJpdHJhdGVWYWx1ZSA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKAot
ICAgICAgICAgICAga2V5cHJlZlZpZGVvQml0cmF0ZVZhbHVlLCBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9kZWZhdWx0KSk7Ci0gICAgICAgIHZpZGVvU3RhcnRC
aXRyYXRlID0gSW50ZWdlci5wYXJzZUludChiaXRyYXRlVmFsdWUpOwotICAgICAgfQotICAgIH0K
LQotICAgIGludCBhdWRpb1N0YXJ0Qml0cmF0ZSA9IDA7Ci0gICAgaWYgKHVzZVZhbHVlc0Zyb21J
bnRlbnQpIHsKLSAgICAgIGF1ZGlvU3RhcnRCaXRyYXRlID0gZ2V0SW50ZW50KCkuZ2V0SW50RXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0FVRElPX0JJVFJBVEUsIDApOwotICAgIH0KLSAgICBpZiAo
YXVkaW9TdGFydEJpdHJhdGUgPT0gMCkgewotICAgICAgU3RyaW5nIGJpdHJhdGVUeXBlRGVmYXVs
dCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2RlZmF1bHQpOwot
ICAgICAgU3RyaW5nIGJpdHJhdGVUeXBlID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZkF1
ZGlvQml0cmF0ZVR5cGUsIGJpdHJhdGVUeXBlRGVmYXVsdCk7Ci0gICAgICBpZiAoIWJpdHJhdGVU
eXBlLmVxdWFscyhiaXRyYXRlVHlwZURlZmF1bHQpKSB7Ci0gICAgICAgIFN0cmluZyBiaXRyYXRl
VmFsdWUgPSBzaGFyZWRQcmVmLmdldFN0cmluZygKLSAgICAgICAgICAgIGtleXByZWZBdWRpb0Jp
dHJhdGVWYWx1ZSwgZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1
ZV9kZWZhdWx0KSk7Ci0gICAgICAgIGF1ZGlvU3RhcnRCaXRyYXRlID0gSW50ZWdlci5wYXJzZUlu
dChiaXRyYXRlVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIHN0YXRpc3Rp
Y3MgZGlzcGxheSBvcHRpb24uCi0gICAgYm9vbGVhbiBkaXNwbGF5SHVkID0gc2hhcmVkUHJlZkdl
dEJvb2xlYW4oUi5zdHJpbmcucHJlZl9kaXNwbGF5aHVkX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2
aXR5LkVYVFJBX0RJU1BMQVlfSFVELCBSLnN0cmluZy5wcmVmX2Rpc3BsYXlodWRfZGVmYXVsdCwg
dXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICBib29sZWFuIHRyYWNpbmcgPSBzaGFyZWRQcmVm
R2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX3RyYWNpbmdfa2V5LCBDYWxsQWN0aXZpdHkuRVhUUkFf
VFJBQ0lORywKLSAgICAgICAgUi5zdHJpbmcucHJlZl90cmFjaW5nX2RlZmF1bHQsIHVzZVZhbHVl
c0Zyb21JbnRlbnQpOwotCi0gICAgLy8gU3RhcnQgQXBwUlRDTW9iaWxlIGFjdGl2aXR5LgotICAg
IExvZy5kKFRBRywgIkNvbm5lY3RpbmcgdG8gcm9vbSAiICsgcm9vbUlkICsgIiBhdCBVUkwgIiAr
IHJvb21VcmwpOwotICAgIGlmICh2YWxpZGF0ZVVybChyb29tVXJsKSkgewotICAgICAgVXJpIHVy
aSA9IFVyaS5wYXJzZShyb29tVXJsKTsKLSAgICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50
KHRoaXMsIENhbGxBY3Rpdml0eS5jbGFzcyk7Ci0gICAgICBpbnRlbnQuc2V0RGF0YSh1cmkpOwot
ICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9ST09NSUQsIHJvb21JZCk7
Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0xPT1BCQUNLLCBsb29w
YmFjayk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NB
TEwsIHZpZGVvQ2FsbEVuYWJsZWQpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0
eS5FWFRSQV9TQ1JFRU5DQVBUVVJFLCB1c2VTY3JlZW5jYXB0dXJlKTsKLSAgICAgIGludGVudC5w
dXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfQ0FNRVJBMiwgdXNlQ2FtZXJhMik7Ci0gICAgICBp
bnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX1dJRFRILCB2aWRlb1dpZHRo
KTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fSEVJR0hU
LCB2aWRlb0hlaWdodCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJB
X1ZJREVPX0ZQUywgY2FtZXJhRnBzKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZp
dHkuRVhUUkFfVklERU9fQ0FQVFVSRVFVQUxJVFlTTElERVJfRU5BQkxFRCwgY2FwdHVyZVF1YWxp
dHlTbGlkZXIpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURF
T19CSVRSQVRFLCB2aWRlb1N0YXJ0Qml0cmF0ZSk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2Fs
bEFjdGl2aXR5LkVYVFJBX1ZJREVPQ09ERUMsIHZpZGVvQ29kZWMpOwotICAgICAgaW50ZW50LnB1
dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9IV0NPREVDX0VOQUJMRUQsIGh3Q29kZWMpOwotICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9DQVBUVVJFVE9URVhUVVJFX0VO
QUJMRUQsIGNhcHR1cmVUb1RleHR1cmUpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9OT0FVRElPUFJPQ0VTU0lOR19FTkFCTEVELCBub0F1ZGlvUHJvY2Vzc2luZyk7
Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0FFQ0RVTVBfRU5BQkxF
RCwgYWVjRHVtcCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX09Q
RU5TTEVTX0VOQUJMRUQsIHVzZU9wZW5TTEVTKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxs
QWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BRUMsIGRpc2FibGVCdWlsdEluQUVDKTsK
LSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9J
Tl9BR0MsIGRpc2FibGVCdWlsdEluQUdDKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0
aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9OUywgZGlzYWJsZUJ1aWx0SW5OUyk7Ci0gICAg
ICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0VOQUJMRV9MRVZFTF9DT05UUk9M
LCBlbmFibGVMZXZlbENvbnRyb2wpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0
eS5FWFRSQV9BVURJT19CSVRSQVRFLCBhdWRpb1N0YXJ0Qml0cmF0ZSk7Ci0gICAgICBpbnRlbnQu
cHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0FVRElPQ09ERUMsIGF1ZGlvQ29kZWMpOwotICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9ESVNQTEFZX0hVRCwgZGlzcGxh
eUh1ZCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1RSQUNJTkcs
IHRyYWNpbmcpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9DTURM
SU5FLCBjb21tYW5kTGluZVJ1bik7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5
LkVYVFJBX1JVTlRJTUUsIHJ1blRpbWVNcyk7Ci0KLSAgICAgIGlmICh1c2VWYWx1ZXNGcm9tSW50
ZW50KSB7Ci0gICAgICAgIGlmIChnZXRJbnRlbnQoKS5oYXNFeHRyYShDYWxsQWN0aXZpdHkuRVhU
UkFfVklERU9fRklMRV9BU19DQU1FUkEpKSB7Ci0gICAgICAgICAgU3RyaW5nIHZpZGVvRmlsZUFz
Q2FtZXJhID0KLSAgICAgICAgICAgICAgZ2V0SW50ZW50KCkuZ2V0U3RyaW5nRXh0cmEoQ2FsbEFj
dGl2aXR5LkVYVFJBX1ZJREVPX0ZJTEVfQVNfQ0FNRVJBKTsKLSAgICAgICAgICBpbnRlbnQucHV0
RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0ZJTEVfQVNfQ0FNRVJBLCB2aWRlb0ZpbGVB
c0NhbWVyYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ2V0SW50ZW50KCkuaGFzRXh0cmEo
Q2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUpKSB7Ci0gICAgICAg
ICAgU3RyaW5nIHNhdmVSZW1vdGVWaWRlb1RvRmlsZSA9Ci0gICAgICAgICAgICAgIGdldEludGVu
dCgpLmdldFN0cmluZ0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19U
T19GSUxFKTsKLSAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NB
VkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUsIHNhdmVSZW1vdGVWaWRlb1RvRmlsZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoZ2V0SW50ZW50KCkuaGFzRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJB
X1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfV0lEVEgpKSB7Ci0gICAgICAgICAgaW50IHZpZGVv
T3V0V2lkdGggPQotICAgICAgICAgICAgICBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0
aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9XSURUSCwgMCk7Ci0gICAgICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19U
T19GSUxFX1dJRFRILCB2aWRlb091dFdpZHRoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChn
ZXRJbnRlbnQoKS5oYXNFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9f
VE9fRklMRV9IRUlHSFQpKSB7Ci0gICAgICAgICAgaW50IHZpZGVvT3V0SGVpZ2h0ID0KLSAgICAg
ICAgICAgICAgZ2V0SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVf
UkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hULCAwKTsKLSAgICAgICAgICBpbnRlbnQucHV0RXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hULCB2
aWRlb091dEhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgc3RhcnRBY3Rpdml0
eUZvclJlc3VsdChpbnRlbnQsIENPTk5FQ1RJT05fUkVRVUVTVCk7Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlVXJsKFN0cmluZyB1cmwpIHsKLSAgICBpZiAoVVJMVXRp
bC5pc0h0dHBzVXJsKHVybCkgfHwgVVJMVXRpbC5pc0h0dHBVcmwodXJsKSkgewotICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIodGhpcykKLSAg
ICAgICAgLnNldFRpdGxlKGdldFRleHQoUi5zdHJpbmcuaW52YWxpZF91cmxfdGl0bGUpKQotICAg
ICAgICAuc2V0TWVzc2FnZShnZXRTdHJpbmcoUi5zdHJpbmcuaW52YWxpZF91cmxfdGV4dCwgdXJs
KSkKLSAgICAgICAgLnNldENhbmNlbGFibGUoZmFsc2UpCi0gICAgICAgIC5zZXROZXV0cmFsQnV0
dG9uKFIuc3RyaW5nLm9rLAotICAgICAgICAgICAgbmV3IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNr
TGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50
ZXJmYWNlIGRpYWxvZywgaW50IGlkKSB7Ci0gICAgICAgICAgICAgICAgZGlhbG9nLmNhbmNlbCgp
OwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KQotICAgICAgICAuY3JlYXRlKCkKLSAg
ICAgICAgLnNob3coKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFs
IEFkYXB0ZXJWaWV3Lk9uSXRlbUNsaWNrTGlzdGVuZXIgcm9vbUxpc3RDbGlja0xpc3RlbmVyID0K
LSAgICAgIG5ldyBBZGFwdGVyVmlldy5Pbkl0ZW1DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgb25JdGVtQ2xpY2soQWRhcHRlclZpZXc8Pz4g
YWRhcHRlclZpZXcsIFZpZXcgdmlldywgaW50IGksIGxvbmcgbCkgewotICAgICAgICAgIFN0cmlu
ZyByb29tSWQgPSAoKFRleHRWaWV3KSB2aWV3KS5nZXRUZXh0KCkudG9TdHJpbmcoKTsKLSAgICAg
ICAgICBjb25uZWN0VG9Sb29tKHJvb21JZCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7Ci0gICAg
ICAgIH0KLSAgICAgIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBPbkNsaWNrTGlzdGVuZXIgYWRkRmF2
b3JpdGVMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAgICAgIFN0cmluZyBuZXdSb29t
ID0gcm9vbUVkaXRUZXh0LmdldFRleHQoKS50b1N0cmluZygpOwotICAgICAgaWYgKG5ld1Jvb20u
bGVuZ3RoKCkgPiAwICYmICFyb29tTGlzdC5jb250YWlucyhuZXdSb29tKSkgewotICAgICAgICBh
ZGFwdGVyLmFkZChuZXdSb29tKTsKLSAgICAgICAgYWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdl
ZCgpOwotICAgICAgfQotICAgIH0KLSAgfTsKLQotICBwcml2YXRlIGZpbmFsIE9uQ2xpY2tMaXN0
ZW5lciBjb25uZWN0TGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICBjb25uZWN0
VG9Sb29tKHJvb21FZGl0VGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKSwgZmFsc2UsIGZhbHNlLCBm
YWxzZSwgMCk7Ci0gICAgfQotICB9OwotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBw
cnRjL0NwdU1vbml0b3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvQ3B1TW9uaXRvci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvQ3B1TW9uaXRvci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTEwICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwot
Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50
LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFu
ZHJvaWQub3MuQmF0dGVyeU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsK
LWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRl
cjsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlv
LkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0
aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwotaW1wb3J0IGphdmEudXRpbC5j
b25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVs
ZWRFeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7
Ci0KLS8qKgotICogU2ltcGxlIENQVSBtb25pdG9yLiAgVGhlIGNhbGxlciBjcmVhdGVzIGEgQ3B1
TW9uaXRvciBvYmplY3Qgd2hpY2ggY2FuIHRoZW4KLSAqIGJlIHVzZWQgdmlhIHNhbXBsZUNwdVV0
aWxpemF0aW9uKCkgdG8gY29sbGVjdCB0aGUgcGVyY2VudHVhbCB1c2Ugb2YgdGhlCi0gKiBjdW11
bGF0aXZlIENQVSBjYXBhY2l0eSBmb3IgYWxsIENQVXMgcnVubmluZyBhdCB0aGVpciBub21pbmFs
IGZyZXF1ZW5jeS4gIDMKLSAqIHZhbHVlcyBhcmUgZ2VuZXJhdGVkOiAoMSkgZ2V0Q3B1Q3VycmVu
dCgpIHJldHVybnMgdGhlIHVzZSBzaW5jZSB0aGUgbGFzdAotICogc2FtcGxlQ3B1VXRpbGl6YXRp
b24oKSwgKDIpIGdldENwdUF2ZzMoKSByZXR1cm5zIHRoZSB1c2Ugc2luY2UgMyBwcmlvcgotICog
Y2FsbHMsIGFuZCAoMykgZ2V0Q3B1QXZnQWxsKCkgcmV0dXJucyB0aGUgdXNlIG92ZXIgYWxsIFNB
TVBMRV9TQVZFX05VTUJFUgotICogY2FsbHMuCi0gKgotICogPHA+Q1BVcyBpbiBBbmRyb2lkIGFy
ZSBvZnRlbiAib2ZmbGluZSIsIGFuZCB3aGlsZSB0aGlzIG9mIGNvdXJzZSBtZWFucyAwIEh6Ci0g
KiBhcyBjdXJyZW50IGZyZXF1ZW5jeSwgaW4gdGhpcyBzdGF0ZSB3ZSBjYW5ub3QgZXZlbiBnZXQg
dGhlaXIgbm9taW5hbAotICogZnJlcXVlbmN5LiAgV2UgdGhlcmVmb3JlIHRyZWFkIGNhcmVmdWxs
eSwgYW5kIGFsbG93IGFueSBDUFUgdG8gYmUgbWlzc2luZy4KLSAqIE1pc3NpbmcgQ1BVcyBhcmUg
YXNzdW1lZCB0byBoYXZlIHRoZSBzYW1lIG5vbWluYWwgZnJlcXVlbmN5IGFzIGFueSBjbG9zZQot
ICogbG93ZXItbnVtYmVyZWQgQ1BVLCBidXQgYXMgc29vbiBhcyBpdCBpcyBvbmxpbmUsIHdlJ2xs
IGdldCB0aGVpciBwcm9wZXIKLSAqIGZyZXF1ZW5jeSBhbmQgcmVtZW1iZXIgaXQuICAoU2luY2Ug
Q1BVIDAgaW4gcHJhY3RpY2UgYWx3YXlzIHNlZW0gdG8gYmUKLSAqIG9ubGluZSwgdGhpcyB1bmlk
aXJlY3Rpb25hbCBmcmVxdWVuY3kgaW5oZXJpdGFuY2Ugc2hvdWxkIGJlIG5vIHByb2JsZW0gaW4K
LSAqIHByYWN0aWNlLikKLSAqCi0gKiA8cD5DYXZlYXRzOgotICogICBvIE5vIHByb3Zpc2lvbiBt
YWRlIGZvciB6YW55ICJ0dXJibyIgbW9kZSwgY29tbW9uIGluIHRoZSB4ODYgd29ybGQuCi0gKiAg
IG8gTm8gcHJvdmlzaW9uIG1hZGUgZm9yIEFSTSBiaWcuTElUVExFOyBpZiBDUFUgbiBjYW4gc3dp
dGNoIGJlaGluZCBvdXIKLSAqICAgICBiYWNrLCB3ZSBtaWdodCBnZXQgaW5jb3JyZWN0IGVzdGlt
YXRlcy4KLSAqICAgbyBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZS4gIFRvIGNhbGwgYXN5bmNocm9u
b3VzbHksIGNyZWF0ZSBkaWZmZXJlbnQKLSAqICAgICBDcHVNb25pdG9yIG9iamVjdHMuCi0gKgot
ICogPHA+SWYgd2UgY2FuIGdhdGhlciBlbm91Z2ggaW5mbyB0byBnZW5lcmF0ZSBhIHNlbnNpYmxl
IHJlc3VsdCwKLSAqIHNhbXBsZUNwdVV0aWxpemF0aW9uIHJldHVybnMgdHJ1ZS4gIEl0IGlzIGRl
c2lnbmVkIHRvIG5ldmVyIHRocm93IGFuCi0gKiBleGNlcHRpb24uCi0gKgotICogPHA+c2FtcGxl
Q3B1VXRpbGl6YXRpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgdG9vIG9mdGVuIGluIGl0cyBwcmVz
ZW50IGZvcm0sCi0gKiBzaW5jZSB0aGVuIGRlbHRhcyB3b3VsZCBiZSBzbWFsbCBhbmQgdGhlIHBl
cmNlbnQgdmFsdWVzIHdvdWxkIGZsdWN0dWF0ZSBhbmQKLSAqIGJlIHVucmVhZGFibGUuIElmIGl0
IGlzIGRlc2lyYWJsZSB0byBjYWxsIGl0IG1vcmUgb2Z0ZW4gdGhhbiBzYXkgb25jZSBwZXIKLSAq
IHNlY29uZCwgb25lIHdvdWxkIG5lZWQgdG8gaW5jcmVhc2UgU0FNUExFX1NBVkVfTlVNQkVSIGFu
ZCBwcm9iYWJseSB1c2UKLSAqIFF1ZXVlPEludGVnZXI+IHRvIGF2b2lkIGNvcHlpbmcgb3Zlcmhl
YWQuCi0gKgotICogPHA+S25vd24gcHJvYmxlbXM6Ci0gKiAgIDEuIE5leHVzIDcgZGV2aWNlcyBy
dW5uaW5nIEtpdGthdCBoYXZlIGEga2VybmVsIHdoaWNoIG9mdGVuIG91dHB1dCBhbgotICogICAg
ICBpbmNvcnJlY3QgJ2lkbGUnIGZpZWxkIGluIC9wcm9jL3N0YXQuICBUaGUgdmFsdWUgaXMgY2xv
c2UgdG8gdHdpY2UgdGhlCi0gKiAgICAgIGNvcnJlY3QgdmFsdWUsIGFuZCB0aGVuIHJldHVybnMg
dG8gYmFjayB0byBjb3JyZWN0IHJlYWRpbmcuICBCb3RoIHdoZW4KLSAqICAgICAganVtcGluZyB1
cCBhbmQgYmFjayBkb3duIHdlIG1pZ2h0IGNyZWF0ZSBmYXVsdHkgQ1BVIGxvYWQgcmVhZGluZ3Mu
Ci0gKi8KLQotY2xhc3MgQ3B1TW9uaXRvciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBUQUcgPSAiQ3B1TW9uaXRvciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNT1ZJTkdf
QVZFUkFHRV9TQU1QTEVTID0gNTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ1BVX1NU
QVRfU0FNUExFX1BFUklPRF9NUyA9IDIwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBD
UFVfU1RBVF9MT0dfUEVSSU9EX01TID0gNjAwMDsKLQotICBwcml2YXRlIGZpbmFsIENvbnRleHQg
YXBwQ29udGV4dDsKLSAgLy8gVXNlciBDUFUgdXNhZ2UgYXQgY3VycmVudCBmcmVxdWVuY3kuCi0g
IHByaXZhdGUgZmluYWwgTW92aW5nQXZlcmFnZSB1c2VyQ3B1VXNhZ2U7Ci0gIC8vIFN5c3RlbSBD
UFUgdXNhZ2UgYXQgY3VycmVudCBmcmVxdWVuY3kuCi0gIHByaXZhdGUgZmluYWwgTW92aW5nQXZl
cmFnZSBzeXN0ZW1DcHVVc2FnZTsKLSAgLy8gVG90YWwgQ1BVIHVzYWdlIHJlbGF0aXZlIHRvIG1h
eGltdW0gZnJlcXVlbmN5LgotICBwcml2YXRlIGZpbmFsIE1vdmluZ0F2ZXJhZ2UgdG90YWxDcHVV
c2FnZTsKLSAgLy8gQ1BVIGZyZXF1ZW5jeSBpbiBwZXJjZW50YWdlIGZyb20gbWF4aW11bS4KLSAg
cHJpdmF0ZSBmaW5hbCBNb3ZpbmdBdmVyYWdlIGZyZXF1ZW5jeVNjYWxlOwotCi0gIHByaXZhdGUg
U2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yOwotICBwcml2YXRlIGxvbmcgbGFzdFN0
YXRMb2dUaW1lTXM7Ci0gIHByaXZhdGUgbG9uZ1tdIGNwdUZyZXFNYXg7Ci0gIHByaXZhdGUgaW50
IGNwdXNQcmVzZW50OwotICBwcml2YXRlIGludCBhY3R1YWxDcHVzUHJlc2VudDsKLSAgcHJpdmF0
ZSBib29sZWFuIGluaXRpYWxpemVkOwotICBwcml2YXRlIGJvb2xlYW4gY3B1T3ZlcnVzZTsKLSAg
cHJpdmF0ZSBTdHJpbmdbXSBtYXhQYXRoOwotICBwcml2YXRlIFN0cmluZ1tdIGN1clBhdGg7Ci0g
IHByaXZhdGUgZG91YmxlW10gY3VyRnJlcVNjYWxlczsKLSAgcHJpdmF0ZSBQcm9jU3RhdCBsYXN0
UHJvY1N0YXQ7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgUHJvY1N0YXQgewotICAgIGZpbmFs
IGxvbmcgdXNlclRpbWU7Ci0gICAgZmluYWwgbG9uZyBzeXN0ZW1UaW1lOwotICAgIGZpbmFsIGxv
bmcgaWRsZVRpbWU7Ci0KLSAgICBQcm9jU3RhdChsb25nIHVzZXJUaW1lLCBsb25nIHN5c3RlbVRp
bWUsIGxvbmcgaWRsZVRpbWUpIHsKLSAgICAgIHRoaXMudXNlclRpbWUgPSB1c2VyVGltZTsKLSAg
ICAgIHRoaXMuc3lzdGVtVGltZSA9IHN5c3RlbVRpbWU7Ci0gICAgICB0aGlzLmlkbGVUaW1lID0g
aWRsZVRpbWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW92aW5nQXZl
cmFnZSB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBpbnQgc2l6ZTsKLSAgICBwcml2YXRlIGRvdWJsZSBz
dW07Ci0gICAgcHJpdmF0ZSBkb3VibGUgY3VycmVudFZhbHVlOwotICAgIHByaXZhdGUgZG91Ymxl
IGNpcmNCdWZmZXJbXTsKLSAgICBwcml2YXRlIGludCBjaXJjQnVmZmVySW5kZXg7Ci0KLSAgICBw
dWJsaWMgTW92aW5nQXZlcmFnZShpbnQgc2l6ZSkgewotICAgICAgaWYgKHNpemUgPD0gMCkgewot
ICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIlNpemUgdmFsdWUgaW4gTW92aW5nQXZl
cmFnZSBjdG9yIHNob3VsZCBiZSBwb3NpdGl2ZS4iKTsKLSAgICAgIH0KLSAgICAgIHRoaXMuc2l6
ZSA9IHNpemU7Ci0gICAgICBjaXJjQnVmZmVyID0gbmV3IGRvdWJsZVtzaXplXTsKLSAgICB9Ci0K
LSAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsKLSAgICAgIEFycmF5cy5maWxsKGNpcmNCdWZmZXIs
IDApOwotICAgICAgY2lyY0J1ZmZlckluZGV4ID0gMDsKLSAgICAgIHN1bSA9IDA7Ci0gICAgICBj
dXJyZW50VmFsdWUgPSAwOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGFkZFZhbHVlKGRvdWJs
ZSB2YWx1ZSkgewotICAgICAgc3VtIC09IGNpcmNCdWZmZXJbY2lyY0J1ZmZlckluZGV4XTsKLSAg
ICAgIGNpcmNCdWZmZXJbY2lyY0J1ZmZlckluZGV4KytdID0gdmFsdWU7Ci0gICAgICBjdXJyZW50
VmFsdWUgPSB2YWx1ZTsKLSAgICAgIHN1bSArPSB2YWx1ZTsKLSAgICAgIGlmIChjaXJjQnVmZmVy
SW5kZXggPj0gc2l6ZSkgewotICAgICAgICBjaXJjQnVmZmVySW5kZXggPSAwOwotICAgICAgfQot
ICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUgZ2V0Q3VycmVudCgpIHsKLSAgICAgIHJldHVybiBj
dXJyZW50VmFsdWU7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBnZXRBdmVyYWdlKCkgewot
ICAgICAgcmV0dXJuIHN1bSAvIChkb3VibGUpIHNpemU7Ci0gICAgfQotICB9Ci0KLSAgcHVibGlj
IENwdU1vbml0b3IoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgTG9nLmQoVEFHLCAiQ3B1TW9uaXRv
ciBjdG9yLiIpOwotICAgIGFwcENvbnRleHQgPSBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4
dCgpOwotICAgIHVzZXJDcHVVc2FnZSA9IG5ldyBNb3ZpbmdBdmVyYWdlKE1PVklOR19BVkVSQUdF
X1NBTVBMRVMpOwotICAgIHN5c3RlbUNwdVVzYWdlID0gbmV3IE1vdmluZ0F2ZXJhZ2UoTU9WSU5H
X0FWRVJBR0VfU0FNUExFUyk7Ci0gICAgdG90YWxDcHVVc2FnZSA9IG5ldyBNb3ZpbmdBdmVyYWdl
KE1PVklOR19BVkVSQUdFX1NBTVBMRVMpOwotICAgIGZyZXF1ZW5jeVNjYWxlID0gbmV3IE1vdmlu
Z0F2ZXJhZ2UoTU9WSU5HX0FWRVJBR0VfU0FNUExFUyk7Ci0gICAgbGFzdFN0YXRMb2dUaW1lTXMg
PSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLQotICAgIHNjaGVkdWxlQ3B1VXRpbGl6
YXRpb25UYXNrKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBwYXVzZSgpIHsKLSAgICBpZiAoZXhl
Y3V0b3IgIT0gbnVsbCkgewotICAgICAgTG9nLmQoVEFHLCAicGF1c2UiKTsKLSAgICAgIGV4ZWN1
dG9yLnNodXRkb3duTm93KCk7Ci0gICAgICBleGVjdXRvciA9IG51bGw7Ci0gICAgfQotICB9Ci0K
LSAgcHVibGljIHZvaWQgcmVzdW1lKCkgewotICAgIExvZy5kKFRBRywgInJlc3VtZSIpOwotICAg
IHJlc2V0U3RhdCgpOwotICAgIHNjaGVkdWxlQ3B1VXRpbGl6YXRpb25UYXNrKCk7Ci0gIH0KLQot
ICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoKSB7Ci0gICAgaWYgKGV4ZWN1dG9yICE9
IG51bGwpIHsKLSAgICAgIExvZy5kKFRBRywgInJlc2V0Iik7Ci0gICAgICByZXNldFN0YXQoKTsK
LSAgICAgIGNwdU92ZXJ1c2UgPSBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3luY2hy
b25pemVkIGludCBnZXRDcHVVc2FnZUN1cnJlbnQoKSB7Ci0gICAgcmV0dXJuIGRvdWJsZVRvUGVy
Y2VudCh1c2VyQ3B1VXNhZ2UuZ2V0Q3VycmVudCgpICsgc3lzdGVtQ3B1VXNhZ2UuZ2V0Q3VycmVu
dCgpKTsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGdldENwdVVzYWdlQXZlcmFn
ZSgpIHsKLSAgICByZXR1cm4gZG91YmxlVG9QZXJjZW50KHVzZXJDcHVVc2FnZS5nZXRBdmVyYWdl
KCkgKyBzeXN0ZW1DcHVVc2FnZS5nZXRBdmVyYWdlKCkpOwotICB9Ci0KLSAgcHVibGljIHN5bmNo
cm9uaXplZCBpbnQgZ2V0RnJlcXVlbmN5U2NhbGVBdmVyYWdlKCkgewotICAgIHJldHVybiBkb3Vi
bGVUb1BlcmNlbnQoZnJlcXVlbmN5U2NhbGUuZ2V0QXZlcmFnZSgpKTsKLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBzY2hlZHVsZUNwdVV0aWxpemF0aW9uVGFzaygpIHsKLSAgICBpZiAoZXhlY3V0b3Ig
IT0gbnVsbCkgewotICAgICAgZXhlY3V0b3Iuc2h1dGRvd25Ob3coKTsKLSAgICAgIGV4ZWN1dG9y
ID0gbnVsbDsKLSAgICB9Ci0KLSAgICBleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJl
YWRTY2hlZHVsZWRFeGVjdXRvcigpOwotICAgIGV4ZWN1dG9yLnNjaGVkdWxlQXRGaXhlZFJhdGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGNwdVV0aWxpemF0aW9uVGFzaygpOwotICAgICAgfQotICAgIH0sIDAsIENQ
VV9TVEFUX1NBTVBMRV9QRVJJT0RfTVMsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgY3B1VXRpbGl6YXRpb25UYXNrKCkgewotICAgIGJvb2xlYW4gY3B1TW9u
aXRvckF2YWlsYWJsZSA9IHNhbXBsZUNwdVV0aWxpemF0aW9uKCk7Ci0gICAgaWYgKGNwdU1vbml0
b3JBdmFpbGFibGUKLSAgICAgICAgJiYgU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBs
YXN0U3RhdExvZ1RpbWVNcyA+PSBDUFVfU1RBVF9MT0dfUEVSSU9EX01TKSB7Ci0gICAgICBsYXN0
U3RhdExvZ1RpbWVNcyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgU3Ry
aW5nIHN0YXRTdHJpbmcgPSBnZXRTdGF0U3RyaW5nKCk7Ci0gICAgICBMb2cuZChUQUcsIHN0YXRT
dHJpbmcpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBpbml0KCkgewotICAgIHRyeSB7
Ci0gICAgICBGaWxlUmVhZGVyIGZpbiA9IG5ldyBGaWxlUmVhZGVyKCIvc3lzL2RldmljZXMvc3lz
dGVtL2NwdS9wcmVzZW50Iik7Ci0gICAgICB0cnkgewotICAgICAgICBCdWZmZXJlZFJlYWRlciBy
ZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZmluKTsKLSAgICAgICAgU2Nhbm5lciBzY2FubmVy
ID0gbmV3IFNjYW5uZXIocmVhZGVyKS51c2VEZWxpbWl0ZXIoIlstXG5dIik7Ci0gICAgICAgIHNj
YW5uZXIubmV4dEludCgpOyAvLyBTa2lwIGxlYWRpbmcgbnVtYmVyIDAuCi0gICAgICAgIGNwdXNQ
cmVzZW50ID0gMSArIHNjYW5uZXIubmV4dEludCgpOwotICAgICAgICBzY2FubmVyLmNsb3NlKCk7
Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShUQUcsICJDYW5u
b3QgZG8gQ1BVIHN0YXRzIGR1ZSB0byAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9wcmVzZW50IHBh
cnNpbmcgcHJvYmxlbSIpOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgZmluLmNsb3NlKCk7
Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAg
IExvZy5lKFRBRywgIkNhbm5vdCBkbyBDUFUgc3RhdHMgc2luY2UgL3N5cy9kZXZpY2VzL3N5c3Rl
bS9jcHUvcHJlc2VudCBpcyBtaXNzaW5nIik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkg
ewotICAgICAgTG9nLmUoVEFHLCAiRXJyb3IgY2xvc2luZyBmaWxlIik7Ci0gICAgfQotCi0gICAg
Y3B1RnJlcU1heCA9IG5ldyBsb25nW2NwdXNQcmVzZW50XTsKLSAgICBtYXhQYXRoID0gbmV3IFN0
cmluZ1tjcHVzUHJlc2VudF07Ci0gICAgY3VyUGF0aCA9IG5ldyBTdHJpbmdbY3B1c1ByZXNlbnRd
OwotICAgIGN1ckZyZXFTY2FsZXMgPSBuZXcgZG91YmxlW2NwdXNQcmVzZW50XTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNwdXNQcmVzZW50OyBpKyspIHsKLSAgICAgIGNwdUZyZXFNYXhbaV0g
PSAwOyAvLyBGcmVxdWVuY3kgIm5vdCB5ZXQgZGV0ZXJtaW5lZCIuCi0gICAgICBjdXJGcmVxU2Nh
bGVzW2ldID0gMDsKLSAgICAgIG1heFBhdGhbaV0gPSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUv
Y3B1IiArIGkgKyAiL2NwdWZyZXEvY3B1aW5mb19tYXhfZnJlcSI7Ci0gICAgICBjdXJQYXRoW2ld
ID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSIgKyBpICsgIi9jcHVmcmVxL3NjYWxpbmdf
Y3VyX2ZyZXEiOwotICAgIH0KLQotICAgIGxhc3RQcm9jU3RhdCA9IG5ldyBQcm9jU3RhdCgwLCAw
LCAwKTsKLSAgICByZXNldFN0YXQoKTsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgfQot
Ci0gIHByaXZhdGUgc3luY2hyb25pemVkIHZvaWQgcmVzZXRTdGF0KCkgewotICAgIHVzZXJDcHVV
c2FnZS5yZXNldCgpOwotICAgIHN5c3RlbUNwdVVzYWdlLnJlc2V0KCk7Ci0gICAgdG90YWxDcHVV
c2FnZS5yZXNldCgpOwotICAgIGZyZXF1ZW5jeVNjYWxlLnJlc2V0KCk7Ci0gICAgbGFzdFN0YXRM
b2dUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgfQotCi0gIHByaXZh
dGUgaW50IGdldEJhdHRlcnlMZXZlbCgpIHsKLSAgICAvLyBVc2Ugc3RpY2t5IGJyb2FkY2FzdCB3
aXRoIG51bGwgcmVjZWl2ZXIgdG8gcmVhZCBiYXR0ZXJ5IGxldmVsIG9uY2Ugb25seS4KLSAgICBJ
bnRlbnQgaW50ZW50ID0gYXBwQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKAotICAgICAgICBudWxs
IC8qIHJlY2VpdmVyICovLCBuZXcgSW50ZW50RmlsdGVyKEludGVudC5BQ1RJT05fQkFUVEVSWV9D
SEFOR0VEKSk7Ci0KLSAgICBpbnQgYmF0dGVyeUxldmVsID0gMDsKLSAgICBpbnQgYmF0dGVyeVNj
YWxlID0gaW50ZW50LmdldEludEV4dHJhKEJhdHRlcnlNYW5hZ2VyLkVYVFJBX1NDQUxFLCAxMDAp
OwotICAgIGlmIChiYXR0ZXJ5U2NhbGUgPiAwKSB7Ci0gICAgICBiYXR0ZXJ5TGV2ZWwgPQotICAg
ICAgICAgIChpbnQpICgxMDBmICogaW50ZW50LmdldEludEV4dHJhKEJhdHRlcnlNYW5hZ2VyLkVY
VFJBX0xFVkVMLCAwKSAvIGJhdHRlcnlTY2FsZSk7Ci0gICAgfQotICAgIHJldHVybiBiYXR0ZXJ5
TGV2ZWw7Ci0gIH0KLQotICAvKioKLSAgICogUmUtbWVhc3VyZSBDUFUgdXNlLiAgQ2FsbCB0aGlz
IG1ldGhvZCBhdCBhbiBpbnRlcnZhbCBvZiBhcm91bmQgMS9zLgotICAgKiBUaGlzIG1ldGhvZCBy
ZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gIFRoZSBmaWVsZHMKLSAgICogY3B1Q3VycmVudCwgY3B1
QXZnMywgYW5kIGNwdUF2Z0FsbCBhcmUgdXBkYXRlZCBvbiBzdWNjZXNzLCBhbmQgcmVwcmVzZW50
czoKLSAgICogY3B1Q3VycmVudDogVGhlIENQVSB1c2Ugc2luY2UgdGhlIGxhc3Qgc2FtcGxlQ3B1
VXRpbGl6YXRpb24gY2FsbC4KLSAgICogY3B1QXZnMzogVGhlIGF2ZXJhZ2UgQ1BVIG92ZXIgdGhl
IGxhc3QgMyBjYWxscy4KLSAgICogY3B1QXZnQWxsOiBUaGUgYXZlcmFnZSBDUFUgb3ZlciB0aGUg
bGFzdCBTQU1QTEVfU0FWRV9OVU1CRVIgY2FsbHMuCi0gICAqLwotICBwcml2YXRlIHN5bmNocm9u
aXplZCBib29sZWFuIHNhbXBsZUNwdVV0aWxpemF0aW9uKCkgewotICAgIGxvbmcgbGFzdFNlZW5N
YXhGcmVxID0gMDsKLSAgICBsb25nIGNwdUZyZXFDdXJTdW0gPSAwOwotICAgIGxvbmcgY3B1RnJl
cU1heFN1bSA9IDA7Ci0KLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICBpbml0KCk7Ci0g
ICAgfQotICAgIGlmIChjcHVzUHJlc2VudCA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgYWN0dWFsQ3B1c1ByZXNlbnQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY3B1c1ByZXNlbnQ7IGkrKykgewotICAgICAgLyoKLSAgICAgICAqIEZvciBlYWNoIENQVSwg
YXR0ZW1wdCB0byBmaXJzdCByZWFkIGl0cyBtYXggZnJlcXVlbmN5LCB0aGVuIGl0cwotICAgICAg
ICogY3VycmVudCBmcmVxdWVuY3kuICBPbmNlIGFzIHRoZSBtYXggZnJlcXVlbmN5IGZvciBhIENQ
VSBpcyBmb3VuZCwKLSAgICAgICAqIHNhdmUgaXQgaW4gY3B1RnJlcU1heFtdLgotICAgICAgICov
Ci0KLSAgICAgIGN1ckZyZXFTY2FsZXNbaV0gPSAwOwotICAgICAgaWYgKGNwdUZyZXFNYXhbaV0g
PT0gMCkgewotICAgICAgICAvLyBXZSBoYXZlIG5ldmVyIGZvdW5kIHRoaXMgQ1BVJ3MgbWF4IGZy
ZXF1ZW5jeS4gIEF0dGVtcHQgdG8gcmVhZCBpdC4KLSAgICAgICAgbG9uZyBjcHVmcmVxTWF4ID0g
cmVhZEZyZXFGcm9tRmlsZShtYXhQYXRoW2ldKTsKLSAgICAgICAgaWYgKGNwdWZyZXFNYXggPiAw
KSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiQ29yZSAiICsgaSArICIuIE1heCBmcmVxdWVuY3k6
ICIgKyBjcHVmcmVxTWF4KTsKLSAgICAgICAgICBsYXN0U2Vlbk1heEZyZXEgPSBjcHVmcmVxTWF4
OwotICAgICAgICAgIGNwdUZyZXFNYXhbaV0gPSBjcHVmcmVxTWF4OwotICAgICAgICAgIG1heFBh
dGhbaV0gPSBudWxsOyAvLyBLaWxsIHBhdGggdG8gZnJlZSBpdHMgbWVtb3J5LgotICAgICAgICB9
Ci0gICAgICB9IGVsc2UgewotICAgICAgICBsYXN0U2Vlbk1heEZyZXEgPSBjcHVGcmVxTWF4W2ld
OyAvLyBBIHZhbGlkLCBwcmV2aW91c2x5IHJlYWQgdmFsdWUuCi0gICAgICB9Ci0KLSAgICAgIGxv
bmcgY3B1RnJlcUN1ciA9IHJlYWRGcmVxRnJvbUZpbGUoY3VyUGF0aFtpXSk7Ci0gICAgICBpZiAo
Y3B1RnJlcUN1ciA9PSAwICYmIGxhc3RTZWVuTWF4RnJlcSA9PSAwKSB7Ci0gICAgICAgIC8vIE5v
IGN1cnJlbnQgZnJlcXVlbmN5IGluZm9ybWF0aW9uIGZvciB0aGlzIENQVSBjb3JlIC0gaWdub3Jl
IGl0LgotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIGlmIChjcHVGcmVxQ3VyID4g
MCkgewotICAgICAgICBhY3R1YWxDcHVzUHJlc2VudCsrOwotICAgICAgfQotICAgICAgY3B1RnJl
cUN1clN1bSArPSBjcHVGcmVxQ3VyOwotCi0gICAgICAvKiBIZXJlLCBsYXN0U2Vlbk1heEZyZXEg
bWlnaHQgY29tZSBmcm9tCi0gICAgICAgKiAxLiBjcHVGcmVxW2ldLCBvcgotICAgICAgICogMi4g
YSBwcmV2aW91cyBpdGVyYXRpb24sIG9yCi0gICAgICAgKiAzLiBhIG5ld2x5IHJlYWQgdmFsdWUs
IG9yCi0gICAgICAgKiA0LiBoeXBvdGhldGljYWxseSBmcm9tIHRoZSBwcmUtbG9vcCBkdW1teS4K
LSAgICAgICAqLwotICAgICAgY3B1RnJlcU1heFN1bSArPSBsYXN0U2Vlbk1heEZyZXE7Ci0gICAg
ICBpZiAobGFzdFNlZW5NYXhGcmVxID4gMCkgewotICAgICAgICBjdXJGcmVxU2NhbGVzW2ldID0g
KGRvdWJsZSkgY3B1RnJlcUN1ciAvIGxhc3RTZWVuTWF4RnJlcTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoY3B1RnJlcUN1clN1bSA9PSAwIHx8IGNwdUZyZXFNYXhTdW0gPT0gMCkgewotICAg
ICAgTG9nLmUoVEFHLCAiQ291bGQgbm90IHJlYWQgbWF4IG9yIGN1cnJlbnQgZnJlcXVlbmN5IGZv
ciBhbnkgQ1BVIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLyoKLSAgICAg
KiBTaW5jZSB0aGUgY3ljbGUgY291bnRzIGFyZSBmb3IgdGhlIHBlcmlvZCBiZXR3ZWVuIHRoZSBs
YXN0IGludm9jYXRpb24KLSAgICAgKiBhbmQgdGhpcyBwcmVzZW50IG9uZSwgd2UgYXZlcmFnZSB0
aGUgcGVyY2VudHVhbCBDUFUgZnJlcXVlbmNpZXMgYmV0d2VlbgotICAgICAqIG5vdyBhbmQgdGhl
IGJlZ2lubmluZyBvZiB0aGUgbWVhc3VyZW1lbnQgcGVyaW9kLiAgVGhpcyBpcyBzaWduaWZpY2Fu
dGx5Ci0gICAgICogaW5jb3JyZWN0IG9ubHkgaWYgdGhlIGZyZXF1ZW5jaWVzIGhhdmUgcGVla2Vk
IG9yIGRyb3BwZWQgaW4gYmV0d2VlbiB0aGUKLSAgICAgKiBpbnZvY2F0aW9ucy4KLSAgICAgKi8K
LSAgICBkb3VibGUgY3VycmVudEZyZXF1ZW5jeVNjYWxlID0gY3B1RnJlcUN1clN1bSAvIChkb3Vi
bGUpIGNwdUZyZXFNYXhTdW07Ci0gICAgaWYgKGZyZXF1ZW5jeVNjYWxlLmdldEN1cnJlbnQoKSA+
IDApIHsKLSAgICAgIGN1cnJlbnRGcmVxdWVuY3lTY2FsZSA9IChmcmVxdWVuY3lTY2FsZS5nZXRD
dXJyZW50KCkgKyBjdXJyZW50RnJlcXVlbmN5U2NhbGUpICogMC41OwotICAgIH0KLQotICAgIFBy
b2NTdGF0IHByb2NTdGF0ID0gcmVhZFByb2NTdGF0KCk7Ci0gICAgaWYgKHByb2NTdGF0ID09IG51
bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBsb25nIGRpZmZVc2VyVGlt
ZSA9IHByb2NTdGF0LnVzZXJUaW1lIC0gbGFzdFByb2NTdGF0LnVzZXJUaW1lOwotICAgIGxvbmcg
ZGlmZlN5c3RlbVRpbWUgPSBwcm9jU3RhdC5zeXN0ZW1UaW1lIC0gbGFzdFByb2NTdGF0LnN5c3Rl
bVRpbWU7Ci0gICAgbG9uZyBkaWZmSWRsZVRpbWUgPSBwcm9jU3RhdC5pZGxlVGltZSAtIGxhc3RQ
cm9jU3RhdC5pZGxlVGltZTsKLSAgICBsb25nIGFsbFRpbWUgPSBkaWZmVXNlclRpbWUgKyBkaWZm
U3lzdGVtVGltZSArIGRpZmZJZGxlVGltZTsKLQotICAgIGlmIChjdXJyZW50RnJlcXVlbmN5U2Nh
bGUgPT0gMCB8fCBhbGxUaW1lID09IDApIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBVcGRhdGUgc3RhdGlzdGljcy4KLSAgICBmcmVxdWVuY3lTY2FsZS5hZGRWYWx1ZShj
dXJyZW50RnJlcXVlbmN5U2NhbGUpOwotCi0gICAgZG91YmxlIGN1cnJlbnRVc2VyQ3B1VXNhZ2Ug
PSBkaWZmVXNlclRpbWUgLyAoZG91YmxlKSBhbGxUaW1lOwotICAgIHVzZXJDcHVVc2FnZS5hZGRW
YWx1ZShjdXJyZW50VXNlckNwdVVzYWdlKTsKLQotICAgIGRvdWJsZSBjdXJyZW50U3lzdGVtQ3B1
VXNhZ2UgPSBkaWZmU3lzdGVtVGltZSAvIChkb3VibGUpIGFsbFRpbWU7Ci0gICAgc3lzdGVtQ3B1
VXNhZ2UuYWRkVmFsdWUoY3VycmVudFN5c3RlbUNwdVVzYWdlKTsKLQotICAgIGRvdWJsZSBjdXJy
ZW50VG90YWxDcHVVc2FnZSA9Ci0gICAgICAgIChjdXJyZW50VXNlckNwdVVzYWdlICsgY3VycmVu
dFN5c3RlbUNwdVVzYWdlKSAqIGN1cnJlbnRGcmVxdWVuY3lTY2FsZTsKLSAgICB0b3RhbENwdVVz
YWdlLmFkZFZhbHVlKGN1cnJlbnRUb3RhbENwdVVzYWdlKTsKLQotICAgIC8vIFNhdmUgbmV3IG1l
YXN1cmVtZW50cyBmb3IgbmV4dCByb3VuZCdzIGRlbHRhcy4KLSAgICBsYXN0UHJvY1N0YXQgPSBw
cm9jU3RhdDsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZG91Ymxl
VG9QZXJjZW50KGRvdWJsZSBkKSB7Ci0gICAgcmV0dXJuIChpbnQpIChkICogMTAwICsgMC41KTsK
LSAgfQotCi0gIHByaXZhdGUgc3luY2hyb25pemVkIFN0cmluZyBnZXRTdGF0U3RyaW5nKCkgewot
ICAgIFN0cmluZ0J1aWxkZXIgc3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgc3RhdC5h
cHBlbmQoIkNQVSBVc2VyOiAiKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudCh1c2Vy
Q3B1VXNhZ2UuZ2V0Q3VycmVudCgpKSkKLSAgICAgICAgLmFwcGVuZCgiLyIpCi0gICAgICAgIC5h
cHBlbmQoZG91YmxlVG9QZXJjZW50KHVzZXJDcHVVc2FnZS5nZXRBdmVyYWdlKCkpKQotICAgICAg
ICAuYXBwZW5kKCIuIFN5c3RlbTogIikKLSAgICAgICAgLmFwcGVuZChkb3VibGVUb1BlcmNlbnQo
c3lzdGVtQ3B1VXNhZ2UuZ2V0Q3VycmVudCgpKSkKLSAgICAgICAgLmFwcGVuZCgiLyIpCi0gICAg
ICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KHN5c3RlbUNwdVVzYWdlLmdldEF2ZXJhZ2UoKSkp
Ci0gICAgICAgIC5hcHBlbmQoIi4gRnJlcTogIikKLSAgICAgICAgLmFwcGVuZChkb3VibGVUb1Bl
cmNlbnQoZnJlcXVlbmN5U2NhbGUuZ2V0Q3VycmVudCgpKSkKLSAgICAgICAgLmFwcGVuZCgiLyIp
Ci0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KGZyZXF1ZW5jeVNjYWxlLmdldEF2ZXJh
Z2UoKSkpCi0gICAgICAgIC5hcHBlbmQoIi4gVG90YWwgdXNhZ2U6ICIpCi0gICAgICAgIC5hcHBl
bmQoZG91YmxlVG9QZXJjZW50KHRvdGFsQ3B1VXNhZ2UuZ2V0Q3VycmVudCgpKSkKLSAgICAgICAg
LmFwcGVuZCgiLyIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KHRvdGFsQ3B1VXNh
Z2UuZ2V0QXZlcmFnZSgpKSkKLSAgICAgICAgLmFwcGVuZCgiLiBDb3JlczogIikKLSAgICAgICAg
LmFwcGVuZChhY3R1YWxDcHVzUHJlc2VudCk7Ci0gICAgc3RhdC5hcHBlbmQoIiggIik7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBjcHVzUHJlc2VudDsgaSsrKSB7Ci0gICAgICBzdGF0LmFwcGVu
ZChkb3VibGVUb1BlcmNlbnQoY3VyRnJlcVNjYWxlc1tpXSkpLmFwcGVuZCgiICIpOwotICAgIH0K
LSAgICBzdGF0LmFwcGVuZCgiKS4gQmF0dGVyeTogIikuYXBwZW5kKGdldEJhdHRlcnlMZXZlbCgp
KTsKLSAgICBpZiAoY3B1T3ZlcnVzZSkgewotICAgICAgc3RhdC5hcHBlbmQoIi4gT3ZlcnVzZS4i
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXQudG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAg
KiBSZWFkIGEgc2luZ2xlIGludGVnZXIgdmFsdWUgZnJvbSB0aGUgbmFtZWQgZmlsZS4gIFJldHVy
biB0aGUgcmVhZCB2YWx1ZQotICAgKiBvciBpZiBhbiBlcnJvciBvY2N1cnMgcmV0dXJuIDAuCi0g
ICAqLwotICBwcml2YXRlIGxvbmcgcmVhZEZyZXFGcm9tRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsK
LSAgICBsb25nIG51bWJlciA9IDA7Ci0gICAgdHJ5IHsKLSAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJl
YWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlTmFtZSkpOwotICAg
ICAgdHJ5IHsKLSAgICAgICAgU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAg
ICAgbnVtYmVyID0gcGFyc2VMb25nKGxpbmUpOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAg
cmVhZGVyLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0
aW9uIGUpIHsKLSAgICAgIC8vIENQVSBjb3JlIGlzIG9mZiwgc28gZmlsZSB3aXRoIGl0cyBzY2Fs
aW5nIGZyZXF1ZW5jeSAuLi4vY3B1ZnJlcS9zY2FsaW5nX2N1cl9mcmVxCi0gICAgICAvLyBpcyBu
b3QgcHJlc2VudC4gVGhpcyBpcyBub3QgYW4gZXJyb3IuCi0gICAgfSBjYXRjaCAoSU9FeGNlcHRp
b24gZSkgewotICAgICAgLy8gQ1BVIGNvcmUgaXMgb2ZmLCBzbyBmaWxlIHdpdGggaXRzIHNjYWxp
bmcgZnJlcXVlbmN5IC4uLi9jcHVmcmVxL3NjYWxpbmdfY3VyX2ZyZXEKLSAgICAgIC8vIGlzIGVt
cHR5LiBUaGlzIGlzIG5vdCBhbiBlcnJvci4KLSAgICB9Ci0gICAgcmV0dXJuIG51bWJlcjsKLSAg
fQotCi0gIHByaXZhdGUgc3RhdGljIGxvbmcgcGFyc2VMb25nKFN0cmluZyB2YWx1ZSkgewotICAg
IGxvbmcgbnVtYmVyID0gMDsKLSAgICB0cnkgewotICAgICAgbnVtYmVyID0gTG9uZy5wYXJzZUxv
bmcodmFsdWUpOwotICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICBMb2cuZShUQUcsICJwYXJzZUxvbmcgZXJyb3IuIiwgZSk7Ci0gICAgfQotICAgIHJldHVybiBu
dW1iZXI7Ci0gIH0KLQotICAvKgotICAgKiBSZWFkIHRoZSBjdXJyZW50IHV0aWxpemF0aW9uIG9m
IGFsbCBDUFVzIHVzaW5nIHRoZSBjdW11bGF0aXZlIGZpcnN0IGxpbmUKLSAgICogb2YgL3Byb2Mv
c3RhdC4KLSAgICovCi0gIHByaXZhdGUgUHJvY1N0YXQgcmVhZFByb2NTdGF0KCkgewotICAgIGxv
bmcgdXNlclRpbWUgPSAwOwotICAgIGxvbmcgc3lzdGVtVGltZSA9IDA7Ci0gICAgbG9uZyBpZGxl
VGltZSA9IDA7Ci0gICAgdHJ5IHsKLSAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBC
dWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcigiL3Byb2Mvc3RhdCIpKTsKLSAgICAgIHRyeSB7
Ci0gICAgICAgIC8vIGxpbmUgc2hvdWxkIGNvbnRhaW4gc29tZXRoaW5nIGxpa2UgdGhpczoKLSAg
ICAgICAgLy8gY3B1ICA1MDkzODE4IDI3MTgzOCAzNTEyODMwIDE2NTkzNDExOSAxMDEzNzQgNDQ3
MDc2IDI3MjA4NiAwIDAgMAotICAgICAgICAvLyAgICAgICB1c2VyICAgIG5pY2UgIHN5c3RlbSAg
ICAgaWRsZSAgIGlvd2FpdCAgaXJxICAgc29mdGlycQotICAgICAgICBTdHJpbmcgbGluZSA9IHJl
YWRlci5yZWFkTGluZSgpOwotICAgICAgICBTdHJpbmcgbGluZXNbXSA9IGxpbmUuc3BsaXQoIlxc
cysiKTsKLSAgICAgICAgaW50IGxlbmd0aCA9IGxpbmVzLmxlbmd0aDsKLSAgICAgICAgaWYgKGxl
bmd0aCA+PSA1KSB7Ci0gICAgICAgICAgdXNlclRpbWUgPSBwYXJzZUxvbmcobGluZXNbMV0pOyAv
LyB1c2VyCi0gICAgICAgICAgdXNlclRpbWUgKz0gcGFyc2VMb25nKGxpbmVzWzJdKTsgLy8gbmlj
ZQotICAgICAgICAgIHN5c3RlbVRpbWUgPSBwYXJzZUxvbmcobGluZXNbM10pOyAvLyBzeXN0ZW0K
LSAgICAgICAgICBpZGxlVGltZSA9IHBhcnNlTG9uZyhsaW5lc1s0XSk7IC8vIGlkbGUKLSAgICAg
ICAgfQotICAgICAgICBpZiAobGVuZ3RoID49IDgpIHsKLSAgICAgICAgICB1c2VyVGltZSArPSBw
YXJzZUxvbmcobGluZXNbNV0pOyAvLyBpb3dhaXQKLSAgICAgICAgICBzeXN0ZW1UaW1lICs9IHBh
cnNlTG9uZyhsaW5lc1s2XSk7IC8vIGlycQotICAgICAgICAgIHN5c3RlbVRpbWUgKz0gcGFyc2VM
b25nKGxpbmVzWzddKTsgLy8gc29mdGlycQotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChFeGNl
cHRpb24gZSkgewotICAgICAgICBMb2cuZShUQUcsICJQcm9ibGVtcyBwYXJzaW5nIC9wcm9jL3N0
YXQiLCBlKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAg
ICByZWFkZXIuY2xvc2UoKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNl
cHRpb24gZSkgewotICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IG9wZW4gL3Byb2Mvc3RhdCBmb3Ig
cmVhZGluZyIsIGUpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRp
b24gZSkgewotICAgICAgTG9nLmUoVEFHLCAiUHJvYmxlbXMgcmVhZGluZyAvcHJvYy9zdGF0Iiwg
ZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBQcm9jU3RhdCh1
c2VyVGltZSwgc3lzdGVtVGltZSwgaWRsZVRpbWUpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvRGlyZWN0UlRDQ2xpZW50LmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudC5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvRGlyZWN0UlRDQ2xpZW50Lmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
NiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwot
Ci1pbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5OwotaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRp
b247Ci1pbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKLWltcG9ydCBvcmcud2VicnRjLkljZUNh
bmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53
ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7
Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGph
dmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0
Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotLyoqCi0gKiBJbXBsZW1l
bnRhdGlvbiBvZiBBcHBSVENDbGllbnQgdGhhdCB1c2VzIGRpcmVjdCBUQ1AgY29ubmVjdGlvbiBh
cyB0aGUgc2lnbmFsaW5nIGNoYW5uZWwuCi0gKiBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9y
IGFuIGV4dGVybmFsIHNlcnZlci4gVGhpcyBjbGFzcyBkb2VzIG5vdCBzdXBwb3J0IGxvb3BiYWNr
Ci0gKiBjb25uZWN0aW9ucy4KLSAqLwotcHVibGljIGNsYXNzIERpcmVjdFJUQ0NsaWVudCBpbXBs
ZW1lbnRzIEFwcFJUQ0NsaWVudCwgVENQQ2hhbm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIHsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJEaXJlY3RSVENDbGllbnQiOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9QT1JUID0gODg4ODsKLQotICAvLyBS
ZWdleCBwYXR0ZXJuIHVzZWQgZm9yIGNoZWNraW5nIGlmIHJvb20gaWQgbG9va3MgbGlrZSBhbiBJ
UC4KLSAgc3RhdGljIGZpbmFsIFBhdHRlcm4gSVBfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZSgi
KCIKLSAgICAgIC8vIElQdjQKLSAgICAgICsgIigoXFxkK1xcLil7M31cXGQrKXwiCi0gICAgICAv
LyBJUHY2Ci0gICAgICArICJcXFsoKChbMC05YS1mQS1GXXsxLDR9OikqWzAtOWEtZkEtRl17MSw0
fSk/OjoiCi0gICAgICArICIoKFswLTlhLWZBLUZdezEsNH06KSpbMC05YS1mQS1GXXsxLDR9KT8p
XFxdfCIKLSAgICAgICsgIlxcWygoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0
fSlcXF18IgotICAgICAgLy8gSVB2NiB3aXRob3V0IFtdCi0gICAgICArICIoKChbMC05YS1mQS1G
XXsxLDR9OikqWzAtOWEtZkEtRl17MSw0fSk/OjooKFswLTlhLWZBLUZdezEsNH06KSpbMC05YS1m
QS1GXXsxLDR9KT8pfCIKLSAgICAgICsgIigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEt
Rl17MSw0fSl8IgotICAgICAgLy8gTGl0ZXJhbHMKLSAgICAgICsgImxvY2FsaG9zdCIKLSAgICAg
ICsgIikiCi0gICAgICAvLyBPcHRpb25hbCBwb3J0IG51bWJlcgotICAgICAgKyAiKDooXFxkKykp
PyIpOwotCi0gIHByaXZhdGUgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yOwotICBwcml2
YXRlIGZpbmFsIFNpZ25hbGluZ0V2ZW50cyBldmVudHM7Ci0gIHByaXZhdGUgVENQQ2hhbm5lbENs
aWVudCB0Y3BDbGllbnQ7Ci0gIHByaXZhdGUgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5l
Y3Rpb25QYXJhbWV0ZXJzOwotCi0gIHByaXZhdGUgZW51bSBDb25uZWN0aW9uU3RhdGUgeyBORVcs
IENPTk5FQ1RFRCwgQ0xPU0VELCBFUlJPUiB9Ci0KLSAgLy8gQWxsIGFsdGVyYXRpb25zIG9mIHRo
ZSByb29tIHN0YXRlIHNob3VsZCBiZSBkb25lIGZyb20gaW5zaWRlIHRoZSBsb29wZXIgdGhyZWFk
LgotICBwcml2YXRlIENvbm5lY3Rpb25TdGF0ZSByb29tU3RhdGU7Ci0KLSAgcHVibGljIERpcmVj
dFJUQ0NsaWVudChTaWduYWxpbmdFdmVudHMgZXZlbnRzKSB7Ci0gICAgdGhpcy5ldmVudHMgPSBl
dmVudHM7Ci0KLSAgICBleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRv
cigpOwotICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5ORVc7Ci0gIH0KLQotICAvKioK
LSAgICogQ29ubmVjdHMgdG8gdGhlIHJvb20sIHJvb21JZCBpbiBjb25uZWN0aW9uc1BhcmFtZXRl
cnMgaXMgcmVxdWlyZWQuIHJvb21JZCBtdXN0IGJlIGEgdmFsaWQKLSAgICogSVAgYWRkcmVzcyBt
YXRjaGluZyBJUF9QQVRURVJOLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNv
bm5lY3RUb1Jvb20oUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJz
KSB7Ci0gICAgdGhpcy5jb25uZWN0aW9uUGFyYW1ldGVycyA9IGNvbm5lY3Rpb25QYXJhbWV0ZXJz
OwotCi0gICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICByZXBv
cnRFcnJvcigiTG9vcGJhY2sgY29ubmVjdGlvbnMgYXJlbid0IHN1cHBvcnRlZCBieSBEaXJlY3RS
VENDbGllbnQuIik7Ci0gICAgfQotCi0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
Y29ubmVjdFRvUm9vbUludGVybmFsKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgZGlzY29ubmVjdEZyb21Sb29tKCkgewotICAgIGV4ZWN1dG9y
LmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgIGRpc2Nvbm5lY3RGcm9tUm9vbUludGVybmFsKCk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogQ29ubmVjdHMgdG8gdGhlIHJvb20uCi0g
ICAqCi0gICAqIFJ1bnMgb24gdGhlIGxvb3BlciB0aHJlYWQuCi0gICAqLwotICBwcml2YXRlIHZv
aWQgY29ubmVjdFRvUm9vbUludGVybmFsKCkgewotICAgIHRoaXMucm9vbVN0YXRlID0gQ29ubmVj
dGlvblN0YXRlLk5FVzsKLQotICAgIFN0cmluZyBlbmRwb2ludCA9IGNvbm5lY3Rpb25QYXJhbWV0
ZXJzLnJvb21JZDsKLQotICAgIE1hdGNoZXIgbWF0Y2hlciA9IElQX1BBVFRFUk4ubWF0Y2hlcihl
bmRwb2ludCk7Ci0gICAgaWYgKCFtYXRjaGVyLm1hdGNoZXMoKSkgewotICAgICAgcmVwb3J0RXJy
b3IoInJvb21JZCBtdXN0IG1hdGNoIElQX1BBVFRFUk4gZm9yIERpcmVjdFJUQ0NsaWVudC4iKTsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBTdHJpbmcgaXAgPSBtYXRjaGVyLmdyb3VwKDEp
OwotICAgIFN0cmluZyBwb3J0U3RyID0gbWF0Y2hlci5ncm91cChtYXRjaGVyLmdyb3VwQ291bnQo
KSk7Ci0gICAgaW50IHBvcnQ7Ci0KLSAgICBpZiAocG9ydFN0ciAhPSBudWxsKSB7Ci0gICAgICB0
cnkgewotICAgICAgICBwb3J0ID0gSW50ZWdlci5wYXJzZUludChwb3J0U3RyKTsKLSAgICAgIH0g
Y2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJJ
bnZhbGlkIHBvcnQgbnVtYmVyOiAiICsgcG9ydFN0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgcG9ydCA9IERFRkFVTFRfUE9SVDsKLSAgICB9Ci0KLSAg
ICB0Y3BDbGllbnQgPSBuZXcgVENQQ2hhbm5lbENsaWVudChleGVjdXRvciwgdGhpcywgaXAsIHBv
cnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIERpc2Nvbm5lY3RzIGZyb20gdGhlIHJvb20uCi0gICAq
Ci0gICAqIFJ1bnMgb24gdGhlIGxvb3BlciB0aHJlYWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQg
ZGlzY29ubmVjdEZyb21Sb29tSW50ZXJuYWwoKSB7Ci0gICAgcm9vbVN0YXRlID0gQ29ubmVjdGlv
blN0YXRlLkNMT1NFRDsKLQotICAgIGlmICh0Y3BDbGllbnQgIT0gbnVsbCkgewotICAgICAgdGNw
Q2xpZW50LmRpc2Nvbm5lY3QoKTsKLSAgICAgIHRjcENsaWVudCA9IG51bGw7Ci0gICAgfQotICAg
IGV4ZWN1dG9yLnNodXRkb3duKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
c2VuZE9mZmVyU2RwKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBleGVjdXRv
ci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5D
T05ORUNURUQpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiU2VuZGluZyBvZmZlciBTRFAgaW4g
bm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1
dChqc29uLCAic2RwIiwgc2RwLmRlc2NyaXB0aW9uKTsKLSAgICAgICAganNvblB1dChqc29uLCAi
dHlwZSIsICJvZmZlciIpOwotICAgICAgICBzZW5kTWVzc2FnZShqc29uLnRvU3RyaW5nKCkpOwot
ICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRB
bnN3ZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGV4ZWN1dG9yLmV4
ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0g
ICAgICAgIGpzb25QdXQoanNvbiwgInNkcCIsIHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGpz
b25QdXQoanNvbiwgInR5cGUiLCAiYW5zd2VyIik7Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpzb24u
dG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRh
dGUpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBKU09OT2JqZWN0IGpzb24g
PSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgImNhbmRp
ZGF0ZSIpOwotICAgICAgICBqc29uUHV0KGpzb24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBNTGlu
ZUluZGV4KTsKLSAgICAgICAganNvblB1dChqc29uLCAiaWQiLCBjYW5kaWRhdGUuc2RwTWlkKTsK
LSAgICAgICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlIiwgY2FuZGlkYXRlLnNkcCk7Ci0KLSAg
ICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAg
ICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcgSUNFIGNhbmRpZGF0ZSBpbiBub24gY29ubmVjdGVk
IHN0YXRlLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZW5kTWVz
c2FnZShqc29uLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqIFNl
bmQgcmVtb3ZlZCBJY2UgY2FuZGlkYXRlcyB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuICovCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZW5kTG9jYWxJY2VDYW5kaWRhdGVSZW1vdmFscyhm
aW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAg
anNvblB1dChqc29uLCAidHlwZSIsICJyZW1vdmUtY2FuZGlkYXRlcyIpOwotICAgICAgICBKU09O
QXJyYXkganNvbkFycmF5ID0gbmV3IEpTT05BcnJheSgpOwotICAgICAgICBmb3IgKGZpbmFsIElj
ZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBjYW5kaWRhdGVzKSB7Ci0gICAgICAgICAganNvbkFycmF5
LnB1dCh0b0pzb25DYW5kaWRhdGUoY2FuZGlkYXRlKSk7Ci0gICAgICAgIH0KLSAgICAgICAganNv
blB1dChqc29uLCAiY2FuZGlkYXRlcyIsIGpzb25BcnJheSk7Ci0KLSAgICAgICAgaWYgKHJvb21T
dGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgcmVwb3J0RXJy
b3IoIlNlbmRpbmcgSUNFIGNhbmRpZGF0ZSByZW1vdmFscyBpbiBub24gY29ubmVjdGVkIHN0YXRl
LiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBzZW5kTWVzc2FnZShq
c29uLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAvLyBUQ1BDaGFubmVsQ2xpZW50IGV2ZW50IGhhbmRsZXJzCi0KLSAgLyoqCi0gICAqIElm
IHRoZSBjbGllbnQgaXMgdGhlIHNlcnZlciBzaWRlLCB0aGlzIHdpbGwgdHJpZ2dlciBvbkNvbm5l
Y3RlZFRvUm9vbS4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblRDUENvbm5l
Y3RlZChib29sZWFuIGlzU2VydmVyKSB7Ci0gICAgaWYgKGlzU2VydmVyKSB7Ci0gICAgICByb29t
U3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEOwotCi0gICAgICBTaWduYWxpbmdQYXJh
bWV0ZXJzIHBhcmFtZXRlcnMgPSBuZXcgU2lnbmFsaW5nUGFyYW1ldGVycygKLSAgICAgICAgICAv
LyBJY2Ugc2VydmVycyBhcmUgbm90IG5lZWRlZCBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zLgotICAg
ICAgICAgIG5ldyBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4oKSwKLSAgICAg
ICAgICBpc1NlcnZlciwgLy8gU2VydmVyIHNpZGUgYWN0cyBhcyB0aGUgaW5pdGlhdG9yIG9uIGRp
cmVjdCBjb25uZWN0aW9ucy4KLSAgICAgICAgICBudWxsLCAvLyBjbGllbnRJZAotICAgICAgICAg
IG51bGwsIC8vIHdzc1VybAotICAgICAgICAgIG51bGwsIC8vIHd3c1Bvc3RVcmwKLSAgICAgICAg
ICBudWxsLCAvLyBvZmZlclNkcAotICAgICAgICAgIG51bGwgLy8gaWNlQ2FuZGlkYXRlcwotICAg
ICAgICAgICk7Ci0gICAgICBldmVudHMub25Db25uZWN0ZWRUb1Jvb20ocGFyYW1ldGVycyk7Ci0g
ICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVENQTWVzc2FnZShTdHJp
bmcgbXNnKSB7Ci0gICAgdHJ5IHsKLSAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2Jq
ZWN0KG1zZyk7Ci0gICAgICBTdHJpbmcgdHlwZSA9IGpzb24ub3B0U3RyaW5nKCJ0eXBlIik7Ci0g
ICAgICBpZiAodHlwZS5lcXVhbHMoImNhbmRpZGF0ZSIpKSB7Ci0gICAgICAgIGV2ZW50cy5vblJl
bW90ZUljZUNhbmRpZGF0ZSh0b0phdmFDYW5kaWRhdGUoanNvbikpOwotICAgICAgfSBlbHNlIGlm
ICh0eXBlLmVxdWFscygicmVtb3ZlLWNhbmRpZGF0ZXMiKSkgewotICAgICAgICBKU09OQXJyYXkg
Y2FuZGlkYXRlQXJyYXkgPSBqc29uLmdldEpTT05BcnJheSgiY2FuZGlkYXRlcyIpOwotICAgICAg
ICBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzID0gbmV3IEljZUNhbmRpZGF0ZVtjYW5kaWRhdGVB
cnJheS5sZW5ndGgoKV07Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FuZGlkYXRlQXJy
YXkubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgIGNhbmRpZGF0ZXNbaV0gPSB0b0phdmFDYW5k
aWRhdGUoY2FuZGlkYXRlQXJyYXkuZ2V0SlNPTk9iamVjdChpKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2FuZGlkYXRlc1JlbW92ZWQoY2FuZGlkYXRlcyk7Ci0gICAg
ICB9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJhbnN3ZXIiKSkgewotICAgICAgICBTZXNzaW9uRGVz
Y3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAgIFNlc3Np
b25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKHR5cGUpLCBqc29uLmdldFN0cmlu
Zygic2RwIikpOwotICAgICAgICBldmVudHMub25SZW1vdGVEZXNjcmlwdGlvbihzZHApOwotICAg
ICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygib2ZmZXIiKSkgewotICAgICAgICBTZXNzaW9uRGVz
Y3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAgIFNlc3Np
b25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKHR5cGUpLCBqc29uLmdldFN0cmlu
Zygic2RwIikpOwotCi0gICAgICAgIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1ldGVycyA9IG5l
dyBTaWduYWxpbmdQYXJhbWV0ZXJzKAotICAgICAgICAgICAgLy8gSWNlIHNlcnZlcnMgYXJlIG5v
dCBuZWVkZWQgZm9yIGRpcmVjdCBjb25uZWN0aW9ucy4KLSAgICAgICAgICAgIG5ldyBMaW5rZWRM
aXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4oKSwKLSAgICAgICAgICAgIGZhbHNlLCAvLyBU
aGlzIGNvZGUgd2lsbCBvbmx5IGJlIHJ1biBvbiB0aGUgY2xpZW50IHNpZGUuIFNvLCB3ZSBhcmUg
bm90IHRoZSBpbml0aWF0b3IuCi0gICAgICAgICAgICBudWxsLCAvLyBjbGllbnRJZAotICAgICAg
ICAgICAgbnVsbCwgLy8gd3NzVXJsCi0gICAgICAgICAgICBudWxsLCAvLyB3c3NQb3N0VXJsCi0g
ICAgICAgICAgICBzZHAsIC8vIG9mZmVyU2RwCi0gICAgICAgICAgICBudWxsIC8vIGljZUNhbmRp
ZGF0ZXMKLSAgICAgICAgICAgICk7Ci0gICAgICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0
ZS5DT05ORUNURUQ7Ci0gICAgICAgIGV2ZW50cy5vbkNvbm5lY3RlZFRvUm9vbShwYXJhbWV0ZXJz
KTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJVbmV4cGVjdGVkIFRDUCBt
ZXNzYWdlOiAiICsgbXNnKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUp
IHsKLSAgICAgIHJlcG9ydEVycm9yKCJUQ1AgbWVzc2FnZSBKU09OIHBhcnNpbmcgZXJyb3I6ICIg
KyBlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBvblRDUEVycm9yKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIHJlcG9ydEVycm9yKCJUQ1Ag
Y29ubmVjdGlvbiBlcnJvcjogIiArIGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBvblRDUENsb3NlKCkgewotICAgIGV2ZW50cy5vbkNoYW5uZWxDbG9zZSgp
OwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gSGVscGVyIGZ1bmN0aW9ucy4KLSAgcHJp
dmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBM
b2cuZShUQUcsIGVycm9yTWVzc2FnZSk7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgICAgICBy
b29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuRVJST1I7Ci0gICAgICAgICAgZXZlbnRzLm9uQ2hh
bm5lbEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCBzZW5kTWVzc2FnZShmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewot
ICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHRjcENsaWVudC5zZW5kKG1lc3NhZ2Up
OwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gUHV0IGEgfGtleXwtPnx2YWx1ZXwgbWFw
cGluZyBpbiB8anNvbnwuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQganNvblB1dChKU09OT2JqZWN0
IGpzb24sIFN0cmluZyBrZXksIE9iamVjdCB2YWx1ZSkgewotICAgIHRyeSB7Ci0gICAgICBqc29u
LnB1dChrZXksIHZhbHVlKTsKLSAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAg
IHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgIH0KLSAgfQotCi0gIC8vIENvbnZl
cnRzIGEgSmF2YSBjYW5kaWRhdGUgdG8gYSBKU09OT2JqZWN0LgotICBwcml2YXRlIHN0YXRpYyBK
U09OT2JqZWN0IHRvSnNvbkNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7
Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICBqc29uUHV0KGpz
b24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4KTsKLSAgICBqc29uUHV0KGpzb24s
ICJpZCIsIGNhbmRpZGF0ZS5zZHBNaWQpOwotICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZSIs
IGNhbmRpZGF0ZS5zZHApOwotICAgIHJldHVybiBqc29uOwotICB9Ci0KLSAgLy8gQ29udmVydHMg
YSBKU09OIGNhbmRpZGF0ZSB0byBhIEphdmEgb2JqZWN0LgotICBwcml2YXRlIHN0YXRpYyBJY2VD
YW5kaWRhdGUgdG9KYXZhQ2FuZGlkYXRlKEpTT05PYmplY3QganNvbikgdGhyb3dzIEpTT05FeGNl
cHRpb24gewotICAgIHJldHVybiBuZXcgSWNlQ2FuZGlkYXRlKAotICAgICAgICBqc29uLmdldFN0
cmluZygiaWQiKSwganNvbi5nZXRJbnQoImxhYmVsIiksIGpzb24uZ2V0U3RyaW5nKCJjYW5kaWRh
dGUiKSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9IdWRGcmFn
bWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9IdWRG
cmFnbWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvSHVkRnJhZ21lbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIwNSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0
IGFuZHJvaWQuYXBwLkZyYWdtZW50OwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0
IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZs
YXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmll
d0dyb3VwOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9uOwotaW1wb3J0IGFuZHJv
aWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5TdGF0c1JlcG9ydDsKLQot
aW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgot
ICogRnJhZ21lbnQgZm9yIEhVRCBzdGF0aXN0aWNzIGRpc3BsYXkuCi0gKi8KLXB1YmxpYyBjbGFz
cyBIdWRGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBWaWV3IGNvbnRyb2xW
aWV3OwotICBwcml2YXRlIFRleHRWaWV3IGVuY29kZXJTdGF0VmlldzsKLSAgcHJpdmF0ZSBUZXh0
VmlldyBodWRWaWV3QndlOwotICBwcml2YXRlIFRleHRWaWV3IGh1ZFZpZXdDb25uZWN0aW9uOwot
ICBwcml2YXRlIFRleHRWaWV3IGh1ZFZpZXdWaWRlb1NlbmQ7Ci0gIHByaXZhdGUgVGV4dFZpZXcg
aHVkVmlld1ZpZGVvUmVjdjsKLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiB0b2dnbGVEZWJ1Z0J1dHRv
bjsKLSAgcHJpdmF0ZSBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQ7Ci0gIHByaXZhdGUgYm9vbGVh
biBkaXNwbGF5SHVkOwotICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4gaXNSdW5uaW5nOwotICBw
cml2YXRlIENwdU1vbml0b3IgY3B1TW9uaXRvcjsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZp
ZXcgb25DcmVhdGVWaWV3KAotICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIsIFZpZXdHcm91
cCBjb250YWluZXIsIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBjb250cm9sVmll
dyA9IGluZmxhdGVyLmluZmxhdGUoUi5sYXlvdXQuZnJhZ21lbnRfaHVkLCBjb250YWluZXIsIGZh
bHNlKTsKLQotICAgIC8vIENyZWF0ZSBVSSBjb250cm9scy4KLSAgICBlbmNvZGVyU3RhdFZpZXcg
PSAoVGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmVuY29kZXJfc3RhdF9j
YWxsKTsKLSAgICBodWRWaWV3QndlID0gKFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5
SWQoUi5pZC5odWRfc3RhdF9id2UpOwotICAgIGh1ZFZpZXdDb25uZWN0aW9uID0gKFRleHRWaWV3
KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5odWRfc3RhdF9jb25uZWN0aW9uKTsKLSAg
ICBodWRWaWV3VmlkZW9TZW5kID0gKFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQo
Ui5pZC5odWRfc3RhdF92aWRlb19zZW5kKTsKLSAgICBodWRWaWV3VmlkZW9SZWN2ID0gKFRleHRW
aWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5odWRfc3RhdF92aWRlb19yZWN2KTsK
LSAgICB0b2dnbGVEZWJ1Z0J1dHRvbiA9IChJbWFnZUJ1dHRvbikgY29udHJvbFZpZXcuZmluZFZp
ZXdCeUlkKFIuaWQuYnV0dG9uX3RvZ2dsZV9kZWJ1Zyk7Ci0KLSAgICB0b2dnbGVEZWJ1Z0J1dHRv
bi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAg
ICBpZiAoZGlzcGxheUh1ZCkgewotICAgICAgICAgIGludCB2aXNpYmlsaXR5ID0KLSAgICAgICAg
ICAgICAgKGh1ZFZpZXdCd2UuZ2V0VmlzaWJpbGl0eSgpID09IFZpZXcuVklTSUJMRSkgPyBWaWV3
LklOVklTSUJMRSA6IFZpZXcuVklTSUJMRTsKLSAgICAgICAgICBodWRWaWV3c1NldFByb3BlcnRp
ZXModmlzaWJpbGl0eSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVy
biBjb250cm9sVmlldzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN0YXJ0
KCkgewotICAgIHN1cGVyLm9uU3RhcnQoKTsKLQotICAgIEJ1bmRsZSBhcmdzID0gZ2V0QXJndW1l
bnRzKCk7Ci0gICAgaWYgKGFyZ3MgIT0gbnVsbCkgewotICAgICAgdmlkZW9DYWxsRW5hYmxlZCA9
IGFyZ3MuZ2V0Qm9vbGVhbihDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FMTCwgdHJ1ZSk7Ci0g
ICAgICBkaXNwbGF5SHVkID0gYXJncy5nZXRCb29sZWFuKENhbGxBY3Rpdml0eS5FWFRSQV9ESVNQ
TEFZX0hVRCwgZmFsc2UpOwotICAgIH0KLSAgICBpbnQgdmlzaWJpbGl0eSA9IGRpc3BsYXlIdWQg
PyBWaWV3LlZJU0lCTEUgOiBWaWV3LklOVklTSUJMRTsKLSAgICBlbmNvZGVyU3RhdFZpZXcuc2V0
VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICB0b2dnbGVEZWJ1Z0J1dHRvbi5zZXRWaXNpYmls
aXR5KHZpc2liaWxpdHkpOwotICAgIGh1ZFZpZXdzU2V0UHJvcGVydGllcyhWaWV3LklOVklTSUJM
RSk7Ci0gICAgaXNSdW5uaW5nID0gdHJ1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvblN0b3AoKSB7Ci0gICAgaXNSdW5uaW5nID0gZmFsc2U7Ci0gICAgc3VwZXIub25TdG9w
KCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDcHVNb25pdG9yKENwdU1vbml0b3IgY3B1TW9u
aXRvcikgewotICAgIHRoaXMuY3B1TW9uaXRvciA9IGNwdU1vbml0b3I7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgaHVkVmlld3NTZXRQcm9wZXJ0aWVzKGludCB2aXNpYmlsaXR5KSB7Ci0gICAgaHVk
Vmlld0J3ZS5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotICAgIGh1ZFZpZXdDb25uZWN0aW9u
LnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgaHVkVmlld1ZpZGVvU2VuZC5zZXRWaXNp
YmlsaXR5KHZpc2liaWxpdHkpOwotICAgIGh1ZFZpZXdWaWRlb1JlY3Yuc2V0VmlzaWJpbGl0eSh2
aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3QndlLnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09NUExF
WF9VTklUX1BULCA1KTsKLSAgICBodWRWaWV3Q29ubmVjdGlvbi5zZXRUZXh0U2l6ZShUeXBlZFZh
bHVlLkNPTVBMRVhfVU5JVF9QVCwgNSk7Ci0gICAgaHVkVmlld1ZpZGVvU2VuZC5zZXRUZXh0U2l6
ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QVCwgNSk7Ci0gICAgaHVkVmlld1ZpZGVvUmVjdi5z
ZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QVCwgNSk7Ci0gIH0KLQotICBwcml2
YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0UmVwb3J0TWFwKFN0YXRzUmVwb3J0IHJlcG9ydCkg
ewotICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcmVwb3J0TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+KCk7Ci0gICAgZm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6IHJlcG9ydC52
YWx1ZXMpIHsKLSAgICAgIHJlcG9ydE1hcC5wdXQodmFsdWUubmFtZSwgdmFsdWUudmFsdWUpOwot
ICAgIH0KLSAgICByZXR1cm4gcmVwb3J0TWFwOwotICB9Ci0KLSAgcHVibGljIHZvaWQgdXBkYXRl
RW5jb2RlclN0YXRpc3RpY3MoZmluYWwgU3RhdHNSZXBvcnRbXSByZXBvcnRzKSB7Ci0gICAgaWYg
KCFpc1J1bm5pbmcgfHwgIWRpc3BsYXlIdWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
U3RyaW5nQnVpbGRlciBlbmNvZGVyU3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKDEyOCk7Ci0gICAg
U3RyaW5nQnVpbGRlciBid2VTdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmdC
dWlsZGVyIGNvbm5lY3Rpb25TdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmdC
dWlsZGVyIHZpZGVvU2VuZFN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIFN0cmluZ0J1
aWxkZXIgdmlkZW9SZWN2U3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgU3RyaW5nIGZw
cyA9IG51bGw7Ci0gICAgU3RyaW5nIHRhcmdldEJpdHJhdGUgPSBudWxsOwotICAgIFN0cmluZyBh
Y3R1YWxCaXRyYXRlID0gbnVsbDsKLQotICAgIGZvciAoU3RhdHNSZXBvcnQgcmVwb3J0IDogcmVw
b3J0cykgewotICAgICAgaWYgKHJlcG9ydC50eXBlLmVxdWFscygic3NyYyIpICYmIHJlcG9ydC5p
ZC5jb250YWlucygic3NyYyIpICYmIHJlcG9ydC5pZC5jb250YWlucygic2VuZCIpKSB7Ci0gICAg
ICAgIC8vIFNlbmQgdmlkZW8gc3RhdGlzdGljcy4KLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5n
PiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAocmVwb3J0KTsKLSAgICAgICAgU3RyaW5nIHRyYWNr
SWQgPSByZXBvcnRNYXAuZ2V0KCJnb29nVHJhY2tJZCIpOwotICAgICAgICBpZiAodHJhY2tJZCAh
PSBudWxsICYmIHRyYWNrSWQuY29udGFpbnMoUGVlckNvbm5lY3Rpb25DbGllbnQuVklERU9fVFJB
Q0tfSUQpKSB7Ci0gICAgICAgICAgZnBzID0gcmVwb3J0TWFwLmdldCgiZ29vZ0ZyYW1lUmF0ZVNl
bnQiKTsKLSAgICAgICAgICB2aWRlb1NlbmRTdGF0LmFwcGVuZChyZXBvcnQuaWQpLmFwcGVuZCgi
XG4iKTsKLSAgICAgICAgICBmb3IgKFN0YXRzUmVwb3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZh
bHVlcykgewotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSB2YWx1ZS5uYW1lLnJlcGxhY2UoImdv
b2ciLCAiIik7Ci0gICAgICAgICAgICB2aWRlb1NlbmRTdGF0LmFwcGVuZChuYW1lKS5hcHBlbmQo
Ij0iKS5hcHBlbmQodmFsdWUudmFsdWUpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocmVwb3J0LnR5cGUuZXF1YWxzKCJzc3JjIikgJiYgcmVw
b3J0LmlkLmNvbnRhaW5zKCJzc3JjIikKLSAgICAgICAgICAmJiByZXBvcnQuaWQuY29udGFpbnMo
InJlY3YiKSkgewotICAgICAgICAvLyBSZWNlaXZlIHZpZGVvIHN0YXRpc3RpY3MuCi0gICAgICAg
IE1hcDxTdHJpbmcsIFN0cmluZz4gcmVwb3J0TWFwID0gZ2V0UmVwb3J0TWFwKHJlcG9ydCk7Ci0g
ICAgICAgIC8vIENoZWNrIGlmIHRoaXMgc3RhdCBpcyBmb3IgdmlkZW8gdHJhY2suCi0gICAgICAg
IFN0cmluZyBmcmFtZVdpZHRoID0gcmVwb3J0TWFwLmdldCgiZ29vZ0ZyYW1lV2lkdGhSZWNlaXZl
ZCIpOwotICAgICAgICBpZiAoZnJhbWVXaWR0aCAhPSBudWxsKSB7Ci0gICAgICAgICAgdmlkZW9S
ZWN2U3RhdC5hcHBlbmQocmVwb3J0LmlkKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAgZm9yIChT
dGF0c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAgICAgICAgIFN0
cmluZyBuYW1lID0gdmFsdWUubmFtZS5yZXBsYWNlKCJnb29nIiwgIiIpOwotICAgICAgICAgICAg
dmlkZW9SZWN2U3RhdC5hcHBlbmQobmFtZSkuYXBwZW5kKCI9IikuYXBwZW5kKHZhbHVlLnZhbHVl
KS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYg
KHJlcG9ydC5pZC5lcXVhbHMoImJ3ZWZvcnZpZGVvIikpIHsKLSAgICAgICAgLy8gQldFIHN0YXRp
c3RpY3MuCi0gICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcmVwb3J0TWFwID0gZ2V0UmVwb3J0
TWFwKHJlcG9ydCk7Ci0gICAgICAgIHRhcmdldEJpdHJhdGUgPSByZXBvcnRNYXAuZ2V0KCJnb29n
VGFyZ2V0RW5jQml0cmF0ZSIpOwotICAgICAgICBhY3R1YWxCaXRyYXRlID0gcmVwb3J0TWFwLmdl
dCgiZ29vZ0FjdHVhbEVuY0JpdHJhdGUiKTsKLQotICAgICAgICBid2VTdGF0LmFwcGVuZChyZXBv
cnQuaWQpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgZm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1
ZSA6IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLm5hbWUu
cmVwbGFjZSgiZ29vZyIsICIiKS5yZXBsYWNlKCJBdmFpbGFibGUiLCAiIik7Ci0gICAgICAgICAg
YndlU3RhdC5hcHBlbmQobmFtZSkuYXBwZW5kKCI9IikuYXBwZW5kKHZhbHVlLnZhbHVlKS5hcHBl
bmQoIlxuIik7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocmVwb3J0LnR5cGUuZXF1YWxz
KCJnb29nQ2FuZGlkYXRlUGFpciIpKSB7Ci0gICAgICAgIC8vIENvbm5lY3Rpb24gc3RhdGlzdGlj
cy4KLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAo
cmVwb3J0KTsKLSAgICAgICAgU3RyaW5nIGFjdGl2ZUNvbm5lY3Rpb24gPSByZXBvcnRNYXAuZ2V0
KCJnb29nQWN0aXZlQ29ubmVjdGlvbiIpOwotICAgICAgICBpZiAoYWN0aXZlQ29ubmVjdGlvbiAh
PSBudWxsICYmIGFjdGl2ZUNvbm5lY3Rpb24uZXF1YWxzKCJ0cnVlIikpIHsKLSAgICAgICAgICBj
b25uZWN0aW9uU3RhdC5hcHBlbmQocmVwb3J0LmlkKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAg
Zm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBuYW1lID0gdmFsdWUubmFtZS5yZXBsYWNlKCJnb29nIiwgIiIpOwotICAgICAg
ICAgICAgY29ubmVjdGlvblN0YXQuYXBwZW5kKG5hbWUpLmFwcGVuZCgiPSIpLmFwcGVuZCh2YWx1
ZS52YWx1ZSkuYXBwZW5kKCJcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0KLSAgICBodWRWaWV3QndlLnNldFRleHQoYndlU3RhdC50b1N0cmluZygpKTsKLSAgICBo
dWRWaWV3Q29ubmVjdGlvbi5zZXRUZXh0KGNvbm5lY3Rpb25TdGF0LnRvU3RyaW5nKCkpOwotICAg
IGh1ZFZpZXdWaWRlb1NlbmQuc2V0VGV4dCh2aWRlb1NlbmRTdGF0LnRvU3RyaW5nKCkpOwotICAg
IGh1ZFZpZXdWaWRlb1JlY3Yuc2V0VGV4dCh2aWRlb1JlY3ZTdGF0LnRvU3RyaW5nKCkpOwotCi0g
ICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIGlmIChmcHMgIT0gbnVsbCkgewotICAg
ICAgICBlbmNvZGVyU3RhdC5hcHBlbmQoIkZwczogICIpLmFwcGVuZChmcHMpLmFwcGVuZCgiXG4i
KTsKLSAgICAgIH0KLSAgICAgIGlmICh0YXJnZXRCaXRyYXRlICE9IG51bGwpIHsKLSAgICAgICAg
ZW5jb2RlclN0YXQuYXBwZW5kKCJUYXJnZXQgQlI6ICIpLmFwcGVuZCh0YXJnZXRCaXRyYXRlKS5h
cHBlbmQoIlxuIik7Ci0gICAgICB9Ci0gICAgICBpZiAoYWN0dWFsQml0cmF0ZSAhPSBudWxsKSB7
Ci0gICAgICAgIGVuY29kZXJTdGF0LmFwcGVuZCgiQWN0dWFsIEJSOiAiKS5hcHBlbmQoYWN0dWFs
Qml0cmF0ZSkuYXBwZW5kKCJcbiIpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChjcHVNb25p
dG9yICE9IG51bGwpIHsKLSAgICAgIGVuY29kZXJTdGF0LmFwcGVuZCgiQ1BVJTogIikKLSAgICAg
ICAgICAuYXBwZW5kKGNwdU1vbml0b3IuZ2V0Q3B1VXNhZ2VDdXJyZW50KCkpCi0gICAgICAgICAg
LmFwcGVuZCgiLyIpCi0gICAgICAgICAgLmFwcGVuZChjcHVNb25pdG9yLmdldENwdVVzYWdlQXZl
cmFnZSgpKQotICAgICAgICAgIC5hcHBlbmQoIi4gRnJlcTogIikKLSAgICAgICAgICAuYXBwZW5k
KGNwdU1vbml0b3IuZ2V0RnJlcXVlbmN5U2NhbGVBdmVyYWdlKCkpOwotICAgIH0KLSAgICBlbmNv
ZGVyU3RhdFZpZXcuc2V0VGV4dChlbmNvZGVyU3RhdC50b1N0cmluZygpKTsKLSAgfQotfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlZXJDb25uZWN0aW9uQ2xpZW50LmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlZXJDb25uZWN0aW9u
Q2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9QZWVyQ29ubmVjdGlvbkNsaWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTE2OCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuRW52
aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9y
dCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlv
LklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZh
LnV0aWwuRW51bVNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVGltZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRp
bWVyVGFzazsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQg
amF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGph
dmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwot
aW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVy
czsKLWltcG9ydCBvcmcud2VicnRjLkF1ZGlvU291cmNlOwotaW1wb3J0IG9yZy53ZWJydGMuQXVk
aW9UcmFjazsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYVZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5EYXRhQ2hhbm5lbDsKLWltcG9ydCBvcmcud2VicnRjLkVnbEJhc2U7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwot
aW1wb3J0IG9yZy53ZWJydGMuTWVkaWFDb25zdHJhaW50czsKLWltcG9ydCBvcmcud2VicnRjLk1l
ZGlhU3RyZWFtOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb247Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5QZWVyQ29ubmVjdGlvbi5JY2VDb25uZWN0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5QZWVyQ29ubmVjdGlvbkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SdHBQYXJhbWV0
ZXJzOwotaW1wb3J0IG9yZy53ZWJydGMuUnRwU2VuZGVyOwotaW1wb3J0IG9yZy53ZWJydGMuU2Rw
T2JzZXJ2ZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5TdGF0c09ic2VydmVyOwotaW1wb3J0IG9yZy53ZWJydGMuU3RhdHNSZXBvcnQ7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0NhcHR1cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlk
ZW9SZW5kZXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvU291cmNlOwotaW1wb3J0IG9yZy53
ZWJydGMuVmlkZW9UcmFjazsKLWltcG9ydCBvcmcud2VicnRjLnZvaWNlZW5naW5lLldlYlJ0Y0F1
ZGlvTWFuYWdlcjsKLWltcG9ydCBvcmcud2VicnRjLnZvaWNlZW5naW5lLldlYlJ0Y0F1ZGlvVXRp
bHM7Ci0KLS8qKgotICogUGVlciBjb25uZWN0aW9uIGNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAq
Ci0gKiA8cD5BbGwgcHVibGljIG1ldGhvZHMgYXJlIHJvdXRlZCB0byBsb2NhbCBsb29wZXIgdGhy
ZWFkLgotICogQWxsIFBlZXJDb25uZWN0aW9uRXZlbnRzIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBm
cm9tIHRoZSBzYW1lIGxvb3BlciB0aHJlYWQuCi0gKiBUaGlzIGNsYXNzIGlzIGEgc2luZ2xldG9u
LgotICovCi1wdWJsaWMgY2xhc3MgUGVlckNvbm5lY3Rpb25DbGllbnQgewotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIFN0cmluZyBWSURFT19UUkFDS19JRCA9ICJBUkRBTVN2MCI7Ci0gIHB1YmxpYyBz
dGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX1RSQUNLX0lEID0gIkFSREFNU2EwIjsKLSAgcHVibGlj
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVklERU9fVFJBQ0tfVFlQRSA9ICJ2aWRlbyI7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUENSVENDbGllbnQiOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgVklERU9fQ09ERUNfVlA4ID0gIlZQOCI7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIFN0cmluZyBWSURFT19DT0RFQ19WUDkgPSAiVlA5IjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFZJREVPX0NPREVDX0gyNjQgPSAiSDI2NCI7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIFN0cmluZyBBVURJT19DT0RFQ19PUFVTID0gIm9wdXMiOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fQ09ERUNfSVNBQyA9ICJJU0FDIjsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFZJREVPX0NPREVDX1BBUkFNX1NUQVJUX0JJVFJBVEUgPSAieC1n
b29nbGUtc3RhcnQtYml0cmF0ZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJ
T19DT0RFQ19QQVJBTV9CSVRSQVRFID0gIm1heGF2ZXJhZ2ViaXRyYXRlIjsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0VDSE9fQ0FOQ0VMTEFUSU9OX0NPTlNUUkFJTlQgPSAi
Z29vZ0VjaG9DYW5jZWxsYXRpb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVE
SU9fQVVUT19HQUlOX0NPTlRST0xfQ09OU1RSQUlOVCA9ICJnb29nQXV0b0dhaW5Db250cm9sIjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0hJR0hfUEFTU19GSUxURVJfQ09O
U1RSQUlOVCA9ICJnb29nSGlnaHBhc3NGaWx0ZXIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgQVVESU9fTk9JU0VfU1VQUFJFU1NJT05fQ09OU1RSQUlOVCA9ICJnb29nTm9pc2VTdXBw
cmVzc2lvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19MRVZFTF9DT05U
Uk9MX0NPTlNUUkFJTlQgPSAibGV2ZWxDb250cm9sIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIERUTFNfU1JUUF9LRVlfQUdSRUVNRU5UX0NPTlNUUkFJTlQgPSAiRHRsc1NydHBLZXlB
Z3JlZW1lbnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSERfVklERU9fV0lEVEggPSAx
MjgwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSERfVklERU9fSEVJR0hUID0gNzIwOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlBTX0lOX0tCUFMgPSAxMDAwOwotCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFBlZXJDb25uZWN0aW9uQ2xpZW50IGluc3RhbmNlID0gbmV3IFBlZXJD
b25uZWN0aW9uQ2xpZW50KCk7Ci0gIHByaXZhdGUgZmluYWwgUENPYnNlcnZlciBwY09ic2VydmVy
ID0gbmV3IFBDT2JzZXJ2ZXIoKTsKLSAgcHJpdmF0ZSBmaW5hbCBTRFBPYnNlcnZlciBzZHBPYnNl
cnZlciA9IG5ldyBTRFBPYnNlcnZlcigpOwotICBwcml2YXRlIGZpbmFsIFNjaGVkdWxlZEV4ZWN1
dG9yU2VydmljZSBleGVjdXRvcjsKLQotICBwcml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgcHJp
dmF0ZSBQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZmFjdG9yeTsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVj
dGlvbiBwZWVyQ29ubmVjdGlvbjsKLSAgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0
aW9ucyA9IG51bGw7Ci0gIHByaXZhdGUgQXVkaW9Tb3VyY2UgYXVkaW9Tb3VyY2U7Ci0gIHByaXZh
dGUgVmlkZW9Tb3VyY2UgdmlkZW9Tb3VyY2U7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aWRlb0NhbGxF
bmFibGVkOwotICBwcml2YXRlIGJvb2xlYW4gcHJlZmVySXNhYzsKLSAgcHJpdmF0ZSBTdHJpbmcg
cHJlZmVycmVkVmlkZW9Db2RlYzsKLSAgcHJpdmF0ZSBib29sZWFuIHZpZGVvQ2FwdHVyZXJTdG9w
cGVkOwotICBwcml2YXRlIGJvb2xlYW4gaXNFcnJvcjsKLSAgcHJpdmF0ZSBUaW1lciBzdGF0c1Rp
bWVyOwotICBwcml2YXRlIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGxvY2FsUmVuZGVyOwotICBw
cml2YXRlIExpc3Q8VmlkZW9SZW5kZXJlci5DYWxsYmFja3M+IHJlbW90ZVJlbmRlcnM7Ci0gIHBy
aXZhdGUgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzOwotICBwcml2YXRl
IE1lZGlhQ29uc3RyYWludHMgcGNDb25zdHJhaW50czsKLSAgcHJpdmF0ZSBpbnQgdmlkZW9XaWR0
aDsKLSAgcHJpdmF0ZSBpbnQgdmlkZW9IZWlnaHQ7Ci0gIHByaXZhdGUgaW50IHZpZGVvRnBzOwot
ICBwcml2YXRlIE1lZGlhQ29uc3RyYWludHMgYXVkaW9Db25zdHJhaW50czsKLSAgcHJpdmF0ZSBQ
YXJjZWxGaWxlRGVzY3JpcHRvciBhZWNEdW1wRmlsZURlc2NyaXB0b3I7Ci0gIHByaXZhdGUgTWVk
aWFDb25zdHJhaW50cyBzZHBNZWRpYUNvbnN0cmFpbnRzOwotICBwcml2YXRlIFBlZXJDb25uZWN0
aW9uUGFyYW1ldGVycyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gIC8vIFF1ZXVlZCByZW1v
dGUgSUNFIGNhbmRpZGF0ZXMgYXJlIGNvbnN1bWVkIG9ubHkgYWZ0ZXIgYm90aCBsb2NhbCBhbmQK
LSAgLy8gcmVtb3RlIGRlc2NyaXB0aW9ucyBhcmUgc2V0LiBTaW1pbGFybHkgbG9jYWwgSUNFIGNh
bmRpZGF0ZXMgYXJlIHNlbnQgdG8KLSAgLy8gcmVtb3RlIHBlZXIgYWZ0ZXIgYm90aCBsb2NhbCBh
bmQgcmVtb3RlIGRlc2NyaXB0aW9uIGFyZSBzZXQuCi0gIHByaXZhdGUgTGlua2VkTGlzdDxJY2VD
YW5kaWRhdGU+IHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXM7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rp
b25FdmVudHMgZXZlbnRzOwotICBwcml2YXRlIGJvb2xlYW4gaXNJbml0aWF0b3I7Ci0gIHByaXZh
dGUgU2Vzc2lvbkRlc2NyaXB0aW9uIGxvY2FsU2RwOyAvLyBlaXRoZXIgb2ZmZXIgb3IgYW5zd2Vy
IFNEUAotICBwcml2YXRlIE1lZGlhU3RyZWFtIG1lZGlhU3RyZWFtOwotICBwcml2YXRlIFZpZGVv
Q2FwdHVyZXIgdmlkZW9DYXB0dXJlcjsKLSAgLy8gZW5hYmxlVmlkZW8gaXMgc2V0IHRvIHRydWUg
aWYgdmlkZW8gc2hvdWxkIGJlIHJlbmRlcmVkIGFuZCBzZW50LgotICBwcml2YXRlIGJvb2xlYW4g
cmVuZGVyVmlkZW87Ci0gIHByaXZhdGUgVmlkZW9UcmFjayBsb2NhbFZpZGVvVHJhY2s7Ci0gIHBy
aXZhdGUgVmlkZW9UcmFjayByZW1vdGVWaWRlb1RyYWNrOwotICBwcml2YXRlIFJ0cFNlbmRlciBs
b2NhbFZpZGVvU2VuZGVyOwotICAvLyBlbmFibGVBdWRpbyBpcyBzZXQgdG8gdHJ1ZSBpZiBhdWRp
byBzaG91bGQgYmUgc2VudC4KLSAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZUF1ZGlvOwotICBwcml2
YXRlIEF1ZGlvVHJhY2sgbG9jYWxBdWRpb1RyYWNrOwotCi0gIC8qKgotICAgKiBQZWVyIGNvbm5l
Y3Rpb24gcGFyYW1ldGVycy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgY2xhc3MgUGVlckNvbm5l
Y3Rpb25QYXJhbWV0ZXJzIHsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2aWRlb0NhbGxFbmFi
bGVkOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGxvb3BiYWNrOwotICAgIHB1YmxpYyBmaW5h
bCBib29sZWFuIHRyYWNpbmc7Ci0gICAgcHVibGljIGZpbmFsIGludCB2aWRlb1dpZHRoOwotICAg
IHB1YmxpYyBmaW5hbCBpbnQgdmlkZW9IZWlnaHQ7Ci0gICAgcHVibGljIGZpbmFsIGludCB2aWRl
b0ZwczsKLSAgICBwdWJsaWMgZmluYWwgaW50IHZpZGVvTWF4Qml0cmF0ZTsKLSAgICBwdWJsaWMg
ZmluYWwgU3RyaW5nIHZpZGVvQ29kZWM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmlkZW9D
b2RlY0h3QWNjZWxlcmF0aW9uOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgYXVkaW9TdGFydEJpdHJh
dGU7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBhdWRpb0NvZGVjOwotICAgIHB1YmxpYyBmaW5h
bCBib29sZWFuIG5vQXVkaW9Qcm9jZXNzaW5nOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGFl
Y0R1bXA7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gdXNlT3BlblNMRVM7Ci0gICAgcHVibGlj
IGZpbmFsIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5BRUM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xl
YW4gZGlzYWJsZUJ1aWx0SW5BR0M7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZGlzYWJsZUJ1
aWx0SW5OUzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBlbmFibGVMZXZlbENvbnRyb2w7Ci0K
LSAgICBwdWJsaWMgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzKGJvb2xlYW4gdmlkZW9DYWxsRW5h
YmxlZCwgYm9vbGVhbiBsb29wYmFjaywgYm9vbGVhbiB0cmFjaW5nLAotICAgICAgICBpbnQgdmlk
ZW9XaWR0aCwgaW50IHZpZGVvSGVpZ2h0LCBpbnQgdmlkZW9GcHMsIGludCB2aWRlb01heEJpdHJh
dGUsIFN0cmluZyB2aWRlb0NvZGVjLAotICAgICAgICBib29sZWFuIHZpZGVvQ29kZWNId0FjY2Vs
ZXJhdGlvbiwgaW50IGF1ZGlvU3RhcnRCaXRyYXRlLCBTdHJpbmcgYXVkaW9Db2RlYywKLSAgICAg
ICAgYm9vbGVhbiBub0F1ZGlvUHJvY2Vzc2luZywgYm9vbGVhbiBhZWNEdW1wLCBib29sZWFuIHVz
ZU9wZW5TTEVTLCBib29sZWFuIGRpc2FibGVCdWlsdEluQUVDLAotICAgICAgICBib29sZWFuIGRp
c2FibGVCdWlsdEluQUdDLCBib29sZWFuIGRpc2FibGVCdWlsdEluTlMsIGJvb2xlYW4gZW5hYmxl
TGV2ZWxDb250cm9sKSB7Ci0gICAgICB0aGlzLnZpZGVvQ2FsbEVuYWJsZWQgPSB2aWRlb0NhbGxF
bmFibGVkOwotICAgICAgdGhpcy5sb29wYmFjayA9IGxvb3BiYWNrOwotICAgICAgdGhpcy50cmFj
aW5nID0gdHJhY2luZzsKLSAgICAgIHRoaXMudmlkZW9XaWR0aCA9IHZpZGVvV2lkdGg7Ci0gICAg
ICB0aGlzLnZpZGVvSGVpZ2h0ID0gdmlkZW9IZWlnaHQ7Ci0gICAgICB0aGlzLnZpZGVvRnBzID0g
dmlkZW9GcHM7Ci0gICAgICB0aGlzLnZpZGVvTWF4Qml0cmF0ZSA9IHZpZGVvTWF4Qml0cmF0ZTsK
LSAgICAgIHRoaXMudmlkZW9Db2RlYyA9IHZpZGVvQ29kZWM7Ci0gICAgICB0aGlzLnZpZGVvQ29k
ZWNId0FjY2VsZXJhdGlvbiA9IHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbjsKLSAgICAgIHRoaXMu
YXVkaW9TdGFydEJpdHJhdGUgPSBhdWRpb1N0YXJ0Qml0cmF0ZTsKLSAgICAgIHRoaXMuYXVkaW9D
b2RlYyA9IGF1ZGlvQ29kZWM7Ci0gICAgICB0aGlzLm5vQXVkaW9Qcm9jZXNzaW5nID0gbm9BdWRp
b1Byb2Nlc3Npbmc7Ci0gICAgICB0aGlzLmFlY0R1bXAgPSBhZWNEdW1wOwotICAgICAgdGhpcy51
c2VPcGVuU0xFUyA9IHVzZU9wZW5TTEVTOwotICAgICAgdGhpcy5kaXNhYmxlQnVpbHRJbkFFQyA9
IGRpc2FibGVCdWlsdEluQUVDOwotICAgICAgdGhpcy5kaXNhYmxlQnVpbHRJbkFHQyA9IGRpc2Fi
bGVCdWlsdEluQUdDOwotICAgICAgdGhpcy5kaXNhYmxlQnVpbHRJbk5TID0gZGlzYWJsZUJ1aWx0
SW5OUzsKLSAgICAgIHRoaXMuZW5hYmxlTGV2ZWxDb250cm9sID0gZW5hYmxlTGV2ZWxDb250cm9s
OwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBQZWVyIGNvbm5lY3Rpb24gZXZlbnRzLgotICAg
Ki8KLSAgcHVibGljIGludGVyZmFjZSBQZWVyQ29ubmVjdGlvbkV2ZW50cyB7Ci0gICAgLyoqCi0g
ICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBsb2NhbCBTRFAgaXMgY3JlYXRlZCBhbmQgc2V0Lgot
ICAgICAqLwotICAgIHZvaWQgb25Mb2NhbERlc2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlw
dGlvbiBzZHApOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBsb2NhbCBJ
Y2UgY2FuZGlkYXRlIGlzIGdlbmVyYXRlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uSWNlQ2FuZGlk
YXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpOwotCi0gICAgLyoqCi0gICAgICogQ2Fs
bGJhY2sgZmlyZWQgb25jZSBsb2NhbCBJQ0UgY2FuZGlkYXRlcyBhcmUgcmVtb3ZlZC4KLSAgICAg
Ki8KLSAgICB2b2lkIG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10g
Y2FuZGlkYXRlcyk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGNvbm5l
Y3Rpb24gaXMgZXN0YWJsaXNoZWQgKEljZUNvbm5lY3Rpb25TdGF0ZSBpcwotICAgICAqIENPTk5F
Q1RFRCkuCi0gICAgICovCi0gICAgdm9pZCBvbkljZUNvbm5lY3RlZCgpOwotCi0gICAgLyoqCi0g
ICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBjb25uZWN0aW9uIGlzIGNsb3NlZCAoSWNlQ29ubmVj
dGlvblN0YXRlIGlzCi0gICAgICogRElTQ09OTkVDVEVEKS4KLSAgICAgKi8KLSAgICB2b2lkIG9u
SWNlRGlzY29ubmVjdGVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNl
IHBlZXIgY29ubmVjdGlvbiBpcyBjbG9zZWQuCi0gICAgICovCi0gICAgdm9pZCBvblBlZXJDb25u
ZWN0aW9uQ2xvc2VkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHBl
ZXIgY29ubmVjdGlvbiBzdGF0aXN0aWNzIGlzIHJlYWR5LgotICAgICAqLwotICAgIHZvaWQgb25Q
ZWVyQ29ubmVjdGlvblN0YXRzUmVhZHkoZmluYWwgU3RhdHNSZXBvcnRbXSByZXBvcnRzKTsKLQot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcGVlciBjb25uZWN0aW9uIGVycm9y
IGhhcHBlbmVkLgotICAgICAqLwotICAgIHZvaWQgb25QZWVyQ29ubmVjdGlvbkVycm9yKGZpbmFs
IFN0cmluZyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uQ2xp
ZW50KCkgewotICAgIC8vIEV4ZWN1dG9yIHRocmVhZCBpcyBzdGFydGVkIG9uY2UgaW4gcHJpdmF0
ZSBjdG9yIGFuZCBpcyB1c2VkIGZvciBhbGwKLSAgICAvLyBwZWVyIGNvbm5lY3Rpb24gQVBJIGNh
bGxzIHRvIGVuc3VyZSBuZXcgcGVlciBjb25uZWN0aW9uIGZhY3RvcnkgaXMKLSAgICAvLyBjcmVh
dGVkIG9uIHRoZSBzYW1lIHRocmVhZCBhcyBwcmV2aW91c2x5IGRlc3Ryb3llZCBmYWN0b3J5Lgot
ICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZFNjaGVkdWxlZEV4ZWN1dG9y
KCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFBlZXJDb25uZWN0aW9uQ2xpZW50IGdldEluc3Rh
bmNlKCkgewotICAgIHJldHVybiBpbnN0YW5jZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBl
ZXJDb25uZWN0aW9uRmFjdG9yeU9wdGlvbnMoUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMg
b3B0aW9ucykgewotICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoZmluYWwgQ29udGV4dCBjb250ZXh0LAot
ICAgICAgZmluYWwgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycywgZmluYWwgUGVlckNvbm5lY3Rpb25FdmVudHMgZXZlbnRzKSB7Ci0gICAgdGhpcy5wZWVy
Q29ubmVjdGlvblBhcmFtZXRlcnMgPSBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gICAgdGhp
cy5ldmVudHMgPSBldmVudHM7Ci0gICAgdmlkZW9DYWxsRW5hYmxlZCA9IHBlZXJDb25uZWN0aW9u
UGFyYW1ldGVycy52aWRlb0NhbGxFbmFibGVkOwotICAgIC8vIFJlc2V0IHZhcmlhYmxlcyB0byBp
bml0aWFsIHN0YXRlcy4KLSAgICB0aGlzLmNvbnRleHQgPSBudWxsOwotICAgIGZhY3RvcnkgPSBu
dWxsOwotICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDsKLSAgICBwcmVmZXJJc2FjID0gZmFsc2U7
Ci0gICAgdmlkZW9DYXB0dXJlclN0b3BwZWQgPSBmYWxzZTsKLSAgICBpc0Vycm9yID0gZmFsc2U7
Ci0gICAgcXVldWVkUmVtb3RlQ2FuZGlkYXRlcyA9IG51bGw7Ci0gICAgbG9jYWxTZHAgPSBudWxs
OyAvLyBlaXRoZXIgb2ZmZXIgb3IgYW5zd2VyIFNEUAotICAgIG1lZGlhU3RyZWFtID0gbnVsbDsK
LSAgICB2aWRlb0NhcHR1cmVyID0gbnVsbDsKLSAgICByZW5kZXJWaWRlbyA9IHRydWU7Ci0gICAg
bG9jYWxWaWRlb1RyYWNrID0gbnVsbDsKLSAgICByZW1vdGVWaWRlb1RyYWNrID0gbnVsbDsKLSAg
ICBsb2NhbFZpZGVvU2VuZGVyID0gbnVsbDsKLSAgICBlbmFibGVBdWRpbyA9IHRydWU7Ci0gICAg
bG9jYWxBdWRpb1RyYWNrID0gbnVsbDsKLSAgICBzdGF0c1RpbWVyID0gbmV3IFRpbWVyKCk7Ci0K
LSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjcmVhdGVQZWVyQ29ubmVjdGlvbkZh
Y3RvcnlJbnRlcm5hbChjb250ZXh0KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGZpbmFsIEVnbEJhc2UuQ29udGV4dCByZW5kZXJF
R0xDb250ZXh0LAotICAgICAgZmluYWwgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgbG9jYWxSZW5k
ZXIsIGZpbmFsIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbW90ZVJlbmRlciwKLSAgICAgIGZp
bmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciwgZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVy
cyBzaWduYWxpbmdQYXJhbWV0ZXJzKSB7Ci0gICAgY3JlYXRlUGVlckNvbm5lY3Rpb24ocmVuZGVy
RUdMQ29udGV4dCwgbG9jYWxSZW5kZXIsIENvbGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QocmVtb3Rl
UmVuZGVyKSwKLSAgICAgICAgdmlkZW9DYXB0dXJlciwgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0g
IH0KLSAgcHVibGljIHZvaWQgY3JlYXRlUGVlckNvbm5lY3Rpb24oZmluYWwgRWdsQmFzZS5Db250
ZXh0IHJlbmRlckVHTENvbnRleHQsCi0gICAgICBmaW5hbCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNr
cyBsb2NhbFJlbmRlciwgZmluYWwgTGlzdDxWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4gcmVtb3Rl
UmVuZGVycywKLSAgICAgIGZpbmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciwgZmluYWwg
U2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzKSB7Ci0gICAgaWYgKHBlZXJD
b25uZWN0aW9uUGFyYW1ldGVycyA9PSBudWxsKSB7Ci0gICAgICBMb2cuZShUQUcsICJDcmVhdGlu
ZyBwZWVyIGNvbm5lY3Rpb24gd2l0aG91dCBpbml0aWFsaXppbmcgZmFjdG9yeS4iKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy5sb2NhbFJlbmRlciA9IGxvY2FsUmVuZGVyOwotICAg
IHRoaXMucmVtb3RlUmVuZGVycyA9IHJlbW90ZVJlbmRlcnM7Ci0gICAgdGhpcy52aWRlb0NhcHR1
cmVyID0gdmlkZW9DYXB0dXJlcjsKLSAgICB0aGlzLnNpZ25hbGluZ1BhcmFtZXRlcnMgPSBzaWdu
YWxpbmdQYXJhbWV0ZXJzOwotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHRyeSB7
Ci0gICAgICAgICAgY3JlYXRlTWVkaWFDb25zdHJhaW50c0ludGVybmFsKCk7Ci0gICAgICAgICAg
Y3JlYXRlUGVlckNvbm5lY3Rpb25JbnRlcm5hbChyZW5kZXJFR0xDb250ZXh0KTsKLSAgICAgICAg
fSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRv
IGNyZWF0ZSBwZWVyIGNvbm5lY3Rpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAg
dGhyb3cgZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgY2xvc2UoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY2xvc2VJbnRl
cm5hbCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNWaWRl
b0NhbGxFbmFibGVkKCkgewotICAgIHJldHVybiB2aWRlb0NhbGxFbmFibGVkOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIGNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVybmFsKENvbnRleHQg
Y29udGV4dCkgewotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplSW50ZXJuYWxU
cmFjZXIoKTsKLSAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnRyYWNpbmcpIHsKLSAg
ICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5zdGFydEludGVybmFsVHJhY2luZ0NhcHR1cmUoCi0g
ICAgICAgICAgRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlRGlyZWN0b3J5KCkuZ2V0QWJz
b2x1dGVQYXRoKCkgKyBGaWxlLnNlcGFyYXRvcgotICAgICAgICAgICsgIndlYnJ0Yy10cmFjZS50
eHQiKTsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLAotICAgICAgICAiQ3JlYXRlIHBlZXIgY29ubmVj
dGlvbiBmYWN0b3J5LiBVc2UgdmlkZW86ICIgKyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlk
ZW9DYWxsRW5hYmxlZCk7Ci0gICAgaXNFcnJvciA9IGZhbHNlOwotCi0gICAgLy8gSW5pdGlhbGl6
ZSBmaWVsZCB0cmlhbHMuCi0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVGaWVs
ZFRyaWFscygiIik7Ci0KLSAgICAvLyBDaGVjayBwcmVmZXJyZWQgdmlkZW8gY29kZWMuCi0gICAg
cHJlZmVycmVkVmlkZW9Db2RlYyA9IFZJREVPX0NPREVDX1ZQODsKLSAgICBpZiAodmlkZW9DYWxs
RW5hYmxlZCAmJiBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9Db2RlYyAhPSBudWxsKSB7
Ci0gICAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvQ29kZWMuZXF1YWxzKFZJ
REVPX0NPREVDX1ZQOSkpIHsKLSAgICAgICAgcHJlZmVycmVkVmlkZW9Db2RlYyA9IFZJREVPX0NP
REVDX1ZQOTsKLSAgICAgIH0gZWxzZSBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVv
Q29kZWMuZXF1YWxzKFZJREVPX0NPREVDX0gyNjQpKSB7Ci0gICAgICAgIHByZWZlcnJlZFZpZGVv
Q29kZWMgPSBWSURFT19DT0RFQ19IMjY0OwotICAgICAgfQotICAgIH0KLSAgICBMb2cuZChUQUcs
ICJQZXJlZmVycmVkIHZpZGVvIGNvZGVjOiAiICsgcHJlZmVycmVkVmlkZW9Db2RlYyk7Ci0KLSAg
ICAvLyBDaGVjayBpZiBJU0FDIGlzIHVzZWQgYnkgZGVmYXVsdC4KLSAgICBwcmVmZXJJc2FjID0g
cGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmF1ZGlvQ29kZWMgIT0gbnVsbAotICAgICAgICAmJiBw
ZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuYXVkaW9Db2RlYy5lcXVhbHMoQVVESU9fQ09ERUNfSVNB
Qyk7Ci0KLSAgICAvLyBFbmFibGUvZGlzYWJsZSBPcGVuU0wgRVMgcGxheWJhY2suCi0gICAgaWYg
KCFwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudXNlT3BlblNMRVMpIHsKLSAgICAgIExvZy5kKFRB
RywgIkRpc2FibGUgT3BlblNMIEVTIGF1ZGlvIGV2ZW4gaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7
Ci0gICAgICBXZWJSdGNBdWRpb01hbmFnZXIuc2V0QmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNV
c2FnZSh0cnVlIC8qIGVuYWJsZSAqLyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywg
IkFsbG93IE9wZW5TTCBFUyBhdWRpbyBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdl
YlJ0Y0F1ZGlvTWFuYWdlci5zZXRCbGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlKGZhbHNl
KTsKLSAgICB9Ci0KLSAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmRpc2FibGVCdWls
dEluQUVDKSB7Ci0gICAgICBMb2cuZChUQUcsICJEaXNhYmxlIGJ1aWx0LWluIEFFQyBldmVuIGlm
IGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNC
YXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cu
ZChUQUcsICJFbmFibGUgYnVpbHQtaW4gQUVDIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAg
ICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmRpc2FibGVC
dWlsdEluQUdDKSB7Ci0gICAgICBMb2cuZChUQUcsICJEaXNhYmxlIGJ1aWx0LWluIEFHQyBldmVu
IGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJS
dGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBM
b2cuZChUQUcsICJFbmFibGUgYnVpbHQtaW4gQUdDIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwot
ICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9s
KGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmRpc2Fi
bGVCdWlsdEluTlMpIHsKLSAgICAgIExvZy5kKFRBRywgIkRpc2FibGUgYnVpbHQtaW4gTlMgZXZl
biBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2Vi
UnRjQmFzZWROb2lzZVN1cHByZXNzb3IodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5k
KFRBRywgIkVuYWJsZSBidWlsdC1pbiBOUyBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAg
IFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoZmFsc2UpOwot
ICAgIH0KLQotICAgIC8vIENyZWF0ZSBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeS4KLSAgICBpZiAo
IVBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplQW5kcm9pZEdsb2JhbHMoCi0gICAgICAg
ICAgICBjb250ZXh0LCB0cnVlLCB0cnVlLCBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9D
b2RlY0h3QWNjZWxlcmF0aW9uKSkgewotICAgICAgZXZlbnRzLm9uUGVlckNvbm5lY3Rpb25FcnJv
cigiRmFpbGVkIHRvIGluaXRpYWxpemVBbmRyb2lkR2xvYmFscyIpOwotICAgIH0KLSAgICBpZiAo
b3B0aW9ucyAhPSBudWxsKSB7Ci0gICAgICBMb2cuZChUQUcsICJGYWN0b3J5IG5ldHdvcmtJZ25v
cmVNYXNrIG9wdGlvbjogIiArIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2spOwotICAgIH0KLSAg
ICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIGZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rp
b25GYWN0b3J5KG9wdGlvbnMpOwotICAgIExvZy5kKFRBRywgIlBlZXIgY29ubmVjdGlvbiBmYWN0
b3J5IGNyZWF0ZWQuIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlTWVkaWFDb25zdHJh
aW50c0ludGVybmFsKCkgewotICAgIC8vIENyZWF0ZSBwZWVyIGNvbm5lY3Rpb24gY29uc3RyYWlu
dHMuCi0gICAgcGNDb25zdHJhaW50cyA9IG5ldyBNZWRpYUNvbnN0cmFpbnRzKCk7Ci0gICAgLy8g
RW5hYmxlIERUTFMgZm9yIG5vcm1hbCBjYWxscyBhbmQgZGlzYWJsZSBmb3IgbG9vcGJhY2sgY2Fs
bHMuCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAg
cGNDb25zdHJhaW50cy5vcHRpb25hbC5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWlu
dHMuS2V5VmFsdWVQYWlyKERUTFNfU1JUUF9LRVlfQUdSRUVNRU5UX0NPTlNUUkFJTlQsICJmYWxz
ZSIpKTsKLSAgICB9IGVsc2UgewotICAgICAgcGNDb25zdHJhaW50cy5vcHRpb25hbC5hZGQoCi0g
ICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKERUTFNfU1JUUF9LRVlf
QUdSRUVNRU5UX0NPTlNUUkFJTlQsICJ0cnVlIikpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlm
IHRoZXJlIGlzIGEgY2FtZXJhIG9uIGRldmljZSBhbmQgZGlzYWJsZSB2aWRlbyBjYWxsIGlmIG5v
dC4KLSAgICBpZiAodmlkZW9DYXB0dXJlciA9PSBudWxsKSB7Ci0gICAgICBMb2cudyhUQUcsICJO
byBjYW1lcmEgb24gZGV2aWNlLiBTd2l0Y2ggdG8gYXVkaW8gb25seSBjYWxsLiIpOwotICAgICAg
dmlkZW9DYWxsRW5hYmxlZCA9IGZhbHNlOwotICAgIH0KLSAgICAvLyBDcmVhdGUgdmlkZW8gY29u
c3RyYWludHMgaWYgdmlkZW8gY2FsbCBpcyBlbmFibGVkLgotICAgIGlmICh2aWRlb0NhbGxFbmFi
bGVkKSB7Ci0gICAgICB2aWRlb1dpZHRoID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVv
V2lkdGg7Ci0gICAgICB2aWRlb0hlaWdodCA9IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRl
b0hlaWdodDsKLSAgICAgIHZpZGVvRnBzID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVv
RnBzOwotCi0gICAgICAvLyBJZiB2aWRlbyByZXNvbHV0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGRl
ZmF1bHQgdG8gSEQuCi0gICAgICBpZiAodmlkZW9XaWR0aCA9PSAwIHx8IHZpZGVvSGVpZ2h0ID09
IDApIHsKLSAgICAgICAgdmlkZW9XaWR0aCA9IEhEX1ZJREVPX1dJRFRIOwotICAgICAgICB2aWRl
b0hlaWdodCA9IEhEX1ZJREVPX0hFSUdIVDsKLSAgICAgIH0KLQotICAgICAgLy8gSWYgZnBzIGlz
IG5vdCBzcGVjaWZpZWQsIGRlZmF1bHQgdG8gMzAuCi0gICAgICBpZiAodmlkZW9GcHMgPT0gMCkg
ewotICAgICAgICB2aWRlb0ZwcyA9IDMwOwotICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywg
IkNhcHR1cmluZyBmb3JtYXQ6ICIgKyB2aWRlb1dpZHRoICsgIngiICsgdmlkZW9IZWlnaHQgKyAi
QCIgKyB2aWRlb0Zwcyk7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGF1ZGlvIGNvbnN0cmFpbnRz
LgotICAgIGF1ZGlvQ29uc3RyYWludHMgPSBuZXcgTWVkaWFDb25zdHJhaW50cygpOwotICAgIC8v
IGFkZGVkIGZvciBhdWRpbyBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMKLSAgICBpZiAocGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzLm5vQXVkaW9Qcm9jZXNzaW5nKSB7Ci0gICAgICBMb2cuZChUQUcs
ICJEaXNhYmxpbmcgYXVkaW8gcHJvY2Vzc2luZyIpOwotICAgICAgYXVkaW9Db25zdHJhaW50cy5t
YW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFp
cihBVURJT19FQ0hPX0NBTkNFTExBVElPTl9DT05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAgICBh
dWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3Ry
YWludHMuS2V5VmFsdWVQYWlyKEFVRElPX0FVVE9fR0FJTl9DT05UUk9MX0NPTlNUUkFJTlQsICJm
YWxzZSIpKTsKLSAgICAgIGF1ZGlvQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAg
ICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoQVVESU9fSElHSF9QQVNTX0ZJTFRF
Ul9DT05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAgICBhdWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9y
eS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKEFVRElP
X05PSVNFX1NVUFBSRVNTSU9OX0NPTlNUUkFJTlQsICJmYWxzZSIpKTsKLSAgICB9Ci0gICAgaWYg
KHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5lbmFibGVMZXZlbENvbnRyb2wpIHsKLSAgICAgIExv
Zy5kKFRBRywgIkVuYWJsaW5nIGxldmVsIGNvbnRyb2wuIik7Ci0gICAgICBhdWRpb0NvbnN0cmFp
bnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFs
dWVQYWlyKEFVRElPX0xFVkVMX0NPTlRST0xfQ09OU1RSQUlOVCwgInRydWUiKSk7Ci0gICAgfQot
ICAgIC8vIENyZWF0ZSBTRFAgY29uc3RyYWludHMuCi0gICAgc2RwTWVkaWFDb25zdHJhaW50cyA9
IG5ldyBNZWRpYUNvbnN0cmFpbnRzKCk7Ci0gICAgc2RwTWVkaWFDb25zdHJhaW50cy5tYW5kYXRv
cnkuYWRkKAotICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoIk9mZmVy
VG9SZWNlaXZlQXVkaW8iLCAidHJ1ZSIpKTsKLSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCB8fCBw
ZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgIHNkcE1lZGlhQ29uc3Ry
YWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlW
YWx1ZVBhaXIoIk9mZmVyVG9SZWNlaXZlVmlkZW8iLCAidHJ1ZSIpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgc2RwTWVkaWFDb25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBN
ZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcigiT2ZmZXJUb1JlY2VpdmVWaWRlbyIsICJmYWxz
ZSIpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3JlYXRlUGVlckNvbm5lY3Rpb25J
bnRlcm5hbChFZ2xCYXNlLkNvbnRleHQgcmVuZGVyRUdMQ29udGV4dCkgewotICAgIGlmIChmYWN0
b3J5ID09IG51bGwgfHwgaXNFcnJvcikgewotICAgICAgTG9nLmUoVEFHLCAiUGVlcmNvbm5lY3Rp
b24gZmFjdG9yeSBpcyBub3QgY3JlYXRlZCIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBM
b2cuZChUQUcsICJDcmVhdGUgcGVlciBjb25uZWN0aW9uLiIpOwotCi0gICAgTG9nLmQoVEFHLCAi
UENDb25zdHJhaW50czogIiArIHBjQ29uc3RyYWludHMudG9TdHJpbmcoKSk7Ci0gICAgcXVldWVk
UmVtb3RlQ2FuZGlkYXRlcyA9IG5ldyBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4oKTsKLQotICAg
IGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICBMb2cuZChUQUcsICJFR0xDb250ZXh0OiAi
ICsgcmVuZGVyRUdMQ29udGV4dCk7Ci0gICAgICBmYWN0b3J5LnNldFZpZGVvSHdBY2NlbGVyYXRp
b25PcHRpb25zKHJlbmRlckVHTENvbnRleHQsIHJlbmRlckVHTENvbnRleHQpOwotICAgIH0KLQot
ICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24gcnRjQ29uZmlnID0KLSAgICAgICAg
bmV3IFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZpZ3VyYXRpb24oc2lnbmFsaW5nUGFyYW1ldGVycy5p
Y2VTZXJ2ZXJzKTsKLSAgICAvLyBUQ1AgY2FuZGlkYXRlcyBhcmUgb25seSB1c2VmdWwgd2hlbiBj
b25uZWN0aW5nIHRvIGEgc2VydmVyIHRoYXQgc3VwcG9ydHMKLSAgICAvLyBJQ0UtVENQLgotICAg
IHJ0Y0NvbmZpZy50Y3BDYW5kaWRhdGVQb2xpY3kgPSBQZWVyQ29ubmVjdGlvbi5UY3BDYW5kaWRh
dGVQb2xpY3kuRElTQUJMRUQ7Ci0gICAgcnRjQ29uZmlnLmJ1bmRsZVBvbGljeSA9IFBlZXJDb25u
ZWN0aW9uLkJ1bmRsZVBvbGljeS5NQVhCVU5ETEU7Ci0gICAgcnRjQ29uZmlnLnJ0Y3BNdXhQb2xp
Y3kgPSBQZWVyQ29ubmVjdGlvbi5SdGNwTXV4UG9saWN5LlJFUVVJUkU7Ci0gICAgcnRjQ29uZmln
LmNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSA9IFBlZXJDb25uZWN0aW9uLkNvbnRpbnVhbEdhdGhl
cmluZ1BvbGljeS5HQVRIRVJfQ09OVElOVUFMTFk7Ci0gICAgLy8gVXNlIEVDRFNBIGVuY3J5cHRp
b24uCi0gICAgcnRjQ29uZmlnLmtleVR5cGUgPSBQZWVyQ29ubmVjdGlvbi5LZXlUeXBlLkVDRFNB
OwotCi0gICAgcGVlckNvbm5lY3Rpb24gPSBmYWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0
Y0NvbmZpZywgcGNDb25zdHJhaW50cywgcGNPYnNlcnZlcik7Ci0gICAgaXNJbml0aWF0b3IgPSBm
YWxzZTsKLQotICAgIC8vIFNldCBkZWZhdWx0IFdlYlJUQyB0cmFjaW5nIGFuZCBJTkZPIGxpYmpp
bmdsZSBsb2dnaW5nLgotICAgIC8vIE5PVEU6IHRoaXMgX211c3RfIGhhcHBlbiB3aGlsZSB8ZmFj
dG9yeXwgaXMgYWxpdmUhCi0gICAgTG9nZ2luZy5lbmFibGVUcmFjaW5nKCJsb2djYXQ6IiwgRW51
bVNldC5vZihMb2dnaW5nLlRyYWNlTGV2ZWwuVFJBQ0VfREVGQVVMVCkpOwotICAgIExvZ2dpbmcu
ZW5hYmxlTG9nVG9EZWJ1Z091dHB1dChMb2dnaW5nLlNldmVyaXR5LkxTX0lORk8pOwotCi0gICAg
bWVkaWFTdHJlYW0gPSBmYWN0b3J5LmNyZWF0ZUxvY2FsTWVkaWFTdHJlYW0oIkFSREFNUyIpOwot
ICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICBtZWRpYVN0cmVhbS5hZGRUcmFjayhj
cmVhdGVWaWRlb1RyYWNrKHZpZGVvQ2FwdHVyZXIpKTsKLSAgICB9Ci0KLSAgICBtZWRpYVN0cmVh
bS5hZGRUcmFjayhjcmVhdGVBdWRpb1RyYWNrKCkpOwotICAgIHBlZXJDb25uZWN0aW9uLmFkZFN0
cmVhbShtZWRpYVN0cmVhbSk7Ci0gICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIGZp
bmRWaWRlb1NlbmRlcigpOwotICAgIH0KLQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRl
cnMuYWVjRHVtcCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgYWVjRHVtcEZpbGVEZXNjcmlwdG9y
ID0KLSAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLm9wZW4obmV3IEZpbGUoRW52aXJv
bm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlRGlyZWN0b3J5KCkuZ2V0UGF0aCgpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEZpbGUuc2VwYXJhdG9yICsgIkRvd25s
b2FkL2F1ZGlvLmFlY2R1bXAiKSwKLSAgICAgICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRv
ci5NT0RFX1JFQURfV1JJVEUgfCBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX0NSRUFURQotICAg
ICAgICAgICAgICAgICAgICB8IFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfVFJVTkNBVEUpOwot
ICAgICAgICBmYWN0b3J5LnN0YXJ0QWVjRHVtcChhZWNEdW1wRmlsZURlc2NyaXB0b3IuZ2V0RmQo
KSwgLTEpOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShU
QUcsICJDYW4gbm90IG9wZW4gYWVjZHVtcCBmaWxlIiwgZSk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgTG9nLmQoVEFHLCAiUGVlciBjb25uZWN0aW9uIGNyZWF0ZWQuIik7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgY2xvc2VJbnRlcm5hbCgpIHsKLSAgICBpZiAoZmFjdG9yeSAhPSBudWxsICYmIHBl
ZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hZWNEdW1wKSB7Ci0gICAgICBmYWN0b3J5LnN0b3BBZWNE
dW1wKCk7Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkNsb3NpbmcgcGVlciBjb25uZWN0aW9uLiIp
OwotICAgIHN0YXRzVGltZXIuY2FuY2VsKCk7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uICE9IG51
bGwpIHsKLSAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTsKLSAgICAgIHBlZXJDb25uZWN0
aW9uID0gbnVsbDsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiQ2xvc2luZyBhdWRpbyBzb3VyY2Uu
Iik7Ci0gICAgaWYgKGF1ZGlvU291cmNlICE9IG51bGwpIHsKLSAgICAgIGF1ZGlvU291cmNlLmRp
c3Bvc2UoKTsKLSAgICAgIGF1ZGlvU291cmNlID0gbnVsbDsKLSAgICB9Ci0gICAgTG9nLmQoVEFH
LCAiU3RvcHBpbmcgY2FwdHVyZS4iKTsKLSAgICBpZiAodmlkZW9DYXB0dXJlciAhPSBudWxsKSB7
Ci0gICAgICB0cnkgewotICAgICAgICB2aWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAg
ICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBS
dW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgfQotICAgICAgdmlkZW9DYXB0dXJlclN0b3BwZWQg
PSB0cnVlOwotICAgICAgdmlkZW9DYXB0dXJlci5kaXNwb3NlKCk7Ci0gICAgICB2aWRlb0NhcHR1
cmVyID0gbnVsbDsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiQ2xvc2luZyB2aWRlbyBzb3VyY2Uu
Iik7Ci0gICAgaWYgKHZpZGVvU291cmNlICE9IG51bGwpIHsKLSAgICAgIHZpZGVvU291cmNlLmRp
c3Bvc2UoKTsKLSAgICAgIHZpZGVvU291cmNlID0gbnVsbDsKLSAgICB9Ci0gICAgTG9nLmQoVEFH
LCAiQ2xvc2luZyBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeS4iKTsKLSAgICBpZiAoZmFjdG9yeSAh
PSBudWxsKSB7Ci0gICAgICBmYWN0b3J5LmRpc3Bvc2UoKTsKLSAgICAgIGZhY3RvcnkgPSBudWxs
OwotICAgIH0KLSAgICBvcHRpb25zID0gbnVsbDsKLSAgICBMb2cuZChUQUcsICJDbG9zaW5nIHBl
ZXIgY29ubmVjdGlvbiBkb25lLiIpOwotICAgIGV2ZW50cy5vblBlZXJDb25uZWN0aW9uQ2xvc2Vk
KCk7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LnN0b3BJbnRlcm5hbFRyYWNpbmdDYXB0dXJl
KCk7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LnNodXRkb3duSW50ZXJuYWxUcmFjZXIoKTsK
LSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzSERWaWRlbygpIHsKLSAgICBpZiAoIXZpZGVvQ2Fs
bEVuYWJsZWQpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlk
ZW9XaWR0aCAqIHZpZGVvSGVpZ2h0ID49IDEyODAgKiA3MjA7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgZ2V0U3RhdHMoKSB7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51bGwgfHwgaXNFcnJv
cikgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBib29sZWFuIHN1Y2Nlc3MgPSBwZWVyQ29u
bmVjdGlvbi5nZXRTdGF0cyhuZXcgU3RhdHNPYnNlcnZlcigpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgb25Db21wbGV0ZShmaW5hbCBTdGF0c1JlcG9ydFtdIHJlcG9ydHMp
IHsKLSAgICAgICAgZXZlbnRzLm9uUGVlckNvbm5lY3Rpb25TdGF0c1JlYWR5KHJlcG9ydHMpOwot
ICAgICAgfQotICAgIH0sIG51bGwpOwotICAgIGlmICghc3VjY2VzcykgewotICAgICAgTG9nLmUo
VEFHLCAiZ2V0U3RhdHMoKSByZXR1cm5zIGZhbHNlISIpOwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIGVuYWJsZVN0YXRzRXZlbnRzKGJvb2xlYW4gZW5hYmxlLCBpbnQgcGVyaW9kTXMpIHsK
LSAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICB0cnkgewotICAgICAgICBzdGF0c1RpbWVyLnNjaGVk
dWxlKG5ldyBUaW1lclRhc2soKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgZ2V0U3RhdHMoKTsKLSAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9LCAwLCBwZXJpb2RNcyk7Ci0g
ICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShUQUcsICJDYW4gbm90
IHNjaGVkdWxlIHN0YXRpc3RpY3MgdGltZXIiLCBlKTsKLSAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgc3RhdHNUaW1lci5jYW5jZWwoKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBz
ZXRBdWRpb0VuYWJsZWQoZmluYWwgYm9vbGVhbiBlbmFibGUpIHsKLSAgICBleGVjdXRvci5leGVj
dXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICBlbmFibGVBdWRpbyA9IGVuYWJsZTsKLSAgICAgICAgaWYgKGxvY2Fs
QXVkaW9UcmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgbG9jYWxBdWRpb1RyYWNrLnNldEVuYWJs
ZWQoZW5hYmxlQXVkaW8pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBzZXRWaWRlb0VuYWJsZWQoZmluYWwgYm9vbGVhbiBlbmFibGUpIHsKLSAgICBl
eGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICByZW5kZXJWaWRlbyA9IGVuYWJsZTsKLSAgICAg
ICAgaWYgKGxvY2FsVmlkZW9UcmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgbG9jYWxWaWRlb1Ry
YWNrLnNldEVuYWJsZWQocmVuZGVyVmlkZW8pOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZW1v
dGVWaWRlb1RyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICByZW1vdGVWaWRlb1RyYWNrLnNldEVu
YWJsZWQocmVuZGVyVmlkZW8pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCBjcmVhdGVPZmZlcigpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24gIT0gbnVsbCAmJiAhaXNFcnJvcikgewotICAgICAg
ICAgIExvZy5kKFRBRywgIlBDIENyZWF0ZSBPRkZFUiIpOwotICAgICAgICAgIGlzSW5pdGlhdG9y
ID0gdHJ1ZTsKLSAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihzZHBPYnNlcnZl
ciwgc2RwTWVkaWFDb25zdHJhaW50cyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUFuc3dlcigpIHsKLSAgICBleGVjdXRvci5leGVjdXRl
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24gIT0gbnVsbCAmJiAhaXNFcnJvcikgewot
ICAgICAgICAgIExvZy5kKFRBRywgIlBDIGNyZWF0ZSBBTlNXRVIiKTsKLSAgICAgICAgICBpc0lu
aXRpYXRvciA9IGZhbHNlOwotICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihz
ZHBPYnNlcnZlciwgc2RwTWVkaWFDb25zdHJhaW50cyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGFkZFJlbW90ZUljZUNhbmRpZGF0ZShmaW5hbCBJ
Y2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaWYgKHBlZXJDb25uZWN0aW9uICE9IG51bGwgJiYgIWlzRXJyb3IpIHsKLSAgICAgICAgICBp
ZiAocXVldWVkUmVtb3RlQ2FuZGlkYXRlcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICBxdWV1ZWRS
ZW1vdGVDYW5kaWRhdGVzLmFkZChjYW5kaWRhdGUpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHJlbW92ZVJlbW90ZUljZUNhbmRpZGF0ZXMoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRl
cykgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlv
biA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgLy8gRHJhaW4gdGhlIHF1ZXVlZCByZW1vdGUgY2FuZGlkYXRlcyBpZiB0aGVyZSBpcyBh
bnkgc28gdGhhdAotICAgICAgICAvLyB0aGV5IGFyZSBwcm9jZXNzZWQgaW4gdGhlIHByb3BlciBv
cmRlci4KLSAgICAgICAgZHJhaW5DYW5kaWRhdGVzKCk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9u
LnJlbW92ZUljZUNhbmRpZGF0ZXMoY2FuZGlkYXRlcyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBzZXRSZW1vdGVEZXNjcmlwdGlvbihmaW5hbCBTZXNzaW9uRGVzY3Jp
cHRpb24gc2RwKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJD
b25uZWN0aW9uID09IG51bGwgfHwgaXNFcnJvcikgewotICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBTdHJpbmcgc2RwRGVzY3JpcHRpb24gPSBzZHAuZGVzY3JpcHRpb247Ci0g
ICAgICAgIGlmIChwcmVmZXJJc2FjKSB7Ci0gICAgICAgICAgc2RwRGVzY3JpcHRpb24gPSBwcmVm
ZXJDb2RlYyhzZHBEZXNjcmlwdGlvbiwgQVVESU9fQ09ERUNfSVNBQywgdHJ1ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgICAgICBzZHBEZXNjcmlw
dGlvbiA9IHByZWZlckNvZGVjKHNkcERlc2NyaXB0aW9uLCBwcmVmZXJyZWRWaWRlb0NvZGVjLCBm
YWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5h
dWRpb1N0YXJ0Qml0cmF0ZSA+IDApIHsKLSAgICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHNldFN0
YXJ0Qml0cmF0ZSgKLSAgICAgICAgICAgICAgQVVESU9fQ09ERUNfT1BVUywgZmFsc2UsIHNkcERl
c2NyaXB0aW9uLCBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuYXVkaW9TdGFydEJpdHJhdGUpOwot
ICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRBRywgIlNldCByZW1vdGUgU0RQLiIpOwotICAgICAg
ICBTZXNzaW9uRGVzY3JpcHRpb24gc2RwUmVtb3RlID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbihz
ZHAudHlwZSwgc2RwRGVzY3JpcHRpb24pOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5zZXRSZW1v
dGVEZXNjcmlwdGlvbihzZHBPYnNlcnZlciwgc2RwUmVtb3RlKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0b3BWaWRlb1NvdXJjZSgpIHsKLSAgICBleGVjdXRvci5l
eGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICBpZiAodmlkZW9DYXB0dXJlciAhPSBudWxsICYmICF2aWRlb0Nh
cHR1cmVyU3RvcHBlZCkgewotICAgICAgICAgIExvZy5kKFRBRywgIlN0b3AgdmlkZW8gc291cmNl
LiIpOwotICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICB2aWRlb0NhcHR1cmVyLnN0b3BDYXB0
dXJlKCk7Ci0gICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAg
ICAgICAgIH0KLSAgICAgICAgICB2aWRlb0NhcHR1cmVyU3RvcHBlZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0YXJ0VmlkZW9Tb3Vy
Y2UoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHZpZGVvQ2FwdHVy
ZXIgIT0gbnVsbCAmJiB2aWRlb0NhcHR1cmVyU3RvcHBlZCkgewotICAgICAgICAgIExvZy5kKFRB
RywgIlJlc3RhcnQgdmlkZW8gc291cmNlLiIpOwotICAgICAgICAgIHZpZGVvQ2FwdHVyZXIuc3Rh
cnRDYXB0dXJlKHZpZGVvV2lkdGgsIHZpZGVvSGVpZ2h0LCB2aWRlb0Zwcyk7Ci0gICAgICAgICAg
dmlkZW9DYXB0dXJlclN0b3BwZWQgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmlkZW9NYXhCaXRyYXRlKGZpbmFsIEludGVnZXIg
bWF4Qml0cmF0ZUticHMpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAo
cGVlckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBsb2NhbFZpZGVvU2VuZGVyID09IG51bGwgfHwgaXNF
cnJvcikgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcs
ICJSZXF1ZXN0ZWQgbWF4IHZpZGVvIGJpdHJhdGU6ICIgKyBtYXhCaXRyYXRlS2Jwcyk7Ci0gICAg
ICAgIGlmIChsb2NhbFZpZGVvU2VuZGVyID09IG51bGwpIHsKLSAgICAgICAgICBMb2cudyhUQUcs
ICJTZW5kZXIgaXMgbm90IHJlYWR5LiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIFJ0cFBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IGxvY2FsVmlkZW9TZW5kZXIuZ2V0
UGFyYW1ldGVycygpOwotICAgICAgICBpZiAocGFyYW1ldGVycy5lbmNvZGluZ3Muc2l6ZSgpID09
IDApIHsKLSAgICAgICAgICBMb2cudyhUQUcsICJSdHBQYXJhbWV0ZXJzIGFyZSBub3QgcmVhZHku
Iik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChSdHBQYXJh
bWV0ZXJzLkVuY29kaW5nIGVuY29kaW5nIDogcGFyYW1ldGVycy5lbmNvZGluZ3MpIHsKLSAgICAg
ICAgICAvLyBOdWxsIHZhbHVlIG1lYW5zIG5vIGxpbWl0LgotICAgICAgICAgIGVuY29kaW5nLm1h
eEJpdHJhdGVCcHMgPSBtYXhCaXRyYXRlS2JwcyA9PSBudWxsID8gbnVsbCA6IG1heEJpdHJhdGVL
YnBzICogQlBTX0lOX0tCUFM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFsb2NhbFZpZGVvU2Vu
ZGVyLnNldFBhcmFtZXRlcnMocGFyYW1ldGVycykpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJS
dHBTZW5kZXIuc2V0UGFyYW1ldGVycyBmYWlsZWQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgTG9n
LmQoVEFHLCAiQ29uZmlndXJlZCBtYXggdmlkZW8gYml0cmF0ZSB0bzogIiArIG1heEJpdHJhdGVL
YnBzKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJv
cihmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgTG9nLmUoVEFHLCAiUGVlcmNvbm5l
Y3Rpb24gZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIGlmICghaXNFcnJvcikgewotICAgICAgICAgIGV2ZW50cy5vblBlZXJDb25uZWN0
aW9uRXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICBpc0Vycm9yID0gdHJ1ZTsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBBdWRpb1RyYWNrIGNyZWF0
ZUF1ZGlvVHJhY2soKSB7Ci0gICAgYXVkaW9Tb3VyY2UgPSBmYWN0b3J5LmNyZWF0ZUF1ZGlvU291
cmNlKGF1ZGlvQ29uc3RyYWludHMpOwotICAgIGxvY2FsQXVkaW9UcmFjayA9IGZhY3RvcnkuY3Jl
YXRlQXVkaW9UcmFjayhBVURJT19UUkFDS19JRCwgYXVkaW9Tb3VyY2UpOwotICAgIGxvY2FsQXVk
aW9UcmFjay5zZXRFbmFibGVkKGVuYWJsZUF1ZGlvKTsKLSAgICByZXR1cm4gbG9jYWxBdWRpb1Ry
YWNrOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb1RyYWNrIGNyZWF0ZVZpZGVvVHJhY2soVmlkZW9D
YXB0dXJlciBjYXB0dXJlcikgewotICAgIHZpZGVvU291cmNlID0gZmFjdG9yeS5jcmVhdGVWaWRl
b1NvdXJjZShjYXB0dXJlcik7Ci0gICAgY2FwdHVyZXIuc3RhcnRDYXB0dXJlKHZpZGVvV2lkdGgs
IHZpZGVvSGVpZ2h0LCB2aWRlb0Zwcyk7Ci0KLSAgICBsb2NhbFZpZGVvVHJhY2sgPSBmYWN0b3J5
LmNyZWF0ZVZpZGVvVHJhY2soVklERU9fVFJBQ0tfSUQsIHZpZGVvU291cmNlKTsKLSAgICBsb2Nh
bFZpZGVvVHJhY2suc2V0RW5hYmxlZChyZW5kZXJWaWRlbyk7Ci0gICAgbG9jYWxWaWRlb1RyYWNr
LmFkZFJlbmRlcmVyKG5ldyBWaWRlb1JlbmRlcmVyKGxvY2FsUmVuZGVyKSk7Ci0gICAgcmV0dXJu
IGxvY2FsVmlkZW9UcmFjazsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBmaW5kVmlkZW9TZW5kZXIo
KSB7Ci0gICAgZm9yIChSdHBTZW5kZXIgc2VuZGVyIDogcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVy
cygpKSB7Ci0gICAgICBpZiAoc2VuZGVyLnRyYWNrKCkgIT0gbnVsbCkgewotICAgICAgICBTdHJp
bmcgdHJhY2tUeXBlID0gc2VuZGVyLnRyYWNrKCkua2luZCgpOwotICAgICAgICBpZiAodHJhY2tU
eXBlLmVxdWFscyhWSURFT19UUkFDS19UWVBFKSkgewotICAgICAgICAgIExvZy5kKFRBRywgIkZv
dW5kIHZpZGVvIHNlbmRlci4iKTsKLSAgICAgICAgICBsb2NhbFZpZGVvU2VuZGVyID0gc2VuZGVy
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3Ry
aW5nIHNldFN0YXJ0Qml0cmF0ZSgKLSAgICAgIFN0cmluZyBjb2RlYywgYm9vbGVhbiBpc1ZpZGVv
Q29kZWMsIFN0cmluZyBzZHBEZXNjcmlwdGlvbiwgaW50IGJpdHJhdGVLYnBzKSB7Ci0gICAgU3Ry
aW5nW10gbGluZXMgPSBzZHBEZXNjcmlwdGlvbi5zcGxpdCgiXHJcbiIpOwotICAgIGludCBydHBt
YXBMaW5lSW5kZXggPSAtMTsKLSAgICBib29sZWFuIHNkcEZvcm1hdFVwZGF0ZWQgPSBmYWxzZTsK
LSAgICBTdHJpbmcgY29kZWNSdHBNYXAgPSBudWxsOwotICAgIC8vIFNlYXJjaCBmb3IgY29kZWMg
cnRwbWFwIGluIGZvcm1hdAotICAgIC8vIGE9cnRwbWFwOjxwYXlsb2FkIHR5cGU+IDxlbmNvZGlu
ZyBuYW1lPi88Y2xvY2sgcmF0ZT4gWy88ZW5jb2RpbmcgcGFyYW1ldGVycz5dCi0gICAgU3RyaW5n
IHJlZ2V4ID0gIl5hPXJ0cG1hcDooXFxkKykgIiArIGNvZGVjICsgIigvXFxkKykrW1xyXT8kIjsK
LSAgICBQYXR0ZXJuIGNvZGVjUGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZShyZWdleCk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewotICAgICAgTWF0Y2hlciBj
b2RlY01hdGNoZXIgPSBjb2RlY1BhdHRlcm4ubWF0Y2hlcihsaW5lc1tpXSk7Ci0gICAgICBpZiAo
Y29kZWNNYXRjaGVyLm1hdGNoZXMoKSkgewotICAgICAgICBjb2RlY1J0cE1hcCA9IGNvZGVjTWF0
Y2hlci5ncm91cCgxKTsKLSAgICAgICAgcnRwbWFwTGluZUluZGV4ID0gaTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChjb2RlY1J0cE1hcCA9PSBudWxsKSB7Ci0gICAg
ICBMb2cudyhUQUcsICJObyBydHBtYXAgZm9yICIgKyBjb2RlYyArICIgY29kZWMiKTsKLSAgICAg
IHJldHVybiBzZHBEZXNjcmlwdGlvbjsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiRm91bmQgIiAr
IGNvZGVjICsgIiBydHBtYXAgIiArIGNvZGVjUnRwTWFwICsgIiBhdCAiICsgbGluZXNbcnRwbWFw
TGluZUluZGV4XSk7Ci0KLSAgICAvLyBDaGVjayBpZiBhPWZtdHAgc3RyaW5nIGFscmVhZHkgZXhp
c3QgaW4gcmVtb3RlIFNEUCBmb3IgdGhpcyBjb2RlYyBhbmQKLSAgICAvLyB1cGRhdGUgaXQgd2l0
aCBuZXcgYml0cmF0ZSBwYXJhbWV0ZXIuCi0gICAgcmVnZXggPSAiXmE9Zm10cDoiICsgY29kZWNS
dHBNYXAgKyAiIFxcdys9XFxkKy4qW1xyXT8kIjsKLSAgICBjb2RlY1BhdHRlcm4gPSBQYXR0ZXJu
LmNvbXBpbGUocmVnZXgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBp
KyspIHsKLSAgICAgIE1hdGNoZXIgY29kZWNNYXRjaGVyID0gY29kZWNQYXR0ZXJuLm1hdGNoZXIo
bGluZXNbaV0pOwotICAgICAgaWYgKGNvZGVjTWF0Y2hlci5tYXRjaGVzKCkpIHsKLSAgICAgICAg
TG9nLmQoVEFHLCAiRm91bmQgIiArIGNvZGVjICsgIiAiICsgbGluZXNbaV0pOwotICAgICAgICBp
ZiAoaXNWaWRlb0NvZGVjKSB7Ci0gICAgICAgICAgbGluZXNbaV0gKz0gIjsgIiArIFZJREVPX0NP
REVDX1BBUkFNX1NUQVJUX0JJVFJBVEUgKyAiPSIgKyBiaXRyYXRlS2JwczsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICBsaW5lc1tpXSArPSAiOyAiICsgQVVESU9fQ09ERUNfUEFSQU1fQklU
UkFURSArICI9IiArIChiaXRyYXRlS2JwcyAqIDEwMDApOwotICAgICAgICB9Ci0gICAgICAgIExv
Zy5kKFRBRywgIlVwZGF0ZSByZW1vdGUgU0RQIGxpbmU6ICIgKyBsaW5lc1tpXSk7Ci0gICAgICAg
IHNkcEZvcm1hdFVwZGF0ZWQgPSB0cnVlOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICBTdHJpbmdCdWlsZGVyIG5ld1NkcERlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1aWxk
ZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAg
ICBuZXdTZHBEZXNjcmlwdGlvbi5hcHBlbmQobGluZXNbaV0pLmFwcGVuZCgiXHJcbiIpOwotICAg
ICAgLy8gQXBwZW5kIG5ldyBhPWZtdHAgbGluZSBpZiBubyBzdWNoIGxpbmUgZXhpc3QgZm9yIGEg
Y29kZWMuCi0gICAgICBpZiAoIXNkcEZvcm1hdFVwZGF0ZWQgJiYgaSA9PSBydHBtYXBMaW5lSW5k
ZXgpIHsKLSAgICAgICAgU3RyaW5nIGJpdHJhdGVTZXQ7Ci0gICAgICAgIGlmIChpc1ZpZGVvQ29k
ZWMpIHsKLSAgICAgICAgICBiaXRyYXRlU2V0ID0KLSAgICAgICAgICAgICAgImE9Zm10cDoiICsg
Y29kZWNSdHBNYXAgKyAiICIgKyBWSURFT19DT0RFQ19QQVJBTV9TVEFSVF9CSVRSQVRFICsgIj0i
ICsgYml0cmF0ZUticHM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYml0cmF0ZVNldCA9
ICJhPWZtdHA6IiArIGNvZGVjUnRwTWFwICsgIiAiICsgQVVESU9fQ09ERUNfUEFSQU1fQklUUkFU
RSArICI9IgotICAgICAgICAgICAgICArIChiaXRyYXRlS2JwcyAqIDEwMDApOwotICAgICAgICB9
Ci0gICAgICAgIExvZy5kKFRBRywgIkFkZCByZW1vdGUgU0RQIGxpbmU6ICIgKyBiaXRyYXRlU2V0
KTsKLSAgICAgICAgbmV3U2RwRGVzY3JpcHRpb24uYXBwZW5kKGJpdHJhdGVTZXQpLmFwcGVuZCgi
XHJcbiIpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3U2RwRGVzY3JpcHRpb24udG9T
dHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmVmZXJDb2RlYyhTdHJp
bmcgc2RwRGVzY3JpcHRpb24sIFN0cmluZyBjb2RlYywgYm9vbGVhbiBpc0F1ZGlvKSB7Ci0gICAg
U3RyaW5nW10gbGluZXMgPSBzZHBEZXNjcmlwdGlvbi5zcGxpdCgiXHJcbiIpOwotICAgIGludCBt
TGluZUluZGV4ID0gLTE7Ci0gICAgU3RyaW5nIGNvZGVjUnRwTWFwID0gbnVsbDsKLSAgICAvLyBh
PXJ0cG1hcDo8cGF5bG9hZCB0eXBlPiA8ZW5jb2RpbmcgbmFtZT4vPGNsb2NrIHJhdGU+IFsvPGVu
Y29kaW5nIHBhcmFtZXRlcnM+XQotICAgIFN0cmluZyByZWdleCA9ICJeYT1ydHBtYXA6KFxcZCsp
ICIgKyBjb2RlYyArICIoL1xcZCspK1tccl0/JCI7Ci0gICAgUGF0dGVybiBjb2RlY1BhdHRlcm4g
PSBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpOwotICAgIFN0cmluZyBtZWRpYURlc2NyaXB0aW9uID0g
Im09dmlkZW8gIjsKLSAgICBpZiAoaXNBdWRpbykgewotICAgICAgbWVkaWFEZXNjcmlwdGlvbiA9
ICJtPWF1ZGlvICI7Ci0gICAgfQotICAgIGZvciAoaW50IGkgPSAwOyAoaSA8IGxpbmVzLmxlbmd0
aCkgJiYgKG1MaW5lSW5kZXggPT0gLTEgfHwgY29kZWNSdHBNYXAgPT0gbnVsbCk7IGkrKykgewot
ICAgICAgaWYgKGxpbmVzW2ldLnN0YXJ0c1dpdGgobWVkaWFEZXNjcmlwdGlvbikpIHsKLSAgICAg
ICAgbUxpbmVJbmRleCA9IGk7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgTWF0
Y2hlciBjb2RlY01hdGNoZXIgPSBjb2RlY1BhdHRlcm4ubWF0Y2hlcihsaW5lc1tpXSk7Ci0gICAg
ICBpZiAoY29kZWNNYXRjaGVyLm1hdGNoZXMoKSkgewotICAgICAgICBjb2RlY1J0cE1hcCA9IGNv
ZGVjTWF0Y2hlci5ncm91cCgxKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1MaW5lSW5kZXgg
PT0gLTEpIHsKLSAgICAgIExvZy53KFRBRywgIk5vICIgKyBtZWRpYURlc2NyaXB0aW9uICsgIiBs
aW5lLCBzbyBjYW4ndCBwcmVmZXIgIiArIGNvZGVjKTsKLSAgICAgIHJldHVybiBzZHBEZXNjcmlw
dGlvbjsKLSAgICB9Ci0gICAgaWYgKGNvZGVjUnRwTWFwID09IG51bGwpIHsKLSAgICAgIExvZy53
KFRBRywgIk5vIHJ0cG1hcCBmb3IgIiArIGNvZGVjKTsKLSAgICAgIHJldHVybiBzZHBEZXNjcmlw
dGlvbjsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiRm91bmQgIiArIGNvZGVjICsgIiBydHBtYXAg
IiArIGNvZGVjUnRwTWFwICsgIiwgcHJlZmVyIGF0ICIgKyBsaW5lc1ttTGluZUluZGV4XSk7Ci0g
ICAgU3RyaW5nW10gb3JpZ01MaW5lUGFydHMgPSBsaW5lc1ttTGluZUluZGV4XS5zcGxpdCgiICIp
OwotICAgIGlmIChvcmlnTUxpbmVQYXJ0cy5sZW5ndGggPiAzKSB7Ci0gICAgICBTdHJpbmdCdWls
ZGVyIG5ld01MaW5lID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICAgIGludCBvcmlnUGFydElu
ZGV4ID0gMDsKLSAgICAgIC8vIEZvcm1hdCBpczogbT08bWVkaWE+IDxwb3J0PiA8cHJvdG8+IDxm
bXQ+IC4uLgotICAgICAgbmV3TUxpbmUuYXBwZW5kKG9yaWdNTGluZVBhcnRzW29yaWdQYXJ0SW5k
ZXgrK10pLmFwcGVuZCgiICIpOwotICAgICAgbmV3TUxpbmUuYXBwZW5kKG9yaWdNTGluZVBhcnRz
W29yaWdQYXJ0SW5kZXgrK10pLmFwcGVuZCgiICIpOwotICAgICAgbmV3TUxpbmUuYXBwZW5kKG9y
aWdNTGluZVBhcnRzW29yaWdQYXJ0SW5kZXgrK10pLmFwcGVuZCgiICIpOwotICAgICAgbmV3TUxp
bmUuYXBwZW5kKGNvZGVjUnRwTWFwKTsKLSAgICAgIGZvciAoOyBvcmlnUGFydEluZGV4IDwgb3Jp
Z01MaW5lUGFydHMubGVuZ3RoOyBvcmlnUGFydEluZGV4KyspIHsKLSAgICAgICAgaWYgKCFvcmln
TUxpbmVQYXJ0c1tvcmlnUGFydEluZGV4XS5lcXVhbHMoY29kZWNSdHBNYXApKSB7Ci0gICAgICAg
ICAgbmV3TUxpbmUuYXBwZW5kKCIgIikuYXBwZW5kKG9yaWdNTGluZVBhcnRzW29yaWdQYXJ0SW5k
ZXhdKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgbGluZXNbbUxpbmVJbmRleF0gPSBuZXdN
TGluZS50b1N0cmluZygpOwotICAgICAgTG9nLmQoVEFHLCAiQ2hhbmdlIG1lZGlhIGRlc2NyaXB0
aW9uOiAiICsgbGluZXNbbUxpbmVJbmRleF0pOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZShU
QUcsICJXcm9uZyBTRFAgbWVkaWEgZGVzY3JpcHRpb24gZm9ybWF0OiAiICsgbGluZXNbbUxpbmVJ
bmRleF0pOwotICAgIH0KLSAgICBTdHJpbmdCdWlsZGVyIG5ld1NkcERlc2NyaXB0aW9uID0gbmV3
IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBmb3IgKFN0cmluZyBsaW5lIDogbGluZXMpIHsKLSAgICAg
IG5ld1NkcERlc2NyaXB0aW9uLmFwcGVuZChsaW5lKS5hcHBlbmQoIlxyXG4iKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIG5ld1NkcERlc2NyaXB0aW9uLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgZHJhaW5DYW5kaWRhdGVzKCkgewotICAgIGlmIChxdWV1ZWRSZW1vdGVDYW5kaWRhdGVz
ICE9IG51bGwpIHsKLSAgICAgIExvZy5kKFRBRywgIkFkZCAiICsgcXVldWVkUmVtb3RlQ2FuZGlk
YXRlcy5zaXplKCkgKyAiIHJlbW90ZSBjYW5kaWRhdGVzIik7Ci0gICAgICBmb3IgKEljZUNhbmRp
ZGF0ZSBjYW5kaWRhdGUgOiBxdWV1ZWRSZW1vdGVDYW5kaWRhdGVzKSB7Ci0gICAgICAgIHBlZXJD
b25uZWN0aW9uLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgfQotICAgICAgcXVl
dWVkUmVtb3RlQ2FuZGlkYXRlcyA9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IHN3aXRjaENhbWVyYUludGVybmFsKCkgewotICAgIGlmICh2aWRlb0NhcHR1cmVyIGluc3RhbmNl
b2YgQ2FtZXJhVmlkZW9DYXB0dXJlcikgewotICAgICAgaWYgKCF2aWRlb0NhbGxFbmFibGVkIHx8
IGlzRXJyb3IgfHwgdmlkZW9DYXB0dXJlciA9PSBudWxsKSB7Ci0gICAgICAgIExvZy5lKFRBRywg
IkZhaWxlZCB0byBzd2l0Y2ggY2FtZXJhLiBWaWRlbzogIiArIHZpZGVvQ2FsbEVuYWJsZWQgKyAi
LiBFcnJvciA6ICIgKyBpc0Vycm9yKTsKLSAgICAgICAgcmV0dXJuOyAvLyBObyB2aWRlbyBpcyBz
ZW50IG9yIG9ubHkgb25lIGNhbWVyYSBpcyBhdmFpbGFibGUgb3IgZXJyb3IgaGFwcGVuZWQuCi0g
ICAgICB9Ci0gICAgICBMb2cuZChUQUcsICJTd2l0Y2ggY2FtZXJhIik7Ci0gICAgICBDYW1lcmFW
aWRlb0NhcHR1cmVyIGNhbWVyYVZpZGVvQ2FwdHVyZXIgPSAoQ2FtZXJhVmlkZW9DYXB0dXJlcikg
dmlkZW9DYXB0dXJlcjsKLSAgICAgIGNhbWVyYVZpZGVvQ2FwdHVyZXIuc3dpdGNoQ2FtZXJhKG51
bGwpOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZChUQUcsICJXaWxsIG5vdCBzd2l0Y2ggY2Ft
ZXJhLCB2aWRlbyBjYXB1dHVyZXIgaXMgbm90IGEgY2FtZXJhIik7Ci0gICAgfQotICB9Ci0KLSAg
cHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIHN3aXRjaENhbWVyYUludGVybmFsKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0KGZpbmFsIGludCB3aWR0aCwgZmluYWwg
aW50IGhlaWdodCwgZmluYWwgaW50IGZyYW1lcmF0ZSkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGNoYW5nZUNhcHR1cmVGb3JtYXRJbnRlcm5hbCh3aWR0aCwgaGVpZ2h0LCBm
cmFtZXJhdGUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoYW5n
ZUNhcHR1cmVGb3JtYXRJbnRlcm5hbChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJh
dGUpIHsKLSAgICBpZiAoIXZpZGVvQ2FsbEVuYWJsZWQgfHwgaXNFcnJvciB8fCB2aWRlb0NhcHR1
cmVyID09IG51bGwpIHsKLSAgICAgIExvZy5lKFRBRywKLSAgICAgICAgICAiRmFpbGVkIHRvIGNo
YW5nZSBjYXB0dXJlIGZvcm1hdC4gVmlkZW86ICIgKyB2aWRlb0NhbGxFbmFibGVkICsgIi4gRXJy
b3IgOiAiICsgaXNFcnJvcik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIExvZy5kKFRBRywg
ImNoYW5nZUNhcHR1cmVGb3JtYXQ6ICIgKyB3aWR0aCArICJ4IiArIGhlaWdodCArICJAIiArIGZy
YW1lcmF0ZSk7Ci0gICAgdmlkZW9Tb3VyY2UuYWRhcHRPdXRwdXRGb3JtYXQod2lkdGgsIGhlaWdo
dCwgZnJhbWVyYXRlKTsKLSAgfQotCi0gIC8vIEltcGxlbWVudGF0aW9uIGRldGFpbDogb2JzZXJ2
ZSBJQ0UgJiBzdHJlYW0gY2hhbmdlcyBhbmQgcmVhY3QgYWNjb3JkaW5nbHkuCi0gIHByaXZhdGUg
Y2xhc3MgUENPYnNlcnZlciBpbXBsZW1lbnRzIFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIHsKLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5k
aWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgICBldmVudHMub25JY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgICAgfQotICAgICAg
fSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRh
dGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAgICBleGVj
dXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBldmVudHMub25JY2VDYW5kaWRhdGVzUmVt
b3ZlZChjYW5kaWRhdGVzKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TaWduYWxpbmdDaGFuZ2UoUGVlckNvbm5lY3Rpb24u
U2lnbmFsaW5nU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIExvZy5kKFRBRywgIlNpZ25hbGluZ1N0
YXRlOiAiICsgbmV3U3RhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2
b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZShmaW5hbCBQZWVyQ29ubmVjdGlvbi5JY2VDb25uZWN0
aW9uU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICAgIExvZy5kKFRBRywgIkljZUNvbm5lY3Rpb25TdGF0ZTogIiArIG5ld1N0YXRlKTsKLSAg
ICAgICAgICBpZiAobmV3U3RhdGUgPT0gSWNlQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewot
ICAgICAgICAgICAgZXZlbnRzLm9uSWNlQ29ubmVjdGVkKCk7Ci0gICAgICAgICAgfSBlbHNlIGlm
IChuZXdTdGF0ZSA9PSBJY2VDb25uZWN0aW9uU3RhdGUuRElTQ09OTkVDVEVEKSB7Ci0gICAgICAg
ICAgICBldmVudHMub25JY2VEaXNjb25uZWN0ZWQoKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG5l
d1N0YXRlID09IEljZUNvbm5lY3Rpb25TdGF0ZS5GQUlMRUQpIHsKLSAgICAgICAgICAgIHJlcG9y
dEVycm9yKCJJQ0UgY29ubmVjdGlvbiBmYWlsZWQuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbklj
ZUdhdGhlcmluZ0NoYW5nZShQZWVyQ29ubmVjdGlvbi5JY2VHYXRoZXJpbmdTdGF0ZSBuZXdTdGF0
ZSkgewotICAgICAgTG9nLmQoVEFHLCAiSWNlR2F0aGVyaW5nU3RhdGU6ICIgKyBuZXdTdGF0ZSk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25JY2VDb25uZWN0aW9u
UmVjZWl2aW5nQ2hhbmdlKGJvb2xlYW4gcmVjZWl2aW5nKSB7Ci0gICAgICBMb2cuZChUQUcsICJJ
Y2VDb25uZWN0aW9uUmVjZWl2aW5nIGNoYW5nZWQgdG8gIiArIHJlY2VpdmluZyk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25BZGRTdHJlYW0oZmluYWwgTWVkaWFT
dHJlYW0gc3RyZWFtKSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
ICBpZiAocGVlckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzdHJlYW0uYXVkaW9UcmFja3Muc2l6
ZSgpID4gMSB8fCBzdHJlYW0udmlkZW9UcmFja3Muc2l6ZSgpID4gMSkgewotICAgICAgICAgICAg
cmVwb3J0RXJyb3IoIldlaXJkLWxvb2tpbmcgc3RyZWFtOiAiICsgc3RyZWFtKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN0cmVhbS52aWRlb1RyYWNr
cy5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgcmVtb3RlVmlkZW9UcmFjayA9IHN0cmVhbS52
aWRlb1RyYWNrcy5nZXQoMCk7Ci0gICAgICAgICAgICByZW1vdGVWaWRlb1RyYWNrLnNldEVuYWJs
ZWQocmVuZGVyVmlkZW8pOwotICAgICAgICAgICAgZm9yIChWaWRlb1JlbmRlcmVyLkNhbGxiYWNr
cyByZW1vdGVSZW5kZXIgOiByZW1vdGVSZW5kZXJzKSB7Ci0gICAgICAgICAgICAgIHJlbW90ZVZp
ZGVvVHJhY2suYWRkUmVuZGVyZXIobmV3IFZpZGVvUmVuZGVyZXIocmVtb3RlUmVuZGVyKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblJlbW92ZVN0cmVhbShmaW5hbCBNZWRp
YVN0cmVhbSBzdHJlYW0pIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICAgIHJlbW90ZVZpZGVvVHJhY2sgPSBudWxsOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkRhdGFDaGFubmVsKGZpbmFsIERh
dGFDaGFubmVsIGRjKSB7Ci0gICAgICByZXBvcnRFcnJvcigiQXBwUlRDIGRvZXNuJ3QgdXNlIGRh
dGEgY2hhbm5lbHMsIGJ1dCBnb3Q6ICIgKyBkYy5sYWJlbCgpICsgIiBhbnl3YXkhIik7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25SZW5lZ290aWF0aW9uTmVlZGVk
KCkgewotICAgICAgLy8gTm8gbmVlZCB0byBkbyBhbnl0aGluZzsgQXBwUlRDIGZvbGxvd3MgYSBw
cmUtYWdyZWVkLXVwb24KLSAgICAgIC8vIHNpZ25hbGluZy9uZWdvdGlhdGlvbiBwcm90b2NvbC4K
LSAgICB9Ci0gIH0KLQotICAvLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWw6IGhhbmRsZSBvZmZlciBj
cmVhdGlvbi9zaWduYWxpbmcgYW5kIGFuc3dlciBzZXR0aW5nLAotICAvLyBhcyB3ZWxsIGFzIGFk
ZGluZyByZW1vdGUgSUNFIGNhbmRpZGF0ZXMgb25jZSB0aGUgYW5zd2VyIFNEUCBpcyBzZXQuCi0g
IHByaXZhdGUgY2xhc3MgU0RQT2JzZXJ2ZXIgaW1wbGVtZW50cyBTZHBPYnNlcnZlciB7Ci0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGVTdWNjZXNzKGZpbmFsIFNlc3Npb25E
ZXNjcmlwdGlvbiBvcmlnU2RwKSB7Ci0gICAgICBpZiAobG9jYWxTZHAgIT0gbnVsbCkgewotICAg
ICAgICByZXBvcnRFcnJvcigiTXVsdGlwbGUgU0RQIGNyZWF0ZS4iKTsKLSAgICAgICAgcmV0dXJu
OwotICAgICAgfQotICAgICAgU3RyaW5nIHNkcERlc2NyaXB0aW9uID0gb3JpZ1NkcC5kZXNjcmlw
dGlvbjsKLSAgICAgIGlmIChwcmVmZXJJc2FjKSB7Ci0gICAgICAgIHNkcERlc2NyaXB0aW9uID0g
cHJlZmVyQ29kZWMoc2RwRGVzY3JpcHRpb24sIEFVRElPX0NPREVDX0lTQUMsIHRydWUpOwotICAg
ICAgfQotICAgICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgICAgc2RwRGVzY3JpcHRp
b24gPSBwcmVmZXJDb2RlYyhzZHBEZXNjcmlwdGlvbiwgcHJlZmVycmVkVmlkZW9Db2RlYywgZmFs
c2UpOwotICAgICAgfQotICAgICAgZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5ldyBT
ZXNzaW9uRGVzY3JpcHRpb24ob3JpZ1NkcC50eXBlLCBzZHBEZXNjcmlwdGlvbik7Ci0gICAgICBs
b2NhbFNkcCA9IHNkcDsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAg
IGlmIChwZWVyQ29ubmVjdGlvbiAhPSBudWxsICYmICFpc0Vycm9yKSB7Ci0gICAgICAgICAgICBM
b2cuZChUQUcsICJTZXQgbG9jYWwgU0RQIGZyb20gIiArIHNkcC50eXBlKTsKLSAgICAgICAgICAg
IHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2RwT2JzZXJ2ZXIsIHNkcCk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvblNldFN1Y2Nlc3MoKSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRl
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBpc0Vycm9y
KSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChpc0lu
aXRpYXRvcikgewotICAgICAgICAgICAgLy8gRm9yIG9mZmVyaW5nIHBlZXIgY29ubmVjdGlvbiB3
ZSBmaXJzdCBjcmVhdGUgb2ZmZXIgYW5kIHNldAotICAgICAgICAgICAgLy8gbG9jYWwgU0RQLCB0
aGVuIGFmdGVyIHJlY2VpdmluZyBhbnN3ZXIgc2V0IHJlbW90ZSBTRFAuCi0gICAgICAgICAgICBp
ZiAocGVlckNvbm5lY3Rpb24uZ2V0UmVtb3RlRGVzY3JpcHRpb24oKSA9PSBudWxsKSB7Ci0gICAg
ICAgICAgICAgIC8vIFdlJ3ZlIGp1c3Qgc2V0IG91ciBsb2NhbCBTRFAgc28gdGltZSB0byBzZW5k
IGl0LgotICAgICAgICAgICAgICBMb2cuZChUQUcsICJMb2NhbCBTRFAgc2V0IHN1Y2Nlc2Z1bGx5
Iik7Ci0gICAgICAgICAgICAgIGV2ZW50cy5vbkxvY2FsRGVzY3JpcHRpb24obG9jYWxTZHApOwot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgLy8gV2UndmUganVzdCBzZXQgcmVt
b3RlIGRlc2NyaXB0aW9uLCBzbyBkcmFpbiByZW1vdGUKLSAgICAgICAgICAgICAgLy8gYW5kIHNl
bmQgbG9jYWwgSUNFIGNhbmRpZGF0ZXMuCi0gICAgICAgICAgICAgIExvZy5kKFRBRywgIlJlbW90
ZSBTRFAgc2V0IHN1Y2Nlc2Z1bGx5Iik7Ci0gICAgICAgICAgICAgIGRyYWluQ2FuZGlkYXRlcygp
OwotICAgICAgICAgICAgfQotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3Ig
YW5zd2VyaW5nIHBlZXIgY29ubmVjdGlvbiB3ZSBzZXQgcmVtb3RlIFNEUCBhbmQgdGhlbgotICAg
ICAgICAgICAgLy8gY3JlYXRlIGFuc3dlciBhbmQgc2V0IGxvY2FsIFNEUC4KLSAgICAgICAgICAg
IGlmIChwZWVyQ29ubmVjdGlvbi5nZXRMb2NhbERlc2NyaXB0aW9uKCkgIT0gbnVsbCkgewotICAg
ICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IHNldCBvdXIgbG9jYWwgU0RQIHNvIHRpbWUgdG8gc2Vu
ZCBpdCwgZHJhaW4KLSAgICAgICAgICAgICAgLy8gcmVtb3RlIGFuZCBzZW5kIGxvY2FsIElDRSBj
YW5kaWRhdGVzLgotICAgICAgICAgICAgICBMb2cuZChUQUcsICJMb2NhbCBTRFAgc2V0IHN1Y2Nl
c2Z1bGx5Iik7Ci0gICAgICAgICAgICAgIGV2ZW50cy5vbkxvY2FsRGVzY3JpcHRpb24obG9jYWxT
ZHApOwotICAgICAgICAgICAgICBkcmFpbkNhbmRpZGF0ZXMoKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgIC8vIFdlJ3ZlIGp1c3Qgc2V0IHJlbW90ZSBTRFAgLSBkbyBub3Ro
aW5nIGZvciBub3cgLQotICAgICAgICAgICAgICAvLyBhbnN3ZXIgd2lsbCBiZSBjcmVhdGVkIHNv
b24uCi0gICAgICAgICAgICAgIExvZy5kKFRBRywgIlJlbW90ZSBTRFAgc2V0IHN1Y2Nlc2Z1bGx5
Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZUZhaWx1cmUoZmlu
YWwgU3RyaW5nIGVycm9yKSB7Ci0gICAgICByZXBvcnRFcnJvcigiY3JlYXRlU0RQIGVycm9yOiAi
ICsgZXJyb3IpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2V0
RmFpbHVyZShmaW5hbCBTdHJpbmcgZXJyb3IpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJzZXRTRFAg
ZXJyb3I6ICIgKyBlcnJvcik7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvUGVyY2VudEZyYW1lTGF5b3V0LmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlcmNlbnRGcmFtZUxheW91dC5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUGVyY2VudEZyYW1lTGF5b3V0
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw5NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5D
b250ZXh0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9p
ZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLQotLyoqCi0gKiBT
aW1wbGUgY29udGFpbmVyIHRoYXQgY29uZmluZXMgdGhlIGNoaWxkcmVuIHRvIGEgc3VicmVjdGFu
Z2xlIHNwZWNpZmllZCBhcyBwZXJjZW50YWdlIHZhbHVlcyBvZgotICogdGhlIGNvbnRhaW5lciBz
aXplLiBUaGUgY2hpbGRyZW4gYXJlIGNlbnRlcmVkIGhvcml6b250YWxseSBhbmQgdmVydGljYWxs
eSBpbnNpZGUgdGhlIGNvbmZpbmVkCi0gKiBzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIFBlcmNl
bnRGcmFtZUxheW91dCBleHRlbmRzIFZpZXdHcm91cCB7Ci0gIHByaXZhdGUgaW50IHhQZXJjZW50
ID0gMDsKLSAgcHJpdmF0ZSBpbnQgeVBlcmNlbnQgPSAwOwotICBwcml2YXRlIGludCB3aWR0aFBl
cmNlbnQgPSAxMDA7Ci0gIHByaXZhdGUgaW50IGhlaWdodFBlcmNlbnQgPSAxMDA7Ci0KLSAgcHVi
bGljIFBlcmNlbnRGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQpIHsKLSAgICBzdXBlcihjb250
ZXh0KTsKLSAgfQotCi0gIHB1YmxpYyBQZXJjZW50RnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0
LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAgICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gIH0K
LQotICBwdWJsaWMgUGVyY2VudEZyYW1lTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRl
U2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRyKSB7Ci0gICAgc3VwZXIoY29udGV4dCwgYXR0cnMs
IGRlZlN0eWxlQXR0cik7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQb3NpdGlvbihpbnQgeFBl
cmNlbnQsIGludCB5UGVyY2VudCwgaW50IHdpZHRoUGVyY2VudCwgaW50IGhlaWdodFBlcmNlbnQp
IHsKLSAgICB0aGlzLnhQZXJjZW50ID0geFBlcmNlbnQ7Ci0gICAgdGhpcy55UGVyY2VudCA9IHlQ
ZXJjZW50OwotICAgIHRoaXMud2lkdGhQZXJjZW50ID0gd2lkdGhQZXJjZW50OwotICAgIHRoaXMu
aGVpZ2h0UGVyY2VudCA9IGhlaWdodFBlcmNlbnQ7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIGJvb2xlYW4gc2hvdWxkRGVsYXlDaGlsZFByZXNzZWRTdGF0ZSgpIHsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGlu
dCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVpZ2h0TWVhc3VyZVNwZWMpIHsKLSAgICBmaW5hbCBp
bnQgd2lkdGggPSBnZXREZWZhdWx0U2l6ZShJbnRlZ2VyLk1BWF9WQUxVRSwgd2lkdGhNZWFzdXJl
U3BlYyk7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IGdldERlZmF1bHRTaXplKEludGVnZXIuTUFY
X1ZBTFVFLCBoZWlnaHRNZWFzdXJlU3BlYyk7Ci0gICAgc2V0TWVhc3VyZWREaW1lbnNpb24oTWVh
c3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHdpZHRoLCBNZWFzdXJlU3BlYy5FWEFDVExZKSwKLSAg
ICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKGhlaWdodCwgTWVhc3VyZVNwZWMuRVhB
Q1RMWSkpOwotCi0gICAgZmluYWwgaW50IGNoaWxkV2lkdGhNZWFzdXJlU3BlYyA9Ci0gICAgICAg
IE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyh3aWR0aCAqIHdpZHRoUGVyY2VudCAvIDEwMCwg
TWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgZmluYWwgaW50IGNoaWxkSGVpZ2h0TWVhc3VyZVNw
ZWMgPQotICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoaGVpZ2h0ICogaGVpZ2h0
UGVyY2VudCAvIDEwMCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBnZXRDaGlsZENvdW50KCk7ICsraSkgewotICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdl
dENoaWxkQXQoaSk7Ci0gICAgICBpZiAoY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsK
LSAgICAgICAgY2hpbGQubWVhc3VyZShjaGlsZFdpZHRoTWVhc3VyZVNwZWMsIGNoaWxkSGVpZ2h0
TWVhc3VyZVNwZWMpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90
ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFuIGNoYW5nZWQsIGludCBsZWZ0LCBpbnQgdG9wLCBp
bnQgcmlnaHQsIGludCBib3R0b20pIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSByaWdodCAtIGxl
ZnQ7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9IGJvdHRvbSAtIHRvcDsKLSAgICAvLyBTdWItcmVj
dGFuZ2xlIHNwZWNpZmllZCBieSBwZXJjZW50YWdlIHZhbHVlcy4KLSAgICBmaW5hbCBpbnQgc3Vi
V2lkdGggPSB3aWR0aCAqIHdpZHRoUGVyY2VudCAvIDEwMDsKLSAgICBmaW5hbCBpbnQgc3ViSGVp
Z2h0ID0gaGVpZ2h0ICogaGVpZ2h0UGVyY2VudCAvIDEwMDsKLSAgICBmaW5hbCBpbnQgc3ViTGVm
dCA9IGxlZnQgKyB3aWR0aCAqIHhQZXJjZW50IC8gMTAwOwotICAgIGZpbmFsIGludCBzdWJUb3Ag
PSB0b3AgKyBoZWlnaHQgKiB5UGVyY2VudCAvIDEwMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZ2V0Q2hpbGRDb3VudCgpOyArK2kpIHsKLSAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRD
aGlsZEF0KGkpOwotICAgICAgaWYgKGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7Ci0g
ICAgICAgIGZpbmFsIGludCBjaGlsZFdpZHRoID0gY2hpbGQuZ2V0TWVhc3VyZWRXaWR0aCgpOwot
ICAgICAgICBmaW5hbCBpbnQgY2hpbGRIZWlnaHQgPSBjaGlsZC5nZXRNZWFzdXJlZEhlaWdodCgp
OwotICAgICAgICAvLyBDZW50ZXIgY2hpbGQgYm90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFs
bHkuCi0gICAgICAgIGZpbmFsIGludCBjaGlsZExlZnQgPSBzdWJMZWZ0ICsgKHN1YldpZHRoIC0g
Y2hpbGRXaWR0aCkgLyAyOwotICAgICAgICBmaW5hbCBpbnQgY2hpbGRUb3AgPSBzdWJUb3AgKyAo
c3ViSGVpZ2h0IC0gY2hpbGRIZWlnaHQpIC8gMjsKLSAgICAgICAgY2hpbGQubGF5b3V0KGNoaWxk
TGVmdCwgY2hpbGRUb3AsIGNoaWxkTGVmdCArIGNoaWxkV2lkdGgsIGNoaWxkVG9wICsgY2hpbGRI
ZWlnaHQpOwotICAgICAgfQotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNw
b3QvYXBwcnRjL1Jvb21QYXJhbWV0ZXJzRmV0Y2hlci5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Sb29tUGFyYW1ldGVyc0ZldGNoZXIuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1Jvb21QYXJhbWV0ZXJz
RmV0Y2hlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFwcHNw
b3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy5h
cHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFw
cHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5Bc3luY0h0dHBFdmVudHM7
Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5
OwotaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmpzb24uSlNPTk9i
amVjdDsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRj
LlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwot
Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFt
OwotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEubmV0LlVS
TDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2Nhbm5l
cjsKLQotLyoqCi0gKiBBc3luY1Rhc2sgdGhhdCBjb252ZXJ0cyBhbiBBcHBSVEMgcm9vbSBVUkwg
aW50byB0aGUgc2V0IG9mIHNpZ25hbGluZwotICogcGFyYW1ldGVycyB0byB1c2Ugd2l0aCB0aGF0
IHJvb20uCi0gKi8KLXB1YmxpYyBjbGFzcyBSb29tUGFyYW1ldGVyc0ZldGNoZXIgewotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlJvb21SVENDbGllbnQiOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgVFVSTl9IVFRQX1RJTUVPVVRfTVMgPSA1MDAwOwotICBwcml2YXRl
IGZpbmFsIFJvb21QYXJhbWV0ZXJzRmV0Y2hlckV2ZW50cyBldmVudHM7Ci0gIHByaXZhdGUgZmlu
YWwgU3RyaW5nIHJvb21Vcmw7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHJvb21NZXNzYWdlOwot
ICBwcml2YXRlIEFzeW5jSHR0cFVSTENvbm5lY3Rpb24gaHR0cENvbm5lY3Rpb247Ci0KLSAgLyoq
Ci0gICAqIFJvb20gcGFyYW1ldGVycyBmZXRjaGVyIGNhbGxiYWNrcy4KLSAgICovCi0gIHB1Ymxp
YyBpbnRlcmZhY2UgUm9vbVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzIHsKLSAgICAvKioKLSAgICAg
KiBDYWxsYmFjayBmaXJlZCBvbmNlIHRoZSByb29tJ3Mgc2lnbmFsaW5nIHBhcmFtZXRlcnMKLSAg
ICAgKiBTaWduYWxpbmdQYXJhbWV0ZXJzIGFyZSBleHRyYWN0ZWQuCi0gICAgICovCi0gICAgdm9p
ZCBvblNpZ25hbGluZ1BhcmFtZXRlcnNSZWFkeShmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBh
cmFtcyk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmb3Igcm9vbSBwYXJhbWV0ZXJzIGV4
dHJhY3Rpb24gZXJyb3IuCi0gICAgICovCi0gICAgdm9pZCBvblNpZ25hbGluZ1BhcmFtZXRlcnNF
cnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgcHVibGljIFJvb21QYXJh
bWV0ZXJzRmV0Y2hlcigKLSAgICAgIFN0cmluZyByb29tVXJsLCBTdHJpbmcgcm9vbU1lc3NhZ2Us
IGZpbmFsIFJvb21QYXJhbWV0ZXJzRmV0Y2hlckV2ZW50cyBldmVudHMpIHsKLSAgICB0aGlzLnJv
b21VcmwgPSByb29tVXJsOwotICAgIHRoaXMucm9vbU1lc3NhZ2UgPSByb29tTWVzc2FnZTsKLSAg
ICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIG1ha2VSZXF1ZXN0
KCkgewotICAgIExvZy5kKFRBRywgIkNvbm5lY3RpbmcgdG8gcm9vbTogIiArIHJvb21VcmwpOwot
ICAgIGh0dHBDb25uZWN0aW9uID0KLSAgICAgICAgbmV3IEFzeW5jSHR0cFVSTENvbm5lY3Rpb24o
IlBPU1QiLCByb29tVXJsLCByb29tTWVzc2FnZSwgbmV3IEFzeW5jSHR0cEV2ZW50cygpIHsKLSAg
ICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0dHBFcnJvcihTdHJp
bmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJSb29tIGNvbm5lY3Rp
b24gZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgICAgICAgICAgZXZlbnRzLm9uU2lnbmFs
aW5nUGFyYW1ldGVyc0Vycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAg
ICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRwQ29tcGxldGUoU3RyaW5n
IHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICByb29tSHR0cFJlc3BvbnNlUGFyc2UocmVzcG9uc2Up
OwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgaHR0cENvbm5lY3Rpb24uc2VuZCgpOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJvb21IdHRwUmVzcG9uc2VQYXJzZShTdHJpbmcgcmVzcG9u
c2UpIHsKLSAgICBMb2cuZChUQUcsICJSb29tIHJlc3BvbnNlOiAiICsgcmVzcG9uc2UpOwotICAg
IHRyeSB7Ci0gICAgICBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRlcyA9IG51
bGw7Ci0gICAgICBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAgPSBudWxsOwotICAgICAgSlNP
Tk9iamVjdCByb29tSnNvbiA9IG5ldyBKU09OT2JqZWN0KHJlc3BvbnNlKTsKLQotICAgICAgU3Ry
aW5nIHJlc3VsdCA9IHJvb21Kc29uLmdldFN0cmluZygicmVzdWx0Iik7Ci0gICAgICBpZiAoIXJl
c3VsdC5lcXVhbHMoIlNVQ0NFU1MiKSkgewotICAgICAgICBldmVudHMub25TaWduYWxpbmdQYXJh
bWV0ZXJzRXJyb3IoIlJvb20gcmVzcG9uc2UgZXJyb3I6ICIgKyByZXN1bHQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0gICAgICByZXNwb25zZSA9IHJvb21Kc29uLmdldFN0cmluZygicGFy
YW1zIik7Ci0gICAgICByb29tSnNvbiA9IG5ldyBKU09OT2JqZWN0KHJlc3BvbnNlKTsKLSAgICAg
IFN0cmluZyByb29tSWQgPSByb29tSnNvbi5nZXRTdHJpbmcoInJvb21faWQiKTsKLSAgICAgIFN0
cmluZyBjbGllbnRJZCA9IHJvb21Kc29uLmdldFN0cmluZygiY2xpZW50X2lkIik7Ci0gICAgICBT
dHJpbmcgd3NzVXJsID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJ3c3NfdXJsIik7Ci0gICAgICBTdHJp
bmcgd3NzUG9zdFVybCA9IHJvb21Kc29uLmdldFN0cmluZygid3NzX3Bvc3RfdXJsIik7Ci0gICAg
ICBib29sZWFuIGluaXRpYXRvciA9IChyb29tSnNvbi5nZXRCb29sZWFuKCJpc19pbml0aWF0b3Ii
KSk7Ci0gICAgICBpZiAoIWluaXRpYXRvcikgewotICAgICAgICBpY2VDYW5kaWRhdGVzID0gbmV3
IExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPigpOwotICAgICAgICBTdHJpbmcgbWVzc2FnZXNTdHJp
bmcgPSByb29tSnNvbi5nZXRTdHJpbmcoIm1lc3NhZ2VzIik7Ci0gICAgICAgIEpTT05BcnJheSBt
ZXNzYWdlcyA9IG5ldyBKU09OQXJyYXkobWVzc2FnZXNTdHJpbmcpOwotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICBTdHJpbmcg
bWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VzLmdldFN0cmluZyhpKTsKLSAgICAgICAgICBKU09OT2Jq
ZWN0IG1lc3NhZ2UgPSBuZXcgSlNPTk9iamVjdChtZXNzYWdlU3RyaW5nKTsKLSAgICAgICAgICBT
dHJpbmcgbWVzc2FnZVR5cGUgPSBtZXNzYWdlLmdldFN0cmluZygidHlwZSIpOwotICAgICAgICAg
IExvZy5kKFRBRywgIkdBRS0+QyAjIiArIGkgKyAiIDogIiArIG1lc3NhZ2VTdHJpbmcpOwotICAg
ICAgICAgIGlmIChtZXNzYWdlVHlwZS5lcXVhbHMoIm9mZmVyIikpIHsKLSAgICAgICAgICAgIG9m
ZmVyU2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgICBTZXNzaW9u
RGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybShtZXNzYWdlVHlwZSksIG1lc3NhZ2Uu
Z2V0U3RyaW5nKCJzZHAiKSk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChtZXNzYWdlVHlwZS5lcXVh
bHMoImNhbmRpZGF0ZSIpKSB7Ci0gICAgICAgICAgICBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlID0g
bmV3IEljZUNhbmRpZGF0ZSgKLSAgICAgICAgICAgICAgICBtZXNzYWdlLmdldFN0cmluZygiaWQi
KSwgbWVzc2FnZS5nZXRJbnQoImxhYmVsIiksIG1lc3NhZ2UuZ2V0U3RyaW5nKCJjYW5kaWRhdGUi
KSk7Ci0gICAgICAgICAgICBpY2VDYW5kaWRhdGVzLmFkZChjYW5kaWRhdGUpOwotICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJVbmtub3duIG1lc3NhZ2U6ICIgKyBt
ZXNzYWdlU3RyaW5nKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIExv
Zy5kKFRBRywgIlJvb21JZDogIiArIHJvb21JZCArICIuIENsaWVudElkOiAiICsgY2xpZW50SWQp
OwotICAgICAgTG9nLmQoVEFHLCAiSW5pdGlhdG9yOiAiICsgaW5pdGlhdG9yKTsKLSAgICAgIExv
Zy5kKFRBRywgIldTUyB1cmw6ICIgKyB3c3NVcmwpOwotICAgICAgTG9nLmQoVEFHLCAiV1NTIFBP
U1QgdXJsOiAiICsgd3NzUG9zdFVybCk7Ci0KLSAgICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rp
b24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzID0KLSAgICAgICAgICBpY2VTZXJ2ZXJzRnJvbVBDQ29u
ZmlnSlNPTihyb29tSnNvbi5nZXRTdHJpbmcoInBjX2NvbmZpZyIpKTsKLSAgICAgIGJvb2xlYW4g
aXNUdXJuUHJlc2VudCA9IGZhbHNlOwotICAgICAgZm9yIChQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2
ZXIgc2VydmVyIDogaWNlU2VydmVycykgewotICAgICAgICBMb2cuZChUQUcsICJJY2VTZXJ2ZXI6
ICIgKyBzZXJ2ZXIpOwotICAgICAgICBpZiAoc2VydmVyLnVyaS5zdGFydHNXaXRoKCJ0dXJuOiIp
KSB7Ci0gICAgICAgICAgaXNUdXJuUHJlc2VudCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8vIFJlcXVlc3QgVFVSTiBzZXJ2ZXJzLgotICAgICAg
aWYgKCFpc1R1cm5QcmVzZW50KSB7Ci0gICAgICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24u
SWNlU2VydmVyPiB0dXJuU2VydmVycyA9Ci0gICAgICAgICAgICByZXF1ZXN0VHVyblNlcnZlcnMo
cm9vbUpzb24uZ2V0U3RyaW5nKCJpY2Vfc2VydmVyX3VybCIpKTsKLSAgICAgICAgZm9yIChQZWVy
Q29ubmVjdGlvbi5JY2VTZXJ2ZXIgdHVyblNlcnZlciA6IHR1cm5TZXJ2ZXJzKSB7Ci0gICAgICAg
ICAgTG9nLmQoVEFHLCAiVHVyblNlcnZlcjogIiArIHR1cm5TZXJ2ZXIpOwotICAgICAgICAgIGlj
ZVNlcnZlcnMuYWRkKHR1cm5TZXJ2ZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIFNp
Z25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zID0gbmV3IFNpZ25hbGluZ1BhcmFtZXRlcnMoCi0gICAg
ICAgICAgaWNlU2VydmVycywgaW5pdGlhdG9yLCBjbGllbnRJZCwgd3NzVXJsLCB3c3NQb3N0VXJs
LCBvZmZlclNkcCwgaWNlQ2FuZGlkYXRlcyk7Ci0gICAgICBldmVudHMub25TaWduYWxpbmdQYXJh
bWV0ZXJzUmVhZHkocGFyYW1zKTsKLSAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAg
ICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNFcnJvcigiUm9vbSBKU09OIHBhcnNpbmcg
ZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsK
LSAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNFcnJvcigiUm9vbSBJTyBlcnJvcjog
IiArIGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVxdWVzdHMgJiByZXR1cm5z
IGEgVFVSTiBJQ0UgU2VydmVyIGJhc2VkIG9uIGEgcmVxdWVzdCBVUkwuICBNdXN0IGJlIHJ1bgot
ICAvLyBvZmYgdGhlIG1haW4gdGhyZWFkIQotICBwcml2YXRlIExpbmtlZExpc3Q8UGVlckNvbm5l
Y3Rpb24uSWNlU2VydmVyPiByZXF1ZXN0VHVyblNlcnZlcnMoU3RyaW5nIHVybCkKLSAgICAgIHRo
cm93cyBJT0V4Y2VwdGlvbiwgSlNPTkV4Y2VwdGlvbiB7Ci0gICAgTGlua2VkTGlzdDxQZWVyQ29u
bmVjdGlvbi5JY2VTZXJ2ZXI+IHR1cm5TZXJ2ZXJzID0gbmV3IExpbmtlZExpc3Q8UGVlckNvbm5l
Y3Rpb24uSWNlU2VydmVyPigpOwotICAgIExvZy5kKFRBRywgIlJlcXVlc3QgVFVSTiBmcm9tOiAi
ICsgdXJsKTsKLSAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25u
ZWN0aW9uKSBuZXcgVVJMKHVybCkub3BlbkNvbm5lY3Rpb24oKTsKLSAgICBjb25uZWN0aW9uLnNl
dERvT3V0cHV0KHRydWUpOwotICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KCJSRUZF
UkVSIiwgImh0dHBzOi8vYXBwci50YyIpOwotICAgIGNvbm5lY3Rpb24uc2V0Q29ubmVjdFRpbWVv
dXQoVFVSTl9IVFRQX1RJTUVPVVRfTVMpOwotICAgIGNvbm5lY3Rpb24uc2V0UmVhZFRpbWVvdXQo
VFVSTl9IVFRQX1RJTUVPVVRfTVMpOwotICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uZWN0aW9u
LmdldFJlc3BvbnNlQ29kZSgpOwotICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7Ci0gICAg
ICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIk5vbi0yMDAgcmVzcG9uc2Ugd2hlbiByZXF1ZXN0aW5n
IFRVUk4gc2VydmVyIGZyb20gIiArIHVybCArICIgOiAiCi0gICAgICAgICAgKyBjb25uZWN0aW9u
LmdldEhlYWRlckZpZWxkKG51bGwpKTsKLSAgICB9Ci0gICAgSW5wdXRTdHJlYW0gcmVzcG9uc2VT
dHJlYW0gPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7Ci0gICAgU3RyaW5nIHJlc3BvbnNl
ID0gZHJhaW5TdHJlYW0ocmVzcG9uc2VTdHJlYW0pOwotICAgIGNvbm5lY3Rpb24uZGlzY29ubmVj
dCgpOwotICAgIExvZy5kKFRBRywgIlRVUk4gcmVzcG9uc2U6ICIgKyByZXNwb25zZSk7Ci0gICAg
SlNPTk9iamVjdCByZXNwb25zZUpTT04gPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZSk7Ci0gICAg
SlNPTkFycmF5IGljZVNlcnZlcnMgPSByZXNwb25zZUpTT04uZ2V0SlNPTkFycmF5KCJpY2VTZXJ2
ZXJzIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpY2VTZXJ2ZXJzLmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgIEpTT05PYmplY3Qgc2VydmVyID0gaWNlU2VydmVycy5nZXRKU09OT2JqZWN0KGkp
OwotICAgICAgSlNPTkFycmF5IHR1cm5VcmxzID0gc2VydmVyLmdldEpTT05BcnJheSgidXJscyIp
OwotICAgICAgU3RyaW5nIHVzZXJuYW1lID0gc2VydmVyLmhhcygidXNlcm5hbWUiKSA/IHNlcnZl
ci5nZXRTdHJpbmcoInVzZXJuYW1lIikgOiAiIjsKLSAgICAgIFN0cmluZyBjcmVkZW50aWFsID0g
c2VydmVyLmhhcygiY3JlZGVudGlhbCIpID8gc2VydmVyLmdldFN0cmluZygiY3JlZGVudGlhbCIp
IDogIiI7Ci0gICAgICBmb3IgKGludCBqID0gMDsgaiA8IHR1cm5VcmxzLmxlbmd0aCgpOyBqKysp
IHsKLSAgICAgICAgU3RyaW5nIHR1cm5VcmwgPSB0dXJuVXJscy5nZXRTdHJpbmcoaik7Ci0gICAg
ICAgIHR1cm5TZXJ2ZXJzLmFkZChuZXcgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyKHR1cm5Vcmws
IHVzZXJuYW1lLCBjcmVkZW50aWFsKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0dXJu
U2VydmVyczsKLSAgfQotCi0gIC8vIFJldHVybiB0aGUgbGlzdCBvZiBJQ0Ugc2VydmVycyBkZXNj
cmliZWQgYnkgYSBXZWJSVENQZWVyQ29ubmVjdGlvbgotICAvLyBjb25maWd1cmF0aW9uIHN0cmlu
Zy4KLSAgcHJpdmF0ZSBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2Vy
dmVyc0Zyb21QQ0NvbmZpZ0pTT04oU3RyaW5nIHBjQ29uZmlnKQotICAgICAgdGhyb3dzIEpTT05F
eGNlcHRpb24gewotICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KHBjQ29uZmln
KTsKLSAgICBKU09OQXJyYXkgc2VydmVycyA9IGpzb24uZ2V0SlNPTkFycmF5KCJpY2VTZXJ2ZXJz
Iik7Ci0gICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IHJldCA9IG5ldyBM
aW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4oKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IHNlcnZlcnMubGVuZ3RoKCk7ICsraSkgewotICAgICAgSlNPTk9iamVjdCBzZXJ2ZXIg
PSBzZXJ2ZXJzLmdldEpTT05PYmplY3QoaSk7Ci0gICAgICBTdHJpbmcgdXJsID0gc2VydmVyLmdl
dFN0cmluZygidXJscyIpOwotICAgICAgU3RyaW5nIGNyZWRlbnRpYWwgPSBzZXJ2ZXIuaGFzKCJj
cmVkZW50aWFsIikgPyBzZXJ2ZXIuZ2V0U3RyaW5nKCJjcmVkZW50aWFsIikgOiAiIjsKLSAgICAg
IHJldC5hZGQobmV3IFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcih1cmwsICIiLCBjcmVkZW50aWFs
KSk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhlIGNvbnRl
bnRzIG9mIGFuIElucHV0U3RyZWFtIGFzIGEgU3RyaW5nLgotICBwcml2YXRlIHN0YXRpYyBTdHJp
bmcgZHJhaW5TdHJlYW0oSW5wdXRTdHJlYW0gaW4pIHsKLSAgICBTY2FubmVyIHMgPSBuZXcgU2Nh
bm5lcihpbikudXNlRGVsaW1pdGVyKCJcXEEiKTsKLSAgICByZXR1cm4gcy5oYXNOZXh0KCkgPyBz
Lm5leHQoKSA6ICIiOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMv
U2V0dGluZ3NBY3Rpdml0eS5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9TZXR0aW5nc0FjdGl2aXR5LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5nc0FjdGl2aXR5LmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwyNjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBw
c3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNo
YXJlZFByZWZlcmVuY2VzLk9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyOwotaW1wb3J0
IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5MaXN0UHJlZmVy
ZW5jZTsKLWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZTsKLWltcG9ydCBvcmcu
d2VicnRjLkNhbWVyYTJFbnVtZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMudm9pY2VlbmdpbmUu
V2ViUnRjQXVkaW9VdGlsczsKLQotLyoqCi0gKiBTZXR0aW5ncyBhY3Rpdml0eSBmb3IgQXBwUlRD
LgotICovCi1wdWJsaWMgY2xhc3MgU2V0dGluZ3NBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IGlt
cGxlbWVudHMgT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIgewotICBwcml2YXRlIFNl
dHRpbmdzRnJhZ21lbnQgc2V0dGluZ3NGcmFnbWVudDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJl
ZlZpZGVvQ2FsbDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlNjcmVlbmNhcHR1cmU7Ci0gIHBy
aXZhdGUgU3RyaW5nIGtleXByZWZDYW1lcmEyOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmUmVz
b2x1dGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkZwczsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVyOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmTWF4
VmlkZW9CaXRyYXRlVHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk1heFZpZGVvQml0cmF0
ZVZhbHVlOwotICBwcml2YXRlIFN0cmluZyBrZXlQcmVmVmlkZW9Db2RlYzsKLSAgcHJpdmF0ZSBT
dHJpbmcga2V5cHJlZkh3Q29kZWM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZDYXB0dXJlVG9U
ZXh0dXJlOwotCi0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGU7
Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVZhbHVlOwotICBwcml2
YXRlIFN0cmluZyBrZXlQcmVmQXVkaW9Db2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk5v
QXVkaW9Qcm9jZXNzaW5nOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQWVjRHVtcDsKLSAgcHJp
dmF0ZSBTdHJpbmcga2V5cHJlZk9wZW5TTEVTOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRGlz
YWJsZUJ1aWx0SW5BRUM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVpbHRJbkFH
QzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluTlM7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZFbmFibGVMZXZlbENvbnRyb2w7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXBy
ZWZTcGVha2VycGhvbmU7Ci0KLSAgcHJpdmF0ZSBTdHJpbmcga2V5UHJlZlJvb21TZXJ2ZXJVcmw7
Ci0gIHByaXZhdGUgU3RyaW5nIGtleVByZWZEaXNwbGF5SHVkOwotICBwcml2YXRlIFN0cmluZyBr
ZXlQcmVmVHJhY2luZzsKLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUo
QnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5z
dGFuY2VTdGF0ZSk7Ci0gICAga2V5cHJlZlZpZGVvQ2FsbCA9IGdldFN0cmluZyhSLnN0cmluZy5w
cmVmX3ZpZGVvY2FsbF9rZXkpOwotICAgIGtleXByZWZTY3JlZW5jYXB0dXJlID0gZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfc2NyZWVuY2FwdHVyZV9rZXkpOwotICAgIGtleXByZWZDYW1lcmEyID0g
Z2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2FtZXJhMl9rZXkpOwotICAgIGtleXByZWZSZXNvbHV0
aW9uID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcmVzb2x1dGlvbl9rZXkpOwotICAgIGtleXBy
ZWZGcHMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9mcHNfa2V5KTsKLSAgICBrZXlwcmVmQ2Fw
dHVyZVF1YWxpdHlTbGlkZXIgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9jYXB0dXJlcXVhbGl0
eXNsaWRlcl9rZXkpOwotICAgIGtleXByZWZNYXhWaWRlb0JpdHJhdGVUeXBlID0gZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRyYXRlX2tleSk7Ci0gICAga2V5cHJlZk1heFZpZGVv
Qml0cmF0ZVZhbHVlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRyYXRldmFs
dWVfa2V5KTsKLSAgICBrZXlQcmVmVmlkZW9Db2RlYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X3ZpZGVvY29kZWNfa2V5KTsKLSAgICBrZXlwcmVmSHdDb2RlYyA9IGdldFN0cmluZyhSLnN0cmlu
Zy5wcmVmX2h3Y29kZWNfa2V5KTsKLSAgICBrZXlwcmVmQ2FwdHVyZVRvVGV4dHVyZSA9IGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmV0b3RleHR1cmVfa2V5KTsKLQotICAgIGtleXByZWZT
dGFydEF1ZGlvQml0cmF0ZVR5cGUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlv
Yml0cmF0ZV9rZXkpOwotICAgIGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVZhbHVlID0gZ2V0U3Ry
aW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9rZXkpOwotICAgIGtleVBy
ZWZBdWRpb0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYXVkaW9jb2RlY19rZXkpOwot
ICAgIGtleXByZWZOb0F1ZGlvUHJvY2Vzc2luZyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX25v
YXVkaW9wcm9jZXNzaW5nX2tleSk7Ci0gICAga2V5cHJlZkFlY0R1bXAgPSBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl9hZWNkdW1wX2tleSk7Ci0gICAga2V5cHJlZk9wZW5TTEVTID0gZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfb3BlbnNsZXNfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5B
RUMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FlY19rZXkpOwot
ICAgIGtleXByZWZEaXNhYmxlQnVpbHRJbkFHQyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rp
c2FibGVfYnVpbHRfaW5fYWdjX2tleSk7Ci0gICAga2V5cHJlZkRpc2FibGVCdWlsdEluTlMgPSBn
ZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2tleSk7Ci0gICAga2V5
cHJlZkVuYWJsZUxldmVsQ29udHJvbCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2VuYWJsZV9s
ZXZlbF9jb250cm9sX2tleSk7Ci0gICAga2V5cHJlZlNwZWFrZXJwaG9uZSA9IGdldFN0cmluZyhS
LnN0cmluZy5wcmVmX3NwZWFrZXJwaG9uZV9rZXkpOwotCi0gICAga2V5UHJlZlJvb21TZXJ2ZXJV
cmwgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yb29tX3NlcnZlcl91cmxfa2V5KTsKLSAgICBr
ZXlQcmVmRGlzcGxheUh1ZCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc3BsYXlodWRfa2V5
KTsKLSAgICBrZXlQcmVmVHJhY2luZyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3RyYWNpbmdf
a2V5KTsKLQotICAgIC8vIERpc3BsYXkgdGhlIGZyYWdtZW50IGFzIHRoZSBtYWluIGNvbnRlbnQu
Ci0gICAgc2V0dGluZ3NGcmFnbWVudCA9IG5ldyBTZXR0aW5nc0ZyYWdtZW50KCk7Ci0gICAgZ2V0
RnJhZ21lbnRNYW5hZ2VyKCkKLSAgICAgICAgLmJlZ2luVHJhbnNhY3Rpb24oKQotICAgICAgICAu
cmVwbGFjZShhbmRyb2lkLlIuaWQuY29udGVudCwgc2V0dGluZ3NGcmFnbWVudCkKLSAgICAgICAg
LmNvbW1pdCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1l
KCkgewotICAgIHN1cGVyLm9uUmVzdW1lKCk7Ci0gICAgLy8gU2V0IHN1bW1hcnkgdG8gYmUgdGhl
IHVzZXItZGVzY3JpcHRpb24gZm9yIHRoZSBzZWxlY3RlZCB2YWx1ZQotICAgIFNoYXJlZFByZWZl
cmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzID0KLSAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5nZXRQ
cmVmZXJlbmNlU2NyZWVuKCkuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoKTsKLSAgICBzaGFyZWRQcmVm
ZXJlbmNlcy5yZWdpc3Rlck9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKHRoaXMpOwot
ICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmVmlkZW9DYWxsKTsK
LSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlNjcmVlbmNhcHR1
cmUpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmQ2FtZXJh
Mik7Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlJlc29sdXRp
b24pOwotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZGcHMpOwot
ICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmQ2FwdHVyZVF1YWxp
dHlTbGlkZXIpOwotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZN
YXhWaWRlb0JpdHJhdGVUeXBlKTsKLSAgICB1cGRhdGVTdW1tYXJ5Qml0cmF0ZShzaGFyZWRQcmVm
ZXJlbmNlcywga2V5cHJlZk1heFZpZGVvQml0cmF0ZVZhbHVlKTsKLSAgICBzZXRWaWRlb0JpdHJh
dGVFbmFibGUoc2hhcmVkUHJlZmVyZW5jZXMpOwotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJl
ZmVyZW5jZXMsIGtleVByZWZWaWRlb0NvZGVjKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQ
cmVmZXJlbmNlcywga2V5cHJlZkh3Q29kZWMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFBy
ZWZlcmVuY2VzLCBrZXlwcmVmQ2FwdHVyZVRvVGV4dHVyZSk7Ci0KLSAgICB1cGRhdGVTdW1tYXJ5
KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVUeXBlKTsKLSAgICB1
cGRhdGVTdW1tYXJ5Qml0cmF0ZShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlN0YXJ0QXVkaW9C
aXRyYXRlVmFsdWUpOwotICAgIHNldEF1ZGlvQml0cmF0ZUVuYWJsZShzaGFyZWRQcmVmZXJlbmNl
cyk7Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5UHJlZkF1ZGlvQ29k
ZWMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmTm9BdWRp
b1Byb2Nlc3NpbmcpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlw
cmVmQWVjRHVtcCk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXBy
ZWZPcGVuU0xFUyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXBy
ZWZEaXNhYmxlQnVpbHRJbkFFQyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5j
ZXMsIGtleXByZWZEaXNhYmxlQnVpbHRJbkFHQyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVk
UHJlZmVyZW5jZXMsIGtleXByZWZEaXNhYmxlQnVpbHRJbk5TKTsKLSAgICB1cGRhdGVTdW1tYXJ5
QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkVuYWJsZUxldmVsQ29udHJvbCk7Ci0gICAgdXBk
YXRlU3VtbWFyeUxpc3Qoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZTcGVha2VycGhvbmUpOwot
Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5UHJlZlJvb21TZXJ2ZXJV
cmwpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmRGlzcGxh
eUh1ZCk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZUcmFj
aW5nKTsKLQotICAgIGlmICghQ2FtZXJhMkVudW1lcmF0b3IuaXNTdXBwb3J0ZWQodGhpcykpIHsK
LSAgICAgIFByZWZlcmVuY2UgY2FtZXJhMlByZWZlcmVuY2UgPSBzZXR0aW5nc0ZyYWdtZW50LmZp
bmRQcmVmZXJlbmNlKGtleXByZWZDYW1lcmEyKTsKLQotICAgICAgY2FtZXJhMlByZWZlcmVuY2Uu
c2V0U3VtbWFyeShnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9jYW1lcmEyX25vdF9zdXBwb3J0ZWQp
KTsKLSAgICAgIGNhbWVyYTJQcmVmZXJlbmNlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLQot
ICAgIC8vIERpc2FibGUgZm9yY2luZyBXZWJSVEMgYmFzZWQgQUVDIHNvIGl0IHdvbid0IGFmZmVj
dCBvdXIgdmFsdWUuCi0gICAgLy8gT3RoZXJ3aXNlLCBpZiBpdCB3YXMgZW5hYmxlZCwgaXNBY291
c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCB3b3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlLgotICAg
IFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcihmYWxz
ZSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLmlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBw
b3J0ZWQoKSkgewotICAgICAgUHJlZmVyZW5jZSBkaXNhYmxlQnVpbHRJbkFFQ1ByZWZlcmVuY2Ug
PQotICAgICAgICAgIHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZkRpc2Fi
bGVCdWlsdEluQUVDKTsKLQotICAgICAgZGlzYWJsZUJ1aWx0SW5BRUNQcmVmZXJlbmNlLnNldFN1
bW1hcnkoZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYnVpbHRfaW5fYWVjX25vdF9hdmFpbGFibGUp
KTsKLSAgICAgIGRpc2FibGVCdWlsdEluQUVDUHJlZmVyZW5jZS5zZXRFbmFibGVkKGZhbHNlKTsK
LSAgICB9Ci0KLSAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQXV0b21hdGljR2Fp
bkNvbnRyb2woZmFsc2UpOwotICAgIGlmICghV2ViUnRjQXVkaW9VdGlscy5pc0F1dG9tYXRpY0dh
aW5Db250cm9sU3VwcG9ydGVkKCkpIHsKLSAgICAgIFByZWZlcmVuY2UgZGlzYWJsZUJ1aWx0SW5B
R0NQcmVmZXJlbmNlID0KLSAgICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNl
KGtleXByZWZEaXNhYmxlQnVpbHRJbkFHQyk7Ci0KLSAgICAgIGRpc2FibGVCdWlsdEluQUdDUHJl
ZmVyZW5jZS5zZXRTdW1tYXJ5KGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2J1aWx0X2luX2FnY19u
b3RfYXZhaWxhYmxlKSk7Ci0gICAgICBkaXNhYmxlQnVpbHRJbkFHQ1ByZWZlcmVuY2Uuc2V0RW5h
YmxlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNl
ZE5vaXNlU3VwcHJlc3NvcihmYWxzZSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLmlzTm9p
c2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpIHsKLSAgICAgIFByZWZlcmVuY2UgZGlzYWJsZUJ1aWx0
SW5OU1ByZWZlcmVuY2UgPQotICAgICAgICAgIHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVu
Y2Uoa2V5cHJlZkRpc2FibGVCdWlsdEluTlMpOwotCi0gICAgICBkaXNhYmxlQnVpbHRJbk5TUHJl
ZmVyZW5jZS5zZXRTdW1tYXJ5KGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2J1aWx0X2luX25zX25v
dF9hdmFpbGFibGUpKTsKLSAgICAgIGRpc2FibGVCdWlsdEluTlNQcmVmZXJlbmNlLnNldEVuYWJs
ZWQoZmFsc2UpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBv
blBhdXNlKCkgewotICAgIHN1cGVyLm9uUGF1c2UoKTsKLSAgICBTaGFyZWRQcmVmZXJlbmNlcyBz
aGFyZWRQcmVmZXJlbmNlcyA9Ci0gICAgICAgIHNldHRpbmdzRnJhZ21lbnQuZ2V0UHJlZmVyZW5j
ZVNjcmVlbigpLmdldFNoYXJlZFByZWZlcmVuY2VzKCk7Ci0gICAgc2hhcmVkUHJlZmVyZW5jZXMu
dW5yZWdpc3Rlck9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyKHRoaXMpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZWQoU2hh
cmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMsIFN0cmluZyBrZXkpIHsKLSAgICAvLyBj
bGFuZy1mb3JtYXQgb2ZmCi0gICAgaWYgKGtleS5lcXVhbHMoa2V5cHJlZlJlc29sdXRpb24pCi0g
ICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkZwcykKLSAgICAgICAgfHwga2V5LmVxdWFscyhr
ZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZSkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlQcmVm
VmlkZW9Db2RlYykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmU3RhcnRBdWRpb0JpdHJh
dGVUeXBlKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleVByZWZBdWRpb0NvZGVjKQotICAgICAg
ICB8fCBrZXkuZXF1YWxzKGtleVByZWZSb29tU2VydmVyVXJsKSkgewotICAgICAgdXBkYXRlU3Vt
bWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5KTsKLSAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMo
a2V5cHJlZk1heFZpZGVvQml0cmF0ZVZhbHVlKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXBy
ZWZTdGFydEF1ZGlvQml0cmF0ZVZhbHVlKSkgewotICAgICAgdXBkYXRlU3VtbWFyeUJpdHJhdGUo
c2hhcmVkUHJlZmVyZW5jZXMsIGtleSk7Ci0gICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKGtleXBy
ZWZWaWRlb0NhbGwpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZlNjcmVlbmNhcHR1cmUp
Ci0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkNhbWVyYTIpCi0gICAgICAgIHx8IGtleS5l
cXVhbHMoa2V5UHJlZlRyYWNpbmcpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkNhcHR1
cmVRdWFsaXR5U2xpZGVyKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZId0NvZGVjKQot
ICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZDYXB0dXJlVG9UZXh0dXJlKQotICAgICAgICB8
fCBrZXkuZXF1YWxzKGtleXByZWZOb0F1ZGlvUHJvY2Vzc2luZykKLSAgICAgICAgfHwga2V5LmVx
dWFscyhrZXlwcmVmQWVjRHVtcCkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmT3BlblNM
RVMpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkRpc2FibGVCdWlsdEluQUVDKQotICAg
ICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZEaXNhYmxlQnVpbHRJbkFHQykKLSAgICAgICAgfHwg
a2V5LmVxdWFscyhrZXlwcmVmRGlzYWJsZUJ1aWx0SW5OUykKLSAgICAgICAgfHwga2V5LmVxdWFs
cyhrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleVBy
ZWZEaXNwbGF5SHVkKSkgewotICAgICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMs
IGtleSk7Ci0gICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKGtleXByZWZTcGVha2VycGhvbmUpKSB7
Ci0gICAgICB1cGRhdGVTdW1tYXJ5TGlzdChzaGFyZWRQcmVmZXJlbmNlcywga2V5KTsKLSAgICB9
Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0gICAgaWYgKGtleS5lcXVhbHMoa2V5cHJlZk1heFZp
ZGVvQml0cmF0ZVR5cGUpKSB7Ci0gICAgICBzZXRWaWRlb0JpdHJhdGVFbmFibGUoc2hhcmVkUHJl
ZmVyZW5jZXMpOwotICAgIH0KLSAgICBpZiAoa2V5LmVxdWFscyhrZXlwcmVmU3RhcnRBdWRpb0Jp
dHJhdGVUeXBlKSkgewotICAgICAgc2V0QXVkaW9CaXRyYXRlRW5hYmxlKHNoYXJlZFByZWZlcmVu
Y2VzKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlU3VtbWFyeShTaGFyZWRQ
cmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtleSkgewotICAgIFByZWZlcmVu
Y2UgdXBkYXRlZFByZWYgPSBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleSk7Ci0g
ICAgLy8gU2V0IHN1bW1hcnkgdG8gYmUgdGhlIHVzZXItZGVzY3JpcHRpb24gZm9yIHRoZSBzZWxl
Y3RlZCB2YWx1ZQotICAgIHVwZGF0ZWRQcmVmLnNldFN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMu
Z2V0U3RyaW5nKGtleSwgIiIpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVTdW1tYXJ5
Qml0cmF0ZShTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtleSkg
ewotICAgIFByZWZlcmVuY2UgdXBkYXRlZFByZWYgPSBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVm
ZXJlbmNlKGtleSk7Ci0gICAgdXBkYXRlZFByZWYuc2V0U3VtbWFyeShzaGFyZWRQcmVmZXJlbmNl
cy5nZXRTdHJpbmcoa2V5LCAiIikgKyAiIGticHMiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1
cGRhdGVTdW1tYXJ5QihTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5n
IGtleSkgewotICAgIFByZWZlcmVuY2UgdXBkYXRlZFByZWYgPSBzZXR0aW5nc0ZyYWdtZW50LmZp
bmRQcmVmZXJlbmNlKGtleSk7Ci0gICAgdXBkYXRlZFByZWYuc2V0U3VtbWFyeShzaGFyZWRQcmVm
ZXJlbmNlcy5nZXRCb29sZWFuKGtleSwgdHJ1ZSkKLSAgICAgICAgICAgID8gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfdmFsdWVfZW5hYmxlZCkKLSAgICAgICAgICAgIDogZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfdmFsdWVfZGlzYWJsZWQpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVT
dW1tYXJ5TGlzdChTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtl
eSkgewotICAgIExpc3RQcmVmZXJlbmNlIHVwZGF0ZWRQcmVmID0gKExpc3RQcmVmZXJlbmNlKSBz
ZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleSk7Ci0gICAgdXBkYXRlZFByZWYuc2V0
U3VtbWFyeSh1cGRhdGVkUHJlZi5nZXRFbnRyeSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBz
ZXRWaWRlb0JpdHJhdGVFbmFibGUoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMp
IHsKLSAgICBQcmVmZXJlbmNlIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUgPQotICAgICAgICBzZXR0
aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleXByZWZNYXhWaWRlb0JpdHJhdGVWYWx1ZSk7
Ci0gICAgU3RyaW5nIGJpdHJhdGVUeXBlRGVmYXVsdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X21heHZpZGVvYml0cmF0ZV9kZWZhdWx0KTsKLSAgICBTdHJpbmcgYml0cmF0ZVR5cGUgPQotICAg
ICAgICBzaGFyZWRQcmVmZXJlbmNlcy5nZXRTdHJpbmcoa2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5
cGUsIGJpdHJhdGVUeXBlRGVmYXVsdCk7Ci0gICAgaWYgKGJpdHJhdGVUeXBlLmVxdWFscyhiaXRy
YXRlVHlwZURlZmF1bHQpKSB7Ci0gICAgICBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlLnNldEVuYWJs
ZWQoZmFsc2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlLnNl
dEVuYWJsZWQodHJ1ZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEF1ZGlvQml0
cmF0ZUVuYWJsZShTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcykgewotICAgIFBy
ZWZlcmVuY2UgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZSA9Ci0gICAgICAgIHNldHRpbmdzRnJhZ21l
bnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVmFsdWUpOwotICAgIFN0
cmluZyBiaXRyYXRlVHlwZURlZmF1bHQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1
ZGlvYml0cmF0ZV9kZWZhdWx0KTsKLSAgICBTdHJpbmcgYml0cmF0ZVR5cGUgPQotICAgICAgICBz
aGFyZWRQcmVmZXJlbmNlcy5nZXRTdHJpbmcoa2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlwZSwg
Yml0cmF0ZVR5cGVEZWZhdWx0KTsKLSAgICBpZiAoYml0cmF0ZVR5cGUuZXF1YWxzKGJpdHJhdGVU
eXBlRGVmYXVsdCkpIHsKLSAgICAgIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5hYmxlZChm
YWxzZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5h
YmxlZCh0cnVlKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9TZXR0aW5nc0ZyYWdtZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL1NldHRpbmdzRnJhZ21lbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1NldHRpbmdzRnJhZ21lbnQuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJU
QyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5k
cm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VGcmFnbWVudDsKLQotLyoqCi0gKiBTZXR0aW5ncyBm
cmFnbWVudCBmb3IgQXBwUlRDLgotICovCi1wdWJsaWMgY2xhc3MgU2V0dGluZ3NGcmFnbWVudCBl
eHRlbmRzIFByZWZlcmVuY2VGcmFnbWVudCB7Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBv
bkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgc3VwZXIub25DcmVhdGUo
c2F2ZWRJbnN0YW5jZVN0YXRlKTsKLSAgICAvLyBMb2FkIHRoZSBwcmVmZXJlbmNlcyBmcm9tIGFu
IFhNTCByZXNvdXJjZQotICAgIGFkZFByZWZlcmVuY2VzRnJvbVJlc291cmNlKFIueG1sLnByZWZl
cmVuY2VzKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1RDUENo
YW5uZWxDbGllbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvVENQQ2hhbm5lbENsaWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENsaWVudC5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMzU0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3Qu
YXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IG9yZy53ZWJydGMu
VGhyZWFkVXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGph
dmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWlt
cG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwot
aW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tldDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1p
bXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwotCi0vKioKLSAqIFJlcGxhY2VtZW50IGZvciBXZWJT
b2NrZXRDaGFubmVsQ2xpZW50IGZvciBkaXJlY3QgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byBJ
UCBhZGRyZXNzZXMuIEhhbmRsZXMKLSAqIHRoZSBzaWduYWxpbmcgYmV0d2VlbiB0aGUgdHdvIGNs
aWVudHMgdXNpbmcgYSBUQ1AgY29ubmVjdGlvbi4KLSAqCi0gKiA8cD5BbGwgcHVibGljIG1ldGhv
ZHMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGEgbG9vcGVyIGV4ZWN1dG9yIHRocmVhZAotICogcGFz
c2VkIGluIGEgY29uc3RydWN0b3IsIG90aGVyd2lzZSBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24u
Ci0gKiBBbGwgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIG9uIHRoZSBzYW1lIHRocmVhZC4KLSAqLwot
cHVibGljIGNsYXNzIFRDUENoYW5uZWxDbGllbnQgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIlRDUENoYW5uZWxDbGllbnQiOwotCi0gIHByaXZhdGUgZmluYWwgRXhlY3V0
b3JTZXJ2aWNlIGV4ZWN1dG9yOwotICBwcml2YXRlIGZpbmFsIFRocmVhZFV0aWxzLlRocmVhZENo
ZWNrZXIgZXhlY3V0b3JUaHJlYWRDaGVjazsKLSAgcHJpdmF0ZSBmaW5hbCBUQ1BDaGFubmVsRXZl
bnRzIGV2ZW50TGlzdGVuZXI7Ci0gIHByaXZhdGUgVENQU29ja2V0IHNvY2tldDsKLQotICAvKioK
LSAgICogQ2FsbGJhY2sgaW50ZXJmYWNlIGZvciBtZXNzYWdlcyBkZWxpdmVyZWQgb24gVENQIENv
bm5lY3Rpb24uIEFsbCBjYWxsYmFja3MgYXJlIGludm9rZWQgZnJvbSB0aGUKLSAgICogbG9vcGVy
IGV4ZWN1dG9yIHRocmVhZC4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgVENQQ2hhbm5lbEV2
ZW50cyB7Ci0gICAgdm9pZCBvblRDUENvbm5lY3RlZChib29sZWFuIHNlcnZlcik7Ci0gICAgdm9p
ZCBvblRDUE1lc3NhZ2UoU3RyaW5nIG1lc3NhZ2UpOwotICAgIHZvaWQgb25UQ1BFcnJvcihTdHJp
bmcgZGVzY3JpcHRpb24pOwotICAgIHZvaWQgb25UQ1BDbG9zZSgpOwotICB9Ci0KLSAgLyoqCi0g
ICAqIEluaXRpYWxpemVzIHRoZSBUQ1BDaGFubmVsQ2xpZW50LiBJZiBJUCBpcyBhIGxvY2FsIElQ
IGFkZHJlc3MsIHN0YXJ0cyBhIGxpc3RlbmluZyBzZXJ2ZXIgb24KLSAgICogdGhhdCBJUC4gSWYg
bm90LCBpbnN0ZWFkIGNvbm5lY3RzIHRvIHRoZSBJUC4KLSAgICoKLSAgICogQHBhcmFtIGV2ZW50
TGlzdGVuZXIgTGlzdGVuZXIgdGhhdCB3aWxsIHJlY2VpdmUgZXZlbnRzIGZyb20gdGhlIGNsaWVu
dC4KLSAgICogQHBhcmFtIGlwIElQIGFkZHJlc3MgdG8gbGlzdGVuIG9uIG9yIGNvbm5lY3QgdG8u
Ci0gICAqIEBwYXJhbSBwb3J0IFBvcnQgdG8gbGlzdGVuIG9uIG9yIGNvbm5lY3QgdG8uCi0gICAq
LwotICBwdWJsaWMgVENQQ2hhbm5lbENsaWVudCgKLSAgICAgIEV4ZWN1dG9yU2VydmljZSBleGVj
dXRvciwgVENQQ2hhbm5lbEV2ZW50cyBldmVudExpc3RlbmVyLCBTdHJpbmcgaXAsIGludCBwb3J0
KSB7Ci0gICAgdGhpcy5leGVjdXRvciA9IGV4ZWN1dG9yOwotICAgIGV4ZWN1dG9yVGhyZWFkQ2hl
Y2sgPSBuZXcgVGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlcigpOwotICAgIGV4ZWN1dG9yVGhyZWFk
Q2hlY2suZGV0YWNoVGhyZWFkKCk7Ci0gICAgdGhpcy5ldmVudExpc3RlbmVyID0gZXZlbnRMaXN0
ZW5lcjsKLQotICAgIEluZXRBZGRyZXNzIGFkZHJlc3M7Ci0gICAgdHJ5IHsKLSAgICAgIGFkZHJl
c3MgPSBJbmV0QWRkcmVzcy5nZXRCeU5hbWUoaXApOwotICAgIH0gY2F0Y2ggKFVua25vd25Ib3N0
RXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJJbnZhbGlkIElQIGFkZHJlc3MuIik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGFkZHJlc3MuaXNBbnlMb2NhbEFkZHJl
c3MoKSkgewotICAgICAgc29ja2V0ID0gbmV3IFRDUFNvY2tldFNlcnZlcihhZGRyZXNzLCBwb3J0
KTsKLSAgICB9IGVsc2UgewotICAgICAgc29ja2V0ID0gbmV3IFRDUFNvY2tldENsaWVudChhZGRy
ZXNzLCBwb3J0KTsKLSAgICB9Ci0KLSAgICBzb2NrZXQuc3RhcnQoKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBEaXNjb25uZWN0cyB0aGUgY2xpZW50IGlmIG5vdCBhbHJlYWR5IGRpc2Nvbm5lY3RlZC4g
VGhpcyB3aWxsIGZpcmUgdGhlIG9uVENQQ2xvc2UgZXZlbnQuCi0gICAqLwotICBwdWJsaWMgdm9p
ZCBkaXNjb25uZWN0KCkgewotICAgIGV4ZWN1dG9yVGhyZWFkQ2hlY2suY2hlY2tJc09uVmFsaWRU
aHJlYWQoKTsKLQotICAgIHNvY2tldC5kaXNjb25uZWN0KCk7Ci0gIH0KLQotICAvKioKLSAgICog
U2VuZHMgYSBtZXNzYWdlIG9uIHRoZSBzb2NrZXQuCi0gICAqCi0gICAqIEBwYXJhbSBtZXNzYWdl
IE1lc3NhZ2UgdG8gYmUgc2VudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHNlbmQoU3RyaW5nIG1l
c3NhZ2UpIHsKLSAgICBleGVjdXRvclRocmVhZENoZWNrLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7
Ci0KLSAgICBzb2NrZXQuc2VuZChtZXNzYWdlKTsKLSAgfQotCi0gIC8qKgotICAgKiBIZWxwZXIg
bWV0aG9kIGZvciBmaXJpbmcgb25UQ1BFcnJvciBldmVudHMuIENhbGxzIG9uVENQRXJyb3Igb24g
dGhlIGV4ZWN1dG9yIHRocmVhZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcihm
aW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAgIExvZy5lKFRBRywgIlRDUCBFcnJvcjogIiArIG1l
c3NhZ2UpOwotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGV2ZW50TGlzdGVuZXIu
b25UQ1BFcnJvcihtZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAg
KiBCYXNlIGNsYXNzIGZvciBzZXJ2ZXIgYW5kIGNsaWVudCBzb2NrZXRzLiBDb250YWlucyBhIGxp
c3RlbmluZyB0aHJlYWQgdGhhdCB3aWxsIGNhbGwKLSAgICogZXZlbnRMaXN0ZW5lci5vblRDUE1l
c3NhZ2Ugb24gbmV3IG1lc3NhZ2VzLgotICAgKi8KLSAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBU
Q1BTb2NrZXQgZXh0ZW5kcyBUaHJlYWQgewotICAgIC8vIExvY2sgZm9yIGVkaXRpbmcgb3V0IGFu
ZCByYXdTb2NrZXQKLSAgICBwcm90ZWN0ZWQgZmluYWwgT2JqZWN0IHJhd1NvY2tldExvY2s7Ci0g
ICAgcHJpdmF0ZSBQcmludFdyaXRlciBvdXQ7Ci0gICAgcHJpdmF0ZSBTb2NrZXQgcmF3U29ja2V0
OwotCi0gICAgLyoqCi0gICAgICogQ29ubmVjdCB0byB0aGUgcGVlciwgcG90ZW50aWFsbHkgYSBz
bG93IG9wZXJhdGlvbi4KLSAgICAgKgotICAgICAqIEByZXR1cm4gU29ja2V0IGNvbm5lY3Rpb24s
IG51bGwgaWYgY29ubmVjdGlvbiBmYWlsZWQuCi0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0
IFNvY2tldCBjb25uZWN0KCk7Ci0gICAgLyoqIFJldHVybnMgdHJ1ZSBpZiBzb2NrZXRzIGlzIGEg
c2VydmVyIHJhd1NvY2tldC4gKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1NlcnZl
cigpOwotCi0gICAgVENQU29ja2V0KCkgewotICAgICAgcmF3U29ja2V0TG9jayA9IG5ldyBPYmpl
Y3QoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUaGUgbGlzdGVuaW5nIHRocmVhZC4KLSAg
ICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBMb2cu
ZChUQUcsICJMaXN0ZW5pbmcgdGhyZWFkIHN0YXJ0ZWQuLi4iKTsKLQotICAgICAgLy8gUmVjZWl2
ZSBjb25uZWN0aW9uIHRvIHRlbXBvcmFyeSB2YXJpYWJsZSBmaXJzdCwgc28gd2UgZG9uJ3QgYmxv
Y2suCi0gICAgICBTb2NrZXQgdGVtcFNvY2tldCA9IGNvbm5lY3QoKTsKLSAgICAgIEJ1ZmZlcmVk
UmVhZGVyIGluOwotCi0gICAgICBMb2cuZChUQUcsICJUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2hl
ZC4iKTsKLQotICAgICAgc3luY2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgIGlm
IChyYXdTb2NrZXQgIT0gbnVsbCkgewotICAgICAgICAgIExvZy5lKFRBRywgIlNvY2tldCBhbHJl
YWR5IGV4aXN0ZWQgYW5kIHdpbGwgYmUgcmVwbGFjZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAg
ICByYXdTb2NrZXQgPSB0ZW1wU29ja2V0OwotCi0gICAgICAgIC8vIENvbm5lY3RpbmcgZmFpbGVk
LCBlcnJvciBoYXMgYWxyZWFkeSBiZWVuIHJlcG9ydGVkLCBqdXN0IGV4aXQuCi0gICAgICAgIGlm
IChyYXdTb2NrZXQgPT0gbnVsbCkgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0g
ICAgICAgIHRyeSB7Ci0gICAgICAgICAgb3V0ID0gbmV3IFByaW50V3JpdGVyKHJhd1NvY2tldC5n
ZXRPdXRwdXRTdHJlYW0oKSwgdHJ1ZSk7Ci0gICAgICAgICAgaW4gPSBuZXcgQnVmZmVyZWRSZWFk
ZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHJhd1NvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0g
ICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigi
RmFpbGVkIHRvIG9wZW4gSU8gb24gcmF3U29ja2V0OiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBMb2cudihUQUcsICJF
eGVjdXRlIG9uVENQQ29ubmVjdGVkIik7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5u
YWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgICBMb2cudihUQUcsICJSdW4gb25UQ1BDb25uZWN0ZWQiKTsKLSAgICAgICAgICBl
dmVudExpc3RlbmVyLm9uVENQQ29ubmVjdGVkKGlzU2VydmVyKCkpOwotICAgICAgICB9Ci0gICAg
ICB9KTsKLQotICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgZmluYWwgU3RyaW5nIG1lc3Nh
Z2U7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgbWVzc2FnZSA9IGluLnJlYWRMaW5lKCk7Ci0g
ICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBzeW5jaHJvbml6ZWQg
KHJhd1NvY2tldExvY2spIHsKLSAgICAgICAgICAgIC8vIElmIHNvY2tldCB3YXMgY2xvc2VkLCB0
aGlzIGlzIGV4cGVjdGVkLgotICAgICAgICAgICAgaWYgKHJhd1NvY2tldCA9PSBudWxsKSB7Ci0g
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAg
ICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gcmVhZCBmcm9tIHJhd1NvY2tldDogIiArIGUuZ2V0
TWVzc2FnZSgpKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5v
IGRhdGEgcmVjZWl2ZWQsIHJhd1NvY2tldCBwcm9iYWJseSBjbG9zZWQuCi0gICAgICAgIGlmICht
ZXNzYWdlID09IG51bGwpIHsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAg
IGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQot
ICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIExvZy52KFRBRywgIlJl
Y2VpdmU6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICAgIGV2ZW50TGlzdGVuZXIub25UQ1BNZXNz
YWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0KLSAgICAg
IExvZy5kKFRBRywgIlJlY2VpdmluZyB0aHJlYWQgZXhpdGluZy4uLiIpOwotCi0gICAgICAvLyBD
bG9zZSB0aGUgcmF3U29ja2V0IGlmIGl0IGlzIHN0aWxsIG9wZW4uCi0gICAgICBkaXNjb25uZWN0
KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ2xvc2VzIHRoZSByYXdTb2NrZXQgaWYgaXQg
aXMgc3RpbGwgb3Blbi4gQWxzbyBmaXJlcyB0aGUgb25UQ1BDbG9zZSBldmVudC4KLSAgICAgKi8K
LSAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgc3lu
Y2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgICAgaWYgKHJhd1NvY2tldCAhPSBu
dWxsKSB7Ci0gICAgICAgICAgICByYXdTb2NrZXQuY2xvc2UoKTsKLSAgICAgICAgICAgIHJhd1Nv
Y2tldCA9IG51bGw7Ci0gICAgICAgICAgICBvdXQgPSBudWxsOwotCi0gICAgICAgICAgICBleGVj
dXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICAgICAgQE92ZXJyaWRlCi0g
ICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgICAgICBldmVudExp
c3RlbmVyLm9uVENQQ2xvc2UoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gY2xvc2UgcmF3U29ja2V0OiAiICsgZS5nZXRN
ZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8qKgotICAgICAqIFNlbmRzIGEgbWVz
c2FnZSBvbiB0aGUgc29ja2V0LiBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gdGhlIGV4ZWN1dG9y
IHRocmVhZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBzZW5kKFN0cmluZyBtZXNzYWdlKSB7
Ci0gICAgICBMb2cudihUQUcsICJTZW5kOiAiICsgbWVzc2FnZSk7Ci0KLSAgICAgIHN5bmNocm9u
aXplZCAocmF3U29ja2V0TG9jaykgewotICAgICAgICBpZiAob3V0ID09IG51bGwpIHsKLSAgICAg
ICAgICByZXBvcnRFcnJvcigiU2VuZGluZyBkYXRhIG9uIGNsb3NlZCBzb2NrZXQuIik7Ci0gICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgb3V0LndyaXRlKG1lc3NhZ2UgKyAi
XG4iKTsKLSAgICAgICAgb3V0LmZsdXNoKCk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBjbGFzcyBUQ1BTb2NrZXRTZXJ2ZXIgZXh0ZW5kcyBUQ1BTb2NrZXQgewotICAgIC8vIFNl
cnZlciBzb2NrZXQgaXMgYWxzbyBndWFyZGVkIGJ5IHJhd1NvY2tldExvY2suCi0gICAgcHJpdmF0
ZSBTZXJ2ZXJTb2NrZXQgc2VydmVyU29ja2V0OwotCi0gICAgZmluYWwgcHJpdmF0ZSBJbmV0QWRk
cmVzcyBhZGRyZXNzOwotICAgIGZpbmFsIHByaXZhdGUgaW50IHBvcnQ7Ci0KLSAgICBwdWJsaWMg
VENQU29ja2V0U2VydmVyKEluZXRBZGRyZXNzIGFkZHJlc3MsIGludCBwb3J0KSB7Ci0gICAgICB0
aGlzLmFkZHJlc3MgPSBhZGRyZXNzOwotICAgICAgdGhpcy5wb3J0ID0gcG9ydDsKLSAgICB9Ci0K
LSAgICAvKiogT3BlbnMgYSBsaXN0ZW5pbmcgc29ja2V0IGFuZCB3YWl0cyBmb3IgYSBjb25uZWN0
aW9uLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTb2NrZXQgY29ubmVjdCgpIHsKLSAg
ICAgIExvZy5kKFRBRywgIkxpc3RlbmluZyBvbiBbIiArIGFkZHJlc3MuZ2V0SG9zdEFkZHJlc3Mo
KSArICJdOiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHBvcnQpKTsKLQotICAgICAgZmluYWwgU2VydmVy
U29ja2V0IHRlbXBTb2NrZXQ7Ci0gICAgICB0cnkgewotICAgICAgICB0ZW1wU29ja2V0ID0gbmV3
IFNlcnZlclNvY2tldChwb3J0LCAwLCBhZGRyZXNzKTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0
aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgc2VydmVyIHNv
Y2tldDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9
Ci0KLSAgICAgIHN5bmNocm9uaXplZCAocmF3U29ja2V0TG9jaykgewotICAgICAgICBpZiAoc2Vy
dmVyU29ja2V0ICE9IG51bGwpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJTZXJ2ZXIgcmF3U29j
a2V0IHdhcyBhbHJlYWR5IGxpc3RlbmluZyBhbmQgbmV3IHdpbGwgYmUgb3BlbmVkLiIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgc2VydmVyU29ja2V0ID0gdGVtcFNvY2tldDsKLSAgICAgIH0KLQot
ICAgICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIHRlbXBTb2NrZXQuYWNjZXB0KCk7Ci0gICAgICB9
IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8g
cmVjZWl2ZSBjb25uZWN0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4g
bnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiogQ2xvc2VzIHRoZSBsaXN0ZW5pbmcgc29j
a2V0IGFuZCBjYWxscyBzdXBlci4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBk
aXNjb25uZWN0KCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgc3luY2hyb25pemVkIChyYXdTb2Nr
ZXRMb2NrKSB7Ci0gICAgICAgICAgaWYgKHNlcnZlclNvY2tldCAhPSBudWxsKSB7Ci0gICAgICAg
ICAgICBzZXJ2ZXJTb2NrZXQuY2xvc2UoKTsKLSAgICAgICAgICAgIHNlcnZlclNvY2tldCA9IG51
bGw7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBl
KSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gY2xvc2Ugc2VydmVyIHNvY2tldDog
IiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLQotICAgICAgc3VwZXIuZGlzY29ubmVjdCgp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU2VydmVyKCkg
ewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBUQ1BT
b2NrZXRDbGllbnQgZXh0ZW5kcyBUQ1BTb2NrZXQgewotICAgIGZpbmFsIHByaXZhdGUgSW5ldEFk
ZHJlc3MgYWRkcmVzczsKLSAgICBmaW5hbCBwcml2YXRlIGludCBwb3J0OwotCi0gICAgcHVibGlj
IFRDUFNvY2tldENsaWVudChJbmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydCkgewotICAgICAg
dGhpcy5hZGRyZXNzID0gYWRkcmVzczsKLSAgICAgIHRoaXMucG9ydCA9IHBvcnQ7Ci0gICAgfQot
Ci0gICAgLyoqIENvbm5lY3RzIHRvIHRoZSBwZWVyLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyBTb2NrZXQgY29ubmVjdCgpIHsKLSAgICAgIExvZy5kKFRBRywgIkNvbm5lY3RpbmcgdG8g
WyIgKyBhZGRyZXNzLmdldEhvc3RBZGRyZXNzKCkgKyAiXToiICsgSW50ZWdlci50b1N0cmluZyhw
b3J0KSk7Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiBuZXcgU29ja2V0KGFkZHJlc3Ms
IHBvcnQpOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRF
cnJvcigiRmFpbGVkIHRvIGNvbm5lY3Q6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgfQotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBi
b29sZWFuIGlzU2VydmVyKCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1VuaGFuZGxlZEV4Y2VwdGlvbkhhbmRs
ZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVW5oYW5k
bGVkRXhjZXB0aW9uSGFuZGxlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxlci5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsODQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRD
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
YXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBh
bmRyb2lkLmFwcC5BbGVydERpYWxvZzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50
ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5
cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuU2Nyb2xsVmlldzsKLWltcG9ydCBhbmRy
b2lkLndpZGdldC5UZXh0VmlldzsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBv
cnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLS8qKgotICogU2luZ2xldG9uIGhlbHBlcjogaW5z
dGFsbCBhIGRlZmF1bHQgdW5oYW5kbGVkIGV4Y2VwdGlvbiBoYW5kbGVyIHdoaWNoIHNob3dzCi0g
KiBhbiBpbmZvcm1hdGl2ZSBkaWFsb2cgYW5kIGtpbGxzIHRoZSBhcHAuICBVc2VmdWwgZm9yIGFw
cHMgd2hvc2UKLSAqIGVycm9yLWhhbmRsaW5nIGNvbnNpc3RzIG9mIHRocm93aW5nIFJ1bnRpbWVF
eGNlcHRpb25zLgotICogTk9URTogYWxtb3N0IGFsd2F5cyBtb3JlIHVzZWZ1bCB0bwotICogVGhy
ZWFkLnNldERlZmF1bHRVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoKSByYXRoZXIgdGhhbgotICog
VGhyZWFkLnNldFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcigpLCB0byBhcHBseSB0byBiYWNrZ3Jv
dW5kIHRocmVhZHMgYXMgd2VsbC4KLSAqLwotcHVibGljIGNsYXNzIFVuaGFuZGxlZEV4Y2VwdGlv
bkhhbmRsZXIgaW1wbGVtZW50cyBUaHJlYWQuVW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyIHsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBcHBSVENNb2JpbGVBY3Rpdml0eSI7
Ci0gIHByaXZhdGUgZmluYWwgQWN0aXZpdHkgYWN0aXZpdHk7Ci0KLSAgcHVibGljIFVuaGFuZGxl
ZEV4Y2VwdGlvbkhhbmRsZXIoZmluYWwgQWN0aXZpdHkgYWN0aXZpdHkpIHsKLSAgICB0aGlzLmFj
dGl2aXR5ID0gYWN0aXZpdHk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB1bmNhdWdodEV4Y2VwdGlv
bihUaHJlYWQgdW51c2VkVGhyZWFkLCBmaW5hbCBUaHJvd2FibGUgZSkgewotICAgIGFjdGl2aXR5
LnJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIFN0cmluZyB0aXRsZSA9ICJGYXRhbCBlcnJvcjog
IiArIGdldFRvcExldmVsQ2F1c2VNZXNzYWdlKGUpOwotICAgICAgICBTdHJpbmcgbXNnID0gZ2V0
UmVjdXJzaXZlU3RhY2tUcmFjZShlKTsKLSAgICAgICAgVGV4dFZpZXcgZXJyb3JWaWV3ID0gbmV3
IFRleHRWaWV3KGFjdGl2aXR5KTsKLSAgICAgICAgZXJyb3JWaWV3LnNldFRleHQobXNnKTsKLSAg
ICAgICAgZXJyb3JWaWV3LnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1NQLCA4
KTsKLSAgICAgICAgU2Nyb2xsVmlldyBzY3JvbGxpbmdDb250YWluZXIgPSBuZXcgU2Nyb2xsVmll
dyhhY3Rpdml0eSk7Ci0gICAgICAgIHNjcm9sbGluZ0NvbnRhaW5lci5hZGRWaWV3KGVycm9yVmll
dyk7Ci0gICAgICAgIExvZy5lKFRBRywgdGl0bGUgKyAiXG5cbiIgKyBtc2cpOwotICAgICAgICBE
aWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyIGxpc3RlbmVyID0gbmV3IERpYWxvZ0ludGVy
ZmFjZS5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAg
cHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsK
LSAgICAgICAgICAgIGRpYWxvZy5kaXNtaXNzKCk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgx
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH07Ci0gICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIg
YnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKGFjdGl2aXR5KTsKLSAgICAgICAgYnVp
bGRlci5zZXRUaXRsZSh0aXRsZSkKLSAgICAgICAgICAgIC5zZXRWaWV3KHNjcm9sbGluZ0NvbnRh
aW5lcikKLSAgICAgICAgICAgIC5zZXRQb3NpdGl2ZUJ1dHRvbigiRXhpdCIsIGxpc3RlbmVyKQot
ICAgICAgICAgICAgLnNob3coKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIFJldHVy
bnMgdGhlIE1lc3NhZ2UgYXR0YWNoZWQgdG8gdGhlIG9yaWdpbmFsIENhdXNlIG9mIHx0fC4KLSAg
cHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFRvcExldmVsQ2F1c2VNZXNzYWdlKFRocm93YWJsZSB0
KSB7Ci0gICAgVGhyb3dhYmxlIHRvcExldmVsQ2F1c2UgPSB0OwotICAgIHdoaWxlICh0b3BMZXZl
bENhdXNlLmdldENhdXNlKCkgIT0gbnVsbCkgewotICAgICAgdG9wTGV2ZWxDYXVzZSA9IHRvcExl
dmVsQ2F1c2UuZ2V0Q2F1c2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvcExldmVsQ2F1c2UuZ2V0
TWVzc2FnZSgpOwotICB9Ci0KLSAgLy8gUmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIFN0cmluZyBv
ZiB0aGUgc3RhY2t0cmFjZSBpbiB8dHwsIHJlY3Vyc2l2ZWx5Ci0gIC8vIHRocm91Z2ggYWxsIENh
dXNlcyB0aGF0IGxlZCB0byB8dHwuCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRSZWN1cnNp
dmVTdGFja1RyYWNlKFRocm93YWJsZSB0KSB7Ci0gICAgU3RyaW5nV3JpdGVyIHdyaXRlciA9IG5l
dyBTdHJpbmdXcml0ZXIoKTsKLSAgICB0LnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIo
d3JpdGVyKSk7Ci0gICAgcmV0dXJuIHdyaXRlci50b1N0cmluZygpOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRDaGFubmVs
Q2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTYg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7
Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0aW9u
OwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb24u
QXN5bmNIdHRwRXZlbnRzOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFu
ZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBkZS50YXZlbmRvLmF1dG9iYWhuLldlYlNvY2tldC5X
ZWJTb2NrZXRDb25uZWN0aW9uT2JzZXJ2ZXI7Ci1pbXBvcnQgZGUudGF2ZW5kby5hdXRvYmFobi5X
ZWJTb2NrZXRDb25uZWN0aW9uOwotaW1wb3J0IGRlLnRhdmVuZG8uYXV0b2JhaG4uV2ViU29ja2V0
RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcu
anNvbi5KU09OT2JqZWN0OwotCi1pbXBvcnQgamF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0
LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLQotLyoq
Ci0gKiBXZWJTb2NrZXQgY2xpZW50IGltcGxlbWVudGF0aW9uLgotICoKLSAqIDxwPkFsbCBwdWJs
aWMgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGVkIGZyb20gYSBsb29wZXIgZXhlY3V0b3IgdGhyZWFk
Ci0gKiBwYXNzZWQgaW4gYSBjb25zdHJ1Y3Rvciwgb3RoZXJ3aXNlIGV4Y2VwdGlvbiB3aWxsIGJl
IHRocm93bi4KLSAqIEFsbCBldmVudHMgYXJlIGRpc3BhdGNoZWQgb24gdGhlIHNhbWUgdGhyZWFk
LgotICovCi0KLXB1YmxpYyBjbGFzcyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50IHsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXU0NoYW5uZWxSVENDbGllbnQiOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0xPU0VfVElNRU9VVCA9IDEwMDA7Ci0gIHByaXZhdGUgZmlu
YWwgV2ViU29ja2V0Q2hhbm5lbEV2ZW50cyBldmVudHM7Ci0gIHByaXZhdGUgZmluYWwgSGFuZGxl
ciBoYW5kbGVyOwotICBwcml2YXRlIFdlYlNvY2tldENvbm5lY3Rpb24gd3M7Ci0gIHByaXZhdGUg
V2ViU29ja2V0T2JzZXJ2ZXIgd3NPYnNlcnZlcjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NTZXJ2ZXJV
cmw7Ci0gIHByaXZhdGUgU3RyaW5nIHBvc3RTZXJ2ZXJVcmw7Ci0gIHByaXZhdGUgU3RyaW5nIHJv
b21JRDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xpZW50SUQ7Ci0gIHByaXZhdGUgV2ViU29ja2V0Q29u
bmVjdGlvblN0YXRlIHN0YXRlOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBjbG9zZUV2ZW50TG9j
ayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBib29sZWFuIGNsb3NlRXZlbnQ7Ci0gIC8vIFdl
YlNvY2tldCBzZW5kIHF1ZXVlLiBNZXNzYWdlcyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlIHdoZW4g
V2ViU29ja2V0Ci0gIC8vIGNsaWVudCBpcyBub3QgcmVnaXN0ZXJlZCBhbmQgYXJlIGNvbnN1bWVk
IGluIHJlZ2lzdGVyKCkgY2FsbC4KLSAgcHJpdmF0ZSBmaW5hbCBMaW5rZWRMaXN0PFN0cmluZz4g
d3NTZW5kUXVldWU7Ci0KLSAgLyoqCi0gICAqIFBvc3NpYmxlIFdlYlNvY2tldCBjb25uZWN0aW9u
IHN0YXRlcy4KLSAgICovCi0gIHB1YmxpYyBlbnVtIFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZSB7
IE5FVywgQ09OTkVDVEVELCBSRUdJU1RFUkVELCBDTE9TRUQsIEVSUk9SIH0KLQotICAvKioKLSAg
ICogQ2FsbGJhY2sgaW50ZXJmYWNlIGZvciBtZXNzYWdlcyBkZWxpdmVyZWQgb24gV2ViU29ja2V0
LgotICAgKiBBbGwgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIGZyb20gYSBsb29wZXIgZXhlY3V0b3Ig
dGhyZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBXZWJTb2NrZXRDaGFubmVsRXZlbnRz
IHsKLSAgICB2b2lkIG9uV2ViU29ja2V0TWVzc2FnZShmaW5hbCBTdHJpbmcgbWVzc2FnZSk7Ci0g
ICAgdm9pZCBvbldlYlNvY2tldENsb3NlKCk7Ci0gICAgdm9pZCBvbldlYlNvY2tldEVycm9yKGZp
bmFsIFN0cmluZyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgV2ViU29ja2V0Q2hhbm5l
bENsaWVudChIYW5kbGVyIGhhbmRsZXIsIFdlYlNvY2tldENoYW5uZWxFdmVudHMgZXZlbnRzKSB7
Ci0gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcjsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsK
LSAgICByb29tSUQgPSBudWxsOwotICAgIGNsaWVudElEID0gbnVsbDsKLSAgICB3c1NlbmRRdWV1
ZSA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4oKTsKLSAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5l
Y3Rpb25TdGF0ZS5ORVc7Ci0gIH0KLQotICBwdWJsaWMgV2ViU29ja2V0Q29ubmVjdGlvblN0YXRl
IGdldFN0YXRlKCkgewotICAgIHJldHVybiBzdGF0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNv
bm5lY3QoZmluYWwgU3RyaW5nIHdzVXJsLCBmaW5hbCBTdHJpbmcgcG9zdFVybCkgewotICAgIGNo
ZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7Ci0gICAgaWYgKHN0YXRlICE9IFdlYlNvY2tldENv
bm5lY3Rpb25TdGF0ZS5ORVcpIHsKLSAgICAgIExvZy5lKFRBRywgIldlYlNvY2tldCBpcyBhbHJl
YWR5IGNvbm5lY3RlZC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgd3NTZXJ2ZXJVcmwg
PSB3c1VybDsKLSAgICBwb3N0U2VydmVyVXJsID0gcG9zdFVybDsKLSAgICBjbG9zZUV2ZW50ID0g
ZmFsc2U7Ci0KLSAgICBMb2cuZChUQUcsICJDb25uZWN0aW5nIFdlYlNvY2tldCB0bzogIiArIHdz
VXJsICsgIi4gUG9zdCBVUkw6ICIgKyBwb3N0VXJsKTsKLSAgICB3cyA9IG5ldyBXZWJTb2NrZXRD
b25uZWN0aW9uKCk7Ci0gICAgd3NPYnNlcnZlciA9IG5ldyBXZWJTb2NrZXRPYnNlcnZlcigpOwot
ICAgIHRyeSB7Ci0gICAgICB3cy5jb25uZWN0KG5ldyBVUkkod3NTZXJ2ZXJVcmwpLCB3c09ic2Vy
dmVyKTsKLSAgICB9IGNhdGNoIChVUklTeW50YXhFeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0
RXJyb3IoIlVSSSBlcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9IGNhdGNoIChXZWJT
b2NrZXRFeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIldlYlNvY2tldCBjb25uZWN0
aW9uIGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHJlZ2lzdGVyKGZpbmFsIFN0cmluZyByb29tSUQsIGZpbmFsIFN0cmluZyBjbGllbnRJRCkg
ewotICAgIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7Ci0gICAgdGhpcy5yb29tSUQgPSBy
b29tSUQ7Ci0gICAgdGhpcy5jbGllbnRJRCA9IGNsaWVudElEOwotICAgIGlmIChzdGF0ZSAhPSBX
ZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICBMb2cudyhUQUcsICJX
ZWJTb2NrZXQgcmVnaXN0ZXIoKSBpbiBzdGF0ZSAiICsgc3RhdGUpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBMb2cuZChUQUcsICJSZWdpc3RlcmluZyBXZWJTb2NrZXQgZm9yIHJvb20gIiAr
IHJvb21JRCArICIuIENsaWVudElEOiAiICsgY2xpZW50SUQpOwotICAgIEpTT05PYmplY3QganNv
biA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAgdHJ5IHsKLSAgICAgIGpzb24ucHV0KCJjbWQiLCAi
cmVnaXN0ZXIiKTsKLSAgICAgIGpzb24ucHV0KCJyb29taWQiLCByb29tSUQpOwotICAgICAganNv
bi5wdXQoImNsaWVudGlkIiwgY2xpZW50SUQpOwotICAgICAgTG9nLmQoVEFHLCAiQy0+V1NTOiAi
ICsganNvbi50b1N0cmluZygpKTsKLSAgICAgIHdzLnNlbmRUZXh0TWVzc2FnZShqc29uLnRvU3Ry
aW5nKCkpOwotICAgICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuUkVHSVNURVJF
RDsKLSAgICAgIC8vIFNlbmQgYW55IHByZXZpb3VzbHkgYWNjdW11bGF0ZWQgbWVzc2FnZXMuCi0g
ICAgICBmb3IgKFN0cmluZyBzZW5kTWVzc2FnZSA6IHdzU2VuZFF1ZXVlKSB7Ci0gICAgICAgIHNl
bmQoc2VuZE1lc3NhZ2UpOwotICAgICAgfQotICAgICAgd3NTZW5kUXVldWUuY2xlYXIoKTsKLSAg
ICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJXZWJTb2Nr
ZXQgcmVnaXN0ZXIgSlNPTiBlcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBzZW5kKFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgY2hlY2tJZkNhbGxl
ZE9uVmFsaWRUaHJlYWQoKTsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICBjYXNlIE5FVzoK
LSAgICAgIGNhc2UgQ09OTkVDVEVEOgotICAgICAgICAvLyBTdG9yZSBvdXRnb2luZyBtZXNzYWdl
cyBhbmQgc2VuZCB0aGVtIGFmdGVyIHdlYnNvY2tldCBjbGllbnQKLSAgICAgICAgLy8gaXMgcmVn
aXN0ZXJlZC4KLSAgICAgICAgTG9nLmQoVEFHLCAiV1MgQUNDOiAiICsgbWVzc2FnZSk7Ci0gICAg
ICAgIHdzU2VuZFF1ZXVlLmFkZChtZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgY2Fz
ZSBFUlJPUjoKLSAgICAgIGNhc2UgQ0xPU0VEOgotICAgICAgICBMb2cuZShUQUcsICJXZWJTb2Nr
ZXQgc2VuZCgpIGluIGVycm9yIG9yIGNsb3NlZCBzdGF0ZSA6ICIgKyBtZXNzYWdlKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgICAgY2FzZSBSRUdJU1RFUkVEOgotICAgICAgICBKU09OT2JqZWN0IGpz
b24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICB0cnkgewotICAgICAgICAgIGpzb24ucHV0
KCJjbWQiLCAic2VuZCIpOwotICAgICAgICAgIGpzb24ucHV0KCJtc2ciLCBtZXNzYWdlKTsKLSAg
ICAgICAgICBtZXNzYWdlID0ganNvbi50b1N0cmluZygpOwotICAgICAgICAgIExvZy5kKFRBRywg
IkMtPldTUzogIiArIG1lc3NhZ2UpOwotICAgICAgICAgIHdzLnNlbmRUZXh0TWVzc2FnZShtZXNz
YWdlKTsKLSAgICAgICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmVw
b3J0RXJyb3IoIldlYlNvY2tldCBzZW5kIEpTT04gZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhpcyBjYWxs
IGNhbiBiZSB1c2VkIHRvIHNlbmQgV2ViU29ja2V0IG1lc3NhZ2VzIGJlZm9yZSBXZWJTb2NrZXQK
LSAgLy8gY29ubmVjdGlvbiBpcyBvcGVuZWQuCi0gIHB1YmxpYyB2b2lkIHBvc3QoU3RyaW5nIG1l
c3NhZ2UpIHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxpZFRocmVhZCgpOwotICAgIHNlbmRXU1NN
ZXNzYWdlKCJQT1NUIiwgbWVzc2FnZSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0
KGJvb2xlYW4gd2FpdEZvckNvbXBsZXRlKSB7Ci0gICAgY2hlY2tJZkNhbGxlZE9uVmFsaWRUaHJl
YWQoKTsKLSAgICBMb2cuZChUQUcsICJEaXNjb25uZWN0IFdlYlNvY2tldC4gU3RhdGU6ICIgKyBz
dGF0ZSk7Ci0gICAgaWYgKHN0YXRlID09IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5SRUdJU1RF
UkVEKSB7Ci0gICAgICAvLyBTZW5kICJieWUiIHRvIFdlYlNvY2tldCBzZXJ2ZXIuCi0gICAgICBz
ZW5kKCJ7XCJ0eXBlXCI6IFwiYnllXCJ9Iik7Ci0gICAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5l
Y3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0gICAgICAvLyBTZW5kIGh0dHAgREVMRVRFIHRvIGh0dHAg
V2ViU29ja2V0IHNlcnZlci4KLSAgICAgIHNlbmRXU1NNZXNzYWdlKCJERUxFVEUiLCAiIik7Ci0g
ICAgfQotICAgIC8vIENsb3NlIFdlYlNvY2tldCBpbiBDT05ORUNURUQgb3IgRVJST1Igc3RhdGVz
IG9ubHkuCi0gICAgaWYgKHN0YXRlID09IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DT05ORUNU
RUQgfHwgc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkVSUk9SKSB7Ci0gICAgICB3
cy5kaXNjb25uZWN0KCk7Ci0gICAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5D
TE9TRUQ7Ci0KLSAgICAgIC8vIFdhaXQgZm9yIHdlYnNvY2tldCBjbG9zZSBldmVudCB0byBwcmV2
ZW50IHdlYnNvY2tldCBsaWJyYXJ5IGZyb20KLSAgICAgIC8vIHNlbmRpbmcgYW55IHBlbmRpbmcg
bWVzc2FnZXMgdG8gZGVsZXRlZCBsb29wZXIgdGhyZWFkLgotICAgICAgaWYgKHdhaXRGb3JDb21w
bGV0ZSkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKGNsb3NlRXZlbnRMb2NrKSB7Ci0gICAgICAg
ICAgd2hpbGUgKCFjbG9zZUV2ZW50KSB7Ci0gICAgICAgICAgICB0cnkgewotICAgICAgICAgICAg
ICBjbG9zZUV2ZW50TG9jay53YWl0KENMT1NFX1RJTUVPVVQpOwotICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgICAgICAgTG9nLmUoVEFHLCAiV2FpdCBlcnJvcjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIExv
Zy5kKFRBRywgIkRpc2Nvbm5lY3RpbmcgV2ViU29ja2V0IGRvbmUuIik7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExv
Zy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlm
IChzdGF0ZSAhPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgICAgICBz
dGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5FUlJPUjsKLSAgICAgICAgICBldmVudHMu
b25XZWJTb2NrZXRFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICAvLyBBc3luY2hyb25vdXNseSBzZW5kIFBPU1QvREVMRVRFIHRvIFdlYlNv
Y2tldCBzZXJ2ZXIuCi0gIHByaXZhdGUgdm9pZCBzZW5kV1NTTWVzc2FnZShmaW5hbCBTdHJpbmcg
bWV0aG9kLCBmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAgIFN0cmluZyBwb3N0VXJsID0gcG9z
dFNlcnZlclVybCArICIvIiArIHJvb21JRCArICIvIiArIGNsaWVudElEOwotICAgIExvZy5kKFRB
RywgIldTICIgKyBtZXRob2QgKyAiIDogIiArIHBvc3RVcmwgKyAiIDogIiArIG1lc3NhZ2UpOwot
ICAgIEFzeW5jSHR0cFVSTENvbm5lY3Rpb24gaHR0cENvbm5lY3Rpb24gPQotICAgICAgICBuZXcg
QXN5bmNIdHRwVVJMQ29ubmVjdGlvbihtZXRob2QsIHBvc3RVcmwsIG1lc3NhZ2UsIG5ldyBBc3lu
Y0h0dHBFdmVudHMoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZv
aWQgb25IdHRwRXJyb3IoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgcmVwb3J0
RXJyb3IoIldTICIgKyBtZXRob2QgKyAiIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICAg
ICAgICB9Ci0KLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0
dHBDb21wbGV0ZShTdHJpbmcgcmVzcG9uc2UpIHt9Ci0gICAgICAgIH0pOwotICAgIGh0dHBDb25u
ZWN0aW9uLnNlbmQoKTsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2QgZm9yIGRlYnVnZ2luZyBw
dXJwb3Nlcy4gRW5zdXJlcyB0aGF0IFdlYlNvY2tldCBtZXRob2QgaXMKLSAgLy8gY2FsbGVkIG9u
IGEgbG9vcGVyIHRocmVhZC4KLSAgcHJpdmF0ZSB2b2lkIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhy
ZWFkKCkgewotICAgIGlmIChUaHJlYWQuY3VycmVudFRocmVhZCgpICE9IGhhbmRsZXIuZ2V0TG9v
cGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRp
b24oIldlYlNvY2tldCBtZXRob2QgaXMgbm90IGNhbGxlZCBvbiB2YWxpZCB0aHJlYWQiKTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFdlYlNvY2tldE9ic2VydmVyIGltcGxlbWVudHMg
V2ViU29ja2V0Q29ubmVjdGlvbk9ic2VydmVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvbk9wZW4oKSB7Ci0gICAgICBMb2cuZChUQUcsICJXZWJTb2NrZXQgY29ubmVjdGlvbiBv
cGVuZWQgdG86ICIgKyB3c1NlcnZlclVybCk7Ci0gICAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRDsKLSAg
ICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIHBlbmRpbmcgcmVnaXN0ZXIgcmVxdWVzdC4KLSAg
ICAgICAgICBpZiAocm9vbUlEICE9IG51bGwgJiYgY2xpZW50SUQgIT0gbnVsbCkgewotICAgICAg
ICAgICAgcmVnaXN0ZXIocm9vbUlELCBjbGllbnRJRCk7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNs
b3NlKFdlYlNvY2tldENsb3NlTm90aWZpY2F0aW9uIGNvZGUsIFN0cmluZyByZWFzb24pIHsKLSAg
ICAgIExvZy5kKFRBRywgIldlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlZC4gQ29kZTogIiArIGNv
ZGUgKyAiLiBSZWFzb246ICIgKyByZWFzb24gKyAiLiBTdGF0ZTogIgotICAgICAgICAgICAgICAr
IHN0YXRlKTsKLSAgICAgIHN5bmNocm9uaXplZCAoY2xvc2VFdmVudExvY2spIHsKLSAgICAgICAg
Y2xvc2VFdmVudCA9IHRydWU7Ci0gICAgICAgIGNsb3NlRXZlbnRMb2NrLm5vdGlmeSgpOwotICAg
ICAgfQotICAgICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBpZiAoc3RhdGUgIT0g
V2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNMT1NFRCkgewotICAgICAgICAgICAgc3RhdGUgPSBX
ZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ0xPU0VEOwotICAgICAgICAgICAgZXZlbnRzLm9uV2Vi
U29ja2V0Q2xvc2UoKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uVGV4dE1lc3NhZ2UoU3RyaW5nIHBh
eWxvYWQpIHsKLSAgICAgIExvZy5kKFRBRywgIldTUy0+QzogIiArIHBheWxvYWQpOwotICAgICAg
ZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSBwYXlsb2FkOwotICAgICAgaGFuZGxlci5wb3N0KG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgICBpZiAoc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNPTk5F
Q1RFRAotICAgICAgICAgICAgICB8fCBzdGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUu
UkVHSVNURVJFRCkgewotICAgICAgICAgICAgZXZlbnRzLm9uV2ViU29ja2V0TWVzc2FnZShtZXNz
YWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUmF3VGV4dE1lc3NhZ2UoYnl0ZVtdIHBheWxvYWQp
IHt9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkJpbmFyeU1lc3NhZ2UoYnl0
ZVtdIHBheWxvYWQpIHt9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9XZWJTb2NrZXRSVENDbGllbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvV2ViU29ja2V0UlRDQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRSVENDbGllbnQuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQxOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBX
ZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5Sb29tUGFy
YW1ldGVyc0ZldGNoZXIuUm9vbVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzOwotaW1wb3J0IG9yZy5h
cHBzcG90LmFwcHJ0Yy5XZWJTb2NrZXRDaGFubmVsQ2xpZW50LldlYlNvY2tldENoYW5uZWxFdmVu
dHM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLldlYlNvY2tldENoYW5uZWxDbGllbnQuV2Vi
U29ja2V0Q29ubmVjdGlvblN0YXRlOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFz
eW5jSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5
bmNIdHRwVVJMQ29ubmVjdGlvbi5Bc3luY0h0dHBFdmVudHM7Ci0KLWltcG9ydCBhbmRyb2lkLm9z
LkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJv
aWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBvcmcuanNvbi5KU09OQXJyYXk7Ci1pbXBvcnQgb3JnLmpz
b24uSlNPTkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuanNvbi5KU09OT2JqZWN0OwotaW1wb3J0IG9y
Zy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0
aW9uOwotCi0vKioKLSAqIE5lZ290aWF0ZXMgc2lnbmFsaW5nIGZvciBjaGF0dGluZyB3aXRoIGh0
dHBzOi8vYXBwci50YyAicm9vbXMiLgotICogVXNlcyB0aGUgY2xpZW50PC0+c2VydmVyIHNwZWNp
ZmljcyBvZiB0aGUgYXBwcnRjIEFwcEVuZ2luZSB3ZWJhcHAuCi0gKgotICogPHA+VG8gdXNlOiBj
cmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBvYmplY3QgKHJlZ2lzdGVyaW5nIGEgbWVzc2FnZSBo
YW5kbGVyKSBhbmQKLSAqIGNhbGwgY29ubmVjdFRvUm9vbSgpLiAgT25jZSByb29tIGNvbm5lY3Rp
b24gaXMgZXN0YWJsaXNoZWQKLSAqIG9uQ29ubmVjdGVkVG9Sb29tKCkgY2FsbGJhY2sgd2l0aCBy
b29tIHBhcmFtZXRlcnMgaXMgaW52b2tlZC4KLSAqIE1lc3NhZ2VzIHRvIG90aGVyIHBhcnR5ICh3
aXRoIGxvY2FsIEljZSBjYW5kaWRhdGVzIGFuZCBhbnN3ZXIgU0RQKSBjYW4KLSAqIGJlIHNlbnQg
YWZ0ZXIgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuCi0gKi8KLXB1YmxpYyBj
bGFzcyBXZWJTb2NrZXRSVENDbGllbnQgaW1wbGVtZW50cyBBcHBSVENDbGllbnQsIFdlYlNvY2tl
dENoYW5uZWxFdmVudHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldT
UlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT01fSk9JTiA9ICJq
b2luIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT01fTUVTU0FHRSA9ICJtZXNz
YWdlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT01fTEVBVkUgPSAibGVhdmUi
OwotCi0gIHByaXZhdGUgZW51bSBDb25uZWN0aW9uU3RhdGUgeyBORVcsIENPTk5FQ1RFRCwgQ0xP
U0VELCBFUlJPUiB9Ci0KLSAgcHJpdmF0ZSBlbnVtIE1lc3NhZ2VUeXBlIHsgTUVTU0FHRSwgTEVB
VkUgfQotCi0gIHByaXZhdGUgZmluYWwgSGFuZGxlciBoYW5kbGVyOwotICBwcml2YXRlIGJvb2xl
YW4gaW5pdGlhdG9yOwotICBwcml2YXRlIFNpZ25hbGluZ0V2ZW50cyBldmVudHM7Ci0gIHByaXZh
dGUgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB3c0NsaWVudDsKLSAgcHJpdmF0ZSBDb25uZWN0aW9u
U3RhdGUgcm9vbVN0YXRlOwotICBwcml2YXRlIFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25u
ZWN0aW9uUGFyYW1ldGVyczsKLSAgcHJpdmF0ZSBTdHJpbmcgbWVzc2FnZVVybDsKLSAgcHJpdmF0
ZSBTdHJpbmcgbGVhdmVVcmw7Ci0KLSAgcHVibGljIFdlYlNvY2tldFJUQ0NsaWVudChTaWduYWxp
bmdFdmVudHMgZXZlbnRzKSB7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0gICAgcm9vbVN0
YXRlID0gQ29ubmVjdGlvblN0YXRlLk5FVzsKLSAgICBmaW5hbCBIYW5kbGVyVGhyZWFkIGhhbmRs
ZXJUaHJlYWQgPSBuZXcgSGFuZGxlclRocmVhZChUQUcpOwotICAgIGhhbmRsZXJUaHJlYWQuc3Rh
cnQoKTsKLSAgICBoYW5kbGVyID0gbmV3IEhhbmRsZXIoaGFuZGxlclRocmVhZC5nZXRMb29wZXIo
KSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBBcHBSVENDbGllbnQgaW50ZXJmYWNl
IGltcGxlbWVudGF0aW9uLgotICAvLyBBc3luY2hyb25vdXNseSBjb25uZWN0IHRvIGFuIEFwcFJU
QyByb29tIFVSTCB1c2luZyBzdXBwbGllZCBjb25uZWN0aW9uCi0gIC8vIHBhcmFtZXRlcnMsIHJl
dHJpZXZlcyByb29tIHBhcmFtZXRlcnMgYW5kIGNvbm5lY3QgdG8gV2ViU29ja2V0IHNlcnZlci4K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNvbm5lY3RUb1Jvb20oUm9vbUNvbm5lY3Rpb25Q
YXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJzKSB7Ci0gICAgdGhpcy5jb25uZWN0aW9uUGFy
YW1ldGVycyA9IGNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICAgIGhhbmRsZXIucG9zdChuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgY29ubmVjdFRvUm9vbUludGVybmFsKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGlzY29ubmVjdEZyb21Sb29tKCkgewotICAgIGhh
bmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZGlzY29ubmVjdEZyb21Sb29tSW50ZXJuYWwoKTsKLSAg
ICAgICAgaGFuZGxlci5nZXRMb29wZXIoKS5xdWl0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0K
LQotICAvLyBDb25uZWN0cyB0byByb29tIC0gZnVuY3Rpb24gcnVucyBvbiBhIGxvY2FsIGxvb3Bl
ciB0aHJlYWQuCi0gIHByaXZhdGUgdm9pZCBjb25uZWN0VG9Sb29tSW50ZXJuYWwoKSB7Ci0gICAg
U3RyaW5nIGNvbm5lY3Rpb25VcmwgPSBnZXRDb25uZWN0aW9uVXJsKGNvbm5lY3Rpb25QYXJhbWV0
ZXJzKTsKLSAgICBMb2cuZChUQUcsICJDb25uZWN0IHRvIHJvb206ICIgKyBjb25uZWN0aW9uVXJs
KTsKLSAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuTkVXOwotICAgIHdzQ2xpZW50ID0g
bmV3IFdlYlNvY2tldENoYW5uZWxDbGllbnQoaGFuZGxlciwgdGhpcyk7Ci0KLSAgICBSb29tUGFy
YW1ldGVyc0ZldGNoZXJFdmVudHMgY2FsbGJhY2tzID0gbmV3IFJvb21QYXJhbWV0ZXJzRmV0Y2hl
ckV2ZW50cygpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25TaWduYWxp
bmdQYXJhbWV0ZXJzUmVhZHkoZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbXMpIHsKLSAg
ICAgICAgV2ViU29ja2V0UlRDQ2xpZW50LnRoaXMuaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgICAgICBXZWJTb2NrZXRSVENDbGllbnQudGhpcy5zaWduYWxpbmdQYXJhbWV0ZXJzUmVh
ZHkocGFyYW1zKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKFN0
cmluZyBkZXNjcmlwdGlvbikgewotICAgICAgICBXZWJTb2NrZXRSVENDbGllbnQudGhpcy5yZXBv
cnRFcnJvcihkZXNjcmlwdGlvbik7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIG5ldyBSb29tUGFy
YW1ldGVyc0ZldGNoZXIoY29ubmVjdGlvblVybCwgbnVsbCwgY2FsbGJhY2tzKS5tYWtlUmVxdWVz
dCgpOwotICB9Ci0KLSAgLy8gRGlzY29ubmVjdCBmcm9tIHJvb20gYW5kIHNlbmQgYnllIG1lc3Nh
Z2VzIC0gcnVucyBvbiBhIGxvY2FsIGxvb3BlciB0aHJlYWQuCi0gIHByaXZhdGUgdm9pZCBkaXNj
b25uZWN0RnJvbVJvb21JbnRlcm5hbCgpIHsKLSAgICBMb2cuZChUQUcsICJEaXNjb25uZWN0LiBS
b29tIHN0YXRlOiAiICsgcm9vbVN0YXRlKTsKLSAgICBpZiAocm9vbVN0YXRlID09IENvbm5lY3Rp
b25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgIExvZy5kKFRBRywgIkNsb3Npbmcgcm9vbS4iKTsK
LSAgICAgIHNlbmRQb3N0TWVzc2FnZShNZXNzYWdlVHlwZS5MRUFWRSwgbGVhdmVVcmwsIG51bGwp
OwotICAgIH0KLSAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuQ0xPU0VEOwotICAgIGlm
ICh3c0NsaWVudCAhPSBudWxsKSB7Ci0gICAgICB3c0NsaWVudC5kaXNjb25uZWN0KHRydWUpOwot
ICAgIH0KLSAgfQotCi0gIC8vIEhlbHBlciBmdW5jdGlvbnMgdG8gZ2V0IGNvbm5lY3Rpb24sIHBv
c3QgbWVzc2FnZSBhbmQgbGVhdmUgbWVzc2FnZSBVUkxzCi0gIHByaXZhdGUgU3RyaW5nIGdldENv
bm5lY3Rpb25VcmwoUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJz
KSB7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21VcmwgKyAiLyIgKyBST09N
X0pPSU4gKyAiLyIgKyBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tSWQ7Ci0gIH0KLQotICBwcml2
YXRlIFN0cmluZyBnZXRNZXNzYWdlVXJsKAotICAgICAgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJz
IGNvbm5lY3Rpb25QYXJhbWV0ZXJzLCBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFt
ZXRlcnMpIHsKLSAgICByZXR1cm4gY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbVVybCArICIvIiAr
IFJPT01fTUVTU0FHRSArICIvIiArIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21JZAotICAgICAg
ICArICIvIiArIHNpZ25hbGluZ1BhcmFtZXRlcnMuY2xpZW50SWQ7Ci0gIH0KLQotICBwcml2YXRl
IFN0cmluZyBnZXRMZWF2ZVVybCgKLSAgICAgIFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25u
ZWN0aW9uUGFyYW1ldGVycywgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJz
KSB7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21VcmwgKyAiLyIgKyBST09N
X0xFQVZFICsgIi8iICsgY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbUlkICsgIi8iCi0gICAgICAg
ICsgc2lnbmFsaW5nUGFyYW1ldGVycy5jbGllbnRJZDsKLSAgfQotCi0gIC8vIENhbGxiYWNrIGlz
c3VlZCB3aGVuIHJvb20gcGFyYW1ldGVycyBhcmUgZXh0cmFjdGVkLiBSdW5zIG9uIGxvY2FsCi0g
IC8vIGxvb3BlciB0aHJlYWQuCi0gIHByaXZhdGUgdm9pZCBzaWduYWxpbmdQYXJhbWV0ZXJzUmVh
ZHkoZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzKSB7Ci0gICAg
TG9nLmQoVEFHLCAiUm9vbSBjb25uZWN0aW9uIGNvbXBsZXRlZC4iKTsKLSAgICBpZiAoY29ubmVj
dGlvblBhcmFtZXRlcnMubG9vcGJhY2sKLSAgICAgICAgJiYgKCFzaWduYWxpbmdQYXJhbWV0ZXJz
LmluaXRpYXRvciB8fCBzaWduYWxpbmdQYXJhbWV0ZXJzLm9mZmVyU2RwICE9IG51bGwpKSB7Ci0g
ICAgICByZXBvcnRFcnJvcigiTG9vcGJhY2sgcm9vbSBpcyBidXN5LiIpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIWNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrICYmICFzaWdu
YWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvcgotICAgICAgICAmJiBzaWduYWxpbmdQYXJhbWV0ZXJz
Lm9mZmVyU2RwID09IG51bGwpIHsKLSAgICAgIExvZy53KFRBRywgIk5vIG9mZmVyIFNEUCBpbiBy
b29tIHJlc3BvbnNlLiIpOwotICAgIH0KLSAgICBpbml0aWF0b3IgPSBzaWduYWxpbmdQYXJhbWV0
ZXJzLmluaXRpYXRvcjsKLSAgICBtZXNzYWdlVXJsID0gZ2V0TWVzc2FnZVVybChjb25uZWN0aW9u
UGFyYW1ldGVycywgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0gICAgbGVhdmVVcmwgPSBnZXRMZWF2
ZVVybChjb25uZWN0aW9uUGFyYW1ldGVycywgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0gICAgTG9n
LmQoVEFHLCAiTWVzc2FnZSBVUkw6ICIgKyBtZXNzYWdlVXJsKTsKLSAgICBMb2cuZChUQUcsICJM
ZWF2ZSBVUkw6ICIgKyBsZWF2ZVVybCk7Ci0gICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRl
LkNPTk5FQ1RFRDsKLQotICAgIC8vIEZpcmUgY29ubmVjdGlvbiBhbmQgc2lnbmFsaW5nIHBhcmFt
ZXRlcnMgZXZlbnRzLgotICAgIGV2ZW50cy5vbkNvbm5lY3RlZFRvUm9vbShzaWduYWxpbmdQYXJh
bWV0ZXJzKTsKLQotICAgIC8vIENvbm5lY3QgYW5kIHJlZ2lzdGVyIFdlYlNvY2tldCBjbGllbnQu
Ci0gICAgd3NDbGllbnQuY29ubmVjdChzaWduYWxpbmdQYXJhbWV0ZXJzLndzc1VybCwgc2lnbmFs
aW5nUGFyYW1ldGVycy53c3NQb3N0VXJsKTsKLSAgICB3c0NsaWVudC5yZWdpc3Rlcihjb25uZWN0
aW9uUGFyYW1ldGVycy5yb29tSWQsIHNpZ25hbGluZ1BhcmFtZXRlcnMuY2xpZW50SWQpOwotICB9
Ci0KLSAgLy8gU2VuZCBsb2NhbCBvZmZlciBTRFAgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50Lgot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZE9mZmVyU2RwKGZpbmFsIFNlc3Npb25EZXNj
cmlwdGlvbiBzZHApIHsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChyb29tU3Rh
dGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgIHJlcG9ydEVycm9y
KCJTZW5kaW5nIG9mZmVyIFNEUCBpbiBub24gY29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9i
amVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJzZHAiLCBzZHAuZGVzY3JpcHRpb24pOwot
ICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgIm9mZmVyIik7Ci0gICAgICAgIHNlbmRQb3N0
TWVzc2FnZShNZXNzYWdlVHlwZS5NRVNTQUdFLCBtZXNzYWdlVXJsLCBqc29uLnRvU3RyaW5nKCkp
OwotICAgICAgICBpZiAoY29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgICAg
ICAvLyBJbiBsb29wYmFjayBtb2RlIHJlbmFtZSB0aGlzIG9mZmVyIHRvIGFuc3dlciBhbmQgcm91
dGUgaXQgYmFjay4KLSAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24gc2RwQW5zd2VyID0gbmV3
IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5
cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBzZHAuZGVzY3JpcHRpb24pOwotICAgICAg
ICAgIGV2ZW50cy5vblJlbW90ZURlc2NyaXB0aW9uKHNkcEFuc3dlcik7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIFNlbmQgbG9jYWwgYW5zd2VyIFNEUCB0byB0aGUg
b3RoZXIgcGFydGljaXBhbnQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZW5kQW5zd2Vy
U2RwKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBoYW5kbGVyLnBvc3QobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIGlmIChjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgICAg
IExvZy5lKFRBRywgIlNlbmRpbmcgYW5zd2VyIGluIGxvb3BiYWNrIG1vZGUuIik7Ci0gICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09O
T2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInNkcCIsIHNkcC5kZXNjcmlwdGlvbik7
Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAiYW5zd2VyIik7Ci0gICAgICAgIHdzQ2xp
ZW50LnNlbmQoanNvbi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8v
IFNlbmQgSWNlIGNhbmRpZGF0ZSB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBzZW5kTG9jYWxJY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRl
IGNhbmRpZGF0ZSkgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgSlNPTk9iamVjdCBq
c29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlwZSIsICJj
YW5kaWRhdGUiKTsKLSAgICAgICAganNvblB1dChqc29uLCAibGFiZWwiLCBjYW5kaWRhdGUuc2Rw
TUxpbmVJbmRleCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImlkIiwgY2FuZGlkYXRlLnNkcE1p
ZCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5zZHApOwot
ICAgICAgICBpZiAoaW5pdGlhdG9yKSB7Ci0gICAgICAgICAgLy8gQ2FsbCBpbml0aWF0b3Igc2Vu
ZHMgaWNlIGNhbmRpZGF0ZXMgdG8gR0FFIHNlcnZlci4KLSAgICAgICAgICBpZiAocm9vbVN0YXRl
ICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9y
KCJTZW5kaW5nIElDRSBjYW5kaWRhdGUgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc2VuZFBvc3RNZXNzYWdlKE1l
c3NhZ2VUeXBlLk1FU1NBR0UsIG1lc3NhZ2VVcmwsIGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICAg
ICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICAgICAgICBldmVu
dHMub25SZW1vdGVJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgLy8gQ2FsbCByZWNlaXZlciBzZW5kcyBpY2UgY2FuZGlkYXRl
cyB0byB3ZWJzb2NrZXQgc2VydmVyLgotICAgICAgICAgIHdzQ2xpZW50LnNlbmQoanNvbi50b1N0
cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gU2VuZCBy
ZW1vdmVkIEljZSBjYW5kaWRhdGVzIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZVJlbW92YWxzKGZpbmFsIElj
ZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNv
biwgInR5cGUiLCAicmVtb3ZlLWNhbmRpZGF0ZXMiKTsKLSAgICAgICAgSlNPTkFycmF5IGpzb25B
cnJheSA9IG5ldyBKU09OQXJyYXkoKTsKLSAgICAgICAgZm9yIChmaW5hbCBJY2VDYW5kaWRhdGUg
Y2FuZGlkYXRlIDogY2FuZGlkYXRlcykgewotICAgICAgICAgIGpzb25BcnJheS5wdXQodG9Kc29u
Q2FuZGlkYXRlKGNhbmRpZGF0ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGpzb25QdXQoanNvbiwg
ImNhbmRpZGF0ZXMiLCBqc29uQXJyYXkpOwotICAgICAgICBpZiAoaW5pdGlhdG9yKSB7Ci0gICAg
ICAgICAgLy8gQ2FsbCBpbml0aWF0b3Igc2VuZHMgaWNlIGNhbmRpZGF0ZXMgdG8gR0FFIHNlcnZl
ci4KLSAgICAgICAgICBpZiAocm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQp
IHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJTZW5kaW5nIElDRSBjYW5kaWRhdGUgcmVtb3Zh
bHMgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgc2VuZFBvc3RNZXNzYWdlKE1lc3NhZ2VUeXBlLk1FU1NBR0UsIG1l
c3NhZ2VVcmwsIGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGNvbm5lY3Rpb25QYXJh
bWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICAgICAgICBldmVudHMub25SZW1vdGVJY2VDYW5kaWRh
dGVzUmVtb3ZlZChjYW5kaWRhdGVzKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgLy8gQ2FsbCByZWNlaXZlciBzZW5kcyBpY2UgY2FuZGlkYXRlcyB0byB3ZWJzb2Nr
ZXQgc2VydmVyLgotICAgICAgICAgIHdzQ2xpZW50LnNlbmQoanNvbi50b1N0cmluZygpKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8g
V2ViU29ja2V0Q2hhbm5lbEV2ZW50cyBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24uCi0gIC8vIEFs
bCBldmVudHMgYXJlIGNhbGxlZCBieSBXZWJTb2NrZXRDaGFubmVsQ2xpZW50IG9uIGEgbG9jYWwg
bG9vcGVyIHRocmVhZAotICAvLyAocGFzc2VkIHRvIFdlYlNvY2tldCBjbGllbnQgY29uc3RydWN0
b3IpLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25XZWJTb2NrZXRNZXNzYWdlKGZpbmFs
IFN0cmluZyBtc2cpIHsKLSAgICBpZiAod3NDbGllbnQuZ2V0U3RhdGUoKSAhPSBXZWJTb2NrZXRD
b25uZWN0aW9uU3RhdGUuUkVHSVNURVJFRCkgewotICAgICAgTG9nLmUoVEFHLCAiR290IFdlYlNv
Y2tldCBtZXNzYWdlIGluIG5vbiByZWdpc3RlcmVkIHN0YXRlLiIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICB0cnkgewotICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3Qo
bXNnKTsKLSAgICAgIFN0cmluZyBtc2dUZXh0ID0ganNvbi5nZXRTdHJpbmcoIm1zZyIpOwotICAg
ICAgU3RyaW5nIGVycm9yVGV4dCA9IGpzb24ub3B0U3RyaW5nKCJlcnJvciIpOwotICAgICAgaWYg
KG1zZ1RleHQubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIGpzb24gPSBuZXcgSlNPTk9iamVjdCht
c2dUZXh0KTsKLSAgICAgICAgU3RyaW5nIHR5cGUgPSBqc29uLm9wdFN0cmluZygidHlwZSIpOwot
ICAgICAgICBpZiAodHlwZS5lcXVhbHMoImNhbmRpZGF0ZSIpKSB7Ci0gICAgICAgICAgZXZlbnRz
Lm9uUmVtb3RlSWNlQ2FuZGlkYXRlKHRvSmF2YUNhbmRpZGF0ZShqc29uKSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAodHlwZS5lcXVhbHMoInJlbW92ZS1jYW5kaWRhdGVzIikpIHsKLSAgICAgICAgICBK
U09OQXJyYXkgY2FuZGlkYXRlQXJyYXkgPSBqc29uLmdldEpTT05BcnJheSgiY2FuZGlkYXRlcyIp
OwotICAgICAgICAgIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMgPSBuZXcgSWNlQ2FuZGlkYXRl
W2NhbmRpZGF0ZUFycmF5Lmxlbmd0aCgpXTsKLSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNhbmRpZGF0ZUFycmF5Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGNhbmRpZGF0ZXNb
aV0gPSB0b0phdmFDYW5kaWRhdGUoY2FuZGlkYXRlQXJyYXkuZ2V0SlNPTk9iamVjdChpKSk7Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGV2ZW50cy5vblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1vdmVk
KGNhbmRpZGF0ZXMpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJhbnN3ZXIiKSkg
ewotICAgICAgICAgIGlmIChpbml0aWF0b3IpIHsKLSAgICAgICAgICAgIFNlc3Npb25EZXNjcmlw
dGlvbiBzZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgIFNlc3Np
b25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKHR5cGUpLCBqc29uLmdldFN0cmlu
Zygic2RwIikpOwotICAgICAgICAgICAgZXZlbnRzLm9uUmVtb3RlRGVzY3JpcHRpb24oc2RwKTsK
LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlJlY2VpdmVkIGFu
c3dlciBmb3IgY2FsbCBpbml0aWF0b3I6ICIgKyBtc2cpOwotICAgICAgICAgIH0KLSAgICAgICAg
fSBlbHNlIGlmICh0eXBlLmVxdWFscygib2ZmZXIiKSkgewotICAgICAgICAgIGlmICghaW5pdGlh
dG9yKSB7Ci0gICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25E
ZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9t
Q2Fub25pY2FsRm9ybSh0eXBlKSwganNvbi5nZXRTdHJpbmcoInNkcCIpKTsKLSAgICAgICAgICAg
IGV2ZW50cy5vblJlbW90ZURlc2NyaXB0aW9uKHNkcCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHJlcG9ydEVycm9yKCJSZWNlaXZlZCBvZmZlciBmb3IgY2FsbCByZWNlaXZlcjog
IiArIG1zZyk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJi
eWUiKSkgewotICAgICAgICAgIGV2ZW50cy5vbkNoYW5uZWxDbG9zZSgpOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJVbmV4cGVjdGVkIFdlYlNvY2tldCBtZXNzYWdl
OiAiICsgbXNnKTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGVycm9y
VGV4dCAhPSBudWxsICYmIGVycm9yVGV4dC5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICByZXBv
cnRFcnJvcigiV2ViU29ja2V0IGVycm9yIG1lc3NhZ2U6ICIgKyBlcnJvclRleHQpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJVbmV4cGVjdGVkIFdlYlNvY2tldCBt
ZXNzYWdlOiAiICsgbXNnKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0gY2F0Y2ggKEpTT05F
eGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIldlYlNvY2tldCBtZXNzYWdlIEpTT04g
cGFyc2luZyBlcnJvcjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIG9uV2ViU29ja2V0Q2xvc2UoKSB7Ci0gICAgZXZlbnRzLm9uQ2hh
bm5lbENsb3NlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25XZWJTb2Nr
ZXRFcnJvcihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0
IGVycm9yOiAiICsgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8g
SGVscGVyIGZ1bmN0aW9ucy4KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0cmlu
ZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2cuZShUQUcsIGVycm9yTWVzc2FnZSk7Ci0gICAgaGFu
ZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5F
UlJPUikgewotICAgICAgICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5FUlJPUjsKLSAg
ICAgICAgICBldmVudHMub25DaGFubmVsRXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gUHV0IGEgfGtleXwtPnx2YWx1ZXwgbWFwcGlu
ZyBpbiB8anNvbnwuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQganNvblB1dChKU09OT2JqZWN0IGpz
b24sIFN0cmluZyBrZXksIE9iamVjdCB2YWx1ZSkgewotICAgIHRyeSB7Ci0gICAgICBqc29uLnB1
dChrZXksIHZhbHVlKTsKLSAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgIHRo
cm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgIH0KLSAgfQotCi0gIC8vIFNlbmQgU0RQ
IG9yIElDRSBjYW5kaWRhdGUgdG8gYSByb29tIHNlcnZlci4KLSAgcHJpdmF0ZSB2b2lkIHNlbmRQ
b3N0TWVzc2FnZSgKLSAgICAgIGZpbmFsIE1lc3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBmaW5hbCBT
dHJpbmcgdXJsLCBmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAgIFN0cmluZyBsb2dJbmZvID0g
dXJsOwotICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgIGxvZ0luZm8gKz0gIi4gTWVz
c2FnZTogIiArIG1lc3NhZ2U7Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkMtPkdBRTogIiArIGxv
Z0luZm8pOwotICAgIEFzeW5jSHR0cFVSTENvbm5lY3Rpb24gaHR0cENvbm5lY3Rpb24gPQotICAg
ICAgICBuZXcgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbigiUE9TVCIsIHVybCwgbWVzc2FnZSwgbmV3
IEFzeW5jSHR0cEV2ZW50cygpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJs
aWMgdm9pZCBvbkh0dHBFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICBy
ZXBvcnRFcnJvcigiR0FFIFBPU1QgZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgICAgICAg
IH0KLQotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cENv
bXBsZXRlKFN0cmluZyByZXNwb25zZSkgewotICAgICAgICAgICAgaWYgKG1lc3NhZ2VUeXBlID09
IE1lc3NhZ2VUeXBlLk1FU1NBR0UpIHsKLSAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAg
ICAgICBKU09OT2JqZWN0IHJvb21Kc29uID0gbmV3IEpTT05PYmplY3QocmVzcG9uc2UpOwotICAg
ICAgICAgICAgICAgIFN0cmluZyByZXN1bHQgPSByb29tSnNvbi5nZXRTdHJpbmcoInJlc3VsdCIp
OwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmVxdWFscygiU1VDQ0VTUyIpKSB7Ci0gICAg
ICAgICAgICAgICAgICByZXBvcnRFcnJvcigiR0FFIFBPU1QgZXJyb3I6ICIgKyByZXN1bHQpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoIkdBRSBQT1NUIEpTT04gZXJyb3I6ICIg
KyBlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICBodHRwQ29ubmVjdGlvbi5zZW5kKCk7Ci0gIH0KLQotICAv
LyBDb252ZXJ0cyBhIEphdmEgY2FuZGlkYXRlIHRvIGEgSlNPTk9iamVjdC4KLSAgcHJpdmF0ZSBK
U09OT2JqZWN0IHRvSnNvbkNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7
Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICBqc29uUHV0KGpz
b24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4KTsKLSAgICBqc29uUHV0KGpzb24s
ICJpZCIsIGNhbmRpZGF0ZS5zZHBNaWQpOwotICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZSIs
IGNhbmRpZGF0ZS5zZHApOwotICAgIHJldHVybiBqc29uOwotICB9Ci0KLSAgLy8gQ29udmVydHMg
YSBKU09OIGNhbmRpZGF0ZSB0byBhIEphdmEgb2JqZWN0LgotICBJY2VDYW5kaWRhdGUgdG9KYXZh
Q2FuZGlkYXRlKEpTT05PYmplY3QganNvbikgdGhyb3dzIEpTT05FeGNlcHRpb24gewotICAgIHJl
dHVybiBuZXcgSWNlQ2FuZGlkYXRlKAotICAgICAgICBqc29uLmdldFN0cmluZygiaWQiKSwganNv
bi5nZXRJbnQoImxhYmVsIiksIGpzb24uZ2V0U3RyaW5nKCJjYW5kaWRhdGUiKSk7Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FwcFJUQ1V0aWxzLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwvQXBwUlRDVXRp
bHMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L3V0aWwvQXBwUlRDVXRpbHMuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQ3ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWw7Ci0KLWlt
cG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgot
ICogQXBwUlRDVXRpbHMgcHJvdmlkZXMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGhy
ZWFkIHNhZmV0eS4KLSAqLwotcHVibGljIGZpbmFsIGNsYXNzIEFwcFJUQ1V0aWxzIHsKLSAgcHJp
dmF0ZSBBcHBSVENVdGlscygpIHt9Ci0KLSAgLyoqIEhlbHBlciBtZXRob2Qgd2hpY2ggdGhyb3dz
IGFuIGV4Y2VwdGlvbiAgd2hlbiBhbiBhc3NlcnRpb24gaGFzIGZhaWxlZC4gKi8KLSAgcHVibGlj
IHN0YXRpYyB2b2lkIGFzc2VydElzVHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICgh
Y29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNv
bmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgLyoqIEhlbHBlciBtZXRob2Qg
Zm9yIGJ1aWxkaW5nIGEgc3RyaW5nIG9mIHRocmVhZCBpbmZvcm1hdGlvbi4qLwotICBwdWJsaWMg
c3RhdGljIFN0cmluZyBnZXRUaHJlYWRJbmZvKCkgewotICAgIHJldHVybiAiQFtuYW1lPSIgKyBU
aHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSArICIsIGlkPSIgKyBUaHJlYWQuY3VycmVu
dFRocmVhZCgpLmdldElkKCkKLSAgICAgICAgKyAiXSI7Ci0gIH0KLQotICAvKiogSW5mb3JtYXRp
b24gYWJvdXQgdGhlIGN1cnJlbnQgYnVpbGQsIHRha2VuIGZyb20gc3lzdGVtIHByb3BlcnRpZXMu
ICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dEZXZpY2VJbmZvKFN0cmluZyB0YWcpIHsKLSAg
ICBMb2cuZCh0YWcsICJBbmRyb2lkIFNESzogIiArIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCArICIs
ICIKLSAgICAgICAgICAgICsgIlJlbGVhc2U6ICIgKyBCdWlsZC5WRVJTSU9OLlJFTEVBU0UgKyAi
LCAiCi0gICAgICAgICAgICArICJCcmFuZDogIiArIEJ1aWxkLkJSQU5EICsgIiwgIgotICAgICAg
ICAgICAgKyAiRGV2aWNlOiAiICsgQnVpbGQuREVWSUNFICsgIiwgIgotICAgICAgICAgICAgKyAi
SWQ6ICIgKyBCdWlsZC5JRCArICIsICIKLSAgICAgICAgICAgICsgIkhhcmR3YXJlOiAiICsgQnVp
bGQuSEFSRFdBUkUgKyAiLCAiCi0gICAgICAgICAgICArICJNYW51ZmFjdHVyZXI6ICIgKyBCdWls
ZC5NQU5VRkFDVFVSRVIgKyAiLCAiCi0gICAgICAgICAgICArICJNb2RlbDogIiArIEJ1aWxkLk1P
REVMICsgIiwgIgotICAgICAgICAgICAgKyAiUHJvZHVjdDogIiArIEJ1aWxkLlBST0RVQ1QpOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9Bc3luY0h0dHBV
UkxDb25uZWN0aW9uLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBw
cnRjL3V0aWwvQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9Bc3luY0h0dHBVUkxDb25uZWN0aW9u
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9F
eGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91
dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5IdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBq
YXZhLm5ldC5Tb2NrZXRUaW1lb3V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWlt
cG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKLQotLyoqCi0gKiBBc3luY2hyb25vdXMgaHR0cCByZXF1
ZXN0cyBpbXBsZW1lbnRhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIEFzeW5jSHR0cFVSTENvbm5l
Y3Rpb24gewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSFRUUF9USU1FT1VUX01TID0gODAw
MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEhUVFBfT1JJR0lOID0gImh0dHBzOi8v
YXBwci50YyI7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIG1ldGhvZDsKLSAgcHJpdmF0ZSBmaW5h
bCBTdHJpbmcgdXJsOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBtZXNzYWdlOwotICBwcml2YXRl
IGZpbmFsIEFzeW5jSHR0cEV2ZW50cyBldmVudHM7Ci0gIHByaXZhdGUgU3RyaW5nIGNvbnRlbnRU
eXBlOwotCi0gIC8qKgotICAgKiBIdHRwIHJlcXVlc3RzIGNhbGxiYWNrcy4KLSAgICovCi0gIHB1
YmxpYyBpbnRlcmZhY2UgQXN5bmNIdHRwRXZlbnRzIHsKLSAgICB2b2lkIG9uSHR0cEVycm9yKFN0
cmluZyBlcnJvck1lc3NhZ2UpOwotICAgIHZvaWQgb25IdHRwQ29tcGxldGUoU3RyaW5nIHJlc3Bv
bnNlKTsKLSAgfQotCi0gIHB1YmxpYyBBc3luY0h0dHBVUkxDb25uZWN0aW9uKFN0cmluZyBtZXRo
b2QsIFN0cmluZyB1cmwsIFN0cmluZyBtZXNzYWdlLCBBc3luY0h0dHBFdmVudHMgZXZlbnRzKSB7
Ci0gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7Ci0gICAgdGhpcy51cmwgPSB1cmw7Ci0gICAgdGhp
cy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIHNldENvbnRlbnRUeXBlKFN0cmluZyBjb250ZW50VHlwZSkgewotICAgIHRo
aXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNlbmQo
KSB7Ci0gICAgUnVubmFibGUgcnVuSHR0cCA9IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc2VuZEh0dHBNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAg
fTsKLSAgICBuZXcgVGhyZWFkKHJ1bkh0dHApLnN0YXJ0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgc2VuZEh0dHBNZXNzYWdlKCkgewotICAgIHRyeSB7Ci0gICAgICBIdHRwVVJMQ29ubmVjdGlv
biBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKSBuZXcgVVJMKHVybCkub3BlbkNvbm5l
Y3Rpb24oKTsKLSAgICAgIGJ5dGVbXSBwb3N0RGF0YSA9IG5ldyBieXRlWzBdOwotICAgICAgaWYg
KG1lc3NhZ2UgIT0gbnVsbCkgewotICAgICAgICBwb3N0RGF0YSA9IG1lc3NhZ2UuZ2V0Qnl0ZXMo
IlVURi04Iik7Ci0gICAgICB9Ci0gICAgICBjb25uZWN0aW9uLnNldFJlcXVlc3RNZXRob2QobWV0
aG9kKTsKLSAgICAgIGNvbm5lY3Rpb24uc2V0VXNlQ2FjaGVzKGZhbHNlKTsKLSAgICAgIGNvbm5l
Y3Rpb24uc2V0RG9JbnB1dCh0cnVlKTsKLSAgICAgIGNvbm5lY3Rpb24uc2V0Q29ubmVjdFRpbWVv
dXQoSFRUUF9USU1FT1VUX01TKTsKLSAgICAgIGNvbm5lY3Rpb24uc2V0UmVhZFRpbWVvdXQoSFRU
UF9USU1FT1VUX01TKTsKLSAgICAgIC8vIFRPRE8oZ2xhem5ldikgLSBxdWVyeSByZXF1ZXN0IG9y
aWdpbiBmcm9tIHByZWZfcm9vbV9zZXJ2ZXJfdXJsX2tleSBwcmVmZXJlbmNlcy4KLSAgICAgIGNv
bm5lY3Rpb24uYWRkUmVxdWVzdFByb3BlcnR5KCJvcmlnaW4iLCBIVFRQX09SSUdJTik7Ci0gICAg
ICBib29sZWFuIGRvT3V0cHV0ID0gZmFsc2U7Ci0gICAgICBpZiAobWV0aG9kLmVxdWFscygiUE9T
VCIpKSB7Ci0gICAgICAgIGRvT3V0cHV0ID0gdHJ1ZTsKLSAgICAgICAgY29ubmVjdGlvbi5zZXRE
b091dHB1dCh0cnVlKTsKLSAgICAgICAgY29ubmVjdGlvbi5zZXRGaXhlZExlbmd0aFN0cmVhbWlu
Z01vZGUocG9zdERhdGEubGVuZ3RoKTsKLSAgICAgIH0KLSAgICAgIGlmIChjb250ZW50VHlwZSA9
PSBudWxsKSB7Ci0gICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50
LVR5cGUiLCAidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOCIpOwotICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtVHlwZSIsIGNvbnRl
bnRUeXBlKTsKLSAgICAgIH0KLQotICAgICAgLy8gU2VuZCBQT1NUIHJlcXVlc3QuCi0gICAgICBp
ZiAoZG9PdXRwdXQgJiYgcG9zdERhdGEubGVuZ3RoID4gMCkgewotICAgICAgICBPdXRwdXRTdHJl
YW0gb3V0U3RyZWFtID0gY29ubmVjdGlvbi5nZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAgICAgb3V0
U3RyZWFtLndyaXRlKHBvc3REYXRhKTsKLSAgICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7Ci0gICAg
ICB9Ci0KLSAgICAgIC8vIEdldCByZXNwb25zZS4KLSAgICAgIGludCByZXNwb25zZUNvZGUgPSBj
b25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAy
MDApIHsKLSAgICAgICAgZXZlbnRzLm9uSHR0cEVycm9yKCJOb24tMjAwIHJlc3BvbnNlIHRvICIg
KyBtZXRob2QgKyAiIHRvIFVSTDogIiArIHVybCArICIgOiAiCi0gICAgICAgICAgICArIGNvbm5l
Y3Rpb24uZ2V0SGVhZGVyRmllbGQobnVsbCkpOwotICAgICAgICBjb25uZWN0aW9uLmRpc2Nvbm5l
Y3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgSW5wdXRTdHJlYW0gcmVzcG9u
c2VTdHJlYW0gPSBjb25uZWN0aW9uLmdldElucHV0U3RyZWFtKCk7Ci0gICAgICBTdHJpbmcgcmVz
cG9uc2UgPSBkcmFpblN0cmVhbShyZXNwb25zZVN0cmVhbSk7Ci0gICAgICByZXNwb25zZVN0cmVh
bS5jbG9zZSgpOwotICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7Ci0gICAgICBldmVudHMu
b25IdHRwQ29tcGxldGUocmVzcG9uc2UpOwotICAgIH0gY2F0Y2ggKFNvY2tldFRpbWVvdXRFeGNl
cHRpb24gZSkgewotICAgICAgZXZlbnRzLm9uSHR0cEVycm9yKCJIVFRQICIgKyBtZXRob2QgKyAi
IHRvICIgKyB1cmwgKyAiIHRpbWVvdXQiKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICBldmVudHMub25IdHRwRXJyb3IoIkhUVFAgIiArIG1ldGhvZCArICIgdG8gIiArIHVy
bCArICIgZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0
dXJuIHRoZSBjb250ZW50cyBvZiBhbiBJbnB1dFN0cmVhbSBhcyBhIFN0cmluZy4KLSAgcHJpdmF0
ZSBzdGF0aWMgU3RyaW5nIGRyYWluU3RyZWFtKElucHV0U3RyZWFtIGluKSB7Ci0gICAgU2Nhbm5l
ciBzID0gbmV3IFNjYW5uZXIoaW4pLnVzZURlbGltaXRlcigiXFxBIik7Ci0gICAgcmV0dXJuIHMu
aGFzTmV4dCgpID8gcy5uZXh0KCkgOiAiIjsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zdGFydF9sb29w
YmFja19zdHViYmVkX2NhbWVyYV9zYXZlZF92aWRlb19vdXQucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zdGFydF9sb29wYmFja19zdHViYmVkX2NhbWVyYV9zYXZlZF92aWRlb19vdXQucHkJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvc3RhcnRfbG9vcGJhY2tfc3R1YmJlZF9jYW1lcmFfc2F2ZWRf
dmlkZW9fb3V0LnB5CShub25leGlzdGVudCkKQEAgLTEsMTI0ICswLDAgQEAKLSMgQ29weXJpZ2h0
IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotIwotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0jIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotIyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0jIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSMgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0KLWZyb20gb3B0
cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgotaW1wb3J0IHJhbmRvbQotaW1wb3J0IHN0cmluZwot
aW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCBzeXMKLWltcG9ydCB0aW1lCi0KLWZyb20gY29tLmFu
ZHJvaWQubW9ua2V5cnVubmVyIGltcG9ydCBNb25rZXlSdW5uZXIsIE1vbmtleURldmljZQotCi1k
ZWYgbWFpbigpOgotICBwYXJzZXIgPSBPcHRpb25QYXJzZXIoKQotCi0gIHBhcnNlci5hZGRfb3B0
aW9uKCctLWRldm5hbWUnLCBkZXN0PSdkZXZuYW1lJywgaGVscD0nVGhlIGRldmljZSBpZCcpCi0K
LSAgcGFyc2VyLmFkZF9vcHRpb24oCi0gICAgICAnLS12aWRlb291dHNhdmUnLAotICAgICAgZGVz
dD0ndmlkZW9vdXRzYXZlJywKLSAgICAgIGhlbHA9J1RoZSBwYXRoIHdoZXJlIHRvIHNhdmUgdGhl
IHZpZGVvIG91dCBmaWxlIG9uIGxvY2FsIGNvbXB1dGVyJykKLQotICBwYXJzZXIuYWRkX29wdGlv
bigKLSAgICAgICctLXZpZGVvb3V0JywKLSAgICAgIGRlc3Q9J3ZpZGVvb3V0JywKLSAgICAgIGhl
bHA9J1RoZSBwYXRoIHdoZXJlIHRvIHB1dCB0aGUgdmlkZW8gb3V0IGZpbGUnKQotCi0gIHBhcnNl
ci5hZGRfb3B0aW9uKAotICAgICAgJy0tdmlkZW9vdXRfd2lkdGgnLAotICAgICAgZGVzdD0ndmlk
ZW9vdXRfd2lkdGgnLAotICAgICAgdHlwZT0naW50JywKLSAgICAgIGhlbHA9J1RoZSB3aWR0aCBm
b3IgdGhlIHZpZGVvIG91dCBmaWxlJykKLQotICBwYXJzZXIuYWRkX29wdGlvbigKLSAgICAgICct
LXZpZGVvb3V0X2hlaWdodCcsCi0gICAgICBkZXN0PSd2aWRlb291dF9oZWlnaHQnLAotICAgICAg
dHlwZT0naW50JywKLSAgICAgIGhlbHA9J1RoZSBoZWlnaHQgZm9yIHRoZSB2aWRlbyBvdXQgZmls
ZScpCi0KLSAgcGFyc2VyLmFkZF9vcHRpb24oCi0gICAgICAnLS12aWRlb2luJywKLSAgICAgIGRl
c3Q9J3ZpZGVvaW4nLAotICAgICAgaGVscD0nVGhlIHBhdGggd2hlcmUgdG8gcmVhZCBpbnB1dCBm
aWxlIGluc3RlYWQgb2YgY2FtZXJhJykKLQotICBwYXJzZXIuYWRkX29wdGlvbigKLSAgICAgICct
LWNhbGxfbGVuZ3RoJywKLSAgICAgIGRlc3Q9J2NhbGxfbGVuZ3RoJywKLSAgICAgIHR5cGU9J2lu
dCcsCi0gICAgICBoZWxwPSdUaGUgbGVuZ3RoIG9mIHRoZSBjYWxsJykKLQotICAob3B0aW9ucywg
YXJncykgPSBwYXJzZXIucGFyc2VfYXJncygpCi0KLSAgcHJpbnQgKG9wdGlvbnMsIGFyZ3MpCi0K
LSAgZGV2bmFtZSA9IG9wdGlvbnMuZGV2bmFtZQotCi0gIHZpZGVvaW4gPSBvcHRpb25zLnZpZGVv
aW4KLQotICB2aWRlb291dCA9IG9wdGlvbnMudmlkZW9vdXQKLSAgdmlkZW9vdXRfd2lkdGggPSBv
cHRpb25zLnZpZGVvb3V0X3dpZHRoCi0gIHZpZGVvb3V0X2hlaWdodCA9IG9wdGlvbnMudmlkZW9v
dXRfaGVpZ2h0Ci0KLSAgdmlkZW9vdXRzYXZlID0gb3B0aW9ucy52aWRlb291dHNhdmUKLQotICBj
YWxsX2xlbmd0aCA9IG9wdGlvbnMuY2FsbF9sZW5ndGggb3IgMTAKLQotICByb29tID0gJycuam9p
bihyYW5kb20uY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cykKLSAg
ICAgIGZvciBfIGluIHJhbmdlKDgpKQotCi0gICMgRGVsZXRlIG91dHB1dCB2aWRlbyBmaWxlLgot
ICBpZiB2aWRlb291dDoKLSAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydhZGInLCAnLXMnLCBk
ZXZuYW1lLCAnc2hlbGwnLCAncm0nLAotICAgICAgICB2aWRlb291dF0pCi0KLSAgZGV2aWNlID0g
TW9ua2V5UnVubmVyLndhaXRGb3JDb25uZWN0aW9uKDIsIGRldm5hbWUpCi0KLSAgZXh0cmFzID0g
ewotICAgICAgJ29yZy5hcHBzcG90LmFwcHJ0Yy5VU0VfVkFMVUVTX0ZST01fSU5URU5UJzogVHJ1
ZSwKLSAgICAgICdvcmcuYXBwc3BvdC5hcHBydGMuQVVESU9DT0RFQyc6ICdPUFVTJywKLSAgICAg
ICdvcmcuYXBwc3BvdC5hcHBydGMuTE9PUEJBQ0snOiBUcnVlLAotICAgICAgJ29yZy5hcHBzcG90
LmFwcHJ0Yy5WSURFT0NPREVDJzogJ1ZQOCcsCi0gICAgICAnb3JnLmFwcHNwb3QuYXBwcnRjLkNB
UFRVUkVUT1RFWFRVUkUnOiBGYWxzZSwKLSAgICAgICdvcmcuYXBwc3BvdC5hcHBydGMuQ0FNRVJB
Mic6IEZhbHNlLAotICAgICAgJ29yZy5hcHBzcG90LmFwcHJ0Yy5ST09NSUQnOiByb29tfQotCi0g
IGlmIHZpZGVvaW46Ci0gICAgZXh0cmFzLnVwZGF0ZSh7J29yZy5hcHBzcG90LmFwcHJ0Yy5WSURF
T19GSUxFX0FTX0NBTUVSQSc6IHZpZGVvaW59KQotCi0gIGlmIHZpZGVvb3V0OgotICAgIGV4dHJh
cy51cGRhdGUoewotICAgICAgICAnb3JnLmFwcHNwb3QuYXBwcnRjLlNBVkVfUkVNT1RFX1ZJREVP
X1RPX0ZJTEUnOiB2aWRlb291dCwKLSAgICAgICAgJ29yZy5hcHBzcG90LmFwcHJ0Yy5TQVZFX1JF
TU9URV9WSURFT19UT19GSUxFX1dJRFRIJzogdmlkZW9vdXRfd2lkdGgsCi0gICAgICAgICdvcmcu
YXBwc3BvdC5hcHBydGMuU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQnOiB2aWRlb291
dF9oZWlnaHR9KQotCi0gIHByaW50IGV4dHJhcwotCi0gIGRldmljZS5zdGFydEFjdGl2aXR5KGRh
dGE9J2h0dHBzOi8vYXBwci50YycsCi0gICAgICBhY3Rpb249J2FuZHJvaWQuaW50ZW50LmFjdGlv
bi5WSUVXJywKLSAgICAgIGNvbXBvbmVudD0nb3JnLmFwcHNwb3QuYXBwcnRjLy5Db25uZWN0QWN0
aXZpdHknLCBleHRyYXM9ZXh0cmFzKQotCi0gIHByaW50ICdSdW5uaW5nIGEgY2FsbCBmb3IgJWQg
c2Vjb25kcycgJSBjYWxsX2xlbmd0aAotICBmb3IgXyBpbiB4cmFuZ2UoY2FsbF9sZW5ndGgpOgot
ICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHRp
bWUuc2xlZXAoMSkKLSAgcHJpbnQgJ1xuRW5kaW5nIGNhbGwuJwotCi0gICMgUHJlc3MgYmFjayB0
byBlbmQgdGhlIGNhbGwuIFdpbGwgZW5kIG9uIGJvdGggc2lkZXMuCi0gIGRldmljZS5wcmVzcygn
S0VZQ09ERV9CQUNLJywgTW9ua2V5RGV2aWNlLkRPV05fQU5EX1VQKQotCi0gIGlmIHZpZGVvb3V0
c2F2ZToKLSAgICB0aW1lLnNsZWVwKDIpCi0KLSAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWydh
ZGInLCAnLXMnLCBkZXZuYW1lLCAncHVsbCcsCi0gICAgICAgIHZpZGVvb3V0LCB2aWRlb291dHNh
dmVdKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICBtYWluKCkKLQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9CVUlMRC5nbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJk
X3BhcnR5L2F1dG9iYW5oL0JVSUxELmduCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJk
X3BhcnR5L2F1dG9iYW5oL0JVSUxELmduCShub25leGlzdGVudCkKQEAgLTEsMTMgKzAsMCBAQAot
IyBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0jCi0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0jIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSMgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotIyBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LQotaW1wb3J0KCIvL2J1aWxkL2NvbmZpZy9hbmRyb2lkL3J1bGVzLmduaSIpCi0KLWFuZHJvaWRf
amF2YV9wcmVidWlsdCgiYXV0b2JhbmhfamF2YSIpIHsKLSAgamFyX3BhdGggPSAibGliL2F1dG9i
YW5oLmphciIKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL0xJQ0VOU0UJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRQkobm9uZXhpc3RlbnQp
CkBAIC0xLDE3NyArMCwwIEBACi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFw
YWNoZSBMaWNlbnNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFu
dWFyeSAyMDA0Ci0gICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcv
bGljZW5zZXMvCi0KLSAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElP
TiwgQU5EIERJU1RSSUJVVElPTgotCi0gICAxLiBEZWZpbml0aW9ucy4KLQotICAgICAgIkxpY2Vu
c2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVj
dGlvbiwKLSAgICAgIGFuZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRo
cm91Z2ggOSBvZiB0aGlzIGRvY3VtZW50LgotCi0gICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4g
dGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQotICAgICAgdGhlIGNv
cHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICAiTGVn
YWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQg
YWxsCi0gICAgICBvdGhlciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5
LCBvciBhcmUgdW5kZXIgY29tbW9uCi0gICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZv
ciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAotICAgICAgImNvbnRyb2wiIG1lYW5z
IChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgICBk
aXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFj
dCBvcgotICAgICAgb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50
ICg1MCUpIG9yIG1vcmUgb2YgdGhlCi0gICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkp
IGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotCi0gICAgICAiWW91IiAob3Ig
IllvdXIiKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBl
eGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgotCi0gICAgICAi
U291cmNlIiBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9k
aWZpY2F0aW9ucywKLSAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUg
c291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24KLSAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRp
b24gZmlsZXMuCi0KLSAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1
bHRpbmcgZnJvbSBtZWNoYW5pY2FsCi0gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlv
biBvZiBhIFNvdXJjZSBmb3JtLCBpbmNsdWRpbmcgYnV0Ci0gICAgICBub3QgbGltaXRlZCB0byBj
b21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCi0gICAgICBhbmQg
Y29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgICJXb3JrIiBzaGFsbCBt
ZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBP
YmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRl
ZCBieSBhCi0gICAgICBjb3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0
YWNoZWQgdG8gdGhlIHdvcmsKLSAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBB
cHBlbmRpeCBiZWxvdykuCi0KLSAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFu
eSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QKLSAgICAgIGZvcm0sIHRoYXQgaXMg
YmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAg
ICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90
aGVyIG1vZGlmaWNhdGlvbnMKLSAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2lu
YWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCi0gICAgICBvZiB0aGlzIExp
Y2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1h
aW4KLSAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1l
KSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKLSAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdv
cmtzIHRoZXJlb2YuCi0KLSAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsg
b2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nCi0gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0
aGUgV29yayBhbmQgYW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gICAgICB0byB0aGF0
IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkK
LSAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5
IHRoZSBjb3B5cmlnaHQgb3duZXIKLSAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwg
RW50aXR5IGF1dGhvcml6ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgotICAgICAgdGhlIGNvcHly
aWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0
ZWQiCi0gICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0
ZW4gY29tbXVuaWNhdGlvbiBzZW50Ci0gICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJl
c2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwotICAgICAgY29tbXVuaWNh
dGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lz
dGVtcywKLSAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQg
YnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlCi0gICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ug
b2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKLSAgICAgIGV4Y2x1ZGlu
ZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNl
Ci0gICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAi
Tm90IGEgQ29udHJpYnV0aW9uLiIKLQotICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExp
Y2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIG9uIGJlaGFs
ZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFu
ZAotICAgICAgc3Vic2VxdWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCi0KLSAg
IDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQg
Y29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVi
eSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVz
aXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIGNvcHlyaWdo
dCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAotICAg
ICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRp
c3RyaWJ1dGUgdGhlCi0gICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291
cmNlIG9yIE9iamVjdCBmb3JtLgotCi0gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3Vi
amVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwg
ZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAg
IHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2
b2NhYmxlCi0gICAgICAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBs
aWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwKLSAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2Vs
bCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAotICAgICAgd2hlcmUg
c3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2Fi
bGUKLSAgICAgIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmlu
Z2VkIGJ5IHRoZWlyCi0gICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRp
b24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpCi0gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNo
IHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQotICAgICAgaW5zdGl0
dXRlIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAg
ICAgIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRo
YXQgdGhlIFdvcmsKLSAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4g
dGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0Ci0gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50
IGluZnJpbmdlbWVudCwgdGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCi0gICAgICBncmFudGVkIHRv
IFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKLSAg
ICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLQotICAgNC4gUmVk
aXN0cmlidXRpb24uIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0
aGUKLSAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0s
IHdpdGggb3Igd2l0aG91dAotICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBP
YmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UKLSAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zOgotCi0gICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50
cyBvZiB0aGUgV29yayBvcgotICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRo
aXMgTGljZW5zZTsgYW5kCi0KLSAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQg
ZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICAgICAgICBzdGF0aW5nIHRoYXQg
WW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKLQotICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwg
aW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCi0gICAgICAgICAgdGhh
dCBZb3UgZGlzdHJpYnV0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAot
ICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhl
IFdvcmssCi0gICAgICAgICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVy
dGFpbiB0byBhbnkgcGFydCBvZgotICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQK
LQotICAgICAgKGQpIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFz
IHBhcnQgb2YgaXRzCi0gICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZl
IFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdAotICAgICAgICAgIGluY2x1ZGUgYSByZWFk
YWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAotICAgICAgICAg
IHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRv
IG5vdAotICAgICAgICAgIHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29y
a3MsIGluIGF0IGxlYXN0IG9uZQotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3
aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkCi0gICAgICAgICAgYXMgcGFydCBv
ZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgotICAgICAg
ICAgIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUg
V29ya3M7IG9yLAotICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBE
ZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQKLSAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBh
cnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKLSAgICAgICAgICBvZiB0
aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0g
ICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24g
YXR0cmlidXRpb24KLSAgICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRo
YXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZQotICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVt
IHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAotICAgICAgICAgIHRo
YXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVl
ZAotICAgICAgICAgIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KLQotICAgICAgWW91IG1heSBh
ZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5k
Ci0gICAgICBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1z
IGFuZCBjb25kaXRpb25zCi0gICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1
dGlvbiBvZiBZb3VyIG1vZGlmaWNhdGlvbnMsIG9yCi0gICAgICBmb3IgYW55IHN1Y2ggRGVyaXZh
dGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgIHJlcHJvZHVj
dGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0
aAotICAgICAgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KLQotICAgNS4g
U3VibWlzc2lvbiBvZiBDb250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUg
b3RoZXJ3aXNlLAotICAgICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRl
ZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrCi0gICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29y
IHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBM
aWNlbnNlLCB3aXRob3V0IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCi0gICAg
ICBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNl
ZGUgb3IgbW9kaWZ5Ci0gICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdy
ZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZAotICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRp
bmcgc3VjaCBDb250cmlidXRpb25zLgotCi0gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2Ug
ZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCi0gICAgICBuYW1lcywg
dHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5z
b3IsCi0gICAgICBleGNlcHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFy
eSB1c2UgaW4gZGVzY3JpYmluZyB0aGUKLSAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVw
cm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgotCi0gICA3LiBEaXNjbGFp
bWVyIG9mIFdhcnJhbnR5LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKLSAg
ICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5k
IGVhY2gKLSAgICAgIENvbnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBh
biAiQVMgSVMiIEJBU0lTLAotICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMg
T0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCi0gICAgICBpbXBsaWVkLCBpbmNsdWRpbmcs
IHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwotICAgICAg
b2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBG
T1IgQQotICAgICAgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJs
ZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCi0gICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3Ig
cmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKLSAgICAgIHJpc2tzIGFzc29j
aWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5z
ZS4KLQotICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRl
ciBubyBsZWdhbCB0aGVvcnksCi0gICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWds
aWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKLSAgICAgIHVubGVzcyByZXF1aXJlZCBi
eSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5Ci0gICAgICBu
ZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmli
dXRvciBiZQotICAgICAgbGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBk
aXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLAotICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVu
dGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCi0gICAgICByZXN1bHQg
b2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhl
Ci0gICAgICBXb3JrIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxv
c3Mgb2YgZ29vZHdpbGwsCi0gICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9y
IG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbAotICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1h
Z2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgotICAgICAgaGFzIGJlZW4g
YWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotCi0gICA5LiBBY2Nl
cHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0
aW5nCi0gICAgICB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkg
Y2hvb3NlIHRvIG9mZmVyLAotICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ug
b2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwKLSAgICAgIG9yIG90aGVyIGxpYWJpbGl0
eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCi0gICAgICBM
aWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBh
Y3Qgb25seQotICAgICAgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9u
c2liaWxpdHksIG5vdCBvbiBiZWhhbGYKLSAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwg
YW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwKLSAgICAgIGRlZmVuZCwgYW5kIGhv
bGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQotICAgICAgaW5j
dXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5
IHJlYXNvbgotICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRk
aXRpb25hbCBsaWFiaWxpdHkuCi0KLSAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9MSUNFTlNFLm1kCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRS5tZAkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9MSUNFTlNFLm1kCShub25leGlzdGVudCkKQEAgLTEs
MjEgKzAsMCBAQAotVGhlIE1JVCBMaWNlbnNlIChNSVQpCi0KLUNvcHlyaWdodCAoYykgMjAxNCBD
YW1lcm9uIExvd2VsbCBQYWxtZXIKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl
ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0
d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks
IHRvIGRlYWwKLWluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcg
d2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJn
ZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBv
ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2Fy
ZSBpcwotZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9uczoKLQotVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCi1jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y
dGlvbnMgb2YgdGhlIFNvZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT
IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5D
TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFksCi1GSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5U
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg
TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhF
UiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZS
T00sCi1PVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF
IE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotU09GVFdBUkUuCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3Bh
cnR5L2F1dG9iYW5oL05PVElDRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9i
YW5oL05PVElDRQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFu
aC9OT1RJQ0UJKG5vbmV4aXN0ZW50KQpAQCAtMSwzICswLDAgQEAKLUF1dG9iYWhuQW5kcm9pZAot
Q29weXJpZ2h0IDIwMTEsMjAxMiBUYXZlbmRvIEdtYkguIExpY2Vuc2VkIHVuZGVyIEFwYWNoZSAy
LjAKLVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgVGF2ZW5kbyBH
bWJIIGh0dHA6Ly93d3cudGF2ZW5kby5kZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFu
aC9saWIvYXV0b2JhbmguamFyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5oLmphcgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL2xpYi9hdXRvYmFuaC5qYXIJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5o
Lmphcgkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5
L2F1dG9iYW5oL2xpYi9hdXRvYmFuaC5qYXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10
eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvUkVBRE1FCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRq
dW5pdC9SRUFETUUJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9SRUFETUUJKG5vbmV4aXN0
ZW50KQpAQCAtMSw4ICswLDAgQEAKLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGV4YW1wbGUgSlVu
aXQgdGVzdHMgZm9yIEFuZHJvaWQgQXBwUlRDTW9iaWxlLgotTWFueSBvZiB0aGVzZSB0ZXN0IHV0
aWxpemUgUm9ib2xlY3RyaWMgdG8gbW9jayBBbmRyb2lkIGNsYXNzZXMuCi0KLVRvIGNvbXBpbGU6
Ci1uaW5qYSAtQyBvdXQvRGVidWcgYW5kcm9pZF9qdW5pdF90ZXN0cwotCi1UbyBydW46Ci1vdXQv
RGVidWcvYmluL3J1bl9hbmRyb2lkX2p1bml0X3Rlc3RzCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnRUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1
bml0L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvRGlyZWN0UlRDQ2xpZW50VGVzdC5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJlY3RSVEND
bGllbnRUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBzdGF0aWMg
b3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFz
c2VydC5hc3NlcnRUcnVlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7Ci1p
bXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuYW55OwotaW1wb3J0IHN0
YXRpYyBvcmcubW9ja2l0by5Bcmd1bWVudE1hdGNoZXJzLmlzTm90TnVsbDsKLWltcG9ydCBzdGF0
aWMgb3JnLm1vY2tpdG8uTW9ja2l0by5tb2NrOwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5N
b2NraXRvLnRpbWVvdXQ7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udmVyaWZ5
OwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnZlcmlmeU5vTW9yZUludGVyYWN0
aW9uczsKLQotaW1wb3J0IG9yZy5jaHJvbWl1bS50ZXN0aW5nLmxvY2FsLkxvY2FsUm9ib2xlY3Ry
aWNUZXN0UnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7Ci1pbXBvcnQgb3JnLmp1bml0
LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5yb2Jv
bGVjdHJpYy5hbm5vdGF0aW9uLkNvbmZpZzsKLWltcG9ydCBvcmcucm9ib2xlY3RyaWMuc2hhZG93
cy5TaGFkb3dMb2c7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci0KLS8qKgotICogVGVzdCBmb3IgRGlyZWN0UlRD
Q2xpZW50LiBUZXN0IGlzIHZlcnkgc2ltcGxlIGFuZCBvbmx5IHRlc3RzIHRoZSBvdmVyYWxsIHNh
bml0eSBvZiB0aGUgY2xhc3MKLSAqIGJlaGF2aW91ci4KLSAqLwotQFJ1bldpdGgoTG9jYWxSb2Jv
bGVjdHJpY1Rlc3RSdW5uZXIuY2xhc3MpCi1AQ29uZmlnKG1hbmlmZXN0ID0gQ29uZmlnLk5PTkUp
Ci1wdWJsaWMgY2xhc3MgRGlyZWN0UlRDQ2xpZW50VGVzdCB7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZyBST09NX1VSTCA9ICIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFu
IExPT1BCQUNLID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERVTU1Z
X1NEUF9NSUQgPSAic2RwTWlkIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERVTU1Z
X1NEUCA9ICJzZHAiOwotCi0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNFUlZFUl9XQUlUID0g
MTAwOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBORVRXT1JLX1RJTUVPVVQgPSAxMDAwOwot
Ci0gIHByaXZhdGUgRGlyZWN0UlRDQ2xpZW50IGNsaWVudDsKLSAgcHJpdmF0ZSBEaXJlY3RSVEND
bGllbnQgc2VydmVyOwotCi0gIEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMgY2xpZW50RXZl
bnRzOwotICBBcHBSVENDbGllbnQuU2lnbmFsaW5nRXZlbnRzIHNlcnZlckV2ZW50czsKLQotICBA
QmVmb3JlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAgIFNoYWRvd0xvZy5zdHJlYW0gPSBT
eXN0ZW0ub3V0OwotCi0gICAgY2xpZW50RXZlbnRzID0gbW9jayhBcHBSVENDbGllbnQuU2lnbmFs
aW5nRXZlbnRzLmNsYXNzKTsKLSAgICBzZXJ2ZXJFdmVudHMgPSBtb2NrKEFwcFJUQ0NsaWVudC5T
aWduYWxpbmdFdmVudHMuY2xhc3MpOwotCi0gICAgY2xpZW50ID0gbmV3IERpcmVjdFJUQ0NsaWVu
dChjbGllbnRFdmVudHMpOwotICAgIHNlcnZlciA9IG5ldyBEaXJlY3RSVENDbGllbnQoc2VydmVy
RXZlbnRzKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZElwUGF0dGVy
bigpIHsKLSAgICAvLyBTdHJpbmdzIHRoYXQgc2hvdWxkIG1hdGNoIHRoZSBwYXR0ZXJuLgotICAg
IC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBmaW5hbCBTdHJpbmdbXSBpcEFkZHJlc3NlcyA9IG5l
dyBTdHJpbmdbXSB7Ci0gICAgICAgICIwLjAuMC4wIiwKLSAgICAgICAgIjEyNy4wLjAuMSIsCi0g
ICAgICAgICIxOTIuMTY4LjAuMSIsCi0gICAgICAgICIwLjAuMC4wOjg4ODgiLAotICAgICAgICAi
MTI3LjAuMC4xOjg4ODgiLAotICAgICAgICAiMTkyLjE2OC4wLjE6ODg4OCIsCi0gICAgICAgICI6
OiIsCi0gICAgICAgICI6OjEiLAotICAgICAgICAiMjAwMTowZGI4Ojg1YTM6MDAwMDowMDAwOjhh
MmU6MDM3MDo3OTQ2IiwKLSAgICAgICAgIls6Ol0iLAotICAgICAgICAiWzo6MV0iLAotICAgICAg
ICAiWzIwMDE6MGRiODo4NWEzOjAwMDA6MDAwMDo4YTJlOjAzNzA6Nzk0Nl0iLAotICAgICAgICAi
Wzo6XTo4ODg4IiwKLSAgICAgICAgIls6OjFdOjg4ODgiLAotICAgICAgICAiWzIwMDE6MGRiODo4
NWEzOjAwMDA6MDAwMDo4YTJlOjAzNzA6Nzk0Nl06ODg4OCIKLSAgICB9OwotICAgIC8vIGNsYW5n
LWZvcm1hdCBvbgotCi0gICAgZm9yIChTdHJpbmcgaXAgOiBpcEFkZHJlc3NlcykgewotICAgICAg
YXNzZXJ0VHJ1ZShpcCArICIgZGlkbid0IG1hdGNoIElQX1BBVFRFUk4gZXZlbiB0aG91Z2ggaXQg
c2hvdWxkLiIsCi0gICAgICAgICAgRGlyZWN0UlRDQ2xpZW50LklQX1BBVFRFUk4ubWF0Y2hlcihp
cCkubWF0Y2hlcygpKTsKLSAgICB9Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
SW52YWxpZElwUGF0dGVybigpIHsKLSAgICAvLyBTdHJpbmdzIHRoYXQgc2hvdWxkbid0IG1hdGNo
IHRoZSBwYXR0ZXJuLgotICAgIC8vIGNsYW5nLWZvcm1hdCBvZmYKLSAgICBmaW5hbCBTdHJpbmdb
XSBpbnZhbGlkSXBBZGRyZXNzZXMgPSBuZXcgU3RyaW5nW10gewotICAgICAgICAiSGVsbG8sIFdv
cmxkISIsCi0gICAgICAgICJhYWFhIiwKLSAgICAgICAgIjExMTEiLAotICAgICAgICAiW2hlbGxv
IHdvcmxkXSIsCi0gICAgICAgICJoZWxsbzp3b3JsZCIKLSAgICB9OwotICAgIC8vIGNsYW5nLWZv
cm1hdCBvbgotCi0gICAgZm9yIChTdHJpbmcgaW52YWxpZElwIDogaW52YWxpZElwQWRkcmVzc2Vz
KSB7Ci0gICAgICBhc3NlcnRGYWxzZShpbnZhbGlkSXAgKyAiIG1hdGNoZWQgSVBfUEFUVEVSTiBl
dmVuIHRob3VnaCBpdCBzaG91bGRuJ3QuIiwKLSAgICAgICAgICBEaXJlY3RSVENDbGllbnQuSVBf
UEFUVEVSTi5tYXRjaGVyKGludmFsaWRJcCkubWF0Y2hlcygpKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBUT0RPKHNha2FsKTogUmVwbGFjZSBpc05vdE51bGwoY2xhc3MpIHdpdGggaXNOb3ROdWxsKCkg
b25jZSBKYXZhIDggaXMgdXNlZC4KLSAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikK
LSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdERpcmVjdFJUQ0NsaWVudCgpIHsKLSAgICBzZXJ2
ZXIuY29ubmVjdFRvUm9vbShuZXcgQXBwUlRDQ2xpZW50LlJvb21Db25uZWN0aW9uUGFyYW1ldGVy
cyhST09NX1VSTCwgIjAuMC4wLjAiLCBMT09QQkFDSykpOwotICAgIHRyeSB7Ci0gICAgICBUaHJl
YWQuc2xlZXAoU0VSVkVSX1dBSVQpOwotICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9u
IGUpIHsKLSAgICAgIGZhaWwoZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgICBjbGllbnQuY29u
bmVjdFRvUm9vbSgKLSAgICAgICAgbmV3IEFwcFJUQ0NsaWVudC5Sb29tQ29ubmVjdGlvblBhcmFt
ZXRlcnMoUk9PTV9VUkwsICIxMjcuMC4wLjEiLCBMT09QQkFDSykpOwotICAgIHZlcmlmeShzZXJ2
ZXJFdmVudHMsIHRpbWVvdXQoTkVUV09SS19USU1FT1VUKSkKLSAgICAgICAgLm9uQ29ubmVjdGVk
VG9Sb29tKGFueShBcHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVycy5jbGFzcykpOwotCi0g
ICAgU2Vzc2lvbkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbihT
ZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5PRkZFUiwgRFVNTVlfU0RQKTsKLSAgICBzZXJ2ZXIuc2Vu
ZE9mZmVyU2RwKG9mZmVyU2RwKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KE5F
VFdPUktfVElNRU9VVCkpCi0gICAgICAgIC5vbkNvbm5lY3RlZFRvUm9vbShhbnkoQXBwUlRDQ2xp
ZW50LlNpZ25hbGluZ1BhcmFtZXRlcnMuY2xhc3MpKTsKLQotICAgIFNlc3Npb25EZXNjcmlwdGlv
biBhbnN3ZXJTZHAgPQotICAgICAgICBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKFNlc3Npb25EZXNj
cmlwdGlvbi5UeXBlLkFOU1dFUiwgRFVNTVlfU0RQKTsKLSAgICBjbGllbnQuc2VuZEFuc3dlclNk
cChhbnN3ZXJTZHApOwotICAgIHZlcmlmeShzZXJ2ZXJFdmVudHMsIHRpbWVvdXQoTkVUV09SS19U
SU1FT1VUKSkKLSAgICAgICAgLm9uUmVtb3RlRGVzY3JpcHRpb24oaXNOb3ROdWxsKFNlc3Npb25E
ZXNjcmlwdGlvbi5jbGFzcykpOwotCi0gICAgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA9IG5ldyBJ
Y2VDYW5kaWRhdGUoRFVNTVlfU0RQX01JRCwgMCwgRFVNTVlfU0RQKTsKLSAgICBzZXJ2ZXIuc2Vu
ZExvY2FsSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgdmVyaWZ5KGNsaWVudEV2ZW50cywg
dGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25SZW1vdGVJY2VDYW5kaWRhdGUo
aXNOb3ROdWxsKEljZUNhbmRpZGF0ZS5jbGFzcykpOwotCi0gICAgY2xpZW50LnNlbmRMb2NhbElj
ZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgIHZlcmlmeShzZXJ2ZXJFdmVudHMsIHRpbWVvdXQo
TkVUV09SS19USU1FT1VUKSkKLSAgICAgICAgLm9uUmVtb3RlSWNlQ2FuZGlkYXRlKGlzTm90TnVs
bChJY2VDYW5kaWRhdGUuY2xhc3MpKTsKLQotICAgIGNsaWVudC5kaXNjb25uZWN0RnJvbVJvb20o
KTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KE5FVFdPUktfVElNRU9VVCkpLm9u
Q2hhbm5lbENsb3NlKCk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JL
X1RJTUVPVVQpKS5vbkNoYW5uZWxDbG9zZSgpOwotCi0gICAgdmVyaWZ5Tm9Nb3JlSW50ZXJhY3Rp
b25zKGNsaWVudEV2ZW50cyk7Ci0gICAgdmVyaWZ5Tm9Nb3JlSW50ZXJhY3Rpb25zKHNlcnZlckV2
ZW50cyk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1RDUENo
YW5uZWxDbGllbnRUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYy9vcmcvYXBwc3Bv
dC9hcHBydGMvVENQQ2hhbm5lbENsaWVudFRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGp1bml0L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENsaWVudFRlc3QuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDIwMyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRo
ZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0
LmZhaWw7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udGltZW91dDsKLWltcG9y
dCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5t
b2NraXRvLk1vY2tpdG8udmVyaWZ5Tm9Nb3JlSW50ZXJhY3Rpb25zOwotCi1pbXBvcnQgb3JnLmNo
cm9taXVtLmJhc2UudGVzdC51dGlsLkRpc2FibGVkVGVzdDsKLWltcG9ydCBvcmcuY2hyb21pdW0u
dGVzdGluZy5sb2NhbC5Mb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lcjsKLWltcG9ydCBvcmcuanVu
aXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVz
dDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLm1vY2tpdG8u
TW9jazsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NraXRvQW5ub3RhdGlvbnM7Ci1pbXBvcnQgb3Jn
LnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotaW1wb3J0IG9yZy5yb2JvbGVjdHJpYy5z
aGFkb3dzLlNoYWRvd0xvZzsKLQotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9y
U2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQg
amF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLUBSdW5XaXRoKExvY2FsUm9ib2xlY3Ry
aWNUZXN0UnVubmVyLmNsYXNzKQotQENvbmZpZyhtYW5pZmVzdCA9IENvbmZpZy5OT05FKQotcHVi
bGljIGNsYXNzIFRDUENoYW5uZWxDbGllbnRUZXN0IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IFBPUlQgPSA4ODg4OwotICAvKioKLSAgICogSG93IGxvbmcgd2Ugd2FpdCBiZWZvcmUgdHJ5
aW5nIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlci4gQ2hvc2VuIHF1aXRlIGFyYml0cmFyaWx5IGFu
ZAotICAgKiBjb3VsZCBiZSBtYWRlIHNtYWxsZXIgaWYgbmVlZCBiZS4KLSAgICovCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBTRVJWRVJfV0FJVCA9IDEwOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgQ09OTkVDVF9USU1FT1VUID0gMTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgU0VORF9USU1FT1VUID0gMTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRElTQ09O
TkVDVF9USU1FT1VUID0gMTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVEVSTUlOQVRJ
T05fVElNRU9VVCA9IDEwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX01F
U1NBR0VfU0VSVkVSID0gIkhlbGxvLCBTZXJ2ZXIhIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFRFU1RfTUVTU0FHRV9DTElFTlQgPSAiSGVsbG8sIENsaWVudCEiOwotCi0gIEBNb2Nr
IFRDUENoYW5uZWxDbGllbnQuVENQQ2hhbm5lbEV2ZW50cyBzZXJ2ZXJFdmVudHM7Ci0gIEBNb2Nr
IFRDUENoYW5uZWxDbGllbnQuVENQQ2hhbm5lbEV2ZW50cyBjbGllbnRFdmVudHM7Ci0KLSAgcHJp
dmF0ZSBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3I7Ci0gIHByaXZhdGUgVENQQ2hhbm5lbENsaWVu
dCBzZXJ2ZXI7Ci0gIHByaXZhdGUgVENQQ2hhbm5lbENsaWVudCBjbGllbnQ7Ci0KLSAgQEJlZm9y
ZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBTaGFkb3dMb2cuc3RyZWFtID0gU3lzdGVt
Lm91dDsKLQotICAgIE1vY2tpdG9Bbm5vdGF0aW9ucy5pbml0TW9ja3ModGhpcyk7Ci0KLSAgICBl
eGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpOwotICB9Ci0KLSAg
QEFmdGVyCi0gIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIHZlcmlmeU5vTW9yZUV2ZW50
cygpOwotCi0gICAgZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNsaWVudC5kaXNjb25uZWN0
KCk7Ci0gICAgICAgIHNlcnZlci5kaXNjb25uZWN0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAg
ICAvLyBTdG9wIHRoZSBleGVjdXRvciB0aHJlYWQKLSAgICBleGVjdXRvci5zaHV0ZG93bigpOwot
ICAgIHRyeSB7Ci0gICAgICBleGVjdXRvci5hd2FpdFRlcm1pbmF0aW9uKFRFUk1JTkFUSU9OX1RJ
TUVPVVQsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRF
eGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0K
LSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENvbm5lY3RJUHY0KCkgewotICAgIHNldFVwSVB2
NFNlcnZlcigpOwotICAgIHRyeSB7Ci0gICAgICBUaHJlYWQuc2xlZXAoU0VSVkVSX1dBSVQpOwot
ICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgIGZhaWwoZS5nZXRN
ZXNzYWdlKCkpOwotICAgIH0KLSAgICBzZXRVcElQdjRDbGllbnQoKTsKLQotICAgIHZlcmlmeShz
ZXJ2ZXJFdmVudHMsIHRpbWVvdXQoQ09OTkVDVF9USU1FT1VUKSkub25UQ1BDb25uZWN0ZWQodHJ1
ZSk7Ci0gICAgdmVyaWZ5KGNsaWVudEV2ZW50cywgdGltZW91dChDT05ORUNUX1RJTUVPVVQpKS5v
blRDUENvbm5lY3RlZChmYWxzZSk7Ci0gIH0KLQotICAvLyBAVGVzdAotICAvLyBEaXNhYmxlZCBi
ZWNhdXNlIGl0IGZhaWxzIHdoZW4gSVB2NiBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBib3QuCi0g
IC8vIFRPRE8oZWhtYWxkb25hZG8pOiBFbmFibGUgd2hlbiBidWdzLndlYnJ0Yy5vcmcvNjQzNyBp
cyBmaXhlZC4KLSAgQERpc2FibGVkVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29ubmVjdElQdjYo
KSB7Ci0gICAgc2V0VXBJUHY2U2VydmVyKCk7Ci0gICAgdHJ5IHsKLSAgICAgIFRocmVhZC5zbGVl
cChTRVJWRVJfV0FJVCk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewot
ICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHNldFVwSVB2NkNsaWVudCgp
OwotCi0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChDT05ORUNUX1RJTUVPVVQpKS5v
blRDUENvbm5lY3RlZCh0cnVlKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KENP
Tk5FQ1RfVElNRU9VVCkpLm9uVENQQ29ubmVjdGVkKGZhbHNlKTsKLSAgfQotCi0gIEBUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RTZW5kRGF0YSgpIHsKLSAgICB0ZXN0Q29ubmVjdElQdjQoKTsKLQot
ICAgIGV4ZWN1dGVBbmRXYWl0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjbGllbnQuc2VuZChURVNUX01FU1NBR0Vf
U0VSVkVSKTsKLSAgICAgICAgc2VydmVyLnNlbmQoVEVTVF9NRVNTQUdFX0NMSUVOVCk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0KLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KFNFTkRfVElN
RU9VVCkpLm9uVENQTWVzc2FnZShURVNUX01FU1NBR0VfU0VSVkVSKTsKLSAgICB2ZXJpZnkoY2xp
ZW50RXZlbnRzLCB0aW1lb3V0KFNFTkRfVElNRU9VVCkpLm9uVENQTWVzc2FnZShURVNUX01FU1NB
R0VfQ0xJRU5UKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0
U2VydmVyKCkgewotICAgIHRlc3RDb25uZWN0SVB2NCgpOwotICAgIGV4ZWN1dGVBbmRXYWl0KG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBzZXJ2ZXIuZGlzY29ubmVjdCgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAg
dmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVPVVQpKS5vblRDUENs
b3NlKCk7Ci0gICAgdmVyaWZ5KGNsaWVudEV2ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVP
VVQpKS5vblRDUENsb3NlKCk7Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RGlz
Y29ubmVjdENsaWVudCgpIHsKLSAgICB0ZXN0Q29ubmVjdElQdjQoKTsKLSAgICBleGVjdXRlQW5k
V2FpdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgY2xpZW50LmRpc2Nvbm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsK
LQotICAgIHZlcmlmeShzZXJ2ZXJFdmVudHMsIHRpbWVvdXQoRElTQ09OTkVDVF9USU1FT1VUKSku
b25UQ1BDbG9zZSgpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoRElTQ09OTkVD
VF9USU1FT1VUKSkub25UQ1BDbG9zZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFVwSVB2
NFNlcnZlcigpIHsKLSAgICBzZXRVcFNlcnZlcigiMC4wLjAuMCIsIFBPUlQpOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHNldFVwSVB2NENsaWVudCgpIHsKLSAgICBzZXRVcENsaWVudCgiMTI3LjAu
MC4xIiwgUE9SVCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY2U2VydmVyKCkgewot
ICAgIHNldFVwU2VydmVyKCI6OiIsIFBPUlQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFVw
SVB2NkNsaWVudCgpIHsKLSAgICBzZXRVcENsaWVudCgiOjoxIiwgUE9SVCk7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgc2V0VXBTZXJ2ZXIoU3RyaW5nIGlwLCBpbnQgcG9ydCkgewotICAgIHNlcnZl
ciA9IG5ldyBUQ1BDaGFubmVsQ2xpZW50KGV4ZWN1dG9yLCBzZXJ2ZXJFdmVudHMsIGlwLCBwb3J0
KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRVcENsaWVudChTdHJpbmcgaXAsIGludCBwb3J0
KSB7Ci0gICAgY2xpZW50ID0gbmV3IFRDUENoYW5uZWxDbGllbnQoZXhlY3V0b3IsIGNsaWVudEV2
ZW50cywgaXAsIHBvcnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIFZlcmlmaWVzIG5vIG1vcmUgc2Vy
dmVyIG9yIGNsaWVudCBldmVudHMgaGF2ZSBiZWVuIGlzc3VlZAotICAgKi8KLSAgcHJpdmF0ZSB2
b2lkIHZlcmlmeU5vTW9yZUV2ZW50cygpIHsKLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMo
c2VydmVyRXZlbnRzKTsKLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMoY2xpZW50RXZlbnRz
KTsKLSAgfQotCi0gIC8qKgotICAgKiBRdWV1ZXMgcnVubmFibGUgdG8gYmUgcnVuIGFuZCB3YWl0
cyBmb3IgaXQgdG8gYmUgZXhlY3V0ZWQgYnkgdGhlIGV4ZWN1dG9yIHRocmVhZAotICAgKi8KLSAg
cHVibGljIHZvaWQgZXhlY3V0ZUFuZFdhaXQoUnVubmFibGUgcnVubmFibGUpIHsKLSAgICB0cnkg
ewotICAgICAgZXhlY3V0b3Iuc3VibWl0KHJ1bm5hYmxlKS5nZXQoKTsKLSAgICB9IGNhdGNoIChF
eGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci19
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMv
QW5kcm9pZE1hbmlmZXN0LnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL0FuZHJvaWRN
YW5pZmVzdC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9u
PSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6
Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBwYWNrYWdlPSJvcmcu
YXBwc3BvdC5hcHBydGMudGVzdCIKLSAgICBhbmRyb2lkOnZlcnNpb25Db2RlPSIxIgotICAgIGFu
ZHJvaWQ6dmVyc2lvbk5hbWU9IjEuMCIgPgotCi0gICAgPHVzZXMtc2RrIGFuZHJvaWQ6bWluU2Rr
VmVyc2lvbj0iMTMiIGFuZHJvaWQ6dGFyZ2V0U2RrVmVyc2lvbj0iMjEiIC8+Ci0KLSAgICA8aW5z
dHJ1bWVudGF0aW9uCi0gICAgICAgIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0Lkluc3RydW1l
bnRhdGlvblRlc3RSdW5uZXIiCi0gICAgICAgIGFuZHJvaWQ6dGFyZ2V0UGFja2FnZT0ib3JnLmFw
cHNwb3QuYXBwcnRjIiAvPgotCi0gICAgPGFwcGxpY2F0aW9uPgotICAgICAgICA8dXNlcy1saWJy
YXJ5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC50ZXN0LnJ1bm5lciIgLz4KLSAgICA8L2FwcGxpY2F0
aW9uPgotCi08L21hbmlmZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0
ZXN0cy9SRUFETUUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL1JFQURNRQkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZHRlc3RzL1JFQURNRQkobm9uZXhpc3RlbnQpCkBAIC0xLDE0ICswLDAgQEAKLVRoaXMg
ZGlyZWN0b3J5IGNvbnRhaW5zIGFuIGV4YW1wbGUgdW5pdCB0ZXN0IGZvciBBbmRyb2lkIEFwcFJU
Q01vYmlsZS4KLQotRXhhbXBsZSBvZiBidWlsZGluZyAmIHVzaW5nIHRoZSBhcHA6Ci0KLS0gQnVp
bGQgQW5kcm9pZCBBcHBSVENNb2JpbGUgYW5kIEFwcFJUQ01vYmlsZSB1bml0IHRlc3Q6Ci1jZCA8
cGF0aC90by93ZWJydGM+L3NyYwotbmluamEgLUMgb3V0L0RlYnVnIEFwcFJUQ01vYmlsZVRlc3QK
LQotLSBJbnN0YWxsIEFwcFJUQ01vYmlsZSBhbmQgQXBwUlRDTW9iaWxlVGVzdDoKLWFkYiBpbnN0
YWxsIC1yIG91dC9EZWJ1Zy9hcGtzL0FwcFJUQ01vYmlsZS5hcGsKLWFkYiBpbnN0YWxsIC1yIG91
dC9EZWJ1Zy9hcGtzL0FwcFJUQ01vYmlsZVRlc3QuYXBrCi0KLS0gUnVuIHVuaXQgdGVzdHM6Ci1h
ZGIgc2hlbGwgYW0gaW5zdHJ1bWVudCAtdyBvcmcuYXBwc3BvdC5hcHBydGMudGVzdC9hbmRyb2lk
LnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdFJ1bm5lcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0cy9hbnQucHJvcGVydGllcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvYW50
LnByb3BlcnRpZXMJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9hbnQucHJvcGVydGllcwko
bm9uZXhpc3RlbnQpCkBAIC0xLDE4ICswLDAgQEAKLSMgVGhpcyBmaWxlIGlzIHVzZWQgdG8gb3Zl
cnJpZGUgZGVmYXVsdCB2YWx1ZXMgdXNlZCBieSB0aGUgQW50IGJ1aWxkIHN5c3RlbS4KLSMKLSMg
VGhpcyBmaWxlIG11c3QgYmUgY2hlY2tlZCBpbnRvIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zLCBh
cyBpdCBpcwotIyBpbnRlZ3JhbCB0byB0aGUgYnVpbGQgc3lzdGVtIG9mIHlvdXIgcHJvamVjdC4K
LQotIyBUaGlzIGZpbGUgaXMgb25seSB1c2VkIGJ5IHRoZSBBbnQgc2NyaXB0LgotCi0jIFlvdSBj
YW4gdXNlIHRoaXMgdG8gb3ZlcnJpZGUgZGVmYXVsdCB2YWx1ZXMgc3VjaCBhcwotIyAgJ3NvdXJj
ZS5kaXInIGZvciB0aGUgbG9jYXRpb24gb2YgeW91ciBqYXZhIHNvdXJjZSBmb2xkZXIgYW5kCi0j
ICAnb3V0LmRpcicgZm9yIHRoZSBsb2NhdGlvbiBvZiB5b3VyIG91dHB1dCBmb2xkZXIuCi0KLSMg
WW91IGNhbiBhbHNvIHVzZSBpdCBkZWZpbmUgaG93IHRoZSByZWxlYXNlIGJ1aWxkcyBhcmUgc2ln
bmVkIGJ5IGRlY2xhcmluZwotIyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6Ci0jICAna2V5LnN0
b3JlJyBmb3IgdGhlIGxvY2F0aW9uIG9mIHlvdXIga2V5c3RvcmUgYW5kCi0jICAna2V5LmFsaWFz
JyBmb3IgdGhlIG5hbWUgb2YgdGhlIGtleSB0byB1c2UuCi0jIFRoZSBwYXNzd29yZCB3aWxsIGJl
IGFza2VkIGR1cmluZyB0aGUgYnVpbGQgd2hlbiB5b3UgdXNlIHRoZSAncmVsZWFzZScgdGFyZ2V0
LgotCi10ZXN0ZWQucHJvamVjdC5kaXI9Li4vYW5kcm9pZApJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL2J1aWxkLnht
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvYnVpbGQueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
dGVzdHMvYnVpbGQueG1sCShub25leGlzdGVudCkKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0IG5hbWU9IkFwcFJUQ01vYmls
ZVRlc3QiIGRlZmF1bHQ9ImhlbHAiPgotCi0gICAgPCEtLSBUaGUgbG9jYWwucHJvcGVydGllcyBm
aWxlIGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZWQgYnkgdGhlICdhbmRyb2lkJyB0b29sLgotICAgICAg
ICAgSXQgY29udGFpbnMgdGhlIHBhdGggdG8gdGhlIFNESy4gSXQgc2hvdWxkICpOT1QqIGJlIGNo
ZWNrZWQgaW50bwotICAgICAgICAgVmVyc2lvbiBDb250cm9sIFN5c3RlbXMuIC0tPgotICAgIDxw
cm9wZXJ0eSBmaWxlPSJsb2NhbC5wcm9wZXJ0aWVzIiAvPgotCi0gICAgPCEtLSBUaGUgYW50LnBy
b3BlcnRpZXMgZmlsZSBjYW4gYmUgY3JlYXRlZCBieSB5b3UuIEl0IGlzIG9ubHkgZWRpdGVkIGJ5
IHRoZQotICAgICAgICAgJ2FuZHJvaWQnIHRvb2wgdG8gYWRkIHByb3BlcnRpZXMgdG8gaXQuCi0g
ICAgICAgICBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGFuZ2Ugc29tZSBBbnQgc3BlY2lmaWMgYnVp
bGQgcHJvcGVydGllcy4KLSAgICAgICAgIEhlcmUgYXJlIHNvbWUgcHJvcGVydGllcyB5b3UgbWF5
IHdhbnQgdG8gY2hhbmdlL3VwZGF0ZToKLQotICAgICAgICAgc291cmNlLmRpcgotICAgICAgICAg
ICAgIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5LiBEZWZhdWx0IGlzICdzcmMnLgot
ICAgICAgICAgb3V0LmRpcgotICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBvdXRwdXQgZGly
ZWN0b3J5LiBEZWZhdWx0IGlzICdiaW4nLgotCi0gICAgICAgICBGb3Igb3RoZXIgb3ZlcnJpZGFi
bGUgcHJvcGVydGllcywgbG9vayBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBydWxlcwotICAgICAg
ICAgZmlsZXMgaW4gdGhlIFNESywgYXQgdG9vbHMvYW50L2J1aWxkLnhtbAotCi0gICAgICAgICBQ
cm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIFNESyBsb2NhdGlvbiBvciB0aGUgcHJvamVjdCB0YXJn
ZXQgc2hvdWxkCi0gICAgICAgICBiZSB1cGRhdGVkIHVzaW5nIHRoZSAnYW5kcm9pZCcgdG9vbCB3
aXRoIHRoZSAndXBkYXRlJyBhY3Rpb24uCi0KLSAgICAgICAgIFRoaXMgZmlsZSBpcyBhbiBpbnRl
Z3JhbCBwYXJ0IG9mIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHlvdXIKLSAgICAgICAgIGFwcGxpY2F0
aW9uIGFuZCBzaG91bGQgYmUgY2hlY2tlZCBpbnRvIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zLgot
Ci0gICAgICAgICAtLT4KLSAgICA8cHJvcGVydHkgZmlsZT0iYW50LnByb3BlcnRpZXMiIC8+Ci0K
LSAgICA8IS0tIGlmIHNkay5kaXIgd2FzIG5vdCBzZXQgZnJvbSBvbmUgb2YgdGhlIHByb3BlcnR5
IGZpbGUsIHRoZW4KLSAgICAgICAgIGdldCBpdCBmcm9tIHRoZSBBTkRST0lEX0hPTUUgZW52IHZh
ci4KLSAgICAgICAgIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB3ZSBsb2FkIHByb2plY3QucHJv
cGVydGllcyBzaW5jZQotICAgICAgICAgdGhlIHByb2d1YXJkIGNvbmZpZyBjYW4gdXNlIHNkay5k
aXIgLS0+Ci0gICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJlbnYiIC8+Ci0gICAgPGNvbmRpdGlv
biBwcm9wZXJ0eT0ic2RrLmRpciIgdmFsdWU9IiR7ZW52LkFORFJPSURfU0RLX1JPT1R9Ij4KLSAg
ICAgICAgPGlzc2V0IHByb3BlcnR5PSJlbnYuQU5EUk9JRF9TREtfUk9PVCIgLz4KLSAgICA8L2Nv
bmRpdGlvbj4KLQotICAgIDwhLS0gVGhlIHByb2plY3QucHJvcGVydGllcyBmaWxlIGlzIGNyZWF0
ZWQgYW5kIHVwZGF0ZWQgYnkgdGhlICdhbmRyb2lkJwotICAgICAgICAgdG9vbCwgYXMgd2VsbCBh
cyBBRFQuCi0KLSAgICAgICAgIFRoaXMgY29udGFpbnMgcHJvamVjdCBzcGVjaWZpYyBwcm9wZXJ0
aWVzIHN1Y2ggYXMgcHJvamVjdCB0YXJnZXQsIGFuZCBsaWJyYXJ5Ci0gICAgICAgICBkZXBlbmRl
bmNpZXMuIExvd2VyIGxldmVsIGJ1aWxkIHByb3BlcnRpZXMgYXJlIHN0b3JlZCBpbiBhbnQucHJv
cGVydGllcwotICAgICAgICAgKG9yIGluIC5jbGFzc3BhdGggZm9yIEVjbGlwc2UgcHJvamVjdHMp
LgotCi0gICAgICAgICBUaGlzIGZpbGUgaXMgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgYnVpbGQg
c3lzdGVtIGZvciB5b3VyCi0gICAgICAgICBhcHBsaWNhdGlvbiBhbmQgc2hvdWxkIGJlIGNoZWNr
ZWQgaW50byBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4gLS0+Ci0gICAgPGxvYWRwcm9wZXJ0aWVz
IHNyY0ZpbGU9InByb2plY3QucHJvcGVydGllcyIgLz4KLQotICAgIDwhLS0gcXVpY2sgY2hlY2sg
b24gc2RrLmRpciAtLT4KLSAgICA8ZmFpbAotICAgICAgICAgICAgbWVzc2FnZT0ic2RrLmRpciBp
cyBtaXNzaW5nLiBNYWtlIHN1cmUgdG8gZ2VuZXJhdGUgbG9jYWwucHJvcGVydGllcyB1c2luZyAn
YW5kcm9pZCB1cGRhdGUgcHJvamVjdCcgb3IgdG8gaW5qZWN0IGl0IHRocm91Z2ggdGhlIEFORFJP
SURfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4iCi0gICAgICAgICAgICB1bmxlc3M9InNkay5k
aXIiCi0gICAgLz4KLQotICAgIDwhLS0KLSAgICAgICAgSW1wb3J0IHBlciBwcm9qZWN0IGN1c3Rv
bSBidWlsZCBydWxlcyBpZiBwcmVzZW50IGF0IHRoZSByb290IG9mIHRoZSBwcm9qZWN0LgotICAg
ICAgICBUaGlzIGlzIHRoZSBwbGFjZSB0byBwdXQgY3VzdG9tIGludGVybWVkaWFyeSB0YXJnZXRz
IHN1Y2ggYXM6Ci0gICAgICAgICAgICAtcHJlLWJ1aWxkCi0gICAgICAgICAgICAtcHJlLWNvbXBp
bGUKLSAgICAgICAgICAgIC1wb3N0LWNvbXBpbGUgKFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9y
IGNvZGUgb2JmdXNjYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxlZCBj
b2RlIGxvY2F0aW9uOiAke291dC5jbGFzc2VzLmFic29sdXRlLmRpcn0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgaW4gcGxhY2UsIG92ZXJyaWRlICR7b3V0
LmRleC5pbnB1dC5hYnNvbHV0ZS5kaXJ9KQotICAgICAgICAgICAgLXBvc3QtcGFja2FnZQotICAg
ICAgICAgICAgLXBvc3QtYnVpbGQKLSAgICAgICAgICAgIC1wcmUtY2xlYW4KLSAgICAtLT4KLSAg
ICA8aW1wb3J0IGZpbGU9ImN1c3RvbV9ydWxlcy54bWwiIG9wdGlvbmFsPSJ0cnVlIiAvPgotCi0g
ICAgPCEtLSBJbXBvcnQgdGhlIGFjdHVhbCBidWlsZCBmaWxlLgotCi0gICAgICAgICBUbyBjdXN0
b21pemUgZXhpc3RpbmcgdGFyZ2V0cywgdGhlcmUgYXJlIHR3byBvcHRpb25zOgotICAgICAgICAg
LSBDdXN0b21pemUgb25seSBvbmUgdGFyZ2V0OgotICAgICAgICAgICAgIC0gY29weS9wYXN0ZSB0
aGUgdGFyZ2V0IGludG8gdGhpcyBmaWxlLCAqYmVmb3JlKiB0aGUKLSAgICAgICAgICAgICAgIDxp
bXBvcnQ+IHRhc2suCi0gICAgICAgICAgICAgLSBjdXN0b21pemUgaXQgdG8geW91ciBuZWVkcy4K
LSAgICAgICAgIC0gQ3VzdG9taXplIHRoZSB3aG9sZSBjb250ZW50IG9mIGJ1aWxkLnhtbAotICAg
ICAgICAgICAgIC0gY29weS9wYXN0ZSB0aGUgY29udGVudCBvZiB0aGUgcnVsZXMgZmlsZXMgKG1p
bnVzIHRoZSB0b3Agbm9kZSkKLSAgICAgICAgICAgICAgIGludG8gdGhpcyBmaWxlLCByZXBsYWNp
bmcgdGhlIDxpbXBvcnQ+IHRhc2suCi0gICAgICAgICAgICAgLSBjdXN0b21pemUgdG8geW91ciBu
ZWVkcy4KLQotICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioKLSAgICAgICAgICoqKioq
KiBJTVBPUlRBTlQgKioqKioqCi0gICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKgotICAg
ICAgICAgSW4gYWxsIGNhc2VzIHlvdSBtdXN0IHVwZGF0ZSB0aGUgdmFsdWUgb2YgdmVyc2lvbi10
YWcgYmVsb3cgdG8gcmVhZCAnY3VzdG9tJyBpbnN0ZWFkIG9mIGFuIGludGVnZXIsCi0gICAgICAg
ICBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgeW91ciBmaWxlIGJlIG92ZXJyaWRkZW4gYnkgdG9v
bHMgc3VjaCBhcyAiYW5kcm9pZCB1cGRhdGUgcHJvamVjdCIKLSAgICAtLT4KLSAgICA8IS0tIHZl
cnNpb24tdGFnOiAxIC0tPgotICAgIDxpbXBvcnQgZmlsZT0iJHtzZGsuZGlyfS90b29scy9hbnQv
YnVpbGQueG1sIiAvPgotCi08L3Byb2plY3Q+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvcHJvamVjdC5wcm9wZXJ0
aWVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9wcm9qZWN0LnByb3BlcnRpZXMJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0cy9wcm9qZWN0LnByb3BlcnRpZXMJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
NiArMCwwIEBACi0jIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBBbmRy
b2lkIFRvb2xzLgotIyBEbyBub3QgbW9kaWZ5IHRoaXMgZmlsZSAtLSBZT1VSIENIQU5HRVMgV0lM
TCBCRSBFUkFTRUQhCi0jCi0jIFRoaXMgZmlsZSBtdXN0IGJlIGNoZWNrZWQgaW4gVmVyc2lvbiBD
b250cm9sIFN5c3RlbXMuCi0jCi0jIFRvIGN1c3RvbWl6ZSBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhl
IEFudCBidWlsZCBzeXN0ZW0gZWRpdAotIyAiYW50LnByb3BlcnRpZXMiLCBhbmQgb3ZlcnJpZGUg
dmFsdWVzIHRvIGFkYXB0IHRoZSBzY3JpcHQgdG8geW91cgotIyBwcm9qZWN0IHN0cnVjdHVyZS4K
LSMKLSMgVG8gZW5hYmxlIFByb0d1YXJkIHRvIHNocmluayBhbmQgb2JmdXNjYXRlIHlvdXIgY29k
ZSwgdW5jb21tZW50IHRoaXMgKGF2YWlsYWJsZSBwcm9wZXJ0aWVzOiBzZGsuZGlyLCB1c2VyLmhv
bWUpOgotI3Byb2d1YXJkLmNvbmZpZz0ke3Nkay5kaXJ9L3Rvb2xzL3Byb2d1YXJkL3Byb2d1YXJk
LWFuZHJvaWQudHh0OnByb2d1YXJkLXByb2plY3QudHh0Ci0KLSMgUHJvamVjdCB0YXJnZXQuCi10
YXJnZXQ9YW5kcm9pZC0yMgotCi1qYXZhLmNvbXBpbGVyYXJncz0tWGxpbnQ6YWxsIC1XZXJyb3IK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvRmlsZVZpZGVvQ2FwdHVy
ZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMv
dGVzdC9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRl
c3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2
IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy50ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC50ZXN0Lklu
c3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIu
YW5ub3RhdGlvbi5MYXJnZVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5h
bm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5h
bm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0IG9yZy53ZWJydGMuRmlsZVZpZGVvQ2FwdHVy
ZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0NhcHR1cmVyOwotCi1pbXBvcnQgamF2YS5pby5J
T0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwotaW1wb3J0IGphdmEubmlvLmNo
YXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1w
b3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVmlkZW9DYXB0dXJlclRl
c3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHByaXZhdGUgc3RhdGljIGNs
YXNzIEZyYW1lIHsKLSAgICBwdWJsaWMgYnl0ZVtdIGRhdGE7Ci0gICAgcHVibGljIGludCB3aWR0
aDsKLSAgICBwdWJsaWMgaW50IGhlaWdodDsKLSAgfQotCi0gIHB1YmxpYyBjbGFzcyBNb2NrQ2Fw
dHVyZXJPYnNlcnZlciBpbXBsZW1lbnRzIFZpZGVvQ2FwdHVyZXIuQ2FwdHVyZXJPYnNlcnZlciB7
Ci0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8RnJhbWU+IGZyYW1lRGF0YXMgPSBuZXcgQXJy
YXlMaXN0PEZyYW1lPigpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0
dXJlclN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKSB7Ci0gICAgICBhc3NlcnRUcnVlKHN1Y2Nlc3Mp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdG9w
cGVkKCkgewotICAgICAgLy8gRW1wdHkgb24gcHVycG9zZS4KLSAgICB9Ci0KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25CeXRlQnVmZmVyRnJhbWVDYXB0dXJl
ZCgKLSAgICAgICAgYnl0ZVtdIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0
aW9uLCBsb25nIHRpbWVTdGFtcCkgewotICAgICAgRnJhbWUgZnJhbWUgPSBuZXcgRnJhbWUoKTsK
LSAgICAgIGZyYW1lLmRhdGEgPSBkYXRhOwotICAgICAgZnJhbWUud2lkdGggPSB3aWR0aDsKLSAg
ICAgIGZyYW1lLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIGFzc2VydFRydWUoZGF0YS5sZW5ndGgg
IT0gMCk7Ci0gICAgICBmcmFtZURhdGFzLmFkZChmcmFtZSk7Ci0gICAgICBub3RpZnkoKTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1
cmVkKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9lc1RleHR1cmVJZCwKLSAgICAgICAgZmxv
YXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApIHsKLSAg
ICAgIC8vIEVtcHR5IG9uIHB1cnBvc2UuCi0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXpl
ZCBBcnJheUxpc3Q8RnJhbWU+IGdldE1pbmltdW1GcmFtZXNCbG9ja2luZyhpbnQgbWluRnJhbWVz
KQotICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgd2hpbGUgKGZy
YW1lRGF0YXMuc2l6ZSgpIDwgbWluRnJhbWVzKSB7Ci0gICAgICAgIHdhaXQoKTsKLSAgICAgIH0K
LSAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PEZyYW1lPihmcmFtZURhdGFzKTsKLSAgICB9Ci0g
IH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RWaWRlb0NhcHR1cmVGcm9tRmls
ZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgIGZpbmFs
IGludCBGUkFNRV9XSURUSCA9IDQ7Ci0gICAgZmluYWwgaW50IEZSQU1FX0hFSUdIVCA9IDQ7Ci0g
ICAgZmluYWwgRmlsZVZpZGVvQ2FwdHVyZXIgZmlsZVZpZGVvQ2FwdHVyZXIgPSBuZXcgRmlsZVZp
ZGVvQ2FwdHVyZXIoCi0gICAgICAgICIvc2RjYXJkL2Nocm9taXVtX3Rlc3RzX3Jvb3Qvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvIgotICAg
ICAgICArICJjYXB0dXJldGVzdHZpZGVvLnk0bSIpOwotICAgIGZpbmFsIE1vY2tDYXB0dXJlck9i
c2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIgPSBuZXcgTW9ja0NhcHR1cmVyT2JzZXJ2ZXIoKTsKLSAg
ICBmaWxlVmlkZW9DYXB0dXJlci5pbml0aWFsaXplKG51bGwsIG51bGwsIGNhcHR1cmVyT2JzZXJ2
ZXIpOwotICAgIGZpbGVWaWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZShGUkFNRV9XSURUSCwgRlJB
TUVfSEVJR0hULCAzMyk7Ci0KLSAgICBmaW5hbCBTdHJpbmdbXSBleHBlY3RlZEZyYW1lcyA9IHsK
LSAgICAgICAgIlRISVMgSVMgSlVTVCBTT01FIFRFWFQgeCIsICJUSEUgU0VDT05EIEZSQU1FIHF3
ZXJ0eS4iLCAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIn07Ci0KLSAgICBmaW5hbCBBcnJheUxp
c3Q8RnJhbWU+IGZyYW1lRGF0YXM7Ci0gICAgZnJhbWVEYXRhcyA9IGNhcHR1cmVyT2JzZXJ2ZXIu
Z2V0TWluaW11bUZyYW1lc0Jsb2NraW5nKGV4cGVjdGVkRnJhbWVzLmxlbmd0aCk7Ci0KLSAgICBh
c3NlcnRFcXVhbHMoZXhwZWN0ZWRGcmFtZXMubGVuZ3RoLCBmcmFtZURhdGFzLnNpemUoKSk7Ci0K
LSAgICBmaWxlVmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIGZpbGVWaWRlb0NhcHR1
cmVyLmRpc3Bvc2UoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRGcmFtZXMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgIEZyYW1lIGZyYW1lID0gZnJhbWVEYXRhcy5nZXQoaSk7Ci0K
LSAgICAgIGFzc2VydEVxdWFscyhGUkFNRV9XSURUSCwgZnJhbWUud2lkdGgpOwotICAgICAgYXNz
ZXJ0RXF1YWxzKEZSQU1FX0hFSUdIVCwgZnJhbWUuaGVpZ2h0KTsKLSAgICAgIGFzc2VydEVxdWFs
cyhGUkFNRV9XSURUSCAqIEZSQU1FX0hFSUdIVCAqIDMgLyAyLCBmcmFtZS5kYXRhLmxlbmd0aCk7
Ci0KLSAgICAgIGJ5dGVbXSBleHBlY3RlZE5WMTJCeXRlcyA9IG5ldyBieXRlW2ZyYW1lLmRhdGEu
bGVuZ3RoXTsKLSAgICAgIEZpbGVWaWRlb0NhcHR1cmVyLm5hdGl2ZUk0MjBUb05WMjEoZXhwZWN0
ZWRGcmFtZXNbaV0uZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSSksCi0gICAgICAg
ICAgRlJBTUVfV0lEVEgsIEZSQU1FX0hFSUdIVCwgZXhwZWN0ZWROVjEyQnl0ZXMpOwotCi0gICAg
ICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZXhwZWN0ZWROVjEyQnl0ZXMsIGZyYW1lLmRhdGEp
KTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rl
c3QvUGVlckNvbm5lY3Rpb25DbGllbnRUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3Ny
Yy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9QZWVyQ29ubmVjdGlvbkNsaWVudFRlc3QuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9Q
ZWVyQ29ubmVjdGlvbkNsaWVudFRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDY3OCArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy50ZXN0
OwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJh
bWV0ZXJzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlvbkNsaWVudDsK
LWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNvbm5lY3Rpb25DbGllbnQuUGVlckNvbm5l
Y3Rpb25FdmVudHM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25uZWN0aW9uQ2xp
ZW50LlBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7
Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LkZsYWt5VGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5z
dHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5h
bm5vdGF0aW9uLlNtYWxsVGVzdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQg
b3JnLndlYnJ0Yy5DYW1lcmExRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYTJF
bnVtZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRvcjsKLWltcG9ydCBv
cmcud2VicnRjLkVnbEJhc2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5NZWRpYUNvZGVjVmlkZW9FbmNvZGVyOwotaW1wb3J0IG9yZy53ZWJydGMu
UGVlckNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbkZhY3Rvcnk7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLndlYnJ0
Yy5TdGF0c1JlcG9ydDsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7
Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291
bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNl
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uQ2xp
ZW50VGVzdAotICAgIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgaW1wbGVtZW50cyBQ
ZWVyQ29ubmVjdGlvbkV2ZW50cyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiUlRDQ2xpZW50VGVzdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJQ0VfQ09OTkVD
VElPTl9XQUlUX1RJTUVPVVQgPSAxMDAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdB
SVRfVElNRU9VVCA9IDcwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQU1FUkFfU1dJ
VENIX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZJREVPX1JFU1RB
UlRfQVRURU1QVFMgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FQVFVSRV9GT1JN
QVRfQ0hBTkdFX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZJREVP
X1JFU1RBUlRfVElNRU9VVCA9IDUwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYUEVD
VEVEX1ZJREVPX0ZSQU1FUyA9IDEwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklE
RU9fQ09ERUNfVlA4ID0gIlZQOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWSURF
T19DT0RFQ19WUDkgPSAiVlA5IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZJREVP
X0NPREVDX0gyNjQgPSAiSDI2NCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVURJT19S
VU5fVElNRU9VVCA9IDEwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTF9S
RU5ERVJFUl9OQU1FID0gIkxvY2FsIHJlbmRlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFJFTU9URV9SRU5ERVJFUl9OQU1FID0gIlJlbW90ZSByZW5kZXJlciI7Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9WSURFT19GUFMgPSAzMDsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IFdJRFRIX1ZHQSA9IDY0MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IEhFSUdIVF9WR0EgPSA0ODA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSURUSF9RVkdB
ID0gMzIwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVJR0hUX1FWR0EgPSAyNDA7Ci0K
LSAgLy8gVGhlIHBlZXIgY29ubmVjdGlvbiBjbGllbnQgaXMgYXNzdW1lZCB0byBiZSB0aHJlYWQg
c2FmZSBpbiBpdHNlbGY7IHRoZQotICAvLyByZWZlcmVuY2UgaXMgd3JpdHRlbiBieSB0aGUgdGVz
dCB0aHJlYWQgYW5kIHJlYWQgYnkgd29ya2VyIHRocmVhZHMuCi0gIHByaXZhdGUgdm9sYXRpbGUg
UGVlckNvbm5lY3Rpb25DbGllbnQgcGNDbGllbnQ7Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVh
biBsb29wYmFjazsKLQotICAvLyBFR0wgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGhhcmR3
YXJlIHZpZGVvIGRlY29kZXJzIHRvIGRlY29kZSB0byBhIHRleHR1cmUuCi0gIHByaXZhdGUgRWds
QmFzZSBlZ2xCYXNlOwotCi0gIC8vIFRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgdGhlaXIgcmVzcGVj
dGl2ZSBldmVudCBvYmplY3RzLgotICBwcml2YXRlIEV4ZWN1dG9yU2VydmljZSBzaWduYWxpbmdF
eGVjdXRvcjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkOwotICBwcml2YXRlIGJvb2xlYW4g
aXNJY2VDb25uZWN0ZWQ7Ci0gIHByaXZhdGUgU2Vzc2lvbkRlc2NyaXB0aW9uIGxvY2FsU2RwOwot
ICBwcml2YXRlIExpc3Q8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVzID0gbmV3IExpbmtlZExp
c3Q8SWNlQ2FuZGlkYXRlPigpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBsb2NhbFNkcEV2ZW50
ID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBpY2VDYW5kaWRhdGVFdmVu
dCA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgaWNlQ29ubmVjdGVkRXZl
bnQgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGNsb3NlRXZlbnQgPSBu
ZXcgT2JqZWN0KCk7Ci0KLSAgLy8gTW9jayByZW5kZXJlciBpbXBsZW1lbnRhdGlvbi4KLSAgcHJp
dmF0ZSBzdGF0aWMgY2xhc3MgTW9ja1JlbmRlcmVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5D
YWxsYmFja3MgewotICAgIC8vIFRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgJ3RoaXMnIHNpbmNlIHdl
IGdldHMgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZHMuCi0gICAgcHJpdmF0ZSBTdHJpbmcgcmVu
ZGVyZXJOYW1lOwotICAgIHByaXZhdGUgYm9vbGVhbiByZW5kZXJGcmFtZUNhbGxlZCA9IGZhbHNl
OwotCi0gICAgLy8gVGhyZWFkLXNhZmUgaW4gaXRzZWxmLgotICAgIHByaXZhdGUgQ291bnREb3du
TGF0Y2ggZG9uZVJlbmRlcmluZzsKLQotICAgIHB1YmxpYyBNb2NrUmVuZGVyZXIoaW50IGV4cGVj
dGVkRnJhbWVzLCBTdHJpbmcgcmVuZGVyZXJOYW1lKSB7Ci0gICAgICB0aGlzLnJlbmRlcmVyTmFt
ZSA9IHJlbmRlcmVyTmFtZTsKLSAgICAgIHJlc2V0KGV4cGVjdGVkRnJhbWVzKTsKLSAgICB9Ci0K
LSAgICAvLyBSZXNldHMgcmVuZGVyIHRvIHdhaXQgZm9yIG5ldyBhbW91bnQgb2YgdmlkZW8gZnJh
bWVzLgotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldChpbnQgZXhwZWN0ZWRGcmFt
ZXMpIHsKLSAgICAgIHJlbmRlckZyYW1lQ2FsbGVkID0gZmFsc2U7Ci0gICAgICBkb25lUmVuZGVy
aW5nID0gbmV3IENvdW50RG93bkxhdGNoKGV4cGVjdGVkRnJhbWVzKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVuZGVyRnJhbWUoVmlkZW9S
ZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIGlmICghcmVuZGVyRnJhbWVDYWxsZWQp
IHsKLSAgICAgICAgaWYgKHJlbmRlcmVyTmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmQo
VEFHLCByZW5kZXJlck5hbWUgKyAiIHJlbmRlciBmcmFtZTogIiArIGZyYW1lLnJvdGF0ZWRXaWR0
aCgpICsgIiB4ICIKLSAgICAgICAgICAgICAgICAgICsgZnJhbWUucm90YXRlZEhlaWdodCgpKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJSZW5kZXIgZnJhbWU6ICIg
KyBmcmFtZS5yb3RhdGVkV2lkdGgoKSArICIgeCAiICsgZnJhbWUucm90YXRlZEhlaWdodCgpKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgICAgcmVuZGVyRnJhbWVDYWxsZWQgPSB0cnVlOwotICAg
ICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgZG9uZVJlbmRl
cmluZy5jb3VudERvd24oKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGRuJ3Qg
aG9sZCBhbnkgbG9ja3Mgb3IgdG91Y2ggbWVtYmVyIHZhcmlhYmxlcyBzaW5jZSBpdAotICAgIC8v
IGJsb2Nrcy4KLSAgICBwdWJsaWMgYm9vbGVhbiB3YWl0Rm9yRnJhbWVzUmVuZGVyZWQoaW50IHRp
bWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIGRvbmVSZW5kZXJp
bmcuYXdhaXQodGltZW91dE1zLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgcmV0dXJu
IChkb25lUmVuZGVyaW5nLmdldENvdW50KCkgPD0gMCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUGVl
ciBjb25uZWN0aW9uIGV2ZW50cyBpbXBsZW1lbnRhdGlvbi4KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG9uTG9jYWxEZXNjcmlwdGlvbihTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAg
TG9nLmQoVEFHLCAiTG9jYWxTRFAgdHlwZTogIiArIHNkcC50eXBlKTsKLSAgICBzeW5jaHJvbml6
ZWQgKGxvY2FsU2RwRXZlbnQpIHsKLSAgICAgIGxvY2FsU2RwID0gc2RwOwotICAgICAgbG9jYWxT
ZHBFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25JY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAg
IHN5bmNocm9uaXplZCAoaWNlQ2FuZGlkYXRlRXZlbnQpIHsKLSAgICAgIExvZy5kKFRBRywgIklj
ZUNhbmRpZGF0ZSAjIiArIGljZUNhbmRpZGF0ZXMuc2l6ZSgpICsgIiA6ICIgKyBjYW5kaWRhdGUu
dG9TdHJpbmcoKSk7Ci0gICAgICBpZiAobG9vcGJhY2spIHsKLSAgICAgICAgLy8gTG9vcGJhY2sg
bG9jYWwgSUNFIGNhbmRpZGF0ZSBpbiBhIHNlcGFyYXRlIHRocmVhZCB0byBhdm9pZCBhZGRpbmcK
LSAgICAgICAgLy8gcmVtb3RlIElDRSBjYW5kaWRhdGUgaW4gYSBsb2NhbCBJQ0UgY2FuZGlkYXRl
IGNhbGxiYWNrLgotICAgICAgICBzaWduYWxpbmdFeGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgICAgICBwY0NsaWVudC5hZGRSZW1vdGVJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgICAgaWNlQ2FuZGlkYXRlcy5h
ZGQoY2FuZGlkYXRlKTsKLSAgICAgIGljZUNhbmRpZGF0ZUV2ZW50Lm5vdGlmeUFsbCgpOwotICAg
IH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1v
dmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICAvLyBUT0RPKGhvbmdo
YWl6KTogQWRkIHRoaXMgZm9yIHRlc3RzLgotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIG9uSWNlQ29ubmVjdGVkKCkgewotICAgIExvZy5kKFRBRywgIklDRSBDb25uZWN0ZWQiKTsK
LSAgICBzeW5jaHJvbml6ZWQgKGljZUNvbm5lY3RlZEV2ZW50KSB7Ci0gICAgICBpc0ljZUNvbm5l
Y3RlZCA9IHRydWU7Ci0gICAgICBpY2VDb25uZWN0ZWRFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VEaXNjb25uZWN0ZWQoKSB7
Ci0gICAgTG9nLmQoVEFHLCAiSUNFIERpc2Nvbm5lY3RlZCIpOwotICAgIHN5bmNocm9uaXplZCAo
aWNlQ29ubmVjdGVkRXZlbnQpIHsKLSAgICAgIGlzSWNlQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAg
ICBpY2VDb25uZWN0ZWRFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25QZWVyQ29ubmVjdGlvbkNsb3NlZCgpIHsKLSAgICBMb2cuZChU
QUcsICJQZWVyQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICBzeW5jaHJvbml6ZWQgKGNsb3NlRXZl
bnQpIHsKLSAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgIGNsb3NlRXZlbnQubm90aWZ5QWxs
KCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNvbm5l
Y3Rpb25FcnJvcihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICBmYWlsKCJQQyBFcnJvcjogIiAr
IGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJD
b25uZWN0aW9uU3RhdHNSZWFkeShTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHt9Ci0KLSAgLy8gSGVs
cGVyIHdhaXQgZnVuY3Rpb25zLgotICBwcml2YXRlIGJvb2xlYW4gd2FpdEZvckxvY2FsU0RQKGlu
dCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgc3luY2hyb25p
emVkIChsb2NhbFNkcEV2ZW50KSB7Ci0gICAgICBpZiAobG9jYWxTZHAgPT0gbnVsbCkgewotICAg
ICAgICBsb2NhbFNkcEV2ZW50LndhaXQodGltZW91dE1zKTsKLSAgICAgIH0KLSAgICAgIHJldHVy
biAobG9jYWxTZHAgIT0gbnVsbCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHdh
aXRGb3JJY2VDYW5kaWRhdGVzKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgc3luY2hyb25pemVkIChpY2VDYW5kaWRhdGVFdmVudCkgewotICAgICAgaWYg
KGljZUNhbmRpZGF0ZXMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgaWNlQ2FuZGlkYXRlRXZlbnQu
d2FpdCh0aW1lb3V0TXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIChpY2VDYW5kaWRhdGVzLnNp
emUoKSA+IDApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3YWl0Rm9ySWNlQ29u
bmVjdGVkKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
c3luY2hyb25pemVkIChpY2VDb25uZWN0ZWRFdmVudCkgewotICAgICAgaWYgKCFpc0ljZUNvbm5l
Y3RlZCkgewotICAgICAgICBpY2VDb25uZWN0ZWRFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAg
ICB9Ci0gICAgICBpZiAoIWlzSWNlQ29ubmVjdGVkKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIklD
RSBjb25uZWN0aW9uIGZhaWx1cmUiKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGlzSWNlQ29u
bmVjdGVkOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3YWl0Rm9yUGVlckNvbm5l
Y3Rpb25DbG9zZWQoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBzeW5jaHJvbml6ZWQgKGNsb3NlRXZlbnQpIHsKLSAgICAgIGlmICghaXNDbG9zZWQpIHsK
LSAgICAgICAgY2xvc2VFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gaXNDbG9zZWQ7Ci0gICAgfQotICB9Ci0KLSAgUGVlckNvbm5lY3Rpb25DbGllbnQgY3JlYXRl
UGVlckNvbm5lY3Rpb25DbGllbnQoTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIsCi0gICAgICBN
b2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIsIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwZWVy
Q29ubmVjdGlvblBhcmFtZXRlcnMsCi0gICAgICBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIs
IEVnbEJhc2UuQ29udGV4dCBlZ2xDb250ZXh0KSB7Ci0gICAgTGlzdDxQZWVyQ29ubmVjdGlvbi5J
Y2VTZXJ2ZXI+IGljZVNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXI+KCk7Ci0gICAgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzID0K
LSAgICAgICAgbmV3IFNpZ25hbGluZ1BhcmFtZXRlcnMoaWNlU2VydmVycywgdHJ1ZSwgLy8gaWNl
U2VydmVycywgaW5pdGlhdG9yLgotICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgLy8gY2xp
ZW50SWQsIHdzc1VybCwgd3NzUG9zdFVybC4KLSAgICAgICAgICAgIG51bGwsIG51bGwpOyAvLyBv
ZmZlclNkcCwgaWNlQ2FuZGlkYXRlcy4KLQotICAgIFBlZXJDb25uZWN0aW9uQ2xpZW50IGNsaWVu
dCA9IFBlZXJDb25uZWN0aW9uQ2xpZW50LmdldEluc3RhbmNlKCk7Ci0gICAgUGVlckNvbm5lY3Rp
b25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0
aW9ucygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAwOwotICAgIG9wdGlvbnMu
ZGlzYWJsZU5ldHdvcmtNb25pdG9yID0gdHJ1ZTsKLSAgICBjbGllbnQuc2V0UGVlckNvbm5lY3Rp
b25GYWN0b3J5T3B0aW9ucyhvcHRpb25zKTsKLSAgICBjbGllbnQuY3JlYXRlUGVlckNvbm5lY3Rp
b25GYWN0b3J5KAotICAgICAgICBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0
KCksIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywgdGhpcyk7Ci0gICAgY2xpZW50LmNyZWF0ZVBl
ZXJDb25uZWN0aW9uKAotICAgICAgICBlZ2xDb250ZXh0LCBsb2NhbFJlbmRlcmVyLCByZW1vdGVS
ZW5kZXJlciwgdmlkZW9DYXB0dXJlciwgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0gICAgY2xpZW50
LmNyZWF0ZU9mZmVyKCk7Ci0gICAgcmV0dXJuIGNsaWVudDsKLSAgfQotCi0gIHByaXZhdGUgUGVl
ckNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNyZWF0ZVBhcmFtZXRlcnNGb3JBdWRpb0NhbGwoKSB7Ci0g
ICAgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyA9Ci0g
ICAgICAgIG5ldyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMoZmFsc2UsIC8qIHZpZGVvQ2FsbEVu
YWJsZWQgKi8KLSAgICAgICAgICAgIHRydWUsIC8qIGxvb3BiYWNrICovCi0gICAgICAgICAgICBm
YWxzZSwgLyogdHJhY2luZyAqLwotICAgICAgICAgICAgLy8gVmlkZW8gY29kZWMgcGFyYW1ldGVy
cy4KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvV2lkdGggKi8KLSAgICAgICAgICAgIDAsIC8qIHZp
ZGVvSGVpZ2h0ICovCi0gICAgICAgICAgICAwLCAvKiB2aWRlb0ZwcyAqLwotICAgICAgICAgICAg
MCwgLyogdmlkZW9TdGFydEJpdHJhdGUgKi8KLSAgICAgICAgICAgICIiLCAvKiB2aWRlb0NvZGVj
ICovCi0gICAgICAgICAgICB0cnVlLCAvKiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24gKi8KLSAg
ICAgICAgICAgIC8vIEF1ZGlvIGNvZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAwLCAvKiBh
dWRpb1N0YXJ0Qml0cmF0ZSAqLwotICAgICAgICAgICAgIk9QVVMiLCAvKiBhdWRpb0NvZGVjICov
Ci0gICAgICAgICAgICBmYWxzZSwgLyogbm9BdWRpb1Byb2Nlc3NpbmcgKi8KLSAgICAgICAgICAg
IGZhbHNlLCAvKiBhZWNEdW1wICovCi0gICAgICAgICAgICBmYWxzZSAvKiB1c2VPcGVuU0xFUyAq
LywgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5BRUMgKi8sIGZhbHNlIC8qIGRpc2FibGVCdWlsdElu
QUdDICovLAotICAgICAgICAgICAgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5OUyAqLywgZmFsc2Ug
LyogZW5hYmxlTGV2ZWxDb250cm9sICovKTsKLQotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnM7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FtZXJhQ2Fw
dHVyZXIoYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgZmluYWwgYm9vbGVhbiB1c2VD
YW1lcmEyID0KLSAgICAgICAgY2FwdHVyZVRvVGV4dHVyZSAmJiBDYW1lcmEyRW51bWVyYXRvci5p
c1N1cHBvcnRlZChnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCkpOwotCi0g
ICAgQ2FtZXJhRW51bWVyYXRvciBlbnVtZXJhdG9yOwotICAgIGlmICh1c2VDYW1lcmEyKSB7Ci0g
ICAgICBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTJFbnVtZXJhdG9yKGdldEluc3RydW1lbnRhdGlv
bigpLmdldFRhcmdldENvbnRleHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVudW1lcmF0b3Ig
PSBuZXcgQ2FtZXJhMUVudW1lcmF0b3IoY2FwdHVyZVRvVGV4dHVyZSk7Ci0gICAgfQotICAgIFN0
cmluZyBkZXZpY2VOYW1lID0gZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpWzBdOwotICAgIHJl
dHVybiBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGRldmljZU5hbWUsIG51bGwpOwotICB9Ci0K
LSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgY3JlYXRlUGFyYW1ldGVyc0ZvclZp
ZGVvQ2FsbChTdHJpbmcgdmlkZW9Db2RlYykgewotICAgIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVy
cyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPQotICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzKHRydWUsIC8qIHZpZGVvQ2FsbEVuYWJsZWQgKi8KLSAgICAgICAgICAgIHRydWUs
IC8qIGxvb3BiYWNrICovCi0gICAgICAgICAgICBmYWxzZSwgLyogdHJhY2luZyAqLwotICAgICAg
ICAgICAgLy8gVmlkZW8gY29kZWMgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAsIC8qIHZpZGVv
V2lkdGggKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvSGVpZ2h0ICovCi0gICAgICAgICAgICAw
LCAvKiB2aWRlb0ZwcyAqLwotICAgICAgICAgICAgMCwgLyogdmlkZW9TdGFydEJpdHJhdGUgKi8K
LSAgICAgICAgICAgIHZpZGVvQ29kZWMsIC8qIHZpZGVvQ29kZWMgKi8KLSAgICAgICAgICAgIHRy
dWUsIC8qIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbiAqLwotICAgICAgICAgICAgLy8gQXVkaW8g
Y29kZWMgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAsIC8qIGF1ZGlvU3RhcnRCaXRyYXRlICov
Ci0gICAgICAgICAgICAiT1BVUyIsIC8qIGF1ZGlvQ29kZWMgKi8KLSAgICAgICAgICAgIGZhbHNl
LCAvKiBub0F1ZGlvUHJvY2Vzc2luZyAqLwotICAgICAgICAgICAgZmFsc2UsIC8qIGFlY0R1bXAg
Ki8KLSAgICAgICAgICAgIGZhbHNlIC8qIHVzZU9wZW5TTEVTICovLCBmYWxzZSAvKiBkaXNhYmxl
QnVpbHRJbkFFQyAqLywgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5BR0MgKi8sCi0gICAgICAgICAg
ICBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJbk5TICovLCBmYWxzZSAvKiBlbmFibGVMZXZlbENvbnRy
b2wgKi8pOwotCi0gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBzaWduYWxpbmdFeGVjdXRv
ciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpOwotICAgIGlmIChCdWlsZC5W
RVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMSkgewot
ICAgICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIHNpZ25hbGluZ0V4ZWN1dG9yLnNo
dXRkb3duKCk7Ci0gICAgaWYgKGVnbEJhc2UgIT0gbnVsbCkgewotICAgICAgZWdsQmFzZS5yZWxl
YXNlKCk7Ci0gICAgfQotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2V0
TG9jYWxPZmZlck1ha2VzVmlkZW9GbG93TG9jYWxseSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFNldExvY2FsT2ZmZXJNYWtlc1ZpZGVvRmxvd0xv
Y2FsbHkiKTsKLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVy
ZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBwY0Ns
aWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIsIG5ldyBNb2Nr
UmVuZGVyZXIoMCwgbnVsbCksCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwo
VklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyog
Y2FwdHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQ
IGFuZCBpY2UgY2FuZGlkYXRlcyBzZXQgZXZlbnRzLgotICAgIGFzc2VydFRydWUoIkxvY2FsIFNE
UCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNz
ZXJ0VHJ1ZSgiSUNFIGNhbmRpZGF0ZXMgd2VyZSBub3QgZ2VuZXJhdGVkLiIsIHdhaXRGb3JJY2VD
YW5kaWRhdGVzKFdBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCB2aWRl
byBmcmFtZXMgd2VyZSByZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiTG9jYWwg
dmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkLiIsIGxvY2FsUmVuZGVyZXIud2FpdEZvckZy
YW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAg
ICBhc3NlcnRUcnVlKAotICAgICAgICAiUGVlckNvbm5lY3Rpb24gY2xvc2UgZXZlbnQgd2FzIG5v
dCByZWNlaXZlZC4iLCB3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7
Ci0gICAgTG9nLmQoVEFHLCAidGVzdFNldExvY2FsT2ZmZXJNYWtlc1ZpZGVvRmxvd0xvY2FsbHkg
RG9uZS4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkb0xvb3BiYWNrVGVzdChQZWVyQ29ubmVj
dGlvblBhcmFtZXRlcnMgcGFyYW1ldGVycywgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyLAot
ICAgICAgYm9vbGVhbiBkZWNvZGVUb1RleHR1cmUpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwotICAgIE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVy
ID0gbnVsbDsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIgPSBudWxsOwotICAgIGlm
IChwYXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIExvZy5kKFRBRywgInRlc3RM
b29wYmFjayBmb3IgdmlkZW8gIiArIHBhcmFtZXRlcnMudmlkZW9Db2RlYyk7Ci0gICAgICBsb2Nh
bFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExPQ0FM
X1JFTkRFUkVSX05BTUUpOwotICAgICAgcmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVy
KEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVSX05BTUUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBMb2cuZChUQUcsICJ0ZXN0TG9vcGJhY2sgZm9yIGF1ZGlvLiIpOwotICAgIH0K
LSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIs
IHJlbW90ZVJlbmRlcmVyLCBwYXJhbWV0ZXJzLCB2aWRlb0NhcHR1cmVyLAotICAgICAgICBkZWNv
ZGVUb1RleHR1cmUgPyBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkgOiBudWxsKTsKLQotICAg
IC8vIFdhaXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJl
bW90ZSBTRFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRG
b3JMb2NhbFNEUChXQUlUX1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3Rl
U2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9u
LlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7
Ci0gICAgcGNDbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8v
IFdhaXQgZm9yIElDRSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9u
IGZhaWx1cmUuIiwgd2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVP
VVQpKTsKLQotICAgIGlmIChwYXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIC8v
IENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4K
LSAgICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZC4i
LAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElN
RU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCBy
ZW5kZXJlZC4iLAotICAgICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJl
ZChXQUlUX1RJTUVPVVQpKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gRm9yIGF1ZGlvIGp1c3Qg
c2xlZXAgZm9yIDEgc2VjLgotICAgICAgLy8gVE9ETyhnbGF6bmV2KTogY2hlY2sgaG93IHdlIGNh
biBkZXRlY3QgdGhhdCByZW1vdGUgYXVkaW8gd2FzIHJlbmRlcmVkLgotICAgICAgVGhyZWFkLnNs
ZWVwKEFVRElPX1JVTl9USU1FT1VUKTsKLSAgICB9Ci0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwot
ICAgIGFzc2VydFRydWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkp
OwotICAgIExvZy5kKFRBRywgInRlc3RMb29wYmFjayBkb25lLiIpOwotICB9Ci0KLSAgQFNtYWxs
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tBdWRpbygpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvckF1ZGlv
Q2FsbCgpLCBudWxsLCBmYWxzZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNt
YWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDgoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRl
b0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFs
c2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIGZhbHNlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7
Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOSgpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFy
YW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDkpLAotICAgICAgICBjcmVhdGVDYW1l
cmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgZmFsc2UgLyogZGVjb2Rl
VG9UZXh0dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExv
b3BiYWNrSDI2NCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFj
a1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19IMjY0KSwKLSAg
ICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyks
IGZhbHNlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOERlY29kZVRvVGV4dHVyZSgpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZF
UlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNvZGUgdG8gdGV4dHVy
ZXMgaXMgbm90IHN1cHBvcnRlZCwgcmVxdWlyZXMgU0RLIHZlcnNpb24gMTkuIik7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRl
b0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFs
c2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsK
LSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA5RGVjb2Rl
VG9UZXh0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQu
VkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExv
Zy5pKFRBRywgIkRlY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLCByZXF1aXJlcyBT
REsgdmVyc2lvbiAxOS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rl
c3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDkpLAotICAgICAg
ICBjcmVhdGVDYW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1
ZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0TG9vcGJhY2tIMjY0RGVjb2RlVG9UZXh0dXJlKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lP
Tl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0byB0ZXh0dXJlcyBp
cyBub3Qgc3VwcG9ydGVkLCByZXF1aXJlcyBTREsgdmVyc2lvbiAxOS4iKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2Fs
bChWSURFT19DT0RFQ19IMjY0KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2Ug
LyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAg
fQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA4Q2FwdHVyZVRv
VGV4dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZF
UlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cu
aShUQUcsICJFbmNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gUmVxdWlyZXMgU0RL
IHZlcnNpb24gMTkiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVE9ETyhwZXJraik6
IElmIHdlIGNhbiBhbHdheXMgY2FwdHVyZSB0byB0ZXh0dXJlcywgdGhlcmUgaXMgbm8gbmVlZCB0
byBjaGVjayBpZiB0aGUKLSAgICAvLyBoYXJkd2FyZSBlbmNvZGVyIHN1cHBvcnRzIHRvIGVuY29k
ZSBmcm9tIGEgdGV4dHVyZS4KLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhI
d1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkgewotICAgICAgTG9nLmkoVEFHLCAiVlA4IGVuY29k
ZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NP
REVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyogY2FwdHVyZVRv
VGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIC8vIFRl
c3QgdGhhdCBhIGNhbGwgY2FuIGJlIHNldHVwIGV2ZW4gaWYgdGhlIEVHTCBjb250ZXh0IHVzZWQg
ZHVyaW5nIGluaXRpYWxpemF0aW9uIGlzCi0gIC8vIHJlbGVhc2VkIGJlZm9yZSB0aGUgVmlkZW8g
Y29kZWNzIGFyZSBjcmVhdGVkLiBUaGUgSFcgZW5jb2RlciBhbmQgZGVjb2RlciBpcyBzZXR1cCB0
byB1c2UKLSAgLy8gdGV4dHVyZXMuCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExv
b3BiYWNrRWdsQ29udGV4dFJlbGVhc2VkQWZ0ZXJDcmVhdGluZ1BjKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVS
U0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0byB0ZXh0dXJl
cyBpcyBub3Qgc3VwcG9ydGVkLiBSZXF1aXJlcyBTREsgdmVyc2lvbiAxOSIpOwotICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLSAgICBQZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMgcGFyYW1ldGVycyA9IGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9f
Q09ERUNfVlA4KTsKLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVu
ZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBN
b2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJ
REVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVSX05BTUUpOwotICAgIHBjQ2xpZW50ID0gY3JlYXRl
UGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVyZXIsIHBhcmFt
ZXRlcnMsCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyogY2FwdHVyZVRvVGV4
dHVyZSAqLyksIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0KLSAgICAvLyBXYWl0IGZv
ciBsb2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1vdGUgU0RQLgot
ICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAo
V0FJVF9USU1FT1VUKSk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBFR0wgY29udGV4dCB1c2VkIGZv
ciBjcmVhdGluZyB0aGUgUGVlckNvbm5lY3Rpb25DbGllbnQuCi0gICAgLy8gU2luY2UgY3JlYXRl
UGVlckNvbm5lY3Rpb25DbGllbnQgaXMgYXN5bmNocm9ub3VzLCB3ZSBtdXN0IHdhaXQgZm9yIHRo
ZSBsb2NhbAotICAgIC8vIFNlc3Npb25EZXNjcmlwdGlvbi4KLSAgICBlZ2xCYXNlLnJlbGVhc2Uo
KTsKLSAgICBlZ2xCYXNlID0gbnVsbDsKLQotICAgIFNlc3Npb25EZXNjcmlwdGlvbiByZW1vdGVT
ZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24u
VHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0aW9uKTsK
LSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0gICAgLy8g
V2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rpb24g
ZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRfVElNRU9V
VCkpOwotICAgIC8vIENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2Vy
ZSByZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiTG9jYWwgdmlkZW8gZnJhbWVz
IHdlcmUgbm90IHJlbmRlcmVkLiIsIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVk
KFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBmcmFtZXMgd2Vy
ZSBub3QgcmVuZGVyZWQuIiwKLSAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1Jl
bmRlcmVkKFdBSVRfVElNRU9VVCkpOwotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3Nl
cnRUcnVlKHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBM
b2cuZChUQUcsICJ0ZXN0TG9vcGJhY2sgZG9uZS4iKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdExvb3BiYWNrSDI2NENhcHR1cmVUb1RleHR1cmUoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWls
ZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRW5jb2RlIHRvIHRl
eHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlcXVpcmVzIEtJVEtBVCIpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAvLyBUT0RPKHBlcmtqKTogSWYgd2UgY2FuIGFsd2F5cyBjYXB0dXJlIHRv
IHRleHR1cmVzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIHRoZQotICAgIC8vIGhhcmR3
YXJlIGVuY29kZXIgc3VwcG9ydHMgdG8gZW5jb2RlIGZyb20gYSB0ZXh0dXJlLgotICAgIGlmICgh
TWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc0gyNjRId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkg
ewotICAgICAgTG9nLmkoVEFHLCAiSDI2NCBlbmNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBv
cnRlZC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRl
UGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19IMjY0KSwKLSAgICAgICAgY3JlYXRl
Q2FtZXJhQ2FwdHVyZXIodHJ1ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNv
ZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIGRlZmF1bHQgZnJvbnQgY2Ft
ZXJhIGNhbiBiZSBzd2l0Y2hlZCB0byBiYWNrIGNhbWVyYSBhbmQgdGhlbgotICAvLyBhZ2FpbiB0
byBmcm9udCBjYW1lcmEuCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYVN3
aXRjaCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVz
dENhbWVyYVN3aXRjaCIpOwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAgIE1vY2tSZW5kZXJl
ciBsb2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMs
IExPQ0FMX1JFTkRFUkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9
IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJf
TkFNRSk7Ci0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2Fs
UmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlk
ZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZh
bHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQgZm9yIGxv
Y2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBTRFAuCi0gICAg
YXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlU
X1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2RwID0gbmV3IFNlc3Np
b25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9u
aWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0gICAgcGNDbGllbnQu
c2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdhaXQgZm9yIElDRSBj
b25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZhaWx1cmUuIiwgd2Fp
dEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQpKTsKLQotICAgIC8v
IENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4K
LSAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVm
b3JlIGNhbWVyYSBzd2l0Y2guIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVz
UmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZy
YW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHN3aXRjaC4iLAotICAgICAgICBy
ZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IENBTUVSQV9TV0lUQ0hfQVRURU1QVFM7IGkrKykgewotICAg
ICAgLy8gVHJ5IHRvIHN3aXRjaCBjYW1lcmEKLSAgICAgIHBjQ2xpZW50LnN3aXRjaENhbWVyYSgp
OwotCi0gICAgICAvLyBSZXNldCB2aWRlbyByZW5kZXJzIGFuZCBjaGVjayB0aGF0IGxvY2FsIGFu
ZCByZW1vdGUgdmlkZW8gZnJhbWVzCi0gICAgICAvLyB3ZXJlIHJlbmRlcmVkIGFmdGVyIGNhbWVy
YSBzd2l0Y2guCi0gICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1F
Uyk7Ci0gICAgICByZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwot
ICAgICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFm
dGVyIGNhbWVyYSBzd2l0Y2guIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFt
ZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRl
byBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIgY2FtZXJhIHN3aXRjaC4iLAotICAgICAg
ICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsK
LSAgICB9Ci0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKHdhaXRGb3JQZWVy
Q29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0Q2Ft
ZXJhU3dpdGNoIGRvbmUuIik7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYgdmlkZW8gc291cmNlIGNh
biBiZSByZXN0YXJ0ZWQgLSBzaW11bGF0ZSBhcHAgZ29lcyB0bwotICAvLyBiYWNrZ3JvdW5kIGFu
ZCBiYWNrIHRvIGZvcmVncm91bmQuCi0gIC8vIERpc2FibGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9i
dWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTY0NzgKLSAgQEZsYWt5
VGVzdAotICAvL0BTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFZpZGVvU291cmNlUmVzdGFy
dCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFZp
ZGVvU291cmNlUmVzdGFydCIpOwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAgIE1vY2tSZW5k
ZXJlciBsb2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFN
RVMsIExPQ0FMX1JFTkRFUkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJl
ciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVS
RVJfTkFNRSk7Ci0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxv
Y2FsUmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJzRm9y
VmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVy
KGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQgZm9y
IGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBTRFAuCi0g
ICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChX
QUlUX1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2RwID0gbmV3IFNl
c3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNh
bm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0gICAgcGNDbGll
bnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdhaXQgZm9yIElD
RSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZhaWx1cmUuIiwg
d2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQpKTsKLQotICAg
IC8vIENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJl
ZC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQg
YmVmb3JlIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJh
bWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVv
IGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgdmlkZW8gcmVzdGFydC4iLAotICAgICAg
ICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0K
LSAgICAvLyBTdG9wIGFuZCB0aGVuIHN0YXJ0IHZpZGVvIHNvdXJjZSBhIGZldyB0aW1lcy4KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IFZJREVPX1JFU1RBUlRfQVRURU1QVFM7IGkrKykgewotICAg
ICAgcGNDbGllbnQuc3RvcFZpZGVvU291cmNlKCk7Ci0gICAgICBUaHJlYWQuc2xlZXAoVklERU9f
UkVTVEFSVF9USU1FT1VUKTsKLSAgICAgIHBjQ2xpZW50LnN0YXJ0VmlkZW9Tb3VyY2UoKTsKLQot
ICAgICAgLy8gUmVzZXQgdmlkZW8gcmVuZGVycyBhbmQgY2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVt
b3RlIHZpZGVvIGZyYW1lcwotICAgICAgLy8gd2VyZSByZW5kZXJlZCBhZnRlciB2aWRlbyByZXN0
YXJ0LgotICAgICAgbG9jYWxSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwot
ICAgICAgcmVtb3RlUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVTKTsKLSAgICAg
IGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciB2
aWRlbyByZXN0YXJ0LiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVu
ZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlkZW8gZnJh
bWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAgICAgICBy
ZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAg
fQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9yUGVlckNvbm5l
Y3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFZpZGVvU291
cmNlUmVzdGFydCBkb25lLiIpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIGNhcHR1cmUgZm9ybWF0
IGNhbiBiZSBjaGFuZ2VkIG9uIGZseSBhbmQgZGVjb2RlciBjYW4gYmUgcmVzZXQgcHJvcGVybHku
Ci0gIC8vIERpc2FibGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dl
YnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTY0NzgKLSAgQEZsYWt5VGVzdAotICAvL0BTbWFsbFRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdENhcHR1cmVGb3JtYXRDaGFuZ2UoKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIExvZy5kKFRBRywgInRlc3RDYXB0dXJlRm9ybWF0Q2hhbmdlIik7
Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwotCi0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIg
PSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJf
TkFNRSk7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJl
cihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9SRU5ERVJFUl9OQU1FKTsKLQotICAgIHBj
Q2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgcmVtb3Rl
UmVuZGVyZXIsCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09E
RUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRv
VGV4dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQLCByZW5hbWUg
aXQgdG8gYW5zd2VyIGFuZCBzZXQgYXMgcmVtb3RlIFNEUC4KLSAgICBhc3NlcnRUcnVlKCJMb2Nh
bCBTRFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotICAg
IFNlc3Npb25EZXNjcmlwdGlvbiByZW1vdGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAot
ICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2Vy
IiksIGxvY2FsU2RwLmRlc2NyaXB0aW9uKTsKLSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlw
dGlvbihyZW1vdGVTZHApOwotCi0gICAgLy8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAg
YXNzZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rpb24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVk
KElDRV9DT05ORUNUSU9OX1dBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2Nh
bCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUo
IkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHJlc29s
dXRpb24gY2hhbmdlLiIsCi0gICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRl
cmVkKFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBmcmFtZXMg
d2VyZSBub3QgcmVuZGVyZWQgYmVmb3JlIGNhbWVyYSByZXNvbHV0aW9uIGNoYW5nZS4iLAotICAg
ICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7
Ci0KLSAgICAvLyBDaGFuZ2UgY2FwdHVyZSBvdXRwdXQgZm9ybWF0IGEgZmV3IHRpbWVzLgotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMiAqIENBUFRVUkVfRk9STUFUX0NIQU5HRV9BVFRFTVBUUzsg
aSsrKSB7Ci0gICAgICBpZiAoaSAlIDIgPT0gMCkgewotICAgICAgICBwY0NsaWVudC5jaGFuZ2VD
YXB0dXJlRm9ybWF0KFdJRFRIX1ZHQSwgSEVJR0hUX1ZHQSwgTUFYX1ZJREVPX0ZQUyk7Ci0gICAg
ICB9IGVsc2UgewotICAgICAgICBwY0NsaWVudC5jaGFuZ2VDYXB0dXJlRm9ybWF0KFdJRFRIX1FW
R0EsIEhFSUdIVF9RVkdBLCBNQVhfVklERU9fRlBTKTsKLSAgICAgIH0KLQotICAgICAgLy8gUmVz
ZXQgdmlkZW8gcmVuZGVycyBhbmQgY2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZy
YW1lcwotICAgICAgLy8gd2VyZSByZW5kZXJlZCBhZnRlciBjYXB0dXJlIGZvcm1hdCBjaGFuZ2Uu
Ci0gICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1FUyk7Ci0gICAg
ICByZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwotICAgICAgYXNz
ZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIGNhcHR1
cmUgZm9ybWF0IGNoYW5nZS4iLAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1l
c1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVv
IGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciBjYXB0dXJlIGZvcm1hdCBjaGFuZ2UuIiwK
LSAgICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1F
T1VUKSk7Ci0gICAgfQotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKHdh
aXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcs
ICJ0ZXN0Q2FwdHVyZUZvcm1hdENoYW5nZSBkb25lLiIpOwotICB9Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1ZpZGVvRmlsZVJlbmRlcmVyVGVzdC5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvVmlkZW9GaWxl
UmVuZGVyZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL3Rlc3QvVmlkZW9GaWxlUmVuZGVyZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGM7Ci0KLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBv
cnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotaW1w
b3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGph
dmEuaW8uUmFuZG9tQWNjZXNzRmlsZTsKLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwotaW1wb3J0
IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZhLm5pby5CeXRl
QnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlJh
bmRvbTsKLQotcHVibGljIGNsYXNzIFZpZGVvRmlsZVJlbmRlcmVyVGVzdCBleHRlbmRzIEluc3Ry
dW1lbnRhdGlvblRlc3RDYXNlIHsKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0WXV2
UmVuZGVyaW5nVG9GaWxlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2VwdGlv
biB7Ci0gICAgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoKTsKLSAgICBmaW5hbCBT
dHJpbmcgdmlkZW9PdXRQYXRoID0gIi9zZGNhcmQvY2hyb21pdW1fdGVzdHNfcm9vdC90ZXN0dmlk
ZW9vdXQueTRtIjsKLSAgICBpbnQgZnJhbWVXaWR0aCA9IDQ7Ci0gICAgaW50IGZyYW1lSGVpZ2h0
ID0gNDsKLSAgICBWaWRlb0ZpbGVSZW5kZXJlciB2aWRlb0ZpbGVSZW5kZXJlciA9Ci0gICAgICAg
IG5ldyBWaWRlb0ZpbGVSZW5kZXJlcih2aWRlb091dFBhdGgsIGZyYW1lV2lkdGgsIGZyYW1lSGVp
Z2h0LCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotCi0gICAgU3RyaW5nW10gZnJhbWVz
ID0gewotICAgICAgICAiVEhJUyBJUyBKVVNUIFNPTUUgVEVYVCB4IiwgIlRIRSBTRUNPTkQgRlJB
TUUgcXdlcnR5LiIsICJIRVJFIElTIFRIRSBUSFJJRCBGUkFNRSEifTsKLQotICAgIGZvciAoU3Ry
aW5nIGZyYW1lU3RyIDogZnJhbWVzKSB7Ci0gICAgICBpbnRbXSBwbGFuZVNpemVzID0gewotICAg
ICAgICAgIGZyYW1lV2lkdGggKiBmcmFtZVdpZHRoLCBmcmFtZVdpZHRoICogZnJhbWVIZWlnaHQg
LyA0LCBmcmFtZVdpZHRoICogZnJhbWVIZWlnaHQgLyA0fTsKLQotICAgICAgYnl0ZVtdIGZyYW1l
Qnl0ZXMgPSBmcmFtZVN0ci5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVTX0FTQ0lJKTsKLSAg
ICAgIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclszXTsKLSAgICAgIGlu
dCBwb3MgPSAwOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAg
eXV2UGxhbmVzW2ldID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChwbGFuZVNpemVzW2ldKTsK
LSAgICAgICAgeXV2UGxhbmVzW2ldLnB1dChmcmFtZUJ5dGVzLCBwb3MsIHBsYW5lU2l6ZXNbaV0p
OwotICAgICAgICBwb3MgKz0gcGxhbmVTaXplc1tpXTsKLSAgICAgIH0KLQotICAgICAgaW50W10g
eXV2U3RyaWRlcyA9IHtmcmFtZVdpZHRoLCBmcmFtZVdpZHRoIC8gMiwgZnJhbWVXaWR0aCAvIDJ9
OwotCi0gICAgICBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSA9Ci0gICAgICAgICAgbmV3
IFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lKGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCAwLCB5dXZT
dHJpZGVzLCB5dXZQbGFuZXMsIDApOwotCi0gICAgICB2aWRlb0ZpbGVSZW5kZXJlci5yZW5kZXJG
cmFtZShmcmFtZSk7Ci0gICAgfQotICAgIHZpZGVvRmlsZVJlbmRlcmVyLnJlbGVhc2UoKTsKLQot
ICAgIFJhbmRvbUFjY2Vzc0ZpbGUgd3JpdHRlbkZpbGUgPSBuZXcgUmFuZG9tQWNjZXNzRmlsZSh2
aWRlb091dFBhdGgsICJyIik7Ci0gICAgdHJ5IHsKLSAgICAgIGludCBsZW5ndGggPSAoaW50KSB3
cml0dGVuRmlsZS5sZW5ndGgoKTsKLSAgICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbbGVuZ3Ro
XTsKLSAgICAgIHdyaXR0ZW5GaWxlLnJlYWRGdWxseShkYXRhKTsKLSAgICAgIFN0cmluZyBmaWxl
Q29udGVudCA9IG5ldyBTdHJpbmcoZGF0YSwgU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSSk7Ci0g
ICAgICBTdHJpbmcgZXhwZWN0ZWQgPSAiWVVWNE1QRUcyIEM0MjAgVzQgSDQgSXAgRjMwOjEgQTE6
MVxuIgotICAgICAgICAgICsgIkZSQU1FXG4iCi0gICAgICAgICAgKyAiVEhJUyBJUyBKVVNUIFNP
TUUgVEVYVCB4RlJBTUVcbiIKLSAgICAgICAgICArICJUSEUgU0VDT05EIEZSQU1FIHF3ZXJ0eS5G
UkFNRVxuIgotICAgICAgICAgICsgIkhFUkUgSVMgVEhFIFRIUklEIEZSQU1FISI7Ci0gICAgICBh
c3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZpbGVDb250ZW50KTsKLSAgICB9IGZpbmFsbHkgewotICAg
ICAgd3JpdHRlbkZpbGUuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBuZXcgRmlsZSh2aWRlb091dFBh
dGgpLmRlbGV0ZSgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy90ZXN0L2NhcHR1cmV0ZXN0dmlkZW8ueTRtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRlby55NG0JKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRl
by55NG0JKG5vbmV4aXN0ZW50KQpAQCAtMSw1ICswLDAgQEAKLVlVVjRNUEVHMiBDNDIwIFc0IEg0
IElwIEYzMDoxIEExOjEKLUZSQU1FCi1USElTIElTIEpVU1QgU09NRSBURVhUIHhGUkFNRQotVEhF
IFNFQ09ORCBGUkFNRSBxd2VydHkuRlJBTUUKLUhFUkUgSVMgVEhFIFRIUklEIEZSQU1FIQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9BbmRyb2lkTWFuaWZlc3QueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvQW5kcm9pZE1h
bmlmZXN0LnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9BbmRyb2lkTWFuaWZlc3QueG1s
CShub25leGlzdGVudCkKQEAgLTEsNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5h
bmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgICAgcGFja2FnZT0ib3JnLmFwcHNw
b3QuYXBwcnRjIgotICAgICAgICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9IjEiCi0gICAgICAgICAg
YW5kcm9pZDp2ZXJzaW9uTmFtZT0iMS4wIj4KLQotICAgIDx1c2VzLWZlYXR1cmUgYW5kcm9pZDpu
YW1lPSJhbmRyb2lkLmhhcmR3YXJlLmNhbWVyYSIgLz4KLSAgICA8dXNlcy1mZWF0dXJlIGFuZHJv
aWQ6bmFtZT0iYW5kcm9pZC5oYXJkd2FyZS5jYW1lcmEuYXV0b2ZvY3VzIiAvPgotICAgIDx1c2Vz
LWZlYXR1cmUgYW5kcm9pZDpnbEVzVmVyc2lvbj0iMHgwMDAyMDAwMCIgYW5kcm9pZDpyZXF1aXJl
ZD0idHJ1ZSIgLz4KLSAgICA8dXNlcy1zZGsgYW5kcm9pZDptaW5TZGtWZXJzaW9uPSIxNiIgYW5k
cm9pZDp0YXJnZXRTZGtWZXJzaW9uPSIyMSIgLz4KLQotICAgIDx1c2VzLXBlcm1pc3Npb24gYW5k
cm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ0FNRVJBIiAvPgotICAgIDx1c2VzLXBlcm1p
c3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ0hBTkdFX05FVFdPUktfU1RB
VEUiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlz
c2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MiIC8+Ci0gICAgPHVzZXMtcGVybWlzc2lvbiBhbmRy
b2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5SRUNPUkRfQVVESU8iIC8+Ci0gICAgPHVzZXMt
cGVybWlzc2lvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCIgLz4K
LSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5wZXJtaXNzaW9uLldS
SVRFX0VYVEVSTkFMX1NUT1JBR0UiLz4KLSAgICA8dXNlcy1wZXJtaXNzaW9uIGFuZHJvaWQ6bmFt
ZT0iYW5kcm9pZC5wZXJtaXNzaW9uLkFDQ0VTU19ORVRXT1JLX1NUQVRFIiAvPgotICAgIDx1c2Vz
LXBlcm1pc3Npb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnBlcm1pc3Npb24uQ0FQVFVSRV9WSURF
T19PVVRQVVQiIC8+Ci0KLSAgICA8YXBwbGljYXRpb24gYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9h
cHBfbmFtZSIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDppY29uPSJAZHJhd2FibGUvaWNfbGF1
bmNoZXIiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6YWxsb3dCYWNrdXA9ImZhbHNlIj4KLQot
ICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJDb25uZWN0QWN0aXZpdHkiCi0gICAgICAg
ICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIgotICAgICAgICAgICAg
ICAgICAgYW5kcm9pZDp3aW5kb3dTb2Z0SW5wdXRNb2RlPSJhZGp1c3RQYW4iPgotICAgICAgICAg
ICAgPGludGVudC1maWx0ZXI+Ci0gICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9
ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlOIi8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5
IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiLz4KLSAgICAg
ICAgICAgIDwvaW50ZW50LWZpbHRlcj4KLQotICAgICAgICAgICAgPGludGVudC1maWx0ZXI+Ci0g
ICAgICAgICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlv
bi5WSUVXIi8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9p
ZC5pbnRlbnQuY2F0ZWdvcnkuREVGQVVMVCIvPgotICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBh
bmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmNhdGVnb3J5LkJST1dTQUJMRSIvPgotICAgICAg
ICAgICAgICAgIDxkYXRhIGFuZHJvaWQ6c2NoZW1lPSJodHRwcyIgYW5kcm9pZDpob3N0PSJhcHBy
LnRjIi8+Ci0gICAgICAgICAgICAgICAgPGRhdGEgYW5kcm9pZDpzY2hlbWU9Imh0dHAiIGFuZHJv
aWQ6aG9zdD0iYXBwci50YyIvPgotICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgotICAgICAg
ICA8L2FjdGl2aXR5PgotCi0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9IlNldHRpbmdz
QWN0aXZpdHkiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5nL3NldHRp
bmdzX25hbWUiPgotICAgICAgICA8L2FjdGl2aXR5PgotCi0gICAgICAgIDxhY3Rpdml0eSBhbmRy
b2lkOm5hbWU9IkNhbGxBY3Rpdml0eSIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9
IkBzdHJpbmcvYXBwX25hbWUiCi0gICAgICAgICAgICAgICAgICBhbmRyb2lkOnNjcmVlbk9yaWVu
dGF0aW9uPSJmdWxsVXNlciIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29uZmlnQ2hhbmdl
cz0ib3JpZW50YXRpb258c2NyZWVuU2l6ZSIKLSAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dGhl
bWU9IkBzdHlsZS9DYWxsQWN0aXZpdHlUaGVtZSI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAg
PC9hcHBsaWNhdGlvbj4KLTwvbWFuaWZlc3Q+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL09XTkVSUwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL09XTkVSUwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9PV05FUlMJKG5vbmV4
aXN0ZW50KQpAQCAtMSwyICswLDAgQEAKLW1hZ2plZEB3ZWJydGMub3JnCi1zYWthbEB3ZWJydGMu
b3JnCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL1JFQURNRQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9SRUFETUUJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMyArMCwwIEBA
Ci1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBhbiBleGFtcGxlIEFuZHJvaWQgY2xpZW50IGZvciBo
dHRwczovL2FwcHIudGMKLQotUHJlcmVxdWlzaXRlczoKLS0gIkdldHRpbmcgdGhlIGNvZGUiLCAi
Q29tcGlsaW5nIiwgYW5kICJVc2luZyB0aGUgQnVuZGxlZCBBbmRyb2lkIFNESy9OREsiCi0gIG9u
IGh0dHA6Ly93d3cud2VicnRjLm9yZy9uYXRpdmUtY29kZS9hbmRyb2lkCi0KLUV4YW1wbGUgb2Yg
YnVpbGRpbmcgJiB1c2luZyB0aGUgYXBwOgotCi1jZCA8cGF0aC90by93ZWJydGM+L3NyYwotbmlu
amEgLUMgb3V0L0RlZmF1bHQgQXBwUlRDTW9iaWxlCi1hZGIgaW5zdGFsbCAtciBvdXQvRGVmYXVs
dC9hcGtzL0FwcFJUQ01vYmlsZS5hcGsKLQotSW4gZGVza3RvcCBjaHJvbWUsIG5hdmlnYXRlIHRv
IGh0dHBzOi8vYXBwci50YyBhbmQgbm90ZSB0aGUgcj08Tk5OPiByb29tCi10aGlzIHJlZGlyZWN0
cyB0byBvciBuYXZpZ2F0ZSBkaXJlY3RseSB0byBodHRwczovL2FwcHIudGMvci88Tk5OPiB3aXRo
Ci15b3VyIG93biByb29tIG51bWJlci4gTGF1bmNoIEFwcFJUQyBvbiB0aGUgZGV2aWNlIGFuZCBh
ZGQgc2FtZSA8Tk5OPiBpbnRvIHRoZSByb29tIG5hbWUgbGlzdC4KLQotWW91IGNhbiBhbHNvIHJ1
biBhcHBsaWNhdGlvbiBmcm9tIGEgY29tbWFuZCBsaW5lIHRvIGNvbm5lY3QgdG8gdGhlIGZpcnN0
IHJvb20gaW4gYSBsaXN0OgotYWRiIHNoZWxsIGFtIHN0YXJ0IC1uIG9yZy5hcHBzcG90LmFwcHJ0
Yy8uQ29ubmVjdEFjdGl2aXR5IC1hIGFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXCi1UaGlzIHNo
b3VsZCByZXN1bHQgaW4gdGhlIGFwcCBsYXVuY2hpbmcgb24gQW5kcm9pZCBhbmQgY29ubmVjdGlu
ZyB0byB0aGUgMy1kb3QtYXBwcnRjCi1wYWdlIGRpc3BsYXllZCBpbiB0aGUgZGVza3RvcCBicm93
c2VyLgotVG8gcnVuIGxvb3BiYWNrIHRlc3QgZXhlY3V0ZSBmb2xsb3dpbmcgY29tbWFuZDoKLWFk
YiBzaGVsbCBhbSBzdGFydCAtbiBvcmcuYXBwc3BvdC5hcHBydGMvLkNvbm5lY3RBY3Rpdml0eSAt
YSBhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyAtLWV6ICJvcmcuYXBwc3BvdC5hcHBydGMuTE9P
UEJBQ0siIHRydWUKLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9hbnQucHJvcGVydGllcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL2FudC5wcm9wZXJ0aWVzCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL2FudC5wcm9wZXJ0
aWVzCShub25leGlzdGVudCkKQEAgLTEsMTcgKzAsMCBAQAotIyBUaGlzIGZpbGUgaXMgdXNlZCB0
byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyB1c2VkIGJ5IHRoZSBBbnQgYnVpbGQgc3lzdGVtLgot
IwotIyBUaGlzIGZpbGUgbXVzdCBiZSBjaGVja2VkIGludG8gVmVyc2lvbiBDb250cm9sIFN5c3Rl
bXMsIGFzIGl0IGlzCi0jIGludGVncmFsIHRvIHRoZSBidWlsZCBzeXN0ZW0gb2YgeW91ciBwcm9q
ZWN0LgotCi0jIFRoaXMgZmlsZSBpcyBvbmx5IHVzZWQgYnkgdGhlIEFudCBzY3JpcHQuCi0KLSMg
WW91IGNhbiB1c2UgdGhpcyB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBzdWNoIGFzCi0jICAn
c291cmNlLmRpcicgZm9yIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGphdmEgc291cmNlIGZvbGRlciBh
bmQKLSMgICdvdXQuZGlyJyBmb3IgdGhlIGxvY2F0aW9uIG9mIHlvdXIgb3V0cHV0IGZvbGRlci4K
LQotIyBZb3UgY2FuIGFsc28gdXNlIGl0IGRlZmluZSBob3cgdGhlIHJlbGVhc2UgYnVpbGRzIGFy
ZSBzaWduZWQgYnkgZGVjbGFyaW5nCi0jIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKLSMgICdr
ZXkuc3RvcmUnIGZvciB0aGUgbG9jYXRpb24gb2YgeW91ciBrZXlzdG9yZSBhbmQKLSMgICdrZXku
YWxpYXMnIGZvciB0aGUgbmFtZSBvZiB0aGUga2V5IHRvIHVzZS4KLSMgVGhlIHBhc3N3b3JkIHdp
bGwgYmUgYXNrZWQgZHVyaW5nIHRoZSBidWlsZCB3aGVuIHlvdSB1c2UgdGhlICdyZWxlYXNlJyB0
YXJnZXQuCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvYnVpbGQueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvYnVpbGQu
eG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL2J1aWxkLnhtbAkobm9uZXhpc3RlbnQpCkBA
IC0xLDkyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08
cHJvamVjdCBuYW1lPSJBcHBSVENNb2JpbGUiIGRlZmF1bHQ9ImhlbHAiPgotCi0gICAgPCEtLSBU
aGUgbG9jYWwucHJvcGVydGllcyBmaWxlIGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZWQgYnkgdGhlICdh
bmRyb2lkJyB0b29sLgotICAgICAgICAgSXQgY29udGFpbnMgdGhlIHBhdGggdG8gdGhlIFNESy4g
SXQgc2hvdWxkICpOT1QqIGJlIGNoZWNrZWQgaW50bwotICAgICAgICAgVmVyc2lvbiBDb250cm9s
IFN5c3RlbXMuIC0tPgotICAgIDxwcm9wZXJ0eSBmaWxlPSJsb2NhbC5wcm9wZXJ0aWVzIiAvPgot
Ci0gICAgPCEtLSBUaGUgYW50LnByb3BlcnRpZXMgZmlsZSBjYW4gYmUgY3JlYXRlZCBieSB5b3Uu
IEl0IGlzIG9ubHkgZWRpdGVkIGJ5IHRoZQotICAgICAgICAgJ2FuZHJvaWQnIHRvb2wgdG8gYWRk
IHByb3BlcnRpZXMgdG8gaXQuCi0gICAgICAgICBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGFuZ2Ug
c29tZSBBbnQgc3BlY2lmaWMgYnVpbGQgcHJvcGVydGllcy4KLSAgICAgICAgIEhlcmUgYXJlIHNv
bWUgcHJvcGVydGllcyB5b3UgbWF5IHdhbnQgdG8gY2hhbmdlL3VwZGF0ZToKLQotICAgICAgICAg
c291cmNlLmRpcgotICAgICAgICAgICAgIFRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgZGlyZWN0b3J5
LiBEZWZhdWx0IGlzICdzcmMnLgotICAgICAgICAgb3V0LmRpcgotICAgICAgICAgICAgIFRoZSBu
YW1lIG9mIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiBEZWZhdWx0IGlzICdiaW4nLgotCi0gICAgICAg
ICBGb3Igb3RoZXIgb3ZlcnJpZGFibGUgcHJvcGVydGllcywgbG9vayBhdCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBydWxlcwotICAgICAgICAgZmlsZXMgaW4gdGhlIFNESywgYXQgdG9vbHMvYW50L2J1
aWxkLnhtbAotCi0gICAgICAgICBQcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gdGhlIFNESyBsb2NhdGlv
biBvciB0aGUgcHJvamVjdCB0YXJnZXQgc2hvdWxkCi0gICAgICAgICBiZSB1cGRhdGVkIHVzaW5n
IHRoZSAnYW5kcm9pZCcgdG9vbCB3aXRoIHRoZSAndXBkYXRlJyBhY3Rpb24uCi0KLSAgICAgICAg
IFRoaXMgZmlsZSBpcyBhbiBpbnRlZ3JhbCBwYXJ0IG9mIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHlv
dXIKLSAgICAgICAgIGFwcGxpY2F0aW9uIGFuZCBzaG91bGQgYmUgY2hlY2tlZCBpbnRvIFZlcnNp
b24gQ29udHJvbCBTeXN0ZW1zLgotCi0gICAgICAgICAtLT4KLSAgICA8cHJvcGVydHkgZmlsZT0i
YW50LnByb3BlcnRpZXMiIC8+Ci0KLSAgICA8IS0tIGlmIHNkay5kaXIgd2FzIG5vdCBzZXQgZnJv
bSBvbmUgb2YgdGhlIHByb3BlcnR5IGZpbGUsIHRoZW4KLSAgICAgICAgIGdldCBpdCBmcm9tIHRo
ZSBBTkRST0lEX0hPTUUgZW52IHZhci4KLSAgICAgICAgIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9y
ZSB3ZSBsb2FkIHByb2plY3QucHJvcGVydGllcyBzaW5jZQotICAgICAgICAgdGhlIHByb2d1YXJk
IGNvbmZpZyBjYW4gdXNlIHNkay5kaXIgLS0+Ci0gICAgPHByb3BlcnR5IGVudmlyb25tZW50PSJl
bnYiIC8+Ci0gICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0ic2RrLmRpciIgdmFsdWU9IiR7ZW52LkFO
RFJPSURfU0RLX1JPT1R9Ij4KLSAgICAgICAgPGlzc2V0IHByb3BlcnR5PSJlbnYuQU5EUk9JRF9T
REtfUk9PVCIgLz4KLSAgICA8L2NvbmRpdGlvbj4KLQotICAgIDwhLS0gVGhlIHByb2plY3QucHJv
cGVydGllcyBmaWxlIGlzIGNyZWF0ZWQgYW5kIHVwZGF0ZWQgYnkgdGhlICdhbmRyb2lkJwotICAg
ICAgICAgdG9vbCwgYXMgd2VsbCBhcyBBRFQuCi0KLSAgICAgICAgIFRoaXMgY29udGFpbnMgcHJv
amVjdCBzcGVjaWZpYyBwcm9wZXJ0aWVzIHN1Y2ggYXMgcHJvamVjdCB0YXJnZXQsIGFuZCBsaWJy
YXJ5Ci0gICAgICAgICBkZXBlbmRlbmNpZXMuIExvd2VyIGxldmVsIGJ1aWxkIHByb3BlcnRpZXMg
YXJlIHN0b3JlZCBpbiBhbnQucHJvcGVydGllcwotICAgICAgICAgKG9yIGluIC5jbGFzc3BhdGgg
Zm9yIEVjbGlwc2UgcHJvamVjdHMpLgotCi0gICAgICAgICBUaGlzIGZpbGUgaXMgYW4gaW50ZWdy
YWwgcGFydCBvZiB0aGUgYnVpbGQgc3lzdGVtIGZvciB5b3VyCi0gICAgICAgICBhcHBsaWNhdGlv
biBhbmQgc2hvdWxkIGJlIGNoZWNrZWQgaW50byBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4gLS0+
Ci0gICAgPGxvYWRwcm9wZXJ0aWVzIHNyY0ZpbGU9InByb2plY3QucHJvcGVydGllcyIgLz4KLQot
ICAgIDwhLS0gcXVpY2sgY2hlY2sgb24gc2RrLmRpciAtLT4KLSAgICA8ZmFpbAotICAgICAgICAg
ICAgbWVzc2FnZT0ic2RrLmRpciBpcyBtaXNzaW5nLiBNYWtlIHN1cmUgdG8gZ2VuZXJhdGUgbG9j
YWwucHJvcGVydGllcyB1c2luZyAnYW5kcm9pZCB1cGRhdGUgcHJvamVjdCcgb3IgdG8gaW5qZWN0
IGl0IHRocm91Z2ggdGhlIEFORFJPSURfSE9NRSBlbnZpcm9ubWVudCB2YXJpYWJsZS4iCi0gICAg
ICAgICAgICB1bmxlc3M9InNkay5kaXIiCi0gICAgLz4KLQotICAgIDwhLS0KLSAgICAgICAgSW1w
b3J0IHBlciBwcm9qZWN0IGN1c3RvbSBidWlsZCBydWxlcyBpZiBwcmVzZW50IGF0IHRoZSByb290
IG9mIHRoZSBwcm9qZWN0LgotICAgICAgICBUaGlzIGlzIHRoZSBwbGFjZSB0byBwdXQgY3VzdG9t
IGludGVybWVkaWFyeSB0YXJnZXRzIHN1Y2ggYXM6Ci0gICAgICAgICAgICAtcHJlLWJ1aWxkCi0g
ICAgICAgICAgICAtcHJlLWNvbXBpbGUKLSAgICAgICAgICAgIC1wb3N0LWNvbXBpbGUgKFRoaXMg
aXMgdHlwaWNhbGx5IHVzZWQgZm9yIGNvZGUgb2JmdXNjYXRpb24uCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb21waWxlZCBjb2RlIGxvY2F0aW9uOiAke291dC5jbGFzc2VzLmFic29sdXRl
LmRpcn0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoaXMgaXMgbm90IGRvbmUgaW4g
cGxhY2UsIG92ZXJyaWRlICR7b3V0LmRleC5pbnB1dC5hYnNvbHV0ZS5kaXJ9KQotICAgICAgICAg
ICAgLXBvc3QtcGFja2FnZQotICAgICAgICAgICAgLXBvc3QtYnVpbGQKLSAgICAgICAgICAgIC1w
cmUtY2xlYW4KLSAgICAtLT4KLSAgICA8aW1wb3J0IGZpbGU9ImN1c3RvbV9ydWxlcy54bWwiIG9w
dGlvbmFsPSJ0cnVlIiAvPgotCi0gICAgPCEtLSBJbXBvcnQgdGhlIGFjdHVhbCBidWlsZCBmaWxl
LgotCi0gICAgICAgICBUbyBjdXN0b21pemUgZXhpc3RpbmcgdGFyZ2V0cywgdGhlcmUgYXJlIHR3
byBvcHRpb25zOgotICAgICAgICAgLSBDdXN0b21pemUgb25seSBvbmUgdGFyZ2V0OgotICAgICAg
ICAgICAgIC0gY29weS9wYXN0ZSB0aGUgdGFyZ2V0IGludG8gdGhpcyBmaWxlLCAqYmVmb3JlKiB0
aGUKLSAgICAgICAgICAgICAgIDxpbXBvcnQ+IHRhc2suCi0gICAgICAgICAgICAgLSBjdXN0b21p
emUgaXQgdG8geW91ciBuZWVkcy4KLSAgICAgICAgIC0gQ3VzdG9taXplIHRoZSB3aG9sZSBjb250
ZW50IG9mIGJ1aWxkLnhtbAotICAgICAgICAgICAgIC0gY29weS9wYXN0ZSB0aGUgY29udGVudCBv
ZiB0aGUgcnVsZXMgZmlsZXMgKG1pbnVzIHRoZSB0b3Agbm9kZSkKLSAgICAgICAgICAgICAgIGlu
dG8gdGhpcyBmaWxlLCByZXBsYWNpbmcgdGhlIDxpbXBvcnQ+IHRhc2suCi0gICAgICAgICAgICAg
LSBjdXN0b21pemUgdG8geW91ciBuZWVkcy4KLQotICAgICAgICAgKioqKioqKioqKioqKioqKioq
KioqKioKLSAgICAgICAgICoqKioqKiBJTVBPUlRBTlQgKioqKioqCi0gICAgICAgICAqKioqKioq
KioqKioqKioqKioqKioqKgotICAgICAgICAgSW4gYWxsIGNhc2VzIHlvdSBtdXN0IHVwZGF0ZSB0
aGUgdmFsdWUgb2YgdmVyc2lvbi10YWcgYmVsb3cgdG8gcmVhZCAnY3VzdG9tJyBpbnN0ZWFkIG9m
IGFuIGludGVnZXIsCi0gICAgICAgICBpbiBvcmRlciB0byBhdm9pZCBoYXZpbmcgeW91ciBmaWxl
IGJlIG92ZXJyaWRkZW4gYnkgdG9vbHMgc3VjaCBhcyAiYW5kcm9pZCB1cGRhdGUgcHJvamVjdCIK
LSAgICAtLT4KLSAgICA8IS0tIHZlcnNpb24tdGFnOiAxIC0tPgotICAgIDxpbXBvcnQgZmlsZT0i
JHtzZGsuZGlyfS90b29scy9hbnQvYnVpbGQueG1sIiAvPgotCi08L3Byb2plY3Q+CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Byb2plY3QucHJvcGVydGllcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Byb2plY3QucHJvcGVy
dGllcwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9wcm9qZWN0LnByb3BlcnRpZXMJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxNiArMCwwIEBACi0jIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCBieSBBbmRyb2lkIFRvb2xzLgotIyBEbyBub3QgbW9kaWZ5IHRoaXMgZmlsZSAtLSBZ
T1VSIENIQU5HRVMgV0lMTCBCRSBFUkFTRUQhCi0jCi0jIFRoaXMgZmlsZSBtdXN0IGJlIGNoZWNr
ZWQgaW4gVmVyc2lvbiBDb250cm9sIFN5c3RlbXMuCi0jCi0jIFRvIGN1c3RvbWl6ZSBwcm9wZXJ0
aWVzIHVzZWQgYnkgdGhlIEFudCBidWlsZCBzeXN0ZW0gZWRpdAotIyAiYW50LnByb3BlcnRpZXMi
LCBhbmQgb3ZlcnJpZGUgdmFsdWVzIHRvIGFkYXB0IHRoZSBzY3JpcHQgdG8geW91cgotIyBwcm9q
ZWN0IHN0cnVjdHVyZS4KLSMKLSMgVG8gZW5hYmxlIFByb0d1YXJkIHRvIHNocmluayBhbmQgb2Jm
dXNjYXRlIHlvdXIgY29kZSwgdW5jb21tZW50IHRoaXMgKGF2YWlsYWJsZSBwcm9wZXJ0aWVzOiBz
ZGsuZGlyLCB1c2VyLmhvbWUpOgotI3Byb2d1YXJkLmNvbmZpZz0ke3Nkay5kaXJ9L3Rvb2xzL3By
b2d1YXJkL3Byb2d1YXJkLWFuZHJvaWQudHh0OnByb2d1YXJkLXByb2plY3QudHh0Ci0KLSMgUHJv
amVjdCB0YXJnZXQuCi10YXJnZXQ9YW5kcm9pZC0yMgotCi1qYXZhLmNvbXBpbGVyYXJncz0tWGxp
bnQ6YWxsIC1XZXJyb3IKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvZGlzY29ubmVjdC5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlw
ZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9y
ZXMvZHJhd2FibGUtaGRwaS9kaXNjb25uZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS1oZHBpL2Rpc2Nvbm5lY3QucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy9kcmF3YWJsZS1oZHBpL2Rpc2Nvbm5lY3QucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvZGlzY29ubmVjdC5wbmcKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3Qg
ZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19h
Y3Rpb25fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhk
cGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9y
ZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCShub25leGlzdGVudCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Z1
bGxfc2NyZWVuLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAs
MCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJv
cGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9t
X2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBh
cyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxs
X3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rp
b25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJ
KG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRw
aS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRl
ZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
aGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJr
ZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCShub25l
eGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNf
bGF1bmNoZXIucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCww
ICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9w
ZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sb29wYmFja19jYWxsLnBuZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS1oZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2RyYXdhYmxlLWhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sb29wYmFj
a19jYWxsLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAj
IwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvZGlzY29ubmVjdC5wbmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUt
dHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
bGRwaS9kaXNjb25uZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBp
L2Rpc2Nvbm5lY3QucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1s
ZHBpL2Rpc2Nvbm5lY3QucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2RyYXdhYmxlLWxkcGkvZGlzY29ubmVjdC5wbmcKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBp
L2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmls
ZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fZnVsbF9z
Y3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9u
X2Z1bGxfc2NyZWVuLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
bGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBu
ZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVu
LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0
eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zy
b21fZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJs
ZS1sZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25f
cmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUt
dHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVu
Y2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCShub25leGlzdGVudCkKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sb29wYmFja19jYWxsLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNh
bm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBl
ID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBp
L2ljX2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxk
cGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2Ry
YXdhYmxlLWxkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sb29wYmFja19jYWxsLnBuZwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2RyYXdhYmxlLW1kcGkvZGlzY29ubmVjdC5wbmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlz
cGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9kaXNjb25u
ZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2Rpc2Nvbm5lY3Qu
cG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2Rpc2Nvbm5l
Y3QucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdh
YmxlLW1kcGkvZGlzY29ubmVjdC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBl
CiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9m
dWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMg
YSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVu
LnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rp
b25fZnVsbF9zY3JlZW4ucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2Ry
YXdhYmxlLW1kcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWlt
ZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJs
ZS1tZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3Jl
ZW4ucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2Fj
dGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21f
ZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSAr
MCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBw
cm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3Zu
Om1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUtbWRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2Ry
YXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
RGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtbWRwaS9pY19sb29wYmFja19jYWxsLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xvb3BiYWNr
X2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbG9vcGJh
Y2tfY2FsbC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkv
aWNfbG9vcGJhY2tfY2FsbC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19sb29wYmFja19jYWxsLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdh
YmxlLXhoZHBpL2Rpc2Nvbm5lY3QucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUg
bWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2Rpc2Nvbm5lY3QucG5nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2Rpc2Nvbm5lY3QucG5nCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9kaXNjb25uZWN0LnBuZwko
bm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRw
aS9kaXNjb25uZWN0LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEg
KzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
cHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9mdWxsX3Nj
cmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5n
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25f
ZnVsbF9zY3JlZW4ucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpE
ZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS14aGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LXhoZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2Ny
ZWVuLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNf
YWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zy
b21fZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAt
MSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUu
CnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sb29wYmFja19jYWxsLnBuZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9p
Y19sb29wYmFja19jYWxsLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRw
aS9pY19sb29wYmFja19jYWxsLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUteGhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9sYXlvdXQvYWN0aXZpdHlfY2FsbC54bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
bGF5b3V0L2FjdGl2aXR5X2NhbGwueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9s
YXlvdXQvYWN0aXZpdHlfY2FsbC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNyArMCwwIEBACi08
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotCi08UmVsYXRpdmVMYXlvdXQK
LSAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2Fu
ZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICBhbmRy
b2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+Ci0KLSAgICA8b3JnLmFwcHNwb3QuYXBw
cnRjLlBlcmNlbnRGcmFtZUxheW91dAotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3JlbW90ZV92
aWRlb19sYXlvdXQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQi
Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KLSAgICAgICAg
PG9yZy53ZWJydGMuU3VyZmFjZVZpZXdSZW5kZXJlcgotICAgICAgICAgICAgYW5kcm9pZDppZD0i
QCtpZC9yZW1vdGVfdmlkZW9fdmlldyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRo
PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBf
Y29udGVudCIgLz4KLSAgICA8L29yZy5hcHBzcG90LmFwcHJ0Yy5QZXJjZW50RnJhbWVMYXlvdXQ+
Ci0KLSAgICA8b3JnLmFwcHNwb3QuYXBwcnRjLlBlcmNlbnRGcmFtZUxheW91dAotICAgICAgICBh
bmRyb2lkOmlkPSJAK2lkL2xvY2FsX3ZpZGVvX2xheW91dCIKLSAgICAgICAgYW5kcm9pZDpsYXlv
dXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJt
YXRjaF9wYXJlbnQiPgotICAgICAgICA8b3JnLndlYnJ0Yy5TdXJmYWNlVmlld1JlbmRlcmVyCi0g
ICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2xvY2FsX3ZpZGVvX3ZpZXciCi0gICAgICAgICAg
ICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9p
ZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiIC8+Ci0gICAgPC9vcmcuYXBwc3BvdC5hcHBy
dGMuUGVyY2VudEZyYW1lTGF5b3V0PgotCi0gICAgPEZyYW1lTGF5b3V0Ci0gICAgICAgIGFuZHJv
aWQ6aWQ9IkAraWQvY2FsbF9mcmFnbWVudF9jb250YWluZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5
b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0i
bWF0Y2hfcGFyZW50IiAvPgotICAgIDxGcmFtZUxheW91dAotICAgICAgICBhbmRyb2lkOmlkPSJA
K2lkL2h1ZF9mcmFnbWVudF9jb250YWluZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRo
PSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFy
ZW50IiAvPgotCi08L1JlbGF0aXZlTGF5b3V0PgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2FjdGl2
aXR5X2Nvbm5lY3QueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9hY3Rpdml0eV9j
b25uZWN0LnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2FjdGl2aXR5
X2Nvbm5lY3QueG1sCShub25leGlzdGVudCkKQEAgLTEsNzcgKzAsMCBAQAotPD94bWwgdmVyc2lv
bj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxMaW5lYXJMYXlvdXQKLSAgICB4bWxuczphbmRy
b2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgYW5k
cm9pZDpsYXlvdXRfbWFyZ2luPSIxNmRwIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRj
aF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAg
YW5kcm9pZDpvcmllbnRhdGlvbj0idmVydGljYWwiCi0gICAgYW5kcm9pZDp3ZWlnaHRTdW09IjEi
Ci0gICAgYW5kcm9pZDpsYXlvdXRfY2VudGVySG9yaXpvbnRhbD0idHJ1ZSI+Ci0KLSAgICA8VGV4
dFZpZXcKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yb29tX2VkaXR0ZXh0X2Rlc2NyaXB0aW9u
IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBh
bmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDp0ZXh0
PSJAc3RyaW5nL3Jvb21fZGVzY3JpcHRpb24iLz4KLQotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAg
ICAgYW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgYW5kcm9pZDpsYXlv
dXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3
cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyIgotICAgICAgICBh
bmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjhkcCI+Ci0KLSAgICAgICAgPEVkaXRUZXh0Ci0g
ICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3Jvb21fZWRpdHRleHQiCi0gICAgICAgICAgICBh
bmRyb2lkOmxheW91dF93aWR0aD0iMGRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVp
Z2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEi
Ci0gICAgICAgICAgICBhbmRyb2lkOnNpbmdsZUxpbmU9InRydWUiCi0gICAgICAgICAgICBhbmRy
b2lkOmltZU9wdGlvbnM9ImFjdGlvbkRvbmUiCi0gICAgICAgICAgICBhbmRyb2lkOmlucHV0VHlw
ZT0idGV4dCIvPgotCi0gICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICAgYW5kcm9pZDpp
ZD0iQCtpZC9jb25uZWN0X2J1dHRvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRo
PSI0OGRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgotICAgICAg
ICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvY29ubmVjdF9kZXNjcmlw
dGlvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUv
c3ltX2FjdGlvbl9jYWxsIiAvPgotCi0gICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICAg
YW5kcm9pZDppZD0iQCtpZC9hZGRfZmF2b3JpdGVfYnV0dG9uIgotICAgICAgICAgICAgYW5kcm9p
ZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9
IjQ4ZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9h
ZGRfZmF2b3JpdGVfZGVzY3JpcHRpb24iCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9
IkBhbmRyb2lkOmRyYXdhYmxlL2ljX2lucHV0X2FkZCIgLz4KLSAgICA8L0xpbmVhckxheW91dD4K
LQotICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3Jvb21fbGlzdHZpZXdf
ZGVzY3JpcHRpb24iCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQi
Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIKLSAgICAgICAgYW5kcm9pZDps
YXlvdXRfbWFyZ2luVG9wPSI4ZHAiCi0gICAgICAgIGFuZHJvaWQ6bGluZXM9IjEiCi0gICAgICAg
IGFuZHJvaWQ6bWF4TGluZXM9IjEiCi0gICAgICAgIGFuZHJvaWQ6dGV4dEFwcGVhcmFuY2U9Ij9h
bmRyb2lkOmF0dHIvdGV4dEFwcGVhcmFuY2VNZWRpdW0iCi0gICAgICAgIGFuZHJvaWQ6dGV4dD0i
QHN0cmluZy9mYXZvcml0ZXMiCi0gICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVyX3ZlcnRp
Y2FsIi8+Ci0KLSAgICA8RnJhbWVMYXlvdXQKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9
Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSIwZHAiCi0gICAg
ICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSI+Ci0KLSAgICAgICAgPExpc3RWaWV3Ci0gICAg
ICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3Jvb21fbGlzdHZpZXciCi0gICAgICAgICAgICBhbmRy
b2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmRyYXdTZWxlY3Rv
ck9uVG9wPSJmYWxzZSIgLz4KLQotICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgIGFuZHJv
aWQ6aWQ9IkBhbmRyb2lkOmlkL2VtcHR5IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lk
dGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0
Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgICAg
ICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvbm9fZmF2b3JpdGVzIiAvPgotICAgIDwvRnJhbWVM
YXlvdXQ+Ci08L0xpbmVhckxheW91dD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9sYXlvdXQvZnJhZ21lbnRfY2FsbC54bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9y
ZXMvbGF5b3V0L2ZyYWdtZW50X2NhbGwueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy9sYXlvdXQvZnJhZ21lbnRfY2FsbC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NyArMCwwIEBA
Ci08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotCi08UmVsYXRpdmVMYXlv
dXQKLSAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVz
L2FuZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICBh
bmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+Ci0KLSAgICA8VGV4dFZpZXcKLSAg
ICAgICAgYW5kcm9pZDppZD0iQCtpZC9jb250YWN0X25hbWVfY2FsbCIKLSAgICAgICAgYW5kcm9p
ZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVp
Z2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlckhvcml6b250
YWw9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2Fib3ZlPSJAK2lkL2J1dHRvbnNfY2Fs
bF9jb250YWluZXIiCi0gICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjI0c3AiCi0gICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X21hcmdpbj0iOGRwIi8+Ci0KLSAgICA8TGluZWFyTGF5b3V0Ci0gICAgICAg
ICAgIGFuZHJvaWQ6aWQ9IkAraWQvYnV0dG9uc19jYWxsX2NvbnRhaW5lciIKLSAgICAgICAgICAg
YW5kcm9pZDpvcmllbnRhdGlvbj0iaG9yaXpvbnRhbCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfYWJvdmU9IkAraWQvY2FwdHVyZV9mb3JtYXRfdGV4dF9jYWxsIgotICAgICAgICAgICBhbmRy
b2lkOmxheW91dF9hbGlnbldpdGhQYXJlbnRJZk1pc3Npbmc9InRydWUiCi0gICAgICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X21hcmdpbkJvdHRvbT0iMzJkcCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfY2VudGVySG9yaXpvbnRhbD0idHJ1ZSIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lk
dGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFw
X2NvbnRlbnQiPgotCi0gICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgIGFuZHJvaWQ6aWQ9
IkAraWQvYnV0dG9uX2NhbGxfZGlzY29ubmVjdCIKLSAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3Jv
dW5kPSJAZHJhd2FibGUvZGlzY29ubmVjdCIKLSAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVz
Y3JpcHRpb249IkBzdHJpbmcvZGlzY29ubmVjdF9jYWxsIgotICAgICAgICAgICBhbmRyb2lkOmxh
eW91dF9tYXJnaW5FbmQ9IjE2ZHAiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0
OGRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiLz4KLQotICAgICAg
IDxJbWFnZUJ1dHRvbgotICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2J1dHRvbl9jYWxsX3N3
aXRjaF9jYW1lcmEiCi0gICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJh
d2FibGUvaWNfbWVudV9jYW1lcmEiCi0gICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0
aW9uPSJAc3RyaW5nL3N3aXRjaF9jYW1lcmEiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21h
cmdpbkVuZD0iOGRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDhkcCIKLSAg
ICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIi8+Ci0KLSAgICAgICAgPEltYWdl
QnV0dG9uCi0gICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYnV0dG9uX2NhbGxfc2NhbGluZ19t
b2RlIgotICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJsZS9pY19hY3Rpb25f
cmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4iCi0gICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2Ny
aXB0aW9uPSJAc3RyaW5nL2Rpc2Nvbm5lY3RfY2FsbCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfd2lkdGg9IjQ4ZHAiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIv
PgotCi0gICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYnV0
dG9uX2NhbGxfdG9nZ2xlX21pYyIKLSAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5k
cm9pZDpkcmF3YWJsZS9pY19idG5fc3BlYWtfbm93IgotICAgICAgICAgICBhbmRyb2lkOmNvbnRl
bnREZXNjcmlwdGlvbj0iQHN0cmluZy90b2dnbGVfbWljIgotICAgICAgICAgICBhbmRyb2lkOmxh
eW91dF9tYXJnaW5FbmQ9IjhkcCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQ4
ZHAiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIvPgotICAgIDwvTGlu
ZWFyTGF5b3V0PgotCi0gICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2Fw
dHVyZV9mb3JtYXRfdGV4dF9jYWxsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3Jh
cF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIK
LSAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVySG9yaXpvbnRhbD0idHJ1ZSIKLSAgICAgICAg
YW5kcm9pZDpsYXlvdXRfYWJvdmU9IkAraWQvY2FwdHVyZV9mb3JtYXRfc2xpZGVyX2NhbGwiCi0g
ICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjE2c3AiCi0gICAgICAgIGFuZHJvaWQ6dGV4dD0iQHN0
cmluZy9jYXB0dXJlX2Zvcm1hdF9jaGFuZ2VfdGV4dCIvPgotCi0gICAgPFNlZWtCYXIKLSAgICAg
ICAgYW5kcm9pZDppZD0iQCtpZC9jYXB0dXJlX2Zvcm1hdF9zbGlkZXJfY2FsbCIKLSAgICAgICAg
YW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlv
dXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlckhv
cml6b250YWw9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9t
PSJ0cnVlIgotICAgICAgICBhbmRyb2lkOnByb2dyZXNzPSI1MCIKLSAgICAgICAgYW5kcm9pZDps
YXlvdXRfbWFyZ2luPSI4ZHAiLz4KLQotPC9SZWxhdGl2ZUxheW91dD4KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2xheW91dC9mcmFnbWVudF9odWQueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9m
cmFnbWVudF9odWQueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQvZnJh
Z21lbnRfaHVkLnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDc0ICswLDAgQEAKLTw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci0KLTxSZWxhdGl2ZUxheW91dAotICAgIHhtbG5z
OmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAg
ICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0
X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KLQotICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICBhbmRy
b2lkOmlkPSJAK2lkL2J1dHRvbl90b2dnbGVfZGVidWciCi0gICAgICAgIGFuZHJvaWQ6YmFja2dy
b3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvaWNfbWVudV9pbmZvX2RldGFpbHMiCi0gICAgICAgIGFu
ZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL3RvZ2dsZV9kZWJ1ZyIKLSAgICAgICAg
YW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRCb3R0b209InRydWUiCi0gICAgICAgIGFuZHJvaWQ6
bGF5b3V0X2FsaWduUGFyZW50U3RhcnQ9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dp
ZHRoPSI0OGRwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiLz4KLQotICAg
IDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2VuY29kZXJfc3RhdF9jYWxsIgot
ICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRy
b2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRf
YWxpZ25QYXJlbnRFbmQ9InRydWUiCi0gICAgICAgIGFuZHJvaWQ6dGV4dFN0eWxlPSJib2xkIgot
ICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iI0MwMDBGRjAwIgotICAgICAgICBhbmRyb2lkOnRl
eHRTaXplPSIxMnNwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjhkcCIvPgotCi0g
ICAgPFRhYmxlTGF5b3V0Ci0gICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaHVkdmlld19jb250
YWluZXIiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0g
ICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KLQotICAgICAg
ICAgICA8VGFibGVSb3c+Ci0gICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAg
ICBhbmRyb2lkOmlkPSJAK2lkL2h1ZF9zdGF0X2J3ZSIKLSAgICAgICAgICAgICAgICAgYW5kcm9p
ZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDps
YXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6YWxw
aGE9IjAuNCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSIyZGlwIgotICAgICAg
ICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmNvbG9yL3doaXRlIgotICAg
ICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGFuZHJvaWQ6Y29sb3IvYmxhY2siIC8+
Ci0KLSAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9
IkAraWQvaHVkX3N0YXRfY29ubmVjdGlvbiIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRf
aGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6YWxwaGE9IjAu
NCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSIyZGlwIgotICAgICAgICAgICAg
ICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmNvbG9yL3doaXRlIgotICAgICAgICAg
ICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGFuZHJvaWQ6Y29sb3IvYmxhY2siIC8+Ci0KLSAg
ICAgICAgICAgPC9UYWJsZVJvdz4KLQotICAgICAgICAgICA8VGFibGVSb3c+Ci0gICAgICAgICAg
ICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2h1ZF9zdGF0
X3ZpZGVvX3NlbmQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFw
X2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9j
b250ZW50IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmFscGhhPSIwLjQiCi0gICAgICAgICAg
ICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMmRpcCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpi
YWNrZ3JvdW5kPSJAYW5kcm9pZDpjb2xvci93aGl0ZSIKLSAgICAgICAgICAgICAgICAgYW5kcm9p
ZDp0ZXh0Q29sb3I9IkBhbmRyb2lkOmNvbG9yL2JsYWNrIiAvPgotCi0gICAgICAgICAgICAgIDxU
ZXh0VmlldwotICAgICAgICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2h1ZF9zdGF0X3ZpZGVv
X3JlY3YiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRl
bnQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50
IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjJkaXAiCi0gICAgICAgICAgICAg
ICAgIGFuZHJvaWQ6YWxwaGE9IjAuNCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3Jv
dW5kPSJAYW5kcm9pZDpjb2xvci93aGl0ZSIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0
Q29sb3I9IkBhbmRyb2lkOmNvbG9yL2JsYWNrIiAvPgotICAgICAgICAgICAgPC9UYWJsZVJvdz4K
LSAgICA8L1RhYmxlTGF5b3V0PgotCi08L1JlbGF0aXZlTGF5b3V0PgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
bWVudS9jb25uZWN0X21lbnUueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL21lbnUvY29ubmVj
dF9tZW51LnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbWVudS9jb25uZWN0X21l
bnUueG1sCShub25leGlzdGVudCkKQEAgLTEsMTMgKzAsMCBAQAotPG1lbnUgeG1sbnM6YW5kcm9p
ZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIj4KLSAgICA8aXRl
bQotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FjdGlvbl9sb29wYmFjayIKLSAgICAgICAgYW5k
cm9pZDppY29uPSJAZHJhd2FibGUvaWNfbG9vcGJhY2tfY2FsbCIKLSAgICAgICAgYW5kcm9pZDpz
aG93QXNBY3Rpb249ImFsd2F5cyIKLSAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9hY3Rp
b25fbG9vcGJhY2siLz4KLSAgICA8aXRlbQotICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2FjdGlv
bl9zZXR0aW5ncyIKLSAgICAgICAgYW5kcm9pZDpvcmRlckluQ2F0ZWdvcnk9IjEwMCIKLSAgICAg
ICAgYW5kcm9pZDppY29uPSJAYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51X3ByZWZlcmVuY2VzIgot
ICAgICAgICBhbmRyb2lkOnNob3dBc0FjdGlvbj0iaWZSb29tIgotICAgICAgICBhbmRyb2lkOnRp
dGxlPSJAc3RyaW5nL2FjdGlvbl9zZXR0aW5ncyIvPgotPC9tZW51PgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
dmFsdWVzL2FycmF5cy54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzL2FycmF5cy54
bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy9hcnJheXMueG1sCShub25l
eGlzdGVudCkKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0i
dXRmLTgiPz4KLTxyZXNvdXJjZXM+Ci0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJ2aWRlb1Jlc29s
dXRpb25zIj4KLSAgICAgICAgPGl0ZW0+RGVmYXVsdDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+SEQg
KDEyODAgeCA3MjApPC9pdGVtPgotICAgICAgICA8aXRlbT5WR0EgKDY0MCB4IDQ4MCk8L2l0ZW0+
Ci0gICAgICAgIDxpdGVtPlFWR0EgKDMyMCB4IDI0MCk8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJy
YXk+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InZpZGVvUmVzb2x1dGlvbnNWYWx1ZXMiPgot
ICAgICAgICA8aXRlbT5EZWZhdWx0PC9pdGVtPgotICAgICAgICA8aXRlbT4xMjgwIHggNzIwPC9p
dGVtPgotICAgICAgICA8aXRlbT42NDAgeCA0ODA8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjMyMCB4
IDI0MDwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFt
ZT0iY2FtZXJhRnBzIj4KLSAgICAgICAgPGl0ZW0+RGVmYXVsdDwvaXRlbT4KLSAgICAgICAgPGl0
ZW0+MzAgZnBzPC9pdGVtPgotICAgICAgICA8aXRlbT4xNSBmcHM8L2l0ZW0+Ci0gICAgPC9zdHJp
bmctYXJyYXk+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InN0YXJ0Qml0cmF0ZSI+Ci0gICAg
ICAgIDxpdGVtPkRlZmF1bHQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPk1hbnVhbDwvaXRlbT4KLSAg
ICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0idmlkZW9Db2RlY3Mi
PgotICAgICAgICA8aXRlbT5WUDg8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlZQOTwvaXRlbT4KLSAg
ICAgICAgPGl0ZW0+SDI2NDwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJp
bmctYXJyYXkgbmFtZT0iYXVkaW9Db2RlY3MiPgotICAgICAgICA8aXRlbT5PUFVTPC9pdGVtPgot
ICAgICAgICA8aXRlbT5JU0FDPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi0gICAgPHN0
cmluZy1hcnJheSBuYW1lPSJzcGVha2VycGhvbmUiPgotICAgICAgICA8aXRlbT5BdXRvIChwcm94
aW1pdHkgc2Vuc29yKTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+RW5hYmxlZDwvaXRlbT4KLSAgICAg
ICAgPGl0ZW0+RGlzYWJsZWQ8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLSAgICA8c3Ry
aW5nLWFycmF5IG5hbWU9InNwZWFrZXJwaG9uZVZhbHVlcyI+Ci0gICAgICAgIDxpdGVtPmF1dG88
L2l0ZW0+Ci0gICAgICAgIDxpdGVtPnRydWU8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPmZhbHNlPC9p
dGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJyb29t
TGlzdENvbnRleHRNZW51Ij4KLSAgICAgICAgPGl0ZW0+UmVtb3ZlIGZhdm9yaXRlPC9pdGVtPgot
ICAgIDwvc3RyaW5nLWFycmF5PgotCi08L3Jlc291cmNlcz4KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVl
cy9zdHJpbmdzLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAkobm9uZXhp
c3RlbnQpCkBAIC0xLDE3MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgotPHJlc291cmNlcz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIiB0cmFuc2xh
dGFibGU9ImZhbHNlIj5BcHBSVEM8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InNldHRpbmdz
X25hbWUiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPkFwcFJUQyBTZXR0aW5nczwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0iZGlzY29ubmVjdF9jYWxsIj5EaXNjb25uZWN0IENhbGw8L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9InJvb21fZGVzY3JpcHRpb24iPgotICAgICAgICBQbGVhc2UgZW50
ZXIgYSByb29tIG5hbWUuIFJvb20gbmFtZXMgYXJlIHNoYXJlZCB3aXRoIGV2ZXJ5b25lLCBzbyB0
aGluawotICAgICAgICBvZiBzb21ldGhpbmcgdW5pcXVlIGFuZCBzZW5kIGl0IHRvIGEgZnJpZW5k
LgotICAgIDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZmF2b3JpdGVzIj5GYXZvcml0ZXM8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im5vX2Zhdm9yaXRlcyI+Tm8gZmF2b3JpdGVzPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX3VybF90aXRsZSI+SW52YWxpZCBVUkw8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImludmFsaWRfdXJsX3RleHQiPlRoZSBVUkwgb3Ig
cm9vbSBuYW1lIHlvdSBlbnRlcmVkIHJlc3VsdGVkIGluIGFuIGludmFsaWQgVVJMOiAlMSRzCi0g
ICAgPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjaGFubmVsX2Vycm9yX3RpdGxlIj5Db25u
ZWN0aW9uIGVycm9yPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb25uZWN0aW5nX3RvIj5D
b25uZWN0aW5nIHRvOiAlMSRzPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtaXNzaW5nX3Vy
bCI+RkFUQUwgRVJST1I6IE1pc3NpbmcgVVJMIHRvIGNvbm5lY3QgdG8uPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJjYW1lcmEyX3RleHR1cmVfb25seV9lcnJvciI+Q2FtZXJhMiBvbmx5IHN1
cHBvcnRzIGNhcHR1cmluZyB0byB0ZXh0dXJlLiBFaXRoZXIgZGlzYWJsZSBDYW1lcmEyIG9yIGVu
YWJsZSBjYXB0dXJpbmcgdG8gdGV4dHVyZSBpbiB0aGUgb3B0aW9ucy48L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9Im9rIj5PSzwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic3dpdGNoX2Nh
bWVyYSI+U3dpdGNoIGZyb250L2JhY2sgY2FtZXJhPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1l
PSJjYXB0dXJlX2Zvcm1hdF9jaGFuZ2VfdGV4dCI+U2xpZGUgdG8gY2hhbmdlIGNhcHR1cmUgZm9y
bWF0PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJtdXRlZCI+TXV0ZWQ8L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InRvZ2dsZV9kZWJ1ZyI+VG9nZ2xlIGRlYnVnIHZpZXc8L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9InRvZ2dsZV9taWMiPlRvZ2dsZSBtaWNyb3Bob25lIG9uL29mZjwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX3NldHRpbmdzIj5TZXR0aW5nczwvc3Ry
aW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWN0aW9uX2xvb3BiYWNrIj5Mb29wYmFjayBjb25uZWN0
aW9uPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJjb25uZWN0X2Rlc2NyaXB0aW9uIj5Db25u
ZWN0IHRvIHRoZSByb29tPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJhZGRfZmF2b3JpdGVf
ZGVzY3JpcHRpb24iPkFkZCBmYXZvcml0ZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iZm9y
bWF0X2Rlc2NyaXB0aW9uIj4lMSRkeCUyJGQgQCAlMyRkIGZwczwvc3RyaW5nPgotCi0gICAgPCEt
LSBTZXR0aW5ncyBzdHJpbmdzLiAtLT4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcm9vbV9rZXki
PnJvb21fcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9yb29tX2xp
c3Rfa2V5Ij5yb29tX2xpc3RfcHJlZmVyZW5jZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX3ZpZGVvc2V0dGluZ3Nfa2V5Ij52aWRlb19zZXR0aW5nc19rZXk8L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfdmlkZW9zZXR0aW5nc190aXRsZSI+V2ViUlRDIHZpZGVvIHNl
dHRpbmdzLjwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3ZpZGVvY2FsbF9rZXki
PnZpZGVvY2FsbF9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Zp
ZGVvY2FsbF90aXRsZSI+VmlkZW8gY2FsbC48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfdmlkZW9jYWxsX2RsZyI+RW5hYmxlIHZpZGVvIGluIGEgY2FsbC48L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfdmlkZW9jYWxsX2RlZmF1bHQiPnRydWU8L3N0cmluZz4KLQotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9zY3JlZW5jYXB0dXJlX2tleSI+c2NyZWVuY2FwdHVyZV9wcmVm
ZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3NjcmVlbmNhcHR1cmVfdGl0
bGUiPlVzZSBzY3JlZW5jYXB0dXJlLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9z
Y3JlZW5jYXB0dXJlX2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9
InByZWZfY2FtZXJhMl9rZXkiPmNhbWVyYTJfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9jYW1lcmEyX3RpdGxlIj5Vc2UgQ2FtZXJhMi48L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfY2FtZXJhMl9kZWZhdWx0Ij50cnVlPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX2NhbWVyYTJfbm90X3N1cHBvcnRlZCI+Tm90IHN1cHBvcnRlZCBvbiB0
aGlzIGRldmljZS48L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9yZXNvbHV0aW9u
X2tleSI+cmVzb2x1dGlvbl9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX3Jlc29sdXRpb25fdGl0bGUiPlZpZGVvIHJlc29sdXRpb24uPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX3Jlc29sdXRpb25fZGxnIj5FbnRlciBBcHBSVEMgbG9jYWwgdmlkZW8g
cmVzb2x1dGlvbi48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcmVzb2x1dGlvbl9k
ZWZhdWx0Ij5EZWZhdWx0PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZnBzX2tl
eSI+ZnBzX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZnBzX3Rp
dGxlIj5DYW1lcmEgZnBzLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9mcHNfZGxn
Ij5FbnRlciBsb2NhbCBjYW1lcmEgZnBzLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9mcHNfZGVmYXVsdCI+RGVmYXVsdDwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVm
X2NhcHR1cmVxdWFsaXR5c2xpZGVyX2tleSI+Y2FwdHVyZXF1YWxpdHlzbGlkZXJfcHJlZmVyZW5j
ZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRlcl90
aXRsZSI+Q2FwdHVyZSBxdWFsaXR5IHNsaWRlci48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9
InByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfZGxnIj5FbmFibGUgc2xpZGVyIGZvciBjaGFuZ2lu
ZyBjYXB0dXJlIHF1YWxpdHkuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2NhcHR1
cmVxdWFsaXR5c2xpZGVyX2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfbWF4dmlkZW9iaXRyYXRlX2tleSI+bWF4dmlkZW9iaXRyYXRlX3ByZWZlcmVuY2U8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbWF4dmlkZW9iaXRyYXRlX3RpdGxlIj5N
YXhpbXVtIHZpZGVvIGJpdHJhdGUgc2V0dGluZy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9
InByZWZfbWF4dmlkZW9iaXRyYXRlX2RsZyI+TWF4aW11bSB2aWRlbyBiaXRyYXRlIHNldHRpbmcu
PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX21heHZpZGVvYml0cmF0ZV9kZWZhdWx0
Ij5EZWZhdWx0PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbWF4dmlkZW9iaXRy
YXRldmFsdWVfa2V5Ij5tYXh2aWRlb2JpdHJhdGV2YWx1ZV9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0g
ICAgPHN0cmluZyBuYW1lPSJwcmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX3RpdGxlIj5WaWRlbyBl
bmNvZGVyIG1heGltdW0gYml0cmF0ZS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZf
bWF4dmlkZW9iaXRyYXRldmFsdWVfZGxnIj5FbnRlciB2aWRlbyBlbmNvZGVyIG1heGltdW0gYml0
cmF0ZSBpbiBrYnBzLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2Jp
dHJhdGV2YWx1ZV9kZWZhdWx0Ij4xNzAwPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfdmlkZW9jb2RlY19rZXkiPnZpZGVvY29kZWNfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0icHJlZl92aWRlb2NvZGVjX3RpdGxlIj5EZWZhdWx0IHZpZGVvIGNvZGVjLjwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2NvZGVjX2RsZyI+U2VsZWN0IGRl
ZmF1bHQgdmlkZW8gY29kZWMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3ZpZGVv
Y29kZWNfZGVmYXVsdCI+VlA4PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfaHdj
b2RlY19rZXkiPmh3Y29kZWNfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl9od2NvZGVjX3RpdGxlIj5WaWRlbyBjb2RlYyBoYXJkd2FyZSBhY2NlbGVyYXRpb24uPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2h3Y29kZWNfZGxnIj5Vc2UgaGFyZHdhcmUg
YWNjZWxlcmF0ZWQgdmlkZW8gY29kZWMgKGlmIGF2YWlsYWJsZSkuPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX2h3Y29kZWNfZGVmYXVsdCI+dHJ1ZTwvc3RyaW5nPgotCi0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX2NhcHR1cmV0b3RleHR1cmVfa2V5Ij5jYXB0dXJldG90ZXh0dXJlX3By
ZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfY2FwdHVyZXRvdGV4dHVy
ZV90aXRsZSI+VmlkZW8gY2FwdHVyZSB0byBzdXJmYWNlIHRleHR1cmUuPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX2NhcHR1cmV0b3RleHR1cmVfZGxnIj5DYXB0dXJlIHZpZGVvIHRv
IHRleHR1cmVzIChpZiBhdmFpbGFibGUpLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9jYXB0dXJldG90ZXh0dXJlX2RlZmF1bHQiPnRydWU8L3N0cmluZz4KLQotICAgIDxzdHJpbmcg
bmFtZT0icHJlZl92YWx1ZV9lbmFibGVkIj5FbmFibGVkPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX3ZhbHVlX2Rpc2FibGVkIj5EaXNhYmxlZDwvc3RyaW5nPgotCi0gICAgPHN0cmlu
ZyBuYW1lPSJwcmVmX2F1ZGlvc2V0dGluZ3Nfa2V5Ij5hdWRpb19zZXR0aW5nc19rZXk8L3N0cmlu
Zz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYXVkaW9zZXR0aW5nc190aXRsZSI+V2ViUlRDIGF1
ZGlvIHNldHRpbmdzLjwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3N0YXJ0YXVk
aW9iaXRyYXRlX2tleSI+c3RhcnRhdWRpb2JpdHJhdGVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlvYml0cmF0ZV90aXRsZSI+QXVkaW8gYml0cmF0
ZSBzZXR0aW5nLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlvYml0
cmF0ZV9kbGciPkF1ZGlvIGJpdHJhdGUgc2V0dGluZy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGVfZGVmYXVsdCI+RGVmYXVsdDwvc3RyaW5nPgotCi0g
ICAgPHN0cmluZyBuYW1lPSJwcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfa2V5Ij5zdGFydGF1
ZGlvYml0cmF0ZXZhbHVlX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV90aXRsZSI+QXVkaW8gY29kZWMgYml0cmF0ZS48L3N0
cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9kbGci
PkVudGVyIGF1ZGlvIGNvZGVjIGJpdHJhdGUgaW4ga2Jwcy48L3N0cmluZz4KLSAgICA8c3RyaW5n
IG5hbWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9kZWZhdWx0Ij4zMjwvc3RyaW5nPgot
Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2F1ZGlvY29kZWNfa2V5Ij5hdWRpb2NvZGVjX3ByZWZl
cmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYXVkaW9jb2RlY190aXRsZSI+
RGVmYXVsdCBhdWRpbyBjb2RlYy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYXVk
aW9jb2RlY19kbGciPlNlbGVjdCBkZWZhdWx0IGF1ZGlvIGNvZGVjLjwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0icHJlZl9hdWRpb2NvZGVjX2RlZmF1bHQiPk9QVVM8L3N0cmluZz4KLQotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19rZXkiPmF1ZGlvcHJvY2Vzc2lu
Z19wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX25vYXVkaW9wcm9j
ZXNzaW5nX3RpdGxlIj5EaXNhYmxlIGF1ZGlvIHByb2Nlc3NpbmcuPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX25vYXVkaW9wcm9jZXNzaW5nX2RsZyI+RGlzYWJsZSBhdWRpbyBwcm9j
ZXNzaW5nIHBpcGVsaW5lLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9ub2F1ZGlv
cHJvY2Vzc2luZ19kZWZhdWx0Ij5mYWxzZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2FlY2R1bXBfa2V5Ij5hZWNkdW1wX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5n
IG5hbWU9InByZWZfYWVjZHVtcF90aXRsZSI+Q3JlYXRlIGFlY2R1bXAuPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX2FlY2R1bXBfZGxnIj5FbmFibGUgZGlhZ25vc3RpYyBhdWRpbyBy
ZWNvcmRpbmdzLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hZWNkdW1wX2RlZmF1
bHQiPmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfb3BlbnNsZXNfa2V5
Ij5vcGVuc2xlc19wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX29w
ZW5zbGVzX3RpdGxlIj5Vc2UgT3BlblNMIEVTIGZvciBhdWRpbyBwbGF5YmFjay48L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9InByZWZfb3BlbnNsZXNfZGxnIj5Vc2UgT3BlblNMIEVTIGZvciBh
dWRpbyBwbGF5YmFjay48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfb3BlbnNsZXNf
ZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxl
X2J1aWx0X2luX2FlY19rZXkiPmRpc2FibGVfYnVpbHRfaW5fYWVjX3ByZWZlcmVuY2U8L3N0cmlu
Zz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfdGl0bGUiPkRp
c2FibGUgaGFyZHdhcmUgQUVDLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNh
YmxlX2J1aWx0X2luX2FlY19kbGciPkRpc2FibGUgaGFyZHdhcmUgQUVDLjwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX2FlY19kZWZhdWx0Ij5mYWxzZTwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9idWlsdF9pbl9hZWNfbm90X2F2YWlsYWJs
ZSI+SGFyZHdhcmUgQUVDIGlzIG5vdCBhdmFpbGFibGU8L3N0cmluZz4KLQotICAgIDxzdHJpbmcg
bmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19rZXkiPmRpc2FibGVfYnVpbHRfaW5fYWdj
X3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWls
dF9pbl9hZ2NfdGl0bGUiPkRpc2FibGUgaGFyZHdhcmUgQUdDLjwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19kbGciPkRpc2FibGUgaGFyZHdhcmUg
QUdDLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX2Fn
Y19kZWZhdWx0Ij5mYWxzZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9idWlsdF9p
bl9hZ2Nfbm90X2F2YWlsYWJsZSI+SGFyZHdhcmUgQUdDIGlzIG5vdCBhdmFpbGFibGU8L3N0cmlu
Zz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2tleSI+ZGlz
YWJsZV9idWlsdF9pbl9uc19wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfdGl0bGUiPkRpc2FibGUgaGFyZHdhcmUgTlMuPC9zdHJp
bmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfZGxnIj5EaXNh
YmxlIGhhcmR3YXJlIE5TLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxl
X2J1aWx0X2luX25zX2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2J1aWx0X2luX25zX25vdF9hdmFpbGFibGUiPkhhcmR3YXJlIE5TIGlzIG5vdCBhdmFpbGFi
bGU8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9lbmFibGVfbGV2ZWxfY29udHJv
bF9rZXkiPmVuYWJsZV9sZXZlbF9jb250cm9sX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3Ry
aW5nIG5hbWU9InByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfdGl0bGUiPkVuYWJsZSBsZXZlbCBj
b250cm9sLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9lbmFibGVfbGV2ZWxfY29u
dHJvbF9kZWZhdWx0Ij5mYWxzZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Nw
ZWFrZXJwaG9uZV9rZXkiPnNwZWFrZXJwaG9uZV9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX3NwZWFrZXJwaG9uZV90aXRsZSI+U3BlYWtlcnBob25lLjwvc3RyaW5n
PgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zcGVha2VycGhvbmVfZGxnIj5TcGVha2VycGhvbmUu
PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3NwZWFrZXJwaG9uZV9kZWZhdWx0Ij5h
dXRvPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbWlzY3NldHRpbmdzX2tleSI+
bWlzY19zZXR0aW5nc19rZXk8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbWlzY3Nl
dHRpbmdzX3RpdGxlIj5NaXNjZWxsYW5lb3VzIHNldHRpbmdzLjwvc3RyaW5nPgotCi0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX3Jvb21fc2VydmVyX3VybF9rZXkiPnJvb21fc2VydmVyX3VybF9wcmVm
ZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Jvb21fc2VydmVyX3VybF90
aXRsZSI+Um9vbSBzZXJ2ZXIgVVJMLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9y
b29tX3NlcnZlcl91cmxfZGxnIj5FbnRlciBhIHJvb20gc2VydmVyIFVSTC48L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfcm9vbV9zZXJ2ZXJfdXJsX2RlZmF1bHQiIHRyYW5zbGF0YWJs
ZT0iZmFsc2UiPmh0dHBzOi8vYXBwci50Yzwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2Rpc3BsYXlodWRfa2V5Ij5kaXNwbGF5aHVkX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfZGlzcGxheWh1ZF90aXRsZSI+RGlzcGxheSBjYWxsIHN0YXRpc3Rp
Y3MuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc3BsYXlodWRfZGxnIj5EaXNw
bGF5IGNhbGwgc3RhdGlzdGljcy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlz
cGxheWh1ZF9kZWZhdWx0IiB0cmFuc2xhdGFibGU9ImZhbHNlIj5mYWxzZTwvc3RyaW5nPgotCi0g
ICAgPHN0cmluZyBuYW1lPSJwcmVmX3RyYWNpbmdfa2V5Ij50cmFjaW5nX3ByZWZlcmVuY2U8L3N0
cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdHJhY2luZ190aXRsZSI+RGVidWcgcGVyZm9y
bWFuY2UgdHJhY2luZy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdHJhY2luZ19k
bGciPkRlYnVnIHBlcmZvcm1hbmNlIHRyYWNpbmcuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX3RyYWNpbmdfZGVmYXVsdCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+ZmFsc2U8L3N0cmlu
Zz4KLTwvcmVzb3VyY2VzPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzLXYxNy9zdHlsZXMueG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy12MTcvc3R5bGVzLnhtbAkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzLXYxNy9zdHlsZXMueG1sCShub25leGlzdGVudCkKQEAg
LTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHJl
c291cmNlcz4KLSAgPHN0eWxlIG5hbWU9IkNhbGxBY3Rpdml0eVRoZW1lIiBwYXJlbnQ9ImFuZHJv
aWQ6VGhlbWUuQmxhY2siPgotICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93QWN0aW9uQmFy
Ij5mYWxzZTwvaXRlbT4KLSAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0Z1bGxzY3JlZW4i
PnRydWU8L2l0ZW0+Ci0gICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dOb1RpdGxlIj50cnVl
PC9pdGVtPgotICA8L3N0eWxlPgotPC9yZXNvdXJjZXM+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMt
djIxL3N0eWxlcy54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzLXYyMS9zdHlsZXMu
eG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMtdjIxL3N0eWxlcy54bWwJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9InV0Zi04Ij8+Ci08cmVzb3VyY2VzPgotICA8c3R5bGUgbmFtZT0iQXBwUlRDTW9iaWxlQWN0
aXZpdHlUaGVtZSIgcGFyZW50PSJhbmRyb2lkOlRoZW1lLk1hdGVyaWFsIj4KLSAgICA8aXRlbSBu
YW1lPSJhbmRyb2lkOndpbmRvd0FjdGlvbkJhciI+ZmFsc2U8L2l0ZW0+Ci0gICAgPGl0ZW0gbmFt
ZT0iYW5kcm9pZDp3aW5kb3dGdWxsc2NyZWVuIj50cnVlPC9pdGVtPgotICAgIDxpdGVtIG5hbWU9
ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KLSAgPC9zdHlsZT4KLTwvcmVzb3Vy
Y2VzPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMveG1sL3ByZWZlcmVuY2VzLnhtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy94bWwvcHJlZmVyZW5jZXMueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy94bWwvcHJlZmVyZW5jZXMueG1sCShub25leGlzdGVudCkKQEAgLTEsMTgyICswLDAgQEAKLTw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJlZmVyZW5jZVNjcmVlbiB4
bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQi
PgotICAgIDxQcmVmZXJlbmNlQ2F0ZWdvcnkKLSAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcv
cHJlZl92aWRlb3NldHRpbmdzX2tleSIKLSAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9w
cmVmX3ZpZGVvc2V0dGluZ3NfdGl0bGUiPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UK
LSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfdmlkZW9jYWxsX2tleSIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl92aWRlb2NhbGxfdGl0bGUiCi0g
ICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfdmlkZW9jYWxsX2Rs
ZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfdmlkZW9j
YWxsX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAg
ICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9zY3JlZW5jYXB0dXJlX2tleSIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9zY3JlZW5jYXB0dXJlX3RpdGxlIgotICAg
ICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9zY3JlZW5jYXB0dXJl
X2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAg
YW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9jYW1lcmEyX2tleSIKLSAgICAgICAgICAgIGFuZHJv
aWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9jYW1lcmEyX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9p
ZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9jYW1lcmEyX2RlZmF1bHQiIC8+Ci0KLSAgICAg
ICAgPExpc3RQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVm
X3Jlc29sdXRpb25fa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVm
X3Jlc29sdXRpb25fdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0
cmluZy9wcmVmX3Jlc29sdXRpb25fZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9n
VGl0bGU9IkBzdHJpbmcvcHJlZl9yZXNvbHV0aW9uX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6
ZW50cmllcz0iQGFycmF5L3ZpZGVvUmVzb2x1dGlvbnMiCi0gICAgICAgICAgICBhbmRyb2lkOmVu
dHJ5VmFsdWVzPSJAYXJyYXkvdmlkZW9SZXNvbHV0aW9uc1ZhbHVlcyIgLz4KLQotICAgICAgICA8
TGlzdFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfZnBz
X2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9mcHNfdGl0bGUi
Ci0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2Zwc19kZWZh
dWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2Zwc19k
bGciCi0gICAgICAgICAgICBhbmRyb2lkOmVudHJpZXM9IkBhcnJheS9jYW1lcmFGcHMiCi0gICAg
ICAgICAgICBhbmRyb2lkOmVudHJ5VmFsdWVzPSJAYXJyYXkvY2FtZXJhRnBzIiAvPgotCi0gICAg
ICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5n
L3ByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRs
ZT0iQHN0cmluZy9wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX3RpdGxlIgotICAgICAgICAgICAg
YW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX2Rs
ZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfY2FwdHVy
ZXF1YWxpdHlzbGlkZXJfZGVmYXVsdCIgLz4KLQotICAgICAgICA8TGlzdFByZWZlcmVuY2UKLSAg
ICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRlX2tleSIK
LSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9tYXh2aWRlb2JpdHJhdGVf
dGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX21h
eHZpZGVvYml0cmF0ZV9kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0i
QHN0cmluZy9wcmVmX21heHZpZGVvYml0cmF0ZV9kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmVu
dHJpZXM9IkBhcnJheS9zdGFydEJpdHJhdGUiCi0gICAgICAgICAgICBhbmRyb2lkOmVudHJ5VmFs
dWVzPSJAYXJyYXkvc3RhcnRCaXRyYXRlIiAvPgotCi0gICAgICAgIDxFZGl0VGV4dFByZWZlcmVu
Y2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRl
dmFsdWVfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX21heHZp
ZGVvYml0cmF0ZXZhbHVlX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDppbnB1dFR5cGU9Im51
bWJlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfbWF4
dmlkZW9iaXRyYXRldmFsdWVfZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0
bGU9IkBzdHJpbmcvcHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9kbGciIC8+Ci0KLSAgICAgICAg
PExpc3RQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3Zp
ZGVvY29kZWNfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3Zp
ZGVvY29kZWNfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmlu
Zy9wcmVmX3ZpZGVvY29kZWNfZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0
bGU9IkBzdHJpbmcvcHJlZl92aWRlb2NvZGVjX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50
cmllcz0iQGFycmF5L3ZpZGVvQ29kZWNzIgotICAgICAgICAgICAgYW5kcm9pZDplbnRyeVZhbHVl
cz0iQGFycmF5L3ZpZGVvQ29kZWNzIiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UK
LSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfaHdjb2RlY19rZXkiCi0gICAg
ICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfaHdjb2RlY190aXRsZSIKLSAgICAg
ICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9od2NvZGVjX2RsZyIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfaHdjb2RlY19kZWZh
dWx0IiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJv
aWQ6a2V5PSJAc3RyaW5nL3ByZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXkiCi0gICAgICAgICAgICBh
bmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfY2FwdHVyZXRvdGV4dHVyZV90aXRsZSIKLSAgICAg
ICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9jYXB0dXJldG90ZXh0dXJl
X2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfY2Fw
dHVyZXRvdGV4dHVyZV9kZWZhdWx0IiAvPgotICAgIDwvUHJlZmVyZW5jZUNhdGVnb3J5PgotCi0g
ICAgPFByZWZlcmVuY2VDYXRlZ29yeQotICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVm
X2F1ZGlvc2V0dGluZ3Nfa2V5IgotICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZf
YXVkaW9zZXR0aW5nc190aXRsZSI+Ci0KLSAgICAgICAgPExpc3RQcmVmZXJlbmNlCi0gICAgICAg
ICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2tleSIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0ZV90
aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfc3Rh
cnRhdWRpb2JpdHJhdGVfZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9
IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9kbGciCi0gICAgICAgICAgICBhbmRyb2lk
OmVudHJpZXM9IkBhcnJheS9zdGFydEJpdHJhdGUiCi0gICAgICAgICAgICBhbmRyb2lkOmVudHJ5
VmFsdWVzPSJAYXJyYXkvc3RhcnRCaXRyYXRlIiAvPgotCi0gICAgICAgIDxFZGl0VGV4dFByZWZl
cmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRpb2Jp
dHJhdGV2YWx1ZV9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZf
c3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV90aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6aW5wdXRU
eXBlPSJudW1iZXIiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9w
cmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6
ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2RsZyIgLz4K
LQotICAgICAgICA8TGlzdFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3Ry
aW5nL3ByZWZfYXVkaW9jb2RlY19rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3Ry
aW5nL3ByZWZfYXVkaW9jb2RlY190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZh
bHVlPSJAc3RyaW5nL3ByZWZfYXVkaW9jb2RlY19kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9p
ZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2F1ZGlvY29kZWNfZGxnIgotICAgICAgICAgICAg
YW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvYXVkaW9Db2RlY3MiCi0gICAgICAgICAgICBhbmRyb2lk
OmVudHJ5VmFsdWVzPSJAYXJyYXkvYXVkaW9Db2RlY3MiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94
UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9ub2F1ZGlv
cHJvY2Vzc2luZ19rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZf
bm9hdWRpb3Byb2Nlc3NpbmdfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxl
PSJAc3RyaW5nL3ByZWZfbm9hdWRpb3Byb2Nlc3NpbmdfZGxnIgotICAgICAgICAgICAgYW5kcm9p
ZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19kZWZhdWx0IiAv
PgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5
PSJAc3RyaW5nL3ByZWZfYWVjZHVtcF9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJA
c3RyaW5nL3ByZWZfYWVjZHVtcF90aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0
bGU9IkBzdHJpbmcvcHJlZl9hZWNkdW1wX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVs
dFZhbHVlPSJAc3RyaW5nL3ByZWZfYWVjZHVtcF9kZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVj
a0JveFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfb3Bl
bnNsZXNfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX29wZW5z
bGVzX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVm
X29wZW5zbGVzX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5n
L3ByZWZfb3BlbnNsZXNfZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNl
Ci0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5f
YWVjX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNhYmxl
X2J1aWx0X2luX2FlY190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBz
dHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX2FlY19kbGciCi0gICAgICAgICAgICBhbmRyb2lk
OmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2RlZmF1bHQi
IC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDpr
ZXk9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19rZXkiCi0gICAgICAgICAgICBh
bmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2NfdGl0bGUiCi0g
ICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWls
dF9pbl9hZ2NfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcv
cHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19kZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVja0Jv
eFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfZGlzYWJs
ZV9idWlsdF9pbl9uc19rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3By
ZWZfZGlzYWJsZV9idWlsdF9pbl9uc190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9n
VGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2RsZyIKLSAgICAgICAgICAg
IGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19k
ZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFu
ZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfa2V5IgotICAgICAg
ICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX3Rp
dGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9lbmFi
bGVfbGV2ZWxfY29udHJvbF9kZWZhdWx0IiAvPgotCi0gICAgICAgIDxMaXN0UHJlZmVyZW5jZQot
ICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9zcGVha2VycGhvbmVfa2V5Igot
ICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3NwZWFrZXJwaG9uZV90aXRs
ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfc3BlYWtl
cnBob25lX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5n
L3ByZWZfc3BlYWtlcnBob25lX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFy
cmF5L3NwZWFrZXJwaG9uZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJh
eS9zcGVha2VycGhvbmVWYWx1ZXMiIC8+Ci0gICAgPC9QcmVmZXJlbmNlQ2F0ZWdvcnk+Ci0KLSAg
ICA8UHJlZmVyZW5jZUNhdGVnb3J5Ci0gICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZf
bWlzY3NldHRpbmdzX2tleSIKLSAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX21p
c2NzZXR0aW5nc190aXRsZSI+Ci0KLSAgICAgICAgPEVkaXRUZXh0UHJlZmVyZW5jZQotICAgICAg
ICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9yb29tX3NlcnZlcl91cmxfa2V5IgotICAg
ICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3Jvb21fc2VydmVyX3VybF90aXRs
ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6aW5wdXRUeXBlPSJ0ZXh0IgotICAgICAgICAgICAgYW5k
cm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9yb29tX3NlcnZlcl91cmxfZGVmYXVsdCIK
LSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9yb29tX3NlcnZl
cl91cmxfZGxnIiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAg
IGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfZGlzcGxheWh1ZF9rZXkiCi0gICAgICAgICAgICBh
bmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfZGlzcGxheWh1ZF90aXRsZSIKLSAgICAgICAgICAg
IGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNwbGF5aHVkX2RsZyIKLSAgICAg
ICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9kaXNwbGF5aHVkX2RlZmF1
bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9p
ZDprZXk9IkBzdHJpbmcvcHJlZl90cmFjaW5nX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0
bGU9IkBzdHJpbmcvcHJlZl90cmFjaW5nX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFs
b2dUaXRsZT0iQHN0cmluZy9wcmVmX3RyYWNpbmdfZGxnIgotICAgICAgICAgICBhbmRyb2lkOmRl
ZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX3RyYWNpbmdfZGVmYXVsdCIgLz4KLSAgICA8L1ByZWZl
cmVuY2VDYXRlZ29yeT4KLQotPC9QcmVmZXJlbmNlU2NyZWVuPgpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0F1ZGlvTWFuYWdlci5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENBdWRpb01hbmFnZXIuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0F1ZGlvTWFu
YWdlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDE5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFwcHNwb3Qu
YXBwcnRjLnV0aWwuQXBwUlRDVXRpbHM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRj
YXN0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5k
cm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVy
OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRp
b01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyOwot
aW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7
Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoq
Ci0gKiBBcHBSVENBdWRpb01hbmFnZXIgbWFuYWdlcyBhbGwgYXVkaW8gcmVsYXRlZCBwYXJ0cyBv
ZiB0aGUgQXBwUlRDIGRlbW8uCi0gKi8KLXB1YmxpYyBjbGFzcyBBcHBSVENBdWRpb01hbmFnZXIg
ewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFwcFJUQ0F1ZGlvTWFuYWdl
ciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVBS0VSUEhPTkVfQVVUTyA9ICJh
dXRvIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUFLRVJQSE9ORV9UUlVFID0g
InRydWUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQUtFUlBIT05FX0ZBTFNF
ID0gImZhbHNlIjsKLQotICAvKioKLSAgICogQXVkaW9EZXZpY2UgaXMgdGhlIG5hbWVzIG9mIHBv
c3NpYmxlIGF1ZGlvIGRldmljZXMgdGhhdCB3ZSBjdXJyZW50bHkKLSAgICogc3VwcG9ydC4KLSAg
ICovCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBzdXBwb3J0IGZvciBCTFVFVE9PVEggYXMgd2Vs
bC4KLSAgcHVibGljIGVudW0gQXVkaW9EZXZpY2UgewotICAgIFNQRUFLRVJfUEhPTkUsCi0gICAg
V0lSRURfSEVBRFNFVCwKLSAgICBFQVJQSUVDRSwKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgQ29u
dGV4dCBhcHBydGNDb250ZXh0OwotICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG9uU3RhdGVDaGFu
Z2VMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gIHBy
aXZhdGUgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcjsKLSAgcHJpdmF0ZSBpbnQgc2F2ZWRBdWRp
b01vZGUgPSBBdWRpb01hbmFnZXIuTU9ERV9JTlZBTElEOwotICBwcml2YXRlIGJvb2xlYW4gc2F2
ZWRJc1NwZWFrZXJQaG9uZU9uID0gZmFsc2U7Ci0gIHByaXZhdGUgYm9vbGVhbiBzYXZlZElzTWlj
cm9waG9uZU11dGUgPSBmYWxzZTsKLQotICBwcml2YXRlIGZpbmFsIEF1ZGlvRGV2aWNlIGRlZmF1
bHRBdWRpb0RldmljZTsKLQotICAvLyBDb250YWlucyBzcGVha2VycGhvbmUgc2V0dGluZzogYXV0
bywgdHJ1ZSBvciBmYWxzZQotICBwcml2YXRlIGZpbmFsIFN0cmluZyB1c2VTcGVha2VycGhvbmU7
Ci0KLSAgLy8gUHJveGltaXR5IHNlbnNvciBvYmplY3QuIEl0IG1lYXN1cmVzIHRoZSBwcm94aW1p
dHkgb2YgYW4gb2JqZWN0IGluIGNtCi0gIC8vIHJlbGF0aXZlIHRvIHRoZSB2aWV3IHNjcmVlbiBv
ZiBhIGRldmljZSBhbmQgY2FuIHRoZXJlZm9yZSBiZSB1c2VkIHRvCi0gIC8vIGFzc2lzdCBkZXZp
Y2Ugc3dpdGNoaW5nIChjbG9zZSB0byBlYXIgPD0+IHVzZSBoZWFkc2V0IGVhcnBpZWNlIGlmCi0g
IC8vIGF2YWlsYWJsZSwgZmFyIGZyb20gZWFyIDw9PiB1c2Ugc3BlYWtlciBwaG9uZSkuCi0gIHBy
aXZhdGUgQXBwUlRDUHJveGltaXR5U2Vuc29yIHByb3hpbWl0eVNlbnNvciA9IG51bGw7Ci0KLSAg
Ly8gQ29udGFpbnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhdWRpbyBkZXZpY2UuCi0gIHByaXZh
dGUgQXVkaW9EZXZpY2Ugc2VsZWN0ZWRBdWRpb0RldmljZTsKLQotICAvLyBDb250YWlucyBhIGxp
c3Qgb2YgYXZhaWxhYmxlIGF1ZGlvIGRldmljZXMuIEEgU2V0IGNvbGxlY3Rpb24gaXMgdXNlZCB0
bwotICAvLyBhdm9pZCBkdXBsaWNhdGUgZWxlbWVudHMuCi0gIHByaXZhdGUgZmluYWwgU2V0PEF1
ZGlvRGV2aWNlPiBhdWRpb0RldmljZXMgPSBuZXcgSGFzaFNldDxBdWRpb0RldmljZT4oKTsKLQot
ICAvLyBCcm9hZGNhc3QgcmVjZWl2ZXIgZm9yIHdpcmVkIGhlYWRzZXQgaW50ZW50IGJyb2FkY2Fz
dHMuCi0gIHByaXZhdGUgQnJvYWRjYXN0UmVjZWl2ZXIgd2lyZWRIZWFkc2V0UmVjZWl2ZXI7Ci0K
LSAgLy8gQ2FsbGJhY2sgbWV0aG9kIGZvciBjaGFuZ2VzIGluIGF1ZGlvIGZvY3VzLgotICBwcml2
YXRlIEF1ZGlvTWFuYWdlci5PbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciBhdWRpb0ZvY3VzQ2hh
bmdlTGlzdGVuZXI7Ci0KLSAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHByb3hp
bWl0eSBzZW5zb3IgcmVwb3J0cyBhIHN0YXRlIGNoYW5nZSwKLSAgLy8gZS5nLiBmcm9tICJORUFS
IHRvIEZBUiIgb3IgZnJvbSAiRkFSIHRvIE5FQVIiLgotICBwcml2YXRlIHZvaWQgb25Qcm94aW1p
dHlTZW5zb3JDaGFuZ2VkU3RhdGUoKSB7Ci0gICAgaWYgKCF1c2VTcGVha2VycGhvbmUuZXF1YWxz
KFNQRUFLRVJQSE9ORV9BVVRPKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRo
ZSBwcm94aW1pdHkgc2Vuc29yIHNob3VsZCBvbmx5IGJlIGFjdGl2YXRlZCB3aGVuIHRoZXJlIGFy
ZSBleGFjdGx5IHR3bwotICAgIC8vIGF2YWlsYWJsZSBhdWRpbyBkZXZpY2VzLgotICAgIGlmIChh
dWRpb0RldmljZXMuc2l6ZSgpID09IDIgJiYgYXVkaW9EZXZpY2VzLmNvbnRhaW5zKEFwcFJUQ0F1
ZGlvTWFuYWdlci5BdWRpb0RldmljZS5FQVJQSUVDRSkKLSAgICAgICAgJiYgYXVkaW9EZXZpY2Vz
LmNvbnRhaW5zKEFwcFJUQ0F1ZGlvTWFuYWdlci5BdWRpb0RldmljZS5TUEVBS0VSX1BIT05FKSkg
ewotICAgICAgaWYgKHByb3hpbWl0eVNlbnNvci5zZW5zb3JSZXBvcnRzTmVhclN0YXRlKCkpIHsK
LSAgICAgICAgLy8gU2Vuc29yIHJlcG9ydHMgdGhhdCBhICJoYW5kc2V0IGlzIGJlaW5nIGhlbGQg
dXAgdG8gYSBwZXJzb24ncyBlYXIiLAotICAgICAgICAvLyBvciAic29tZXRoaW5nIGlzIGNvdmVy
aW5nIHRoZSBsaWdodCBzZW5zb3IiLgotICAgICAgICBzZXRBdWRpb0RldmljZShBcHBSVENBdWRp
b01hbmFnZXIuQXVkaW9EZXZpY2UuRUFSUElFQ0UpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gU2Vuc29yIHJlcG9ydHMgdGhhdCBhICJoYW5kc2V0IGlzIHJlbW92ZWQgZnJvbSBhIHBlcnNv
bidzIGVhciIsIG9yCi0gICAgICAgIC8vICJ0aGUgbGlnaHQgc2Vuc29yIGlzIG5vIGxvbmdlciBj
b3ZlcmVkIi4KLSAgICAgICAgc2V0QXVkaW9EZXZpY2UoQXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlv
RGV2aWNlLlNQRUFLRVJfUEhPTkUpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8qKiBDb25z
dHJ1Y3Rpb24gKi8KLSAgc3RhdGljIEFwcFJUQ0F1ZGlvTWFuYWdlciBjcmVhdGUoQ29udGV4dCBj
b250ZXh0LCBSdW5uYWJsZSBkZXZpY2VTdGF0ZUNoYW5nZUxpc3RlbmVyKSB7Ci0gICAgcmV0dXJu
IG5ldyBBcHBSVENBdWRpb01hbmFnZXIoY29udGV4dCwgZGV2aWNlU3RhdGVDaGFuZ2VMaXN0ZW5l
cik7Ci0gIH0KLQotICBwcml2YXRlIEFwcFJUQ0F1ZGlvTWFuYWdlcihDb250ZXh0IGNvbnRleHQs
IFJ1bm5hYmxlIGRldmljZVN0YXRlQ2hhbmdlTGlzdGVuZXIpIHsKLSAgICBhcHBydGNDb250ZXh0
ID0gY29udGV4dDsKLSAgICBvblN0YXRlQ2hhbmdlTGlzdGVuZXIgPSBkZXZpY2VTdGF0ZUNoYW5n
ZUxpc3RlbmVyOwotICAgIGF1ZGlvTWFuYWdlciA9ICgoQXVkaW9NYW5hZ2VyKSBjb250ZXh0Lmdl
dFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BVURJT19TRVJWSUNFKSk7Ci0KLSAgICBTaGFyZWRQcmVm
ZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcyA9IFByZWZlcmVuY2VNYW5hZ2VyLmdldERlZmF1bHRT
aGFyZWRQcmVmZXJlbmNlcyhjb250ZXh0KTsKLSAgICB1c2VTcGVha2VycGhvbmUgPSBzaGFyZWRQ
cmVmZXJlbmNlcy5nZXRTdHJpbmcoY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zcGVh
a2VycGhvbmVfa2V5KSwKLSAgICAgICAgY29udGV4dC5nZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9z
cGVha2VycGhvbmVfZGVmYXVsdCkpOwotCi0gICAgaWYgKHVzZVNwZWFrZXJwaG9uZS5lcXVhbHMo
U1BFQUtFUlBIT05FX0ZBTFNFKSkgewotICAgICAgZGVmYXVsdEF1ZGlvRGV2aWNlID0gQXVkaW9E
ZXZpY2UuRUFSUElFQ0U7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGRlZmF1bHRBdWRpb0RldmljZSA9
IEF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkU7Ci0gICAgfQotCi0gICAgLy8gQ3JlYXRlIGFuZCBp
bml0aWFsaXplIHRoZSBwcm94aW1pdHkgc2Vuc29yLgotICAgIC8vIFRhYmxldCBkZXZpY2VzIChl
LmcuIE5leHVzIDcpIGRvZXMgbm90IHN1cHBvcnQgcHJveGltaXR5IHNlbnNvcnMuCi0gICAgLy8g
Tm90ZSB0aGF0LCB0aGUgc2Vuc29yIHdpbGwgbm90IGJlIGFjdGl2ZSB1bnRpbCBzdGFydCgpIGhh
cyBiZWVuIGNhbGxlZC4KLSAgICBwcm94aW1pdHlTZW5zb3IgPSBBcHBSVENQcm94aW1pdHlTZW5z
b3IuY3JlYXRlKGNvbnRleHQsIG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIC8vIFRoaXMgbWV0aG9k
IHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhIHN0YXRlIGNoYW5nZSBpcyBkZXRlY3RlZC4KLSAg
ICAgIC8vIEV4YW1wbGU6IHVzZXIgaG9sZHMgaGlzIGhhbmQgb3ZlciB0aGUgZGV2aWNlIChjbG9z
ZXIgdGhhbiB+NSBjbSksCi0gICAgICAvLyBvciByZW1vdmVzIGhpcyBoYW5kIGZyb20gdGhlIGRl
dmljZS4KLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgb25Qcm94aW1pdHlTZW5z
b3JDaGFuZ2VkU3RhdGUoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICBBcHBSVENVdGlscy5sb2dE
ZXZpY2VJbmZvKFRBRyk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBpbml0KCkgewotICAgIExvZy5k
KFRBRywgImluaXQiKTsKLSAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICAvLyBTdG9yZSBjdXJyZW50IGF1ZGlvIHN0YXRlIHNvIHdlIGNhbiByZXN0b3Jl
IGl0IHdoZW4gY2xvc2UoKSBpcyBjYWxsZWQuCi0gICAgc2F2ZWRBdWRpb01vZGUgPSBhdWRpb01h
bmFnZXIuZ2V0TW9kZSgpOwotICAgIHNhdmVkSXNTcGVha2VyUGhvbmVPbiA9IGF1ZGlvTWFuYWdl
ci5pc1NwZWFrZXJwaG9uZU9uKCk7Ci0gICAgc2F2ZWRJc01pY3JvcGhvbmVNdXRlID0gYXVkaW9N
YW5hZ2VyLmlzTWljcm9waG9uZU11dGUoKTsKLQotICAgIC8vIENyZWF0ZSBhbiBBdWRpb01hbmFn
ZXIuT25BdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIgaW5zdGFuY2UuCi0gICAgYXVkaW9Gb2N1c0No
YW5nZUxpc3RlbmVyID0gbmV3IEF1ZGlvTWFuYWdlci5PbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5l
cigpIHsKLSAgICAgIC8vIENhbGxlZCBvbiB0aGUgbGlzdGVuZXIgdG8gbm90aWZ5IGlmIHRoZSBh
dWRpbyBmb2N1cyBmb3IgdGhpcyBsaXN0ZW5lciBoYXMgYmVlbiBjaGFuZ2VkLgotICAgICAgLy8g
VGhlIHxmb2N1c0NoYW5nZXwgdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGZvY3VzIHdhcyBn
YWluZWQsIHdoZXRoZXIgdGhlIGZvY3VzIHdhcyBsb3N0LAotICAgICAgLy8gYW5kIHdoZXRoZXIg
dGhhdCBsb3NzIGlzIHRyYW5zaWVudCwgb3Igd2hldGhlciB0aGUgbmV3IGZvY3VzIGhvbGRlciB3
aWxsIGhvbGQgaXQgZm9yIGFuCi0gICAgICAvLyB1bmtub3duIGFtb3VudCBvZiB0aW1lLgotICAg
ICAgLy8gVE9ETyhoZW5yaWthKTogcG9zc2libHkgZXh0ZW5kIHN1cHBvcnQgb2YgaGFuZGxpbmcg
YXVkaW8tZm9jdXMgY2hhbmdlcy4gT25seSBjb250YWlucwotICAgICAgLy8gbG9nZ2luZyBmb3Ig
bm93LgotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkF1ZGlvRm9jdXNDaGFu
Z2UoaW50IGZvY3VzQ2hhbmdlKSB7Ci0gICAgICAgIFN0cmluZyB0eXBlT2ZDaGFuZ2UgPSAiQVVE
SU9GT0NVU19OT1RfREVGSU5FRCI7Ci0gICAgICAgIHN3aXRjaCAoZm9jdXNDaGFuZ2UpIHsKLSAg
ICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU46Ci0gICAgICAgICAgICB0
eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19HQUlOIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlQ6Ci0gICAg
ICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVCI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dB
SU5fVFJBTlNJRU5UX0VYQ0xVU0lWRToKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJ
T0ZPQ1VTX0dBSU5fVFJBTlNJRU5UX0VYQ0xVU0lWRSI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5UX01BWV9E
VUNLOgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfR0FJTl9UUkFOU0lF
TlRfTUFZX0RVQ0siOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01h
bmFnZXIuQVVESU9GT0NVU19MT1NTOgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElP
Rk9DVVNfTE9TUyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFu
YWdlci5BVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5UOgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdl
ID0gIkFVRElPRk9DVVNfTE9TU19UUkFOU0lFTlQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19MT1NTX1RSQU5TSUVOVF9DQU5fRFVD
SzoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5U
X0NBTl9EVUNLIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19JTlZBTElEIjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRBRywgIm9uQXVkaW9Gb2N1c0NoYW5n
ZTogIiArIHR5cGVPZkNoYW5nZSk7Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIC8vIFJlcXVlc3Qg
YXVkaW8gcGxheW91dCBmb2N1cyAod2l0aG91dCBkdWNraW5nKSBhbmQgaW5zdGFsbCBsaXN0ZW5l
ciBmb3IgY2hhbmdlcyBpbiBmb2N1cy4KLSAgICBpbnQgcmVzdWx0ID0gYXVkaW9NYW5hZ2VyLnJl
cXVlc3RBdWRpb0ZvY3VzKGF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciwKLSAgICAgICAgQXVkaW9N
YW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMLCBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlOX1RS
QU5TSUVOVCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19SRVFV
RVNUX0dSQU5URUQpIHsKLSAgICAgIExvZy5kKFRBRywgIkF1ZGlvIGZvY3VzIHJlcXVlc3QgZ3Jh
bnRlZCBmb3IgVk9JQ0VfQ0FMTCBzdHJlYW1zIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5l
KFRBRywgIkF1ZGlvIGZvY3VzIHJlcXVlc3QgZmFpbGVkIik7Ci0gICAgfQotCi0gICAgLy8gU3Rh
cnQgYnkgc2V0dGluZyBNT0RFX0lOX0NPTU1VTklDQVRJT04gYXMgZGVmYXVsdCBhdWRpbyBtb2Rl
LiBJdCBpcwotICAgIC8vIHJlcXVpcmVkIHRvIGJlIGluIHRoaXMgbW9kZSB3aGVuIHBsYXlvdXQg
YW5kL29yIHJlY29yZGluZyBzdGFydHMgZm9yCi0gICAgLy8gYmVzdCBwb3NzaWJsZSBWb0lQIHBl
cmZvcm1hbmNlLgotICAgIC8vIFRPRE8oaGVucmlrYSk6IHdlIG1pZ2ggd2FudCB0byBzdGFydCB3
aXRoIFJJTkdUT05FIG1vZGUgaGVyZSBpbnN0ZWFkLgotICAgIGF1ZGlvTWFuYWdlci5zZXRNb2Rl
KEF1ZGlvTWFuYWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT04pOwotCi0gICAgLy8gQWx3YXlzIGRp
c2FibGUgbWljcm9waG9uZSBtdXRlIGR1cmluZyBhIFdlYlJUQyBjYWxsLgotICAgIHNldE1pY3Jv
cGhvbmVNdXRlKGZhbHNlKTsKLQotICAgIC8vIERvIGluaXRpYWwgc2VsZWN0aW9uIG9mIGF1ZGlv
IGRldmljZS4gVGhpcyBzZXR0aW5nIGNhbiBsYXRlciBiZSBjaGFuZ2VkCi0gICAgLy8gZWl0aGVy
IGJ5IGFkZGluZy9yZW1vdmluZyBhIHdpcmVkIGhlYWRzZXQgb3IgYnkgY292ZXJpbmcvdW5jb3Zl
cmluZyB0aGUKLSAgICAvLyBwcm94aW1pdHkgc2Vuc29yLgotICAgIHVwZGF0ZUF1ZGlvRGV2aWNl
U3RhdGUoaGFzV2lyZWRIZWFkc2V0KCkpOwotCi0gICAgLy8gUmVnaXN0ZXIgcmVjZWl2ZXIgZm9y
IGJyb2FkY2FzdCBpbnRlbnRzIHJlbGF0ZWQgdG8gYWRkaW5nL3JlbW92aW5nIGEKLSAgICAvLyB3
aXJlZCBoZWFkc2V0IChJbnRlbnQuQUNUSU9OX0hFQURTRVRfUExVRykuCi0gICAgcmVnaXN0ZXJG
b3JXaXJlZEhlYWRzZXRJbnRlbnRCcm9hZGNhc3QoKTsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAgIExvZy5kKFRBRywgImNsb3Nl
Iik7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHVucmVnaXN0ZXJGb3JXaXJlZEhlYWRzZXRJbnRlbnRCcm9hZGNhc3QoKTsKLQotICAgIC8vIFJl
c3RvcmUgcHJldmlvdXNseSBzdG9yZWQgYXVkaW8gc3RhdGVzLgotICAgIHNldFNwZWFrZXJwaG9u
ZU9uKHNhdmVkSXNTcGVha2VyUGhvbmVPbik7Ci0gICAgc2V0TWljcm9waG9uZU11dGUoc2F2ZWRJ
c01pY3JvcGhvbmVNdXRlKTsKLSAgICBhdWRpb01hbmFnZXIuc2V0TW9kZShzYXZlZEF1ZGlvTW9k
ZSk7Ci0KLSAgICAvLyBBYmFuZG9uIGF1ZGlvIGZvY3VzLiBHaXZlcyB0aGUgcHJldmlvdXMgZm9j
dXMgb3duZXIsIGlmIGFueSwgZm9jdXMuCi0gICAgYXVkaW9NYW5hZ2VyLmFiYW5kb25BdWRpb0Zv
Y3VzKGF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcik7Ci0gICAgYXVkaW9Gb2N1c0NoYW5nZUxpc3Rl
bmVyID0gbnVsbDsKLSAgICBMb2cuZChUQUcsICJBYmFuZG9uZWQgYXVkaW8gZm9jdXMgZm9yIFZP
SUNFX0NBTEwgc3RyZWFtcyIpOwotCi0gICAgaWYgKHByb3hpbWl0eVNlbnNvciAhPSBudWxsKSB7
Ci0gICAgICBwcm94aW1pdHlTZW5zb3Iuc3RvcCgpOwotICAgICAgcHJveGltaXR5U2Vuc29yID0g
bnVsbDsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXplZCA9IGZhbHNlOwotICB9Ci0KLSAgLyoqIENo
YW5nZXMgc2VsZWN0aW9uIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGF1ZGlvIGRldmljZS4gKi8K
LSAgcHVibGljIHZvaWQgc2V0QXVkaW9EZXZpY2UoQXVkaW9EZXZpY2UgZGV2aWNlKSB7Ci0gICAg
TG9nLmQoVEFHLCAic2V0QXVkaW9EZXZpY2UoZGV2aWNlPSIgKyBkZXZpY2UgKyAiKSIpOwotICAg
IEFwcFJUQ1V0aWxzLmFzc2VydElzVHJ1ZShhdWRpb0RldmljZXMuY29udGFpbnMoZGV2aWNlKSk7
Ci0KLSAgICBzd2l0Y2ggKGRldmljZSkgewotICAgICAgY2FzZSBTUEVBS0VSX1BIT05FOgotICAg
ICAgICBzZXRTcGVha2VycGhvbmVPbih0cnVlKTsKLSAgICAgICAgc2VsZWN0ZWRBdWRpb0Rldmlj
ZSA9IEF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2Fz
ZSBFQVJQSUVDRToKLSAgICAgICAgc2V0U3BlYWtlcnBob25lT24oZmFsc2UpOwotICAgICAgICBz
ZWxlY3RlZEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZpY2UuRUFSUElFQ0U7Ci0gICAgICAgIGJyZWFr
OwotICAgICAgY2FzZSBXSVJFRF9IRUFEU0VUOgotICAgICAgICBzZXRTcGVha2VycGhvbmVPbihm
YWxzZSk7Ci0gICAgICAgIHNlbGVjdGVkQXVkaW9EZXZpY2UgPSBBdWRpb0RldmljZS5XSVJFRF9I
RUFEU0VUOwotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIExvZy5lKFRB
RywgIkludmFsaWQgYXVkaW8gZGV2aWNlIHNlbGVjdGlvbiIpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgb25BdWRpb01hbmFnZXJDaGFuZ2VkU3RhdGUoKTsKLSAgfQotCi0gIC8qKiBSZXR1
cm5zIGN1cnJlbnQgc2V0IG9mIGF2YWlsYWJsZS9zZWxlY3RhYmxlIGF1ZGlvIGRldmljZXMuICov
Ci0gIHB1YmxpYyBTZXQ8QXVkaW9EZXZpY2U+IGdldEF1ZGlvRGV2aWNlcygpIHsKLSAgICByZXR1
cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0KG5ldyBIYXNoU2V0PEF1ZGlvRGV2aWNlPihh
dWRpb0RldmljZXMpKTsKLSAgfQotCi0gIC8qKiBSZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZWN0
ZWQgYXVkaW8gZGV2aWNlLiAqLwotICBwdWJsaWMgQXVkaW9EZXZpY2UgZ2V0U2VsZWN0ZWRBdWRp
b0RldmljZSgpIHsKLSAgICByZXR1cm4gc2VsZWN0ZWRBdWRpb0RldmljZTsKLSAgfQotCi0gIC8q
KgotICAgKiBSZWdpc3RlcnMgcmVjZWl2ZXIgZm9yIHRoZSBicm9hZGNhc3RlZCBpbnRlbnQgd2hl
biBhIHdpcmVkIGhlYWRzZXQgaXMKLSAgICogcGx1Z2dlZCBpbiBvciB1bnBsdWdnZWQuIFRoZSBy
ZWNlaXZlZCBpbnRlbnQgd2lsbCBoYXZlIGFuIGV4dHJhCi0gICAqICdzdGF0ZScgdmFsdWUgd2hl
cmUgMCBtZWFucyB1bnBsdWdnZWQsIGFuZCAxIG1lYW5zIHBsdWdnZWQuCi0gICAqLwotICBwcml2
YXRlIHZvaWQgcmVnaXN0ZXJGb3JXaXJlZEhlYWRzZXRJbnRlbnRCcm9hZGNhc3QoKSB7Ci0gICAg
SW50ZW50RmlsdGVyIGZpbHRlciA9IG5ldyBJbnRlbnRGaWx0ZXIoSW50ZW50LkFDVElPTl9IRUFE
U0VUX1BMVUcpOwotCi0gICAgLyoqIFJlY2VpdmVyIHdoaWNoIGhhbmRsZXMgY2hhbmdlcyBpbiB3
aXJlZCBoZWFkc2V0IGF2YWlsYWJpbGl0eS4gKi8KLSAgICB3aXJlZEhlYWRzZXRSZWNlaXZlciA9
IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBTVEFURV9VTlBMVUdHRUQgPSAwOwotICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNU
QVRFX1BMVUdHRUQgPSAxOwotICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBU19OT19N
SUMgPSAwOwotICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhBU19NSUMgPSAxOwotCi0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRl
eHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAgaW50IHN0YXRlID0gaW50ZW50LmdldEludEV4
dHJhKCJzdGF0ZSIsIFNUQVRFX1VOUExVR0dFRCk7Ci0gICAgICAgIGludCBtaWNyb3Bob25lID0g
aW50ZW50LmdldEludEV4dHJhKCJtaWNyb3Bob25lIiwgSEFTX05PX01JQyk7Ci0gICAgICAgIFN0
cmluZyBuYW1lID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKCJuYW1lIik7Ci0gICAgICAgIExvZy5k
KFRBRywgIkJyb2FkY2FzdFJlY2VpdmVyLm9uUmVjZWl2ZSIgKyBBcHBSVENVdGlscy5nZXRUaHJl
YWRJbmZvKCkgKyAiOiAiCi0gICAgICAgICAgICAgICAgKyAiYT0iICsgaW50ZW50LmdldEFjdGlv
bigpICsgIiwgcz0iCi0gICAgICAgICAgICAgICAgKyAoc3RhdGUgPT0gU1RBVEVfVU5QTFVHR0VE
ID8gInVucGx1Z2dlZCIgOiAicGx1Z2dlZCIpICsgIiwgbT0iCi0gICAgICAgICAgICAgICAgKyAo
bWljcm9waG9uZSA9PSBIQVNfTUlDID8gIm1pYyIgOiAibm8gbWljIikgKyAiLCBuPSIgKyBuYW1l
ICsgIiwgc2I9IgotICAgICAgICAgICAgICAgICsgaXNJbml0aWFsU3RpY2t5QnJvYWRjYXN0KCkp
OwotCi0gICAgICAgIGJvb2xlYW4gaGFzV2lyZWRIZWFkc2V0ID0gKHN0YXRlID09IFNUQVRFX1BM
VUdHRUQpOwotICAgICAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgICAgICAgY2FzZSBTVEFURV9V
TlBMVUdHRUQ6Ci0gICAgICAgICAgICB1cGRhdGVBdWRpb0RldmljZVN0YXRlKGhhc1dpcmVkSGVh
ZHNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIFNUQVRFX1BMVUdHRUQ6
Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWRBdWRpb0RldmljZSAhPSBBdWRpb0RldmljZS5XSVJF
RF9IRUFEU0VUKSB7Ci0gICAgICAgICAgICAgIHVwZGF0ZUF1ZGlvRGV2aWNlU3RhdGUoaGFzV2ly
ZWRIZWFkc2V0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBMb2cuZShUQUcsICJJbnZhbGlkIHN0YXRlIik7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgfQotICAgIH07Ci0KLSAgICBhcHBydGND
b250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIod2lyZWRIZWFkc2V0UmVjZWl2ZXIsIGZpbHRlcik7Ci0g
IH0KLQotICAvKiogVW5yZWdpc3RlciByZWNlaXZlciBmb3IgYnJvYWRjYXN0ZWQgQUNUSU9OX0hF
QURTRVRfUExVRyBpbnRlbnQuICovCi0gIHByaXZhdGUgdm9pZCB1bnJlZ2lzdGVyRm9yV2lyZWRI
ZWFkc2V0SW50ZW50QnJvYWRjYXN0KCkgewotICAgIGFwcHJ0Y0NvbnRleHQudW5yZWdpc3RlclJl
Y2VpdmVyKHdpcmVkSGVhZHNldFJlY2VpdmVyKTsKLSAgICB3aXJlZEhlYWRzZXRSZWNlaXZlciA9
IG51bGw7Ci0gIH0KLQotICAvKiogU2V0cyB0aGUgc3BlYWtlciBwaG9uZSBtb2RlLiAqLwotICBw
cml2YXRlIHZvaWQgc2V0U3BlYWtlcnBob25lT24oYm9vbGVhbiBvbikgewotICAgIGJvb2xlYW4g
d2FzT24gPSBhdWRpb01hbmFnZXIuaXNTcGVha2VycGhvbmVPbigpOwotICAgIGlmICh3YXNPbiA9
PSBvbikgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdWRpb01hbmFnZXIuc2V0U3BlYWtl
cnBob25lT24ob24pOwotICB9Ci0KLSAgLyoqIFNldHMgdGhlIG1pY3JvcGhvbmUgbXV0ZSBzdGF0
ZS4gKi8KLSAgcHJpdmF0ZSB2b2lkIHNldE1pY3JvcGhvbmVNdXRlKGJvb2xlYW4gb24pIHsKLSAg
ICBib29sZWFuIHdhc011dGVkID0gYXVkaW9NYW5hZ2VyLmlzTWljcm9waG9uZU11dGUoKTsKLSAg
ICBpZiAod2FzTXV0ZWQgPT0gb24pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXVkaW9N
YW5hZ2VyLnNldE1pY3JvcGhvbmVNdXRlKG9uKTsKLSAgfQotCi0gIC8qKiBHZXRzIHRoZSBjdXJy
ZW50IGVhcnBpZWNlIHN0YXRlLiAqLwotICBwcml2YXRlIGJvb2xlYW4gaGFzRWFycGllY2UoKSB7
Ci0gICAgcmV0dXJuIGFwcHJ0Y0NvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1G
ZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfVEVMRVBIT05ZKTsKLSAgfQotCi0gIC8qKgot
ICAgKiBDaGVja3Mgd2hldGhlciBhIHdpcmVkIGhlYWRzZXQgaXMgY29ubmVjdGVkIG9yIG5vdC4K
LSAgICogVGhpcyBpcyBub3QgYSB2YWxpZCBpbmRpY2F0aW9uIHRoYXQgYXVkaW8gcGxheWJhY2sg
aXMgYWN0dWFsbHkgb3ZlcgotICAgKiB0aGUgd2lyZWQgaGVhZHNldCBhcyBhdWRpbyByb3V0aW5n
IGRlcGVuZHMgb24gb3RoZXIgY29uZGl0aW9ucy4gV2UKLSAgICogb25seSB1c2UgaXQgYXMgYW4g
ZWFybHkgaW5kaWNhdG9yIChkdXJpbmcgaW5pdGlhbGl6YXRpb24pIG9mIGFuIGF0dGFjaGVkCi0g
ICAqIHdpcmVkIGhlYWRzZXQuCi0gICAqLwotICBARGVwcmVjYXRlZAotICBwcml2YXRlIGJvb2xl
YW4gaGFzV2lyZWRIZWFkc2V0KCkgewotICAgIHJldHVybiBhdWRpb01hbmFnZXIuaXNXaXJlZEhl
YWRzZXRPbigpOwotICB9Ci0KLSAgLyoqIFVwZGF0ZSBsaXN0IG9mIHBvc3NpYmxlIGF1ZGlvIGRl
dmljZXMgYW5kIG1ha2UgbmV3IGRldmljZSBzZWxlY3Rpb24uICovCi0gIHByaXZhdGUgdm9pZCB1
cGRhdGVBdWRpb0RldmljZVN0YXRlKGJvb2xlYW4gaGFzV2lyZWRIZWFkc2V0KSB7Ci0gICAgLy8g
VXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBhdWRpbyBkZXZpY2VzLgotICAgIGF1ZGlvRGV2
aWNlcy5jbGVhcigpOwotICAgIGlmIChoYXNXaXJlZEhlYWRzZXQpIHsKLSAgICAgIC8vIElmIGEg
d2lyZWQgaGVhZHNldCBpcyBjb25uZWN0ZWQsIHRoZW4gaXQgaXMgdGhlIG9ubHkgcG9zc2libGUg
b3B0aW9uLgotICAgICAgYXVkaW9EZXZpY2VzLmFkZChBdWRpb0RldmljZS5XSVJFRF9IRUFEU0VU
KTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gTm8gd2lyZWQgaGVhZHNldCwgaGVuY2UgdGhlIGF1
ZGlvLWRldmljZSBsaXN0IGNhbiBjb250YWluIHNwZWFrZXIKLSAgICAgIC8vIHBob25lIChvbiBh
IHRhYmxldCksIG9yIHNwZWFrZXIgcGhvbmUgYW5kIGVhcnBpZWNlIChvbiBtb2JpbGUgcGhvbmUp
LgotICAgICAgYXVkaW9EZXZpY2VzLmFkZChBdWRpb0RldmljZS5TUEVBS0VSX1BIT05FKTsKLSAg
ICAgIGlmIChoYXNFYXJwaWVjZSgpKSB7Ci0gICAgICAgIGF1ZGlvRGV2aWNlcy5hZGQoQXVkaW9E
ZXZpY2UuRUFSUElFQ0UpOwotICAgICAgfQotICAgIH0KLSAgICBMb2cuZChUQUcsICJhdWRpb0Rl
dmljZXM6ICIgKyBhdWRpb0RldmljZXMpOwotCi0gICAgLy8gU3dpdGNoIHRvIGNvcnJlY3QgYXVk
aW8gZGV2aWNlIGdpdmVuIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBhdWRpbyBkZXZpY2VzLgotICAg
IGlmIChoYXNXaXJlZEhlYWRzZXQpIHsKLSAgICAgIHNldEF1ZGlvRGV2aWNlKEF1ZGlvRGV2aWNl
LldJUkVEX0hFQURTRVQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzZXRBdWRpb0RldmljZShkZWZh
dWx0QXVkaW9EZXZpY2UpOwotICAgIH0KLSAgfQotCi0gIC8qKiBDYWxsZWQgZWFjaCB0aW1lIGEg
bmV3IGF1ZGlvIGRldmljZSBoYXMgYmVlbiBhZGRlZCBvciByZW1vdmVkLiAqLwotICBwcml2YXRl
IHZvaWQgb25BdWRpb01hbmFnZXJDaGFuZ2VkU3RhdGUoKSB7Ci0gICAgTG9nLmQoVEFHLCAib25B
dWRpb01hbmFnZXJDaGFuZ2VkU3RhdGU6IGRldmljZXM9IiArIGF1ZGlvRGV2aWNlcyArICIsIHNl
bGVjdGVkPSIKLSAgICAgICAgICAgICsgc2VsZWN0ZWRBdWRpb0RldmljZSk7Ci0KLSAgICAvLyBF
bmFibGUgdGhlIHByb3hpbWl0eSBzZW5zb3IgaWYgdGhlcmUgYXJlIHR3byBhdmFpbGFibGUgYXVk
aW8gZGV2aWNlcwotICAgIC8vIGluIHRoZSBsaXN0LiBHaXZlbiB0aGUgY3VycmVudCBpbXBsZW1l
bnRhdGlvbiwgd2Uga25vdyB0aGF0IHRoZSBjaG9pY2UKLSAgICAvLyB3aWxsIHRoZW4gYmUgYmV0
d2VlbiBFQVJQSUVDRSBhbmQgU1BFQUtFUl9QSE9ORS4KLSAgICBpZiAoYXVkaW9EZXZpY2VzLnNp
emUoKSA9PSAyKSB7Ci0gICAgICBBcHBSVENVdGlscy5hc3NlcnRJc1RydWUoYXVkaW9EZXZpY2Vz
LmNvbnRhaW5zKEF1ZGlvRGV2aWNlLkVBUlBJRUNFKQotICAgICAgICAgICYmIGF1ZGlvRGV2aWNl
cy5jb250YWlucyhBdWRpb0RldmljZS5TUEVBS0VSX1BIT05FKSk7Ci0gICAgICAvLyBTdGFydCB0
aGUgcHJveGltaXR5IHNlbnNvci4KLSAgICAgIHByb3hpbWl0eVNlbnNvci5zdGFydCgpOwotICAg
IH0gZWxzZSBpZiAoYXVkaW9EZXZpY2VzLnNpemUoKSA9PSAxKSB7Ci0gICAgICAvLyBTdG9wIHRo
ZSBwcm94aW1pdHkgc2Vuc29yIHNpbmNlIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCi0gICAgICBw
cm94aW1pdHlTZW5zb3Iuc3RvcCgpOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZShUQUcsICJJ
bnZhbGlkIGRldmljZSBsaXN0Iik7Ci0gICAgfQotCi0gICAgaWYgKG9uU3RhdGVDaGFuZ2VMaXN0
ZW5lciAhPSBudWxsKSB7Ci0gICAgICAvLyBSdW4gY2FsbGJhY2sgdG8gbm90aWZ5IGEgbGlzdGVu
aW5nIGNsaWVudC4gVGhlIGNsaWVudCBjYW4gdGhlbgotICAgICAgLy8gdXNlIHB1YmxpYyBnZXR0
ZXJzIHRvIHF1ZXJ5IHRoZSBuZXcgc3RhdGUuCi0gICAgICBvblN0YXRlQ2hhbmdlTGlzdGVuZXIu
cnVuKCk7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMv
QXBwUlRDQ2xpZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBw
cnRjL0FwcFJUQ0NsaWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvQXBwUlRDQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzEg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7
Ci0KLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBl
ZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotCi1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgotICogQXBwUlRDQ2xpZW50IGlzIHRoZSBpbnRl
cmZhY2UgcmVwcmVzZW50aW5nIGFuIEFwcFJUQyBjbGllbnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZh
Y2UgQXBwUlRDQ2xpZW50IHsKLSAgLyoqCi0gICAqIFN0cnVjdCBob2xkaW5nIHRoZSBjb25uZWN0
aW9uIHBhcmFtZXRlcnMgb2YgYW4gQXBwUlRDIHJvb20uCi0gICAqLwotICBjbGFzcyBSb29tQ29u
bmVjdGlvblBhcmFtZXRlcnMgewotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgcm9vbVVybDsKLSAg
ICBwdWJsaWMgZmluYWwgU3RyaW5nIHJvb21JZDsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBs
b29wYmFjazsKLSAgICBwdWJsaWMgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzKFN0cmluZyByb29t
VXJsLCBTdHJpbmcgcm9vbUlkLCBib29sZWFuIGxvb3BiYWNrKSB7Ci0gICAgICB0aGlzLnJvb21V
cmwgPSByb29tVXJsOwotICAgICAgdGhpcy5yb29tSWQgPSByb29tSWQ7Ci0gICAgICB0aGlzLmxv
b3BiYWNrID0gbG9vcGJhY2s7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEFzeW5jaHJvbm91
c2x5IGNvbm5lY3QgdG8gYW4gQXBwUlRDIHJvb20gVVJMIHVzaW5nIHN1cHBsaWVkIGNvbm5lY3Rp
b24KLSAgICogcGFyYW1ldGVycy4gT25jZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIG9uQ29u
bmVjdGVkVG9Sb29tKCkKLSAgICogY2FsbGJhY2sgd2l0aCByb29tIHBhcmFtZXRlcnMgaXMgaW52
b2tlZC4KLSAgICovCi0gIHZvaWQgY29ubmVjdFRvUm9vbShSb29tQ29ubmVjdGlvblBhcmFtZXRl
cnMgY29ubmVjdGlvblBhcmFtZXRlcnMpOwotCi0gIC8qKgotICAgKiBTZW5kIG9mZmVyIFNEUCB0
byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gICAqLwotICB2b2lkIHNlbmRPZmZlclNkcChmaW5h
bCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKTsKLQotICAvKioKLSAgICogU2VuZCBhbnN3ZXIgU0RQ
IHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgICovCi0gIHZvaWQgc2VuZEFuc3dlclNkcChm
aW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKTsKLQotICAvKioKLSAgICogU2VuZCBJY2UgY2Fu
ZGlkYXRlIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgICovCi0gIHZvaWQgc2VuZExvY2Fs
SWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpOwotCi0gIC8qKgotICAg
KiBTZW5kIHJlbW92ZWQgSUNFIGNhbmRpZGF0ZXMgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50Lgot
ICAgKi8KLSAgdm9pZCBzZW5kTG9jYWxJY2VDYW5kaWRhdGVSZW1vdmFscyhmaW5hbCBJY2VDYW5k
aWRhdGVbXSBjYW5kaWRhdGVzKTsKLQotICAvKioKLSAgICogRGlzY29ubmVjdCBmcm9tIHJvb20u
Ci0gICAqLwotICB2b2lkIGRpc2Nvbm5lY3RGcm9tUm9vbSgpOwotCi0gIC8qKgotICAgKiBTdHJ1
Y3QgaG9sZGluZyB0aGUgc2lnbmFsaW5nIHBhcmFtZXRlcnMgb2YgYW4gQXBwUlRDIHJvb20uCi0g
ICAqLwotICBjbGFzcyBTaWduYWxpbmdQYXJhbWV0ZXJzIHsKLSAgICBwdWJsaWMgZmluYWwgTGlz
dDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnM7Ci0gICAgcHVibGljIGZpbmFs
IGJvb2xlYW4gaW5pdGlhdG9yOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgY2xpZW50SWQ7Ci0g
ICAgcHVibGljIGZpbmFsIFN0cmluZyB3c3NVcmw7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB3
c3NQb3N0VXJsOwotICAgIHB1YmxpYyBmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHA7
Ci0gICAgcHVibGljIGZpbmFsIExpc3Q8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVzOwotCi0g
ICAgcHVibGljIFNpZ25hbGluZ1BhcmFtZXRlcnMoTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2
ZXI+IGljZVNlcnZlcnMsIGJvb2xlYW4gaW5pdGlhdG9yLAotICAgICAgICBTdHJpbmcgY2xpZW50
SWQsIFN0cmluZyB3c3NVcmwsIFN0cmluZyB3c3NQb3N0VXJsLCBTZXNzaW9uRGVzY3JpcHRpb24g
b2ZmZXJTZHAsCi0gICAgICAgIExpc3Q8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVzKSB7Ci0g
ICAgICB0aGlzLmljZVNlcnZlcnMgPSBpY2VTZXJ2ZXJzOwotICAgICAgdGhpcy5pbml0aWF0b3Ig
PSBpbml0aWF0b3I7Ci0gICAgICB0aGlzLmNsaWVudElkID0gY2xpZW50SWQ7Ci0gICAgICB0aGlz
Lndzc1VybCA9IHdzc1VybDsKLSAgICAgIHRoaXMud3NzUG9zdFVybCA9IHdzc1Bvc3RVcmw7Ci0g
ICAgICB0aGlzLm9mZmVyU2RwID0gb2ZmZXJTZHA7Ci0gICAgICB0aGlzLmljZUNhbmRpZGF0ZXMg
PSBpY2VDYW5kaWRhdGVzOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBDYWxsYmFjayBpbnRl
cmZhY2UgZm9yIG1lc3NhZ2VzIGRlbGl2ZXJlZCBvbiBzaWduYWxpbmcgY2hhbm5lbC4KLSAgICoK
LSAgICogPHA+TWV0aG9kcyBhcmUgZ3VhcmFudGVlZCB0byBiZSBpbnZva2VkIG9uIHRoZSBVSSB0
aHJlYWQgb2YgfGFjdGl2aXR5fC4KLSAgICovCi0gIGludGVyZmFjZSBTaWduYWxpbmdFdmVudHMg
ewotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgdGhlIHJvb20ncyBzaWduYWxp
bmcgcGFyYW1ldGVycwotICAgICAqIFNpZ25hbGluZ1BhcmFtZXRlcnMgYXJlIGV4dHJhY3RlZC4K
LSAgICAgKi8KLSAgICB2b2lkIG9uQ29ubmVjdGVkVG9Sb29tKGZpbmFsIFNpZ25hbGluZ1BhcmFt
ZXRlcnMgcGFyYW1zKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcmVt
b3RlIFNEUCBpcyByZWNlaXZlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uUmVtb3RlRGVzY3JpcHRp
b24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxs
YmFjayBmaXJlZCBvbmNlIHJlbW90ZSBJY2UgY2FuZGlkYXRlIGlzIHJlY2VpdmVkLgotICAgICAq
LwotICAgIHZvaWQgb25SZW1vdGVJY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRp
ZGF0ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHJlbW90ZSBJY2Ug
Y2FuZGlkYXRlIHJlbW92YWxzIGFyZSByZWNlaXZlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uUmVt
b3RlSWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7
Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGNoYW5uZWwgaXMgY2xvc2Vk
LgotICAgICAqLwotICAgIHZvaWQgb25DaGFubmVsQ2xvc2UoKTsKLQotICAgIC8qKgotICAgICAq
IENhbGxiYWNrIGZpcmVkIG9uY2UgY2hhbm5lbCBlcnJvciBoYXBwZW5lZC4KLSAgICAgKi8KLSAg
ICB2b2lkIG9uQ2hhbm5lbEVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbik7Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENQcm94aW1pdHlTZW5zb3Iu
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDUHJv
eGltaXR5U2Vuc29yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9BcHBSVENQcm94aW1pdHlTZW5zb3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDE2OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFw
cHJ0YzsKLQotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFwcFJUQ1V0aWxzOwotCi1p
bXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5T
ZW5zb3I7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3JFdmVudDsKLWltcG9ydCBhbmRy
b2lkLmhhcmR3YXJlLlNlbnNvckV2ZW50TGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2Fy
ZS5TZW5zb3JNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9p
ZC51dGlsLkxvZzsKLQotaW1wb3J0IG9yZy53ZWJydGMuVGhyZWFkVXRpbHM7Ci0KLS8qKgotICog
QXBwUlRDUHJveGltaXR5U2Vuc29yIG1hbmFnZXMgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHBy
b3hpbWl0eSBzZW5zb3IgaW4KLSAqIHRoZSBBcHBSVEMgZGVtby4KLSAqIE9uIG1vc3QgZGV2aWNl
LCB0aGUgcHJveGltaXR5IHNlbnNvciBpcyBpbXBsZW1lbnRlZCBhcyBhIGJvb2xlYW4tc2Vuc29y
LgotICogSXQgcmV0dXJucyBqdXN0IHR3byB2YWx1ZXMgIk5FQVIiIG9yICJGQVIiLiBUaHJlc2hv
bGRpbmcgaXMgZG9uZSBvbiB0aGUgTFVYCi0gKiB2YWx1ZSBpLmUuIHRoZSBMVVggdmFsdWUgb2Yg
dGhlIGxpZ2h0IHNlbnNvciBpcyBjb21wYXJlZCB3aXRoIGEgdGhyZXNob2xkLgotICogQSBMVVgt
dmFsdWUgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQgbWVhbnMgdGhlIHByb3hpbWl0eSBzZW5zb3Ig
cmV0dXJucyAiRkFSIi4KLSAqIEFueXRoaW5nIGxlc3MgdGhhbiB0aGUgdGhyZXNob2xkIHZhbHVl
IGFuZCB0aGUgc2Vuc29yICByZXR1cm5zICJORUFSIi4KLSAqLwotcHVibGljIGNsYXNzIEFwcFJU
Q1Byb3hpbWl0eVNlbnNvciBpbXBsZW1lbnRzIFNlbnNvckV2ZW50TGlzdGVuZXIgewotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFwcFJUQ1Byb3hpbWl0eVNlbnNvciI7Ci0K
LSAgLy8gVGhpcyBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZCwgc3RhcnRlZCBhbmQgc3RvcHBlZCBv
biBvbmUgdGhyZWFkCi0gIC8vIChlLmcuIHRoZSBtYWluIHRocmVhZCkuIFdlIHVzZSB8bm9uVGhy
ZWFkU2FmZXwgdG8gZW5zdXJlIHRoYXQgdGhpcyBpcwotICAvLyB0aGUgY2FzZS4gT25seSBhY3Rp
dmUgd2hlbiB8REVCVUd8IGlzIHNldCB0byB0cnVlLgotICBwcml2YXRlIGZpbmFsIFRocmVhZFV0
aWxzLlRocmVhZENoZWNrZXIgdGhyZWFkQ2hlY2tlciA9IG5ldyBUaHJlYWRVdGlscy5UaHJlYWRD
aGVja2VyKCk7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBvblNlbnNvclN0YXRlTGlzdGVu
ZXI7Ci0gIHByaXZhdGUgZmluYWwgU2Vuc29yTWFuYWdlciBzZW5zb3JNYW5hZ2VyOwotICBwcml2
YXRlIFNlbnNvciBwcm94aW1pdHlTZW5zb3IgPSBudWxsOwotICBwcml2YXRlIGJvb2xlYW4gbGFz
dFN0YXRlUmVwb3J0SXNOZWFyID0gZmFsc2U7Ci0KLSAgLyoqIENvbnN0cnVjdGlvbiAqLwotICBz
dGF0aWMgQXBwUlRDUHJveGltaXR5U2Vuc29yIGNyZWF0ZShDb250ZXh0IGNvbnRleHQsIFJ1bm5h
YmxlIHNlbnNvclN0YXRlTGlzdGVuZXIpIHsKLSAgICByZXR1cm4gbmV3IEFwcFJUQ1Byb3hpbWl0
eVNlbnNvcihjb250ZXh0LCBzZW5zb3JTdGF0ZUxpc3RlbmVyKTsKLSAgfQotCi0gIHByaXZhdGUg
QXBwUlRDUHJveGltaXR5U2Vuc29yKENvbnRleHQgY29udGV4dCwgUnVubmFibGUgc2Vuc29yU3Rh
dGVMaXN0ZW5lcikgewotICAgIExvZy5kKFRBRywgIkFwcFJUQ1Byb3hpbWl0eVNlbnNvciIgKyBB
cHBSVENVdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIG9uU2Vuc29yU3RhdGVMaXN0ZW5lciA9
IHNlbnNvclN0YXRlTGlzdGVuZXI7Ci0gICAgc2Vuc29yTWFuYWdlciA9ICgoU2Vuc29yTWFuYWdl
cikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuU0VOU09SX1NFUlZJQ0UpKTsKLSAg
fQotCi0gIC8qKgotICAgKiBBY3RpdmF0ZSB0aGUgcHJveGltaXR5IHNlbnNvci4gQWxzbyBkbyBp
bml0aWFsaXphdGlvbiBpZiBjYWxsZWQgZm9yIHRoZQotICAgKiBmaXJzdCB0aW1lLgotICAgKi8K
LSAgcHVibGljIGJvb2xlYW4gc3RhcnQoKSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25W
YWxpZFRocmVhZCgpOwotICAgIExvZy5kKFRBRywgInN0YXJ0IiArIEFwcFJUQ1V0aWxzLmdldFRo
cmVhZEluZm8oKSk7Ci0gICAgaWYgKCFpbml0RGVmYXVsdFNlbnNvcigpKSB7Ci0gICAgICAvLyBQ
cm94aW1pdHkgc2Vuc29yIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBkZXZpY2UuCi0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHNlbnNvck1hbmFnZXIucmVnaXN0ZXJMaXN0ZW5lcih0
aGlzLCBwcm94aW1pdHlTZW5zb3IsIFNlbnNvck1hbmFnZXIuU0VOU09SX0RFTEFZX05PUk1BTCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiogRGVhY3RpdmF0ZSB0aGUgcHJveGltaXR5
IHNlbnNvci4gKi8KLSAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNo
ZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nLmQoVEFHLCAic3RvcCIgKyBBcHBSVENVdGls
cy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIGlmIChwcm94aW1pdHlTZW5zb3IgPT0gbnVsbCkgewot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZW5zb3JNYW5hZ2VyLnVucmVnaXN0ZXJMaXN0ZW5l
cih0aGlzLCBwcm94aW1pdHlTZW5zb3IpOwotICB9Ci0KLSAgLyoqIEdldHRlciBmb3IgbGFzdCBy
ZXBvcnRlZCBzdGF0ZS4gU2V0IHRvIHRydWUgaWYgIm5lYXIiIGlzIHJlcG9ydGVkLiAqLwotICBw
dWJsaWMgYm9vbGVhbiBzZW5zb3JSZXBvcnRzTmVhclN0YXRlKCkgewotICAgIHRocmVhZENoZWNr
ZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICByZXR1cm4gbGFzdFN0YXRlUmVwb3J0SXNO
ZWFyOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBmaW5hbCB2b2lkIG9uQWNjdXJhY3lD
aGFuZ2VkKFNlbnNvciBzZW5zb3IsIGludCBhY2N1cmFjeSkgewotICAgIHRocmVhZENoZWNrZXIu
Y2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBBcHBSVENVdGlscy5hc3NlcnRJc1RydWUoc2Vu
c29yLmdldFR5cGUoKSA9PSBTZW5zb3IuVFlQRV9QUk9YSU1JVFkpOwotICAgIGlmIChhY2N1cmFj
eSA9PSBTZW5zb3JNYW5hZ2VyLlNFTlNPUl9TVEFUVVNfVU5SRUxJQUJMRSkgewotICAgICAgTG9n
LmUoVEFHLCAiVGhlIHZhbHVlcyByZXR1cm5lZCBieSB0aGlzIHNlbnNvciBjYW5ub3QgYmUgdHJ1
c3RlZCIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmluYWwgdm9pZCBv
blNlbnNvckNoYW5nZWQoU2Vuc29yRXZlbnQgZXZlbnQpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNo
ZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgQXBwUlRDVXRpbHMuYXNzZXJ0SXNUcnVlKGV2ZW50
LnNlbnNvci5nZXRUeXBlKCkgPT0gU2Vuc29yLlRZUEVfUFJPWElNSVRZKTsKLSAgICAvLyBBcyBh
IGJlc3QgcHJhY3RpY2U7IGRvIGFzIGxpdHRsZSBhcyBwb3NzaWJsZSB3aXRoaW4gdGhpcyBtZXRo
b2QgYW5kCi0gICAgLy8gYXZvaWQgYmxvY2tpbmcuCi0gICAgZmxvYXQgZGlzdGFuY2VJbkNlbnRp
bWV0ZXJzID0gZXZlbnQudmFsdWVzWzBdOwotICAgIGlmIChkaXN0YW5jZUluQ2VudGltZXRlcnMg
PCBwcm94aW1pdHlTZW5zb3IuZ2V0TWF4aW11bVJhbmdlKCkpIHsKLSAgICAgIExvZy5kKFRBRywg
IlByb3hpbWl0eSBzZW5zb3IgPT4gTkVBUiBzdGF0ZSIpOwotICAgICAgbGFzdFN0YXRlUmVwb3J0
SXNOZWFyID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAiUHJveGltaXR5
IHNlbnNvciA9PiBGQVIgc3RhdGUiKTsKLSAgICAgIGxhc3RTdGF0ZVJlcG9ydElzTmVhciA9IGZh
bHNlOwotICAgIH0KLQotICAgIC8vIFJlcG9ydCBhYm91dCBuZXcgc3RhdGUgdG8gbGlzdGVuaW5n
IGNsaWVudC4gQ2xpZW50IGNhbiB0aGVuIGNhbGwKLSAgICAvLyBzZW5zb3JSZXBvcnRzTmVhclN0
YXRlKCkgdG8gcXVlcnkgdGhlIGN1cnJlbnQgc3RhdGUgKE5FQVIgb3IgRkFSKS4KLSAgICBpZiAo
b25TZW5zb3JTdGF0ZUxpc3RlbmVyICE9IG51bGwpIHsKLSAgICAgIG9uU2Vuc29yU3RhdGVMaXN0
ZW5lci5ydW4oKTsKLSAgICB9Ci0KLSAgICBMb2cuZChUQUcsICJvblNlbnNvckNoYW5nZWQiICsg
QXBwUlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygpICsgIjogIgotICAgICAgICAgICAgKyAiYWNjdXJh
Y3k9IiArIGV2ZW50LmFjY3VyYWN5ICsgIiwgdGltZXN0YW1wPSIgKyBldmVudC50aW1lc3RhbXAg
KyAiLCBkaXN0YW5jZT0iCi0gICAgICAgICAgICArIGV2ZW50LnZhbHVlc1swXSk7Ci0gIH0KLQot
ICAvKioKLSAgICogR2V0IGRlZmF1bHQgcHJveGltaXR5IHNlbnNvciBpZiBpdCBleGlzdHMuIFRh
YmxldCBkZXZpY2VzIChlLmcuIE5leHVzIDcpCi0gICAqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyB0
eXBlIG9mIHNlbnNvciBhbmQgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZCBpbiBzdWNoCi0gICAqIGNh
c2VzLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIGluaXREZWZhdWx0U2Vuc29yKCkgewotICAg
IGlmIChwcm94aW1pdHlTZW5zb3IgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHByb3hpbWl0eVNlbnNvciA9IHNlbnNvck1hbmFnZXIuZ2V0RGVmYXVsdFNlbnNvcihT
ZW5zb3IuVFlQRV9QUk9YSU1JVFkpOwotICAgIGlmIChwcm94aW1pdHlTZW5zb3IgPT0gbnVsbCkg
ewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBsb2dQcm94aW1pdHlTZW5zb3JJbmZv
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvKiogSGVscGVyIG1ldGhvZCBmb3IgbG9n
Z2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJveGltaXR5IHNlbnNvci4gKi8KLSAgcHJpdmF0
ZSB2b2lkIGxvZ1Byb3hpbWl0eVNlbnNvckluZm8oKSB7Ci0gICAgaWYgKHByb3hpbWl0eVNlbnNv
ciA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIFN0cmluZ0J1aWxkZXIgaW5m
byA9IG5ldyBTdHJpbmdCdWlsZGVyKCJQcm94aW1pdHkgc2Vuc29yOiAiKTsKLSAgICBpbmZvLmFw
cGVuZCgibmFtZT0iKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldE5hbWUoKSk7Ci0gICAgaW5m
by5hcHBlbmQoIiwgdmVuZG9yOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldFZlbmRvcigp
KTsKLSAgICBpbmZvLmFwcGVuZCgiLCBwb3dlcjogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5n
ZXRQb3dlcigpKTsKLSAgICBpbmZvLmFwcGVuZCgiLCByZXNvbHV0aW9uOiAiKS5hcHBlbmQocHJv
eGltaXR5U2Vuc29yLmdldFJlc29sdXRpb24oKSk7Ci0gICAgaW5mby5hcHBlbmQoIiwgbWF4IHJh
bmdlOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldE1heGltdW1SYW5nZSgpKTsKLSAgICBp
ZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuR0lOR0VSQlJF
QUQpIHsKLSAgICAgIC8vIEFkZGVkIGluIEFQSSBsZXZlbCA5LgotICAgICAgaW5mby5hcHBlbmQo
IiwgbWluIGRlbGF5OiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldE1pbkRlbGF5KCkpOwot
ICAgIH0KLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09E
RVMuS0lUS0FUX1dBVENIKSB7Ci0gICAgICAvLyBBZGRlZCBpbiBBUEkgbGV2ZWwgMjAuCi0gICAg
ICBpbmZvLmFwcGVuZCgiLCB0eXBlOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldFN0cmlu
Z1R5cGUoKSk7Ci0gICAgfQotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQu
VkVSU0lPTl9DT0RFUy5MT0xMSVBPUCkgewotICAgICAgLy8gQWRkZWQgaW4gQVBJIGxldmVsIDIx
LgotICAgICAgaW5mby5hcHBlbmQoIiwgbWF4IGRlbGF5OiAiKS5hcHBlbmQocHJveGltaXR5U2Vu
c29yLmdldE1heERlbGF5KCkpOwotICAgICAgaW5mby5hcHBlbmQoIiwgcmVwb3J0aW5nIG1vZGU6
ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0UmVwb3J0aW5nTW9kZSgpKTsKLSAgICAgIGlu
Zm8uYXBwZW5kKCIsIGlzV2FrZVVwU2Vuc29yOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmlz
V2FrZVVwU2Vuc29yKCkpOwotICAgIH0KLSAgICBMb2cuZChUQUcsIGluZm8udG9TdHJpbmcoKSk7
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYWxsQWN0aXZpdHku
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FsbEFjdGl2
aXR5LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9DYWxsQWN0aXZpdHkuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDg3MSArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFu
ZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwotaW1w
b3J0IGFuZHJvaWQuYXBwLkZyYWdtZW50VHJhbnNhY3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250
ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5Q
YWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnByb2plY3Rpb24uTWVkaWFQcm9q
ZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQubWVkaWEucHJvamVjdGlvbi5NZWRpYVByb2plY3Rpb25N
YW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRs
ZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkRpc3Bs
YXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3
LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvdzsKLWltcG9ydCBhbmRyb2lkLnZpZXcu
V2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQ
YXJhbXM7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVG9hc3Q7Ci1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuUnVudGltZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZh
LnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9yZy5hcHBz
cG90LmFwcHJ0Yy5BcHBSVENDbGllbnQuUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotaW1wb3J0
IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVyczsKLWlt
cG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNvbm5lY3Rpb25DbGllbnQuUGVlckNvbm5lY3Rp
b25QYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhMUVudW1lcmF0b3I7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5DYW1lcmEyRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVy
YUVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FZ2xCYXNlOwotaW1wb3J0IG9yZy53ZWJy
dGMuRmlsZVZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1p
bXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rp
b25GYWN0b3J5OwotaW1wb3J0IG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGU7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TY3JlZW5DYXB0dXJlckFuZHJvaWQ7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TdGF0c1JlcG9ydDsK
LWltcG9ydCBvcmcud2VicnRjLlN1cmZhY2VWaWV3UmVuZGVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0
Yy5WaWRlb0NhcHR1cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9GaWxlUmVuZGVyZXI7Ci1p
bXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyOwotCi0vKioKLSAqIEFjdGl2aXR5IGZvciBw
ZWVyIGNvbm5lY3Rpb24gY2FsbCBzZXR1cCwgY2FsbCB3YWl0aW5nCi0gKiBhbmQgY2FsbCB2aWV3
LgotICovCi1wdWJsaWMgY2xhc3MgQ2FsbEFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgaW1wbGVt
ZW50cyBBcHBSVENDbGllbnQuU2lnbmFsaW5nRXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGVlckNvbm5lY3Rpb25DbGllbnQuUGVl
ckNvbm5lY3Rpb25FdmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDYWxsRnJhZ21lbnQuT25DYWxsRXZlbnRzIHsKLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUk9PTUlEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5ST09N
SUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9MT09QQkFDSyA9ICJvcmcu
YXBwc3BvdC5hcHBydGMuTE9PUEJBQ0siOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBF
WFRSQV9WSURFT19DQUxMID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT19DQUxMIjsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU0NSRUVOQ0FQVFVSRSA9ICJvcmcuYXBwc3Bv
dC5hcHBydGMuU0NSRUVOQ0FQVFVSRSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVY
VFJBX0NBTUVSQTIgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkNBTUVSQTIiOwotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19XSURUSCA9ICJvcmcuYXBwc3BvdC5hcHBydGMu
VklERU9fV0lEVEgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19I
RUlHSFQgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJREVPX0hFSUdIVCI7Ci0gIHB1YmxpYyBzdGF0
aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVPX0ZQUyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklE
RU9fRlBTIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9fQ0FQVFVS
RVFVQUxJVFlTTElERVJfRU5BQkxFRCA9Ci0gICAgICAib3JnLmFwcHNvcHQuYXBwcnRjLlZJREVP
X0NBUFRVUkVRVUFMSVRZU0xJREVSIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhU
UkFfVklERU9fQklUUkFURSA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fQklUUkFURSI7Ci0g
IHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVPQ09ERUMgPSAib3JnLmFwcHNw
b3QuYXBwcnRjLlZJREVPQ09ERUMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRS
QV9IV0NPREVDX0VOQUJMRUQgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkhXQ09ERUMiOwotICBwdWJs
aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9DQVBUVVJFVE9URVhUVVJFX0VOQUJMRUQgPSAi
b3JnLmFwcHNwb3QuYXBwcnRjLkNBUFRVUkVUT1RFWFRVUkUiOwotICBwdWJsaWMgc3RhdGljIGZp
bmFsIFN0cmluZyBFWFRSQV9BVURJT19CSVRSQVRFID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5BVURJ
T19CSVRSQVRFIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQVVESU9DT0RF
QyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQVVESU9DT0RFQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nIEVYVFJBX05PQVVESU9QUk9DRVNTSU5HX0VOQUJMRUQgPQotICAgICAgIm9yZy5h
cHBzcG90LmFwcHJ0Yy5OT0FVRElPUFJPQ0VTU0lORyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwg
U3RyaW5nIEVYVFJBX0FFQ0RVTVBfRU5BQkxFRCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQUVDRFVN
UCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX09QRU5TTEVTX0VOQUJMRUQg
PSAib3JnLmFwcHNwb3QuYXBwcnRjLk9QRU5TTEVTIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBT
dHJpbmcgRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BRUMgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkRJ
U0FCTEVfQlVJTFRfSU5fQUVDIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFf
RElTQUJMRV9CVUlMVF9JTl9BR0MgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkRJU0FCTEVfQlVJTFRf
SU5fQUdDIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfRElTQUJMRV9CVUlM
VF9JTl9OUyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuRElTQUJMRV9CVUlMVF9JTl9OUyI7Ci0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0VOQUJMRV9MRVZFTF9DT05UUk9MID0gIm9y
Zy5hcHBzcG90LmFwcHJ0Yy5FTkFCTEVfTEVWRUxfQ09OVFJPTCI7Ci0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgU3RyaW5nIEVYVFJBX0RJU1BMQVlfSFVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5ESVNQ
TEFZX0hVRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1RSQUNJTkcgPSAi
b3JnLmFwcHNwb3QuYXBwcnRjLlRSQUNJTkciOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmlu
ZyBFWFRSQV9DTURMSU5FID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5DTURMSU5FIjsKLSAgcHVibGlj
IHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUlVOVElNRSA9ICJvcmcuYXBwc3BvdC5hcHBydGMu
UlVOVElNRSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVPX0ZJTEVf
QVNfQ0FNRVJBID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT19GSUxFX0FTX0NBTUVSQSI7Ci0g
IHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJ
TEUgPQotICAgICAgIm9yZy5hcHBzcG90LmFwcHJ0Yy5TQVZFX1JFTU9URV9WSURFT19UT19GSUxF
IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU0FWRV9SRU1PVEVfVklERU9f
VE9fRklMRV9XSURUSCA9Ci0gICAgICAib3JnLmFwcHNwb3QuYXBwcnRjLlNBVkVfUkVNT1RFX1ZJ
REVPX1RPX0ZJTEVfV0lEVEgiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9T
QVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hFSUdIVCA9Ci0gICAgICAib3JnLmFwcHNwb3QuYXBw
cnRjLlNBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hUIjsKLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBTdHJpbmcgRVhUUkFfVVNFX1ZBTFVFU19GUk9NX0lOVEVOVCA9Ci0gICAgICAib3JnLmFw
cHNwb3QuYXBwcnRjLlVTRV9WQUxVRVNfRlJPTV9JTlRFTlQiOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIkNhbGxSVENDbGllbnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgQ0FQVFVSRV9QRVJNSVNTSU9OX1JFUVVFU1RfQ09ERSA9IDE7Ci0KLSAgLy8gTGlzdCBv
ZiBtYW5kYXRvcnkgYXBwbGljYXRpb24gcGVybWlzc2lvbnMuCi0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZ1tdIE1BTkRBVE9SWV9QRVJNSVNTSU9OUyA9IHsiYW5kcm9pZC5wZXJtaXNzaW9u
Lk1PRElGWV9BVURJT19TRVRUSU5HUyIsCi0gICAgICAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09S
RF9BVURJTyIsICJhbmRyb2lkLnBlcm1pc3Npb24uSU5URVJORVQifTsKLQotICAvLyBQZWVyIGNv
bm5lY3Rpb24gc3RhdGlzdGljcyBjYWxsYmFjayBwZXJpb2QgaW4gbXMuCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBTVEFUX0NBTExCQUNLX1BFUklPRCA9IDEwMDA7Ci0gIC8vIExvY2FsIHBy
ZXZpZXcgc2NyZWVuIHBvc2l0aW9uIGJlZm9yZSBjYWxsIGlzIGNvbm5lY3RlZC4KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX1hfQ09OTkVDVElORyA9IDA7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBMT0NBTF9ZX0NPTk5FQ1RJTkcgPSAwOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgTE9DQUxfV0lEVEhfQ09OTkVDVElORyA9IDEwMDsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IExPQ0FMX0hFSUdIVF9DT05ORUNUSU5HID0gMTAwOwotICAvLyBMb2NhbCBwcmV2
aWV3IHNjcmVlbiBwb3NpdGlvbiBhZnRlciBjYWxsIGlzIGNvbm5lY3RlZC4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IExPQ0FMX1hfQ09OTkVDVEVEID0gNzI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBMT0NBTF9ZX0NPTk5FQ1RFRCA9IDcyOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgTE9DQUxfV0lEVEhfQ09OTkVDVEVEID0gMjU7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBMT0NBTF9IRUlHSFRfQ09OTkVDVEVEID0gMjU7Ci0gIC8vIFJlbW90ZSB2aWRlbyBzY3Jl
ZW4gcG9zaXRpb24KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFTU9URV9YID0gMDsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFTU9URV9ZID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IFJFTU9URV9XSURUSCA9IDEwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IFJFTU9URV9IRUlHSFQgPSAxMDA7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25DbGllbnQgcGVl
ckNvbm5lY3Rpb25DbGllbnQgPSBudWxsOwotICBwcml2YXRlIEFwcFJUQ0NsaWVudCBhcHBSdGND
bGllbnQ7Ci0gIHByaXZhdGUgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJz
OwotICBwcml2YXRlIEFwcFJUQ0F1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXIgPSBudWxsOwotICBw
cml2YXRlIEVnbEJhc2Ugcm9vdEVnbEJhc2U7Ci0gIHByaXZhdGUgU3VyZmFjZVZpZXdSZW5kZXJl
ciBsb2NhbFJlbmRlcjsKLSAgcHJpdmF0ZSBTdXJmYWNlVmlld1JlbmRlcmVyIHJlbW90ZVJlbmRl
clNjcmVlbjsKLSAgcHJpdmF0ZSBWaWRlb0ZpbGVSZW5kZXJlciB2aWRlb0ZpbGVSZW5kZXJlcjsK
LSAgcHJpdmF0ZSBmaW5hbCBMaXN0PFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzPiByZW1vdGVSZW5k
ZXJlcnMgPQotICAgICAgbmV3IEFycmF5TGlzdDxWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4oKTsK
LSAgcHJpdmF0ZSBQZXJjZW50RnJhbWVMYXlvdXQgbG9jYWxSZW5kZXJMYXlvdXQ7Ci0gIHByaXZh
dGUgUGVyY2VudEZyYW1lTGF5b3V0IHJlbW90ZVJlbmRlckxheW91dDsKLSAgcHJpdmF0ZSBTY2Fs
aW5nVHlwZSBzY2FsaW5nVHlwZTsKLSAgcHJpdmF0ZSBUb2FzdCBsb2dUb2FzdDsKLSAgcHJpdmF0
ZSBib29sZWFuIGNvbW1hbmRMaW5lUnVuOwotICBwcml2YXRlIGludCBydW5UaW1lTXM7Ci0gIHBy
aXZhdGUgYm9vbGVhbiBhY3Rpdml0eVJ1bm5pbmc7Ci0gIHByaXZhdGUgUm9vbUNvbm5lY3Rpb25Q
YXJhbWV0ZXJzIHJvb21Db25uZWN0aW9uUGFyYW1ldGVyczsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVj
dGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICBwcml2YXRlIGJvb2xl
YW4gaWNlQ29ubmVjdGVkOwotICBwcml2YXRlIGJvb2xlYW4gaXNFcnJvcjsKLSAgcHJpdmF0ZSBi
b29sZWFuIGNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmxlID0gdHJ1ZTsKLSAgcHJpdmF0ZSBsb25n
IGNhbGxTdGFydGVkVGltZU1zID0gMDsKLSAgcHJpdmF0ZSBib29sZWFuIG1pY0VuYWJsZWQgPSB0
cnVlOwotICBwcml2YXRlIGJvb2xlYW4gc2NyZWVuY2FwdHVyZUVuYWJsZWQgPSBmYWxzZTsKLSAg
cHJpdmF0ZSBzdGF0aWMgSW50ZW50IG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRh
OwotICBwcml2YXRlIHN0YXRpYyBpbnQgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdENv
ZGU7Ci0KLSAgLy8gQ29udHJvbHMKLSAgcHJpdmF0ZSBDYWxsRnJhZ21lbnQgY2FsbEZyYWdtZW50
OwotICBwcml2YXRlIEh1ZEZyYWdtZW50IGh1ZEZyYWdtZW50OwotICBwcml2YXRlIENwdU1vbml0
b3IgY3B1TW9uaXRvcjsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVu
ZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFu
Y2VTdGF0ZSk7Ci0gICAgVGhyZWFkLnNldERlZmF1bHRVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIo
bmV3IFVuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIodGhpcykpOwotCi0gICAgLy8gU2V0IHdpbmRv
dyBzdHlsZXMgZm9yIGZ1bGxzY3JlZW4td2luZG93IHNpemUuIE5lZWRzIHRvIGJlIGRvbmUgYmVm
b3JlCi0gICAgLy8gYWRkaW5nIGNvbnRlbnQuCi0gICAgcmVxdWVzdFdpbmRvd0ZlYXR1cmUoV2lu
ZG93LkZFQVRVUkVfTk9fVElUTEUpOwotICAgIGdldFdpbmRvdygpLmFkZEZsYWdzKExheW91dFBh
cmFtcy5GTEFHX0ZVTExTQ1JFRU4gfCBMYXlvdXRQYXJhbXMuRkxBR19LRUVQX1NDUkVFTl9PTgot
ICAgICAgICB8IExheW91dFBhcmFtcy5GTEFHX0RJU01JU1NfS0VZR1VBUkQgfCBMYXlvdXRQYXJh
bXMuRkxBR19TSE9XX1dIRU5fTE9DS0VECi0gICAgICAgIHwgTGF5b3V0UGFyYW1zLkZMQUdfVFVS
Tl9TQ1JFRU5fT04pOwotICAgIGdldFdpbmRvdygpLmdldERlY29yVmlldygpLnNldFN5c3RlbVVp
VmlzaWJpbGl0eShWaWV3LlNZU1RFTV9VSV9GTEFHX0hJREVfTkFWSUdBVElPTgotICAgICAgICB8
IFZpZXcuU1lTVEVNX1VJX0ZMQUdfRlVMTFNDUkVFTiB8IFZpZXcuU1lTVEVNX1VJX0ZMQUdfSU1N
RVJTSVZFX1NUSUNLWSk7Ci0gICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuYWN0aXZpdHlfY2Fs
bCk7Ci0KLSAgICBpY2VDb25uZWN0ZWQgPSBmYWxzZTsKLSAgICBzaWduYWxpbmdQYXJhbWV0ZXJz
ID0gbnVsbDsKLSAgICBzY2FsaW5nVHlwZSA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSUxM
OwotCi0gICAgLy8gQ3JlYXRlIFVJIGNvbnRyb2xzLgotICAgIGxvY2FsUmVuZGVyID0gKFN1cmZh
Y2VWaWV3UmVuZGVyZXIpIGZpbmRWaWV3QnlJZChSLmlkLmxvY2FsX3ZpZGVvX3ZpZXcpOwotICAg
IHJlbW90ZVJlbmRlclNjcmVlbiA9IChTdXJmYWNlVmlld1JlbmRlcmVyKSBmaW5kVmlld0J5SWQo
Ui5pZC5yZW1vdGVfdmlkZW9fdmlldyk7Ci0gICAgbG9jYWxSZW5kZXJMYXlvdXQgPSAoUGVyY2Vu
dEZyYW1lTGF5b3V0KSBmaW5kVmlld0J5SWQoUi5pZC5sb2NhbF92aWRlb19sYXlvdXQpOwotICAg
IHJlbW90ZVJlbmRlckxheW91dCA9IChQZXJjZW50RnJhbWVMYXlvdXQpIGZpbmRWaWV3QnlJZChS
LmlkLnJlbW90ZV92aWRlb19sYXlvdXQpOwotICAgIGNhbGxGcmFnbWVudCA9IG5ldyBDYWxsRnJh
Z21lbnQoKTsKLSAgICBodWRGcmFnbWVudCA9IG5ldyBIdWRGcmFnbWVudCgpOwotCi0gICAgLy8g
U2hvdy9oaWRlIGNhbGwgY29udHJvbCBmcmFnbWVudCBvbiB2aWV3IGNsaWNrLgotICAgIFZpZXcu
T25DbGlja0xpc3RlbmVyIGxpc3RlbmVyID0gbmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewot
ICAgICAgICB0b2dnbGVDYWxsQ29udHJvbEZyYWdtZW50VmlzaWJpbGl0eSgpOwotICAgICAgfQot
ICAgIH07Ci0KLSAgICBsb2NhbFJlbmRlci5zZXRPbkNsaWNrTGlzdGVuZXIobGlzdGVuZXIpOwot
ICAgIHJlbW90ZVJlbmRlclNjcmVlbi5zZXRPbkNsaWNrTGlzdGVuZXIobGlzdGVuZXIpOwotICAg
IHJlbW90ZVJlbmRlcmVycy5hZGQocmVtb3RlUmVuZGVyU2NyZWVuKTsKLQotICAgIGZpbmFsIElu
dGVudCBpbnRlbnQgPSBnZXRJbnRlbnQoKTsKLQotICAgIC8vIENyZWF0ZSB2aWRlbyByZW5kZXJl
cnMuCi0gICAgcm9vdEVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZSgpOwotICAgIGxvY2FsUmVuZGVy
LmluaXQocm9vdEVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgbnVsbCk7Ci0gICAgU3RyaW5n
IHNhdmVSZW1vdGVWaWRlb1RvRmlsZSA9IGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9TQVZF
X1JFTU9URV9WSURFT19UT19GSUxFKTsKLQotICAgIC8vIFdoZW4gc2F2ZVJlbW90ZVZpZGVvVG9G
aWxlIGlzIHNldCB3ZSBzYXZlIHRoZSB2aWRlbyBmcm9tIHRoZSByZW1vdGUgdG8gYSBmaWxlLgot
ICAgIGlmIChzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUgIT0gbnVsbCkgewotICAgICAgaW50IHZpZGVv
T3V0V2lkdGggPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9f
RklMRV9XSURUSCwgMCk7Ci0gICAgICBpbnQgdmlkZW9PdXRIZWlnaHQgPSBpbnRlbnQuZ2V0SW50
RXh0cmEoRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQsIDApOwotICAgICAg
dHJ5IHsKLSAgICAgICAgdmlkZW9GaWxlUmVuZGVyZXIgPSBuZXcgVmlkZW9GaWxlUmVuZGVyZXIo
Ci0gICAgICAgICAgICBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUsIHZpZGVvT3V0V2lkdGgsIHZpZGVv
T3V0SGVpZ2h0LCByb290RWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLSAgICAgICAgcmVt
b3RlUmVuZGVyZXJzLmFkZCh2aWRlb0ZpbGVSZW5kZXJlcik7Ci0gICAgICB9IGNhdGNoIChJT0V4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAg
ICAgICAgIkZhaWxlZCB0byBvcGVuIHZpZGVvIGZpbGUgZm9yIG91dHB1dDogIiArIHNhdmVSZW1v
dGVWaWRlb1RvRmlsZSwgZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIHJlbW90ZVJlbmRlclNjcmVl
bi5pbml0KHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIG51bGwpOwotCi0gICAgbG9j
YWxSZW5kZXIuc2V0Wk9yZGVyTWVkaWFPdmVybGF5KHRydWUpOwotICAgIHVwZGF0ZVZpZGVvVmll
dygpOwotCi0gICAgLy8gQ2hlY2sgZm9yIG1hbmRhdG9yeSBwZXJtaXNzaW9ucy4KLSAgICBmb3Ig
KFN0cmluZyBwZXJtaXNzaW9uIDogTUFOREFUT1JZX1BFUk1JU1NJT05TKSB7Ci0gICAgICBpZiAo
Y2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihwZXJtaXNzaW9uKSAhPSBQYWNrYWdlTWFuYWdl
ci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKLSAgICAgICAgbG9nQW5kVG9hc3QoIlBlcm1pc3Npb24g
IiArIHBlcm1pc3Npb24gKyAiIGlzIG5vdCBncmFudGVkIik7Ci0gICAgICAgIHNldFJlc3VsdChS
RVNVTFRfQ0FOQ0VMRUQpOwotICAgICAgICBmaW5pc2goKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgIH0KLQotICAgIFVyaSByb29tVXJpID0gaW50ZW50LmdldERhdGEoKTsKLSAgICBp
ZiAocm9vbVVyaSA9PSBudWxsKSB7Ci0gICAgICBsb2dBbmRUb2FzdChnZXRTdHJpbmcoUi5zdHJp
bmcubWlzc2luZ191cmwpKTsKLSAgICAgIExvZy5lKFRBRywgIkRpZG4ndCBnZXQgYW55IFVSTCBp
biBpbnRlbnQhIik7Ci0gICAgICBzZXRSZXN1bHQoUkVTVUxUX0NBTkNFTEVEKTsKLSAgICAgIGZp
bmlzaCgpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEdldCBJbnRlbnQgcGFyYW1l
dGVycy4KLSAgICBTdHJpbmcgcm9vbUlkID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX1JP
T01JRCk7Ci0gICAgTG9nLmQoVEFHLCAiUm9vbSBJRDogIiArIHJvb21JZCk7Ci0gICAgaWYgKHJv
b21JZCA9PSBudWxsIHx8IHJvb21JZC5sZW5ndGgoKSA9PSAwKSB7Ci0gICAgICBsb2dBbmRUb2Fz
dChnZXRTdHJpbmcoUi5zdHJpbmcubWlzc2luZ191cmwpKTsKLSAgICAgIExvZy5lKFRBRywgIklu
Y29ycmVjdCByb29tIElEIGluIGludGVudCEiKTsKLSAgICAgIHNldFJlc3VsdChSRVNVTFRfQ0FO
Q0VMRUQpOwotICAgICAgZmluaXNoKCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9v
bGVhbiBsb29wYmFjayA9IGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfTE9PUEJBQ0ssIGZh
bHNlKTsKLSAgICBib29sZWFuIHRyYWNpbmcgPSBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJB
X1RSQUNJTkcsIGZhbHNlKTsKLQotICAgIGludCB2aWRlb1dpZHRoID0gaW50ZW50LmdldEludEV4
dHJhKEVYVFJBX1ZJREVPX1dJRFRILCAwKTsKLSAgICBpbnQgdmlkZW9IZWlnaHQgPSBpbnRlbnQu
Z2V0SW50RXh0cmEoRVhUUkFfVklERU9fSEVJR0hULCAwKTsKLQotICAgIHNjcmVlbmNhcHR1cmVF
bmFibGVkID0gaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9TQ1JFRU5DQVBUVVJFLCBmYWxz
ZSk7Ci0gICAgLy8gSWYgY2FwdHVyaW5nIGZvcm1hdCBpcyBub3Qgc3BlY2lmaWVkIGZvciBzY3Jl
ZW5jYXB0dXJlLCB1c2Ugc2NyZWVuIHJlc29sdXRpb24uCi0gICAgaWYgKHNjcmVlbmNhcHR1cmVF
bmFibGVkICYmIHZpZGVvV2lkdGggPT0gMCAmJiB2aWRlb0hlaWdodCA9PSAwKSB7Ci0gICAgICBE
aXNwbGF5TWV0cmljcyBkaXNwbGF5TWV0cmljcyA9IG5ldyBEaXNwbGF5TWV0cmljcygpOwotICAg
ICAgV2luZG93TWFuYWdlciB3aW5kb3dNYW5hZ2VyID0KLSAgICAgICAgICAoV2luZG93TWFuYWdl
cikgZ2V0QXBwbGljYXRpb24oKS5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJ
Q0UpOwotICAgICAgd2luZG93TWFuYWdlci5nZXREZWZhdWx0RGlzcGxheSgpLmdldFJlYWxNZXRy
aWNzKGRpc3BsYXlNZXRyaWNzKTsKLSAgICAgIHZpZGVvV2lkdGggPSBkaXNwbGF5TWV0cmljcy53
aWR0aFBpeGVsczsKLSAgICAgIHZpZGVvSGVpZ2h0ID0gZGlzcGxheU1ldHJpY3MuaGVpZ2h0UGl4
ZWxzOwotICAgIH0KLQotICAgIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyA9Ci0gICAgICAgIG5l
dyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMoaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9W
SURFT19DQUxMLCB0cnVlKSwgbG9vcGJhY2ssCi0gICAgICAgICAgICB0cmFjaW5nLCB2aWRlb1dp
ZHRoLCB2aWRlb0hlaWdodCwgaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1ZJREVPX0ZQUywgMCks
Ci0gICAgICAgICAgICBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfVklERU9fQklUUkFURSwgMCks
IGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9WSURFT0NPREVDKSwKLSAgICAgICAgICAgIGlu
dGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfSFdDT0RFQ19FTkFCTEVELCB0cnVlKSwKLSAgICAg
ICAgICAgIGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9BVURJT19CSVRSQVRFLCAwKSwgaW50ZW50
LmdldFN0cmluZ0V4dHJhKEVYVFJBX0FVRElPQ09ERUMpLAotICAgICAgICAgICAgaW50ZW50Lmdl
dEJvb2xlYW5FeHRyYShFWFRSQV9OT0FVRElPUFJPQ0VTU0lOR19FTkFCTEVELCBmYWxzZSksCi0g
ICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0FFQ0RVTVBfRU5BQkxFRCwg
ZmFsc2UpLAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9PUEVOU0xF
U19FTkFCTEVELCBmYWxzZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVY
VFJBX0RJU0FCTEVfQlVJTFRfSU5fQUVDLCBmYWxzZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0
Qm9vbGVhbkV4dHJhKEVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUdDLCBmYWxzZSksCi0gICAgICAg
ICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fTlMsIGZh
bHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfRU5BQkxFX0xF
VkVMX0NPTlRST0wsIGZhbHNlKSk7Ci0gICAgY29tbWFuZExpbmVSdW4gPSBpbnRlbnQuZ2V0Qm9v
bGVhbkV4dHJhKEVYVFJBX0NNRExJTkUsIGZhbHNlKTsKLSAgICBydW5UaW1lTXMgPSBpbnRlbnQu
Z2V0SW50RXh0cmEoRVhUUkFfUlVOVElNRSwgMCk7Ci0KLSAgICBMb2cuZChUQUcsICJWSURFT19G
SUxFOiAnIiArIGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9WSURFT19GSUxFX0FTX0NBTUVS
QSkgKyAiJyIpOwotCi0gICAgLy8gQ3JlYXRlIGNvbm5lY3Rpb24gY2xpZW50LiBVc2UgRGlyZWN0
UlRDQ2xpZW50IGlmIHJvb20gbmFtZSBpcyBhbiBJUCBvdGhlcndpc2UgdXNlIHRoZQotICAgIC8v
IHN0YW5kYXJkIFdlYlNvY2tldFJUQ0NsaWVudC4KLSAgICBpZiAobG9vcGJhY2sgfHwgIURpcmVj
dFJUQ0NsaWVudC5JUF9QQVRURVJOLm1hdGNoZXIocm9vbUlkKS5tYXRjaGVzKCkpIHsKLSAgICAg
IGFwcFJ0Y0NsaWVudCA9IG5ldyBXZWJTb2NrZXRSVENDbGllbnQodGhpcyk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIExvZy5pKFRBRywgIlVzaW5nIERpcmVjdFJUQ0NsaWVudCBiZWNhdXNlIHJvb20g
bmFtZSBsb29rcyBsaWtlIGFuIElQLiIpOwotICAgICAgYXBwUnRjQ2xpZW50ID0gbmV3IERpcmVj
dFJUQ0NsaWVudCh0aGlzKTsKLSAgICB9Ci0gICAgLy8gQ3JlYXRlIGNvbm5lY3Rpb24gcGFyYW1l
dGVycy4KLSAgICByb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgPSBuZXcgUm9vbUNvbm5lY3Rpb25Q
YXJhbWV0ZXJzKHJvb21VcmkudG9TdHJpbmcoKSwgcm9vbUlkLCBsb29wYmFjayk7Ci0KLSAgICAv
LyBDcmVhdGUgQ1BVIG1vbml0b3IKLSAgICBjcHVNb25pdG9yID0gbmV3IENwdU1vbml0b3IodGhp
cyk7Ci0gICAgaHVkRnJhZ21lbnQuc2V0Q3B1TW9uaXRvcihjcHVNb25pdG9yKTsKLQotICAgIC8v
IFNlbmQgaW50ZW50IGFyZ3VtZW50cyB0byBmcmFnbWVudHMuCi0gICAgY2FsbEZyYWdtZW50LnNl
dEFyZ3VtZW50cyhpbnRlbnQuZ2V0RXh0cmFzKCkpOwotICAgIGh1ZEZyYWdtZW50LnNldEFyZ3Vt
ZW50cyhpbnRlbnQuZ2V0RXh0cmFzKCkpOwotICAgIC8vIEFjdGl2YXRlIGNhbGwgYW5kIEhVRCBm
cmFnbWVudHMgYW5kIHN0YXJ0IHRoZSBjYWxsLgotICAgIEZyYWdtZW50VHJhbnNhY3Rpb24gZnQg
PSBnZXRGcmFnbWVudE1hbmFnZXIoKS5iZWdpblRyYW5zYWN0aW9uKCk7Ci0gICAgZnQuYWRkKFIu
aWQuY2FsbF9mcmFnbWVudF9jb250YWluZXIsIGNhbGxGcmFnbWVudCk7Ci0gICAgZnQuYWRkKFIu
aWQuaHVkX2ZyYWdtZW50X2NvbnRhaW5lciwgaHVkRnJhZ21lbnQpOwotICAgIGZ0LmNvbW1pdCgp
OwotCi0gICAgLy8gRm9yIGNvbW1hbmQgbGluZSBleGVjdXRpb24gcnVuIGNvbm5lY3Rpb24gZm9y
IDxydW5UaW1lTXM+IGFuZCBleGl0LgotICAgIGlmIChjb21tYW5kTGluZVJ1biAmJiBydW5UaW1l
TXMgPiAwKSB7Ci0gICAgICAobmV3IEhhbmRsZXIoKSkucG9zdERlbGF5ZWQobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICAgICAgfQotICAgICAgfSwgcnVuVGltZU1zKTsKLSAg
ICB9Ci0KLSAgICBwZWVyQ29ubmVjdGlvbkNsaWVudCA9IFBlZXJDb25uZWN0aW9uQ2xpZW50Lmdl
dEluc3RhbmNlKCk7Ci0gICAgaWYgKGxvb3BiYWNrKSB7Ci0gICAgICBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25z
KCk7Ci0gICAgICBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrID0gMDsKLSAgICAgIHBlZXJDb25u
ZWN0aW9uQ2xpZW50LnNldFBlZXJDb25uZWN0aW9uRmFjdG9yeU9wdGlvbnMob3B0aW9ucyk7Ci0g
ICAgfQotICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9y
eSgKLSAgICAgICAgQ2FsbEFjdGl2aXR5LnRoaXMsIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywg
Q2FsbEFjdGl2aXR5LnRoaXMpOwotCi0gICAgaWYgKHNjcmVlbmNhcHR1cmVFbmFibGVkKSB7Ci0g
ICAgICBNZWRpYVByb2plY3Rpb25NYW5hZ2VyIG1lZGlhUHJvamVjdGlvbk1hbmFnZXIgPQotICAg
ICAgICAgIChNZWRpYVByb2plY3Rpb25NYW5hZ2VyKSBnZXRBcHBsaWNhdGlvbigpLmdldFN5c3Rl
bVNlcnZpY2UoCi0gICAgICAgICAgICAgIENvbnRleHQuTUVESUFfUFJPSkVDVElPTl9TRVJWSUNF
KTsKLSAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoCi0gICAgICAgICAgbWVkaWFQcm9qZWN0
aW9uTWFuYWdlci5jcmVhdGVTY3JlZW5DYXB0dXJlSW50ZW50KCksIENBUFRVUkVfUEVSTUlTU0lP
Tl9SRVFVRVNUX0NPREUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzdGFydENhbGwoKTsKLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQg
cmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJbnRlbnQgZGF0YSkgewotICAgIGlmIChyZXF1
ZXN0Q29kZSAhPSBDQVBUVVJFX1BFUk1JU1NJT05fUkVRVUVTVF9DT0RFKQotICAgICAgcmV0dXJu
OwotICAgIG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHRDb2RlID0gcmVzdWx0Q29kZTsK
LSAgICBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YSA9IGRhdGE7Ci0gICAgc3Rh
cnRDYWxsKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gdXNlQ2FtZXJhMigpIHsKLSAgICBy
ZXR1cm4gQ2FtZXJhMkVudW1lcmF0b3IuaXNTdXBwb3J0ZWQodGhpcykgJiYgZ2V0SW50ZW50KCku
Z2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0NBTUVSQTIsIHRydWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBi
b29sZWFuIGNhcHR1cmVUb1RleHR1cmUoKSB7Ci0gICAgcmV0dXJuIGdldEludGVudCgpLmdldEJv
b2xlYW5FeHRyYShFWFRSQV9DQVBUVVJFVE9URVhUVVJFX0VOQUJMRUQsIGZhbHNlKTsKLSAgfQot
Ci0gIHByaXZhdGUgVmlkZW9DYXB0dXJlciBjcmVhdGVDYW1lcmFDYXB0dXJlcihDYW1lcmFFbnVt
ZXJhdG9yIGVudW1lcmF0b3IpIHsKLSAgICBmaW5hbCBTdHJpbmdbXSBkZXZpY2VOYW1lcyA9IGVu
dW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKTsKLQotICAgIC8vIEZpcnN0LCB0cnkgdG8gZmluZCBm
cm9udCBmYWNpbmcgY2FtZXJhCi0gICAgTG9nZ2luZy5kKFRBRywgIkxvb2tpbmcgZm9yIGZyb250
IGZhY2luZyBjYW1lcmFzLiIpOwotICAgIGZvciAoU3RyaW5nIGRldmljZU5hbWUgOiBkZXZpY2VO
YW1lcykgewotICAgICAgaWYgKGVudW1lcmF0b3IuaXNGcm9udEZhY2luZyhkZXZpY2VOYW1lKSkg
ewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRpbmcgZnJvbnQgZmFjaW5nIGNhbWVyYSBj
YXB0dXJlci4iKTsKLSAgICAgICAgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0gZW51bWVy
YXRvci5jcmVhdGVDYXB0dXJlcihkZXZpY2VOYW1lLCBudWxsKTsKLQotICAgICAgICBpZiAodmlk
ZW9DYXB0dXJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuIHZpZGVvQ2FwdHVyZXI7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBGcm9udCBmYWNpbmcgY2FtZXJhIG5v
dCBmb3VuZCwgdHJ5IHNvbWV0aGluZyBlbHNlCi0gICAgTG9nZ2luZy5kKFRBRywgIkxvb2tpbmcg
Zm9yIG90aGVyIGNhbWVyYXMuIik7Ci0gICAgZm9yIChTdHJpbmcgZGV2aWNlTmFtZSA6IGRldmlj
ZU5hbWVzKSB7Ci0gICAgICBpZiAoIWVudW1lcmF0b3IuaXNGcm9udEZhY2luZyhkZXZpY2VOYW1l
KSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRpbmcgb3RoZXIgY2FtZXJhIGNhcHR1
cmVyLiIpOwotICAgICAgICBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIgPSBlbnVtZXJhdG9y
LmNyZWF0ZUNhcHR1cmVyKGRldmljZU5hbWUsIG51bGwpOwotCi0gICAgICAgIGlmICh2aWRlb0Nh
cHR1cmVyICE9IG51bGwpIHsKLSAgICAgICAgICByZXR1cm4gdmlkZW9DYXB0dXJlcjsKLSAgICAg
ICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBudWxsOwotICB9Ci0KLSAgLy8gQWN0
aXZpdHkgaW50ZXJmYWNlcwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QYXVzZSgpIHsK
LSAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgYWN0aXZpdHlSdW5uaW5nID0gZmFsc2U7Ci0gICAg
Ly8gRG9uJ3Qgc3RvcCB0aGUgdmlkZW8gd2hlbiB1c2luZyBzY3JlZW5jYXB0dXJlIHRvIGFsbG93
IHVzZXIgdG8gc2hvdyBvdGhlciBhcHBzIHRvIHRoZSByZW1vdGUKLSAgICAvLyBlbmQuCi0gICAg
aWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9IG51bGwgJiYgIXNjcmVlbmNhcHR1cmVFbmFibGVk
KSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5zdG9wVmlkZW9Tb3VyY2UoKTsKLSAgICB9
Ci0gICAgY3B1TW9uaXRvci5wYXVzZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIG9uUmVzdW1lKCkgewotICAgIHN1cGVyLm9uUmVzdW1lKCk7Ci0gICAgYWN0aXZpdHlSdW5u
aW5nID0gdHJ1ZTsKLSAgICAvLyBWaWRlbyBpcyBub3QgcGF1c2VkIGZvciBzY3JlZW5jYXB0dXJl
LiBTZWUgb25QYXVzZS4KLSAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCAmJiAh
c2NyZWVuY2FwdHVyZUVuYWJsZWQpIHsKLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnN0YXJ0
VmlkZW9Tb3VyY2UoKTsKLSAgICB9Ci0gICAgY3B1TW9uaXRvci5yZXN1bWUoKTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkRlc3Ryb3koKSB7Ci0gICAgZGlzY29ubmVj
dCgpOwotICAgIGlmIChsb2dUb2FzdCAhPSBudWxsKSB7Ci0gICAgICBsb2dUb2FzdC5jYW5jZWwo
KTsKLSAgICB9Ci0gICAgYWN0aXZpdHlSdW5uaW5nID0gZmFsc2U7Ci0gICAgcm9vdEVnbEJhc2Uu
cmVsZWFzZSgpOwotICAgIHN1cGVyLm9uRGVzdHJveSgpOwotICB9Ci0KLSAgLy8gQ2FsbEZyYWdt
ZW50Lk9uQ2FsbEV2ZW50cyBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24uCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBvbkNhbGxIYW5nVXAoKSB7Ci0gICAgZGlzY29ubmVjdCgpOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2FtZXJhU3dpdGNoKCkgewotICAgIGlmIChw
ZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVu
dC5zd2l0Y2hDYW1lcmEoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgb25WaWRlb1NjYWxpbmdTd2l0Y2goU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGUpIHsKLSAgICB0
aGlzLnNjYWxpbmdUeXBlID0gc2NhbGluZ1R5cGU7Ci0gICAgdXBkYXRlVmlkZW9WaWV3KCk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DYXB0dXJlRm9ybWF0Q2hhbmdlKGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAgIGlmIChwZWVyQ29ubmVj
dGlvbkNsaWVudCAhPSBudWxsKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jaGFuZ2VD
YXB0dXJlRm9ybWF0KHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gICAgfQotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIG9uVG9nZ2xlTWljKCkgewotICAgIGlmIChwZWVy
Q29ubmVjdGlvbkNsaWVudCAhPSBudWxsKSB7Ci0gICAgICBtaWNFbmFibGVkID0gIW1pY0VuYWJs
ZWQ7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5zZXRBdWRpb0VuYWJsZWQobWljRW5hYmxl
ZCk7Ci0gICAgfQotICAgIHJldHVybiBtaWNFbmFibGVkOwotICB9Ci0KLSAgLy8gSGVscGVyIGZ1
bmN0aW9ucy4KLSAgcHJpdmF0ZSB2b2lkIHRvZ2dsZUNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmls
aXR5KCkgewotICAgIGlmICghaWNlQ29ubmVjdGVkIHx8ICFjYWxsRnJhZ21lbnQuaXNBZGRlZCgp
KSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFNob3cvaGlkZSBjYWxsIGNvbnRyb2wg
ZnJhZ21lbnQKLSAgICBjYWxsQ29udHJvbEZyYWdtZW50VmlzaWJsZSA9ICFjYWxsQ29udHJvbEZy
YWdtZW50VmlzaWJsZTsKLSAgICBGcmFnbWVudFRyYW5zYWN0aW9uIGZ0ID0gZ2V0RnJhZ21lbnRN
YW5hZ2VyKCkuYmVnaW5UcmFuc2FjdGlvbigpOwotICAgIGlmIChjYWxsQ29udHJvbEZyYWdtZW50
VmlzaWJsZSkgewotICAgICAgZnQuc2hvdyhjYWxsRnJhZ21lbnQpOwotICAgICAgZnQuc2hvdyho
dWRGcmFnbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGZ0LmhpZGUoY2FsbEZyYWdtZW50KTsK
LSAgICAgIGZ0LmhpZGUoaHVkRnJhZ21lbnQpOwotICAgIH0KLSAgICBmdC5zZXRUcmFuc2l0aW9u
KEZyYWdtZW50VHJhbnNhY3Rpb24uVFJBTlNJVF9GUkFHTUVOVF9GQURFKTsKLSAgICBmdC5jb21t
aXQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVWaWRlb1ZpZXcoKSB7Ci0gICAgcmVt
b3RlUmVuZGVyTGF5b3V0LnNldFBvc2l0aW9uKFJFTU9URV9YLCBSRU1PVEVfWSwgUkVNT1RFX1dJ
RFRILCBSRU1PVEVfSEVJR0hUKTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4uc2V0U2NhbGluZ1R5
cGUoc2NhbGluZ1R5cGUpOwotICAgIHJlbW90ZVJlbmRlclNjcmVlbi5zZXRNaXJyb3IoZmFsc2Up
OwotCi0gICAgaWYgKGljZUNvbm5lY3RlZCkgewotICAgICAgbG9jYWxSZW5kZXJMYXlvdXQuc2V0
UG9zaXRpb24oCi0gICAgICAgICAgTE9DQUxfWF9DT05ORUNURUQsIExPQ0FMX1lfQ09OTkVDVEVE
LCBMT0NBTF9XSURUSF9DT05ORUNURUQsIExPQ0FMX0hFSUdIVF9DT05ORUNURUQpOwotICAgICAg
bG9jYWxSZW5kZXIuc2V0U2NhbGluZ1R5cGUoU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJVCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxvY2FsUmVuZGVyTGF5b3V0LnNldFBvc2l0aW9uKAotICAg
ICAgICAgIExPQ0FMX1hfQ09OTkVDVElORywgTE9DQUxfWV9DT05ORUNUSU5HLCBMT0NBTF9XSURU
SF9DT05ORUNUSU5HLCBMT0NBTF9IRUlHSFRfQ09OTkVDVElORyk7Ci0gICAgICBsb2NhbFJlbmRl
ci5zZXRTY2FsaW5nVHlwZShzY2FsaW5nVHlwZSk7Ci0gICAgfQotICAgIGxvY2FsUmVuZGVyLnNl
dE1pcnJvcih0cnVlKTsKLQotICAgIGxvY2FsUmVuZGVyLnJlcXVlc3RMYXlvdXQoKTsKLSAgICBy
ZW1vdGVSZW5kZXJTY3JlZW4ucmVxdWVzdExheW91dCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IHN0YXJ0Q2FsbCgpIHsKLSAgICBpZiAoYXBwUnRjQ2xpZW50ID09IG51bGwpIHsKLSAgICAgIExv
Zy5lKFRBRywgIkFwcFJUQyBjbGllbnQgaXMgbm90IGFsbG9jYXRlZCBmb3IgYSBjYWxsLiIpOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYWxsU3RhcnRlZFRpbWVNcyA9IFN5c3RlbS5jdXJy
ZW50VGltZU1pbGxpcygpOwotCi0gICAgLy8gU3RhcnQgcm9vbSBjb25uZWN0aW9uLgotICAgIGxv
Z0FuZFRvYXN0KGdldFN0cmluZyhSLnN0cmluZy5jb25uZWN0aW5nX3RvLCByb29tQ29ubmVjdGlv
blBhcmFtZXRlcnMucm9vbVVybCkpOwotICAgIGFwcFJ0Y0NsaWVudC5jb25uZWN0VG9Sb29tKHJv
b21Db25uZWN0aW9uUGFyYW1ldGVycyk7Ci0KLSAgICAvLyBDcmVhdGUgYW5kIGF1ZGlvIG1hbmFn
ZXIgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBhdWRpbyByb3V0aW5nLAotICAgIC8vIGF1ZGlvIG1v
ZGVzLCBhdWRpbyBkZXZpY2UgZW51bWVyYXRpb24gZXRjLgotICAgIGF1ZGlvTWFuYWdlciA9IEFw
cFJUQ0F1ZGlvTWFuYWdlci5jcmVhdGUodGhpcywgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgLy8g
VGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgZWFjaCB0aW1lIHRoZSBhdWRpbyBzdGF0ZSAobnVt
YmVyIGFuZAotICAgICAgLy8gdHlwZSBvZiBkZXZpY2VzKSBoYXMgYmVlbiBjaGFuZ2VkLgotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIG9uQXVkaW9N
YW5hZ2VyQ2hhbmdlZFN0YXRlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgLy8gU3RvcmUgZXhp
c3RpbmcgYXVkaW8gc2V0dGluZ3MgYW5kIGNoYW5nZSBhdWRpbyBtb2RlIHRvCi0gICAgLy8gTU9E
RV9JTl9DT01NVU5JQ0FUSU9OIGZvciBiZXN0IHBvc3NpYmxlIFZvSVAgcGVyZm9ybWFuY2UuCi0g
ICAgTG9nLmQoVEFHLCAiSW5pdGlhbGl6aW5nIHRoZSBhdWRpbyBtYW5hZ2VyLi4uIik7Ci0gICAg
YXVkaW9NYW5hZ2VyLmluaXQoKTsKLSAgfQotCi0gIC8vIFNob3VsZCBiZSBjYWxsZWQgZnJvbSBV
SSB0aHJlYWQKLSAgcHJpdmF0ZSB2b2lkIGNhbGxDb25uZWN0ZWQoKSB7Ci0gICAgZmluYWwgbG9u
ZyBkZWx0YSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7
Ci0gICAgTG9nLmkoVEFHLCAiQ2FsbCBjb25uZWN0ZWQ6IGRlbGF5PSIgKyBkZWx0YSArICJtcyIp
OwotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAg
ICAgIExvZy53KFRBRywgIkNhbGwgaXMgY29ubmVjdGVkIGluIGNsb3NlZCBvciBlcnJvciBzdGF0
ZSIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBVcGRhdGUgdmlkZW8gdmlldy4KLSAg
ICB1cGRhdGVWaWRlb1ZpZXcoKTsKLSAgICAvLyBFbmFibGUgc3RhdGlzdGljcyBjYWxsYmFjay4K
LSAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5lbmFibGVTdGF0c0V2ZW50cyh0cnVlLCBTVEFUX0NB
TExCQUNLX1BFUklPRCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgb25BdWRpb01hbmFnZXJDaGFu
Z2VkU3RhdGUoKSB7Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogZGlzYWJsZSB2aWRlbyBpZiBBcHBS
VENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuRUFSUElFQ0UKLSAgICAvLyBpcyBhY3RpdmUuCi0g
IH0KLQotICAvLyBEaXNjb25uZWN0IGZyb20gcmVtb3RlIHJlc291cmNlcywgZGlzcG9zZSBvZiBs
b2NhbCByZXNvdXJjZXMsIGFuZCBleGl0LgotICBwcml2YXRlIHZvaWQgZGlzY29ubmVjdCgpIHsK
LSAgICBhY3Rpdml0eVJ1bm5pbmcgPSBmYWxzZTsKLSAgICBpZiAoYXBwUnRjQ2xpZW50ICE9IG51
bGwpIHsKLSAgICAgIGFwcFJ0Y0NsaWVudC5kaXNjb25uZWN0RnJvbVJvb20oKTsKLSAgICAgIGFw
cFJ0Y0NsaWVudCA9IG51bGw7Ci0gICAgfQotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAh
PSBudWxsKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jbG9zZSgpOwotICAgICAgcGVl
ckNvbm5lY3Rpb25DbGllbnQgPSBudWxsOwotICAgIH0KLSAgICBpZiAobG9jYWxSZW5kZXIgIT0g
bnVsbCkgewotICAgICAgbG9jYWxSZW5kZXIucmVsZWFzZSgpOwotICAgICAgbG9jYWxSZW5kZXIg
PSBudWxsOwotICAgIH0KLSAgICBpZiAodmlkZW9GaWxlUmVuZGVyZXIgIT0gbnVsbCkgewotICAg
ICAgdmlkZW9GaWxlUmVuZGVyZXIucmVsZWFzZSgpOwotICAgICAgdmlkZW9GaWxlUmVuZGVyZXIg
PSBudWxsOwotICAgIH0KLSAgICBpZiAocmVtb3RlUmVuZGVyU2NyZWVuICE9IG51bGwpIHsKLSAg
ICAgIHJlbW90ZVJlbmRlclNjcmVlbi5yZWxlYXNlKCk7Ci0gICAgICByZW1vdGVSZW5kZXJTY3Jl
ZW4gPSBudWxsOwotICAgIH0KLSAgICBpZiAoYXVkaW9NYW5hZ2VyICE9IG51bGwpIHsKLSAgICAg
IGF1ZGlvTWFuYWdlci5jbG9zZSgpOwotICAgICAgYXVkaW9NYW5hZ2VyID0gbnVsbDsKLSAgICB9
Ci0gICAgaWYgKGljZUNvbm5lY3RlZCAmJiAhaXNFcnJvcikgewotICAgICAgc2V0UmVzdWx0KFJF
U1VMVF9PSyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNldFJlc3VsdChSRVNVTFRfQ0FOQ0VMRUQp
OwotICAgIH0KLSAgICBmaW5pc2goKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkaXNjb25uZWN0
V2l0aEVycm9yTWVzc2FnZShmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgaWYgKGNv
bW1hbmRMaW5lUnVuIHx8ICFhY3Rpdml0eVJ1bm5pbmcpIHsKLSAgICAgIExvZy5lKFRBRywgIkNy
aXRpY2FsIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICAgIGRpc2Nvbm5lY3QoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIodGhpcykKLSAgICAgICAg
ICAuc2V0VGl0bGUoZ2V0VGV4dChSLnN0cmluZy5jaGFubmVsX2Vycm9yX3RpdGxlKSkKLSAgICAg
ICAgICAuc2V0TWVzc2FnZShlcnJvck1lc3NhZ2UpCi0gICAgICAgICAgLnNldENhbmNlbGFibGUo
ZmFsc2UpCi0gICAgICAgICAgLnNldE5ldXRyYWxCdXR0b24oUi5zdHJpbmcub2ssCi0gICAgICAg
ICAgICAgIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAg
ICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlh
bG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IGlkKSB7Ci0gICAgICAgICAgICAgICAgICBkaWFsb2cu
Y2FuY2VsKCk7Ci0gICAgICAgICAgICAgICAgICBkaXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICB9KQotICAgICAgICAgIC5jcmVhdGUoKQotICAgICAgICAgIC5z
aG93KCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gTG9nIHxtc2d8IGFuZCBUb2FzdCBhYm91dCBpdC4K
LSAgcHJpdmF0ZSB2b2lkIGxvZ0FuZFRvYXN0KFN0cmluZyBtc2cpIHsKLSAgICBMb2cuZChUQUcs
IG1zZyk7Ci0gICAgaWYgKGxvZ1RvYXN0ICE9IG51bGwpIHsKLSAgICAgIGxvZ1RvYXN0LmNhbmNl
bCgpOwotICAgIH0KLSAgICBsb2dUb2FzdCA9IFRvYXN0Lm1ha2VUZXh0KHRoaXMsIG1zZywgVG9h
c3QuTEVOR1RIX1NIT1JUKTsKLSAgICBsb2dUb2FzdC5zaG93KCk7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgcnVuT25V
aVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKCFpc0Vycm9yKSB7Ci0gICAgICAgICAgaXNFcnJvciA9
IHRydWU7Ci0gICAgICAgICAgZGlzY29ubmVjdFdpdGhFcnJvck1lc3NhZ2UoZGVzY3JpcHRpb24p
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvQ2Fw
dHVyZXIgY3JlYXRlVmlkZW9DYXB0dXJlcigpIHsKLSAgICBWaWRlb0NhcHR1cmVyIHZpZGVvQ2Fw
dHVyZXIgPSBudWxsOwotICAgIFN0cmluZyB2aWRlb0ZpbGVBc0NhbWVyYSA9IGdldEludGVudCgp
LmdldFN0cmluZ0V4dHJhKEVYVFJBX1ZJREVPX0ZJTEVfQVNfQ0FNRVJBKTsKLSAgICBpZiAodmlk
ZW9GaWxlQXNDYW1lcmEgIT0gbnVsbCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgdmlkZW9DYXB0
dXJlciA9IG5ldyBGaWxlVmlkZW9DYXB0dXJlcih2aWRlb0ZpbGVBc0NhbWVyYSk7Ci0gICAgICB9
IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8g
b3BlbiB2aWRlbyBmaWxlIGZvciBlbXVsYXRlZCBjYW1lcmEiKTsKLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChzY3JlZW5jYXB0dXJlRW5hYmxlZCkgewotICAg
ICAgaWYgKG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHRDb2RlICE9IEFjdGl2aXR5LlJF
U1VMVF9PSykgewotICAgICAgICByZXBvcnRFcnJvcigiVXNlciBkaWRuJ3QgZ2l2ZSBwZXJtaXNz
aW9uIHRvIGNhcHR1cmUgdGhlIHNjcmVlbi4iKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICB9Ci0gICAgICByZXR1cm4gbmV3IFNjcmVlbkNhcHR1cmVyQW5kcm9pZCgKLSAgICAgICAgICBt
ZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0RGF0YSwgbmV3IE1lZGlhUHJvamVjdGlvbi5D
YWxsYmFjaygpIHsKLSAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgcHVibGljIHZv
aWQgb25TdG9wKCkgewotICAgICAgICAgICAgICByZXBvcnRFcnJvcigiVXNlciByZXZva2VkIHBl
cm1pc3Npb24gdG8gY2FwdHVyZSB0aGUgc2NyZWVuLiIpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0pOwotICAgIH0gZWxzZSBpZiAodXNlQ2FtZXJhMigpKSB7Ci0gICAgICBpZiAoIWNhcHR1
cmVUb1RleHR1cmUoKSkgewotICAgICAgICByZXBvcnRFcnJvcihnZXRTdHJpbmcoUi5zdHJpbmcu
Y2FtZXJhMl90ZXh0dXJlX29ubHlfZXJyb3IpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
ICB9Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGluZyBjYXB0dXJlciB1c2luZyBjYW1l
cmEyIEFQSS4iKTsKLSAgICAgIHZpZGVvQ2FwdHVyZXIgPSBjcmVhdGVDYW1lcmFDYXB0dXJlcihu
ZXcgQ2FtZXJhMkVudW1lcmF0b3IodGhpcykpOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2dnaW5n
LmQoVEFHLCAiQ3JlYXRpbmcgY2FwdHVyZXIgdXNpbmcgY2FtZXJhMSBBUEkuIik7Ci0gICAgICB2
aWRlb0NhcHR1cmVyID0gY3JlYXRlQ2FtZXJhQ2FwdHVyZXIobmV3IENhbWVyYTFFbnVtZXJhdG9y
KGNhcHR1cmVUb1RleHR1cmUoKSkpOwotICAgIH0KLSAgICBpZiAodmlkZW9DYXB0dXJlciA9PSBu
dWxsKSB7Ci0gICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIG9wZW4gY2FtZXJhIik7Ci0gICAg
ICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHZpZGVvQ2FwdHVyZXI7Ci0gIH0KLQot
ICAvLyAtLS0tLUltcGxlbWVudGF0aW9uIG9mIEFwcFJUQ0NsaWVudC5BcHBSVENTaWduYWxpbmdF
dmVudHMgLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEFsbCBjYWxsYmFja3MgYXJlIGludm9rZWQgZnJv
bSB3ZWJzb2NrZXQgc2lnbmFsaW5nIGxvb3BlciB0aHJlYWQgYW5kCi0gIC8vIGFyZSByb3V0ZWQg
dG8gVUkgdGhyZWFkLgotICBwcml2YXRlIHZvaWQgb25Db25uZWN0ZWRUb1Jvb21JbnRlcm5hbChm
aW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtcykgewotICAgIGZpbmFsIGxvbmcgZGVsdGEg
PSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNhbGxTdGFydGVkVGltZU1zOwotCi0gICAg
c2lnbmFsaW5nUGFyYW1ldGVycyA9IHBhcmFtczsKLSAgICBsb2dBbmRUb2FzdCgiQ3JlYXRpbmcg
cGVlciBjb25uZWN0aW9uLCBkZWxheT0iICsgZGVsdGEgKyAibXMiKTsKLSAgICBWaWRlb0NhcHR1
cmVyIHZpZGVvQ2FwdHVyZXIgPSBudWxsOwotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRl
cnMudmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgdmlkZW9DYXB0dXJlciA9IGNyZWF0ZVZpZGVv
Q2FwdHVyZXIoKTsKLSAgICB9Ci0gICAgcGVlckNvbm5lY3Rpb25DbGllbnQuY3JlYXRlUGVlckNv
bm5lY3Rpb24ocm9vdEVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgbG9jYWxSZW5kZXIsCi0g
ICAgICAgIHJlbW90ZVJlbmRlcmVycywgdmlkZW9DYXB0dXJlciwgc2lnbmFsaW5nUGFyYW1ldGVy
cyk7Ci0KLSAgICBpZiAoc2lnbmFsaW5nUGFyYW1ldGVycy5pbml0aWF0b3IpIHsKLSAgICAgIGxv
Z0FuZFRvYXN0KCJDcmVhdGluZyBPRkZFUi4uLiIpOwotICAgICAgLy8gQ3JlYXRlIG9mZmVyLiBP
ZmZlciBTRFAgd2lsbCBiZSBzZW50IHRvIGFuc3dlcmluZyBjbGllbnQgaW4KLSAgICAgIC8vIFBl
ZXJDb25uZWN0aW9uRXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbiBldmVudC4KLSAgICAgIHBlZXJD
b25uZWN0aW9uQ2xpZW50LmNyZWF0ZU9mZmVyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChw
YXJhbXMub2ZmZXJTZHAgIT0gbnVsbCkgewotICAgICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5z
ZXRSZW1vdGVEZXNjcmlwdGlvbihwYXJhbXMub2ZmZXJTZHApOwotICAgICAgICBsb2dBbmRUb2Fz
dCgiQ3JlYXRpbmcgQU5TV0VSLi4uIik7Ci0gICAgICAgIC8vIENyZWF0ZSBhbnN3ZXIuIEFuc3dl
ciBTRFAgd2lsbCBiZSBzZW50IHRvIG9mZmVyaW5nIGNsaWVudCBpbgotICAgICAgICAvLyBQZWVy
Q29ubmVjdGlvbkV2ZW50cy5vbkxvY2FsRGVzY3JpcHRpb24gZXZlbnQuCi0gICAgICAgIHBlZXJD
b25uZWN0aW9uQ2xpZW50LmNyZWF0ZUFuc3dlcigpOwotICAgICAgfQotICAgICAgaWYgKHBhcmFt
cy5pY2VDYW5kaWRhdGVzICE9IG51bGwpIHsKLSAgICAgICAgLy8gQWRkIHJlbW90ZSBJQ0UgY2Fu
ZGlkYXRlcyBmcm9tIHJvb20uCi0gICAgICAgIGZvciAoSWNlQ2FuZGlkYXRlIGljZUNhbmRpZGF0
ZSA6IHBhcmFtcy5pY2VDYW5kaWRhdGVzKSB7Ci0gICAgICAgICAgcGVlckNvbm5lY3Rpb25DbGll
bnQuYWRkUmVtb3RlSWNlQ2FuZGlkYXRlKGljZUNhbmRpZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25Db25uZWN0ZWRU
b1Jvb20oZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbXMpIHsKLSAgICBydW5PblVpVGhy
ZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICBvbkNvbm5lY3RlZFRvUm9vbUludGVybmFsKHBhcmFtcyk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25SZW1vdGVE
ZXNjcmlwdGlvbihmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgZmluYWwgbG9u
ZyBkZWx0YSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7
Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50
ID09IG51bGwpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJSZWNlaXZlZCByZW1vdGUgU0RQIGZv
ciBub24taW5pdGlsaXplZCBwZWVyIGNvbm5lY3Rpb24uIik7Ci0gICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJSZWNlaXZlZCByZW1vdGUgIiArIHNkcC50
eXBlICsgIiwgZGVsYXk9IiArIGRlbHRhICsgIm1zIik7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9u
Q2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHNkcCk7Ci0gICAgICAgIGlmICghc2lnbmFsaW5n
UGFyYW1ldGVycy5pbml0aWF0b3IpIHsKLSAgICAgICAgICBsb2dBbmRUb2FzdCgiQ3JlYXRpbmcg
QU5TV0VSLi4uIik7Ci0gICAgICAgICAgLy8gQ3JlYXRlIGFuc3dlci4gQW5zd2VyIFNEUCB3aWxs
IGJlIHNlbnQgdG8gb2ZmZXJpbmcgY2xpZW50IGluCi0gICAgICAgICAgLy8gUGVlckNvbm5lY3Rp
b25FdmVudHMub25Mb2NhbERlc2NyaXB0aW9uIGV2ZW50LgotICAgICAgICAgIHBlZXJDb25uZWN0
aW9uQ2xpZW50LmNyZWF0ZUFuc3dlcigpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25SZW1vdGVJY2VDYW5kaWRhdGUoZmlu
YWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUo
VEFHLCAiUmVjZWl2ZWQgSUNFIGNhbmRpZGF0ZSBmb3IgYSBub24taW5pdGlhbGl6ZWQgcGVlciBj
b25uZWN0aW9uLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBwZWVy
Q29ubmVjdGlvbkNsaWVudC5hZGRSZW1vdGVJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblJlbW90ZUlj
ZUNhbmRpZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAg
ICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgPT0g
bnVsbCkgewotICAgICAgICAgIExvZy5lKFRBRywgIlJlY2VpdmVkIElDRSBjYW5kaWRhdGUgcmVt
b3ZhbHMgZm9yIGEgbm9uLWluaXRpYWxpemVkIHBlZXIgY29ubmVjdGlvbi4iKTsKLSAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQucmVtb3Zl
UmVtb3RlSWNlQ2FuZGlkYXRlcyhjYW5kaWRhdGVzKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNoYW5uZWxDbG9zZSgpIHsKLSAgICBydW5P
blVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBsb2dBbmRUb2FzdCgiUmVtb3RlIGVuZCBodW5nIHVwOyBk
cm9wcGluZyBQZWVyQ29ubmVjdGlvbiIpOwotICAgICAgICBkaXNjb25uZWN0KCk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DaGFubmVsRXJy
b3IoZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgcmVwb3J0RXJyb3IoZGVzY3JpcHRp
b24pOwotICB9Ci0KLSAgLy8gLS0tLS1JbXBsZW1lbnRhdGlvbiBvZiBQZWVyQ29ubmVjdGlvbkNs
aWVudC5QZWVyQ29ubmVjdGlvbkV2ZW50cy4tLS0tLS0tLS0KLSAgLy8gU2VuZCBsb2NhbCBwZWVy
IGNvbm5lY3Rpb24gU0RQIGFuZCBJQ0UgY2FuZGlkYXRlcyB0byByZW1vdGUgcGFydHkuCi0gIC8v
IEFsbCBjYWxsYmFja3MgYXJlIGludm9rZWQgZnJvbSBwZWVyIGNvbm5lY3Rpb24gY2xpZW50IGxv
b3BlciB0aHJlYWQgYW5kCi0gIC8vIGFyZSByb3V0ZWQgdG8gVUkgdGhyZWFkLgotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25Mb2NhbERlc2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlw
dGlvbiBzZHApIHsKLSAgICBmaW5hbCBsb25nIGRlbHRhID0gU3lzdGVtLmN1cnJlbnRUaW1lTWls
bGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVNczsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICBpZiAoYXBwUnRjQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgICAgICBsb2dBbmRUb2FzdCgiU2Vu
ZGluZyAiICsgc2RwLnR5cGUgKyAiLCBkZWxheT0iICsgZGVsdGEgKyAibXMiKTsKLSAgICAgICAg
ICBpZiAoc2lnbmFsaW5nUGFyYW1ldGVycy5pbml0aWF0b3IpIHsKLSAgICAgICAgICAgIGFwcFJ0
Y0NsaWVudC5zZW5kT2ZmZXJTZHAoc2RwKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgYXBwUnRjQ2xpZW50LnNlbmRBbnN3ZXJTZHAoc2RwKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb01heEJpdHJhdGUg
PiAwKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiU2V0IHZpZGVvIG1heGltdW0gYml0cmF0ZTog
IiArIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb01heEJpdHJhdGUpOwotICAgICAgICAg
IHBlZXJDb25uZWN0aW9uQ2xpZW50LnNldFZpZGVvTWF4Qml0cmF0ZShwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMudmlkZW9NYXhCaXRyYXRlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlKGZpbmFsIElj
ZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBp
ZiAoYXBwUnRjQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgICAgICBhcHBSdGNDbGllbnQuc2VuZExv
Y2FsSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVk
KGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICBydW5PblVpVGhyZWFkKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBpZiAoYXBwUnRjQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgICAgICBhcHBSdGND
bGllbnQuc2VuZExvY2FsSWNlQ2FuZGlkYXRlUmVtb3ZhbHMoY2FuZGlkYXRlcyk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBv
bkljZUNvbm5lY3RlZCgpIHsKLSAgICBmaW5hbCBsb25nIGRlbHRhID0gU3lzdGVtLmN1cnJlbnRU
aW1lTWlsbGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVNczsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBsb2dBbmRUb2FzdCgiSUNFIGNvbm5lY3RlZCwgZGVsYXk9IiArIGRlbHRhICsgIm1z
Iik7Ci0gICAgICAgIGljZUNvbm5lY3RlZCA9IHRydWU7Ci0gICAgICAgIGNhbGxDb25uZWN0ZWQo
KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBv
bkljZURpc2Nvbm5lY3RlZCgpIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBsb2dB
bmRUb2FzdCgiSUNFIGRpc2Nvbm5lY3RlZCIpOwotICAgICAgICBpY2VDb25uZWN0ZWQgPSBmYWxz
ZTsKLSAgICAgICAgZGlzY29ubmVjdCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rpb25DbG9zZWQoKSB7fQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25uZWN0aW9uU3RhdHNSZWFkeShmaW5hbCBT
dGF0c1JlcG9ydFtdIHJlcG9ydHMpIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBp
ZiAoIWlzRXJyb3IgJiYgaWNlQ29ubmVjdGVkKSB7Ci0gICAgICAgICAgaHVkRnJhZ21lbnQudXBk
YXRlRW5jb2RlclN0YXRpc3RpY3MocmVwb3J0cyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25uZWN0aW9uRXJy
b3IoZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgcmVwb3J0RXJyb3IoZGVzY3JpcHRp
b24pOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FsbEZyYWdt
ZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhbGxG
cmFnbWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvQ2FsbEZyYWdtZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzkgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudDsKLWlt
cG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0
ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdH
cm91cDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZUJ1dHRvbjsKLWltcG9ydCBhbmRyb2lk
LndpZGdldC5TZWVrQmFyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBv
cnQgb3JnLndlYnJ0Yy5SZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZTsKLQotLyoqCi0gKiBGcmFn
bWVudCBmb3IgY2FsbCBjb250cm9sLgotICovCi1wdWJsaWMgY2xhc3MgQ2FsbEZyYWdtZW50IGV4
dGVuZHMgRnJhZ21lbnQgewotICBwcml2YXRlIFZpZXcgY29udHJvbFZpZXc7Ci0gIHByaXZhdGUg
VGV4dFZpZXcgY29udGFjdFZpZXc7Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gZGlzY29ubmVjdEJ1
dHRvbjsKLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBjYW1lcmFTd2l0Y2hCdXR0b247Ci0gIHByaXZh
dGUgSW1hZ2VCdXR0b24gdmlkZW9TY2FsaW5nQnV0dG9uOwotICBwcml2YXRlIEltYWdlQnV0dG9u
IHRvZ2dsZU11dGVCdXR0b247Ci0gIHByaXZhdGUgVGV4dFZpZXcgY2FwdHVyZUZvcm1hdFRleHQ7
Ci0gIHByaXZhdGUgU2Vla0JhciBjYXB0dXJlRm9ybWF0U2xpZGVyOwotICBwcml2YXRlIE9uQ2Fs
bEV2ZW50cyBjYWxsRXZlbnRzOwotICBwcml2YXRlIFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlOwot
ICBwcml2YXRlIGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZCA9IHRydWU7Ci0KLSAgLyoqCi0gICAq
IENhbGwgY29udHJvbCBpbnRlcmZhY2UgZm9yIGNvbnRhaW5lciBhY3Rpdml0eS4KLSAgICovCi0g
IHB1YmxpYyBpbnRlcmZhY2UgT25DYWxsRXZlbnRzIHsKLSAgICB2b2lkIG9uQ2FsbEhhbmdVcCgp
OwotICAgIHZvaWQgb25DYW1lcmFTd2l0Y2goKTsKLSAgICB2b2lkIG9uVmlkZW9TY2FsaW5nU3dp
dGNoKFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlKTsKLSAgICB2b2lkIG9uQ2FwdHVyZUZvcm1hdENo
YW5nZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpOwotICAgIGJvb2xlYW4g
b25Ub2dnbGVNaWMoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlldyBvbkNyZWF0
ZVZpZXcoCi0gICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciwgVmlld0dyb3VwIGNvbnRhaW5l
ciwgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIGNvbnRyb2xWaWV3ID0gaW5mbGF0
ZXIuaW5mbGF0ZShSLmxheW91dC5mcmFnbWVudF9jYWxsLCBjb250YWluZXIsIGZhbHNlKTsKLQot
ICAgIC8vIENyZWF0ZSBVSSBjb250cm9scy4KLSAgICBjb250YWN0VmlldyA9IChUZXh0Vmlldykg
Y29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuY29udGFjdF9uYW1lX2NhbGwpOwotICAgIGRp
c2Nvbm5lY3RCdXR0b24gPSAoSW1hZ2VCdXR0b24pIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChS
LmlkLmJ1dHRvbl9jYWxsX2Rpc2Nvbm5lY3QpOwotICAgIGNhbWVyYVN3aXRjaEJ1dHRvbiA9IChJ
bWFnZUJ1dHRvbikgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0dG9uX2NhbGxfc3dp
dGNoX2NhbWVyYSk7Ci0gICAgdmlkZW9TY2FsaW5nQnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250
cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5idXR0b25fY2FsbF9zY2FsaW5nX21vZGUpOwotICAg
IHRvZ2dsZU11dGVCdXR0b24gPSAoSW1hZ2VCdXR0b24pIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJ
ZChSLmlkLmJ1dHRvbl9jYWxsX3RvZ2dsZV9taWMpOwotICAgIGNhcHR1cmVGb3JtYXRUZXh0ID0g
KFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5jYXB0dXJlX2Zvcm1hdF90
ZXh0X2NhbGwpOwotICAgIGNhcHR1cmVGb3JtYXRTbGlkZXIgPSAoU2Vla0JhcikgY29udHJvbFZp
ZXcuZmluZFZpZXdCeUlkKFIuaWQuY2FwdHVyZV9mb3JtYXRfc2xpZGVyX2NhbGwpOwotCi0gICAg
Ly8gQWRkIGJ1dHRvbnMgY2xpY2sgZXZlbnRzLgotICAgIGRpc2Nvbm5lY3RCdXR0b24uc2V0T25D
bGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAgICAgICAgY2FsbEV2
ZW50cy5vbkNhbGxIYW5nVXAoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIGNhbWVyYVN3aXRj
aEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewot
ICAgICAgICBjYWxsRXZlbnRzLm9uQ2FtZXJhU3dpdGNoKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0K
LSAgICB2aWRlb1NjYWxpbmdCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xp
Y2tMaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGlj
ayhWaWV3IHZpZXcpIHsKLSAgICAgICAgaWYgKHNjYWxpbmdUeXBlID09IFNjYWxpbmdUeXBlLlND
QUxFX0FTUEVDVF9GSUxMKSB7Ci0gICAgICAgICAgdmlkZW9TY2FsaW5nQnV0dG9uLnNldEJhY2tn
cm91bmRSZXNvdXJjZShSLmRyYXdhYmxlLmljX2FjdGlvbl9mdWxsX3NjcmVlbik7Ci0gICAgICAg
ICAgc2NhbGluZ1R5cGUgPSBTY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklUOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIHZpZGVvU2NhbGluZ0J1dHRvbi5zZXRCYWNrZ3JvdW5kUmVzb3Vy
Y2UoUi5kcmF3YWJsZS5pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4pOwotICAgICAg
ICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJTEw7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FsbEV2ZW50cy5vblZpZGVvU2NhbGluZ1N3aXRjaChzY2FsaW5nVHlwZSk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgc2NhbGluZ1R5cGUgPSBTY2FsaW5nVHlwZS5TQ0FMRV9B
U1BFQ1RfRklMTDsKLQotICAgIHRvZ2dsZU11dGVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5l
dyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAgICAgICAgYm9vbGVhbiBlbmFibGVkID0gY2Fs
bEV2ZW50cy5vblRvZ2dsZU1pYygpOwotICAgICAgICB0b2dnbGVNdXRlQnV0dG9uLnNldEFscGhh
KGVuYWJsZWQgPyAxLjBmIDogMC4zZik7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4g
Y29udHJvbFZpZXc7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25TdGFydCgp
IHsKLSAgICBzdXBlci5vblN0YXJ0KCk7Ci0KLSAgICBib29sZWFuIGNhcHR1cmVTbGlkZXJFbmFi
bGVkID0gZmFsc2U7Ci0gICAgQnVuZGxlIGFyZ3MgPSBnZXRBcmd1bWVudHMoKTsKLSAgICBpZiAo
YXJncyAhPSBudWxsKSB7Ci0gICAgICBTdHJpbmcgY29udGFjdE5hbWUgPSBhcmdzLmdldFN0cmlu
ZyhDYWxsQWN0aXZpdHkuRVhUUkFfUk9PTUlEKTsKLSAgICAgIGNvbnRhY3RWaWV3LnNldFRleHQo
Y29udGFjdE5hbWUpOwotICAgICAgdmlkZW9DYWxsRW5hYmxlZCA9IGFyZ3MuZ2V0Qm9vbGVhbihD
YWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FMTCwgdHJ1ZSk7Ci0gICAgICBjYXB0dXJlU2xpZGVy
RW5hYmxlZCA9IHZpZGVvQ2FsbEVuYWJsZWQKLSAgICAgICAgICAmJiBhcmdzLmdldEJvb2xlYW4o
Q2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBUFRVUkVRVUFMSVRZU0xJREVSX0VOQUJMRUQsIGZh
bHNlKTsKLSAgICB9Ci0gICAgaWYgKCF2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICBjYW1lcmFT
d2l0Y2hCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3LklOVklTSUJMRSk7Ci0gICAgfQotICAgIGlm
IChjYXB0dXJlU2xpZGVyRW5hYmxlZCkgewotICAgICAgY2FwdHVyZUZvcm1hdFNsaWRlci5zZXRP
blNlZWtCYXJDaGFuZ2VMaXN0ZW5lcigKLSAgICAgICAgICBuZXcgQ2FwdHVyZVF1YWxpdHlDb250
cm9sbGVyKGNhcHR1cmVGb3JtYXRUZXh0LCBjYWxsRXZlbnRzKSk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIGNhcHR1cmVGb3JtYXRUZXh0LnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICAgIGNh
cHR1cmVGb3JtYXRTbGlkZXIuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgIH0KLSAgfQot
Ci0gIC8vIFRPRE8oc2FrYWwpOiBSZXBsYWNlIHdpdGggb25BdHRhY2goQ29udGV4dCkgb25jZSB3
ZSBvbmx5IHN1cHBvcnQgQVBJIGxldmVsIDIzKy4KLSAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJl
Y2F0aW9uIikKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQXR0YWNoKEFjdGl2aXR5IGFj
dGl2aXR5KSB7Ci0gICAgc3VwZXIub25BdHRhY2goYWN0aXZpdHkpOwotICAgIGNhbGxFdmVudHMg
PSAoT25DYWxsRXZlbnRzKSBhY3Rpdml0eTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL0NhcHR1cmVRdWFsaXR5Q29udHJvbGxlci5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhcHR1
cmVRdWFsaXR5Q29udHJvbGxlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTEwICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBv
cnQgYW5kcm9pZC53aWRnZXQuU2Vla0JhcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0Vmll
dzsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9u
czsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsK
LWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0
OwotCi0vKioKLSAqIENvbnRyb2wgY2FwdHVyZSBmb3JtYXQgYmFzZWQgb24gYSBzZWVrYmFyIGxp
c3RlbmVyLgotICovCi1wdWJsaWMgY2xhc3MgQ2FwdHVyZVF1YWxpdHlDb250cm9sbGVyIGltcGxl
bWVudHMgU2Vla0Jhci5PblNlZWtCYXJDaGFuZ2VMaXN0ZW5lciB7Ci0gIHByaXZhdGUgZmluYWwg
TGlzdDxDYXB0dXJlRm9ybWF0PiBmb3JtYXRzID0KLSAgICAgIEFycmF5cy5hc0xpc3QobmV3IENh
cHR1cmVGb3JtYXQoMTI4MCwgNzIwLCAwLCAzMDAwMCksIG5ldyBDYXB0dXJlRm9ybWF0KDk2MCwg
NTQwLCAwLCAzMDAwMCksCi0gICAgICAgICAgbmV3IENhcHR1cmVGb3JtYXQoNjQwLCA0ODAsIDAs
IDMwMDAwKSwgbmV3IENhcHR1cmVGb3JtYXQoNDgwLCAzNjAsIDAsIDMwMDAwKSwKLSAgICAgICAg
ICBuZXcgQ2FwdHVyZUZvcm1hdCgzMjAsIDI0MCwgMCwgMzAwMDApLCBuZXcgQ2FwdHVyZUZvcm1h
dCgyNTYsIDE0NCwgMCwgMzAwMDApKTsKLSAgLy8gUHJpb3JpdGl6ZSBmcmFtZXJhdGUgYmVsb3cg
dGhpcyB0aHJlc2hvbGQgYW5kIHJlc29sdXRpb24gYWJvdmUgdGhlIHRocmVzaG9sZC4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IEZSQU1FUkFURV9USFJFU0hPTEQgPSAxNTsKLSAgcHJpdmF0
ZSBUZXh0VmlldyBjYXB0dXJlRm9ybWF0VGV4dDsKLSAgcHJpdmF0ZSBDYWxsRnJhZ21lbnQuT25D
YWxsRXZlbnRzIGNhbGxFdmVudHM7Ci0gIHByaXZhdGUgaW50IHdpZHRoID0gMDsKLSAgcHJpdmF0
ZSBpbnQgaGVpZ2h0ID0gMDsKLSAgcHJpdmF0ZSBpbnQgZnJhbWVyYXRlID0gMDsKLSAgcHJpdmF0
ZSBkb3VibGUgdGFyZ2V0QmFuZHdpZHRoID0gMDsKLQotICBwdWJsaWMgQ2FwdHVyZVF1YWxpdHlD
b250cm9sbGVyKAotICAgICAgVGV4dFZpZXcgY2FwdHVyZUZvcm1hdFRleHQsIENhbGxGcmFnbWVu
dC5PbkNhbGxFdmVudHMgY2FsbEV2ZW50cykgewotICAgIHRoaXMuY2FwdHVyZUZvcm1hdFRleHQg
PSBjYXB0dXJlRm9ybWF0VGV4dDsKLSAgICB0aGlzLmNhbGxFdmVudHMgPSBjYWxsRXZlbnRzOwot
ICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb21wYXJhdG9yPENhcHR1cmVGb3JtYXQ+IGNvbXBhcmVG
b3JtYXRzID0gbmV3IENvbXBhcmF0b3I8Q2FwdHVyZUZvcm1hdD4oKSB7Ci0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIGludCBjb21wYXJlKENhcHR1cmVGb3JtYXQgZmlyc3QsIENhcHR1cmVGb3Jt
YXQgc2Vjb25kKSB7Ci0gICAgICBpbnQgZmlyc3RGcHMgPSBjYWxjdWxhdGVGcmFtZXJhdGUodGFy
Z2V0QmFuZHdpZHRoLCBmaXJzdCk7Ci0gICAgICBpbnQgc2Vjb25kRnBzID0gY2FsY3VsYXRlRnJh
bWVyYXRlKHRhcmdldEJhbmR3aWR0aCwgc2Vjb25kKTsKLQotICAgICAgaWYgKGZpcnN0RnBzID49
IEZSQU1FUkFURV9USFJFU0hPTEQgJiYgc2Vjb25kRnBzID49IEZSQU1FUkFURV9USFJFU0hPTEQK
LSAgICAgICAgICB8fCBmaXJzdEZwcyA9PSBzZWNvbmRGcHMpIHsKLSAgICAgICAgLy8gQ29tcGFy
ZSByZXNvbHV0aW9uLgotICAgICAgICByZXR1cm4gZmlyc3Qud2lkdGggKiBmaXJzdC5oZWlnaHQg
LSBzZWNvbmQud2lkdGggKiBzZWNvbmQuaGVpZ2h0OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gQ29tcGFyZSBmcHMuCi0gICAgICAgIHJldHVybiBmaXJzdEZwcyAtIHNlY29uZEZwczsKLSAg
ICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUHJvZ3Jl
c3NDaGFuZ2VkKFNlZWtCYXIgc2Vla0JhciwgaW50IHByb2dyZXNzLCBib29sZWFuIGZyb21Vc2Vy
KSB7Ci0gICAgaWYgKHByb2dyZXNzID09IDApIHsKLSAgICAgIHdpZHRoID0gMDsKLSAgICAgIGhl
aWdodCA9IDA7Ci0gICAgICBmcmFtZXJhdGUgPSAwOwotICAgICAgY2FwdHVyZUZvcm1hdFRleHQu
c2V0VGV4dChSLnN0cmluZy5tdXRlZCk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8g
RXh0cmFjdCBtYXggYmFuZHdpZHRoIChpbiBtaWxsaXBpeGVscyAvIHNlY29uZCkuCi0gICAgbG9u
ZyBtYXhDYXB0dXJlQmFuZHdpZHRoID0gamF2YS5sYW5nLkxvbmcuTUlOX1ZBTFVFOwotICAgIGZv
ciAoQ2FwdHVyZUZvcm1hdCBmb3JtYXQgOiBmb3JtYXRzKSB7Ci0gICAgICBtYXhDYXB0dXJlQmFu
ZHdpZHRoID0KLSAgICAgICAgICBNYXRoLm1heChtYXhDYXB0dXJlQmFuZHdpZHRoLCAobG9uZykg
Zm9ybWF0LndpZHRoICogZm9ybWF0LmhlaWdodCAqIGZvcm1hdC5mcmFtZXJhdGUubWF4KTsKLSAg
ICB9Ci0KLSAgICAvLyBGcmFjdGlvbiBiZXR3ZWVuIDAgYW5kIDEuCi0gICAgZG91YmxlIGJhbmR3
aWR0aEZyYWN0aW9uID0gKGRvdWJsZSkgcHJvZ3Jlc3MgLyAxMDAuMDsKLSAgICAvLyBNYWtlIGEg
bG9nLXNjYWxlIHRyYW5zZm9ybWF0aW9uLCBzdGlsbCBiZXR3ZWVuIDAgYW5kIDEuCi0gICAgZmlu
YWwgZG91YmxlIGtFeHBDb25zdGFudCA9IDMuMDsKLSAgICBiYW5kd2lkdGhGcmFjdGlvbiA9Ci0g
ICAgICAgIChNYXRoLmV4cChrRXhwQ29uc3RhbnQgKiBiYW5kd2lkdGhGcmFjdGlvbikgLSAxKSAv
IChNYXRoLmV4cChrRXhwQ29uc3RhbnQpIC0gMSk7Ci0gICAgdGFyZ2V0QmFuZHdpZHRoID0gYmFu
ZHdpZHRoRnJhY3Rpb24gKiBtYXhDYXB0dXJlQmFuZHdpZHRoOwotCi0gICAgLy8gQ2hvb3NlIHRo
ZSBiZXN0IGZvcm1hdCBnaXZlbiBhIHRhcmdldCBiYW5kd2lkdGguCi0gICAgZmluYWwgQ2FwdHVy
ZUZvcm1hdCBiZXN0Rm9ybWF0ID0gQ29sbGVjdGlvbnMubWF4KGZvcm1hdHMsIGNvbXBhcmVGb3Jt
YXRzKTsKLSAgICB3aWR0aCA9IGJlc3RGb3JtYXQud2lkdGg7Ci0gICAgaGVpZ2h0ID0gYmVzdEZv
cm1hdC5oZWlnaHQ7Ci0gICAgZnJhbWVyYXRlID0gY2FsY3VsYXRlRnJhbWVyYXRlKHRhcmdldEJh
bmR3aWR0aCwgYmVzdEZvcm1hdCk7Ci0gICAgY2FwdHVyZUZvcm1hdFRleHQuc2V0VGV4dCgKLSAg
ICAgICAgU3RyaW5nLmZvcm1hdChjYXB0dXJlRm9ybWF0VGV4dC5nZXRDb250ZXh0KCkuZ2V0U3Ry
aW5nKFIuc3RyaW5nLmZvcm1hdF9kZXNjcmlwdGlvbiksIHdpZHRoLAotICAgICAgICAgICAgaGVp
Z2h0LCBmcmFtZXJhdGUpKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN0
YXJ0VHJhY2tpbmdUb3VjaChTZWVrQmFyIHNlZWtCYXIpIHt9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIG9uU3RvcFRyYWNraW5nVG91Y2goU2Vla0JhciBzZWVrQmFyKSB7Ci0gICAgY2Fs
bEV2ZW50cy5vbkNhcHR1cmVGb3JtYXRDaGFuZ2Uod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsK
LSAgfQotCi0gIC8vIFJldHVybiB0aGUgaGlnaGVzdCBmcmFtZSByYXRlIHBvc3NpYmxlIGJhc2Vk
IG9uIGJhbmR3aWR0aCBhbmQgZm9ybWF0LgotICBwcml2YXRlIGludCBjYWxjdWxhdGVGcmFtZXJh
dGUoZG91YmxlIGJhbmR3aWR0aCwgQ2FwdHVyZUZvcm1hdCBmb3JtYXQpIHsKLSAgICByZXR1cm4g
KGludCkgTWF0aC5yb3VuZCgKLSAgICAgICAgTWF0aC5taW4oZm9ybWF0LmZyYW1lcmF0ZS5tYXgs
IChpbnQpIE1hdGgucm91bmQoYmFuZHdpZHRoIC8gKGZvcm1hdC53aWR0aCAqIGZvcm1hdC5oZWln
aHQpKSkKLSAgICAgICAgLyAxMDAwLjApOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvQ29ubmVjdEFjdGl2aXR5LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMv
b3JnL2FwcHNwb3QvYXBwcnRjL0Nvbm5lY3RBY3Rpdml0eS5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ29ubmVjdEFjdGl2aXR5LmphdmEJKG5v
bmV4aXN0ZW50KQpAQCAtMSw1NDUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUg
V2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQot
ICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5
IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxs
IGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFV
VEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2Fn
ZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWlt
cG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlh
bG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5k
cm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2VzOwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsK
LWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJl
ZmVyZW5jZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lk
LnZpZXcuQ29udGV4dE1lbnU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0
IGFuZHJvaWQudmlldy5NZW51OwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51SXRlbTsKLWltcG9y
dCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlz
dGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LmlucHV0bWV0aG9kLkVkaXRvckluZm87Ci1pbXBv
cnQgYW5kcm9pZC53ZWJraXQuVVJMVXRpbDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVy
VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5BcnJheUFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9p
ZC53aWRnZXQuRWRpdFRleHQ7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VCdXR0b247Ci1p
bXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4
dFZpZXc7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmFu
ZG9tOwotaW1wb3J0IG9yZy5qc29uLkpTT05BcnJheTsKLWltcG9ydCBvcmcuanNvbi5KU09ORXhj
ZXB0aW9uOwotCi0vKioKLSAqIEhhbmRsZXMgdGhlIGluaXRpYWwgc2V0dXAgd2hlcmUgdGhlIHVz
ZXIgc2VsZWN0cyB3aGljaCByb29tIHRvIGpvaW4uCi0gKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0
QWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBUQUcgPSAiQ29ubmVjdEFjdGl2aXR5IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENP
Tk5FQ1RJT05fUkVRVUVTVCA9IDE7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRU1PVkVf
RkFWT1JJVEVfSU5ERVggPSAwOwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGNvbW1hbmRMaW5l
UnVuID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBjb25uZWN0QnV0dG9uOwotICBw
cml2YXRlIEltYWdlQnV0dG9uIGFkZEZhdm9yaXRlQnV0dG9uOwotICBwcml2YXRlIEVkaXRUZXh0
IHJvb21FZGl0VGV4dDsKLSAgcHJpdmF0ZSBMaXN0VmlldyByb29tTGlzdFZpZXc7Ci0gIHByaXZh
dGUgU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJl
ZlZpZGVvQ2FsbEVuYWJsZWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZTY3JlZW5jYXB0dXJl
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQ2FtZXJhMjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZlJlc29sdXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZGcHM7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZDYXB0dXJlUXVhbGl0eVNsaWRlcjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZlZpZGVvQml0cmF0ZVR5cGU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZWaWRlb0JpdHJh
dGVWYWx1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlZpZGVvQ29kZWM7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZBdWRpb0JpdHJhdGVUeXBlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVm
QXVkaW9CaXRyYXRlVmFsdWU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZBdWRpb0NvZGVjOwot
ICBwcml2YXRlIFN0cmluZyBrZXlwcmVmSHdDb2RlY0FjY2VsZXJhdGlvbjsKLSAgcHJpdmF0ZSBT
dHJpbmcga2V5cHJlZkNhcHR1cmVUb1RleHR1cmU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZO
b0F1ZGlvUHJvY2Vzc2luZ1BpcGVsaW5lOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQWVjRHVt
cDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk9wZW5TTEVTOwotICBwcml2YXRlIFN0cmluZyBr
ZXlwcmVmRGlzYWJsZUJ1aWx0SW5BZWM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxl
QnVpbHRJbkFnYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluTnM7Ci0g
IHByaXZhdGUgU3RyaW5nIGtleXByZWZFbmFibGVMZXZlbENvbnRyb2w7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZEaXNwbGF5SHVkOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVHJhY2luZzsK
LSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJvb21TZXJ2ZXJVcmw7Ci0gIHByaXZhdGUgU3RyaW5n
IGtleXByZWZSb29tOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmUm9vbUxpc3Q7Ci0gIHByaXZh
dGUgQXJyYXlMaXN0PFN0cmluZz4gcm9vbUxpc3Q7Ci0gIHByaXZhdGUgQXJyYXlBZGFwdGVyPFN0
cmluZz4gYWRhcHRlcjsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVu
ZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFu
Y2VTdGF0ZSk7Ci0KLSAgICAvLyBHZXQgc2V0dGluZyBrZXlzLgotICAgIFByZWZlcmVuY2VNYW5h
Z2VyLnNldERlZmF1bHRWYWx1ZXModGhpcywgUi54bWwucHJlZmVyZW5jZXMsIGZhbHNlKTsKLSAg
ICBzaGFyZWRQcmVmID0gUHJlZmVyZW5jZU1hbmFnZXIuZ2V0RGVmYXVsdFNoYXJlZFByZWZlcmVu
Y2VzKHRoaXMpOwotICAgIGtleXByZWZWaWRlb0NhbGxFbmFibGVkID0gZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfdmlkZW9jYWxsX2tleSk7Ci0gICAga2V5cHJlZlNjcmVlbmNhcHR1cmUgPSBnZXRT
dHJpbmcoUi5zdHJpbmcucHJlZl9zY3JlZW5jYXB0dXJlX2tleSk7Ci0gICAga2V5cHJlZkNhbWVy
YTIgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9jYW1lcmEyX2tleSk7Ci0gICAga2V5cHJlZlJl
c29sdXRpb24gPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yZXNvbHV0aW9uX2tleSk7Ci0gICAg
a2V5cHJlZkZwcyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Zwc19rZXkpOwotICAgIGtleXBy
ZWZDYXB0dXJlUXVhbGl0eVNsaWRlciA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmVx
dWFsaXR5c2xpZGVyX2tleSk7Ci0gICAga2V5cHJlZlZpZGVvQml0cmF0ZVR5cGUgPSBnZXRTdHJp
bmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGVfa2V5KTsKLSAgICBrZXlwcmVmVmlkZW9C
aXRyYXRlVmFsdWUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1
ZV9rZXkpOwotICAgIGtleXByZWZWaWRlb0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZf
dmlkZW9jb2RlY19rZXkpOwotICAgIGtleXByZWZId0NvZGVjQWNjZWxlcmF0aW9uID0gZ2V0U3Ry
aW5nKFIuc3RyaW5nLnByZWZfaHdjb2RlY19rZXkpOwotICAgIGtleXByZWZDYXB0dXJlVG9UZXh0
dXJlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXkpOwotICAg
IGtleXByZWZBdWRpb0JpdHJhdGVUeXBlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRh
dWRpb2JpdHJhdGVfa2V5KTsKLSAgICBrZXlwcmVmQXVkaW9CaXRyYXRlVmFsdWUgPSBnZXRTdHJp
bmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2tleSk7Ci0gICAga2V5cHJl
ZkF1ZGlvQ29kZWMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9hdWRpb2NvZGVjX2tleSk7Ci0g
ICAga2V5cHJlZk5vQXVkaW9Qcm9jZXNzaW5nUGlwZWxpbmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19rZXkpOwotICAgIGtleXByZWZBZWNEdW1wID0gZ2V0U3Ry
aW5nKFIuc3RyaW5nLnByZWZfYWVjZHVtcF9rZXkpOwotICAgIGtleXByZWZPcGVuU0xFUyA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX29wZW5zbGVzX2tleSk7Ci0gICAga2V5cHJlZkRpc2FibGVC
dWlsdEluQWVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNf
a2V5KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BZ2MgPSBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19rZXkpOwotICAgIGtleXByZWZEaXNhYmxlQnVpbHRJ
bk5zID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19rZXkpOwot
ICAgIGtleXByZWZFbmFibGVMZXZlbENvbnRyb2wgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9l
bmFibGVfbGV2ZWxfY29udHJvbF9rZXkpOwotICAgIGtleXByZWZEaXNwbGF5SHVkID0gZ2V0U3Ry
aW5nKFIuc3RyaW5nLnByZWZfZGlzcGxheWh1ZF9rZXkpOwotICAgIGtleXByZWZUcmFjaW5nID0g
Z2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdHJhY2luZ19rZXkpOwotICAgIGtleXByZWZSb29tU2Vy
dmVyVXJsID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcm9vbV9zZXJ2ZXJfdXJsX2tleSk7Ci0g
ICAga2V5cHJlZlJvb20gPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yb29tX2tleSk7Ci0gICAg
a2V5cHJlZlJvb21MaXN0ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcm9vbV9saXN0X2tleSk7
Ci0KLSAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5hY3Rpdml0eV9jb25uZWN0KTsKLQotICAg
IHJvb21FZGl0VGV4dCA9IChFZGl0VGV4dCkgZmluZFZpZXdCeUlkKFIuaWQucm9vbV9lZGl0dGV4
dCk7Ci0gICAgcm9vbUVkaXRUZXh0LnNldE9uRWRpdG9yQWN0aW9uTGlzdGVuZXIobmV3IFRleHRW
aWV3Lk9uRWRpdG9yQWN0aW9uTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyBib29sZWFuIG9uRWRpdG9yQWN0aW9uKFRleHRWaWV3IHRleHRWaWV3LCBpbnQgaSwgS2V5
RXZlbnQga2V5RXZlbnQpIHsKLSAgICAgICAgaWYgKGkgPT0gRWRpdG9ySW5mby5JTUVfQUNUSU9O
X0RPTkUpIHsKLSAgICAgICAgICBhZGRGYXZvcml0ZUJ1dHRvbi5wZXJmb3JtQ2xpY2soKTsKLSAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gICAgcm9vbUVkaXRUZXh0LnJlcXVlc3RGb2N1cygpOwotCi0gICAg
cm9vbUxpc3RWaWV3ID0gKExpc3RWaWV3KSBmaW5kVmlld0J5SWQoUi5pZC5yb29tX2xpc3R2aWV3
KTsKLSAgICByb29tTGlzdFZpZXcuc2V0RW1wdHlWaWV3KGZpbmRWaWV3QnlJZChhbmRyb2lkLlIu
aWQuZW1wdHkpKTsKLSAgICByb29tTGlzdFZpZXcuc2V0T25JdGVtQ2xpY2tMaXN0ZW5lcihyb29t
TGlzdENsaWNrTGlzdGVuZXIpOwotICAgIHJlZ2lzdGVyRm9yQ29udGV4dE1lbnUocm9vbUxpc3RW
aWV3KTsKLSAgICBjb25uZWN0QnV0dG9uID0gKEltYWdlQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5p
ZC5jb25uZWN0X2J1dHRvbik7Ci0gICAgY29ubmVjdEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIo
Y29ubmVjdExpc3RlbmVyKTsKLSAgICBhZGRGYXZvcml0ZUJ1dHRvbiA9IChJbWFnZUJ1dHRvbikg
ZmluZFZpZXdCeUlkKFIuaWQuYWRkX2Zhdm9yaXRlX2J1dHRvbik7Ci0gICAgYWRkRmF2b3JpdGVC
dXR0b24uc2V0T25DbGlja0xpc3RlbmVyKGFkZEZhdm9yaXRlTGlzdGVuZXIpOwotCi0gICAgLy8g
SWYgYW4gaW1wbGljaXQgVklFVyBpbnRlbnQgaXMgbGF1bmNoaW5nIHRoZSBhcHAsIGdvIGRpcmVj
dGx5IHRvIHRoYXQgVVJMLgotICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBnZXRJbnRlbnQoKTsK
LSAgICBpZiAoImFuZHJvaWQuaW50ZW50LmFjdGlvbi5WSUVXIi5lcXVhbHMoaW50ZW50LmdldEFj
dGlvbigpKSAmJiAhY29tbWFuZExpbmVSdW4pIHsKLSAgICAgIGJvb2xlYW4gbG9vcGJhY2sgPSBp
bnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9MT09QQkFDSywgZmFsc2Up
OwotICAgICAgaW50IHJ1blRpbWVNcyA9IGludGVudC5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHku
RVhUUkFfUlVOVElNRSwgMCk7Ci0gICAgICBib29sZWFuIHVzZVZhbHVlc0Zyb21JbnRlbnQgPQot
ICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1VTRV9W
QUxVRVNfRlJPTV9JTlRFTlQsIGZhbHNlKTsKLSAgICAgIFN0cmluZyByb29tID0gc2hhcmVkUHJl
Zi5nZXRTdHJpbmcoa2V5cHJlZlJvb20sICIiKTsKLSAgICAgIGNvbm5lY3RUb1Jvb20ocm9vbSwg
dHJ1ZSwgbG9vcGJhY2ssIHVzZVZhbHVlc0Zyb21JbnRlbnQsIHJ1blRpbWVNcyk7Ci0gICAgfQot
ICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIG9uQ3JlYXRlT3B0aW9uc01lbnUo
TWVudSBtZW51KSB7Ci0gICAgZ2V0TWVudUluZmxhdGVyKCkuaW5mbGF0ZShSLm1lbnUuY29ubmVj
dF9tZW51LCBtZW51KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBvbkNyZWF0ZUNvbnRleHRNZW51KENvbnRleHRNZW51IG1lbnUsIFZpZXcgdiwg
Q29udGV4dE1lbnUuQ29udGV4dE1lbnVJbmZvIG1lbnVJbmZvKSB7Ci0gICAgaWYgKHYuZ2V0SWQo
KSA9PSBSLmlkLnJvb21fbGlzdHZpZXcpIHsKLSAgICAgIEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250
ZXh0TWVudUluZm8gaW5mbyA9IChBZGFwdGVyVmlldy5BZGFwdGVyQ29udGV4dE1lbnVJbmZvKSBt
ZW51SW5mbzsKLSAgICAgIG1lbnUuc2V0SGVhZGVyVGl0bGUocm9vbUxpc3QuZ2V0KGluZm8ucG9z
aXRpb24pKTsKLSAgICAgIFN0cmluZ1tdIG1lbnVJdGVtcyA9IGdldFJlc291cmNlcygpLmdldFN0
cmluZ0FycmF5KFIuYXJyYXkucm9vbUxpc3RDb250ZXh0TWVudSk7Ci0gICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkrKykgewotICAgICAgICBtZW51LmFkZChNZW51
Lk5PTkUsIGksIGksIG1lbnVJdGVtc1tpXSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHN1cGVyLm9uQ3JlYXRlQ29udGV4dE1lbnUobWVudSwgdiwgbWVudUluZm8pOwotICAgIH0KLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBvbkNvbnRleHRJdGVtU2VsZWN0ZWQo
TWVudUl0ZW0gaXRlbSkgewotICAgIGlmIChpdGVtLmdldEl0ZW1JZCgpID09IFJFTU9WRV9GQVZP
UklURV9JTkRFWCkgewotICAgICAgQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRNZW51SW5mbyBp
bmZvID0KLSAgICAgICAgICAoQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRNZW51SW5mbykgaXRl
bS5nZXRNZW51SW5mbygpOwotICAgICAgcm9vbUxpc3QucmVtb3ZlKGluZm8ucG9zaXRpb24pOwot
ICAgICAgYWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOwotICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cGVyLm9uQ29udGV4dEl0ZW1TZWxlY3RlZChpdGVtKTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBvbk9wdGlvbnNJdGVtU2VsZWN0
ZWQoTWVudUl0ZW0gaXRlbSkgewotICAgIC8vIEhhbmRsZSBwcmVzc2VzIG9uIHRoZSBhY3Rpb24g
YmFyIGl0ZW1zLgotICAgIGlmIChpdGVtLmdldEl0ZW1JZCgpID09IFIuaWQuYWN0aW9uX3NldHRp
bmdzKSB7Ci0gICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudCh0aGlzLCBTZXR0aW5nc0Fj
dGl2aXR5LmNsYXNzKTsKLSAgICAgIHN0YXJ0QWN0aXZpdHkoaW50ZW50KTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0gZWxzZSBpZiAoaXRlbS5nZXRJdGVtSWQoKSA9PSBSLmlkLmFjdGlvbl9s
b29wYmFjaykgewotICAgICAgY29ubmVjdFRvUm9vbShudWxsLCBmYWxzZSwgdHJ1ZSwgZmFsc2Us
IDApOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiBzdXBl
ci5vbk9wdGlvbnNJdGVtU2VsZWN0ZWQoaXRlbSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIG9uUGF1c2UoKSB7Ci0gICAgc3VwZXIub25QYXVzZSgpOwotICAgIFN0
cmluZyByb29tID0gcm9vbUVkaXRUZXh0LmdldFRleHQoKS50b1N0cmluZygpOwotICAgIFN0cmlu
ZyByb29tTGlzdEpzb24gPSBuZXcgSlNPTkFycmF5KHJvb21MaXN0KS50b1N0cmluZygpOwotICAg
IFNoYXJlZFByZWZlcmVuY2VzLkVkaXRvciBlZGl0b3IgPSBzaGFyZWRQcmVmLmVkaXQoKTsKLSAg
ICBlZGl0b3IucHV0U3RyaW5nKGtleXByZWZSb29tLCByb29tKTsKLSAgICBlZGl0b3IucHV0U3Ry
aW5nKGtleXByZWZSb29tTGlzdCwgcm9vbUxpc3RKc29uKTsKLSAgICBlZGl0b3IuY29tbWl0KCk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25SZXN1bWUoKSB7Ci0gICAgc3Vw
ZXIub25SZXN1bWUoKTsKLSAgICBTdHJpbmcgcm9vbSA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtl
eXByZWZSb29tLCAiIik7Ci0gICAgcm9vbUVkaXRUZXh0LnNldFRleHQocm9vbSk7Ci0gICAgcm9v
bUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICBTdHJpbmcgcm9vbUxpc3RKc29u
ID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZlJvb21MaXN0LCBudWxsKTsKLSAgICBpZiAo
cm9vbUxpc3RKc29uICE9IG51bGwpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIEpTT05BcnJheSBq
c29uQXJyYXkgPSBuZXcgSlNPTkFycmF5KHJvb21MaXN0SnNvbik7Ci0gICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwganNvbkFycmF5Lmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgICByb29tTGlz
dC5hZGQoanNvbkFycmF5LmdldChpKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfSBj
YXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBs
b2FkIHJvb20gbGlzdDogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGFk
YXB0ZXIgPSBuZXcgQXJyYXlBZGFwdGVyPFN0cmluZz4odGhpcywgYW5kcm9pZC5SLmxheW91dC5z
aW1wbGVfbGlzdF9pdGVtXzEsIHJvb21MaXN0KTsKLSAgICByb29tTGlzdFZpZXcuc2V0QWRhcHRl
cihhZGFwdGVyKTsKLSAgICBpZiAoYWRhcHRlci5nZXRDb3VudCgpID4gMCkgewotICAgICAgcm9v
bUxpc3RWaWV3LnJlcXVlc3RGb2N1cygpOwotICAgICAgcm9vbUxpc3RWaWV3LnNldEl0ZW1DaGVj
a2VkKDAsIHRydWUpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9p
ZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVu
dCBkYXRhKSB7Ci0gICAgaWYgKHJlcXVlc3RDb2RlID09IENPTk5FQ1RJT05fUkVRVUVTVCAmJiBj
b21tYW5kTGluZVJ1bikgewotICAgICAgTG9nLmQoVEFHLCAiUmV0dXJuOiAiICsgcmVzdWx0Q29k
ZSk7Ci0gICAgICBzZXRSZXN1bHQocmVzdWx0Q29kZSk7Ci0gICAgICBjb21tYW5kTGluZVJ1biA9
IGZhbHNlOwotICAgICAgZmluaXNoKCk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBh
IHZhbHVlIGZyb20gdGhlIHNoYXJlZCBwcmVmZXJlbmNlIG9yIGZyb20gdGhlIGludGVudCwgaWYg
aXQgZG9lcyBub3QKLSAgICogZXhpc3QgdGhlIGRlZmF1bHQgaXMgdXNlZC4KLSAgICovCi0gIHBy
aXZhdGUgU3RyaW5nIHNoYXJlZFByZWZHZXRTdHJpbmcoCi0gICAgICBpbnQgYXR0cmlidXRlSWQs
IFN0cmluZyBpbnRlbnROYW1lLCBpbnQgZGVmYXVsdElkLCBib29sZWFuIHVzZUZyb21JbnRlbnQp
IHsKLSAgICBTdHJpbmcgZGVmYXVsdFZhbHVlID0gZ2V0U3RyaW5nKGRlZmF1bHRJZCk7Ci0gICAg
aWYgKHVzZUZyb21JbnRlbnQpIHsKLSAgICAgIFN0cmluZyB2YWx1ZSA9IGdldEludGVudCgpLmdl
dFN0cmluZ0V4dHJhKGludGVudE5hbWUpOwotICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgfQotICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsK
LSAgICB9IGVsc2UgewotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBnZXRTdHJpbmcoYXR0
cmlidXRlSWQpOwotICAgICAgcmV0dXJuIHNoYXJlZFByZWYuZ2V0U3RyaW5nKGF0dHJpYnV0ZU5h
bWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIHZhbHVl
IGZyb20gdGhlIHNoYXJlZCBwcmVmZXJlbmNlIG9yIGZyb20gdGhlIGludGVudCwgaWYgaXQgZG9l
cyBub3QKLSAgICogZXhpc3QgdGhlIGRlZmF1bHQgaXMgdXNlZC4KLSAgICovCi0gIHByaXZhdGUg
Ym9vbGVhbiBzaGFyZWRQcmVmR2V0Qm9vbGVhbigKLSAgICAgIGludCBhdHRyaWJ1dGVJZCwgU3Ry
aW5nIGludGVudE5hbWUsIGludCBkZWZhdWx0SWQsIGJvb2xlYW4gdXNlRnJvbUludGVudCkgewot
ICAgIGJvb2xlYW4gZGVmYXVsdFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKGdldFN0cmluZyhkZWZh
dWx0SWQpKTsKLSAgICBpZiAodXNlRnJvbUludGVudCkgewotICAgICAgcmV0dXJuIGdldEludGVu
dCgpLmdldEJvb2xlYW5FeHRyYShpbnRlbnROYW1lLCBkZWZhdWx0VmFsdWUpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGdldFN0cmluZyhhdHRyaWJ1dGVJZCk7
Ci0gICAgICByZXR1cm4gc2hhcmVkUHJlZi5nZXRCb29sZWFuKGF0dHJpYnV0ZU5hbWUsIGRlZmF1
bHRWYWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNvbm5lY3RUb1Jvb20oU3Ry
aW5nIHJvb21JZCwgYm9vbGVhbiBjb21tYW5kTGluZVJ1biwgYm9vbGVhbiBsb29wYmFjaywKLSAg
ICAgIGJvb2xlYW4gdXNlVmFsdWVzRnJvbUludGVudCwgaW50IHJ1blRpbWVNcykgewotICAgIHRo
aXMuY29tbWFuZExpbmVSdW4gPSBjb21tYW5kTGluZVJ1bjsKLQotICAgIC8vIHJvb21JZCBpcyBy
YW5kb20gZm9yIGxvb3BiYWNrLgotICAgIGlmIChsb29wYmFjaykgewotICAgICAgcm9vbUlkID0g
SW50ZWdlci50b1N0cmluZygobmV3IFJhbmRvbSgpKS5uZXh0SW50KDEwMDAwMDAwMCkpOwotICAg
IH0KLQotICAgIFN0cmluZyByb29tVXJsID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoCi0gICAgICAg
IGtleXByZWZSb29tU2VydmVyVXJsLCBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yb29tX3NlcnZl
cl91cmxfZGVmYXVsdCkpOwotCi0gICAgLy8gVmlkZW8gY2FsbCBlbmFibGVkIGZsYWcuCi0gICAg
Ym9vbGVhbiB2aWRlb0NhbGxFbmFibGVkID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcu
cHJlZl92aWRlb2NhbGxfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FM
TCwgUi5zdHJpbmcucHJlZl92aWRlb2NhbGxfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7
Ci0KLSAgICAvLyBVc2Ugc2NyZWVuY2FwdHVyZSBvcHRpb24uCi0gICAgYm9vbGVhbiB1c2VTY3Jl
ZW5jYXB0dXJlID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9zY3JlZW5jYXB0
dXJlX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX1NDUkVFTkNBUFRVUkUsIFIuc3Ry
aW5nLnByZWZfc2NyZWVuY2FwdHVyZV9kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQot
ICAgIC8vIFVzZSBDYW1lcmEyIG9wdGlvbi4KLSAgICBib29sZWFuIHVzZUNhbWVyYTIgPSBzaGFy
ZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2NhbWVyYTJfa2V5LCBDYWxsQWN0aXZpdHku
RVhUUkFfQ0FNRVJBMiwKLSAgICAgICAgUi5zdHJpbmcucHJlZl9jYW1lcmEyX2RlZmF1bHQsIHVz
ZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gR2V0IGRlZmF1bHQgY29kZWNzLgotICAgIFN0
cmluZyB2aWRlb0NvZGVjID0gc2hhcmVkUHJlZkdldFN0cmluZyhSLnN0cmluZy5wcmVmX3ZpZGVv
Y29kZWNfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9DT0RFQywgUi5zdHJp
bmcucHJlZl92aWRlb2NvZGVjX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotICAgIFN0
cmluZyBhdWRpb0NvZGVjID0gc2hhcmVkUHJlZkdldFN0cmluZyhSLnN0cmluZy5wcmVmX2F1ZGlv
Y29kZWNfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfQVVESU9DT0RFQywgUi5zdHJp
bmcucHJlZl9hdWRpb2NvZGVjX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAg
Ly8gQ2hlY2sgSFcgY29kZWMgZmxhZy4KLSAgICBib29sZWFuIGh3Q29kZWMgPSBzaGFyZWRQcmVm
R2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2h3Y29kZWNfa2V5LAotICAgICAgICBDYWxsQWN0aXZp
dHkuRVhUUkFfSFdDT0RFQ19FTkFCTEVELCBSLnN0cmluZy5wcmVmX2h3Y29kZWNfZGVmYXVsdCwg
dXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBDYXB0dXJlIHRvIHRleHR1cmUu
Ci0gICAgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5z
dHJpbmcucHJlZl9jYXB0dXJldG90ZXh0dXJlX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVY
VFJBX0NBUFRVUkVUT1RFWFRVUkVfRU5BQkxFRCwgUi5zdHJpbmcucHJlZl9jYXB0dXJldG90ZXh0
dXJlX2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hl
Y2sgRGlzYWJsZSBBdWRpbyBQcm9jZXNzaW5nIGZsYWcuCi0gICAgYm9vbGVhbiBub0F1ZGlvUHJv
Y2Vzc2luZyA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfbm9hdWRpb3Byb2Nl
c3Npbmdfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfTk9BVURJT1BST0NFU1NJTkdf
RU5BQkxFRCwgUi5zdHJpbmcucHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19kZWZhdWx0LAotICAgICAg
ICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIERpc2FibGUgQXVkaW8gUHJv
Y2Vzc2luZyBmbGFnLgotICAgIGJvb2xlYW4gYWVjRHVtcCA9IHNoYXJlZFByZWZHZXRCb29sZWFu
KFIuc3RyaW5nLnByZWZfYWVjZHVtcF9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9B
RUNEVU1QX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfYWVjZHVtcF9kZWZhdWx0LCB1c2VWYWx1ZXNG
cm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIE9wZW5TTCBFUyBlbmFibGVkIGZsYWcuCi0gICAg
Ym9vbGVhbiB1c2VPcGVuU0xFUyA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZf
b3BlbnNsZXNfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfT1BFTlNMRVNfRU5BQkxF
RCwgUi5zdHJpbmcucHJlZl9vcGVuc2xlc19kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsK
LQotICAgIC8vIENoZWNrIERpc2FibGUgYnVpbHQtaW4gQUVDIGZsYWcuCi0gICAgYm9vbGVhbiBk
aXNhYmxlQnVpbHRJbkFFQyA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfZGlz
YWJsZV9idWlsdF9pbl9hZWNfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfRElTQUJM
RV9CVUlMVF9JTl9BRUMsIFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfZGVmYXVs
dCwKLSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxl
IGJ1aWx0LWluIEFHQyBmbGFnLgotICAgIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5BR0MgPSBzaGFy
ZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2tleSwK
LSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUdDLCBSLnN0cmlu
Zy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zy
b21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgRGlzYWJsZSBidWlsdC1pbiBOUyBmbGFnLgotICAg
IGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5OUyA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5n
LnByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRS
QV9ESVNBQkxFX0JVSUxUX0lOX05TLCBSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNf
ZGVmYXVsdCwKLSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBF
bmFibGUgbGV2ZWwgY29udHJvbC4KLSAgICBib29sZWFuIGVuYWJsZUxldmVsQ29udHJvbCA9IHNo
YXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfa2V5
LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfRU5BQkxFX0xFVkVMX0NPTlRST0wsIFIuc3Ry
aW5nLnByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfa2V5LAotICAgICAgICB1c2VWYWx1ZXNGcm9t
SW50ZW50KTsKLQotICAgIC8vIEdldCB2aWRlbyByZXNvbHV0aW9uIGZyb20gc2V0dGluZ3MuCi0g
ICAgaW50IHZpZGVvV2lkdGggPSAwOwotICAgIGludCB2aWRlb0hlaWdodCA9IDA7Ci0gICAgaWYg
KHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsKLSAgICAgIHZpZGVvV2lkdGggPSBnZXRJbnRlbnQoKS5n
ZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fV0lEVEgsIDApOwotICAgICAgdmlk
ZW9IZWlnaHQgPSBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklE
RU9fSEVJR0hULCAwKTsKLSAgICB9Ci0gICAgaWYgKHZpZGVvV2lkdGggPT0gMCAmJiB2aWRlb0hl
aWdodCA9PSAwKSB7Ci0gICAgICBTdHJpbmcgcmVzb2x1dGlvbiA9Ci0gICAgICAgICAgc2hhcmVk
UHJlZi5nZXRTdHJpbmcoa2V5cHJlZlJlc29sdXRpb24sIGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X3Jlc29sdXRpb25fZGVmYXVsdCkpOwotICAgICAgU3RyaW5nW10gZGltZW5zaW9ucyA9IHJlc29s
dXRpb24uc3BsaXQoIlsgeF0rIik7Ci0gICAgICBpZiAoZGltZW5zaW9ucy5sZW5ndGggPT0gMikg
ewotICAgICAgICB0cnkgewotICAgICAgICAgIHZpZGVvV2lkdGggPSBJbnRlZ2VyLnBhcnNlSW50
KGRpbWVuc2lvbnNbMF0pOwotICAgICAgICAgIHZpZGVvSGVpZ2h0ID0gSW50ZWdlci5wYXJzZUlu
dChkaW1lbnNpb25zWzFdKTsKLSAgICAgICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgICB2aWRlb1dpZHRoID0gMDsKLSAgICAgICAgICB2aWRlb0hlaWdodCA9
IDA7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiV3JvbmcgdmlkZW8gcmVzb2x1dGlvbiBzZXR0aW5n
OiAiICsgcmVzb2x1dGlvbik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBH
ZXQgY2FtZXJhIGZwcyBmcm9tIHNldHRpbmdzLgotICAgIGludCBjYW1lcmFGcHMgPSAwOwotICAg
IGlmICh1c2VWYWx1ZXNGcm9tSW50ZW50KSB7Ci0gICAgICBjYW1lcmFGcHMgPSBnZXRJbnRlbnQo
KS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fRlBTLCAwKTsKLSAgICB9Ci0g
ICAgaWYgKGNhbWVyYUZwcyA9PSAwKSB7Ci0gICAgICBTdHJpbmcgZnBzID0gc2hhcmVkUHJlZi5n
ZXRTdHJpbmcoa2V5cHJlZkZwcywgZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZnBzX2RlZmF1bHQp
KTsKLSAgICAgIFN0cmluZ1tdIGZwc1ZhbHVlcyA9IGZwcy5zcGxpdCgiWyB4XSsiKTsKLSAgICAg
IGlmIChmcHNWYWx1ZXMubGVuZ3RoID09IDIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBj
YW1lcmFGcHMgPSBJbnRlZ2VyLnBhcnNlSW50KGZwc1ZhbHVlc1swXSk7Ci0gICAgICAgIH0gY2F0
Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgY2FtZXJhRnBzID0gMDsK
LSAgICAgICAgICBMb2cuZShUQUcsICJXcm9uZyBjYW1lcmEgZnBzIHNldHRpbmc6ICIgKyBmcHMp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgY2FwdHVyZSBxdWFs
aXR5IHNsaWRlciBmbGFnLgotICAgIGJvb2xlYW4gY2FwdHVyZVF1YWxpdHlTbGlkZXIgPSBzaGFy
ZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX2tleSwK
LSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBUFRVUkVRVUFMSVRZU0xJREVSX0VO
QUJMRUQsCi0gICAgICAgIFIuc3RyaW5nLnByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfZGVmYXVs
dCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBHZXQgdmlkZW8gYW5kIGF1ZGlvIHN0
YXJ0IGJpdHJhdGUuCi0gICAgaW50IHZpZGVvU3RhcnRCaXRyYXRlID0gMDsKLSAgICBpZiAodXNl
VmFsdWVzRnJvbUludGVudCkgewotICAgICAgdmlkZW9TdGFydEJpdHJhdGUgPSBnZXRJbnRlbnQo
KS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQklUUkFURSwgMCk7Ci0gICAg
fQotICAgIGlmICh2aWRlb1N0YXJ0Qml0cmF0ZSA9PSAwKSB7Ci0gICAgICBTdHJpbmcgYml0cmF0
ZVR5cGVEZWZhdWx0ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRyYXRlX2Rl
ZmF1bHQpOwotICAgICAgU3RyaW5nIGJpdHJhdGVUeXBlID0gc2hhcmVkUHJlZi5nZXRTdHJpbmco
a2V5cHJlZlZpZGVvQml0cmF0ZVR5cGUsIGJpdHJhdGVUeXBlRGVmYXVsdCk7Ci0gICAgICBpZiAo
IWJpdHJhdGVUeXBlLmVxdWFscyhiaXRyYXRlVHlwZURlZmF1bHQpKSB7Ci0gICAgICAgIFN0cmlu
ZyBiaXRyYXRlVmFsdWUgPSBzaGFyZWRQcmVmLmdldFN0cmluZygKLSAgICAgICAgICAgIGtleXBy
ZWZWaWRlb0JpdHJhdGVWYWx1ZSwgZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRy
YXRldmFsdWVfZGVmYXVsdCkpOwotICAgICAgICB2aWRlb1N0YXJ0Qml0cmF0ZSA9IEludGVnZXIu
cGFyc2VJbnQoYml0cmF0ZVZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpbnQgYXVkaW9T
dGFydEJpdHJhdGUgPSAwOwotICAgIGlmICh1c2VWYWx1ZXNGcm9tSW50ZW50KSB7Ci0gICAgICBh
dWRpb1N0YXJ0Qml0cmF0ZSA9IGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5F
WFRSQV9BVURJT19CSVRSQVRFLCAwKTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvU3RhcnRCaXRyYXRl
ID09IDApIHsKLSAgICAgIFN0cmluZyBiaXRyYXRlVHlwZURlZmF1bHQgPSBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9kZWZhdWx0KTsKLSAgICAgIFN0cmluZyBiaXRy
YXRlVHlwZSA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZBdWRpb0JpdHJhdGVUeXBlLCBi
aXRyYXRlVHlwZURlZmF1bHQpOwotICAgICAgaWYgKCFiaXRyYXRlVHlwZS5lcXVhbHMoYml0cmF0
ZVR5cGVEZWZhdWx0KSkgewotICAgICAgICBTdHJpbmcgYml0cmF0ZVZhbHVlID0gc2hhcmVkUHJl
Zi5nZXRTdHJpbmcoCi0gICAgICAgICAgICBrZXlwcmVmQXVkaW9CaXRyYXRlVmFsdWUsIGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfZGVmYXVsdCkpOwotICAg
ICAgICBhdWRpb1N0YXJ0Qml0cmF0ZSA9IEludGVnZXIucGFyc2VJbnQoYml0cmF0ZVZhbHVlKTsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayBzdGF0aXN0aWNzIGRpc3BsYXkgb3B0aW9u
LgotICAgIGJvb2xlYW4gZGlzcGxheUh1ZCA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5n
LnByZWZfZGlzcGxheWh1ZF9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9ESVNQTEFZ
X0hVRCwgUi5zdHJpbmcucHJlZl9kaXNwbGF5aHVkX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRl
bnQpOwotCi0gICAgYm9vbGVhbiB0cmFjaW5nID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJp
bmcucHJlZl90cmFjaW5nX2tleSwgQ2FsbEFjdGl2aXR5LkVYVFJBX1RSQUNJTkcsCi0gICAgICAg
IFIuc3RyaW5nLnByZWZfdHJhY2luZ19kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQot
ICAgIC8vIFN0YXJ0IEFwcFJUQ01vYmlsZSBhY3Rpdml0eS4KLSAgICBMb2cuZChUQUcsICJDb25u
ZWN0aW5nIHRvIHJvb20gIiArIHJvb21JZCArICIgYXQgVVJMICIgKyByb29tVXJsKTsKLSAgICBp
ZiAodmFsaWRhdGVVcmwocm9vbVVybCkpIHsKLSAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2Uocm9v
bVVybCk7Ci0gICAgICBJbnRlbnQgaW50ZW50ID0gbmV3IEludGVudCh0aGlzLCBDYWxsQWN0aXZp
dHkuY2xhc3MpOwotICAgICAgaW50ZW50LnNldERhdGEodXJpKTsKLSAgICAgIGludGVudC5wdXRF
eHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfUk9PTUlELCByb29tSWQpOwotICAgICAgaW50ZW50LnB1
dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9MT09QQkFDSywgbG9vcGJhY2spOwotICAgICAgaW50
ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQUxMLCB2aWRlb0NhbGxFbmFi
bGVkKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0NSRUVOQ0FQ
VFVSRSwgdXNlU2NyZWVuY2FwdHVyZSk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2
aXR5LkVYVFJBX0NBTUVSQTIsIHVzZUNhbWVyYTIpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENh
bGxBY3Rpdml0eS5FWFRSQV9WSURFT19XSURUSCwgdmlkZW9XaWR0aCk7Ci0gICAgICBpbnRlbnQu
cHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0hFSUdIVCwgdmlkZW9IZWlnaHQpOwot
ICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19GUFMsIGNhbWVy
YUZwcyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NB
UFRVUkVRVUFMSVRZU0xJREVSX0VOQUJMRUQsIGNhcHR1cmVRdWFsaXR5U2xpZGVyKTsKLSAgICAg
IGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQklUUkFURSwgdmlkZW9T
dGFydEJpdHJhdGUpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9W
SURFT0NPREVDLCB2aWRlb0NvZGVjKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZp
dHkuRVhUUkFfSFdDT0RFQ19FTkFCTEVELCBod0NvZGVjKTsKLSAgICAgIGludGVudC5wdXRFeHRy
YShDYWxsQWN0aXZpdHkuRVhUUkFfQ0FQVFVSRVRPVEVYVFVSRV9FTkFCTEVELCBjYXB0dXJlVG9U
ZXh0dXJlKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfTk9BVURJ
T1BST0NFU1NJTkdfRU5BQkxFRCwgbm9BdWRpb1Byb2Nlc3NpbmcpOwotICAgICAgaW50ZW50LnB1
dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9BRUNEVU1QX0VOQUJMRUQsIGFlY0R1bXApOwotICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9PUEVOU0xFU19FTkFCTEVELCB1
c2VPcGVuU0xFUyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJ
U0FCTEVfQlVJTFRfSU5fQUVDLCBkaXNhYmxlQnVpbHRJbkFFQyk7Ci0gICAgICBpbnRlbnQucHV0
RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUdDLCBkaXNhYmxlQnVp
bHRJbkFHQyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FC
TEVfQlVJTFRfSU5fTlMsIGRpc2FibGVCdWlsdEluTlMpOwotICAgICAgaW50ZW50LnB1dEV4dHJh
KENhbGxBY3Rpdml0eS5FWFRSQV9FTkFCTEVfTEVWRUxfQ09OVFJPTCwgZW5hYmxlTGV2ZWxDb250
cm9sKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfQVVESU9fQklU
UkFURSwgYXVkaW9TdGFydEJpdHJhdGUpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9BVURJT0NPREVDLCBhdWRpb0NvZGVjKTsKLSAgICAgIGludGVudC5wdXRFeHRy
YShDYWxsQWN0aXZpdHkuRVhUUkFfRElTUExBWV9IVUQsIGRpc3BsYXlIdWQpOwotICAgICAgaW50
ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9UUkFDSU5HLCB0cmFjaW5nKTsKLSAgICAg
IGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfQ01ETElORSwgY29tbWFuZExpbmVS
dW4pOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9SVU5USU1FLCBy
dW5UaW1lTXMpOwotCi0gICAgICBpZiAodXNlVmFsdWVzRnJvbUludGVudCkgewotICAgICAgICBp
ZiAoZ2V0SW50ZW50KCkuaGFzRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0ZJTEVfQVNf
Q0FNRVJBKSkgewotICAgICAgICAgIFN0cmluZyB2aWRlb0ZpbGVBc0NhbWVyYSA9Ci0gICAgICAg
ICAgICAgIGdldEludGVudCgpLmdldFN0cmluZ0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURF
T19GSUxFX0FTX0NBTUVSQSk7Ci0gICAgICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0
eS5FWFRSQV9WSURFT19GSUxFX0FTX0NBTUVSQSwgdmlkZW9GaWxlQXNDYW1lcmEpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKGdldEludGVudCgpLmhhc0V4dHJhKENhbGxBY3Rpdml0eS5FWFRS
QV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFKSkgewotICAgICAgICAgIFN0cmluZyBzYXZlUmVt
b3RlVmlkZW9Ub0ZpbGUgPQotICAgICAgICAgICAgICBnZXRJbnRlbnQoKS5nZXRTdHJpbmdFeHRy
YShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRSk7Ci0gICAgICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19U
T19GSUxFLCBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYg
KGdldEludGVudCgpLmhhc0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURF
T19UT19GSUxFX1dJRFRIKSkgewotICAgICAgICAgIGludCB2aWRlb091dFdpZHRoID0KLSAgICAg
ICAgICAgICAgZ2V0SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVf
UkVNT1RFX1ZJREVPX1RPX0ZJTEVfV0lEVEgsIDApOwotICAgICAgICAgIGludGVudC5wdXRFeHRy
YShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9XSURUSCwgdmlk
ZW9PdXRXaWR0aCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ2V0SW50ZW50KCkuaGFzRXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hUKSkg
ewotICAgICAgICAgIGludCB2aWRlb091dEhlaWdodCA9Ci0gICAgICAgICAgICAgIGdldEludGVu
dCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19G
SUxFX0hFSUdIVCwgMCk7Ci0gICAgICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5F
WFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hFSUdIVCwgdmlkZW9PdXRIZWlnaHQpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50
LCBDT05ORUNUSU9OX1JFUVVFU1QpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB2
YWxpZGF0ZVVybChTdHJpbmcgdXJsKSB7Ci0gICAgaWYgKFVSTFV0aWwuaXNIdHRwc1VybCh1cmwp
IHx8IFVSTFV0aWwuaXNIdHRwVXJsKHVybCkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LQotICAgIG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKHRoaXMpCi0gICAgICAgIC5zZXRUaXRsZShn
ZXRUZXh0KFIuc3RyaW5nLmludmFsaWRfdXJsX3RpdGxlKSkKLSAgICAgICAgLnNldE1lc3NhZ2Uo
Z2V0U3RyaW5nKFIuc3RyaW5nLmludmFsaWRfdXJsX3RleHQsIHVybCkpCi0gICAgICAgIC5zZXRD
YW5jZWxhYmxlKGZhbHNlKQotICAgICAgICAuc2V0TmV1dHJhbEJ1dHRvbihSLnN0cmluZy5vaywK
LSAgICAgICAgICAgIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkgewotICAg
ICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGlu
dCBpZCkgewotICAgICAgICAgICAgICAgIGRpYWxvZy5jYW5jZWwoKTsKLSAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSkKLSAgICAgICAgLmNyZWF0ZSgpCi0gICAgICAgIC5zaG93KCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBBZGFwdGVyVmlldy5Pbkl0
ZW1DbGlja0xpc3RlbmVyIHJvb21MaXN0Q2xpY2tMaXN0ZW5lciA9Ci0gICAgICBuZXcgQWRhcHRl
clZpZXcuT25JdGVtQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAg
IHB1YmxpYyB2b2lkIG9uSXRlbUNsaWNrKEFkYXB0ZXJWaWV3PD8+IGFkYXB0ZXJWaWV3LCBWaWV3
IHZpZXcsIGludCBpLCBsb25nIGwpIHsKLSAgICAgICAgICBTdHJpbmcgcm9vbUlkID0gKChUZXh0
VmlldykgdmlldykuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgY29ubmVjdFRvUm9v
bShyb29tSWQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDApOwotICAgICAgICB9Ci0gICAgICB9Owot
Ci0gIHByaXZhdGUgZmluYWwgT25DbGlja0xpc3RlbmVyIGFkZEZhdm9yaXRlTGlzdGVuZXIgPSBu
ZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
Q2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICBTdHJpbmcgbmV3Um9vbSA9IHJvb21FZGl0VGV4dC5n
ZXRUZXh0KCkudG9TdHJpbmcoKTsKLSAgICAgIGlmIChuZXdSb29tLmxlbmd0aCgpID4gMCAmJiAh
cm9vbUxpc3QuY29udGFpbnMobmV3Um9vbSkpIHsKLSAgICAgICAgYWRhcHRlci5hZGQobmV3Um9v
bSk7Ci0gICAgICAgIGFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgIH0KLSAg
ICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBPbkNsaWNrTGlzdGVuZXIgY29ubmVjdExpc3Rl
bmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgY29ubmVjdFRvUm9vbShyb29tRWRpdFRl
eHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCksIGZhbHNlLCBmYWxzZSwgZmFsc2UsIDApOwotICAgIH0K
LSAgfTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DcHVNb25pdG9yLmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NwdU1vbml0b3Iu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Nw
dU1vbml0b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDUxMCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
Y29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlN
YW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3lzdGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC51
dGlsLkxvZzsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5p
by5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1w
b3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9y
dCBqYXZhLnV0aWwuU2Nhbm5lcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRv
cnM7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNl
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi0vKioKLSAqIFNpbXBs
ZSBDUFUgbW9uaXRvci4gIFRoZSBjYWxsZXIgY3JlYXRlcyBhIENwdU1vbml0b3Igb2JqZWN0IHdo
aWNoIGNhbiB0aGVuCi0gKiBiZSB1c2VkIHZpYSBzYW1wbGVDcHVVdGlsaXphdGlvbigpIHRvIGNv
bGxlY3QgdGhlIHBlcmNlbnR1YWwgdXNlIG9mIHRoZQotICogY3VtdWxhdGl2ZSBDUFUgY2FwYWNp
dHkgZm9yIGFsbCBDUFVzIHJ1bm5pbmcgYXQgdGhlaXIgbm9taW5hbCBmcmVxdWVuY3kuICAzCi0g
KiB2YWx1ZXMgYXJlIGdlbmVyYXRlZDogKDEpIGdldENwdUN1cnJlbnQoKSByZXR1cm5zIHRoZSB1
c2Ugc2luY2UgdGhlIGxhc3QKLSAqIHNhbXBsZUNwdVV0aWxpemF0aW9uKCksICgyKSBnZXRDcHVB
dmczKCkgcmV0dXJucyB0aGUgdXNlIHNpbmNlIDMgcHJpb3IKLSAqIGNhbGxzLCBhbmQgKDMpIGdl
dENwdUF2Z0FsbCgpIHJldHVybnMgdGhlIHVzZSBvdmVyIGFsbCBTQU1QTEVfU0FWRV9OVU1CRVIK
LSAqIGNhbGxzLgotICoKLSAqIDxwPkNQVXMgaW4gQW5kcm9pZCBhcmUgb2Z0ZW4gIm9mZmxpbmUi
LCBhbmQgd2hpbGUgdGhpcyBvZiBjb3Vyc2UgbWVhbnMgMCBIegotICogYXMgY3VycmVudCBmcmVx
dWVuY3ksIGluIHRoaXMgc3RhdGUgd2UgY2Fubm90IGV2ZW4gZ2V0IHRoZWlyIG5vbWluYWwKLSAq
IGZyZXF1ZW5jeS4gIFdlIHRoZXJlZm9yZSB0cmVhZCBjYXJlZnVsbHksIGFuZCBhbGxvdyBhbnkg
Q1BVIHRvIGJlIG1pc3NpbmcuCi0gKiBNaXNzaW5nIENQVXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSB0
aGUgc2FtZSBub21pbmFsIGZyZXF1ZW5jeSBhcyBhbnkgY2xvc2UKLSAqIGxvd2VyLW51bWJlcmVk
IENQVSwgYnV0IGFzIHNvb24gYXMgaXQgaXMgb25saW5lLCB3ZSdsbCBnZXQgdGhlaXIgcHJvcGVy
Ci0gKiBmcmVxdWVuY3kgYW5kIHJlbWVtYmVyIGl0LiAgKFNpbmNlIENQVSAwIGluIHByYWN0aWNl
IGFsd2F5cyBzZWVtIHRvIGJlCi0gKiBvbmxpbmUsIHRoaXMgdW5pZGlyZWN0aW9uYWwgZnJlcXVl
bmN5IGluaGVyaXRhbmNlIHNob3VsZCBiZSBubyBwcm9ibGVtIGluCi0gKiBwcmFjdGljZS4pCi0g
KgotICogPHA+Q2F2ZWF0czoKLSAqICAgbyBObyBwcm92aXNpb24gbWFkZSBmb3IgemFueSAidHVy
Ym8iIG1vZGUsIGNvbW1vbiBpbiB0aGUgeDg2IHdvcmxkLgotICogICBvIE5vIHByb3Zpc2lvbiBt
YWRlIGZvciBBUk0gYmlnLkxJVFRMRTsgaWYgQ1BVIG4gY2FuIHN3aXRjaCBiZWhpbmQgb3VyCi0g
KiAgICAgYmFjaywgd2UgbWlnaHQgZ2V0IGluY29ycmVjdCBlc3RpbWF0ZXMuCi0gKiAgIG8gVGhp
cyBpcyBub3QgdGhyZWFkLXNhZmUuICBUbyBjYWxsIGFzeW5jaHJvbm91c2x5LCBjcmVhdGUgZGlm
ZmVyZW50Ci0gKiAgICAgQ3B1TW9uaXRvciBvYmplY3RzLgotICoKLSAqIDxwPklmIHdlIGNhbiBn
YXRoZXIgZW5vdWdoIGluZm8gdG8gZ2VuZXJhdGUgYSBzZW5zaWJsZSByZXN1bHQsCi0gKiBzYW1w
bGVDcHVVdGlsaXphdGlvbiByZXR1cm5zIHRydWUuICBJdCBpcyBkZXNpZ25lZCB0byBuZXZlciB0
aHJvdyBhbgotICogZXhjZXB0aW9uLgotICoKLSAqIDxwPnNhbXBsZUNwdVV0aWxpemF0aW9uIHNo
b3VsZCBub3QgYmUgY2FsbGVkIHRvbyBvZnRlbiBpbiBpdHMgcHJlc2VudCBmb3JtLAotICogc2lu
Y2UgdGhlbiBkZWx0YXMgd291bGQgYmUgc21hbGwgYW5kIHRoZSBwZXJjZW50IHZhbHVlcyB3b3Vs
ZCBmbHVjdHVhdGUgYW5kCi0gKiBiZSB1bnJlYWRhYmxlLiBJZiBpdCBpcyBkZXNpcmFibGUgdG8g
Y2FsbCBpdCBtb3JlIG9mdGVuIHRoYW4gc2F5IG9uY2UgcGVyCi0gKiBzZWNvbmQsIG9uZSB3b3Vs
ZCBuZWVkIHRvIGluY3JlYXNlIFNBTVBMRV9TQVZFX05VTUJFUiBhbmQgcHJvYmFibHkgdXNlCi0g
KiBRdWV1ZTxJbnRlZ2VyPiB0byBhdm9pZCBjb3B5aW5nIG92ZXJoZWFkLgotICoKLSAqIDxwPktu
b3duIHByb2JsZW1zOgotICogICAxLiBOZXh1cyA3IGRldmljZXMgcnVubmluZyBLaXRrYXQgaGF2
ZSBhIGtlcm5lbCB3aGljaCBvZnRlbiBvdXRwdXQgYW4KLSAqICAgICAgaW5jb3JyZWN0ICdpZGxl
JyBmaWVsZCBpbiAvcHJvYy9zdGF0LiAgVGhlIHZhbHVlIGlzIGNsb3NlIHRvIHR3aWNlIHRoZQot
ICogICAgICBjb3JyZWN0IHZhbHVlLCBhbmQgdGhlbiByZXR1cm5zIHRvIGJhY2sgdG8gY29ycmVj
dCByZWFkaW5nLiAgQm90aCB3aGVuCi0gKiAgICAgIGp1bXBpbmcgdXAgYW5kIGJhY2sgZG93biB3
ZSBtaWdodCBjcmVhdGUgZmF1bHR5IENQVSBsb2FkIHJlYWRpbmdzLgotICovCi0KLWNsYXNzIENw
dU1vbml0b3IgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNwdU1vbml0
b3IiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTU9WSU5HX0FWRVJBR0VfU0FNUExFUyA9
IDU7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENQVV9TVEFUX1NBTVBMRV9QRVJJT0Rf
TVMgPSAyMDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ1BVX1NUQVRfTE9HX1BFUklP
RF9NUyA9IDYwMDA7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcENvbnRleHQ7Ci0gIC8v
IFVzZXIgQ1BVIHVzYWdlIGF0IGN1cnJlbnQgZnJlcXVlbmN5LgotICBwcml2YXRlIGZpbmFsIE1v
dmluZ0F2ZXJhZ2UgdXNlckNwdVVzYWdlOwotICAvLyBTeXN0ZW0gQ1BVIHVzYWdlIGF0IGN1cnJl
bnQgZnJlcXVlbmN5LgotICBwcml2YXRlIGZpbmFsIE1vdmluZ0F2ZXJhZ2Ugc3lzdGVtQ3B1VXNh
Z2U7Ci0gIC8vIFRvdGFsIENQVSB1c2FnZSByZWxhdGl2ZSB0byBtYXhpbXVtIGZyZXF1ZW5jeS4K
LSAgcHJpdmF0ZSBmaW5hbCBNb3ZpbmdBdmVyYWdlIHRvdGFsQ3B1VXNhZ2U7Ci0gIC8vIENQVSBm
cmVxdWVuY3kgaW4gcGVyY2VudGFnZSBmcm9tIG1heGltdW0uCi0gIHByaXZhdGUgZmluYWwgTW92
aW5nQXZlcmFnZSBmcmVxdWVuY3lTY2FsZTsKLQotICBwcml2YXRlIFNjaGVkdWxlZEV4ZWN1dG9y
U2VydmljZSBleGVjdXRvcjsKLSAgcHJpdmF0ZSBsb25nIGxhc3RTdGF0TG9nVGltZU1zOwotICBw
cml2YXRlIGxvbmdbXSBjcHVGcmVxTWF4OwotICBwcml2YXRlIGludCBjcHVzUHJlc2VudDsKLSAg
cHJpdmF0ZSBpbnQgYWN0dWFsQ3B1c1ByZXNlbnQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbml0aWFs
aXplZDsKLSAgcHJpdmF0ZSBib29sZWFuIGNwdU92ZXJ1c2U7Ci0gIHByaXZhdGUgU3RyaW5nW10g
bWF4UGF0aDsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBjdXJQYXRoOwotICBwcml2YXRlIGRvdWJsZVtd
IGN1ckZyZXFTY2FsZXM7Ci0gIHByaXZhdGUgUHJvY1N0YXQgbGFzdFByb2NTdGF0OwotCi0gIHBy
aXZhdGUgc3RhdGljIGNsYXNzIFByb2NTdGF0IHsKLSAgICBmaW5hbCBsb25nIHVzZXJUaW1lOwot
ICAgIGZpbmFsIGxvbmcgc3lzdGVtVGltZTsKLSAgICBmaW5hbCBsb25nIGlkbGVUaW1lOwotCi0g
ICAgUHJvY1N0YXQobG9uZyB1c2VyVGltZSwgbG9uZyBzeXN0ZW1UaW1lLCBsb25nIGlkbGVUaW1l
KSB7Ci0gICAgICB0aGlzLnVzZXJUaW1lID0gdXNlclRpbWU7Ci0gICAgICB0aGlzLnN5c3RlbVRp
bWUgPSBzeXN0ZW1UaW1lOwotICAgICAgdGhpcy5pZGxlVGltZSA9IGlkbGVUaW1lOwotICAgIH0K
LSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vdmluZ0F2ZXJhZ2UgewotICAgIHByaXZh
dGUgZmluYWwgaW50IHNpemU7Ci0gICAgcHJpdmF0ZSBkb3VibGUgc3VtOwotICAgIHByaXZhdGUg
ZG91YmxlIGN1cnJlbnRWYWx1ZTsKLSAgICBwcml2YXRlIGRvdWJsZSBjaXJjQnVmZmVyW107Ci0g
ICAgcHJpdmF0ZSBpbnQgY2lyY0J1ZmZlckluZGV4OwotCi0gICAgcHVibGljIE1vdmluZ0F2ZXJh
Z2UoaW50IHNpemUpIHsKLSAgICAgIGlmIChzaXplIDw9IDApIHsKLSAgICAgICAgdGhyb3cgbmV3
IEFzc2VydGlvbkVycm9yKCJTaXplIHZhbHVlIGluIE1vdmluZ0F2ZXJhZ2UgY3RvciBzaG91bGQg
YmUgcG9zaXRpdmUuIik7Ci0gICAgICB9Ci0gICAgICB0aGlzLnNpemUgPSBzaXplOwotICAgICAg
Y2lyY0J1ZmZlciA9IG5ldyBkb3VibGVbc2l6ZV07Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQg
cmVzZXQoKSB7Ci0gICAgICBBcnJheXMuZmlsbChjaXJjQnVmZmVyLCAwKTsKLSAgICAgIGNpcmNC
dWZmZXJJbmRleCA9IDA7Ci0gICAgICBzdW0gPSAwOwotICAgICAgY3VycmVudFZhbHVlID0gMDsK
LSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRWYWx1ZShkb3VibGUgdmFsdWUpIHsKLSAgICAg
IHN1bSAtPSBjaXJjQnVmZmVyW2NpcmNCdWZmZXJJbmRleF07Ci0gICAgICBjaXJjQnVmZmVyW2Np
cmNCdWZmZXJJbmRleCsrXSA9IHZhbHVlOwotICAgICAgY3VycmVudFZhbHVlID0gdmFsdWU7Ci0g
ICAgICBzdW0gKz0gdmFsdWU7Ci0gICAgICBpZiAoY2lyY0J1ZmZlckluZGV4ID49IHNpemUpIHsK
LSAgICAgICAgY2lyY0J1ZmZlckluZGV4ID0gMDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJs
aWMgZG91YmxlIGdldEN1cnJlbnQoKSB7Ci0gICAgICByZXR1cm4gY3VycmVudFZhbHVlOwotICAg
IH0KLQotICAgIHB1YmxpYyBkb3VibGUgZ2V0QXZlcmFnZSgpIHsKLSAgICAgIHJldHVybiBzdW0g
LyAoZG91YmxlKSBzaXplOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBDcHVNb25pdG9yKENvbnRl
eHQgY29udGV4dCkgewotICAgIExvZy5kKFRBRywgIkNwdU1vbml0b3IgY3Rvci4iKTsKLSAgICBh
cHBDb250ZXh0ID0gY29udGV4dC5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKTsKLSAgICB1c2VyQ3B1
VXNhZ2UgPSBuZXcgTW92aW5nQXZlcmFnZShNT1ZJTkdfQVZFUkFHRV9TQU1QTEVTKTsKLSAgICBz
eXN0ZW1DcHVVc2FnZSA9IG5ldyBNb3ZpbmdBdmVyYWdlKE1PVklOR19BVkVSQUdFX1NBTVBMRVMp
OwotICAgIHRvdGFsQ3B1VXNhZ2UgPSBuZXcgTW92aW5nQXZlcmFnZShNT1ZJTkdfQVZFUkFHRV9T
QU1QTEVTKTsKLSAgICBmcmVxdWVuY3lTY2FsZSA9IG5ldyBNb3ZpbmdBdmVyYWdlKE1PVklOR19B
VkVSQUdFX1NBTVBMRVMpOwotICAgIGxhc3RTdGF0TG9nVGltZU1zID0gU3lzdGVtQ2xvY2suZWxh
cHNlZFJlYWx0aW1lKCk7Ci0KLSAgICBzY2hlZHVsZUNwdVV0aWxpemF0aW9uVGFzaygpOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgcGF1c2UoKSB7Ci0gICAgaWYgKGV4ZWN1dG9yICE9IG51bGwpIHsK
LSAgICAgIExvZy5kKFRBRywgInBhdXNlIik7Ci0gICAgICBleGVjdXRvci5zaHV0ZG93bk5vdygp
OwotICAgICAgZXhlY3V0b3IgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJl
c3VtZSgpIHsKLSAgICBMb2cuZChUQUcsICJyZXN1bWUiKTsKLSAgICByZXNldFN0YXQoKTsKLSAg
ICBzY2hlZHVsZUNwdVV0aWxpemF0aW9uVGFzaygpOwotICB9Ci0KLSAgcHVibGljIHN5bmNocm9u
aXplZCB2b2lkIHJlc2V0KCkgewotICAgIGlmIChleGVjdXRvciAhPSBudWxsKSB7Ci0gICAgICBM
b2cuZChUQUcsICJyZXNldCIpOwotICAgICAgcmVzZXRTdGF0KCk7Ci0gICAgICBjcHVPdmVydXNl
ID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgZ2V0Q3B1
VXNhZ2VDdXJyZW50KCkgewotICAgIHJldHVybiBkb3VibGVUb1BlcmNlbnQodXNlckNwdVVzYWdl
LmdldEN1cnJlbnQoKSArIHN5c3RlbUNwdVVzYWdlLmdldEN1cnJlbnQoKSk7Ci0gIH0KLQotICBw
dWJsaWMgc3luY2hyb25pemVkIGludCBnZXRDcHVVc2FnZUF2ZXJhZ2UoKSB7Ci0gICAgcmV0dXJu
IGRvdWJsZVRvUGVyY2VudCh1c2VyQ3B1VXNhZ2UuZ2V0QXZlcmFnZSgpICsgc3lzdGVtQ3B1VXNh
Z2UuZ2V0QXZlcmFnZSgpKTsKLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50IGdldEZy
ZXF1ZW5jeVNjYWxlQXZlcmFnZSgpIHsKLSAgICByZXR1cm4gZG91YmxlVG9QZXJjZW50KGZyZXF1
ZW5jeVNjYWxlLmdldEF2ZXJhZ2UoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2NoZWR1bGVD
cHVVdGlsaXphdGlvblRhc2soKSB7Ci0gICAgaWYgKGV4ZWN1dG9yICE9IG51bGwpIHsKLSAgICAg
IGV4ZWN1dG9yLnNodXRkb3duTm93KCk7Ci0gICAgICBleGVjdXRvciA9IG51bGw7Ci0gICAgfQot
Ci0gICAgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkU2NoZWR1bGVkRXhlY3V0
b3IoKTsKLSAgICBleGVjdXRvci5zY2hlZHVsZUF0Rml4ZWRSYXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjcHVV
dGlsaXphdGlvblRhc2soKTsKLSAgICAgIH0KLSAgICB9LCAwLCBDUFVfU1RBVF9TQU1QTEVfUEVS
SU9EX01TLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNw
dVV0aWxpemF0aW9uVGFzaygpIHsKLSAgICBib29sZWFuIGNwdU1vbml0b3JBdmFpbGFibGUgPSBz
YW1wbGVDcHVVdGlsaXphdGlvbigpOwotICAgIGlmIChjcHVNb25pdG9yQXZhaWxhYmxlCi0gICAg
ICAgICYmIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpIC0gbGFzdFN0YXRMb2dUaW1lTXMg
Pj0gQ1BVX1NUQVRfTE9HX1BFUklPRF9NUykgewotICAgICAgbGFzdFN0YXRMb2dUaW1lTXMgPSBT
eXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsKLSAgICAgIFN0cmluZyBzdGF0U3RyaW5nID0g
Z2V0U3RhdFN0cmluZygpOwotICAgICAgTG9nLmQoVEFHLCBzdGF0U3RyaW5nKTsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKLSAgICB0cnkgewotICAgICAgRmlsZVJlYWRl
ciBmaW4gPSBuZXcgRmlsZVJlYWRlcigiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvcHJlc2VudCIp
OwotICAgICAgdHJ5IHsKLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZl
cmVkUmVhZGVyKGZpbik7Ci0gICAgICAgIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKHJl
YWRlcikudXNlRGVsaW1pdGVyKCJbLVxuXSIpOwotICAgICAgICBzY2FubmVyLm5leHRJbnQoKTsg
Ly8gU2tpcCBsZWFkaW5nIG51bWJlciAwLgotICAgICAgICBjcHVzUHJlc2VudCA9IDEgKyBzY2Fu
bmVyLm5leHRJbnQoKTsKLSAgICAgICAgc2Nhbm5lci5jbG9zZSgpOwotICAgICAgfSBjYXRjaCAo
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUoVEFHLCAiQ2Fubm90IGRvIENQVSBzdGF0cyBk
dWUgdG8gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvcHJlc2VudCBwYXJzaW5nIHByb2JsZW0iKTsK
LSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIGZpbi5jbG9zZSgpOwotICAgICAgfQotICAgIH0g
Y2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2cuZShUQUcsICJDYW5u
b3QgZG8gQ1BVIHN0YXRzIHNpbmNlIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQgaXMg
bWlzc2luZyIpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZy5lKFRB
RywgIkVycm9yIGNsb3NpbmcgZmlsZSIpOwotICAgIH0KLQotICAgIGNwdUZyZXFNYXggPSBuZXcg
bG9uZ1tjcHVzUHJlc2VudF07Ci0gICAgbWF4UGF0aCA9IG5ldyBTdHJpbmdbY3B1c1ByZXNlbnRd
OwotICAgIGN1clBhdGggPSBuZXcgU3RyaW5nW2NwdXNQcmVzZW50XTsKLSAgICBjdXJGcmVxU2Nh
bGVzID0gbmV3IGRvdWJsZVtjcHVzUHJlc2VudF07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
cHVzUHJlc2VudDsgaSsrKSB7Ci0gICAgICBjcHVGcmVxTWF4W2ldID0gMDsgLy8gRnJlcXVlbmN5
ICJub3QgeWV0IGRldGVybWluZWQiLgotICAgICAgY3VyRnJlcVNjYWxlc1tpXSA9IDA7Ci0gICAg
ICBtYXhQYXRoW2ldID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSIgKyBpICsgIi9jcHVm
cmVxL2NwdWluZm9fbWF4X2ZyZXEiOwotICAgICAgY3VyUGF0aFtpXSA9ICIvc3lzL2RldmljZXMv
c3lzdGVtL2NwdS9jcHUiICsgaSArICIvY3B1ZnJlcS9zY2FsaW5nX2N1cl9mcmVxIjsKLSAgICB9
Ci0KLSAgICBsYXN0UHJvY1N0YXQgPSBuZXcgUHJvY1N0YXQoMCwgMCwgMCk7Ci0gICAgcmVzZXRT
dGF0KCk7Ci0KLSAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gIH0KLQotICBwcml2YXRlIHN5bmNo
cm9uaXplZCB2b2lkIHJlc2V0U3RhdCgpIHsKLSAgICB1c2VyQ3B1VXNhZ2UucmVzZXQoKTsKLSAg
ICBzeXN0ZW1DcHVVc2FnZS5yZXNldCgpOwotICAgIHRvdGFsQ3B1VXNhZ2UucmVzZXQoKTsKLSAg
ICBmcmVxdWVuY3lTY2FsZS5yZXNldCgpOwotICAgIGxhc3RTdGF0TG9nVGltZU1zID0gU3lzdGVt
Q2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gIH0KLQotICBwcml2YXRlIGludCBnZXRCYXR0ZXJ5
TGV2ZWwoKSB7Ci0gICAgLy8gVXNlIHN0aWNreSBicm9hZGNhc3Qgd2l0aCBudWxsIHJlY2VpdmVy
IHRvIHJlYWQgYmF0dGVyeSBsZXZlbCBvbmNlIG9ubHkuCi0gICAgSW50ZW50IGludGVudCA9IGFw
cENvbnRleHQucmVnaXN0ZXJSZWNlaXZlcigKLSAgICAgICAgbnVsbCAvKiByZWNlaXZlciAqLywg
bmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX0JBVFRFUllfQ0hBTkdFRCkpOwotCi0gICAg
aW50IGJhdHRlcnlMZXZlbCA9IDA7Ci0gICAgaW50IGJhdHRlcnlTY2FsZSA9IGludGVudC5nZXRJ
bnRFeHRyYShCYXR0ZXJ5TWFuYWdlci5FWFRSQV9TQ0FMRSwgMTAwKTsKLSAgICBpZiAoYmF0dGVy
eVNjYWxlID4gMCkgewotICAgICAgYmF0dGVyeUxldmVsID0KLSAgICAgICAgICAoaW50KSAoMTAw
ZiAqIGludGVudC5nZXRJbnRFeHRyYShCYXR0ZXJ5TWFuYWdlci5FWFRSQV9MRVZFTCwgMCkgLyBi
YXR0ZXJ5U2NhbGUpOwotICAgIH0KLSAgICByZXR1cm4gYmF0dGVyeUxldmVsOwotICB9Ci0KLSAg
LyoqCi0gICAqIFJlLW1lYXN1cmUgQ1BVIHVzZS4gIENhbGwgdGhpcyBtZXRob2QgYXQgYW4gaW50
ZXJ2YWwgb2YgYXJvdW5kIDEvcy4KLSAgICogVGhpcyBtZXRob2QgcmV0dXJucyB0cnVlIG9uIHN1
Y2Nlc3MuICBUaGUgZmllbGRzCi0gICAqIGNwdUN1cnJlbnQsIGNwdUF2ZzMsIGFuZCBjcHVBdmdB
bGwgYXJlIHVwZGF0ZWQgb24gc3VjY2VzcywgYW5kIHJlcHJlc2VudHM6Ci0gICAqIGNwdUN1cnJl
bnQ6IFRoZSBDUFUgdXNlIHNpbmNlIHRoZSBsYXN0IHNhbXBsZUNwdVV0aWxpemF0aW9uIGNhbGwu
Ci0gICAqIGNwdUF2ZzM6IFRoZSBhdmVyYWdlIENQVSBvdmVyIHRoZSBsYXN0IDMgY2FsbHMuCi0g
ICAqIGNwdUF2Z0FsbDogVGhlIGF2ZXJhZ2UgQ1BVIG92ZXIgdGhlIGxhc3QgU0FNUExFX1NBVkVf
TlVNQkVSIGNhbGxzLgotICAgKi8KLSAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgYm9vbGVhbiBzYW1w
bGVDcHVVdGlsaXphdGlvbigpIHsKLSAgICBsb25nIGxhc3RTZWVuTWF4RnJlcSA9IDA7Ci0gICAg
bG9uZyBjcHVGcmVxQ3VyU3VtID0gMDsKLSAgICBsb25nIGNwdUZyZXFNYXhTdW0gPSAwOwotCi0g
ICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgaW5pdCgpOwotICAgIH0KLSAgICBpZiAoY3B1
c1ByZXNlbnQgPT0gMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGFjdHVh
bENwdXNQcmVzZW50ID0gMDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNwdXNQcmVzZW50OyBp
KyspIHsKLSAgICAgIC8qCi0gICAgICAgKiBGb3IgZWFjaCBDUFUsIGF0dGVtcHQgdG8gZmlyc3Qg
cmVhZCBpdHMgbWF4IGZyZXF1ZW5jeSwgdGhlbiBpdHMKLSAgICAgICAqIGN1cnJlbnQgZnJlcXVl
bmN5LiAgT25jZSBhcyB0aGUgbWF4IGZyZXF1ZW5jeSBmb3IgYSBDUFUgaXMgZm91bmQsCi0gICAg
ICAgKiBzYXZlIGl0IGluIGNwdUZyZXFNYXhbXS4KLSAgICAgICAqLwotCi0gICAgICBjdXJGcmVx
U2NhbGVzW2ldID0gMDsKLSAgICAgIGlmIChjcHVGcmVxTWF4W2ldID09IDApIHsKLSAgICAgICAg
Ly8gV2UgaGF2ZSBuZXZlciBmb3VuZCB0aGlzIENQVSdzIG1heCBmcmVxdWVuY3kuICBBdHRlbXB0
IHRvIHJlYWQgaXQuCi0gICAgICAgIGxvbmcgY3B1ZnJlcU1heCA9IHJlYWRGcmVxRnJvbUZpbGUo
bWF4UGF0aFtpXSk7Ci0gICAgICAgIGlmIChjcHVmcmVxTWF4ID4gMCkgewotICAgICAgICAgIExv
Zy5kKFRBRywgIkNvcmUgIiArIGkgKyAiLiBNYXggZnJlcXVlbmN5OiAiICsgY3B1ZnJlcU1heCk7
Ci0gICAgICAgICAgbGFzdFNlZW5NYXhGcmVxID0gY3B1ZnJlcU1heDsKLSAgICAgICAgICBjcHVG
cmVxTWF4W2ldID0gY3B1ZnJlcU1heDsKLSAgICAgICAgICBtYXhQYXRoW2ldID0gbnVsbDsgLy8g
S2lsbCBwYXRoIHRvIGZyZWUgaXRzIG1lbW9yeS4KLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgbGFzdFNlZW5NYXhGcmVxID0gY3B1RnJlcU1heFtpXTsgLy8gQSB2YWxpZCwgcHJl
dmlvdXNseSByZWFkIHZhbHVlLgotICAgICAgfQotCi0gICAgICBsb25nIGNwdUZyZXFDdXIgPSBy
ZWFkRnJlcUZyb21GaWxlKGN1clBhdGhbaV0pOwotICAgICAgaWYgKGNwdUZyZXFDdXIgPT0gMCAm
JiBsYXN0U2Vlbk1heEZyZXEgPT0gMCkgewotICAgICAgICAvLyBObyBjdXJyZW50IGZyZXF1ZW5j
eSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBDUFUgY29yZSAtIGlnbm9yZSBpdC4KLSAgICAgICAgY29u
dGludWU7Ci0gICAgICB9Ci0gICAgICBpZiAoY3B1RnJlcUN1ciA+IDApIHsKLSAgICAgICAgYWN0
dWFsQ3B1c1ByZXNlbnQrKzsKLSAgICAgIH0KLSAgICAgIGNwdUZyZXFDdXJTdW0gKz0gY3B1RnJl
cUN1cjsKLQotICAgICAgLyogSGVyZSwgbGFzdFNlZW5NYXhGcmVxIG1pZ2h0IGNvbWUgZnJvbQot
ICAgICAgICogMS4gY3B1RnJlcVtpXSwgb3IKLSAgICAgICAqIDIuIGEgcHJldmlvdXMgaXRlcmF0
aW9uLCBvcgotICAgICAgICogMy4gYSBuZXdseSByZWFkIHZhbHVlLCBvcgotICAgICAgICogNC4g
aHlwb3RoZXRpY2FsbHkgZnJvbSB0aGUgcHJlLWxvb3AgZHVtbXkuCi0gICAgICAgKi8KLSAgICAg
IGNwdUZyZXFNYXhTdW0gKz0gbGFzdFNlZW5NYXhGcmVxOwotICAgICAgaWYgKGxhc3RTZWVuTWF4
RnJlcSA+IDApIHsKLSAgICAgICAgY3VyRnJlcVNjYWxlc1tpXSA9IChkb3VibGUpIGNwdUZyZXFD
dXIgLyBsYXN0U2Vlbk1heEZyZXE7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNwdUZyZXFD
dXJTdW0gPT0gMCB8fCBjcHVGcmVxTWF4U3VtID09IDApIHsKLSAgICAgIExvZy5lKFRBRywgIkNv
dWxkIG5vdCByZWFkIG1heCBvciBjdXJyZW50IGZyZXF1ZW5jeSBmb3IgYW55IENQVSIpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qCi0gICAgICogU2luY2UgdGhlIGN5Y2xl
IGNvdW50cyBhcmUgZm9yIHRoZSBwZXJpb2QgYmV0d2VlbiB0aGUgbGFzdCBpbnZvY2F0aW9uCi0g
ICAgICogYW5kIHRoaXMgcHJlc2VudCBvbmUsIHdlIGF2ZXJhZ2UgdGhlIHBlcmNlbnR1YWwgQ1BV
IGZyZXF1ZW5jaWVzIGJldHdlZW4KLSAgICAgKiBub3cgYW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhl
IG1lYXN1cmVtZW50IHBlcmlvZC4gIFRoaXMgaXMgc2lnbmlmaWNhbnRseQotICAgICAqIGluY29y
cmVjdCBvbmx5IGlmIHRoZSBmcmVxdWVuY2llcyBoYXZlIHBlZWtlZCBvciBkcm9wcGVkIGluIGJl
dHdlZW4gdGhlCi0gICAgICogaW52b2NhdGlvbnMuCi0gICAgICovCi0gICAgZG91YmxlIGN1cnJl
bnRGcmVxdWVuY3lTY2FsZSA9IGNwdUZyZXFDdXJTdW0gLyAoZG91YmxlKSBjcHVGcmVxTWF4U3Vt
OwotICAgIGlmIChmcmVxdWVuY3lTY2FsZS5nZXRDdXJyZW50KCkgPiAwKSB7Ci0gICAgICBjdXJy
ZW50RnJlcXVlbmN5U2NhbGUgPSAoZnJlcXVlbmN5U2NhbGUuZ2V0Q3VycmVudCgpICsgY3VycmVu
dEZyZXF1ZW5jeVNjYWxlKSAqIDAuNTsKLSAgICB9Ci0KLSAgICBQcm9jU3RhdCBwcm9jU3RhdCA9
IHJlYWRQcm9jU3RhdCgpOwotICAgIGlmIChwcm9jU3RhdCA9PSBudWxsKSB7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbG9uZyBkaWZmVXNlclRpbWUgPSBwcm9jU3RhdC51c2Vy
VGltZSAtIGxhc3RQcm9jU3RhdC51c2VyVGltZTsKLSAgICBsb25nIGRpZmZTeXN0ZW1UaW1lID0g
cHJvY1N0YXQuc3lzdGVtVGltZSAtIGxhc3RQcm9jU3RhdC5zeXN0ZW1UaW1lOwotICAgIGxvbmcg
ZGlmZklkbGVUaW1lID0gcHJvY1N0YXQuaWRsZVRpbWUgLSBsYXN0UHJvY1N0YXQuaWRsZVRpbWU7
Ci0gICAgbG9uZyBhbGxUaW1lID0gZGlmZlVzZXJUaW1lICsgZGlmZlN5c3RlbVRpbWUgKyBkaWZm
SWRsZVRpbWU7Ci0KLSAgICBpZiAoY3VycmVudEZyZXF1ZW5jeVNjYWxlID09IDAgfHwgYWxsVGlt
ZSA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIHN0
YXRpc3RpY3MuCi0gICAgZnJlcXVlbmN5U2NhbGUuYWRkVmFsdWUoY3VycmVudEZyZXF1ZW5jeVNj
YWxlKTsKLQotICAgIGRvdWJsZSBjdXJyZW50VXNlckNwdVVzYWdlID0gZGlmZlVzZXJUaW1lIC8g
KGRvdWJsZSkgYWxsVGltZTsKLSAgICB1c2VyQ3B1VXNhZ2UuYWRkVmFsdWUoY3VycmVudFVzZXJD
cHVVc2FnZSk7Ci0KLSAgICBkb3VibGUgY3VycmVudFN5c3RlbUNwdVVzYWdlID0gZGlmZlN5c3Rl
bVRpbWUgLyAoZG91YmxlKSBhbGxUaW1lOwotICAgIHN5c3RlbUNwdVVzYWdlLmFkZFZhbHVlKGN1
cnJlbnRTeXN0ZW1DcHVVc2FnZSk7Ci0KLSAgICBkb3VibGUgY3VycmVudFRvdGFsQ3B1VXNhZ2Ug
PQotICAgICAgICAoY3VycmVudFVzZXJDcHVVc2FnZSArIGN1cnJlbnRTeXN0ZW1DcHVVc2FnZSkg
KiBjdXJyZW50RnJlcXVlbmN5U2NhbGU7Ci0gICAgdG90YWxDcHVVc2FnZS5hZGRWYWx1ZShjdXJy
ZW50VG90YWxDcHVVc2FnZSk7Ci0KLSAgICAvLyBTYXZlIG5ldyBtZWFzdXJlbWVudHMgZm9yIG5l
eHQgcm91bmQncyBkZWx0YXMuCi0gICAgbGFzdFByb2NTdGF0ID0gcHJvY1N0YXQ7Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGRvdWJsZVRvUGVyY2VudChkb3VibGUg
ZCkgewotICAgIHJldHVybiAoaW50KSAoZCAqIDEwMCArIDAuNSk7Ci0gIH0KLQotICBwcml2YXRl
IHN5bmNocm9uaXplZCBTdHJpbmcgZ2V0U3RhdFN0cmluZygpIHsKLSAgICBTdHJpbmdCdWlsZGVy
IHN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIHN0YXQuYXBwZW5kKCJDUFUgVXNlcjog
IikKLSAgICAgICAgLmFwcGVuZChkb3VibGVUb1BlcmNlbnQodXNlckNwdVVzYWdlLmdldEN1cnJl
bnQoKSkpCi0gICAgICAgIC5hcHBlbmQoIi8iKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVy
Y2VudCh1c2VyQ3B1VXNhZ2UuZ2V0QXZlcmFnZSgpKSkKLSAgICAgICAgLmFwcGVuZCgiLiBTeXN0
ZW06ICIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KHN5c3RlbUNwdVVzYWdlLmdl
dEN1cnJlbnQoKSkpCi0gICAgICAgIC5hcHBlbmQoIi8iKQotICAgICAgICAuYXBwZW5kKGRvdWJs
ZVRvUGVyY2VudChzeXN0ZW1DcHVVc2FnZS5nZXRBdmVyYWdlKCkpKQotICAgICAgICAuYXBwZW5k
KCIuIEZyZXE6ICIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KGZyZXF1ZW5jeVNj
YWxlLmdldEN1cnJlbnQoKSkpCi0gICAgICAgIC5hcHBlbmQoIi8iKQotICAgICAgICAuYXBwZW5k
KGRvdWJsZVRvUGVyY2VudChmcmVxdWVuY3lTY2FsZS5nZXRBdmVyYWdlKCkpKQotICAgICAgICAu
YXBwZW5kKCIuIFRvdGFsIHVzYWdlOiAiKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2Vu
dCh0b3RhbENwdVVzYWdlLmdldEN1cnJlbnQoKSkpCi0gICAgICAgIC5hcHBlbmQoIi8iKQotICAg
ICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudCh0b3RhbENwdVVzYWdlLmdldEF2ZXJhZ2UoKSkp
Ci0gICAgICAgIC5hcHBlbmQoIi4gQ29yZXM6ICIpCi0gICAgICAgIC5hcHBlbmQoYWN0dWFsQ3B1
c1ByZXNlbnQpOwotICAgIHN0YXQuYXBwZW5kKCIoICIpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgY3B1c1ByZXNlbnQ7IGkrKykgewotICAgICAgc3RhdC5hcHBlbmQoZG91YmxlVG9QZXJjZW50
KGN1ckZyZXFTY2FsZXNbaV0pKS5hcHBlbmQoIiAiKTsKLSAgICB9Ci0gICAgc3RhdC5hcHBlbmQo
IikuIEJhdHRlcnk6ICIpLmFwcGVuZChnZXRCYXR0ZXJ5TGV2ZWwoKSk7Ci0gICAgaWYgKGNwdU92
ZXJ1c2UpIHsKLSAgICAgIHN0YXQuYXBwZW5kKCIuIE92ZXJ1c2UuIik7Ci0gICAgfQotICAgIHJl
dHVybiBzdGF0LnRvU3RyaW5nKCk7Ci0gIH0KLQotICAvKioKLSAgICogUmVhZCBhIHNpbmdsZSBp
bnRlZ2VyIHZhbHVlIGZyb20gdGhlIG5hbWVkIGZpbGUuICBSZXR1cm4gdGhlIHJlYWQgdmFsdWUK
LSAgICogb3IgaWYgYW4gZXJyb3Igb2NjdXJzIHJldHVybiAwLgotICAgKi8KLSAgcHJpdmF0ZSBs
b25nIHJlYWRGcmVxRnJvbUZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0gICAgbG9uZyBudW1iZXIg
PSAwOwotICAgIHRyeSB7Ci0gICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVy
ZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZU5hbWUpKTsKLSAgICAgIHRyeSB7Ci0gICAgICAg
IFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5lKCk7Ci0gICAgICAgIG51bWJlciA9IHBhcnNl
TG9uZyhsaW5lKTsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIHJlYWRlci5jbG9zZSgpOwot
ICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAv
LyBDUFUgY29yZSBpcyBvZmYsIHNvIGZpbGUgd2l0aCBpdHMgc2NhbGluZyBmcmVxdWVuY3kgLi4u
L2NwdWZyZXEvc2NhbGluZ19jdXJfZnJlcQotICAgICAgLy8gaXMgbm90IHByZXNlbnQuIFRoaXMg
aXMgbm90IGFuIGVycm9yLgotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8v
IENQVSBjb3JlIGlzIG9mZiwgc28gZmlsZSB3aXRoIGl0cyBzY2FsaW5nIGZyZXF1ZW5jeSAuLi4v
Y3B1ZnJlcS9zY2FsaW5nX2N1cl9mcmVxCi0gICAgICAvLyBpcyBlbXB0eS4gVGhpcyBpcyBub3Qg
YW4gZXJyb3IuCi0gICAgfQotICAgIHJldHVybiBudW1iZXI7Ci0gIH0KLQotICBwcml2YXRlIHN0
YXRpYyBsb25nIHBhcnNlTG9uZyhTdHJpbmcgdmFsdWUpIHsKLSAgICBsb25nIG51bWJlciA9IDA7
Ci0gICAgdHJ5IHsKLSAgICAgIG51bWJlciA9IExvbmcucGFyc2VMb25nKHZhbHVlKTsKLSAgICB9
IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgTG9nLmUoVEFHLCAicGFy
c2VMb25nIGVycm9yLiIsIGUpOwotICAgIH0KLSAgICByZXR1cm4gbnVtYmVyOwotICB9Ci0KLSAg
LyoKLSAgICogUmVhZCB0aGUgY3VycmVudCB1dGlsaXphdGlvbiBvZiBhbGwgQ1BVcyB1c2luZyB0
aGUgY3VtdWxhdGl2ZSBmaXJzdCBsaW5lCi0gICAqIG9mIC9wcm9jL3N0YXQuCi0gICAqLwotICBw
cml2YXRlIFByb2NTdGF0IHJlYWRQcm9jU3RhdCgpIHsKLSAgICBsb25nIHVzZXJUaW1lID0gMDsK
LSAgICBsb25nIHN5c3RlbVRpbWUgPSAwOwotICAgIGxvbmcgaWRsZVRpbWUgPSAwOwotICAgIHRy
eSB7Ci0gICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3
IEZpbGVSZWFkZXIoIi9wcm9jL3N0YXQiKSk7Ci0gICAgICB0cnkgewotICAgICAgICAvLyBsaW5l
IHNob3VsZCBjb250YWluIHNvbWV0aGluZyBsaWtlIHRoaXM6Ci0gICAgICAgIC8vIGNwdSAgNTA5
MzgxOCAyNzE4MzggMzUxMjgzMCAxNjU5MzQxMTkgMTAxMzc0IDQ0NzA3NiAyNzIwODYgMCAwIDAK
LSAgICAgICAgLy8gICAgICAgdXNlciAgICBuaWNlICBzeXN0ZW0gICAgIGlkbGUgICBpb3dhaXQg
IGlycSAgIHNvZnRpcnEKLSAgICAgICAgU3RyaW5nIGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsK
LSAgICAgICAgU3RyaW5nIGxpbmVzW10gPSBsaW5lLnNwbGl0KCJcXHMrIik7Ci0gICAgICAgIGlu
dCBsZW5ndGggPSBsaW5lcy5sZW5ndGg7Ci0gICAgICAgIGlmIChsZW5ndGggPj0gNSkgewotICAg
ICAgICAgIHVzZXJUaW1lID0gcGFyc2VMb25nKGxpbmVzWzFdKTsgLy8gdXNlcgotICAgICAgICAg
IHVzZXJUaW1lICs9IHBhcnNlTG9uZyhsaW5lc1syXSk7IC8vIG5pY2UKLSAgICAgICAgICBzeXN0
ZW1UaW1lID0gcGFyc2VMb25nKGxpbmVzWzNdKTsgLy8gc3lzdGVtCi0gICAgICAgICAgaWRsZVRp
bWUgPSBwYXJzZUxvbmcobGluZXNbNF0pOyAvLyBpZGxlCi0gICAgICAgIH0KLSAgICAgICAgaWYg
KGxlbmd0aCA+PSA4KSB7Ci0gICAgICAgICAgdXNlclRpbWUgKz0gcGFyc2VMb25nKGxpbmVzWzVd
KTsgLy8gaW93YWl0Ci0gICAgICAgICAgc3lzdGVtVGltZSArPSBwYXJzZUxvbmcobGluZXNbNl0p
OyAvLyBpcnEKLSAgICAgICAgICBzeXN0ZW1UaW1lICs9IHBhcnNlTG9uZyhsaW5lc1s3XSk7IC8v
IHNvZnRpcnEKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgTG9nLmUoVEFHLCAiUHJvYmxlbXMgcGFyc2luZyAvcHJvYy9zdGF0IiwgZSk7Ci0gICAgICAg
IHJldHVybiBudWxsOwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgcmVhZGVyLmNsb3NlKCk7
Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAg
IExvZy5lKFRBRywgIkNhbm5vdCBvcGVuIC9wcm9jL3N0YXQgZm9yIHJlYWRpbmciLCBlKTsKLSAg
ICAgIHJldHVybiBudWxsOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIExv
Zy5lKFRBRywgIlByb2JsZW1zIHJlYWRpbmcgL3Byb2Mvc3RhdCIsIGUpOwotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfQotICAgIHJldHVybiBuZXcgUHJvY1N0YXQodXNlclRpbWUsIHN5c3RlbVRp
bWUsIGlkbGVUaW1lKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L0RpcmVjdFJUQ0NsaWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMzQ3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNw
b3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IG9yZy5qc29u
LkpTT05BcnJheTsKLWltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwotaW1wb3J0IG9yZy5q
c29uLkpTT05PYmplY3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNj
cmlwdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRp
bC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVu
dC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2
YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLS8qKgotICogSW1wbGVtZW50YXRpb24gb2YgQXBwUlRD
Q2xpZW50IHRoYXQgdXNlcyBkaXJlY3QgVENQIGNvbm5lY3Rpb24gYXMgdGhlIHNpZ25hbGluZyBj
aGFubmVsLgotICogVGhpcyBlbGltaW5hdGVzIHRoZSBuZWVkIGZvciBhbiBleHRlcm5hbCBzZXJ2
ZXIuIFRoaXMgY2xhc3MgZG9lcyBub3Qgc3VwcG9ydCBsb29wYmFjawotICogY29ubmVjdGlvbnMu
Ci0gKi8KLXB1YmxpYyBjbGFzcyBEaXJlY3RSVENDbGllbnQgaW1wbGVtZW50cyBBcHBSVENDbGll
bnQsIFRDUENoYW5uZWxDbGllbnQuVENQQ2hhbm5lbEV2ZW50cyB7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBUQUcgPSAiRGlyZWN0UlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IERFRkFVTFRfUE9SVCA9IDg4ODg7Ci0KLSAgLy8gUmVnZXggcGF0dGVybiB1c2Vk
IGZvciBjaGVja2luZyBpZiByb29tIGlkIGxvb2tzIGxpa2UgYW4gSVAuCi0gIHN0YXRpYyBmaW5h
bCBQYXR0ZXJuIElQX1BBVFRFUk4gPSBQYXR0ZXJuLmNvbXBpbGUoIigiCi0gICAgICAvLyBJUHY0
Ci0gICAgICArICIoKFxcZCtcXC4pezN9XFxkKyl8IgotICAgICAgLy8gSVB2NgotICAgICAgKyAi
XFxbKCgoWzAtOWEtZkEtRl17MSw0fTopKlswLTlhLWZBLUZdezEsNH0pPzo6IgotICAgICAgKyAi
KChbMC05YS1mQS1GXXsxLDR9OikqWzAtOWEtZkEtRl17MSw0fSk/KVxcXXwiCi0gICAgICArICJc
XFsoKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH0pXFxdfCIKLSAgICAgIC8v
IElQdjYgd2l0aG91dCBbXQotICAgICAgKyAiKCgoWzAtOWEtZkEtRl17MSw0fTopKlswLTlhLWZB
LUZdezEsNH0pPzo6KChbMC05YS1mQS1GXXsxLDR9OikqWzAtOWEtZkEtRl17MSw0fSk/KXwiCi0g
ICAgICArICIoKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlhLWZBLUZdezEsNH0pfCIKLSAgICAg
IC8vIExpdGVyYWxzCi0gICAgICArICJsb2NhbGhvc3QiCi0gICAgICArICIpIgotICAgICAgLy8g
T3B0aW9uYWwgcG9ydCBudW1iZXIKLSAgICAgICsgIig6KFxcZCspKT8iKTsKLQotICBwcml2YXRl
IGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLSAgcHJpdmF0ZSBmaW5hbCBTaWduYWxp
bmdFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIFRDUENoYW5uZWxDbGllbnQgdGNwQ2xpZW50Owot
ICBwcml2YXRlIFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVyczsK
LQotICBwcml2YXRlIGVudW0gQ29ubmVjdGlvblN0YXRlIHsgTkVXLCBDT05ORUNURUQsIENMT1NF
RCwgRVJST1IgfQotCi0gIC8vIEFsbCBhbHRlcmF0aW9ucyBvZiB0aGUgcm9vbSBzdGF0ZSBzaG91
bGQgYmUgZG9uZSBmcm9tIGluc2lkZSB0aGUgbG9vcGVyIHRocmVhZC4KLSAgcHJpdmF0ZSBDb25u
ZWN0aW9uU3RhdGUgcm9vbVN0YXRlOwotCi0gIHB1YmxpYyBEaXJlY3RSVENDbGllbnQoU2lnbmFs
aW5nRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotCi0gICAgZXhl
Y3V0b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkRXhlY3V0b3IoKTsKLSAgICByb29tU3Rh
dGUgPSBDb25uZWN0aW9uU3RhdGUuTkVXOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbm5lY3RzIHRv
IHRoZSByb29tLCByb29tSWQgaW4gY29ubmVjdGlvbnNQYXJhbWV0ZXJzIGlzIHJlcXVpcmVkLiBy
b29tSWQgbXVzdCBiZSBhIHZhbGlkCi0gICAqIElQIGFkZHJlc3MgbWF0Y2hpbmcgSVBfUEFUVEVS
Ti4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjb25uZWN0VG9Sb29tKFJvb21D
b25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVycykgewotICAgIHRoaXMuY29u
bmVjdGlvblBhcmFtZXRlcnMgPSBjb25uZWN0aW9uUGFyYW1ldGVyczsKLQotICAgIGlmIChjb25u
ZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgcmVwb3J0RXJyb3IoIkxvb3BiYWNr
IGNvbm5lY3Rpb25zIGFyZW4ndCBzdXBwb3J0ZWQgYnkgRGlyZWN0UlRDQ2xpZW50LiIpOwotICAg
IH0KLQotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNvbm5lY3RUb1Jvb21JbnRl
cm5hbCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIGRpc2Nvbm5lY3RGcm9tUm9vbSgpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5u
YWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICBkaXNjb25uZWN0RnJvbVJvb21JbnRlcm5hbCgpOwotICAgICAgfQotICAgIH0pOwotICB9
Ci0KLSAgLyoqCi0gICAqIENvbm5lY3RzIHRvIHRoZSByb29tLgotICAgKgotICAgKiBSdW5zIG9u
IHRoZSBsb29wZXIgdGhyZWFkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGNvbm5lY3RUb1Jvb21J
bnRlcm5hbCgpIHsKLSAgICB0aGlzLnJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5ORVc7Ci0K
LSAgICBTdHJpbmcgZW5kcG9pbnQgPSBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tSWQ7Ci0KLSAg
ICBNYXRjaGVyIG1hdGNoZXIgPSBJUF9QQVRURVJOLm1hdGNoZXIoZW5kcG9pbnQpOwotICAgIGlm
ICghbWF0Y2hlci5tYXRjaGVzKCkpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJyb29tSWQgbXVzdCBt
YXRjaCBJUF9QQVRURVJOIGZvciBEaXJlY3RSVENDbGllbnQuIik7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgU3RyaW5nIGlwID0gbWF0Y2hlci5ncm91cCgxKTsKLSAgICBTdHJpbmcgcG9y
dFN0ciA9IG1hdGNoZXIuZ3JvdXAobWF0Y2hlci5ncm91cENvdW50KCkpOwotICAgIGludCBwb3J0
OwotCi0gICAgaWYgKHBvcnRTdHIgIT0gbnVsbCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgcG9y
dCA9IEludGVnZXIucGFyc2VJbnQocG9ydFN0cik7Ci0gICAgICB9IGNhdGNoIChOdW1iZXJGb3Jt
YXRFeGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigiSW52YWxpZCBwb3J0IG51bWJl
cjogIiArIHBvcnRTdHIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHBvcnQgPSBERUZBVUxUX1BPUlQ7Ci0gICAgfQotCi0gICAgdGNwQ2xpZW50ID0gbmV3
IFRDUENoYW5uZWxDbGllbnQoZXhlY3V0b3IsIHRoaXMsIGlwLCBwb3J0KTsKLSAgfQotCi0gIC8q
KgotICAgKiBEaXNjb25uZWN0cyBmcm9tIHRoZSByb29tLgotICAgKgotICAgKiBSdW5zIG9uIHRo
ZSBsb29wZXIgdGhyZWFkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIGRpc2Nvbm5lY3RGcm9tUm9v
bUludGVybmFsKCkgewotICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7Ci0K
LSAgICBpZiAodGNwQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgIHRjcENsaWVudC5kaXNjb25uZWN0
KCk7Ci0gICAgICB0Y3BDbGllbnQgPSBudWxsOwotICAgIH0KLSAgICBleGVjdXRvci5zaHV0ZG93
bigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRPZmZlclNkcChmaW5h
bCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAg
ICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcgb2ZmZXIgU0RQIGluIG5vbiBjb25uZWN0ZWQgc3Rh
dGUuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIEpTT05PYmplY3Qg
anNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInNkcCIsIHNk
cC5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAib2ZmZXIiKTsK
LSAgICAgICAgc2VuZE1lc3NhZ2UoanNvbi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZW5kQW5zd2VyU2RwKGZpbmFsIFNl
c3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpz
b24sICJzZHAiLCBzZHAuZGVzY3JpcHRpb24pOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBl
IiwgImFuc3dlciIpOwotICAgICAgICBzZW5kTWVzc2FnZShqc29uLnRvU3RyaW5nKCkpOwotICAg
ICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRMb2Nh
bEljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgZXhlY3V0
b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3Qo
KTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlwZSIsICJjYW5kaWRhdGUiKTsKLSAgICAgICAg
anNvblB1dChqc29uLCAibGFiZWwiLCBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCk7Ci0gICAgICAg
IGpzb25QdXQoanNvbiwgImlkIiwgY2FuZGlkYXRlLnNkcE1pZCk7Ci0gICAgICAgIGpzb25QdXQo
anNvbiwgImNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5zZHApOwotCi0gICAgICAgIGlmIChyb29tU3Rh
dGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgIHJlcG9ydEVycm9y
KCJTZW5kaW5nIElDRSBjYW5kaWRhdGUgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZE1lc3NhZ2UoanNvbi50b1N0cmlu
ZygpKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKiBTZW5kIHJlbW92ZWQgSWNlIGNh
bmRpZGF0ZXMgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LiAqLwotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlUmVtb3ZhbHMoZmluYWwgSWNlQ2FuZGlkYXRl
W10gY2FuZGlkYXRlcykgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIEpTT05P
YmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5
cGUiLCAicmVtb3ZlLWNhbmRpZGF0ZXMiKTsKLSAgICAgICAgSlNPTkFycmF5IGpzb25BcnJheSA9
IG5ldyBKU09OQXJyYXkoKTsKLSAgICAgICAgZm9yIChmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlk
YXRlIDogY2FuZGlkYXRlcykgewotICAgICAgICAgIGpzb25BcnJheS5wdXQodG9Kc29uQ2FuZGlk
YXRlKGNhbmRpZGF0ZSkpOwotICAgICAgICB9Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImNhbmRp
ZGF0ZXMiLCBqc29uQXJyYXkpOwotCi0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlv
blN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJTZW5kaW5nIElDRSBj
YW5kaWRhdGUgcmVtb3ZhbHMgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2VuZE1lc3NhZ2UoanNvbi50b1N0cmluZygpKTsK
LSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gVENQQ2hhbm5l
bENsaWVudCBldmVudCBoYW5kbGVycwotCi0gIC8qKgotICAgKiBJZiB0aGUgY2xpZW50IGlzIHRo
ZSBzZXJ2ZXIgc2lkZSwgdGhpcyB3aWxsIHRyaWdnZXIgb25Db25uZWN0ZWRUb1Jvb20uCi0gICAq
LwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25UQ1BDb25uZWN0ZWQoYm9vbGVhbiBpc1Nl
cnZlcikgewotICAgIGlmIChpc1NlcnZlcikgewotICAgICAgcm9vbVN0YXRlID0gQ29ubmVjdGlv
blN0YXRlLkNPTk5FQ1RFRDsKLQotICAgICAgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJz
ID0gbmV3IFNpZ25hbGluZ1BhcmFtZXRlcnMoCi0gICAgICAgICAgLy8gSWNlIHNlcnZlcnMgYXJl
IG5vdCBuZWVkZWQgZm9yIGRpcmVjdCBjb25uZWN0aW9ucy4KLSAgICAgICAgICBuZXcgTGlua2Vk
TGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+KCksCi0gICAgICAgICAgaXNTZXJ2ZXIsIC8v
IFNlcnZlciBzaWRlIGFjdHMgYXMgdGhlIGluaXRpYXRvciBvbiBkaXJlY3QgY29ubmVjdGlvbnMu
Ci0gICAgICAgICAgbnVsbCwgLy8gY2xpZW50SWQKLSAgICAgICAgICBudWxsLCAvLyB3c3NVcmwK
LSAgICAgICAgICBudWxsLCAvLyB3d3NQb3N0VXJsCi0gICAgICAgICAgbnVsbCwgLy8gb2ZmZXJT
ZHAKLSAgICAgICAgICBudWxsIC8vIGljZUNhbmRpZGF0ZXMKLSAgICAgICAgICApOwotICAgICAg
ZXZlbnRzLm9uQ29ubmVjdGVkVG9Sb29tKHBhcmFtZXRlcnMpOwotICAgIH0KLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvblRDUE1lc3NhZ2UoU3RyaW5nIG1zZykgewotICAgIHRy
eSB7Ci0gICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdChtc2cpOwotICAgICAg
U3RyaW5nIHR5cGUgPSBqc29uLm9wdFN0cmluZygidHlwZSIpOwotICAgICAgaWYgKHR5cGUuZXF1
YWxzKCJjYW5kaWRhdGUiKSkgewotICAgICAgICBldmVudHMub25SZW1vdGVJY2VDYW5kaWRhdGUo
dG9KYXZhQ2FuZGlkYXRlKGpzb24pKTsKLSAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoInJl
bW92ZS1jYW5kaWRhdGVzIikpIHsKLSAgICAgICAgSlNPTkFycmF5IGNhbmRpZGF0ZUFycmF5ID0g
anNvbi5nZXRKU09OQXJyYXkoImNhbmRpZGF0ZXMiKTsKLSAgICAgICAgSWNlQ2FuZGlkYXRlW10g
Y2FuZGlkYXRlcyA9IG5ldyBJY2VDYW5kaWRhdGVbY2FuZGlkYXRlQXJyYXkubGVuZ3RoKCldOwot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbmRpZGF0ZUFycmF5Lmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICBjYW5kaWRhdGVzW2ldID0gdG9KYXZhQ2FuZGlkYXRlKGNhbmRpZGF0ZUFy
cmF5LmdldEpTT05PYmplY3QoaSkpOwotICAgICAgICB9Ci0gICAgICAgIGV2ZW50cy5vblJlbW90
ZUljZUNhbmRpZGF0ZXNSZW1vdmVkKGNhbmRpZGF0ZXMpOwotICAgICAgfSBlbHNlIGlmICh0eXBl
LmVxdWFscygiYW5zd2VyIikpIHsKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5l
dyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlw
ZS5mcm9tQ2Fub25pY2FsRm9ybSh0eXBlKSwganNvbi5nZXRTdHJpbmcoInNkcCIpKTsKLSAgICAg
ICAgZXZlbnRzLm9uUmVtb3RlRGVzY3JpcHRpb24oc2RwKTsKLSAgICAgIH0gZWxzZSBpZiAodHlw
ZS5lcXVhbHMoIm9mZmVyIikpIHsKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5l
dyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlw
ZS5mcm9tQ2Fub25pY2FsRm9ybSh0eXBlKSwganNvbi5nZXRTdHJpbmcoInNkcCIpKTsKLQotICAg
ICAgICBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBuZXcgU2lnbmFsaW5nUGFyYW1l
dGVycygKLSAgICAgICAgICAgIC8vIEljZSBzZXJ2ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkaXJl
Y3QgY29ubmVjdGlvbnMuCi0gICAgICAgICAgICBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlv
bi5JY2VTZXJ2ZXI+KCksCi0gICAgICAgICAgICBmYWxzZSwgLy8gVGhpcyBjb2RlIHdpbGwgb25s
eSBiZSBydW4gb24gdGhlIGNsaWVudCBzaWRlLiBTbywgd2UgYXJlIG5vdCB0aGUgaW5pdGlhdG9y
LgotICAgICAgICAgICAgbnVsbCwgLy8gY2xpZW50SWQKLSAgICAgICAgICAgIG51bGwsIC8vIHdz
c1VybAotICAgICAgICAgICAgbnVsbCwgLy8gd3NzUG9zdFVybAotICAgICAgICAgICAgc2RwLCAv
LyBvZmZlclNkcAotICAgICAgICAgICAgbnVsbCAvLyBpY2VDYW5kaWRhdGVzCi0gICAgICAgICAg
ICApOwotICAgICAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEOwotICAg
ICAgICBldmVudHMub25Db25uZWN0ZWRUb1Jvb20ocGFyYW1ldGVycyk7Ci0gICAgICB9IGVsc2Ug
ewotICAgICAgICByZXBvcnRFcnJvcigiVW5leHBlY3RlZCBUQ1AgbWVzc2FnZTogIiArIG1zZyk7
Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRF
cnJvcigiVENQIG1lc3NhZ2UgSlNPTiBwYXJzaW5nIGVycm9yOiAiICsgZS50b1N0cmluZygpKTsK
LSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25UQ1BFcnJvcihTdHJp
bmcgZGVzY3JpcHRpb24pIHsKLSAgICByZXBvcnRFcnJvcigiVENQIGNvbm5lY3Rpb24gZXJyb3I6
ICIgKyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25U
Q1BDbG9zZSgpIHsKLSAgICBldmVudHMub25DaGFubmVsQ2xvc2UoKTsKLSAgfQotCi0gIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gIC8vIEhlbHBlciBmdW5jdGlvbnMuCi0gIHByaXZhdGUgdm9pZCByZXBvcnRF
cnJvcihmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgTG9nLmUoVEFHLCBlcnJvck1l
c3NhZ2UpOwotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChyb29tU3RhdGUg
IT0gQ29ubmVjdGlvblN0YXRlLkVSUk9SKSB7Ci0gICAgICAgICAgcm9vbVN0YXRlID0gQ29ubmVj
dGlvblN0YXRlLkVSUk9SOwotICAgICAgICAgIGV2ZW50cy5vbkNoYW5uZWxFcnJvcihlcnJvck1l
c3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgc2VuZE1lc3NhZ2UoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBleGVjdXRvci5leGVj
dXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICB0Y3BDbGllbnQuc2VuZChtZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9
KTsKLSAgfQotCi0gIC8vIFB1dCBhIHxrZXl8LT58dmFsdWV8IG1hcHBpbmcgaW4gfGpzb258Lgot
ICBwcml2YXRlIHN0YXRpYyB2b2lkIGpzb25QdXQoSlNPTk9iamVjdCBqc29uLCBTdHJpbmcga2V5
LCBPYmplY3QgdmFsdWUpIHsKLSAgICB0cnkgewotICAgICAganNvbi5wdXQoa2V5LCB2YWx1ZSk7
Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGlt
ZUV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBhIEphdmEgY2FuZGlk
YXRlIHRvIGEgSlNPTk9iamVjdC4KLSAgcHJpdmF0ZSBzdGF0aWMgSlNPTk9iamVjdCB0b0pzb25D
YW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgIEpTT05PYmplY3Qg
anNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAganNvblB1dChqc29uLCAibGFiZWwiLCBjYW5k
aWRhdGUuc2RwTUxpbmVJbmRleCk7Ci0gICAganNvblB1dChqc29uLCAiaWQiLCBjYW5kaWRhdGUu
c2RwTWlkKTsKLSAgICBqc29uUHV0KGpzb24sICJjYW5kaWRhdGUiLCBjYW5kaWRhdGUuc2RwKTsK
LSAgICByZXR1cm4ganNvbjsKLSAgfQotCi0gIC8vIENvbnZlcnRzIGEgSlNPTiBjYW5kaWRhdGUg
dG8gYSBKYXZhIG9iamVjdC4KLSAgcHJpdmF0ZSBzdGF0aWMgSWNlQ2FuZGlkYXRlIHRvSmF2YUNh
bmRpZGF0ZShKU09OT2JqZWN0IGpzb24pIHRocm93cyBKU09ORXhjZXB0aW9uIHsKLSAgICByZXR1
cm4gbmV3IEljZUNhbmRpZGF0ZSgKLSAgICAgICAganNvbi5nZXRTdHJpbmcoImlkIiksIGpzb24u
Z2V0SW50KCJsYWJlbCIpLCBqc29uLmdldFN0cmluZygiY2FuZGlkYXRlIikpOwotICB9Ci19Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvSHVkRnJhZ21lbnQuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvSHVkRnJhZ21lbnQuamF2YQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0h1ZEZyYWdtZW50
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFn
bWVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlw
ZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5k
cm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBh
bmRyb2lkLndpZGdldC5JbWFnZUJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0Vmll
dzsKLQotaW1wb3J0IG9yZy53ZWJydGMuU3RhdHNSZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwu
SGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotCi0vKioKLSAqIEZyYWdtZW50IGZvciBI
VUQgc3RhdGlzdGljcyBkaXNwbGF5LgotICovCi1wdWJsaWMgY2xhc3MgSHVkRnJhZ21lbnQgZXh0
ZW5kcyBGcmFnbWVudCB7Ci0gIHByaXZhdGUgVmlldyBjb250cm9sVmlldzsKLSAgcHJpdmF0ZSBU
ZXh0VmlldyBlbmNvZGVyU3RhdFZpZXc7Ci0gIHByaXZhdGUgVGV4dFZpZXcgaHVkVmlld0J3ZTsK
LSAgcHJpdmF0ZSBUZXh0VmlldyBodWRWaWV3Q29ubmVjdGlvbjsKLSAgcHJpdmF0ZSBUZXh0Vmll
dyBodWRWaWV3VmlkZW9TZW5kOwotICBwcml2YXRlIFRleHRWaWV3IGh1ZFZpZXdWaWRlb1JlY3Y7
Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gdG9nZ2xlRGVidWdCdXR0b247Ci0gIHByaXZhdGUgYm9v
bGVhbiB2aWRlb0NhbGxFbmFibGVkOwotICBwcml2YXRlIGJvb2xlYW4gZGlzcGxheUh1ZDsKLSAg
cHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIGlzUnVubmluZzsKLSAgcHJpdmF0ZSBDcHVNb25pdG9y
IGNwdU1vbml0b3I7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWV3IG9uQ3JlYXRlVmlldygK
LSAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyLCBWaWV3R3JvdXAgY29udGFpbmVyLCBCdW5k
bGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgY29udHJvbFZpZXcgPSBpbmZsYXRlci5pbmZs
YXRlKFIubGF5b3V0LmZyYWdtZW50X2h1ZCwgY29udGFpbmVyLCBmYWxzZSk7Ci0KLSAgICAvLyBD
cmVhdGUgVUkgY29udHJvbHMuCi0gICAgZW5jb2RlclN0YXRWaWV3ID0gKFRleHRWaWV3KSBjb250
cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5lbmNvZGVyX3N0YXRfY2FsbCk7Ci0gICAgaHVkVmll
d0J3ZSA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRf
YndlKTsKLSAgICBodWRWaWV3Q29ubmVjdGlvbiA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmlu
ZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRfY29ubmVjdGlvbik7Ci0gICAgaHVkVmlld1ZpZGVvU2Vu
ZCA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRfdmlk
ZW9fc2VuZCk7Ci0gICAgaHVkVmlld1ZpZGVvUmVjdiA9IChUZXh0VmlldykgY29udHJvbFZpZXcu
ZmluZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRfdmlkZW9fcmVjdik7Ci0gICAgdG9nZ2xlRGVidWdC
dXR0b24gPSAoSW1hZ2VCdXR0b24pIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmJ1dHRv
bl90b2dnbGVfZGVidWcpOwotCi0gICAgdG9nZ2xlRGVidWdCdXR0b24uc2V0T25DbGlja0xpc3Rl
bmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAgICAgICAgaWYgKGRpc3BsYXlIdWQp
IHsKLSAgICAgICAgICBpbnQgdmlzaWJpbGl0eSA9Ci0gICAgICAgICAgICAgIChodWRWaWV3Qndl
LmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lCTEUpID8gVmlldy5JTlZJU0lCTEUgOiBWaWV3
LlZJU0lCTEU7Ci0gICAgICAgICAgaHVkVmlld3NTZXRQcm9wZXJ0aWVzKHZpc2liaWxpdHkpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gY29udHJvbFZpZXc7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKLSAgICBzdXBlci5v
blN0YXJ0KCk7Ci0KLSAgICBCdW5kbGUgYXJncyA9IGdldEFyZ3VtZW50cygpOwotICAgIGlmIChh
cmdzICE9IG51bGwpIHsKLSAgICAgIHZpZGVvQ2FsbEVuYWJsZWQgPSBhcmdzLmdldEJvb2xlYW4o
Q2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBTEwsIHRydWUpOwotICAgICAgZGlzcGxheUh1ZCA9
IGFyZ3MuZ2V0Qm9vbGVhbihDYWxsQWN0aXZpdHkuRVhUUkFfRElTUExBWV9IVUQsIGZhbHNlKTsK
LSAgICB9Ci0gICAgaW50IHZpc2liaWxpdHkgPSBkaXNwbGF5SHVkID8gVmlldy5WSVNJQkxFIDog
Vmlldy5JTlZJU0lCTEU7Ci0gICAgZW5jb2RlclN0YXRWaWV3LnNldFZpc2liaWxpdHkodmlzaWJp
bGl0eSk7Ci0gICAgdG9nZ2xlRGVidWdCdXR0b24uc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsK
LSAgICBodWRWaWV3c1NldFByb3BlcnRpZXMoVmlldy5JTlZJU0lCTEUpOwotICAgIGlzUnVubmlu
ZyA9IHRydWU7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25TdG9wKCkgewot
ICAgIGlzUnVubmluZyA9IGZhbHNlOwotICAgIHN1cGVyLm9uU3RvcCgpOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgc2V0Q3B1TW9uaXRvcihDcHVNb25pdG9yIGNwdU1vbml0b3IpIHsKLSAgICB0aGlz
LmNwdU1vbml0b3IgPSBjcHVNb25pdG9yOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGh1ZFZpZXdz
U2V0UHJvcGVydGllcyhpbnQgdmlzaWJpbGl0eSkgewotICAgIGh1ZFZpZXdCd2Uuc2V0VmlzaWJp
bGl0eSh2aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3Q29ubmVjdGlvbi5zZXRWaXNpYmlsaXR5KHZp
c2liaWxpdHkpOwotICAgIGh1ZFZpZXdWaWRlb1NlbmQuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5
KTsKLSAgICBodWRWaWV3VmlkZW9SZWN2LnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAg
aHVkVmlld0J3ZS5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QVCwgNSk7Ci0g
ICAgaHVkVmlld0Nvbm5lY3Rpb24uc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRf
UFQsIDUpOwotICAgIGh1ZFZpZXdWaWRlb1NlbmQuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01Q
TEVYX1VOSVRfUFQsIDUpOwotICAgIGh1ZFZpZXdWaWRlb1JlY3Yuc2V0VGV4dFNpemUoVHlwZWRW
YWx1ZS5DT01QTEVYX1VOSVRfUFQsIDUpOwotICB9Ci0KLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBT
dHJpbmc+IGdldFJlcG9ydE1hcChTdGF0c1JlcG9ydCByZXBvcnQpIHsKLSAgICBNYXA8U3RyaW5n
LCBTdHJpbmc+IHJlcG9ydE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwotICAg
IGZvciAoU3RhdHNSZXBvcnQuVmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVzKSB7Ci0gICAgICBy
ZXBvcnRNYXAucHV0KHZhbHVlLm5hbWUsIHZhbHVlLnZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHJlcG9ydE1hcDsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVwZGF0ZUVuY29kZXJTdGF0aXN0aWNz
KGZpbmFsIFN0YXRzUmVwb3J0W10gcmVwb3J0cykgewotICAgIGlmICghaXNSdW5uaW5nIHx8ICFk
aXNwbGF5SHVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIFN0cmluZ0J1aWxkZXIgZW5j
b2RlclN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigxMjgpOwotICAgIFN0cmluZ0J1aWxkZXIgYndl
U3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgU3RyaW5nQnVpbGRlciBjb25uZWN0aW9u
U3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgU3RyaW5nQnVpbGRlciB2aWRlb1NlbmRT
dGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmdCdWlsZGVyIHZpZGVvUmVjdlN0
YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIFN0cmluZyBmcHMgPSBudWxsOwotICAgIFN0
cmluZyB0YXJnZXRCaXRyYXRlID0gbnVsbDsKLSAgICBTdHJpbmcgYWN0dWFsQml0cmF0ZSA9IG51
bGw7Ci0KLSAgICBmb3IgKFN0YXRzUmVwb3J0IHJlcG9ydCA6IHJlcG9ydHMpIHsKLSAgICAgIGlm
IChyZXBvcnQudHlwZS5lcXVhbHMoInNzcmMiKSAmJiByZXBvcnQuaWQuY29udGFpbnMoInNzcmMi
KSAmJiByZXBvcnQuaWQuY29udGFpbnMoInNlbmQiKSkgewotICAgICAgICAvLyBTZW5kIHZpZGVv
IHN0YXRpc3RpY3MuCi0gICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcmVwb3J0TWFwID0gZ2V0
UmVwb3J0TWFwKHJlcG9ydCk7Ci0gICAgICAgIFN0cmluZyB0cmFja0lkID0gcmVwb3J0TWFwLmdl
dCgiZ29vZ1RyYWNrSWQiKTsKLSAgICAgICAgaWYgKHRyYWNrSWQgIT0gbnVsbCAmJiB0cmFja0lk
LmNvbnRhaW5zKFBlZXJDb25uZWN0aW9uQ2xpZW50LlZJREVPX1RSQUNLX0lEKSkgewotICAgICAg
ICAgIGZwcyA9IHJlcG9ydE1hcC5nZXQoImdvb2dGcmFtZVJhdGVTZW50Iik7Ci0gICAgICAgICAg
dmlkZW9TZW5kU3RhdC5hcHBlbmQocmVwb3J0LmlkKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAg
Zm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAgICAg
ICAgIFN0cmluZyBuYW1lID0gdmFsdWUubmFtZS5yZXBsYWNlKCJnb29nIiwgIiIpOwotICAgICAg
ICAgICAgdmlkZW9TZW5kU3RhdC5hcHBlbmQobmFtZSkuYXBwZW5kKCI9IikuYXBwZW5kKHZhbHVl
LnZhbHVlKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9IGVs
c2UgaWYgKHJlcG9ydC50eXBlLmVxdWFscygic3NyYyIpICYmIHJlcG9ydC5pZC5jb250YWlucygi
c3NyYyIpCi0gICAgICAgICAgJiYgcmVwb3J0LmlkLmNvbnRhaW5zKCJyZWN2IikpIHsKLSAgICAg
ICAgLy8gUmVjZWl2ZSB2aWRlbyBzdGF0aXN0aWNzLgotICAgICAgICBNYXA8U3RyaW5nLCBTdHJp
bmc+IHJlcG9ydE1hcCA9IGdldFJlcG9ydE1hcChyZXBvcnQpOwotICAgICAgICAvLyBDaGVjayBp
ZiB0aGlzIHN0YXQgaXMgZm9yIHZpZGVvIHRyYWNrLgotICAgICAgICBTdHJpbmcgZnJhbWVXaWR0
aCA9IHJlcG9ydE1hcC5nZXQoImdvb2dGcmFtZVdpZHRoUmVjZWl2ZWQiKTsKLSAgICAgICAgaWYg
KGZyYW1lV2lkdGggIT0gbnVsbCkgewotICAgICAgICAgIHZpZGVvUmVjdlN0YXQuYXBwZW5kKHJl
cG9ydC5pZCkuYXBwZW5kKCJcbiIpOwotICAgICAgICAgIGZvciAoU3RhdHNSZXBvcnQuVmFsdWUg
dmFsdWUgOiByZXBvcnQudmFsdWVzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVl
Lm5hbWUucmVwbGFjZSgiZ29vZyIsICIiKTsKLSAgICAgICAgICAgIHZpZGVvUmVjdlN0YXQuYXBw
ZW5kKG5hbWUpLmFwcGVuZCgiPSIpLmFwcGVuZCh2YWx1ZS52YWx1ZSkuYXBwZW5kKCJcbiIpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChyZXBvcnQuaWQuZXF1YWxz
KCJid2Vmb3J2aWRlbyIpKSB7Ci0gICAgICAgIC8vIEJXRSBzdGF0aXN0aWNzLgotICAgICAgICBN
YXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9ydE1hcCA9IGdldFJlcG9ydE1hcChyZXBvcnQpOwotICAg
ICAgICB0YXJnZXRCaXRyYXRlID0gcmVwb3J0TWFwLmdldCgiZ29vZ1RhcmdldEVuY0JpdHJhdGUi
KTsKLSAgICAgICAgYWN0dWFsQml0cmF0ZSA9IHJlcG9ydE1hcC5nZXQoImdvb2dBY3R1YWxFbmNC
aXRyYXRlIik7Ci0KLSAgICAgICAgYndlU3RhdC5hcHBlbmQocmVwb3J0LmlkKS5hcHBlbmQoIlxu
Iik7Ci0gICAgICAgIGZvciAoU3RhdHNSZXBvcnQuVmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVz
KSB7Ci0gICAgICAgICAgU3RyaW5nIG5hbWUgPSB2YWx1ZS5uYW1lLnJlcGxhY2UoImdvb2ciLCAi
IikucmVwbGFjZSgiQXZhaWxhYmxlIiwgIiIpOwotICAgICAgICAgIGJ3ZVN0YXQuYXBwZW5kKG5h
bWUpLmFwcGVuZCgiPSIpLmFwcGVuZCh2YWx1ZS52YWx1ZSkuYXBwZW5kKCJcbiIpOwotICAgICAg
ICB9Ci0gICAgICB9IGVsc2UgaWYgKHJlcG9ydC50eXBlLmVxdWFscygiZ29vZ0NhbmRpZGF0ZVBh
aXIiKSkgewotICAgICAgICAvLyBDb25uZWN0aW9uIHN0YXRpc3RpY3MuCi0gICAgICAgIE1hcDxT
dHJpbmcsIFN0cmluZz4gcmVwb3J0TWFwID0gZ2V0UmVwb3J0TWFwKHJlcG9ydCk7Ci0gICAgICAg
IFN0cmluZyBhY3RpdmVDb25uZWN0aW9uID0gcmVwb3J0TWFwLmdldCgiZ29vZ0FjdGl2ZUNvbm5l
Y3Rpb24iKTsKLSAgICAgICAgaWYgKGFjdGl2ZUNvbm5lY3Rpb24gIT0gbnVsbCAmJiBhY3RpdmVD
b25uZWN0aW9uLmVxdWFscygidHJ1ZSIpKSB7Ci0gICAgICAgICAgY29ubmVjdGlvblN0YXQuYXBw
ZW5kKHJlcG9ydC5pZCkuYXBwZW5kKCJcbiIpOwotICAgICAgICAgIGZvciAoU3RhdHNSZXBvcnQu
VmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9
IHZhbHVlLm5hbWUucmVwbGFjZSgiZ29vZyIsICIiKTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25T
dGF0LmFwcGVuZChuYW1lKS5hcHBlbmQoIj0iKS5hcHBlbmQodmFsdWUudmFsdWUpLmFwcGVuZCgi
XG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgaHVkVmll
d0J3ZS5zZXRUZXh0KGJ3ZVN0YXQudG9TdHJpbmcoKSk7Ci0gICAgaHVkVmlld0Nvbm5lY3Rpb24u
c2V0VGV4dChjb25uZWN0aW9uU3RhdC50b1N0cmluZygpKTsKLSAgICBodWRWaWV3VmlkZW9TZW5k
LnNldFRleHQodmlkZW9TZW5kU3RhdC50b1N0cmluZygpKTsKLSAgICBodWRWaWV3VmlkZW9SZWN2
LnNldFRleHQodmlkZW9SZWN2U3RhdC50b1N0cmluZygpKTsKLQotICAgIGlmICh2aWRlb0NhbGxF
bmFibGVkKSB7Ci0gICAgICBpZiAoZnBzICE9IG51bGwpIHsKLSAgICAgICAgZW5jb2RlclN0YXQu
YXBwZW5kKCJGcHM6ICAiKS5hcHBlbmQoZnBzKS5hcHBlbmQoIlxuIik7Ci0gICAgICB9Ci0gICAg
ICBpZiAodGFyZ2V0Qml0cmF0ZSAhPSBudWxsKSB7Ci0gICAgICAgIGVuY29kZXJTdGF0LmFwcGVu
ZCgiVGFyZ2V0IEJSOiAiKS5hcHBlbmQodGFyZ2V0Qml0cmF0ZSkuYXBwZW5kKCJcbiIpOwotICAg
ICAgfQotICAgICAgaWYgKGFjdHVhbEJpdHJhdGUgIT0gbnVsbCkgewotICAgICAgICBlbmNvZGVy
U3RhdC5hcHBlbmQoIkFjdHVhbCBCUjogIikuYXBwZW5kKGFjdHVhbEJpdHJhdGUpLmFwcGVuZCgi
XG4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY3B1TW9uaXRvciAhPSBudWxsKSB7Ci0g
ICAgICBlbmNvZGVyU3RhdC5hcHBlbmQoIkNQVSU6ICIpCi0gICAgICAgICAgLmFwcGVuZChjcHVN
b25pdG9yLmdldENwdVVzYWdlQ3VycmVudCgpKQotICAgICAgICAgIC5hcHBlbmQoIi8iKQotICAg
ICAgICAgIC5hcHBlbmQoY3B1TW9uaXRvci5nZXRDcHVVc2FnZUF2ZXJhZ2UoKSkKLSAgICAgICAg
ICAuYXBwZW5kKCIuIEZyZXE6ICIpCi0gICAgICAgICAgLmFwcGVuZChjcHVNb25pdG9yLmdldEZy
ZXF1ZW5jeVNjYWxlQXZlcmFnZSgpKTsKLSAgICB9Ci0gICAgZW5jb2RlclN0YXRWaWV3LnNldFRl
eHQoZW5jb2RlclN0YXQudG9TdHJpbmcoKSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy9QZWVyQ29ubmVjdGlvbkNsaWVudC5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9QZWVyQ29ubmVjdGlvbkNsaWVudC5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUGVlckNvbm5lY3Rp
b25DbGllbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDExNjggKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lk
LmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm9zLkVudmlyb25tZW50OwotaW1wb3J0
IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxv
ZzsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWlt
cG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1TZXQ7Ci1p
bXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBv
cnQgamF2YS51dGlsLlRpbWVyOwotaW1wb3J0IGphdmEudXRpbC5UaW1lclRhc2s7Ci1pbXBvcnQg
amF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJy
ZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0
Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLWltcG9ydCBvcmcuYXBwc3Bv
dC5hcHBydGMuQXBwUlRDQ2xpZW50LlNpZ25hbGluZ1BhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5BdWRpb1NvdXJjZTsKLWltcG9ydCBvcmcud2VicnRjLkF1ZGlvVHJhY2s7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5DYW1lcmFWaWRlb0NhcHR1cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuRGF0YUNo
YW5uZWw7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FZ2xCYXNlOwotaW1wb3J0IG9yZy53ZWJydGMuSWNl
Q2FuZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLWltcG9ydCBvcmcud2VicnRj
Lk1lZGlhQ29uc3RyYWludHM7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5NZWRpYVN0cmVhbTsKLWltcG9y
dCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5l
Y3Rpb24uSWNlQ29ubmVjdGlvblN0YXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rp
b25GYWN0b3J5OwotaW1wb3J0IG9yZy53ZWJydGMuUnRwUGFyYW1ldGVyczsKLWltcG9ydCBvcmcu
d2VicnRjLlJ0cFNlbmRlcjsKLWltcG9ydCBvcmcud2VicnRjLlNkcE9ic2VydmVyOwotaW1wb3J0
IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuU3RhdHNP
YnNlcnZlcjsKLWltcG9ydCBvcmcud2VicnRjLlN0YXRzUmVwb3J0OwotaW1wb3J0IG9yZy53ZWJy
dGMuVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXI7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5WaWRlb1NvdXJjZTsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvVHJhY2s7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy52b2ljZWVuZ2luZS5XZWJSdGNBdWRpb01hbmFnZXI7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy52b2ljZWVuZ2luZS5XZWJSdGNBdWRpb1V0aWxzOwotCi0vKioKLSAqIFBl
ZXIgY29ubmVjdGlvbiBjbGllbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogPHA+QWxsIHB1Ymxp
YyBtZXRob2RzIGFyZSByb3V0ZWQgdG8gbG9jYWwgbG9vcGVyIHRocmVhZC4KLSAqIEFsbCBQZWVy
Q29ubmVjdGlvbkV2ZW50cyBjYWxsYmFja3MgYXJlIGludm9rZWQgZnJvbSB0aGUgc2FtZSBsb29w
ZXIgdGhyZWFkLgotICogVGhpcyBjbGFzcyBpcyBhIHNpbmdsZXRvbi4KLSAqLwotcHVibGljIGNs
YXNzIFBlZXJDb25uZWN0aW9uQ2xpZW50IHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VklERU9fVFJBQ0tfSUQgPSAiQVJEQU1TdjAiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmlu
ZyBBVURJT19UUkFDS19JRCA9ICJBUkRBTVNhMCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3Ry
aW5nIFZJREVPX1RSQUNLX1RZUEUgPSAidmlkZW8iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIlBDUlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFZJREVPX0NPREVDX1ZQOCA9ICJWUDgiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VklERU9fQ09ERUNfVlA5ID0gIlZQOSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBW
SURFT19DT0RFQ19IMjY0ID0gIkgyNjQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
QVVESU9fQ09ERUNfT1BVUyA9ICJvcHVzIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IEFVRElPX0NPREVDX0lTQUMgPSAiSVNBQyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBWSURFT19DT0RFQ19QQVJBTV9TVEFSVF9CSVRSQVRFID0gIngtZ29vZ2xlLXN0YXJ0LWJpdHJh
dGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fQ09ERUNfUEFSQU1fQklU
UkFURSA9ICJtYXhhdmVyYWdlYml0cmF0ZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBBVURJT19FQ0hPX0NBTkNFTExBVElPTl9DT05TVFJBSU5UID0gImdvb2dFY2hvQ2FuY2VsbGF0
aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0FVVE9fR0FJTl9DT05U
Uk9MX0NPTlNUUkFJTlQgPSAiZ29vZ0F1dG9HYWluQ29udHJvbCI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBBVURJT19ISUdIX1BBU1NfRklMVEVSX0NPTlNUUkFJTlQgPSAiZ29vZ0hp
Z2hwYXNzRmlsdGVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX05PSVNF
X1NVUFBSRVNTSU9OX0NPTlNUUkFJTlQgPSAiZ29vZ05vaXNlU3VwcHJlc3Npb24iOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fTEVWRUxfQ09OVFJPTF9DT05TVFJBSU5UID0g
ImxldmVsQ29udHJvbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBEVExTX1NSVFBf
S0VZX0FHUkVFTUVOVF9DT05TVFJBSU5UID0gIkR0bHNTcnRwS2V5QWdyZWVtZW50IjsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IEhEX1ZJREVPX1dJRFRIID0gMTI4MDsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IEhEX1ZJREVPX0hFSUdIVCA9IDcyMDsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IEJQU19JTl9LQlBTID0gMTAwMDsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQ
ZWVyQ29ubmVjdGlvbkNsaWVudCBpbnN0YW5jZSA9IG5ldyBQZWVyQ29ubmVjdGlvbkNsaWVudCgp
OwotICBwcml2YXRlIGZpbmFsIFBDT2JzZXJ2ZXIgcGNPYnNlcnZlciA9IG5ldyBQQ09ic2VydmVy
KCk7Ci0gIHByaXZhdGUgZmluYWwgU0RQT2JzZXJ2ZXIgc2RwT2JzZXJ2ZXIgPSBuZXcgU0RQT2Jz
ZXJ2ZXIoKTsKLSAgcHJpdmF0ZSBmaW5hbCBTY2hlZHVsZWRFeGVjdXRvclNlcnZpY2UgZXhlY3V0
b3I7Ci0KLSAgcHJpdmF0ZSBDb250ZXh0IGNvbnRleHQ7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rp
b25GYWN0b3J5IGZhY3Rvcnk7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb24gcGVlckNvbm5lY3Rp
b247Ci0gIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBudWxsOwotICBw
cml2YXRlIEF1ZGlvU291cmNlIGF1ZGlvU291cmNlOwotICBwcml2YXRlIFZpZGVvU291cmNlIHZp
ZGVvU291cmNlOwotICBwcml2YXRlIGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZDsKLSAgcHJpdmF0
ZSBib29sZWFuIHByZWZlcklzYWM7Ci0gIHByaXZhdGUgU3RyaW5nIHByZWZlcnJlZFZpZGVvQ29k
ZWM7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aWRlb0NhcHR1cmVyU3RvcHBlZDsKLSAgcHJpdmF0ZSBi
b29sZWFuIGlzRXJyb3I7Ci0gIHByaXZhdGUgVGltZXIgc3RhdHNUaW1lcjsKLSAgcHJpdmF0ZSBW
aWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBsb2NhbFJlbmRlcjsKLSAgcHJpdmF0ZSBMaXN0PFZpZGVv
UmVuZGVyZXIuQ2FsbGJhY2tzPiByZW1vdGVSZW5kZXJzOwotICBwcml2YXRlIFNpZ25hbGluZ1Bh
cmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVyczsKLSAgcHJpdmF0ZSBNZWRpYUNvbnN0cmFpbnRz
IHBjQ29uc3RyYWludHM7Ci0gIHByaXZhdGUgaW50IHZpZGVvV2lkdGg7Ci0gIHByaXZhdGUgaW50
IHZpZGVvSGVpZ2h0OwotICBwcml2YXRlIGludCB2aWRlb0ZwczsKLSAgcHJpdmF0ZSBNZWRpYUNv
bnN0cmFpbnRzIGF1ZGlvQ29uc3RyYWludHM7Ci0gIHByaXZhdGUgUGFyY2VsRmlsZURlc2NyaXB0
b3IgYWVjRHVtcEZpbGVEZXNjcmlwdG9yOwotICBwcml2YXRlIE1lZGlhQ29uc3RyYWludHMgc2Rw
TWVkaWFDb25zdHJhaW50czsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVl
ckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICAvLyBRdWV1ZWQgcmVtb3RlIElDRSBjYW5kaWRhdGVz
IGFyZSBjb25zdW1lZCBvbmx5IGFmdGVyIGJvdGggbG9jYWwgYW5kCi0gIC8vIHJlbW90ZSBkZXNj
cmlwdGlvbnMgYXJlIHNldC4gU2ltaWxhcmx5IGxvY2FsIElDRSBjYW5kaWRhdGVzIGFyZSBzZW50
IHRvCi0gIC8vIHJlbW90ZSBwZWVyIGFmdGVyIGJvdGggbG9jYWwgYW5kIHJlbW90ZSBkZXNjcmlw
dGlvbiBhcmUgc2V0LgotICBwcml2YXRlIExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPiBxdWV1ZWRS
ZW1vdGVDYW5kaWRhdGVzOwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uRXZlbnRzIGV2ZW50czsK
LSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhdG9yOwotICBwcml2YXRlIFNlc3Npb25EZXNjcmlw
dGlvbiBsb2NhbFNkcDsgLy8gZWl0aGVyIG9mZmVyIG9yIGFuc3dlciBTRFAKLSAgcHJpdmF0ZSBN
ZWRpYVN0cmVhbSBtZWRpYVN0cmVhbTsKLSAgcHJpdmF0ZSBWaWRlb0NhcHR1cmVyIHZpZGVvQ2Fw
dHVyZXI7Ci0gIC8vIGVuYWJsZVZpZGVvIGlzIHNldCB0byB0cnVlIGlmIHZpZGVvIHNob3VsZCBi
ZSByZW5kZXJlZCBhbmQgc2VudC4KLSAgcHJpdmF0ZSBib29sZWFuIHJlbmRlclZpZGVvOwotICBw
cml2YXRlIFZpZGVvVHJhY2sgbG9jYWxWaWRlb1RyYWNrOwotICBwcml2YXRlIFZpZGVvVHJhY2sg
cmVtb3RlVmlkZW9UcmFjazsKLSAgcHJpdmF0ZSBSdHBTZW5kZXIgbG9jYWxWaWRlb1NlbmRlcjsK
LSAgLy8gZW5hYmxlQXVkaW8gaXMgc2V0IHRvIHRydWUgaWYgYXVkaW8gc2hvdWxkIGJlIHNlbnQu
Ci0gIHByaXZhdGUgYm9vbGVhbiBlbmFibGVBdWRpbzsKLSAgcHJpdmF0ZSBBdWRpb1RyYWNrIGxv
Y2FsQXVkaW9UcmFjazsKLQotICAvKioKLSAgICogUGVlciBjb25uZWN0aW9uIHBhcmFtZXRlcnMu
Ci0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNzIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyB7
Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZDsKLSAgICBwdWJsaWMg
ZmluYWwgYm9vbGVhbiBsb29wYmFjazsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB0cmFjaW5n
OwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdmlkZW9XaWR0aDsKLSAgICBwdWJsaWMgZmluYWwgaW50
IHZpZGVvSGVpZ2h0OwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdmlkZW9GcHM7Ci0gICAgcHVibGlj
IGZpbmFsIGludCB2aWRlb01heEJpdHJhdGU7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB2aWRl
b0NvZGVjOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlv
bjsKLSAgICBwdWJsaWMgZmluYWwgaW50IGF1ZGlvU3RhcnRCaXRyYXRlOwotICAgIHB1YmxpYyBm
aW5hbCBTdHJpbmcgYXVkaW9Db2RlYzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBub0F1ZGlv
UHJvY2Vzc2luZzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBhZWNEdW1wOwotICAgIHB1Ymxp
YyBmaW5hbCBib29sZWFuIHVzZU9wZW5TTEVTOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGRp
c2FibGVCdWlsdEluQUVDOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGRpc2FibGVCdWlsdElu
QUdDOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGRpc2FibGVCdWlsdEluTlM7Ci0gICAgcHVi
bGljIGZpbmFsIGJvb2xlYW4gZW5hYmxlTGV2ZWxDb250cm9sOwotCi0gICAgcHVibGljIFBlZXJD
b25uZWN0aW9uUGFyYW1ldGVycyhib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQsIGJvb2xlYW4gbG9v
cGJhY2ssIGJvb2xlYW4gdHJhY2luZywKLSAgICAgICAgaW50IHZpZGVvV2lkdGgsIGludCB2aWRl
b0hlaWdodCwgaW50IHZpZGVvRnBzLCBpbnQgdmlkZW9NYXhCaXRyYXRlLCBTdHJpbmcgdmlkZW9D
b2RlYywKLSAgICAgICAgYm9vbGVhbiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24sIGludCBhdWRp
b1N0YXJ0Qml0cmF0ZSwgU3RyaW5nIGF1ZGlvQ29kZWMsCi0gICAgICAgIGJvb2xlYW4gbm9BdWRp
b1Byb2Nlc3NpbmcsIGJvb2xlYW4gYWVjRHVtcCwgYm9vbGVhbiB1c2VPcGVuU0xFUywgYm9vbGVh
biBkaXNhYmxlQnVpbHRJbkFFQywKLSAgICAgICAgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbkFHQywg
Ym9vbGVhbiBkaXNhYmxlQnVpbHRJbk5TLCBib29sZWFuIGVuYWJsZUxldmVsQ29udHJvbCkgewot
ICAgICAgdGhpcy52aWRlb0NhbGxFbmFibGVkID0gdmlkZW9DYWxsRW5hYmxlZDsKLSAgICAgIHRo
aXMubG9vcGJhY2sgPSBsb29wYmFjazsKLSAgICAgIHRoaXMudHJhY2luZyA9IHRyYWNpbmc7Ci0g
ICAgICB0aGlzLnZpZGVvV2lkdGggPSB2aWRlb1dpZHRoOwotICAgICAgdGhpcy52aWRlb0hlaWdo
dCA9IHZpZGVvSGVpZ2h0OwotICAgICAgdGhpcy52aWRlb0ZwcyA9IHZpZGVvRnBzOwotICAgICAg
dGhpcy52aWRlb01heEJpdHJhdGUgPSB2aWRlb01heEJpdHJhdGU7Ci0gICAgICB0aGlzLnZpZGVv
Q29kZWMgPSB2aWRlb0NvZGVjOwotICAgICAgdGhpcy52aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24g
PSB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb247Ci0gICAgICB0aGlzLmF1ZGlvU3RhcnRCaXRyYXRl
ID0gYXVkaW9TdGFydEJpdHJhdGU7Ci0gICAgICB0aGlzLmF1ZGlvQ29kZWMgPSBhdWRpb0NvZGVj
OwotICAgICAgdGhpcy5ub0F1ZGlvUHJvY2Vzc2luZyA9IG5vQXVkaW9Qcm9jZXNzaW5nOwotICAg
ICAgdGhpcy5hZWNEdW1wID0gYWVjRHVtcDsKLSAgICAgIHRoaXMudXNlT3BlblNMRVMgPSB1c2VP
cGVuU0xFUzsKLSAgICAgIHRoaXMuZGlzYWJsZUJ1aWx0SW5BRUMgPSBkaXNhYmxlQnVpbHRJbkFF
QzsKLSAgICAgIHRoaXMuZGlzYWJsZUJ1aWx0SW5BR0MgPSBkaXNhYmxlQnVpbHRJbkFHQzsKLSAg
ICAgIHRoaXMuZGlzYWJsZUJ1aWx0SW5OUyA9IGRpc2FibGVCdWlsdEluTlM7Ci0gICAgICB0aGlz
LmVuYWJsZUxldmVsQ29udHJvbCA9IGVuYWJsZUxldmVsQ29udHJvbDsKLSAgICB9Ci0gIH0KLQot
ICAvKioKLSAgICogUGVlciBjb25uZWN0aW9uIGV2ZW50cy4KLSAgICovCi0gIHB1YmxpYyBpbnRl
cmZhY2UgUGVlckNvbm5lY3Rpb25FdmVudHMgewotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZp
cmVkIG9uY2UgbG9jYWwgU0RQIGlzIGNyZWF0ZWQgYW5kIHNldC4KLSAgICAgKi8KLSAgICB2b2lk
IG9uTG9jYWxEZXNjcmlwdGlvbihmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKTsKLQotICAg
IC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgbG9jYWwgSWNlIGNhbmRpZGF0ZSBpcyBn
ZW5lcmF0ZWQuCi0gICAgICovCi0gICAgdm9pZCBvbkljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5k
aWRhdGUgY2FuZGlkYXRlKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2Ug
bG9jYWwgSUNFIGNhbmRpZGF0ZXMgYXJlIHJlbW92ZWQuCi0gICAgICovCi0gICAgdm9pZCBvbklj
ZUNhbmRpZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpOwotCi0g
ICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBjb25uZWN0aW9uIGlzIGVzdGFibGlz
aGVkIChJY2VDb25uZWN0aW9uU3RhdGUgaXMKLSAgICAgKiBDT05ORUNURUQpLgotICAgICAqLwot
ICAgIHZvaWQgb25JY2VDb25uZWN0ZWQoKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZp
cmVkIG9uY2UgY29ubmVjdGlvbiBpcyBjbG9zZWQgKEljZUNvbm5lY3Rpb25TdGF0ZSBpcwotICAg
ICAqIERJU0NPTk5FQ1RFRCkuCi0gICAgICovCi0gICAgdm9pZCBvbkljZURpc2Nvbm5lY3RlZCgp
OwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBwZWVyIGNvbm5lY3Rpb24g
aXMgY2xvc2VkLgotICAgICAqLwotICAgIHZvaWQgb25QZWVyQ29ubmVjdGlvbkNsb3NlZCgpOwot
Ci0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBwZWVyIGNvbm5lY3Rpb24gc3Rh
dGlzdGljcyBpcyByZWFkeS4KLSAgICAgKi8KLSAgICB2b2lkIG9uUGVlckNvbm5lY3Rpb25TdGF0
c1JlYWR5KGZpbmFsIFN0YXRzUmVwb3J0W10gcmVwb3J0cyk7Ci0KLSAgICAvKioKLSAgICAgKiBD
YWxsYmFjayBmaXJlZCBvbmNlIHBlZXIgY29ubmVjdGlvbiBlcnJvciBoYXBwZW5lZC4KLSAgICAg
Ki8KLSAgICB2b2lkIG9uUGVlckNvbm5lY3Rpb25FcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRp
b24pOwotICB9Ci0KLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbkNsaWVudCgpIHsKLSAgICAvLyBF
eGVjdXRvciB0aHJlYWQgaXMgc3RhcnRlZCBvbmNlIGluIHByaXZhdGUgY3RvciBhbmQgaXMgdXNl
ZCBmb3IgYWxsCi0gICAgLy8gcGVlciBjb25uZWN0aW9uIEFQSSBjYWxscyB0byBlbnN1cmUgbmV3
IHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5IGlzCi0gICAgLy8gY3JlYXRlZCBvbiB0aGUgc2FtZSB0
aHJlYWQgYXMgcHJldmlvdXNseSBkZXN0cm95ZWQgZmFjdG9yeS4KLSAgICBleGVjdXRvciA9IEV4
ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRTY2hlZHVsZWRFeGVjdXRvcigpOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBQZWVyQ29ubmVjdGlvbkNsaWVudCBnZXRJbnN0YW5jZSgpIHsKLSAgICByZXR1
cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRQZWVyQ29ubmVjdGlvbkZhY3Rv
cnlPcHRpb25zKFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMpIHsKLSAgICB0
aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlUGVlckNv
bm5lY3Rpb25GYWN0b3J5KGZpbmFsIENvbnRleHQgY29udGV4dCwKLSAgICAgIGZpbmFsIFBlZXJD
b25uZWN0aW9uUGFyYW1ldGVycyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMsIGZpbmFsIFBlZXJD
b25uZWN0aW9uRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMucGVlckNvbm5lY3Rpb25QYXJhbWV0
ZXJzID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRz
OwotICAgIHZpZGVvQ2FsbEVuYWJsZWQgPSBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9D
YWxsRW5hYmxlZDsKLSAgICAvLyBSZXNldCB2YXJpYWJsZXMgdG8gaW5pdGlhbCBzdGF0ZXMuCi0g
ICAgdGhpcy5jb250ZXh0ID0gbnVsbDsKLSAgICBmYWN0b3J5ID0gbnVsbDsKLSAgICBwZWVyQ29u
bmVjdGlvbiA9IG51bGw7Ci0gICAgcHJlZmVySXNhYyA9IGZhbHNlOwotICAgIHZpZGVvQ2FwdHVy
ZXJTdG9wcGVkID0gZmFsc2U7Ci0gICAgaXNFcnJvciA9IGZhbHNlOwotICAgIHF1ZXVlZFJlbW90
ZUNhbmRpZGF0ZXMgPSBudWxsOwotICAgIGxvY2FsU2RwID0gbnVsbDsgLy8gZWl0aGVyIG9mZmVy
IG9yIGFuc3dlciBTRFAKLSAgICBtZWRpYVN0cmVhbSA9IG51bGw7Ci0gICAgdmlkZW9DYXB0dXJl
ciA9IG51bGw7Ci0gICAgcmVuZGVyVmlkZW8gPSB0cnVlOwotICAgIGxvY2FsVmlkZW9UcmFjayA9
IG51bGw7Ci0gICAgcmVtb3RlVmlkZW9UcmFjayA9IG51bGw7Ci0gICAgbG9jYWxWaWRlb1NlbmRl
ciA9IG51bGw7Ci0gICAgZW5hYmxlQXVkaW8gPSB0cnVlOwotICAgIGxvY2FsQXVkaW9UcmFjayA9
IG51bGw7Ci0gICAgc3RhdHNUaW1lciA9IG5ldyBUaW1lcigpOwotCi0gICAgZXhlY3V0b3IuZXhl
Y3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJuYWwoY29u
dGV4dCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVQZWVy
Q29ubmVjdGlvbihmaW5hbCBFZ2xCYXNlLkNvbnRleHQgcmVuZGVyRUdMQ29udGV4dCwKLSAgICAg
IGZpbmFsIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGxvY2FsUmVuZGVyLCBmaW5hbCBWaWRlb1Jl
bmRlcmVyLkNhbGxiYWNrcyByZW1vdGVSZW5kZXIsCi0gICAgICBmaW5hbCBWaWRlb0NhcHR1cmVy
IHZpZGVvQ2FwdHVyZXIsIGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1l
dGVycykgewotICAgIGNyZWF0ZVBlZXJDb25uZWN0aW9uKHJlbmRlckVHTENvbnRleHQsIGxvY2Fs
UmVuZGVyLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KHJlbW90ZVJlbmRlciksCi0gICAgICAg
IHZpZGVvQ2FwdHVyZXIsIHNpZ25hbGluZ1BhcmFtZXRlcnMpOwotICB9Ci0gIHB1YmxpYyB2b2lk
IGNyZWF0ZVBlZXJDb25uZWN0aW9uKGZpbmFsIEVnbEJhc2UuQ29udGV4dCByZW5kZXJFR0xDb250
ZXh0LAotICAgICAgZmluYWwgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgbG9jYWxSZW5kZXIsIGZp
bmFsIExpc3Q8VmlkZW9SZW5kZXJlci5DYWxsYmFja3M+IHJlbW90ZVJlbmRlcnMsCi0gICAgICBm
aW5hbCBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIsIGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRl
cnMgc2lnbmFsaW5nUGFyYW1ldGVycykgewotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRl
cnMgPT0gbnVsbCkgewotICAgICAgTG9nLmUoVEFHLCAiQ3JlYXRpbmcgcGVlciBjb25uZWN0aW9u
IHdpdGhvdXQgaW5pdGlhbGl6aW5nIGZhY3RvcnkuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHRoaXMubG9jYWxSZW5kZXIgPSBsb2NhbFJlbmRlcjsKLSAgICB0aGlzLnJlbW90ZVJlbmRl
cnMgPSByZW1vdGVSZW5kZXJzOwotICAgIHRoaXMudmlkZW9DYXB0dXJlciA9IHZpZGVvQ2FwdHVy
ZXI7Ci0gICAgdGhpcy5zaWduYWxpbmdQYXJhbWV0ZXJzID0gc2lnbmFsaW5nUGFyYW1ldGVyczsK
LSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB0cnkgewotICAgICAgICAgIGNyZWF0
ZU1lZGlhQ29uc3RyYWludHNJbnRlcm5hbCgpOwotICAgICAgICAgIGNyZWF0ZVBlZXJDb25uZWN0
aW9uSW50ZXJuYWwocmVuZGVyRUdMQ29udGV4dCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlv
biBlKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgcGVlciBjb25u
ZWN0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIHRocm93IGU7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAg
IGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNsb3NlSW50ZXJuYWwoKTsKLSAgICAgIH0K
LSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlzVmlkZW9DYWxsRW5hYmxlZCgpIHsK
LSAgICByZXR1cm4gdmlkZW9DYWxsRW5hYmxlZDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVh
dGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcm5hbChDb250ZXh0IGNvbnRleHQpIHsKLSAgICBQ
ZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUludGVybmFsVHJhY2VyKCk7Ci0gICAgaWYg
KHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy50cmFjaW5nKSB7Ci0gICAgICBQZWVyQ29ubmVjdGlv
bkZhY3Rvcnkuc3RhcnRJbnRlcm5hbFRyYWNpbmdDYXB0dXJlKAotICAgICAgICAgIEVudmlyb25t
ZW50LmdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9yeSgpLmdldEFic29sdXRlUGF0aCgpICsgRmls
ZS5zZXBhcmF0b3IKLSAgICAgICAgICArICJ3ZWJydGMtdHJhY2UudHh0Iik7Ci0gICAgfQotICAg
IExvZy5kKFRBRywKLSAgICAgICAgIkNyZWF0ZSBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeS4gVXNl
IHZpZGVvOiAiICsgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpOwot
ICAgIGlzRXJyb3IgPSBmYWxzZTsKLQotICAgIC8vIEluaXRpYWxpemUgZmllbGQgdHJpYWxzLgot
ICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0aWFsaXplRmllbGRUcmlhbHMoIiIpOwotCi0g
ICAgLy8gQ2hlY2sgcHJlZmVycmVkIHZpZGVvIGNvZGVjLgotICAgIHByZWZlcnJlZFZpZGVvQ29k
ZWMgPSBWSURFT19DT0RFQ19WUDg7Ci0gICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQgJiYgcGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvQ29kZWMgIT0gbnVsbCkgewotICAgICAgaWYgKHBlZXJD
b25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NvZGVjLmVxdWFscyhWSURFT19DT0RFQ19WUDkpKSB7
Ci0gICAgICAgIHByZWZlcnJlZFZpZGVvQ29kZWMgPSBWSURFT19DT0RFQ19WUDk7Ci0gICAgICB9
IGVsc2UgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NvZGVjLmVxdWFscyhWSURF
T19DT0RFQ19IMjY0KSkgewotICAgICAgICBwcmVmZXJyZWRWaWRlb0NvZGVjID0gVklERU9fQ09E
RUNfSDI2NDsKLSAgICAgIH0KLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiUGVyZWZlcnJlZCB2aWRl
byBjb2RlYzogIiArIHByZWZlcnJlZFZpZGVvQ29kZWMpOwotCi0gICAgLy8gQ2hlY2sgaWYgSVNB
QyBpcyB1c2VkIGJ5IGRlZmF1bHQuCi0gICAgcHJlZmVySXNhYyA9IHBlZXJDb25uZWN0aW9uUGFy
YW1ldGVycy5hdWRpb0NvZGVjICE9IG51bGwKLSAgICAgICAgJiYgcGVlckNvbm5lY3Rpb25QYXJh
bWV0ZXJzLmF1ZGlvQ29kZWMuZXF1YWxzKEFVRElPX0NPREVDX0lTQUMpOwotCi0gICAgLy8gRW5h
YmxlL2Rpc2FibGUgT3BlblNMIEVTIHBsYXliYWNrLgotICAgIGlmICghcGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzLnVzZU9wZW5TTEVTKSB7Ci0gICAgICBMb2cuZChUQUcsICJEaXNhYmxlIE9wZW5T
TCBFUyBhdWRpbyBldmVuIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVk
aW9NYW5hZ2VyLnNldEJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UodHJ1ZSAvKiBlbmFi
bGUgKi8pOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZChUQUcsICJBbGxvdyBPcGVuU0wgRVMg
YXVkaW8gaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb01hbmFnZXIu
c2V0QmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZShmYWxzZSk7Ci0gICAgfQotCi0gICAg
aWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5kaXNhYmxlQnVpbHRJbkFFQykgewotICAgICAg
TG9nLmQoVEFHLCAiRGlzYWJsZSBidWlsdC1pbiBBRUMgZXZlbiBpZiBkZXZpY2Ugc3VwcG9ydHMg
aXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWRBY291c3RpY0VjaG9D
YW5jZWxlcih0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAiRW5hYmxlIGJ1
aWx0LWluIEFFQyBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRp
bHMuc2V0V2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcihmYWxzZSk7Ci0gICAgfQotCi0g
ICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5kaXNhYmxlQnVpbHRJbkFHQykgewotICAg
ICAgTG9nLmQoVEFHLCAiRGlzYWJsZSBidWlsdC1pbiBBR0MgZXZlbiBpZiBkZXZpY2Ugc3VwcG9y
dHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNH
YWluQ29udHJvbCh0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAiRW5hYmxl
IGJ1aWx0LWluIEFHQyBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlv
VXRpbHMuc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJvbChmYWxzZSk7Ci0gICAgfQot
Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5kaXNhYmxlQnVpbHRJbk5TKSB7Ci0g
ICAgICBMb2cuZChUQUcsICJEaXNhYmxlIGJ1aWx0LWluIE5TIGV2ZW4gaWYgZGV2aWNlIHN1cHBv
cnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkTm9pc2VTdXBw
cmVzc29yKHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZChUQUcsICJFbmFibGUgYnVp
bHQtaW4gTlMgaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxz
LnNldFdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBD
cmVhdGUgcGVlciBjb25uZWN0aW9uIGZhY3RvcnkuCi0gICAgaWYgKCFQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkuaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzKAotICAgICAgICAgICAgY29udGV4dCwgdHJ1
ZSwgdHJ1ZSwgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvQ29kZWNId0FjY2VsZXJhdGlv
bikpIHsKLSAgICAgIGV2ZW50cy5vblBlZXJDb25uZWN0aW9uRXJyb3IoIkZhaWxlZCB0byBpbml0
aWFsaXplQW5kcm9pZEdsb2JhbHMiKTsKLSAgICB9Ci0gICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkg
ewotICAgICAgTG9nLmQoVEFHLCAiRmFjdG9yeSBuZXR3b3JrSWdub3JlTWFzayBvcHRpb246ICIg
KyBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrKTsKLSAgICB9Ci0gICAgdGhpcy5jb250ZXh0ID0g
Y29udGV4dDsKLSAgICBmYWN0b3J5ID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9yeShvcHRpb25z
KTsKLSAgICBMb2cuZChUQUcsICJQZWVyIGNvbm5lY3Rpb24gZmFjdG9yeSBjcmVhdGVkLiIpOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU1lZGlhQ29uc3RyYWludHNJbnRlcm5hbCgpIHsK
LSAgICAvLyBDcmVhdGUgcGVlciBjb25uZWN0aW9uIGNvbnN0cmFpbnRzLgotICAgIHBjQ29uc3Ry
YWludHMgPSBuZXcgTWVkaWFDb25zdHJhaW50cygpOwotICAgIC8vIEVuYWJsZSBEVExTIGZvciBu
b3JtYWwgY2FsbHMgYW5kIGRpc2FibGUgZm9yIGxvb3BiYWNrIGNhbGxzLgotICAgIGlmIChwZWVy
Q29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgIHBjQ29uc3RyYWludHMub3B0
aW9uYWwuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihE
VExTX1NSVFBfS0VZX0FHUkVFTUVOVF9DT05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgIHBjQ29uc3RyYWludHMub3B0aW9uYWwuYWRkKAotICAgICAgICAgIG5ldyBNZWRp
YUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihEVExTX1NSVFBfS0VZX0FHUkVFTUVOVF9DT05TVFJB
SU5ULCAidHJ1ZSIpKTsKLSAgICB9Ci0KLSAgICAvLyBDaGVjayBpZiB0aGVyZSBpcyBhIGNhbWVy
YSBvbiBkZXZpY2UgYW5kIGRpc2FibGUgdmlkZW8gY2FsbCBpZiBub3QuCi0gICAgaWYgKHZpZGVv
Q2FwdHVyZXIgPT0gbnVsbCkgewotICAgICAgTG9nLncoVEFHLCAiTm8gY2FtZXJhIG9uIGRldmlj
ZS4gU3dpdGNoIHRvIGF1ZGlvIG9ubHkgY2FsbC4iKTsKLSAgICAgIHZpZGVvQ2FsbEVuYWJsZWQg
PSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gQ3JlYXRlIHZpZGVvIGNvbnN0cmFpbnRzIGlmIHZpZGVv
IGNhbGwgaXMgZW5hYmxlZC4KLSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgdmlk
ZW9XaWR0aCA9IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb1dpZHRoOwotICAgICAgdmlk
ZW9IZWlnaHQgPSBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9IZWlnaHQ7Ci0gICAgICB2
aWRlb0ZwcyA9IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0ZwczsKLQotICAgICAgLy8g
SWYgdmlkZW8gcmVzb2x1dGlvbiBpcyBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0IHRvIEhELgotICAg
ICAgaWYgKHZpZGVvV2lkdGggPT0gMCB8fCB2aWRlb0hlaWdodCA9PSAwKSB7Ci0gICAgICAgIHZp
ZGVvV2lkdGggPSBIRF9WSURFT19XSURUSDsKLSAgICAgICAgdmlkZW9IZWlnaHQgPSBIRF9WSURF
T19IRUlHSFQ7Ci0gICAgICB9Ci0KLSAgICAgIC8vIElmIGZwcyBpcyBub3Qgc3BlY2lmaWVkLCBk
ZWZhdWx0IHRvIDMwLgotICAgICAgaWYgKHZpZGVvRnBzID09IDApIHsKLSAgICAgICAgdmlkZW9G
cHMgPSAzMDsKLSAgICAgIH0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJDYXB0dXJpbmcgZm9ybWF0
OiAiICsgdmlkZW9XaWR0aCArICJ4IiArIHZpZGVvSGVpZ2h0ICsgIkAiICsgdmlkZW9GcHMpOwot
ICAgIH0KLQotICAgIC8vIENyZWF0ZSBhdWRpbyBjb25zdHJhaW50cy4KLSAgICBhdWRpb0NvbnN0
cmFpbnRzID0gbmV3IE1lZGlhQ29uc3RyYWludHMoKTsKLSAgICAvLyBhZGRlZCBmb3IgYXVkaW8g
cGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVy
cy5ub0F1ZGlvUHJvY2Vzc2luZykgewotICAgICAgTG9nLmQoVEFHLCAiRGlzYWJsaW5nIGF1ZGlv
IHByb2Nlc3NpbmciKTsKLSAgICAgIGF1ZGlvQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAg
ICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoQVVESU9fRUNIT19DQU5D
RUxMQVRJT05fQ09OU1RSQUlOVCwgImZhbHNlIikpOwotICAgICAgYXVkaW9Db25zdHJhaW50cy5t
YW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFp
cihBVURJT19BVVRPX0dBSU5fQ09OVFJPTF9DT05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAgICBh
dWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3Ry
YWludHMuS2V5VmFsdWVQYWlyKEFVRElPX0hJR0hfUEFTU19GSUxURVJfQ09OU1RSQUlOVCwgImZh
bHNlIikpOwotICAgICAgYXVkaW9Db25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAg
IG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihBVURJT19OT0lTRV9TVVBQUkVTU0lP
Tl9DT05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAgfQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMuZW5hYmxlTGV2ZWxDb250cm9sKSB7Ci0gICAgICBMb2cuZChUQUcsICJFbmFibGlu
ZyBsZXZlbCBjb250cm9sLiIpOwotICAgICAgYXVkaW9Db25zdHJhaW50cy5tYW5kYXRvcnkuYWRk
KAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihBVURJT19MRVZF
TF9DT05UUk9MX0NPTlNUUkFJTlQsICJ0cnVlIikpOwotICAgIH0KLSAgICAvLyBDcmVhdGUgU0RQ
IGNvbnN0cmFpbnRzLgotICAgIHNkcE1lZGlhQ29uc3RyYWludHMgPSBuZXcgTWVkaWFDb25zdHJh
aW50cygpOwotICAgIHNkcE1lZGlhQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAg
bmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKCJPZmZlclRvUmVjZWl2ZUF1ZGlvIiwg
InRydWUiKSk7Ci0gICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQgfHwgcGVlckNvbm5lY3Rpb25QYXJh
bWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICBzZHBNZWRpYUNvbnN0cmFpbnRzLm1hbmRhdG9yeS5h
ZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKCJPZmZlclRv
UmVjZWl2ZVZpZGVvIiwgInRydWUiKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNkcE1lZGlhQ29u
c3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5L
ZXlWYWx1ZVBhaXIoIk9mZmVyVG9SZWNlaXZlVmlkZW8iLCAiZmFsc2UiKSk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVBlZXJDb25uZWN0aW9uSW50ZXJuYWwoRWdsQmFzZS5D
b250ZXh0IHJlbmRlckVHTENvbnRleHQpIHsKLSAgICBpZiAoZmFjdG9yeSA9PSBudWxsIHx8IGlz
RXJyb3IpIHsKLSAgICAgIExvZy5lKFRBRywgIlBlZXJjb25uZWN0aW9uIGZhY3RvcnkgaXMgbm90
IGNyZWF0ZWQiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiQ3JlYXRl
IHBlZXIgY29ubmVjdGlvbi4iKTsKLQotICAgIExvZy5kKFRBRywgIlBDQ29uc3RyYWludHM6ICIg
KyBwY0NvbnN0cmFpbnRzLnRvU3RyaW5nKCkpOwotICAgIHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMg
PSBuZXcgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+KCk7Ci0KLSAgICBpZiAodmlkZW9DYWxsRW5h
YmxlZCkgewotICAgICAgTG9nLmQoVEFHLCAiRUdMQ29udGV4dDogIiArIHJlbmRlckVHTENvbnRl
eHQpOwotICAgICAgZmFjdG9yeS5zZXRWaWRlb0h3QWNjZWxlcmF0aW9uT3B0aW9ucyhyZW5kZXJF
R0xDb250ZXh0LCByZW5kZXJFR0xDb250ZXh0KTsKLSAgICB9Ci0KLSAgICBQZWVyQ29ubmVjdGlv
bi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZyA9Ci0gICAgICAgIG5ldyBQZWVyQ29ubmVjdGlv
bi5SVENDb25maWd1cmF0aW9uKHNpZ25hbGluZ1BhcmFtZXRlcnMuaWNlU2VydmVycyk7Ci0gICAg
Ly8gVENQIGNhbmRpZGF0ZXMgYXJlIG9ubHkgdXNlZnVsIHdoZW4gY29ubmVjdGluZyB0byBhIHNl
cnZlciB0aGF0IHN1cHBvcnRzCi0gICAgLy8gSUNFLVRDUC4KLSAgICBydGNDb25maWcudGNwQ2Fu
ZGlkYXRlUG9saWN5ID0gUGVlckNvbm5lY3Rpb24uVGNwQ2FuZGlkYXRlUG9saWN5LkRJU0FCTEVE
OwotICAgIHJ0Y0NvbmZpZy5idW5kbGVQb2xpY3kgPSBQZWVyQ29ubmVjdGlvbi5CdW5kbGVQb2xp
Y3kuTUFYQlVORExFOwotICAgIHJ0Y0NvbmZpZy5ydGNwTXV4UG9saWN5ID0gUGVlckNvbm5lY3Rp
b24uUnRjcE11eFBvbGljeS5SRVFVSVJFOwotICAgIHJ0Y0NvbmZpZy5jb250aW51YWxHYXRoZXJp
bmdQb2xpY3kgPSBQZWVyQ29ubmVjdGlvbi5Db250aW51YWxHYXRoZXJpbmdQb2xpY3kuR0FUSEVS
X0NPTlRJTlVBTExZOwotICAgIC8vIFVzZSBFQ0RTQSBlbmNyeXB0aW9uLgotICAgIHJ0Y0NvbmZp
Zy5rZXlUeXBlID0gUGVlckNvbm5lY3Rpb24uS2V5VHlwZS5FQ0RTQTsKLQotICAgIHBlZXJDb25u
ZWN0aW9uID0gZmFjdG9yeS5jcmVhdGVQZWVyQ29ubmVjdGlvbihydGNDb25maWcsIHBjQ29uc3Ry
YWludHMsIHBjT2JzZXJ2ZXIpOwotICAgIGlzSW5pdGlhdG9yID0gZmFsc2U7Ci0KLSAgICAvLyBT
ZXQgZGVmYXVsdCBXZWJSVEMgdHJhY2luZyBhbmQgSU5GTyBsaWJqaW5nbGUgbG9nZ2luZy4KLSAg
ICAvLyBOT1RFOiB0aGlzIF9tdXN0XyBoYXBwZW4gd2hpbGUgfGZhY3Rvcnl8IGlzIGFsaXZlIQot
ICAgIExvZ2dpbmcuZW5hYmxlVHJhY2luZygibG9nY2F0OiIsIEVudW1TZXQub2YoTG9nZ2luZy5U
cmFjZUxldmVsLlRSQUNFX0RFRkFVTFQpKTsKLSAgICBMb2dnaW5nLmVuYWJsZUxvZ1RvRGVidWdP
dXRwdXQoTG9nZ2luZy5TZXZlcml0eS5MU19JTkZPKTsKLQotICAgIG1lZGlhU3RyZWFtID0gZmFj
dG9yeS5jcmVhdGVMb2NhbE1lZGlhU3RyZWFtKCJBUkRBTVMiKTsKLSAgICBpZiAodmlkZW9DYWxs
RW5hYmxlZCkgewotICAgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2soY3JlYXRlVmlkZW9UcmFjayh2
aWRlb0NhcHR1cmVyKSk7Ci0gICAgfQotCi0gICAgbWVkaWFTdHJlYW0uYWRkVHJhY2soY3JlYXRl
QXVkaW9UcmFjaygpKTsKLSAgICBwZWVyQ29ubmVjdGlvbi5hZGRTdHJlYW0obWVkaWFTdHJlYW0p
OwotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICBmaW5kVmlkZW9TZW5kZXIoKTsK
LSAgICB9Ci0KLSAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmFlY0R1bXApIHsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIGFlY0R1bXBGaWxlRGVzY3JpcHRvciA9Ci0gICAgICAgICAgICBQ
YXJjZWxGaWxlRGVzY3JpcHRvci5vcGVuKG5ldyBGaWxlKEVudmlyb25tZW50LmdldEV4dGVybmFs
U3RvcmFnZURpcmVjdG9yeSgpLmdldFBhdGgoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKyBGaWxlLnNlcGFyYXRvciArICJEb3dubG9hZC9hdWRpby5hZWNkdW1w
IiksCi0gICAgICAgICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3IuTU9ERV9SRUFEX1dSSVRF
IHwgUGFyY2VsRmlsZURlc2NyaXB0b3IuTU9ERV9DUkVBVEUKLSAgICAgICAgICAgICAgICAgICAg
fCBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1RSVU5DQVRFKTsKLSAgICAgICAgZmFjdG9yeS5z
dGFydEFlY0R1bXAoYWVjRHVtcEZpbGVEZXNjcmlwdG9yLmdldEZkKCksIC0xKTsKLSAgICAgIH0g
Y2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUoVEFHLCAiQ2FuIG5vdCBvcGVu
IGFlY2R1bXAgZmlsZSIsIGUpOwotICAgICAgfQotICAgIH0KLQotICAgIExvZy5kKFRBRywgIlBl
ZXIgY29ubmVjdGlvbiBjcmVhdGVkLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNsb3NlSW50
ZXJuYWwoKSB7Ci0gICAgaWYgKGZhY3RvcnkgIT0gbnVsbCAmJiBwZWVyQ29ubmVjdGlvblBhcmFt
ZXRlcnMuYWVjRHVtcCkgewotICAgICAgZmFjdG9yeS5zdG9wQWVjRHVtcCgpOwotICAgIH0KLSAg
ICBMb2cuZChUQUcsICJDbG9zaW5nIHBlZXIgY29ubmVjdGlvbi4iKTsKLSAgICBzdGF0c1RpbWVy
LmNhbmNlbCgpOwotICAgIGlmIChwZWVyQ29ubmVjdGlvbiAhPSBudWxsKSB7Ci0gICAgICBwZWVy
Q29ubmVjdGlvbi5kaXNwb3NlKCk7Ci0gICAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7Ci0gICAg
fQotICAgIExvZy5kKFRBRywgIkNsb3NpbmcgYXVkaW8gc291cmNlLiIpOwotICAgIGlmIChhdWRp
b1NvdXJjZSAhPSBudWxsKSB7Ci0gICAgICBhdWRpb1NvdXJjZS5kaXNwb3NlKCk7Ci0gICAgICBh
dWRpb1NvdXJjZSA9IG51bGw7Ci0gICAgfQotICAgIExvZy5kKFRBRywgIlN0b3BwaW5nIGNhcHR1
cmUuIik7Ci0gICAgaWYgKHZpZGVvQ2FwdHVyZXIgIT0gbnVsbCkgewotICAgICAgdHJ5IHsKLSAg
ICAgICAgdmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgICAgfSBjYXRjaCAoSW50ZXJy
dXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihl
KTsKLSAgICAgIH0KLSAgICAgIHZpZGVvQ2FwdHVyZXJTdG9wcGVkID0gdHJ1ZTsKLSAgICAgIHZp
ZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotICAgICAgdmlkZW9DYXB0dXJlciA9IG51bGw7Ci0gICAg
fQotICAgIExvZy5kKFRBRywgIkNsb3NpbmcgdmlkZW8gc291cmNlLiIpOwotICAgIGlmICh2aWRl
b1NvdXJjZSAhPSBudWxsKSB7Ci0gICAgICB2aWRlb1NvdXJjZS5kaXNwb3NlKCk7Ci0gICAgICB2
aWRlb1NvdXJjZSA9IG51bGw7Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkNsb3NpbmcgcGVlciBj
b25uZWN0aW9uIGZhY3RvcnkuIik7Ci0gICAgaWYgKGZhY3RvcnkgIT0gbnVsbCkgewotICAgICAg
ZmFjdG9yeS5kaXNwb3NlKCk7Ci0gICAgICBmYWN0b3J5ID0gbnVsbDsKLSAgICB9Ci0gICAgb3B0
aW9ucyA9IG51bGw7Ci0gICAgTG9nLmQoVEFHLCAiQ2xvc2luZyBwZWVyIGNvbm5lY3Rpb24gZG9u
ZS4iKTsKLSAgICBldmVudHMub25QZWVyQ29ubmVjdGlvbkNsb3NlZCgpOwotICAgIFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5zdG9wSW50ZXJuYWxUcmFjaW5nQ2FwdHVyZSgpOwotICAgIFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5zaHV0ZG93bkludGVybmFsVHJhY2VyKCk7Ci0gIH0KLQotICBwdWJsaWMg
Ym9vbGVhbiBpc0hEVmlkZW8oKSB7Ci0gICAgaWYgKCF2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpZGVvV2lkdGggKiB2aWRlb0hl
aWdodCA+PSAxMjgwICogNzIwOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGdldFN0YXRzKCkgewot
ICAgIGlmIChwZWVyQ29ubmVjdGlvbiA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgYm9vbGVhbiBzdWNjZXNzID0gcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMo
bmV3IFN0YXRzT2JzZXJ2ZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IG9uQ29tcGxldGUoZmluYWwgU3RhdHNSZXBvcnRbXSByZXBvcnRzKSB7Ci0gICAgICAgIGV2ZW50
cy5vblBlZXJDb25uZWN0aW9uU3RhdHNSZWFkeShyZXBvcnRzKTsKLSAgICAgIH0KLSAgICB9LCBu
dWxsKTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgIExvZy5lKFRBRywgImdldFN0YXRzKCkg
cmV0dXJucyBmYWxzZSEiKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlbmFibGVTdGF0
c0V2ZW50cyhib29sZWFuIGVuYWJsZSwgaW50IHBlcmlvZE1zKSB7Ci0gICAgaWYgKGVuYWJsZSkg
ewotICAgICAgdHJ5IHsKLSAgICAgICAgc3RhdHNUaW1lci5zY2hlZHVsZShuZXcgVGltZXJUYXNr
KCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICAgICAgICAgIGdldFN0YXRzKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwot
ICAgICAgICAgIH0KLSAgICAgICAgfSwgMCwgcGVyaW9kTXMpOwotICAgICAgfSBjYXRjaCAoRXhj
ZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUoVEFHLCAiQ2FuIG5vdCBzY2hlZHVsZSBzdGF0aXN0
aWNzIHRpbWVyIiwgZSk7Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0YXRzVGltZXIu
Y2FuY2VsKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0QXVkaW9FbmFibGVkKGZp
bmFsIGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
ZW5hYmxlQXVkaW8gPSBlbmFibGU7Ci0gICAgICAgIGlmIChsb2NhbEF1ZGlvVHJhY2sgIT0gbnVs
bCkgewotICAgICAgICAgIGxvY2FsQXVkaW9UcmFjay5zZXRFbmFibGVkKGVuYWJsZUF1ZGlvKTsK
LSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Vmlk
ZW9FbmFibGVkKGZpbmFsIGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgcmVuZGVyVmlkZW8gPSBlbmFibGU7Ci0gICAgICAgIGlmIChsb2NhbFZpZGVv
VHJhY2sgIT0gbnVsbCkgewotICAgICAgICAgIGxvY2FsVmlkZW9UcmFjay5zZXRFbmFibGVkKHJl
bmRlclZpZGVvKTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVtb3RlVmlkZW9UcmFjayAhPSBu
dWxsKSB7Ci0gICAgICAgICAgcmVtb3RlVmlkZW9UcmFjay5zZXRFbmFibGVkKHJlbmRlclZpZGVv
KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3Jl
YXRlT2ZmZXIoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJD
b25uZWN0aW9uICE9IG51bGwgJiYgIWlzRXJyb3IpIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJQ
QyBDcmVhdGUgT0ZGRVIiKTsKLSAgICAgICAgICBpc0luaXRpYXRvciA9IHRydWU7Ci0gICAgICAg
ICAgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoc2RwT2JzZXJ2ZXIsIHNkcE1lZGlhQ29uc3Ry
YWludHMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBjcmVhdGVBbnN3ZXIoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYg
KHBlZXJDb25uZWN0aW9uICE9IG51bGwgJiYgIWlzRXJyb3IpIHsKLSAgICAgICAgICBMb2cuZChU
QUcsICJQQyBjcmVhdGUgQU5TV0VSIik7Ci0gICAgICAgICAgaXNJbml0aWF0b3IgPSBmYWxzZTsK
LSAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIoc2RwT2JzZXJ2ZXIsIHNkcE1l
ZGlhQ29uc3RyYWludHMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBhZGRSZW1vdGVJY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRp
ZGF0ZSkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVj
dGlvbiAhPSBudWxsICYmICFpc0Vycm9yKSB7Ci0gICAgICAgICAgaWYgKHF1ZXVlZFJlbW90ZUNh
bmRpZGF0ZXMgIT0gbnVsbCkgewotICAgICAgICAgICAgcXVldWVkUmVtb3RlQ2FuZGlkYXRlcy5h
ZGQoY2FuZGlkYXRlKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGVlckNvbm5l
Y3Rpb24uYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZW1vdmVSZW1vdGVJY2VD
YW5kaWRhdGVzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICBleGVjdXRv
ci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBpc0Vy
cm9yKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIERyYWluIHRo
ZSBxdWV1ZWQgcmVtb3RlIGNhbmRpZGF0ZXMgaWYgdGhlcmUgaXMgYW55IHNvIHRoYXQKLSAgICAg
ICAgLy8gdGhleSBhcmUgcHJvY2Vzc2VkIGluIHRoZSBwcm9wZXIgb3JkZXIuCi0gICAgICAgIGRy
YWluQ2FuZGlkYXRlcygpOwotICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVJY2VDYW5kaWRh
dGVzKGNhbmRpZGF0ZXMpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
c2V0UmVtb3RlRGVzY3JpcHRpb24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAg
IGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbiA9PSBudWxs
IHx8IGlzRXJyb3IpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgU3Ry
aW5nIHNkcERlc2NyaXB0aW9uID0gc2RwLmRlc2NyaXB0aW9uOwotICAgICAgICBpZiAocHJlZmVy
SXNhYykgewotICAgICAgICAgIHNkcERlc2NyaXB0aW9uID0gcHJlZmVyQ29kZWMoc2RwRGVzY3Jp
cHRpb24sIEFVRElPX0NPREVDX0lTQUMsIHRydWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2
aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICAgICAgc2RwRGVzY3JpcHRpb24gPSBwcmVmZXJDb2Rl
YyhzZHBEZXNjcmlwdGlvbiwgcHJlZmVycmVkVmlkZW9Db2RlYywgZmFsc2UpOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuYXVkaW9TdGFydEJpdHJhdGUg
PiAwKSB7Ci0gICAgICAgICAgc2RwRGVzY3JpcHRpb24gPSBzZXRTdGFydEJpdHJhdGUoCi0gICAg
ICAgICAgICAgIEFVRElPX0NPREVDX09QVVMsIGZhbHNlLCBzZHBEZXNjcmlwdGlvbiwgcGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzLmF1ZGlvU3RhcnRCaXRyYXRlKTsKLSAgICAgICAgfQotICAgICAg
ICBMb2cuZChUQUcsICJTZXQgcmVtb3RlIFNEUC4iKTsKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0
aW9uIHNkcFJlbW90ZSA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oc2RwLnR5cGUsIHNkcERlc2Ny
aXB0aW9uKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Rw
T2JzZXJ2ZXIsIHNkcFJlbW90ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBzdG9wVmlkZW9Tb3VyY2UoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaWYgKHZpZGVvQ2FwdHVyZXIgIT0gbnVsbCAmJiAhdmlkZW9DYXB0dXJlclN0b3BwZWQpIHsK
LSAgICAgICAgICBMb2cuZChUQUcsICJTdG9wIHZpZGVvIHNvdXJjZS4iKTsKLSAgICAgICAgICB0
cnkgewotICAgICAgICAgICAgdmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgICAgICAg
IH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgdmlkZW9DYXB0dXJlclN0b3BwZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdGFydFZpZGVvU291cmNlKCkgewotICAgIGV4ZWN1
dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICh2aWRlb0NhcHR1cmVyICE9IG51bGwgJiYgdmlk
ZW9DYXB0dXJlclN0b3BwZWQpIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJSZXN0YXJ0IHZpZGVv
IHNvdXJjZS4iKTsKLSAgICAgICAgICB2aWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZSh2aWRlb1dp
ZHRoLCB2aWRlb0hlaWdodCwgdmlkZW9GcHMpOwotICAgICAgICAgIHZpZGVvQ2FwdHVyZXJTdG9w
cGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHNldFZpZGVvTWF4Qml0cmF0ZShmaW5hbCBJbnRlZ2VyIG1heEJpdHJhdGVLYnBzKSB7
Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uID09
IG51bGwgfHwgbG9jYWxWaWRlb1NlbmRlciA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgTG9nLmQoVEFHLCAiUmVxdWVzdGVkIG1heCB2
aWRlbyBiaXRyYXRlOiAiICsgbWF4Qml0cmF0ZUticHMpOwotICAgICAgICBpZiAobG9jYWxWaWRl
b1NlbmRlciA9PSBudWxsKSB7Ci0gICAgICAgICAgTG9nLncoVEFHLCAiU2VuZGVyIGlzIG5vdCBy
ZWFkeS4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBSdHBQYXJh
bWV0ZXJzIHBhcmFtZXRlcnMgPSBsb2NhbFZpZGVvU2VuZGVyLmdldFBhcmFtZXRlcnMoKTsKLSAg
ICAgICAgaWYgKHBhcmFtZXRlcnMuZW5jb2RpbmdzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAg
TG9nLncoVEFHLCAiUnRwUGFyYW1ldGVycyBhcmUgbm90IHJlYWR5LiIpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZvciAoUnRwUGFyYW1ldGVycy5FbmNvZGluZyBl
bmNvZGluZyA6IHBhcmFtZXRlcnMuZW5jb2RpbmdzKSB7Ci0gICAgICAgICAgLy8gTnVsbCB2YWx1
ZSBtZWFucyBubyBsaW1pdC4KLSAgICAgICAgICBlbmNvZGluZy5tYXhCaXRyYXRlQnBzID0gbWF4
Qml0cmF0ZUticHMgPT0gbnVsbCA/IG51bGwgOiBtYXhCaXRyYXRlS2JwcyAqIEJQU19JTl9LQlBT
OwotICAgICAgICB9Ci0gICAgICAgIGlmICghbG9jYWxWaWRlb1NlbmRlci5zZXRQYXJhbWV0ZXJz
KHBhcmFtZXRlcnMpKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiUnRwU2VuZGVyLnNldFBhcmFt
ZXRlcnMgZmFpbGVkLiIpOwotICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRBRywgIkNvbmZpZ3Vy
ZWQgbWF4IHZpZGVvIGJpdHJhdGUgdG86ICIgKyBtYXhCaXRyYXRlS2Jwcyk7Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGVy
cm9yTWVzc2FnZSkgewotICAgIExvZy5lKFRBRywgIlBlZXJjb25uZWN0aW9uIGVycm9yOiAiICsg
ZXJyb3JNZXNzYWdlKTsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoIWlz
RXJyb3IpIHsKLSAgICAgICAgICBldmVudHMub25QZWVyQ29ubmVjdGlvbkVycm9yKGVycm9yTWVz
c2FnZSk7Ci0gICAgICAgICAgaXNFcnJvciA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9KTsKLSAgfQotCi0gIHByaXZhdGUgQXVkaW9UcmFjayBjcmVhdGVBdWRpb1RyYWNrKCkgewot
ICAgIGF1ZGlvU291cmNlID0gZmFjdG9yeS5jcmVhdGVBdWRpb1NvdXJjZShhdWRpb0NvbnN0cmFp
bnRzKTsKLSAgICBsb2NhbEF1ZGlvVHJhY2sgPSBmYWN0b3J5LmNyZWF0ZUF1ZGlvVHJhY2soQVVE
SU9fVFJBQ0tfSUQsIGF1ZGlvU291cmNlKTsKLSAgICBsb2NhbEF1ZGlvVHJhY2suc2V0RW5hYmxl
ZChlbmFibGVBdWRpbyk7Ci0gICAgcmV0dXJuIGxvY2FsQXVkaW9UcmFjazsKLSAgfQotCi0gIHBy
aXZhdGUgVmlkZW9UcmFjayBjcmVhdGVWaWRlb1RyYWNrKFZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIp
IHsKLSAgICB2aWRlb1NvdXJjZSA9IGZhY3RvcnkuY3JlYXRlVmlkZW9Tb3VyY2UoY2FwdHVyZXIp
OwotICAgIGNhcHR1cmVyLnN0YXJ0Q2FwdHVyZSh2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwgdmlk
ZW9GcHMpOwotCi0gICAgbG9jYWxWaWRlb1RyYWNrID0gZmFjdG9yeS5jcmVhdGVWaWRlb1RyYWNr
KFZJREVPX1RSQUNLX0lELCB2aWRlb1NvdXJjZSk7Ci0gICAgbG9jYWxWaWRlb1RyYWNrLnNldEVu
YWJsZWQocmVuZGVyVmlkZW8pOwotICAgIGxvY2FsVmlkZW9UcmFjay5hZGRSZW5kZXJlcihuZXcg
VmlkZW9SZW5kZXJlcihsb2NhbFJlbmRlcikpOwotICAgIHJldHVybiBsb2NhbFZpZGVvVHJhY2s7
Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZmluZFZpZGVvU2VuZGVyKCkgewotICAgIGZvciAoUnRw
U2VuZGVyIHNlbmRlciA6IHBlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKSkgewotICAgICAgaWYg
KHNlbmRlci50cmFjaygpICE9IG51bGwpIHsKLSAgICAgICAgU3RyaW5nIHRyYWNrVHlwZSA9IHNl
bmRlci50cmFjaygpLmtpbmQoKTsKLSAgICAgICAgaWYgKHRyYWNrVHlwZS5lcXVhbHMoVklERU9f
VFJBQ0tfVFlQRSkpIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJGb3VuZCB2aWRlbyBzZW5kZXIu
Iik7Ci0gICAgICAgICAgbG9jYWxWaWRlb1NlbmRlciA9IHNlbmRlcjsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBzZXRTdGFydEJpdHJh
dGUoCi0gICAgICBTdHJpbmcgY29kZWMsIGJvb2xlYW4gaXNWaWRlb0NvZGVjLCBTdHJpbmcgc2Rw
RGVzY3JpcHRpb24sIGludCBiaXRyYXRlS2JwcykgewotICAgIFN0cmluZ1tdIGxpbmVzID0gc2Rw
RGVzY3JpcHRpb24uc3BsaXQoIlxyXG4iKTsKLSAgICBpbnQgcnRwbWFwTGluZUluZGV4ID0gLTE7
Ci0gICAgYm9vbGVhbiBzZHBGb3JtYXRVcGRhdGVkID0gZmFsc2U7Ci0gICAgU3RyaW5nIGNvZGVj
UnRwTWFwID0gbnVsbDsKLSAgICAvLyBTZWFyY2ggZm9yIGNvZGVjIHJ0cG1hcCBpbiBmb3JtYXQK
LSAgICAvLyBhPXJ0cG1hcDo8cGF5bG9hZCB0eXBlPiA8ZW5jb2RpbmcgbmFtZT4vPGNsb2NrIHJh
dGU+IFsvPGVuY29kaW5nIHBhcmFtZXRlcnM+XQotICAgIFN0cmluZyByZWdleCA9ICJeYT1ydHBt
YXA6KFxcZCspICIgKyBjb2RlYyArICIoL1xcZCspK1tccl0/JCI7Ci0gICAgUGF0dGVybiBjb2Rl
Y1BhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpOwotICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIE1hdGNoZXIgY29kZWNNYXRjaGVyID0gY29k
ZWNQYXR0ZXJuLm1hdGNoZXIobGluZXNbaV0pOwotICAgICAgaWYgKGNvZGVjTWF0Y2hlci5tYXRj
aGVzKCkpIHsKLSAgICAgICAgY29kZWNSdHBNYXAgPSBjb2RlY01hdGNoZXIuZ3JvdXAoMSk7Ci0g
ICAgICAgIHJ0cG1hcExpbmVJbmRleCA9IGk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAg
IH0KLSAgICBpZiAoY29kZWNSdHBNYXAgPT0gbnVsbCkgewotICAgICAgTG9nLncoVEFHLCAiTm8g
cnRwbWFwIGZvciAiICsgY29kZWMgKyAiIGNvZGVjIik7Ci0gICAgICByZXR1cm4gc2RwRGVzY3Jp
cHRpb247Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkZvdW5kICIgKyBjb2RlYyArICIgcnRwbWFw
ICIgKyBjb2RlY1J0cE1hcCArICIgYXQgIiArIGxpbmVzW3J0cG1hcExpbmVJbmRleF0pOwotCi0g
ICAgLy8gQ2hlY2sgaWYgYT1mbXRwIHN0cmluZyBhbHJlYWR5IGV4aXN0IGluIHJlbW90ZSBTRFAg
Zm9yIHRoaXMgY29kZWMgYW5kCi0gICAgLy8gdXBkYXRlIGl0IHdpdGggbmV3IGJpdHJhdGUgcGFy
YW1ldGVyLgotICAgIHJlZ2V4ID0gIl5hPWZtdHA6IiArIGNvZGVjUnRwTWFwICsgIiBcXHcrPVxc
ZCsuKltccl0/JCI7Ci0gICAgY29kZWNQYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKHJlZ2V4KTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBNYXRj
aGVyIGNvZGVjTWF0Y2hlciA9IGNvZGVjUGF0dGVybi5tYXRjaGVyKGxpbmVzW2ldKTsKLSAgICAg
IGlmIChjb2RlY01hdGNoZXIubWF0Y2hlcygpKSB7Ci0gICAgICAgIExvZy5kKFRBRywgIkZvdW5k
ICIgKyBjb2RlYyArICIgIiArIGxpbmVzW2ldKTsKLSAgICAgICAgaWYgKGlzVmlkZW9Db2RlYykg
ewotICAgICAgICAgIGxpbmVzW2ldICs9ICI7ICIgKyBWSURFT19DT0RFQ19QQVJBTV9TVEFSVF9C
SVRSQVRFICsgIj0iICsgYml0cmF0ZUticHM7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
bGluZXNbaV0gKz0gIjsgIiArIEFVRElPX0NPREVDX1BBUkFNX0JJVFJBVEUgKyAiPSIgKyAoYml0
cmF0ZUticHMgKiAxMDAwKTsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcsICJVcGRhdGUg
cmVtb3RlIFNEUCBsaW5lOiAiICsgbGluZXNbaV0pOwotICAgICAgICBzZHBGb3JtYXRVcGRhdGVk
ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgU3RyaW5nQnVp
bGRlciBuZXdTZHBEZXNjcmlwdGlvbiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewotICAgICAgbmV3U2RwRGVzY3JpcHRp
b24uYXBwZW5kKGxpbmVzW2ldKS5hcHBlbmQoIlxyXG4iKTsKLSAgICAgIC8vIEFwcGVuZCBuZXcg
YT1mbXRwIGxpbmUgaWYgbm8gc3VjaCBsaW5lIGV4aXN0IGZvciBhIGNvZGVjLgotICAgICAgaWYg
KCFzZHBGb3JtYXRVcGRhdGVkICYmIGkgPT0gcnRwbWFwTGluZUluZGV4KSB7Ci0gICAgICAgIFN0
cmluZyBiaXRyYXRlU2V0OwotICAgICAgICBpZiAoaXNWaWRlb0NvZGVjKSB7Ci0gICAgICAgICAg
Yml0cmF0ZVNldCA9Ci0gICAgICAgICAgICAgICJhPWZtdHA6IiArIGNvZGVjUnRwTWFwICsgIiAi
ICsgVklERU9fQ09ERUNfUEFSQU1fU1RBUlRfQklUUkFURSArICI9IiArIGJpdHJhdGVLYnBzOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGJpdHJhdGVTZXQgPSAiYT1mbXRwOiIgKyBjb2Rl
Y1J0cE1hcCArICIgIiArIEFVRElPX0NPREVDX1BBUkFNX0JJVFJBVEUgKyAiPSIKLSAgICAgICAg
ICAgICAgKyAoYml0cmF0ZUticHMgKiAxMDAwKTsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChU
QUcsICJBZGQgcmVtb3RlIFNEUCBsaW5lOiAiICsgYml0cmF0ZVNldCk7Ci0gICAgICAgIG5ld1Nk
cERlc2NyaXB0aW9uLmFwcGVuZChiaXRyYXRlU2V0KS5hcHBlbmQoIlxyXG4iKTsKLSAgICAgIH0K
LSAgICB9Ci0gICAgcmV0dXJuIG5ld1NkcERlc2NyaXB0aW9uLnRvU3RyaW5nKCk7Ci0gIH0KLQot
ICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJlZmVyQ29kZWMoU3RyaW5nIHNkcERlc2NyaXB0aW9u
LCBTdHJpbmcgY29kZWMsIGJvb2xlYW4gaXNBdWRpbykgewotICAgIFN0cmluZ1tdIGxpbmVzID0g
c2RwRGVzY3JpcHRpb24uc3BsaXQoIlxyXG4iKTsKLSAgICBpbnQgbUxpbmVJbmRleCA9IC0xOwot
ICAgIFN0cmluZyBjb2RlY1J0cE1hcCA9IG51bGw7Ci0gICAgLy8gYT1ydHBtYXA6PHBheWxvYWQg
dHlwZT4gPGVuY29kaW5nIG5hbWU+LzxjbG9jayByYXRlPiBbLzxlbmNvZGluZyBwYXJhbWV0ZXJz
Pl0KLSAgICBTdHJpbmcgcmVnZXggPSAiXmE9cnRwbWFwOihcXGQrKSAiICsgY29kZWMgKyAiKC9c
XGQrKStbXHJdPyQiOwotICAgIFBhdHRlcm4gY29kZWNQYXR0ZXJuID0gUGF0dGVybi5jb21waWxl
KHJlZ2V4KTsKLSAgICBTdHJpbmcgbWVkaWFEZXNjcmlwdGlvbiA9ICJtPXZpZGVvICI7Ci0gICAg
aWYgKGlzQXVkaW8pIHsKLSAgICAgIG1lZGlhRGVzY3JpcHRpb24gPSAibT1hdWRpbyAiOwotICAg
IH0KLSAgICBmb3IgKGludCBpID0gMDsgKGkgPCBsaW5lcy5sZW5ndGgpICYmIChtTGluZUluZGV4
ID09IC0xIHx8IGNvZGVjUnRwTWFwID09IG51bGwpOyBpKyspIHsKLSAgICAgIGlmIChsaW5lc1tp
XS5zdGFydHNXaXRoKG1lZGlhRGVzY3JpcHRpb24pKSB7Ci0gICAgICAgIG1MaW5lSW5kZXggPSBp
OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLSAgICAgIE1hdGNoZXIgY29kZWNNYXRjaGVy
ID0gY29kZWNQYXR0ZXJuLm1hdGNoZXIobGluZXNbaV0pOwotICAgICAgaWYgKGNvZGVjTWF0Y2hl
ci5tYXRjaGVzKCkpIHsKLSAgICAgICAgY29kZWNSdHBNYXAgPSBjb2RlY01hdGNoZXIuZ3JvdXAo
MSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmIChtTGluZUluZGV4ID09IC0xKSB7Ci0gICAgICBM
b2cudyhUQUcsICJObyAiICsgbWVkaWFEZXNjcmlwdGlvbiArICIgbGluZSwgc28gY2FuJ3QgcHJl
ZmVyICIgKyBjb2RlYyk7Ci0gICAgICByZXR1cm4gc2RwRGVzY3JpcHRpb247Ci0gICAgfQotICAg
IGlmIChjb2RlY1J0cE1hcCA9PSBudWxsKSB7Ci0gICAgICBMb2cudyhUQUcsICJObyBydHBtYXAg
Zm9yICIgKyBjb2RlYyk7Ci0gICAgICByZXR1cm4gc2RwRGVzY3JpcHRpb247Ci0gICAgfQotICAg
IExvZy5kKFRBRywgIkZvdW5kICIgKyBjb2RlYyArICIgcnRwbWFwICIgKyBjb2RlY1J0cE1hcCAr
ICIsIHByZWZlciBhdCAiICsgbGluZXNbbUxpbmVJbmRleF0pOwotICAgIFN0cmluZ1tdIG9yaWdN
TGluZVBhcnRzID0gbGluZXNbbUxpbmVJbmRleF0uc3BsaXQoIiAiKTsKLSAgICBpZiAob3JpZ01M
aW5lUGFydHMubGVuZ3RoID4gMykgewotICAgICAgU3RyaW5nQnVpbGRlciBuZXdNTGluZSA9IG5l
dyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICBpbnQgb3JpZ1BhcnRJbmRleCA9IDA7Ci0gICAgICAv
LyBGb3JtYXQgaXM6IG09PG1lZGlhPiA8cG9ydD4gPHByb3RvPiA8Zm10PiAuLi4KLSAgICAgIG5l
d01MaW5lLmFwcGVuZChvcmlnTUxpbmVQYXJ0c1tvcmlnUGFydEluZGV4KytdKS5hcHBlbmQoIiAi
KTsKLSAgICAgIG5ld01MaW5lLmFwcGVuZChvcmlnTUxpbmVQYXJ0c1tvcmlnUGFydEluZGV4Kytd
KS5hcHBlbmQoIiAiKTsKLSAgICAgIG5ld01MaW5lLmFwcGVuZChvcmlnTUxpbmVQYXJ0c1tvcmln
UGFydEluZGV4KytdKS5hcHBlbmQoIiAiKTsKLSAgICAgIG5ld01MaW5lLmFwcGVuZChjb2RlY1J0
cE1hcCk7Ci0gICAgICBmb3IgKDsgb3JpZ1BhcnRJbmRleCA8IG9yaWdNTGluZVBhcnRzLmxlbmd0
aDsgb3JpZ1BhcnRJbmRleCsrKSB7Ci0gICAgICAgIGlmICghb3JpZ01MaW5lUGFydHNbb3JpZ1Bh
cnRJbmRleF0uZXF1YWxzKGNvZGVjUnRwTWFwKSkgewotICAgICAgICAgIG5ld01MaW5lLmFwcGVu
ZCgiICIpLmFwcGVuZChvcmlnTUxpbmVQYXJ0c1tvcmlnUGFydEluZGV4XSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICAgIGxpbmVzW21MaW5lSW5kZXhdID0gbmV3TUxpbmUudG9TdHJpbmcoKTsK
LSAgICAgIExvZy5kKFRBRywgIkNoYW5nZSBtZWRpYSBkZXNjcmlwdGlvbjogIiArIGxpbmVzW21M
aW5lSW5kZXhdKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmUoVEFHLCAiV3JvbmcgU0RQIG1l
ZGlhIGRlc2NyaXB0aW9uIGZvcm1hdDogIiArIGxpbmVzW21MaW5lSW5kZXhdKTsKLSAgICB9Ci0g
ICAgU3RyaW5nQnVpbGRlciBuZXdTZHBEZXNjcmlwdGlvbiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7
Ci0gICAgZm9yIChTdHJpbmcgbGluZSA6IGxpbmVzKSB7Ci0gICAgICBuZXdTZHBEZXNjcmlwdGlv
bi5hcHBlbmQobGluZSkuYXBwZW5kKCJcclxuIik7Ci0gICAgfQotICAgIHJldHVybiBuZXdTZHBE
ZXNjcmlwdGlvbi50b1N0cmluZygpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRyYWluQ2FuZGlk
YXRlcygpIHsKLSAgICBpZiAocXVldWVkUmVtb3RlQ2FuZGlkYXRlcyAhPSBudWxsKSB7Ci0gICAg
ICBMb2cuZChUQUcsICJBZGQgIiArIHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMuc2l6ZSgpICsgIiBy
ZW1vdGUgY2FuZGlkYXRlcyIpOwotICAgICAgZm9yIChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDog
cXVldWVkUmVtb3RlQ2FuZGlkYXRlcykgewotICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRJY2VD
YW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgIH0KLSAgICAgIHF1ZXVlZFJlbW90ZUNhbmRpZGF0
ZXMgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzd2l0Y2hDYW1lcmFJbnRl
cm5hbCgpIHsKLSAgICBpZiAodmlkZW9DYXB0dXJlciBpbnN0YW5jZW9mIENhbWVyYVZpZGVvQ2Fw
dHVyZXIpIHsKLSAgICAgIGlmICghdmlkZW9DYWxsRW5hYmxlZCB8fCBpc0Vycm9yIHx8IHZpZGVv
Q2FwdHVyZXIgPT0gbnVsbCkgewotICAgICAgICBMb2cuZShUQUcsICJGYWlsZWQgdG8gc3dpdGNo
IGNhbWVyYS4gVmlkZW86ICIgKyB2aWRlb0NhbGxFbmFibGVkICsgIi4gRXJyb3IgOiAiICsgaXNF
cnJvcik7Ci0gICAgICAgIHJldHVybjsgLy8gTm8gdmlkZW8gaXMgc2VudCBvciBvbmx5IG9uZSBj
YW1lcmEgaXMgYXZhaWxhYmxlIG9yIGVycm9yIGhhcHBlbmVkLgotICAgICAgfQotICAgICAgTG9n
LmQoVEFHLCAiU3dpdGNoIGNhbWVyYSIpOwotICAgICAgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW1l
cmFWaWRlb0NhcHR1cmVyID0gKENhbWVyYVZpZGVvQ2FwdHVyZXIpIHZpZGVvQ2FwdHVyZXI7Ci0g
ICAgICBjYW1lcmFWaWRlb0NhcHR1cmVyLnN3aXRjaENhbWVyYShudWxsKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgTG9nLmQoVEFHLCAiV2lsbCBub3Qgc3dpdGNoIGNhbWVyYSwgdmlkZW8gY2FwdXR1
cmVyIGlzIG5vdCBhIGNhbWVyYSIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN3aXRj
aENhbWVyYSgpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAg
IEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBzd2l0Y2hDYW1l
cmFJbnRlcm5hbCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2hh
bmdlQ2FwdHVyZUZvcm1hdChmaW5hbCBpbnQgd2lkdGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFs
IGludCBmcmFtZXJhdGUpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjaGFu
Z2VDYXB0dXJlRm9ybWF0SW50ZXJuYWwod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0SW50
ZXJuYWwoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgaWYgKCF2
aWRlb0NhbGxFbmFibGVkIHx8IGlzRXJyb3IgfHwgdmlkZW9DYXB0dXJlciA9PSBudWxsKSB7Ci0g
ICAgICBMb2cuZShUQUcsCi0gICAgICAgICAgIkZhaWxlZCB0byBjaGFuZ2UgY2FwdHVyZSBmb3Jt
YXQuIFZpZGVvOiAiICsgdmlkZW9DYWxsRW5hYmxlZCArICIuIEVycm9yIDogIiArIGlzRXJyb3Ip
OwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJjaGFuZ2VDYXB0dXJlRm9y
bWF0OiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQgKyAiQCIgKyBmcmFtZXJhdGUpOwotICAgIHZp
ZGVvU291cmNlLmFkYXB0T3V0cHV0Rm9ybWF0KHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0g
IH0KLQotICAvLyBJbXBsZW1lbnRhdGlvbiBkZXRhaWw6IG9ic2VydmUgSUNFICYgc3RyZWFtIGNo
YW5nZXMgYW5kIHJlYWN0IGFjY29yZGluZ2x5LgotICBwcml2YXRlIGNsYXNzIFBDT2JzZXJ2ZXIg
aW1wbGVtZW50cyBQZWVyQ29ubmVjdGlvbi5PYnNlcnZlciB7Ci0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkg
ewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVy
cmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgZXZlbnRzLm9uSWNl
Q2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwg
SWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcg
UnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgICAgZXZlbnRzLm9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoY2FuZGlkYXRlcyk7
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uU2lnbmFsaW5nQ2hhbmdlKFBlZXJDb25uZWN0aW9uLlNpZ25hbGluZ1N0YXRlIG5l
d1N0YXRlKSB7Ci0gICAgICBMb2cuZChUQUcsICJTaWduYWxpbmdTdGF0ZTogIiArIG5ld1N0YXRl
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNvbm5lY3Rp
b25DaGFuZ2UoZmluYWwgUGVlckNvbm5lY3Rpb24uSWNlQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRl
KSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92
ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBMb2cuZChUQUcs
ICJJY2VDb25uZWN0aW9uU3RhdGU6ICIgKyBuZXdTdGF0ZSk7Ci0gICAgICAgICAgaWYgKG5ld1N0
YXRlID09IEljZUNvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICAgIGV2ZW50
cy5vbkljZUNvbm5lY3RlZCgpOwotICAgICAgICAgIH0gZWxzZSBpZiAobmV3U3RhdGUgPT0gSWNl
Q29ubmVjdGlvblN0YXRlLkRJU0NPTk5FQ1RFRCkgewotICAgICAgICAgICAgZXZlbnRzLm9uSWNl
RGlzY29ubmVjdGVkKCk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChuZXdTdGF0ZSA9PSBJY2VDb25u
ZWN0aW9uU3RhdGUuRkFJTEVEKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiSUNFIGNvbm5l
Y3Rpb24gZmFpbGVkLiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2Uo
UGVlckNvbm5lY3Rpb24uSWNlR2F0aGVyaW5nU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAgIExvZy5k
KFRBRywgIkljZUdhdGhlcmluZ1N0YXRlOiAiICsgbmV3U3RhdGUpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZShi
b29sZWFuIHJlY2VpdmluZykgewotICAgICAgTG9nLmQoVEFHLCAiSWNlQ29ubmVjdGlvblJlY2Vp
dmluZyBjaGFuZ2VkIHRvICIgKyByZWNlaXZpbmcpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIG9uQWRkU3RyZWFtKGZpbmFsIE1lZGlhU3RyZWFtIHN0cmVhbSkgewot
ICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlk
ZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYgKHBlZXJDb25uZWN0
aW9uID09IG51bGwgfHwgaXNFcnJvcikgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
IH0KLSAgICAgICAgICBpZiAoc3RyZWFtLmF1ZGlvVHJhY2tzLnNpemUoKSA+IDEgfHwgc3RyZWFt
LnZpZGVvVHJhY2tzLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJXZWly
ZC1sb29raW5nIHN0cmVhbTogIiArIHN0cmVhbSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGlmIChzdHJlYW0udmlkZW9UcmFja3Muc2l6ZSgpID09IDEpIHsK
LSAgICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2sgPSBzdHJlYW0udmlkZW9UcmFja3MuZ2V0KDAp
OwotICAgICAgICAgICAgcmVtb3RlVmlkZW9UcmFjay5zZXRFbmFibGVkKHJlbmRlclZpZGVvKTsK
LSAgICAgICAgICAgIGZvciAoVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVtb3RlUmVuZGVyIDog
cmVtb3RlUmVuZGVycykgewotICAgICAgICAgICAgICByZW1vdGVWaWRlb1RyYWNrLmFkZFJlbmRl
cmVyKG5ldyBWaWRlb1JlbmRlcmVyKHJlbW90ZVJlbmRlcikpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgb25SZW1vdmVTdHJlYW0oZmluYWwgTWVkaWFTdHJlYW0gc3RyZWFtKSB7
Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICByZW1vdGVWaWRlb1Ry
YWNrID0gbnVsbDsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgb25EYXRhQ2hhbm5lbChmaW5hbCBEYXRhQ2hhbm5lbCBkYykgewot
ICAgICAgcmVwb3J0RXJyb3IoIkFwcFJUQyBkb2Vzbid0IHVzZSBkYXRhIGNoYW5uZWxzLCBidXQg
Z290OiAiICsgZGMubGFiZWwoKSArICIgYW55d2F5ISIpOwotICAgIH0KLQotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uUmVuZWdvdGlhdGlvbk5lZWRlZCgpIHsKLSAgICAgIC8vIE5v
IG5lZWQgdG8gZG8gYW55dGhpbmc7IEFwcFJUQyBmb2xsb3dzIGEgcHJlLWFncmVlZC11cG9uCi0g
ICAgICAvLyBzaWduYWxpbmcvbmVnb3RpYXRpb24gcHJvdG9jb2wuCi0gICAgfQotICB9Ci0KLSAg
Ly8gSW1wbGVtZW50YXRpb24gZGV0YWlsOiBoYW5kbGUgb2ZmZXIgY3JlYXRpb24vc2lnbmFsaW5n
IGFuZCBhbnN3ZXIgc2V0dGluZywKLSAgLy8gYXMgd2VsbCBhcyBhZGRpbmcgcmVtb3RlIElDRSBj
YW5kaWRhdGVzIG9uY2UgdGhlIGFuc3dlciBTRFAgaXMgc2V0LgotICBwcml2YXRlIGNsYXNzIFNE
UE9ic2VydmVyIGltcGxlbWVudHMgU2RwT2JzZXJ2ZXIgewotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIG9uQ3JlYXRlU3VjY2VzcyhmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gb3JpZ1Nk
cCkgewotICAgICAgaWYgKGxvY2FsU2RwICE9IG51bGwpIHsKLSAgICAgICAgcmVwb3J0RXJyb3Io
Ik11bHRpcGxlIFNEUCBjcmVhdGUuIik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAg
IFN0cmluZyBzZHBEZXNjcmlwdGlvbiA9IG9yaWdTZHAuZGVzY3JpcHRpb247Ci0gICAgICBpZiAo
cHJlZmVySXNhYykgewotICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHByZWZlckNvZGVjKHNkcERl
c2NyaXB0aW9uLCBBVURJT19DT0RFQ19JU0FDLCB0cnVlKTsKLSAgICAgIH0KLSAgICAgIGlmICh2
aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICAgIHNkcERlc2NyaXB0aW9uID0gcHJlZmVyQ29kZWMo
c2RwRGVzY3JpcHRpb24sIHByZWZlcnJlZFZpZGVvQ29kZWMsIGZhbHNlKTsKLSAgICAgIH0KLSAg
ICAgIGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9u
KG9yaWdTZHAudHlwZSwgc2RwRGVzY3JpcHRpb24pOwotICAgICAgbG9jYWxTZHAgPSBzZHA7Ci0g
ICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRl
Ci0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBpZiAocGVlckNvbm5lY3Rp
b24gIT0gbnVsbCAmJiAhaXNFcnJvcikgewotICAgICAgICAgICAgTG9nLmQoVEFHLCAiU2V0IGxv
Y2FsIFNEUCBmcm9tICIgKyBzZHAudHlwZSk7Ci0gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5z
ZXRMb2NhbERlc2NyaXB0aW9uKHNkcE9ic2VydmVyLCBzZHApOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25TZXRTdWNjZXNzKCkgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7
Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
ICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51bGwgfHwgaXNFcnJvcikgewotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoaXNJbml0aWF0b3IpIHsKLSAgICAg
ICAgICAgIC8vIEZvciBvZmZlcmluZyBwZWVyIGNvbm5lY3Rpb24gd2UgZmlyc3QgY3JlYXRlIG9m
ZmVyIGFuZCBzZXQKLSAgICAgICAgICAgIC8vIGxvY2FsIFNEUCwgdGhlbiBhZnRlciByZWNlaXZp
bmcgYW5zd2VyIHNldCByZW1vdGUgU0RQLgotICAgICAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9u
LmdldFJlbW90ZURlc2NyaXB0aW9uKCkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAvLyBXZSd2
ZSBqdXN0IHNldCBvdXIgbG9jYWwgU0RQIHNvIHRpbWUgdG8gc2VuZCBpdC4KLSAgICAgICAgICAg
ICAgTG9nLmQoVEFHLCAiTG9jYWwgU0RQIHNldCBzdWNjZXNmdWxseSIpOwotICAgICAgICAgICAg
ICBldmVudHMub25Mb2NhbERlc2NyaXB0aW9uKGxvY2FsU2RwKTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgIC8vIFdlJ3ZlIGp1c3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiwg
c28gZHJhaW4gcmVtb3RlCi0gICAgICAgICAgICAgIC8vIGFuZCBzZW5kIGxvY2FsIElDRSBjYW5k
aWRhdGVzLgotICAgICAgICAgICAgICBMb2cuZChUQUcsICJSZW1vdGUgU0RQIHNldCBzdWNjZXNm
dWxseSIpOwotICAgICAgICAgICAgICBkcmFpbkNhbmRpZGF0ZXMoKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gRm9yIGFuc3dlcmluZyBwZWVyIGNv
bm5lY3Rpb24gd2Ugc2V0IHJlbW90ZSBTRFAgYW5kIHRoZW4KLSAgICAgICAgICAgIC8vIGNyZWF0
ZSBhbnN3ZXIgYW5kIHNldCBsb2NhbCBTRFAuCi0gICAgICAgICAgICBpZiAocGVlckNvbm5lY3Rp
b24uZ2V0TG9jYWxEZXNjcmlwdGlvbigpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgLy8gV2Un
dmUganVzdCBzZXQgb3VyIGxvY2FsIFNEUCBzbyB0aW1lIHRvIHNlbmQgaXQsIGRyYWluCi0gICAg
ICAgICAgICAgIC8vIHJlbW90ZSBhbmQgc2VuZCBsb2NhbCBJQ0UgY2FuZGlkYXRlcy4KLSAgICAg
ICAgICAgICAgTG9nLmQoVEFHLCAiTG9jYWwgU0RQIHNldCBzdWNjZXNmdWxseSIpOwotICAgICAg
ICAgICAgICBldmVudHMub25Mb2NhbERlc2NyaXB0aW9uKGxvY2FsU2RwKTsKLSAgICAgICAgICAg
ICAgZHJhaW5DYW5kaWRhdGVzKCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAvLyBXZSd2ZSBqdXN0IHNldCByZW1vdGUgU0RQIC0gZG8gbm90aGluZyBmb3Igbm93IC0KLSAg
ICAgICAgICAgICAgLy8gYW5zd2VyIHdpbGwgYmUgY3JlYXRlZCBzb29uLgotICAgICAgICAgICAg
ICBMb2cuZChUQUcsICJSZW1vdGUgU0RQIHNldCBzdWNjZXNmdWxseSIpOwotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGVGYWlsdXJlKGZpbmFsIFN0cmluZyBlcnJvcikg
ewotICAgICAgcmVwb3J0RXJyb3IoImNyZWF0ZVNEUCBlcnJvcjogIiArIGVycm9yKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblNldEZhaWx1cmUoZmluYWwgU3Ry
aW5nIGVycm9yKSB7Ci0gICAgICByZXBvcnRFcnJvcigic2V0U0RQIGVycm9yOiAiICsgZXJyb3Ip
OwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlcmNl
bnRGcmFtZUxheW91dC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9QZXJjZW50RnJhbWVMYXlvdXQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlcmNlbnRGcmFtZUxheW91dC5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBw
c3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBh
bmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1w
b3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci0KLS8qKgotICogU2ltcGxlIGNvbnRhaW5lciB0
aGF0IGNvbmZpbmVzIHRoZSBjaGlsZHJlbiB0byBhIHN1YnJlY3RhbmdsZSBzcGVjaWZpZWQgYXMg
cGVyY2VudGFnZSB2YWx1ZXMgb2YKLSAqIHRoZSBjb250YWluZXIgc2l6ZS4gVGhlIGNoaWxkcmVu
IGFyZSBjZW50ZXJlZCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkgaW5zaWRlIHRoZSBjb25m
aW5lZAotICogc3BhY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBQZXJjZW50RnJhbWVMYXlvdXQgZXh0
ZW5kcyBWaWV3R3JvdXAgewotICBwcml2YXRlIGludCB4UGVyY2VudCA9IDA7Ci0gIHByaXZhdGUg
aW50IHlQZXJjZW50ID0gMDsKLSAgcHJpdmF0ZSBpbnQgd2lkdGhQZXJjZW50ID0gMTAwOwotICBw
cml2YXRlIGludCBoZWlnaHRQZXJjZW50ID0gMTAwOwotCi0gIHB1YmxpYyBQZXJjZW50RnJhbWVM
YXlvdXQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAgc3VwZXIoY29udGV4dCk7Ci0gIH0KLQotICBw
dWJsaWMgUGVyY2VudEZyYW1lTGF5b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0
dHJzKSB7Ci0gICAgc3VwZXIoY29udGV4dCwgYXR0cnMpOwotICB9Ci0KLSAgcHVibGljIFBlcmNl
bnRGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRl
ZlN0eWxlQXR0cikgewotICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UG9zaXRpb24oaW50IHhQZXJjZW50LCBpbnQgeVBlcmNl
bnQsIGludCB3aWR0aFBlcmNlbnQsIGludCBoZWlnaHRQZXJjZW50KSB7Ci0gICAgdGhpcy54UGVy
Y2VudCA9IHhQZXJjZW50OwotICAgIHRoaXMueVBlcmNlbnQgPSB5UGVyY2VudDsKLSAgICB0aGlz
LndpZHRoUGVyY2VudCA9IHdpZHRoUGVyY2VudDsKLSAgICB0aGlzLmhlaWdodFBlcmNlbnQgPSBo
ZWlnaHRQZXJjZW50OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIHNob3Vs
ZERlbGF5Q2hpbGRQcmVzc2VkU3RhdGUoKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uTWVhc3VyZShpbnQgd2lkdGhNZWFzdXJlU3Bl
YywgaW50IGhlaWdodE1lYXN1cmVTcGVjKSB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0gZ2V0RGVm
YXVsdFNpemUoSW50ZWdlci5NQVhfVkFMVUUsIHdpZHRoTWVhc3VyZVNwZWMpOwotICAgIGZpbmFs
IGludCBoZWlnaHQgPSBnZXREZWZhdWx0U2l6ZShJbnRlZ2VyLk1BWF9WQUxVRSwgaGVpZ2h0TWVh
c3VyZVNwZWMpOwotICAgIHNldE1lYXN1cmVkRGltZW5zaW9uKE1lYXN1cmVTcGVjLm1ha2VNZWFz
dXJlU3BlYyh3aWR0aCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSksCi0gICAgICAgIE1lYXN1cmVTcGVj
Lm1ha2VNZWFzdXJlU3BlYyhoZWlnaHQsIE1lYXN1cmVTcGVjLkVYQUNUTFkpKTsKLQotICAgIGZp
bmFsIGludCBjaGlsZFdpZHRoTWVhc3VyZVNwZWMgPQotICAgICAgICBNZWFzdXJlU3BlYy5tYWtl
TWVhc3VyZVNwZWMod2lkdGggKiB3aWR0aFBlcmNlbnQgLyAxMDAsIE1lYXN1cmVTcGVjLkFUX01P
U1QpOwotICAgIGZpbmFsIGludCBjaGlsZEhlaWdodE1lYXN1cmVTcGVjID0KLSAgICAgICAgTWVh
c3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKGhlaWdodCAqIGhlaWdodFBlcmNlbnQgLyAxMDAsIE1l
YXN1cmVTcGVjLkFUX01PU1QpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0Q2hpbGRDb3Vu
dCgpOyArK2kpIHsKLSAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGkpOwotICAg
ICAgaWYgKGNoaWxkLmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7Ci0gICAgICAgIGNoaWxkLm1l
YXN1cmUoY2hpbGRXaWR0aE1lYXN1cmVTcGVjLCBjaGlsZEhlaWdodE1lYXN1cmVTcGVjKTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25MYXlv
dXQoYm9vbGVhbiBjaGFuZ2VkLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90
dG9tKSB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0gcmlnaHQgLSBsZWZ0OwotICAgIGZpbmFsIGlu
dCBoZWlnaHQgPSBib3R0b20gLSB0b3A7Ci0gICAgLy8gU3ViLXJlY3RhbmdsZSBzcGVjaWZpZWQg
YnkgcGVyY2VudGFnZSB2YWx1ZXMuCi0gICAgZmluYWwgaW50IHN1YldpZHRoID0gd2lkdGggKiB3
aWR0aFBlcmNlbnQgLyAxMDA7Ci0gICAgZmluYWwgaW50IHN1YkhlaWdodCA9IGhlaWdodCAqIGhl
aWdodFBlcmNlbnQgLyAxMDA7Ci0gICAgZmluYWwgaW50IHN1YkxlZnQgPSBsZWZ0ICsgd2lkdGgg
KiB4UGVyY2VudCAvIDEwMDsKLSAgICBmaW5hbCBpbnQgc3ViVG9wID0gdG9wICsgaGVpZ2h0ICog
eVBlcmNlbnQgLyAxMDA7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldENoaWxkQ291bnQo
KTsgKytpKSB7Ci0gICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChpKTsKLSAgICAg
IGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewotICAgICAgICBmaW5hbCBpbnQg
Y2hpbGRXaWR0aCA9IGNoaWxkLmdldE1lYXN1cmVkV2lkdGgoKTsKLSAgICAgICAgZmluYWwgaW50
IGNoaWxkSGVpZ2h0ID0gY2hpbGQuZ2V0TWVhc3VyZWRIZWlnaHQoKTsKLSAgICAgICAgLy8gQ2Vu
dGVyIGNoaWxkIGJvdGggdmVydGljYWxseSBhbmQgaG9yaXpvbnRhbGx5LgotICAgICAgICBmaW5h
bCBpbnQgY2hpbGRMZWZ0ID0gc3ViTGVmdCArIChzdWJXaWR0aCAtIGNoaWxkV2lkdGgpIC8gMjsK
LSAgICAgICAgZmluYWwgaW50IGNoaWxkVG9wID0gc3ViVG9wICsgKHN1YkhlaWdodCAtIGNoaWxk
SGVpZ2h0KSAvIDI7Ci0gICAgICAgIGNoaWxkLmxheW91dChjaGlsZExlZnQsIGNoaWxkVG9wLCBj
aGlsZExlZnQgKyBjaGlsZFdpZHRoLCBjaGlsZFRvcCArIGNoaWxkSGVpZ2h0KTsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Sb29tUGFy
YW1ldGVyc0ZldGNoZXIuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvUm9vbVBhcmFtZXRlcnNGZXRjaGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Sb29tUGFyYW1ldGVyc0ZldGNoZXIuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBX
ZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVEND
bGllbnQuU2lnbmFsaW5nUGFyYW1ldGVyczsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRp
bC5Bc3luY0h0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGls
LkFzeW5jSHR0cFVSTENvbm5lY3Rpb24uQXN5bmNIdHRwRXZlbnRzOwotCi1pbXBvcnQgYW5kcm9p
ZC51dGlsLkxvZzsKLQotaW1wb3J0IG9yZy5qc29uLkpTT05BcnJheTsKLWltcG9ydCBvcmcuanNv
bi5KU09ORXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qc29uLkpTT05PYmplY3Q7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsK
LWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLQotaW1wb3J0IGphdmEuaW8u
SU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5l
dC5IdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51
dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7Ci0KLS8qKgotICogQXN5
bmNUYXNrIHRoYXQgY29udmVydHMgYW4gQXBwUlRDIHJvb20gVVJMIGludG8gdGhlIHNldCBvZiBz
aWduYWxpbmcKLSAqIHBhcmFtZXRlcnMgdG8gdXNlIHdpdGggdGhhdCByb29tLgotICovCi1wdWJs
aWMgY2xhc3MgUm9vbVBhcmFtZXRlcnNGZXRjaGVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFRBRyA9ICJSb29tUlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IFRVUk5fSFRUUF9USU1FT1VUX01TID0gNTAwMDsKLSAgcHJpdmF0ZSBmaW5hbCBSb29tUGFyYW1l
dGVyc0ZldGNoZXJFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyByb29tVXJs
OwotICBwcml2YXRlIGZpbmFsIFN0cmluZyByb29tTWVzc2FnZTsKLSAgcHJpdmF0ZSBBc3luY0h0
dHBVUkxDb25uZWN0aW9uIGh0dHBDb25uZWN0aW9uOwotCi0gIC8qKgotICAgKiBSb29tIHBhcmFt
ZXRlcnMgZmV0Y2hlciBjYWxsYmFja3MuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIFJvb21Q
YXJhbWV0ZXJzRmV0Y2hlckV2ZW50cyB7Ci0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQg
b25jZSB0aGUgcm9vbSdzIHNpZ25hbGluZyBwYXJhbWV0ZXJzCi0gICAgICogU2lnbmFsaW5nUGFy
YW1ldGVycyBhcmUgZXh0cmFjdGVkLgotICAgICAqLwotICAgIHZvaWQgb25TaWduYWxpbmdQYXJh
bWV0ZXJzUmVhZHkoZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbXMpOwotCi0gICAgLyoq
Ci0gICAgICogQ2FsbGJhY2sgZm9yIHJvb20gcGFyYW1ldGVycyBleHRyYWN0aW9uIGVycm9yLgot
ICAgICAqLwotICAgIHZvaWQgb25TaWduYWxpbmdQYXJhbWV0ZXJzRXJyb3IoZmluYWwgU3RyaW5n
IGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBSb29tUGFyYW1ldGVyc0ZldGNoZXIoCi0g
ICAgICBTdHJpbmcgcm9vbVVybCwgU3RyaW5nIHJvb21NZXNzYWdlLCBmaW5hbCBSb29tUGFyYW1l
dGVyc0ZldGNoZXJFdmVudHMgZXZlbnRzKSB7Ci0gICAgdGhpcy5yb29tVXJsID0gcm9vbVVybDsK
LSAgICB0aGlzLnJvb21NZXNzYWdlID0gcm9vbU1lc3NhZ2U7Ci0gICAgdGhpcy5ldmVudHMgPSBl
dmVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBtYWtlUmVxdWVzdCgpIHsKLSAgICBMb2cuZChU
QUcsICJDb25uZWN0aW5nIHRvIHJvb206ICIgKyByb29tVXJsKTsKLSAgICBodHRwQ29ubmVjdGlv
biA9Ci0gICAgICAgIG5ldyBBc3luY0h0dHBVUkxDb25uZWN0aW9uKCJQT1NUIiwgcm9vbVVybCwg
cm9vbU1lc3NhZ2UsIG5ldyBBc3luY0h0dHBFdmVudHMoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRl
Ci0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRwRXJyb3IoU3RyaW5nIGVycm9yTWVzc2FnZSkg
ewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiUm9vbSBjb25uZWN0aW9uIGVycm9yOiAiICsgZXJy
b3JNZXNzYWdlKTsKLSAgICAgICAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNFcnJv
cihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIEBPdmVycmlkZQotICAg
ICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cENvbXBsZXRlKFN0cmluZyByZXNwb25zZSkgewotICAg
ICAgICAgICAgcm9vbUh0dHBSZXNwb25zZVBhcnNlKHJlc3BvbnNlKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotICAgIGh0dHBDb25uZWN0aW9uLnNlbmQoKTsKLSAgfQotCi0gIHByaXZhdGUg
dm9pZCByb29tSHR0cFJlc3BvbnNlUGFyc2UoU3RyaW5nIHJlc3BvbnNlKSB7Ci0gICAgTG9nLmQo
VEFHLCAiUm9vbSByZXNwb25zZTogIiArIHJlc3BvbnNlKTsKLSAgICB0cnkgewotICAgICAgTGlu
a2VkTGlzdDxJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0ZXMgPSBudWxsOwotICAgICAgU2Vzc2lv
bkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gbnVsbDsKLSAgICAgIEpTT05PYmplY3Qgcm9vbUpzb24g
PSBuZXcgSlNPTk9iamVjdChyZXNwb25zZSk7Ci0KLSAgICAgIFN0cmluZyByZXN1bHQgPSByb29t
SnNvbi5nZXRTdHJpbmcoInJlc3VsdCIpOwotICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKCJTVUND
RVNTIikpIHsKLSAgICAgICAgZXZlbnRzLm9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKCJSb29t
IHJlc3BvbnNlIGVycm9yOiAiICsgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQot
ICAgICAgcmVzcG9uc2UgPSByb29tSnNvbi5nZXRTdHJpbmcoInBhcmFtcyIpOwotICAgICAgcm9v
bUpzb24gPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZSk7Ci0gICAgICBTdHJpbmcgcm9vbUlkID0g
cm9vbUpzb24uZ2V0U3RyaW5nKCJyb29tX2lkIik7Ci0gICAgICBTdHJpbmcgY2xpZW50SWQgPSBy
b29tSnNvbi5nZXRTdHJpbmcoImNsaWVudF9pZCIpOwotICAgICAgU3RyaW5nIHdzc1VybCA9IHJv
b21Kc29uLmdldFN0cmluZygid3NzX3VybCIpOwotICAgICAgU3RyaW5nIHdzc1Bvc3RVcmwgPSBy
b29tSnNvbi5nZXRTdHJpbmcoIndzc19wb3N0X3VybCIpOwotICAgICAgYm9vbGVhbiBpbml0aWF0
b3IgPSAocm9vbUpzb24uZ2V0Qm9vbGVhbigiaXNfaW5pdGlhdG9yIikpOwotICAgICAgaWYgKCFp
bml0aWF0b3IpIHsKLSAgICAgICAgaWNlQ2FuZGlkYXRlcyA9IG5ldyBMaW5rZWRMaXN0PEljZUNh
bmRpZGF0ZT4oKTsKLSAgICAgICAgU3RyaW5nIG1lc3NhZ2VzU3RyaW5nID0gcm9vbUpzb24uZ2V0
U3RyaW5nKCJtZXNzYWdlcyIpOwotICAgICAgICBKU09OQXJyYXkgbWVzc2FnZXMgPSBuZXcgSlNP
TkFycmF5KG1lc3NhZ2VzU3RyaW5nKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNz
YWdlcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSBt
ZXNzYWdlcy5nZXRTdHJpbmcoaSk7Ci0gICAgICAgICAgSlNPTk9iamVjdCBtZXNzYWdlID0gbmV3
IEpTT05PYmplY3QobWVzc2FnZVN0cmluZyk7Ci0gICAgICAgICAgU3RyaW5nIG1lc3NhZ2VUeXBl
ID0gbWVzc2FnZS5nZXRTdHJpbmcoInR5cGUiKTsKLSAgICAgICAgICBMb2cuZChUQUcsICJHQUUt
PkMgIyIgKyBpICsgIiA6ICIgKyBtZXNzYWdlU3RyaW5nKTsKLSAgICAgICAgICBpZiAobWVzc2Fn
ZVR5cGUuZXF1YWxzKCJvZmZlciIpKSB7Ci0gICAgICAgICAgICBvZmZlclNkcCA9IG5ldyBTZXNz
aW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUu
ZnJvbUNhbm9uaWNhbEZvcm0obWVzc2FnZVR5cGUpLCBtZXNzYWdlLmdldFN0cmluZygic2RwIikp
OwotICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZVR5cGUuZXF1YWxzKCJjYW5kaWRhdGUiKSkg
ewotICAgICAgICAgICAgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA9IG5ldyBJY2VDYW5kaWRhdGUo
Ci0gICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRTdHJpbmcoImlkIiksIG1lc3NhZ2UuZ2V0SW50
KCJsYWJlbCIpLCBtZXNzYWdlLmdldFN0cmluZygiY2FuZGlkYXRlIikpOwotICAgICAgICAgICAg
aWNlQ2FuZGlkYXRlcy5hZGQoY2FuZGlkYXRlKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgTG9nLmUoVEFHLCAiVW5rbm93biBtZXNzYWdlOiAiICsgbWVzc2FnZVN0cmluZyk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBMb2cuZChUQUcsICJSb29tSWQ6
ICIgKyByb29tSWQgKyAiLiBDbGllbnRJZDogIiArIGNsaWVudElkKTsKLSAgICAgIExvZy5kKFRB
RywgIkluaXRpYXRvcjogIiArIGluaXRpYXRvcik7Ci0gICAgICBMb2cuZChUQUcsICJXU1MgdXJs
OiAiICsgd3NzVXJsKTsKLSAgICAgIExvZy5kKFRBRywgIldTUyBQT1NUIHVybDogIiArIHdzc1Bv
c3RVcmwpOwotCi0gICAgICBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNl
U2VydmVycyA9Ci0gICAgICAgICAgaWNlU2VydmVyc0Zyb21QQ0NvbmZpZ0pTT04ocm9vbUpzb24u
Z2V0U3RyaW5nKCJwY19jb25maWciKSk7Ci0gICAgICBib29sZWFuIGlzVHVyblByZXNlbnQgPSBm
YWxzZTsKLSAgICAgIGZvciAoUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyIHNlcnZlciA6IGljZVNl
cnZlcnMpIHsKLSAgICAgICAgTG9nLmQoVEFHLCAiSWNlU2VydmVyOiAiICsgc2VydmVyKTsKLSAg
ICAgICAgaWYgKHNlcnZlci51cmkuc3RhcnRzV2l0aCgidHVybjoiKSkgewotICAgICAgICAgIGlz
VHVyblByZXNlbnQgPSB0cnVlOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICAvLyBSZXF1ZXN0IFRVUk4gc2VydmVycy4KLSAgICAgIGlmICghaXNUdXJuUHJlc2Vu
dCkgewotICAgICAgICBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gdHVyblNl
cnZlcnMgPQotICAgICAgICAgICAgcmVxdWVzdFR1cm5TZXJ2ZXJzKHJvb21Kc29uLmdldFN0cmlu
ZygiaWNlX3NlcnZlcl91cmwiKSk7Ci0gICAgICAgIGZvciAoUGVlckNvbm5lY3Rpb24uSWNlU2Vy
dmVyIHR1cm5TZXJ2ZXIgOiB0dXJuU2VydmVycykgewotICAgICAgICAgIExvZy5kKFRBRywgIlR1
cm5TZXJ2ZXI6ICIgKyB0dXJuU2VydmVyKTsKLSAgICAgICAgICBpY2VTZXJ2ZXJzLmFkZCh0dXJu
U2VydmVyKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBTaWduYWxpbmdQYXJhbWV0ZXJz
IHBhcmFtcyA9IG5ldyBTaWduYWxpbmdQYXJhbWV0ZXJzKAotICAgICAgICAgIGljZVNlcnZlcnMs
IGluaXRpYXRvciwgY2xpZW50SWQsIHdzc1VybCwgd3NzUG9zdFVybCwgb2ZmZXJTZHAsIGljZUNh
bmRpZGF0ZXMpOwotICAgICAgZXZlbnRzLm9uU2lnbmFsaW5nUGFyYW1ldGVyc1JlYWR5KHBhcmFt
cyk7Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICBldmVudHMub25TaWdu
YWxpbmdQYXJhbWV0ZXJzRXJyb3IoIlJvb20gSlNPTiBwYXJzaW5nIGVycm9yOiAiICsgZS50b1N0
cmluZygpKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBldmVudHMub25T
aWduYWxpbmdQYXJhbWV0ZXJzRXJyb3IoIlJvb20gSU8gZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkp
OwotICAgIH0KLSAgfQotCi0gIC8vIFJlcXVlc3RzICYgcmV0dXJucyBhIFRVUk4gSUNFIFNlcnZl
ciBiYXNlZCBvbiBhIHJlcXVlc3QgVVJMLiAgTXVzdCBiZSBydW4KLSAgLy8gb2ZmIHRoZSBtYWlu
IHRocmVhZCEKLSAgcHJpdmF0ZSBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4g
cmVxdWVzdFR1cm5TZXJ2ZXJzKFN0cmluZyB1cmwpCi0gICAgICB0aHJvd3MgSU9FeGNlcHRpb24s
IEpTT05FeGNlcHRpb24gewotICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVy
PiB0dXJuU2VydmVycyA9IG5ldyBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4o
KTsKLSAgICBMb2cuZChUQUcsICJSZXF1ZXN0IFRVUk4gZnJvbTogIiArIHVybCk7Ci0gICAgSHR0
cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCh1
cmwpLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsK
LSAgICBjb25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eSgiUkVGRVJFUiIsICJodHRwczovL2Fw
cHIudGMiKTsKLSAgICBjb25uZWN0aW9uLnNldENvbm5lY3RUaW1lb3V0KFRVUk5fSFRUUF9USU1F
T1VUX01TKTsKLSAgICBjb25uZWN0aW9uLnNldFJlYWRUaW1lb3V0KFRVUk5fSFRUUF9USU1FT1VU
X01TKTsKLSAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUo
KTsKLSAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewotICAgICAgdGhyb3cgbmV3IElPRXhj
ZXB0aW9uKCJOb24tMjAwIHJlc3BvbnNlIHdoZW4gcmVxdWVzdGluZyBUVVJOIHNlcnZlciBmcm9t
ICIgKyB1cmwgKyAiIDogIgotICAgICAgICAgICsgY29ubmVjdGlvbi5nZXRIZWFkZXJGaWVsZChu
dWxsKSk7Ci0gICAgfQotICAgIElucHV0U3RyZWFtIHJlc3BvbnNlU3RyZWFtID0gY29ubmVjdGlv
bi5nZXRJbnB1dFN0cmVhbSgpOwotICAgIFN0cmluZyByZXNwb25zZSA9IGRyYWluU3RyZWFtKHJl
c3BvbnNlU3RyZWFtKTsKLSAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTsKLSAgICBMb2cuZChU
QUcsICJUVVJOIHJlc3BvbnNlOiAiICsgcmVzcG9uc2UpOwotICAgIEpTT05PYmplY3QgcmVzcG9u
c2VKU09OID0gbmV3IEpTT05PYmplY3QocmVzcG9uc2UpOwotICAgIEpTT05BcnJheSBpY2VTZXJ2
ZXJzID0gcmVzcG9uc2VKU09OLmdldEpTT05BcnJheSgiaWNlU2VydmVycyIpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgaWNlU2VydmVycy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICBKU09OT2Jq
ZWN0IHNlcnZlciA9IGljZVNlcnZlcnMuZ2V0SlNPTk9iamVjdChpKTsKLSAgICAgIEpTT05BcnJh
eSB0dXJuVXJscyA9IHNlcnZlci5nZXRKU09OQXJyYXkoInVybHMiKTsKLSAgICAgIFN0cmluZyB1
c2VybmFtZSA9IHNlcnZlci5oYXMoInVzZXJuYW1lIikgPyBzZXJ2ZXIuZ2V0U3RyaW5nKCJ1c2Vy
bmFtZSIpIDogIiI7Ci0gICAgICBTdHJpbmcgY3JlZGVudGlhbCA9IHNlcnZlci5oYXMoImNyZWRl
bnRpYWwiKSA/IHNlcnZlci5nZXRTdHJpbmcoImNyZWRlbnRpYWwiKSA6ICIiOwotICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCB0dXJuVXJscy5sZW5ndGgoKTsgaisrKSB7Ci0gICAgICAgIFN0cmlu
ZyB0dXJuVXJsID0gdHVyblVybHMuZ2V0U3RyaW5nKGopOwotICAgICAgICB0dXJuU2VydmVycy5h
ZGQobmV3IFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcih0dXJuVXJsLCB1c2VybmFtZSwgY3JlZGVu
dGlhbCkpOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHVyblNlcnZlcnM7Ci0gIH0KLQot
ICAvLyBSZXR1cm4gdGhlIGxpc3Qgb2YgSUNFIHNlcnZlcnMgZGVzY3JpYmVkIGJ5IGEgV2ViUlRD
UGVlckNvbm5lY3Rpb24KLSAgLy8gY29uZmlndXJhdGlvbiBzdHJpbmcuCi0gIHByaXZhdGUgTGlu
a2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnNGcm9tUENDb25maWdK
U09OKFN0cmluZyBwY0NvbmZpZykKLSAgICAgIHRocm93cyBKU09ORXhjZXB0aW9uIHsKLSAgICBK
U09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdChwY0NvbmZpZyk7Ci0gICAgSlNPTkFycmF5
IHNlcnZlcnMgPSBqc29uLmdldEpTT05BcnJheSgiaWNlU2VydmVycyIpOwotICAgIExpbmtlZExp
c3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiByZXQgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29u
bmVjdGlvbi5JY2VTZXJ2ZXI+KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxl
bmd0aCgpOyArK2kpIHsKLSAgICAgIEpTT05PYmplY3Qgc2VydmVyID0gc2VydmVycy5nZXRKU09O
T2JqZWN0KGkpOwotICAgICAgU3RyaW5nIHVybCA9IHNlcnZlci5nZXRTdHJpbmcoInVybHMiKTsK
LSAgICAgIFN0cmluZyBjcmVkZW50aWFsID0gc2VydmVyLmhhcygiY3JlZGVudGlhbCIpID8gc2Vy
dmVyLmdldFN0cmluZygiY3JlZGVudGlhbCIpIDogIiI7Ci0gICAgICByZXQuYWRkKG5ldyBQZWVy
Q29ubmVjdGlvbi5JY2VTZXJ2ZXIodXJsLCAiIiwgY3JlZGVudGlhbCkpOwotICAgIH0KLSAgICBy
ZXR1cm4gcmV0OwotICB9Ci0KLSAgLy8gUmV0dXJuIHRoZSBjb250ZW50cyBvZiBhbiBJbnB1dFN0
cmVhbSBhcyBhIFN0cmluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRyYWluU3RyZWFtKElu
cHV0U3RyZWFtIGluKSB7Ci0gICAgU2Nhbm5lciBzID0gbmV3IFNjYW5uZXIoaW4pLnVzZURlbGlt
aXRlcigiXFxBIik7Ci0gICAgcmV0dXJuIHMuaGFzTmV4dCgpID8gcy5uZXh0KCkgOiAiIjsKLSAg
fQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1NldHRpbmdzQWN0aXZpdHku
amF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvU2V0dGluZ3NB
Y3Rpdml0eS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvU2V0dGluZ3NBY3Rpdml0eS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjY2ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1p
bXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJl
ZFByZWZlcmVuY2VzOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlcy5P
blNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRs
ZTsKLWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuTGlzdFByZWZlcmVuY2U7Ci1pbXBvcnQgYW5k
cm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmEyRW51
bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLnZvaWNlZW5naW5lLldlYlJ0Y0F1ZGlvVXRpbHM7
Ci0KLS8qKgotICogU2V0dGluZ3MgYWN0aXZpdHkgZm9yIEFwcFJUQy4KLSAqLwotcHVibGljIGNs
YXNzIFNldHRpbmdzQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSBpbXBsZW1lbnRzIE9uU2hhcmVk
UHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyIHsKLSAgcHJpdmF0ZSBTZXR0aW5nc0ZyYWdtZW50IHNl
dHRpbmdzRnJhZ21lbnQ7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZWaWRlb0NhbGw7Ci0gIHBy
aXZhdGUgU3RyaW5nIGtleXByZWZTY3JlZW5jYXB0dXJlOwotICBwcml2YXRlIFN0cmluZyBrZXlw
cmVmQ2FtZXJhMjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJlc29sdXRpb247Ci0gIHByaXZh
dGUgU3RyaW5nIGtleXByZWZGcHM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZDYXB0dXJlUXVh
bGl0eVNsaWRlcjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5cGU7
Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZNYXhWaWRlb0JpdHJhdGVWYWx1ZTsKLSAgcHJpdmF0
ZSBTdHJpbmcga2V5UHJlZlZpZGVvQ29kZWM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZId0Nv
ZGVjOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQ2FwdHVyZVRvVGV4dHVyZTsKLQotICBwcml2
YXRlIFN0cmluZyBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVUeXBlOwotICBwcml2YXRlIFN0cmlu
ZyBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5UHJl
ZkF1ZGlvQ29kZWM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZOb0F1ZGlvUHJvY2Vzc2luZzsK
LSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkFlY0R1bXA7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXBy
ZWZPcGVuU0xFUzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluQUVDOwot
ICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BR0M7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZEaXNhYmxlQnVpbHRJbk5TOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRW5h
YmxlTGV2ZWxDb250cm9sOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmU3BlYWtlcnBob25lOwot
Ci0gIHByaXZhdGUgU3RyaW5nIGtleVByZWZSb29tU2VydmVyVXJsOwotICBwcml2YXRlIFN0cmlu
ZyBrZXlQcmVmRGlzcGxheUh1ZDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5UHJlZlRyYWNpbmc7Ci0K
LSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3Rh
bmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotICAg
IGtleXByZWZWaWRlb0NhbGwgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl92aWRlb2NhbGxfa2V5
KTsKLSAgICBrZXlwcmVmU2NyZWVuY2FwdHVyZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Nj
cmVlbmNhcHR1cmVfa2V5KTsKLSAgICBrZXlwcmVmQ2FtZXJhMiA9IGdldFN0cmluZyhSLnN0cmlu
Zy5wcmVmX2NhbWVyYTJfa2V5KTsKLSAgICBrZXlwcmVmUmVzb2x1dGlvbiA9IGdldFN0cmluZyhS
LnN0cmluZy5wcmVmX3Jlc29sdXRpb25fa2V5KTsKLSAgICBrZXlwcmVmRnBzID0gZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfZnBzX2tleSk7Ci0gICAga2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVy
ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfa2V5KTsKLSAg
ICBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21h
eHZpZGVvYml0cmF0ZV9rZXkpOwotICAgIGtleXByZWZNYXhWaWRlb0JpdHJhdGVWYWx1ZSA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX2tleSk7Ci0gICAga2V5
UHJlZlZpZGVvQ29kZWMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl92aWRlb2NvZGVjX2tleSk7
Ci0gICAga2V5cHJlZkh3Q29kZWMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9od2NvZGVjX2tl
eSk7Ci0gICAga2V5cHJlZkNhcHR1cmVUb1RleHR1cmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl9jYXB0dXJldG90ZXh0dXJlX2tleSk7Ci0KLSAgICBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVU
eXBlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGVfa2V5KTsKLSAg
ICBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1ZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfa2V5KTsKLSAgICBrZXlQcmVmQXVkaW9Db2RlYyA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX2F1ZGlvY29kZWNfa2V5KTsKLSAgICBrZXlwcmVmTm9BdWRp
b1Byb2Nlc3NpbmcgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19r
ZXkpOwotICAgIGtleXByZWZBZWNEdW1wID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYWVjZHVt
cF9rZXkpOwotICAgIGtleXByZWZPcGVuU0xFUyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX29w
ZW5zbGVzX2tleSk7Ci0gICAga2V5cHJlZkRpc2FibGVCdWlsdEluQUVDID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJs
ZUJ1aWx0SW5BR0MgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2Fn
Y19rZXkpOwotICAgIGtleXByZWZEaXNhYmxlQnVpbHRJbk5TID0gZ2V0U3RyaW5nKFIuc3RyaW5n
LnByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19rZXkpOwotICAgIGtleXByZWZFbmFibGVMZXZlbENv
bnRyb2wgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9lbmFibGVfbGV2ZWxfY29udHJvbF9rZXkp
OwotICAgIGtleXByZWZTcGVha2VycGhvbmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zcGVh
a2VycGhvbmVfa2V5KTsKLQotICAgIGtleVByZWZSb29tU2VydmVyVXJsID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfcm9vbV9zZXJ2ZXJfdXJsX2tleSk7Ci0gICAga2V5UHJlZkRpc3BsYXlIdWQg
PSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNwbGF5aHVkX2tleSk7Ci0gICAga2V5UHJlZlRy
YWNpbmcgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl90cmFjaW5nX2tleSk7Ci0KLSAgICAvLyBE
aXNwbGF5IHRoZSBmcmFnbWVudCBhcyB0aGUgbWFpbiBjb250ZW50LgotICAgIHNldHRpbmdzRnJh
Z21lbnQgPSBuZXcgU2V0dGluZ3NGcmFnbWVudCgpOwotICAgIGdldEZyYWdtZW50TWFuYWdlcigp
Ci0gICAgICAgIC5iZWdpblRyYW5zYWN0aW9uKCkKLSAgICAgICAgLnJlcGxhY2UoYW5kcm9pZC5S
LmlkLmNvbnRlbnQsIHNldHRpbmdzRnJhZ21lbnQpCi0gICAgICAgIC5jb21taXQoKTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvblJlc3VtZSgpIHsKLSAgICBzdXBlci5v
blJlc3VtZSgpOwotICAgIC8vIFNldCBzdW1tYXJ5IHRvIGJlIHRoZSB1c2VyLWRlc2NyaXB0aW9u
IGZvciB0aGUgc2VsZWN0ZWQgdmFsdWUKLSAgICBTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVm
ZXJlbmNlcyA9Ci0gICAgICAgIHNldHRpbmdzRnJhZ21lbnQuZ2V0UHJlZmVyZW5jZVNjcmVlbigp
LmdldFNoYXJlZFByZWZlcmVuY2VzKCk7Ci0gICAgc2hhcmVkUHJlZmVyZW5jZXMucmVnaXN0ZXJP
blNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLSAgICB1cGRhdGVTdW1tYXJ5
QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlZpZGVvQ2FsbCk7Ci0gICAgdXBkYXRlU3VtbWFy
eUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZTY3JlZW5jYXB0dXJlKTsKLSAgICB1cGRhdGVT
dW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkNhbWVyYTIpOwotICAgIHVwZGF0ZVN1
bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZSZXNvbHV0aW9uKTsKLSAgICB1cGRhdGVT
dW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmRnBzKTsKLSAgICB1cGRhdGVTdW1tYXJ5
QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVyKTsKLSAgICB1
cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlw
ZSk7Ci0gICAgdXBkYXRlU3VtbWFyeUJpdHJhdGUoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZN
YXhWaWRlb0JpdHJhdGVWYWx1ZSk7Ci0gICAgc2V0VmlkZW9CaXRyYXRlRW5hYmxlKHNoYXJlZFBy
ZWZlcmVuY2VzKTsKLSAgICB1cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVm
VmlkZW9Db2RlYyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXBy
ZWZId0NvZGVjKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJl
ZkNhcHR1cmVUb1RleHR1cmUpOwotCi0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNl
cywga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlwZSk7Ci0gICAgdXBkYXRlU3VtbWFyeUJpdHJh
dGUoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVZhbHVlKTsKLSAg
ICBzZXRBdWRpb0JpdHJhdGVFbmFibGUoc2hhcmVkUHJlZmVyZW5jZXMpOwotICAgIHVwZGF0ZVN1
bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZBdWRpb0NvZGVjKTsKLSAgICB1cGRhdGVT
dW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZk5vQXVkaW9Qcm9jZXNzaW5nKTsKLSAg
ICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkFlY0R1bXApOwotICAg
IHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmT3BlblNMRVMpOwotICAg
IHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5B
RUMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmRGlzYWJs
ZUJ1aWx0SW5BR0MpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlw
cmVmRGlzYWJsZUJ1aWx0SW5OUyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5j
ZXMsIGtleXByZWZFbmFibGVMZXZlbENvbnRyb2wpOwotICAgIHVwZGF0ZVN1bW1hcnlMaXN0KHNo
YXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmU3BlYWtlcnBob25lKTsKLQotICAgIHVwZGF0ZVN1bW1h
cnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZSb29tU2VydmVyVXJsKTsKLSAgICB1cGRhdGVT
dW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5UHJlZkRpc3BsYXlIdWQpOwotICAgIHVwZGF0
ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmVHJhY2luZyk7Ci0KLSAgICBpZiAo
IUNhbWVyYTJFbnVtZXJhdG9yLmlzU3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICBQcmVmZXJlbmNl
IGNhbWVyYTJQcmVmZXJlbmNlID0gc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlw
cmVmQ2FtZXJhMik7Ci0KLSAgICAgIGNhbWVyYTJQcmVmZXJlbmNlLnNldFN1bW1hcnkoZ2V0U3Ry
aW5nKFIuc3RyaW5nLnByZWZfY2FtZXJhMl9ub3Rfc3VwcG9ydGVkKSk7Ci0gICAgICBjYW1lcmEy
UHJlZmVyZW5jZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBEaXNhYmxlIGZv
cmNpbmcgV2ViUlRDIGJhc2VkIEFFQyBzbyBpdCB3b24ndCBhZmZlY3Qgb3VyIHZhbHVlLgotICAg
IC8vIE90aGVyd2lzZSwgaWYgaXQgd2FzIGVuYWJsZWQsIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJT
dXBwb3J0ZWQgd291bGQgYWx3YXlzIHJldHVybiBmYWxzZS4KLSAgICBXZWJSdGNBdWRpb1V0aWxz
LnNldFdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoZmFsc2UpOwotICAgIGlmICghV2Vi
UnRjQXVkaW9VdGlscy5pc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkpIHsKLSAgICAg
IFByZWZlcmVuY2UgZGlzYWJsZUJ1aWx0SW5BRUNQcmVmZXJlbmNlID0KLSAgICAgICAgICBzZXR0
aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleXByZWZEaXNhYmxlQnVpbHRJbkFFQyk7Ci0K
LSAgICAgIGRpc2FibGVCdWlsdEluQUVDUHJlZmVyZW5jZS5zZXRTdW1tYXJ5KGdldFN0cmluZyhS
LnN0cmluZy5wcmVmX2J1aWx0X2luX2FlY19ub3RfYXZhaWxhYmxlKSk7Ci0gICAgICBkaXNhYmxl
QnVpbHRJbkFFQ1ByZWZlcmVuY2Uuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgV2Vi
UnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKGZhbHNlKTsK
LSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMuaXNBdXRvbWF0aWNHYWluQ29udHJvbFN1cHBvcnRl
ZCgpKSB7Ci0gICAgICBQcmVmZXJlbmNlIGRpc2FibGVCdWlsdEluQUdDUHJlZmVyZW5jZSA9Ci0g
ICAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlwcmVmRGlzYWJsZUJ1
aWx0SW5BR0MpOwotCi0gICAgICBkaXNhYmxlQnVpbHRJbkFHQ1ByZWZlcmVuY2Uuc2V0U3VtbWFy
eShnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9idWlsdF9pbl9hZ2Nfbm90X2F2YWlsYWJsZSkpOwot
ICAgICAgZGlzYWJsZUJ1aWx0SW5BR0NQcmVmZXJlbmNlLnNldEVuYWJsZWQoZmFsc2UpOwotICAg
IH0KLQotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3Io
ZmFsc2UpOwotICAgIGlmICghV2ViUnRjQXVkaW9VdGlscy5pc05vaXNlU3VwcHJlc3NvclN1cHBv
cnRlZCgpKSB7Ci0gICAgICBQcmVmZXJlbmNlIGRpc2FibGVCdWlsdEluTlNQcmVmZXJlbmNlID0K
LSAgICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleXByZWZEaXNhYmxl
QnVpbHRJbk5TKTsKLQotICAgICAgZGlzYWJsZUJ1aWx0SW5OU1ByZWZlcmVuY2Uuc2V0U3VtbWFy
eShnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9idWlsdF9pbl9uc19ub3RfYXZhaWxhYmxlKSk7Ci0g
ICAgICBkaXNhYmxlQnVpbHRJbk5TUHJlZmVyZW5jZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25QYXVzZSgpIHsKLSAgICBz
dXBlci5vblBhdXNlKCk7Ci0gICAgU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMg
PQotICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmdldFByZWZlcmVuY2VTY3JlZW4oKS5nZXRTaGFy
ZWRQcmVmZXJlbmNlcygpOwotICAgIHNoYXJlZFByZWZlcmVuY2VzLnVucmVnaXN0ZXJPblNoYXJl
ZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBvblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VkKFNoYXJlZFByZWZlcmVuY2VzIHNo
YXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgot
ICAgIGlmIChrZXkuZXF1YWxzKGtleXByZWZSZXNvbHV0aW9uKQotICAgICAgICB8fCBrZXkuZXF1
YWxzKGtleXByZWZGcHMpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZk1heFZpZGVvQml0
cmF0ZVR5cGUpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5UHJlZlZpZGVvQ29kZWMpCi0gICAg
ICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlwZSkKLSAgICAgICAg
fHwga2V5LmVxdWFscyhrZXlQcmVmQXVkaW9Db2RlYykKLSAgICAgICAgfHwga2V5LmVxdWFscyhr
ZXlQcmVmUm9vbVNlcnZlclVybCkpIHsKLSAgICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVy
ZW5jZXMsIGtleSk7Ci0gICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKGtleXByZWZNYXhWaWRlb0Jp
dHJhdGVWYWx1ZSkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmU3RhcnRBdWRpb0JpdHJh
dGVWYWx1ZSkpIHsKLSAgICAgIHVwZGF0ZVN1bW1hcnlCaXRyYXRlKHNoYXJlZFByZWZlcmVuY2Vz
LCBrZXkpOwotICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhrZXlwcmVmVmlkZW9DYWxsKQotICAg
ICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZTY3JlZW5jYXB0dXJlKQotICAgICAgICB8fCBrZXku
ZXF1YWxzKGtleXByZWZDYW1lcmEyKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleVByZWZUcmFj
aW5nKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZDYXB0dXJlUXVhbGl0eVNsaWRlcikK
LSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmSHdDb2RlYykKLSAgICAgICAgfHwga2V5LmVx
dWFscyhrZXlwcmVmQ2FwdHVyZVRvVGV4dHVyZSkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlw
cmVmTm9BdWRpb1Byb2Nlc3NpbmcpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkFlY0R1
bXApCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZk9wZW5TTEVTKQotICAgICAgICB8fCBr
ZXkuZXF1YWxzKGtleXByZWZEaXNhYmxlQnVpbHRJbkFFQykKLSAgICAgICAgfHwga2V5LmVxdWFs
cyhrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BR0MpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJl
ZkRpc2FibGVCdWlsdEluTlMpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkVuYWJsZUxl
dmVsQ29udHJvbCkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlQcmVmRGlzcGxheUh1ZCkpIHsK
LSAgICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXkpOwotICAgIH0gZWxz
ZSBpZiAoa2V5LmVxdWFscyhrZXlwcmVmU3BlYWtlcnBob25lKSkgewotICAgICAgdXBkYXRlU3Vt
bWFyeUxpc3Qoc2hhcmVkUHJlZmVyZW5jZXMsIGtleSk7Ci0gICAgfQotICAgIC8vIGNsYW5nLWZv
cm1hdCBvbgotICAgIGlmIChrZXkuZXF1YWxzKGtleXByZWZNYXhWaWRlb0JpdHJhdGVUeXBlKSkg
ewotICAgICAgc2V0VmlkZW9CaXRyYXRlRW5hYmxlKHNoYXJlZFByZWZlcmVuY2VzKTsKLSAgICB9
Ci0gICAgaWYgKGtleS5lcXVhbHMoa2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlwZSkpIHsKLSAg
ICAgIHNldEF1ZGlvQml0cmF0ZUVuYWJsZShzaGFyZWRQcmVmZXJlbmNlcyk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1bW1hcnkoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVk
UHJlZmVyZW5jZXMsIFN0cmluZyBrZXkpIHsKLSAgICBQcmVmZXJlbmNlIHVwZGF0ZWRQcmVmID0g
c2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXkpOwotICAgIC8vIFNldCBzdW1tYXJ5
IHRvIGJlIHRoZSB1c2VyLWRlc2NyaXB0aW9uIGZvciB0aGUgc2VsZWN0ZWQgdmFsdWUKLSAgICB1
cGRhdGVkUHJlZi5zZXRTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLmdldFN0cmluZyhrZXksICIi
KSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlU3VtbWFyeUJpdHJhdGUoU2hhcmVkUHJl
ZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMsIFN0cmluZyBrZXkpIHsKLSAgICBQcmVmZXJlbmNl
IHVwZGF0ZWRQcmVmID0gc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXkpOwotICAg
IHVwZGF0ZWRQcmVmLnNldFN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMuZ2V0U3RyaW5nKGtleSwg
IiIpICsgIiBrYnBzIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlU3VtbWFyeUIoU2hh
cmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMsIFN0cmluZyBrZXkpIHsKLSAgICBQcmVm
ZXJlbmNlIHVwZGF0ZWRQcmVmID0gc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXkp
OwotICAgIHVwZGF0ZWRQcmVmLnNldFN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMuZ2V0Qm9vbGVh
bihrZXksIHRydWUpCi0gICAgICAgICAgICA/IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3ZhbHVl
X2VuYWJsZWQpCi0gICAgICAgICAgICA6IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3ZhbHVlX2Rp
c2FibGVkKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlU3VtbWFyeUxpc3QoU2hhcmVk
UHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMsIFN0cmluZyBrZXkpIHsKLSAgICBMaXN0UHJl
ZmVyZW5jZSB1cGRhdGVkUHJlZiA9IChMaXN0UHJlZmVyZW5jZSkgc2V0dGluZ3NGcmFnbWVudC5m
aW5kUHJlZmVyZW5jZShrZXkpOwotICAgIHVwZGF0ZWRQcmVmLnNldFN1bW1hcnkodXBkYXRlZFBy
ZWYuZ2V0RW50cnkoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VmlkZW9CaXRyYXRlRW5h
YmxlKFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzKSB7Ci0gICAgUHJlZmVyZW5j
ZSBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlID0KLSAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5k
UHJlZmVyZW5jZShrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVmFsdWUpOwotICAgIFN0cmluZyBiaXRy
YXRlVHlwZURlZmF1bHQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGVf
ZGVmYXVsdCk7Ci0gICAgU3RyaW5nIGJpdHJhdGVUeXBlID0KLSAgICAgICAgc2hhcmVkUHJlZmVy
ZW5jZXMuZ2V0U3RyaW5nKGtleXByZWZNYXhWaWRlb0JpdHJhdGVUeXBlLCBiaXRyYXRlVHlwZURl
ZmF1bHQpOwotICAgIGlmIChiaXRyYXRlVHlwZS5lcXVhbHMoYml0cmF0ZVR5cGVEZWZhdWx0KSkg
ewotICAgICAgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9
IGVsc2UgewotICAgICAgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZS5zZXRFbmFibGVkKHRydWUpOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRBdWRpb0JpdHJhdGVFbmFibGUoU2hhcmVk
UHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMpIHsKLSAgICBQcmVmZXJlbmNlIGJpdHJhdGVQ
cmVmZXJlbmNlVmFsdWUgPQotICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNl
KGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVZhbHVlKTsKLSAgICBTdHJpbmcgYml0cmF0ZVR5cGVE
ZWZhdWx0ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGVfZGVmYXVs
dCk7Ci0gICAgU3RyaW5nIGJpdHJhdGVUeXBlID0KLSAgICAgICAgc2hhcmVkUHJlZmVyZW5jZXMu
Z2V0U3RyaW5nKGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGUsIGJpdHJhdGVUeXBlRGVmYXVs
dCk7Ci0gICAgaWYgKGJpdHJhdGVUeXBlLmVxdWFscyhiaXRyYXRlVHlwZURlZmF1bHQpKSB7Ci0g
ICAgICBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAg
fQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvU2V0dGluZ3NGcmFn
bWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0
aW5nc0ZyYWdtZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9TZXR0aW5nc0ZyYWdtZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNiAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5Q
cmVmZXJlbmNlRnJhZ21lbnQ7Ci0KLS8qKgotICogU2V0dGluZ3MgZnJhZ21lbnQgZm9yIEFwcFJU
Qy4KLSAqLwotcHVibGljIGNsYXNzIFNldHRpbmdzRnJhZ21lbnQgZXh0ZW5kcyBQcmVmZXJlbmNl
RnJhZ21lbnQgewotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNh
dmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0
ZSk7Ci0gICAgLy8gTG9hZCB0aGUgcHJlZmVyZW5jZXMgZnJvbSBhbiBYTUwgcmVzb3VyY2UKLSAg
ICBhZGRQcmVmZXJlbmNlc0Zyb21SZXNvdXJjZShSLnhtbC5wcmVmZXJlbmNlcyk7Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50LmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1RDUENoYW5uZWxDbGll
bnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L1RDUENoYW5uZWxDbGllbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM1NCArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0
IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBvcmcud2VicnRjLlRocmVhZFV0aWxzOwotCi1p
bXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9u
OwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Qcmlu
dFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5T
ZXJ2ZXJTb2NrZXQ7Ci1pbXBvcnQgamF2YS5uZXQuU29ja2V0OwotaW1wb3J0IGphdmEubmV0LlVu
a25vd25Ib3N0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9y
U2VydmljZTsKLQotLyoqCi0gKiBSZXBsYWNlbWVudCBmb3IgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dCBmb3IgZGlyZWN0IGNvbW11bmljYXRpb24gYmV0d2VlbiB0d28gSVAgYWRkcmVzc2VzLiBIYW5k
bGVzCi0gKiB0aGUgc2lnbmFsaW5nIGJldHdlZW4gdGhlIHR3byBjbGllbnRzIHVzaW5nIGEgVENQ
IGNvbm5lY3Rpb24uCi0gKgotICogPHA+QWxsIHB1YmxpYyBtZXRob2RzIHNob3VsZCBiZSBjYWxs
ZWQgZnJvbSBhIGxvb3BlciBleGVjdXRvciB0aHJlYWQKLSAqIHBhc3NlZCBpbiBhIGNvbnN0cnVj
dG9yLCBvdGhlcndpc2UgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgotICogQWxsIGV2ZW50cyBh
cmUgZGlzcGF0Y2hlZCBvbiB0aGUgc2FtZSB0aHJlYWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUQ1BD
aGFubmVsQ2xpZW50IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUQ1BD
aGFubmVsQ2xpZW50IjsKLQotICBwcml2YXRlIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRv
cjsKLSAgcHJpdmF0ZSBmaW5hbCBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyIGV4ZWN1dG9yVGhy
ZWFkQ2hlY2s7Ci0gIHByaXZhdGUgZmluYWwgVENQQ2hhbm5lbEV2ZW50cyBldmVudExpc3RlbmVy
OwotICBwcml2YXRlIFRDUFNvY2tldCBzb2NrZXQ7Ci0KLSAgLyoqCi0gICAqIENhbGxiYWNrIGlu
dGVyZmFjZSBmb3IgbWVzc2FnZXMgZGVsaXZlcmVkIG9uIFRDUCBDb25uZWN0aW9uLiBBbGwgY2Fs
bGJhY2tzIGFyZSBpbnZva2VkIGZyb20gdGhlCi0gICAqIGxvb3BlciBleGVjdXRvciB0aHJlYWQu
Ci0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIFRDUENoYW5uZWxFdmVudHMgewotICAgIHZvaWQg
b25UQ1BDb25uZWN0ZWQoYm9vbGVhbiBzZXJ2ZXIpOwotICAgIHZvaWQgb25UQ1BNZXNzYWdlKFN0
cmluZyBtZXNzYWdlKTsKLSAgICB2b2lkIG9uVENQRXJyb3IoU3RyaW5nIGRlc2NyaXB0aW9uKTsK
LSAgICB2b2lkIG9uVENQQ2xvc2UoKTsKLSAgfQotCi0gIC8qKgotICAgKiBJbml0aWFsaXplcyB0
aGUgVENQQ2hhbm5lbENsaWVudC4gSWYgSVAgaXMgYSBsb2NhbCBJUCBhZGRyZXNzLCBzdGFydHMg
YSBsaXN0ZW5pbmcgc2VydmVyIG9uCi0gICAqIHRoYXQgSVAuIElmIG5vdCwgaW5zdGVhZCBjb25u
ZWN0cyB0byB0aGUgSVAuCi0gICAqCi0gICAqIEBwYXJhbSBldmVudExpc3RlbmVyIExpc3RlbmVy
IHRoYXQgd2lsbCByZWNlaXZlIGV2ZW50cyBmcm9tIHRoZSBjbGllbnQuCi0gICAqIEBwYXJhbSBp
cCBJUCBhZGRyZXNzIHRvIGxpc3RlbiBvbiBvciBjb25uZWN0IHRvLgotICAgKiBAcGFyYW0gcG9y
dCBQb3J0IHRvIGxpc3RlbiBvbiBvciBjb25uZWN0IHRvLgotICAgKi8KLSAgcHVibGljIFRDUENo
YW5uZWxDbGllbnQoCi0gICAgICBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IsIFRDUENoYW5uZWxF
dmVudHMgZXZlbnRMaXN0ZW5lciwgU3RyaW5nIGlwLCBpbnQgcG9ydCkgewotICAgIHRoaXMuZXhl
Y3V0b3IgPSBleGVjdXRvcjsKLSAgICBleGVjdXRvclRocmVhZENoZWNrID0gbmV3IFRocmVhZFV0
aWxzLlRocmVhZENoZWNrZXIoKTsKLSAgICBleGVjdXRvclRocmVhZENoZWNrLmRldGFjaFRocmVh
ZCgpOwotICAgIHRoaXMuZXZlbnRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXI7Ci0KLSAgICBJbmV0
QWRkcmVzcyBhZGRyZXNzOwotICAgIHRyeSB7Ci0gICAgICBhZGRyZXNzID0gSW5ldEFkZHJlc3Mu
Z2V0QnlOYW1lKGlwKTsKLSAgICB9IGNhdGNoIChVbmtub3duSG9zdEV4Y2VwdGlvbiBlKSB7Ci0g
ICAgICByZXBvcnRFcnJvcigiSW52YWxpZCBJUCBhZGRyZXNzLiIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChhZGRyZXNzLmlzQW55TG9jYWxBZGRyZXNzKCkpIHsKLSAgICAgIHNv
Y2tldCA9IG5ldyBUQ1BTb2NrZXRTZXJ2ZXIoYWRkcmVzcywgcG9ydCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIHNvY2tldCA9IG5ldyBUQ1BTb2NrZXRDbGllbnQoYWRkcmVzcywgcG9ydCk7Ci0gICAg
fQotCi0gICAgc29ja2V0LnN0YXJ0KCk7Ci0gIH0KLQotICAvKioKLSAgICogRGlzY29ubmVjdHMg
dGhlIGNsaWVudCBpZiBub3QgYWxyZWFkeSBkaXNjb25uZWN0ZWQuIFRoaXMgd2lsbCBmaXJlIHRo
ZSBvblRDUENsb3NlIGV2ZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHsK
LSAgICBleGVjdXRvclRocmVhZENoZWNrLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0KLSAgICBz
b2NrZXQuZGlzY29ubmVjdCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIFNlbmRzIGEgbWVzc2FnZSBv
biB0aGUgc29ja2V0LgotICAgKgotICAgKiBAcGFyYW0gbWVzc2FnZSBNZXNzYWdlIHRvIGJlIHNl
bnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZW5kKFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgZXhl
Y3V0b3JUaHJlYWRDaGVjay5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotCi0gICAgc29ja2V0LnNl
bmQobWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAgICogSGVscGVyIG1ldGhvZCBmb3IgZmlyaW5n
IG9uVENQRXJyb3IgZXZlbnRzLiBDYWxscyBvblRDUEVycm9yIG9uIHRoZSBleGVjdXRvciB0aHJl
YWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIG1lc3Nh
Z2UpIHsKLSAgICBMb2cuZShUQUcsICJUQ1AgRXJyb3I6ICIgKyBtZXNzYWdlKTsKLSAgICBleGVj
dXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICBldmVudExpc3RlbmVyLm9uVENQRXJyb3IobWVzc2Fn
ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKioKLSAgICogQmFzZSBjbGFzcyBmb3Ig
c2VydmVyIGFuZCBjbGllbnQgc29ja2V0cy4gQ29udGFpbnMgYSBsaXN0ZW5pbmcgdGhyZWFkIHRo
YXQgd2lsbCBjYWxsCi0gICAqIGV2ZW50TGlzdGVuZXIub25UQ1BNZXNzYWdlIG9uIG5ldyBtZXNz
YWdlcy4KLSAgICovCi0gIHByaXZhdGUgYWJzdHJhY3QgY2xhc3MgVENQU29ja2V0IGV4dGVuZHMg
VGhyZWFkIHsKLSAgICAvLyBMb2NrIGZvciBlZGl0aW5nIG91dCBhbmQgcmF3U29ja2V0Ci0gICAg
cHJvdGVjdGVkIGZpbmFsIE9iamVjdCByYXdTb2NrZXRMb2NrOwotICAgIHByaXZhdGUgUHJpbnRX
cml0ZXIgb3V0OwotICAgIHByaXZhdGUgU29ja2V0IHJhd1NvY2tldDsKLQotICAgIC8qKgotICAg
ICAqIENvbm5lY3QgdG8gdGhlIHBlZXIsIHBvdGVudGlhbGx5IGEgc2xvdyBvcGVyYXRpb24uCi0g
ICAgICoKLSAgICAgKiBAcmV0dXJuIFNvY2tldCBjb25uZWN0aW9uLCBudWxsIGlmIGNvbm5lY3Rp
b24gZmFpbGVkLgotICAgICAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBTb2NrZXQgY29ubmVjdCgp
OwotICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgc29ja2V0cyBpcyBhIHNlcnZlciByYXdTb2NrZXQu
ICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNTZXJ2ZXIoKTsKLQotICAgIFRDUFNv
Y2tldCgpIHsKLSAgICAgIHJhd1NvY2tldExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gICAgfQotCi0g
ICAgLyoqCi0gICAgICogVGhlIGxpc3RlbmluZyB0aHJlYWQuCi0gICAgICovCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgTG9nLmQoVEFHLCAiTGlzdGVuaW5n
IHRocmVhZCBzdGFydGVkLi4uIik7Ci0KLSAgICAgIC8vIFJlY2VpdmUgY29ubmVjdGlvbiB0byB0
ZW1wb3JhcnkgdmFyaWFibGUgZmlyc3QsIHNvIHdlIGRvbid0IGJsb2NrLgotICAgICAgU29ja2V0
IHRlbXBTb2NrZXQgPSBjb25uZWN0KCk7Ci0gICAgICBCdWZmZXJlZFJlYWRlciBpbjsKLQotICAg
ICAgTG9nLmQoVEFHLCAiVENQIGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQuIik7Ci0KLSAgICAgIHN5
bmNocm9uaXplZCAocmF3U29ja2V0TG9jaykgewotICAgICAgICBpZiAocmF3U29ja2V0ICE9IG51
bGwpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJTb2NrZXQgYWxyZWFkeSBleGlzdGVkIGFuZCB3
aWxsIGJlIHJlcGxhY2VkLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmF3U29ja2V0ID0gdGVt
cFNvY2tldDsKLQotICAgICAgICAvLyBDb25uZWN0aW5nIGZhaWxlZCwgZXJyb3IgaGFzIGFscmVh
ZHkgYmVlbiByZXBvcnRlZCwganVzdCBleGl0LgotICAgICAgICBpZiAocmF3U29ja2V0ID09IG51
bGwpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICB0cnkgewotICAg
ICAgICAgIG91dCA9IG5ldyBQcmludFdyaXRlcihyYXdTb2NrZXQuZ2V0T3V0cHV0U3RyZWFtKCks
IHRydWUpOwotICAgICAgICAgIGluID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVh
bVJlYWRlcihyYXdTb2NrZXQuZ2V0SW5wdXRTdHJlYW0oKSkpOwotICAgICAgICB9IGNhdGNoIChJ
T0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBvcGVuIElP
IG9uIHJhd1NvY2tldDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgTG9nLnYoVEFHLCAiRXhlY3V0ZSBvblRDUENvbm5l
Y3RlZCIpOwotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAg
IEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgTG9nLnYo
VEFHLCAiUnVuIG9uVENQQ29ubmVjdGVkIik7Ci0gICAgICAgICAgZXZlbnRMaXN0ZW5lci5vblRD
UENvbm5lY3RlZChpc1NlcnZlcigpKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0KLSAgICAgIHdo
aWxlICh0cnVlKSB7Ci0gICAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlOwotICAgICAgICB0cnkg
ewotICAgICAgICAgIG1lc3NhZ2UgPSBpbi5yZWFkTGluZSgpOwotICAgICAgICB9IGNhdGNoIChJ
T0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgc3luY2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7
Ci0gICAgICAgICAgICAvLyBJZiBzb2NrZXQgd2FzIGNsb3NlZCwgdGhpcyBpcyBleHBlY3RlZC4K
LSAgICAgICAgICAgIGlmIChyYXdTb2NrZXQgPT0gbnVsbCkgewotICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0KLSAgICAgICAgICByZXBvcnRFcnJvcigi
RmFpbGVkIHRvIHJlYWQgZnJvbSByYXdTb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBObyBkYXRhIHJlY2VpdmVkLCBy
YXdTb2NrZXQgcHJvYmFibHkgY2xvc2VkLgotICAgICAgICBpZiAobWVzc2FnZSA9PSBudWxsKSB7
Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBleGVjdXRvci5leGVjdXRl
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBMb2cudihUQUcsICJSZWNlaXZlOiAiICsgbWVzc2Fn
ZSk7Ci0gICAgICAgICAgICBldmVudExpc3RlbmVyLm9uVENQTWVzc2FnZShtZXNzYWdlKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAgICBMb2cuZChUQUcsICJSZWNl
aXZpbmcgdGhyZWFkIGV4aXRpbmcuLi4iKTsKLQotICAgICAgLy8gQ2xvc2UgdGhlIHJhd1NvY2tl
dCBpZiBpdCBpcyBzdGlsbCBvcGVuLgotICAgICAgZGlzY29ubmVjdCgpOwotICAgIH0KLQotICAg
IC8qKgotICAgICAqIENsb3NlcyB0aGUgcmF3U29ja2V0IGlmIGl0IGlzIHN0aWxsIG9wZW4uIEFs
c28gZmlyZXMgdGhlIG9uVENQQ2xvc2UgZXZlbnQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQg
ZGlzY29ubmVjdCgpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAocmF3U29j
a2V0TG9jaykgewotICAgICAgICAgIGlmIChyYXdTb2NrZXQgIT0gbnVsbCkgewotICAgICAgICAg
ICAgcmF3U29ja2V0LmNsb3NlKCk7Ci0gICAgICAgICAgICByYXdTb2NrZXQgPSBudWxsOwotICAg
ICAgICAgICAgb3V0ID0gbnVsbDsKLQotICAgICAgICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcg
UnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAgZXZlbnRMaXN0ZW5lci5vblRDUENsb3Nl
KCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJv
cigiRmFpbGVkIHRvIGNsb3NlIHJhd1NvY2tldDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTZW5kcyBhIG1lc3NhZ2Ugb24gdGhlIHNvY2tl
dC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRoZSBleGVjdXRvciB0aHJlYWQuCi0gICAgICov
Ci0gICAgcHVibGljIHZvaWQgc2VuZChTdHJpbmcgbWVzc2FnZSkgewotICAgICAgTG9nLnYoVEFH
LCAiU2VuZDogIiArIG1lc3NhZ2UpOwotCi0gICAgICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExv
Y2spIHsKLSAgICAgICAgaWYgKG91dCA9PSBudWxsKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3Io
IlNlbmRpbmcgZGF0YSBvbiBjbG9zZWQgc29ja2V0LiIpOwotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotCi0gICAgICAgIG91dC53cml0ZShtZXNzYWdlICsgIlxuIik7Ci0gICAgICAgIG91
dC5mbHVzaCgpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgVENQU29j
a2V0U2VydmVyIGV4dGVuZHMgVENQU29ja2V0IHsKLSAgICAvLyBTZXJ2ZXIgc29ja2V0IGlzIGFs
c28gZ3VhcmRlZCBieSByYXdTb2NrZXRMb2NrLgotICAgIHByaXZhdGUgU2VydmVyU29ja2V0IHNl
cnZlclNvY2tldDsKLQotICAgIGZpbmFsIHByaXZhdGUgSW5ldEFkZHJlc3MgYWRkcmVzczsKLSAg
ICBmaW5hbCBwcml2YXRlIGludCBwb3J0OwotCi0gICAgcHVibGljIFRDUFNvY2tldFNlcnZlcihJ
bmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydCkgewotICAgICAgdGhpcy5hZGRyZXNzID0gYWRk
cmVzczsKLSAgICAgIHRoaXMucG9ydCA9IHBvcnQ7Ci0gICAgfQotCi0gICAgLyoqIE9wZW5zIGEg
bGlzdGVuaW5nIHNvY2tldCBhbmQgd2FpdHMgZm9yIGEgY29ubmVjdGlvbi4gKi8KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgU29ja2V0IGNvbm5lY3QoKSB7Ci0gICAgICBMb2cuZChUQUcsICJM
aXN0ZW5pbmcgb24gWyIgKyBhZGRyZXNzLmdldEhvc3RBZGRyZXNzKCkgKyAiXToiICsgSW50ZWdl
ci50b1N0cmluZyhwb3J0KSk7Ci0KLSAgICAgIGZpbmFsIFNlcnZlclNvY2tldCB0ZW1wU29ja2V0
OwotICAgICAgdHJ5IHsKLSAgICAgICAgdGVtcFNvY2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQocG9y
dCwgMCwgYWRkcmVzcyk7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAg
IHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHNlcnZlciBzb2NrZXQ6ICIgKyBlLmdldE1l
c3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotCi0gICAgICBzeW5jaHJv
bml6ZWQgKHJhd1NvY2tldExvY2spIHsKLSAgICAgICAgaWYgKHNlcnZlclNvY2tldCAhPSBudWxs
KSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiU2VydmVyIHJhd1NvY2tldCB3YXMgYWxyZWFkeSBs
aXN0ZW5pbmcgYW5kIG5ldyB3aWxsIGJlIG9wZW5lZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHNlcnZlclNvY2tldCA9IHRlbXBTb2NrZXQ7Ci0gICAgICB9Ci0KLSAgICAgIHRyeSB7Ci0gICAg
ICAgIHJldHVybiB0ZW1wU29ja2V0LmFjY2VwdCgpOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRp
b24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIHJlY2VpdmUgY29ubmVjdGlv
bjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgLyoqIENsb3NlcyB0aGUgbGlzdGVuaW5nIHNvY2tldCBhbmQgY2FsbHMgc3Vw
ZXIuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHsKLSAg
ICAgIHRyeSB7Ci0gICAgICAgIHN5bmNocm9uaXplZCAocmF3U29ja2V0TG9jaykgewotICAgICAg
ICAgIGlmIChzZXJ2ZXJTb2NrZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgc2VydmVyU29ja2V0
LmNsb3NlKCk7Ci0gICAgICAgICAgICBzZXJ2ZXJTb2NrZXQgPSBudWxsOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICByZXBv
cnRFcnJvcigiRmFpbGVkIHRvIGNsb3NlIHNlcnZlciBzb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2Uo
KSk7Ci0gICAgICB9Ci0KLSAgICAgIHN1cGVyLmRpc2Nvbm5lY3QoKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZlcigpIHsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgY2xhc3MgVENQU29ja2V0Q2xpZW50IGV4dGVu
ZHMgVENQU29ja2V0IHsKLSAgICBmaW5hbCBwcml2YXRlIEluZXRBZGRyZXNzIGFkZHJlc3M7Ci0g
ICAgZmluYWwgcHJpdmF0ZSBpbnQgcG9ydDsKLQotICAgIHB1YmxpYyBUQ1BTb2NrZXRDbGllbnQo
SW5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQpIHsKLSAgICAgIHRoaXMuYWRkcmVzcyA9IGFk
ZHJlc3M7Ci0gICAgICB0aGlzLnBvcnQgPSBwb3J0OwotICAgIH0KLQotICAgIC8qKiBDb25uZWN0
cyB0byB0aGUgcGVlci4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU29ja2V0IGNvbm5l
Y3QoKSB7Ci0gICAgICBMb2cuZChUQUcsICJDb25uZWN0aW5nIHRvIFsiICsgYWRkcmVzcy5nZXRI
b3N0QWRkcmVzcygpICsgIl06IiArIEludGVnZXIudG9TdHJpbmcocG9ydCkpOwotCi0gICAgICB0
cnkgewotICAgICAgICByZXR1cm4gbmV3IFNvY2tldChhZGRyZXNzLCBwb3J0KTsKLSAgICAgIH0g
Y2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBj
b25uZWN0OiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZlcigp
IHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29y
Zy9hcHBzcG90L2FwcHJ0Yy9VbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1VuaGFuZGxlZEV4Y2VwdGlvbkhhbmRs
ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L1VuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDg0ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwot
Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnRE
aWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkRpYWxvZ0ludGVyZmFjZTsKLWltcG9ydCBh
bmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwotaW1wb3J0
IGFuZHJvaWQud2lkZ2V0LlNjcm9sbFZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZp
ZXc7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5n
V3JpdGVyOwotCi0vKioKLSAqIFNpbmdsZXRvbiBoZWxwZXI6IGluc3RhbGwgYSBkZWZhdWx0IHVu
aGFuZGxlZCBleGNlcHRpb24gaGFuZGxlciB3aGljaCBzaG93cwotICogYW4gaW5mb3JtYXRpdmUg
ZGlhbG9nIGFuZCBraWxscyB0aGUgYXBwLiAgVXNlZnVsIGZvciBhcHBzIHdob3NlCi0gKiBlcnJv
ci1oYW5kbGluZyBjb25zaXN0cyBvZiB0aHJvd2luZyBSdW50aW1lRXhjZXB0aW9ucy4KLSAqIE5P
VEU6IGFsbW9zdCBhbHdheXMgbW9yZSB1c2VmdWwgdG8KLSAqIFRocmVhZC5zZXREZWZhdWx0VW5j
YXVnaHRFeGNlcHRpb25IYW5kbGVyKCkgcmF0aGVyIHRoYW4KLSAqIFRocmVhZC5zZXRVbmNhdWdo
dEV4Y2VwdGlvbkhhbmRsZXIoKSwgdG8gYXBwbHkgdG8gYmFja2dyb3VuZCB0aHJlYWRzIGFzIHdl
bGwuCi0gKi8KLXB1YmxpYyBjbGFzcyBVbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyIGltcGxlbWVu
dHMgVGhyZWFkLlVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZyBUQUcgPSAiQXBwUlRDTW9iaWxlQWN0aXZpdHkiOwotICBwcml2YXRlIGZpbmFs
IEFjdGl2aXR5IGFjdGl2aXR5OwotCi0gIHB1YmxpYyBVbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVy
KGZpbmFsIEFjdGl2aXR5IGFjdGl2aXR5KSB7Ci0gICAgdGhpcy5hY3Rpdml0eSA9IGFjdGl2aXR5
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdW5jYXVnaHRFeGNlcHRpb24oVGhyZWFkIHVudXNlZFRo
cmVhZCwgZmluYWwgVGhyb3dhYmxlIGUpIHsKLSAgICBhY3Rpdml0eS5ydW5PblVpVGhyZWFkKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBTdHJpbmcgdGl0bGUgPSAiRmF0YWwgZXJyb3I6ICIgKyBnZXRUb3BMZXZlbENh
dXNlTWVzc2FnZShlKTsKLSAgICAgICAgU3RyaW5nIG1zZyA9IGdldFJlY3Vyc2l2ZVN0YWNrVHJh
Y2UoZSk7Ci0gICAgICAgIFRleHRWaWV3IGVycm9yVmlldyA9IG5ldyBUZXh0VmlldyhhY3Rpdml0
eSk7Ci0gICAgICAgIGVycm9yVmlldy5zZXRUZXh0KG1zZyk7Ci0gICAgICAgIGVycm9yVmlldy5z
ZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9TUCwgOCk7Ci0gICAgICAgIFNjcm9s
bFZpZXcgc2Nyb2xsaW5nQ29udGFpbmVyID0gbmV3IFNjcm9sbFZpZXcoYWN0aXZpdHkpOwotICAg
ICAgICBzY3JvbGxpbmdDb250YWluZXIuYWRkVmlldyhlcnJvclZpZXcpOwotICAgICAgICBMb2cu
ZShUQUcsIHRpdGxlICsgIlxuXG4iICsgbXNnKTsKLSAgICAgICAgRGlhbG9nSW50ZXJmYWNlLk9u
Q2xpY2tMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3Rl
bmVyKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xp
Y2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IHdoaWNoKSB7Ci0gICAgICAgICAgICBkaWFs
b2cuZGlzbWlzcygpOwotICAgICAgICAgICAgU3lzdGVtLmV4aXQoMSk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9OwotICAgICAgICBBbGVydERpYWxvZy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQWxl
cnREaWFsb2cuQnVpbGRlcihhY3Rpdml0eSk7Ci0gICAgICAgIGJ1aWxkZXIuc2V0VGl0bGUodGl0
bGUpCi0gICAgICAgICAgICAuc2V0VmlldyhzY3JvbGxpbmdDb250YWluZXIpCi0gICAgICAgICAg
ICAuc2V0UG9zaXRpdmVCdXR0b24oIkV4aXQiLCBsaXN0ZW5lcikKLSAgICAgICAgICAgIC5zaG93
KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBNZXNzYWdlIGF0
dGFjaGVkIHRvIHRoZSBvcmlnaW5hbCBDYXVzZSBvZiB8dHwuCi0gIHByaXZhdGUgc3RhdGljIFN0
cmluZyBnZXRUb3BMZXZlbENhdXNlTWVzc2FnZShUaHJvd2FibGUgdCkgewotICAgIFRocm93YWJs
ZSB0b3BMZXZlbENhdXNlID0gdDsKLSAgICB3aGlsZSAodG9wTGV2ZWxDYXVzZS5nZXRDYXVzZSgp
ICE9IG51bGwpIHsKLSAgICAgIHRvcExldmVsQ2F1c2UgPSB0b3BMZXZlbENhdXNlLmdldENhdXNl
KCk7Ci0gICAgfQotICAgIHJldHVybiB0b3BMZXZlbENhdXNlLmdldE1lc3NhZ2UoKTsKLSAgfQot
Ci0gIC8vIFJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBTdHJpbmcgb2YgdGhlIHN0YWNrdHJhY2Ug
aW4gfHR8LCByZWN1cnNpdmVseQotICAvLyB0aHJvdWdoIGFsbCBDYXVzZXMgdGhhdCBsZWQgdG8g
fHR8LgotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0UmVjdXJzaXZlU3RhY2tUcmFjZShUaHJv
d2FibGUgdCkgewotICAgIFN0cmluZ1dyaXRlciB3cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7
Ci0gICAgdC5wcmludFN0YWNrVHJhY2UobmV3IFByaW50V3JpdGVyKHdyaXRlcikpOwotICAgIHJl
dHVybiB3cml0ZXIudG9TdHJpbmcoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNw
b3QvYXBwcnRjL1dlYlNvY2tldENoYW5uZWxDbGllbnQuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29ja2V0Q2hh
bm5lbENsaWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjk2ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFw
cHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBw
c3BvdC5hcHBydGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0aW9uLkFzeW5jSHR0cEV2ZW50czsK
LQotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwot
Ci1pbXBvcnQgZGUudGF2ZW5kby5hdXRvYmFobi5XZWJTb2NrZXQuV2ViU29ja2V0Q29ubmVjdGlv
bk9ic2VydmVyOwotaW1wb3J0IGRlLnRhdmVuZG8uYXV0b2JhaG4uV2ViU29ja2V0Q29ubmVjdGlv
bjsKLWltcG9ydCBkZS50YXZlbmRvLmF1dG9iYWhuLldlYlNvY2tldEV4Y2VwdGlvbjsKLQotaW1w
b3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsK
LQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRp
b247Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci0KLS8qKgotICogV2ViU29ja2V0IGNs
aWVudCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiA8cD5BbGwgcHVibGljIG1ldGhvZHMgc2hvdWxk
IGJlIGNhbGxlZCBmcm9tIGEgbG9vcGVyIGV4ZWN1dG9yIHRocmVhZAotICogcGFzc2VkIGluIGEg
Y29uc3RydWN0b3IsIG90aGVyd2lzZSBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0gKiBBbGwg
ZXZlbnRzIGFyZSBkaXNwYXRjaGVkIG9uIHRoZSBzYW1lIHRocmVhZC4KLSAqLwotCi1wdWJsaWMg
Y2xhc3MgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBUQUcgPSAiV1NDaGFubmVsUlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IENMT1NFX1RJTUVPVVQgPSAxMDAwOwotICBwcml2YXRlIGZpbmFsIFdlYlNvY2tldENoYW5u
ZWxFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgaGFuZGxlcjsKLSAgcHJp
dmF0ZSBXZWJTb2NrZXRDb25uZWN0aW9uIHdzOwotICBwcml2YXRlIFdlYlNvY2tldE9ic2VydmVy
IHdzT2JzZXJ2ZXI7Ci0gIHByaXZhdGUgU3RyaW5nIHdzU2VydmVyVXJsOwotICBwcml2YXRlIFN0
cmluZyBwb3N0U2VydmVyVXJsOwotICBwcml2YXRlIFN0cmluZyByb29tSUQ7Ci0gIHByaXZhdGUg
U3RyaW5nIGNsaWVudElEOwotICBwcml2YXRlIFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZSBzdGF0
ZTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgY2xvc2VFdmVudExvY2sgPSBuZXcgT2JqZWN0KCk7
Ci0gIHByaXZhdGUgYm9vbGVhbiBjbG9zZUV2ZW50OwotICAvLyBXZWJTb2NrZXQgc2VuZCBxdWV1
ZS4gTWVzc2FnZXMgYXJlIGFkZGVkIHRvIHRoZSBxdWV1ZSB3aGVuIFdlYlNvY2tldAotICAvLyBj
bGllbnQgaXMgbm90IHJlZ2lzdGVyZWQgYW5kIGFyZSBjb25zdW1lZCBpbiByZWdpc3RlcigpIGNh
bGwuCi0gIHByaXZhdGUgZmluYWwgTGlua2VkTGlzdDxTdHJpbmc+IHdzU2VuZFF1ZXVlOwotCi0g
IC8qKgotICAgKiBQb3NzaWJsZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBzdGF0ZXMuCi0gICAqLwot
ICBwdWJsaWMgZW51bSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUgeyBORVcsIENPTk5FQ1RFRCwg
UkVHSVNURVJFRCwgQ0xPU0VELCBFUlJPUiB9Ci0KLSAgLyoqCi0gICAqIENhbGxiYWNrIGludGVy
ZmFjZSBmb3IgbWVzc2FnZXMgZGVsaXZlcmVkIG9uIFdlYlNvY2tldC4KLSAgICogQWxsIGV2ZW50
cyBhcmUgZGlzcGF0Y2hlZCBmcm9tIGEgbG9vcGVyIGV4ZWN1dG9yIHRocmVhZC4KLSAgICovCi0g
IHB1YmxpYyBpbnRlcmZhY2UgV2ViU29ja2V0Q2hhbm5lbEV2ZW50cyB7Ci0gICAgdm9pZCBvbldl
YlNvY2tldE1lc3NhZ2UoZmluYWwgU3RyaW5nIG1lc3NhZ2UpOwotICAgIHZvaWQgb25XZWJTb2Nr
ZXRDbG9zZSgpOwotICAgIHZvaWQgb25XZWJTb2NrZXRFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3Jp
cHRpb24pOwotICB9Ci0KLSAgcHVibGljIFdlYlNvY2tldENoYW5uZWxDbGllbnQoSGFuZGxlciBo
YW5kbGVyLCBXZWJTb2NrZXRDaGFubmVsRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMuaGFuZGxl
ciA9IGhhbmRsZXI7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0gICAgcm9vbUlEID0gbnVs
bDsKLSAgICBjbGllbnRJRCA9IG51bGw7Ci0gICAgd3NTZW5kUXVldWUgPSBuZXcgTGlua2VkTGlz
dDxTdHJpbmc+KCk7Ci0gICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuTkVXOwot
ICB9Ci0KLSAgcHVibGljIFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZSBnZXRTdGF0ZSgpIHsKLSAg
ICByZXR1cm4gc3RhdGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjb25uZWN0KGZpbmFsIFN0cmlu
ZyB3c1VybCwgZmluYWwgU3RyaW5nIHBvc3RVcmwpIHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxp
ZFRocmVhZCgpOwotICAgIGlmIChzdGF0ZSAhPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuTkVX
KSB7Ci0gICAgICBMb2cuZShUQUcsICJXZWJTb2NrZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHdzU2VydmVyVXJsID0gd3NVcmw7Ci0gICAgcG9z
dFNlcnZlclVybCA9IHBvc3RVcmw7Ci0gICAgY2xvc2VFdmVudCA9IGZhbHNlOwotCi0gICAgTG9n
LmQoVEFHLCAiQ29ubmVjdGluZyBXZWJTb2NrZXQgdG86ICIgKyB3c1VybCArICIuIFBvc3QgVVJM
OiAiICsgcG9zdFVybCk7Ci0gICAgd3MgPSBuZXcgV2ViU29ja2V0Q29ubmVjdGlvbigpOwotICAg
IHdzT2JzZXJ2ZXIgPSBuZXcgV2ViU29ja2V0T2JzZXJ2ZXIoKTsKLSAgICB0cnkgewotICAgICAg
d3MuY29ubmVjdChuZXcgVVJJKHdzU2VydmVyVXJsKSwgd3NPYnNlcnZlcik7Ci0gICAgfSBjYXRj
aCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJVUkkgZXJyb3I6
ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfSBjYXRjaCAoV2ViU29ja2V0RXhjZXB0aW9uIGUp
IHsKLSAgICAgIHJlcG9ydEVycm9yKCJXZWJTb2NrZXQgY29ubmVjdGlvbiBlcnJvcjogIiArIGUu
Z2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCByZWdpc3RlcihmaW5h
bCBTdHJpbmcgcm9vbUlELCBmaW5hbCBTdHJpbmcgY2xpZW50SUQpIHsKLSAgICBjaGVja0lmQ2Fs
bGVkT25WYWxpZFRocmVhZCgpOwotICAgIHRoaXMucm9vbUlEID0gcm9vbUlEOwotICAgIHRoaXMu
Y2xpZW50SUQgPSBjbGllbnRJRDsKLSAgICBpZiAoc3RhdGUgIT0gV2ViU29ja2V0Q29ubmVjdGlv
blN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgTG9nLncoVEFHLCAiV2ViU29ja2V0IHJlZ2lzdGVy
KCkgaW4gc3RhdGUgIiArIHN0YXRlKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nLmQo
VEFHLCAiUmVnaXN0ZXJpbmcgV2ViU29ja2V0IGZvciByb29tICIgKyByb29tSUQgKyAiLiBDbGll
bnRJRDogIiArIGNsaWVudElEKTsKLSAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVj
dCgpOwotICAgIHRyeSB7Ci0gICAgICBqc29uLnB1dCgiY21kIiwgInJlZ2lzdGVyIik7Ci0gICAg
ICBqc29uLnB1dCgicm9vbWlkIiwgcm9vbUlEKTsKLSAgICAgIGpzb24ucHV0KCJjbGllbnRpZCIs
IGNsaWVudElEKTsKLSAgICAgIExvZy5kKFRBRywgIkMtPldTUzogIiArIGpzb24udG9TdHJpbmco
KSk7Ci0gICAgICB3cy5zZW5kVGV4dE1lc3NhZ2UoanNvbi50b1N0cmluZygpKTsKLSAgICAgIHN0
YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLlJFR0lTVEVSRUQ7Ci0gICAgICAvLyBTZW5k
IGFueSBwcmV2aW91c2x5IGFjY3VtdWxhdGVkIG1lc3NhZ2VzLgotICAgICAgZm9yIChTdHJpbmcg
c2VuZE1lc3NhZ2UgOiB3c1NlbmRRdWV1ZSkgewotICAgICAgICBzZW5kKHNlbmRNZXNzYWdlKTsK
LSAgICAgIH0KLSAgICAgIHdzU2VuZFF1ZXVlLmNsZWFyKCk7Ci0gICAgfSBjYXRjaCAoSlNPTkV4
Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0IHJlZ2lzdGVyIEpTT04g
ZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQg
c2VuZChTdHJpbmcgbWVzc2FnZSkgewotICAgIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7
Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgY2FzZSBORVc6Ci0gICAgICBjYXNlIENPTk5F
Q1RFRDoKLSAgICAgICAgLy8gU3RvcmUgb3V0Z29pbmcgbWVzc2FnZXMgYW5kIHNlbmQgdGhlbSBh
ZnRlciB3ZWJzb2NrZXQgY2xpZW50Ci0gICAgICAgIC8vIGlzIHJlZ2lzdGVyZWQuCi0gICAgICAg
IExvZy5kKFRBRywgIldTIEFDQzogIiArIG1lc3NhZ2UpOwotICAgICAgICB3c1NlbmRRdWV1ZS5h
ZGQobWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgRVJST1I6Ci0gICAgICBj
YXNlIENMT1NFRDoKLSAgICAgICAgTG9nLmUoVEFHLCAiV2ViU29ja2V0IHNlbmQoKSBpbiBlcnJv
ciBvciBjbG9zZWQgc3RhdGUgOiAiICsgbWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
IGNhc2UgUkVHSVNURVJFRDoKLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmpl
Y3QoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBqc29uLnB1dCgiY21kIiwgInNlbmQiKTsK
LSAgICAgICAgICBqc29uLnB1dCgibXNnIiwgbWVzc2FnZSk7Ci0gICAgICAgICAgbWVzc2FnZSA9
IGpzb24udG9TdHJpbmcoKTsKLSAgICAgICAgICBMb2cuZChUQUcsICJDLT5XU1M6ICIgKyBtZXNz
YWdlKTsKLSAgICAgICAgICB3cy5zZW5kVGV4dE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIH0g
Y2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJXZWJTb2Nr
ZXQgc2VuZCBKU09OIGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8vIFRoaXMgY2FsbCBjYW4gYmUgdXNlZCB0byBz
ZW5kIFdlYlNvY2tldCBtZXNzYWdlcyBiZWZvcmUgV2ViU29ja2V0Ci0gIC8vIGNvbm5lY3Rpb24g
aXMgb3BlbmVkLgotICBwdWJsaWMgdm9pZCBwb3N0KFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgY2hl
Y2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKTsKLSAgICBzZW5kV1NTTWVzc2FnZSgiUE9TVCIsIG1l
c3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgZGlzY29ubmVjdChib29sZWFuIHdhaXRGb3JD
b21wbGV0ZSkgewotICAgIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nLmQo
VEFHLCAiRGlzY29ubmVjdCBXZWJTb2NrZXQuIFN0YXRlOiAiICsgc3RhdGUpOwotICAgIGlmIChz
dGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuUkVHSVNURVJFRCkgewotICAgICAgLy8g
U2VuZCAiYnllIiB0byBXZWJTb2NrZXQgc2VydmVyLgotICAgICAgc2VuZCgie1widHlwZVwiOiBc
ImJ5ZVwifSIpOwotICAgICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVD
VEVEOwotICAgICAgLy8gU2VuZCBodHRwIERFTEVURSB0byBodHRwIFdlYlNvY2tldCBzZXJ2ZXIu
Ci0gICAgICBzZW5kV1NTTWVzc2FnZSgiREVMRVRFIiwgIiIpOwotICAgIH0KLSAgICAvLyBDbG9z
ZSBXZWJTb2NrZXQgaW4gQ09OTkVDVEVEIG9yIEVSUk9SIHN0YXRlcyBvbmx5LgotICAgIGlmIChz
dGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEIHx8IHN0YXRlID09IFdl
YlNvY2tldENvbm5lY3Rpb25TdGF0ZS5FUlJPUikgewotICAgICAgd3MuZGlzY29ubmVjdCgpOwot
ICAgICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ0xPU0VEOwotCi0gICAgICAv
LyBXYWl0IGZvciB3ZWJzb2NrZXQgY2xvc2UgZXZlbnQgdG8gcHJldmVudCB3ZWJzb2NrZXQgbGli
cmFyeSBmcm9tCi0gICAgICAvLyBzZW5kaW5nIGFueSBwZW5kaW5nIG1lc3NhZ2VzIHRvIGRlbGV0
ZWQgbG9vcGVyIHRocmVhZC4KLSAgICAgIGlmICh3YWl0Rm9yQ29tcGxldGUpIHsKLSAgICAgICAg
c3luY2hyb25pemVkIChjbG9zZUV2ZW50TG9jaykgewotICAgICAgICAgIHdoaWxlICghY2xvc2VF
dmVudCkgewotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgY2xvc2VFdmVudExvY2su
d2FpdChDTE9TRV9USU1FT1VUKTsKLSAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgIExvZy5lKFRB
RywgIldhaXQgZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBMb2cuZChUQUcsICJEaXNjb25u
ZWN0aW5nIFdlYlNvY2tldCBkb25lLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVy
cm9yKGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2cuZShUQUcsIGVycm9yTWVz
c2FnZSk7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoc3RhdGUgIT0gV2ViU29j
a2V0Q29ubmVjdGlvblN0YXRlLkVSUk9SKSB7Ci0gICAgICAgICAgc3RhdGUgPSBXZWJTb2NrZXRD
b25uZWN0aW9uU3RhdGUuRVJST1I7Ci0gICAgICAgICAgZXZlbnRzLm9uV2ViU29ja2V0RXJyb3Io
ZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8g
QXN5bmNocm9ub3VzbHkgc2VuZCBQT1NUL0RFTEVURSB0byBXZWJTb2NrZXQgc2VydmVyLgotICBw
cml2YXRlIHZvaWQgc2VuZFdTU01lc3NhZ2UoZmluYWwgU3RyaW5nIG1ldGhvZCwgZmluYWwgU3Ry
aW5nIG1lc3NhZ2UpIHsKLSAgICBTdHJpbmcgcG9zdFVybCA9IHBvc3RTZXJ2ZXJVcmwgKyAiLyIg
KyByb29tSUQgKyAiLyIgKyBjbGllbnRJRDsKLSAgICBMb2cuZChUQUcsICJXUyAiICsgbWV0aG9k
ICsgIiA6ICIgKyBwb3N0VXJsICsgIiA6ICIgKyBtZXNzYWdlKTsKLSAgICBBc3luY0h0dHBVUkxD
b25uZWN0aW9uIGh0dHBDb25uZWN0aW9uID0KLSAgICAgICAgbmV3IEFzeW5jSHR0cFVSTENvbm5l
Y3Rpb24obWV0aG9kLCBwb3N0VXJsLCBtZXNzYWdlLCBuZXcgQXN5bmNIdHRwRXZlbnRzKCkgewot
ICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cEVycm9yKFN0
cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJXUyAiICsgbWV0
aG9kICsgIiBlcnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAg
ICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRwQ29tcGxldGUoU3RyaW5n
IHJlc3BvbnNlKSB7fQotICAgICAgICB9KTsKLSAgICBodHRwQ29ubmVjdGlvbi5zZW5kKCk7Ci0g
IH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIEVuc3VyZXMg
dGhhdCBXZWJTb2NrZXQgbWV0aG9kIGlzCi0gIC8vIGNhbGxlZCBvbiBhIGxvb3BlciB0aHJlYWQu
Ci0gIHByaXZhdGUgdm9pZCBjaGVja0lmQ2FsbGVkT25WYWxpZFRocmVhZCgpIHsKLSAgICBpZiAo
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBoYW5kbGVyLmdldExvb3BlcigpLmdldFRocmVhZCgp
KSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJXZWJTb2NrZXQgbWV0
aG9kIGlzIG5vdCBjYWxsZWQgb24gdmFsaWQgdGhyZWFkIik7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSBjbGFzcyBXZWJTb2NrZXRPYnNlcnZlciBpbXBsZW1lbnRzIFdlYlNvY2tldENvbm5lY3Rp
b25PYnNlcnZlciB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25PcGVuKCkgewot
ICAgICAgTG9nLmQoVEFHLCAiV2ViU29ja2V0IGNvbm5lY3Rpb24gb3BlbmVkIHRvOiAiICsgd3NT
ZXJ2ZXJVcmwpOwotICAgICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBzdGF0ZSA9
IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0gICAgICAgICAgLy8gQ2hlY2sg
aWYgd2UgaGF2ZSBwZW5kaW5nIHJlZ2lzdGVyIHJlcXVlc3QuCi0gICAgICAgICAgaWYgKHJvb21J
RCAhPSBudWxsICYmIGNsaWVudElEICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJlZ2lzdGVyKHJv
b21JRCwgY2xpZW50SUQpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DbG9zZShXZWJTb2NrZXRDbG9z
ZU5vdGlmaWNhdGlvbiBjb2RlLCBTdHJpbmcgcmVhc29uKSB7Ci0gICAgICBMb2cuZChUQUcsICJX
ZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWQuIENvZGU6ICIgKyBjb2RlICsgIi4gUmVhc29uOiAi
ICsgcmVhc29uICsgIi4gU3RhdGU6ICIKLSAgICAgICAgICAgICAgKyBzdGF0ZSk7Ci0gICAgICBz
eW5jaHJvbml6ZWQgKGNsb3NlRXZlbnRMb2NrKSB7Ci0gICAgICAgIGNsb3NlRXZlbnQgPSB0cnVl
OwotICAgICAgICBjbG9zZUV2ZW50TG9jay5ub3RpZnkoKTsKLSAgICAgIH0KLSAgICAgIGhhbmRs
ZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYgKHN0YXRlICE9IFdlYlNvY2tldENvbm5lY3Rp
b25TdGF0ZS5DTE9TRUQpIHsKLSAgICAgICAgICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlv
blN0YXRlLkNMT1NFRDsKLSAgICAgICAgICAgIGV2ZW50cy5vbldlYlNvY2tldENsb3NlKCk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvblRleHRNZXNzYWdlKFN0cmluZyBwYXlsb2FkKSB7Ci0gICAgICBM
b2cuZChUQUcsICJXU1MtPkM6ICIgKyBwYXlsb2FkKTsKLSAgICAgIGZpbmFsIFN0cmluZyBtZXNz
YWdlID0gcGF5bG9hZDsKLSAgICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYg
KHN0YXRlID09IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQKLSAgICAgICAgICAg
ICAgfHwgc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLlJFR0lTVEVSRUQpIHsKLSAg
ICAgICAgICAgIGV2ZW50cy5vbldlYlNvY2tldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvblJhd1RleHRNZXNzYWdlKGJ5dGVbXSBwYXlsb2FkKSB7fQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgb25CaW5hcnlNZXNzYWdlKGJ5dGVbXSBwYXlsb2FkKSB7fQot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29ja2V0UlRDQ2xp
ZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNv
Y2tldFJUQ0NsaWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvV2ViU29ja2V0UlRDQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0
MTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBy
dGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUm9vbVBhcmFtZXRlcnNGZXRjaGVyLlJv
b21QYXJhbWV0ZXJzRmV0Y2hlckV2ZW50czsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuV2Vi
U29ja2V0Q2hhbm5lbENsaWVudC5XZWJTb2NrZXRDaGFubmVsRXZlbnRzOwotaW1wb3J0IG9yZy5h
cHBzcG90LmFwcHJ0Yy5XZWJTb2NrZXRDaGFubmVsQ2xpZW50LldlYlNvY2tldENvbm5lY3Rpb25T
dGF0ZTsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0
aW9uOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rp
b24uQXN5bmNIdHRwRXZlbnRzOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0
IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1p
bXBvcnQgb3JnLmpzb24uSlNPTkFycmF5OwotaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247
Ci1pbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRp
ZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLQotLyoqCi0gKiBO
ZWdvdGlhdGVzIHNpZ25hbGluZyBmb3IgY2hhdHRpbmcgd2l0aCBodHRwczovL2FwcHIudGMgInJv
b21zIi4KLSAqIFVzZXMgdGhlIGNsaWVudDwtPnNlcnZlciBzcGVjaWZpY3Mgb2YgdGhlIGFwcHJ0
YyBBcHBFbmdpbmUgd2ViYXBwLgotICoKLSAqIDxwPlRvIHVzZTogY3JlYXRlIGFuIGluc3RhbmNl
IG9mIHRoaXMgb2JqZWN0IChyZWdpc3RlcmluZyBhIG1lc3NhZ2UgaGFuZGxlcikgYW5kCi0gKiBj
YWxsIGNvbm5lY3RUb1Jvb20oKS4gIE9uY2Ugcm9vbSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVk
Ci0gKiBvbkNvbm5lY3RlZFRvUm9vbSgpIGNhbGxiYWNrIHdpdGggcm9vbSBwYXJhbWV0ZXJzIGlz
IGludm9rZWQuCi0gKiBNZXNzYWdlcyB0byBvdGhlciBwYXJ0eSAod2l0aCBsb2NhbCBJY2UgY2Fu
ZGlkYXRlcyBhbmQgYW5zd2VyIFNEUCkgY2FuCi0gKiBiZSBzZW50IGFmdGVyIFdlYlNvY2tldCBj
b25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLgotICovCi1wdWJsaWMgY2xhc3MgV2ViU29ja2V0UlRD
Q2xpZW50IGltcGxlbWVudHMgQXBwUlRDQ2xpZW50LCBXZWJTb2NrZXRDaGFubmVsRXZlbnRzIHsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXU1JUQ0NsaWVudCI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09NX0pPSU4gPSAiam9pbiI7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBST09NX01FU1NBR0UgPSAibWVzc2FnZSI7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBST09NX0xFQVZFID0gImxlYXZlIjsKLQotICBwcml2YXRlIGVu
dW0gQ29ubmVjdGlvblN0YXRlIHsgTkVXLCBDT05ORUNURUQsIENMT1NFRCwgRVJST1IgfQotCi0g
IHByaXZhdGUgZW51bSBNZXNzYWdlVHlwZSB7IE1FU1NBR0UsIExFQVZFIH0KLQotICBwcml2YXRl
IGZpbmFsIEhhbmRsZXIgaGFuZGxlcjsKLSAgcHJpdmF0ZSBib29sZWFuIGluaXRpYXRvcjsKLSAg
cHJpdmF0ZSBTaWduYWxpbmdFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIFdlYlNvY2tldENoYW5u
ZWxDbGllbnQgd3NDbGllbnQ7Ci0gIHByaXZhdGUgQ29ubmVjdGlvblN0YXRlIHJvb21TdGF0ZTsK
LSAgcHJpdmF0ZSBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnM7
Ci0gIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2VVcmw7Ci0gIHByaXZhdGUgU3RyaW5nIGxlYXZlVXJs
OwotCi0gIHB1YmxpYyBXZWJTb2NrZXRSVENDbGllbnQoU2lnbmFsaW5nRXZlbnRzIGV2ZW50cykg
ewotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25T
dGF0ZS5ORVc7Ci0gICAgZmluYWwgSGFuZGxlclRocmVhZCBoYW5kbGVyVGhyZWFkID0gbmV3IEhh
bmRsZXJUaHJlYWQoVEFHKTsKLSAgICBoYW5kbGVyVGhyZWFkLnN0YXJ0KCk7Ci0gICAgaGFuZGxl
ciA9IG5ldyBIYW5kbGVyKGhhbmRsZXJUaHJlYWQuZ2V0TG9vcGVyKCkpOwotICB9Ci0KLSAgLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgLy8gQXBwUlRDQ2xpZW50IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4K
LSAgLy8gQXN5bmNocm9ub3VzbHkgY29ubmVjdCB0byBhbiBBcHBSVEMgcm9vbSBVUkwgdXNpbmcg
c3VwcGxpZWQgY29ubmVjdGlvbgotICAvLyBwYXJhbWV0ZXJzLCByZXRyaWV2ZXMgcm9vbSBwYXJh
bWV0ZXJzIGFuZCBjb25uZWN0IHRvIFdlYlNvY2tldCBzZXJ2ZXIuCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBjb25uZWN0VG9Sb29tKFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0
aW9uUGFyYW1ldGVycykgewotICAgIHRoaXMuY29ubmVjdGlvblBhcmFtZXRlcnMgPSBjb25uZWN0
aW9uUGFyYW1ldGVyczsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNvbm5lY3RUb1Jv
b21JbnRlcm5hbCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIGRpc2Nvbm5lY3RGcm9tUm9vbSgpIHsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIGRpc2Nvbm5lY3RGcm9tUm9vbUludGVybmFsKCk7Ci0gICAgICAgIGhhbmRsZXIuZ2V0
TG9vcGVyKCkucXVpdCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gQ29ubmVjdHMg
dG8gcm9vbSAtIGZ1bmN0aW9uIHJ1bnMgb24gYSBsb2NhbCBsb29wZXIgdGhyZWFkLgotICBwcml2
YXRlIHZvaWQgY29ubmVjdFRvUm9vbUludGVybmFsKCkgewotICAgIFN0cmluZyBjb25uZWN0aW9u
VXJsID0gZ2V0Q29ubmVjdGlvblVybChjb25uZWN0aW9uUGFyYW1ldGVycyk7Ci0gICAgTG9nLmQo
VEFHLCAiQ29ubmVjdCB0byByb29tOiAiICsgY29ubmVjdGlvblVybCk7Ci0gICAgcm9vbVN0YXRl
ID0gQ29ubmVjdGlvblN0YXRlLk5FVzsKLSAgICB3c0NsaWVudCA9IG5ldyBXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50KGhhbmRsZXIsIHRoaXMpOwotCi0gICAgUm9vbVBhcmFtZXRlcnNGZXRjaGVyRXZl
bnRzIGNhbGxiYWNrcyA9IG5ldyBSb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHMoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uU2lnbmFsaW5nUGFyYW1ldGVyc1JlYWR5
KGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zKSB7Ci0gICAgICAgIFdlYlNvY2tldFJU
Q0NsaWVudC50aGlzLmhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92
ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgV2ViU29j
a2V0UlRDQ2xpZW50LnRoaXMuc2lnbmFsaW5nUGFyYW1ldGVyc1JlYWR5KHBhcmFtcyk7Ci0gICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0KLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBvblNpZ25hbGluZ1BhcmFtZXRlcnNFcnJvcihTdHJpbmcgZGVzY3JpcHRpb24p
IHsKLSAgICAgICAgV2ViU29ja2V0UlRDQ2xpZW50LnRoaXMucmVwb3J0RXJyb3IoZGVzY3JpcHRp
b24pOwotICAgICAgfQotICAgIH07Ci0KLSAgICBuZXcgUm9vbVBhcmFtZXRlcnNGZXRjaGVyKGNv
bm5lY3Rpb25VcmwsIG51bGwsIGNhbGxiYWNrcykubWFrZVJlcXVlc3QoKTsKLSAgfQotCi0gIC8v
IERpc2Nvbm5lY3QgZnJvbSByb29tIGFuZCBzZW5kIGJ5ZSBtZXNzYWdlcyAtIHJ1bnMgb24gYSBs
b2NhbCBsb29wZXIgdGhyZWFkLgotICBwcml2YXRlIHZvaWQgZGlzY29ubmVjdEZyb21Sb29tSW50
ZXJuYWwoKSB7Ci0gICAgTG9nLmQoVEFHLCAiRGlzY29ubmVjdC4gUm9vbSBzdGF0ZTogIiArIHJv
b21TdGF0ZSk7Ci0gICAgaWYgKHJvb21TdGF0ZSA9PSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVE
KSB7Ci0gICAgICBMb2cuZChUQUcsICJDbG9zaW5nIHJvb20uIik7Ci0gICAgICBzZW5kUG9zdE1l
c3NhZ2UoTWVzc2FnZVR5cGUuTEVBVkUsIGxlYXZlVXJsLCBudWxsKTsKLSAgICB9Ci0gICAgcm9v
bVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkNMT1NFRDsKLSAgICBpZiAod3NDbGllbnQgIT0gbnVs
bCkgewotICAgICAgd3NDbGllbnQuZGlzY29ubmVjdCh0cnVlKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBIZWxwZXIgZnVuY3Rpb25zIHRvIGdldCBjb25uZWN0aW9uLCBwb3N0IG1lc3NhZ2UgYW5kIGxl
YXZlIG1lc3NhZ2UgVVJMcwotICBwcml2YXRlIFN0cmluZyBnZXRDb25uZWN0aW9uVXJsKFJvb21D
b25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVycykgewotICAgIHJldHVybiBj
b25uZWN0aW9uUGFyYW1ldGVycy5yb29tVXJsICsgIi8iICsgUk9PTV9KT0lOICsgIi8iICsgY29u
bmVjdGlvblBhcmFtZXRlcnMucm9vbUlkOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVz
c2FnZVVybCgKLSAgICAgIFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1l
dGVycywgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzKSB7Ci0gICAgcmV0
dXJuIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21VcmwgKyAiLyIgKyBST09NX01FU1NBR0UgKyAi
LyIgKyBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tSWQKLSAgICAgICAgKyAiLyIgKyBzaWduYWxp
bmdQYXJhbWV0ZXJzLmNsaWVudElkOwotICB9Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TGVhdmVV
cmwoCi0gICAgICBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnMs
IFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVycykgewotICAgIHJldHVybiBj
b25uZWN0aW9uUGFyYW1ldGVycy5yb29tVXJsICsgIi8iICsgUk9PTV9MRUFWRSArICIvIiArIGNv
bm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21JZCArICIvIgotICAgICAgICArIHNpZ25hbGluZ1BhcmFt
ZXRlcnMuY2xpZW50SWQ7Ci0gIH0KLQotICAvLyBDYWxsYmFjayBpc3N1ZWQgd2hlbiByb29tIHBh
cmFtZXRlcnMgYXJlIGV4dHJhY3RlZC4gUnVucyBvbiBsb2NhbAotICAvLyBsb29wZXIgdGhyZWFk
LgotICBwcml2YXRlIHZvaWQgc2lnbmFsaW5nUGFyYW1ldGVyc1JlYWR5KGZpbmFsIFNpZ25hbGlu
Z1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVycykgewotICAgIExvZy5kKFRBRywgIlJvb20g
Y29ubmVjdGlvbiBjb21wbGV0ZWQuIik7Ci0gICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxv
b3BiYWNrCi0gICAgICAgICYmICghc2lnbmFsaW5nUGFyYW1ldGVycy5pbml0aWF0b3IgfHwgc2ln
bmFsaW5nUGFyYW1ldGVycy5vZmZlclNkcCAhPSBudWxsKSkgewotICAgICAgcmVwb3J0RXJyb3Io
Ikxvb3BiYWNrIHJvb20gaXMgYnVzeS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCFjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjayAmJiAhc2lnbmFsaW5nUGFyYW1ldGVycy5p
bml0aWF0b3IKLSAgICAgICAgJiYgc2lnbmFsaW5nUGFyYW1ldGVycy5vZmZlclNkcCA9PSBudWxs
KSB7Ci0gICAgICBMb2cudyhUQUcsICJObyBvZmZlciBTRFAgaW4gcm9vbSByZXNwb25zZS4iKTsK
LSAgICB9Ci0gICAgaW5pdGlhdG9yID0gc2lnbmFsaW5nUGFyYW1ldGVycy5pbml0aWF0b3I7Ci0g
ICAgbWVzc2FnZVVybCA9IGdldE1lc3NhZ2VVcmwoY29ubmVjdGlvblBhcmFtZXRlcnMsIHNpZ25h
bGluZ1BhcmFtZXRlcnMpOwotICAgIGxlYXZlVXJsID0gZ2V0TGVhdmVVcmwoY29ubmVjdGlvblBh
cmFtZXRlcnMsIHNpZ25hbGluZ1BhcmFtZXRlcnMpOwotICAgIExvZy5kKFRBRywgIk1lc3NhZ2Ug
VVJMOiAiICsgbWVzc2FnZVVybCk7Ci0gICAgTG9nLmQoVEFHLCAiTGVhdmUgVVJMOiAiICsgbGVh
dmVVcmwpOwotICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0KLSAg
ICAvLyBGaXJlIGNvbm5lY3Rpb24gYW5kIHNpZ25hbGluZyBwYXJhbWV0ZXJzIGV2ZW50cy4KLSAg
ICBldmVudHMub25Db25uZWN0ZWRUb1Jvb20oc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0KLSAgICAv
LyBDb25uZWN0IGFuZCByZWdpc3RlciBXZWJTb2NrZXQgY2xpZW50LgotICAgIHdzQ2xpZW50LmNv
bm5lY3Qoc2lnbmFsaW5nUGFyYW1ldGVycy53c3NVcmwsIHNpZ25hbGluZ1BhcmFtZXRlcnMud3Nz
UG9zdFVybCk7Ci0gICAgd3NDbGllbnQucmVnaXN0ZXIoY29ubmVjdGlvblBhcmFtZXRlcnMucm9v
bUlkLCBzaWduYWxpbmdQYXJhbWV0ZXJzLmNsaWVudElkKTsKLSAgfQotCi0gIC8vIFNlbmQgbG9j
YWwgb2ZmZXIgU0RQIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIHNlbmRPZmZlclNkcChmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0g
ICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocm9vbVN0YXRlICE9IENvbm5lY3Rpb25T
dGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiU2VuZGluZyBvZmZlciBT
RFAgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAg
anNvblB1dChqc29uLCAic2RwIiwgc2RwLmRlc2NyaXB0aW9uKTsKLSAgICAgICAganNvblB1dChq
c29uLCAidHlwZSIsICJvZmZlciIpOwotICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoTWVzc2FnZVR5
cGUuTUVTU0FHRSwgbWVzc2FnZVVybCwganNvbi50b1N0cmluZygpKTsKLSAgICAgICAgaWYgKGNv
bm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICAgICAgLy8gSW4gbG9vcGJhY2sg
bW9kZSByZW5hbWUgdGhpcyBvZmZlciB0byBhbnN3ZXIgYW5kIHJvdXRlIGl0IGJhY2suCi0gICAg
ICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcEFuc3dlciA9IG5ldyBTZXNzaW9uRGVzY3JpcHRp
b24oCi0gICAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxG
b3JtKCJhbnN3ZXIiKSwgc2RwLmRlc2NyaXB0aW9uKTsKLSAgICAgICAgICBldmVudHMub25SZW1v
dGVEZXNjcmlwdGlvbihzZHBBbnN3ZXIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0g
IH0KLQotICAvLyBTZW5kIGxvY2FsIGFuc3dlciBTRFAgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50
LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZEFuc3dlclNkcChmaW5hbCBTZXNzaW9u
RGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoY29u
bmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJTZW5k
aW5nIGFuc3dlciBpbiBsb29wYmFjayBtb2RlLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAg
ICBqc29uUHV0KGpzb24sICJzZHAiLCBzZHAuZGVzY3JpcHRpb24pOwotICAgICAgICBqc29uUHV0
KGpzb24sICJ0eXBlIiwgImFuc3dlciIpOwotICAgICAgICB3c0NsaWVudC5zZW5kKGpzb24udG9T
dHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBTZW5kIEljZSBjYW5kaWRh
dGUgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
c2VuZExvY2FsSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAg
ICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2Jq
ZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAiY2FuZGlkYXRlIik7Ci0gICAg
ICAgIGpzb25QdXQoanNvbiwgImxhYmVsIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgpOwotICAg
ICAgICBqc29uUHV0KGpzb24sICJpZCIsIGNhbmRpZGF0ZS5zZHBNaWQpOwotICAgICAgICBqc29u
UHV0KGpzb24sICJjYW5kaWRhdGUiLCBjYW5kaWRhdGUuc2RwKTsKLSAgICAgICAgaWYgKGluaXRp
YXRvcikgewotICAgICAgICAgIC8vIENhbGwgaW5pdGlhdG9yIHNlbmRzIGljZSBjYW5kaWRhdGVz
IHRvIEdBRSBzZXJ2ZXIuCi0gICAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3Rh
dGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiU2VuZGluZyBJQ0UgY2Fu
ZGlkYXRlIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgfQotICAgICAgICAgIHNlbmRQb3N0TWVzc2FnZShNZXNzYWdlVHlwZS5NRVNTQUdF
LCBtZXNzYWdlVXJsLCBqc29uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGlmIChjb25uZWN0aW9u
UGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2Fu
ZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgIC8vIENhbGwgcmVjZWl2ZXIgc2VuZHMgaWNlIGNhbmRpZGF0ZXMgdG8gd2Vic29ja2V0IHNl
cnZlci4KLSAgICAgICAgICB3c0NsaWVudC5zZW5kKGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIFNlbmQgcmVtb3ZlZCBJY2UgY2FuZGlk
YXRlcyB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBzZW5kTG9jYWxJY2VDYW5kaWRhdGVSZW1vdmFscyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5k
aWRhdGVzKSB7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBKU09OT2JqZWN0IGpzb24g
PSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgInJlbW92
ZS1jYW5kaWRhdGVzIik7Ci0gICAgICAgIEpTT05BcnJheSBqc29uQXJyYXkgPSBuZXcgSlNPTkFy
cmF5KCk7Ci0gICAgICAgIGZvciAoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA6IGNhbmRp
ZGF0ZXMpIHsKLSAgICAgICAgICBqc29uQXJyYXkucHV0KHRvSnNvbkNhbmRpZGF0ZShjYW5kaWRh
dGUpKTsKLSAgICAgICAgfQotICAgICAgICBqc29uUHV0KGpzb24sICJjYW5kaWRhdGVzIiwganNv
bkFycmF5KTsKLSAgICAgICAgaWYgKGluaXRpYXRvcikgewotICAgICAgICAgIC8vIENhbGwgaW5p
dGlhdG9yIHNlbmRzIGljZSBjYW5kaWRhdGVzIHRvIEdBRSBzZXJ2ZXIuCi0gICAgICAgICAgaWYg
KHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgICBy
ZXBvcnRFcnJvcigiU2VuZGluZyBJQ0UgY2FuZGlkYXRlIHJlbW92YWxzIGluIG5vbiBjb25uZWN0
ZWQgc3RhdGUuIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAg
IHNlbmRQb3N0TWVzc2FnZShNZXNzYWdlVHlwZS5NRVNTQUdFLCBtZXNzYWdlVXJsLCBqc29uLnRv
U3RyaW5nKCkpOwotICAgICAgICAgIGlmIChjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykg
ewotICAgICAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2FuZGlkYXRlc1JlbW92ZWQoY2FuZGlk
YXRlcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIENhbGwg
cmVjZWl2ZXIgc2VuZHMgaWNlIGNhbmRpZGF0ZXMgdG8gd2Vic29ja2V0IHNlcnZlci4KLSAgICAg
ICAgICB3c0NsaWVudC5zZW5kKGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9KTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIFdlYlNvY2tldENoYW5uZWxF
dmVudHMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLgotICAvLyBBbGwgZXZlbnRzIGFyZSBjYWxs
ZWQgYnkgV2ViU29ja2V0Q2hhbm5lbENsaWVudCBvbiBhIGxvY2FsIGxvb3BlciB0aHJlYWQKLSAg
Ly8gKHBhc3NlZCB0byBXZWJTb2NrZXQgY2xpZW50IGNvbnN0cnVjdG9yKS4KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIG9uV2ViU29ja2V0TWVzc2FnZShmaW5hbCBTdHJpbmcgbXNnKSB7Ci0g
ICAgaWYgKHdzQ2xpZW50LmdldFN0YXRlKCkgIT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLlJF
R0lTVEVSRUQpIHsKLSAgICAgIExvZy5lKFRBRywgIkdvdCBXZWJTb2NrZXQgbWVzc2FnZSBpbiBu
b24gcmVnaXN0ZXJlZCBzdGF0ZS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdHJ5IHsK
LSAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KG1zZyk7Ci0gICAgICBTdHJp
bmcgbXNnVGV4dCA9IGpzb24uZ2V0U3RyaW5nKCJtc2ciKTsKLSAgICAgIFN0cmluZyBlcnJvclRl
eHQgPSBqc29uLm9wdFN0cmluZygiZXJyb3IiKTsKLSAgICAgIGlmIChtc2dUZXh0Lmxlbmd0aCgp
ID4gMCkgewotICAgICAgICBqc29uID0gbmV3IEpTT05PYmplY3QobXNnVGV4dCk7Ci0gICAgICAg
IFN0cmluZyB0eXBlID0ganNvbi5vcHRTdHJpbmcoInR5cGUiKTsKLSAgICAgICAgaWYgKHR5cGUu
ZXF1YWxzKCJjYW5kaWRhdGUiKSkgewotICAgICAgICAgIGV2ZW50cy5vblJlbW90ZUljZUNhbmRp
ZGF0ZSh0b0phdmFDYW5kaWRhdGUoanNvbikpOwotICAgICAgICB9IGVsc2UgaWYgKHR5cGUuZXF1
YWxzKCJyZW1vdmUtY2FuZGlkYXRlcyIpKSB7Ci0gICAgICAgICAgSlNPTkFycmF5IGNhbmRpZGF0
ZUFycmF5ID0ganNvbi5nZXRKU09OQXJyYXkoImNhbmRpZGF0ZXMiKTsKLSAgICAgICAgICBJY2VD
YW5kaWRhdGVbXSBjYW5kaWRhdGVzID0gbmV3IEljZUNhbmRpZGF0ZVtjYW5kaWRhdGVBcnJheS5s
ZW5ndGgoKV07Ci0gICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5kaWRhdGVBcnJheS5s
ZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBjYW5kaWRhdGVzW2ldID0gdG9KYXZhQ2FuZGlk
YXRlKGNhbmRpZGF0ZUFycmF5LmdldEpTT05PYmplY3QoaSkpOwotICAgICAgICAgIH0KLSAgICAg
ICAgICBldmVudHMub25SZW1vdGVJY2VDYW5kaWRhdGVzUmVtb3ZlZChjYW5kaWRhdGVzKTsKLSAg
ICAgICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygiYW5zd2VyIikpIHsKLSAgICAgICAgICBpZiAo
aW5pdGlhdG9yKSB7Ci0gICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbmV3IFNl
c3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlw
ZS5mcm9tQ2Fub25pY2FsRm9ybSh0eXBlKSwganNvbi5nZXRTdHJpbmcoInNkcCIpKTsKLSAgICAg
ICAgICAgIGV2ZW50cy5vblJlbW90ZURlc2NyaXB0aW9uKHNkcCk7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJSZWNlaXZlZCBhbnN3ZXIgZm9yIGNhbGwgaW5p
dGlhdG9yOiAiICsgbXNnKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5l
cXVhbHMoIm9mZmVyIikpIHsKLSAgICAgICAgICBpZiAoIWluaXRpYXRvcikgewotICAgICAgICAg
ICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAg
ICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlw
ZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAiKSk7Ci0gICAgICAgICAgICBldmVudHMub25SZW1vdGVE
ZXNjcmlwdGlvbihzZHApOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXBvcnRF
cnJvcigiUmVjZWl2ZWQgb2ZmZXIgZm9yIGNhbGwgcmVjZWl2ZXI6ICIgKyBtc2cpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygiYnllIikpIHsKLSAgICAgICAg
ICBldmVudHMub25DaGFubmVsQ2xvc2UoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBy
ZXBvcnRFcnJvcigiVW5leHBlY3RlZCBXZWJTb2NrZXQgbWVzc2FnZTogIiArIG1zZyk7Ci0gICAg
ICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChlcnJvclRleHQgIT0gbnVsbCAmJiBl
cnJvclRleHQubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIldlYlNvY2tl
dCBlcnJvciBtZXNzYWdlOiAiICsgZXJyb3JUZXh0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICByZXBvcnRFcnJvcigiVW5leHBlY3RlZCBXZWJTb2NrZXQgbWVzc2FnZTogIiArIG1zZyk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAg
ICAgIHJlcG9ydEVycm9yKCJXZWJTb2NrZXQgbWVzc2FnZSBKU09OIHBhcnNpbmcgZXJyb3I6ICIg
KyBlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBvbldlYlNvY2tldENsb3NlKCkgewotICAgIGV2ZW50cy5vbkNoYW5uZWxDbG9zZSgpOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uV2ViU29ja2V0RXJyb3IoU3RyaW5nIGRl
c2NyaXB0aW9uKSB7Ci0gICAgcmVwb3J0RXJyb3IoIldlYlNvY2tldCBlcnJvcjogIiArIGRlc2Ny
aXB0aW9uKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEhlbHBlciBmdW5jdGlvbnMu
Ci0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcihmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7
Ci0gICAgTG9nLmUoVEFHLCBlcnJvck1lc3NhZ2UpOwotICAgIGhhbmRsZXIucG9zdChuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgICAg
ICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuRVJST1I7Ci0gICAgICAgICAgZXZlbnRzLm9u
Q2hhbm5lbEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIC8vIFB1dCBhIHxrZXl8LT58dmFsdWV8IG1hcHBpbmcgaW4gfGpzb258LgotICBw
cml2YXRlIHN0YXRpYyB2b2lkIGpzb25QdXQoSlNPTk9iamVjdCBqc29uLCBTdHJpbmcga2V5LCBP
YmplY3QgdmFsdWUpIHsKLSAgICB0cnkgewotICAgICAganNvbi5wdXQoa2V5LCB2YWx1ZSk7Ci0g
ICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4
Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0KLQotICAvLyBTZW5kIFNEUCBvciBJQ0UgY2FuZGlkYXRl
IHRvIGEgcm9vbSBzZXJ2ZXIuCi0gIHByaXZhdGUgdm9pZCBzZW5kUG9zdE1lc3NhZ2UoCi0gICAg
ICBmaW5hbCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlwZSwgZmluYWwgU3RyaW5nIHVybCwgZmluYWwg
U3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBTdHJpbmcgbG9nSW5mbyA9IHVybDsKLSAgICBpZiAobWVz
c2FnZSAhPSBudWxsKSB7Ci0gICAgICBsb2dJbmZvICs9ICIuIE1lc3NhZ2U6ICIgKyBtZXNzYWdl
OwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDLT5HQUU6ICIgKyBsb2dJbmZvKTsKLSAgICBBc3lu
Y0h0dHBVUkxDb25uZWN0aW9uIGh0dHBDb25uZWN0aW9uID0KLSAgICAgICAgbmV3IEFzeW5jSHR0
cFVSTENvbm5lY3Rpb24oIlBPU1QiLCB1cmwsIG1lc3NhZ2UsIG5ldyBBc3luY0h0dHBFdmVudHMo
KSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRwRXJy
b3IoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoIkdBRSBQ
T1NUIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0dHBDb21wbGV0ZShTdHJpbmcgcmVz
cG9uc2UpIHsKLSAgICAgICAgICAgIGlmIChtZXNzYWdlVHlwZSA9PSBNZXNzYWdlVHlwZS5NRVNT
QUdFKSB7Ci0gICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgSlNPTk9iamVjdCBy
b29tSnNvbiA9IG5ldyBKU09OT2JqZWN0KHJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgcmVzdWx0ID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJyZXN1bHQiKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXJlc3VsdC5lcXVhbHMoIlNVQ0NFU1MiKSkgewotICAgICAgICAgICAgICAgICAgcmVw
b3J0RXJyb3IoIkdBRSBQT1NUIGVycm9yOiAiICsgcmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgICAgICAg
ICAgIHJlcG9ydEVycm9yKCJHQUUgUE9TVCBKU09OIGVycm9yOiAiICsgZS50b1N0cmluZygpKTsK
LSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0gICAgaHR0cENvbm5lY3Rpb24uc2VuZCgpOwotICB9Ci0KLSAgLy8gQ29udmVydHMgYSBKYXZh
IGNhbmRpZGF0ZSB0byBhIEpTT05PYmplY3QuCi0gIHByaXZhdGUgSlNPTk9iamVjdCB0b0pzb25D
YW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgIEpTT05PYmplY3Qg
anNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAganNvblB1dChqc29uLCAibGFiZWwiLCBjYW5k
aWRhdGUuc2RwTUxpbmVJbmRleCk7Ci0gICAganNvblB1dChqc29uLCAiaWQiLCBjYW5kaWRhdGUu
c2RwTWlkKTsKLSAgICBqc29uUHV0KGpzb24sICJjYW5kaWRhdGUiLCBjYW5kaWRhdGUuc2RwKTsK
LSAgICByZXR1cm4ganNvbjsKLSAgfQotCi0gIC8vIENvbnZlcnRzIGEgSlNPTiBjYW5kaWRhdGUg
dG8gYSBKYXZhIG9iamVjdC4KLSAgSWNlQ2FuZGlkYXRlIHRvSmF2YUNhbmRpZGF0ZShKU09OT2Jq
ZWN0IGpzb24pIHRocm93cyBKU09ORXhjZXB0aW9uIHsKLSAgICByZXR1cm4gbmV3IEljZUNhbmRp
ZGF0ZSgKLSAgICAgICAganNvbi5nZXRTdHJpbmcoImlkIiksIGpzb24uZ2V0SW50KCJsYWJlbCIp
LCBqc29uLmdldFN0cmluZygiY2FuZGlkYXRlIikpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvdXRpbC9BcHBSVENVdGlscy5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FwcFJUQ1V0aWxzLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FwcFJUQ1V0aWxz
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5C
dWlsZDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEFwcFJUQ1V0aWxzIHBy
b3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRocmVhZCBzYWZldHkuCi0gKi8K
LXB1YmxpYyBmaW5hbCBjbGFzcyBBcHBSVENVdGlscyB7Ci0gIHByaXZhdGUgQXBwUlRDVXRpbHMo
KSB7fQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24gIHdo
ZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3Nl
cnRJc1RydWUoYm9vbGVhbiBjb25kaXRpb24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAg
ICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1
ZSIpOwotICAgIH0KLSAgfQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIGZvciBidWlsZGluZyBhIHN0
cmluZyBvZiB0aHJlYWQgaW5mb3JtYXRpb24uKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0
VGhyZWFkSW5mbygpIHsKLSAgICByZXR1cm4gIkBbbmFtZT0iICsgVGhyZWFkLmN1cnJlbnRUaHJl
YWQoKS5nZXROYW1lKCkgKyAiLCBpZD0iICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgp
Ci0gICAgICAgICsgIl0iOwotICB9Ci0KLSAgLyoqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJy
ZW50IGJ1aWxkLCB0YWtlbiBmcm9tIHN5c3RlbSBwcm9wZXJ0aWVzLiAqLwotICBwdWJsaWMgc3Rh
dGljIHZvaWQgbG9nRGV2aWNlSW5mbyhTdHJpbmcgdGFnKSB7Ci0gICAgTG9nLmQodGFnLCAiQW5k
cm9pZCBTREs6ICIgKyBCdWlsZC5WRVJTSU9OLlNES19JTlQgKyAiLCAiCi0gICAgICAgICAgICAr
ICJSZWxlYXNlOiAiICsgQnVpbGQuVkVSU0lPTi5SRUxFQVNFICsgIiwgIgotICAgICAgICAgICAg
KyAiQnJhbmQ6ICIgKyBCdWlsZC5CUkFORCArICIsICIKLSAgICAgICAgICAgICsgIkRldmljZTog
IiArIEJ1aWxkLkRFVklDRSArICIsICIKLSAgICAgICAgICAgICsgIklkOiAiICsgQnVpbGQuSUQg
KyAiLCAiCi0gICAgICAgICAgICArICJIYXJkd2FyZTogIiArIEJ1aWxkLkhBUkRXQVJFICsgIiwg
IgotICAgICAgICAgICAgKyAiTWFudWZhY3R1cmVyOiAiICsgQnVpbGQuTUFOVUZBQ1RVUkVSICsg
IiwgIgotICAgICAgICAgICAgKyAiTW9kZWw6ICIgKyBCdWlsZC5NT0RFTCArICIsICIKLSAgICAg
ICAgICAgICsgIlByb2R1Y3Q6ICIgKyBCdWlsZC5QUk9EVUNUKTsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwvQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FzeW5jSHR0
cFVSTENvbm5lY3Rpb24uamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL3V0aWwvQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFw
cHNwb3QuYXBwcnRjLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0
IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBv
cnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuU29ja2V0VGlt
ZW91dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLlNj
YW5uZXI7Ci0KLS8qKgotICogQXN5bmNocm9ub3VzIGh0dHAgcmVxdWVzdHMgaW1wbGVtZW50YXRp
b24uCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3luY0h0dHBVUkxDb25uZWN0aW9uIHsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IEhUVFBfVElNRU9VVF9NUyA9IDgwMDA7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIFN0cmluZyBIVFRQX09SSUdJTiA9ICJodHRwczovL2FwcHIudGMiOwotICBwcml2
YXRlIGZpbmFsIFN0cmluZyBtZXRob2Q7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHVybDsKLSAg
cHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKLSAgcHJpdmF0ZSBmaW5hbCBBc3luY0h0dHBF
dmVudHMgZXZlbnRzOwotICBwcml2YXRlIFN0cmluZyBjb250ZW50VHlwZTsKLQotICAvKioKLSAg
ICogSHR0cCByZXF1ZXN0cyBjYWxsYmFja3MuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEFz
eW5jSHR0cEV2ZW50cyB7Ci0gICAgdm9pZCBvbkh0dHBFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdl
KTsKLSAgICB2b2lkIG9uSHR0cENvbXBsZXRlKFN0cmluZyByZXNwb25zZSk7Ci0gIH0KLQotICBw
dWJsaWMgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbihTdHJpbmcgbWV0aG9kLCBTdHJpbmcgdXJsLCBT
dHJpbmcgbWVzc2FnZSwgQXN5bmNIdHRwRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMubWV0aG9k
ID0gbWV0aG9kOwotICAgIHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubWVzc2FnZSA9IG1lc3Nh
Z2U7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRD
b250ZW50VHlwZShTdHJpbmcgY29udGVudFR5cGUpIHsKLSAgICB0aGlzLmNvbnRlbnRUeXBlID0g
Y29udGVudFR5cGU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZW5kKCkgewotICAgIFJ1bm5hYmxl
IHJ1bkh0dHAgPSBuZXcgUnVubmFibGUoKSB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIHNlbmRIdHRwTWVzc2FnZSgpOwotICAgICAgfQotICAgIH07Ci0gICAgbmV3IFRocmVh
ZChydW5IdHRwKS5zdGFydCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNlbmRIdHRwTWVzc2Fn
ZSgpIHsKLSAgICB0cnkgewotICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChI
dHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCh1cmwpLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICBi
eXRlW10gcG9zdERhdGEgPSBuZXcgYnl0ZVswXTsKLSAgICAgIGlmIChtZXNzYWdlICE9IG51bGwp
IHsKLSAgICAgICAgcG9zdERhdGEgPSBtZXNzYWdlLmdldEJ5dGVzKCJVVEYtOCIpOwotICAgICAg
fQotICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0TWV0aG9kKG1ldGhvZCk7Ci0gICAgICBjb25u
ZWN0aW9uLnNldFVzZUNhY2hlcyhmYWxzZSk7Ci0gICAgICBjb25uZWN0aW9uLnNldERvSW5wdXQo
dHJ1ZSk7Ci0gICAgICBjb25uZWN0aW9uLnNldENvbm5lY3RUaW1lb3V0KEhUVFBfVElNRU9VVF9N
Uyk7Ci0gICAgICBjb25uZWN0aW9uLnNldFJlYWRUaW1lb3V0KEhUVFBfVElNRU9VVF9NUyk7Ci0g
ICAgICAvLyBUT0RPKGdsYXpuZXYpIC0gcXVlcnkgcmVxdWVzdCBvcmlnaW4gZnJvbSBwcmVmX3Jv
b21fc2VydmVyX3VybF9rZXkgcHJlZmVyZW5jZXMuCi0gICAgICBjb25uZWN0aW9uLmFkZFJlcXVl
c3RQcm9wZXJ0eSgib3JpZ2luIiwgSFRUUF9PUklHSU4pOwotICAgICAgYm9vbGVhbiBkb091dHB1
dCA9IGZhbHNlOwotICAgICAgaWYgKG1ldGhvZC5lcXVhbHMoIlBPU1QiKSkgewotICAgICAgICBk
b091dHB1dCA9IHRydWU7Ci0gICAgICAgIGNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7Ci0g
ICAgICAgIGNvbm5lY3Rpb24uc2V0Rml4ZWRMZW5ndGhTdHJlYW1pbmdNb2RlKHBvc3REYXRhLmxl
bmd0aCk7Ci0gICAgICB9Ci0gICAgICBpZiAoY29udGVudFR5cGUgPT0gbnVsbCkgewotICAgICAg
ICBjb25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29udGVudC1UeXBlIiwgInRleHQvcGxh
aW47IGNoYXJzZXQ9dXRmLTgiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbm5lY3Rpb24u
c2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50LVR5cGUiLCBjb250ZW50VHlwZSk7Ci0gICAgICB9
Ci0KLSAgICAgIC8vIFNlbmQgUE9TVCByZXF1ZXN0LgotICAgICAgaWYgKGRvT3V0cHV0ICYmIHBv
c3REYXRhLmxlbmd0aCA+IDApIHsKLSAgICAgICAgT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IGNv
bm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIG91dFN0cmVhbS53cml0ZShwb3N0
RGF0YSk7Ci0gICAgICAgIG91dFN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotCi0gICAgICAvLyBH
ZXQgcmVzcG9uc2UuCi0gICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubmVjdGlvbi5nZXRSZXNw
b25zZUNvZGUoKTsKLSAgICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7Ci0gICAgICAgIGV2
ZW50cy5vbkh0dHBFcnJvcigiTm9uLTIwMCByZXNwb25zZSB0byAiICsgbWV0aG9kICsgIiB0byBV
Ukw6ICIgKyB1cmwgKyAiIDogIgotICAgICAgICAgICAgKyBjb25uZWN0aW9uLmdldEhlYWRlckZp
ZWxkKG51bGwpKTsKLSAgICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICAgIElucHV0U3RyZWFtIHJlc3BvbnNlU3RyZWFtID0gY29ubmVj
dGlvbi5nZXRJbnB1dFN0cmVhbSgpOwotICAgICAgU3RyaW5nIHJlc3BvbnNlID0gZHJhaW5TdHJl
YW0ocmVzcG9uc2VTdHJlYW0pOwotICAgICAgcmVzcG9uc2VTdHJlYW0uY2xvc2UoKTsKLSAgICAg
IGNvbm5lY3Rpb24uZGlzY29ubmVjdCgpOwotICAgICAgZXZlbnRzLm9uSHR0cENvbXBsZXRlKHJl
c3BvbnNlKTsKLSAgICB9IGNhdGNoIChTb2NrZXRUaW1lb3V0RXhjZXB0aW9uIGUpIHsKLSAgICAg
IGV2ZW50cy5vbkh0dHBFcnJvcigiSFRUUCAiICsgbWV0aG9kICsgIiB0byAiICsgdXJsICsgIiB0
aW1lb3V0Iik7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgZXZlbnRzLm9u
SHR0cEVycm9yKCJIVFRQICIgKyBtZXRob2QgKyAiIHRvICIgKyB1cmwgKyAiIGVycm9yOiAiICsg
ZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybiB0aGUgY29udGVudHMg
b2YgYW4gSW5wdXRTdHJlYW0gYXMgYSBTdHJpbmcuCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBk
cmFpblN0cmVhbShJbnB1dFN0cmVhbSBpbikgewotICAgIFNjYW5uZXIgcyA9IG5ldyBTY2FubmVy
KGluKS51c2VEZWxpbWl0ZXIoIlxcQSIpOwotICAgIHJldHVybiBzLmhhc05leHQoKSA/IHMubmV4
dCgpIDogIiI7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3RhcnRfbG9vcGJhY2tfc3R1YmJlZF9jYW1l
cmFfc2F2ZWRfdmlkZW9fb3V0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3RhcnRfbG9vcGJhY2tf
c3R1YmJlZF9jYW1lcmFfc2F2ZWRfdmlkZW9fb3V0LnB5CShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3N0YXJ0X2xvb3BiYWNrX3N0dWJiZWRfY2FtZXJhX3NhdmVkX3ZpZGVvX291dC5weQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDEyNCArMCwwIEBACi0jIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2Vi
UlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMKLSMgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotIyB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSMgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotIyBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0jIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotCi1mcm9tIG9wdHBhcnNlIGltcG9ydCBPcHRp
b25QYXJzZXIKLWltcG9ydCByYW5kb20KLWltcG9ydCBzdHJpbmcKLWltcG9ydCBzdWJwcm9jZXNz
Ci1pbXBvcnQgc3lzCi1pbXBvcnQgdGltZQotCi1mcm9tIGNvbS5hbmRyb2lkLm1vbmtleXJ1bm5l
ciBpbXBvcnQgTW9ua2V5UnVubmVyLCBNb25rZXlEZXZpY2UKLQotZGVmIG1haW4oKToKLSAgcGFy
c2VyID0gT3B0aW9uUGFyc2VyKCkKLQotICBwYXJzZXIuYWRkX29wdGlvbignLS1kZXZuYW1lJywg
ZGVzdD0nZGV2bmFtZScsIGhlbHA9J1RoZSBkZXZpY2UgaWQnKQotCi0gIHBhcnNlci5hZGRfb3B0
aW9uKAotICAgICAgJy0tdmlkZW9vdXRzYXZlJywKLSAgICAgIGRlc3Q9J3ZpZGVvb3V0c2F2ZScs
Ci0gICAgICBoZWxwPSdUaGUgcGF0aCB3aGVyZSB0byBzYXZlIHRoZSB2aWRlbyBvdXQgZmlsZSBv
biBsb2NhbCBjb21wdXRlcicpCi0KLSAgcGFyc2VyLmFkZF9vcHRpb24oCi0gICAgICAnLS12aWRl
b291dCcsCi0gICAgICBkZXN0PSd2aWRlb291dCcsCi0gICAgICBoZWxwPSdUaGUgcGF0aCB3aGVy
ZSB0byBwdXQgdGhlIHZpZGVvIG91dCBmaWxlJykKLQotICBwYXJzZXIuYWRkX29wdGlvbigKLSAg
ICAgICctLXZpZGVvb3V0X3dpZHRoJywKLSAgICAgIGRlc3Q9J3ZpZGVvb3V0X3dpZHRoJywKLSAg
ICAgIHR5cGU9J2ludCcsCi0gICAgICBoZWxwPSdUaGUgd2lkdGggZm9yIHRoZSB2aWRlbyBvdXQg
ZmlsZScpCi0KLSAgcGFyc2VyLmFkZF9vcHRpb24oCi0gICAgICAnLS12aWRlb291dF9oZWlnaHQn
LAotICAgICAgZGVzdD0ndmlkZW9vdXRfaGVpZ2h0JywKLSAgICAgIHR5cGU9J2ludCcsCi0gICAg
ICBoZWxwPSdUaGUgaGVpZ2h0IGZvciB0aGUgdmlkZW8gb3V0IGZpbGUnKQotCi0gIHBhcnNlci5h
ZGRfb3B0aW9uKAotICAgICAgJy0tdmlkZW9pbicsCi0gICAgICBkZXN0PSd2aWRlb2luJywKLSAg
ICAgIGhlbHA9J1RoZSBwYXRoIHdoZXJlIHRvIHJlYWQgaW5wdXQgZmlsZSBpbnN0ZWFkIG9mIGNh
bWVyYScpCi0KLSAgcGFyc2VyLmFkZF9vcHRpb24oCi0gICAgICAnLS1jYWxsX2xlbmd0aCcsCi0g
ICAgICBkZXN0PSdjYWxsX2xlbmd0aCcsCi0gICAgICB0eXBlPSdpbnQnLAotICAgICAgaGVscD0n
VGhlIGxlbmd0aCBvZiB0aGUgY2FsbCcpCi0KLSAgKG9wdGlvbnMsIGFyZ3MpID0gcGFyc2VyLnBh
cnNlX2FyZ3MoKQotCi0gIHByaW50IChvcHRpb25zLCBhcmdzKQotCi0gIGRldm5hbWUgPSBvcHRp
b25zLmRldm5hbWUKLQotICB2aWRlb2luID0gb3B0aW9ucy52aWRlb2luCi0KLSAgdmlkZW9vdXQg
PSBvcHRpb25zLnZpZGVvb3V0Ci0gIHZpZGVvb3V0X3dpZHRoID0gb3B0aW9ucy52aWRlb291dF93
aWR0aAotICB2aWRlb291dF9oZWlnaHQgPSBvcHRpb25zLnZpZGVvb3V0X2hlaWdodAotCi0gIHZp
ZGVvb3V0c2F2ZSA9IG9wdGlvbnMudmlkZW9vdXRzYXZlCi0KLSAgY2FsbF9sZW5ndGggPSBvcHRp
b25zLmNhbGxfbGVuZ3RoIG9yIDEwCi0KLSAgcm9vbSA9ICcnLmpvaW4ocmFuZG9tLmNob2ljZShz
dHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMpCi0gICAgICBmb3IgXyBpbiByYW5n
ZSg4KSkKLQotICAjIERlbGV0ZSBvdXRwdXQgdmlkZW8gZmlsZS4KLSAgaWYgdmlkZW9vdXQ6Ci0g
ICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnYWRiJywgJy1zJywgZGV2bmFtZSwgJ3NoZWxsJywg
J3JtJywKLSAgICAgICAgdmlkZW9vdXRdKQotCi0gIGRldmljZSA9IE1vbmtleVJ1bm5lci53YWl0
Rm9yQ29ubmVjdGlvbigyLCBkZXZuYW1lKQotCi0gIGV4dHJhcyA9IHsKLSAgICAgICdvcmcuYXBw
c3BvdC5hcHBydGMuVVNFX1ZBTFVFU19GUk9NX0lOVEVOVCc6IFRydWUsCi0gICAgICAnb3JnLmFw
cHNwb3QuYXBwcnRjLkFVRElPQ09ERUMnOiAnT1BVUycsCi0gICAgICAnb3JnLmFwcHNwb3QuYXBw
cnRjLkxPT1BCQUNLJzogVHJ1ZSwKLSAgICAgICdvcmcuYXBwc3BvdC5hcHBydGMuVklERU9DT0RF
Qyc6ICdWUDgnLAotICAgICAgJ29yZy5hcHBzcG90LmFwcHJ0Yy5DQVBUVVJFVE9URVhUVVJFJzog
RmFsc2UsCi0gICAgICAnb3JnLmFwcHNwb3QuYXBwcnRjLkNBTUVSQTInOiBGYWxzZSwKLSAgICAg
ICdvcmcuYXBwc3BvdC5hcHBydGMuUk9PTUlEJzogcm9vbX0KLQotICBpZiB2aWRlb2luOgotICAg
IGV4dHJhcy51cGRhdGUoeydvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fRklMRV9BU19DQU1FUkEn
OiB2aWRlb2lufSkKLQotICBpZiB2aWRlb291dDoKLSAgICBleHRyYXMudXBkYXRlKHsKLSAgICAg
ICAgJ29yZy5hcHBzcG90LmFwcHJ0Yy5TQVZFX1JFTU9URV9WSURFT19UT19GSUxFJzogdmlkZW9v
dXQsCi0gICAgICAgICdvcmcuYXBwc3BvdC5hcHBydGMuU0FWRV9SRU1PVEVfVklERU9fVE9fRklM
RV9XSURUSCc6IHZpZGVvb3V0X3dpZHRoLAotICAgICAgICAnb3JnLmFwcHNwb3QuYXBwcnRjLlNB
VkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hUJzogdmlkZW9vdXRfaGVpZ2h0fSkKLQotICBw
cmludCBleHRyYXMKLQotICBkZXZpY2Uuc3RhcnRBY3Rpdml0eShkYXRhPSdodHRwczovL2FwcHIu
dGMnLAotICAgICAgYWN0aW9uPSdhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVycsCi0gICAgICBj
b21wb25lbnQ9J29yZy5hcHBzcG90LmFwcHJ0Yy8uQ29ubmVjdEFjdGl2aXR5JywgZXh0cmFzPWV4
dHJhcykKLQotICBwcmludCAnUnVubmluZyBhIGNhbGwgZm9yICVkIHNlY29uZHMnICUgY2FsbF9s
ZW5ndGgKLSAgZm9yIF8gaW4geHJhbmdlKGNhbGxfbGVuZ3RoKToKLSAgICBzeXMuc3Rkb3V0Lndy
aXRlKCcuJykKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICB0aW1lLnNsZWVwKDEpCi0gIHBy
aW50ICdcbkVuZGluZyBjYWxsLicKLQotICAjIFByZXNzIGJhY2sgdG8gZW5kIHRoZSBjYWxsLiBX
aWxsIGVuZCBvbiBib3RoIHNpZGVzLgotICBkZXZpY2UucHJlc3MoJ0tFWUNPREVfQkFDSycsIE1v
bmtleURldmljZS5ET1dOX0FORF9VUCkKLQotICBpZiB2aWRlb291dHNhdmU6Ci0gICAgdGltZS5z
bGVlcCgyKQotCi0gICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsnYWRiJywgJy1zJywgZGV2bmFt
ZSwgJ3B1bGwnLAotICAgICAgICB2aWRlb291dCwgdmlkZW9vdXRzYXZlXSkKLQotaWYgX19uYW1l
X18gPT0gJ19fbWFpbl9fJzoKLSAgbWFpbigpCi0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0
b2JhbmgvQlVJTEQuZ24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9C
VUlMRC5nbgkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9C
VUlMRC5nbgkobm9uZXhpc3RlbnQpCkBAIC0xLDEzICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAy
MDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwot
IyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0jIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotIyB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0jIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSMgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0KLWltcG9ydCgiLy9idWls
ZC9jb25maWcvYW5kcm9pZC9ydWxlcy5nbmkiKQotCi1hbmRyb2lkX2phdmFfcHJlYnVpbHQoImF1
dG9iYW5oX2phdmEiKSB7Ci0gIGphcl9wYXRoID0gImxpYi9hdXRvYmFuaC5qYXIiCi19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL0xJQ0VOU0UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90
aGlyZF9wYXJ0eS9hdXRvYmFuaC9MSUNFTlNFCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Ro
aXJkX3BhcnR5L2F1dG9iYW5oL0xJQ0VOU0UJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNzcgKzAsMCBA
QAotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAg
ICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBU
RVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJ
T04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0KLSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRo
ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQg
ZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBk
b2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3du
ZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhh
dCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KLQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwg
bWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIg
ZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNv
bW1vbgotICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9m
IHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBk
aXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFn
ZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVy
d2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9m
IHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVy
c2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVh
biBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNz
aW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFs
bCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAg
ICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1
bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAg
ICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFu
aWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9y
bSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNv
ZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90
aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBh
dXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUg
YXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29w
eXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3Jr
Ci0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgot
Ci0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBp
biBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJp
dmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2
aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25z
Ci0gICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9y
c2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZl
IFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFi
bGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFj
ZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0g
ICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGlu
Y2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBt
b2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwotICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRp
dmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQg
dG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93
bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVk
IHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0
aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMg
YW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24g
c2VudAotICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1
ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25p
YyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQg
aXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYg
b2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5k
IGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0gICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0
aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRl
ZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlv
bi4iCi0KLSAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGlu
ZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRy
aWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVl
bnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5
cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAg
ICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBh
IHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCBy
b3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXBy
b2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3Bs
YXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAg
ICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9y
bS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1z
IGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3Ig
aGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1l
eGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4
Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBo
YXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90
aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKLSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBs
aWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNo
IENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAg
ICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRy
aWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlv
bihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKLSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdh
dGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBv
ciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAg
ICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1
dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRo
ZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBM
aWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0
ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCi0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3Ug
bWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9y
IERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQK
LSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3Zp
ZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAg
ICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IK
LSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAot
Ci0gICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHBy
b21pbmVudCBub3RpY2VzCi0gICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBm
aWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9y
bSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcwotICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUs
IGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1
dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAg
IGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQg
b2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0
aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAg
ICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBk
aXN0cmlidXRlIG11c3QKLSAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUg
YXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJ
Q0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBw
ZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBv
bmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRl
eHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUg
V29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9u
LCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAg
ICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3Jrcywg
aWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1h
bGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0gICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFy
ZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBt
b2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAg
ICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRl
LCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRl
eHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKLSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25h
bCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBt
b2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHly
aWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3Zp
ZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwot
ICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2Rp
ZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3
aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0gICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmli
dXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25k
aXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29u
dHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAg
IGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBp
biB0aGUgV29yawotICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0
aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBh
bnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5n
IHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAg
ICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhh
dmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0
aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBl
cm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQotICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZp
Y2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0
IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJp
bmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250
ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQotICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4g
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4g
d3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250
cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywK
LSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRo
ZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRp
b24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5G
UklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5n
IHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRo
ZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBl
eGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0
YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5
LAotICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0
LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg
KHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9y
IGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxp
YWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwg
c3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBh
bnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQotICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBv
ciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5j
bHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAot
ICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3Ig
YW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBl
dmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBv
c3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KLQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9y
IEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdv
cmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwK
LSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJh
bnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5k
L29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwg
aW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9u
IFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24g
YmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBh
Z3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0
b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFp
bXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9m
IHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5
LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFy
dHkvYXV0b2JhbmgvTElDRU5TRS5tZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1
dG9iYW5oL0xJQ0VOU0UubWQJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkv
YXV0b2JhbmgvTElDRU5TRS5tZAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxICswLDAgQEAKLVRoZSBN
SVQgTGljZW5zZSAoTUlUKQotCi1Db3B5cmlnaHQgKGMpIDIwMTQgQ2FtZXJvbiBMb3dlbGwgUGFs
bWVyCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh
bnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKLW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0
ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCi1pbiB0aGUg
U29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlv
biB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry
aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh
bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0
byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGlu
Y2x1ZGVkIGluIGFsbAotY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0
d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFO
VFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM
QUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G
IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElO
IENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5H
UyBJTiBUSEUKLVNPRlRXQVJFLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9OT1RJ
Q0UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9OT1RJQ0UJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTk9USUNFCShub25leGlz
dGVudCkKQEAgLTEsMyArMCwwIEBACi1BdXRvYmFobkFuZHJvaWQKLUNvcHlyaWdodCAyMDExLDIw
MTIgVGF2ZW5kbyBHbWJILiBMaWNlbnNlZCB1bmRlciBBcGFjaGUgMi4wCi1UaGlzIHByb2R1Y3Qg
aW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGF0IFRhdmVuZG8gR21iSCBodHRwOi8vd3d3LnRh
dmVuZG8uZGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5oLmph
cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Ro
aXJkX3BhcnR5L2F1dG9iYW5oL2xpYi9hdXRvYmFuaC5qYXIKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90
aGlyZF9wYXJ0eS9hdXRvYmFuaC9saWIvYXV0b2JhbmguamFyCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL2xpYi9hdXRvYmFuaC5qYXIJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9saWIvYXV0
b2JhbmguamFyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMj
Ci1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9kaXNjb25uZWN0LnBuZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10
eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1o
ZHBpL2Rpc2Nvbm5lY3QucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkv
ZGlzY29ubmVjdC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhk
cGkvZGlzY29ubmVjdC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvZHJhd2FibGUtaGRwaS9kaXNjb25uZWN0LnBuZwpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2
bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkv
aWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9mdWxsX3Nj
cmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25f
ZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1o
ZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4u
cG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJv
bV9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LWhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQp
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9y
ZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10
eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5j
aGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFy
eSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50KQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sYXVuY2hlci5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fu
bm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUg
PSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkv
aWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRw
aS9pY19sb29wYmFja19jYWxsLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtaGRwaS9pY19sb29wYmFja19jYWxsLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvZHJhd2FibGUtbGRwaS9kaXNjb25uZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2Rpc2Nvbm5l
Y3QucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvZGlzY29ubmVjdC5w
bmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvZGlzY29ubmVj
dC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUtbGRwaS9kaXNjb25uZWN0LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUK
IyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9uX2Z1
bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4u
cG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlv
bl9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
RGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtbGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LWxkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVl
bi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0
aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9m
dWxsX3NjcmVlbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICsw
LDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHBy
b3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46
bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJs
ZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sYXVuY2hlci5wbmcKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpE
ZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1sZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6
IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbG9vcGJhY2tf
Y2FsbC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19sb29wYmFj
a19jYWxsLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9p
Y19sb29wYmFja19jYWxsLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVs
ZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUtbWRwaS9kaXNjb25uZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1h
cmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2Rpc2Nvbm5lY3QucG5nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvZGlzY29ubmVjdC5wbmcJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvZGlzY29ubmVjdC5wbmcJKG5vbmV4
aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9kaXNj
b25uZWN0LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAj
IwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBu
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVl
bi5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUtbWRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3Zu
Om1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9p
Y19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0
aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX3JldHVybl9m
cm9tX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5w
bmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2lj
X2xhdW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xh
dW5jaGVyLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9p
Y19sYXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9y
ZXMvZHJhd2FibGUtbWRwaS9pY19sYXVuY2hlci5wbmcKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46
bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2lj
X2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19sb29wYmFja19jYWxsLnBuZwko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9pY19sb29wYmFja19j
YWxsLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1tZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1p
bWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvZGlz
Y29ubmVjdC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvZGlzY29ubmVjdC5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvZGlzY29ubmVjdC5wbmcJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2Rpc2Nvbm5lY3QucG5nCShub25leGlzdGVudCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2Rpc2Nvbm5lY3Qu
cG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46
bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS14aGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5w
bmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
eGhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjpt
aW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2lj
X2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlz
cGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0
aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS14aGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fcmV0dXJu
X2Zyb21fZnVsbF9zY3JlZW4ucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVl
bi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpD
YW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlw
ZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhk
cGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBp
L2ljX2xhdW5jaGVyLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
eGhkcGkvaWNfbGF1bmNoZXIucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xhdW5jaGVyLnBuZwpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0
ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LXhoZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZp
bGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvb3BiYWNrX2Nh
bGwucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvb3BiYWNr
X2NhbGwucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9p
Y19sb29wYmFja19jYWxsLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sb29wYmFja19jYWxsLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRl
bGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91
dC9hY3Rpdml0eV9jYWxsLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQvYWN0aXZp
dHlfY2FsbC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9hY3Rpdml0
eV9jYWxsLnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249
IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci0KLTxSZWxhdGl2ZUxheW91dAotICAgIHhtbG5zOmFu
ZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBh
bmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hl
aWdodD0ibWF0Y2hfcGFyZW50Ij4KLQotICAgIDxvcmcuYXBwc3BvdC5hcHBydGMuUGVyY2VudEZy
YW1lTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcmVtb3RlX3ZpZGVvX2xheW91dCIK
LSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5k
cm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgotICAgICAgICA8b3JnLndlYnJ0Yy5T
dXJmYWNlVmlld1JlbmRlcmVyCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL3JlbW90ZV92
aWRlb192aWV3IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVu
dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgot
ICAgIDwvb3JnLmFwcHNwb3QuYXBwcnRjLlBlcmNlbnRGcmFtZUxheW91dD4KLQotICAgIDxvcmcu
YXBwc3BvdC5hcHBydGMuUGVyY2VudEZyYW1lTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAr
aWQvbG9jYWxfdmlkZW9fbGF5b3V0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0
Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+
Ci0gICAgICAgIDxvcmcud2VicnRjLlN1cmZhY2VWaWV3UmVuZGVyZXIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6aWQ9IkAraWQvbG9jYWxfdmlkZW9fdmlldyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5
b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWln
aHQ9IndyYXBfY29udGVudCIgLz4KLSAgICA8L29yZy5hcHBzcG90LmFwcHJ0Yy5QZXJjZW50RnJh
bWVMYXlvdXQ+Ci0KLSAgICA8RnJhbWVMYXlvdXQKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9j
YWxsX2ZyYWdtZW50X2NvbnRhaW5lciIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1h
dGNoX3BhcmVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQi
IC8+Ci0gICAgPEZyYW1lTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaHVkX2ZyYWdt
ZW50X2NvbnRhaW5lciIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVu
dCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiIC8+Ci0KLTwv
UmVsYXRpdmVMYXlvdXQ+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQvYWN0aXZpdHlfY29ubmVjdC54
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2FjdGl2aXR5X2Nvbm5lY3QueG1sCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQvYWN0aXZpdHlfY29ubmVjdC54bWwJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29k
aW5nPSJ1dGYtOCI/PgotPExpbmVhckxheW91dAotICAgIHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9z
Y2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAgICBhbmRyb2lkOmxheW91dF9t
YXJnaW49IjE2ZHAiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAg
ICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIKLSAgICBhbmRyb2lkOm9yaWVu
dGF0aW9uPSJ2ZXJ0aWNhbCIKLSAgICBhbmRyb2lkOndlaWdodFN1bT0iMSIKLSAgICBhbmRyb2lk
OmxheW91dF9jZW50ZXJIb3Jpem9udGFsPSJ0cnVlIj4KLQotICAgIDxUZXh0VmlldwotICAgICAg
ICBhbmRyb2lkOmlkPSJAK2lkL3Jvb21fZWRpdHRleHRfZGVzY3JpcHRpb24iCi0gICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0
X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOnRleHQ9IkBzdHJpbmcvcm9v
bV9kZXNjcmlwdGlvbiIvPgotCi0gICAgPExpbmVhckxheW91dAotICAgICAgICBhbmRyb2lkOm9y
aWVudGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0
Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCIK
LSAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXIiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0
X21hcmdpbkJvdHRvbT0iOGRwIj4KLQotICAgICAgICA8RWRpdFRleHQKLSAgICAgICAgICAgIGFu
ZHJvaWQ6aWQ9IkAraWQvcm9vbV9lZGl0dGV4dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0
X3dpZHRoPSIwZHAiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29u
dGVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dlaWdodD0iMSIKLSAgICAgICAgICAg
IGFuZHJvaWQ6c2luZ2xlTGluZT0idHJ1ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6aW1lT3B0aW9u
cz0iYWN0aW9uRG9uZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6aW5wdXRUeXBlPSJ0ZXh0Ii8+Ci0K
LSAgICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2Nvbm5l
Y3RfYnV0dG9uIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0gICAg
ICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiCi0gICAgICAgICAgICBhbmRyb2lk
OmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9jb25uZWN0X2Rlc2NyaXB0aW9uIgotICAgICAg
ICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9zeW1fYWN0aW9uX2Nh
bGwiIC8+Ci0KLSAgICAgICAgPEltYWdlQnV0dG9uCi0gICAgICAgICAgICBhbmRyb2lkOmlkPSJA
K2lkL2FkZF9mYXZvcml0ZV9idXR0b24iCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0
aD0iNDhkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIKLSAgICAg
ICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL2FkZF9mYXZvcml0ZV9k
ZXNjcmlwdGlvbiIKLSAgICAgICAgICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6ZHJh
d2FibGUvaWNfaW5wdXRfYWRkIiAvPgotICAgIDwvTGluZWFyTGF5b3V0PgotCi0gICAgPFRleHRW
aWV3Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcm9vbV9saXN0dmlld19kZXNjcmlwdGlvbiIK
LSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgYW5k
cm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5U
b3A9IjhkcCIKLSAgICAgICAgYW5kcm9pZDpsaW5lcz0iMSIKLSAgICAgICAgYW5kcm9pZDptYXhM
aW5lcz0iMSIKLSAgICAgICAgYW5kcm9pZDp0ZXh0QXBwZWFyYW5jZT0iP2FuZHJvaWQ6YXR0ci90
ZXh0QXBwZWFyYW5jZU1lZGl1bSIKLSAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2Zhdm9y
aXRlcyIKLSAgICAgICAgYW5kcm9pZDpncmF2aXR5PSJjZW50ZXJfdmVydGljYWwiLz4KLQotICAg
IDxGcmFtZUxheW91dAotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50
IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjBkcCIKLSAgICAgICAgYW5kcm9pZDps
YXlvdXRfd2VpZ2h0PSIxIj4KLQotICAgICAgICA8TGlzdFZpZXcKLSAgICAgICAgICAgIGFuZHJv
aWQ6aWQ9IkAraWQvcm9vbV9saXN0dmlldyIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dp
ZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1h
dGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZHJhd1NlbGVjdG9yT25Ub3A9ImZhbHNl
IiAvPgotCi0gICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQGFuZHJv
aWQ6aWQvZW1wdHkiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFy
ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiCi0g
ICAgICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIKLSAgICAgICAgICAgIGFuZHJvaWQ6
dGV4dD0iQHN0cmluZy9ub19mYXZvcml0ZXMiIC8+Ci0gICAgPC9GcmFtZUxheW91dD4KLTwvTGlu
ZWFyTGF5b3V0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xh
eW91dC9mcmFnbWVudF9jYWxsLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQvZnJh
Z21lbnRfY2FsbC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9mcmFn
bWVudF9jYWxsLnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDc3ICswLDAgQEAKLTw/eG1sIHZlcnNp
b249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci0KLTxSZWxhdGl2ZUxheW91dAotICAgIHhtbG5z
OmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKLSAg
ICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0
X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KLQotICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lk
OmlkPSJAK2lkL2NvbnRhY3RfbmFtZV9jYWxsIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0
aD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29u
dGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVySG9yaXpvbnRhbD0idHJ1ZSIKLSAg
ICAgICAgYW5kcm9pZDpsYXlvdXRfYWJvdmU9IkAraWQvYnV0dG9uc19jYWxsX2NvbnRhaW5lciIK
LSAgICAgICAgYW5kcm9pZDp0ZXh0U2l6ZT0iMjRzcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRf
bWFyZ2luPSI4ZHAiLz4KLQotICAgIDxMaW5lYXJMYXlvdXQKLSAgICAgICAgICAgYW5kcm9pZDpp
ZD0iQCtpZC9idXR0b25zX2NhbGxfY29udGFpbmVyIgotICAgICAgICAgICBhbmRyb2lkOm9yaWVu
dGF0aW9uPSJob3Jpem9udGFsIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9hYm92ZT0iQCtp
ZC9jYXB0dXJlX2Zvcm1hdF90ZXh0X2NhbGwiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2Fs
aWduV2l0aFBhcmVudElmTWlzc2luZz0idHJ1ZSIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRf
bWFyZ2luQm90dG9tPSIzMmRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50ZXJIb3Jp
em9udGFsPSJ0cnVlIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3JhcF9jb250
ZW50IgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBfY29udGVudCI+Ci0K
LSAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0b25f
Y2FsbF9kaXNjb25uZWN0IgotICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBkcmF3YWJs
ZS9kaXNjb25uZWN0IgotICAgICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0
cmluZy9kaXNjb25uZWN0X2NhbGwiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVu
ZD0iMTZkcCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0gICAgICAg
ICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIvPgotCi0gICAgICAgPEltYWdlQnV0dG9u
Ci0gICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYnV0dG9uX2NhbGxfc3dpdGNoX2NhbWVyYSIK
LSAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9pY19tZW51
X2NhbWVyYSIKLSAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcv
c3dpdGNoX2NhbWVyYSIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI4ZHAi
Ci0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0OGRwIgotICAgICAgICAgICBhbmRy
b2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiLz4KLQotICAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAg
ICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0b25fY2FsbF9zY2FsaW5nX21vZGUiCi0gICAgICAg
ICAgIGFuZHJvaWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9m
dWxsX3NjcmVlbiIKLSAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJp
bmcvZGlzY29ubmVjdF9jYWxsIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDhk
cCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIi8+Ci0KLSAgICAgICA8
SW1hZ2VCdXR0b24KLSAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0b25fY2FsbF90b2dn
bGVfbWljIgotICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmRyYXdhYmxl
L2ljX2J0bl9zcGVha19ub3ciCi0gICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9u
PSJAc3RyaW5nL3RvZ2dsZV9taWMiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbkVu
ZD0iOGRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0iNDhkcCIKLSAgICAgICAg
ICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIi8+Ci0gICAgPC9MaW5lYXJMYXlvdXQ+Ci0K
LSAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9jYXB0dXJlX2Zvcm1hdF90
ZXh0X2NhbGwiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0g
ICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRy
b2lkOmxheW91dF9jZW50ZXJIb3Jpem9udGFsPSJ0cnVlIgotICAgICAgICBhbmRyb2lkOmxheW91
dF9hYm92ZT0iQCtpZC9jYXB0dXJlX2Zvcm1hdF9zbGlkZXJfY2FsbCIKLSAgICAgICAgYW5kcm9p
ZDp0ZXh0U2l6ZT0iMTZzcCIKLSAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL2NhcHR1cmVf
Zm9ybWF0X2NoYW5nZV90ZXh0Ii8+Ci0KLSAgICA8U2Vla0JhcgotICAgICAgICBhbmRyb2lkOmlk
PSJAK2lkL2NhcHR1cmVfZm9ybWF0X3NsaWRlcl9jYWxsIgotICAgICAgICBhbmRyb2lkOmxheW91
dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Indy
YXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfY2VudGVySG9yaXpvbnRhbD0idHJ1
ZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25QYXJlbnRCb3R0b209InRydWUiCi0gICAg
ICAgIGFuZHJvaWQ6cHJvZ3Jlc3M9IjUwIgotICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49
IjhkcCIvPgotCi08L1JlbGF0aXZlTGF5b3V0PgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2ZyYWdt
ZW50X2h1ZC54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2ZyYWdtZW50X2h1ZC54
bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91dC9mcmFnbWVudF9odWQueG1s
CShub25leGlzdGVudCkKQEAgLTEsNzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0idXRmLTgiPz4KLQotPFJlbGF0aXZlTGF5b3V0Ci0gICAgeG1sbnM6YW5kcm9pZD0iaHR0
cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5
b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRj
aF9wYXJlbnQiPgotCi0gICAgPEltYWdlQnV0dG9uCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQv
YnV0dG9uX3RvZ2dsZV9kZWJ1ZyIKLSAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9p
ZDpkcmF3YWJsZS9pY19tZW51X2luZm9fZGV0YWlscyIKLSAgICAgICAgYW5kcm9pZDpjb250ZW50
RGVzY3JpcHRpb249IkBzdHJpbmcvdG9nZ2xlX2RlYnVnIgotICAgICAgICBhbmRyb2lkOmxheW91
dF9hbGlnblBhcmVudEJvdHRvbT0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25Q
YXJlbnRTdGFydD0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjQ4ZHAiCi0g
ICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIvPgotCi0gICAgPFRleHRWaWV3Ci0g
ICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvZW5jb2Rlcl9zdGF0X2NhbGwiCi0gICAgICAgIGFuZHJv
aWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hl
aWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudEVu
ZD0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDp0ZXh0U3R5bGU9ImJvbGQiCi0gICAgICAgIGFuZHJv
aWQ6dGV4dENvbG9yPSIjQzAwMEZGMDAiCi0gICAgICAgIGFuZHJvaWQ6dGV4dFNpemU9IjEyc3Ai
Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iOGRwIi8+Ci0KLSAgICA8VGFibGVMYXlv
dXQKLSAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9odWR2aWV3X2NvbnRhaW5lciIKLSAgICAg
ICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgYW5k
cm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgotCi0gICAgICAgICAgIDxUYWJsZVJv
dz4KLSAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9
IkAraWQvaHVkX3N0YXRfYndlIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0
aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9
IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC40IgotICAg
ICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjJkaXAiCi0gICAgICAgICAgICAgICAgIGFu
ZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6Y29sb3Ivd2hpdGUiCi0gICAgICAgICAgICAgICAg
IGFuZHJvaWQ6dGV4dENvbG9yPSJAYW5kcm9pZDpjb2xvci9ibGFjayIgLz4KLQotICAgICAgICAg
ICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9odWRfc3Rh
dF9jb25uZWN0aW9uIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0id3Jh
cF9jb250ZW50IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IndyYXBf
Y29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC40IgotICAgICAgICAg
ICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjJkaXAiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6
YmFja2dyb3VuZD0iQGFuZHJvaWQ6Y29sb3Ivd2hpdGUiCi0gICAgICAgICAgICAgICAgIGFuZHJv
aWQ6dGV4dENvbG9yPSJAYW5kcm9pZDpjb2xvci9ibGFjayIgLz4KLQotICAgICAgICAgICA8L1Rh
YmxlUm93PgotCi0gICAgICAgICAgIDxUYWJsZVJvdz4KLSAgICAgICAgICAgICAgPFRleHRWaWV3
Ci0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaHVkX3N0YXRfdmlkZW9fc2VuZCIK
LSAgICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAg
ICAgICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAg
ICAgICAgICAgICAgIGFuZHJvaWQ6YWxwaGE9IjAuNCIKLSAgICAgICAgICAgICAgICAgYW5kcm9p
ZDpwYWRkaW5nPSIyZGlwIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBh
bmRyb2lkOmNvbG9yL3doaXRlIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0i
QGFuZHJvaWQ6Y29sb3IvYmxhY2siIC8+Ci0KLSAgICAgICAgICAgICAgPFRleHRWaWV3Ci0gICAg
ICAgICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvaHVkX3N0YXRfdmlkZW9fcmVjdiIKLSAgICAg
ICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAg
ICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAg
ICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMmRpcCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDph
bHBoYT0iMC40IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lk
OmNvbG9yL3doaXRlIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOnRleHRDb2xvcj0iQGFuZHJv
aWQ6Y29sb3IvYmxhY2siIC8+Ci0gICAgICAgICAgICA8L1RhYmxlUm93PgotICAgIDwvVGFibGVM
YXlvdXQ+Ci0KLTwvUmVsYXRpdmVMYXlvdXQ+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9tZW51L2Nvbm5lY3Rf
bWVudS54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvbWVudS9jb25uZWN0X21lbnUueG1sCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9tZW51L2Nvbm5lY3RfbWVudS54bWwJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxMyArMCwwIEBACi08bWVudSB4bWxuczphbmRyb2lkPSJodHRwOi8vc2No
ZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiPgotICAgIDxpdGVtCi0gICAgICAgIGFu
ZHJvaWQ6aWQ9IkAraWQvYWN0aW9uX2xvb3BiYWNrIgotICAgICAgICBhbmRyb2lkOmljb249IkBk
cmF3YWJsZS9pY19sb29wYmFja19jYWxsIgotICAgICAgICBhbmRyb2lkOnNob3dBc0FjdGlvbj0i
YWx3YXlzIgotICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL2FjdGlvbl9sb29wYmFjayIv
PgotICAgIDxpdGVtCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWN0aW9uX3NldHRpbmdzIgot
ICAgICAgICBhbmRyb2lkOm9yZGVySW5DYXRlZ29yeT0iMTAwIgotICAgICAgICBhbmRyb2lkOmlj
b249IkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfcHJlZmVyZW5jZXMiCi0gICAgICAgIGFuZHJv
aWQ6c2hvd0FzQWN0aW9uPSJpZlJvb20iCi0gICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcv
YWN0aW9uX3NldHRpbmdzIi8+Ci08L21lbnU+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMvYXJyYXlz
LnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzL2FycmF5cy54bWwJKG5vbmV4aXN0ZW50KQpAQCAt
MSw1NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHJl
c291cmNlcz4KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InZpZGVvUmVzb2x1dGlvbnMiPgotICAg
ICAgICA8aXRlbT5EZWZhdWx0PC9pdGVtPgotICAgICAgICA8aXRlbT5IRCAoMTI4MCB4IDcyMCk8
L2l0ZW0+Ci0gICAgICAgIDxpdGVtPlZHQSAoNjQwIHggNDgwKTwvaXRlbT4KLSAgICAgICAgPGl0
ZW0+UVZHQSAoMzIwIHggMjQwKTwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxz
dHJpbmctYXJyYXkgbmFtZT0idmlkZW9SZXNvbHV0aW9uc1ZhbHVlcyI+Ci0gICAgICAgIDxpdGVt
PkRlZmF1bHQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPjEyODAgeCA3MjA8L2l0ZW0+Ci0gICAgICAg
IDxpdGVtPjY0MCB4IDQ4MDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+MzIwIHggMjQwPC9pdGVtPgot
ICAgIDwvc3RyaW5nLWFycmF5PgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJjYW1lcmFGcHMi
PgotICAgICAgICA8aXRlbT5EZWZhdWx0PC9pdGVtPgotICAgICAgICA8aXRlbT4zMCBmcHM8L2l0
ZW0+Ci0gICAgICAgIDxpdGVtPjE1IGZwczwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQot
ICAgIDxzdHJpbmctYXJyYXkgbmFtZT0ic3RhcnRCaXRyYXRlIj4KLSAgICAgICAgPGl0ZW0+RGVm
YXVsdDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+TWFudWFsPC9pdGVtPgotICAgIDwvc3RyaW5nLWFy
cmF5PgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJ2aWRlb0NvZGVjcyI+Ci0gICAgICAgIDxp
dGVtPlZQODwvaXRlbT4KLSAgICAgICAgPGl0ZW0+VlA5PC9pdGVtPgotICAgICAgICA8aXRlbT5I
MjY0PC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1l
PSJhdWRpb0NvZGVjcyI+Ci0gICAgICAgIDxpdGVtPk9QVVM8L2l0ZW0+Ci0gICAgICAgIDxpdGVt
PklTQUM8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5h
bWU9InNwZWFrZXJwaG9uZSI+Ci0gICAgICAgIDxpdGVtPkF1dG8gKHByb3hpbWl0eSBzZW5zb3Ip
PC9pdGVtPgotICAgICAgICA8aXRlbT5FbmFibGVkPC9pdGVtPgotICAgICAgICA8aXRlbT5EaXNh
YmxlZDwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFt
ZT0ic3BlYWtlcnBob25lVmFsdWVzIj4KLSAgICAgICAgPGl0ZW0+YXV0bzwvaXRlbT4KLSAgICAg
ICAgPGl0ZW0+dHJ1ZTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+ZmFsc2U8L2l0ZW0+Ci0gICAgPC9z
dHJpbmctYXJyYXk+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InJvb21MaXN0Q29udGV4dE1l
bnUiPgotICAgICAgICA8aXRlbT5SZW1vdmUgZmF2b3JpdGU8L2l0ZW0+Ci0gICAgPC9zdHJpbmct
YXJyYXk+Ci0KLTwvcmVzb3VyY2VzPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzL3N0cmluZ3MueG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCShub25leGlzdGVudCkKQEAgLTEs
MTcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08cmVz
b3VyY2VzPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiIHRyYW5zbGF0YWJsZT0iZmFsc2Ui
PkFwcFJUQzwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ic2V0dGluZ3NfbmFtZSIgdHJhbnNs
YXRhYmxlPSJmYWxzZSI+QXBwUlRDIFNldHRpbmdzPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1l
PSJkaXNjb25uZWN0X2NhbGwiPkRpc2Nvbm5lY3QgQ2FsbDwvc3RyaW5nPgotICAgIDxzdHJpbmcg
bmFtZT0icm9vbV9kZXNjcmlwdGlvbiI+Ci0gICAgICAgIFBsZWFzZSBlbnRlciBhIHJvb20gbmFt
ZS4gUm9vbSBuYW1lcyBhcmUgc2hhcmVkIHdpdGggZXZlcnlvbmUsIHNvIHRoaW5rCi0gICAgICAg
IG9mIHNvbWV0aGluZyB1bmlxdWUgYW5kIHNlbmQgaXQgdG8gYSBmcmllbmQuCi0gICAgPC9zdHJp
bmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmYXZvcml0ZXMiPkZhdm9yaXRlczwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0ibm9fZmF2b3JpdGVzIj5ObyBmYXZvcml0ZXM8L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9ImludmFsaWRfdXJsX3RpdGxlIj5JbnZhbGlkIFVSTDwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0iaW52YWxpZF91cmxfdGV4dCI+VGhlIFVSTCBvciByb29tIG5hbWUgeW91
IGVudGVyZWQgcmVzdWx0ZWQgaW4gYW4gaW52YWxpZCBVUkw6ICUxJHMKLSAgICA8L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9ImNoYW5uZWxfZXJyb3JfdGl0bGUiPkNvbm5lY3Rpb24gZXJyb3I8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNvbm5lY3RpbmdfdG8iPkNvbm5lY3RpbmcgdG86
ICUxJHM8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9Im1pc3NpbmdfdXJsIj5GQVRBTCBFUlJP
UjogTWlzc2luZyBVUkwgdG8gY29ubmVjdCB0by48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9
ImNhbWVyYTJfdGV4dHVyZV9vbmx5X2Vycm9yIj5DYW1lcmEyIG9ubHkgc3VwcG9ydHMgY2FwdHVy
aW5nIHRvIHRleHR1cmUuIEVpdGhlciBkaXNhYmxlIENhbWVyYTIgb3IgZW5hYmxlIGNhcHR1cmlu
ZyB0byB0ZXh0dXJlIGluIHRoZSBvcHRpb25zLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
b2siPk9LPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzd2l0Y2hfY2FtZXJhIj5Td2l0Y2gg
ZnJvbnQvYmFjayBjYW1lcmE8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImNhcHR1cmVfZm9y
bWF0X2NoYW5nZV90ZXh0Ij5TbGlkZSB0byBjaGFuZ2UgY2FwdHVyZSBmb3JtYXQ8L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9Im11dGVkIj5NdXRlZDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFt
ZT0idG9nZ2xlX2RlYnVnIj5Ub2dnbGUgZGVidWcgdmlldzwvc3RyaW5nPgotICAgIDxzdHJpbmcg
bmFtZT0idG9nZ2xlX21pYyI+VG9nZ2xlIG1pY3JvcGhvbmUgb24vb2ZmPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJhY3Rpb25fc2V0dGluZ3MiPlNldHRpbmdzPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJhY3Rpb25fbG9vcGJhY2siPkxvb3BiYWNrIGNvbm5lY3Rpb248L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9ImNvbm5lY3RfZGVzY3JpcHRpb24iPkNvbm5lY3QgdG8gdGhlIHJv
b208L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFkZF9mYXZvcml0ZV9kZXNjcmlwdGlvbiI+
QWRkIGZhdm9yaXRlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJmb3JtYXRfZGVzY3JpcHRp
b24iPiUxJGR4JTIkZCBAICUzJGQgZnBzPC9zdHJpbmc+Ci0KLSAgICA8IS0tIFNldHRpbmdzIHN0
cmluZ3MuIC0tPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9yb29tX2tleSI+cm9vbV9wcmVmZXJl
bmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Jvb21fbGlzdF9rZXkiPnJvb21f
bGlzdF9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmlkZW9z
ZXR0aW5nc19rZXkiPnZpZGVvX3NldHRpbmdzX2tleTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFt
ZT0icHJlZl92aWRlb3NldHRpbmdzX3RpdGxlIj5XZWJSVEMgdmlkZW8gc2V0dGluZ3MuPC9zdHJp
bmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmlkZW9jYWxsX2tleSI+dmlkZW9jYWxsX3By
ZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmlkZW9jYWxsX3RpdGxl
Ij5WaWRlbyBjYWxsLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2NhbGxf
ZGxnIj5FbmFibGUgdmlkZW8gaW4gYSBjYWxsLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl92aWRlb2NhbGxfZGVmYXVsdCI+dHJ1ZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX3NjcmVlbmNhcHR1cmVfa2V5Ij5zY3JlZW5jYXB0dXJlX3ByZWZlcmVuY2U8L3N0cmlu
Zz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc2NyZWVuY2FwdHVyZV90aXRsZSI+VXNlIHNjcmVl
bmNhcHR1cmUuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3NjcmVlbmNhcHR1cmVf
ZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYW1lcmEy
X2tleSI+Y2FtZXJhMl9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVm
X2NhbWVyYTJfdGl0bGUiPlVzZSBDYW1lcmEyLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl9jYW1lcmEyX2RlZmF1bHQiPnRydWU8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfY2FtZXJhMl9ub3Rfc3VwcG9ydGVkIj5Ob3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLjwv
c3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Jlc29sdXRpb25fa2V5Ij5yZXNvbHV0
aW9uX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcmVzb2x1dGlv
bl90aXRsZSI+VmlkZW8gcmVzb2x1dGlvbi48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfcmVzb2x1dGlvbl9kbGciPkVudGVyIEFwcFJUQyBsb2NhbCB2aWRlbyByZXNvbHV0aW9uLjwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9yZXNvbHV0aW9uX2RlZmF1bHQiPkRlZmF1
bHQ8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9mcHNfa2V5Ij5mcHNfcHJlZmVy
ZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9mcHNfdGl0bGUiPkNhbWVyYSBm
cHMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Zwc19kbGciPkVudGVyIGxvY2Fs
IGNhbWVyYSBmcHMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Zwc19kZWZhdWx0
Ij5EZWZhdWx0PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfY2FwdHVyZXF1YWxp
dHlzbGlkZXJfa2V5Ij5jYXB0dXJlcXVhbGl0eXNsaWRlcl9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0g
ICAgPHN0cmluZyBuYW1lPSJwcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX3RpdGxlIj5DYXB0dXJl
IHF1YWxpdHkgc2xpZGVyLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYXB0dXJl
cXVhbGl0eXNsaWRlcl9kbGciPkVuYWJsZSBzbGlkZXIgZm9yIGNoYW5naW5nIGNhcHR1cmUgcXVh
bGl0eS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfY2FwdHVyZXF1YWxpdHlzbGlk
ZXJfZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2
aWRlb2JpdHJhdGVfa2V5Ij5tYXh2aWRlb2JpdHJhdGVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJhdGVfdGl0bGUiPk1heGltdW0gdmlkZW8g
Yml0cmF0ZSBzZXR0aW5nLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRl
b2JpdHJhdGVfZGxnIj5NYXhpbXVtIHZpZGVvIGJpdHJhdGUgc2V0dGluZy48L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfbWF4dmlkZW9iaXRyYXRlX2RlZmF1bHQiPkRlZmF1bHQ8L3N0
cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9rZXki
Pm1heHZpZGVvYml0cmF0ZXZhbHVlX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfbWF4dmlkZW9iaXRyYXRldmFsdWVfdGl0bGUiPlZpZGVvIGVuY29kZXIgbWF4aW11
bSBiaXRyYXRlLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJh
dGV2YWx1ZV9kbGciPkVudGVyIHZpZGVvIGVuY29kZXIgbWF4aW11bSBiaXRyYXRlIGluIGticHMu
PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX2Rl
ZmF1bHQiPjE3MDA8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2NvZGVj
X2tleSI+dmlkZW9jb2RlY19wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX3ZpZGVvY29kZWNfdGl0bGUiPkRlZmF1bHQgdmlkZW8gY29kZWMuPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX3ZpZGVvY29kZWNfZGxnIj5TZWxlY3QgZGVmYXVsdCB2aWRlbyBj
b2RlYy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmlkZW9jb2RlY19kZWZhdWx0
Ij5WUDg8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9od2NvZGVjX2tleSI+aHdj
b2RlY19wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2h3Y29kZWNf
dGl0bGUiPlZpZGVvIGNvZGVjIGhhcmR3YXJlIGFjY2VsZXJhdGlvbi48L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfaHdjb2RlY19kbGciPlVzZSBoYXJkd2FyZSBhY2NlbGVyYXRlZCB2
aWRlbyBjb2RlYyAoaWYgYXZhaWxhYmxlKS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfaHdjb2RlY19kZWZhdWx0Ij50cnVlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXkiPmNhcHR1cmV0b3RleHR1cmVfcHJlZmVyZW5jZTwvc3Ry
aW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYXB0dXJldG90ZXh0dXJlX3RpdGxlIj5WaWRl
byBjYXB0dXJlIHRvIHN1cmZhY2UgdGV4dHVyZS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9
InByZWZfY2FwdHVyZXRvdGV4dHVyZV9kbGciPkNhcHR1cmUgdmlkZW8gdG8gdGV4dHVyZXMgKGlm
IGF2YWlsYWJsZSkuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2NhcHR1cmV0b3Rl
eHR1cmVfZGVmYXVsdCI+dHJ1ZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Zh
bHVlX2VuYWJsZWQiPkVuYWJsZWQ8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmFs
dWVfZGlzYWJsZWQiPkRpc2FibGVkPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZf
YXVkaW9zZXR0aW5nc19rZXkiPmF1ZGlvX3NldHRpbmdzX2tleTwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9hdWRpb3NldHRpbmdzX3RpdGxlIj5XZWJSVEMgYXVkaW8gc2V0dGluZ3Mu
PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGVfa2V5
Ij5zdGFydGF1ZGlvYml0cmF0ZV9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX3RpdGxlIj5BdWRpbyBiaXRyYXRlIHNldHRpbmcuPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2RsZyI+QXVk
aW8gYml0cmF0ZSBzZXR0aW5nLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zdGFy
dGF1ZGlvYml0cmF0ZV9kZWZhdWx0Ij5EZWZhdWx0PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9rZXkiPnN0YXJ0YXVkaW9iaXRyYXRldmFs
dWVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlv
Yml0cmF0ZXZhbHVlX3RpdGxlIj5BdWRpbyBjb2RlYyBiaXRyYXRlLjwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2RsZyI+RW50ZXIgYXVkaW8g
Y29kZWMgYml0cmF0ZSBpbiBrYnBzLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9z
dGFydGF1ZGlvYml0cmF0ZXZhbHVlX2RlZmF1bHQiPjMyPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5n
IG5hbWU9InByZWZfYXVkaW9jb2RlY19rZXkiPmF1ZGlvY29kZWNfcHJlZmVyZW5jZTwvc3RyaW5n
PgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hdWRpb2NvZGVjX3RpdGxlIj5EZWZhdWx0IGF1ZGlv
IGNvZGVjLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hdWRpb2NvZGVjX2RsZyI+
U2VsZWN0IGRlZmF1bHQgYXVkaW8gY29kZWMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2F1ZGlvY29kZWNfZGVmYXVsdCI+T1BVUzwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX25vYXVkaW9wcm9jZXNzaW5nX2tleSI+YXVkaW9wcm9jZXNzaW5nX3ByZWZlcmVuY2U8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbm9hdWRpb3Byb2Nlc3NpbmdfdGl0bGUi
PkRpc2FibGUgYXVkaW8gcHJvY2Vzc2luZy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfbm9hdWRpb3Byb2Nlc3NpbmdfZGxnIj5EaXNhYmxlIGF1ZGlvIHByb2Nlc3NpbmcgcGlwZWxp
bmUuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX25vYXVkaW9wcm9jZXNzaW5nX2Rl
ZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYWVjZHVtcF9r
ZXkiPmFlY2R1bXBfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9h
ZWNkdW1wX3RpdGxlIj5DcmVhdGUgYWVjZHVtcC48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9
InByZWZfYWVjZHVtcF9kbGciPkVuYWJsZSBkaWFnbm9zdGljIGF1ZGlvIHJlY29yZGluZ3MuPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2FlY2R1bXBfZGVmYXVsdCI+ZmFsc2U8L3N0
cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9vcGVuc2xlc19rZXkiPm9wZW5zbGVzX3By
ZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfb3BlbnNsZXNfdGl0bGUi
PlVzZSBPcGVuU0wgRVMgZm9yIGF1ZGlvIHBsYXliYWNrLjwvc3RyaW5nPgotICAgIDxzdHJpbmcg
bmFtZT0icHJlZl9vcGVuc2xlc19kbGciPlVzZSBPcGVuU0wgRVMgZm9yIGF1ZGlvIHBsYXliYWNr
Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9vcGVuc2xlc19kZWZhdWx0Ij5mYWxz
ZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVj
X2tleSI+ZGlzYWJsZV9idWlsdF9pbl9hZWNfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX2FlY190aXRsZSI+RGlzYWJsZSBoYXJkd2Fy
ZSBBRUMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5f
YWVjX2RsZyI+RGlzYWJsZSBoYXJkd2FyZSBBRUMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2RlZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX2J1aWx0X2luX2FlY19ub3RfYXZhaWxhYmxlIj5IYXJkd2FyZSBB
RUMgaXMgbm90IGF2YWlsYWJsZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rp
c2FibGVfYnVpbHRfaW5fYWdjX2tleSI+ZGlzYWJsZV9idWlsdF9pbl9hZ2NfcHJlZmVyZW5jZTwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY190aXRs
ZSI+RGlzYWJsZSBoYXJkd2FyZSBBR0MuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVm
X2Rpc2FibGVfYnVpbHRfaW5fYWdjX2RsZyI+RGlzYWJsZSBoYXJkd2FyZSBBR0MuPC9zdHJpbmc+
Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2RlZmF1bHQiPmZh
bHNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2J1aWx0X2luX2FnY19ub3RfYXZh
aWxhYmxlIj5IYXJkd2FyZSBBR0MgaXMgbm90IGF2YWlsYWJsZTwvc3RyaW5nPgotCi0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfa2V5Ij5kaXNhYmxlX2J1aWx0X2lu
X25zX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9i
dWlsdF9pbl9uc190aXRsZSI+RGlzYWJsZSBoYXJkd2FyZSBOUy48L3N0cmluZz4KLSAgICA8c3Ry
aW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19kbGciPkRpc2FibGUgaGFyZHdhcmUg
TlMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNf
ZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYnVpbHRfaW5f
bnNfbm90X2F2YWlsYWJsZSI+SGFyZHdhcmUgTlMgaXMgbm90IGF2YWlsYWJsZTwvc3RyaW5nPgot
Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2tleSI+ZW5hYmxl
X2xldmVsX2NvbnRyb2xfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9lbmFibGVfbGV2ZWxfY29udHJvbF90aXRsZSI+RW5hYmxlIGxldmVsIGNvbnRyb2wuPC9zdHJp
bmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2RlZmF1bHQi
PmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3BlYWtlcnBob25lX2tl
eSI+c3BlYWtlcnBob25lX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfc3BlYWtlcnBob25lX3RpdGxlIj5TcGVha2VycGhvbmUuPC9zdHJpbmc+Ci0gICAgPHN0cmlu
ZyBuYW1lPSJwcmVmX3NwZWFrZXJwaG9uZV9kbGciPlNwZWFrZXJwaG9uZS48L3N0cmluZz4KLSAg
ICA8c3RyaW5nIG5hbWU9InByZWZfc3BlYWtlcnBob25lX2RlZmF1bHQiPmF1dG88L3N0cmluZz4K
LQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9taXNjc2V0dGluZ3Nfa2V5Ij5taXNjX3NldHRpbmdz
X2tleTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9taXNjc2V0dGluZ3NfdGl0bGUi
Pk1pc2NlbGxhbmVvdXMgc2V0dGluZ3MuPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfcm9vbV9zZXJ2ZXJfdXJsX2tleSI+cm9vbV9zZXJ2ZXJfdXJsX3ByZWZlcmVuY2U8L3N0cmlu
Zz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcm9vbV9zZXJ2ZXJfdXJsX3RpdGxlIj5Sb29tIHNl
cnZlciBVUkwuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Jvb21fc2VydmVyX3Vy
bF9kbGciPkVudGVyIGEgcm9vbSBzZXJ2ZXIgVVJMLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFt
ZT0icHJlZl9yb29tX3NlcnZlcl91cmxfZGVmYXVsdCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+aHR0
cHM6Ly9hcHByLnRjPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzcGxheWh1
ZF9rZXkiPmRpc3BsYXlodWRfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl9kaXNwbGF5aHVkX3RpdGxlIj5EaXNwbGF5IGNhbGwgc3RhdGlzdGljcy48L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzcGxheWh1ZF9kbGciPkRpc3BsYXkgY2FsbCBzdGF0
aXN0aWNzLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNwbGF5aHVkX2RlZmF1
bHQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfdHJhY2luZ19rZXkiPnRyYWNpbmdfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0icHJlZl90cmFjaW5nX3RpdGxlIj5EZWJ1ZyBwZXJmb3JtYW5jZSB0cmFjaW5n
Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl90cmFjaW5nX2RsZyI+RGVidWcgcGVy
Zm9ybWFuY2UgdHJhY2luZy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdHJhY2lu
Z19kZWZhdWx0IiB0cmFuc2xhdGFibGU9ImZhbHNlIj5mYWxzZTwvc3RyaW5nPgotPC9yZXNvdXJj
ZXM+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMtdjE3L3N0eWxlcy54bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvdmFsdWVzLXYxNy9zdHlsZXMueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy92YWx1ZXMtdjE3L3N0eWxlcy54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw4ICswLDAgQEAK
LTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08cmVzb3VyY2VzPgotICA8
c3R5bGUgbmFtZT0iQ2FsbEFjdGl2aXR5VGhlbWUiIHBhcmVudD0iYW5kcm9pZDpUaGVtZS5CbGFj
ayI+Ci0gICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBY3Rpb25CYXIiPmZhbHNlPC9pdGVt
PgotICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93RnVsbHNjcmVlbiI+dHJ1ZTwvaXRlbT4K
LSAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd05vVGl0bGUiPnRydWU8L2l0ZW0+Ci0gIDwv
c3R5bGU+Ci08L3Jlc291cmNlcz4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy12MjEvc3R5bGVzLnht
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMtdjIxL3N0eWxlcy54bWwJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy12MjEvc3R5bGVzLnhtbAkobm9uZXhpc3RlbnQp
CkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4K
LTxyZXNvdXJjZXM+Ci0gIDxzdHlsZSBuYW1lPSJBcHBSVENNb2JpbGVBY3Rpdml0eVRoZW1lIiBw
YXJlbnQ9ImFuZHJvaWQ6VGhlbWUuTWF0ZXJpYWwiPgotICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6
d2luZG93QWN0aW9uQmFyIj5mYWxzZTwvaXRlbT4KLSAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndp
bmRvd0Z1bGxzY3JlZW4iPnRydWU8L2l0ZW0+Ci0gICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5k
b3dOb1RpdGxlIj50cnVlPC9pdGVtPgotICA8L3N0eWxlPgotPC9yZXNvdXJjZXM+CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy94bWwvcHJlZmVyZW5jZXMueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3htbC9w
cmVmZXJlbmNlcy54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3htbC9wcmVmZXJl
bmNlcy54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSwxODIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcmVmZXJlbmNlU2NyZWVuIHhtbG5zOmFuZHJvaWQ9
Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+Ci0gICAgPFByZWZl
cmVuY2VDYXRlZ29yeQotICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3ZpZGVvc2V0
dGluZ3Nfa2V5IgotICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfdmlkZW9zZXR0
aW5nc190aXRsZSI+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAg
YW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl92aWRlb2NhbGxfa2V5IgotICAgICAgICAgICAgYW5k
cm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3ZpZGVvY2FsbF90aXRsZSIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl92aWRlb2NhbGxfZGxnIgotICAgICAgICAg
ICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl92aWRlb2NhbGxfZGVmYXVsdCIg
Lz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtl
eT0iQHN0cmluZy9wcmVmX3NjcmVlbmNhcHR1cmVfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0
aXRsZT0iQHN0cmluZy9wcmVmX3NjcmVlbmNhcHR1cmVfdGl0bGUiCi0gICAgICAgICAgICBhbmRy
b2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX3NjcmVlbmNhcHR1cmVfZGVmYXVsdCIgLz4K
LQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0i
QHN0cmluZy9wcmVmX2NhbWVyYTJfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0
cmluZy9wcmVmX2NhbWVyYTJfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1
ZT0iQHN0cmluZy9wcmVmX2NhbWVyYTJfZGVmYXVsdCIgLz4KLQotICAgICAgICA8TGlzdFByZWZl
cmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfcmVzb2x1dGlvbl9r
ZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfcmVzb2x1dGlvbl90
aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfcmVz
b2x1dGlvbl9kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmlu
Zy9wcmVmX3Jlc29sdXRpb25fZGxnIgotICAgICAgICAgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJy
YXkvdmlkZW9SZXNvbHV0aW9ucyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBh
cnJheS92aWRlb1Jlc29sdXRpb25zVmFsdWVzIiAvPgotCi0gICAgICAgIDxMaXN0UHJlZmVyZW5j
ZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9mcHNfa2V5IgotICAgICAg
ICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2Zwc190aXRsZSIKLSAgICAgICAgICAg
IGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfZnBzX2RlZmF1bHQiCi0gICAgICAg
ICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfZnBzX2RsZyIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L2NhbWVyYUZwcyIKLSAgICAgICAgICAgIGFuZHJv
aWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9jYW1lcmFGcHMiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94
UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9jYXB0dXJl
cXVhbGl0eXNsaWRlcl9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3By
ZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxv
Z1RpdGxlPSJAc3RyaW5nL3ByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfZGxnIgotICAgICAgICAg
ICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRl
cl9kZWZhdWx0IiAvPgotCi0gICAgICAgIDxMaXN0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5k
cm9pZDprZXk9IkBzdHJpbmcvcHJlZl9tYXh2aWRlb2JpdHJhdGVfa2V5IgotICAgICAgICAgICAg
YW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX21heHZpZGVvYml0cmF0ZV90aXRsZSIKLSAgICAg
ICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRl
X2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZf
bWF4dmlkZW9iaXRyYXRlX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5
L3N0YXJ0Qml0cmF0ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJheS9z
dGFydEJpdHJhdGUiIC8+Ci0KLSAgICAgICAgPEVkaXRUZXh0UHJlZmVyZW5jZQotICAgICAgICAg
ICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9rZXkiCi0g
ICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRldmFs
dWVfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmlucHV0VHlwZT0ibnVtYmVyIgotICAgICAg
ICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9tYXh2aWRlb2JpdHJhdGV2
YWx1ZV9kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9w
cmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX2RsZyIgLz4KLQotICAgICAgICA8TGlzdFByZWZlcmVu
Y2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfdmlkZW9jb2RlY19rZXki
Ci0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfdmlkZW9jb2RlY190aXRs
ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfdmlkZW9j
b2RlY19kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9w
cmVmX3ZpZGVvY29kZWNfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkv
dmlkZW9Db2RlY3MiCi0gICAgICAgICAgICBhbmRyb2lkOmVudHJ5VmFsdWVzPSJAYXJyYXkvdmlk
ZW9Db2RlY3MiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAg
YW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9od2NvZGVjX2tleSIKLSAgICAgICAgICAgIGFuZHJv
aWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9od2NvZGVjX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9p
ZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2h3Y29kZWNfZGxnIgotICAgICAgICAgICAgYW5k
cm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9od2NvZGVjX2RlZmF1bHQiIC8+Ci0KLSAg
ICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJp
bmcvcHJlZl9jYXB0dXJldG90ZXh0dXJlX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9
IkBzdHJpbmcvcHJlZl9jYXB0dXJldG90ZXh0dXJlX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9p
ZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2NhcHR1cmV0b3RleHR1cmVfZGxnIgotICAgICAg
ICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9jYXB0dXJldG90ZXh0dXJl
X2RlZmF1bHQiIC8+Ci0gICAgPC9QcmVmZXJlbmNlQ2F0ZWdvcnk+Ci0KLSAgICA8UHJlZmVyZW5j
ZUNhdGVnb3J5Ci0gICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfYXVkaW9zZXR0aW5n
c19rZXkiCi0gICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9hdWRpb3NldHRpbmdz
X3RpdGxlIj4KLQotICAgICAgICA8TGlzdFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6
a2V5PSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRpb2JpdHJhdGVfa2V5IgotICAgICAgICAgICAgYW5k
cm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX3RpdGxlIgotICAgICAg
ICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0
ZV9kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVm
X3N0YXJ0YXVkaW9iaXRyYXRlX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFy
cmF5L3N0YXJ0Qml0cmF0ZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9IkBhcnJh
eS9zdGFydEJpdHJhdGUiIC8+Ci0KLSAgICAgICAgPEVkaXRUZXh0UHJlZmVyZW5jZQotICAgICAg
ICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2tl
eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0
cmF0ZXZhbHVlX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDppbnB1dFR5cGU9Im51bWJlciIK
LSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRp
b2JpdHJhdGV2YWx1ZV9kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0i
QHN0cmluZy9wcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfZGxnIiAvPgotCi0gICAgICAgIDxM
aXN0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9hdWRp
b2NvZGVjX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9hdWRp
b2NvZGVjX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcv
cHJlZl9hdWRpb2NvZGVjX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxl
PSJAc3RyaW5nL3ByZWZfYXVkaW9jb2RlY19kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmVudHJp
ZXM9IkBhcnJheS9hdWRpb0NvZGVjcyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZW50cnlWYWx1ZXM9
IkBhcnJheS9hdWRpb0NvZGVjcyIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0g
ICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX25vYXVkaW9wcm9jZXNzaW5nX2tl
eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9ub2F1ZGlvcHJvY2Vz
c2luZ190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJl
Zl9ub2F1ZGlvcHJvY2Vzc2luZ19kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1
ZT0iQHN0cmluZy9wcmVmX25vYXVkaW9wcm9jZXNzaW5nX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAg
PENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJl
Zl9hZWNkdW1wX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9h
ZWNkdW1wX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9w
cmVmX2FlY2R1bXBfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJp
bmcvcHJlZl9hZWNkdW1wX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5j
ZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9vcGVuc2xlc19rZXkiCi0g
ICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfb3BlbnNsZXNfdGl0bGUiCi0g
ICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfb3BlbnNsZXNfZGxn
IgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9vcGVuc2xl
c19kZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAg
IGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfa2V5IgotICAg
ICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVj
X3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2Rp
c2FibGVfYnVpbHRfaW5fYWVjX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVl
PSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfZGVmYXVsdCIgLz4KLQotICAgICAg
ICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9w
cmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9
IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY190aXRsZSIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19kbGci
Ci0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVf
YnVpbHRfaW5fYWdjX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQot
ICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX25z
X2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1
aWx0X2luX25zX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmlu
Zy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZh
dWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2RlZmF1bHQiIC8+Ci0K
LSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBz
dHJpbmcvcHJlZl9lbmFibGVfbGV2ZWxfY29udHJvbF9rZXkiCi0gICAgICAgICAgICBhbmRyb2lk
OnRpdGxlPSJAc3RyaW5nL3ByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfdGl0bGUiCi0gICAgICAg
ICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2VuYWJsZV9sZXZlbF9jb250
cm9sX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPExpc3RQcmVmZXJlbmNlCi0gICAgICAgICAgICBh
bmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3NwZWFrZXJwaG9uZV9rZXkiCi0gICAgICAgICAgICBh
bmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfc3BlYWtlcnBob25lX3RpdGxlIgotICAgICAgICAg
ICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9zcGVha2VycGhvbmVfZGVmYXVs
dCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9zcGVha2Vy
cGhvbmVfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvc3BlYWtlcnBo
b25lIgotICAgICAgICAgICAgYW5kcm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L3NwZWFrZXJwaG9u
ZVZhbHVlcyIgLz4KLSAgICA8L1ByZWZlcmVuY2VDYXRlZ29yeT4KLQotICAgIDxQcmVmZXJlbmNl
Q2F0ZWdvcnkKLSAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9taXNjc2V0dGluZ3Nf
a2V5IgotICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfbWlzY3NldHRpbmdzX3Rp
dGxlIj4KLQotICAgICAgICA8RWRpdFRleHRQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lk
OmtleT0iQHN0cmluZy9wcmVmX3Jvb21fc2VydmVyX3VybF9rZXkiCi0gICAgICAgICAgICBhbmRy
b2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfcm9vbV9zZXJ2ZXJfdXJsX3RpdGxlIgotICAgICAgICAg
ICAgYW5kcm9pZDppbnB1dFR5cGU9InRleHQiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRW
YWx1ZT0iQHN0cmluZy9wcmVmX3Jvb21fc2VydmVyX3VybF9kZWZhdWx0IgotICAgICAgICAgICAg
YW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX3Jvb21fc2VydmVyX3VybF9kbGciIC8+
Ci0KLSAgICAgICAgPENoZWNrQm94UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9
IkBzdHJpbmcvcHJlZl9kaXNwbGF5aHVkX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9
IkBzdHJpbmcvcHJlZl9kaXNwbGF5aHVkX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFs
b2dUaXRsZT0iQHN0cmluZy9wcmVmX2Rpc3BsYXlodWRfZGxnIgotICAgICAgICAgICBhbmRyb2lk
OmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2Rpc3BsYXlodWRfZGVmYXVsdCIgLz4KLQotICAg
ICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmlu
Zy9wcmVmX3RyYWNpbmdfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9w
cmVmX3RyYWNpbmdfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3Ry
aW5nL3ByZWZfdHJhY2luZ19kbGciCi0gICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJA
c3RyaW5nL3ByZWZfdHJhY2luZ19kZWZhdWx0IiAvPgotICAgIDwvUHJlZmVyZW5jZUNhdGVnb3J5
PgotCi08L1ByZWZlcmVuY2VTY3JlZW4+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2Rp
c2Nvbm5lY3QucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEg
YmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvZGlzY29ubmVjdC5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9kaXNjb25uZWN0LnBuZwkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9kaXNjb25uZWN0LnBuZwkobm9uZXhpc3RlbnQpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2Rpc2Nvbm5lY3QucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LWhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwkobm9u
ZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2lj
X2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBl
CiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2FjdGlvbl9y
ZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmls
ZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fcmV0dXJu
X2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhk
cGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9z
Y3JlZW4ucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2Ry
YXdhYmxlLWhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6
IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIu
cG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbGF1bmNoZXIucG5n
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xhdW5jaGVy
LnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJs
ZS1oZHBpL2ljX2xhdW5jaGVyLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUK
IyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkvaWNfbG9vcGJhY2tf
Y2FsbC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUtaGRwaS9pY19sb29wYmFja19jYWxsLnBuZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1oZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCShu
b25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWhkcGkv
aWNfbG9vcGJhY2tfY2FsbC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMj
IC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2Rpc2Nvbm5lY3QucG5n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUu
CnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2RyYXdhYmxlLWxkcGkvZGlzY29ubmVjdC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtbGRwaS9kaXNjb25uZWN0LnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
ZHJhd2FibGUtbGRwaS9kaXNjb25uZWN0LnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2Rpc2Nvbm5lY3QucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
RGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtbGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0
aW9uX2Z1bGxfc2NyZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBp
L2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVz
L2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQpCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlvbl9mdWxs
X3NjcmVlbi5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAg
IyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9m
dWxsX3NjcmVlbi5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMg
YSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9z
Y3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfYWN0aW9u
X3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9y
ZXMvZHJhd2FibGUtbGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCShu
b25leGlzdGVudCkKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkv
aWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6
IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxk
cGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhp
c3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xh
dW5jaGVyLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAj
IwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVy
dHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3Zu
Om1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUtbGRwaS9pY19sb29wYmFja19jYWxsLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9k
cmF3YWJsZS1sZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1sZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCShub25leGlzdGVudCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLWxkcGkvaWNfbG9vcGJhY2tf
Y2FsbC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMK
LWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2Rpc2Nvbm5lY3QucG5nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Q2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5
cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1k
cGkvZGlzY29ubmVjdC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9k
aXNjb25uZWN0LnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRw
aS9kaXNjb25uZWN0LnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9kcmF3YWJsZS1tZHBpL2Rpc2Nvbm5lY3QucG5nCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3Zu
Om1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9p
Y19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUg
bWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3Rl
dC1zdHJlYW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX2Z1bGxfc2Ny
ZWVuLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9m
dWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1k
cGkvaWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5wbmcK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlw
ZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9y
ZXMvZHJhd2FibGUtbWRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX3JldHVybl9mcm9t
X2Z1bGxfc2NyZWVuLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUt
bWRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCShub25leGlzdGVudCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfYWN0aW9uX3Jl
dHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5
cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNo
ZXIucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5
IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
cmVzL2RyYXdhYmxlLW1kcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBpL2ljX2xhdW5jaGVyLnBuZwpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5u
b3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUtbWRwaS9p
Y19sb29wYmFja19jYWxsLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS1tZHBp
L2ljX2xvb3BiYWNrX2NhbGwucG5nCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3
YWJsZS1tZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCShub25leGlzdGVudCkKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLW1kcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3Jlcy9kcmF3YWJsZS14aGRwaS9kaXNjb25uZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9kaXNjb25u
ZWN0LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9kaXNjb25uZWN0
LnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvZGlzY29u
bmVjdC5wbmcJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUteGhkcGkvZGlzY29ubmVjdC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10
eXBlCiMjIC0xICswLDAgIyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rp
b25fZnVsbF9zY3JlZW4ucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9mdWxsX3NjcmVlbi5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX2Z1bGxf
c2NyZWVuLnBuZwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkv
aWNfYWN0aW9uX2Z1bGxfc2NyZWVuLnBuZwkobm9uZXhpc3RlbnQpCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fZnVsbF9zY3JlZW4ucG5nCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBu
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy9kcmF3YWJsZS14aGRwaS9pY19hY3Rpb25fcmV0dXJuX2Zyb21fZnVsbF9zY3JlZW4ucG5nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJv
bV9mdWxsX3NjcmVlbi5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxl
LXhoZHBpL2ljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbi5wbmcJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfYWN0aW9u
X3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1l
LXR5cGUKIyMgLTEgKzAsMCAjIwotYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xh
dW5jaGVyLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJp
bmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNoZXIucG5nCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3Jlcy9kcmF3YWJsZS14aGRwaS9pY19sYXVuY2hlci5wbmcJKG5vbmV4aXN0ZW50
KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbGF1bmNo
ZXIucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1h
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9yZXMvZHJhd2FibGUteGhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1p
bWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJhd2Fi
bGUteGhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvZHJh
d2FibGUteGhkcGkvaWNfbG9vcGJhY2tfY2FsbC5wbmcJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvb3BiYWNrX2NhbGwucG5nCShub25leGlzdGVudCkK
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2RyYXdhYmxlLXhoZHBpL2ljX2xvb3BiYWNr
X2NhbGwucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMj
Ci1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0
eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2FjdGl2aXR5X2NhbGwueG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL2xheW91dC9hY3Rpdml0eV9jYWxsLnhtbAkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9yZXMvbGF5b3V0L2FjdGl2aXR5X2NhbGwueG1sCShub25leGlzdGVudCkKQEAgLTEsMzcg
KzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLQotPFJlbGF0
aXZlTGF5b3V0Ci0gICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20v
YXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQi
Ci0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgotCi0gICAgPG9yZy5h
cHBzcG90LmFwcHJ0Yy5QZXJjZW50RnJhbWVMYXlvdXQKLSAgICAgICAgYW5kcm9pZDppZD0iQCtp
ZC9yZW1vdGVfdmlkZW9fbGF5b3V0IgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0
Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+
Ci0gICAgICAgIDxvcmcud2VicnRjLlN1cmZhY2VWaWV3UmVuZGVyZXIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6aWQ9IkAraWQvcmVtb3RlX3ZpZGVvX3ZpZXciCi0gICAgICAgICAgICBhbmRyb2lkOmxh
eW91dF93aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVp
Z2h0PSJ3cmFwX2NvbnRlbnQiIC8+Ci0gICAgPC9vcmcuYXBwc3BvdC5hcHBydGMuUGVyY2VudEZy
YW1lTGF5b3V0PgotCi0gICAgPG9yZy5hcHBzcG90LmFwcHJ0Yy5QZXJjZW50RnJhbWVMYXlvdXQK
LSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9sb2NhbF92aWRlb19sYXlvdXQiCi0gICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0
X2hlaWdodD0ibWF0Y2hfcGFyZW50Ij4KLSAgICAgICAgPG9yZy53ZWJydGMuU3VyZmFjZVZpZXdS
ZW5kZXJlcgotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9sb2NhbF92aWRlb192aWV3Igot
ICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IiAvPgotICAgIDwvb3JnLmFw
cHNwb3QuYXBwcnRjLlBlcmNlbnRGcmFtZUxheW91dD4KLQotICAgIDxGcmFtZUxheW91dAotICAg
ICAgICBhbmRyb2lkOmlkPSJAK2lkL2NhbGxfZnJhZ21lbnRfY29udGFpbmVyIgotICAgICAgICBh
bmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91
dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCIgLz4KLSAgICA8RnJhbWVMYXlvdXQKLSAgICAgICAgYW5k
cm9pZDppZD0iQCtpZC9odWRfZnJhZ21lbnRfY29udGFpbmVyIgotICAgICAgICBhbmRyb2lkOmxh
eW91dF93aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9
Im1hdGNoX3BhcmVudCIgLz4KLQotPC9SZWxhdGl2ZUxheW91dD4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xh
eW91dC9hY3Rpdml0eV9jb25uZWN0LnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9sYXlvdXQv
YWN0aXZpdHlfY29ubmVjdC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL2xheW91
dC9hY3Rpdml0eV9jb25uZWN0LnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDc3ICswLDAgQEAKLTw/
eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08TGluZWFyTGF5b3V0Ci0gICAg
eG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lk
IgotICAgIGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iMTZkcCIKLSAgICBhbmRyb2lkOmxheW91dF93
aWR0aD0ibWF0Y2hfcGFyZW50IgotICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFy
ZW50IgotICAgIGFuZHJvaWQ6b3JpZW50YXRpb249InZlcnRpY2FsIgotICAgIGFuZHJvaWQ6d2Vp
Z2h0U3VtPSIxIgotICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlckhvcml6b250YWw9InRydWUiPgot
Ci0gICAgPFRleHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvcm9vbV9lZGl0dGV4dF9k
ZXNjcmlwdGlvbiIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIK
LSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFu
ZHJvaWQ6dGV4dD0iQHN0cmluZy9yb29tX2Rlc2NyaXB0aW9uIi8+Ci0KLSAgICA8TGluZWFyTGF5
b3V0Ci0gICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0
X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNlbnRlciIK
LSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luQm90dG9tPSI4ZHAiPgotCi0gICAgICAgIDxF
ZGl0VGV4dAotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yb29tX2VkaXR0ZXh0IgotICAg
ICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IjBkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6
bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRf
d2VpZ2h0PSIxIgotICAgICAgICAgICAgYW5kcm9pZDpzaW5nbGVMaW5lPSJ0cnVlIgotICAgICAg
ICAgICAgYW5kcm9pZDppbWVPcHRpb25zPSJhY3Rpb25Eb25lIgotICAgICAgICAgICAgYW5kcm9p
ZDppbnB1dFR5cGU9InRleHQiLz4KLQotICAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAgICAgICAg
IGFuZHJvaWQ6aWQ9IkAraWQvY29ubmVjdF9idXR0b24iCi0gICAgICAgICAgICBhbmRyb2lkOmxh
eW91dF93aWR0aD0iNDhkcCIKLSAgICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhk
cCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL2Nvbm5l
Y3RfZGVzY3JpcHRpb24iCi0gICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBhbmRyb2lk
OmRyYXdhYmxlL3N5bV9hY3Rpb25fY2FsbCIgLz4KLQotICAgICAgICA8SW1hZ2VCdXR0b24KLSAg
ICAgICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvYWRkX2Zhdm9yaXRlX2J1dHRvbiIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSI0OGRwIgotICAgICAgICAgICAgYW5kcm9pZDpsYXlv
dXRfaGVpZ2h0PSI0OGRwIgotICAgICAgICAgICAgYW5kcm9pZDpjb250ZW50RGVzY3JpcHRpb249
IkBzdHJpbmcvYWRkX2Zhdm9yaXRlX2Rlc2NyaXB0aW9uIgotICAgICAgICAgICAgYW5kcm9pZDpi
YWNrZ3JvdW5kPSJAYW5kcm9pZDpkcmF3YWJsZS9pY19pbnB1dF9hZGQiIC8+Ci0gICAgPC9MaW5l
YXJMYXlvdXQ+Ci0KLSAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yb29t
X2xpc3R2aWV3X2Rlc2NyaXB0aW9uIgotICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0
Y2hfcGFyZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiCi0gICAgICAg
IGFuZHJvaWQ6bGF5b3V0X21hcmdpblRvcD0iOGRwIgotICAgICAgICBhbmRyb2lkOmxpbmVzPSIx
IgotICAgICAgICBhbmRyb2lkOm1heExpbmVzPSIxIgotICAgICAgICBhbmRyb2lkOnRleHRBcHBl
YXJhbmNlPSI/YW5kcm9pZDphdHRyL3RleHRBcHBlYXJhbmNlTWVkaXVtIgotICAgICAgICBhbmRy
b2lkOnRleHQ9IkBzdHJpbmcvZmF2b3JpdGVzIgotICAgICAgICBhbmRyb2lkOmdyYXZpdHk9ImNl
bnRlcl92ZXJ0aWNhbCIvPgotCi0gICAgPEZyYW1lTGF5b3V0Ci0gICAgICAgIGFuZHJvaWQ6bGF5
b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0i
MGRwIgotICAgICAgICBhbmRyb2lkOmxheW91dF93ZWlnaHQ9IjEiPgotCi0gICAgICAgIDxMaXN0
VmlldwotICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9yb29tX2xpc3R2aWV3IgotICAgICAg
ICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X2hlaWdodD0ibWF0Y2hfcGFyZW50IgotICAgICAgICAgICAgYW5kcm9pZDpk
cmF3U2VsZWN0b3JPblRvcD0iZmFsc2UiIC8+Ci0KLSAgICAgICAgPFRleHRWaWV3Ci0gICAgICAg
ICAgICBhbmRyb2lkOmlkPSJAYW5kcm9pZDppZC9lbXB0eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6
bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgICAgICBhbmRyb2lkOmxheW91dF9o
ZWlnaHQ9Im1hdGNoX3BhcmVudCIKLSAgICAgICAgICAgIGFuZHJvaWQ6Z3Jhdml0eT0iY2VudGVy
IgotICAgICAgICAgICAgYW5kcm9pZDp0ZXh0PSJAc3RyaW5nL25vX2Zhdm9yaXRlcyIgLz4KLSAg
ICA8L0ZyYW1lTGF5b3V0PgotPC9MaW5lYXJMYXlvdXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9yZXMvbGF5b3V0L2ZyYWdtZW50X2NhbGwueG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvcmVzL2xheW91dC9mcmFnbWVudF9jYWxsLnhtbAkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvbGF5b3V0L2ZyYWdtZW50X2NhbGwueG1sCShub25leGlzdGVudCkKQEAgLTEs
NzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLQotPFJl
bGF0aXZlTGF5b3V0Ci0gICAgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5j
b20vYXBrL3Jlcy9hbmRyb2lkIgotICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJl
bnQiCi0gICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJtYXRjaF9wYXJlbnQiPgotCi0gICAgPFRl
eHRWaWV3Ci0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY29udGFjdF9uYW1lX2NhbGwiCi0gICAg
ICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6
bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91dF9jZW50
ZXJIb3Jpem9udGFsPSJ0cnVlIgotICAgICAgICBhbmRyb2lkOmxheW91dF9hYm92ZT0iQCtpZC9i
dXR0b25zX2NhbGxfY29udGFpbmVyIgotICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIyNHNwIgot
ICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW49IjhkcCIvPgotCi0gICAgPExpbmVhckxheW91
dAotICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2J1dHRvbnNfY2FsbF9jb250YWluZXIiCi0g
ICAgICAgICAgIGFuZHJvaWQ6b3JpZW50YXRpb249Imhvcml6b250YWwiCi0gICAgICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X2Fib3ZlPSJAK2lkL2NhcHR1cmVfZm9ybWF0X3RleHRfY2FsbCIKLSAgICAg
ICAgICAgYW5kcm9pZDpsYXlvdXRfYWxpZ25XaXRoUGFyZW50SWZNaXNzaW5nPSJ0cnVlIgotICAg
ICAgICAgICBhbmRyb2lkOmxheW91dF9tYXJnaW5Cb3R0b209IjMyZHAiCi0gICAgICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X2NlbnRlckhvcml6b250YWw9InRydWUiCi0gICAgICAgICAgIGFuZHJvaWQ6
bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hl
aWdodD0id3JhcF9jb250ZW50Ij4KLQotICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICBh
bmRyb2lkOmlkPSJAK2lkL2J1dHRvbl9jYWxsX2Rpc2Nvbm5lY3QiCi0gICAgICAgICAgIGFuZHJv
aWQ6YmFja2dyb3VuZD0iQGRyYXdhYmxlL2Rpc2Nvbm5lY3QiCi0gICAgICAgICAgIGFuZHJvaWQ6
Y29udGVudERlc2NyaXB0aW9uPSJAc3RyaW5nL2Rpc2Nvbm5lY3RfY2FsbCIKLSAgICAgICAgICAg
YW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSIxNmRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91
dF93aWR0aD0iNDhkcCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRwIi8+
Ci0KLSAgICAgICA8SW1hZ2VCdXR0b24KLSAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0
b25fY2FsbF9zd2l0Y2hfY2FtZXJhIgotICAgICAgICAgICBhbmRyb2lkOmJhY2tncm91bmQ9IkBh
bmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfY2FtZXJhIgotICAgICAgICAgICBhbmRyb2lkOmNvbnRl
bnREZXNjcmlwdGlvbj0iQHN0cmluZy9zd2l0Y2hfY2FtZXJhIgotICAgICAgICAgICBhbmRyb2lk
OmxheW91dF9tYXJnaW5FbmQ9IjhkcCIKLSAgICAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9
IjQ4ZHAiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0iNDhkcCIvPgotCi0gICAg
ICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2J1dHRvbl9jYWxs
X3NjYWxpbmdfbW9kZSIKLSAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAZHJhd2FibGUv
aWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuIgotICAgICAgICAgICBhbmRyb2lkOmNv
bnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy9kaXNjb25uZWN0X2NhbGwiCi0gICAgICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X3dpZHRoPSI0OGRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWln
aHQ9IjQ4ZHAiLz4KLQotICAgICAgIDxJbWFnZUJ1dHRvbgotICAgICAgICAgICBhbmRyb2lkOmlk
PSJAK2lkL2J1dHRvbl9jYWxsX3RvZ2dsZV9taWMiCi0gICAgICAgICAgIGFuZHJvaWQ6YmFja2dy
b3VuZD0iQGFuZHJvaWQ6ZHJhd2FibGUvaWNfYnRuX3NwZWFrX25vdyIKLSAgICAgICAgICAgYW5k
cm9pZDpjb250ZW50RGVzY3JpcHRpb249IkBzdHJpbmcvdG9nZ2xlX21pYyIKLSAgICAgICAgICAg
YW5kcm9pZDpsYXlvdXRfbWFyZ2luRW5kPSI4ZHAiCi0gICAgICAgICAgIGFuZHJvaWQ6bGF5b3V0
X3dpZHRoPSI0OGRwIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9IjQ4ZHAiLz4K
LSAgICA8L0xpbmVhckxheW91dD4KLQotICAgIDxUZXh0VmlldwotICAgICAgICBhbmRyb2lkOmlk
PSJAK2lkL2NhcHR1cmVfZm9ybWF0X3RleHRfY2FsbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRf
d2lkdGg9IndyYXBfY29udGVudCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFw
X2NvbnRlbnQiCi0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2NlbnRlckhvcml6b250YWw9InRydWUi
Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2Fib3ZlPSJAK2lkL2NhcHR1cmVfZm9ybWF0X3NsaWRl
cl9jYWxsIgotICAgICAgICBhbmRyb2lkOnRleHRTaXplPSIxNnNwIgotICAgICAgICBhbmRyb2lk
OnRleHQ9IkBzdHJpbmcvY2FwdHVyZV9mb3JtYXRfY2hhbmdlX3RleHQiLz4KLQotICAgIDxTZWVr
QmFyCi0gICAgICAgIGFuZHJvaWQ6aWQ9IkAraWQvY2FwdHVyZV9mb3JtYXRfc2xpZGVyX2NhbGwi
Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJtYXRjaF9wYXJlbnQiCi0gICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICBhbmRyb2lkOmxheW91
dF9jZW50ZXJIb3Jpem9udGFsPSJ0cnVlIgotICAgICAgICBhbmRyb2lkOmxheW91dF9hbGlnblBh
cmVudEJvdHRvbT0idHJ1ZSIKLSAgICAgICAgYW5kcm9pZDpwcm9ncmVzcz0iNTAiCi0gICAgICAg
IGFuZHJvaWQ6bGF5b3V0X21hcmdpbj0iOGRwIi8+Ci0KLTwvUmVsYXRpdmVMYXlvdXQ+CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3Jlcy9sYXlvdXQvZnJhZ21lbnRfaHVkLnhtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jl
cy9sYXlvdXQvZnJhZ21lbnRfaHVkLnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMv
bGF5b3V0L2ZyYWdtZW50X2h1ZC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw3NCArMCwwIEBACi08
P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotCi08UmVsYXRpdmVMYXlvdXQK
LSAgICB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2Fu
ZHJvaWQiCi0gICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9Im1hdGNoX3BhcmVudCIKLSAgICBhbmRy
b2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+Ci0KLSAgICA8SW1hZ2VCdXR0b24KLSAg
ICAgICAgYW5kcm9pZDppZD0iQCtpZC9idXR0b25fdG9nZ2xlX2RlYnVnIgotICAgICAgICBhbmRy
b2lkOmJhY2tncm91bmQ9IkBhbmRyb2lkOmRyYXdhYmxlL2ljX21lbnVfaW5mb19kZXRhaWxzIgot
ICAgICAgICBhbmRyb2lkOmNvbnRlbnREZXNjcmlwdGlvbj0iQHN0cmluZy90b2dnbGVfZGVidWci
Ci0gICAgICAgIGFuZHJvaWQ6bGF5b3V0X2FsaWduUGFyZW50Qm90dG9tPSJ0cnVlIgotICAgICAg
ICBhbmRyb2lkOmxheW91dF9hbGlnblBhcmVudFN0YXJ0PSJ0cnVlIgotICAgICAgICBhbmRyb2lk
OmxheW91dF93aWR0aD0iNDhkcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSI0OGRw
Ii8+Ci0KLSAgICA8VGV4dFZpZXcKLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9lbmNvZGVyX3N0
YXRfY2FsbCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfd2lkdGg9IndyYXBfY29udGVudCIKLSAg
ICAgICAgYW5kcm9pZDpsYXlvdXRfaGVpZ2h0PSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgIGFuZHJv
aWQ6bGF5b3V0X2FsaWduUGFyZW50RW5kPSJ0cnVlIgotICAgICAgICBhbmRyb2lkOnRleHRTdHls
ZT0iYm9sZCIKLSAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IiNDMDAwRkYwMCIKLSAgICAgICAg
YW5kcm9pZDp0ZXh0U2l6ZT0iMTJzcCIKLSAgICAgICAgYW5kcm9pZDpsYXlvdXRfbWFyZ2luPSI4
ZHAiLz4KLQotICAgIDxUYWJsZUxheW91dAotICAgICAgICAgICBhbmRyb2lkOmlkPSJAK2lkL2h1
ZHZpZXdfY29udGFpbmVyIgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0ibWF0Y2hf
cGFyZW50IgotICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Im1hdGNoX3BhcmVudCI+
Ci0KLSAgICAgICAgICAgPFRhYmxlUm93PgotICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAg
ICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9odWRfc3RhdF9id2UiCi0gICAgICAgICAgICAg
ICAgIGFuZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAg
IGFuZHJvaWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICBh
bmRyb2lkOmFscGhhPSIwLjQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMmRp
cCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpjb2xvci93
aGl0ZSIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBhbmRyb2lkOmNvbG9y
L2JsYWNrIiAvPgotCi0gICAgICAgICAgICAgIDxUZXh0VmlldwotICAgICAgICAgICAgICAgICBh
bmRyb2lkOmlkPSJAK2lkL2h1ZF9zdGF0X2Nvbm5lY3Rpb24iCi0gICAgICAgICAgICAgICAgIGFu
ZHJvaWQ6bGF5b3V0X3dpZHRoPSJ3cmFwX2NvbnRlbnQiCi0gICAgICAgICAgICAgICAgIGFuZHJv
aWQ6bGF5b3V0X2hlaWdodD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICBhbmRyb2lk
OmFscGhhPSIwLjQiCi0gICAgICAgICAgICAgICAgIGFuZHJvaWQ6cGFkZGluZz0iMmRpcCIKLSAg
ICAgICAgICAgICAgICAgYW5kcm9pZDpiYWNrZ3JvdW5kPSJAYW5kcm9pZDpjb2xvci93aGl0ZSIK
LSAgICAgICAgICAgICAgICAgYW5kcm9pZDp0ZXh0Q29sb3I9IkBhbmRyb2lkOmNvbG9yL2JsYWNr
IiAvPgotCi0gICAgICAgICAgIDwvVGFibGVSb3c+Ci0KLSAgICAgICAgICAgPFRhYmxlUm93Pgot
ICAgICAgICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtp
ZC9odWRfc3RhdF92aWRlb19zZW5kIgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93
aWR0aD0id3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWln
aHQ9IndyYXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDphbHBoYT0iMC40Igot
ICAgICAgICAgICAgICAgICBhbmRyb2lkOnBhZGRpbmc9IjJkaXAiCi0gICAgICAgICAgICAgICAg
IGFuZHJvaWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6Y29sb3Ivd2hpdGUiCi0gICAgICAgICAgICAg
ICAgIGFuZHJvaWQ6dGV4dENvbG9yPSJAYW5kcm9pZDpjb2xvci9ibGFjayIgLz4KLQotICAgICAg
ICAgICAgICA8VGV4dFZpZXcKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9odWRf
c3RhdF92aWRlb19yZWN2IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF93aWR0aD0i
d3JhcF9jb250ZW50IgotICAgICAgICAgICAgICAgICBhbmRyb2lkOmxheW91dF9oZWlnaHQ9Indy
YXBfY29udGVudCIKLSAgICAgICAgICAgICAgICAgYW5kcm9pZDpwYWRkaW5nPSIyZGlwIgotICAg
ICAgICAgICAgICAgICBhbmRyb2lkOmFscGhhPSIwLjQiCi0gICAgICAgICAgICAgICAgIGFuZHJv
aWQ6YmFja2dyb3VuZD0iQGFuZHJvaWQ6Y29sb3Ivd2hpdGUiCi0gICAgICAgICAgICAgICAgIGFu
ZHJvaWQ6dGV4dENvbG9yPSJAYW5kcm9pZDpjb2xvci9ibGFjayIgLz4KLSAgICAgICAgICAgIDwv
VGFibGVSb3c+Ci0gICAgPC9UYWJsZUxheW91dD4KLQotPC9SZWxhdGl2ZUxheW91dD4KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL21lbnUvY29ubmVjdF9tZW51LnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy9t
ZW51L2Nvbm5lY3RfbWVudS54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL21lbnUv
Y29ubmVjdF9tZW51LnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDEzICswLDAgQEAKLTxtZW51IHht
bG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCI+
Ci0gICAgPGl0ZW0KLSAgICAgICAgYW5kcm9pZDppZD0iQCtpZC9hY3Rpb25fbG9vcGJhY2siCi0g
ICAgICAgIGFuZHJvaWQ6aWNvbj0iQGRyYXdhYmxlL2ljX2xvb3BiYWNrX2NhbGwiCi0gICAgICAg
IGFuZHJvaWQ6c2hvd0FzQWN0aW9uPSJhbHdheXMiCi0gICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBz
dHJpbmcvYWN0aW9uX2xvb3BiYWNrIi8+Ci0gICAgPGl0ZW0KLSAgICAgICAgYW5kcm9pZDppZD0i
QCtpZC9hY3Rpb25fc2V0dGluZ3MiCi0gICAgICAgIGFuZHJvaWQ6b3JkZXJJbkNhdGVnb3J5PSIx
MDAiCi0gICAgICAgIGFuZHJvaWQ6aWNvbj0iQGFuZHJvaWQ6ZHJhd2FibGUvaWNfbWVudV9wcmVm
ZXJlbmNlcyIKLSAgICAgICAgYW5kcm9pZDpzaG93QXNBY3Rpb249ImlmUm9vbSIKLSAgICAgICAg
YW5kcm9pZDp0aXRsZT0iQHN0cmluZy9hY3Rpb25fc2V0dGluZ3MiLz4KLTwvbWVudT4KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvcmVzL3ZhbHVlcy12MTcvc3R5bGVzLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92
YWx1ZXMtdjE3L3N0eWxlcy54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVl
cy12MTcvc3R5bGVzLnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVy
c2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxyZXNvdXJjZXM+Ci0gIDxzdHlsZSBuYW1l
PSJDYWxsQWN0aXZpdHlUaGVtZSIgcGFyZW50PSJhbmRyb2lkOlRoZW1lLkJsYWNrIj4KLSAgICA8
aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd0FjdGlvbkJhciI+ZmFsc2U8L2l0ZW0+Ci0gICAgPGl0
ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dGdWxsc2NyZWVuIj50cnVlPC9pdGVtPgotICAgIDxpdGVt
IG5hbWU9ImFuZHJvaWQ6d2luZG93Tm9UaXRsZSI+dHJ1ZTwvaXRlbT4KLSAgPC9zdHlsZT4KLTwv
cmVzb3VyY2VzPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzLXYyMS9zdHlsZXMueG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy12MjEvc3R5bGVzLnhtbAkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMvdmFsdWVzLXYyMS9zdHlsZXMueG1sCShub25leGlzdGVudCkKQEAgLTEsOCAr
MCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHJlc291cmNl
cz4KLSAgPHN0eWxlIG5hbWU9IkFwcFJUQ01vYmlsZUFjdGl2aXR5VGhlbWUiIHBhcmVudD0iYW5k
cm9pZDpUaGVtZS5NYXRlcmlhbCI+Ci0gICAgPGl0ZW0gbmFtZT0iYW5kcm9pZDp3aW5kb3dBY3Rp
b25CYXIiPmZhbHNlPC9pdGVtPgotICAgIDxpdGVtIG5hbWU9ImFuZHJvaWQ6d2luZG93RnVsbHNj
cmVlbiI+dHJ1ZTwvaXRlbT4KLSAgICA8aXRlbSBuYW1lPSJhbmRyb2lkOndpbmRvd05vVGl0bGUi
PnRydWU8L2l0ZW0+Ci0gIDwvc3R5bGU+Ci08L3Jlc291cmNlcz4KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3Zh
bHVlcy9hcnJheXMueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3ZhbHVlcy9hcnJheXMueG1s
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMvYXJyYXlzLnhtbAkobm9uZXhp
c3RlbnQpCkBAIC0xLDU1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0
Zi04Ij8+Ci08cmVzb3VyY2VzPgotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0idmlkZW9SZXNvbHV0
aW9ucyI+Ci0gICAgICAgIDxpdGVtPkRlZmF1bHQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkhEICgx
MjgwIHggNzIwKTwvaXRlbT4KLSAgICAgICAgPGl0ZW0+VkdBICg2NDAgeCA0ODApPC9pdGVtPgot
ICAgICAgICA8aXRlbT5RVkdBICgzMjAgeCAyNDApPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5
PgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJ2aWRlb1Jlc29sdXRpb25zVmFsdWVzIj4KLSAg
ICAgICAgPGl0ZW0+RGVmYXVsdDwvaXRlbT4KLSAgICAgICAgPGl0ZW0+MTI4MCB4IDcyMDwvaXRl
bT4KLSAgICAgICAgPGl0ZW0+NjQwIHggNDgwPC9pdGVtPgotICAgICAgICA8aXRlbT4zMjAgeCAy
NDA8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9
ImNhbWVyYUZwcyI+Ci0gICAgICAgIDxpdGVtPkRlZmF1bHQ8L2l0ZW0+Ci0gICAgICAgIDxpdGVt
PjMwIGZwczwvaXRlbT4KLSAgICAgICAgPGl0ZW0+MTUgZnBzPC9pdGVtPgotICAgIDwvc3RyaW5n
LWFycmF5PgotCi0gICAgPHN0cmluZy1hcnJheSBuYW1lPSJzdGFydEJpdHJhdGUiPgotICAgICAg
ICA8aXRlbT5EZWZhdWx0PC9pdGVtPgotICAgICAgICA8aXRlbT5NYW51YWw8L2l0ZW0+Ci0gICAg
PC9zdHJpbmctYXJyYXk+Ci0KLSAgICA8c3RyaW5nLWFycmF5IG5hbWU9InZpZGVvQ29kZWNzIj4K
LSAgICAgICAgPGl0ZW0+VlA4PC9pdGVtPgotICAgICAgICA8aXRlbT5WUDk8L2l0ZW0+Ci0gICAg
ICAgIDxpdGVtPkgyNjQ8L2l0ZW0+Ci0gICAgPC9zdHJpbmctYXJyYXk+Ci0KLSAgICA8c3RyaW5n
LWFycmF5IG5hbWU9ImF1ZGlvQ29kZWNzIj4KLSAgICAgICAgPGl0ZW0+T1BVUzwvaXRlbT4KLSAg
ICAgICAgPGl0ZW0+SVNBQzwvaXRlbT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJp
bmctYXJyYXkgbmFtZT0ic3BlYWtlcnBob25lIj4KLSAgICAgICAgPGl0ZW0+QXV0byAocHJveGlt
aXR5IHNlbnNvcik8L2l0ZW0+Ci0gICAgICAgIDxpdGVtPkVuYWJsZWQ8L2l0ZW0+Ci0gICAgICAg
IDxpdGVtPkRpc2FibGVkPC9pdGVtPgotICAgIDwvc3RyaW5nLWFycmF5PgotCi0gICAgPHN0cmlu
Zy1hcnJheSBuYW1lPSJzcGVha2VycGhvbmVWYWx1ZXMiPgotICAgICAgICA8aXRlbT5hdXRvPC9p
dGVtPgotICAgICAgICA8aXRlbT50cnVlPC9pdGVtPgotICAgICAgICA8aXRlbT5mYWxzZTwvaXRl
bT4KLSAgICA8L3N0cmluZy1hcnJheT4KLQotICAgIDxzdHJpbmctYXJyYXkgbmFtZT0icm9vbUxp
c3RDb250ZXh0TWVudSI+Ci0gICAgICAgIDxpdGVtPlJlbW92ZSBmYXZvcml0ZTwvaXRlbT4KLSAg
ICA8L3N0cmluZy1hcnJheT4KLQotPC9yZXNvdXJjZXM+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMv
c3RyaW5ncy54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRm
LTgiPz4KLTxyZXNvdXJjZXM+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSIgdHJhbnNsYXRh
YmxlPSJmYWxzZSI+QXBwUlRDPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJzZXR0aW5nc19u
YW1lIiB0cmFuc2xhdGFibGU9ImZhbHNlIj5BcHBSVEMgU2V0dGluZ3M8L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9ImRpc2Nvbm5lY3RfY2FsbCI+RGlzY29ubmVjdCBDYWxsPC9zdHJpbmc+Ci0g
ICAgPHN0cmluZyBuYW1lPSJyb29tX2Rlc2NyaXB0aW9uIj4KLSAgICAgICAgUGxlYXNlIGVudGVy
IGEgcm9vbSBuYW1lLiBSb29tIG5hbWVzIGFyZSBzaGFyZWQgd2l0aCBldmVyeW9uZSwgc28gdGhp
bmsKLSAgICAgICAgb2Ygc29tZXRoaW5nIHVuaXF1ZSBhbmQgc2VuZCBpdCB0byBhIGZyaWVuZC4K
LSAgICA8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZhdm9yaXRlcyI+RmF2b3JpdGVzPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJub19mYXZvcml0ZXMiPk5vIGZhdm9yaXRlczwvc3Ry
aW5nPgotICAgIDxzdHJpbmcgbmFtZT0iaW52YWxpZF91cmxfdGl0bGUiPkludmFsaWQgVVJMPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJpbnZhbGlkX3VybF90ZXh0Ij5UaGUgVVJMIG9yIHJv
b20gbmFtZSB5b3UgZW50ZXJlZCByZXN1bHRlZCBpbiBhbiBpbnZhbGlkIFVSTDogJTEkcwotICAg
IDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY2hhbm5lbF9lcnJvcl90aXRsZSI+Q29ubmVj
dGlvbiBlcnJvcjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29ubmVjdGluZ190byI+Q29u
bmVjdGluZyB0bzogJTEkczwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibWlzc2luZ191cmwi
PkZBVEFMIEVSUk9SOiBNaXNzaW5nIFVSTCB0byBjb25uZWN0IHRvLjwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0iY2FtZXJhMl90ZXh0dXJlX29ubHlfZXJyb3IiPkNhbWVyYTIgb25seSBzdXBw
b3J0cyBjYXB0dXJpbmcgdG8gdGV4dHVyZS4gRWl0aGVyIGRpc2FibGUgQ2FtZXJhMiBvciBlbmFi
bGUgY2FwdHVyaW5nIHRvIHRleHR1cmUgaW4gdGhlIG9wdGlvbnMuPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJvayI+T0s8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InN3aXRjaF9jYW1l
cmEiPlN3aXRjaCBmcm9udC9iYWNrIGNhbWVyYTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
Y2FwdHVyZV9mb3JtYXRfY2hhbmdlX3RleHQiPlNsaWRlIHRvIGNoYW5nZSBjYXB0dXJlIGZvcm1h
dDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0ibXV0ZWQiPk11dGVkPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJ0b2dnbGVfZGVidWciPlRvZ2dsZSBkZWJ1ZyB2aWV3PC9zdHJpbmc+Ci0g
ICAgPHN0cmluZyBuYW1lPSJ0b2dnbGVfbWljIj5Ub2dnbGUgbWljcm9waG9uZSBvbi9vZmY8L3N0
cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9zZXR0aW5ncyI+U2V0dGluZ3M8L3N0cmlu
Zz4KLSAgICA8c3RyaW5nIG5hbWU9ImFjdGlvbl9sb29wYmFjayI+TG9vcGJhY2sgY29ubmVjdGlv
bjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iY29ubmVjdF9kZXNjcmlwdGlvbiI+Q29ubmVj
dCB0byB0aGUgcm9vbTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0iYWRkX2Zhdm9yaXRlX2Rl
c2NyaXB0aW9uIj5BZGQgZmF2b3JpdGU8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9ImZvcm1h
dF9kZXNjcmlwdGlvbiI+JTEkZHglMiRkIEAgJTMkZCBmcHM8L3N0cmluZz4KLQotICAgIDwhLS0g
U2V0dGluZ3Mgc3RyaW5ncy4gLS0+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Jvb21fa2V5Ij5y
b29tX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcm9vbV9saXN0
X2tleSI+cm9vbV9saXN0X3ByZWZlcmVuY2U8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl92aWRlb3NldHRpbmdzX2tleSI+dmlkZW9fc2V0dGluZ3Nfa2V5PC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX3ZpZGVvc2V0dGluZ3NfdGl0bGUiPldlYlJUQyB2aWRlbyBzZXR0
aW5ncy48L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2NhbGxfa2V5Ij52
aWRlb2NhbGxfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRl
b2NhbGxfdGl0bGUiPlZpZGVvIGNhbGwuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVm
X3ZpZGVvY2FsbF9kbGciPkVuYWJsZSB2aWRlbyBpbiBhIGNhbGwuPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX3ZpZGVvY2FsbF9kZWZhdWx0Ij50cnVlPC9zdHJpbmc+Ci0KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfc2NyZWVuY2FwdHVyZV9rZXkiPnNjcmVlbmNhcHR1cmVfcHJlZmVy
ZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zY3JlZW5jYXB0dXJlX3RpdGxl
Ij5Vc2Ugc2NyZWVuY2FwdHVyZS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc2Ny
ZWVuY2FwdHVyZV9kZWZhdWx0Ij5mYWxzZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2NhbWVyYTJfa2V5Ij5jYW1lcmEyX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5n
IG5hbWU9InByZWZfY2FtZXJhMl90aXRsZSI+VXNlIENhbWVyYTIuPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX2NhbWVyYTJfZGVmYXVsdCI+dHJ1ZTwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9jYW1lcmEyX25vdF9zdXBwb3J0ZWQiPk5vdCBzdXBwb3J0ZWQgb24gdGhp
cyBkZXZpY2UuPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcmVzb2x1dGlvbl9r
ZXkiPnJlc29sdXRpb25fcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9yZXNvbHV0aW9uX3RpdGxlIj5WaWRlbyByZXNvbHV0aW9uLjwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9yZXNvbHV0aW9uX2RsZyI+RW50ZXIgQXBwUlRDIGxvY2FsIHZpZGVvIHJl
c29sdXRpb24uPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3Jlc29sdXRpb25fZGVm
YXVsdCI+RGVmYXVsdDwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Zwc19rZXki
PmZwc19wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Zwc190aXRs
ZSI+Q2FtZXJhIGZwcy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZnBzX2RsZyI+
RW50ZXIgbG9jYWwgY2FtZXJhIGZwcy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZf
ZnBzX2RlZmF1bHQiPkRlZmF1bHQ8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9j
YXB0dXJlcXVhbGl0eXNsaWRlcl9rZXkiPmNhcHR1cmVxdWFsaXR5c2xpZGVyX3ByZWZlcmVuY2U8
L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfdGl0
bGUiPkNhcHR1cmUgcXVhbGl0eSBzbGlkZXIuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX2RsZyI+RW5hYmxlIHNsaWRlciBmb3IgY2hhbmdpbmcg
Y2FwdHVyZSBxdWFsaXR5Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9jYXB0dXJl
cXVhbGl0eXNsaWRlcl9kZWZhdWx0Ij5mYWxzZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX21heHZpZGVvYml0cmF0ZV9rZXkiPm1heHZpZGVvYml0cmF0ZV9wcmVmZXJlbmNlPC9z
dHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX21heHZpZGVvYml0cmF0ZV90aXRsZSI+TWF4
aW11bSB2aWRlbyBiaXRyYXRlIHNldHRpbmcuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJw
cmVmX21heHZpZGVvYml0cmF0ZV9kbGciPk1heGltdW0gdmlkZW8gYml0cmF0ZSBzZXR0aW5nLjwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJhdGVfZGVmYXVsdCI+
RGVmYXVsdDwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX21heHZpZGVvYml0cmF0
ZXZhbHVlX2tleSI+bWF4dmlkZW9iaXRyYXRldmFsdWVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV90aXRsZSI+VmlkZW8gZW5j
b2RlciBtYXhpbXVtIGJpdHJhdGUuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX21h
eHZpZGVvYml0cmF0ZXZhbHVlX2RsZyI+RW50ZXIgdmlkZW8gZW5jb2RlciBtYXhpbXVtIGJpdHJh
dGUgaW4ga2Jwcy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbWF4dmlkZW9iaXRy
YXRldmFsdWVfZGVmYXVsdCI+MTcwMDwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVm
X3ZpZGVvY29kZWNfa2V5Ij52aWRlb2NvZGVjX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3Ry
aW5nIG5hbWU9InByZWZfdmlkZW9jb2RlY190aXRsZSI+RGVmYXVsdCB2aWRlbyBjb2RlYy48L3N0
cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfdmlkZW9jb2RlY19kbGciPlNlbGVjdCBkZWZh
dWx0IHZpZGVvIGNvZGVjLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl92aWRlb2Nv
ZGVjX2RlZmF1bHQiPlZQODwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2h3Y29k
ZWNfa2V5Ij5od2NvZGVjX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InBy
ZWZfaHdjb2RlY190aXRsZSI+VmlkZW8gY29kZWMgaGFyZHdhcmUgYWNjZWxlcmF0aW9uLjwvc3Ry
aW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9od2NvZGVjX2RsZyI+VXNlIGhhcmR3YXJlIGFj
Y2VsZXJhdGVkIHZpZGVvIGNvZGVjIChpZiBhdmFpbGFibGUpLjwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9od2NvZGVjX2RlZmF1bHQiPnRydWU8L3N0cmluZz4KLQotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9jYXB0dXJldG90ZXh0dXJlX2tleSI+Y2FwdHVyZXRvdGV4dHVyZV9wcmVm
ZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2NhcHR1cmV0b3RleHR1cmVf
dGl0bGUiPlZpZGVvIGNhcHR1cmUgdG8gc3VyZmFjZSB0ZXh0dXJlLjwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0icHJlZl9jYXB0dXJldG90ZXh0dXJlX2RsZyI+Q2FwdHVyZSB2aWRlbyB0byB0
ZXh0dXJlcyAoaWYgYXZhaWxhYmxlKS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZf
Y2FwdHVyZXRvdGV4dHVyZV9kZWZhdWx0Ij50cnVlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfdmFsdWVfZW5hYmxlZCI+RW5hYmxlZDwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFt
ZT0icHJlZl92YWx1ZV9kaXNhYmxlZCI+RGlzYWJsZWQ8L3N0cmluZz4KLQotICAgIDxzdHJpbmcg
bmFtZT0icHJlZl9hdWRpb3NldHRpbmdzX2tleSI+YXVkaW9fc2V0dGluZ3Nfa2V5PC9zdHJpbmc+
Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2F1ZGlvc2V0dGluZ3NfdGl0bGUiPldlYlJUQyBhdWRp
byBzZXR0aW5ncy48L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlv
Yml0cmF0ZV9rZXkiPnN0YXJ0YXVkaW9iaXRyYXRlX3ByZWZlcmVuY2U8L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfc3RhcnRhdWRpb2JpdHJhdGVfdGl0bGUiPkF1ZGlvIGJpdHJhdGUg
c2V0dGluZy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3RhcnRhdWRpb2JpdHJh
dGVfZGxnIj5BdWRpbyBiaXRyYXRlIHNldHRpbmcuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1l
PSJwcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2RlZmF1bHQiPkRlZmF1bHQ8L3N0cmluZz4KLQotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2tleSI+c3RhcnRhdWRp
b2JpdHJhdGV2YWx1ZV9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVm
X3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfdGl0bGUiPkF1ZGlvIGNvZGVjIGJpdHJhdGUuPC9zdHJp
bmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfZGxnIj5F
bnRlciBhdWRpbyBjb2RlYyBiaXRyYXRlIGluIGticHMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfZGVmYXVsdCI+MzI8L3N0cmluZz4KLQot
ICAgIDxzdHJpbmcgbmFtZT0icHJlZl9hdWRpb2NvZGVjX2tleSI+YXVkaW9jb2RlY19wcmVmZXJl
bmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2F1ZGlvY29kZWNfdGl0bGUiPkRl
ZmF1bHQgYXVkaW8gY29kZWMuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2F1ZGlv
Y29kZWNfZGxnIj5TZWxlY3QgZGVmYXVsdCBhdWRpbyBjb2RlYy48L3N0cmluZz4KLSAgICA8c3Ry
aW5nIG5hbWU9InByZWZfYXVkaW9jb2RlY19kZWZhdWx0Ij5PUFVTPC9zdHJpbmc+Ci0KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfbm9hdWRpb3Byb2Nlc3Npbmdfa2V5Ij5hdWRpb3Byb2Nlc3Npbmdf
cHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9ub2F1ZGlvcHJvY2Vz
c2luZ190aXRsZSI+RGlzYWJsZSBhdWRpbyBwcm9jZXNzaW5nLjwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19kbGciPkRpc2FibGUgYXVkaW8gcHJvY2Vz
c2luZyBwaXBlbGluZS48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfbm9hdWRpb3By
b2Nlc3NpbmdfZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9hZWNkdW1wX2tleSI+YWVjZHVtcF9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBu
YW1lPSJwcmVmX2FlY2R1bXBfdGl0bGUiPkNyZWF0ZSBhZWNkdW1wLjwvc3RyaW5nPgotICAgIDxz
dHJpbmcgbmFtZT0icHJlZl9hZWNkdW1wX2RsZyI+RW5hYmxlIGRpYWdub3N0aWMgYXVkaW8gcmVj
b3JkaW5ncy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYWVjZHVtcF9kZWZhdWx0
Ij5mYWxzZTwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX29wZW5zbGVzX2tleSI+
b3BlbnNsZXNfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9vcGVu
c2xlc190aXRsZSI+VXNlIE9wZW5TTCBFUyBmb3IgYXVkaW8gcGxheWJhY2suPC9zdHJpbmc+Ci0g
ICAgPHN0cmluZyBuYW1lPSJwcmVmX29wZW5zbGVzX2RsZyI+VXNlIE9wZW5TTCBFUyBmb3IgYXVk
aW8gcGxheWJhY2suPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX29wZW5zbGVzX2Rl
ZmF1bHQiPmZhbHNlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9i
dWlsdF9pbl9hZWNfa2V5Ij5kaXNhYmxlX2J1aWx0X2luX2FlY19wcmVmZXJlbmNlPC9zdHJpbmc+
Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX3RpdGxlIj5EaXNh
YmxlIGhhcmR3YXJlIEFFQy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJs
ZV9idWlsdF9pbl9hZWNfZGxnIj5EaXNhYmxlIGhhcmR3YXJlIEFFQy48L3N0cmluZz4KLSAgICA8
c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfZGVmYXVsdCI+ZmFsc2U8L3N0
cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYnVpbHRfaW5fYWVjX25vdF9hdmFpbGFibGUi
PkhhcmR3YXJlIEFFQyBpcyBub3QgYXZhaWxhYmxlPC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5h
bWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2Nfa2V5Ij5kaXNhYmxlX2J1aWx0X2luX2FnY19w
cmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc2FibGVfYnVpbHRf
aW5fYWdjX3RpdGxlIj5EaXNhYmxlIGhhcmR3YXJlIEFHQy48L3N0cmluZz4KLSAgICA8c3RyaW5n
IG5hbWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2NfZGxnIj5EaXNhYmxlIGhhcmR3YXJlIEFH
Qy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2Nf
ZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfYnVpbHRfaW5f
YWdjX25vdF9hdmFpbGFibGUiPkhhcmR3YXJlIEFHQyBpcyBub3QgYXZhaWxhYmxlPC9zdHJpbmc+
Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19rZXkiPmRpc2Fi
bGVfYnVpbHRfaW5fbnNfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9kaXNhYmxlX2J1aWx0X2luX25zX3RpdGxlIj5EaXNhYmxlIGhhcmR3YXJlIE5TLjwvc3RyaW5n
PgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2RsZyI+RGlzYWJs
ZSBoYXJkd2FyZSBOUy48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZGlzYWJsZV9i
dWlsdF9pbl9uc19kZWZhdWx0Ij5mYWxzZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9idWlsdF9pbl9uc19ub3RfYXZhaWxhYmxlIj5IYXJkd2FyZSBOUyBpcyBub3QgYXZhaWxhYmxl
PC9zdHJpbmc+Ci0KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xf
a2V5Ij5lbmFibGVfbGV2ZWxfY29udHJvbF9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0cmlu
ZyBuYW1lPSJwcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX3RpdGxlIj5FbmFibGUgbGV2ZWwgY29u
dHJvbC48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfZW5hYmxlX2xldmVsX2NvbnRy
b2xfZGVmYXVsdCI+ZmFsc2U8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zcGVh
a2VycGhvbmVfa2V5Ij5zcGVha2VycGhvbmVfcHJlZmVyZW5jZTwvc3RyaW5nPgotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9zcGVha2VycGhvbmVfdGl0bGUiPlNwZWFrZXJwaG9uZS48L3N0cmluZz4K
LSAgICA8c3RyaW5nIG5hbWU9InByZWZfc3BlYWtlcnBob25lX2RsZyI+U3BlYWtlcnBob25lLjwv
c3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9zcGVha2VycGhvbmVfZGVmYXVsdCI+YXV0
bzwvc3RyaW5nPgotCi0gICAgPHN0cmluZyBuYW1lPSJwcmVmX21pc2NzZXR0aW5nc19rZXkiPm1p
c2Nfc2V0dGluZ3Nfa2V5PC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX21pc2NzZXR0
aW5nc190aXRsZSI+TWlzY2VsbGFuZW91cyBzZXR0aW5ncy48L3N0cmluZz4KLQotICAgIDxzdHJp
bmcgbmFtZT0icHJlZl9yb29tX3NlcnZlcl91cmxfa2V5Ij5yb29tX3NlcnZlcl91cmxfcHJlZmVy
ZW5jZTwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9yb29tX3NlcnZlcl91cmxfdGl0
bGUiPlJvb20gc2VydmVyIFVSTC48L3N0cmluZz4KLSAgICA8c3RyaW5nIG5hbWU9InByZWZfcm9v
bV9zZXJ2ZXJfdXJsX2RsZyI+RW50ZXIgYSByb29tIHNlcnZlciBVUkwuPC9zdHJpbmc+Ci0gICAg
PHN0cmluZyBuYW1lPSJwcmVmX3Jvb21fc2VydmVyX3VybF9kZWZhdWx0IiB0cmFuc2xhdGFibGU9
ImZhbHNlIj5odHRwczovL2FwcHIudGM8L3N0cmluZz4KLQotICAgIDxzdHJpbmcgbmFtZT0icHJl
Zl9kaXNwbGF5aHVkX2tleSI+ZGlzcGxheWh1ZF9wcmVmZXJlbmNlPC9zdHJpbmc+Ci0gICAgPHN0
cmluZyBuYW1lPSJwcmVmX2Rpc3BsYXlodWRfdGl0bGUiPkRpc3BsYXkgY2FsbCBzdGF0aXN0aWNz
Ljwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0icHJlZl9kaXNwbGF5aHVkX2RsZyI+RGlzcGxh
eSBjYWxsIHN0YXRpc3RpY3MuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX2Rpc3Bs
YXlodWRfZGVmYXVsdCIgdHJhbnNsYXRhYmxlPSJmYWxzZSI+ZmFsc2U8L3N0cmluZz4KLQotICAg
IDxzdHJpbmcgbmFtZT0icHJlZl90cmFjaW5nX2tleSI+dHJhY2luZ19wcmVmZXJlbmNlPC9zdHJp
bmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3RyYWNpbmdfdGl0bGUiPkRlYnVnIHBlcmZvcm1h
bmNlIHRyYWNpbmcuPC9zdHJpbmc+Ci0gICAgPHN0cmluZyBuYW1lPSJwcmVmX3RyYWNpbmdfZGxn
Ij5EZWJ1ZyBwZXJmb3JtYW5jZSB0cmFjaW5nLjwvc3RyaW5nPgotICAgIDxzdHJpbmcgbmFtZT0i
cHJlZl90cmFjaW5nX2RlZmF1bHQiIHRyYW5zbGF0YWJsZT0iZmFsc2UiPmZhbHNlPC9zdHJpbmc+
Ci08L3Jlc291cmNlcz4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvcmVzL3htbC9wcmVmZXJlbmNlcy54bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9yZXMveG1sL3ByZWZlcmVuY2VzLnhtbAkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9yZXMveG1sL3ByZWZlcmVuY2VzLnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4MiAr
MCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByZWZlcmVu
Y2VTY3JlZW4geG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jl
cy9hbmRyb2lkIj4KLSAgICA8UHJlZmVyZW5jZUNhdGVnb3J5Ci0gICAgICAgIGFuZHJvaWQ6a2V5
PSJAc3RyaW5nL3ByZWZfdmlkZW9zZXR0aW5nc19rZXkiCi0gICAgICAgIGFuZHJvaWQ6dGl0bGU9
IkBzdHJpbmcvcHJlZl92aWRlb3NldHRpbmdzX3RpdGxlIj4KLQotICAgICAgICA8Q2hlY2tCb3hQ
cmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3ZpZGVvY2Fs
bF9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfdmlkZW9jYWxs
X3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX3Zp
ZGVvY2FsbF9kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9w
cmVmX3ZpZGVvY2FsbF9kZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UK
LSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfc2NyZWVuY2FwdHVyZV9rZXki
Ci0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfc2NyZWVuY2FwdHVyZV90
aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfc2Ny
ZWVuY2FwdHVyZV9kZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAg
ICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfY2FtZXJhMl9rZXkiCi0gICAgICAg
ICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfY2FtZXJhMl90aXRsZSIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfY2FtZXJhMl9kZWZhdWx0IiAv
PgotCi0gICAgICAgIDxMaXN0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBz
dHJpbmcvcHJlZl9yZXNvbHV0aW9uX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBz
dHJpbmcvcHJlZl9yZXNvbHV0aW9uX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0
VmFsdWU9IkBzdHJpbmcvcHJlZl9yZXNvbHV0aW9uX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRy
b2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfcmVzb2x1dGlvbl9kbGciCi0gICAgICAgICAg
ICBhbmRyb2lkOmVudHJpZXM9IkBhcnJheS92aWRlb1Jlc29sdXRpb25zIgotICAgICAgICAgICAg
YW5kcm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L3ZpZGVvUmVzb2x1dGlvbnNWYWx1ZXMiIC8+Ci0K
LSAgICAgICAgPExpc3RQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmlu
Zy9wcmVmX2Zwc19rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZf
ZnBzX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJl
Zl9mcHNfZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcv
cHJlZl9mcHNfZGxnIgotICAgICAgICAgICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvY2FtZXJh
RnBzIgotICAgICAgICAgICAgYW5kcm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L2NhbWVyYUZwcyIg
Lz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtl
eT0iQHN0cmluZy9wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX2tleSIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRlcl90aXRsZSIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9jYXB0dXJlcXVhbGl0
eXNsaWRlcl9kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9w
cmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPExpc3RQcmVm
ZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX21heHZpZGVvYml0
cmF0ZV9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfbWF4dmlk
ZW9iaXRyYXRlX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJp
bmcvcHJlZl9tYXh2aWRlb2JpdHJhdGVfZGVmYXVsdCIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlh
bG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9tYXh2aWRlb2JpdHJhdGVfZGxnIgotICAgICAgICAgICAg
YW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvc3RhcnRCaXRyYXRlIgotICAgICAgICAgICAgYW5kcm9p
ZDplbnRyeVZhbHVlcz0iQGFycmF5L3N0YXJ0Qml0cmF0ZSIgLz4KLQotICAgICAgICA8RWRpdFRl
eHRQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX21heHZp
ZGVvYml0cmF0ZXZhbHVlX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcv
cHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV90aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6aW5w
dXRUeXBlPSJudW1iZXIiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmlu
Zy9wcmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lk
OmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfbWF4dmlkZW9iaXRyYXRldmFsdWVfZGxnIiAvPgot
Ci0gICAgICAgIDxMaXN0UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJp
bmcvcHJlZl92aWRlb2NvZGVjX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJp
bmcvcHJlZl92aWRlb2NvZGVjX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFs
dWU9IkBzdHJpbmcvcHJlZl92aWRlb2NvZGVjX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lk
OmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfdmlkZW9jb2RlY19kbGciCi0gICAgICAgICAgICBh
bmRyb2lkOmVudHJpZXM9IkBhcnJheS92aWRlb0NvZGVjcyIKLSAgICAgICAgICAgIGFuZHJvaWQ6
ZW50cnlWYWx1ZXM9IkBhcnJheS92aWRlb0NvZGVjcyIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQ
cmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2h3Y29kZWNf
a2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2h3Y29kZWNfdGl0
bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfaHdjb2Rl
Y19kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2h3
Y29kZWNfZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAg
ICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2NhcHR1cmV0b3RleHR1cmVfa2V5IgotICAg
ICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2NhcHR1cmV0b3RleHR1cmVfdGl0
bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfY2FwdHVy
ZXRvdGV4dHVyZV9kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmlu
Zy9wcmVmX2NhcHR1cmV0b3RleHR1cmVfZGVmYXVsdCIgLz4KLSAgICA8L1ByZWZlcmVuY2VDYXRl
Z29yeT4KLQotICAgIDxQcmVmZXJlbmNlQ2F0ZWdvcnkKLSAgICAgICAgYW5kcm9pZDprZXk9IkBz
dHJpbmcvcHJlZl9hdWRpb3NldHRpbmdzX2tleSIKLSAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0
cmluZy9wcmVmX2F1ZGlvc2V0dGluZ3NfdGl0bGUiPgotCi0gICAgICAgIDxMaXN0UHJlZmVyZW5j
ZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0
ZV9rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRp
b2JpdHJhdGVfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmlu
Zy9wcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lkOmRp
YWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRpb2JpdHJhdGVfZGxnIgotICAgICAgICAg
ICAgYW5kcm9pZDplbnRyaWVzPSJAYXJyYXkvc3RhcnRCaXRyYXRlIgotICAgICAgICAgICAgYW5k
cm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L3N0YXJ0Qml0cmF0ZSIgLz4KLQotICAgICAgICA8RWRp
dFRleHRQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX3N0
YXJ0YXVkaW9iaXRyYXRldmFsdWVfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0
cmluZy9wcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfdGl0bGUiCi0gICAgICAgICAgICBhbmRy
b2lkOmlucHV0VHlwZT0ibnVtYmVyIgotICAgICAgICAgICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9
IkBzdHJpbmcvcHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2RlZmF1bHQiCi0gICAgICAgICAg
ICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1
ZV9kbGciIC8+Ci0KLSAgICAgICAgPExpc3RQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lk
OmtleT0iQHN0cmluZy9wcmVmX2F1ZGlvY29kZWNfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0
aXRsZT0iQHN0cmluZy9wcmVmX2F1ZGlvY29kZWNfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lk
OmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2F1ZGlvY29kZWNfZGVmYXVsdCIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl9hdWRpb2NvZGVjX2RsZyIKLSAg
ICAgICAgICAgIGFuZHJvaWQ6ZW50cmllcz0iQGFycmF5L2F1ZGlvQ29kZWNzIgotICAgICAgICAg
ICAgYW5kcm9pZDplbnRyeVZhbHVlcz0iQGFycmF5L2F1ZGlvQ29kZWNzIiAvPgotCi0gICAgICAg
IDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3By
ZWZfbm9hdWRpb3Byb2Nlc3Npbmdfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0
cmluZy9wcmVmX25vYXVkaW9wcm9jZXNzaW5nX3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpk
aWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX25vYXVkaW9wcm9jZXNzaW5nX2RsZyIKLSAgICAgICAg
ICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfbm9hdWRpb3Byb2Nlc3Npbmdf
ZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBh
bmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2FlY2R1bXBfa2V5IgotICAgICAgICAgICAgYW5kcm9p
ZDp0aXRsZT0iQHN0cmluZy9wcmVmX2FlY2R1bXBfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lk
OmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfYWVjZHVtcF9kbGciCi0gICAgICAgICAgICBhbmRy
b2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2FlY2R1bXBfZGVmYXVsdCIgLz4KLQotICAg
ICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmlu
Zy9wcmVmX29wZW5zbGVzX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcv
cHJlZl9vcGVuc2xlc190aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGlhbG9nVGl0bGU9IkBz
dHJpbmcvcHJlZl9vcGVuc2xlc19kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1
ZT0iQHN0cmluZy9wcmVmX29wZW5zbGVzX2RlZmF1bHQiIC8+Ci0KLSAgICAgICAgPENoZWNrQm94
UHJlZmVyZW5jZQotICAgICAgICAgICAgYW5kcm9pZDprZXk9IkBzdHJpbmcvcHJlZl9kaXNhYmxl
X2J1aWx0X2luX2FlY19rZXkiCi0gICAgICAgICAgICBhbmRyb2lkOnRpdGxlPSJAc3RyaW5nL3By
ZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxv
Z1RpdGxlPSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfZGxnIgotICAgICAgICAg
ICAgYW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl9kaXNhYmxlX2J1aWx0X2luX2Fl
Y19kZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAgICAg
IGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2Nfa2V5IgotICAg
ICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdj
X3RpdGxlIgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRsZT0iQHN0cmluZy9wcmVmX2Rp
c2FibGVfYnVpbHRfaW5fYWdjX2RsZyIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVl
PSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2NfZGVmYXVsdCIgLz4KLQotICAgICAg
ICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9w
cmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfa2V5IgotICAgICAgICAgICAgYW5kcm9pZDp0aXRsZT0i
QHN0cmluZy9wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfdGl0bGUiCi0gICAgICAgICAgICBhbmRy
b2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19kbGciCi0g
ICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9wcmVmX2Rpc2FibGVfYnVp
bHRfaW5fbnNfZGVmYXVsdCIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0gICAg
ICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2tl
eSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9lbmFibGVfbGV2ZWxf
Y29udHJvbF90aXRsZSIKLSAgICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5n
L3ByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfZGVmYXVsdCIgLz4KLQotICAgICAgICA8TGlzdFBy
ZWZlcmVuY2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfc3BlYWtlcnBo
b25lX2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9zcGVha2Vy
cGhvbmVfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmRlZmF1bHRWYWx1ZT0iQHN0cmluZy9w
cmVmX3NwZWFrZXJwaG9uZV9kZWZhdWx0IgotICAgICAgICAgICAgYW5kcm9pZDpkaWFsb2dUaXRs
ZT0iQHN0cmluZy9wcmVmX3NwZWFrZXJwaG9uZV9kbGciCi0gICAgICAgICAgICBhbmRyb2lkOmVu
dHJpZXM9IkBhcnJheS9zcGVha2VycGhvbmUiCi0gICAgICAgICAgICBhbmRyb2lkOmVudHJ5VmFs
dWVzPSJAYXJyYXkvc3BlYWtlcnBob25lVmFsdWVzIiAvPgotICAgIDwvUHJlZmVyZW5jZUNhdGVn
b3J5PgotCi0gICAgPFByZWZlcmVuY2VDYXRlZ29yeQotICAgICAgICBhbmRyb2lkOmtleT0iQHN0
cmluZy9wcmVmX21pc2NzZXR0aW5nc19rZXkiCi0gICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJp
bmcvcHJlZl9taXNjc2V0dGluZ3NfdGl0bGUiPgotCi0gICAgICAgIDxFZGl0VGV4dFByZWZlcmVu
Y2UKLSAgICAgICAgICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfcm9vbV9zZXJ2ZXJfdXJs
X2tleSIKLSAgICAgICAgICAgIGFuZHJvaWQ6dGl0bGU9IkBzdHJpbmcvcHJlZl9yb29tX3NlcnZl
cl91cmxfdGl0bGUiCi0gICAgICAgICAgICBhbmRyb2lkOmlucHV0VHlwZT0idGV4dCIKLSAgICAg
ICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfcm9vbV9zZXJ2ZXJfdXJs
X2RlZmF1bHQiCi0gICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZf
cm9vbV9zZXJ2ZXJfdXJsX2RsZyIgLz4KLQotICAgICAgICA8Q2hlY2tCb3hQcmVmZXJlbmNlCi0g
ICAgICAgICAgICBhbmRyb2lkOmtleT0iQHN0cmluZy9wcmVmX2Rpc3BsYXlodWRfa2V5IgotICAg
ICAgICAgICAgYW5kcm9pZDp0aXRsZT0iQHN0cmluZy9wcmVmX2Rpc3BsYXlodWRfdGl0bGUiCi0g
ICAgICAgICAgICBhbmRyb2lkOmRpYWxvZ1RpdGxlPSJAc3RyaW5nL3ByZWZfZGlzcGxheWh1ZF9k
bGciCi0gICAgICAgICAgIGFuZHJvaWQ6ZGVmYXVsdFZhbHVlPSJAc3RyaW5nL3ByZWZfZGlzcGxh
eWh1ZF9kZWZhdWx0IiAvPgotCi0gICAgICAgIDxDaGVja0JveFByZWZlcmVuY2UKLSAgICAgICAg
ICAgIGFuZHJvaWQ6a2V5PSJAc3RyaW5nL3ByZWZfdHJhY2luZ19rZXkiCi0gICAgICAgICAgICBh
bmRyb2lkOnRpdGxlPSJAc3RyaW5nL3ByZWZfdHJhY2luZ190aXRsZSIKLSAgICAgICAgICAgIGFu
ZHJvaWQ6ZGlhbG9nVGl0bGU9IkBzdHJpbmcvcHJlZl90cmFjaW5nX2RsZyIKLSAgICAgICAgICAg
YW5kcm9pZDpkZWZhdWx0VmFsdWU9IkBzdHJpbmcvcHJlZl90cmFjaW5nX2RlZmF1bHQiIC8+Ci0g
ICAgPC9QcmVmZXJlbmNlQ2F0ZWdvcnk+Ci0KLTwvUHJlZmVyZW5jZVNjcmVlbj4KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENBdWRpb01hbmFnZXIuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDQXVkaW9NYW5hZ2VyLmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBS
VENBdWRpb01hbmFnZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQxOSArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25h
bCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGlu
IHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkK
LSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IG9y
Zy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFwcFJUQ1V0aWxzOwotCi1pbXBvcnQgYW5kcm9pZC5jb250
ZW50LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50Lklu
dGVudEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7Ci1p
bXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQu
bWVkaWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNl
TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkNv
bGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5T
ZXQ7Ci0KLS8qKgotICogQXBwUlRDQXVkaW9NYW5hZ2VyIG1hbmFnZXMgYWxsIGF1ZGlvIHJlbGF0
ZWQgcGFydHMgb2YgdGhlIEFwcFJUQyBkZW1vLgotICovCi1wdWJsaWMgY2xhc3MgQXBwUlRDQXVk
aW9NYW5hZ2VyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBcHBSVENB
dWRpb01hbmFnZXIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQUtFUlBIT05F
X0FVVE8gPSAiYXV0byI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVBS0VSUEhP
TkVfVFJVRSA9ICJ0cnVlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUFLRVJQ
SE9ORV9GQUxTRSA9ICJmYWxzZSI7Ci0KLSAgLyoqCi0gICAqIEF1ZGlvRGV2aWNlIGlzIHRoZSBu
YW1lcyBvZiBwb3NzaWJsZSBhdWRpbyBkZXZpY2VzIHRoYXQgd2UgY3VycmVudGx5Ci0gICAqIHN1
cHBvcnQuCi0gICAqLwotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCBmb3IgQkxVRVRP
T1RIIGFzIHdlbGwuCi0gIHB1YmxpYyBlbnVtIEF1ZGlvRGV2aWNlIHsKLSAgICBTUEVBS0VSX1BI
T05FLAotICAgIFdJUkVEX0hFQURTRVQsCi0gICAgRUFSUElFQ0UsCi0gIH0KLQotICBwcml2YXRl
IGZpbmFsIENvbnRleHQgYXBwcnRjQ29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBv
blN0YXRlQ2hhbmdlTGlzdGVuZXI7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZCA9IGZh
bHNlOwotICBwcml2YXRlIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7Ci0gIHByaXZhdGUgaW50
IHNhdmVkQXVkaW9Nb2RlID0gQXVkaW9NYW5hZ2VyLk1PREVfSU5WQUxJRDsKLSAgcHJpdmF0ZSBi
b29sZWFuIHNhdmVkSXNTcGVha2VyUGhvbmVPbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4g
c2F2ZWRJc01pY3JvcGhvbmVNdXRlID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBBdWRpb0Rl
dmljZSBkZWZhdWx0QXVkaW9EZXZpY2U7Ci0KLSAgLy8gQ29udGFpbnMgc3BlYWtlcnBob25lIHNl
dHRpbmc6IGF1dG8sIHRydWUgb3IgZmFsc2UKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXNlU3Bl
YWtlcnBob25lOwotCi0gIC8vIFByb3hpbWl0eSBzZW5zb3Igb2JqZWN0LiBJdCBtZWFzdXJlcyB0
aGUgcHJveGltaXR5IG9mIGFuIG9iamVjdCBpbiBjbQotICAvLyByZWxhdGl2ZSB0byB0aGUgdmll
dyBzY3JlZW4gb2YgYSBkZXZpY2UgYW5kIGNhbiB0aGVyZWZvcmUgYmUgdXNlZCB0bwotICAvLyBh
c3Npc3QgZGV2aWNlIHN3aXRjaGluZyAoY2xvc2UgdG8gZWFyIDw9PiB1c2UgaGVhZHNldCBlYXJw
aWVjZSBpZgotICAvLyBhdmFpbGFibGUsIGZhciBmcm9tIGVhciA8PT4gdXNlIHNwZWFrZXIgcGhv
bmUpLgotICBwcml2YXRlIEFwcFJUQ1Byb3hpbWl0eVNlbnNvciBwcm94aW1pdHlTZW5zb3IgPSBu
dWxsOwotCi0gIC8vIENvbnRhaW5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYXVkaW8gZGV2aWNl
LgotICBwcml2YXRlIEF1ZGlvRGV2aWNlIHNlbGVjdGVkQXVkaW9EZXZpY2U7Ci0KLSAgLy8gQ29u
dGFpbnMgYSBsaXN0IG9mIGF2YWlsYWJsZSBhdWRpbyBkZXZpY2VzLiBBIFNldCBjb2xsZWN0aW9u
IGlzIHVzZWQgdG8KLSAgLy8gYXZvaWQgZHVwbGljYXRlIGVsZW1lbnRzLgotICBwcml2YXRlIGZp
bmFsIFNldDxBdWRpb0RldmljZT4gYXVkaW9EZXZpY2VzID0gbmV3IEhhc2hTZXQ8QXVkaW9EZXZp
Y2U+KCk7Ci0KLSAgLy8gQnJvYWRjYXN0IHJlY2VpdmVyIGZvciB3aXJlZCBoZWFkc2V0IGludGVu
dCBicm9hZGNhc3RzLgotICBwcml2YXRlIEJyb2FkY2FzdFJlY2VpdmVyIHdpcmVkSGVhZHNldFJl
Y2VpdmVyOwotCi0gIC8vIENhbGxiYWNrIG1ldGhvZCBmb3IgY2hhbmdlcyBpbiBhdWRpbyBmb2N1
cy4KLSAgcHJpdmF0ZSBBdWRpb01hbmFnZXIuT25BdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIgYXVk
aW9Gb2N1c0NoYW5nZUxpc3RlbmVyOwotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVu
IHRoZSBwcm94aW1pdHkgc2Vuc29yIHJlcG9ydHMgYSBzdGF0ZSBjaGFuZ2UsCi0gIC8vIGUuZy4g
ZnJvbSAiTkVBUiB0byBGQVIiIG9yIGZyb20gIkZBUiB0byBORUFSIi4KLSAgcHJpdmF0ZSB2b2lk
IG9uUHJveGltaXR5U2Vuc29yQ2hhbmdlZFN0YXRlKCkgewotICAgIGlmICghdXNlU3BlYWtlcnBo
b25lLmVxdWFscyhTUEVBS0VSUEhPTkVfQVVUTykpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICAvLyBUaGUgcHJveGltaXR5IHNlbnNvciBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgd2hl
biB0aGVyZSBhcmUgZXhhY3RseSB0d28KLSAgICAvLyBhdmFpbGFibGUgYXVkaW8gZGV2aWNlcy4K
LSAgICBpZiAoYXVkaW9EZXZpY2VzLnNpemUoKSA9PSAyICYmIGF1ZGlvRGV2aWNlcy5jb250YWlu
cyhBcHBSVENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuRUFSUElFQ0UpCi0gICAgICAgICYmIGF1
ZGlvRGV2aWNlcy5jb250YWlucyhBcHBSVENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuU1BFQUtF
Ul9QSE9ORSkpIHsKLSAgICAgIGlmIChwcm94aW1pdHlTZW5zb3Iuc2Vuc29yUmVwb3J0c05lYXJT
dGF0ZSgpKSB7Ci0gICAgICAgIC8vIFNlbnNvciByZXBvcnRzIHRoYXQgYSAiaGFuZHNldCBpcyBi
ZWluZyBoZWxkIHVwIHRvIGEgcGVyc29uJ3MgZWFyIiwKLSAgICAgICAgLy8gb3IgInNvbWV0aGlu
ZyBpcyBjb3ZlcmluZyB0aGUgbGlnaHQgc2Vuc29yIi4KLSAgICAgICAgc2V0QXVkaW9EZXZpY2Uo
QXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNlLkVBUlBJRUNFKTsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFNlbnNvciByZXBvcnRzIHRoYXQgYSAiaGFuZHNldCBpcyByZW1vdmVkIGZy
b20gYSBwZXJzb24ncyBlYXIiLCBvcgotICAgICAgICAvLyAidGhlIGxpZ2h0IHNlbnNvciBpcyBu
byBsb25nZXIgY292ZXJlZCIuCi0gICAgICAgIHNldEF1ZGlvRGV2aWNlKEFwcFJUQ0F1ZGlvTWFu
YWdlci5BdWRpb0RldmljZS5TUEVBS0VSX1BIT05FKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICAvKiogQ29uc3RydWN0aW9uICovCi0gIHN0YXRpYyBBcHBSVENBdWRpb01hbmFnZXIgY3JlYXRl
KENvbnRleHQgY29udGV4dCwgUnVubmFibGUgZGV2aWNlU3RhdGVDaGFuZ2VMaXN0ZW5lcikgewot
ICAgIHJldHVybiBuZXcgQXBwUlRDQXVkaW9NYW5hZ2VyKGNvbnRleHQsIGRldmljZVN0YXRlQ2hh
bmdlTGlzdGVuZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBBcHBSVENBdWRpb01hbmFnZXIoQ29udGV4
dCBjb250ZXh0LCBSdW5uYWJsZSBkZXZpY2VTdGF0ZUNoYW5nZUxpc3RlbmVyKSB7Ci0gICAgYXBw
cnRjQ29udGV4dCA9IGNvbnRleHQ7Ci0gICAgb25TdGF0ZUNoYW5nZUxpc3RlbmVyID0gZGV2aWNl
U3RhdGVDaGFuZ2VMaXN0ZW5lcjsKLSAgICBhdWRpb01hbmFnZXIgPSAoKEF1ZGlvTWFuYWdlcikg
Y29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVESU9fU0VSVklDRSkpOwotCi0gICAg
U2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMgPSBQcmVmZXJlbmNlTWFuYWdlci5n
ZXREZWZhdWx0U2hhcmVkUHJlZmVyZW5jZXMoY29udGV4dCk7Ci0gICAgdXNlU3BlYWtlcnBob25l
ID0gc2hhcmVkUHJlZmVyZW5jZXMuZ2V0U3RyaW5nKGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5n
LnByZWZfc3BlYWtlcnBob25lX2tleSksCi0gICAgICAgIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfc3BlYWtlcnBob25lX2RlZmF1bHQpKTsKLQotICAgIGlmICh1c2VTcGVha2VycGhv
bmUuZXF1YWxzKFNQRUFLRVJQSE9ORV9GQUxTRSkpIHsKLSAgICAgIGRlZmF1bHRBdWRpb0Rldmlj
ZSA9IEF1ZGlvRGV2aWNlLkVBUlBJRUNFOwotICAgIH0gZWxzZSB7Ci0gICAgICBkZWZhdWx0QXVk
aW9EZXZpY2UgPSBBdWRpb0RldmljZS5TUEVBS0VSX1BIT05FOwotICAgIH0KLQotICAgIC8vIENy
ZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcHJveGltaXR5IHNlbnNvci4KLSAgICAvLyBUYWJsZXQg
ZGV2aWNlcyAoZS5nLiBOZXh1cyA3KSBkb2VzIG5vdCBzdXBwb3J0IHByb3hpbWl0eSBzZW5zb3Jz
LgotICAgIC8vIE5vdGUgdGhhdCwgdGhlIHNlbnNvciB3aWxsIG5vdCBiZSBhY3RpdmUgdW50aWwg
c3RhcnQoKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAgcHJveGltaXR5U2Vuc29yID0gQXBwUlRDUHJv
eGltaXR5U2Vuc29yLmNyZWF0ZShjb250ZXh0LCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAvLyBU
aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYSBzdGF0ZSBjaGFuZ2UgaXMgZGV0
ZWN0ZWQuCi0gICAgICAvLyBFeGFtcGxlOiB1c2VyIGhvbGRzIGhpcyBoYW5kIG92ZXIgdGhlIGRl
dmljZSAoY2xvc2VyIHRoYW4gfjUgY20pLAotICAgICAgLy8gb3IgcmVtb3ZlcyBoaXMgaGFuZCBm
cm9tIHRoZSBkZXZpY2UuCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIG9uUHJv
eGltaXR5U2Vuc29yQ2hhbmdlZFN0YXRlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgQXBwUlRD
VXRpbHMubG9nRGV2aWNlSW5mbyhUQUcpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdCgpIHsK
LSAgICBMb2cuZChUQUcsICJpbml0Iik7Ci0gICAgaWYgKGluaXRpYWxpemVkKSB7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3RvcmUgY3VycmVudCBhdWRpbyBzdGF0ZSBzbyB3ZSBj
YW4gcmVzdG9yZSBpdCB3aGVuIGNsb3NlKCkgaXMgY2FsbGVkLgotICAgIHNhdmVkQXVkaW9Nb2Rl
ID0gYXVkaW9NYW5hZ2VyLmdldE1vZGUoKTsKLSAgICBzYXZlZElzU3BlYWtlclBob25lT24gPSBh
dWRpb01hbmFnZXIuaXNTcGVha2VycGhvbmVPbigpOwotICAgIHNhdmVkSXNNaWNyb3Bob25lTXV0
ZSA9IGF1ZGlvTWFuYWdlci5pc01pY3JvcGhvbmVNdXRlKCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4g
QXVkaW9NYW5hZ2VyLk9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyIGluc3RhbmNlLgotICAgIGF1
ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lciA9IG5ldyBBdWRpb01hbmFnZXIuT25BdWRpb0ZvY3VzQ2hh
bmdlTGlzdGVuZXIoKSB7Ci0gICAgICAvLyBDYWxsZWQgb24gdGhlIGxpc3RlbmVyIHRvIG5vdGlm
eSBpZiB0aGUgYXVkaW8gZm9jdXMgZm9yIHRoaXMgbGlzdGVuZXIgaGFzIGJlZW4gY2hhbmdlZC4K
LSAgICAgIC8vIFRoZSB8Zm9jdXNDaGFuZ2V8IHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBm
b2N1cyB3YXMgZ2FpbmVkLCB3aGV0aGVyIHRoZSBmb2N1cyB3YXMgbG9zdCwKLSAgICAgIC8vIGFu
ZCB3aGV0aGVyIHRoYXQgbG9zcyBpcyB0cmFuc2llbnQsIG9yIHdoZXRoZXIgdGhlIG5ldyBmb2N1
cyBob2xkZXIgd2lsbCBob2xkIGl0IGZvciBhbgotICAgICAgLy8gdW5rbm93biBhbW91bnQgb2Yg
dGltZS4KLSAgICAgIC8vIFRPRE8oaGVucmlrYSk6IHBvc3NpYmx5IGV4dGVuZCBzdXBwb3J0IG9m
IGhhbmRsaW5nIGF1ZGlvLWZvY3VzIGNoYW5nZXMuIE9ubHkgY29udGFpbnMKLSAgICAgIC8vIGxv
Z2dpbmcgZm9yIG5vdy4KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25BdWRp
b0ZvY3VzQ2hhbmdlKGludCBmb2N1c0NoYW5nZSkgewotICAgICAgICBTdHJpbmcgdHlwZU9mQ2hh
bmdlID0gIkFVRElPRk9DVVNfTk9UX0RFRklORUQiOwotICAgICAgICBzd2l0Y2ggKGZvY3VzQ2hh
bmdlKSB7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlOOgotICAg
ICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfR0FJTiI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU5fVFJBTlNJ
RU5UOgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfR0FJTl9UUkFOU0lF
TlQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVE
SU9GT0NVU19HQUlOX1RSQU5TSUVOVF9FWENMVVNJVkU6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFu
Z2UgPSAiQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVF9FWENMVVNJVkUiOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlOX1RSQU5T
SUVOVF9NQVlfRFVDSzoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0dB
SU5fVFJBTlNJRU5UX01BWV9EVUNLIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfTE9TUzoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5n
ZSA9ICJBVURJT0ZPQ1VTX0xPU1MiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19MT1NTX1RSQU5TSUVOVDoKLSAgICAgICAgICAgIHR5
cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5UIjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfTE9TU19UUkFOU0lF
TlRfQ0FOX0RVQ0s6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19MT1NT
X1RSQU5TSUVOVF9DQU5fRFVDSyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfSU5WQUxJRCI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcsICJvbkF1ZGlv
Rm9jdXNDaGFuZ2U6ICIgKyB0eXBlT2ZDaGFuZ2UpOwotICAgICAgfQotICAgIH07Ci0KLSAgICAv
LyBSZXF1ZXN0IGF1ZGlvIHBsYXlvdXQgZm9jdXMgKHdpdGhvdXQgZHVja2luZykgYW5kIGluc3Rh
bGwgbGlzdGVuZXIgZm9yIGNoYW5nZXMgaW4gZm9jdXMuCi0gICAgaW50IHJlc3VsdCA9IGF1ZGlv
TWFuYWdlci5yZXF1ZXN0QXVkaW9Gb2N1cyhhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIsCi0gICAg
ICAgIEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgQXVkaW9NYW5hZ2VyLkFVRElPRk9D
VVNfR0FJTl9UUkFOU0lFTlQpOwotICAgIGlmIChyZXN1bHQgPT0gQXVkaW9NYW5hZ2VyLkFVRElP
Rk9DVVNfUkVRVUVTVF9HUkFOVEVEKSB7Ci0gICAgICBMb2cuZChUQUcsICJBdWRpbyBmb2N1cyBy
ZXF1ZXN0IGdyYW50ZWQgZm9yIFZPSUNFX0NBTEwgc3RyZWFtcyIpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBMb2cuZShUQUcsICJBdWRpbyBmb2N1cyByZXF1ZXN0IGZhaWxlZCIpOwotICAgIH0KLQot
ICAgIC8vIFN0YXJ0IGJ5IHNldHRpbmcgTU9ERV9JTl9DT01NVU5JQ0FUSU9OIGFzIGRlZmF1bHQg
YXVkaW8gbW9kZS4gSXQgaXMKLSAgICAvLyByZXF1aXJlZCB0byBiZSBpbiB0aGlzIG1vZGUgd2hl
biBwbGF5b3V0IGFuZC9vciByZWNvcmRpbmcgc3RhcnRzIGZvcgotICAgIC8vIGJlc3QgcG9zc2li
bGUgVm9JUCBwZXJmb3JtYW5jZS4KLSAgICAvLyBUT0RPKGhlbnJpa2EpOiB3ZSBtaWdoIHdhbnQg
dG8gc3RhcnQgd2l0aCBSSU5HVE9ORSBtb2RlIGhlcmUgaW5zdGVhZC4KLSAgICBhdWRpb01hbmFn
ZXIuc2V0TW9kZShBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OKTsKLQotICAgIC8v
IEFsd2F5cyBkaXNhYmxlIG1pY3JvcGhvbmUgbXV0ZSBkdXJpbmcgYSBXZWJSVEMgY2FsbC4KLSAg
ICBzZXRNaWNyb3Bob25lTXV0ZShmYWxzZSk7Ci0KLSAgICAvLyBEbyBpbml0aWFsIHNlbGVjdGlv
biBvZiBhdWRpbyBkZXZpY2UuIFRoaXMgc2V0dGluZyBjYW4gbGF0ZXIgYmUgY2hhbmdlZAotICAg
IC8vIGVpdGhlciBieSBhZGRpbmcvcmVtb3ZpbmcgYSB3aXJlZCBoZWFkc2V0IG9yIGJ5IGNvdmVy
aW5nL3VuY292ZXJpbmcgdGhlCi0gICAgLy8gcHJveGltaXR5IHNlbnNvci4KLSAgICB1cGRhdGVB
dWRpb0RldmljZVN0YXRlKGhhc1dpcmVkSGVhZHNldCgpKTsKLQotICAgIC8vIFJlZ2lzdGVyIHJl
Y2VpdmVyIGZvciBicm9hZGNhc3QgaW50ZW50cyByZWxhdGVkIHRvIGFkZGluZy9yZW1vdmluZyBh
Ci0gICAgLy8gd2lyZWQgaGVhZHNldCAoSW50ZW50LkFDVElPTl9IRUFEU0VUX1BMVUcpLgotICAg
IHJlZ2lzdGVyRm9yV2lyZWRIZWFkc2V0SW50ZW50QnJvYWRjYXN0KCk7Ci0KLSAgICBpbml0aWFs
aXplZCA9IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKLSAgICBMb2cuZChU
QUcsICJjbG9zZSIpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICB1bnJlZ2lzdGVyRm9yV2lyZWRIZWFkc2V0SW50ZW50QnJvYWRjYXN0KCk7Ci0K
LSAgICAvLyBSZXN0b3JlIHByZXZpb3VzbHkgc3RvcmVkIGF1ZGlvIHN0YXRlcy4KLSAgICBzZXRT
cGVha2VycGhvbmVPbihzYXZlZElzU3BlYWtlclBob25lT24pOwotICAgIHNldE1pY3JvcGhvbmVN
dXRlKHNhdmVkSXNNaWNyb3Bob25lTXV0ZSk7Ci0gICAgYXVkaW9NYW5hZ2VyLnNldE1vZGUoc2F2
ZWRBdWRpb01vZGUpOwotCi0gICAgLy8gQWJhbmRvbiBhdWRpbyBmb2N1cy4gR2l2ZXMgdGhlIHBy
ZXZpb3VzIGZvY3VzIG93bmVyLCBpZiBhbnksIGZvY3VzLgotICAgIGF1ZGlvTWFuYWdlci5hYmFu
ZG9uQXVkaW9Gb2N1cyhhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIpOwotICAgIGF1ZGlvRm9jdXND
aGFuZ2VMaXN0ZW5lciA9IG51bGw7Ci0gICAgTG9nLmQoVEFHLCAiQWJhbmRvbmVkIGF1ZGlvIGZv
Y3VzIGZvciBWT0lDRV9DQUxMIHN0cmVhbXMiKTsKLQotICAgIGlmIChwcm94aW1pdHlTZW5zb3Ig
IT0gbnVsbCkgewotICAgICAgcHJveGltaXR5U2Vuc29yLnN0b3AoKTsKLSAgICAgIHByb3hpbWl0
eVNlbnNvciA9IG51bGw7Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgfQot
Ci0gIC8qKiBDaGFuZ2VzIHNlbGVjdGlvbiBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBhdWRpbyBk
ZXZpY2UuICovCi0gIHB1YmxpYyB2b2lkIHNldEF1ZGlvRGV2aWNlKEF1ZGlvRGV2aWNlIGRldmlj
ZSkgewotICAgIExvZy5kKFRBRywgInNldEF1ZGlvRGV2aWNlKGRldmljZT0iICsgZGV2aWNlICsg
IikiKTsKLSAgICBBcHBSVENVdGlscy5hc3NlcnRJc1RydWUoYXVkaW9EZXZpY2VzLmNvbnRhaW5z
KGRldmljZSkpOwotCi0gICAgc3dpdGNoIChkZXZpY2UpIHsKLSAgICAgIGNhc2UgU1BFQUtFUl9Q
SE9ORToKLSAgICAgICAgc2V0U3BlYWtlcnBob25lT24odHJ1ZSk7Ci0gICAgICAgIHNlbGVjdGVk
QXVkaW9EZXZpY2UgPSBBdWRpb0RldmljZS5TUEVBS0VSX1BIT05FOwotICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgRUFSUElFQ0U6Ci0gICAgICAgIHNldFNwZWFrZXJwaG9uZU9uKGZhbHNlKTsK
LSAgICAgICAgc2VsZWN0ZWRBdWRpb0RldmljZSA9IEF1ZGlvRGV2aWNlLkVBUlBJRUNFOwotICAg
ICAgICBicmVhazsKLSAgICAgIGNhc2UgV0lSRURfSEVBRFNFVDoKLSAgICAgICAgc2V0U3BlYWtl
cnBob25lT24oZmFsc2UpOwotICAgICAgICBzZWxlY3RlZEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZp
Y2UuV0lSRURfSEVBRFNFVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAg
ICBMb2cuZShUQUcsICJJbnZhbGlkIGF1ZGlvIGRldmljZSBzZWxlY3Rpb24iKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIG9uQXVkaW9NYW5hZ2VyQ2hhbmdlZFN0YXRlKCk7Ci0gIH0KLQot
ICAvKiogUmV0dXJucyBjdXJyZW50IHNldCBvZiBhdmFpbGFibGUvc2VsZWN0YWJsZSBhdWRpbyBk
ZXZpY2VzLiAqLwotICBwdWJsaWMgU2V0PEF1ZGlvRGV2aWNlPiBnZXRBdWRpb0RldmljZXMoKSB7
Ci0gICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChuZXcgSGFzaFNldDxBdWRp
b0RldmljZT4oYXVkaW9EZXZpY2VzKSk7Ci0gIH0KLQotICAvKiogUmV0dXJucyB0aGUgY3VycmVu
dGx5IHNlbGVjdGVkIGF1ZGlvIGRldmljZS4gKi8KLSAgcHVibGljIEF1ZGlvRGV2aWNlIGdldFNl
bGVjdGVkQXVkaW9EZXZpY2UoKSB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkQXVkaW9EZXZpY2U7Ci0g
IH0KLQotICAvKioKLSAgICogUmVnaXN0ZXJzIHJlY2VpdmVyIGZvciB0aGUgYnJvYWRjYXN0ZWQg
aW50ZW50IHdoZW4gYSB3aXJlZCBoZWFkc2V0IGlzCi0gICAqIHBsdWdnZWQgaW4gb3IgdW5wbHVn
Z2VkLiBUaGUgcmVjZWl2ZWQgaW50ZW50IHdpbGwgaGF2ZSBhbiBleHRyYQotICAgKiAnc3RhdGUn
IHZhbHVlIHdoZXJlIDAgbWVhbnMgdW5wbHVnZ2VkLCBhbmQgMSBtZWFucyBwbHVnZ2VkLgotICAg
Ki8KLSAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyRm9yV2lyZWRIZWFkc2V0SW50ZW50QnJvYWRjYXN0
KCkgewotICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKEludGVudC5B
Q1RJT05fSEVBRFNFVF9QTFVHKTsKLQotICAgIC8qKiBSZWNlaXZlciB3aGljaCBoYW5kbGVzIGNo
YW5nZXMgaW4gd2lyZWQgaGVhZHNldCBhdmFpbGFiaWxpdHkuICovCi0gICAgd2lyZWRIZWFkc2V0
UmVjZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgU1RBVEVfVU5QTFVHR0VEID0gMDsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBTVEFURV9QTFVHR0VEID0gMTsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBIQVNfTk9fTUlDID0gMDsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIQVNfTUlD
ID0gMTsKLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29u
dGV4dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGludCBzdGF0ZSA9IGludGVu
dC5nZXRJbnRFeHRyYSgic3RhdGUiLCBTVEFURV9VTlBMVUdHRUQpOwotICAgICAgICBpbnQgbWlj
cm9waG9uZSA9IGludGVudC5nZXRJbnRFeHRyYSgibWljcm9waG9uZSIsIEhBU19OT19NSUMpOwot
ICAgICAgICBTdHJpbmcgbmFtZSA9IGludGVudC5nZXRTdHJpbmdFeHRyYSgibmFtZSIpOwotICAg
ICAgICBMb2cuZChUQUcsICJCcm9hZGNhc3RSZWNlaXZlci5vblJlY2VpdmUiICsgQXBwUlRDVXRp
bHMuZ2V0VGhyZWFkSW5mbygpICsgIjogIgotICAgICAgICAgICAgICAgICsgImE9IiArIGludGVu
dC5nZXRBY3Rpb24oKSArICIsIHM9IgotICAgICAgICAgICAgICAgICsgKHN0YXRlID09IFNUQVRF
X1VOUExVR0dFRCA/ICJ1bnBsdWdnZWQiIDogInBsdWdnZWQiKSArICIsIG09IgotICAgICAgICAg
ICAgICAgICsgKG1pY3JvcGhvbmUgPT0gSEFTX01JQyA/ICJtaWMiIDogIm5vIG1pYyIpICsgIiwg
bj0iICsgbmFtZSArICIsIHNiPSIKLSAgICAgICAgICAgICAgICArIGlzSW5pdGlhbFN0aWNreUJy
b2FkY2FzdCgpKTsKLQotICAgICAgICBib29sZWFuIGhhc1dpcmVkSGVhZHNldCA9IChzdGF0ZSA9
PSBTVEFURV9QTFVHR0VEKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICAgIGNh
c2UgU1RBVEVfVU5QTFVHR0VEOgotICAgICAgICAgICAgdXBkYXRlQXVkaW9EZXZpY2VTdGF0ZSho
YXNXaXJlZEhlYWRzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTVEFU
RV9QTFVHR0VEOgotICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXVkaW9EZXZpY2UgIT0gQXVkaW9E
ZXZpY2UuV0lSRURfSEVBRFNFVCkgewotICAgICAgICAgICAgICB1cGRhdGVBdWRpb0RldmljZVN0
YXRlKGhhc1dpcmVkSGVhZHNldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBzdGF0
ZSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotCi0g
ICAgYXBwcnRjQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKHdpcmVkSGVhZHNldFJlY2VpdmVyLCBm
aWx0ZXIpOwotICB9Ci0KLSAgLyoqIFVucmVnaXN0ZXIgcmVjZWl2ZXIgZm9yIGJyb2FkY2FzdGVk
IEFDVElPTl9IRUFEU0VUX1BMVUcgaW50ZW50LiAqLwotICBwcml2YXRlIHZvaWQgdW5yZWdpc3Rl
ckZvcldpcmVkSGVhZHNldEludGVudEJyb2FkY2FzdCgpIHsKLSAgICBhcHBydGNDb250ZXh0LnVu
cmVnaXN0ZXJSZWNlaXZlcih3aXJlZEhlYWRzZXRSZWNlaXZlcik7Ci0gICAgd2lyZWRIZWFkc2V0
UmVjZWl2ZXIgPSBudWxsOwotICB9Ci0KLSAgLyoqIFNldHMgdGhlIHNwZWFrZXIgcGhvbmUgbW9k
ZS4gKi8KLSAgcHJpdmF0ZSB2b2lkIHNldFNwZWFrZXJwaG9uZU9uKGJvb2xlYW4gb24pIHsKLSAg
ICBib29sZWFuIHdhc09uID0gYXVkaW9NYW5hZ2VyLmlzU3BlYWtlcnBob25lT24oKTsKLSAgICBp
ZiAod2FzT24gPT0gb24pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXVkaW9NYW5hZ2Vy
LnNldFNwZWFrZXJwaG9uZU9uKG9uKTsKLSAgfQotCi0gIC8qKiBTZXRzIHRoZSBtaWNyb3Bob25l
IG11dGUgc3RhdGUuICovCi0gIHByaXZhdGUgdm9pZCBzZXRNaWNyb3Bob25lTXV0ZShib29sZWFu
IG9uKSB7Ci0gICAgYm9vbGVhbiB3YXNNdXRlZCA9IGF1ZGlvTWFuYWdlci5pc01pY3JvcGhvbmVN
dXRlKCk7Ci0gICAgaWYgKHdhc011dGVkID09IG9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGF1ZGlvTWFuYWdlci5zZXRNaWNyb3Bob25lTXV0ZShvbik7Ci0gIH0KLQotICAvKiogR2V0
cyB0aGUgY3VycmVudCBlYXJwaWVjZSBzdGF0ZS4gKi8KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0Vh
cnBpZWNlKCkgewotICAgIHJldHVybiBhcHBydGNDb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCku
aGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX1RFTEVQSE9OWSk7Ci0gIH0K
LQotICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgYSB3aXJlZCBoZWFkc2V0IGlzIGNvbm5lY3Rl
ZCBvciBub3QuCi0gICAqIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5kaWNhdGlvbiB0aGF0IGF1ZGlv
IHBsYXliYWNrIGlzIGFjdHVhbGx5IG92ZXIKLSAgICogdGhlIHdpcmVkIGhlYWRzZXQgYXMgYXVk
aW8gcm91dGluZyBkZXBlbmRzIG9uIG90aGVyIGNvbmRpdGlvbnMuIFdlCi0gICAqIG9ubHkgdXNl
IGl0IGFzIGFuIGVhcmx5IGluZGljYXRvciAoZHVyaW5nIGluaXRpYWxpemF0aW9uKSBvZiBhbiBh
dHRhY2hlZAotICAgKiB3aXJlZCBoZWFkc2V0LgotICAgKi8KLSAgQERlcHJlY2F0ZWQKLSAgcHJp
dmF0ZSBib29sZWFuIGhhc1dpcmVkSGVhZHNldCgpIHsKLSAgICByZXR1cm4gYXVkaW9NYW5hZ2Vy
LmlzV2lyZWRIZWFkc2V0T24oKTsKLSAgfQotCi0gIC8qKiBVcGRhdGUgbGlzdCBvZiBwb3NzaWJs
ZSBhdWRpbyBkZXZpY2VzIGFuZCBtYWtlIG5ldyBkZXZpY2Ugc2VsZWN0aW9uLiAqLwotICBwcml2
YXRlIHZvaWQgdXBkYXRlQXVkaW9EZXZpY2VTdGF0ZShib29sZWFuIGhhc1dpcmVkSGVhZHNldCkg
ewotICAgIC8vIFVwZGF0ZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXVkaW8gZGV2aWNlcy4KLSAg
ICBhdWRpb0RldmljZXMuY2xlYXIoKTsKLSAgICBpZiAoaGFzV2lyZWRIZWFkc2V0KSB7Ci0gICAg
ICAvLyBJZiBhIHdpcmVkIGhlYWRzZXQgaXMgY29ubmVjdGVkLCB0aGVuIGl0IGlzIHRoZSBvbmx5
IHBvc3NpYmxlIG9wdGlvbi4KLSAgICAgIGF1ZGlvRGV2aWNlcy5hZGQoQXVkaW9EZXZpY2UuV0lS
RURfSEVBRFNFVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE5vIHdpcmVkIGhlYWRzZXQsIGhl
bmNlIHRoZSBhdWRpby1kZXZpY2UgbGlzdCBjYW4gY29udGFpbiBzcGVha2VyCi0gICAgICAvLyBw
aG9uZSAob24gYSB0YWJsZXQpLCBvciBzcGVha2VyIHBob25lIGFuZCBlYXJwaWVjZSAob24gbW9i
aWxlIHBob25lKS4KLSAgICAgIGF1ZGlvRGV2aWNlcy5hZGQoQXVkaW9EZXZpY2UuU1BFQUtFUl9Q
SE9ORSk7Ci0gICAgICBpZiAoaGFzRWFycGllY2UoKSkgewotICAgICAgICBhdWRpb0RldmljZXMu
YWRkKEF1ZGlvRGV2aWNlLkVBUlBJRUNFKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgTG9nLmQoVEFH
LCAiYXVkaW9EZXZpY2VzOiAiICsgYXVkaW9EZXZpY2VzKTsKLQotICAgIC8vIFN3aXRjaCB0byBj
b3JyZWN0IGF1ZGlvIGRldmljZSBnaXZlbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXVkaW8gZGV2
aWNlcy4KLSAgICBpZiAoaGFzV2lyZWRIZWFkc2V0KSB7Ci0gICAgICBzZXRBdWRpb0RldmljZShB
dWRpb0RldmljZS5XSVJFRF9IRUFEU0VUKTsKLSAgICB9IGVsc2UgewotICAgICAgc2V0QXVkaW9E
ZXZpY2UoZGVmYXVsdEF1ZGlvRGV2aWNlKTsKLSAgICB9Ci0gIH0KLQotICAvKiogQ2FsbGVkIGVh
Y2ggdGltZSBhIG5ldyBhdWRpbyBkZXZpY2UgaGFzIGJlZW4gYWRkZWQgb3IgcmVtb3ZlZC4gKi8K
LSAgcHJpdmF0ZSB2b2lkIG9uQXVkaW9NYW5hZ2VyQ2hhbmdlZFN0YXRlKCkgewotICAgIExvZy5k
KFRBRywgIm9uQXVkaW9NYW5hZ2VyQ2hhbmdlZFN0YXRlOiBkZXZpY2VzPSIgKyBhdWRpb0Rldmlj
ZXMgKyAiLCBzZWxlY3RlZD0iCi0gICAgICAgICAgICArIHNlbGVjdGVkQXVkaW9EZXZpY2UpOwot
Ci0gICAgLy8gRW5hYmxlIHRoZSBwcm94aW1pdHkgc2Vuc29yIGlmIHRoZXJlIGFyZSB0d28gYXZh
aWxhYmxlIGF1ZGlvIGRldmljZXMKLSAgICAvLyBpbiB0aGUgbGlzdC4gR2l2ZW4gdGhlIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24sIHdlIGtub3cgdGhhdCB0aGUgY2hvaWNlCi0gICAgLy8gd2lsbCB0
aGVuIGJlIGJldHdlZW4gRUFSUElFQ0UgYW5kIFNQRUFLRVJfUEhPTkUuCi0gICAgaWYgKGF1ZGlv
RGV2aWNlcy5zaXplKCkgPT0gMikgewotICAgICAgQXBwUlRDVXRpbHMuYXNzZXJ0SXNUcnVlKGF1
ZGlvRGV2aWNlcy5jb250YWlucyhBdWRpb0RldmljZS5FQVJQSUVDRSkKLSAgICAgICAgICAmJiBh
dWRpb0RldmljZXMuY29udGFpbnMoQXVkaW9EZXZpY2UuU1BFQUtFUl9QSE9ORSkpOwotICAgICAg
Ly8gU3RhcnQgdGhlIHByb3hpbWl0eSBzZW5zb3IuCi0gICAgICBwcm94aW1pdHlTZW5zb3Iuc3Rh
cnQoKTsKLSAgICB9IGVsc2UgaWYgKGF1ZGlvRGV2aWNlcy5zaXplKCkgPT0gMSkgewotICAgICAg
Ly8gU3RvcCB0aGUgcHJveGltaXR5IHNlbnNvciBzaW5jZSBpdCBpcyBubyBsb25nZXIgbmVlZGVk
LgotICAgICAgcHJveGltaXR5U2Vuc29yLnN0b3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9n
LmUoVEFHLCAiSW52YWxpZCBkZXZpY2UgbGlzdCIpOwotICAgIH0KLQotICAgIGlmIChvblN0YXRl
Q2hhbmdlTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgLy8gUnVuIGNhbGxiYWNrIHRvIG5vdGlm
eSBhIGxpc3RlbmluZyBjbGllbnQuIFRoZSBjbGllbnQgY2FuIHRoZW4KLSAgICAgIC8vIHVzZSBw
dWJsaWMgZ2V0dGVycyB0byBxdWVyeSB0aGUgbmV3IHN0YXRlLgotICAgICAgb25TdGF0ZUNoYW5n
ZUxpc3RlbmVyLnJ1bigpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNw
b3QvYXBwcnRjL0FwcFJUQ0NsaWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy9BcHBSVENDbGllbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0NsaWVudC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMTMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNw
b3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlw
dGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEFwcFJUQ0NsaWVudCBp
cyB0aGUgaW50ZXJmYWNlIHJlcHJlc2VudGluZyBhbiBBcHBSVEMgY2xpZW50LgotICovCi1wdWJs
aWMgaW50ZXJmYWNlIEFwcFJUQ0NsaWVudCB7Ci0gIC8qKgotICAgKiBTdHJ1Y3QgaG9sZGluZyB0
aGUgY29ubmVjdGlvbiBwYXJhbWV0ZXJzIG9mIGFuIEFwcFJUQyByb29tLgotICAgKi8KLSAgY2xh
c3MgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIHsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHJv
b21Vcmw7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyByb29tSWQ7Ci0gICAgcHVibGljIGZpbmFs
IGJvb2xlYW4gbG9vcGJhY2s7Ci0gICAgcHVibGljIFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyhT
dHJpbmcgcm9vbVVybCwgU3RyaW5nIHJvb21JZCwgYm9vbGVhbiBsb29wYmFjaykgewotICAgICAg
dGhpcy5yb29tVXJsID0gcm9vbVVybDsKLSAgICAgIHRoaXMucm9vbUlkID0gcm9vbUlkOwotICAg
ICAgdGhpcy5sb29wYmFjayA9IGxvb3BiYWNrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBB
c3luY2hyb25vdXNseSBjb25uZWN0IHRvIGFuIEFwcFJUQyByb29tIFVSTCB1c2luZyBzdXBwbGll
ZCBjb25uZWN0aW9uCi0gICAqIHBhcmFtZXRlcnMuIE9uY2UgY29ubmVjdGlvbiBpcyBlc3RhYmxp
c2hlZCBvbkNvbm5lY3RlZFRvUm9vbSgpCi0gICAqIGNhbGxiYWNrIHdpdGggcm9vbSBwYXJhbWV0
ZXJzIGlzIGludm9rZWQuCi0gICAqLwotICB2b2lkIGNvbm5lY3RUb1Jvb20oUm9vbUNvbm5lY3Rp
b25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJzKTsKLQotICAvKioKLSAgICogU2VuZCBv
ZmZlciBTRFAgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICAgKi8KLSAgdm9pZCBzZW5kT2Zm
ZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgLyoqCi0gICAqIFNlbmQg
YW5zd2VyIFNEUCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gICAqLwotICB2b2lkIHNlbmRB
bnN3ZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgLyoqCi0gICAqIFNl
bmQgSWNlIGNhbmRpZGF0ZSB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gICAqLwotICB2b2lk
IHNlbmRMb2NhbEljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQot
ICAvKioKLSAgICogU2VuZCByZW1vdmVkIElDRSBjYW5kaWRhdGVzIHRvIHRoZSBvdGhlciBwYXJ0
aWNpcGFudC4KLSAgICovCi0gIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlUmVtb3ZhbHMoZmlu
YWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7Ci0KLSAgLyoqCi0gICAqIERpc2Nvbm5lY3Qg
ZnJvbSByb29tLgotICAgKi8KLSAgdm9pZCBkaXNjb25uZWN0RnJvbVJvb20oKTsKLQotICAvKioK
LSAgICogU3RydWN0IGhvbGRpbmcgdGhlIHNpZ25hbGluZyBwYXJhbWV0ZXJzIG9mIGFuIEFwcFJU
QyByb29tLgotICAgKi8KLSAgY2xhc3MgU2lnbmFsaW5nUGFyYW1ldGVycyB7Ci0gICAgcHVibGlj
IGZpbmFsIExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzOwotICAgIHB1
YmxpYyBmaW5hbCBib29sZWFuIGluaXRpYXRvcjsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGNs
aWVudElkOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgd3NzVXJsOwotICAgIHB1YmxpYyBmaW5h
bCBTdHJpbmcgd3NzUG9zdFVybDsKLSAgICBwdWJsaWMgZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9u
IG9mZmVyU2RwOwotICAgIHB1YmxpYyBmaW5hbCBMaXN0PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlk
YXRlczsKLQotICAgIHB1YmxpYyBTaWduYWxpbmdQYXJhbWV0ZXJzKExpc3Q8UGVlckNvbm5lY3Rp
b24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzLCBib29sZWFuIGluaXRpYXRvciwKLSAgICAgICAgU3Ry
aW5nIGNsaWVudElkLCBTdHJpbmcgd3NzVXJsLCBTdHJpbmcgd3NzUG9zdFVybCwgU2Vzc2lvbkRl
c2NyaXB0aW9uIG9mZmVyU2RwLAotICAgICAgICBMaXN0PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlk
YXRlcykgewotICAgICAgdGhpcy5pY2VTZXJ2ZXJzID0gaWNlU2VydmVyczsKLSAgICAgIHRoaXMu
aW5pdGlhdG9yID0gaW5pdGlhdG9yOwotICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkOwot
ICAgICAgdGhpcy53c3NVcmwgPSB3c3NVcmw7Ci0gICAgICB0aGlzLndzc1Bvc3RVcmwgPSB3c3NQ
b3N0VXJsOwotICAgICAgdGhpcy5vZmZlclNkcCA9IG9mZmVyU2RwOwotICAgICAgdGhpcy5pY2VD
YW5kaWRhdGVzID0gaWNlQ2FuZGlkYXRlczsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2Fs
bGJhY2sgaW50ZXJmYWNlIGZvciBtZXNzYWdlcyBkZWxpdmVyZWQgb24gc2lnbmFsaW5nIGNoYW5u
ZWwuCi0gICAqCi0gICAqIDxwPk1ldGhvZHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaW52b2tlZCBv
biB0aGUgVUkgdGhyZWFkIG9mIHxhY3Rpdml0eXwuCi0gICAqLwotICBpbnRlcmZhY2UgU2lnbmFs
aW5nRXZlbnRzIHsKLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHRoZSByb29t
J3Mgc2lnbmFsaW5nIHBhcmFtZXRlcnMKLSAgICAgKiBTaWduYWxpbmdQYXJhbWV0ZXJzIGFyZSBl
eHRyYWN0ZWQuCi0gICAgICovCi0gICAgdm9pZCBvbkNvbm5lY3RlZFRvUm9vbShmaW5hbCBTaWdu
YWxpbmdQYXJhbWV0ZXJzIHBhcmFtcyk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJl
ZCBvbmNlIHJlbW90ZSBTRFAgaXMgcmVjZWl2ZWQuCi0gICAgICovCi0gICAgdm9pZCBvblJlbW90
ZURlc2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gICAgLyoqCi0g
ICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSByZW1vdGUgSWNlIGNhbmRpZGF0ZSBpcyByZWNlaXZl
ZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uUmVtb3RlSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRp
ZGF0ZSBjYW5kaWRhdGUpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBy
ZW1vdGUgSWNlIGNhbmRpZGF0ZSByZW1vdmFscyBhcmUgcmVjZWl2ZWQuCi0gICAgICovCi0gICAg
dm9pZCBvblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNh
bmRpZGF0ZXMpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBjaGFubmVs
IGlzIGNsb3NlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uQ2hhbm5lbENsb3NlKCk7Ci0KLSAgICAv
KioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGNoYW5uZWwgZXJyb3IgaGFwcGVuZWQuCi0g
ICAgICovCi0gICAgdm9pZCBvbkNoYW5uZWxFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24p
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDUHJveGlt
aXR5U2Vuc29yLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L0FwcFJUQ1Byb3hpbWl0eVNlbnNvci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Ny
Yy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDUHJveGltaXR5U2Vuc29yLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRD
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
YXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5BcHBSVENV
dGlsczsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQu
aGFyZHdhcmUuU2Vuc29yOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuU2Vuc29yRXZlbnQ7Ci1p
bXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3JFdmVudExpc3RlbmVyOwotaW1wb3J0IGFuZHJv
aWQuaGFyZHdhcmUuU2Vuc29yTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1w
b3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBvcmcud2VicnRjLlRocmVhZFV0aWxzOwot
Ci0vKioKLSAqIEFwcFJUQ1Byb3hpbWl0eVNlbnNvciBtYW5hZ2VzIGZ1bmN0aW9ucyByZWxhdGVk
IHRvIHRoZSBwcm94aW1pdHkgc2Vuc29yIGluCi0gKiB0aGUgQXBwUlRDIGRlbW8uCi0gKiBPbiBt
b3N0IGRldmljZSwgdGhlIHByb3hpbWl0eSBzZW5zb3IgaXMgaW1wbGVtZW50ZWQgYXMgYSBib29s
ZWFuLXNlbnNvci4KLSAqIEl0IHJldHVybnMganVzdCB0d28gdmFsdWVzICJORUFSIiBvciAiRkFS
Ii4gVGhyZXNob2xkaW5nIGlzIGRvbmUgb24gdGhlIExVWAotICogdmFsdWUgaS5lLiB0aGUgTFVY
IHZhbHVlIG9mIHRoZSBsaWdodCBzZW5zb3IgaXMgY29tcGFyZWQgd2l0aCBhIHRocmVzaG9sZC4K
LSAqIEEgTFVYLXZhbHVlIG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkIG1lYW5zIHRoZSBwcm94aW1p
dHkgc2Vuc29yIHJldHVybnMgIkZBUiIuCi0gKiBBbnl0aGluZyBsZXNzIHRoYW4gdGhlIHRocmVz
aG9sZCB2YWx1ZSBhbmQgdGhlIHNlbnNvciAgcmV0dXJucyAiTkVBUiIuCi0gKi8KLXB1YmxpYyBj
bGFzcyBBcHBSVENQcm94aW1pdHlTZW5zb3IgaW1wbGVtZW50cyBTZW5zb3JFdmVudExpc3RlbmVy
IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBcHBSVENQcm94aW1pdHlT
ZW5zb3IiOwotCi0gIC8vIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQsIHN0YXJ0ZWQgYW5k
IHN0b3BwZWQgb24gb25lIHRocmVhZAotICAvLyAoZS5nLiB0aGUgbWFpbiB0aHJlYWQpLiBXZSB1
c2UgfG5vblRocmVhZFNhZmV8IHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMKLSAgLy8gdGhlIGNhc2Uu
IE9ubHkgYWN0aXZlIHdoZW4gfERFQlVHfCBpcyBzZXQgdG8gdHJ1ZS4KLSAgcHJpdmF0ZSBmaW5h
bCBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyIHRocmVhZENoZWNrZXIgPSBuZXcgVGhyZWFkVXRp
bHMuVGhyZWFkQ2hlY2tlcigpOwotCi0gIHByaXZhdGUgZmluYWwgUnVubmFibGUgb25TZW5zb3JT
dGF0ZUxpc3RlbmVyOwotICBwcml2YXRlIGZpbmFsIFNlbnNvck1hbmFnZXIgc2Vuc29yTWFuYWdl
cjsKLSAgcHJpdmF0ZSBTZW5zb3IgcHJveGltaXR5U2Vuc29yID0gbnVsbDsKLSAgcHJpdmF0ZSBi
b29sZWFuIGxhc3RTdGF0ZVJlcG9ydElzTmVhciA9IGZhbHNlOwotCi0gIC8qKiBDb25zdHJ1Y3Rp
b24gKi8KLSAgc3RhdGljIEFwcFJUQ1Byb3hpbWl0eVNlbnNvciBjcmVhdGUoQ29udGV4dCBjb250
ZXh0LCBSdW5uYWJsZSBzZW5zb3JTdGF0ZUxpc3RlbmVyKSB7Ci0gICAgcmV0dXJuIG5ldyBBcHBS
VENQcm94aW1pdHlTZW5zb3IoY29udGV4dCwgc2Vuc29yU3RhdGVMaXN0ZW5lcik7Ci0gIH0KLQot
ICBwcml2YXRlIEFwcFJUQ1Byb3hpbWl0eVNlbnNvcihDb250ZXh0IGNvbnRleHQsIFJ1bm5hYmxl
IHNlbnNvclN0YXRlTGlzdGVuZXIpIHsKLSAgICBMb2cuZChUQUcsICJBcHBSVENQcm94aW1pdHlT
ZW5zb3IiICsgQXBwUlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICBvblNlbnNvclN0YXRl
TGlzdGVuZXIgPSBzZW5zb3JTdGF0ZUxpc3RlbmVyOwotICAgIHNlbnNvck1hbmFnZXIgPSAoKFNl
bnNvck1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlNFTlNPUl9TRVJW
SUNFKSk7Ci0gIH0KLQotICAvKioKLSAgICogQWN0aXZhdGUgdGhlIHByb3hpbWl0eSBzZW5zb3Iu
IEFsc28gZG8gaW5pdGlhbGl6YXRpb24gaWYgY2FsbGVkIGZvciB0aGUKLSAgICogZmlyc3QgdGlt
ZS4KLSAgICovCi0gIHB1YmxpYyBib29sZWFuIHN0YXJ0KCkgewotICAgIHRocmVhZENoZWNrZXIu
Y2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2cuZChUQUcsICJzdGFydCIgKyBBcHBSVENV
dGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIGlmICghaW5pdERlZmF1bHRTZW5zb3IoKSkgewot
ICAgICAgLy8gUHJveGltaXR5IHNlbnNvciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNl
LgotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzZW5zb3JNYW5hZ2VyLnJlZ2lzdGVy
TGlzdGVuZXIodGhpcywgcHJveGltaXR5U2Vuc29yLCBTZW5zb3JNYW5hZ2VyLlNFTlNPUl9ERUxB
WV9OT1JNQUwpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIERlYWN0aXZhdGUgdGhl
IHByb3hpbWl0eSBzZW5zb3IuICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgdGhyZWFk
Q2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIExvZy5kKFRBRywgInN0b3AiICsg
QXBwUlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICBpZiAocHJveGltaXR5U2Vuc29yID09
IG51bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2Vuc29yTWFuYWdlci51bnJlZ2lz
dGVyTGlzdGVuZXIodGhpcywgcHJveGltaXR5U2Vuc29yKTsKLSAgfQotCi0gIC8qKiBHZXR0ZXIg
Zm9yIGxhc3QgcmVwb3J0ZWQgc3RhdGUuIFNldCB0byB0cnVlIGlmICJuZWFyIiBpcyByZXBvcnRl
ZC4gKi8KLSAgcHVibGljIGJvb2xlYW4gc2Vuc29yUmVwb3J0c05lYXJTdGF0ZSgpIHsKLSAgICB0
aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgcmV0dXJuIGxhc3RTdGF0
ZVJlcG9ydElzTmVhcjsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmluYWwgdm9pZCBv
bkFjY3VyYWN5Q2hhbmdlZChTZW5zb3Igc2Vuc29yLCBpbnQgYWNjdXJhY3kpIHsKLSAgICB0aHJl
YWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgQXBwUlRDVXRpbHMuYXNzZXJ0
SXNUcnVlKHNlbnNvci5nZXRUeXBlKCkgPT0gU2Vuc29yLlRZUEVfUFJPWElNSVRZKTsKLSAgICBp
ZiAoYWNjdXJhY3kgPT0gU2Vuc29yTWFuYWdlci5TRU5TT1JfU1RBVFVTX1VOUkVMSUFCTEUpIHsK
LSAgICAgIExvZy5lKFRBRywgIlRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhpcyBzZW5zb3IgY2Fu
bm90IGJlIHRydXN0ZWQiKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZp
bmFsIHZvaWQgb25TZW5zb3JDaGFuZ2VkKFNlbnNvckV2ZW50IGV2ZW50KSB7Ci0gICAgdGhyZWFk
Q2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIEFwcFJUQ1V0aWxzLmFzc2VydElz
VHJ1ZShldmVudC5zZW5zb3IuZ2V0VHlwZSgpID09IFNlbnNvci5UWVBFX1BST1hJTUlUWSk7Ci0g
ICAgLy8gQXMgYSBiZXN0IHByYWN0aWNlOyBkbyBhcyBsaXR0bGUgYXMgcG9zc2libGUgd2l0aGlu
IHRoaXMgbWV0aG9kIGFuZAotICAgIC8vIGF2b2lkIGJsb2NraW5nLgotICAgIGZsb2F0IGRpc3Rh
bmNlSW5DZW50aW1ldGVycyA9IGV2ZW50LnZhbHVlc1swXTsKLSAgICBpZiAoZGlzdGFuY2VJbkNl
bnRpbWV0ZXJzIDwgcHJveGltaXR5U2Vuc29yLmdldE1heGltdW1SYW5nZSgpKSB7Ci0gICAgICBM
b2cuZChUQUcsICJQcm94aW1pdHkgc2Vuc29yID0+IE5FQVIgc3RhdGUiKTsKLSAgICAgIGxhc3RT
dGF0ZVJlcG9ydElzTmVhciA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywg
IlByb3hpbWl0eSBzZW5zb3IgPT4gRkFSIHN0YXRlIik7Ci0gICAgICBsYXN0U3RhdGVSZXBvcnRJ
c05lYXIgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBSZXBvcnQgYWJvdXQgbmV3IHN0YXRlIHRv
IGxpc3RlbmluZyBjbGllbnQuIENsaWVudCBjYW4gdGhlbiBjYWxsCi0gICAgLy8gc2Vuc29yUmVw
b3J0c05lYXJTdGF0ZSgpIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHN0YXRlIChORUFSIG9yIEZBUiku
Ci0gICAgaWYgKG9uU2Vuc29yU3RhdGVMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICBvblNlbnNv
clN0YXRlTGlzdGVuZXIucnVuKCk7Ci0gICAgfQotCi0gICAgTG9nLmQoVEFHLCAib25TZW5zb3JD
aGFuZ2VkIiArIEFwcFJUQ1V0aWxzLmdldFRocmVhZEluZm8oKSArICI6ICIKLSAgICAgICAgICAg
ICsgImFjY3VyYWN5PSIgKyBldmVudC5hY2N1cmFjeSArICIsIHRpbWVzdGFtcD0iICsgZXZlbnQu
dGltZXN0YW1wICsgIiwgZGlzdGFuY2U9IgotICAgICAgICAgICAgKyBldmVudC52YWx1ZXNbMF0p
OwotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBkZWZhdWx0IHByb3hpbWl0eSBzZW5zb3IgaWYgaXQg
ZXhpc3RzLiBUYWJsZXQgZGV2aWNlcyAoZS5nLiBOZXh1cyA3KQotICAgKiBkb2VzIG5vdCBzdXBw
b3J0IHRoaXMgdHlwZSBvZiBzZW5zb3IgYW5kIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQgaW4gc3Vj
aAotICAgKiBjYXNlcy4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0RGVmYXVsdFNlbnNv
cigpIHsKLSAgICBpZiAocHJveGltaXR5U2Vuc29yICE9IG51bGwpIHsKLSAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLSAgICBwcm94aW1pdHlTZW5zb3IgPSBzZW5zb3JNYW5hZ2VyLmdldERlZmF1
bHRTZW5zb3IoU2Vuc29yLlRZUEVfUFJPWElNSVRZKTsKLSAgICBpZiAocHJveGltaXR5U2Vuc29y
ID09IG51bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbG9nUHJveGltaXR5
U2Vuc29ySW5mbygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIEhlbHBlciBtZXRo
b2QgZm9yIGxvZ2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3hpbWl0eSBzZW5zb3IuICov
Ci0gIHByaXZhdGUgdm9pZCBsb2dQcm94aW1pdHlTZW5zb3JJbmZvKCkgewotICAgIGlmIChwcm94
aW1pdHlTZW5zb3IgPT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTdHJpbmdC
dWlsZGVyIGluZm8gPSBuZXcgU3RyaW5nQnVpbGRlcigiUHJveGltaXR5IHNlbnNvcjogIik7Ci0g
ICAgaW5mby5hcHBlbmQoIm5hbWU9IikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXROYW1lKCkp
OwotICAgIGluZm8uYXBwZW5kKCIsIHZlbmRvcjogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5n
ZXRWZW5kb3IoKSk7Ci0gICAgaW5mby5hcHBlbmQoIiwgcG93ZXI6ICIpLmFwcGVuZChwcm94aW1p
dHlTZW5zb3IuZ2V0UG93ZXIoKSk7Ci0gICAgaW5mby5hcHBlbmQoIiwgcmVzb2x1dGlvbjogIiku
YXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRSZXNvbHV0aW9uKCkpOwotICAgIGluZm8uYXBwZW5k
KCIsIG1heCByYW5nZTogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRNYXhpbXVtUmFuZ2Uo
KSk7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVT
LkdJTkdFUkJSRUFEKSB7Ci0gICAgICAvLyBBZGRlZCBpbiBBUEkgbGV2ZWwgOS4KLSAgICAgIGlu
Zm8uYXBwZW5kKCIsIG1pbiBkZWxheTogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRNaW5E
ZWxheSgpKTsKLSAgICB9Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5W
RVJTSU9OX0NPREVTLktJVEtBVF9XQVRDSCkgewotICAgICAgLy8gQWRkZWQgaW4gQVBJIGxldmVs
IDIwLgotICAgICAgaW5mby5hcHBlbmQoIiwgdHlwZTogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNv
ci5nZXRTdHJpbmdUeXBlKCkpOwotICAgIH0KLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5U
ID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApIHsKLSAgICAgIC8vIEFkZGVkIGluIEFQ
SSBsZXZlbCAyMS4KLSAgICAgIGluZm8uYXBwZW5kKCIsIG1heCBkZWxheTogIikuYXBwZW5kKHBy
b3hpbWl0eVNlbnNvci5nZXRNYXhEZWxheSgpKTsKLSAgICAgIGluZm8uYXBwZW5kKCIsIHJlcG9y
dGluZyBtb2RlOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldFJlcG9ydGluZ01vZGUoKSk7
Ci0gICAgICBpbmZvLmFwcGVuZCgiLCBpc1dha2VVcFNlbnNvcjogIikuYXBwZW5kKHByb3hpbWl0
eVNlbnNvci5pc1dha2VVcFNlbnNvcigpKTsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCBpbmZvLnRv
U3RyaW5nKCkpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2Fs
bEFjdGl2aXR5LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L0NhbGxBY3Rpdml0eS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvQ2FsbEFjdGl2aXR5LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw4NzEgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERp
YWxvZzsKLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudFRyYW5zYWN0aW9uOwotaW1wb3J0IGFu
ZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRl
cmZhY2U7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNv
bnRlbnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0aW9u
Lk1lZGlhUHJvamVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnByb2plY3Rpb24uTWVkaWFQ
cm9qZWN0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9p
ZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQu
dXRpbC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFu
ZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5k
cm9pZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFn
ZXIuTGF5b3V0UGFyYW1zOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwotaW1wb3J0IGph
dmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb247Ci1p
bXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9y
dCBvcmcuYXBwc3BvdC5hcHBydGMuQXBwUlRDQ2xpZW50LlJvb21Db25uZWN0aW9uUGFyYW1ldGVy
czsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuQXBwUlRDQ2xpZW50LlNpZ25hbGluZ1BhcmFt
ZXRlcnM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25uZWN0aW9uQ2xpZW50LlBl
ZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYTFFbnVtZXJh
dG9yOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhMkVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5DYW1lcmFFbnVtZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuRWdsQmFzZTsKLWltcG9y
dCBvcmcud2VicnRjLkZpbGVWaWRlb0NhcHR1cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2Fu
ZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLWltcG9ydCBvcmcud2VicnRjLlBl
ZXJDb25uZWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcud2VicnRjLlJlbmRlcmVyQ29tbW9uLlNj
YWxpbmdUeXBlOwotaW1wb3J0IG9yZy53ZWJydGMuU2NyZWVuQ2FwdHVyZXJBbmRyb2lkOwotaW1w
b3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuU3Rh
dHNSZXBvcnQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TdXJmYWNlVmlld1JlbmRlcmVyOwotaW1wb3J0
IG9yZy53ZWJydGMuVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvRmlsZVJl
bmRlcmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlcjsKLQotLyoqCi0gKiBBY3Rp
dml0eSBmb3IgcGVlciBjb25uZWN0aW9uIGNhbGwgc2V0dXAsIGNhbGwgd2FpdGluZwotICogYW5k
IGNhbGwgdmlldy4KLSAqLwotcHVibGljIGNsYXNzIENhbGxBY3Rpdml0eSBleHRlbmRzIEFjdGl2
aXR5IGltcGxlbWVudHMgQXBwUlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZXJDb25uZWN0aW9u
Q2xpZW50LlBlZXJDb25uZWN0aW9uRXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYWdtZW50Lk9uQ2FsbEV2ZW50cyB7Ci0g
IHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JPT01JRCA9ICJvcmcuYXBwc3BvdC5h
cHBydGMuUk9PTUlEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfTE9PUEJB
Q0sgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkxPT1BCQUNLIjsKLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBTdHJpbmcgRVhUUkFfVklERU9fQ0FMTCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fQ0FM
TCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NDUkVFTkNBUFRVUkUgPSAi
b3JnLmFwcHNwb3QuYXBwcnRjLlNDUkVFTkNBUFRVUkUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFs
IFN0cmluZyBFWFRSQV9DQU1FUkEyID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5DQU1FUkEyIjsKLSAg
cHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9fV0lEVEggPSAib3JnLmFwcHNw
b3QuYXBwcnRjLlZJREVPX1dJRFRIIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhU
UkFfVklERU9fSEVJR0hUID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT19IRUlHSFQiOwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19GUFMgPSAib3JnLmFwcHNwb3Qu
YXBwcnRjLlZJREVPX0ZQUyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJ
REVPX0NBUFRVUkVRVUFMSVRZU0xJREVSX0VOQUJMRUQgPQotICAgICAgIm9yZy5hcHBzb3B0LmFw
cHJ0Yy5WSURFT19DQVBUVVJFUVVBTElUWVNMSURFUiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwg
U3RyaW5nIEVYVFJBX1ZJREVPX0JJVFJBVEUgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJREVPX0JJ
VFJBVEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT0NPREVDID0g
Im9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT0NPREVDIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBT
dHJpbmcgRVhUUkFfSFdDT0RFQ19FTkFCTEVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5IV0NPREVD
IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQ0FQVFVSRVRPVEVYVFVSRV9F
TkFCTEVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5DQVBUVVJFVE9URVhUVVJFIjsKLSAgcHVibGlj
IHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQVVESU9fQklUUkFURSA9ICJvcmcuYXBwc3BvdC5h
cHBydGMuQVVESU9fQklUUkFURSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJB
X0FVRElPQ09ERUMgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkFVRElPQ09ERUMiOwotICBwdWJsaWMg
c3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9OT0FVRElPUFJPQ0VTU0lOR19FTkFCTEVEID0KLSAg
ICAgICJvcmcuYXBwc3BvdC5hcHBydGMuTk9BVURJT1BST0NFU1NJTkciOwotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIFN0cmluZyBFWFRSQV9BRUNEVU1QX0VOQUJMRUQgPSAib3JnLmFwcHNwb3QuYXBw
cnRjLkFFQ0RVTVAiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9PUEVOU0xF
U19FTkFCTEVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5PUEVOU0xFUyI7Ci0gIHB1YmxpYyBzdGF0
aWMgZmluYWwgU3RyaW5nIEVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUVDID0gIm9yZy5hcHBzcG90
LmFwcHJ0Yy5ESVNBQkxFX0JVSUxUX0lOX0FFQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3Ry
aW5nIEVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUdDID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5ESVNB
QkxFX0JVSUxUX0lOX0FHQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0RJ
U0FCTEVfQlVJTFRfSU5fTlMgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkRJU0FCTEVfQlVJTFRfSU5f
TlMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9FTkFCTEVfTEVWRUxfQ09O
VFJPTCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuRU5BQkxFX0xFVkVMX0NPTlRST0wiOwotICBwdWJs
aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ESVNQTEFZX0hVRCA9ICJvcmcuYXBwc3BvdC5h
cHBydGMuRElTUExBWV9IVUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9U
UkFDSU5HID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5UUkFDSU5HIjsKLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBTdHJpbmcgRVhUUkFfQ01ETElORSA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQ01ETElORSI7
Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JVTlRJTUUgPSAib3JnLmFwcHNw
b3QuYXBwcnRjLlJVTlRJTUUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9W
SURFT19GSUxFX0FTX0NBTUVSQSA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fRklMRV9BU19D
QU1FUkEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9TQVZFX1JFTU9URV9W
SURFT19UT19GSUxFID0KLSAgICAgICJvcmcuYXBwc3BvdC5hcHBydGMuU0FWRV9SRU1PVEVfVklE
RU9fVE9fRklMRSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NBVkVfUkVN
T1RFX1ZJREVPX1RPX0ZJTEVfV0lEVEggPQotICAgICAgIm9yZy5hcHBzcG90LmFwcHJ0Yy5TQVZF
X1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRIIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJp
bmcgRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQgPQotICAgICAgIm9yZy5h
cHBzcG90LmFwcHJ0Yy5TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hFSUdIVCI7Ci0gIHB1Ymxp
YyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1VTRV9WQUxVRVNfRlJPTV9JTlRFTlQgPQotICAg
ICAgIm9yZy5hcHBzcG90LmFwcHJ0Yy5VU0VfVkFMVUVTX0ZST01fSU5URU5UIjsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYWxsUlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IENBUFRVUkVfUEVSTUlTU0lPTl9SRVFVRVNUX0NPREUgPSAxOwotCi0g
IC8vIExpc3Qgb2YgbWFuZGF0b3J5IGFwcGxpY2F0aW9uIHBlcm1pc3Npb25zLgotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBNQU5EQVRPUllfUEVSTUlTU0lPTlMgPSB7ImFuZHJvaWQu
cGVybWlzc2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MiLAotICAgICAgImFuZHJvaWQucGVybWlz
c2lvbi5SRUNPUkRfQVVESU8iLCAiYW5kcm9pZC5wZXJtaXNzaW9uLklOVEVSTkVUIn07Ci0KLSAg
Ly8gUGVlciBjb25uZWN0aW9uIHN0YXRpc3RpY3MgY2FsbGJhY2sgcGVyaW9kIGluIG1zLgotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVF9DQUxMQkFDS19QRVJJT0QgPSAxMDAwOwotICAv
LyBMb2NhbCBwcmV2aWV3IHNjcmVlbiBwb3NpdGlvbiBiZWZvcmUgY2FsbCBpcyBjb25uZWN0ZWQu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9YX0NPTk5FQ1RJTkcgPSAwOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfWV9DT05ORUNUSU5HID0gMDsKLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX1dJRFRIX0NPTk5FQ1RJTkcgPSAxMDA7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9IRUlHSFRfQ09OTkVDVElORyA9IDEwMDsKLSAgLy8g
TG9jYWwgcHJldmlldyBzY3JlZW4gcG9zaXRpb24gYWZ0ZXIgY2FsbCBpcyBjb25uZWN0ZWQuCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9YX0NPTk5FQ1RFRCA9IDcyOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfWV9DT05ORUNURUQgPSA3MjsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IExPQ0FMX1dJRFRIX0NPTk5FQ1RFRCA9IDI1OwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgTE9DQUxfSEVJR0hUX0NPTk5FQ1RFRCA9IDI1OwotICAvLyBSZW1vdGUg
dmlkZW8gc2NyZWVuIHBvc2l0aW9uCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRU1PVEVf
WCA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRU1PVEVfWSA9IDA7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBSRU1PVEVfV0lEVEggPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBSRU1PVEVfSEVJR0hUID0gMTAwOwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9u
Q2xpZW50IHBlZXJDb25uZWN0aW9uQ2xpZW50ID0gbnVsbDsKLSAgcHJpdmF0ZSBBcHBSVENDbGll
bnQgYXBwUnRjQ2xpZW50OwotICBwcml2YXRlIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5n
UGFyYW1ldGVyczsKLSAgcHJpdmF0ZSBBcHBSVENBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyID0g
bnVsbDsKLSAgcHJpdmF0ZSBFZ2xCYXNlIHJvb3RFZ2xCYXNlOwotICBwcml2YXRlIFN1cmZhY2VW
aWV3UmVuZGVyZXIgbG9jYWxSZW5kZXI7Ci0gIHByaXZhdGUgU3VyZmFjZVZpZXdSZW5kZXJlciBy
ZW1vdGVSZW5kZXJTY3JlZW47Ci0gIHByaXZhdGUgVmlkZW9GaWxlUmVuZGVyZXIgdmlkZW9GaWxl
UmVuZGVyZXI7Ci0gIHByaXZhdGUgZmluYWwgTGlzdDxWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4g
cmVtb3RlUmVuZGVyZXJzID0KLSAgICAgIG5ldyBBcnJheUxpc3Q8VmlkZW9SZW5kZXJlci5DYWxs
YmFja3M+KCk7Ci0gIHByaXZhdGUgUGVyY2VudEZyYW1lTGF5b3V0IGxvY2FsUmVuZGVyTGF5b3V0
OwotICBwcml2YXRlIFBlcmNlbnRGcmFtZUxheW91dCByZW1vdGVSZW5kZXJMYXlvdXQ7Ci0gIHBy
aXZhdGUgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGU7Ci0gIHByaXZhdGUgVG9hc3QgbG9nVG9hc3Q7
Ci0gIHByaXZhdGUgYm9vbGVhbiBjb21tYW5kTGluZVJ1bjsKLSAgcHJpdmF0ZSBpbnQgcnVuVGlt
ZU1zOwotICBwcml2YXRlIGJvb2xlYW4gYWN0aXZpdHlSdW5uaW5nOwotICBwcml2YXRlIFJvb21D
b25uZWN0aW9uUGFyYW1ldGVycyByb29tQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gIHByaXZhdGUg
UGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgcHJp
dmF0ZSBib29sZWFuIGljZUNvbm5lY3RlZDsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRXJyb3I7Ci0g
IHByaXZhdGUgYm9vbGVhbiBjYWxsQ29udHJvbEZyYWdtZW50VmlzaWJsZSA9IHRydWU7Ci0gIHBy
aXZhdGUgbG9uZyBjYWxsU3RhcnRlZFRpbWVNcyA9IDA7Ci0gIHByaXZhdGUgYm9vbGVhbiBtaWNF
bmFibGVkID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHNjcmVlbmNhcHR1cmVFbmFibGVkID0g
ZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGljIEludGVudCBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9u
UmVzdWx0RGF0YTsKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IG1lZGlhUHJvamVjdGlvblBlcm1pc3Np
b25SZXN1bHRDb2RlOwotCi0gIC8vIENvbnRyb2xzCi0gIHByaXZhdGUgQ2FsbEZyYWdtZW50IGNh
bGxGcmFnbWVudDsKLSAgcHJpdmF0ZSBIdWRGcmFnbWVudCBodWRGcmFnbWVudDsKLSAgcHJpdmF0
ZSBDcHVNb25pdG9yIGNwdU1vbml0b3I7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
Q3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0ZShz
YXZlZEluc3RhbmNlU3RhdGUpOwotICAgIFRocmVhZC5zZXREZWZhdWx0VW5jYXVnaHRFeGNlcHRp
b25IYW5kbGVyKG5ldyBVbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyKHRoaXMpKTsKLQotICAgIC8v
IFNldCB3aW5kb3cgc3R5bGVzIGZvciBmdWxsc2NyZWVuLXdpbmRvdyBzaXplLiBOZWVkcyB0byBi
ZSBkb25lIGJlZm9yZQotICAgIC8vIGFkZGluZyBjb250ZW50LgotICAgIHJlcXVlc3RXaW5kb3dG
ZWF0dXJlKFdpbmRvdy5GRUFUVVJFX05PX1RJVExFKTsKLSAgICBnZXRXaW5kb3coKS5hZGRGbGFn
cyhMYXlvdXRQYXJhbXMuRkxBR19GVUxMU0NSRUVOIHwgTGF5b3V0UGFyYW1zLkZMQUdfS0VFUF9T
Q1JFRU5fT04KLSAgICAgICAgfCBMYXlvdXRQYXJhbXMuRkxBR19ESVNNSVNTX0tFWUdVQVJEIHwg
TGF5b3V0UGFyYW1zLkZMQUdfU0hPV19XSEVOX0xPQ0tFRAotICAgICAgICB8IExheW91dFBhcmFt
cy5GTEFHX1RVUk5fU0NSRUVOX09OKTsKLSAgICBnZXRXaW5kb3coKS5nZXREZWNvclZpZXcoKS5z
ZXRTeXN0ZW1VaVZpc2liaWxpdHkoVmlldy5TWVNURU1fVUlfRkxBR19ISURFX05BVklHQVRJT04K
LSAgICAgICAgfCBWaWV3LlNZU1RFTV9VSV9GTEFHX0ZVTExTQ1JFRU4gfCBWaWV3LlNZU1RFTV9V
SV9GTEFHX0lNTUVSU0lWRV9TVElDS1kpOwotICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmFj
dGl2aXR5X2NhbGwpOwotCi0gICAgaWNlQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAgc2lnbmFsaW5n
UGFyYW1ldGVycyA9IG51bGw7Ci0gICAgc2NhbGluZ1R5cGUgPSBTY2FsaW5nVHlwZS5TQ0FMRV9B
U1BFQ1RfRklMTDsKLQotICAgIC8vIENyZWF0ZSBVSSBjb250cm9scy4KLSAgICBsb2NhbFJlbmRl
ciA9IChTdXJmYWNlVmlld1JlbmRlcmVyKSBmaW5kVmlld0J5SWQoUi5pZC5sb2NhbF92aWRlb192
aWV3KTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4gPSAoU3VyZmFjZVZpZXdSZW5kZXJlcikgZmlu
ZFZpZXdCeUlkKFIuaWQucmVtb3RlX3ZpZGVvX3ZpZXcpOwotICAgIGxvY2FsUmVuZGVyTGF5b3V0
ID0gKFBlcmNlbnRGcmFtZUxheW91dCkgZmluZFZpZXdCeUlkKFIuaWQubG9jYWxfdmlkZW9fbGF5
b3V0KTsKLSAgICByZW1vdGVSZW5kZXJMYXlvdXQgPSAoUGVyY2VudEZyYW1lTGF5b3V0KSBmaW5k
Vmlld0J5SWQoUi5pZC5yZW1vdGVfdmlkZW9fbGF5b3V0KTsKLSAgICBjYWxsRnJhZ21lbnQgPSBu
ZXcgQ2FsbEZyYWdtZW50KCk7Ci0gICAgaHVkRnJhZ21lbnQgPSBuZXcgSHVkRnJhZ21lbnQoKTsK
LQotICAgIC8vIFNob3cvaGlkZSBjYWxsIGNvbnRyb2wgZnJhZ21lbnQgb24gdmlldyBjbGljay4K
LSAgICBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0
ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3
IHZpZXcpIHsKLSAgICAgICAgdG9nZ2xlQ2FsbENvbnRyb2xGcmFnbWVudFZpc2liaWxpdHkoKTsK
LSAgICAgIH0KLSAgICB9OwotCi0gICAgbG9jYWxSZW5kZXIuc2V0T25DbGlja0xpc3RlbmVyKGxp
c3RlbmVyKTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4uc2V0T25DbGlja0xpc3RlbmVyKGxpc3Rl
bmVyKTsKLSAgICByZW1vdGVSZW5kZXJlcnMuYWRkKHJlbW90ZVJlbmRlclNjcmVlbik7Ci0KLSAg
ICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gZ2V0SW50ZW50KCk7Ci0KLSAgICAvLyBDcmVhdGUgdmlk
ZW8gcmVuZGVyZXJzLgotICAgIHJvb3RFZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoKTsKLSAgICBs
b2NhbFJlbmRlci5pbml0KHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIG51bGwpOwot
ICAgIFN0cmluZyBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEo
RVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRSk7Ci0KLSAgICAvLyBXaGVuIHNhdmVSZW1v
dGVWaWRlb1RvRmlsZSBpcyBzZXQgd2Ugc2F2ZSB0aGUgdmlkZW8gZnJvbSB0aGUgcmVtb3RlIHRv
IGEgZmlsZS4KLSAgICBpZiAoc2F2ZVJlbW90ZVZpZGVvVG9GaWxlICE9IG51bGwpIHsKLSAgICAg
IGludCB2aWRlb091dFdpZHRoID0gaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1NBVkVfUkVNT1RF
X1ZJREVPX1RPX0ZJTEVfV0lEVEgsIDApOwotICAgICAgaW50IHZpZGVvT3V0SGVpZ2h0ID0gaW50
ZW50LmdldEludEV4dHJhKEVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hULCAw
KTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHZpZGVvRmlsZVJlbmRlcmVyID0gbmV3IFZpZGVvRmls
ZVJlbmRlcmVyKAotICAgICAgICAgICAgc2F2ZVJlbW90ZVZpZGVvVG9GaWxlLCB2aWRlb091dFdp
ZHRoLCB2aWRlb091dEhlaWdodCwgcm9vdEVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0g
ICAgICAgIHJlbW90ZVJlbmRlcmVycy5hZGQodmlkZW9GaWxlUmVuZGVyZXIpOwotICAgICAgfSBj
YXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlv
bigKLSAgICAgICAgICAgICJGYWlsZWQgdG8gb3BlbiB2aWRlbyBmaWxlIGZvciBvdXRwdXQ6ICIg
KyBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUsIGUpOwotICAgICAgfQotICAgIH0KLSAgICByZW1vdGVS
ZW5kZXJTY3JlZW4uaW5pdChyb290RWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBudWxsKTsK
LQotICAgIGxvY2FsUmVuZGVyLnNldFpPcmRlck1lZGlhT3ZlcmxheSh0cnVlKTsKLSAgICB1cGRh
dGVWaWRlb1ZpZXcoKTsKLQotICAgIC8vIENoZWNrIGZvciBtYW5kYXRvcnkgcGVybWlzc2lvbnMu
Ci0gICAgZm9yIChTdHJpbmcgcGVybWlzc2lvbiA6IE1BTkRBVE9SWV9QRVJNSVNTSU9OUykgewot
ICAgICAgaWYgKGNoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24ocGVybWlzc2lvbikgIT0gUGFj
a2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEKSB7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJQ
ZXJtaXNzaW9uICIgKyBwZXJtaXNzaW9uICsgIiBpcyBub3QgZ3JhbnRlZCIpOwotICAgICAgICBz
ZXRSZXN1bHQoUkVTVUxUX0NBTkNFTEVEKTsKLSAgICAgICAgZmluaXNoKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBVcmkgcm9vbVVyaSA9IGludGVudC5nZXREYXRh
KCk7Ci0gICAgaWYgKHJvb21VcmkgPT0gbnVsbCkgewotICAgICAgbG9nQW5kVG9hc3QoZ2V0U3Ry
aW5nKFIuc3RyaW5nLm1pc3NpbmdfdXJsKSk7Ci0gICAgICBMb2cuZShUQUcsICJEaWRuJ3QgZ2V0
IGFueSBVUkwgaW4gaW50ZW50ISIpOwotICAgICAgc2V0UmVzdWx0KFJFU1VMVF9DQU5DRUxFRCk7
Ci0gICAgICBmaW5pc2goKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBHZXQgSW50
ZW50IHBhcmFtZXRlcnMuCi0gICAgU3RyaW5nIHJvb21JZCA9IGludGVudC5nZXRTdHJpbmdFeHRy
YShFWFRSQV9ST09NSUQpOwotICAgIExvZy5kKFRBRywgIlJvb20gSUQ6ICIgKyByb29tSWQpOwot
ICAgIGlmIChyb29tSWQgPT0gbnVsbCB8fCByb29tSWQubGVuZ3RoKCkgPT0gMCkgewotICAgICAg
bG9nQW5kVG9hc3QoZ2V0U3RyaW5nKFIuc3RyaW5nLm1pc3NpbmdfdXJsKSk7Ci0gICAgICBMb2cu
ZShUQUcsICJJbmNvcnJlY3Qgcm9vbSBJRCBpbiBpbnRlbnQhIik7Ci0gICAgICBzZXRSZXN1bHQo
UkVTVUxUX0NBTkNFTEVEKTsKLSAgICAgIGZpbmlzaCgpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGJvb2xlYW4gbG9vcGJhY2sgPSBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0xP
T1BCQUNLLCBmYWxzZSk7Ci0gICAgYm9vbGVhbiB0cmFjaW5nID0gaW50ZW50LmdldEJvb2xlYW5F
eHRyYShFWFRSQV9UUkFDSU5HLCBmYWxzZSk7Ci0KLSAgICBpbnQgdmlkZW9XaWR0aCA9IGludGVu
dC5nZXRJbnRFeHRyYShFWFRSQV9WSURFT19XSURUSCwgMCk7Ci0gICAgaW50IHZpZGVvSGVpZ2h0
ID0gaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1ZJREVPX0hFSUdIVCwgMCk7Ci0KLSAgICBzY3Jl
ZW5jYXB0dXJlRW5hYmxlZCA9IGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfU0NSRUVOQ0FQ
VFVSRSwgZmFsc2UpOwotICAgIC8vIElmIGNhcHR1cmluZyBmb3JtYXQgaXMgbm90IHNwZWNpZmll
ZCBmb3Igc2NyZWVuY2FwdHVyZSwgdXNlIHNjcmVlbiByZXNvbHV0aW9uLgotICAgIGlmIChzY3Jl
ZW5jYXB0dXJlRW5hYmxlZCAmJiB2aWRlb1dpZHRoID09IDAgJiYgdmlkZW9IZWlnaHQgPT0gMCkg
ewotICAgICAgRGlzcGxheU1ldHJpY3MgZGlzcGxheU1ldHJpY3MgPSBuZXcgRGlzcGxheU1ldHJp
Y3MoKTsKLSAgICAgIFdpbmRvd01hbmFnZXIgd2luZG93TWFuYWdlciA9Ci0gICAgICAgICAgKFdp
bmRvd01hbmFnZXIpIGdldEFwcGxpY2F0aW9uKCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJ
TkRPV19TRVJWSUNFKTsKLSAgICAgIHdpbmRvd01hbmFnZXIuZ2V0RGVmYXVsdERpc3BsYXkoKS5n
ZXRSZWFsTWV0cmljcyhkaXNwbGF5TWV0cmljcyk7Ci0gICAgICB2aWRlb1dpZHRoID0gZGlzcGxh
eU1ldHJpY3Mud2lkdGhQaXhlbHM7Ci0gICAgICB2aWRlb0hlaWdodCA9IGRpc3BsYXlNZXRyaWNz
LmhlaWdodFBpeGVsczsKLSAgICB9Ci0KLSAgICBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPQot
ICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzKGludGVudC5nZXRCb29sZWFuRXh0
cmEoRVhUUkFfVklERU9fQ0FMTCwgdHJ1ZSksIGxvb3BiYWNrLAotICAgICAgICAgICAgdHJhY2lu
ZywgdmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9WSURF
T19GUFMsIDApLAotICAgICAgICAgICAgaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1ZJREVPX0JJ
VFJBVEUsIDApLCBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfVklERU9DT0RFQyksCi0gICAg
ICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0hXQ09ERUNfRU5BQkxFRCwgdHJ1
ZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfQVVESU9fQklUUkFURSwg
MCksIGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9BVURJT0NPREVDKSwKLSAgICAgICAgICAg
IGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfTk9BVURJT1BST0NFU1NJTkdfRU5BQkxFRCwg
ZmFsc2UpLAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9BRUNEVU1Q
X0VOQUJMRUQsIGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhU
UkFfT1BFTlNMRVNfRU5BQkxFRCwgZmFsc2UpLAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xl
YW5FeHRyYShFWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FFQywgZmFsc2UpLAotICAgICAgICAgICAg
aW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FHQywgZmFsc2Up
LAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9ESVNBQkxFX0JVSUxU
X0lOX05TLCBmYWxzZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJB
X0VOQUJMRV9MRVZFTF9DT05UUk9MLCBmYWxzZSkpOwotICAgIGNvbW1hbmRMaW5lUnVuID0gaW50
ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9DTURMSU5FLCBmYWxzZSk7Ci0gICAgcnVuVGltZU1z
ID0gaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1JVTlRJTUUsIDApOwotCi0gICAgTG9nLmQoVEFH
LCAiVklERU9fRklMRTogJyIgKyBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfVklERU9fRklM
RV9BU19DQU1FUkEpICsgIiciKTsKLQotICAgIC8vIENyZWF0ZSBjb25uZWN0aW9uIGNsaWVudC4g
VXNlIERpcmVjdFJUQ0NsaWVudCBpZiByb29tIG5hbWUgaXMgYW4gSVAgb3RoZXJ3aXNlIHVzZSB0
aGUKLSAgICAvLyBzdGFuZGFyZCBXZWJTb2NrZXRSVENDbGllbnQuCi0gICAgaWYgKGxvb3BiYWNr
IHx8ICFEaXJlY3RSVENDbGllbnQuSVBfUEFUVEVSTi5tYXRjaGVyKHJvb21JZCkubWF0Y2hlcygp
KSB7Ci0gICAgICBhcHBSdGNDbGllbnQgPSBuZXcgV2ViU29ja2V0UlRDQ2xpZW50KHRoaXMpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuaShUQUcsICJVc2luZyBEaXJlY3RSVENDbGllbnQgYmVj
YXVzZSByb29tIG5hbWUgbG9va3MgbGlrZSBhbiBJUC4iKTsKLSAgICAgIGFwcFJ0Y0NsaWVudCA9
IG5ldyBEaXJlY3RSVENDbGllbnQodGhpcyk7Ci0gICAgfQotICAgIC8vIENyZWF0ZSBjb25uZWN0
aW9uIHBhcmFtZXRlcnMuCi0gICAgcm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzID0gbmV3IFJvb21D
b25uZWN0aW9uUGFyYW1ldGVycyhyb29tVXJpLnRvU3RyaW5nKCksIHJvb21JZCwgbG9vcGJhY2sp
OwotCi0gICAgLy8gQ3JlYXRlIENQVSBtb25pdG9yCi0gICAgY3B1TW9uaXRvciA9IG5ldyBDcHVN
b25pdG9yKHRoaXMpOwotICAgIGh1ZEZyYWdtZW50LnNldENwdU1vbml0b3IoY3B1TW9uaXRvcik7
Ci0KLSAgICAvLyBTZW5kIGludGVudCBhcmd1bWVudHMgdG8gZnJhZ21lbnRzLgotICAgIGNhbGxG
cmFnbWVudC5zZXRBcmd1bWVudHMoaW50ZW50LmdldEV4dHJhcygpKTsKLSAgICBodWRGcmFnbWVu
dC5zZXRBcmd1bWVudHMoaW50ZW50LmdldEV4dHJhcygpKTsKLSAgICAvLyBBY3RpdmF0ZSBjYWxs
IGFuZCBIVUQgZnJhZ21lbnRzIGFuZCBzdGFydCB0aGUgY2FsbC4KLSAgICBGcmFnbWVudFRyYW5z
YWN0aW9uIGZ0ID0gZ2V0RnJhZ21lbnRNYW5hZ2VyKCkuYmVnaW5UcmFuc2FjdGlvbigpOwotICAg
IGZ0LmFkZChSLmlkLmNhbGxfZnJhZ21lbnRfY29udGFpbmVyLCBjYWxsRnJhZ21lbnQpOwotICAg
IGZ0LmFkZChSLmlkLmh1ZF9mcmFnbWVudF9jb250YWluZXIsIGh1ZEZyYWdtZW50KTsKLSAgICBm
dC5jb21taXQoKTsKLQotICAgIC8vIEZvciBjb21tYW5kIGxpbmUgZXhlY3V0aW9uIHJ1biBjb25u
ZWN0aW9uIGZvciA8cnVuVGltZU1zPiBhbmQgZXhpdC4KLSAgICBpZiAoY29tbWFuZExpbmVSdW4g
JiYgcnVuVGltZU1zID4gMCkgewotICAgICAgKG5ldyBIYW5kbGVyKCkpLnBvc3REZWxheWVkKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgICBkaXNjb25uZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0sIHJ1blRp
bWVNcyk7Ci0gICAgfQotCi0gICAgcGVlckNvbm5lY3Rpb25DbGllbnQgPSBQZWVyQ29ubmVjdGlv
bkNsaWVudC5nZXRJbnN0YW5jZSgpOwotICAgIGlmIChsb29wYmFjaykgewotICAgICAgUGVlckNv
bm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkuT3B0aW9ucygpOwotICAgICAgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9IDA7Ci0gICAg
ICBwZWVyQ29ubmVjdGlvbkNsaWVudC5zZXRQZWVyQ29ubmVjdGlvbkZhY3RvcnlPcHRpb25zKG9w
dGlvbnMpOwotICAgIH0KLSAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVQZWVyQ29ubmVj
dGlvbkZhY3RvcnkoCi0gICAgICAgIENhbGxBY3Rpdml0eS50aGlzLCBwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMsIENhbGxBY3Rpdml0eS50aGlzKTsKLQotICAgIGlmIChzY3JlZW5jYXB0dXJlRW5h
YmxlZCkgewotICAgICAgTWVkaWFQcm9qZWN0aW9uTWFuYWdlciBtZWRpYVByb2plY3Rpb25NYW5h
Z2VyID0KLSAgICAgICAgICAoTWVkaWFQcm9qZWN0aW9uTWFuYWdlcikgZ2V0QXBwbGljYXRpb24o
KS5nZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICAgICAgICBDb250ZXh0Lk1FRElBX1BST0pFQ1RJ
T05fU0VSVklDRSk7Ci0gICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KAotICAgICAgICAgIG1l
ZGlhUHJvamVjdGlvbk1hbmFnZXIuY3JlYXRlU2NyZWVuQ2FwdHVyZUludGVudCgpLCBDQVBUVVJF
X1BFUk1JU1NJT05fUkVRVUVTVF9DT0RFKTsKLSAgICB9IGVsc2UgewotICAgICAgc3RhcnRDYWxs
KCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQWN0aXZpdHlS
ZXN1bHQoaW50IHJlcXVlc3RDb2RlLCBpbnQgcmVzdWx0Q29kZSwgSW50ZW50IGRhdGEpIHsKLSAg
ICBpZiAocmVxdWVzdENvZGUgIT0gQ0FQVFVSRV9QRVJNSVNTSU9OX1JFUVVFU1RfQ09ERSkKLSAg
ICAgIHJldHVybjsKLSAgICBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0Q29kZSA9IHJl
c3VsdENvZGU7Ci0gICAgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGEgPSBkYXRh
OwotICAgIHN0YXJ0Q2FsbCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHVzZUNhbWVyYTIo
KSB7Ci0gICAgcmV0dXJuIENhbWVyYTJFbnVtZXJhdG9yLmlzU3VwcG9ydGVkKHRoaXMpICYmIGdl
dEludGVudCgpLmdldEJvb2xlYW5FeHRyYShFWFRSQV9DQU1FUkEyLCB0cnVlKTsKLSAgfQotCi0g
IHByaXZhdGUgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKCkgewotICAgIHJldHVybiBnZXRJbnRl
bnQoKS5nZXRCb29sZWFuRXh0cmEoRVhUUkFfQ0FQVFVSRVRPVEVYVFVSRV9FTkFCTEVELCBmYWxz
ZSk7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIo
Q2FtZXJhRW51bWVyYXRvciBlbnVtZXJhdG9yKSB7Ci0gICAgZmluYWwgU3RyaW5nW10gZGV2aWNl
TmFtZXMgPSBlbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCk7Ci0KLSAgICAvLyBGaXJzdCwgdHJ5
IHRvIGZpbmQgZnJvbnQgZmFjaW5nIGNhbWVyYQotICAgIExvZ2dpbmcuZChUQUcsICJMb29raW5n
IGZvciBmcm9udCBmYWNpbmcgY2FtZXJhcy4iKTsKLSAgICBmb3IgKFN0cmluZyBkZXZpY2VOYW1l
IDogZGV2aWNlTmFtZXMpIHsKLSAgICAgIGlmIChlbnVtZXJhdG9yLmlzRnJvbnRGYWNpbmcoZGV2
aWNlTmFtZSkpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIGZyb250IGZhY2lu
ZyBjYW1lcmEgY2FwdHVyZXIuIik7Ci0gICAgICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJl
ciA9IGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZGV2aWNlTmFtZSwgbnVsbCk7Ci0KLSAgICAg
ICAgaWYgKHZpZGVvQ2FwdHVyZXIgIT0gbnVsbCkgewotICAgICAgICAgIHJldHVybiB2aWRlb0Nh
cHR1cmVyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gRnJvbnQgZmFjaW5n
IGNhbWVyYSBub3QgZm91bmQsIHRyeSBzb21ldGhpbmcgZWxzZQotICAgIExvZ2dpbmcuZChUQUcs
ICJMb29raW5nIGZvciBvdGhlciBjYW1lcmFzLiIpOwotICAgIGZvciAoU3RyaW5nIGRldmljZU5h
bWUgOiBkZXZpY2VOYW1lcykgewotICAgICAgaWYgKCFlbnVtZXJhdG9yLmlzRnJvbnRGYWNpbmco
ZGV2aWNlTmFtZSkpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIG90aGVyIGNh
bWVyYSBjYXB0dXJlci4iKTsKLSAgICAgICAgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0g
ZW51bWVyYXRvci5jcmVhdGVDYXB0dXJlcihkZXZpY2VOYW1lLCBudWxsKTsKLQotICAgICAgICBp
ZiAodmlkZW9DYXB0dXJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuIHZpZGVvQ2FwdHVy
ZXI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQot
Ci0gIC8vIEFjdGl2aXR5IGludGVyZmFjZXMKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
UGF1c2UoKSB7Ci0gICAgc3VwZXIub25QYXVzZSgpOwotICAgIGFjdGl2aXR5UnVubmluZyA9IGZh
bHNlOwotICAgIC8vIERvbid0IHN0b3AgdGhlIHZpZGVvIHdoZW4gdXNpbmcgc2NyZWVuY2FwdHVy
ZSB0byBhbGxvdyB1c2VyIHRvIHNob3cgb3RoZXIgYXBwcyB0byB0aGUgcmVtb3RlCi0gICAgLy8g
ZW5kLgotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsICYmICFzY3JlZW5jYXB0
dXJlRW5hYmxlZCkgewotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc3RvcFZpZGVvU291cmNl
KCk7Ci0gICAgfQotICAgIGNwdU1vbml0b3IucGF1c2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBvblJlc3VtZSgpIHsKLSAgICBzdXBlci5vblJlc3VtZSgpOwotICAgIGFj
dGl2aXR5UnVubmluZyA9IHRydWU7Ci0gICAgLy8gVmlkZW8gaXMgbm90IHBhdXNlZCBmb3Igc2Ny
ZWVuY2FwdHVyZS4gU2VlIG9uUGF1c2UuCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9
IG51bGwgJiYgIXNjcmVlbmNhcHR1cmVFbmFibGVkKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNs
aWVudC5zdGFydFZpZGVvU291cmNlKCk7Ci0gICAgfQotICAgIGNwdU1vbml0b3IucmVzdW1lKCk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25EZXN0cm95KCkgewotICAg
IGRpc2Nvbm5lY3QoKTsKLSAgICBpZiAobG9nVG9hc3QgIT0gbnVsbCkgewotICAgICAgbG9nVG9h
c3QuY2FuY2VsKCk7Ci0gICAgfQotICAgIGFjdGl2aXR5UnVubmluZyA9IGZhbHNlOwotICAgIHJv
b3RFZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICBzdXBlci5vbkRlc3Ryb3koKTsKLSAgfQotCi0gIC8v
IENhbGxGcmFnbWVudC5PbkNhbGxFdmVudHMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLgotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DYWxsSGFuZ1VwKCkgewotICAgIGRpc2Nvbm5lY3Qo
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNhbWVyYVN3aXRjaCgpIHsK
LSAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCkgewotICAgICAgcGVlckNvbm5l
Y3Rpb25DbGllbnQuc3dpdGNoQ2FtZXJhKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIG9uVmlkZW9TY2FsaW5nU3dpdGNoKFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBl
KSB7Ci0gICAgdGhpcy5zY2FsaW5nVHlwZSA9IHNjYWxpbmdUeXBlOwotICAgIHVwZGF0ZVZpZGVv
VmlldygpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZUZvcm1h
dENoYW5nZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICBpZiAo
cGVlckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCkgewotICAgICAgcGVlckNvbm5lY3Rpb25DbGll
bnQuY2hhbmdlQ2FwdHVyZUZvcm1hdCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBvblRvZ2dsZU1pYygpIHsKLSAg
ICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCkgewotICAgICAgbWljRW5hYmxlZCA9
ICFtaWNFbmFibGVkOwotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc2V0QXVkaW9FbmFibGVk
KG1pY0VuYWJsZWQpOwotICAgIH0KLSAgICByZXR1cm4gbWljRW5hYmxlZDsKLSAgfQotCi0gIC8v
IEhlbHBlciBmdW5jdGlvbnMuCi0gIHByaXZhdGUgdm9pZCB0b2dnbGVDYWxsQ29udHJvbEZyYWdt
ZW50VmlzaWJpbGl0eSgpIHsKLSAgICBpZiAoIWljZUNvbm5lY3RlZCB8fCAhY2FsbEZyYWdtZW50
LmlzQWRkZWQoKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBTaG93L2hpZGUgY2Fs
bCBjb250cm9sIGZyYWdtZW50Ci0gICAgY2FsbENvbnRyb2xGcmFnbWVudFZpc2libGUgPSAhY2Fs
bENvbnRyb2xGcmFnbWVudFZpc2libGU7Ci0gICAgRnJhZ21lbnRUcmFuc2FjdGlvbiBmdCA9IGdl
dEZyYWdtZW50TWFuYWdlcigpLmJlZ2luVHJhbnNhY3Rpb24oKTsKLSAgICBpZiAoY2FsbENvbnRy
b2xGcmFnbWVudFZpc2libGUpIHsKLSAgICAgIGZ0LnNob3coY2FsbEZyYWdtZW50KTsKLSAgICAg
IGZ0LnNob3coaHVkRnJhZ21lbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmdC5oaWRlKGNhbGxG
cmFnbWVudCk7Ci0gICAgICBmdC5oaWRlKGh1ZEZyYWdtZW50KTsKLSAgICB9Ci0gICAgZnQuc2V0
VHJhbnNpdGlvbihGcmFnbWVudFRyYW5zYWN0aW9uLlRSQU5TSVRfRlJBR01FTlRfRkFERSk7Ci0g
ICAgZnQuY29tbWl0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlVmlkZW9WaWV3KCkg
ewotICAgIHJlbW90ZVJlbmRlckxheW91dC5zZXRQb3NpdGlvbihSRU1PVEVfWCwgUkVNT1RFX1ks
IFJFTU9URV9XSURUSCwgUkVNT1RFX0hFSUdIVCk7Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuLnNl
dFNjYWxpbmdUeXBlKHNjYWxpbmdUeXBlKTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4uc2V0TWly
cm9yKGZhbHNlKTsKLQotICAgIGlmIChpY2VDb25uZWN0ZWQpIHsKLSAgICAgIGxvY2FsUmVuZGVy
TGF5b3V0LnNldFBvc2l0aW9uKAotICAgICAgICAgIExPQ0FMX1hfQ09OTkVDVEVELCBMT0NBTF9Z
X0NPTk5FQ1RFRCwgTE9DQUxfV0lEVEhfQ09OTkVDVEVELCBMT0NBTF9IRUlHSFRfQ09OTkVDVEVE
KTsKLSAgICAgIGxvY2FsUmVuZGVyLnNldFNjYWxpbmdUeXBlKFNjYWxpbmdUeXBlLlNDQUxFX0FT
UEVDVF9GSVQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBsb2NhbFJlbmRlckxheW91dC5zZXRQb3Np
dGlvbigKLSAgICAgICAgICBMT0NBTF9YX0NPTk5FQ1RJTkcsIExPQ0FMX1lfQ09OTkVDVElORywg
TE9DQUxfV0lEVEhfQ09OTkVDVElORywgTE9DQUxfSEVJR0hUX0NPTk5FQ1RJTkcpOwotICAgICAg
bG9jYWxSZW5kZXIuc2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGUpOwotICAgIH0KLSAgICBsb2Nh
bFJlbmRlci5zZXRNaXJyb3IodHJ1ZSk7Ci0KLSAgICBsb2NhbFJlbmRlci5yZXF1ZXN0TGF5b3V0
KCk7Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuLnJlcXVlc3RMYXlvdXQoKTsKLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBzdGFydENhbGwoKSB7Ci0gICAgaWYgKGFwcFJ0Y0NsaWVudCA9PSBudWxsKSB7
Ci0gICAgICBMb2cuZShUQUcsICJBcHBSVEMgY2xpZW50IGlzIG5vdCBhbGxvY2F0ZWQgZm9yIGEg
Y2FsbC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbFN0YXJ0ZWRUaW1lTXMgPSBT
eXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQotICAgIC8vIFN0YXJ0IHJvb20gY29ubmVjdGlv
bi4KLSAgICBsb2dBbmRUb2FzdChnZXRTdHJpbmcoUi5zdHJpbmcuY29ubmVjdGluZ190bywgcm9v
bUNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21VcmwpKTsKLSAgICBhcHBSdGNDbGllbnQuY29ubmVj
dFRvUm9vbShyb29tQ29ubmVjdGlvblBhcmFtZXRlcnMpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBh
dWRpbyBtYW5hZ2VyIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgYXVkaW8gcm91dGluZywKLSAgICAv
LyBhdWRpbyBtb2RlcywgYXVkaW8gZGV2aWNlIGVudW1lcmF0aW9uIGV0Yy4KLSAgICBhdWRpb01h
bmFnZXIgPSBBcHBSVENBdWRpb01hbmFnZXIuY3JlYXRlKHRoaXMsIG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgYXVkaW8g
c3RhdGUgKG51bWJlciBhbmQKLSAgICAgIC8vIHR5cGUgb2YgZGV2aWNlcykgaGFzIGJlZW4gY2hh
bmdlZC4KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICBvbkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIC8v
IFN0b3JlIGV4aXN0aW5nIGF1ZGlvIHNldHRpbmdzIGFuZCBjaGFuZ2UgYXVkaW8gbW9kZSB0bwot
ICAgIC8vIE1PREVfSU5fQ09NTVVOSUNBVElPTiBmb3IgYmVzdCBwb3NzaWJsZSBWb0lQIHBlcmZv
cm1hbmNlLgotICAgIExvZy5kKFRBRywgIkluaXRpYWxpemluZyB0aGUgYXVkaW8gbWFuYWdlci4u
LiIpOwotICAgIGF1ZGlvTWFuYWdlci5pbml0KCk7Ci0gIH0KLQotICAvLyBTaG91bGQgYmUgY2Fs
bGVkIGZyb20gVUkgdGhyZWFkCi0gIHByaXZhdGUgdm9pZCBjYWxsQ29ubmVjdGVkKCkgewotICAg
IGZpbmFsIGxvbmcgZGVsdGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNhbGxTdGFy
dGVkVGltZU1zOwotICAgIExvZy5pKFRBRywgIkNhbGwgY29ubmVjdGVkOiBkZWxheT0iICsgZGVs
dGEgKyAibXMiKTsKLSAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgPT0gbnVsbCB8fCBpc0Vy
cm9yKSB7Ci0gICAgICBMb2cudyhUQUcsICJDYWxsIGlzIGNvbm5lY3RlZCBpbiBjbG9zZWQgb3Ig
ZXJyb3Igc3RhdGUiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHZpZGVv
IHZpZXcuCi0gICAgdXBkYXRlVmlkZW9WaWV3KCk7Ci0gICAgLy8gRW5hYmxlIHN0YXRpc3RpY3Mg
Y2FsbGJhY2suCi0gICAgcGVlckNvbm5lY3Rpb25DbGllbnQuZW5hYmxlU3RhdHNFdmVudHModHJ1
ZSwgU1RBVF9DQUxMQkFDS19QRVJJT0QpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG9uQXVkaW9N
YW5hZ2VyQ2hhbmdlZFN0YXRlKCkgewotICAgIC8vIFRPRE8oaGVucmlrYSk6IGRpc2FibGUgdmlk
ZW8gaWYgQXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNlLkVBUlBJRUNFCi0gICAgLy8gaXMg
YWN0aXZlLgotICB9Ci0KLSAgLy8gRGlzY29ubmVjdCBmcm9tIHJlbW90ZSByZXNvdXJjZXMsIGRp
c3Bvc2Ugb2YgbG9jYWwgcmVzb3VyY2VzLCBhbmQgZXhpdC4KLSAgcHJpdmF0ZSB2b2lkIGRpc2Nv
bm5lY3QoKSB7Ci0gICAgYWN0aXZpdHlSdW5uaW5nID0gZmFsc2U7Ci0gICAgaWYgKGFwcFJ0Y0Ns
aWVudCAhPSBudWxsKSB7Ci0gICAgICBhcHBSdGNDbGllbnQuZGlzY29ubmVjdEZyb21Sb29tKCk7
Ci0gICAgICBhcHBSdGNDbGllbnQgPSBudWxsOwotICAgIH0KLSAgICBpZiAocGVlckNvbm5lY3Rp
b25DbGllbnQgIT0gbnVsbCkgewotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuY2xvc2UoKTsK
LSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50ID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGxvY2Fs
UmVuZGVyICE9IG51bGwpIHsKLSAgICAgIGxvY2FsUmVuZGVyLnJlbGVhc2UoKTsKLSAgICAgIGxv
Y2FsUmVuZGVyID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHZpZGVvRmlsZVJlbmRlcmVyICE9IG51
bGwpIHsKLSAgICAgIHZpZGVvRmlsZVJlbmRlcmVyLnJlbGVhc2UoKTsKLSAgICAgIHZpZGVvRmls
ZVJlbmRlcmVyID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHJlbW90ZVJlbmRlclNjcmVlbiAhPSBu
dWxsKSB7Ci0gICAgICByZW1vdGVSZW5kZXJTY3JlZW4ucmVsZWFzZSgpOwotICAgICAgcmVtb3Rl
UmVuZGVyU2NyZWVuID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvTWFuYWdlciAhPSBudWxs
KSB7Ci0gICAgICBhdWRpb01hbmFnZXIuY2xvc2UoKTsKLSAgICAgIGF1ZGlvTWFuYWdlciA9IG51
bGw7Ci0gICAgfQotICAgIGlmIChpY2VDb25uZWN0ZWQgJiYgIWlzRXJyb3IpIHsKLSAgICAgIHNl
dFJlc3VsdChSRVNVTFRfT0spOwotICAgIH0gZWxzZSB7Ci0gICAgICBzZXRSZXN1bHQoUkVTVUxU
X0NBTkNFTEVEKTsKLSAgICB9Ci0gICAgZmluaXNoKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
ZGlzY29ubmVjdFdpdGhFcnJvck1lc3NhZ2UoZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewot
ICAgIGlmIChjb21tYW5kTGluZVJ1biB8fCAhYWN0aXZpdHlSdW5uaW5nKSB7Ci0gICAgICBMb2cu
ZShUQUcsICJDcml0aWNhbCBlcnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgICBkaXNjb25u
ZWN0KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKHRoaXMp
Ci0gICAgICAgICAgLnNldFRpdGxlKGdldFRleHQoUi5zdHJpbmcuY2hhbm5lbF9lcnJvcl90aXRs
ZSkpCi0gICAgICAgICAgLnNldE1lc3NhZ2UoZXJyb3JNZXNzYWdlKQotICAgICAgICAgIC5zZXRD
YW5jZWxhYmxlKGZhbHNlKQotICAgICAgICAgIC5zZXROZXV0cmFsQnV0dG9uKFIuc3RyaW5nLm9r
LAotICAgICAgICAgICAgICBuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcigpIHsK
LSAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBv
bkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBpZCkgewotICAgICAgICAgICAgICAg
ICAgZGlhbG9nLmNhbmNlbCgpOwotICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAuY3JlYXRlKCkKLSAg
ICAgICAgICAuc2hvdygpOwotICAgIH0KLSAgfQotCi0gIC8vIExvZyB8bXNnfCBhbmQgVG9hc3Qg
YWJvdXQgaXQuCi0gIHByaXZhdGUgdm9pZCBsb2dBbmRUb2FzdChTdHJpbmcgbXNnKSB7Ci0gICAg
TG9nLmQoVEFHLCBtc2cpOwotICAgIGlmIChsb2dUb2FzdCAhPSBudWxsKSB7Ci0gICAgICBsb2dU
b2FzdC5jYW5jZWwoKTsKLSAgICB9Ci0gICAgbG9nVG9hc3QgPSBUb2FzdC5tYWtlVGV4dCh0aGlz
LCBtc2csIFRvYXN0LkxFTkdUSF9TSE9SVCk7Ci0gICAgbG9nVG9hc3Quc2hvdygpOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbikgewot
ICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICghaXNFcnJvcikgewotICAgICAgICAg
IGlzRXJyb3IgPSB0cnVlOwotICAgICAgICAgIGRpc2Nvbm5lY3RXaXRoRXJyb3JNZXNzYWdlKGRl
c2NyaXB0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0
ZSBWaWRlb0NhcHR1cmVyIGNyZWF0ZVZpZGVvQ2FwdHVyZXIoKSB7Ci0gICAgVmlkZW9DYXB0dXJl
ciB2aWRlb0NhcHR1cmVyID0gbnVsbDsKLSAgICBTdHJpbmcgdmlkZW9GaWxlQXNDYW1lcmEgPSBn
ZXRJbnRlbnQoKS5nZXRTdHJpbmdFeHRyYShFWFRSQV9WSURFT19GSUxFX0FTX0NBTUVSQSk7Ci0g
ICAgaWYgKHZpZGVvRmlsZUFzQ2FtZXJhICE9IG51bGwpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAg
IHZpZGVvQ2FwdHVyZXIgPSBuZXcgRmlsZVZpZGVvQ2FwdHVyZXIodmlkZW9GaWxlQXNDYW1lcmEp
OwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigi
RmFpbGVkIHRvIG9wZW4gdmlkZW8gZmlsZSBmb3IgZW11bGF0ZWQgY2FtZXJhIik7Ci0gICAgICAg
IHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoc2NyZWVuY2FwdHVyZUVuYWJs
ZWQpIHsKLSAgICAgIGlmIChtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0Q29kZSAhPSBB
Y3Rpdml0eS5SRVNVTFRfT0spIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIlVzZXIgZGlkbid0IGdp
dmUgcGVybWlzc2lvbiB0byBjYXB0dXJlIHRoZSBzY3JlZW4uIik7Ci0gICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBTY3JlZW5DYXB0dXJlckFuZHJvaWQoCi0g
ICAgICAgICAgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGEsIG5ldyBNZWRpYVBy
b2plY3Rpb24uQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAg
IHB1YmxpYyB2b2lkIG9uU3RvcCgpIHsKLSAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlVzZXIg
cmV2b2tlZCBwZXJtaXNzaW9uIHRvIGNhcHR1cmUgdGhlIHNjcmVlbi4iKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9KTsKLSAgICB9IGVsc2UgaWYgKHVzZUNhbWVyYTIoKSkgewotICAgICAg
aWYgKCFjYXB0dXJlVG9UZXh0dXJlKCkpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoZ2V0U3RyaW5n
KFIuc3RyaW5nLmNhbWVyYTJfdGV4dHVyZV9vbmx5X2Vycm9yKSk7Ci0gICAgICAgIHJldHVybiBu
dWxsOwotICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRpbmcgY2FwdHVyZXIg
dXNpbmcgY2FtZXJhMiBBUEkuIik7Ci0gICAgICB2aWRlb0NhcHR1cmVyID0gY3JlYXRlQ2FtZXJh
Q2FwdHVyZXIobmV3IENhbWVyYTJFbnVtZXJhdG9yKHRoaXMpKTsKLSAgICB9IGVsc2UgewotICAg
ICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIGNhcHR1cmVyIHVzaW5nIGNhbWVyYTEgQVBJLiIp
OwotICAgICAgdmlkZW9DYXB0dXJlciA9IGNyZWF0ZUNhbWVyYUNhcHR1cmVyKG5ldyBDYW1lcmEx
RW51bWVyYXRvcihjYXB0dXJlVG9UZXh0dXJlKCkpKTsKLSAgICB9Ci0gICAgaWYgKHZpZGVvQ2Fw
dHVyZXIgPT0gbnVsbCkgewotICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBvcGVuIGNhbWVy
YSIpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiB2aWRlb0NhcHR1cmVy
OwotICB9Ci0KLSAgLy8gLS0tLS1JbXBsZW1lbnRhdGlvbiBvZiBBcHBSVENDbGllbnQuQXBwUlRD
U2lnbmFsaW5nRXZlbnRzIC0tLS0tLS0tLS0tLS0tLQotICAvLyBBbGwgY2FsbGJhY2tzIGFyZSBp
bnZva2VkIGZyb20gd2Vic29ja2V0IHNpZ25hbGluZyBsb29wZXIgdGhyZWFkIGFuZAotICAvLyBh
cmUgcm91dGVkIHRvIFVJIHRocmVhZC4KLSAgcHJpdmF0ZSB2b2lkIG9uQ29ubmVjdGVkVG9Sb29t
SW50ZXJuYWwoZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbXMpIHsKLSAgICBmaW5hbCBs
b25nIGRlbHRhID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVN
czsKLQotICAgIHNpZ25hbGluZ1BhcmFtZXRlcnMgPSBwYXJhbXM7Ci0gICAgbG9nQW5kVG9hc3Qo
IkNyZWF0aW5nIHBlZXIgY29ubmVjdGlvbiwgZGVsYXk9IiArIGRlbHRhICsgIm1zIik7Ci0gICAg
VmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0gbnVsbDsKLSAgICBpZiAocGVlckNvbm5lY3Rp
b25QYXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIHZpZGVvQ2FwdHVyZXIgPSBj
cmVhdGVWaWRlb0NhcHR1cmVyKCk7Ci0gICAgfQotICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNy
ZWF0ZVBlZXJDb25uZWN0aW9uKHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIGxvY2Fs
UmVuZGVyLAotICAgICAgICByZW1vdGVSZW5kZXJlcnMsIHZpZGVvQ2FwdHVyZXIsIHNpZ25hbGlu
Z1BhcmFtZXRlcnMpOwotCi0gICAgaWYgKHNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlhdG9yKSB7
Ci0gICAgICBsb2dBbmRUb2FzdCgiQ3JlYXRpbmcgT0ZGRVIuLi4iKTsKLSAgICAgIC8vIENyZWF0
ZSBvZmZlci4gT2ZmZXIgU0RQIHdpbGwgYmUgc2VudCB0byBhbnN3ZXJpbmcgY2xpZW50IGluCi0g
ICAgICAvLyBQZWVyQ29ubmVjdGlvbkV2ZW50cy5vbkxvY2FsRGVzY3JpcHRpb24gZXZlbnQuCi0g
ICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVPZmZlcigpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBpZiAocGFyYW1zLm9mZmVyU2RwICE9IG51bGwpIHsKLSAgICAgICAgcGVlckNvbm5lY3Rp
b25DbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocGFyYW1zLm9mZmVyU2RwKTsKLSAgICAgICAg
bG9nQW5kVG9hc3QoIkNyZWF0aW5nIEFOU1dFUi4uLiIpOwotICAgICAgICAvLyBDcmVhdGUgYW5z
d2VyLiBBbnN3ZXIgU0RQIHdpbGwgYmUgc2VudCB0byBvZmZlcmluZyBjbGllbnQgaW4KLSAgICAg
ICAgLy8gUGVlckNvbm5lY3Rpb25FdmVudHMub25Mb2NhbERlc2NyaXB0aW9uIGV2ZW50LgotICAg
ICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVBbnN3ZXIoKTsKLSAgICAgIH0KLSAgICAg
IGlmIChwYXJhbXMuaWNlQ2FuZGlkYXRlcyAhPSBudWxsKSB7Ci0gICAgICAgIC8vIEFkZCByZW1v
dGUgSUNFIGNhbmRpZGF0ZXMgZnJvbSByb29tLgotICAgICAgICBmb3IgKEljZUNhbmRpZGF0ZSBp
Y2VDYW5kaWRhdGUgOiBwYXJhbXMuaWNlQ2FuZGlkYXRlcykgewotICAgICAgICAgIHBlZXJDb25u
ZWN0aW9uQ2xpZW50LmFkZFJlbW90ZUljZUNhbmRpZGF0ZShpY2VDYW5kaWRhdGUpOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
Q29ubmVjdGVkVG9Sb29tKGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zKSB7Ci0gICAg
cnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgb25Db25uZWN0ZWRUb1Jvb21JbnRlcm5hbChwYXJh
bXMpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uUmVtb3RlRGVzY3JpcHRpb24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAg
IGZpbmFsIGxvbmcgZGVsdGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNhbGxTdGFy
dGVkVGltZU1zOwotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVj
dGlvbkNsaWVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiUmVjZWl2ZWQgcmVt
b3RlIFNEUCBmb3Igbm9uLWluaXRpbGl6ZWQgcGVlciBjb25uZWN0aW9uLiIpOwotICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBsb2dBbmRUb2FzdCgiUmVjZWl2ZWQgcmVtb3Rl
ICIgKyBzZHAudHlwZSArICIsIGRlbGF5PSIgKyBkZWx0YSArICJtcyIpOwotICAgICAgICBwZWVy
Q29ubmVjdGlvbkNsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHApOwotICAgICAgICBpZiAo
IXNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlhdG9yKSB7Ci0gICAgICAgICAgbG9nQW5kVG9hc3Qo
IkNyZWF0aW5nIEFOU1dFUi4uLiIpOwotICAgICAgICAgIC8vIENyZWF0ZSBhbnN3ZXIuIEFuc3dl
ciBTRFAgd2lsbCBiZSBzZW50IHRvIG9mZmVyaW5nIGNsaWVudCBpbgotICAgICAgICAgIC8vIFBl
ZXJDb25uZWN0aW9uRXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbiBldmVudC4KLSAgICAgICAgICBw
ZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVBbnN3ZXIoKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVtb3RlSWNlQ2Fu
ZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBydW5PblVpVGhyZWFk
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgPT0gbnVsbCkgewotICAgICAg
ICAgIExvZy5lKFRBRywgIlJlY2VpdmVkIElDRSBjYW5kaWRhdGUgZm9yIGEgbm9uLWluaXRpYWxp
emVkIHBlZXIgY29ubmVjdGlvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuYWRkUmVtb3RlSWNlQ2FuZGlkYXRlKGNhbmRpZGF0
ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
b25SZW1vdGVJY2VDYW5kaWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRh
dGVzKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9u
Q2xpZW50ID09IG51bGwpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJSZWNlaXZlZCBJQ0UgY2Fu
ZGlkYXRlIHJlbW92YWxzIGZvciBhIG5vbi1pbml0aWFsaXplZCBwZWVyIGNvbm5lY3Rpb24uIik7
Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uQ2xp
ZW50LnJlbW92ZVJlbW90ZUljZUNhbmRpZGF0ZXMoY2FuZGlkYXRlcyk7Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DaGFubmVsQ2xvc2UoKSB7
Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgbG9nQW5kVG9hc3QoIlJlbW90ZSBlbmQg
aHVuZyB1cDsgZHJvcHBpbmcgUGVlckNvbm5lY3Rpb24iKTsKLSAgICAgICAgZGlzY29ubmVjdCgp
OwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
Q2hhbm5lbEVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIHJlcG9ydEVycm9y
KGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIC8vIC0tLS0tSW1wbGVtZW50YXRpb24gb2YgUGVlckNv
bm5lY3Rpb25DbGllbnQuUGVlckNvbm5lY3Rpb25FdmVudHMuLS0tLS0tLS0tCi0gIC8vIFNlbmQg
bG9jYWwgcGVlciBjb25uZWN0aW9uIFNEUCBhbmQgSUNFIGNhbmRpZGF0ZXMgdG8gcmVtb3RlIHBh
cnR5LgotICAvLyBBbGwgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZyb20gcGVlciBjb25uZWN0aW9u
IGNsaWVudCBsb29wZXIgdGhyZWFkIGFuZAotICAvLyBhcmUgcm91dGVkIHRvIFVJIHRocmVhZC4K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uTG9jYWxEZXNjcmlwdGlvbihmaW5hbCBTZXNz
aW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgZmluYWwgbG9uZyBkZWx0YSA9IFN5c3RlbS5jdXJy
ZW50VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7Ci0gICAgcnVuT25VaVRocmVhZChu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgaWYgKGFwcFJ0Y0NsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgbG9nQW5k
VG9hc3QoIlNlbmRpbmcgIiArIHNkcC50eXBlICsgIiwgZGVsYXk9IiArIGRlbHRhICsgIm1zIik7
Ci0gICAgICAgICAgaWYgKHNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlhdG9yKSB7Ci0gICAgICAg
ICAgICBhcHBSdGNDbGllbnQuc2VuZE9mZmVyU2RwKHNkcCk7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGFwcFJ0Y0NsaWVudC5zZW5kQW5zd2VyU2RwKHNkcCk7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9N
YXhCaXRyYXRlID4gMCkgewotICAgICAgICAgIExvZy5kKFRBRywgIlNldCB2aWRlbyBtYXhpbXVt
IGJpdHJhdGU6ICIgKyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9NYXhCaXRyYXRlKTsK
LSAgICAgICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5zZXRWaWRlb01heEJpdHJhdGUocGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvTWF4Qml0cmF0ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0
ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgaWYgKGFwcFJ0Y0NsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgYXBwUnRjQ2xp
ZW50LnNlbmRMb2NhbEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRh
dGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAgcnVuT25V
aVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKGFwcFJ0Y0NsaWVudCAhPSBudWxsKSB7Ci0gICAgICAg
ICAgYXBwUnRjQ2xpZW50LnNlbmRMb2NhbEljZUNhbmRpZGF0ZVJlbW92YWxzKGNhbmRpZGF0ZXMp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25JY2VDb25uZWN0ZWQoKSB7Ci0gICAgZmluYWwgbG9uZyBkZWx0YSA9IFN5c3Rl
bS5jdXJyZW50VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7Ci0gICAgcnVuT25VaVRo
cmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgbG9nQW5kVG9hc3QoIklDRSBjb25uZWN0ZWQsIGRlbGF5PSIgKyBk
ZWx0YSArICJtcyIpOwotICAgICAgICBpY2VDb25uZWN0ZWQgPSB0cnVlOwotICAgICAgICBjYWxs
Q29ubmVjdGVkKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25JY2VEaXNjb25uZWN0ZWQoKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgbG9nQW5kVG9hc3QoIklDRSBkaXNjb25uZWN0ZWQiKTsKLSAgICAgICAgaWNlQ29ubmVj
dGVkID0gZmFsc2U7Ci0gICAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25uZWN0aW9uQ2xvc2VkKCkg
e30KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVyQ29ubmVjdGlvblN0YXRzUmVh
ZHkoZmluYWwgU3RhdHNSZXBvcnRbXSByZXBvcnRzKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgaWYgKCFpc0Vycm9yICYmIGljZUNvbm5lY3RlZCkgewotICAgICAgICAgIGh1ZEZy
YWdtZW50LnVwZGF0ZUVuY29kZXJTdGF0aXN0aWNzKHJlcG9ydHMpOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVyQ29u
bmVjdGlvbkVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIHJlcG9ydEVycm9y
KGRlc2NyaXB0aW9uKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L0NhbGxGcmFnbWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9DYWxsRnJhZ21lbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL0NhbGxGcmFnbWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTM5
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRj
OwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuRnJh
Z21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lkxh
eW91dEluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQu
dmlldy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VCdXR0b247Ci1pbXBv
cnQgYW5kcm9pZC53aWRnZXQuU2Vla0JhcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0Vmll
dzsKLQotaW1wb3J0IG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGU7Ci0KLS8q
KgotICogRnJhZ21lbnQgZm9yIGNhbGwgY29udHJvbC4KLSAqLwotcHVibGljIGNsYXNzIENhbGxG
cmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBWaWV3IGNvbnRyb2xWaWV3Owot
ICBwcml2YXRlIFRleHRWaWV3IGNvbnRhY3RWaWV3OwotICBwcml2YXRlIEltYWdlQnV0dG9uIGRp
c2Nvbm5lY3RCdXR0b247Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gY2FtZXJhU3dpdGNoQnV0dG9u
OwotICBwcml2YXRlIEltYWdlQnV0dG9uIHZpZGVvU2NhbGluZ0J1dHRvbjsKLSAgcHJpdmF0ZSBJ
bWFnZUJ1dHRvbiB0b2dnbGVNdXRlQnV0dG9uOwotICBwcml2YXRlIFRleHRWaWV3IGNhcHR1cmVG
b3JtYXRUZXh0OwotICBwcml2YXRlIFNlZWtCYXIgY2FwdHVyZUZvcm1hdFNsaWRlcjsKLSAgcHJp
dmF0ZSBPbkNhbGxFdmVudHMgY2FsbEV2ZW50czsKLSAgcHJpdmF0ZSBTY2FsaW5nVHlwZSBzY2Fs
aW5nVHlwZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQgPSB0cnVlOwotCi0g
IC8qKgotICAgKiBDYWxsIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBjb250YWluZXIgYWN0aXZpdHku
Ci0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIE9uQ2FsbEV2ZW50cyB7Ci0gICAgdm9pZCBvbkNh
bGxIYW5nVXAoKTsKLSAgICB2b2lkIG9uQ2FtZXJhU3dpdGNoKCk7Ci0gICAgdm9pZCBvblZpZGVv
U2NhbGluZ1N3aXRjaChTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSk7Ci0gICAgdm9pZCBvbkNhcHR1
cmVGb3JtYXRDaGFuZ2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKTsKLSAg
ICBib29sZWFuIG9uVG9nZ2xlTWljKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZp
ZXcgb25DcmVhdGVWaWV3KAotICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIsIFZpZXdHcm91
cCBjb250YWluZXIsIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBjb250cm9sVmll
dyA9IGluZmxhdGVyLmluZmxhdGUoUi5sYXlvdXQuZnJhZ21lbnRfY2FsbCwgY29udGFpbmVyLCBm
YWxzZSk7Ci0KLSAgICAvLyBDcmVhdGUgVUkgY29udHJvbHMuCi0gICAgY29udGFjdFZpZXcgPSAo
VGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmNvbnRhY3RfbmFtZV9jYWxs
KTsKLSAgICBkaXNjb25uZWN0QnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5maW5k
Vmlld0J5SWQoUi5pZC5idXR0b25fY2FsbF9kaXNjb25uZWN0KTsKLSAgICBjYW1lcmFTd2l0Y2hC
dXR0b24gPSAoSW1hZ2VCdXR0b24pIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmJ1dHRv
bl9jYWxsX3N3aXRjaF9jYW1lcmEpOwotICAgIHZpZGVvU2NhbGluZ0J1dHRvbiA9IChJbWFnZUJ1
dHRvbikgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0dG9uX2NhbGxfc2NhbGluZ19t
b2RlKTsKLSAgICB0b2dnbGVNdXRlQnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5m
aW5kVmlld0J5SWQoUi5pZC5idXR0b25fY2FsbF90b2dnbGVfbWljKTsKLSAgICBjYXB0dXJlRm9y
bWF0VGV4dCA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuY2FwdHVy
ZV9mb3JtYXRfdGV4dF9jYWxsKTsKLSAgICBjYXB0dXJlRm9ybWF0U2xpZGVyID0gKFNlZWtCYXIp
IGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmNhcHR1cmVfZm9ybWF0X3NsaWRlcl9jYWxs
KTsKLQotICAgIC8vIEFkZCBidXR0b25zIGNsaWNrIGV2ZW50cy4KLSAgICBkaXNjb25uZWN0QnV0
dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAg
ICAgIGNhbGxFdmVudHMub25DYWxsSGFuZ1VwKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBj
YW1lcmFTd2l0Y2hCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0
ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3
IHZpZXcpIHsKLSAgICAgICAgY2FsbEV2ZW50cy5vbkNhbWVyYVN3aXRjaCgpOwotICAgICAgfQot
ICAgIH0pOwotCi0gICAgdmlkZW9TY2FsaW5nQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcg
Vmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGlmIChzY2FsaW5nVHlwZSA9PSBTY2Fs
aW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklMTCkgewotICAgICAgICAgIHZpZGVvU2NhbGluZ0J1dHRv
bi5zZXRCYWNrZ3JvdW5kUmVzb3VyY2UoUi5kcmF3YWJsZS5pY19hY3Rpb25fZnVsbF9zY3JlZW4p
OwotICAgICAgICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJVDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2aWRlb1NjYWxpbmdCdXR0b24uc2V0QmFja2dy
b3VuZFJlc291cmNlKFIuZHJhd2FibGUuaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVu
KTsKLSAgICAgICAgICBzY2FsaW5nVHlwZSA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSUxM
OwotICAgICAgICB9Ci0gICAgICAgIGNhbGxFdmVudHMub25WaWRlb1NjYWxpbmdTd2l0Y2goc2Nh
bGluZ1R5cGUpOwotICAgICAgfQotICAgIH0pOwotICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5
cGUuU0NBTEVfQVNQRUNUX0ZJTEw7Ci0KLSAgICB0b2dnbGVNdXRlQnV0dG9uLnNldE9uQ2xpY2tM
aXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGJvb2xlYW4gZW5h
YmxlZCA9IGNhbGxFdmVudHMub25Ub2dnbGVNaWMoKTsKLSAgICAgICAgdG9nZ2xlTXV0ZUJ1dHRv
bi5zZXRBbHBoYShlbmFibGVkID8gMS4wZiA6IDAuM2YpOwotICAgICAgfQotICAgIH0pOwotCi0g
ICAgcmV0dXJuIGNvbnRyb2xWaWV3OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uU3RhcnQoKSB7Ci0gICAgc3VwZXIub25TdGFydCgpOwotCi0gICAgYm9vbGVhbiBjYXB0dXJl
U2xpZGVyRW5hYmxlZCA9IGZhbHNlOwotICAgIEJ1bmRsZSBhcmdzID0gZ2V0QXJndW1lbnRzKCk7
Ci0gICAgaWYgKGFyZ3MgIT0gbnVsbCkgewotICAgICAgU3RyaW5nIGNvbnRhY3ROYW1lID0gYXJn
cy5nZXRTdHJpbmcoQ2FsbEFjdGl2aXR5LkVYVFJBX1JPT01JRCk7Ci0gICAgICBjb250YWN0Vmll
dy5zZXRUZXh0KGNvbnRhY3ROYW1lKTsKLSAgICAgIHZpZGVvQ2FsbEVuYWJsZWQgPSBhcmdzLmdl
dEJvb2xlYW4oQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBTEwsIHRydWUpOwotICAgICAgY2Fw
dHVyZVNsaWRlckVuYWJsZWQgPSB2aWRlb0NhbGxFbmFibGVkCi0gICAgICAgICAgJiYgYXJncy5n
ZXRCb29sZWFuKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQVBUVVJFUVVBTElUWVNMSURFUl9F
TkFCTEVELCBmYWxzZSk7Ci0gICAgfQotICAgIGlmICghdmlkZW9DYWxsRW5hYmxlZCkgewotICAg
ICAgY2FtZXJhU3dpdGNoQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwotICAg
IH0KLSAgICBpZiAoY2FwdHVyZVNsaWRlckVuYWJsZWQpIHsKLSAgICAgIGNhcHR1cmVGb3JtYXRT
bGlkZXIuc2V0T25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIoCi0gICAgICAgICAgbmV3IENhcHR1cmVR
dWFsaXR5Q29udHJvbGxlcihjYXB0dXJlRm9ybWF0VGV4dCwgY2FsbEV2ZW50cykpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBjYXB0dXJlRm9ybWF0VGV4dC5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7
Ci0gICAgICBjYXB0dXJlRm9ybWF0U2xpZGVyLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAg
ICB9Ci0gIH0KLQotICAvLyBUT0RPKHNha2FsKTogUmVwbGFjZSB3aXRoIG9uQXR0YWNoKENvbnRl
eHQpIG9uY2Ugd2Ugb25seSBzdXBwb3J0IEFQSSBsZXZlbCAyMysuCi0gIEBTdXBwcmVzc1dhcm5p
bmdzKCJkZXByZWNhdGlvbiIpCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkF0dGFjaChB
Y3Rpdml0eSBhY3Rpdml0eSkgewotICAgIHN1cGVyLm9uQXR0YWNoKGFjdGl2aXR5KTsKLSAgICBj
YWxsRXZlbnRzID0gKE9uQ2FsbEV2ZW50cykgYWN0aXZpdHk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIuamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FwdHVyZVF1YWxpdHlDb250
cm9sbGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9DYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEx
MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNlZWtCYXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRn
ZXQuVGV4dFZpZXc7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwu
Q29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51
dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2Fw
dHVyZUZvcm1hdDsKLQotLyoqCi0gKiBDb250cm9sIGNhcHR1cmUgZm9ybWF0IGJhc2VkIG9uIGEg
c2Vla2JhciBsaXN0ZW5lci4KLSAqLwotcHVibGljIGNsYXNzIENhcHR1cmVRdWFsaXR5Q29udHJv
bGxlciBpbXBsZW1lbnRzIFNlZWtCYXIuT25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIgewotICBwcml2
YXRlIGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZm9ybWF0cyA9Ci0gICAgICBBcnJheXMuYXNM
aXN0KG5ldyBDYXB0dXJlRm9ybWF0KDEyODAsIDcyMCwgMCwgMzAwMDApLCBuZXcgQ2FwdHVyZUZv
cm1hdCg5NjAsIDU0MCwgMCwgMzAwMDApLAotICAgICAgICAgIG5ldyBDYXB0dXJlRm9ybWF0KDY0
MCwgNDgwLCAwLCAzMDAwMCksIG5ldyBDYXB0dXJlRm9ybWF0KDQ4MCwgMzYwLCAwLCAzMDAwMCks
Ci0gICAgICAgICAgbmV3IENhcHR1cmVGb3JtYXQoMzIwLCAyNDAsIDAsIDMwMDAwKSwgbmV3IENh
cHR1cmVGb3JtYXQoMjU2LCAxNDQsIDAsIDMwMDAwKSk7Ci0gIC8vIFByaW9yaXRpemUgZnJhbWVy
YXRlIGJlbG93IHRoaXMgdGhyZXNob2xkIGFuZCByZXNvbHV0aW9uIGFib3ZlIHRoZSB0aHJlc2hv
bGQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGUkFNRVJBVEVfVEhSRVNIT0xEID0gMTU7
Ci0gIHByaXZhdGUgVGV4dFZpZXcgY2FwdHVyZUZvcm1hdFRleHQ7Ci0gIHByaXZhdGUgQ2FsbEZy
YWdtZW50Lk9uQ2FsbEV2ZW50cyBjYWxsRXZlbnRzOwotICBwcml2YXRlIGludCB3aWR0aCA9IDA7
Ci0gIHByaXZhdGUgaW50IGhlaWdodCA9IDA7Ci0gIHByaXZhdGUgaW50IGZyYW1lcmF0ZSA9IDA7
Ci0gIHByaXZhdGUgZG91YmxlIHRhcmdldEJhbmR3aWR0aCA9IDA7Ci0KLSAgcHVibGljIENhcHR1
cmVRdWFsaXR5Q29udHJvbGxlcigKLSAgICAgIFRleHRWaWV3IGNhcHR1cmVGb3JtYXRUZXh0LCBD
YWxsRnJhZ21lbnQuT25DYWxsRXZlbnRzIGNhbGxFdmVudHMpIHsKLSAgICB0aGlzLmNhcHR1cmVG
b3JtYXRUZXh0ID0gY2FwdHVyZUZvcm1hdFRleHQ7Ci0gICAgdGhpcy5jYWxsRXZlbnRzID0gY2Fs
bEV2ZW50czsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgQ29tcGFyYXRvcjxDYXB0dXJlRm9ybWF0
PiBjb21wYXJlRm9ybWF0cyA9IG5ldyBDb21wYXJhdG9yPENhcHR1cmVGb3JtYXQ+KCkgewotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyBpbnQgY29tcGFyZShDYXB0dXJlRm9ybWF0IGZpcnN0LCBD
YXB0dXJlRm9ybWF0IHNlY29uZCkgewotICAgICAgaW50IGZpcnN0RnBzID0gY2FsY3VsYXRlRnJh
bWVyYXRlKHRhcmdldEJhbmR3aWR0aCwgZmlyc3QpOwotICAgICAgaW50IHNlY29uZEZwcyA9IGNh
bGN1bGF0ZUZyYW1lcmF0ZSh0YXJnZXRCYW5kd2lkdGgsIHNlY29uZCk7Ci0KLSAgICAgIGlmIChm
aXJzdEZwcyA+PSBGUkFNRVJBVEVfVEhSRVNIT0xEICYmIHNlY29uZEZwcyA+PSBGUkFNRVJBVEVf
VEhSRVNIT0xECi0gICAgICAgICAgfHwgZmlyc3RGcHMgPT0gc2Vjb25kRnBzKSB7Ci0gICAgICAg
IC8vIENvbXBhcmUgcmVzb2x1dGlvbi4KLSAgICAgICAgcmV0dXJuIGZpcnN0LndpZHRoICogZmly
c3QuaGVpZ2h0IC0gc2Vjb25kLndpZHRoICogc2Vjb25kLmhlaWdodDsKLSAgICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIENvbXBhcmUgZnBzLgotICAgICAgICByZXR1cm4gZmlyc3RGcHMgLSBzZWNv
bmRGcHM7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBvblByb2dyZXNzQ2hhbmdlZChTZWVrQmFyIHNlZWtCYXIsIGludCBwcm9ncmVzcywgYm9vbGVh
biBmcm9tVXNlcikgewotICAgIGlmIChwcm9ncmVzcyA9PSAwKSB7Ci0gICAgICB3aWR0aCA9IDA7
Ci0gICAgICBoZWlnaHQgPSAwOwotICAgICAgZnJhbWVyYXRlID0gMDsKLSAgICAgIGNhcHR1cmVG
b3JtYXRUZXh0LnNldFRleHQoUi5zdHJpbmcubXV0ZWQpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEV4dHJhY3QgbWF4IGJhbmR3aWR0aCAoaW4gbWlsbGlwaXhlbHMgLyBzZWNvbmQp
LgotICAgIGxvbmcgbWF4Q2FwdHVyZUJhbmR3aWR0aCA9IGphdmEubGFuZy5Mb25nLk1JTl9WQUxV
RTsKLSAgICBmb3IgKENhcHR1cmVGb3JtYXQgZm9ybWF0IDogZm9ybWF0cykgewotICAgICAgbWF4
Q2FwdHVyZUJhbmR3aWR0aCA9Ci0gICAgICAgICAgTWF0aC5tYXgobWF4Q2FwdHVyZUJhbmR3aWR0
aCwgKGxvbmcpIGZvcm1hdC53aWR0aCAqIGZvcm1hdC5oZWlnaHQgKiBmb3JtYXQuZnJhbWVyYXRl
Lm1heCk7Ci0gICAgfQotCi0gICAgLy8gRnJhY3Rpb24gYmV0d2VlbiAwIGFuZCAxLgotICAgIGRv
dWJsZSBiYW5kd2lkdGhGcmFjdGlvbiA9IChkb3VibGUpIHByb2dyZXNzIC8gMTAwLjA7Ci0gICAg
Ly8gTWFrZSBhIGxvZy1zY2FsZSB0cmFuc2Zvcm1hdGlvbiwgc3RpbGwgYmV0d2VlbiAwIGFuZCAx
LgotICAgIGZpbmFsIGRvdWJsZSBrRXhwQ29uc3RhbnQgPSAzLjA7Ci0gICAgYmFuZHdpZHRoRnJh
Y3Rpb24gPQotICAgICAgICAoTWF0aC5leHAoa0V4cENvbnN0YW50ICogYmFuZHdpZHRoRnJhY3Rp
b24pIC0gMSkgLyAoTWF0aC5leHAoa0V4cENvbnN0YW50KSAtIDEpOwotICAgIHRhcmdldEJhbmR3
aWR0aCA9IGJhbmR3aWR0aEZyYWN0aW9uICogbWF4Q2FwdHVyZUJhbmR3aWR0aDsKLQotICAgIC8v
IENob29zZSB0aGUgYmVzdCBmb3JtYXQgZ2l2ZW4gYSB0YXJnZXQgYmFuZHdpZHRoLgotICAgIGZp
bmFsIENhcHR1cmVGb3JtYXQgYmVzdEZvcm1hdCA9IENvbGxlY3Rpb25zLm1heChmb3JtYXRzLCBj
b21wYXJlRm9ybWF0cyk7Ci0gICAgd2lkdGggPSBiZXN0Rm9ybWF0LndpZHRoOwotICAgIGhlaWdo
dCA9IGJlc3RGb3JtYXQuaGVpZ2h0OwotICAgIGZyYW1lcmF0ZSA9IGNhbGN1bGF0ZUZyYW1lcmF0
ZSh0YXJnZXRCYW5kd2lkdGgsIGJlc3RGb3JtYXQpOwotICAgIGNhcHR1cmVGb3JtYXRUZXh0LnNl
dFRleHQoCi0gICAgICAgIFN0cmluZy5mb3JtYXQoY2FwdHVyZUZvcm1hdFRleHQuZ2V0Q29udGV4
dCgpLmdldFN0cmluZyhSLnN0cmluZy5mb3JtYXRfZGVzY3JpcHRpb24pLCB3aWR0aCwKLSAgICAg
ICAgICAgIGhlaWdodCwgZnJhbWVyYXRlKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25TdGFydFRyYWNraW5nVG91Y2goU2Vla0JhciBzZWVrQmFyKSB7fQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBvblN0b3BUcmFja2luZ1RvdWNoKFNlZWtCYXIgc2Vla0Jhcikg
ewotICAgIGNhbGxFdmVudHMub25DYXB0dXJlRm9ybWF0Q2hhbmdlKHdpZHRoLCBoZWlnaHQsIGZy
YW1lcmF0ZSk7Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhlIGhpZ2hlc3QgZnJhbWUgcmF0ZSBwb3Nz
aWJsZSBiYXNlZCBvbiBiYW5kd2lkdGggYW5kIGZvcm1hdC4KLSAgcHJpdmF0ZSBpbnQgY2FsY3Vs
YXRlRnJhbWVyYXRlKGRvdWJsZSBiYW5kd2lkdGgsIENhcHR1cmVGb3JtYXQgZm9ybWF0KSB7Ci0g
ICAgcmV0dXJuIChpbnQpIE1hdGgucm91bmQoCi0gICAgICAgIE1hdGgubWluKGZvcm1hdC5mcmFt
ZXJhdGUubWF4LCAoaW50KSBNYXRoLnJvdW5kKGJhbmR3aWR0aCAvIChmb3JtYXQud2lkdGggKiBm
b3JtYXQuaGVpZ2h0KSkpCi0gICAgICAgIC8gMTAwMC4wKTsKLSAgfQotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Nvbm5lY3RBY3Rpdml0eS5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Db25uZWN0QWN0aXZpdHkuamF2YQkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Nvbm5lY3RBY3Rpdml0
eS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTQ1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0
aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5j
b250ZW50LkRpYWxvZ0ludGVyZmFjZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKLWltcG9ydCBhbmRyb2lk
Lm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5wcmVm
ZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBv
cnQgYW5kcm9pZC52aWV3LkNvbnRleHRNZW51OwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVu
dDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0
ZW07Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcu
T25DbGlja0xpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5FZGl0b3JJ
bmZvOwotaW1wb3J0IGFuZHJvaWQud2Via2l0LlVSTFV0aWw7Ci1pbXBvcnQgYW5kcm9pZC53aWRn
ZXQuQWRhcHRlclZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQXJyYXlBZGFwdGVyOwotaW1w
b3J0IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdl
QnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OwotaW1wb3J0IGFuZHJvaWQu
d2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLlJhbmRvbTsKLWltcG9ydCBvcmcuanNvbi5KU09OQXJyYXk7Ci1pbXBvcnQgb3JnLmpz
b24uSlNPTkV4Y2VwdGlvbjsKLQotLyoqCi0gKiBIYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIHdo
ZXJlIHRoZSB1c2VyIHNlbGVjdHMgd2hpY2ggcm9vbSB0byBqb2luLgotICovCi1wdWJsaWMgY2xh
c3MgQ29ubmVjdEFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIkNvbm5lY3RBY3Rpdml0eSI7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBDT05ORUNUSU9OX1JFUVVFU1QgPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgUkVNT1ZFX0ZBVk9SSVRFX0lOREVYID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBj
b21tYW5kTGluZVJ1biA9IGZhbHNlOwotCi0gIHByaXZhdGUgSW1hZ2VCdXR0b24gY29ubmVjdEJ1
dHRvbjsKLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBhZGRGYXZvcml0ZUJ1dHRvbjsKLSAgcHJpdmF0
ZSBFZGl0VGV4dCByb29tRWRpdFRleHQ7Ci0gIHByaXZhdGUgTGlzdFZpZXcgcm9vbUxpc3RWaWV3
OwotICBwcml2YXRlIFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWY7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZWaWRlb0NhbGxFbmFibGVkOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmU2Ny
ZWVuY2FwdHVyZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkNhbWVyYTI7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZSZXNvbHV0aW9uOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRnBzOwot
ICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQ2FwdHVyZVF1YWxpdHlTbGlkZXI7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZWaWRlb0JpdHJhdGVUeXBlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVm
VmlkZW9CaXRyYXRlVmFsdWU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZWaWRlb0NvZGVjOwot
ICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQXVkaW9CaXRyYXRlVHlwZTsKLSAgcHJpdmF0ZSBTdHJp
bmcga2V5cHJlZkF1ZGlvQml0cmF0ZVZhbHVlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQXVk
aW9Db2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkh3Q29kZWNBY2NlbGVyYXRpb247Ci0g
IHByaXZhdGUgU3RyaW5nIGtleXByZWZDYXB0dXJlVG9UZXh0dXJlOwotICBwcml2YXRlIFN0cmlu
ZyBrZXlwcmVmTm9BdWRpb1Byb2Nlc3NpbmdQaXBlbGluZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZkFlY0R1bXA7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZPcGVuU0xFUzsKLSAgcHJpdmF0
ZSBTdHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluQWVjOwotICBwcml2YXRlIFN0cmluZyBrZXlw
cmVmRGlzYWJsZUJ1aWx0SW5BZ2M7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVp
bHRJbk5zOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sOwotICBw
cml2YXRlIFN0cmluZyBrZXlwcmVmRGlzcGxheUh1ZDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJl
ZlRyYWNpbmc7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZSb29tU2VydmVyVXJsOwotICBwcml2
YXRlIFN0cmluZyBrZXlwcmVmUm9vbTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJvb21MaXN0
OwotICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IHJvb21MaXN0OwotICBwcml2YXRlIEFycmF5
QWRhcHRlcjxTdHJpbmc+IGFkYXB0ZXI7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
Q3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0ZShz
YXZlZEluc3RhbmNlU3RhdGUpOwotCi0gICAgLy8gR2V0IHNldHRpbmcga2V5cy4KLSAgICBQcmVm
ZXJlbmNlTWFuYWdlci5zZXREZWZhdWx0VmFsdWVzKHRoaXMsIFIueG1sLnByZWZlcmVuY2VzLCBm
YWxzZSk7Ci0gICAgc2hhcmVkUHJlZiA9IFByZWZlcmVuY2VNYW5hZ2VyLmdldERlZmF1bHRTaGFy
ZWRQcmVmZXJlbmNlcyh0aGlzKTsKLSAgICBrZXlwcmVmVmlkZW9DYWxsRW5hYmxlZCA9IGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX3ZpZGVvY2FsbF9rZXkpOwotICAgIGtleXByZWZTY3JlZW5jYXB0
dXJlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc2NyZWVuY2FwdHVyZV9rZXkpOwotICAgIGtl
eXByZWZDYW1lcmEyID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2FtZXJhMl9rZXkpOwotICAg
IGtleXByZWZSZXNvbHV0aW9uID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcmVzb2x1dGlvbl9r
ZXkpOwotICAgIGtleXByZWZGcHMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9mcHNfa2V5KTsK
LSAgICBrZXlwcmVmQ2FwdHVyZVF1YWxpdHlTbGlkZXIgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl9jYXB0dXJlcXVhbGl0eXNsaWRlcl9rZXkpOwotICAgIGtleXByZWZWaWRlb0JpdHJhdGVUeXBl
ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRyYXRlX2tleSk7Ci0gICAga2V5
cHJlZlZpZGVvQml0cmF0ZVZhbHVlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9i
aXRyYXRldmFsdWVfa2V5KTsKLSAgICBrZXlwcmVmVmlkZW9Db2RlYyA9IGdldFN0cmluZyhSLnN0
cmluZy5wcmVmX3ZpZGVvY29kZWNfa2V5KTsKLSAgICBrZXlwcmVmSHdDb2RlY0FjY2VsZXJhdGlv
biA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2h3Y29kZWNfa2V5KTsKLSAgICBrZXlwcmVmQ2Fw
dHVyZVRvVGV4dHVyZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmV0b3RleHR1cmVf
a2V5KTsKLSAgICBrZXlwcmVmQXVkaW9CaXRyYXRlVHlwZSA9IGdldFN0cmluZyhSLnN0cmluZy5w
cmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2tleSk7Ci0gICAga2V5cHJlZkF1ZGlvQml0cmF0ZVZhbHVl
ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9rZXkpOwot
ICAgIGtleXByZWZBdWRpb0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYXVkaW9jb2Rl
Y19rZXkpOwotICAgIGtleXByZWZOb0F1ZGlvUHJvY2Vzc2luZ1BpcGVsaW5lID0gZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfbm9hdWRpb3Byb2Nlc3Npbmdfa2V5KTsKLSAgICBrZXlwcmVmQWVjRHVt
cCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2FlY2R1bXBfa2V5KTsKLSAgICBrZXlwcmVmT3Bl
blNMRVMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9vcGVuc2xlc19rZXkpOwotICAgIGtleXBy
ZWZEaXNhYmxlQnVpbHRJbkFlYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVp
bHRfaW5fYWVjX2tleSk7Ci0gICAga2V5cHJlZkRpc2FibGVCdWlsdEluQWdjID0gZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2Nfa2V5KTsKLSAgICBrZXlwcmVmRGlz
YWJsZUJ1aWx0SW5OcyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5f
bnNfa2V5KTsKLSAgICBrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sID0gZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfa2V5KTsKLSAgICBrZXlwcmVmRGlzcGxheUh1
ZCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc3BsYXlodWRfa2V5KTsKLSAgICBrZXlwcmVm
VHJhY2luZyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3RyYWNpbmdfa2V5KTsKLSAgICBrZXlw
cmVmUm9vbVNlcnZlclVybCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jvb21fc2VydmVyX3Vy
bF9rZXkpOwotICAgIGtleXByZWZSb29tID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcm9vbV9r
ZXkpOwotICAgIGtleXByZWZSb29tTGlzdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jvb21f
bGlzdF9rZXkpOwotCi0gICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuYWN0aXZpdHlfY29ubmVj
dCk7Ci0KLSAgICByb29tRWRpdFRleHQgPSAoRWRpdFRleHQpIGZpbmRWaWV3QnlJZChSLmlkLnJv
b21fZWRpdHRleHQpOwotICAgIHJvb21FZGl0VGV4dC5zZXRPbkVkaXRvckFjdGlvbkxpc3RlbmVy
KG5ldyBUZXh0Vmlldy5PbkVkaXRvckFjdGlvbkxpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgYm9vbGVhbiBvbkVkaXRvckFjdGlvbihUZXh0VmlldyB0ZXh0Vmlldywg
aW50IGksIEtleUV2ZW50IGtleUV2ZW50KSB7Ci0gICAgICAgIGlmIChpID09IEVkaXRvckluZm8u
SU1FX0FDVElPTl9ET05FKSB7Ci0gICAgICAgICAgYWRkRmF2b3JpdGVCdXR0b24ucGVyZm9ybUNs
aWNrKCk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgfQotICAgIH0pOwotICAgIHJvb21FZGl0VGV4dC5yZXF1ZXN0Rm9jdXMo
KTsKLQotICAgIHJvb21MaXN0VmlldyA9IChMaXN0VmlldykgZmluZFZpZXdCeUlkKFIuaWQucm9v
bV9saXN0dmlldyk7Ci0gICAgcm9vbUxpc3RWaWV3LnNldEVtcHR5VmlldyhmaW5kVmlld0J5SWQo
YW5kcm9pZC5SLmlkLmVtcHR5KSk7Ci0gICAgcm9vbUxpc3RWaWV3LnNldE9uSXRlbUNsaWNrTGlz
dGVuZXIocm9vbUxpc3RDbGlja0xpc3RlbmVyKTsKLSAgICByZWdpc3RlckZvckNvbnRleHRNZW51
KHJvb21MaXN0Vmlldyk7Ci0gICAgY29ubmVjdEJ1dHRvbiA9IChJbWFnZUJ1dHRvbikgZmluZFZp
ZXdCeUlkKFIuaWQuY29ubmVjdF9idXR0b24pOwotICAgIGNvbm5lY3RCdXR0b24uc2V0T25DbGlj
a0xpc3RlbmVyKGNvbm5lY3RMaXN0ZW5lcik7Ci0gICAgYWRkRmF2b3JpdGVCdXR0b24gPSAoSW1h
Z2VCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmFkZF9mYXZvcml0ZV9idXR0b24pOwotICAgIGFk
ZEZhdm9yaXRlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihhZGRGYXZvcml0ZUxpc3RlbmVyKTsK
LQotICAgIC8vIElmIGFuIGltcGxpY2l0IFZJRVcgaW50ZW50IGlzIGxhdW5jaGluZyB0aGUgYXBw
LCBnbyBkaXJlY3RseSB0byB0aGF0IFVSTC4KLSAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gZ2V0
SW50ZW50KCk7Ci0gICAgaWYgKCJhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyIuZXF1YWxzKGlu
dGVudC5nZXRBY3Rpb24oKSkgJiYgIWNvbW1hbmRMaW5lUnVuKSB7Ci0gICAgICBib29sZWFuIGxv
b3BiYWNrID0gaW50ZW50LmdldEJvb2xlYW5FeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfTE9PUEJB
Q0ssIGZhbHNlKTsKLSAgICAgIGludCBydW5UaW1lTXMgPSBpbnRlbnQuZ2V0SW50RXh0cmEoQ2Fs
bEFjdGl2aXR5LkVYVFJBX1JVTlRJTUUsIDApOwotICAgICAgYm9vbGVhbiB1c2VWYWx1ZXNGcm9t
SW50ZW50ID0KLSAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKENhbGxBY3Rpdml0eS5F
WFRSQV9VU0VfVkFMVUVTX0ZST01fSU5URU5ULCBmYWxzZSk7Ci0gICAgICBTdHJpbmcgcm9vbSA9
IHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZSb29tLCAiIik7Ci0gICAgICBjb25uZWN0VG9S
b29tKHJvb20sIHRydWUsIGxvb3BiYWNrLCB1c2VWYWx1ZXNGcm9tSW50ZW50LCBydW5UaW1lTXMp
OwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9w
dGlvbnNNZW51KE1lbnUgbWVudSkgewotICAgIGdldE1lbnVJbmZsYXRlcigpLmluZmxhdGUoUi5t
ZW51LmNvbm5lY3RfbWVudSwgbWVudSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgb25DcmVhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSBtZW51
LCBWaWV3IHYsIENvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbyBtZW51SW5mbykgewotICAgIGlm
ICh2LmdldElkKCkgPT0gUi5pZC5yb29tX2xpc3R2aWV3KSB7Ci0gICAgICBBZGFwdGVyVmlldy5B
ZGFwdGVyQ29udGV4dE1lbnVJbmZvIGluZm8gPSAoQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRN
ZW51SW5mbykgbWVudUluZm87Ci0gICAgICBtZW51LnNldEhlYWRlclRpdGxlKHJvb21MaXN0Lmdl
dChpbmZvLnBvc2l0aW9uKSk7Ci0gICAgICBTdHJpbmdbXSBtZW51SXRlbXMgPSBnZXRSZXNvdXJj
ZXMoKS5nZXRTdHJpbmdBcnJheShSLmFycmF5LnJvb21MaXN0Q29udGV4dE1lbnUpOwotICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbWVu
dS5hZGQoTWVudS5OT05FLCBpLCBpLCBtZW51SXRlbXNbaV0pOwotICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICBzdXBlci5vbkNyZWF0ZUNvbnRleHRNZW51KG1lbnUsIHYsIG1lbnVJbmZvKTsK
LSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gb25Db250ZXh0SXRl
bVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKLSAgICBpZiAoaXRlbS5nZXRJdGVtSWQoKSA9PSBS
RU1PVkVfRkFWT1JJVEVfSU5ERVgpIHsKLSAgICAgIEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0
TWVudUluZm8gaW5mbyA9Ci0gICAgICAgICAgKEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVu
dUluZm8pIGl0ZW0uZ2V0TWVudUluZm8oKTsKLSAgICAgIHJvb21MaXN0LnJlbW92ZShpbmZvLnBv
c2l0aW9uKTsKLSAgICAgIGFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBzdXBlci5vbkNvbnRleHRJdGVtU2VsZWN0
ZWQoaXRlbSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gb25PcHRpb25z
SXRlbVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKLSAgICAvLyBIYW5kbGUgcHJlc3NlcyBvbiB0
aGUgYWN0aW9uIGJhciBpdGVtcy4KLSAgICBpZiAoaXRlbS5nZXRJdGVtSWQoKSA9PSBSLmlkLmFj
dGlvbl9zZXR0aW5ncykgewotICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQodGhpcywg
U2V0dGluZ3NBY3Rpdml0eS5jbGFzcyk7Ci0gICAgICBzdGFydEFjdGl2aXR5KGludGVudCk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGl0ZW0uZ2V0SXRlbUlkKCkgPT0gUi5p
ZC5hY3Rpb25fbG9vcGJhY2spIHsKLSAgICAgIGNvbm5lY3RUb1Jvb20obnVsbCwgZmFsc2UsIHRy
dWUsIGZhbHNlLCAwKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBy
ZXR1cm4gc3VwZXIub25PcHRpb25zSXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgIH0KLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBhdXNlKCkgewotICAgIHN1cGVyLm9uUGF1c2Uo
KTsKLSAgICBTdHJpbmcgcm9vbSA9IHJvb21FZGl0VGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKTsK
LSAgICBTdHJpbmcgcm9vbUxpc3RKc29uID0gbmV3IEpTT05BcnJheShyb29tTGlzdCkudG9TdHJp
bmcoKTsKLSAgICBTaGFyZWRQcmVmZXJlbmNlcy5FZGl0b3IgZWRpdG9yID0gc2hhcmVkUHJlZi5l
ZGl0KCk7Ci0gICAgZWRpdG9yLnB1dFN0cmluZyhrZXlwcmVmUm9vbSwgcm9vbSk7Ci0gICAgZWRp
dG9yLnB1dFN0cmluZyhrZXlwcmVmUm9vbUxpc3QsIHJvb21MaXN0SnNvbik7Ci0gICAgZWRpdG9y
LmNvbW1pdCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVzdW1lKCkg
ewotICAgIHN1cGVyLm9uUmVzdW1lKCk7Ci0gICAgU3RyaW5nIHJvb20gPSBzaGFyZWRQcmVmLmdl
dFN0cmluZyhrZXlwcmVmUm9vbSwgIiIpOwotICAgIHJvb21FZGl0VGV4dC5zZXRUZXh0KHJvb20p
OwotICAgIHJvb21MaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgU3RyaW5nIHJv
b21MaXN0SnNvbiA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZSb29tTGlzdCwgbnVsbCk7
Ci0gICAgaWYgKHJvb21MaXN0SnNvbiAhPSBudWxsKSB7Ci0gICAgICB0cnkgewotICAgICAgICBK
U09OQXJyYXkganNvbkFycmF5ID0gbmV3IEpTT05BcnJheShyb29tTGlzdEpzb24pOwotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGpzb25BcnJheS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAg
ICAgcm9vbUxpc3QuYWRkKGpzb25BcnJheS5nZXQoaSkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0K
LSAgICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShUQUcsICJG
YWlsZWQgdG8gbG9hZCByb29tIGxpc3Q6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAg
IH0KLSAgICBhZGFwdGVyID0gbmV3IEFycmF5QWRhcHRlcjxTdHJpbmc+KHRoaXMsIGFuZHJvaWQu
Ui5sYXlvdXQuc2ltcGxlX2xpc3RfaXRlbV8xLCByb29tTGlzdCk7Ci0gICAgcm9vbUxpc3RWaWV3
LnNldEFkYXB0ZXIoYWRhcHRlcik7Ci0gICAgaWYgKGFkYXB0ZXIuZ2V0Q291bnQoKSA+IDApIHsK
LSAgICAgIHJvb21MaXN0Vmlldy5yZXF1ZXN0Rm9jdXMoKTsKLSAgICAgIHJvb21MaXN0Vmlldy5z
ZXRJdGVtQ2hlY2tlZCgwLCB0cnVlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJv
dGVjdGVkIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRD
b2RlLCBJbnRlbnQgZGF0YSkgewotICAgIGlmIChyZXF1ZXN0Q29kZSA9PSBDT05ORUNUSU9OX1JF
UVVFU1QgJiYgY29tbWFuZExpbmVSdW4pIHsKLSAgICAgIExvZy5kKFRBRywgIlJldHVybjogIiAr
IHJlc3VsdENvZGUpOwotICAgICAgc2V0UmVzdWx0KHJlc3VsdENvZGUpOwotICAgICAgY29tbWFu
ZExpbmVSdW4gPSBmYWxzZTsKLSAgICAgIGZpbmlzaCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgot
ICAgKiBHZXQgYSB2YWx1ZSBmcm9tIHRoZSBzaGFyZWQgcHJlZmVyZW5jZSBvciBmcm9tIHRoZSBp
bnRlbnQsIGlmIGl0IGRvZXMgbm90Ci0gICAqIGV4aXN0IHRoZSBkZWZhdWx0IGlzIHVzZWQuCi0g
ICAqLwotICBwcml2YXRlIFN0cmluZyBzaGFyZWRQcmVmR2V0U3RyaW5nKAotICAgICAgaW50IGF0
dHJpYnV0ZUlkLCBTdHJpbmcgaW50ZW50TmFtZSwgaW50IGRlZmF1bHRJZCwgYm9vbGVhbiB1c2VG
cm9tSW50ZW50KSB7Ci0gICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IGdldFN0cmluZyhkZWZhdWx0
SWQpOwotICAgIGlmICh1c2VGcm9tSW50ZW50KSB7Ci0gICAgICBTdHJpbmcgdmFsdWUgPSBnZXRJ
bnRlbnQoKS5nZXRTdHJpbmdFeHRyYShpbnRlbnROYW1lKTsKLSAgICAgIGlmICh2YWx1ZSAhPSBu
dWxsKSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBkZWZh
dWx0VmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gZ2V0
U3RyaW5nKGF0dHJpYnV0ZUlkKTsKLSAgICAgIHJldHVybiBzaGFyZWRQcmVmLmdldFN0cmluZyhh
dHRyaWJ1dGVOYW1lLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBH
ZXQgYSB2YWx1ZSBmcm9tIHRoZSBzaGFyZWQgcHJlZmVyZW5jZSBvciBmcm9tIHRoZSBpbnRlbnQs
IGlmIGl0IGRvZXMgbm90Ci0gICAqIGV4aXN0IHRoZSBkZWZhdWx0IGlzIHVzZWQuCi0gICAqLwot
ICBwcml2YXRlIGJvb2xlYW4gc2hhcmVkUHJlZkdldEJvb2xlYW4oCi0gICAgICBpbnQgYXR0cmli
dXRlSWQsIFN0cmluZyBpbnRlbnROYW1lLCBpbnQgZGVmYXVsdElkLCBib29sZWFuIHVzZUZyb21J
bnRlbnQpIHsKLSAgICBib29sZWFuIGRlZmF1bHRWYWx1ZSA9IEJvb2xlYW4udmFsdWVPZihnZXRT
dHJpbmcoZGVmYXVsdElkKSk7Ci0gICAgaWYgKHVzZUZyb21JbnRlbnQpIHsKLSAgICAgIHJldHVy
biBnZXRJbnRlbnQoKS5nZXRCb29sZWFuRXh0cmEoaW50ZW50TmFtZSwgZGVmYXVsdFZhbHVlKTsK
LSAgICB9IGVsc2UgewotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBnZXRTdHJpbmcoYXR0
cmlidXRlSWQpOwotICAgICAgcmV0dXJuIHNoYXJlZFByZWYuZ2V0Qm9vbGVhbihhdHRyaWJ1dGVO
YW1lLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb25uZWN0
VG9Sb29tKFN0cmluZyByb29tSWQsIGJvb2xlYW4gY29tbWFuZExpbmVSdW4sIGJvb2xlYW4gbG9v
cGJhY2ssCi0gICAgICBib29sZWFuIHVzZVZhbHVlc0Zyb21JbnRlbnQsIGludCBydW5UaW1lTXMp
IHsKLSAgICB0aGlzLmNvbW1hbmRMaW5lUnVuID0gY29tbWFuZExpbmVSdW47Ci0KLSAgICAvLyBy
b29tSWQgaXMgcmFuZG9tIGZvciBsb29wYmFjay4KLSAgICBpZiAobG9vcGJhY2spIHsKLSAgICAg
IHJvb21JZCA9IEludGVnZXIudG9TdHJpbmcoKG5ldyBSYW5kb20oKSkubmV4dEludCgxMDAwMDAw
MDApKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcm9vbVVybCA9IHNoYXJlZFByZWYuZ2V0U3RyaW5n
KAotICAgICAgICBrZXlwcmVmUm9vbVNlcnZlclVybCwgZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZf
cm9vbV9zZXJ2ZXJfdXJsX2RlZmF1bHQpKTsKLQotICAgIC8vIFZpZGVvIGNhbGwgZW5hYmxlZCBm
bGFnLgotICAgIGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZCA9IHNoYXJlZFByZWZHZXRCb29sZWFu
KFIuc3RyaW5nLnByZWZfdmlkZW9jYWxsX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJB
X1ZJREVPX0NBTEwsIFIuc3RyaW5nLnByZWZfdmlkZW9jYWxsX2RlZmF1bHQsIHVzZVZhbHVlc0Zy
b21JbnRlbnQpOwotCi0gICAgLy8gVXNlIHNjcmVlbmNhcHR1cmUgb3B0aW9uLgotICAgIGJvb2xl
YW4gdXNlU2NyZWVuY2FwdHVyZSA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZf
c2NyZWVuY2FwdHVyZV9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9TQ1JFRU5DQVBU
VVJFLCBSLnN0cmluZy5wcmVmX3NjcmVlbmNhcHR1cmVfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUlu
dGVudCk7Ci0KLSAgICAvLyBVc2UgQ2FtZXJhMiBvcHRpb24uCi0gICAgYm9vbGVhbiB1c2VDYW1l
cmEyID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9jYW1lcmEyX2tleSwgQ2Fs
bEFjdGl2aXR5LkVYVFJBX0NBTUVSQTIsCi0gICAgICAgIFIuc3RyaW5nLnByZWZfY2FtZXJhMl9k
ZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIEdldCBkZWZhdWx0IGNvZGVj
cy4KLSAgICBTdHJpbmcgdmlkZW9Db2RlYyA9IHNoYXJlZFByZWZHZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl92aWRlb2NvZGVjX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPQ09E
RUMsIFIuc3RyaW5nLnByZWZfdmlkZW9jb2RlY19kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50
KTsKLSAgICBTdHJpbmcgYXVkaW9Db2RlYyA9IHNoYXJlZFByZWZHZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9hdWRpb2NvZGVjX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0FVRElPQ09E
RUMsIFIuc3RyaW5nLnByZWZfYXVkaW9jb2RlY19kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50
KTsKLQotICAgIC8vIENoZWNrIEhXIGNvZGVjIGZsYWcuCi0gICAgYm9vbGVhbiBod0NvZGVjID0g
c2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9od2NvZGVjX2tleSwKLSAgICAgICAg
Q2FsbEFjdGl2aXR5LkVYVFJBX0hXQ09ERUNfRU5BQkxFRCwgUi5zdHJpbmcucHJlZl9od2NvZGVj
X2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgQ2FwdHVyZSB0
byB0ZXh0dXJlLgotICAgIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSA9IHNoYXJlZFByZWZHZXRC
b29sZWFuKFIuc3RyaW5nLnByZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXksCi0gICAgICAgIENhbGxB
Y3Rpdml0eS5FWFRSQV9DQVBUVVJFVE9URVhUVVJFX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfY2Fw
dHVyZXRvdGV4dHVyZV9kZWZhdWx0LAotICAgICAgICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQot
ICAgIC8vIENoZWNrIERpc2FibGUgQXVkaW8gUHJvY2Vzc2luZyBmbGFnLgotICAgIGJvb2xlYW4g
bm9BdWRpb1Byb2Nlc3NpbmcgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX25v
YXVkaW9wcm9jZXNzaW5nX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX05PQVVESU9Q
Uk9DRVNTSU5HX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfbm9hdWRpb3Byb2Nlc3NpbmdfZGVmYXVs
dCwKLSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxl
IEF1ZGlvIFByb2Nlc3NpbmcgZmxhZy4KLSAgICBib29sZWFuIGFlY0R1bXAgPSBzaGFyZWRQcmVm
R2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2FlY2R1bXBfa2V5LAotICAgICAgICBDYWxsQWN0aXZp
dHkuRVhUUkFfQUVDRFVNUF9FTkFCTEVELCBSLnN0cmluZy5wcmVmX2FlY2R1bXBfZGVmYXVsdCwg
dXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBPcGVuU0wgRVMgZW5hYmxlZCBm
bGFnLgotICAgIGJvb2xlYW4gdXNlT3BlblNMRVMgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0
cmluZy5wcmVmX29wZW5zbGVzX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX09QRU5T
TEVTX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfb3BlbnNsZXNfZGVmYXVsdCwgdXNlVmFsdWVzRnJv
bUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxlIGJ1aWx0LWluIEFFQyBmbGFnLgotICAg
IGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5BRUMgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmlu
Zy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVY
VFJBX0RJU0FCTEVfQlVJTFRfSU5fQUVDLCBSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5f
YWVjX2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hl
Y2sgRGlzYWJsZSBidWlsdC1pbiBBR0MgZmxhZy4KLSAgICBib29sZWFuIGRpc2FibGVCdWlsdElu
QUdDID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2lu
X2FnY19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FH
QywgUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19kZWZhdWx0LAotICAgICAgICB1
c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIERpc2FibGUgYnVpbHQtaW4gTlMg
ZmxhZy4KLSAgICBib29sZWFuIGRpc2FibGVCdWlsdEluTlMgPSBzaGFyZWRQcmVmR2V0Qm9vbGVh
bihSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfa2V5LAotICAgICAgICBDYWxsQWN0
aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9OUywgUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1
aWx0X2luX25zX2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAg
Ly8gQ2hlY2sgRW5hYmxlIGxldmVsIGNvbnRyb2wuCi0gICAgYm9vbGVhbiBlbmFibGVMZXZlbENv
bnRyb2wgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2VuYWJsZV9sZXZlbF9j
b250cm9sX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0VOQUJMRV9MRVZFTF9DT05U
Uk9MLCBSLnN0cmluZy5wcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2tleSwKLSAgICAgICAgdXNl
VmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBHZXQgdmlkZW8gcmVzb2x1dGlvbiBmcm9tIHNl
dHRpbmdzLgotICAgIGludCB2aWRlb1dpZHRoID0gMDsKLSAgICBpbnQgdmlkZW9IZWlnaHQgPSAw
OwotICAgIGlmICh1c2VWYWx1ZXNGcm9tSW50ZW50KSB7Ci0gICAgICB2aWRlb1dpZHRoID0gZ2V0
SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX1dJRFRILCAwKTsK
LSAgICAgIHZpZGVvSGVpZ2h0ID0gZ2V0SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5
LkVYVFJBX1ZJREVPX0hFSUdIVCwgMCk7Ci0gICAgfQotICAgIGlmICh2aWRlb1dpZHRoID09IDAg
JiYgdmlkZW9IZWlnaHQgPT0gMCkgewotICAgICAgU3RyaW5nIHJlc29sdXRpb24gPQotICAgICAg
ICAgIHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZSZXNvbHV0aW9uLCBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl9yZXNvbHV0aW9uX2RlZmF1bHQpKTsKLSAgICAgIFN0cmluZ1tdIGRpbWVuc2lv
bnMgPSByZXNvbHV0aW9uLnNwbGl0KCJbIHhdKyIpOwotICAgICAgaWYgKGRpbWVuc2lvbnMubGVu
Z3RoID09IDIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICB2aWRlb1dpZHRoID0gSW50ZWdl
ci5wYXJzZUludChkaW1lbnNpb25zWzBdKTsKLSAgICAgICAgICB2aWRlb0hlaWdodCA9IEludGVn
ZXIucGFyc2VJbnQoZGltZW5zaW9uc1sxXSk7Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1h
dEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdmlkZW9XaWR0aCA9IDA7Ci0gICAgICAgICAgdmlk
ZW9IZWlnaHQgPSAwOwotICAgICAgICAgIExvZy5lKFRBRywgIldyb25nIHZpZGVvIHJlc29sdXRp
b24gc2V0dGluZzogIiArIHJlc29sdXRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gR2V0IGNhbWVyYSBmcHMgZnJvbSBzZXR0aW5ncy4KLSAgICBpbnQgY2FtZXJhRnBz
ID0gMDsKLSAgICBpZiAodXNlVmFsdWVzRnJvbUludGVudCkgewotICAgICAgY2FtZXJhRnBzID0g
Z2V0SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0ZQUywgMCk7
Ci0gICAgfQotICAgIGlmIChjYW1lcmFGcHMgPT0gMCkgewotICAgICAgU3RyaW5nIGZwcyA9IHNo
YXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZGcHMsIGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Zw
c19kZWZhdWx0KSk7Ci0gICAgICBTdHJpbmdbXSBmcHNWYWx1ZXMgPSBmcHMuc3BsaXQoIlsgeF0r
Iik7Ci0gICAgICBpZiAoZnBzVmFsdWVzLmxlbmd0aCA9PSAyKSB7Ci0gICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgY2FtZXJhRnBzID0gSW50ZWdlci5wYXJzZUludChmcHNWYWx1ZXNbMF0pOwotICAg
ICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgIGNhbWVy
YUZwcyA9IDA7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiV3JvbmcgY2FtZXJhIGZwcyBzZXR0aW5n
OiAiICsgZnBzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGNh
cHR1cmUgcXVhbGl0eSBzbGlkZXIgZmxhZy4KLSAgICBib29sZWFuIGNhcHR1cmVRdWFsaXR5U2xp
ZGVyID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9jYXB0dXJlcXVhbGl0eXNs
aWRlcl9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQVBUVVJFUVVBTElU
WVNMSURFUl9FTkFCTEVELAotICAgICAgICBSLnN0cmluZy5wcmVmX2NhcHR1cmVxdWFsaXR5c2xp
ZGVyX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gR2V0IHZpZGVvIGFu
ZCBhdWRpbyBzdGFydCBiaXRyYXRlLgotICAgIGludCB2aWRlb1N0YXJ0Qml0cmF0ZSA9IDA7Ci0g
ICAgaWYgKHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsKLSAgICAgIHZpZGVvU3RhcnRCaXRyYXRlID0g
Z2V0SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0JJVFJBVEUs
IDApOwotICAgIH0KLSAgICBpZiAodmlkZW9TdGFydEJpdHJhdGUgPT0gMCkgewotICAgICAgU3Ry
aW5nIGJpdHJhdGVUeXBlRGVmYXVsdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVv
Yml0cmF0ZV9kZWZhdWx0KTsKLSAgICAgIFN0cmluZyBiaXRyYXRlVHlwZSA9IHNoYXJlZFByZWYu
Z2V0U3RyaW5nKGtleXByZWZWaWRlb0JpdHJhdGVUeXBlLCBiaXRyYXRlVHlwZURlZmF1bHQpOwot
ICAgICAgaWYgKCFiaXRyYXRlVHlwZS5lcXVhbHMoYml0cmF0ZVR5cGVEZWZhdWx0KSkgewotICAg
ICAgICBTdHJpbmcgYml0cmF0ZVZhbHVlID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoCi0gICAgICAg
ICAgICBrZXlwcmVmVmlkZW9CaXRyYXRlVmFsdWUsIGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21h
eHZpZGVvYml0cmF0ZXZhbHVlX2RlZmF1bHQpKTsKLSAgICAgICAgdmlkZW9TdGFydEJpdHJhdGUg
PSBJbnRlZ2VyLnBhcnNlSW50KGJpdHJhdGVWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
aW50IGF1ZGlvU3RhcnRCaXRyYXRlID0gMDsKLSAgICBpZiAodXNlVmFsdWVzRnJvbUludGVudCkg
ewotICAgICAgYXVkaW9TdGFydEJpdHJhdGUgPSBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxs
QWN0aXZpdHkuRVhUUkFfQVVESU9fQklUUkFURSwgMCk7Ci0gICAgfQotICAgIGlmIChhdWRpb1N0
YXJ0Qml0cmF0ZSA9PSAwKSB7Ci0gICAgICBTdHJpbmcgYml0cmF0ZVR5cGVEZWZhdWx0ID0gZ2V0
U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGVfZGVmYXVsdCk7Ci0gICAgICBT
dHJpbmcgYml0cmF0ZVR5cGUgPSBzaGFyZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmQXVkaW9CaXRy
YXRlVHlwZSwgYml0cmF0ZVR5cGVEZWZhdWx0KTsKLSAgICAgIGlmICghYml0cmF0ZVR5cGUuZXF1
YWxzKGJpdHJhdGVUeXBlRGVmYXVsdCkpIHsKLSAgICAgICAgU3RyaW5nIGJpdHJhdGVWYWx1ZSA9
IHNoYXJlZFByZWYuZ2V0U3RyaW5nKAotICAgICAgICAgICAga2V5cHJlZkF1ZGlvQml0cmF0ZVZh
bHVlLCBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2RlZmF1
bHQpKTsKLSAgICAgICAgYXVkaW9TdGFydEJpdHJhdGUgPSBJbnRlZ2VyLnBhcnNlSW50KGJpdHJh
dGVWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgc3RhdGlzdGljcyBkaXNw
bGF5IG9wdGlvbi4KLSAgICBib29sZWFuIGRpc3BsYXlIdWQgPSBzaGFyZWRQcmVmR2V0Qm9vbGVh
bihSLnN0cmluZy5wcmVmX2Rpc3BsYXlodWRfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhU
UkFfRElTUExBWV9IVUQsIFIuc3RyaW5nLnByZWZfZGlzcGxheWh1ZF9kZWZhdWx0LCB1c2VWYWx1
ZXNGcm9tSW50ZW50KTsKLQotICAgIGJvb2xlYW4gdHJhY2luZyA9IHNoYXJlZFByZWZHZXRCb29s
ZWFuKFIuc3RyaW5nLnByZWZfdHJhY2luZ19rZXksIENhbGxBY3Rpdml0eS5FWFRSQV9UUkFDSU5H
LAotICAgICAgICBSLnN0cmluZy5wcmVmX3RyYWNpbmdfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUlu
dGVudCk7Ci0KLSAgICAvLyBTdGFydCBBcHBSVENNb2JpbGUgYWN0aXZpdHkuCi0gICAgTG9nLmQo
VEFHLCAiQ29ubmVjdGluZyB0byByb29tICIgKyByb29tSWQgKyAiIGF0IFVSTCAiICsgcm9vbVVy
bCk7Ci0gICAgaWYgKHZhbGlkYXRlVXJsKHJvb21VcmwpKSB7Ci0gICAgICBVcmkgdXJpID0gVXJp
LnBhcnNlKHJvb21VcmwpOwotICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQodGhpcywg
Q2FsbEFjdGl2aXR5LmNsYXNzKTsKLSAgICAgIGludGVudC5zZXREYXRhKHVyaSk7Ci0gICAgICBp
bnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1JPT01JRCwgcm9vbUlkKTsKLSAgICAg
IGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfTE9PUEJBQ0ssIGxvb3BiYWNrKTsK
LSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FMTCwgdmlk
ZW9DYWxsRW5hYmxlZCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJB
X1NDUkVFTkNBUFRVUkUsIHVzZVNjcmVlbmNhcHR1cmUpOwotICAgICAgaW50ZW50LnB1dEV4dHJh
KENhbGxBY3Rpdml0eS5FWFRSQV9DQU1FUkEyLCB1c2VDYW1lcmEyKTsKLSAgICAgIGludGVudC5w
dXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fV0lEVEgsIHZpZGVvV2lkdGgpOwotICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19IRUlHSFQsIHZpZGVv
SGVpZ2h0KTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9f
RlBTLCBjYW1lcmFGcHMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRS
QV9WSURFT19DQVBUVVJFUVVBTElUWVNMSURFUl9FTkFCTEVELCBjYXB0dXJlUXVhbGl0eVNsaWRl
cik7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0JJVFJB
VEUsIHZpZGVvU3RhcnRCaXRyYXRlKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZp
dHkuRVhUUkFfVklERU9DT0RFQywgdmlkZW9Db2RlYyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEo
Q2FsbEFjdGl2aXR5LkVYVFJBX0hXQ09ERUNfRU5BQkxFRCwgaHdDb2RlYyk7Ci0gICAgICBpbnRl
bnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0NBUFRVUkVUT1RFWFRVUkVfRU5BQkxFRCwg
Y2FwdHVyZVRvVGV4dHVyZSk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVY
VFJBX05PQVVESU9QUk9DRVNTSU5HX0VOQUJMRUQsIG5vQXVkaW9Qcm9jZXNzaW5nKTsKLSAgICAg
IGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfQUVDRFVNUF9FTkFCTEVELCBhZWNE
dW1wKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfT1BFTlNMRVNf
RU5BQkxFRCwgdXNlT3BlblNMRVMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0
eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FFQywgZGlzYWJsZUJ1aWx0SW5BRUMpOwotICAgICAg
aW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FHQywg
ZGlzYWJsZUJ1aWx0SW5BR0MpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5F
WFRSQV9ESVNBQkxFX0JVSUxUX0lOX05TLCBkaXNhYmxlQnVpbHRJbk5TKTsKLSAgICAgIGludGVu
dC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfRU5BQkxFX0xFVkVMX0NPTlRST0wsIGVuYWJs
ZUxldmVsQ29udHJvbCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJB
X0FVRElPX0JJVFJBVEUsIGF1ZGlvU3RhcnRCaXRyYXRlKTsKLSAgICAgIGludGVudC5wdXRFeHRy
YShDYWxsQWN0aXZpdHkuRVhUUkFfQVVESU9DT0RFQywgYXVkaW9Db2RlYyk7Ci0gICAgICBpbnRl
bnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU1BMQVlfSFVELCBkaXNwbGF5SHVkKTsK
LSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVFJBQ0lORywgdHJhY2lu
Zyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0NNRExJTkUsIGNv
bW1hbmRMaW5lUnVuKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFf
UlVOVElNRSwgcnVuVGltZU1zKTsKLQotICAgICAgaWYgKHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsK
LSAgICAgICAgaWYgKGdldEludGVudCgpLmhhc0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURF
T19GSUxFX0FTX0NBTUVSQSkpIHsKLSAgICAgICAgICBTdHJpbmcgdmlkZW9GaWxlQXNDYW1lcmEg
PQotICAgICAgICAgICAgICBnZXRJbnRlbnQoKS5nZXRTdHJpbmdFeHRyYShDYWxsQWN0aXZpdHku
RVhUUkFfVklERU9fRklMRV9BU19DQU1FUkEpOwotICAgICAgICAgIGludGVudC5wdXRFeHRyYShD
YWxsQWN0aXZpdHkuRVhUUkFfVklERU9fRklMRV9BU19DQU1FUkEsIHZpZGVvRmlsZUFzQ2FtZXJh
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnZXRJbnRlbnQoKS5oYXNFeHRyYShDYWxsQWN0
aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRSkpIHsKLSAgICAgICAgICBTdHJp
bmcgc2F2ZVJlbW90ZVZpZGVvVG9GaWxlID0KLSAgICAgICAgICAgICAgZ2V0SW50ZW50KCkuZ2V0
U3RyaW5nRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUp
OwotICAgICAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1P
VEVfVklERU9fVE9fRklMRSwgc2F2ZVJlbW90ZVZpZGVvVG9GaWxlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIGlmIChnZXRJbnRlbnQoKS5oYXNFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9S
RU1PVEVfVklERU9fVE9fRklMRV9XSURUSCkpIHsKLSAgICAgICAgICBpbnQgdmlkZW9PdXRXaWR0
aCA9Ci0gICAgICAgICAgICAgIGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5F
WFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRILCAwKTsKLSAgICAgICAgICBpbnRl
bnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVf
V0lEVEgsIHZpZGVvT3V0V2lkdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdldEludGVu
dCgpLmhhc0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxF
X0hFSUdIVCkpIHsKLSAgICAgICAgICBpbnQgdmlkZW9PdXRIZWlnaHQgPQotICAgICAgICAgICAg
ICBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVf
VklERU9fVE9fRklMRV9IRUlHSFQsIDApOwotICAgICAgICAgIGludGVudC5wdXRFeHRyYShDYWxs
QWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQsIHZpZGVvT3V0
SGVpZ2h0KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzdGFydEFjdGl2aXR5Rm9yUmVz
dWx0KGludGVudCwgQ09OTkVDVElPTl9SRVFVRVNUKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRl
IGJvb2xlYW4gdmFsaWRhdGVVcmwoU3RyaW5nIHVybCkgewotICAgIGlmIChVUkxVdGlsLmlzSHR0
cHNVcmwodXJsKSB8fCBVUkxVdGlsLmlzSHR0cFVybCh1cmwpKSB7Ci0gICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcih0aGlzKQotICAgICAgICAu
c2V0VGl0bGUoZ2V0VGV4dChSLnN0cmluZy5pbnZhbGlkX3VybF90aXRsZSkpCi0gICAgICAgIC5z
ZXRNZXNzYWdlKGdldFN0cmluZyhSLnN0cmluZy5pbnZhbGlkX3VybF90ZXh0LCB1cmwpKQotICAg
ICAgICAuc2V0Q2FuY2VsYWJsZShmYWxzZSkKLSAgICAgICAgLnNldE5ldXRyYWxCdXR0b24oUi5z
dHJpbmcub2ssCi0gICAgICAgICAgICBuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5l
cigpIHsKLSAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2Ug
ZGlhbG9nLCBpbnQgaWQpIHsKLSAgICAgICAgICAgICAgICBkaWFsb2cuY2FuY2VsKCk7Ci0gICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pCi0gICAgICAgIC5jcmVhdGUoKQotICAgICAgICAu
c2hvdygpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgQWRhcHRl
clZpZXcuT25JdGVtQ2xpY2tMaXN0ZW5lciByb29tTGlzdENsaWNrTGlzdGVuZXIgPQotICAgICAg
bmV3IEFkYXB0ZXJWaWV3Lk9uSXRlbUNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIEBPdmVycmlk
ZQotICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1DbGljayhBZGFwdGVyVmlldzw/PiBhZGFwdGVy
VmlldywgVmlldyB2aWV3LCBpbnQgaSwgbG9uZyBsKSB7Ci0gICAgICAgICAgU3RyaW5nIHJvb21J
ZCA9ICgoVGV4dFZpZXcpIHZpZXcpLmdldFRleHQoKS50b1N0cmluZygpOwotICAgICAgICAgIGNv
bm5lY3RUb1Jvb20ocm9vbUlkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKLSAgICAgICAgfQot
ICAgICAgfTsKLQotICBwcml2YXRlIGZpbmFsIE9uQ2xpY2tMaXN0ZW5lciBhZGRGYXZvcml0ZUxp
c3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgU3RyaW5nIG5ld1Jvb20gPSByb29t
RWRpdFRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAobmV3Um9vbS5sZW5ndGgo
KSA+IDAgJiYgIXJvb21MaXN0LmNvbnRhaW5zKG5ld1Jvb20pKSB7Ci0gICAgICAgIGFkYXB0ZXIu
YWRkKG5ld1Jvb20pOwotICAgICAgICBhZGFwdGVyLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0g
ICAgICB9Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgZmluYWwgT25DbGlja0xpc3RlbmVyIGNv
bm5lY3RMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAgICAgIGNvbm5lY3RUb1Jvb20o
cm9vbUVkaXRUZXh0LmdldFRleHQoKS50b1N0cmluZygpLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAw
KTsKLSAgICB9Ci0gIH07Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ3B1
TW9uaXRvci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9D
cHVNb25pdG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9DcHVNb25pdG9yLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MTAgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50
OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5CYXR0ZXJ5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0
IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1w
b3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJl
YWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eXM7Ci1pbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuRXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1
dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLyoq
Ci0gKiBTaW1wbGUgQ1BVIG1vbml0b3IuICBUaGUgY2FsbGVyIGNyZWF0ZXMgYSBDcHVNb25pdG9y
IG9iamVjdCB3aGljaCBjYW4gdGhlbgotICogYmUgdXNlZCB2aWEgc2FtcGxlQ3B1VXRpbGl6YXRp
b24oKSB0byBjb2xsZWN0IHRoZSBwZXJjZW50dWFsIHVzZSBvZiB0aGUKLSAqIGN1bXVsYXRpdmUg
Q1BVIGNhcGFjaXR5IGZvciBhbGwgQ1BVcyBydW5uaW5nIGF0IHRoZWlyIG5vbWluYWwgZnJlcXVl
bmN5LiAgMwotICogdmFsdWVzIGFyZSBnZW5lcmF0ZWQ6ICgxKSBnZXRDcHVDdXJyZW50KCkgcmV0
dXJucyB0aGUgdXNlIHNpbmNlIHRoZSBsYXN0Ci0gKiBzYW1wbGVDcHVVdGlsaXphdGlvbigpLCAo
MikgZ2V0Q3B1QXZnMygpIHJldHVybnMgdGhlIHVzZSBzaW5jZSAzIHByaW9yCi0gKiBjYWxscywg
YW5kICgzKSBnZXRDcHVBdmdBbGwoKSByZXR1cm5zIHRoZSB1c2Ugb3ZlciBhbGwgU0FNUExFX1NB
VkVfTlVNQkVSCi0gKiBjYWxscy4KLSAqCi0gKiA8cD5DUFVzIGluIEFuZHJvaWQgYXJlIG9mdGVu
ICJvZmZsaW5lIiwgYW5kIHdoaWxlIHRoaXMgb2YgY291cnNlIG1lYW5zIDAgSHoKLSAqIGFzIGN1
cnJlbnQgZnJlcXVlbmN5LCBpbiB0aGlzIHN0YXRlIHdlIGNhbm5vdCBldmVuIGdldCB0aGVpciBu
b21pbmFsCi0gKiBmcmVxdWVuY3kuICBXZSB0aGVyZWZvcmUgdHJlYWQgY2FyZWZ1bGx5LCBhbmQg
YWxsb3cgYW55IENQVSB0byBiZSBtaXNzaW5nLgotICogTWlzc2luZyBDUFVzIGFyZSBhc3N1bWVk
IHRvIGhhdmUgdGhlIHNhbWUgbm9taW5hbCBmcmVxdWVuY3kgYXMgYW55IGNsb3NlCi0gKiBsb3dl
ci1udW1iZXJlZCBDUFUsIGJ1dCBhcyBzb29uIGFzIGl0IGlzIG9ubGluZSwgd2UnbGwgZ2V0IHRo
ZWlyIHByb3BlcgotICogZnJlcXVlbmN5IGFuZCByZW1lbWJlciBpdC4gIChTaW5jZSBDUFUgMCBp
biBwcmFjdGljZSBhbHdheXMgc2VlbSB0byBiZQotICogb25saW5lLCB0aGlzIHVuaWRpcmVjdGlv
bmFsIGZyZXF1ZW5jeSBpbmhlcml0YW5jZSBzaG91bGQgYmUgbm8gcHJvYmxlbSBpbgotICogcHJh
Y3RpY2UuKQotICoKLSAqIDxwPkNhdmVhdHM6Ci0gKiAgIG8gTm8gcHJvdmlzaW9uIG1hZGUgZm9y
IHphbnkgInR1cmJvIiBtb2RlLCBjb21tb24gaW4gdGhlIHg4NiB3b3JsZC4KLSAqICAgbyBObyBw
cm92aXNpb24gbWFkZSBmb3IgQVJNIGJpZy5MSVRUTEU7IGlmIENQVSBuIGNhbiBzd2l0Y2ggYmVo
aW5kIG91cgotICogICAgIGJhY2ssIHdlIG1pZ2h0IGdldCBpbmNvcnJlY3QgZXN0aW1hdGVzLgot
ICogICBvIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLiAgVG8gY2FsbCBhc3luY2hyb25vdXNseSwg
Y3JlYXRlIGRpZmZlcmVudAotICogICAgIENwdU1vbml0b3Igb2JqZWN0cy4KLSAqCi0gKiA8cD5J
ZiB3ZSBjYW4gZ2F0aGVyIGVub3VnaCBpbmZvIHRvIGdlbmVyYXRlIGEgc2Vuc2libGUgcmVzdWx0
LAotICogc2FtcGxlQ3B1VXRpbGl6YXRpb24gcmV0dXJucyB0cnVlLiAgSXQgaXMgZGVzaWduZWQg
dG8gbmV2ZXIgdGhyb3cgYW4KLSAqIGV4Y2VwdGlvbi4KLSAqCi0gKiA8cD5zYW1wbGVDcHVVdGls
aXphdGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB0b28gb2Z0ZW4gaW4gaXRzIHByZXNlbnQgZm9y
bSwKLSAqIHNpbmNlIHRoZW4gZGVsdGFzIHdvdWxkIGJlIHNtYWxsIGFuZCB0aGUgcGVyY2VudCB2
YWx1ZXMgd291bGQgZmx1Y3R1YXRlIGFuZAotICogYmUgdW5yZWFkYWJsZS4gSWYgaXQgaXMgZGVz
aXJhYmxlIHRvIGNhbGwgaXQgbW9yZSBvZnRlbiB0aGFuIHNheSBvbmNlIHBlcgotICogc2Vjb25k
LCBvbmUgd291bGQgbmVlZCB0byBpbmNyZWFzZSBTQU1QTEVfU0FWRV9OVU1CRVIgYW5kIHByb2Jh
Ymx5IHVzZQotICogUXVldWU8SW50ZWdlcj4gdG8gYXZvaWQgY29weWluZyBvdmVyaGVhZC4KLSAq
Ci0gKiA8cD5Lbm93biBwcm9ibGVtczoKLSAqICAgMS4gTmV4dXMgNyBkZXZpY2VzIHJ1bm5pbmcg
S2l0a2F0IGhhdmUgYSBrZXJuZWwgd2hpY2ggb2Z0ZW4gb3V0cHV0IGFuCi0gKiAgICAgIGluY29y
cmVjdCAnaWRsZScgZmllbGQgaW4gL3Byb2Mvc3RhdC4gIFRoZSB2YWx1ZSBpcyBjbG9zZSB0byB0
d2ljZSB0aGUKLSAqICAgICAgY29ycmVjdCB2YWx1ZSwgYW5kIHRoZW4gcmV0dXJucyB0byBiYWNr
IHRvIGNvcnJlY3QgcmVhZGluZy4gIEJvdGggd2hlbgotICogICAgICBqdW1waW5nIHVwIGFuZCBi
YWNrIGRvd24gd2UgbWlnaHQgY3JlYXRlIGZhdWx0eSBDUFUgbG9hZCByZWFkaW5ncy4KLSAqLwot
Ci1jbGFzcyBDcHVNb25pdG9yIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9
ICJDcHVNb25pdG9yIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PVklOR19BVkVSQUdF
X1NBTVBMRVMgPSA1OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDUFVfU1RBVF9TQU1Q
TEVfUEVSSU9EX01TID0gMjAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENQVV9TVEFU
X0xPR19QRVJJT0RfTVMgPSA2MDAwOwotCi0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBhcHBDb250
ZXh0OwotICAvLyBVc2VyIENQVSB1c2FnZSBhdCBjdXJyZW50IGZyZXF1ZW5jeS4KLSAgcHJpdmF0
ZSBmaW5hbCBNb3ZpbmdBdmVyYWdlIHVzZXJDcHVVc2FnZTsKLSAgLy8gU3lzdGVtIENQVSB1c2Fn
ZSBhdCBjdXJyZW50IGZyZXF1ZW5jeS4KLSAgcHJpdmF0ZSBmaW5hbCBNb3ZpbmdBdmVyYWdlIHN5
c3RlbUNwdVVzYWdlOwotICAvLyBUb3RhbCBDUFUgdXNhZ2UgcmVsYXRpdmUgdG8gbWF4aW11bSBm
cmVxdWVuY3kuCi0gIHByaXZhdGUgZmluYWwgTW92aW5nQXZlcmFnZSB0b3RhbENwdVVzYWdlOwot
ICAvLyBDUFUgZnJlcXVlbmN5IGluIHBlcmNlbnRhZ2UgZnJvbSBtYXhpbXVtLgotICBwcml2YXRl
IGZpbmFsIE1vdmluZ0F2ZXJhZ2UgZnJlcXVlbmN5U2NhbGU7Ci0KLSAgcHJpdmF0ZSBTY2hlZHVs
ZWRFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3I7Ci0gIHByaXZhdGUgbG9uZyBsYXN0U3RhdExvZ1Rp
bWVNczsKLSAgcHJpdmF0ZSBsb25nW10gY3B1RnJlcU1heDsKLSAgcHJpdmF0ZSBpbnQgY3B1c1By
ZXNlbnQ7Ci0gIHByaXZhdGUgaW50IGFjdHVhbENwdXNQcmVzZW50OwotICBwcml2YXRlIGJvb2xl
YW4gaW5pdGlhbGl6ZWQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcHVPdmVydXNlOwotICBwcml2YXRl
IFN0cmluZ1tdIG1heFBhdGg7Ci0gIHByaXZhdGUgU3RyaW5nW10gY3VyUGF0aDsKLSAgcHJpdmF0
ZSBkb3VibGVbXSBjdXJGcmVxU2NhbGVzOwotICBwcml2YXRlIFByb2NTdGF0IGxhc3RQcm9jU3Rh
dDsKLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQcm9jU3RhdCB7Ci0gICAgZmluYWwgbG9uZyB1
c2VyVGltZTsKLSAgICBmaW5hbCBsb25nIHN5c3RlbVRpbWU7Ci0gICAgZmluYWwgbG9uZyBpZGxl
VGltZTsKLQotICAgIFByb2NTdGF0KGxvbmcgdXNlclRpbWUsIGxvbmcgc3lzdGVtVGltZSwgbG9u
ZyBpZGxlVGltZSkgewotICAgICAgdGhpcy51c2VyVGltZSA9IHVzZXJUaW1lOwotICAgICAgdGhp
cy5zeXN0ZW1UaW1lID0gc3lzdGVtVGltZTsKLSAgICAgIHRoaXMuaWRsZVRpbWUgPSBpZGxlVGlt
ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb3ZpbmdBdmVyYWdlIHsK
LSAgICBwcml2YXRlIGZpbmFsIGludCBzaXplOwotICAgIHByaXZhdGUgZG91YmxlIHN1bTsKLSAg
ICBwcml2YXRlIGRvdWJsZSBjdXJyZW50VmFsdWU7Ci0gICAgcHJpdmF0ZSBkb3VibGUgY2lyY0J1
ZmZlcltdOwotICAgIHByaXZhdGUgaW50IGNpcmNCdWZmZXJJbmRleDsKLQotICAgIHB1YmxpYyBN
b3ZpbmdBdmVyYWdlKGludCBzaXplKSB7Ci0gICAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAg
IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiU2l6ZSB2YWx1ZSBpbiBNb3ZpbmdBdmVyYWdlIGN0
b3Igc2hvdWxkIGJlIHBvc2l0aXZlLiIpOwotICAgICAgfQotICAgICAgdGhpcy5zaXplID0gc2l6
ZTsKLSAgICAgIGNpcmNCdWZmZXIgPSBuZXcgZG91YmxlW3NpemVdOwotICAgIH0KLQotICAgIHB1
YmxpYyB2b2lkIHJlc2V0KCkgewotICAgICAgQXJyYXlzLmZpbGwoY2lyY0J1ZmZlciwgMCk7Ci0g
ICAgICBjaXJjQnVmZmVySW5kZXggPSAwOwotICAgICAgc3VtID0gMDsKLSAgICAgIGN1cnJlbnRW
YWx1ZSA9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkVmFsdWUoZG91YmxlIHZhbHVl
KSB7Ci0gICAgICBzdW0gLT0gY2lyY0J1ZmZlcltjaXJjQnVmZmVySW5kZXhdOwotICAgICAgY2ly
Y0J1ZmZlcltjaXJjQnVmZmVySW5kZXgrK10gPSB2YWx1ZTsKLSAgICAgIGN1cnJlbnRWYWx1ZSA9
IHZhbHVlOwotICAgICAgc3VtICs9IHZhbHVlOwotICAgICAgaWYgKGNpcmNCdWZmZXJJbmRleCA+
PSBzaXplKSB7Ci0gICAgICAgIGNpcmNCdWZmZXJJbmRleCA9IDA7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgcHVibGljIGRvdWJsZSBnZXRDdXJyZW50KCkgewotICAgICAgcmV0dXJuIGN1cnJlbnRW
YWx1ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZG91YmxlIGdldEF2ZXJhZ2UoKSB7Ci0gICAgICBy
ZXR1cm4gc3VtIC8gKGRvdWJsZSkgc2l6ZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ3B1TW9u
aXRvcihDb250ZXh0IGNvbnRleHQpIHsKLSAgICBMb2cuZChUQUcsICJDcHVNb25pdG9yIGN0b3Iu
Iik7Ci0gICAgYXBwQ29udGV4dCA9IGNvbnRleHQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0g
ICAgdXNlckNwdVVzYWdlID0gbmV3IE1vdmluZ0F2ZXJhZ2UoTU9WSU5HX0FWRVJBR0VfU0FNUExF
Uyk7Ci0gICAgc3lzdGVtQ3B1VXNhZ2UgPSBuZXcgTW92aW5nQXZlcmFnZShNT1ZJTkdfQVZFUkFH
RV9TQU1QTEVTKTsKLSAgICB0b3RhbENwdVVzYWdlID0gbmV3IE1vdmluZ0F2ZXJhZ2UoTU9WSU5H
X0FWRVJBR0VfU0FNUExFUyk7Ci0gICAgZnJlcXVlbmN5U2NhbGUgPSBuZXcgTW92aW5nQXZlcmFn
ZShNT1ZJTkdfQVZFUkFHRV9TQU1QTEVTKTsKLSAgICBsYXN0U3RhdExvZ1RpbWVNcyA9IFN5c3Rl
bUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotCi0gICAgc2NoZWR1bGVDcHVVdGlsaXphdGlvblRh
c2soKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhdXNlKCkgewotICAgIGlmIChleGVjdXRvciAh
PSBudWxsKSB7Ci0gICAgICBMb2cuZChUQUcsICJwYXVzZSIpOwotICAgICAgZXhlY3V0b3Iuc2h1
dGRvd25Ob3coKTsKLSAgICAgIGV4ZWN1dG9yID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCByZXN1bWUoKSB7Ci0gICAgTG9nLmQoVEFHLCAicmVzdW1lIik7Ci0gICAgcmVzZXRT
dGF0KCk7Ci0gICAgc2NoZWR1bGVDcHVVdGlsaXphdGlvblRhc2soKTsKLSAgfQotCi0gIHB1Ymxp
YyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHsKLSAgICBpZiAoZXhlY3V0b3IgIT0gbnVsbCkg
ewotICAgICAgTG9nLmQoVEFHLCAicmVzZXQiKTsKLSAgICAgIHJlc2V0U3RhdCgpOwotICAgICAg
Y3B1T3ZlcnVzZSA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQg
aW50IGdldENwdVVzYWdlQ3VycmVudCgpIHsKLSAgICByZXR1cm4gZG91YmxlVG9QZXJjZW50KHVz
ZXJDcHVVc2FnZS5nZXRDdXJyZW50KCkgKyBzeXN0ZW1DcHVVc2FnZS5nZXRDdXJyZW50KCkpOwot
ICB9Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgZ2V0Q3B1VXNhZ2VBdmVyYWdlKCkgewot
ICAgIHJldHVybiBkb3VibGVUb1BlcmNlbnQodXNlckNwdVVzYWdlLmdldEF2ZXJhZ2UoKSArIHN5
c3RlbUNwdVVzYWdlLmdldEF2ZXJhZ2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVk
IGludCBnZXRGcmVxdWVuY3lTY2FsZUF2ZXJhZ2UoKSB7Ci0gICAgcmV0dXJuIGRvdWJsZVRvUGVy
Y2VudChmcmVxdWVuY3lTY2FsZS5nZXRBdmVyYWdlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IHNjaGVkdWxlQ3B1VXRpbGl6YXRpb25UYXNrKCkgewotICAgIGlmIChleGVjdXRvciAhPSBudWxs
KSB7Ci0gICAgICBleGVjdXRvci5zaHV0ZG93bk5vdygpOwotICAgICAgZXhlY3V0b3IgPSBudWxs
OwotICAgIH0KLQotICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZFNjaGVk
dWxlZEV4ZWN1dG9yKCk7Ci0gICAgZXhlY3V0b3Iuc2NoZWR1bGVBdEZpeGVkUmF0ZShuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgY3B1VXRpbGl6YXRpb25UYXNrKCk7Ci0gICAgICB9Ci0gICAgfSwgMCwgQ1BVX1NUQVRf
U0FNUExFX1BFUklPRF9NUywgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBjcHVVdGlsaXphdGlvblRhc2soKSB7Ci0gICAgYm9vbGVhbiBjcHVNb25pdG9yQXZh
aWxhYmxlID0gc2FtcGxlQ3B1VXRpbGl6YXRpb24oKTsKLSAgICBpZiAoY3B1TW9uaXRvckF2YWls
YWJsZQotICAgICAgICAmJiBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIGxhc3RTdGF0
TG9nVGltZU1zID49IENQVV9TVEFUX0xPR19QRVJJT0RfTVMpIHsKLSAgICAgIGxhc3RTdGF0TG9n
VGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICBTdHJpbmcgc3Rh
dFN0cmluZyA9IGdldFN0YXRTdHJpbmcoKTsKLSAgICAgIExvZy5kKFRBRywgc3RhdFN0cmluZyk7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgdHJ5IHsKLSAgICAg
IEZpbGVSZWFkZXIgZmluID0gbmV3IEZpbGVSZWFkZXIoIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1
L3ByZXNlbnQiKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9
IG5ldyBCdWZmZXJlZFJlYWRlcihmaW4pOwotICAgICAgICBTY2FubmVyIHNjYW5uZXIgPSBuZXcg
U2Nhbm5lcihyZWFkZXIpLnVzZURlbGltaXRlcigiWy1cbl0iKTsKLSAgICAgICAgc2Nhbm5lci5u
ZXh0SW50KCk7IC8vIFNraXAgbGVhZGluZyBudW1iZXIgMC4KLSAgICAgICAgY3B1c1ByZXNlbnQg
PSAxICsgc2Nhbm5lci5uZXh0SW50KCk7Ci0gICAgICAgIHNjYW5uZXIuY2xvc2UoKTsKLSAgICAg
IH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBkbyBD
UFUgc3RhdHMgZHVlIHRvIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQgcGFyc2luZyBw
cm9ibGVtIik7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICBmaW4uY2xvc2UoKTsKLSAgICAg
IH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgTG9nLmUo
VEFHLCAiQ2Fubm90IGRvIENQVSBzdGF0cyBzaW5jZSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9w
cmVzZW50IGlzIG1pc3NpbmciKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAg
ICBMb2cuZShUQUcsICJFcnJvciBjbG9zaW5nIGZpbGUiKTsKLSAgICB9Ci0KLSAgICBjcHVGcmVx
TWF4ID0gbmV3IGxvbmdbY3B1c1ByZXNlbnRdOwotICAgIG1heFBhdGggPSBuZXcgU3RyaW5nW2Nw
dXNQcmVzZW50XTsKLSAgICBjdXJQYXRoID0gbmV3IFN0cmluZ1tjcHVzUHJlc2VudF07Ci0gICAg
Y3VyRnJlcVNjYWxlcyA9IG5ldyBkb3VibGVbY3B1c1ByZXNlbnRdOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY3B1c1ByZXNlbnQ7IGkrKykgewotICAgICAgY3B1RnJlcU1heFtpXSA9IDA7IC8v
IEZyZXF1ZW5jeSAibm90IHlldCBkZXRlcm1pbmVkIi4KLSAgICAgIGN1ckZyZXFTY2FsZXNbaV0g
PSAwOwotICAgICAgbWF4UGF0aFtpXSA9ICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUiICsg
aSArICIvY3B1ZnJlcS9jcHVpbmZvX21heF9mcmVxIjsKLSAgICAgIGN1clBhdGhbaV0gPSAiL3N5
cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1IiArIGkgKyAiL2NwdWZyZXEvc2NhbGluZ19jdXJfZnJl
cSI7Ci0gICAgfQotCi0gICAgbGFzdFByb2NTdGF0ID0gbmV3IFByb2NTdGF0KDAsIDAsIDApOwot
ICAgIHJlc2V0U3RhdCgpOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICB9Ci0KLSAgcHJp
dmF0ZSBzeW5jaHJvbml6ZWQgdm9pZCByZXNldFN0YXQoKSB7Ci0gICAgdXNlckNwdVVzYWdlLnJl
c2V0KCk7Ci0gICAgc3lzdGVtQ3B1VXNhZ2UucmVzZXQoKTsKLSAgICB0b3RhbENwdVVzYWdlLnJl
c2V0KCk7Ci0gICAgZnJlcXVlbmN5U2NhbGUucmVzZXQoKTsKLSAgICBsYXN0U3RhdExvZ1RpbWVN
cyA9IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQg
Z2V0QmF0dGVyeUxldmVsKCkgewotICAgIC8vIFVzZSBzdGlja3kgYnJvYWRjYXN0IHdpdGggbnVs
bCByZWNlaXZlciB0byByZWFkIGJhdHRlcnkgbGV2ZWwgb25jZSBvbmx5LgotICAgIEludGVudCBp
bnRlbnQgPSBhcHBDb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgIG51bGwgLyogcmVj
ZWl2ZXIgKi8sIG5ldyBJbnRlbnRGaWx0ZXIoSW50ZW50LkFDVElPTl9CQVRURVJZX0NIQU5HRUQp
KTsKLQotICAgIGludCBiYXR0ZXJ5TGV2ZWwgPSAwOwotICAgIGludCBiYXR0ZXJ5U2NhbGUgPSBp
bnRlbnQuZ2V0SW50RXh0cmEoQmF0dGVyeU1hbmFnZXIuRVhUUkFfU0NBTEUsIDEwMCk7Ci0gICAg
aWYgKGJhdHRlcnlTY2FsZSA+IDApIHsKLSAgICAgIGJhdHRlcnlMZXZlbCA9Ci0gICAgICAgICAg
KGludCkgKDEwMGYgKiBpbnRlbnQuZ2V0SW50RXh0cmEoQmF0dGVyeU1hbmFnZXIuRVhUUkFfTEVW
RUwsIDApIC8gYmF0dGVyeVNjYWxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJhdHRlcnlMZXZlbDsK
LSAgfQotCi0gIC8qKgotICAgKiBSZS1tZWFzdXJlIENQVSB1c2UuICBDYWxsIHRoaXMgbWV0aG9k
IGF0IGFuIGludGVydmFsIG9mIGFyb3VuZCAxL3MuCi0gICAqIFRoaXMgbWV0aG9kIHJldHVybnMg
dHJ1ZSBvbiBzdWNjZXNzLiAgVGhlIGZpZWxkcwotICAgKiBjcHVDdXJyZW50LCBjcHVBdmczLCBh
bmQgY3B1QXZnQWxsIGFyZSB1cGRhdGVkIG9uIHN1Y2Nlc3MsIGFuZCByZXByZXNlbnRzOgotICAg
KiBjcHVDdXJyZW50OiBUaGUgQ1BVIHVzZSBzaW5jZSB0aGUgbGFzdCBzYW1wbGVDcHVVdGlsaXph
dGlvbiBjYWxsLgotICAgKiBjcHVBdmczOiBUaGUgYXZlcmFnZSBDUFUgb3ZlciB0aGUgbGFzdCAz
IGNhbGxzLgotICAgKiBjcHVBdmdBbGw6IFRoZSBhdmVyYWdlIENQVSBvdmVyIHRoZSBsYXN0IFNB
TVBMRV9TQVZFX05VTUJFUiBjYWxscy4KLSAgICovCi0gIHByaXZhdGUgc3luY2hyb25pemVkIGJv
b2xlYW4gc2FtcGxlQ3B1VXRpbGl6YXRpb24oKSB7Ci0gICAgbG9uZyBsYXN0U2Vlbk1heEZyZXEg
PSAwOwotICAgIGxvbmcgY3B1RnJlcUN1clN1bSA9IDA7Ci0gICAgbG9uZyBjcHVGcmVxTWF4U3Vt
ID0gMDsKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgIGluaXQoKTsKLSAgICB9Ci0g
ICAgaWYgKGNwdXNQcmVzZW50ID09IDApIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBhY3R1YWxDcHVzUHJlc2VudCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcHVz
UHJlc2VudDsgaSsrKSB7Ci0gICAgICAvKgotICAgICAgICogRm9yIGVhY2ggQ1BVLCBhdHRlbXB0
IHRvIGZpcnN0IHJlYWQgaXRzIG1heCBmcmVxdWVuY3ksIHRoZW4gaXRzCi0gICAgICAgKiBjdXJy
ZW50IGZyZXF1ZW5jeS4gIE9uY2UgYXMgdGhlIG1heCBmcmVxdWVuY3kgZm9yIGEgQ1BVIGlzIGZv
dW5kLAotICAgICAgICogc2F2ZSBpdCBpbiBjcHVGcmVxTWF4W10uCi0gICAgICAgKi8KLQotICAg
ICAgY3VyRnJlcVNjYWxlc1tpXSA9IDA7Ci0gICAgICBpZiAoY3B1RnJlcU1heFtpXSA9PSAwKSB7
Ci0gICAgICAgIC8vIFdlIGhhdmUgbmV2ZXIgZm91bmQgdGhpcyBDUFUncyBtYXggZnJlcXVlbmN5
LiAgQXR0ZW1wdCB0byByZWFkIGl0LgotICAgICAgICBsb25nIGNwdWZyZXFNYXggPSByZWFkRnJl
cUZyb21GaWxlKG1heFBhdGhbaV0pOwotICAgICAgICBpZiAoY3B1ZnJlcU1heCA+IDApIHsKLSAg
ICAgICAgICBMb2cuZChUQUcsICJDb3JlICIgKyBpICsgIi4gTWF4IGZyZXF1ZW5jeTogIiArIGNw
dWZyZXFNYXgpOwotICAgICAgICAgIGxhc3RTZWVuTWF4RnJlcSA9IGNwdWZyZXFNYXg7Ci0gICAg
ICAgICAgY3B1RnJlcU1heFtpXSA9IGNwdWZyZXFNYXg7Ci0gICAgICAgICAgbWF4UGF0aFtpXSA9
IG51bGw7IC8vIEtpbGwgcGF0aCB0byBmcmVlIGl0cyBtZW1vcnkuCi0gICAgICAgIH0KLSAgICAg
IH0gZWxzZSB7Ci0gICAgICAgIGxhc3RTZWVuTWF4RnJlcSA9IGNwdUZyZXFNYXhbaV07IC8vIEEg
dmFsaWQsIHByZXZpb3VzbHkgcmVhZCB2YWx1ZS4KLSAgICAgIH0KLQotICAgICAgbG9uZyBjcHVG
cmVxQ3VyID0gcmVhZEZyZXFGcm9tRmlsZShjdXJQYXRoW2ldKTsKLSAgICAgIGlmIChjcHVGcmVx
Q3VyID09IDAgJiYgbGFzdFNlZW5NYXhGcmVxID09IDApIHsKLSAgICAgICAgLy8gTm8gY3VycmVu
dCBmcmVxdWVuY3kgaW5mb3JtYXRpb24gZm9yIHRoaXMgQ1BVIGNvcmUgLSBpZ25vcmUgaXQuCi0g
ICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgaWYgKGNwdUZyZXFDdXIgPiAwKSB7Ci0g
ICAgICAgIGFjdHVhbENwdXNQcmVzZW50Kys7Ci0gICAgICB9Ci0gICAgICBjcHVGcmVxQ3VyU3Vt
ICs9IGNwdUZyZXFDdXI7Ci0KLSAgICAgIC8qIEhlcmUsIGxhc3RTZWVuTWF4RnJlcSBtaWdodCBj
b21lIGZyb20KLSAgICAgICAqIDEuIGNwdUZyZXFbaV0sIG9yCi0gICAgICAgKiAyLiBhIHByZXZp
b3VzIGl0ZXJhdGlvbiwgb3IKLSAgICAgICAqIDMuIGEgbmV3bHkgcmVhZCB2YWx1ZSwgb3IKLSAg
ICAgICAqIDQuIGh5cG90aGV0aWNhbGx5IGZyb20gdGhlIHByZS1sb29wIGR1bW15LgotICAgICAg
ICovCi0gICAgICBjcHVGcmVxTWF4U3VtICs9IGxhc3RTZWVuTWF4RnJlcTsKLSAgICAgIGlmIChs
YXN0U2Vlbk1heEZyZXEgPiAwKSB7Ci0gICAgICAgIGN1ckZyZXFTY2FsZXNbaV0gPSAoZG91Ymxl
KSBjcHVGcmVxQ3VyIC8gbGFzdFNlZW5NYXhGcmVxOwotICAgICAgfQotICAgIH0KLQotICAgIGlm
IChjcHVGcmVxQ3VyU3VtID09IDAgfHwgY3B1RnJlcU1heFN1bSA9PSAwKSB7Ci0gICAgICBMb2cu
ZShUQUcsICJDb3VsZCBub3QgcmVhZCBtYXggb3IgY3VycmVudCBmcmVxdWVuY3kgZm9yIGFueSBD
UFUiKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNpbmNl
IHRoZSBjeWNsZSBjb3VudHMgYXJlIGZvciB0aGUgcGVyaW9kIGJldHdlZW4gdGhlIGxhc3QgaW52
b2NhdGlvbgotICAgICAqIGFuZCB0aGlzIHByZXNlbnQgb25lLCB3ZSBhdmVyYWdlIHRoZSBwZXJj
ZW50dWFsIENQVSBmcmVxdWVuY2llcyBiZXR3ZWVuCi0gICAgICogbm93IGFuZCB0aGUgYmVnaW5u
aW5nIG9mIHRoZSBtZWFzdXJlbWVudCBwZXJpb2QuICBUaGlzIGlzIHNpZ25pZmljYW50bHkKLSAg
ICAgKiBpbmNvcnJlY3Qgb25seSBpZiB0aGUgZnJlcXVlbmNpZXMgaGF2ZSBwZWVrZWQgb3IgZHJv
cHBlZCBpbiBiZXR3ZWVuIHRoZQotICAgICAqIGludm9jYXRpb25zLgotICAgICAqLwotICAgIGRv
dWJsZSBjdXJyZW50RnJlcXVlbmN5U2NhbGUgPSBjcHVGcmVxQ3VyU3VtIC8gKGRvdWJsZSkgY3B1
RnJlcU1heFN1bTsKLSAgICBpZiAoZnJlcXVlbmN5U2NhbGUuZ2V0Q3VycmVudCgpID4gMCkgewot
ICAgICAgY3VycmVudEZyZXF1ZW5jeVNjYWxlID0gKGZyZXF1ZW5jeVNjYWxlLmdldEN1cnJlbnQo
KSArIGN1cnJlbnRGcmVxdWVuY3lTY2FsZSkgKiAwLjU7Ci0gICAgfQotCi0gICAgUHJvY1N0YXQg
cHJvY1N0YXQgPSByZWFkUHJvY1N0YXQoKTsKLSAgICBpZiAocHJvY1N0YXQgPT0gbnVsbCkgewot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGxvbmcgZGlmZlVzZXJUaW1lID0gcHJv
Y1N0YXQudXNlclRpbWUgLSBsYXN0UHJvY1N0YXQudXNlclRpbWU7Ci0gICAgbG9uZyBkaWZmU3lz
dGVtVGltZSA9IHByb2NTdGF0LnN5c3RlbVRpbWUgLSBsYXN0UHJvY1N0YXQuc3lzdGVtVGltZTsK
LSAgICBsb25nIGRpZmZJZGxlVGltZSA9IHByb2NTdGF0LmlkbGVUaW1lIC0gbGFzdFByb2NTdGF0
LmlkbGVUaW1lOwotICAgIGxvbmcgYWxsVGltZSA9IGRpZmZVc2VyVGltZSArIGRpZmZTeXN0ZW1U
aW1lICsgZGlmZklkbGVUaW1lOwotCi0gICAgaWYgKGN1cnJlbnRGcmVxdWVuY3lTY2FsZSA9PSAw
IHx8IGFsbFRpbWUgPT0gMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFVwZGF0ZSBzdGF0aXN0aWNzLgotICAgIGZyZXF1ZW5jeVNjYWxlLmFkZFZhbHVlKGN1cnJlbnRG
cmVxdWVuY3lTY2FsZSk7Ci0KLSAgICBkb3VibGUgY3VycmVudFVzZXJDcHVVc2FnZSA9IGRpZmZV
c2VyVGltZSAvIChkb3VibGUpIGFsbFRpbWU7Ci0gICAgdXNlckNwdVVzYWdlLmFkZFZhbHVlKGN1
cnJlbnRVc2VyQ3B1VXNhZ2UpOwotCi0gICAgZG91YmxlIGN1cnJlbnRTeXN0ZW1DcHVVc2FnZSA9
IGRpZmZTeXN0ZW1UaW1lIC8gKGRvdWJsZSkgYWxsVGltZTsKLSAgICBzeXN0ZW1DcHVVc2FnZS5h
ZGRWYWx1ZShjdXJyZW50U3lzdGVtQ3B1VXNhZ2UpOwotCi0gICAgZG91YmxlIGN1cnJlbnRUb3Rh
bENwdVVzYWdlID0KLSAgICAgICAgKGN1cnJlbnRVc2VyQ3B1VXNhZ2UgKyBjdXJyZW50U3lzdGVt
Q3B1VXNhZ2UpICogY3VycmVudEZyZXF1ZW5jeVNjYWxlOwotICAgIHRvdGFsQ3B1VXNhZ2UuYWRk
VmFsdWUoY3VycmVudFRvdGFsQ3B1VXNhZ2UpOwotCi0gICAgLy8gU2F2ZSBuZXcgbWVhc3VyZW1l
bnRzIGZvciBuZXh0IHJvdW5kJ3MgZGVsdGFzLgotICAgIGxhc3RQcm9jU3RhdCA9IHByb2NTdGF0
OwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGludCBkb3VibGVUb1BlcmNl
bnQoZG91YmxlIGQpIHsKLSAgICByZXR1cm4gKGludCkgKGQgKiAxMDAgKyAwLjUpOwotICB9Ci0K
LSAgcHJpdmF0ZSBzeW5jaHJvbml6ZWQgU3RyaW5nIGdldFN0YXRTdHJpbmcoKSB7Ci0gICAgU3Ry
aW5nQnVpbGRlciBzdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBzdGF0LmFwcGVuZCgi
Q1BVIFVzZXI6ICIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KHVzZXJDcHVVc2Fn
ZS5nZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5kKCIvIikKLSAgICAgICAgLmFwcGVuZChk
b3VibGVUb1BlcmNlbnQodXNlckNwdVVzYWdlLmdldEF2ZXJhZ2UoKSkpCi0gICAgICAgIC5hcHBl
bmQoIi4gU3lzdGVtOiAiKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudChzeXN0ZW1D
cHVVc2FnZS5nZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5kKCIvIikKLSAgICAgICAgLmFw
cGVuZChkb3VibGVUb1BlcmNlbnQoc3lzdGVtQ3B1VXNhZ2UuZ2V0QXZlcmFnZSgpKSkKLSAgICAg
ICAgLmFwcGVuZCgiLiBGcmVxOiAiKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudChm
cmVxdWVuY3lTY2FsZS5nZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5kKCIvIikKLSAgICAg
ICAgLmFwcGVuZChkb3VibGVUb1BlcmNlbnQoZnJlcXVlbmN5U2NhbGUuZ2V0QXZlcmFnZSgpKSkK
LSAgICAgICAgLmFwcGVuZCgiLiBUb3RhbCB1c2FnZTogIikKLSAgICAgICAgLmFwcGVuZChkb3Vi
bGVUb1BlcmNlbnQodG90YWxDcHVVc2FnZS5nZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5k
KCIvIikKLSAgICAgICAgLmFwcGVuZChkb3VibGVUb1BlcmNlbnQodG90YWxDcHVVc2FnZS5nZXRB
dmVyYWdlKCkpKQotICAgICAgICAuYXBwZW5kKCIuIENvcmVzOiAiKQotICAgICAgICAuYXBwZW5k
KGFjdHVhbENwdXNQcmVzZW50KTsKLSAgICBzdGF0LmFwcGVuZCgiKCAiKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNwdXNQcmVzZW50OyBpKyspIHsKLSAgICAgIHN0YXQuYXBwZW5kKGRvdWJs
ZVRvUGVyY2VudChjdXJGcmVxU2NhbGVzW2ldKSkuYXBwZW5kKCIgIik7Ci0gICAgfQotICAgIHN0
YXQuYXBwZW5kKCIpLiBCYXR0ZXJ5OiAiKS5hcHBlbmQoZ2V0QmF0dGVyeUxldmVsKCkpOwotICAg
IGlmIChjcHVPdmVydXNlKSB7Ci0gICAgICBzdGF0LmFwcGVuZCgiLiBPdmVydXNlLiIpOwotICAg
IH0KLSAgICByZXR1cm4gc3RhdC50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQg
YSBzaW5nbGUgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBuYW1lZCBmaWxlLiAgUmV0dXJuIHRoZSBy
ZWFkIHZhbHVlCi0gICAqIG9yIGlmIGFuIGVycm9yIG9jY3VycyByZXR1cm4gMC4KLSAgICovCi0g
IHByaXZhdGUgbG9uZyByZWFkRnJlcUZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSkgewotICAgIGxv
bmcgbnVtYmVyID0gMDsKLSAgICB0cnkgewotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0g
bmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKSk7Ci0gICAgICB0cnkg
ewotICAgICAgICBTdHJpbmcgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgICBudW1i
ZXIgPSBwYXJzZUxvbmcobGluZSk7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICByZWFkZXIu
Y2xvc2UoKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkg
ewotICAgICAgLy8gQ1BVIGNvcmUgaXMgb2ZmLCBzbyBmaWxlIHdpdGggaXRzIHNjYWxpbmcgZnJl
cXVlbmN5IC4uLi9jcHVmcmVxL3NjYWxpbmdfY3VyX2ZyZXEKLSAgICAgIC8vIGlzIG5vdCBwcmVz
ZW50LiBUaGlzIGlzIG5vdCBhbiBlcnJvci4KLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICAvLyBDUFUgY29yZSBpcyBvZmYsIHNvIGZpbGUgd2l0aCBpdHMgc2NhbGluZyBmcmVx
dWVuY3kgLi4uL2NwdWZyZXEvc2NhbGluZ19jdXJfZnJlcQotICAgICAgLy8gaXMgZW1wdHkuIFRo
aXMgaXMgbm90IGFuIGVycm9yLgotICAgIH0KLSAgICByZXR1cm4gbnVtYmVyOwotICB9Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgbG9uZyBwYXJzZUxvbmcoU3RyaW5nIHZhbHVlKSB7Ci0gICAgbG9uZyBu
dW1iZXIgPSAwOwotICAgIHRyeSB7Ci0gICAgICBudW1iZXIgPSBMb25nLnBhcnNlTG9uZyh2YWx1
ZSk7Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZy5l
KFRBRywgInBhcnNlTG9uZyBlcnJvci4iLCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bWJlcjsK
LSAgfQotCi0gIC8qCi0gICAqIFJlYWQgdGhlIGN1cnJlbnQgdXRpbGl6YXRpb24gb2YgYWxsIENQ
VXMgdXNpbmcgdGhlIGN1bXVsYXRpdmUgZmlyc3QgbGluZQotICAgKiBvZiAvcHJvYy9zdGF0Lgot
ICAgKi8KLSAgcHJpdmF0ZSBQcm9jU3RhdCByZWFkUHJvY1N0YXQoKSB7Ci0gICAgbG9uZyB1c2Vy
VGltZSA9IDA7Ci0gICAgbG9uZyBzeXN0ZW1UaW1lID0gMDsKLSAgICBsb25nIGlkbGVUaW1lID0g
MDsKLSAgICB0cnkgewotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVk
UmVhZGVyKG5ldyBGaWxlUmVhZGVyKCIvcHJvYy9zdGF0IikpOwotICAgICAgdHJ5IHsKLSAgICAg
ICAgLy8gbGluZSBzaG91bGQgY29udGFpbiBzb21ldGhpbmcgbGlrZSB0aGlzOgotICAgICAgICAv
LyBjcHUgIDUwOTM4MTggMjcxODM4IDM1MTI4MzAgMTY1OTM0MTE5IDEwMTM3NCA0NDcwNzYgMjcy
MDg2IDAgMCAwCi0gICAgICAgIC8vICAgICAgIHVzZXIgICAgbmljZSAgc3lzdGVtICAgICBpZGxl
ICAgaW93YWl0ICBpcnEgICBzb2Z0aXJxCi0gICAgICAgIFN0cmluZyBsaW5lID0gcmVhZGVyLnJl
YWRMaW5lKCk7Ci0gICAgICAgIFN0cmluZyBsaW5lc1tdID0gbGluZS5zcGxpdCgiXFxzKyIpOwot
ICAgICAgICBpbnQgbGVuZ3RoID0gbGluZXMubGVuZ3RoOwotICAgICAgICBpZiAobGVuZ3RoID49
IDUpIHsKLSAgICAgICAgICB1c2VyVGltZSA9IHBhcnNlTG9uZyhsaW5lc1sxXSk7IC8vIHVzZXIK
LSAgICAgICAgICB1c2VyVGltZSArPSBwYXJzZUxvbmcobGluZXNbMl0pOyAvLyBuaWNlCi0gICAg
ICAgICAgc3lzdGVtVGltZSA9IHBhcnNlTG9uZyhsaW5lc1szXSk7IC8vIHN5c3RlbQotICAgICAg
ICAgIGlkbGVUaW1lID0gcGFyc2VMb25nKGxpbmVzWzRdKTsgLy8gaWRsZQotICAgICAgICB9Ci0g
ICAgICAgIGlmIChsZW5ndGggPj0gOCkgewotICAgICAgICAgIHVzZXJUaW1lICs9IHBhcnNlTG9u
ZyhsaW5lc1s1XSk7IC8vIGlvd2FpdAotICAgICAgICAgIHN5c3RlbVRpbWUgKz0gcGFyc2VMb25n
KGxpbmVzWzZdKTsgLy8gaXJxCi0gICAgICAgICAgc3lzdGVtVGltZSArPSBwYXJzZUxvbmcobGlu
ZXNbN10pOyAvLyBzb2Z0aXJxCi0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAgIExvZy5lKFRBRywgIlByb2JsZW1zIHBhcnNpbmcgL3Byb2Mvc3RhdCIsIGUp
OwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIHJlYWRl
ci5jbG9zZSgpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBMb2cuZShUQUcsICJDYW5ub3Qgb3BlbiAvcHJvYy9zdGF0IGZvciByZWFkaW5n
IiwgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7
Ci0gICAgICBMb2cuZShUQUcsICJQcm9ibGVtcyByZWFkaW5nIC9wcm9jL3N0YXQiLCBlKTsKLSAg
ICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFByb2NTdGF0KHVzZXJUaW1l
LCBzeXN0ZW1UaW1lLCBpZGxlVGltZSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvRGlyZWN0UlRDQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnQuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDM0NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBX
ZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9y
dCBvcmcuanNvbi5KU09OQXJyYXk7Ci1pbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKLWlt
cG9ydCBvcmcuanNvbi5KU09OT2JqZWN0OwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRl
OwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5T
ZXNzaW9uRGVzY3JpcHRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9y
dCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGls
LmNvbmN1cnJlbnQuRXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwot
aW1wb3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi0vKioKLSAqIEltcGxlbWVudGF0aW9u
IG9mIEFwcFJUQ0NsaWVudCB0aGF0IHVzZXMgZGlyZWN0IFRDUCBjb25uZWN0aW9uIGFzIHRoZSBz
aWduYWxpbmcgY2hhbm5lbC4KLSAqIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgYW4gZXh0
ZXJuYWwgc2VydmVyLiBUaGlzIGNsYXNzIGRvZXMgbm90IHN1cHBvcnQgbG9vcGJhY2sKLSAqIGNv
bm5lY3Rpb25zLgotICovCi1wdWJsaWMgY2xhc3MgRGlyZWN0UlRDQ2xpZW50IGltcGxlbWVudHMg
QXBwUlRDQ2xpZW50LCBUQ1BDaGFubmVsQ2xpZW50LlRDUENoYW5uZWxFdmVudHMgewotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkRpcmVjdFJUQ0NsaWVudCI7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1BPUlQgPSA4ODg4OwotCi0gIC8vIFJlZ2V4IHBh
dHRlcm4gdXNlZCBmb3IgY2hlY2tpbmcgaWYgcm9vbSBpZCBsb29rcyBsaWtlIGFuIElQLgotICBz
dGF0aWMgZmluYWwgUGF0dGVybiBJUF9QQVRURVJOID0gUGF0dGVybi5jb21waWxlKCIoIgotICAg
ICAgLy8gSVB2NAotICAgICAgKyAiKChcXGQrXFwuKXszfVxcZCspfCIKLSAgICAgIC8vIElQdjYK
LSAgICAgICsgIlxcWygoKFswLTlhLWZBLUZdezEsNH06KSpbMC05YS1mQS1GXXsxLDR9KT86OiIK
LSAgICAgICsgIigoWzAtOWEtZkEtRl17MSw0fTopKlswLTlhLWZBLUZdezEsNH0pPylcXF18Igot
ICAgICAgKyAiXFxbKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9KVxcXXwi
Ci0gICAgICAvLyBJUHY2IHdpdGhvdXQgW10KLSAgICAgICsgIigoKFswLTlhLWZBLUZdezEsNH06
KSpbMC05YS1mQS1GXXsxLDR9KT86OigoWzAtOWEtZkEtRl17MSw0fTopKlswLTlhLWZBLUZdezEs
NH0pPyl8IgotICAgICAgKyAiKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9
KXwiCi0gICAgICAvLyBMaXRlcmFscwotICAgICAgKyAibG9jYWxob3N0IgotICAgICAgKyAiKSIK
LSAgICAgIC8vIE9wdGlvbmFsIHBvcnQgbnVtYmVyCi0gICAgICArICIoOihcXGQrKSk/Iik7Ci0K
LSAgcHJpdmF0ZSBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3I7Ci0gIHByaXZhdGUgZmlu
YWwgU2lnbmFsaW5nRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IHRj
cENsaWVudDsKLSAgcHJpdmF0ZSBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBh
cmFtZXRlcnM7Ci0KLSAgcHJpdmF0ZSBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7IE5FVywgQ09OTkVD
VEVELCBDTE9TRUQsIEVSUk9SIH0KLQotICAvLyBBbGwgYWx0ZXJhdGlvbnMgb2YgdGhlIHJvb20g
c3RhdGUgc2hvdWxkIGJlIGRvbmUgZnJvbSBpbnNpZGUgdGhlIGxvb3BlciB0aHJlYWQuCi0gIHBy
aXZhdGUgQ29ubmVjdGlvblN0YXRlIHJvb21TdGF0ZTsKLQotICBwdWJsaWMgRGlyZWN0UlRDQ2xp
ZW50KFNpZ25hbGluZ0V2ZW50cyBldmVudHMpIHsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsK
LQotICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7Ci0g
ICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLk5FVzsKLSAgfQotCi0gIC8qKgotICAgKiBD
b25uZWN0cyB0byB0aGUgcm9vbSwgcm9vbUlkIGluIGNvbm5lY3Rpb25zUGFyYW1ldGVycyBpcyBy
ZXF1aXJlZC4gcm9vbUlkIG11c3QgYmUgYSB2YWxpZAotICAgKiBJUCBhZGRyZXNzIG1hdGNoaW5n
IElQX1BBVFRFUk4uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY29ubmVjdFRv
Um9vbShSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnMpIHsKLSAg
ICB0aGlzLmNvbm5lY3Rpb25QYXJhbWV0ZXJzID0gY29ubmVjdGlvblBhcmFtZXRlcnM7Ci0KLSAg
ICBpZiAoY29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgIHJlcG9ydEVycm9y
KCJMb29wYmFjayBjb25uZWN0aW9ucyBhcmVuJ3Qgc3VwcG9ydGVkIGJ5IERpcmVjdFJUQ0NsaWVu
dC4iKTsKLSAgICB9Ci0KLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjb25uZWN0
VG9Sb29tSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQot
ICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0RnJvbVJvb20oKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0
ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgZGlzY29ubmVjdEZyb21Sb29tSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAg
ICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25uZWN0cyB0byB0aGUgcm9vbS4KLSAgICoKLSAg
ICogUnVucyBvbiB0aGUgbG9vcGVyIHRocmVhZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjb25u
ZWN0VG9Sb29tSW50ZXJuYWwoKSB7Ci0gICAgdGhpcy5yb29tU3RhdGUgPSBDb25uZWN0aW9uU3Rh
dGUuTkVXOwotCi0gICAgU3RyaW5nIGVuZHBvaW50ID0gY29ubmVjdGlvblBhcmFtZXRlcnMucm9v
bUlkOwotCi0gICAgTWF0Y2hlciBtYXRjaGVyID0gSVBfUEFUVEVSTi5tYXRjaGVyKGVuZHBvaW50
KTsKLSAgICBpZiAoIW1hdGNoZXIubWF0Y2hlcygpKSB7Ci0gICAgICByZXBvcnRFcnJvcigicm9v
bUlkIG11c3QgbWF0Y2ggSVBfUEFUVEVSTiBmb3IgRGlyZWN0UlRDQ2xpZW50LiIpOwotICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBpcCA9IG1hdGNoZXIuZ3JvdXAoMSk7Ci0gICAg
U3RyaW5nIHBvcnRTdHIgPSBtYXRjaGVyLmdyb3VwKG1hdGNoZXIuZ3JvdXBDb3VudCgpKTsKLSAg
ICBpbnQgcG9ydDsKLQotICAgIGlmIChwb3J0U3RyICE9IG51bGwpIHsKLSAgICAgIHRyeSB7Ci0g
ICAgICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBvcnRTdHIpOwotICAgICAgfSBjYXRjaCAo
TnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkludmFsaWQg
cG9ydCBudW1iZXI6ICIgKyBwb3J0U3RyKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICBwb3J0ID0gREVGQVVMVF9QT1JUOwotICAgIH0KLQotICAgIHRjcENs
aWVudCA9IG5ldyBUQ1BDaGFubmVsQ2xpZW50KGV4ZWN1dG9yLCB0aGlzLCBpcCwgcG9ydCk7Ci0g
IH0KLQotICAvKioKLSAgICogRGlzY29ubmVjdHMgZnJvbSB0aGUgcm9vbS4KLSAgICoKLSAgICog
UnVucyBvbiB0aGUgbG9vcGVyIHRocmVhZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBkaXNjb25u
ZWN0RnJvbVJvb21JbnRlcm5hbCgpIHsKLSAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUu
Q0xPU0VEOwotCi0gICAgaWYgKHRjcENsaWVudCAhPSBudWxsKSB7Ci0gICAgICB0Y3BDbGllbnQu
ZGlzY29ubmVjdCgpOwotICAgICAgdGNwQ2xpZW50ID0gbnVsbDsKLSAgICB9Ci0gICAgZXhlY3V0
b3Iuc2h1dGRvd24oKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZW5kT2Zm
ZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1
dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RF
RCkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJTZW5kaW5nIG9mZmVyIFNEUCBpbiBub24gY29u
bmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBK
U09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24s
ICJzZHAiLCBzZHAuZGVzY3JpcHRpb24pOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwg
Im9mZmVyIik7Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZEFuc3dlclNk
cChmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAg
anNvblB1dChqc29uLCAic2RwIiwgc2RwLmRlc2NyaXB0aW9uKTsKLSAgICAgICAganNvblB1dChq
c29uLCAidHlwZSIsICJhbnN3ZXIiKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoanNvbi50b1N0cmlu
ZygpKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBzZW5kTG9jYWxJY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewot
ICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBK
U09OT2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAiY2FuZGlkYXRlIik7
Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImxhYmVsIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgp
OwotICAgICAgICBqc29uUHV0KGpzb24sICJpZCIsIGNhbmRpZGF0ZS5zZHBNaWQpOwotICAgICAg
ICBqc29uUHV0KGpzb24sICJjYW5kaWRhdGUiLCBjYW5kaWRhdGUuc2RwKTsKLQotICAgICAgICBp
ZiAocm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICBy
ZXBvcnRFcnJvcigiU2VuZGluZyBJQ0UgY2FuZGlkYXRlIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUu
Iik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpz
b24udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKiogU2VuZCByZW1v
dmVkIEljZSBjYW5kaWRhdGVzIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4gKi8KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZVJlbW92YWxzKGZpbmFsIElj
ZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5u
YWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0
KGpzb24sICJ0eXBlIiwgInJlbW92ZS1jYW5kaWRhdGVzIik7Ci0gICAgICAgIEpTT05BcnJheSBq
c29uQXJyYXkgPSBuZXcgSlNPTkFycmF5KCk7Ci0gICAgICAgIGZvciAoZmluYWwgSWNlQ2FuZGlk
YXRlIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICBqc29uQXJyYXkucHV0KHRv
SnNvbkNhbmRpZGF0ZShjYW5kaWRhdGUpKTsKLSAgICAgICAgfQotICAgICAgICBqc29uUHV0KGpz
b24sICJjYW5kaWRhdGVzIiwganNvbkFycmF5KTsKLQotICAgICAgICBpZiAocm9vbVN0YXRlICE9
IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiU2Vu
ZGluZyBJQ0UgY2FuZGlkYXRlIHJlbW92YWxzIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7Ci0g
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpzb24udG9T
dHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8v
IFRDUENoYW5uZWxDbGllbnQgZXZlbnQgaGFuZGxlcnMKLQotICAvKioKLSAgICogSWYgdGhlIGNs
aWVudCBpcyB0aGUgc2VydmVyIHNpZGUsIHRoaXMgd2lsbCB0cmlnZ2VyIG9uQ29ubmVjdGVkVG9S
b29tLgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVENQQ29ubmVjdGVkKGJv
b2xlYW4gaXNTZXJ2ZXIpIHsKLSAgICBpZiAoaXNTZXJ2ZXIpIHsKLSAgICAgIHJvb21TdGF0ZSA9
IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0KLSAgICAgIFNpZ25hbGluZ1BhcmFtZXRlcnMg
cGFyYW1ldGVycyA9IG5ldyBTaWduYWxpbmdQYXJhbWV0ZXJzKAotICAgICAgICAgIC8vIEljZSBz
ZXJ2ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkaXJlY3QgY29ubmVjdGlvbnMuCi0gICAgICAgICAg
bmV3IExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPigpLAotICAgICAgICAgIGlz
U2VydmVyLCAvLyBTZXJ2ZXIgc2lkZSBhY3RzIGFzIHRoZSBpbml0aWF0b3Igb24gZGlyZWN0IGNv
bm5lY3Rpb25zLgotICAgICAgICAgIG51bGwsIC8vIGNsaWVudElkCi0gICAgICAgICAgbnVsbCwg
Ly8gd3NzVXJsCi0gICAgICAgICAgbnVsbCwgLy8gd3dzUG9zdFVybAotICAgICAgICAgIG51bGws
IC8vIG9mZmVyU2RwCi0gICAgICAgICAgbnVsbCAvLyBpY2VDYW5kaWRhdGVzCi0gICAgICAgICAg
KTsKLSAgICAgIGV2ZW50cy5vbkNvbm5lY3RlZFRvUm9vbShwYXJhbWV0ZXJzKTsKLSAgICB9Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25UQ1BNZXNzYWdlKFN0cmluZyBtc2cp
IHsKLSAgICB0cnkgewotICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QobXNn
KTsKLSAgICAgIFN0cmluZyB0eXBlID0ganNvbi5vcHRTdHJpbmcoInR5cGUiKTsKLSAgICAgIGlm
ICh0eXBlLmVxdWFscygiY2FuZGlkYXRlIikpIHsKLSAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNl
Q2FuZGlkYXRlKHRvSmF2YUNhbmRpZGF0ZShqc29uKSk7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGUu
ZXF1YWxzKCJyZW1vdmUtY2FuZGlkYXRlcyIpKSB7Ci0gICAgICAgIEpTT05BcnJheSBjYW5kaWRh
dGVBcnJheSA9IGpzb24uZ2V0SlNPTkFycmF5KCJjYW5kaWRhdGVzIik7Ci0gICAgICAgIEljZUNh
bmRpZGF0ZVtdIGNhbmRpZGF0ZXMgPSBuZXcgSWNlQ2FuZGlkYXRlW2NhbmRpZGF0ZUFycmF5Lmxl
bmd0aCgpXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5kaWRhdGVBcnJheS5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgICAgY2FuZGlkYXRlc1tpXSA9IHRvSmF2YUNhbmRpZGF0ZShj
YW5kaWRhdGVBcnJheS5nZXRKU09OT2JqZWN0KGkpKTsKLSAgICAgICAgfQotICAgICAgICBldmVu
dHMub25SZW1vdGVJY2VDYW5kaWRhdGVzUmVtb3ZlZChjYW5kaWRhdGVzKTsKLSAgICAgIH0gZWxz
ZSBpZiAodHlwZS5lcXVhbHMoImFuc3dlciIpKSB7Ci0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlv
biBzZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgU2Vzc2lvbkRlc2Ny
aXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlwZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAi
KSk7Ci0gICAgICAgIGV2ZW50cy5vblJlbW90ZURlc2NyaXB0aW9uKHNkcCk7Ci0gICAgICB9IGVs
c2UgaWYgKHR5cGUuZXF1YWxzKCJvZmZlciIpKSB7Ci0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlv
biBzZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgU2Vzc2lvbkRlc2Ny
aXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlwZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAi
KSk7Ci0KLSAgICAgICAgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gbmV3IFNpZ25h
bGluZ1BhcmFtZXRlcnMoCi0gICAgICAgICAgICAvLyBJY2Ugc2VydmVycyBhcmUgbm90IG5lZWRl
ZCBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zLgotICAgICAgICAgICAgbmV3IExpbmtlZExpc3Q8UGVl
ckNvbm5lY3Rpb24uSWNlU2VydmVyPigpLAotICAgICAgICAgICAgZmFsc2UsIC8vIFRoaXMgY29k
ZSB3aWxsIG9ubHkgYmUgcnVuIG9uIHRoZSBjbGllbnQgc2lkZS4gU28sIHdlIGFyZSBub3QgdGhl
IGluaXRpYXRvci4KLSAgICAgICAgICAgIG51bGwsIC8vIGNsaWVudElkCi0gICAgICAgICAgICBu
dWxsLCAvLyB3c3NVcmwKLSAgICAgICAgICAgIG51bGwsIC8vIHdzc1Bvc3RVcmwKLSAgICAgICAg
ICAgIHNkcCwgLy8gb2ZmZXJTZHAKLSAgICAgICAgICAgIG51bGwgLy8gaWNlQ2FuZGlkYXRlcwot
ICAgICAgICAgICAgKTsKLSAgICAgICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkNPTk5F
Q1RFRDsKLSAgICAgICAgZXZlbnRzLm9uQ29ubmVjdGVkVG9Sb29tKHBhcmFtZXRlcnMpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIlVuZXhwZWN0ZWQgVENQIG1lc3NhZ2U6
ICIgKyBtc2cpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAg
ICAgcmVwb3J0RXJyb3IoIlRDUCBtZXNzYWdlIEpTT04gcGFyc2luZyBlcnJvcjogIiArIGUudG9T
dHJpbmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVENQ
RXJyb3IoU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgcmVwb3J0RXJyb3IoIlRDUCBjb25uZWN0
aW9uIGVycm9yOiAiICsgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG9uVENQQ2xvc2UoKSB7Ci0gICAgZXZlbnRzLm9uQ2hhbm5lbENsb3NlKCk7Ci0gIH0K
LQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBIZWxwZXIgZnVuY3Rpb25zLgotICBwcml2YXRlIHZv
aWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExvZy5lKFRB
RywgZXJyb3JNZXNzYWdlKTsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAo
cm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5FUlJPUikgewotICAgICAgICAgIHJvb21TdGF0
ZSA9IENvbm5lY3Rpb25TdGF0ZS5FUlJPUjsKLSAgICAgICAgICBldmVudHMub25DaGFubmVsRXJy
b3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHNlbmRNZXNzYWdlKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgZXhl
Y3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdGNwQ2xpZW50LnNlbmQobWVzc2FnZSk7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBQdXQgYSB8a2V5fC0+fHZhbHVlfCBtYXBwaW5nIGlu
IHxqc29ufC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBqc29uUHV0KEpTT05PYmplY3QganNvbiwg
U3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGpzb24ucHV0KGtl
eSwgdmFsdWUpOwotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cg
bmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29udmVydHMgYSBK
YXZhIGNhbmRpZGF0ZSB0byBhIEpTT05PYmplY3QuCi0gIHByaXZhdGUgc3RhdGljIEpTT05PYmpl
Y3QgdG9Kc29uQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBK
U09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgIGpzb25QdXQoanNvbiwgImxh
YmVsIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgpOwotICAgIGpzb25QdXQoanNvbiwgImlkIiwg
Y2FuZGlkYXRlLnNkcE1pZCk7Ci0gICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlIiwgY2FuZGlk
YXRlLnNkcCk7Ci0gICAgcmV0dXJuIGpzb247Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBhIEpTT04g
Y2FuZGlkYXRlIHRvIGEgSmF2YSBvYmplY3QuCi0gIHByaXZhdGUgc3RhdGljIEljZUNhbmRpZGF0
ZSB0b0phdmFDYW5kaWRhdGUoSlNPTk9iamVjdCBqc29uKSB0aHJvd3MgSlNPTkV4Y2VwdGlvbiB7
Ci0gICAgcmV0dXJuIG5ldyBJY2VDYW5kaWRhdGUoCi0gICAgICAgIGpzb24uZ2V0U3RyaW5nKCJp
ZCIpLCBqc29uLmdldEludCgibGFiZWwiKSwganNvbi5nZXRTdHJpbmcoImNhbmRpZGF0ZSIpKTsK
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0h1ZEZyYWdtZW50Lmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0h1ZEZyYWdtZW50
LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9I
dWRGcmFnbWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9p
ZC5hcHAuRnJhZ21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9p
ZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwot
aW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7
Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VCdXR0b247Ci1pbXBvcnQgYW5kcm9pZC53aWRn
ZXQuVGV4dFZpZXc7Ci0KLWltcG9ydCBvcmcud2VicnRjLlN0YXRzUmVwb3J0OwotCi1pbXBvcnQg
amF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBGcmFn
bWVudCBmb3IgSFVEIHN0YXRpc3RpY3MgZGlzcGxheS4KLSAqLwotcHVibGljIGNsYXNzIEh1ZEZy
YWdtZW50IGV4dGVuZHMgRnJhZ21lbnQgewotICBwcml2YXRlIFZpZXcgY29udHJvbFZpZXc7Ci0g
IHByaXZhdGUgVGV4dFZpZXcgZW5jb2RlclN0YXRWaWV3OwotICBwcml2YXRlIFRleHRWaWV3IGh1
ZFZpZXdCd2U7Ci0gIHByaXZhdGUgVGV4dFZpZXcgaHVkVmlld0Nvbm5lY3Rpb247Ci0gIHByaXZh
dGUgVGV4dFZpZXcgaHVkVmlld1ZpZGVvU2VuZDsKLSAgcHJpdmF0ZSBUZXh0VmlldyBodWRWaWV3
VmlkZW9SZWN2OwotICBwcml2YXRlIEltYWdlQnV0dG9uIHRvZ2dsZURlYnVnQnV0dG9uOwotICBw
cml2YXRlIGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZDsKLSAgcHJpdmF0ZSBib29sZWFuIGRpc3Bs
YXlIdWQ7Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBpc1J1bm5pbmc7Ci0gIHByaXZhdGUg
Q3B1TW9uaXRvciBjcHVNb25pdG9yOwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlldyBvbkNy
ZWF0ZVZpZXcoCi0gICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciwgVmlld0dyb3VwIGNvbnRh
aW5lciwgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIGNvbnRyb2xWaWV3ID0gaW5m
bGF0ZXIuaW5mbGF0ZShSLmxheW91dC5mcmFnbWVudF9odWQsIGNvbnRhaW5lciwgZmFsc2UpOwot
Ci0gICAgLy8gQ3JlYXRlIFVJIGNvbnRyb2xzLgotICAgIGVuY29kZXJTdGF0VmlldyA9IChUZXh0
VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZW5jb2Rlcl9zdGF0X2NhbGwpOwot
ICAgIGh1ZFZpZXdCd2UgPSAoVGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlk
Lmh1ZF9zdGF0X2J3ZSk7Ci0gICAgaHVkVmlld0Nvbm5lY3Rpb24gPSAoVGV4dFZpZXcpIGNvbnRy
b2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmh1ZF9zdGF0X2Nvbm5lY3Rpb24pOwotICAgIGh1ZFZp
ZXdWaWRlb1NlbmQgPSAoVGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmh1
ZF9zdGF0X3ZpZGVvX3NlbmQpOwotICAgIGh1ZFZpZXdWaWRlb1JlY3YgPSAoVGV4dFZpZXcpIGNv
bnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmh1ZF9zdGF0X3ZpZGVvX3JlY3YpOwotICAgIHRv
Z2dsZURlYnVnQnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5maW5kVmlld0J5SWQo
Ui5pZC5idXR0b25fdG9nZ2xlX2RlYnVnKTsKLQotICAgIHRvZ2dsZURlYnVnQnV0dG9uLnNldE9u
Q2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGlmIChk
aXNwbGF5SHVkKSB7Ci0gICAgICAgICAgaW50IHZpc2liaWxpdHkgPQotICAgICAgICAgICAgICAo
aHVkVmlld0J3ZS5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKSA/IFZpZXcuSU5WSVNJ
QkxFIDogVmlldy5WSVNJQkxFOwotICAgICAgICAgIGh1ZFZpZXdzU2V0UHJvcGVydGllcyh2aXNp
YmlsaXR5KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotCi0gICAgcmV0dXJuIGNvbnRy
b2xWaWV3OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU3RhcnQoKSB7Ci0g
ICAgc3VwZXIub25TdGFydCgpOwotCi0gICAgQnVuZGxlIGFyZ3MgPSBnZXRBcmd1bWVudHMoKTsK
LSAgICBpZiAoYXJncyAhPSBudWxsKSB7Ci0gICAgICB2aWRlb0NhbGxFbmFibGVkID0gYXJncy5n
ZXRCb29sZWFuKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQUxMLCB0cnVlKTsKLSAgICAgIGRp
c3BsYXlIdWQgPSBhcmdzLmdldEJvb2xlYW4oQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU1BMQVlfSFVE
LCBmYWxzZSk7Ci0gICAgfQotICAgIGludCB2aXNpYmlsaXR5ID0gZGlzcGxheUh1ZCA/IFZpZXcu
VklTSUJMRSA6IFZpZXcuSU5WSVNJQkxFOwotICAgIGVuY29kZXJTdGF0Vmlldy5zZXRWaXNpYmls
aXR5KHZpc2liaWxpdHkpOwotICAgIHRvZ2dsZURlYnVnQnV0dG9uLnNldFZpc2liaWxpdHkodmlz
aWJpbGl0eSk7Ci0gICAgaHVkVmlld3NTZXRQcm9wZXJ0aWVzKFZpZXcuSU5WSVNJQkxFKTsKLSAg
ICBpc1J1bm5pbmcgPSB0cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
U3RvcCgpIHsKLSAgICBpc1J1bm5pbmcgPSBmYWxzZTsKLSAgICBzdXBlci5vblN0b3AoKTsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIHNldENwdU1vbml0b3IoQ3B1TW9uaXRvciBjcHVNb25pdG9yKSB7
Ci0gICAgdGhpcy5jcHVNb25pdG9yID0gY3B1TW9uaXRvcjsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBodWRWaWV3c1NldFByb3BlcnRpZXMoaW50IHZpc2liaWxpdHkpIHsKLSAgICBodWRWaWV3Qndl
LnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgaHVkVmlld0Nvbm5lY3Rpb24uc2V0Vmlz
aWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3VmlkZW9TZW5kLnNldFZpc2liaWxpdHko
dmlzaWJpbGl0eSk7Ci0gICAgaHVkVmlld1ZpZGVvUmVjdi5zZXRWaXNpYmlsaXR5KHZpc2liaWxp
dHkpOwotICAgIGh1ZFZpZXdCd2Uuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRf
UFQsIDUpOwotICAgIGh1ZFZpZXdDb25uZWN0aW9uLnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09N
UExFWF9VTklUX1BULCA1KTsKLSAgICBodWRWaWV3VmlkZW9TZW5kLnNldFRleHRTaXplKFR5cGVk
VmFsdWUuQ09NUExFWF9VTklUX1BULCA1KTsKLSAgICBodWRWaWV3VmlkZW9SZWN2LnNldFRleHRT
aXplKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BULCA1KTsKLSAgfQotCi0gIHByaXZhdGUgTWFw
PFN0cmluZywgU3RyaW5nPiBnZXRSZXBvcnRNYXAoU3RhdHNSZXBvcnQgcmVwb3J0KSB7Ci0gICAg
TWFwPFN0cmluZywgU3RyaW5nPiByZXBvcnRNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmlu
Zz4oKTsKLSAgICBmb3IgKFN0YXRzUmVwb3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZhbHVlcykg
ewotICAgICAgcmVwb3J0TWFwLnB1dCh2YWx1ZS5uYW1lLCB2YWx1ZS52YWx1ZSk7Ci0gICAgfQot
ICAgIHJldHVybiByZXBvcnRNYXA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB1cGRhdGVFbmNvZGVy
U3RhdGlzdGljcyhmaW5hbCBTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHsKLSAgICBpZiAoIWlzUnVu
bmluZyB8fCAhZGlzcGxheUh1ZCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTdHJpbmdC
dWlsZGVyIGVuY29kZXJTdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoMTI4KTsKLSAgICBTdHJpbmdC
dWlsZGVyIGJ3ZVN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIFN0cmluZ0J1aWxkZXIg
Y29ubmVjdGlvblN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIFN0cmluZ0J1aWxkZXIg
dmlkZW9TZW5kU3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgU3RyaW5nQnVpbGRlciB2
aWRlb1JlY3ZTdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmcgZnBzID0gbnVs
bDsKLSAgICBTdHJpbmcgdGFyZ2V0Qml0cmF0ZSA9IG51bGw7Ci0gICAgU3RyaW5nIGFjdHVhbEJp
dHJhdGUgPSBudWxsOwotCi0gICAgZm9yIChTdGF0c1JlcG9ydCByZXBvcnQgOiByZXBvcnRzKSB7
Ci0gICAgICBpZiAocmVwb3J0LnR5cGUuZXF1YWxzKCJzc3JjIikgJiYgcmVwb3J0LmlkLmNvbnRh
aW5zKCJzc3JjIikgJiYgcmVwb3J0LmlkLmNvbnRhaW5zKCJzZW5kIikpIHsKLSAgICAgICAgLy8g
U2VuZCB2aWRlbyBzdGF0aXN0aWNzLgotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9y
dE1hcCA9IGdldFJlcG9ydE1hcChyZXBvcnQpOwotICAgICAgICBTdHJpbmcgdHJhY2tJZCA9IHJl
cG9ydE1hcC5nZXQoImdvb2dUcmFja0lkIik7Ci0gICAgICAgIGlmICh0cmFja0lkICE9IG51bGwg
JiYgdHJhY2tJZC5jb250YWlucyhQZWVyQ29ubmVjdGlvbkNsaWVudC5WSURFT19UUkFDS19JRCkp
IHsKLSAgICAgICAgICBmcHMgPSByZXBvcnRNYXAuZ2V0KCJnb29nRnJhbWVSYXRlU2VudCIpOwot
ICAgICAgICAgIHZpZGVvU2VuZFN0YXQuYXBwZW5kKHJlcG9ydC5pZCkuYXBwZW5kKCJcbiIpOwot
ICAgICAgICAgIGZvciAoU3RhdHNSZXBvcnQuVmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVzKSB7
Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLm5hbWUucmVwbGFjZSgiZ29vZyIsICIi
KTsKLSAgICAgICAgICAgIHZpZGVvU2VuZFN0YXQuYXBwZW5kKG5hbWUpLmFwcGVuZCgiPSIpLmFw
cGVuZCh2YWx1ZS52YWx1ZSkuYXBwZW5kKCJcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgfSBlbHNlIGlmIChyZXBvcnQudHlwZS5lcXVhbHMoInNzcmMiKSAmJiByZXBvcnQuaWQu
Y29udGFpbnMoInNzcmMiKQotICAgICAgICAgICYmIHJlcG9ydC5pZC5jb250YWlucygicmVjdiIp
KSB7Ci0gICAgICAgIC8vIFJlY2VpdmUgdmlkZW8gc3RhdGlzdGljcy4KLSAgICAgICAgTWFwPFN0
cmluZywgU3RyaW5nPiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAocmVwb3J0KTsKLSAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhpcyBzdGF0IGlzIGZvciB2aWRlbyB0cmFjay4KLSAgICAgICAgU3RyaW5n
IGZyYW1lV2lkdGggPSByZXBvcnRNYXAuZ2V0KCJnb29nRnJhbWVXaWR0aFJlY2VpdmVkIik7Ci0g
ICAgICAgIGlmIChmcmFtZVdpZHRoICE9IG51bGwpIHsKLSAgICAgICAgICB2aWRlb1JlY3ZTdGF0
LmFwcGVuZChyZXBvcnQuaWQpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICBmb3IgKFN0YXRzUmVw
b3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZhbHVlcykgewotICAgICAgICAgICAgU3RyaW5nIG5h
bWUgPSB2YWx1ZS5uYW1lLnJlcGxhY2UoImdvb2ciLCAiIik7Ci0gICAgICAgICAgICB2aWRlb1Jl
Y3ZTdGF0LmFwcGVuZChuYW1lKS5hcHBlbmQoIj0iKS5hcHBlbmQodmFsdWUudmFsdWUpLmFwcGVu
ZCgiXG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocmVwb3J0
LmlkLmVxdWFscygiYndlZm9ydmlkZW8iKSkgewotICAgICAgICAvLyBCV0Ugc3RhdGlzdGljcy4K
LSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAocmVw
b3J0KTsKLSAgICAgICAgdGFyZ2V0Qml0cmF0ZSA9IHJlcG9ydE1hcC5nZXQoImdvb2dUYXJnZXRF
bmNCaXRyYXRlIik7Ci0gICAgICAgIGFjdHVhbEJpdHJhdGUgPSByZXBvcnRNYXAuZ2V0KCJnb29n
QWN0dWFsRW5jQml0cmF0ZSIpOwotCi0gICAgICAgIGJ3ZVN0YXQuYXBwZW5kKHJlcG9ydC5pZCku
YXBwZW5kKCJcbiIpOwotICAgICAgICBmb3IgKFN0YXRzUmVwb3J0LlZhbHVlIHZhbHVlIDogcmVw
b3J0LnZhbHVlcykgewotICAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUubmFtZS5yZXBsYWNl
KCJnb29nIiwgIiIpLnJlcGxhY2UoIkF2YWlsYWJsZSIsICIiKTsKLSAgICAgICAgICBid2VTdGF0
LmFwcGVuZChuYW1lKS5hcHBlbmQoIj0iKS5hcHBlbmQodmFsdWUudmFsdWUpLmFwcGVuZCgiXG4i
KTsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChyZXBvcnQudHlwZS5lcXVhbHMoImdvb2dD
YW5kaWRhdGVQYWlyIikpIHsKLSAgICAgICAgLy8gQ29ubmVjdGlvbiBzdGF0aXN0aWNzLgotICAg
ICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9ydE1hcCA9IGdldFJlcG9ydE1hcChyZXBvcnQp
OwotICAgICAgICBTdHJpbmcgYWN0aXZlQ29ubmVjdGlvbiA9IHJlcG9ydE1hcC5nZXQoImdvb2dB
Y3RpdmVDb25uZWN0aW9uIik7Ci0gICAgICAgIGlmIChhY3RpdmVDb25uZWN0aW9uICE9IG51bGwg
JiYgYWN0aXZlQ29ubmVjdGlvbi5lcXVhbHMoInRydWUiKSkgewotICAgICAgICAgIGNvbm5lY3Rp
b25TdGF0LmFwcGVuZChyZXBvcnQuaWQpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICBmb3IgKFN0
YXRzUmVwb3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZhbHVlcykgewotICAgICAgICAgICAgU3Ry
aW5nIG5hbWUgPSB2YWx1ZS5uYW1lLnJlcGxhY2UoImdvb2ciLCAiIik7Ci0gICAgICAgICAgICBj
b25uZWN0aW9uU3RhdC5hcHBlbmQobmFtZSkuYXBwZW5kKCI9IikuYXBwZW5kKHZhbHVlLnZhbHVl
KS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
ICAgIGh1ZFZpZXdCd2Uuc2V0VGV4dChid2VTdGF0LnRvU3RyaW5nKCkpOwotICAgIGh1ZFZpZXdD
b25uZWN0aW9uLnNldFRleHQoY29ubmVjdGlvblN0YXQudG9TdHJpbmcoKSk7Ci0gICAgaHVkVmll
d1ZpZGVvU2VuZC5zZXRUZXh0KHZpZGVvU2VuZFN0YXQudG9TdHJpbmcoKSk7Ci0gICAgaHVkVmll
d1ZpZGVvUmVjdi5zZXRUZXh0KHZpZGVvUmVjdlN0YXQudG9TdHJpbmcoKSk7Ci0KLSAgICBpZiAo
dmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgaWYgKGZwcyAhPSBudWxsKSB7Ci0gICAgICAgIGVu
Y29kZXJTdGF0LmFwcGVuZCgiRnBzOiAgIikuYXBwZW5kKGZwcykuYXBwZW5kKCJcbiIpOwotICAg
ICAgfQotICAgICAgaWYgKHRhcmdldEJpdHJhdGUgIT0gbnVsbCkgewotICAgICAgICBlbmNvZGVy
U3RhdC5hcHBlbmQoIlRhcmdldCBCUjogIikuYXBwZW5kKHRhcmdldEJpdHJhdGUpLmFwcGVuZCgi
XG4iKTsKLSAgICAgIH0KLSAgICAgIGlmIChhY3R1YWxCaXRyYXRlICE9IG51bGwpIHsKLSAgICAg
ICAgZW5jb2RlclN0YXQuYXBwZW5kKCJBY3R1YWwgQlI6ICIpLmFwcGVuZChhY3R1YWxCaXRyYXRl
KS5hcHBlbmQoIlxuIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNwdU1vbml0b3IgIT0g
bnVsbCkgewotICAgICAgZW5jb2RlclN0YXQuYXBwZW5kKCJDUFUlOiAiKQotICAgICAgICAgIC5h
cHBlbmQoY3B1TW9uaXRvci5nZXRDcHVVc2FnZUN1cnJlbnQoKSkKLSAgICAgICAgICAuYXBwZW5k
KCIvIikKLSAgICAgICAgICAuYXBwZW5kKGNwdU1vbml0b3IuZ2V0Q3B1VXNhZ2VBdmVyYWdlKCkp
Ci0gICAgICAgICAgLmFwcGVuZCgiLiBGcmVxOiAiKQotICAgICAgICAgIC5hcHBlbmQoY3B1TW9u
aXRvci5nZXRGcmVxdWVuY3lTY2FsZUF2ZXJhZ2UoKSk7Ci0gICAgfQotICAgIGVuY29kZXJTdGF0
Vmlldy5zZXRUZXh0KGVuY29kZXJTdGF0LnRvU3RyaW5nKCkpOwotICB9Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUGVlckNvbm5lY3Rpb25DbGllbnQuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUGVlckNvbm5lY3Rpb25DbGllbnQu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1Bl
ZXJDb25uZWN0aW9uQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTY4ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBv
cnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVu
dDsKLWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJv
aWQudXRpbC5Mb2c7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNl
cHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5F
bnVtU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5M
aXN0OwotaW1wb3J0IGphdmEudXRpbC5UaW1lcjsKLWltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNr
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5TY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGls
LnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci1pbXBvcnQg
b3JnLmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0ZXJzOwotaW1w
b3J0IG9yZy53ZWJydGMuQXVkaW9Tb3VyY2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5BdWRpb1RyYWNr
OwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2Vi
cnRjLkRhdGFDaGFubmVsOwotaW1wb3J0IG9yZy53ZWJydGMuRWdsQmFzZTsKLWltcG9ydCBvcmcu
d2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5NZWRpYUNvbnN0cmFpbnRzOwotaW1wb3J0IG9yZy53ZWJydGMuTWVkaWFTdHJl
YW07Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRj
LlBlZXJDb25uZWN0aW9uLkljZUNvbm5lY3Rpb25TdGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBl
ZXJDb25uZWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcud2VicnRjLlJ0cFBhcmFtZXRlcnM7Ci1p
bXBvcnQgb3JnLndlYnJ0Yy5SdHBTZW5kZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZHBPYnNlcnZl
cjsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcud2Vi
cnRjLlN0YXRzT2JzZXJ2ZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TdGF0c1JlcG9ydDsKLWltcG9y
dCBvcmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRl
cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9Tb3VyY2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5W
aWRlb1RyYWNrOwotaW1wb3J0IG9yZy53ZWJydGMudm9pY2VlbmdpbmUuV2ViUnRjQXVkaW9NYW5h
Z2VyOwotaW1wb3J0IG9yZy53ZWJydGMudm9pY2VlbmdpbmUuV2ViUnRjQXVkaW9VdGlsczsKLQot
LyoqCi0gKiBQZWVyIGNvbm5lY3Rpb24gY2xpZW50IGltcGxlbWVudGF0aW9uLgotICoKLSAqIDxw
PkFsbCBwdWJsaWMgbWV0aG9kcyBhcmUgcm91dGVkIHRvIGxvY2FsIGxvb3BlciB0aHJlYWQuCi0g
KiBBbGwgUGVlckNvbm5lY3Rpb25FdmVudHMgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZyb20gdGhl
IHNhbWUgbG9vcGVyIHRocmVhZC4KLSAqIFRoaXMgY2xhc3MgaXMgYSBzaW5nbGV0b24uCi0gKi8K
LXB1YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlvbkNsaWVudCB7Ci0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nIFZJREVPX1RSQUNLX0lEID0gIkFSREFNU3YwIjsKLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBTdHJpbmcgQVVESU9fVFJBQ0tfSUQgPSAiQVJEQU1TYTAiOwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIFN0cmluZyBWSURFT19UUkFDS19UWVBFID0gInZpZGVvIjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJQQ1JUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZyBWSURFT19DT0RFQ19WUDggPSAiVlA4IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIFZJREVPX0NPREVDX1ZQOSA9ICJWUDkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVklERU9fQ09ERUNfSDI2NCA9ICJIMjY0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIEFVRElPX0NPREVDX09QVVMgPSAib3B1cyI7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZyBBVURJT19DT0RFQ19JU0FDID0gIklTQUMiOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVklERU9fQ09ERUNfUEFSQU1fU1RBUlRfQklUUkFURSA9ICJ4LWdvb2dsZS1z
dGFydC1iaXRyYXRlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0NPREVD
X1BBUkFNX0JJVFJBVEUgPSAibWF4YXZlcmFnZWJpdHJhdGUiOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgQVVESU9fRUNIT19DQU5DRUxMQVRJT05fQ09OU1RSQUlOVCA9ICJnb29nRWNo
b0NhbmNlbGxhdGlvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19BVVRP
X0dBSU5fQ09OVFJPTF9DT05TVFJBSU5UID0gImdvb2dBdXRvR2FpbkNvbnRyb2wiOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fSElHSF9QQVNTX0ZJTFRFUl9DT05TVFJBSU5U
ID0gImdvb2dIaWdocGFzc0ZpbHRlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBB
VURJT19OT0lTRV9TVVBQUkVTU0lPTl9DT05TVFJBSU5UID0gImdvb2dOb2lzZVN1cHByZXNzaW9u
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0xFVkVMX0NPTlRST0xfQ09O
U1RSQUlOVCA9ICJsZXZlbENvbnRyb2wiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
RFRMU19TUlRQX0tFWV9BR1JFRU1FTlRfQ09OU1RSQUlOVCA9ICJEdGxzU3J0cEtleUFncmVlbWVu
dCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRF9WSURFT19XSURUSCA9IDEyODA7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRF9WSURFT19IRUlHSFQgPSA3MjA7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBCUFNfSU5fS0JQUyA9IDEwMDA7Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgUGVlckNvbm5lY3Rpb25DbGllbnQgaW5zdGFuY2UgPSBuZXcgUGVlckNvbm5lY3Rp
b25DbGllbnQoKTsKLSAgcHJpdmF0ZSBmaW5hbCBQQ09ic2VydmVyIHBjT2JzZXJ2ZXIgPSBuZXcg
UENPYnNlcnZlcigpOwotICBwcml2YXRlIGZpbmFsIFNEUE9ic2VydmVyIHNkcE9ic2VydmVyID0g
bmV3IFNEUE9ic2VydmVyKCk7Ci0gIHByaXZhdGUgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2
aWNlIGV4ZWN1dG9yOwotCi0gIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICBwcml2YXRlIFBl
ZXJDb25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5OwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uIHBl
ZXJDb25uZWN0aW9uOwotICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0g
bnVsbDsKLSAgcHJpdmF0ZSBBdWRpb1NvdXJjZSBhdWRpb1NvdXJjZTsKLSAgcHJpdmF0ZSBWaWRl
b1NvdXJjZSB2aWRlb1NvdXJjZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQ7
Ci0gIHByaXZhdGUgYm9vbGVhbiBwcmVmZXJJc2FjOwotICBwcml2YXRlIFN0cmluZyBwcmVmZXJy
ZWRWaWRlb0NvZGVjOwotICBwcml2YXRlIGJvb2xlYW4gdmlkZW9DYXB0dXJlclN0b3BwZWQ7Ci0g
IHByaXZhdGUgYm9vbGVhbiBpc0Vycm9yOwotICBwcml2YXRlIFRpbWVyIHN0YXRzVGltZXI7Ci0g
IHByaXZhdGUgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgbG9jYWxSZW5kZXI7Ci0gIHByaXZhdGUg
TGlzdDxWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4gcmVtb3RlUmVuZGVyczsKLSAgcHJpdmF0ZSBT
aWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnM7Ci0gIHByaXZhdGUgTWVkaWFD
b25zdHJhaW50cyBwY0NvbnN0cmFpbnRzOwotICBwcml2YXRlIGludCB2aWRlb1dpZHRoOwotICBw
cml2YXRlIGludCB2aWRlb0hlaWdodDsKLSAgcHJpdmF0ZSBpbnQgdmlkZW9GcHM7Ci0gIHByaXZh
dGUgTWVkaWFDb25zdHJhaW50cyBhdWRpb0NvbnN0cmFpbnRzOwotICBwcml2YXRlIFBhcmNlbEZp
bGVEZXNjcmlwdG9yIGFlY0R1bXBGaWxlRGVzY3JpcHRvcjsKLSAgcHJpdmF0ZSBNZWRpYUNvbnN0
cmFpbnRzIHNkcE1lZGlhQ29uc3RyYWludHM7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25QYXJh
bWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgLy8gUXVldWVkIHJlbW90ZSBJQ0Ug
Y2FuZGlkYXRlcyBhcmUgY29uc3VtZWQgb25seSBhZnRlciBib3RoIGxvY2FsIGFuZAotICAvLyBy
ZW1vdGUgZGVzY3JpcHRpb25zIGFyZSBzZXQuIFNpbWlsYXJseSBsb2NhbCBJQ0UgY2FuZGlkYXRl
cyBhcmUgc2VudCB0bwotICAvLyByZW1vdGUgcGVlciBhZnRlciBib3RoIGxvY2FsIGFuZCByZW1v
dGUgZGVzY3JpcHRpb24gYXJlIHNldC4KLSAgcHJpdmF0ZSBMaW5rZWRMaXN0PEljZUNhbmRpZGF0
ZT4gcXVldWVkUmVtb3RlQ2FuZGlkYXRlczsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbkV2ZW50
cyBldmVudHM7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0luaXRpYXRvcjsKLSAgcHJpdmF0ZSBTZXNz
aW9uRGVzY3JpcHRpb24gbG9jYWxTZHA7IC8vIGVpdGhlciBvZmZlciBvciBhbnN3ZXIgU0RQCi0g
IHByaXZhdGUgTWVkaWFTdHJlYW0gbWVkaWFTdHJlYW07Ci0gIHByaXZhdGUgVmlkZW9DYXB0dXJl
ciB2aWRlb0NhcHR1cmVyOwotICAvLyBlbmFibGVWaWRlbyBpcyBzZXQgdG8gdHJ1ZSBpZiB2aWRl
byBzaG91bGQgYmUgcmVuZGVyZWQgYW5kIHNlbnQuCi0gIHByaXZhdGUgYm9vbGVhbiByZW5kZXJW
aWRlbzsKLSAgcHJpdmF0ZSBWaWRlb1RyYWNrIGxvY2FsVmlkZW9UcmFjazsKLSAgcHJpdmF0ZSBW
aWRlb1RyYWNrIHJlbW90ZVZpZGVvVHJhY2s7Ci0gIHByaXZhdGUgUnRwU2VuZGVyIGxvY2FsVmlk
ZW9TZW5kZXI7Ci0gIC8vIGVuYWJsZUF1ZGlvIGlzIHNldCB0byB0cnVlIGlmIGF1ZGlvIHNob3Vs
ZCBiZSBzZW50LgotICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlQXVkaW87Ci0gIHByaXZhdGUgQXVk
aW9UcmFjayBsb2NhbEF1ZGlvVHJhY2s7Ci0KLSAgLyoqCi0gICAqIFBlZXIgY29ubmVjdGlvbiBw
YXJhbWV0ZXJzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBQZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMgewotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQ7Ci0g
ICAgcHVibGljIGZpbmFsIGJvb2xlYW4gbG9vcGJhY2s7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xl
YW4gdHJhY2luZzsKLSAgICBwdWJsaWMgZmluYWwgaW50IHZpZGVvV2lkdGg7Ci0gICAgcHVibGlj
IGZpbmFsIGludCB2aWRlb0hlaWdodDsKLSAgICBwdWJsaWMgZmluYWwgaW50IHZpZGVvRnBzOwot
ICAgIHB1YmxpYyBmaW5hbCBpbnQgdmlkZW9NYXhCaXRyYXRlOwotICAgIHB1YmxpYyBmaW5hbCBT
dHJpbmcgdmlkZW9Db2RlYzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2aWRlb0NvZGVjSHdB
Y2NlbGVyYXRpb247Ci0gICAgcHVibGljIGZpbmFsIGludCBhdWRpb1N0YXJ0Qml0cmF0ZTsKLSAg
ICBwdWJsaWMgZmluYWwgU3RyaW5nIGF1ZGlvQ29kZWM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xl
YW4gbm9BdWRpb1Byb2Nlc3Npbmc7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWVjRHVtcDsK
LSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB1c2VPcGVuU0xFUzsKLSAgICBwdWJsaWMgZmluYWwg
Ym9vbGVhbiBkaXNhYmxlQnVpbHRJbkFFQzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBkaXNh
YmxlQnVpbHRJbkFHQzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbk5T
OwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGVuYWJsZUxldmVsQ29udHJvbDsKLQotICAgIHB1
YmxpYyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMoYm9vbGVhbiB2aWRlb0NhbGxFbmFibGVkLCBi
b29sZWFuIGxvb3BiYWNrLCBib29sZWFuIHRyYWNpbmcsCi0gICAgICAgIGludCB2aWRlb1dpZHRo
LCBpbnQgdmlkZW9IZWlnaHQsIGludCB2aWRlb0ZwcywgaW50IHZpZGVvTWF4Qml0cmF0ZSwgU3Ry
aW5nIHZpZGVvQ29kZWMsCi0gICAgICAgIGJvb2xlYW4gdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9u
LCBpbnQgYXVkaW9TdGFydEJpdHJhdGUsIFN0cmluZyBhdWRpb0NvZGVjLAotICAgICAgICBib29s
ZWFuIG5vQXVkaW9Qcm9jZXNzaW5nLCBib29sZWFuIGFlY0R1bXAsIGJvb2xlYW4gdXNlT3BlblNM
RVMsIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5BRUMsCi0gICAgICAgIGJvb2xlYW4gZGlzYWJsZUJ1
aWx0SW5BR0MsIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5OUywgYm9vbGVhbiBlbmFibGVMZXZlbENv
bnRyb2wpIHsKLSAgICAgIHRoaXMudmlkZW9DYWxsRW5hYmxlZCA9IHZpZGVvQ2FsbEVuYWJsZWQ7
Ci0gICAgICB0aGlzLmxvb3BiYWNrID0gbG9vcGJhY2s7Ci0gICAgICB0aGlzLnRyYWNpbmcgPSB0
cmFjaW5nOwotICAgICAgdGhpcy52aWRlb1dpZHRoID0gdmlkZW9XaWR0aDsKLSAgICAgIHRoaXMu
dmlkZW9IZWlnaHQgPSB2aWRlb0hlaWdodDsKLSAgICAgIHRoaXMudmlkZW9GcHMgPSB2aWRlb0Zw
czsKLSAgICAgIHRoaXMudmlkZW9NYXhCaXRyYXRlID0gdmlkZW9NYXhCaXRyYXRlOwotICAgICAg
dGhpcy52aWRlb0NvZGVjID0gdmlkZW9Db2RlYzsKLSAgICAgIHRoaXMudmlkZW9Db2RlY0h3QWNj
ZWxlcmF0aW9uID0gdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uOwotICAgICAgdGhpcy5hdWRpb1N0
YXJ0Qml0cmF0ZSA9IGF1ZGlvU3RhcnRCaXRyYXRlOwotICAgICAgdGhpcy5hdWRpb0NvZGVjID0g
YXVkaW9Db2RlYzsKLSAgICAgIHRoaXMubm9BdWRpb1Byb2Nlc3NpbmcgPSBub0F1ZGlvUHJvY2Vz
c2luZzsKLSAgICAgIHRoaXMuYWVjRHVtcCA9IGFlY0R1bXA7Ci0gICAgICB0aGlzLnVzZU9wZW5T
TEVTID0gdXNlT3BlblNMRVM7Ci0gICAgICB0aGlzLmRpc2FibGVCdWlsdEluQUVDID0gZGlzYWJs
ZUJ1aWx0SW5BRUM7Ci0gICAgICB0aGlzLmRpc2FibGVCdWlsdEluQUdDID0gZGlzYWJsZUJ1aWx0
SW5BR0M7Ci0gICAgICB0aGlzLmRpc2FibGVCdWlsdEluTlMgPSBkaXNhYmxlQnVpbHRJbk5TOwot
ICAgICAgdGhpcy5lbmFibGVMZXZlbENvbnRyb2wgPSBlbmFibGVMZXZlbENvbnRyb2w7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIFBlZXIgY29ubmVjdGlvbiBldmVudHMuCi0gICAqLwotICBw
dWJsaWMgaW50ZXJmYWNlIFBlZXJDb25uZWN0aW9uRXZlbnRzIHsKLSAgICAvKioKLSAgICAgKiBD
YWxsYmFjayBmaXJlZCBvbmNlIGxvY2FsIFNEUCBpcyBjcmVhdGVkIGFuZCBzZXQuCi0gICAgICov
Ci0gICAgdm9pZCBvbkxvY2FsRGVzY3JpcHRpb24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNk
cCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGxvY2FsIEljZSBjYW5k
aWRhdGUgaXMgZ2VuZXJhdGVkLgotICAgICAqLwotICAgIHZvaWQgb25JY2VDYW5kaWRhdGUoZmlu
YWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBm
aXJlZCBvbmNlIGxvY2FsIElDRSBjYW5kaWRhdGVzIGFyZSByZW1vdmVkLgotICAgICAqLwotICAg
IHZvaWQgb25JY2VDYW5kaWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRh
dGVzKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgY29ubmVjdGlvbiBp
cyBlc3RhYmxpc2hlZCAoSWNlQ29ubmVjdGlvblN0YXRlIGlzCi0gICAgICogQ09OTkVDVEVEKS4K
LSAgICAgKi8KLSAgICB2b2lkIG9uSWNlQ29ubmVjdGVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBD
YWxsYmFjayBmaXJlZCBvbmNlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIChJY2VDb25uZWN0aW9uU3Rh
dGUgaXMKLSAgICAgKiBESVNDT05ORUNURUQpLgotICAgICAqLwotICAgIHZvaWQgb25JY2VEaXNj
b25uZWN0ZWQoKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcGVlciBj
b25uZWN0aW9uIGlzIGNsb3NlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uUGVlckNvbm5lY3Rpb25D
bG9zZWQoKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcGVlciBjb25u
ZWN0aW9uIHN0YXRpc3RpY3MgaXMgcmVhZHkuCi0gICAgICovCi0gICAgdm9pZCBvblBlZXJDb25u
ZWN0aW9uU3RhdHNSZWFkeShmaW5hbCBTdGF0c1JlcG9ydFtdIHJlcG9ydHMpOwotCi0gICAgLyoq
Ci0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBwZWVyIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVu
ZWQuCi0gICAgICovCi0gICAgdm9pZCBvblBlZXJDb25uZWN0aW9uRXJyb3IoZmluYWwgU3RyaW5n
IGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25DbGllbnQoKSB7
Ci0gICAgLy8gRXhlY3V0b3IgdGhyZWFkIGlzIHN0YXJ0ZWQgb25jZSBpbiBwcml2YXRlIGN0b3Ig
YW5kIGlzIHVzZWQgZm9yIGFsbAotICAgIC8vIHBlZXIgY29ubmVjdGlvbiBBUEkgY2FsbHMgdG8g
ZW5zdXJlIG5ldyBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeSBpcwotICAgIC8vIGNyZWF0ZWQgb24g
dGhlIHNhbWUgdGhyZWFkIGFzIHByZXZpb3VzbHkgZGVzdHJveWVkIGZhY3RvcnkuCi0gICAgZXhl
Y3V0b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkU2NoZWR1bGVkRXhlY3V0b3IoKTsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgUGVlckNvbm5lY3Rpb25DbGllbnQgZ2V0SW5zdGFuY2UoKSB7
Ci0gICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGVlckNvbm5l
Y3Rpb25GYWN0b3J5T3B0aW9ucyhQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25z
KSB7Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNy
ZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeShmaW5hbCBDb250ZXh0IGNvbnRleHQsCi0gICAgICBm
aW5hbCBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLCBm
aW5hbCBQZWVyQ29ubmVjdGlvbkV2ZW50cyBldmVudHMpIHsKLSAgICB0aGlzLnBlZXJDb25uZWN0
aW9uUGFyYW1ldGVycyA9IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgICB0aGlzLmV2ZW50
cyA9IGV2ZW50czsKLSAgICB2aWRlb0NhbGxFbmFibGVkID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0
ZXJzLnZpZGVvQ2FsbEVuYWJsZWQ7Ci0gICAgLy8gUmVzZXQgdmFyaWFibGVzIHRvIGluaXRpYWwg
c3RhdGVzLgotICAgIHRoaXMuY29udGV4dCA9IG51bGw7Ci0gICAgZmFjdG9yeSA9IG51bGw7Ci0g
ICAgcGVlckNvbm5lY3Rpb24gPSBudWxsOwotICAgIHByZWZlcklzYWMgPSBmYWxzZTsKLSAgICB2
aWRlb0NhcHR1cmVyU3RvcHBlZCA9IGZhbHNlOwotICAgIGlzRXJyb3IgPSBmYWxzZTsKLSAgICBx
dWV1ZWRSZW1vdGVDYW5kaWRhdGVzID0gbnVsbDsKLSAgICBsb2NhbFNkcCA9IG51bGw7IC8vIGVp
dGhlciBvZmZlciBvciBhbnN3ZXIgU0RQCi0gICAgbWVkaWFTdHJlYW0gPSBudWxsOwotICAgIHZp
ZGVvQ2FwdHVyZXIgPSBudWxsOwotICAgIHJlbmRlclZpZGVvID0gdHJ1ZTsKLSAgICBsb2NhbFZp
ZGVvVHJhY2sgPSBudWxsOwotICAgIHJlbW90ZVZpZGVvVHJhY2sgPSBudWxsOwotICAgIGxvY2Fs
VmlkZW9TZW5kZXIgPSBudWxsOwotICAgIGVuYWJsZUF1ZGlvID0gdHJ1ZTsKLSAgICBsb2NhbEF1
ZGlvVHJhY2sgPSBudWxsOwotICAgIHN0YXRzVGltZXIgPSBuZXcgVGltZXIoKTsKLQotICAgIGV4
ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUlu
dGVybmFsKGNvbnRleHQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
Y3JlYXRlUGVlckNvbm5lY3Rpb24oZmluYWwgRWdsQmFzZS5Db250ZXh0IHJlbmRlckVHTENvbnRl
eHQsCi0gICAgICBmaW5hbCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBsb2NhbFJlbmRlciwgZmlu
YWwgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVtb3RlUmVuZGVyLAotICAgICAgZmluYWwgVmlk
ZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyLCBmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25h
bGluZ1BhcmFtZXRlcnMpIHsKLSAgICBjcmVhdGVQZWVyQ29ubmVjdGlvbihyZW5kZXJFR0xDb250
ZXh0LCBsb2NhbFJlbmRlciwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChyZW1vdGVSZW5kZXIp
LAotICAgICAgICB2aWRlb0NhcHR1cmVyLCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLSAgfQotICBw
dWJsaWMgdm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbihmaW5hbCBFZ2xCYXNlLkNvbnRleHQgcmVu
ZGVyRUdMQ29udGV4dCwKLSAgICAgIGZpbmFsIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGxvY2Fs
UmVuZGVyLCBmaW5hbCBMaXN0PFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzPiByZW1vdGVSZW5kZXJz
LAotICAgICAgZmluYWwgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyLCBmaW5hbCBTaWduYWxp
bmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnMpIHsKLSAgICBpZiAocGVlckNvbm5lY3Rp
b25QYXJhbWV0ZXJzID09IG51bGwpIHsKLSAgICAgIExvZy5lKFRBRywgIkNyZWF0aW5nIHBlZXIg
Y29ubmVjdGlvbiB3aXRob3V0IGluaXRpYWxpemluZyBmYWN0b3J5LiIpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICB0aGlzLmxvY2FsUmVuZGVyID0gbG9jYWxSZW5kZXI7Ci0gICAgdGhpcy5y
ZW1vdGVSZW5kZXJzID0gcmVtb3RlUmVuZGVyczsKLSAgICB0aGlzLnZpZGVvQ2FwdHVyZXIgPSB2
aWRlb0NhcHR1cmVyOwotICAgIHRoaXMuc2lnbmFsaW5nUGFyYW1ldGVycyA9IHNpZ25hbGluZ1Bh
cmFtZXRlcnM7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICBjcmVhdGVNZWRpYUNvbnN0cmFpbnRzSW50ZXJuYWwoKTsKLSAgICAgICAgICBjcmVhdGVQ
ZWVyQ29ubmVjdGlvbkludGVybmFsKHJlbmRlckVHTENvbnRleHQpOwotICAgICAgICB9IGNhdGNo
IChFeGNlcHRpb24gZSkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gY3JlYXRl
IHBlZXIgY29ubmVjdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICB0aHJvdyBl
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9z
ZSgpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjbG9zZUludGVybmFsKCk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ZpZGVvQ2FsbEVu
YWJsZWQoKSB7Ci0gICAgcmV0dXJuIHZpZGVvQ2FsbEVuYWJsZWQ7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJuYWwoQ29udGV4dCBjb250ZXh0
KSB7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVJbnRlcm5hbFRyYWNlcigp
OwotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudHJhY2luZykgewotICAgICAgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5LnN0YXJ0SW50ZXJuYWxUcmFjaW5nQ2FwdHVyZSgKLSAgICAgICAg
ICBFbnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBh
dGgoKSArIEZpbGUuc2VwYXJhdG9yCi0gICAgICAgICAgKyAid2VicnRjLXRyYWNlLnR4dCIpOwot
ICAgIH0KLSAgICBMb2cuZChUQUcsCi0gICAgICAgICJDcmVhdGUgcGVlciBjb25uZWN0aW9uIGZh
Y3RvcnkuIFVzZSB2aWRlbzogIiArIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NhbGxF
bmFibGVkKTsKLSAgICBpc0Vycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBJbml0aWFsaXplIGZpZWxk
IHRyaWFscy4KLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUZpZWxkVHJpYWxz
KCIiKTsKLQotICAgIC8vIENoZWNrIHByZWZlcnJlZCB2aWRlbyBjb2RlYy4KLSAgICBwcmVmZXJy
ZWRWaWRlb0NvZGVjID0gVklERU9fQ09ERUNfVlA4OwotICAgIGlmICh2aWRlb0NhbGxFbmFibGVk
ICYmIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NvZGVjICE9IG51bGwpIHsKLSAgICAg
IGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9Db2RlYy5lcXVhbHMoVklERU9fQ09E
RUNfVlA5KSkgewotICAgICAgICBwcmVmZXJyZWRWaWRlb0NvZGVjID0gVklERU9fQ09ERUNfVlA5
OwotICAgICAgfSBlbHNlIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9Db2RlYy5l
cXVhbHMoVklERU9fQ09ERUNfSDI2NCkpIHsKLSAgICAgICAgcHJlZmVycmVkVmlkZW9Db2RlYyA9
IFZJREVPX0NPREVDX0gyNjQ7Ci0gICAgICB9Ci0gICAgfQotICAgIExvZy5kKFRBRywgIlBlcmVm
ZXJyZWQgdmlkZW8gY29kZWM6ICIgKyBwcmVmZXJyZWRWaWRlb0NvZGVjKTsKLQotICAgIC8vIENo
ZWNrIGlmIElTQUMgaXMgdXNlZCBieSBkZWZhdWx0LgotICAgIHByZWZlcklzYWMgPSBwZWVyQ29u
bmVjdGlvblBhcmFtZXRlcnMuYXVkaW9Db2RlYyAhPSBudWxsCi0gICAgICAgICYmIHBlZXJDb25u
ZWN0aW9uUGFyYW1ldGVycy5hdWRpb0NvZGVjLmVxdWFscyhBVURJT19DT0RFQ19JU0FDKTsKLQot
ICAgIC8vIEVuYWJsZS9kaXNhYmxlIE9wZW5TTCBFUyBwbGF5YmFjay4KLSAgICBpZiAoIXBlZXJD
b25uZWN0aW9uUGFyYW1ldGVycy51c2VPcGVuU0xFUykgewotICAgICAgTG9nLmQoVEFHLCAiRGlz
YWJsZSBPcGVuU0wgRVMgYXVkaW8gZXZlbiBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAg
IFdlYlJ0Y0F1ZGlvTWFuYWdlci5zZXRCbGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlKHRy
dWUgLyogZW5hYmxlICovKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAiQWxsb3cg
T3BlblNMIEVTIGF1ZGlvIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVk
aW9NYW5hZ2VyLnNldEJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UoZmFsc2UpOwotICAg
IH0KLQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuZGlzYWJsZUJ1aWx0SW5BRUMp
IHsKLSAgICAgIExvZy5kKFRBRywgIkRpc2FibGUgYnVpbHQtaW4gQUVDIGV2ZW4gaWYgZGV2aWNl
IHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQWNv
dXN0aWNFY2hvQ2FuY2VsZXIodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywg
IkVuYWJsZSBidWlsdC1pbiBBRUMgaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJS
dGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoZmFsc2UpOwot
ICAgIH0KLQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuZGlzYWJsZUJ1aWx0SW5B
R0MpIHsKLSAgICAgIExvZy5kKFRBRywgIkRpc2FibGUgYnVpbHQtaW4gQUdDIGV2ZW4gaWYgZGV2
aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2Vk
QXV0b21hdGljR2FpbkNvbnRyb2wodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRB
RywgIkVuYWJsZSBidWlsdC1pbiBBR0MgaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBX
ZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woZmFsc2Up
OwotICAgIH0KLQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuZGlzYWJsZUJ1aWx0
SW5OUykgewotICAgICAgTG9nLmQoVEFHLCAiRGlzYWJsZSBidWlsdC1pbiBOUyBldmVuIGlmIGRl
dmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNl
ZE5vaXNlU3VwcHJlc3Nvcih0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAi
RW5hYmxlIGJ1aWx0LWluIE5TIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRj
QXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvcihmYWxzZSk7Ci0gICAgfQot
Ci0gICAgLy8gQ3JlYXRlIHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5LgotICAgIGlmICghUGVlckNv
bm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVBbmRyb2lkR2xvYmFscygKLSAgICAgICAgICAgIGNv
bnRleHQsIHRydWUsIHRydWUsIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NvZGVjSHdB
Y2NlbGVyYXRpb24pKSB7Ci0gICAgICBldmVudHMub25QZWVyQ29ubmVjdGlvbkVycm9yKCJGYWls
ZWQgdG8gaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzIik7Ci0gICAgfQotICAgIGlmIChvcHRpb25z
ICE9IG51bGwpIHsKLSAgICAgIExvZy5kKFRBRywgIkZhY3RvcnkgbmV0d29ya0lnbm9yZU1hc2sg
b3B0aW9uOiAiICsgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayk7Ci0gICAgfQotICAgIHRoaXMu
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgZmFjdG9yeSA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rv
cnkob3B0aW9ucyk7Ci0gICAgTG9nLmQoVEFHLCAiUGVlciBjb25uZWN0aW9uIGZhY3RvcnkgY3Jl
YXRlZC4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVNZWRpYUNvbnN0cmFpbnRzSW50
ZXJuYWwoKSB7Ci0gICAgLy8gQ3JlYXRlIHBlZXIgY29ubmVjdGlvbiBjb25zdHJhaW50cy4KLSAg
ICBwY0NvbnN0cmFpbnRzID0gbmV3IE1lZGlhQ29uc3RyYWludHMoKTsKLSAgICAvLyBFbmFibGUg
RFRMUyBmb3Igbm9ybWFsIGNhbGxzIGFuZCBkaXNhYmxlIGZvciBsb29wYmFjayBjYWxscy4KLSAg
ICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICBwY0NvbnN0
cmFpbnRzLm9wdGlvbmFsLmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlW
YWx1ZVBhaXIoRFRMU19TUlRQX0tFWV9BR1JFRU1FTlRfQ09OU1RSQUlOVCwgImZhbHNlIikpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBwY0NvbnN0cmFpbnRzLm9wdGlvbmFsLmFkZCgKLSAgICAgICAg
ICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoRFRMU19TUlRQX0tFWV9BR1JFRU1F
TlRfQ09OU1RSQUlOVCwgInRydWUiKSk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgdGhlcmUg
aXMgYSBjYW1lcmEgb24gZGV2aWNlIGFuZCBkaXNhYmxlIHZpZGVvIGNhbGwgaWYgbm90LgotICAg
IGlmICh2aWRlb0NhcHR1cmVyID09IG51bGwpIHsKLSAgICAgIExvZy53KFRBRywgIk5vIGNhbWVy
YSBvbiBkZXZpY2UuIFN3aXRjaCB0byBhdWRpbyBvbmx5IGNhbGwuIik7Ci0gICAgICB2aWRlb0Nh
bGxFbmFibGVkID0gZmFsc2U7Ci0gICAgfQotICAgIC8vIENyZWF0ZSB2aWRlbyBjb25zdHJhaW50
cyBpZiB2aWRlbyBjYWxsIGlzIGVuYWJsZWQuCi0gICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQpIHsK
LSAgICAgIHZpZGVvV2lkdGggPSBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9XaWR0aDsK
LSAgICAgIHZpZGVvSGVpZ2h0ID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvSGVpZ2h0
OwotICAgICAgdmlkZW9GcHMgPSBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9GcHM7Ci0K
LSAgICAgIC8vIElmIHZpZGVvIHJlc29sdXRpb24gaXMgbm90IHNwZWNpZmllZCwgZGVmYXVsdCB0
byBIRC4KLSAgICAgIGlmICh2aWRlb1dpZHRoID09IDAgfHwgdmlkZW9IZWlnaHQgPT0gMCkgewot
ICAgICAgICB2aWRlb1dpZHRoID0gSERfVklERU9fV0lEVEg7Ci0gICAgICAgIHZpZGVvSGVpZ2h0
ID0gSERfVklERU9fSEVJR0hUOwotICAgICAgfQotCi0gICAgICAvLyBJZiBmcHMgaXMgbm90IHNw
ZWNpZmllZCwgZGVmYXVsdCB0byAzMC4KLSAgICAgIGlmICh2aWRlb0ZwcyA9PSAwKSB7Ci0gICAg
ICAgIHZpZGVvRnBzID0gMzA7Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FwdHVy
aW5nIGZvcm1hdDogIiArIHZpZGVvV2lkdGggKyAieCIgKyB2aWRlb0hlaWdodCArICJAIiArIHZp
ZGVvRnBzKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYXVkaW8gY29uc3RyYWludHMuCi0gICAg
YXVkaW9Db25zdHJhaW50cyA9IG5ldyBNZWRpYUNvbnN0cmFpbnRzKCk7Ci0gICAgLy8gYWRkZWQg
Zm9yIGF1ZGlvIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cwotICAgIGlmIChwZWVyQ29ubmVjdGlv
blBhcmFtZXRlcnMubm9BdWRpb1Byb2Nlc3NpbmcpIHsKLSAgICAgIExvZy5kKFRBRywgIkRpc2Fi
bGluZyBhdWRpbyBwcm9jZXNzaW5nIik7Ci0gICAgICBhdWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9y
eS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKEFVRElP
X0VDSE9fQ0FOQ0VMTEFUSU9OX0NPTlNUUkFJTlQsICJmYWxzZSIpKTsKLSAgICAgIGF1ZGlvQ29u
c3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5L
ZXlWYWx1ZVBhaXIoQVVESU9fQVVUT19HQUlOX0NPTlRST0xfQ09OU1RSQUlOVCwgImZhbHNlIikp
OwotICAgICAgYXVkaW9Db25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBN
ZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihBVURJT19ISUdIX1BBU1NfRklMVEVSX0NPTlNU
UkFJTlQsICJmYWxzZSIpKTsKLSAgICAgIGF1ZGlvQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZCgK
LSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoQVVESU9fTk9JU0Vf
U1VQUFJFU1NJT05fQ09OU1RSQUlOVCwgImZhbHNlIikpOwotICAgIH0KLSAgICBpZiAocGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzLmVuYWJsZUxldmVsQ29udHJvbCkgewotICAgICAgTG9nLmQoVEFH
LCAiRW5hYmxpbmcgbGV2ZWwgY29udHJvbC4iKTsKLSAgICAgIGF1ZGlvQ29uc3RyYWludHMubWFu
ZGF0b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIo
QVVESU9fTEVWRUxfQ09OVFJPTF9DT05TVFJBSU5ULCAidHJ1ZSIpKTsKLSAgICB9Ci0gICAgLy8g
Q3JlYXRlIFNEUCBjb25zdHJhaW50cy4KLSAgICBzZHBNZWRpYUNvbnN0cmFpbnRzID0gbmV3IE1l
ZGlhQ29uc3RyYWludHMoKTsKLSAgICBzZHBNZWRpYUNvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQo
Ci0gICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcigiT2ZmZXJUb1JlY2Vp
dmVBdWRpbyIsICJ0cnVlIikpOwotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkIHx8IHBlZXJDb25u
ZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgc2RwTWVkaWFDb25zdHJhaW50cy5t
YW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFp
cigiT2ZmZXJUb1JlY2VpdmVWaWRlbyIsICJ0cnVlIikpOwotICAgIH0gZWxzZSB7Ci0gICAgICBz
ZHBNZWRpYUNvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29u
c3RyYWludHMuS2V5VmFsdWVQYWlyKCJPZmZlclRvUmVjZWl2ZVZpZGVvIiwgImZhbHNlIikpOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbkludGVybmFs
KEVnbEJhc2UuQ29udGV4dCByZW5kZXJFR0xDb250ZXh0KSB7Ci0gICAgaWYgKGZhY3RvcnkgPT0g
bnVsbCB8fCBpc0Vycm9yKSB7Ci0gICAgICBMb2cuZShUQUcsICJQZWVyY29ubmVjdGlvbiBmYWN0
b3J5IGlzIG5vdCBjcmVhdGVkIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIExvZy5kKFRB
RywgIkNyZWF0ZSBwZWVyIGNvbm5lY3Rpb24uIik7Ci0KLSAgICBMb2cuZChUQUcsICJQQ0NvbnN0
cmFpbnRzOiAiICsgcGNDb25zdHJhaW50cy50b1N0cmluZygpKTsKLSAgICBxdWV1ZWRSZW1vdGVD
YW5kaWRhdGVzID0gbmV3IExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPigpOwotCi0gICAgaWYgKHZp
ZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIExvZy5kKFRBRywgIkVHTENvbnRleHQ6ICIgKyByZW5k
ZXJFR0xDb250ZXh0KTsKLSAgICAgIGZhY3Rvcnkuc2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlv
bnMocmVuZGVyRUdMQ29udGV4dCwgcmVuZGVyRUdMQ29udGV4dCk7Ci0gICAgfQotCi0gICAgUGVl
ckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcgPQotICAgICAgICBuZXcgUGVl
ckNvbm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbihzaWduYWxpbmdQYXJhbWV0ZXJzLmljZVNlcnZl
cnMpOwotICAgIC8vIFRDUCBjYW5kaWRhdGVzIGFyZSBvbmx5IHVzZWZ1bCB3aGVuIGNvbm5lY3Rp
bmcgdG8gYSBzZXJ2ZXIgdGhhdCBzdXBwb3J0cwotICAgIC8vIElDRS1UQ1AuCi0gICAgcnRjQ29u
ZmlnLnRjcENhbmRpZGF0ZVBvbGljeSA9IFBlZXJDb25uZWN0aW9uLlRjcENhbmRpZGF0ZVBvbGlj
eS5ESVNBQkxFRDsKLSAgICBydGNDb25maWcuYnVuZGxlUG9saWN5ID0gUGVlckNvbm5lY3Rpb24u
QnVuZGxlUG9saWN5Lk1BWEJVTkRMRTsKLSAgICBydGNDb25maWcucnRjcE11eFBvbGljeSA9IFBl
ZXJDb25uZWN0aW9uLlJ0Y3BNdXhQb2xpY3kuUkVRVUlSRTsKLSAgICBydGNDb25maWcuY29udGlu
dWFsR2F0aGVyaW5nUG9saWN5ID0gUGVlckNvbm5lY3Rpb24uQ29udGludWFsR2F0aGVyaW5nUG9s
aWN5LkdBVEhFUl9DT05USU5VQUxMWTsKLSAgICAvLyBVc2UgRUNEU0EgZW5jcnlwdGlvbi4KLSAg
ICBydGNDb25maWcua2V5VHlwZSA9IFBlZXJDb25uZWN0aW9uLktleVR5cGUuRUNEU0E7Ci0KLSAg
ICBwZWVyQ29ubmVjdGlvbiA9IGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmln
LCBwY0NvbnN0cmFpbnRzLCBwY09ic2VydmVyKTsKLSAgICBpc0luaXRpYXRvciA9IGZhbHNlOwot
Ci0gICAgLy8gU2V0IGRlZmF1bHQgV2ViUlRDIHRyYWNpbmcgYW5kIElORk8gbGliamluZ2xlIGxv
Z2dpbmcuCi0gICAgLy8gTk9URTogdGhpcyBfbXVzdF8gaGFwcGVuIHdoaWxlIHxmYWN0b3J5fCBp
cyBhbGl2ZSEKLSAgICBMb2dnaW5nLmVuYWJsZVRyYWNpbmcoImxvZ2NhdDoiLCBFbnVtU2V0Lm9m
KExvZ2dpbmcuVHJhY2VMZXZlbC5UUkFDRV9ERUZBVUxUKSk7Ci0gICAgTG9nZ2luZy5lbmFibGVM
b2dUb0RlYnVnT3V0cHV0KExvZ2dpbmcuU2V2ZXJpdHkuTFNfSU5GTyk7Ci0KLSAgICBtZWRpYVN0
cmVhbSA9IGZhY3RvcnkuY3JlYXRlTG9jYWxNZWRpYVN0cmVhbSgiQVJEQU1TIik7Ci0gICAgaWYg
KHZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrKGNyZWF0ZVZp
ZGVvVHJhY2sodmlkZW9DYXB0dXJlcikpOwotICAgIH0KLQotICAgIG1lZGlhU3RyZWFtLmFkZFRy
YWNrKGNyZWF0ZUF1ZGlvVHJhY2soKSk7Ci0gICAgcGVlckNvbm5lY3Rpb24uYWRkU3RyZWFtKG1l
ZGlhU3RyZWFtKTsKLSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgZmluZFZpZGVv
U2VuZGVyKCk7Ci0gICAgfQotCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hZWNE
dW1wKSB7Ci0gICAgICB0cnkgewotICAgICAgICBhZWNEdW1wRmlsZURlc2NyaXB0b3IgPQotICAg
ICAgICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3Iub3BlbihuZXcgRmlsZShFbnZpcm9ubWVudC5n
ZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKS5nZXRQYXRoKCkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICsgRmlsZS5zZXBhcmF0b3IgKyAiRG93bmxvYWQvYXVk
aW8uYWVjZHVtcCIpLAotICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVf
UkVBRF9XUklURSB8IFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfQ1JFQVRFCi0gICAgICAgICAg
ICAgICAgICAgIHwgUGFyY2VsRmlsZURlc2NyaXB0b3IuTU9ERV9UUlVOQ0FURSk7Ci0gICAgICAg
IGZhY3Rvcnkuc3RhcnRBZWNEdW1wKGFlY0R1bXBGaWxlRGVzY3JpcHRvci5nZXRGZCgpLCAtMSk7
Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkNh
biBub3Qgb3BlbiBhZWNkdW1wIGZpbGUiLCBlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBMb2cu
ZChUQUcsICJQZWVyIGNvbm5lY3Rpb24gY3JlYXRlZC4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCBjbG9zZUludGVybmFsKCkgewotICAgIGlmIChmYWN0b3J5ICE9IG51bGwgJiYgcGVlckNvbm5l
Y3Rpb25QYXJhbWV0ZXJzLmFlY0R1bXApIHsKLSAgICAgIGZhY3Rvcnkuc3RvcEFlY0R1bXAoKTsK
LSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiQ2xvc2luZyBwZWVyIGNvbm5lY3Rpb24uIik7Ci0gICAg
c3RhdHNUaW1lci5jYW5jZWwoKTsKLSAgICBpZiAocGVlckNvbm5lY3Rpb24gIT0gbnVsbCkgewot
ICAgICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpOwotICAgICAgcGVlckNvbm5lY3Rpb24gPSBu
dWxsOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDbG9zaW5nIGF1ZGlvIHNvdXJjZS4iKTsKLSAg
ICBpZiAoYXVkaW9Tb3VyY2UgIT0gbnVsbCkgewotICAgICAgYXVkaW9Tb3VyY2UuZGlzcG9zZSgp
OwotICAgICAgYXVkaW9Tb3VyY2UgPSBudWxsOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJTdG9w
cGluZyBjYXB0dXJlLiIpOwotICAgIGlmICh2aWRlb0NhcHR1cmVyICE9IG51bGwpIHsKLSAgICAg
IHRyeSB7Ci0gICAgICAgIHZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICAgIH0gY2F0
Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVF
eGNlcHRpb24oZSk7Ci0gICAgICB9Ci0gICAgICB2aWRlb0NhcHR1cmVyU3RvcHBlZCA9IHRydWU7
Ci0gICAgICB2aWRlb0NhcHR1cmVyLmRpc3Bvc2UoKTsKLSAgICAgIHZpZGVvQ2FwdHVyZXIgPSBu
dWxsOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDbG9zaW5nIHZpZGVvIHNvdXJjZS4iKTsKLSAg
ICBpZiAodmlkZW9Tb3VyY2UgIT0gbnVsbCkgewotICAgICAgdmlkZW9Tb3VyY2UuZGlzcG9zZSgp
OwotICAgICAgdmlkZW9Tb3VyY2UgPSBudWxsOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDbG9z
aW5nIHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5LiIpOwotICAgIGlmIChmYWN0b3J5ICE9IG51bGwp
IHsKLSAgICAgIGZhY3RvcnkuZGlzcG9zZSgpOwotICAgICAgZmFjdG9yeSA9IG51bGw7Ci0gICAg
fQotICAgIG9wdGlvbnMgPSBudWxsOwotICAgIExvZy5kKFRBRywgIkNsb3NpbmcgcGVlciBjb25u
ZWN0aW9uIGRvbmUuIik7Ci0gICAgZXZlbnRzLm9uUGVlckNvbm5lY3Rpb25DbG9zZWQoKTsKLSAg
ICBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkuc3RvcEludGVybmFsVHJhY2luZ0NhcHR1cmUoKTsKLSAg
ICBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkuc2h1dGRvd25JbnRlcm5hbFRyYWNlcigpOwotICB9Ci0K
LSAgcHVibGljIGJvb2xlYW4gaXNIRFZpZGVvKCkgewotICAgIGlmICghdmlkZW9DYWxsRW5hYmxl
ZCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB2aWRlb1dpZHRo
ICogdmlkZW9IZWlnaHQgPj0gMTI4MCAqIDcyMDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBnZXRT
dGF0cygpIHsKLSAgICBpZiAocGVlckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGJvb2xlYW4gc3VjY2VzcyA9IHBlZXJDb25uZWN0aW9u
LmdldFN0YXRzKG5ldyBTdGF0c09ic2VydmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBvbkNvbXBsZXRlKGZpbmFsIFN0YXRzUmVwb3J0W10gcmVwb3J0cykgewotICAg
ICAgICBldmVudHMub25QZWVyQ29ubmVjdGlvblN0YXRzUmVhZHkocmVwb3J0cyk7Ci0gICAgICB9
Ci0gICAgfSwgbnVsbCk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICBMb2cuZShUQUcsICJn
ZXRTdGF0cygpIHJldHVybnMgZmFsc2UhIik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQg
ZW5hYmxlU3RhdHNFdmVudHMoYm9vbGVhbiBlbmFibGUsIGludCBwZXJpb2RNcykgewotICAgIGlm
IChlbmFibGUpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHN0YXRzVGltZXIuc2NoZWR1bGUobmV3
IFRpbWVyVGFzaygpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgICAgICAgICBnZXRTdGF0cygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sIDAsIHBlcmlvZE1zKTsKLSAgICAgIH0g
Y2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkNhbiBub3Qgc2NoZWR1
bGUgc3RhdGlzdGljcyB0aW1lciIsIGUpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBz
dGF0c1RpbWVyLmNhbmNlbCgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEF1ZGlv
RW5hYmxlZChmaW5hbCBib29sZWFuIGVuYWJsZSkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIGVuYWJsZUF1ZGlvID0gZW5hYmxlOwotICAgICAgICBpZiAobG9jYWxBdWRpb1Ry
YWNrICE9IG51bGwpIHsKLSAgICAgICAgICBsb2NhbEF1ZGlvVHJhY2suc2V0RW5hYmxlZChlbmFi
bGVBdWRpbyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHNldFZpZGVvRW5hYmxlZChmaW5hbCBib29sZWFuIGVuYWJsZSkgewotICAgIGV4ZWN1dG9y
LmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgIHJlbmRlclZpZGVvID0gZW5hYmxlOwotICAgICAgICBpZiAo
bG9jYWxWaWRlb1RyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICBsb2NhbFZpZGVvVHJhY2suc2V0
RW5hYmxlZChyZW5kZXJWaWRlbyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlbW90ZVZpZGVv
VHJhY2sgIT0gbnVsbCkgewotICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2suc2V0RW5hYmxlZChy
ZW5kZXJWaWRlbyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIGNyZWF0ZU9mZmVyKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGlmIChwZWVyQ29ubmVjdGlvbiAhPSBudWxsICYmICFpc0Vycm9yKSB7Ci0gICAgICAgICAgTG9n
LmQoVEFHLCAiUEMgQ3JlYXRlIE9GRkVSIik7Ci0gICAgICAgICAgaXNJbml0aWF0b3IgPSB0cnVl
OwotICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHNkcE9ic2VydmVyLCBzZHBN
ZWRpYUNvbnN0cmFpbnRzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgY3JlYXRlQW5zd2VyKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbiAhPSBudWxsICYmICFpc0Vycm9yKSB7Ci0gICAgICAg
ICAgTG9nLmQoVEFHLCAiUEMgY3JlYXRlIEFOU1dFUiIpOwotICAgICAgICAgIGlzSW5pdGlhdG9y
ID0gZmFsc2U7Ci0gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHNkcE9ic2Vy
dmVyLCBzZHBNZWRpYUNvbnN0cmFpbnRzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgYWRkUmVtb3RlSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRp
ZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAo
cGVlckNvbm5lY3Rpb24gIT0gbnVsbCAmJiAhaXNFcnJvcikgewotICAgICAgICAgIGlmIChxdWV1
ZWRSZW1vdGVDYW5kaWRhdGVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHF1ZXVlZFJlbW90ZUNh
bmRpZGF0ZXMuYWRkKGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHBlZXJDb25uZWN0aW9uLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3Zl
UmVtb3RlSWNlQ2FuZGlkYXRlcyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0g
ICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51
bGwgfHwgaXNFcnJvcikgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAv
LyBEcmFpbiB0aGUgcXVldWVkIHJlbW90ZSBjYW5kaWRhdGVzIGlmIHRoZXJlIGlzIGFueSBzbyB0
aGF0Ci0gICAgICAgIC8vIHRoZXkgYXJlIHByb2Nlc3NlZCBpbiB0aGUgcHJvcGVyIG9yZGVyLgot
ICAgICAgICBkcmFpbkNhbmRpZGF0ZXMoKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3Zl
SWNlQ2FuZGlkYXRlcyhjYW5kaWRhdGVzKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHNldFJlbW90ZURlc2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBz
ZHApIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rp
b24gPT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIFN0cmluZyBzZHBEZXNjcmlwdGlvbiA9IHNkcC5kZXNjcmlwdGlvbjsKLSAgICAgICAg
aWYgKHByZWZlcklzYWMpIHsKLSAgICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHByZWZlckNvZGVj
KHNkcERlc2NyaXB0aW9uLCBBVURJT19DT0RFQ19JU0FDLCB0cnVlKTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgICAgIHNkcERlc2NyaXB0aW9uID0g
cHJlZmVyQ29kZWMoc2RwRGVzY3JpcHRpb24sIHByZWZlcnJlZFZpZGVvQ29kZWMsIGZhbHNlKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmF1ZGlvU3Rh
cnRCaXRyYXRlID4gMCkgewotICAgICAgICAgIHNkcERlc2NyaXB0aW9uID0gc2V0U3RhcnRCaXRy
YXRlKAotICAgICAgICAgICAgICBBVURJT19DT0RFQ19PUFVTLCBmYWxzZSwgc2RwRGVzY3JpcHRp
b24sIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hdWRpb1N0YXJ0Qml0cmF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgICAgTG9nLmQoVEFHLCAiU2V0IHJlbW90ZSBTRFAuIik7Ci0gICAgICAgIFNlc3Np
b25EZXNjcmlwdGlvbiBzZHBSZW1vdGUgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKHNkcC50eXBl
LCBzZHBEZXNjcmlwdGlvbik7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2Ny
aXB0aW9uKHNkcE9ic2VydmVyLCBzZHBSZW1vdGUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgc3RvcFZpZGVvU291cmNlKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGlmICh2aWRlb0NhcHR1cmVyICE9IG51bGwgJiYgIXZpZGVvQ2FwdHVyZXJT
dG9wcGVkKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiU3RvcCB2aWRlbyBzb3VyY2UuIik7Ci0g
ICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsK
LSAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAg
fQotICAgICAgICAgIHZpZGVvQ2FwdHVyZXJTdG9wcGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3RhcnRWaWRlb1NvdXJjZSgpIHsK
LSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAodmlkZW9DYXB0dXJlciAhPSBu
dWxsICYmIHZpZGVvQ2FwdHVyZXJTdG9wcGVkKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiUmVz
dGFydCB2aWRlbyBzb3VyY2UuIik7Ci0gICAgICAgICAgdmlkZW9DYXB0dXJlci5zdGFydENhcHR1
cmUodmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIHZpZGVvRnBzKTsKLSAgICAgICAgICB2aWRlb0Nh
cHR1cmVyU3RvcHBlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBzZXRWaWRlb01heEJpdHJhdGUoZmluYWwgSW50ZWdlciBtYXhCaXRy
YXRlS2JwcykgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29u
bmVjdGlvbiA9PSBudWxsIHx8IGxvY2FsVmlkZW9TZW5kZXIgPT0gbnVsbCB8fCBpc0Vycm9yKSB7
Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRBRywgIlJlcXVl
c3RlZCBtYXggdmlkZW8gYml0cmF0ZTogIiArIG1heEJpdHJhdGVLYnBzKTsKLSAgICAgICAgaWYg
KGxvY2FsVmlkZW9TZW5kZXIgPT0gbnVsbCkgewotICAgICAgICAgIExvZy53KFRBRywgIlNlbmRl
ciBpcyBub3QgcmVhZHkuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgUnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gbG9jYWxWaWRlb1NlbmRlci5nZXRQYXJhbWV0
ZXJzKCk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXJzLmVuY29kaW5ncy5zaXplKCkgPT0gMCkgewot
ICAgICAgICAgIExvZy53KFRBRywgIlJ0cFBhcmFtZXRlcnMgYXJlIG5vdCByZWFkeS4iKTsKLSAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKFJ0cFBhcmFtZXRlcnMu
RW5jb2RpbmcgZW5jb2RpbmcgOiBwYXJhbWV0ZXJzLmVuY29kaW5ncykgewotICAgICAgICAgIC8v
IE51bGwgdmFsdWUgbWVhbnMgbm8gbGltaXQuCi0gICAgICAgICAgZW5jb2RpbmcubWF4Qml0cmF0
ZUJwcyA9IG1heEJpdHJhdGVLYnBzID09IG51bGwgPyBudWxsIDogbWF4Qml0cmF0ZUticHMgKiBC
UFNfSU5fS0JQUzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxvY2FsVmlkZW9TZW5kZXIuc2V0
UGFyYW1ldGVycyhwYXJhbWV0ZXJzKSkgewotICAgICAgICAgIExvZy5lKFRBRywgIlJ0cFNlbmRl
ci5zZXRQYXJhbWV0ZXJzIGZhaWxlZC4iKTsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcs
ICJDb25maWd1cmVkIG1heCB2aWRlbyBiaXRyYXRlIHRvOiAiICsgbWF4Qml0cmF0ZUticHMpOwot
ICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFs
IFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2cuZShUQUcsICJQZWVyY29ubmVjdGlvbiBl
cnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaWYgKCFpc0Vycm9yKSB7Ci0gICAgICAgICAgZXZlbnRzLm9uUGVlckNvbm5lY3Rpb25FcnJv
cihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIGlzRXJyb3IgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9U
cmFjaygpIHsKLSAgICBhdWRpb1NvdXJjZSA9IGZhY3RvcnkuY3JlYXRlQXVkaW9Tb3VyY2UoYXVk
aW9Db25zdHJhaW50cyk7Ci0gICAgbG9jYWxBdWRpb1RyYWNrID0gZmFjdG9yeS5jcmVhdGVBdWRp
b1RyYWNrKEFVRElPX1RSQUNLX0lELCBhdWRpb1NvdXJjZSk7Ci0gICAgbG9jYWxBdWRpb1RyYWNr
LnNldEVuYWJsZWQoZW5hYmxlQXVkaW8pOwotICAgIHJldHVybiBsb2NhbEF1ZGlvVHJhY2s7Ci0g
IH0KLQotICBwcml2YXRlIFZpZGVvVHJhY2sgY3JlYXRlVmlkZW9UcmFjayhWaWRlb0NhcHR1cmVy
IGNhcHR1cmVyKSB7Ci0gICAgdmlkZW9Tb3VyY2UgPSBmYWN0b3J5LmNyZWF0ZVZpZGVvU291cmNl
KGNhcHR1cmVyKTsKLSAgICBjYXB0dXJlci5zdGFydENhcHR1cmUodmlkZW9XaWR0aCwgdmlkZW9I
ZWlnaHQsIHZpZGVvRnBzKTsKLQotICAgIGxvY2FsVmlkZW9UcmFjayA9IGZhY3RvcnkuY3JlYXRl
VmlkZW9UcmFjayhWSURFT19UUkFDS19JRCwgdmlkZW9Tb3VyY2UpOwotICAgIGxvY2FsVmlkZW9U
cmFjay5zZXRFbmFibGVkKHJlbmRlclZpZGVvKTsKLSAgICBsb2NhbFZpZGVvVHJhY2suYWRkUmVu
ZGVyZXIobmV3IFZpZGVvUmVuZGVyZXIobG9jYWxSZW5kZXIpKTsKLSAgICByZXR1cm4gbG9jYWxW
aWRlb1RyYWNrOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbmRWaWRlb1NlbmRlcigpIHsKLSAg
ICBmb3IgKFJ0cFNlbmRlciBzZW5kZXIgOiBwZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCkpIHsK
LSAgICAgIGlmIChzZW5kZXIudHJhY2soKSAhPSBudWxsKSB7Ci0gICAgICAgIFN0cmluZyB0cmFj
a1R5cGUgPSBzZW5kZXIudHJhY2soKS5raW5kKCk7Ci0gICAgICAgIGlmICh0cmFja1R5cGUuZXF1
YWxzKFZJREVPX1RSQUNLX1RZUEUpKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiRm91bmQgdmlk
ZW8gc2VuZGVyLiIpOwotICAgICAgICAgIGxvY2FsVmlkZW9TZW5kZXIgPSBzZW5kZXI7Ci0gICAg
ICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2V0
U3RhcnRCaXRyYXRlKAotICAgICAgU3RyaW5nIGNvZGVjLCBib29sZWFuIGlzVmlkZW9Db2RlYywg
U3RyaW5nIHNkcERlc2NyaXB0aW9uLCBpbnQgYml0cmF0ZUticHMpIHsKLSAgICBTdHJpbmdbXSBs
aW5lcyA9IHNkcERlc2NyaXB0aW9uLnNwbGl0KCJcclxuIik7Ci0gICAgaW50IHJ0cG1hcExpbmVJ
bmRleCA9IC0xOwotICAgIGJvb2xlYW4gc2RwRm9ybWF0VXBkYXRlZCA9IGZhbHNlOwotICAgIFN0
cmluZyBjb2RlY1J0cE1hcCA9IG51bGw7Ci0gICAgLy8gU2VhcmNoIGZvciBjb2RlYyBydHBtYXAg
aW4gZm9ybWF0Ci0gICAgLy8gYT1ydHBtYXA6PHBheWxvYWQgdHlwZT4gPGVuY29kaW5nIG5hbWU+
LzxjbG9jayByYXRlPiBbLzxlbmNvZGluZyBwYXJhbWV0ZXJzPl0KLSAgICBTdHJpbmcgcmVnZXgg
PSAiXmE9cnRwbWFwOihcXGQrKSAiICsgY29kZWMgKyAiKC9cXGQrKStbXHJdPyQiOwotICAgIFBh
dHRlcm4gY29kZWNQYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKHJlZ2V4KTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBNYXRjaGVyIGNvZGVjTWF0
Y2hlciA9IGNvZGVjUGF0dGVybi5tYXRjaGVyKGxpbmVzW2ldKTsKLSAgICAgIGlmIChjb2RlY01h
dGNoZXIubWF0Y2hlcygpKSB7Ci0gICAgICAgIGNvZGVjUnRwTWFwID0gY29kZWNNYXRjaGVyLmdy
b3VwKDEpOwotICAgICAgICBydHBtYXBMaW5lSW5kZXggPSBpOwotICAgICAgICBicmVhazsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgaWYgKGNvZGVjUnRwTWFwID09IG51bGwpIHsKLSAgICAgIExvZy53
KFRBRywgIk5vIHJ0cG1hcCBmb3IgIiArIGNvZGVjICsgIiBjb2RlYyIpOwotICAgICAgcmV0dXJu
IHNkcERlc2NyaXB0aW9uOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJGb3VuZCAiICsgY29kZWMg
KyAiIHJ0cG1hcCAiICsgY29kZWNSdHBNYXAgKyAiIGF0ICIgKyBsaW5lc1tydHBtYXBMaW5lSW5k
ZXhdKTsKLQotICAgIC8vIENoZWNrIGlmIGE9Zm10cCBzdHJpbmcgYWxyZWFkeSBleGlzdCBpbiBy
ZW1vdGUgU0RQIGZvciB0aGlzIGNvZGVjIGFuZAotICAgIC8vIHVwZGF0ZSBpdCB3aXRoIG5ldyBi
aXRyYXRlIHBhcmFtZXRlci4KLSAgICByZWdleCA9ICJeYT1mbXRwOiIgKyBjb2RlY1J0cE1hcCAr
ICIgXFx3Kz1cXGQrLipbXHJdPyQiOwotICAgIGNvZGVjUGF0dGVybiA9IFBhdHRlcm4uY29tcGls
ZShyZWdleCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewot
ICAgICAgTWF0Y2hlciBjb2RlY01hdGNoZXIgPSBjb2RlY1BhdHRlcm4ubWF0Y2hlcihsaW5lc1tp
XSk7Ci0gICAgICBpZiAoY29kZWNNYXRjaGVyLm1hdGNoZXMoKSkgewotICAgICAgICBMb2cuZChU
QUcsICJGb3VuZCAiICsgY29kZWMgKyAiICIgKyBsaW5lc1tpXSk7Ci0gICAgICAgIGlmIChpc1Zp
ZGVvQ29kZWMpIHsKLSAgICAgICAgICBsaW5lc1tpXSArPSAiOyAiICsgVklERU9fQ09ERUNfUEFS
QU1fU1RBUlRfQklUUkFURSArICI9IiArIGJpdHJhdGVLYnBzOwotICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgIGxpbmVzW2ldICs9ICI7ICIgKyBBVURJT19DT0RFQ19QQVJBTV9CSVRSQVRFICsg
Ij0iICsgKGJpdHJhdGVLYnBzICogMTAwMCk7Ci0gICAgICAgIH0KLSAgICAgICAgTG9nLmQoVEFH
LCAiVXBkYXRlIHJlbW90ZSBTRFAgbGluZTogIiArIGxpbmVzW2ldKTsKLSAgICAgICAgc2RwRm9y
bWF0VXBkYXRlZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAg
IFN0cmluZ0J1aWxkZXIgbmV3U2RwRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVpbGRlcigpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIG5ld1Nk
cERlc2NyaXB0aW9uLmFwcGVuZChsaW5lc1tpXSkuYXBwZW5kKCJcclxuIik7Ci0gICAgICAvLyBB
cHBlbmQgbmV3IGE9Zm10cCBsaW5lIGlmIG5vIHN1Y2ggbGluZSBleGlzdCBmb3IgYSBjb2RlYy4K
LSAgICAgIGlmICghc2RwRm9ybWF0VXBkYXRlZCAmJiBpID09IHJ0cG1hcExpbmVJbmRleCkgewot
ICAgICAgICBTdHJpbmcgYml0cmF0ZVNldDsKLSAgICAgICAgaWYgKGlzVmlkZW9Db2RlYykgewot
ICAgICAgICAgIGJpdHJhdGVTZXQgPQotICAgICAgICAgICAgICAiYT1mbXRwOiIgKyBjb2RlY1J0
cE1hcCArICIgIiArIFZJREVPX0NPREVDX1BBUkFNX1NUQVJUX0JJVFJBVEUgKyAiPSIgKyBiaXRy
YXRlS2JwczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBiaXRyYXRlU2V0ID0gImE9Zm10
cDoiICsgY29kZWNSdHBNYXAgKyAiICIgKyBBVURJT19DT0RFQ19QQVJBTV9CSVRSQVRFICsgIj0i
Ci0gICAgICAgICAgICAgICsgKGJpdHJhdGVLYnBzICogMTAwMCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgTG9nLmQoVEFHLCAiQWRkIHJlbW90ZSBTRFAgbGluZTogIiArIGJpdHJhdGVTZXQpOwotICAg
ICAgICBuZXdTZHBEZXNjcmlwdGlvbi5hcHBlbmQoYml0cmF0ZVNldCkuYXBwZW5kKCJcclxuIik7
Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuZXdTZHBEZXNjcmlwdGlvbi50b1N0cmluZygp
OwotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZWZlckNvZGVjKFN0cmluZyBzZHBE
ZXNjcmlwdGlvbiwgU3RyaW5nIGNvZGVjLCBib29sZWFuIGlzQXVkaW8pIHsKLSAgICBTdHJpbmdb
XSBsaW5lcyA9IHNkcERlc2NyaXB0aW9uLnNwbGl0KCJcclxuIik7Ci0gICAgaW50IG1MaW5lSW5k
ZXggPSAtMTsKLSAgICBTdHJpbmcgY29kZWNSdHBNYXAgPSBudWxsOwotICAgIC8vIGE9cnRwbWFw
OjxwYXlsb2FkIHR5cGU+IDxlbmNvZGluZyBuYW1lPi88Y2xvY2sgcmF0ZT4gWy88ZW5jb2Rpbmcg
cGFyYW1ldGVycz5dCi0gICAgU3RyaW5nIHJlZ2V4ID0gIl5hPXJ0cG1hcDooXFxkKykgIiArIGNv
ZGVjICsgIigvXFxkKykrW1xyXT8kIjsKLSAgICBQYXR0ZXJuIGNvZGVjUGF0dGVybiA9IFBhdHRl
cm4uY29tcGlsZShyZWdleCk7Ci0gICAgU3RyaW5nIG1lZGlhRGVzY3JpcHRpb24gPSAibT12aWRl
byAiOwotICAgIGlmIChpc0F1ZGlvKSB7Ci0gICAgICBtZWRpYURlc2NyaXB0aW9uID0gIm09YXVk
aW8gIjsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IChpIDwgbGluZXMubGVuZ3RoKSAmJiAo
bUxpbmVJbmRleCA9PSAtMSB8fCBjb2RlY1J0cE1hcCA9PSBudWxsKTsgaSsrKSB7Ci0gICAgICBp
ZiAobGluZXNbaV0uc3RhcnRzV2l0aChtZWRpYURlc2NyaXB0aW9uKSkgewotICAgICAgICBtTGlu
ZUluZGV4ID0gaTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBNYXRjaGVyIGNv
ZGVjTWF0Y2hlciA9IGNvZGVjUGF0dGVybi5tYXRjaGVyKGxpbmVzW2ldKTsKLSAgICAgIGlmIChj
b2RlY01hdGNoZXIubWF0Y2hlcygpKSB7Ci0gICAgICAgIGNvZGVjUnRwTWFwID0gY29kZWNNYXRj
aGVyLmdyb3VwKDEpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobUxpbmVJbmRleCA9PSAtMSkg
ewotICAgICAgTG9nLncoVEFHLCAiTm8gIiArIG1lZGlhRGVzY3JpcHRpb24gKyAiIGxpbmUsIHNv
IGNhbid0IHByZWZlciAiICsgY29kZWMpOwotICAgICAgcmV0dXJuIHNkcERlc2NyaXB0aW9uOwot
ICAgIH0KLSAgICBpZiAoY29kZWNSdHBNYXAgPT0gbnVsbCkgewotICAgICAgTG9nLncoVEFHLCAi
Tm8gcnRwbWFwIGZvciAiICsgY29kZWMpOwotICAgICAgcmV0dXJuIHNkcERlc2NyaXB0aW9uOwot
ICAgIH0KLSAgICBMb2cuZChUQUcsICJGb3VuZCAiICsgY29kZWMgKyAiIHJ0cG1hcCAiICsgY29k
ZWNSdHBNYXAgKyAiLCBwcmVmZXIgYXQgIiArIGxpbmVzW21MaW5lSW5kZXhdKTsKLSAgICBTdHJp
bmdbXSBvcmlnTUxpbmVQYXJ0cyA9IGxpbmVzW21MaW5lSW5kZXhdLnNwbGl0KCIgIik7Ci0gICAg
aWYgKG9yaWdNTGluZVBhcnRzLmxlbmd0aCA+IDMpIHsKLSAgICAgIFN0cmluZ0J1aWxkZXIgbmV3
TUxpbmUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgaW50IG9yaWdQYXJ0SW5kZXggPSAw
OwotICAgICAgLy8gRm9ybWF0IGlzOiBtPTxtZWRpYT4gPHBvcnQ+IDxwcm90bz4gPGZtdD4gLi4u
Ci0gICAgICBuZXdNTGluZS5hcHBlbmQob3JpZ01MaW5lUGFydHNbb3JpZ1BhcnRJbmRleCsrXSku
YXBwZW5kKCIgIik7Ci0gICAgICBuZXdNTGluZS5hcHBlbmQob3JpZ01MaW5lUGFydHNbb3JpZ1Bh
cnRJbmRleCsrXSkuYXBwZW5kKCIgIik7Ci0gICAgICBuZXdNTGluZS5hcHBlbmQob3JpZ01MaW5l
UGFydHNbb3JpZ1BhcnRJbmRleCsrXSkuYXBwZW5kKCIgIik7Ci0gICAgICBuZXdNTGluZS5hcHBl
bmQoY29kZWNSdHBNYXApOwotICAgICAgZm9yICg7IG9yaWdQYXJ0SW5kZXggPCBvcmlnTUxpbmVQ
YXJ0cy5sZW5ndGg7IG9yaWdQYXJ0SW5kZXgrKykgewotICAgICAgICBpZiAoIW9yaWdNTGluZVBh
cnRzW29yaWdQYXJ0SW5kZXhdLmVxdWFscyhjb2RlY1J0cE1hcCkpIHsKLSAgICAgICAgICBuZXdN
TGluZS5hcHBlbmQoIiAiKS5hcHBlbmQob3JpZ01MaW5lUGFydHNbb3JpZ1BhcnRJbmRleF0pOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBsaW5lc1ttTGluZUluZGV4XSA9IG5ld01MaW5lLnRv
U3RyaW5nKCk7Ci0gICAgICBMb2cuZChUQUcsICJDaGFuZ2UgbWVkaWEgZGVzY3JpcHRpb246ICIg
KyBsaW5lc1ttTGluZUluZGV4XSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5lKFRBRywgIldy
b25nIFNEUCBtZWRpYSBkZXNjcmlwdGlvbiBmb3JtYXQ6ICIgKyBsaW5lc1ttTGluZUluZGV4XSk7
Ci0gICAgfQotICAgIFN0cmluZ0J1aWxkZXIgbmV3U2RwRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5n
QnVpbGRlcigpOwotICAgIGZvciAoU3RyaW5nIGxpbmUgOiBsaW5lcykgewotICAgICAgbmV3U2Rw
RGVzY3JpcHRpb24uYXBwZW5kKGxpbmUpLmFwcGVuZCgiXHJcbiIpOwotICAgIH0KLSAgICByZXR1
cm4gbmV3U2RwRGVzY3JpcHRpb24udG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBk
cmFpbkNhbmRpZGF0ZXMoKSB7Ci0gICAgaWYgKHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMgIT0gbnVs
bCkgewotICAgICAgTG9nLmQoVEFHLCAiQWRkICIgKyBxdWV1ZWRSZW1vdGVDYW5kaWRhdGVzLnNp
emUoKSArICIgcmVtb3RlIGNhbmRpZGF0ZXMiKTsKLSAgICAgIGZvciAoSWNlQ2FuZGlkYXRlIGNh
bmRpZGF0ZSA6IHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMpIHsKLSAgICAgICAgcGVlckNvbm5lY3Rp
b24uYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICB9Ci0gICAgICBxdWV1ZWRSZW1v
dGVDYW5kaWRhdGVzID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3dpdGNo
Q2FtZXJhSW50ZXJuYWwoKSB7Ci0gICAgaWYgKHZpZGVvQ2FwdHVyZXIgaW5zdGFuY2VvZiBDYW1l
cmFWaWRlb0NhcHR1cmVyKSB7Ci0gICAgICBpZiAoIXZpZGVvQ2FsbEVuYWJsZWQgfHwgaXNFcnJv
ciB8fCB2aWRlb0NhcHR1cmVyID09IG51bGwpIHsKLSAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVk
IHRvIHN3aXRjaCBjYW1lcmEuIFZpZGVvOiAiICsgdmlkZW9DYWxsRW5hYmxlZCArICIuIEVycm9y
IDogIiArIGlzRXJyb3IpOwotICAgICAgICByZXR1cm47IC8vIE5vIHZpZGVvIGlzIHNlbnQgb3Ig
b25seSBvbmUgY2FtZXJhIGlzIGF2YWlsYWJsZSBvciBlcnJvciBoYXBwZW5lZC4KLSAgICAgIH0K
LSAgICAgIExvZy5kKFRBRywgIlN3aXRjaCBjYW1lcmEiKTsKLSAgICAgIENhbWVyYVZpZGVvQ2Fw
dHVyZXIgY2FtZXJhVmlkZW9DYXB0dXJlciA9IChDYW1lcmFWaWRlb0NhcHR1cmVyKSB2aWRlb0Nh
cHR1cmVyOwotICAgICAgY2FtZXJhVmlkZW9DYXB0dXJlci5zd2l0Y2hDYW1lcmEobnVsbCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgIldpbGwgbm90IHN3aXRjaCBjYW1lcmEsIHZp
ZGVvIGNhcHV0dXJlciBpcyBub3QgYSBjYW1lcmEiKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBzd2l0Y2hDYW1lcmEoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
c3dpdGNoQ2FtZXJhSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIGNoYW5nZUNhcHR1cmVGb3JtYXQoZmluYWwgaW50IHdpZHRoLCBmaW5hbCBpbnQgaGVp
Z2h0LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgY2hhbmdlQ2FwdHVyZUZvcm1hdEludGVybmFsKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0
ZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hhbmdlQ2FwdHVy
ZUZvcm1hdEludGVybmFsKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewot
ICAgIGlmICghdmlkZW9DYWxsRW5hYmxlZCB8fCBpc0Vycm9yIHx8IHZpZGVvQ2FwdHVyZXIgPT0g
bnVsbCkgewotICAgICAgTG9nLmUoVEFHLAotICAgICAgICAgICJGYWlsZWQgdG8gY2hhbmdlIGNh
cHR1cmUgZm9ybWF0LiBWaWRlbzogIiArIHZpZGVvQ2FsbEVuYWJsZWQgKyAiLiBFcnJvciA6ICIg
KyBpc0Vycm9yKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiY2hhbmdl
Q2FwdHVyZUZvcm1hdDogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRl
KTsKLSAgICB2aWRlb1NvdXJjZS5hZGFwdE91dHB1dEZvcm1hdCh3aWR0aCwgaGVpZ2h0LCBmcmFt
ZXJhdGUpOwotICB9Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gZGV0YWlsOiBvYnNlcnZlIElDRSAm
IHN0cmVhbSBjaGFuZ2VzIGFuZCByZWFjdCBhY2NvcmRpbmdseS4KLSAgcHJpdmF0ZSBjbGFzcyBQ
Q09ic2VydmVyIGltcGxlbWVudHMgUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgewotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBj
YW5kaWRhdGUpIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGV2
ZW50cy5vbkljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAg
ICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1v
dmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICAgIGV4ZWN1dG9yLmV4
ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICAgIGV2ZW50cy5vbkljZUNhbmRpZGF0ZXNSZW1vdmVkKGNh
bmRpZGF0ZXMpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvblNpZ25hbGluZ0NoYW5nZShQZWVyQ29ubmVjdGlvbi5TaWduYWxp
bmdTdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgTG9nLmQoVEFHLCAiU2lnbmFsaW5nU3RhdGU6ICIg
KyBuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25J
Y2VDb25uZWN0aW9uQ2hhbmdlKGZpbmFsIFBlZXJDb25uZWN0aW9uLkljZUNvbm5lY3Rpb25TdGF0
ZSBuZXdTdGF0ZSkgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAg
TG9nLmQoVEFHLCAiSWNlQ29ubmVjdGlvblN0YXRlOiAiICsgbmV3U3RhdGUpOwotICAgICAgICAg
IGlmIChuZXdTdGF0ZSA9PSBJY2VDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAg
ICAgICBldmVudHMub25JY2VDb25uZWN0ZWQoKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG5ld1N0
YXRlID09IEljZUNvbm5lY3Rpb25TdGF0ZS5ESVNDT05ORUNURUQpIHsKLSAgICAgICAgICAgIGV2
ZW50cy5vbkljZURpc2Nvbm5lY3RlZCgpOwotICAgICAgICAgIH0gZWxzZSBpZiAobmV3U3RhdGUg
PT0gSWNlQ29ubmVjdGlvblN0YXRlLkZBSUxFRCkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3Io
IklDRSBjb25uZWN0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlR2F0aGVy
aW5nQ2hhbmdlKFBlZXJDb25uZWN0aW9uLkljZUdhdGhlcmluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0g
ICAgICBMb2cuZChUQUcsICJJY2VHYXRoZXJpbmdTdGF0ZTogIiArIG5ld1N0YXRlKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNvbm5lY3Rpb25SZWNlaXZp
bmdDaGFuZ2UoYm9vbGVhbiByZWNlaXZpbmcpIHsKLSAgICAgIExvZy5kKFRBRywgIkljZUNvbm5l
Y3Rpb25SZWNlaXZpbmcgY2hhbmdlZCB0byAiICsgcmVjZWl2aW5nKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkFkZFN0cmVhbShmaW5hbCBNZWRpYVN0cmVhbSBz
dHJlYW0pIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGlmIChw
ZWVyQ29ubmVjdGlvbiA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN0cmVhbS5hdWRpb1RyYWNrcy5zaXplKCkgPiAx
IHx8IHN0cmVhbS52aWRlb1RyYWNrcy5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICByZXBvcnRF
cnJvcigiV2VpcmQtbG9va2luZyBzdHJlYW06ICIgKyBzdHJlYW0pOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoc3RyZWFtLnZpZGVvVHJhY2tzLnNpemUo
KSA9PSAxKSB7Ci0gICAgICAgICAgICByZW1vdGVWaWRlb1RyYWNrID0gc3RyZWFtLnZpZGVvVHJh
Y2tzLmdldCgwKTsKLSAgICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2suc2V0RW5hYmxlZChyZW5k
ZXJWaWRlbyk7Ci0gICAgICAgICAgICBmb3IgKFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbW90
ZVJlbmRlciA6IHJlbW90ZVJlbmRlcnMpIHsKLSAgICAgICAgICAgICAgcmVtb3RlVmlkZW9UcmFj
ay5hZGRSZW5kZXJlcihuZXcgVmlkZW9SZW5kZXJlcihyZW1vdGVSZW5kZXIpKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUmVtb3ZlU3RyZWFtKGZpbmFsIE1lZGlhU3RyZWFt
IHN0cmVhbSkgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgcmVt
b3RlVmlkZW9UcmFjayA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRGF0YUNoYW5uZWwoZmluYWwgRGF0YUNoYW5u
ZWwgZGMpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJBcHBSVEMgZG9lc24ndCB1c2UgZGF0YSBjaGFu
bmVscywgYnV0IGdvdDogIiArIGRjLmxhYmVsKCkgKyAiIGFueXdheSEiKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblJlbmVnb3RpYXRpb25OZWVkZWQoKSB7Ci0g
ICAgICAvLyBObyBuZWVkIHRvIGRvIGFueXRoaW5nOyBBcHBSVEMgZm9sbG93cyBhIHByZS1hZ3Jl
ZWQtdXBvbgotICAgICAgLy8gc2lnbmFsaW5nL25lZ290aWF0aW9uIHByb3RvY29sLgotICAgIH0K
LSAgfQotCi0gIC8vIEltcGxlbWVudGF0aW9uIGRldGFpbDogaGFuZGxlIG9mZmVyIGNyZWF0aW9u
L3NpZ25hbGluZyBhbmQgYW5zd2VyIHNldHRpbmcsCi0gIC8vIGFzIHdlbGwgYXMgYWRkaW5nIHJl
bW90ZSBJQ0UgY2FuZGlkYXRlcyBvbmNlIHRoZSBhbnN3ZXIgU0RQIGlzIHNldC4KLSAgcHJpdmF0
ZSBjbGFzcyBTRFBPYnNlcnZlciBpbXBsZW1lbnRzIFNkcE9ic2VydmVyIHsKLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVN1Y2Nlc3MoZmluYWwgU2Vzc2lvbkRlc2NyaXB0
aW9uIG9yaWdTZHApIHsKLSAgICAgIGlmIChsb2NhbFNkcCAhPSBudWxsKSB7Ci0gICAgICAgIHJl
cG9ydEVycm9yKCJNdWx0aXBsZSBTRFAgY3JlYXRlLiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
ICB9Ci0gICAgICBTdHJpbmcgc2RwRGVzY3JpcHRpb24gPSBvcmlnU2RwLmRlc2NyaXB0aW9uOwot
ICAgICAgaWYgKHByZWZlcklzYWMpIHsKLSAgICAgICAgc2RwRGVzY3JpcHRpb24gPSBwcmVmZXJD
b2RlYyhzZHBEZXNjcmlwdGlvbiwgQVVESU9fQ09ERUNfSVNBQywgdHJ1ZSk7Ci0gICAgICB9Ci0g
ICAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHBy
ZWZlckNvZGVjKHNkcERlc2NyaXB0aW9uLCBwcmVmZXJyZWRWaWRlb0NvZGVjLCBmYWxzZSk7Ci0g
ICAgICB9Ci0gICAgICBmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25E
ZXNjcmlwdGlvbihvcmlnU2RwLnR5cGUsIHNkcERlc2NyaXB0aW9uKTsKLSAgICAgIGxvY2FsU2Rw
ID0gc2RwOwotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAg
IEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYgKHBl
ZXJDb25uZWN0aW9uICE9IG51bGwgJiYgIWlzRXJyb3IpIHsKLSAgICAgICAgICAgIExvZy5kKFRB
RywgIlNldCBsb2NhbCBTRFAgZnJvbSAiICsgc2RwLnR5cGUpOwotICAgICAgICAgICAgcGVlckNv
bm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBPYnNlcnZlciwgc2RwKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1
YmxpYyB2b2lkIG9uU2V0U3VjY2VzcygpIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbiA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGlzSW5pdGlhdG9y
KSB7Ci0gICAgICAgICAgICAvLyBGb3Igb2ZmZXJpbmcgcGVlciBjb25uZWN0aW9uIHdlIGZpcnN0
IGNyZWF0ZSBvZmZlciBhbmQgc2V0Ci0gICAgICAgICAgICAvLyBsb2NhbCBTRFAsIHRoZW4gYWZ0
ZXIgcmVjZWl2aW5nIGFuc3dlciBzZXQgcmVtb3RlIFNEUC4KLSAgICAgICAgICAgIGlmIChwZWVy
Q29ubmVjdGlvbi5nZXRSZW1vdGVEZXNjcmlwdGlvbigpID09IG51bGwpIHsKLSAgICAgICAgICAg
ICAgLy8gV2UndmUganVzdCBzZXQgb3VyIGxvY2FsIFNEUCBzbyB0aW1lIHRvIHNlbmQgaXQuCi0g
ICAgICAgICAgICAgIExvZy5kKFRBRywgIkxvY2FsIFNEUCBzZXQgc3VjY2VzZnVsbHkiKTsKLSAg
ICAgICAgICAgICAgZXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbihsb2NhbFNkcCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IHNldCByZW1vdGUgZGVz
Y3JpcHRpb24sIHNvIGRyYWluIHJlbW90ZQotICAgICAgICAgICAgICAvLyBhbmQgc2VuZCBsb2Nh
bCBJQ0UgY2FuZGlkYXRlcy4KLSAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUmVtb3RlIFNEUCBz
ZXQgc3VjY2VzZnVsbHkiKTsKLSAgICAgICAgICAgICAgZHJhaW5DYW5kaWRhdGVzKCk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZvciBhbnN3ZXJp
bmcgcGVlciBjb25uZWN0aW9uIHdlIHNldCByZW1vdGUgU0RQIGFuZCB0aGVuCi0gICAgICAgICAg
ICAvLyBjcmVhdGUgYW5zd2VyIGFuZCBzZXQgbG9jYWwgU0RQLgotICAgICAgICAgICAgaWYgKHBl
ZXJDb25uZWN0aW9uLmdldExvY2FsRGVzY3JpcHRpb24oKSAhPSBudWxsKSB7Ci0gICAgICAgICAg
ICAgIC8vIFdlJ3ZlIGp1c3Qgc2V0IG91ciBsb2NhbCBTRFAgc28gdGltZSB0byBzZW5kIGl0LCBk
cmFpbgotICAgICAgICAgICAgICAvLyByZW1vdGUgYW5kIHNlbmQgbG9jYWwgSUNFIGNhbmRpZGF0
ZXMuCi0gICAgICAgICAgICAgIExvZy5kKFRBRywgIkxvY2FsIFNEUCBzZXQgc3VjY2VzZnVsbHki
KTsKLSAgICAgICAgICAgICAgZXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbihsb2NhbFNkcCk7Ci0g
ICAgICAgICAgICAgIGRyYWluQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgLy8gV2UndmUganVzdCBzZXQgcmVtb3RlIFNEUCAtIGRvIG5vdGhpbmcgZm9y
IG5vdyAtCi0gICAgICAgICAgICAgIC8vIGFuc3dlciB3aWxsIGJlIGNyZWF0ZWQgc29vbi4KLSAg
ICAgICAgICAgICAgTG9nLmQoVEFHLCAiUmVtb3RlIFNEUCBzZXQgc3VjY2VzZnVsbHkiKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlRmFpbHVyZShmaW5hbCBTdHJp
bmcgZXJyb3IpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJjcmVhdGVTRFAgZXJyb3I6ICIgKyBlcnJv
cik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TZXRGYWlsdXJl
KGZpbmFsIFN0cmluZyBlcnJvcikgewotICAgICAgcmVwb3J0RXJyb3IoInNldFNEUCBlcnJvcjog
IiArIGVycm9yKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9QZXJjZW50RnJhbWVMYXlvdXQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvUGVyY2VudEZyYW1lTGF5b3V0LmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9QZXJjZW50RnJhbWVMYXlvdXQuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhl
IFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7
Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcu
VmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi0vKioKLSAqIFNpbXBsZSBj
b250YWluZXIgdGhhdCBjb25maW5lcyB0aGUgY2hpbGRyZW4gdG8gYSBzdWJyZWN0YW5nbGUgc3Bl
Y2lmaWVkIGFzIHBlcmNlbnRhZ2UgdmFsdWVzIG9mCi0gKiB0aGUgY29udGFpbmVyIHNpemUuIFRo
ZSBjaGlsZHJlbiBhcmUgY2VudGVyZWQgaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IGluc2lk
ZSB0aGUgY29uZmluZWQKLSAqIHNwYWNlLgotICovCi1wdWJsaWMgY2xhc3MgUGVyY2VudEZyYW1l
TGF5b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKLSAgcHJpdmF0ZSBpbnQgeFBlcmNlbnQgPSAwOwot
ICBwcml2YXRlIGludCB5UGVyY2VudCA9IDA7Ci0gIHByaXZhdGUgaW50IHdpZHRoUGVyY2VudCA9
IDEwMDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0UGVyY2VudCA9IDEwMDsKLQotICBwdWJsaWMgUGVy
Y2VudEZyYW1lTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgIHN1cGVyKGNvbnRleHQpOwot
ICB9Ci0KLSAgcHVibGljIFBlcmNlbnRGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJp
YnV0ZVNldCBhdHRycykgewotICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKLSAgfQotCi0gIHB1
YmxpYyBQZXJjZW50RnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0
cnMsIGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5
bGVBdHRyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvc2l0aW9uKGludCB4UGVyY2VudCwg
aW50IHlQZXJjZW50LCBpbnQgd2lkdGhQZXJjZW50LCBpbnQgaGVpZ2h0UGVyY2VudCkgewotICAg
IHRoaXMueFBlcmNlbnQgPSB4UGVyY2VudDsKLSAgICB0aGlzLnlQZXJjZW50ID0geVBlcmNlbnQ7
Ci0gICAgdGhpcy53aWR0aFBlcmNlbnQgPSB3aWR0aFBlcmNlbnQ7Ci0gICAgdGhpcy5oZWlnaHRQ
ZXJjZW50ID0gaGVpZ2h0UGVyY2VudDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9v
bGVhbiBzaG91bGREZWxheUNoaWxkUHJlc3NlZFN0YXRlKCkgewotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRo
TWVhc3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgewotICAgIGZpbmFsIGludCB3aWR0
aCA9IGdldERlZmF1bHRTaXplKEludGVnZXIuTUFYX1ZBTFVFLCB3aWR0aE1lYXN1cmVTcGVjKTsK
LSAgICBmaW5hbCBpbnQgaGVpZ2h0ID0gZ2V0RGVmYXVsdFNpemUoSW50ZWdlci5NQVhfVkFMVUUs
IGhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICBzZXRNZWFzdXJlZERpbWVuc2lvbihNZWFzdXJlU3Bl
Yy5tYWtlTWVhc3VyZVNwZWMod2lkdGgsIE1lYXN1cmVTcGVjLkVYQUNUTFkpLAotICAgICAgICBN
ZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoaGVpZ2h0LCBNZWFzdXJlU3BlYy5FWEFDVExZKSk7
Ci0KLSAgICBmaW5hbCBpbnQgY2hpbGRXaWR0aE1lYXN1cmVTcGVjID0KLSAgICAgICAgTWVhc3Vy
ZVNwZWMubWFrZU1lYXN1cmVTcGVjKHdpZHRoICogd2lkdGhQZXJjZW50IC8gMTAwLCBNZWFzdXJl
U3BlYy5BVF9NT1NUKTsKLSAgICBmaW5hbCBpbnQgY2hpbGRIZWlnaHRNZWFzdXJlU3BlYyA9Ci0g
ICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhoZWlnaHQgKiBoZWlnaHRQZXJjZW50
IC8gMTAwLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdl
dENoaWxkQ291bnQoKTsgKytpKSB7Ci0gICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRB
dChpKTsKLSAgICAgIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewotICAgICAg
ICBjaGlsZC5tZWFzdXJlKGNoaWxkV2lkdGhNZWFzdXJlU3BlYywgY2hpbGRIZWlnaHRNZWFzdXJl
U3BlYyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2
b2lkIG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdo
dCwgaW50IGJvdHRvbSkgewotICAgIGZpbmFsIGludCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDsKLSAg
ICBmaW5hbCBpbnQgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwotICAgIC8vIFN1Yi1yZWN0YW5nbGUg
c3BlY2lmaWVkIGJ5IHBlcmNlbnRhZ2UgdmFsdWVzLgotICAgIGZpbmFsIGludCBzdWJXaWR0aCA9
IHdpZHRoICogd2lkdGhQZXJjZW50IC8gMTAwOwotICAgIGZpbmFsIGludCBzdWJIZWlnaHQgPSBo
ZWlnaHQgKiBoZWlnaHRQZXJjZW50IC8gMTAwOwotICAgIGZpbmFsIGludCBzdWJMZWZ0ID0gbGVm
dCArIHdpZHRoICogeFBlcmNlbnQgLyAxMDA7Ci0gICAgZmluYWwgaW50IHN1YlRvcCA9IHRvcCAr
IGhlaWdodCAqIHlQZXJjZW50IC8gMTAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXRD
aGlsZENvdW50KCk7ICsraSkgewotICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldENoaWxkQXQo
aSk7Ci0gICAgICBpZiAoY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsKLSAgICAgICAg
ZmluYWwgaW50IGNoaWxkV2lkdGggPSBjaGlsZC5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgICAg
IGZpbmFsIGludCBjaGlsZEhlaWdodCA9IGNoaWxkLmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAg
ICAgIC8vIENlbnRlciBjaGlsZCBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4KLSAg
ICAgICAgZmluYWwgaW50IGNoaWxkTGVmdCA9IHN1YkxlZnQgKyAoc3ViV2lkdGggLSBjaGlsZFdp
ZHRoKSAvIDI7Ci0gICAgICAgIGZpbmFsIGludCBjaGlsZFRvcCA9IHN1YlRvcCArIChzdWJIZWln
aHQgLSBjaGlsZEhlaWdodCkgLyAyOwotICAgICAgICBjaGlsZC5sYXlvdXQoY2hpbGRMZWZ0LCBj
aGlsZFRvcCwgY2hpbGRMZWZ0ICsgY2hpbGRXaWR0aCwgY2hpbGRUb3AgKyBjaGlsZEhlaWdodCk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvUm9vbVBhcmFtZXRlcnNGZXRjaGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL1Jvb21QYXJhbWV0ZXJzRmV0Y2hlci5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUm9vbVBhcmFtZXRlcnNGZXRjaGVy
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBy
dGMuQXBwUlRDQ2xpZW50LlNpZ25hbGluZ1BhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLmFwcHNwb3Qu
YXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBwc3BvdC5h
cHBydGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0aW9uLkFzeW5jSHR0cEV2ZW50czsKLQotaW1w
b3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBvcmcuanNvbi5KU09OQXJyYXk7Ci1pbXBv
cnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuanNvbi5KU09OT2JqZWN0Owot
aW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNv
bm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci0KLWltcG9y
dCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBv
cnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1w
b3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwotCi0v
KioKLSAqIEFzeW5jVGFzayB0aGF0IGNvbnZlcnRzIGFuIEFwcFJUQyByb29tIFVSTCBpbnRvIHRo
ZSBzZXQgb2Ygc2lnbmFsaW5nCi0gKiBwYXJhbWV0ZXJzIHRvIHVzZSB3aXRoIHRoYXQgcm9vbS4K
LSAqLwotcHVibGljIGNsYXNzIFJvb21QYXJhbWV0ZXJzRmV0Y2hlciB7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIFN0cmluZyBUQUcgPSAiUm9vbVJUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBUVVJOX0hUVFBfVElNRU9VVF9NUyA9IDUwMDA7Ci0gIHByaXZhdGUgZmluYWwg
Um9vbVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJp
bmcgcm9vbVVybDsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcm9vbU1lc3NhZ2U7Ci0gIHByaXZh
dGUgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbiBodHRwQ29ubmVjdGlvbjsKLQotICAvKioKLSAgICog
Um9vbSBwYXJhbWV0ZXJzIGZldGNoZXIgY2FsbGJhY2tzLgotICAgKi8KLSAgcHVibGljIGludGVy
ZmFjZSBSb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHMgewotICAgIC8qKgotICAgICAqIENhbGxi
YWNrIGZpcmVkIG9uY2UgdGhlIHJvb20ncyBzaWduYWxpbmcgcGFyYW1ldGVycwotICAgICAqIFNp
Z25hbGluZ1BhcmFtZXRlcnMgYXJlIGV4dHJhY3RlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uU2ln
bmFsaW5nUGFyYW1ldGVyc1JlYWR5KGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zKTsK
LQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZvciByb29tIHBhcmFtZXRlcnMgZXh0cmFjdGlv
biBlcnJvci4KLSAgICAgKi8KLSAgICB2b2lkIG9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKGZp
bmFsIFN0cmluZyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgUm9vbVBhcmFtZXRlcnNG
ZXRjaGVyKAotICAgICAgU3RyaW5nIHJvb21VcmwsIFN0cmluZyByb29tTWVzc2FnZSwgZmluYWwg
Um9vbVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMucm9vbVVybCA9
IHJvb21Vcmw7Ci0gICAgdGhpcy5yb29tTWVzc2FnZSA9IHJvb21NZXNzYWdlOwotICAgIHRoaXMu
ZXZlbnRzID0gZXZlbnRzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbWFrZVJlcXVlc3QoKSB7Ci0g
ICAgTG9nLmQoVEFHLCAiQ29ubmVjdGluZyB0byByb29tOiAiICsgcm9vbVVybCk7Ci0gICAgaHR0
cENvbm5lY3Rpb24gPQotICAgICAgICBuZXcgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbigiUE9TVCIs
IHJvb21VcmwsIHJvb21NZXNzYWdlLCBuZXcgQXN5bmNIdHRwRXZlbnRzKCkgewotICAgICAgICAg
IEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cEVycm9yKFN0cmluZyBlcnJv
ck1lc3NhZ2UpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIlJvb20gY29ubmVjdGlvbiBlcnJv
cjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICBldmVudHMub25TaWduYWxpbmdQYXJh
bWV0ZXJzRXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBAT3Zl
cnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0dHBDb21wbGV0ZShTdHJpbmcgcmVzcG9u
c2UpIHsKLSAgICAgICAgICAgIHJvb21IdHRwUmVzcG9uc2VQYXJzZShyZXNwb25zZSk7Ci0gICAg
ICAgICAgfQotICAgICAgICB9KTsKLSAgICBodHRwQ29ubmVjdGlvbi5zZW5kKCk7Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgcm9vbUh0dHBSZXNwb25zZVBhcnNlKFN0cmluZyByZXNwb25zZSkgewot
ICAgIExvZy5kKFRBRywgIlJvb20gcmVzcG9uc2U6ICIgKyByZXNwb25zZSk7Ci0gICAgdHJ5IHsK
LSAgICAgIExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVzID0gbnVsbDsKLSAg
ICAgIFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCA9IG51bGw7Ci0gICAgICBKU09OT2JqZWN0
IHJvb21Kc29uID0gbmV3IEpTT05PYmplY3QocmVzcG9uc2UpOwotCi0gICAgICBTdHJpbmcgcmVz
dWx0ID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJyZXN1bHQiKTsKLSAgICAgIGlmICghcmVzdWx0LmVx
dWFscygiU1VDQ0VTUyIpKSB7Ci0gICAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNF
cnJvcigiUm9vbSByZXNwb25zZSBlcnJvcjogIiArIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIH0KLSAgICAgIHJlc3BvbnNlID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJwYXJhbXMiKTsK
LSAgICAgIHJvb21Kc29uID0gbmV3IEpTT05PYmplY3QocmVzcG9uc2UpOwotICAgICAgU3RyaW5n
IHJvb21JZCA9IHJvb21Kc29uLmdldFN0cmluZygicm9vbV9pZCIpOwotICAgICAgU3RyaW5nIGNs
aWVudElkID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJjbGllbnRfaWQiKTsKLSAgICAgIFN0cmluZyB3
c3NVcmwgPSByb29tSnNvbi5nZXRTdHJpbmcoIndzc191cmwiKTsKLSAgICAgIFN0cmluZyB3c3NQ
b3N0VXJsID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJ3c3NfcG9zdF91cmwiKTsKLSAgICAgIGJvb2xl
YW4gaW5pdGlhdG9yID0gKHJvb21Kc29uLmdldEJvb2xlYW4oImlzX2luaXRpYXRvciIpKTsKLSAg
ICAgIGlmICghaW5pdGlhdG9yKSB7Ci0gICAgICAgIGljZUNhbmRpZGF0ZXMgPSBuZXcgTGlua2Vk
TGlzdDxJY2VDYW5kaWRhdGU+KCk7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlc1N0cmluZyA9IHJv
b21Kc29uLmdldFN0cmluZygibWVzc2FnZXMiKTsKLSAgICAgICAgSlNPTkFycmF5IG1lc3NhZ2Vz
ID0gbmV3IEpTT05BcnJheShtZXNzYWdlc1N0cmluZyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbWVzc2FnZXMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgIFN0cmluZyBtZXNzYWdl
U3RyaW5nID0gbWVzc2FnZXMuZ2V0U3RyaW5nKGkpOwotICAgICAgICAgIEpTT05PYmplY3QgbWVz
c2FnZSA9IG5ldyBKU09OT2JqZWN0KG1lc3NhZ2VTdHJpbmcpOwotICAgICAgICAgIFN0cmluZyBt
ZXNzYWdlVHlwZSA9IG1lc3NhZ2UuZ2V0U3RyaW5nKCJ0eXBlIik7Ci0gICAgICAgICAgTG9nLmQo
VEFHLCAiR0FFLT5DICMiICsgaSArICIgOiAiICsgbWVzc2FnZVN0cmluZyk7Ci0gICAgICAgICAg
aWYgKG1lc3NhZ2VUeXBlLmVxdWFscygib2ZmZXIiKSkgewotICAgICAgICAgICAgb2ZmZXJTZHAg
PSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgIFNlc3Npb25EZXNjcmlw
dGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKG1lc3NhZ2VUeXBlKSwgbWVzc2FnZS5nZXRTdHJp
bmcoInNkcCIpKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlLmVxdWFscygiY2Fu
ZGlkYXRlIikpIHsKLSAgICAgICAgICAgIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgPSBuZXcgSWNl
Q2FuZGlkYXRlKAotICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0U3RyaW5nKCJpZCIpLCBtZXNz
YWdlLmdldEludCgibGFiZWwiKSwgbWVzc2FnZS5nZXRTdHJpbmcoImNhbmRpZGF0ZSIpKTsKLSAg
ICAgICAgICAgIGljZUNhbmRpZGF0ZXMuYWRkKGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gbWVzc2FnZTogIiArIG1lc3NhZ2VT
dHJpbmcpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgTG9nLmQoVEFH
LCAiUm9vbUlkOiAiICsgcm9vbUlkICsgIi4gQ2xpZW50SWQ6ICIgKyBjbGllbnRJZCk7Ci0gICAg
ICBMb2cuZChUQUcsICJJbml0aWF0b3I6ICIgKyBpbml0aWF0b3IpOwotICAgICAgTG9nLmQoVEFH
LCAiV1NTIHVybDogIiArIHdzc1VybCk7Ci0gICAgICBMb2cuZChUQUcsICJXU1MgUE9TVCB1cmw6
ICIgKyB3c3NQb3N0VXJsKTsKLQotICAgICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXI+IGljZVNlcnZlcnMgPQotICAgICAgICAgIGljZVNlcnZlcnNGcm9tUENDb25maWdKU09O
KHJvb21Kc29uLmdldFN0cmluZygicGNfY29uZmlnIikpOwotICAgICAgYm9vbGVhbiBpc1R1cm5Q
cmVzZW50ID0gZmFsc2U7Ci0gICAgICBmb3IgKFBlZXJDb25uZWN0aW9uLkljZVNlcnZlciBzZXJ2
ZXIgOiBpY2VTZXJ2ZXJzKSB7Ci0gICAgICAgIExvZy5kKFRBRywgIkljZVNlcnZlcjogIiArIHNl
cnZlcik7Ci0gICAgICAgIGlmIChzZXJ2ZXIudXJpLnN0YXJ0c1dpdGgoInR1cm46IikpIHsKLSAg
ICAgICAgICBpc1R1cm5QcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgfQotICAgICAgLy8gUmVxdWVzdCBUVVJOIHNlcnZlcnMuCi0gICAgICBpZiAoIWlz
VHVyblByZXNlbnQpIHsKLSAgICAgICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2
ZXI+IHR1cm5TZXJ2ZXJzID0KLSAgICAgICAgICAgIHJlcXVlc3RUdXJuU2VydmVycyhyb29tSnNv
bi5nZXRTdHJpbmcoImljZV9zZXJ2ZXJfdXJsIikpOwotICAgICAgICBmb3IgKFBlZXJDb25uZWN0
aW9uLkljZVNlcnZlciB0dXJuU2VydmVyIDogdHVyblNlcnZlcnMpIHsKLSAgICAgICAgICBMb2cu
ZChUQUcsICJUdXJuU2VydmVyOiAiICsgdHVyblNlcnZlcik7Ci0gICAgICAgICAgaWNlU2VydmVy
cy5hZGQodHVyblNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgU2lnbmFsaW5n
UGFyYW1ldGVycyBwYXJhbXMgPSBuZXcgU2lnbmFsaW5nUGFyYW1ldGVycygKLSAgICAgICAgICBp
Y2VTZXJ2ZXJzLCBpbml0aWF0b3IsIGNsaWVudElkLCB3c3NVcmwsIHdzc1Bvc3RVcmwsIG9mZmVy
U2RwLCBpY2VDYW5kaWRhdGVzKTsKLSAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNS
ZWFkeShwYXJhbXMpOwotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgZXZl
bnRzLm9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKCJSb29tIEpTT04gcGFyc2luZyBlcnJvcjog
IiArIGUudG9TdHJpbmcoKSk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAg
ZXZlbnRzLm9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKCJSb29tIElPIGVycm9yOiAiICsgZS50
b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXF1ZXN0cyAmIHJldHVybnMgYSBUVVJO
IElDRSBTZXJ2ZXIgYmFzZWQgb24gYSByZXF1ZXN0IFVSTC4gIE11c3QgYmUgcnVuCi0gIC8vIG9m
ZiB0aGUgbWFpbiB0aHJlYWQhCi0gIHByaXZhdGUgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5J
Y2VTZXJ2ZXI+IHJlcXVlc3RUdXJuU2VydmVycyhTdHJpbmcgdXJsKQotICAgICAgdGhyb3dzIElP
RXhjZXB0aW9uLCBKU09ORXhjZXB0aW9uIHsKLSAgICBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9u
LkljZVNlcnZlcj4gdHVyblNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5J
Y2VTZXJ2ZXI+KCk7Ci0gICAgTG9nLmQoVEFHLCAiUmVxdWVzdCBUVVJOIGZyb206ICIgKyB1cmwp
OwotICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24p
IG5ldyBVUkwodXJsKS5vcGVuQ29ubmVjdGlvbigpOwotICAgIGNvbm5lY3Rpb24uc2V0RG9PdXRw
dXQodHJ1ZSk7Ci0gICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIlJFRkVSRVIiLCAi
aHR0cHM6Ly9hcHByLnRjIik7Ci0gICAgY29ubmVjdGlvbi5zZXRDb25uZWN0VGltZW91dChUVVJO
X0hUVFBfVElNRU9VVF9NUyk7Ci0gICAgY29ubmVjdGlvbi5zZXRSZWFkVGltZW91dChUVVJOX0hU
VFBfVElNRU9VVF9NUyk7Ci0gICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVz
cG9uc2VDb2RlKCk7Ci0gICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKLSAgICAgIHRocm93
IG5ldyBJT0V4Y2VwdGlvbigiTm9uLTIwMCByZXNwb25zZSB3aGVuIHJlcXVlc3RpbmcgVFVSTiBz
ZXJ2ZXIgZnJvbSAiICsgdXJsICsgIiA6ICIKLSAgICAgICAgICArIGNvbm5lY3Rpb24uZ2V0SGVh
ZGVyRmllbGQobnVsbCkpOwotICAgIH0KLSAgICBJbnB1dFN0cmVhbSByZXNwb25zZVN0cmVhbSA9
IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICBTdHJpbmcgcmVzcG9uc2UgPSBkcmFp
blN0cmVhbShyZXNwb25zZVN0cmVhbSk7Ci0gICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7Ci0g
ICAgTG9nLmQoVEFHLCAiVFVSTiByZXNwb25zZTogIiArIHJlc3BvbnNlKTsKLSAgICBKU09OT2Jq
ZWN0IHJlc3BvbnNlSlNPTiA9IG5ldyBKU09OT2JqZWN0KHJlc3BvbnNlKTsKLSAgICBKU09OQXJy
YXkgaWNlU2VydmVycyA9IHJlc3BvbnNlSlNPTi5nZXRKU09OQXJyYXkoImljZVNlcnZlcnMiKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGljZVNlcnZlcnMubGVuZ3RoKCk7ICsraSkgewotICAg
ICAgSlNPTk9iamVjdCBzZXJ2ZXIgPSBpY2VTZXJ2ZXJzLmdldEpTT05PYmplY3QoaSk7Ci0gICAg
ICBKU09OQXJyYXkgdHVyblVybHMgPSBzZXJ2ZXIuZ2V0SlNPTkFycmF5KCJ1cmxzIik7Ci0gICAg
ICBTdHJpbmcgdXNlcm5hbWUgPSBzZXJ2ZXIuaGFzKCJ1c2VybmFtZSIpID8gc2VydmVyLmdldFN0
cmluZygidXNlcm5hbWUiKSA6ICIiOwotICAgICAgU3RyaW5nIGNyZWRlbnRpYWwgPSBzZXJ2ZXIu
aGFzKCJjcmVkZW50aWFsIikgPyBzZXJ2ZXIuZ2V0U3RyaW5nKCJjcmVkZW50aWFsIikgOiAiIjsK
LSAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHVyblVybHMubGVuZ3RoKCk7IGorKykgewotICAg
ICAgICBTdHJpbmcgdHVyblVybCA9IHR1cm5VcmxzLmdldFN0cmluZyhqKTsKLSAgICAgICAgdHVy
blNlcnZlcnMuYWRkKG5ldyBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIodHVyblVybCwgdXNlcm5h
bWUsIGNyZWRlbnRpYWwpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHR1cm5TZXJ2ZXJz
OwotICB9Ci0KLSAgLy8gUmV0dXJuIHRoZSBsaXN0IG9mIElDRSBzZXJ2ZXJzIGRlc2NyaWJlZCBi
eSBhIFdlYlJUQ1BlZXJDb25uZWN0aW9uCi0gIC8vIGNvbmZpZ3VyYXRpb24gc3RyaW5nLgotICBw
cml2YXRlIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzRnJv
bVBDQ29uZmlnSlNPTihTdHJpbmcgcGNDb25maWcpCi0gICAgICB0aHJvd3MgSlNPTkV4Y2VwdGlv
biB7Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QocGNDb25maWcpOwotICAg
IEpTT05BcnJheSBzZXJ2ZXJzID0ganNvbi5nZXRKU09OQXJyYXkoImljZVNlcnZlcnMiKTsKLSAg
ICBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gcmV0ID0gbmV3IExpbmtlZExp
c3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2VydmVycy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICBKU09OT2JqZWN0IHNlcnZlciA9IHNlcnZl
cnMuZ2V0SlNPTk9iamVjdChpKTsKLSAgICAgIFN0cmluZyB1cmwgPSBzZXJ2ZXIuZ2V0U3RyaW5n
KCJ1cmxzIik7Ci0gICAgICBTdHJpbmcgY3JlZGVudGlhbCA9IHNlcnZlci5oYXMoImNyZWRlbnRp
YWwiKSA/IHNlcnZlci5nZXRTdHJpbmcoImNyZWRlbnRpYWwiKSA6ICIiOwotICAgICAgcmV0LmFk
ZChuZXcgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyKHVybCwgIiIsIGNyZWRlbnRpYWwpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8vIFJldHVybiB0aGUgY29udGVudHMgb2Yg
YW4gSW5wdXRTdHJlYW0gYXMgYSBTdHJpbmcuCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBkcmFp
blN0cmVhbShJbnB1dFN0cmVhbSBpbikgewotICAgIFNjYW5uZXIgcyA9IG5ldyBTY2FubmVyKGlu
KS51c2VEZWxpbWl0ZXIoIlxcQSIpOwotICAgIHJldHVybiBzLmhhc05leHQoKSA/IHMubmV4dCgp
IDogIiI7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5n
c0FjdGl2aXR5LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L1NldHRpbmdzQWN0aXZpdHkuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL1NldHRpbmdzQWN0aXZpdHkuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDI2NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFw
cHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29u
dGVudC5TaGFyZWRQcmVmZXJlbmNlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJl
ZmVyZW5jZXMuT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9p
ZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLkxpc3RQcmVmZXJlbmNlOwot
aW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlOwotaW1wb3J0IG9yZy53ZWJydGMu
Q2FtZXJhMkVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy52b2ljZWVuZ2luZS5XZWJSdGNB
dWRpb1V0aWxzOwotCi0vKioKLSAqIFNldHRpbmdzIGFjdGl2aXR5IGZvciBBcHBSVEMuCi0gKi8K
LXB1YmxpYyBjbGFzcyBTZXR0aW5nc0FjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgaW1wbGVtZW50
cyBPblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lciB7Ci0gIHByaXZhdGUgU2V0dGluZ3NG
cmFnbWVudCBzZXR0aW5nc0ZyYWdtZW50OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9D
YWxsOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmU2NyZWVuY2FwdHVyZTsKLSAgcHJpdmF0ZSBT
dHJpbmcga2V5cHJlZkNhbWVyYTI7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZSZXNvbHV0aW9u
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRnBzOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVm
Q2FwdHVyZVF1YWxpdHlTbGlkZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZNYXhWaWRlb0Jp
dHJhdGVUeXBlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVmFsdWU7
Ci0gIHByaXZhdGUgU3RyaW5nIGtleVByZWZWaWRlb0NvZGVjOwotICBwcml2YXRlIFN0cmluZyBr
ZXlwcmVmSHdDb2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkNhcHR1cmVUb1RleHR1cmU7
Ci0KLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlwZTsKLSAgcHJp
dmF0ZSBTdHJpbmcga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVmFsdWU7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleVByZWZBdWRpb0NvZGVjOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmTm9BdWRpb1By
b2Nlc3Npbmc7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZBZWNEdW1wOwotICBwcml2YXRlIFN0
cmluZyBrZXlwcmVmT3BlblNMRVM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVp
bHRJbkFFQzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluQUdDOwotICBw
cml2YXRlIFN0cmluZyBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5OUzsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZkVuYWJsZUxldmVsQ29udHJvbDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlNwZWFr
ZXJwaG9uZTsKLQotICBwcml2YXRlIFN0cmluZyBrZXlQcmVmUm9vbVNlcnZlclVybDsKLSAgcHJp
dmF0ZSBTdHJpbmcga2V5UHJlZkRpc3BsYXlIdWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGtleVByZWZU
cmFjaW5nOwotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUg
c2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0
YXRlKTsKLSAgICBrZXlwcmVmVmlkZW9DYWxsID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmlk
ZW9jYWxsX2tleSk7Ci0gICAga2V5cHJlZlNjcmVlbmNhcHR1cmUgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9zY3JlZW5jYXB0dXJlX2tleSk7Ci0gICAga2V5cHJlZkNhbWVyYTIgPSBnZXRTdHJp
bmcoUi5zdHJpbmcucHJlZl9jYW1lcmEyX2tleSk7Ci0gICAga2V5cHJlZlJlc29sdXRpb24gPSBn
ZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yZXNvbHV0aW9uX2tleSk7Ci0gICAga2V5cHJlZkZwcyA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Zwc19rZXkpOwotICAgIGtleXByZWZDYXB0dXJlUXVh
bGl0eVNsaWRlciA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVy
X2tleSk7Ci0gICAga2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5cGUgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9tYXh2aWRlb2JpdHJhdGVfa2V5KTsKLSAgICBrZXlwcmVmTWF4VmlkZW9CaXRyYXRl
VmFsdWUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9rZXkp
OwotICAgIGtleVByZWZWaWRlb0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmlkZW9j
b2RlY19rZXkpOwotICAgIGtleXByZWZId0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZf
aHdjb2RlY19rZXkpOwotICAgIGtleXByZWZDYXB0dXJlVG9UZXh0dXJlID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXkpOwotCi0gICAga2V5cHJlZlN0YXJ0QXVk
aW9CaXRyYXRlVHlwZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRl
X2tleSk7Ci0gICAga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVmFsdWUgPSBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2tleSk7Ci0gICAga2V5UHJlZkF1ZGlv
Q29kZWMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9hdWRpb2NvZGVjX2tleSk7Ci0gICAga2V5
cHJlZk5vQXVkaW9Qcm9jZXNzaW5nID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbm9hdWRpb3By
b2Nlc3Npbmdfa2V5KTsKLSAgICBrZXlwcmVmQWVjRHVtcCA9IGdldFN0cmluZyhSLnN0cmluZy5w
cmVmX2FlY2R1bXBfa2V5KTsKLSAgICBrZXlwcmVmT3BlblNMRVMgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9vcGVuc2xlc19rZXkpOwotICAgIGtleXByZWZEaXNhYmxlQnVpbHRJbkFFQyA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2tleSk7Ci0gICAga2V5
cHJlZkRpc2FibGVCdWlsdEluQUdDID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9i
dWlsdF9pbl9hZ2Nfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5OUyA9IGdldFN0cmlu
ZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfa2V5KTsKLSAgICBrZXlwcmVmRW5h
YmxlTGV2ZWxDb250cm9sID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZW5hYmxlX2xldmVsX2Nv
bnRyb2xfa2V5KTsKLSAgICBrZXlwcmVmU3BlYWtlcnBob25lID0gZ2V0U3RyaW5nKFIuc3RyaW5n
LnByZWZfc3BlYWtlcnBob25lX2tleSk7Ci0KLSAgICBrZXlQcmVmUm9vbVNlcnZlclVybCA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX3Jvb21fc2VydmVyX3VybF9rZXkpOwotICAgIGtleVByZWZE
aXNwbGF5SHVkID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzcGxheWh1ZF9rZXkpOwotICAg
IGtleVByZWZUcmFjaW5nID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdHJhY2luZ19rZXkpOwot
Ci0gICAgLy8gRGlzcGxheSB0aGUgZnJhZ21lbnQgYXMgdGhlIG1haW4gY29udGVudC4KLSAgICBz
ZXR0aW5nc0ZyYWdtZW50ID0gbmV3IFNldHRpbmdzRnJhZ21lbnQoKTsKLSAgICBnZXRGcmFnbWVu
dE1hbmFnZXIoKQotICAgICAgICAuYmVnaW5UcmFuc2FjdGlvbigpCi0gICAgICAgIC5yZXBsYWNl
KGFuZHJvaWQuUi5pZC5jb250ZW50LCBzZXR0aW5nc0ZyYWdtZW50KQotICAgICAgICAuY29tbWl0
KCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7Ci0g
ICAgc3VwZXIub25SZXN1bWUoKTsKLSAgICAvLyBTZXQgc3VtbWFyeSB0byBiZSB0aGUgdXNlci1k
ZXNjcmlwdGlvbiBmb3IgdGhlIHNlbGVjdGVkIHZhbHVlCi0gICAgU2hhcmVkUHJlZmVyZW5jZXMg
c2hhcmVkUHJlZmVyZW5jZXMgPQotICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmdldFByZWZlcmVu
Y2VTY3JlZW4oKS5nZXRTaGFyZWRQcmVmZXJlbmNlcygpOwotICAgIHNoYXJlZFByZWZlcmVuY2Vz
LnJlZ2lzdGVyT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0gICAgdXBk
YXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZWaWRlb0NhbGwpOwotICAgIHVw
ZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmU2NyZWVuY2FwdHVyZSk7Ci0g
ICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZDYW1lcmEyKTsKLSAg
ICB1cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmUmVzb2x1dGlvbik7Ci0g
ICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkZwcyk7Ci0gICAgdXBk
YXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZDYXB0dXJlUXVhbGl0eVNsaWRl
cik7Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZk1heFZpZGVv
Qml0cmF0ZVR5cGUpOwotICAgIHVwZGF0ZVN1bW1hcnlCaXRyYXRlKHNoYXJlZFByZWZlcmVuY2Vz
LCBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVmFsdWUpOwotICAgIHNldFZpZGVvQml0cmF0ZUVuYWJs
ZShzaGFyZWRQcmVmZXJlbmNlcyk7Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNl
cywga2V5UHJlZlZpZGVvQ29kZWMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVu
Y2VzLCBrZXlwcmVmSHdDb2RlYyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5j
ZXMsIGtleXByZWZDYXB0dXJlVG9UZXh0dXJlKTsKLQotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVk
UHJlZmVyZW5jZXMsIGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGUpOwotICAgIHVwZGF0ZVN1
bW1hcnlCaXRyYXRlKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVW
YWx1ZSk7Ci0gICAgc2V0QXVkaW9CaXRyYXRlRW5hYmxlKHNoYXJlZFByZWZlcmVuY2VzKTsKLSAg
ICB1cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmQXVkaW9Db2RlYyk7Ci0g
ICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZOb0F1ZGlvUHJvY2Vz
c2luZyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZBZWNE
dW1wKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZk9wZW5T
TEVTKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkRpc2Fi
bGVCdWlsdEluQUVDKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5
cHJlZkRpc2FibGVCdWlsdEluQUdDKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJl
bmNlcywga2V5cHJlZkRpc2FibGVCdWlsdEluTlMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJl
ZFByZWZlcmVuY2VzLCBrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sKTsKLSAgICB1cGRhdGVTdW1t
YXJ5TGlzdChzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlNwZWFrZXJwaG9uZSk7Ci0KLSAgICB1
cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmUm9vbVNlcnZlclVybCk7Ci0g
ICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZEaXNwbGF5SHVkKTsK
LSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5UHJlZlRyYWNpbmcpOwot
Ci0gICAgaWYgKCFDYW1lcmEyRW51bWVyYXRvci5pc1N1cHBvcnRlZCh0aGlzKSkgewotICAgICAg
UHJlZmVyZW5jZSBjYW1lcmEyUHJlZmVyZW5jZSA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZl
cmVuY2Uoa2V5cHJlZkNhbWVyYTIpOwotCi0gICAgICBjYW1lcmEyUHJlZmVyZW5jZS5zZXRTdW1t
YXJ5KGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhbWVyYTJfbm90X3N1cHBvcnRlZCkpOwotICAg
ICAgY2FtZXJhMlByZWZlcmVuY2Uuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8g
RGlzYWJsZSBmb3JjaW5nIFdlYlJUQyBiYXNlZCBBRUMgc28gaXQgd29uJ3QgYWZmZWN0IG91ciB2
YWx1ZS4KLSAgICAvLyBPdGhlcndpc2UsIGlmIGl0IHdhcyBlbmFibGVkLCBpc0Fjb3VzdGljRWNo
b0NhbmNlbGVyU3VwcG9ydGVkIHdvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2UuCi0gICAgV2ViUnRj
QXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKGZhbHNlKTsKLSAg
ICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMuaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgp
KSB7Ci0gICAgICBQcmVmZXJlbmNlIGRpc2FibGVCdWlsdEluQUVDUHJlZmVyZW5jZSA9Ci0gICAg
ICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlwcmVmRGlzYWJsZUJ1aWx0
SW5BRUMpOwotCi0gICAgICBkaXNhYmxlQnVpbHRJbkFFQ1ByZWZlcmVuY2Uuc2V0U3VtbWFyeShn
ZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9idWlsdF9pbl9hZWNfbm90X2F2YWlsYWJsZSkpOwotICAg
ICAgZGlzYWJsZUJ1aWx0SW5BRUNQcmVmZXJlbmNlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0K
LQotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJv
bChmYWxzZSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLmlzQXV0b21hdGljR2FpbkNvbnRy
b2xTdXBwb3J0ZWQoKSkgewotICAgICAgUHJlZmVyZW5jZSBkaXNhYmxlQnVpbHRJbkFHQ1ByZWZl
cmVuY2UgPQotICAgICAgICAgIHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5cHJl
ZkRpc2FibGVCdWlsdEluQUdDKTsKLQotICAgICAgZGlzYWJsZUJ1aWx0SW5BR0NQcmVmZXJlbmNl
LnNldFN1bW1hcnkoZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYnVpbHRfaW5fYWdjX25vdF9hdmFp
bGFibGUpKTsKLSAgICAgIGRpc2FibGVCdWlsdEluQUdDUHJlZmVyZW5jZS5zZXRFbmFibGVkKGZh
bHNlKTsKLSAgICB9Ci0KLSAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkTm9pc2VT
dXBwcmVzc29yKGZhbHNlKTsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMuaXNOb2lzZVN1cHBy
ZXNzb3JTdXBwb3J0ZWQoKSkgewotICAgICAgUHJlZmVyZW5jZSBkaXNhYmxlQnVpbHRJbk5TUHJl
ZmVyZW5jZSA9Ci0gICAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlw
cmVmRGlzYWJsZUJ1aWx0SW5OUyk7Ci0KLSAgICAgIGRpc2FibGVCdWlsdEluTlNQcmVmZXJlbmNl
LnNldFN1bW1hcnkoZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYnVpbHRfaW5fbnNfbm90X2F2YWls
YWJsZSkpOwotICAgICAgZGlzYWJsZUJ1aWx0SW5OU1ByZWZlcmVuY2Uuc2V0RW5hYmxlZChmYWxz
ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uUGF1c2Uo
KSB7Ci0gICAgc3VwZXIub25QYXVzZSgpOwotICAgIFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFBy
ZWZlcmVuY2VzID0KLSAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5nZXRQcmVmZXJlbmNlU2NyZWVu
KCkuZ2V0U2hhcmVkUHJlZmVyZW5jZXMoKTsKLSAgICBzaGFyZWRQcmVmZXJlbmNlcy51bnJlZ2lz
dGVyT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgb25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlZChTaGFyZWRQcmVm
ZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtleSkgewotICAgIC8vIGNsYW5nLWZv
cm1hdCBvZmYKLSAgICBpZiAoa2V5LmVxdWFscyhrZXlwcmVmUmVzb2x1dGlvbikKLSAgICAgICAg
fHwga2V5LmVxdWFscyhrZXlwcmVmRnBzKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZN
YXhWaWRlb0JpdHJhdGVUeXBlKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleVByZWZWaWRlb0Nv
ZGVjKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGUp
Ci0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5UHJlZkF1ZGlvQ29kZWMpCi0gICAgICAgIHx8IGtl
eS5lcXVhbHMoa2V5UHJlZlJvb21TZXJ2ZXJVcmwpKSB7Ci0gICAgICB1cGRhdGVTdW1tYXJ5KHNo
YXJlZFByZWZlcmVuY2VzLCBrZXkpOwotICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhrZXlwcmVm
TWF4VmlkZW9CaXRyYXRlVmFsdWUpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZlN0YXJ0
QXVkaW9CaXRyYXRlVmFsdWUpKSB7Ci0gICAgICB1cGRhdGVTdW1tYXJ5Qml0cmF0ZShzaGFyZWRQ
cmVmZXJlbmNlcywga2V5KTsKLSAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoa2V5cHJlZlZpZGVv
Q2FsbCkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmU2NyZWVuY2FwdHVyZSkKLSAgICAg
ICAgfHwga2V5LmVxdWFscyhrZXlwcmVmQ2FtZXJhMikKLSAgICAgICAgfHwga2V5LmVxdWFscyhr
ZXlQcmVmVHJhY2luZykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmQ2FwdHVyZVF1YWxp
dHlTbGlkZXIpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkh3Q29kZWMpCi0gICAgICAg
IHx8IGtleS5lcXVhbHMoa2V5cHJlZkNhcHR1cmVUb1RleHR1cmUpCi0gICAgICAgIHx8IGtleS5l
cXVhbHMoa2V5cHJlZk5vQXVkaW9Qcm9jZXNzaW5nKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtl
eXByZWZBZWNEdW1wKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZPcGVuU0xFUykKLSAg
ICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BRUMpCi0gICAgICAgIHx8
IGtleS5lcXVhbHMoa2V5cHJlZkRpc2FibGVCdWlsdEluQUdDKQotICAgICAgICB8fCBrZXkuZXF1
YWxzKGtleXByZWZEaXNhYmxlQnVpbHRJbk5TKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXBy
ZWZFbmFibGVMZXZlbENvbnRyb2wpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5UHJlZkRpc3Bs
YXlIdWQpKSB7Ci0gICAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5KTsK
LSAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoa2V5cHJlZlNwZWFrZXJwaG9uZSkpIHsKLSAgICAg
IHVwZGF0ZVN1bW1hcnlMaXN0KHNoYXJlZFByZWZlcmVuY2VzLCBrZXkpOwotICAgIH0KLSAgICAv
LyBjbGFuZy1mb3JtYXQgb24KLSAgICBpZiAoa2V5LmVxdWFscyhrZXlwcmVmTWF4VmlkZW9CaXRy
YXRlVHlwZSkpIHsKLSAgICAgIHNldFZpZGVvQml0cmF0ZUVuYWJsZShzaGFyZWRQcmVmZXJlbmNl
cyk7Ci0gICAgfQotICAgIGlmIChrZXkuZXF1YWxzKGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5
cGUpKSB7Ci0gICAgICBzZXRBdWRpb0JpdHJhdGVFbmFibGUoc2hhcmVkUHJlZmVyZW5jZXMpOwot
ICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVTdW1tYXJ5KFNoYXJlZFByZWZlcmVu
Y2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0gICAgUHJlZmVyZW5jZSB1cGRh
dGVkUHJlZiA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5KTsKLSAgICAvLyBT
ZXQgc3VtbWFyeSB0byBiZSB0aGUgdXNlci1kZXNjcmlwdGlvbiBmb3IgdGhlIHNlbGVjdGVkIHZh
bHVlCi0gICAgdXBkYXRlZFByZWYuc2V0U3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcy5nZXRTdHJp
bmcoa2V5LCAiIikpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1bW1hcnlCaXRyYXRl
KFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0gICAg
UHJlZmVyZW5jZSB1cGRhdGVkUHJlZiA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uo
a2V5KTsKLSAgICB1cGRhdGVkUHJlZi5zZXRTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLmdldFN0
cmluZyhrZXksICIiKSArICIga2JwcyIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1
bW1hcnlCKFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7
Ci0gICAgUHJlZmVyZW5jZSB1cGRhdGVkUHJlZiA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZl
cmVuY2Uoa2V5KTsKLSAgICB1cGRhdGVkUHJlZi5zZXRTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2Vz
LmdldEJvb2xlYW4oa2V5LCB0cnVlKQotICAgICAgICAgICAgPyBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl92YWx1ZV9lbmFibGVkKQotICAgICAgICAgICAgOiBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl92YWx1ZV9kaXNhYmxlZCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1bW1hcnlM
aXN0KFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0g
ICAgTGlzdFByZWZlcmVuY2UgdXBkYXRlZFByZWYgPSAoTGlzdFByZWZlcmVuY2UpIHNldHRpbmdz
RnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5KTsKLSAgICB1cGRhdGVkUHJlZi5zZXRTdW1tYXJ5
KHVwZGF0ZWRQcmVmLmdldEVudHJ5KCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFZpZGVv
Qml0cmF0ZUVuYWJsZShTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcykgewotICAg
IFByZWZlcmVuY2UgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZSA9Ci0gICAgICAgIHNldHRpbmdzRnJh
Z21lbnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZk1heFZpZGVvQml0cmF0ZVZhbHVlKTsKLSAgICBT
dHJpbmcgYml0cmF0ZVR5cGVEZWZhdWx0ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlk
ZW9iaXRyYXRlX2RlZmF1bHQpOwotICAgIFN0cmluZyBiaXRyYXRlVHlwZSA9Ci0gICAgICAgIHNo
YXJlZFByZWZlcmVuY2VzLmdldFN0cmluZyhrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZSwgYml0
cmF0ZVR5cGVEZWZhdWx0KTsKLSAgICBpZiAoYml0cmF0ZVR5cGUuZXF1YWxzKGJpdHJhdGVUeXBl
RGVmYXVsdCkpIHsKLSAgICAgIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5hYmxlZChmYWxz
ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5hYmxl
ZCh0cnVlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0QXVkaW9CaXRyYXRlRW5h
YmxlKFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzKSB7Ci0gICAgUHJlZmVyZW5j
ZSBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlID0KLSAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5k
UHJlZmVyZW5jZShrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1ZSk7Ci0gICAgU3RyaW5nIGJp
dHJhdGVUeXBlRGVmYXVsdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRy
YXRlX2RlZmF1bHQpOwotICAgIFN0cmluZyBiaXRyYXRlVHlwZSA9Ci0gICAgICAgIHNoYXJlZFBy
ZWZlcmVuY2VzLmdldFN0cmluZyhrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVUeXBlLCBiaXRyYXRl
VHlwZURlZmF1bHQpOwotICAgIGlmIChiaXRyYXRlVHlwZS5lcXVhbHMoYml0cmF0ZVR5cGVEZWZh
dWx0KSkgewotICAgICAgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZS5zZXRFbmFibGVkKGZhbHNlKTsK
LSAgICB9IGVsc2UgewotICAgICAgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZS5zZXRFbmFibGVkKHRy
dWUpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1Nl
dHRpbmdzRnJhZ21lbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvU2V0dGluZ3NGcmFnbWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Ny
Yy9vcmcvYXBwc3BvdC9hcHBydGMvU2V0dGluZ3NGcmFnbWVudC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3Bv
dC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnBy
ZWZlcmVuY2UuUHJlZmVyZW5jZUZyYWdtZW50OwotCi0vKioKLSAqIFNldHRpbmdzIGZyYWdtZW50
IGZvciBBcHBSVEMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXR0aW5nc0ZyYWdtZW50IGV4dGVuZHMg
UHJlZmVyZW5jZUZyYWdtZW50IHsKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ3JlYXRl
KEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0ZShzYXZlZElu
c3RhbmNlU3RhdGUpOwotICAgIC8vIExvYWQgdGhlIHByZWZlcmVuY2VzIGZyb20gYW4gWE1MIHJl
c291cmNlCi0gICAgYWRkUHJlZmVyZW5jZXNGcm9tUmVzb3VyY2UoUi54bWwucHJlZmVyZW5jZXMp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENs
aWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BD
aGFubmVsQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNTQg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5UaHJlYWRV
dGlsczsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5J
T0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGph
dmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQg
amF2YS5uZXQuU2VydmVyU29ja2V0OwotaW1wb3J0IGphdmEubmV0LlNvY2tldDsKLWltcG9ydCBq
YXZhLm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVu
dC5FeGVjdXRvclNlcnZpY2U7Ci0KLS8qKgotICogUmVwbGFjZW1lbnQgZm9yIFdlYlNvY2tldENo
YW5uZWxDbGllbnQgZm9yIGRpcmVjdCBjb21tdW5pY2F0aW9uIGJldHdlZW4gdHdvIElQIGFkZHJl
c3Nlcy4gSGFuZGxlcwotICogdGhlIHNpZ25hbGluZyBiZXR3ZWVuIHRoZSB0d28gY2xpZW50cyB1
c2luZyBhIFRDUCBjb25uZWN0aW9uLgotICoKLSAqIDxwPkFsbCBwdWJsaWMgbWV0aG9kcyBzaG91
bGQgYmUgY2FsbGVkIGZyb20gYSBsb29wZXIgZXhlY3V0b3IgdGhyZWFkCi0gKiBwYXNzZWQgaW4g
YSBjb25zdHJ1Y3Rvciwgb3RoZXJ3aXNlIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAqIEFs
bCBldmVudHMgYXJlIGRpc3BhdGNoZWQgb24gdGhlIHNhbWUgdGhyZWFkLgotICovCi1wdWJsaWMg
Y2xhc3MgVENQQ2hhbm5lbENsaWVudCB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBU
QUcgPSAiVENQQ2hhbm5lbENsaWVudCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBFeGVjdXRvclNlcnZp
Y2UgZXhlY3V0b3I7Ci0gIHByaXZhdGUgZmluYWwgVGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlciBl
eGVjdXRvclRocmVhZENoZWNrOwotICBwcml2YXRlIGZpbmFsIFRDUENoYW5uZWxFdmVudHMgZXZl
bnRMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBUQ1BTb2NrZXQgc29ja2V0OwotCi0gIC8qKgotICAgKiBD
YWxsYmFjayBpbnRlcmZhY2UgZm9yIG1lc3NhZ2VzIGRlbGl2ZXJlZCBvbiBUQ1AgQ29ubmVjdGlv
bi4gQWxsIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmcm9tIHRoZQotICAgKiBsb29wZXIgZXhlY3V0
b3IgdGhyZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBUQ1BDaGFubmVsRXZlbnRzIHsK
LSAgICB2b2lkIG9uVENQQ29ubmVjdGVkKGJvb2xlYW4gc2VydmVyKTsKLSAgICB2b2lkIG9uVENQ
TWVzc2FnZShTdHJpbmcgbWVzc2FnZSk7Ci0gICAgdm9pZCBvblRDUEVycm9yKFN0cmluZyBkZXNj
cmlwdGlvbik7Ci0gICAgdm9pZCBvblRDUENsb3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogSW5p
dGlhbGl6ZXMgdGhlIFRDUENoYW5uZWxDbGllbnQuIElmIElQIGlzIGEgbG9jYWwgSVAgYWRkcmVz
cywgc3RhcnRzIGEgbGlzdGVuaW5nIHNlcnZlciBvbgotICAgKiB0aGF0IElQLiBJZiBub3QsIGlu
c3RlYWQgY29ubmVjdHMgdG8gdGhlIElQLgotICAgKgotICAgKiBAcGFyYW0gZXZlbnRMaXN0ZW5l
ciBMaXN0ZW5lciB0aGF0IHdpbGwgcmVjZWl2ZSBldmVudHMgZnJvbSB0aGUgY2xpZW50LgotICAg
KiBAcGFyYW0gaXAgSVAgYWRkcmVzcyB0byBsaXN0ZW4gb24gb3IgY29ubmVjdCB0by4KLSAgICog
QHBhcmFtIHBvcnQgUG9ydCB0byBsaXN0ZW4gb24gb3IgY29ubmVjdCB0by4KLSAgICovCi0gIHB1
YmxpYyBUQ1BDaGFubmVsQ2xpZW50KAotICAgICAgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yLCBU
Q1BDaGFubmVsRXZlbnRzIGV2ZW50TGlzdGVuZXIsIFN0cmluZyBpcCwgaW50IHBvcnQpIHsKLSAg
ICB0aGlzLmV4ZWN1dG9yID0gZXhlY3V0b3I7Ci0gICAgZXhlY3V0b3JUaHJlYWRDaGVjayA9IG5l
dyBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyKCk7Ci0gICAgZXhlY3V0b3JUaHJlYWRDaGVjay5k
ZXRhY2hUaHJlYWQoKTsKLSAgICB0aGlzLmV2ZW50TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOwot
Ci0gICAgSW5ldEFkZHJlc3MgYWRkcmVzczsKLSAgICB0cnkgewotICAgICAgYWRkcmVzcyA9IElu
ZXRBZGRyZXNzLmdldEJ5TmFtZShpcCk7Ci0gICAgfSBjYXRjaCAoVW5rbm93bkhvc3RFeGNlcHRp
b24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIkludmFsaWQgSVAgYWRkcmVzcy4iKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYWRkcmVzcy5pc0FueUxvY2FsQWRkcmVzcygpKSB7
Ci0gICAgICBzb2NrZXQgPSBuZXcgVENQU29ja2V0U2VydmVyKGFkZHJlc3MsIHBvcnQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBzb2NrZXQgPSBuZXcgVENQU29ja2V0Q2xpZW50KGFkZHJlc3MsIHBv
cnQpOwotICAgIH0KLQotICAgIHNvY2tldC5zdGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIERp
c2Nvbm5lY3RzIHRoZSBjbGllbnQgaWYgbm90IGFscmVhZHkgZGlzY29ubmVjdGVkLiBUaGlzIHdp
bGwgZmlyZSB0aGUgb25UQ1BDbG9zZSBldmVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGRpc2Nv
bm5lY3QoKSB7Ci0gICAgZXhlY3V0b3JUaHJlYWRDaGVjay5jaGVja0lzT25WYWxpZFRocmVhZCgp
OwotCi0gICAgc29ja2V0LmRpc2Nvbm5lY3QoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZW5kcyBh
IG1lc3NhZ2Ugb24gdGhlIHNvY2tldC4KLSAgICoKLSAgICogQHBhcmFtIG1lc3NhZ2UgTWVzc2Fn
ZSB0byBiZSBzZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2VuZChTdHJpbmcgbWVzc2FnZSkg
ewotICAgIGV4ZWN1dG9yVGhyZWFkQ2hlY2suY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLQotICAg
IHNvY2tldC5zZW5kKG1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBtZXRob2Qg
Zm9yIGZpcmluZyBvblRDUEVycm9yIGV2ZW50cy4gQ2FsbHMgb25UQ1BFcnJvciBvbiB0aGUgZXhl
Y3V0b3IgdGhyZWFkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0
cmluZyBtZXNzYWdlKSB7Ci0gICAgTG9nLmUoVEFHLCAiVENQIEVycm9yOiAiICsgbWVzc2FnZSk7
Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZXZlbnRMaXN0ZW5lci5vblRDUEVy
cm9yKG1lc3NhZ2UpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2Ug
Y2xhc3MgZm9yIHNlcnZlciBhbmQgY2xpZW50IHNvY2tldHMuIENvbnRhaW5zIGEgbGlzdGVuaW5n
IHRocmVhZCB0aGF0IHdpbGwgY2FsbAotICAgKiBldmVudExpc3RlbmVyLm9uVENQTWVzc2FnZSBv
biBuZXcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIGFic3RyYWN0IGNsYXNzIFRDUFNvY2tl
dCBleHRlbmRzIFRocmVhZCB7Ci0gICAgLy8gTG9jayBmb3IgZWRpdGluZyBvdXQgYW5kIHJhd1Nv
Y2tldAotICAgIHByb3RlY3RlZCBmaW5hbCBPYmplY3QgcmF3U29ja2V0TG9jazsKLSAgICBwcml2
YXRlIFByaW50V3JpdGVyIG91dDsKLSAgICBwcml2YXRlIFNvY2tldCByYXdTb2NrZXQ7Ci0KLSAg
ICAvKioKLSAgICAgKiBDb25uZWN0IHRvIHRoZSBwZWVyLCBwb3RlbnRpYWxseSBhIHNsb3cgb3Bl
cmF0aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBTb2NrZXQgY29ubmVjdGlvbiwgbnVsbCBp
ZiBjb25uZWN0aW9uIGZhaWxlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU29ja2V0
IGNvbm5lY3QoKTsKLSAgICAvKiogUmV0dXJucyB0cnVlIGlmIHNvY2tldHMgaXMgYSBzZXJ2ZXIg
cmF3U29ja2V0LiAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzU2VydmVyKCk7Ci0K
LSAgICBUQ1BTb2NrZXQoKSB7Ci0gICAgICByYXdTb2NrZXRMb2NrID0gbmV3IE9iamVjdCgpOwot
ICAgIH0KLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0ZW5pbmcgdGhyZWFkLgotICAgICAqLwot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIExvZy5kKFRBRywg
Ikxpc3RlbmluZyB0aHJlYWQgc3RhcnRlZC4uLiIpOwotCi0gICAgICAvLyBSZWNlaXZlIGNvbm5l
Y3Rpb24gdG8gdGVtcG9yYXJ5IHZhcmlhYmxlIGZpcnN0LCBzbyB3ZSBkb24ndCBibG9jay4KLSAg
ICAgIFNvY2tldCB0ZW1wU29ja2V0ID0gY29ubmVjdCgpOwotICAgICAgQnVmZmVyZWRSZWFkZXIg
aW47Ci0KLSAgICAgIExvZy5kKFRBRywgIlRDUCBjb25uZWN0aW9uIGVzdGFibGlzaGVkLiIpOwot
Ci0gICAgICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExvY2spIHsKLSAgICAgICAgaWYgKHJhd1Nv
Y2tldCAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiU29ja2V0IGFscmVhZHkgZXhp
c3RlZCBhbmQgd2lsbCBiZSByZXBsYWNlZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJhd1Nv
Y2tldCA9IHRlbXBTb2NrZXQ7Ci0KLSAgICAgICAgLy8gQ29ubmVjdGluZyBmYWlsZWQsIGVycm9y
IGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQsIGp1c3QgZXhpdC4KLSAgICAgICAgaWYgKHJhd1Nv
Y2tldCA9PSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
dHJ5IHsKLSAgICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIocmF3U29ja2V0LmdldE91dHB1
dFN0cmVhbSgpLCB0cnVlKTsKLSAgICAgICAgICBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcg
SW5wdXRTdHJlYW1SZWFkZXIocmF3U29ja2V0LmdldElucHV0U3RyZWFtKCkpKTsKLSAgICAgICAg
fSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQg
dG8gb3BlbiBJTyBvbiByYXdTb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIExvZy52KFRBRywgIkV4ZWN1dGUg
b25UQ1BDb25uZWN0ZWQiKTsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICAgIExvZy52KFRBRywgIlJ1biBvblRDUENvbm5lY3RlZCIpOwotICAgICAgICAgIGV2ZW50TGlz
dGVuZXIub25UQ1BDb25uZWN0ZWQoaXNTZXJ2ZXIoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwot
Ci0gICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKLSAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICBtZXNzYWdlID0gaW4ucmVhZExpbmUoKTsKLSAgICAgICAg
fSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgIHN5bmNocm9uaXplZCAocmF3U29j
a2V0TG9jaykgewotICAgICAgICAgICAgLy8gSWYgc29ja2V0IHdhcyBjbG9zZWQsIHRoaXMgaXMg
ZXhwZWN0ZWQuCi0gICAgICAgICAgICBpZiAocmF3U29ja2V0ID09IG51bGwpIHsKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVw
b3J0RXJyb3IoIkZhaWxlZCB0byByZWFkIGZyb20gcmF3U29ja2V0OiAiICsgZS5nZXRNZXNzYWdl
KCkpOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gZGF0YSBy
ZWNlaXZlZCwgcmF3U29ja2V0IHByb2JhYmx5IGNsb3NlZC4KLSAgICAgICAgaWYgKG1lc3NhZ2Ug
PT0gbnVsbCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhlY3V0
b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgTG9nLnYoVEFHLCAiUmVjZWl2ZTog
IiArIG1lc3NhZ2UpOwotICAgICAgICAgICAgZXZlbnRMaXN0ZW5lci5vblRDUE1lc3NhZ2UobWVz
c2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0KLQotICAgICAgTG9nLmQo
VEFHLCAiUmVjZWl2aW5nIHRocmVhZCBleGl0aW5nLi4uIik7Ci0KLSAgICAgIC8vIENsb3NlIHRo
ZSByYXdTb2NrZXQgaWYgaXQgaXMgc3RpbGwgb3Blbi4KLSAgICAgIGRpc2Nvbm5lY3QoKTsKLSAg
ICB9Ci0KLSAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIHJhd1NvY2tldCBpZiBpdCBpcyBzdGls
bCBvcGVuLiBBbHNvIGZpcmVzIHRoZSBvblRDUENsb3NlIGV2ZW50LgotICAgICAqLwotICAgIHB1
YmxpYyB2b2lkIGRpc2Nvbm5lY3QoKSB7Ci0gICAgICB0cnkgewotICAgICAgICBzeW5jaHJvbml6
ZWQgKHJhd1NvY2tldExvY2spIHsKLSAgICAgICAgICBpZiAocmF3U29ja2V0ICE9IG51bGwpIHsK
LSAgICAgICAgICAgIHJhd1NvY2tldC5jbG9zZSgpOwotICAgICAgICAgICAgcmF3U29ja2V0ID0g
bnVsbDsKLSAgICAgICAgICAgIG91dCA9IG51bGw7Ci0KLSAgICAgICAgICAgIGV4ZWN1dG9yLmV4
ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAg
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgIGV2ZW50TGlzdGVuZXIu
b25UQ1BDbG9zZSgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAg
cmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjbG9zZSByYXdTb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2Uo
KSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VuZHMgYSBtZXNzYWdlIG9u
IHRoZSBzb2NrZXQuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgZXhlY3V0b3IgdGhyZWFk
LgotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNlbmQoU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICAg
IExvZy52KFRBRywgIlNlbmQ6ICIgKyBtZXNzYWdlKTsKLQotICAgICAgc3luY2hyb25pemVkIChy
YXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgIGlmIChvdXQgPT0gbnVsbCkgewotICAgICAgICAgIHJl
cG9ydEVycm9yKCJTZW5kaW5nIGRhdGEgb24gY2xvc2VkIHNvY2tldC4iKTsKLSAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQud3JpdGUobWVzc2FnZSArICJcbiIpOwot
ICAgICAgICBvdXQuZmx1c2goKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNs
YXNzIFRDUFNvY2tldFNlcnZlciBleHRlbmRzIFRDUFNvY2tldCB7Ci0gICAgLy8gU2VydmVyIHNv
Y2tldCBpcyBhbHNvIGd1YXJkZWQgYnkgcmF3U29ja2V0TG9jay4KLSAgICBwcml2YXRlIFNlcnZl
clNvY2tldCBzZXJ2ZXJTb2NrZXQ7Ci0KLSAgICBmaW5hbCBwcml2YXRlIEluZXRBZGRyZXNzIGFk
ZHJlc3M7Ci0gICAgZmluYWwgcHJpdmF0ZSBpbnQgcG9ydDsKLQotICAgIHB1YmxpYyBUQ1BTb2Nr
ZXRTZXJ2ZXIoSW5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQpIHsKLSAgICAgIHRoaXMuYWRk
cmVzcyA9IGFkZHJlc3M7Ci0gICAgICB0aGlzLnBvcnQgPSBwb3J0OwotICAgIH0KLQotICAgIC8q
KiBPcGVucyBhIGxpc3RlbmluZyBzb2NrZXQgYW5kIHdhaXRzIGZvciBhIGNvbm5lY3Rpb24uICov
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNvY2tldCBjb25uZWN0KCkgewotICAgICAgTG9n
LmQoVEFHLCAiTGlzdGVuaW5nIG9uIFsiICsgYWRkcmVzcy5nZXRIb3N0QWRkcmVzcygpICsgIl06
IiArIEludGVnZXIudG9TdHJpbmcocG9ydCkpOwotCi0gICAgICBmaW5hbCBTZXJ2ZXJTb2NrZXQg
dGVtcFNvY2tldDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHRlbXBTb2NrZXQgPSBuZXcgU2VydmVy
U29ja2V0KHBvcnQsIDAsIGFkZHJlc3MpOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkg
ewotICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0OiAi
ICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAg
ICAgc3luY2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgIGlmIChzZXJ2ZXJTb2Nr
ZXQgIT0gbnVsbCkgewotICAgICAgICAgIExvZy5lKFRBRywgIlNlcnZlciByYXdTb2NrZXQgd2Fz
IGFscmVhZHkgbGlzdGVuaW5nIGFuZCBuZXcgd2lsbCBiZSBvcGVuZWQuIik7Ci0gICAgICAgIH0K
LQotICAgICAgICBzZXJ2ZXJTb2NrZXQgPSB0ZW1wU29ja2V0OwotICAgICAgfQotCi0gICAgICB0
cnkgewotICAgICAgICByZXR1cm4gdGVtcFNvY2tldC5hY2NlcHQoKTsKLSAgICAgIH0gY2F0Y2gg
KElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byByZWNlaXZl
IGNvbm5lY3Rpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwot
ICAgICAgfQotICAgIH0KLQotICAgIC8qKiBDbG9zZXMgdGhlIGxpc3RlbmluZyBzb2NrZXQgYW5k
IGNhbGxzIHN1cGVyLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc2Nvbm5l
Y3QoKSB7Ci0gICAgICB0cnkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExvY2sp
IHsKLSAgICAgICAgICBpZiAoc2VydmVyU29ja2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNl
cnZlclNvY2tldC5jbG9zZSgpOwotICAgICAgICAgICAgc2VydmVyU29ja2V0ID0gbnVsbDsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAg
ICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjbG9zZSBzZXJ2ZXIgc29ja2V0OiAiICsgZS5n
ZXRNZXNzYWdlKCkpOwotICAgICAgfQotCi0gICAgICBzdXBlci5kaXNjb25uZWN0KCk7Ci0gICAg
fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTZXJ2ZXIoKSB7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFRDUFNvY2tldENs
aWVudCBleHRlbmRzIFRDUFNvY2tldCB7Ci0gICAgZmluYWwgcHJpdmF0ZSBJbmV0QWRkcmVzcyBh
ZGRyZXNzOwotICAgIGZpbmFsIHByaXZhdGUgaW50IHBvcnQ7Ci0KLSAgICBwdWJsaWMgVENQU29j
a2V0Q2xpZW50KEluZXRBZGRyZXNzIGFkZHJlc3MsIGludCBwb3J0KSB7Ci0gICAgICB0aGlzLmFk
ZHJlc3MgPSBhZGRyZXNzOwotICAgICAgdGhpcy5wb3J0ID0gcG9ydDsKLSAgICB9Ci0KLSAgICAv
KiogQ29ubmVjdHMgdG8gdGhlIHBlZXIuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNv
Y2tldCBjb25uZWN0KCkgewotICAgICAgTG9nLmQoVEFHLCAiQ29ubmVjdGluZyB0byBbIiArIGFk
ZHJlc3MuZ2V0SG9zdEFkZHJlc3MoKSArICJdOiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHBvcnQpKTsK
LQotICAgICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIG5ldyBTb2NrZXQoYWRkcmVzcywgcG9ydCk7
Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJG
YWlsZWQgdG8gY29ubmVjdDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4g
aXNTZXJ2ZXIoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxlci5qYXZh
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9VbmhhbmRsZWRFeGNl
cHRpb25IYW5kbGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9VbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyLmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSw4NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90
LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQu
YXBwLkFsZXJ0RGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7
Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1
ZTsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5TY3JvbGxWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lk
Z2V0LlRleHRWaWV3OwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZh
LmlvLlN0cmluZ1dyaXRlcjsKLQotLyoqCi0gKiBTaW5nbGV0b24gaGVscGVyOiBpbnN0YWxsIGEg
ZGVmYXVsdCB1bmhhbmRsZWQgZXhjZXB0aW9uIGhhbmRsZXIgd2hpY2ggc2hvd3MKLSAqIGFuIGlu
Zm9ybWF0aXZlIGRpYWxvZyBhbmQga2lsbHMgdGhlIGFwcC4gIFVzZWZ1bCBmb3IgYXBwcyB3aG9z
ZQotICogZXJyb3ItaGFuZGxpbmcgY29uc2lzdHMgb2YgdGhyb3dpbmcgUnVudGltZUV4Y2VwdGlv
bnMuCi0gKiBOT1RFOiBhbG1vc3QgYWx3YXlzIG1vcmUgdXNlZnVsIHRvCi0gKiBUaHJlYWQuc2V0
RGVmYXVsdFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcigpIHJhdGhlciB0aGFuCi0gKiBUaHJlYWQu
c2V0VW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKCksIHRvIGFwcGx5IHRvIGJhY2tncm91bmQgdGhy
ZWFkcyBhcyB3ZWxsLgotICovCi1wdWJsaWMgY2xhc3MgVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxl
ciBpbXBsZW1lbnRzIFRocmVhZC5VbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIgewotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFwcFJUQ01vYmlsZUFjdGl2aXR5IjsKLSAgcHJp
dmF0ZSBmaW5hbCBBY3Rpdml0eSBhY3Rpdml0eTsKLQotICBwdWJsaWMgVW5oYW5kbGVkRXhjZXB0
aW9uSGFuZGxlcihmaW5hbCBBY3Rpdml0eSBhY3Rpdml0eSkgewotICAgIHRoaXMuYWN0aXZpdHkg
PSBhY3Rpdml0eTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uKFRocmVh
ZCB1bnVzZWRUaHJlYWQsIGZpbmFsIFRocm93YWJsZSBlKSB7Ci0gICAgYWN0aXZpdHkucnVuT25V
aVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgU3RyaW5nIHRpdGxlID0gIkZhdGFsIGVycm9yOiAiICsgZ2V0
VG9wTGV2ZWxDYXVzZU1lc3NhZ2UoZSk7Ci0gICAgICAgIFN0cmluZyBtc2cgPSBnZXRSZWN1cnNp
dmVTdGFja1RyYWNlKGUpOwotICAgICAgICBUZXh0VmlldyBlcnJvclZpZXcgPSBuZXcgVGV4dFZp
ZXcoYWN0aXZpdHkpOwotICAgICAgICBlcnJvclZpZXcuc2V0VGV4dChtc2cpOwotICAgICAgICBl
cnJvclZpZXcuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfU1AsIDgpOwotICAg
ICAgICBTY3JvbGxWaWV3IHNjcm9sbGluZ0NvbnRhaW5lciA9IG5ldyBTY3JvbGxWaWV3KGFjdGl2
aXR5KTsKLSAgICAgICAgc2Nyb2xsaW5nQ29udGFpbmVyLmFkZFZpZXcoZXJyb3JWaWV3KTsKLSAg
ICAgICAgTG9nLmUoVEFHLCB0aXRsZSArICJcblxuIiArIG1zZyk7Ci0gICAgICAgIERpYWxvZ0lu
dGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRGlhbG9nSW50ZXJmYWNlLk9u
Q2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMg
dm9pZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgewotICAgICAg
ICAgICAgZGlhbG9nLmRpc21pc3MoKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVy
ID0gbmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoYWN0aXZpdHkpOwotICAgICAgICBidWlsZGVyLnNl
dFRpdGxlKHRpdGxlKQotICAgICAgICAgICAgLnNldFZpZXcoc2Nyb2xsaW5nQ29udGFpbmVyKQot
ICAgICAgICAgICAgLnNldFBvc2l0aXZlQnV0dG9uKCJFeGl0IiwgbGlzdGVuZXIpCi0gICAgICAg
ICAgICAuc2hvdygpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUg
TWVzc2FnZSBhdHRhY2hlZCB0byB0aGUgb3JpZ2luYWwgQ2F1c2Ugb2YgfHR8LgotICBwcml2YXRl
IHN0YXRpYyBTdHJpbmcgZ2V0VG9wTGV2ZWxDYXVzZU1lc3NhZ2UoVGhyb3dhYmxlIHQpIHsKLSAg
ICBUaHJvd2FibGUgdG9wTGV2ZWxDYXVzZSA9IHQ7Ci0gICAgd2hpbGUgKHRvcExldmVsQ2F1c2Uu
Z2V0Q2F1c2UoKSAhPSBudWxsKSB7Ci0gICAgICB0b3BMZXZlbENhdXNlID0gdG9wTGV2ZWxDYXVz
ZS5nZXRDYXVzZSgpOwotICAgIH0KLSAgICByZXR1cm4gdG9wTGV2ZWxDYXVzZS5nZXRNZXNzYWdl
KCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgU3RyaW5nIG9mIHRoZSBz
dGFja3RyYWNlIGluIHx0fCwgcmVjdXJzaXZlbHkKLSAgLy8gdGhyb3VnaCBhbGwgQ2F1c2VzIHRo
YXQgbGVkIHRvIHx0fC4KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFJlY3Vyc2l2ZVN0YWNr
VHJhY2UoVGhyb3dhYmxlIHQpIHsKLSAgICBTdHJpbmdXcml0ZXIgd3JpdGVyID0gbmV3IFN0cmlu
Z1dyaXRlcigpOwotICAgIHQucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcih3cml0ZXIp
KTsKLSAgICByZXR1cm4gd3JpdGVyLnRvU3RyaW5nKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3Jj
L29yZy9hcHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50LmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNvY2tldENoYW5uZWxDbGllbnQu
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dl
YlNvY2tldENoYW5uZWxDbGllbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI5NiArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1w
b3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBv
cnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5Bc3luY0h0
dHBFdmVudHM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC51
dGlsLkxvZzsKLQotaW1wb3J0IGRlLnRhdmVuZG8uYXV0b2JhaG4uV2ViU29ja2V0LldlYlNvY2tl
dENvbm5lY3Rpb25PYnNlcnZlcjsKLWltcG9ydCBkZS50YXZlbmRvLmF1dG9iYWhuLldlYlNvY2tl
dENvbm5lY3Rpb247Ci1pbXBvcnQgZGUudGF2ZW5kby5hdXRvYmFobi5XZWJTb2NrZXRFeGNlcHRp
b247Ci0KLWltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qc29uLkpT
T05PYmplY3Q7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3lu
dGF4RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0vKioKLSAqIFdl
YlNvY2tldCBjbGllbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogPHA+QWxsIHB1YmxpYyBtZXRo
b2RzIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBhIGxvb3BlciBleGVjdXRvciB0aHJlYWQKLSAqIHBh
c3NlZCBpbiBhIGNvbnN0cnVjdG9yLCBvdGhlcndpc2UgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3du
LgotICogQWxsIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBvbiB0aGUgc2FtZSB0aHJlYWQuCi0gKi8K
LQotcHVibGljIGNsYXNzIFdlYlNvY2tldENoYW5uZWxDbGllbnQgewotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBTdHJpbmcgVEFHID0gIldTQ2hhbm5lbFJUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBDTE9TRV9USU1FT1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBmaW5hbCBXZWJT
b2NrZXRDaGFubmVsRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIGhhbmRs
ZXI7Ci0gIHByaXZhdGUgV2ViU29ja2V0Q29ubmVjdGlvbiB3czsKLSAgcHJpdmF0ZSBXZWJTb2Nr
ZXRPYnNlcnZlciB3c09ic2VydmVyOwotICBwcml2YXRlIFN0cmluZyB3c1NlcnZlclVybDsKLSAg
cHJpdmF0ZSBTdHJpbmcgcG9zdFNlcnZlclVybDsKLSAgcHJpdmF0ZSBTdHJpbmcgcm9vbUlEOwot
ICBwcml2YXRlIFN0cmluZyBjbGllbnRJRDsKLSAgcHJpdmF0ZSBXZWJTb2NrZXRDb25uZWN0aW9u
U3RhdGUgc3RhdGU7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGNsb3NlRXZlbnRMb2NrID0gbmV3
IE9iamVjdCgpOwotICBwcml2YXRlIGJvb2xlYW4gY2xvc2VFdmVudDsKLSAgLy8gV2ViU29ja2V0
IHNlbmQgcXVldWUuIE1lc3NhZ2VzIGFyZSBhZGRlZCB0byB0aGUgcXVldWUgd2hlbiBXZWJTb2Nr
ZXQKLSAgLy8gY2xpZW50IGlzIG5vdCByZWdpc3RlcmVkIGFuZCBhcmUgY29uc3VtZWQgaW4gcmVn
aXN0ZXIoKSBjYWxsLgotICBwcml2YXRlIGZpbmFsIExpbmtlZExpc3Q8U3RyaW5nPiB3c1NlbmRR
dWV1ZTsKLQotICAvKioKLSAgICogUG9zc2libGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gc3RhdGVz
LgotICAgKi8KLSAgcHVibGljIGVudW0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlIHsgTkVXLCBD
T05ORUNURUQsIFJFR0lTVEVSRUQsIENMT1NFRCwgRVJST1IgfQotCi0gIC8qKgotICAgKiBDYWxs
YmFjayBpbnRlcmZhY2UgZm9yIG1lc3NhZ2VzIGRlbGl2ZXJlZCBvbiBXZWJTb2NrZXQuCi0gICAq
IEFsbCBldmVudHMgYXJlIGRpc3BhdGNoZWQgZnJvbSBhIGxvb3BlciBleGVjdXRvciB0aHJlYWQu
Ci0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIFdlYlNvY2tldENoYW5uZWxFdmVudHMgewotICAg
IHZvaWQgb25XZWJTb2NrZXRNZXNzYWdlKGZpbmFsIFN0cmluZyBtZXNzYWdlKTsKLSAgICB2b2lk
IG9uV2ViU29ja2V0Q2xvc2UoKTsKLSAgICB2b2lkIG9uV2ViU29ja2V0RXJyb3IoZmluYWwgU3Ry
aW5nIGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50
KEhhbmRsZXIgaGFuZGxlciwgV2ViU29ja2V0Q2hhbm5lbEV2ZW50cyBldmVudHMpIHsKLSAgICB0
aGlzLmhhbmRsZXIgPSBoYW5kbGVyOwotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICAgIHJv
b21JRCA9IG51bGw7Ci0gICAgY2xpZW50SUQgPSBudWxsOwotICAgIHdzU2VuZFF1ZXVlID0gbmV3
IExpbmtlZExpc3Q8U3RyaW5nPigpOwotICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0
YXRlLk5FVzsKLSAgfQotCi0gIHB1YmxpYyBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUgZ2V0U3Rh
dGUoKSB7Ci0gICAgcmV0dXJuIHN0YXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY29ubmVjdChm
aW5hbCBTdHJpbmcgd3NVcmwsIGZpbmFsIFN0cmluZyBwb3N0VXJsKSB7Ci0gICAgY2hlY2tJZkNh
bGxlZE9uVmFsaWRUaHJlYWQoKTsKLSAgICBpZiAoc3RhdGUgIT0gV2ViU29ja2V0Q29ubmVjdGlv
blN0YXRlLk5FVykgewotICAgICAgTG9nLmUoVEFHLCAiV2ViU29ja2V0IGlzIGFscmVhZHkgY29u
bmVjdGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3c1NlcnZlclVybCA9IHdzVXJs
OwotICAgIHBvc3RTZXJ2ZXJVcmwgPSBwb3N0VXJsOwotICAgIGNsb3NlRXZlbnQgPSBmYWxzZTsK
LQotICAgIExvZy5kKFRBRywgIkNvbm5lY3RpbmcgV2ViU29ja2V0IHRvOiAiICsgd3NVcmwgKyAi
LiBQb3N0IFVSTDogIiArIHBvc3RVcmwpOwotICAgIHdzID0gbmV3IFdlYlNvY2tldENvbm5lY3Rp
b24oKTsKLSAgICB3c09ic2VydmVyID0gbmV3IFdlYlNvY2tldE9ic2VydmVyKCk7Ci0gICAgdHJ5
IHsKLSAgICAgIHdzLmNvbm5lY3QobmV3IFVSSSh3c1NlcnZlclVybCksIHdzT2JzZXJ2ZXIpOwot
ICAgIH0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigi
VVJJIGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gY2F0Y2ggKFdlYlNvY2tldEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXJy
b3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVn
aXN0ZXIoZmluYWwgU3RyaW5nIHJvb21JRCwgZmluYWwgU3RyaW5nIGNsaWVudElEKSB7Ci0gICAg
Y2hlY2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKTsKLSAgICB0aGlzLnJvb21JRCA9IHJvb21JRDsK
LSAgICB0aGlzLmNsaWVudElEID0gY2xpZW50SUQ7Ci0gICAgaWYgKHN0YXRlICE9IFdlYlNvY2tl
dENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgIExvZy53KFRBRywgIldlYlNvY2tl
dCByZWdpc3RlcigpIGluIHN0YXRlICIgKyBzdGF0ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIExvZy5kKFRBRywgIlJlZ2lzdGVyaW5nIFdlYlNvY2tldCBmb3Igcm9vbSAiICsgcm9vbUlE
ICsgIi4gQ2xpZW50SUQ6ICIgKyBjbGllbnRJRCk7Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3
IEpTT05PYmplY3QoKTsKLSAgICB0cnkgewotICAgICAganNvbi5wdXQoImNtZCIsICJyZWdpc3Rl
ciIpOwotICAgICAganNvbi5wdXQoInJvb21pZCIsIHJvb21JRCk7Ci0gICAgICBqc29uLnB1dCgi
Y2xpZW50aWQiLCBjbGllbnRJRCk7Ci0gICAgICBMb2cuZChUQUcsICJDLT5XU1M6ICIgKyBqc29u
LnRvU3RyaW5nKCkpOwotICAgICAgd3Muc2VuZFRleHRNZXNzYWdlKGpzb24udG9TdHJpbmcoKSk7
Ci0gICAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5SRUdJU1RFUkVEOwotICAg
ICAgLy8gU2VuZCBhbnkgcHJldmlvdXNseSBhY2N1bXVsYXRlZCBtZXNzYWdlcy4KLSAgICAgIGZv
ciAoU3RyaW5nIHNlbmRNZXNzYWdlIDogd3NTZW5kUXVldWUpIHsKLSAgICAgICAgc2VuZChzZW5k
TWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgICB3c1NlbmRRdWV1ZS5jbGVhcigpOwotICAgIH0gY2F0
Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIldlYlNvY2tldCByZWdp
c3RlciBKU09OIGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1
YmxpYyB2b2lkIHNlbmQoU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxp
ZFRocmVhZCgpOwotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgIGNhc2UgTkVXOgotICAgICAg
Y2FzZSBDT05ORUNURUQ6Ci0gICAgICAgIC8vIFN0b3JlIG91dGdvaW5nIG1lc3NhZ2VzIGFuZCBz
ZW5kIHRoZW0gYWZ0ZXIgd2Vic29ja2V0IGNsaWVudAotICAgICAgICAvLyBpcyByZWdpc3RlcmVk
LgotICAgICAgICBMb2cuZChUQUcsICJXUyBBQ0M6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgd3NT
ZW5kUXVldWUuYWRkKG1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgICBjYXNlIEVSUk9S
OgotICAgICAgY2FzZSBDTE9TRUQ6Ci0gICAgICAgIExvZy5lKFRBRywgIldlYlNvY2tldCBzZW5k
KCkgaW4gZXJyb3Igb3IgY2xvc2VkIHN0YXRlIDogIiArIG1lc3NhZ2UpOwotICAgICAgICByZXR1
cm47Ci0gICAgICBjYXNlIFJFR0lTVEVSRUQ6Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5l
dyBKU09OT2JqZWN0KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAganNvbi5wdXQoImNtZCIs
ICJzZW5kIik7Ci0gICAgICAgICAganNvbi5wdXQoIm1zZyIsIG1lc3NhZ2UpOwotICAgICAgICAg
IG1lc3NhZ2UgPSBqc29uLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiQy0+V1NT
OiAiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgd3Muc2VuZFRleHRNZXNzYWdlKG1lc3NhZ2UpOwot
ICAgICAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICByZXBvcnRFcnJv
cigiV2ViU29ja2V0IHNlbmQgSlNPTiBlcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAg
ICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvLyBUaGlzIGNhbGwgY2FuIGJl
IHVzZWQgdG8gc2VuZCBXZWJTb2NrZXQgbWVzc2FnZXMgYmVmb3JlIFdlYlNvY2tldAotICAvLyBj
b25uZWN0aW9uIGlzIG9wZW5lZC4KLSAgcHVibGljIHZvaWQgcG9zdChTdHJpbmcgbWVzc2FnZSkg
ewotICAgIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7Ci0gICAgc2VuZFdTU01lc3NhZ2Uo
IlBPU1QiLCBtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3QoYm9vbGVh
biB3YWl0Rm9yQ29tcGxldGUpIHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxpZFRocmVhZCgpOwot
ICAgIExvZy5kKFRBRywgIkRpc2Nvbm5lY3QgV2ViU29ja2V0LiBTdGF0ZTogIiArIHN0YXRlKTsK
LSAgICBpZiAoc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLlJFR0lTVEVSRUQpIHsK
LSAgICAgIC8vIFNlbmQgImJ5ZSIgdG8gV2ViU29ja2V0IHNlcnZlci4KLSAgICAgIHNlbmQoIntc
InR5cGVcIjogXCJieWVcIn0iKTsKLSAgICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0
YXRlLkNPTk5FQ1RFRDsKLSAgICAgIC8vIFNlbmQgaHR0cCBERUxFVEUgdG8gaHR0cCBXZWJTb2Nr
ZXQgc2VydmVyLgotICAgICAgc2VuZFdTU01lc3NhZ2UoIkRFTEVURSIsICIiKTsKLSAgICB9Ci0g
ICAgLy8gQ2xvc2UgV2ViU29ja2V0IGluIENPTk5FQ1RFRCBvciBFUlJPUiBzdGF0ZXMgb25seS4K
LSAgICBpZiAoc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCB8fCBz
dGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgIHdzLmRpc2Nv
bm5lY3QoKTsKLSAgICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNMT1NFRDsK
LQotICAgICAgLy8gV2FpdCBmb3Igd2Vic29ja2V0IGNsb3NlIGV2ZW50IHRvIHByZXZlbnQgd2Vi
c29ja2V0IGxpYnJhcnkgZnJvbQotICAgICAgLy8gc2VuZGluZyBhbnkgcGVuZGluZyBtZXNzYWdl
cyB0byBkZWxldGVkIGxvb3BlciB0aHJlYWQuCi0gICAgICBpZiAod2FpdEZvckNvbXBsZXRlKSB7
Ci0gICAgICAgIHN5bmNocm9uaXplZCAoY2xvc2VFdmVudExvY2spIHsKLSAgICAgICAgICB3aGls
ZSAoIWNsb3NlRXZlbnQpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIGNsb3Nl
RXZlbnRMb2NrLndhaXQoQ0xPU0VfVElNRU9VVCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAg
ICBMb2cuZShUQUcsICJXYWl0IGVycm9yOiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgTG9nLmQoVEFH
LCAiRGlzY29ubmVjdGluZyBXZWJTb2NrZXQgZG9uZS4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9p
ZCByZXBvcnRFcnJvcihmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgTG9nLmUoVEFH
LCBlcnJvck1lc3NhZ2UpOwotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHN0YXRl
ICE9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5FUlJPUikgewotICAgICAgICAgIHN0YXRlID0g
V2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkVSUk9SOwotICAgICAgICAgIGV2ZW50cy5vbldlYlNv
Y2tldEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAg
fQotCi0gIC8vIEFzeW5jaHJvbm91c2x5IHNlbmQgUE9TVC9ERUxFVEUgdG8gV2ViU29ja2V0IHNl
cnZlci4KLSAgcHJpdmF0ZSB2b2lkIHNlbmRXU1NNZXNzYWdlKGZpbmFsIFN0cmluZyBtZXRob2Qs
IGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgU3RyaW5nIHBvc3RVcmwgPSBwb3N0U2VydmVy
VXJsICsgIi8iICsgcm9vbUlEICsgIi8iICsgY2xpZW50SUQ7Ci0gICAgTG9nLmQoVEFHLCAiV1Mg
IiArIG1ldGhvZCArICIgOiAiICsgcG9zdFVybCArICIgOiAiICsgbWVzc2FnZSk7Ci0gICAgQXN5
bmNIdHRwVVJMQ29ubmVjdGlvbiBodHRwQ29ubmVjdGlvbiA9Ci0gICAgICAgIG5ldyBBc3luY0h0
dHBVUkxDb25uZWN0aW9uKG1ldGhvZCwgcG9zdFVybCwgbWVzc2FnZSwgbmV3IEFzeW5jSHR0cEV2
ZW50cygpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0
dHBFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigi
V1MgIiArIG1ldGhvZCArICIgZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIH0K
LQotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cENvbXBs
ZXRlKFN0cmluZyByZXNwb25zZSkge30KLSAgICAgICAgfSk7Ci0gICAgaHR0cENvbm5lY3Rpb24u
c2VuZCgpOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgZGVidWdnaW5nIHB1cnBvc2Vz
LiBFbnN1cmVzIHRoYXQgV2ViU29ja2V0IG1ldGhvZCBpcwotICAvLyBjYWxsZWQgb24gYSBsb29w
ZXIgdGhyZWFkLgotICBwcml2YXRlIHZvaWQgY2hlY2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKSB7
Ci0gICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0gaGFuZGxlci5nZXRMb29wZXIoKS5n
ZXRUaHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV2Vi
U29ja2V0IG1ldGhvZCBpcyBub3QgY2FsbGVkIG9uIHZhbGlkIHRocmVhZCIpOwotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgY2xhc3MgV2ViU29ja2V0T2JzZXJ2ZXIgaW1wbGVtZW50cyBXZWJTb2Nr
ZXRDb25uZWN0aW9uT2JzZXJ2ZXIgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
T3BlbigpIHsKLSAgICAgIExvZy5kKFRBRywgIldlYlNvY2tldCBjb25uZWN0aW9uIG9wZW5lZCB0
bzogIiArIHdzU2VydmVyVXJsKTsKLSAgICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7
Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
ICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEOwotICAgICAgICAg
IC8vIENoZWNrIGlmIHdlIGhhdmUgcGVuZGluZyByZWdpc3RlciByZXF1ZXN0LgotICAgICAgICAg
IGlmIChyb29tSUQgIT0gbnVsbCAmJiBjbGllbnRJRCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBy
ZWdpc3Rlcihyb29tSUQsIGNsaWVudElEKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
IH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xvc2UoV2Vi
U29ja2V0Q2xvc2VOb3RpZmljYXRpb24gY29kZSwgU3RyaW5nIHJlYXNvbikgewotICAgICAgTG9n
LmQoVEFHLCAiV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkLiBDb2RlOiAiICsgY29kZSArICIu
IFJlYXNvbjogIiArIHJlYXNvbiArICIuIFN0YXRlOiAiCi0gICAgICAgICAgICAgICsgc3RhdGUp
OwotICAgICAgc3luY2hyb25pemVkIChjbG9zZUV2ZW50TG9jaykgewotICAgICAgICBjbG9zZUV2
ZW50ID0gdHJ1ZTsKLSAgICAgICAgY2xvc2VFdmVudExvY2subm90aWZ5KCk7Ci0gICAgICB9Ci0g
ICAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGlmIChzdGF0ZSAhPSBXZWJTb2Nr
ZXRDb25uZWN0aW9uU3RhdGUuQ0xPU0VEKSB7Ci0gICAgICAgICAgICBzdGF0ZSA9IFdlYlNvY2tl
dENvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7Ci0gICAgICAgICAgICBldmVudHMub25XZWJTb2NrZXRD
bG9zZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0TWVzc2FnZShTdHJpbmcgcGF5bG9hZCkg
ewotICAgICAgTG9nLmQoVEFHLCAiV1NTLT5DOiAiICsgcGF5bG9hZCk7Ci0gICAgICBmaW5hbCBT
dHJpbmcgbWVzc2FnZSA9IHBheWxvYWQ7Ci0gICAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICAgIGlmIChzdGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVECi0g
ICAgICAgICAgICAgIHx8IHN0YXRlID09IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5SRUdJU1RF
UkVEKSB7Ci0gICAgICAgICAgICBldmVudHMub25XZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgb25SYXdUZXh0TWVzc2FnZShieXRlW10gcGF5bG9hZCkge30KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQmluYXJ5TWVzc2FnZShieXRlW10gcGF5
bG9hZCkge30KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNv
Y2tldFJUQ0NsaWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9XZWJTb2NrZXRSVENDbGllbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNvY2tldFJUQ0NsaWVudC5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsNDE5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFw
cHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlJvb21QYXJhbWV0ZXJz
RmV0Y2hlci5Sb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHM7Ci1pbXBvcnQgb3JnLmFwcHNwb3Qu
YXBwcnRjLldlYlNvY2tldENoYW5uZWxDbGllbnQuV2ViU29ja2V0Q2hhbm5lbEV2ZW50czsKLWlt
cG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuV2ViU29ja2V0Q2hhbm5lbENsaWVudC5XZWJTb2NrZXRD
b25uZWN0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRw
VVJMQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5Bc3luY0h0dHBV
UkxDb25uZWN0aW9uLkFzeW5jSHR0cEV2ZW50czsKLQotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxl
cjsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC51dGls
LkxvZzsKLQotaW1wb3J0IG9yZy5qc29uLkpTT05BcnJheTsKLWltcG9ydCBvcmcuanNvbi5KU09O
RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qc29uLkpTT05PYmplY3Q7Ci1pbXBvcnQgb3JnLndlYnJ0
Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci0K
LS8qKgotICogTmVnb3RpYXRlcyBzaWduYWxpbmcgZm9yIGNoYXR0aW5nIHdpdGggaHR0cHM6Ly9h
cHByLnRjICJyb29tcyIuCi0gKiBVc2VzIHRoZSBjbGllbnQ8LT5zZXJ2ZXIgc3BlY2lmaWNzIG9m
IHRoZSBhcHBydGMgQXBwRW5naW5lIHdlYmFwcC4KLSAqCi0gKiA8cD5UbyB1c2U6IGNyZWF0ZSBh
biBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCAocmVnaXN0ZXJpbmcgYSBtZXNzYWdlIGhhbmRsZXIp
IGFuZAotICogY2FsbCBjb25uZWN0VG9Sb29tKCkuICBPbmNlIHJvb20gY29ubmVjdGlvbiBpcyBl
c3RhYmxpc2hlZAotICogb25Db25uZWN0ZWRUb1Jvb20oKSBjYWxsYmFjayB3aXRoIHJvb20gcGFy
YW1ldGVycyBpcyBpbnZva2VkLgotICogTWVzc2FnZXMgdG8gb3RoZXIgcGFydHkgKHdpdGggbG9j
YWwgSWNlIGNhbmRpZGF0ZXMgYW5kIGFuc3dlciBTRFApIGNhbgotICogYmUgc2VudCBhZnRlciBX
ZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4KLSAqLwotcHVibGljIGNsYXNzIFdl
YlNvY2tldFJUQ0NsaWVudCBpbXBsZW1lbnRzIEFwcFJUQ0NsaWVudCwgV2ViU29ja2V0Q2hhbm5l
bEV2ZW50cyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV1NSVENDbGll
bnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PTV9KT0lOID0gImpvaW4iOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PTV9NRVNTQUdFID0gIm1lc3NhZ2UiOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PTV9MRUFWRSA9ICJsZWF2ZSI7Ci0KLSAg
cHJpdmF0ZSBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7IE5FVywgQ09OTkVDVEVELCBDTE9TRUQsIEVS
Uk9SIH0KLQotICBwcml2YXRlIGVudW0gTWVzc2FnZVR5cGUgeyBNRVNTQUdFLCBMRUFWRSB9Ci0K
LSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIGhhbmRsZXI7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbml0
aWF0b3I7Ci0gIHByaXZhdGUgU2lnbmFsaW5nRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBXZWJT
b2NrZXRDaGFubmVsQ2xpZW50IHdzQ2xpZW50OwotICBwcml2YXRlIENvbm5lY3Rpb25TdGF0ZSBy
b29tU3RhdGU7Ci0gIHByaXZhdGUgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25Q
YXJhbWV0ZXJzOwotICBwcml2YXRlIFN0cmluZyBtZXNzYWdlVXJsOwotICBwcml2YXRlIFN0cmlu
ZyBsZWF2ZVVybDsKLQotICBwdWJsaWMgV2ViU29ja2V0UlRDQ2xpZW50KFNpZ25hbGluZ0V2ZW50
cyBldmVudHMpIHsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgICByb29tU3RhdGUgPSBD
b25uZWN0aW9uU3RhdGUuTkVXOwotICAgIGZpbmFsIEhhbmRsZXJUaHJlYWQgaGFuZGxlclRocmVh
ZCA9IG5ldyBIYW5kbGVyVGhyZWFkKFRBRyk7Ci0gICAgaGFuZGxlclRocmVhZC5zdGFydCgpOwot
ICAgIGhhbmRsZXIgPSBuZXcgSGFuZGxlcihoYW5kbGVyVGhyZWFkLmdldExvb3BlcigpKTsKLSAg
fQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEFwcFJUQ0NsaWVudCBpbnRlcmZhY2UgaW1wbGVt
ZW50YXRpb24uCi0gIC8vIEFzeW5jaHJvbm91c2x5IGNvbm5lY3QgdG8gYW4gQXBwUlRDIHJvb20g
VVJMIHVzaW5nIHN1cHBsaWVkIGNvbm5lY3Rpb24KLSAgLy8gcGFyYW1ldGVycywgcmV0cmlldmVz
IHJvb20gcGFyYW1ldGVycyBhbmQgY29ubmVjdCB0byBXZWJTb2NrZXQgc2VydmVyLgotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgY29ubmVjdFRvUm9vbShSb29tQ29ubmVjdGlvblBhcmFtZXRl
cnMgY29ubmVjdGlvblBhcmFtZXRlcnMpIHsKLSAgICB0aGlzLmNvbm5lY3Rpb25QYXJhbWV0ZXJz
ID0gY29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBj
b25uZWN0VG9Sb29tSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0RnJvbVJvb20oKSB7Ci0gICAgaGFuZGxlci5w
b3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICBkaXNjb25uZWN0RnJvbVJvb21JbnRlcm5hbCgpOwotICAgICAgICBo
YW5kbGVyLmdldExvb3BlcigpLnF1aXQoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8v
IENvbm5lY3RzIHRvIHJvb20gLSBmdW5jdGlvbiBydW5zIG9uIGEgbG9jYWwgbG9vcGVyIHRocmVh
ZC4KLSAgcHJpdmF0ZSB2b2lkIGNvbm5lY3RUb1Jvb21JbnRlcm5hbCgpIHsKLSAgICBTdHJpbmcg
Y29ubmVjdGlvblVybCA9IGdldENvbm5lY3Rpb25VcmwoY29ubmVjdGlvblBhcmFtZXRlcnMpOwot
ICAgIExvZy5kKFRBRywgIkNvbm5lY3QgdG8gcm9vbTogIiArIGNvbm5lY3Rpb25VcmwpOwotICAg
IHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5ORVc7Ci0gICAgd3NDbGllbnQgPSBuZXcgV2Vi
U29ja2V0Q2hhbm5lbENsaWVudChoYW5kbGVyLCB0aGlzKTsKLQotICAgIFJvb21QYXJhbWV0ZXJz
RmV0Y2hlckV2ZW50cyBjYWxsYmFja3MgPSBuZXcgUm9vbVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRz
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblNpZ25hbGluZ1BhcmFt
ZXRlcnNSZWFkeShmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtcykgewotICAgICAgICBX
ZWJTb2NrZXRSVENDbGllbnQudGhpcy5oYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
ICAgIFdlYlNvY2tldFJUQ0NsaWVudC50aGlzLnNpZ25hbGluZ1BhcmFtZXRlcnNSZWFkeShwYXJh
bXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgb25TaWduYWxpbmdQYXJhbWV0ZXJzRXJyb3IoU3RyaW5nIGRl
c2NyaXB0aW9uKSB7Ci0gICAgICAgIFdlYlNvY2tldFJUQ0NsaWVudC50aGlzLnJlcG9ydEVycm9y
KGRlc2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgbmV3IFJvb21QYXJhbWV0ZXJz
RmV0Y2hlcihjb25uZWN0aW9uVXJsLCBudWxsLCBjYWxsYmFja3MpLm1ha2VSZXF1ZXN0KCk7Ci0g
IH0KLQotICAvLyBEaXNjb25uZWN0IGZyb20gcm9vbSBhbmQgc2VuZCBieWUgbWVzc2FnZXMgLSBy
dW5zIG9uIGEgbG9jYWwgbG9vcGVyIHRocmVhZC4KLSAgcHJpdmF0ZSB2b2lkIGRpc2Nvbm5lY3RG
cm9tUm9vbUludGVybmFsKCkgewotICAgIExvZy5kKFRBRywgIkRpc2Nvbm5lY3QuIFJvb20gc3Rh
dGU6ICIgKyByb29tU3RhdGUpOwotICAgIGlmIChyb29tU3RhdGUgPT0gQ29ubmVjdGlvblN0YXRl
LkNPTk5FQ1RFRCkgewotICAgICAgTG9nLmQoVEFHLCAiQ2xvc2luZyByb29tLiIpOwotICAgICAg
c2VuZFBvc3RNZXNzYWdlKE1lc3NhZ2VUeXBlLkxFQVZFLCBsZWF2ZVVybCwgbnVsbCk7Ci0gICAg
fQotICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7Ci0gICAgaWYgKHdzQ2xp
ZW50ICE9IG51bGwpIHsKLSAgICAgIHdzQ2xpZW50LmRpc2Nvbm5lY3QodHJ1ZSk7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gSGVscGVyIGZ1bmN0aW9ucyB0byBnZXQgY29ubmVjdGlvbiwgcG9zdCBtZXNz
YWdlIGFuZCBsZWF2ZSBtZXNzYWdlIFVSTHMKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29ubmVjdGlv
blVybChSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnMpIHsKLSAg
ICByZXR1cm4gY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbVVybCArICIvIiArIFJPT01fSk9JTiAr
ICIvIiArIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21JZDsKLSAgfQotCi0gIHByaXZhdGUgU3Ry
aW5nIGdldE1lc3NhZ2VVcmwoCi0gICAgICBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVj
dGlvblBhcmFtZXRlcnMsIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVycykg
ewotICAgIHJldHVybiBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tVXJsICsgIi8iICsgUk9PTV9N
RVNTQUdFICsgIi8iICsgY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbUlkCi0gICAgICAgICsgIi8i
ICsgc2lnbmFsaW5nUGFyYW1ldGVycy5jbGllbnRJZDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5n
IGdldExlYXZlVXJsKAotICAgICAgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25Q
YXJhbWV0ZXJzLCBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnMpIHsKLSAg
ICByZXR1cm4gY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbVVybCArICIvIiArIFJPT01fTEVBVkUg
KyAiLyIgKyBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tSWQgKyAiLyIKLSAgICAgICAgKyBzaWdu
YWxpbmdQYXJhbWV0ZXJzLmNsaWVudElkOwotICB9Ci0KLSAgLy8gQ2FsbGJhY2sgaXNzdWVkIHdo
ZW4gcm9vbSBwYXJhbWV0ZXJzIGFyZSBleHRyYWN0ZWQuIFJ1bnMgb24gbG9jYWwKLSAgLy8gbG9v
cGVyIHRocmVhZC4KLSAgcHJpdmF0ZSB2b2lkIHNpZ25hbGluZ1BhcmFtZXRlcnNSZWFkeShmaW5h
bCBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnMpIHsKLSAgICBMb2cuZChU
QUcsICJSb29tIGNvbm5lY3Rpb24gY29tcGxldGVkLiIpOwotICAgIGlmIChjb25uZWN0aW9uUGFy
YW1ldGVycy5sb29wYmFjawotICAgICAgICAmJiAoIXNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlh
dG9yIHx8IHNpZ25hbGluZ1BhcmFtZXRlcnMub2ZmZXJTZHAgIT0gbnVsbCkpIHsKLSAgICAgIHJl
cG9ydEVycm9yKCJMb29wYmFjayByb29tIGlzIGJ1c3kuIik7Ci0gICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmICghY29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2sgJiYgIXNpZ25hbGluZ1Bh
cmFtZXRlcnMuaW5pdGlhdG9yCi0gICAgICAgICYmIHNpZ25hbGluZ1BhcmFtZXRlcnMub2ZmZXJT
ZHAgPT0gbnVsbCkgewotICAgICAgTG9nLncoVEFHLCAiTm8gb2ZmZXIgU0RQIGluIHJvb20gcmVz
cG9uc2UuIik7Ci0gICAgfQotICAgIGluaXRpYXRvciA9IHNpZ25hbGluZ1BhcmFtZXRlcnMuaW5p
dGlhdG9yOwotICAgIG1lc3NhZ2VVcmwgPSBnZXRNZXNzYWdlVXJsKGNvbm5lY3Rpb25QYXJhbWV0
ZXJzLCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLSAgICBsZWF2ZVVybCA9IGdldExlYXZlVXJsKGNv
bm5lY3Rpb25QYXJhbWV0ZXJzLCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLSAgICBMb2cuZChUQUcs
ICJNZXNzYWdlIFVSTDogIiArIG1lc3NhZ2VVcmwpOwotICAgIExvZy5kKFRBRywgIkxlYXZlIFVS
TDogIiArIGxlYXZlVXJsKTsKLSAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVD
VEVEOwotCi0gICAgLy8gRmlyZSBjb25uZWN0aW9uIGFuZCBzaWduYWxpbmcgcGFyYW1ldGVycyBl
dmVudHMuCi0gICAgZXZlbnRzLm9uQ29ubmVjdGVkVG9Sb29tKHNpZ25hbGluZ1BhcmFtZXRlcnMp
OwotCi0gICAgLy8gQ29ubmVjdCBhbmQgcmVnaXN0ZXIgV2ViU29ja2V0IGNsaWVudC4KLSAgICB3
c0NsaWVudC5jb25uZWN0KHNpZ25hbGluZ1BhcmFtZXRlcnMud3NzVXJsLCBzaWduYWxpbmdQYXJh
bWV0ZXJzLndzc1Bvc3RVcmwpOwotICAgIHdzQ2xpZW50LnJlZ2lzdGVyKGNvbm5lY3Rpb25QYXJh
bWV0ZXJzLnJvb21JZCwgc2lnbmFsaW5nUGFyYW1ldGVycy5jbGllbnRJZCk7Ci0gIH0KLQotICAv
LyBTZW5kIGxvY2FsIG9mZmVyIFNEUCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBzZW5kT2ZmZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9u
IHNkcCkgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBD
b25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRp
bmcgb2ZmZXIgU0RQIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7Ci0gICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7
Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInNkcCIsIHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAg
IGpzb25QdXQoanNvbiwgInR5cGUiLCAib2ZmZXIiKTsKLSAgICAgICAgc2VuZFBvc3RNZXNzYWdl
KE1lc3NhZ2VUeXBlLk1FU1NBR0UsIG1lc3NhZ2VVcmwsIGpzb24udG9TdHJpbmcoKSk7Ci0gICAg
ICAgIGlmIChjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgICAgIC8vIElu
IGxvb3BiYWNrIG1vZGUgcmVuYW1lIHRoaXMgb2ZmZXIgdG8gYW5zd2VyIGFuZCByb3V0ZSBpdCBi
YWNrLgotICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbiBzZHBBbnN3ZXIgPSBuZXcgU2Vzc2lv
bkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9t
Q2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAgICAgZXZl
bnRzLm9uUmVtb3RlRGVzY3JpcHRpb24oc2RwQW5zd2VyKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgIH0pOwotICB9Ci0KLSAgLy8gU2VuZCBsb2NhbCBhbnN3ZXIgU0RQIHRvIHRoZSBvdGhlciBw
YXJ0aWNpcGFudC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRBbnN3ZXJTZHAoZmlu
YWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICAgICAgTG9nLmUo
VEFHLCAiU2VuZGluZyBhbnN3ZXIgaW4gbG9vcGJhY2sgbW9kZS4iKTsKLSAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3Qo
KTsKLSAgICAgICAganNvblB1dChqc29uLCAic2RwIiwgc2RwLmRlc2NyaXB0aW9uKTsKLSAgICAg
ICAganNvblB1dChqc29uLCAidHlwZSIsICJhbnN3ZXIiKTsKLSAgICAgICAgd3NDbGllbnQuc2Vu
ZChqc29uLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gU2VuZCBJ
Y2UgY2FuZGlkYXRlIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlk
YXRlKSB7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBu
ZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgImNhbmRpZGF0
ZSIpOwotICAgICAgICBqc29uUHV0KGpzb24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBNTGluZUlu
ZGV4KTsKLSAgICAgICAganNvblB1dChqc29uLCAiaWQiLCBjYW5kaWRhdGUuc2RwTWlkKTsKLSAg
ICAgICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlIiwgY2FuZGlkYXRlLnNkcCk7Ci0gICAgICAg
IGlmIChpbml0aWF0b3IpIHsKLSAgICAgICAgICAvLyBDYWxsIGluaXRpYXRvciBzZW5kcyBpY2Ug
Y2FuZGlkYXRlcyB0byBHQUUgc2VydmVyLgotICAgICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29u
bmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRp
bmcgSUNFIGNhbmRpZGF0ZSBpbiBub24gY29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoTWVzc2FnZVR5
cGUuTUVTU0FHRSwgbWVzc2FnZVVybCwganNvbi50b1N0cmluZygpKTsKLSAgICAgICAgICBpZiAo
Y29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgICAgICAgIGV2ZW50cy5vblJl
bW90ZUljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAvLyBDYWxsIHJlY2VpdmVyIHNlbmRzIGljZSBjYW5kaWRhdGVzIHRvIHdl
YnNvY2tldCBzZXJ2ZXIuCi0gICAgICAgICAgd3NDbGllbnQuc2VuZChqc29uLnRvU3RyaW5nKCkp
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBTZW5kIHJlbW92ZWQg
SWNlIGNhbmRpZGF0ZXMgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlUmVtb3ZhbHMoZmluYWwgSWNlQ2FuZGlk
YXRlW10gY2FuZGlkYXRlcykgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgSlNPTk9i
amVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlw
ZSIsICJyZW1vdmUtY2FuZGlkYXRlcyIpOwotICAgICAgICBKU09OQXJyYXkganNvbkFycmF5ID0g
bmV3IEpTT05BcnJheSgpOwotICAgICAgICBmb3IgKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRh
dGUgOiBjYW5kaWRhdGVzKSB7Ci0gICAgICAgICAganNvbkFycmF5LnB1dCh0b0pzb25DYW5kaWRh
dGUoY2FuZGlkYXRlKSk7Ci0gICAgICAgIH0KLSAgICAgICAganNvblB1dChqc29uLCAiY2FuZGlk
YXRlcyIsIGpzb25BcnJheSk7Ci0gICAgICAgIGlmIChpbml0aWF0b3IpIHsKLSAgICAgICAgICAv
LyBDYWxsIGluaXRpYXRvciBzZW5kcyBpY2UgY2FuZGlkYXRlcyB0byBHQUUgc2VydmVyLgotICAg
ICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAg
ICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcgSUNFIGNhbmRpZGF0ZSByZW1vdmFscyBpbiBu
b24gY29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0K
LSAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoTWVzc2FnZVR5cGUuTUVTU0FHRSwgbWVzc2FnZVVy
bCwganNvbi50b1N0cmluZygpKTsKLSAgICAgICAgICBpZiAoY29ubmVjdGlvblBhcmFtZXRlcnMu
bG9vcGJhY2spIHsKLSAgICAgICAgICAgIGV2ZW50cy5vblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1v
dmVkKGNhbmRpZGF0ZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAvLyBDYWxsIHJlY2VpdmVyIHNlbmRzIGljZSBjYW5kaWRhdGVzIHRvIHdlYnNvY2tldCBzZXJ2
ZXIuCi0gICAgICAgICAgd3NDbGllbnQuc2VuZChqc29uLnRvU3RyaW5nKCkpOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBXZWJTb2Nr
ZXRDaGFubmVsRXZlbnRzIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4KLSAgLy8gQWxsIGV2ZW50
cyBhcmUgY2FsbGVkIGJ5IFdlYlNvY2tldENoYW5uZWxDbGllbnQgb24gYSBsb2NhbCBsb29wZXIg
dGhyZWFkCi0gIC8vIChwYXNzZWQgdG8gV2ViU29ja2V0IGNsaWVudCBjb25zdHJ1Y3RvcikuCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbldlYlNvY2tldE1lc3NhZ2UoZmluYWwgU3RyaW5n
IG1zZykgewotICAgIGlmICh3c0NsaWVudC5nZXRTdGF0ZSgpICE9IFdlYlNvY2tldENvbm5lY3Rp
b25TdGF0ZS5SRUdJU1RFUkVEKSB7Ci0gICAgICBMb2cuZShUQUcsICJHb3QgV2ViU29ja2V0IG1l
c3NhZ2UgaW4gbm9uIHJlZ2lzdGVyZWQgc3RhdGUuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHRyeSB7Ci0gICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdChtc2cpOwot
ICAgICAgU3RyaW5nIG1zZ1RleHQgPSBqc29uLmdldFN0cmluZygibXNnIik7Ci0gICAgICBTdHJp
bmcgZXJyb3JUZXh0ID0ganNvbi5vcHRTdHJpbmcoImVycm9yIik7Ci0gICAgICBpZiAobXNnVGV4
dC5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAganNvbiA9IG5ldyBKU09OT2JqZWN0KG1zZ1RleHQp
OwotICAgICAgICBTdHJpbmcgdHlwZSA9IGpzb24ub3B0U3RyaW5nKCJ0eXBlIik7Ci0gICAgICAg
IGlmICh0eXBlLmVxdWFscygiY2FuZGlkYXRlIikpIHsKLSAgICAgICAgICBldmVudHMub25SZW1v
dGVJY2VDYW5kaWRhdGUodG9KYXZhQ2FuZGlkYXRlKGpzb24pKTsKLSAgICAgICAgfSBlbHNlIGlm
ICh0eXBlLmVxdWFscygicmVtb3ZlLWNhbmRpZGF0ZXMiKSkgewotICAgICAgICAgIEpTT05BcnJh
eSBjYW5kaWRhdGVBcnJheSA9IGpzb24uZ2V0SlNPTkFycmF5KCJjYW5kaWRhdGVzIik7Ci0gICAg
ICAgICAgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyA9IG5ldyBJY2VDYW5kaWRhdGVbY2FuZGlk
YXRlQXJyYXkubGVuZ3RoKCldOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FuZGlk
YXRlQXJyYXkubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgY2FuZGlkYXRlc1tpXSA9IHRv
SmF2YUNhbmRpZGF0ZShjYW5kaWRhdGVBcnJheS5nZXRKU09OT2JqZWN0KGkpKTsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2FuZGlkYXRlc1JlbW92ZWQoY2FuZGlk
YXRlcyk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoImFuc3dlciIpKSB7Ci0gICAg
ICAgICAgaWYgKGluaXRpYXRvcikgewotICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNk
cCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgU2Vzc2lvbkRlc2Ny
aXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlwZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAi
KSk7Ci0gICAgICAgICAgICBldmVudHMub25SZW1vdGVEZXNjcmlwdGlvbihzZHApOwotICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiUmVjZWl2ZWQgYW5zd2VyIGZv
ciBjYWxsIGluaXRpYXRvcjogIiArIG1zZyk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUuZXF1YWxzKCJvZmZlciIpKSB7Ci0gICAgICAgICAgaWYgKCFpbml0aWF0b3IpIHsK
LSAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0
aW9uKAotICAgICAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmlj
YWxGb3JtKHR5cGUpLCBqc29uLmdldFN0cmluZygic2RwIikpOwotICAgICAgICAgICAgZXZlbnRz
Lm9uUmVtb3RlRGVzY3JpcHRpb24oc2RwKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgcmVwb3J0RXJyb3IoIlJlY2VpdmVkIG9mZmVyIGZvciBjYWxsIHJlY2VpdmVyOiAiICsgbXNn
KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoImJ5ZSIpKSB7
Ci0gICAgICAgICAgZXZlbnRzLm9uQ2hhbm5lbENsb3NlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgcmVwb3J0RXJyb3IoIlVuZXhwZWN0ZWQgV2ViU29ja2V0IG1lc3NhZ2U6ICIgKyBt
c2cpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXJyb3JUZXh0ICE9
IG51bGwgJiYgZXJyb3JUZXh0Lmxlbmd0aCgpID4gMCkgewotICAgICAgICAgIHJlcG9ydEVycm9y
KCJXZWJTb2NrZXQgZXJyb3IgbWVzc2FnZTogIiArIGVycm9yVGV4dCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlVuZXhwZWN0ZWQgV2ViU29ja2V0IG1lc3NhZ2U6
ICIgKyBtc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlv
biBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0IG1lc3NhZ2UgSlNPTiBwYXJzaW5n
IGVycm9yOiAiICsgZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgb25XZWJTb2NrZXRDbG9zZSgpIHsKLSAgICBldmVudHMub25DaGFubmVsQ2xv
c2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbldlYlNvY2tldEVycm9y
KFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIHJlcG9ydEVycm9yKCJXZWJTb2NrZXQgZXJyb3I6
ICIgKyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBIZWxwZXIg
ZnVuY3Rpb25zLgotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGVycm9y
TWVzc2FnZSkgewotICAgIExvZy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAgICBoYW5kbGVyLnBv
c3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkVSUk9SKSB7
Ci0gICAgICAgICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkVSUk9SOwotICAgICAgICAg
IGV2ZW50cy5vbkNoYW5uZWxFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBQdXQgYSB8a2V5fC0+fHZhbHVlfCBtYXBwaW5nIGluIHxq
c29ufC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBqc29uUHV0KEpTT05PYmplY3QganNvbiwgU3Ry
aW5nIGtleSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGpzb24ucHV0KGtleSwg
dmFsdWUpOwotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gU2VuZCBTRFAgb3IgSUNF
IGNhbmRpZGF0ZSB0byBhIHJvb20gc2VydmVyLgotICBwcml2YXRlIHZvaWQgc2VuZFBvc3RNZXNz
YWdlKAotICAgICAgZmluYWwgTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUsIGZpbmFsIFN0cmluZyB1
cmwsIGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgU3RyaW5nIGxvZ0luZm8gPSB1cmw7Ci0g
ICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotICAgICAgbG9nSW5mbyArPSAiLiBNZXNzYWdlOiAi
ICsgbWVzc2FnZTsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiQy0+R0FFOiAiICsgbG9nSW5mbyk7
Ci0gICAgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbiBodHRwQ29ubmVjdGlvbiA9Ci0gICAgICAgIG5l
dyBBc3luY0h0dHBVUkxDb25uZWN0aW9uKCJQT1NUIiwgdXJsLCBtZXNzYWdlLCBuZXcgQXN5bmNI
dHRwRXZlbnRzKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lk
IG9uSHR0cEVycm9yKFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHJlcG9ydEVy
cm9yKCJHQUUgUE9TVCBlcnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgfQotCi0g
ICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRwQ29tcGxldGUo
U3RyaW5nIHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT0gTWVzc2Fn
ZVR5cGUuTUVTU0FHRSkgewotICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIEpT
T05PYmplY3Qgcm9vbUpzb24gPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZSk7Ci0gICAgICAgICAg
ICAgICAgU3RyaW5nIHJlc3VsdCA9IHJvb21Kc29uLmdldFN0cmluZygicmVzdWx0Iik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKCJTVUNDRVNTIikpIHsKLSAgICAgICAgICAg
ICAgICAgIHJlcG9ydEVycm9yKCJHQUUgUE9TVCBlcnJvcjogIiArIHJlc3VsdCk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAg
ICAgICAgICAgICAgICByZXBvcnRFcnJvcigiR0FFIFBPU1QgSlNPTiBlcnJvcjogIiArIGUudG9T
dHJpbmcoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotICAgIGh0dHBDb25uZWN0aW9uLnNlbmQoKTsKLSAgfQotCi0gIC8vIENvbnZl
cnRzIGEgSmF2YSBjYW5kaWRhdGUgdG8gYSBKU09OT2JqZWN0LgotICBwcml2YXRlIEpTT05PYmpl
Y3QgdG9Kc29uQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBK
U09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgIGpzb25QdXQoanNvbiwgImxh
YmVsIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgpOwotICAgIGpzb25QdXQoanNvbiwgImlkIiwg
Y2FuZGlkYXRlLnNkcE1pZCk7Ci0gICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlIiwgY2FuZGlk
YXRlLnNkcCk7Ci0gICAgcmV0dXJuIGpzb247Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBhIEpTT04g
Y2FuZGlkYXRlIHRvIGEgSmF2YSBvYmplY3QuCi0gIEljZUNhbmRpZGF0ZSB0b0phdmFDYW5kaWRh
dGUoSlNPTk9iamVjdCBqc29uKSB0aHJvd3MgSlNPTkV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIG5l
dyBJY2VDYW5kaWRhdGUoCi0gICAgICAgIGpzb24uZ2V0U3RyaW5nKCJpZCIpLCBqc29uLmdldElu
dCgibGFiZWwiKSwganNvbi5nZXRTdHJpbmcoImNhbmRpZGF0ZSIpKTsKLSAgfQotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwvQXBwUlRDVXRpbHMuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9BcHBSVENVdGlscy5qYXZh
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9B
cHBSVENVdGlscy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGMudXRpbDsKLQotaW1wb3J0IGFu
ZHJvaWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBBcHBS
VENVdGlscyBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aHJlYWQgc2Fm
ZXR5LgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQXBwUlRDVXRpbHMgewotICBwcml2YXRlIEFw
cFJUQ1V0aWxzKCkge30KLQotICAvKiogSGVscGVyIG1ldGhvZCB3aGljaCB0aHJvd3MgYW4gZXhj
ZXB0aW9uICB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVkLiAqLwotICBwdWJsaWMgc3RhdGlj
IHZvaWQgYXNzZXJ0SXNUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRp
b24pIHsKLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9u
IHRvIGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICAvKiogSGVscGVyIG1ldGhvZCBmb3IgYnVp
bGRpbmcgYSBzdHJpbmcgb2YgdGhyZWFkIGluZm9ybWF0aW9uLiovCi0gIHB1YmxpYyBzdGF0aWMg
U3RyaW5nIGdldFRocmVhZEluZm8oKSB7Ci0gICAgcmV0dXJuICJAW25hbWU9IiArIFRocmVhZC5j
dXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgIiwgaWQ9IiArIFRocmVhZC5jdXJyZW50VGhyZWFk
KCkuZ2V0SWQoKQotICAgICAgICArICJdIjsKLSAgfQotCi0gIC8qKiBJbmZvcm1hdGlvbiBhYm91
dCB0aGUgY3VycmVudCBidWlsZCwgdGFrZW4gZnJvbSBzeXN0ZW0gcHJvcGVydGllcy4gKi8KLSAg
cHVibGljIHN0YXRpYyB2b2lkIGxvZ0RldmljZUluZm8oU3RyaW5nIHRhZykgewotICAgIExvZy5k
KHRhZywgIkFuZHJvaWQgU0RLOiAiICsgQnVpbGQuVkVSU0lPTi5TREtfSU5UICsgIiwgIgotICAg
ICAgICAgICAgKyAiUmVsZWFzZTogIiArIEJ1aWxkLlZFUlNJT04uUkVMRUFTRSArICIsICIKLSAg
ICAgICAgICAgICsgIkJyYW5kOiAiICsgQnVpbGQuQlJBTkQgKyAiLCAiCi0gICAgICAgICAgICAr
ICJEZXZpY2U6ICIgKyBCdWlsZC5ERVZJQ0UgKyAiLCAiCi0gICAgICAgICAgICArICJJZDogIiAr
IEJ1aWxkLklEICsgIiwgIgotICAgICAgICAgICAgKyAiSGFyZHdhcmU6ICIgKyBCdWlsZC5IQVJE
V0FSRSArICIsICIKLSAgICAgICAgICAgICsgIk1hbnVmYWN0dXJlcjogIiArIEJ1aWxkLk1BTlVG
QUNUVVJFUiArICIsICIKLSAgICAgICAgICAgICsgIk1vZGVsOiAiICsgQnVpbGQuTU9ERUwgKyAi
LCAiCi0gICAgICAgICAgICArICJQcm9kdWN0OiAiICsgQnVpbGQuUFJPRFVDVCk7Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FzeW5jSHR0cFVSTENvbm5l
Y3Rpb24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRp
bC9Bc3luY0h0dHBVUkxDb25uZWN0aW9uLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FzeW5jSHR0cFVSTENvbm5lY3Rpb24uamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRo
ZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlv
bjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3Ry
ZWFtOwotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEubmV0
LlNvY2tldFRpbWVvdXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGph
dmEudXRpbC5TY2FubmVyOwotCi0vKioKLSAqIEFzeW5jaHJvbm91cyBodHRwIHJlcXVlc3RzIGlt
cGxlbWVudGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbiB7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIVFRQX1RJTUVPVVRfTVMgPSA4MDAwOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9PUklHSU4gPSAiaHR0cHM6Ly9hcHByLnRj
IjsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWV0aG9kOwotICBwcml2YXRlIGZpbmFsIFN0cmlu
ZyB1cmw7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIG1lc3NhZ2U7Ci0gIHByaXZhdGUgZmluYWwg
QXN5bmNIdHRwRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBTdHJpbmcgY29udGVudFR5cGU7Ci0K
LSAgLyoqCi0gICAqIEh0dHAgcmVxdWVzdHMgY2FsbGJhY2tzLgotICAgKi8KLSAgcHVibGljIGlu
dGVyZmFjZSBBc3luY0h0dHBFdmVudHMgewotICAgIHZvaWQgb25IdHRwRXJyb3IoU3RyaW5nIGVy
cm9yTWVzc2FnZSk7Ci0gICAgdm9pZCBvbkh0dHBDb21wbGV0ZShTdHJpbmcgcmVzcG9uc2UpOwot
ICB9Ci0KLSAgcHVibGljIEFzeW5jSHR0cFVSTENvbm5lY3Rpb24oU3RyaW5nIG1ldGhvZCwgU3Ry
aW5nIHVybCwgU3RyaW5nIG1lc3NhZ2UsIEFzeW5jSHR0cEV2ZW50cyBldmVudHMpIHsKLSAgICB0
aGlzLm1ldGhvZCA9IG1ldGhvZDsKLSAgICB0aGlzLnVybCA9IHVybDsKLSAgICB0aGlzLm1lc3Nh
Z2UgPSBtZXNzYWdlOwotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICB9Ci0KLSAgcHVibGlj
IHZvaWQgc2V0Q29udGVudFR5cGUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0gICAgdGhpcy5jb250
ZW50VHlwZSA9IGNvbnRlbnRUeXBlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2VuZCgpIHsKLSAg
ICBSdW5uYWJsZSBydW5IdHRwID0gbmV3IFJ1bm5hYmxlKCkgewotICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICBzZW5kSHR0cE1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICB9OwotICAg
IG5ldyBUaHJlYWQocnVuSHR0cCkuc3RhcnQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZW5k
SHR0cE1lc3NhZ2UoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5l
Y3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pIG5ldyBVUkwodXJsKS5vcGVuQ29ubmVjdGlvbigp
OwotICAgICAgYnl0ZVtdIHBvc3REYXRhID0gbmV3IGJ5dGVbMF07Ci0gICAgICBpZiAobWVzc2Fn
ZSAhPSBudWxsKSB7Ci0gICAgICAgIHBvc3REYXRhID0gbWVzc2FnZS5nZXRCeXRlcygiVVRGLTgi
KTsKLSAgICAgIH0KLSAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdE1ldGhvZChtZXRob2QpOwot
ICAgICAgY29ubmVjdGlvbi5zZXRVc2VDYWNoZXMoZmFsc2UpOwotICAgICAgY29ubmVjdGlvbi5z
ZXREb0lucHV0KHRydWUpOwotICAgICAgY29ubmVjdGlvbi5zZXRDb25uZWN0VGltZW91dChIVFRQ
X1RJTUVPVVRfTVMpOwotICAgICAgY29ubmVjdGlvbi5zZXRSZWFkVGltZW91dChIVFRQX1RJTUVP
VVRfTVMpOwotICAgICAgLy8gVE9ETyhnbGF6bmV2KSAtIHF1ZXJ5IHJlcXVlc3Qgb3JpZ2luIGZy
b20gcHJlZl9yb29tX3NlcnZlcl91cmxfa2V5IHByZWZlcmVuY2VzLgotICAgICAgY29ubmVjdGlv
bi5hZGRSZXF1ZXN0UHJvcGVydHkoIm9yaWdpbiIsIEhUVFBfT1JJR0lOKTsKLSAgICAgIGJvb2xl
YW4gZG9PdXRwdXQgPSBmYWxzZTsKLSAgICAgIGlmIChtZXRob2QuZXF1YWxzKCJQT1NUIikpIHsK
LSAgICAgICAgZG9PdXRwdXQgPSB0cnVlOwotICAgICAgICBjb25uZWN0aW9uLnNldERvT3V0cHV0
KHRydWUpOwotICAgICAgICBjb25uZWN0aW9uLnNldEZpeGVkTGVuZ3RoU3RyZWFtaW5nTW9kZShw
b3N0RGF0YS5sZW5ndGgpOwotICAgICAgfQotICAgICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwp
IHsKLSAgICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtVHlwZSIs
ICJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBj
b25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29udGVudC1UeXBlIiwgY29udGVudFR5cGUp
OwotICAgICAgfQotCi0gICAgICAvLyBTZW5kIFBPU1QgcmVxdWVzdC4KLSAgICAgIGlmIChkb091
dHB1dCAmJiBwb3N0RGF0YS5sZW5ndGggPiAwKSB7Ci0gICAgICAgIE91dHB1dFN0cmVhbSBvdXRT
dHJlYW0gPSBjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpOwotICAgICAgICBvdXRTdHJlYW0u
d3JpdGUocG9zdERhdGEpOwotICAgICAgICBvdXRTdHJlYW0uY2xvc2UoKTsKLSAgICAgIH0KLQot
ICAgICAgLy8gR2V0IHJlc3BvbnNlLgotICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rp
b24uZ2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewot
ICAgICAgICBldmVudHMub25IdHRwRXJyb3IoIk5vbi0yMDAgcmVzcG9uc2UgdG8gIiArIG1ldGhv
ZCArICIgdG8gVVJMOiAiICsgdXJsICsgIiA6ICIKLSAgICAgICAgICAgICsgY29ubmVjdGlvbi5n
ZXRIZWFkZXJGaWVsZChudWxsKSk7Ci0gICAgICAgIGNvbm5lY3Rpb24uZGlzY29ubmVjdCgpOwot
ICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBJbnB1dFN0cmVhbSByZXNwb25zZVN0cmVh
bSA9IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAgIFN0cmluZyByZXNwb25zZSA9
IGRyYWluU3RyZWFtKHJlc3BvbnNlU3RyZWFtKTsKLSAgICAgIHJlc3BvbnNlU3RyZWFtLmNsb3Nl
KCk7Ci0gICAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTsKLSAgICAgIGV2ZW50cy5vbkh0dHBD
b21wbGV0ZShyZXNwb25zZSk7Ci0gICAgfSBjYXRjaCAoU29ja2V0VGltZW91dEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBldmVudHMub25IdHRwRXJyb3IoIkhUVFAgIiArIG1ldGhvZCArICIgdG8gIiAr
IHVybCArICIgdGltZW91dCIpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAg
IGV2ZW50cy5vbkh0dHBFcnJvcigiSFRUUCAiICsgbWV0aG9kICsgIiB0byAiICsgdXJsICsgIiBl
cnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhl
IGNvbnRlbnRzIG9mIGFuIElucHV0U3RyZWFtIGFzIGEgU3RyaW5nLgotICBwcml2YXRlIHN0YXRp
YyBTdHJpbmcgZHJhaW5TdHJlYW0oSW5wdXRTdHJlYW0gaW4pIHsKLSAgICBTY2FubmVyIHMgPSBu
ZXcgU2Nhbm5lcihpbikudXNlRGVsaW1pdGVyKCJcXEEiKTsKLSAgICByZXR1cm4gcy5oYXNOZXh0
KCkgPyBzLm5leHQoKSA6ICIiOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvQXBwUlRDQXVkaW9NYW5hZ2VyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0F1ZGlvTWFuYWdlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDQXVkaW9NYW5hZ2VyLmphdmEJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0MTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBU
aGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRp
bC5BcHBSVENVdGlsczsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Ccm9hZGNhc3RSZWNlaXZl
cjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRl
bnQuSW50ZW50OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2VzOwotaW1wb3J0IGFuZHJvaWQuY29udGVu
dC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsK
LWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7Ci1pbXBvcnQgYW5k
cm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBq
YXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuU2V0OwotCi0vKioKLSAqIEFwcFJU
Q0F1ZGlvTWFuYWdlciBtYW5hZ2VzIGFsbCBhdWRpbyByZWxhdGVkIHBhcnRzIG9mIHRoZSBBcHBS
VEMgZGVtby4KLSAqLwotcHVibGljIGNsYXNzIEFwcFJUQ0F1ZGlvTWFuYWdlciB7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQXBwUlRDQXVkaW9NYW5hZ2VyIjsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUFLRVJQSE9ORV9BVVRPID0gImF1dG8iOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQUtFUlBIT05FX1RSVUUgPSAidHJ1ZSI7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVBS0VSUEhPTkVfRkFMU0UgPSAiZmFsc2Ui
OwotCi0gIC8qKgotICAgKiBBdWRpb0RldmljZSBpcyB0aGUgbmFtZXMgb2YgcG9zc2libGUgYXVk
aW8gZGV2aWNlcyB0aGF0IHdlIGN1cnJlbnRseQotICAgKiBzdXBwb3J0LgotICAgKi8KLSAgLy8g
VE9ETyhoZW5yaWthKTogYWRkIHN1cHBvcnQgZm9yIEJMVUVUT09USCBhcyB3ZWxsLgotICBwdWJs
aWMgZW51bSBBdWRpb0RldmljZSB7Ci0gICAgU1BFQUtFUl9QSE9ORSwKLSAgICBXSVJFRF9IRUFE
U0VULAotICAgIEVBUlBJRUNFLAotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGFwcHJ0
Y0NvbnRleHQ7Ci0gIHByaXZhdGUgZmluYWwgUnVubmFibGUgb25TdGF0ZUNoYW5nZUxpc3RlbmVy
OwotICBwcml2YXRlIGJvb2xlYW4gaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBBdWRp
b01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotICBwcml2YXRlIGludCBzYXZlZEF1ZGlvTW9kZSA9IEF1
ZGlvTWFuYWdlci5NT0RFX0lOVkFMSUQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBzYXZlZElzU3BlYWtl
clBob25lT24gPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHNhdmVkSXNNaWNyb3Bob25lTXV0
ZSA9IGZhbHNlOwotCi0gIHByaXZhdGUgZmluYWwgQXVkaW9EZXZpY2UgZGVmYXVsdEF1ZGlvRGV2
aWNlOwotCi0gIC8vIENvbnRhaW5zIHNwZWFrZXJwaG9uZSBzZXR0aW5nOiBhdXRvLCB0cnVlIG9y
IGZhbHNlCi0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHVzZVNwZWFrZXJwaG9uZTsKLQotICAvLyBQ
cm94aW1pdHkgc2Vuc29yIG9iamVjdC4gSXQgbWVhc3VyZXMgdGhlIHByb3hpbWl0eSBvZiBhbiBv
YmplY3QgaW4gY20KLSAgLy8gcmVsYXRpdmUgdG8gdGhlIHZpZXcgc2NyZWVuIG9mIGEgZGV2aWNl
IGFuZCBjYW4gdGhlcmVmb3JlIGJlIHVzZWQgdG8KLSAgLy8gYXNzaXN0IGRldmljZSBzd2l0Y2hp
bmcgKGNsb3NlIHRvIGVhciA8PT4gdXNlIGhlYWRzZXQgZWFycGllY2UgaWYKLSAgLy8gYXZhaWxh
YmxlLCBmYXIgZnJvbSBlYXIgPD0+IHVzZSBzcGVha2VyIHBob25lKS4KLSAgcHJpdmF0ZSBBcHBS
VENQcm94aW1pdHlTZW5zb3IgcHJveGltaXR5U2Vuc29yID0gbnVsbDsKLQotICAvLyBDb250YWlu
cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGF1ZGlvIGRldmljZS4KLSAgcHJpdmF0ZSBBdWRpb0Rl
dmljZSBzZWxlY3RlZEF1ZGlvRGV2aWNlOwotCi0gIC8vIENvbnRhaW5zIGEgbGlzdCBvZiBhdmFp
bGFibGUgYXVkaW8gZGV2aWNlcy4gQSBTZXQgY29sbGVjdGlvbiBpcyB1c2VkIHRvCi0gIC8vIGF2
b2lkIGR1cGxpY2F0ZSBlbGVtZW50cy4KLSAgcHJpdmF0ZSBmaW5hbCBTZXQ8QXVkaW9EZXZpY2U+
IGF1ZGlvRGV2aWNlcyA9IG5ldyBIYXNoU2V0PEF1ZGlvRGV2aWNlPigpOwotCi0gIC8vIEJyb2Fk
Y2FzdCByZWNlaXZlciBmb3Igd2lyZWQgaGVhZHNldCBpbnRlbnQgYnJvYWRjYXN0cy4KLSAgcHJp
dmF0ZSBCcm9hZGNhc3RSZWNlaXZlciB3aXJlZEhlYWRzZXRSZWNlaXZlcjsKLQotICAvLyBDYWxs
YmFjayBtZXRob2QgZm9yIGNoYW5nZXMgaW4gYXVkaW8gZm9jdXMuCi0gIHByaXZhdGUgQXVkaW9N
YW5hZ2VyLk9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyIGF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5l
cjsKLQotICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcHJveGltaXR5IHNlbnNv
ciByZXBvcnRzIGEgc3RhdGUgY2hhbmdlLAotICAvLyBlLmcuIGZyb20gIk5FQVIgdG8gRkFSIiBv
ciBmcm9tICJGQVIgdG8gTkVBUiIuCi0gIHByaXZhdGUgdm9pZCBvblByb3hpbWl0eVNlbnNvckNo
YW5nZWRTdGF0ZSgpIHsKLSAgICBpZiAoIXVzZVNwZWFrZXJwaG9uZS5lcXVhbHMoU1BFQUtFUlBI
T05FX0FVVE8pKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gVGhlIHByb3hpbWl0
eSBzZW5zb3Igc2hvdWxkIG9ubHkgYmUgYWN0aXZhdGVkIHdoZW4gdGhlcmUgYXJlIGV4YWN0bHkg
dHdvCi0gICAgLy8gYXZhaWxhYmxlIGF1ZGlvIGRldmljZXMuCi0gICAgaWYgKGF1ZGlvRGV2aWNl
cy5zaXplKCkgPT0gMiAmJiBhdWRpb0RldmljZXMuY29udGFpbnMoQXBwUlRDQXVkaW9NYW5hZ2Vy
LkF1ZGlvRGV2aWNlLkVBUlBJRUNFKQotICAgICAgICAmJiBhdWRpb0RldmljZXMuY29udGFpbnMo
QXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkUpKSB7Ci0gICAgICBp
ZiAocHJveGltaXR5U2Vuc29yLnNlbnNvclJlcG9ydHNOZWFyU3RhdGUoKSkgewotICAgICAgICAv
LyBTZW5zb3IgcmVwb3J0cyB0aGF0IGEgImhhbmRzZXQgaXMgYmVpbmcgaGVsZCB1cCB0byBhIHBl
cnNvbidzIGVhciIsCi0gICAgICAgIC8vIG9yICJzb21ldGhpbmcgaXMgY292ZXJpbmcgdGhlIGxp
Z2h0IHNlbnNvciIuCi0gICAgICAgIHNldEF1ZGlvRGV2aWNlKEFwcFJUQ0F1ZGlvTWFuYWdlci5B
dWRpb0RldmljZS5FQVJQSUVDRSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBTZW5zb3Ig
cmVwb3J0cyB0aGF0IGEgImhhbmRzZXQgaXMgcmVtb3ZlZCBmcm9tIGEgcGVyc29uJ3MgZWFyIiwg
b3IKLSAgICAgICAgLy8gInRoZSBsaWdodCBzZW5zb3IgaXMgbm8gbG9uZ2VyIGNvdmVyZWQiLgot
ICAgICAgICBzZXRBdWRpb0RldmljZShBcHBSVENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuU1BF
QUtFUl9QSE9ORSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyoqIENvbnN0cnVjdGlvbiAq
LwotICBzdGF0aWMgQXBwUlRDQXVkaW9NYW5hZ2VyIGNyZWF0ZShDb250ZXh0IGNvbnRleHQsIFJ1
bm5hYmxlIGRldmljZVN0YXRlQ2hhbmdlTGlzdGVuZXIpIHsKLSAgICByZXR1cm4gbmV3IEFwcFJU
Q0F1ZGlvTWFuYWdlcihjb250ZXh0LCBkZXZpY2VTdGF0ZUNoYW5nZUxpc3RlbmVyKTsKLSAgfQot
Ci0gIHByaXZhdGUgQXBwUlRDQXVkaW9NYW5hZ2VyKENvbnRleHQgY29udGV4dCwgUnVubmFibGUg
ZGV2aWNlU3RhdGVDaGFuZ2VMaXN0ZW5lcikgewotICAgIGFwcHJ0Y0NvbnRleHQgPSBjb250ZXh0
OwotICAgIG9uU3RhdGVDaGFuZ2VMaXN0ZW5lciA9IGRldmljZVN0YXRlQ2hhbmdlTGlzdGVuZXI7
Ci0gICAgYXVkaW9NYW5hZ2VyID0gKChBdWRpb01hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2Vy
dmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpKTsKLQotICAgIFNoYXJlZFByZWZlcmVuY2VzIHNo
YXJlZFByZWZlcmVuY2VzID0gUHJlZmVyZW5jZU1hbmFnZXIuZ2V0RGVmYXVsdFNoYXJlZFByZWZl
cmVuY2VzKGNvbnRleHQpOwotICAgIHVzZVNwZWFrZXJwaG9uZSA9IHNoYXJlZFByZWZlcmVuY2Vz
LmdldFN0cmluZyhjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5wcmVmX3NwZWFrZXJwaG9uZV9r
ZXkpLAotICAgICAgICBjb250ZXh0LmdldFN0cmluZyhSLnN0cmluZy5wcmVmX3NwZWFrZXJwaG9u
ZV9kZWZhdWx0KSk7Ci0KLSAgICBpZiAodXNlU3BlYWtlcnBob25lLmVxdWFscyhTUEVBS0VSUEhP
TkVfRkFMU0UpKSB7Ci0gICAgICBkZWZhdWx0QXVkaW9EZXZpY2UgPSBBdWRpb0RldmljZS5FQVJQ
SUVDRTsKLSAgICB9IGVsc2UgewotICAgICAgZGVmYXVsdEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZp
Y2UuU1BFQUtFUl9QSE9ORTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUg
dGhlIHByb3hpbWl0eSBzZW5zb3IuCi0gICAgLy8gVGFibGV0IGRldmljZXMgKGUuZy4gTmV4dXMg
NykgZG9lcyBub3Qgc3VwcG9ydCBwcm94aW1pdHkgc2Vuc29ycy4KLSAgICAvLyBOb3RlIHRoYXQs
IHRoZSBzZW5zb3Igd2lsbCBub3QgYmUgYWN0aXZlIHVudGlsIHN0YXJ0KCkgaGFzIGJlZW4gY2Fs
bGVkLgotICAgIHByb3hpbWl0eVNlbnNvciA9IEFwcFJUQ1Byb3hpbWl0eVNlbnNvci5jcmVhdGUo
Y29udGV4dCwgbmV3IFJ1bm5hYmxlKCkgewotICAgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBj
YWxsZWQgZWFjaCB0aW1lIGEgc3RhdGUgY2hhbmdlIGlzIGRldGVjdGVkLgotICAgICAgLy8gRXhh
bXBsZTogdXNlciBob2xkcyBoaXMgaGFuZCBvdmVyIHRoZSBkZXZpY2UgKGNsb3NlciB0aGFuIH41
IGNtKSwKLSAgICAgIC8vIG9yIHJlbW92ZXMgaGlzIGhhbmQgZnJvbSB0aGUgZGV2aWNlLgotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBvblByb3hpbWl0eVNlbnNvckNoYW5nZWRT
dGF0ZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIEFwcFJUQ1V0aWxzLmxvZ0RldmljZUluZm8o
VEFHKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGluaXQoKSB7Ci0gICAgTG9nLmQoVEFHLCAiaW5p
dCIpOwotICAgIGlmIChpbml0aWFsaXplZCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IC8vIFN0b3JlIGN1cnJlbnQgYXVkaW8gc3RhdGUgc28gd2UgY2FuIHJlc3RvcmUgaXQgd2hlbiBj
bG9zZSgpIGlzIGNhbGxlZC4KLSAgICBzYXZlZEF1ZGlvTW9kZSA9IGF1ZGlvTWFuYWdlci5nZXRN
b2RlKCk7Ci0gICAgc2F2ZWRJc1NwZWFrZXJQaG9uZU9uID0gYXVkaW9NYW5hZ2VyLmlzU3BlYWtl
cnBob25lT24oKTsKLSAgICBzYXZlZElzTWljcm9waG9uZU11dGUgPSBhdWRpb01hbmFnZXIuaXNN
aWNyb3Bob25lTXV0ZSgpOwotCi0gICAgLy8gQ3JlYXRlIGFuIEF1ZGlvTWFuYWdlci5PbkF1ZGlv
Rm9jdXNDaGFuZ2VMaXN0ZW5lciBpbnN0YW5jZS4KLSAgICBhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVu
ZXIgPSBuZXcgQXVkaW9NYW5hZ2VyLk9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyKCkgewotICAg
ICAgLy8gQ2FsbGVkIG9uIHRoZSBsaXN0ZW5lciB0byBub3RpZnkgaWYgdGhlIGF1ZGlvIGZvY3Vz
IGZvciB0aGlzIGxpc3RlbmVyIGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgICAvLyBUaGUgfGZvY3Vz
Q2hhbmdlfCB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgZm9jdXMgd2FzIGdhaW5lZCwgd2hl
dGhlciB0aGUgZm9jdXMgd2FzIGxvc3QsCi0gICAgICAvLyBhbmQgd2hldGhlciB0aGF0IGxvc3Mg
aXMgdHJhbnNpZW50LCBvciB3aGV0aGVyIHRoZSBuZXcgZm9jdXMgaG9sZGVyIHdpbGwgaG9sZCBp
dCBmb3IgYW4KLSAgICAgIC8vIHVua25vd24gYW1vdW50IG9mIHRpbWUuCi0gICAgICAvLyBUT0RP
KGhlbnJpa2EpOiBwb3NzaWJseSBleHRlbmQgc3VwcG9ydCBvZiBoYW5kbGluZyBhdWRpby1mb2N1
cyBjaGFuZ2VzLiBPbmx5IGNvbnRhaW5zCi0gICAgICAvLyBsb2dnaW5nIGZvciBub3cuCi0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQXVkaW9Gb2N1c0NoYW5nZShpbnQgZm9j
dXNDaGFuZ2UpIHsKLSAgICAgICAgU3RyaW5nIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX05P
VF9ERUZJTkVEIjsKLSAgICAgICAgc3dpdGNoIChmb2N1c0NoYW5nZSkgewotICAgICAgICAgIGNh
c2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJTjoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5n
ZSA9ICJBVURJT0ZPQ1VTX0dBSU4iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2Fz
ZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVDoKLSAgICAgICAgICAgIHR5
cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5UIjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJTl9UUkFOU0lF
TlRfRVhDTFVTSVZFOgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfR0FJ
Tl9UUkFOU0lFTlRfRVhDTFVTSVZFIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNh
c2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlRfTUFZX0RVQ0s6Ci0gICAg
ICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVF9NQVlfRFVD
SyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJ
T0ZPQ1VTX0xPU1M6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19MT1NT
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElP
Rk9DVVNfTE9TU19UUkFOU0lFTlQ6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9G
T0NVU19MT1NTX1RSQU5TSUVOVCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5UX0NBTl9EVUNLOgotICAgICAg
ICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfTE9TU19UUkFOU0lFTlRfQ0FOX0RVQ0si
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHR5
cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0lOVkFMSUQiOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgTG9nLmQoVEFHLCAib25BdWRpb0ZvY3VzQ2hhbmdlOiAiICsgdHlw
ZU9mQ2hhbmdlKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgLy8gUmVxdWVzdCBhdWRpbyBwbGF5
b3V0IGZvY3VzICh3aXRob3V0IGR1Y2tpbmcpIGFuZCBpbnN0YWxsIGxpc3RlbmVyIGZvciBjaGFu
Z2VzIGluIGZvY3VzLgotICAgIGludCByZXN1bHQgPSBhdWRpb01hbmFnZXIucmVxdWVzdEF1ZGlv
Rm9jdXMoYXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyLAotICAgICAgICBBdWRpb01hbmFnZXIuU1RS
RUFNX1ZPSUNFX0NBTEwsIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5UKTsK
LSAgICBpZiAocmVzdWx0ID09IEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX1JFUVVFU1RfR1JBTlRF
RCkgewotICAgICAgTG9nLmQoVEFHLCAiQXVkaW8gZm9jdXMgcmVxdWVzdCBncmFudGVkIGZvciBW
T0lDRV9DQUxMIHN0cmVhbXMiKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmUoVEFHLCAiQXVk
aW8gZm9jdXMgcmVxdWVzdCBmYWlsZWQiKTsKLSAgICB9Ci0KLSAgICAvLyBTdGFydCBieSBzZXR0
aW5nIE1PREVfSU5fQ09NTVVOSUNBVElPTiBhcyBkZWZhdWx0IGF1ZGlvIG1vZGUuIEl0IGlzCi0g
ICAgLy8gcmVxdWlyZWQgdG8gYmUgaW4gdGhpcyBtb2RlIHdoZW4gcGxheW91dCBhbmQvb3IgcmVj
b3JkaW5nIHN0YXJ0cyBmb3IKLSAgICAvLyBiZXN0IHBvc3NpYmxlIFZvSVAgcGVyZm9ybWFuY2Uu
Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogd2UgbWlnaCB3YW50IHRvIHN0YXJ0IHdpdGggUklOR1RP
TkUgbW9kZSBoZXJlIGluc3RlYWQuCi0gICAgYXVkaW9NYW5hZ2VyLnNldE1vZGUoQXVkaW9NYW5h
Z2VyLk1PREVfSU5fQ09NTVVOSUNBVElPTik7Ci0KLSAgICAvLyBBbHdheXMgZGlzYWJsZSBtaWNy
b3Bob25lIG11dGUgZHVyaW5nIGEgV2ViUlRDIGNhbGwuCi0gICAgc2V0TWljcm9waG9uZU11dGUo
ZmFsc2UpOwotCi0gICAgLy8gRG8gaW5pdGlhbCBzZWxlY3Rpb24gb2YgYXVkaW8gZGV2aWNlLiBU
aGlzIHNldHRpbmcgY2FuIGxhdGVyIGJlIGNoYW5nZWQKLSAgICAvLyBlaXRoZXIgYnkgYWRkaW5n
L3JlbW92aW5nIGEgd2lyZWQgaGVhZHNldCBvciBieSBjb3ZlcmluZy91bmNvdmVyaW5nIHRoZQot
ICAgIC8vIHByb3hpbWl0eSBzZW5zb3IuCi0gICAgdXBkYXRlQXVkaW9EZXZpY2VTdGF0ZShoYXNX
aXJlZEhlYWRzZXQoKSk7Ci0KLSAgICAvLyBSZWdpc3RlciByZWNlaXZlciBmb3IgYnJvYWRjYXN0
IGludGVudHMgcmVsYXRlZCB0byBhZGRpbmcvcmVtb3ZpbmcgYQotICAgIC8vIHdpcmVkIGhlYWRz
ZXQgKEludGVudC5BQ1RJT05fSEVBRFNFVF9QTFVHKS4KLSAgICByZWdpc3RlckZvcldpcmVkSGVh
ZHNldEludGVudEJyb2FkY2FzdCgpOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAgTG9nLmQoVEFHLCAiY2xvc2UiKTsKLSAgICBp
ZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdW5yZWdpc3Rl
ckZvcldpcmVkSGVhZHNldEludGVudEJyb2FkY2FzdCgpOwotCi0gICAgLy8gUmVzdG9yZSBwcmV2
aW91c2x5IHN0b3JlZCBhdWRpbyBzdGF0ZXMuCi0gICAgc2V0U3BlYWtlcnBob25lT24oc2F2ZWRJ
c1NwZWFrZXJQaG9uZU9uKTsKLSAgICBzZXRNaWNyb3Bob25lTXV0ZShzYXZlZElzTWljcm9waG9u
ZU11dGUpOwotICAgIGF1ZGlvTWFuYWdlci5zZXRNb2RlKHNhdmVkQXVkaW9Nb2RlKTsKLQotICAg
IC8vIEFiYW5kb24gYXVkaW8gZm9jdXMuIEdpdmVzIHRoZSBwcmV2aW91cyBmb2N1cyBvd25lciwg
aWYgYW55LCBmb2N1cy4KLSAgICBhdWRpb01hbmFnZXIuYWJhbmRvbkF1ZGlvRm9jdXMoYXVkaW9G
b2N1c0NoYW5nZUxpc3RlbmVyKTsKLSAgICBhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIgPSBudWxs
OwotICAgIExvZy5kKFRBRywgIkFiYW5kb25lZCBhdWRpbyBmb2N1cyBmb3IgVk9JQ0VfQ0FMTCBz
dHJlYW1zIik7Ci0KLSAgICBpZiAocHJveGltaXR5U2Vuc29yICE9IG51bGwpIHsKLSAgICAgIHBy
b3hpbWl0eVNlbnNvci5zdG9wKCk7Ci0gICAgICBwcm94aW1pdHlTZW5zb3IgPSBudWxsOwotICAg
IH0KLQotICAgIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gIH0KLQotICAvKiogQ2hhbmdlcyBzZWxl
Y3Rpb24gb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgYXVkaW8gZGV2aWNlLiAqLwotICBwdWJsaWMg
dm9pZCBzZXRBdWRpb0RldmljZShBdWRpb0RldmljZSBkZXZpY2UpIHsKLSAgICBMb2cuZChUQUcs
ICJzZXRBdWRpb0RldmljZShkZXZpY2U9IiArIGRldmljZSArICIpIik7Ci0gICAgQXBwUlRDVXRp
bHMuYXNzZXJ0SXNUcnVlKGF1ZGlvRGV2aWNlcy5jb250YWlucyhkZXZpY2UpKTsKLQotICAgIHN3
aXRjaCAoZGV2aWNlKSB7Ci0gICAgICBjYXNlIFNQRUFLRVJfUEhPTkU6Ci0gICAgICAgIHNldFNw
ZWFrZXJwaG9uZU9uKHRydWUpOwotICAgICAgICBzZWxlY3RlZEF1ZGlvRGV2aWNlID0gQXVkaW9E
ZXZpY2UuU1BFQUtFUl9QSE9ORTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEVBUlBJRUNF
OgotICAgICAgICBzZXRTcGVha2VycGhvbmVPbihmYWxzZSk7Ci0gICAgICAgIHNlbGVjdGVkQXVk
aW9EZXZpY2UgPSBBdWRpb0RldmljZS5FQVJQSUVDRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIFdJUkVEX0hFQURTRVQ6Ci0gICAgICAgIHNldFNwZWFrZXJwaG9uZU9uKGZhbHNlKTsKLSAg
ICAgICAgc2VsZWN0ZWRBdWRpb0RldmljZSA9IEF1ZGlvRGV2aWNlLldJUkVEX0hFQURTRVQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxp
ZCBhdWRpbyBkZXZpY2Ugc2VsZWN0aW9uIik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBv
bkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgpOwotICB9Ci0KLSAgLyoqIFJldHVybnMgY3VycmVu
dCBzZXQgb2YgYXZhaWxhYmxlL3NlbGVjdGFibGUgYXVkaW8gZGV2aWNlcy4gKi8KLSAgcHVibGlj
IFNldDxBdWRpb0RldmljZT4gZ2V0QXVkaW9EZXZpY2VzKCkgewotICAgIHJldHVybiBDb2xsZWN0
aW9ucy51bm1vZGlmaWFibGVTZXQobmV3IEhhc2hTZXQ8QXVkaW9EZXZpY2U+KGF1ZGlvRGV2aWNl
cykpOwotICB9Ci0KLSAgLyoqIFJldHVybnMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBhdWRpbyBk
ZXZpY2UuICovCi0gIHB1YmxpYyBBdWRpb0RldmljZSBnZXRTZWxlY3RlZEF1ZGlvRGV2aWNlKCkg
ewotICAgIHJldHVybiBzZWxlY3RlZEF1ZGlvRGV2aWNlOwotICB9Ci0KLSAgLyoqCi0gICAqIFJl
Z2lzdGVycyByZWNlaXZlciBmb3IgdGhlIGJyb2FkY2FzdGVkIGludGVudCB3aGVuIGEgd2lyZWQg
aGVhZHNldCBpcwotICAgKiBwbHVnZ2VkIGluIG9yIHVucGx1Z2dlZC4gVGhlIHJlY2VpdmVkIGlu
dGVudCB3aWxsIGhhdmUgYW4gZXh0cmEKLSAgICogJ3N0YXRlJyB2YWx1ZSB3aGVyZSAwIG1lYW5z
IHVucGx1Z2dlZCwgYW5kIDEgbWVhbnMgcGx1Z2dlZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBy
ZWdpc3RlckZvcldpcmVkSGVhZHNldEludGVudEJyb2FkY2FzdCgpIHsKLSAgICBJbnRlbnRGaWx0
ZXIgZmlsdGVyID0gbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9OX0hFQURTRVRfUExVRyk7
Ci0KLSAgICAvKiogUmVjZWl2ZXIgd2hpY2ggaGFuZGxlcyBjaGFuZ2VzIGluIHdpcmVkIGhlYWRz
ZXQgYXZhaWxhYmlsaXR5LiAqLwotICAgIHdpcmVkSGVhZHNldFJlY2VpdmVyID0gbmV3IEJyb2Fk
Y2FzdFJlY2VpdmVyKCkgewotICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1VO
UExVR0dFRCA9IDA7Ci0gICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVEVfUExVR0dF
RCA9IDE7Ci0gICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFTX05PX01JQyA9IDA7Ci0g
ICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEFTX01JQyA9IDE7Ci0KLSAgICAgIEBPdmVy
cmlkZQotICAgICAgcHVibGljIHZvaWQgb25SZWNlaXZlKENvbnRleHQgY29udGV4dCwgSW50ZW50
IGludGVudCkgewotICAgICAgICBpbnQgc3RhdGUgPSBpbnRlbnQuZ2V0SW50RXh0cmEoInN0YXRl
IiwgU1RBVEVfVU5QTFVHR0VEKTsKLSAgICAgICAgaW50IG1pY3JvcGhvbmUgPSBpbnRlbnQuZ2V0
SW50RXh0cmEoIm1pY3JvcGhvbmUiLCBIQVNfTk9fTUlDKTsKLSAgICAgICAgU3RyaW5nIG5hbWUg
PSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoIm5hbWUiKTsKLSAgICAgICAgTG9nLmQoVEFHLCAiQnJv
YWRjYXN0UmVjZWl2ZXIub25SZWNlaXZlIiArIEFwcFJUQ1V0aWxzLmdldFRocmVhZEluZm8oKSAr
ICI6ICIKLSAgICAgICAgICAgICAgICArICJhPSIgKyBpbnRlbnQuZ2V0QWN0aW9uKCkgKyAiLCBz
PSIKLSAgICAgICAgICAgICAgICArIChzdGF0ZSA9PSBTVEFURV9VTlBMVUdHRUQgPyAidW5wbHVn
Z2VkIiA6ICJwbHVnZ2VkIikgKyAiLCBtPSIKLSAgICAgICAgICAgICAgICArIChtaWNyb3Bob25l
ID09IEhBU19NSUMgPyAibWljIiA6ICJubyBtaWMiKSArICIsIG49IiArIG5hbWUgKyAiLCBzYj0i
Ci0gICAgICAgICAgICAgICAgKyBpc0luaXRpYWxTdGlja3lCcm9hZGNhc3QoKSk7Ci0KLSAgICAg
ICAgYm9vbGVhbiBoYXNXaXJlZEhlYWRzZXQgPSAoc3RhdGUgPT0gU1RBVEVfUExVR0dFRCk7Ci0g
ICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgICAgICBjYXNlIFNUQVRFX1VOUExVR0dFRDoK
LSAgICAgICAgICAgIHVwZGF0ZUF1ZGlvRGV2aWNlU3RhdGUoaGFzV2lyZWRIZWFkc2V0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgU1RBVEVfUExVR0dFRDoKLSAgICAgICAg
ICAgIGlmIChzZWxlY3RlZEF1ZGlvRGV2aWNlICE9IEF1ZGlvRGV2aWNlLldJUkVEX0hFQURTRVQp
IHsKLSAgICAgICAgICAgICAgdXBkYXRlQXVkaW9EZXZpY2VTdGF0ZShoYXNXaXJlZEhlYWRzZXQp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIExvZy5lKFRBRywgIkludmFsaWQgc3RhdGUiKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfTsKLQotICAgIGFwcHJ0Y0NvbnRleHQucmVn
aXN0ZXJSZWNlaXZlcih3aXJlZEhlYWRzZXRSZWNlaXZlciwgZmlsdGVyKTsKLSAgfQotCi0gIC8q
KiBVbnJlZ2lzdGVyIHJlY2VpdmVyIGZvciBicm9hZGNhc3RlZCBBQ1RJT05fSEVBRFNFVF9QTFVH
IGludGVudC4gKi8KLSAgcHJpdmF0ZSB2b2lkIHVucmVnaXN0ZXJGb3JXaXJlZEhlYWRzZXRJbnRl
bnRCcm9hZGNhc3QoKSB7Ci0gICAgYXBwcnRjQ29udGV4dC51bnJlZ2lzdGVyUmVjZWl2ZXIod2ly
ZWRIZWFkc2V0UmVjZWl2ZXIpOwotICAgIHdpcmVkSGVhZHNldFJlY2VpdmVyID0gbnVsbDsKLSAg
fQotCi0gIC8qKiBTZXRzIHRoZSBzcGVha2VyIHBob25lIG1vZGUuICovCi0gIHByaXZhdGUgdm9p
ZCBzZXRTcGVha2VycGhvbmVPbihib29sZWFuIG9uKSB7Ci0gICAgYm9vbGVhbiB3YXNPbiA9IGF1
ZGlvTWFuYWdlci5pc1NwZWFrZXJwaG9uZU9uKCk7Ci0gICAgaWYgKHdhc09uID09IG9uKSB7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGF1ZGlvTWFuYWdlci5zZXRTcGVha2VycGhvbmVPbihv
bik7Ci0gIH0KLQotICAvKiogU2V0cyB0aGUgbWljcm9waG9uZSBtdXRlIHN0YXRlLiAqLwotICBw
cml2YXRlIHZvaWQgc2V0TWljcm9waG9uZU11dGUoYm9vbGVhbiBvbikgewotICAgIGJvb2xlYW4g
d2FzTXV0ZWQgPSBhdWRpb01hbmFnZXIuaXNNaWNyb3Bob25lTXV0ZSgpOwotICAgIGlmICh3YXNN
dXRlZCA9PSBvbikgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhdWRpb01hbmFnZXIuc2V0
TWljcm9waG9uZU11dGUob24pOwotICB9Ci0KLSAgLyoqIEdldHMgdGhlIGN1cnJlbnQgZWFycGll
Y2Ugc3RhdGUuICovCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNFYXJwaWVjZSgpIHsKLSAgICByZXR1
cm4gYXBwcnRjQ29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFj
a2FnZU1hbmFnZXIuRkVBVFVSRV9URUxFUEhPTlkpOwotICB9Ci0KLSAgLyoqCi0gICAqIENoZWNr
cyB3aGV0aGVyIGEgd2lyZWQgaGVhZHNldCBpcyBjb25uZWN0ZWQgb3Igbm90LgotICAgKiBUaGlz
IGlzIG5vdCBhIHZhbGlkIGluZGljYXRpb24gdGhhdCBhdWRpbyBwbGF5YmFjayBpcyBhY3R1YWxs
eSBvdmVyCi0gICAqIHRoZSB3aXJlZCBoZWFkc2V0IGFzIGF1ZGlvIHJvdXRpbmcgZGVwZW5kcyBv
biBvdGhlciBjb25kaXRpb25zLiBXZQotICAgKiBvbmx5IHVzZSBpdCBhcyBhbiBlYXJseSBpbmRp
Y2F0b3IgKGR1cmluZyBpbml0aWFsaXphdGlvbikgb2YgYW4gYXR0YWNoZWQKLSAgICogd2lyZWQg
aGVhZHNldC4KLSAgICovCi0gIEBEZXByZWNhdGVkCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNXaXJl
ZEhlYWRzZXQoKSB7Ci0gICAgcmV0dXJuIGF1ZGlvTWFuYWdlci5pc1dpcmVkSGVhZHNldE9uKCk7
Ci0gIH0KLQotICAvKiogVXBkYXRlIGxpc3Qgb2YgcG9zc2libGUgYXVkaW8gZGV2aWNlcyBhbmQg
bWFrZSBuZXcgZGV2aWNlIHNlbGVjdGlvbi4gKi8KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZUF1ZGlv
RGV2aWNlU3RhdGUoYm9vbGVhbiBoYXNXaXJlZEhlYWRzZXQpIHsKLSAgICAvLyBVcGRhdGUgdGhl
IGxpc3Qgb2YgYXZhaWxhYmxlIGF1ZGlvIGRldmljZXMuCi0gICAgYXVkaW9EZXZpY2VzLmNsZWFy
KCk7Ci0gICAgaWYgKGhhc1dpcmVkSGVhZHNldCkgewotICAgICAgLy8gSWYgYSB3aXJlZCBoZWFk
c2V0IGlzIGNvbm5lY3RlZCwgdGhlbiBpdCBpcyB0aGUgb25seSBwb3NzaWJsZSBvcHRpb24uCi0g
ICAgICBhdWRpb0RldmljZXMuYWRkKEF1ZGlvRGV2aWNlLldJUkVEX0hFQURTRVQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAvLyBObyB3aXJlZCBoZWFkc2V0LCBoZW5jZSB0aGUgYXVkaW8tZGV2aWNl
IGxpc3QgY2FuIGNvbnRhaW4gc3BlYWtlcgotICAgICAgLy8gcGhvbmUgKG9uIGEgdGFibGV0KSwg
b3Igc3BlYWtlciBwaG9uZSBhbmQgZWFycGllY2UgKG9uIG1vYmlsZSBwaG9uZSkuCi0gICAgICBh
dWRpb0RldmljZXMuYWRkKEF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkUpOwotICAgICAgaWYgKGhh
c0VhcnBpZWNlKCkpIHsKLSAgICAgICAgYXVkaW9EZXZpY2VzLmFkZChBdWRpb0RldmljZS5FQVJQ
SUVDRSk7Ci0gICAgICB9Ci0gICAgfQotICAgIExvZy5kKFRBRywgImF1ZGlvRGV2aWNlczogIiAr
IGF1ZGlvRGV2aWNlcyk7Ci0KLSAgICAvLyBTd2l0Y2ggdG8gY29ycmVjdCBhdWRpbyBkZXZpY2Ug
Z2l2ZW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGF1ZGlvIGRldmljZXMuCi0gICAgaWYgKGhhc1dp
cmVkSGVhZHNldCkgewotICAgICAgc2V0QXVkaW9EZXZpY2UoQXVkaW9EZXZpY2UuV0lSRURfSEVB
RFNFVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNldEF1ZGlvRGV2aWNlKGRlZmF1bHRBdWRpb0Rl
dmljZSk7Ci0gICAgfQotICB9Ci0KLSAgLyoqIENhbGxlZCBlYWNoIHRpbWUgYSBuZXcgYXVkaW8g
ZGV2aWNlIGhhcyBiZWVuIGFkZGVkIG9yIHJlbW92ZWQuICovCi0gIHByaXZhdGUgdm9pZCBvbkF1
ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgpIHsKLSAgICBMb2cuZChUQUcsICJvbkF1ZGlvTWFuYWdl
ckNoYW5nZWRTdGF0ZTogZGV2aWNlcz0iICsgYXVkaW9EZXZpY2VzICsgIiwgc2VsZWN0ZWQ9Igot
ICAgICAgICAgICAgKyBzZWxlY3RlZEF1ZGlvRGV2aWNlKTsKLQotICAgIC8vIEVuYWJsZSB0aGUg
cHJveGltaXR5IHNlbnNvciBpZiB0aGVyZSBhcmUgdHdvIGF2YWlsYWJsZSBhdWRpbyBkZXZpY2Vz
Ci0gICAgLy8gaW4gdGhlIGxpc3QuIEdpdmVuIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCB3
ZSBrbm93IHRoYXQgdGhlIGNob2ljZQotICAgIC8vIHdpbGwgdGhlbiBiZSBiZXR3ZWVuIEVBUlBJ
RUNFIGFuZCBTUEVBS0VSX1BIT05FLgotICAgIGlmIChhdWRpb0RldmljZXMuc2l6ZSgpID09IDIp
IHsKLSAgICAgIEFwcFJUQ1V0aWxzLmFzc2VydElzVHJ1ZShhdWRpb0RldmljZXMuY29udGFpbnMo
QXVkaW9EZXZpY2UuRUFSUElFQ0UpCi0gICAgICAgICAgJiYgYXVkaW9EZXZpY2VzLmNvbnRhaW5z
KEF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkUpKTsKLSAgICAgIC8vIFN0YXJ0IHRoZSBwcm94aW1p
dHkgc2Vuc29yLgotICAgICAgcHJveGltaXR5U2Vuc29yLnN0YXJ0KCk7Ci0gICAgfSBlbHNlIGlm
IChhdWRpb0RldmljZXMuc2l6ZSgpID09IDEpIHsKLSAgICAgIC8vIFN0b3AgdGhlIHByb3hpbWl0
eSBzZW5zb3Igc2luY2UgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLSAgICAgIHByb3hpbWl0eVNl
bnNvci5zdG9wKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5lKFRBRywgIkludmFsaWQgZGV2
aWNlIGxpc3QiKTsKLSAgICB9Ci0KLSAgICBpZiAob25TdGF0ZUNoYW5nZUxpc3RlbmVyICE9IG51
bGwpIHsKLSAgICAgIC8vIFJ1biBjYWxsYmFjayB0byBub3RpZnkgYSBsaXN0ZW5pbmcgY2xpZW50
LiBUaGUgY2xpZW50IGNhbiB0aGVuCi0gICAgICAvLyB1c2UgcHVibGljIGdldHRlcnMgdG8gcXVl
cnkgdGhlIG5ldyBzdGF0ZS4KLSAgICAgIG9uU3RhdGVDaGFuZ2VMaXN0ZW5lci5ydW4oKTsKLSAg
ICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENDbGll
bnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRD
Q2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9BcHBSVENDbGllbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzMSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0
IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rp
b247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci0KLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLQotLyoqCi0gKiBBcHBSVENDbGllbnQgaXMgdGhlIGludGVyZmFjZSByZXBy
ZXNlbnRpbmcgYW4gQXBwUlRDIGNsaWVudC4KLSAqLwotcHVibGljIGludGVyZmFjZSBBcHBSVEND
bGllbnQgewotICAvKioKLSAgICogU3RydWN0IGhvbGRpbmcgdGhlIGNvbm5lY3Rpb24gcGFyYW1l
dGVycyBvZiBhbiBBcHBSVEMgcm9vbS4KLSAgICovCi0gIGNsYXNzIFJvb21Db25uZWN0aW9uUGFy
YW1ldGVycyB7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyByb29tVXJsOwotICAgIHB1YmxpYyBm
aW5hbCBTdHJpbmcgcm9vbUlkOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGxvb3BiYWNrOwot
ICAgIHB1YmxpYyBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMoU3RyaW5nIHJvb21VcmwsIFN0cmlu
ZyByb29tSWQsIGJvb2xlYW4gbG9vcGJhY2spIHsKLSAgICAgIHRoaXMucm9vbVVybCA9IHJvb21V
cmw7Ci0gICAgICB0aGlzLnJvb21JZCA9IHJvb21JZDsKLSAgICAgIHRoaXMubG9vcGJhY2sgPSBs
b29wYmFjazsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQXN5bmNocm9ub3VzbHkgY29ubmVj
dCB0byBhbiBBcHBSVEMgcm9vbSBVUkwgdXNpbmcgc3VwcGxpZWQgY29ubmVjdGlvbgotICAgKiBw
YXJhbWV0ZXJzLiBPbmNlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgb25Db25uZWN0ZWRUb1Jv
b20oKQotICAgKiBjYWxsYmFjayB3aXRoIHJvb20gcGFyYW1ldGVycyBpcyBpbnZva2VkLgotICAg
Ki8KLSAgdm9pZCBjb25uZWN0VG9Sb29tKFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0
aW9uUGFyYW1ldGVycyk7Ci0KLSAgLyoqCi0gICAqIFNlbmQgb2ZmZXIgU0RQIHRvIHRoZSBvdGhl
ciBwYXJ0aWNpcGFudC4KLSAgICovCi0gIHZvaWQgc2VuZE9mZmVyU2RwKGZpbmFsIFNlc3Npb25E
ZXNjcmlwdGlvbiBzZHApOwotCi0gIC8qKgotICAgKiBTZW5kIGFuc3dlciBTRFAgdG8gdGhlIG90
aGVyIHBhcnRpY2lwYW50LgotICAgKi8KLSAgdm9pZCBzZW5kQW5zd2VyU2RwKGZpbmFsIFNlc3Np
b25EZXNjcmlwdGlvbiBzZHApOwotCi0gIC8qKgotICAgKiBTZW5kIEljZSBjYW5kaWRhdGUgdG8g
dGhlIG90aGVyIHBhcnRpY2lwYW50LgotICAgKi8KLSAgdm9pZCBzZW5kTG9jYWxJY2VDYW5kaWRh
dGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSk7Ci0KLSAgLyoqCi0gICAqIFNlbmQgcmVt
b3ZlZCBJQ0UgY2FuZGlkYXRlcyB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gICAqLwotICB2
b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZVJlbW92YWxzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNh
bmRpZGF0ZXMpOwotCi0gIC8qKgotICAgKiBEaXNjb25uZWN0IGZyb20gcm9vbS4KLSAgICovCi0g
IHZvaWQgZGlzY29ubmVjdEZyb21Sb29tKCk7Ci0KLSAgLyoqCi0gICAqIFN0cnVjdCBob2xkaW5n
IHRoZSBzaWduYWxpbmcgcGFyYW1ldGVycyBvZiBhbiBBcHBSVEMgcm9vbS4KLSAgICovCi0gIGNs
YXNzIFNpZ25hbGluZ1BhcmFtZXRlcnMgewotICAgIHB1YmxpYyBmaW5hbCBMaXN0PFBlZXJDb25u
ZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVyczsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBp
bml0aWF0b3I7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyBjbGllbnRJZDsKLSAgICBwdWJsaWMg
ZmluYWwgU3RyaW5nIHdzc1VybDsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHdzc1Bvc3RVcmw7
Ci0gICAgcHVibGljIGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcDsKLSAgICBwdWJs
aWMgZmluYWwgTGlzdDxJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0ZXM7Ci0KLSAgICBwdWJsaWMg
U2lnbmFsaW5nUGFyYW1ldGVycyhMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2Vy
dmVycywgYm9vbGVhbiBpbml0aWF0b3IsCi0gICAgICAgIFN0cmluZyBjbGllbnRJZCwgU3RyaW5n
IHdzc1VybCwgU3RyaW5nIHdzc1Bvc3RVcmwsIFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCwK
LSAgICAgICAgTGlzdDxJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0ZXMpIHsKLSAgICAgIHRoaXMu
aWNlU2VydmVycyA9IGljZVNlcnZlcnM7Ci0gICAgICB0aGlzLmluaXRpYXRvciA9IGluaXRpYXRv
cjsKLSAgICAgIHRoaXMuY2xpZW50SWQgPSBjbGllbnRJZDsKLSAgICAgIHRoaXMud3NzVXJsID0g
d3NzVXJsOwotICAgICAgdGhpcy53c3NQb3N0VXJsID0gd3NzUG9zdFVybDsKLSAgICAgIHRoaXMu
b2ZmZXJTZHAgPSBvZmZlclNkcDsKLSAgICAgIHRoaXMuaWNlQ2FuZGlkYXRlcyA9IGljZUNhbmRp
ZGF0ZXM7Ci0gICAgfQotICB9Ci0KLSAgLyoqCi0gICAqIENhbGxiYWNrIGludGVyZmFjZSBmb3Ig
bWVzc2FnZXMgZGVsaXZlcmVkIG9uIHNpZ25hbGluZyBjaGFubmVsLgotICAgKgotICAgKiA8cD5N
ZXRob2RzIGFyZSBndWFyYW50ZWVkIHRvIGJlIGludm9rZWQgb24gdGhlIFVJIHRocmVhZCBvZiB8
YWN0aXZpdHl8LgotICAgKi8KLSAgaW50ZXJmYWNlIFNpZ25hbGluZ0V2ZW50cyB7Ci0gICAgLyoq
Ci0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSB0aGUgcm9vbSdzIHNpZ25hbGluZyBwYXJhbWV0
ZXJzCi0gICAgICogU2lnbmFsaW5nUGFyYW1ldGVycyBhcmUgZXh0cmFjdGVkLgotICAgICAqLwot
ICAgIHZvaWQgb25Db25uZWN0ZWRUb1Jvb20oZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJh
bXMpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSByZW1vdGUgU0RQIGlz
IHJlY2VpdmVkLgotICAgICAqLwotICAgIHZvaWQgb25SZW1vdGVEZXNjcmlwdGlvbihmaW5hbCBT
ZXNzaW9uRGVzY3JpcHRpb24gc2RwKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVk
IG9uY2UgcmVtb3RlIEljZSBjYW5kaWRhdGUgaXMgcmVjZWl2ZWQuCi0gICAgICovCi0gICAgdm9p
ZCBvblJlbW90ZUljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcmVtb3RlIEljZSBjYW5kaWRhdGUg
cmVtb3ZhbHMgYXJlIHJlY2VpdmVkLgotICAgICAqLwotICAgIHZvaWQgb25SZW1vdGVJY2VDYW5k
aWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKTsKLQotICAgIC8q
KgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgY2hhbm5lbCBpcyBjbG9zZWQuCi0gICAgICov
Ci0gICAgdm9pZCBvbkNoYW5uZWxDbG9zZSgpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sg
ZmlyZWQgb25jZSBjaGFubmVsIGVycm9yIGhhcHBlbmVkLgotICAgICAqLwotICAgIHZvaWQgb25D
aGFubmVsRXJyb3IoZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uKTsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ1Byb3hpbWl0eVNlbnNvci5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENQcm94aW1pdHlTZW5z
b3IuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L0FwcFJUQ1Byb3hpbWl0eVNlbnNvci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTY4ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1p
bXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXBwUlRDVXRpbHM7Ci0KLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvcjsKLWlt
cG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvckV2ZW50OwotaW1wb3J0IGFuZHJvaWQuaGFyZHdh
cmUuU2Vuc29yRXZlbnRMaXN0ZW5lcjsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvck1h
bmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9n
OwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5UaHJlYWRVdGlsczsKLQotLyoqCi0gKiBBcHBSVENQcm94
aW1pdHlTZW5zb3IgbWFuYWdlcyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcHJveGltaXR5IHNl
bnNvciBpbgotICogdGhlIEFwcFJUQyBkZW1vLgotICogT24gbW9zdCBkZXZpY2UsIHRoZSBwcm94
aW1pdHkgc2Vuc29yIGlzIGltcGxlbWVudGVkIGFzIGEgYm9vbGVhbi1zZW5zb3IuCi0gKiBJdCBy
ZXR1cm5zIGp1c3QgdHdvIHZhbHVlcyAiTkVBUiIgb3IgIkZBUiIuIFRocmVzaG9sZGluZyBpcyBk
b25lIG9uIHRoZSBMVVgKLSAqIHZhbHVlIGkuZS4gdGhlIExVWCB2YWx1ZSBvZiB0aGUgbGlnaHQg
c2Vuc29yIGlzIGNvbXBhcmVkIHdpdGggYSB0aHJlc2hvbGQuCi0gKiBBIExVWC12YWx1ZSBtb3Jl
IHRoYW4gdGhlIHRocmVzaG9sZCBtZWFucyB0aGUgcHJveGltaXR5IHNlbnNvciByZXR1cm5zICJG
QVIiLgotICogQW55dGhpbmcgbGVzcyB0aGFuIHRoZSB0aHJlc2hvbGQgdmFsdWUgYW5kIHRoZSBz
ZW5zb3IgIHJldHVybnMgIk5FQVIiLgotICovCi1wdWJsaWMgY2xhc3MgQXBwUlRDUHJveGltaXR5
U2Vuc29yIGltcGxlbWVudHMgU2Vuc29yRXZlbnRMaXN0ZW5lciB7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBUQUcgPSAiQXBwUlRDUHJveGltaXR5U2Vuc29yIjsKLQotICAvLyBUaGlz
IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkLCBzdGFydGVkIGFuZCBzdG9wcGVkIG9uIG9uZSB0aHJl
YWQKLSAgLy8gKGUuZy4gdGhlIG1haW4gdGhyZWFkKS4gV2UgdXNlIHxub25UaHJlYWRTYWZlfCB0
byBlbnN1cmUgdGhhdCB0aGlzIGlzCi0gIC8vIHRoZSBjYXNlLiBPbmx5IGFjdGl2ZSB3aGVuIHxE
RUJVR3wgaXMgc2V0IHRvIHRydWUuCi0gIHByaXZhdGUgZmluYWwgVGhyZWFkVXRpbHMuVGhyZWFk
Q2hlY2tlciB0aHJlYWRDaGVja2VyID0gbmV3IFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIoKTsK
LQotICBwcml2YXRlIGZpbmFsIFJ1bm5hYmxlIG9uU2Vuc29yU3RhdGVMaXN0ZW5lcjsKLSAgcHJp
dmF0ZSBmaW5hbCBTZW5zb3JNYW5hZ2VyIHNlbnNvck1hbmFnZXI7Ci0gIHByaXZhdGUgU2Vuc29y
IHByb3hpbWl0eVNlbnNvciA9IG51bGw7Ci0gIHByaXZhdGUgYm9vbGVhbiBsYXN0U3RhdGVSZXBv
cnRJc05lYXIgPSBmYWxzZTsKLQotICAvKiogQ29uc3RydWN0aW9uICovCi0gIHN0YXRpYyBBcHBS
VENQcm94aW1pdHlTZW5zb3IgY3JlYXRlKENvbnRleHQgY29udGV4dCwgUnVubmFibGUgc2Vuc29y
U3RhdGVMaXN0ZW5lcikgewotICAgIHJldHVybiBuZXcgQXBwUlRDUHJveGltaXR5U2Vuc29yKGNv
bnRleHQsIHNlbnNvclN0YXRlTGlzdGVuZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBBcHBSVENQcm94
aW1pdHlTZW5zb3IoQ29udGV4dCBjb250ZXh0LCBSdW5uYWJsZSBzZW5zb3JTdGF0ZUxpc3RlbmVy
KSB7Ci0gICAgTG9nLmQoVEFHLCAiQXBwUlRDUHJveGltaXR5U2Vuc29yIiArIEFwcFJUQ1V0aWxz
LmdldFRocmVhZEluZm8oKSk7Ci0gICAgb25TZW5zb3JTdGF0ZUxpc3RlbmVyID0gc2Vuc29yU3Rh
dGVMaXN0ZW5lcjsKLSAgICBzZW5zb3JNYW5hZ2VyID0gKChTZW5zb3JNYW5hZ2VyKSBjb250ZXh0
LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5TRU5TT1JfU0VSVklDRSkpOwotICB9Ci0KLSAgLyoq
Ci0gICAqIEFjdGl2YXRlIHRoZSBwcm94aW1pdHkgc2Vuc29yLiBBbHNvIGRvIGluaXRpYWxpemF0
aW9uIGlmIGNhbGxlZCBmb3IgdGhlCi0gICAqIGZpcnN0IHRpbWUuCi0gICAqLwotICBwdWJsaWMg
Ym9vbGVhbiBzdGFydCgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFk
KCk7Ci0gICAgTG9nLmQoVEFHLCAic3RhcnQiICsgQXBwUlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygp
KTsKLSAgICBpZiAoIWluaXREZWZhdWx0U2Vuc29yKCkpIHsKLSAgICAgIC8vIFByb3hpbWl0eSBz
ZW5zb3IgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGRldmljZS4KLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgc2Vuc29yTWFuYWdlci5yZWdpc3Rlckxpc3RlbmVyKHRoaXMsIHByb3hp
bWl0eVNlbnNvciwgU2Vuc29yTWFuYWdlci5TRU5TT1JfREVMQVlfTk9STUFMKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKiBEZWFjdGl2YXRlIHRoZSBwcm94aW1pdHkgc2Vuc29yLiAq
LwotICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFs
aWRUaHJlYWQoKTsKLSAgICBMb2cuZChUQUcsICJzdG9wIiArIEFwcFJUQ1V0aWxzLmdldFRocmVh
ZEluZm8oKSk7Ci0gICAgaWYgKHByb3hpbWl0eVNlbnNvciA9PSBudWxsKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIHNlbnNvck1hbmFnZXIudW5yZWdpc3Rlckxpc3RlbmVyKHRoaXMsIHBy
b3hpbWl0eVNlbnNvcik7Ci0gIH0KLQotICAvKiogR2V0dGVyIGZvciBsYXN0IHJlcG9ydGVkIHN0
YXRlLiBTZXQgdG8gdHJ1ZSBpZiAibmVhciIgaXMgcmVwb3J0ZWQuICovCi0gIHB1YmxpYyBib29s
ZWFuIHNlbnNvclJlcG9ydHNOZWFyU3RhdGUoKSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lz
T25WYWxpZFRocmVhZCgpOwotICAgIHJldHVybiBsYXN0U3RhdGVSZXBvcnRJc05lYXI7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFsIHZvaWQgb25BY2N1cmFjeUNoYW5nZWQoU2Vu
c29yIHNlbnNvciwgaW50IGFjY3VyYWN5KSB7Ci0gICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25W
YWxpZFRocmVhZCgpOwotICAgIEFwcFJUQ1V0aWxzLmFzc2VydElzVHJ1ZShzZW5zb3IuZ2V0VHlw
ZSgpID09IFNlbnNvci5UWVBFX1BST1hJTUlUWSk7Ci0gICAgaWYgKGFjY3VyYWN5ID09IFNlbnNv
ck1hbmFnZXIuU0VOU09SX1NUQVRVU19VTlJFTElBQkxFKSB7Ci0gICAgICBMb2cuZShUQUcsICJU
aGUgdmFsdWVzIHJldHVybmVkIGJ5IHRoaXMgc2Vuc29yIGNhbm5vdCBiZSB0cnVzdGVkIik7Ci0g
ICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBmaW5hbCB2b2lkIG9uU2Vuc29yQ2hh
bmdlZChTZW5zb3JFdmVudCBldmVudCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFs
aWRUaHJlYWQoKTsKLSAgICBBcHBSVENVdGlscy5hc3NlcnRJc1RydWUoZXZlbnQuc2Vuc29yLmdl
dFR5cGUoKSA9PSBTZW5zb3IuVFlQRV9QUk9YSU1JVFkpOwotICAgIC8vIEFzIGEgYmVzdCBwcmFj
dGljZTsgZG8gYXMgbGl0dGxlIGFzIHBvc3NpYmxlIHdpdGhpbiB0aGlzIG1ldGhvZCBhbmQKLSAg
ICAvLyBhdm9pZCBibG9ja2luZy4KLSAgICBmbG9hdCBkaXN0YW5jZUluQ2VudGltZXRlcnMgPSBl
dmVudC52YWx1ZXNbMF07Ci0gICAgaWYgKGRpc3RhbmNlSW5DZW50aW1ldGVycyA8IHByb3hpbWl0
eVNlbnNvci5nZXRNYXhpbXVtUmFuZ2UoKSkgewotICAgICAgTG9nLmQoVEFHLCAiUHJveGltaXR5
IHNlbnNvciA9PiBORUFSIHN0YXRlIik7Ci0gICAgICBsYXN0U3RhdGVSZXBvcnRJc05lYXIgPSB0
cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZChUQUcsICJQcm94aW1pdHkgc2Vuc29yID0+
IEZBUiBzdGF0ZSIpOwotICAgICAgbGFzdFN0YXRlUmVwb3J0SXNOZWFyID0gZmFsc2U7Ci0gICAg
fQotCi0gICAgLy8gUmVwb3J0IGFib3V0IG5ldyBzdGF0ZSB0byBsaXN0ZW5pbmcgY2xpZW50LiBD
bGllbnQgY2FuIHRoZW4gY2FsbAotICAgIC8vIHNlbnNvclJlcG9ydHNOZWFyU3RhdGUoKSB0byBx
dWVyeSB0aGUgY3VycmVudCBzdGF0ZSAoTkVBUiBvciBGQVIpLgotICAgIGlmIChvblNlbnNvclN0
YXRlTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgb25TZW5zb3JTdGF0ZUxpc3RlbmVyLnJ1bigp
OwotICAgIH0KLQotICAgIExvZy5kKFRBRywgIm9uU2Vuc29yQ2hhbmdlZCIgKyBBcHBSVENVdGls
cy5nZXRUaHJlYWRJbmZvKCkgKyAiOiAiCi0gICAgICAgICAgICArICJhY2N1cmFjeT0iICsgZXZl
bnQuYWNjdXJhY3kgKyAiLCB0aW1lc3RhbXA9IiArIGV2ZW50LnRpbWVzdGFtcCArICIsIGRpc3Rh
bmNlPSIKLSAgICAgICAgICAgICsgZXZlbnQudmFsdWVzWzBdKTsKLSAgfQotCi0gIC8qKgotICAg
KiBHZXQgZGVmYXVsdCBwcm94aW1pdHkgc2Vuc29yIGlmIGl0IGV4aXN0cy4gVGFibGV0IGRldmlj
ZXMgKGUuZy4gTmV4dXMgNykKLSAgICogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIHR5cGUgb2Ygc2Vu
c29yIGFuZCBmYWxzZSB3aWxsIGJlIHJldHVybmVkIGluIHN1Y2gKLSAgICogY2FzZXMuCi0gICAq
LwotICBwcml2YXRlIGJvb2xlYW4gaW5pdERlZmF1bHRTZW5zb3IoKSB7Ci0gICAgaWYgKHByb3hp
bWl0eVNlbnNvciAhPSBudWxsKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcHJv
eGltaXR5U2Vuc29yID0gc2Vuc29yTWFuYWdlci5nZXREZWZhdWx0U2Vuc29yKFNlbnNvci5UWVBF
X1BST1hJTUlUWSk7Ci0gICAgaWYgKHByb3hpbWl0eVNlbnNvciA9PSBudWxsKSB7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGxvZ1Byb3hpbWl0eVNlbnNvckluZm8oKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIGZvciBsb2dnaW5nIGluZm9y
bWF0aW9uIGFib3V0IHRoZSBwcm94aW1pdHkgc2Vuc29yLiAqLwotICBwcml2YXRlIHZvaWQgbG9n
UHJveGltaXR5U2Vuc29ySW5mbygpIHsKLSAgICBpZiAocHJveGltaXR5U2Vuc29yID09IG51bGwp
IHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgU3RyaW5nQnVpbGRlciBpbmZvID0gbmV3IFN0
cmluZ0J1aWxkZXIoIlByb3hpbWl0eSBzZW5zb3I6ICIpOwotICAgIGluZm8uYXBwZW5kKCJuYW1l
PSIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0TmFtZSgpKTsKLSAgICBpbmZvLmFwcGVuZCgi
LCB2ZW5kb3I6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0VmVuZG9yKCkpOwotICAgIGlu
Zm8uYXBwZW5kKCIsIHBvd2VyOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldFBvd2VyKCkp
OwotICAgIGluZm8uYXBwZW5kKCIsIHJlc29sdXRpb246ICIpLmFwcGVuZChwcm94aW1pdHlTZW5z
b3IuZ2V0UmVzb2x1dGlvbigpKTsKLSAgICBpbmZvLmFwcGVuZCgiLCBtYXggcmFuZ2U6ICIpLmFw
cGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0TWF4aW11bVJhbmdlKCkpOwotICAgIGlmIChCdWlsZC5W
RVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5HSU5HRVJCUkVBRCkgewotICAg
ICAgLy8gQWRkZWQgaW4gQVBJIGxldmVsIDkuCi0gICAgICBpbmZvLmFwcGVuZCgiLCBtaW4gZGVs
YXk6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0TWluRGVsYXkoKSk7Ci0gICAgfQotICAg
IGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVRf
V0FUQ0gpIHsKLSAgICAgIC8vIEFkZGVkIGluIEFQSSBsZXZlbCAyMC4KLSAgICAgIGluZm8uYXBw
ZW5kKCIsIHR5cGU6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0U3RyaW5nVHlwZSgpKTsK
LSAgICB9Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NP
REVTLkxPTExJUE9QKSB7Ci0gICAgICAvLyBBZGRlZCBpbiBBUEkgbGV2ZWwgMjEuCi0gICAgICBp
bmZvLmFwcGVuZCgiLCBtYXggZGVsYXk6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0TWF4
RGVsYXkoKSk7Ci0gICAgICBpbmZvLmFwcGVuZCgiLCByZXBvcnRpbmcgbW9kZTogIikuYXBwZW5k
KHByb3hpbWl0eVNlbnNvci5nZXRSZXBvcnRpbmdNb2RlKCkpOwotICAgICAgaW5mby5hcHBlbmQo
IiwgaXNXYWtlVXBTZW5zb3I6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuaXNXYWtlVXBTZW5z
b3IoKSk7Ci0gICAgfQotICAgIExvZy5kKFRBRywgaW5mby50b1N0cmluZygpKTsKLSAgfQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhbGxBY3Rpdml0eS5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYWxsQWN0aXZpdHkuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhbGxBY3Rp
dml0eS5qYXZhCShub25leGlzdGVudCkKQEAgLTEsODcxICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAu
QWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7Ci1pbXBvcnQgYW5kcm9p
ZC5hcHAuRnJhZ21lbnRUcmFuc2FjdGlvbjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4
dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5h
Z2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEucHJvamVjdGlvbi5NZWRpYVByb2plY3Rpb247Ci1p
bXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0aW9uLk1lZGlhUHJvamVjdGlvbk1hbmFnZXI7Ci1p
bXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0
IGFuZHJvaWQub3MuSGFuZGxlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuRGlzcGxheU1ldHJpY3M7
Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWlt
cG9ydCBhbmRyb2lkLnZpZXcuV2luZG93OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5h
Z2VyOwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3dNYW5hZ2VyLkxheW91dFBhcmFtczsKLWlt
cG9ydCBhbmRyb2lkLndpZGdldC5Ub2FzdDsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwot
aW1wb3J0IGphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJh
eUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRj
LkFwcFJUQ0NsaWVudC5Sb29tQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLmFwcHNw
b3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy5h
cHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlvbkNsaWVudC5QZWVyQ29ubmVjdGlvblBhcmFtZXRl
cnM7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmExRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2Vi
cnRjLkNhbWVyYTJFbnVtZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRv
cjsKLWltcG9ydCBvcmcud2VicnRjLkVnbEJhc2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5GaWxlVmlk
ZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcu
d2VicnRjLkxvZ2dpbmc7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbkZhY3Rvcnk7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SZW5kZXJlckNvbW1vbi5TY2FsaW5nVHlwZTsKLWltcG9ydCBv
cmcud2VicnRjLlNjcmVlbkNhcHR1cmVyQW5kcm9pZDsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Np
b25EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlN0YXRzUmVwb3J0OwotaW1wb3J0IG9y
Zy53ZWJydGMuU3VyZmFjZVZpZXdSZW5kZXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvQ2Fw
dHVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0ZpbGVSZW5kZXJlcjsKLWltcG9ydCBvcmcu
d2VicnRjLlZpZGVvUmVuZGVyZXI7Ci0KLS8qKgotICogQWN0aXZpdHkgZm9yIHBlZXIgY29ubmVj
dGlvbiBjYWxsIHNldHVwLCBjYWxsIHdhaXRpbmcKLSAqIGFuZCBjYWxsIHZpZXcuCi0gKi8KLXB1
YmxpYyBjbGFzcyBDYWxsQWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSBpbXBsZW1lbnRzIEFwcFJU
Q0NsaWVudC5TaWduYWxpbmdFdmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQZWVyQ29ubmVjdGlvbkNsaWVudC5QZWVyQ29ubmVjdGlv
bkV2ZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENhbGxGcmFnbWVudC5PbkNhbGxFdmVudHMgewotICBwdWJsaWMgc3RhdGljIGZpbmFs
IFN0cmluZyBFWFRSQV9ST09NSUQgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlJPT01JRCI7Ci0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0xPT1BCQUNLID0gIm9yZy5hcHBzcG90LmFw
cHJ0Yy5MT09QQkFDSyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVP
X0NBTEwgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJREVPX0NBTEwiOwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIFN0cmluZyBFWFRSQV9TQ1JFRU5DQVBUVVJFID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5T
Q1JFRU5DQVBUVVJFIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQ0FNRVJB
MiA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQ0FNRVJBMiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwg
U3RyaW5nIEVYVFJBX1ZJREVPX1dJRFRIID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT19XSURU
SCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVPX0hFSUdIVCA9ICJv
cmcuYXBwc3BvdC5hcHBydGMuVklERU9fSEVJR0hUIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBT
dHJpbmcgRVhUUkFfVklERU9fRlBTID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT19GUFMiOwot
ICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19DQVBUVVJFUVVBTElUWVNM
SURFUl9FTkFCTEVEID0KLSAgICAgICJvcmcuYXBwc29wdC5hcHBydGMuVklERU9fQ0FQVFVSRVFV
QUxJVFlTTElERVIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19C
SVRSQVRFID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT19CSVRSQVRFIjsKLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9DT0RFQyA9ICJvcmcuYXBwc3BvdC5hcHBydGMu
VklERU9DT0RFQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0hXQ09ERUNf
RU5BQkxFRCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuSFdDT0RFQyI7Ci0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgU3RyaW5nIEVYVFJBX0NBUFRVUkVUT1RFWFRVUkVfRU5BQkxFRCA9ICJvcmcuYXBwc3Bv
dC5hcHBydGMuQ0FQVFVSRVRPVEVYVFVSRSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5n
IEVYVFJBX0FVRElPX0JJVFJBVEUgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkFVRElPX0JJVFJBVEUi
OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9BVURJT0NPREVDID0gIm9yZy5h
cHBzcG90LmFwcHJ0Yy5BVURJT0NPREVDIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg
RVhUUkFfTk9BVURJT1BST0NFU1NJTkdfRU5BQkxFRCA9Ci0gICAgICAib3JnLmFwcHNwb3QuYXBw
cnRjLk5PQVVESU9QUk9DRVNTSU5HIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhU
UkFfQUVDRFVNUF9FTkFCTEVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5BRUNEVU1QIjsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfT1BFTlNMRVNfRU5BQkxFRCA9ICJvcmcuYXBw
c3BvdC5hcHBydGMuT1BFTlNMRVMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRS
QV9ESVNBQkxFX0JVSUxUX0lOX0FFQyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuRElTQUJMRV9CVUlM
VF9JTl9BRUMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ESVNBQkxFX0JV
SUxUX0lOX0FHQyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuRElTQUJMRV9CVUlMVF9JTl9BR0MiOwot
ICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ESVNBQkxFX0JVSUxUX0lOX05TID0g
Im9yZy5hcHBzcG90LmFwcHJ0Yy5ESVNBQkxFX0JVSUxUX0lOX05TIjsKLSAgcHVibGljIHN0YXRp
YyBmaW5hbCBTdHJpbmcgRVhUUkFfRU5BQkxFX0xFVkVMX0NPTlRST0wgPSAib3JnLmFwcHNwb3Qu
YXBwcnRjLkVOQUJMRV9MRVZFTF9DT05UUk9MIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJp
bmcgRVhUUkFfRElTUExBWV9IVUQgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkRJU1BMQVlfSFVEIjsK
LSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVFJBQ0lORyA9ICJvcmcuYXBwc3Bv
dC5hcHBydGMuVFJBQ0lORyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0NN
RExJTkUgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkNNRExJTkUiOwotICBwdWJsaWMgc3RhdGljIGZp
bmFsIFN0cmluZyBFWFRSQV9SVU5USU1FID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5SVU5USU1FIjsK
LSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9fRklMRV9BU19DQU1FUkEg
PSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJREVPX0ZJTEVfQVNfQ0FNRVJBIjsKLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRSA9Ci0gICAg
ICAib3JnLmFwcHNwb3QuYXBwcnRjLlNBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUiOwotICBwdWJs
aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX1dJ
RFRIID0KLSAgICAgICJvcmcuYXBwc3BvdC5hcHBydGMuU0FWRV9SRU1PVEVfVklERU9fVE9fRklM
RV9XSURUSCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NBVkVfUkVNT1RF
X1ZJREVPX1RPX0ZJTEVfSEVJR0hUID0KLSAgICAgICJvcmcuYXBwc3BvdC5hcHBydGMuU0FWRV9S
RU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmlu
ZyBFWFRSQV9VU0VfVkFMVUVTX0ZST01fSU5URU5UID0KLSAgICAgICJvcmcuYXBwc3BvdC5hcHBy
dGMuVVNFX1ZBTFVFU19GUk9NX0lOVEVOVCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBUQUcgPSAiQ2FsbFJUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQVBU
VVJFX1BFUk1JU1NJT05fUkVRVUVTVF9DT0RFID0gMTsKLQotICAvLyBMaXN0IG9mIG1hbmRhdG9y
eSBhcHBsaWNhdGlvbiBwZXJtaXNzaW9ucy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
W10gTUFOREFUT1JZX1BFUk1JU1NJT05TID0geyJhbmRyb2lkLnBlcm1pc3Npb24uTU9ESUZZX0FV
RElPX1NFVFRJTkdTIiwKLSAgICAgICJhbmRyb2lkLnBlcm1pc3Npb24uUkVDT1JEX0FVRElPIiwg
ImFuZHJvaWQucGVybWlzc2lvbi5JTlRFUk5FVCJ9OwotCi0gIC8vIFBlZXIgY29ubmVjdGlvbiBz
dGF0aXN0aWNzIGNhbGxiYWNrIHBlcmlvZCBpbiBtcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IFNUQVRfQ0FMTEJBQ0tfUEVSSU9EID0gMTAwMDsKLSAgLy8gTG9jYWwgcHJldmlldyBzY3Jl
ZW4gcG9zaXRpb24gYmVmb3JlIGNhbGwgaXMgY29ubmVjdGVkLgotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgTE9DQUxfWF9DT05ORUNUSU5HID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IExPQ0FMX1lfQ09OTkVDVElORyA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBM
T0NBTF9XSURUSF9DT05ORUNUSU5HID0gMTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
TE9DQUxfSEVJR0hUX0NPTk5FQ1RJTkcgPSAxMDA7Ci0gIC8vIExvY2FsIHByZXZpZXcgc2NyZWVu
IHBvc2l0aW9uIGFmdGVyIGNhbGwgaXMgY29ubmVjdGVkLgotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgTE9DQUxfWF9DT05ORUNURUQgPSA3MjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IExPQ0FMX1lfQ09OTkVDVEVEID0gNzI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NB
TF9XSURUSF9DT05ORUNURUQgPSAyNTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FM
X0hFSUdIVF9DT05ORUNURUQgPSAyNTsKLSAgLy8gUmVtb3RlIHZpZGVvIHNjcmVlbiBwb3NpdGlv
bgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVNT1RFX1ggPSAwOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgUkVNT1RFX1kgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
UkVNT1RFX1dJRFRIID0gMTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUkVNT1RFX0hF
SUdIVCA9IDEwMDsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbkNsaWVudCBwZWVyQ29ubmVjdGlv
bkNsaWVudCA9IG51bGw7Ci0gIHByaXZhdGUgQXBwUlRDQ2xpZW50IGFwcFJ0Y0NsaWVudDsKLSAg
cHJpdmF0ZSBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnM7Ci0gIHByaXZh
dGUgQXBwUlRDQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlciA9IG51bGw7Ci0gIHByaXZhdGUgRWds
QmFzZSByb290RWdsQmFzZTsKLSAgcHJpdmF0ZSBTdXJmYWNlVmlld1JlbmRlcmVyIGxvY2FsUmVu
ZGVyOwotICBwcml2YXRlIFN1cmZhY2VWaWV3UmVuZGVyZXIgcmVtb3RlUmVuZGVyU2NyZWVuOwot
ICBwcml2YXRlIFZpZGVvRmlsZVJlbmRlcmVyIHZpZGVvRmlsZVJlbmRlcmVyOwotICBwcml2YXRl
IGZpbmFsIExpc3Q8VmlkZW9SZW5kZXJlci5DYWxsYmFja3M+IHJlbW90ZVJlbmRlcmVycyA9Ci0g
ICAgICBuZXcgQXJyYXlMaXN0PFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzPigpOwotICBwcml2YXRl
IFBlcmNlbnRGcmFtZUxheW91dCBsb2NhbFJlbmRlckxheW91dDsKLSAgcHJpdmF0ZSBQZXJjZW50
RnJhbWVMYXlvdXQgcmVtb3RlUmVuZGVyTGF5b3V0OwotICBwcml2YXRlIFNjYWxpbmdUeXBlIHNj
YWxpbmdUeXBlOwotICBwcml2YXRlIFRvYXN0IGxvZ1RvYXN0OwotICBwcml2YXRlIGJvb2xlYW4g
Y29tbWFuZExpbmVSdW47Ci0gIHByaXZhdGUgaW50IHJ1blRpbWVNczsKLSAgcHJpdmF0ZSBib29s
ZWFuIGFjdGl2aXR5UnVubmluZzsKLSAgcHJpdmF0ZSBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMg
cm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gIHByaXZhdGUgYm9vbGVhbiBpY2VDb25u
ZWN0ZWQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0Vycm9yOwotICBwcml2YXRlIGJvb2xlYW4gY2Fs
bENvbnRyb2xGcmFnbWVudFZpc2libGUgPSB0cnVlOwotICBwcml2YXRlIGxvbmcgY2FsbFN0YXJ0
ZWRUaW1lTXMgPSAwOwotICBwcml2YXRlIGJvb2xlYW4gbWljRW5hYmxlZCA9IHRydWU7Ci0gIHBy
aXZhdGUgYm9vbGVhbiBzY3JlZW5jYXB0dXJlRW5hYmxlZCA9IGZhbHNlOwotICBwcml2YXRlIHN0
YXRpYyBJbnRlbnQgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGE7Ci0gIHByaXZh
dGUgc3RhdGljIGludCBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0Q29kZTsKLQotICAv
LyBDb250cm9scwotICBwcml2YXRlIENhbGxGcmFnbWVudCBjYWxsRnJhZ21lbnQ7Ci0gIHByaXZh
dGUgSHVkRnJhZ21lbnQgaHVkRnJhZ21lbnQ7Ci0gIHByaXZhdGUgQ3B1TW9uaXRvciBjcHVNb25p
dG9yOwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJ
bnN0YW5jZVN0YXRlKSB7Ci0gICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsK
LSAgICBUaHJlYWQuc2V0RGVmYXVsdFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcihuZXcgVW5oYW5k
bGVkRXhjZXB0aW9uSGFuZGxlcih0aGlzKSk7Ci0KLSAgICAvLyBTZXQgd2luZG93IHN0eWxlcyBm
b3IgZnVsbHNjcmVlbi13aW5kb3cgc2l6ZS4gTmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUKLSAgICAv
LyBhZGRpbmcgY29udGVudC4KLSAgICByZXF1ZXN0V2luZG93RmVhdHVyZShXaW5kb3cuRkVBVFVS
RV9OT19USVRMRSk7Ci0gICAgZ2V0V2luZG93KCkuYWRkRmxhZ3MoTGF5b3V0UGFyYW1zLkZMQUdf
RlVMTFNDUkVFTiB8IExheW91dFBhcmFtcy5GTEFHX0tFRVBfU0NSRUVOX09OCi0gICAgICAgIHwg
TGF5b3V0UGFyYW1zLkZMQUdfRElTTUlTU19LRVlHVUFSRCB8IExheW91dFBhcmFtcy5GTEFHX1NI
T1dfV0hFTl9MT0NLRUQKLSAgICAgICAgfCBMYXlvdXRQYXJhbXMuRkxBR19UVVJOX1NDUkVFTl9P
Tik7Ci0gICAgZ2V0V2luZG93KCkuZ2V0RGVjb3JWaWV3KCkuc2V0U3lzdGVtVWlWaXNpYmlsaXR5
KFZpZXcuU1lTVEVNX1VJX0ZMQUdfSElERV9OQVZJR0FUSU9OCi0gICAgICAgIHwgVmlldy5TWVNU
RU1fVUlfRkxBR19GVUxMU0NSRUVOIHwgVmlldy5TWVNURU1fVUlfRkxBR19JTU1FUlNJVkVfU1RJ
Q0tZKTsKLSAgICBzZXRDb250ZW50VmlldyhSLmxheW91dC5hY3Rpdml0eV9jYWxsKTsKLQotICAg
IGljZUNvbm5lY3RlZCA9IGZhbHNlOwotICAgIHNpZ25hbGluZ1BhcmFtZXRlcnMgPSBudWxsOwot
ICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJTEw7Ci0KLSAgICAv
LyBDcmVhdGUgVUkgY29udHJvbHMuCi0gICAgbG9jYWxSZW5kZXIgPSAoU3VyZmFjZVZpZXdSZW5k
ZXJlcikgZmluZFZpZXdCeUlkKFIuaWQubG9jYWxfdmlkZW9fdmlldyk7Ci0gICAgcmVtb3RlUmVu
ZGVyU2NyZWVuID0gKFN1cmZhY2VWaWV3UmVuZGVyZXIpIGZpbmRWaWV3QnlJZChSLmlkLnJlbW90
ZV92aWRlb192aWV3KTsKLSAgICBsb2NhbFJlbmRlckxheW91dCA9IChQZXJjZW50RnJhbWVMYXlv
dXQpIGZpbmRWaWV3QnlJZChSLmlkLmxvY2FsX3ZpZGVvX2xheW91dCk7Ci0gICAgcmVtb3RlUmVu
ZGVyTGF5b3V0ID0gKFBlcmNlbnRGcmFtZUxheW91dCkgZmluZFZpZXdCeUlkKFIuaWQucmVtb3Rl
X3ZpZGVvX2xheW91dCk7Ci0gICAgY2FsbEZyYWdtZW50ID0gbmV3IENhbGxGcmFnbWVudCgpOwot
ICAgIGh1ZEZyYWdtZW50ID0gbmV3IEh1ZEZyYWdtZW50KCk7Ci0KLSAgICAvLyBTaG93L2hpZGUg
Y2FsbCBjb250cm9sIGZyYWdtZW50IG9uIHZpZXcgY2xpY2suCi0gICAgVmlldy5PbkNsaWNrTGlz
dGVuZXIgbGlzdGVuZXIgPSBuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIHRv
Z2dsZUNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmlsaXR5KCk7Ci0gICAgICB9Ci0gICAgfTsKLQot
ICAgIGxvY2FsUmVuZGVyLnNldE9uQ2xpY2tMaXN0ZW5lcihsaXN0ZW5lcik7Ci0gICAgcmVtb3Rl
UmVuZGVyU2NyZWVuLnNldE9uQ2xpY2tMaXN0ZW5lcihsaXN0ZW5lcik7Ci0gICAgcmVtb3RlUmVu
ZGVyZXJzLmFkZChyZW1vdGVSZW5kZXJTY3JlZW4pOwotCi0gICAgZmluYWwgSW50ZW50IGludGVu
dCA9IGdldEludGVudCgpOwotCi0gICAgLy8gQ3JlYXRlIHZpZGVvIHJlbmRlcmVycy4KLSAgICBy
b290RWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKCk7Ci0gICAgbG9jYWxSZW5kZXIuaW5pdChyb290
RWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBudWxsKTsKLSAgICBTdHJpbmcgc2F2ZVJlbW90
ZVZpZGVvVG9GaWxlID0gaW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX1NBVkVfUkVNT1RFX1ZJ
REVPX1RPX0ZJTEUpOwotCi0gICAgLy8gV2hlbiBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUgaXMgc2V0
IHdlIHNhdmUgdGhlIHZpZGVvIGZyb20gdGhlIHJlbW90ZSB0byBhIGZpbGUuCi0gICAgaWYgKHNh
dmVSZW1vdGVWaWRlb1RvRmlsZSAhPSBudWxsKSB7Ci0gICAgICBpbnQgdmlkZW9PdXRXaWR0aCA9
IGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRI
LCAwKTsKLSAgICAgIGludCB2aWRlb091dEhlaWdodCA9IGludGVudC5nZXRJbnRFeHRyYShFWFRS
QV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hFSUdIVCwgMCk7Ci0gICAgICB0cnkgewotICAg
ICAgICB2aWRlb0ZpbGVSZW5kZXJlciA9IG5ldyBWaWRlb0ZpbGVSZW5kZXJlcigKLSAgICAgICAg
ICAgIHNhdmVSZW1vdGVWaWRlb1RvRmlsZSwgdmlkZW9PdXRXaWR0aCwgdmlkZW9PdXRIZWlnaHQs
IHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotICAgICAgICByZW1vdGVSZW5kZXJl
cnMuYWRkKHZpZGVvRmlsZVJlbmRlcmVyKTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUp
IHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAiRmFp
bGVkIHRvIG9wZW4gdmlkZW8gZmlsZSBmb3Igb3V0cHV0OiAiICsgc2F2ZVJlbW90ZVZpZGVvVG9G
aWxlLCBlKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuLmluaXQocm9v
dEVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSwgbnVsbCk7Ci0KLSAgICBsb2NhbFJlbmRlci5z
ZXRaT3JkZXJNZWRpYU92ZXJsYXkodHJ1ZSk7Ci0gICAgdXBkYXRlVmlkZW9WaWV3KCk7Ci0KLSAg
ICAvLyBDaGVjayBmb3IgbWFuZGF0b3J5IHBlcm1pc3Npb25zLgotICAgIGZvciAoU3RyaW5nIHBl
cm1pc3Npb24gOiBNQU5EQVRPUllfUEVSTUlTU0lPTlMpIHsKLSAgICAgIGlmIChjaGVja0NhbGxp
bmdPclNlbGZQZXJtaXNzaW9uKHBlcm1pc3Npb24pICE9IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJ
T05fR1JBTlRFRCkgewotICAgICAgICBsb2dBbmRUb2FzdCgiUGVybWlzc2lvbiAiICsgcGVybWlz
c2lvbiArICIgaXMgbm90IGdyYW50ZWQiKTsKLSAgICAgICAgc2V0UmVzdWx0KFJFU1VMVF9DQU5D
RUxFRCk7Ci0gICAgICAgIGZpbmlzaCgpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAg
fQotCi0gICAgVXJpIHJvb21VcmkgPSBpbnRlbnQuZ2V0RGF0YSgpOwotICAgIGlmIChyb29tVXJp
ID09IG51bGwpIHsKLSAgICAgIGxvZ0FuZFRvYXN0KGdldFN0cmluZyhSLnN0cmluZy5taXNzaW5n
X3VybCkpOwotICAgICAgTG9nLmUoVEFHLCAiRGlkbid0IGdldCBhbnkgVVJMIGluIGludGVudCEi
KTsKLSAgICAgIHNldFJlc3VsdChSRVNVTFRfQ0FOQ0VMRUQpOwotICAgICAgZmluaXNoKCk7Ci0g
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gR2V0IEludGVudCBwYXJhbWV0ZXJzLgotICAg
IFN0cmluZyByb29tSWQgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfUk9PTUlEKTsKLSAg
ICBMb2cuZChUQUcsICJSb29tIElEOiAiICsgcm9vbUlkKTsKLSAgICBpZiAocm9vbUlkID09IG51
bGwgfHwgcm9vbUlkLmxlbmd0aCgpID09IDApIHsKLSAgICAgIGxvZ0FuZFRvYXN0KGdldFN0cmlu
ZyhSLnN0cmluZy5taXNzaW5nX3VybCkpOwotICAgICAgTG9nLmUoVEFHLCAiSW5jb3JyZWN0IHJv
b20gSUQgaW4gaW50ZW50ISIpOwotICAgICAgc2V0UmVzdWx0KFJFU1VMVF9DQU5DRUxFRCk7Ci0g
ICAgICBmaW5pc2goKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBib29sZWFuIGxvb3Bi
YWNrID0gaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9MT09QQkFDSywgZmFsc2UpOwotICAg
IGJvb2xlYW4gdHJhY2luZyA9IGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfVFJBQ0lORywg
ZmFsc2UpOwotCi0gICAgaW50IHZpZGVvV2lkdGggPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFf
VklERU9fV0lEVEgsIDApOwotICAgIGludCB2aWRlb0hlaWdodCA9IGludGVudC5nZXRJbnRFeHRy
YShFWFRSQV9WSURFT19IRUlHSFQsIDApOwotCi0gICAgc2NyZWVuY2FwdHVyZUVuYWJsZWQgPSBp
bnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX1NDUkVFTkNBUFRVUkUsIGZhbHNlKTsKLSAgICAv
LyBJZiBjYXB0dXJpbmcgZm9ybWF0IGlzIG5vdCBzcGVjaWZpZWQgZm9yIHNjcmVlbmNhcHR1cmUs
IHVzZSBzY3JlZW4gcmVzb2x1dGlvbi4KLSAgICBpZiAoc2NyZWVuY2FwdHVyZUVuYWJsZWQgJiYg
dmlkZW9XaWR0aCA9PSAwICYmIHZpZGVvSGVpZ2h0ID09IDApIHsKLSAgICAgIERpc3BsYXlNZXRy
aWNzIGRpc3BsYXlNZXRyaWNzID0gbmV3IERpc3BsYXlNZXRyaWNzKCk7Ci0gICAgICBXaW5kb3dN
YW5hZ2VyIHdpbmRvd01hbmFnZXIgPQotICAgICAgICAgIChXaW5kb3dNYW5hZ2VyKSBnZXRBcHBs
aWNhdGlvbigpLmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5XSU5ET1dfU0VSVklDRSk7Ci0gICAg
ICB3aW5kb3dNYW5hZ2VyLmdldERlZmF1bHREaXNwbGF5KCkuZ2V0UmVhbE1ldHJpY3MoZGlzcGxh
eU1ldHJpY3MpOwotICAgICAgdmlkZW9XaWR0aCA9IGRpc3BsYXlNZXRyaWNzLndpZHRoUGl4ZWxz
OwotICAgICAgdmlkZW9IZWlnaHQgPSBkaXNwbGF5TWV0cmljcy5oZWlnaHRQaXhlbHM7Ci0gICAg
fQotCi0gICAgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzID0KLSAgICAgICAgbmV3IFBlZXJDb25u
ZWN0aW9uUGFyYW1ldGVycyhpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX1ZJREVPX0NBTEws
IHRydWUpLCBsb29wYmFjaywKLSAgICAgICAgICAgIHRyYWNpbmcsIHZpZGVvV2lkdGgsIHZpZGVv
SGVpZ2h0LCBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfVklERU9fRlBTLCAwKSwKLSAgICAgICAg
ICAgIGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9WSURFT19CSVRSQVRFLCAwKSwgaW50ZW50Lmdl
dFN0cmluZ0V4dHJhKEVYVFJBX1ZJREVPQ09ERUMpLAotICAgICAgICAgICAgaW50ZW50LmdldEJv
b2xlYW5FeHRyYShFWFRSQV9IV0NPREVDX0VOQUJMRUQsIHRydWUpLAotICAgICAgICAgICAgaW50
ZW50LmdldEludEV4dHJhKEVYVFJBX0FVRElPX0JJVFJBVEUsIDApLCBpbnRlbnQuZ2V0U3RyaW5n
RXh0cmEoRVhUUkFfQVVESU9DT0RFQyksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4
dHJhKEVYVFJBX05PQVVESU9QUk9DRVNTSU5HX0VOQUJMRUQsIGZhbHNlKSwKLSAgICAgICAgICAg
IGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfQUVDRFVNUF9FTkFCTEVELCBmYWxzZSksCi0g
ICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX09QRU5TTEVTX0VOQUJMRUQs
IGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfRElTQUJM
RV9CVUlMVF9JTl9BRUMsIGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0
cmEoRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BR0MsIGZhbHNlKSwKLSAgICAgICAgICAgIGludGVu
dC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9OUywgZmFsc2UpLAotICAg
ICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9FTkFCTEVfTEVWRUxfQ09OVFJP
TCwgZmFsc2UpKTsKLSAgICBjb21tYW5kTGluZVJ1biA9IGludGVudC5nZXRCb29sZWFuRXh0cmEo
RVhUUkFfQ01ETElORSwgZmFsc2UpOwotICAgIHJ1blRpbWVNcyA9IGludGVudC5nZXRJbnRFeHRy
YShFWFRSQV9SVU5USU1FLCAwKTsKLQotICAgIExvZy5kKFRBRywgIlZJREVPX0ZJTEU6ICciICsg
aW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX1ZJREVPX0ZJTEVfQVNfQ0FNRVJBKSArICInIik7
Ci0KLSAgICAvLyBDcmVhdGUgY29ubmVjdGlvbiBjbGllbnQuIFVzZSBEaXJlY3RSVENDbGllbnQg
aWYgcm9vbSBuYW1lIGlzIGFuIElQIG90aGVyd2lzZSB1c2UgdGhlCi0gICAgLy8gc3RhbmRhcmQg
V2ViU29ja2V0UlRDQ2xpZW50LgotICAgIGlmIChsb29wYmFjayB8fCAhRGlyZWN0UlRDQ2xpZW50
LklQX1BBVFRFUk4ubWF0Y2hlcihyb29tSWQpLm1hdGNoZXMoKSkgewotICAgICAgYXBwUnRjQ2xp
ZW50ID0gbmV3IFdlYlNvY2tldFJUQ0NsaWVudCh0aGlzKTsKLSAgICB9IGVsc2UgewotICAgICAg
TG9nLmkoVEFHLCAiVXNpbmcgRGlyZWN0UlRDQ2xpZW50IGJlY2F1c2Ugcm9vbSBuYW1lIGxvb2tz
IGxpa2UgYW4gSVAuIik7Ci0gICAgICBhcHBSdGNDbGllbnQgPSBuZXcgRGlyZWN0UlRDQ2xpZW50
KHRoaXMpOwotICAgIH0KLSAgICAvLyBDcmVhdGUgY29ubmVjdGlvbiBwYXJhbWV0ZXJzLgotICAg
IHJvb21Db25uZWN0aW9uUGFyYW1ldGVycyA9IG5ldyBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMo
cm9vbVVyaS50b1N0cmluZygpLCByb29tSWQsIGxvb3BiYWNrKTsKLQotICAgIC8vIENyZWF0ZSBD
UFUgbW9uaXRvcgotICAgIGNwdU1vbml0b3IgPSBuZXcgQ3B1TW9uaXRvcih0aGlzKTsKLSAgICBo
dWRGcmFnbWVudC5zZXRDcHVNb25pdG9yKGNwdU1vbml0b3IpOwotCi0gICAgLy8gU2VuZCBpbnRl
bnQgYXJndW1lbnRzIHRvIGZyYWdtZW50cy4KLSAgICBjYWxsRnJhZ21lbnQuc2V0QXJndW1lbnRz
KGludGVudC5nZXRFeHRyYXMoKSk7Ci0gICAgaHVkRnJhZ21lbnQuc2V0QXJndW1lbnRzKGludGVu
dC5nZXRFeHRyYXMoKSk7Ci0gICAgLy8gQWN0aXZhdGUgY2FsbCBhbmQgSFVEIGZyYWdtZW50cyBh
bmQgc3RhcnQgdGhlIGNhbGwuCi0gICAgRnJhZ21lbnRUcmFuc2FjdGlvbiBmdCA9IGdldEZyYWdt
ZW50TWFuYWdlcigpLmJlZ2luVHJhbnNhY3Rpb24oKTsKLSAgICBmdC5hZGQoUi5pZC5jYWxsX2Zy
YWdtZW50X2NvbnRhaW5lciwgY2FsbEZyYWdtZW50KTsKLSAgICBmdC5hZGQoUi5pZC5odWRfZnJh
Z21lbnRfY29udGFpbmVyLCBodWRGcmFnbWVudCk7Ci0gICAgZnQuY29tbWl0KCk7Ci0KLSAgICAv
LyBGb3IgY29tbWFuZCBsaW5lIGV4ZWN1dGlvbiBydW4gY29ubmVjdGlvbiBmb3IgPHJ1blRpbWVN
cz4gYW5kIGV4aXQuCi0gICAgaWYgKGNvbW1hbmRMaW5lUnVuICYmIHJ1blRpbWVNcyA+IDApIHsK
LSAgICAgIChuZXcgSGFuZGxlcigpKS5wb3N0RGVsYXllZChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgZGlz
Y29ubmVjdCgpOwotICAgICAgICB9Ci0gICAgICB9LCBydW5UaW1lTXMpOwotICAgIH0KLQotICAg
IHBlZXJDb25uZWN0aW9uQ2xpZW50ID0gUGVlckNvbm5lY3Rpb25DbGllbnQuZ2V0SW5zdGFuY2Uo
KTsKLSAgICBpZiAobG9vcGJhY2spIHsKLSAgICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRp
b25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMoKTsKLSAgICAg
IG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAwOwotICAgICAgcGVlckNvbm5lY3Rpb25DbGll
bnQuc2V0UGVlckNvbm5lY3Rpb25GYWN0b3J5T3B0aW9ucyhvcHRpb25zKTsKLSAgICB9Ci0gICAg
cGVlckNvbm5lY3Rpb25DbGllbnQuY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KAotICAgICAg
ICBDYWxsQWN0aXZpdHkudGhpcywgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLCBDYWxsQWN0aXZp
dHkudGhpcyk7Ci0KLSAgICBpZiAoc2NyZWVuY2FwdHVyZUVuYWJsZWQpIHsKLSAgICAgIE1lZGlh
UHJvamVjdGlvbk1hbmFnZXIgbWVkaWFQcm9qZWN0aW9uTWFuYWdlciA9Ci0gICAgICAgICAgKE1l
ZGlhUHJvamVjdGlvbk1hbmFnZXIpIGdldEFwcGxpY2F0aW9uKCkuZ2V0U3lzdGVtU2VydmljZSgK
LSAgICAgICAgICAgICAgQ29udGV4dC5NRURJQV9QUk9KRUNUSU9OX1NFUlZJQ0UpOwotICAgICAg
c3RhcnRBY3Rpdml0eUZvclJlc3VsdCgKLSAgICAgICAgICBtZWRpYVByb2plY3Rpb25NYW5hZ2Vy
LmNyZWF0ZVNjcmVlbkNhcHR1cmVJbnRlbnQoKSwgQ0FQVFVSRV9QRVJNSVNTSU9OX1JFUVVFU1Rf
Q09ERSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN0YXJ0Q2FsbCgpOwotICAgIH0KLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0Q29k
ZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBkYXRhKSB7Ci0gICAgaWYgKHJlcXVlc3RDb2RlICE9
IENBUFRVUkVfUEVSTUlTU0lPTl9SRVFVRVNUX0NPREUpCi0gICAgICByZXR1cm47Ci0gICAgbWVk
aWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdENvZGUgPSByZXN1bHRDb2RlOwotICAgIG1lZGlh
UHJvamVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhID0gZGF0YTsKLSAgICBzdGFydENhbGwoKTsK
LSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB1c2VDYW1lcmEyKCkgewotICAgIHJldHVybiBDYW1l
cmEyRW51bWVyYXRvci5pc1N1cHBvcnRlZCh0aGlzKSAmJiBnZXRJbnRlbnQoKS5nZXRCb29sZWFu
RXh0cmEoRVhUUkFfQ0FNRVJBMiwgdHJ1ZSk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gY2Fw
dHVyZVRvVGV4dHVyZSgpIHsKLSAgICByZXR1cm4gZ2V0SW50ZW50KCkuZ2V0Qm9vbGVhbkV4dHJh
KEVYVFJBX0NBUFRVUkVUT1RFWFRVUkVfRU5BQkxFRCwgZmFsc2UpOwotICB9Ci0KLSAgcHJpdmF0
ZSBWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKENhbWVyYUVudW1lcmF0b3IgZW51
bWVyYXRvcikgewotICAgIGZpbmFsIFN0cmluZ1tdIGRldmljZU5hbWVzID0gZW51bWVyYXRvci5n
ZXREZXZpY2VOYW1lcygpOwotCi0gICAgLy8gRmlyc3QsIHRyeSB0byBmaW5kIGZyb250IGZhY2lu
ZyBjYW1lcmEKLSAgICBMb2dnaW5nLmQoVEFHLCAiTG9va2luZyBmb3IgZnJvbnQgZmFjaW5nIGNh
bWVyYXMuIik7Ci0gICAgZm9yIChTdHJpbmcgZGV2aWNlTmFtZSA6IGRldmljZU5hbWVzKSB7Ci0g
ICAgICBpZiAoZW51bWVyYXRvci5pc0Zyb250RmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAgICAg
IExvZ2dpbmcuZChUQUcsICJDcmVhdGluZyBmcm9udCBmYWNpbmcgY2FtZXJhIGNhcHR1cmVyLiIp
OwotICAgICAgICBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIgPSBlbnVtZXJhdG9yLmNyZWF0
ZUNhcHR1cmVyKGRldmljZU5hbWUsIG51bGwpOwotCi0gICAgICAgIGlmICh2aWRlb0NhcHR1cmVy
ICE9IG51bGwpIHsKLSAgICAgICAgICByZXR1cm4gdmlkZW9DYXB0dXJlcjsKLSAgICAgICAgfQot
ICAgICAgfQotICAgIH0KLQotICAgIC8vIEZyb250IGZhY2luZyBjYW1lcmEgbm90IGZvdW5kLCB0
cnkgc29tZXRoaW5nIGVsc2UKLSAgICBMb2dnaW5nLmQoVEFHLCAiTG9va2luZyBmb3Igb3RoZXIg
Y2FtZXJhcy4iKTsKLSAgICBmb3IgKFN0cmluZyBkZXZpY2VOYW1lIDogZGV2aWNlTmFtZXMpIHsK
LSAgICAgIGlmICghZW51bWVyYXRvci5pc0Zyb250RmFjaW5nKGRldmljZU5hbWUpKSB7Ci0gICAg
ICAgIExvZ2dpbmcuZChUQUcsICJDcmVhdGluZyBvdGhlciBjYW1lcmEgY2FwdHVyZXIuIik7Ci0g
ICAgICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9IGVudW1lcmF0b3IuY3JlYXRlQ2Fw
dHVyZXIoZGV2aWNlTmFtZSwgbnVsbCk7Ci0KLSAgICAgICAgaWYgKHZpZGVvQ2FwdHVyZXIgIT0g
bnVsbCkgewotICAgICAgICAgIHJldHVybiB2aWRlb0NhcHR1cmVyOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGw7Ci0gIH0KLQotICAvLyBBY3Rpdml0eSBpbnRl
cmZhY2VzCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBhdXNlKCkgewotICAgIHN1cGVy
Lm9uUGF1c2UoKTsKLSAgICBhY3Rpdml0eVJ1bm5pbmcgPSBmYWxzZTsKLSAgICAvLyBEb24ndCBz
dG9wIHRoZSB2aWRlbyB3aGVuIHVzaW5nIHNjcmVlbmNhcHR1cmUgdG8gYWxsb3cgdXNlciB0byBz
aG93IG90aGVyIGFwcHMgdG8gdGhlIHJlbW90ZQotICAgIC8vIGVuZC4KLSAgICBpZiAocGVlckNv
bm5lY3Rpb25DbGllbnQgIT0gbnVsbCAmJiAhc2NyZWVuY2FwdHVyZUVuYWJsZWQpIHsKLSAgICAg
IHBlZXJDb25uZWN0aW9uQ2xpZW50LnN0b3BWaWRlb1NvdXJjZSgpOwotICAgIH0KLSAgICBjcHVN
b25pdG9yLnBhdXNlKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25SZXN1
bWUoKSB7Ci0gICAgc3VwZXIub25SZXN1bWUoKTsKLSAgICBhY3Rpdml0eVJ1bm5pbmcgPSB0cnVl
OwotICAgIC8vIFZpZGVvIGlzIG5vdCBwYXVzZWQgZm9yIHNjcmVlbmNhcHR1cmUuIFNlZSBvblBh
dXNlLgotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsICYmICFzY3JlZW5jYXB0
dXJlRW5hYmxlZCkgewotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc3RhcnRWaWRlb1NvdXJj
ZSgpOwotICAgIH0KLSAgICBjcHVNb25pdG9yLnJlc3VtZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHByb3RlY3RlZCB2b2lkIG9uRGVzdHJveSgpIHsKLSAgICBkaXNjb25uZWN0KCk7Ci0gICAg
aWYgKGxvZ1RvYXN0ICE9IG51bGwpIHsKLSAgICAgIGxvZ1RvYXN0LmNhbmNlbCgpOwotICAgIH0K
LSAgICBhY3Rpdml0eVJ1bm5pbmcgPSBmYWxzZTsKLSAgICByb290RWdsQmFzZS5yZWxlYXNlKCk7
Ci0gICAgc3VwZXIub25EZXN0cm95KCk7Ci0gIH0KLQotICAvLyBDYWxsRnJhZ21lbnQuT25DYWxs
RXZlbnRzIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIG9uQ2FsbEhhbmdVcCgpIHsKLSAgICBkaXNjb25uZWN0KCk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25DYW1lcmFTd2l0Y2goKSB7Ci0gICAgaWYgKHBlZXJDb25uZWN0
aW9uQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnN3aXRjaENh
bWVyYSgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblZpZGVv
U2NhbGluZ1N3aXRjaChTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSkgewotICAgIHRoaXMuc2NhbGlu
Z1R5cGUgPSBzY2FsaW5nVHlwZTsKLSAgICB1cGRhdGVWaWRlb1ZpZXcoKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVGb3JtYXRDaGFuZ2UoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50
ICE9IG51bGwpIHsKLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNoYW5nZUNhcHR1cmVGb3Jt
YXQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIGJvb2xlYW4gb25Ub2dnbGVNaWMoKSB7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9u
Q2xpZW50ICE9IG51bGwpIHsKLSAgICAgIG1pY0VuYWJsZWQgPSAhbWljRW5hYmxlZDsKLSAgICAg
IHBlZXJDb25uZWN0aW9uQ2xpZW50LnNldEF1ZGlvRW5hYmxlZChtaWNFbmFibGVkKTsKLSAgICB9
Ci0gICAgcmV0dXJuIG1pY0VuYWJsZWQ7Ci0gIH0KLQotICAvLyBIZWxwZXIgZnVuY3Rpb25zLgot
ICBwcml2YXRlIHZvaWQgdG9nZ2xlQ2FsbENvbnRyb2xGcmFnbWVudFZpc2liaWxpdHkoKSB7Ci0g
ICAgaWYgKCFpY2VDb25uZWN0ZWQgfHwgIWNhbGxGcmFnbWVudC5pc0FkZGVkKCkpIHsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgLy8gU2hvdy9oaWRlIGNhbGwgY29udHJvbCBmcmFnbWVudAot
ICAgIGNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmxlID0gIWNhbGxDb250cm9sRnJhZ21lbnRWaXNp
YmxlOwotICAgIEZyYWdtZW50VHJhbnNhY3Rpb24gZnQgPSBnZXRGcmFnbWVudE1hbmFnZXIoKS5i
ZWdpblRyYW5zYWN0aW9uKCk7Ci0gICAgaWYgKGNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmxlKSB7
Ci0gICAgICBmdC5zaG93KGNhbGxGcmFnbWVudCk7Ci0gICAgICBmdC5zaG93KGh1ZEZyYWdtZW50
KTsKLSAgICB9IGVsc2UgewotICAgICAgZnQuaGlkZShjYWxsRnJhZ21lbnQpOwotICAgICAgZnQu
aGlkZShodWRGcmFnbWVudCk7Ci0gICAgfQotICAgIGZ0LnNldFRyYW5zaXRpb24oRnJhZ21lbnRU
cmFuc2FjdGlvbi5UUkFOU0lUX0ZSQUdNRU5UX0ZBREUpOwotICAgIGZ0LmNvbW1pdCgpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVZpZGVvVmlldygpIHsKLSAgICByZW1vdGVSZW5kZXJM
YXlvdXQuc2V0UG9zaXRpb24oUkVNT1RFX1gsIFJFTU9URV9ZLCBSRU1PVEVfV0lEVEgsIFJFTU9U
RV9IRUlHSFQpOwotICAgIHJlbW90ZVJlbmRlclNjcmVlbi5zZXRTY2FsaW5nVHlwZShzY2FsaW5n
VHlwZSk7Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuLnNldE1pcnJvcihmYWxzZSk7Ci0KLSAgICBp
ZiAoaWNlQ29ubmVjdGVkKSB7Ci0gICAgICBsb2NhbFJlbmRlckxheW91dC5zZXRQb3NpdGlvbigK
LSAgICAgICAgICBMT0NBTF9YX0NPTk5FQ1RFRCwgTE9DQUxfWV9DT05ORUNURUQsIExPQ0FMX1dJ
RFRIX0NPTk5FQ1RFRCwgTE9DQUxfSEVJR0hUX0NPTk5FQ1RFRCk7Ci0gICAgICBsb2NhbFJlbmRl
ci5zZXRTY2FsaW5nVHlwZShTY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklUKTsKLSAgICB9IGVs
c2UgewotICAgICAgbG9jYWxSZW5kZXJMYXlvdXQuc2V0UG9zaXRpb24oCi0gICAgICAgICAgTE9D
QUxfWF9DT05ORUNUSU5HLCBMT0NBTF9ZX0NPTk5FQ1RJTkcsIExPQ0FMX1dJRFRIX0NPTk5FQ1RJ
TkcsIExPQ0FMX0hFSUdIVF9DT05ORUNUSU5HKTsKLSAgICAgIGxvY2FsUmVuZGVyLnNldFNjYWxp
bmdUeXBlKHNjYWxpbmdUeXBlKTsKLSAgICB9Ci0gICAgbG9jYWxSZW5kZXIuc2V0TWlycm9yKHRy
dWUpOwotCi0gICAgbG9jYWxSZW5kZXIucmVxdWVzdExheW91dCgpOwotICAgIHJlbW90ZVJlbmRl
clNjcmVlbi5yZXF1ZXN0TGF5b3V0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RhcnRDYWxs
KCkgewotICAgIGlmIChhcHBSdGNDbGllbnQgPT0gbnVsbCkgewotICAgICAgTG9nLmUoVEFHLCAi
QXBwUlRDIGNsaWVudCBpcyBub3QgYWxsb2NhdGVkIGZvciBhIGNhbGwuIik7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGNhbGxTdGFydGVkVGltZU1zID0gU3lzdGVtLmN1cnJlbnRUaW1lTWls
bGlzKCk7Ci0KLSAgICAvLyBTdGFydCByb29tIGNvbm5lY3Rpb24uCi0gICAgbG9nQW5kVG9hc3Qo
Z2V0U3RyaW5nKFIuc3RyaW5nLmNvbm5lY3RpbmdfdG8sIHJvb21Db25uZWN0aW9uUGFyYW1ldGVy
cy5yb29tVXJsKSk7Ci0gICAgYXBwUnRjQ2xpZW50LmNvbm5lY3RUb1Jvb20ocm9vbUNvbm5lY3Rp
b25QYXJhbWV0ZXJzKTsKLQotICAgIC8vIENyZWF0ZSBhbmQgYXVkaW8gbWFuYWdlciB0aGF0IHdp
bGwgdGFrZSBjYXJlIG9mIGF1ZGlvIHJvdXRpbmcsCi0gICAgLy8gYXVkaW8gbW9kZXMsIGF1ZGlv
IGRldmljZSBlbnVtZXJhdGlvbiBldGMuCi0gICAgYXVkaW9NYW5hZ2VyID0gQXBwUlRDQXVkaW9N
YW5hZ2VyLmNyZWF0ZSh0aGlzLCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAvLyBUaGlzIG1ldGhv
ZCB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgdGhlIGF1ZGlvIHN0YXRlIChudW1iZXIgYW5kCi0g
ICAgICAvLyB0eXBlIG9mIGRldmljZXMpIGhhcyBiZWVuIGNoYW5nZWQuCi0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgb25BdWRpb01hbmFnZXJDaGFu
Z2VkU3RhdGUoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgICAvLyBTdG9yZSBleGlzdGluZyBhdWRp
byBzZXR0aW5ncyBhbmQgY2hhbmdlIGF1ZGlvIG1vZGUgdG8KLSAgICAvLyBNT0RFX0lOX0NPTU1V
TklDQVRJT04gZm9yIGJlc3QgcG9zc2libGUgVm9JUCBwZXJmb3JtYW5jZS4KLSAgICBMb2cuZChU
QUcsICJJbml0aWFsaXppbmcgdGhlIGF1ZGlvIG1hbmFnZXIuLi4iKTsKLSAgICBhdWRpb01hbmFn
ZXIuaW5pdCgpOwotICB9Ci0KLSAgLy8gU2hvdWxkIGJlIGNhbGxlZCBmcm9tIFVJIHRocmVhZAot
ICBwcml2YXRlIHZvaWQgY2FsbENvbm5lY3RlZCgpIHsKLSAgICBmaW5hbCBsb25nIGRlbHRhID0g
U3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVNczsKLSAgICBMb2cu
aShUQUcsICJDYWxsIGNvbm5lY3RlZDogZGVsYXk9IiArIGRlbHRhICsgIm1zIik7Ci0gICAgaWYg
KHBlZXJDb25uZWN0aW9uQ2xpZW50ID09IG51bGwgfHwgaXNFcnJvcikgewotICAgICAgTG9nLnco
VEFHLCAiQ2FsbCBpcyBjb25uZWN0ZWQgaW4gY2xvc2VkIG9yIGVycm9yIHN0YXRlIik7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIC8vIFVwZGF0ZSB2aWRlbyB2aWV3LgotICAgIHVwZGF0ZVZp
ZGVvVmlldygpOwotICAgIC8vIEVuYWJsZSBzdGF0aXN0aWNzIGNhbGxiYWNrLgotICAgIHBlZXJD
b25uZWN0aW9uQ2xpZW50LmVuYWJsZVN0YXRzRXZlbnRzKHRydWUsIFNUQVRfQ0FMTEJBQ0tfUEVS
SU9EKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBvbkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgp
IHsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBkaXNhYmxlIHZpZGVvIGlmIEFwcFJUQ0F1ZGlvTWFu
YWdlci5BdWRpb0RldmljZS5FQVJQSUVDRQotICAgIC8vIGlzIGFjdGl2ZS4KLSAgfQotCi0gIC8v
IERpc2Nvbm5lY3QgZnJvbSByZW1vdGUgcmVzb3VyY2VzLCBkaXNwb3NlIG9mIGxvY2FsIHJlc291
cmNlcywgYW5kIGV4aXQuCi0gIHByaXZhdGUgdm9pZCBkaXNjb25uZWN0KCkgewotICAgIGFjdGl2
aXR5UnVubmluZyA9IGZhbHNlOwotICAgIGlmIChhcHBSdGNDbGllbnQgIT0gbnVsbCkgewotICAg
ICAgYXBwUnRjQ2xpZW50LmRpc2Nvbm5lY3RGcm9tUm9vbSgpOwotICAgICAgYXBwUnRjQ2xpZW50
ID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9IG51bGwpIHsK
LSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNsb3NlKCk7Ci0gICAgICBwZWVyQ29ubmVjdGlv
bkNsaWVudCA9IG51bGw7Ci0gICAgfQotICAgIGlmIChsb2NhbFJlbmRlciAhPSBudWxsKSB7Ci0g
ICAgICBsb2NhbFJlbmRlci5yZWxlYXNlKCk7Ci0gICAgICBsb2NhbFJlbmRlciA9IG51bGw7Ci0g
ICAgfQotICAgIGlmICh2aWRlb0ZpbGVSZW5kZXJlciAhPSBudWxsKSB7Ci0gICAgICB2aWRlb0Zp
bGVSZW5kZXJlci5yZWxlYXNlKCk7Ci0gICAgICB2aWRlb0ZpbGVSZW5kZXJlciA9IG51bGw7Ci0g
ICAgfQotICAgIGlmIChyZW1vdGVSZW5kZXJTY3JlZW4gIT0gbnVsbCkgewotICAgICAgcmVtb3Rl
UmVuZGVyU2NyZWVuLnJlbGVhc2UoKTsKLSAgICAgIHJlbW90ZVJlbmRlclNjcmVlbiA9IG51bGw7
Ci0gICAgfQotICAgIGlmIChhdWRpb01hbmFnZXIgIT0gbnVsbCkgewotICAgICAgYXVkaW9NYW5h
Z2VyLmNsb3NlKCk7Ci0gICAgICBhdWRpb01hbmFnZXIgPSBudWxsOwotICAgIH0KLSAgICBpZiAo
aWNlQ29ubmVjdGVkICYmICFpc0Vycm9yKSB7Ci0gICAgICBzZXRSZXN1bHQoUkVTVUxUX09LKTsK
LSAgICB9IGVsc2UgewotICAgICAgc2V0UmVzdWx0KFJFU1VMVF9DQU5DRUxFRCk7Ci0gICAgfQot
ICAgIGZpbmlzaCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRpc2Nvbm5lY3RXaXRoRXJyb3JN
ZXNzYWdlKGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBpZiAoY29tbWFuZExpbmVS
dW4gfHwgIWFjdGl2aXR5UnVubmluZykgewotICAgICAgTG9nLmUoVEFHLCAiQ3JpdGljYWwgZXJy
b3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgICAgZGlzY29ubmVjdCgpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcih0aGlzKQotICAgICAgICAgIC5zZXRUaXRs
ZShnZXRUZXh0KFIuc3RyaW5nLmNoYW5uZWxfZXJyb3JfdGl0bGUpKQotICAgICAgICAgIC5zZXRN
ZXNzYWdlKGVycm9yTWVzc2FnZSkKLSAgICAgICAgICAuc2V0Q2FuY2VsYWJsZShmYWxzZSkKLSAg
ICAgICAgICAuc2V0TmV1dHJhbEJ1dHRvbihSLnN0cmluZy5vaywKLSAgICAgICAgICAgICAgbmV3
IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAgICAgQE92
ZXJyaWRlCi0gICAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZh
Y2UgZGlhbG9nLCBpbnQgaWQpIHsKLSAgICAgICAgICAgICAgICAgIGRpYWxvZy5jYW5jZWwoKTsK
LSAgICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgIH0pCi0gICAgICAgICAgLmNyZWF0ZSgpCi0gICAgICAgICAgLnNob3coKTsKLSAg
ICB9Ci0gIH0KLQotICAvLyBMb2cgfG1zZ3wgYW5kIFRvYXN0IGFib3V0IGl0LgotICBwcml2YXRl
IHZvaWQgbG9nQW5kVG9hc3QoU3RyaW5nIG1zZykgewotICAgIExvZy5kKFRBRywgbXNnKTsKLSAg
ICBpZiAobG9nVG9hc3QgIT0gbnVsbCkgewotICAgICAgbG9nVG9hc3QuY2FuY2VsKCk7Ci0gICAg
fQotICAgIGxvZ1RvYXN0ID0gVG9hc3QubWFrZVRleHQodGhpcywgbXNnLCBUb2FzdC5MRU5HVEhf
U0hPUlQpOwotICAgIGxvZ1RvYXN0LnNob3coKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByZXBv
cnRFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICBydW5PblVpVGhyZWFkKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBpZiAoIWlzRXJyb3IpIHsKLSAgICAgICAgICBpc0Vycm9yID0gdHJ1ZTsKLSAg
ICAgICAgICBkaXNjb25uZWN0V2l0aEVycm9yTWVzc2FnZShkZXNjcmlwdGlvbik7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9DYXB0dXJlciBjcmVh
dGVWaWRlb0NhcHR1cmVyKCkgewotICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9IG51
bGw7Ci0gICAgU3RyaW5nIHZpZGVvRmlsZUFzQ2FtZXJhID0gZ2V0SW50ZW50KCkuZ2V0U3RyaW5n
RXh0cmEoRVhUUkFfVklERU9fRklMRV9BU19DQU1FUkEpOwotICAgIGlmICh2aWRlb0ZpbGVBc0Nh
bWVyYSAhPSBudWxsKSB7Ci0gICAgICB0cnkgewotICAgICAgICB2aWRlb0NhcHR1cmVyID0gbmV3
IEZpbGVWaWRlb0NhcHR1cmVyKHZpZGVvRmlsZUFzQ2FtZXJhKTsKLSAgICAgIH0gY2F0Y2ggKElP
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBvcGVuIHZpZGVv
IGZpbGUgZm9yIGVtdWxhdGVkIGNhbWVyYSIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHNjcmVlbmNhcHR1cmVFbmFibGVkKSB7Ci0gICAgICBpZiAobWVk
aWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdENvZGUgIT0gQWN0aXZpdHkuUkVTVUxUX09LKSB7
Ci0gICAgICAgIHJlcG9ydEVycm9yKCJVc2VyIGRpZG4ndCBnaXZlIHBlcm1pc3Npb24gdG8gY2Fw
dHVyZSB0aGUgc2NyZWVuLiIpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICAg
IHJldHVybiBuZXcgU2NyZWVuQ2FwdHVyZXJBbmRyb2lkKAotICAgICAgICAgIG1lZGlhUHJvamVj
dGlvblBlcm1pc3Npb25SZXN1bHREYXRhLCBuZXcgTWVkaWFQcm9qZWN0aW9uLkNhbGxiYWNrKCkg
ewotICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICBwdWJsaWMgdm9pZCBvblN0b3Ao
KSB7Ci0gICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJVc2VyIHJldm9rZWQgcGVybWlzc2lvbiB0
byBjYXB0dXJlIHRoZSBzY3JlZW4uIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfSk7Ci0g
ICAgfSBlbHNlIGlmICh1c2VDYW1lcmEyKCkpIHsKLSAgICAgIGlmICghY2FwdHVyZVRvVGV4dHVy
ZSgpKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKGdldFN0cmluZyhSLnN0cmluZy5jYW1lcmEyX3Rl
eHR1cmVfb25seV9lcnJvcikpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAg
ICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIGNhcHR1cmVyIHVzaW5nIGNhbWVyYTIgQVBJLiIp
OwotICAgICAgdmlkZW9DYXB0dXJlciA9IGNyZWF0ZUNhbWVyYUNhcHR1cmVyKG5ldyBDYW1lcmEy
RW51bWVyYXRvcih0aGlzKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJD
cmVhdGluZyBjYXB0dXJlciB1c2luZyBjYW1lcmExIEFQSS4iKTsKLSAgICAgIHZpZGVvQ2FwdHVy
ZXIgPSBjcmVhdGVDYW1lcmFDYXB0dXJlcihuZXcgQ2FtZXJhMUVudW1lcmF0b3IoY2FwdHVyZVRv
VGV4dHVyZSgpKSk7Ci0gICAgfQotICAgIGlmICh2aWRlb0NhcHR1cmVyID09IG51bGwpIHsKLSAg
ICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gb3BlbiBjYW1lcmEiKTsKLSAgICAgIHJldHVybiBu
dWxsOwotICAgIH0KLSAgICByZXR1cm4gdmlkZW9DYXB0dXJlcjsKLSAgfQotCi0gIC8vIC0tLS0t
SW1wbGVtZW50YXRpb24gb2YgQXBwUlRDQ2xpZW50LkFwcFJUQ1NpZ25hbGluZ0V2ZW50cyAtLS0t
LS0tLS0tLS0tLS0KLSAgLy8gQWxsIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmcm9tIHdlYnNvY2tl
dCBzaWduYWxpbmcgbG9vcGVyIHRocmVhZCBhbmQKLSAgLy8gYXJlIHJvdXRlZCB0byBVSSB0aHJl
YWQuCi0gIHByaXZhdGUgdm9pZCBvbkNvbm5lY3RlZFRvUm9vbUludGVybmFsKGZpbmFsIFNpZ25h
bGluZ1BhcmFtZXRlcnMgcGFyYW1zKSB7Ci0gICAgZmluYWwgbG9uZyBkZWx0YSA9IFN5c3RlbS5j
dXJyZW50VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7Ci0KLSAgICBzaWduYWxpbmdQ
YXJhbWV0ZXJzID0gcGFyYW1zOwotICAgIGxvZ0FuZFRvYXN0KCJDcmVhdGluZyBwZWVyIGNvbm5l
Y3Rpb24sIGRlbGF5PSIgKyBkZWx0YSArICJtcyIpOwotICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9D
YXB0dXJlciA9IG51bGw7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0Nh
bGxFbmFibGVkKSB7Ci0gICAgICB2aWRlb0NhcHR1cmVyID0gY3JlYXRlVmlkZW9DYXB0dXJlcigp
OwotICAgIH0KLSAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVQZWVyQ29ubmVjdGlvbihy
b290RWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBsb2NhbFJlbmRlciwKLSAgICAgICAgcmVt
b3RlUmVuZGVyZXJzLCB2aWRlb0NhcHR1cmVyLCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLQotICAg
IGlmIChzaWduYWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvcikgewotICAgICAgbG9nQW5kVG9hc3Qo
IkNyZWF0aW5nIE9GRkVSLi4uIik7Ci0gICAgICAvLyBDcmVhdGUgb2ZmZXIuIE9mZmVyIFNEUCB3
aWxsIGJlIHNlbnQgdG8gYW5zd2VyaW5nIGNsaWVudCBpbgotICAgICAgLy8gUGVlckNvbm5lY3Rp
b25FdmVudHMub25Mb2NhbERlc2NyaXB0aW9uIGV2ZW50LgotICAgICAgcGVlckNvbm5lY3Rpb25D
bGllbnQuY3JlYXRlT2ZmZXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKHBhcmFtcy5vZmZl
clNkcCAhPSBudWxsKSB7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnNldFJlbW90ZURl
c2NyaXB0aW9uKHBhcmFtcy5vZmZlclNkcCk7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJDcmVhdGlu
ZyBBTlNXRVIuLi4iKTsKLSAgICAgICAgLy8gQ3JlYXRlIGFuc3dlci4gQW5zd2VyIFNEUCB3aWxs
IGJlIHNlbnQgdG8gb2ZmZXJpbmcgY2xpZW50IGluCi0gICAgICAgIC8vIFBlZXJDb25uZWN0aW9u
RXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbiBldmVudC4KLSAgICAgICAgcGVlckNvbm5lY3Rpb25D
bGllbnQuY3JlYXRlQW5zd2VyKCk7Ci0gICAgICB9Ci0gICAgICBpZiAocGFyYW1zLmljZUNhbmRp
ZGF0ZXMgIT0gbnVsbCkgewotICAgICAgICAvLyBBZGQgcmVtb3RlIElDRSBjYW5kaWRhdGVzIGZy
b20gcm9vbS4KLSAgICAgICAgZm9yIChJY2VDYW5kaWRhdGUgaWNlQ2FuZGlkYXRlIDogcGFyYW1z
LmljZUNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5hZGRSZW1v
dGVJY2VDYW5kaWRhdGUoaWNlQ2FuZGlkYXRlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNvbm5lY3RlZFRvUm9vbShmaW5h
bCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtcykgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIG9uQ29ubmVjdGVkVG9Sb29tSW50ZXJuYWwocGFyYW1zKTsKLSAgICAgIH0KLSAgICB9
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblJlbW90ZURlc2NyaXB0aW9u
KGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBmaW5hbCBsb25nIGRlbHRhID0g
U3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVNczsKLSAgICBydW5P
blVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgPT0gbnVsbCkg
ewotICAgICAgICAgIExvZy5lKFRBRywgIlJlY2VpdmVkIHJlbW90ZSBTRFAgZm9yIG5vbi1pbml0
aWxpemVkIHBlZXIgY29ubmVjdGlvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgbG9nQW5kVG9hc3QoIlJlY2VpdmVkIHJlbW90ZSAiICsgc2RwLnR5cGUgKyAiLCBk
ZWxheT0iICsgZGVsdGEgKyAibXMiKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc2V0
UmVtb3RlRGVzY3JpcHRpb24oc2RwKTsKLSAgICAgICAgaWYgKCFzaWduYWxpbmdQYXJhbWV0ZXJz
LmluaXRpYXRvcikgewotICAgICAgICAgIGxvZ0FuZFRvYXN0KCJDcmVhdGluZyBBTlNXRVIuLi4i
KTsKLSAgICAgICAgICAvLyBDcmVhdGUgYW5zd2VyLiBBbnN3ZXIgU0RQIHdpbGwgYmUgc2VudCB0
byBvZmZlcmluZyBjbGllbnQgaW4KLSAgICAgICAgICAvLyBQZWVyQ29ubmVjdGlvbkV2ZW50cy5v
bkxvY2FsRGVzY3JpcHRpb24gZXZlbnQuCi0gICAgICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQu
Y3JlYXRlQW5zd2VyKCk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvblJlbW90ZUljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5k
aWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBl
ZXJDb25uZWN0aW9uQ2xpZW50ID09IG51bGwpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJSZWNl
aXZlZCBJQ0UgY2FuZGlkYXRlIGZvciBhIG5vbi1pbml0aWFsaXplZCBwZWVyIGNvbm5lY3Rpb24u
Iik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHBlZXJDb25uZWN0aW9u
Q2xpZW50LmFkZFJlbW90ZUljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVtb3RlSWNlQ2FuZGlkYXRl
c1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgIHJ1bk9uVWlU
aHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCA9PSBudWxsKSB7Ci0g
ICAgICAgICAgTG9nLmUoVEFHLCAiUmVjZWl2ZWQgSUNFIGNhbmRpZGF0ZSByZW1vdmFscyBmb3Ig
YSBub24taW5pdGlhbGl6ZWQgcGVlciBjb25uZWN0aW9uLiIpOwotICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5yZW1vdmVSZW1vdGVJY2VD
YW5kaWRhdGVzKGNhbmRpZGF0ZXMpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2hhbm5lbENsb3NlKCkgewotICAgIHJ1bk9uVWlUaHJlYWQo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJSZW1vdGUgZW5kIGh1bmcgdXA7IGRyb3BwaW5nIFBl
ZXJDb25uZWN0aW9uIik7Ci0gICAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNoYW5uZWxFcnJvcihmaW5hbCBT
dHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICByZXBvcnRFcnJvcihkZXNjcmlwdGlvbik7Ci0gIH0K
LQotICAvLyAtLS0tLUltcGxlbWVudGF0aW9uIG9mIFBlZXJDb25uZWN0aW9uQ2xpZW50LlBlZXJD
b25uZWN0aW9uRXZlbnRzLi0tLS0tLS0tLQotICAvLyBTZW5kIGxvY2FsIHBlZXIgY29ubmVjdGlv
biBTRFAgYW5kIElDRSBjYW5kaWRhdGVzIHRvIHJlbW90ZSBwYXJ0eS4KLSAgLy8gQWxsIGNhbGxi
YWNrcyBhcmUgaW52b2tlZCBmcm9tIHBlZXIgY29ubmVjdGlvbiBjbGllbnQgbG9vcGVyIHRocmVh
ZCBhbmQKLSAgLy8gYXJlIHJvdXRlZCB0byBVSSB0aHJlYWQuCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvbkxvY2FsRGVzY3JpcHRpb24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkg
ewotICAgIGZpbmFsIGxvbmcgZGVsdGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNh
bGxTdGFydGVkVGltZU1zOwotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChhcHBS
dGNDbGllbnQgIT0gbnVsbCkgewotICAgICAgICAgIGxvZ0FuZFRvYXN0KCJTZW5kaW5nICIgKyBz
ZHAudHlwZSArICIsIGRlbGF5PSIgKyBkZWx0YSArICJtcyIpOwotICAgICAgICAgIGlmIChzaWdu
YWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvcikgewotICAgICAgICAgICAgYXBwUnRjQ2xpZW50LnNl
bmRPZmZlclNkcChzZHApOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhcHBSdGND
bGllbnQuc2VuZEFuc3dlclNkcChzZHApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
ICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvTWF4Qml0cmF0ZSA+IDApIHsKLSAg
ICAgICAgICBMb2cuZChUQUcsICJTZXQgdmlkZW8gbWF4aW11bSBiaXRyYXRlOiAiICsgcGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvTWF4Qml0cmF0ZSk7Ci0gICAgICAgICAgcGVlckNvbm5l
Y3Rpb25DbGllbnQuc2V0VmlkZW9NYXhCaXRyYXRlKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52
aWRlb01heEJpdHJhdGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRl
IGNhbmRpZGF0ZSkgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChhcHBSdGND
bGllbnQgIT0gbnVsbCkgewotICAgICAgICAgIGFwcFJ0Y0NsaWVudC5zZW5kTG9jYWxJY2VDYW5k
aWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwgSWNl
Q2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGlmIChhcHBSdGNDbGllbnQgIT0gbnVsbCkgewotICAgICAgICAgIGFwcFJ0Y0NsaWVudC5zZW5k
TG9jYWxJY2VDYW5kaWRhdGVSZW1vdmFscyhjYW5kaWRhdGVzKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlQ29ubmVj
dGVkKCkgewotICAgIGZpbmFsIGxvbmcgZGVsdGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMo
KSAtIGNhbGxTdGFydGVkVGltZU1zOwotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGxv
Z0FuZFRvYXN0KCJJQ0UgY29ubmVjdGVkLCBkZWxheT0iICsgZGVsdGEgKyAibXMiKTsKLSAgICAg
ICAgaWNlQ29ubmVjdGVkID0gdHJ1ZTsKLSAgICAgICAgY2FsbENvbm5lY3RlZCgpOwotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlRGlzY29u
bmVjdGVkKCkgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJJ
Q0UgZGlzY29ubmVjdGVkIik7Ci0gICAgICAgIGljZUNvbm5lY3RlZCA9IGZhbHNlOwotICAgICAg
ICBkaXNjb25uZWN0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgb25QZWVyQ29ubmVjdGlvbkNsb3NlZCgpIHt9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rpb25TdGF0c1JlYWR5KGZpbmFsIFN0YXRzUmVwb3J0
W10gcmVwb3J0cykgewotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICghaXNFcnJv
ciAmJiBpY2VDb25uZWN0ZWQpIHsKLSAgICAgICAgICBodWRGcmFnbWVudC51cGRhdGVFbmNvZGVy
U3RhdGlzdGljcyhyZXBvcnRzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rpb25FcnJvcihmaW5hbCBT
dHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICByZXBvcnRFcnJvcihkZXNjcmlwdGlvbik7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYWxsRnJhZ21lbnQuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FsbEZyYWdtZW50Lmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYWxs
RnJhZ21lbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDEzOSArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQu
YXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuYXBwLkZyYWdtZW50OwotaW1wb3J0IGFuZHJv
aWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9y
dCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1w
b3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNl
ZWtCYXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLWltcG9ydCBvcmcud2Vi
cnRjLlJlbmRlcmVyQ29tbW9uLlNjYWxpbmdUeXBlOwotCi0vKioKLSAqIEZyYWdtZW50IGZvciBj
YWxsIGNvbnRyb2wuCi0gKi8KLXB1YmxpYyBjbGFzcyBDYWxsRnJhZ21lbnQgZXh0ZW5kcyBGcmFn
bWVudCB7Ci0gIHByaXZhdGUgVmlldyBjb250cm9sVmlldzsKLSAgcHJpdmF0ZSBUZXh0VmlldyBj
b250YWN0VmlldzsKLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBkaXNjb25uZWN0QnV0dG9uOwotICBw
cml2YXRlIEltYWdlQnV0dG9uIGNhbWVyYVN3aXRjaEJ1dHRvbjsKLSAgcHJpdmF0ZSBJbWFnZUJ1
dHRvbiB2aWRlb1NjYWxpbmdCdXR0b247Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gdG9nZ2xlTXV0
ZUJ1dHRvbjsKLSAgcHJpdmF0ZSBUZXh0VmlldyBjYXB0dXJlRm9ybWF0VGV4dDsKLSAgcHJpdmF0
ZSBTZWVrQmFyIGNhcHR1cmVGb3JtYXRTbGlkZXI7Ci0gIHByaXZhdGUgT25DYWxsRXZlbnRzIGNh
bGxFdmVudHM7Ci0gIHByaXZhdGUgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGU7Ci0gIHByaXZhdGUg
Ym9vbGVhbiB2aWRlb0NhbGxFbmFibGVkID0gdHJ1ZTsKLQotICAvKioKLSAgICogQ2FsbCBjb250
cm9sIGludGVyZmFjZSBmb3IgY29udGFpbmVyIGFjdGl2aXR5LgotICAgKi8KLSAgcHVibGljIGlu
dGVyZmFjZSBPbkNhbGxFdmVudHMgewotICAgIHZvaWQgb25DYWxsSGFuZ1VwKCk7Ci0gICAgdm9p
ZCBvbkNhbWVyYVN3aXRjaCgpOwotICAgIHZvaWQgb25WaWRlb1NjYWxpbmdTd2l0Y2goU2NhbGlu
Z1R5cGUgc2NhbGluZ1R5cGUpOwotICAgIHZvaWQgb25DYXB0dXJlRm9ybWF0Q2hhbmdlKGludCB3
aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSk7Ci0gICAgYm9vbGVhbiBvblRvZ2dsZU1p
YygpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBWaWV3IG9uQ3JlYXRlVmlldygKLSAg
ICAgIExheW91dEluZmxhdGVyIGluZmxhdGVyLCBWaWV3R3JvdXAgY29udGFpbmVyLCBCdW5kbGUg
c2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgY29udHJvbFZpZXcgPSBpbmZsYXRlci5pbmZsYXRl
KFIubGF5b3V0LmZyYWdtZW50X2NhbGwsIGNvbnRhaW5lciwgZmFsc2UpOwotCi0gICAgLy8gQ3Jl
YXRlIFVJIGNvbnRyb2xzLgotICAgIGNvbnRhY3RWaWV3ID0gKFRleHRWaWV3KSBjb250cm9sVmll
dy5maW5kVmlld0J5SWQoUi5pZC5jb250YWN0X25hbWVfY2FsbCk7Ci0gICAgZGlzY29ubmVjdEJ1
dHRvbiA9IChJbWFnZUJ1dHRvbikgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0dG9u
X2NhbGxfZGlzY29ubmVjdCk7Ci0gICAgY2FtZXJhU3dpdGNoQnV0dG9uID0gKEltYWdlQnV0dG9u
KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5idXR0b25fY2FsbF9zd2l0Y2hfY2FtZXJh
KTsKLSAgICB2aWRlb1NjYWxpbmdCdXR0b24gPSAoSW1hZ2VCdXR0b24pIGNvbnRyb2xWaWV3LmZp
bmRWaWV3QnlJZChSLmlkLmJ1dHRvbl9jYWxsX3NjYWxpbmdfbW9kZSk7Ci0gICAgdG9nZ2xlTXV0
ZUJ1dHRvbiA9IChJbWFnZUJ1dHRvbikgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0
dG9uX2NhbGxfdG9nZ2xlX21pYyk7Ci0gICAgY2FwdHVyZUZvcm1hdFRleHQgPSAoVGV4dFZpZXcp
IGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmNhcHR1cmVfZm9ybWF0X3RleHRfY2FsbCk7
Ci0gICAgY2FwdHVyZUZvcm1hdFNsaWRlciA9IChTZWVrQmFyKSBjb250cm9sVmlldy5maW5kVmll
d0J5SWQoUi5pZC5jYXB0dXJlX2Zvcm1hdF9zbGlkZXJfY2FsbCk7Ci0KLSAgICAvLyBBZGQgYnV0
dG9ucyBjbGljayBldmVudHMuCi0gICAgZGlzY29ubmVjdEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVu
ZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgICBjYWxsRXZlbnRzLm9uQ2Fs
bEhhbmdVcCgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgY2FtZXJhU3dpdGNoQnV0dG9uLnNl
dE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGNh
bGxFdmVudHMub25DYW1lcmFTd2l0Y2goKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHZpZGVv
U2NhbGluZ0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25DbGlja0xpc3RlbmVy
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmll
dykgewotICAgICAgICBpZiAoc2NhbGluZ1R5cGUgPT0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNU
X0ZJTEwpIHsKLSAgICAgICAgICB2aWRlb1NjYWxpbmdCdXR0b24uc2V0QmFja2dyb3VuZFJlc291
cmNlKFIuZHJhd2FibGUuaWNfYWN0aW9uX2Z1bGxfc2NyZWVuKTsKLSAgICAgICAgICBzY2FsaW5n
VHlwZSA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSVQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgdmlkZW9TY2FsaW5nQnV0dG9uLnNldEJhY2tncm91bmRSZXNvdXJjZShSLmRyYXdh
YmxlLmljX2FjdGlvbl9yZXR1cm5fZnJvbV9mdWxsX3NjcmVlbik7Ci0gICAgICAgICAgc2NhbGlu
Z1R5cGUgPSBTY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklMTDsKLSAgICAgICAgfQotICAgICAg
ICBjYWxsRXZlbnRzLm9uVmlkZW9TY2FsaW5nU3dpdGNoKHNjYWxpbmdUeXBlKTsKLSAgICAgIH0K
LSAgICB9KTsKLSAgICBzY2FsaW5nVHlwZSA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSUxM
OwotCi0gICAgdG9nZ2xlTXV0ZUJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZpZXcuT25D
bGlja0xpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvbkNs
aWNrKFZpZXcgdmlldykgewotICAgICAgICBib29sZWFuIGVuYWJsZWQgPSBjYWxsRXZlbnRzLm9u
VG9nZ2xlTWljKCk7Ci0gICAgICAgIHRvZ2dsZU11dGVCdXR0b24uc2V0QWxwaGEoZW5hYmxlZCA/
IDEuMGYgOiAwLjNmKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBjb250cm9sVmll
dzsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN0YXJ0KCkgewotICAgIHN1
cGVyLm9uU3RhcnQoKTsKLQotICAgIGJvb2xlYW4gY2FwdHVyZVNsaWRlckVuYWJsZWQgPSBmYWxz
ZTsKLSAgICBCdW5kbGUgYXJncyA9IGdldEFyZ3VtZW50cygpOwotICAgIGlmIChhcmdzICE9IG51
bGwpIHsKLSAgICAgIFN0cmluZyBjb250YWN0TmFtZSA9IGFyZ3MuZ2V0U3RyaW5nKENhbGxBY3Rp
dml0eS5FWFRSQV9ST09NSUQpOwotICAgICAgY29udGFjdFZpZXcuc2V0VGV4dChjb250YWN0TmFt
ZSk7Ci0gICAgICB2aWRlb0NhbGxFbmFibGVkID0gYXJncy5nZXRCb29sZWFuKENhbGxBY3Rpdml0
eS5FWFRSQV9WSURFT19DQUxMLCB0cnVlKTsKLSAgICAgIGNhcHR1cmVTbGlkZXJFbmFibGVkID0g
dmlkZW9DYWxsRW5hYmxlZAotICAgICAgICAgICYmIGFyZ3MuZ2V0Qm9vbGVhbihDYWxsQWN0aXZp
dHkuRVhUUkFfVklERU9fQ0FQVFVSRVFVQUxJVFlTTElERVJfRU5BQkxFRCwgZmFsc2UpOwotICAg
IH0KLSAgICBpZiAoIXZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIGNhbWVyYVN3aXRjaEJ1dHRv
bi5zZXRWaXNpYmlsaXR5KFZpZXcuSU5WSVNJQkxFKTsKLSAgICB9Ci0gICAgaWYgKGNhcHR1cmVT
bGlkZXJFbmFibGVkKSB7Ci0gICAgICBjYXB0dXJlRm9ybWF0U2xpZGVyLnNldE9uU2Vla0JhckNo
YW5nZUxpc3RlbmVyKAotICAgICAgICAgIG5ldyBDYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIoY2Fw
dHVyZUZvcm1hdFRleHQsIGNhbGxFdmVudHMpKTsKLSAgICB9IGVsc2UgewotICAgICAgY2FwdHVy
ZUZvcm1hdFRleHQuc2V0VmlzaWJpbGl0eShWaWV3LkdPTkUpOwotICAgICAgY2FwdHVyZUZvcm1h
dFNsaWRlci5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gVE9E
TyhzYWthbCk6IFJlcGxhY2Ugd2l0aCBvbkF0dGFjaChDb250ZXh0KSBvbmNlIHdlIG9ubHkgc3Vw
cG9ydCBBUEkgbGV2ZWwgMjMrLgotICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25BdHRhY2goQWN0aXZpdHkgYWN0aXZpdHkpIHsK
LSAgICBzdXBlci5vbkF0dGFjaChhY3Rpdml0eSk7Ci0gICAgY2FsbEV2ZW50cyA9IChPbkNhbGxF
dmVudHMpIGFjdGl2aXR5OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvQ2FwdHVyZVF1YWxpdHlDb250cm9sbGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMv
b3JnL2FwcHNwb3QvYXBwcnRjL0NhcHR1cmVRdWFsaXR5Q29udHJvbGxlci5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FwdHVyZVF1YWxpdHlD
b250cm9sbGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lk
LndpZGdldC5TZWVrQmFyOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotaW1wb3J0
IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0
IGphdmEudXRpbC5Db21wYXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IG9y
Zy53ZWJydGMuQ2FtZXJhRW51bWVyYXRpb25BbmRyb2lkLkNhcHR1cmVGb3JtYXQ7Ci0KLS8qKgot
ICogQ29udHJvbCBjYXB0dXJlIGZvcm1hdCBiYXNlZCBvbiBhIHNlZWtiYXIgbGlzdGVuZXIuCi0g
Ki8KLXB1YmxpYyBjbGFzcyBDYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIgaW1wbGVtZW50cyBTZWVr
QmFyLk9uU2Vla0JhckNoYW5nZUxpc3RlbmVyIHsKLSAgcHJpdmF0ZSBmaW5hbCBMaXN0PENhcHR1
cmVGb3JtYXQ+IGZvcm1hdHMgPQotICAgICAgQXJyYXlzLmFzTGlzdChuZXcgQ2FwdHVyZUZvcm1h
dCgxMjgwLCA3MjAsIDAsIDMwMDAwKSwgbmV3IENhcHR1cmVGb3JtYXQoOTYwLCA1NDAsIDAsIDMw
MDAwKSwKLSAgICAgICAgICBuZXcgQ2FwdHVyZUZvcm1hdCg2NDAsIDQ4MCwgMCwgMzAwMDApLCBu
ZXcgQ2FwdHVyZUZvcm1hdCg0ODAsIDM2MCwgMCwgMzAwMDApLAotICAgICAgICAgIG5ldyBDYXB0
dXJlRm9ybWF0KDMyMCwgMjQwLCAwLCAzMDAwMCksIG5ldyBDYXB0dXJlRm9ybWF0KDI1NiwgMTQ0
LCAwLCAzMDAwMCkpOwotICAvLyBQcmlvcml0aXplIGZyYW1lcmF0ZSBiZWxvdyB0aGlzIHRocmVz
aG9sZCBhbmQgcmVzb2x1dGlvbiBhYm92ZSB0aGUgdGhyZXNob2xkLgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgRlJBTUVSQVRFX1RIUkVTSE9MRCA9IDE1OwotICBwcml2YXRlIFRleHRWaWV3
IGNhcHR1cmVGb3JtYXRUZXh0OwotICBwcml2YXRlIENhbGxGcmFnbWVudC5PbkNhbGxFdmVudHMg
Y2FsbEV2ZW50czsKLSAgcHJpdmF0ZSBpbnQgd2lkdGggPSAwOwotICBwcml2YXRlIGludCBoZWln
aHQgPSAwOwotICBwcml2YXRlIGludCBmcmFtZXJhdGUgPSAwOwotICBwcml2YXRlIGRvdWJsZSB0
YXJnZXRCYW5kd2lkdGggPSAwOwotCi0gIHB1YmxpYyBDYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIo
Ci0gICAgICBUZXh0VmlldyBjYXB0dXJlRm9ybWF0VGV4dCwgQ2FsbEZyYWdtZW50Lk9uQ2FsbEV2
ZW50cyBjYWxsRXZlbnRzKSB7Ci0gICAgdGhpcy5jYXB0dXJlRm9ybWF0VGV4dCA9IGNhcHR1cmVG
b3JtYXRUZXh0OwotICAgIHRoaXMuY2FsbEV2ZW50cyA9IGNhbGxFdmVudHM7Ci0gIH0KLQotICBw
cml2YXRlIGZpbmFsIENvbXBhcmF0b3I8Q2FwdHVyZUZvcm1hdD4gY29tcGFyZUZvcm1hdHMgPSBu
ZXcgQ29tcGFyYXRvcjxDYXB0dXJlRm9ybWF0PigpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgaW50IGNvbXBhcmUoQ2FwdHVyZUZvcm1hdCBmaXJzdCwgQ2FwdHVyZUZvcm1hdCBzZWNvbmQp
IHsKLSAgICAgIGludCBmaXJzdEZwcyA9IGNhbGN1bGF0ZUZyYW1lcmF0ZSh0YXJnZXRCYW5kd2lk
dGgsIGZpcnN0KTsKLSAgICAgIGludCBzZWNvbmRGcHMgPSBjYWxjdWxhdGVGcmFtZXJhdGUodGFy
Z2V0QmFuZHdpZHRoLCBzZWNvbmQpOwotCi0gICAgICBpZiAoZmlyc3RGcHMgPj0gRlJBTUVSQVRF
X1RIUkVTSE9MRCAmJiBzZWNvbmRGcHMgPj0gRlJBTUVSQVRFX1RIUkVTSE9MRAotICAgICAgICAg
IHx8IGZpcnN0RnBzID09IHNlY29uZEZwcykgewotICAgICAgICAvLyBDb21wYXJlIHJlc29sdXRp
b24uCi0gICAgICAgIHJldHVybiBmaXJzdC53aWR0aCAqIGZpcnN0LmhlaWdodCAtIHNlY29uZC53
aWR0aCAqIHNlY29uZC5oZWlnaHQ7Ci0gICAgICB9IGVsc2UgewotICAgICAgICAvLyBDb21wYXJl
IGZwcy4KLSAgICAgICAgcmV0dXJuIGZpcnN0RnBzIC0gc2Vjb25kRnBzOwotICAgICAgfQotICAg
IH0KLSAgfTsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25Qcm9ncmVzc0NoYW5nZWQo
U2Vla0JhciBzZWVrQmFyLCBpbnQgcHJvZ3Jlc3MsIGJvb2xlYW4gZnJvbVVzZXIpIHsKLSAgICBp
ZiAocHJvZ3Jlc3MgPT0gMCkgewotICAgICAgd2lkdGggPSAwOwotICAgICAgaGVpZ2h0ID0gMDsK
LSAgICAgIGZyYW1lcmF0ZSA9IDA7Ci0gICAgICBjYXB0dXJlRm9ybWF0VGV4dC5zZXRUZXh0KFIu
c3RyaW5nLm11dGVkKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBFeHRyYWN0IG1h
eCBiYW5kd2lkdGggKGluIG1pbGxpcGl4ZWxzIC8gc2Vjb25kKS4KLSAgICBsb25nIG1heENhcHR1
cmVCYW5kd2lkdGggPSBqYXZhLmxhbmcuTG9uZy5NSU5fVkFMVUU7Ci0gICAgZm9yIChDYXB0dXJl
Rm9ybWF0IGZvcm1hdCA6IGZvcm1hdHMpIHsKLSAgICAgIG1heENhcHR1cmVCYW5kd2lkdGggPQot
ICAgICAgICAgIE1hdGgubWF4KG1heENhcHR1cmVCYW5kd2lkdGgsIChsb25nKSBmb3JtYXQud2lk
dGggKiBmb3JtYXQuaGVpZ2h0ICogZm9ybWF0LmZyYW1lcmF0ZS5tYXgpOwotICAgIH0KLQotICAg
IC8vIEZyYWN0aW9uIGJldHdlZW4gMCBhbmQgMS4KLSAgICBkb3VibGUgYmFuZHdpZHRoRnJhY3Rp
b24gPSAoZG91YmxlKSBwcm9ncmVzcyAvIDEwMC4wOwotICAgIC8vIE1ha2UgYSBsb2ctc2NhbGUg
dHJhbnNmb3JtYXRpb24sIHN0aWxsIGJldHdlZW4gMCBhbmQgMS4KLSAgICBmaW5hbCBkb3VibGUg
a0V4cENvbnN0YW50ID0gMy4wOwotICAgIGJhbmR3aWR0aEZyYWN0aW9uID0KLSAgICAgICAgKE1h
dGguZXhwKGtFeHBDb25zdGFudCAqIGJhbmR3aWR0aEZyYWN0aW9uKSAtIDEpIC8gKE1hdGguZXhw
KGtFeHBDb25zdGFudCkgLSAxKTsKLSAgICB0YXJnZXRCYW5kd2lkdGggPSBiYW5kd2lkdGhGcmFj
dGlvbiAqIG1heENhcHR1cmVCYW5kd2lkdGg7Ci0KLSAgICAvLyBDaG9vc2UgdGhlIGJlc3QgZm9y
bWF0IGdpdmVuIGEgdGFyZ2V0IGJhbmR3aWR0aC4KLSAgICBmaW5hbCBDYXB0dXJlRm9ybWF0IGJl
c3RGb3JtYXQgPSBDb2xsZWN0aW9ucy5tYXgoZm9ybWF0cywgY29tcGFyZUZvcm1hdHMpOwotICAg
IHdpZHRoID0gYmVzdEZvcm1hdC53aWR0aDsKLSAgICBoZWlnaHQgPSBiZXN0Rm9ybWF0LmhlaWdo
dDsKLSAgICBmcmFtZXJhdGUgPSBjYWxjdWxhdGVGcmFtZXJhdGUodGFyZ2V0QmFuZHdpZHRoLCBi
ZXN0Rm9ybWF0KTsKLSAgICBjYXB0dXJlRm9ybWF0VGV4dC5zZXRUZXh0KAotICAgICAgICBTdHJp
bmcuZm9ybWF0KGNhcHR1cmVGb3JtYXRUZXh0LmdldENvbnRleHQoKS5nZXRTdHJpbmcoUi5zdHJp
bmcuZm9ybWF0X2Rlc2NyaXB0aW9uKSwgd2lkdGgsCi0gICAgICAgICAgICBoZWlnaHQsIGZyYW1l
cmF0ZSkpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU3RhcnRUcmFja2lu
Z1RvdWNoKFNlZWtCYXIgc2Vla0Jhcikge30KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
b25TdG9wVHJhY2tpbmdUb3VjaChTZWVrQmFyIHNlZWtCYXIpIHsKLSAgICBjYWxsRXZlbnRzLm9u
Q2FwdHVyZUZvcm1hdENoYW5nZSh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICB9Ci0KLSAg
Ly8gUmV0dXJuIHRoZSBoaWdoZXN0IGZyYW1lIHJhdGUgcG9zc2libGUgYmFzZWQgb24gYmFuZHdp
ZHRoIGFuZCBmb3JtYXQuCi0gIHByaXZhdGUgaW50IGNhbGN1bGF0ZUZyYW1lcmF0ZShkb3VibGUg
YmFuZHdpZHRoLCBDYXB0dXJlRm9ybWF0IGZvcm1hdCkgewotICAgIHJldHVybiAoaW50KSBNYXRo
LnJvdW5kKAotICAgICAgICBNYXRoLm1pbihmb3JtYXQuZnJhbWVyYXRlLm1heCwgKGludCkgTWF0
aC5yb3VuZChiYW5kd2lkdGggLyAoZm9ybWF0LndpZHRoICogZm9ybWF0LmhlaWdodCkpKQotICAg
ICAgICAvIDEwMDAuMCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9Db25uZWN0QWN0aXZpdHkuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3Bv
dC9hcHBydGMvQ29ubmVjdEFjdGl2aXR5LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Db25uZWN0QWN0aXZpdHkuamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDU0NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBz
cG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJv
aWQuYXBwLkFsZXJ0RGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZh
Y2U7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRl
bnQuU2hhcmVkUHJlZmVyZW5jZXM7Ci1pbXBvcnQgYW5kcm9pZC5uZXQuVXJpOwotaW1wb3J0IGFu
ZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlTWFu
YWdlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJvaWQudmlldy5Db250
ZXh0TWVudTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuS2V5RXZlbnQ7Ci1pbXBvcnQgYW5kcm9pZC52
aWV3Lk1lbnU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lk1lbnVJdGVtOwotaW1wb3J0IGFuZHJvaWQu
dmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3Lk9uQ2xpY2tMaXN0ZW5lcjsKLWlt
cG9ydCBhbmRyb2lkLnZpZXcuaW5wdXRtZXRob2QuRWRpdG9ySW5mbzsKLWltcG9ydCBhbmRyb2lk
LndlYmtpdC5VUkxVdGlsOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkFkYXB0ZXJWaWV3OwotaW1w
b3J0IGFuZHJvaWQud2lkZ2V0LkFycmF5QWRhcHRlcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5F
ZGl0VGV4dDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZUJ1dHRvbjsKLWltcG9ydCBhbmRy
b2lkLndpZGdldC5MaXN0VmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLWlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5SYW5kb207Ci1pbXBv
cnQgb3JnLmpzb24uSlNPTkFycmF5OwotaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247Ci0K
LS8qKgotICogSGFuZGxlcyB0aGUgaW5pdGlhbCBzZXR1cCB3aGVyZSB0aGUgdXNlciBzZWxlY3Rz
IHdoaWNoIHJvb20gdG8gam9pbi4KLSAqLwotcHVibGljIGNsYXNzIENvbm5lY3RBY3Rpdml0eSBl
eHRlbmRzIEFjdGl2aXR5IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJD
b25uZWN0QWN0aXZpdHkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ09OTkVDVElPTl9S
RVFVRVNUID0gMTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFTU9WRV9GQVZPUklURV9J
TkRFWCA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gY29tbWFuZExpbmVSdW4gPSBmYWxz
ZTsKLQotICBwcml2YXRlIEltYWdlQnV0dG9uIGNvbm5lY3RCdXR0b247Ci0gIHByaXZhdGUgSW1h
Z2VCdXR0b24gYWRkRmF2b3JpdGVCdXR0b247Ci0gIHByaXZhdGUgRWRpdFRleHQgcm9vbUVkaXRU
ZXh0OwotICBwcml2YXRlIExpc3RWaWV3IHJvb21MaXN0VmlldzsKLSAgcHJpdmF0ZSBTaGFyZWRQ
cmVmZXJlbmNlcyBzaGFyZWRQcmVmOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9DYWxs
RW5hYmxlZDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlNjcmVlbmNhcHR1cmU7Ci0gIHByaXZh
dGUgU3RyaW5nIGtleXByZWZDYW1lcmEyOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmUmVzb2x1
dGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkZwczsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVyOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9C
aXRyYXRlVHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlZpZGVvQml0cmF0ZVZhbHVlOwot
ICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9Db2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZkF1ZGlvQml0cmF0ZVR5cGU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZBdWRpb0JpdHJh
dGVWYWx1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkF1ZGlvQ29kZWM7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZId0NvZGVjQWNjZWxlcmF0aW9uOwotICBwcml2YXRlIFN0cmluZyBrZXlw
cmVmQ2FwdHVyZVRvVGV4dHVyZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk5vQXVkaW9Qcm9j
ZXNzaW5nUGlwZWxpbmU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZBZWNEdW1wOwotICBwcml2
YXRlIFN0cmluZyBrZXlwcmVmT3BlblNMRVM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNh
YmxlQnVpbHRJbkFlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluQWdj
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5OczsKLSAgcHJpdmF0ZSBT
dHJpbmcga2V5cHJlZkVuYWJsZUxldmVsQ29udHJvbDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJl
ZkRpc3BsYXlIdWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZUcmFjaW5nOwotICBwcml2YXRl
IFN0cmluZyBrZXlwcmVmUm9vbVNlcnZlclVybDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJv
b207Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZSb29tTGlzdDsKLSAgcHJpdmF0ZSBBcnJheUxp
c3Q8U3RyaW5nPiByb29tTGlzdDsKLSAgcHJpdmF0ZSBBcnJheUFkYXB0ZXI8U3RyaW5nPiBhZGFw
dGVyOwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJ
bnN0YW5jZVN0YXRlKSB7Ci0gICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsK
LQotICAgIC8vIEdldCBzZXR0aW5nIGtleXMuCi0gICAgUHJlZmVyZW5jZU1hbmFnZXIuc2V0RGVm
YXVsdFZhbHVlcyh0aGlzLCBSLnhtbC5wcmVmZXJlbmNlcywgZmFsc2UpOwotICAgIHNoYXJlZFBy
ZWYgPSBQcmVmZXJlbmNlTWFuYWdlci5nZXREZWZhdWx0U2hhcmVkUHJlZmVyZW5jZXModGhpcyk7
Ci0gICAga2V5cHJlZlZpZGVvQ2FsbEVuYWJsZWQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl92
aWRlb2NhbGxfa2V5KTsKLSAgICBrZXlwcmVmU2NyZWVuY2FwdHVyZSA9IGdldFN0cmluZyhSLnN0
cmluZy5wcmVmX3NjcmVlbmNhcHR1cmVfa2V5KTsKLSAgICBrZXlwcmVmQ2FtZXJhMiA9IGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX2NhbWVyYTJfa2V5KTsKLSAgICBrZXlwcmVmUmVzb2x1dGlvbiA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jlc29sdXRpb25fa2V5KTsKLSAgICBrZXlwcmVmRnBz
ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZnBzX2tleSk7Ci0gICAga2V5cHJlZkNhcHR1cmVR
dWFsaXR5U2xpZGVyID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2FwdHVyZXF1YWxpdHlzbGlk
ZXJfa2V5KTsKLSAgICBrZXlwcmVmVmlkZW9CaXRyYXRlVHlwZSA9IGdldFN0cmluZyhSLnN0cmlu
Zy5wcmVmX21heHZpZGVvYml0cmF0ZV9rZXkpOwotICAgIGtleXByZWZWaWRlb0JpdHJhdGVWYWx1
ZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVvYml0cmF0ZXZhbHVlX2tleSk7Ci0g
ICAga2V5cHJlZlZpZGVvQ29kZWMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl92aWRlb2NvZGVj
X2tleSk7Ci0gICAga2V5cHJlZkh3Q29kZWNBY2NlbGVyYXRpb24gPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9od2NvZGVjX2tleSk7Ci0gICAga2V5cHJlZkNhcHR1cmVUb1RleHR1cmUgPSBnZXRT
dHJpbmcoUi5zdHJpbmcucHJlZl9jYXB0dXJldG90ZXh0dXJlX2tleSk7Ci0gICAga2V5cHJlZkF1
ZGlvQml0cmF0ZVR5cGUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0
ZV9rZXkpOwotICAgIGtleXByZWZBdWRpb0JpdHJhdGVWYWx1ZSA9IGdldFN0cmluZyhSLnN0cmlu
Zy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfa2V5KTsKLSAgICBrZXlwcmVmQXVkaW9Db2Rl
YyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2F1ZGlvY29kZWNfa2V5KTsKLSAgICBrZXlwcmVm
Tm9BdWRpb1Byb2Nlc3NpbmdQaXBlbGluZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX25vYXVk
aW9wcm9jZXNzaW5nX2tleSk7Ci0gICAga2V5cHJlZkFlY0R1bXAgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9hZWNkdW1wX2tleSk7Ci0gICAga2V5cHJlZk9wZW5TTEVTID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfb3BlbnNsZXNfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BZWMg
PSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FlY19rZXkpOwotICAg
IGtleXByZWZEaXNhYmxlQnVpbHRJbkFnYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2Fi
bGVfYnVpbHRfaW5fYWdjX2tleSk7Ci0gICAga2V5cHJlZkRpc2FibGVCdWlsdEluTnMgPSBnZXRT
dHJpbmcoUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX25zX2tleSk7Ci0gICAga2V5cHJl
ZkVuYWJsZUxldmVsQ29udHJvbCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2VuYWJsZV9sZXZl
bF9jb250cm9sX2tleSk7Ci0gICAga2V5cHJlZkRpc3BsYXlIdWQgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9kaXNwbGF5aHVkX2tleSk7Ci0gICAga2V5cHJlZlRyYWNpbmcgPSBnZXRTdHJpbmco
Ui5zdHJpbmcucHJlZl90cmFjaW5nX2tleSk7Ci0gICAga2V5cHJlZlJvb21TZXJ2ZXJVcmwgPSBn
ZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yb29tX3NlcnZlcl91cmxfa2V5KTsKLSAgICBrZXlwcmVm
Um9vbSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jvb21fa2V5KTsKLSAgICBrZXlwcmVmUm9v
bUxpc3QgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9yb29tX2xpc3Rfa2V5KTsKLQotICAgIHNl
dENvbnRlbnRWaWV3KFIubGF5b3V0LmFjdGl2aXR5X2Nvbm5lY3QpOwotCi0gICAgcm9vbUVkaXRU
ZXh0ID0gKEVkaXRUZXh0KSBmaW5kVmlld0J5SWQoUi5pZC5yb29tX2VkaXR0ZXh0KTsKLSAgICBy
b29tRWRpdFRleHQuc2V0T25FZGl0b3JBY3Rpb25MaXN0ZW5lcihuZXcgVGV4dFZpZXcuT25FZGl0
b3JBY3Rpb25MaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIGJvb2xl
YW4gb25FZGl0b3JBY3Rpb24oVGV4dFZpZXcgdGV4dFZpZXcsIGludCBpLCBLZXlFdmVudCBrZXlF
dmVudCkgewotICAgICAgICBpZiAoaSA9PSBFZGl0b3JJbmZvLklNRV9BQ1RJT05fRE9ORSkgewot
ICAgICAgICAgIGFkZEZhdm9yaXRlQnV0dG9uLnBlcmZvcm1DbGljaygpOwotICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH0KLSAg
ICB9KTsKLSAgICByb29tRWRpdFRleHQucmVxdWVzdEZvY3VzKCk7Ci0KLSAgICByb29tTGlzdFZp
ZXcgPSAoTGlzdFZpZXcpIGZpbmRWaWV3QnlJZChSLmlkLnJvb21fbGlzdHZpZXcpOwotICAgIHJv
b21MaXN0Vmlldy5zZXRFbXB0eVZpZXcoZmluZFZpZXdCeUlkKGFuZHJvaWQuUi5pZC5lbXB0eSkp
OwotICAgIHJvb21MaXN0Vmlldy5zZXRPbkl0ZW1DbGlja0xpc3RlbmVyKHJvb21MaXN0Q2xpY2tM
aXN0ZW5lcik7Ci0gICAgcmVnaXN0ZXJGb3JDb250ZXh0TWVudShyb29tTGlzdFZpZXcpOwotICAg
IGNvbm5lY3RCdXR0b24gPSAoSW1hZ2VCdXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmNvbm5lY3Rf
YnV0dG9uKTsKLSAgICBjb25uZWN0QnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihjb25uZWN0TGlz
dGVuZXIpOwotICAgIGFkZEZhdm9yaXRlQnV0dG9uID0gKEltYWdlQnV0dG9uKSBmaW5kVmlld0J5
SWQoUi5pZC5hZGRfZmF2b3JpdGVfYnV0dG9uKTsKLSAgICBhZGRGYXZvcml0ZUJ1dHRvbi5zZXRP
bkNsaWNrTGlzdGVuZXIoYWRkRmF2b3JpdGVMaXN0ZW5lcik7Ci0KLSAgICAvLyBJZiBhbiBpbXBs
aWNpdCBWSUVXIGludGVudCBpcyBsYXVuY2hpbmcgdGhlIGFwcCwgZ28gZGlyZWN0bHkgdG8gdGhh
dCBVUkwuCi0gICAgZmluYWwgSW50ZW50IGludGVudCA9IGdldEludGVudCgpOwotICAgIGlmICgi
YW5kcm9pZC5pbnRlbnQuYWN0aW9uLlZJRVciLmVxdWFscyhpbnRlbnQuZ2V0QWN0aW9uKCkpICYm
ICFjb21tYW5kTGluZVJ1bikgewotICAgICAgYm9vbGVhbiBsb29wYmFjayA9IGludGVudC5nZXRC
b29sZWFuRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0xPT1BCQUNLLCBmYWxzZSk7Ci0gICAgICBp
bnQgcnVuVGltZU1zID0gaW50ZW50LmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9SVU5U
SU1FLCAwKTsKLSAgICAgIGJvb2xlYW4gdXNlVmFsdWVzRnJvbUludGVudCA9Ci0gICAgICAgICAg
aW50ZW50LmdldEJvb2xlYW5FeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVVNFX1ZBTFVFU19GUk9N
X0lOVEVOVCwgZmFsc2UpOwotICAgICAgU3RyaW5nIHJvb20gPSBzaGFyZWRQcmVmLmdldFN0cmlu
ZyhrZXlwcmVmUm9vbSwgIiIpOwotICAgICAgY29ubmVjdFRvUm9vbShyb29tLCB0cnVlLCBsb29w
YmFjaywgdXNlVmFsdWVzRnJvbUludGVudCwgcnVuVGltZU1zKTsKLSAgICB9Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gb25DcmVhdGVPcHRpb25zTWVudShNZW51IG1lbnUp
IHsKLSAgICBnZXRNZW51SW5mbGF0ZXIoKS5pbmZsYXRlKFIubWVudS5jb25uZWN0X21lbnUsIG1l
bnUpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uQ3JlYXRlQ29udGV4dE1lbnUoQ29udGV4dE1lbnUgbWVudSwgVmlldyB2LCBDb250ZXh0TWVu
dS5Db250ZXh0TWVudUluZm8gbWVudUluZm8pIHsKLSAgICBpZiAodi5nZXRJZCgpID09IFIuaWQu
cm9vbV9saXN0dmlldykgewotICAgICAgQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRNZW51SW5m
byBpbmZvID0gKEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUluZm8pIG1lbnVJbmZvOwot
ICAgICAgbWVudS5zZXRIZWFkZXJUaXRsZShyb29tTGlzdC5nZXQoaW5mby5wb3NpdGlvbikpOwot
ICAgICAgU3RyaW5nW10gbWVudUl0ZW1zID0gZ2V0UmVzb3VyY2VzKCkuZ2V0U3RyaW5nQXJyYXko
Ui5hcnJheS5yb29tTGlzdENvbnRleHRNZW51KTsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bWVudUl0ZW1zLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIG1lbnUuYWRkKE1lbnUuTk9ORSwgaSwg
aSwgbWVudUl0ZW1zW2ldKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgc3VwZXIub25D
cmVhdGVDb250ZXh0TWVudShtZW51LCB2LCBtZW51SW5mbyk7Ci0gICAgfQotICB9Ci0KLSAgQE92
ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIG9uQ29udGV4dEl0ZW1TZWxlY3RlZChNZW51SXRlbSBp
dGVtKSB7Ci0gICAgaWYgKGl0ZW0uZ2V0SXRlbUlkKCkgPT0gUkVNT1ZFX0ZBVk9SSVRFX0lOREVY
KSB7Ci0gICAgICBBZGFwdGVyVmlldy5BZGFwdGVyQ29udGV4dE1lbnVJbmZvIGluZm8gPQotICAg
ICAgICAgIChBZGFwdGVyVmlldy5BZGFwdGVyQ29udGV4dE1lbnVJbmZvKSBpdGVtLmdldE1lbnVJ
bmZvKCk7Ci0gICAgICByb29tTGlzdC5yZW1vdmUoaW5mby5wb3NpdGlvbik7Ci0gICAgICBhZGFw
dGVyLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gc3VwZXIub25Db250ZXh0SXRlbVNlbGVjdGVkKGl0ZW0pOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIG9uT3B0aW9uc0l0ZW1TZWxlY3RlZChNZW51SXRl
bSBpdGVtKSB7Ci0gICAgLy8gSGFuZGxlIHByZXNzZXMgb24gdGhlIGFjdGlvbiBiYXIgaXRlbXMu
Ci0gICAgaWYgKGl0ZW0uZ2V0SXRlbUlkKCkgPT0gUi5pZC5hY3Rpb25fc2V0dGluZ3MpIHsKLSAg
ICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KHRoaXMsIFNldHRpbmdzQWN0aXZpdHkuY2xh
c3MpOwotICAgICAgc3RhcnRBY3Rpdml0eShpbnRlbnQpOwotICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgfSBlbHNlIGlmIChpdGVtLmdldEl0ZW1JZCgpID09IFIuaWQuYWN0aW9uX2xvb3BiYWNrKSB7
Ci0gICAgICBjb25uZWN0VG9Sb29tKG51bGwsIGZhbHNlLCB0cnVlLCBmYWxzZSwgMCk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIHN1cGVyLm9uT3B0aW9u
c0l0ZW1TZWxlY3RlZChpdGVtKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25QYXVzZSgpIHsKLSAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgU3RyaW5nIHJvb20g
PSByb29tRWRpdFRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7Ci0gICAgU3RyaW5nIHJvb21MaXN0
SnNvbiA9IG5ldyBKU09OQXJyYXkocm9vbUxpc3QpLnRvU3RyaW5nKCk7Ci0gICAgU2hhcmVkUHJl
ZmVyZW5jZXMuRWRpdG9yIGVkaXRvciA9IHNoYXJlZFByZWYuZWRpdCgpOwotICAgIGVkaXRvci5w
dXRTdHJpbmcoa2V5cHJlZlJvb20sIHJvb20pOwotICAgIGVkaXRvci5wdXRTdHJpbmcoa2V5cHJl
ZlJvb21MaXN0LCByb29tTGlzdEpzb24pOwotICAgIGVkaXRvci5jb21taXQoKTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblJlc3VtZSgpIHsKLSAgICBzdXBlci5vblJlc3Vt
ZSgpOwotICAgIFN0cmluZyByb29tID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZlJvb20s
ICIiKTsKLSAgICByb29tRWRpdFRleHQuc2V0VGV4dChyb29tKTsKLSAgICByb29tTGlzdCA9IG5l
dyBBcnJheUxpc3Q8U3RyaW5nPigpOwotICAgIFN0cmluZyByb29tTGlzdEpzb24gPSBzaGFyZWRQ
cmVmLmdldFN0cmluZyhrZXlwcmVmUm9vbUxpc3QsIG51bGwpOwotICAgIGlmIChyb29tTGlzdEpz
b24gIT0gbnVsbCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgSlNPTkFycmF5IGpzb25BcnJheSA9
IG5ldyBKU09OQXJyYXkocm9vbUxpc3RKc29uKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBqc29uQXJyYXkubGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgIHJvb21MaXN0LmFkZChqc29u
QXJyYXkuZ2V0KGkpLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChKU09O
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRvIGxvYWQgcm9vbSBs
aXN0OiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYWRhcHRlciA9IG5l
dyBBcnJheUFkYXB0ZXI8U3RyaW5nPih0aGlzLCBhbmRyb2lkLlIubGF5b3V0LnNpbXBsZV9saXN0
X2l0ZW1fMSwgcm9vbUxpc3QpOwotICAgIHJvb21MaXN0Vmlldy5zZXRBZGFwdGVyKGFkYXB0ZXIp
OwotICAgIGlmIChhZGFwdGVyLmdldENvdW50KCkgPiAwKSB7Ci0gICAgICByb29tTGlzdFZpZXcu
cmVxdWVzdEZvY3VzKCk7Ci0gICAgICByb29tTGlzdFZpZXcuc2V0SXRlbUNoZWNrZWQoMCwgdHJ1
ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uQWN0aXZp
dHlSZXN1bHQoaW50IHJlcXVlc3RDb2RlLCBpbnQgcmVzdWx0Q29kZSwgSW50ZW50IGRhdGEpIHsK
LSAgICBpZiAocmVxdWVzdENvZGUgPT0gQ09OTkVDVElPTl9SRVFVRVNUICYmIGNvbW1hbmRMaW5l
UnVuKSB7Ci0gICAgICBMb2cuZChUQUcsICJSZXR1cm46ICIgKyByZXN1bHRDb2RlKTsKLSAgICAg
IHNldFJlc3VsdChyZXN1bHRDb2RlKTsKLSAgICAgIGNvbW1hbmRMaW5lUnVuID0gZmFsc2U7Ci0g
ICAgICBmaW5pc2goKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgdmFsdWUgZnJv
bSB0aGUgc2hhcmVkIHByZWZlcmVuY2Ugb3IgZnJvbSB0aGUgaW50ZW50LCBpZiBpdCBkb2VzIG5v
dAotICAgKiBleGlzdCB0aGUgZGVmYXVsdCBpcyB1c2VkLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJp
bmcgc2hhcmVkUHJlZkdldFN0cmluZygKLSAgICAgIGludCBhdHRyaWJ1dGVJZCwgU3RyaW5nIGlu
dGVudE5hbWUsIGludCBkZWZhdWx0SWQsIGJvb2xlYW4gdXNlRnJvbUludGVudCkgewotICAgIFN0
cmluZyBkZWZhdWx0VmFsdWUgPSBnZXRTdHJpbmcoZGVmYXVsdElkKTsKLSAgICBpZiAodXNlRnJv
bUludGVudCkgewotICAgICAgU3RyaW5nIHZhbHVlID0gZ2V0SW50ZW50KCkuZ2V0U3RyaW5nRXh0
cmEoaW50ZW50TmFtZSk7Ci0gICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGdldFN0cmluZyhhdHRyaWJ1dGVJZCk7
Ci0gICAgICByZXR1cm4gc2hhcmVkUHJlZi5nZXRTdHJpbmcoYXR0cmlidXRlTmFtZSwgZGVmYXVs
dFZhbHVlKTsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGEgdmFsdWUgZnJvbSB0aGUg
c2hhcmVkIHByZWZlcmVuY2Ugb3IgZnJvbSB0aGUgaW50ZW50LCBpZiBpdCBkb2VzIG5vdAotICAg
KiBleGlzdCB0aGUgZGVmYXVsdCBpcyB1c2VkLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFuIHNo
YXJlZFByZWZHZXRCb29sZWFuKAotICAgICAgaW50IGF0dHJpYnV0ZUlkLCBTdHJpbmcgaW50ZW50
TmFtZSwgaW50IGRlZmF1bHRJZCwgYm9vbGVhbiB1c2VGcm9tSW50ZW50KSB7Ci0gICAgYm9vbGVh
biBkZWZhdWx0VmFsdWUgPSBCb29sZWFuLnZhbHVlT2YoZ2V0U3RyaW5nKGRlZmF1bHRJZCkpOwot
ICAgIGlmICh1c2VGcm9tSW50ZW50KSB7Ci0gICAgICByZXR1cm4gZ2V0SW50ZW50KCkuZ2V0Qm9v
bGVhbkV4dHJhKGludGVudE5hbWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gZ2V0U3RyaW5nKGF0dHJpYnV0ZUlkKTsKLSAgICAgIHJl
dHVybiBzaGFyZWRQcmVmLmdldEJvb2xlYW4oYXR0cmlidXRlTmFtZSwgZGVmYXVsdFZhbHVlKTsK
LSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY29ubmVjdFRvUm9vbShTdHJpbmcgcm9vbUlk
LCBib29sZWFuIGNvbW1hbmRMaW5lUnVuLCBib29sZWFuIGxvb3BiYWNrLAotICAgICAgYm9vbGVh
biB1c2VWYWx1ZXNGcm9tSW50ZW50LCBpbnQgcnVuVGltZU1zKSB7Ci0gICAgdGhpcy5jb21tYW5k
TGluZVJ1biA9IGNvbW1hbmRMaW5lUnVuOwotCi0gICAgLy8gcm9vbUlkIGlzIHJhbmRvbSBmb3Ig
bG9vcGJhY2suCi0gICAgaWYgKGxvb3BiYWNrKSB7Ci0gICAgICByb29tSWQgPSBJbnRlZ2VyLnRv
U3RyaW5nKChuZXcgUmFuZG9tKCkpLm5leHRJbnQoMTAwMDAwMDAwKSk7Ci0gICAgfQotCi0gICAg
U3RyaW5nIHJvb21VcmwgPSBzaGFyZWRQcmVmLmdldFN0cmluZygKLSAgICAgICAga2V5cHJlZlJv
b21TZXJ2ZXJVcmwsIGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jvb21fc2VydmVyX3VybF9kZWZh
dWx0KSk7Ci0KLSAgICAvLyBWaWRlbyBjYWxsIGVuYWJsZWQgZmxhZy4KLSAgICBib29sZWFuIHZp
ZGVvQ2FsbEVuYWJsZWQgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX3ZpZGVv
Y2FsbF9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQUxMLCBSLnN0cmlu
Zy5wcmVmX3ZpZGVvY2FsbF9kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8v
IFVzZSBzY3JlZW5jYXB0dXJlIG9wdGlvbi4KLSAgICBib29sZWFuIHVzZVNjcmVlbmNhcHR1cmUg
PSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX3NjcmVlbmNhcHR1cmVfa2V5LAot
ICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfU0NSRUVOQ0FQVFVSRSwgUi5zdHJpbmcucHJlZl9z
Y3JlZW5jYXB0dXJlX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gVXNl
IENhbWVyYTIgb3B0aW9uLgotICAgIGJvb2xlYW4gdXNlQ2FtZXJhMiA9IHNoYXJlZFByZWZHZXRC
b29sZWFuKFIuc3RyaW5nLnByZWZfY2FtZXJhMl9rZXksIENhbGxBY3Rpdml0eS5FWFRSQV9DQU1F
UkEyLAotICAgICAgICBSLnN0cmluZy5wcmVmX2NhbWVyYTJfZGVmYXVsdCwgdXNlVmFsdWVzRnJv
bUludGVudCk7Ci0KLSAgICAvLyBHZXQgZGVmYXVsdCBjb2RlY3MuCi0gICAgU3RyaW5nIHZpZGVv
Q29kZWMgPSBzaGFyZWRQcmVmR2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmlkZW9jb2RlY19rZXks
Ci0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT0NPREVDLCBSLnN0cmluZy5wcmVmX3Zp
ZGVvY29kZWNfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0gICAgU3RyaW5nIGF1ZGlv
Q29kZWMgPSBzaGFyZWRQcmVmR2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYXVkaW9jb2RlY19rZXks
Ci0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9BVURJT0NPREVDLCBSLnN0cmluZy5wcmVmX2F1
ZGlvY29kZWNfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBI
VyBjb2RlYyBmbGFnLgotICAgIGJvb2xlYW4gaHdDb2RlYyA9IHNoYXJlZFByZWZHZXRCb29sZWFu
KFIuc3RyaW5nLnByZWZfaHdjb2RlY19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9I
V0NPREVDX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfaHdjb2RlY19kZWZhdWx0LCB1c2VWYWx1ZXNG
cm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIENhcHR1cmUgdG8gdGV4dHVyZS4KLSAgICBib29s
ZWFuIGNhcHR1cmVUb1RleHR1cmUgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVm
X2NhcHR1cmV0b3RleHR1cmVfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfQ0FQVFVS
RVRPVEVYVFVSRV9FTkFCTEVELCBSLnN0cmluZy5wcmVmX2NhcHR1cmV0b3RleHR1cmVfZGVmYXVs
dCwKLSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxl
IEF1ZGlvIFByb2Nlc3NpbmcgZmxhZy4KLSAgICBib29sZWFuIG5vQXVkaW9Qcm9jZXNzaW5nID0g
c2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19rZXks
Ci0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9OT0FVRElPUFJPQ0VTU0lOR19FTkFCTEVELCBS
LnN0cmluZy5wcmVmX25vYXVkaW9wcm9jZXNzaW5nX2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVl
c0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgRGlzYWJsZSBBdWRpbyBQcm9jZXNzaW5nIGZs
YWcuCi0gICAgYm9vbGVhbiBhZWNEdW1wID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcu
cHJlZl9hZWNkdW1wX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0FFQ0RVTVBfRU5B
QkxFRCwgUi5zdHJpbmcucHJlZl9hZWNkdW1wX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQp
OwotCi0gICAgLy8gQ2hlY2sgT3BlblNMIEVTIGVuYWJsZWQgZmxhZy4KLSAgICBib29sZWFuIHVz
ZU9wZW5TTEVTID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9vcGVuc2xlc19r
ZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9PUEVOU0xFU19FTkFCTEVELCBSLnN0cmlu
Zy5wcmVmX29wZW5zbGVzX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8g
Q2hlY2sgRGlzYWJsZSBidWlsdC1pbiBBRUMgZmxhZy4KLSAgICBib29sZWFuIGRpc2FibGVCdWls
dEluQUVDID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0
X2luX2FlY19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lO
X0FFQywgUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FlY19kZWZhdWx0LAotICAgICAg
ICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIERpc2FibGUgYnVpbHQtaW4g
QUdDIGZsYWcuCi0gICAgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbkFHQyA9IHNoYXJlZFByZWZHZXRC
b29sZWFuKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2Nfa2V5LAotICAgICAgICBD
YWxsQWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BR0MsIFIuc3RyaW5nLnByZWZfZGlz
YWJsZV9idWlsdF9pbl9hZ2NfZGVmYXVsdCwKLSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVudCk7
Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxlIGJ1aWx0LWluIE5TIGZsYWcuCi0gICAgYm9vbGVhbiBk
aXNhYmxlQnVpbHRJbk5TID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9kaXNh
YmxlX2J1aWx0X2luX25zX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FCTEVf
QlVJTFRfSU5fTlMsIFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19kZWZhdWx0LAot
ICAgICAgICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIEVuYWJsZSBsZXZl
bCBjb250cm9sLgotICAgIGJvb2xlYW4gZW5hYmxlTGV2ZWxDb250cm9sID0gc2hhcmVkUHJlZkdl
dEJvb2xlYW4oUi5zdHJpbmcucHJlZl9lbmFibGVfbGV2ZWxfY29udHJvbF9rZXksCi0gICAgICAg
IENhbGxBY3Rpdml0eS5FWFRSQV9FTkFCTEVfTEVWRUxfQ09OVFJPTCwgUi5zdHJpbmcucHJlZl9l
bmFibGVfbGV2ZWxfY29udHJvbF9rZXksCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwot
Ci0gICAgLy8gR2V0IHZpZGVvIHJlc29sdXRpb24gZnJvbSBzZXR0aW5ncy4KLSAgICBpbnQgdmlk
ZW9XaWR0aCA9IDA7Ci0gICAgaW50IHZpZGVvSGVpZ2h0ID0gMDsKLSAgICBpZiAodXNlVmFsdWVz
RnJvbUludGVudCkgewotICAgICAgdmlkZW9XaWR0aCA9IGdldEludGVudCgpLmdldEludEV4dHJh
KENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19XSURUSCwgMCk7Ci0gICAgICB2aWRlb0hlaWdodCA9
IGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19IRUlHSFQs
IDApOwotICAgIH0KLSAgICBpZiAodmlkZW9XaWR0aCA9PSAwICYmIHZpZGVvSGVpZ2h0ID09IDAp
IHsKLSAgICAgIFN0cmluZyByZXNvbHV0aW9uID0KLSAgICAgICAgICBzaGFyZWRQcmVmLmdldFN0
cmluZyhrZXlwcmVmUmVzb2x1dGlvbiwgZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcmVzb2x1dGlv
bl9kZWZhdWx0KSk7Ci0gICAgICBTdHJpbmdbXSBkaW1lbnNpb25zID0gcmVzb2x1dGlvbi5zcGxp
dCgiWyB4XSsiKTsKLSAgICAgIGlmIChkaW1lbnNpb25zLmxlbmd0aCA9PSAyKSB7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgdmlkZW9XaWR0aCA9IEludGVnZXIucGFyc2VJbnQoZGltZW5zaW9u
c1swXSk7Ci0gICAgICAgICAgdmlkZW9IZWlnaHQgPSBJbnRlZ2VyLnBhcnNlSW50KGRpbWVuc2lv
bnNbMV0pOwotICAgICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAg
ICAgICAgIHZpZGVvV2lkdGggPSAwOwotICAgICAgICAgIHZpZGVvSGVpZ2h0ID0gMDsKLSAgICAg
ICAgICBMb2cuZShUQUcsICJXcm9uZyB2aWRlbyByZXNvbHV0aW9uIHNldHRpbmc6ICIgKyByZXNv
bHV0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIEdldCBjYW1lcmEg
ZnBzIGZyb20gc2V0dGluZ3MuCi0gICAgaW50IGNhbWVyYUZwcyA9IDA7Ci0gICAgaWYgKHVzZVZh
bHVlc0Zyb21JbnRlbnQpIHsKLSAgICAgIGNhbWVyYUZwcyA9IGdldEludGVudCgpLmdldEludEV4
dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19GUFMsIDApOwotICAgIH0KLSAgICBpZiAoY2Ft
ZXJhRnBzID09IDApIHsKLSAgICAgIFN0cmluZyBmcHMgPSBzaGFyZWRQcmVmLmdldFN0cmluZyhr
ZXlwcmVmRnBzLCBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9mcHNfZGVmYXVsdCkpOwotICAgICAg
U3RyaW5nW10gZnBzVmFsdWVzID0gZnBzLnNwbGl0KCJbIHhdKyIpOwotICAgICAgaWYgKGZwc1Zh
bHVlcy5sZW5ndGggPT0gMikgewotICAgICAgICB0cnkgewotICAgICAgICAgIGNhbWVyYUZwcyA9
IEludGVnZXIucGFyc2VJbnQoZnBzVmFsdWVzWzBdKTsKLSAgICAgICAgfSBjYXRjaCAoTnVtYmVy
Rm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICBjYW1lcmFGcHMgPSAwOwotICAgICAgICAg
IExvZy5lKFRBRywgIldyb25nIGNhbWVyYSBmcHMgc2V0dGluZzogIiArIGZwcyk7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVjayBjYXB0dXJlIHF1YWxpdHkgc2xpZGVy
IGZsYWcuCi0gICAgYm9vbGVhbiBjYXB0dXJlUXVhbGl0eVNsaWRlciA9IHNoYXJlZFByZWZHZXRC
b29sZWFuKFIuc3RyaW5nLnByZWZfY2FwdHVyZXF1YWxpdHlzbGlkZXJfa2V5LAotICAgICAgICBD
YWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FQVFVSRVFVQUxJVFlTTElERVJfRU5BQkxFRCwKLSAg
ICAgICAgUi5zdHJpbmcucHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRlcl9kZWZhdWx0LCB1c2VWYWx1
ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIEdldCB2aWRlbyBhbmQgYXVkaW8gc3RhcnQgYml0cmF0
ZS4KLSAgICBpbnQgdmlkZW9TdGFydEJpdHJhdGUgPSAwOwotICAgIGlmICh1c2VWYWx1ZXNGcm9t
SW50ZW50KSB7Ci0gICAgICB2aWRlb1N0YXJ0Qml0cmF0ZSA9IGdldEludGVudCgpLmdldEludEV4
dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19CSVRSQVRFLCAwKTsKLSAgICB9Ci0gICAgaWYg
KHZpZGVvU3RhcnRCaXRyYXRlID09IDApIHsKLSAgICAgIFN0cmluZyBiaXRyYXRlVHlwZURlZmF1
bHQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGVfZGVmYXVsdCk7Ci0g
ICAgICBTdHJpbmcgYml0cmF0ZVR5cGUgPSBzaGFyZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmVmlk
ZW9CaXRyYXRlVHlwZSwgYml0cmF0ZVR5cGVEZWZhdWx0KTsKLSAgICAgIGlmICghYml0cmF0ZVR5
cGUuZXF1YWxzKGJpdHJhdGVUeXBlRGVmYXVsdCkpIHsKLSAgICAgICAgU3RyaW5nIGJpdHJhdGVW
YWx1ZSA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKAotICAgICAgICAgICAga2V5cHJlZlZpZGVvQml0
cmF0ZVZhbHVlLCBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9k
ZWZhdWx0KSk7Ci0gICAgICAgIHZpZGVvU3RhcnRCaXRyYXRlID0gSW50ZWdlci5wYXJzZUludChi
aXRyYXRlVmFsdWUpOwotICAgICAgfQotICAgIH0KLQotICAgIGludCBhdWRpb1N0YXJ0Qml0cmF0
ZSA9IDA7Ci0gICAgaWYgKHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsKLSAgICAgIGF1ZGlvU3RhcnRC
aXRyYXRlID0gZ2V0SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0FVRElP
X0JJVFJBVEUsIDApOwotICAgIH0KLSAgICBpZiAoYXVkaW9TdGFydEJpdHJhdGUgPT0gMCkgewot
ICAgICAgU3RyaW5nIGJpdHJhdGVUeXBlRGVmYXVsdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X3N0YXJ0YXVkaW9iaXRyYXRlX2RlZmF1bHQpOwotICAgICAgU3RyaW5nIGJpdHJhdGVUeXBlID0g
c2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZkF1ZGlvQml0cmF0ZVR5cGUsIGJpdHJhdGVUeXBl
RGVmYXVsdCk7Ci0gICAgICBpZiAoIWJpdHJhdGVUeXBlLmVxdWFscyhiaXRyYXRlVHlwZURlZmF1
bHQpKSB7Ci0gICAgICAgIFN0cmluZyBiaXRyYXRlVmFsdWUgPSBzaGFyZWRQcmVmLmdldFN0cmlu
ZygKLSAgICAgICAgICAgIGtleXByZWZBdWRpb0JpdHJhdGVWYWx1ZSwgZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9kZWZhdWx0KSk7Ci0gICAgICAgIGF1ZGlv
U3RhcnRCaXRyYXRlID0gSW50ZWdlci5wYXJzZUludChiaXRyYXRlVmFsdWUpOwotICAgICAgfQot
ICAgIH0KLQotICAgIC8vIENoZWNrIHN0YXRpc3RpY3MgZGlzcGxheSBvcHRpb24uCi0gICAgYm9v
bGVhbiBkaXNwbGF5SHVkID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9kaXNw
bGF5aHVkX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU1BMQVlfSFVELCBSLnN0
cmluZy5wcmVmX2Rpc3BsYXlodWRfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAg
ICBib29sZWFuIHRyYWNpbmcgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX3Ry
YWNpbmdfa2V5LCBDYWxsQWN0aXZpdHkuRVhUUkFfVFJBQ0lORywKLSAgICAgICAgUi5zdHJpbmcu
cHJlZl90cmFjaW5nX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gU3Rh
cnQgQXBwUlRDTW9iaWxlIGFjdGl2aXR5LgotICAgIExvZy5kKFRBRywgIkNvbm5lY3RpbmcgdG8g
cm9vbSAiICsgcm9vbUlkICsgIiBhdCBVUkwgIiArIHJvb21VcmwpOwotICAgIGlmICh2YWxpZGF0
ZVVybChyb29tVXJsKSkgewotICAgICAgVXJpIHVyaSA9IFVyaS5wYXJzZShyb29tVXJsKTsKLSAg
ICAgIEludGVudCBpbnRlbnQgPSBuZXcgSW50ZW50KHRoaXMsIENhbGxBY3Rpdml0eS5jbGFzcyk7
Ci0gICAgICBpbnRlbnQuc2V0RGF0YSh1cmkpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxB
Y3Rpdml0eS5FWFRSQV9ST09NSUQsIHJvb21JZCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2Fs
bEFjdGl2aXR5LkVYVFJBX0xPT1BCQUNLLCBsb29wYmFjayk7Ci0gICAgICBpbnRlbnQucHV0RXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBTEwsIHZpZGVvQ2FsbEVuYWJsZWQpOwotICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQ1JFRU5DQVBUVVJFLCB1c2VT
Y3JlZW5jYXB0dXJlKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFf
Q0FNRVJBMiwgdXNlQ2FtZXJhMik7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5
LkVYVFJBX1ZJREVPX1dJRFRILCB2aWRlb1dpZHRoKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShD
YWxsQWN0aXZpdHkuRVhUUkFfVklERU9fSEVJR0hULCB2aWRlb0hlaWdodCk7Ci0gICAgICBpbnRl
bnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0ZQUywgY2FtZXJhRnBzKTsKLSAg
ICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FQVFVSRVFVQUxJ
VFlTTElERVJfRU5BQkxFRCwgY2FwdHVyZVF1YWxpdHlTbGlkZXIpOwotICAgICAgaW50ZW50LnB1
dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19CSVRSQVRFLCB2aWRlb1N0YXJ0Qml0cmF0
ZSk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPQ09ERUMs
IHZpZGVvQ29kZWMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9I
V0NPREVDX0VOQUJMRUQsIGh3Q29kZWMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9DQVBUVVJFVE9URVhUVVJFX0VOQUJMRUQsIGNhcHR1cmVUb1RleHR1cmUpOwot
ICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9OT0FVRElPUFJPQ0VTU0lO
R19FTkFCTEVELCBub0F1ZGlvUHJvY2Vzc2luZyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2Fs
bEFjdGl2aXR5LkVYVFJBX0FFQ0RVTVBfRU5BQkxFRCwgYWVjRHVtcCk7Ci0gICAgICBpbnRlbnQu
cHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX09QRU5TTEVTX0VOQUJMRUQsIHVzZU9wZW5TTEVT
KTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlM
VF9JTl9BRUMsIGRpc2FibGVCdWlsdEluQUVDKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxs
QWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BR0MsIGRpc2FibGVCdWlsdEluQUdDKTsK
LSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9J
Tl9OUywgZGlzYWJsZUJ1aWx0SW5OUyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2
aXR5LkVYVFJBX0VOQUJMRV9MRVZFTF9DT05UUk9MLCBlbmFibGVMZXZlbENvbnRyb2wpOwotICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9BVURJT19CSVRSQVRFLCBhdWRp
b1N0YXJ0Qml0cmF0ZSk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJB
X0FVRElPQ09ERUMsIGF1ZGlvQ29kZWMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9ESVNQTEFZX0hVRCwgZGlzcGxheUh1ZCk7Ci0gICAgICBpbnRlbnQucHV0RXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1RSQUNJTkcsIHRyYWNpbmcpOwotICAgICAgaW50ZW50LnB1
dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9DTURMSU5FLCBjb21tYW5kTGluZVJ1bik7Ci0gICAg
ICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1JVTlRJTUUsIHJ1blRpbWVNcyk7
Ci0KLSAgICAgIGlmICh1c2VWYWx1ZXNGcm9tSW50ZW50KSB7Ci0gICAgICAgIGlmIChnZXRJbnRl
bnQoKS5oYXNFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fRklMRV9BU19DQU1FUkEpKSB7
Ci0gICAgICAgICAgU3RyaW5nIHZpZGVvRmlsZUFzQ2FtZXJhID0KLSAgICAgICAgICAgICAgZ2V0
SW50ZW50KCkuZ2V0U3RyaW5nRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0ZJTEVfQVNf
Q0FNRVJBKTsKLSAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJ
REVPX0ZJTEVfQVNfQ0FNRVJBLCB2aWRlb0ZpbGVBc0NhbWVyYSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZ2V0SW50ZW50KCkuaGFzRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVN
T1RFX1ZJREVPX1RPX0ZJTEUpKSB7Ci0gICAgICAgICAgU3RyaW5nIHNhdmVSZW1vdGVWaWRlb1Rv
RmlsZSA9Ci0gICAgICAgICAgICAgIGdldEludGVudCgpLmdldFN0cmluZ0V4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFKTsKLSAgICAgICAgICBpbnRlbnQu
cHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUsIHNh
dmVSZW1vdGVWaWRlb1RvRmlsZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZ2V0SW50ZW50
KCkuaGFzRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVf
V0lEVEgpKSB7Ci0gICAgICAgICAgaW50IHZpZGVvT3V0V2lkdGggPQotICAgICAgICAgICAgICBn
ZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklE
RU9fVE9fRklMRV9XSURUSCwgMCk7Ci0gICAgICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRILCB2aWRlb091dFdpZHRo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChnZXRJbnRlbnQoKS5oYXNFeHRyYShDYWxsQWN0
aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQpKSB7Ci0gICAgICAg
ICAgaW50IHZpZGVvT3V0SGVpZ2h0ID0KLSAgICAgICAgICAgICAgZ2V0SW50ZW50KCkuZ2V0SW50
RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hU
LCAwKTsKLSAgICAgICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVf
UkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hULCB2aWRlb091dEhlaWdodCk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLQotICAgICAgc3RhcnRBY3Rpdml0eUZvclJlc3VsdChpbnRlbnQsIENPTk5FQ1RJ
T05fUkVRVUVTVCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlVXJs
KFN0cmluZyB1cmwpIHsKLSAgICBpZiAoVVJMVXRpbC5pc0h0dHBzVXJsKHVybCkgfHwgVVJMVXRp
bC5pc0h0dHBVcmwodXJsKSkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgbmV3
IEFsZXJ0RGlhbG9nLkJ1aWxkZXIodGhpcykKLSAgICAgICAgLnNldFRpdGxlKGdldFRleHQoUi5z
dHJpbmcuaW52YWxpZF91cmxfdGl0bGUpKQotICAgICAgICAuc2V0TWVzc2FnZShnZXRTdHJpbmco
Ui5zdHJpbmcuaW52YWxpZF91cmxfdGV4dCwgdXJsKSkKLSAgICAgICAgLnNldENhbmNlbGFibGUo
ZmFsc2UpCi0gICAgICAgIC5zZXROZXV0cmFsQnV0dG9uKFIuc3RyaW5nLm9rLAotICAgICAgICAg
ICAgbmV3IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgICAgICAg
IHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IGlkKSB7Ci0g
ICAgICAgICAgICAgICAgZGlhbG9nLmNhbmNlbCgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9KQotICAgICAgICAuY3JlYXRlKCkKLSAgICAgICAgLnNob3coKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIEFkYXB0ZXJWaWV3Lk9uSXRlbUNsaWNrTGlz
dGVuZXIgcm9vbUxpc3RDbGlja0xpc3RlbmVyID0KLSAgICAgIG5ldyBBZGFwdGVyVmlldy5Pbkl0
ZW1DbGlja0xpc3RlbmVyKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZv
aWQgb25JdGVtQ2xpY2soQWRhcHRlclZpZXc8Pz4gYWRhcHRlclZpZXcsIFZpZXcgdmlldywgaW50
IGksIGxvbmcgbCkgewotICAgICAgICAgIFN0cmluZyByb29tSWQgPSAoKFRleHRWaWV3KSB2aWV3
KS5nZXRUZXh0KCkudG9TdHJpbmcoKTsKLSAgICAgICAgICBjb25uZWN0VG9Sb29tKHJvb21JZCwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7Ci0gICAgICAgIH0KLSAgICAgIH07Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBPbkNsaWNrTGlzdGVuZXIgYWRkRmF2b3JpdGVMaXN0ZW5lciA9IG5ldyBPbkNsaWNr
TGlzdGVuZXIoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3
IHZpZXcpIHsKLSAgICAgIFN0cmluZyBuZXdSb29tID0gcm9vbUVkaXRUZXh0LmdldFRleHQoKS50
b1N0cmluZygpOwotICAgICAgaWYgKG5ld1Jvb20ubGVuZ3RoKCkgPiAwICYmICFyb29tTGlzdC5j
b250YWlucyhuZXdSb29tKSkgewotICAgICAgICBhZGFwdGVyLmFkZChuZXdSb29tKTsKLSAgICAg
ICAgYWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hhbmdlZCgpOwotICAgICAgfQotICAgIH0KLSAgfTsK
LQotICBwcml2YXRlIGZpbmFsIE9uQ2xpY2tMaXN0ZW5lciBjb25uZWN0TGlzdGVuZXIgPSBuZXcg
T25DbGlja0xpc3RlbmVyKCkgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xp
Y2soVmlldyB2aWV3KSB7Ci0gICAgICBjb25uZWN0VG9Sb29tKHJvb21FZGl0VGV4dC5nZXRUZXh0
KCkudG9TdHJpbmcoKSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgMCk7Ci0gICAgfQotICB9OwotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NwdU1vbml0b3IuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ3B1TW9uaXRvci5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ3B1TW9uaXRvci5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsNTEwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNv
bnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNv
bnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQub3MuQmF0dGVyeU1hbmFnZXI7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5TeXN0ZW1DbG9jazsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwot
Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RG
b3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5p
by5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRp
bC5TY2FubmVyOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9y
dCBqYXZhLnV0aWwuY29uY3VycmVudC5TY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQg
amF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLS8qKgotICogU2ltcGxlIENQVSBtb25p
dG9yLiAgVGhlIGNhbGxlciBjcmVhdGVzIGEgQ3B1TW9uaXRvciBvYmplY3Qgd2hpY2ggY2FuIHRo
ZW4KLSAqIGJlIHVzZWQgdmlhIHNhbXBsZUNwdVV0aWxpemF0aW9uKCkgdG8gY29sbGVjdCB0aGUg
cGVyY2VudHVhbCB1c2Ugb2YgdGhlCi0gKiBjdW11bGF0aXZlIENQVSBjYXBhY2l0eSBmb3IgYWxs
IENQVXMgcnVubmluZyBhdCB0aGVpciBub21pbmFsIGZyZXF1ZW5jeS4gIDMKLSAqIHZhbHVlcyBh
cmUgZ2VuZXJhdGVkOiAoMSkgZ2V0Q3B1Q3VycmVudCgpIHJldHVybnMgdGhlIHVzZSBzaW5jZSB0
aGUgbGFzdAotICogc2FtcGxlQ3B1VXRpbGl6YXRpb24oKSwgKDIpIGdldENwdUF2ZzMoKSByZXR1
cm5zIHRoZSB1c2Ugc2luY2UgMyBwcmlvcgotICogY2FsbHMsIGFuZCAoMykgZ2V0Q3B1QXZnQWxs
KCkgcmV0dXJucyB0aGUgdXNlIG92ZXIgYWxsIFNBTVBMRV9TQVZFX05VTUJFUgotICogY2FsbHMu
Ci0gKgotICogPHA+Q1BVcyBpbiBBbmRyb2lkIGFyZSBvZnRlbiAib2ZmbGluZSIsIGFuZCB3aGls
ZSB0aGlzIG9mIGNvdXJzZSBtZWFucyAwIEh6Ci0gKiBhcyBjdXJyZW50IGZyZXF1ZW5jeSwgaW4g
dGhpcyBzdGF0ZSB3ZSBjYW5ub3QgZXZlbiBnZXQgdGhlaXIgbm9taW5hbAotICogZnJlcXVlbmN5
LiAgV2UgdGhlcmVmb3JlIHRyZWFkIGNhcmVmdWxseSwgYW5kIGFsbG93IGFueSBDUFUgdG8gYmUg
bWlzc2luZy4KLSAqIE1pc3NpbmcgQ1BVcyBhcmUgYXNzdW1lZCB0byBoYXZlIHRoZSBzYW1lIG5v
bWluYWwgZnJlcXVlbmN5IGFzIGFueSBjbG9zZQotICogbG93ZXItbnVtYmVyZWQgQ1BVLCBidXQg
YXMgc29vbiBhcyBpdCBpcyBvbmxpbmUsIHdlJ2xsIGdldCB0aGVpciBwcm9wZXIKLSAqIGZyZXF1
ZW5jeSBhbmQgcmVtZW1iZXIgaXQuICAoU2luY2UgQ1BVIDAgaW4gcHJhY3RpY2UgYWx3YXlzIHNl
ZW0gdG8gYmUKLSAqIG9ubGluZSwgdGhpcyB1bmlkaXJlY3Rpb25hbCBmcmVxdWVuY3kgaW5oZXJp
dGFuY2Ugc2hvdWxkIGJlIG5vIHByb2JsZW0gaW4KLSAqIHByYWN0aWNlLikKLSAqCi0gKiA8cD5D
YXZlYXRzOgotICogICBvIE5vIHByb3Zpc2lvbiBtYWRlIGZvciB6YW55ICJ0dXJibyIgbW9kZSwg
Y29tbW9uIGluIHRoZSB4ODYgd29ybGQuCi0gKiAgIG8gTm8gcHJvdmlzaW9uIG1hZGUgZm9yIEFS
TSBiaWcuTElUVExFOyBpZiBDUFUgbiBjYW4gc3dpdGNoIGJlaGluZCBvdXIKLSAqICAgICBiYWNr
LCB3ZSBtaWdodCBnZXQgaW5jb3JyZWN0IGVzdGltYXRlcy4KLSAqICAgbyBUaGlzIGlzIG5vdCB0
aHJlYWQtc2FmZS4gIFRvIGNhbGwgYXN5bmNocm9ub3VzbHksIGNyZWF0ZSBkaWZmZXJlbnQKLSAq
ICAgICBDcHVNb25pdG9yIG9iamVjdHMuCi0gKgotICogPHA+SWYgd2UgY2FuIGdhdGhlciBlbm91
Z2ggaW5mbyB0byBnZW5lcmF0ZSBhIHNlbnNpYmxlIHJlc3VsdCwKLSAqIHNhbXBsZUNwdVV0aWxp
emF0aW9uIHJldHVybnMgdHJ1ZS4gIEl0IGlzIGRlc2lnbmVkIHRvIG5ldmVyIHRocm93IGFuCi0g
KiBleGNlcHRpb24uCi0gKgotICogPHA+c2FtcGxlQ3B1VXRpbGl6YXRpb24gc2hvdWxkIG5vdCBi
ZSBjYWxsZWQgdG9vIG9mdGVuIGluIGl0cyBwcmVzZW50IGZvcm0sCi0gKiBzaW5jZSB0aGVuIGRl
bHRhcyB3b3VsZCBiZSBzbWFsbCBhbmQgdGhlIHBlcmNlbnQgdmFsdWVzIHdvdWxkIGZsdWN0dWF0
ZSBhbmQKLSAqIGJlIHVucmVhZGFibGUuIElmIGl0IGlzIGRlc2lyYWJsZSB0byBjYWxsIGl0IG1v
cmUgb2Z0ZW4gdGhhbiBzYXkgb25jZSBwZXIKLSAqIHNlY29uZCwgb25lIHdvdWxkIG5lZWQgdG8g
aW5jcmVhc2UgU0FNUExFX1NBVkVfTlVNQkVSIGFuZCBwcm9iYWJseSB1c2UKLSAqIFF1ZXVlPElu
dGVnZXI+IHRvIGF2b2lkIGNvcHlpbmcgb3ZlcmhlYWQuCi0gKgotICogPHA+S25vd24gcHJvYmxl
bXM6Ci0gKiAgIDEuIE5leHVzIDcgZGV2aWNlcyBydW5uaW5nIEtpdGthdCBoYXZlIGEga2VybmVs
IHdoaWNoIG9mdGVuIG91dHB1dCBhbgotICogICAgICBpbmNvcnJlY3QgJ2lkbGUnIGZpZWxkIGlu
IC9wcm9jL3N0YXQuICBUaGUgdmFsdWUgaXMgY2xvc2UgdG8gdHdpY2UgdGhlCi0gKiAgICAgIGNv
cnJlY3QgdmFsdWUsIGFuZCB0aGVuIHJldHVybnMgdG8gYmFjayB0byBjb3JyZWN0IHJlYWRpbmcu
ICBCb3RoIHdoZW4KLSAqICAgICAganVtcGluZyB1cCBhbmQgYmFjayBkb3duIHdlIG1pZ2h0IGNy
ZWF0ZSBmYXVsdHkgQ1BVIGxvYWQgcmVhZGluZ3MuCi0gKi8KLQotY2xhc3MgQ3B1TW9uaXRvciB7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ3B1TW9uaXRvciI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBNT1ZJTkdfQVZFUkFHRV9TQU1QTEVTID0gNTsKLQotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ1BVX1NUQVRfU0FNUExFX1BFUklPRF9NUyA9IDIwMDA7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDUFVfU1RBVF9MT0dfUEVSSU9EX01TID0gNjAw
MDsKLQotICBwcml2YXRlIGZpbmFsIENvbnRleHQgYXBwQ29udGV4dDsKLSAgLy8gVXNlciBDUFUg
dXNhZ2UgYXQgY3VycmVudCBmcmVxdWVuY3kuCi0gIHByaXZhdGUgZmluYWwgTW92aW5nQXZlcmFn
ZSB1c2VyQ3B1VXNhZ2U7Ci0gIC8vIFN5c3RlbSBDUFUgdXNhZ2UgYXQgY3VycmVudCBmcmVxdWVu
Y3kuCi0gIHByaXZhdGUgZmluYWwgTW92aW5nQXZlcmFnZSBzeXN0ZW1DcHVVc2FnZTsKLSAgLy8g
VG90YWwgQ1BVIHVzYWdlIHJlbGF0aXZlIHRvIG1heGltdW0gZnJlcXVlbmN5LgotICBwcml2YXRl
IGZpbmFsIE1vdmluZ0F2ZXJhZ2UgdG90YWxDcHVVc2FnZTsKLSAgLy8gQ1BVIGZyZXF1ZW5jeSBp
biBwZXJjZW50YWdlIGZyb20gbWF4aW11bS4KLSAgcHJpdmF0ZSBmaW5hbCBNb3ZpbmdBdmVyYWdl
IGZyZXF1ZW5jeVNjYWxlOwotCi0gIHByaXZhdGUgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlIGV4
ZWN1dG9yOwotICBwcml2YXRlIGxvbmcgbGFzdFN0YXRMb2dUaW1lTXM7Ci0gIHByaXZhdGUgbG9u
Z1tdIGNwdUZyZXFNYXg7Ci0gIHByaXZhdGUgaW50IGNwdXNQcmVzZW50OwotICBwcml2YXRlIGlu
dCBhY3R1YWxDcHVzUHJlc2VudDsKLSAgcHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkOwotICBw
cml2YXRlIGJvb2xlYW4gY3B1T3ZlcnVzZTsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBtYXhQYXRoOwot
ICBwcml2YXRlIFN0cmluZ1tdIGN1clBhdGg7Ci0gIHByaXZhdGUgZG91YmxlW10gY3VyRnJlcVNj
YWxlczsKLSAgcHJpdmF0ZSBQcm9jU3RhdCBsYXN0UHJvY1N0YXQ7Ci0KLSAgcHJpdmF0ZSBzdGF0
aWMgY2xhc3MgUHJvY1N0YXQgewotICAgIGZpbmFsIGxvbmcgdXNlclRpbWU7Ci0gICAgZmluYWwg
bG9uZyBzeXN0ZW1UaW1lOwotICAgIGZpbmFsIGxvbmcgaWRsZVRpbWU7Ci0KLSAgICBQcm9jU3Rh
dChsb25nIHVzZXJUaW1lLCBsb25nIHN5c3RlbVRpbWUsIGxvbmcgaWRsZVRpbWUpIHsKLSAgICAg
IHRoaXMudXNlclRpbWUgPSB1c2VyVGltZTsKLSAgICAgIHRoaXMuc3lzdGVtVGltZSA9IHN5c3Rl
bVRpbWU7Ci0gICAgICB0aGlzLmlkbGVUaW1lID0gaWRsZVRpbWU7Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW92aW5nQXZlcmFnZSB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBp
bnQgc2l6ZTsKLSAgICBwcml2YXRlIGRvdWJsZSBzdW07Ci0gICAgcHJpdmF0ZSBkb3VibGUgY3Vy
cmVudFZhbHVlOwotICAgIHByaXZhdGUgZG91YmxlIGNpcmNCdWZmZXJbXTsKLSAgICBwcml2YXRl
IGludCBjaXJjQnVmZmVySW5kZXg7Ci0KLSAgICBwdWJsaWMgTW92aW5nQXZlcmFnZShpbnQgc2l6
ZSkgewotICAgICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9u
RXJyb3IoIlNpemUgdmFsdWUgaW4gTW92aW5nQXZlcmFnZSBjdG9yIHNob3VsZCBiZSBwb3NpdGl2
ZS4iKTsKLSAgICAgIH0KLSAgICAgIHRoaXMuc2l6ZSA9IHNpemU7Ci0gICAgICBjaXJjQnVmZmVy
ID0gbmV3IGRvdWJsZVtzaXplXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCByZXNldCgpIHsK
LSAgICAgIEFycmF5cy5maWxsKGNpcmNCdWZmZXIsIDApOwotICAgICAgY2lyY0J1ZmZlckluZGV4
ID0gMDsKLSAgICAgIHN1bSA9IDA7Ci0gICAgICBjdXJyZW50VmFsdWUgPSAwOwotICAgIH0KLQot
ICAgIHB1YmxpYyB2b2lkIGFkZFZhbHVlKGRvdWJsZSB2YWx1ZSkgewotICAgICAgc3VtIC09IGNp
cmNCdWZmZXJbY2lyY0J1ZmZlckluZGV4XTsKLSAgICAgIGNpcmNCdWZmZXJbY2lyY0J1ZmZlcklu
ZGV4KytdID0gdmFsdWU7Ci0gICAgICBjdXJyZW50VmFsdWUgPSB2YWx1ZTsKLSAgICAgIHN1bSAr
PSB2YWx1ZTsKLSAgICAgIGlmIChjaXJjQnVmZmVySW5kZXggPj0gc2l6ZSkgewotICAgICAgICBj
aXJjQnVmZmVySW5kZXggPSAwOwotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUg
Z2V0Q3VycmVudCgpIHsKLSAgICAgIHJldHVybiBjdXJyZW50VmFsdWU7Ci0gICAgfQotCi0gICAg
cHVibGljIGRvdWJsZSBnZXRBdmVyYWdlKCkgewotICAgICAgcmV0dXJuIHN1bSAvIChkb3VibGUp
IHNpemU7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIENwdU1vbml0b3IoQ29udGV4dCBjb250ZXh0
KSB7Ci0gICAgTG9nLmQoVEFHLCAiQ3B1TW9uaXRvciBjdG9yLiIpOwotICAgIGFwcENvbnRleHQg
PSBjb250ZXh0LmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwotICAgIHVzZXJDcHVVc2FnZSA9IG5l
dyBNb3ZpbmdBdmVyYWdlKE1PVklOR19BVkVSQUdFX1NBTVBMRVMpOwotICAgIHN5c3RlbUNwdVVz
YWdlID0gbmV3IE1vdmluZ0F2ZXJhZ2UoTU9WSU5HX0FWRVJBR0VfU0FNUExFUyk7Ci0gICAgdG90
YWxDcHVVc2FnZSA9IG5ldyBNb3ZpbmdBdmVyYWdlKE1PVklOR19BVkVSQUdFX1NBTVBMRVMpOwot
ICAgIGZyZXF1ZW5jeVNjYWxlID0gbmV3IE1vdmluZ0F2ZXJhZ2UoTU9WSU5HX0FWRVJBR0VfU0FN
UExFUyk7Ci0gICAgbGFzdFN0YXRMb2dUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRp
bWUoKTsKLQotICAgIHNjaGVkdWxlQ3B1VXRpbGl6YXRpb25UYXNrKCk7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCBwYXVzZSgpIHsKLSAgICBpZiAoZXhlY3V0b3IgIT0gbnVsbCkgewotICAgICAgTG9n
LmQoVEFHLCAicGF1c2UiKTsKLSAgICAgIGV4ZWN1dG9yLnNodXRkb3duTm93KCk7Ci0gICAgICBl
eGVjdXRvciA9IG51bGw7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVzdW1lKCkgewot
ICAgIExvZy5kKFRBRywgInJlc3VtZSIpOwotICAgIHJlc2V0U3RhdCgpOwotICAgIHNjaGVkdWxl
Q3B1VXRpbGl6YXRpb25UYXNrKCk7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQg
cmVzZXQoKSB7Ci0gICAgaWYgKGV4ZWN1dG9yICE9IG51bGwpIHsKLSAgICAgIExvZy5kKFRBRywg
InJlc2V0Iik7Ci0gICAgICByZXNldFN0YXQoKTsKLSAgICAgIGNwdU92ZXJ1c2UgPSBmYWxzZTsK
LSAgICB9Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIGludCBnZXRDcHVVc2FnZUN1cnJl
bnQoKSB7Ci0gICAgcmV0dXJuIGRvdWJsZVRvUGVyY2VudCh1c2VyQ3B1VXNhZ2UuZ2V0Q3VycmVu
dCgpICsgc3lzdGVtQ3B1VXNhZ2UuZ2V0Q3VycmVudCgpKTsKLSAgfQotCi0gIHB1YmxpYyBzeW5j
aHJvbml6ZWQgaW50IGdldENwdVVzYWdlQXZlcmFnZSgpIHsKLSAgICByZXR1cm4gZG91YmxlVG9Q
ZXJjZW50KHVzZXJDcHVVc2FnZS5nZXRBdmVyYWdlKCkgKyBzeXN0ZW1DcHVVc2FnZS5nZXRBdmVy
YWdlKCkpOwotICB9Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgZ2V0RnJlcXVlbmN5U2Nh
bGVBdmVyYWdlKCkgewotICAgIHJldHVybiBkb3VibGVUb1BlcmNlbnQoZnJlcXVlbmN5U2NhbGUu
Z2V0QXZlcmFnZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzY2hlZHVsZUNwdVV0aWxpemF0
aW9uVGFzaygpIHsKLSAgICBpZiAoZXhlY3V0b3IgIT0gbnVsbCkgewotICAgICAgZXhlY3V0b3Iu
c2h1dGRvd25Ob3coKTsKLSAgICAgIGV4ZWN1dG9yID0gbnVsbDsKLSAgICB9Ci0KLSAgICBleGVj
dXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRTY2hlZHVsZWRFeGVjdXRvcigpOwotICAg
IGV4ZWN1dG9yLnNjaGVkdWxlQXRGaXhlZFJhdGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNwdVV0aWxpemF0aW9u
VGFzaygpOwotICAgICAgfQotICAgIH0sIDAsIENQVV9TVEFUX1NBTVBMRV9QRVJJT0RfTVMsIFRp
bWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY3B1VXRpbGl6YXRp
b25UYXNrKCkgewotICAgIGJvb2xlYW4gY3B1TW9uaXRvckF2YWlsYWJsZSA9IHNhbXBsZUNwdVV0
aWxpemF0aW9uKCk7Ci0gICAgaWYgKGNwdU1vbml0b3JBdmFpbGFibGUKLSAgICAgICAgJiYgU3lz
dGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCkgLSBsYXN0U3RhdExvZ1RpbWVNcyA+PSBDUFVfU1RB
VF9MT0dfUEVSSU9EX01TKSB7Ci0gICAgICBsYXN0U3RhdExvZ1RpbWVNcyA9IFN5c3RlbUNsb2Nr
LmVsYXBzZWRSZWFsdGltZSgpOwotICAgICAgU3RyaW5nIHN0YXRTdHJpbmcgPSBnZXRTdGF0U3Ry
aW5nKCk7Ci0gICAgICBMb2cuZChUQUcsIHN0YXRTdHJpbmcpOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBpbml0KCkgewotICAgIHRyeSB7Ci0gICAgICBGaWxlUmVhZGVyIGZpbiA9IG5l
dyBGaWxlUmVhZGVyKCIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9wcmVzZW50Iik7Ci0gICAgICB0
cnkgewotICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIo
ZmluKTsKLSAgICAgICAgU2Nhbm5lciBzY2FubmVyID0gbmV3IFNjYW5uZXIocmVhZGVyKS51c2VE
ZWxpbWl0ZXIoIlstXG5dIik7Ci0gICAgICAgIHNjYW5uZXIubmV4dEludCgpOyAvLyBTa2lwIGxl
YWRpbmcgbnVtYmVyIDAuCi0gICAgICAgIGNwdXNQcmVzZW50ID0gMSArIHNjYW5uZXIubmV4dElu
dCgpOwotICAgICAgICBzY2FubmVyLmNsb3NlKCk7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24g
ZSkgewotICAgICAgICBMb2cuZShUQUcsICJDYW5ub3QgZG8gQ1BVIHN0YXRzIGR1ZSB0byAvc3lz
L2RldmljZXMvc3lzdGVtL2NwdS9wcmVzZW50IHBhcnNpbmcgcHJvYmxlbSIpOwotICAgICAgfSBm
aW5hbGx5IHsKLSAgICAgICAgZmluLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRmls
ZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBkbyBDUFUg
c3RhdHMgc2luY2UgL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvcHJlc2VudCBpcyBtaXNzaW5nIik7
Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgTG9nLmUoVEFHLCAiRXJyb3Ig
Y2xvc2luZyBmaWxlIik7Ci0gICAgfQotCi0gICAgY3B1RnJlcU1heCA9IG5ldyBsb25nW2NwdXNQ
cmVzZW50XTsKLSAgICBtYXhQYXRoID0gbmV3IFN0cmluZ1tjcHVzUHJlc2VudF07Ci0gICAgY3Vy
UGF0aCA9IG5ldyBTdHJpbmdbY3B1c1ByZXNlbnRdOwotICAgIGN1ckZyZXFTY2FsZXMgPSBuZXcg
ZG91YmxlW2NwdXNQcmVzZW50XTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNwdXNQcmVzZW50
OyBpKyspIHsKLSAgICAgIGNwdUZyZXFNYXhbaV0gPSAwOyAvLyBGcmVxdWVuY3kgIm5vdCB5ZXQg
ZGV0ZXJtaW5lZCIuCi0gICAgICBjdXJGcmVxU2NhbGVzW2ldID0gMDsKLSAgICAgIG1heFBhdGhb
aV0gPSAiL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1IiArIGkgKyAiL2NwdWZyZXEvY3B1aW5m
b19tYXhfZnJlcSI7Ci0gICAgICBjdXJQYXRoW2ldID0gIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1
L2NwdSIgKyBpICsgIi9jcHVmcmVxL3NjYWxpbmdfY3VyX2ZyZXEiOwotICAgIH0KLQotICAgIGxh
c3RQcm9jU3RhdCA9IG5ldyBQcm9jU3RhdCgwLCAwLCAwKTsKLSAgICByZXNldFN0YXQoKTsKLQot
ICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgc3luY2hyb25pemVkIHZv
aWQgcmVzZXRTdGF0KCkgewotICAgIHVzZXJDcHVVc2FnZS5yZXNldCgpOwotICAgIHN5c3RlbUNw
dVVzYWdlLnJlc2V0KCk7Ci0gICAgdG90YWxDcHVVc2FnZS5yZXNldCgpOwotICAgIGZyZXF1ZW5j
eVNjYWxlLnJlc2V0KCk7Ci0gICAgbGFzdFN0YXRMb2dUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFw
c2VkUmVhbHRpbWUoKTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGdldEJhdHRlcnlMZXZlbCgpIHsK
LSAgICAvLyBVc2Ugc3RpY2t5IGJyb2FkY2FzdCB3aXRoIG51bGwgcmVjZWl2ZXIgdG8gcmVhZCBi
YXR0ZXJ5IGxldmVsIG9uY2Ugb25seS4KLSAgICBJbnRlbnQgaW50ZW50ID0gYXBwQ29udGV4dC5y
ZWdpc3RlclJlY2VpdmVyKAotICAgICAgICBudWxsIC8qIHJlY2VpdmVyICovLCBuZXcgSW50ZW50
RmlsdGVyKEludGVudC5BQ1RJT05fQkFUVEVSWV9DSEFOR0VEKSk7Ci0KLSAgICBpbnQgYmF0dGVy
eUxldmVsID0gMDsKLSAgICBpbnQgYmF0dGVyeVNjYWxlID0gaW50ZW50LmdldEludEV4dHJhKEJh
dHRlcnlNYW5hZ2VyLkVYVFJBX1NDQUxFLCAxMDApOwotICAgIGlmIChiYXR0ZXJ5U2NhbGUgPiAw
KSB7Ci0gICAgICBiYXR0ZXJ5TGV2ZWwgPQotICAgICAgICAgIChpbnQpICgxMDBmICogaW50ZW50
LmdldEludEV4dHJhKEJhdHRlcnlNYW5hZ2VyLkVYVFJBX0xFVkVMLCAwKSAvIGJhdHRlcnlTY2Fs
ZSk7Ci0gICAgfQotICAgIHJldHVybiBiYXR0ZXJ5TGV2ZWw7Ci0gIH0KLQotICAvKioKLSAgICog
UmUtbWVhc3VyZSBDUFUgdXNlLiAgQ2FsbCB0aGlzIG1ldGhvZCBhdCBhbiBpbnRlcnZhbCBvZiBh
cm91bmQgMS9zLgotICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRydWUgb24gc3VjY2Vzcy4gIFRo
ZSBmaWVsZHMKLSAgICogY3B1Q3VycmVudCwgY3B1QXZnMywgYW5kIGNwdUF2Z0FsbCBhcmUgdXBk
YXRlZCBvbiBzdWNjZXNzLCBhbmQgcmVwcmVzZW50czoKLSAgICogY3B1Q3VycmVudDogVGhlIENQ
VSB1c2Ugc2luY2UgdGhlIGxhc3Qgc2FtcGxlQ3B1VXRpbGl6YXRpb24gY2FsbC4KLSAgICogY3B1
QXZnMzogVGhlIGF2ZXJhZ2UgQ1BVIG92ZXIgdGhlIGxhc3QgMyBjYWxscy4KLSAgICogY3B1QXZn
QWxsOiBUaGUgYXZlcmFnZSBDUFUgb3ZlciB0aGUgbGFzdCBTQU1QTEVfU0FWRV9OVU1CRVIgY2Fs
bHMuCi0gICAqLwotICBwcml2YXRlIHN5bmNocm9uaXplZCBib29sZWFuIHNhbXBsZUNwdVV0aWxp
emF0aW9uKCkgewotICAgIGxvbmcgbGFzdFNlZW5NYXhGcmVxID0gMDsKLSAgICBsb25nIGNwdUZy
ZXFDdXJTdW0gPSAwOwotICAgIGxvbmcgY3B1RnJlcU1heFN1bSA9IDA7Ci0KLSAgICBpZiAoIWlu
aXRpYWxpemVkKSB7Ci0gICAgICBpbml0KCk7Ci0gICAgfQotICAgIGlmIChjcHVzUHJlc2VudCA9
PSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYWN0dWFsQ3B1c1ByZXNl
bnQgPSAwOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3B1c1ByZXNlbnQ7IGkrKykgewotICAg
ICAgLyoKLSAgICAgICAqIEZvciBlYWNoIENQVSwgYXR0ZW1wdCB0byBmaXJzdCByZWFkIGl0cyBt
YXggZnJlcXVlbmN5LCB0aGVuIGl0cwotICAgICAgICogY3VycmVudCBmcmVxdWVuY3kuICBPbmNl
IGFzIHRoZSBtYXggZnJlcXVlbmN5IGZvciBhIENQVSBpcyBmb3VuZCwKLSAgICAgICAqIHNhdmUg
aXQgaW4gY3B1RnJlcU1heFtdLgotICAgICAgICovCi0KLSAgICAgIGN1ckZyZXFTY2FsZXNbaV0g
PSAwOwotICAgICAgaWYgKGNwdUZyZXFNYXhbaV0gPT0gMCkgewotICAgICAgICAvLyBXZSBoYXZl
IG5ldmVyIGZvdW5kIHRoaXMgQ1BVJ3MgbWF4IGZyZXF1ZW5jeS4gIEF0dGVtcHQgdG8gcmVhZCBp
dC4KLSAgICAgICAgbG9uZyBjcHVmcmVxTWF4ID0gcmVhZEZyZXFGcm9tRmlsZShtYXhQYXRoW2ld
KTsKLSAgICAgICAgaWYgKGNwdWZyZXFNYXggPiAwKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAi
Q29yZSAiICsgaSArICIuIE1heCBmcmVxdWVuY3k6ICIgKyBjcHVmcmVxTWF4KTsKLSAgICAgICAg
ICBsYXN0U2Vlbk1heEZyZXEgPSBjcHVmcmVxTWF4OwotICAgICAgICAgIGNwdUZyZXFNYXhbaV0g
PSBjcHVmcmVxTWF4OwotICAgICAgICAgIG1heFBhdGhbaV0gPSBudWxsOyAvLyBLaWxsIHBhdGgg
dG8gZnJlZSBpdHMgbWVtb3J5LgotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBs
YXN0U2Vlbk1heEZyZXEgPSBjcHVGcmVxTWF4W2ldOyAvLyBBIHZhbGlkLCBwcmV2aW91c2x5IHJl
YWQgdmFsdWUuCi0gICAgICB9Ci0KLSAgICAgIGxvbmcgY3B1RnJlcUN1ciA9IHJlYWRGcmVxRnJv
bUZpbGUoY3VyUGF0aFtpXSk7Ci0gICAgICBpZiAoY3B1RnJlcUN1ciA9PSAwICYmIGxhc3RTZWVu
TWF4RnJlcSA9PSAwKSB7Ci0gICAgICAgIC8vIE5vIGN1cnJlbnQgZnJlcXVlbmN5IGluZm9ybWF0
aW9uIGZvciB0aGlzIENQVSBjb3JlIC0gaWdub3JlIGl0LgotICAgICAgICBjb250aW51ZTsKLSAg
ICAgIH0KLSAgICAgIGlmIChjcHVGcmVxQ3VyID4gMCkgewotICAgICAgICBhY3R1YWxDcHVzUHJl
c2VudCsrOwotICAgICAgfQotICAgICAgY3B1RnJlcUN1clN1bSArPSBjcHVGcmVxQ3VyOwotCi0g
ICAgICAvKiBIZXJlLCBsYXN0U2Vlbk1heEZyZXEgbWlnaHQgY29tZSBmcm9tCi0gICAgICAgKiAx
LiBjcHVGcmVxW2ldLCBvcgotICAgICAgICogMi4gYSBwcmV2aW91cyBpdGVyYXRpb24sIG9yCi0g
ICAgICAgKiAzLiBhIG5ld2x5IHJlYWQgdmFsdWUsIG9yCi0gICAgICAgKiA0LiBoeXBvdGhldGlj
YWxseSBmcm9tIHRoZSBwcmUtbG9vcCBkdW1teS4KLSAgICAgICAqLwotICAgICAgY3B1RnJlcU1h
eFN1bSArPSBsYXN0U2Vlbk1heEZyZXE7Ci0gICAgICBpZiAobGFzdFNlZW5NYXhGcmVxID4gMCkg
ewotICAgICAgICBjdXJGcmVxU2NhbGVzW2ldID0gKGRvdWJsZSkgY3B1RnJlcUN1ciAvIGxhc3RT
ZWVuTWF4RnJlcTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY3B1RnJlcUN1clN1bSA9PSAw
IHx8IGNwdUZyZXFNYXhTdW0gPT0gMCkgewotICAgICAgTG9nLmUoVEFHLCAiQ291bGQgbm90IHJl
YWQgbWF4IG9yIGN1cnJlbnQgZnJlcXVlbmN5IGZvciBhbnkgQ1BVIik7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBTaW5jZSB0aGUgY3ljbGUgY291bnRzIGFy
ZSBmb3IgdGhlIHBlcmlvZCBiZXR3ZWVuIHRoZSBsYXN0IGludm9jYXRpb24KLSAgICAgKiBhbmQg
dGhpcyBwcmVzZW50IG9uZSwgd2UgYXZlcmFnZSB0aGUgcGVyY2VudHVhbCBDUFUgZnJlcXVlbmNp
ZXMgYmV0d2VlbgotICAgICAqIG5vdyBhbmQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWVhc3VyZW1l
bnQgcGVyaW9kLiAgVGhpcyBpcyBzaWduaWZpY2FudGx5Ci0gICAgICogaW5jb3JyZWN0IG9ubHkg
aWYgdGhlIGZyZXF1ZW5jaWVzIGhhdmUgcGVla2VkIG9yIGRyb3BwZWQgaW4gYmV0d2VlbiB0aGUK
LSAgICAgKiBpbnZvY2F0aW9ucy4KLSAgICAgKi8KLSAgICBkb3VibGUgY3VycmVudEZyZXF1ZW5j
eVNjYWxlID0gY3B1RnJlcUN1clN1bSAvIChkb3VibGUpIGNwdUZyZXFNYXhTdW07Ci0gICAgaWYg
KGZyZXF1ZW5jeVNjYWxlLmdldEN1cnJlbnQoKSA+IDApIHsKLSAgICAgIGN1cnJlbnRGcmVxdWVu
Y3lTY2FsZSA9IChmcmVxdWVuY3lTY2FsZS5nZXRDdXJyZW50KCkgKyBjdXJyZW50RnJlcXVlbmN5
U2NhbGUpICogMC41OwotICAgIH0KLQotICAgIFByb2NTdGF0IHByb2NTdGF0ID0gcmVhZFByb2NT
dGF0KCk7Ci0gICAgaWYgKHByb2NTdGF0ID09IG51bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBsb25nIGRpZmZVc2VyVGltZSA9IHByb2NTdGF0LnVzZXJUaW1lIC0gbGFz
dFByb2NTdGF0LnVzZXJUaW1lOwotICAgIGxvbmcgZGlmZlN5c3RlbVRpbWUgPSBwcm9jU3RhdC5z
eXN0ZW1UaW1lIC0gbGFzdFByb2NTdGF0LnN5c3RlbVRpbWU7Ci0gICAgbG9uZyBkaWZmSWRsZVRp
bWUgPSBwcm9jU3RhdC5pZGxlVGltZSAtIGxhc3RQcm9jU3RhdC5pZGxlVGltZTsKLSAgICBsb25n
IGFsbFRpbWUgPSBkaWZmVXNlclRpbWUgKyBkaWZmU3lzdGVtVGltZSArIGRpZmZJZGxlVGltZTsK
LQotICAgIGlmIChjdXJyZW50RnJlcXVlbmN5U2NhbGUgPT0gMCB8fCBhbGxUaW1lID09IDApIHsK
LSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBVcGRhdGUgc3RhdGlzdGljcy4K
LSAgICBmcmVxdWVuY3lTY2FsZS5hZGRWYWx1ZShjdXJyZW50RnJlcXVlbmN5U2NhbGUpOwotCi0g
ICAgZG91YmxlIGN1cnJlbnRVc2VyQ3B1VXNhZ2UgPSBkaWZmVXNlclRpbWUgLyAoZG91YmxlKSBh
bGxUaW1lOwotICAgIHVzZXJDcHVVc2FnZS5hZGRWYWx1ZShjdXJyZW50VXNlckNwdVVzYWdlKTsK
LQotICAgIGRvdWJsZSBjdXJyZW50U3lzdGVtQ3B1VXNhZ2UgPSBkaWZmU3lzdGVtVGltZSAvIChk
b3VibGUpIGFsbFRpbWU7Ci0gICAgc3lzdGVtQ3B1VXNhZ2UuYWRkVmFsdWUoY3VycmVudFN5c3Rl
bUNwdVVzYWdlKTsKLQotICAgIGRvdWJsZSBjdXJyZW50VG90YWxDcHVVc2FnZSA9Ci0gICAgICAg
IChjdXJyZW50VXNlckNwdVVzYWdlICsgY3VycmVudFN5c3RlbUNwdVVzYWdlKSAqIGN1cnJlbnRG
cmVxdWVuY3lTY2FsZTsKLSAgICB0b3RhbENwdVVzYWdlLmFkZFZhbHVlKGN1cnJlbnRUb3RhbENw
dVVzYWdlKTsKLQotICAgIC8vIFNhdmUgbmV3IG1lYXN1cmVtZW50cyBmb3IgbmV4dCByb3VuZCdz
IGRlbHRhcy4KLSAgICBsYXN0UHJvY1N0YXQgPSBwcm9jU3RhdDsKLQotICAgIHJldHVybiB0cnVl
OwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZG91YmxlVG9QZXJjZW50KGRvdWJsZSBkKSB7Ci0gICAg
cmV0dXJuIChpbnQpIChkICogMTAwICsgMC41KTsKLSAgfQotCi0gIHByaXZhdGUgc3luY2hyb25p
emVkIFN0cmluZyBnZXRTdGF0U3RyaW5nKCkgewotICAgIFN0cmluZ0J1aWxkZXIgc3RhdCA9IG5l
dyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgc3RhdC5hcHBlbmQoIkNQVSBVc2VyOiAiKQotICAgICAg
ICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudCh1c2VyQ3B1VXNhZ2UuZ2V0Q3VycmVudCgpKSkKLSAg
ICAgICAgLmFwcGVuZCgiLyIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KHVzZXJD
cHVVc2FnZS5nZXRBdmVyYWdlKCkpKQotICAgICAgICAuYXBwZW5kKCIuIFN5c3RlbTogIikKLSAg
ICAgICAgLmFwcGVuZChkb3VibGVUb1BlcmNlbnQoc3lzdGVtQ3B1VXNhZ2UuZ2V0Q3VycmVudCgp
KSkKLSAgICAgICAgLmFwcGVuZCgiLyIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50
KHN5c3RlbUNwdVVzYWdlLmdldEF2ZXJhZ2UoKSkpCi0gICAgICAgIC5hcHBlbmQoIi4gRnJlcTog
IikKLSAgICAgICAgLmFwcGVuZChkb3VibGVUb1BlcmNlbnQoZnJlcXVlbmN5U2NhbGUuZ2V0Q3Vy
cmVudCgpKSkKLSAgICAgICAgLmFwcGVuZCgiLyIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9Q
ZXJjZW50KGZyZXF1ZW5jeVNjYWxlLmdldEF2ZXJhZ2UoKSkpCi0gICAgICAgIC5hcHBlbmQoIi4g
VG90YWwgdXNhZ2U6ICIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KHRvdGFsQ3B1
VXNhZ2UuZ2V0Q3VycmVudCgpKSkKLSAgICAgICAgLmFwcGVuZCgiLyIpCi0gICAgICAgIC5hcHBl
bmQoZG91YmxlVG9QZXJjZW50KHRvdGFsQ3B1VXNhZ2UuZ2V0QXZlcmFnZSgpKSkKLSAgICAgICAg
LmFwcGVuZCgiLiBDb3JlczogIikKLSAgICAgICAgLmFwcGVuZChhY3R1YWxDcHVzUHJlc2VudCk7
Ci0gICAgc3RhdC5hcHBlbmQoIiggIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcHVzUHJl
c2VudDsgaSsrKSB7Ci0gICAgICBzdGF0LmFwcGVuZChkb3VibGVUb1BlcmNlbnQoY3VyRnJlcVNj
YWxlc1tpXSkpLmFwcGVuZCgiICIpOwotICAgIH0KLSAgICBzdGF0LmFwcGVuZCgiKS4gQmF0dGVy
eTogIikuYXBwZW5kKGdldEJhdHRlcnlMZXZlbCgpKTsKLSAgICBpZiAoY3B1T3ZlcnVzZSkgewot
ICAgICAgc3RhdC5hcHBlbmQoIi4gT3ZlcnVzZS4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIHN0YXQu
dG9TdHJpbmcoKTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWFkIGEgc2luZ2xlIGludGVnZXIgdmFs
dWUgZnJvbSB0aGUgbmFtZWQgZmlsZS4gIFJldHVybiB0aGUgcmVhZCB2YWx1ZQotICAgKiBvciBp
ZiBhbiBlcnJvciBvY2N1cnMgcmV0dXJuIDAuCi0gICAqLwotICBwcml2YXRlIGxvbmcgcmVhZEZy
ZXFGcm9tRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLSAgICBsb25nIG51bWJlciA9IDA7Ci0gICAg
dHJ5IHsKLSAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihu
ZXcgRmlsZVJlYWRlcihmaWxlTmFtZSkpOwotICAgICAgdHJ5IHsKLSAgICAgICAgU3RyaW5nIGxp
bmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgICAgbnVtYmVyID0gcGFyc2VMb25nKGxpbmUp
OwotICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICB9Ci0g
ICAgfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIENQVSBjb3Jl
IGlzIG9mZiwgc28gZmlsZSB3aXRoIGl0cyBzY2FsaW5nIGZyZXF1ZW5jeSAuLi4vY3B1ZnJlcS9z
Y2FsaW5nX2N1cl9mcmVxCi0gICAgICAvLyBpcyBub3QgcHJlc2VudC4gVGhpcyBpcyBub3QgYW4g
ZXJyb3IuCi0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgLy8gQ1BVIGNvcmUg
aXMgb2ZmLCBzbyBmaWxlIHdpdGggaXRzIHNjYWxpbmcgZnJlcXVlbmN5IC4uLi9jcHVmcmVxL3Nj
YWxpbmdfY3VyX2ZyZXEKLSAgICAgIC8vIGlzIGVtcHR5LiBUaGlzIGlzIG5vdCBhbiBlcnJvci4K
LSAgICB9Ci0gICAgcmV0dXJuIG51bWJlcjsKLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGxvbmcg
cGFyc2VMb25nKFN0cmluZyB2YWx1ZSkgewotICAgIGxvbmcgbnVtYmVyID0gMDsKLSAgICB0cnkg
ewotICAgICAgbnVtYmVyID0gTG9uZy5wYXJzZUxvbmcodmFsdWUpOwotICAgIH0gY2F0Y2ggKE51
bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2cuZShUQUcsICJwYXJzZUxvbmcgZXJy
b3IuIiwgZSk7Ci0gICAgfQotICAgIHJldHVybiBudW1iZXI7Ci0gIH0KLQotICAvKgotICAgKiBS
ZWFkIHRoZSBjdXJyZW50IHV0aWxpemF0aW9uIG9mIGFsbCBDUFVzIHVzaW5nIHRoZSBjdW11bGF0
aXZlIGZpcnN0IGxpbmUKLSAgICogb2YgL3Byb2Mvc3RhdC4KLSAgICovCi0gIHByaXZhdGUgUHJv
Y1N0YXQgcmVhZFByb2NTdGF0KCkgewotICAgIGxvbmcgdXNlclRpbWUgPSAwOwotICAgIGxvbmcg
c3lzdGVtVGltZSA9IDA7Ci0gICAgbG9uZyBpZGxlVGltZSA9IDA7Ci0gICAgdHJ5IHsKLSAgICAg
IEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRl
cigiL3Byb2Mvc3RhdCIpKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIC8vIGxpbmUgc2hvdWxkIGNv
bnRhaW4gc29tZXRoaW5nIGxpa2UgdGhpczoKLSAgICAgICAgLy8gY3B1ICA1MDkzODE4IDI3MTgz
OCAzNTEyODMwIDE2NTkzNDExOSAxMDEzNzQgNDQ3MDc2IDI3MjA4NiAwIDAgMAotICAgICAgICAv
LyAgICAgICB1c2VyICAgIG5pY2UgIHN5c3RlbSAgICAgaWRsZSAgIGlvd2FpdCAgaXJxICAgc29m
dGlycQotICAgICAgICBTdHJpbmcgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgICBT
dHJpbmcgbGluZXNbXSA9IGxpbmUuc3BsaXQoIlxccysiKTsKLSAgICAgICAgaW50IGxlbmd0aCA9
IGxpbmVzLmxlbmd0aDsKLSAgICAgICAgaWYgKGxlbmd0aCA+PSA1KSB7Ci0gICAgICAgICAgdXNl
clRpbWUgPSBwYXJzZUxvbmcobGluZXNbMV0pOyAvLyB1c2VyCi0gICAgICAgICAgdXNlclRpbWUg
Kz0gcGFyc2VMb25nKGxpbmVzWzJdKTsgLy8gbmljZQotICAgICAgICAgIHN5c3RlbVRpbWUgPSBw
YXJzZUxvbmcobGluZXNbM10pOyAvLyBzeXN0ZW0KLSAgICAgICAgICBpZGxlVGltZSA9IHBhcnNl
TG9uZyhsaW5lc1s0XSk7IC8vIGlkbGUKLSAgICAgICAgfQotICAgICAgICBpZiAobGVuZ3RoID49
IDgpIHsKLSAgICAgICAgICB1c2VyVGltZSArPSBwYXJzZUxvbmcobGluZXNbNV0pOyAvLyBpb3dh
aXQKLSAgICAgICAgICBzeXN0ZW1UaW1lICs9IHBhcnNlTG9uZyhsaW5lc1s2XSk7IC8vIGlycQot
ICAgICAgICAgIHN5c3RlbVRpbWUgKz0gcGFyc2VMb25nKGxpbmVzWzddKTsgLy8gc29mdGlycQot
ICAgICAgICB9Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShU
QUcsICJQcm9ibGVtcyBwYXJzaW5nIC9wcm9jL3N0YXQiLCBlKTsKLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICAgIH0K
LSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgTG9nLmUoVEFH
LCAiQ2Fubm90IG9wZW4gL3Byb2Mvc3RhdCBmb3IgcmVhZGluZyIsIGUpOwotICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgTG9nLmUoVEFHLCAi
UHJvYmxlbXMgcmVhZGluZyAvcHJvYy9zdGF0IiwgZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG5ldyBQcm9jU3RhdCh1c2VyVGltZSwgc3lzdGVtVGltZSwgaWRsZVRp
bWUpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvRGlyZWN0UlRD
Q2xpZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Rp
cmVjdFJUQ0NsaWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvRGlyZWN0UlRDQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDcg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5
OwotaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmpzb24uSlNPTk9i
amVjdDsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRj
LlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwot
Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9y
czsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVn
ZXguUGF0dGVybjsKLQotLyoqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiBBcHBSVENDbGllbnQgdGhh
dCB1c2VzIGRpcmVjdCBUQ1AgY29ubmVjdGlvbiBhcyB0aGUgc2lnbmFsaW5nIGNoYW5uZWwuCi0g
KiBUaGlzIGVsaW1pbmF0ZXMgdGhlIG5lZWQgZm9yIGFuIGV4dGVybmFsIHNlcnZlci4gVGhpcyBj
bGFzcyBkb2VzIG5vdCBzdXBwb3J0IGxvb3BiYWNrCi0gKiBjb25uZWN0aW9ucy4KLSAqLwotcHVi
bGljIGNsYXNzIERpcmVjdFJUQ0NsaWVudCBpbXBsZW1lbnRzIEFwcFJUQ0NsaWVudCwgVENQQ2hh
bm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIFRBRyA9ICJEaXJlY3RSVENDbGllbnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
REVGQVVMVF9QT1JUID0gODg4ODsKLQotICAvLyBSZWdleCBwYXR0ZXJuIHVzZWQgZm9yIGNoZWNr
aW5nIGlmIHJvb20gaWQgbG9va3MgbGlrZSBhbiBJUC4KLSAgc3RhdGljIGZpbmFsIFBhdHRlcm4g
SVBfUEFUVEVSTiA9IFBhdHRlcm4uY29tcGlsZSgiKCIKLSAgICAgIC8vIElQdjQKLSAgICAgICsg
IigoXFxkK1xcLil7M31cXGQrKXwiCi0gICAgICAvLyBJUHY2Ci0gICAgICArICJcXFsoKChbMC05
YS1mQS1GXXsxLDR9OikqWzAtOWEtZkEtRl17MSw0fSk/OjoiCi0gICAgICArICIoKFswLTlhLWZB
LUZdezEsNH06KSpbMC05YS1mQS1GXXsxLDR9KT8pXFxdfCIKLSAgICAgICsgIlxcWygoWzAtOWEt
ZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fSlcXF18IgotICAgICAgLy8gSVB2NiB3aXRo
b3V0IFtdCi0gICAgICArICIoKChbMC05YS1mQS1GXXsxLDR9OikqWzAtOWEtZkEtRl17MSw0fSk/
OjooKFswLTlhLWZBLUZdezEsNH06KSpbMC05YS1mQS1GXXsxLDR9KT8pfCIKLSAgICAgICsgIigo
WzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fSl8IgotICAgICAgLy8gTGl0ZXJh
bHMKLSAgICAgICsgImxvY2FsaG9zdCIKLSAgICAgICsgIikiCi0gICAgICAvLyBPcHRpb25hbCBw
b3J0IG51bWJlcgotICAgICAgKyAiKDooXFxkKykpPyIpOwotCi0gIHByaXZhdGUgZmluYWwgRXhl
Y3V0b3JTZXJ2aWNlIGV4ZWN1dG9yOwotICBwcml2YXRlIGZpbmFsIFNpZ25hbGluZ0V2ZW50cyBl
dmVudHM7Ci0gIHByaXZhdGUgVENQQ2hhbm5lbENsaWVudCB0Y3BDbGllbnQ7Ci0gIHByaXZhdGUg
Um9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotCi0gIHByaXZh
dGUgZW51bSBDb25uZWN0aW9uU3RhdGUgeyBORVcsIENPTk5FQ1RFRCwgQ0xPU0VELCBFUlJPUiB9
Ci0KLSAgLy8gQWxsIGFsdGVyYXRpb25zIG9mIHRoZSByb29tIHN0YXRlIHNob3VsZCBiZSBkb25l
IGZyb20gaW5zaWRlIHRoZSBsb29wZXIgdGhyZWFkLgotICBwcml2YXRlIENvbm5lY3Rpb25TdGF0
ZSByb29tU3RhdGU7Ci0KLSAgcHVibGljIERpcmVjdFJUQ0NsaWVudChTaWduYWxpbmdFdmVudHMg
ZXZlbnRzKSB7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0KLSAgICBleGVjdXRvciA9IEV4
ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpOwotICAgIHJvb21TdGF0ZSA9IENvbm5l
Y3Rpb25TdGF0ZS5ORVc7Ci0gIH0KLQotICAvKioKLSAgICogQ29ubmVjdHMgdG8gdGhlIHJvb20s
IHJvb21JZCBpbiBjb25uZWN0aW9uc1BhcmFtZXRlcnMgaXMgcmVxdWlyZWQuIHJvb21JZCBtdXN0
IGJlIGEgdmFsaWQKLSAgICogSVAgYWRkcmVzcyBtYXRjaGluZyBJUF9QQVRURVJOLgotICAgKi8K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGNvbm5lY3RUb1Jvb20oUm9vbUNvbm5lY3Rpb25Q
YXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJzKSB7Ci0gICAgdGhpcy5jb25uZWN0aW9uUGFy
YW1ldGVycyA9IGNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotCi0gICAgaWYgKGNvbm5lY3Rpb25QYXJh
bWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICByZXBvcnRFcnJvcigiTG9vcGJhY2sgY29ubmVjdGlv
bnMgYXJlbid0IHN1cHBvcnRlZCBieSBEaXJlY3RSVENDbGllbnQuIik7Ci0gICAgfQotCi0gICAg
ZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY29ubmVjdFRvUm9vbUludGVybmFsKCk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgZGlzY29u
bmVjdEZyb21Sb29tKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGRpc2Nv
bm5lY3RGcm9tUm9vbUludGVybmFsKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKioK
LSAgICogQ29ubmVjdHMgdG8gdGhlIHJvb20uCi0gICAqCi0gICAqIFJ1bnMgb24gdGhlIGxvb3Bl
ciB0aHJlYWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgY29ubmVjdFRvUm9vbUludGVybmFsKCkg
ewotICAgIHRoaXMucm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLk5FVzsKLQotICAgIFN0cmlu
ZyBlbmRwb2ludCA9IGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21JZDsKLQotICAgIE1hdGNoZXIg
bWF0Y2hlciA9IElQX1BBVFRFUk4ubWF0Y2hlcihlbmRwb2ludCk7Ci0gICAgaWYgKCFtYXRjaGVy
Lm1hdGNoZXMoKSkgewotICAgICAgcmVwb3J0RXJyb3IoInJvb21JZCBtdXN0IG1hdGNoIElQX1BB
VFRFUk4gZm9yIERpcmVjdFJUQ0NsaWVudC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBTdHJpbmcgaXAgPSBtYXRjaGVyLmdyb3VwKDEpOwotICAgIFN0cmluZyBwb3J0U3RyID0gbWF0
Y2hlci5ncm91cChtYXRjaGVyLmdyb3VwQ291bnQoKSk7Ci0gICAgaW50IHBvcnQ7Ci0KLSAgICBp
ZiAocG9ydFN0ciAhPSBudWxsKSB7Ci0gICAgICB0cnkgewotICAgICAgICBwb3J0ID0gSW50ZWdl
ci5wYXJzZUludChwb3J0U3RyKTsKLSAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlv
biBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJJbnZhbGlkIHBvcnQgbnVtYmVyOiAiICsgcG9y
dFN0cik7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgcG9y
dCA9IERFRkFVTFRfUE9SVDsKLSAgICB9Ci0KLSAgICB0Y3BDbGllbnQgPSBuZXcgVENQQ2hhbm5l
bENsaWVudChleGVjdXRvciwgdGhpcywgaXAsIHBvcnQpOwotICB9Ci0KLSAgLyoqCi0gICAqIERp
c2Nvbm5lY3RzIGZyb20gdGhlIHJvb20uCi0gICAqCi0gICAqIFJ1bnMgb24gdGhlIGxvb3BlciB0
aHJlYWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgZGlzY29ubmVjdEZyb21Sb29tSW50ZXJuYWwo
KSB7Ci0gICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkNMT1NFRDsKLQotICAgIGlmICh0
Y3BDbGllbnQgIT0gbnVsbCkgewotICAgICAgdGNwQ2xpZW50LmRpc2Nvbm5lY3QoKTsKLSAgICAg
IHRjcENsaWVudCA9IG51bGw7Ci0gICAgfQotICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZE9mZmVyU2RwKGZpbmFsIFNlc3Npb25E
ZXNjcmlwdGlvbiBzZHApIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAo
cm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICByZXBv
cnRFcnJvcigiU2VuZGluZyBvZmZlciBTRFAgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3
IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1dChqc29uLCAic2RwIiwgc2RwLmRlc2NyaXB0
aW9uKTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlwZSIsICJvZmZlciIpOwotICAgICAgICBz
ZW5kTWVzc2FnZShqc29uLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRBbnN3ZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2Ny
aXB0aW9uIHNkcCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIEpTT05PYmpl
Y3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInNkcCIs
IHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAiYW5zd2Vy
Iik7Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAg
fSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlk
YXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBleGVjdXRvci5leGVjdXRl
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAg
ICBqc29uUHV0KGpzb24sICJ0eXBlIiwgImNhbmRpZGF0ZSIpOwotICAgICAgICBqc29uUHV0KGpz
b24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4KTsKLSAgICAgICAganNvblB1dChq
c29uLCAiaWQiLCBjYW5kaWRhdGUuc2RwTWlkKTsKLSAgICAgICAganNvblB1dChqc29uLCAiY2Fu
ZGlkYXRlIiwgY2FuZGlkYXRlLnNkcCk7Ci0KLSAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25u
ZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcg
SUNFIGNhbmRpZGF0ZSBpbiBub24gY29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBzZW5kTWVzc2FnZShqc29uLnRvU3RyaW5nKCkpOwotICAg
ICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqIFNlbmQgcmVtb3ZlZCBJY2UgY2FuZGlkYXRlcyB0
byB0aGUgb3RoZXIgcGFydGljaXBhbnQuICovCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBz
ZW5kTG9jYWxJY2VDYW5kaWRhdGVSZW1vdmFscyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRh
dGVzKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgSlNPTk9iamVjdCBqc29u
ID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlwZSIsICJyZW1v
dmUtY2FuZGlkYXRlcyIpOwotICAgICAgICBKU09OQXJyYXkganNvbkFycmF5ID0gbmV3IEpTT05B
cnJheSgpOwotICAgICAgICBmb3IgKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBjYW5k
aWRhdGVzKSB7Ci0gICAgICAgICAganNvbkFycmF5LnB1dCh0b0pzb25DYW5kaWRhdGUoY2FuZGlk
YXRlKSk7Ci0gICAgICAgIH0KLSAgICAgICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlcyIsIGpz
b25BcnJheSk7Ci0KLSAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuQ09O
TkVDVEVEKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcgSUNFIGNhbmRpZGF0ZSBy
ZW1vdmFscyBpbiBub24gY29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBzZW5kTWVzc2FnZShqc29uLnRvU3RyaW5nKCkpOwotICAgICAgfQot
ICAgIH0pOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBUQ1BDaGFubmVsQ2xpZW50IGV2
ZW50IGhhbmRsZXJzCi0KLSAgLyoqCi0gICAqIElmIHRoZSBjbGllbnQgaXMgdGhlIHNlcnZlciBz
aWRlLCB0aGlzIHdpbGwgdHJpZ2dlciBvbkNvbm5lY3RlZFRvUm9vbS4KLSAgICovCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBvblRDUENvbm5lY3RlZChib29sZWFuIGlzU2VydmVyKSB7Ci0g
ICAgaWYgKGlzU2VydmVyKSB7Ci0gICAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuQ09O
TkVDVEVEOwotCi0gICAgICBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBuZXcgU2ln
bmFsaW5nUGFyYW1ldGVycygKLSAgICAgICAgICAvLyBJY2Ugc2VydmVycyBhcmUgbm90IG5lZWRl
ZCBmb3IgZGlyZWN0IGNvbm5lY3Rpb25zLgotICAgICAgICAgIG5ldyBMaW5rZWRMaXN0PFBlZXJD
b25uZWN0aW9uLkljZVNlcnZlcj4oKSwKLSAgICAgICAgICBpc1NlcnZlciwgLy8gU2VydmVyIHNp
ZGUgYWN0cyBhcyB0aGUgaW5pdGlhdG9yIG9uIGRpcmVjdCBjb25uZWN0aW9ucy4KLSAgICAgICAg
ICBudWxsLCAvLyBjbGllbnRJZAotICAgICAgICAgIG51bGwsIC8vIHdzc1VybAotICAgICAgICAg
IG51bGwsIC8vIHd3c1Bvc3RVcmwKLSAgICAgICAgICBudWxsLCAvLyBvZmZlclNkcAotICAgICAg
ICAgIG51bGwgLy8gaWNlQ2FuZGlkYXRlcwotICAgICAgICAgICk7Ci0gICAgICBldmVudHMub25D
b25uZWN0ZWRUb1Jvb20ocGFyYW1ldGVycyk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIG9uVENQTWVzc2FnZShTdHJpbmcgbXNnKSB7Ci0gICAgdHJ5IHsKLSAgICAg
IEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KG1zZyk7Ci0gICAgICBTdHJpbmcgdHlw
ZSA9IGpzb24ub3B0U3RyaW5nKCJ0eXBlIik7Ci0gICAgICBpZiAodHlwZS5lcXVhbHMoImNhbmRp
ZGF0ZSIpKSB7Ci0gICAgICAgIGV2ZW50cy5vblJlbW90ZUljZUNhbmRpZGF0ZSh0b0phdmFDYW5k
aWRhdGUoanNvbikpOwotICAgICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygicmVtb3ZlLWNhbmRp
ZGF0ZXMiKSkgewotICAgICAgICBKU09OQXJyYXkgY2FuZGlkYXRlQXJyYXkgPSBqc29uLmdldEpT
T05BcnJheSgiY2FuZGlkYXRlcyIpOwotICAgICAgICBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVz
ID0gbmV3IEljZUNhbmRpZGF0ZVtjYW5kaWRhdGVBcnJheS5sZW5ndGgoKV07Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY2FuZGlkYXRlQXJyYXkubGVuZ3RoKCk7ICsraSkgewotICAgICAg
ICAgIGNhbmRpZGF0ZXNbaV0gPSB0b0phdmFDYW5kaWRhdGUoY2FuZGlkYXRlQXJyYXkuZ2V0SlNP
Tk9iamVjdChpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2FuZGlk
YXRlc1JlbW92ZWQoY2FuZGlkYXRlcyk7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJh
bnN3ZXIiKSkgewotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25E
ZXNjcmlwdGlvbigKLSAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5v
bmljYWxGb3JtKHR5cGUpLCBqc29uLmdldFN0cmluZygic2RwIikpOwotICAgICAgICBldmVudHMu
b25SZW1vdGVEZXNjcmlwdGlvbihzZHApOwotICAgICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygi
b2ZmZXIiKSkgewotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25E
ZXNjcmlwdGlvbigKLSAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5v
bmljYWxGb3JtKHR5cGUpLCBqc29uLmdldFN0cmluZygic2RwIikpOwotCi0gICAgICAgIFNpZ25h
bGluZ1BhcmFtZXRlcnMgcGFyYW1ldGVycyA9IG5ldyBTaWduYWxpbmdQYXJhbWV0ZXJzKAotICAg
ICAgICAgICAgLy8gSWNlIHNlcnZlcnMgYXJlIG5vdCBuZWVkZWQgZm9yIGRpcmVjdCBjb25uZWN0
aW9ucy4KLSAgICAgICAgICAgIG5ldyBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZl
cj4oKSwKLSAgICAgICAgICAgIGZhbHNlLCAvLyBUaGlzIGNvZGUgd2lsbCBvbmx5IGJlIHJ1biBv
biB0aGUgY2xpZW50IHNpZGUuIFNvLCB3ZSBhcmUgbm90IHRoZSBpbml0aWF0b3IuCi0gICAgICAg
ICAgICBudWxsLCAvLyBjbGllbnRJZAotICAgICAgICAgICAgbnVsbCwgLy8gd3NzVXJsCi0gICAg
ICAgICAgICBudWxsLCAvLyB3c3NQb3N0VXJsCi0gICAgICAgICAgICBzZHAsIC8vIG9mZmVyU2Rw
Ci0gICAgICAgICAgICBudWxsIC8vIGljZUNhbmRpZGF0ZXMKLSAgICAgICAgICAgICk7Ci0gICAg
ICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0gICAgICAgIGV2ZW50
cy5vbkNvbm5lY3RlZFRvUm9vbShwYXJhbWV0ZXJzKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IHJlcG9ydEVycm9yKCJVbmV4cGVjdGVkIFRDUCBtZXNzYWdlOiAiICsgbXNnKTsKLSAgICAgIH0K
LSAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJUQ1Ag
bWVzc2FnZSBKU09OIHBhcnNpbmcgZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblRDUEVycm9yKFN0cmluZyBkZXNjcmlw
dGlvbikgewotICAgIHJlcG9ydEVycm9yKCJUQ1AgY29ubmVjdGlvbiBlcnJvcjogIiArIGRlc2Ny
aXB0aW9uKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblRDUENsb3NlKCkg
ewotICAgIGV2ZW50cy5vbkNoYW5uZWxDbG9zZSgpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LSAgLy8gSGVscGVyIGZ1bmN0aW9ucy4KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFs
IFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2cuZShUQUcsIGVycm9yTWVzc2FnZSk7Ci0g
ICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0
aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgICAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUu
RVJST1I7Ci0gICAgICAgICAgZXZlbnRzLm9uQ2hhbm5lbEVycm9yKGVycm9yTWVzc2FnZSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZW5kTWVz
c2FnZShmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIHRjcENsaWVudC5zZW5kKG1lc3NhZ2UpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0K
LSAgLy8gUHV0IGEgfGtleXwtPnx2YWx1ZXwgbWFwcGluZyBpbiB8anNvbnwuCi0gIHByaXZhdGUg
c3RhdGljIHZvaWQganNvblB1dChKU09OT2JqZWN0IGpzb24sIFN0cmluZyBrZXksIE9iamVjdCB2
YWx1ZSkgewotICAgIHRyeSB7Ci0gICAgICBqc29uLnB1dChrZXksIHZhbHVlKTsKLSAgICB9IGNh
dGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9u
KGUpOwotICAgIH0KLSAgfQotCi0gIC8vIENvbnZlcnRzIGEgSmF2YSBjYW5kaWRhdGUgdG8gYSBK
U09OT2JqZWN0LgotICBwcml2YXRlIHN0YXRpYyBKU09OT2JqZWN0IHRvSnNvbkNhbmRpZGF0ZShm
aW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3
IEpTT05PYmplY3QoKTsKLSAgICBqc29uUHV0KGpzb24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBN
TGluZUluZGV4KTsKLSAgICBqc29uUHV0KGpzb24sICJpZCIsIGNhbmRpZGF0ZS5zZHBNaWQpOwot
ICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5zZHApOwotICAgIHJldHVy
biBqc29uOwotICB9Ci0KLSAgLy8gQ29udmVydHMgYSBKU09OIGNhbmRpZGF0ZSB0byBhIEphdmEg
b2JqZWN0LgotICBwcml2YXRlIHN0YXRpYyBJY2VDYW5kaWRhdGUgdG9KYXZhQ2FuZGlkYXRlKEpT
T05PYmplY3QganNvbikgdGhyb3dzIEpTT05FeGNlcHRpb24gewotICAgIHJldHVybiBuZXcgSWNl
Q2FuZGlkYXRlKAotICAgICAgICBqc29uLmdldFN0cmluZygiaWQiKSwganNvbi5nZXRJbnQoImxh
YmVsIiksIGpzb24uZ2V0U3RyaW5nKCJjYW5kaWRhdGUiKSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9IdWRGcmFnbWVudC5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9IdWRGcmFnbWVudC5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvSHVkRnJhZ21lbnQuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDIwNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBX
ZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkZyYWdtZW50OwotaW1w
b3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0IGFuZHJvaWQudXRpbC5UeXBlZFZhbHVlOwot
aW1wb3J0IGFuZHJvaWQudmlldy5MYXlvdXRJbmZsYXRlcjsKLWltcG9ydCBhbmRyb2lkLnZpZXcu
VmlldzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotaW1wb3J0IGFuZHJvaWQud2lk
Z2V0LkltYWdlQnV0dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBv
cnQgb3JnLndlYnJ0Yy5TdGF0c1JlcG9ydDsKLQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwot
aW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLS8qKgotICogRnJhZ21lbnQgZm9yIEhVRCBzdGF0aXN0
aWNzIGRpc3BsYXkuCi0gKi8KLXB1YmxpYyBjbGFzcyBIdWRGcmFnbWVudCBleHRlbmRzIEZyYWdt
ZW50IHsKLSAgcHJpdmF0ZSBWaWV3IGNvbnRyb2xWaWV3OwotICBwcml2YXRlIFRleHRWaWV3IGVu
Y29kZXJTdGF0VmlldzsKLSAgcHJpdmF0ZSBUZXh0VmlldyBodWRWaWV3QndlOwotICBwcml2YXRl
IFRleHRWaWV3IGh1ZFZpZXdDb25uZWN0aW9uOwotICBwcml2YXRlIFRleHRWaWV3IGh1ZFZpZXdW
aWRlb1NlbmQ7Ci0gIHByaXZhdGUgVGV4dFZpZXcgaHVkVmlld1ZpZGVvUmVjdjsKLSAgcHJpdmF0
ZSBJbWFnZUJ1dHRvbiB0b2dnbGVEZWJ1Z0J1dHRvbjsKLSAgcHJpdmF0ZSBib29sZWFuIHZpZGVv
Q2FsbEVuYWJsZWQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBkaXNwbGF5SHVkOwotICBwcml2YXRlIHZv
bGF0aWxlIGJvb2xlYW4gaXNSdW5uaW5nOwotICBwcml2YXRlIENwdU1vbml0b3IgY3B1TW9uaXRv
cjsKLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZpZXcgb25DcmVhdGVWaWV3KAotICAgICAgTGF5
b3V0SW5mbGF0ZXIgaW5mbGF0ZXIsIFZpZXdHcm91cCBjb250YWluZXIsIEJ1bmRsZSBzYXZlZElu
c3RhbmNlU3RhdGUpIHsKLSAgICBjb250cm9sVmlldyA9IGluZmxhdGVyLmluZmxhdGUoUi5sYXlv
dXQuZnJhZ21lbnRfaHVkLCBjb250YWluZXIsIGZhbHNlKTsKLQotICAgIC8vIENyZWF0ZSBVSSBj
b250cm9scy4KLSAgICBlbmNvZGVyU3RhdFZpZXcgPSAoVGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZp
bmRWaWV3QnlJZChSLmlkLmVuY29kZXJfc3RhdF9jYWxsKTsKLSAgICBodWRWaWV3QndlID0gKFRl
eHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5odWRfc3RhdF9id2UpOwotICAg
IGh1ZFZpZXdDb25uZWN0aW9uID0gKFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQo
Ui5pZC5odWRfc3RhdF9jb25uZWN0aW9uKTsKLSAgICBodWRWaWV3VmlkZW9TZW5kID0gKFRleHRW
aWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5odWRfc3RhdF92aWRlb19zZW5kKTsK
LSAgICBodWRWaWV3VmlkZW9SZWN2ID0gKFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5
SWQoUi5pZC5odWRfc3RhdF92aWRlb19yZWN2KTsKLSAgICB0b2dnbGVEZWJ1Z0J1dHRvbiA9IChJ
bWFnZUJ1dHRvbikgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0dG9uX3RvZ2dsZV9k
ZWJ1Zyk7Ci0KLSAgICB0b2dnbGVEZWJ1Z0J1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3IFZp
ZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgICBpZiAoZGlzcGxheUh1ZCkgewotICAgICAg
ICAgIGludCB2aXNpYmlsaXR5ID0KLSAgICAgICAgICAgICAgKGh1ZFZpZXdCd2UuZ2V0VmlzaWJp
bGl0eSgpID09IFZpZXcuVklTSUJMRSkgPyBWaWV3LklOVklTSUJMRSA6IFZpZXcuVklTSUJMRTsK
LSAgICAgICAgICBodWRWaWV3c1NldFByb3BlcnRpZXModmlzaWJpbGl0eSk7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9KTsKLQotICAgIHJldHVybiBjb250cm9sVmlldzsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN0YXJ0KCkgewotICAgIHN1cGVyLm9uU3RhcnQoKTsK
LQotICAgIEJ1bmRsZSBhcmdzID0gZ2V0QXJndW1lbnRzKCk7Ci0gICAgaWYgKGFyZ3MgIT0gbnVs
bCkgewotICAgICAgdmlkZW9DYWxsRW5hYmxlZCA9IGFyZ3MuZ2V0Qm9vbGVhbihDYWxsQWN0aXZp
dHkuRVhUUkFfVklERU9fQ0FMTCwgdHJ1ZSk7Ci0gICAgICBkaXNwbGF5SHVkID0gYXJncy5nZXRC
b29sZWFuKENhbGxBY3Rpdml0eS5FWFRSQV9ESVNQTEFZX0hVRCwgZmFsc2UpOwotICAgIH0KLSAg
ICBpbnQgdmlzaWJpbGl0eSA9IGRpc3BsYXlIdWQgPyBWaWV3LlZJU0lCTEUgOiBWaWV3LklOVklT
SUJMRTsKLSAgICBlbmNvZGVyU3RhdFZpZXcuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAg
ICB0b2dnbGVEZWJ1Z0J1dHRvbi5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotICAgIGh1ZFZp
ZXdzU2V0UHJvcGVydGllcyhWaWV3LklOVklTSUJMRSk7Ci0gICAgaXNSdW5uaW5nID0gdHJ1ZTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN0b3AoKSB7Ci0gICAgaXNSdW5u
aW5nID0gZmFsc2U7Ci0gICAgc3VwZXIub25TdG9wKCk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBz
ZXRDcHVNb25pdG9yKENwdU1vbml0b3IgY3B1TW9uaXRvcikgewotICAgIHRoaXMuY3B1TW9uaXRv
ciA9IGNwdU1vbml0b3I7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaHVkVmlld3NTZXRQcm9wZXJ0
aWVzKGludCB2aXNpYmlsaXR5KSB7Ci0gICAgaHVkVmlld0J3ZS5zZXRWaXNpYmlsaXR5KHZpc2li
aWxpdHkpOwotICAgIGh1ZFZpZXdDb25uZWN0aW9uLnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7
Ci0gICAgaHVkVmlld1ZpZGVvU2VuZC5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotICAgIGh1
ZFZpZXdWaWRlb1JlY3Yuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3Qndl
LnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BULCA1KTsKLSAgICBodWRWaWV3
Q29ubmVjdGlvbi5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9QVCwgNSk7Ci0g
ICAgaHVkVmlld1ZpZGVvU2VuZC5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhfVU5JVF9Q
VCwgNSk7Ci0gICAgaHVkVmlld1ZpZGVvUmVjdi5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBM
RVhfVU5JVF9QVCwgNSk7Ci0gIH0KLQotICBwcml2YXRlIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0
UmVwb3J0TWFwKFN0YXRzUmVwb3J0IHJlcG9ydCkgewotICAgIE1hcDxTdHJpbmcsIFN0cmluZz4g
cmVwb3J0TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7Ci0gICAgZm9yIChTdGF0
c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAgIHJlcG9ydE1hcC5w
dXQodmFsdWUubmFtZSwgdmFsdWUudmFsdWUpOwotICAgIH0KLSAgICByZXR1cm4gcmVwb3J0TWFw
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdXBkYXRlRW5jb2RlclN0YXRpc3RpY3MoZmluYWwgU3Rh
dHNSZXBvcnRbXSByZXBvcnRzKSB7Ci0gICAgaWYgKCFpc1J1bm5pbmcgfHwgIWRpc3BsYXlIdWQp
IHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgU3RyaW5nQnVpbGRlciBlbmNvZGVyU3RhdCA9
IG5ldyBTdHJpbmdCdWlsZGVyKDEyOCk7Ci0gICAgU3RyaW5nQnVpbGRlciBid2VTdGF0ID0gbmV3
IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmdCdWlsZGVyIGNvbm5lY3Rpb25TdGF0ID0gbmV3
IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmdCdWlsZGVyIHZpZGVvU2VuZFN0YXQgPSBuZXcg
U3RyaW5nQnVpbGRlcigpOwotICAgIFN0cmluZ0J1aWxkZXIgdmlkZW9SZWN2U3RhdCA9IG5ldyBT
dHJpbmdCdWlsZGVyKCk7Ci0gICAgU3RyaW5nIGZwcyA9IG51bGw7Ci0gICAgU3RyaW5nIHRhcmdl
dEJpdHJhdGUgPSBudWxsOwotICAgIFN0cmluZyBhY3R1YWxCaXRyYXRlID0gbnVsbDsKLQotICAg
IGZvciAoU3RhdHNSZXBvcnQgcmVwb3J0IDogcmVwb3J0cykgewotICAgICAgaWYgKHJlcG9ydC50
eXBlLmVxdWFscygic3NyYyIpICYmIHJlcG9ydC5pZC5jb250YWlucygic3NyYyIpICYmIHJlcG9y
dC5pZC5jb250YWlucygic2VuZCIpKSB7Ci0gICAgICAgIC8vIFNlbmQgdmlkZW8gc3RhdGlzdGlj
cy4KLSAgICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAo
cmVwb3J0KTsKLSAgICAgICAgU3RyaW5nIHRyYWNrSWQgPSByZXBvcnRNYXAuZ2V0KCJnb29nVHJh
Y2tJZCIpOwotICAgICAgICBpZiAodHJhY2tJZCAhPSBudWxsICYmIHRyYWNrSWQuY29udGFpbnMo
UGVlckNvbm5lY3Rpb25DbGllbnQuVklERU9fVFJBQ0tfSUQpKSB7Ci0gICAgICAgICAgZnBzID0g
cmVwb3J0TWFwLmdldCgiZ29vZ0ZyYW1lUmF0ZVNlbnQiKTsKLSAgICAgICAgICB2aWRlb1NlbmRT
dGF0LmFwcGVuZChyZXBvcnQuaWQpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICBmb3IgKFN0YXRz
UmVwb3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZhbHVlcykgewotICAgICAgICAgICAgU3RyaW5n
IG5hbWUgPSB2YWx1ZS5uYW1lLnJlcGxhY2UoImdvb2ciLCAiIik7Ci0gICAgICAgICAgICB2aWRl
b1NlbmRTdGF0LmFwcGVuZChuYW1lKS5hcHBlbmQoIj0iKS5hcHBlbmQodmFsdWUudmFsdWUpLmFw
cGVuZCgiXG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocmVw
b3J0LnR5cGUuZXF1YWxzKCJzc3JjIikgJiYgcmVwb3J0LmlkLmNvbnRhaW5zKCJzc3JjIikKLSAg
ICAgICAgICAmJiByZXBvcnQuaWQuY29udGFpbnMoInJlY3YiKSkgewotICAgICAgICAvLyBSZWNl
aXZlIHZpZGVvIHN0YXRpc3RpY3MuCi0gICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcmVwb3J0
TWFwID0gZ2V0UmVwb3J0TWFwKHJlcG9ydCk7Ci0gICAgICAgIC8vIENoZWNrIGlmIHRoaXMgc3Rh
dCBpcyBmb3IgdmlkZW8gdHJhY2suCi0gICAgICAgIFN0cmluZyBmcmFtZVdpZHRoID0gcmVwb3J0
TWFwLmdldCgiZ29vZ0ZyYW1lV2lkdGhSZWNlaXZlZCIpOwotICAgICAgICBpZiAoZnJhbWVXaWR0
aCAhPSBudWxsKSB7Ci0gICAgICAgICAgdmlkZW9SZWN2U3RhdC5hcHBlbmQocmVwb3J0LmlkKS5h
cHBlbmQoIlxuIik7Ci0gICAgICAgICAgZm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6IHJl
cG9ydC52YWx1ZXMpIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUubmFtZS5yZXBs
YWNlKCJnb29nIiwgIiIpOwotICAgICAgICAgICAgdmlkZW9SZWN2U3RhdC5hcHBlbmQobmFtZSku
YXBwZW5kKCI9IikuYXBwZW5kKHZhbHVlLnZhbHVlKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHJlcG9ydC5pZC5lcXVhbHMoImJ3ZWZvcnZp
ZGVvIikpIHsKLSAgICAgICAgLy8gQldFIHN0YXRpc3RpY3MuCi0gICAgICAgIE1hcDxTdHJpbmcs
IFN0cmluZz4gcmVwb3J0TWFwID0gZ2V0UmVwb3J0TWFwKHJlcG9ydCk7Ci0gICAgICAgIHRhcmdl
dEJpdHJhdGUgPSByZXBvcnRNYXAuZ2V0KCJnb29nVGFyZ2V0RW5jQml0cmF0ZSIpOwotICAgICAg
ICBhY3R1YWxCaXRyYXRlID0gcmVwb3J0TWFwLmdldCgiZ29vZ0FjdHVhbEVuY0JpdHJhdGUiKTsK
LQotICAgICAgICBid2VTdGF0LmFwcGVuZChyZXBvcnQuaWQpLmFwcGVuZCgiXG4iKTsKLSAgICAg
ICAgZm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAg
ICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLm5hbWUucmVwbGFjZSgiZ29vZyIsICIiKS5yZXBsYWNl
KCJBdmFpbGFibGUiLCAiIik7Ci0gICAgICAgICAgYndlU3RhdC5hcHBlbmQobmFtZSkuYXBwZW5k
KCI9IikuYXBwZW5kKHZhbHVlLnZhbHVlKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgIH0KLSAgICAg
IH0gZWxzZSBpZiAocmVwb3J0LnR5cGUuZXF1YWxzKCJnb29nQ2FuZGlkYXRlUGFpciIpKSB7Ci0g
ICAgICAgIC8vIENvbm5lY3Rpb24gc3RhdGlzdGljcy4KLSAgICAgICAgTWFwPFN0cmluZywgU3Ry
aW5nPiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAocmVwb3J0KTsKLSAgICAgICAgU3RyaW5nIGFj
dGl2ZUNvbm5lY3Rpb24gPSByZXBvcnRNYXAuZ2V0KCJnb29nQWN0aXZlQ29ubmVjdGlvbiIpOwot
ICAgICAgICBpZiAoYWN0aXZlQ29ubmVjdGlvbiAhPSBudWxsICYmIGFjdGl2ZUNvbm5lY3Rpb24u
ZXF1YWxzKCJ0cnVlIikpIHsKLSAgICAgICAgICBjb25uZWN0aW9uU3RhdC5hcHBlbmQocmVwb3J0
LmlkKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAgZm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1
ZSA6IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUubmFt
ZS5yZXBsYWNlKCJnb29nIiwgIiIpOwotICAgICAgICAgICAgY29ubmVjdGlvblN0YXQuYXBwZW5k
KG5hbWUpLmFwcGVuZCgiPSIpLmFwcGVuZCh2YWx1ZS52YWx1ZSkuYXBwZW5kKCJcbiIpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgICBodWRWaWV3QndlLnNldFRl
eHQoYndlU3RhdC50b1N0cmluZygpKTsKLSAgICBodWRWaWV3Q29ubmVjdGlvbi5zZXRUZXh0KGNv
bm5lY3Rpb25TdGF0LnRvU3RyaW5nKCkpOwotICAgIGh1ZFZpZXdWaWRlb1NlbmQuc2V0VGV4dCh2
aWRlb1NlbmRTdGF0LnRvU3RyaW5nKCkpOwotICAgIGh1ZFZpZXdWaWRlb1JlY3Yuc2V0VGV4dCh2
aWRlb1JlY3ZTdGF0LnRvU3RyaW5nKCkpOwotCi0gICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQpIHsK
LSAgICAgIGlmIChmcHMgIT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyU3RhdC5hcHBlbmQoIkZw
czogICIpLmFwcGVuZChmcHMpLmFwcGVuZCgiXG4iKTsKLSAgICAgIH0KLSAgICAgIGlmICh0YXJn
ZXRCaXRyYXRlICE9IG51bGwpIHsKLSAgICAgICAgZW5jb2RlclN0YXQuYXBwZW5kKCJUYXJnZXQg
QlI6ICIpLmFwcGVuZCh0YXJnZXRCaXRyYXRlKS5hcHBlbmQoIlxuIik7Ci0gICAgICB9Ci0gICAg
ICBpZiAoYWN0dWFsQml0cmF0ZSAhPSBudWxsKSB7Ci0gICAgICAgIGVuY29kZXJTdGF0LmFwcGVu
ZCgiQWN0dWFsIEJSOiAiKS5hcHBlbmQoYWN0dWFsQml0cmF0ZSkuYXBwZW5kKCJcbiIpOwotICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChjcHVNb25pdG9yICE9IG51bGwpIHsKLSAgICAgIGVuY29k
ZXJTdGF0LmFwcGVuZCgiQ1BVJTogIikKLSAgICAgICAgICAuYXBwZW5kKGNwdU1vbml0b3IuZ2V0
Q3B1VXNhZ2VDdXJyZW50KCkpCi0gICAgICAgICAgLmFwcGVuZCgiLyIpCi0gICAgICAgICAgLmFw
cGVuZChjcHVNb25pdG9yLmdldENwdVVzYWdlQXZlcmFnZSgpKQotICAgICAgICAgIC5hcHBlbmQo
Ii4gRnJlcTogIikKLSAgICAgICAgICAuYXBwZW5kKGNwdU1vbml0b3IuZ2V0RnJlcXVlbmN5U2Nh
bGVBdmVyYWdlKCkpOwotICAgIH0KLSAgICBlbmNvZGVyU3RhdFZpZXcuc2V0VGV4dChlbmNvZGVy
U3RhdC50b1N0cmluZygpKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBw
cnRjL1BlZXJDb25uZWN0aW9uQ2xpZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL1BlZXJDb25uZWN0aW9uQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9QZWVyQ29ubmVjdGlvbkNsaWVudC5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsMTE2OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAy
MDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5D
b250ZXh0OwotaW1wb3J0IGFuZHJvaWQub3MuRW52aXJvbm1lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5QYXJjZWxGaWxlRGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0
IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEu
dXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuRW51bVNldDsKLWltcG9ydCBqYXZh
LnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0
aWwuVGltZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKLWltcG9ydCBqYXZhLnV0aWwu
Y29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuU2NoZWR1
bGVkRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1w
b3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5B
cHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVyczsKLWltcG9ydCBvcmcud2VicnRjLkF1ZGlv
U291cmNlOwotaW1wb3J0IG9yZy53ZWJydGMuQXVkaW9UcmFjazsKLWltcG9ydCBvcmcud2VicnRj
LkNhbWVyYVZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5EYXRhQ2hhbm5lbDsKLWlt
cG9ydCBvcmcud2VicnRjLkVnbEJhc2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotaW1wb3J0IG9yZy53ZWJydGMuTWVkaWFDb25z
dHJhaW50czsKLWltcG9ydCBvcmcud2VicnRjLk1lZGlhU3RyZWFtOwotaW1wb3J0IG9yZy53ZWJy
dGMuUGVlckNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbi5JY2VD
b25uZWN0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbkZhY3Rvcnk7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5SdHBQYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy53ZWJydGMuUnRw
U2VuZGVyOwotaW1wb3J0IG9yZy53ZWJydGMuU2RwT2JzZXJ2ZXI7Ci1pbXBvcnQgb3JnLndlYnJ0
Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TdGF0c09ic2VydmVyOwot
aW1wb3J0IG9yZy53ZWJydGMuU3RhdHNSZXBvcnQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0Nh
cHR1cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlcjsKLWltcG9ydCBvcmcud2Vi
cnRjLlZpZGVvU291cmNlOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9UcmFjazsKLWltcG9ydCBv
cmcud2VicnRjLnZvaWNlZW5naW5lLldlYlJ0Y0F1ZGlvTWFuYWdlcjsKLWltcG9ydCBvcmcud2Vi
cnRjLnZvaWNlZW5naW5lLldlYlJ0Y0F1ZGlvVXRpbHM7Ci0KLS8qKgotICogUGVlciBjb25uZWN0
aW9uIGNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiA8cD5BbGwgcHVibGljIG1ldGhvZHMg
YXJlIHJvdXRlZCB0byBsb2NhbCBsb29wZXIgdGhyZWFkLgotICogQWxsIFBlZXJDb25uZWN0aW9u
RXZlbnRzIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmcm9tIHRoZSBzYW1lIGxvb3BlciB0aHJlYWQu
Ci0gKiBUaGlzIGNsYXNzIGlzIGEgc2luZ2xldG9uLgotICovCi1wdWJsaWMgY2xhc3MgUGVlckNv
bm5lY3Rpb25DbGllbnQgewotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBWSURFT19UUkFD
S19JRCA9ICJBUkRBTVN2MCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX1RS
QUNLX0lEID0gIkFSREFNU2EwIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklERU9f
VFJBQ0tfVFlQRSA9ICJ2aWRlbyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiUENSVENDbGllbnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklERU9fQ09E
RUNfVlA4ID0gIlZQOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWSURFT19DT0RF
Q19WUDkgPSAiVlA5IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZJREVPX0NPREVD
X0gyNjQgPSAiSDI2NCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19DT0RF
Q19PUFVTID0gIm9wdXMiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fQ09E
RUNfSVNBQyA9ICJJU0FDIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZJREVPX0NP
REVDX1BBUkFNX1NUQVJUX0JJVFJBVEUgPSAieC1nb29nbGUtc3RhcnQtYml0cmF0ZSI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19DT0RFQ19QQVJBTV9CSVRSQVRFID0gIm1h
eGF2ZXJhZ2ViaXRyYXRlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0VD
SE9fQ0FOQ0VMTEFUSU9OX0NPTlNUUkFJTlQgPSAiZ29vZ0VjaG9DYW5jZWxsYXRpb24iOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fQVVUT19HQUlOX0NPTlRST0xfQ09OU1RS
QUlOVCA9ICJnb29nQXV0b0dhaW5Db250cm9sIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIEFVRElPX0hJR0hfUEFTU19GSUxURVJfQ09OU1RSQUlOVCA9ICJnb29nSGlnaHBhc3NGaWx0
ZXIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fTk9JU0VfU1VQUFJFU1NJ
T05fQ09OU1RSQUlOVCA9ICJnb29nTm9pc2VTdXBwcmVzc2lvbiI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBBVURJT19MRVZFTF9DT05UUk9MX0NPTlNUUkFJTlQgPSAibGV2ZWxDb250
cm9sIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIERUTFNfU1JUUF9LRVlfQUdSRUVN
RU5UX0NPTlNUUkFJTlQgPSAiRHRsc1NydHBLZXlBZ3JlZW1lbnQiOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgSERfVklERU9fV0lEVEggPSAxMjgwOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgSERfVklERU9fSEVJR0hUID0gNzIwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
QlBTX0lOX0tCUFMgPSAxMDAwOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFBlZXJDb25uZWN0
aW9uQ2xpZW50IGluc3RhbmNlID0gbmV3IFBlZXJDb25uZWN0aW9uQ2xpZW50KCk7Ci0gIHByaXZh
dGUgZmluYWwgUENPYnNlcnZlciBwY09ic2VydmVyID0gbmV3IFBDT2JzZXJ2ZXIoKTsKLSAgcHJp
dmF0ZSBmaW5hbCBTRFBPYnNlcnZlciBzZHBPYnNlcnZlciA9IG5ldyBTRFBPYnNlcnZlcigpOwot
ICBwcml2YXRlIGZpbmFsIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLQotICBw
cml2YXRlIENvbnRleHQgY29udGV4dDsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkg
ZmFjdG9yeTsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbiBwZWVyQ29ubmVjdGlvbjsKLSAgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG51bGw7Ci0gIHByaXZhdGUgQXVk
aW9Tb3VyY2UgYXVkaW9Tb3VyY2U7Ci0gIHByaXZhdGUgVmlkZW9Tb3VyY2UgdmlkZW9Tb3VyY2U7
Ci0gIHByaXZhdGUgYm9vbGVhbiB2aWRlb0NhbGxFbmFibGVkOwotICBwcml2YXRlIGJvb2xlYW4g
cHJlZmVySXNhYzsKLSAgcHJpdmF0ZSBTdHJpbmcgcHJlZmVycmVkVmlkZW9Db2RlYzsKLSAgcHJp
dmF0ZSBib29sZWFuIHZpZGVvQ2FwdHVyZXJTdG9wcGVkOwotICBwcml2YXRlIGJvb2xlYW4gaXNF
cnJvcjsKLSAgcHJpdmF0ZSBUaW1lciBzdGF0c1RpbWVyOwotICBwcml2YXRlIFZpZGVvUmVuZGVy
ZXIuQ2FsbGJhY2tzIGxvY2FsUmVuZGVyOwotICBwcml2YXRlIExpc3Q8VmlkZW9SZW5kZXJlci5D
YWxsYmFja3M+IHJlbW90ZVJlbmRlcnM7Ci0gIHByaXZhdGUgU2lnbmFsaW5nUGFyYW1ldGVycyBz
aWduYWxpbmdQYXJhbWV0ZXJzOwotICBwcml2YXRlIE1lZGlhQ29uc3RyYWludHMgcGNDb25zdHJh
aW50czsKLSAgcHJpdmF0ZSBpbnQgdmlkZW9XaWR0aDsKLSAgcHJpdmF0ZSBpbnQgdmlkZW9IZWln
aHQ7Ci0gIHByaXZhdGUgaW50IHZpZGVvRnBzOwotICBwcml2YXRlIE1lZGlhQ29uc3RyYWludHMg
YXVkaW9Db25zdHJhaW50czsKLSAgcHJpdmF0ZSBQYXJjZWxGaWxlRGVzY3JpcHRvciBhZWNEdW1w
RmlsZURlc2NyaXB0b3I7Ci0gIHByaXZhdGUgTWVkaWFDb25zdHJhaW50cyBzZHBNZWRpYUNvbnN0
cmFpbnRzOwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwZWVyQ29ubmVjdGlv
blBhcmFtZXRlcnM7Ci0gIC8vIFF1ZXVlZCByZW1vdGUgSUNFIGNhbmRpZGF0ZXMgYXJlIGNvbnN1
bWVkIG9ubHkgYWZ0ZXIgYm90aCBsb2NhbCBhbmQKLSAgLy8gcmVtb3RlIGRlc2NyaXB0aW9ucyBh
cmUgc2V0LiBTaW1pbGFybHkgbG9jYWwgSUNFIGNhbmRpZGF0ZXMgYXJlIHNlbnQgdG8KLSAgLy8g
cmVtb3RlIHBlZXIgYWZ0ZXIgYm90aCBsb2NhbCBhbmQgcmVtb3RlIGRlc2NyaXB0aW9uIGFyZSBz
ZXQuCi0gIHByaXZhdGUgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+IHF1ZXVlZFJlbW90ZUNhbmRp
ZGF0ZXM7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25FdmVudHMgZXZlbnRzOwotICBwcml2YXRl
IGJvb2xlYW4gaXNJbml0aWF0b3I7Ci0gIHByaXZhdGUgU2Vzc2lvbkRlc2NyaXB0aW9uIGxvY2Fs
U2RwOyAvLyBlaXRoZXIgb2ZmZXIgb3IgYW5zd2VyIFNEUAotICBwcml2YXRlIE1lZGlhU3RyZWFt
IG1lZGlhU3RyZWFtOwotICBwcml2YXRlIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlcjsKLSAg
Ly8gZW5hYmxlVmlkZW8gaXMgc2V0IHRvIHRydWUgaWYgdmlkZW8gc2hvdWxkIGJlIHJlbmRlcmVk
IGFuZCBzZW50LgotICBwcml2YXRlIGJvb2xlYW4gcmVuZGVyVmlkZW87Ci0gIHByaXZhdGUgVmlk
ZW9UcmFjayBsb2NhbFZpZGVvVHJhY2s7Ci0gIHByaXZhdGUgVmlkZW9UcmFjayByZW1vdGVWaWRl
b1RyYWNrOwotICBwcml2YXRlIFJ0cFNlbmRlciBsb2NhbFZpZGVvU2VuZGVyOwotICAvLyBlbmFi
bGVBdWRpbyBpcyBzZXQgdG8gdHJ1ZSBpZiBhdWRpbyBzaG91bGQgYmUgc2VudC4KLSAgcHJpdmF0
ZSBib29sZWFuIGVuYWJsZUF1ZGlvOwotICBwcml2YXRlIEF1ZGlvVHJhY2sgbG9jYWxBdWRpb1Ry
YWNrOwotCi0gIC8qKgotICAgKiBQZWVyIGNvbm5lY3Rpb24gcGFyYW1ldGVycy4KLSAgICovCi0g
IHB1YmxpYyBzdGF0aWMgY2xhc3MgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHsKLSAgICBwdWJs
aWMgZmluYWwgYm9vbGVhbiB2aWRlb0NhbGxFbmFibGVkOwotICAgIHB1YmxpYyBmaW5hbCBib29s
ZWFuIGxvb3BiYWNrOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHRyYWNpbmc7Ci0gICAgcHVi
bGljIGZpbmFsIGludCB2aWRlb1dpZHRoOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdmlkZW9IZWln
aHQ7Ci0gICAgcHVibGljIGZpbmFsIGludCB2aWRlb0ZwczsKLSAgICBwdWJsaWMgZmluYWwgaW50
IHZpZGVvTWF4Qml0cmF0ZTsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHZpZGVvQ29kZWM7Ci0g
ICAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uOwotICAgIHB1
YmxpYyBmaW5hbCBpbnQgYXVkaW9TdGFydEJpdHJhdGU7Ci0gICAgcHVibGljIGZpbmFsIFN0cmlu
ZyBhdWRpb0NvZGVjOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIG5vQXVkaW9Qcm9jZXNzaW5n
OwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGFlY0R1bXA7Ci0gICAgcHVibGljIGZpbmFsIGJv
b2xlYW4gdXNlT3BlblNMRVM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZGlzYWJsZUJ1aWx0
SW5BRUM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5BR0M7Ci0gICAg
cHVibGljIGZpbmFsIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5OUzsKLSAgICBwdWJsaWMgZmluYWwg
Ym9vbGVhbiBlbmFibGVMZXZlbENvbnRyb2w7Ci0KLSAgICBwdWJsaWMgUGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzKGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZCwgYm9vbGVhbiBsb29wYmFjaywgYm9v
bGVhbiB0cmFjaW5nLAotICAgICAgICBpbnQgdmlkZW9XaWR0aCwgaW50IHZpZGVvSGVpZ2h0LCBp
bnQgdmlkZW9GcHMsIGludCB2aWRlb01heEJpdHJhdGUsIFN0cmluZyB2aWRlb0NvZGVjLAotICAg
ICAgICBib29sZWFuIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbiwgaW50IGF1ZGlvU3RhcnRCaXRy
YXRlLCBTdHJpbmcgYXVkaW9Db2RlYywKLSAgICAgICAgYm9vbGVhbiBub0F1ZGlvUHJvY2Vzc2lu
ZywgYm9vbGVhbiBhZWNEdW1wLCBib29sZWFuIHVzZU9wZW5TTEVTLCBib29sZWFuIGRpc2FibGVC
dWlsdEluQUVDLAotICAgICAgICBib29sZWFuIGRpc2FibGVCdWlsdEluQUdDLCBib29sZWFuIGRp
c2FibGVCdWlsdEluTlMsIGJvb2xlYW4gZW5hYmxlTGV2ZWxDb250cm9sKSB7Ci0gICAgICB0aGlz
LnZpZGVvQ2FsbEVuYWJsZWQgPSB2aWRlb0NhbGxFbmFibGVkOwotICAgICAgdGhpcy5sb29wYmFj
ayA9IGxvb3BiYWNrOwotICAgICAgdGhpcy50cmFjaW5nID0gdHJhY2luZzsKLSAgICAgIHRoaXMu
dmlkZW9XaWR0aCA9IHZpZGVvV2lkdGg7Ci0gICAgICB0aGlzLnZpZGVvSGVpZ2h0ID0gdmlkZW9I
ZWlnaHQ7Ci0gICAgICB0aGlzLnZpZGVvRnBzID0gdmlkZW9GcHM7Ci0gICAgICB0aGlzLnZpZGVv
TWF4Qml0cmF0ZSA9IHZpZGVvTWF4Qml0cmF0ZTsKLSAgICAgIHRoaXMudmlkZW9Db2RlYyA9IHZp
ZGVvQ29kZWM7Ci0gICAgICB0aGlzLnZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbiA9IHZpZGVvQ29k
ZWNId0FjY2VsZXJhdGlvbjsKLSAgICAgIHRoaXMuYXVkaW9TdGFydEJpdHJhdGUgPSBhdWRpb1N0
YXJ0Qml0cmF0ZTsKLSAgICAgIHRoaXMuYXVkaW9Db2RlYyA9IGF1ZGlvQ29kZWM7Ci0gICAgICB0
aGlzLm5vQXVkaW9Qcm9jZXNzaW5nID0gbm9BdWRpb1Byb2Nlc3Npbmc7Ci0gICAgICB0aGlzLmFl
Y0R1bXAgPSBhZWNEdW1wOwotICAgICAgdGhpcy51c2VPcGVuU0xFUyA9IHVzZU9wZW5TTEVTOwot
ICAgICAgdGhpcy5kaXNhYmxlQnVpbHRJbkFFQyA9IGRpc2FibGVCdWlsdEluQUVDOwotICAgICAg
dGhpcy5kaXNhYmxlQnVpbHRJbkFHQyA9IGRpc2FibGVCdWlsdEluQUdDOwotICAgICAgdGhpcy5k
aXNhYmxlQnVpbHRJbk5TID0gZGlzYWJsZUJ1aWx0SW5OUzsKLSAgICAgIHRoaXMuZW5hYmxlTGV2
ZWxDb250cm9sID0gZW5hYmxlTGV2ZWxDb250cm9sOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBQZWVyIGNvbm5lY3Rpb24gZXZlbnRzLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBQZWVy
Q29ubmVjdGlvbkV2ZW50cyB7Ci0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBs
b2NhbCBTRFAgaXMgY3JlYXRlZCBhbmQgc2V0LgotICAgICAqLwotICAgIHZvaWQgb25Mb2NhbERl
c2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gICAgLyoqCi0gICAg
ICogQ2FsbGJhY2sgZmlyZWQgb25jZSBsb2NhbCBJY2UgY2FuZGlkYXRlIGlzIGdlbmVyYXRlZC4K
LSAgICAgKi8KLSAgICB2b2lkIG9uSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5k
aWRhdGUpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBsb2NhbCBJQ0Ug
Y2FuZGlkYXRlcyBhcmUgcmVtb3ZlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uSWNlQ2FuZGlkYXRl
c1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7Ci0KLSAgICAvKioKLSAg
ICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgKEljZUNv
bm5lY3Rpb25TdGF0ZSBpcwotICAgICAqIENPTk5FQ1RFRCkuCi0gICAgICovCi0gICAgdm9pZCBv
bkljZUNvbm5lY3RlZCgpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBj
b25uZWN0aW9uIGlzIGNsb3NlZCAoSWNlQ29ubmVjdGlvblN0YXRlIGlzCi0gICAgICogRElTQ09O
TkVDVEVEKS4KLSAgICAgKi8KLSAgICB2b2lkIG9uSWNlRGlzY29ubmVjdGVkKCk7Ci0KLSAgICAv
KioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHBlZXIgY29ubmVjdGlvbiBpcyBjbG9zZWQu
Ci0gICAgICovCi0gICAgdm9pZCBvblBlZXJDb25uZWN0aW9uQ2xvc2VkKCk7Ci0KLSAgICAvKioK
LSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHBlZXIgY29ubmVjdGlvbiBzdGF0aXN0aWNzIGlz
IHJlYWR5LgotICAgICAqLwotICAgIHZvaWQgb25QZWVyQ29ubmVjdGlvblN0YXRzUmVhZHkoZmlu
YWwgU3RhdHNSZXBvcnRbXSByZXBvcnRzKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZp
cmVkIG9uY2UgcGVlciBjb25uZWN0aW9uIGVycm9yIGhhcHBlbmVkLgotICAgICAqLwotICAgIHZv
aWQgb25QZWVyQ29ubmVjdGlvbkVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbik7Ci0gIH0K
LQotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uQ2xpZW50KCkgewotICAgIC8vIEV4ZWN1dG9yIHRo
cmVhZCBpcyBzdGFydGVkIG9uY2UgaW4gcHJpdmF0ZSBjdG9yIGFuZCBpcyB1c2VkIGZvciBhbGwK
LSAgICAvLyBwZWVyIGNvbm5lY3Rpb24gQVBJIGNhbGxzIHRvIGVuc3VyZSBuZXcgcGVlciBjb25u
ZWN0aW9uIGZhY3RvcnkgaXMKLSAgICAvLyBjcmVhdGVkIG9uIHRoZSBzYW1lIHRocmVhZCBhcyBw
cmV2aW91c2x5IGRlc3Ryb3llZCBmYWN0b3J5LgotICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5l
d1NpbmdsZVRocmVhZFNjaGVkdWxlZEV4ZWN1dG9yKCk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGlj
IFBlZXJDb25uZWN0aW9uQ2xpZW50IGdldEluc3RhbmNlKCkgewotICAgIHJldHVybiBpbnN0YW5j
ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBlZXJDb25uZWN0aW9uRmFjdG9yeU9wdGlvbnMo
UGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucykgewotICAgIHRoaXMub3B0aW9u
cyA9IG9wdGlvbnM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkoZmluYWwgQ29udGV4dCBjb250ZXh0LAotICAgICAgZmluYWwgUGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywgZmluYWwgUGVlckNvbm5lY3Rpb25F
dmVudHMgZXZlbnRzKSB7Ci0gICAgdGhpcy5wZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPSBwZWVy
Q29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0gICAgdmlk
ZW9DYWxsRW5hYmxlZCA9IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NhbGxFbmFibGVk
OwotICAgIC8vIFJlc2V0IHZhcmlhYmxlcyB0byBpbml0aWFsIHN0YXRlcy4KLSAgICB0aGlzLmNv
bnRleHQgPSBudWxsOwotICAgIGZhY3RvcnkgPSBudWxsOwotICAgIHBlZXJDb25uZWN0aW9uID0g
bnVsbDsKLSAgICBwcmVmZXJJc2FjID0gZmFsc2U7Ci0gICAgdmlkZW9DYXB0dXJlclN0b3BwZWQg
PSBmYWxzZTsKLSAgICBpc0Vycm9yID0gZmFsc2U7Ci0gICAgcXVldWVkUmVtb3RlQ2FuZGlkYXRl
cyA9IG51bGw7Ci0gICAgbG9jYWxTZHAgPSBudWxsOyAvLyBlaXRoZXIgb2ZmZXIgb3IgYW5zd2Vy
IFNEUAotICAgIG1lZGlhU3RyZWFtID0gbnVsbDsKLSAgICB2aWRlb0NhcHR1cmVyID0gbnVsbDsK
LSAgICByZW5kZXJWaWRlbyA9IHRydWU7Ci0gICAgbG9jYWxWaWRlb1RyYWNrID0gbnVsbDsKLSAg
ICByZW1vdGVWaWRlb1RyYWNrID0gbnVsbDsKLSAgICBsb2NhbFZpZGVvU2VuZGVyID0gbnVsbDsK
LSAgICBlbmFibGVBdWRpbyA9IHRydWU7Ci0gICAgbG9jYWxBdWRpb1RyYWNrID0gbnVsbDsKLSAg
ICBzdGF0c1RpbWVyID0gbmV3IFRpbWVyKCk7Ci0KLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBjcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcm5hbChjb250ZXh0KTsKLSAg
ICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBlZXJDb25uZWN0aW9u
KGZpbmFsIEVnbEJhc2UuQ29udGV4dCByZW5kZXJFR0xDb250ZXh0LAotICAgICAgZmluYWwgVmlk
ZW9SZW5kZXJlci5DYWxsYmFja3MgbG9jYWxSZW5kZXIsIGZpbmFsIFZpZGVvUmVuZGVyZXIuQ2Fs
bGJhY2tzIHJlbW90ZVJlbmRlciwKLSAgICAgIGZpbmFsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0
dXJlciwgZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzKSB7Ci0g
ICAgY3JlYXRlUGVlckNvbm5lY3Rpb24ocmVuZGVyRUdMQ29udGV4dCwgbG9jYWxSZW5kZXIsIENv
bGxlY3Rpb25zLnNpbmdsZXRvbkxpc3QocmVtb3RlUmVuZGVyKSwKLSAgICAgICAgdmlkZW9DYXB0
dXJlciwgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0gIH0KLSAgcHVibGljIHZvaWQgY3JlYXRlUGVl
ckNvbm5lY3Rpb24oZmluYWwgRWdsQmFzZS5Db250ZXh0IHJlbmRlckVHTENvbnRleHQsCi0gICAg
ICBmaW5hbCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBsb2NhbFJlbmRlciwgZmluYWwgTGlzdDxW
aWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4gcmVtb3RlUmVuZGVycywKLSAgICAgIGZpbmFsIFZpZGVv
Q2FwdHVyZXIgdmlkZW9DYXB0dXJlciwgZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxp
bmdQYXJhbWV0ZXJzKSB7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyA9PSBudWxs
KSB7Ci0gICAgICBMb2cuZShUQUcsICJDcmVhdGluZyBwZWVyIGNvbm5lY3Rpb24gd2l0aG91dCBp
bml0aWFsaXppbmcgZmFjdG9yeS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdGhpcy5s
b2NhbFJlbmRlciA9IGxvY2FsUmVuZGVyOwotICAgIHRoaXMucmVtb3RlUmVuZGVycyA9IHJlbW90
ZVJlbmRlcnM7Ci0gICAgdGhpcy52aWRlb0NhcHR1cmVyID0gdmlkZW9DYXB0dXJlcjsKLSAgICB0
aGlzLnNpZ25hbGluZ1BhcmFtZXRlcnMgPSBzaWduYWxpbmdQYXJhbWV0ZXJzOwotICAgIGV4ZWN1
dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgY3JlYXRlTWVkaWFDb25z
dHJhaW50c0ludGVybmFsKCk7Ci0gICAgICAgICAgY3JlYXRlUGVlckNvbm5lY3Rpb25JbnRlcm5h
bChyZW5kZXJFR0xDb250ZXh0KTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAg
ICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBwZWVyIGNvbm5lY3Rpb246ICIg
KyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2xvc2UoKSB7Ci0gICAgZXhlY3V0b3Iu
ZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgY2xvc2VJbnRlcm5hbCgpOwotICAgICAgfQotICAgIH0pOwot
ICB9Ci0KLSAgcHVibGljIGJvb2xlYW4gaXNWaWRlb0NhbGxFbmFibGVkKCkgewotICAgIHJldHVy
biB2aWRlb0NhbGxFbmFibGVkOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVBlZXJDb25u
ZWN0aW9uRmFjdG9yeUludGVybmFsKENvbnRleHQgY29udGV4dCkgewotICAgIFBlZXJDb25uZWN0
aW9uRmFjdG9yeS5pbml0aWFsaXplSW50ZXJuYWxUcmFjZXIoKTsKLSAgICBpZiAocGVlckNvbm5l
Y3Rpb25QYXJhbWV0ZXJzLnRyYWNpbmcpIHsKLSAgICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5z
dGFydEludGVybmFsVHJhY2luZ0NhcHR1cmUoCi0gICAgICAgICAgRW52aXJvbm1lbnQuZ2V0RXh0
ZXJuYWxTdG9yYWdlRGlyZWN0b3J5KCkuZ2V0QWJzb2x1dGVQYXRoKCkgKyBGaWxlLnNlcGFyYXRv
cgotICAgICAgICAgICsgIndlYnJ0Yy10cmFjZS50eHQiKTsKLSAgICB9Ci0gICAgTG9nLmQoVEFH
LAotICAgICAgICAiQ3JlYXRlIHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5LiBVc2UgdmlkZW86ICIg
KyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9DYWxsRW5hYmxlZCk7Ci0gICAgaXNFcnJv
ciA9IGZhbHNlOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBmaWVsZCB0cmlhbHMuCi0gICAgUGVlckNv
bm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVGaWVsZFRyaWFscygiIik7Ci0KLSAgICAvLyBDaGVj
ayBwcmVmZXJyZWQgdmlkZW8gY29kZWMuCi0gICAgcHJlZmVycmVkVmlkZW9Db2RlYyA9IFZJREVP
X0NPREVDX1ZQODsKLSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCAmJiBwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMudmlkZW9Db2RlYyAhPSBudWxsKSB7Ci0gICAgICBpZiAocGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzLnZpZGVvQ29kZWMuZXF1YWxzKFZJREVPX0NPREVDX1ZQOSkpIHsKLSAgICAgICAg
cHJlZmVycmVkVmlkZW9Db2RlYyA9IFZJREVPX0NPREVDX1ZQOTsKLSAgICAgIH0gZWxzZSBpZiAo
cGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvQ29kZWMuZXF1YWxzKFZJREVPX0NPREVDX0gy
NjQpKSB7Ci0gICAgICAgIHByZWZlcnJlZFZpZGVvQ29kZWMgPSBWSURFT19DT0RFQ19IMjY0Owot
ICAgICAgfQotICAgIH0KLSAgICBMb2cuZChUQUcsICJQZXJlZmVycmVkIHZpZGVvIGNvZGVjOiAi
ICsgcHJlZmVycmVkVmlkZW9Db2RlYyk7Ci0KLSAgICAvLyBDaGVjayBpZiBJU0FDIGlzIHVzZWQg
YnkgZGVmYXVsdC4KLSAgICBwcmVmZXJJc2FjID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmF1
ZGlvQ29kZWMgIT0gbnVsbAotICAgICAgICAmJiBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuYXVk
aW9Db2RlYy5lcXVhbHMoQVVESU9fQ09ERUNfSVNBQyk7Ci0KLSAgICAvLyBFbmFibGUvZGlzYWJs
ZSBPcGVuU0wgRVMgcGxheWJhY2suCi0gICAgaWYgKCFwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMu
dXNlT3BlblNMRVMpIHsKLSAgICAgIExvZy5kKFRBRywgIkRpc2FibGUgT3BlblNMIEVTIGF1ZGlv
IGV2ZW4gaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb01hbmFnZXIu
c2V0QmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZSh0cnVlIC8qIGVuYWJsZSAqLyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgIkFsbG93IE9wZW5TTCBFUyBhdWRpbyBpZiBk
ZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvTWFuYWdlci5zZXRCbGFja2xp
c3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzLmRpc2FibGVCdWlsdEluQUVDKSB7Ci0gICAgICBMb2cuZChUQUcs
ICJEaXNhYmxlIGJ1aWx0LWluIEFFQyBldmVuIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAg
ICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKHRy
dWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZChUQUcsICJFbmFibGUgYnVpbHQtaW4gQUVD
IGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJS
dGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAocGVl
ckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmRpc2FibGVCdWlsdEluQUdDKSB7Ci0gICAgICBMb2cuZChU
QUcsICJEaXNhYmxlIGJ1aWx0LWluIEFHQyBldmVuIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwot
ICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9s
KHRydWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZChUQUcsICJFbmFibGUgYnVpbHQtaW4g
QUdDIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRX
ZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBpZiAo
cGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmRpc2FibGVCdWlsdEluTlMpIHsKLSAgICAgIExvZy5k
KFRBRywgIkRpc2FibGUgYnVpbHQtaW4gTlMgZXZlbiBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsK
LSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IodHJ1
ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgIkVuYWJsZSBidWlsdC1pbiBOUyBp
ZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRj
QmFzZWROb2lzZVN1cHByZXNzb3IoZmFsc2UpOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBwZWVy
IGNvbm5lY3Rpb24gZmFjdG9yeS4KLSAgICBpZiAoIVBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0
aWFsaXplQW5kcm9pZEdsb2JhbHMoCi0gICAgICAgICAgICBjb250ZXh0LCB0cnVlLCB0cnVlLCBw
ZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uKSkgewotICAg
ICAgZXZlbnRzLm9uUGVlckNvbm5lY3Rpb25FcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemVBbmRy
b2lkR2xvYmFscyIpOwotICAgIH0KLSAgICBpZiAob3B0aW9ucyAhPSBudWxsKSB7Ci0gICAgICBM
b2cuZChUQUcsICJGYWN0b3J5IG5ldHdvcmtJZ25vcmVNYXNrIG9wdGlvbjogIiArIG9wdGlvbnMu
bmV0d29ya0lnbm9yZU1hc2spOwotICAgIH0KLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0Owot
ICAgIGZhY3RvcnkgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5KG9wdGlvbnMpOwotICAgIExv
Zy5kKFRBRywgIlBlZXIgY29ubmVjdGlvbiBmYWN0b3J5IGNyZWF0ZWQuIik7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgY3JlYXRlTWVkaWFDb25zdHJhaW50c0ludGVybmFsKCkgewotICAgIC8vIENy
ZWF0ZSBwZWVyIGNvbm5lY3Rpb24gY29uc3RyYWludHMuCi0gICAgcGNDb25zdHJhaW50cyA9IG5l
dyBNZWRpYUNvbnN0cmFpbnRzKCk7Ci0gICAgLy8gRW5hYmxlIERUTFMgZm9yIG5vcm1hbCBjYWxs
cyBhbmQgZGlzYWJsZSBmb3IgbG9vcGJhY2sgY2FsbHMuCi0gICAgaWYgKHBlZXJDb25uZWN0aW9u
UGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgcGNDb25zdHJhaW50cy5vcHRpb25hbC5hZGQo
Ci0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKERUTFNfU1JUUF9L
RVlfQUdSRUVNRU5UX0NPTlNUUkFJTlQsICJmYWxzZSIpKTsKLSAgICB9IGVsc2UgewotICAgICAg
cGNDb25zdHJhaW50cy5vcHRpb25hbC5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWlu
dHMuS2V5VmFsdWVQYWlyKERUTFNfU1JUUF9LRVlfQUdSRUVNRU5UX0NPTlNUUkFJTlQsICJ0cnVl
IikpOwotICAgIH0KLQotICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGEgY2FtZXJhIG9uIGRldmlj
ZSBhbmQgZGlzYWJsZSB2aWRlbyBjYWxsIGlmIG5vdC4KLSAgICBpZiAodmlkZW9DYXB0dXJlciA9
PSBudWxsKSB7Ci0gICAgICBMb2cudyhUQUcsICJObyBjYW1lcmEgb24gZGV2aWNlLiBTd2l0Y2gg
dG8gYXVkaW8gb25seSBjYWxsLiIpOwotICAgICAgdmlkZW9DYWxsRW5hYmxlZCA9IGZhbHNlOwot
ICAgIH0KLSAgICAvLyBDcmVhdGUgdmlkZW8gY29uc3RyYWludHMgaWYgdmlkZW8gY2FsbCBpcyBl
bmFibGVkLgotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICB2aWRlb1dpZHRoID0g
cGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvV2lkdGg7Ci0gICAgICB2aWRlb0hlaWdodCA9
IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0hlaWdodDsKLSAgICAgIHZpZGVvRnBzID0g
cGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvRnBzOwotCi0gICAgICAvLyBJZiB2aWRlbyBy
ZXNvbHV0aW9uIGlzIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHQgdG8gSEQuCi0gICAgICBpZiAodmlk
ZW9XaWR0aCA9PSAwIHx8IHZpZGVvSGVpZ2h0ID09IDApIHsKLSAgICAgICAgdmlkZW9XaWR0aCA9
IEhEX1ZJREVPX1dJRFRIOwotICAgICAgICB2aWRlb0hlaWdodCA9IEhEX1ZJREVPX0hFSUdIVDsK
LSAgICAgIH0KLQotICAgICAgLy8gSWYgZnBzIGlzIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHQgdG8g
MzAuCi0gICAgICBpZiAodmlkZW9GcHMgPT0gMCkgewotICAgICAgICB2aWRlb0ZwcyA9IDMwOwot
ICAgICAgfQotICAgICAgTG9nZ2luZy5kKFRBRywgIkNhcHR1cmluZyBmb3JtYXQ6ICIgKyB2aWRl
b1dpZHRoICsgIngiICsgdmlkZW9IZWlnaHQgKyAiQCIgKyB2aWRlb0Zwcyk7Ci0gICAgfQotCi0g
ICAgLy8gQ3JlYXRlIGF1ZGlvIGNvbnN0cmFpbnRzLgotICAgIGF1ZGlvQ29uc3RyYWludHMgPSBu
ZXcgTWVkaWFDb25zdHJhaW50cygpOwotICAgIC8vIGFkZGVkIGZvciBhdWRpbyBwZXJmb3JtYW5j
ZSBtZWFzdXJlbWVudHMKLSAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLm5vQXVkaW9Q
cm9jZXNzaW5nKSB7Ci0gICAgICBMb2cuZChUQUcsICJEaXNhYmxpbmcgYXVkaW8gcHJvY2Vzc2lu
ZyIpOwotICAgICAgYXVkaW9Db25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5l
dyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihBVURJT19FQ0hPX0NBTkNFTExBVElPTl9D
T05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAgICBhdWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5h
ZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKEFVRElPX0FV
VE9fR0FJTl9DT05UUk9MX0NPTlNUUkFJTlQsICJmYWxzZSIpKTsKLSAgICAgIGF1ZGlvQ29uc3Ry
YWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlW
YWx1ZVBhaXIoQVVESU9fSElHSF9QQVNTX0ZJTFRFUl9DT05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0g
ICAgICBhdWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlh
Q29uc3RyYWludHMuS2V5VmFsdWVQYWlyKEFVRElPX05PSVNFX1NVUFBSRVNTSU9OX0NPTlNUUkFJ
TlQsICJmYWxzZSIpKTsKLSAgICB9Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5l
bmFibGVMZXZlbENvbnRyb2wpIHsKLSAgICAgIExvZy5kKFRBRywgIkVuYWJsaW5nIGxldmVsIGNv
bnRyb2wuIik7Ci0gICAgICBhdWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAg
ICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKEFVRElPX0xFVkVMX0NPTlRST0xf
Q09OU1RSQUlOVCwgInRydWUiKSk7Ci0gICAgfQotICAgIC8vIENyZWF0ZSBTRFAgY29uc3RyYWlu
dHMuCi0gICAgc2RwTWVkaWFDb25zdHJhaW50cyA9IG5ldyBNZWRpYUNvbnN0cmFpbnRzKCk7Ci0g
ICAgc2RwTWVkaWFDb25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICBuZXcgTWVkaWFD
b25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoIk9mZmVyVG9SZWNlaXZlQXVkaW8iLCAidHJ1ZSIpKTsK
LSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCB8fCBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMubG9v
cGJhY2spIHsKLSAgICAgIHNkcE1lZGlhQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAg
ICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoIk9mZmVyVG9SZWNlaXZlVmlk
ZW8iLCAidHJ1ZSIpKTsKLSAgICB9IGVsc2UgewotICAgICAgc2RwTWVkaWFDb25zdHJhaW50cy5t
YW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFp
cigiT2ZmZXJUb1JlY2VpdmVWaWRlbyIsICJmYWxzZSIpKTsKLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgY3JlYXRlUGVlckNvbm5lY3Rpb25JbnRlcm5hbChFZ2xCYXNlLkNvbnRleHQgcmVu
ZGVyRUdMQ29udGV4dCkgewotICAgIGlmIChmYWN0b3J5ID09IG51bGwgfHwgaXNFcnJvcikgewot
ICAgICAgTG9nLmUoVEFHLCAiUGVlcmNvbm5lY3Rpb24gZmFjdG9yeSBpcyBub3QgY3JlYXRlZCIp
OwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDcmVhdGUgcGVlciBjb25u
ZWN0aW9uLiIpOwotCi0gICAgTG9nLmQoVEFHLCAiUENDb25zdHJhaW50czogIiArIHBjQ29uc3Ry
YWludHMudG9TdHJpbmcoKSk7Ci0gICAgcXVldWVkUmVtb3RlQ2FuZGlkYXRlcyA9IG5ldyBMaW5r
ZWRMaXN0PEljZUNhbmRpZGF0ZT4oKTsKLQotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0g
ICAgICBMb2cuZChUQUcsICJFR0xDb250ZXh0OiAiICsgcmVuZGVyRUdMQ29udGV4dCk7Ci0gICAg
ICBmYWN0b3J5LnNldFZpZGVvSHdBY2NlbGVyYXRpb25PcHRpb25zKHJlbmRlckVHTENvbnRleHQs
IHJlbmRlckVHTENvbnRleHQpOwotICAgIH0KLQotICAgIFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZp
Z3VyYXRpb24gcnRjQ29uZmlnID0KLSAgICAgICAgbmV3IFBlZXJDb25uZWN0aW9uLlJUQ0NvbmZp
Z3VyYXRpb24oc2lnbmFsaW5nUGFyYW1ldGVycy5pY2VTZXJ2ZXJzKTsKLSAgICAvLyBUQ1AgY2Fu
ZGlkYXRlcyBhcmUgb25seSB1c2VmdWwgd2hlbiBjb25uZWN0aW5nIHRvIGEgc2VydmVyIHRoYXQg
c3VwcG9ydHMKLSAgICAvLyBJQ0UtVENQLgotICAgIHJ0Y0NvbmZpZy50Y3BDYW5kaWRhdGVQb2xp
Y3kgPSBQZWVyQ29ubmVjdGlvbi5UY3BDYW5kaWRhdGVQb2xpY3kuRElTQUJMRUQ7Ci0gICAgcnRj
Q29uZmlnLmJ1bmRsZVBvbGljeSA9IFBlZXJDb25uZWN0aW9uLkJ1bmRsZVBvbGljeS5NQVhCVU5E
TEU7Ci0gICAgcnRjQ29uZmlnLnJ0Y3BNdXhQb2xpY3kgPSBQZWVyQ29ubmVjdGlvbi5SdGNwTXV4
UG9saWN5LlJFUVVJUkU7Ci0gICAgcnRjQ29uZmlnLmNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeSA9
IFBlZXJDb25uZWN0aW9uLkNvbnRpbnVhbEdhdGhlcmluZ1BvbGljeS5HQVRIRVJfQ09OVElOVUFM
TFk7Ci0gICAgLy8gVXNlIEVDRFNBIGVuY3J5cHRpb24uCi0gICAgcnRjQ29uZmlnLmtleVR5cGUg
PSBQZWVyQ29ubmVjdGlvbi5LZXlUeXBlLkVDRFNBOwotCi0gICAgcGVlckNvbm5lY3Rpb24gPSBm
YWN0b3J5LmNyZWF0ZVBlZXJDb25uZWN0aW9uKHJ0Y0NvbmZpZywgcGNDb25zdHJhaW50cywgcGNP
YnNlcnZlcik7Ci0gICAgaXNJbml0aWF0b3IgPSBmYWxzZTsKLQotICAgIC8vIFNldCBkZWZhdWx0
IFdlYlJUQyB0cmFjaW5nIGFuZCBJTkZPIGxpYmppbmdsZSBsb2dnaW5nLgotICAgIC8vIE5PVEU6
IHRoaXMgX211c3RfIGhhcHBlbiB3aGlsZSB8ZmFjdG9yeXwgaXMgYWxpdmUhCi0gICAgTG9nZ2lu
Zy5lbmFibGVUcmFjaW5nKCJsb2djYXQ6IiwgRW51bVNldC5vZihMb2dnaW5nLlRyYWNlTGV2ZWwu
VFJBQ0VfREVGQVVMVCkpOwotICAgIExvZ2dpbmcuZW5hYmxlTG9nVG9EZWJ1Z091dHB1dChMb2dn
aW5nLlNldmVyaXR5LkxTX0lORk8pOwotCi0gICAgbWVkaWFTdHJlYW0gPSBmYWN0b3J5LmNyZWF0
ZUxvY2FsTWVkaWFTdHJlYW0oIkFSREFNUyIpOwotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7
Ci0gICAgICBtZWRpYVN0cmVhbS5hZGRUcmFjayhjcmVhdGVWaWRlb1RyYWNrKHZpZGVvQ2FwdHVy
ZXIpKTsKLSAgICB9Ci0KLSAgICBtZWRpYVN0cmVhbS5hZGRUcmFjayhjcmVhdGVBdWRpb1RyYWNr
KCkpOwotICAgIHBlZXJDb25uZWN0aW9uLmFkZFN0cmVhbShtZWRpYVN0cmVhbSk7Ci0gICAgaWYg
KHZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIGZpbmRWaWRlb1NlbmRlcigpOwotICAgIH0KLQot
ICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuYWVjRHVtcCkgewotICAgICAgdHJ5IHsK
LSAgICAgICAgYWVjRHVtcEZpbGVEZXNjcmlwdG9yID0KLSAgICAgICAgICAgIFBhcmNlbEZpbGVE
ZXNjcmlwdG9yLm9wZW4obmV3IEZpbGUoRW52aXJvbm1lbnQuZ2V0RXh0ZXJuYWxTdG9yYWdlRGly
ZWN0b3J5KCkuZ2V0UGF0aCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArIEZpbGUuc2VwYXJhdG9yICsgIkRvd25sb2FkL2F1ZGlvLmFlY2R1bXAiKSwKLSAgICAg
ICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1JFQURfV1JJVEUgfCBQYXJjZWxG
aWxlRGVzY3JpcHRvci5NT0RFX0NSRUFURQotICAgICAgICAgICAgICAgICAgICB8IFBhcmNlbEZp
bGVEZXNjcmlwdG9yLk1PREVfVFJVTkNBVEUpOwotICAgICAgICBmYWN0b3J5LnN0YXJ0QWVjRHVt
cChhZWNEdW1wRmlsZURlc2NyaXB0b3IuZ2V0RmQoKSwgLTEpOwotICAgICAgfSBjYXRjaCAoSU9F
eGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShUQUcsICJDYW4gbm90IG9wZW4gYWVjZHVtcCBm
aWxlIiwgZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgTG9nLmQoVEFHLCAiUGVlciBjb25uZWN0
aW9uIGNyZWF0ZWQuIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2xvc2VJbnRlcm5hbCgpIHsK
LSAgICBpZiAoZmFjdG9yeSAhPSBudWxsICYmIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hZWNE
dW1wKSB7Ci0gICAgICBmYWN0b3J5LnN0b3BBZWNEdW1wKCk7Ci0gICAgfQotICAgIExvZy5kKFRB
RywgIkNsb3NpbmcgcGVlciBjb25uZWN0aW9uLiIpOwotICAgIHN0YXRzVGltZXIuY2FuY2VsKCk7
Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uICE9IG51bGwpIHsKLSAgICAgIHBlZXJDb25uZWN0aW9u
LmRpc3Bvc2UoKTsKLSAgICAgIHBlZXJDb25uZWN0aW9uID0gbnVsbDsKLSAgICB9Ci0gICAgTG9n
LmQoVEFHLCAiQ2xvc2luZyBhdWRpbyBzb3VyY2UuIik7Ci0gICAgaWYgKGF1ZGlvU291cmNlICE9
IG51bGwpIHsKLSAgICAgIGF1ZGlvU291cmNlLmRpc3Bvc2UoKTsKLSAgICAgIGF1ZGlvU291cmNl
ID0gbnVsbDsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiU3RvcHBpbmcgY2FwdHVyZS4iKTsKLSAg
ICBpZiAodmlkZW9DYXB0dXJlciAhPSBudWxsKSB7Ci0gICAgICB0cnkgewotICAgICAgICB2aWRl
b0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAg
fQotICAgICAgdmlkZW9DYXB0dXJlclN0b3BwZWQgPSB0cnVlOwotICAgICAgdmlkZW9DYXB0dXJl
ci5kaXNwb3NlKCk7Ci0gICAgICB2aWRlb0NhcHR1cmVyID0gbnVsbDsKLSAgICB9Ci0gICAgTG9n
LmQoVEFHLCAiQ2xvc2luZyB2aWRlbyBzb3VyY2UuIik7Ci0gICAgaWYgKHZpZGVvU291cmNlICE9
IG51bGwpIHsKLSAgICAgIHZpZGVvU291cmNlLmRpc3Bvc2UoKTsKLSAgICAgIHZpZGVvU291cmNl
ID0gbnVsbDsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiQ2xvc2luZyBwZWVyIGNvbm5lY3Rpb24g
ZmFjdG9yeS4iKTsKLSAgICBpZiAoZmFjdG9yeSAhPSBudWxsKSB7Ci0gICAgICBmYWN0b3J5LmRp
c3Bvc2UoKTsKLSAgICAgIGZhY3RvcnkgPSBudWxsOwotICAgIH0KLSAgICBvcHRpb25zID0gbnVs
bDsKLSAgICBMb2cuZChUQUcsICJDbG9zaW5nIHBlZXIgY29ubmVjdGlvbiBkb25lLiIpOwotICAg
IGV2ZW50cy5vblBlZXJDb25uZWN0aW9uQ2xvc2VkKCk7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0
b3J5LnN0b3BJbnRlcm5hbFRyYWNpbmdDYXB0dXJlKCk7Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0
b3J5LnNodXRkb3duSW50ZXJuYWxUcmFjZXIoKTsKLSAgfQotCi0gIHB1YmxpYyBib29sZWFuIGlz
SERWaWRlbygpIHsKLSAgICBpZiAoIXZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlkZW9XaWR0aCAqIHZpZGVvSGVpZ2h0ID49IDEy
ODAgKiA3MjA7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZ2V0U3RhdHMoKSB7Ci0gICAgaWYgKHBl
ZXJDb25uZWN0aW9uID09IG51bGwgfHwgaXNFcnJvcikgewotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBib29sZWFuIHN1Y2Nlc3MgPSBwZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhuZXcgU3RhdHNP
YnNlcnZlcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25Db21wbGV0
ZShmaW5hbCBTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHsKLSAgICAgICAgZXZlbnRzLm9uUGVlckNv
bm5lY3Rpb25TdGF0c1JlYWR5KHJlcG9ydHMpOwotICAgICAgfQotICAgIH0sIG51bGwpOwotICAg
IGlmICghc3VjY2VzcykgewotICAgICAgTG9nLmUoVEFHLCAiZ2V0U3RhdHMoKSByZXR1cm5zIGZh
bHNlISIpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVuYWJsZVN0YXRzRXZlbnRzKGJv
b2xlYW4gZW5hYmxlLCBpbnQgcGVyaW9kTXMpIHsKLSAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICB0
cnkgewotICAgICAgICBzdGF0c1RpbWVyLnNjaGVkdWxlKG5ldyBUaW1lclRhc2soKSB7Ci0gICAg
ICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAg
ICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgIEBPdmVy
cmlkZQotICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAgICAg
Z2V0U3RhdHMoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9LCAwLCBwZXJpb2RNcyk7Ci0gICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkg
ewotICAgICAgICBMb2cuZShUQUcsICJDYW4gbm90IHNjaGVkdWxlIHN0YXRpc3RpY3MgdGltZXIi
LCBlKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgc3RhdHNUaW1lci5jYW5jZWwoKTsK
LSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRBdWRpb0VuYWJsZWQoZmluYWwgYm9vbGVh
biBlbmFibGUpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAg
IEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBlbmFibGVBdWRp
byA9IGVuYWJsZTsKLSAgICAgICAgaWYgKGxvY2FsQXVkaW9UcmFjayAhPSBudWxsKSB7Ci0gICAg
ICAgICAgbG9jYWxBdWRpb1RyYWNrLnNldEVuYWJsZWQoZW5hYmxlQXVkaW8pOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRWaWRlb0VuYWJsZWQo
ZmluYWwgYm9vbGVhbiBlbmFibGUpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICByZW5kZXJWaWRlbyA9IGVuYWJsZTsKLSAgICAgICAgaWYgKGxvY2FsVmlkZW9UcmFjayAhPSBu
dWxsKSB7Ci0gICAgICAgICAgbG9jYWxWaWRlb1RyYWNrLnNldEVuYWJsZWQocmVuZGVyVmlkZW8p
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChyZW1vdGVWaWRlb1RyYWNrICE9IG51bGwpIHsKLSAg
ICAgICAgICByZW1vdGVWaWRlb1RyYWNrLnNldEVuYWJsZWQocmVuZGVyVmlkZW8pOwotICAgICAg
ICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVPZmZlcigp
IHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24g
IT0gbnVsbCAmJiAhaXNFcnJvcikgewotICAgICAgICAgIExvZy5kKFRBRywgIlBDIENyZWF0ZSBP
RkZFUiIpOwotICAgICAgICAgIGlzSW5pdGlhdG9yID0gdHJ1ZTsKLSAgICAgICAgICBwZWVyQ29u
bmVjdGlvbi5jcmVhdGVPZmZlcihzZHBPYnNlcnZlciwgc2RwTWVkaWFDb25zdHJhaW50cyk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0ZUFu
c3dlcigpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5l
Y3Rpb24gIT0gbnVsbCAmJiAhaXNFcnJvcikgewotICAgICAgICAgIExvZy5kKFRBRywgIlBDIGNy
ZWF0ZSBBTlNXRVIiKTsKLSAgICAgICAgICBpc0luaXRpYXRvciA9IGZhbHNlOwotICAgICAgICAg
IHBlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihzZHBPYnNlcnZlciwgc2RwTWVkaWFDb25zdHJh
aW50cyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IGFkZFJlbW90ZUljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0g
ICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uICE9IG51
bGwgJiYgIWlzRXJyb3IpIHsKLSAgICAgICAgICBpZiAocXVldWVkUmVtb3RlQ2FuZGlkYXRlcyAh
PSBudWxsKSB7Ci0gICAgICAgICAgICBxdWV1ZWRSZW1vdGVDYW5kaWRhdGVzLmFkZChjYW5kaWRh
dGUpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRJ
Y2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0K
LSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlbW92ZVJlbW90ZUljZUNhbmRpZGF0ZXMo
ZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbiA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRHJhaW4gdGhlIHF1ZXVlZCBy
ZW1vdGUgY2FuZGlkYXRlcyBpZiB0aGVyZSBpcyBhbnkgc28gdGhhdAotICAgICAgICAvLyB0aGV5
IGFyZSBwcm9jZXNzZWQgaW4gdGhlIHByb3BlciBvcmRlci4KLSAgICAgICAgZHJhaW5DYW5kaWRh
dGVzKCk7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUljZUNhbmRpZGF0ZXMoY2FuZGlk
YXRlcyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRSZW1vdGVE
ZXNjcmlwdGlvbihmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgZXhlY3V0b3Iu
ZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51bGwgfHwgaXNFcnJv
cikgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgc2RwRGVz
Y3JpcHRpb24gPSBzZHAuZGVzY3JpcHRpb247Ci0gICAgICAgIGlmIChwcmVmZXJJc2FjKSB7Ci0g
ICAgICAgICAgc2RwRGVzY3JpcHRpb24gPSBwcmVmZXJDb2RlYyhzZHBEZXNjcmlwdGlvbiwgQVVE
SU9fQ09ERUNfSVNBQywgdHJ1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZpZGVvQ2FsbEVu
YWJsZWQpIHsKLSAgICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHByZWZlckNvZGVjKHNkcERlc2Ny
aXB0aW9uLCBwcmVmZXJyZWRWaWRlb0NvZGVjLCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hdWRpb1N0YXJ0Qml0cmF0ZSA+IDApIHsKLSAg
ICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHNldFN0YXJ0Qml0cmF0ZSgKLSAgICAgICAgICAgICAg
QVVESU9fQ09ERUNfT1BVUywgZmFsc2UsIHNkcERlc2NyaXB0aW9uLCBwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMuYXVkaW9TdGFydEJpdHJhdGUpOwotICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRB
RywgIlNldCByZW1vdGUgU0RQLiIpOwotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24gc2RwUmVt
b3RlID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbihzZHAudHlwZSwgc2RwRGVzY3JpcHRpb24pOwot
ICAgICAgICBwZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHBPYnNlcnZlciwg
c2RwUmVtb3RlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHN0b3BW
aWRlb1NvdXJjZSgpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAodmlk
ZW9DYXB0dXJlciAhPSBudWxsICYmICF2aWRlb0NhcHR1cmVyU3RvcHBlZCkgewotICAgICAgICAg
IExvZy5kKFRBRywgIlN0b3AgdmlkZW8gc291cmNlLiIpOwotICAgICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgICB2aWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgICAgICAgfSBjYXRjaCAo
SW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgIH0KLSAgICAgICAgICB2aWRlb0Nh
cHR1cmVyU3RvcHBlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHN0YXJ0VmlkZW9Tb3VyY2UoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0
ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgaWYgKHZpZGVvQ2FwdHVyZXIgIT0gbnVsbCAmJiB2aWRlb0NhcHR1cmVy
U3RvcHBlZCkgewotICAgICAgICAgIExvZy5kKFRBRywgIlJlc3RhcnQgdmlkZW8gc291cmNlLiIp
OwotICAgICAgICAgIHZpZGVvQ2FwdHVyZXIuc3RhcnRDYXB0dXJlKHZpZGVvV2lkdGgsIHZpZGVv
SGVpZ2h0LCB2aWRlb0Zwcyk7Ci0gICAgICAgICAgdmlkZW9DYXB0dXJlclN0b3BwZWQgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0
VmlkZW9NYXhCaXRyYXRlKGZpbmFsIEludGVnZXIgbWF4Qml0cmF0ZUticHMpIHsKLSAgICBleGVj
dXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBs
b2NhbFZpZGVvU2VuZGVyID09IG51bGwgfHwgaXNFcnJvcikgewotICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcsICJSZXF1ZXN0ZWQgbWF4IHZpZGVvIGJpdHJh
dGU6ICIgKyBtYXhCaXRyYXRlS2Jwcyk7Ci0gICAgICAgIGlmIChsb2NhbFZpZGVvU2VuZGVyID09
IG51bGwpIHsKLSAgICAgICAgICBMb2cudyhUQUcsICJTZW5kZXIgaXMgbm90IHJlYWR5LiIpOwot
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIFJ0cFBhcmFtZXRlcnMgcGFy
YW1ldGVycyA9IGxvY2FsVmlkZW9TZW5kZXIuZ2V0UGFyYW1ldGVycygpOwotICAgICAgICBpZiAo
cGFyYW1ldGVycy5lbmNvZGluZ3Muc2l6ZSgpID09IDApIHsKLSAgICAgICAgICBMb2cudyhUQUcs
ICJSdHBQYXJhbWV0ZXJzIGFyZSBub3QgcmVhZHkuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZm9yIChSdHBQYXJhbWV0ZXJzLkVuY29kaW5nIGVuY29kaW5nIDog
cGFyYW1ldGVycy5lbmNvZGluZ3MpIHsKLSAgICAgICAgICAvLyBOdWxsIHZhbHVlIG1lYW5zIG5v
IGxpbWl0LgotICAgICAgICAgIGVuY29kaW5nLm1heEJpdHJhdGVCcHMgPSBtYXhCaXRyYXRlS2Jw
cyA9PSBudWxsID8gbnVsbCA6IG1heEJpdHJhdGVLYnBzICogQlBTX0lOX0tCUFM7Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFsb2NhbFZpZGVvU2VuZGVyLnNldFBhcmFtZXRlcnMocGFyYW1ldGVy
cykpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJSdHBTZW5kZXIuc2V0UGFyYW1ldGVycyBmYWls
ZWQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgTG9nLmQoVEFHLCAiQ29uZmlndXJlZCBtYXggdmlk
ZW8gYml0cmF0ZSB0bzogIiArIG1heEJpdHJhdGVLYnBzKTsKLSAgICAgIH0KLSAgICB9KTsKLSAg
fQotCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcihmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdl
KSB7Ci0gICAgTG9nLmUoVEFHLCAiUGVlcmNvbm5lY3Rpb24gZXJyb3I6ICIgKyBlcnJvck1lc3Nh
Z2UpOwotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICghaXNFcnJvcikgewot
ICAgICAgICAgIGV2ZW50cy5vblBlZXJDb25uZWN0aW9uRXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAg
ICAgICAgICBpc0Vycm9yID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9
Ci0KLSAgcHJpdmF0ZSBBdWRpb1RyYWNrIGNyZWF0ZUF1ZGlvVHJhY2soKSB7Ci0gICAgYXVkaW9T
b3VyY2UgPSBmYWN0b3J5LmNyZWF0ZUF1ZGlvU291cmNlKGF1ZGlvQ29uc3RyYWludHMpOwotICAg
IGxvY2FsQXVkaW9UcmFjayA9IGZhY3RvcnkuY3JlYXRlQXVkaW9UcmFjayhBVURJT19UUkFDS19J
RCwgYXVkaW9Tb3VyY2UpOwotICAgIGxvY2FsQXVkaW9UcmFjay5zZXRFbmFibGVkKGVuYWJsZUF1
ZGlvKTsKLSAgICByZXR1cm4gbG9jYWxBdWRpb1RyYWNrOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRl
b1RyYWNrIGNyZWF0ZVZpZGVvVHJhY2soVmlkZW9DYXB0dXJlciBjYXB0dXJlcikgewotICAgIHZp
ZGVvU291cmNlID0gZmFjdG9yeS5jcmVhdGVWaWRlb1NvdXJjZShjYXB0dXJlcik7Ci0gICAgY2Fw
dHVyZXIuc3RhcnRDYXB0dXJlKHZpZGVvV2lkdGgsIHZpZGVvSGVpZ2h0LCB2aWRlb0Zwcyk7Ci0K
LSAgICBsb2NhbFZpZGVvVHJhY2sgPSBmYWN0b3J5LmNyZWF0ZVZpZGVvVHJhY2soVklERU9fVFJB
Q0tfSUQsIHZpZGVvU291cmNlKTsKLSAgICBsb2NhbFZpZGVvVHJhY2suc2V0RW5hYmxlZChyZW5k
ZXJWaWRlbyk7Ci0gICAgbG9jYWxWaWRlb1RyYWNrLmFkZFJlbmRlcmVyKG5ldyBWaWRlb1JlbmRl
cmVyKGxvY2FsUmVuZGVyKSk7Ci0gICAgcmV0dXJuIGxvY2FsVmlkZW9UcmFjazsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBmaW5kVmlkZW9TZW5kZXIoKSB7Ci0gICAgZm9yIChSdHBTZW5kZXIgc2Vu
ZGVyIDogcGVlckNvbm5lY3Rpb24uZ2V0U2VuZGVycygpKSB7Ci0gICAgICBpZiAoc2VuZGVyLnRy
YWNrKCkgIT0gbnVsbCkgewotICAgICAgICBTdHJpbmcgdHJhY2tUeXBlID0gc2VuZGVyLnRyYWNr
KCkua2luZCgpOwotICAgICAgICBpZiAodHJhY2tUeXBlLmVxdWFscyhWSURFT19UUkFDS19UWVBF
KSkgewotICAgICAgICAgIExvZy5kKFRBRywgIkZvdW5kIHZpZGVvIHNlbmRlci4iKTsKLSAgICAg
ICAgICBsb2NhbFZpZGVvU2VuZGVyID0gc2VuZGVyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHNldFN0YXJ0Qml0cmF0ZSgKLSAgICAg
IFN0cmluZyBjb2RlYywgYm9vbGVhbiBpc1ZpZGVvQ29kZWMsIFN0cmluZyBzZHBEZXNjcmlwdGlv
biwgaW50IGJpdHJhdGVLYnBzKSB7Ci0gICAgU3RyaW5nW10gbGluZXMgPSBzZHBEZXNjcmlwdGlv
bi5zcGxpdCgiXHJcbiIpOwotICAgIGludCBydHBtYXBMaW5lSW5kZXggPSAtMTsKLSAgICBib29s
ZWFuIHNkcEZvcm1hdFVwZGF0ZWQgPSBmYWxzZTsKLSAgICBTdHJpbmcgY29kZWNSdHBNYXAgPSBu
dWxsOwotICAgIC8vIFNlYXJjaCBmb3IgY29kZWMgcnRwbWFwIGluIGZvcm1hdAotICAgIC8vIGE9
cnRwbWFwOjxwYXlsb2FkIHR5cGU+IDxlbmNvZGluZyBuYW1lPi88Y2xvY2sgcmF0ZT4gWy88ZW5j
b2RpbmcgcGFyYW1ldGVycz5dCi0gICAgU3RyaW5nIHJlZ2V4ID0gIl5hPXJ0cG1hcDooXFxkKykg
IiArIGNvZGVjICsgIigvXFxkKykrW1xyXT8kIjsKLSAgICBQYXR0ZXJuIGNvZGVjUGF0dGVybiA9
IFBhdHRlcm4uY29tcGlsZShyZWdleCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5lcy5s
ZW5ndGg7IGkrKykgewotICAgICAgTWF0Y2hlciBjb2RlY01hdGNoZXIgPSBjb2RlY1BhdHRlcm4u
bWF0Y2hlcihsaW5lc1tpXSk7Ci0gICAgICBpZiAoY29kZWNNYXRjaGVyLm1hdGNoZXMoKSkgewot
ICAgICAgICBjb2RlY1J0cE1hcCA9IGNvZGVjTWF0Y2hlci5ncm91cCgxKTsKLSAgICAgICAgcnRw
bWFwTGluZUluZGV4ID0gaTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIGlm
IChjb2RlY1J0cE1hcCA9PSBudWxsKSB7Ci0gICAgICBMb2cudyhUQUcsICJObyBydHBtYXAgZm9y
ICIgKyBjb2RlYyArICIgY29kZWMiKTsKLSAgICAgIHJldHVybiBzZHBEZXNjcmlwdGlvbjsKLSAg
ICB9Ci0gICAgTG9nLmQoVEFHLCAiRm91bmQgIiArIGNvZGVjICsgIiBydHBtYXAgIiArIGNvZGVj
UnRwTWFwICsgIiBhdCAiICsgbGluZXNbcnRwbWFwTGluZUluZGV4XSk7Ci0KLSAgICAvLyBDaGVj
ayBpZiBhPWZtdHAgc3RyaW5nIGFscmVhZHkgZXhpc3QgaW4gcmVtb3RlIFNEUCBmb3IgdGhpcyBj
b2RlYyBhbmQKLSAgICAvLyB1cGRhdGUgaXQgd2l0aCBuZXcgYml0cmF0ZSBwYXJhbWV0ZXIuCi0g
ICAgcmVnZXggPSAiXmE9Zm10cDoiICsgY29kZWNSdHBNYXAgKyAiIFxcdys9XFxkKy4qW1xyXT8k
IjsKLSAgICBjb2RlY1BhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIE1hdGNoZXIgY29kZWNN
YXRjaGVyID0gY29kZWNQYXR0ZXJuLm1hdGNoZXIobGluZXNbaV0pOwotICAgICAgaWYgKGNvZGVj
TWF0Y2hlci5tYXRjaGVzKCkpIHsKLSAgICAgICAgTG9nLmQoVEFHLCAiRm91bmQgIiArIGNvZGVj
ICsgIiAiICsgbGluZXNbaV0pOwotICAgICAgICBpZiAoaXNWaWRlb0NvZGVjKSB7Ci0gICAgICAg
ICAgbGluZXNbaV0gKz0gIjsgIiArIFZJREVPX0NPREVDX1BBUkFNX1NUQVJUX0JJVFJBVEUgKyAi
PSIgKyBiaXRyYXRlS2JwczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBsaW5lc1tpXSAr
PSAiOyAiICsgQVVESU9fQ09ERUNfUEFSQU1fQklUUkFURSArICI9IiArIChiaXRyYXRlS2JwcyAq
IDEwMDApOwotICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRBRywgIlVwZGF0ZSByZW1vdGUgU0RQ
IGxpbmU6ICIgKyBsaW5lc1tpXSk7Ci0gICAgICAgIHNkcEZvcm1hdFVwZGF0ZWQgPSB0cnVlOwot
ICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBTdHJpbmdCdWlsZGVyIG5ld1Nk
cERlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBuZXdTZHBEZXNjcmlwdGlvbi5hcHBlbmQo
bGluZXNbaV0pLmFwcGVuZCgiXHJcbiIpOwotICAgICAgLy8gQXBwZW5kIG5ldyBhPWZtdHAgbGlu
ZSBpZiBubyBzdWNoIGxpbmUgZXhpc3QgZm9yIGEgY29kZWMuCi0gICAgICBpZiAoIXNkcEZvcm1h
dFVwZGF0ZWQgJiYgaSA9PSBydHBtYXBMaW5lSW5kZXgpIHsKLSAgICAgICAgU3RyaW5nIGJpdHJh
dGVTZXQ7Ci0gICAgICAgIGlmIChpc1ZpZGVvQ29kZWMpIHsKLSAgICAgICAgICBiaXRyYXRlU2V0
ID0KLSAgICAgICAgICAgICAgImE9Zm10cDoiICsgY29kZWNSdHBNYXAgKyAiICIgKyBWSURFT19D
T0RFQ19QQVJBTV9TVEFSVF9CSVRSQVRFICsgIj0iICsgYml0cmF0ZUticHM7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgYml0cmF0ZVNldCA9ICJhPWZtdHA6IiArIGNvZGVjUnRwTWFwICsg
IiAiICsgQVVESU9fQ09ERUNfUEFSQU1fQklUUkFURSArICI9IgotICAgICAgICAgICAgICArIChi
aXRyYXRlS2JwcyAqIDEwMDApOwotICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRBRywgIkFkZCBy
ZW1vdGUgU0RQIGxpbmU6ICIgKyBiaXRyYXRlU2V0KTsKLSAgICAgICAgbmV3U2RwRGVzY3JpcHRp
b24uYXBwZW5kKGJpdHJhdGVTZXQpLmFwcGVuZCgiXHJcbiIpOwotICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gbmV3U2RwRGVzY3JpcHRpb24udG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIFN0cmluZyBwcmVmZXJDb2RlYyhTdHJpbmcgc2RwRGVzY3JpcHRpb24sIFN0cmluZyBj
b2RlYywgYm9vbGVhbiBpc0F1ZGlvKSB7Ci0gICAgU3RyaW5nW10gbGluZXMgPSBzZHBEZXNjcmlw
dGlvbi5zcGxpdCgiXHJcbiIpOwotICAgIGludCBtTGluZUluZGV4ID0gLTE7Ci0gICAgU3RyaW5n
IGNvZGVjUnRwTWFwID0gbnVsbDsKLSAgICAvLyBhPXJ0cG1hcDo8cGF5bG9hZCB0eXBlPiA8ZW5j
b2RpbmcgbmFtZT4vPGNsb2NrIHJhdGU+IFsvPGVuY29kaW5nIHBhcmFtZXRlcnM+XQotICAgIFN0
cmluZyByZWdleCA9ICJeYT1ydHBtYXA6KFxcZCspICIgKyBjb2RlYyArICIoL1xcZCspK1tccl0/
JCI7Ci0gICAgUGF0dGVybiBjb2RlY1BhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUocmVnZXgpOwot
ICAgIFN0cmluZyBtZWRpYURlc2NyaXB0aW9uID0gIm09dmlkZW8gIjsKLSAgICBpZiAoaXNBdWRp
bykgewotICAgICAgbWVkaWFEZXNjcmlwdGlvbiA9ICJtPWF1ZGlvICI7Ci0gICAgfQotICAgIGZv
ciAoaW50IGkgPSAwOyAoaSA8IGxpbmVzLmxlbmd0aCkgJiYgKG1MaW5lSW5kZXggPT0gLTEgfHwg
Y29kZWNSdHBNYXAgPT0gbnVsbCk7IGkrKykgewotICAgICAgaWYgKGxpbmVzW2ldLnN0YXJ0c1dp
dGgobWVkaWFEZXNjcmlwdGlvbikpIHsKLSAgICAgICAgbUxpbmVJbmRleCA9IGk7Ci0gICAgICAg
IGNvbnRpbnVlOwotICAgICAgfQotICAgICAgTWF0Y2hlciBjb2RlY01hdGNoZXIgPSBjb2RlY1Bh
dHRlcm4ubWF0Y2hlcihsaW5lc1tpXSk7Ci0gICAgICBpZiAoY29kZWNNYXRjaGVyLm1hdGNoZXMo
KSkgewotICAgICAgICBjb2RlY1J0cE1hcCA9IGNvZGVjTWF0Y2hlci5ncm91cCgxKTsKLSAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKG1MaW5lSW5kZXggPT0gLTEpIHsKLSAgICAgIExvZy53KFRBRywg
Ik5vICIgKyBtZWRpYURlc2NyaXB0aW9uICsgIiBsaW5lLCBzbyBjYW4ndCBwcmVmZXIgIiArIGNv
ZGVjKTsKLSAgICAgIHJldHVybiBzZHBEZXNjcmlwdGlvbjsKLSAgICB9Ci0gICAgaWYgKGNvZGVj
UnRwTWFwID09IG51bGwpIHsKLSAgICAgIExvZy53KFRBRywgIk5vIHJ0cG1hcCBmb3IgIiArIGNv
ZGVjKTsKLSAgICAgIHJldHVybiBzZHBEZXNjcmlwdGlvbjsKLSAgICB9Ci0gICAgTG9nLmQoVEFH
LCAiRm91bmQgIiArIGNvZGVjICsgIiBydHBtYXAgIiArIGNvZGVjUnRwTWFwICsgIiwgcHJlZmVy
IGF0ICIgKyBsaW5lc1ttTGluZUluZGV4XSk7Ci0gICAgU3RyaW5nW10gb3JpZ01MaW5lUGFydHMg
PSBsaW5lc1ttTGluZUluZGV4XS5zcGxpdCgiICIpOwotICAgIGlmIChvcmlnTUxpbmVQYXJ0cy5s
ZW5ndGggPiAzKSB7Ci0gICAgICBTdHJpbmdCdWlsZGVyIG5ld01MaW5lID0gbmV3IFN0cmluZ0J1
aWxkZXIoKTsKLSAgICAgIGludCBvcmlnUGFydEluZGV4ID0gMDsKLSAgICAgIC8vIEZvcm1hdCBp
czogbT08bWVkaWE+IDxwb3J0PiA8cHJvdG8+IDxmbXQ+IC4uLgotICAgICAgbmV3TUxpbmUuYXBw
ZW5kKG9yaWdNTGluZVBhcnRzW29yaWdQYXJ0SW5kZXgrK10pLmFwcGVuZCgiICIpOwotICAgICAg
bmV3TUxpbmUuYXBwZW5kKG9yaWdNTGluZVBhcnRzW29yaWdQYXJ0SW5kZXgrK10pLmFwcGVuZCgi
ICIpOwotICAgICAgbmV3TUxpbmUuYXBwZW5kKG9yaWdNTGluZVBhcnRzW29yaWdQYXJ0SW5kZXgr
K10pLmFwcGVuZCgiICIpOwotICAgICAgbmV3TUxpbmUuYXBwZW5kKGNvZGVjUnRwTWFwKTsKLSAg
ICAgIGZvciAoOyBvcmlnUGFydEluZGV4IDwgb3JpZ01MaW5lUGFydHMubGVuZ3RoOyBvcmlnUGFy
dEluZGV4KyspIHsKLSAgICAgICAgaWYgKCFvcmlnTUxpbmVQYXJ0c1tvcmlnUGFydEluZGV4XS5l
cXVhbHMoY29kZWNSdHBNYXApKSB7Ci0gICAgICAgICAgbmV3TUxpbmUuYXBwZW5kKCIgIikuYXBw
ZW5kKG9yaWdNTGluZVBhcnRzW29yaWdQYXJ0SW5kZXhdKTsKLSAgICAgICAgfQotICAgICAgfQot
ICAgICAgbGluZXNbbUxpbmVJbmRleF0gPSBuZXdNTGluZS50b1N0cmluZygpOwotICAgICAgTG9n
LmQoVEFHLCAiQ2hhbmdlIG1lZGlhIGRlc2NyaXB0aW9uOiAiICsgbGluZXNbbUxpbmVJbmRleF0p
OwotICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZShUQUcsICJXcm9uZyBTRFAgbWVkaWEgZGVzY3Jp
cHRpb24gZm9ybWF0OiAiICsgbGluZXNbbUxpbmVJbmRleF0pOwotICAgIH0KLSAgICBTdHJpbmdC
dWlsZGVyIG5ld1NkcERlc2NyaXB0aW9uID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBmb3Ig
KFN0cmluZyBsaW5lIDogbGluZXMpIHsKLSAgICAgIG5ld1NkcERlc2NyaXB0aW9uLmFwcGVuZChs
aW5lKS5hcHBlbmQoIlxyXG4iKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ld1NkcERlc2NyaXB0aW9u
LnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZHJhaW5DYW5kaWRhdGVzKCkgewot
ICAgIGlmIChxdWV1ZWRSZW1vdGVDYW5kaWRhdGVzICE9IG51bGwpIHsKLSAgICAgIExvZy5kKFRB
RywgIkFkZCAiICsgcXVldWVkUmVtb3RlQ2FuZGlkYXRlcy5zaXplKCkgKyAiIHJlbW90ZSBjYW5k
aWRhdGVzIik7Ci0gICAgICBmb3IgKEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgOiBxdWV1ZWRSZW1v
dGVDYW5kaWRhdGVzKSB7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLmFkZEljZUNhbmRpZGF0ZShj
YW5kaWRhdGUpOwotICAgICAgfQotICAgICAgcXVldWVkUmVtb3RlQ2FuZGlkYXRlcyA9IG51bGw7
Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN3aXRjaENhbWVyYUludGVybmFsKCkgewot
ICAgIGlmICh2aWRlb0NhcHR1cmVyIGluc3RhbmNlb2YgQ2FtZXJhVmlkZW9DYXB0dXJlcikgewot
ICAgICAgaWYgKCF2aWRlb0NhbGxFbmFibGVkIHx8IGlzRXJyb3IgfHwgdmlkZW9DYXB0dXJlciA9
PSBudWxsKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBzd2l0Y2ggY2FtZXJhLiBW
aWRlbzogIiArIHZpZGVvQ2FsbEVuYWJsZWQgKyAiLiBFcnJvciA6ICIgKyBpc0Vycm9yKTsKLSAg
ICAgICAgcmV0dXJuOyAvLyBObyB2aWRlbyBpcyBzZW50IG9yIG9ubHkgb25lIGNhbWVyYSBpcyBh
dmFpbGFibGUgb3IgZXJyb3IgaGFwcGVuZWQuCi0gICAgICB9Ci0gICAgICBMb2cuZChUQUcsICJT
d2l0Y2ggY2FtZXJhIik7Ci0gICAgICBDYW1lcmFWaWRlb0NhcHR1cmVyIGNhbWVyYVZpZGVvQ2Fw
dHVyZXIgPSAoQ2FtZXJhVmlkZW9DYXB0dXJlcikgdmlkZW9DYXB0dXJlcjsKLSAgICAgIGNhbWVy
YVZpZGVvQ2FwdHVyZXIuc3dpdGNoQ2FtZXJhKG51bGwpOwotICAgIH0gZWxzZSB7Ci0gICAgICBM
b2cuZChUQUcsICJXaWxsIG5vdCBzd2l0Y2ggY2FtZXJhLCB2aWRlbyBjYXB1dHVyZXIgaXMgbm90
IGEgY2FtZXJhIik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc3dpdGNoQ2FtZXJhKCkg
ewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHN3aXRjaENhbWVyYUludGVybmFs
KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjaGFuZ2VDYXB0dXJl
Rm9ybWF0KGZpbmFsIGludCB3aWR0aCwgZmluYWwgaW50IGhlaWdodCwgZmluYWwgaW50IGZyYW1l
cmF0ZSkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNoYW5nZUNhcHR1cmVG
b3JtYXRJbnRlcm5hbCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNoYW5nZUNhcHR1cmVGb3JtYXRJbnRlcm5hbChpbnQg
d2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICBpZiAoIXZpZGVvQ2FsbEVu
YWJsZWQgfHwgaXNFcnJvciB8fCB2aWRlb0NhcHR1cmVyID09IG51bGwpIHsKLSAgICAgIExvZy5l
KFRBRywKLSAgICAgICAgICAiRmFpbGVkIHRvIGNoYW5nZSBjYXB0dXJlIGZvcm1hdC4gVmlkZW86
ICIgKyB2aWRlb0NhbGxFbmFibGVkICsgIi4gRXJyb3IgOiAiICsgaXNFcnJvcik7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIExvZy5kKFRBRywgImNoYW5nZUNhcHR1cmVGb3JtYXQ6ICIgKyB3
aWR0aCArICJ4IiArIGhlaWdodCArICJAIiArIGZyYW1lcmF0ZSk7Ci0gICAgdmlkZW9Tb3VyY2Uu
YWRhcHRPdXRwdXRGb3JtYXQod2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgfQotCi0gIC8v
IEltcGxlbWVudGF0aW9uIGRldGFpbDogb2JzZXJ2ZSBJQ0UgJiBzdHJlYW0gY2hhbmdlcyBhbmQg
cmVhY3QgYWNjb3JkaW5nbHkuCi0gIHByaXZhdGUgY2xhc3MgUENPYnNlcnZlciBpbXBsZW1lbnRz
IFBlZXJDb25uZWN0aW9uLk9ic2VydmVyIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9p
ZCBvbkljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgICBl
eGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBldmVudHMub25JY2VDYW5kaWRhdGUo
Y2FuZGlkYXRlKTsKLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRh
dGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgICBldmVudHMub25JY2VDYW5kaWRhdGVzUmVtb3ZlZChjYW5kaWRhdGVzKTsKLSAgICAgICAg
fQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25T
aWduYWxpbmdDaGFuZ2UoUGVlckNvbm5lY3Rpb24uU2lnbmFsaW5nU3RhdGUgbmV3U3RhdGUpIHsK
LSAgICAgIExvZy5kKFRBRywgIlNpZ25hbGluZ1N0YXRlOiAiICsgbmV3U3RhdGUpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZShm
aW5hbCBQZWVyQ29ubmVjdGlvbi5JY2VDb25uZWN0aW9uU3RhdGUgbmV3U3RhdGUpIHsKLSAgICAg
IGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIExvZy5kKFRBRywgIkljZUNvbm5l
Y3Rpb25TdGF0ZTogIiArIG5ld1N0YXRlKTsKLSAgICAgICAgICBpZiAobmV3U3RhdGUgPT0gSWNl
Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgICAgZXZlbnRzLm9uSWNlQ29u
bmVjdGVkKCk7Ci0gICAgICAgICAgfSBlbHNlIGlmIChuZXdTdGF0ZSA9PSBJY2VDb25uZWN0aW9u
U3RhdGUuRElTQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgICBldmVudHMub25JY2VEaXNjb25uZWN0
ZWQoKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG5ld1N0YXRlID09IEljZUNvbm5lY3Rpb25TdGF0
ZS5GQUlMRUQpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJJQ0UgY29ubmVjdGlvbiBmYWls
ZWQuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUdhdGhlcmluZ0NoYW5nZShQZWVyQ29ubmVj
dGlvbi5JY2VHYXRoZXJpbmdTdGF0ZSBuZXdTdGF0ZSkgewotICAgICAgTG9nLmQoVEFHLCAiSWNl
R2F0aGVyaW5nU3RhdGU6ICIgKyBuZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgb25JY2VDb25uZWN0aW9uUmVjZWl2aW5nQ2hhbmdlKGJvb2xlYW4gcmVj
ZWl2aW5nKSB7Ci0gICAgICBMb2cuZChUQUcsICJJY2VDb25uZWN0aW9uUmVjZWl2aW5nIGNoYW5n
ZWQgdG8gIiArIHJlY2VpdmluZyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25BZGRTdHJlYW0oZmluYWwgTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAgICBleGVj
dXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24gPT0gbnVs
bCB8fCBpc0Vycm9yKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAg
ICAgIGlmIChzdHJlYW0uYXVkaW9UcmFja3Muc2l6ZSgpID4gMSB8fCBzdHJlYW0udmlkZW9UcmFj
a3Muc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoIldlaXJkLWxvb2tpbmcg
c3RyZWFtOiAiICsgc3RyZWFtKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0g
ICAgICAgICAgaWYgKHN0cmVhbS52aWRlb1RyYWNrcy5zaXplKCkgPT0gMSkgewotICAgICAgICAg
ICAgcmVtb3RlVmlkZW9UcmFjayA9IHN0cmVhbS52aWRlb1RyYWNrcy5nZXQoMCk7Ci0gICAgICAg
ICAgICByZW1vdGVWaWRlb1RyYWNrLnNldEVuYWJsZWQocmVuZGVyVmlkZW8pOwotICAgICAgICAg
ICAgZm9yIChWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW1vdGVSZW5kZXIgOiByZW1vdGVSZW5k
ZXJzKSB7Ci0gICAgICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2suYWRkUmVuZGVyZXIobmV3IFZp
ZGVvUmVuZGVyZXIocmVtb3RlUmVuZGVyKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvblJlbW92ZVN0cmVhbShmaW5hbCBNZWRpYVN0cmVhbSBzdHJlYW0pIHsKLSAgICAgIGV4
ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2sgPSBudWxs
OwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBvbkRhdGFDaGFubmVsKGZpbmFsIERhdGFDaGFubmVsIGRjKSB7Ci0gICAgICByZXBv
cnRFcnJvcigiQXBwUlRDIGRvZXNuJ3QgdXNlIGRhdGEgY2hhbm5lbHMsIGJ1dCBnb3Q6ICIgKyBk
Yy5sYWJlbCgpICsgIiBhbnl3YXkhIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgb25SZW5lZ290aWF0aW9uTmVlZGVkKCkgewotICAgICAgLy8gTm8gbmVlZCB0byBk
byBhbnl0aGluZzsgQXBwUlRDIGZvbGxvd3MgYSBwcmUtYWdyZWVkLXVwb24KLSAgICAgIC8vIHNp
Z25hbGluZy9uZWdvdGlhdGlvbiBwcm90b2NvbC4KLSAgICB9Ci0gIH0KLQotICAvLyBJbXBsZW1l
bnRhdGlvbiBkZXRhaWw6IGhhbmRsZSBvZmZlciBjcmVhdGlvbi9zaWduYWxpbmcgYW5kIGFuc3dl
ciBzZXR0aW5nLAotICAvLyBhcyB3ZWxsIGFzIGFkZGluZyByZW1vdGUgSUNFIGNhbmRpZGF0ZXMg
b25jZSB0aGUgYW5zd2VyIFNEUCBpcyBzZXQuCi0gIHByaXZhdGUgY2xhc3MgU0RQT2JzZXJ2ZXIg
aW1wbGVtZW50cyBTZHBPYnNlcnZlciB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQg
b25DcmVhdGVTdWNjZXNzKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBvcmlnU2RwKSB7Ci0gICAg
ICBpZiAobG9jYWxTZHAgIT0gbnVsbCkgewotICAgICAgICByZXBvcnRFcnJvcigiTXVsdGlwbGUg
U0RQIGNyZWF0ZS4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgU3RyaW5nIHNk
cERlc2NyaXB0aW9uID0gb3JpZ1NkcC5kZXNjcmlwdGlvbjsKLSAgICAgIGlmIChwcmVmZXJJc2Fj
KSB7Ci0gICAgICAgIHNkcERlc2NyaXB0aW9uID0gcHJlZmVyQ29kZWMoc2RwRGVzY3JpcHRpb24s
IEFVRElPX0NPREVDX0lTQUMsIHRydWUpOwotICAgICAgfQotICAgICAgaWYgKHZpZGVvQ2FsbEVu
YWJsZWQpIHsKLSAgICAgICAgc2RwRGVzY3JpcHRpb24gPSBwcmVmZXJDb2RlYyhzZHBEZXNjcmlw
dGlvbiwgcHJlZmVycmVkVmlkZW9Db2RlYywgZmFsc2UpOwotICAgICAgfQotICAgICAgZmluYWwg
U2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24ob3JpZ1NkcC50
eXBlLCBzZHBEZXNjcmlwdGlvbik7Ci0gICAgICBsb2NhbFNkcCA9IHNkcDsKLSAgICAgIGV4ZWN1
dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbiAhPSBudWxs
ICYmICFpc0Vycm9yKSB7Ci0gICAgICAgICAgICBMb2cuZChUQUcsICJTZXQgbG9jYWwgU0RQIGZy
b20gIiArIHNkcC50eXBlKTsKLSAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVz
Y3JpcHRpb24oc2RwT2JzZXJ2ZXIsIHNkcCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblNldFN1Y2Nl
c3MoKSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBpZiAocGVl
ckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgfQotICAgICAgICAgIGlmIChpc0luaXRpYXRvcikgewotICAgICAgICAgICAgLy8g
Rm9yIG9mZmVyaW5nIHBlZXIgY29ubmVjdGlvbiB3ZSBmaXJzdCBjcmVhdGUgb2ZmZXIgYW5kIHNl
dAotICAgICAgICAgICAgLy8gbG9jYWwgU0RQLCB0aGVuIGFmdGVyIHJlY2VpdmluZyBhbnN3ZXIg
c2V0IHJlbW90ZSBTRFAuCi0gICAgICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24uZ2V0UmVtb3Rl
RGVzY3JpcHRpb24oKSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIC8vIFdlJ3ZlIGp1c3Qgc2V0
IG91ciBsb2NhbCBTRFAgc28gdGltZSB0byBzZW5kIGl0LgotICAgICAgICAgICAgICBMb2cuZChU
QUcsICJMb2NhbCBTRFAgc2V0IHN1Y2Nlc2Z1bGx5Iik7Ci0gICAgICAgICAgICAgIGV2ZW50cy5v
bkxvY2FsRGVzY3JpcHRpb24obG9jYWxTZHApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgLy8gV2UndmUganVzdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uLCBzbyBkcmFpbiBy
ZW1vdGUKLSAgICAgICAgICAgICAgLy8gYW5kIHNlbmQgbG9jYWwgSUNFIGNhbmRpZGF0ZXMuCi0g
ICAgICAgICAgICAgIExvZy5kKFRBRywgIlJlbW90ZSBTRFAgc2V0IHN1Y2Nlc2Z1bGx5Iik7Ci0g
ICAgICAgICAgICAgIGRyYWluQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgfQotICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBGb3IgYW5zd2VyaW5nIHBlZXIgY29ubmVjdGlvbiB3
ZSBzZXQgcmVtb3RlIFNEUCBhbmQgdGhlbgotICAgICAgICAgICAgLy8gY3JlYXRlIGFuc3dlciBh
bmQgc2V0IGxvY2FsIFNEUC4KLSAgICAgICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbi5nZXRMb2Nh
bERlc2NyaXB0aW9uKCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IHNl
dCBvdXIgbG9jYWwgU0RQIHNvIHRpbWUgdG8gc2VuZCBpdCwgZHJhaW4KLSAgICAgICAgICAgICAg
Ly8gcmVtb3RlIGFuZCBzZW5kIGxvY2FsIElDRSBjYW5kaWRhdGVzLgotICAgICAgICAgICAgICBM
b2cuZChUQUcsICJMb2NhbCBTRFAgc2V0IHN1Y2Nlc2Z1bGx5Iik7Ci0gICAgICAgICAgICAgIGV2
ZW50cy5vbkxvY2FsRGVzY3JpcHRpb24obG9jYWxTZHApOwotICAgICAgICAgICAgICBkcmFpbkNh
bmRpZGF0ZXMoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8vIFdlJ3Zl
IGp1c3Qgc2V0IHJlbW90ZSBTRFAgLSBkbyBub3RoaW5nIGZvciBub3cgLQotICAgICAgICAgICAg
ICAvLyBhbnN3ZXIgd2lsbCBiZSBjcmVhdGVkIHNvb24uCi0gICAgICAgICAgICAgIExvZy5kKFRB
RywgIlJlbW90ZSBTRFAgc2V0IHN1Y2Nlc2Z1bGx5Iik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbkNyZWF0ZUZhaWx1cmUoZmluYWwgU3RyaW5nIGVycm9yKSB7Ci0gICAgICBy
ZXBvcnRFcnJvcigiY3JlYXRlU0RQIGVycm9yOiAiICsgZXJyb3IpOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2V0RmFpbHVyZShmaW5hbCBTdHJpbmcgZXJyb3Ip
IHsKLSAgICAgIHJlcG9ydEVycm9yKCJzZXRTRFAgZXJyb3I6ICIgKyBlcnJvcik7Ci0gICAgfQot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUGVyY2VudEZyYW1lTGF5
b3V0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlcmNl
bnRGcmFtZUxheW91dC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvUGVyY2VudEZyYW1lTGF5b3V0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw5
NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQudXRp
bC5BdHRyaWJ1dGVTZXQ7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9p
ZC52aWV3LlZpZXdHcm91cDsKLQotLyoqCi0gKiBTaW1wbGUgY29udGFpbmVyIHRoYXQgY29uZmlu
ZXMgdGhlIGNoaWxkcmVuIHRvIGEgc3VicmVjdGFuZ2xlIHNwZWNpZmllZCBhcyBwZXJjZW50YWdl
IHZhbHVlcyBvZgotICogdGhlIGNvbnRhaW5lciBzaXplLiBUaGUgY2hpbGRyZW4gYXJlIGNlbnRl
cmVkIGhvcml6b250YWxseSBhbmQgdmVydGljYWxseSBpbnNpZGUgdGhlIGNvbmZpbmVkCi0gKiBz
cGFjZS4KLSAqLwotcHVibGljIGNsYXNzIFBlcmNlbnRGcmFtZUxheW91dCBleHRlbmRzIFZpZXdH
cm91cCB7Ci0gIHByaXZhdGUgaW50IHhQZXJjZW50ID0gMDsKLSAgcHJpdmF0ZSBpbnQgeVBlcmNl
bnQgPSAwOwotICBwcml2YXRlIGludCB3aWR0aFBlcmNlbnQgPSAxMDA7Ci0gIHByaXZhdGUgaW50
IGhlaWdodFBlcmNlbnQgPSAxMDA7Ci0KLSAgcHVibGljIFBlcmNlbnRGcmFtZUxheW91dChDb250
ZXh0IGNvbnRleHQpIHsKLSAgICBzdXBlcihjb250ZXh0KTsKLSAgfQotCi0gIHB1YmxpYyBQZXJj
ZW50RnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMpIHsKLSAg
ICBzdXBlcihjb250ZXh0LCBhdHRycyk7Ci0gIH0KLQotICBwdWJsaWMgUGVyY2VudEZyYW1lTGF5
b3V0KENvbnRleHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzLCBpbnQgZGVmU3R5bGVBdHRy
KSB7Ci0gICAgc3VwZXIoY29udGV4dCwgYXR0cnMsIGRlZlN0eWxlQXR0cik7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCBzZXRQb3NpdGlvbihpbnQgeFBlcmNlbnQsIGludCB5UGVyY2VudCwgaW50IHdp
ZHRoUGVyY2VudCwgaW50IGhlaWdodFBlcmNlbnQpIHsKLSAgICB0aGlzLnhQZXJjZW50ID0geFBl
cmNlbnQ7Ci0gICAgdGhpcy55UGVyY2VudCA9IHlQZXJjZW50OwotICAgIHRoaXMud2lkdGhQZXJj
ZW50ID0gd2lkdGhQZXJjZW50OwotICAgIHRoaXMuaGVpZ2h0UGVyY2VudCA9IGhlaWdodFBlcmNl
bnQ7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gc2hvdWxkRGVsYXlDaGls
ZFByZXNzZWRTdGF0ZSgpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHJvdGVjdGVkIHZvaWQgb25NZWFzdXJlKGludCB3aWR0aE1lYXN1cmVTcGVjLCBpbnQgaGVp
Z2h0TWVhc3VyZVNwZWMpIHsKLSAgICBmaW5hbCBpbnQgd2lkdGggPSBnZXREZWZhdWx0U2l6ZShJ
bnRlZ2VyLk1BWF9WQUxVRSwgd2lkdGhNZWFzdXJlU3BlYyk7Ci0gICAgZmluYWwgaW50IGhlaWdo
dCA9IGdldERlZmF1bHRTaXplKEludGVnZXIuTUFYX1ZBTFVFLCBoZWlnaHRNZWFzdXJlU3BlYyk7
Ci0gICAgc2V0TWVhc3VyZWREaW1lbnNpb24oTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKHdp
ZHRoLCBNZWFzdXJlU3BlYy5FWEFDVExZKSwKLSAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1
cmVTcGVjKGhlaWdodCwgTWVhc3VyZVNwZWMuRVhBQ1RMWSkpOwotCi0gICAgZmluYWwgaW50IGNo
aWxkV2lkdGhNZWFzdXJlU3BlYyA9Ci0gICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3Bl
Yyh3aWR0aCAqIHdpZHRoUGVyY2VudCAvIDEwMCwgTWVhc3VyZVNwZWMuQVRfTU9TVCk7Ci0gICAg
ZmluYWwgaW50IGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWMgPQotICAgICAgICBNZWFzdXJlU3BlYy5t
YWtlTWVhc3VyZVNwZWMoaGVpZ2h0ICogaGVpZ2h0UGVyY2VudCAvIDEwMCwgTWVhc3VyZVNwZWMu
QVRfTU9TVCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXRDaGlsZENvdW50KCk7ICsraSkg
ewotICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaSk7Ci0gICAgICBpZiAoY2hp
bGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsKLSAgICAgICAgY2hpbGQubWVhc3VyZShjaGls
ZFdpZHRoTWVhc3VyZVNwZWMsIGNoaWxkSGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkxheW91dChib29sZWFu
IGNoYW5nZWQsIGludCBsZWZ0LCBpbnQgdG9wLCBpbnQgcmlnaHQsIGludCBib3R0b20pIHsKLSAg
ICBmaW5hbCBpbnQgd2lkdGggPSByaWdodCAtIGxlZnQ7Ci0gICAgZmluYWwgaW50IGhlaWdodCA9
IGJvdHRvbSAtIHRvcDsKLSAgICAvLyBTdWItcmVjdGFuZ2xlIHNwZWNpZmllZCBieSBwZXJjZW50
YWdlIHZhbHVlcy4KLSAgICBmaW5hbCBpbnQgc3ViV2lkdGggPSB3aWR0aCAqIHdpZHRoUGVyY2Vu
dCAvIDEwMDsKLSAgICBmaW5hbCBpbnQgc3ViSGVpZ2h0ID0gaGVpZ2h0ICogaGVpZ2h0UGVyY2Vu
dCAvIDEwMDsKLSAgICBmaW5hbCBpbnQgc3ViTGVmdCA9IGxlZnQgKyB3aWR0aCAqIHhQZXJjZW50
IC8gMTAwOwotICAgIGZpbmFsIGludCBzdWJUb3AgPSB0b3AgKyBoZWlnaHQgKiB5UGVyY2VudCAv
IDEwMDsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ2V0Q2hpbGRDb3VudCgpOyArK2kpIHsK
LSAgICAgIGZpbmFsIFZpZXcgY2hpbGQgPSBnZXRDaGlsZEF0KGkpOwotICAgICAgaWYgKGNoaWxk
LmdldFZpc2liaWxpdHkoKSAhPSBHT05FKSB7Ci0gICAgICAgIGZpbmFsIGludCBjaGlsZFdpZHRo
ID0gY2hpbGQuZ2V0TWVhc3VyZWRXaWR0aCgpOwotICAgICAgICBmaW5hbCBpbnQgY2hpbGRIZWln
aHQgPSBjaGlsZC5nZXRNZWFzdXJlZEhlaWdodCgpOwotICAgICAgICAvLyBDZW50ZXIgY2hpbGQg
Ym90aCB2ZXJ0aWNhbGx5IGFuZCBob3Jpem9udGFsbHkuCi0gICAgICAgIGZpbmFsIGludCBjaGls
ZExlZnQgPSBzdWJMZWZ0ICsgKHN1YldpZHRoIC0gY2hpbGRXaWR0aCkgLyAyOwotICAgICAgICBm
aW5hbCBpbnQgY2hpbGRUb3AgPSBzdWJUb3AgKyAoc3ViSGVpZ2h0IC0gY2hpbGRIZWlnaHQpIC8g
MjsKLSAgICAgICAgY2hpbGQubGF5b3V0KGNoaWxkTGVmdCwgY2hpbGRUb3AsIGNoaWxkTGVmdCAr
IGNoaWxkV2lkdGgsIGNoaWxkVG9wICsgY2hpbGRIZWlnaHQpOwotICAgICAgfQotICAgIH0KLSAg
fQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1Jvb21QYXJhbWV0ZXJzRmV0
Y2hlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Sb29t
UGFyYW1ldGVyc0ZldGNoZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL1Jvb21QYXJhbWV0ZXJzRmV0Y2hlci5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMjE3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNw
b3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWdu
YWxpbmdQYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0
cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRw
VVJMQ29ubmVjdGlvbi5Bc3luY0h0dHBFdmVudHM7Ci0KLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9n
OwotCi1pbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5OwotaW1wb3J0IG9yZy5qc29uLkpTT05FeGNl
cHRpb247Ci1pbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKLWltcG9ydCBvcmcud2VicnRjLklj
ZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9y
Zy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlv
bjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxD
b25uZWN0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTGlua2Vk
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKLQotLyoqCi0gKiBBc3luY1Rhc2sgdGhh
dCBjb252ZXJ0cyBhbiBBcHBSVEMgcm9vbSBVUkwgaW50byB0aGUgc2V0IG9mIHNpZ25hbGluZwot
ICogcGFyYW1ldGVycyB0byB1c2Ugd2l0aCB0aGF0IHJvb20uCi0gKi8KLXB1YmxpYyBjbGFzcyBS
b29tUGFyYW1ldGVyc0ZldGNoZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFH
ID0gIlJvb21SVENDbGllbnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVFVSTl9IVFRQ
X1RJTUVPVVRfTVMgPSA1MDAwOwotICBwcml2YXRlIGZpbmFsIFJvb21QYXJhbWV0ZXJzRmV0Y2hl
ckV2ZW50cyBldmVudHM7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHJvb21Vcmw7Ci0gIHByaXZh
dGUgZmluYWwgU3RyaW5nIHJvb21NZXNzYWdlOwotICBwcml2YXRlIEFzeW5jSHR0cFVSTENvbm5l
Y3Rpb24gaHR0cENvbm5lY3Rpb247Ci0KLSAgLyoqCi0gICAqIFJvb20gcGFyYW1ldGVycyBmZXRj
aGVyIGNhbGxiYWNrcy4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgUm9vbVBhcmFtZXRlcnNG
ZXRjaGVyRXZlbnRzIHsKLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHRoZSBy
b29tJ3Mgc2lnbmFsaW5nIHBhcmFtZXRlcnMKLSAgICAgKiBTaWduYWxpbmdQYXJhbWV0ZXJzIGFy
ZSBleHRyYWN0ZWQuCi0gICAgICovCi0gICAgdm9pZCBvblNpZ25hbGluZ1BhcmFtZXRlcnNSZWFk
eShmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtcyk7Ci0KLSAgICAvKioKLSAgICAgKiBD
YWxsYmFjayBmb3Igcm9vbSBwYXJhbWV0ZXJzIGV4dHJhY3Rpb24gZXJyb3IuCi0gICAgICovCi0g
ICAgdm9pZCBvblNpZ25hbGluZ1BhcmFtZXRlcnNFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRp
b24pOwotICB9Ci0KLSAgcHVibGljIFJvb21QYXJhbWV0ZXJzRmV0Y2hlcigKLSAgICAgIFN0cmlu
ZyByb29tVXJsLCBTdHJpbmcgcm9vbU1lc3NhZ2UsIGZpbmFsIFJvb21QYXJhbWV0ZXJzRmV0Y2hl
ckV2ZW50cyBldmVudHMpIHsKLSAgICB0aGlzLnJvb21VcmwgPSByb29tVXJsOwotICAgIHRoaXMu
cm9vbU1lc3NhZ2UgPSByb29tTWVzc2FnZTsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAg
fQotCi0gIHB1YmxpYyB2b2lkIG1ha2VSZXF1ZXN0KCkgewotICAgIExvZy5kKFRBRywgIkNvbm5l
Y3RpbmcgdG8gcm9vbTogIiArIHJvb21VcmwpOwotICAgIGh0dHBDb25uZWN0aW9uID0KLSAgICAg
ICAgbmV3IEFzeW5jSHR0cFVSTENvbm5lY3Rpb24oIlBPU1QiLCByb29tVXJsLCByb29tTWVzc2Fn
ZSwgbmV3IEFzeW5jSHR0cEV2ZW50cygpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAg
ICBwdWJsaWMgdm9pZCBvbkh0dHBFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAg
ICAgICBMb2cuZShUQUcsICJSb29tIGNvbm5lY3Rpb24gZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2Up
OwotICAgICAgICAgICAgZXZlbnRzLm9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKGVycm9yTWVz
c2FnZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVi
bGljIHZvaWQgb25IdHRwQ29tcGxldGUoU3RyaW5nIHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICBy
b29tSHR0cFJlc3BvbnNlUGFyc2UocmVzcG9uc2UpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7
Ci0gICAgaHR0cENvbm5lY3Rpb24uc2VuZCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJvb21I
dHRwUmVzcG9uc2VQYXJzZShTdHJpbmcgcmVzcG9uc2UpIHsKLSAgICBMb2cuZChUQUcsICJSb29t
IHJlc3BvbnNlOiAiICsgcmVzcG9uc2UpOwotICAgIHRyeSB7Ci0gICAgICBMaW5rZWRMaXN0PElj
ZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRlcyA9IG51bGw7Ci0gICAgICBTZXNzaW9uRGVzY3JpcHRp
b24gb2ZmZXJTZHAgPSBudWxsOwotICAgICAgSlNPTk9iamVjdCByb29tSnNvbiA9IG5ldyBKU09O
T2JqZWN0KHJlc3BvbnNlKTsKLQotICAgICAgU3RyaW5nIHJlc3VsdCA9IHJvb21Kc29uLmdldFN0
cmluZygicmVzdWx0Iik7Ci0gICAgICBpZiAoIXJlc3VsdC5lcXVhbHMoIlNVQ0NFU1MiKSkgewot
ICAgICAgICBldmVudHMub25TaWduYWxpbmdQYXJhbWV0ZXJzRXJyb3IoIlJvb20gcmVzcG9uc2Ug
ZXJyb3I6ICIgKyByZXN1bHQpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICByZXNw
b25zZSA9IHJvb21Kc29uLmdldFN0cmluZygicGFyYW1zIik7Ci0gICAgICByb29tSnNvbiA9IG5l
dyBKU09OT2JqZWN0KHJlc3BvbnNlKTsKLSAgICAgIFN0cmluZyByb29tSWQgPSByb29tSnNvbi5n
ZXRTdHJpbmcoInJvb21faWQiKTsKLSAgICAgIFN0cmluZyBjbGllbnRJZCA9IHJvb21Kc29uLmdl
dFN0cmluZygiY2xpZW50X2lkIik7Ci0gICAgICBTdHJpbmcgd3NzVXJsID0gcm9vbUpzb24uZ2V0
U3RyaW5nKCJ3c3NfdXJsIik7Ci0gICAgICBTdHJpbmcgd3NzUG9zdFVybCA9IHJvb21Kc29uLmdl
dFN0cmluZygid3NzX3Bvc3RfdXJsIik7Ci0gICAgICBib29sZWFuIGluaXRpYXRvciA9IChyb29t
SnNvbi5nZXRCb29sZWFuKCJpc19pbml0aWF0b3IiKSk7Ci0gICAgICBpZiAoIWluaXRpYXRvcikg
ewotICAgICAgICBpY2VDYW5kaWRhdGVzID0gbmV3IExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPigp
OwotICAgICAgICBTdHJpbmcgbWVzc2FnZXNTdHJpbmcgPSByb29tSnNvbi5nZXRTdHJpbmcoIm1l
c3NhZ2VzIik7Ci0gICAgICAgIEpTT05BcnJheSBtZXNzYWdlcyA9IG5ldyBKU09OQXJyYXkobWVz
c2FnZXNTdHJpbmcpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lc3NhZ2VzLmxlbmd0
aCgpOyArK2kpIHsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZVN0cmluZyA9IG1lc3NhZ2VzLmdl
dFN0cmluZyhpKTsKLSAgICAgICAgICBKU09OT2JqZWN0IG1lc3NhZ2UgPSBuZXcgSlNPTk9iamVj
dChtZXNzYWdlU3RyaW5nKTsKLSAgICAgICAgICBTdHJpbmcgbWVzc2FnZVR5cGUgPSBtZXNzYWdl
LmdldFN0cmluZygidHlwZSIpOwotICAgICAgICAgIExvZy5kKFRBRywgIkdBRS0+QyAjIiArIGkg
KyAiIDogIiArIG1lc3NhZ2VTdHJpbmcpOwotICAgICAgICAgIGlmIChtZXNzYWdlVHlwZS5lcXVh
bHMoIm9mZmVyIikpIHsKLSAgICAgICAgICAgIG9mZmVyU2RwID0gbmV3IFNlc3Npb25EZXNjcmlw
dGlvbigKLSAgICAgICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25p
Y2FsRm9ybShtZXNzYWdlVHlwZSksIG1lc3NhZ2UuZ2V0U3RyaW5nKCJzZHAiKSk7Ci0gICAgICAg
ICAgfSBlbHNlIGlmIChtZXNzYWdlVHlwZS5lcXVhbHMoImNhbmRpZGF0ZSIpKSB7Ci0gICAgICAg
ICAgICBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlID0gbmV3IEljZUNhbmRpZGF0ZSgKLSAgICAgICAg
ICAgICAgICBtZXNzYWdlLmdldFN0cmluZygiaWQiKSwgbWVzc2FnZS5nZXRJbnQoImxhYmVsIiks
IG1lc3NhZ2UuZ2V0U3RyaW5nKCJjYW5kaWRhdGUiKSk7Ci0gICAgICAgICAgICBpY2VDYW5kaWRh
dGVzLmFkZChjYW5kaWRhdGUpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBMb2cu
ZShUQUcsICJVbmtub3duIG1lc3NhZ2U6ICIgKyBtZXNzYWdlU3RyaW5nKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIExvZy5kKFRBRywgIlJvb21JZDogIiArIHJvb21J
ZCArICIuIENsaWVudElkOiAiICsgY2xpZW50SWQpOwotICAgICAgTG9nLmQoVEFHLCAiSW5pdGlh
dG9yOiAiICsgaW5pdGlhdG9yKTsKLSAgICAgIExvZy5kKFRBRywgIldTUyB1cmw6ICIgKyB3c3NV
cmwpOwotICAgICAgTG9nLmQoVEFHLCAiV1NTIFBPU1QgdXJsOiAiICsgd3NzUG9zdFVybCk7Ci0K
LSAgICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzID0K
LSAgICAgICAgICBpY2VTZXJ2ZXJzRnJvbVBDQ29uZmlnSlNPTihyb29tSnNvbi5nZXRTdHJpbmco
InBjX2NvbmZpZyIpKTsKLSAgICAgIGJvb2xlYW4gaXNUdXJuUHJlc2VudCA9IGZhbHNlOwotICAg
ICAgZm9yIChQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIgc2VydmVyIDogaWNlU2VydmVycykgewot
ICAgICAgICBMb2cuZChUQUcsICJJY2VTZXJ2ZXI6ICIgKyBzZXJ2ZXIpOwotICAgICAgICBpZiAo
c2VydmVyLnVyaS5zdGFydHNXaXRoKCJ0dXJuOiIpKSB7Ci0gICAgICAgICAgaXNUdXJuUHJlc2Vu
dCA9IHRydWU7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIC8v
IFJlcXVlc3QgVFVSTiBzZXJ2ZXJzLgotICAgICAgaWYgKCFpc1R1cm5QcmVzZW50KSB7Ci0gICAg
ICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiB0dXJuU2VydmVycyA9Ci0g
ICAgICAgICAgICByZXF1ZXN0VHVyblNlcnZlcnMocm9vbUpzb24uZ2V0U3RyaW5nKCJpY2Vfc2Vy
dmVyX3VybCIpKTsKLSAgICAgICAgZm9yIChQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIgdHVyblNl
cnZlciA6IHR1cm5TZXJ2ZXJzKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiVHVyblNlcnZlcjog
IiArIHR1cm5TZXJ2ZXIpOwotICAgICAgICAgIGljZVNlcnZlcnMuYWRkKHR1cm5TZXJ2ZXIpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zID0g
bmV3IFNpZ25hbGluZ1BhcmFtZXRlcnMoCi0gICAgICAgICAgaWNlU2VydmVycywgaW5pdGlhdG9y
LCBjbGllbnRJZCwgd3NzVXJsLCB3c3NQb3N0VXJsLCBvZmZlclNkcCwgaWNlQ2FuZGlkYXRlcyk7
Ci0gICAgICBldmVudHMub25TaWduYWxpbmdQYXJhbWV0ZXJzUmVhZHkocGFyYW1zKTsKLSAgICB9
IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFt
ZXRlcnNFcnJvcigiUm9vbSBKU09OIHBhcnNpbmcgZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkpOwot
ICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1Bh
cmFtZXRlcnNFcnJvcigiUm9vbSBJTyBlcnJvcjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gUmVxdWVzdHMgJiByZXR1cm5zIGEgVFVSTiBJQ0UgU2VydmVyIGJhc2VkIG9u
IGEgcmVxdWVzdCBVUkwuICBNdXN0IGJlIHJ1bgotICAvLyBvZmYgdGhlIG1haW4gdGhyZWFkIQot
ICBwcml2YXRlIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiByZXF1ZXN0VHVy
blNlcnZlcnMoU3RyaW5nIHVybCkKLSAgICAgIHRocm93cyBJT0V4Y2VwdGlvbiwgSlNPTkV4Y2Vw
dGlvbiB7Ci0gICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IHR1cm5TZXJ2
ZXJzID0gbmV3IExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPigpOwotICAgIExv
Zy5kKFRBRywgIlJlcXVlc3QgVFVSTiBmcm9tOiAiICsgdXJsKTsKLSAgICBIdHRwVVJMQ29ubmVj
dGlvbiBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25uZWN0aW9uKSBuZXcgVVJMKHVybCkub3BlbkNv
bm5lY3Rpb24oKTsKLSAgICBjb25uZWN0aW9uLnNldERvT3V0cHV0KHRydWUpOwotICAgIGNvbm5l
Y3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KCJSRUZFUkVSIiwgImh0dHBzOi8vYXBwci50YyIpOwot
ICAgIGNvbm5lY3Rpb24uc2V0Q29ubmVjdFRpbWVvdXQoVFVSTl9IVFRQX1RJTUVPVVRfTVMpOwot
ICAgIGNvbm5lY3Rpb24uc2V0UmVhZFRpbWVvdXQoVFVSTl9IVFRQX1RJTUVPVVRfTVMpOwotICAg
IGludCByZXNwb25zZUNvZGUgPSBjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgpOwotICAgIGlm
IChyZXNwb25zZUNvZGUgIT0gMjAwKSB7Ci0gICAgICB0aHJvdyBuZXcgSU9FeGNlcHRpb24oIk5v
bi0yMDAgcmVzcG9uc2Ugd2hlbiByZXF1ZXN0aW5nIFRVUk4gc2VydmVyIGZyb20gIiArIHVybCAr
ICIgOiAiCi0gICAgICAgICAgKyBjb25uZWN0aW9uLmdldEhlYWRlckZpZWxkKG51bGwpKTsKLSAg
ICB9Ci0gICAgSW5wdXRTdHJlYW0gcmVzcG9uc2VTdHJlYW0gPSBjb25uZWN0aW9uLmdldElucHV0
U3RyZWFtKCk7Ci0gICAgU3RyaW5nIHJlc3BvbnNlID0gZHJhaW5TdHJlYW0ocmVzcG9uc2VTdHJl
YW0pOwotICAgIGNvbm5lY3Rpb24uZGlzY29ubmVjdCgpOwotICAgIExvZy5kKFRBRywgIlRVUk4g
cmVzcG9uc2U6ICIgKyByZXNwb25zZSk7Ci0gICAgSlNPTk9iamVjdCByZXNwb25zZUpTT04gPSBu
ZXcgSlNPTk9iamVjdChyZXNwb25zZSk7Ci0gICAgSlNPTkFycmF5IGljZVNlcnZlcnMgPSByZXNw
b25zZUpTT04uZ2V0SlNPTkFycmF5KCJpY2VTZXJ2ZXJzIik7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBpY2VTZXJ2ZXJzLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgIEpTT05PYmplY3Qgc2VydmVy
ID0gaWNlU2VydmVycy5nZXRKU09OT2JqZWN0KGkpOwotICAgICAgSlNPTkFycmF5IHR1cm5Vcmxz
ID0gc2VydmVyLmdldEpTT05BcnJheSgidXJscyIpOwotICAgICAgU3RyaW5nIHVzZXJuYW1lID0g
c2VydmVyLmhhcygidXNlcm5hbWUiKSA/IHNlcnZlci5nZXRTdHJpbmcoInVzZXJuYW1lIikgOiAi
IjsKLSAgICAgIFN0cmluZyBjcmVkZW50aWFsID0gc2VydmVyLmhhcygiY3JlZGVudGlhbCIpID8g
c2VydmVyLmdldFN0cmluZygiY3JlZGVudGlhbCIpIDogIiI7Ci0gICAgICBmb3IgKGludCBqID0g
MDsgaiA8IHR1cm5VcmxzLmxlbmd0aCgpOyBqKyspIHsKLSAgICAgICAgU3RyaW5nIHR1cm5Vcmwg
PSB0dXJuVXJscy5nZXRTdHJpbmcoaik7Ci0gICAgICAgIHR1cm5TZXJ2ZXJzLmFkZChuZXcgUGVl
ckNvbm5lY3Rpb24uSWNlU2VydmVyKHR1cm5VcmwsIHVzZXJuYW1lLCBjcmVkZW50aWFsKSk7Ci0g
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiB0dXJuU2VydmVyczsKLSAgfQotCi0gIC8vIFJldHVy
biB0aGUgbGlzdCBvZiBJQ0Ugc2VydmVycyBkZXNjcmliZWQgYnkgYSBXZWJSVENQZWVyQ29ubmVj
dGlvbgotICAvLyBjb25maWd1cmF0aW9uIHN0cmluZy4KLSAgcHJpdmF0ZSBMaW5rZWRMaXN0PFBl
ZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVyc0Zyb21QQ0NvbmZpZ0pTT04oU3RyaW5n
IHBjQ29uZmlnKQotICAgICAgdGhyb3dzIEpTT05FeGNlcHRpb24gewotICAgIEpTT05PYmplY3Qg
anNvbiA9IG5ldyBKU09OT2JqZWN0KHBjQ29uZmlnKTsKLSAgICBKU09OQXJyYXkgc2VydmVycyA9
IGpzb24uZ2V0SlNPTkFycmF5KCJpY2VTZXJ2ZXJzIik7Ci0gICAgTGlua2VkTGlzdDxQZWVyQ29u
bmVjdGlvbi5JY2VTZXJ2ZXI+IHJldCA9IG5ldyBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLklj
ZVNlcnZlcj4oKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlcnZlcnMubGVuZ3RoKCk7ICsr
aSkgewotICAgICAgSlNPTk9iamVjdCBzZXJ2ZXIgPSBzZXJ2ZXJzLmdldEpTT05PYmplY3QoaSk7
Ci0gICAgICBTdHJpbmcgdXJsID0gc2VydmVyLmdldFN0cmluZygidXJscyIpOwotICAgICAgU3Ry
aW5nIGNyZWRlbnRpYWwgPSBzZXJ2ZXIuaGFzKCJjcmVkZW50aWFsIikgPyBzZXJ2ZXIuZ2V0U3Ry
aW5nKCJjcmVkZW50aWFsIikgOiAiIjsKLSAgICAgIHJldC5hZGQobmV3IFBlZXJDb25uZWN0aW9u
LkljZVNlcnZlcih1cmwsICIiLCBjcmVkZW50aWFsKSk7Ci0gICAgfQotICAgIHJldHVybiByZXQ7
Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mIGFuIElucHV0U3RyZWFtIGFzIGEg
U3RyaW5nLgotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZHJhaW5TdHJlYW0oSW5wdXRTdHJlYW0g
aW4pIHsKLSAgICBTY2FubmVyIHMgPSBuZXcgU2Nhbm5lcihpbikudXNlRGVsaW1pdGVyKCJcXEEi
KTsKLSAgICByZXR1cm4gcy5oYXNOZXh0KCkgPyBzLm5leHQoKSA6ICIiOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvU2V0dGluZ3NBY3Rpdml0eS5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5nc0FjdGl2aXR5Lmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0
aW5nc0FjdGl2aXR5LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNjYgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRy
b2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5j
ZXM7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2VzLk9uU2hhcmVkUHJl
ZmVyZW5jZUNoYW5nZUxpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwotaW1wb3J0
IGFuZHJvaWQucHJlZmVyZW5jZS5MaXN0UHJlZmVyZW5jZTsKLWltcG9ydCBhbmRyb2lkLnByZWZl
cmVuY2UuUHJlZmVyZW5jZTsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYTJFbnVtZXJhdG9yOwot
aW1wb3J0IG9yZy53ZWJydGMudm9pY2VlbmdpbmUuV2ViUnRjQXVkaW9VdGlsczsKLQotLyoqCi0g
KiBTZXR0aW5ncyBhY3Rpdml0eSBmb3IgQXBwUlRDLgotICovCi1wdWJsaWMgY2xhc3MgU2V0dGlu
Z3NBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5IGltcGxlbWVudHMgT25TaGFyZWRQcmVmZXJlbmNl
Q2hhbmdlTGlzdGVuZXIgewotICBwcml2YXRlIFNldHRpbmdzRnJhZ21lbnQgc2V0dGluZ3NGcmFn
bWVudDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlZpZGVvQ2FsbDsKLSAgcHJpdmF0ZSBTdHJp
bmcga2V5cHJlZlNjcmVlbmNhcHR1cmU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZDYW1lcmEy
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmUmVzb2x1dGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZkZwczsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVy
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZTsKLSAgcHJpdmF0
ZSBTdHJpbmcga2V5cHJlZk1heFZpZGVvQml0cmF0ZVZhbHVlOwotICBwcml2YXRlIFN0cmluZyBr
ZXlQcmVmVmlkZW9Db2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkh3Q29kZWM7Ci0gIHBy
aXZhdGUgU3RyaW5nIGtleXByZWZDYXB0dXJlVG9UZXh0dXJlOwotCi0gIHByaXZhdGUgU3RyaW5n
IGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZT
dGFydEF1ZGlvQml0cmF0ZVZhbHVlOwotICBwcml2YXRlIFN0cmluZyBrZXlQcmVmQXVkaW9Db2Rl
YzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk5vQXVkaW9Qcm9jZXNzaW5nOwotICBwcml2YXRl
IFN0cmluZyBrZXlwcmVmQWVjRHVtcDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk9wZW5TTEVT
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BRUM7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZEaXNhYmxlQnVpbHRJbkFHQzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJl
ZkRpc2FibGVCdWlsdEluTlM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZFbmFibGVMZXZlbENv
bnRyb2w7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZTcGVha2VycGhvbmU7Ci0KLSAgcHJpdmF0
ZSBTdHJpbmcga2V5UHJlZlJvb21TZXJ2ZXJVcmw7Ci0gIHByaXZhdGUgU3RyaW5nIGtleVByZWZE
aXNwbGF5SHVkOwotICBwcml2YXRlIFN0cmluZyBrZXlQcmVmVHJhY2luZzsKLQotICBAT3ZlcnJp
ZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkg
ewotICAgIHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0gICAga2V5cHJlZlZp
ZGVvQ2FsbCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3ZpZGVvY2FsbF9rZXkpOwotICAgIGtl
eXByZWZTY3JlZW5jYXB0dXJlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc2NyZWVuY2FwdHVy
ZV9rZXkpOwotICAgIGtleXByZWZDYW1lcmEyID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2Ft
ZXJhMl9rZXkpOwotICAgIGtleXByZWZSZXNvbHV0aW9uID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnBy
ZWZfcmVzb2x1dGlvbl9rZXkpOwotICAgIGtleXByZWZGcHMgPSBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9mcHNfa2V5KTsKLSAgICBrZXlwcmVmQ2FwdHVyZVF1YWxpdHlTbGlkZXIgPSBnZXRTdHJp
bmcoUi5zdHJpbmcucHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRlcl9rZXkpOwotICAgIGtleXByZWZN
YXhWaWRlb0JpdHJhdGVUeXBlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRy
YXRlX2tleSk7Ci0gICAga2V5cHJlZk1heFZpZGVvQml0cmF0ZVZhbHVlID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfbWF4dmlkZW9iaXRyYXRldmFsdWVfa2V5KTsKLSAgICBrZXlQcmVmVmlkZW9D
b2RlYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3ZpZGVvY29kZWNfa2V5KTsKLSAgICBrZXlw
cmVmSHdDb2RlYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2h3Y29kZWNfa2V5KTsKLSAgICBr
ZXlwcmVmQ2FwdHVyZVRvVGV4dHVyZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmV0
b3RleHR1cmVfa2V5KTsKLQotICAgIGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGUgPSBnZXRT
dHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9rZXkpOwotICAgIGtleXByZWZT
dGFydEF1ZGlvQml0cmF0ZVZhbHVlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRp
b2JpdHJhdGV2YWx1ZV9rZXkpOwotICAgIGtleVByZWZBdWRpb0NvZGVjID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfYXVkaW9jb2RlY19rZXkpOwotICAgIGtleXByZWZOb0F1ZGlvUHJvY2Vzc2lu
ZyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX25vYXVkaW9wcm9jZXNzaW5nX2tleSk7Ci0gICAg
a2V5cHJlZkFlY0R1bXAgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9hZWNkdW1wX2tleSk7Ci0g
ICAga2V5cHJlZk9wZW5TTEVTID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfb3BlbnNsZXNfa2V5
KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BRUMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl9kaXNhYmxlX2J1aWx0X2luX2FlY19rZXkpOwotICAgIGtleXByZWZEaXNhYmxlQnVpbHRJbkFH
QyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2tleSk7Ci0g
ICAga2V5cHJlZkRpc2FibGVCdWlsdEluTlMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNh
YmxlX2J1aWx0X2luX25zX2tleSk7Ci0gICAga2V5cHJlZkVuYWJsZUxldmVsQ29udHJvbCA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2tleSk7Ci0gICAga2V5
cHJlZlNwZWFrZXJwaG9uZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3NwZWFrZXJwaG9uZV9r
ZXkpOwotCi0gICAga2V5UHJlZlJvb21TZXJ2ZXJVcmwgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl9yb29tX3NlcnZlcl91cmxfa2V5KTsKLSAgICBrZXlQcmVmRGlzcGxheUh1ZCA9IGdldFN0cmlu
ZyhSLnN0cmluZy5wcmVmX2Rpc3BsYXlodWRfa2V5KTsKLSAgICBrZXlQcmVmVHJhY2luZyA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX3RyYWNpbmdfa2V5KTsKLQotICAgIC8vIERpc3BsYXkgdGhl
IGZyYWdtZW50IGFzIHRoZSBtYWluIGNvbnRlbnQuCi0gICAgc2V0dGluZ3NGcmFnbWVudCA9IG5l
dyBTZXR0aW5nc0ZyYWdtZW50KCk7Ci0gICAgZ2V0RnJhZ21lbnRNYW5hZ2VyKCkKLSAgICAgICAg
LmJlZ2luVHJhbnNhY3Rpb24oKQotICAgICAgICAucmVwbGFjZShhbmRyb2lkLlIuaWQuY29udGVu
dCwgc2V0dGluZ3NGcmFnbWVudCkKLSAgICAgICAgLmNvbW1pdCgpOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uUmVzdW1lKCkgewotICAgIHN1cGVyLm9uUmVzdW1lKCk7
Ci0gICAgLy8gU2V0IHN1bW1hcnkgdG8gYmUgdGhlIHVzZXItZGVzY3JpcHRpb24gZm9yIHRoZSBz
ZWxlY3RlZCB2YWx1ZQotICAgIFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzID0K
LSAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5nZXRQcmVmZXJlbmNlU2NyZWVuKCkuZ2V0U2hhcmVk
UHJlZmVyZW5jZXMoKTsKLSAgICBzaGFyZWRQcmVmZXJlbmNlcy5yZWdpc3Rlck9uU2hhcmVkUHJl
ZmVyZW5jZUNoYW5nZUxpc3RlbmVyKHRoaXMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFBy
ZWZlcmVuY2VzLCBrZXlwcmVmVmlkZW9DYWxsKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQ
cmVmZXJlbmNlcywga2V5cHJlZlNjcmVlbmNhcHR1cmUpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNo
YXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmQ2FtZXJhMik7Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFy
ZWRQcmVmZXJlbmNlcywga2V5cHJlZlJlc29sdXRpb24pOwotICAgIHVwZGF0ZVN1bW1hcnkoc2hh
cmVkUHJlZmVyZW5jZXMsIGtleXByZWZGcHMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFBy
ZWZlcmVuY2VzLCBrZXlwcmVmQ2FwdHVyZVF1YWxpdHlTbGlkZXIpOwotICAgIHVwZGF0ZVN1bW1h
cnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZNYXhWaWRlb0JpdHJhdGVUeXBlKTsKLSAgICB1
cGRhdGVTdW1tYXJ5Qml0cmF0ZShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZk1heFZpZGVvQml0
cmF0ZVZhbHVlKTsKLSAgICBzZXRWaWRlb0JpdHJhdGVFbmFibGUoc2hhcmVkUHJlZmVyZW5jZXMp
OwotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZWaWRlb0NvZGVj
KTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkh3Q29kZWMp
OwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmQ2FwdHVyZVRv
VGV4dHVyZSk7Ci0KLSAgICB1cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVm
U3RhcnRBdWRpb0JpdHJhdGVUeXBlKTsKLSAgICB1cGRhdGVTdW1tYXJ5Qml0cmF0ZShzaGFyZWRQ
cmVmZXJlbmNlcywga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVmFsdWUpOwotICAgIHNldEF1ZGlv
Qml0cmF0ZUVuYWJsZShzaGFyZWRQcmVmZXJlbmNlcyk7Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFy
ZWRQcmVmZXJlbmNlcywga2V5UHJlZkF1ZGlvQ29kZWMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNo
YXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmTm9BdWRpb1Byb2Nlc3NpbmcpOwotICAgIHVwZGF0ZVN1
bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmQWVjRHVtcCk7Ci0gICAgdXBkYXRlU3Vt
bWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZPcGVuU0xFUyk7Ci0gICAgdXBkYXRlU3Vt
bWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZEaXNhYmxlQnVpbHRJbkFFQyk7Ci0gICAg
dXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZEaXNhYmxlQnVpbHRJbkFH
Qyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZEaXNhYmxl
QnVpbHRJbk5TKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJl
ZkVuYWJsZUxldmVsQ29udHJvbCk7Ci0gICAgdXBkYXRlU3VtbWFyeUxpc3Qoc2hhcmVkUHJlZmVy
ZW5jZXMsIGtleXByZWZTcGVha2VycGhvbmUpOwotCi0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQ
cmVmZXJlbmNlcywga2V5UHJlZlJvb21TZXJ2ZXJVcmwpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNo
YXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmRGlzcGxheUh1ZCk7Ci0gICAgdXBkYXRlU3VtbWFyeUIo
c2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZUcmFjaW5nKTsKLQotICAgIGlmICghQ2FtZXJhMkVu
dW1lcmF0b3IuaXNTdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgIFByZWZlcmVuY2UgY2FtZXJhMlBy
ZWZlcmVuY2UgPSBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleXByZWZDYW1lcmEy
KTsKLQotICAgICAgY2FtZXJhMlByZWZlcmVuY2Uuc2V0U3VtbWFyeShnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9jYW1lcmEyX25vdF9zdXBwb3J0ZWQpKTsKLSAgICAgIGNhbWVyYTJQcmVmZXJlbmNl
LnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLQotICAgIC8vIERpc2FibGUgZm9yY2luZyBXZWJS
VEMgYmFzZWQgQUVDIHNvIGl0IHdvbid0IGFmZmVjdCBvdXIgdmFsdWUuCi0gICAgLy8gT3RoZXJ3
aXNlLCBpZiBpdCB3YXMgZW5hYmxlZCwgaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCB3
b3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlLgotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRj
QmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcihmYWxzZSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0
aWxzLmlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSkgewotICAgICAgUHJlZmVyZW5j
ZSBkaXNhYmxlQnVpbHRJbkFFQ1ByZWZlcmVuY2UgPQotICAgICAgICAgIHNldHRpbmdzRnJhZ21l
bnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZkRpc2FibGVCdWlsdEluQUVDKTsKLQotICAgICAgZGlz
YWJsZUJ1aWx0SW5BRUNQcmVmZXJlbmNlLnNldFN1bW1hcnkoZ2V0U3RyaW5nKFIuc3RyaW5nLnBy
ZWZfYnVpbHRfaW5fYWVjX25vdF9hdmFpbGFibGUpKTsKLSAgICAgIGRpc2FibGVCdWlsdEluQUVD
UHJlZmVyZW5jZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9Ci0KLSAgICBXZWJSdGNBdWRpb1V0
aWxzLnNldFdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woZmFsc2UpOwotICAgIGlmICgh
V2ViUnRjQXVkaW9VdGlscy5pc0F1dG9tYXRpY0dhaW5Db250cm9sU3VwcG9ydGVkKCkpIHsKLSAg
ICAgIFByZWZlcmVuY2UgZGlzYWJsZUJ1aWx0SW5BR0NQcmVmZXJlbmNlID0KLSAgICAgICAgICBz
ZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleXByZWZEaXNhYmxlQnVpbHRJbkFHQyk7
Ci0KLSAgICAgIGRpc2FibGVCdWlsdEluQUdDUHJlZmVyZW5jZS5zZXRTdW1tYXJ5KGdldFN0cmlu
ZyhSLnN0cmluZy5wcmVmX2J1aWx0X2luX2FnY19ub3RfYXZhaWxhYmxlKSk7Ci0gICAgICBkaXNh
YmxlQnVpbHRJbkFHQ1ByZWZlcmVuY2Uuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgfQotCi0gICAg
V2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvcihmYWxzZSk7Ci0g
ICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLmlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpIHsK
LSAgICAgIFByZWZlcmVuY2UgZGlzYWJsZUJ1aWx0SW5OU1ByZWZlcmVuY2UgPQotICAgICAgICAg
IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZkRpc2FibGVCdWlsdEluTlMp
OwotCi0gICAgICBkaXNhYmxlQnVpbHRJbk5TUHJlZmVyZW5jZS5zZXRTdW1tYXJ5KGdldFN0cmlu
ZyhSLnN0cmluZy5wcmVmX2J1aWx0X2luX25zX25vdF9hdmFpbGFibGUpKTsKLSAgICAgIGRpc2Fi
bGVCdWlsdEluTlNQcmVmZXJlbmNlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLSAgfQotCi0g
IEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvblBhdXNlKCkgewotICAgIHN1cGVyLm9uUGF1
c2UoKTsKLSAgICBTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcyA9Ci0gICAgICAg
IHNldHRpbmdzRnJhZ21lbnQuZ2V0UHJlZmVyZW5jZVNjcmVlbigpLmdldFNoYXJlZFByZWZlcmVu
Y2VzKCk7Ci0gICAgc2hhcmVkUHJlZmVyZW5jZXMudW5yZWdpc3Rlck9uU2hhcmVkUHJlZmVyZW5j
ZUNoYW5nZUxpc3RlbmVyKHRoaXMpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZWQoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVy
ZW5jZXMsIFN0cmluZyBrZXkpIHsKLSAgICAvLyBjbGFuZy1mb3JtYXQgb2ZmCi0gICAgaWYgKGtl
eS5lcXVhbHMoa2V5cHJlZlJlc29sdXRpb24pCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJl
ZkZwcykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZSkK
LSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlQcmVmVmlkZW9Db2RlYykKLSAgICAgICAgfHwga2V5
LmVxdWFscyhrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVUeXBlKQotICAgICAgICB8fCBrZXkuZXF1
YWxzKGtleVByZWZBdWRpb0NvZGVjKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleVByZWZSb29t
U2VydmVyVXJsKSkgewotICAgICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5
KTsKLSAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoa2V5cHJlZk1heFZpZGVvQml0cmF0ZVZhbHVl
KQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVZhbHVlKSkg
ewotICAgICAgdXBkYXRlU3VtbWFyeUJpdHJhdGUoc2hhcmVkUHJlZmVyZW5jZXMsIGtleSk7Ci0g
ICAgfSBlbHNlIGlmIChrZXkuZXF1YWxzKGtleXByZWZWaWRlb0NhbGwpCi0gICAgICAgIHx8IGtl
eS5lcXVhbHMoa2V5cHJlZlNjcmVlbmNhcHR1cmUpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5
cHJlZkNhbWVyYTIpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5UHJlZlRyYWNpbmcpCi0gICAg
ICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVyKQotICAgICAgICB8
fCBrZXkuZXF1YWxzKGtleXByZWZId0NvZGVjKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXBy
ZWZDYXB0dXJlVG9UZXh0dXJlKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZOb0F1ZGlv
UHJvY2Vzc2luZykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmQWVjRHVtcCkKLSAgICAg
ICAgfHwga2V5LmVxdWFscyhrZXlwcmVmT3BlblNMRVMpCi0gICAgICAgIHx8IGtleS5lcXVhbHMo
a2V5cHJlZkRpc2FibGVCdWlsdEluQUVDKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZE
aXNhYmxlQnVpbHRJbkFHQykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmRGlzYWJsZUJ1
aWx0SW5OUykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9s
KQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleVByZWZEaXNwbGF5SHVkKSkgewotICAgICAgdXBk
YXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleSk7Ci0gICAgfSBlbHNlIGlmIChrZXku
ZXF1YWxzKGtleXByZWZTcGVha2VycGhvbmUpKSB7Ci0gICAgICB1cGRhdGVTdW1tYXJ5TGlzdChz
aGFyZWRQcmVmZXJlbmNlcywga2V5KTsKLSAgICB9Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0g
ICAgaWYgKGtleS5lcXVhbHMoa2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5cGUpKSB7Ci0gICAgICBz
ZXRWaWRlb0JpdHJhdGVFbmFibGUoc2hhcmVkUHJlZmVyZW5jZXMpOwotICAgIH0KLSAgICBpZiAo
a2V5LmVxdWFscyhrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVUeXBlKSkgewotICAgICAgc2V0QXVk
aW9CaXRyYXRlRW5hYmxlKHNoYXJlZFByZWZlcmVuY2VzKTsKLSAgICB9Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgdXBkYXRlU3VtbWFyeShTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNl
cywgU3RyaW5nIGtleSkgewotICAgIFByZWZlcmVuY2UgdXBkYXRlZFByZWYgPSBzZXR0aW5nc0Zy
YWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleSk7Ci0gICAgLy8gU2V0IHN1bW1hcnkgdG8gYmUgdGhl
IHVzZXItZGVzY3JpcHRpb24gZm9yIHRoZSBzZWxlY3RlZCB2YWx1ZQotICAgIHVwZGF0ZWRQcmVm
LnNldFN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMuZ2V0U3RyaW5nKGtleSwgIiIpKTsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCB1cGRhdGVTdW1tYXJ5Qml0cmF0ZShTaGFyZWRQcmVmZXJlbmNlcyBz
aGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtleSkgewotICAgIFByZWZlcmVuY2UgdXBkYXRlZFBy
ZWYgPSBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleSk7Ci0gICAgdXBkYXRlZFBy
ZWYuc2V0U3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcy5nZXRTdHJpbmcoa2V5LCAiIikgKyAiIGti
cHMiKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVTdW1tYXJ5QihTaGFyZWRQcmVmZXJl
bmNlcyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtleSkgewotICAgIFByZWZlcmVuY2UgdXBk
YXRlZFByZWYgPSBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleSk7Ci0gICAgdXBk
YXRlZFByZWYuc2V0U3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcy5nZXRCb29sZWFuKGtleSwgdHJ1
ZSkKLSAgICAgICAgICAgID8gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmFsdWVfZW5hYmxlZCkK
LSAgICAgICAgICAgIDogZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmFsdWVfZGlzYWJsZWQpKTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVTdW1tYXJ5TGlzdChTaGFyZWRQcmVmZXJlbmNl
cyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtleSkgewotICAgIExpc3RQcmVmZXJlbmNlIHVw
ZGF0ZWRQcmVmID0gKExpc3RQcmVmZXJlbmNlKSBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJl
bmNlKGtleSk7Ci0gICAgdXBkYXRlZFByZWYuc2V0U3VtbWFyeSh1cGRhdGVkUHJlZi5nZXRFbnRy
eSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRWaWRlb0JpdHJhdGVFbmFibGUoU2hhcmVk
UHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMpIHsKLSAgICBQcmVmZXJlbmNlIGJpdHJhdGVQ
cmVmZXJlbmNlVmFsdWUgPQotICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNl
KGtleXByZWZNYXhWaWRlb0JpdHJhdGVWYWx1ZSk7Ci0gICAgU3RyaW5nIGJpdHJhdGVUeXBlRGVm
YXVsdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVvYml0cmF0ZV9kZWZhdWx0KTsK
LSAgICBTdHJpbmcgYml0cmF0ZVR5cGUgPQotICAgICAgICBzaGFyZWRQcmVmZXJlbmNlcy5nZXRT
dHJpbmcoa2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5cGUsIGJpdHJhdGVUeXBlRGVmYXVsdCk7Ci0g
ICAgaWYgKGJpdHJhdGVUeXBlLmVxdWFscyhiaXRyYXRlVHlwZURlZmF1bHQpKSB7Ci0gICAgICBi
aXRyYXRlUHJlZmVyZW5jZVZhbHVlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldEF1ZGlvQml0cmF0ZUVuYWJsZShTaGFyZWRQcmVmZXJlbmNl
cyBzaGFyZWRQcmVmZXJlbmNlcykgewotICAgIFByZWZlcmVuY2UgYml0cmF0ZVByZWZlcmVuY2VW
YWx1ZSA9Ci0gICAgICAgIHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZlN0
YXJ0QXVkaW9CaXRyYXRlVmFsdWUpOwotICAgIFN0cmluZyBiaXRyYXRlVHlwZURlZmF1bHQgPSBn
ZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9kZWZhdWx0KTsKLSAgICBT
dHJpbmcgYml0cmF0ZVR5cGUgPQotICAgICAgICBzaGFyZWRQcmVmZXJlbmNlcy5nZXRTdHJpbmco
a2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlwZSwgYml0cmF0ZVR5cGVEZWZhdWx0KTsKLSAgICBp
ZiAoYml0cmF0ZVR5cGUuZXF1YWxzKGJpdHJhdGVUeXBlRGVmYXVsdCkpIHsKLSAgICAgIGJpdHJh
dGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5hYmxlZCh0cnVlKTsKLSAgICB9Ci0gIH0KLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5nc0ZyYWdtZW50LmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1NldHRpbmdzRnJhZ21l
bnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L1NldHRpbmdzRnJhZ21lbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI2ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2VG
cmFnbWVudDsKLQotLyoqCi0gKiBTZXR0aW5ncyBmcmFnbWVudCBmb3IgQXBwUlRDLgotICovCi1w
dWJsaWMgY2xhc3MgU2V0dGluZ3NGcmFnbWVudCBleHRlbmRzIFByZWZlcmVuY2VGcmFnbWVudCB7
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2ZWRJbnN0YW5j
ZVN0YXRlKSB7Ci0gICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRlKTsKLSAgICAv
LyBMb2FkIHRoZSBwcmVmZXJlbmNlcyBmcm9tIGFuIFhNTCByZXNvdXJjZQotICAgIGFkZFByZWZl
cmVuY2VzRnJvbVJlc291cmNlKFIueG1sLnByZWZlcmVuY2VzKTsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1RDUENoYW5uZWxDbGllbnQuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENsaWVudC5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5l
bENsaWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzU0ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC51
dGlsLkxvZzsKLQotaW1wb3J0IG9yZy53ZWJydGMuVGhyZWFkVXRpbHM7Ci0KLWltcG9ydCBqYXZh
LmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQg
amF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwot
aW1wb3J0IGphdmEubmV0LkluZXRBZGRyZXNzOwotaW1wb3J0IGphdmEubmV0LlNlcnZlclNvY2tl
dDsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RF
eGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwot
Ci0vKioKLSAqIFJlcGxhY2VtZW50IGZvciBXZWJTb2NrZXRDaGFubmVsQ2xpZW50IGZvciBkaXJl
Y3QgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byBJUCBhZGRyZXNzZXMuIEhhbmRsZXMKLSAqIHRo
ZSBzaWduYWxpbmcgYmV0d2VlbiB0aGUgdHdvIGNsaWVudHMgdXNpbmcgYSBUQ1AgY29ubmVjdGlv
bi4KLSAqCi0gKiA8cD5BbGwgcHVibGljIG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGEg
bG9vcGVyIGV4ZWN1dG9yIHRocmVhZAotICogcGFzc2VkIGluIGEgY29uc3RydWN0b3IsIG90aGVy
d2lzZSBleGNlcHRpb24gd2lsbCBiZSB0aHJvd24uCi0gKiBBbGwgZXZlbnRzIGFyZSBkaXNwYXRj
aGVkIG9uIHRoZSBzYW1lIHRocmVhZC4KLSAqLwotcHVibGljIGNsYXNzIFRDUENoYW5uZWxDbGll
bnQgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlRDUENoYW5uZWxDbGll
bnQiOwotCi0gIHByaXZhdGUgZmluYWwgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yOwotICBwcml2
YXRlIGZpbmFsIFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIgZXhlY3V0b3JUaHJlYWRDaGVjazsK
LSAgcHJpdmF0ZSBmaW5hbCBUQ1BDaGFubmVsRXZlbnRzIGV2ZW50TGlzdGVuZXI7Ci0gIHByaXZh
dGUgVENQU29ja2V0IHNvY2tldDsKLQotICAvKioKLSAgICogQ2FsbGJhY2sgaW50ZXJmYWNlIGZv
ciBtZXNzYWdlcyBkZWxpdmVyZWQgb24gVENQIENvbm5lY3Rpb24uIEFsbCBjYWxsYmFja3MgYXJl
IGludm9rZWQgZnJvbSB0aGUKLSAgICogbG9vcGVyIGV4ZWN1dG9yIHRocmVhZC4KLSAgICovCi0g
IHB1YmxpYyBpbnRlcmZhY2UgVENQQ2hhbm5lbEV2ZW50cyB7Ci0gICAgdm9pZCBvblRDUENvbm5l
Y3RlZChib29sZWFuIHNlcnZlcik7Ci0gICAgdm9pZCBvblRDUE1lc3NhZ2UoU3RyaW5nIG1lc3Nh
Z2UpOwotICAgIHZvaWQgb25UQ1BFcnJvcihTdHJpbmcgZGVzY3JpcHRpb24pOwotICAgIHZvaWQg
b25UQ1BDbG9zZSgpOwotICB9Ci0KLSAgLyoqCi0gICAqIEluaXRpYWxpemVzIHRoZSBUQ1BDaGFu
bmVsQ2xpZW50LiBJZiBJUCBpcyBhIGxvY2FsIElQIGFkZHJlc3MsIHN0YXJ0cyBhIGxpc3Rlbmlu
ZyBzZXJ2ZXIgb24KLSAgICogdGhhdCBJUC4gSWYgbm90LCBpbnN0ZWFkIGNvbm5lY3RzIHRvIHRo
ZSBJUC4KLSAgICoKLSAgICogQHBhcmFtIGV2ZW50TGlzdGVuZXIgTGlzdGVuZXIgdGhhdCB3aWxs
IHJlY2VpdmUgZXZlbnRzIGZyb20gdGhlIGNsaWVudC4KLSAgICogQHBhcmFtIGlwIElQIGFkZHJl
c3MgdG8gbGlzdGVuIG9uIG9yIGNvbm5lY3QgdG8uCi0gICAqIEBwYXJhbSBwb3J0IFBvcnQgdG8g
bGlzdGVuIG9uIG9yIGNvbm5lY3QgdG8uCi0gICAqLwotICBwdWJsaWMgVENQQ2hhbm5lbENsaWVu
dCgKLSAgICAgIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvciwgVENQQ2hhbm5lbEV2ZW50cyBldmVu
dExpc3RlbmVyLCBTdHJpbmcgaXAsIGludCBwb3J0KSB7Ci0gICAgdGhpcy5leGVjdXRvciA9IGV4
ZWN1dG9yOwotICAgIGV4ZWN1dG9yVGhyZWFkQ2hlY2sgPSBuZXcgVGhyZWFkVXRpbHMuVGhyZWFk
Q2hlY2tlcigpOwotICAgIGV4ZWN1dG9yVGhyZWFkQ2hlY2suZGV0YWNoVGhyZWFkKCk7Ci0gICAg
dGhpcy5ldmVudExpc3RlbmVyID0gZXZlbnRMaXN0ZW5lcjsKLQotICAgIEluZXRBZGRyZXNzIGFk
ZHJlc3M7Ci0gICAgdHJ5IHsKLSAgICAgIGFkZHJlc3MgPSBJbmV0QWRkcmVzcy5nZXRCeU5hbWUo
aXApOwotICAgIH0gY2F0Y2ggKFVua25vd25Ib3N0RXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9y
dEVycm9yKCJJbnZhbGlkIElQIGFkZHJlc3MuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGFkZHJlc3MuaXNBbnlMb2NhbEFkZHJlc3MoKSkgewotICAgICAgc29ja2V0ID0gbmV3
IFRDUFNvY2tldFNlcnZlcihhZGRyZXNzLCBwb3J0KTsKLSAgICB9IGVsc2UgewotICAgICAgc29j
a2V0ID0gbmV3IFRDUFNvY2tldENsaWVudChhZGRyZXNzLCBwb3J0KTsKLSAgICB9Ci0KLSAgICBz
b2NrZXQuc3RhcnQoKTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNjb25uZWN0cyB0aGUgY2xpZW50
IGlmIG5vdCBhbHJlYWR5IGRpc2Nvbm5lY3RlZC4gVGhpcyB3aWxsIGZpcmUgdGhlIG9uVENQQ2xv
c2UgZXZlbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgewotICAgIGV4ZWN1
dG9yVGhyZWFkQ2hlY2suY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLQotICAgIHNvY2tldC5kaXNj
b25uZWN0KCk7Ci0gIH0KLQotICAvKioKLSAgICogU2VuZHMgYSBtZXNzYWdlIG9uIHRoZSBzb2Nr
ZXQuCi0gICAqCi0gICAqIEBwYXJhbSBtZXNzYWdlIE1lc3NhZ2UgdG8gYmUgc2VudC4KLSAgICov
Ci0gIHB1YmxpYyB2b2lkIHNlbmQoU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBleGVjdXRvclRocmVh
ZENoZWNrLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0KLSAgICBzb2NrZXQuc2VuZChtZXNzYWdl
KTsKLSAgfQotCi0gIC8qKgotICAgKiBIZWxwZXIgbWV0aG9kIGZvciBmaXJpbmcgb25UQ1BFcnJv
ciBldmVudHMuIENhbGxzIG9uVENQRXJyb3Igb24gdGhlIGV4ZWN1dG9yIHRocmVhZC4KLSAgICov
Ci0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcihmaW5hbCBTdHJpbmcgbWVzc2FnZSkgewotICAg
IExvZy5lKFRBRywgIlRDUCBFcnJvcjogIiArIG1lc3NhZ2UpOwotICAgIGV4ZWN1dG9yLmV4ZWN1
dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGV2ZW50TGlzdGVuZXIub25UQ1BFcnJvcihtZXNzYWdlKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIC8qKgotICAgKiBCYXNlIGNsYXNzIGZvciBzZXJ2ZXIgYW5k
IGNsaWVudCBzb2NrZXRzLiBDb250YWlucyBhIGxpc3RlbmluZyB0aHJlYWQgdGhhdCB3aWxsIGNh
bGwKLSAgICogZXZlbnRMaXN0ZW5lci5vblRDUE1lc3NhZ2Ugb24gbmV3IG1lc3NhZ2VzLgotICAg
Ki8KLSAgcHJpdmF0ZSBhYnN0cmFjdCBjbGFzcyBUQ1BTb2NrZXQgZXh0ZW5kcyBUaHJlYWQgewot
ICAgIC8vIExvY2sgZm9yIGVkaXRpbmcgb3V0IGFuZCByYXdTb2NrZXQKLSAgICBwcm90ZWN0ZWQg
ZmluYWwgT2JqZWN0IHJhd1NvY2tldExvY2s7Ci0gICAgcHJpdmF0ZSBQcmludFdyaXRlciBvdXQ7
Ci0gICAgcHJpdmF0ZSBTb2NrZXQgcmF3U29ja2V0OwotCi0gICAgLyoqCi0gICAgICogQ29ubmVj
dCB0byB0aGUgcGVlciwgcG90ZW50aWFsbHkgYSBzbG93IG9wZXJhdGlvbi4KLSAgICAgKgotICAg
ICAqIEByZXR1cm4gU29ja2V0IGNvbm5lY3Rpb24sIG51bGwgaWYgY29ubmVjdGlvbiBmYWlsZWQu
Ci0gICAgICovCi0gICAgcHVibGljIGFic3RyYWN0IFNvY2tldCBjb25uZWN0KCk7Ci0gICAgLyoq
IFJldHVybnMgdHJ1ZSBpZiBzb2NrZXRzIGlzIGEgc2VydmVyIHJhd1NvY2tldC4gKi8KLSAgICBw
dWJsaWMgYWJzdHJhY3QgYm9vbGVhbiBpc1NlcnZlcigpOwotCi0gICAgVENQU29ja2V0KCkgewot
ICAgICAgcmF3U29ja2V0TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAg
ICAgKiBUaGUgbGlzdGVuaW5nIHRocmVhZC4KLSAgICAgKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBMb2cuZChUQUcsICJMaXN0ZW5pbmcgdGhyZWFkIHN0
YXJ0ZWQuLi4iKTsKLQotICAgICAgLy8gUmVjZWl2ZSBjb25uZWN0aW9uIHRvIHRlbXBvcmFyeSB2
YXJpYWJsZSBmaXJzdCwgc28gd2UgZG9uJ3QgYmxvY2suCi0gICAgICBTb2NrZXQgdGVtcFNvY2tl
dCA9IGNvbm5lY3QoKTsKLSAgICAgIEJ1ZmZlcmVkUmVhZGVyIGluOwotCi0gICAgICBMb2cuZChU
QUcsICJUQ1AgY29ubmVjdGlvbiBlc3RhYmxpc2hlZC4iKTsKLQotICAgICAgc3luY2hyb25pemVk
IChyYXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgIGlmIChyYXdTb2NrZXQgIT0gbnVsbCkgewotICAg
ICAgICAgIExvZy5lKFRBRywgIlNvY2tldCBhbHJlYWR5IGV4aXN0ZWQgYW5kIHdpbGwgYmUgcmVw
bGFjZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICByYXdTb2NrZXQgPSB0ZW1wU29ja2V0Owot
Ci0gICAgICAgIC8vIENvbm5lY3RpbmcgZmFpbGVkLCBlcnJvciBoYXMgYWxyZWFkeSBiZWVuIHJl
cG9ydGVkLCBqdXN0IGV4aXQuCi0gICAgICAgIGlmIChyYXdTb2NrZXQgPT0gbnVsbCkgewotICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgb3V0
ID0gbmV3IFByaW50V3JpdGVyKHJhd1NvY2tldC5nZXRPdXRwdXRTdHJlYW0oKSwgdHJ1ZSk7Ci0g
ICAgICAgICAgaW4gPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHJh
d1NvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIG9wZW4gSU8gb24gcmF3U29j
a2V0OiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgfQotCi0gICAgICBMb2cudihUQUcsICJFeGVjdXRlIG9uVENQQ29ubmVjdGVkIik7Ci0g
ICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRl
Ci0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBMb2cudihUQUcsICJSdW4g
b25UQ1BDb25uZWN0ZWQiKTsKLSAgICAgICAgICBldmVudExpc3RlbmVyLm9uVENQQ29ubmVjdGVk
KGlzU2VydmVyKCkpOwotICAgICAgICB9Ci0gICAgICB9KTsKLQotICAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAg
ICAgbWVzc2FnZSA9IGluLnJlYWRMaW5lKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExvY2spIHsKLSAgICAgICAg
ICAgIC8vIElmIHNvY2tldCB3YXMgY2xvc2VkLCB0aGlzIGlzIGV4cGVjdGVkLgotICAgICAgICAg
ICAgaWYgKHJhd1NvY2tldCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgIH0KLQotICAgICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8g
cmVhZCBmcm9tIHJhd1NvY2tldDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vIGRhdGEgcmVjZWl2ZWQsIHJhd1NvY2tldCBw
cm9iYWJseSBjbG9zZWQuCi0gICAgICAgIGlmIChtZXNzYWdlID09IG51bGwpIHsKLSAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgICAgIExvZy52KFRBRywgIlJlY2VpdmU6ICIgKyBtZXNzYWdlKTsKLSAgICAg
ICAgICAgIGV2ZW50TGlzdGVuZXIub25UQ1BNZXNzYWdlKG1lc3NhZ2UpOwotICAgICAgICAgIH0K
LSAgICAgICAgfSk7Ci0gICAgICB9Ci0KLSAgICAgIExvZy5kKFRBRywgIlJlY2VpdmluZyB0aHJl
YWQgZXhpdGluZy4uLiIpOwotCi0gICAgICAvLyBDbG9zZSB0aGUgcmF3U29ja2V0IGlmIGl0IGlz
IHN0aWxsIG9wZW4uCi0gICAgICBkaXNjb25uZWN0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAg
ICogQ2xvc2VzIHRoZSByYXdTb2NrZXQgaWYgaXQgaXMgc3RpbGwgb3Blbi4gQWxzbyBmaXJlcyB0
aGUgb25UQ1BDbG9zZSBldmVudC4KLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0
KCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgc3luY2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7
Ci0gICAgICAgICAgaWYgKHJhd1NvY2tldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByYXdTb2Nr
ZXQuY2xvc2UoKTsKLSAgICAgICAgICAgIHJhd1NvY2tldCA9IG51bGw7Ci0gICAgICAgICAgICBv
dXQgPSBudWxsOwotCi0gICAgICAgICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgICAgICAgICBldmVudExpc3RlbmVyLm9uVENQQ2xvc2UoKTsKLSAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQg
dG8gY2xvc2UgcmF3U29ja2V0OiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0K
LQotICAgIC8qKgotICAgICAqIFNlbmRzIGEgbWVzc2FnZSBvbiB0aGUgc29ja2V0LiBTaG91bGQg
b25seSBiZSBjYWxsZWQgb24gdGhlIGV4ZWN1dG9yIHRocmVhZC4KLSAgICAgKi8KLSAgICBwdWJs
aWMgdm9pZCBzZW5kKFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgICBMb2cudihUQUcsICJTZW5kOiAi
ICsgbWVzc2FnZSk7Ci0KLSAgICAgIHN5bmNocm9uaXplZCAocmF3U29ja2V0TG9jaykgewotICAg
ICAgICBpZiAob3V0ID09IG51bGwpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiU2VuZGluZyBk
YXRhIG9uIGNsb3NlZCBzb2NrZXQuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0K
LSAgICAgICAgb3V0LndyaXRlKG1lc3NhZ2UgKyAiXG4iKTsKLSAgICAgICAgb3V0LmZsdXNoKCk7
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBUQ1BTb2NrZXRTZXJ2ZXIg
ZXh0ZW5kcyBUQ1BTb2NrZXQgewotICAgIC8vIFNlcnZlciBzb2NrZXQgaXMgYWxzbyBndWFyZGVk
IGJ5IHJhd1NvY2tldExvY2suCi0gICAgcHJpdmF0ZSBTZXJ2ZXJTb2NrZXQgc2VydmVyU29ja2V0
OwotCi0gICAgZmluYWwgcHJpdmF0ZSBJbmV0QWRkcmVzcyBhZGRyZXNzOwotICAgIGZpbmFsIHBy
aXZhdGUgaW50IHBvcnQ7Ci0KLSAgICBwdWJsaWMgVENQU29ja2V0U2VydmVyKEluZXRBZGRyZXNz
IGFkZHJlc3MsIGludCBwb3J0KSB7Ci0gICAgICB0aGlzLmFkZHJlc3MgPSBhZGRyZXNzOwotICAg
ICAgdGhpcy5wb3J0ID0gcG9ydDsKLSAgICB9Ci0KLSAgICAvKiogT3BlbnMgYSBsaXN0ZW5pbmcg
c29ja2V0IGFuZCB3YWl0cyBmb3IgYSBjb25uZWN0aW9uLiAqLwotICAgIEBPdmVycmlkZQotICAg
IHB1YmxpYyBTb2NrZXQgY29ubmVjdCgpIHsKLSAgICAgIExvZy5kKFRBRywgIkxpc3RlbmluZyBv
biBbIiArIGFkZHJlc3MuZ2V0SG9zdEFkZHJlc3MoKSArICJdOiIgKyBJbnRlZ2VyLnRvU3RyaW5n
KHBvcnQpKTsKLQotICAgICAgZmluYWwgU2VydmVyU29ja2V0IHRlbXBTb2NrZXQ7Ci0gICAgICB0
cnkgewotICAgICAgICB0ZW1wU29ja2V0ID0gbmV3IFNlcnZlclNvY2tldChwb3J0LCAwLCBhZGRy
ZXNzKTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJy
b3IoIkZhaWxlZCB0byBjcmVhdGUgc2VydmVyIHNvY2tldDogIiArIGUuZ2V0TWVzc2FnZSgpKTsK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIHN5bmNocm9uaXplZCAocmF3
U29ja2V0TG9jaykgewotICAgICAgICBpZiAoc2VydmVyU29ja2V0ICE9IG51bGwpIHsKLSAgICAg
ICAgICBMb2cuZShUQUcsICJTZXJ2ZXIgcmF3U29ja2V0IHdhcyBhbHJlYWR5IGxpc3RlbmluZyBh
bmQgbmV3IHdpbGwgYmUgb3BlbmVkLiIpOwotICAgICAgICB9Ci0KLSAgICAgICAgc2VydmVyU29j
a2V0ID0gdGVtcFNvY2tldDsKLSAgICAgIH0KLQotICAgICAgdHJ5IHsKLSAgICAgICAgcmV0dXJu
IHRlbXBTb2NrZXQuYWNjZXB0KCk7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gcmVjZWl2ZSBjb25uZWN0aW9uOiAiICsgZS5n
ZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvKiogQ2xvc2VzIHRoZSBsaXN0ZW5pbmcgc29ja2V0IGFuZCBjYWxscyBzdXBlci4gKi8KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KCkgewotICAgICAgdHJ5IHsK
LSAgICAgICAgc3luY2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgICAgaWYgKHNl
cnZlclNvY2tldCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzZXJ2ZXJTb2NrZXQuY2xvc2UoKTsK
LSAgICAgICAgICAgIHNlcnZlclNvY2tldCA9IG51bGw7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJG
YWlsZWQgdG8gY2xvc2Ugc2VydmVyIHNvY2tldDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAg
IH0KLQotICAgICAgc3VwZXIuZGlzY29ubmVjdCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyBib29sZWFuIGlzU2VydmVyKCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBUQ1BTb2NrZXRDbGllbnQgZXh0ZW5kcyBUQ1BTb2Nr
ZXQgewotICAgIGZpbmFsIHByaXZhdGUgSW5ldEFkZHJlc3MgYWRkcmVzczsKLSAgICBmaW5hbCBw
cml2YXRlIGludCBwb3J0OwotCi0gICAgcHVibGljIFRDUFNvY2tldENsaWVudChJbmV0QWRkcmVz
cyBhZGRyZXNzLCBpbnQgcG9ydCkgewotICAgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKLSAg
ICAgIHRoaXMucG9ydCA9IHBvcnQ7Ci0gICAgfQotCi0gICAgLyoqIENvbm5lY3RzIHRvIHRoZSBw
ZWVyLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBTb2NrZXQgY29ubmVjdCgpIHsKLSAg
ICAgIExvZy5kKFRBRywgIkNvbm5lY3RpbmcgdG8gWyIgKyBhZGRyZXNzLmdldEhvc3RBZGRyZXNz
KCkgKyAiXToiICsgSW50ZWdlci50b1N0cmluZyhwb3J0KSk7Ci0KLSAgICAgIHRyeSB7Ci0gICAg
ICAgIHJldHVybiBuZXcgU29ja2V0KGFkZHJlc3MsIHBvcnQpOwotICAgICAgfSBjYXRjaCAoSU9F
eGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNvbm5lY3Q6ICIg
KyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfQotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBib29sZWFuIGlzU2VydmVyKCkgewotICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3Qv
YXBwcnRjL1VuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxlci5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVW5oYW5kbGVk
RXhjZXB0aW9uSGFuZGxlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEsODQgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxMyBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsKLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQudXRp
bC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC53
aWRnZXQuU2Nyb2xsVmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLQotaW1w
b3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0K
LS8qKgotICogU2luZ2xldG9uIGhlbHBlcjogaW5zdGFsbCBhIGRlZmF1bHQgdW5oYW5kbGVkIGV4
Y2VwdGlvbiBoYW5kbGVyIHdoaWNoIHNob3dzCi0gKiBhbiBpbmZvcm1hdGl2ZSBkaWFsb2cgYW5k
IGtpbGxzIHRoZSBhcHAuICBVc2VmdWwgZm9yIGFwcHMgd2hvc2UKLSAqIGVycm9yLWhhbmRsaW5n
IGNvbnNpc3RzIG9mIHRocm93aW5nIFJ1bnRpbWVFeGNlcHRpb25zLgotICogTk9URTogYWxtb3N0
IGFsd2F5cyBtb3JlIHVzZWZ1bCB0bwotICogVGhyZWFkLnNldERlZmF1bHRVbmNhdWdodEV4Y2Vw
dGlvbkhhbmRsZXIoKSByYXRoZXIgdGhhbgotICogVGhyZWFkLnNldFVuY2F1Z2h0RXhjZXB0aW9u
SGFuZGxlcigpLCB0byBhcHBseSB0byBiYWNrZ3JvdW5kIHRocmVhZHMgYXMgd2VsbC4KLSAqLwot
cHVibGljIGNsYXNzIFVuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIgaW1wbGVtZW50cyBUaHJlYWQu
VW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFRBRyA9ICJBcHBSVENNb2JpbGVBY3Rpdml0eSI7Ci0gIHByaXZhdGUgZmluYWwgQWN0aXZpdHkg
YWN0aXZpdHk7Ci0KLSAgcHVibGljIFVuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIoZmluYWwgQWN0
aXZpdHkgYWN0aXZpdHkpIHsKLSAgICB0aGlzLmFjdGl2aXR5ID0gYWN0aXZpdHk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCB1bmNhdWdodEV4Y2VwdGlvbihUaHJlYWQgdW51c2VkVGhyZWFkLCBmaW5h
bCBUaHJvd2FibGUgZSkgewotICAgIGFjdGl2aXR5LnJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IFN0cmluZyB0aXRsZSA9ICJGYXRhbCBlcnJvcjogIiArIGdldFRvcExldmVsQ2F1c2VNZXNzYWdl
KGUpOwotICAgICAgICBTdHJpbmcgbXNnID0gZ2V0UmVjdXJzaXZlU3RhY2tUcmFjZShlKTsKLSAg
ICAgICAgVGV4dFZpZXcgZXJyb3JWaWV3ID0gbmV3IFRleHRWaWV3KGFjdGl2aXR5KTsKLSAgICAg
ICAgZXJyb3JWaWV3LnNldFRleHQobXNnKTsKLSAgICAgICAgZXJyb3JWaWV3LnNldFRleHRTaXpl
KFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1NQLCA4KTsKLSAgICAgICAgU2Nyb2xsVmlldyBzY3Jv
bGxpbmdDb250YWluZXIgPSBuZXcgU2Nyb2xsVmlldyhhY3Rpdml0eSk7Ci0gICAgICAgIHNjcm9s
bGluZ0NvbnRhaW5lci5hZGRWaWV3KGVycm9yVmlldyk7Ci0gICAgICAgIExvZy5lKFRBRywgdGl0
bGUgKyAiXG5cbiIgKyBtc2cpOwotICAgICAgICBEaWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3Rl
bmVyIGxpc3RlbmVyID0gbmV3IERpYWxvZ0ludGVyZmFjZS5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0g
ICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJ
bnRlcmZhY2UgZGlhbG9nLCBpbnQgd2hpY2gpIHsKLSAgICAgICAgICAgIGRpYWxvZy5kaXNtaXNz
KCk7Ci0gICAgICAgICAgICBTeXN0ZW0uZXhpdCgxKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH07
Ci0gICAgICAgIEFsZXJ0RGlhbG9nLkJ1aWxkZXIgYnVpbGRlciA9IG5ldyBBbGVydERpYWxvZy5C
dWlsZGVyKGFjdGl2aXR5KTsKLSAgICAgICAgYnVpbGRlci5zZXRUaXRsZSh0aXRsZSkKLSAgICAg
ICAgICAgIC5zZXRWaWV3KHNjcm9sbGluZ0NvbnRhaW5lcikKLSAgICAgICAgICAgIC5zZXRQb3Np
dGl2ZUJ1dHRvbigiRXhpdCIsIGxpc3RlbmVyKQotICAgICAgICAgICAgLnNob3coKTsKLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIE1lc3NhZ2UgYXR0YWNoZWQgdG8g
dGhlIG9yaWdpbmFsIENhdXNlIG9mIHx0fC4KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFRv
cExldmVsQ2F1c2VNZXNzYWdlKFRocm93YWJsZSB0KSB7Ci0gICAgVGhyb3dhYmxlIHRvcExldmVs
Q2F1c2UgPSB0OwotICAgIHdoaWxlICh0b3BMZXZlbENhdXNlLmdldENhdXNlKCkgIT0gbnVsbCkg
ewotICAgICAgdG9wTGV2ZWxDYXVzZSA9IHRvcExldmVsQ2F1c2UuZ2V0Q2F1c2UoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRvcExldmVsQ2F1c2UuZ2V0TWVzc2FnZSgpOwotICB9Ci0KLSAgLy8gUmV0
dXJucyBhIGh1bWFuLXJlYWRhYmxlIFN0cmluZyBvZiB0aGUgc3RhY2t0cmFjZSBpbiB8dHwsIHJl
Y3Vyc2l2ZWx5Ci0gIC8vIHRocm91Z2ggYWxsIENhdXNlcyB0aGF0IGxlZCB0byB8dHwuCi0gIHBy
aXZhdGUgc3RhdGljIFN0cmluZyBnZXRSZWN1cnNpdmVTdGFja1RyYWNlKFRocm93YWJsZSB0KSB7
Ci0gICAgU3RyaW5nV3JpdGVyIHdyaXRlciA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKLSAgICB0LnBy
aW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIod3JpdGVyKSk7Ci0gICAgcmV0dXJuIHdyaXRl
ci50b1N0cmluZygpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMv
V2ViU29ja2V0Q2hhbm5lbENsaWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBy
dGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0
Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb24uQXN5bmNIdHRwRXZlbnRzOwotCi1pbXBvcnQg
YW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBk
ZS50YXZlbmRvLmF1dG9iYWhuLldlYlNvY2tldC5XZWJTb2NrZXRDb25uZWN0aW9uT2JzZXJ2ZXI7
Ci1pbXBvcnQgZGUudGF2ZW5kby5hdXRvYmFobi5XZWJTb2NrZXRDb25uZWN0aW9uOwotaW1wb3J0
IGRlLnRhdmVuZG8uYXV0b2JhaG4uV2ViU29ja2V0RXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmpz
b24uSlNPTkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuanNvbi5KU09OT2JqZWN0OwotCi1pbXBvcnQg
amF2YS5uZXQuVVJJOwotaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKLWltcG9y
dCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLQotLyoqCi0gKiBXZWJTb2NrZXQgY2xpZW50IGltcGxl
bWVudGF0aW9uLgotICoKLSAqIDxwPkFsbCBwdWJsaWMgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGVk
IGZyb20gYSBsb29wZXIgZXhlY3V0b3IgdGhyZWFkCi0gKiBwYXNzZWQgaW4gYSBjb25zdHJ1Y3Rv
ciwgb3RoZXJ3aXNlIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAqIEFsbCBldmVudHMgYXJl
IGRpc3BhdGNoZWQgb24gdGhlIHNhbWUgdGhyZWFkLgotICovCi0KLXB1YmxpYyBjbGFzcyBXZWJT
b2NrZXRDaGFubmVsQ2xpZW50IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9
ICJXU0NoYW5uZWxSVENDbGllbnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0xPU0Vf
VElNRU9VVCA9IDEwMDA7Ci0gIHByaXZhdGUgZmluYWwgV2ViU29ja2V0Q2hhbm5lbEV2ZW50cyBl
dmVudHM7Ci0gIHByaXZhdGUgZmluYWwgSGFuZGxlciBoYW5kbGVyOwotICBwcml2YXRlIFdlYlNv
Y2tldENvbm5lY3Rpb24gd3M7Ci0gIHByaXZhdGUgV2ViU29ja2V0T2JzZXJ2ZXIgd3NPYnNlcnZl
cjsKLSAgcHJpdmF0ZSBTdHJpbmcgd3NTZXJ2ZXJVcmw7Ci0gIHByaXZhdGUgU3RyaW5nIHBvc3RT
ZXJ2ZXJVcmw7Ci0gIHByaXZhdGUgU3RyaW5nIHJvb21JRDsKLSAgcHJpdmF0ZSBTdHJpbmcgY2xp
ZW50SUQ7Ci0gIHByaXZhdGUgV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlIHN0YXRlOwotICBwcml2
YXRlIGZpbmFsIE9iamVjdCBjbG9zZUV2ZW50TG9jayA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0
ZSBib29sZWFuIGNsb3NlRXZlbnQ7Ci0gIC8vIFdlYlNvY2tldCBzZW5kIHF1ZXVlLiBNZXNzYWdl
cyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlIHdoZW4gV2ViU29ja2V0Ci0gIC8vIGNsaWVudCBpcyBu
b3QgcmVnaXN0ZXJlZCBhbmQgYXJlIGNvbnN1bWVkIGluIHJlZ2lzdGVyKCkgY2FsbC4KLSAgcHJp
dmF0ZSBmaW5hbCBMaW5rZWRMaXN0PFN0cmluZz4gd3NTZW5kUXVldWU7Ci0KLSAgLyoqCi0gICAq
IFBvc3NpYmxlIFdlYlNvY2tldCBjb25uZWN0aW9uIHN0YXRlcy4KLSAgICovCi0gIHB1YmxpYyBl
bnVtIFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZSB7IE5FVywgQ09OTkVDVEVELCBSRUdJU1RFUkVE
LCBDTE9TRUQsIEVSUk9SIH0KLQotICAvKioKLSAgICogQ2FsbGJhY2sgaW50ZXJmYWNlIGZvciBt
ZXNzYWdlcyBkZWxpdmVyZWQgb24gV2ViU29ja2V0LgotICAgKiBBbGwgZXZlbnRzIGFyZSBkaXNw
YXRjaGVkIGZyb20gYSBsb29wZXIgZXhlY3V0b3IgdGhyZWFkLgotICAgKi8KLSAgcHVibGljIGlu
dGVyZmFjZSBXZWJTb2NrZXRDaGFubmVsRXZlbnRzIHsKLSAgICB2b2lkIG9uV2ViU29ja2V0TWVz
c2FnZShmaW5hbCBTdHJpbmcgbWVzc2FnZSk7Ci0gICAgdm9pZCBvbldlYlNvY2tldENsb3NlKCk7
Ci0gICAgdm9pZCBvbldlYlNvY2tldEVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbik7Ci0g
IH0KLQotICBwdWJsaWMgV2ViU29ja2V0Q2hhbm5lbENsaWVudChIYW5kbGVyIGhhbmRsZXIsIFdl
YlNvY2tldENoYW5uZWxFdmVudHMgZXZlbnRzKSB7Ci0gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxl
cjsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgICByb29tSUQgPSBudWxsOwotICAgIGNs
aWVudElEID0gbnVsbDsKLSAgICB3c1NlbmRRdWV1ZSA9IG5ldyBMaW5rZWRMaXN0PFN0cmluZz4o
KTsKLSAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5ORVc7Ci0gIH0KLQotICBw
dWJsaWMgV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlIGdldFN0YXRlKCkgewotICAgIHJldHVybiBz
dGF0ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNvbm5lY3QoZmluYWwgU3RyaW5nIHdzVXJsLCBm
aW5hbCBTdHJpbmcgcG9zdFVybCkgewotICAgIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7
Ci0gICAgaWYgKHN0YXRlICE9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5ORVcpIHsKLSAgICAg
IExvZy5lKFRBRywgIldlYlNvY2tldCBpcyBhbHJlYWR5IGNvbm5lY3RlZC4iKTsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgd3NTZXJ2ZXJVcmwgPSB3c1VybDsKLSAgICBwb3N0U2VydmVyVXJs
ID0gcG9zdFVybDsKLSAgICBjbG9zZUV2ZW50ID0gZmFsc2U7Ci0KLSAgICBMb2cuZChUQUcsICJD
b25uZWN0aW5nIFdlYlNvY2tldCB0bzogIiArIHdzVXJsICsgIi4gUG9zdCBVUkw6ICIgKyBwb3N0
VXJsKTsKLSAgICB3cyA9IG5ldyBXZWJTb2NrZXRDb25uZWN0aW9uKCk7Ci0gICAgd3NPYnNlcnZl
ciA9IG5ldyBXZWJTb2NrZXRPYnNlcnZlcigpOwotICAgIHRyeSB7Ci0gICAgICB3cy5jb25uZWN0
KG5ldyBVUkkod3NTZXJ2ZXJVcmwpLCB3c09ic2VydmVyKTsKLSAgICB9IGNhdGNoIChVUklTeW50
YXhFeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIlVSSSBlcnJvcjogIiArIGUuZ2V0
TWVzc2FnZSgpKTsKLSAgICB9IGNhdGNoIChXZWJTb2NrZXRFeGNlcHRpb24gZSkgewotICAgICAg
cmVwb3J0RXJyb3IoIldlYlNvY2tldCBjb25uZWN0aW9uIGVycm9yOiAiICsgZS5nZXRNZXNzYWdl
KCkpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlZ2lzdGVyKGZpbmFsIFN0cmluZyBy
b29tSUQsIGZpbmFsIFN0cmluZyBjbGllbnRJRCkgewotICAgIGNoZWNrSWZDYWxsZWRPblZhbGlk
VGhyZWFkKCk7Ci0gICAgdGhpcy5yb29tSUQgPSByb29tSUQ7Ci0gICAgdGhpcy5jbGllbnRJRCA9
IGNsaWVudElEOwotICAgIGlmIChzdGF0ZSAhPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09O
TkVDVEVEKSB7Ci0gICAgICBMb2cudyhUQUcsICJXZWJTb2NrZXQgcmVnaXN0ZXIoKSBpbiBzdGF0
ZSAiICsgc3RhdGUpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJSZWdp
c3RlcmluZyBXZWJTb2NrZXQgZm9yIHJvb20gIiArIHJvb21JRCArICIuIENsaWVudElEOiAiICsg
Y2xpZW50SUQpOwotICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAg
dHJ5IHsKLSAgICAgIGpzb24ucHV0KCJjbWQiLCAicmVnaXN0ZXIiKTsKLSAgICAgIGpzb24ucHV0
KCJyb29taWQiLCByb29tSUQpOwotICAgICAganNvbi5wdXQoImNsaWVudGlkIiwgY2xpZW50SUQp
OwotICAgICAgTG9nLmQoVEFHLCAiQy0+V1NTOiAiICsganNvbi50b1N0cmluZygpKTsKLSAgICAg
IHdzLnNlbmRUZXh0TWVzc2FnZShqc29uLnRvU3RyaW5nKCkpOwotICAgICAgc3RhdGUgPSBXZWJT
b2NrZXRDb25uZWN0aW9uU3RhdGUuUkVHSVNURVJFRDsKLSAgICAgIC8vIFNlbmQgYW55IHByZXZp
b3VzbHkgYWNjdW11bGF0ZWQgbWVzc2FnZXMuCi0gICAgICBmb3IgKFN0cmluZyBzZW5kTWVzc2Fn
ZSA6IHdzU2VuZFF1ZXVlKSB7Ci0gICAgICAgIHNlbmQoc2VuZE1lc3NhZ2UpOwotICAgICAgfQot
ICAgICAgd3NTZW5kUXVldWUuY2xlYXIoKTsKLSAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUp
IHsKLSAgICAgIHJlcG9ydEVycm9yKCJXZWJTb2NrZXQgcmVnaXN0ZXIgSlNPTiBlcnJvcjogIiAr
IGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZW5kKFN0cmlu
ZyBtZXNzYWdlKSB7Ci0gICAgY2hlY2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKTsKLSAgICBzd2l0
Y2ggKHN0YXRlKSB7Ci0gICAgICBjYXNlIE5FVzoKLSAgICAgIGNhc2UgQ09OTkVDVEVEOgotICAg
ICAgICAvLyBTdG9yZSBvdXRnb2luZyBtZXNzYWdlcyBhbmQgc2VuZCB0aGVtIGFmdGVyIHdlYnNv
Y2tldCBjbGllbnQKLSAgICAgICAgLy8gaXMgcmVnaXN0ZXJlZC4KLSAgICAgICAgTG9nLmQoVEFH
LCAiV1MgQUNDOiAiICsgbWVzc2FnZSk7Ci0gICAgICAgIHdzU2VuZFF1ZXVlLmFkZChtZXNzYWdl
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBFUlJPUjoKLSAgICAgIGNhc2UgQ0xPU0VE
OgotICAgICAgICBMb2cuZShUQUcsICJXZWJTb2NrZXQgc2VuZCgpIGluIGVycm9yIG9yIGNsb3Nl
ZCBzdGF0ZSA6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgY2FzZSBSRUdJ
U1RFUkVEOgotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAg
ICAgICB0cnkgewotICAgICAgICAgIGpzb24ucHV0KCJjbWQiLCAic2VuZCIpOwotICAgICAgICAg
IGpzb24ucHV0KCJtc2ciLCBtZXNzYWdlKTsKLSAgICAgICAgICBtZXNzYWdlID0ganNvbi50b1N0
cmluZygpOwotICAgICAgICAgIExvZy5kKFRBRywgIkMtPldTUzogIiArIG1lc3NhZ2UpOwotICAg
ICAgICAgIHdzLnNlbmRUZXh0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgfSBjYXRjaCAoSlNP
TkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIldlYlNvY2tldCBzZW5kIEpT
T04gZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICB9Ci0KLSAgLy8gVGhpcyBjYWxsIGNhbiBiZSB1c2VkIHRvIHNlbmQgV2ViU29j
a2V0IG1lc3NhZ2VzIGJlZm9yZSBXZWJTb2NrZXQKLSAgLy8gY29ubmVjdGlvbiBpcyBvcGVuZWQu
Ci0gIHB1YmxpYyB2b2lkIHBvc3QoU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBjaGVja0lmQ2FsbGVk
T25WYWxpZFRocmVhZCgpOwotICAgIHNlbmRXU1NNZXNzYWdlKCJQT1NUIiwgbWVzc2FnZSk7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0KGJvb2xlYW4gd2FpdEZvckNvbXBsZXRlKSB7
Ci0gICAgY2hlY2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2cuZChUQUcsICJEaXNj
b25uZWN0IFdlYlNvY2tldC4gU3RhdGU6ICIgKyBzdGF0ZSk7Ci0gICAgaWYgKHN0YXRlID09IFdl
YlNvY2tldENvbm5lY3Rpb25TdGF0ZS5SRUdJU1RFUkVEKSB7Ci0gICAgICAvLyBTZW5kICJieWUi
IHRvIFdlYlNvY2tldCBzZXJ2ZXIuCi0gICAgICBzZW5kKCJ7XCJ0eXBlXCI6IFwiYnllXCJ9Iik7
Ci0gICAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0gICAg
ICAvLyBTZW5kIGh0dHAgREVMRVRFIHRvIGh0dHAgV2ViU29ja2V0IHNlcnZlci4KLSAgICAgIHNl
bmRXU1NNZXNzYWdlKCJERUxFVEUiLCAiIik7Ci0gICAgfQotICAgIC8vIENsb3NlIFdlYlNvY2tl
dCBpbiBDT05ORUNURUQgb3IgRVJST1Igc3RhdGVzIG9ubHkuCi0gICAgaWYgKHN0YXRlID09IFdl
YlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQgfHwgc3RhdGUgPT0gV2ViU29ja2V0Q29u
bmVjdGlvblN0YXRlLkVSUk9SKSB7Ci0gICAgICB3cy5kaXNjb25uZWN0KCk7Ci0gICAgICBzdGF0
ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7Ci0KLSAgICAgIC8vIFdhaXQgZm9y
IHdlYnNvY2tldCBjbG9zZSBldmVudCB0byBwcmV2ZW50IHdlYnNvY2tldCBsaWJyYXJ5IGZyb20K
LSAgICAgIC8vIHNlbmRpbmcgYW55IHBlbmRpbmcgbWVzc2FnZXMgdG8gZGVsZXRlZCBsb29wZXIg
dGhyZWFkLgotICAgICAgaWYgKHdhaXRGb3JDb21wbGV0ZSkgewotICAgICAgICBzeW5jaHJvbml6
ZWQgKGNsb3NlRXZlbnRMb2NrKSB7Ci0gICAgICAgICAgd2hpbGUgKCFjbG9zZUV2ZW50KSB7Ci0g
ICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICBjbG9zZUV2ZW50TG9jay53YWl0KENMT1NF
X1RJTUVPVVQpOwotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gY2F0Y2ggKElu
dGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgTG9nLmUoVEFHLCAiV2FpdCBl
cnJvcjogIiArIGUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkRpc2Nvbm5lY3RpbmcgV2Vi
U29ja2V0IGRvbmUuIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3IoZmluYWwg
U3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExvZy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAg
ICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChzdGF0ZSAhPSBXZWJTb2NrZXRDb25uZWN0
aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgICAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25T
dGF0ZS5FUlJPUjsKLSAgICAgICAgICBldmVudHMub25XZWJTb2NrZXRFcnJvcihlcnJvck1lc3Nh
Z2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBBc3luY2hyb25v
dXNseSBzZW5kIFBPU1QvREVMRVRFIHRvIFdlYlNvY2tldCBzZXJ2ZXIuCi0gIHByaXZhdGUgdm9p
ZCBzZW5kV1NTTWVzc2FnZShmaW5hbCBTdHJpbmcgbWV0aG9kLCBmaW5hbCBTdHJpbmcgbWVzc2Fn
ZSkgewotICAgIFN0cmluZyBwb3N0VXJsID0gcG9zdFNlcnZlclVybCArICIvIiArIHJvb21JRCAr
ICIvIiArIGNsaWVudElEOwotICAgIExvZy5kKFRBRywgIldTICIgKyBtZXRob2QgKyAiIDogIiAr
IHBvc3RVcmwgKyAiIDogIiArIG1lc3NhZ2UpOwotICAgIEFzeW5jSHR0cFVSTENvbm5lY3Rpb24g
aHR0cENvbm5lY3Rpb24gPQotICAgICAgICBuZXcgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbihtZXRo
b2QsIHBvc3RVcmwsIG1lc3NhZ2UsIG5ldyBBc3luY0h0dHBFdmVudHMoKSB7Ci0gICAgICAgICAg
QE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRwRXJyb3IoU3RyaW5nIGVycm9y
TWVzc2FnZSkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoIldTICIgKyBtZXRob2QgKyAiIGVy
cm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBAT3ZlcnJp
ZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0dHBDb21wbGV0ZShTdHJpbmcgcmVzcG9uc2Up
IHt9Ci0gICAgICAgIH0pOwotICAgIGh0dHBDb25uZWN0aW9uLnNlbmQoKTsKLSAgfQotCi0gIC8v
IEhlbHBlciBtZXRob2QgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gRW5zdXJlcyB0aGF0IFdlYlNv
Y2tldCBtZXRob2QgaXMKLSAgLy8gY2FsbGVkIG9uIGEgbG9vcGVyIHRocmVhZC4KLSAgcHJpdmF0
ZSB2b2lkIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCkgewotICAgIGlmIChUaHJlYWQuY3Vy
cmVudFRocmVhZCgpICE9IGhhbmRsZXIuZ2V0TG9vcGVyKCkuZ2V0VGhyZWFkKCkpIHsKLSAgICAg
IHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIldlYlNvY2tldCBtZXRob2QgaXMgbm90
IGNhbGxlZCBvbiB2YWxpZCB0aHJlYWQiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNz
IFdlYlNvY2tldE9ic2VydmVyIGltcGxlbWVudHMgV2ViU29ja2V0Q29ubmVjdGlvbk9ic2VydmVy
IHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbk9wZW4oKSB7Ci0gICAgICBMb2cu
ZChUQUcsICJXZWJTb2NrZXQgY29ubmVjdGlvbiBvcGVuZWQgdG86ICIgKyB3c1NlcnZlclVybCk7
Ci0gICAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUK
LSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIHN0YXRlID0gV2ViU29ja2V0
Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRDsKLSAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZl
IHBlbmRpbmcgcmVnaXN0ZXIgcmVxdWVzdC4KLSAgICAgICAgICBpZiAocm9vbUlEICE9IG51bGwg
JiYgY2xpZW50SUQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmVnaXN0ZXIocm9vbUlELCBjbGll
bnRJRCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNsb3NlKFdlYlNvY2tldENsb3NlTm90aWZpY2F0
aW9uIGNvZGUsIFN0cmluZyByZWFzb24pIHsKLSAgICAgIExvZy5kKFRBRywgIldlYlNvY2tldCBj
b25uZWN0aW9uIGNsb3NlZC4gQ29kZTogIiArIGNvZGUgKyAiLiBSZWFzb246ICIgKyByZWFzb24g
KyAiLiBTdGF0ZTogIgotICAgICAgICAgICAgICArIHN0YXRlKTsKLSAgICAgIHN5bmNocm9uaXpl
ZCAoY2xvc2VFdmVudExvY2spIHsKLSAgICAgICAgY2xvc2VFdmVudCA9IHRydWU7Ci0gICAgICAg
IGNsb3NlRXZlbnRMb2NrLm5vdGlmeSgpOwotICAgICAgfQotICAgICAgaGFuZGxlci5wb3N0KG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgICBpZiAoc3RhdGUgIT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNM
T1NFRCkgewotICAgICAgICAgICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ0xP
U0VEOwotICAgICAgICAgICAgZXZlbnRzLm9uV2ViU29ja2V0Q2xvc2UoKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uVGV4dE1lc3NhZ2UoU3RyaW5nIHBheWxvYWQpIHsKLSAgICAgIExvZy5kKFRBRywg
IldTUy0+QzogIiArIHBheWxvYWQpOwotICAgICAgZmluYWwgU3RyaW5nIG1lc3NhZ2UgPSBwYXls
b2FkOwotICAgICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJy
aWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICBpZiAoc3RhdGUgPT0g
V2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRAotICAgICAgICAgICAgICB8fCBzdGF0
ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuUkVHSVNURVJFRCkgewotICAgICAgICAgICAg
ZXZlbnRzLm9uV2ViU29ja2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
UmF3VGV4dE1lc3NhZ2UoYnl0ZVtdIHBheWxvYWQpIHt9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbkJpbmFyeU1lc3NhZ2UoYnl0ZVtdIHBheWxvYWQpIHt9Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRSVENDbGllbnQuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29ja2V0UlRDQ2xp
ZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9XZWJTb2NrZXRSVENDbGllbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQxOSArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1w
b3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5Sb29tUGFyYW1ldGVyc0ZldGNoZXIuUm9vbVBhcmFtZXRl
cnNGZXRjaGVyRXZlbnRzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5XZWJTb2NrZXRDaGFu
bmVsQ2xpZW50LldlYlNvY2tldENoYW5uZWxFdmVudHM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBw
cnRjLldlYlNvY2tldENoYW5uZWxDbGllbnQuV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlOwotaW1w
b3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBv
cnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5Bc3luY0h0
dHBFdmVudHM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5IYW5kbGVyVGhyZWFkOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBvcmcu
anNvbi5KU09OQXJyYXk7Ci1pbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKLWltcG9ydCBv
cmcuanNvbi5KU09OT2JqZWN0OwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1w
b3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotCi0vKioKLSAqIE5lZ290aWF0ZXMg
c2lnbmFsaW5nIGZvciBjaGF0dGluZyB3aXRoIGh0dHBzOi8vYXBwci50YyAicm9vbXMiLgotICog
VXNlcyB0aGUgY2xpZW50PC0+c2VydmVyIHNwZWNpZmljcyBvZiB0aGUgYXBwcnRjIEFwcEVuZ2lu
ZSB3ZWJhcHAuCi0gKgotICogPHA+VG8gdXNlOiBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBv
YmplY3QgKHJlZ2lzdGVyaW5nIGEgbWVzc2FnZSBoYW5kbGVyKSBhbmQKLSAqIGNhbGwgY29ubmVj
dFRvUm9vbSgpLiAgT25jZSByb29tIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQKLSAqIG9uQ29u
bmVjdGVkVG9Sb29tKCkgY2FsbGJhY2sgd2l0aCByb29tIHBhcmFtZXRlcnMgaXMgaW52b2tlZC4K
LSAqIE1lc3NhZ2VzIHRvIG90aGVyIHBhcnR5ICh3aXRoIGxvY2FsIEljZSBjYW5kaWRhdGVzIGFu
ZCBhbnN3ZXIgU0RQKSBjYW4KLSAqIGJlIHNlbnQgYWZ0ZXIgV2ViU29ja2V0IGNvbm5lY3Rpb24g
aXMgZXN0YWJsaXNoZWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBXZWJTb2NrZXRSVENDbGllbnQgaW1w
bGVtZW50cyBBcHBSVENDbGllbnQsIFdlYlNvY2tldENoYW5uZWxFdmVudHMgewotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldTUlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFJPT01fSk9JTiA9ICJqb2luIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIFJPT01fTUVTU0FHRSA9ICJtZXNzYWdlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIFJPT01fTEVBVkUgPSAibGVhdmUiOwotCi0gIHByaXZhdGUgZW51bSBDb25uZWN0
aW9uU3RhdGUgeyBORVcsIENPTk5FQ1RFRCwgQ0xPU0VELCBFUlJPUiB9Ci0KLSAgcHJpdmF0ZSBl
bnVtIE1lc3NhZ2VUeXBlIHsgTUVTU0FHRSwgTEVBVkUgfQotCi0gIHByaXZhdGUgZmluYWwgSGFu
ZGxlciBoYW5kbGVyOwotICBwcml2YXRlIGJvb2xlYW4gaW5pdGlhdG9yOwotICBwcml2YXRlIFNp
Z25hbGluZ0V2ZW50cyBldmVudHM7Ci0gIHByaXZhdGUgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB3
c0NsaWVudDsKLSAgcHJpdmF0ZSBDb25uZWN0aW9uU3RhdGUgcm9vbVN0YXRlOwotICBwcml2YXRl
IFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgcHJpdmF0
ZSBTdHJpbmcgbWVzc2FnZVVybDsKLSAgcHJpdmF0ZSBTdHJpbmcgbGVhdmVVcmw7Ci0KLSAgcHVi
bGljIFdlYlNvY2tldFJUQ0NsaWVudChTaWduYWxpbmdFdmVudHMgZXZlbnRzKSB7Ci0gICAgdGhp
cy5ldmVudHMgPSBldmVudHM7Ci0gICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLk5FVzsK
LSAgICBmaW5hbCBIYW5kbGVyVGhyZWFkIGhhbmRsZXJUaHJlYWQgPSBuZXcgSGFuZGxlclRocmVh
ZChUQUcpOwotICAgIGhhbmRsZXJUaHJlYWQuc3RhcnQoKTsKLSAgICBoYW5kbGVyID0gbmV3IEhh
bmRsZXIoaGFuZGxlclRocmVhZC5nZXRMb29wZXIoKSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAvLyBBcHBSVENDbGllbnQgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLgotICAvLyBBc3lu
Y2hyb25vdXNseSBjb25uZWN0IHRvIGFuIEFwcFJUQyByb29tIFVSTCB1c2luZyBzdXBwbGllZCBj
b25uZWN0aW9uCi0gIC8vIHBhcmFtZXRlcnMsIHJldHJpZXZlcyByb29tIHBhcmFtZXRlcnMgYW5k
IGNvbm5lY3QgdG8gV2ViU29ja2V0IHNlcnZlci4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IGNvbm5lY3RUb1Jvb20oUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0
ZXJzKSB7Ci0gICAgdGhpcy5jb25uZWN0aW9uUGFyYW1ldGVycyA9IGNvbm5lY3Rpb25QYXJhbWV0
ZXJzOwotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY29ubmVjdFRvUm9vbUludGVybmFs
KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
ZGlzY29ubmVjdEZyb21Sb29tKCkgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZGlz
Y29ubmVjdEZyb21Sb29tSW50ZXJuYWwoKTsKLSAgICAgICAgaGFuZGxlci5nZXRMb29wZXIoKS5x
dWl0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBDb25uZWN0cyB0byByb29tIC0g
ZnVuY3Rpb24gcnVucyBvbiBhIGxvY2FsIGxvb3BlciB0aHJlYWQuCi0gIHByaXZhdGUgdm9pZCBj
b25uZWN0VG9Sb29tSW50ZXJuYWwoKSB7Ci0gICAgU3RyaW5nIGNvbm5lY3Rpb25VcmwgPSBnZXRD
b25uZWN0aW9uVXJsKGNvbm5lY3Rpb25QYXJhbWV0ZXJzKTsKLSAgICBMb2cuZChUQUcsICJDb25u
ZWN0IHRvIHJvb206ICIgKyBjb25uZWN0aW9uVXJsKTsKLSAgICByb29tU3RhdGUgPSBDb25uZWN0
aW9uU3RhdGUuTkVXOwotICAgIHdzQ2xpZW50ID0gbmV3IFdlYlNvY2tldENoYW5uZWxDbGllbnQo
aGFuZGxlciwgdGhpcyk7Ci0KLSAgICBSb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHMgY2FsbGJh
Y2tzID0gbmV3IFJvb21QYXJhbWV0ZXJzRmV0Y2hlckV2ZW50cygpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgb25TaWduYWxpbmdQYXJhbWV0ZXJzUmVhZHkoZmluYWwgU2ln
bmFsaW5nUGFyYW1ldGVycyBwYXJhbXMpIHsKLSAgICAgICAgV2ViU29ja2V0UlRDQ2xpZW50LnRo
aXMuaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAg
ICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBXZWJTb2NrZXRSVENDbGll
bnQudGhpcy5zaWduYWxpbmdQYXJhbWV0ZXJzUmVhZHkocGFyYW1zKTsKLSAgICAgICAgICB9Ci0g
ICAgICAgIH0pOwotICAgICAgfQotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IG9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgICAg
ICBXZWJTb2NrZXRSVENDbGllbnQudGhpcy5yZXBvcnRFcnJvcihkZXNjcmlwdGlvbik7Ci0gICAg
ICB9Ci0gICAgfTsKLQotICAgIG5ldyBSb29tUGFyYW1ldGVyc0ZldGNoZXIoY29ubmVjdGlvblVy
bCwgbnVsbCwgY2FsbGJhY2tzKS5tYWtlUmVxdWVzdCgpOwotICB9Ci0KLSAgLy8gRGlzY29ubmVj
dCBmcm9tIHJvb20gYW5kIHNlbmQgYnllIG1lc3NhZ2VzIC0gcnVucyBvbiBhIGxvY2FsIGxvb3Bl
ciB0aHJlYWQuCi0gIHByaXZhdGUgdm9pZCBkaXNjb25uZWN0RnJvbVJvb21JbnRlcm5hbCgpIHsK
LSAgICBMb2cuZChUQUcsICJEaXNjb25uZWN0LiBSb29tIHN0YXRlOiAiICsgcm9vbVN0YXRlKTsK
LSAgICBpZiAocm9vbVN0YXRlID09IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAg
IExvZy5kKFRBRywgIkNsb3Npbmcgcm9vbS4iKTsKLSAgICAgIHNlbmRQb3N0TWVzc2FnZShNZXNz
YWdlVHlwZS5MRUFWRSwgbGVhdmVVcmwsIG51bGwpOwotICAgIH0KLSAgICByb29tU3RhdGUgPSBD
b25uZWN0aW9uU3RhdGUuQ0xPU0VEOwotICAgIGlmICh3c0NsaWVudCAhPSBudWxsKSB7Ci0gICAg
ICB3c0NsaWVudC5kaXNjb25uZWN0KHRydWUpOwotICAgIH0KLSAgfQotCi0gIC8vIEhlbHBlciBm
dW5jdGlvbnMgdG8gZ2V0IGNvbm5lY3Rpb24sIHBvc3QgbWVzc2FnZSBhbmQgbGVhdmUgbWVzc2Fn
ZSBVUkxzCi0gIHByaXZhdGUgU3RyaW5nIGdldENvbm5lY3Rpb25VcmwoUm9vbUNvbm5lY3Rpb25Q
YXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJzKSB7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25Q
YXJhbWV0ZXJzLnJvb21VcmwgKyAiLyIgKyBST09NX0pPSU4gKyAiLyIgKyBjb25uZWN0aW9uUGFy
YW1ldGVycy5yb29tSWQ7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRNZXNzYWdlVXJsKAot
ICAgICAgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLCBTaWdu
YWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnMpIHsKLSAgICByZXR1cm4gY29ubmVj
dGlvblBhcmFtZXRlcnMucm9vbVVybCArICIvIiArIFJPT01fTUVTU0FHRSArICIvIiArIGNvbm5l
Y3Rpb25QYXJhbWV0ZXJzLnJvb21JZAotICAgICAgICArICIvIiArIHNpZ25hbGluZ1BhcmFtZXRl
cnMuY2xpZW50SWQ7Ci0gIH0KLQotICBwcml2YXRlIFN0cmluZyBnZXRMZWF2ZVVybCgKLSAgICAg
IFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVycywgU2lnbmFsaW5n
UGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzKSB7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25Q
YXJhbWV0ZXJzLnJvb21VcmwgKyAiLyIgKyBST09NX0xFQVZFICsgIi8iICsgY29ubmVjdGlvblBh
cmFtZXRlcnMucm9vbUlkICsgIi8iCi0gICAgICAgICsgc2lnbmFsaW5nUGFyYW1ldGVycy5jbGll
bnRJZDsKLSAgfQotCi0gIC8vIENhbGxiYWNrIGlzc3VlZCB3aGVuIHJvb20gcGFyYW1ldGVycyBh
cmUgZXh0cmFjdGVkLiBSdW5zIG9uIGxvY2FsCi0gIC8vIGxvb3BlciB0aHJlYWQuCi0gIHByaXZh
dGUgdm9pZCBzaWduYWxpbmdQYXJhbWV0ZXJzUmVhZHkoZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVy
cyBzaWduYWxpbmdQYXJhbWV0ZXJzKSB7Ci0gICAgTG9nLmQoVEFHLCAiUm9vbSBjb25uZWN0aW9u
IGNvbXBsZXRlZC4iKTsKLSAgICBpZiAoY29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2sKLSAg
ICAgICAgJiYgKCFzaWduYWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvciB8fCBzaWduYWxpbmdQYXJh
bWV0ZXJzLm9mZmVyU2RwICE9IG51bGwpKSB7Ci0gICAgICByZXBvcnRFcnJvcigiTG9vcGJhY2sg
cm9vbSBpcyBidXN5LiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWNvbm5lY3Rp
b25QYXJhbWV0ZXJzLmxvb3BiYWNrICYmICFzaWduYWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvcgot
ICAgICAgICAmJiBzaWduYWxpbmdQYXJhbWV0ZXJzLm9mZmVyU2RwID09IG51bGwpIHsKLSAgICAg
IExvZy53KFRBRywgIk5vIG9mZmVyIFNEUCBpbiByb29tIHJlc3BvbnNlLiIpOwotICAgIH0KLSAg
ICBpbml0aWF0b3IgPSBzaWduYWxpbmdQYXJhbWV0ZXJzLmluaXRpYXRvcjsKLSAgICBtZXNzYWdl
VXJsID0gZ2V0TWVzc2FnZVVybChjb25uZWN0aW9uUGFyYW1ldGVycywgc2lnbmFsaW5nUGFyYW1l
dGVycyk7Ci0gICAgbGVhdmVVcmwgPSBnZXRMZWF2ZVVybChjb25uZWN0aW9uUGFyYW1ldGVycywg
c2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0gICAgTG9nLmQoVEFHLCAiTWVzc2FnZSBVUkw6ICIgKyBt
ZXNzYWdlVXJsKTsKLSAgICBMb2cuZChUQUcsICJMZWF2ZSBVUkw6ICIgKyBsZWF2ZVVybCk7Ci0g
ICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRDsKLQotICAgIC8vIEZpcmUg
Y29ubmVjdGlvbiBhbmQgc2lnbmFsaW5nIHBhcmFtZXRlcnMgZXZlbnRzLgotICAgIGV2ZW50cy5v
bkNvbm5lY3RlZFRvUm9vbShzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLQotICAgIC8vIENvbm5lY3Qg
YW5kIHJlZ2lzdGVyIFdlYlNvY2tldCBjbGllbnQuCi0gICAgd3NDbGllbnQuY29ubmVjdChzaWdu
YWxpbmdQYXJhbWV0ZXJzLndzc1VybCwgc2lnbmFsaW5nUGFyYW1ldGVycy53c3NQb3N0VXJsKTsK
LSAgICB3c0NsaWVudC5yZWdpc3Rlcihjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tSWQsIHNpZ25h
bGluZ1BhcmFtZXRlcnMuY2xpZW50SWQpOwotICB9Ci0KLSAgLy8gU2VuZCBsb2NhbCBvZmZlciBT
RFAgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
c2VuZE9mZmVyU2RwKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBoYW5kbGVy
LnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5F
Q1RFRCkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJTZW5kaW5nIG9mZmVyIFNEUCBpbiBub24g
Y29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpz
b24sICJzZHAiLCBzZHAuZGVzY3JpcHRpb24pOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBl
IiwgIm9mZmVyIik7Ci0gICAgICAgIHNlbmRQb3N0TWVzc2FnZShNZXNzYWdlVHlwZS5NRVNTQUdF
LCBtZXNzYWdlVXJsLCBqc29uLnRvU3RyaW5nKCkpOwotICAgICAgICBpZiAoY29ubmVjdGlvblBh
cmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgICAgICAvLyBJbiBsb29wYmFjayBtb2RlIHJlbmFt
ZSB0aGlzIG9mZmVyIHRvIGFuc3dlciBhbmQgcm91dGUgaXQgYmFjay4KLSAgICAgICAgICBTZXNz
aW9uRGVzY3JpcHRpb24gc2RwQW5zd2VyID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAg
ICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dl
ciIpLCBzZHAuZGVzY3JpcHRpb24pOwotICAgICAgICAgIGV2ZW50cy5vblJlbW90ZURlc2NyaXB0
aW9uKHNkcEFuc3dlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8v
IFNlbmQgbG9jYWwgYW5zd2VyIFNEUCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBzZW5kQW5zd2VyU2RwKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlv
biBzZHApIHsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChjb25uZWN0aW9uUGFy
YW1ldGVycy5sb29wYmFjaykgewotICAgICAgICAgIExvZy5lKFRBRywgIlNlbmRpbmcgYW5zd2Vy
IGluIGxvb3BiYWNrIG1vZGUuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQo
anNvbiwgInNkcCIsIHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5
cGUiLCAiYW5zd2VyIik7Ci0gICAgICAgIHdzQ2xpZW50LnNlbmQoanNvbi50b1N0cmluZygpKTsK
LSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIFNlbmQgSWNlIGNhbmRpZGF0ZSB0byB0aGUg
b3RoZXIgcGFydGljaXBhbnQuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZW5kTG9jYWxJ
Y2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgIGhhbmRsZXIu
cG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAg
ICAgICAganNvblB1dChqc29uLCAidHlwZSIsICJjYW5kaWRhdGUiKTsKLSAgICAgICAganNvblB1
dChqc29uLCAibGFiZWwiLCBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCk7Ci0gICAgICAgIGpzb25Q
dXQoanNvbiwgImlkIiwgY2FuZGlkYXRlLnNkcE1pZCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwg
ImNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5zZHApOwotICAgICAgICBpZiAoaW5pdGlhdG9yKSB7Ci0g
ICAgICAgICAgLy8gQ2FsbCBpbml0aWF0b3Igc2VuZHMgaWNlIGNhbmRpZGF0ZXMgdG8gR0FFIHNl
cnZlci4KLSAgICAgICAgICBpZiAocm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNU
RUQpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJTZW5kaW5nIElDRSBjYW5kaWRhdGUgaW4g
bm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgc2VuZFBvc3RNZXNzYWdlKE1lc3NhZ2VUeXBlLk1FU1NBR0UsIG1lc3NhZ2VV
cmwsIGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJz
Lmxvb3BiYWNrKSB7Ci0gICAgICAgICAgICBldmVudHMub25SZW1vdGVJY2VDYW5kaWRhdGUoY2Fu
ZGlkYXRlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gQ2Fs
bCByZWNlaXZlciBzZW5kcyBpY2UgY2FuZGlkYXRlcyB0byB3ZWJzb2NrZXQgc2VydmVyLgotICAg
ICAgICAgIHdzQ2xpZW50LnNlbmQoanNvbi50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgLy8gU2VuZCByZW1vdmVkIEljZSBjYW5kaWRhdGVzIHRvIHRo
ZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRMb2Nh
bEljZUNhbmRpZGF0ZVJlbW92YWxzKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsK
LSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09O
T2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAicmVtb3ZlLWNhbmRpZGF0
ZXMiKTsKLSAgICAgICAgSlNPTkFycmF5IGpzb25BcnJheSA9IG5ldyBKU09OQXJyYXkoKTsKLSAg
ICAgICAgZm9yIChmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgewot
ICAgICAgICAgIGpzb25BcnJheS5wdXQodG9Kc29uQ2FuZGlkYXRlKGNhbmRpZGF0ZSkpOwotICAg
ICAgICB9Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZXMiLCBqc29uQXJyYXkpOwot
ICAgICAgICBpZiAoaW5pdGlhdG9yKSB7Ci0gICAgICAgICAgLy8gQ2FsbCBpbml0aWF0b3Igc2Vu
ZHMgaWNlIGNhbmRpZGF0ZXMgdG8gR0FFIHNlcnZlci4KLSAgICAgICAgICBpZiAocm9vbVN0YXRl
ICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9y
KCJTZW5kaW5nIElDRSBjYW5kaWRhdGUgcmVtb3ZhbHMgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4i
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgc2VuZFBvc3RN
ZXNzYWdlKE1lc3NhZ2VUeXBlLk1FU1NBR0UsIG1lc3NhZ2VVcmwsIGpzb24udG9TdHJpbmcoKSk7
Ci0gICAgICAgICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICAg
ICAgICBldmVudHMub25SZW1vdGVJY2VDYW5kaWRhdGVzUmVtb3ZlZChjYW5kaWRhdGVzKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLy8gQ2FsbCByZWNlaXZlciBz
ZW5kcyBpY2UgY2FuZGlkYXRlcyB0byB3ZWJzb2NrZXQgc2VydmVyLgotICAgICAgICAgIHdzQ2xp
ZW50LnNlbmQoanNvbi50b1N0cmluZygpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwot
ICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gV2ViU29ja2V0Q2hhbm5lbEV2ZW50cyBpbnRl
cmZhY2UgaW1wbGVtZW50YXRpb24uCi0gIC8vIEFsbCBldmVudHMgYXJlIGNhbGxlZCBieSBXZWJT
b2NrZXRDaGFubmVsQ2xpZW50IG9uIGEgbG9jYWwgbG9vcGVyIHRocmVhZAotICAvLyAocGFzc2Vk
IHRvIFdlYlNvY2tldCBjbGllbnQgY29uc3RydWN0b3IpLgotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25XZWJTb2NrZXRNZXNzYWdlKGZpbmFsIFN0cmluZyBtc2cpIHsKLSAgICBpZiAod3ND
bGllbnQuZ2V0U3RhdGUoKSAhPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuUkVHSVNURVJFRCkg
ewotICAgICAgTG9nLmUoVEFHLCAiR290IFdlYlNvY2tldCBtZXNzYWdlIGluIG5vbiByZWdpc3Rl
cmVkIHN0YXRlLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB0cnkgewotICAgICAgSlNP
Tk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QobXNnKTsKLSAgICAgIFN0cmluZyBtc2dUZXh0
ID0ganNvbi5nZXRTdHJpbmcoIm1zZyIpOwotICAgICAgU3RyaW5nIGVycm9yVGV4dCA9IGpzb24u
b3B0U3RyaW5nKCJlcnJvciIpOwotICAgICAgaWYgKG1zZ1RleHQubGVuZ3RoKCkgPiAwKSB7Ci0g
ICAgICAgIGpzb24gPSBuZXcgSlNPTk9iamVjdChtc2dUZXh0KTsKLSAgICAgICAgU3RyaW5nIHR5
cGUgPSBqc29uLm9wdFN0cmluZygidHlwZSIpOwotICAgICAgICBpZiAodHlwZS5lcXVhbHMoImNh
bmRpZGF0ZSIpKSB7Ci0gICAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2FuZGlkYXRlKHRvSmF2
YUNhbmRpZGF0ZShqc29uKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoInJlbW92
ZS1jYW5kaWRhdGVzIikpIHsKLSAgICAgICAgICBKU09OQXJyYXkgY2FuZGlkYXRlQXJyYXkgPSBq
c29uLmdldEpTT05BcnJheSgiY2FuZGlkYXRlcyIpOwotICAgICAgICAgIEljZUNhbmRpZGF0ZVtd
IGNhbmRpZGF0ZXMgPSBuZXcgSWNlQ2FuZGlkYXRlW2NhbmRpZGF0ZUFycmF5Lmxlbmd0aCgpXTsK
LSAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbmRpZGF0ZUFycmF5Lmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGNhbmRpZGF0ZXNbaV0gPSB0b0phdmFDYW5kaWRhdGUoY2FuZGlk
YXRlQXJyYXkuZ2V0SlNPTk9iamVjdChpKSk7Ci0gICAgICAgICAgfQotICAgICAgICAgIGV2ZW50
cy5vblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1vdmVkKGNhbmRpZGF0ZXMpOwotICAgICAgICB9IGVs
c2UgaWYgKHR5cGUuZXF1YWxzKCJhbnN3ZXIiKSkgewotICAgICAgICAgIGlmIChpbml0aWF0b3Ip
IHsKLSAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAgPSBuZXcgU2Vzc2lvbkRlc2Ny
aXB0aW9uKAotICAgICAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5v
bmljYWxGb3JtKHR5cGUpLCBqc29uLmdldFN0cmluZygic2RwIikpOwotICAgICAgICAgICAgZXZl
bnRzLm9uUmVtb3RlRGVzY3JpcHRpb24oc2RwKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgcmVwb3J0RXJyb3IoIlJlY2VpdmVkIGFuc3dlciBmb3IgY2FsbCBpbml0aWF0b3I6ICIg
KyBtc2cpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygib2Zm
ZXIiKSkgewotICAgICAgICAgIGlmICghaW5pdGlhdG9yKSB7Ci0gICAgICAgICAgICBTZXNzaW9u
RGVzY3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAgICAg
ICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSh0eXBlKSwganNvbi5n
ZXRTdHJpbmcoInNkcCIpKTsKLSAgICAgICAgICAgIGV2ZW50cy5vblJlbW90ZURlc2NyaXB0aW9u
KHNkcCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJSZWNl
aXZlZCBvZmZlciBmb3IgY2FsbCByZWNlaXZlcjogIiArIG1zZyk7Ci0gICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJieWUiKSkgewotICAgICAgICAgIGV2ZW50cy5v
bkNoYW5uZWxDbG9zZSgpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlcG9ydEVycm9y
KCJVbmV4cGVjdGVkIFdlYlNvY2tldCBtZXNzYWdlOiAiICsgbXNnKTsKLSAgICAgICAgfQotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGVycm9yVGV4dCAhPSBudWxsICYmIGVycm9yVGV4dC5s
ZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0IGVycm9yIG1l
c3NhZ2U6ICIgKyBlcnJvclRleHQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHJlcG9y
dEVycm9yKCJVbmV4cGVjdGVkIFdlYlNvY2tldCBtZXNzYWdlOiAiICsgbXNnKTsKLSAgICAgICAg
fQotICAgICAgfQotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0
RXJyb3IoIldlYlNvY2tldCBtZXNzYWdlIEpTT04gcGFyc2luZyBlcnJvcjogIiArIGUudG9TdHJp
bmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uV2ViU29j
a2V0Q2xvc2UoKSB7Ci0gICAgZXZlbnRzLm9uQ2hhbm5lbENsb3NlKCk7Ci0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgb25XZWJTb2NrZXRFcnJvcihTdHJpbmcgZGVzY3JpcHRpb24p
IHsKLSAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0IGVycm9yOiAiICsgZGVzY3JpcHRpb24pOwot
ICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gSGVscGVyIGZ1bmN0aW9ucy4KLSAgcHJpdmF0
ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2cu
ZShUQUcsIGVycm9yTWVzc2FnZSk7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAo
cm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5FUlJPUikgewotICAgICAgICAgIHJvb21TdGF0
ZSA9IENvbm5lY3Rpb25TdGF0ZS5FUlJPUjsKLSAgICAgICAgICBldmVudHMub25DaGFubmVsRXJy
b3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
Ly8gUHV0IGEgfGtleXwtPnx2YWx1ZXwgbWFwcGluZyBpbiB8anNvbnwuCi0gIHByaXZhdGUgc3Rh
dGljIHZvaWQganNvblB1dChKU09OT2JqZWN0IGpzb24sIFN0cmluZyBrZXksIE9iamVjdCB2YWx1
ZSkgewotICAgIHRyeSB7Ci0gICAgICBqc29uLnB1dChrZXksIHZhbHVlKTsKLSAgICB9IGNhdGNo
IChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUp
OwotICAgIH0KLSAgfQotCi0gIC8vIFNlbmQgU0RQIG9yIElDRSBjYW5kaWRhdGUgdG8gYSByb29t
IHNlcnZlci4KLSAgcHJpdmF0ZSB2b2lkIHNlbmRQb3N0TWVzc2FnZSgKLSAgICAgIGZpbmFsIE1l
c3NhZ2VUeXBlIG1lc3NhZ2VUeXBlLCBmaW5hbCBTdHJpbmcgdXJsLCBmaW5hbCBTdHJpbmcgbWVz
c2FnZSkgewotICAgIFN0cmluZyBsb2dJbmZvID0gdXJsOwotICAgIGlmIChtZXNzYWdlICE9IG51
bGwpIHsKLSAgICAgIGxvZ0luZm8gKz0gIi4gTWVzc2FnZTogIiArIG1lc3NhZ2U7Ci0gICAgfQot
ICAgIExvZy5kKFRBRywgIkMtPkdBRTogIiArIGxvZ0luZm8pOwotICAgIEFzeW5jSHR0cFVSTENv
bm5lY3Rpb24gaHR0cENvbm5lY3Rpb24gPQotICAgICAgICBuZXcgQXN5bmNIdHRwVVJMQ29ubmVj
dGlvbigiUE9TVCIsIHVybCwgbWVzc2FnZSwgbmV3IEFzeW5jSHR0cEV2ZW50cygpIHsKLSAgICAg
ICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0dHBFcnJvcihTdHJpbmcg
ZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiR0FFIFBPU1QgZXJyb3I6
ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIH0KLQotICAgICAgICAgIEBPdmVycmlkZQot
ICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cENvbXBsZXRlKFN0cmluZyByZXNwb25zZSkgewot
ICAgICAgICAgICAgaWYgKG1lc3NhZ2VUeXBlID09IE1lc3NhZ2VUeXBlLk1FU1NBR0UpIHsKLSAg
ICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBKU09OT2JqZWN0IHJvb21Kc29uID0g
bmV3IEpTT05PYmplY3QocmVzcG9uc2UpOwotICAgICAgICAgICAgICAgIFN0cmluZyByZXN1bHQg
PSByb29tSnNvbi5nZXRTdHJpbmcoInJlc3VsdCIpOwotICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0LmVxdWFscygiU1VDQ0VTUyIpKSB7Ci0gICAgICAgICAgICAgICAgICByZXBvcnRFcnJvcigi
R0FFIFBPU1QgZXJyb3I6ICIgKyByZXN1bHQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgcmVwb3J0
RXJyb3IoIkdBRSBQT1NUIEpTT04gZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICBodHRw
Q29ubmVjdGlvbi5zZW5kKCk7Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBhIEphdmEgY2FuZGlkYXRl
IHRvIGEgSlNPTk9iamVjdC4KLSAgcHJpdmF0ZSBKU09OT2JqZWN0IHRvSnNvbkNhbmRpZGF0ZShm
aW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3
IEpTT05PYmplY3QoKTsKLSAgICBqc29uUHV0KGpzb24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBN
TGluZUluZGV4KTsKLSAgICBqc29uUHV0KGpzb24sICJpZCIsIGNhbmRpZGF0ZS5zZHBNaWQpOwot
ICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5zZHApOwotICAgIHJldHVy
biBqc29uOwotICB9Ci0KLSAgLy8gQ29udmVydHMgYSBKU09OIGNhbmRpZGF0ZSB0byBhIEphdmEg
b2JqZWN0LgotICBJY2VDYW5kaWRhdGUgdG9KYXZhQ2FuZGlkYXRlKEpTT05PYmplY3QganNvbikg
dGhyb3dzIEpTT05FeGNlcHRpb24gewotICAgIHJldHVybiBuZXcgSWNlQ2FuZGlkYXRlKAotICAg
ICAgICBqc29uLmdldFN0cmluZygiaWQiKSwganNvbi5nZXRJbnQoImxhYmVsIiksIGpzb24uZ2V0
U3RyaW5nKCJjYW5kaWRhdGUiKSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy91dGlsL0FwcFJUQ1V0aWxzLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL3V0aWwvQXBwUlRDVXRpbHMuamF2YQkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwvQXBwUlRDVXRpbHMuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdl
YlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLmFwcHNwb3QuYXBwcnRjLnV0aWw7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1w
b3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLS8qKgotICogQXBwUlRDVXRpbHMgcHJvdmlkZXMgaGVs
cGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgdGhyZWFkIHNhZmV0eS4KLSAqLwotcHVibGljIGZp
bmFsIGNsYXNzIEFwcFJUQ1V0aWxzIHsKLSAgcHJpdmF0ZSBBcHBSVENVdGlscygpIHt9Ci0KLSAg
LyoqIEhlbHBlciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiAgd2hlbiBhbiBhc3Nl
cnRpb24gaGFzIGZhaWxlZC4gKi8KLSAgcHVibGljIHN0YXRpYyB2b2lkIGFzc2VydElzVHJ1ZShi
b29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBu
ZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAg
fQotICB9Ci0KLSAgLyoqIEhlbHBlciBtZXRob2QgZm9yIGJ1aWxkaW5nIGEgc3RyaW5nIG9mIHRo
cmVhZCBpbmZvcm1hdGlvbi4qLwotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUaHJlYWRJbmZv
KCkgewotICAgIHJldHVybiAiQFtuYW1lPSIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5h
bWUoKSArICIsIGlkPSIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldElkKCkKLSAgICAgICAg
KyAiXSI7Ci0gIH0KLQotICAvKiogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgYnVpbGQs
IHRha2VuIGZyb20gc3lzdGVtIHByb3BlcnRpZXMuICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBs
b2dEZXZpY2VJbmZvKFN0cmluZyB0YWcpIHsKLSAgICBMb2cuZCh0YWcsICJBbmRyb2lkIFNESzog
IiArIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCArICIsICIKLSAgICAgICAgICAgICsgIlJlbGVhc2U6
ICIgKyBCdWlsZC5WRVJTSU9OLlJFTEVBU0UgKyAiLCAiCi0gICAgICAgICAgICArICJCcmFuZDog
IiArIEJ1aWxkLkJSQU5EICsgIiwgIgotICAgICAgICAgICAgKyAiRGV2aWNlOiAiICsgQnVpbGQu
REVWSUNFICsgIiwgIgotICAgICAgICAgICAgKyAiSWQ6ICIgKyBCdWlsZC5JRCArICIsICIKLSAg
ICAgICAgICAgICsgIkhhcmR3YXJlOiAiICsgQnVpbGQuSEFSRFdBUkUgKyAiLCAiCi0gICAgICAg
ICAgICArICJNYW51ZmFjdHVyZXI6ICIgKyBCdWlsZC5NQU5VRkFDVFVSRVIgKyAiLCAiCi0gICAg
ICAgICAgICArICJNb2RlbDogIiArIEJ1aWxkLk1PREVMICsgIiwgIgotICAgICAgICAgICAgKyAi
UHJvZHVjdDogIiArIEJ1aWxkLlBST0RVQ1QpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvdXRpbC9Bc3luY0h0dHBVUkxDb25uZWN0aW9uLmphdmEKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwvQXN5bmNIdHRwVVJMQ29ubmVj
dGlvbi5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvdXRpbC9Bc3luY0h0dHBVUkxDb25uZWN0aW9uLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBy
dGMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5J
bnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5l
dC5IdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXRUaW1lb3V0RXhjZXB0
aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKLQot
LyoqCi0gKiBBc3luY2hyb25vdXMgaHR0cCByZXF1ZXN0cyBpbXBsZW1lbnRhdGlvbi4KLSAqLwot
cHVibGljIGNsYXNzIEFzeW5jSHR0cFVSTENvbm5lY3Rpb24gewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgSFRUUF9USU1FT1VUX01TID0gODAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIEhUVFBfT1JJR0lOID0gImh0dHBzOi8vYXBwci50YyI7Ci0gIHByaXZhdGUgZmluYWwg
U3RyaW5nIG1ldGhvZDsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXJsOwotICBwcml2YXRlIGZp
bmFsIFN0cmluZyBtZXNzYWdlOwotICBwcml2YXRlIGZpbmFsIEFzeW5jSHR0cEV2ZW50cyBldmVu
dHM7Ci0gIHByaXZhdGUgU3RyaW5nIGNvbnRlbnRUeXBlOwotCi0gIC8qKgotICAgKiBIdHRwIHJl
cXVlc3RzIGNhbGxiYWNrcy4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgQXN5bmNIdHRwRXZl
bnRzIHsKLSAgICB2b2lkIG9uSHR0cEVycm9yKFN0cmluZyBlcnJvck1lc3NhZ2UpOwotICAgIHZv
aWQgb25IdHRwQ29tcGxldGUoU3RyaW5nIHJlc3BvbnNlKTsKLSAgfQotCi0gIHB1YmxpYyBBc3lu
Y0h0dHBVUkxDb25uZWN0aW9uKFN0cmluZyBtZXRob2QsIFN0cmluZyB1cmwsIFN0cmluZyBtZXNz
YWdlLCBBc3luY0h0dHBFdmVudHMgZXZlbnRzKSB7Ci0gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7
Ci0gICAgdGhpcy51cmwgPSB1cmw7Ci0gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKLSAgICB0
aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldENvbnRlbnRUeXBl
KFN0cmluZyBjb250ZW50VHlwZSkgewotICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlw
ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNlbmQoKSB7Ci0gICAgUnVubmFibGUgcnVuSHR0cCA9
IG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc2Vu
ZEh0dHBNZXNzYWdlKCk7Ci0gICAgICB9Ci0gICAgfTsKLSAgICBuZXcgVGhyZWFkKHJ1bkh0dHAp
LnN0YXJ0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VuZEh0dHBNZXNzYWdlKCkgewotICAg
IHRyeSB7Ci0gICAgICBIdHRwVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gKEh0dHBVUkxDb25u
ZWN0aW9uKSBuZXcgVVJMKHVybCkub3BlbkNvbm5lY3Rpb24oKTsKLSAgICAgIGJ5dGVbXSBwb3N0
RGF0YSA9IG5ldyBieXRlWzBdOwotICAgICAgaWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotICAgICAg
ICBwb3N0RGF0YSA9IG1lc3NhZ2UuZ2V0Qnl0ZXMoIlVURi04Iik7Ci0gICAgICB9Ci0gICAgICBj
b25uZWN0aW9uLnNldFJlcXVlc3RNZXRob2QobWV0aG9kKTsKLSAgICAgIGNvbm5lY3Rpb24uc2V0
VXNlQ2FjaGVzKGZhbHNlKTsKLSAgICAgIGNvbm5lY3Rpb24uc2V0RG9JbnB1dCh0cnVlKTsKLSAg
ICAgIGNvbm5lY3Rpb24uc2V0Q29ubmVjdFRpbWVvdXQoSFRUUF9USU1FT1VUX01TKTsKLSAgICAg
IGNvbm5lY3Rpb24uc2V0UmVhZFRpbWVvdXQoSFRUUF9USU1FT1VUX01TKTsKLSAgICAgIC8vIFRP
RE8oZ2xhem5ldikgLSBxdWVyeSByZXF1ZXN0IG9yaWdpbiBmcm9tIHByZWZfcm9vbV9zZXJ2ZXJf
dXJsX2tleSBwcmVmZXJlbmNlcy4KLSAgICAgIGNvbm5lY3Rpb24uYWRkUmVxdWVzdFByb3BlcnR5
KCJvcmlnaW4iLCBIVFRQX09SSUdJTik7Ci0gICAgICBib29sZWFuIGRvT3V0cHV0ID0gZmFsc2U7
Ci0gICAgICBpZiAobWV0aG9kLmVxdWFscygiUE9TVCIpKSB7Ci0gICAgICAgIGRvT3V0cHV0ID0g
dHJ1ZTsKLSAgICAgICAgY29ubmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKLSAgICAgICAgY29u
bmVjdGlvbi5zZXRGaXhlZExlbmd0aFN0cmVhbWluZ01vZGUocG9zdERhdGEubGVuZ3RoKTsKLSAg
ICAgIH0KLSAgICAgIGlmIChjb250ZW50VHlwZSA9PSBudWxsKSB7Ci0gICAgICAgIGNvbm5lY3Rp
b24uc2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50LVR5cGUiLCAidGV4dC9wbGFpbjsgY2hhcnNl
dD11dGYtOCIpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0
UHJvcGVydHkoIkNvbnRlbnQtVHlwZSIsIGNvbnRlbnRUeXBlKTsKLSAgICAgIH0KLQotICAgICAg
Ly8gU2VuZCBQT1NUIHJlcXVlc3QuCi0gICAgICBpZiAoZG9PdXRwdXQgJiYgcG9zdERhdGEubGVu
Z3RoID4gMCkgewotICAgICAgICBPdXRwdXRTdHJlYW0gb3V0U3RyZWFtID0gY29ubmVjdGlvbi5n
ZXRPdXRwdXRTdHJlYW0oKTsKLSAgICAgICAgb3V0U3RyZWFtLndyaXRlKHBvc3REYXRhKTsKLSAg
ICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIEdldCByZXNwb25z
ZS4KLSAgICAgIGludCByZXNwb25zZUNvZGUgPSBjb25uZWN0aW9uLmdldFJlc3BvbnNlQ29kZSgp
OwotICAgICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKLSAgICAgICAgZXZlbnRzLm9uSHR0
cEVycm9yKCJOb24tMjAwIHJlc3BvbnNlIHRvICIgKyBtZXRob2QgKyAiIHRvIFVSTDogIiArIHVy
bCArICIgOiAiCi0gICAgICAgICAgICArIGNvbm5lY3Rpb24uZ2V0SGVhZGVyRmllbGQobnVsbCkp
OwotICAgICAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgcmV0dXJuOwotICAg
ICAgfQotICAgICAgSW5wdXRTdHJlYW0gcmVzcG9uc2VTdHJlYW0gPSBjb25uZWN0aW9uLmdldElu
cHV0U3RyZWFtKCk7Ci0gICAgICBTdHJpbmcgcmVzcG9uc2UgPSBkcmFpblN0cmVhbShyZXNwb25z
ZVN0cmVhbSk7Ci0gICAgICByZXNwb25zZVN0cmVhbS5jbG9zZSgpOwotICAgICAgY29ubmVjdGlv
bi5kaXNjb25uZWN0KCk7Ci0gICAgICBldmVudHMub25IdHRwQ29tcGxldGUocmVzcG9uc2UpOwot
ICAgIH0gY2F0Y2ggKFNvY2tldFRpbWVvdXRFeGNlcHRpb24gZSkgewotICAgICAgZXZlbnRzLm9u
SHR0cEVycm9yKCJIVFRQICIgKyBtZXRob2QgKyAiIHRvICIgKyB1cmwgKyAiIHRpbWVvdXQiKTsK
LSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBldmVudHMub25IdHRwRXJyb3Io
IkhUVFAgIiArIG1ldGhvZCArICIgdG8gIiArIHVybCArICIgZXJyb3I6ICIgKyBlLmdldE1lc3Nh
Z2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJuIHRoZSBjb250ZW50cyBvZiBhbiBJbnB1
dFN0cmVhbSBhcyBhIFN0cmluZy4KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGRyYWluU3RyZWFt
KElucHV0U3RyZWFtIGluKSB7Ci0gICAgU2Nhbm5lciBzID0gbmV3IFNjYW5uZXIoaW4pLnVzZURl
bGltaXRlcigiXFxBIik7Ci0gICAgcmV0dXJuIHMuaGFzTmV4dCgpID8gcy5uZXh0KCkgOiAiIjsK
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0F1ZGlvTWFu
YWdlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBS
VENBdWRpb01hbmFnZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL0FwcFJUQ0F1ZGlvTWFuYWdlci5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
NDE5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBw
cnRjOwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXBwUlRDVXRpbHM7Ci0KLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuQnJvYWRjYXN0UmVjZWl2ZXI7Ci1pbXBvcnQgYW5kcm9pZC5j
b250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBh
bmRyb2lkLmNvbnRlbnQuSW50ZW50RmlsdGVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5TaGFy
ZWRQcmVmZXJlbmNlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1hbmFnZXI7
Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5wcmVm
ZXJlbmNlLlByZWZlcmVuY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWlt
cG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7Ci1p
bXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBBcHBSVENBdWRpb01hbmFnZXIgbWFuYWdl
cyBhbGwgYXVkaW8gcmVsYXRlZCBwYXJ0cyBvZiB0aGUgQXBwUlRDIGRlbW8uCi0gKi8KLXB1Ymxp
YyBjbGFzcyBBcHBSVENBdWRpb01hbmFnZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJp
bmcgVEFHID0gIkFwcFJUQ0F1ZGlvTWFuYWdlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBTUEVBS0VSUEhPTkVfQVVUTyA9ICJhdXRvIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFNQRUFLRVJQSE9ORV9UUlVFID0gInRydWUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgU1BFQUtFUlBIT05FX0ZBTFNFID0gImZhbHNlIjsKLQotICAvKioKLSAgICogQXVk
aW9EZXZpY2UgaXMgdGhlIG5hbWVzIG9mIHBvc3NpYmxlIGF1ZGlvIGRldmljZXMgdGhhdCB3ZSBj
dXJyZW50bHkKLSAgICogc3VwcG9ydC4KLSAgICovCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBz
dXBwb3J0IGZvciBCTFVFVE9PVEggYXMgd2VsbC4KLSAgcHVibGljIGVudW0gQXVkaW9EZXZpY2Ug
ewotICAgIFNQRUFLRVJfUEhPTkUsCi0gICAgV0lSRURfSEVBRFNFVCwKLSAgICBFQVJQSUVDRSwK
LSAgfQotCi0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBhcHBydGNDb250ZXh0OwotICBwcml2YXRl
IGZpbmFsIFJ1bm5hYmxlIG9uU3RhdGVDaGFuZ2VMaXN0ZW5lcjsKLSAgcHJpdmF0ZSBib29sZWFu
IGluaXRpYWxpemVkID0gZmFsc2U7Ci0gIHByaXZhdGUgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdl
cjsKLSAgcHJpdmF0ZSBpbnQgc2F2ZWRBdWRpb01vZGUgPSBBdWRpb01hbmFnZXIuTU9ERV9JTlZB
TElEOwotICBwcml2YXRlIGJvb2xlYW4gc2F2ZWRJc1NwZWFrZXJQaG9uZU9uID0gZmFsc2U7Ci0g
IHByaXZhdGUgYm9vbGVhbiBzYXZlZElzTWljcm9waG9uZU11dGUgPSBmYWxzZTsKLQotICBwcml2
YXRlIGZpbmFsIEF1ZGlvRGV2aWNlIGRlZmF1bHRBdWRpb0RldmljZTsKLQotICAvLyBDb250YWlu
cyBzcGVha2VycGhvbmUgc2V0dGluZzogYXV0bywgdHJ1ZSBvciBmYWxzZQotICBwcml2YXRlIGZp
bmFsIFN0cmluZyB1c2VTcGVha2VycGhvbmU7Ci0KLSAgLy8gUHJveGltaXR5IHNlbnNvciBvYmpl
Y3QuIEl0IG1lYXN1cmVzIHRoZSBwcm94aW1pdHkgb2YgYW4gb2JqZWN0IGluIGNtCi0gIC8vIHJl
bGF0aXZlIHRvIHRoZSB2aWV3IHNjcmVlbiBvZiBhIGRldmljZSBhbmQgY2FuIHRoZXJlZm9yZSBi
ZSB1c2VkIHRvCi0gIC8vIGFzc2lzdCBkZXZpY2Ugc3dpdGNoaW5nIChjbG9zZSB0byBlYXIgPD0+
IHVzZSBoZWFkc2V0IGVhcnBpZWNlIGlmCi0gIC8vIGF2YWlsYWJsZSwgZmFyIGZyb20gZWFyIDw9
PiB1c2Ugc3BlYWtlciBwaG9uZSkuCi0gIHByaXZhdGUgQXBwUlRDUHJveGltaXR5U2Vuc29yIHBy
b3hpbWl0eVNlbnNvciA9IG51bGw7Ci0KLSAgLy8gQ29udGFpbnMgdGhlIGN1cnJlbnRseSBzZWxl
Y3RlZCBhdWRpbyBkZXZpY2UuCi0gIHByaXZhdGUgQXVkaW9EZXZpY2Ugc2VsZWN0ZWRBdWRpb0Rl
dmljZTsKLQotICAvLyBDb250YWlucyBhIGxpc3Qgb2YgYXZhaWxhYmxlIGF1ZGlvIGRldmljZXMu
IEEgU2V0IGNvbGxlY3Rpb24gaXMgdXNlZCB0bwotICAvLyBhdm9pZCBkdXBsaWNhdGUgZWxlbWVu
dHMuCi0gIHByaXZhdGUgZmluYWwgU2V0PEF1ZGlvRGV2aWNlPiBhdWRpb0RldmljZXMgPSBuZXcg
SGFzaFNldDxBdWRpb0RldmljZT4oKTsKLQotICAvLyBCcm9hZGNhc3QgcmVjZWl2ZXIgZm9yIHdp
cmVkIGhlYWRzZXQgaW50ZW50IGJyb2FkY2FzdHMuCi0gIHByaXZhdGUgQnJvYWRjYXN0UmVjZWl2
ZXIgd2lyZWRIZWFkc2V0UmVjZWl2ZXI7Ci0KLSAgLy8gQ2FsbGJhY2sgbWV0aG9kIGZvciBjaGFu
Z2VzIGluIGF1ZGlvIGZvY3VzLgotICBwcml2YXRlIEF1ZGlvTWFuYWdlci5PbkF1ZGlvRm9jdXND
aGFuZ2VMaXN0ZW5lciBhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXI7Ci0KLSAgLy8gVGhpcyBtZXRo
b2QgaXMgY2FsbGVkIHdoZW4gdGhlIHByb3hpbWl0eSBzZW5zb3IgcmVwb3J0cyBhIHN0YXRlIGNo
YW5nZSwKLSAgLy8gZS5nLiBmcm9tICJORUFSIHRvIEZBUiIgb3IgZnJvbSAiRkFSIHRvIE5FQVIi
LgotICBwcml2YXRlIHZvaWQgb25Qcm94aW1pdHlTZW5zb3JDaGFuZ2VkU3RhdGUoKSB7Ci0gICAg
aWYgKCF1c2VTcGVha2VycGhvbmUuZXF1YWxzKFNQRUFLRVJQSE9ORV9BVVRPKSkgewotICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIFRoZSBwcm94aW1pdHkgc2Vuc29yIHNob3VsZCBvbmx5
IGJlIGFjdGl2YXRlZCB3aGVuIHRoZXJlIGFyZSBleGFjdGx5IHR3bwotICAgIC8vIGF2YWlsYWJs
ZSBhdWRpbyBkZXZpY2VzLgotICAgIGlmIChhdWRpb0RldmljZXMuc2l6ZSgpID09IDIgJiYgYXVk
aW9EZXZpY2VzLmNvbnRhaW5zKEFwcFJUQ0F1ZGlvTWFuYWdlci5BdWRpb0RldmljZS5FQVJQSUVD
RSkKLSAgICAgICAgJiYgYXVkaW9EZXZpY2VzLmNvbnRhaW5zKEFwcFJUQ0F1ZGlvTWFuYWdlci5B
dWRpb0RldmljZS5TUEVBS0VSX1BIT05FKSkgewotICAgICAgaWYgKHByb3hpbWl0eVNlbnNvci5z
ZW5zb3JSZXBvcnRzTmVhclN0YXRlKCkpIHsKLSAgICAgICAgLy8gU2Vuc29yIHJlcG9ydHMgdGhh
dCBhICJoYW5kc2V0IGlzIGJlaW5nIGhlbGQgdXAgdG8gYSBwZXJzb24ncyBlYXIiLAotICAgICAg
ICAvLyBvciAic29tZXRoaW5nIGlzIGNvdmVyaW5nIHRoZSBsaWdodCBzZW5zb3IiLgotICAgICAg
ICBzZXRBdWRpb0RldmljZShBcHBSVENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuRUFSUElFQ0Up
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gU2Vuc29yIHJlcG9ydHMgdGhhdCBhICJoYW5k
c2V0IGlzIHJlbW92ZWQgZnJvbSBhIHBlcnNvbidzIGVhciIsIG9yCi0gICAgICAgIC8vICJ0aGUg
bGlnaHQgc2Vuc29yIGlzIG5vIGxvbmdlciBjb3ZlcmVkIi4KLSAgICAgICAgc2V0QXVkaW9EZXZp
Y2UoQXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkUpOwotICAgICAg
fQotICAgIH0KLSAgfQotCi0gIC8qKiBDb25zdHJ1Y3Rpb24gKi8KLSAgc3RhdGljIEFwcFJUQ0F1
ZGlvTWFuYWdlciBjcmVhdGUoQ29udGV4dCBjb250ZXh0LCBSdW5uYWJsZSBkZXZpY2VTdGF0ZUNo
YW5nZUxpc3RlbmVyKSB7Ci0gICAgcmV0dXJuIG5ldyBBcHBSVENBdWRpb01hbmFnZXIoY29udGV4
dCwgZGV2aWNlU3RhdGVDaGFuZ2VMaXN0ZW5lcik7Ci0gIH0KLQotICBwcml2YXRlIEFwcFJUQ0F1
ZGlvTWFuYWdlcihDb250ZXh0IGNvbnRleHQsIFJ1bm5hYmxlIGRldmljZVN0YXRlQ2hhbmdlTGlz
dGVuZXIpIHsKLSAgICBhcHBydGNDb250ZXh0ID0gY29udGV4dDsKLSAgICBvblN0YXRlQ2hhbmdl
TGlzdGVuZXIgPSBkZXZpY2VTdGF0ZUNoYW5nZUxpc3RlbmVyOwotICAgIGF1ZGlvTWFuYWdlciA9
ICgoQXVkaW9NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BVURJT19T
RVJWSUNFKSk7Ci0KLSAgICBTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcyA9IFBy
ZWZlcmVuY2VNYW5hZ2VyLmdldERlZmF1bHRTaGFyZWRQcmVmZXJlbmNlcyhjb250ZXh0KTsKLSAg
ICB1c2VTcGVha2VycGhvbmUgPSBzaGFyZWRQcmVmZXJlbmNlcy5nZXRTdHJpbmcoY29udGV4dC5n
ZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zcGVha2VycGhvbmVfa2V5KSwKLSAgICAgICAgY29udGV4
dC5nZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zcGVha2VycGhvbmVfZGVmYXVsdCkpOwotCi0gICAg
aWYgKHVzZVNwZWFrZXJwaG9uZS5lcXVhbHMoU1BFQUtFUlBIT05FX0ZBTFNFKSkgewotICAgICAg
ZGVmYXVsdEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZpY2UuRUFSUElFQ0U7Ci0gICAgfSBlbHNlIHsK
LSAgICAgIGRlZmF1bHRBdWRpb0RldmljZSA9IEF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkU7Ci0g
ICAgfQotCi0gICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBwcm94aW1pdHkgc2Vuc29y
LgotICAgIC8vIFRhYmxldCBkZXZpY2VzIChlLmcuIE5leHVzIDcpIGRvZXMgbm90IHN1cHBvcnQg
cHJveGltaXR5IHNlbnNvcnMuCi0gICAgLy8gTm90ZSB0aGF0LCB0aGUgc2Vuc29yIHdpbGwgbm90
IGJlIGFjdGl2ZSB1bnRpbCBzdGFydCgpIGhhcyBiZWVuIGNhbGxlZC4KLSAgICBwcm94aW1pdHlT
ZW5zb3IgPSBBcHBSVENQcm94aW1pdHlTZW5zb3IuY3JlYXRlKGNvbnRleHQsIG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSBhIHN0
YXRlIGNoYW5nZSBpcyBkZXRlY3RlZC4KLSAgICAgIC8vIEV4YW1wbGU6IHVzZXIgaG9sZHMgaGlz
IGhhbmQgb3ZlciB0aGUgZGV2aWNlIChjbG9zZXIgdGhhbiB+NSBjbSksCi0gICAgICAvLyBvciBy
ZW1vdmVzIGhpcyBoYW5kIGZyb20gdGhlIGRldmljZS4KLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgb25Qcm94aW1pdHlTZW5zb3JDaGFuZ2VkU3RhdGUoKTsKLSAgICAgIH0KLSAg
ICB9KTsKLSAgICBBcHBSVENVdGlscy5sb2dEZXZpY2VJbmZvKFRBRyk7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCBpbml0KCkgewotICAgIExvZy5kKFRBRywgImluaXQiKTsKLSAgICBpZiAoaW5pdGlh
bGl6ZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdG9yZSBjdXJyZW50IGF1
ZGlvIHN0YXRlIHNvIHdlIGNhbiByZXN0b3JlIGl0IHdoZW4gY2xvc2UoKSBpcyBjYWxsZWQuCi0g
ICAgc2F2ZWRBdWRpb01vZGUgPSBhdWRpb01hbmFnZXIuZ2V0TW9kZSgpOwotICAgIHNhdmVkSXNT
cGVha2VyUGhvbmVPbiA9IGF1ZGlvTWFuYWdlci5pc1NwZWFrZXJwaG9uZU9uKCk7Ci0gICAgc2F2
ZWRJc01pY3JvcGhvbmVNdXRlID0gYXVkaW9NYW5hZ2VyLmlzTWljcm9waG9uZU11dGUoKTsKLQot
ICAgIC8vIENyZWF0ZSBhbiBBdWRpb01hbmFnZXIuT25BdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIg
aW5zdGFuY2UuCi0gICAgYXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyID0gbmV3IEF1ZGlvTWFuYWdl
ci5PbkF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcigpIHsKLSAgICAgIC8vIENhbGxlZCBvbiB0aGUg
bGlzdGVuZXIgdG8gbm90aWZ5IGlmIHRoZSBhdWRpbyBmb2N1cyBmb3IgdGhpcyBsaXN0ZW5lciBo
YXMgYmVlbiBjaGFuZ2VkLgotICAgICAgLy8gVGhlIHxmb2N1c0NoYW5nZXwgdmFsdWUgaW5kaWNh
dGVzIHdoZXRoZXIgdGhlIGZvY3VzIHdhcyBnYWluZWQsIHdoZXRoZXIgdGhlIGZvY3VzIHdhcyBs
b3N0LAotICAgICAgLy8gYW5kIHdoZXRoZXIgdGhhdCBsb3NzIGlzIHRyYW5zaWVudCwgb3Igd2hl
dGhlciB0aGUgbmV3IGZvY3VzIGhvbGRlciB3aWxsIGhvbGQgaXQgZm9yIGFuCi0gICAgICAvLyB1
bmtub3duIGFtb3VudCBvZiB0aW1lLgotICAgICAgLy8gVE9ETyhoZW5yaWthKTogcG9zc2libHkg
ZXh0ZW5kIHN1cHBvcnQgb2YgaGFuZGxpbmcgYXVkaW8tZm9jdXMgY2hhbmdlcy4gT25seSBjb250
YWlucwotICAgICAgLy8gbG9nZ2luZyBmb3Igbm93LgotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBvbkF1ZGlvRm9jdXNDaGFuZ2UoaW50IGZvY3VzQ2hhbmdlKSB7Ci0gICAgICAg
IFN0cmluZyB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19OT1RfREVGSU5FRCI7Ci0gICAgICAg
IHN3aXRjaCAoZm9jdXNDaGFuZ2UpIHsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJ
T0ZPQ1VTX0dBSU46Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19HQUlO
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElP
Rk9DVVNfR0FJTl9UUkFOU0lFTlQ6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9G
T0NVU19HQUlOX1RSQU5TSUVOVCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNl
IEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5UX0VYQ0xVU0lWRToKLSAgICAg
ICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5UX0VYQ0xVU0lW
RSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJ
T0ZPQ1VTX0dBSU5fVFJBTlNJRU5UX01BWV9EVUNLOgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdl
ID0gIkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlRfTUFZX0RVQ0siOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19MT1NTOgotICAgICAg
ICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfTE9TUyI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5U
OgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfTE9TU19UUkFOU0lFTlQi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9G
T0NVU19MT1NTX1RSQU5TSUVOVF9DQU5fRFVDSzoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9
ICJBVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5UX0NBTl9EVUNLIjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9G
T0NVU19JTlZBTElEIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIExv
Zy5kKFRBRywgIm9uQXVkaW9Gb2N1c0NoYW5nZTogIiArIHR5cGVPZkNoYW5nZSk7Ci0gICAgICB9
Ci0gICAgfTsKLQotICAgIC8vIFJlcXVlc3QgYXVkaW8gcGxheW91dCBmb2N1cyAod2l0aG91dCBk
dWNraW5nKSBhbmQgaW5zdGFsbCBsaXN0ZW5lciBmb3IgY2hhbmdlcyBpbiBmb2N1cy4KLSAgICBp
bnQgcmVzdWx0ID0gYXVkaW9NYW5hZ2VyLnJlcXVlc3RBdWRpb0ZvY3VzKGF1ZGlvRm9jdXNDaGFu
Z2VMaXN0ZW5lciwKLSAgICAgICAgQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMLCBBdWRp
b01hbmFnZXIuQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVCk7Ci0gICAgaWYgKHJlc3VsdCA9PSBB
dWRpb01hbmFnZXIuQVVESU9GT0NVU19SRVFVRVNUX0dSQU5URUQpIHsKLSAgICAgIExvZy5kKFRB
RywgIkF1ZGlvIGZvY3VzIHJlcXVlc3QgZ3JhbnRlZCBmb3IgVk9JQ0VfQ0FMTCBzdHJlYW1zIik7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5lKFRBRywgIkF1ZGlvIGZvY3VzIHJlcXVlc3QgZmFp
bGVkIik7Ci0gICAgfQotCi0gICAgLy8gU3RhcnQgYnkgc2V0dGluZyBNT0RFX0lOX0NPTU1VTklD
QVRJT04gYXMgZGVmYXVsdCBhdWRpbyBtb2RlLiBJdCBpcwotICAgIC8vIHJlcXVpcmVkIHRvIGJl
IGluIHRoaXMgbW9kZSB3aGVuIHBsYXlvdXQgYW5kL29yIHJlY29yZGluZyBzdGFydHMgZm9yCi0g
ICAgLy8gYmVzdCBwb3NzaWJsZSBWb0lQIHBlcmZvcm1hbmNlLgotICAgIC8vIFRPRE8oaGVucmlr
YSk6IHdlIG1pZ2ggd2FudCB0byBzdGFydCB3aXRoIFJJTkdUT05FIG1vZGUgaGVyZSBpbnN0ZWFk
LgotICAgIGF1ZGlvTWFuYWdlci5zZXRNb2RlKEF1ZGlvTWFuYWdlci5NT0RFX0lOX0NPTU1VTklD
QVRJT04pOwotCi0gICAgLy8gQWx3YXlzIGRpc2FibGUgbWljcm9waG9uZSBtdXRlIGR1cmluZyBh
IFdlYlJUQyBjYWxsLgotICAgIHNldE1pY3JvcGhvbmVNdXRlKGZhbHNlKTsKLQotICAgIC8vIERv
IGluaXRpYWwgc2VsZWN0aW9uIG9mIGF1ZGlvIGRldmljZS4gVGhpcyBzZXR0aW5nIGNhbiBsYXRl
ciBiZSBjaGFuZ2VkCi0gICAgLy8gZWl0aGVyIGJ5IGFkZGluZy9yZW1vdmluZyBhIHdpcmVkIGhl
YWRzZXQgb3IgYnkgY292ZXJpbmcvdW5jb3ZlcmluZyB0aGUKLSAgICAvLyBwcm94aW1pdHkgc2Vu
c29yLgotICAgIHVwZGF0ZUF1ZGlvRGV2aWNlU3RhdGUoaGFzV2lyZWRIZWFkc2V0KCkpOwotCi0g
ICAgLy8gUmVnaXN0ZXIgcmVjZWl2ZXIgZm9yIGJyb2FkY2FzdCBpbnRlbnRzIHJlbGF0ZWQgdG8g
YWRkaW5nL3JlbW92aW5nIGEKLSAgICAvLyB3aXJlZCBoZWFkc2V0IChJbnRlbnQuQUNUSU9OX0hF
QURTRVRfUExVRykuCi0gICAgcmVnaXN0ZXJGb3JXaXJlZEhlYWRzZXRJbnRlbnRCcm9hZGNhc3Qo
KTsKLQotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNsb3Nl
KCkgewotICAgIExvZy5kKFRBRywgImNsb3NlIik7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewot
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVucmVnaXN0ZXJGb3JXaXJlZEhlYWRzZXRJbnRl
bnRCcm9hZGNhc3QoKTsKLQotICAgIC8vIFJlc3RvcmUgcHJldmlvdXNseSBzdG9yZWQgYXVkaW8g
c3RhdGVzLgotICAgIHNldFNwZWFrZXJwaG9uZU9uKHNhdmVkSXNTcGVha2VyUGhvbmVPbik7Ci0g
ICAgc2V0TWljcm9waG9uZU11dGUoc2F2ZWRJc01pY3JvcGhvbmVNdXRlKTsKLSAgICBhdWRpb01h
bmFnZXIuc2V0TW9kZShzYXZlZEF1ZGlvTW9kZSk7Ci0KLSAgICAvLyBBYmFuZG9uIGF1ZGlvIGZv
Y3VzLiBHaXZlcyB0aGUgcHJldmlvdXMgZm9jdXMgb3duZXIsIGlmIGFueSwgZm9jdXMuCi0gICAg
YXVkaW9NYW5hZ2VyLmFiYW5kb25BdWRpb0ZvY3VzKGF1ZGlvRm9jdXNDaGFuZ2VMaXN0ZW5lcik7
Ci0gICAgYXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyID0gbnVsbDsKLSAgICBMb2cuZChUQUcsICJB
YmFuZG9uZWQgYXVkaW8gZm9jdXMgZm9yIFZPSUNFX0NBTEwgc3RyZWFtcyIpOwotCi0gICAgaWYg
KHByb3hpbWl0eVNlbnNvciAhPSBudWxsKSB7Ci0gICAgICBwcm94aW1pdHlTZW5zb3Iuc3RvcCgp
OwotICAgICAgcHJveGltaXR5U2Vuc29yID0gbnVsbDsKLSAgICB9Ci0KLSAgICBpbml0aWFsaXpl
ZCA9IGZhbHNlOwotICB9Ci0KLSAgLyoqIENoYW5nZXMgc2VsZWN0aW9uIG9mIHRoZSBjdXJyZW50
bHkgYWN0aXZlIGF1ZGlvIGRldmljZS4gKi8KLSAgcHVibGljIHZvaWQgc2V0QXVkaW9EZXZpY2Uo
QXVkaW9EZXZpY2UgZGV2aWNlKSB7Ci0gICAgTG9nLmQoVEFHLCAic2V0QXVkaW9EZXZpY2UoZGV2
aWNlPSIgKyBkZXZpY2UgKyAiKSIpOwotICAgIEFwcFJUQ1V0aWxzLmFzc2VydElzVHJ1ZShhdWRp
b0RldmljZXMuY29udGFpbnMoZGV2aWNlKSk7Ci0KLSAgICBzd2l0Y2ggKGRldmljZSkgewotICAg
ICAgY2FzZSBTUEVBS0VSX1BIT05FOgotICAgICAgICBzZXRTcGVha2VycGhvbmVPbih0cnVlKTsK
LSAgICAgICAgc2VsZWN0ZWRBdWRpb0RldmljZSA9IEF1ZGlvRGV2aWNlLlNQRUFLRVJfUEhPTkU7
Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFQVJQSUVDRToKLSAgICAgICAgc2V0U3BlYWtl
cnBob25lT24oZmFsc2UpOwotICAgICAgICBzZWxlY3RlZEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZp
Y2UuRUFSUElFQ0U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBXSVJFRF9IRUFEU0VUOgot
ICAgICAgICBzZXRTcGVha2VycGhvbmVPbihmYWxzZSk7Ci0gICAgICAgIHNlbGVjdGVkQXVkaW9E
ZXZpY2UgPSBBdWRpb0RldmljZS5XSVJFRF9IRUFEU0VUOwotICAgICAgICBicmVhazsKLSAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgIExvZy5lKFRBRywgIkludmFsaWQgYXVkaW8gZGV2aWNlIHNlbGVj
dGlvbiIpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgb25BdWRpb01hbmFnZXJDaGFuZ2Vk
U3RhdGUoKTsKLSAgfQotCi0gIC8qKiBSZXR1cm5zIGN1cnJlbnQgc2V0IG9mIGF2YWlsYWJsZS9z
ZWxlY3RhYmxlIGF1ZGlvIGRldmljZXMuICovCi0gIHB1YmxpYyBTZXQ8QXVkaW9EZXZpY2U+IGdl
dEF1ZGlvRGV2aWNlcygpIHsKLSAgICByZXR1cm4gQ29sbGVjdGlvbnMudW5tb2RpZmlhYmxlU2V0
KG5ldyBIYXNoU2V0PEF1ZGlvRGV2aWNlPihhdWRpb0RldmljZXMpKTsKLSAgfQotCi0gIC8qKiBS
ZXR1cm5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYXVkaW8gZGV2aWNlLiAqLwotICBwdWJsaWMg
QXVkaW9EZXZpY2UgZ2V0U2VsZWN0ZWRBdWRpb0RldmljZSgpIHsKLSAgICByZXR1cm4gc2VsZWN0
ZWRBdWRpb0RldmljZTsKLSAgfQotCi0gIC8qKgotICAgKiBSZWdpc3RlcnMgcmVjZWl2ZXIgZm9y
IHRoZSBicm9hZGNhc3RlZCBpbnRlbnQgd2hlbiBhIHdpcmVkIGhlYWRzZXQgaXMKLSAgICogcGx1
Z2dlZCBpbiBvciB1bnBsdWdnZWQuIFRoZSByZWNlaXZlZCBpbnRlbnQgd2lsbCBoYXZlIGFuIGV4
dHJhCi0gICAqICdzdGF0ZScgdmFsdWUgd2hlcmUgMCBtZWFucyB1bnBsdWdnZWQsIGFuZCAxIG1l
YW5zIHBsdWdnZWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJGb3JXaXJlZEhlYWRz
ZXRJbnRlbnRCcm9hZGNhc3QoKSB7Ci0gICAgSW50ZW50RmlsdGVyIGZpbHRlciA9IG5ldyBJbnRl
bnRGaWx0ZXIoSW50ZW50LkFDVElPTl9IRUFEU0VUX1BMVUcpOwotCi0gICAgLyoqIFJlY2VpdmVy
IHdoaWNoIGhhbmRsZXMgY2hhbmdlcyBpbiB3aXJlZCBoZWFkc2V0IGF2YWlsYWJpbGl0eS4gKi8K
LSAgICB3aXJlZEhlYWRzZXRSZWNlaXZlciA9IG5ldyBCcm9hZGNhc3RSZWNlaXZlcigpIHsKLSAg
ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFURV9VTlBMVUdHRUQgPSAwOwotICAgICAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNUQVRFX1BMVUdHRUQgPSAxOwotICAgICAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IEhBU19OT19NSUMgPSAwOwotICAgICAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IEhBU19NSUMgPSAxOwotCi0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2
b2lkIG9uUmVjZWl2ZShDb250ZXh0IGNvbnRleHQsIEludGVudCBpbnRlbnQpIHsKLSAgICAgICAg
aW50IHN0YXRlID0gaW50ZW50LmdldEludEV4dHJhKCJzdGF0ZSIsIFNUQVRFX1VOUExVR0dFRCk7
Ci0gICAgICAgIGludCBtaWNyb3Bob25lID0gaW50ZW50LmdldEludEV4dHJhKCJtaWNyb3Bob25l
IiwgSEFTX05PX01JQyk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gaW50ZW50LmdldFN0cmluZ0V4
dHJhKCJuYW1lIik7Ci0gICAgICAgIExvZy5kKFRBRywgIkJyb2FkY2FzdFJlY2VpdmVyLm9uUmVj
ZWl2ZSIgKyBBcHBSVENVdGlscy5nZXRUaHJlYWRJbmZvKCkgKyAiOiAiCi0gICAgICAgICAgICAg
ICAgKyAiYT0iICsgaW50ZW50LmdldEFjdGlvbigpICsgIiwgcz0iCi0gICAgICAgICAgICAgICAg
KyAoc3RhdGUgPT0gU1RBVEVfVU5QTFVHR0VEID8gInVucGx1Z2dlZCIgOiAicGx1Z2dlZCIpICsg
IiwgbT0iCi0gICAgICAgICAgICAgICAgKyAobWljcm9waG9uZSA9PSBIQVNfTUlDID8gIm1pYyIg
OiAibm8gbWljIikgKyAiLCBuPSIgKyBuYW1lICsgIiwgc2I9IgotICAgICAgICAgICAgICAgICsg
aXNJbml0aWFsU3RpY2t5QnJvYWRjYXN0KCkpOwotCi0gICAgICAgIGJvb2xlYW4gaGFzV2lyZWRI
ZWFkc2V0ID0gKHN0YXRlID09IFNUQVRFX1BMVUdHRUQpOwotICAgICAgICBzd2l0Y2ggKHN0YXRl
KSB7Ci0gICAgICAgICAgY2FzZSBTVEFURV9VTlBMVUdHRUQ6Ci0gICAgICAgICAgICB1cGRhdGVB
dWRpb0RldmljZVN0YXRlKGhhc1dpcmVkSGVhZHNldCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBjYXNlIFNUQVRFX1BMVUdHRUQ6Ci0gICAgICAgICAgICBpZiAoc2VsZWN0ZWRBdWRp
b0RldmljZSAhPSBBdWRpb0RldmljZS5XSVJFRF9IRUFEU0VUKSB7Ci0gICAgICAgICAgICAgIHVw
ZGF0ZUF1ZGlvRGV2aWNlU3RhdGUoaGFzV2lyZWRIZWFkc2V0KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBMb2cuZShU
QUcsICJJbnZhbGlkIHN0YXRlIik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH07Ci0KLSAgICBhcHBydGNDb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIod2lyZWRI
ZWFkc2V0UmVjZWl2ZXIsIGZpbHRlcik7Ci0gIH0KLQotICAvKiogVW5yZWdpc3RlciByZWNlaXZl
ciBmb3IgYnJvYWRjYXN0ZWQgQUNUSU9OX0hFQURTRVRfUExVRyBpbnRlbnQuICovCi0gIHByaXZh
dGUgdm9pZCB1bnJlZ2lzdGVyRm9yV2lyZWRIZWFkc2V0SW50ZW50QnJvYWRjYXN0KCkgewotICAg
IGFwcHJ0Y0NvbnRleHQudW5yZWdpc3RlclJlY2VpdmVyKHdpcmVkSGVhZHNldFJlY2VpdmVyKTsK
LSAgICB3aXJlZEhlYWRzZXRSZWNlaXZlciA9IG51bGw7Ci0gIH0KLQotICAvKiogU2V0cyB0aGUg
c3BlYWtlciBwaG9uZSBtb2RlLiAqLwotICBwcml2YXRlIHZvaWQgc2V0U3BlYWtlcnBob25lT24o
Ym9vbGVhbiBvbikgewotICAgIGJvb2xlYW4gd2FzT24gPSBhdWRpb01hbmFnZXIuaXNTcGVha2Vy
cGhvbmVPbigpOwotICAgIGlmICh3YXNPbiA9PSBvbikgewotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBhdWRpb01hbmFnZXIuc2V0U3BlYWtlcnBob25lT24ob24pOwotICB9Ci0KLSAgLyoqIFNl
dHMgdGhlIG1pY3JvcGhvbmUgbXV0ZSBzdGF0ZS4gKi8KLSAgcHJpdmF0ZSB2b2lkIHNldE1pY3Jv
cGhvbmVNdXRlKGJvb2xlYW4gb24pIHsKLSAgICBib29sZWFuIHdhc011dGVkID0gYXVkaW9NYW5h
Z2VyLmlzTWljcm9waG9uZU11dGUoKTsKLSAgICBpZiAod2FzTXV0ZWQgPT0gb24pIHsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgYXVkaW9NYW5hZ2VyLnNldE1pY3JvcGhvbmVNdXRlKG9uKTsK
LSAgfQotCi0gIC8qKiBHZXRzIHRoZSBjdXJyZW50IGVhcnBpZWNlIHN0YXRlLiAqLwotICBwcml2
YXRlIGJvb2xlYW4gaGFzRWFycGllY2UoKSB7Ci0gICAgcmV0dXJuIGFwcHJ0Y0NvbnRleHQuZ2V0
UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVf
VEVMRVBIT05ZKTsKLSAgfQotCi0gIC8qKgotICAgKiBDaGVja3Mgd2hldGhlciBhIHdpcmVkIGhl
YWRzZXQgaXMgY29ubmVjdGVkIG9yIG5vdC4KLSAgICogVGhpcyBpcyBub3QgYSB2YWxpZCBpbmRp
Y2F0aW9uIHRoYXQgYXVkaW8gcGxheWJhY2sgaXMgYWN0dWFsbHkgb3ZlcgotICAgKiB0aGUgd2ly
ZWQgaGVhZHNldCBhcyBhdWRpbyByb3V0aW5nIGRlcGVuZHMgb24gb3RoZXIgY29uZGl0aW9ucy4g
V2UKLSAgICogb25seSB1c2UgaXQgYXMgYW4gZWFybHkgaW5kaWNhdG9yIChkdXJpbmcgaW5pdGlh
bGl6YXRpb24pIG9mIGFuIGF0dGFjaGVkCi0gICAqIHdpcmVkIGhlYWRzZXQuCi0gICAqLwotICBA
RGVwcmVjYXRlZAotICBwcml2YXRlIGJvb2xlYW4gaGFzV2lyZWRIZWFkc2V0KCkgewotICAgIHJl
dHVybiBhdWRpb01hbmFnZXIuaXNXaXJlZEhlYWRzZXRPbigpOwotICB9Ci0KLSAgLyoqIFVwZGF0
ZSBsaXN0IG9mIHBvc3NpYmxlIGF1ZGlvIGRldmljZXMgYW5kIG1ha2UgbmV3IGRldmljZSBzZWxl
Y3Rpb24uICovCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVBdWRpb0RldmljZVN0YXRlKGJvb2xlYW4g
aGFzV2lyZWRIZWFkc2V0KSB7Ci0gICAgLy8gVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBh
dWRpbyBkZXZpY2VzLgotICAgIGF1ZGlvRGV2aWNlcy5jbGVhcigpOwotICAgIGlmIChoYXNXaXJl
ZEhlYWRzZXQpIHsKLSAgICAgIC8vIElmIGEgd2lyZWQgaGVhZHNldCBpcyBjb25uZWN0ZWQsIHRo
ZW4gaXQgaXMgdGhlIG9ubHkgcG9zc2libGUgb3B0aW9uLgotICAgICAgYXVkaW9EZXZpY2VzLmFk
ZChBdWRpb0RldmljZS5XSVJFRF9IRUFEU0VUKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gTm8g
d2lyZWQgaGVhZHNldCwgaGVuY2UgdGhlIGF1ZGlvLWRldmljZSBsaXN0IGNhbiBjb250YWluIHNw
ZWFrZXIKLSAgICAgIC8vIHBob25lIChvbiBhIHRhYmxldCksIG9yIHNwZWFrZXIgcGhvbmUgYW5k
IGVhcnBpZWNlIChvbiBtb2JpbGUgcGhvbmUpLgotICAgICAgYXVkaW9EZXZpY2VzLmFkZChBdWRp
b0RldmljZS5TUEVBS0VSX1BIT05FKTsKLSAgICAgIGlmIChoYXNFYXJwaWVjZSgpKSB7Ci0gICAg
ICAgIGF1ZGlvRGV2aWNlcy5hZGQoQXVkaW9EZXZpY2UuRUFSUElFQ0UpOwotICAgICAgfQotICAg
IH0KLSAgICBMb2cuZChUQUcsICJhdWRpb0RldmljZXM6ICIgKyBhdWRpb0RldmljZXMpOwotCi0g
ICAgLy8gU3dpdGNoIHRvIGNvcnJlY3QgYXVkaW8gZGV2aWNlIGdpdmVuIHRoZSBsaXN0IG9mIGF2
YWlsYWJsZSBhdWRpbyBkZXZpY2VzLgotICAgIGlmIChoYXNXaXJlZEhlYWRzZXQpIHsKLSAgICAg
IHNldEF1ZGlvRGV2aWNlKEF1ZGlvRGV2aWNlLldJUkVEX0hFQURTRVQpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBzZXRBdWRpb0RldmljZShkZWZhdWx0QXVkaW9EZXZpY2UpOwotICAgIH0KLSAgfQot
Ci0gIC8qKiBDYWxsZWQgZWFjaCB0aW1lIGEgbmV3IGF1ZGlvIGRldmljZSBoYXMgYmVlbiBhZGRl
ZCBvciByZW1vdmVkLiAqLwotICBwcml2YXRlIHZvaWQgb25BdWRpb01hbmFnZXJDaGFuZ2VkU3Rh
dGUoKSB7Ci0gICAgTG9nLmQoVEFHLCAib25BdWRpb01hbmFnZXJDaGFuZ2VkU3RhdGU6IGRldmlj
ZXM9IiArIGF1ZGlvRGV2aWNlcyArICIsIHNlbGVjdGVkPSIKLSAgICAgICAgICAgICsgc2VsZWN0
ZWRBdWRpb0RldmljZSk7Ci0KLSAgICAvLyBFbmFibGUgdGhlIHByb3hpbWl0eSBzZW5zb3IgaWYg
dGhlcmUgYXJlIHR3byBhdmFpbGFibGUgYXVkaW8gZGV2aWNlcwotICAgIC8vIGluIHRoZSBsaXN0
LiBHaXZlbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgd2Uga25vdyB0aGF0IHRoZSBjaG9p
Y2UKLSAgICAvLyB3aWxsIHRoZW4gYmUgYmV0d2VlbiBFQVJQSUVDRSBhbmQgU1BFQUtFUl9QSE9O
RS4KLSAgICBpZiAoYXVkaW9EZXZpY2VzLnNpemUoKSA9PSAyKSB7Ci0gICAgICBBcHBSVENVdGls
cy5hc3NlcnRJc1RydWUoYXVkaW9EZXZpY2VzLmNvbnRhaW5zKEF1ZGlvRGV2aWNlLkVBUlBJRUNF
KQotICAgICAgICAgICYmIGF1ZGlvRGV2aWNlcy5jb250YWlucyhBdWRpb0RldmljZS5TUEVBS0VS
X1BIT05FKSk7Ci0gICAgICAvLyBTdGFydCB0aGUgcHJveGltaXR5IHNlbnNvci4KLSAgICAgIHBy
b3hpbWl0eVNlbnNvci5zdGFydCgpOwotICAgIH0gZWxzZSBpZiAoYXVkaW9EZXZpY2VzLnNpemUo
KSA9PSAxKSB7Ci0gICAgICAvLyBTdG9wIHRoZSBwcm94aW1pdHkgc2Vuc29yIHNpbmNlIGl0IGlz
IG5vIGxvbmdlciBuZWVkZWQuCi0gICAgICBwcm94aW1pdHlTZW5zb3Iuc3RvcCgpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBMb2cuZShUQUcsICJJbnZhbGlkIGRldmljZSBsaXN0Iik7Ci0gICAgfQot
Ci0gICAgaWYgKG9uU3RhdGVDaGFuZ2VMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICAvLyBSdW4g
Y2FsbGJhY2sgdG8gbm90aWZ5IGEgbGlzdGVuaW5nIGNsaWVudC4gVGhlIGNsaWVudCBjYW4gdGhl
bgotICAgICAgLy8gdXNlIHB1YmxpYyBnZXR0ZXJzIHRvIHF1ZXJ5IHRoZSBuZXcgc3RhdGUuCi0g
ICAgICBvblN0YXRlQ2hhbmdlTGlzdGVuZXIucnVuKCk7Ci0gICAgfQotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
YXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDQ2xpZW50LmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0NsaWVudC5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDQ2xpZW50Lmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
MyBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRp
ZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53ZWJy
dGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLS8qKgot
ICogQXBwUlRDQ2xpZW50IGlzIHRoZSBpbnRlcmZhY2UgcmVwcmVzZW50aW5nIGFuIEFwcFJUQyBj
bGllbnQuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQXBwUlRDQ2xpZW50IHsKLSAgLyoqCi0gICAq
IFN0cnVjdCBob2xkaW5nIHRoZSBjb25uZWN0aW9uIHBhcmFtZXRlcnMgb2YgYW4gQXBwUlRDIHJv
b20uCi0gICAqLwotICBjbGFzcyBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgewotICAgIHB1Ymxp
YyBmaW5hbCBTdHJpbmcgcm9vbVVybDsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHJvb21JZDsK
LSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBsb29wYmFjazsKLSAgICBwdWJsaWMgUm9vbUNvbm5l
Y3Rpb25QYXJhbWV0ZXJzKFN0cmluZyByb29tVXJsLCBTdHJpbmcgcm9vbUlkLCBib29sZWFuIGxv
b3BiYWNrKSB7Ci0gICAgICB0aGlzLnJvb21VcmwgPSByb29tVXJsOwotICAgICAgdGhpcy5yb29t
SWQgPSByb29tSWQ7Ci0gICAgICB0aGlzLmxvb3BiYWNrID0gbG9vcGJhY2s7Ci0gICAgfQotICB9
Ci0KLSAgLyoqCi0gICAqIEFzeW5jaHJvbm91c2x5IGNvbm5lY3QgdG8gYW4gQXBwUlRDIHJvb20g
VVJMIHVzaW5nIHN1cHBsaWVkIGNvbm5lY3Rpb24KLSAgICogcGFyYW1ldGVycy4gT25jZSBjb25u
ZWN0aW9uIGlzIGVzdGFibGlzaGVkIG9uQ29ubmVjdGVkVG9Sb29tKCkKLSAgICogY2FsbGJhY2sg
d2l0aCByb29tIHBhcmFtZXRlcnMgaXMgaW52b2tlZC4KLSAgICovCi0gIHZvaWQgY29ubmVjdFRv
Um9vbShSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnMpOwotCi0g
IC8qKgotICAgKiBTZW5kIG9mZmVyIFNEUCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gICAq
LwotICB2b2lkIHNlbmRPZmZlclNkcChmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKTsKLQot
ICAvKioKLSAgICogU2VuZCBhbnN3ZXIgU0RQIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAg
ICovCi0gIHZvaWQgc2VuZEFuc3dlclNkcChmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKTsK
LQotICAvKioKLSAgICogU2VuZCBJY2UgY2FuZGlkYXRlIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFu
dC4KLSAgICovCi0gIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0
ZSBjYW5kaWRhdGUpOwotCi0gIC8qKgotICAgKiBTZW5kIHJlbW92ZWQgSUNFIGNhbmRpZGF0ZXMg
dG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICAgKi8KLSAgdm9pZCBzZW5kTG9jYWxJY2VDYW5k
aWRhdGVSZW1vdmFscyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKTsKLQotICAvKioK
LSAgICogRGlzY29ubmVjdCBmcm9tIHJvb20uCi0gICAqLwotICB2b2lkIGRpc2Nvbm5lY3RGcm9t
Um9vbSgpOwotCi0gIC8qKgotICAgKiBTdHJ1Y3QgaG9sZGluZyB0aGUgc2lnbmFsaW5nIHBhcmFt
ZXRlcnMgb2YgYW4gQXBwUlRDIHJvb20uCi0gICAqLwotICBjbGFzcyBTaWduYWxpbmdQYXJhbWV0
ZXJzIHsKLSAgICBwdWJsaWMgZmluYWwgTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGlj
ZVNlcnZlcnM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gaW5pdGlhdG9yOwotICAgIHB1Ymxp
YyBmaW5hbCBTdHJpbmcgY2xpZW50SWQ7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB3c3NVcmw7
Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyB3c3NQb3N0VXJsOwotICAgIHB1YmxpYyBmaW5hbCBT
ZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHA7Ci0gICAgcHVibGljIGZpbmFsIExpc3Q8SWNlQ2Fu
ZGlkYXRlPiBpY2VDYW5kaWRhdGVzOwotCi0gICAgcHVibGljIFNpZ25hbGluZ1BhcmFtZXRlcnMo
TGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnMsIGJvb2xlYW4gaW5pdGlh
dG9yLAotICAgICAgICBTdHJpbmcgY2xpZW50SWQsIFN0cmluZyB3c3NVcmwsIFN0cmluZyB3c3NQ
b3N0VXJsLCBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAsCi0gICAgICAgIExpc3Q8SWNlQ2Fu
ZGlkYXRlPiBpY2VDYW5kaWRhdGVzKSB7Ci0gICAgICB0aGlzLmljZVNlcnZlcnMgPSBpY2VTZXJ2
ZXJzOwotICAgICAgdGhpcy5pbml0aWF0b3IgPSBpbml0aWF0b3I7Ci0gICAgICB0aGlzLmNsaWVu
dElkID0gY2xpZW50SWQ7Ci0gICAgICB0aGlzLndzc1VybCA9IHdzc1VybDsKLSAgICAgIHRoaXMu
d3NzUG9zdFVybCA9IHdzc1Bvc3RVcmw7Ci0gICAgICB0aGlzLm9mZmVyU2RwID0gb2ZmZXJTZHA7
Ci0gICAgICB0aGlzLmljZUNhbmRpZGF0ZXMgPSBpY2VDYW5kaWRhdGVzOwotICAgIH0KLSAgfQot
Ci0gIC8qKgotICAgKiBDYWxsYmFjayBpbnRlcmZhY2UgZm9yIG1lc3NhZ2VzIGRlbGl2ZXJlZCBv
biBzaWduYWxpbmcgY2hhbm5lbC4KLSAgICoKLSAgICogPHA+TWV0aG9kcyBhcmUgZ3VhcmFudGVl
ZCB0byBiZSBpbnZva2VkIG9uIHRoZSBVSSB0aHJlYWQgb2YgfGFjdGl2aXR5fC4KLSAgICovCi0g
IGludGVyZmFjZSBTaWduYWxpbmdFdmVudHMgewotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZp
cmVkIG9uY2UgdGhlIHJvb20ncyBzaWduYWxpbmcgcGFyYW1ldGVycwotICAgICAqIFNpZ25hbGlu
Z1BhcmFtZXRlcnMgYXJlIGV4dHJhY3RlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uQ29ubmVjdGVk
VG9Sb29tKGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zKTsKLQotICAgIC8qKgotICAg
ICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcmVtb3RlIFNEUCBpcyByZWNlaXZlZC4KLSAgICAgKi8K
LSAgICB2b2lkIG9uUmVtb3RlRGVzY3JpcHRpb24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNk
cCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHJlbW90ZSBJY2UgY2Fu
ZGlkYXRlIGlzIHJlY2VpdmVkLgotICAgICAqLwotICAgIHZvaWQgb25SZW1vdGVJY2VDYW5kaWRh
dGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxs
YmFjayBmaXJlZCBvbmNlIHJlbW90ZSBJY2UgY2FuZGlkYXRlIHJlbW92YWxzIGFyZSByZWNlaXZl
ZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uUmVtb3RlSWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwg
SWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBm
aXJlZCBvbmNlIGNoYW5uZWwgaXMgY2xvc2VkLgotICAgICAqLwotICAgIHZvaWQgb25DaGFubmVs
Q2xvc2UoKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgY2hhbm5lbCBl
cnJvciBoYXBwZW5lZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uQ2hhbm5lbEVycm9yKGZpbmFsIFN0
cmluZyBkZXNjcmlwdGlvbik7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9BcHBSVENQcm94aW1pdHlTZW5zb3IuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDUHJveGltaXR5U2Vuc29yLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENQcm94aW1pdHlTZW5z
b3IuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IG9yZy5hcHBzcG90LmFw
cHJ0Yy51dGlsLkFwcFJUQ1V0aWxzOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7
Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3I7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2Fy
ZS5TZW5zb3JFdmVudDsKLWltcG9ydCBhbmRyb2lkLmhhcmR3YXJlLlNlbnNvckV2ZW50TGlzdGVu
ZXI7Ci1pbXBvcnQgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3JNYW5hZ2VyOwotaW1wb3J0IGFuZHJv
aWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IG9yZy53ZWJy
dGMuVGhyZWFkVXRpbHM7Ci0KLS8qKgotICogQXBwUlRDUHJveGltaXR5U2Vuc29yIG1hbmFnZXMg
ZnVuY3Rpb25zIHJlbGF0ZWQgdG8gdGhlIHByb3hpbWl0eSBzZW5zb3IgaW4KLSAqIHRoZSBBcHBS
VEMgZGVtby4KLSAqIE9uIG1vc3QgZGV2aWNlLCB0aGUgcHJveGltaXR5IHNlbnNvciBpcyBpbXBs
ZW1lbnRlZCBhcyBhIGJvb2xlYW4tc2Vuc29yLgotICogSXQgcmV0dXJucyBqdXN0IHR3byB2YWx1
ZXMgIk5FQVIiIG9yICJGQVIiLiBUaHJlc2hvbGRpbmcgaXMgZG9uZSBvbiB0aGUgTFVYCi0gKiB2
YWx1ZSBpLmUuIHRoZSBMVVggdmFsdWUgb2YgdGhlIGxpZ2h0IHNlbnNvciBpcyBjb21wYXJlZCB3
aXRoIGEgdGhyZXNob2xkLgotICogQSBMVVgtdmFsdWUgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQg
bWVhbnMgdGhlIHByb3hpbWl0eSBzZW5zb3IgcmV0dXJucyAiRkFSIi4KLSAqIEFueXRoaW5nIGxl
c3MgdGhhbiB0aGUgdGhyZXNob2xkIHZhbHVlIGFuZCB0aGUgc2Vuc29yICByZXR1cm5zICJORUFS
Ii4KLSAqLwotcHVibGljIGNsYXNzIEFwcFJUQ1Byb3hpbWl0eVNlbnNvciBpbXBsZW1lbnRzIFNl
bnNvckV2ZW50TGlzdGVuZXIgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0g
IkFwcFJUQ1Byb3hpbWl0eVNlbnNvciI7Ci0KLSAgLy8gVGhpcyBjbGFzcyBzaG91bGQgYmUgY3Jl
YXRlZCwgc3RhcnRlZCBhbmQgc3RvcHBlZCBvbiBvbmUgdGhyZWFkCi0gIC8vIChlLmcuIHRoZSBt
YWluIHRocmVhZCkuIFdlIHVzZSB8bm9uVGhyZWFkU2FmZXwgdG8gZW5zdXJlIHRoYXQgdGhpcyBp
cwotICAvLyB0aGUgY2FzZS4gT25seSBhY3RpdmUgd2hlbiB8REVCVUd8IGlzIHNldCB0byB0cnVl
LgotICBwcml2YXRlIGZpbmFsIFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIgdGhyZWFkQ2hlY2tl
ciA9IG5ldyBUaHJlYWRVdGlscy5UaHJlYWRDaGVja2VyKCk7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBS
dW5uYWJsZSBvblNlbnNvclN0YXRlTGlzdGVuZXI7Ci0gIHByaXZhdGUgZmluYWwgU2Vuc29yTWFu
YWdlciBzZW5zb3JNYW5hZ2VyOwotICBwcml2YXRlIFNlbnNvciBwcm94aW1pdHlTZW5zb3IgPSBu
dWxsOwotICBwcml2YXRlIGJvb2xlYW4gbGFzdFN0YXRlUmVwb3J0SXNOZWFyID0gZmFsc2U7Ci0K
LSAgLyoqIENvbnN0cnVjdGlvbiAqLwotICBzdGF0aWMgQXBwUlRDUHJveGltaXR5U2Vuc29yIGNy
ZWF0ZShDb250ZXh0IGNvbnRleHQsIFJ1bm5hYmxlIHNlbnNvclN0YXRlTGlzdGVuZXIpIHsKLSAg
ICByZXR1cm4gbmV3IEFwcFJUQ1Byb3hpbWl0eVNlbnNvcihjb250ZXh0LCBzZW5zb3JTdGF0ZUxp
c3RlbmVyKTsKLSAgfQotCi0gIHByaXZhdGUgQXBwUlRDUHJveGltaXR5U2Vuc29yKENvbnRleHQg
Y29udGV4dCwgUnVubmFibGUgc2Vuc29yU3RhdGVMaXN0ZW5lcikgewotICAgIExvZy5kKFRBRywg
IkFwcFJUQ1Byb3hpbWl0eVNlbnNvciIgKyBBcHBSVENVdGlscy5nZXRUaHJlYWRJbmZvKCkpOwot
ICAgIG9uU2Vuc29yU3RhdGVMaXN0ZW5lciA9IHNlbnNvclN0YXRlTGlzdGVuZXI7Ci0gICAgc2Vu
c29yTWFuYWdlciA9ICgoU2Vuc29yTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENv
bnRleHQuU0VOU09SX1NFUlZJQ0UpKTsKLSAgfQotCi0gIC8qKgotICAgKiBBY3RpdmF0ZSB0aGUg
cHJveGltaXR5IHNlbnNvci4gQWxzbyBkbyBpbml0aWFsaXphdGlvbiBpZiBjYWxsZWQgZm9yIHRo
ZQotICAgKiBmaXJzdCB0aW1lLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gc3RhcnQoKSB7Ci0g
ICAgdGhyZWFkQ2hlY2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIExvZy5kKFRBRywg
InN0YXJ0IiArIEFwcFJUQ1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKCFpbml0RGVm
YXVsdFNlbnNvcigpKSB7Ci0gICAgICAvLyBQcm94aW1pdHkgc2Vuc29yIGlzIG5vdCBzdXBwb3J0
ZWQgb24gdGhpcyBkZXZpY2UuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHNlbnNv
ck1hbmFnZXIucmVnaXN0ZXJMaXN0ZW5lcih0aGlzLCBwcm94aW1pdHlTZW5zb3IsIFNlbnNvck1h
bmFnZXIuU0VOU09SX0RFTEFZX05PUk1BTCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAv
KiogRGVhY3RpdmF0ZSB0aGUgcHJveGltaXR5IHNlbnNvci4gKi8KLSAgcHVibGljIHZvaWQgc3Rv
cCgpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgTG9n
LmQoVEFHLCAic3RvcCIgKyBBcHBSVENVdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIGlmIChw
cm94aW1pdHlTZW5zb3IgPT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzZW5z
b3JNYW5hZ2VyLnVucmVnaXN0ZXJMaXN0ZW5lcih0aGlzLCBwcm94aW1pdHlTZW5zb3IpOwotICB9
Ci0KLSAgLyoqIEdldHRlciBmb3IgbGFzdCByZXBvcnRlZCBzdGF0ZS4gU2V0IHRvIHRydWUgaWYg
Im5lYXIiIGlzIHJlcG9ydGVkLiAqLwotICBwdWJsaWMgYm9vbGVhbiBzZW5zb3JSZXBvcnRzTmVh
clN0YXRlKCkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAg
ICByZXR1cm4gbGFzdFN0YXRlUmVwb3J0SXNOZWFyOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyBmaW5hbCB2b2lkIG9uQWNjdXJhY3lDaGFuZ2VkKFNlbnNvciBzZW5zb3IsIGludCBhY2N1
cmFjeSkgewotICAgIHRocmVhZENoZWNrZXIuY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBB
cHBSVENVdGlscy5hc3NlcnRJc1RydWUoc2Vuc29yLmdldFR5cGUoKSA9PSBTZW5zb3IuVFlQRV9Q
Uk9YSU1JVFkpOwotICAgIGlmIChhY2N1cmFjeSA9PSBTZW5zb3JNYW5hZ2VyLlNFTlNPUl9TVEFU
VVNfVU5SRUxJQUJMRSkgewotICAgICAgTG9nLmUoVEFHLCAiVGhlIHZhbHVlcyByZXR1cm5lZCBi
eSB0aGlzIHNlbnNvciBjYW5ub3QgYmUgdHJ1c3RlZCIpOwotICAgIH0KLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgZmluYWwgdm9pZCBvblNlbnNvckNoYW5nZWQoU2Vuc29yRXZlbnQgZXZl
bnQpIHsKLSAgICB0aHJlYWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgQXBw
UlRDVXRpbHMuYXNzZXJ0SXNUcnVlKGV2ZW50LnNlbnNvci5nZXRUeXBlKCkgPT0gU2Vuc29yLlRZ
UEVfUFJPWElNSVRZKTsKLSAgICAvLyBBcyBhIGJlc3QgcHJhY3RpY2U7IGRvIGFzIGxpdHRsZSBh
cyBwb3NzaWJsZSB3aXRoaW4gdGhpcyBtZXRob2QgYW5kCi0gICAgLy8gYXZvaWQgYmxvY2tpbmcu
Ci0gICAgZmxvYXQgZGlzdGFuY2VJbkNlbnRpbWV0ZXJzID0gZXZlbnQudmFsdWVzWzBdOwotICAg
IGlmIChkaXN0YW5jZUluQ2VudGltZXRlcnMgPCBwcm94aW1pdHlTZW5zb3IuZ2V0TWF4aW11bVJh
bmdlKCkpIHsKLSAgICAgIExvZy5kKFRBRywgIlByb3hpbWl0eSBzZW5zb3IgPT4gTkVBUiBzdGF0
ZSIpOwotICAgICAgbGFzdFN0YXRlUmVwb3J0SXNOZWFyID0gdHJ1ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgTG9nLmQoVEFHLCAiUHJveGltaXR5IHNlbnNvciA9PiBGQVIgc3RhdGUiKTsKLSAgICAg
IGxhc3RTdGF0ZVJlcG9ydElzTmVhciA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIFJlcG9ydCBh
Ym91dCBuZXcgc3RhdGUgdG8gbGlzdGVuaW5nIGNsaWVudC4gQ2xpZW50IGNhbiB0aGVuIGNhbGwK
LSAgICAvLyBzZW5zb3JSZXBvcnRzTmVhclN0YXRlKCkgdG8gcXVlcnkgdGhlIGN1cnJlbnQgc3Rh
dGUgKE5FQVIgb3IgRkFSKS4KLSAgICBpZiAob25TZW5zb3JTdGF0ZUxpc3RlbmVyICE9IG51bGwp
IHsKLSAgICAgIG9uU2Vuc29yU3RhdGVMaXN0ZW5lci5ydW4oKTsKLSAgICB9Ci0KLSAgICBMb2cu
ZChUQUcsICJvblNlbnNvckNoYW5nZWQiICsgQXBwUlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygpICsg
IjogIgotICAgICAgICAgICAgKyAiYWNjdXJhY3k9IiArIGV2ZW50LmFjY3VyYWN5ICsgIiwgdGlt
ZXN0YW1wPSIgKyBldmVudC50aW1lc3RhbXAgKyAiLCBkaXN0YW5jZT0iCi0gICAgICAgICAgICAr
IGV2ZW50LnZhbHVlc1swXSk7Ci0gIH0KLQotICAvKioKLSAgICogR2V0IGRlZmF1bHQgcHJveGlt
aXR5IHNlbnNvciBpZiBpdCBleGlzdHMuIFRhYmxldCBkZXZpY2VzIChlLmcuIE5leHVzIDcpCi0g
ICAqIGRvZXMgbm90IHN1cHBvcnQgdGhpcyB0eXBlIG9mIHNlbnNvciBhbmQgZmFsc2Ugd2lsbCBi
ZSByZXR1cm5lZCBpbiBzdWNoCi0gICAqIGNhc2VzLgotICAgKi8KLSAgcHJpdmF0ZSBib29sZWFu
IGluaXREZWZhdWx0U2Vuc29yKCkgewotICAgIGlmIChwcm94aW1pdHlTZW5zb3IgIT0gbnVsbCkg
ewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHByb3hpbWl0eVNlbnNvciA9IHNlbnNv
ck1hbmFnZXIuZ2V0RGVmYXVsdFNlbnNvcihTZW5zb3IuVFlQRV9QUk9YSU1JVFkpOwotICAgIGlm
IChwcm94aW1pdHlTZW5zb3IgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBsb2dQcm94aW1pdHlTZW5zb3JJbmZvKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICAvKiogSGVscGVyIG1ldGhvZCBmb3IgbG9nZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJv
eGltaXR5IHNlbnNvci4gKi8KLSAgcHJpdmF0ZSB2b2lkIGxvZ1Byb3hpbWl0eVNlbnNvckluZm8o
KSB7Ci0gICAgaWYgKHByb3hpbWl0eVNlbnNvciA9PSBudWxsKSB7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICAgIFN0cmluZ0J1aWxkZXIgaW5mbyA9IG5ldyBTdHJpbmdCdWlsZGVyKCJQcm94aW1p
dHkgc2Vuc29yOiAiKTsKLSAgICBpbmZvLmFwcGVuZCgibmFtZT0iKS5hcHBlbmQocHJveGltaXR5
U2Vuc29yLmdldE5hbWUoKSk7Ci0gICAgaW5mby5hcHBlbmQoIiwgdmVuZG9yOiAiKS5hcHBlbmQo
cHJveGltaXR5U2Vuc29yLmdldFZlbmRvcigpKTsKLSAgICBpbmZvLmFwcGVuZCgiLCBwb3dlcjog
IikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRQb3dlcigpKTsKLSAgICBpbmZvLmFwcGVuZCgi
LCByZXNvbHV0aW9uOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldFJlc29sdXRpb24oKSk7
Ci0gICAgaW5mby5hcHBlbmQoIiwgbWF4IHJhbmdlOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29y
LmdldE1heGltdW1SYW5nZSgpKTsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1
aWxkLlZFUlNJT05fQ09ERVMuR0lOR0VSQlJFQUQpIHsKLSAgICAgIC8vIEFkZGVkIGluIEFQSSBs
ZXZlbCA5LgotICAgICAgaW5mby5hcHBlbmQoIiwgbWluIGRlbGF5OiAiKS5hcHBlbmQocHJveGlt
aXR5U2Vuc29yLmdldE1pbkRlbGF5KCkpOwotICAgIH0KLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5T
REtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUX1dBVENIKSB7Ci0gICAgICAvLyBB
ZGRlZCBpbiBBUEkgbGV2ZWwgMjAuCi0gICAgICBpbmZvLmFwcGVuZCgiLCB0eXBlOiAiKS5hcHBl
bmQocHJveGltaXR5U2Vuc29yLmdldFN0cmluZ1R5cGUoKSk7Ci0gICAgfQotICAgIGlmIChCdWls
ZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUCkgewotICAg
ICAgLy8gQWRkZWQgaW4gQVBJIGxldmVsIDIxLgotICAgICAgaW5mby5hcHBlbmQoIiwgbWF4IGRl
bGF5OiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldE1heERlbGF5KCkpOwotICAgICAgaW5m
by5hcHBlbmQoIiwgcmVwb3J0aW5nIG1vZGU6ICIpLmFwcGVuZChwcm94aW1pdHlTZW5zb3IuZ2V0
UmVwb3J0aW5nTW9kZSgpKTsKLSAgICAgIGluZm8uYXBwZW5kKCIsIGlzV2FrZVVwU2Vuc29yOiAi
KS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmlzV2FrZVVwU2Vuc29yKCkpOwotICAgIH0KLSAgICBM
b2cuZChUQUcsIGluZm8udG9TdHJpbmcoKSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy9DYWxsQWN0aXZpdHkuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvQ2FsbEFjdGl2aXR5LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DYWxsQWN0aXZpdHkuamF2YQkobm9uZXhpc3Rl
bnQpCkBAIC0xLDg3MSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5h
cHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFu
ZHJvaWQuYXBwLkFsZXJ0RGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuYXBwLkZyYWdtZW50VHJhbnNh
Y3Rpb247Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5j
b250ZW50LkRpYWxvZ0ludGVyZmFjZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lk
Lm1lZGlhLnByb2plY3Rpb24uTWVkaWFQcm9qZWN0aW9uOwotaW1wb3J0IGFuZHJvaWQubWVkaWEu
cHJvamVjdGlvbi5NZWRpYVByb2plY3Rpb25NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubmV0LlVy
aTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7
Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkRpc3BsYXlNZXRyaWNzOwotaW1wb3J0IGFuZHJvaWQudXRp
bC5Mb2c7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lldp
bmRvdzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuV2luZG93TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lk
LnZpZXcuV2luZG93TWFuYWdlci5MYXlvdXRQYXJhbXM7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQu
VG9hc3Q7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuUnVu
dGltZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEu
dXRpbC5MaXN0OwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVENDbGllbnQuUm9vbUNv
bm5lY3Rpb25QYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVENDbGll
bnQuU2lnbmFsaW5nUGFyYW1ldGVyczsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNv
bm5lY3Rpb25DbGllbnQuUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy53ZWJy
dGMuQ2FtZXJhMUVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmEyRW51bWVyYXRv
cjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0
Yy5FZ2xCYXNlOwotaW1wb3J0IG9yZy53ZWJydGMuRmlsZVZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotaW1w
b3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy53ZWJydGMu
UmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TY3JlZW5DYXB0
dXJlckFuZHJvaWQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5TdGF0c1JlcG9ydDsKLWltcG9ydCBvcmcud2VicnRjLlN1cmZhY2VWaWV3
UmVuZGVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0NhcHR1cmVyOwotaW1wb3J0IG9yZy53
ZWJydGMuVmlkZW9GaWxlUmVuZGVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVy
OwotCi0vKioKLSAqIEFjdGl2aXR5IGZvciBwZWVyIGNvbm5lY3Rpb24gY2FsbCBzZXR1cCwgY2Fs
bCB3YWl0aW5nCi0gKiBhbmQgY2FsbCB2aWV3LgotICovCi1wdWJsaWMgY2xhc3MgQ2FsbEFjdGl2
aXR5IGV4dGVuZHMgQWN0aXZpdHkgaW1wbGVtZW50cyBBcHBSVENDbGllbnQuU2lnbmFsaW5nRXZl
bnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGVlckNvbm5lY3Rpb25DbGllbnQuUGVlckNvbm5lY3Rpb25FdmVudHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYWxsRnJhZ21lbnQu
T25DYWxsRXZlbnRzIHsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUk9PTUlE
ID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5ST09NSUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0
cmluZyBFWFRSQV9MT09QQkFDSyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuTE9PUEJBQ0siOwotICBw
dWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19DQUxMID0gIm9yZy5hcHBzcG90
LmFwcHJ0Yy5WSURFT19DQUxMIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFf
U0NSRUVOQ0FQVFVSRSA9ICJvcmcuYXBwc3BvdC5hcHBydGMuU0NSRUVOQ0FQVFVSRSI7Ci0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0NBTUVSQTIgPSAib3JnLmFwcHNwb3QuYXBw
cnRjLkNBTUVSQTIiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19X
SURUSCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fV0lEVEgiOwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19IRUlHSFQgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJ
REVPX0hFSUdIVCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVPX0ZQ
UyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fRlBTIjsKLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBTdHJpbmcgRVhUUkFfVklERU9fQ0FQVFVSRVFVQUxJVFlTTElERVJfRU5BQkxFRCA9Ci0gICAg
ICAib3JnLmFwcHNvcHQuYXBwcnRjLlZJREVPX0NBUFRVUkVRVUFMSVRZU0xJREVSIjsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9fQklUUkFURSA9ICJvcmcuYXBwc3Bv
dC5hcHBydGMuVklERU9fQklUUkFURSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVY
VFJBX1ZJREVPQ09ERUMgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJREVPQ09ERUMiOwotICBwdWJs
aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9IV0NPREVDX0VOQUJMRUQgPSAib3JnLmFwcHNw
b3QuYXBwcnRjLkhXQ09ERUMiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9D
QVBUVVJFVE9URVhUVVJFX0VOQUJMRUQgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkNBUFRVUkVUT1RF
WFRVUkUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9BVURJT19CSVRSQVRF
ID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5BVURJT19CSVRSQVRFIjsKLSAgcHVibGljIHN0YXRpYyBm
aW5hbCBTdHJpbmcgRVhUUkFfQVVESU9DT0RFQyA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQVVESU9D
T0RFQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX05PQVVESU9QUk9DRVNT
SU5HX0VOQUJMRUQgPQotICAgICAgIm9yZy5hcHBzcG90LmFwcHJ0Yy5OT0FVRElPUFJPQ0VTU0lO
RyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0FFQ0RVTVBfRU5BQkxFRCA9
ICJvcmcuYXBwc3BvdC5hcHBydGMuQUVDRFVNUCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3Ry
aW5nIEVYVFJBX09QRU5TTEVTX0VOQUJMRUQgPSAib3JnLmFwcHNwb3QuYXBwcnRjLk9QRU5TTEVT
IjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9B
RUMgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkRJU0FCTEVfQlVJTFRfSU5fQUVDIjsKLSAgcHVibGlj
IHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BR0MgPSAib3JnLmFw
cHNwb3QuYXBwcnRjLkRJU0FCTEVfQlVJTFRfSU5fQUdDIjsKLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBTdHJpbmcgRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9OUyA9ICJvcmcuYXBwc3BvdC5hcHBydGMu
RElTQUJMRV9CVUlMVF9JTl9OUyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJB
X0VOQUJMRV9MRVZFTF9DT05UUk9MID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5FTkFCTEVfTEVWRUxf
Q09OVFJPTCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0RJU1BMQVlfSFVE
ID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5ESVNQTEFZX0hVRCI7Ci0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nIEVYVFJBX1RSQUNJTkcgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlRSQUNJTkciOwot
ICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9DTURMSU5FID0gIm9yZy5hcHBzcG90
LmFwcHJ0Yy5DTURMSU5FIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfUlVO
VElNRSA9ICJvcmcuYXBwc3BvdC5hcHBydGMuUlVOVElNRSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmlu
YWwgU3RyaW5nIEVYVFJBX1ZJREVPX0ZJTEVfQVNfQ0FNRVJBID0gIm9yZy5hcHBzcG90LmFwcHJ0
Yy5WSURFT19GSUxFX0FTX0NBTUVSQSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVY
VFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUgPQotICAgICAgIm9yZy5hcHBzcG90LmFwcHJ0
Yy5TQVZFX1JFTU9URV9WSURFT19UT19GSUxFIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJp
bmcgRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9XSURUSCA9Ci0gICAgICAib3JnLmFw
cHNwb3QuYXBwcnRjLlNBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfV0lEVEgiOwotICBwdWJsaWMg
c3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hFSUdI
VCA9Ci0gICAgICAib3JnLmFwcHNwb3QuYXBwcnRjLlNBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVf
SEVJR0hUIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVVNFX1ZBTFVFU19G
Uk9NX0lOVEVOVCA9Ci0gICAgICAib3JnLmFwcHNwb3QuYXBwcnRjLlVTRV9WQUxVRVNfRlJPTV9J
TlRFTlQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkNhbGxSVENDbGll
bnQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FQVFVSRV9QRVJNSVNTSU9OX1JFUVVF
U1RfQ09ERSA9IDE7Ci0KLSAgLy8gTGlzdCBvZiBtYW5kYXRvcnkgYXBwbGljYXRpb24gcGVybWlz
c2lvbnMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIE1BTkRBVE9SWV9QRVJNSVNT
SU9OUyA9IHsiYW5kcm9pZC5wZXJtaXNzaW9uLk1PRElGWV9BVURJT19TRVRUSU5HUyIsCi0gICAg
ICAiYW5kcm9pZC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTyIsICJhbmRyb2lkLnBlcm1pc3Npb24u
SU5URVJORVQifTsKLQotICAvLyBQZWVyIGNvbm5lY3Rpb24gc3RhdGlzdGljcyBjYWxsYmFjayBw
ZXJpb2QgaW4gbXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTVEFUX0NBTExCQUNLX1BF
UklPRCA9IDEwMDA7Ci0gIC8vIExvY2FsIHByZXZpZXcgc2NyZWVuIHBvc2l0aW9uIGJlZm9yZSBj
YWxsIGlzIGNvbm5lY3RlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX1hfQ09O
TkVDVElORyA9IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9ZX0NPTk5FQ1RJ
TkcgPSAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfV0lEVEhfQ09OTkVDVElO
RyA9IDEwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX0hFSUdIVF9DT05ORUNU
SU5HID0gMTAwOwotICAvLyBMb2NhbCBwcmV2aWV3IHNjcmVlbiBwb3NpdGlvbiBhZnRlciBjYWxs
IGlzIGNvbm5lY3RlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0FMX1hfQ09OTkVD
VEVEID0gNzI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9ZX0NPTk5FQ1RFRCA9
IDcyOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfV0lEVEhfQ09OTkVDVEVEID0g
MjU7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9IRUlHSFRfQ09OTkVDVEVEID0g
MjU7Ci0gIC8vIFJlbW90ZSB2aWRlbyBzY3JlZW4gcG9zaXRpb24KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IFJFTU9URV9YID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFTU9U
RV9ZID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFTU9URV9XSURUSCA9IDEwMDsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFJFTU9URV9IRUlHSFQgPSAxMDA7Ci0gIHByaXZh
dGUgUGVlckNvbm5lY3Rpb25DbGllbnQgcGVlckNvbm5lY3Rpb25DbGllbnQgPSBudWxsOwotICBw
cml2YXRlIEFwcFJUQ0NsaWVudCBhcHBSdGNDbGllbnQ7Ci0gIHByaXZhdGUgU2lnbmFsaW5nUGFy
YW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzOwotICBwcml2YXRlIEFwcFJUQ0F1ZGlvTWFuYWdl
ciBhdWRpb01hbmFnZXIgPSBudWxsOwotICBwcml2YXRlIEVnbEJhc2Ugcm9vdEVnbEJhc2U7Ci0g
IHByaXZhdGUgU3VyZmFjZVZpZXdSZW5kZXJlciBsb2NhbFJlbmRlcjsKLSAgcHJpdmF0ZSBTdXJm
YWNlVmlld1JlbmRlcmVyIHJlbW90ZVJlbmRlclNjcmVlbjsKLSAgcHJpdmF0ZSBWaWRlb0ZpbGVS
ZW5kZXJlciB2aWRlb0ZpbGVSZW5kZXJlcjsKLSAgcHJpdmF0ZSBmaW5hbCBMaXN0PFZpZGVvUmVu
ZGVyZXIuQ2FsbGJhY2tzPiByZW1vdGVSZW5kZXJlcnMgPQotICAgICAgbmV3IEFycmF5TGlzdDxW
aWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4oKTsKLSAgcHJpdmF0ZSBQZXJjZW50RnJhbWVMYXlvdXQg
bG9jYWxSZW5kZXJMYXlvdXQ7Ci0gIHByaXZhdGUgUGVyY2VudEZyYW1lTGF5b3V0IHJlbW90ZVJl
bmRlckxheW91dDsKLSAgcHJpdmF0ZSBTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZTsKLSAgcHJpdmF0
ZSBUb2FzdCBsb2dUb2FzdDsKLSAgcHJpdmF0ZSBib29sZWFuIGNvbW1hbmRMaW5lUnVuOwotICBw
cml2YXRlIGludCBydW5UaW1lTXM7Ci0gIHByaXZhdGUgYm9vbGVhbiBhY3Rpdml0eVJ1bm5pbmc7
Ci0gIHByaXZhdGUgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIHJvb21Db25uZWN0aW9uUGFyYW1l
dGVyczsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzOwotICBwcml2YXRlIGJvb2xlYW4gaWNlQ29ubmVjdGVkOwotICBwcml2YXRlIGJv
b2xlYW4gaXNFcnJvcjsKLSAgcHJpdmF0ZSBib29sZWFuIGNhbGxDb250cm9sRnJhZ21lbnRWaXNp
YmxlID0gdHJ1ZTsKLSAgcHJpdmF0ZSBsb25nIGNhbGxTdGFydGVkVGltZU1zID0gMDsKLSAgcHJp
dmF0ZSBib29sZWFuIG1pY0VuYWJsZWQgPSB0cnVlOwotICBwcml2YXRlIGJvb2xlYW4gc2NyZWVu
Y2FwdHVyZUVuYWJsZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBzdGF0aWMgSW50ZW50IG1lZGlhUHJv
amVjdGlvblBlcm1pc3Npb25SZXN1bHREYXRhOwotICBwcml2YXRlIHN0YXRpYyBpbnQgbWVkaWFQ
cm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdENvZGU7Ci0KLSAgLy8gQ29udHJvbHMKLSAgcHJpdmF0
ZSBDYWxsRnJhZ21lbnQgY2FsbEZyYWdtZW50OwotICBwcml2YXRlIEh1ZEZyYWdtZW50IGh1ZEZy
YWdtZW50OwotICBwcml2YXRlIENwdU1vbml0b3IgY3B1TW9uaXRvcjsKLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAg
IHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0gICAgVGhyZWFkLnNldERlZmF1
bHRVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIobmV3IFVuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIo
dGhpcykpOwotCi0gICAgLy8gU2V0IHdpbmRvdyBzdHlsZXMgZm9yIGZ1bGxzY3JlZW4td2luZG93
IHNpemUuIE5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlCi0gICAgLy8gYWRkaW5nIGNvbnRlbnQuCi0g
ICAgcmVxdWVzdFdpbmRvd0ZlYXR1cmUoV2luZG93LkZFQVRVUkVfTk9fVElUTEUpOwotICAgIGdl
dFdpbmRvdygpLmFkZEZsYWdzKExheW91dFBhcmFtcy5GTEFHX0ZVTExTQ1JFRU4gfCBMYXlvdXRQ
YXJhbXMuRkxBR19LRUVQX1NDUkVFTl9PTgotICAgICAgICB8IExheW91dFBhcmFtcy5GTEFHX0RJ
U01JU1NfS0VZR1VBUkQgfCBMYXlvdXRQYXJhbXMuRkxBR19TSE9XX1dIRU5fTE9DS0VECi0gICAg
ICAgIHwgTGF5b3V0UGFyYW1zLkZMQUdfVFVSTl9TQ1JFRU5fT04pOwotICAgIGdldFdpbmRvdygp
LmdldERlY29yVmlldygpLnNldFN5c3RlbVVpVmlzaWJpbGl0eShWaWV3LlNZU1RFTV9VSV9GTEFH
X0hJREVfTkFWSUdBVElPTgotICAgICAgICB8IFZpZXcuU1lTVEVNX1VJX0ZMQUdfRlVMTFNDUkVF
TiB8IFZpZXcuU1lTVEVNX1VJX0ZMQUdfSU1NRVJTSVZFX1NUSUNLWSk7Ci0gICAgc2V0Q29udGVu
dFZpZXcoUi5sYXlvdXQuYWN0aXZpdHlfY2FsbCk7Ci0KLSAgICBpY2VDb25uZWN0ZWQgPSBmYWxz
ZTsKLSAgICBzaWduYWxpbmdQYXJhbWV0ZXJzID0gbnVsbDsKLSAgICBzY2FsaW5nVHlwZSA9IFNj
YWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSUxMOwotCi0gICAgLy8gQ3JlYXRlIFVJIGNvbnRyb2xz
LgotICAgIGxvY2FsUmVuZGVyID0gKFN1cmZhY2VWaWV3UmVuZGVyZXIpIGZpbmRWaWV3QnlJZChS
LmlkLmxvY2FsX3ZpZGVvX3ZpZXcpOwotICAgIHJlbW90ZVJlbmRlclNjcmVlbiA9IChTdXJmYWNl
Vmlld1JlbmRlcmVyKSBmaW5kVmlld0J5SWQoUi5pZC5yZW1vdGVfdmlkZW9fdmlldyk7Ci0gICAg
bG9jYWxSZW5kZXJMYXlvdXQgPSAoUGVyY2VudEZyYW1lTGF5b3V0KSBmaW5kVmlld0J5SWQoUi5p
ZC5sb2NhbF92aWRlb19sYXlvdXQpOwotICAgIHJlbW90ZVJlbmRlckxheW91dCA9IChQZXJjZW50
RnJhbWVMYXlvdXQpIGZpbmRWaWV3QnlJZChSLmlkLnJlbW90ZV92aWRlb19sYXlvdXQpOwotICAg
IGNhbGxGcmFnbWVudCA9IG5ldyBDYWxsRnJhZ21lbnQoKTsKLSAgICBodWRGcmFnbWVudCA9IG5l
dyBIdWRGcmFnbWVudCgpOwotCi0gICAgLy8gU2hvdy9oaWRlIGNhbGwgY29udHJvbCBmcmFnbWVu
dCBvbiB2aWV3IGNsaWNrLgotICAgIFZpZXcuT25DbGlja0xpc3RlbmVyIGxpc3RlbmVyID0gbmV3
IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgICB0b2dnbGVDYWxsQ29udHJvbEZyYWdt
ZW50VmlzaWJpbGl0eSgpOwotICAgICAgfQotICAgIH07Ci0KLSAgICBsb2NhbFJlbmRlci5zZXRP
bkNsaWNrTGlzdGVuZXIobGlzdGVuZXIpOwotICAgIHJlbW90ZVJlbmRlclNjcmVlbi5zZXRPbkNs
aWNrTGlzdGVuZXIobGlzdGVuZXIpOwotICAgIHJlbW90ZVJlbmRlcmVycy5hZGQocmVtb3RlUmVu
ZGVyU2NyZWVuKTsKLQotICAgIGZpbmFsIEludGVudCBpbnRlbnQgPSBnZXRJbnRlbnQoKTsKLQot
ICAgIC8vIENyZWF0ZSB2aWRlbyByZW5kZXJlcnMuCi0gICAgcm9vdEVnbEJhc2UgPSBFZ2xCYXNl
LmNyZWF0ZSgpOwotICAgIGxvY2FsUmVuZGVyLmluaXQocm9vdEVnbEJhc2UuZ2V0RWdsQmFzZUNv
bnRleHQoKSwgbnVsbCk7Ci0gICAgU3RyaW5nIHNhdmVSZW1vdGVWaWRlb1RvRmlsZSA9IGludGVu
dC5nZXRTdHJpbmdFeHRyYShFWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFKTsKLQotICAg
IC8vIFdoZW4gc2F2ZVJlbW90ZVZpZGVvVG9GaWxlIGlzIHNldCB3ZSBzYXZlIHRoZSB2aWRlbyBm
cm9tIHRoZSByZW1vdGUgdG8gYSBmaWxlLgotICAgIGlmIChzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUg
IT0gbnVsbCkgewotICAgICAgaW50IHZpZGVvT3V0V2lkdGggPSBpbnRlbnQuZ2V0SW50RXh0cmEo
RVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9XSURUSCwgMCk7Ci0gICAgICBpbnQgdmlk
ZW9PdXRIZWlnaHQgPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfU0FWRV9SRU1PVEVfVklERU9f
VE9fRklMRV9IRUlHSFQsIDApOwotICAgICAgdHJ5IHsKLSAgICAgICAgdmlkZW9GaWxlUmVuZGVy
ZXIgPSBuZXcgVmlkZW9GaWxlUmVuZGVyZXIoCi0gICAgICAgICAgICBzYXZlUmVtb3RlVmlkZW9U
b0ZpbGUsIHZpZGVvT3V0V2lkdGgsIHZpZGVvT3V0SGVpZ2h0LCByb290RWdsQmFzZS5nZXRFZ2xC
YXNlQ29udGV4dCgpKTsKLSAgICAgICAgcmVtb3RlUmVuZGVyZXJzLmFkZCh2aWRlb0ZpbGVSZW5k
ZXJlcik7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHRocm93IG5l
dyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgIkZhaWxlZCB0byBvcGVuIHZpZGVvIGZp
bGUgZm9yIG91dHB1dDogIiArIHNhdmVSZW1vdGVWaWRlb1RvRmlsZSwgZSk7Ci0gICAgICB9Ci0g
ICAgfQotICAgIHJlbW90ZVJlbmRlclNjcmVlbi5pbml0KHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VD
b250ZXh0KCksIG51bGwpOwotCi0gICAgbG9jYWxSZW5kZXIuc2V0Wk9yZGVyTWVkaWFPdmVybGF5
KHRydWUpOwotICAgIHVwZGF0ZVZpZGVvVmlldygpOwotCi0gICAgLy8gQ2hlY2sgZm9yIG1hbmRh
dG9yeSBwZXJtaXNzaW9ucy4KLSAgICBmb3IgKFN0cmluZyBwZXJtaXNzaW9uIDogTUFOREFUT1JZ
X1BFUk1JU1NJT05TKSB7Ci0gICAgICBpZiAoY2hlY2tDYWxsaW5nT3JTZWxmUGVybWlzc2lvbihw
ZXJtaXNzaW9uKSAhPSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQpIHsKLSAgICAg
ICAgbG9nQW5kVG9hc3QoIlBlcm1pc3Npb24gIiArIHBlcm1pc3Npb24gKyAiIGlzIG5vdCBncmFu
dGVkIik7Ci0gICAgICAgIHNldFJlc3VsdChSRVNVTFRfQ0FOQ0VMRUQpOwotICAgICAgICBmaW5p
c2goKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0KLQotICAgIFVyaSByb29tVXJp
ID0gaW50ZW50LmdldERhdGEoKTsKLSAgICBpZiAocm9vbVVyaSA9PSBudWxsKSB7Ci0gICAgICBs
b2dBbmRUb2FzdChnZXRTdHJpbmcoUi5zdHJpbmcubWlzc2luZ191cmwpKTsKLSAgICAgIExvZy5l
KFRBRywgIkRpZG4ndCBnZXQgYW55IFVSTCBpbiBpbnRlbnQhIik7Ci0gICAgICBzZXRSZXN1bHQo
UkVTVUxUX0NBTkNFTEVEKTsKLSAgICAgIGZpbmlzaCgpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIC8vIEdldCBJbnRlbnQgcGFyYW1ldGVycy4KLSAgICBTdHJpbmcgcm9vbUlkID0gaW50
ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX1JPT01JRCk7Ci0gICAgTG9nLmQoVEFHLCAiUm9vbSBJ
RDogIiArIHJvb21JZCk7Ci0gICAgaWYgKHJvb21JZCA9PSBudWxsIHx8IHJvb21JZC5sZW5ndGgo
KSA9PSAwKSB7Ci0gICAgICBsb2dBbmRUb2FzdChnZXRTdHJpbmcoUi5zdHJpbmcubWlzc2luZ191
cmwpKTsKLSAgICAgIExvZy5lKFRBRywgIkluY29ycmVjdCByb29tIElEIGluIGludGVudCEiKTsK
LSAgICAgIHNldFJlc3VsdChSRVNVTFRfQ0FOQ0VMRUQpOwotICAgICAgZmluaXNoKCk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYm9vbGVhbiBsb29wYmFjayA9IGludGVudC5nZXRCb29s
ZWFuRXh0cmEoRVhUUkFfTE9PUEJBQ0ssIGZhbHNlKTsKLSAgICBib29sZWFuIHRyYWNpbmcgPSBp
bnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX1RSQUNJTkcsIGZhbHNlKTsKLQotICAgIGludCB2
aWRlb1dpZHRoID0gaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1ZJREVPX1dJRFRILCAwKTsKLSAg
ICBpbnQgdmlkZW9IZWlnaHQgPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfVklERU9fSEVJR0hU
LCAwKTsKLQotICAgIHNjcmVlbmNhcHR1cmVFbmFibGVkID0gaW50ZW50LmdldEJvb2xlYW5FeHRy
YShFWFRSQV9TQ1JFRU5DQVBUVVJFLCBmYWxzZSk7Ci0gICAgLy8gSWYgY2FwdHVyaW5nIGZvcm1h
dCBpcyBub3Qgc3BlY2lmaWVkIGZvciBzY3JlZW5jYXB0dXJlLCB1c2Ugc2NyZWVuIHJlc29sdXRp
b24uCi0gICAgaWYgKHNjcmVlbmNhcHR1cmVFbmFibGVkICYmIHZpZGVvV2lkdGggPT0gMCAmJiB2
aWRlb0hlaWdodCA9PSAwKSB7Ci0gICAgICBEaXNwbGF5TWV0cmljcyBkaXNwbGF5TWV0cmljcyA9
IG5ldyBEaXNwbGF5TWV0cmljcygpOwotICAgICAgV2luZG93TWFuYWdlciB3aW5kb3dNYW5hZ2Vy
ID0KLSAgICAgICAgICAoV2luZG93TWFuYWdlcikgZ2V0QXBwbGljYXRpb24oKS5nZXRTeXN0ZW1T
ZXJ2aWNlKENvbnRleHQuV0lORE9XX1NFUlZJQ0UpOwotICAgICAgd2luZG93TWFuYWdlci5nZXRE
ZWZhdWx0RGlzcGxheSgpLmdldFJlYWxNZXRyaWNzKGRpc3BsYXlNZXRyaWNzKTsKLSAgICAgIHZp
ZGVvV2lkdGggPSBkaXNwbGF5TWV0cmljcy53aWR0aFBpeGVsczsKLSAgICAgIHZpZGVvSGVpZ2h0
ID0gZGlzcGxheU1ldHJpY3MuaGVpZ2h0UGl4ZWxzOwotICAgIH0KLQotICAgIHBlZXJDb25uZWN0
aW9uUGFyYW1ldGVycyA9Ci0gICAgICAgIG5ldyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMoaW50
ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9WSURFT19DQUxMLCB0cnVlKSwgbG9vcGJhY2ssCi0g
ICAgICAgICAgICB0cmFjaW5nLCB2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwgaW50ZW50LmdldElu
dEV4dHJhKEVYVFJBX1ZJREVPX0ZQUywgMCksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0SW50RXh0
cmEoRVhUUkFfVklERU9fQklUUkFURSwgMCksIGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9W
SURFT0NPREVDKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfSFdD
T0RFQ19FTkFCTEVELCB0cnVlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRJbnRFeHRyYShFWFRS
QV9BVURJT19CSVRSQVRFLCAwKSwgaW50ZW50LmdldFN0cmluZ0V4dHJhKEVYVFJBX0FVRElPQ09E
RUMpLAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9OT0FVRElPUFJP
Q0VTU0lOR19FTkFCTEVELCBmYWxzZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4
dHJhKEVYVFJBX0FFQ0RVTVBfRU5BQkxFRCwgZmFsc2UpLAotICAgICAgICAgICAgaW50ZW50Lmdl
dEJvb2xlYW5FeHRyYShFWFRSQV9PUEVOU0xFU19FTkFCTEVELCBmYWxzZSksCi0gICAgICAgICAg
ICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUVDLCBmYWxz
ZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0RJU0FCTEVfQlVJ
TFRfSU5fQUdDLCBmYWxzZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVY
VFJBX0RJU0FCTEVfQlVJTFRfSU5fTlMsIGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRC
b29sZWFuRXh0cmEoRVhUUkFfRU5BQkxFX0xFVkVMX0NPTlRST0wsIGZhbHNlKSk7Ci0gICAgY29t
bWFuZExpbmVSdW4gPSBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0NNRExJTkUsIGZhbHNl
KTsKLSAgICBydW5UaW1lTXMgPSBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfUlVOVElNRSwgMCk7
Ci0KLSAgICBMb2cuZChUQUcsICJWSURFT19GSUxFOiAnIiArIGludGVudC5nZXRTdHJpbmdFeHRy
YShFWFRSQV9WSURFT19GSUxFX0FTX0NBTUVSQSkgKyAiJyIpOwotCi0gICAgLy8gQ3JlYXRlIGNv
bm5lY3Rpb24gY2xpZW50LiBVc2UgRGlyZWN0UlRDQ2xpZW50IGlmIHJvb20gbmFtZSBpcyBhbiBJ
UCBvdGhlcndpc2UgdXNlIHRoZQotICAgIC8vIHN0YW5kYXJkIFdlYlNvY2tldFJUQ0NsaWVudC4K
LSAgICBpZiAobG9vcGJhY2sgfHwgIURpcmVjdFJUQ0NsaWVudC5JUF9QQVRURVJOLm1hdGNoZXIo
cm9vbUlkKS5tYXRjaGVzKCkpIHsKLSAgICAgIGFwcFJ0Y0NsaWVudCA9IG5ldyBXZWJTb2NrZXRS
VENDbGllbnQodGhpcyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5pKFRBRywgIlVzaW5nIERp
cmVjdFJUQ0NsaWVudCBiZWNhdXNlIHJvb20gbmFtZSBsb29rcyBsaWtlIGFuIElQLiIpOwotICAg
ICAgYXBwUnRjQ2xpZW50ID0gbmV3IERpcmVjdFJUQ0NsaWVudCh0aGlzKTsKLSAgICB9Ci0gICAg
Ly8gQ3JlYXRlIGNvbm5lY3Rpb24gcGFyYW1ldGVycy4KLSAgICByb29tQ29ubmVjdGlvblBhcmFt
ZXRlcnMgPSBuZXcgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzKHJvb21VcmkudG9TdHJpbmcoKSwg
cm9vbUlkLCBsb29wYmFjayk7Ci0KLSAgICAvLyBDcmVhdGUgQ1BVIG1vbml0b3IKLSAgICBjcHVN
b25pdG9yID0gbmV3IENwdU1vbml0b3IodGhpcyk7Ci0gICAgaHVkRnJhZ21lbnQuc2V0Q3B1TW9u
aXRvcihjcHVNb25pdG9yKTsKLQotICAgIC8vIFNlbmQgaW50ZW50IGFyZ3VtZW50cyB0byBmcmFn
bWVudHMuCi0gICAgY2FsbEZyYWdtZW50LnNldEFyZ3VtZW50cyhpbnRlbnQuZ2V0RXh0cmFzKCkp
OwotICAgIGh1ZEZyYWdtZW50LnNldEFyZ3VtZW50cyhpbnRlbnQuZ2V0RXh0cmFzKCkpOwotICAg
IC8vIEFjdGl2YXRlIGNhbGwgYW5kIEhVRCBmcmFnbWVudHMgYW5kIHN0YXJ0IHRoZSBjYWxsLgot
ICAgIEZyYWdtZW50VHJhbnNhY3Rpb24gZnQgPSBnZXRGcmFnbWVudE1hbmFnZXIoKS5iZWdpblRy
YW5zYWN0aW9uKCk7Ci0gICAgZnQuYWRkKFIuaWQuY2FsbF9mcmFnbWVudF9jb250YWluZXIsIGNh
bGxGcmFnbWVudCk7Ci0gICAgZnQuYWRkKFIuaWQuaHVkX2ZyYWdtZW50X2NvbnRhaW5lciwgaHVk
RnJhZ21lbnQpOwotICAgIGZ0LmNvbW1pdCgpOwotCi0gICAgLy8gRm9yIGNvbW1hbmQgbGluZSBl
eGVjdXRpb24gcnVuIGNvbm5lY3Rpb24gZm9yIDxydW5UaW1lTXM+IGFuZCBleGl0LgotICAgIGlm
IChjb21tYW5kTGluZVJ1biAmJiBydW5UaW1lTXMgPiAwKSB7Ci0gICAgICAobmV3IEhhbmRsZXIo
KSkucG9zdERlbGF5ZWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICAgICAg
fQotICAgICAgfSwgcnVuVGltZU1zKTsKLSAgICB9Ci0KLSAgICBwZWVyQ29ubmVjdGlvbkNsaWVu
dCA9IFBlZXJDb25uZWN0aW9uQ2xpZW50LmdldEluc3RhbmNlKCk7Ci0gICAgaWYgKGxvb3BiYWNr
KSB7Ci0gICAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBl
ZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgICBvcHRpb25zLm5ldHdvcmtJZ25v
cmVNYXNrID0gMDsKLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnNldFBlZXJDb25uZWN0aW9u
RmFjdG9yeU9wdGlvbnMob3B0aW9ucyk7Ci0gICAgfQotICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50
LmNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeSgKLSAgICAgICAgQ2FsbEFjdGl2aXR5LnRoaXMs
IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywgQ2FsbEFjdGl2aXR5LnRoaXMpOwotCi0gICAgaWYg
KHNjcmVlbmNhcHR1cmVFbmFibGVkKSB7Ci0gICAgICBNZWRpYVByb2plY3Rpb25NYW5hZ2VyIG1l
ZGlhUHJvamVjdGlvbk1hbmFnZXIgPQotICAgICAgICAgIChNZWRpYVByb2plY3Rpb25NYW5hZ2Vy
KSBnZXRBcHBsaWNhdGlvbigpLmdldFN5c3RlbVNlcnZpY2UoCi0gICAgICAgICAgICAgIENvbnRl
eHQuTUVESUFfUFJPSkVDVElPTl9TRVJWSUNFKTsKLSAgICAgIHN0YXJ0QWN0aXZpdHlGb3JSZXN1
bHQoCi0gICAgICAgICAgbWVkaWFQcm9qZWN0aW9uTWFuYWdlci5jcmVhdGVTY3JlZW5DYXB0dXJl
SW50ZW50KCksIENBUFRVUkVfUEVSTUlTU0lPTl9SRVFVRVNUX0NPREUpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBzdGFydENhbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2RlLCBJ
bnRlbnQgZGF0YSkgewotICAgIGlmIChyZXF1ZXN0Q29kZSAhPSBDQVBUVVJFX1BFUk1JU1NJT05f
UkVRVUVTVF9DT0RFKQotICAgICAgcmV0dXJuOwotICAgIG1lZGlhUHJvamVjdGlvblBlcm1pc3Np
b25SZXN1bHRDb2RlID0gcmVzdWx0Q29kZTsKLSAgICBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9u
UmVzdWx0RGF0YSA9IGRhdGE7Ci0gICAgc3RhcnRDYWxsKCk7Ci0gIH0KLQotICBwcml2YXRlIGJv
b2xlYW4gdXNlQ2FtZXJhMigpIHsKLSAgICByZXR1cm4gQ2FtZXJhMkVudW1lcmF0b3IuaXNTdXBw
b3J0ZWQodGhpcykgJiYgZ2V0SW50ZW50KCkuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0NBTUVSQTIs
IHRydWUpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGNhcHR1cmVUb1RleHR1cmUoKSB7Ci0g
ICAgcmV0dXJuIGdldEludGVudCgpLmdldEJvb2xlYW5FeHRyYShFWFRSQV9DQVBUVVJFVE9URVhU
VVJFX0VOQUJMRUQsIGZhbHNlKTsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9DYXB0dXJlciBjcmVh
dGVDYW1lcmFDYXB0dXJlcihDYW1lcmFFbnVtZXJhdG9yIGVudW1lcmF0b3IpIHsKLSAgICBmaW5h
bCBTdHJpbmdbXSBkZXZpY2VOYW1lcyA9IGVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKTsKLQot
ICAgIC8vIEZpcnN0LCB0cnkgdG8gZmluZCBmcm9udCBmYWNpbmcgY2FtZXJhCi0gICAgTG9nZ2lu
Zy5kKFRBRywgIkxvb2tpbmcgZm9yIGZyb250IGZhY2luZyBjYW1lcmFzLiIpOwotICAgIGZvciAo
U3RyaW5nIGRldmljZU5hbWUgOiBkZXZpY2VOYW1lcykgewotICAgICAgaWYgKGVudW1lcmF0b3Iu
aXNGcm9udEZhY2luZyhkZXZpY2VOYW1lKSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQ3Jl
YXRpbmcgZnJvbnQgZmFjaW5nIGNhbWVyYSBjYXB0dXJlci4iKTsKLSAgICAgICAgVmlkZW9DYXB0
dXJlciB2aWRlb0NhcHR1cmVyID0gZW51bWVyYXRvci5jcmVhdGVDYXB0dXJlcihkZXZpY2VOYW1l
LCBudWxsKTsKLQotICAgICAgICBpZiAodmlkZW9DYXB0dXJlciAhPSBudWxsKSB7Ci0gICAgICAg
ICAgcmV0dXJuIHZpZGVvQ2FwdHVyZXI7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICAvLyBGcm9udCBmYWNpbmcgY2FtZXJhIG5vdCBmb3VuZCwgdHJ5IHNvbWV0aGluZyBlbHNlCi0g
ICAgTG9nZ2luZy5kKFRBRywgIkxvb2tpbmcgZm9yIG90aGVyIGNhbWVyYXMuIik7Ci0gICAgZm9y
IChTdHJpbmcgZGV2aWNlTmFtZSA6IGRldmljZU5hbWVzKSB7Ci0gICAgICBpZiAoIWVudW1lcmF0
b3IuaXNGcm9udEZhY2luZyhkZXZpY2VOYW1lKSkgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
Q3JlYXRpbmcgb3RoZXIgY2FtZXJhIGNhcHR1cmVyLiIpOwotICAgICAgICBWaWRlb0NhcHR1cmVy
IHZpZGVvQ2FwdHVyZXIgPSBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGRldmljZU5hbWUsIG51
bGwpOwotCi0gICAgICAgIGlmICh2aWRlb0NhcHR1cmVyICE9IG51bGwpIHsKLSAgICAgICAgICBy
ZXR1cm4gdmlkZW9DYXB0dXJlcjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBudWxsOwotICB9Ci0KLSAgLy8gQWN0aXZpdHkgaW50ZXJmYWNlcwotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25QYXVzZSgpIHsKLSAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgYWN0
aXZpdHlSdW5uaW5nID0gZmFsc2U7Ci0gICAgLy8gRG9uJ3Qgc3RvcCB0aGUgdmlkZW8gd2hlbiB1
c2luZyBzY3JlZW5jYXB0dXJlIHRvIGFsbG93IHVzZXIgdG8gc2hvdyBvdGhlciBhcHBzIHRvIHRo
ZSByZW1vdGUKLSAgICAvLyBlbmQuCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9IG51
bGwgJiYgIXNjcmVlbmNhcHR1cmVFbmFibGVkKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVu
dC5zdG9wVmlkZW9Tb3VyY2UoKTsKLSAgICB9Ci0gICAgY3B1TW9uaXRvci5wYXVzZSgpOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVzdW1lKCkgewotICAgIHN1cGVyLm9u
UmVzdW1lKCk7Ci0gICAgYWN0aXZpdHlSdW5uaW5nID0gdHJ1ZTsKLSAgICAvLyBWaWRlbyBpcyBu
b3QgcGF1c2VkIGZvciBzY3JlZW5jYXB0dXJlLiBTZWUgb25QYXVzZS4KLSAgICBpZiAocGVlckNv
bm5lY3Rpb25DbGllbnQgIT0gbnVsbCAmJiAhc2NyZWVuY2FwdHVyZUVuYWJsZWQpIHsKLSAgICAg
IHBlZXJDb25uZWN0aW9uQ2xpZW50LnN0YXJ0VmlkZW9Tb3VyY2UoKTsKLSAgICB9Ci0gICAgY3B1
TW9uaXRvci5yZXN1bWUoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBv
bkRlc3Ryb3koKSB7Ci0gICAgZGlzY29ubmVjdCgpOwotICAgIGlmIChsb2dUb2FzdCAhPSBudWxs
KSB7Ci0gICAgICBsb2dUb2FzdC5jYW5jZWwoKTsKLSAgICB9Ci0gICAgYWN0aXZpdHlSdW5uaW5n
ID0gZmFsc2U7Ci0gICAgcm9vdEVnbEJhc2UucmVsZWFzZSgpOwotICAgIHN1cGVyLm9uRGVzdHJv
eSgpOwotICB9Ci0KLSAgLy8gQ2FsbEZyYWdtZW50Lk9uQ2FsbEV2ZW50cyBpbnRlcmZhY2UgaW1w
bGVtZW50YXRpb24uCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNhbGxIYW5nVXAoKSB7
Ci0gICAgZGlzY29ubmVjdCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
Q2FtZXJhU3dpdGNoKCkgewotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsKSB7
Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5zd2l0Y2hDYW1lcmEoKTsKLSAgICB9Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25WaWRlb1NjYWxpbmdTd2l0Y2goU2NhbGlu
Z1R5cGUgc2NhbGluZ1R5cGUpIHsKLSAgICB0aGlzLnNjYWxpbmdUeXBlID0gc2NhbGluZ1R5cGU7
Ci0gICAgdXBkYXRlVmlkZW9WaWV3KCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgb25DYXB0dXJlRm9ybWF0Q2hhbmdlKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1l
cmF0ZSkgewotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsKSB7Ci0gICAgICBw
ZWVyQ29ubmVjdGlvbkNsaWVudC5jaGFuZ2VDYXB0dXJlRm9ybWF0KHdpZHRoLCBoZWlnaHQsIGZy
YW1lcmF0ZSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBib29sZWFuIG9u
VG9nZ2xlTWljKCkgewotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsKSB7Ci0g
ICAgICBtaWNFbmFibGVkID0gIW1pY0VuYWJsZWQ7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVu
dC5zZXRBdWRpb0VuYWJsZWQobWljRW5hYmxlZCk7Ci0gICAgfQotICAgIHJldHVybiBtaWNFbmFi
bGVkOwotICB9Ci0KLSAgLy8gSGVscGVyIGZ1bmN0aW9ucy4KLSAgcHJpdmF0ZSB2b2lkIHRvZ2ds
ZUNhbGxDb250cm9sRnJhZ21lbnRWaXNpYmlsaXR5KCkgewotICAgIGlmICghaWNlQ29ubmVjdGVk
IHx8ICFjYWxsRnJhZ21lbnQuaXNBZGRlZCgpKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IC8vIFNob3cvaGlkZSBjYWxsIGNvbnRyb2wgZnJhZ21lbnQKLSAgICBjYWxsQ29udHJvbEZyYWdt
ZW50VmlzaWJsZSA9ICFjYWxsQ29udHJvbEZyYWdtZW50VmlzaWJsZTsKLSAgICBGcmFnbWVudFRy
YW5zYWN0aW9uIGZ0ID0gZ2V0RnJhZ21lbnRNYW5hZ2VyKCkuYmVnaW5UcmFuc2FjdGlvbigpOwot
ICAgIGlmIChjYWxsQ29udHJvbEZyYWdtZW50VmlzaWJsZSkgewotICAgICAgZnQuc2hvdyhjYWxs
RnJhZ21lbnQpOwotICAgICAgZnQuc2hvdyhodWRGcmFnbWVudCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgIGZ0LmhpZGUoY2FsbEZyYWdtZW50KTsKLSAgICAgIGZ0LmhpZGUoaHVkRnJhZ21lbnQpOwot
ICAgIH0KLSAgICBmdC5zZXRUcmFuc2l0aW9uKEZyYWdtZW50VHJhbnNhY3Rpb24uVFJBTlNJVF9G
UkFHTUVOVF9GQURFKTsKLSAgICBmdC5jb21taXQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1
cGRhdGVWaWRlb1ZpZXcoKSB7Ci0gICAgcmVtb3RlUmVuZGVyTGF5b3V0LnNldFBvc2l0aW9uKFJF
TU9URV9YLCBSRU1PVEVfWSwgUkVNT1RFX1dJRFRILCBSRU1PVEVfSEVJR0hUKTsKLSAgICByZW1v
dGVSZW5kZXJTY3JlZW4uc2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGUpOwotICAgIHJlbW90ZVJl
bmRlclNjcmVlbi5zZXRNaXJyb3IoZmFsc2UpOwotCi0gICAgaWYgKGljZUNvbm5lY3RlZCkgewot
ICAgICAgbG9jYWxSZW5kZXJMYXlvdXQuc2V0UG9zaXRpb24oCi0gICAgICAgICAgTE9DQUxfWF9D
T05ORUNURUQsIExPQ0FMX1lfQ09OTkVDVEVELCBMT0NBTF9XSURUSF9DT05ORUNURUQsIExPQ0FM
X0hFSUdIVF9DT05ORUNURUQpOwotICAgICAgbG9jYWxSZW5kZXIuc2V0U2NhbGluZ1R5cGUoU2Nh
bGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGxvY2FsUmVu
ZGVyTGF5b3V0LnNldFBvc2l0aW9uKAotICAgICAgICAgIExPQ0FMX1hfQ09OTkVDVElORywgTE9D
QUxfWV9DT05ORUNUSU5HLCBMT0NBTF9XSURUSF9DT05ORUNUSU5HLCBMT0NBTF9IRUlHSFRfQ09O
TkVDVElORyk7Ci0gICAgICBsb2NhbFJlbmRlci5zZXRTY2FsaW5nVHlwZShzY2FsaW5nVHlwZSk7
Ci0gICAgfQotICAgIGxvY2FsUmVuZGVyLnNldE1pcnJvcih0cnVlKTsKLQotICAgIGxvY2FsUmVu
ZGVyLnJlcXVlc3RMYXlvdXQoKTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4ucmVxdWVzdExheW91
dCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHN0YXJ0Q2FsbCgpIHsKLSAgICBpZiAoYXBwUnRj
Q2xpZW50ID09IG51bGwpIHsKLSAgICAgIExvZy5lKFRBRywgIkFwcFJUQyBjbGllbnQgaXMgbm90
IGFsbG9jYXRlZCBmb3IgYSBjYWxsLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjYWxs
U3RhcnRlZFRpbWVNcyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCi0gICAgLy8gU3Rh
cnQgcm9vbSBjb25uZWN0aW9uLgotICAgIGxvZ0FuZFRvYXN0KGdldFN0cmluZyhSLnN0cmluZy5j
b25uZWN0aW5nX3RvLCByb29tQ29ubmVjdGlvblBhcmFtZXRlcnMucm9vbVVybCkpOwotICAgIGFw
cFJ0Y0NsaWVudC5jb25uZWN0VG9Sb29tKHJvb21Db25uZWN0aW9uUGFyYW1ldGVycyk7Ci0KLSAg
ICAvLyBDcmVhdGUgYW5kIGF1ZGlvIG1hbmFnZXIgdGhhdCB3aWxsIHRha2UgY2FyZSBvZiBhdWRp
byByb3V0aW5nLAotICAgIC8vIGF1ZGlvIG1vZGVzLCBhdWRpbyBkZXZpY2UgZW51bWVyYXRpb24g
ZXRjLgotICAgIGF1ZGlvTWFuYWdlciA9IEFwcFJUQ0F1ZGlvTWFuYWdlci5jcmVhdGUodGhpcywg
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgZWFj
aCB0aW1lIHRoZSBhdWRpbyBzdGF0ZSAobnVtYmVyIGFuZAotICAgICAgLy8gdHlwZSBvZiBkZXZp
Y2VzKSBoYXMgYmVlbiBjaGFuZ2VkLgotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIG9uQXVkaW9NYW5hZ2VyQ2hhbmdlZFN0YXRlKCk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0gICAgLy8gU3RvcmUgZXhpc3RpbmcgYXVkaW8gc2V0dGluZ3MgYW5kIGNoYW5n
ZSBhdWRpbyBtb2RlIHRvCi0gICAgLy8gTU9ERV9JTl9DT01NVU5JQ0FUSU9OIGZvciBiZXN0IHBv
c3NpYmxlIFZvSVAgcGVyZm9ybWFuY2UuCi0gICAgTG9nLmQoVEFHLCAiSW5pdGlhbGl6aW5nIHRo
ZSBhdWRpbyBtYW5hZ2VyLi4uIik7Ci0gICAgYXVkaW9NYW5hZ2VyLmluaXQoKTsKLSAgfQotCi0g
IC8vIFNob3VsZCBiZSBjYWxsZWQgZnJvbSBVSSB0aHJlYWQKLSAgcHJpdmF0ZSB2b2lkIGNhbGxD
b25uZWN0ZWQoKSB7Ci0gICAgZmluYWwgbG9uZyBkZWx0YSA9IFN5c3RlbS5jdXJyZW50VGltZU1p
bGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7Ci0gICAgTG9nLmkoVEFHLCAiQ2FsbCBjb25uZWN0
ZWQ6IGRlbGF5PSIgKyBkZWx0YSArICJtcyIpOwotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVu
dCA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgIExvZy53KFRBRywgIkNhbGwgaXMgY29ubmVj
dGVkIGluIGNsb3NlZCBvciBlcnJvciBzdGF0ZSIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBVcGRhdGUgdmlkZW8gdmlldy4KLSAgICB1cGRhdGVWaWRlb1ZpZXcoKTsKLSAgICAvLyBF
bmFibGUgc3RhdGlzdGljcyBjYWxsYmFjay4KLSAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5lbmFi
bGVTdGF0c0V2ZW50cyh0cnVlLCBTVEFUX0NBTExCQUNLX1BFUklPRCk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgb25BdWRpb01hbmFnZXJDaGFuZ2VkU3RhdGUoKSB7Ci0gICAgLy8gVE9ETyhoZW5y
aWthKTogZGlzYWJsZSB2aWRlbyBpZiBBcHBSVENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuRUFS
UElFQ0UKLSAgICAvLyBpcyBhY3RpdmUuCi0gIH0KLQotICAvLyBEaXNjb25uZWN0IGZyb20gcmVt
b3RlIHJlc291cmNlcywgZGlzcG9zZSBvZiBsb2NhbCByZXNvdXJjZXMsIGFuZCBleGl0LgotICBw
cml2YXRlIHZvaWQgZGlzY29ubmVjdCgpIHsKLSAgICBhY3Rpdml0eVJ1bm5pbmcgPSBmYWxzZTsK
LSAgICBpZiAoYXBwUnRjQ2xpZW50ICE9IG51bGwpIHsKLSAgICAgIGFwcFJ0Y0NsaWVudC5kaXNj
b25uZWN0RnJvbVJvb20oKTsKLSAgICAgIGFwcFJ0Y0NsaWVudCA9IG51bGw7Ci0gICAgfQotICAg
IGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlv
bkNsaWVudC5jbG9zZSgpOwotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQgPSBudWxsOwotICAg
IH0KLSAgICBpZiAobG9jYWxSZW5kZXIgIT0gbnVsbCkgewotICAgICAgbG9jYWxSZW5kZXIucmVs
ZWFzZSgpOwotICAgICAgbG9jYWxSZW5kZXIgPSBudWxsOwotICAgIH0KLSAgICBpZiAodmlkZW9G
aWxlUmVuZGVyZXIgIT0gbnVsbCkgewotICAgICAgdmlkZW9GaWxlUmVuZGVyZXIucmVsZWFzZSgp
OwotICAgICAgdmlkZW9GaWxlUmVuZGVyZXIgPSBudWxsOwotICAgIH0KLSAgICBpZiAocmVtb3Rl
UmVuZGVyU2NyZWVuICE9IG51bGwpIHsKLSAgICAgIHJlbW90ZVJlbmRlclNjcmVlbi5yZWxlYXNl
KCk7Ci0gICAgICByZW1vdGVSZW5kZXJTY3JlZW4gPSBudWxsOwotICAgIH0KLSAgICBpZiAoYXVk
aW9NYW5hZ2VyICE9IG51bGwpIHsKLSAgICAgIGF1ZGlvTWFuYWdlci5jbG9zZSgpOwotICAgICAg
YXVkaW9NYW5hZ2VyID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGljZUNvbm5lY3RlZCAmJiAhaXNF
cnJvcikgewotICAgICAgc2V0UmVzdWx0KFJFU1VMVF9PSyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IHNldFJlc3VsdChSRVNVTFRfQ0FOQ0VMRUQpOwotICAgIH0KLSAgICBmaW5pc2goKTsKLSAgfQot
Ci0gIHByaXZhdGUgdm9pZCBkaXNjb25uZWN0V2l0aEVycm9yTWVzc2FnZShmaW5hbCBTdHJpbmcg
ZXJyb3JNZXNzYWdlKSB7Ci0gICAgaWYgKGNvbW1hbmRMaW5lUnVuIHx8ICFhY3Rpdml0eVJ1bm5p
bmcpIHsKLSAgICAgIExvZy5lKFRBRywgIkNyaXRpY2FsIGVycm9yOiAiICsgZXJyb3JNZXNzYWdl
KTsKLSAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICB9IGVsc2UgewotICAgICAgbmV3IEFsZXJ0RGlh
bG9nLkJ1aWxkZXIodGhpcykKLSAgICAgICAgICAuc2V0VGl0bGUoZ2V0VGV4dChSLnN0cmluZy5j
aGFubmVsX2Vycm9yX3RpdGxlKSkKLSAgICAgICAgICAuc2V0TWVzc2FnZShlcnJvck1lc3NhZ2Up
Ci0gICAgICAgICAgLnNldENhbmNlbGFibGUoZmFsc2UpCi0gICAgICAgICAgLnNldE5ldXRyYWxC
dXR0b24oUi5zdHJpbmcub2ssCi0gICAgICAgICAgICAgIG5ldyBEaWFsb2dJbnRlcmZhY2UuT25D
bGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgICAg
ICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50IGlkKSB7
Ci0gICAgICAgICAgICAgICAgICBkaWFsb2cuY2FuY2VsKCk7Ci0gICAgICAgICAgICAgICAgICBk
aXNjb25uZWN0KCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9KQotICAgICAg
ICAgIC5jcmVhdGUoKQotICAgICAgICAgIC5zaG93KCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gTG9n
IHxtc2d8IGFuZCBUb2FzdCBhYm91dCBpdC4KLSAgcHJpdmF0ZSB2b2lkIGxvZ0FuZFRvYXN0KFN0
cmluZyBtc2cpIHsKLSAgICBMb2cuZChUQUcsIG1zZyk7Ci0gICAgaWYgKGxvZ1RvYXN0ICE9IG51
bGwpIHsKLSAgICAgIGxvZ1RvYXN0LmNhbmNlbCgpOwotICAgIH0KLSAgICBsb2dUb2FzdCA9IFRv
YXN0Lm1ha2VUZXh0KHRoaXMsIG1zZywgVG9hc3QuTEVOR1RIX1NIT1JUKTsKLSAgICBsb2dUb2Fz
dC5zaG93KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5n
IGRlc2NyaXB0aW9uKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKCFpc0Vy
cm9yKSB7Ci0gICAgICAgICAgaXNFcnJvciA9IHRydWU7Ci0gICAgICAgICAgZGlzY29ubmVjdFdp
dGhFcnJvck1lc3NhZ2UoZGVzY3JpcHRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7
Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvQ2FwdHVyZXIgY3JlYXRlVmlkZW9DYXB0dXJlcigpIHsK
LSAgICBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIgPSBudWxsOwotICAgIFN0cmluZyB2aWRl
b0ZpbGVBc0NhbWVyYSA9IGdldEludGVudCgpLmdldFN0cmluZ0V4dHJhKEVYVFJBX1ZJREVPX0ZJ
TEVfQVNfQ0FNRVJBKTsKLSAgICBpZiAodmlkZW9GaWxlQXNDYW1lcmEgIT0gbnVsbCkgewotICAg
ICAgdHJ5IHsKLSAgICAgICAgdmlkZW9DYXB0dXJlciA9IG5ldyBGaWxlVmlkZW9DYXB0dXJlcih2
aWRlb0ZpbGVBc0NhbWVyYSk7Ci0gICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gb3BlbiB2aWRlbyBmaWxlIGZvciBlbXVsYXRlZCBj
YW1lcmEiKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChz
Y3JlZW5jYXB0dXJlRW5hYmxlZCkgewotICAgICAgaWYgKG1lZGlhUHJvamVjdGlvblBlcm1pc3Np
b25SZXN1bHRDb2RlICE9IEFjdGl2aXR5LlJFU1VMVF9PSykgewotICAgICAgICByZXBvcnRFcnJv
cigiVXNlciBkaWRuJ3QgZ2l2ZSBwZXJtaXNzaW9uIHRvIGNhcHR1cmUgdGhlIHNjcmVlbi4iKTsK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3IFNjcmVlbkNh
cHR1cmVyQW5kcm9pZCgKLSAgICAgICAgICBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0
RGF0YSwgbmV3IE1lZGlhUHJvamVjdGlvbi5DYWxsYmFjaygpIHsKLSAgICAgICAgICAgIEBPdmVy
cmlkZQotICAgICAgICAgICAgcHVibGljIHZvaWQgb25TdG9wKCkgewotICAgICAgICAgICAgICBy
ZXBvcnRFcnJvcigiVXNlciByZXZva2VkIHBlcm1pc3Npb24gdG8gY2FwdHVyZSB0aGUgc2NyZWVu
LiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0pOwotICAgIH0gZWxzZSBpZiAodXNlQ2Ft
ZXJhMigpKSB7Ci0gICAgICBpZiAoIWNhcHR1cmVUb1RleHR1cmUoKSkgewotICAgICAgICByZXBv
cnRFcnJvcihnZXRTdHJpbmcoUi5zdHJpbmcuY2FtZXJhMl90ZXh0dXJlX29ubHlfZXJyb3IpKTsK
LSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0KLSAgICAgIExvZ2dpbmcuZChUQUcsICJD
cmVhdGluZyBjYXB0dXJlciB1c2luZyBjYW1lcmEyIEFQSS4iKTsKLSAgICAgIHZpZGVvQ2FwdHVy
ZXIgPSBjcmVhdGVDYW1lcmFDYXB0dXJlcihuZXcgQ2FtZXJhMkVudW1lcmF0b3IodGhpcykpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRpbmcgY2FwdHVyZXIgdXNp
bmcgY2FtZXJhMSBBUEkuIik7Ci0gICAgICB2aWRlb0NhcHR1cmVyID0gY3JlYXRlQ2FtZXJhQ2Fw
dHVyZXIobmV3IENhbWVyYTFFbnVtZXJhdG9yKGNhcHR1cmVUb1RleHR1cmUoKSkpOwotICAgIH0K
LSAgICBpZiAodmlkZW9DYXB0dXJlciA9PSBudWxsKSB7Ci0gICAgICByZXBvcnRFcnJvcigiRmFp
bGVkIHRvIG9wZW4gY2FtZXJhIik7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0
dXJuIHZpZGVvQ2FwdHVyZXI7Ci0gIH0KLQotICAvLyAtLS0tLUltcGxlbWVudGF0aW9uIG9mIEFw
cFJUQ0NsaWVudC5BcHBSVENTaWduYWxpbmdFdmVudHMgLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEFs
bCBjYWxsYmFja3MgYXJlIGludm9rZWQgZnJvbSB3ZWJzb2NrZXQgc2lnbmFsaW5nIGxvb3BlciB0
aHJlYWQgYW5kCi0gIC8vIGFyZSByb3V0ZWQgdG8gVUkgdGhyZWFkLgotICBwcml2YXRlIHZvaWQg
b25Db25uZWN0ZWRUb1Jvb21JbnRlcm5hbChmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFt
cykgewotICAgIGZpbmFsIGxvbmcgZGVsdGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAt
IGNhbGxTdGFydGVkVGltZU1zOwotCi0gICAgc2lnbmFsaW5nUGFyYW1ldGVycyA9IHBhcmFtczsK
LSAgICBsb2dBbmRUb2FzdCgiQ3JlYXRpbmcgcGVlciBjb25uZWN0aW9uLCBkZWxheT0iICsgZGVs
dGEgKyAibXMiKTsKLSAgICBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIgPSBudWxsOwotICAg
IGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAg
dmlkZW9DYXB0dXJlciA9IGNyZWF0ZVZpZGVvQ2FwdHVyZXIoKTsKLSAgICB9Ci0gICAgcGVlckNv
bm5lY3Rpb25DbGllbnQuY3JlYXRlUGVlckNvbm5lY3Rpb24ocm9vdEVnbEJhc2UuZ2V0RWdsQmFz
ZUNvbnRleHQoKSwgbG9jYWxSZW5kZXIsCi0gICAgICAgIHJlbW90ZVJlbmRlcmVycywgdmlkZW9D
YXB0dXJlciwgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0KLSAgICBpZiAoc2lnbmFsaW5nUGFyYW1l
dGVycy5pbml0aWF0b3IpIHsKLSAgICAgIGxvZ0FuZFRvYXN0KCJDcmVhdGluZyBPRkZFUi4uLiIp
OwotICAgICAgLy8gQ3JlYXRlIG9mZmVyLiBPZmZlciBTRFAgd2lsbCBiZSBzZW50IHRvIGFuc3dl
cmluZyBjbGllbnQgaW4KLSAgICAgIC8vIFBlZXJDb25uZWN0aW9uRXZlbnRzLm9uTG9jYWxEZXNj
cmlwdGlvbiBldmVudC4KLSAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNyZWF0ZU9mZmVyKCk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIGlmIChwYXJhbXMub2ZmZXJTZHAgIT0gbnVsbCkgewotICAg
ICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihwYXJhbXMub2Zm
ZXJTZHApOwotICAgICAgICBsb2dBbmRUb2FzdCgiQ3JlYXRpbmcgQU5TV0VSLi4uIik7Ci0gICAg
ICAgIC8vIENyZWF0ZSBhbnN3ZXIuIEFuc3dlciBTRFAgd2lsbCBiZSBzZW50IHRvIG9mZmVyaW5n
IGNsaWVudCBpbgotICAgICAgICAvLyBQZWVyQ29ubmVjdGlvbkV2ZW50cy5vbkxvY2FsRGVzY3Jp
cHRpb24gZXZlbnQuCi0gICAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNyZWF0ZUFuc3dlcigp
OwotICAgICAgfQotICAgICAgaWYgKHBhcmFtcy5pY2VDYW5kaWRhdGVzICE9IG51bGwpIHsKLSAg
ICAgICAgLy8gQWRkIHJlbW90ZSBJQ0UgY2FuZGlkYXRlcyBmcm9tIHJvb20uCi0gICAgICAgIGZv
ciAoSWNlQ2FuZGlkYXRlIGljZUNhbmRpZGF0ZSA6IHBhcmFtcy5pY2VDYW5kaWRhdGVzKSB7Ci0g
ICAgICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuYWRkUmVtb3RlSWNlQ2FuZGlkYXRlKGljZUNh
bmRpZGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25Db25uZWN0ZWRUb1Jvb20oZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVy
cyBwYXJhbXMpIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBvbkNvbm5lY3RlZFRv
Um9vbUludGVybmFsKHBhcmFtcyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25SZW1vdGVEZXNjcmlwdGlvbihmaW5hbCBTZXNzaW9uRGVzY3Jp
cHRpb24gc2RwKSB7Ci0gICAgZmluYWwgbG9uZyBkZWx0YSA9IFN5c3RlbS5jdXJyZW50VGltZU1p
bGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ID09IG51bGwpIHsKLSAgICAgICAgICBMb2cuZShU
QUcsICJSZWNlaXZlZCByZW1vdGUgU0RQIGZvciBub24taW5pdGlsaXplZCBwZWVyIGNvbm5lY3Rp
b24uIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGxvZ0FuZFRvYXN0
KCJSZWNlaXZlZCByZW1vdGUgIiArIHNkcC50eXBlICsgIiwgZGVsYXk9IiArIGRlbHRhICsgIm1z
Iik7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHNk
cCk7Ci0gICAgICAgIGlmICghc2lnbmFsaW5nUGFyYW1ldGVycy5pbml0aWF0b3IpIHsKLSAgICAg
ICAgICBsb2dBbmRUb2FzdCgiQ3JlYXRpbmcgQU5TV0VSLi4uIik7Ci0gICAgICAgICAgLy8gQ3Jl
YXRlIGFuc3dlci4gQW5zd2VyIFNEUCB3aWxsIGJlIHNlbnQgdG8gb2ZmZXJpbmcgY2xpZW50IGlu
Ci0gICAgICAgICAgLy8gUGVlckNvbm5lY3Rpb25FdmVudHMub25Mb2NhbERlc2NyaXB0aW9uIGV2
ZW50LgotICAgICAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNyZWF0ZUFuc3dlcigpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgb25SZW1vdGVJY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewot
ICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCA9
PSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiUmVjZWl2ZWQgSUNFIGNhbmRpZGF0ZSBm
b3IgYSBub24taW5pdGlhbGl6ZWQgcGVlciBjb25uZWN0aW9uLiIpOwotICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5hZGRSZW1vdGVJY2VD
YW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBvblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNh
bmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBp
ZiAocGVlckNvbm5lY3Rpb25DbGllbnQgPT0gbnVsbCkgewotICAgICAgICAgIExvZy5lKFRBRywg
IlJlY2VpdmVkIElDRSBjYW5kaWRhdGUgcmVtb3ZhbHMgZm9yIGEgbm9uLWluaXRpYWxpemVkIHBl
ZXIgY29ubmVjdGlvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
cGVlckNvbm5lY3Rpb25DbGllbnQucmVtb3ZlUmVtb3RlSWNlQ2FuZGlkYXRlcyhjYW5kaWRhdGVz
KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBv
bkNoYW5uZWxDbG9zZSgpIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBsb2dBbmRU
b2FzdCgiUmVtb3RlIGVuZCBodW5nIHVwOyBkcm9wcGluZyBQZWVyQ29ubmVjdGlvbiIpOwotICAg
ICAgICBkaXNjb25uZWN0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25DaGFubmVsRXJyb3IoZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7
Ci0gICAgcmVwb3J0RXJyb3IoZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgLy8gLS0tLS1JbXBsZW1l
bnRhdGlvbiBvZiBQZWVyQ29ubmVjdGlvbkNsaWVudC5QZWVyQ29ubmVjdGlvbkV2ZW50cy4tLS0t
LS0tLS0KLSAgLy8gU2VuZCBsb2NhbCBwZWVyIGNvbm5lY3Rpb24gU0RQIGFuZCBJQ0UgY2FuZGlk
YXRlcyB0byByZW1vdGUgcGFydHkuCi0gIC8vIEFsbCBjYWxsYmFja3MgYXJlIGludm9rZWQgZnJv
bSBwZWVyIGNvbm5lY3Rpb24gY2xpZW50IGxvb3BlciB0aHJlYWQgYW5kCi0gIC8vIGFyZSByb3V0
ZWQgdG8gVUkgdGhyZWFkLgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25Mb2NhbERlc2Ny
aXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBmaW5hbCBsb25nIGRl
bHRhID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVNczsKLSAg
ICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoYXBwUnRjQ2xpZW50ICE9IG51bGwpIHsK
LSAgICAgICAgICBsb2dBbmRUb2FzdCgiU2VuZGluZyAiICsgc2RwLnR5cGUgKyAiLCBkZWxheT0i
ICsgZGVsdGEgKyAibXMiKTsKLSAgICAgICAgICBpZiAoc2lnbmFsaW5nUGFyYW1ldGVycy5pbml0
aWF0b3IpIHsKLSAgICAgICAgICAgIGFwcFJ0Y0NsaWVudC5zZW5kT2ZmZXJTZHAoc2RwKTsKLSAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgYXBwUnRjQ2xpZW50LnNlbmRBbnN3ZXJTZHAo
c2RwKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9u
UGFyYW1ldGVycy52aWRlb01heEJpdHJhdGUgPiAwKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAi
U2V0IHZpZGVvIG1heGltdW0gYml0cmF0ZTogIiArIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52
aWRlb01heEJpdHJhdGUpOwotICAgICAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LnNldFZpZGVv
TWF4Qml0cmF0ZShwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9NYXhCaXRyYXRlKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIG9uSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBy
dW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoYXBwUnRjQ2xpZW50ICE9IG51bGwpIHsKLSAg
ICAgICAgICBhcHBSdGNDbGllbnQuc2VuZExvY2FsSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0
ZXMpIHsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoYXBwUnRjQ2xpZW50ICE9
IG51bGwpIHsKLSAgICAgICAgICBhcHBSdGNDbGllbnQuc2VuZExvY2FsSWNlQ2FuZGlkYXRlUmVt
b3ZhbHMoY2FuZGlkYXRlcyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNvbm5lY3RlZCgpIHsKLSAgICBmaW5hbCBs
b25nIGRlbHRhID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVN
czsKLSAgICBydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBsb2dBbmRUb2FzdCgiSUNFIGNvbm5l
Y3RlZCwgZGVsYXk9IiArIGRlbHRhICsgIm1zIik7Ci0gICAgICAgIGljZUNvbm5lY3RlZCA9IHRy
dWU7Ci0gICAgICAgIGNhbGxDb25uZWN0ZWQoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0g
IEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZURpc2Nvbm5lY3RlZCgpIHsKLSAgICBydW5P
blVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBsb2dBbmRUb2FzdCgiSUNFIGRpc2Nvbm5lY3RlZCIpOwot
ICAgICAgICBpY2VDb25uZWN0ZWQgPSBmYWxzZTsKLSAgICAgICAgZGlzY29ubmVjdCgpOwotICAg
ICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNv
bm5lY3Rpb25DbG9zZWQoKSB7fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJD
b25uZWN0aW9uU3RhdHNSZWFkeShmaW5hbCBTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHsKLSAgICBy
dW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVi
bGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAoIWlzRXJyb3IgJiYgaWNlQ29ubmVjdGVkKSB7
Ci0gICAgICAgICAgaHVkRnJhZ21lbnQudXBkYXRlRW5jb2RlclN0YXRpc3RpY3MocmVwb3J0cyk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvblBlZXJDb25uZWN0aW9uRXJyb3IoZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uKSB7
Ci0gICAgcmVwb3J0RXJyb3IoZGVzY3JpcHRpb24pOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvQ2FsbEZyYWdtZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhbGxGcmFnbWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FsbEZyYWdtZW50LmphdmEJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxMzkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2Vi
UlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9m
IHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICog
IHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJp
Z2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNv
bnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhP
UlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBv
cmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9y
dCBhbmRyb2lkLmFwcC5GcmFnbWVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9y
dCBhbmRyb2lkLnZpZXcuTGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5J
bWFnZUJ1dHRvbjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5TZWVrQmFyOwotaW1wb3J0IGFuZHJv
aWQud2lkZ2V0LlRleHRWaWV3OwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5SZW5kZXJlckNvbW1vbi5T
Y2FsaW5nVHlwZTsKLQotLyoqCi0gKiBGcmFnbWVudCBmb3IgY2FsbCBjb250cm9sLgotICovCi1w
dWJsaWMgY2xhc3MgQ2FsbEZyYWdtZW50IGV4dGVuZHMgRnJhZ21lbnQgewotICBwcml2YXRlIFZp
ZXcgY29udHJvbFZpZXc7Ci0gIHByaXZhdGUgVGV4dFZpZXcgY29udGFjdFZpZXc7Ci0gIHByaXZh
dGUgSW1hZ2VCdXR0b24gZGlzY29ubmVjdEJ1dHRvbjsKLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBj
YW1lcmFTd2l0Y2hCdXR0b247Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gdmlkZW9TY2FsaW5nQnV0
dG9uOwotICBwcml2YXRlIEltYWdlQnV0dG9uIHRvZ2dsZU11dGVCdXR0b247Ci0gIHByaXZhdGUg
VGV4dFZpZXcgY2FwdHVyZUZvcm1hdFRleHQ7Ci0gIHByaXZhdGUgU2Vla0JhciBjYXB0dXJlRm9y
bWF0U2xpZGVyOwotICBwcml2YXRlIE9uQ2FsbEV2ZW50cyBjYWxsRXZlbnRzOwotICBwcml2YXRl
IFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlOwotICBwcml2YXRlIGJvb2xlYW4gdmlkZW9DYWxsRW5h
YmxlZCA9IHRydWU7Ci0KLSAgLyoqCi0gICAqIENhbGwgY29udHJvbCBpbnRlcmZhY2UgZm9yIGNv
bnRhaW5lciBhY3Rpdml0eS4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgT25DYWxsRXZlbnRz
IHsKLSAgICB2b2lkIG9uQ2FsbEhhbmdVcCgpOwotICAgIHZvaWQgb25DYW1lcmFTd2l0Y2goKTsK
LSAgICB2b2lkIG9uVmlkZW9TY2FsaW5nU3dpdGNoKFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlKTsK
LSAgICB2b2lkIG9uQ2FwdHVyZUZvcm1hdENoYW5nZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGlu
dCBmcmFtZXJhdGUpOwotICAgIGJvb2xlYW4gb25Ub2dnbGVNaWMoKTsKLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgVmlldyBvbkNyZWF0ZVZpZXcoCi0gICAgICBMYXlvdXRJbmZsYXRlciBp
bmZsYXRlciwgVmlld0dyb3VwIGNvbnRhaW5lciwgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkg
ewotICAgIGNvbnRyb2xWaWV3ID0gaW5mbGF0ZXIuaW5mbGF0ZShSLmxheW91dC5mcmFnbWVudF9j
YWxsLCBjb250YWluZXIsIGZhbHNlKTsKLQotICAgIC8vIENyZWF0ZSBVSSBjb250cm9scy4KLSAg
ICBjb250YWN0VmlldyA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQu
Y29udGFjdF9uYW1lX2NhbGwpOwotICAgIGRpc2Nvbm5lY3RCdXR0b24gPSAoSW1hZ2VCdXR0b24p
IGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmJ1dHRvbl9jYWxsX2Rpc2Nvbm5lY3QpOwot
ICAgIGNhbWVyYVN3aXRjaEJ1dHRvbiA9IChJbWFnZUJ1dHRvbikgY29udHJvbFZpZXcuZmluZFZp
ZXdCeUlkKFIuaWQuYnV0dG9uX2NhbGxfc3dpdGNoX2NhbWVyYSk7Ci0gICAgdmlkZW9TY2FsaW5n
QnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5idXR0
b25fY2FsbF9zY2FsaW5nX21vZGUpOwotICAgIHRvZ2dsZU11dGVCdXR0b24gPSAoSW1hZ2VCdXR0
b24pIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmJ1dHRvbl9jYWxsX3RvZ2dsZV9taWMp
OwotICAgIGNhcHR1cmVGb3JtYXRUZXh0ID0gKFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmll
d0J5SWQoUi5pZC5jYXB0dXJlX2Zvcm1hdF90ZXh0X2NhbGwpOwotICAgIGNhcHR1cmVGb3JtYXRT
bGlkZXIgPSAoU2Vla0JhcikgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuY2FwdHVyZV9m
b3JtYXRfc2xpZGVyX2NhbGwpOwotCi0gICAgLy8gQWRkIGJ1dHRvbnMgY2xpY2sgZXZlbnRzLgot
ICAgIGRpc2Nvbm5lY3RCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tM
aXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhW
aWV3IHZpZXcpIHsKLSAgICAgICAgY2FsbEV2ZW50cy5vbkNhbGxIYW5nVXAoKTsKLSAgICAgIH0K
LSAgICB9KTsKLQotICAgIGNhbWVyYVN3aXRjaEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIobmV3
IFZpZXcuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgICBjYWxsRXZlbnRzLm9uQ2FtZXJhU3dp
dGNoKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB2aWRlb1NjYWxpbmdCdXR0b24uc2V0T25D
bGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAgICAgICAgaWYgKHNj
YWxpbmdUeXBlID09IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSUxMKSB7Ci0gICAgICAgICAg
dmlkZW9TY2FsaW5nQnV0dG9uLnNldEJhY2tncm91bmRSZXNvdXJjZShSLmRyYXdhYmxlLmljX2Fj
dGlvbl9mdWxsX3NjcmVlbik7Ci0gICAgICAgICAgc2NhbGluZ1R5cGUgPSBTY2FsaW5nVHlwZS5T
Q0FMRV9BU1BFQ1RfRklUOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIHZpZGVvU2NhbGlu
Z0J1dHRvbi5zZXRCYWNrZ3JvdW5kUmVzb3VyY2UoUi5kcmF3YWJsZS5pY19hY3Rpb25fcmV0dXJu
X2Zyb21fZnVsbF9zY3JlZW4pOwotICAgICAgICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUu
U0NBTEVfQVNQRUNUX0ZJTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbEV2ZW50cy5vblZpZGVv
U2NhbGluZ1N3aXRjaChzY2FsaW5nVHlwZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgc2NhbGlu
Z1R5cGUgPSBTY2FsaW5nVHlwZS5TQ0FMRV9BU1BFQ1RfRklMTDsKLQotICAgIHRvZ2dsZU11dGVC
dXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAg
ICAgICAgYm9vbGVhbiBlbmFibGVkID0gY2FsbEV2ZW50cy5vblRvZ2dsZU1pYygpOwotICAgICAg
ICB0b2dnbGVNdXRlQnV0dG9uLnNldEFscGhhKGVuYWJsZWQgPyAxLjBmIDogMC4zZik7Ci0gICAg
ICB9Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gY29udHJvbFZpZXc7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25TdGFydCgpIHsKLSAgICBzdXBlci5vblN0YXJ0KCk7Ci0KLSAg
ICBib29sZWFuIGNhcHR1cmVTbGlkZXJFbmFibGVkID0gZmFsc2U7Ci0gICAgQnVuZGxlIGFyZ3Mg
PSBnZXRBcmd1bWVudHMoKTsKLSAgICBpZiAoYXJncyAhPSBudWxsKSB7Ci0gICAgICBTdHJpbmcg
Y29udGFjdE5hbWUgPSBhcmdzLmdldFN0cmluZyhDYWxsQWN0aXZpdHkuRVhUUkFfUk9PTUlEKTsK
LSAgICAgIGNvbnRhY3RWaWV3LnNldFRleHQoY29udGFjdE5hbWUpOwotICAgICAgdmlkZW9DYWxs
RW5hYmxlZCA9IGFyZ3MuZ2V0Qm9vbGVhbihDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FMTCwg
dHJ1ZSk7Ci0gICAgICBjYXB0dXJlU2xpZGVyRW5hYmxlZCA9IHZpZGVvQ2FsbEVuYWJsZWQKLSAg
ICAgICAgICAmJiBhcmdzLmdldEJvb2xlYW4oQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBUFRV
UkVRVUFMSVRZU0xJREVSX0VOQUJMRUQsIGZhbHNlKTsKLSAgICB9Ci0gICAgaWYgKCF2aWRlb0Nh
bGxFbmFibGVkKSB7Ci0gICAgICBjYW1lcmFTd2l0Y2hCdXR0b24uc2V0VmlzaWJpbGl0eShWaWV3
LklOVklTSUJMRSk7Ci0gICAgfQotICAgIGlmIChjYXB0dXJlU2xpZGVyRW5hYmxlZCkgewotICAg
ICAgY2FwdHVyZUZvcm1hdFNsaWRlci5zZXRPblNlZWtCYXJDaGFuZ2VMaXN0ZW5lcigKLSAgICAg
ICAgICBuZXcgQ2FwdHVyZVF1YWxpdHlDb250cm9sbGVyKGNhcHR1cmVGb3JtYXRUZXh0LCBjYWxs
RXZlbnRzKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGNhcHR1cmVGb3JtYXRUZXh0LnNldFZpc2li
aWxpdHkoVmlldy5HT05FKTsKLSAgICAgIGNhcHR1cmVGb3JtYXRTbGlkZXIuc2V0VmlzaWJpbGl0
eShWaWV3LkdPTkUpOwotICAgIH0KLSAgfQotCi0gIC8vIFRPRE8oc2FrYWwpOiBSZXBsYWNlIHdp
dGggb25BdHRhY2goQ29udGV4dCkgb25jZSB3ZSBvbmx5IHN1cHBvcnQgQVBJIGxldmVsIDIzKy4K
LSAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG9uQXR0YWNoKEFjdGl2aXR5IGFjdGl2aXR5KSB7Ci0gICAgc3VwZXIub25BdHRhY2go
YWN0aXZpdHkpOwotICAgIGNhbGxFdmVudHMgPSAoT25DYWxsRXZlbnRzKSBhY3Rpdml0eTsKLSAg
fQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhcHR1cmVRdWFsaXR5Q29u
dHJvbGxlci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9D
YXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NhcHR1cmVRdWFsaXR5Q29udHJvbGxlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdl
YlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC53aWRnZXQuU2Vla0JhcjsKLWlt
cG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwot
aW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRv
cjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1l
cmF0aW9uQW5kcm9pZC5DYXB0dXJlRm9ybWF0OwotCi0vKioKLSAqIENvbnRyb2wgY2FwdHVyZSBm
b3JtYXQgYmFzZWQgb24gYSBzZWVrYmFyIGxpc3RlbmVyLgotICovCi1wdWJsaWMgY2xhc3MgQ2Fw
dHVyZVF1YWxpdHlDb250cm9sbGVyIGltcGxlbWVudHMgU2Vla0Jhci5PblNlZWtCYXJDaGFuZ2VM
aXN0ZW5lciB7Ci0gIHByaXZhdGUgZmluYWwgTGlzdDxDYXB0dXJlRm9ybWF0PiBmb3JtYXRzID0K
LSAgICAgIEFycmF5cy5hc0xpc3QobmV3IENhcHR1cmVGb3JtYXQoMTI4MCwgNzIwLCAwLCAzMDAw
MCksIG5ldyBDYXB0dXJlRm9ybWF0KDk2MCwgNTQwLCAwLCAzMDAwMCksCi0gICAgICAgICAgbmV3
IENhcHR1cmVGb3JtYXQoNjQwLCA0ODAsIDAsIDMwMDAwKSwgbmV3IENhcHR1cmVGb3JtYXQoNDgw
LCAzNjAsIDAsIDMwMDAwKSwKLSAgICAgICAgICBuZXcgQ2FwdHVyZUZvcm1hdCgzMjAsIDI0MCwg
MCwgMzAwMDApLCBuZXcgQ2FwdHVyZUZvcm1hdCgyNTYsIDE0NCwgMCwgMzAwMDApKTsKLSAgLy8g
UHJpb3JpdGl6ZSBmcmFtZXJhdGUgYmVsb3cgdGhpcyB0aHJlc2hvbGQgYW5kIHJlc29sdXRpb24g
YWJvdmUgdGhlIHRocmVzaG9sZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZSQU1FUkFU
RV9USFJFU0hPTEQgPSAxNTsKLSAgcHJpdmF0ZSBUZXh0VmlldyBjYXB0dXJlRm9ybWF0VGV4dDsK
LSAgcHJpdmF0ZSBDYWxsRnJhZ21lbnQuT25DYWxsRXZlbnRzIGNhbGxFdmVudHM7Ci0gIHByaXZh
dGUgaW50IHdpZHRoID0gMDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0ID0gMDsKLSAgcHJpdmF0ZSBp
bnQgZnJhbWVyYXRlID0gMDsKLSAgcHJpdmF0ZSBkb3VibGUgdGFyZ2V0QmFuZHdpZHRoID0gMDsK
LQotICBwdWJsaWMgQ2FwdHVyZVF1YWxpdHlDb250cm9sbGVyKAotICAgICAgVGV4dFZpZXcgY2Fw
dHVyZUZvcm1hdFRleHQsIENhbGxGcmFnbWVudC5PbkNhbGxFdmVudHMgY2FsbEV2ZW50cykgewot
ICAgIHRoaXMuY2FwdHVyZUZvcm1hdFRleHQgPSBjYXB0dXJlRm9ybWF0VGV4dDsKLSAgICB0aGlz
LmNhbGxFdmVudHMgPSBjYWxsRXZlbnRzOwotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb21wYXJh
dG9yPENhcHR1cmVGb3JtYXQ+IGNvbXBhcmVGb3JtYXRzID0gbmV3IENvbXBhcmF0b3I8Q2FwdHVy
ZUZvcm1hdD4oKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGludCBjb21wYXJlKENhcHR1
cmVGb3JtYXQgZmlyc3QsIENhcHR1cmVGb3JtYXQgc2Vjb25kKSB7Ci0gICAgICBpbnQgZmlyc3RG
cHMgPSBjYWxjdWxhdGVGcmFtZXJhdGUodGFyZ2V0QmFuZHdpZHRoLCBmaXJzdCk7Ci0gICAgICBp
bnQgc2Vjb25kRnBzID0gY2FsY3VsYXRlRnJhbWVyYXRlKHRhcmdldEJhbmR3aWR0aCwgc2Vjb25k
KTsKLQotICAgICAgaWYgKGZpcnN0RnBzID49IEZSQU1FUkFURV9USFJFU0hPTEQgJiYgc2Vjb25k
RnBzID49IEZSQU1FUkFURV9USFJFU0hPTEQKLSAgICAgICAgICB8fCBmaXJzdEZwcyA9PSBzZWNv
bmRGcHMpIHsKLSAgICAgICAgLy8gQ29tcGFyZSByZXNvbHV0aW9uLgotICAgICAgICByZXR1cm4g
Zmlyc3Qud2lkdGggKiBmaXJzdC5oZWlnaHQgLSBzZWNvbmQud2lkdGggKiBzZWNvbmQuaGVpZ2h0
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ29tcGFyZSBmcHMuCi0gICAgICAgIHJldHVy
biBmaXJzdEZwcyAtIHNlY29uZEZwczsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIG9uUHJvZ3Jlc3NDaGFuZ2VkKFNlZWtCYXIgc2Vla0JhciwgaW50
IHByb2dyZXNzLCBib29sZWFuIGZyb21Vc2VyKSB7Ci0gICAgaWYgKHByb2dyZXNzID09IDApIHsK
LSAgICAgIHdpZHRoID0gMDsKLSAgICAgIGhlaWdodCA9IDA7Ci0gICAgICBmcmFtZXJhdGUgPSAw
OwotICAgICAgY2FwdHVyZUZvcm1hdFRleHQuc2V0VGV4dChSLnN0cmluZy5tdXRlZCk7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRXh0cmFjdCBtYXggYmFuZHdpZHRoIChpbiBtaWxs
aXBpeGVscyAvIHNlY29uZCkuCi0gICAgbG9uZyBtYXhDYXB0dXJlQmFuZHdpZHRoID0gamF2YS5s
YW5nLkxvbmcuTUlOX1ZBTFVFOwotICAgIGZvciAoQ2FwdHVyZUZvcm1hdCBmb3JtYXQgOiBmb3Jt
YXRzKSB7Ci0gICAgICBtYXhDYXB0dXJlQmFuZHdpZHRoID0KLSAgICAgICAgICBNYXRoLm1heCht
YXhDYXB0dXJlQmFuZHdpZHRoLCAobG9uZykgZm9ybWF0LndpZHRoICogZm9ybWF0LmhlaWdodCAq
IGZvcm1hdC5mcmFtZXJhdGUubWF4KTsKLSAgICB9Ci0KLSAgICAvLyBGcmFjdGlvbiBiZXR3ZWVu
IDAgYW5kIDEuCi0gICAgZG91YmxlIGJhbmR3aWR0aEZyYWN0aW9uID0gKGRvdWJsZSkgcHJvZ3Jl
c3MgLyAxMDAuMDsKLSAgICAvLyBNYWtlIGEgbG9nLXNjYWxlIHRyYW5zZm9ybWF0aW9uLCBzdGls
bCBiZXR3ZWVuIDAgYW5kIDEuCi0gICAgZmluYWwgZG91YmxlIGtFeHBDb25zdGFudCA9IDMuMDsK
LSAgICBiYW5kd2lkdGhGcmFjdGlvbiA9Ci0gICAgICAgIChNYXRoLmV4cChrRXhwQ29uc3RhbnQg
KiBiYW5kd2lkdGhGcmFjdGlvbikgLSAxKSAvIChNYXRoLmV4cChrRXhwQ29uc3RhbnQpIC0gMSk7
Ci0gICAgdGFyZ2V0QmFuZHdpZHRoID0gYmFuZHdpZHRoRnJhY3Rpb24gKiBtYXhDYXB0dXJlQmFu
ZHdpZHRoOwotCi0gICAgLy8gQ2hvb3NlIHRoZSBiZXN0IGZvcm1hdCBnaXZlbiBhIHRhcmdldCBi
YW5kd2lkdGguCi0gICAgZmluYWwgQ2FwdHVyZUZvcm1hdCBiZXN0Rm9ybWF0ID0gQ29sbGVjdGlv
bnMubWF4KGZvcm1hdHMsIGNvbXBhcmVGb3JtYXRzKTsKLSAgICB3aWR0aCA9IGJlc3RGb3JtYXQu
d2lkdGg7Ci0gICAgaGVpZ2h0ID0gYmVzdEZvcm1hdC5oZWlnaHQ7Ci0gICAgZnJhbWVyYXRlID0g
Y2FsY3VsYXRlRnJhbWVyYXRlKHRhcmdldEJhbmR3aWR0aCwgYmVzdEZvcm1hdCk7Ci0gICAgY2Fw
dHVyZUZvcm1hdFRleHQuc2V0VGV4dCgKLSAgICAgICAgU3RyaW5nLmZvcm1hdChjYXB0dXJlRm9y
bWF0VGV4dC5nZXRDb250ZXh0KCkuZ2V0U3RyaW5nKFIuc3RyaW5nLmZvcm1hdF9kZXNjcmlwdGlv
biksIHdpZHRoLAotICAgICAgICAgICAgaGVpZ2h0LCBmcmFtZXJhdGUpKTsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvblN0YXJ0VHJhY2tpbmdUb3VjaChTZWVrQmFyIHNlZWtC
YXIpIHt9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU3RvcFRyYWNraW5nVG91Y2go
U2Vla0JhciBzZWVrQmFyKSB7Ci0gICAgY2FsbEV2ZW50cy5vbkNhcHR1cmVGb3JtYXRDaGFuZ2Uo
d2lkdGgsIGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgfQotCi0gIC8vIFJldHVybiB0aGUgaGlnaGVz
dCBmcmFtZSByYXRlIHBvc3NpYmxlIGJhc2VkIG9uIGJhbmR3aWR0aCBhbmQgZm9ybWF0LgotICBw
cml2YXRlIGludCBjYWxjdWxhdGVGcmFtZXJhdGUoZG91YmxlIGJhbmR3aWR0aCwgQ2FwdHVyZUZv
cm1hdCBmb3JtYXQpIHsKLSAgICByZXR1cm4gKGludCkgTWF0aC5yb3VuZCgKLSAgICAgICAgTWF0
aC5taW4oZm9ybWF0LmZyYW1lcmF0ZS5tYXgsIChpbnQpIE1hdGgucm91bmQoYmFuZHdpZHRoIC8g
KGZvcm1hdC53aWR0aCAqIGZvcm1hdC5oZWlnaHQpKSkKLSAgICAgICAgLyAxMDAwLjApOwotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ29ubmVjdEFjdGl2aXR5Lmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Nvbm5lY3RBY3Rp
dml0eS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvQ29ubmVjdEFjdGl2aXR5LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NDUgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9y
dCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxvZzsK
LWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuRGlhbG9nSW50ZXJmYWNlOwotaW1wb3J0IGFuZHJvaWQu
Y29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2Vz
OwotaW1wb3J0IGFuZHJvaWQubmV0LlVyaTsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWlt
cG9ydCBhbmRyb2lkLnByZWZlcmVuY2UuUHJlZmVyZW5jZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9p
ZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuQ29udGV4dE1lbnU7Ci1pbXBvcnQgYW5k
cm9pZC52aWV3LktleUV2ZW50OwotaW1wb3J0IGFuZHJvaWQudmlldy5NZW51OwotaW1wb3J0IGFu
ZHJvaWQudmlldy5NZW51SXRlbTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlldzsKLWltcG9ydCBh
bmRyb2lkLnZpZXcuVmlldy5PbkNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3Lmlu
cHV0bWV0aG9kLkVkaXRvckluZm87Ci1pbXBvcnQgYW5kcm9pZC53ZWJraXQuVVJMVXRpbDsKLWlt
cG9ydCBhbmRyb2lkLndpZGdldC5BZGFwdGVyVmlldzsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5B
cnJheUFkYXB0ZXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuRWRpdFRleHQ7Ci1pbXBvcnQgYW5k
cm9pZC53aWRnZXQuSW1hZ2VCdXR0b247Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuTGlzdFZpZXc7
Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotaW1wb3J0IG9yZy5qc29uLkpTT05BcnJh
eTsKLWltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwotCi0vKioKLSAqIEhhbmRsZXMgdGhl
IGluaXRpYWwgc2V0dXAgd2hlcmUgdGhlIHVzZXIgc2VsZWN0cyB3aGljaCByb29tIHRvIGpvaW4u
Ci0gKi8KLXB1YmxpYyBjbGFzcyBDb25uZWN0QWN0aXZpdHkgZXh0ZW5kcyBBY3Rpdml0eSB7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQ29ubmVjdEFjdGl2aXR5IjsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENPTk5FQ1RJT05fUkVRVUVTVCA9IDE7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBSRU1PVkVfRkFWT1JJVEVfSU5ERVggPSAwOwotICBwcml2YXRl
IHN0YXRpYyBib29sZWFuIGNvbW1hbmRMaW5lUnVuID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBJbWFn
ZUJ1dHRvbiBjb25uZWN0QnV0dG9uOwotICBwcml2YXRlIEltYWdlQnV0dG9uIGFkZEZhdm9yaXRl
QnV0dG9uOwotICBwcml2YXRlIEVkaXRUZXh0IHJvb21FZGl0VGV4dDsKLSAgcHJpdmF0ZSBMaXN0
VmlldyByb29tTGlzdFZpZXc7Ci0gIHByaXZhdGUgU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJl
ZjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlZpZGVvQ2FsbEVuYWJsZWQ7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZTY3JlZW5jYXB0dXJlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQ2Ft
ZXJhMjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJlc29sdXRpb247Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZGcHM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZDYXB0dXJlUXVhbGl0eVNs
aWRlcjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlZpZGVvQml0cmF0ZVR5cGU7Ci0gIHByaXZh
dGUgU3RyaW5nIGtleXByZWZWaWRlb0JpdHJhdGVWYWx1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZlZpZGVvQ29kZWM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZBdWRpb0JpdHJhdGVUeXBl
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQXVkaW9CaXRyYXRlVmFsdWU7Ci0gIHByaXZhdGUg
U3RyaW5nIGtleXByZWZBdWRpb0NvZGVjOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmSHdDb2Rl
Y0FjY2VsZXJhdGlvbjsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkNhcHR1cmVUb1RleHR1cmU7
Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZOb0F1ZGlvUHJvY2Vzc2luZ1BpcGVsaW5lOwotICBw
cml2YXRlIFN0cmluZyBrZXlwcmVmQWVjRHVtcDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZk9w
ZW5TTEVTOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BZWM7Ci0gIHBy
aXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVpbHRJbkFnYzsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZkRpc2FibGVCdWlsdEluTnM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZFbmFibGVM
ZXZlbENvbnRyb2w7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNwbGF5SHVkOwotICBwcml2
YXRlIFN0cmluZyBrZXlwcmVmVHJhY2luZzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJvb21T
ZXJ2ZXJVcmw7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZSb29tOwotICBwcml2YXRlIFN0cmlu
ZyBrZXlwcmVmUm9vbUxpc3Q7Ci0gIHByaXZhdGUgQXJyYXlMaXN0PFN0cmluZz4gcm9vbUxpc3Q7
Ci0gIHByaXZhdGUgQXJyYXlBZGFwdGVyPFN0cmluZz4gYWRhcHRlcjsKLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAg
IHN1cGVyLm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0KLSAgICAvLyBHZXQgc2V0dGlu
ZyBrZXlzLgotICAgIFByZWZlcmVuY2VNYW5hZ2VyLnNldERlZmF1bHRWYWx1ZXModGhpcywgUi54
bWwucHJlZmVyZW5jZXMsIGZhbHNlKTsKLSAgICBzaGFyZWRQcmVmID0gUHJlZmVyZW5jZU1hbmFn
ZXIuZ2V0RGVmYXVsdFNoYXJlZFByZWZlcmVuY2VzKHRoaXMpOwotICAgIGtleXByZWZWaWRlb0Nh
bGxFbmFibGVkID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmlkZW9jYWxsX2tleSk7Ci0gICAg
a2V5cHJlZlNjcmVlbmNhcHR1cmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zY3JlZW5jYXB0
dXJlX2tleSk7Ci0gICAga2V5cHJlZkNhbWVyYTIgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9j
YW1lcmEyX2tleSk7Ci0gICAga2V5cHJlZlJlc29sdXRpb24gPSBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9yZXNvbHV0aW9uX2tleSk7Ci0gICAga2V5cHJlZkZwcyA9IGdldFN0cmluZyhSLnN0cmlu
Zy5wcmVmX2Zwc19rZXkpOwotICAgIGtleXByZWZDYXB0dXJlUXVhbGl0eVNsaWRlciA9IGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX2tleSk7Ci0gICAga2V5cHJl
ZlZpZGVvQml0cmF0ZVR5cGUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJh
dGVfa2V5KTsKLSAgICBrZXlwcmVmVmlkZW9CaXRyYXRlVmFsdWUgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9rZXkpOwotICAgIGtleXByZWZWaWRlb0NvZGVj
ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmlkZW9jb2RlY19rZXkpOwotICAgIGtleXByZWZI
d0NvZGVjQWNjZWxlcmF0aW9uID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfaHdjb2RlY19rZXkp
OwotICAgIGtleXByZWZDYXB0dXJlVG9UZXh0dXJlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZf
Y2FwdHVyZXRvdGV4dHVyZV9rZXkpOwotICAgIGtleXByZWZBdWRpb0JpdHJhdGVUeXBlID0gZ2V0
U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGVfa2V5KTsKLSAgICBrZXlwcmVm
QXVkaW9CaXRyYXRlVmFsdWUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0
cmF0ZXZhbHVlX2tleSk7Ci0gICAga2V5cHJlZkF1ZGlvQ29kZWMgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9hdWRpb2NvZGVjX2tleSk7Ci0gICAga2V5cHJlZk5vQXVkaW9Qcm9jZXNzaW5nUGlw
ZWxpbmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19rZXkpOwot
ICAgIGtleXByZWZBZWNEdW1wID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYWVjZHVtcF9rZXkp
OwotICAgIGtleXByZWZPcGVuU0xFUyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX29wZW5zbGVz
X2tleSk7Ci0gICAga2V5cHJlZkRpc2FibGVCdWlsdEluQWVjID0gZ2V0U3RyaW5nKFIuc3RyaW5n
LnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0
SW5BZ2MgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19rZXkp
OwotICAgIGtleXByZWZEaXNhYmxlQnVpbHRJbk5zID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZf
ZGlzYWJsZV9idWlsdF9pbl9uc19rZXkpOwotICAgIGtleXByZWZFbmFibGVMZXZlbENvbnRyb2wg
PSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9lbmFibGVfbGV2ZWxfY29udHJvbF9rZXkpOwotICAg
IGtleXByZWZEaXNwbGF5SHVkID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzcGxheWh1ZF9r
ZXkpOwotICAgIGtleXByZWZUcmFjaW5nID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdHJhY2lu
Z19rZXkpOwotICAgIGtleXByZWZSb29tU2VydmVyVXJsID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnBy
ZWZfcm9vbV9zZXJ2ZXJfdXJsX2tleSk7Ci0gICAga2V5cHJlZlJvb20gPSBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl9yb29tX2tleSk7Ci0gICAga2V5cHJlZlJvb21MaXN0ID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfcm9vbV9saXN0X2tleSk7Ci0KLSAgICBzZXRDb250ZW50VmlldyhSLmxheW91
dC5hY3Rpdml0eV9jb25uZWN0KTsKLQotICAgIHJvb21FZGl0VGV4dCA9IChFZGl0VGV4dCkgZmlu
ZFZpZXdCeUlkKFIuaWQucm9vbV9lZGl0dGV4dCk7Ci0gICAgcm9vbUVkaXRUZXh0LnNldE9uRWRp
dG9yQWN0aW9uTGlzdGVuZXIobmV3IFRleHRWaWV3Lk9uRWRpdG9yQWN0aW9uTGlzdGVuZXIoKSB7
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyBib29sZWFuIG9uRWRpdG9yQWN0aW9uKFRl
eHRWaWV3IHRleHRWaWV3LCBpbnQgaSwgS2V5RXZlbnQga2V5RXZlbnQpIHsKLSAgICAgICAgaWYg
KGkgPT0gRWRpdG9ySW5mby5JTUVfQUNUSU9OX0RPTkUpIHsKLSAgICAgICAgICBhZGRGYXZvcml0
ZUJ1dHRvbi5wZXJmb3JtQ2xpY2soKTsKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgcm9vbUVkaXRU
ZXh0LnJlcXVlc3RGb2N1cygpOwotCi0gICAgcm9vbUxpc3RWaWV3ID0gKExpc3RWaWV3KSBmaW5k
Vmlld0J5SWQoUi5pZC5yb29tX2xpc3R2aWV3KTsKLSAgICByb29tTGlzdFZpZXcuc2V0RW1wdHlW
aWV3KGZpbmRWaWV3QnlJZChhbmRyb2lkLlIuaWQuZW1wdHkpKTsKLSAgICByb29tTGlzdFZpZXcu
c2V0T25JdGVtQ2xpY2tMaXN0ZW5lcihyb29tTGlzdENsaWNrTGlzdGVuZXIpOwotICAgIHJlZ2lz
dGVyRm9yQ29udGV4dE1lbnUocm9vbUxpc3RWaWV3KTsKLSAgICBjb25uZWN0QnV0dG9uID0gKElt
YWdlQnV0dG9uKSBmaW5kVmlld0J5SWQoUi5pZC5jb25uZWN0X2J1dHRvbik7Ci0gICAgY29ubmVj
dEJ1dHRvbi5zZXRPbkNsaWNrTGlzdGVuZXIoY29ubmVjdExpc3RlbmVyKTsKLSAgICBhZGRGYXZv
cml0ZUJ1dHRvbiA9IChJbWFnZUJ1dHRvbikgZmluZFZpZXdCeUlkKFIuaWQuYWRkX2Zhdm9yaXRl
X2J1dHRvbik7Ci0gICAgYWRkRmF2b3JpdGVCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKGFkZEZh
dm9yaXRlTGlzdGVuZXIpOwotCi0gICAgLy8gSWYgYW4gaW1wbGljaXQgVklFVyBpbnRlbnQgaXMg
bGF1bmNoaW5nIHRoZSBhcHAsIGdvIGRpcmVjdGx5IHRvIHRoYXQgVVJMLgotICAgIGZpbmFsIElu
dGVudCBpbnRlbnQgPSBnZXRJbnRlbnQoKTsKLSAgICBpZiAoImFuZHJvaWQuaW50ZW50LmFjdGlv
bi5WSUVXIi5lcXVhbHMoaW50ZW50LmdldEFjdGlvbigpKSAmJiAhY29tbWFuZExpbmVSdW4pIHsK
LSAgICAgIGJvb2xlYW4gbG9vcGJhY2sgPSBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9MT09QQkFDSywgZmFsc2UpOwotICAgICAgaW50IHJ1blRpbWVNcyA9IGludGVu
dC5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfUlVOVElNRSwgMCk7Ci0gICAgICBib29s
ZWFuIHVzZVZhbHVlc0Zyb21JbnRlbnQgPQotICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1VTRV9WQUxVRVNfRlJPTV9JTlRFTlQsIGZhbHNlKTsKLSAg
ICAgIFN0cmluZyByb29tID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZlJvb20sICIiKTsK
LSAgICAgIGNvbm5lY3RUb1Jvb20ocm9vbSwgdHJ1ZSwgbG9vcGJhY2ssIHVzZVZhbHVlc0Zyb21J
bnRlbnQsIHJ1blRpbWVNcyk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyBi
b29sZWFuIG9uQ3JlYXRlT3B0aW9uc01lbnUoTWVudSBtZW51KSB7Ci0gICAgZ2V0TWVudUluZmxh
dGVyKCkuaW5mbGF0ZShSLm1lbnUuY29ubmVjdF9tZW51LCBtZW51KTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNyZWF0ZUNvbnRleHRNZW51
KENvbnRleHRNZW51IG1lbnUsIFZpZXcgdiwgQ29udGV4dE1lbnUuQ29udGV4dE1lbnVJbmZvIG1l
bnVJbmZvKSB7Ci0gICAgaWYgKHYuZ2V0SWQoKSA9PSBSLmlkLnJvb21fbGlzdHZpZXcpIHsKLSAg
ICAgIEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUluZm8gaW5mbyA9IChBZGFwdGVyVmll
dy5BZGFwdGVyQ29udGV4dE1lbnVJbmZvKSBtZW51SW5mbzsKLSAgICAgIG1lbnUuc2V0SGVhZGVy
VGl0bGUocm9vbUxpc3QuZ2V0KGluZm8ucG9zaXRpb24pKTsKLSAgICAgIFN0cmluZ1tdIG1lbnVJ
dGVtcyA9IGdldFJlc291cmNlcygpLmdldFN0cmluZ0FycmF5KFIuYXJyYXkucm9vbUxpc3RDb250
ZXh0TWVudSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1lbnVJdGVtcy5sZW5ndGg7IGkr
KykgewotICAgICAgICBtZW51LmFkZChNZW51Lk5PTkUsIGksIGksIG1lbnVJdGVtc1tpXSk7Ci0g
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHN1cGVyLm9uQ3JlYXRlQ29udGV4dE1lbnUobWVu
dSwgdiwgbWVudUluZm8pOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9v
bGVhbiBvbkNvbnRleHRJdGVtU2VsZWN0ZWQoTWVudUl0ZW0gaXRlbSkgewotICAgIGlmIChpdGVt
LmdldEl0ZW1JZCgpID09IFJFTU9WRV9GQVZPUklURV9JTkRFWCkgewotICAgICAgQWRhcHRlclZp
ZXcuQWRhcHRlckNvbnRleHRNZW51SW5mbyBpbmZvID0KLSAgICAgICAgICAoQWRhcHRlclZpZXcu
QWRhcHRlckNvbnRleHRNZW51SW5mbykgaXRlbS5nZXRNZW51SW5mbygpOwotICAgICAgcm9vbUxp
c3QucmVtb3ZlKGluZm8ucG9zaXRpb24pOwotICAgICAgYWRhcHRlci5ub3RpZnlEYXRhU2V0Q2hh
bmdlZCgpOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHN1cGVyLm9u
Q29udGV4dEl0ZW1TZWxlY3RlZChpdGVtKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
Ym9vbGVhbiBvbk9wdGlvbnNJdGVtU2VsZWN0ZWQoTWVudUl0ZW0gaXRlbSkgewotICAgIC8vIEhh
bmRsZSBwcmVzc2VzIG9uIHRoZSBhY3Rpb24gYmFyIGl0ZW1zLgotICAgIGlmIChpdGVtLmdldEl0
ZW1JZCgpID09IFIuaWQuYWN0aW9uX3NldHRpbmdzKSB7Ci0gICAgICBJbnRlbnQgaW50ZW50ID0g
bmV3IEludGVudCh0aGlzLCBTZXR0aW5nc0FjdGl2aXR5LmNsYXNzKTsKLSAgICAgIHN0YXJ0QWN0
aXZpdHkoaW50ZW50KTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSBpZiAoaXRlbS5n
ZXRJdGVtSWQoKSA9PSBSLmlkLmFjdGlvbl9sb29wYmFjaykgewotICAgICAgY29ubmVjdFRvUm9v
bShudWxsLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIDApOwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHJldHVybiBzdXBlci5vbk9wdGlvbnNJdGVtU2VsZWN0ZWQoaXRlbSk7
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGF1c2UoKSB7Ci0g
ICAgc3VwZXIub25QYXVzZSgpOwotICAgIFN0cmluZyByb29tID0gcm9vbUVkaXRUZXh0LmdldFRl
eHQoKS50b1N0cmluZygpOwotICAgIFN0cmluZyByb29tTGlzdEpzb24gPSBuZXcgSlNPTkFycmF5
KHJvb21MaXN0KS50b1N0cmluZygpOwotICAgIFNoYXJlZFByZWZlcmVuY2VzLkVkaXRvciBlZGl0
b3IgPSBzaGFyZWRQcmVmLmVkaXQoKTsKLSAgICBlZGl0b3IucHV0U3RyaW5nKGtleXByZWZSb29t
LCByb29tKTsKLSAgICBlZGl0b3IucHV0U3RyaW5nKGtleXByZWZSb29tTGlzdCwgcm9vbUxpc3RK
c29uKTsKLSAgICBlZGl0b3IuY29tbWl0KCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25SZXN1bWUoKSB7Ci0gICAgc3VwZXIub25SZXN1bWUoKTsKLSAgICBTdHJpbmcgcm9v
bSA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZSb29tLCAiIik7Ci0gICAgcm9vbUVkaXRU
ZXh0LnNldFRleHQocm9vbSk7Ci0gICAgcm9vbUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4o
KTsKLSAgICBTdHJpbmcgcm9vbUxpc3RKc29uID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJl
ZlJvb21MaXN0LCBudWxsKTsKLSAgICBpZiAocm9vbUxpc3RKc29uICE9IG51bGwpIHsKLSAgICAg
IHRyeSB7Ci0gICAgICAgIEpTT05BcnJheSBqc29uQXJyYXkgPSBuZXcgSlNPTkFycmF5KHJvb21M
aXN0SnNvbik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwganNvbkFycmF5Lmxlbmd0aCgp
OyBpKyspIHsKLSAgICAgICAgICByb29tTGlzdC5hZGQoanNvbkFycmF5LmdldChpKS50b1N0cmlu
ZygpKTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAgIExvZy5lKFRBRywgIkZhaWxlZCB0byBsb2FkIHJvb20gbGlzdDogIiArIGUudG9TdHJpbmco
KSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGFkYXB0ZXIgPSBuZXcgQXJyYXlBZGFwdGVyPFN0cmlu
Zz4odGhpcywgYW5kcm9pZC5SLmxheW91dC5zaW1wbGVfbGlzdF9pdGVtXzEsIHJvb21MaXN0KTsK
LSAgICByb29tTGlzdFZpZXcuc2V0QWRhcHRlcihhZGFwdGVyKTsKLSAgICBpZiAoYWRhcHRlci5n
ZXRDb3VudCgpID4gMCkgewotICAgICAgcm9vbUxpc3RWaWV3LnJlcXVlc3RGb2N1cygpOwotICAg
ICAgcm9vbUxpc3RWaWV3LnNldEl0ZW1DaGVja2VkKDAsIHRydWUpOwotICAgIH0KLSAgfQotCi0g
IEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkFjdGl2aXR5UmVzdWx0KGludCByZXF1ZXN0
Q29kZSwgaW50IHJlc3VsdENvZGUsIEludGVudCBkYXRhKSB7Ci0gICAgaWYgKHJlcXVlc3RDb2Rl
ID09IENPTk5FQ1RJT05fUkVRVUVTVCAmJiBjb21tYW5kTGluZVJ1bikgewotICAgICAgTG9nLmQo
VEFHLCAiUmV0dXJuOiAiICsgcmVzdWx0Q29kZSk7Ci0gICAgICBzZXRSZXN1bHQocmVzdWx0Q29k
ZSk7Ci0gICAgICBjb21tYW5kTGluZVJ1biA9IGZhbHNlOwotICAgICAgZmluaXNoKCk7Ci0gICAg
fQotICB9Ci0KLSAgLyoqCi0gICAqIEdldCBhIHZhbHVlIGZyb20gdGhlIHNoYXJlZCBwcmVmZXJl
bmNlIG9yIGZyb20gdGhlIGludGVudCwgaWYgaXQgZG9lcyBub3QKLSAgICogZXhpc3QgdGhlIGRl
ZmF1bHQgaXMgdXNlZC4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIHNoYXJlZFByZWZHZXRTdHJp
bmcoCi0gICAgICBpbnQgYXR0cmlidXRlSWQsIFN0cmluZyBpbnRlbnROYW1lLCBpbnQgZGVmYXVs
dElkLCBib29sZWFuIHVzZUZyb21JbnRlbnQpIHsKLSAgICBTdHJpbmcgZGVmYXVsdFZhbHVlID0g
Z2V0U3RyaW5nKGRlZmF1bHRJZCk7Ci0gICAgaWYgKHVzZUZyb21JbnRlbnQpIHsKLSAgICAgIFN0
cmluZyB2YWx1ZSA9IGdldEludGVudCgpLmdldFN0cmluZ0V4dHJhKGludGVudE5hbWUpOwotICAg
ICAgaWYgKHZhbHVlICE9IG51bGwpIHsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgICAgfQot
ICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKLSAgICB9IGVsc2UgewotICAgICAgU3RyaW5nIGF0
dHJpYnV0ZU5hbWUgPSBnZXRTdHJpbmcoYXR0cmlidXRlSWQpOwotICAgICAgcmV0dXJuIHNoYXJl
ZFByZWYuZ2V0U3RyaW5nKGF0dHJpYnV0ZU5hbWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotICB9
Ci0KLSAgLyoqCi0gICAqIEdldCBhIHZhbHVlIGZyb20gdGhlIHNoYXJlZCBwcmVmZXJlbmNlIG9y
IGZyb20gdGhlIGludGVudCwgaWYgaXQgZG9lcyBub3QKLSAgICogZXhpc3QgdGhlIGRlZmF1bHQg
aXMgdXNlZC4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBzaGFyZWRQcmVmR2V0Qm9vbGVhbigK
LSAgICAgIGludCBhdHRyaWJ1dGVJZCwgU3RyaW5nIGludGVudE5hbWUsIGludCBkZWZhdWx0SWQs
IGJvb2xlYW4gdXNlRnJvbUludGVudCkgewotICAgIGJvb2xlYW4gZGVmYXVsdFZhbHVlID0gQm9v
bGVhbi52YWx1ZU9mKGdldFN0cmluZyhkZWZhdWx0SWQpKTsKLSAgICBpZiAodXNlRnJvbUludGVu
dCkgewotICAgICAgcmV0dXJuIGdldEludGVudCgpLmdldEJvb2xlYW5FeHRyYShpbnRlbnROYW1l
LCBkZWZhdWx0VmFsdWUpOwotICAgIH0gZWxzZSB7Ci0gICAgICBTdHJpbmcgYXR0cmlidXRlTmFt
ZSA9IGdldFN0cmluZyhhdHRyaWJ1dGVJZCk7Ci0gICAgICByZXR1cm4gc2hhcmVkUHJlZi5nZXRC
b29sZWFuKGF0dHJpYnV0ZU5hbWUsIGRlZmF1bHRWYWx1ZSk7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIGNvbm5lY3RUb1Jvb20oU3RyaW5nIHJvb21JZCwgYm9vbGVhbiBjb21tYW5kTGlu
ZVJ1biwgYm9vbGVhbiBsb29wYmFjaywKLSAgICAgIGJvb2xlYW4gdXNlVmFsdWVzRnJvbUludGVu
dCwgaW50IHJ1blRpbWVNcykgewotICAgIHRoaXMuY29tbWFuZExpbmVSdW4gPSBjb21tYW5kTGlu
ZVJ1bjsKLQotICAgIC8vIHJvb21JZCBpcyByYW5kb20gZm9yIGxvb3BiYWNrLgotICAgIGlmIChs
b29wYmFjaykgewotICAgICAgcm9vbUlkID0gSW50ZWdlci50b1N0cmluZygobmV3IFJhbmRvbSgp
KS5uZXh0SW50KDEwMDAwMDAwMCkpOwotICAgIH0KLQotICAgIFN0cmluZyByb29tVXJsID0gc2hh
cmVkUHJlZi5nZXRTdHJpbmcoCi0gICAgICAgIGtleXByZWZSb29tU2VydmVyVXJsLCBnZXRTdHJp
bmcoUi5zdHJpbmcucHJlZl9yb29tX3NlcnZlcl91cmxfZGVmYXVsdCkpOwotCi0gICAgLy8gVmlk
ZW8gY2FsbCBlbmFibGVkIGZsYWcuCi0gICAgYm9vbGVhbiB2aWRlb0NhbGxFbmFibGVkID0gc2hh
cmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl92aWRlb2NhbGxfa2V5LAotICAgICAgICBD
YWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FMTCwgUi5zdHJpbmcucHJlZl92aWRlb2NhbGxfZGVm
YXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBVc2Ugc2NyZWVuY2FwdHVyZSBv
cHRpb24uCi0gICAgYm9vbGVhbiB1c2VTY3JlZW5jYXB0dXJlID0gc2hhcmVkUHJlZkdldEJvb2xl
YW4oUi5zdHJpbmcucHJlZl9zY3JlZW5jYXB0dXJlX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5
LkVYVFJBX1NDUkVFTkNBUFRVUkUsIFIuc3RyaW5nLnByZWZfc2NyZWVuY2FwdHVyZV9kZWZhdWx0
LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIFVzZSBDYW1lcmEyIG9wdGlvbi4KLSAg
ICBib29sZWFuIHVzZUNhbWVyYTIgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVm
X2NhbWVyYTJfa2V5LCBDYWxsQWN0aXZpdHkuRVhUUkFfQ0FNRVJBMiwKLSAgICAgICAgUi5zdHJp
bmcucHJlZl9jYW1lcmEyX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8g
R2V0IGRlZmF1bHQgY29kZWNzLgotICAgIFN0cmluZyB2aWRlb0NvZGVjID0gc2hhcmVkUHJlZkdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX3ZpZGVvY29kZWNfa2V5LAotICAgICAgICBDYWxsQWN0aXZp
dHkuRVhUUkFfVklERU9DT0RFQywgUi5zdHJpbmcucHJlZl92aWRlb2NvZGVjX2RlZmF1bHQsIHVz
ZVZhbHVlc0Zyb21JbnRlbnQpOwotICAgIFN0cmluZyBhdWRpb0NvZGVjID0gc2hhcmVkUHJlZkdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX2F1ZGlvY29kZWNfa2V5LAotICAgICAgICBDYWxsQWN0aXZp
dHkuRVhUUkFfQVVESU9DT0RFQywgUi5zdHJpbmcucHJlZl9hdWRpb2NvZGVjX2RlZmF1bHQsIHVz
ZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgSFcgY29kZWMgZmxhZy4KLSAgICBi
b29sZWFuIGh3Q29kZWMgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2h3Y29k
ZWNfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFfSFdDT0RFQ19FTkFCTEVELCBSLnN0
cmluZy5wcmVmX2h3Y29kZWNfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAv
LyBDaGVjayBDYXB0dXJlIHRvIHRleHR1cmUuCi0gICAgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJl
ID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9jYXB0dXJldG90ZXh0dXJlX2tl
eSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0NBUFRVUkVUT1RFWFRVUkVfRU5BQkxFRCwg
Ui5zdHJpbmcucHJlZl9jYXB0dXJldG90ZXh0dXJlX2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVl
c0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgRGlzYWJsZSBBdWRpbyBQcm9jZXNzaW5nIGZs
YWcuCi0gICAgYm9vbGVhbiBub0F1ZGlvUHJvY2Vzc2luZyA9IHNoYXJlZFByZWZHZXRCb29sZWFu
KFIuc3RyaW5nLnByZWZfbm9hdWRpb3Byb2Nlc3Npbmdfa2V5LAotICAgICAgICBDYWxsQWN0aXZp
dHkuRVhUUkFfTk9BVURJT1BST0NFU1NJTkdfRU5BQkxFRCwgUi5zdHJpbmcucHJlZl9ub2F1ZGlv
cHJvY2Vzc2luZ19kZWZhdWx0LAotICAgICAgICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAg
IC8vIENoZWNrIERpc2FibGUgQXVkaW8gUHJvY2Vzc2luZyBmbGFnLgotICAgIGJvb2xlYW4gYWVj
RHVtcCA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfYWVjZHVtcF9rZXksCi0g
ICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9BRUNEVU1QX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZf
YWVjZHVtcF9kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIE9w
ZW5TTCBFUyBlbmFibGVkIGZsYWcuCi0gICAgYm9vbGVhbiB1c2VPcGVuU0xFUyA9IHNoYXJlZFBy
ZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfb3BlbnNsZXNfa2V5LAotICAgICAgICBDYWxsQWN0
aXZpdHkuRVhUUkFfT1BFTlNMRVNfRU5BQkxFRCwgUi5zdHJpbmcucHJlZl9vcGVuc2xlc19kZWZh
dWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIERpc2FibGUgYnVpbHQt
aW4gQUVDIGZsYWcuCi0gICAgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbkFFQyA9IHNoYXJlZFByZWZH
ZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZWNfa2V5LAotICAgICAg
ICBDYWxsQWN0aXZpdHkuRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9BRUMsIFIuc3RyaW5nLnByZWZf
ZGlzYWJsZV9idWlsdF9pbl9hZWNfZGVmYXVsdCwKLSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVu
dCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxlIGJ1aWx0LWluIEFHQyBmbGFnLgotICAgIGJvb2xl
YW4gZGlzYWJsZUJ1aWx0SW5BR0MgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVm
X2Rpc2FibGVfYnVpbHRfaW5fYWdjX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0RJ
U0FCTEVfQlVJTFRfSU5fQUdDLCBSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWdjX2Rl
ZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgRGlz
YWJsZSBidWlsdC1pbiBOUyBmbGFnLgotICAgIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5OUyA9IHNo
YXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19rZXks
Ci0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lOX05TLCBSLnN0cmlu
Zy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfZGVmYXVsdCwKLSAgICAgICAgdXNlVmFsdWVzRnJv
bUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBFbmFibGUgbGV2ZWwgY29udHJvbC4KLSAgICBib29s
ZWFuIGVuYWJsZUxldmVsQ29udHJvbCA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnBy
ZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFf
RU5BQkxFX0xFVkVMX0NPTlRST0wsIFIuc3RyaW5nLnByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xf
a2V5LAotICAgICAgICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIEdldCB2aWRlbyBy
ZXNvbHV0aW9uIGZyb20gc2V0dGluZ3MuCi0gICAgaW50IHZpZGVvV2lkdGggPSAwOwotICAgIGlu
dCB2aWRlb0hlaWdodCA9IDA7Ci0gICAgaWYgKHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsKLSAgICAg
IHZpZGVvV2lkdGggPSBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFf
VklERU9fV0lEVEgsIDApOwotICAgICAgdmlkZW9IZWlnaHQgPSBnZXRJbnRlbnQoKS5nZXRJbnRF
eHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fSEVJR0hULCAwKTsKLSAgICB9Ci0gICAgaWYg
KHZpZGVvV2lkdGggPT0gMCAmJiB2aWRlb0hlaWdodCA9PSAwKSB7Ci0gICAgICBTdHJpbmcgcmVz
b2x1dGlvbiA9Ci0gICAgICAgICAgc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZlJlc29sdXRp
b24sIGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jlc29sdXRpb25fZGVmYXVsdCkpOwotICAgICAg
U3RyaW5nW10gZGltZW5zaW9ucyA9IHJlc29sdXRpb24uc3BsaXQoIlsgeF0rIik7Ci0gICAgICBp
ZiAoZGltZW5zaW9ucy5sZW5ndGggPT0gMikgewotICAgICAgICB0cnkgewotICAgICAgICAgIHZp
ZGVvV2lkdGggPSBJbnRlZ2VyLnBhcnNlSW50KGRpbWVuc2lvbnNbMF0pOwotICAgICAgICAgIHZp
ZGVvSGVpZ2h0ID0gSW50ZWdlci5wYXJzZUludChkaW1lbnNpb25zWzFdKTsKLSAgICAgICAgfSBj
YXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICB2aWRlb1dpZHRoID0g
MDsKLSAgICAgICAgICB2aWRlb0hlaWdodCA9IDA7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiV3Jv
bmcgdmlkZW8gcmVzb2x1dGlvbiBzZXR0aW5nOiAiICsgcmVzb2x1dGlvbik7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBHZXQgY2FtZXJhIGZwcyBmcm9tIHNldHRpbmdzLgot
ICAgIGludCBjYW1lcmFGcHMgPSAwOwotICAgIGlmICh1c2VWYWx1ZXNGcm9tSW50ZW50KSB7Ci0g
ICAgICBjYW1lcmFGcHMgPSBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhU
UkFfVklERU9fRlBTLCAwKTsKLSAgICB9Ci0gICAgaWYgKGNhbWVyYUZwcyA9PSAwKSB7Ci0gICAg
ICBTdHJpbmcgZnBzID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZkZwcywgZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfZnBzX2RlZmF1bHQpKTsKLSAgICAgIFN0cmluZ1tdIGZwc1ZhbHVlcyA9
IGZwcy5zcGxpdCgiWyB4XSsiKTsKLSAgICAgIGlmIChmcHNWYWx1ZXMubGVuZ3RoID09IDIpIHsK
LSAgICAgICAgdHJ5IHsKLSAgICAgICAgICBjYW1lcmFGcHMgPSBJbnRlZ2VyLnBhcnNlSW50KGZw
c1ZhbHVlc1swXSk7Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAgICAgY2FtZXJhRnBzID0gMDsKLSAgICAgICAgICBMb2cuZShUQUcsICJXcm9uZyBj
YW1lcmEgZnBzIHNldHRpbmc6ICIgKyBmcHMpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gQ2hlY2sgY2FwdHVyZSBxdWFsaXR5IHNsaWRlciBmbGFnLgotICAgIGJvb2xlYW4g
Y2FwdHVyZVF1YWxpdHlTbGlkZXIgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVm
X2NhcHR1cmVxdWFsaXR5c2xpZGVyX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJ
REVPX0NBUFRVUkVRVUFMSVRZU0xJREVSX0VOQUJMRUQsCi0gICAgICAgIFIuc3RyaW5nLnByZWZf
Y2FwdHVyZXF1YWxpdHlzbGlkZXJfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAg
ICAvLyBHZXQgdmlkZW8gYW5kIGF1ZGlvIHN0YXJ0IGJpdHJhdGUuCi0gICAgaW50IHZpZGVvU3Rh
cnRCaXRyYXRlID0gMDsKLSAgICBpZiAodXNlVmFsdWVzRnJvbUludGVudCkgewotICAgICAgdmlk
ZW9TdGFydEJpdHJhdGUgPSBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhU
UkFfVklERU9fQklUUkFURSwgMCk7Ci0gICAgfQotICAgIGlmICh2aWRlb1N0YXJ0Qml0cmF0ZSA9
PSAwKSB7Ci0gICAgICBTdHJpbmcgYml0cmF0ZVR5cGVEZWZhdWx0ID0gZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfbWF4dmlkZW9iaXRyYXRlX2RlZmF1bHQpOwotICAgICAgU3RyaW5nIGJpdHJhdGVU
eXBlID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoa2V5cHJlZlZpZGVvQml0cmF0ZVR5cGUsIGJpdHJh
dGVUeXBlRGVmYXVsdCk7Ci0gICAgICBpZiAoIWJpdHJhdGVUeXBlLmVxdWFscyhiaXRyYXRlVHlw
ZURlZmF1bHQpKSB7Ci0gICAgICAgIFN0cmluZyBiaXRyYXRlVmFsdWUgPSBzaGFyZWRQcmVmLmdl
dFN0cmluZygKLSAgICAgICAgICAgIGtleXByZWZWaWRlb0JpdHJhdGVWYWx1ZSwgZ2V0U3RyaW5n
KFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRyYXRldmFsdWVfZGVmYXVsdCkpOwotICAgICAgICB2
aWRlb1N0YXJ0Qml0cmF0ZSA9IEludGVnZXIucGFyc2VJbnQoYml0cmF0ZVZhbHVlKTsKLSAgICAg
IH0KLSAgICB9Ci0KLSAgICBpbnQgYXVkaW9TdGFydEJpdHJhdGUgPSAwOwotICAgIGlmICh1c2VW
YWx1ZXNGcm9tSW50ZW50KSB7Ci0gICAgICBhdWRpb1N0YXJ0Qml0cmF0ZSA9IGdldEludGVudCgp
LmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9BVURJT19CSVRSQVRFLCAwKTsKLSAgICB9
Ci0gICAgaWYgKGF1ZGlvU3RhcnRCaXRyYXRlID09IDApIHsKLSAgICAgIFN0cmluZyBiaXRyYXRl
VHlwZURlZmF1bHQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZV9k
ZWZhdWx0KTsKLSAgICAgIFN0cmluZyBiaXRyYXRlVHlwZSA9IHNoYXJlZFByZWYuZ2V0U3RyaW5n
KGtleXByZWZBdWRpb0JpdHJhdGVUeXBlLCBiaXRyYXRlVHlwZURlZmF1bHQpOwotICAgICAgaWYg
KCFiaXRyYXRlVHlwZS5lcXVhbHMoYml0cmF0ZVR5cGVEZWZhdWx0KSkgewotICAgICAgICBTdHJp
bmcgYml0cmF0ZVZhbHVlID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoCi0gICAgICAgICAgICBrZXlw
cmVmQXVkaW9CaXRyYXRlVmFsdWUsIGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9i
aXRyYXRldmFsdWVfZGVmYXVsdCkpOwotICAgICAgICBhdWRpb1N0YXJ0Qml0cmF0ZSA9IEludGVn
ZXIucGFyc2VJbnQoYml0cmF0ZVZhbHVlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDaGVj
ayBzdGF0aXN0aWNzIGRpc3BsYXkgb3B0aW9uLgotICAgIGJvb2xlYW4gZGlzcGxheUh1ZCA9IHNo
YXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfZGlzcGxheWh1ZF9rZXksCi0gICAgICAg
IENhbGxBY3Rpdml0eS5FWFRSQV9ESVNQTEFZX0hVRCwgUi5zdHJpbmcucHJlZl9kaXNwbGF5aHVk
X2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgYm9vbGVhbiB0cmFjaW5nID0g
c2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl90cmFjaW5nX2tleSwgQ2FsbEFjdGl2
aXR5LkVYVFJBX1RSQUNJTkcsCi0gICAgICAgIFIuc3RyaW5nLnByZWZfdHJhY2luZ19kZWZhdWx0
LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIFN0YXJ0IEFwcFJUQ01vYmlsZSBhY3Rp
dml0eS4KLSAgICBMb2cuZChUQUcsICJDb25uZWN0aW5nIHRvIHJvb20gIiArIHJvb21JZCArICIg
YXQgVVJMICIgKyByb29tVXJsKTsKLSAgICBpZiAodmFsaWRhdGVVcmwocm9vbVVybCkpIHsKLSAg
ICAgIFVyaSB1cmkgPSBVcmkucGFyc2Uocm9vbVVybCk7Ci0gICAgICBJbnRlbnQgaW50ZW50ID0g
bmV3IEludGVudCh0aGlzLCBDYWxsQWN0aXZpdHkuY2xhc3MpOwotICAgICAgaW50ZW50LnNldERh
dGEodXJpKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfUk9PTUlE
LCByb29tSWQpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9MT09Q
QkFDSywgbG9vcGJhY2spOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRS
QV9WSURFT19DQUxMLCB2aWRlb0NhbGxFbmFibGVkKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShD
YWxsQWN0aXZpdHkuRVhUUkFfU0NSRUVOQ0FQVFVSRSwgdXNlU2NyZWVuY2FwdHVyZSk7Ci0gICAg
ICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0NBTUVSQTIsIHVzZUNhbWVyYTIp
OwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19XSURUSCwg
dmlkZW9XaWR0aCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJ
REVPX0hFSUdIVCwgdmlkZW9IZWlnaHQpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9WSURFT19GUFMsIGNhbWVyYUZwcyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEo
Q2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBUFRVUkVRVUFMSVRZU0xJREVSX0VOQUJMRUQsIGNh
cHR1cmVRdWFsaXR5U2xpZGVyKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHku
RVhUUkFfVklERU9fQklUUkFURSwgdmlkZW9TdGFydEJpdHJhdGUpOwotICAgICAgaW50ZW50LnB1
dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT0NPREVDLCB2aWRlb0NvZGVjKTsKLSAgICAg
IGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfSFdDT0RFQ19FTkFCTEVELCBod0Nv
ZGVjKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfQ0FQVFVSRVRP
VEVYVFVSRV9FTkFCTEVELCBjYXB0dXJlVG9UZXh0dXJlKTsKLSAgICAgIGludGVudC5wdXRFeHRy
YShDYWxsQWN0aXZpdHkuRVhUUkFfTk9BVURJT1BST0NFU1NJTkdfRU5BQkxFRCwgbm9BdWRpb1By
b2Nlc3NpbmcpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9BRUNE
VU1QX0VOQUJMRUQsIGFlY0R1bXApOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0
eS5FWFRSQV9PUEVOU0xFU19FTkFCTEVELCB1c2VPcGVuU0xFUyk7Ci0gICAgICBpbnRlbnQucHV0
RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUVDLCBkaXNhYmxlQnVp
bHRJbkFFQyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FC
TEVfQlVJTFRfSU5fQUdDLCBkaXNhYmxlQnVpbHRJbkFHQyk7Ci0gICAgICBpbnRlbnQucHV0RXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fTlMsIGRpc2FibGVCdWlsdElu
TlMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9FTkFCTEVfTEVW
RUxfQ09OVFJPTCwgZW5hYmxlTGV2ZWxDb250cm9sKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShD
YWxsQWN0aXZpdHkuRVhUUkFfQVVESU9fQklUUkFURSwgYXVkaW9TdGFydEJpdHJhdGUpOwotICAg
ICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9BVURJT0NPREVDLCBhdWRpb0Nv
ZGVjKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfRElTUExBWV9I
VUQsIGRpc3BsYXlIdWQpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRS
QV9UUkFDSU5HLCB0cmFjaW5nKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHku
RVhUUkFfQ01ETElORSwgY29tbWFuZExpbmVSdW4pOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENh
bGxBY3Rpdml0eS5FWFRSQV9SVU5USU1FLCBydW5UaW1lTXMpOwotCi0gICAgICBpZiAodXNlVmFs
dWVzRnJvbUludGVudCkgewotICAgICAgICBpZiAoZ2V0SW50ZW50KCkuaGFzRXh0cmEoQ2FsbEFj
dGl2aXR5LkVYVFJBX1ZJREVPX0ZJTEVfQVNfQ0FNRVJBKSkgewotICAgICAgICAgIFN0cmluZyB2
aWRlb0ZpbGVBc0NhbWVyYSA9Ci0gICAgICAgICAgICAgIGdldEludGVudCgpLmdldFN0cmluZ0V4
dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19GSUxFX0FTX0NBTUVSQSk7Ci0gICAgICAgICAg
aW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19GSUxFX0FTX0NBTUVSQSwg
dmlkZW9GaWxlQXNDYW1lcmEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdldEludGVudCgp
Lmhhc0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFKSkg
ewotICAgICAgICAgIFN0cmluZyBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUgPQotICAgICAgICAgICAg
ICBnZXRJbnRlbnQoKS5nZXRTdHJpbmdFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1P
VEVfVklERU9fVE9fRklMRSk7Ci0gICAgICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0
eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFLCBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdldEludGVudCgpLmhhc0V4dHJhKENhbGxBY3Rp
dml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRIKSkgewotICAgICAgICAg
IGludCB2aWRlb091dFdpZHRoID0KLSAgICAgICAgICAgICAgZ2V0SW50ZW50KCkuZ2V0SW50RXh0
cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfV0lEVEgsIDAp
OwotICAgICAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1P
VEVfVklERU9fVE9fRklMRV9XSURUSCwgdmlkZW9PdXRXaWR0aCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBpZiAoZ2V0SW50ZW50KCkuaGFzRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVN
T1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hUKSkgewotICAgICAgICAgIGludCB2aWRlb091dEhlaWdo
dCA9Ci0gICAgICAgICAgICAgIGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5F
WFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hFSUdIVCwgMCk7Ci0gICAgICAgICAgaW50
ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxF
X0hFSUdIVCwgdmlkZW9PdXRIZWlnaHQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHN0
YXJ0QWN0aXZpdHlGb3JSZXN1bHQoaW50ZW50LCBDT05ORUNUSU9OX1JFUVVFU1QpOwotICAgIH0K
LSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB2YWxpZGF0ZVVybChTdHJpbmcgdXJsKSB7Ci0gICAg
aWYgKFVSTFV0aWwuaXNIdHRwc1VybCh1cmwpIHx8IFVSTFV0aWwuaXNIdHRwVXJsKHVybCkpIHsK
LSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIG5ldyBBbGVydERpYWxvZy5CdWlsZGVy
KHRoaXMpCi0gICAgICAgIC5zZXRUaXRsZShnZXRUZXh0KFIuc3RyaW5nLmludmFsaWRfdXJsX3Rp
dGxlKSkKLSAgICAgICAgLnNldE1lc3NhZ2UoZ2V0U3RyaW5nKFIuc3RyaW5nLmludmFsaWRfdXJs
X3RleHQsIHVybCkpCi0gICAgICAgIC5zZXRDYW5jZWxhYmxlKGZhbHNlKQotICAgICAgICAuc2V0
TmV1dHJhbEJ1dHRvbihSLnN0cmluZy5vaywKLSAgICAgICAgICAgIG5ldyBEaWFsb2dJbnRlcmZh
Y2UuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNsaWNr
KERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBpZCkgewotICAgICAgICAgICAgICAgIGRpYWxv
Zy5jYW5jZWwoKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSkKLSAgICAgICAgLmNy
ZWF0ZSgpCi0gICAgICAgIC5zaG93KCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgcHJp
dmF0ZSBmaW5hbCBBZGFwdGVyVmlldy5Pbkl0ZW1DbGlja0xpc3RlbmVyIHJvb21MaXN0Q2xpY2tM
aXN0ZW5lciA9Ci0gICAgICBuZXcgQWRhcHRlclZpZXcuT25JdGVtQ2xpY2tMaXN0ZW5lcigpIHsK
LSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIG9uSXRlbUNsaWNrKEFkYXB0
ZXJWaWV3PD8+IGFkYXB0ZXJWaWV3LCBWaWV3IHZpZXcsIGludCBpLCBsb25nIGwpIHsKLSAgICAg
ICAgICBTdHJpbmcgcm9vbUlkID0gKChUZXh0VmlldykgdmlldykuZ2V0VGV4dCgpLnRvU3RyaW5n
KCk7Ci0gICAgICAgICAgY29ubmVjdFRvUm9vbShyb29tSWQsIGZhbHNlLCBmYWxzZSwgZmFsc2Us
IDApOwotICAgICAgICB9Ci0gICAgICB9OwotCi0gIHByaXZhdGUgZmluYWwgT25DbGlja0xpc3Rl
bmVyIGFkZEZhdm9yaXRlTGlzdGVuZXIgPSBuZXcgT25DbGlja0xpc3RlbmVyKCkgewotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICBTdHJp
bmcgbmV3Um9vbSA9IHJvb21FZGl0VGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKTsKLSAgICAgIGlm
IChuZXdSb29tLmxlbmd0aCgpID4gMCAmJiAhcm9vbUxpc3QuY29udGFpbnMobmV3Um9vbSkpIHsK
LSAgICAgICAgYWRhcHRlci5hZGQobmV3Um9vbSk7Ci0gICAgICAgIGFkYXB0ZXIubm90aWZ5RGF0
YVNldENoYW5nZWQoKTsKLSAgICAgIH0KLSAgICB9Ci0gIH07Ci0KLSAgcHJpdmF0ZSBmaW5hbCBP
bkNsaWNrTGlzdGVuZXIgY29ubmVjdExpc3RlbmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsK
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAg
ICAgY29ubmVjdFRvUm9vbShyb29tRWRpdFRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCksIGZhbHNl
LCBmYWxzZSwgZmFsc2UsIDApOwotICAgIH0KLSAgfTsKLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy9DcHVNb25pdG9yLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL0NwdU1vbml0b3IuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0NwdU1vbml0b3IuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDUxMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90
LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudEZpbHRlcjsK
LWltcG9ydCBhbmRyb2lkLm9zLkJhdHRlcnlNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuU3lz
dGVtQ2xvY2s7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IGphdmEuaW8uQnVm
ZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBv
cnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBv
cnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuU2Nhbm5lcjsKLWltcG9ydCBq
YXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJl
bnQuU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50
LlRpbWVVbml0OwotCi0vKioKLSAqIFNpbXBsZSBDUFUgbW9uaXRvci4gIFRoZSBjYWxsZXIgY3Jl
YXRlcyBhIENwdU1vbml0b3Igb2JqZWN0IHdoaWNoIGNhbiB0aGVuCi0gKiBiZSB1c2VkIHZpYSBz
YW1wbGVDcHVVdGlsaXphdGlvbigpIHRvIGNvbGxlY3QgdGhlIHBlcmNlbnR1YWwgdXNlIG9mIHRo
ZQotICogY3VtdWxhdGl2ZSBDUFUgY2FwYWNpdHkgZm9yIGFsbCBDUFVzIHJ1bm5pbmcgYXQgdGhl
aXIgbm9taW5hbCBmcmVxdWVuY3kuICAzCi0gKiB2YWx1ZXMgYXJlIGdlbmVyYXRlZDogKDEpIGdl
dENwdUN1cnJlbnQoKSByZXR1cm5zIHRoZSB1c2Ugc2luY2UgdGhlIGxhc3QKLSAqIHNhbXBsZUNw
dVV0aWxpemF0aW9uKCksICgyKSBnZXRDcHVBdmczKCkgcmV0dXJucyB0aGUgdXNlIHNpbmNlIDMg
cHJpb3IKLSAqIGNhbGxzLCBhbmQgKDMpIGdldENwdUF2Z0FsbCgpIHJldHVybnMgdGhlIHVzZSBv
dmVyIGFsbCBTQU1QTEVfU0FWRV9OVU1CRVIKLSAqIGNhbGxzLgotICoKLSAqIDxwPkNQVXMgaW4g
QW5kcm9pZCBhcmUgb2Z0ZW4gIm9mZmxpbmUiLCBhbmQgd2hpbGUgdGhpcyBvZiBjb3Vyc2UgbWVh
bnMgMCBIegotICogYXMgY3VycmVudCBmcmVxdWVuY3ksIGluIHRoaXMgc3RhdGUgd2UgY2Fubm90
IGV2ZW4gZ2V0IHRoZWlyIG5vbWluYWwKLSAqIGZyZXF1ZW5jeS4gIFdlIHRoZXJlZm9yZSB0cmVh
ZCBjYXJlZnVsbHksIGFuZCBhbGxvdyBhbnkgQ1BVIHRvIGJlIG1pc3NpbmcuCi0gKiBNaXNzaW5n
IENQVXMgYXJlIGFzc3VtZWQgdG8gaGF2ZSB0aGUgc2FtZSBub21pbmFsIGZyZXF1ZW5jeSBhcyBh
bnkgY2xvc2UKLSAqIGxvd2VyLW51bWJlcmVkIENQVSwgYnV0IGFzIHNvb24gYXMgaXQgaXMgb25s
aW5lLCB3ZSdsbCBnZXQgdGhlaXIgcHJvcGVyCi0gKiBmcmVxdWVuY3kgYW5kIHJlbWVtYmVyIGl0
LiAgKFNpbmNlIENQVSAwIGluIHByYWN0aWNlIGFsd2F5cyBzZWVtIHRvIGJlCi0gKiBvbmxpbmUs
IHRoaXMgdW5pZGlyZWN0aW9uYWwgZnJlcXVlbmN5IGluaGVyaXRhbmNlIHNob3VsZCBiZSBubyBw
cm9ibGVtIGluCi0gKiBwcmFjdGljZS4pCi0gKgotICogPHA+Q2F2ZWF0czoKLSAqICAgbyBObyBw
cm92aXNpb24gbWFkZSBmb3IgemFueSAidHVyYm8iIG1vZGUsIGNvbW1vbiBpbiB0aGUgeDg2IHdv
cmxkLgotICogICBvIE5vIHByb3Zpc2lvbiBtYWRlIGZvciBBUk0gYmlnLkxJVFRMRTsgaWYgQ1BV
IG4gY2FuIHN3aXRjaCBiZWhpbmQgb3VyCi0gKiAgICAgYmFjaywgd2UgbWlnaHQgZ2V0IGluY29y
cmVjdCBlc3RpbWF0ZXMuCi0gKiAgIG8gVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUuICBUbyBjYWxs
IGFzeW5jaHJvbm91c2x5LCBjcmVhdGUgZGlmZmVyZW50Ci0gKiAgICAgQ3B1TW9uaXRvciBvYmpl
Y3RzLgotICoKLSAqIDxwPklmIHdlIGNhbiBnYXRoZXIgZW5vdWdoIGluZm8gdG8gZ2VuZXJhdGUg
YSBzZW5zaWJsZSByZXN1bHQsCi0gKiBzYW1wbGVDcHVVdGlsaXphdGlvbiByZXR1cm5zIHRydWUu
ICBJdCBpcyBkZXNpZ25lZCB0byBuZXZlciB0aHJvdyBhbgotICogZXhjZXB0aW9uLgotICoKLSAq
IDxwPnNhbXBsZUNwdVV0aWxpemF0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIHRvbyBvZnRlbiBp
biBpdHMgcHJlc2VudCBmb3JtLAotICogc2luY2UgdGhlbiBkZWx0YXMgd291bGQgYmUgc21hbGwg
YW5kIHRoZSBwZXJjZW50IHZhbHVlcyB3b3VsZCBmbHVjdHVhdGUgYW5kCi0gKiBiZSB1bnJlYWRh
YmxlLiBJZiBpdCBpcyBkZXNpcmFibGUgdG8gY2FsbCBpdCBtb3JlIG9mdGVuIHRoYW4gc2F5IG9u
Y2UgcGVyCi0gKiBzZWNvbmQsIG9uZSB3b3VsZCBuZWVkIHRvIGluY3JlYXNlIFNBTVBMRV9TQVZF
X05VTUJFUiBhbmQgcHJvYmFibHkgdXNlCi0gKiBRdWV1ZTxJbnRlZ2VyPiB0byBhdm9pZCBjb3B5
aW5nIG92ZXJoZWFkLgotICoKLSAqIDxwPktub3duIHByb2JsZW1zOgotICogICAxLiBOZXh1cyA3
IGRldmljZXMgcnVubmluZyBLaXRrYXQgaGF2ZSBhIGtlcm5lbCB3aGljaCBvZnRlbiBvdXRwdXQg
YW4KLSAqICAgICAgaW5jb3JyZWN0ICdpZGxlJyBmaWVsZCBpbiAvcHJvYy9zdGF0LiAgVGhlIHZh
bHVlIGlzIGNsb3NlIHRvIHR3aWNlIHRoZQotICogICAgICBjb3JyZWN0IHZhbHVlLCBhbmQgdGhl
biByZXR1cm5zIHRvIGJhY2sgdG8gY29ycmVjdCByZWFkaW5nLiAgQm90aCB3aGVuCi0gKiAgICAg
IGp1bXBpbmcgdXAgYW5kIGJhY2sgZG93biB3ZSBtaWdodCBjcmVhdGUgZmF1bHR5IENQVSBsb2Fk
IHJlYWRpbmdzLgotICovCi0KLWNsYXNzIENwdU1vbml0b3IgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIkNwdU1vbml0b3IiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgTU9WSU5HX0FWRVJBR0VfU0FNUExFUyA9IDU7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IENQVV9TVEFUX1NBTVBMRV9QRVJJT0RfTVMgPSAyMDAwOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgQ1BVX1NUQVRfTE9HX1BFUklPRF9NUyA9IDYwMDA7Ci0KLSAgcHJpdmF0ZSBmaW5h
bCBDb250ZXh0IGFwcENvbnRleHQ7Ci0gIC8vIFVzZXIgQ1BVIHVzYWdlIGF0IGN1cnJlbnQgZnJl
cXVlbmN5LgotICBwcml2YXRlIGZpbmFsIE1vdmluZ0F2ZXJhZ2UgdXNlckNwdVVzYWdlOwotICAv
LyBTeXN0ZW0gQ1BVIHVzYWdlIGF0IGN1cnJlbnQgZnJlcXVlbmN5LgotICBwcml2YXRlIGZpbmFs
IE1vdmluZ0F2ZXJhZ2Ugc3lzdGVtQ3B1VXNhZ2U7Ci0gIC8vIFRvdGFsIENQVSB1c2FnZSByZWxh
dGl2ZSB0byBtYXhpbXVtIGZyZXF1ZW5jeS4KLSAgcHJpdmF0ZSBmaW5hbCBNb3ZpbmdBdmVyYWdl
IHRvdGFsQ3B1VXNhZ2U7Ci0gIC8vIENQVSBmcmVxdWVuY3kgaW4gcGVyY2VudGFnZSBmcm9tIG1h
eGltdW0uCi0gIHByaXZhdGUgZmluYWwgTW92aW5nQXZlcmFnZSBmcmVxdWVuY3lTY2FsZTsKLQot
ICBwcml2YXRlIFNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLSAgcHJpdmF0ZSBs
b25nIGxhc3RTdGF0TG9nVGltZU1zOwotICBwcml2YXRlIGxvbmdbXSBjcHVGcmVxTWF4OwotICBw
cml2YXRlIGludCBjcHVzUHJlc2VudDsKLSAgcHJpdmF0ZSBpbnQgYWN0dWFsQ3B1c1ByZXNlbnQ7
Ci0gIHByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZDsKLSAgcHJpdmF0ZSBib29sZWFuIGNwdU92
ZXJ1c2U7Ci0gIHByaXZhdGUgU3RyaW5nW10gbWF4UGF0aDsKLSAgcHJpdmF0ZSBTdHJpbmdbXSBj
dXJQYXRoOwotICBwcml2YXRlIGRvdWJsZVtdIGN1ckZyZXFTY2FsZXM7Ci0gIHByaXZhdGUgUHJv
Y1N0YXQgbGFzdFByb2NTdGF0OwotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFByb2NTdGF0IHsK
LSAgICBmaW5hbCBsb25nIHVzZXJUaW1lOwotICAgIGZpbmFsIGxvbmcgc3lzdGVtVGltZTsKLSAg
ICBmaW5hbCBsb25nIGlkbGVUaW1lOwotCi0gICAgUHJvY1N0YXQobG9uZyB1c2VyVGltZSwgbG9u
ZyBzeXN0ZW1UaW1lLCBsb25nIGlkbGVUaW1lKSB7Ci0gICAgICB0aGlzLnVzZXJUaW1lID0gdXNl
clRpbWU7Ci0gICAgICB0aGlzLnN5c3RlbVRpbWUgPSBzeXN0ZW1UaW1lOwotICAgICAgdGhpcy5p
ZGxlVGltZSA9IGlkbGVUaW1lOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgc3RhdGljIGNsYXNz
IE1vdmluZ0F2ZXJhZ2UgewotICAgIHByaXZhdGUgZmluYWwgaW50IHNpemU7Ci0gICAgcHJpdmF0
ZSBkb3VibGUgc3VtOwotICAgIHByaXZhdGUgZG91YmxlIGN1cnJlbnRWYWx1ZTsKLSAgICBwcml2
YXRlIGRvdWJsZSBjaXJjQnVmZmVyW107Ci0gICAgcHJpdmF0ZSBpbnQgY2lyY0J1ZmZlckluZGV4
OwotCi0gICAgcHVibGljIE1vdmluZ0F2ZXJhZ2UoaW50IHNpemUpIHsKLSAgICAgIGlmIChzaXpl
IDw9IDApIHsKLSAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJTaXplIHZhbHVlIGlu
IE1vdmluZ0F2ZXJhZ2UgY3RvciBzaG91bGQgYmUgcG9zaXRpdmUuIik7Ci0gICAgICB9Ci0gICAg
ICB0aGlzLnNpemUgPSBzaXplOwotICAgICAgY2lyY0J1ZmZlciA9IG5ldyBkb3VibGVbc2l6ZV07
Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcmVzZXQoKSB7Ci0gICAgICBBcnJheXMuZmlsbChj
aXJjQnVmZmVyLCAwKTsKLSAgICAgIGNpcmNCdWZmZXJJbmRleCA9IDA7Ci0gICAgICBzdW0gPSAw
OwotICAgICAgY3VycmVudFZhbHVlID0gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBhZGRW
YWx1ZShkb3VibGUgdmFsdWUpIHsKLSAgICAgIHN1bSAtPSBjaXJjQnVmZmVyW2NpcmNCdWZmZXJJ
bmRleF07Ci0gICAgICBjaXJjQnVmZmVyW2NpcmNCdWZmZXJJbmRleCsrXSA9IHZhbHVlOwotICAg
ICAgY3VycmVudFZhbHVlID0gdmFsdWU7Ci0gICAgICBzdW0gKz0gdmFsdWU7Ci0gICAgICBpZiAo
Y2lyY0J1ZmZlckluZGV4ID49IHNpemUpIHsKLSAgICAgICAgY2lyY0J1ZmZlckluZGV4ID0gMDsK
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgZG91YmxlIGdldEN1cnJlbnQoKSB7Ci0gICAg
ICByZXR1cm4gY3VycmVudFZhbHVlOwotICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUgZ2V0QXZl
cmFnZSgpIHsKLSAgICAgIHJldHVybiBzdW0gLyAoZG91YmxlKSBzaXplOwotICAgIH0KLSAgfQot
Ci0gIHB1YmxpYyBDcHVNb25pdG9yKENvbnRleHQgY29udGV4dCkgewotICAgIExvZy5kKFRBRywg
IkNwdU1vbml0b3IgY3Rvci4iKTsKLSAgICBhcHBDb250ZXh0ID0gY29udGV4dC5nZXRBcHBsaWNh
dGlvbkNvbnRleHQoKTsKLSAgICB1c2VyQ3B1VXNhZ2UgPSBuZXcgTW92aW5nQXZlcmFnZShNT1ZJ
TkdfQVZFUkFHRV9TQU1QTEVTKTsKLSAgICBzeXN0ZW1DcHVVc2FnZSA9IG5ldyBNb3ZpbmdBdmVy
YWdlKE1PVklOR19BVkVSQUdFX1NBTVBMRVMpOwotICAgIHRvdGFsQ3B1VXNhZ2UgPSBuZXcgTW92
aW5nQXZlcmFnZShNT1ZJTkdfQVZFUkFHRV9TQU1QTEVTKTsKLSAgICBmcmVxdWVuY3lTY2FsZSA9
IG5ldyBNb3ZpbmdBdmVyYWdlKE1PVklOR19BVkVSQUdFX1NBTVBMRVMpOwotICAgIGxhc3RTdGF0
TG9nVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0KLSAgICBzY2hlZHVs
ZUNwdVV0aWxpemF0aW9uVGFzaygpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcGF1c2UoKSB7Ci0g
ICAgaWYgKGV4ZWN1dG9yICE9IG51bGwpIHsKLSAgICAgIExvZy5kKFRBRywgInBhdXNlIik7Ci0g
ICAgICBleGVjdXRvci5zaHV0ZG93bk5vdygpOwotICAgICAgZXhlY3V0b3IgPSBudWxsOwotICAg
IH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHJlc3VtZSgpIHsKLSAgICBMb2cuZChUQUcsICJyZXN1
bWUiKTsKLSAgICByZXNldFN0YXQoKTsKLSAgICBzY2hlZHVsZUNwdVV0aWxpemF0aW9uVGFzaygp
OwotICB9Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgewotICAgIGlmIChl
eGVjdXRvciAhPSBudWxsKSB7Ci0gICAgICBMb2cuZChUQUcsICJyZXNldCIpOwotICAgICAgcmVz
ZXRTdGF0KCk7Ci0gICAgICBjcHVPdmVydXNlID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgcHVi
bGljIHN5bmNocm9uaXplZCBpbnQgZ2V0Q3B1VXNhZ2VDdXJyZW50KCkgewotICAgIHJldHVybiBk
b3VibGVUb1BlcmNlbnQodXNlckNwdVVzYWdlLmdldEN1cnJlbnQoKSArIHN5c3RlbUNwdVVzYWdl
LmdldEN1cnJlbnQoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIGludCBnZXRDcHVV
c2FnZUF2ZXJhZ2UoKSB7Ci0gICAgcmV0dXJuIGRvdWJsZVRvUGVyY2VudCh1c2VyQ3B1VXNhZ2Uu
Z2V0QXZlcmFnZSgpICsgc3lzdGVtQ3B1VXNhZ2UuZ2V0QXZlcmFnZSgpKTsKLSAgfQotCi0gIHB1
YmxpYyBzeW5jaHJvbml6ZWQgaW50IGdldEZyZXF1ZW5jeVNjYWxlQXZlcmFnZSgpIHsKLSAgICBy
ZXR1cm4gZG91YmxlVG9QZXJjZW50KGZyZXF1ZW5jeVNjYWxlLmdldEF2ZXJhZ2UoKSk7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgc2NoZWR1bGVDcHVVdGlsaXphdGlvblRhc2soKSB7Ci0gICAgaWYg
KGV4ZWN1dG9yICE9IG51bGwpIHsKLSAgICAgIGV4ZWN1dG9yLnNodXRkb3duTm93KCk7Ci0gICAg
ICBleGVjdXRvciA9IG51bGw7Ci0gICAgfQotCi0gICAgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3
U2luZ2xlVGhyZWFkU2NoZWR1bGVkRXhlY3V0b3IoKTsKLSAgICBleGVjdXRvci5zY2hlZHVsZUF0
Rml4ZWRSYXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBjcHVVdGlsaXphdGlvblRhc2soKTsKLSAgICAgIH0KLSAg
ICB9LCAwLCBDUFVfU1RBVF9TQU1QTEVfUEVSSU9EX01TLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNwdVV0aWxpemF0aW9uVGFzaygpIHsKLSAgICBib29s
ZWFuIGNwdU1vbml0b3JBdmFpbGFibGUgPSBzYW1wbGVDcHVVdGlsaXphdGlvbigpOwotICAgIGlm
IChjcHVNb25pdG9yQXZhaWxhYmxlCi0gICAgICAgICYmIFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFs
dGltZSgpIC0gbGFzdFN0YXRMb2dUaW1lTXMgPj0gQ1BVX1NUQVRfTE9HX1BFUklPRF9NUykgewot
ICAgICAgbGFzdFN0YXRMb2dUaW1lTXMgPSBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKTsK
LSAgICAgIFN0cmluZyBzdGF0U3RyaW5nID0gZ2V0U3RhdFN0cmluZygpOwotICAgICAgTG9nLmQo
VEFHLCBzdGF0U3RyaW5nKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgaW5pdCgpIHsK
LSAgICB0cnkgewotICAgICAgRmlsZVJlYWRlciBmaW4gPSBuZXcgRmlsZVJlYWRlcigiL3N5cy9k
ZXZpY2VzL3N5c3RlbS9jcHUvcHJlc2VudCIpOwotICAgICAgdHJ5IHsKLSAgICAgICAgQnVmZmVy
ZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKGZpbik7Ci0gICAgICAgIFNjYW5u
ZXIgc2Nhbm5lciA9IG5ldyBTY2FubmVyKHJlYWRlcikudXNlRGVsaW1pdGVyKCJbLVxuXSIpOwot
ICAgICAgICBzY2FubmVyLm5leHRJbnQoKTsgLy8gU2tpcCBsZWFkaW5nIG51bWJlciAwLgotICAg
ICAgICBjcHVzUHJlc2VudCA9IDEgKyBzY2FubmVyLm5leHRJbnQoKTsKLSAgICAgICAgc2Nhbm5l
ci5jbG9zZSgpOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUo
VEFHLCAiQ2Fubm90IGRvIENQVSBzdGF0cyBkdWUgdG8gL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUv
cHJlc2VudCBwYXJzaW5nIHByb2JsZW0iKTsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIGZp
bi5jbG9zZSgpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICBMb2cuZShUQUcsICJDYW5ub3QgZG8gQ1BVIHN0YXRzIHNpbmNlIC9zeXMvZGV2
aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQgaXMgbWlzc2luZyIpOwotICAgIH0gY2F0Y2ggKElPRXhj
ZXB0aW9uIGUpIHsKLSAgICAgIExvZy5lKFRBRywgIkVycm9yIGNsb3NpbmcgZmlsZSIpOwotICAg
IH0KLQotICAgIGNwdUZyZXFNYXggPSBuZXcgbG9uZ1tjcHVzUHJlc2VudF07Ci0gICAgbWF4UGF0
aCA9IG5ldyBTdHJpbmdbY3B1c1ByZXNlbnRdOwotICAgIGN1clBhdGggPSBuZXcgU3RyaW5nW2Nw
dXNQcmVzZW50XTsKLSAgICBjdXJGcmVxU2NhbGVzID0gbmV3IGRvdWJsZVtjcHVzUHJlc2VudF07
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcHVzUHJlc2VudDsgaSsrKSB7Ci0gICAgICBjcHVG
cmVxTWF4W2ldID0gMDsgLy8gRnJlcXVlbmN5ICJub3QgeWV0IGRldGVybWluZWQiLgotICAgICAg
Y3VyRnJlcVNjYWxlc1tpXSA9IDA7Ci0gICAgICBtYXhQYXRoW2ldID0gIi9zeXMvZGV2aWNlcy9z
eXN0ZW0vY3B1L2NwdSIgKyBpICsgIi9jcHVmcmVxL2NwdWluZm9fbWF4X2ZyZXEiOwotICAgICAg
Y3VyUGF0aFtpXSA9ICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUiICsgaSArICIvY3B1ZnJl
cS9zY2FsaW5nX2N1cl9mcmVxIjsKLSAgICB9Ci0KLSAgICBsYXN0UHJvY1N0YXQgPSBuZXcgUHJv
Y1N0YXQoMCwgMCwgMCk7Ci0gICAgcmVzZXRTdGF0KCk7Ci0KLSAgICBpbml0aWFsaXplZCA9IHRy
dWU7Ci0gIH0KLQotICBwcml2YXRlIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0U3RhdCgpIHsKLSAg
ICB1c2VyQ3B1VXNhZ2UucmVzZXQoKTsKLSAgICBzeXN0ZW1DcHVVc2FnZS5yZXNldCgpOwotICAg
IHRvdGFsQ3B1VXNhZ2UucmVzZXQoKTsKLSAgICBmcmVxdWVuY3lTY2FsZS5yZXNldCgpOwotICAg
IGxhc3RTdGF0TG9nVGltZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gIH0K
LQotICBwcml2YXRlIGludCBnZXRCYXR0ZXJ5TGV2ZWwoKSB7Ci0gICAgLy8gVXNlIHN0aWNreSBi
cm9hZGNhc3Qgd2l0aCBudWxsIHJlY2VpdmVyIHRvIHJlYWQgYmF0dGVyeSBsZXZlbCBvbmNlIG9u
bHkuCi0gICAgSW50ZW50IGludGVudCA9IGFwcENvbnRleHQucmVnaXN0ZXJSZWNlaXZlcigKLSAg
ICAgICAgbnVsbCAvKiByZWNlaXZlciAqLywgbmV3IEludGVudEZpbHRlcihJbnRlbnQuQUNUSU9O
X0JBVFRFUllfQ0hBTkdFRCkpOwotCi0gICAgaW50IGJhdHRlcnlMZXZlbCA9IDA7Ci0gICAgaW50
IGJhdHRlcnlTY2FsZSA9IGludGVudC5nZXRJbnRFeHRyYShCYXR0ZXJ5TWFuYWdlci5FWFRSQV9T
Q0FMRSwgMTAwKTsKLSAgICBpZiAoYmF0dGVyeVNjYWxlID4gMCkgewotICAgICAgYmF0dGVyeUxl
dmVsID0KLSAgICAgICAgICAoaW50KSAoMTAwZiAqIGludGVudC5nZXRJbnRFeHRyYShCYXR0ZXJ5
TWFuYWdlci5FWFRSQV9MRVZFTCwgMCkgLyBiYXR0ZXJ5U2NhbGUpOwotICAgIH0KLSAgICByZXR1
cm4gYmF0dGVyeUxldmVsOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlLW1lYXN1cmUgQ1BVIHVzZS4g
IENhbGwgdGhpcyBtZXRob2QgYXQgYW4gaW50ZXJ2YWwgb2YgYXJvdW5kIDEvcy4KLSAgICogVGhp
cyBtZXRob2QgcmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuICBUaGUgZmllbGRzCi0gICAqIGNwdUN1
cnJlbnQsIGNwdUF2ZzMsIGFuZCBjcHVBdmdBbGwgYXJlIHVwZGF0ZWQgb24gc3VjY2VzcywgYW5k
IHJlcHJlc2VudHM6Ci0gICAqIGNwdUN1cnJlbnQ6IFRoZSBDUFUgdXNlIHNpbmNlIHRoZSBsYXN0
IHNhbXBsZUNwdVV0aWxpemF0aW9uIGNhbGwuCi0gICAqIGNwdUF2ZzM6IFRoZSBhdmVyYWdlIENQ
VSBvdmVyIHRoZSBsYXN0IDMgY2FsbHMuCi0gICAqIGNwdUF2Z0FsbDogVGhlIGF2ZXJhZ2UgQ1BV
IG92ZXIgdGhlIGxhc3QgU0FNUExFX1NBVkVfTlVNQkVSIGNhbGxzLgotICAgKi8KLSAgcHJpdmF0
ZSBzeW5jaHJvbml6ZWQgYm9vbGVhbiBzYW1wbGVDcHVVdGlsaXphdGlvbigpIHsKLSAgICBsb25n
IGxhc3RTZWVuTWF4RnJlcSA9IDA7Ci0gICAgbG9uZyBjcHVGcmVxQ3VyU3VtID0gMDsKLSAgICBs
b25nIGNwdUZyZXFNYXhTdW0gPSAwOwotCi0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAg
aW5pdCgpOwotICAgIH0KLSAgICBpZiAoY3B1c1ByZXNlbnQgPT0gMCkgewotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGFjdHVhbENwdXNQcmVzZW50ID0gMDsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNwdXNQcmVzZW50OyBpKyspIHsKLSAgICAgIC8qCi0gICAgICAgKiBGb3Ig
ZWFjaCBDUFUsIGF0dGVtcHQgdG8gZmlyc3QgcmVhZCBpdHMgbWF4IGZyZXF1ZW5jeSwgdGhlbiBp
dHMKLSAgICAgICAqIGN1cnJlbnQgZnJlcXVlbmN5LiAgT25jZSBhcyB0aGUgbWF4IGZyZXF1ZW5j
eSBmb3IgYSBDUFUgaXMgZm91bmQsCi0gICAgICAgKiBzYXZlIGl0IGluIGNwdUZyZXFNYXhbXS4K
LSAgICAgICAqLwotCi0gICAgICBjdXJGcmVxU2NhbGVzW2ldID0gMDsKLSAgICAgIGlmIChjcHVG
cmVxTWF4W2ldID09IDApIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBuZXZlciBmb3VuZCB0aGlzIENQ
VSdzIG1heCBmcmVxdWVuY3kuICBBdHRlbXB0IHRvIHJlYWQgaXQuCi0gICAgICAgIGxvbmcgY3B1
ZnJlcU1heCA9IHJlYWRGcmVxRnJvbUZpbGUobWF4UGF0aFtpXSk7Ci0gICAgICAgIGlmIChjcHVm
cmVxTWF4ID4gMCkgewotICAgICAgICAgIExvZy5kKFRBRywgIkNvcmUgIiArIGkgKyAiLiBNYXgg
ZnJlcXVlbmN5OiAiICsgY3B1ZnJlcU1heCk7Ci0gICAgICAgICAgbGFzdFNlZW5NYXhGcmVxID0g
Y3B1ZnJlcU1heDsKLSAgICAgICAgICBjcHVGcmVxTWF4W2ldID0gY3B1ZnJlcU1heDsKLSAgICAg
ICAgICBtYXhQYXRoW2ldID0gbnVsbDsgLy8gS2lsbCBwYXRoIHRvIGZyZWUgaXRzIG1lbW9yeS4K
LSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgbGFzdFNlZW5NYXhGcmVxID0gY3B1
RnJlcU1heFtpXTsgLy8gQSB2YWxpZCwgcHJldmlvdXNseSByZWFkIHZhbHVlLgotICAgICAgfQot
Ci0gICAgICBsb25nIGNwdUZyZXFDdXIgPSByZWFkRnJlcUZyb21GaWxlKGN1clBhdGhbaV0pOwot
ICAgICAgaWYgKGNwdUZyZXFDdXIgPT0gMCAmJiBsYXN0U2Vlbk1heEZyZXEgPT0gMCkgewotICAg
ICAgICAvLyBObyBjdXJyZW50IGZyZXF1ZW5jeSBpbmZvcm1hdGlvbiBmb3IgdGhpcyBDUFUgY29y
ZSAtIGlnbm9yZSBpdC4KLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBpZiAoY3B1
RnJlcUN1ciA+IDApIHsKLSAgICAgICAgYWN0dWFsQ3B1c1ByZXNlbnQrKzsKLSAgICAgIH0KLSAg
ICAgIGNwdUZyZXFDdXJTdW0gKz0gY3B1RnJlcUN1cjsKLQotICAgICAgLyogSGVyZSwgbGFzdFNl
ZW5NYXhGcmVxIG1pZ2h0IGNvbWUgZnJvbQotICAgICAgICogMS4gY3B1RnJlcVtpXSwgb3IKLSAg
ICAgICAqIDIuIGEgcHJldmlvdXMgaXRlcmF0aW9uLCBvcgotICAgICAgICogMy4gYSBuZXdseSBy
ZWFkIHZhbHVlLCBvcgotICAgICAgICogNC4gaHlwb3RoZXRpY2FsbHkgZnJvbSB0aGUgcHJlLWxv
b3AgZHVtbXkuCi0gICAgICAgKi8KLSAgICAgIGNwdUZyZXFNYXhTdW0gKz0gbGFzdFNlZW5NYXhG
cmVxOwotICAgICAgaWYgKGxhc3RTZWVuTWF4RnJlcSA+IDApIHsKLSAgICAgICAgY3VyRnJlcVNj
YWxlc1tpXSA9IChkb3VibGUpIGNwdUZyZXFDdXIgLyBsYXN0U2Vlbk1heEZyZXE7Ci0gICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGNwdUZyZXFDdXJTdW0gPT0gMCB8fCBjcHVGcmVxTWF4U3VtID09
IDApIHsKLSAgICAgIExvZy5lKFRBRywgIkNvdWxkIG5vdCByZWFkIG1heCBvciBjdXJyZW50IGZy
ZXF1ZW5jeSBmb3IgYW55IENQVSIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IC8qCi0gICAgICogU2luY2UgdGhlIGN5Y2xlIGNvdW50cyBhcmUgZm9yIHRoZSBwZXJpb2QgYmV0
d2VlbiB0aGUgbGFzdCBpbnZvY2F0aW9uCi0gICAgICogYW5kIHRoaXMgcHJlc2VudCBvbmUsIHdl
IGF2ZXJhZ2UgdGhlIHBlcmNlbnR1YWwgQ1BVIGZyZXF1ZW5jaWVzIGJldHdlZW4KLSAgICAgKiBu
b3cgYW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1lYXN1cmVtZW50IHBlcmlvZC4gIFRoaXMgaXMg
c2lnbmlmaWNhbnRseQotICAgICAqIGluY29ycmVjdCBvbmx5IGlmIHRoZSBmcmVxdWVuY2llcyBo
YXZlIHBlZWtlZCBvciBkcm9wcGVkIGluIGJldHdlZW4gdGhlCi0gICAgICogaW52b2NhdGlvbnMu
Ci0gICAgICovCi0gICAgZG91YmxlIGN1cnJlbnRGcmVxdWVuY3lTY2FsZSA9IGNwdUZyZXFDdXJT
dW0gLyAoZG91YmxlKSBjcHVGcmVxTWF4U3VtOwotICAgIGlmIChmcmVxdWVuY3lTY2FsZS5nZXRD
dXJyZW50KCkgPiAwKSB7Ci0gICAgICBjdXJyZW50RnJlcXVlbmN5U2NhbGUgPSAoZnJlcXVlbmN5
U2NhbGUuZ2V0Q3VycmVudCgpICsgY3VycmVudEZyZXF1ZW5jeVNjYWxlKSAqIDAuNTsKLSAgICB9
Ci0KLSAgICBQcm9jU3RhdCBwcm9jU3RhdCA9IHJlYWRQcm9jU3RhdCgpOwotICAgIGlmIChwcm9j
U3RhdCA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgbG9uZyBk
aWZmVXNlclRpbWUgPSBwcm9jU3RhdC51c2VyVGltZSAtIGxhc3RQcm9jU3RhdC51c2VyVGltZTsK
LSAgICBsb25nIGRpZmZTeXN0ZW1UaW1lID0gcHJvY1N0YXQuc3lzdGVtVGltZSAtIGxhc3RQcm9j
U3RhdC5zeXN0ZW1UaW1lOwotICAgIGxvbmcgZGlmZklkbGVUaW1lID0gcHJvY1N0YXQuaWRsZVRp
bWUgLSBsYXN0UHJvY1N0YXQuaWRsZVRpbWU7Ci0gICAgbG9uZyBhbGxUaW1lID0gZGlmZlVzZXJU
aW1lICsgZGlmZlN5c3RlbVRpbWUgKyBkaWZmSWRsZVRpbWU7Ci0KLSAgICBpZiAoY3VycmVudEZy
ZXF1ZW5jeVNjYWxlID09IDAgfHwgYWxsVGltZSA9PSAwKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgLy8gVXBkYXRlIHN0YXRpc3RpY3MuCi0gICAgZnJlcXVlbmN5U2NhbGUu
YWRkVmFsdWUoY3VycmVudEZyZXF1ZW5jeVNjYWxlKTsKLQotICAgIGRvdWJsZSBjdXJyZW50VXNl
ckNwdVVzYWdlID0gZGlmZlVzZXJUaW1lIC8gKGRvdWJsZSkgYWxsVGltZTsKLSAgICB1c2VyQ3B1
VXNhZ2UuYWRkVmFsdWUoY3VycmVudFVzZXJDcHVVc2FnZSk7Ci0KLSAgICBkb3VibGUgY3VycmVu
dFN5c3RlbUNwdVVzYWdlID0gZGlmZlN5c3RlbVRpbWUgLyAoZG91YmxlKSBhbGxUaW1lOwotICAg
IHN5c3RlbUNwdVVzYWdlLmFkZFZhbHVlKGN1cnJlbnRTeXN0ZW1DcHVVc2FnZSk7Ci0KLSAgICBk
b3VibGUgY3VycmVudFRvdGFsQ3B1VXNhZ2UgPQotICAgICAgICAoY3VycmVudFVzZXJDcHVVc2Fn
ZSArIGN1cnJlbnRTeXN0ZW1DcHVVc2FnZSkgKiBjdXJyZW50RnJlcXVlbmN5U2NhbGU7Ci0gICAg
dG90YWxDcHVVc2FnZS5hZGRWYWx1ZShjdXJyZW50VG90YWxDcHVVc2FnZSk7Ci0KLSAgICAvLyBT
YXZlIG5ldyBtZWFzdXJlbWVudHMgZm9yIG5leHQgcm91bmQncyBkZWx0YXMuCi0gICAgbGFzdFBy
b2NTdGF0ID0gcHJvY1N0YXQ7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUg
aW50IGRvdWJsZVRvUGVyY2VudChkb3VibGUgZCkgewotICAgIHJldHVybiAoaW50KSAoZCAqIDEw
MCArIDAuNSk7Ci0gIH0KLQotICBwcml2YXRlIHN5bmNocm9uaXplZCBTdHJpbmcgZ2V0U3RhdFN0
cmluZygpIHsKLSAgICBTdHJpbmdCdWlsZGVyIHN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwot
ICAgIHN0YXQuYXBwZW5kKCJDUFUgVXNlcjogIikKLSAgICAgICAgLmFwcGVuZChkb3VibGVUb1Bl
cmNlbnQodXNlckNwdVVzYWdlLmdldEN1cnJlbnQoKSkpCi0gICAgICAgIC5hcHBlbmQoIi8iKQot
ICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudCh1c2VyQ3B1VXNhZ2UuZ2V0QXZlcmFnZSgp
KSkKLSAgICAgICAgLmFwcGVuZCgiLiBTeXN0ZW06ICIpCi0gICAgICAgIC5hcHBlbmQoZG91Ymxl
VG9QZXJjZW50KHN5c3RlbUNwdVVzYWdlLmdldEN1cnJlbnQoKSkpCi0gICAgICAgIC5hcHBlbmQo
Ii8iKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudChzeXN0ZW1DcHVVc2FnZS5nZXRB
dmVyYWdlKCkpKQotICAgICAgICAuYXBwZW5kKCIuIEZyZXE6ICIpCi0gICAgICAgIC5hcHBlbmQo
ZG91YmxlVG9QZXJjZW50KGZyZXF1ZW5jeVNjYWxlLmdldEN1cnJlbnQoKSkpCi0gICAgICAgIC5h
cHBlbmQoIi8iKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudChmcmVxdWVuY3lTY2Fs
ZS5nZXRBdmVyYWdlKCkpKQotICAgICAgICAuYXBwZW5kKCIuIFRvdGFsIHVzYWdlOiAiKQotICAg
ICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudCh0b3RhbENwdVVzYWdlLmdldEN1cnJlbnQoKSkp
Ci0gICAgICAgIC5hcHBlbmQoIi8iKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudCh0
b3RhbENwdVVzYWdlLmdldEF2ZXJhZ2UoKSkpCi0gICAgICAgIC5hcHBlbmQoIi4gQ29yZXM6ICIp
Ci0gICAgICAgIC5hcHBlbmQoYWN0dWFsQ3B1c1ByZXNlbnQpOwotICAgIHN0YXQuYXBwZW5kKCIo
ICIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3B1c1ByZXNlbnQ7IGkrKykgewotICAgICAg
c3RhdC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KGN1ckZyZXFTY2FsZXNbaV0pKS5hcHBlbmQoIiAi
KTsKLSAgICB9Ci0gICAgc3RhdC5hcHBlbmQoIikuIEJhdHRlcnk6ICIpLmFwcGVuZChnZXRCYXR0
ZXJ5TGV2ZWwoKSk7Ci0gICAgaWYgKGNwdU92ZXJ1c2UpIHsKLSAgICAgIHN0YXQuYXBwZW5kKCIu
IE92ZXJ1c2UuIik7Ci0gICAgfQotICAgIHJldHVybiBzdGF0LnRvU3RyaW5nKCk7Ci0gIH0KLQot
ICAvKioKLSAgICogUmVhZCBhIHNpbmdsZSBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIG5hbWVkIGZp
bGUuICBSZXR1cm4gdGhlIHJlYWQgdmFsdWUKLSAgICogb3IgaWYgYW4gZXJyb3Igb2NjdXJzIHJl
dHVybiAwLgotICAgKi8KLSAgcHJpdmF0ZSBsb25nIHJlYWRGcmVxRnJvbUZpbGUoU3RyaW5nIGZp
bGVOYW1lKSB7Ci0gICAgbG9uZyBudW1iZXIgPSAwOwotICAgIHRyeSB7Ci0gICAgICBCdWZmZXJl
ZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlsZU5h
bWUpKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRMaW5l
KCk7Ci0gICAgICAgIG51bWJlciA9IHBhcnNlTG9uZyhsaW5lKTsKLSAgICAgIH0gZmluYWxseSB7
Ci0gICAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RG
b3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAvLyBDUFUgY29yZSBpcyBvZmYsIHNvIGZpbGUgd2l0
aCBpdHMgc2NhbGluZyBmcmVxdWVuY3kgLi4uL2NwdWZyZXEvc2NhbGluZ19jdXJfZnJlcQotICAg
ICAgLy8gaXMgbm90IHByZXNlbnQuIFRoaXMgaXMgbm90IGFuIGVycm9yLgotICAgIH0gY2F0Y2gg
KElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIC8vIENQVSBjb3JlIGlzIG9mZiwgc28gZmlsZSB3aXRo
IGl0cyBzY2FsaW5nIGZyZXF1ZW5jeSAuLi4vY3B1ZnJlcS9zY2FsaW5nX2N1cl9mcmVxCi0gICAg
ICAvLyBpcyBlbXB0eS4gVGhpcyBpcyBub3QgYW4gZXJyb3IuCi0gICAgfQotICAgIHJldHVybiBu
dW1iZXI7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBsb25nIHBhcnNlTG9uZyhTdHJpbmcgdmFs
dWUpIHsKLSAgICBsb25nIG51bWJlciA9IDA7Ci0gICAgdHJ5IHsKLSAgICAgIG51bWJlciA9IExv
bmcucGFyc2VMb25nKHZhbHVlKTsKLSAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24g
ZSkgewotICAgICAgTG9nLmUoVEFHLCAicGFyc2VMb25nIGVycm9yLiIsIGUpOwotICAgIH0KLSAg
ICByZXR1cm4gbnVtYmVyOwotICB9Ci0KLSAgLyoKLSAgICogUmVhZCB0aGUgY3VycmVudCB1dGls
aXphdGlvbiBvZiBhbGwgQ1BVcyB1c2luZyB0aGUgY3VtdWxhdGl2ZSBmaXJzdCBsaW5lCi0gICAq
IG9mIC9wcm9jL3N0YXQuCi0gICAqLwotICBwcml2YXRlIFByb2NTdGF0IHJlYWRQcm9jU3RhdCgp
IHsKLSAgICBsb25nIHVzZXJUaW1lID0gMDsKLSAgICBsb25nIHN5c3RlbVRpbWUgPSAwOwotICAg
IGxvbmcgaWRsZVRpbWUgPSAwOwotICAgIHRyeSB7Ci0gICAgICBCdWZmZXJlZFJlYWRlciByZWFk
ZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoIi9wcm9jL3N0YXQiKSk7Ci0g
ICAgICB0cnkgewotICAgICAgICAvLyBsaW5lIHNob3VsZCBjb250YWluIHNvbWV0aGluZyBsaWtl
IHRoaXM6Ci0gICAgICAgIC8vIGNwdSAgNTA5MzgxOCAyNzE4MzggMzUxMjgzMCAxNjU5MzQxMTkg
MTAxMzc0IDQ0NzA3NiAyNzIwODYgMCAwIDAKLSAgICAgICAgLy8gICAgICAgdXNlciAgICBuaWNl
ICBzeXN0ZW0gICAgIGlkbGUgICBpb3dhaXQgIGlycSAgIHNvZnRpcnEKLSAgICAgICAgU3RyaW5n
IGxpbmUgPSByZWFkZXIucmVhZExpbmUoKTsKLSAgICAgICAgU3RyaW5nIGxpbmVzW10gPSBsaW5l
LnNwbGl0KCJcXHMrIik7Ci0gICAgICAgIGludCBsZW5ndGggPSBsaW5lcy5sZW5ndGg7Ci0gICAg
ICAgIGlmIChsZW5ndGggPj0gNSkgewotICAgICAgICAgIHVzZXJUaW1lID0gcGFyc2VMb25nKGxp
bmVzWzFdKTsgLy8gdXNlcgotICAgICAgICAgIHVzZXJUaW1lICs9IHBhcnNlTG9uZyhsaW5lc1sy
XSk7IC8vIG5pY2UKLSAgICAgICAgICBzeXN0ZW1UaW1lID0gcGFyc2VMb25nKGxpbmVzWzNdKTsg
Ly8gc3lzdGVtCi0gICAgICAgICAgaWRsZVRpbWUgPSBwYXJzZUxvbmcobGluZXNbNF0pOyAvLyBp
ZGxlCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGxlbmd0aCA+PSA4KSB7Ci0gICAgICAgICAgdXNl
clRpbWUgKz0gcGFyc2VMb25nKGxpbmVzWzVdKTsgLy8gaW93YWl0Ci0gICAgICAgICAgc3lzdGVt
VGltZSArPSBwYXJzZUxvbmcobGluZXNbNl0pOyAvLyBpcnEKLSAgICAgICAgICBzeXN0ZW1UaW1l
ICs9IHBhcnNlTG9uZyhsaW5lc1s3XSk7IC8vIHNvZnRpcnEKLSAgICAgICAgfQotICAgICAgfSBj
YXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUoVEFHLCAiUHJvYmxlbXMgcGFyc2lu
ZyAvcHJvYy9zdGF0IiwgZSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgICAgfSBmaW5hbGx5
IHsKLSAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoRmlsZU5v
dEZvdW5kRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBvcGVuIC9wcm9j
L3N0YXQgZm9yIHJlYWRpbmciLCBlKTsKLSAgICAgIHJldHVybiBudWxsOwotICAgIH0gY2F0Y2gg
KElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZy5lKFRBRywgIlByb2JsZW1zIHJlYWRpbmcgL3By
b2Mvc3RhdCIsIGUpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiBuZXcg
UHJvY1N0YXQodXNlclRpbWUsIHN5c3RlbVRpbWUsIGlkbGVUaW1lKTsKLSAgfQotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudC5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnQuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJU
Q0NsaWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzQ3ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC51
dGlsLkxvZzsKLQotaW1wb3J0IG9yZy5qc29uLkpTT05BcnJheTsKLWltcG9ydCBvcmcuanNvbi5K
U09ORXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qc29uLkpTT05PYmplY3Q7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWlt
cG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5M
aW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsK
LWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51dGls
LnJlZ2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLS8qKgot
ICogSW1wbGVtZW50YXRpb24gb2YgQXBwUlRDQ2xpZW50IHRoYXQgdXNlcyBkaXJlY3QgVENQIGNv
bm5lY3Rpb24gYXMgdGhlIHNpZ25hbGluZyBjaGFubmVsLgotICogVGhpcyBlbGltaW5hdGVzIHRo
ZSBuZWVkIGZvciBhbiBleHRlcm5hbCBzZXJ2ZXIuIFRoaXMgY2xhc3MgZG9lcyBub3Qgc3VwcG9y
dCBsb29wYmFjawotICogY29ubmVjdGlvbnMuCi0gKi8KLXB1YmxpYyBjbGFzcyBEaXJlY3RSVEND
bGllbnQgaW1wbGVtZW50cyBBcHBSVENDbGllbnQsIFRDUENoYW5uZWxDbGllbnQuVENQQ2hhbm5l
bEV2ZW50cyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRGlyZWN0UlRD
Q2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfUE9SVCA9IDg4ODg7
Ci0KLSAgLy8gUmVnZXggcGF0dGVybiB1c2VkIGZvciBjaGVja2luZyBpZiByb29tIGlkIGxvb2tz
IGxpa2UgYW4gSVAuCi0gIHN0YXRpYyBmaW5hbCBQYXR0ZXJuIElQX1BBVFRFUk4gPSBQYXR0ZXJu
LmNvbXBpbGUoIigiCi0gICAgICAvLyBJUHY0Ci0gICAgICArICIoKFxcZCtcXC4pezN9XFxkKyl8
IgotICAgICAgLy8gSVB2NgotICAgICAgKyAiXFxbKCgoWzAtOWEtZkEtRl17MSw0fTopKlswLTlh
LWZBLUZdezEsNH0pPzo6IgotICAgICAgKyAiKChbMC05YS1mQS1GXXsxLDR9OikqWzAtOWEtZkEt
Rl17MSw0fSk/KVxcXXwiCi0gICAgICArICJcXFsoKFswLTlhLWZBLUZdezEsNH06KXs3fVswLTlh
LWZBLUZdezEsNH0pXFxdfCIKLSAgICAgIC8vIElQdjYgd2l0aG91dCBbXQotICAgICAgKyAiKCgo
WzAtOWEtZkEtRl17MSw0fTopKlswLTlhLWZBLUZdezEsNH0pPzo6KChbMC05YS1mQS1GXXsxLDR9
OikqWzAtOWEtZkEtRl17MSw0fSk/KXwiCi0gICAgICArICIoKFswLTlhLWZBLUZdezEsNH06KXs3
fVswLTlhLWZBLUZdezEsNH0pfCIKLSAgICAgIC8vIExpdGVyYWxzCi0gICAgICArICJsb2NhbGhv
c3QiCi0gICAgICArICIpIgotICAgICAgLy8gT3B0aW9uYWwgcG9ydCBudW1iZXIKLSAgICAgICsg
Iig6KFxcZCspKT8iKTsKLQotICBwcml2YXRlIGZpbmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRv
cjsKLSAgcHJpdmF0ZSBmaW5hbCBTaWduYWxpbmdFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIFRD
UENoYW5uZWxDbGllbnQgdGNwQ2xpZW50OwotICBwcml2YXRlIFJvb21Db25uZWN0aW9uUGFyYW1l
dGVycyBjb25uZWN0aW9uUGFyYW1ldGVyczsKLQotICBwcml2YXRlIGVudW0gQ29ubmVjdGlvblN0
YXRlIHsgTkVXLCBDT05ORUNURUQsIENMT1NFRCwgRVJST1IgfQotCi0gIC8vIEFsbCBhbHRlcmF0
aW9ucyBvZiB0aGUgcm9vbSBzdGF0ZSBzaG91bGQgYmUgZG9uZSBmcm9tIGluc2lkZSB0aGUgbG9v
cGVyIHRocmVhZC4KLSAgcHJpdmF0ZSBDb25uZWN0aW9uU3RhdGUgcm9vbVN0YXRlOwotCi0gIHB1
YmxpYyBEaXJlY3RSVENDbGllbnQoU2lnbmFsaW5nRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMu
ZXZlbnRzID0gZXZlbnRzOwotCi0gICAgZXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhy
ZWFkRXhlY3V0b3IoKTsKLSAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuTkVXOwotICB9
Ci0KLSAgLyoqCi0gICAqIENvbm5lY3RzIHRvIHRoZSByb29tLCByb29tSWQgaW4gY29ubmVjdGlv
bnNQYXJhbWV0ZXJzIGlzIHJlcXVpcmVkLiByb29tSWQgbXVzdCBiZSBhIHZhbGlkCi0gICAqIElQ
IGFkZHJlc3MgbWF0Y2hpbmcgSVBfUEFUVEVSTi4KLSAgICovCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBjb25uZWN0VG9Sb29tKFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9u
UGFyYW1ldGVycykgewotICAgIHRoaXMuY29ubmVjdGlvblBhcmFtZXRlcnMgPSBjb25uZWN0aW9u
UGFyYW1ldGVyczsKLQotICAgIGlmIChjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewot
ICAgICAgcmVwb3J0RXJyb3IoIkxvb3BiYWNrIGNvbm5lY3Rpb25zIGFyZW4ndCBzdXBwb3J0ZWQg
YnkgRGlyZWN0UlRDQ2xpZW50LiIpOwotICAgIH0KLQotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIGNvbm5lY3RUb1Jvb21JbnRlcm5hbCgpOwotICAgICAgfQotICAgIH0pOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3RGcm9tUm9vbSgpIHsKLSAg
ICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBkaXNjb25uZWN0RnJvbVJvb21JbnRlcm5h
bCgpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqIENvbm5lY3RzIHRvIHRo
ZSByb29tLgotICAgKgotICAgKiBSdW5zIG9uIHRoZSBsb29wZXIgdGhyZWFkLgotICAgKi8KLSAg
cHJpdmF0ZSB2b2lkIGNvbm5lY3RUb1Jvb21JbnRlcm5hbCgpIHsKLSAgICB0aGlzLnJvb21TdGF0
ZSA9IENvbm5lY3Rpb25TdGF0ZS5ORVc7Ci0KLSAgICBTdHJpbmcgZW5kcG9pbnQgPSBjb25uZWN0
aW9uUGFyYW1ldGVycy5yb29tSWQ7Ci0KLSAgICBNYXRjaGVyIG1hdGNoZXIgPSBJUF9QQVRURVJO
Lm1hdGNoZXIoZW5kcG9pbnQpOwotICAgIGlmICghbWF0Y2hlci5tYXRjaGVzKCkpIHsKLSAgICAg
IHJlcG9ydEVycm9yKCJyb29tSWQgbXVzdCBtYXRjaCBJUF9QQVRURVJOIGZvciBEaXJlY3RSVEND
bGllbnQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgU3RyaW5nIGlwID0gbWF0Y2hl
ci5ncm91cCgxKTsKLSAgICBTdHJpbmcgcG9ydFN0ciA9IG1hdGNoZXIuZ3JvdXAobWF0Y2hlci5n
cm91cENvdW50KCkpOwotICAgIGludCBwb3J0OwotCi0gICAgaWYgKHBvcnRTdHIgIT0gbnVsbCkg
ewotICAgICAgdHJ5IHsKLSAgICAgICAgcG9ydCA9IEludGVnZXIucGFyc2VJbnQocG9ydFN0cik7
Ci0gICAgICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICByZXBv
cnRFcnJvcigiSW52YWxpZCBwb3J0IG51bWJlcjogIiArIHBvcnRTdHIpOwotICAgICAgICByZXR1
cm47Ci0gICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBvcnQgPSBERUZBVUxUX1BPUlQ7Ci0g
ICAgfQotCi0gICAgdGNwQ2xpZW50ID0gbmV3IFRDUENoYW5uZWxDbGllbnQoZXhlY3V0b3IsIHRo
aXMsIGlwLCBwb3J0KTsKLSAgfQotCi0gIC8qKgotICAgKiBEaXNjb25uZWN0cyBmcm9tIHRoZSBy
b29tLgotICAgKgotICAgKiBSdW5zIG9uIHRoZSBsb29wZXIgdGhyZWFkLgotICAgKi8KLSAgcHJp
dmF0ZSB2b2lkIGRpc2Nvbm5lY3RGcm9tUm9vbUludGVybmFsKCkgewotICAgIHJvb21TdGF0ZSA9
IENvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7Ci0KLSAgICBpZiAodGNwQ2xpZW50ICE9IG51bGwpIHsK
LSAgICAgIHRjcENsaWVudC5kaXNjb25uZWN0KCk7Ci0gICAgICB0Y3BDbGllbnQgPSBudWxsOwot
ICAgIH0KLSAgICBleGVjdXRvci5zaHV0ZG93bigpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIHNlbmRPZmZlclNkcChmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0g
ICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0
aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcgb2Zm
ZXIgU0RQIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAg
ICAgIGpzb25QdXQoanNvbiwgInNkcCIsIHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGpzb25Q
dXQoanNvbiwgInR5cGUiLCAib2ZmZXIiKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoanNvbi50b1N0
cmluZygpKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBzZW5kQW5zd2VyU2RwKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsKLSAgICBl
eGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9i
amVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJzZHAiLCBzZHAuZGVzY3JpcHRpb24pOwot
ICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgImFuc3dlciIpOwotICAgICAgICBzZW5kTWVz
c2FnZShqc29uLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRh
dGUgY2FuZGlkYXRlKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgSlNPTk9i
amVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlw
ZSIsICJjYW5kaWRhdGUiKTsKLSAgICAgICAganNvblB1dChqc29uLCAibGFiZWwiLCBjYW5kaWRh
dGUuc2RwTUxpbmVJbmRleCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImlkIiwgY2FuZGlkYXRl
LnNkcE1pZCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5z
ZHApOwotCi0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RF
RCkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJTZW5kaW5nIElDRSBjYW5kaWRhdGUgaW4gbm9u
IGNvbm5lY3RlZCBzdGF0ZS4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgc2VuZE1lc3NhZ2UoanNvbi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIC8qKiBTZW5kIHJlbW92ZWQgSWNlIGNhbmRpZGF0ZXMgdG8gdGhlIG90aGVyIHBhcnRpY2lw
YW50LiAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRl
UmVtb3ZhbHMoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgIGV4ZWN1dG9y
LmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7
Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAicmVtb3ZlLWNhbmRpZGF0ZXMiKTsKLSAg
ICAgICAgSlNPTkFycmF5IGpzb25BcnJheSA9IG5ldyBKU09OQXJyYXkoKTsKLSAgICAgICAgZm9y
IChmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogY2FuZGlkYXRlcykgewotICAgICAgICAg
IGpzb25BcnJheS5wdXQodG9Kc29uQ2FuZGlkYXRlKGNhbmRpZGF0ZSkpOwotICAgICAgICB9Ci0g
ICAgICAgIGpzb25QdXQoanNvbiwgImNhbmRpZGF0ZXMiLCBqc29uQXJyYXkpOwotCi0gICAgICAg
IGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAg
IHJlcG9ydEVycm9yKCJTZW5kaW5nIElDRSBjYW5kaWRhdGUgcmVtb3ZhbHMgaW4gbm9uIGNvbm5l
Y3RlZCBzdGF0ZS4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgc2Vu
ZE1lc3NhZ2UoanNvbi50b1N0cmluZygpKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSAgLy8gVENQQ2hhbm5lbENsaWVudCBldmVudCBoYW5kbGVycwotCi0gIC8q
KgotICAgKiBJZiB0aGUgY2xpZW50IGlzIHRoZSBzZXJ2ZXIgc2lkZSwgdGhpcyB3aWxsIHRyaWdn
ZXIgb25Db25uZWN0ZWRUb1Jvb20uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
b25UQ1BDb25uZWN0ZWQoYm9vbGVhbiBpc1NlcnZlcikgewotICAgIGlmIChpc1NlcnZlcikgewot
ICAgICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRDsKLQotICAgICAgU2ln
bmFsaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gbmV3IFNpZ25hbGluZ1BhcmFtZXRlcnMoCi0g
ICAgICAgICAgLy8gSWNlIHNlcnZlcnMgYXJlIG5vdCBuZWVkZWQgZm9yIGRpcmVjdCBjb25uZWN0
aW9ucy4KLSAgICAgICAgICBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+
KCksCi0gICAgICAgICAgaXNTZXJ2ZXIsIC8vIFNlcnZlciBzaWRlIGFjdHMgYXMgdGhlIGluaXRp
YXRvciBvbiBkaXJlY3QgY29ubmVjdGlvbnMuCi0gICAgICAgICAgbnVsbCwgLy8gY2xpZW50SWQK
LSAgICAgICAgICBudWxsLCAvLyB3c3NVcmwKLSAgICAgICAgICBudWxsLCAvLyB3d3NQb3N0VXJs
Ci0gICAgICAgICAgbnVsbCwgLy8gb2ZmZXJTZHAKLSAgICAgICAgICBudWxsIC8vIGljZUNhbmRp
ZGF0ZXMKLSAgICAgICAgICApOwotICAgICAgZXZlbnRzLm9uQ29ubmVjdGVkVG9Sb29tKHBhcmFt
ZXRlcnMpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblRDUE1l
c3NhZ2UoU3RyaW5nIG1zZykgewotICAgIHRyeSB7Ci0gICAgICBKU09OT2JqZWN0IGpzb24gPSBu
ZXcgSlNPTk9iamVjdChtc2cpOwotICAgICAgU3RyaW5nIHR5cGUgPSBqc29uLm9wdFN0cmluZygi
dHlwZSIpOwotICAgICAgaWYgKHR5cGUuZXF1YWxzKCJjYW5kaWRhdGUiKSkgewotICAgICAgICBl
dmVudHMub25SZW1vdGVJY2VDYW5kaWRhdGUodG9KYXZhQ2FuZGlkYXRlKGpzb24pKTsKLSAgICAg
IH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoInJlbW92ZS1jYW5kaWRhdGVzIikpIHsKLSAgICAgICAg
SlNPTkFycmF5IGNhbmRpZGF0ZUFycmF5ID0ganNvbi5nZXRKU09OQXJyYXkoImNhbmRpZGF0ZXMi
KTsKLSAgICAgICAgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyA9IG5ldyBJY2VDYW5kaWRhdGVb
Y2FuZGlkYXRlQXJyYXkubGVuZ3RoKCldOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNh
bmRpZGF0ZUFycmF5Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICBjYW5kaWRhdGVzW2ldID0g
dG9KYXZhQ2FuZGlkYXRlKGNhbmRpZGF0ZUFycmF5LmdldEpTT05PYmplY3QoaSkpOwotICAgICAg
ICB9Ci0gICAgICAgIGV2ZW50cy5vblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1vdmVkKGNhbmRpZGF0
ZXMpOwotICAgICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygiYW5zd2VyIikpIHsKLSAgICAgICAg
U2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAg
ICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSh0eXBlKSwganNv
bi5nZXRTdHJpbmcoInNkcCIpKTsKLSAgICAgICAgZXZlbnRzLm9uUmVtb3RlRGVzY3JpcHRpb24o
c2RwKTsKLSAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoIm9mZmVyIikpIHsKLSAgICAgICAg
U2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAg
ICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSh0eXBlKSwganNv
bi5nZXRTdHJpbmcoInNkcCIpKTsKLQotICAgICAgICBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnMgPSBuZXcgU2lnbmFsaW5nUGFyYW1ldGVycygKLSAgICAgICAgICAgIC8vIEljZSBzZXJ2
ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkaXJlY3QgY29ubmVjdGlvbnMuCi0gICAgICAgICAgICBu
ZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+KCksCi0gICAgICAgICAgICBm
YWxzZSwgLy8gVGhpcyBjb2RlIHdpbGwgb25seSBiZSBydW4gb24gdGhlIGNsaWVudCBzaWRlLiBT
bywgd2UgYXJlIG5vdCB0aGUgaW5pdGlhdG9yLgotICAgICAgICAgICAgbnVsbCwgLy8gY2xpZW50
SWQKLSAgICAgICAgICAgIG51bGwsIC8vIHdzc1VybAotICAgICAgICAgICAgbnVsbCwgLy8gd3Nz
UG9zdFVybAotICAgICAgICAgICAgc2RwLCAvLyBvZmZlclNkcAotICAgICAgICAgICAgbnVsbCAv
LyBpY2VDYW5kaWRhdGVzCi0gICAgICAgICAgICApOwotICAgICAgICByb29tU3RhdGUgPSBDb25u
ZWN0aW9uU3RhdGUuQ09OTkVDVEVEOwotICAgICAgICBldmVudHMub25Db25uZWN0ZWRUb1Jvb20o
cGFyYW1ldGVycyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICByZXBvcnRFcnJvcigiVW5leHBl
Y3RlZCBUQ1AgbWVzc2FnZTogIiArIG1zZyk7Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoSlNPTkV4
Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiVENQIG1lc3NhZ2UgSlNPTiBwYXJzaW5n
IGVycm9yOiAiICsgZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgb25UQ1BFcnJvcihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICByZXBvcnRF
cnJvcigiVENQIGNvbm5lY3Rpb24gZXJyb3I6ICIgKyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25UQ1BDbG9zZSgpIHsKLSAgICBldmVudHMub25DaGFu
bmVsQ2xvc2UoKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEhlbHBlciBmdW5jdGlv
bnMuCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcihmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdl
KSB7Ci0gICAgTG9nLmUoVEFHLCBlcnJvck1lc3NhZ2UpOwotICAgIGV4ZWN1dG9yLmV4ZWN1dGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkVSUk9SKSB7Ci0g
ICAgICAgICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkVSUk9SOwotICAgICAgICAgIGV2
ZW50cy5vbkNoYW5uZWxFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2VuZE1lc3NhZ2UoZmluYWwgU3RyaW5nIG1l
c3NhZ2UpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICB0Y3BDbGllbnQuc2Vu
ZChtZXNzYWdlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIFB1dCBhIHxrZXl8LT58
dmFsdWV8IG1hcHBpbmcgaW4gfGpzb258LgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGpzb25QdXQo
SlNPTk9iamVjdCBqc29uLCBTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpIHsKLSAgICB0cnkgewot
ICAgICAganNvbi5wdXQoa2V5LCB2YWx1ZSk7Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBl
KSB7Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0KLQot
ICAvLyBDb252ZXJ0cyBhIEphdmEgY2FuZGlkYXRlIHRvIGEgSlNPTk9iamVjdC4KLSAgcHJpdmF0
ZSBzdGF0aWMgSlNPTk9iamVjdCB0b0pzb25DYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNh
bmRpZGF0ZSkgewotICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAg
anNvblB1dChqc29uLCAibGFiZWwiLCBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCk7Ci0gICAganNv
blB1dChqc29uLCAiaWQiLCBjYW5kaWRhdGUuc2RwTWlkKTsKLSAgICBqc29uUHV0KGpzb24sICJj
YW5kaWRhdGUiLCBjYW5kaWRhdGUuc2RwKTsKLSAgICByZXR1cm4ganNvbjsKLSAgfQotCi0gIC8v
IENvbnZlcnRzIGEgSlNPTiBjYW5kaWRhdGUgdG8gYSBKYXZhIG9iamVjdC4KLSAgcHJpdmF0ZSBz
dGF0aWMgSWNlQ2FuZGlkYXRlIHRvSmF2YUNhbmRpZGF0ZShKU09OT2JqZWN0IGpzb24pIHRocm93
cyBKU09ORXhjZXB0aW9uIHsKLSAgICByZXR1cm4gbmV3IEljZUNhbmRpZGF0ZSgKLSAgICAgICAg
anNvbi5nZXRTdHJpbmcoImlkIiksIGpzb24uZ2V0SW50KCJsYWJlbCIpLCBqc29uLmdldFN0cmlu
ZygiY2FuZGlkYXRlIikpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvSHVkRnJhZ21lbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvSHVkRnJhZ21lbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL0h1ZEZyYWdtZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDUg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9y
cy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudDsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRs
ZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsKLWltcG9ydCBhbmRyb2lkLnZpZXcu
TGF5b3V0SW5mbGF0ZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9p
ZC52aWV3LlZpZXdHcm91cDsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5JbWFnZUJ1dHRvbjsKLWlt
cG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsKLQotaW1wb3J0IG9yZy53ZWJydGMuU3RhdHNS
ZXBvcnQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTWFw
OwotCi0vKioKLSAqIEZyYWdtZW50IGZvciBIVUQgc3RhdGlzdGljcyBkaXNwbGF5LgotICovCi1w
dWJsaWMgY2xhc3MgSHVkRnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCB7Ci0gIHByaXZhdGUgVmll
dyBjb250cm9sVmlldzsKLSAgcHJpdmF0ZSBUZXh0VmlldyBlbmNvZGVyU3RhdFZpZXc7Ci0gIHBy
aXZhdGUgVGV4dFZpZXcgaHVkVmlld0J3ZTsKLSAgcHJpdmF0ZSBUZXh0VmlldyBodWRWaWV3Q29u
bmVjdGlvbjsKLSAgcHJpdmF0ZSBUZXh0VmlldyBodWRWaWV3VmlkZW9TZW5kOwotICBwcml2YXRl
IFRleHRWaWV3IGh1ZFZpZXdWaWRlb1JlY3Y7Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gdG9nZ2xl
RGVidWdCdXR0b247Ci0gIHByaXZhdGUgYm9vbGVhbiB2aWRlb0NhbGxFbmFibGVkOwotICBwcml2
YXRlIGJvb2xlYW4gZGlzcGxheUh1ZDsKLSAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIGlzUnVu
bmluZzsKLSAgcHJpdmF0ZSBDcHVNb25pdG9yIGNwdU1vbml0b3I7Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyBWaWV3IG9uQ3JlYXRlVmlldygKLSAgICAgIExheW91dEluZmxhdGVyIGluZmxhdGVy
LCBWaWV3R3JvdXAgY29udGFpbmVyLCBCdW5kbGUgc2F2ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAg
Y29udHJvbFZpZXcgPSBpbmZsYXRlci5pbmZsYXRlKFIubGF5b3V0LmZyYWdtZW50X2h1ZCwgY29u
dGFpbmVyLCBmYWxzZSk7Ci0KLSAgICAvLyBDcmVhdGUgVUkgY29udHJvbHMuCi0gICAgZW5jb2Rl
clN0YXRWaWV3ID0gKFRleHRWaWV3KSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5pZC5lbmNv
ZGVyX3N0YXRfY2FsbCk7Ci0gICAgaHVkVmlld0J3ZSA9IChUZXh0VmlldykgY29udHJvbFZpZXcu
ZmluZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRfYndlKTsKLSAgICBodWRWaWV3Q29ubmVjdGlvbiA9
IChUZXh0VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRfY29ubmVj
dGlvbik7Ci0gICAgaHVkVmlld1ZpZGVvU2VuZCA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmlu
ZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRfdmlkZW9fc2VuZCk7Ci0gICAgaHVkVmlld1ZpZGVvUmVj
diA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuaHVkX3N0YXRfdmlk
ZW9fcmVjdik7Ci0gICAgdG9nZ2xlRGVidWdCdXR0b24gPSAoSW1hZ2VCdXR0b24pIGNvbnRyb2xW
aWV3LmZpbmRWaWV3QnlJZChSLmlkLmJ1dHRvbl90b2dnbGVfZGVidWcpOwotCi0gICAgdG9nZ2xl
RGVidWdCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5lcigp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcp
IHsKLSAgICAgICAgaWYgKGRpc3BsYXlIdWQpIHsKLSAgICAgICAgICBpbnQgdmlzaWJpbGl0eSA9
Ci0gICAgICAgICAgICAgIChodWRWaWV3QndlLmdldFZpc2liaWxpdHkoKSA9PSBWaWV3LlZJU0lC
TEUpID8gVmlldy5JTlZJU0lCTEUgOiBWaWV3LlZJU0lCTEU7Ci0gICAgICAgICAgaHVkVmlld3NT
ZXRQcm9wZXJ0aWVzKHZpc2liaWxpdHkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0K
LSAgICByZXR1cm4gY29udHJvbFZpZXc7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgb25TdGFydCgpIHsKLSAgICBzdXBlci5vblN0YXJ0KCk7Ci0KLSAgICBCdW5kbGUgYXJncyA9
IGdldEFyZ3VtZW50cygpOwotICAgIGlmIChhcmdzICE9IG51bGwpIHsKLSAgICAgIHZpZGVvQ2Fs
bEVuYWJsZWQgPSBhcmdzLmdldEJvb2xlYW4oQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBTEws
IHRydWUpOwotICAgICAgZGlzcGxheUh1ZCA9IGFyZ3MuZ2V0Qm9vbGVhbihDYWxsQWN0aXZpdHku
RVhUUkFfRElTUExBWV9IVUQsIGZhbHNlKTsKLSAgICB9Ci0gICAgaW50IHZpc2liaWxpdHkgPSBk
aXNwbGF5SHVkID8gVmlldy5WSVNJQkxFIDogVmlldy5JTlZJU0lCTEU7Ci0gICAgZW5jb2RlclN0
YXRWaWV3LnNldFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgdG9nZ2xlRGVidWdCdXR0b24u
c2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3c1NldFByb3BlcnRpZXMoVmll
dy5JTlZJU0lCTEUpOwotICAgIGlzUnVubmluZyA9IHRydWU7Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25TdG9wKCkgewotICAgIGlzUnVubmluZyA9IGZhbHNlOwotICAgIHN1
cGVyLm9uU3RvcCgpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0Q3B1TW9uaXRvcihDcHVNb25p
dG9yIGNwdU1vbml0b3IpIHsKLSAgICB0aGlzLmNwdU1vbml0b3IgPSBjcHVNb25pdG9yOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGh1ZFZpZXdzU2V0UHJvcGVydGllcyhpbnQgdmlzaWJpbGl0eSkg
ewotICAgIGh1ZFZpZXdCd2Uuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3
Q29ubmVjdGlvbi5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkpOwotICAgIGh1ZFZpZXdWaWRlb1Nl
bmQuc2V0VmlzaWJpbGl0eSh2aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3VmlkZW9SZWN2LnNldFZp
c2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgaHVkVmlld0J3ZS5zZXRUZXh0U2l6ZShUeXBlZFZh
bHVlLkNPTVBMRVhfVU5JVF9QVCwgNSk7Ci0gICAgaHVkVmlld0Nvbm5lY3Rpb24uc2V0VGV4dFNp
emUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFQsIDUpOwotICAgIGh1ZFZpZXdWaWRlb1NlbmQu
c2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFQsIDUpOwotICAgIGh1ZFZpZXdW
aWRlb1JlY3Yuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFQsIDUpOwotICB9
Ci0KLSAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldFJlcG9ydE1hcChTdGF0c1JlcG9y
dCByZXBvcnQpIHsKLSAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9ydE1hcCA9IG5ldyBIYXNo
TWFwPFN0cmluZywgU3RyaW5nPigpOwotICAgIGZvciAoU3RhdHNSZXBvcnQuVmFsdWUgdmFsdWUg
OiByZXBvcnQudmFsdWVzKSB7Ci0gICAgICByZXBvcnRNYXAucHV0KHZhbHVlLm5hbWUsIHZhbHVl
LnZhbHVlKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcG9ydE1hcDsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIHVwZGF0ZUVuY29kZXJTdGF0aXN0aWNzKGZpbmFsIFN0YXRzUmVwb3J0W10gcmVwb3J0cykg
ewotICAgIGlmICghaXNSdW5uaW5nIHx8ICFkaXNwbGF5SHVkKSB7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICAgIFN0cmluZ0J1aWxkZXIgZW5jb2RlclN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigx
MjgpOwotICAgIFN0cmluZ0J1aWxkZXIgYndlU3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0g
ICAgU3RyaW5nQnVpbGRlciBjb25uZWN0aW9uU3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0g
ICAgU3RyaW5nQnVpbGRlciB2aWRlb1NlbmRTdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAg
ICBTdHJpbmdCdWlsZGVyIHZpZGVvUmVjdlN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAg
IFN0cmluZyBmcHMgPSBudWxsOwotICAgIFN0cmluZyB0YXJnZXRCaXRyYXRlID0gbnVsbDsKLSAg
ICBTdHJpbmcgYWN0dWFsQml0cmF0ZSA9IG51bGw7Ci0KLSAgICBmb3IgKFN0YXRzUmVwb3J0IHJl
cG9ydCA6IHJlcG9ydHMpIHsKLSAgICAgIGlmIChyZXBvcnQudHlwZS5lcXVhbHMoInNzcmMiKSAm
JiByZXBvcnQuaWQuY29udGFpbnMoInNzcmMiKSAmJiByZXBvcnQuaWQuY29udGFpbnMoInNlbmQi
KSkgewotICAgICAgICAvLyBTZW5kIHZpZGVvIHN0YXRpc3RpY3MuCi0gICAgICAgIE1hcDxTdHJp
bmcsIFN0cmluZz4gcmVwb3J0TWFwID0gZ2V0UmVwb3J0TWFwKHJlcG9ydCk7Ci0gICAgICAgIFN0
cmluZyB0cmFja0lkID0gcmVwb3J0TWFwLmdldCgiZ29vZ1RyYWNrSWQiKTsKLSAgICAgICAgaWYg
KHRyYWNrSWQgIT0gbnVsbCAmJiB0cmFja0lkLmNvbnRhaW5zKFBlZXJDb25uZWN0aW9uQ2xpZW50
LlZJREVPX1RSQUNLX0lEKSkgewotICAgICAgICAgIGZwcyA9IHJlcG9ydE1hcC5nZXQoImdvb2dG
cmFtZVJhdGVTZW50Iik7Ci0gICAgICAgICAgdmlkZW9TZW5kU3RhdC5hcHBlbmQocmVwb3J0Lmlk
KS5hcHBlbmQoIlxuIik7Ci0gICAgICAgICAgZm9yIChTdGF0c1JlcG9ydC5WYWx1ZSB2YWx1ZSA6
IHJlcG9ydC52YWx1ZXMpIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUubmFtZS5y
ZXBsYWNlKCJnb29nIiwgIiIpOwotICAgICAgICAgICAgdmlkZW9TZW5kU3RhdC5hcHBlbmQobmFt
ZSkuYXBwZW5kKCI9IikuYXBwZW5kKHZhbHVlLnZhbHVlKS5hcHBlbmQoIlxuIik7Ci0gICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHJlcG9ydC50eXBlLmVxdWFscygic3Ny
YyIpICYmIHJlcG9ydC5pZC5jb250YWlucygic3NyYyIpCi0gICAgICAgICAgJiYgcmVwb3J0Lmlk
LmNvbnRhaW5zKCJyZWN2IikpIHsKLSAgICAgICAgLy8gUmVjZWl2ZSB2aWRlbyBzdGF0aXN0aWNz
LgotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9ydE1hcCA9IGdldFJlcG9ydE1hcChy
ZXBvcnQpOwotICAgICAgICAvLyBDaGVjayBpZiB0aGlzIHN0YXQgaXMgZm9yIHZpZGVvIHRyYWNr
LgotICAgICAgICBTdHJpbmcgZnJhbWVXaWR0aCA9IHJlcG9ydE1hcC5nZXQoImdvb2dGcmFtZVdp
ZHRoUmVjZWl2ZWQiKTsKLSAgICAgICAgaWYgKGZyYW1lV2lkdGggIT0gbnVsbCkgewotICAgICAg
ICAgIHZpZGVvUmVjdlN0YXQuYXBwZW5kKHJlcG9ydC5pZCkuYXBwZW5kKCJcbiIpOwotICAgICAg
ICAgIGZvciAoU3RhdHNSZXBvcnQuVmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVzKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLm5hbWUucmVwbGFjZSgiZ29vZyIsICIiKTsKLSAg
ICAgICAgICAgIHZpZGVvUmVjdlN0YXQuYXBwZW5kKG5hbWUpLmFwcGVuZCgiPSIpLmFwcGVuZCh2
YWx1ZS52YWx1ZSkuYXBwZW5kKCJcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAg
fSBlbHNlIGlmIChyZXBvcnQuaWQuZXF1YWxzKCJid2Vmb3J2aWRlbyIpKSB7Ci0gICAgICAgIC8v
IEJXRSBzdGF0aXN0aWNzLgotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9ydE1hcCA9
IGdldFJlcG9ydE1hcChyZXBvcnQpOwotICAgICAgICB0YXJnZXRCaXRyYXRlID0gcmVwb3J0TWFw
LmdldCgiZ29vZ1RhcmdldEVuY0JpdHJhdGUiKTsKLSAgICAgICAgYWN0dWFsQml0cmF0ZSA9IHJl
cG9ydE1hcC5nZXQoImdvb2dBY3R1YWxFbmNCaXRyYXRlIik7Ci0KLSAgICAgICAgYndlU3RhdC5h
cHBlbmQocmVwb3J0LmlkKS5hcHBlbmQoIlxuIik7Ci0gICAgICAgIGZvciAoU3RhdHNSZXBvcnQu
VmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVzKSB7Ci0gICAgICAgICAgU3RyaW5nIG5hbWUgPSB2
YWx1ZS5uYW1lLnJlcGxhY2UoImdvb2ciLCAiIikucmVwbGFjZSgiQXZhaWxhYmxlIiwgIiIpOwot
ICAgICAgICAgIGJ3ZVN0YXQuYXBwZW5kKG5hbWUpLmFwcGVuZCgiPSIpLmFwcGVuZCh2YWx1ZS52
YWx1ZSkuYXBwZW5kKCJcbiIpOwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgaWYgKHJlcG9ydC50
eXBlLmVxdWFscygiZ29vZ0NhbmRpZGF0ZVBhaXIiKSkgewotICAgICAgICAvLyBDb25uZWN0aW9u
IHN0YXRpc3RpY3MuCi0gICAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gcmVwb3J0TWFwID0gZ2V0
UmVwb3J0TWFwKHJlcG9ydCk7Ci0gICAgICAgIFN0cmluZyBhY3RpdmVDb25uZWN0aW9uID0gcmVw
b3J0TWFwLmdldCgiZ29vZ0FjdGl2ZUNvbm5lY3Rpb24iKTsKLSAgICAgICAgaWYgKGFjdGl2ZUNv
bm5lY3Rpb24gIT0gbnVsbCAmJiBhY3RpdmVDb25uZWN0aW9uLmVxdWFscygidHJ1ZSIpKSB7Ci0g
ICAgICAgICAgY29ubmVjdGlvblN0YXQuYXBwZW5kKHJlcG9ydC5pZCkuYXBwZW5kKCJcbiIpOwot
ICAgICAgICAgIGZvciAoU3RhdHNSZXBvcnQuVmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVzKSB7
Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLm5hbWUucmVwbGFjZSgiZ29vZyIsICIi
KTsKLSAgICAgICAgICAgIGNvbm5lY3Rpb25TdGF0LmFwcGVuZChuYW1lKS5hcHBlbmQoIj0iKS5h
cHBlbmQodmFsdWUudmFsdWUpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0gICAgaHVkVmlld0J3ZS5zZXRUZXh0KGJ3ZVN0YXQudG9TdHJpbmco
KSk7Ci0gICAgaHVkVmlld0Nvbm5lY3Rpb24uc2V0VGV4dChjb25uZWN0aW9uU3RhdC50b1N0cmlu
ZygpKTsKLSAgICBodWRWaWV3VmlkZW9TZW5kLnNldFRleHQodmlkZW9TZW5kU3RhdC50b1N0cmlu
ZygpKTsKLSAgICBodWRWaWV3VmlkZW9SZWN2LnNldFRleHQodmlkZW9SZWN2U3RhdC50b1N0cmlu
ZygpKTsKLQotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICBpZiAoZnBzICE9IG51
bGwpIHsKLSAgICAgICAgZW5jb2RlclN0YXQuYXBwZW5kKCJGcHM6ICAiKS5hcHBlbmQoZnBzKS5h
cHBlbmQoIlxuIik7Ci0gICAgICB9Ci0gICAgICBpZiAodGFyZ2V0Qml0cmF0ZSAhPSBudWxsKSB7
Ci0gICAgICAgIGVuY29kZXJTdGF0LmFwcGVuZCgiVGFyZ2V0IEJSOiAiKS5hcHBlbmQodGFyZ2V0
Qml0cmF0ZSkuYXBwZW5kKCJcbiIpOwotICAgICAgfQotICAgICAgaWYgKGFjdHVhbEJpdHJhdGUg
IT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyU3RhdC5hcHBlbmQoIkFjdHVhbCBCUjogIikuYXBw
ZW5kKGFjdHVhbEJpdHJhdGUpLmFwcGVuZCgiXG4iKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAoY3B1TW9uaXRvciAhPSBudWxsKSB7Ci0gICAgICBlbmNvZGVyU3RhdC5hcHBlbmQoIkNQVSU6
ICIpCi0gICAgICAgICAgLmFwcGVuZChjcHVNb25pdG9yLmdldENwdVVzYWdlQ3VycmVudCgpKQot
ICAgICAgICAgIC5hcHBlbmQoIi8iKQotICAgICAgICAgIC5hcHBlbmQoY3B1TW9uaXRvci5nZXRD
cHVVc2FnZUF2ZXJhZ2UoKSkKLSAgICAgICAgICAuYXBwZW5kKCIuIEZyZXE6ICIpCi0gICAgICAg
ICAgLmFwcGVuZChjcHVNb25pdG9yLmdldEZyZXF1ZW5jeVNjYWxlQXZlcmFnZSgpKTsKLSAgICB9
Ci0gICAgZW5jb2RlclN0YXRWaWV3LnNldFRleHQoZW5jb2RlclN0YXQudG9TdHJpbmcoKSk7Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9QZWVyQ29ubmVjdGlvbkNs
aWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9QZWVy
Q29ubmVjdGlvbkNsaWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvUGVlckNvbm5lY3Rpb25DbGllbnQuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDExNjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3Bv
dC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRy
b2lkLm9zLkVudmlyb25tZW50OwotaW1wb3J0IGFuZHJvaWQub3MuUGFyY2VsRmlsZURlc2NyaXB0
b3I7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBv
cnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7Ci1p
bXBvcnQgamF2YS51dGlsLkVudW1TZXQ7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyOwotaW1wb3J0IGph
dmEudXRpbC5UaW1lclRhc2s7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3Jz
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9yU2VydmljZTsK
LWltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXgu
UGF0dGVybjsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuQXBwUlRDQ2xpZW50LlNpZ25hbGlu
Z1BhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5BdWRpb1NvdXJjZTsKLWltcG9ydCBvcmcu
d2VicnRjLkF1ZGlvVHJhY2s7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFWaWRlb0NhcHR1cmVy
OwotaW1wb3J0IG9yZy53ZWJydGMuRGF0YUNoYW5uZWw7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FZ2xC
YXNlOwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMu
TG9nZ2luZzsKLWltcG9ydCBvcmcud2VicnRjLk1lZGlhQ29uc3RyYWludHM7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5NZWRpYVN0cmVhbTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uOwot
aW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb24uSWNlQ29ubmVjdGlvblN0YXRlOwotaW1w
b3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy53ZWJydGMu
UnRwUGFyYW1ldGVyczsKLWltcG9ydCBvcmcud2VicnRjLlJ0cFNlbmRlcjsKLWltcG9ydCBvcmcu
d2VicnRjLlNkcE9ic2VydmVyOwotaW1wb3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9u
OwotaW1wb3J0IG9yZy53ZWJydGMuU3RhdHNPYnNlcnZlcjsKLWltcG9ydCBvcmcud2VicnRjLlN0
YXRzUmVwb3J0OwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcu
d2VicnRjLlZpZGVvUmVuZGVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1NvdXJjZTsKLWlt
cG9ydCBvcmcud2VicnRjLlZpZGVvVHJhY2s7Ci1pbXBvcnQgb3JnLndlYnJ0Yy52b2ljZWVuZ2lu
ZS5XZWJSdGNBdWRpb01hbmFnZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy52b2ljZWVuZ2luZS5XZWJS
dGNBdWRpb1V0aWxzOwotCi0vKioKLSAqIFBlZXIgY29ubmVjdGlvbiBjbGllbnQgaW1wbGVtZW50
YXRpb24uCi0gKgotICogPHA+QWxsIHB1YmxpYyBtZXRob2RzIGFyZSByb3V0ZWQgdG8gbG9jYWwg
bG9vcGVyIHRocmVhZC4KLSAqIEFsbCBQZWVyQ29ubmVjdGlvbkV2ZW50cyBjYWxsYmFja3MgYXJl
IGludm9rZWQgZnJvbSB0aGUgc2FtZSBsb29wZXIgdGhyZWFkLgotICogVGhpcyBjbGFzcyBpcyBh
IHNpbmdsZXRvbi4KLSAqLwotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uQ2xpZW50IHsKLSAg
cHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklERU9fVFJBQ0tfSUQgPSAiQVJEQU1TdjAiOwot
ICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19UUkFDS19JRCA9ICJBUkRBTVNhMCI7
Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFZJREVPX1RSQUNLX1RZUEUgPSAidmlkZW8i
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlBDUlRDQ2xpZW50IjsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZJREVPX0NPREVDX1ZQOCA9ICJWUDgiOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklERU9fQ09ERUNfVlA5ID0gIlZQOSI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWSURFT19DT0RFQ19IMjY0ID0gIkgyNjQiOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fQ09ERUNfT1BVUyA9ICJvcHVzIjsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0NPREVDX0lTQUMgPSAiSVNBQyI7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWSURFT19DT0RFQ19QQVJBTV9TVEFSVF9CSVRS
QVRFID0gIngtZ29vZ2xlLXN0YXJ0LWJpdHJhdGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgQVVESU9fQ09ERUNfUEFSQU1fQklUUkFURSA9ICJtYXhhdmVyYWdlYml0cmF0ZSI7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19FQ0hPX0NBTkNFTExBVElPTl9DT05T
VFJBSU5UID0gImdvb2dFY2hvQ2FuY2VsbGF0aW9uIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIEFVRElPX0FVVE9fR0FJTl9DT05UUk9MX0NPTlNUUkFJTlQgPSAiZ29vZ0F1dG9HYWlu
Q29udHJvbCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19ISUdIX1BBU1Nf
RklMVEVSX0NPTlNUUkFJTlQgPSAiZ29vZ0hpZ2hwYXNzRmlsdGVyIjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIEFVRElPX05PSVNFX1NVUFBSRVNTSU9OX0NPTlNUUkFJTlQgPSAiZ29v
Z05vaXNlU3VwcHJlc3Npb24iOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9f
TEVWRUxfQ09OVFJPTF9DT05TVFJBSU5UID0gImxldmVsQ29udHJvbCI7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIFN0cmluZyBEVExTX1NSVFBfS0VZX0FHUkVFTUVOVF9DT05TVFJBSU5UID0gIkR0
bHNTcnRwS2V5QWdyZWVtZW50IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhEX1ZJREVP
X1dJRFRIID0gMTI4MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhEX1ZJREVPX0hFSUdI
VCA9IDcyMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJQU19JTl9LQlBTID0gMTAwMDsK
LQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBQZWVyQ29ubmVjdGlvbkNsaWVudCBpbnN0YW5jZSA9
IG5ldyBQZWVyQ29ubmVjdGlvbkNsaWVudCgpOwotICBwcml2YXRlIGZpbmFsIFBDT2JzZXJ2ZXIg
cGNPYnNlcnZlciA9IG5ldyBQQ09ic2VydmVyKCk7Ci0gIHByaXZhdGUgZmluYWwgU0RQT2JzZXJ2
ZXIgc2RwT2JzZXJ2ZXIgPSBuZXcgU0RQT2JzZXJ2ZXIoKTsKLSAgcHJpdmF0ZSBmaW5hbCBTY2hl
ZHVsZWRFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3I7Ci0KLSAgcHJpdmF0ZSBDb250ZXh0IGNvbnRl
eHQ7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZhY3Rvcnk7Ci0gIHByaXZhdGUg
UGVlckNvbm5lY3Rpb24gcGVlckNvbm5lY3Rpb247Ci0gIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5P
cHRpb25zIG9wdGlvbnMgPSBudWxsOwotICBwcml2YXRlIEF1ZGlvU291cmNlIGF1ZGlvU291cmNl
OwotICBwcml2YXRlIFZpZGVvU291cmNlIHZpZGVvU291cmNlOwotICBwcml2YXRlIGJvb2xlYW4g
dmlkZW9DYWxsRW5hYmxlZDsKLSAgcHJpdmF0ZSBib29sZWFuIHByZWZlcklzYWM7Ci0gIHByaXZh
dGUgU3RyaW5nIHByZWZlcnJlZFZpZGVvQ29kZWM7Ci0gIHByaXZhdGUgYm9vbGVhbiB2aWRlb0Nh
cHR1cmVyU3RvcHBlZDsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRXJyb3I7Ci0gIHByaXZhdGUgVGlt
ZXIgc3RhdHNUaW1lcjsKLSAgcHJpdmF0ZSBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBsb2NhbFJl
bmRlcjsKLSAgcHJpdmF0ZSBMaXN0PFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzPiByZW1vdGVSZW5k
ZXJzOwotICBwcml2YXRlIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVyczsK
LSAgcHJpdmF0ZSBNZWRpYUNvbnN0cmFpbnRzIHBjQ29uc3RyYWludHM7Ci0gIHByaXZhdGUgaW50
IHZpZGVvV2lkdGg7Ci0gIHByaXZhdGUgaW50IHZpZGVvSGVpZ2h0OwotICBwcml2YXRlIGludCB2
aWRlb0ZwczsKLSAgcHJpdmF0ZSBNZWRpYUNvbnN0cmFpbnRzIGF1ZGlvQ29uc3RyYWludHM7Ci0g
IHByaXZhdGUgUGFyY2VsRmlsZURlc2NyaXB0b3IgYWVjRHVtcEZpbGVEZXNjcmlwdG9yOwotICBw
cml2YXRlIE1lZGlhQ29uc3RyYWludHMgc2RwTWVkaWFDb25zdHJhaW50czsKLSAgcHJpdmF0ZSBQ
ZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICAvLyBR
dWV1ZWQgcmVtb3RlIElDRSBjYW5kaWRhdGVzIGFyZSBjb25zdW1lZCBvbmx5IGFmdGVyIGJvdGgg
bG9jYWwgYW5kCi0gIC8vIHJlbW90ZSBkZXNjcmlwdGlvbnMgYXJlIHNldC4gU2ltaWxhcmx5IGxv
Y2FsIElDRSBjYW5kaWRhdGVzIGFyZSBzZW50IHRvCi0gIC8vIHJlbW90ZSBwZWVyIGFmdGVyIGJv
dGggbG9jYWwgYW5kIHJlbW90ZSBkZXNjcmlwdGlvbiBhcmUgc2V0LgotICBwcml2YXRlIExpbmtl
ZExpc3Q8SWNlQ2FuZGlkYXRlPiBxdWV1ZWRSZW1vdGVDYW5kaWRhdGVzOwotICBwcml2YXRlIFBl
ZXJDb25uZWN0aW9uRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBib29sZWFuIGlzSW5pdGlhdG9y
OwotICBwcml2YXRlIFNlc3Npb25EZXNjcmlwdGlvbiBsb2NhbFNkcDsgLy8gZWl0aGVyIG9mZmVy
IG9yIGFuc3dlciBTRFAKLSAgcHJpdmF0ZSBNZWRpYVN0cmVhbSBtZWRpYVN0cmVhbTsKLSAgcHJp
dmF0ZSBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXI7Ci0gIC8vIGVuYWJsZVZpZGVvIGlzIHNl
dCB0byB0cnVlIGlmIHZpZGVvIHNob3VsZCBiZSByZW5kZXJlZCBhbmQgc2VudC4KLSAgcHJpdmF0
ZSBib29sZWFuIHJlbmRlclZpZGVvOwotICBwcml2YXRlIFZpZGVvVHJhY2sgbG9jYWxWaWRlb1Ry
YWNrOwotICBwcml2YXRlIFZpZGVvVHJhY2sgcmVtb3RlVmlkZW9UcmFjazsKLSAgcHJpdmF0ZSBS
dHBTZW5kZXIgbG9jYWxWaWRlb1NlbmRlcjsKLSAgLy8gZW5hYmxlQXVkaW8gaXMgc2V0IHRvIHRy
dWUgaWYgYXVkaW8gc2hvdWxkIGJlIHNlbnQuCi0gIHByaXZhdGUgYm9vbGVhbiBlbmFibGVBdWRp
bzsKLSAgcHJpdmF0ZSBBdWRpb1RyYWNrIGxvY2FsQXVkaW9UcmFjazsKLQotICAvKioKLSAgICog
UGVlciBjb25uZWN0aW9uIHBhcmFtZXRlcnMuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIGNsYXNz
IFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyB7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gdmlk
ZW9DYWxsRW5hYmxlZDsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBsb29wYmFjazsKLSAgICBw
dWJsaWMgZmluYWwgYm9vbGVhbiB0cmFjaW5nOwotICAgIHB1YmxpYyBmaW5hbCBpbnQgdmlkZW9X
aWR0aDsKLSAgICBwdWJsaWMgZmluYWwgaW50IHZpZGVvSGVpZ2h0OwotICAgIHB1YmxpYyBmaW5h
bCBpbnQgdmlkZW9GcHM7Ci0gICAgcHVibGljIGZpbmFsIGludCB2aWRlb01heEJpdHJhdGU7Ci0g
ICAgcHVibGljIGZpbmFsIFN0cmluZyB2aWRlb0NvZGVjOwotICAgIHB1YmxpYyBmaW5hbCBib29s
ZWFuIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbjsKLSAgICBwdWJsaWMgZmluYWwgaW50IGF1ZGlv
U3RhcnRCaXRyYXRlOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgYXVkaW9Db2RlYzsKLSAgICBw
dWJsaWMgZmluYWwgYm9vbGVhbiBub0F1ZGlvUHJvY2Vzc2luZzsKLSAgICBwdWJsaWMgZmluYWwg
Ym9vbGVhbiBhZWNEdW1wOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHVzZU9wZW5TTEVTOwot
ICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGRpc2FibGVCdWlsdEluQUVDOwotICAgIHB1YmxpYyBm
aW5hbCBib29sZWFuIGRpc2FibGVCdWlsdEluQUdDOwotICAgIHB1YmxpYyBmaW5hbCBib29sZWFu
IGRpc2FibGVCdWlsdEluTlM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gZW5hYmxlTGV2ZWxD
b250cm9sOwotCi0gICAgcHVibGljIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyhib29sZWFuIHZp
ZGVvQ2FsbEVuYWJsZWQsIGJvb2xlYW4gbG9vcGJhY2ssIGJvb2xlYW4gdHJhY2luZywKLSAgICAg
ICAgaW50IHZpZGVvV2lkdGgsIGludCB2aWRlb0hlaWdodCwgaW50IHZpZGVvRnBzLCBpbnQgdmlk
ZW9NYXhCaXRyYXRlLCBTdHJpbmcgdmlkZW9Db2RlYywKLSAgICAgICAgYm9vbGVhbiB2aWRlb0Nv
ZGVjSHdBY2NlbGVyYXRpb24sIGludCBhdWRpb1N0YXJ0Qml0cmF0ZSwgU3RyaW5nIGF1ZGlvQ29k
ZWMsCi0gICAgICAgIGJvb2xlYW4gbm9BdWRpb1Byb2Nlc3NpbmcsIGJvb2xlYW4gYWVjRHVtcCwg
Ym9vbGVhbiB1c2VPcGVuU0xFUywgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbkFFQywKLSAgICAgICAg
Ym9vbGVhbiBkaXNhYmxlQnVpbHRJbkFHQywgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbk5TLCBib29s
ZWFuIGVuYWJsZUxldmVsQ29udHJvbCkgewotICAgICAgdGhpcy52aWRlb0NhbGxFbmFibGVkID0g
dmlkZW9DYWxsRW5hYmxlZDsKLSAgICAgIHRoaXMubG9vcGJhY2sgPSBsb29wYmFjazsKLSAgICAg
IHRoaXMudHJhY2luZyA9IHRyYWNpbmc7Ci0gICAgICB0aGlzLnZpZGVvV2lkdGggPSB2aWRlb1dp
ZHRoOwotICAgICAgdGhpcy52aWRlb0hlaWdodCA9IHZpZGVvSGVpZ2h0OwotICAgICAgdGhpcy52
aWRlb0ZwcyA9IHZpZGVvRnBzOwotICAgICAgdGhpcy52aWRlb01heEJpdHJhdGUgPSB2aWRlb01h
eEJpdHJhdGU7Ci0gICAgICB0aGlzLnZpZGVvQ29kZWMgPSB2aWRlb0NvZGVjOwotICAgICAgdGhp
cy52aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24gPSB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb247Ci0g
ICAgICB0aGlzLmF1ZGlvU3RhcnRCaXRyYXRlID0gYXVkaW9TdGFydEJpdHJhdGU7Ci0gICAgICB0
aGlzLmF1ZGlvQ29kZWMgPSBhdWRpb0NvZGVjOwotICAgICAgdGhpcy5ub0F1ZGlvUHJvY2Vzc2lu
ZyA9IG5vQXVkaW9Qcm9jZXNzaW5nOwotICAgICAgdGhpcy5hZWNEdW1wID0gYWVjRHVtcDsKLSAg
ICAgIHRoaXMudXNlT3BlblNMRVMgPSB1c2VPcGVuU0xFUzsKLSAgICAgIHRoaXMuZGlzYWJsZUJ1
aWx0SW5BRUMgPSBkaXNhYmxlQnVpbHRJbkFFQzsKLSAgICAgIHRoaXMuZGlzYWJsZUJ1aWx0SW5B
R0MgPSBkaXNhYmxlQnVpbHRJbkFHQzsKLSAgICAgIHRoaXMuZGlzYWJsZUJ1aWx0SW5OUyA9IGRp
c2FibGVCdWlsdEluTlM7Ci0gICAgICB0aGlzLmVuYWJsZUxldmVsQ29udHJvbCA9IGVuYWJsZUxl
dmVsQ29udHJvbDsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogUGVlciBjb25uZWN0aW9uIGV2
ZW50cy4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgUGVlckNvbm5lY3Rpb25FdmVudHMgewot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgbG9jYWwgU0RQIGlzIGNyZWF0ZWQg
YW5kIHNldC4KLSAgICAgKi8KLSAgICB2b2lkIG9uTG9jYWxEZXNjcmlwdGlvbihmaW5hbCBTZXNz
aW9uRGVzY3JpcHRpb24gc2RwKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9u
Y2UgbG9jYWwgSWNlIGNhbmRpZGF0ZSBpcyBnZW5lcmF0ZWQuCi0gICAgICovCi0gICAgdm9pZCBv
bkljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQotICAgIC8qKgot
ICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgbG9jYWwgSUNFIGNhbmRpZGF0ZXMgYXJlIHJlbW92
ZWQuCi0gICAgICovCi0gICAgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNh
bmRpZGF0ZVtdIGNhbmRpZGF0ZXMpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQg
b25jZSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkIChJY2VDb25uZWN0aW9uU3RhdGUgaXMKLSAg
ICAgKiBDT05ORUNURUQpLgotICAgICAqLwotICAgIHZvaWQgb25JY2VDb25uZWN0ZWQoKTsKLQot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgY29ubmVjdGlvbiBpcyBjbG9zZWQg
KEljZUNvbm5lY3Rpb25TdGF0ZSBpcwotICAgICAqIERJU0NPTk5FQ1RFRCkuCi0gICAgICovCi0g
ICAgdm9pZCBvbkljZURpc2Nvbm5lY3RlZCgpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sg
ZmlyZWQgb25jZSBwZWVyIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgotICAgICAqLwotICAgIHZvaWQg
b25QZWVyQ29ubmVjdGlvbkNsb3NlZCgpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmly
ZWQgb25jZSBwZWVyIGNvbm5lY3Rpb24gc3RhdGlzdGljcyBpcyByZWFkeS4KLSAgICAgKi8KLSAg
ICB2b2lkIG9uUGVlckNvbm5lY3Rpb25TdGF0c1JlYWR5KGZpbmFsIFN0YXRzUmVwb3J0W10gcmVw
b3J0cyk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHBlZXIgY29ubmVj
dGlvbiBlcnJvciBoYXBwZW5lZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uUGVlckNvbm5lY3Rpb25F
cnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgcHJpdmF0ZSBQZWVyQ29u
bmVjdGlvbkNsaWVudCgpIHsKLSAgICAvLyBFeGVjdXRvciB0aHJlYWQgaXMgc3RhcnRlZCBvbmNl
IGluIHByaXZhdGUgY3RvciBhbmQgaXMgdXNlZCBmb3IgYWxsCi0gICAgLy8gcGVlciBjb25uZWN0
aW9uIEFQSSBjYWxscyB0byBlbnN1cmUgbmV3IHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5IGlzCi0g
ICAgLy8gY3JlYXRlZCBvbiB0aGUgc2FtZSB0aHJlYWQgYXMgcHJldmlvdXNseSBkZXN0cm95ZWQg
ZmFjdG9yeS4KLSAgICBleGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRTY2hlZHVs
ZWRFeGVjdXRvcigpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBQZWVyQ29ubmVjdGlvbkNsaWVu
dCBnZXRJbnN0YW5jZSgpIHsKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBzZXRQZWVyQ29ubmVjdGlvbkZhY3RvcnlPcHRpb25zKFBlZXJDb25uZWN0aW9uRmFjdG9y
eS5PcHRpb25zIG9wdGlvbnMpIHsKLSAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5KGZpbmFsIENvbnRleHQg
Y29udGV4dCwKLSAgICAgIGZpbmFsIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwZWVyQ29ubmVj
dGlvblBhcmFtZXRlcnMsIGZpbmFsIFBlZXJDb25uZWN0aW9uRXZlbnRzIGV2ZW50cykgewotICAg
IHRoaXMucGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJz
OwotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICAgIHZpZGVvQ2FsbEVuYWJsZWQgPSBwZWVy
Q29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9DYWxsRW5hYmxlZDsKLSAgICAvLyBSZXNldCB2YXJp
YWJsZXMgdG8gaW5pdGlhbCBzdGF0ZXMuCi0gICAgdGhpcy5jb250ZXh0ID0gbnVsbDsKLSAgICBm
YWN0b3J5ID0gbnVsbDsKLSAgICBwZWVyQ29ubmVjdGlvbiA9IG51bGw7Ci0gICAgcHJlZmVySXNh
YyA9IGZhbHNlOwotICAgIHZpZGVvQ2FwdHVyZXJTdG9wcGVkID0gZmFsc2U7Ci0gICAgaXNFcnJv
ciA9IGZhbHNlOwotICAgIHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMgPSBudWxsOwotICAgIGxvY2Fs
U2RwID0gbnVsbDsgLy8gZWl0aGVyIG9mZmVyIG9yIGFuc3dlciBTRFAKLSAgICBtZWRpYVN0cmVh
bSA9IG51bGw7Ci0gICAgdmlkZW9DYXB0dXJlciA9IG51bGw7Ci0gICAgcmVuZGVyVmlkZW8gPSB0
cnVlOwotICAgIGxvY2FsVmlkZW9UcmFjayA9IG51bGw7Ci0gICAgcmVtb3RlVmlkZW9UcmFjayA9
IG51bGw7Ci0gICAgbG9jYWxWaWRlb1NlbmRlciA9IG51bGw7Ci0gICAgZW5hYmxlQXVkaW8gPSB0
cnVlOwotICAgIGxvY2FsQXVkaW9UcmFjayA9IG51bGw7Ci0gICAgc3RhdHNUaW1lciA9IG5ldyBU
aW1lcigpOwotCi0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY3JlYXRlUGVlckNv
bm5lY3Rpb25GYWN0b3J5SW50ZXJuYWwoY29udGV4dCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbihmaW5hbCBFZ2xCYXNlLkNvbnRl
eHQgcmVuZGVyRUdMQ29udGV4dCwKLSAgICAgIGZpbmFsIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tz
IGxvY2FsUmVuZGVyLCBmaW5hbCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyByZW1vdGVSZW5kZXIs
Ci0gICAgICBmaW5hbCBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIsIGZpbmFsIFNpZ25hbGlu
Z1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVycykgewotICAgIGNyZWF0ZVBlZXJDb25uZWN0
aW9uKHJlbmRlckVHTENvbnRleHQsIGxvY2FsUmVuZGVyLCBDb2xsZWN0aW9ucy5zaW5nbGV0b25M
aXN0KHJlbW90ZVJlbmRlciksCi0gICAgICAgIHZpZGVvQ2FwdHVyZXIsIHNpZ25hbGluZ1BhcmFt
ZXRlcnMpOwotICB9Ci0gIHB1YmxpYyB2b2lkIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGZpbmFsIEVn
bEJhc2UuQ29udGV4dCByZW5kZXJFR0xDb250ZXh0LAotICAgICAgZmluYWwgVmlkZW9SZW5kZXJl
ci5DYWxsYmFja3MgbG9jYWxSZW5kZXIsIGZpbmFsIExpc3Q8VmlkZW9SZW5kZXJlci5DYWxsYmFj
a3M+IHJlbW90ZVJlbmRlcnMsCi0gICAgICBmaW5hbCBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVy
ZXIsIGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVycykgewotICAg
IGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPT0gbnVsbCkgewotICAgICAgTG9nLmUoVEFH
LCAiQ3JlYXRpbmcgcGVlciBjb25uZWN0aW9uIHdpdGhvdXQgaW5pdGlhbGl6aW5nIGZhY3Rvcnku
Iik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHRoaXMubG9jYWxSZW5kZXIgPSBsb2NhbFJl
bmRlcjsKLSAgICB0aGlzLnJlbW90ZVJlbmRlcnMgPSByZW1vdGVSZW5kZXJzOwotICAgIHRoaXMu
dmlkZW9DYXB0dXJlciA9IHZpZGVvQ2FwdHVyZXI7Ci0gICAgdGhpcy5zaWduYWxpbmdQYXJhbWV0
ZXJzID0gc2lnbmFsaW5nUGFyYW1ldGVyczsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5u
YWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAg
ICAgICB0cnkgewotICAgICAgICAgIGNyZWF0ZU1lZGlhQ29uc3RyYWludHNJbnRlcm5hbCgpOwot
ICAgICAgICAgIGNyZWF0ZVBlZXJDb25uZWN0aW9uSW50ZXJuYWwocmVuZGVyRUdMQ29udGV4dCk7
Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3Io
IkZhaWxlZCB0byBjcmVhdGUgcGVlciBjb25uZWN0aW9uOiAiICsgZS5nZXRNZXNzYWdlKCkpOwot
ICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0g
IHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGNsb3NlSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyBib29s
ZWFuIGlzVmlkZW9DYWxsRW5hYmxlZCgpIHsKLSAgICByZXR1cm4gdmlkZW9DYWxsRW5hYmxlZDsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnlJbnRlcm5h
bChDb250ZXh0IGNvbnRleHQpIHsKLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6
ZUludGVybmFsVHJhY2VyKCk7Ci0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy50cmFj
aW5nKSB7Ci0gICAgICBQZWVyQ29ubmVjdGlvbkZhY3Rvcnkuc3RhcnRJbnRlcm5hbFRyYWNpbmdD
YXB0dXJlKAotICAgICAgICAgIEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9y
eSgpLmdldEFic29sdXRlUGF0aCgpICsgRmlsZS5zZXBhcmF0b3IKLSAgICAgICAgICArICJ3ZWJy
dGMtdHJhY2UudHh0Iik7Ci0gICAgfQotICAgIExvZy5kKFRBRywKLSAgICAgICAgIkNyZWF0ZSBw
ZWVyIGNvbm5lY3Rpb24gZmFjdG9yeS4gVXNlIHZpZGVvOiAiICsgcGVlckNvbm5lY3Rpb25QYXJh
bWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpOwotICAgIGlzRXJyb3IgPSBmYWxzZTsKLQotICAgIC8v
IEluaXRpYWxpemUgZmllbGQgdHJpYWxzLgotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5pbml0
aWFsaXplRmllbGRUcmlhbHMoIiIpOwotCi0gICAgLy8gQ2hlY2sgcHJlZmVycmVkIHZpZGVvIGNv
ZGVjLgotICAgIHByZWZlcnJlZFZpZGVvQ29kZWMgPSBWSURFT19DT0RFQ19WUDg7Ci0gICAgaWYg
KHZpZGVvQ2FsbEVuYWJsZWQgJiYgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvQ29kZWMg
IT0gbnVsbCkgewotICAgICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NvZGVj
LmVxdWFscyhWSURFT19DT0RFQ19WUDkpKSB7Ci0gICAgICAgIHByZWZlcnJlZFZpZGVvQ29kZWMg
PSBWSURFT19DT0RFQ19WUDk7Ci0gICAgICB9IGVsc2UgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycy52aWRlb0NvZGVjLmVxdWFscyhWSURFT19DT0RFQ19IMjY0KSkgewotICAgICAgICBwcmVm
ZXJyZWRWaWRlb0NvZGVjID0gVklERU9fQ09ERUNfSDI2NDsKLSAgICAgIH0KLSAgICB9Ci0gICAg
TG9nLmQoVEFHLCAiUGVyZWZlcnJlZCB2aWRlbyBjb2RlYzogIiArIHByZWZlcnJlZFZpZGVvQ29k
ZWMpOwotCi0gICAgLy8gQ2hlY2sgaWYgSVNBQyBpcyB1c2VkIGJ5IGRlZmF1bHQuCi0gICAgcHJl
ZmVySXNhYyA9IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hdWRpb0NvZGVjICE9IG51bGwKLSAg
ICAgICAgJiYgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmF1ZGlvQ29kZWMuZXF1YWxzKEFVRElP
X0NPREVDX0lTQUMpOwotCi0gICAgLy8gRW5hYmxlL2Rpc2FibGUgT3BlblNMIEVTIHBsYXliYWNr
LgotICAgIGlmICghcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnVzZU9wZW5TTEVTKSB7Ci0gICAg
ICBMb2cuZChUQUcsICJEaXNhYmxlIE9wZW5TTCBFUyBhdWRpbyBldmVuIGlmIGRldmljZSBzdXBw
b3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9NYW5hZ2VyLnNldEJsYWNrbGlzdERldmljZUZv
ck9wZW5TTEVTVXNhZ2UodHJ1ZSAvKiBlbmFibGUgKi8pOwotICAgIH0gZWxzZSB7Ci0gICAgICBM
b2cuZChUQUcsICJBbGxvdyBPcGVuU0wgRVMgYXVkaW8gaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7
Ci0gICAgICBXZWJSdGNBdWRpb01hbmFnZXIuc2V0QmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNV
c2FnZShmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5k
aXNhYmxlQnVpbHRJbkFFQykgewotICAgICAgTG9nLmQoVEFHLCAiRGlzYWJsZSBidWlsdC1pbiBB
RUMgZXZlbiBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMu
c2V0V2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcih0cnVlKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgTG9nLmQoVEFHLCAiRW5hYmxlIGJ1aWx0LWluIEFFQyBpZiBkZXZpY2Ugc3VwcG9ydHMg
aXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWRBY291c3RpY0VjaG9D
YW5jZWxlcihmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVy
cy5kaXNhYmxlQnVpbHRJbkFHQykgewotICAgICAgTG9nLmQoVEFHLCAiRGlzYWJsZSBidWlsdC1p
biBBR0MgZXZlbiBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRp
bHMuc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJvbCh0cnVlKTsKLSAgICB9IGVsc2Ug
ewotICAgICAgTG9nLmQoVEFHLCAiRW5hYmxlIGJ1aWx0LWluIEFHQyBpZiBkZXZpY2Ugc3VwcG9y
dHMgaXQiKTsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNH
YWluQ29udHJvbChmYWxzZSk7Ci0gICAgfQotCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycy5kaXNhYmxlQnVpbHRJbk5TKSB7Ci0gICAgICBMb2cuZChUQUcsICJEaXNhYmxlIGJ1aWx0
LWluIE5TIGV2ZW4gaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0
aWxzLnNldFdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKHRydWUpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICBMb2cuZChUQUcsICJFbmFibGUgYnVpbHQtaW4gTlMgaWYgZGV2aWNlIHN1cHBvcnRzIGl0
Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29y
KGZhbHNlKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgcGVlciBjb25uZWN0aW9uIGZhY3Rvcnku
Ci0gICAgaWYgKCFQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxz
KAotICAgICAgICAgICAgY29udGV4dCwgdHJ1ZSwgdHJ1ZSwgcGVlckNvbm5lY3Rpb25QYXJhbWV0
ZXJzLnZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbikpIHsKLSAgICAgIGV2ZW50cy5vblBlZXJDb25u
ZWN0aW9uRXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplQW5kcm9pZEdsb2JhbHMiKTsKLSAgICB9
Ci0gICAgaWYgKG9wdGlvbnMgIT0gbnVsbCkgewotICAgICAgTG9nLmQoVEFHLCAiRmFjdG9yeSBu
ZXR3b3JrSWdub3JlTWFzayBvcHRpb246ICIgKyBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrKTsK
LSAgICB9Ci0gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICBmYWN0b3J5ID0gbmV3IFBl
ZXJDb25uZWN0aW9uRmFjdG9yeShvcHRpb25zKTsKLSAgICBMb2cuZChUQUcsICJQZWVyIGNvbm5l
Y3Rpb24gZmFjdG9yeSBjcmVhdGVkLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZU1l
ZGlhQ29uc3RyYWludHNJbnRlcm5hbCgpIHsKLSAgICAvLyBDcmVhdGUgcGVlciBjb25uZWN0aW9u
IGNvbnN0cmFpbnRzLgotICAgIHBjQ29uc3RyYWludHMgPSBuZXcgTWVkaWFDb25zdHJhaW50cygp
OwotICAgIC8vIEVuYWJsZSBEVExTIGZvciBub3JtYWwgY2FsbHMgYW5kIGRpc2FibGUgZm9yIGxv
b3BiYWNrIGNhbGxzLgotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2sp
IHsKLSAgICAgIHBjQ29uc3RyYWludHMub3B0aW9uYWwuYWRkKAotICAgICAgICAgIG5ldyBNZWRp
YUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihEVExTX1NSVFBfS0VZX0FHUkVFTUVOVF9DT05TVFJB
SU5ULCAiZmFsc2UiKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHBjQ29uc3RyYWludHMub3B0aW9u
YWwuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihEVExT
X1NSVFBfS0VZX0FHUkVFTUVOVF9DT05TVFJBSU5ULCAidHJ1ZSIpKTsKLSAgICB9Ci0KLSAgICAv
LyBDaGVjayBpZiB0aGVyZSBpcyBhIGNhbWVyYSBvbiBkZXZpY2UgYW5kIGRpc2FibGUgdmlkZW8g
Y2FsbCBpZiBub3QuCi0gICAgaWYgKHZpZGVvQ2FwdHVyZXIgPT0gbnVsbCkgewotICAgICAgTG9n
LncoVEFHLCAiTm8gY2FtZXJhIG9uIGRldmljZS4gU3dpdGNoIHRvIGF1ZGlvIG9ubHkgY2FsbC4i
KTsKLSAgICAgIHZpZGVvQ2FsbEVuYWJsZWQgPSBmYWxzZTsKLSAgICB9Ci0gICAgLy8gQ3JlYXRl
IHZpZGVvIGNvbnN0cmFpbnRzIGlmIHZpZGVvIGNhbGwgaXMgZW5hYmxlZC4KLSAgICBpZiAodmlk
ZW9DYWxsRW5hYmxlZCkgewotICAgICAgdmlkZW9XaWR0aCA9IHBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycy52aWRlb1dpZHRoOwotICAgICAgdmlkZW9IZWlnaHQgPSBwZWVyQ29ubmVjdGlvblBhcmFt
ZXRlcnMudmlkZW9IZWlnaHQ7Ci0gICAgICB2aWRlb0ZwcyA9IHBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycy52aWRlb0ZwczsKLQotICAgICAgLy8gSWYgdmlkZW8gcmVzb2x1dGlvbiBpcyBub3Qgc3Bl
Y2lmaWVkLCBkZWZhdWx0IHRvIEhELgotICAgICAgaWYgKHZpZGVvV2lkdGggPT0gMCB8fCB2aWRl
b0hlaWdodCA9PSAwKSB7Ci0gICAgICAgIHZpZGVvV2lkdGggPSBIRF9WSURFT19XSURUSDsKLSAg
ICAgICAgdmlkZW9IZWlnaHQgPSBIRF9WSURFT19IRUlHSFQ7Ci0gICAgICB9Ci0KLSAgICAgIC8v
IElmIGZwcyBpcyBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0IHRvIDMwLgotICAgICAgaWYgKHZpZGVv
RnBzID09IDApIHsKLSAgICAgICAgdmlkZW9GcHMgPSAzMDsKLSAgICAgIH0KLSAgICAgIExvZ2dp
bmcuZChUQUcsICJDYXB0dXJpbmcgZm9ybWF0OiAiICsgdmlkZW9XaWR0aCArICJ4IiArIHZpZGVv
SGVpZ2h0ICsgIkAiICsgdmlkZW9GcHMpOwotICAgIH0KLQotICAgIC8vIENyZWF0ZSBhdWRpbyBj
b25zdHJhaW50cy4KLSAgICBhdWRpb0NvbnN0cmFpbnRzID0gbmV3IE1lZGlhQ29uc3RyYWludHMo
KTsKLSAgICAvLyBhZGRlZCBmb3IgYXVkaW8gcGVyZm9ybWFuY2UgbWVhc3VyZW1lbnRzCi0gICAg
aWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5ub0F1ZGlvUHJvY2Vzc2luZykgewotICAgICAg
TG9nLmQoVEFHLCAiRGlzYWJsaW5nIGF1ZGlvIHByb2Nlc3NpbmciKTsKLSAgICAgIGF1ZGlvQ29u
c3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5L
ZXlWYWx1ZVBhaXIoQVVESU9fRUNIT19DQU5DRUxMQVRJT05fQ09OU1RSQUlOVCwgImZhbHNlIikp
OwotICAgICAgYXVkaW9Db25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBN
ZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihBVURJT19BVVRPX0dBSU5fQ09OVFJPTF9DT05T
VFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAgICBhdWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQo
Ci0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKEFVRElPX0hJR0hf
UEFTU19GSUxURVJfQ09OU1RSQUlOVCwgImZhbHNlIikpOwotICAgICAgYXVkaW9Db25zdHJhaW50
cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVl
UGFpcihBVURJT19OT0lTRV9TVVBQUkVTU0lPTl9DT05TVFJBSU5ULCAiZmFsc2UiKSk7Ci0gICAg
fQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuZW5hYmxlTGV2ZWxDb250cm9sKSB7
Ci0gICAgICBMb2cuZChUQUcsICJFbmFibGluZyBsZXZlbCBjb250cm9sLiIpOwotICAgICAgYXVk
aW9Db25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFp
bnRzLktleVZhbHVlUGFpcihBVURJT19MRVZFTF9DT05UUk9MX0NPTlNUUkFJTlQsICJ0cnVlIikp
OwotICAgIH0KLSAgICAvLyBDcmVhdGUgU0RQIGNvbnN0cmFpbnRzLgotICAgIHNkcE1lZGlhQ29u
c3RyYWludHMgPSBuZXcgTWVkaWFDb25zdHJhaW50cygpOwotICAgIHNkcE1lZGlhQ29uc3RyYWlu
dHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQ
YWlyKCJPZmZlclRvUmVjZWl2ZUF1ZGlvIiwgInRydWUiKSk7Ci0gICAgaWYgKHZpZGVvQ2FsbEVu
YWJsZWQgfHwgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICBzZHBN
ZWRpYUNvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3Ry
YWludHMuS2V5VmFsdWVQYWlyKCJPZmZlclRvUmVjZWl2ZVZpZGVvIiwgInRydWUiKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHNkcE1lZGlhQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAg
ICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoIk9mZmVyVG9SZWNlaXZlVmlk
ZW8iLCAiZmFsc2UiKSk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVBlZXJD
b25uZWN0aW9uSW50ZXJuYWwoRWdsQmFzZS5Db250ZXh0IHJlbmRlckVHTENvbnRleHQpIHsKLSAg
ICBpZiAoZmFjdG9yeSA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgIExvZy5lKFRBRywgIlBl
ZXJjb25uZWN0aW9uIGZhY3RvcnkgaXMgbm90IGNyZWF0ZWQiKTsKLSAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgTG9nLmQoVEFHLCAiQ3JlYXRlIHBlZXIgY29ubmVjdGlvbi4iKTsKLQotICAgIExv
Zy5kKFRBRywgIlBDQ29uc3RyYWludHM6ICIgKyBwY0NvbnN0cmFpbnRzLnRvU3RyaW5nKCkpOwot
ICAgIHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMgPSBuZXcgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+
KCk7Ci0KLSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgTG9nLmQoVEFHLCAiRUdM
Q29udGV4dDogIiArIHJlbmRlckVHTENvbnRleHQpOwotICAgICAgZmFjdG9yeS5zZXRWaWRlb0h3
QWNjZWxlcmF0aW9uT3B0aW9ucyhyZW5kZXJFR0xDb250ZXh0LCByZW5kZXJFR0xDb250ZXh0KTsK
LSAgICB9Ci0KLSAgICBQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uIHJ0Y0NvbmZpZyA9
Ci0gICAgICAgIG5ldyBQZWVyQ29ubmVjdGlvbi5SVENDb25maWd1cmF0aW9uKHNpZ25hbGluZ1Bh
cmFtZXRlcnMuaWNlU2VydmVycyk7Ci0gICAgLy8gVENQIGNhbmRpZGF0ZXMgYXJlIG9ubHkgdXNl
ZnVsIHdoZW4gY29ubmVjdGluZyB0byBhIHNlcnZlciB0aGF0IHN1cHBvcnRzCi0gICAgLy8gSUNF
LVRDUC4KLSAgICBydGNDb25maWcudGNwQ2FuZGlkYXRlUG9saWN5ID0gUGVlckNvbm5lY3Rpb24u
VGNwQ2FuZGlkYXRlUG9saWN5LkRJU0FCTEVEOwotICAgIHJ0Y0NvbmZpZy5idW5kbGVQb2xpY3kg
PSBQZWVyQ29ubmVjdGlvbi5CdW5kbGVQb2xpY3kuTUFYQlVORExFOwotICAgIHJ0Y0NvbmZpZy5y
dGNwTXV4UG9saWN5ID0gUGVlckNvbm5lY3Rpb24uUnRjcE11eFBvbGljeS5SRVFVSVJFOwotICAg
IHJ0Y0NvbmZpZy5jb250aW51YWxHYXRoZXJpbmdQb2xpY3kgPSBQZWVyQ29ubmVjdGlvbi5Db250
aW51YWxHYXRoZXJpbmdQb2xpY3kuR0FUSEVSX0NPTlRJTlVBTExZOwotICAgIC8vIFVzZSBFQ0RT
QSBlbmNyeXB0aW9uLgotICAgIHJ0Y0NvbmZpZy5rZXlUeXBlID0gUGVlckNvbm5lY3Rpb24uS2V5
VHlwZS5FQ0RTQTsKLQotICAgIHBlZXJDb25uZWN0aW9uID0gZmFjdG9yeS5jcmVhdGVQZWVyQ29u
bmVjdGlvbihydGNDb25maWcsIHBjQ29uc3RyYWludHMsIHBjT2JzZXJ2ZXIpOwotICAgIGlzSW5p
dGlhdG9yID0gZmFsc2U7Ci0KLSAgICAvLyBTZXQgZGVmYXVsdCBXZWJSVEMgdHJhY2luZyBhbmQg
SU5GTyBsaWJqaW5nbGUgbG9nZ2luZy4KLSAgICAvLyBOT1RFOiB0aGlzIF9tdXN0XyBoYXBwZW4g
d2hpbGUgfGZhY3Rvcnl8IGlzIGFsaXZlIQotICAgIExvZ2dpbmcuZW5hYmxlVHJhY2luZygibG9n
Y2F0OiIsIEVudW1TZXQub2YoTG9nZ2luZy5UcmFjZUxldmVsLlRSQUNFX0RFRkFVTFQpKTsKLSAg
ICBMb2dnaW5nLmVuYWJsZUxvZ1RvRGVidWdPdXRwdXQoTG9nZ2luZy5TZXZlcml0eS5MU19JTkZP
KTsKLQotICAgIG1lZGlhU3RyZWFtID0gZmFjdG9yeS5jcmVhdGVMb2NhbE1lZGlhU3RyZWFtKCJB
UkRBTVMiKTsKLSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgbWVkaWFTdHJlYW0u
YWRkVHJhY2soY3JlYXRlVmlkZW9UcmFjayh2aWRlb0NhcHR1cmVyKSk7Ci0gICAgfQotCi0gICAg
bWVkaWFTdHJlYW0uYWRkVHJhY2soY3JlYXRlQXVkaW9UcmFjaygpKTsKLSAgICBwZWVyQ29ubmVj
dGlvbi5hZGRTdHJlYW0obWVkaWFTdHJlYW0pOwotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7
Ci0gICAgICBmaW5kVmlkZW9TZW5kZXIoKTsKLSAgICB9Ci0KLSAgICBpZiAocGVlckNvbm5lY3Rp
b25QYXJhbWV0ZXJzLmFlY0R1bXApIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIGFlY0R1bXBGaWxl
RGVzY3JpcHRvciA9Ci0gICAgICAgICAgICBQYXJjZWxGaWxlRGVzY3JpcHRvci5vcGVuKG5ldyBG
aWxlKEVudmlyb25tZW50LmdldEV4dGVybmFsU3RvcmFnZURpcmVjdG9yeSgpLmdldFBhdGgoKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBGaWxlLnNlcGFyYXRv
ciArICJEb3dubG9hZC9hdWRpby5hZWNkdW1wIiksCi0gICAgICAgICAgICAgICAgUGFyY2VsRmls
ZURlc2NyaXB0b3IuTU9ERV9SRUFEX1dSSVRFIHwgUGFyY2VsRmlsZURlc2NyaXB0b3IuTU9ERV9D
UkVBVEUKLSAgICAgICAgICAgICAgICAgICAgfCBQYXJjZWxGaWxlRGVzY3JpcHRvci5NT0RFX1RS
VU5DQVRFKTsKLSAgICAgICAgZmFjdG9yeS5zdGFydEFlY0R1bXAoYWVjRHVtcEZpbGVEZXNjcmlw
dG9yLmdldEZkKCksIC0xKTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgTG9nLmUoVEFHLCAiQ2FuIG5vdCBvcGVuIGFlY2R1bXAgZmlsZSIsIGUpOwotICAgICAgfQot
ICAgIH0KLQotICAgIExvZy5kKFRBRywgIlBlZXIgY29ubmVjdGlvbiBjcmVhdGVkLiIpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGNsb3NlSW50ZXJuYWwoKSB7Ci0gICAgaWYgKGZhY3RvcnkgIT0g
bnVsbCAmJiBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuYWVjRHVtcCkgewotICAgICAgZmFjdG9y
eS5zdG9wQWVjRHVtcCgpOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDbG9zaW5nIHBlZXIgY29u
bmVjdGlvbi4iKTsKLSAgICBzdGF0c1RpbWVyLmNhbmNlbCgpOwotICAgIGlmIChwZWVyQ29ubmVj
dGlvbiAhPSBudWxsKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbi5kaXNwb3NlKCk7Ci0gICAgICBw
ZWVyQ29ubmVjdGlvbiA9IG51bGw7Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkNsb3NpbmcgYXVk
aW8gc291cmNlLiIpOwotICAgIGlmIChhdWRpb1NvdXJjZSAhPSBudWxsKSB7Ci0gICAgICBhdWRp
b1NvdXJjZS5kaXNwb3NlKCk7Ci0gICAgICBhdWRpb1NvdXJjZSA9IG51bGw7Ci0gICAgfQotICAg
IExvZy5kKFRBRywgIlN0b3BwaW5nIGNhcHR1cmUuIik7Ci0gICAgaWYgKHZpZGVvQ2FwdHVyZXIg
IT0gbnVsbCkgewotICAgICAgdHJ5IHsKLSAgICAgICAgdmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVy
ZSgpOwotICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICB0
aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgIH0KLSAgICAgIHZpZGVvQ2FwdHVy
ZXJTdG9wcGVkID0gdHJ1ZTsKLSAgICAgIHZpZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotICAgICAg
dmlkZW9DYXB0dXJlciA9IG51bGw7Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkNsb3Npbmcgdmlk
ZW8gc291cmNlLiIpOwotICAgIGlmICh2aWRlb1NvdXJjZSAhPSBudWxsKSB7Ci0gICAgICB2aWRl
b1NvdXJjZS5kaXNwb3NlKCk7Ci0gICAgICB2aWRlb1NvdXJjZSA9IG51bGw7Ci0gICAgfQotICAg
IExvZy5kKFRBRywgIkNsb3NpbmcgcGVlciBjb25uZWN0aW9uIGZhY3RvcnkuIik7Ci0gICAgaWYg
KGZhY3RvcnkgIT0gbnVsbCkgewotICAgICAgZmFjdG9yeS5kaXNwb3NlKCk7Ci0gICAgICBmYWN0
b3J5ID0gbnVsbDsKLSAgICB9Ci0gICAgb3B0aW9ucyA9IG51bGw7Ci0gICAgTG9nLmQoVEFHLCAi
Q2xvc2luZyBwZWVyIGNvbm5lY3Rpb24gZG9uZS4iKTsKLSAgICBldmVudHMub25QZWVyQ29ubmVj
dGlvbkNsb3NlZCgpOwotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5zdG9wSW50ZXJuYWxUcmFj
aW5nQ2FwdHVyZSgpOwotICAgIFBlZXJDb25uZWN0aW9uRmFjdG9yeS5zaHV0ZG93bkludGVybmFs
VHJhY2VyKCk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc0hEVmlkZW8oKSB7Ci0gICAgaWYg
KCF2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHZpZGVvV2lkdGggKiB2aWRlb0hlaWdodCA+PSAxMjgwICogNzIwOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIGdldFN0YXRzKCkgewotICAgIGlmIChwZWVyQ29ubmVjdGlvbiA9PSBudWxs
IHx8IGlzRXJyb3IpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYm9vbGVhbiBzdWNjZXNz
ID0gcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobmV3IFN0YXRzT2JzZXJ2ZXIoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ29tcGxldGUoZmluYWwgU3RhdHNSZXBvcnRb
XSByZXBvcnRzKSB7Ci0gICAgICAgIGV2ZW50cy5vblBlZXJDb25uZWN0aW9uU3RhdHNSZWFkeShy
ZXBvcnRzKTsKLSAgICAgIH0KLSAgICB9LCBudWxsKTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKLSAg
ICAgIExvZy5lKFRBRywgImdldFN0YXRzKCkgcmV0dXJucyBmYWxzZSEiKTsKLSAgICB9Ci0gIH0K
LQotICBwdWJsaWMgdm9pZCBlbmFibGVTdGF0c0V2ZW50cyhib29sZWFuIGVuYWJsZSwgaW50IHBl
cmlvZE1zKSB7Ci0gICAgaWYgKGVuYWJsZSkgewotICAgICAgdHJ5IHsKLSAgICAgICAgc3RhdHNU
aW1lci5zY2hlZHVsZShuZXcgVGltZXJUYXNrKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAg
ICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgIGdldFN0YXRzKCk7Ci0gICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfSwgMCwgcGVy
aW9kTXMpOwotICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nLmUoVEFH
LCAiQ2FuIG5vdCBzY2hlZHVsZSBzdGF0aXN0aWNzIHRpbWVyIiwgZSk7Ci0gICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgIHN0YXRzVGltZXIuY2FuY2VsKCk7Ci0gICAgfQotICB9Ci0KLSAgcHVi
bGljIHZvaWQgc2V0QXVkaW9FbmFibGVkKGZpbmFsIGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgZXhl
Y3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1
YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZW5hYmxlQXVkaW8gPSBlbmFibGU7Ci0gICAgICAg
IGlmIChsb2NhbEF1ZGlvVHJhY2sgIT0gbnVsbCkgewotICAgICAgICAgIGxvY2FsQXVkaW9UcmFj
ay5zZXRFbmFibGVkKGVuYWJsZUF1ZGlvKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwot
ICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0VmlkZW9FbmFibGVkKGZpbmFsIGJvb2xlYW4gZW5hYmxl
KSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJp
ZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgcmVuZGVyVmlkZW8gPSBlbmFi
bGU7Ci0gICAgICAgIGlmIChsb2NhbFZpZGVvVHJhY2sgIT0gbnVsbCkgewotICAgICAgICAgIGxv
Y2FsVmlkZW9UcmFjay5zZXRFbmFibGVkKHJlbmRlclZpZGVvKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAocmVtb3RlVmlkZW9UcmFjayAhPSBudWxsKSB7Ci0gICAgICAgICAgcmVtb3RlVmlkZW9U
cmFjay5zZXRFbmFibGVkKHJlbmRlclZpZGVvKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3JlYXRlT2ZmZXIoKSB7Ci0gICAgZXhlY3V0b3IuZXhl
Y3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uICE9IG51bGwgJiYgIWlzRXJyb3Ip
IHsKLSAgICAgICAgICBMb2cuZChUQUcsICJQQyBDcmVhdGUgT0ZGRVIiKTsKLSAgICAgICAgICBp
c0luaXRpYXRvciA9IHRydWU7Ci0gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIo
c2RwT2JzZXJ2ZXIsIHNkcE1lZGlhQ29uc3RyYWludHMpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjcmVhdGVBbnN3ZXIoKSB7Ci0gICAgZXhlY3V0
b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uICE9IG51bGwgJiYgIWlz
RXJyb3IpIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJQQyBjcmVhdGUgQU5TV0VSIik7Ci0gICAg
ICAgICAgaXNJbml0aWF0b3IgPSBmYWxzZTsKLSAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jcmVh
dGVBbnN3ZXIoc2RwT2JzZXJ2ZXIsIHNkcE1lZGlhQ29uc3RyYWludHMpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBhZGRSZW1vdGVJY2VDYW5kaWRh
dGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbiAhPSBudWxsICYmICFpc0Vycm9yKSB7Ci0g
ICAgICAgICAgaWYgKHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMgIT0gbnVsbCkgewotICAgICAgICAg
ICAgcXVldWVkUmVtb3RlQ2FuZGlkYXRlcy5hZGQoY2FuZGlkYXRlKTsKLSAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uYWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0
ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBw
dWJsaWMgdm9pZCByZW1vdmVSZW1vdGVJY2VDYW5kaWRhdGVzKGZpbmFsIEljZUNhbmRpZGF0ZVtd
IGNhbmRpZGF0ZXMpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVl
ckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIC8vIERyYWluIHRoZSBxdWV1ZWQgcmVtb3RlIGNhbmRpZGF0ZXMgaWYg
dGhlcmUgaXMgYW55IHNvIHRoYXQKLSAgICAgICAgLy8gdGhleSBhcmUgcHJvY2Vzc2VkIGluIHRo
ZSBwcm9wZXIgb3JkZXIuCi0gICAgICAgIGRyYWluQ2FuZGlkYXRlcygpOwotICAgICAgICBwZWVy
Q29ubmVjdGlvbi5yZW1vdmVJY2VDYW5kaWRhdGVzKGNhbmRpZGF0ZXMpOwotICAgICAgfQotICAg
IH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UmVtb3RlRGVzY3JpcHRpb24oZmluYWwgU2Vz
c2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGlmIChwZWVyQ29ubmVjdGlvbiA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHNkcERlc2NyaXB0aW9uID0gc2RwLmRlc2Ny
aXB0aW9uOwotICAgICAgICBpZiAocHJlZmVySXNhYykgewotICAgICAgICAgIHNkcERlc2NyaXB0
aW9uID0gcHJlZmVyQ29kZWMoc2RwRGVzY3JpcHRpb24sIEFVRElPX0NPREVDX0lTQUMsIHRydWUp
OwotICAgICAgICB9Ci0gICAgICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICAgICAg
c2RwRGVzY3JpcHRpb24gPSBwcmVmZXJDb2RlYyhzZHBEZXNjcmlwdGlvbiwgcHJlZmVycmVkVmlk
ZW9Db2RlYywgZmFsc2UpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMuYXVkaW9TdGFydEJpdHJhdGUgPiAwKSB7Ci0gICAgICAgICAgc2RwRGVzY3JpcHRp
b24gPSBzZXRTdGFydEJpdHJhdGUoCi0gICAgICAgICAgICAgIEFVRElPX0NPREVDX09QVVMsIGZh
bHNlLCBzZHBEZXNjcmlwdGlvbiwgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmF1ZGlvU3RhcnRC
aXRyYXRlKTsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcsICJTZXQgcmVtb3RlIFNEUC4i
KTsKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcFJlbW90ZSA9IG5ldyBTZXNzaW9uRGVz
Y3JpcHRpb24oc2RwLnR5cGUsIHNkcERlc2NyaXB0aW9uKTsKLSAgICAgICAgcGVlckNvbm5lY3Rp
b24uc2V0UmVtb3RlRGVzY3JpcHRpb24oc2RwT2JzZXJ2ZXIsIHNkcFJlbW90ZSk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdG9wVmlkZW9Tb3VyY2UoKSB7Ci0gICAg
ZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHZpZGVvQ2FwdHVyZXIgIT0gbnVsbCAm
JiAhdmlkZW9DYXB0dXJlclN0b3BwZWQpIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJTdG9wIHZp
ZGVvIHNvdXJjZS4iKTsKLSAgICAgICAgICB0cnkgewotICAgICAgICAgICAgdmlkZW9DYXB0dXJl
ci5zdG9wQ2FwdHVyZSgpOwotICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgICB9Ci0gICAgICAgICAgdmlkZW9DYXB0dXJlclN0b3BwZWQgPSB0cnVl
OwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzdGFy
dFZpZGVvU291cmNlKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICh2
aWRlb0NhcHR1cmVyICE9IG51bGwgJiYgdmlkZW9DYXB0dXJlclN0b3BwZWQpIHsKLSAgICAgICAg
ICBMb2cuZChUQUcsICJSZXN0YXJ0IHZpZGVvIHNvdXJjZS4iKTsKLSAgICAgICAgICB2aWRlb0Nh
cHR1cmVyLnN0YXJ0Q2FwdHVyZSh2aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwgdmlkZW9GcHMpOwot
ICAgICAgICAgIHZpZGVvQ2FwdHVyZXJTdG9wcGVkID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
IH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFZpZGVvTWF4Qml0cmF0ZShmaW5h
bCBJbnRlZ2VyIG1heEJpdHJhdGVLYnBzKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51bGwgfHwgbG9jYWxWaWRlb1NlbmRlciA9PSBu
dWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
TG9nLmQoVEFHLCAiUmVxdWVzdGVkIG1heCB2aWRlbyBiaXRyYXRlOiAiICsgbWF4Qml0cmF0ZUti
cHMpOwotICAgICAgICBpZiAobG9jYWxWaWRlb1NlbmRlciA9PSBudWxsKSB7Ci0gICAgICAgICAg
TG9nLncoVEFHLCAiU2VuZGVyIGlzIG5vdCByZWFkeS4iKTsKLSAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQotICAgICAgICBSdHBQYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBsb2NhbFZpZGVv
U2VuZGVyLmdldFBhcmFtZXRlcnMoKTsKLSAgICAgICAgaWYgKHBhcmFtZXRlcnMuZW5jb2Rpbmdz
LnNpemUoKSA9PSAwKSB7Ci0gICAgICAgICAgTG9nLncoVEFHLCAiUnRwUGFyYW1ldGVycyBhcmUg
bm90IHJlYWR5LiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIGZv
ciAoUnRwUGFyYW1ldGVycy5FbmNvZGluZyBlbmNvZGluZyA6IHBhcmFtZXRlcnMuZW5jb2Rpbmdz
KSB7Ci0gICAgICAgICAgLy8gTnVsbCB2YWx1ZSBtZWFucyBubyBsaW1pdC4KLSAgICAgICAgICBl
bmNvZGluZy5tYXhCaXRyYXRlQnBzID0gbWF4Qml0cmF0ZUticHMgPT0gbnVsbCA/IG51bGwgOiBt
YXhCaXRyYXRlS2JwcyAqIEJQU19JTl9LQlBTOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbG9j
YWxWaWRlb1NlbmRlci5zZXRQYXJhbWV0ZXJzKHBhcmFtZXRlcnMpKSB7Ci0gICAgICAgICAgTG9n
LmUoVEFHLCAiUnRwU2VuZGVyLnNldFBhcmFtZXRlcnMgZmFpbGVkLiIpOwotICAgICAgICB9Ci0g
ICAgICAgIExvZy5kKFRBRywgIkNvbmZpZ3VyZWQgbWF4IHZpZGVvIGJpdHJhdGUgdG86ICIgKyBt
YXhCaXRyYXRlS2Jwcyk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
cmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExvZy5lKFRBRywg
IlBlZXJjb25uZWN0aW9uIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICBleGVjdXRvci5l
eGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICBpZiAoIWlzRXJyb3IpIHsKLSAgICAgICAgICBldmVudHMub25Q
ZWVyQ29ubmVjdGlvbkVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgaXNFcnJvciA9IHRy
dWU7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUgQXVkaW9U
cmFjayBjcmVhdGVBdWRpb1RyYWNrKCkgewotICAgIGF1ZGlvU291cmNlID0gZmFjdG9yeS5jcmVh
dGVBdWRpb1NvdXJjZShhdWRpb0NvbnN0cmFpbnRzKTsKLSAgICBsb2NhbEF1ZGlvVHJhY2sgPSBm
YWN0b3J5LmNyZWF0ZUF1ZGlvVHJhY2soQVVESU9fVFJBQ0tfSUQsIGF1ZGlvU291cmNlKTsKLSAg
ICBsb2NhbEF1ZGlvVHJhY2suc2V0RW5hYmxlZChlbmFibGVBdWRpbyk7Ci0gICAgcmV0dXJuIGxv
Y2FsQXVkaW9UcmFjazsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9UcmFjayBjcmVhdGVWaWRlb1Ry
YWNrKFZpZGVvQ2FwdHVyZXIgY2FwdHVyZXIpIHsKLSAgICB2aWRlb1NvdXJjZSA9IGZhY3Rvcnku
Y3JlYXRlVmlkZW9Tb3VyY2UoY2FwdHVyZXIpOwotICAgIGNhcHR1cmVyLnN0YXJ0Q2FwdHVyZSh2
aWRlb1dpZHRoLCB2aWRlb0hlaWdodCwgdmlkZW9GcHMpOwotCi0gICAgbG9jYWxWaWRlb1RyYWNr
ID0gZmFjdG9yeS5jcmVhdGVWaWRlb1RyYWNrKFZJREVPX1RSQUNLX0lELCB2aWRlb1NvdXJjZSk7
Ci0gICAgbG9jYWxWaWRlb1RyYWNrLnNldEVuYWJsZWQocmVuZGVyVmlkZW8pOwotICAgIGxvY2Fs
VmlkZW9UcmFjay5hZGRSZW5kZXJlcihuZXcgVmlkZW9SZW5kZXJlcihsb2NhbFJlbmRlcikpOwot
ICAgIHJldHVybiBsb2NhbFZpZGVvVHJhY2s7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZmluZFZp
ZGVvU2VuZGVyKCkgewotICAgIGZvciAoUnRwU2VuZGVyIHNlbmRlciA6IHBlZXJDb25uZWN0aW9u
LmdldFNlbmRlcnMoKSkgewotICAgICAgaWYgKHNlbmRlci50cmFjaygpICE9IG51bGwpIHsKLSAg
ICAgICAgU3RyaW5nIHRyYWNrVHlwZSA9IHNlbmRlci50cmFjaygpLmtpbmQoKTsKLSAgICAgICAg
aWYgKHRyYWNrVHlwZS5lcXVhbHMoVklERU9fVFJBQ0tfVFlQRSkpIHsKLSAgICAgICAgICBMb2cu
ZChUQUcsICJGb3VuZCB2aWRlbyBzZW5kZXIuIik7Ci0gICAgICAgICAgbG9jYWxWaWRlb1NlbmRl
ciA9IHNlbmRlcjsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
c3RhdGljIFN0cmluZyBzZXRTdGFydEJpdHJhdGUoCi0gICAgICBTdHJpbmcgY29kZWMsIGJvb2xl
YW4gaXNWaWRlb0NvZGVjLCBTdHJpbmcgc2RwRGVzY3JpcHRpb24sIGludCBiaXRyYXRlS2Jwcykg
ewotICAgIFN0cmluZ1tdIGxpbmVzID0gc2RwRGVzY3JpcHRpb24uc3BsaXQoIlxyXG4iKTsKLSAg
ICBpbnQgcnRwbWFwTGluZUluZGV4ID0gLTE7Ci0gICAgYm9vbGVhbiBzZHBGb3JtYXRVcGRhdGVk
ID0gZmFsc2U7Ci0gICAgU3RyaW5nIGNvZGVjUnRwTWFwID0gbnVsbDsKLSAgICAvLyBTZWFyY2gg
Zm9yIGNvZGVjIHJ0cG1hcCBpbiBmb3JtYXQKLSAgICAvLyBhPXJ0cG1hcDo8cGF5bG9hZCB0eXBl
PiA8ZW5jb2RpbmcgbmFtZT4vPGNsb2NrIHJhdGU+IFsvPGVuY29kaW5nIHBhcmFtZXRlcnM+XQot
ICAgIFN0cmluZyByZWdleCA9ICJeYT1ydHBtYXA6KFxcZCspICIgKyBjb2RlYyArICIoL1xcZCsp
K1tccl0/JCI7Ci0gICAgUGF0dGVybiBjb2RlY1BhdHRlcm4gPSBQYXR0ZXJuLmNvbXBpbGUocmVn
ZXgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAg
IE1hdGNoZXIgY29kZWNNYXRjaGVyID0gY29kZWNQYXR0ZXJuLm1hdGNoZXIobGluZXNbaV0pOwot
ICAgICAgaWYgKGNvZGVjTWF0Y2hlci5tYXRjaGVzKCkpIHsKLSAgICAgICAgY29kZWNSdHBNYXAg
PSBjb2RlY01hdGNoZXIuZ3JvdXAoMSk7Ci0gICAgICAgIHJ0cG1hcExpbmVJbmRleCA9IGk7Ci0g
ICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLSAgICBpZiAoY29kZWNSdHBNYXAgPT0gbnVs
bCkgewotICAgICAgTG9nLncoVEFHLCAiTm8gcnRwbWFwIGZvciAiICsgY29kZWMgKyAiIGNvZGVj
Iik7Ci0gICAgICByZXR1cm4gc2RwRGVzY3JpcHRpb247Ci0gICAgfQotICAgIExvZy5kKFRBRywg
IkZvdW5kICIgKyBjb2RlYyArICIgcnRwbWFwICIgKyBjb2RlY1J0cE1hcCArICIgYXQgIiArIGxp
bmVzW3J0cG1hcExpbmVJbmRleF0pOwotCi0gICAgLy8gQ2hlY2sgaWYgYT1mbXRwIHN0cmluZyBh
bHJlYWR5IGV4aXN0IGluIHJlbW90ZSBTRFAgZm9yIHRoaXMgY29kZWMgYW5kCi0gICAgLy8gdXBk
YXRlIGl0IHdpdGggbmV3IGJpdHJhdGUgcGFyYW1ldGVyLgotICAgIHJlZ2V4ID0gIl5hPWZtdHA6
IiArIGNvZGVjUnRwTWFwICsgIiBcXHcrPVxcZCsuKltccl0/JCI7Ci0gICAgY29kZWNQYXR0ZXJu
ID0gUGF0dGVybi5jb21waWxlKHJlZ2V4KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmVz
Lmxlbmd0aDsgaSsrKSB7Ci0gICAgICBNYXRjaGVyIGNvZGVjTWF0Y2hlciA9IGNvZGVjUGF0dGVy
bi5tYXRjaGVyKGxpbmVzW2ldKTsKLSAgICAgIGlmIChjb2RlY01hdGNoZXIubWF0Y2hlcygpKSB7
Ci0gICAgICAgIExvZy5kKFRBRywgIkZvdW5kICIgKyBjb2RlYyArICIgIiArIGxpbmVzW2ldKTsK
LSAgICAgICAgaWYgKGlzVmlkZW9Db2RlYykgewotICAgICAgICAgIGxpbmVzW2ldICs9ICI7ICIg
KyBWSURFT19DT0RFQ19QQVJBTV9TVEFSVF9CSVRSQVRFICsgIj0iICsgYml0cmF0ZUticHM7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgbGluZXNbaV0gKz0gIjsgIiArIEFVRElPX0NPREVD
X1BBUkFNX0JJVFJBVEUgKyAiPSIgKyAoYml0cmF0ZUticHMgKiAxMDAwKTsKLSAgICAgICAgfQot
ICAgICAgICBMb2cuZChUQUcsICJVcGRhdGUgcmVtb3RlIFNEUCBsaW5lOiAiICsgbGluZXNbaV0p
OwotICAgICAgICBzZHBGb3JtYXRVcGRhdGVkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgU3RyaW5nQnVpbGRlciBuZXdTZHBEZXNjcmlwdGlvbiA9IG5ldyBT
dHJpbmdCdWlsZGVyKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkr
KykgewotICAgICAgbmV3U2RwRGVzY3JpcHRpb24uYXBwZW5kKGxpbmVzW2ldKS5hcHBlbmQoIlxy
XG4iKTsKLSAgICAgIC8vIEFwcGVuZCBuZXcgYT1mbXRwIGxpbmUgaWYgbm8gc3VjaCBsaW5lIGV4
aXN0IGZvciBhIGNvZGVjLgotICAgICAgaWYgKCFzZHBGb3JtYXRVcGRhdGVkICYmIGkgPT0gcnRw
bWFwTGluZUluZGV4KSB7Ci0gICAgICAgIFN0cmluZyBiaXRyYXRlU2V0OwotICAgICAgICBpZiAo
aXNWaWRlb0NvZGVjKSB7Ci0gICAgICAgICAgYml0cmF0ZVNldCA9Ci0gICAgICAgICAgICAgICJh
PWZtdHA6IiArIGNvZGVjUnRwTWFwICsgIiAiICsgVklERU9fQ09ERUNfUEFSQU1fU1RBUlRfQklU
UkFURSArICI9IiArIGJpdHJhdGVLYnBzOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGJp
dHJhdGVTZXQgPSAiYT1mbXRwOiIgKyBjb2RlY1J0cE1hcCArICIgIiArIEFVRElPX0NPREVDX1BB
UkFNX0JJVFJBVEUgKyAiPSIKLSAgICAgICAgICAgICAgKyAoYml0cmF0ZUticHMgKiAxMDAwKTsK
LSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcsICJBZGQgcmVtb3RlIFNEUCBsaW5lOiAiICsg
Yml0cmF0ZVNldCk7Ci0gICAgICAgIG5ld1NkcERlc2NyaXB0aW9uLmFwcGVuZChiaXRyYXRlU2V0
KS5hcHBlbmQoIlxyXG4iKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIG5ld1NkcERlc2Ny
aXB0aW9uLnRvU3RyaW5nKCk7Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcHJlZmVy
Q29kZWMoU3RyaW5nIHNkcERlc2NyaXB0aW9uLCBTdHJpbmcgY29kZWMsIGJvb2xlYW4gaXNBdWRp
bykgewotICAgIFN0cmluZ1tdIGxpbmVzID0gc2RwRGVzY3JpcHRpb24uc3BsaXQoIlxyXG4iKTsK
LSAgICBpbnQgbUxpbmVJbmRleCA9IC0xOwotICAgIFN0cmluZyBjb2RlY1J0cE1hcCA9IG51bGw7
Ci0gICAgLy8gYT1ydHBtYXA6PHBheWxvYWQgdHlwZT4gPGVuY29kaW5nIG5hbWU+LzxjbG9jayBy
YXRlPiBbLzxlbmNvZGluZyBwYXJhbWV0ZXJzPl0KLSAgICBTdHJpbmcgcmVnZXggPSAiXmE9cnRw
bWFwOihcXGQrKSAiICsgY29kZWMgKyAiKC9cXGQrKStbXHJdPyQiOwotICAgIFBhdHRlcm4gY29k
ZWNQYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKHJlZ2V4KTsKLSAgICBTdHJpbmcgbWVkaWFEZXNj
cmlwdGlvbiA9ICJtPXZpZGVvICI7Ci0gICAgaWYgKGlzQXVkaW8pIHsKLSAgICAgIG1lZGlhRGVz
Y3JpcHRpb24gPSAibT1hdWRpbyAiOwotICAgIH0KLSAgICBmb3IgKGludCBpID0gMDsgKGkgPCBs
aW5lcy5sZW5ndGgpICYmIChtTGluZUluZGV4ID09IC0xIHx8IGNvZGVjUnRwTWFwID09IG51bGwp
OyBpKyspIHsKLSAgICAgIGlmIChsaW5lc1tpXS5zdGFydHNXaXRoKG1lZGlhRGVzY3JpcHRpb24p
KSB7Ci0gICAgICAgIG1MaW5lSW5kZXggPSBpOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0K
LSAgICAgIE1hdGNoZXIgY29kZWNNYXRjaGVyID0gY29kZWNQYXR0ZXJuLm1hdGNoZXIobGluZXNb
aV0pOwotICAgICAgaWYgKGNvZGVjTWF0Y2hlci5tYXRjaGVzKCkpIHsKLSAgICAgICAgY29kZWNS
dHBNYXAgPSBjb2RlY01hdGNoZXIuZ3JvdXAoMSk7Ci0gICAgICB9Ci0gICAgfQotICAgIGlmICht
TGluZUluZGV4ID09IC0xKSB7Ci0gICAgICBMb2cudyhUQUcsICJObyAiICsgbWVkaWFEZXNjcmlw
dGlvbiArICIgbGluZSwgc28gY2FuJ3QgcHJlZmVyICIgKyBjb2RlYyk7Ci0gICAgICByZXR1cm4g
c2RwRGVzY3JpcHRpb247Ci0gICAgfQotICAgIGlmIChjb2RlY1J0cE1hcCA9PSBudWxsKSB7Ci0g
ICAgICBMb2cudyhUQUcsICJObyBydHBtYXAgZm9yICIgKyBjb2RlYyk7Ci0gICAgICByZXR1cm4g
c2RwRGVzY3JpcHRpb247Ci0gICAgfQotICAgIExvZy5kKFRBRywgIkZvdW5kICIgKyBjb2RlYyAr
ICIgcnRwbWFwICIgKyBjb2RlY1J0cE1hcCArICIsIHByZWZlciBhdCAiICsgbGluZXNbbUxpbmVJ
bmRleF0pOwotICAgIFN0cmluZ1tdIG9yaWdNTGluZVBhcnRzID0gbGluZXNbbUxpbmVJbmRleF0u
c3BsaXQoIiAiKTsKLSAgICBpZiAob3JpZ01MaW5lUGFydHMubGVuZ3RoID4gMykgewotICAgICAg
U3RyaW5nQnVpbGRlciBuZXdNTGluZSA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgICBpbnQg
b3JpZ1BhcnRJbmRleCA9IDA7Ci0gICAgICAvLyBGb3JtYXQgaXM6IG09PG1lZGlhPiA8cG9ydD4g
PHByb3RvPiA8Zm10PiAuLi4KLSAgICAgIG5ld01MaW5lLmFwcGVuZChvcmlnTUxpbmVQYXJ0c1tv
cmlnUGFydEluZGV4KytdKS5hcHBlbmQoIiAiKTsKLSAgICAgIG5ld01MaW5lLmFwcGVuZChvcmln
TUxpbmVQYXJ0c1tvcmlnUGFydEluZGV4KytdKS5hcHBlbmQoIiAiKTsKLSAgICAgIG5ld01MaW5l
LmFwcGVuZChvcmlnTUxpbmVQYXJ0c1tvcmlnUGFydEluZGV4KytdKS5hcHBlbmQoIiAiKTsKLSAg
ICAgIG5ld01MaW5lLmFwcGVuZChjb2RlY1J0cE1hcCk7Ci0gICAgICBmb3IgKDsgb3JpZ1BhcnRJ
bmRleCA8IG9yaWdNTGluZVBhcnRzLmxlbmd0aDsgb3JpZ1BhcnRJbmRleCsrKSB7Ci0gICAgICAg
IGlmICghb3JpZ01MaW5lUGFydHNbb3JpZ1BhcnRJbmRleF0uZXF1YWxzKGNvZGVjUnRwTWFwKSkg
ewotICAgICAgICAgIG5ld01MaW5lLmFwcGVuZCgiICIpLmFwcGVuZChvcmlnTUxpbmVQYXJ0c1tv
cmlnUGFydEluZGV4XSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGxpbmVzW21MaW5lSW5k
ZXhdID0gbmV3TUxpbmUudG9TdHJpbmcoKTsKLSAgICAgIExvZy5kKFRBRywgIkNoYW5nZSBtZWRp
YSBkZXNjcmlwdGlvbjogIiArIGxpbmVzW21MaW5lSW5kZXhdKTsKLSAgICB9IGVsc2UgewotICAg
ICAgTG9nLmUoVEFHLCAiV3JvbmcgU0RQIG1lZGlhIGRlc2NyaXB0aW9uIGZvcm1hdDogIiArIGxp
bmVzW21MaW5lSW5kZXhdKTsKLSAgICB9Ci0gICAgU3RyaW5nQnVpbGRlciBuZXdTZHBEZXNjcmlw
dGlvbiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgZm9yIChTdHJpbmcgbGluZSA6IGxpbmVz
KSB7Ci0gICAgICBuZXdTZHBEZXNjcmlwdGlvbi5hcHBlbmQobGluZSkuYXBwZW5kKCJcclxuIik7
Ci0gICAgfQotICAgIHJldHVybiBuZXdTZHBEZXNjcmlwdGlvbi50b1N0cmluZygpOwotICB9Ci0K
LSAgcHJpdmF0ZSB2b2lkIGRyYWluQ2FuZGlkYXRlcygpIHsKLSAgICBpZiAocXVldWVkUmVtb3Rl
Q2FuZGlkYXRlcyAhPSBudWxsKSB7Ci0gICAgICBMb2cuZChUQUcsICJBZGQgIiArIHF1ZXVlZFJl
bW90ZUNhbmRpZGF0ZXMuc2l6ZSgpICsgIiByZW1vdGUgY2FuZGlkYXRlcyIpOwotICAgICAgZm9y
IChJY2VDYW5kaWRhdGUgY2FuZGlkYXRlIDogcXVldWVkUmVtb3RlQ2FuZGlkYXRlcykgewotICAg
ICAgICBwZWVyQ29ubmVjdGlvbi5hZGRJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICAgIH0K
LSAgICAgIHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgdm9pZCBzd2l0Y2hDYW1lcmFJbnRlcm5hbCgpIHsKLSAgICBpZiAodmlkZW9DYXB0dXJl
ciBpbnN0YW5jZW9mIENhbWVyYVZpZGVvQ2FwdHVyZXIpIHsKLSAgICAgIGlmICghdmlkZW9DYWxs
RW5hYmxlZCB8fCBpc0Vycm9yIHx8IHZpZGVvQ2FwdHVyZXIgPT0gbnVsbCkgewotICAgICAgICBM
b2cuZShUQUcsICJGYWlsZWQgdG8gc3dpdGNoIGNhbWVyYS4gVmlkZW86ICIgKyB2aWRlb0NhbGxF
bmFibGVkICsgIi4gRXJyb3IgOiAiICsgaXNFcnJvcik7Ci0gICAgICAgIHJldHVybjsgLy8gTm8g
dmlkZW8gaXMgc2VudCBvciBvbmx5IG9uZSBjYW1lcmEgaXMgYXZhaWxhYmxlIG9yIGVycm9yIGhh
cHBlbmVkLgotICAgICAgfQotICAgICAgTG9nLmQoVEFHLCAiU3dpdGNoIGNhbWVyYSIpOwotICAg
ICAgQ2FtZXJhVmlkZW9DYXB0dXJlciBjYW1lcmFWaWRlb0NhcHR1cmVyID0gKENhbWVyYVZpZGVv
Q2FwdHVyZXIpIHZpZGVvQ2FwdHVyZXI7Ci0gICAgICBjYW1lcmFWaWRlb0NhcHR1cmVyLnN3aXRj
aENhbWVyYShudWxsKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAiV2lsbCBub3Qg
c3dpdGNoIGNhbWVyYSwgdmlkZW8gY2FwdXR1cmVyIGlzIG5vdCBhIGNhbWVyYSIpOwotICAgIH0K
LSAgfQotCi0gIHB1YmxpYyB2b2lkIHN3aXRjaENhbWVyYSgpIHsKLSAgICBleGVjdXRvci5leGVj
dXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICBzd2l0Y2hDYW1lcmFJbnRlcm5hbCgpOwotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgcHVibGljIHZvaWQgY2hhbmdlQ2FwdHVyZUZvcm1hdChmaW5hbCBpbnQgd2lk
dGgsIGZpbmFsIGludCBoZWlnaHQsIGZpbmFsIGludCBmcmFtZXJhdGUpIHsKLSAgICBleGVjdXRv
ci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICBjaGFuZ2VDYXB0dXJlRm9ybWF0SW50ZXJuYWwod2lkdGgs
IGhlaWdodCwgZnJhbWVyYXRlKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBjaGFuZ2VDYXB0dXJlRm9ybWF0SW50ZXJuYWwoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgZnJhbWVyYXRlKSB7Ci0gICAgaWYgKCF2aWRlb0NhbGxFbmFibGVkIHx8IGlzRXJyb3IgfHwg
dmlkZW9DYXB0dXJlciA9PSBudWxsKSB7Ci0gICAgICBMb2cuZShUQUcsCi0gICAgICAgICAgIkZh
aWxlZCB0byBjaGFuZ2UgY2FwdHVyZSBmb3JtYXQuIFZpZGVvOiAiICsgdmlkZW9DYWxsRW5hYmxl
ZCArICIuIEVycm9yIDogIiArIGlzRXJyb3IpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBM
b2cuZChUQUcsICJjaGFuZ2VDYXB0dXJlRm9ybWF0OiAiICsgd2lkdGggKyAieCIgKyBoZWlnaHQg
KyAiQCIgKyBmcmFtZXJhdGUpOwotICAgIHZpZGVvU291cmNlLmFkYXB0T3V0cHV0Rm9ybWF0KHdp
ZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7Ci0gIH0KLQotICAvLyBJbXBsZW1lbnRhdGlvbiBkZXRh
aWw6IG9ic2VydmUgSUNFICYgc3RyZWFtIGNoYW5nZXMgYW5kIHJlYWN0IGFjY29yZGluZ2x5Lgot
ICBwcml2YXRlIGNsYXNzIFBDT2JzZXJ2ZXIgaW1wbGVtZW50cyBQZWVyQ29ubmVjdGlvbi5PYnNl
cnZlciB7Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGUoZmlu
YWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcg
UnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgICAgZXZlbnRzLm9uSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICAg
IH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
SWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewot
ICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlk
ZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgZXZlbnRzLm9uSWNlQ2Fu
ZGlkYXRlc1JlbW92ZWQoY2FuZGlkYXRlcyk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uU2lnbmFsaW5nQ2hhbmdlKFBlZXJD
b25uZWN0aW9uLlNpZ25hbGluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBMb2cuZChUQUcsICJT
aWduYWxpbmdTdGF0ZTogIiArIG5ld1N0YXRlKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgdm9pZCBvbkljZUNvbm5lY3Rpb25DaGFuZ2UoZmluYWwgUGVlckNvbm5lY3Rpb24u
SWNlQ29ubmVjdGlvblN0YXRlIG5ld1N0YXRlKSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJJY2VDb25uZWN0aW9uU3RhdGU6ICIgKyBuZXdT
dGF0ZSk7Ci0gICAgICAgICAgaWYgKG5ld1N0YXRlID09IEljZUNvbm5lY3Rpb25TdGF0ZS5DT05O
RUNURUQpIHsKLSAgICAgICAgICAgIGV2ZW50cy5vbkljZUNvbm5lY3RlZCgpOwotICAgICAgICAg
IH0gZWxzZSBpZiAobmV3U3RhdGUgPT0gSWNlQ29ubmVjdGlvblN0YXRlLkRJU0NPTk5FQ1RFRCkg
ewotICAgICAgICAgICAgZXZlbnRzLm9uSWNlRGlzY29ubmVjdGVkKCk7Ci0gICAgICAgICAgfSBl
bHNlIGlmIChuZXdTdGF0ZSA9PSBJY2VDb25uZWN0aW9uU3RhdGUuRkFJTEVEKSB7Ci0gICAgICAg
ICAgICByZXBvcnRFcnJvcigiSUNFIGNvbm5lY3Rpb24gZmFpbGVkLiIpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoUGVlckNvbm5lY3Rpb24uSWNlR2F0aGVyaW5nU3Rh
dGUgbmV3U3RhdGUpIHsKLSAgICAgIExvZy5kKFRBRywgIkljZUdhdGhlcmluZ1N0YXRlOiAiICsg
bmV3U3RhdGUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNl
Q29ubmVjdGlvblJlY2VpdmluZ0NoYW5nZShib29sZWFuIHJlY2VpdmluZykgewotICAgICAgTG9n
LmQoVEFHLCAiSWNlQ29ubmVjdGlvblJlY2VpdmluZyBjaGFuZ2VkIHRvICIgKyByZWNlaXZpbmcp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQWRkU3RyZWFtKGZp
bmFsIE1lZGlhU3RyZWFtIHN0cmVhbSkgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51bGwgfHwgaXNFcnJvcikgewotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoc3RyZWFtLmF1ZGlv
VHJhY2tzLnNpemUoKSA+IDEgfHwgc3RyZWFtLnZpZGVvVHJhY2tzLnNpemUoKSA+IDEpIHsKLSAg
ICAgICAgICAgIHJlcG9ydEVycm9yKCJXZWlyZC1sb29raW5nIHN0cmVhbTogIiArIHN0cmVhbSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIGlmIChzdHJlYW0u
dmlkZW9UcmFja3Muc2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2sg
PSBzdHJlYW0udmlkZW9UcmFja3MuZ2V0KDApOwotICAgICAgICAgICAgcmVtb3RlVmlkZW9UcmFj
ay5zZXRFbmFibGVkKHJlbmRlclZpZGVvKTsKLSAgICAgICAgICAgIGZvciAoVmlkZW9SZW5kZXJl
ci5DYWxsYmFja3MgcmVtb3RlUmVuZGVyIDogcmVtb3RlUmVuZGVycykgewotICAgICAgICAgICAg
ICByZW1vdGVWaWRlb1RyYWNrLmFkZFJlbmRlcmVyKG5ldyBWaWRlb1JlbmRlcmVyKHJlbW90ZVJl
bmRlcikpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25SZW1vdmVTdHJlYW0o
ZmluYWwgTWVkaWFTdHJlYW0gc3RyZWFtKSB7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgICByZW1vdGVWaWRlb1RyYWNrID0gbnVsbDsKLSAgICAgICAgfQotICAgICAg
fSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25EYXRhQ2hhbm5l
bChmaW5hbCBEYXRhQ2hhbm5lbCBkYykgewotICAgICAgcmVwb3J0RXJyb3IoIkFwcFJUQyBkb2Vz
bid0IHVzZSBkYXRhIGNoYW5uZWxzLCBidXQgZ290OiAiICsgZGMubGFiZWwoKSArICIgYW55d2F5
ISIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUmVuZWdvdGlh
dGlvbk5lZWRlZCgpIHsKLSAgICAgIC8vIE5vIG5lZWQgdG8gZG8gYW55dGhpbmc7IEFwcFJUQyBm
b2xsb3dzIGEgcHJlLWFncmVlZC11cG9uCi0gICAgICAvLyBzaWduYWxpbmcvbmVnb3RpYXRpb24g
cHJvdG9jb2wuCi0gICAgfQotICB9Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gZGV0YWlsOiBoYW5k
bGUgb2ZmZXIgY3JlYXRpb24vc2lnbmFsaW5nIGFuZCBhbnN3ZXIgc2V0dGluZywKLSAgLy8gYXMg
d2VsbCBhcyBhZGRpbmcgcmVtb3RlIElDRSBjYW5kaWRhdGVzIG9uY2UgdGhlIGFuc3dlciBTRFAg
aXMgc2V0LgotICBwcml2YXRlIGNsYXNzIFNEUE9ic2VydmVyIGltcGxlbWVudHMgU2RwT2JzZXJ2
ZXIgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlU3VjY2VzcyhmaW5h
bCBTZXNzaW9uRGVzY3JpcHRpb24gb3JpZ1NkcCkgewotICAgICAgaWYgKGxvY2FsU2RwICE9IG51
bGwpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIk11bHRpcGxlIFNEUCBjcmVhdGUuIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIFN0cmluZyBzZHBEZXNjcmlwdGlvbiA9IG9yaWdT
ZHAuZGVzY3JpcHRpb247Ci0gICAgICBpZiAocHJlZmVySXNhYykgewotICAgICAgICBzZHBEZXNj
cmlwdGlvbiA9IHByZWZlckNvZGVjKHNkcERlc2NyaXB0aW9uLCBBVURJT19DT0RFQ19JU0FDLCB0
cnVlKTsKLSAgICAgIH0KLSAgICAgIGlmICh2aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICAgIHNk
cERlc2NyaXB0aW9uID0gcHJlZmVyQ29kZWMoc2RwRGVzY3JpcHRpb24sIHByZWZlcnJlZFZpZGVv
Q29kZWMsIGZhbHNlKTsKLSAgICAgIH0KLSAgICAgIGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBz
ZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKG9yaWdTZHAudHlwZSwgc2RwRGVzY3JpcHRpb24p
OwotICAgICAgbG9jYWxTZHAgPSBzZHA7Ci0gICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5u
YWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24gIT0gbnVsbCAmJiAhaXNFcnJvcikgewotICAg
ICAgICAgICAgTG9nLmQoVEFHLCAiU2V0IGxvY2FsIFNEUCBmcm9tICIgKyBzZHAudHlwZSk7Ci0g
ICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNkcE9ic2VydmVy
LCBzZHApOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TZXRTdWNjZXNzKCkgewotICAgICAgZXhlY3V0
b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51bGwg
fHwgaXNFcnJvcikgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAgICAgICAg
ICBpZiAoaXNJbml0aWF0b3IpIHsKLSAgICAgICAgICAgIC8vIEZvciBvZmZlcmluZyBwZWVyIGNv
bm5lY3Rpb24gd2UgZmlyc3QgY3JlYXRlIG9mZmVyIGFuZCBzZXQKLSAgICAgICAgICAgIC8vIGxv
Y2FsIFNEUCwgdGhlbiBhZnRlciByZWNlaXZpbmcgYW5zd2VyIHNldCByZW1vdGUgU0RQLgotICAg
ICAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uLmdldFJlbW90ZURlc2NyaXB0aW9uKCkgPT0gbnVs
bCkgewotICAgICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IHNldCBvdXIgbG9jYWwgU0RQIHNvIHRp
bWUgdG8gc2VuZCBpdC4KLSAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTG9jYWwgU0RQIHNldCBz
dWNjZXNmdWxseSIpOwotICAgICAgICAgICAgICBldmVudHMub25Mb2NhbERlc2NyaXB0aW9uKGxv
Y2FsU2RwKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIC8vIFdlJ3ZlIGp1
c3Qgc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiwgc28gZHJhaW4gcmVtb3RlCi0gICAgICAgICAgICAg
IC8vIGFuZCBzZW5kIGxvY2FsIElDRSBjYW5kaWRhdGVzLgotICAgICAgICAgICAgICBMb2cuZChU
QUcsICJSZW1vdGUgU0RQIHNldCBzdWNjZXNmdWxseSIpOwotICAgICAgICAgICAgICBkcmFpbkNh
bmRpZGF0ZXMoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gRm9yIGFuc3dlcmluZyBwZWVyIGNvbm5lY3Rpb24gd2Ugc2V0IHJlbW90ZSBTRFAgYW5k
IHRoZW4KLSAgICAgICAgICAgIC8vIGNyZWF0ZSBhbnN3ZXIgYW5kIHNldCBsb2NhbCBTRFAuCi0g
ICAgICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24uZ2V0TG9jYWxEZXNjcmlwdGlvbigpICE9IG51
bGwpIHsKLSAgICAgICAgICAgICAgLy8gV2UndmUganVzdCBzZXQgb3VyIGxvY2FsIFNEUCBzbyB0
aW1lIHRvIHNlbmQgaXQsIGRyYWluCi0gICAgICAgICAgICAgIC8vIHJlbW90ZSBhbmQgc2VuZCBs
b2NhbCBJQ0UgY2FuZGlkYXRlcy4KLSAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiTG9jYWwgU0RQ
IHNldCBzdWNjZXNmdWxseSIpOwotICAgICAgICAgICAgICBldmVudHMub25Mb2NhbERlc2NyaXB0
aW9uKGxvY2FsU2RwKTsKLSAgICAgICAgICAgICAgZHJhaW5DYW5kaWRhdGVzKCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IHNldCByZW1vdGUgU0RQ
IC0gZG8gbm90aGluZyBmb3Igbm93IC0KLSAgICAgICAgICAgICAgLy8gYW5zd2VyIHdpbGwgYmUg
Y3JlYXRlZCBzb29uLgotICAgICAgICAgICAgICBMb2cuZChUQUcsICJSZW1vdGUgU0RQIHNldCBz
dWNjZXNmdWxseSIpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DcmVhdGVG
YWlsdXJlKGZpbmFsIFN0cmluZyBlcnJvcikgewotICAgICAgcmVwb3J0RXJyb3IoImNyZWF0ZVNE
UCBlcnJvcjogIiArIGVycm9yKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvblNldEZhaWx1cmUoZmluYWwgU3RyaW5nIGVycm9yKSB7Ci0gICAgICByZXBvcnRFcnJv
cigic2V0U0RQIGVycm9yOiAiICsgZXJyb3IpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlcmNlbnRGcmFtZUxheW91dC5qYXZhCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9QZXJjZW50RnJhbWVMYXlvdXQuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlcmNlbnRG
cmFtZUxheW91dC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBhbmRyb2lk
LmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuQXR0cmlidXRlU2V0OwotaW1w
b3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci0K
LS8qKgotICogU2ltcGxlIGNvbnRhaW5lciB0aGF0IGNvbmZpbmVzIHRoZSBjaGlsZHJlbiB0byBh
IHN1YnJlY3RhbmdsZSBzcGVjaWZpZWQgYXMgcGVyY2VudGFnZSB2YWx1ZXMgb2YKLSAqIHRoZSBj
b250YWluZXIgc2l6ZS4gVGhlIGNoaWxkcmVuIGFyZSBjZW50ZXJlZCBob3Jpem9udGFsbHkgYW5k
IHZlcnRpY2FsbHkgaW5zaWRlIHRoZSBjb25maW5lZAotICogc3BhY2UuCi0gKi8KLXB1YmxpYyBj
bGFzcyBQZXJjZW50RnJhbWVMYXlvdXQgZXh0ZW5kcyBWaWV3R3JvdXAgewotICBwcml2YXRlIGlu
dCB4UGVyY2VudCA9IDA7Ci0gIHByaXZhdGUgaW50IHlQZXJjZW50ID0gMDsKLSAgcHJpdmF0ZSBp
bnQgd2lkdGhQZXJjZW50ID0gMTAwOwotICBwcml2YXRlIGludCBoZWlnaHRQZXJjZW50ID0gMTAw
OwotCi0gIHB1YmxpYyBQZXJjZW50RnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0KSB7Ci0gICAg
c3VwZXIoY29udGV4dCk7Ci0gIH0KLQotICBwdWJsaWMgUGVyY2VudEZyYW1lTGF5b3V0KENvbnRl
eHQgY29udGV4dCwgQXR0cmlidXRlU2V0IGF0dHJzKSB7Ci0gICAgc3VwZXIoY29udGV4dCwgYXR0
cnMpOwotICB9Ci0KLSAgcHVibGljIFBlcmNlbnRGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQs
IEF0dHJpYnV0ZVNldCBhdHRycywgaW50IGRlZlN0eWxlQXR0cikgewotICAgIHN1cGVyKGNvbnRl
eHQsIGF0dHJzLCBkZWZTdHlsZUF0dHIpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UG9zaXRp
b24oaW50IHhQZXJjZW50LCBpbnQgeVBlcmNlbnQsIGludCB3aWR0aFBlcmNlbnQsIGludCBoZWln
aHRQZXJjZW50KSB7Ci0gICAgdGhpcy54UGVyY2VudCA9IHhQZXJjZW50OwotICAgIHRoaXMueVBl
cmNlbnQgPSB5UGVyY2VudDsKLSAgICB0aGlzLndpZHRoUGVyY2VudCA9IHdpZHRoUGVyY2VudDsK
LSAgICB0aGlzLmhlaWdodFBlcmNlbnQgPSBoZWlnaHRQZXJjZW50OwotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyBib29sZWFuIHNob3VsZERlbGF5Q2hpbGRQcmVzc2VkU3RhdGUoKSB7Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9u
TWVhc3VyZShpbnQgd2lkdGhNZWFzdXJlU3BlYywgaW50IGhlaWdodE1lYXN1cmVTcGVjKSB7Ci0g
ICAgZmluYWwgaW50IHdpZHRoID0gZ2V0RGVmYXVsdFNpemUoSW50ZWdlci5NQVhfVkFMVUUsIHdp
ZHRoTWVhc3VyZVNwZWMpOwotICAgIGZpbmFsIGludCBoZWlnaHQgPSBnZXREZWZhdWx0U2l6ZShJ
bnRlZ2VyLk1BWF9WQUxVRSwgaGVpZ2h0TWVhc3VyZVNwZWMpOwotICAgIHNldE1lYXN1cmVkRGlt
ZW5zaW9uKE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyh3aWR0aCwgTWVhc3VyZVNwZWMuRVhB
Q1RMWSksCi0gICAgICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhoZWlnaHQsIE1lYXN1
cmVTcGVjLkVYQUNUTFkpKTsKLQotICAgIGZpbmFsIGludCBjaGlsZFdpZHRoTWVhc3VyZVNwZWMg
PQotICAgICAgICBNZWFzdXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMod2lkdGggKiB3aWR0aFBlcmNl
bnQgLyAxMDAsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgIGZpbmFsIGludCBjaGlsZEhlaWdo
dE1lYXN1cmVTcGVjID0KLSAgICAgICAgTWVhc3VyZVNwZWMubWFrZU1lYXN1cmVTcGVjKGhlaWdo
dCAqIGhlaWdodFBlcmNlbnQgLyAxMDAsIE1lYXN1cmVTcGVjLkFUX01PU1QpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgZ2V0Q2hpbGRDb3VudCgpOyArK2kpIHsKLSAgICAgIGZpbmFsIFZpZXcg
Y2hpbGQgPSBnZXRDaGlsZEF0KGkpOwotICAgICAgaWYgKGNoaWxkLmdldFZpc2liaWxpdHkoKSAh
PSBHT05FKSB7Ci0gICAgICAgIGNoaWxkLm1lYXN1cmUoY2hpbGRXaWR0aE1lYXN1cmVTcGVjLCBj
aGlsZEhlaWdodE1lYXN1cmVTcGVjKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25MYXlvdXQoYm9vbGVhbiBjaGFuZ2VkLCBpbnQgbGVmdCwg
aW50IHRvcCwgaW50IHJpZ2h0LCBpbnQgYm90dG9tKSB7Ci0gICAgZmluYWwgaW50IHdpZHRoID0g
cmlnaHQgLSBsZWZ0OwotICAgIGZpbmFsIGludCBoZWlnaHQgPSBib3R0b20gLSB0b3A7Ci0gICAg
Ly8gU3ViLXJlY3RhbmdsZSBzcGVjaWZpZWQgYnkgcGVyY2VudGFnZSB2YWx1ZXMuCi0gICAgZmlu
YWwgaW50IHN1YldpZHRoID0gd2lkdGggKiB3aWR0aFBlcmNlbnQgLyAxMDA7Ci0gICAgZmluYWwg
aW50IHN1YkhlaWdodCA9IGhlaWdodCAqIGhlaWdodFBlcmNlbnQgLyAxMDA7Ci0gICAgZmluYWwg
aW50IHN1YkxlZnQgPSBsZWZ0ICsgd2lkdGggKiB4UGVyY2VudCAvIDEwMDsKLSAgICBmaW5hbCBp
bnQgc3ViVG9wID0gdG9wICsgaGVpZ2h0ICogeVBlcmNlbnQgLyAxMDA7Ci0KLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGdldENoaWxkQ291bnQoKTsgKytpKSB7Ci0gICAgICBmaW5hbCBWaWV3IGNo
aWxkID0gZ2V0Q2hpbGRBdChpKTsKLSAgICAgIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0g
R09ORSkgewotICAgICAgICBmaW5hbCBpbnQgY2hpbGRXaWR0aCA9IGNoaWxkLmdldE1lYXN1cmVk
V2lkdGgoKTsKLSAgICAgICAgZmluYWwgaW50IGNoaWxkSGVpZ2h0ID0gY2hpbGQuZ2V0TWVhc3Vy
ZWRIZWlnaHQoKTsKLSAgICAgICAgLy8gQ2VudGVyIGNoaWxkIGJvdGggdmVydGljYWxseSBhbmQg
aG9yaXpvbnRhbGx5LgotICAgICAgICBmaW5hbCBpbnQgY2hpbGRMZWZ0ID0gc3ViTGVmdCArIChz
dWJXaWR0aCAtIGNoaWxkV2lkdGgpIC8gMjsKLSAgICAgICAgZmluYWwgaW50IGNoaWxkVG9wID0g
c3ViVG9wICsgKHN1YkhlaWdodCAtIGNoaWxkSGVpZ2h0KSAvIDI7Ci0gICAgICAgIGNoaWxkLmxh
eW91dChjaGlsZExlZnQsIGNoaWxkVG9wLCBjaGlsZExlZnQgKyBjaGlsZFdpZHRoLCBjaGlsZFRv
cCArIGNoaWxkSGVpZ2h0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3Jj
L29yZy9hcHBzcG90L2FwcHJ0Yy9Sb29tUGFyYW1ldGVyc0ZldGNoZXIuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUm9vbVBhcmFtZXRlcnNGZXRjaGVyLmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Sb29t
UGFyYW1ldGVyc0ZldGNoZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIxNyArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0
IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVyczsKLWlt
cG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0aW9uOwotaW1w
b3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb24uQXN5bmNI
dHRwRXZlbnRzOwotCi1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0IG9yZy5qc29u
LkpTT05BcnJheTsKLWltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwotaW1wb3J0IG9yZy5q
c29uLkpTT05PYmplY3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNj
cmlwdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5J
bnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5IdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBq
YXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51
dGlsLlNjYW5uZXI7Ci0KLS8qKgotICogQXN5bmNUYXNrIHRoYXQgY29udmVydHMgYW4gQXBwUlRD
IHJvb20gVVJMIGludG8gdGhlIHNldCBvZiBzaWduYWxpbmcKLSAqIHBhcmFtZXRlcnMgdG8gdXNl
IHdpdGggdGhhdCByb29tLgotICovCi1wdWJsaWMgY2xhc3MgUm9vbVBhcmFtZXRlcnNGZXRjaGVy
IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJSb29tUlRDQ2xpZW50IjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRVUk5fSFRUUF9USU1FT1VUX01TID0gNTAwMDsK
LSAgcHJpdmF0ZSBmaW5hbCBSb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHMgZXZlbnRzOwotICBw
cml2YXRlIGZpbmFsIFN0cmluZyByb29tVXJsOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyByb29t
TWVzc2FnZTsKLSAgcHJpdmF0ZSBBc3luY0h0dHBVUkxDb25uZWN0aW9uIGh0dHBDb25uZWN0aW9u
OwotCi0gIC8qKgotICAgKiBSb29tIHBhcmFtZXRlcnMgZmV0Y2hlciBjYWxsYmFja3MuCi0gICAq
LwotICBwdWJsaWMgaW50ZXJmYWNlIFJvb21QYXJhbWV0ZXJzRmV0Y2hlckV2ZW50cyB7Ci0gICAg
LyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSB0aGUgcm9vbSdzIHNpZ25hbGluZyBwYXJh
bWV0ZXJzCi0gICAgICogU2lnbmFsaW5nUGFyYW1ldGVycyBhcmUgZXh0cmFjdGVkLgotICAgICAq
LwotICAgIHZvaWQgb25TaWduYWxpbmdQYXJhbWV0ZXJzUmVhZHkoZmluYWwgU2lnbmFsaW5nUGFy
YW1ldGVycyBwYXJhbXMpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZm9yIHJvb20gcGFy
YW1ldGVycyBleHRyYWN0aW9uIGVycm9yLgotICAgICAqLwotICAgIHZvaWQgb25TaWduYWxpbmdQ
YXJhbWV0ZXJzRXJyb3IoZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIHB1Ymxp
YyBSb29tUGFyYW1ldGVyc0ZldGNoZXIoCi0gICAgICBTdHJpbmcgcm9vbVVybCwgU3RyaW5nIHJv
b21NZXNzYWdlLCBmaW5hbCBSb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHMgZXZlbnRzKSB7Ci0g
ICAgdGhpcy5yb29tVXJsID0gcm9vbVVybDsKLSAgICB0aGlzLnJvb21NZXNzYWdlID0gcm9vbU1l
c3NhZ2U7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBt
YWtlUmVxdWVzdCgpIHsKLSAgICBMb2cuZChUQUcsICJDb25uZWN0aW5nIHRvIHJvb206ICIgKyBy
b29tVXJsKTsKLSAgICBodHRwQ29ubmVjdGlvbiA9Ci0gICAgICAgIG5ldyBBc3luY0h0dHBVUkxD
b25uZWN0aW9uKCJQT1NUIiwgcm9vbVVybCwgcm9vbU1lc3NhZ2UsIG5ldyBBc3luY0h0dHBFdmVu
dHMoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRw
RXJyb3IoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiUm9v
bSBjb25uZWN0aW9uIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICAgIGV2ZW50
cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIH0K
LQotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cENvbXBs
ZXRlKFN0cmluZyByZXNwb25zZSkgewotICAgICAgICAgICAgcm9vbUh0dHBSZXNwb25zZVBhcnNl
KHJlc3BvbnNlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgIGh0dHBDb25uZWN0aW9u
LnNlbmQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCByb29tSHR0cFJlc3BvbnNlUGFyc2UoU3Ry
aW5nIHJlc3BvbnNlKSB7Ci0gICAgTG9nLmQoVEFHLCAiUm9vbSByZXNwb25zZTogIiArIHJlc3Bv
bnNlKTsKLSAgICB0cnkgewotICAgICAgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+IGljZUNhbmRp
ZGF0ZXMgPSBudWxsOwotICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIG9mZmVyU2RwID0gbnVsbDsK
LSAgICAgIEpTT05PYmplY3Qgcm9vbUpzb24gPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZSk7Ci0K
LSAgICAgIFN0cmluZyByZXN1bHQgPSByb29tSnNvbi5nZXRTdHJpbmcoInJlc3VsdCIpOwotICAg
ICAgaWYgKCFyZXN1bHQuZXF1YWxzKCJTVUNDRVNTIikpIHsKLSAgICAgICAgZXZlbnRzLm9uU2ln
bmFsaW5nUGFyYW1ldGVyc0Vycm9yKCJSb29tIHJlc3BvbnNlIGVycm9yOiAiICsgcmVzdWx0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgICAgcmVzcG9uc2UgPSByb29tSnNvbi5nZXRT
dHJpbmcoInBhcmFtcyIpOwotICAgICAgcm9vbUpzb24gPSBuZXcgSlNPTk9iamVjdChyZXNwb25z
ZSk7Ci0gICAgICBTdHJpbmcgcm9vbUlkID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJyb29tX2lkIik7
Ci0gICAgICBTdHJpbmcgY2xpZW50SWQgPSByb29tSnNvbi5nZXRTdHJpbmcoImNsaWVudF9pZCIp
OwotICAgICAgU3RyaW5nIHdzc1VybCA9IHJvb21Kc29uLmdldFN0cmluZygid3NzX3VybCIpOwot
ICAgICAgU3RyaW5nIHdzc1Bvc3RVcmwgPSByb29tSnNvbi5nZXRTdHJpbmcoIndzc19wb3N0X3Vy
bCIpOwotICAgICAgYm9vbGVhbiBpbml0aWF0b3IgPSAocm9vbUpzb24uZ2V0Qm9vbGVhbigiaXNf
aW5pdGlhdG9yIikpOwotICAgICAgaWYgKCFpbml0aWF0b3IpIHsKLSAgICAgICAgaWNlQ2FuZGlk
YXRlcyA9IG5ldyBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4oKTsKLSAgICAgICAgU3RyaW5nIG1l
c3NhZ2VzU3RyaW5nID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJtZXNzYWdlcyIpOwotICAgICAgICBK
U09OQXJyYXkgbWVzc2FnZXMgPSBuZXcgSlNPTkFycmF5KG1lc3NhZ2VzU3RyaW5nKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAg
ICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSBtZXNzYWdlcy5nZXRTdHJpbmcoaSk7Ci0gICAgICAg
ICAgSlNPTk9iamVjdCBtZXNzYWdlID0gbmV3IEpTT05PYmplY3QobWVzc2FnZVN0cmluZyk7Ci0g
ICAgICAgICAgU3RyaW5nIG1lc3NhZ2VUeXBlID0gbWVzc2FnZS5nZXRTdHJpbmcoInR5cGUiKTsK
LSAgICAgICAgICBMb2cuZChUQUcsICJHQUUtPkMgIyIgKyBpICsgIiA6ICIgKyBtZXNzYWdlU3Ry
aW5nKTsKLSAgICAgICAgICBpZiAobWVzc2FnZVR5cGUuZXF1YWxzKCJvZmZlciIpKSB7Ci0gICAg
ICAgICAgICBvZmZlclNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICAg
ICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0obWVzc2FnZVR5cGUp
LCBtZXNzYWdlLmdldFN0cmluZygic2RwIikpOwotICAgICAgICAgIH0gZWxzZSBpZiAobWVzc2Fn
ZVR5cGUuZXF1YWxzKCJjYW5kaWRhdGUiKSkgewotICAgICAgICAgICAgSWNlQ2FuZGlkYXRlIGNh
bmRpZGF0ZSA9IG5ldyBJY2VDYW5kaWRhdGUoCi0gICAgICAgICAgICAgICAgbWVzc2FnZS5nZXRT
dHJpbmcoImlkIiksIG1lc3NhZ2UuZ2V0SW50KCJsYWJlbCIpLCBtZXNzYWdlLmdldFN0cmluZygi
Y2FuZGlkYXRlIikpOwotICAgICAgICAgICAgaWNlQ2FuZGlkYXRlcy5hZGQoY2FuZGlkYXRlKTsK
LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgTG9nLmUoVEFHLCAiVW5rbm93biBtZXNz
YWdlOiAiICsgbWVzc2FnZVN0cmluZyk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgICBMb2cuZChUQUcsICJSb29tSWQ6ICIgKyByb29tSWQgKyAiLiBDbGllbnRJZDogIiAr
IGNsaWVudElkKTsKLSAgICAgIExvZy5kKFRBRywgIkluaXRpYXRvcjogIiArIGluaXRpYXRvcik7
Ci0gICAgICBMb2cuZChUQUcsICJXU1MgdXJsOiAiICsgd3NzVXJsKTsKLSAgICAgIExvZy5kKFRB
RywgIldTUyBQT1NUIHVybDogIiArIHdzc1Bvc3RVcmwpOwotCi0gICAgICBMaW5rZWRMaXN0PFBl
ZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycyA9Ci0gICAgICAgICAgaWNlU2VydmVy
c0Zyb21QQ0NvbmZpZ0pTT04ocm9vbUpzb24uZ2V0U3RyaW5nKCJwY19jb25maWciKSk7Ci0gICAg
ICBib29sZWFuIGlzVHVyblByZXNlbnQgPSBmYWxzZTsKLSAgICAgIGZvciAoUGVlckNvbm5lY3Rp
b24uSWNlU2VydmVyIHNlcnZlciA6IGljZVNlcnZlcnMpIHsKLSAgICAgICAgTG9nLmQoVEFHLCAi
SWNlU2VydmVyOiAiICsgc2VydmVyKTsKLSAgICAgICAgaWYgKHNlcnZlci51cmkuc3RhcnRzV2l0
aCgidHVybjoiKSkgewotICAgICAgICAgIGlzVHVyblByZXNlbnQgPSB0cnVlOwotICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICAvLyBSZXF1ZXN0IFRVUk4gc2VydmVy
cy4KLSAgICAgIGlmICghaXNUdXJuUHJlc2VudCkgewotICAgICAgICBMaW5rZWRMaXN0PFBlZXJD
b25uZWN0aW9uLkljZVNlcnZlcj4gdHVyblNlcnZlcnMgPQotICAgICAgICAgICAgcmVxdWVzdFR1
cm5TZXJ2ZXJzKHJvb21Kc29uLmdldFN0cmluZygiaWNlX3NlcnZlcl91cmwiKSk7Ci0gICAgICAg
IGZvciAoUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyIHR1cm5TZXJ2ZXIgOiB0dXJuU2VydmVycykg
ewotICAgICAgICAgIExvZy5kKFRBRywgIlR1cm5TZXJ2ZXI6ICIgKyB0dXJuU2VydmVyKTsKLSAg
ICAgICAgICBpY2VTZXJ2ZXJzLmFkZCh0dXJuU2VydmVyKTsKLSAgICAgICAgfQotICAgICAgfQot
Ci0gICAgICBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtcyA9IG5ldyBTaWduYWxpbmdQYXJhbWV0
ZXJzKAotICAgICAgICAgIGljZVNlcnZlcnMsIGluaXRpYXRvciwgY2xpZW50SWQsIHdzc1VybCwg
d3NzUG9zdFVybCwgb2ZmZXJTZHAsIGljZUNhbmRpZGF0ZXMpOwotICAgICAgZXZlbnRzLm9uU2ln
bmFsaW5nUGFyYW1ldGVyc1JlYWR5KHBhcmFtcyk7Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlv
biBlKSB7Ci0gICAgICBldmVudHMub25TaWduYWxpbmdQYXJhbWV0ZXJzRXJyb3IoIlJvb20gSlNP
TiBwYXJzaW5nIGVycm9yOiAiICsgZS50b1N0cmluZygpKTsKLSAgICB9IGNhdGNoIChJT0V4Y2Vw
dGlvbiBlKSB7Ci0gICAgICBldmVudHMub25TaWduYWxpbmdQYXJhbWV0ZXJzRXJyb3IoIlJvb20g
SU8gZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFJlcXVlc3Rz
ICYgcmV0dXJucyBhIFRVUk4gSUNFIFNlcnZlciBiYXNlZCBvbiBhIHJlcXVlc3QgVVJMLiAgTXVz
dCBiZSBydW4KLSAgLy8gb2ZmIHRoZSBtYWluIHRocmVhZCEKLSAgcHJpdmF0ZSBMaW5rZWRMaXN0
PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gcmVxdWVzdFR1cm5TZXJ2ZXJzKFN0cmluZyB1cmwp
Ci0gICAgICB0aHJvd3MgSU9FeGNlcHRpb24sIEpTT05FeGNlcHRpb24gewotICAgIExpbmtlZExp
c3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiB0dXJuU2VydmVycyA9IG5ldyBMaW5rZWRMaXN0
PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4oKTsKLSAgICBMb2cuZChUQUcsICJSZXF1ZXN0IFRV
Uk4gZnJvbTogIiArIHVybCk7Ci0gICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChI
dHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCh1cmwpLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgY29u
bmVjdGlvbi5zZXREb091dHB1dCh0cnVlKTsKLSAgICBjb25uZWN0aW9uLnNldFJlcXVlc3RQcm9w
ZXJ0eSgiUkVGRVJFUiIsICJodHRwczovL2FwcHIudGMiKTsKLSAgICBjb25uZWN0aW9uLnNldENv
bm5lY3RUaW1lb3V0KFRVUk5fSFRUUF9USU1FT1VUX01TKTsKLSAgICBjb25uZWN0aW9uLnNldFJl
YWRUaW1lb3V0KFRVUk5fSFRUUF9USU1FT1VUX01TKTsKLSAgICBpbnQgcmVzcG9uc2VDb2RlID0g
Y29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIw
MCkgewotICAgICAgdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJOb24tMjAwIHJlc3BvbnNlIHdoZW4g
cmVxdWVzdGluZyBUVVJOIHNlcnZlciBmcm9tICIgKyB1cmwgKyAiIDogIgotICAgICAgICAgICsg
Y29ubmVjdGlvbi5nZXRIZWFkZXJGaWVsZChudWxsKSk7Ci0gICAgfQotICAgIElucHV0U3RyZWFt
IHJlc3BvbnNlU3RyZWFtID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOwotICAgIFN0cmlu
ZyByZXNwb25zZSA9IGRyYWluU3RyZWFtKHJlc3BvbnNlU3RyZWFtKTsKLSAgICBjb25uZWN0aW9u
LmRpc2Nvbm5lY3QoKTsKLSAgICBMb2cuZChUQUcsICJUVVJOIHJlc3BvbnNlOiAiICsgcmVzcG9u
c2UpOwotICAgIEpTT05PYmplY3QgcmVzcG9uc2VKU09OID0gbmV3IEpTT05PYmplY3QocmVzcG9u
c2UpOwotICAgIEpTT05BcnJheSBpY2VTZXJ2ZXJzID0gcmVzcG9uc2VKU09OLmdldEpTT05BcnJh
eSgiaWNlU2VydmVycyIpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaWNlU2VydmVycy5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICBKU09OT2JqZWN0IHNlcnZlciA9IGljZVNlcnZlcnMuZ2V0SlNP
Tk9iamVjdChpKTsKLSAgICAgIEpTT05BcnJheSB0dXJuVXJscyA9IHNlcnZlci5nZXRKU09OQXJy
YXkoInVybHMiKTsKLSAgICAgIFN0cmluZyB1c2VybmFtZSA9IHNlcnZlci5oYXMoInVzZXJuYW1l
IikgPyBzZXJ2ZXIuZ2V0U3RyaW5nKCJ1c2VybmFtZSIpIDogIiI7Ci0gICAgICBTdHJpbmcgY3Jl
ZGVudGlhbCA9IHNlcnZlci5oYXMoImNyZWRlbnRpYWwiKSA/IHNlcnZlci5nZXRTdHJpbmcoImNy
ZWRlbnRpYWwiKSA6ICIiOwotICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCB0dXJuVXJscy5sZW5n
dGgoKTsgaisrKSB7Ci0gICAgICAgIFN0cmluZyB0dXJuVXJsID0gdHVyblVybHMuZ2V0U3RyaW5n
KGopOwotICAgICAgICB0dXJuU2VydmVycy5hZGQobmV3IFBlZXJDb25uZWN0aW9uLkljZVNlcnZl
cih0dXJuVXJsLCB1c2VybmFtZSwgY3JlZGVudGlhbCkpOwotICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gdHVyblNlcnZlcnM7Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhlIGxpc3Qgb2YgSUNFIHNl
cnZlcnMgZGVzY3JpYmVkIGJ5IGEgV2ViUlRDUGVlckNvbm5lY3Rpb24KLSAgLy8gY29uZmlndXJh
dGlvbiBzdHJpbmcuCi0gIHByaXZhdGUgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2
ZXI+IGljZVNlcnZlcnNGcm9tUENDb25maWdKU09OKFN0cmluZyBwY0NvbmZpZykKLSAgICAgIHRo
cm93cyBKU09ORXhjZXB0aW9uIHsKLSAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVj
dChwY0NvbmZpZyk7Ci0gICAgSlNPTkFycmF5IHNlcnZlcnMgPSBqc29uLmdldEpTT05BcnJheSgi
aWNlU2VydmVycyIpOwotICAgIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBy
ZXQgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+KCk7Ci0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzZXJ2ZXJzLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgIEpTT05PYmpl
Y3Qgc2VydmVyID0gc2VydmVycy5nZXRKU09OT2JqZWN0KGkpOwotICAgICAgU3RyaW5nIHVybCA9
IHNlcnZlci5nZXRTdHJpbmcoInVybHMiKTsKLSAgICAgIFN0cmluZyBjcmVkZW50aWFsID0gc2Vy
dmVyLmhhcygiY3JlZGVudGlhbCIpID8gc2VydmVyLmdldFN0cmluZygiY3JlZGVudGlhbCIpIDog
IiI7Ci0gICAgICByZXQuYWRkKG5ldyBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIodXJsLCAiIiwg
Y3JlZGVudGlhbCkpOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgLy8gUmV0dXJu
IHRoZSBjb250ZW50cyBvZiBhbiBJbnB1dFN0cmVhbSBhcyBhIFN0cmluZy4KLSAgcHJpdmF0ZSBz
dGF0aWMgU3RyaW5nIGRyYWluU3RyZWFtKElucHV0U3RyZWFtIGluKSB7Ci0gICAgU2Nhbm5lciBz
ID0gbmV3IFNjYW5uZXIoaW4pLnVzZURlbGltaXRlcigiXFxBIik7Ci0gICAgcmV0dXJuIHMuaGFz
TmV4dCgpID8gcy5uZXh0KCkgOiAiIjsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNw
b3QvYXBwcnRjL1NldHRpbmdzQWN0aXZpdHkuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvU2V0dGluZ3NBY3Rpdml0eS5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvU2V0dGluZ3NBY3Rpdml0eS5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsMjY2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhl
IFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVz
ZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UK
LSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0
eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBB
VVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2th
Z2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1p
bXBvcnQgYW5kcm9pZC5jb250ZW50LlNoYXJlZFByZWZlcmVuY2VzOwotaW1wb3J0IGFuZHJvaWQu
Y29udGVudC5TaGFyZWRQcmVmZXJlbmNlcy5PblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5l
cjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnByZWZlcmVuY2Uu
TGlzdFByZWZlcmVuY2U7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLlByZWZlcmVuY2U7Ci1p
bXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmEyRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLnZv
aWNlZW5naW5lLldlYlJ0Y0F1ZGlvVXRpbHM7Ci0KLS8qKgotICogU2V0dGluZ3MgYWN0aXZpdHkg
Zm9yIEFwcFJUQy4KLSAqLwotcHVibGljIGNsYXNzIFNldHRpbmdzQWN0aXZpdHkgZXh0ZW5kcyBB
Y3Rpdml0eSBpbXBsZW1lbnRzIE9uU2hhcmVkUHJlZmVyZW5jZUNoYW5nZUxpc3RlbmVyIHsKLSAg
cHJpdmF0ZSBTZXR0aW5nc0ZyYWdtZW50IHNldHRpbmdzRnJhZ21lbnQ7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZWaWRlb0NhbGw7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZTY3JlZW5jYXB0
dXJlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQ2FtZXJhMjsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZlJlc29sdXRpb247Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZGcHM7Ci0gIHByaXZh
dGUgU3RyaW5nIGtleXByZWZDYXB0dXJlUXVhbGl0eVNsaWRlcjsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5cGU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZNYXhW
aWRlb0JpdHJhdGVWYWx1ZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5UHJlZlZpZGVvQ29kZWM7Ci0g
IHByaXZhdGUgU3RyaW5nIGtleXByZWZId0NvZGVjOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVm
Q2FwdHVyZVRvVGV4dHVyZTsKLQotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmU3RhcnRBdWRpb0Jp
dHJhdGVUeXBlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1
ZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5UHJlZkF1ZGlvQ29kZWM7Ci0gIHByaXZhdGUgU3RyaW5n
IGtleXByZWZOb0F1ZGlvUHJvY2Vzc2luZzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkFlY0R1
bXA7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZPcGVuU0xFUzsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZkRpc2FibGVCdWlsdEluQUVDOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRGlzYWJs
ZUJ1aWx0SW5BR0M7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVpbHRJbk5TOwot
ICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sOwotICBwcml2YXRlIFN0
cmluZyBrZXlwcmVmU3BlYWtlcnBob25lOwotCi0gIHByaXZhdGUgU3RyaW5nIGtleVByZWZSb29t
U2VydmVyVXJsOwotICBwcml2YXRlIFN0cmluZyBrZXlQcmVmRGlzcGxheUh1ZDsKLSAgcHJpdmF0
ZSBTdHJpbmcga2V5UHJlZlRyYWNpbmc7Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lk
IG9uQ3JlYXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0
ZShzYXZlZEluc3RhbmNlU3RhdGUpOwotICAgIGtleXByZWZWaWRlb0NhbGwgPSBnZXRTdHJpbmco
Ui5zdHJpbmcucHJlZl92aWRlb2NhbGxfa2V5KTsKLSAgICBrZXlwcmVmU2NyZWVuY2FwdHVyZSA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3NjcmVlbmNhcHR1cmVfa2V5KTsKLSAgICBrZXlwcmVm
Q2FtZXJhMiA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhbWVyYTJfa2V5KTsKLSAgICBrZXlw
cmVmUmVzb2x1dGlvbiA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jlc29sdXRpb25fa2V5KTsK
LSAgICBrZXlwcmVmRnBzID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZnBzX2tleSk7Ci0gICAg
a2V5cHJlZkNhcHR1cmVRdWFsaXR5U2xpZGVyID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2Fw
dHVyZXF1YWxpdHlzbGlkZXJfa2V5KTsKLSAgICBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZSA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVvYml0cmF0ZV9rZXkpOwotICAgIGtleXBy
ZWZNYXhWaWRlb0JpdHJhdGVWYWx1ZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVv
Yml0cmF0ZXZhbHVlX2tleSk7Ci0gICAga2V5UHJlZlZpZGVvQ29kZWMgPSBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl92aWRlb2NvZGVjX2tleSk7Ci0gICAga2V5cHJlZkh3Q29kZWMgPSBnZXRTdHJp
bmcoUi5zdHJpbmcucHJlZl9od2NvZGVjX2tleSk7Ci0gICAga2V5cHJlZkNhcHR1cmVUb1RleHR1
cmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9jYXB0dXJldG90ZXh0dXJlX2tleSk7Ci0KLSAg
ICBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVUeXBlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZf
c3RhcnRhdWRpb2JpdHJhdGVfa2V5KTsKLSAgICBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1
ZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRldmFsdWVfa2V5KTsK
LSAgICBrZXlQcmVmQXVkaW9Db2RlYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2F1ZGlvY29k
ZWNfa2V5KTsKLSAgICBrZXlwcmVmTm9BdWRpb1Byb2Nlc3NpbmcgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9ub2F1ZGlvcHJvY2Vzc2luZ19rZXkpOwotICAgIGtleXByZWZBZWNEdW1wID0gZ2V0
U3RyaW5nKFIuc3RyaW5nLnByZWZfYWVjZHVtcF9rZXkpOwotICAgIGtleXByZWZPcGVuU0xFUyA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX29wZW5zbGVzX2tleSk7Ci0gICAga2V5cHJlZkRpc2Fi
bGVCdWlsdEluQUVDID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9h
ZWNfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BR0MgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19rZXkpOwotICAgIGtleXByZWZEaXNhYmxlQnVp
bHRJbk5TID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9uc19rZXkp
OwotICAgIGtleXByZWZFbmFibGVMZXZlbENvbnRyb2wgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl9lbmFibGVfbGV2ZWxfY29udHJvbF9rZXkpOwotICAgIGtleXByZWZTcGVha2VycGhvbmUgPSBn
ZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zcGVha2VycGhvbmVfa2V5KTsKLQotICAgIGtleVByZWZS
b29tU2VydmVyVXJsID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcm9vbV9zZXJ2ZXJfdXJsX2tl
eSk7Ci0gICAga2V5UHJlZkRpc3BsYXlIdWQgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9kaXNw
bGF5aHVkX2tleSk7Ci0gICAga2V5UHJlZlRyYWNpbmcgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl90cmFjaW5nX2tleSk7Ci0KLSAgICAvLyBEaXNwbGF5IHRoZSBmcmFnbWVudCBhcyB0aGUgbWFp
biBjb250ZW50LgotICAgIHNldHRpbmdzRnJhZ21lbnQgPSBuZXcgU2V0dGluZ3NGcmFnbWVudCgp
OwotICAgIGdldEZyYWdtZW50TWFuYWdlcigpCi0gICAgICAgIC5iZWdpblRyYW5zYWN0aW9uKCkK
LSAgICAgICAgLnJlcGxhY2UoYW5kcm9pZC5SLmlkLmNvbnRlbnQsIHNldHRpbmdzRnJhZ21lbnQp
Ci0gICAgICAgIC5jb21taXQoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9p
ZCBvblJlc3VtZSgpIHsKLSAgICBzdXBlci5vblJlc3VtZSgpOwotICAgIC8vIFNldCBzdW1tYXJ5
IHRvIGJlIHRoZSB1c2VyLWRlc2NyaXB0aW9uIGZvciB0aGUgc2VsZWN0ZWQgdmFsdWUKLSAgICBT
aGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcyA9Ci0gICAgICAgIHNldHRpbmdzRnJh
Z21lbnQuZ2V0UHJlZmVyZW5jZVNjcmVlbigpLmdldFNoYXJlZFByZWZlcmVuY2VzKCk7Ci0gICAg
c2hhcmVkUHJlZmVyZW5jZXMucmVnaXN0ZXJPblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5l
cih0aGlzKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlZp
ZGVvQ2FsbCk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZT
Y3JlZW5jYXB0dXJlKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5
cHJlZkNhbWVyYTIpOwotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXBy
ZWZSZXNvbHV0aW9uKTsKLSAgICB1cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlw
cmVmRnBzKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkNh
cHR1cmVRdWFsaXR5U2xpZGVyKTsKLSAgICB1cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2Vz
LCBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZSk7Ci0gICAgdXBkYXRlU3VtbWFyeUJpdHJhdGUo
c2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZNYXhWaWRlb0JpdHJhdGVWYWx1ZSk7Ci0gICAgc2V0
VmlkZW9CaXRyYXRlRW5hYmxlKHNoYXJlZFByZWZlcmVuY2VzKTsKLSAgICB1cGRhdGVTdW1tYXJ5
KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmVmlkZW9Db2RlYyk7Ci0gICAgdXBkYXRlU3VtbWFy
eUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZId0NvZGVjKTsKLSAgICB1cGRhdGVTdW1tYXJ5
QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkNhcHR1cmVUb1RleHR1cmUpOwotCi0gICAgdXBk
YXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlw
ZSk7Ci0gICAgdXBkYXRlU3VtbWFyeUJpdHJhdGUoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZT
dGFydEF1ZGlvQml0cmF0ZVZhbHVlKTsKLSAgICBzZXRBdWRpb0JpdHJhdGVFbmFibGUoc2hhcmVk
UHJlZmVyZW5jZXMpOwotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVBy
ZWZBdWRpb0NvZGVjKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5
cHJlZk5vQXVkaW9Qcm9jZXNzaW5nKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJl
bmNlcywga2V5cHJlZkFlY0R1bXApOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVu
Y2VzLCBrZXlwcmVmT3BlblNMRVMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVu
Y2VzLCBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BRUMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJl
ZFByZWZlcmVuY2VzLCBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BR0MpOwotICAgIHVwZGF0ZVN1bW1h
cnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5OUyk7Ci0gICAgdXBk
YXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZFbmFibGVMZXZlbENvbnRyb2wp
OwotICAgIHVwZGF0ZVN1bW1hcnlMaXN0KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmU3BlYWtl
cnBob25lKTsKLQotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZS
b29tU2VydmVyVXJsKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5
UHJlZkRpc3BsYXlIdWQpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBr
ZXlQcmVmVHJhY2luZyk7Ci0KLSAgICBpZiAoIUNhbWVyYTJFbnVtZXJhdG9yLmlzU3VwcG9ydGVk
KHRoaXMpKSB7Ci0gICAgICBQcmVmZXJlbmNlIGNhbWVyYTJQcmVmZXJlbmNlID0gc2V0dGluZ3NG
cmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlwcmVmQ2FtZXJhMik7Ci0KLSAgICAgIGNhbWVyYTJQ
cmVmZXJlbmNlLnNldFN1bW1hcnkoZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2FtZXJhMl9ub3Rf
c3VwcG9ydGVkKSk7Ci0gICAgICBjYW1lcmEyUHJlZmVyZW5jZS5zZXRFbmFibGVkKGZhbHNlKTsK
LSAgICB9Ci0KLSAgICAvLyBEaXNhYmxlIGZvcmNpbmcgV2ViUlRDIGJhc2VkIEFFQyBzbyBpdCB3
b24ndCBhZmZlY3Qgb3VyIHZhbHVlLgotICAgIC8vIE90aGVyd2lzZSwgaWYgaXQgd2FzIGVuYWJs
ZWQsIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQgd291bGQgYWx3YXlzIHJldHVybiBm
YWxzZS4KLSAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXIoZmFsc2UpOwotICAgIGlmICghV2ViUnRjQXVkaW9VdGlscy5pc0Fjb3VzdGljRWNob0Nh
bmNlbGVyU3VwcG9ydGVkKCkpIHsKLSAgICAgIFByZWZlcmVuY2UgZGlzYWJsZUJ1aWx0SW5BRUNQ
cmVmZXJlbmNlID0KLSAgICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtl
eXByZWZEaXNhYmxlQnVpbHRJbkFFQyk7Ci0KLSAgICAgIGRpc2FibGVCdWlsdEluQUVDUHJlZmVy
ZW5jZS5zZXRTdW1tYXJ5KGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2J1aWx0X2luX2FlY19ub3Rf
YXZhaWxhYmxlKSk7Ci0gICAgICBkaXNhYmxlQnVpbHRJbkFFQ1ByZWZlcmVuY2Uuc2V0RW5hYmxl
ZChmYWxzZSk7Ci0gICAgfQotCi0gICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZEF1
dG9tYXRpY0dhaW5Db250cm9sKGZhbHNlKTsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMuaXNB
dXRvbWF0aWNHYWluQ29udHJvbFN1cHBvcnRlZCgpKSB7Ci0gICAgICBQcmVmZXJlbmNlIGRpc2Fi
bGVCdWlsdEluQUdDUHJlZmVyZW5jZSA9Ci0gICAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5k
UHJlZmVyZW5jZShrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BR0MpOwotCi0gICAgICBkaXNhYmxlQnVp
bHRJbkFHQ1ByZWZlcmVuY2Uuc2V0U3VtbWFyeShnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9idWls
dF9pbl9hZ2Nfbm90X2F2YWlsYWJsZSkpOwotICAgICAgZGlzYWJsZUJ1aWx0SW5BR0NQcmVmZXJl
bmNlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLQotICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0
V2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoZmFsc2UpOwotICAgIGlmICghV2ViUnRjQXVkaW9V
dGlscy5pc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpKSB7Ci0gICAgICBQcmVmZXJlbmNlIGRp
c2FibGVCdWlsdEluTlNQcmVmZXJlbmNlID0KLSAgICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmZp
bmRQcmVmZXJlbmNlKGtleXByZWZEaXNhYmxlQnVpbHRJbk5TKTsKLQotICAgICAgZGlzYWJsZUJ1
aWx0SW5OU1ByZWZlcmVuY2Uuc2V0U3VtbWFyeShnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9idWls
dF9pbl9uc19ub3RfYXZhaWxhYmxlKSk7Ci0gICAgICBkaXNhYmxlQnVpbHRJbk5TUHJlZmVyZW5j
ZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVj
dGVkIHZvaWQgb25QYXVzZSgpIHsKLSAgICBzdXBlci5vblBhdXNlKCk7Ci0gICAgU2hhcmVkUHJl
ZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMgPQotICAgICAgICBzZXR0aW5nc0ZyYWdtZW50Lmdl
dFByZWZlcmVuY2VTY3JlZW4oKS5nZXRTaGFyZWRQcmVmZXJlbmNlcygpOwotICAgIHNoYXJlZFBy
ZWZlcmVuY2VzLnVucmVnaXN0ZXJPblNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lcih0aGlz
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblNoYXJlZFByZWZlcmVuY2VD
aGFuZ2VkKFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7
Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIGlmIChrZXkuZXF1YWxzKGtleXByZWZSZXNv
bHV0aW9uKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZGcHMpCi0gICAgICAgIHx8IGtl
eS5lcXVhbHMoa2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5cGUpCi0gICAgICAgIHx8IGtleS5lcXVh
bHMoa2V5UHJlZlZpZGVvQ29kZWMpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZlN0YXJ0
QXVkaW9CaXRyYXRlVHlwZSkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlQcmVmQXVkaW9Db2Rl
YykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlQcmVmUm9vbVNlcnZlclVybCkpIHsKLSAgICAg
IHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJlZmVyZW5jZXMsIGtleSk7Ci0gICAgfSBlbHNlIGlmIChr
ZXkuZXF1YWxzKGtleXByZWZNYXhWaWRlb0JpdHJhdGVWYWx1ZSkKLSAgICAgICAgfHwga2V5LmVx
dWFscyhrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1ZSkpIHsKLSAgICAgIHVwZGF0ZVN1bW1h
cnlCaXRyYXRlKHNoYXJlZFByZWZlcmVuY2VzLCBrZXkpOwotICAgIH0gZWxzZSBpZiAoa2V5LmVx
dWFscyhrZXlwcmVmVmlkZW9DYWxsKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZTY3Jl
ZW5jYXB0dXJlKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZDYW1lcmEyKQotICAgICAg
ICB8fCBrZXkuZXF1YWxzKGtleVByZWZUcmFjaW5nKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtl
eXByZWZDYXB0dXJlUXVhbGl0eVNsaWRlcikKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVm
SHdDb2RlYykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmQ2FwdHVyZVRvVGV4dHVyZSkK
LSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmTm9BdWRpb1Byb2Nlc3NpbmcpCi0gICAgICAg
IHx8IGtleS5lcXVhbHMoa2V5cHJlZkFlY0R1bXApCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5
cHJlZk9wZW5TTEVTKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZEaXNhYmxlQnVpbHRJ
bkFFQykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BR0MpCi0g
ICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkRpc2FibGVCdWlsdEluTlMpCi0gICAgICAgIHx8
IGtleS5lcXVhbHMoa2V5cHJlZkVuYWJsZUxldmVsQ29udHJvbCkKLSAgICAgICAgfHwga2V5LmVx
dWFscyhrZXlQcmVmRGlzcGxheUh1ZCkpIHsKLSAgICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFBy
ZWZlcmVuY2VzLCBrZXkpOwotICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhrZXlwcmVmU3BlYWtl
cnBob25lKSkgewotICAgICAgdXBkYXRlU3VtbWFyeUxpc3Qoc2hhcmVkUHJlZmVyZW5jZXMsIGtl
eSk7Ci0gICAgfQotICAgIC8vIGNsYW5nLWZvcm1hdCBvbgotICAgIGlmIChrZXkuZXF1YWxzKGtl
eXByZWZNYXhWaWRlb0JpdHJhdGVUeXBlKSkgewotICAgICAgc2V0VmlkZW9CaXRyYXRlRW5hYmxl
KHNoYXJlZFByZWZlcmVuY2VzKTsKLSAgICB9Ci0gICAgaWYgKGtleS5lcXVhbHMoa2V5cHJlZlN0
YXJ0QXVkaW9CaXRyYXRlVHlwZSkpIHsKLSAgICAgIHNldEF1ZGlvQml0cmF0ZUVuYWJsZShzaGFy
ZWRQcmVmZXJlbmNlcyk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1bW1h
cnkoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMsIFN0cmluZyBrZXkpIHsKLSAg
ICBQcmVmZXJlbmNlIHVwZGF0ZWRQcmVmID0gc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5j
ZShrZXkpOwotICAgIC8vIFNldCBzdW1tYXJ5IHRvIGJlIHRoZSB1c2VyLWRlc2NyaXB0aW9uIGZv
ciB0aGUgc2VsZWN0ZWQgdmFsdWUKLSAgICB1cGRhdGVkUHJlZi5zZXRTdW1tYXJ5KHNoYXJlZFBy
ZWZlcmVuY2VzLmdldFN0cmluZyhrZXksICIiKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBk
YXRlU3VtbWFyeUJpdHJhdGUoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMsIFN0
cmluZyBrZXkpIHsKLSAgICBQcmVmZXJlbmNlIHVwZGF0ZWRQcmVmID0gc2V0dGluZ3NGcmFnbWVu
dC5maW5kUHJlZmVyZW5jZShrZXkpOwotICAgIHVwZGF0ZWRQcmVmLnNldFN1bW1hcnkoc2hhcmVk
UHJlZmVyZW5jZXMuZ2V0U3RyaW5nKGtleSwgIiIpICsgIiBrYnBzIik7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgdXBkYXRlU3VtbWFyeUIoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5j
ZXMsIFN0cmluZyBrZXkpIHsKLSAgICBQcmVmZXJlbmNlIHVwZGF0ZWRQcmVmID0gc2V0dGluZ3NG
cmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXkpOwotICAgIHVwZGF0ZWRQcmVmLnNldFN1bW1hcnko
c2hhcmVkUHJlZmVyZW5jZXMuZ2V0Qm9vbGVhbihrZXksIHRydWUpCi0gICAgICAgICAgICA/IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX3ZhbHVlX2VuYWJsZWQpCi0gICAgICAgICAgICA6IGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX3ZhbHVlX2Rpc2FibGVkKSk7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgdXBkYXRlU3VtbWFyeUxpc3QoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMs
IFN0cmluZyBrZXkpIHsKLSAgICBMaXN0UHJlZmVyZW5jZSB1cGRhdGVkUHJlZiA9IChMaXN0UHJl
ZmVyZW5jZSkgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXkpOwotICAgIHVwZGF0
ZWRQcmVmLnNldFN1bW1hcnkodXBkYXRlZFByZWYuZ2V0RW50cnkoKSk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgc2V0VmlkZW9CaXRyYXRlRW5hYmxlKFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFBy
ZWZlcmVuY2VzKSB7Ci0gICAgUHJlZmVyZW5jZSBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlID0KLSAg
ICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlwcmVmTWF4VmlkZW9CaXRy
YXRlVmFsdWUpOwotICAgIFN0cmluZyBiaXRyYXRlVHlwZURlZmF1bHQgPSBnZXRTdHJpbmcoUi5z
dHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGVfZGVmYXVsdCk7Ci0gICAgU3RyaW5nIGJpdHJhdGVU
eXBlID0KLSAgICAgICAgc2hhcmVkUHJlZmVyZW5jZXMuZ2V0U3RyaW5nKGtleXByZWZNYXhWaWRl
b0JpdHJhdGVUeXBlLCBiaXRyYXRlVHlwZURlZmF1bHQpOwotICAgIGlmIChiaXRyYXRlVHlwZS5l
cXVhbHMoYml0cmF0ZVR5cGVEZWZhdWx0KSkgewotICAgICAgYml0cmF0ZVByZWZlcmVuY2VWYWx1
ZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAgICB9IGVsc2UgewotICAgICAgYml0cmF0ZVByZWZlcmVu
Y2VWYWx1ZS5zZXRFbmFibGVkKHRydWUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBz
ZXRBdWRpb0JpdHJhdGVFbmFibGUoU2hhcmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMp
IHsKLSAgICBQcmVmZXJlbmNlIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUgPQotICAgICAgICBzZXR0
aW5nc0ZyYWdtZW50LmZpbmRQcmVmZXJlbmNlKGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVZhbHVl
KTsKLSAgICBTdHJpbmcgYml0cmF0ZVR5cGVEZWZhdWx0ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnBy
ZWZfc3RhcnRhdWRpb2JpdHJhdGVfZGVmYXVsdCk7Ci0gICAgU3RyaW5nIGJpdHJhdGVUeXBlID0K
LSAgICAgICAgc2hhcmVkUHJlZmVyZW5jZXMuZ2V0U3RyaW5nKGtleXByZWZTdGFydEF1ZGlvQml0
cmF0ZVR5cGUsIGJpdHJhdGVUeXBlRGVmYXVsdCk7Ci0gICAgaWYgKGJpdHJhdGVUeXBlLmVxdWFs
cyhiaXRyYXRlVHlwZURlZmF1bHQpKSB7Ci0gICAgICBiaXRyYXRlUHJlZmVyZW5jZVZhbHVlLnNl
dEVuYWJsZWQoZmFsc2UpOwotICAgIH0gZWxzZSB7Ci0gICAgICBiaXRyYXRlUHJlZmVyZW5jZVZh
bHVlLnNldEVuYWJsZWQodHJ1ZSk7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvU2V0dGluZ3NGcmFnbWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5nc0ZyYWdtZW50LmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5nc0ZyYWdtZW50Lmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0
IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVuZGxlOwot
aW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlRnJhZ21lbnQ7Ci0KLS8qKgotICog
U2V0dGluZ3MgZnJhZ21lbnQgZm9yIEFwcFJUQy4KLSAqLwotcHVibGljIGNsYXNzIFNldHRpbmdz
RnJhZ21lbnQgZXh0ZW5kcyBQcmVmZXJlbmNlRnJhZ21lbnQgewotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25DcmVhdGUoQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIHN1cGVy
Lm9uQ3JlYXRlKHNhdmVkSW5zdGFuY2VTdGF0ZSk7Ci0gICAgLy8gTG9hZCB0aGUgcHJlZmVyZW5j
ZXMgZnJvbSBhbiBYTUwgcmVzb3VyY2UKLSAgICBhZGRQcmVmZXJlbmNlc0Zyb21SZXNvdXJjZShS
LnhtbC5wcmVmZXJlbmNlcyk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9UQ1BDaGFubmVsQ2xpZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL1RDUENoYW5uZWxDbGllbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1RDUENoYW5uZWxDbGllbnQuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDM1NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJS
VEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBv
cmcud2VicnRjLlRocmVhZFV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsK
LWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1S
ZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5JbmV0
QWRkcmVzczsKLWltcG9ydCBqYXZhLm5ldC5TZXJ2ZXJTb2NrZXQ7Ci1pbXBvcnQgamF2YS5uZXQu
U29ja2V0OwotaW1wb3J0IGphdmEubmV0LlVua25vd25Ib3N0RXhjZXB0aW9uOwotaW1wb3J0IGph
dmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2VydmljZTsKLQotLyoqCi0gKiBSZXBsYWNlbWVu
dCBmb3IgV2ViU29ja2V0Q2hhbm5lbENsaWVudCBmb3IgZGlyZWN0IGNvbW11bmljYXRpb24gYmV0
d2VlbiB0d28gSVAgYWRkcmVzc2VzLiBIYW5kbGVzCi0gKiB0aGUgc2lnbmFsaW5nIGJldHdlZW4g
dGhlIHR3byBjbGllbnRzIHVzaW5nIGEgVENQIGNvbm5lY3Rpb24uCi0gKgotICogPHA+QWxsIHB1
YmxpYyBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgZnJvbSBhIGxvb3BlciBleGVjdXRvciB0aHJl
YWQKLSAqIHBhc3NlZCBpbiBhIGNvbnN0cnVjdG9yLCBvdGhlcndpc2UgZXhjZXB0aW9uIHdpbGwg
YmUgdGhyb3duLgotICogQWxsIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBvbiB0aGUgc2FtZSB0aHJl
YWQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUQ1BDaGFubmVsQ2xpZW50IHsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJUQ1BDaGFubmVsQ2xpZW50IjsKLQotICBwcml2YXRlIGZp
bmFsIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLSAgcHJpdmF0ZSBmaW5hbCBUaHJlYWRVdGls
cy5UaHJlYWRDaGVja2VyIGV4ZWN1dG9yVGhyZWFkQ2hlY2s7Ci0gIHByaXZhdGUgZmluYWwgVENQ
Q2hhbm5lbEV2ZW50cyBldmVudExpc3RlbmVyOwotICBwcml2YXRlIFRDUFNvY2tldCBzb2NrZXQ7
Ci0KLSAgLyoqCi0gICAqIENhbGxiYWNrIGludGVyZmFjZSBmb3IgbWVzc2FnZXMgZGVsaXZlcmVk
IG9uIFRDUCBDb25uZWN0aW9uLiBBbGwgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZyb20gdGhlCi0g
ICAqIGxvb3BlciBleGVjdXRvciB0aHJlYWQuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIFRD
UENoYW5uZWxFdmVudHMgewotICAgIHZvaWQgb25UQ1BDb25uZWN0ZWQoYm9vbGVhbiBzZXJ2ZXIp
OwotICAgIHZvaWQgb25UQ1BNZXNzYWdlKFN0cmluZyBtZXNzYWdlKTsKLSAgICB2b2lkIG9uVENQ
RXJyb3IoU3RyaW5nIGRlc2NyaXB0aW9uKTsKLSAgICB2b2lkIG9uVENQQ2xvc2UoKTsKLSAgfQot
Ci0gIC8qKgotICAgKiBJbml0aWFsaXplcyB0aGUgVENQQ2hhbm5lbENsaWVudC4gSWYgSVAgaXMg
YSBsb2NhbCBJUCBhZGRyZXNzLCBzdGFydHMgYSBsaXN0ZW5pbmcgc2VydmVyIG9uCi0gICAqIHRo
YXQgSVAuIElmIG5vdCwgaW5zdGVhZCBjb25uZWN0cyB0byB0aGUgSVAuCi0gICAqCi0gICAqIEBw
YXJhbSBldmVudExpc3RlbmVyIExpc3RlbmVyIHRoYXQgd2lsbCByZWNlaXZlIGV2ZW50cyBmcm9t
IHRoZSBjbGllbnQuCi0gICAqIEBwYXJhbSBpcCBJUCBhZGRyZXNzIHRvIGxpc3RlbiBvbiBvciBj
b25uZWN0IHRvLgotICAgKiBAcGFyYW0gcG9ydCBQb3J0IHRvIGxpc3RlbiBvbiBvciBjb25uZWN0
IHRvLgotICAgKi8KLSAgcHVibGljIFRDUENoYW5uZWxDbGllbnQoCi0gICAgICBFeGVjdXRvclNl
cnZpY2UgZXhlY3V0b3IsIFRDUENoYW5uZWxFdmVudHMgZXZlbnRMaXN0ZW5lciwgU3RyaW5nIGlw
LCBpbnQgcG9ydCkgewotICAgIHRoaXMuZXhlY3V0b3IgPSBleGVjdXRvcjsKLSAgICBleGVjdXRv
clRocmVhZENoZWNrID0gbmV3IFRocmVhZFV0aWxzLlRocmVhZENoZWNrZXIoKTsKLSAgICBleGVj
dXRvclRocmVhZENoZWNrLmRldGFjaFRocmVhZCgpOwotICAgIHRoaXMuZXZlbnRMaXN0ZW5lciA9
IGV2ZW50TGlzdGVuZXI7Ci0KLSAgICBJbmV0QWRkcmVzcyBhZGRyZXNzOwotICAgIHRyeSB7Ci0g
ICAgICBhZGRyZXNzID0gSW5ldEFkZHJlc3MuZ2V0QnlOYW1lKGlwKTsKLSAgICB9IGNhdGNoIChV
bmtub3duSG9zdEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiSW52YWxpZCBJUCBh
ZGRyZXNzLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChhZGRyZXNzLmlzQW55
TG9jYWxBZGRyZXNzKCkpIHsKLSAgICAgIHNvY2tldCA9IG5ldyBUQ1BTb2NrZXRTZXJ2ZXIoYWRk
cmVzcywgcG9ydCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNvY2tldCA9IG5ldyBUQ1BTb2NrZXRD
bGllbnQoYWRkcmVzcywgcG9ydCk7Ci0gICAgfQotCi0gICAgc29ja2V0LnN0YXJ0KCk7Ci0gIH0K
LQotICAvKioKLSAgICogRGlzY29ubmVjdHMgdGhlIGNsaWVudCBpZiBub3QgYWxyZWFkeSBkaXNj
b25uZWN0ZWQuIFRoaXMgd2lsbCBmaXJlIHRoZSBvblRDUENsb3NlIGV2ZW50LgotICAgKi8KLSAg
cHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHsKLSAgICBleGVjdXRvclRocmVhZENoZWNrLmNoZWNr
SXNPblZhbGlkVGhyZWFkKCk7Ci0KLSAgICBzb2NrZXQuZGlzY29ubmVjdCgpOwotICB9Ci0KLSAg
LyoqCi0gICAqIFNlbmRzIGEgbWVzc2FnZSBvbiB0aGUgc29ja2V0LgotICAgKgotICAgKiBAcGFy
YW0gbWVzc2FnZSBNZXNzYWdlIHRvIGJlIHNlbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZW5k
KFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgZXhlY3V0b3JUaHJlYWRDaGVjay5jaGVja0lzT25WYWxp
ZFRocmVhZCgpOwotCi0gICAgc29ja2V0LnNlbmQobWVzc2FnZSk7Ci0gIH0KLQotICAvKioKLSAg
ICogSGVscGVyIG1ldGhvZCBmb3IgZmlyaW5nIG9uVENQRXJyb3IgZXZlbnRzLiBDYWxscyBvblRD
UEVycm9yIG9uIHRoZSBleGVjdXRvciB0aHJlYWQuCi0gICAqLwotICBwcml2YXRlIHZvaWQgcmVw
b3J0RXJyb3IoZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBMb2cuZShUQUcsICJUQ1AgRXJy
b3I6ICIgKyBtZXNzYWdlKTsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBldmVu
dExpc3RlbmVyLm9uVENQRXJyb3IobWVzc2FnZSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICAvKioKLSAgICogQmFzZSBjbGFzcyBmb3Igc2VydmVyIGFuZCBjbGllbnQgc29ja2V0cy4gQ29u
dGFpbnMgYSBsaXN0ZW5pbmcgdGhyZWFkIHRoYXQgd2lsbCBjYWxsCi0gICAqIGV2ZW50TGlzdGVu
ZXIub25UQ1BNZXNzYWdlIG9uIG5ldyBtZXNzYWdlcy4KLSAgICovCi0gIHByaXZhdGUgYWJzdHJh
Y3QgY2xhc3MgVENQU29ja2V0IGV4dGVuZHMgVGhyZWFkIHsKLSAgICAvLyBMb2NrIGZvciBlZGl0
aW5nIG91dCBhbmQgcmF3U29ja2V0Ci0gICAgcHJvdGVjdGVkIGZpbmFsIE9iamVjdCByYXdTb2Nr
ZXRMb2NrOwotICAgIHByaXZhdGUgUHJpbnRXcml0ZXIgb3V0OwotICAgIHByaXZhdGUgU29ja2V0
IHJhd1NvY2tldDsKLQotICAgIC8qKgotICAgICAqIENvbm5lY3QgdG8gdGhlIHBlZXIsIHBvdGVu
dGlhbGx5IGEgc2xvdyBvcGVyYXRpb24uCi0gICAgICoKLSAgICAgKiBAcmV0dXJuIFNvY2tldCBj
b25uZWN0aW9uLCBudWxsIGlmIGNvbm5lY3Rpb24gZmFpbGVkLgotICAgICAqLwotICAgIHB1Ymxp
YyBhYnN0cmFjdCBTb2NrZXQgY29ubmVjdCgpOwotICAgIC8qKiBSZXR1cm5zIHRydWUgaWYgc29j
a2V0cyBpcyBhIHNlcnZlciByYXdTb2NrZXQuICovCi0gICAgcHVibGljIGFic3RyYWN0IGJvb2xl
YW4gaXNTZXJ2ZXIoKTsKLQotICAgIFRDUFNvY2tldCgpIHsKLSAgICAgIHJhd1NvY2tldExvY2sg
PSBuZXcgT2JqZWN0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGhlIGxpc3RlbmluZyB0
aHJlYWQuCi0gICAgICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgTG9nLmQoVEFHLCAiTGlzdGVuaW5nIHRocmVhZCBzdGFydGVkLi4uIik7Ci0KLSAgICAg
IC8vIFJlY2VpdmUgY29ubmVjdGlvbiB0byB0ZW1wb3JhcnkgdmFyaWFibGUgZmlyc3QsIHNvIHdl
IGRvbid0IGJsb2NrLgotICAgICAgU29ja2V0IHRlbXBTb2NrZXQgPSBjb25uZWN0KCk7Ci0gICAg
ICBCdWZmZXJlZFJlYWRlciBpbjsKLQotICAgICAgTG9nLmQoVEFHLCAiVENQIGNvbm5lY3Rpb24g
ZXN0YWJsaXNoZWQuIik7Ci0KLSAgICAgIHN5bmNocm9uaXplZCAocmF3U29ja2V0TG9jaykgewot
ICAgICAgICBpZiAocmF3U29ja2V0ICE9IG51bGwpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJT
b2NrZXQgYWxyZWFkeSBleGlzdGVkIGFuZCB3aWxsIGJlIHJlcGxhY2VkLiIpOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmF3U29ja2V0ID0gdGVtcFNvY2tldDsKLQotICAgICAgICAvLyBDb25uZWN0
aW5nIGZhaWxlZCwgZXJyb3IgaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZCwganVzdCBleGl0Lgot
ICAgICAgICBpZiAocmF3U29ja2V0ID09IG51bGwpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLQotICAgICAgICB0cnkgewotICAgICAgICAgIG91dCA9IG5ldyBQcmludFdyaXRlcihy
YXdTb2NrZXQuZ2V0T3V0cHV0U3RyZWFtKCksIHRydWUpOwotICAgICAgICAgIGluID0gbmV3IEJ1
ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihyYXdTb2NrZXQuZ2V0SW5wdXRTdHJl
YW0oKSkpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgcmVw
b3J0RXJyb3IoIkZhaWxlZCB0byBvcGVuIElPIG9uIHJhd1NvY2tldDogIiArIGUuZ2V0TWVzc2Fn
ZSgpKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgTG9n
LnYoVEFHLCAiRXhlY3V0ZSBvblRDUENvbm5lY3RlZCIpOwotICAgICAgZXhlY3V0b3IuZXhlY3V0
ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgICAgTG9nLnYoVEFHLCAiUnVuIG9uVENQQ29ubmVjdGVkIik7Ci0g
ICAgICAgICAgZXZlbnRMaXN0ZW5lci5vblRDUENvbm5lY3RlZChpc1NlcnZlcigpKTsKLSAgICAg
ICAgfQotICAgICAgfSk7Ci0KLSAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIGZpbmFsIFN0
cmluZyBtZXNzYWdlOwotICAgICAgICB0cnkgewotICAgICAgICAgIG1lc3NhZ2UgPSBpbi5yZWFk
TGluZSgpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgc3lu
Y2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgICAgICAvLyBJZiBzb2NrZXQgd2Fz
IGNsb3NlZCwgdGhpcyBpcyBleHBlY3RlZC4KLSAgICAgICAgICAgIGlmIChyYXdTb2NrZXQgPT0g
bnVsbCkgewotICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9
Ci0KLSAgICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIHJlYWQgZnJvbSByYXdTb2NrZXQ6
ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBObyBkYXRhIHJlY2VpdmVkLCByYXdTb2NrZXQgcHJvYmFibHkgY2xvc2VkLgotICAg
ICAgICBpZiAobWVzc2FnZSA9PSBudWxsKSB7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LQotICAgICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICBMb2cu
dihUQUcsICJSZWNlaXZlOiAiICsgbWVzc2FnZSk7Ci0gICAgICAgICAgICBldmVudExpc3RlbmVy
Lm9uVENQTWVzc2FnZShtZXNzYWdlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAg
fQotCi0gICAgICBMb2cuZChUQUcsICJSZWNlaXZpbmcgdGhyZWFkIGV4aXRpbmcuLi4iKTsKLQot
ICAgICAgLy8gQ2xvc2UgdGhlIHJhd1NvY2tldCBpZiBpdCBpcyBzdGlsbCBvcGVuLgotICAgICAg
ZGlzY29ubmVjdCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENsb3NlcyB0aGUgcmF3U29j
a2V0IGlmIGl0IGlzIHN0aWxsIG9wZW4uIEFsc28gZmlyZXMgdGhlIG9uVENQQ2xvc2UgZXZlbnQu
Ci0gICAgICovCi0gICAgcHVibGljIHZvaWQgZGlzY29ubmVjdCgpIHsKLSAgICAgIHRyeSB7Ci0g
ICAgICAgIHN5bmNocm9uaXplZCAocmF3U29ja2V0TG9jaykgewotICAgICAgICAgIGlmIChyYXdT
b2NrZXQgIT0gbnVsbCkgewotICAgICAgICAgICAgcmF3U29ja2V0LmNsb3NlKCk7Ci0gICAgICAg
ICAgICByYXdTb2NrZXQgPSBudWxsOwotICAgICAgICAgICAgb3V0ID0gbnVsbDsKLQotICAgICAg
ICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgICAgIEBP
dmVycmlkZQotICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgICAg
ICAgZXZlbnRMaXN0ZW5lci5vblRDUENsb3NlKCk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0pOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRp
b24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNsb3NlIHJhd1NvY2tldDog
IiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBT
ZW5kcyBhIG1lc3NhZ2Ugb24gdGhlIHNvY2tldC4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIHRo
ZSBleGVjdXRvciB0aHJlYWQuCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc2VuZChTdHJpbmcg
bWVzc2FnZSkgewotICAgICAgTG9nLnYoVEFHLCAiU2VuZDogIiArIG1lc3NhZ2UpOwotCi0gICAg
ICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExvY2spIHsKLSAgICAgICAgaWYgKG91dCA9PSBudWxs
KSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcgZGF0YSBvbiBjbG9zZWQgc29ja2V0
LiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIG91dC53cml0ZSht
ZXNzYWdlICsgIlxuIik7Ci0gICAgICAgIG91dC5mbHVzaCgpOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgY2xhc3MgVENQU29ja2V0U2VydmVyIGV4dGVuZHMgVENQU29ja2V0IHsK
LSAgICAvLyBTZXJ2ZXIgc29ja2V0IGlzIGFsc28gZ3VhcmRlZCBieSByYXdTb2NrZXRMb2NrLgot
ICAgIHByaXZhdGUgU2VydmVyU29ja2V0IHNlcnZlclNvY2tldDsKLQotICAgIGZpbmFsIHByaXZh
dGUgSW5ldEFkZHJlc3MgYWRkcmVzczsKLSAgICBmaW5hbCBwcml2YXRlIGludCBwb3J0OwotCi0g
ICAgcHVibGljIFRDUFNvY2tldFNlcnZlcihJbmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydCkg
ewotICAgICAgdGhpcy5hZGRyZXNzID0gYWRkcmVzczsKLSAgICAgIHRoaXMucG9ydCA9IHBvcnQ7
Ci0gICAgfQotCi0gICAgLyoqIE9wZW5zIGEgbGlzdGVuaW5nIHNvY2tldCBhbmQgd2FpdHMgZm9y
IGEgY29ubmVjdGlvbi4gKi8KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU29ja2V0IGNvbm5l
Y3QoKSB7Ci0gICAgICBMb2cuZChUQUcsICJMaXN0ZW5pbmcgb24gWyIgKyBhZGRyZXNzLmdldEhv
c3RBZGRyZXNzKCkgKyAiXToiICsgSW50ZWdlci50b1N0cmluZyhwb3J0KSk7Ci0KLSAgICAgIGZp
bmFsIFNlcnZlclNvY2tldCB0ZW1wU29ja2V0OwotICAgICAgdHJ5IHsKLSAgICAgICAgdGVtcFNv
Y2tldCA9IG5ldyBTZXJ2ZXJTb2NrZXQocG9ydCwgMCwgYWRkcmVzcyk7Ci0gICAgICB9IGNhdGNo
IChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gY3JlYXRl
IHNlcnZlciBzb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgICAgfQotCi0gICAgICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExvY2spIHsKLSAgICAg
ICAgaWYgKHNlcnZlclNvY2tldCAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiU2Vy
dmVyIHJhd1NvY2tldCB3YXMgYWxyZWFkeSBsaXN0ZW5pbmcgYW5kIG5ldyB3aWxsIGJlIG9wZW5l
ZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNlcnZlclNvY2tldCA9IHRlbXBTb2NrZXQ7Ci0g
ICAgICB9Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIHJldHVybiB0ZW1wU29ja2V0LmFjY2VwdCgp
OwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigi
RmFpbGVkIHRvIHJlY2VpdmUgY29ubmVjdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAg
ICAgcmV0dXJuIG51bGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqIENsb3NlcyB0aGUgbGlz
dGVuaW5nIHNvY2tldCBhbmQgY2FsbHMgc3VwZXIuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVi
bGljIHZvaWQgZGlzY29ubmVjdCgpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHN5bmNocm9uaXpl
ZCAocmF3U29ja2V0TG9jaykgewotICAgICAgICAgIGlmIChzZXJ2ZXJTb2NrZXQgIT0gbnVsbCkg
ewotICAgICAgICAgICAgc2VydmVyU29ja2V0LmNsb3NlKCk7Ci0gICAgICAgICAgICBzZXJ2ZXJT
b2NrZXQgPSBudWxsOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoSU9F
eGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNsb3NlIHNlcnZl
ciBzb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0KLSAgICAgIHN1cGVyLmRp
c2Nvbm5lY3QoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgYm9vbGVhbiBp
c1NlcnZlcigpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
Y2xhc3MgVENQU29ja2V0Q2xpZW50IGV4dGVuZHMgVENQU29ja2V0IHsKLSAgICBmaW5hbCBwcml2
YXRlIEluZXRBZGRyZXNzIGFkZHJlc3M7Ci0gICAgZmluYWwgcHJpdmF0ZSBpbnQgcG9ydDsKLQot
ICAgIHB1YmxpYyBUQ1BTb2NrZXRDbGllbnQoSW5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQp
IHsKLSAgICAgIHRoaXMuYWRkcmVzcyA9IGFkZHJlc3M7Ci0gICAgICB0aGlzLnBvcnQgPSBwb3J0
OwotICAgIH0KLQotICAgIC8qKiBDb25uZWN0cyB0byB0aGUgcGVlci4gKi8KLSAgICBAT3ZlcnJp
ZGUKLSAgICBwdWJsaWMgU29ja2V0IGNvbm5lY3QoKSB7Ci0gICAgICBMb2cuZChUQUcsICJDb25u
ZWN0aW5nIHRvIFsiICsgYWRkcmVzcy5nZXRIb3N0QWRkcmVzcygpICsgIl06IiArIEludGVnZXIu
dG9TdHJpbmcocG9ydCkpOwotCi0gICAgICB0cnkgewotICAgICAgICByZXR1cm4gbmV3IFNvY2tl
dChhZGRyZXNzLCBwb3J0KTsKLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjb25uZWN0OiAiICsgZS5nZXRNZXNzYWdlKCkpOwot
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgYm9vbGVhbiBpc1NlcnZlcigpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9VbmhhbmRsZWRFeGNl
cHRpb25IYW5kbGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBw
cnRjL1VuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1VuaGFuZGxlZEV4Y2VwdGlvbkhhbmRsZXIuamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDg0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMg
VGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7
Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50
LkRpYWxvZ0ludGVyZmFjZTsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJv
aWQudXRpbC5UeXBlZFZhbHVlOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNjcm9sbFZpZXc7Ci1p
bXBvcnQgYW5kcm9pZC53aWRnZXQuVGV4dFZpZXc7Ci0KLWltcG9ydCBqYXZhLmlvLlByaW50V3Jp
dGVyOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotCi0vKioKLSAqIFNpbmdsZXRvbiBo
ZWxwZXI6IGluc3RhbGwgYSBkZWZhdWx0IHVuaGFuZGxlZCBleGNlcHRpb24gaGFuZGxlciB3aGlj
aCBzaG93cwotICogYW4gaW5mb3JtYXRpdmUgZGlhbG9nIGFuZCBraWxscyB0aGUgYXBwLiAgVXNl
ZnVsIGZvciBhcHBzIHdob3NlCi0gKiBlcnJvci1oYW5kbGluZyBjb25zaXN0cyBvZiB0aHJvd2lu
ZyBSdW50aW1lRXhjZXB0aW9ucy4KLSAqIE5PVEU6IGFsbW9zdCBhbHdheXMgbW9yZSB1c2VmdWwg
dG8KLSAqIFRocmVhZC5zZXREZWZhdWx0VW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKCkgcmF0aGVy
IHRoYW4KLSAqIFRocmVhZC5zZXRVbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIoKSwgdG8gYXBwbHkg
dG8gYmFja2dyb3VuZCB0aHJlYWRzIGFzIHdlbGwuCi0gKi8KLXB1YmxpYyBjbGFzcyBVbmhhbmRs
ZWRFeGNlcHRpb25IYW5kbGVyIGltcGxlbWVudHMgVGhyZWFkLlVuY2F1Z2h0RXhjZXB0aW9uSGFu
ZGxlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiQXBwUlRDTW9iaWxl
QWN0aXZpdHkiOwotICBwcml2YXRlIGZpbmFsIEFjdGl2aXR5IGFjdGl2aXR5OwotCi0gIHB1Ymxp
YyBVbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyKGZpbmFsIEFjdGl2aXR5IGFjdGl2aXR5KSB7Ci0g
ICAgdGhpcy5hY3Rpdml0eSA9IGFjdGl2aXR5OwotICB9Ci0KLSAgcHVibGljIHZvaWQgdW5jYXVn
aHRFeGNlcHRpb24oVGhyZWFkIHVudXNlZFRocmVhZCwgZmluYWwgVGhyb3dhYmxlIGUpIHsKLSAg
ICBhY3Rpdml0eS5ydW5PblVpVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBTdHJpbmcgdGl0bGUgPSAiRmF0
YWwgZXJyb3I6ICIgKyBnZXRUb3BMZXZlbENhdXNlTWVzc2FnZShlKTsKLSAgICAgICAgU3RyaW5n
IG1zZyA9IGdldFJlY3Vyc2l2ZVN0YWNrVHJhY2UoZSk7Ci0gICAgICAgIFRleHRWaWV3IGVycm9y
VmlldyA9IG5ldyBUZXh0VmlldyhhY3Rpdml0eSk7Ci0gICAgICAgIGVycm9yVmlldy5zZXRUZXh0
KG1zZyk7Ci0gICAgICAgIGVycm9yVmlldy5zZXRUZXh0U2l6ZShUeXBlZFZhbHVlLkNPTVBMRVhf
VU5JVF9TUCwgOCk7Ci0gICAgICAgIFNjcm9sbFZpZXcgc2Nyb2xsaW5nQ29udGFpbmVyID0gbmV3
IFNjcm9sbFZpZXcoYWN0aXZpdHkpOwotICAgICAgICBzY3JvbGxpbmdDb250YWluZXIuYWRkVmll
dyhlcnJvclZpZXcpOwotICAgICAgICBMb2cuZShUQUcsIHRpdGxlICsgIlxuXG4iICsgbXNnKTsK
LSAgICAgICAgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBE
aWFsb2dJbnRlcmZhY2UuT25DbGlja0xpc3RlbmVyKCkgewotICAgICAgICAgIEBPdmVycmlkZQot
ICAgICAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soRGlhbG9nSW50ZXJmYWNlIGRpYWxvZywgaW50
IHdoaWNoKSB7Ci0gICAgICAgICAgICBkaWFsb2cuZGlzbWlzcygpOwotICAgICAgICAgICAgU3lz
dGVtLmV4aXQoMSk7Ci0gICAgICAgICAgfQotICAgICAgICB9OwotICAgICAgICBBbGVydERpYWxv
Zy5CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcihhY3Rpdml0eSk7Ci0g
ICAgICAgIGJ1aWxkZXIuc2V0VGl0bGUodGl0bGUpCi0gICAgICAgICAgICAuc2V0VmlldyhzY3Jv
bGxpbmdDb250YWluZXIpCi0gICAgICAgICAgICAuc2V0UG9zaXRpdmVCdXR0b24oIkV4aXQiLCBs
aXN0ZW5lcikKLSAgICAgICAgICAgIC5zaG93KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICAvLyBSZXR1cm5zIHRoZSBNZXNzYWdlIGF0dGFjaGVkIHRvIHRoZSBvcmlnaW5hbCBDYXVzZSBv
ZiB8dHwuCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRUb3BMZXZlbENhdXNlTWVzc2FnZShU
aHJvd2FibGUgdCkgewotICAgIFRocm93YWJsZSB0b3BMZXZlbENhdXNlID0gdDsKLSAgICB3aGls
ZSAodG9wTGV2ZWxDYXVzZS5nZXRDYXVzZSgpICE9IG51bGwpIHsKLSAgICAgIHRvcExldmVsQ2F1
c2UgPSB0b3BMZXZlbENhdXNlLmdldENhdXNlKCk7Ci0gICAgfQotICAgIHJldHVybiB0b3BMZXZl
bENhdXNlLmdldE1lc3NhZ2UoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgYSBodW1hbi1yZWFkYWJs
ZSBTdHJpbmcgb2YgdGhlIHN0YWNrdHJhY2UgaW4gfHR8LCByZWN1cnNpdmVseQotICAvLyB0aHJv
dWdoIGFsbCBDYXVzZXMgdGhhdCBsZWQgdG8gfHR8LgotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcg
Z2V0UmVjdXJzaXZlU3RhY2tUcmFjZShUaHJvd2FibGUgdCkgewotICAgIFN0cmluZ1dyaXRlciB3
cml0ZXIgPSBuZXcgU3RyaW5nV3JpdGVyKCk7Ci0gICAgdC5wcmludFN0YWNrVHJhY2UobmV3IFBy
aW50V3JpdGVyKHdyaXRlcikpOwotICAgIHJldHVybiB3cml0ZXIudG9TdHJpbmcoKTsKLSAgfQot
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBs
ZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNvY2tldENoYW5uZWxDbGll
bnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29j
a2V0Q2hhbm5lbENsaWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMjk2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNw
b3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJM
Q29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5Bc3luY0h0dHBVUkxD
b25uZWN0aW9uLkFzeW5jSHR0cEV2ZW50czsKLQotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsK
LWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgZGUudGF2ZW5kby5hdXRvYmFobi5X
ZWJTb2NrZXQuV2ViU29ja2V0Q29ubmVjdGlvbk9ic2VydmVyOwotaW1wb3J0IGRlLnRhdmVuZG8u
YXV0b2JhaG4uV2ViU29ja2V0Q29ubmVjdGlvbjsKLWltcG9ydCBkZS50YXZlbmRvLmF1dG9iYWhu
LldlYlNvY2tldEV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247Ci1p
bXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLWltcG9y
dCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExp
c3Q7Ci0KLS8qKgotICogV2ViU29ja2V0IGNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiA8
cD5BbGwgcHVibGljIG1ldGhvZHMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIGEgbG9vcGVyIGV4ZWN1
dG9yIHRocmVhZAotICogcGFzc2VkIGluIGEgY29uc3RydWN0b3IsIG90aGVyd2lzZSBleGNlcHRp
b24gd2lsbCBiZSB0aHJvd24uCi0gKiBBbGwgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIG9uIHRoZSBz
YW1lIHRocmVhZC4KLSAqLwotCi1wdWJsaWMgY2xhc3MgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV1NDaGFubmVsUlRDQ2xpZW50
IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENMT1NFX1RJTUVPVVQgPSAxMDAwOwotICBw
cml2YXRlIGZpbmFsIFdlYlNvY2tldENoYW5uZWxFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIGZp
bmFsIEhhbmRsZXIgaGFuZGxlcjsKLSAgcHJpdmF0ZSBXZWJTb2NrZXRDb25uZWN0aW9uIHdzOwot
ICBwcml2YXRlIFdlYlNvY2tldE9ic2VydmVyIHdzT2JzZXJ2ZXI7Ci0gIHByaXZhdGUgU3RyaW5n
IHdzU2VydmVyVXJsOwotICBwcml2YXRlIFN0cmluZyBwb3N0U2VydmVyVXJsOwotICBwcml2YXRl
IFN0cmluZyByb29tSUQ7Ci0gIHByaXZhdGUgU3RyaW5nIGNsaWVudElEOwotICBwcml2YXRlIFdl
YlNvY2tldENvbm5lY3Rpb25TdGF0ZSBzdGF0ZTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgY2xv
c2VFdmVudExvY2sgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgYm9vbGVhbiBjbG9zZUV2ZW50
OwotICAvLyBXZWJTb2NrZXQgc2VuZCBxdWV1ZS4gTWVzc2FnZXMgYXJlIGFkZGVkIHRvIHRoZSBx
dWV1ZSB3aGVuIFdlYlNvY2tldAotICAvLyBjbGllbnQgaXMgbm90IHJlZ2lzdGVyZWQgYW5kIGFy
ZSBjb25zdW1lZCBpbiByZWdpc3RlcigpIGNhbGwuCi0gIHByaXZhdGUgZmluYWwgTGlua2VkTGlz
dDxTdHJpbmc+IHdzU2VuZFF1ZXVlOwotCi0gIC8qKgotICAgKiBQb3NzaWJsZSBXZWJTb2NrZXQg
Y29ubmVjdGlvbiBzdGF0ZXMuCi0gICAqLwotICBwdWJsaWMgZW51bSBXZWJTb2NrZXRDb25uZWN0
aW9uU3RhdGUgeyBORVcsIENPTk5FQ1RFRCwgUkVHSVNURVJFRCwgQ0xPU0VELCBFUlJPUiB9Ci0K
LSAgLyoqCi0gICAqIENhbGxiYWNrIGludGVyZmFjZSBmb3IgbWVzc2FnZXMgZGVsaXZlcmVkIG9u
IFdlYlNvY2tldC4KLSAgICogQWxsIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBmcm9tIGEgbG9vcGVy
IGV4ZWN1dG9yIHRocmVhZC4KLSAgICovCi0gIHB1YmxpYyBpbnRlcmZhY2UgV2ViU29ja2V0Q2hh
bm5lbEV2ZW50cyB7Ci0gICAgdm9pZCBvbldlYlNvY2tldE1lc3NhZ2UoZmluYWwgU3RyaW5nIG1l
c3NhZ2UpOwotICAgIHZvaWQgb25XZWJTb2NrZXRDbG9zZSgpOwotICAgIHZvaWQgb25XZWJTb2Nr
ZXRFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgcHVibGljIFdlYlNv
Y2tldENoYW5uZWxDbGllbnQoSGFuZGxlciBoYW5kbGVyLCBXZWJTb2NrZXRDaGFubmVsRXZlbnRz
IGV2ZW50cykgewotICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7Ci0gICAgdGhpcy5ldmVudHMg
PSBldmVudHM7Ci0gICAgcm9vbUlEID0gbnVsbDsKLSAgICBjbGllbnRJRCA9IG51bGw7Ci0gICAg
d3NTZW5kUXVldWUgPSBuZXcgTGlua2VkTGlzdDxTdHJpbmc+KCk7Ci0gICAgc3RhdGUgPSBXZWJT
b2NrZXRDb25uZWN0aW9uU3RhdGUuTkVXOwotICB9Ci0KLSAgcHVibGljIFdlYlNvY2tldENvbm5l
Y3Rpb25TdGF0ZSBnZXRTdGF0ZSgpIHsKLSAgICByZXR1cm4gc3RhdGU7Ci0gIH0KLQotICBwdWJs
aWMgdm9pZCBjb25uZWN0KGZpbmFsIFN0cmluZyB3c1VybCwgZmluYWwgU3RyaW5nIHBvc3RVcmwp
IHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxpZFRocmVhZCgpOwotICAgIGlmIChzdGF0ZSAhPSBX
ZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuTkVXKSB7Ci0gICAgICBMb2cuZShUQUcsICJXZWJTb2Nr
ZXQgaXMgYWxyZWFkeSBjb25uZWN0ZWQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIHdz
U2VydmVyVXJsID0gd3NVcmw7Ci0gICAgcG9zdFNlcnZlclVybCA9IHBvc3RVcmw7Ci0gICAgY2xv
c2VFdmVudCA9IGZhbHNlOwotCi0gICAgTG9nLmQoVEFHLCAiQ29ubmVjdGluZyBXZWJTb2NrZXQg
dG86ICIgKyB3c1VybCArICIuIFBvc3QgVVJMOiAiICsgcG9zdFVybCk7Ci0gICAgd3MgPSBuZXcg
V2ViU29ja2V0Q29ubmVjdGlvbigpOwotICAgIHdzT2JzZXJ2ZXIgPSBuZXcgV2ViU29ja2V0T2Jz
ZXJ2ZXIoKTsKLSAgICB0cnkgewotICAgICAgd3MuY29ubmVjdChuZXcgVVJJKHdzU2VydmVyVXJs
KSwgd3NPYnNlcnZlcik7Ci0gICAgfSBjYXRjaCAoVVJJU3ludGF4RXhjZXB0aW9uIGUpIHsKLSAg
ICAgIHJlcG9ydEVycm9yKCJVUkkgZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfSBj
YXRjaCAoV2ViU29ja2V0RXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJXZWJTb2Nr
ZXQgY29ubmVjdGlvbiBlcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCByZWdpc3RlcihmaW5hbCBTdHJpbmcgcm9vbUlELCBmaW5hbCBTdHJpbmcg
Y2xpZW50SUQpIHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxpZFRocmVhZCgpOwotICAgIHRoaXMu
cm9vbUlEID0gcm9vbUlEOwotICAgIHRoaXMuY2xpZW50SUQgPSBjbGllbnRJRDsKLSAgICBpZiAo
c3RhdGUgIT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgTG9n
LncoVEFHLCAiV2ViU29ja2V0IHJlZ2lzdGVyKCkgaW4gc3RhdGUgIiArIHN0YXRlKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiUmVnaXN0ZXJpbmcgV2ViU29ja2V0IGZv
ciByb29tICIgKyByb29tSUQgKyAiLiBDbGllbnRJRDogIiArIGNsaWVudElEKTsKLSAgICBKU09O
T2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgIHRyeSB7Ci0gICAgICBqc29uLnB1
dCgiY21kIiwgInJlZ2lzdGVyIik7Ci0gICAgICBqc29uLnB1dCgicm9vbWlkIiwgcm9vbUlEKTsK
LSAgICAgIGpzb24ucHV0KCJjbGllbnRpZCIsIGNsaWVudElEKTsKLSAgICAgIExvZy5kKFRBRywg
IkMtPldTUzogIiArIGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICB3cy5zZW5kVGV4dE1lc3NhZ2Uo
anNvbi50b1N0cmluZygpKTsKLSAgICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRl
LlJFR0lTVEVSRUQ7Ci0gICAgICAvLyBTZW5kIGFueSBwcmV2aW91c2x5IGFjY3VtdWxhdGVkIG1l
c3NhZ2VzLgotICAgICAgZm9yIChTdHJpbmcgc2VuZE1lc3NhZ2UgOiB3c1NlbmRRdWV1ZSkgewot
ICAgICAgICBzZW5kKHNlbmRNZXNzYWdlKTsKLSAgICAgIH0KLSAgICAgIHdzU2VuZFF1ZXVlLmNs
ZWFyKCk7Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJv
cigiV2ViU29ja2V0IHJlZ2lzdGVyIEpTT04gZXJyb3I6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0g
ICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgc2VuZChTdHJpbmcgbWVzc2FnZSkgewotICAgIGNo
ZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAg
Y2FzZSBORVc6Ci0gICAgICBjYXNlIENPTk5FQ1RFRDoKLSAgICAgICAgLy8gU3RvcmUgb3V0Z29p
bmcgbWVzc2FnZXMgYW5kIHNlbmQgdGhlbSBhZnRlciB3ZWJzb2NrZXQgY2xpZW50Ci0gICAgICAg
IC8vIGlzIHJlZ2lzdGVyZWQuCi0gICAgICAgIExvZy5kKFRBRywgIldTIEFDQzogIiArIG1lc3Nh
Z2UpOwotICAgICAgICB3c1NlbmRRdWV1ZS5hZGQobWVzc2FnZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICAgIGNhc2UgRVJST1I6Ci0gICAgICBjYXNlIENMT1NFRDoKLSAgICAgICAgTG9nLmUoVEFH
LCAiV2ViU29ja2V0IHNlbmQoKSBpbiBlcnJvciBvciBjbG9zZWQgc3RhdGUgOiAiICsgbWVzc2Fn
ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIGNhc2UgUkVHSVNURVJFRDoKLSAgICAgICAgSlNP
Tk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICBqc29uLnB1dCgiY21kIiwgInNlbmQiKTsKLSAgICAgICAgICBqc29uLnB1dCgibXNnIiwgbWVz
c2FnZSk7Ci0gICAgICAgICAgbWVzc2FnZSA9IGpzb24udG9TdHJpbmcoKTsKLSAgICAgICAgICBM
b2cuZChUQUcsICJDLT5XU1M6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgICB3cy5zZW5kVGV4dE1l
c3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAg
ICAgICAgIHJlcG9ydEVycm9yKCJXZWJTb2NrZXQgc2VuZCBKU09OIGVycm9yOiAiICsgZS5nZXRN
ZXNzYWdlKCkpOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgfQotCi0gIC8v
IFRoaXMgY2FsbCBjYW4gYmUgdXNlZCB0byBzZW5kIFdlYlNvY2tldCBtZXNzYWdlcyBiZWZvcmUg
V2ViU29ja2V0Ci0gIC8vIGNvbm5lY3Rpb24gaXMgb3BlbmVkLgotICBwdWJsaWMgdm9pZCBwb3N0
KFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgY2hlY2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKTsKLSAg
ICBzZW5kV1NTTWVzc2FnZSgiUE9TVCIsIG1lc3NhZ2UpOwotICB9Ci0KLSAgcHVibGljIHZvaWQg
ZGlzY29ubmVjdChib29sZWFuIHdhaXRGb3JDb21wbGV0ZSkgewotICAgIGNoZWNrSWZDYWxsZWRP
blZhbGlkVGhyZWFkKCk7Ci0gICAgTG9nLmQoVEFHLCAiRGlzY29ubmVjdCBXZWJTb2NrZXQuIFN0
YXRlOiAiICsgc3RhdGUpOwotICAgIGlmIChzdGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3Rh
dGUuUkVHSVNURVJFRCkgewotICAgICAgLy8gU2VuZCAiYnllIiB0byBXZWJTb2NrZXQgc2VydmVy
LgotICAgICAgc2VuZCgie1widHlwZVwiOiBcImJ5ZVwifSIpOwotICAgICAgc3RhdGUgPSBXZWJT
b2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEOwotICAgICAgLy8gU2VuZCBodHRwIERFTEVU
RSB0byBodHRwIFdlYlNvY2tldCBzZXJ2ZXIuCi0gICAgICBzZW5kV1NTTWVzc2FnZSgiREVMRVRF
IiwgIiIpOwotICAgIH0KLSAgICAvLyBDbG9zZSBXZWJTb2NrZXQgaW4gQ09OTkVDVEVEIG9yIEVS
Uk9SIHN0YXRlcyBvbmx5LgotICAgIGlmIChzdGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3Rh
dGUuQ09OTkVDVEVEIHx8IHN0YXRlID09IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5FUlJPUikg
ewotICAgICAgd3MuZGlzY29ubmVjdCgpOwotICAgICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0
aW9uU3RhdGUuQ0xPU0VEOwotCi0gICAgICAvLyBXYWl0IGZvciB3ZWJzb2NrZXQgY2xvc2UgZXZl
bnQgdG8gcHJldmVudCB3ZWJzb2NrZXQgbGlicmFyeSBmcm9tCi0gICAgICAvLyBzZW5kaW5nIGFu
eSBwZW5kaW5nIG1lc3NhZ2VzIHRvIGRlbGV0ZWQgbG9vcGVyIHRocmVhZC4KLSAgICAgIGlmICh3
YWl0Rm9yQ29tcGxldGUpIHsKLSAgICAgICAgc3luY2hyb25pemVkIChjbG9zZUV2ZW50TG9jaykg
ewotICAgICAgICAgIHdoaWxlICghY2xvc2VFdmVudCkgewotICAgICAgICAgICAgdHJ5IHsKLSAg
ICAgICAgICAgICAgY2xvc2VFdmVudExvY2sud2FpdChDTE9TRV9USU1FT1VUKTsKLSAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBl
KSB7Ci0gICAgICAgICAgICAgIExvZy5lKFRBRywgIldhaXQgZXJyb3I6ICIgKyBlLnRvU3RyaW5n
KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLSAgICBMb2cuZChUQUcsICJEaXNjb25uZWN0aW5nIFdlYlNvY2tldCBkb25lLiIpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0cmluZyBlcnJvck1lc3NhZ2Up
IHsKLSAgICBMb2cuZShUQUcsIGVycm9yTWVzc2FnZSk7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICBpZiAoc3RhdGUgIT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkVSUk9SKSB7Ci0g
ICAgICAgICAgc3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuRVJST1I7Ci0gICAgICAg
ICAgZXZlbnRzLm9uV2ViU29ja2V0RXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQotICAg
ICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gQXN5bmNocm9ub3VzbHkgc2VuZCBQT1NUL0RFTEVU
RSB0byBXZWJTb2NrZXQgc2VydmVyLgotICBwcml2YXRlIHZvaWQgc2VuZFdTU01lc3NhZ2UoZmlu
YWwgU3RyaW5nIG1ldGhvZCwgZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBTdHJpbmcgcG9z
dFVybCA9IHBvc3RTZXJ2ZXJVcmwgKyAiLyIgKyByb29tSUQgKyAiLyIgKyBjbGllbnRJRDsKLSAg
ICBMb2cuZChUQUcsICJXUyAiICsgbWV0aG9kICsgIiA6ICIgKyBwb3N0VXJsICsgIiA6ICIgKyBt
ZXNzYWdlKTsKLSAgICBBc3luY0h0dHBVUkxDb25uZWN0aW9uIGh0dHBDb25uZWN0aW9uID0KLSAg
ICAgICAgbmV3IEFzeW5jSHR0cFVSTENvbm5lY3Rpb24obWV0aG9kLCBwb3N0VXJsLCBtZXNzYWdl
LCBuZXcgQXN5bmNIdHRwRXZlbnRzKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAg
IHB1YmxpYyB2b2lkIG9uSHR0cEVycm9yKFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAg
ICAgIHJlcG9ydEVycm9yKCJXUyAiICsgbWV0aG9kICsgIiBlcnJvcjogIiArIGVycm9yTWVzc2Fn
ZSk7Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGlj
IHZvaWQgb25IdHRwQ29tcGxldGUoU3RyaW5nIHJlc3BvbnNlKSB7fQotICAgICAgICB9KTsKLSAg
ICBodHRwQ29ubmVjdGlvbi5zZW5kKCk7Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIGZvciBk
ZWJ1Z2dpbmcgcHVycG9zZXMuIEVuc3VyZXMgdGhhdCBXZWJTb2NrZXQgbWV0aG9kIGlzCi0gIC8v
IGNhbGxlZCBvbiBhIGxvb3BlciB0aHJlYWQuCi0gIHByaXZhdGUgdm9pZCBjaGVja0lmQ2FsbGVk
T25WYWxpZFRocmVhZCgpIHsKLSAgICBpZiAoVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSAhPSBoYW5k
bGVyLmdldExvb3BlcigpLmdldFRocmVhZCgpKSB7Ci0gICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0
YXRlRXhjZXB0aW9uKCJXZWJTb2NrZXQgbWV0aG9kIGlzIG5vdCBjYWxsZWQgb24gdmFsaWQgdGhy
ZWFkIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBjbGFzcyBXZWJTb2NrZXRPYnNlcnZlciBp
bXBsZW1lbnRzIFdlYlNvY2tldENvbm5lY3Rpb25PYnNlcnZlciB7Ci0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgb25PcGVuKCkgewotICAgICAgTG9nLmQoVEFHLCAiV2ViU29ja2V0IGNv
bm5lY3Rpb24gb3BlbmVkIHRvOiAiICsgd3NTZXJ2ZXJVcmwpOwotICAgICAgaGFuZGxlci5wb3N0
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DT05O
RUNURUQ7Ci0gICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBwZW5kaW5nIHJlZ2lzdGVyIHJl
cXVlc3QuCi0gICAgICAgICAgaWYgKHJvb21JRCAhPSBudWxsICYmIGNsaWVudElEICE9IG51bGwp
IHsKLSAgICAgICAgICAgIHJlZ2lzdGVyKHJvb21JRCwgY2xpZW50SUQpOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGlj
IHZvaWQgb25DbG9zZShXZWJTb2NrZXRDbG9zZU5vdGlmaWNhdGlvbiBjb2RlLCBTdHJpbmcgcmVh
c29uKSB7Ci0gICAgICBMb2cuZChUQUcsICJXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZWQuIENv
ZGU6ICIgKyBjb2RlICsgIi4gUmVhc29uOiAiICsgcmVhc29uICsgIi4gU3RhdGU6ICIKLSAgICAg
ICAgICAgICAgKyBzdGF0ZSk7Ci0gICAgICBzeW5jaHJvbml6ZWQgKGNsb3NlRXZlbnRMb2NrKSB7
Ci0gICAgICAgIGNsb3NlRXZlbnQgPSB0cnVlOwotICAgICAgICBjbG9zZUV2ZW50TG9jay5ub3Rp
ZnkoKTsKLSAgICAgIH0KLSAgICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYg
KHN0YXRlICE9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5DTE9TRUQpIHsKLSAgICAgICAgICAg
IHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNMT1NFRDsKLSAgICAgICAgICAgIGV2
ZW50cy5vbldlYlNvY2tldENsb3NlKCk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHRNZXNzYWdl
KFN0cmluZyBwYXlsb2FkKSB7Ci0gICAgICBMb2cuZChUQUcsICJXU1MtPkM6ICIgKyBwYXlsb2Fk
KTsKLSAgICAgIGZpbmFsIFN0cmluZyBtZXNzYWdlID0gcGF5bG9hZDsKLSAgICAgIGhhbmRsZXIu
cG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMg
dm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYgKHN0YXRlID09IFdlYlNvY2tldENvbm5lY3Rpb25T
dGF0ZS5DT05ORUNURUQKLSAgICAgICAgICAgICAgfHwgc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVj
dGlvblN0YXRlLlJFR0lTVEVSRUQpIHsKLSAgICAgICAgICAgIGV2ZW50cy5vbldlYlNvY2tldE1l
c3NhZ2UobWVzc2FnZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblJhd1RleHRNZXNzYWdlKGJ5dGVb
XSBwYXlsb2FkKSB7fQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25CaW5hcnlN
ZXNzYWdlKGJ5dGVbXSBwYXlsb2FkKSB7fQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvV2ViU29ja2V0UlRDQ2xpZW50LmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNvY2tldFJUQ0NsaWVudC5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvV2ViU29ja2V0UlRDQ2xpZW50
LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MTkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
MjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBy
dGMuUm9vbVBhcmFtZXRlcnNGZXRjaGVyLlJvb21QYXJhbWV0ZXJzRmV0Y2hlckV2ZW50czsKLWlt
cG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuV2ViU29ja2V0Q2hhbm5lbENsaWVudC5XZWJTb2NrZXRD
aGFubmVsRXZlbnRzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5XZWJTb2NrZXRDaGFubmVs
Q2xpZW50LldlYlNvY2tldENvbm5lY3Rpb25TdGF0ZTsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBy
dGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0
Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb24uQXN5bmNIdHRwRXZlbnRzOwotCi1pbXBvcnQg
YW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlclRocmVhZDsKLWlt
cG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5OwotaW1w
b3J0IG9yZy5qc29uLkpTT05FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsK
LWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Np
b25EZXNjcmlwdGlvbjsKLQotLyoqCi0gKiBOZWdvdGlhdGVzIHNpZ25hbGluZyBmb3IgY2hhdHRp
bmcgd2l0aCBodHRwczovL2FwcHIudGMgInJvb21zIi4KLSAqIFVzZXMgdGhlIGNsaWVudDwtPnNl
cnZlciBzcGVjaWZpY3Mgb2YgdGhlIGFwcHJ0YyBBcHBFbmdpbmUgd2ViYXBwLgotICoKLSAqIDxw
PlRvIHVzZTogY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgb2JqZWN0IChyZWdpc3RlcmluZyBh
IG1lc3NhZ2UgaGFuZGxlcikgYW5kCi0gKiBjYWxsIGNvbm5lY3RUb1Jvb20oKS4gIE9uY2Ugcm9v
bSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkCi0gKiBvbkNvbm5lY3RlZFRvUm9vbSgpIGNhbGxi
YWNrIHdpdGggcm9vbSBwYXJhbWV0ZXJzIGlzIGludm9rZWQuCi0gKiBNZXNzYWdlcyB0byBvdGhl
ciBwYXJ0eSAod2l0aCBsb2NhbCBJY2UgY2FuZGlkYXRlcyBhbmQgYW5zd2VyIFNEUCkgY2FuCi0g
KiBiZSBzZW50IGFmdGVyIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLgotICov
Ci1wdWJsaWMgY2xhc3MgV2ViU29ja2V0UlRDQ2xpZW50IGltcGxlbWVudHMgQXBwUlRDQ2xpZW50
LCBXZWJTb2NrZXRDaGFubmVsRXZlbnRzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFRBRyA9ICJXU1JUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09N
X0pPSU4gPSAiam9pbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09NX01FU1NB
R0UgPSAibWVzc2FnZSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09NX0xFQVZF
ID0gImxlYXZlIjsKLQotICBwcml2YXRlIGVudW0gQ29ubmVjdGlvblN0YXRlIHsgTkVXLCBDT05O
RUNURUQsIENMT1NFRCwgRVJST1IgfQotCi0gIHByaXZhdGUgZW51bSBNZXNzYWdlVHlwZSB7IE1F
U1NBR0UsIExFQVZFIH0KLQotICBwcml2YXRlIGZpbmFsIEhhbmRsZXIgaGFuZGxlcjsKLSAgcHJp
dmF0ZSBib29sZWFuIGluaXRpYXRvcjsKLSAgcHJpdmF0ZSBTaWduYWxpbmdFdmVudHMgZXZlbnRz
OwotICBwcml2YXRlIFdlYlNvY2tldENoYW5uZWxDbGllbnQgd3NDbGllbnQ7Ci0gIHByaXZhdGUg
Q29ubmVjdGlvblN0YXRlIHJvb21TdGF0ZTsKLSAgcHJpdmF0ZSBSb29tQ29ubmVjdGlvblBhcmFt
ZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gIHByaXZhdGUgU3RyaW5nIG1lc3NhZ2VVcmw7
Ci0gIHByaXZhdGUgU3RyaW5nIGxlYXZlVXJsOwotCi0gIHB1YmxpYyBXZWJTb2NrZXRSVENDbGll
bnQoU2lnbmFsaW5nRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwot
ICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5ORVc7Ci0gICAgZmluYWwgSGFuZGxlclRo
cmVhZCBoYW5kbGVyVGhyZWFkID0gbmV3IEhhbmRsZXJUaHJlYWQoVEFHKTsKLSAgICBoYW5kbGVy
VGhyZWFkLnN0YXJ0KCk7Ci0gICAgaGFuZGxlciA9IG5ldyBIYW5kbGVyKGhhbmRsZXJUaHJlYWQu
Z2V0TG9vcGVyKCkpOwotICB9Ci0KLSAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgLy8gQXBwUlRDQ2xpZW50
IGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4KLSAgLy8gQXN5bmNocm9ub3VzbHkgY29ubmVjdCB0
byBhbiBBcHBSVEMgcm9vbSBVUkwgdXNpbmcgc3VwcGxpZWQgY29ubmVjdGlvbgotICAvLyBwYXJh
bWV0ZXJzLCByZXRyaWV2ZXMgcm9vbSBwYXJhbWV0ZXJzIGFuZCBjb25uZWN0IHRvIFdlYlNvY2tl
dCBzZXJ2ZXIuCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBjb25uZWN0VG9Sb29tKFJvb21D
b25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVycykgewotICAgIHRoaXMuY29u
bmVjdGlvblBhcmFtZXRlcnMgPSBjb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgICBoYW5kbGVyLnBv
c3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGNvbm5lY3RUb1Jvb21JbnRlcm5hbCgpOwotICAgICAgfQotICAgIH0p
OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3RGcm9tUm9vbSgp
IHsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGRpc2Nvbm5lY3RGcm9tUm9vbUludGVy
bmFsKCk7Ci0gICAgICAgIGhhbmRsZXIuZ2V0TG9vcGVyKCkucXVpdCgpOwotICAgICAgfQotICAg
IH0pOwotICB9Ci0KLSAgLy8gQ29ubmVjdHMgdG8gcm9vbSAtIGZ1bmN0aW9uIHJ1bnMgb24gYSBs
b2NhbCBsb29wZXIgdGhyZWFkLgotICBwcml2YXRlIHZvaWQgY29ubmVjdFRvUm9vbUludGVybmFs
KCkgewotICAgIFN0cmluZyBjb25uZWN0aW9uVXJsID0gZ2V0Q29ubmVjdGlvblVybChjb25uZWN0
aW9uUGFyYW1ldGVycyk7Ci0gICAgTG9nLmQoVEFHLCAiQ29ubmVjdCB0byByb29tOiAiICsgY29u
bmVjdGlvblVybCk7Ci0gICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLk5FVzsKLSAgICB3
c0NsaWVudCA9IG5ldyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KGhhbmRsZXIsIHRoaXMpOwotCi0g
ICAgUm9vbVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzIGNhbGxiYWNrcyA9IG5ldyBSb29tUGFyYW1l
dGVyc0ZldGNoZXJFdmVudHMoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IG9uU2lnbmFsaW5nUGFyYW1ldGVyc1JlYWR5KGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFy
YW1zKSB7Ci0gICAgICAgIFdlYlNvY2tldFJUQ0NsaWVudC50aGlzLmhhbmRsZXIucG9zdChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQg
cnVuKCkgewotICAgICAgICAgICAgV2ViU29ja2V0UlRDQ2xpZW50LnRoaXMuc2lnbmFsaW5nUGFy
YW1ldGVyc1JlYWR5KHBhcmFtcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0K
LQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblNpZ25hbGluZ1BhcmFtZXRl
cnNFcnJvcihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICAgICAgV2ViU29ja2V0UlRDQ2xpZW50
LnRoaXMucmVwb3J0RXJyb3IoZGVzY3JpcHRpb24pOwotICAgICAgfQotICAgIH07Ci0KLSAgICBu
ZXcgUm9vbVBhcmFtZXRlcnNGZXRjaGVyKGNvbm5lY3Rpb25VcmwsIG51bGwsIGNhbGxiYWNrcyku
bWFrZVJlcXVlc3QoKTsKLSAgfQotCi0gIC8vIERpc2Nvbm5lY3QgZnJvbSByb29tIGFuZCBzZW5k
IGJ5ZSBtZXNzYWdlcyAtIHJ1bnMgb24gYSBsb2NhbCBsb29wZXIgdGhyZWFkLgotICBwcml2YXRl
IHZvaWQgZGlzY29ubmVjdEZyb21Sb29tSW50ZXJuYWwoKSB7Ci0gICAgTG9nLmQoVEFHLCAiRGlz
Y29ubmVjdC4gUm9vbSBzdGF0ZTogIiArIHJvb21TdGF0ZSk7Ci0gICAgaWYgKHJvb21TdGF0ZSA9
PSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICBMb2cuZChUQUcsICJDbG9zaW5n
IHJvb20uIik7Ci0gICAgICBzZW5kUG9zdE1lc3NhZ2UoTWVzc2FnZVR5cGUuTEVBVkUsIGxlYXZl
VXJsLCBudWxsKTsKLSAgICB9Ci0gICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkNMT1NF
RDsKLSAgICBpZiAod3NDbGllbnQgIT0gbnVsbCkgewotICAgICAgd3NDbGllbnQuZGlzY29ubmVj
dCh0cnVlKTsKLSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgZnVuY3Rpb25zIHRvIGdldCBjb25u
ZWN0aW9uLCBwb3N0IG1lc3NhZ2UgYW5kIGxlYXZlIG1lc3NhZ2UgVVJMcwotICBwcml2YXRlIFN0
cmluZyBnZXRDb25uZWN0aW9uVXJsKFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyBjb25uZWN0aW9u
UGFyYW1ldGVycykgewotICAgIHJldHVybiBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tVXJsICsg
Ii8iICsgUk9PTV9KT0lOICsgIi8iICsgY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbUlkOwotICB9
Ci0KLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TWVzc2FnZVVybCgKLSAgICAgIFJvb21Db25uZWN0aW9u
UGFyYW1ldGVycyBjb25uZWN0aW9uUGFyYW1ldGVycywgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWdu
YWxpbmdQYXJhbWV0ZXJzKSB7Ci0gICAgcmV0dXJuIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21V
cmwgKyAiLyIgKyBST09NX01FU1NBR0UgKyAiLyIgKyBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29t
SWQKLSAgICAgICAgKyAiLyIgKyBzaWduYWxpbmdQYXJhbWV0ZXJzLmNsaWVudElkOwotICB9Ci0K
LSAgcHJpdmF0ZSBTdHJpbmcgZ2V0TGVhdmVVcmwoCi0gICAgICBSb29tQ29ubmVjdGlvblBhcmFt
ZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnMsIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5n
UGFyYW1ldGVycykgewotICAgIHJldHVybiBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tVXJsICsg
Ii8iICsgUk9PTV9MRUFWRSArICIvIiArIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21JZCArICIv
IgotICAgICAgICArIHNpZ25hbGluZ1BhcmFtZXRlcnMuY2xpZW50SWQ7Ci0gIH0KLQotICAvLyBD
YWxsYmFjayBpc3N1ZWQgd2hlbiByb29tIHBhcmFtZXRlcnMgYXJlIGV4dHJhY3RlZC4gUnVucyBv
biBsb2NhbAotICAvLyBsb29wZXIgdGhyZWFkLgotICBwcml2YXRlIHZvaWQgc2lnbmFsaW5nUGFy
YW1ldGVyc1JlYWR5KGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVy
cykgewotICAgIExvZy5kKFRBRywgIlJvb20gY29ubmVjdGlvbiBjb21wbGV0ZWQuIik7Ci0gICAg
aWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrCi0gICAgICAgICYmICghc2lnbmFsaW5n
UGFyYW1ldGVycy5pbml0aWF0b3IgfHwgc2lnbmFsaW5nUGFyYW1ldGVycy5vZmZlclNkcCAhPSBu
dWxsKSkgewotICAgICAgcmVwb3J0RXJyb3IoIkxvb3BiYWNrIHJvb20gaXMgYnVzeS4iKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFj
ayAmJiAhc2lnbmFsaW5nUGFyYW1ldGVycy5pbml0aWF0b3IKLSAgICAgICAgJiYgc2lnbmFsaW5n
UGFyYW1ldGVycy5vZmZlclNkcCA9PSBudWxsKSB7Ci0gICAgICBMb2cudyhUQUcsICJObyBvZmZl
ciBTRFAgaW4gcm9vbSByZXNwb25zZS4iKTsKLSAgICB9Ci0gICAgaW5pdGlhdG9yID0gc2lnbmFs
aW5nUGFyYW1ldGVycy5pbml0aWF0b3I7Ci0gICAgbWVzc2FnZVVybCA9IGdldE1lc3NhZ2VVcmwo
Y29ubmVjdGlvblBhcmFtZXRlcnMsIHNpZ25hbGluZ1BhcmFtZXRlcnMpOwotICAgIGxlYXZlVXJs
ID0gZ2V0TGVhdmVVcmwoY29ubmVjdGlvblBhcmFtZXRlcnMsIHNpZ25hbGluZ1BhcmFtZXRlcnMp
OwotICAgIExvZy5kKFRBRywgIk1lc3NhZ2UgVVJMOiAiICsgbWVzc2FnZVVybCk7Ci0gICAgTG9n
LmQoVEFHLCAiTGVhdmUgVVJMOiAiICsgbGVhdmVVcmwpOwotICAgIHJvb21TdGF0ZSA9IENvbm5l
Y3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0KLSAgICAvLyBGaXJlIGNvbm5lY3Rpb24gYW5kIHNpZ25h
bGluZyBwYXJhbWV0ZXJzIGV2ZW50cy4KLSAgICBldmVudHMub25Db25uZWN0ZWRUb1Jvb20oc2ln
bmFsaW5nUGFyYW1ldGVycyk7Ci0KLSAgICAvLyBDb25uZWN0IGFuZCByZWdpc3RlciBXZWJTb2Nr
ZXQgY2xpZW50LgotICAgIHdzQ2xpZW50LmNvbm5lY3Qoc2lnbmFsaW5nUGFyYW1ldGVycy53c3NV
cmwsIHNpZ25hbGluZ1BhcmFtZXRlcnMud3NzUG9zdFVybCk7Ci0gICAgd3NDbGllbnQucmVnaXN0
ZXIoY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbUlkLCBzaWduYWxpbmdQYXJhbWV0ZXJzLmNsaWVu
dElkKTsKLSAgfQotCi0gIC8vIFNlbmQgbG9jYWwgb2ZmZXIgU0RQIHRvIHRoZSBvdGhlciBwYXJ0
aWNpcGFudC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRPZmZlclNkcChmaW5hbCBT
ZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBp
ZiAocm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICBy
ZXBvcnRFcnJvcigiU2VuZGluZyBvZmZlciBTRFAgaW4gbm9uIGNvbm5lY3RlZCBzdGF0ZS4iKTsK
LSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0g
bmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1dChqc29uLCAic2RwIiwgc2RwLmRlc2Ny
aXB0aW9uKTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlwZSIsICJvZmZlciIpOwotICAgICAg
ICBzZW5kUG9zdE1lc3NhZ2UoTWVzc2FnZVR5cGUuTUVTU0FHRSwgbWVzc2FnZVVybCwganNvbi50
b1N0cmluZygpKTsKLSAgICAgICAgaWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7
Ci0gICAgICAgICAgLy8gSW4gbG9vcGJhY2sgbW9kZSByZW5hbWUgdGhpcyBvZmZlciB0byBhbnN3
ZXIgYW5kIHJvdXRlIGl0IGJhY2suCi0gICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcEFu
c3dlciA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgIFNlc3Npb25EZXNj
cmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgc2RwLmRlc2NyaXB0aW9u
KTsKLSAgICAgICAgICBldmVudHMub25SZW1vdGVEZXNjcmlwdGlvbihzZHBBbnN3ZXIpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBTZW5kIGxvY2FsIGFuc3dlciBT
RFAgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQg
c2VuZEFuc3dlclNkcChmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgaGFuZGxl
ci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICBpZiAoY29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsK
LSAgICAgICAgICBMb2cuZShUQUcsICJTZW5kaW5nIGFuc3dlciBpbiBsb29wYmFjayBtb2RlLiIp
OwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBKU09OT2JqZWN0IGpzb24g
PSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJzZHAiLCBzZHAuZGVz
Y3JpcHRpb24pOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgImFuc3dlciIpOwotICAg
ICAgICB3c0NsaWVudC5zZW5kKGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0g
IH0KLQotICAvLyBTZW5kIEljZSBjYW5kaWRhdGUgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50Lgot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlKGZpbmFsIElj
ZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIEpT
T05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwg
InR5cGUiLCAiY2FuZGlkYXRlIik7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgImxhYmVsIiwgY2Fu
ZGlkYXRlLnNkcE1MaW5lSW5kZXgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJpZCIsIGNhbmRp
ZGF0ZS5zZHBNaWQpOwotICAgICAgICBqc29uUHV0KGpzb24sICJjYW5kaWRhdGUiLCBjYW5kaWRh
dGUuc2RwKTsKLSAgICAgICAgaWYgKGluaXRpYXRvcikgewotICAgICAgICAgIC8vIENhbGwgaW5p
dGlhdG9yIHNlbmRzIGljZSBjYW5kaWRhdGVzIHRvIEdBRSBzZXJ2ZXIuCi0gICAgICAgICAgaWYg
KHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgICBy
ZXBvcnRFcnJvcigiU2VuZGluZyBJQ0UgY2FuZGlkYXRlIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUu
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIHNlbmRQb3N0
TWVzc2FnZShNZXNzYWdlVHlwZS5NRVNTQUdFLCBtZXNzYWdlVXJsLCBqc29uLnRvU3RyaW5nKCkp
OwotICAgICAgICAgIGlmIChjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAg
ICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8vIENhbGwgcmVjZWl2ZXIgc2VuZHMgaWNl
IGNhbmRpZGF0ZXMgdG8gd2Vic29ja2V0IHNlcnZlci4KLSAgICAgICAgICB3c0NsaWVudC5zZW5k
KGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0g
IC8vIFNlbmQgcmVtb3ZlZCBJY2UgY2FuZGlkYXRlcyB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQu
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZW5kTG9jYWxJY2VDYW5kaWRhdGVSZW1vdmFs
cyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAgaGFuZGxlci5wb3N0KG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBq
c29uUHV0KGpzb24sICJ0eXBlIiwgInJlbW92ZS1jYW5kaWRhdGVzIik7Ci0gICAgICAgIEpTT05B
cnJheSBqc29uQXJyYXkgPSBuZXcgSlNPTkFycmF5KCk7Ci0gICAgICAgIGZvciAoZmluYWwgSWNl
Q2FuZGlkYXRlIGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICBqc29uQXJyYXku
cHV0KHRvSnNvbkNhbmRpZGF0ZShjYW5kaWRhdGUpKTsKLSAgICAgICAgfQotICAgICAgICBqc29u
UHV0KGpzb24sICJjYW5kaWRhdGVzIiwganNvbkFycmF5KTsKLSAgICAgICAgaWYgKGluaXRpYXRv
cikgewotICAgICAgICAgIC8vIENhbGwgaW5pdGlhdG9yIHNlbmRzIGljZSBjYW5kaWRhdGVzIHRv
IEdBRSBzZXJ2ZXIuCi0gICAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0aW9uU3RhdGUu
Q09OTkVDVEVEKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiU2VuZGluZyBJQ0UgY2FuZGlk
YXRlIHJlbW92YWxzIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgfQotICAgICAgICAgIHNlbmRQb3N0TWVzc2FnZShNZXNzYWdlVHlwZS5N
RVNTQUdFLCBtZXNzYWdlVXJsLCBqc29uLnRvU3RyaW5nKCkpOwotICAgICAgICAgIGlmIChjb25u
ZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgICAgICAgZXZlbnRzLm9uUmVtb3Rl
SWNlQ2FuZGlkYXRlc1JlbW92ZWQoY2FuZGlkYXRlcyk7Ci0gICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgIC8vIENhbGwgcmVjZWl2ZXIgc2VuZHMgaWNlIGNhbmRpZGF0ZXMg
dG8gd2Vic29ja2V0IHNlcnZlci4KLSAgICAgICAgICB3c0NsaWVudC5zZW5kKGpzb24udG9TdHJp
bmcoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gIC8vIFdlYlNvY2tldENoYW5uZWxFdmVudHMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9u
LgotICAvLyBBbGwgZXZlbnRzIGFyZSBjYWxsZWQgYnkgV2ViU29ja2V0Q2hhbm5lbENsaWVudCBv
biBhIGxvY2FsIGxvb3BlciB0aHJlYWQKLSAgLy8gKHBhc3NlZCB0byBXZWJTb2NrZXQgY2xpZW50
IGNvbnN0cnVjdG9yKS4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uV2ViU29ja2V0TWVz
c2FnZShmaW5hbCBTdHJpbmcgbXNnKSB7Ci0gICAgaWYgKHdzQ2xpZW50LmdldFN0YXRlKCkgIT0g
V2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLlJFR0lTVEVSRUQpIHsKLSAgICAgIExvZy5lKFRBRywg
IkdvdCBXZWJTb2NrZXQgbWVzc2FnZSBpbiBub24gcmVnaXN0ZXJlZCBzdGF0ZS4iKTsKLSAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgdHJ5IHsKLSAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBK
U09OT2JqZWN0KG1zZyk7Ci0gICAgICBTdHJpbmcgbXNnVGV4dCA9IGpzb24uZ2V0U3RyaW5nKCJt
c2ciKTsKLSAgICAgIFN0cmluZyBlcnJvclRleHQgPSBqc29uLm9wdFN0cmluZygiZXJyb3IiKTsK
LSAgICAgIGlmIChtc2dUZXh0Lmxlbmd0aCgpID4gMCkgewotICAgICAgICBqc29uID0gbmV3IEpT
T05PYmplY3QobXNnVGV4dCk7Ci0gICAgICAgIFN0cmluZyB0eXBlID0ganNvbi5vcHRTdHJpbmco
InR5cGUiKTsKLSAgICAgICAgaWYgKHR5cGUuZXF1YWxzKCJjYW5kaWRhdGUiKSkgewotICAgICAg
ICAgIGV2ZW50cy5vblJlbW90ZUljZUNhbmRpZGF0ZSh0b0phdmFDYW5kaWRhdGUoanNvbikpOwot
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUuZXF1YWxzKCJyZW1vdmUtY2FuZGlkYXRlcyIpKSB7Ci0g
ICAgICAgICAgSlNPTkFycmF5IGNhbmRpZGF0ZUFycmF5ID0ganNvbi5nZXRKU09OQXJyYXkoImNh
bmRpZGF0ZXMiKTsKLSAgICAgICAgICBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzID0gbmV3IElj
ZUNhbmRpZGF0ZVtjYW5kaWRhdGVBcnJheS5sZW5ndGgoKV07Ci0gICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjYW5kaWRhdGVBcnJheS5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBj
YW5kaWRhdGVzW2ldID0gdG9KYXZhQ2FuZGlkYXRlKGNhbmRpZGF0ZUFycmF5LmdldEpTT05PYmpl
Y3QoaSkpOwotICAgICAgICAgIH0KLSAgICAgICAgICBldmVudHMub25SZW1vdGVJY2VDYW5kaWRh
dGVzUmVtb3ZlZChjYW5kaWRhdGVzKTsKLSAgICAgICAgfSBlbHNlIGlmICh0eXBlLmVxdWFscygi
YW5zd2VyIikpIHsKLSAgICAgICAgICBpZiAoaW5pdGlhdG9yKSB7Ci0gICAgICAgICAgICBTZXNz
aW9uRGVzY3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgICAg
ICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSh0eXBlKSwganNv
bi5nZXRTdHJpbmcoInNkcCIpKTsKLSAgICAgICAgICAgIGV2ZW50cy5vblJlbW90ZURlc2NyaXB0
aW9uKHNkcCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9yKCJS
ZWNlaXZlZCBhbnN3ZXIgZm9yIGNhbGwgaW5pdGlhdG9yOiAiICsgbXNnKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoIm9mZmVyIikpIHsKLSAgICAgICAgICBp
ZiAoIWluaXRpYXRvcikgewotICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9IG5l
dyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9u
LlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlwZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAiKSk7Ci0g
ICAgICAgICAgICBldmVudHMub25SZW1vdGVEZXNjcmlwdGlvbihzZHApOwotICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiUmVjZWl2ZWQgb2ZmZXIgZm9yIGNhbGwg
cmVjZWl2ZXI6ICIgKyBtc2cpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0eXBl
LmVxdWFscygiYnllIikpIHsKLSAgICAgICAgICBldmVudHMub25DaGFubmVsQ2xvc2UoKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiVW5leHBlY3RlZCBXZWJTb2Nr
ZXQgbWVzc2FnZTogIiArIG1zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChlcnJvclRleHQgIT0gbnVsbCAmJiBlcnJvclRleHQubGVuZ3RoKCkgPiAwKSB7Ci0gICAg
ICAgICAgcmVwb3J0RXJyb3IoIldlYlNvY2tldCBlcnJvciBtZXNzYWdlOiAiICsgZXJyb3JUZXh0
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiVW5leHBlY3RlZCBX
ZWJTb2NrZXQgbWVzc2FnZTogIiArIG1zZyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9IGNh
dGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJXZWJTb2NrZXQgbWVz
c2FnZSBKU09OIHBhcnNpbmcgZXJyb3I6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgIH0KLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbldlYlNvY2tldENsb3NlKCkgewotICAgIGV2
ZW50cy5vbkNoYW5uZWxDbG9zZSgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uV2ViU29ja2V0RXJyb3IoU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgcmVwb3J0RXJyb3Io
IldlYlNvY2tldCBlcnJvcjogIiArIGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0gIC8vIEhlbHBlciBmdW5jdGlvbnMuCi0gIHByaXZhdGUgdm9pZCByZXBvcnRFcnJvcihm
aW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgTG9nLmUoVEFHLCBlcnJvck1lc3NhZ2Up
OwotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25uZWN0
aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgICAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUu
RVJST1I7Ci0gICAgICAgICAgZXZlbnRzLm9uQ2hhbm5lbEVycm9yKGVycm9yTWVzc2FnZSk7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIFB1dCBhIHxrZXl8LT58dmFs
dWV8IG1hcHBpbmcgaW4gfGpzb258LgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGpzb25QdXQoSlNP
Tk9iamVjdCBqc29uLCBTdHJpbmcga2V5LCBPYmplY3QgdmFsdWUpIHsKLSAgICB0cnkgewotICAg
ICAganNvbi5wdXQoa2V5LCB2YWx1ZSk7Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBlKSB7
Ci0gICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBTZW5kIFNEUCBvciBJQ0UgY2FuZGlkYXRlIHRvIGEgcm9vbSBzZXJ2ZXIuCi0gIHByaXZhdGUg
dm9pZCBzZW5kUG9zdE1lc3NhZ2UoCi0gICAgICBmaW5hbCBNZXNzYWdlVHlwZSBtZXNzYWdlVHlw
ZSwgZmluYWwgU3RyaW5nIHVybCwgZmluYWwgU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBTdHJpbmcg
bG9nSW5mbyA9IHVybDsKLSAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7Ci0gICAgICBsb2dJbmZv
ICs9ICIuIE1lc3NhZ2U6ICIgKyBtZXNzYWdlOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDLT5H
QUU6ICIgKyBsb2dJbmZvKTsKLSAgICBBc3luY0h0dHBVUkxDb25uZWN0aW9uIGh0dHBDb25uZWN0
aW9uID0KLSAgICAgICAgbmV3IEFzeW5jSHR0cFVSTENvbm5lY3Rpb24oIlBPU1QiLCB1cmwsIG1l
c3NhZ2UsIG5ldyBBc3luY0h0dHBFdmVudHMoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAg
ICAgICAgcHVibGljIHZvaWQgb25IdHRwRXJyb3IoU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAg
ICAgICAgICAgcmVwb3J0RXJyb3IoIkdBRSBQT1NUIGVycm9yOiAiICsgZXJyb3JNZXNzYWdlKTsK
LSAgICAgICAgICB9Ci0KLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9p
ZCBvbkh0dHBDb21wbGV0ZShTdHJpbmcgcmVzcG9uc2UpIHsKLSAgICAgICAgICAgIGlmIChtZXNz
YWdlVHlwZSA9PSBNZXNzYWdlVHlwZS5NRVNTQUdFKSB7Ci0gICAgICAgICAgICAgIHRyeSB7Ci0g
ICAgICAgICAgICAgICAgSlNPTk9iamVjdCByb29tSnNvbiA9IG5ldyBKU09OT2JqZWN0KHJlc3Bv
bnNlKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcmVzdWx0ID0gcm9vbUpzb24uZ2V0U3RyaW5n
KCJyZXN1bHQiKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHMoIlNVQ0NFU1Mi
KSkgewotICAgICAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoIkdBRSBQT1NUIGVycm9yOiAiICsg
cmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0gY2F0Y2ggKEpTT05F
eGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHJlcG9ydEVycm9yKCJHQUUgUE9TVCBKU09O
IGVycm9yOiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgaHR0cENvbm5lY3Rpb24uc2VuZCgpOwot
ICB9Ci0KLSAgLy8gQ29udmVydHMgYSBKYXZhIGNhbmRpZGF0ZSB0byBhIEpTT05PYmplY3QuCi0g
IHByaXZhdGUgSlNPTk9iamVjdCB0b0pzb25DYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNh
bmRpZGF0ZSkgewotICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0gICAg
anNvblB1dChqc29uLCAibGFiZWwiLCBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCk7Ci0gICAganNv
blB1dChqc29uLCAiaWQiLCBjYW5kaWRhdGUuc2RwTWlkKTsKLSAgICBqc29uUHV0KGpzb24sICJj
YW5kaWRhdGUiLCBjYW5kaWRhdGUuc2RwKTsKLSAgICByZXR1cm4ganNvbjsKLSAgfQotCi0gIC8v
IENvbnZlcnRzIGEgSlNPTiBjYW5kaWRhdGUgdG8gYSBKYXZhIG9iamVjdC4KLSAgSWNlQ2FuZGlk
YXRlIHRvSmF2YUNhbmRpZGF0ZShKU09OT2JqZWN0IGpzb24pIHRocm93cyBKU09ORXhjZXB0aW9u
IHsKLSAgICByZXR1cm4gbmV3IEljZUNhbmRpZGF0ZSgKLSAgICAgICAganNvbi5nZXRTdHJpbmco
ImlkIiksIGpzb24uZ2V0SW50KCJsYWJlbCIpLCBqc29uLmdldFN0cmluZygiY2FuZGlkYXRlIikp
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9BcHBSVENV
dGlscy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGls
L0FwcFJUQ1V0aWxzLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy91dGlsL0FwcFJUQ1V0aWxzLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NyAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy51
dGlsOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9n
OwotCi0vKioKLSAqIEFwcFJUQ1V0aWxzIHByb3ZpZGVzIGhlbHBlciBmdW5jdGlvbnMgZm9yIG1h
bmFnaW5nIHRocmVhZCBzYWZldHkuCi0gKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBBcHBSVENVdGls
cyB7Ci0gIHByaXZhdGUgQXBwUlRDVXRpbHMoKSB7fQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIHdo
aWNoIHRocm93cyBhbiBleGNlcHRpb24gIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuICov
Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRJc1RydWUoYm9vbGVhbiBjb25kaXRpb24pIHsK
LSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJF
eHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIC8qKiBIZWxw
ZXIgbWV0aG9kIGZvciBidWlsZGluZyBhIHN0cmluZyBvZiB0aHJlYWQgaW5mb3JtYXRpb24uKi8K
LSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGhyZWFkSW5mbygpIHsKLSAgICByZXR1cm4gIkBb
bmFtZT0iICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAiLCBpZD0iICsgVGhy
ZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpCi0gICAgICAgICsgIl0iOwotICB9Ci0KLSAgLyoq
IEluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGJ1aWxkLCB0YWtlbiBmcm9tIHN5c3RlbSBw
cm9wZXJ0aWVzLiAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRGV2aWNlSW5mbyhTdHJpbmcg
dGFnKSB7Ci0gICAgTG9nLmQodGFnLCAiQW5kcm9pZCBTREs6ICIgKyBCdWlsZC5WRVJTSU9OLlNE
S19JTlQgKyAiLCAiCi0gICAgICAgICAgICArICJSZWxlYXNlOiAiICsgQnVpbGQuVkVSU0lPTi5S
RUxFQVNFICsgIiwgIgotICAgICAgICAgICAgKyAiQnJhbmQ6ICIgKyBCdWlsZC5CUkFORCArICIs
ICIKLSAgICAgICAgICAgICsgIkRldmljZTogIiArIEJ1aWxkLkRFVklDRSArICIsICIKLSAgICAg
ICAgICAgICsgIklkOiAiICsgQnVpbGQuSUQgKyAiLCAiCi0gICAgICAgICAgICArICJIYXJkd2Fy
ZTogIiArIEJ1aWxkLkhBUkRXQVJFICsgIiwgIgotICAgICAgICAgICAgKyAiTWFudWZhY3R1cmVy
OiAiICsgQnVpbGQuTUFOVUZBQ1RVUkVSICsgIiwgIgotICAgICAgICAgICAgKyAiTW9kZWw6ICIg
KyBCdWlsZC5NT0RFTCArICIsICIKLSAgICAgICAgICAgICsgIlByb2R1Y3Q6ICIgKyBCdWlsZC5Q
Uk9EVUNUKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwv
QXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy91dGlsL0FzeW5jSHR0cFVSTENvbm5lY3Rpb24uamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwvQXN5bmNIdHRwVVJM
Q29ubmVjdGlvbi5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTE5ICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWw7Ci0KLWltcG9ydCBq
YXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQg
amF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247
Ci1pbXBvcnQgamF2YS5uZXQuU29ja2V0VGltZW91dEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5l
dC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7Ci0KLS8qKgotICogQXN5bmNocm9ub3Vz
IGh0dHAgcmVxdWVzdHMgaW1wbGVtZW50YXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBBc3luY0h0
dHBVUkxDb25uZWN0aW9uIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhUVFBfVElNRU9V
VF9NUyA9IDgwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBIVFRQX09SSUdJTiA9
ICJodHRwczovL2FwcHIudGMiOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyBtZXRob2Q7Ci0gIHBy
aXZhdGUgZmluYWwgU3RyaW5nIHVybDsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWVzc2FnZTsK
LSAgcHJpdmF0ZSBmaW5hbCBBc3luY0h0dHBFdmVudHMgZXZlbnRzOwotICBwcml2YXRlIFN0cmlu
ZyBjb250ZW50VHlwZTsKLQotICAvKioKLSAgICogSHR0cCByZXF1ZXN0cyBjYWxsYmFja3MuCi0g
ICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEFzeW5jSHR0cEV2ZW50cyB7Ci0gICAgdm9pZCBvbkh0
dHBFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgICB2b2lkIG9uSHR0cENvbXBsZXRlKFN0
cmluZyByZXNwb25zZSk7Ci0gIH0KLQotICBwdWJsaWMgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbihT
dHJpbmcgbWV0aG9kLCBTdHJpbmcgdXJsLCBTdHJpbmcgbWVzc2FnZSwgQXN5bmNIdHRwRXZlbnRz
IGV2ZW50cykgewotICAgIHRoaXMubWV0aG9kID0gbWV0aG9kOwotICAgIHRoaXMudXJsID0gdXJs
OwotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgdGhpcy5ldmVudHMgPSBldmVudHM7
Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb250ZW50VHlwZShTdHJpbmcgY29udGVudFR5cGUp
IHsKLSAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCBzZW5kKCkgewotICAgIFJ1bm5hYmxlIHJ1bkh0dHAgPSBuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHNlbmRIdHRwTWVzc2FnZSgpOwotICAg
ICAgfQotICAgIH07Ci0gICAgbmV3IFRocmVhZChydW5IdHRwKS5zdGFydCgpOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHNlbmRIdHRwTWVzc2FnZSgpIHsKLSAgICB0cnkgewotICAgICAgSHR0cFVS
TENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlvbikgbmV3IFVSTCh1cmwp
Lm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICBieXRlW10gcG9zdERhdGEgPSBuZXcgYnl0ZVswXTsK
LSAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgICAgcG9zdERhdGEgPSBtZXNzYWdl
LmdldEJ5dGVzKCJVVEYtOCIpOwotICAgICAgfQotICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0
TWV0aG9kKG1ldGhvZCk7Ci0gICAgICBjb25uZWN0aW9uLnNldFVzZUNhY2hlcyhmYWxzZSk7Ci0g
ICAgICBjb25uZWN0aW9uLnNldERvSW5wdXQodHJ1ZSk7Ci0gICAgICBjb25uZWN0aW9uLnNldENv
bm5lY3RUaW1lb3V0KEhUVFBfVElNRU9VVF9NUyk7Ci0gICAgICBjb25uZWN0aW9uLnNldFJlYWRU
aW1lb3V0KEhUVFBfVElNRU9VVF9NUyk7Ci0gICAgICAvLyBUT0RPKGdsYXpuZXYpIC0gcXVlcnkg
cmVxdWVzdCBvcmlnaW4gZnJvbSBwcmVmX3Jvb21fc2VydmVyX3VybF9rZXkgcHJlZmVyZW5jZXMu
Ci0gICAgICBjb25uZWN0aW9uLmFkZFJlcXVlc3RQcm9wZXJ0eSgib3JpZ2luIiwgSFRUUF9PUklH
SU4pOwotICAgICAgYm9vbGVhbiBkb091dHB1dCA9IGZhbHNlOwotICAgICAgaWYgKG1ldGhvZC5l
cXVhbHMoIlBPU1QiKSkgewotICAgICAgICBkb091dHB1dCA9IHRydWU7Ci0gICAgICAgIGNvbm5l
Y3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7Ci0gICAgICAgIGNvbm5lY3Rpb24uc2V0Rml4ZWRMZW5n
dGhTdHJlYW1pbmdNb2RlKHBvc3REYXRhLmxlbmd0aCk7Ci0gICAgICB9Ci0gICAgICBpZiAoY29u
dGVudFR5cGUgPT0gbnVsbCkgewotICAgICAgICBjb25uZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0
eSgiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiKTsKLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3BlcnR5KCJDb250ZW50LVR5
cGUiLCBjb250ZW50VHlwZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNlbmQgUE9TVCByZXF1ZXN0
LgotICAgICAgaWYgKGRvT3V0cHV0ICYmIHBvc3REYXRhLmxlbmd0aCA+IDApIHsKLSAgICAgICAg
T3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IGNvbm5lY3Rpb24uZ2V0T3V0cHV0U3RyZWFtKCk7Ci0g
ICAgICAgIG91dFN0cmVhbS53cml0ZShwb3N0RGF0YSk7Ci0gICAgICAgIG91dFN0cmVhbS5jbG9z
ZSgpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgcmVzcG9uc2UuCi0gICAgICBpbnQgcmVzcG9u
c2VDb2RlID0gY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAgICAgIGlmIChyZXNwb25z
ZUNvZGUgIT0gMjAwKSB7Ci0gICAgICAgIGV2ZW50cy5vbkh0dHBFcnJvcigiTm9uLTIwMCByZXNw
b25zZSB0byAiICsgbWV0aG9kICsgIiB0byBVUkw6ICIgKyB1cmwgKyAiIDogIgotICAgICAgICAg
ICAgKyBjb25uZWN0aW9uLmdldEhlYWRlckZpZWxkKG51bGwpKTsKLSAgICAgICAgY29ubmVjdGlv
bi5kaXNjb25uZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLSAgICAgIElucHV0U3Ry
ZWFtIHJlc3BvbnNlU3RyZWFtID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOwotICAgICAg
U3RyaW5nIHJlc3BvbnNlID0gZHJhaW5TdHJlYW0ocmVzcG9uc2VTdHJlYW0pOwotICAgICAgcmVz
cG9uc2VTdHJlYW0uY2xvc2UoKTsKLSAgICAgIGNvbm5lY3Rpb24uZGlzY29ubmVjdCgpOwotICAg
ICAgZXZlbnRzLm9uSHR0cENvbXBsZXRlKHJlc3BvbnNlKTsKLSAgICB9IGNhdGNoIChTb2NrZXRU
aW1lb3V0RXhjZXB0aW9uIGUpIHsKLSAgICAgIGV2ZW50cy5vbkh0dHBFcnJvcigiSFRUUCAiICsg
bWV0aG9kICsgIiB0byAiICsgdXJsICsgIiB0aW1lb3V0Iik7Ci0gICAgfSBjYXRjaCAoSU9FeGNl
cHRpb24gZSkgewotICAgICAgZXZlbnRzLm9uSHR0cEVycm9yKCJIVFRQICIgKyBtZXRob2QgKyAi
IHRvICIgKyB1cmwgKyAiIGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQot
Ci0gIC8vIFJldHVybiB0aGUgY29udGVudHMgb2YgYW4gSW5wdXRTdHJlYW0gYXMgYSBTdHJpbmcu
Ci0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBkcmFpblN0cmVhbShJbnB1dFN0cmVhbSBpbikgewot
ICAgIFNjYW5uZXIgcyA9IG5ldyBTY2FubmVyKGluKS51c2VEZWxpbWl0ZXIoIlxcQSIpOwotICAg
IHJldHVybiBzLmhhc05leHQoKSA/IHMubmV4dCgpIDogIiI7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENBdWRpb01hbmFnZXIuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDQXVkaW9NYW5hZ2VyLmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9BcHBSVENB
dWRpb01hbmFnZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDQxOSArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IG9yZy5h
cHBzcG90LmFwcHJ0Yy51dGlsLkFwcFJUQ1V0aWxzOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50
LkJyb2FkY2FzdFJlY2VpdmVyOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1w
b3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnQ7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVu
dEZpbHRlcjsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVyZW5jZXM7Ci1pbXBv
cnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVk
aWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlTWFu
YWdlcjsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgamF2YS51dGlsLkNvbGxl
Y3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5TZXQ7
Ci0KLS8qKgotICogQXBwUlRDQXVkaW9NYW5hZ2VyIG1hbmFnZXMgYWxsIGF1ZGlvIHJlbGF0ZWQg
cGFydHMgb2YgdGhlIEFwcFJUQyBkZW1vLgotICovCi1wdWJsaWMgY2xhc3MgQXBwUlRDQXVkaW9N
YW5hZ2VyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBcHBSVENBdWRp
b01hbmFnZXIiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BFQUtFUlBIT05FX0FV
VE8gPSAiYXV0byI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTUEVBS0VSUEhPTkVf
VFJVRSA9ICJ0cnVlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNQRUFLRVJQSE9O
RV9GQUxTRSA9ICJmYWxzZSI7Ci0KLSAgLyoqCi0gICAqIEF1ZGlvRGV2aWNlIGlzIHRoZSBuYW1l
cyBvZiBwb3NzaWJsZSBhdWRpbyBkZXZpY2VzIHRoYXQgd2UgY3VycmVudGx5Ci0gICAqIHN1cHBv
cnQuCi0gICAqLwotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCBmb3IgQkxVRVRPT1RI
IGFzIHdlbGwuCi0gIHB1YmxpYyBlbnVtIEF1ZGlvRGV2aWNlIHsKLSAgICBTUEVBS0VSX1BIT05F
LAotICAgIFdJUkVEX0hFQURTRVQsCi0gICAgRUFSUElFQ0UsCi0gIH0KLQotICBwcml2YXRlIGZp
bmFsIENvbnRleHQgYXBwcnRjQ29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBSdW5uYWJsZSBvblN0
YXRlQ2hhbmdlTGlzdGVuZXI7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZCA9IGZhbHNl
OwotICBwcml2YXRlIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7Ci0gIHByaXZhdGUgaW50IHNh
dmVkQXVkaW9Nb2RlID0gQXVkaW9NYW5hZ2VyLk1PREVfSU5WQUxJRDsKLSAgcHJpdmF0ZSBib29s
ZWFuIHNhdmVkSXNTcGVha2VyUGhvbmVPbiA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gc2F2
ZWRJc01pY3JvcGhvbmVNdXRlID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBBdWRpb0Rldmlj
ZSBkZWZhdWx0QXVkaW9EZXZpY2U7Ci0KLSAgLy8gQ29udGFpbnMgc3BlYWtlcnBob25lIHNldHRp
bmc6IGF1dG8sIHRydWUgb3IgZmFsc2UKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdXNlU3BlYWtl
cnBob25lOwotCi0gIC8vIFByb3hpbWl0eSBzZW5zb3Igb2JqZWN0LiBJdCBtZWFzdXJlcyB0aGUg
cHJveGltaXR5IG9mIGFuIG9iamVjdCBpbiBjbQotICAvLyByZWxhdGl2ZSB0byB0aGUgdmlldyBz
Y3JlZW4gb2YgYSBkZXZpY2UgYW5kIGNhbiB0aGVyZWZvcmUgYmUgdXNlZCB0bwotICAvLyBhc3Np
c3QgZGV2aWNlIHN3aXRjaGluZyAoY2xvc2UgdG8gZWFyIDw9PiB1c2UgaGVhZHNldCBlYXJwaWVj
ZSBpZgotICAvLyBhdmFpbGFibGUsIGZhciBmcm9tIGVhciA8PT4gdXNlIHNwZWFrZXIgcGhvbmUp
LgotICBwcml2YXRlIEFwcFJUQ1Byb3hpbWl0eVNlbnNvciBwcm94aW1pdHlTZW5zb3IgPSBudWxs
OwotCi0gIC8vIENvbnRhaW5zIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYXVkaW8gZGV2aWNlLgot
ICBwcml2YXRlIEF1ZGlvRGV2aWNlIHNlbGVjdGVkQXVkaW9EZXZpY2U7Ci0KLSAgLy8gQ29udGFp
bnMgYSBsaXN0IG9mIGF2YWlsYWJsZSBhdWRpbyBkZXZpY2VzLiBBIFNldCBjb2xsZWN0aW9uIGlz
IHVzZWQgdG8KLSAgLy8gYXZvaWQgZHVwbGljYXRlIGVsZW1lbnRzLgotICBwcml2YXRlIGZpbmFs
IFNldDxBdWRpb0RldmljZT4gYXVkaW9EZXZpY2VzID0gbmV3IEhhc2hTZXQ8QXVkaW9EZXZpY2U+
KCk7Ci0KLSAgLy8gQnJvYWRjYXN0IHJlY2VpdmVyIGZvciB3aXJlZCBoZWFkc2V0IGludGVudCBi
cm9hZGNhc3RzLgotICBwcml2YXRlIEJyb2FkY2FzdFJlY2VpdmVyIHdpcmVkSGVhZHNldFJlY2Vp
dmVyOwotCi0gIC8vIENhbGxiYWNrIG1ldGhvZCBmb3IgY2hhbmdlcyBpbiBhdWRpbyBmb2N1cy4K
LSAgcHJpdmF0ZSBBdWRpb01hbmFnZXIuT25BdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIgYXVkaW9G
b2N1c0NoYW5nZUxpc3RlbmVyOwotCi0gIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRo
ZSBwcm94aW1pdHkgc2Vuc29yIHJlcG9ydHMgYSBzdGF0ZSBjaGFuZ2UsCi0gIC8vIGUuZy4gZnJv
bSAiTkVBUiB0byBGQVIiIG9yIGZyb20gIkZBUiB0byBORUFSIi4KLSAgcHJpdmF0ZSB2b2lkIG9u
UHJveGltaXR5U2Vuc29yQ2hhbmdlZFN0YXRlKCkgewotICAgIGlmICghdXNlU3BlYWtlcnBob25l
LmVxdWFscyhTUEVBS0VSUEhPTkVfQVVUTykpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICAvLyBUaGUgcHJveGltaXR5IHNlbnNvciBzaG91bGQgb25seSBiZSBhY3RpdmF0ZWQgd2hlbiB0
aGVyZSBhcmUgZXhhY3RseSB0d28KLSAgICAvLyBhdmFpbGFibGUgYXVkaW8gZGV2aWNlcy4KLSAg
ICBpZiAoYXVkaW9EZXZpY2VzLnNpemUoKSA9PSAyICYmIGF1ZGlvRGV2aWNlcy5jb250YWlucyhB
cHBSVENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuRUFSUElFQ0UpCi0gICAgICAgICYmIGF1ZGlv
RGV2aWNlcy5jb250YWlucyhBcHBSVENBdWRpb01hbmFnZXIuQXVkaW9EZXZpY2UuU1BFQUtFUl9Q
SE9ORSkpIHsKLSAgICAgIGlmIChwcm94aW1pdHlTZW5zb3Iuc2Vuc29yUmVwb3J0c05lYXJTdGF0
ZSgpKSB7Ci0gICAgICAgIC8vIFNlbnNvciByZXBvcnRzIHRoYXQgYSAiaGFuZHNldCBpcyBiZWlu
ZyBoZWxkIHVwIHRvIGEgcGVyc29uJ3MgZWFyIiwKLSAgICAgICAgLy8gb3IgInNvbWV0aGluZyBp
cyBjb3ZlcmluZyB0aGUgbGlnaHQgc2Vuc29yIi4KLSAgICAgICAgc2V0QXVkaW9EZXZpY2UoQXBw
UlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNlLkVBUlBJRUNFKTsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIFNlbnNvciByZXBvcnRzIHRoYXQgYSAiaGFuZHNldCBpcyByZW1vdmVkIGZyb20g
YSBwZXJzb24ncyBlYXIiLCBvcgotICAgICAgICAvLyAidGhlIGxpZ2h0IHNlbnNvciBpcyBubyBs
b25nZXIgY292ZXJlZCIuCi0gICAgICAgIHNldEF1ZGlvRGV2aWNlKEFwcFJUQ0F1ZGlvTWFuYWdl
ci5BdWRpb0RldmljZS5TUEVBS0VSX1BIT05FKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAv
KiogQ29uc3RydWN0aW9uICovCi0gIHN0YXRpYyBBcHBSVENBdWRpb01hbmFnZXIgY3JlYXRlKENv
bnRleHQgY29udGV4dCwgUnVubmFibGUgZGV2aWNlU3RhdGVDaGFuZ2VMaXN0ZW5lcikgewotICAg
IHJldHVybiBuZXcgQXBwUlRDQXVkaW9NYW5hZ2VyKGNvbnRleHQsIGRldmljZVN0YXRlQ2hhbmdl
TGlzdGVuZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBBcHBSVENBdWRpb01hbmFnZXIoQ29udGV4dCBj
b250ZXh0LCBSdW5uYWJsZSBkZXZpY2VTdGF0ZUNoYW5nZUxpc3RlbmVyKSB7Ci0gICAgYXBwcnRj
Q29udGV4dCA9IGNvbnRleHQ7Ci0gICAgb25TdGF0ZUNoYW5nZUxpc3RlbmVyID0gZGV2aWNlU3Rh
dGVDaGFuZ2VMaXN0ZW5lcjsKLSAgICBhdWRpb01hbmFnZXIgPSAoKEF1ZGlvTWFuYWdlcikgY29u
dGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVESU9fU0VSVklDRSkpOwotCi0gICAgU2hh
cmVkUHJlZmVyZW5jZXMgc2hhcmVkUHJlZmVyZW5jZXMgPSBQcmVmZXJlbmNlTWFuYWdlci5nZXRE
ZWZhdWx0U2hhcmVkUHJlZmVyZW5jZXMoY29udGV4dCk7Ci0gICAgdXNlU3BlYWtlcnBob25lID0g
c2hhcmVkUHJlZmVyZW5jZXMuZ2V0U3RyaW5nKGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5nLnBy
ZWZfc3BlYWtlcnBob25lX2tleSksCi0gICAgICAgIGNvbnRleHQuZ2V0U3RyaW5nKFIuc3RyaW5n
LnByZWZfc3BlYWtlcnBob25lX2RlZmF1bHQpKTsKLQotICAgIGlmICh1c2VTcGVha2VycGhvbmUu
ZXF1YWxzKFNQRUFLRVJQSE9ORV9GQUxTRSkpIHsKLSAgICAgIGRlZmF1bHRBdWRpb0RldmljZSA9
IEF1ZGlvRGV2aWNlLkVBUlBJRUNFOwotICAgIH0gZWxzZSB7Ci0gICAgICBkZWZhdWx0QXVkaW9E
ZXZpY2UgPSBBdWRpb0RldmljZS5TUEVBS0VSX1BIT05FOwotICAgIH0KLQotICAgIC8vIENyZWF0
ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgcHJveGltaXR5IHNlbnNvci4KLSAgICAvLyBUYWJsZXQgZGV2
aWNlcyAoZS5nLiBOZXh1cyA3KSBkb2VzIG5vdCBzdXBwb3J0IHByb3hpbWl0eSBzZW5zb3JzLgot
ICAgIC8vIE5vdGUgdGhhdCwgdGhlIHNlbnNvciB3aWxsIG5vdCBiZSBhY3RpdmUgdW50aWwgc3Rh
cnQoKSBoYXMgYmVlbiBjYWxsZWQuCi0gICAgcHJveGltaXR5U2Vuc29yID0gQXBwUlRDUHJveGlt
aXR5U2Vuc29yLmNyZWF0ZShjb250ZXh0LCBuZXcgUnVubmFibGUoKSB7Ci0gICAgICAvLyBUaGlz
IG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBlYWNoIHRpbWUgYSBzdGF0ZSBjaGFuZ2UgaXMgZGV0ZWN0
ZWQuCi0gICAgICAvLyBFeGFtcGxlOiB1c2VyIGhvbGRzIGhpcyBoYW5kIG92ZXIgdGhlIGRldmlj
ZSAoY2xvc2VyIHRoYW4gfjUgY20pLAotICAgICAgLy8gb3IgcmVtb3ZlcyBoaXMgaGFuZCBmcm9t
IHRoZSBkZXZpY2UuCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIG9uUHJveGlt
aXR5U2Vuc29yQ2hhbmdlZFN0YXRlKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gICAgQXBwUlRDVXRp
bHMubG9nRGV2aWNlSW5mbyhUQUcpOwotICB9Ci0KLSAgcHVibGljIHZvaWQgaW5pdCgpIHsKLSAg
ICBMb2cuZChUQUcsICJpbml0Iik7Ci0gICAgaWYgKGluaXRpYWxpemVkKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gU3RvcmUgY3VycmVudCBhdWRpbyBzdGF0ZSBzbyB3ZSBjYW4g
cmVzdG9yZSBpdCB3aGVuIGNsb3NlKCkgaXMgY2FsbGVkLgotICAgIHNhdmVkQXVkaW9Nb2RlID0g
YXVkaW9NYW5hZ2VyLmdldE1vZGUoKTsKLSAgICBzYXZlZElzU3BlYWtlclBob25lT24gPSBhdWRp
b01hbmFnZXIuaXNTcGVha2VycGhvbmVPbigpOwotICAgIHNhdmVkSXNNaWNyb3Bob25lTXV0ZSA9
IGF1ZGlvTWFuYWdlci5pc01pY3JvcGhvbmVNdXRlKCk7Ci0KLSAgICAvLyBDcmVhdGUgYW4gQXVk
aW9NYW5hZ2VyLk9uQXVkaW9Gb2N1c0NoYW5nZUxpc3RlbmVyIGluc3RhbmNlLgotICAgIGF1ZGlv
Rm9jdXNDaGFuZ2VMaXN0ZW5lciA9IG5ldyBBdWRpb01hbmFnZXIuT25BdWRpb0ZvY3VzQ2hhbmdl
TGlzdGVuZXIoKSB7Ci0gICAgICAvLyBDYWxsZWQgb24gdGhlIGxpc3RlbmVyIHRvIG5vdGlmeSBp
ZiB0aGUgYXVkaW8gZm9jdXMgZm9yIHRoaXMgbGlzdGVuZXIgaGFzIGJlZW4gY2hhbmdlZC4KLSAg
ICAgIC8vIFRoZSB8Zm9jdXNDaGFuZ2V8IHZhbHVlIGluZGljYXRlcyB3aGV0aGVyIHRoZSBmb2N1
cyB3YXMgZ2FpbmVkLCB3aGV0aGVyIHRoZSBmb2N1cyB3YXMgbG9zdCwKLSAgICAgIC8vIGFuZCB3
aGV0aGVyIHRoYXQgbG9zcyBpcyB0cmFuc2llbnQsIG9yIHdoZXRoZXIgdGhlIG5ldyBmb2N1cyBo
b2xkZXIgd2lsbCBob2xkIGl0IGZvciBhbgotICAgICAgLy8gdW5rbm93biBhbW91bnQgb2YgdGlt
ZS4KLSAgICAgIC8vIFRPRE8oaGVucmlrYSk6IHBvc3NpYmx5IGV4dGVuZCBzdXBwb3J0IG9mIGhh
bmRsaW5nIGF1ZGlvLWZvY3VzIGNoYW5nZXMuIE9ubHkgY29udGFpbnMKLSAgICAgIC8vIGxvZ2dp
bmcgZm9yIG5vdy4KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25BdWRpb0Zv
Y3VzQ2hhbmdlKGludCBmb2N1c0NoYW5nZSkgewotICAgICAgICBTdHJpbmcgdHlwZU9mQ2hhbmdl
ID0gIkFVRElPRk9DVVNfTk9UX0RFRklORUQiOwotICAgICAgICBzd2l0Y2ggKGZvY3VzQ2hhbmdl
KSB7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlOOgotICAgICAg
ICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfR0FJTiI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICBjYXNlIEF1ZGlvTWFuYWdlci5BVURJT0ZPQ1VTX0dBSU5fVFJBTlNJRU5U
OgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfR0FJTl9UUkFOU0lFTlQi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9G
T0NVU19HQUlOX1RSQU5TSUVOVF9FWENMVVNJVkU6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2Ug
PSAiQVVESU9GT0NVU19HQUlOX1RSQU5TSUVOVF9FWENMVVNJVkUiOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgY2FzZSBBdWRpb01hbmFnZXIuQVVESU9GT0NVU19HQUlOX1RSQU5TSUVO
VF9NQVlfRFVDSzoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0dBSU5f
VFJBTlNJRU5UX01BWV9EVUNLIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2Ug
QXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfTE9TUzoKLSAgICAgICAgICAgIHR5cGVPZkNoYW5nZSA9
ICJBVURJT0ZPQ1VTX0xPU1MiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBB
dWRpb01hbmFnZXIuQVVESU9GT0NVU19MT1NTX1RSQU5TSUVOVDoKLSAgICAgICAgICAgIHR5cGVP
ZkNoYW5nZSA9ICJBVURJT0ZPQ1VTX0xPU1NfVFJBTlNJRU5UIjsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgIGNhc2UgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNfTE9TU19UUkFOU0lFTlRf
Q0FOX0RVQ0s6Ci0gICAgICAgICAgICB0eXBlT2ZDaGFuZ2UgPSAiQVVESU9GT0NVU19MT1NTX1RS
QU5TSUVOVF9DQU5fRFVDSyI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgdHlwZU9mQ2hhbmdlID0gIkFVRElPRk9DVVNfSU5WQUxJRCI7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcsICJvbkF1ZGlvRm9j
dXNDaGFuZ2U6ICIgKyB0eXBlT2ZDaGFuZ2UpOwotICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBS
ZXF1ZXN0IGF1ZGlvIHBsYXlvdXQgZm9jdXMgKHdpdGhvdXQgZHVja2luZykgYW5kIGluc3RhbGwg
bGlzdGVuZXIgZm9yIGNoYW5nZXMgaW4gZm9jdXMuCi0gICAgaW50IHJlc3VsdCA9IGF1ZGlvTWFu
YWdlci5yZXF1ZXN0QXVkaW9Gb2N1cyhhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIsCi0gICAgICAg
IEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgQXVkaW9NYW5hZ2VyLkFVRElPRk9DVVNf
R0FJTl9UUkFOU0lFTlQpOwotICAgIGlmIChyZXN1bHQgPT0gQXVkaW9NYW5hZ2VyLkFVRElPRk9D
VVNfUkVRVUVTVF9HUkFOVEVEKSB7Ci0gICAgICBMb2cuZChUQUcsICJBdWRpbyBmb2N1cyByZXF1
ZXN0IGdyYW50ZWQgZm9yIFZPSUNFX0NBTEwgc3RyZWFtcyIpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBMb2cuZShUQUcsICJBdWRpbyBmb2N1cyByZXF1ZXN0IGZhaWxlZCIpOwotICAgIH0KLQotICAg
IC8vIFN0YXJ0IGJ5IHNldHRpbmcgTU9ERV9JTl9DT01NVU5JQ0FUSU9OIGFzIGRlZmF1bHQgYXVk
aW8gbW9kZS4gSXQgaXMKLSAgICAvLyByZXF1aXJlZCB0byBiZSBpbiB0aGlzIG1vZGUgd2hlbiBw
bGF5b3V0IGFuZC9vciByZWNvcmRpbmcgc3RhcnRzIGZvcgotICAgIC8vIGJlc3QgcG9zc2libGUg
Vm9JUCBwZXJmb3JtYW5jZS4KLSAgICAvLyBUT0RPKGhlbnJpa2EpOiB3ZSBtaWdoIHdhbnQgdG8g
c3RhcnQgd2l0aCBSSU5HVE9ORSBtb2RlIGhlcmUgaW5zdGVhZC4KLSAgICBhdWRpb01hbmFnZXIu
c2V0TW9kZShBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OKTsKLQotICAgIC8vIEFs
d2F5cyBkaXNhYmxlIG1pY3JvcGhvbmUgbXV0ZSBkdXJpbmcgYSBXZWJSVEMgY2FsbC4KLSAgICBz
ZXRNaWNyb3Bob25lTXV0ZShmYWxzZSk7Ci0KLSAgICAvLyBEbyBpbml0aWFsIHNlbGVjdGlvbiBv
ZiBhdWRpbyBkZXZpY2UuIFRoaXMgc2V0dGluZyBjYW4gbGF0ZXIgYmUgY2hhbmdlZAotICAgIC8v
IGVpdGhlciBieSBhZGRpbmcvcmVtb3ZpbmcgYSB3aXJlZCBoZWFkc2V0IG9yIGJ5IGNvdmVyaW5n
L3VuY292ZXJpbmcgdGhlCi0gICAgLy8gcHJveGltaXR5IHNlbnNvci4KLSAgICB1cGRhdGVBdWRp
b0RldmljZVN0YXRlKGhhc1dpcmVkSGVhZHNldCgpKTsKLQotICAgIC8vIFJlZ2lzdGVyIHJlY2Vp
dmVyIGZvciBicm9hZGNhc3QgaW50ZW50cyByZWxhdGVkIHRvIGFkZGluZy9yZW1vdmluZyBhCi0g
ICAgLy8gd2lyZWQgaGVhZHNldCAoSW50ZW50LkFDVElPTl9IRUFEU0VUX1BMVUcpLgotICAgIHJl
Z2lzdGVyRm9yV2lyZWRIZWFkc2V0SW50ZW50QnJvYWRjYXN0KCk7Ci0KLSAgICBpbml0aWFsaXpl
ZCA9IHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKLSAgICBMb2cuZChUQUcs
ICJjbG9zZSIpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB1bnJlZ2lzdGVyRm9yV2lyZWRIZWFkc2V0SW50ZW50QnJvYWRjYXN0KCk7Ci0KLSAg
ICAvLyBSZXN0b3JlIHByZXZpb3VzbHkgc3RvcmVkIGF1ZGlvIHN0YXRlcy4KLSAgICBzZXRTcGVh
a2VycGhvbmVPbihzYXZlZElzU3BlYWtlclBob25lT24pOwotICAgIHNldE1pY3JvcGhvbmVNdXRl
KHNhdmVkSXNNaWNyb3Bob25lTXV0ZSk7Ci0gICAgYXVkaW9NYW5hZ2VyLnNldE1vZGUoc2F2ZWRB
dWRpb01vZGUpOwotCi0gICAgLy8gQWJhbmRvbiBhdWRpbyBmb2N1cy4gR2l2ZXMgdGhlIHByZXZp
b3VzIGZvY3VzIG93bmVyLCBpZiBhbnksIGZvY3VzLgotICAgIGF1ZGlvTWFuYWdlci5hYmFuZG9u
QXVkaW9Gb2N1cyhhdWRpb0ZvY3VzQ2hhbmdlTGlzdGVuZXIpOwotICAgIGF1ZGlvRm9jdXNDaGFu
Z2VMaXN0ZW5lciA9IG51bGw7Ci0gICAgTG9nLmQoVEFHLCAiQWJhbmRvbmVkIGF1ZGlvIGZvY3Vz
IGZvciBWT0lDRV9DQUxMIHN0cmVhbXMiKTsKLQotICAgIGlmIChwcm94aW1pdHlTZW5zb3IgIT0g
bnVsbCkgewotICAgICAgcHJveGltaXR5U2Vuc29yLnN0b3AoKTsKLSAgICAgIHByb3hpbWl0eVNl
bnNvciA9IG51bGw7Ci0gICAgfQotCi0gICAgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgfQotCi0g
IC8qKiBDaGFuZ2VzIHNlbGVjdGlvbiBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBhdWRpbyBkZXZp
Y2UuICovCi0gIHB1YmxpYyB2b2lkIHNldEF1ZGlvRGV2aWNlKEF1ZGlvRGV2aWNlIGRldmljZSkg
ewotICAgIExvZy5kKFRBRywgInNldEF1ZGlvRGV2aWNlKGRldmljZT0iICsgZGV2aWNlICsgIiki
KTsKLSAgICBBcHBSVENVdGlscy5hc3NlcnRJc1RydWUoYXVkaW9EZXZpY2VzLmNvbnRhaW5zKGRl
dmljZSkpOwotCi0gICAgc3dpdGNoIChkZXZpY2UpIHsKLSAgICAgIGNhc2UgU1BFQUtFUl9QSE9O
RToKLSAgICAgICAgc2V0U3BlYWtlcnBob25lT24odHJ1ZSk7Ci0gICAgICAgIHNlbGVjdGVkQXVk
aW9EZXZpY2UgPSBBdWRpb0RldmljZS5TUEVBS0VSX1BIT05FOwotICAgICAgICBicmVhazsKLSAg
ICAgIGNhc2UgRUFSUElFQ0U6Ci0gICAgICAgIHNldFNwZWFrZXJwaG9uZU9uKGZhbHNlKTsKLSAg
ICAgICAgc2VsZWN0ZWRBdWRpb0RldmljZSA9IEF1ZGlvRGV2aWNlLkVBUlBJRUNFOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2UgV0lSRURfSEVBRFNFVDoKLSAgICAgICAgc2V0U3BlYWtlcnBo
b25lT24oZmFsc2UpOwotICAgICAgICBzZWxlY3RlZEF1ZGlvRGV2aWNlID0gQXVkaW9EZXZpY2Uu
V0lSRURfSEVBRFNFVDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0OgotICAgICAgICBM
b2cuZShUQUcsICJJbnZhbGlkIGF1ZGlvIGRldmljZSBzZWxlY3Rpb24iKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIG9uQXVkaW9NYW5hZ2VyQ2hhbmdlZFN0YXRlKCk7Ci0gIH0KLQotICAv
KiogUmV0dXJucyBjdXJyZW50IHNldCBvZiBhdmFpbGFibGUvc2VsZWN0YWJsZSBhdWRpbyBkZXZp
Y2VzLiAqLwotICBwdWJsaWMgU2V0PEF1ZGlvRGV2aWNlPiBnZXRBdWRpb0RldmljZXMoKSB7Ci0g
ICAgcmV0dXJuIENvbGxlY3Rpb25zLnVubW9kaWZpYWJsZVNldChuZXcgSGFzaFNldDxBdWRpb0Rl
dmljZT4oYXVkaW9EZXZpY2VzKSk7Ci0gIH0KLQotICAvKiogUmV0dXJucyB0aGUgY3VycmVudGx5
IHNlbGVjdGVkIGF1ZGlvIGRldmljZS4gKi8KLSAgcHVibGljIEF1ZGlvRGV2aWNlIGdldFNlbGVj
dGVkQXVkaW9EZXZpY2UoKSB7Ci0gICAgcmV0dXJuIHNlbGVjdGVkQXVkaW9EZXZpY2U7Ci0gIH0K
LQotICAvKioKLSAgICogUmVnaXN0ZXJzIHJlY2VpdmVyIGZvciB0aGUgYnJvYWRjYXN0ZWQgaW50
ZW50IHdoZW4gYSB3aXJlZCBoZWFkc2V0IGlzCi0gICAqIHBsdWdnZWQgaW4gb3IgdW5wbHVnZ2Vk
LiBUaGUgcmVjZWl2ZWQgaW50ZW50IHdpbGwgaGF2ZSBhbiBleHRyYQotICAgKiAnc3RhdGUnIHZh
bHVlIHdoZXJlIDAgbWVhbnMgdW5wbHVnZ2VkLCBhbmQgMSBtZWFucyBwbHVnZ2VkLgotICAgKi8K
LSAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyRm9yV2lyZWRIZWFkc2V0SW50ZW50QnJvYWRjYXN0KCkg
ewotICAgIEludGVudEZpbHRlciBmaWx0ZXIgPSBuZXcgSW50ZW50RmlsdGVyKEludGVudC5BQ1RJ
T05fSEVBRFNFVF9QTFVHKTsKLQotICAgIC8qKiBSZWNlaXZlciB3aGljaCBoYW5kbGVzIGNoYW5n
ZXMgaW4gd2lyZWQgaGVhZHNldCBhdmFpbGFiaWxpdHkuICovCi0gICAgd2lyZWRIZWFkc2V0UmVj
ZWl2ZXIgPSBuZXcgQnJvYWRjYXN0UmVjZWl2ZXIoKSB7Ci0gICAgICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgU1RBVEVfVU5QTFVHR0VEID0gMDsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBTVEFURV9QTFVHR0VEID0gMTsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBI
QVNfTk9fTUlDID0gMDsKLSAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIQVNfTUlDID0g
MTsKLQotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblJlY2VpdmUoQ29udGV4
dCBjb250ZXh0LCBJbnRlbnQgaW50ZW50KSB7Ci0gICAgICAgIGludCBzdGF0ZSA9IGludGVudC5n
ZXRJbnRFeHRyYSgic3RhdGUiLCBTVEFURV9VTlBMVUdHRUQpOwotICAgICAgICBpbnQgbWljcm9w
aG9uZSA9IGludGVudC5nZXRJbnRFeHRyYSgibWljcm9waG9uZSIsIEhBU19OT19NSUMpOwotICAg
ICAgICBTdHJpbmcgbmFtZSA9IGludGVudC5nZXRTdHJpbmdFeHRyYSgibmFtZSIpOwotICAgICAg
ICBMb2cuZChUQUcsICJCcm9hZGNhc3RSZWNlaXZlci5vblJlY2VpdmUiICsgQXBwUlRDVXRpbHMu
Z2V0VGhyZWFkSW5mbygpICsgIjogIgotICAgICAgICAgICAgICAgICsgImE9IiArIGludGVudC5n
ZXRBY3Rpb24oKSArICIsIHM9IgotICAgICAgICAgICAgICAgICsgKHN0YXRlID09IFNUQVRFX1VO
UExVR0dFRCA/ICJ1bnBsdWdnZWQiIDogInBsdWdnZWQiKSArICIsIG09IgotICAgICAgICAgICAg
ICAgICsgKG1pY3JvcGhvbmUgPT0gSEFTX01JQyA/ICJtaWMiIDogIm5vIG1pYyIpICsgIiwgbj0i
ICsgbmFtZSArICIsIHNiPSIKLSAgICAgICAgICAgICAgICArIGlzSW5pdGlhbFN0aWNreUJyb2Fk
Y2FzdCgpKTsKLQotICAgICAgICBib29sZWFuIGhhc1dpcmVkSGVhZHNldCA9IChzdGF0ZSA9PSBT
VEFURV9QTFVHR0VEKTsKLSAgICAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgICAgICAgIGNhc2Ug
U1RBVEVfVU5QTFVHR0VEOgotICAgICAgICAgICAgdXBkYXRlQXVkaW9EZXZpY2VTdGF0ZShoYXNX
aXJlZEhlYWRzZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgY2FzZSBTVEFURV9Q
TFVHR0VEOgotICAgICAgICAgICAgaWYgKHNlbGVjdGVkQXVkaW9EZXZpY2UgIT0gQXVkaW9EZXZp
Y2UuV0lSRURfSEVBRFNFVCkgewotICAgICAgICAgICAgICB1cGRhdGVBdWRpb0RldmljZVN0YXRl
KGhhc1dpcmVkSGVhZHNldCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgTG9nLmUoVEFHLCAiSW52YWxpZCBzdGF0ZSIp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9OwotCi0gICAg
YXBwcnRjQ29udGV4dC5yZWdpc3RlclJlY2VpdmVyKHdpcmVkSGVhZHNldFJlY2VpdmVyLCBmaWx0
ZXIpOwotICB9Ci0KLSAgLyoqIFVucmVnaXN0ZXIgcmVjZWl2ZXIgZm9yIGJyb2FkY2FzdGVkIEFD
VElPTl9IRUFEU0VUX1BMVUcgaW50ZW50LiAqLwotICBwcml2YXRlIHZvaWQgdW5yZWdpc3RlckZv
cldpcmVkSGVhZHNldEludGVudEJyb2FkY2FzdCgpIHsKLSAgICBhcHBydGNDb250ZXh0LnVucmVn
aXN0ZXJSZWNlaXZlcih3aXJlZEhlYWRzZXRSZWNlaXZlcik7Ci0gICAgd2lyZWRIZWFkc2V0UmVj
ZWl2ZXIgPSBudWxsOwotICB9Ci0KLSAgLyoqIFNldHMgdGhlIHNwZWFrZXIgcGhvbmUgbW9kZS4g
Ki8KLSAgcHJpdmF0ZSB2b2lkIHNldFNwZWFrZXJwaG9uZU9uKGJvb2xlYW4gb24pIHsKLSAgICBi
b29sZWFuIHdhc09uID0gYXVkaW9NYW5hZ2VyLmlzU3BlYWtlcnBob25lT24oKTsKLSAgICBpZiAo
d2FzT24gPT0gb24pIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgYXVkaW9NYW5hZ2VyLnNl
dFNwZWFrZXJwaG9uZU9uKG9uKTsKLSAgfQotCi0gIC8qKiBTZXRzIHRoZSBtaWNyb3Bob25lIG11
dGUgc3RhdGUuICovCi0gIHByaXZhdGUgdm9pZCBzZXRNaWNyb3Bob25lTXV0ZShib29sZWFuIG9u
KSB7Ci0gICAgYm9vbGVhbiB3YXNNdXRlZCA9IGF1ZGlvTWFuYWdlci5pc01pY3JvcGhvbmVNdXRl
KCk7Ci0gICAgaWYgKHdhc011dGVkID09IG9uKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IGF1ZGlvTWFuYWdlci5zZXRNaWNyb3Bob25lTXV0ZShvbik7Ci0gIH0KLQotICAvKiogR2V0cyB0
aGUgY3VycmVudCBlYXJwaWVjZSBzdGF0ZS4gKi8KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0VhcnBp
ZWNlKCkgewotICAgIHJldHVybiBhcHBydGNDb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFz
U3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX1RFTEVQSE9OWSk7Ci0gIH0KLQot
ICAvKioKLSAgICogQ2hlY2tzIHdoZXRoZXIgYSB3aXJlZCBoZWFkc2V0IGlzIGNvbm5lY3RlZCBv
ciBub3QuCi0gICAqIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5kaWNhdGlvbiB0aGF0IGF1ZGlvIHBs
YXliYWNrIGlzIGFjdHVhbGx5IG92ZXIKLSAgICogdGhlIHdpcmVkIGhlYWRzZXQgYXMgYXVkaW8g
cm91dGluZyBkZXBlbmRzIG9uIG90aGVyIGNvbmRpdGlvbnMuIFdlCi0gICAqIG9ubHkgdXNlIGl0
IGFzIGFuIGVhcmx5IGluZGljYXRvciAoZHVyaW5nIGluaXRpYWxpemF0aW9uKSBvZiBhbiBhdHRh
Y2hlZAotICAgKiB3aXJlZCBoZWFkc2V0LgotICAgKi8KLSAgQERlcHJlY2F0ZWQKLSAgcHJpdmF0
ZSBib29sZWFuIGhhc1dpcmVkSGVhZHNldCgpIHsKLSAgICByZXR1cm4gYXVkaW9NYW5hZ2VyLmlz
V2lyZWRIZWFkc2V0T24oKTsKLSAgfQotCi0gIC8qKiBVcGRhdGUgbGlzdCBvZiBwb3NzaWJsZSBh
dWRpbyBkZXZpY2VzIGFuZCBtYWtlIG5ldyBkZXZpY2Ugc2VsZWN0aW9uLiAqLwotICBwcml2YXRl
IHZvaWQgdXBkYXRlQXVkaW9EZXZpY2VTdGF0ZShib29sZWFuIGhhc1dpcmVkSGVhZHNldCkgewot
ICAgIC8vIFVwZGF0ZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXVkaW8gZGV2aWNlcy4KLSAgICBh
dWRpb0RldmljZXMuY2xlYXIoKTsKLSAgICBpZiAoaGFzV2lyZWRIZWFkc2V0KSB7Ci0gICAgICAv
LyBJZiBhIHdpcmVkIGhlYWRzZXQgaXMgY29ubmVjdGVkLCB0aGVuIGl0IGlzIHRoZSBvbmx5IHBv
c3NpYmxlIG9wdGlvbi4KLSAgICAgIGF1ZGlvRGV2aWNlcy5hZGQoQXVkaW9EZXZpY2UuV0lSRURf
SEVBRFNFVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIE5vIHdpcmVkIGhlYWRzZXQsIGhlbmNl
IHRoZSBhdWRpby1kZXZpY2UgbGlzdCBjYW4gY29udGFpbiBzcGVha2VyCi0gICAgICAvLyBwaG9u
ZSAob24gYSB0YWJsZXQpLCBvciBzcGVha2VyIHBob25lIGFuZCBlYXJwaWVjZSAob24gbW9iaWxl
IHBob25lKS4KLSAgICAgIGF1ZGlvRGV2aWNlcy5hZGQoQXVkaW9EZXZpY2UuU1BFQUtFUl9QSE9O
RSk7Ci0gICAgICBpZiAoaGFzRWFycGllY2UoKSkgewotICAgICAgICBhdWRpb0RldmljZXMuYWRk
KEF1ZGlvRGV2aWNlLkVBUlBJRUNFKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAi
YXVkaW9EZXZpY2VzOiAiICsgYXVkaW9EZXZpY2VzKTsKLQotICAgIC8vIFN3aXRjaCB0byBjb3Jy
ZWN0IGF1ZGlvIGRldmljZSBnaXZlbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgYXVkaW8gZGV2aWNl
cy4KLSAgICBpZiAoaGFzV2lyZWRIZWFkc2V0KSB7Ci0gICAgICBzZXRBdWRpb0RldmljZShBdWRp
b0RldmljZS5XSVJFRF9IRUFEU0VUKTsKLSAgICB9IGVsc2UgewotICAgICAgc2V0QXVkaW9EZXZp
Y2UoZGVmYXVsdEF1ZGlvRGV2aWNlKTsKLSAgICB9Ci0gIH0KLQotICAvKiogQ2FsbGVkIGVhY2gg
dGltZSBhIG5ldyBhdWRpbyBkZXZpY2UgaGFzIGJlZW4gYWRkZWQgb3IgcmVtb3ZlZC4gKi8KLSAg
cHJpdmF0ZSB2b2lkIG9uQXVkaW9NYW5hZ2VyQ2hhbmdlZFN0YXRlKCkgewotICAgIExvZy5kKFRB
RywgIm9uQXVkaW9NYW5hZ2VyQ2hhbmdlZFN0YXRlOiBkZXZpY2VzPSIgKyBhdWRpb0RldmljZXMg
KyAiLCBzZWxlY3RlZD0iCi0gICAgICAgICAgICArIHNlbGVjdGVkQXVkaW9EZXZpY2UpOwotCi0g
ICAgLy8gRW5hYmxlIHRoZSBwcm94aW1pdHkgc2Vuc29yIGlmIHRoZXJlIGFyZSB0d28gYXZhaWxh
YmxlIGF1ZGlvIGRldmljZXMKLSAgICAvLyBpbiB0aGUgbGlzdC4gR2l2ZW4gdGhlIGN1cnJlbnQg
aW1wbGVtZW50YXRpb24sIHdlIGtub3cgdGhhdCB0aGUgY2hvaWNlCi0gICAgLy8gd2lsbCB0aGVu
IGJlIGJldHdlZW4gRUFSUElFQ0UgYW5kIFNQRUFLRVJfUEhPTkUuCi0gICAgaWYgKGF1ZGlvRGV2
aWNlcy5zaXplKCkgPT0gMikgewotICAgICAgQXBwUlRDVXRpbHMuYXNzZXJ0SXNUcnVlKGF1ZGlv
RGV2aWNlcy5jb250YWlucyhBdWRpb0RldmljZS5FQVJQSUVDRSkKLSAgICAgICAgICAmJiBhdWRp
b0RldmljZXMuY29udGFpbnMoQXVkaW9EZXZpY2UuU1BFQUtFUl9QSE9ORSkpOwotICAgICAgLy8g
U3RhcnQgdGhlIHByb3hpbWl0eSBzZW5zb3IuCi0gICAgICBwcm94aW1pdHlTZW5zb3Iuc3RhcnQo
KTsKLSAgICB9IGVsc2UgaWYgKGF1ZGlvRGV2aWNlcy5zaXplKCkgPT0gMSkgewotICAgICAgLy8g
U3RvcCB0aGUgcHJveGltaXR5IHNlbnNvciBzaW5jZSBpdCBpcyBubyBsb25nZXIgbmVlZGVkLgot
ICAgICAgcHJveGltaXR5U2Vuc29yLnN0b3AoKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmUo
VEFHLCAiSW52YWxpZCBkZXZpY2UgbGlzdCIpOwotICAgIH0KLQotICAgIGlmIChvblN0YXRlQ2hh
bmdlTGlzdGVuZXIgIT0gbnVsbCkgewotICAgICAgLy8gUnVuIGNhbGxiYWNrIHRvIG5vdGlmeSBh
IGxpc3RlbmluZyBjbGllbnQuIFRoZSBjbGllbnQgY2FuIHRoZW4KLSAgICAgIC8vIHVzZSBwdWJs
aWMgZ2V0dGVycyB0byBxdWVyeSB0aGUgbmV3IHN0YXRlLgotICAgICAgb25TdGF0ZUNoYW5nZUxp
c3RlbmVyLnJ1bigpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3Qv
YXBwcnRjL0FwcFJUQ0NsaWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9BcHBSVENDbGllbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL0FwcFJUQ0NsaWVudC5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMTMxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTMgVGhlIFdlYlJUQyBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3Qu
YXBwcnRjOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlv
bjsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi0vKioKLSAqIEFwcFJUQ0NsaWVudCBpcyB0
aGUgaW50ZXJmYWNlIHJlcHJlc2VudGluZyBhbiBBcHBSVEMgY2xpZW50LgotICovCi1wdWJsaWMg
aW50ZXJmYWNlIEFwcFJUQ0NsaWVudCB7Ci0gIC8qKgotICAgKiBTdHJ1Y3QgaG9sZGluZyB0aGUg
Y29ubmVjdGlvbiBwYXJhbWV0ZXJzIG9mIGFuIEFwcFJUQyByb29tLgotICAgKi8KLSAgY2xhc3Mg
Um9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIHsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIHJvb21V
cmw7Ci0gICAgcHVibGljIGZpbmFsIFN0cmluZyByb29tSWQ7Ci0gICAgcHVibGljIGZpbmFsIGJv
b2xlYW4gbG9vcGJhY2s7Ci0gICAgcHVibGljIFJvb21Db25uZWN0aW9uUGFyYW1ldGVycyhTdHJp
bmcgcm9vbVVybCwgU3RyaW5nIHJvb21JZCwgYm9vbGVhbiBsb29wYmFjaykgewotICAgICAgdGhp
cy5yb29tVXJsID0gcm9vbVVybDsKLSAgICAgIHRoaXMucm9vbUlkID0gcm9vbUlkOwotICAgICAg
dGhpcy5sb29wYmFjayA9IGxvb3BiYWNrOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBBc3lu
Y2hyb25vdXNseSBjb25uZWN0IHRvIGFuIEFwcFJUQyByb29tIFVSTCB1c2luZyBzdXBwbGllZCBj
b25uZWN0aW9uCi0gICAqIHBhcmFtZXRlcnMuIE9uY2UgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hl
ZCBvbkNvbm5lY3RlZFRvUm9vbSgpCi0gICAqIGNhbGxiYWNrIHdpdGggcm9vbSBwYXJhbWV0ZXJz
IGlzIGludm9rZWQuCi0gICAqLwotICB2b2lkIGNvbm5lY3RUb1Jvb20oUm9vbUNvbm5lY3Rpb25Q
YXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJhbWV0ZXJzKTsKLQotICAvKioKLSAgICogU2VuZCBvZmZl
ciBTRFAgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICAgKi8KLSAgdm9pZCBzZW5kT2ZmZXJT
ZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgLyoqCi0gICAqIFNlbmQgYW5z
d2VyIFNEUCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gICAqLwotICB2b2lkIHNlbmRBbnN3
ZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7Ci0KLSAgLyoqCi0gICAqIFNlbmQg
SWNlIGNhbmRpZGF0ZSB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gICAqLwotICB2b2lkIHNl
bmRMb2NhbEljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKTsKLQotICAv
KioKLSAgICogU2VuZCByZW1vdmVkIElDRSBjYW5kaWRhdGVzIHRvIHRoZSBvdGhlciBwYXJ0aWNp
cGFudC4KLSAgICovCi0gIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlUmVtb3ZhbHMoZmluYWwg
SWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyk7Ci0KLSAgLyoqCi0gICAqIERpc2Nvbm5lY3QgZnJv
bSByb29tLgotICAgKi8KLSAgdm9pZCBkaXNjb25uZWN0RnJvbVJvb20oKTsKLQotICAvKioKLSAg
ICogU3RydWN0IGhvbGRpbmcgdGhlIHNpZ25hbGluZyBwYXJhbWV0ZXJzIG9mIGFuIEFwcFJUQyBy
b29tLgotICAgKi8KLSAgY2xhc3MgU2lnbmFsaW5nUGFyYW1ldGVycyB7Ci0gICAgcHVibGljIGZp
bmFsIExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzOwotICAgIHB1Ymxp
YyBmaW5hbCBib29sZWFuIGluaXRpYXRvcjsKLSAgICBwdWJsaWMgZmluYWwgU3RyaW5nIGNsaWVu
dElkOwotICAgIHB1YmxpYyBmaW5hbCBTdHJpbmcgd3NzVXJsOwotICAgIHB1YmxpYyBmaW5hbCBT
dHJpbmcgd3NzUG9zdFVybDsKLSAgICBwdWJsaWMgZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIG9m
ZmVyU2RwOwotICAgIHB1YmxpYyBmaW5hbCBMaXN0PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRl
czsKLQotICAgIHB1YmxpYyBTaWduYWxpbmdQYXJhbWV0ZXJzKExpc3Q8UGVlckNvbm5lY3Rpb24u
SWNlU2VydmVyPiBpY2VTZXJ2ZXJzLCBib29sZWFuIGluaXRpYXRvciwKLSAgICAgICAgU3RyaW5n
IGNsaWVudElkLCBTdHJpbmcgd3NzVXJsLCBTdHJpbmcgd3NzUG9zdFVybCwgU2Vzc2lvbkRlc2Ny
aXB0aW9uIG9mZmVyU2RwLAotICAgICAgICBMaXN0PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRl
cykgewotICAgICAgdGhpcy5pY2VTZXJ2ZXJzID0gaWNlU2VydmVyczsKLSAgICAgIHRoaXMuaW5p
dGlhdG9yID0gaW5pdGlhdG9yOwotICAgICAgdGhpcy5jbGllbnRJZCA9IGNsaWVudElkOwotICAg
ICAgdGhpcy53c3NVcmwgPSB3c3NVcmw7Ci0gICAgICB0aGlzLndzc1Bvc3RVcmwgPSB3c3NQb3N0
VXJsOwotICAgICAgdGhpcy5vZmZlclNkcCA9IG9mZmVyU2RwOwotICAgICAgdGhpcy5pY2VDYW5k
aWRhdGVzID0gaWNlQ2FuZGlkYXRlczsKLSAgICB9Ci0gIH0KLQotICAvKioKLSAgICogQ2FsbGJh
Y2sgaW50ZXJmYWNlIGZvciBtZXNzYWdlcyBkZWxpdmVyZWQgb24gc2lnbmFsaW5nIGNoYW5uZWwu
Ci0gICAqCi0gICAqIDxwPk1ldGhvZHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgaW52b2tlZCBvbiB0
aGUgVUkgdGhyZWFkIG9mIHxhY3Rpdml0eXwuCi0gICAqLwotICBpbnRlcmZhY2UgU2lnbmFsaW5n
RXZlbnRzIHsKLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIHRoZSByb29tJ3Mg
c2lnbmFsaW5nIHBhcmFtZXRlcnMKLSAgICAgKiBTaWduYWxpbmdQYXJhbWV0ZXJzIGFyZSBleHRy
YWN0ZWQuCi0gICAgICovCi0gICAgdm9pZCBvbkNvbm5lY3RlZFRvUm9vbShmaW5hbCBTaWduYWxp
bmdQYXJhbWV0ZXJzIHBhcmFtcyk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBv
bmNlIHJlbW90ZSBTRFAgaXMgcmVjZWl2ZWQuCi0gICAgICovCi0gICAgdm9pZCBvblJlbW90ZURl
c2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHApOwotCi0gICAgLyoqCi0gICAg
ICogQ2FsbGJhY2sgZmlyZWQgb25jZSByZW1vdGUgSWNlIGNhbmRpZGF0ZSBpcyByZWNlaXZlZC4K
LSAgICAgKi8KLSAgICB2b2lkIG9uUmVtb3RlSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0
ZSBjYW5kaWRhdGUpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSByZW1v
dGUgSWNlIGNhbmRpZGF0ZSByZW1vdmFscyBhcmUgcmVjZWl2ZWQuCi0gICAgICovCi0gICAgdm9p
ZCBvblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRp
ZGF0ZXMpOwotCi0gICAgLyoqCi0gICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBjaGFubmVsIGlz
IGNsb3NlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uQ2hhbm5lbENsb3NlKCk7Ci0KLSAgICAvKioK
LSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGNoYW5uZWwgZXJyb3IgaGFwcGVuZWQuCi0gICAg
ICovCi0gICAgdm9pZCBvbkNoYW5uZWxFcnJvcihmaW5hbCBTdHJpbmcgZGVzY3JpcHRpb24pOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDUHJveGltaXR5
U2Vuc29yLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Fw
cFJUQ1Byb3hpbWl0eVNlbnNvci5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvQXBwUlRDUHJveGltaXR5U2Vuc29yLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBw
c3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5BcHBSVENVdGls
czsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuaGFy
ZHdhcmUuU2Vuc29yOwotaW1wb3J0IGFuZHJvaWQuaGFyZHdhcmUuU2Vuc29yRXZlbnQ7Ci1pbXBv
cnQgYW5kcm9pZC5oYXJkd2FyZS5TZW5zb3JFdmVudExpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQu
aGFyZHdhcmUuU2Vuc29yTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0
IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBvcmcud2VicnRjLlRocmVhZFV0aWxzOwotCi0v
KioKLSAqIEFwcFJUQ1Byb3hpbWl0eVNlbnNvciBtYW5hZ2VzIGZ1bmN0aW9ucyByZWxhdGVkIHRv
IHRoZSBwcm94aW1pdHkgc2Vuc29yIGluCi0gKiB0aGUgQXBwUlRDIGRlbW8uCi0gKiBPbiBtb3N0
IGRldmljZSwgdGhlIHByb3hpbWl0eSBzZW5zb3IgaXMgaW1wbGVtZW50ZWQgYXMgYSBib29sZWFu
LXNlbnNvci4KLSAqIEl0IHJldHVybnMganVzdCB0d28gdmFsdWVzICJORUFSIiBvciAiRkFSIi4g
VGhyZXNob2xkaW5nIGlzIGRvbmUgb24gdGhlIExVWAotICogdmFsdWUgaS5lLiB0aGUgTFVYIHZh
bHVlIG9mIHRoZSBsaWdodCBzZW5zb3IgaXMgY29tcGFyZWQgd2l0aCBhIHRocmVzaG9sZC4KLSAq
IEEgTFVYLXZhbHVlIG1vcmUgdGhhbiB0aGUgdGhyZXNob2xkIG1lYW5zIHRoZSBwcm94aW1pdHkg
c2Vuc29yIHJldHVybnMgIkZBUiIuCi0gKiBBbnl0aGluZyBsZXNzIHRoYW4gdGhlIHRocmVzaG9s
ZCB2YWx1ZSBhbmQgdGhlIHNlbnNvciAgcmV0dXJucyAiTkVBUiIuCi0gKi8KLXB1YmxpYyBjbGFz
cyBBcHBSVENQcm94aW1pdHlTZW5zb3IgaW1wbGVtZW50cyBTZW5zb3JFdmVudExpc3RlbmVyIHsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJBcHBSVENQcm94aW1pdHlTZW5z
b3IiOwotCi0gIC8vIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIGNyZWF0ZWQsIHN0YXJ0ZWQgYW5kIHN0
b3BwZWQgb24gb25lIHRocmVhZAotICAvLyAoZS5nLiB0aGUgbWFpbiB0aHJlYWQpLiBXZSB1c2Ug
fG5vblRocmVhZFNhZmV8IHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMKLSAgLy8gdGhlIGNhc2UuIE9u
bHkgYWN0aXZlIHdoZW4gfERFQlVHfCBpcyBzZXQgdG8gdHJ1ZS4KLSAgcHJpdmF0ZSBmaW5hbCBU
aHJlYWRVdGlscy5UaHJlYWRDaGVja2VyIHRocmVhZENoZWNrZXIgPSBuZXcgVGhyZWFkVXRpbHMu
VGhyZWFkQ2hlY2tlcigpOwotCi0gIHByaXZhdGUgZmluYWwgUnVubmFibGUgb25TZW5zb3JTdGF0
ZUxpc3RlbmVyOwotICBwcml2YXRlIGZpbmFsIFNlbnNvck1hbmFnZXIgc2Vuc29yTWFuYWdlcjsK
LSAgcHJpdmF0ZSBTZW5zb3IgcHJveGltaXR5U2Vuc29yID0gbnVsbDsKLSAgcHJpdmF0ZSBib29s
ZWFuIGxhc3RTdGF0ZVJlcG9ydElzTmVhciA9IGZhbHNlOwotCi0gIC8qKiBDb25zdHJ1Y3Rpb24g
Ki8KLSAgc3RhdGljIEFwcFJUQ1Byb3hpbWl0eVNlbnNvciBjcmVhdGUoQ29udGV4dCBjb250ZXh0
LCBSdW5uYWJsZSBzZW5zb3JTdGF0ZUxpc3RlbmVyKSB7Ci0gICAgcmV0dXJuIG5ldyBBcHBSVENQ
cm94aW1pdHlTZW5zb3IoY29udGV4dCwgc2Vuc29yU3RhdGVMaXN0ZW5lcik7Ci0gIH0KLQotICBw
cml2YXRlIEFwcFJUQ1Byb3hpbWl0eVNlbnNvcihDb250ZXh0IGNvbnRleHQsIFJ1bm5hYmxlIHNl
bnNvclN0YXRlTGlzdGVuZXIpIHsKLSAgICBMb2cuZChUQUcsICJBcHBSVENQcm94aW1pdHlTZW5z
b3IiICsgQXBwUlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICBvblNlbnNvclN0YXRlTGlz
dGVuZXIgPSBzZW5zb3JTdGF0ZUxpc3RlbmVyOwotICAgIHNlbnNvck1hbmFnZXIgPSAoKFNlbnNv
ck1hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LlNFTlNPUl9TRVJWSUNF
KSk7Ci0gIH0KLQotICAvKioKLSAgICogQWN0aXZhdGUgdGhlIHByb3hpbWl0eSBzZW5zb3IuIEFs
c28gZG8gaW5pdGlhbGl6YXRpb24gaWYgY2FsbGVkIGZvciB0aGUKLSAgICogZmlyc3QgdGltZS4K
LSAgICovCi0gIHB1YmxpYyBib29sZWFuIHN0YXJ0KCkgewotICAgIHRocmVhZENoZWNrZXIuY2hl
Y2tJc09uVmFsaWRUaHJlYWQoKTsKLSAgICBMb2cuZChUQUcsICJzdGFydCIgKyBBcHBSVENVdGls
cy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIGlmICghaW5pdERlZmF1bHRTZW5zb3IoKSkgewotICAg
ICAgLy8gUHJveGltaXR5IHNlbnNvciBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgZGV2aWNlLgot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzZW5zb3JNYW5hZ2VyLnJlZ2lzdGVyTGlz
dGVuZXIodGhpcywgcHJveGltaXR5U2Vuc29yLCBTZW5zb3JNYW5hZ2VyLlNFTlNPUl9ERUxBWV9O
T1JNQUwpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIERlYWN0aXZhdGUgdGhlIHBy
b3hpbWl0eSBzZW5zb3IuICovCi0gIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgdGhyZWFkQ2hl
Y2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIExvZy5kKFRBRywgInN0b3AiICsgQXBw
UlRDVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICBpZiAocHJveGltaXR5U2Vuc29yID09IG51
bGwpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc2Vuc29yTWFuYWdlci51bnJlZ2lzdGVy
TGlzdGVuZXIodGhpcywgcHJveGltaXR5U2Vuc29yKTsKLSAgfQotCi0gIC8qKiBHZXR0ZXIgZm9y
IGxhc3QgcmVwb3J0ZWQgc3RhdGUuIFNldCB0byB0cnVlIGlmICJuZWFyIiBpcyByZXBvcnRlZC4g
Ki8KLSAgcHVibGljIGJvb2xlYW4gc2Vuc29yUmVwb3J0c05lYXJTdGF0ZSgpIHsKLSAgICB0aHJl
YWRDaGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgcmV0dXJuIGxhc3RTdGF0ZVJl
cG9ydElzTmVhcjsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgZmluYWwgdm9pZCBvbkFj
Y3VyYWN5Q2hhbmdlZChTZW5zb3Igc2Vuc29yLCBpbnQgYWNjdXJhY3kpIHsKLSAgICB0aHJlYWRD
aGVja2VyLmNoZWNrSXNPblZhbGlkVGhyZWFkKCk7Ci0gICAgQXBwUlRDVXRpbHMuYXNzZXJ0SXNU
cnVlKHNlbnNvci5nZXRUeXBlKCkgPT0gU2Vuc29yLlRZUEVfUFJPWElNSVRZKTsKLSAgICBpZiAo
YWNjdXJhY3kgPT0gU2Vuc29yTWFuYWdlci5TRU5TT1JfU1RBVFVTX1VOUkVMSUFCTEUpIHsKLSAg
ICAgIExvZy5lKFRBRywgIlRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhpcyBzZW5zb3IgY2Fubm90
IGJlIHRydXN0ZWQiKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGZpbmFs
IHZvaWQgb25TZW5zb3JDaGFuZ2VkKFNlbnNvckV2ZW50IGV2ZW50KSB7Ci0gICAgdGhyZWFkQ2hl
Y2tlci5jaGVja0lzT25WYWxpZFRocmVhZCgpOwotICAgIEFwcFJUQ1V0aWxzLmFzc2VydElzVHJ1
ZShldmVudC5zZW5zb3IuZ2V0VHlwZSgpID09IFNlbnNvci5UWVBFX1BST1hJTUlUWSk7Ci0gICAg
Ly8gQXMgYSBiZXN0IHByYWN0aWNlOyBkbyBhcyBsaXR0bGUgYXMgcG9zc2libGUgd2l0aGluIHRo
aXMgbWV0aG9kIGFuZAotICAgIC8vIGF2b2lkIGJsb2NraW5nLgotICAgIGZsb2F0IGRpc3RhbmNl
SW5DZW50aW1ldGVycyA9IGV2ZW50LnZhbHVlc1swXTsKLSAgICBpZiAoZGlzdGFuY2VJbkNlbnRp
bWV0ZXJzIDwgcHJveGltaXR5U2Vuc29yLmdldE1heGltdW1SYW5nZSgpKSB7Ci0gICAgICBMb2cu
ZChUQUcsICJQcm94aW1pdHkgc2Vuc29yID0+IE5FQVIgc3RhdGUiKTsKLSAgICAgIGxhc3RTdGF0
ZVJlcG9ydElzTmVhciA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgIlBy
b3hpbWl0eSBzZW5zb3IgPT4gRkFSIHN0YXRlIik7Ci0gICAgICBsYXN0U3RhdGVSZXBvcnRJc05l
YXIgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBSZXBvcnQgYWJvdXQgbmV3IHN0YXRlIHRvIGxp
c3RlbmluZyBjbGllbnQuIENsaWVudCBjYW4gdGhlbiBjYWxsCi0gICAgLy8gc2Vuc29yUmVwb3J0
c05lYXJTdGF0ZSgpIHRvIHF1ZXJ5IHRoZSBjdXJyZW50IHN0YXRlIChORUFSIG9yIEZBUikuCi0g
ICAgaWYgKG9uU2Vuc29yU3RhdGVMaXN0ZW5lciAhPSBudWxsKSB7Ci0gICAgICBvblNlbnNvclN0
YXRlTGlzdGVuZXIucnVuKCk7Ci0gICAgfQotCi0gICAgTG9nLmQoVEFHLCAib25TZW5zb3JDaGFu
Z2VkIiArIEFwcFJUQ1V0aWxzLmdldFRocmVhZEluZm8oKSArICI6ICIKLSAgICAgICAgICAgICsg
ImFjY3VyYWN5PSIgKyBldmVudC5hY2N1cmFjeSArICIsIHRpbWVzdGFtcD0iICsgZXZlbnQudGlt
ZXN0YW1wICsgIiwgZGlzdGFuY2U9IgotICAgICAgICAgICAgKyBldmVudC52YWx1ZXNbMF0pOwot
ICB9Ci0KLSAgLyoqCi0gICAqIEdldCBkZWZhdWx0IHByb3hpbWl0eSBzZW5zb3IgaWYgaXQgZXhp
c3RzLiBUYWJsZXQgZGV2aWNlcyAoZS5nLiBOZXh1cyA3KQotICAgKiBkb2VzIG5vdCBzdXBwb3J0
IHRoaXMgdHlwZSBvZiBzZW5zb3IgYW5kIGZhbHNlIHdpbGwgYmUgcmV0dXJuZWQgaW4gc3VjaAot
ICAgKiBjYXNlcy4KLSAgICovCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0RGVmYXVsdFNlbnNvcigp
IHsKLSAgICBpZiAocHJveGltaXR5U2Vuc29yICE9IG51bGwpIHsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBwcm94aW1pdHlTZW5zb3IgPSBzZW5zb3JNYW5hZ2VyLmdldERlZmF1bHRT
ZW5zb3IoU2Vuc29yLlRZUEVfUFJPWElNSVRZKTsKLSAgICBpZiAocHJveGltaXR5U2Vuc29yID09
IG51bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbG9nUHJveGltaXR5U2Vu
c29ySW5mbygpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLyoqIEhlbHBlciBtZXRob2Qg
Zm9yIGxvZ2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb3hpbWl0eSBzZW5zb3IuICovCi0g
IHByaXZhdGUgdm9pZCBsb2dQcm94aW1pdHlTZW5zb3JJbmZvKCkgewotICAgIGlmIChwcm94aW1p
dHlTZW5zb3IgPT0gbnVsbCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTdHJpbmdCdWls
ZGVyIGluZm8gPSBuZXcgU3RyaW5nQnVpbGRlcigiUHJveGltaXR5IHNlbnNvcjogIik7Ci0gICAg
aW5mby5hcHBlbmQoIm5hbWU9IikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXROYW1lKCkpOwot
ICAgIGluZm8uYXBwZW5kKCIsIHZlbmRvcjogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRW
ZW5kb3IoKSk7Ci0gICAgaW5mby5hcHBlbmQoIiwgcG93ZXI6ICIpLmFwcGVuZChwcm94aW1pdHlT
ZW5zb3IuZ2V0UG93ZXIoKSk7Ci0gICAgaW5mby5hcHBlbmQoIiwgcmVzb2x1dGlvbjogIikuYXBw
ZW5kKHByb3hpbWl0eVNlbnNvci5nZXRSZXNvbHV0aW9uKCkpOwotICAgIGluZm8uYXBwZW5kKCIs
IG1heCByYW5nZTogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRNYXhpbXVtUmFuZ2UoKSk7
Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkdJ
TkdFUkJSRUFEKSB7Ci0gICAgICAvLyBBZGRlZCBpbiBBUEkgbGV2ZWwgOS4KLSAgICAgIGluZm8u
YXBwZW5kKCIsIG1pbiBkZWxheTogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5nZXRNaW5EZWxh
eSgpKTsKLSAgICB9Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJT
SU9OX0NPREVTLktJVEtBVF9XQVRDSCkgewotICAgICAgLy8gQWRkZWQgaW4gQVBJIGxldmVsIDIw
LgotICAgICAgaW5mby5hcHBlbmQoIiwgdHlwZTogIikuYXBwZW5kKHByb3hpbWl0eVNlbnNvci5n
ZXRTdHJpbmdUeXBlKCkpOwotICAgIH0KLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49
IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9MTElQT1ApIHsKLSAgICAgIC8vIEFkZGVkIGluIEFQSSBs
ZXZlbCAyMS4KLSAgICAgIGluZm8uYXBwZW5kKCIsIG1heCBkZWxheTogIikuYXBwZW5kKHByb3hp
bWl0eVNlbnNvci5nZXRNYXhEZWxheSgpKTsKLSAgICAgIGluZm8uYXBwZW5kKCIsIHJlcG9ydGlu
ZyBtb2RlOiAiKS5hcHBlbmQocHJveGltaXR5U2Vuc29yLmdldFJlcG9ydGluZ01vZGUoKSk7Ci0g
ICAgICBpbmZvLmFwcGVuZCgiLCBpc1dha2VVcFNlbnNvcjogIikuYXBwZW5kKHByb3hpbWl0eVNl
bnNvci5pc1dha2VVcFNlbnNvcigpKTsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCBpbmZvLnRvU3Ry
aW5nKCkpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FsbEFj
dGl2aXR5LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Nh
bGxBY3Rpdml0eS5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3Bv
dC9hcHBydGMvQ2FsbEFjdGl2aXR5LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw4NzEgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWlt
cG9ydCBhbmRyb2lkLmFwcC5BY3Rpdml0eTsKLWltcG9ydCBhbmRyb2lkLmFwcC5BbGVydERpYWxv
ZzsKLWltcG9ydCBhbmRyb2lkLmFwcC5GcmFnbWVudFRyYW5zYWN0aW9uOwotaW1wb3J0IGFuZHJv
aWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZh
Y2U7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkludGVudDsKLWltcG9ydCBhbmRyb2lkLmNvbnRl
bnQucG0uUGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5wcm9qZWN0aW9uLk1l
ZGlhUHJvamVjdGlvbjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLnByb2plY3Rpb24uTWVkaWFQcm9q
ZWN0aW9uTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm5ldC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5vcy5IYW5kbGVyOwotaW1wb3J0IGFuZHJvaWQudXRp
bC5EaXNwbGF5TWV0cmljczsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotaW1wb3J0IGFuZHJv
aWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5XaW5kb3c7Ci1pbXBvcnQgYW5kcm9p
ZC52aWV3LldpbmRvd01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LldpbmRvd01hbmFnZXIu
TGF5b3V0UGFyYW1zOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlRvYXN0OwotaW1wb3J0IGphdmEu
aW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb247Ci1pbXBv
cnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBv
cmcuYXBwc3BvdC5hcHBydGMuQXBwUlRDQ2xpZW50LlJvb21Db25uZWN0aW9uUGFyYW1ldGVyczsK
LWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuQXBwUlRDQ2xpZW50LlNpZ25hbGluZ1BhcmFtZXRl
cnM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25uZWN0aW9uQ2xpZW50LlBlZXJD
b25uZWN0aW9uUGFyYW1ldGVyczsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYTFFbnVtZXJhdG9y
OwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhMkVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0
Yy5DYW1lcmFFbnVtZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuRWdsQmFzZTsKLWltcG9ydCBv
cmcud2VicnRjLkZpbGVWaWRlb0NhcHR1cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlk
YXRlOwotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJD
b25uZWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcud2VicnRjLlJlbmRlcmVyQ29tbW9uLlNjYWxp
bmdUeXBlOwotaW1wb3J0IG9yZy53ZWJydGMuU2NyZWVuQ2FwdHVyZXJBbmRyb2lkOwotaW1wb3J0
IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuU3RhdHNS
ZXBvcnQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TdXJmYWNlVmlld1JlbmRlcmVyOwotaW1wb3J0IG9y
Zy53ZWJydGMuVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvRmlsZVJlbmRl
cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlcjsKLQotLyoqCi0gKiBBY3Rpdml0
eSBmb3IgcGVlciBjb25uZWN0aW9uIGNhbGwgc2V0dXAsIGNhbGwgd2FpdGluZwotICogYW5kIGNh
bGwgdmlldy4KLSAqLwotcHVibGljIGNsYXNzIENhbGxBY3Rpdml0eSBleHRlbmRzIEFjdGl2aXR5
IGltcGxlbWVudHMgQXBwUlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBlZXJDb25uZWN0aW9uQ2xp
ZW50LlBlZXJDb25uZWN0aW9uRXZlbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ2FsbEZyYWdtZW50Lk9uQ2FsbEV2ZW50cyB7Ci0gIHB1
YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JPT01JRCA9ICJvcmcuYXBwc3BvdC5hcHBy
dGMuUk9PTUlEIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfTE9PUEJBQ0sg
PSAib3JnLmFwcHNwb3QuYXBwcnRjLkxPT1BCQUNLIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBT
dHJpbmcgRVhUUkFfVklERU9fQ0FMTCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fQ0FMTCI7
Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NDUkVFTkNBUFRVUkUgPSAib3Jn
LmFwcHNwb3QuYXBwcnRjLlNDUkVFTkNBUFRVUkUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0
cmluZyBFWFRSQV9DQU1FUkEyID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5DQU1FUkEyIjsKLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfVklERU9fV0lEVEggPSAib3JnLmFwcHNwb3Qu
YXBwcnRjLlZJREVPX1dJRFRIIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFf
VklERU9fSEVJR0hUID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5WSURFT19IRUlHSFQiOwotICBwdWJs
aWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT19GUFMgPSAib3JnLmFwcHNwb3QuYXBw
cnRjLlZJREVPX0ZQUyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1ZJREVP
X0NBUFRVUkVRVUFMSVRZU0xJREVSX0VOQUJMRUQgPQotICAgICAgIm9yZy5hcHBzb3B0LmFwcHJ0
Yy5WSURFT19DQVBUVVJFUVVBTElUWVNMSURFUiI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3Ry
aW5nIEVYVFJBX1ZJREVPX0JJVFJBVEUgPSAib3JnLmFwcHNwb3QuYXBwcnRjLlZJREVPX0JJVFJB
VEUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURFT0NPREVDID0gIm9y
Zy5hcHBzcG90LmFwcHJ0Yy5WSURFT0NPREVDIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJp
bmcgRVhUUkFfSFdDT0RFQ19FTkFCTEVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5IV0NPREVDIjsK
LSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQ0FQVFVSRVRPVEVYVFVSRV9FTkFC
TEVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5DQVBUVVJFVE9URVhUVVJFIjsKLSAgcHVibGljIHN0
YXRpYyBmaW5hbCBTdHJpbmcgRVhUUkFfQVVESU9fQklUUkFURSA9ICJvcmcuYXBwc3BvdC5hcHBy
dGMuQVVESU9fQklUUkFURSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0FV
RElPQ09ERUMgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkFVRElPQ09ERUMiOwotICBwdWJsaWMgc3Rh
dGljIGZpbmFsIFN0cmluZyBFWFRSQV9OT0FVRElPUFJPQ0VTU0lOR19FTkFCTEVEID0KLSAgICAg
ICJvcmcuYXBwc3BvdC5hcHBydGMuTk9BVURJT1BST0NFU1NJTkciOwotICBwdWJsaWMgc3RhdGlj
IGZpbmFsIFN0cmluZyBFWFRSQV9BRUNEVU1QX0VOQUJMRUQgPSAib3JnLmFwcHNwb3QuYXBwcnRj
LkFFQ0RVTVAiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9PUEVOU0xFU19F
TkFCTEVEID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5PUEVOU0xFUyI7Ci0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgU3RyaW5nIEVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUVDID0gIm9yZy5hcHBzcG90LmFw
cHJ0Yy5ESVNBQkxFX0JVSUxUX0lOX0FFQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5n
IEVYVFJBX0RJU0FCTEVfQlVJTFRfSU5fQUdDID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5ESVNBQkxF
X0JVSUxUX0lOX0FHQyI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX0RJU0FC
TEVfQlVJTFRfSU5fTlMgPSAib3JnLmFwcHNwb3QuYXBwcnRjLkRJU0FCTEVfQlVJTFRfSU5fTlMi
OwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9FTkFCTEVfTEVWRUxfQ09OVFJP
TCA9ICJvcmcuYXBwc3BvdC5hcHBydGMuRU5BQkxFX0xFVkVMX0NPTlRST0wiOwotICBwdWJsaWMg
c3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9ESVNQTEFZX0hVRCA9ICJvcmcuYXBwc3BvdC5hcHBy
dGMuRElTUExBWV9IVUQiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9UUkFD
SU5HID0gIm9yZy5hcHBzcG90LmFwcHJ0Yy5UUkFDSU5HIjsKLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBTdHJpbmcgRVhUUkFfQ01ETElORSA9ICJvcmcuYXBwc3BvdC5hcHBydGMuQ01ETElORSI7Ci0g
IHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1JVTlRJTUUgPSAib3JnLmFwcHNwb3Qu
YXBwcnRjLlJVTlRJTUUiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9WSURF
T19GSUxFX0FTX0NBTUVSQSA9ICJvcmcuYXBwc3BvdC5hcHBydGMuVklERU9fRklMRV9BU19DQU1F
UkEiOwotICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFWFRSQV9TQVZFX1JFTU9URV9WSURF
T19UT19GSUxFID0KLSAgICAgICJvcmcuYXBwc3BvdC5hcHBydGMuU0FWRV9SRU1PVEVfVklERU9f
VE9fRklMRSI7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1NBVkVfUkVNT1RF
X1ZJREVPX1RPX0ZJTEVfV0lEVEggPQotICAgICAgIm9yZy5hcHBzcG90LmFwcHJ0Yy5TQVZFX1JF
TU9URV9WSURFT19UT19GSUxFX1dJRFRIIjsKLSAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcg
RVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQgPQotICAgICAgIm9yZy5hcHBz
cG90LmFwcHJ0Yy5TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hFSUdIVCI7Ci0gIHB1YmxpYyBz
dGF0aWMgZmluYWwgU3RyaW5nIEVYVFJBX1VTRV9WQUxVRVNfRlJPTV9JTlRFTlQgPQotICAgICAg
Im9yZy5hcHBzcG90LmFwcHJ0Yy5VU0VfVkFMVUVTX0ZST01fSU5URU5UIjsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJDYWxsUlRDQ2xpZW50IjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IENBUFRVUkVfUEVSTUlTU0lPTl9SRVFVRVNUX0NPREUgPSAxOwotCi0gIC8v
IExpc3Qgb2YgbWFuZGF0b3J5IGFwcGxpY2F0aW9uIHBlcm1pc3Npb25zLgotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmdbXSBNQU5EQVRPUllfUEVSTUlTU0lPTlMgPSB7ImFuZHJvaWQucGVy
bWlzc2lvbi5NT0RJRllfQVVESU9fU0VUVElOR1MiLAotICAgICAgImFuZHJvaWQucGVybWlzc2lv
bi5SRUNPUkRfQVVESU8iLCAiYW5kcm9pZC5wZXJtaXNzaW9uLklOVEVSTkVUIn07Ci0KLSAgLy8g
UGVlciBjb25uZWN0aW9uIHN0YXRpc3RpY3MgY2FsbGJhY2sgcGVyaW9kIGluIG1zLgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgU1RBVF9DQUxMQkFDS19QRVJJT0QgPSAxMDAwOwotICAvLyBM
b2NhbCBwcmV2aWV3IHNjcmVlbiBwb3NpdGlvbiBiZWZvcmUgY2FsbCBpcyBjb25uZWN0ZWQuCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9YX0NPTk5FQ1RJTkcgPSAwOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfWV9DT05ORUNUSU5HID0gMDsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IExPQ0FMX1dJRFRIX0NPTk5FQ1RJTkcgPSAxMDA7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBMT0NBTF9IRUlHSFRfQ09OTkVDVElORyA9IDEwMDsKLSAgLy8gTG9j
YWwgcHJldmlldyBzY3JlZW4gcG9zaXRpb24gYWZ0ZXIgY2FsbCBpcyBjb25uZWN0ZWQuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NBTF9YX0NPTk5FQ1RFRCA9IDcyOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgTE9DQUxfWV9DT05ORUNURUQgPSA3MjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IExPQ0FMX1dJRFRIX0NPTk5FQ1RFRCA9IDI1OwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgTE9DQUxfSEVJR0hUX0NPTk5FQ1RFRCA9IDI1OwotICAvLyBSZW1vdGUgdmlk
ZW8gc2NyZWVuIHBvc2l0aW9uCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRU1PVEVfWCA9
IDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBSRU1PVEVfWSA9IDA7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBSRU1PVEVfV0lEVEggPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBSRU1PVEVfSEVJR0hUID0gMTAwOwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uQ2xp
ZW50IHBlZXJDb25uZWN0aW9uQ2xpZW50ID0gbnVsbDsKLSAgcHJpdmF0ZSBBcHBSVENDbGllbnQg
YXBwUnRjQ2xpZW50OwotICBwcml2YXRlIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFy
YW1ldGVyczsKLSAgcHJpdmF0ZSBBcHBSVENBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyID0gbnVs
bDsKLSAgcHJpdmF0ZSBFZ2xCYXNlIHJvb3RFZ2xCYXNlOwotICBwcml2YXRlIFN1cmZhY2VWaWV3
UmVuZGVyZXIgbG9jYWxSZW5kZXI7Ci0gIHByaXZhdGUgU3VyZmFjZVZpZXdSZW5kZXJlciByZW1v
dGVSZW5kZXJTY3JlZW47Ci0gIHByaXZhdGUgVmlkZW9GaWxlUmVuZGVyZXIgdmlkZW9GaWxlUmVu
ZGVyZXI7Ci0gIHByaXZhdGUgZmluYWwgTGlzdDxWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4gcmVt
b3RlUmVuZGVyZXJzID0KLSAgICAgIG5ldyBBcnJheUxpc3Q8VmlkZW9SZW5kZXJlci5DYWxsYmFj
a3M+KCk7Ci0gIHByaXZhdGUgUGVyY2VudEZyYW1lTGF5b3V0IGxvY2FsUmVuZGVyTGF5b3V0Owot
ICBwcml2YXRlIFBlcmNlbnRGcmFtZUxheW91dCByZW1vdGVSZW5kZXJMYXlvdXQ7Ci0gIHByaXZh
dGUgU2NhbGluZ1R5cGUgc2NhbGluZ1R5cGU7Ci0gIHByaXZhdGUgVG9hc3QgbG9nVG9hc3Q7Ci0g
IHByaXZhdGUgYm9vbGVhbiBjb21tYW5kTGluZVJ1bjsKLSAgcHJpdmF0ZSBpbnQgcnVuVGltZU1z
OwotICBwcml2YXRlIGJvb2xlYW4gYWN0aXZpdHlSdW5uaW5nOwotICBwcml2YXRlIFJvb21Db25u
ZWN0aW9uUGFyYW1ldGVycyByb29tQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gIHByaXZhdGUgUGVl
ckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgcHJpdmF0
ZSBib29sZWFuIGljZUNvbm5lY3RlZDsKLSAgcHJpdmF0ZSBib29sZWFuIGlzRXJyb3I7Ci0gIHBy
aXZhdGUgYm9vbGVhbiBjYWxsQ29udHJvbEZyYWdtZW50VmlzaWJsZSA9IHRydWU7Ci0gIHByaXZh
dGUgbG9uZyBjYWxsU3RhcnRlZFRpbWVNcyA9IDA7Ci0gIHByaXZhdGUgYm9vbGVhbiBtaWNFbmFi
bGVkID0gdHJ1ZTsKLSAgcHJpdmF0ZSBib29sZWFuIHNjcmVlbmNhcHR1cmVFbmFibGVkID0gZmFs
c2U7Ci0gIHByaXZhdGUgc3RhdGljIEludGVudCBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVz
dWx0RGF0YTsKLSAgcHJpdmF0ZSBzdGF0aWMgaW50IG1lZGlhUHJvamVjdGlvblBlcm1pc3Npb25S
ZXN1bHRDb2RlOwotCi0gIC8vIENvbnRyb2xzCi0gIHByaXZhdGUgQ2FsbEZyYWdtZW50IGNhbGxG
cmFnbWVudDsKLSAgcHJpdmF0ZSBIdWRGcmFnbWVudCBodWRGcmFnbWVudDsKLSAgcHJpdmF0ZSBD
cHVNb25pdG9yIGNwdU1vbml0b3I7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ3Jl
YXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0ZShzYXZl
ZEluc3RhbmNlU3RhdGUpOwotICAgIFRocmVhZC5zZXREZWZhdWx0VW5jYXVnaHRFeGNlcHRpb25I
YW5kbGVyKG5ldyBVbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyKHRoaXMpKTsKLQotICAgIC8vIFNl
dCB3aW5kb3cgc3R5bGVzIGZvciBmdWxsc2NyZWVuLXdpbmRvdyBzaXplLiBOZWVkcyB0byBiZSBk
b25lIGJlZm9yZQotICAgIC8vIGFkZGluZyBjb250ZW50LgotICAgIHJlcXVlc3RXaW5kb3dGZWF0
dXJlKFdpbmRvdy5GRUFUVVJFX05PX1RJVExFKTsKLSAgICBnZXRXaW5kb3coKS5hZGRGbGFncyhM
YXlvdXRQYXJhbXMuRkxBR19GVUxMU0NSRUVOIHwgTGF5b3V0UGFyYW1zLkZMQUdfS0VFUF9TQ1JF
RU5fT04KLSAgICAgICAgfCBMYXlvdXRQYXJhbXMuRkxBR19ESVNNSVNTX0tFWUdVQVJEIHwgTGF5
b3V0UGFyYW1zLkZMQUdfU0hPV19XSEVOX0xPQ0tFRAotICAgICAgICB8IExheW91dFBhcmFtcy5G
TEFHX1RVUk5fU0NSRUVOX09OKTsKLSAgICBnZXRXaW5kb3coKS5nZXREZWNvclZpZXcoKS5zZXRT
eXN0ZW1VaVZpc2liaWxpdHkoVmlldy5TWVNURU1fVUlfRkxBR19ISURFX05BVklHQVRJT04KLSAg
ICAgICAgfCBWaWV3LlNZU1RFTV9VSV9GTEFHX0ZVTExTQ1JFRU4gfCBWaWV3LlNZU1RFTV9VSV9G
TEFHX0lNTUVSU0lWRV9TVElDS1kpOwotICAgIHNldENvbnRlbnRWaWV3KFIubGF5b3V0LmFjdGl2
aXR5X2NhbGwpOwotCi0gICAgaWNlQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAgc2lnbmFsaW5nUGFy
YW1ldGVycyA9IG51bGw7Ci0gICAgc2NhbGluZ1R5cGUgPSBTY2FsaW5nVHlwZS5TQ0FMRV9BU1BF
Q1RfRklMTDsKLQotICAgIC8vIENyZWF0ZSBVSSBjb250cm9scy4KLSAgICBsb2NhbFJlbmRlciA9
IChTdXJmYWNlVmlld1JlbmRlcmVyKSBmaW5kVmlld0J5SWQoUi5pZC5sb2NhbF92aWRlb192aWV3
KTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4gPSAoU3VyZmFjZVZpZXdSZW5kZXJlcikgZmluZFZp
ZXdCeUlkKFIuaWQucmVtb3RlX3ZpZGVvX3ZpZXcpOwotICAgIGxvY2FsUmVuZGVyTGF5b3V0ID0g
KFBlcmNlbnRGcmFtZUxheW91dCkgZmluZFZpZXdCeUlkKFIuaWQubG9jYWxfdmlkZW9fbGF5b3V0
KTsKLSAgICByZW1vdGVSZW5kZXJMYXlvdXQgPSAoUGVyY2VudEZyYW1lTGF5b3V0KSBmaW5kVmll
d0J5SWQoUi5pZC5yZW1vdGVfdmlkZW9fbGF5b3V0KTsKLSAgICBjYWxsRnJhZ21lbnQgPSBuZXcg
Q2FsbEZyYWdtZW50KCk7Ci0gICAgaHVkRnJhZ21lbnQgPSBuZXcgSHVkRnJhZ21lbnQoKTsKLQot
ICAgIC8vIFNob3cvaGlkZSBjYWxsIGNvbnRyb2wgZnJhZ21lbnQgb24gdmlldyBjbGljay4KLSAg
ICBWaWV3Lk9uQ2xpY2tMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5l
cigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZp
ZXcpIHsKLSAgICAgICAgdG9nZ2xlQ2FsbENvbnRyb2xGcmFnbWVudFZpc2liaWxpdHkoKTsKLSAg
ICAgIH0KLSAgICB9OwotCi0gICAgbG9jYWxSZW5kZXIuc2V0T25DbGlja0xpc3RlbmVyKGxpc3Rl
bmVyKTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4uc2V0T25DbGlja0xpc3RlbmVyKGxpc3RlbmVy
KTsKLSAgICByZW1vdGVSZW5kZXJlcnMuYWRkKHJlbW90ZVJlbmRlclNjcmVlbik7Ci0KLSAgICBm
aW5hbCBJbnRlbnQgaW50ZW50ID0gZ2V0SW50ZW50KCk7Ci0KLSAgICAvLyBDcmVhdGUgdmlkZW8g
cmVuZGVyZXJzLgotICAgIHJvb3RFZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoKTsKLSAgICBsb2Nh
bFJlbmRlci5pbml0KHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIG51bGwpOwotICAg
IFN0cmluZyBzYXZlUmVtb3RlVmlkZW9Ub0ZpbGUgPSBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhU
UkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRSk7Ci0KLSAgICAvLyBXaGVuIHNhdmVSZW1vdGVW
aWRlb1RvRmlsZSBpcyBzZXQgd2Ugc2F2ZSB0aGUgdmlkZW8gZnJvbSB0aGUgcmVtb3RlIHRvIGEg
ZmlsZS4KLSAgICBpZiAoc2F2ZVJlbW90ZVZpZGVvVG9GaWxlICE9IG51bGwpIHsKLSAgICAgIGlu
dCB2aWRlb091dFdpZHRoID0gaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1NBVkVfUkVNT1RFX1ZJ
REVPX1RPX0ZJTEVfV0lEVEgsIDApOwotICAgICAgaW50IHZpZGVvT3V0SGVpZ2h0ID0gaW50ZW50
LmdldEludEV4dHJhKEVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfSEVJR0hULCAwKTsK
LSAgICAgIHRyeSB7Ci0gICAgICAgIHZpZGVvRmlsZVJlbmRlcmVyID0gbmV3IFZpZGVvRmlsZVJl
bmRlcmVyKAotICAgICAgICAgICAgc2F2ZVJlbW90ZVZpZGVvVG9GaWxlLCB2aWRlb091dFdpZHRo
LCB2aWRlb091dEhlaWdodCwgcm9vdEVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0gICAg
ICAgIHJlbW90ZVJlbmRlcmVycy5hZGQodmlkZW9GaWxlUmVuZGVyZXIpOwotICAgICAgfSBjYXRj
aCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigK
LSAgICAgICAgICAgICJGYWlsZWQgdG8gb3BlbiB2aWRlbyBmaWxlIGZvciBvdXRwdXQ6ICIgKyBz
YXZlUmVtb3RlVmlkZW9Ub0ZpbGUsIGUpOwotICAgICAgfQotICAgIH0KLSAgICByZW1vdGVSZW5k
ZXJTY3JlZW4uaW5pdChyb290RWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpLCBudWxsKTsKLQot
ICAgIGxvY2FsUmVuZGVyLnNldFpPcmRlck1lZGlhT3ZlcmxheSh0cnVlKTsKLSAgICB1cGRhdGVW
aWRlb1ZpZXcoKTsKLQotICAgIC8vIENoZWNrIGZvciBtYW5kYXRvcnkgcGVybWlzc2lvbnMuCi0g
ICAgZm9yIChTdHJpbmcgcGVybWlzc2lvbiA6IE1BTkRBVE9SWV9QRVJNSVNTSU9OUykgewotICAg
ICAgaWYgKGNoZWNrQ2FsbGluZ09yU2VsZlBlcm1pc3Npb24ocGVybWlzc2lvbikgIT0gUGFja2Fn
ZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEKSB7Ci0gICAgICAgIGxvZ0FuZFRvYXN0KCJQZXJt
aXNzaW9uICIgKyBwZXJtaXNzaW9uICsgIiBpcyBub3QgZ3JhbnRlZCIpOwotICAgICAgICBzZXRS
ZXN1bHQoUkVTVUxUX0NBTkNFTEVEKTsKLSAgICAgICAgZmluaXNoKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBVcmkgcm9vbVVyaSA9IGludGVudC5nZXREYXRhKCk7
Ci0gICAgaWYgKHJvb21VcmkgPT0gbnVsbCkgewotICAgICAgbG9nQW5kVG9hc3QoZ2V0U3RyaW5n
KFIuc3RyaW5nLm1pc3NpbmdfdXJsKSk7Ci0gICAgICBMb2cuZShUQUcsICJEaWRuJ3QgZ2V0IGFu
eSBVUkwgaW4gaW50ZW50ISIpOwotICAgICAgc2V0UmVzdWx0KFJFU1VMVF9DQU5DRUxFRCk7Ci0g
ICAgICBmaW5pc2goKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBHZXQgSW50ZW50
IHBhcmFtZXRlcnMuCi0gICAgU3RyaW5nIHJvb21JZCA9IGludGVudC5nZXRTdHJpbmdFeHRyYShF
WFRSQV9ST09NSUQpOwotICAgIExvZy5kKFRBRywgIlJvb20gSUQ6ICIgKyByb29tSWQpOwotICAg
IGlmIChyb29tSWQgPT0gbnVsbCB8fCByb29tSWQubGVuZ3RoKCkgPT0gMCkgewotICAgICAgbG9n
QW5kVG9hc3QoZ2V0U3RyaW5nKFIuc3RyaW5nLm1pc3NpbmdfdXJsKSk7Ci0gICAgICBMb2cuZShU
QUcsICJJbmNvcnJlY3Qgcm9vbSBJRCBpbiBpbnRlbnQhIik7Ci0gICAgICBzZXRSZXN1bHQoUkVT
VUxUX0NBTkNFTEVEKTsKLSAgICAgIGZpbmlzaCgpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGJvb2xlYW4gbG9vcGJhY2sgPSBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0xPT1BC
QUNLLCBmYWxzZSk7Ci0gICAgYm9vbGVhbiB0cmFjaW5nID0gaW50ZW50LmdldEJvb2xlYW5FeHRy
YShFWFRSQV9UUkFDSU5HLCBmYWxzZSk7Ci0KLSAgICBpbnQgdmlkZW9XaWR0aCA9IGludGVudC5n
ZXRJbnRFeHRyYShFWFRSQV9WSURFT19XSURUSCwgMCk7Ci0gICAgaW50IHZpZGVvSGVpZ2h0ID0g
aW50ZW50LmdldEludEV4dHJhKEVYVFJBX1ZJREVPX0hFSUdIVCwgMCk7Ci0KLSAgICBzY3JlZW5j
YXB0dXJlRW5hYmxlZCA9IGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfU0NSRUVOQ0FQVFVS
RSwgZmFsc2UpOwotICAgIC8vIElmIGNhcHR1cmluZyBmb3JtYXQgaXMgbm90IHNwZWNpZmllZCBm
b3Igc2NyZWVuY2FwdHVyZSwgdXNlIHNjcmVlbiByZXNvbHV0aW9uLgotICAgIGlmIChzY3JlZW5j
YXB0dXJlRW5hYmxlZCAmJiB2aWRlb1dpZHRoID09IDAgJiYgdmlkZW9IZWlnaHQgPT0gMCkgewot
ICAgICAgRGlzcGxheU1ldHJpY3MgZGlzcGxheU1ldHJpY3MgPSBuZXcgRGlzcGxheU1ldHJpY3Mo
KTsKLSAgICAgIFdpbmRvd01hbmFnZXIgd2luZG93TWFuYWdlciA9Ci0gICAgICAgICAgKFdpbmRv
d01hbmFnZXIpIGdldEFwcGxpY2F0aW9uKCkuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LldJTkRP
V19TRVJWSUNFKTsKLSAgICAgIHdpbmRvd01hbmFnZXIuZ2V0RGVmYXVsdERpc3BsYXkoKS5nZXRS
ZWFsTWV0cmljcyhkaXNwbGF5TWV0cmljcyk7Ci0gICAgICB2aWRlb1dpZHRoID0gZGlzcGxheU1l
dHJpY3Mud2lkdGhQaXhlbHM7Ci0gICAgICB2aWRlb0hlaWdodCA9IGRpc3BsYXlNZXRyaWNzLmhl
aWdodFBpeGVsczsKLSAgICB9Ci0KLSAgICBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPQotICAg
ICAgICBuZXcgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzKGludGVudC5nZXRCb29sZWFuRXh0cmEo
RVhUUkFfVklERU9fQ0FMTCwgdHJ1ZSksIGxvb3BiYWNrLAotICAgICAgICAgICAgdHJhY2luZywg
dmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIGludGVudC5nZXRJbnRFeHRyYShFWFRSQV9WSURFT19G
UFMsIDApLAotICAgICAgICAgICAgaW50ZW50LmdldEludEV4dHJhKEVYVFJBX1ZJREVPX0JJVFJB
VEUsIDApLCBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfVklERU9DT0RFQyksCi0gICAgICAg
ICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0hXQ09ERUNfRU5BQkxFRCwgdHJ1ZSks
Ci0gICAgICAgICAgICBpbnRlbnQuZ2V0SW50RXh0cmEoRVhUUkFfQVVESU9fQklUUkFURSwgMCks
IGludGVudC5nZXRTdHJpbmdFeHRyYShFWFRSQV9BVURJT0NPREVDKSwKLSAgICAgICAgICAgIGlu
dGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFfTk9BVURJT1BST0NFU1NJTkdfRU5BQkxFRCwgZmFs
c2UpLAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9BRUNEVU1QX0VO
QUJMRUQsIGZhbHNlKSwKLSAgICAgICAgICAgIGludGVudC5nZXRCb29sZWFuRXh0cmEoRVhUUkFf
T1BFTlNMRVNfRU5BQkxFRCwgZmFsc2UpLAotICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5F
eHRyYShFWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FFQywgZmFsc2UpLAotICAgICAgICAgICAgaW50
ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FHQywgZmFsc2UpLAot
ICAgICAgICAgICAgaW50ZW50LmdldEJvb2xlYW5FeHRyYShFWFRSQV9ESVNBQkxFX0JVSUxUX0lO
X05TLCBmYWxzZSksCi0gICAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKEVYVFJBX0VO
QUJMRV9MRVZFTF9DT05UUk9MLCBmYWxzZSkpOwotICAgIGNvbW1hbmRMaW5lUnVuID0gaW50ZW50
LmdldEJvb2xlYW5FeHRyYShFWFRSQV9DTURMSU5FLCBmYWxzZSk7Ci0gICAgcnVuVGltZU1zID0g
aW50ZW50LmdldEludEV4dHJhKEVYVFJBX1JVTlRJTUUsIDApOwotCi0gICAgTG9nLmQoVEFHLCAi
VklERU9fRklMRTogJyIgKyBpbnRlbnQuZ2V0U3RyaW5nRXh0cmEoRVhUUkFfVklERU9fRklMRV9B
U19DQU1FUkEpICsgIiciKTsKLQotICAgIC8vIENyZWF0ZSBjb25uZWN0aW9uIGNsaWVudC4gVXNl
IERpcmVjdFJUQ0NsaWVudCBpZiByb29tIG5hbWUgaXMgYW4gSVAgb3RoZXJ3aXNlIHVzZSB0aGUK
LSAgICAvLyBzdGFuZGFyZCBXZWJTb2NrZXRSVENDbGllbnQuCi0gICAgaWYgKGxvb3BiYWNrIHx8
ICFEaXJlY3RSVENDbGllbnQuSVBfUEFUVEVSTi5tYXRjaGVyKHJvb21JZCkubWF0Y2hlcygpKSB7
Ci0gICAgICBhcHBSdGNDbGllbnQgPSBuZXcgV2ViU29ja2V0UlRDQ2xpZW50KHRoaXMpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBMb2cuaShUQUcsICJVc2luZyBEaXJlY3RSVENDbGllbnQgYmVjYXVz
ZSByb29tIG5hbWUgbG9va3MgbGlrZSBhbiBJUC4iKTsKLSAgICAgIGFwcFJ0Y0NsaWVudCA9IG5l
dyBEaXJlY3RSVENDbGllbnQodGhpcyk7Ci0gICAgfQotICAgIC8vIENyZWF0ZSBjb25uZWN0aW9u
IHBhcmFtZXRlcnMuCi0gICAgcm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzID0gbmV3IFJvb21Db25u
ZWN0aW9uUGFyYW1ldGVycyhyb29tVXJpLnRvU3RyaW5nKCksIHJvb21JZCwgbG9vcGJhY2spOwot
Ci0gICAgLy8gQ3JlYXRlIENQVSBtb25pdG9yCi0gICAgY3B1TW9uaXRvciA9IG5ldyBDcHVNb25p
dG9yKHRoaXMpOwotICAgIGh1ZEZyYWdtZW50LnNldENwdU1vbml0b3IoY3B1TW9uaXRvcik7Ci0K
LSAgICAvLyBTZW5kIGludGVudCBhcmd1bWVudHMgdG8gZnJhZ21lbnRzLgotICAgIGNhbGxGcmFn
bWVudC5zZXRBcmd1bWVudHMoaW50ZW50LmdldEV4dHJhcygpKTsKLSAgICBodWRGcmFnbWVudC5z
ZXRBcmd1bWVudHMoaW50ZW50LmdldEV4dHJhcygpKTsKLSAgICAvLyBBY3RpdmF0ZSBjYWxsIGFu
ZCBIVUQgZnJhZ21lbnRzIGFuZCBzdGFydCB0aGUgY2FsbC4KLSAgICBGcmFnbWVudFRyYW5zYWN0
aW9uIGZ0ID0gZ2V0RnJhZ21lbnRNYW5hZ2VyKCkuYmVnaW5UcmFuc2FjdGlvbigpOwotICAgIGZ0
LmFkZChSLmlkLmNhbGxfZnJhZ21lbnRfY29udGFpbmVyLCBjYWxsRnJhZ21lbnQpOwotICAgIGZ0
LmFkZChSLmlkLmh1ZF9mcmFnbWVudF9jb250YWluZXIsIGh1ZEZyYWdtZW50KTsKLSAgICBmdC5j
b21taXQoKTsKLQotICAgIC8vIEZvciBjb21tYW5kIGxpbmUgZXhlY3V0aW9uIHJ1biBjb25uZWN0
aW9uIGZvciA8cnVuVGltZU1zPiBhbmQgZXhpdC4KLSAgICBpZiAoY29tbWFuZExpbmVSdW4gJiYg
cnVuVGltZU1zID4gMCkgewotICAgICAgKG5ldyBIYW5kbGVyKCkpLnBvc3REZWxheWVkKG5ldyBS
dW5uYWJsZSgpIHsKLSAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgICBkaXNjb25uZWN0KCk7Ci0gICAgICAgIH0KLSAgICAgIH0sIHJ1blRpbWVN
cyk7Ci0gICAgfQotCi0gICAgcGVlckNvbm5lY3Rpb25DbGllbnQgPSBQZWVyQ29ubmVjdGlvbkNs
aWVudC5nZXRJbnN0YW5jZSgpOwotICAgIGlmIChsb29wYmFjaykgewotICAgICAgUGVlckNvbm5l
Y3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rvcnku
T3B0aW9ucygpOwotICAgICAgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9IDA7Ci0gICAgICBw
ZWVyQ29ubmVjdGlvbkNsaWVudC5zZXRQZWVyQ29ubmVjdGlvbkZhY3RvcnlPcHRpb25zKG9wdGlv
bnMpOwotICAgIH0KLSAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVQZWVyQ29ubmVjdGlv
bkZhY3RvcnkoCi0gICAgICAgIENhbGxBY3Rpdml0eS50aGlzLCBwZWVyQ29ubmVjdGlvblBhcmFt
ZXRlcnMsIENhbGxBY3Rpdml0eS50aGlzKTsKLQotICAgIGlmIChzY3JlZW5jYXB0dXJlRW5hYmxl
ZCkgewotICAgICAgTWVkaWFQcm9qZWN0aW9uTWFuYWdlciBtZWRpYVByb2plY3Rpb25NYW5hZ2Vy
ID0KLSAgICAgICAgICAoTWVkaWFQcm9qZWN0aW9uTWFuYWdlcikgZ2V0QXBwbGljYXRpb24oKS5n
ZXRTeXN0ZW1TZXJ2aWNlKAotICAgICAgICAgICAgICBDb250ZXh0Lk1FRElBX1BST0pFQ1RJT05f
U0VSVklDRSk7Ci0gICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0KAotICAgICAgICAgIG1lZGlh
UHJvamVjdGlvbk1hbmFnZXIuY3JlYXRlU2NyZWVuQ2FwdHVyZUludGVudCgpLCBDQVBUVVJFX1BF
Uk1JU1NJT05fUkVRVUVTVF9DT0RFKTsKLSAgICB9IGVsc2UgewotICAgICAgc3RhcnRDYWxsKCk7
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQWN0aXZpdHlSZXN1
bHQoaW50IHJlcXVlc3RDb2RlLCBpbnQgcmVzdWx0Q29kZSwgSW50ZW50IGRhdGEpIHsKLSAgICBp
ZiAocmVxdWVzdENvZGUgIT0gQ0FQVFVSRV9QRVJNSVNTSU9OX1JFUVVFU1RfQ09ERSkKLSAgICAg
IHJldHVybjsKLSAgICBtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0Q29kZSA9IHJlc3Vs
dENvZGU7Ci0gICAgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGEgPSBkYXRhOwot
ICAgIHN0YXJ0Q2FsbCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHVzZUNhbWVyYTIoKSB7
Ci0gICAgcmV0dXJuIENhbWVyYTJFbnVtZXJhdG9yLmlzU3VwcG9ydGVkKHRoaXMpICYmIGdldElu
dGVudCgpLmdldEJvb2xlYW5FeHRyYShFWFRSQV9DQU1FUkEyLCB0cnVlKTsKLSAgfQotCi0gIHBy
aXZhdGUgYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKCkgewotICAgIHJldHVybiBnZXRJbnRlbnQo
KS5nZXRCb29sZWFuRXh0cmEoRVhUUkFfQ0FQVFVSRVRPVEVYVFVSRV9FTkFCTEVELCBmYWxzZSk7
Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoQ2Ft
ZXJhRW51bWVyYXRvciBlbnVtZXJhdG9yKSB7Ci0gICAgZmluYWwgU3RyaW5nW10gZGV2aWNlTmFt
ZXMgPSBlbnVtZXJhdG9yLmdldERldmljZU5hbWVzKCk7Ci0KLSAgICAvLyBGaXJzdCwgdHJ5IHRv
IGZpbmQgZnJvbnQgZmFjaW5nIGNhbWVyYQotICAgIExvZ2dpbmcuZChUQUcsICJMb29raW5nIGZv
ciBmcm9udCBmYWNpbmcgY2FtZXJhcy4iKTsKLSAgICBmb3IgKFN0cmluZyBkZXZpY2VOYW1lIDog
ZGV2aWNlTmFtZXMpIHsKLSAgICAgIGlmIChlbnVtZXJhdG9yLmlzRnJvbnRGYWNpbmcoZGV2aWNl
TmFtZSkpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIGZyb250IGZhY2luZyBj
YW1lcmEgY2FwdHVyZXIuIik7Ci0gICAgICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciA9
IGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZGV2aWNlTmFtZSwgbnVsbCk7Ci0KLSAgICAgICAg
aWYgKHZpZGVvQ2FwdHVyZXIgIT0gbnVsbCkgewotICAgICAgICAgIHJldHVybiB2aWRlb0NhcHR1
cmVyOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gRnJvbnQgZmFjaW5nIGNh
bWVyYSBub3QgZm91bmQsIHRyeSBzb21ldGhpbmcgZWxzZQotICAgIExvZ2dpbmcuZChUQUcsICJM
b29raW5nIGZvciBvdGhlciBjYW1lcmFzLiIpOwotICAgIGZvciAoU3RyaW5nIGRldmljZU5hbWUg
OiBkZXZpY2VOYW1lcykgewotICAgICAgaWYgKCFlbnVtZXJhdG9yLmlzRnJvbnRGYWNpbmcoZGV2
aWNlTmFtZSkpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIG90aGVyIGNhbWVy
YSBjYXB0dXJlci4iKTsKLSAgICAgICAgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0gZW51
bWVyYXRvci5jcmVhdGVDYXB0dXJlcihkZXZpY2VOYW1lLCBudWxsKTsKLQotICAgICAgICBpZiAo
dmlkZW9DYXB0dXJlciAhPSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuIHZpZGVvQ2FwdHVyZXI7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbDsKLSAgfQotCi0g
IC8vIEFjdGl2aXR5IGludGVyZmFjZXMKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGF1
c2UoKSB7Ci0gICAgc3VwZXIub25QYXVzZSgpOwotICAgIGFjdGl2aXR5UnVubmluZyA9IGZhbHNl
OwotICAgIC8vIERvbid0IHN0b3AgdGhlIHZpZGVvIHdoZW4gdXNpbmcgc2NyZWVuY2FwdHVyZSB0
byBhbGxvdyB1c2VyIHRvIHNob3cgb3RoZXIgYXBwcyB0byB0aGUgcmVtb3RlCi0gICAgLy8gZW5k
LgotICAgIGlmIChwZWVyQ29ubmVjdGlvbkNsaWVudCAhPSBudWxsICYmICFzY3JlZW5jYXB0dXJl
RW5hYmxlZCkgewotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc3RvcFZpZGVvU291cmNlKCk7
Ci0gICAgfQotICAgIGNwdU1vbml0b3IucGF1c2UoKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBvblJlc3VtZSgpIHsKLSAgICBzdXBlci5vblJlc3VtZSgpOwotICAgIGFjdGl2
aXR5UnVubmluZyA9IHRydWU7Ci0gICAgLy8gVmlkZW8gaXMgbm90IHBhdXNlZCBmb3Igc2NyZWVu
Y2FwdHVyZS4gU2VlIG9uUGF1c2UuCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xpZW50ICE9IG51
bGwgJiYgIXNjcmVlbmNhcHR1cmVFbmFibGVkKSB7Ci0gICAgICBwZWVyQ29ubmVjdGlvbkNsaWVu
dC5zdGFydFZpZGVvU291cmNlKCk7Ci0gICAgfQotICAgIGNwdU1vbml0b3IucmVzdW1lKCk7Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25EZXN0cm95KCkgewotICAgIGRp
c2Nvbm5lY3QoKTsKLSAgICBpZiAobG9nVG9hc3QgIT0gbnVsbCkgewotICAgICAgbG9nVG9hc3Qu
Y2FuY2VsKCk7Ci0gICAgfQotICAgIGFjdGl2aXR5UnVubmluZyA9IGZhbHNlOwotICAgIHJvb3RF
Z2xCYXNlLnJlbGVhc2UoKTsKLSAgICBzdXBlci5vbkRlc3Ryb3koKTsKLSAgfQotCi0gIC8vIENh
bGxGcmFnbWVudC5PbkNhbGxFdmVudHMgaW50ZXJmYWNlIGltcGxlbWVudGF0aW9uLgotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgb25DYWxsSGFuZ1VwKCkgewotICAgIGRpc2Nvbm5lY3QoKTsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkNhbWVyYVN3aXRjaCgpIHsKLSAg
ICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCkgewotICAgICAgcGVlckNvbm5lY3Rp
b25DbGllbnQuc3dpdGNoQ2FtZXJhKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIG9uVmlkZW9TY2FsaW5nU3dpdGNoKFNjYWxpbmdUeXBlIHNjYWxpbmdUeXBlKSB7
Ci0gICAgdGhpcy5zY2FsaW5nVHlwZSA9IHNjYWxpbmdUeXBlOwotICAgIHVwZGF0ZVZpZGVvVmll
dygpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZUZvcm1hdENo
YW5nZShpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBmcmFtZXJhdGUpIHsKLSAgICBpZiAocGVl
ckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCkgewotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQu
Y2hhbmdlQ2FwdHVyZUZvcm1hdCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJhdGUpOwotICAgIH0KLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBvblRvZ2dsZU1pYygpIHsKLSAgICBp
ZiAocGVlckNvbm5lY3Rpb25DbGllbnQgIT0gbnVsbCkgewotICAgICAgbWljRW5hYmxlZCA9ICFt
aWNFbmFibGVkOwotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuc2V0QXVkaW9FbmFibGVkKG1p
Y0VuYWJsZWQpOwotICAgIH0KLSAgICByZXR1cm4gbWljRW5hYmxlZDsKLSAgfQotCi0gIC8vIEhl
bHBlciBmdW5jdGlvbnMuCi0gIHByaXZhdGUgdm9pZCB0b2dnbGVDYWxsQ29udHJvbEZyYWdtZW50
VmlzaWJpbGl0eSgpIHsKLSAgICBpZiAoIWljZUNvbm5lY3RlZCB8fCAhY2FsbEZyYWdtZW50Lmlz
QWRkZWQoKSkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBTaG93L2hpZGUgY2FsbCBj
b250cm9sIGZyYWdtZW50Ci0gICAgY2FsbENvbnRyb2xGcmFnbWVudFZpc2libGUgPSAhY2FsbENv
bnRyb2xGcmFnbWVudFZpc2libGU7Ci0gICAgRnJhZ21lbnRUcmFuc2FjdGlvbiBmdCA9IGdldEZy
YWdtZW50TWFuYWdlcigpLmJlZ2luVHJhbnNhY3Rpb24oKTsKLSAgICBpZiAoY2FsbENvbnRyb2xG
cmFnbWVudFZpc2libGUpIHsKLSAgICAgIGZ0LnNob3coY2FsbEZyYWdtZW50KTsKLSAgICAgIGZ0
LnNob3coaHVkRnJhZ21lbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBmdC5oaWRlKGNhbGxGcmFn
bWVudCk7Ci0gICAgICBmdC5oaWRlKGh1ZEZyYWdtZW50KTsKLSAgICB9Ci0gICAgZnQuc2V0VHJh
bnNpdGlvbihGcmFnbWVudFRyYW5zYWN0aW9uLlRSQU5TSVRfRlJBR01FTlRfRkFERSk7Ci0gICAg
ZnQuY29tbWl0KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgdXBkYXRlVmlkZW9WaWV3KCkgewot
ICAgIHJlbW90ZVJlbmRlckxheW91dC5zZXRQb3NpdGlvbihSRU1PVEVfWCwgUkVNT1RFX1ksIFJF
TU9URV9XSURUSCwgUkVNT1RFX0hFSUdIVCk7Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuLnNldFNj
YWxpbmdUeXBlKHNjYWxpbmdUeXBlKTsKLSAgICByZW1vdGVSZW5kZXJTY3JlZW4uc2V0TWlycm9y
KGZhbHNlKTsKLQotICAgIGlmIChpY2VDb25uZWN0ZWQpIHsKLSAgICAgIGxvY2FsUmVuZGVyTGF5
b3V0LnNldFBvc2l0aW9uKAotICAgICAgICAgIExPQ0FMX1hfQ09OTkVDVEVELCBMT0NBTF9ZX0NP
Tk5FQ1RFRCwgTE9DQUxfV0lEVEhfQ09OTkVDVEVELCBMT0NBTF9IRUlHSFRfQ09OTkVDVEVEKTsK
LSAgICAgIGxvY2FsUmVuZGVyLnNldFNjYWxpbmdUeXBlKFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVD
VF9GSVQpOwotICAgIH0gZWxzZSB7Ci0gICAgICBsb2NhbFJlbmRlckxheW91dC5zZXRQb3NpdGlv
bigKLSAgICAgICAgICBMT0NBTF9YX0NPTk5FQ1RJTkcsIExPQ0FMX1lfQ09OTkVDVElORywgTE9D
QUxfV0lEVEhfQ09OTkVDVElORywgTE9DQUxfSEVJR0hUX0NPTk5FQ1RJTkcpOwotICAgICAgbG9j
YWxSZW5kZXIuc2V0U2NhbGluZ1R5cGUoc2NhbGluZ1R5cGUpOwotICAgIH0KLSAgICBsb2NhbFJl
bmRlci5zZXRNaXJyb3IodHJ1ZSk7Ci0KLSAgICBsb2NhbFJlbmRlci5yZXF1ZXN0TGF5b3V0KCk7
Ci0gICAgcmVtb3RlUmVuZGVyU2NyZWVuLnJlcXVlc3RMYXlvdXQoKTsKLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBzdGFydENhbGwoKSB7Ci0gICAgaWYgKGFwcFJ0Y0NsaWVudCA9PSBudWxsKSB7Ci0g
ICAgICBMb2cuZShUQUcsICJBcHBSVEMgY2xpZW50IGlzIG5vdCBhbGxvY2F0ZWQgZm9yIGEgY2Fs
bC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2FsbFN0YXJ0ZWRUaW1lTXMgPSBTeXN0
ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQotICAgIC8vIFN0YXJ0IHJvb20gY29ubmVjdGlvbi4K
LSAgICBsb2dBbmRUb2FzdChnZXRTdHJpbmcoUi5zdHJpbmcuY29ubmVjdGluZ190bywgcm9vbUNv
bm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21VcmwpKTsKLSAgICBhcHBSdGNDbGllbnQuY29ubmVjdFRv
Um9vbShyb29tQ29ubmVjdGlvblBhcmFtZXRlcnMpOwotCi0gICAgLy8gQ3JlYXRlIGFuZCBhdWRp
byBtYW5hZ2VyIHRoYXQgd2lsbCB0YWtlIGNhcmUgb2YgYXVkaW8gcm91dGluZywKLSAgICAvLyBh
dWRpbyBtb2RlcywgYXVkaW8gZGV2aWNlIGVudW1lcmF0aW9uIGV0Yy4KLSAgICBhdWRpb01hbmFn
ZXIgPSBBcHBSVENBdWRpb01hbmFnZXIuY3JlYXRlKHRoaXMsIG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIC8vIFRoaXMgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGVhY2ggdGltZSB0aGUgYXVkaW8gc3Rh
dGUgKG51bWJlciBhbmQKLSAgICAgIC8vIHR5cGUgb2YgZGV2aWNlcykgaGFzIGJlZW4gY2hhbmdl
ZC4KLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBv
bkF1ZGlvTWFuYWdlckNoYW5nZWRTdGF0ZSgpOwotICAgICAgfQotICAgIH0pOwotICAgIC8vIFN0
b3JlIGV4aXN0aW5nIGF1ZGlvIHNldHRpbmdzIGFuZCBjaGFuZ2UgYXVkaW8gbW9kZSB0bwotICAg
IC8vIE1PREVfSU5fQ09NTVVOSUNBVElPTiBmb3IgYmVzdCBwb3NzaWJsZSBWb0lQIHBlcmZvcm1h
bmNlLgotICAgIExvZy5kKFRBRywgIkluaXRpYWxpemluZyB0aGUgYXVkaW8gbWFuYWdlci4uLiIp
OwotICAgIGF1ZGlvTWFuYWdlci5pbml0KCk7Ci0gIH0KLQotICAvLyBTaG91bGQgYmUgY2FsbGVk
IGZyb20gVUkgdGhyZWFkCi0gIHByaXZhdGUgdm9pZCBjYWxsQ29ubmVjdGVkKCkgewotICAgIGZp
bmFsIGxvbmcgZGVsdGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNhbGxTdGFydGVk
VGltZU1zOwotICAgIExvZy5pKFRBRywgIkNhbGwgY29ubmVjdGVkOiBkZWxheT0iICsgZGVsdGEg
KyAibXMiKTsKLSAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgPT0gbnVsbCB8fCBpc0Vycm9y
KSB7Ci0gICAgICBMb2cudyhUQUcsICJDYWxsIGlzIGNvbm5lY3RlZCBpbiBjbG9zZWQgb3IgZXJy
b3Igc3RhdGUiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVXBkYXRlIHZpZGVvIHZp
ZXcuCi0gICAgdXBkYXRlVmlkZW9WaWV3KCk7Ci0gICAgLy8gRW5hYmxlIHN0YXRpc3RpY3MgY2Fs
bGJhY2suCi0gICAgcGVlckNvbm5lY3Rpb25DbGllbnQuZW5hYmxlU3RhdHNFdmVudHModHJ1ZSwg
U1RBVF9DQUxMQkFDS19QRVJJT0QpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIG9uQXVkaW9NYW5h
Z2VyQ2hhbmdlZFN0YXRlKCkgewotICAgIC8vIFRPRE8oaGVucmlrYSk6IGRpc2FibGUgdmlkZW8g
aWYgQXBwUlRDQXVkaW9NYW5hZ2VyLkF1ZGlvRGV2aWNlLkVBUlBJRUNFCi0gICAgLy8gaXMgYWN0
aXZlLgotICB9Ci0KLSAgLy8gRGlzY29ubmVjdCBmcm9tIHJlbW90ZSByZXNvdXJjZXMsIGRpc3Bv
c2Ugb2YgbG9jYWwgcmVzb3VyY2VzLCBhbmQgZXhpdC4KLSAgcHJpdmF0ZSB2b2lkIGRpc2Nvbm5l
Y3QoKSB7Ci0gICAgYWN0aXZpdHlSdW5uaW5nID0gZmFsc2U7Ci0gICAgaWYgKGFwcFJ0Y0NsaWVu
dCAhPSBudWxsKSB7Ci0gICAgICBhcHBSdGNDbGllbnQuZGlzY29ubmVjdEZyb21Sb29tKCk7Ci0g
ICAgICBhcHBSdGNDbGllbnQgPSBudWxsOwotICAgIH0KLSAgICBpZiAocGVlckNvbm5lY3Rpb25D
bGllbnQgIT0gbnVsbCkgewotICAgICAgcGVlckNvbm5lY3Rpb25DbGllbnQuY2xvc2UoKTsKLSAg
ICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50ID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGxvY2FsUmVu
ZGVyICE9IG51bGwpIHsKLSAgICAgIGxvY2FsUmVuZGVyLnJlbGVhc2UoKTsKLSAgICAgIGxvY2Fs
UmVuZGVyID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHZpZGVvRmlsZVJlbmRlcmVyICE9IG51bGwp
IHsKLSAgICAgIHZpZGVvRmlsZVJlbmRlcmVyLnJlbGVhc2UoKTsKLSAgICAgIHZpZGVvRmlsZVJl
bmRlcmVyID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKHJlbW90ZVJlbmRlclNjcmVlbiAhPSBudWxs
KSB7Ci0gICAgICByZW1vdGVSZW5kZXJTY3JlZW4ucmVsZWFzZSgpOwotICAgICAgcmVtb3RlUmVu
ZGVyU2NyZWVuID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvTWFuYWdlciAhPSBudWxsKSB7
Ci0gICAgICBhdWRpb01hbmFnZXIuY2xvc2UoKTsKLSAgICAgIGF1ZGlvTWFuYWdlciA9IG51bGw7
Ci0gICAgfQotICAgIGlmIChpY2VDb25uZWN0ZWQgJiYgIWlzRXJyb3IpIHsKLSAgICAgIHNldFJl
c3VsdChSRVNVTFRfT0spOwotICAgIH0gZWxzZSB7Ci0gICAgICBzZXRSZXN1bHQoUkVTVUxUX0NB
TkNFTEVEKTsKLSAgICB9Ci0gICAgZmluaXNoKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZGlz
Y29ubmVjdFdpdGhFcnJvck1lc3NhZ2UoZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAg
IGlmIChjb21tYW5kTGluZVJ1biB8fCAhYWN0aXZpdHlSdW5uaW5nKSB7Ci0gICAgICBMb2cuZShU
QUcsICJDcml0aWNhbCBlcnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgICBkaXNjb25uZWN0
KCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIG5ldyBBbGVydERpYWxvZy5CdWlsZGVyKHRoaXMpCi0g
ICAgICAgICAgLnNldFRpdGxlKGdldFRleHQoUi5zdHJpbmcuY2hhbm5lbF9lcnJvcl90aXRsZSkp
Ci0gICAgICAgICAgLnNldE1lc3NhZ2UoZXJyb3JNZXNzYWdlKQotICAgICAgICAgIC5zZXRDYW5j
ZWxhYmxlKGZhbHNlKQotICAgICAgICAgIC5zZXROZXV0cmFsQnV0dG9uKFIuc3RyaW5nLm9rLAot
ICAgICAgICAgICAgICBuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAg
ICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgICAgICBwdWJsaWMgdm9pZCBvbkNs
aWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCBpZCkgewotICAgICAgICAgICAgICAgICAg
ZGlhbG9nLmNhbmNlbCgpOwotICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdCgpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAuY3JlYXRlKCkKLSAgICAg
ICAgICAuc2hvdygpOwotICAgIH0KLSAgfQotCi0gIC8vIExvZyB8bXNnfCBhbmQgVG9hc3QgYWJv
dXQgaXQuCi0gIHByaXZhdGUgdm9pZCBsb2dBbmRUb2FzdChTdHJpbmcgbXNnKSB7Ci0gICAgTG9n
LmQoVEFHLCBtc2cpOwotICAgIGlmIChsb2dUb2FzdCAhPSBudWxsKSB7Ci0gICAgICBsb2dUb2Fz
dC5jYW5jZWwoKTsKLSAgICB9Ci0gICAgbG9nVG9hc3QgPSBUb2FzdC5tYWtlVGV4dCh0aGlzLCBt
c2csIFRvYXN0LkxFTkdUSF9TSE9SVCk7Ci0gICAgbG9nVG9hc3Quc2hvdygpOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbikgewotICAg
IHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmICghaXNFcnJvcikgewotICAgICAgICAgIGlz
RXJyb3IgPSB0cnVlOwotICAgICAgICAgIGRpc2Nvbm5lY3RXaXRoRXJyb3JNZXNzYWdlKGRlc2Ny
aXB0aW9uKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSBW
aWRlb0NhcHR1cmVyIGNyZWF0ZVZpZGVvQ2FwdHVyZXIoKSB7Ci0gICAgVmlkZW9DYXB0dXJlciB2
aWRlb0NhcHR1cmVyID0gbnVsbDsKLSAgICBTdHJpbmcgdmlkZW9GaWxlQXNDYW1lcmEgPSBnZXRJ
bnRlbnQoKS5nZXRTdHJpbmdFeHRyYShFWFRSQV9WSURFT19GSUxFX0FTX0NBTUVSQSk7Ci0gICAg
aWYgKHZpZGVvRmlsZUFzQ2FtZXJhICE9IG51bGwpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHZp
ZGVvQ2FwdHVyZXIgPSBuZXcgRmlsZVZpZGVvQ2FwdHVyZXIodmlkZW9GaWxlQXNDYW1lcmEpOwot
ICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICByZXBvcnRFcnJvcigiRmFp
bGVkIHRvIG9wZW4gdmlkZW8gZmlsZSBmb3IgZW11bGF0ZWQgY2FtZXJhIik7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoc2NyZWVuY2FwdHVyZUVuYWJsZWQp
IHsKLSAgICAgIGlmIChtZWRpYVByb2plY3Rpb25QZXJtaXNzaW9uUmVzdWx0Q29kZSAhPSBBY3Rp
dml0eS5SRVNVTFRfT0spIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIlVzZXIgZGlkbid0IGdpdmUg
cGVybWlzc2lvbiB0byBjYXB0dXJlIHRoZSBzY3JlZW4uIik7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBTY3JlZW5DYXB0dXJlckFuZHJvaWQoCi0gICAg
ICAgICAgbWVkaWFQcm9qZWN0aW9uUGVybWlzc2lvblJlc3VsdERhdGEsIG5ldyBNZWRpYVByb2pl
Y3Rpb24uQ2FsbGJhY2soKSB7Ci0gICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAgIHB1
YmxpYyB2b2lkIG9uU3RvcCgpIHsKLSAgICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlVzZXIgcmV2
b2tlZCBwZXJtaXNzaW9uIHRvIGNhcHR1cmUgdGhlIHNjcmVlbi4iKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9KTsKLSAgICB9IGVsc2UgaWYgKHVzZUNhbWVyYTIoKSkgewotICAgICAgaWYg
KCFjYXB0dXJlVG9UZXh0dXJlKCkpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoZ2V0U3RyaW5nKFIu
c3RyaW5nLmNhbWVyYTJfdGV4dHVyZV9vbmx5X2Vycm9yKSk7Ci0gICAgICAgIHJldHVybiBudWxs
OwotICAgICAgfQotCi0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ3JlYXRpbmcgY2FwdHVyZXIgdXNp
bmcgY2FtZXJhMiBBUEkuIik7Ci0gICAgICB2aWRlb0NhcHR1cmVyID0gY3JlYXRlQ2FtZXJhQ2Fw
dHVyZXIobmV3IENhbWVyYTJFbnVtZXJhdG9yKHRoaXMpKTsKLSAgICB9IGVsc2UgewotICAgICAg
TG9nZ2luZy5kKFRBRywgIkNyZWF0aW5nIGNhcHR1cmVyIHVzaW5nIGNhbWVyYTEgQVBJLiIpOwot
ICAgICAgdmlkZW9DYXB0dXJlciA9IGNyZWF0ZUNhbWVyYUNhcHR1cmVyKG5ldyBDYW1lcmExRW51
bWVyYXRvcihjYXB0dXJlVG9UZXh0dXJlKCkpKTsKLSAgICB9Ci0gICAgaWYgKHZpZGVvQ2FwdHVy
ZXIgPT0gbnVsbCkgewotICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBvcGVuIGNhbWVyYSIp
OwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVybiB2aWRlb0NhcHR1cmVyOwot
ICB9Ci0KLSAgLy8gLS0tLS1JbXBsZW1lbnRhdGlvbiBvZiBBcHBSVENDbGllbnQuQXBwUlRDU2ln
bmFsaW5nRXZlbnRzIC0tLS0tLS0tLS0tLS0tLQotICAvLyBBbGwgY2FsbGJhY2tzIGFyZSBpbnZv
a2VkIGZyb20gd2Vic29ja2V0IHNpZ25hbGluZyBsb29wZXIgdGhyZWFkIGFuZAotICAvLyBhcmUg
cm91dGVkIHRvIFVJIHRocmVhZC4KLSAgcHJpdmF0ZSB2b2lkIG9uQ29ubmVjdGVkVG9Sb29tSW50
ZXJuYWwoZmluYWwgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbXMpIHsKLSAgICBmaW5hbCBsb25n
IGRlbHRhID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBjYWxsU3RhcnRlZFRpbWVNczsK
LQotICAgIHNpZ25hbGluZ1BhcmFtZXRlcnMgPSBwYXJhbXM7Ci0gICAgbG9nQW5kVG9hc3QoIkNy
ZWF0aW5nIHBlZXIgY29ubmVjdGlvbiwgZGVsYXk9IiArIGRlbHRhICsgIm1zIik7Ci0gICAgVmlk
ZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyID0gbnVsbDsKLSAgICBpZiAocGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIHZpZGVvQ2FwdHVyZXIgPSBjcmVh
dGVWaWRlb0NhcHR1cmVyKCk7Ci0gICAgfQotICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50LmNyZWF0
ZVBlZXJDb25uZWN0aW9uKHJvb3RFZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCksIGxvY2FsUmVu
ZGVyLAotICAgICAgICByZW1vdGVSZW5kZXJlcnMsIHZpZGVvQ2FwdHVyZXIsIHNpZ25hbGluZ1Bh
cmFtZXRlcnMpOwotCi0gICAgaWYgKHNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlhdG9yKSB7Ci0g
ICAgICBsb2dBbmRUb2FzdCgiQ3JlYXRpbmcgT0ZGRVIuLi4iKTsKLSAgICAgIC8vIENyZWF0ZSBv
ZmZlci4gT2ZmZXIgU0RQIHdpbGwgYmUgc2VudCB0byBhbnN3ZXJpbmcgY2xpZW50IGluCi0gICAg
ICAvLyBQZWVyQ29ubmVjdGlvbkV2ZW50cy5vbkxvY2FsRGVzY3JpcHRpb24gZXZlbnQuCi0gICAg
ICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVPZmZlcigpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBpZiAocGFyYW1zLm9mZmVyU2RwICE9IG51bGwpIHsKLSAgICAgICAgcGVlckNvbm5lY3Rpb25D
bGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocGFyYW1zLm9mZmVyU2RwKTsKLSAgICAgICAgbG9n
QW5kVG9hc3QoIkNyZWF0aW5nIEFOU1dFUi4uLiIpOwotICAgICAgICAvLyBDcmVhdGUgYW5zd2Vy
LiBBbnN3ZXIgU0RQIHdpbGwgYmUgc2VudCB0byBvZmZlcmluZyBjbGllbnQgaW4KLSAgICAgICAg
Ly8gUGVlckNvbm5lY3Rpb25FdmVudHMub25Mb2NhbERlc2NyaXB0aW9uIGV2ZW50LgotICAgICAg
ICBwZWVyQ29ubmVjdGlvbkNsaWVudC5jcmVhdGVBbnN3ZXIoKTsKLSAgICAgIH0KLSAgICAgIGlm
IChwYXJhbXMuaWNlQ2FuZGlkYXRlcyAhPSBudWxsKSB7Ci0gICAgICAgIC8vIEFkZCByZW1vdGUg
SUNFIGNhbmRpZGF0ZXMgZnJvbSByb29tLgotICAgICAgICBmb3IgKEljZUNhbmRpZGF0ZSBpY2VD
YW5kaWRhdGUgOiBwYXJhbXMuaWNlQ2FuZGlkYXRlcykgewotICAgICAgICAgIHBlZXJDb25uZWN0
aW9uQ2xpZW50LmFkZFJlbW90ZUljZUNhbmRpZGF0ZShpY2VDYW5kaWRhdGUpOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ29u
bmVjdGVkVG9Sb29tKGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zKSB7Ci0gICAgcnVu
T25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgb25Db25uZWN0ZWRUb1Jvb21JbnRlcm5hbChwYXJhbXMp
OwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
UmVtb3RlRGVzY3JpcHRpb24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGZp
bmFsIGxvbmcgZGVsdGEgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSAtIGNhbGxTdGFydGVk
VGltZU1zOwotICAgIHJ1bk9uVWlUaHJlYWQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJy
aWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlv
bkNsaWVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiUmVjZWl2ZWQgcmVtb3Rl
IFNEUCBmb3Igbm9uLWluaXRpbGl6ZWQgcGVlciBjb25uZWN0aW9uLiIpOwotICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICBsb2dBbmRUb2FzdCgiUmVjZWl2ZWQgcmVtb3RlICIg
KyBzZHAudHlwZSArICIsIGRlbGF5PSIgKyBkZWx0YSArICJtcyIpOwotICAgICAgICBwZWVyQ29u
bmVjdGlvbkNsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZHApOwotICAgICAgICBpZiAoIXNp
Z25hbGluZ1BhcmFtZXRlcnMuaW5pdGlhdG9yKSB7Ci0gICAgICAgICAgbG9nQW5kVG9hc3QoIkNy
ZWF0aW5nIEFOU1dFUi4uLiIpOwotICAgICAgICAgIC8vIENyZWF0ZSBhbnN3ZXIuIEFuc3dlciBT
RFAgd2lsbCBiZSBzZW50IHRvIG9mZmVyaW5nIGNsaWVudCBpbgotICAgICAgICAgIC8vIFBlZXJD
b25uZWN0aW9uRXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbiBldmVudC4KLSAgICAgICAgICBwZWVy
Q29ubmVjdGlvbkNsaWVudC5jcmVhdGVBbnN3ZXIoKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVtb3RlSWNlQ2FuZGlk
YXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBydW5PblVpVGhyZWFkKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb25DbGllbnQgPT0gbnVsbCkgewotICAgICAgICAg
IExvZy5lKFRBRywgIlJlY2VpdmVkIElDRSBjYW5kaWRhdGUgZm9yIGEgbm9uLWluaXRpYWxpemVk
IHBlZXIgY29ubmVjdGlvbi4iKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgcGVlckNvbm5lY3Rpb25DbGllbnQuYWRkUmVtb3RlSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25S
ZW1vdGVJY2VDYW5kaWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVz
KSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uQ2xp
ZW50ID09IG51bGwpIHsKLSAgICAgICAgICBMb2cuZShUQUcsICJSZWNlaXZlZCBJQ0UgY2FuZGlk
YXRlIHJlbW92YWxzIGZvciBhIG5vbi1pbml0aWFsaXplZCBwZWVyIGNvbm5lY3Rpb24uIik7Ci0g
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uQ2xpZW50
LnJlbW92ZVJlbW90ZUljZUNhbmRpZGF0ZXMoY2FuZGlkYXRlcyk7Ci0gICAgICB9Ci0gICAgfSk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25DaGFubmVsQ2xvc2UoKSB7Ci0g
ICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgbG9nQW5kVG9hc3QoIlJlbW90ZSBlbmQgaHVu
ZyB1cDsgZHJvcHBpbmcgUGVlckNvbm5lY3Rpb24iKTsKLSAgICAgICAgZGlzY29ubmVjdCgpOwot
ICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ2hh
bm5lbEVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIHJlcG9ydEVycm9yKGRl
c2NyaXB0aW9uKTsKLSAgfQotCi0gIC8vIC0tLS0tSW1wbGVtZW50YXRpb24gb2YgUGVlckNvbm5l
Y3Rpb25DbGllbnQuUGVlckNvbm5lY3Rpb25FdmVudHMuLS0tLS0tLS0tCi0gIC8vIFNlbmQgbG9j
YWwgcGVlciBjb25uZWN0aW9uIFNEUCBhbmQgSUNFIGNhbmRpZGF0ZXMgdG8gcmVtb3RlIHBhcnR5
LgotICAvLyBBbGwgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZyb20gcGVlciBjb25uZWN0aW9uIGNs
aWVudCBsb29wZXIgdGhyZWFkIGFuZAotICAvLyBhcmUgcm91dGVkIHRvIFVJIHRocmVhZC4KLSAg
QE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uTG9jYWxEZXNjcmlwdGlvbihmaW5hbCBTZXNzaW9u
RGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgZmluYWwgbG9uZyBkZWx0YSA9IFN5c3RlbS5jdXJyZW50
VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7Ci0gICAgcnVuT25VaVRocmVhZChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgaWYgKGFwcFJ0Y0NsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgbG9nQW5kVG9h
c3QoIlNlbmRpbmcgIiArIHNkcC50eXBlICsgIiwgZGVsYXk9IiArIGRlbHRhICsgIm1zIik7Ci0g
ICAgICAgICAgaWYgKHNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlhdG9yKSB7Ci0gICAgICAgICAg
ICBhcHBSdGNDbGllbnQuc2VuZE9mZmVyU2RwKHNkcCk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIGFwcFJ0Y0NsaWVudC5zZW5kQW5zd2VyU2RwKHNkcCk7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9NYXhC
aXRyYXRlID4gMCkgewotICAgICAgICAgIExvZy5kKFRBRywgIlNldCB2aWRlbyBtYXhpbXVtIGJp
dHJhdGU6ICIgKyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9NYXhCaXRyYXRlKTsKLSAg
ICAgICAgICBwZWVyQ29ubmVjdGlvbkNsaWVudC5zZXRWaWRlb01heEJpdHJhdGUocGVlckNvbm5l
Y3Rpb25QYXJhbWV0ZXJzLnZpZGVvTWF4Qml0cmF0ZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAg
ICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZShm
aW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgaWYgKGFwcFJ0Y0NsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgYXBwUnRjQ2xpZW50
LnNlbmRMb2NhbEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGVz
UmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAgcnVuT25VaVRo
cmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgaWYgKGFwcFJ0Y0NsaWVudCAhPSBudWxsKSB7Ci0gICAgICAgICAg
YXBwUnRjQ2xpZW50LnNlbmRMb2NhbEljZUNhbmRpZGF0ZVJlbW92YWxzKGNhbmRpZGF0ZXMpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25JY2VDb25uZWN0ZWQoKSB7Ci0gICAgZmluYWwgbG9uZyBkZWx0YSA9IFN5c3RlbS5j
dXJyZW50VGltZU1pbGxpcygpIC0gY2FsbFN0YXJ0ZWRUaW1lTXM7Ci0gICAgcnVuT25VaVRocmVh
ZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgbG9nQW5kVG9hc3QoIklDRSBjb25uZWN0ZWQsIGRlbGF5PSIgKyBkZWx0
YSArICJtcyIpOwotICAgICAgICBpY2VDb25uZWN0ZWQgPSB0cnVlOwotICAgICAgICBjYWxsQ29u
bmVjdGVkKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25JY2VEaXNjb25uZWN0ZWQoKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgbG9nQW5kVG9hc3QoIklDRSBkaXNjb25uZWN0ZWQiKTsKLSAgICAgICAgaWNlQ29ubmVjdGVk
ID0gZmFsc2U7Ci0gICAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25uZWN0aW9uQ2xvc2VkKCkge30K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVyQ29ubmVjdGlvblN0YXRzUmVhZHko
ZmluYWwgU3RhdHNSZXBvcnRbXSByZXBvcnRzKSB7Ci0gICAgcnVuT25VaVRocmVhZChuZXcgUnVu
bmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgaWYgKCFpc0Vycm9yICYmIGljZUNvbm5lY3RlZCkgewotICAgICAgICAgIGh1ZEZyYWdt
ZW50LnVwZGF0ZUVuY29kZXJTdGF0aXN0aWNzKHJlcG9ydHMpOwotICAgICAgICB9Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVyQ29ubmVj
dGlvbkVycm9yKGZpbmFsIFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIHJlcG9ydEVycm9yKGRl
c2NyaXB0aW9uKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Nh
bGxGcmFnbWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9DYWxsRnJhZ21lbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL0NhbGxGcmFnbWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTM5ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwot
Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZpdHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuRnJhZ21l
bnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91
dEluZmxhdGVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmll
dy5WaWV3R3JvdXA7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VCdXR0b247Ci1pbXBvcnQg
YW5kcm9pZC53aWRnZXQuU2Vla0JhcjsKLWltcG9ydCBhbmRyb2lkLndpZGdldC5UZXh0VmlldzsK
LQotaW1wb3J0IG9yZy53ZWJydGMuUmVuZGVyZXJDb21tb24uU2NhbGluZ1R5cGU7Ci0KLS8qKgot
ICogRnJhZ21lbnQgZm9yIGNhbGwgY29udHJvbC4KLSAqLwotcHVibGljIGNsYXNzIENhbGxGcmFn
bWVudCBleHRlbmRzIEZyYWdtZW50IHsKLSAgcHJpdmF0ZSBWaWV3IGNvbnRyb2xWaWV3OwotICBw
cml2YXRlIFRleHRWaWV3IGNvbnRhY3RWaWV3OwotICBwcml2YXRlIEltYWdlQnV0dG9uIGRpc2Nv
bm5lY3RCdXR0b247Ci0gIHByaXZhdGUgSW1hZ2VCdXR0b24gY2FtZXJhU3dpdGNoQnV0dG9uOwot
ICBwcml2YXRlIEltYWdlQnV0dG9uIHZpZGVvU2NhbGluZ0J1dHRvbjsKLSAgcHJpdmF0ZSBJbWFn
ZUJ1dHRvbiB0b2dnbGVNdXRlQnV0dG9uOwotICBwcml2YXRlIFRleHRWaWV3IGNhcHR1cmVGb3Jt
YXRUZXh0OwotICBwcml2YXRlIFNlZWtCYXIgY2FwdHVyZUZvcm1hdFNsaWRlcjsKLSAgcHJpdmF0
ZSBPbkNhbGxFdmVudHMgY2FsbEV2ZW50czsKLSAgcHJpdmF0ZSBTY2FsaW5nVHlwZSBzY2FsaW5n
VHlwZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQgPSB0cnVlOwotCi0gIC8q
KgotICAgKiBDYWxsIGNvbnRyb2wgaW50ZXJmYWNlIGZvciBjb250YWluZXIgYWN0aXZpdHkuCi0g
ICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIE9uQ2FsbEV2ZW50cyB7Ci0gICAgdm9pZCBvbkNhbGxI
YW5nVXAoKTsKLSAgICB2b2lkIG9uQ2FtZXJhU3dpdGNoKCk7Ci0gICAgdm9pZCBvblZpZGVvU2Nh
bGluZ1N3aXRjaChTY2FsaW5nVHlwZSBzY2FsaW5nVHlwZSk7Ci0gICAgdm9pZCBvbkNhcHR1cmVG
b3JtYXRDaGFuZ2UoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZnJhbWVyYXRlKTsKLSAgICBi
b29sZWFuIG9uVG9nZ2xlTWljKCk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIFZpZXcg
b25DcmVhdGVWaWV3KAotICAgICAgTGF5b3V0SW5mbGF0ZXIgaW5mbGF0ZXIsIFZpZXdHcm91cCBj
b250YWluZXIsIEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBjb250cm9sVmlldyA9
IGluZmxhdGVyLmluZmxhdGUoUi5sYXlvdXQuZnJhZ21lbnRfY2FsbCwgY29udGFpbmVyLCBmYWxz
ZSk7Ci0KLSAgICAvLyBDcmVhdGUgVUkgY29udHJvbHMuCi0gICAgY29udGFjdFZpZXcgPSAoVGV4
dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmNvbnRhY3RfbmFtZV9jYWxsKTsK
LSAgICBkaXNjb25uZWN0QnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5maW5kVmll
d0J5SWQoUi5pZC5idXR0b25fY2FsbF9kaXNjb25uZWN0KTsKLSAgICBjYW1lcmFTd2l0Y2hCdXR0
b24gPSAoSW1hZ2VCdXR0b24pIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmJ1dHRvbl9j
YWxsX3N3aXRjaF9jYW1lcmEpOwotICAgIHZpZGVvU2NhbGluZ0J1dHRvbiA9IChJbWFnZUJ1dHRv
bikgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuYnV0dG9uX2NhbGxfc2NhbGluZ19tb2Rl
KTsKLSAgICB0b2dnbGVNdXRlQnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5maW5k
Vmlld0J5SWQoUi5pZC5idXR0b25fY2FsbF90b2dnbGVfbWljKTsKLSAgICBjYXB0dXJlRm9ybWF0
VGV4dCA9IChUZXh0VmlldykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuY2FwdHVyZV9m
b3JtYXRfdGV4dF9jYWxsKTsKLSAgICBjYXB0dXJlRm9ybWF0U2xpZGVyID0gKFNlZWtCYXIpIGNv
bnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmNhcHR1cmVfZm9ybWF0X3NsaWRlcl9jYWxsKTsK
LQotICAgIC8vIEFkZCBidXR0b25zIGNsaWNrIGV2ZW50cy4KLSAgICBkaXNjb25uZWN0QnV0dG9u
LnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAg
IGNhbGxFdmVudHMub25DYWxsSGFuZ1VwKCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICBjYW1l
cmFTd2l0Y2hCdXR0b24uc2V0T25DbGlja0xpc3RlbmVyKG5ldyBWaWV3Lk9uQ2xpY2tMaXN0ZW5l
cigpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgb25DbGljayhWaWV3IHZp
ZXcpIHsKLSAgICAgICAgY2FsbEV2ZW50cy5vbkNhbWVyYVN3aXRjaCgpOwotICAgICAgfQotICAg
IH0pOwotCi0gICAgdmlkZW9TY2FsaW5nQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihuZXcgVmll
dy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGlmIChzY2FsaW5nVHlwZSA9PSBTY2FsaW5n
VHlwZS5TQ0FMRV9BU1BFQ1RfRklMTCkgewotICAgICAgICAgIHZpZGVvU2NhbGluZ0J1dHRvbi5z
ZXRCYWNrZ3JvdW5kUmVzb3VyY2UoUi5kcmF3YWJsZS5pY19hY3Rpb25fZnVsbF9zY3JlZW4pOwot
ICAgICAgICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUuU0NBTEVfQVNQRUNUX0ZJVDsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICB2aWRlb1NjYWxpbmdCdXR0b24uc2V0QmFja2dyb3Vu
ZFJlc291cmNlKFIuZHJhd2FibGUuaWNfYWN0aW9uX3JldHVybl9mcm9tX2Z1bGxfc2NyZWVuKTsK
LSAgICAgICAgICBzY2FsaW5nVHlwZSA9IFNjYWxpbmdUeXBlLlNDQUxFX0FTUEVDVF9GSUxMOwot
ICAgICAgICB9Ci0gICAgICAgIGNhbGxFdmVudHMub25WaWRlb1NjYWxpbmdTd2l0Y2goc2NhbGlu
Z1R5cGUpOwotICAgICAgfQotICAgIH0pOwotICAgIHNjYWxpbmdUeXBlID0gU2NhbGluZ1R5cGUu
U0NBTEVfQVNQRUNUX0ZJTEw7Ci0KLSAgICB0b2dnbGVNdXRlQnV0dG9uLnNldE9uQ2xpY2tMaXN0
ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxl
ZCA9IGNhbGxFdmVudHMub25Ub2dnbGVNaWMoKTsKLSAgICAgICAgdG9nZ2xlTXV0ZUJ1dHRvbi5z
ZXRBbHBoYShlbmFibGVkID8gMS4wZiA6IDAuM2YpOwotICAgICAgfQotICAgIH0pOwotCi0gICAg
cmV0dXJuIGNvbnRyb2xWaWV3OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
U3RhcnQoKSB7Ci0gICAgc3VwZXIub25TdGFydCgpOwotCi0gICAgYm9vbGVhbiBjYXB0dXJlU2xp
ZGVyRW5hYmxlZCA9IGZhbHNlOwotICAgIEJ1bmRsZSBhcmdzID0gZ2V0QXJndW1lbnRzKCk7Ci0g
ICAgaWYgKGFyZ3MgIT0gbnVsbCkgewotICAgICAgU3RyaW5nIGNvbnRhY3ROYW1lID0gYXJncy5n
ZXRTdHJpbmcoQ2FsbEFjdGl2aXR5LkVYVFJBX1JPT01JRCk7Ci0gICAgICBjb250YWN0Vmlldy5z
ZXRUZXh0KGNvbnRhY3ROYW1lKTsKLSAgICAgIHZpZGVvQ2FsbEVuYWJsZWQgPSBhcmdzLmdldEJv
b2xlYW4oQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0NBTEwsIHRydWUpOwotICAgICAgY2FwdHVy
ZVNsaWRlckVuYWJsZWQgPSB2aWRlb0NhbGxFbmFibGVkCi0gICAgICAgICAgJiYgYXJncy5nZXRC
b29sZWFuKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQVBUVVJFUVVBTElUWVNMSURFUl9FTkFC
TEVELCBmYWxzZSk7Ci0gICAgfQotICAgIGlmICghdmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAg
Y2FtZXJhU3dpdGNoQnV0dG9uLnNldFZpc2liaWxpdHkoVmlldy5JTlZJU0lCTEUpOwotICAgIH0K
LSAgICBpZiAoY2FwdHVyZVNsaWRlckVuYWJsZWQpIHsKLSAgICAgIGNhcHR1cmVGb3JtYXRTbGlk
ZXIuc2V0T25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIoCi0gICAgICAgICAgbmV3IENhcHR1cmVRdWFs
aXR5Q29udHJvbGxlcihjYXB0dXJlRm9ybWF0VGV4dCwgY2FsbEV2ZW50cykpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICBjYXB0dXJlRm9ybWF0VGV4dC5zZXRWaXNpYmlsaXR5KFZpZXcuR09ORSk7Ci0g
ICAgICBjYXB0dXJlRm9ybWF0U2xpZGVyLnNldFZpc2liaWxpdHkoVmlldy5HT05FKTsKLSAgICB9
Ci0gIH0KLQotICAvLyBUT0RPKHNha2FsKTogUmVwbGFjZSB3aXRoIG9uQXR0YWNoKENvbnRleHQp
IG9uY2Ugd2Ugb25seSBzdXBwb3J0IEFQSSBsZXZlbCAyMysuCi0gIEBTdXBwcmVzc1dhcm5pbmdz
KCJkZXByZWNhdGlvbiIpCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkF0dGFjaChBY3Rp
dml0eSBhY3Rpdml0eSkgewotICAgIHN1cGVyLm9uQXR0YWNoKGFjdGl2aXR5KTsKLSAgICBjYWxs
RXZlbnRzID0gKE9uQ2FsbEV2ZW50cykgYWN0aXZpdHk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3Jj
L29yZy9hcHBzcG90L2FwcHJ0Yy9DYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ2FwdHVyZVF1YWxpdHlDb250cm9s
bGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9DYXB0dXJlUXVhbGl0eUNvbnRyb2xsZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDExMCAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsK
LQotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LlNlZWtCYXI7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQu
VGV4dFZpZXc7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29s
bGVjdGlvbnM7Ci1pbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7Ci1pbXBvcnQgamF2YS51dGls
Lkxpc3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdGlvbkFuZHJvaWQuQ2FwdHVy
ZUZvcm1hdDsKLQotLyoqCi0gKiBDb250cm9sIGNhcHR1cmUgZm9ybWF0IGJhc2VkIG9uIGEgc2Vl
a2JhciBsaXN0ZW5lci4KLSAqLwotcHVibGljIGNsYXNzIENhcHR1cmVRdWFsaXR5Q29udHJvbGxl
ciBpbXBsZW1lbnRzIFNlZWtCYXIuT25TZWVrQmFyQ2hhbmdlTGlzdGVuZXIgewotICBwcml2YXRl
IGZpbmFsIExpc3Q8Q2FwdHVyZUZvcm1hdD4gZm9ybWF0cyA9Ci0gICAgICBBcnJheXMuYXNMaXN0
KG5ldyBDYXB0dXJlRm9ybWF0KDEyODAsIDcyMCwgMCwgMzAwMDApLCBuZXcgQ2FwdHVyZUZvcm1h
dCg5NjAsIDU0MCwgMCwgMzAwMDApLAotICAgICAgICAgIG5ldyBDYXB0dXJlRm9ybWF0KDY0MCwg
NDgwLCAwLCAzMDAwMCksIG5ldyBDYXB0dXJlRm9ybWF0KDQ4MCwgMzYwLCAwLCAzMDAwMCksCi0g
ICAgICAgICAgbmV3IENhcHR1cmVGb3JtYXQoMzIwLCAyNDAsIDAsIDMwMDAwKSwgbmV3IENhcHR1
cmVGb3JtYXQoMjU2LCAxNDQsIDAsIDMwMDAwKSk7Ci0gIC8vIFByaW9yaXRpemUgZnJhbWVyYXRl
IGJlbG93IHRoaXMgdGhyZXNob2xkIGFuZCByZXNvbHV0aW9uIGFib3ZlIHRoZSB0aHJlc2hvbGQu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGUkFNRVJBVEVfVEhSRVNIT0xEID0gMTU7Ci0g
IHByaXZhdGUgVGV4dFZpZXcgY2FwdHVyZUZvcm1hdFRleHQ7Ci0gIHByaXZhdGUgQ2FsbEZyYWdt
ZW50Lk9uQ2FsbEV2ZW50cyBjYWxsRXZlbnRzOwotICBwcml2YXRlIGludCB3aWR0aCA9IDA7Ci0g
IHByaXZhdGUgaW50IGhlaWdodCA9IDA7Ci0gIHByaXZhdGUgaW50IGZyYW1lcmF0ZSA9IDA7Ci0g
IHByaXZhdGUgZG91YmxlIHRhcmdldEJhbmR3aWR0aCA9IDA7Ci0KLSAgcHVibGljIENhcHR1cmVR
dWFsaXR5Q29udHJvbGxlcigKLSAgICAgIFRleHRWaWV3IGNhcHR1cmVGb3JtYXRUZXh0LCBDYWxs
RnJhZ21lbnQuT25DYWxsRXZlbnRzIGNhbGxFdmVudHMpIHsKLSAgICB0aGlzLmNhcHR1cmVGb3Jt
YXRUZXh0ID0gY2FwdHVyZUZvcm1hdFRleHQ7Ci0gICAgdGhpcy5jYWxsRXZlbnRzID0gY2FsbEV2
ZW50czsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgQ29tcGFyYXRvcjxDYXB0dXJlRm9ybWF0PiBj
b21wYXJlRm9ybWF0cyA9IG5ldyBDb21wYXJhdG9yPENhcHR1cmVGb3JtYXQ+KCkgewotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBpbnQgY29tcGFyZShDYXB0dXJlRm9ybWF0IGZpcnN0LCBDYXB0
dXJlRm9ybWF0IHNlY29uZCkgewotICAgICAgaW50IGZpcnN0RnBzID0gY2FsY3VsYXRlRnJhbWVy
YXRlKHRhcmdldEJhbmR3aWR0aCwgZmlyc3QpOwotICAgICAgaW50IHNlY29uZEZwcyA9IGNhbGN1
bGF0ZUZyYW1lcmF0ZSh0YXJnZXRCYW5kd2lkdGgsIHNlY29uZCk7Ci0KLSAgICAgIGlmIChmaXJz
dEZwcyA+PSBGUkFNRVJBVEVfVEhSRVNIT0xEICYmIHNlY29uZEZwcyA+PSBGUkFNRVJBVEVfVEhS
RVNIT0xECi0gICAgICAgICAgfHwgZmlyc3RGcHMgPT0gc2Vjb25kRnBzKSB7Ci0gICAgICAgIC8v
IENvbXBhcmUgcmVzb2x1dGlvbi4KLSAgICAgICAgcmV0dXJuIGZpcnN0LndpZHRoICogZmlyc3Qu
aGVpZ2h0IC0gc2Vjb25kLndpZHRoICogc2Vjb25kLmhlaWdodDsKLSAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgIC8vIENvbXBhcmUgZnBzLgotICAgICAgICByZXR1cm4gZmlyc3RGcHMgLSBzZWNvbmRG
cHM7Ci0gICAgICB9Ci0gICAgfQotICB9OwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBv
blByb2dyZXNzQ2hhbmdlZChTZWVrQmFyIHNlZWtCYXIsIGludCBwcm9ncmVzcywgYm9vbGVhbiBm
cm9tVXNlcikgewotICAgIGlmIChwcm9ncmVzcyA9PSAwKSB7Ci0gICAgICB3aWR0aCA9IDA7Ci0g
ICAgICBoZWlnaHQgPSAwOwotICAgICAgZnJhbWVyYXRlID0gMDsKLSAgICAgIGNhcHR1cmVGb3Jt
YXRUZXh0LnNldFRleHQoUi5zdHJpbmcubXV0ZWQpOwotICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIC8vIEV4dHJhY3QgbWF4IGJhbmR3aWR0aCAoaW4gbWlsbGlwaXhlbHMgLyBzZWNvbmQpLgot
ICAgIGxvbmcgbWF4Q2FwdHVyZUJhbmR3aWR0aCA9IGphdmEubGFuZy5Mb25nLk1JTl9WQUxVRTsK
LSAgICBmb3IgKENhcHR1cmVGb3JtYXQgZm9ybWF0IDogZm9ybWF0cykgewotICAgICAgbWF4Q2Fw
dHVyZUJhbmR3aWR0aCA9Ci0gICAgICAgICAgTWF0aC5tYXgobWF4Q2FwdHVyZUJhbmR3aWR0aCwg
KGxvbmcpIGZvcm1hdC53aWR0aCAqIGZvcm1hdC5oZWlnaHQgKiBmb3JtYXQuZnJhbWVyYXRlLm1h
eCk7Ci0gICAgfQotCi0gICAgLy8gRnJhY3Rpb24gYmV0d2VlbiAwIGFuZCAxLgotICAgIGRvdWJs
ZSBiYW5kd2lkdGhGcmFjdGlvbiA9IChkb3VibGUpIHByb2dyZXNzIC8gMTAwLjA7Ci0gICAgLy8g
TWFrZSBhIGxvZy1zY2FsZSB0cmFuc2Zvcm1hdGlvbiwgc3RpbGwgYmV0d2VlbiAwIGFuZCAxLgot
ICAgIGZpbmFsIGRvdWJsZSBrRXhwQ29uc3RhbnQgPSAzLjA7Ci0gICAgYmFuZHdpZHRoRnJhY3Rp
b24gPQotICAgICAgICAoTWF0aC5leHAoa0V4cENvbnN0YW50ICogYmFuZHdpZHRoRnJhY3Rpb24p
IC0gMSkgLyAoTWF0aC5leHAoa0V4cENvbnN0YW50KSAtIDEpOwotICAgIHRhcmdldEJhbmR3aWR0
aCA9IGJhbmR3aWR0aEZyYWN0aW9uICogbWF4Q2FwdHVyZUJhbmR3aWR0aDsKLQotICAgIC8vIENo
b29zZSB0aGUgYmVzdCBmb3JtYXQgZ2l2ZW4gYSB0YXJnZXQgYmFuZHdpZHRoLgotICAgIGZpbmFs
IENhcHR1cmVGb3JtYXQgYmVzdEZvcm1hdCA9IENvbGxlY3Rpb25zLm1heChmb3JtYXRzLCBjb21w
YXJlRm9ybWF0cyk7Ci0gICAgd2lkdGggPSBiZXN0Rm9ybWF0LndpZHRoOwotICAgIGhlaWdodCA9
IGJlc3RGb3JtYXQuaGVpZ2h0OwotICAgIGZyYW1lcmF0ZSA9IGNhbGN1bGF0ZUZyYW1lcmF0ZSh0
YXJnZXRCYW5kd2lkdGgsIGJlc3RGb3JtYXQpOwotICAgIGNhcHR1cmVGb3JtYXRUZXh0LnNldFRl
eHQoCi0gICAgICAgIFN0cmluZy5mb3JtYXQoY2FwdHVyZUZvcm1hdFRleHQuZ2V0Q29udGV4dCgp
LmdldFN0cmluZyhSLnN0cmluZy5mb3JtYXRfZGVzY3JpcHRpb24pLCB3aWR0aCwKLSAgICAgICAg
ICAgIGhlaWdodCwgZnJhbWVyYXRlKSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgb25TdGFydFRyYWNraW5nVG91Y2goU2Vla0JhciBzZWVrQmFyKSB7fQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBvblN0b3BUcmFja2luZ1RvdWNoKFNlZWtCYXIgc2Vla0Jhcikgewot
ICAgIGNhbGxFdmVudHMub25DYXB0dXJlRm9ybWF0Q2hhbmdlKHdpZHRoLCBoZWlnaHQsIGZyYW1l
cmF0ZSk7Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhlIGhpZ2hlc3QgZnJhbWUgcmF0ZSBwb3NzaWJs
ZSBiYXNlZCBvbiBiYW5kd2lkdGggYW5kIGZvcm1hdC4KLSAgcHJpdmF0ZSBpbnQgY2FsY3VsYXRl
RnJhbWVyYXRlKGRvdWJsZSBiYW5kd2lkdGgsIENhcHR1cmVGb3JtYXQgZm9ybWF0KSB7Ci0gICAg
cmV0dXJuIChpbnQpIE1hdGgucm91bmQoCi0gICAgICAgIE1hdGgubWluKGZvcm1hdC5mcmFtZXJh
dGUubWF4LCAoaW50KSBNYXRoLnJvdW5kKGJhbmR3aWR0aCAvIChmb3JtYXQud2lkdGggKiBmb3Jt
YXQuaGVpZ2h0KSkpCi0gICAgICAgIC8gMTAwMC4wKTsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMv
b3JnL2FwcHNwb3QvYXBwcnRjL0Nvbm5lY3RBY3Rpdml0eS5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9Db25uZWN0QWN0aXZpdHkuamF2YQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0Nvbm5lY3RBY3Rpdml0eS5q
YXZhCShub25leGlzdGVudCkKQEAgLTEsNTQ1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5hcHAuQWN0aXZp
dHk7Ci1pbXBvcnQgYW5kcm9pZC5hcHAuQWxlcnREaWFsb2c7Ci1pbXBvcnQgYW5kcm9pZC5jb250
ZW50LkRpYWxvZ0ludGVyZmFjZTsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50OwotaW1w
b3J0IGFuZHJvaWQuY29udGVudC5TaGFyZWRQcmVmZXJlbmNlczsKLWltcG9ydCBhbmRyb2lkLm5l
dC5Vcmk7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJl
bmNlLlByZWZlcmVuY2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci1pbXBvcnQg
YW5kcm9pZC52aWV3LkNvbnRleHRNZW51OwotaW1wb3J0IGFuZHJvaWQudmlldy5LZXlFdmVudDsK
LWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudTsKLWltcG9ydCBhbmRyb2lkLnZpZXcuTWVudUl0ZW07
Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXc7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LlZpZXcuT25D
bGlja0xpc3RlbmVyOwotaW1wb3J0IGFuZHJvaWQudmlldy5pbnB1dG1ldGhvZC5FZGl0b3JJbmZv
OwotaW1wb3J0IGFuZHJvaWQud2Via2l0LlVSTFV0aWw7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQu
QWRhcHRlclZpZXc7Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQuQXJyYXlBZGFwdGVyOwotaW1wb3J0
IGFuZHJvaWQud2lkZ2V0LkVkaXRUZXh0OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0LkltYWdlQnV0
dG9uOwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0Lkxpc3RWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lk
Z2V0LlRleHRWaWV3OwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51
dGlsLlJhbmRvbTsKLWltcG9ydCBvcmcuanNvbi5KU09OQXJyYXk7Ci1pbXBvcnQgb3JnLmpzb24u
SlNPTkV4Y2VwdGlvbjsKLQotLyoqCi0gKiBIYW5kbGVzIHRoZSBpbml0aWFsIHNldHVwIHdoZXJl
IHRoZSB1c2VyIHNlbGVjdHMgd2hpY2ggcm9vbSB0byBqb2luLgotICovCi1wdWJsaWMgY2xhc3Mg
Q29ubmVjdEFjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgewotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIkNvbm5lY3RBY3Rpdml0eSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBDT05ORUNUSU9OX1JFUVVFU1QgPSAxOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
UkVNT1ZFX0ZBVk9SSVRFX0lOREVYID0gMDsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBjb21t
YW5kTGluZVJ1biA9IGZhbHNlOwotCi0gIHByaXZhdGUgSW1hZ2VCdXR0b24gY29ubmVjdEJ1dHRv
bjsKLSAgcHJpdmF0ZSBJbWFnZUJ1dHRvbiBhZGRGYXZvcml0ZUJ1dHRvbjsKLSAgcHJpdmF0ZSBF
ZGl0VGV4dCByb29tRWRpdFRleHQ7Ci0gIHByaXZhdGUgTGlzdFZpZXcgcm9vbUxpc3RWaWV3Owot
ICBwcml2YXRlIFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWY7Ci0gIHByaXZhdGUgU3RyaW5n
IGtleXByZWZWaWRlb0NhbGxFbmFibGVkOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmU2NyZWVu
Y2FwdHVyZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkNhbWVyYTI7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZSZXNvbHV0aW9uOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRnBzOwotICBw
cml2YXRlIFN0cmluZyBrZXlwcmVmQ2FwdHVyZVF1YWxpdHlTbGlkZXI7Ci0gIHByaXZhdGUgU3Ry
aW5nIGtleXByZWZWaWRlb0JpdHJhdGVUeXBlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVmlk
ZW9CaXRyYXRlVmFsdWU7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZWaWRlb0NvZGVjOwotICBw
cml2YXRlIFN0cmluZyBrZXlwcmVmQXVkaW9CaXRyYXRlVHlwZTsKLSAgcHJpdmF0ZSBTdHJpbmcg
a2V5cHJlZkF1ZGlvQml0cmF0ZVZhbHVlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQXVkaW9D
b2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkh3Q29kZWNBY2NlbGVyYXRpb247Ci0gIHBy
aXZhdGUgU3RyaW5nIGtleXByZWZDYXB0dXJlVG9UZXh0dXJlOwotICBwcml2YXRlIFN0cmluZyBr
ZXlwcmVmTm9BdWRpb1Byb2Nlc3NpbmdQaXBlbGluZTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJl
ZkFlY0R1bXA7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZPcGVuU0xFUzsKLSAgcHJpdmF0ZSBT
dHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluQWVjOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVm
RGlzYWJsZUJ1aWx0SW5BZ2M7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVpbHRJ
bk5zOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sOwotICBwcml2
YXRlIFN0cmluZyBrZXlwcmVmRGlzcGxheUh1ZDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlRy
YWNpbmc7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZSb29tU2VydmVyVXJsOwotICBwcml2YXRl
IFN0cmluZyBrZXlwcmVmUm9vbTsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlJvb21MaXN0Owot
ICBwcml2YXRlIEFycmF5TGlzdDxTdHJpbmc+IHJvb21MaXN0OwotICBwcml2YXRlIEFycmF5QWRh
cHRlcjxTdHJpbmc+IGFkYXB0ZXI7Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ3Jl
YXRlKEJ1bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0ZShzYXZl
ZEluc3RhbmNlU3RhdGUpOwotCi0gICAgLy8gR2V0IHNldHRpbmcga2V5cy4KLSAgICBQcmVmZXJl
bmNlTWFuYWdlci5zZXREZWZhdWx0VmFsdWVzKHRoaXMsIFIueG1sLnByZWZlcmVuY2VzLCBmYWxz
ZSk7Ci0gICAgc2hhcmVkUHJlZiA9IFByZWZlcmVuY2VNYW5hZ2VyLmdldERlZmF1bHRTaGFyZWRQ
cmVmZXJlbmNlcyh0aGlzKTsKLSAgICBrZXlwcmVmVmlkZW9DYWxsRW5hYmxlZCA9IGdldFN0cmlu
ZyhSLnN0cmluZy5wcmVmX3ZpZGVvY2FsbF9rZXkpOwotICAgIGtleXByZWZTY3JlZW5jYXB0dXJl
ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc2NyZWVuY2FwdHVyZV9rZXkpOwotICAgIGtleXBy
ZWZDYW1lcmEyID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfY2FtZXJhMl9rZXkpOwotICAgIGtl
eXByZWZSZXNvbHV0aW9uID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcmVzb2x1dGlvbl9rZXkp
OwotICAgIGtleXByZWZGcHMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9mcHNfa2V5KTsKLSAg
ICBrZXlwcmVmQ2FwdHVyZVF1YWxpdHlTbGlkZXIgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9j
YXB0dXJlcXVhbGl0eXNsaWRlcl9rZXkpOwotICAgIGtleXByZWZWaWRlb0JpdHJhdGVUeXBlID0g
Z2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRyYXRlX2tleSk7Ci0gICAga2V5cHJl
ZlZpZGVvQml0cmF0ZVZhbHVlID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9iaXRy
YXRldmFsdWVfa2V5KTsKLSAgICBrZXlwcmVmVmlkZW9Db2RlYyA9IGdldFN0cmluZyhSLnN0cmlu
Zy5wcmVmX3ZpZGVvY29kZWNfa2V5KTsKLSAgICBrZXlwcmVmSHdDb2RlY0FjY2VsZXJhdGlvbiA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2h3Y29kZWNfa2V5KTsKLSAgICBrZXlwcmVmQ2FwdHVy
ZVRvVGV4dHVyZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmV0b3RleHR1cmVfa2V5
KTsKLSAgICBrZXlwcmVmQXVkaW9CaXRyYXRlVHlwZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X3N0YXJ0YXVkaW9iaXRyYXRlX2tleSk7Ci0gICAga2V5cHJlZkF1ZGlvQml0cmF0ZVZhbHVlID0g
Z2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGV2YWx1ZV9rZXkpOwotICAg
IGtleXByZWZBdWRpb0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYXVkaW9jb2RlY19r
ZXkpOwotICAgIGtleXByZWZOb0F1ZGlvUHJvY2Vzc2luZ1BpcGVsaW5lID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfbm9hdWRpb3Byb2Nlc3Npbmdfa2V5KTsKLSAgICBrZXlwcmVmQWVjRHVtcCA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2FlY2R1bXBfa2V5KTsKLSAgICBrZXlwcmVmT3BlblNM
RVMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9vcGVuc2xlc19rZXkpOwotICAgIGtleXByZWZE
aXNhYmxlQnVpbHRJbkFlYyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRf
aW5fYWVjX2tleSk7Ci0gICAga2V5cHJlZkRpc2FibGVCdWlsdEluQWdjID0gZ2V0U3RyaW5nKFIu
c3RyaW5nLnByZWZfZGlzYWJsZV9idWlsdF9pbl9hZ2Nfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJs
ZUJ1aWx0SW5OcyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNf
a2V5KTsKLSAgICBrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sID0gZ2V0U3RyaW5nKFIuc3RyaW5n
LnByZWZfZW5hYmxlX2xldmVsX2NvbnRyb2xfa2V5KTsKLSAgICBrZXlwcmVmRGlzcGxheUh1ZCA9
IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Rpc3BsYXlodWRfa2V5KTsKLSAgICBrZXlwcmVmVHJh
Y2luZyA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3RyYWNpbmdfa2V5KTsKLSAgICBrZXlwcmVm
Um9vbVNlcnZlclVybCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jvb21fc2VydmVyX3VybF9r
ZXkpOwotICAgIGtleXByZWZSb29tID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcm9vbV9rZXkp
OwotICAgIGtleXByZWZSb29tTGlzdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3Jvb21fbGlz
dF9rZXkpOwotCi0gICAgc2V0Q29udGVudFZpZXcoUi5sYXlvdXQuYWN0aXZpdHlfY29ubmVjdCk7
Ci0KLSAgICByb29tRWRpdFRleHQgPSAoRWRpdFRleHQpIGZpbmRWaWV3QnlJZChSLmlkLnJvb21f
ZWRpdHRleHQpOwotICAgIHJvb21FZGl0VGV4dC5zZXRPbkVkaXRvckFjdGlvbkxpc3RlbmVyKG5l
dyBUZXh0Vmlldy5PbkVkaXRvckFjdGlvbkxpc3RlbmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgYm9vbGVhbiBvbkVkaXRvckFjdGlvbihUZXh0VmlldyB0ZXh0VmlldywgaW50
IGksIEtleUV2ZW50IGtleUV2ZW50KSB7Ci0gICAgICAgIGlmIChpID09IEVkaXRvckluZm8uSU1F
X0FDVElPTl9ET05FKSB7Ci0gICAgICAgICAgYWRkRmF2b3JpdGVCdXR0b24ucGVyZm9ybUNsaWNr
KCk7Ci0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgfQotICAgIH0pOwotICAgIHJvb21FZGl0VGV4dC5yZXF1ZXN0Rm9jdXMoKTsK
LQotICAgIHJvb21MaXN0VmlldyA9IChMaXN0VmlldykgZmluZFZpZXdCeUlkKFIuaWQucm9vbV9s
aXN0dmlldyk7Ci0gICAgcm9vbUxpc3RWaWV3LnNldEVtcHR5VmlldyhmaW5kVmlld0J5SWQoYW5k
cm9pZC5SLmlkLmVtcHR5KSk7Ci0gICAgcm9vbUxpc3RWaWV3LnNldE9uSXRlbUNsaWNrTGlzdGVu
ZXIocm9vbUxpc3RDbGlja0xpc3RlbmVyKTsKLSAgICByZWdpc3RlckZvckNvbnRleHRNZW51KHJv
b21MaXN0Vmlldyk7Ci0gICAgY29ubmVjdEJ1dHRvbiA9IChJbWFnZUJ1dHRvbikgZmluZFZpZXdC
eUlkKFIuaWQuY29ubmVjdF9idXR0b24pOwotICAgIGNvbm5lY3RCdXR0b24uc2V0T25DbGlja0xp
c3RlbmVyKGNvbm5lY3RMaXN0ZW5lcik7Ci0gICAgYWRkRmF2b3JpdGVCdXR0b24gPSAoSW1hZ2VC
dXR0b24pIGZpbmRWaWV3QnlJZChSLmlkLmFkZF9mYXZvcml0ZV9idXR0b24pOwotICAgIGFkZEZh
dm9yaXRlQnV0dG9uLnNldE9uQ2xpY2tMaXN0ZW5lcihhZGRGYXZvcml0ZUxpc3RlbmVyKTsKLQot
ICAgIC8vIElmIGFuIGltcGxpY2l0IFZJRVcgaW50ZW50IGlzIGxhdW5jaGluZyB0aGUgYXBwLCBn
byBkaXJlY3RseSB0byB0aGF0IFVSTC4KLSAgICBmaW5hbCBJbnRlbnQgaW50ZW50ID0gZ2V0SW50
ZW50KCk7Ci0gICAgaWYgKCJhbmRyb2lkLmludGVudC5hY3Rpb24uVklFVyIuZXF1YWxzKGludGVu
dC5nZXRBY3Rpb24oKSkgJiYgIWNvbW1hbmRMaW5lUnVuKSB7Ci0gICAgICBib29sZWFuIGxvb3Bi
YWNrID0gaW50ZW50LmdldEJvb2xlYW5FeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfTE9PUEJBQ0ss
IGZhbHNlKTsKLSAgICAgIGludCBydW5UaW1lTXMgPSBpbnRlbnQuZ2V0SW50RXh0cmEoQ2FsbEFj
dGl2aXR5LkVYVFJBX1JVTlRJTUUsIDApOwotICAgICAgYm9vbGVhbiB1c2VWYWx1ZXNGcm9tSW50
ZW50ID0KLSAgICAgICAgICBpbnRlbnQuZ2V0Qm9vbGVhbkV4dHJhKENhbGxBY3Rpdml0eS5FWFRS
QV9VU0VfVkFMVUVTX0ZST01fSU5URU5ULCBmYWxzZSk7Ci0gICAgICBTdHJpbmcgcm9vbSA9IHNo
YXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZSb29tLCAiIik7Ci0gICAgICBjb25uZWN0VG9Sb29t
KHJvb20sIHRydWUsIGxvb3BiYWNrLCB1c2VWYWx1ZXNGcm9tSW50ZW50LCBydW5UaW1lTXMpOwot
ICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVhbiBvbkNyZWF0ZU9wdGlv
bnNNZW51KE1lbnUgbWVudSkgewotICAgIGdldE1lbnVJbmZsYXRlcigpLmluZmxhdGUoUi5tZW51
LmNvbm5lY3RfbWVudSwgbWVudSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25DcmVhdGVDb250ZXh0TWVudShDb250ZXh0TWVudSBtZW51LCBW
aWV3IHYsIENvbnRleHRNZW51LkNvbnRleHRNZW51SW5mbyBtZW51SW5mbykgewotICAgIGlmICh2
LmdldElkKCkgPT0gUi5pZC5yb29tX2xpc3R2aWV3KSB7Ci0gICAgICBBZGFwdGVyVmlldy5BZGFw
dGVyQ29udGV4dE1lbnVJbmZvIGluZm8gPSAoQWRhcHRlclZpZXcuQWRhcHRlckNvbnRleHRNZW51
SW5mbykgbWVudUluZm87Ci0gICAgICBtZW51LnNldEhlYWRlclRpdGxlKHJvb21MaXN0LmdldChp
bmZvLnBvc2l0aW9uKSk7Ci0gICAgICBTdHJpbmdbXSBtZW51SXRlbXMgPSBnZXRSZXNvdXJjZXMo
KS5nZXRTdHJpbmdBcnJheShSLmFycmF5LnJvb21MaXN0Q29udGV4dE1lbnUpOwotICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtZW51SXRlbXMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgbWVudS5h
ZGQoTWVudS5OT05FLCBpLCBpLCBtZW51SXRlbXNbaV0pOwotICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICBzdXBlci5vbkNyZWF0ZUNvbnRleHRNZW51KG1lbnUsIHYsIG1lbnVJbmZvKTsKLSAg
ICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gb25Db250ZXh0SXRlbVNl
bGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKLSAgICBpZiAoaXRlbS5nZXRJdGVtSWQoKSA9PSBSRU1P
VkVfRkFWT1JJVEVfSU5ERVgpIHsKLSAgICAgIEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVu
dUluZm8gaW5mbyA9Ci0gICAgICAgICAgKEFkYXB0ZXJWaWV3LkFkYXB0ZXJDb250ZXh0TWVudUlu
Zm8pIGl0ZW0uZ2V0TWVudUluZm8oKTsKLSAgICAgIHJvb21MaXN0LnJlbW92ZShpbmZvLnBvc2l0
aW9uKTsKLSAgICAgIGFkYXB0ZXIubm90aWZ5RGF0YVNldENoYW5nZWQoKTsKLSAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBzdXBlci5vbkNvbnRleHRJdGVtU2VsZWN0ZWQo
aXRlbSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIGJvb2xlYW4gb25PcHRpb25zSXRl
bVNlbGVjdGVkKE1lbnVJdGVtIGl0ZW0pIHsKLSAgICAvLyBIYW5kbGUgcHJlc3NlcyBvbiB0aGUg
YWN0aW9uIGJhciBpdGVtcy4KLSAgICBpZiAoaXRlbS5nZXRJdGVtSWQoKSA9PSBSLmlkLmFjdGlv
bl9zZXR0aW5ncykgewotICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQodGhpcywgU2V0
dGluZ3NBY3Rpdml0eS5jbGFzcyk7Ci0gICAgICBzdGFydEFjdGl2aXR5KGludGVudCk7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKGl0ZW0uZ2V0SXRlbUlkKCkgPT0gUi5pZC5h
Y3Rpb25fbG9vcGJhY2spIHsKLSAgICAgIGNvbm5lY3RUb1Jvb20obnVsbCwgZmFsc2UsIHRydWUs
IGZhbHNlLCAwKTsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1
cm4gc3VwZXIub25PcHRpb25zSXRlbVNlbGVjdGVkKGl0ZW0pOwotICAgIH0KLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBhdXNlKCkgewotICAgIHN1cGVyLm9uUGF1c2UoKTsK
LSAgICBTdHJpbmcgcm9vbSA9IHJvb21FZGl0VGV4dC5nZXRUZXh0KCkudG9TdHJpbmcoKTsKLSAg
ICBTdHJpbmcgcm9vbUxpc3RKc29uID0gbmV3IEpTT05BcnJheShyb29tTGlzdCkudG9TdHJpbmco
KTsKLSAgICBTaGFyZWRQcmVmZXJlbmNlcy5FZGl0b3IgZWRpdG9yID0gc2hhcmVkUHJlZi5lZGl0
KCk7Ci0gICAgZWRpdG9yLnB1dFN0cmluZyhrZXlwcmVmUm9vbSwgcm9vbSk7Ci0gICAgZWRpdG9y
LnB1dFN0cmluZyhrZXlwcmVmUm9vbUxpc3QsIHJvb21MaXN0SnNvbik7Ci0gICAgZWRpdG9yLmNv
bW1pdCgpOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUmVzdW1lKCkgewot
ICAgIHN1cGVyLm9uUmVzdW1lKCk7Ci0gICAgU3RyaW5nIHJvb20gPSBzaGFyZWRQcmVmLmdldFN0
cmluZyhrZXlwcmVmUm9vbSwgIiIpOwotICAgIHJvb21FZGl0VGV4dC5zZXRUZXh0KHJvb20pOwot
ICAgIHJvb21MaXN0ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgU3RyaW5nIHJvb21M
aXN0SnNvbiA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZSb29tTGlzdCwgbnVsbCk7Ci0g
ICAgaWYgKHJvb21MaXN0SnNvbiAhPSBudWxsKSB7Ci0gICAgICB0cnkgewotICAgICAgICBKU09O
QXJyYXkganNvbkFycmF5ID0gbmV3IEpTT05BcnJheShyb29tTGlzdEpzb24pOwotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGpzb25BcnJheS5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAg
cm9vbUxpc3QuYWRkKGpzb25BcnJheS5nZXQoaSkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0KLSAg
ICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgICBMb2cuZShUQUcsICJGYWls
ZWQgdG8gbG9hZCByb29tIGxpc3Q6ICIgKyBlLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0K
LSAgICBhZGFwdGVyID0gbmV3IEFycmF5QWRhcHRlcjxTdHJpbmc+KHRoaXMsIGFuZHJvaWQuUi5s
YXlvdXQuc2ltcGxlX2xpc3RfaXRlbV8xLCByb29tTGlzdCk7Ci0gICAgcm9vbUxpc3RWaWV3LnNl
dEFkYXB0ZXIoYWRhcHRlcik7Ci0gICAgaWYgKGFkYXB0ZXIuZ2V0Q291bnQoKSA+IDApIHsKLSAg
ICAgIHJvb21MaXN0Vmlldy5yZXF1ZXN0Rm9jdXMoKTsKLSAgICAgIHJvb21MaXN0Vmlldy5zZXRJ
dGVtQ2hlY2tlZCgwLCB0cnVlKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVj
dGVkIHZvaWQgb25BY3Rpdml0eVJlc3VsdChpbnQgcmVxdWVzdENvZGUsIGludCByZXN1bHRDb2Rl
LCBJbnRlbnQgZGF0YSkgewotICAgIGlmIChyZXF1ZXN0Q29kZSA9PSBDT05ORUNUSU9OX1JFUVVF
U1QgJiYgY29tbWFuZExpbmVSdW4pIHsKLSAgICAgIExvZy5kKFRBRywgIlJldHVybjogIiArIHJl
c3VsdENvZGUpOwotICAgICAgc2V0UmVzdWx0KHJlc3VsdENvZGUpOwotICAgICAgY29tbWFuZExp
bmVSdW4gPSBmYWxzZTsKLSAgICAgIGZpbmlzaCgpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAg
KiBHZXQgYSB2YWx1ZSBmcm9tIHRoZSBzaGFyZWQgcHJlZmVyZW5jZSBvciBmcm9tIHRoZSBpbnRl
bnQsIGlmIGl0IGRvZXMgbm90Ci0gICAqIGV4aXN0IHRoZSBkZWZhdWx0IGlzIHVzZWQuCi0gICAq
LwotICBwcml2YXRlIFN0cmluZyBzaGFyZWRQcmVmR2V0U3RyaW5nKAotICAgICAgaW50IGF0dHJp
YnV0ZUlkLCBTdHJpbmcgaW50ZW50TmFtZSwgaW50IGRlZmF1bHRJZCwgYm9vbGVhbiB1c2VGcm9t
SW50ZW50KSB7Ci0gICAgU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IGdldFN0cmluZyhkZWZhdWx0SWQp
OwotICAgIGlmICh1c2VGcm9tSW50ZW50KSB7Ci0gICAgICBTdHJpbmcgdmFsdWUgPSBnZXRJbnRl
bnQoKS5nZXRTdHJpbmdFeHRyYShpbnRlbnROYW1lKTsKLSAgICAgIGlmICh2YWx1ZSAhPSBudWxs
KSB7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBkZWZhdWx0
VmFsdWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gZ2V0U3Ry
aW5nKGF0dHJpYnV0ZUlkKTsKLSAgICAgIHJldHVybiBzaGFyZWRQcmVmLmdldFN0cmluZyhhdHRy
aWJ1dGVOYW1lLCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLSAgfQotCi0gIC8qKgotICAgKiBHZXQg
YSB2YWx1ZSBmcm9tIHRoZSBzaGFyZWQgcHJlZmVyZW5jZSBvciBmcm9tIHRoZSBpbnRlbnQsIGlm
IGl0IGRvZXMgbm90Ci0gICAqIGV4aXN0IHRoZSBkZWZhdWx0IGlzIHVzZWQuCi0gICAqLwotICBw
cml2YXRlIGJvb2xlYW4gc2hhcmVkUHJlZkdldEJvb2xlYW4oCi0gICAgICBpbnQgYXR0cmlidXRl
SWQsIFN0cmluZyBpbnRlbnROYW1lLCBpbnQgZGVmYXVsdElkLCBib29sZWFuIHVzZUZyb21JbnRl
bnQpIHsKLSAgICBib29sZWFuIGRlZmF1bHRWYWx1ZSA9IEJvb2xlYW4udmFsdWVPZihnZXRTdHJp
bmcoZGVmYXVsdElkKSk7Ci0gICAgaWYgKHVzZUZyb21JbnRlbnQpIHsKLSAgICAgIHJldHVybiBn
ZXRJbnRlbnQoKS5nZXRCb29sZWFuRXh0cmEoaW50ZW50TmFtZSwgZGVmYXVsdFZhbHVlKTsKLSAg
ICB9IGVsc2UgewotICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUgPSBnZXRTdHJpbmcoYXR0cmli
dXRlSWQpOwotICAgICAgcmV0dXJuIHNoYXJlZFByZWYuZ2V0Qm9vbGVhbihhdHRyaWJ1dGVOYW1l
LCBkZWZhdWx0VmFsdWUpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjb25uZWN0VG9S
b29tKFN0cmluZyByb29tSWQsIGJvb2xlYW4gY29tbWFuZExpbmVSdW4sIGJvb2xlYW4gbG9vcGJh
Y2ssCi0gICAgICBib29sZWFuIHVzZVZhbHVlc0Zyb21JbnRlbnQsIGludCBydW5UaW1lTXMpIHsK
LSAgICB0aGlzLmNvbW1hbmRMaW5lUnVuID0gY29tbWFuZExpbmVSdW47Ci0KLSAgICAvLyByb29t
SWQgaXMgcmFuZG9tIGZvciBsb29wYmFjay4KLSAgICBpZiAobG9vcGJhY2spIHsKLSAgICAgIHJv
b21JZCA9IEludGVnZXIudG9TdHJpbmcoKG5ldyBSYW5kb20oKSkubmV4dEludCgxMDAwMDAwMDAp
KTsKLSAgICB9Ci0KLSAgICBTdHJpbmcgcm9vbVVybCA9IHNoYXJlZFByZWYuZ2V0U3RyaW5nKAot
ICAgICAgICBrZXlwcmVmUm9vbVNlcnZlclVybCwgZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfcm9v
bV9zZXJ2ZXJfdXJsX2RlZmF1bHQpKTsKLQotICAgIC8vIFZpZGVvIGNhbGwgZW5hYmxlZCBmbGFn
LgotICAgIGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZCA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIu
c3RyaW5nLnByZWZfdmlkZW9jYWxsX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJ
REVPX0NBTEwsIFIuc3RyaW5nLnByZWZfdmlkZW9jYWxsX2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21J
bnRlbnQpOwotCi0gICAgLy8gVXNlIHNjcmVlbmNhcHR1cmUgb3B0aW9uLgotICAgIGJvb2xlYW4g
dXNlU2NyZWVuY2FwdHVyZSA9IHNoYXJlZFByZWZHZXRCb29sZWFuKFIuc3RyaW5nLnByZWZfc2Ny
ZWVuY2FwdHVyZV9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9TQ1JFRU5DQVBUVVJF
LCBSLnN0cmluZy5wcmVmX3NjcmVlbmNhcHR1cmVfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVu
dCk7Ci0KLSAgICAvLyBVc2UgQ2FtZXJhMiBvcHRpb24uCi0gICAgYm9vbGVhbiB1c2VDYW1lcmEy
ID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9jYW1lcmEyX2tleSwgQ2FsbEFj
dGl2aXR5LkVYVFJBX0NBTUVSQTIsCi0gICAgICAgIFIuc3RyaW5nLnByZWZfY2FtZXJhMl9kZWZh
dWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIEdldCBkZWZhdWx0IGNvZGVjcy4K
LSAgICBTdHJpbmcgdmlkZW9Db2RlYyA9IHNoYXJlZFByZWZHZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl92aWRlb2NvZGVjX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPQ09ERUMs
IFIuc3RyaW5nLnByZWZfdmlkZW9jb2RlY19kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsK
LSAgICBTdHJpbmcgYXVkaW9Db2RlYyA9IHNoYXJlZFByZWZHZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl9hdWRpb2NvZGVjX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0FVRElPQ09ERUMs
IFIuc3RyaW5nLnByZWZfYXVkaW9jb2RlY19kZWZhdWx0LCB1c2VWYWx1ZXNGcm9tSW50ZW50KTsK
LQotICAgIC8vIENoZWNrIEhXIGNvZGVjIGZsYWcuCi0gICAgYm9vbGVhbiBod0NvZGVjID0gc2hh
cmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9od2NvZGVjX2tleSwKLSAgICAgICAgQ2Fs
bEFjdGl2aXR5LkVYVFJBX0hXQ09ERUNfRU5BQkxFRCwgUi5zdHJpbmcucHJlZl9od2NvZGVjX2Rl
ZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sgQ2FwdHVyZSB0byB0
ZXh0dXJlLgotICAgIGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSA9IHNoYXJlZFByZWZHZXRCb29s
ZWFuKFIuc3RyaW5nLnByZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXksCi0gICAgICAgIENhbGxBY3Rp
dml0eS5FWFRSQV9DQVBUVVJFVE9URVhUVVJFX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfY2FwdHVy
ZXRvdGV4dHVyZV9kZWZhdWx0LAotICAgICAgICB1c2VWYWx1ZXNGcm9tSW50ZW50KTsKLQotICAg
IC8vIENoZWNrIERpc2FibGUgQXVkaW8gUHJvY2Vzc2luZyBmbGFnLgotICAgIGJvb2xlYW4gbm9B
dWRpb1Byb2Nlc3NpbmcgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX25vYXVk
aW9wcm9jZXNzaW5nX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX05PQVVESU9QUk9D
RVNTSU5HX0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfbm9hdWRpb3Byb2Nlc3NpbmdfZGVmYXVsdCwK
LSAgICAgICAgdXNlVmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxlIEF1
ZGlvIFByb2Nlc3NpbmcgZmxhZy4KLSAgICBib29sZWFuIGFlY0R1bXAgPSBzaGFyZWRQcmVmR2V0
Qm9vbGVhbihSLnN0cmluZy5wcmVmX2FlY2R1bXBfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHku
RVhUUkFfQUVDRFVNUF9FTkFCTEVELCBSLnN0cmluZy5wcmVmX2FlY2R1bXBfZGVmYXVsdCwgdXNl
VmFsdWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBDaGVjayBPcGVuU0wgRVMgZW5hYmxlZCBmbGFn
LgotICAgIGJvb2xlYW4gdXNlT3BlblNMRVMgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmlu
Zy5wcmVmX29wZW5zbGVzX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX09QRU5TTEVT
X0VOQUJMRUQsIFIuc3RyaW5nLnByZWZfb3BlbnNsZXNfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUlu
dGVudCk7Ci0KLSAgICAvLyBDaGVjayBEaXNhYmxlIGJ1aWx0LWluIEFFQyBmbGFnLgotICAgIGJv
b2xlYW4gZGlzYWJsZUJ1aWx0SW5BRUMgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5w
cmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJB
X0RJU0FCTEVfQlVJTFRfSU5fQUVDLCBSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVj
X2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gQ2hlY2sg
RGlzYWJsZSBidWlsdC1pbiBBR0MgZmxhZy4KLSAgICBib29sZWFuIGRpc2FibGVCdWlsdEluQUdD
ID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2Fn
Y19rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FHQywg
Ui5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0X2luX2FnY19kZWZhdWx0LAotICAgICAgICB1c2VW
YWx1ZXNGcm9tSW50ZW50KTsKLQotICAgIC8vIENoZWNrIERpc2FibGUgYnVpbHQtaW4gTlMgZmxh
Zy4KLSAgICBib29sZWFuIGRpc2FibGVCdWlsdEluTlMgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihS
LnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfa2V5LAotICAgICAgICBDYWxsQWN0aXZp
dHkuRVhUUkFfRElTQUJMRV9CVUlMVF9JTl9OUywgUi5zdHJpbmcucHJlZl9kaXNhYmxlX2J1aWx0
X2luX25zX2RlZmF1bHQsCi0gICAgICAgIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8g
Q2hlY2sgRW5hYmxlIGxldmVsIGNvbnRyb2wuCi0gICAgYm9vbGVhbiBlbmFibGVMZXZlbENvbnRy
b2wgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihSLnN0cmluZy5wcmVmX2VuYWJsZV9sZXZlbF9jb250
cm9sX2tleSwKLSAgICAgICAgQ2FsbEFjdGl2aXR5LkVYVFJBX0VOQUJMRV9MRVZFTF9DT05UUk9M
LCBSLnN0cmluZy5wcmVmX2VuYWJsZV9sZXZlbF9jb250cm9sX2tleSwKLSAgICAgICAgdXNlVmFs
dWVzRnJvbUludGVudCk7Ci0KLSAgICAvLyBHZXQgdmlkZW8gcmVzb2x1dGlvbiBmcm9tIHNldHRp
bmdzLgotICAgIGludCB2aWRlb1dpZHRoID0gMDsKLSAgICBpbnQgdmlkZW9IZWlnaHQgPSAwOwot
ICAgIGlmICh1c2VWYWx1ZXNGcm9tSW50ZW50KSB7Ci0gICAgICB2aWRlb1dpZHRoID0gZ2V0SW50
ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX1dJRFRILCAwKTsKLSAg
ICAgIHZpZGVvSGVpZ2h0ID0gZ2V0SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVY
VFJBX1ZJREVPX0hFSUdIVCwgMCk7Ci0gICAgfQotICAgIGlmICh2aWRlb1dpZHRoID09IDAgJiYg
dmlkZW9IZWlnaHQgPT0gMCkgewotICAgICAgU3RyaW5nIHJlc29sdXRpb24gPQotICAgICAgICAg
IHNoYXJlZFByZWYuZ2V0U3RyaW5nKGtleXByZWZSZXNvbHV0aW9uLCBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9yZXNvbHV0aW9uX2RlZmF1bHQpKTsKLSAgICAgIFN0cmluZ1tdIGRpbWVuc2lvbnMg
PSByZXNvbHV0aW9uLnNwbGl0KCJbIHhdKyIpOwotICAgICAgaWYgKGRpbWVuc2lvbnMubGVuZ3Ro
ID09IDIpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICB2aWRlb1dpZHRoID0gSW50ZWdlci5w
YXJzZUludChkaW1lbnNpb25zWzBdKTsKLSAgICAgICAgICB2aWRlb0hlaWdodCA9IEludGVnZXIu
cGFyc2VJbnQoZGltZW5zaW9uc1sxXSk7Ci0gICAgICAgIH0gY2F0Y2ggKE51bWJlckZvcm1hdEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgdmlkZW9XaWR0aCA9IDA7Ci0gICAgICAgICAgdmlkZW9I
ZWlnaHQgPSAwOwotICAgICAgICAgIExvZy5lKFRBRywgIldyb25nIHZpZGVvIHJlc29sdXRpb24g
c2V0dGluZzogIiArIHJlc29sdXRpb24pOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgLy8gR2V0IGNhbWVyYSBmcHMgZnJvbSBzZXR0aW5ncy4KLSAgICBpbnQgY2FtZXJhRnBzID0g
MDsKLSAgICBpZiAodXNlVmFsdWVzRnJvbUludGVudCkgewotICAgICAgY2FtZXJhRnBzID0gZ2V0
SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0ZQUywgMCk7Ci0g
ICAgfQotICAgIGlmIChjYW1lcmFGcHMgPT0gMCkgewotICAgICAgU3RyaW5nIGZwcyA9IHNoYXJl
ZFByZWYuZ2V0U3RyaW5nKGtleXByZWZGcHMsIGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2Zwc19k
ZWZhdWx0KSk7Ci0gICAgICBTdHJpbmdbXSBmcHNWYWx1ZXMgPSBmcHMuc3BsaXQoIlsgeF0rIik7
Ci0gICAgICBpZiAoZnBzVmFsdWVzLmxlbmd0aCA9PSAyKSB7Ci0gICAgICAgIHRyeSB7Ci0gICAg
ICAgICAgY2FtZXJhRnBzID0gSW50ZWdlci5wYXJzZUludChmcHNWYWx1ZXNbMF0pOwotICAgICAg
ICB9IGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZSkgewotICAgICAgICAgIGNhbWVyYUZw
cyA9IDA7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiV3JvbmcgY2FtZXJhIGZwcyBzZXR0aW5nOiAi
ICsgZnBzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIC8vIENoZWNrIGNhcHR1
cmUgcXVhbGl0eSBzbGlkZXIgZmxhZy4KLSAgICBib29sZWFuIGNhcHR1cmVRdWFsaXR5U2xpZGVy
ID0gc2hhcmVkUHJlZkdldEJvb2xlYW4oUi5zdHJpbmcucHJlZl9jYXB0dXJlcXVhbGl0eXNsaWRl
cl9rZXksCi0gICAgICAgIENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQVBUVVJFUVVBTElUWVNM
SURFUl9FTkFCTEVELAotICAgICAgICBSLnN0cmluZy5wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVy
X2RlZmF1bHQsIHVzZVZhbHVlc0Zyb21JbnRlbnQpOwotCi0gICAgLy8gR2V0IHZpZGVvIGFuZCBh
dWRpbyBzdGFydCBiaXRyYXRlLgotICAgIGludCB2aWRlb1N0YXJ0Qml0cmF0ZSA9IDA7Ci0gICAg
aWYgKHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsKLSAgICAgIHZpZGVvU3RhcnRCaXRyYXRlID0gZ2V0
SW50ZW50KCkuZ2V0SW50RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0JJVFJBVEUsIDAp
OwotICAgIH0KLSAgICBpZiAodmlkZW9TdGFydEJpdHJhdGUgPT0gMCkgewotICAgICAgU3RyaW5n
IGJpdHJhdGVUeXBlRGVmYXVsdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZpZGVvYml0
cmF0ZV9kZWZhdWx0KTsKLSAgICAgIFN0cmluZyBiaXRyYXRlVHlwZSA9IHNoYXJlZFByZWYuZ2V0
U3RyaW5nKGtleXByZWZWaWRlb0JpdHJhdGVUeXBlLCBiaXRyYXRlVHlwZURlZmF1bHQpOwotICAg
ICAgaWYgKCFiaXRyYXRlVHlwZS5lcXVhbHMoYml0cmF0ZVR5cGVEZWZhdWx0KSkgewotICAgICAg
ICBTdHJpbmcgYml0cmF0ZVZhbHVlID0gc2hhcmVkUHJlZi5nZXRTdHJpbmcoCi0gICAgICAgICAg
ICBrZXlwcmVmVmlkZW9CaXRyYXRlVmFsdWUsIGdldFN0cmluZyhSLnN0cmluZy5wcmVmX21heHZp
ZGVvYml0cmF0ZXZhbHVlX2RlZmF1bHQpKTsKLSAgICAgICAgdmlkZW9TdGFydEJpdHJhdGUgPSBJ
bnRlZ2VyLnBhcnNlSW50KGJpdHJhdGVWYWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaW50
IGF1ZGlvU3RhcnRCaXRyYXRlID0gMDsKLSAgICBpZiAodXNlVmFsdWVzRnJvbUludGVudCkgewot
ICAgICAgYXVkaW9TdGFydEJpdHJhdGUgPSBnZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0
aXZpdHkuRVhUUkFfQVVESU9fQklUUkFURSwgMCk7Ci0gICAgfQotICAgIGlmIChhdWRpb1N0YXJ0
Qml0cmF0ZSA9PSAwKSB7Ci0gICAgICBTdHJpbmcgYml0cmF0ZVR5cGVEZWZhdWx0ID0gZ2V0U3Ry
aW5nKFIuc3RyaW5nLnByZWZfc3RhcnRhdWRpb2JpdHJhdGVfZGVmYXVsdCk7Ci0gICAgICBTdHJp
bmcgYml0cmF0ZVR5cGUgPSBzaGFyZWRQcmVmLmdldFN0cmluZyhrZXlwcmVmQXVkaW9CaXRyYXRl
VHlwZSwgYml0cmF0ZVR5cGVEZWZhdWx0KTsKLSAgICAgIGlmICghYml0cmF0ZVR5cGUuZXF1YWxz
KGJpdHJhdGVUeXBlRGVmYXVsdCkpIHsKLSAgICAgICAgU3RyaW5nIGJpdHJhdGVWYWx1ZSA9IHNo
YXJlZFByZWYuZ2V0U3RyaW5nKAotICAgICAgICAgICAga2V5cHJlZkF1ZGlvQml0cmF0ZVZhbHVl
LCBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2RlZmF1bHQp
KTsKLSAgICAgICAgYXVkaW9TdGFydEJpdHJhdGUgPSBJbnRlZ2VyLnBhcnNlSW50KGJpdHJhdGVW
YWx1ZSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgc3RhdGlzdGljcyBkaXNwbGF5
IG9wdGlvbi4KLSAgICBib29sZWFuIGRpc3BsYXlIdWQgPSBzaGFyZWRQcmVmR2V0Qm9vbGVhbihS
LnN0cmluZy5wcmVmX2Rpc3BsYXlodWRfa2V5LAotICAgICAgICBDYWxsQWN0aXZpdHkuRVhUUkFf
RElTUExBWV9IVUQsIFIuc3RyaW5nLnByZWZfZGlzcGxheWh1ZF9kZWZhdWx0LCB1c2VWYWx1ZXNG
cm9tSW50ZW50KTsKLQotICAgIGJvb2xlYW4gdHJhY2luZyA9IHNoYXJlZFByZWZHZXRCb29sZWFu
KFIuc3RyaW5nLnByZWZfdHJhY2luZ19rZXksIENhbGxBY3Rpdml0eS5FWFRSQV9UUkFDSU5HLAot
ICAgICAgICBSLnN0cmluZy5wcmVmX3RyYWNpbmdfZGVmYXVsdCwgdXNlVmFsdWVzRnJvbUludGVu
dCk7Ci0KLSAgICAvLyBTdGFydCBBcHBSVENNb2JpbGUgYWN0aXZpdHkuCi0gICAgTG9nLmQoVEFH
LCAiQ29ubmVjdGluZyB0byByb29tICIgKyByb29tSWQgKyAiIGF0IFVSTCAiICsgcm9vbVVybCk7
Ci0gICAgaWYgKHZhbGlkYXRlVXJsKHJvb21VcmwpKSB7Ci0gICAgICBVcmkgdXJpID0gVXJpLnBh
cnNlKHJvb21VcmwpOwotICAgICAgSW50ZW50IGludGVudCA9IG5ldyBJbnRlbnQodGhpcywgQ2Fs
bEFjdGl2aXR5LmNsYXNzKTsKLSAgICAgIGludGVudC5zZXREYXRhKHVyaSk7Ci0gICAgICBpbnRl
bnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1JPT01JRCwgcm9vbUlkKTsKLSAgICAgIGlu
dGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfTE9PUEJBQ0ssIGxvb3BiYWNrKTsKLSAg
ICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fQ0FMTCwgdmlkZW9D
YWxsRW5hYmxlZCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ND
UkVFTkNBUFRVUkUsIHVzZVNjcmVlbmNhcHR1cmUpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENh
bGxBY3Rpdml0eS5FWFRSQV9DQU1FUkEyLCB1c2VDYW1lcmEyKTsKLSAgICAgIGludGVudC5wdXRF
eHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fV0lEVEgsIHZpZGVvV2lkdGgpOwotICAgICAg
aW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19IRUlHSFQsIHZpZGVvSGVp
Z2h0KTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVklERU9fRlBT
LCBjYW1lcmFGcHMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9W
SURFT19DQVBUVVJFUVVBTElUWVNMSURFUl9FTkFCTEVELCBjYXB0dXJlUXVhbGl0eVNsaWRlcik7
Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1ZJREVPX0JJVFJBVEUs
IHZpZGVvU3RhcnRCaXRyYXRlKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHku
RVhUUkFfVklERU9DT0RFQywgdmlkZW9Db2RlYyk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2Fs
bEFjdGl2aXR5LkVYVFJBX0hXQ09ERUNfRU5BQkxFRCwgaHdDb2RlYyk7Ci0gICAgICBpbnRlbnQu
cHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0NBUFRVUkVUT1RFWFRVUkVfRU5BQkxFRCwgY2Fw
dHVyZVRvVGV4dHVyZSk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJB
X05PQVVESU9QUk9DRVNTSU5HX0VOQUJMRUQsIG5vQXVkaW9Qcm9jZXNzaW5nKTsKLSAgICAgIGlu
dGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfQUVDRFVNUF9FTkFCTEVELCBhZWNEdW1w
KTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfT1BFTlNMRVNfRU5B
QkxFRCwgdXNlT3BlblNMRVMpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5F
WFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FFQywgZGlzYWJsZUJ1aWx0SW5BRUMpOwotICAgICAgaW50
ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9ESVNBQkxFX0JVSUxUX0lOX0FHQywgZGlz
YWJsZUJ1aWx0SW5BR0MpOwotICAgICAgaW50ZW50LnB1dEV4dHJhKENhbGxBY3Rpdml0eS5FWFRS
QV9ESVNBQkxFX0JVSUxUX0lOX05TLCBkaXNhYmxlQnVpbHRJbk5TKTsKLSAgICAgIGludGVudC5w
dXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfRU5BQkxFX0xFVkVMX0NPTlRST0wsIGVuYWJsZUxl
dmVsQ29udHJvbCk7Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0FV
RElPX0JJVFJBVEUsIGF1ZGlvU3RhcnRCaXRyYXRlKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShD
YWxsQWN0aXZpdHkuRVhUUkFfQVVESU9DT0RFQywgYXVkaW9Db2RlYyk7Ci0gICAgICBpbnRlbnQu
cHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU1BMQVlfSFVELCBkaXNwbGF5SHVkKTsKLSAg
ICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfVFJBQ0lORywgdHJhY2luZyk7
Ci0gICAgICBpbnRlbnQucHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX0NNRExJTkUsIGNvbW1h
bmRMaW5lUnVuKTsKLSAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfUlVO
VElNRSwgcnVuVGltZU1zKTsKLQotICAgICAgaWYgKHVzZVZhbHVlc0Zyb21JbnRlbnQpIHsKLSAg
ICAgICAgaWYgKGdldEludGVudCgpLmhhc0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19G
SUxFX0FTX0NBTUVSQSkpIHsKLSAgICAgICAgICBTdHJpbmcgdmlkZW9GaWxlQXNDYW1lcmEgPQot
ICAgICAgICAgICAgICBnZXRJbnRlbnQoKS5nZXRTdHJpbmdFeHRyYShDYWxsQWN0aXZpdHkuRVhU
UkFfVklERU9fRklMRV9BU19DQU1FUkEpOwotICAgICAgICAgIGludGVudC5wdXRFeHRyYShDYWxs
QWN0aXZpdHkuRVhUUkFfVklERU9fRklMRV9BU19DQU1FUkEsIHZpZGVvRmlsZUFzQ2FtZXJhKTsK
LSAgICAgICAgfQotCi0gICAgICAgIGlmIChnZXRJbnRlbnQoKS5oYXNFeHRyYShDYWxsQWN0aXZp
dHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRSkpIHsKLSAgICAgICAgICBTdHJpbmcg
c2F2ZVJlbW90ZVZpZGVvVG9GaWxlID0KLSAgICAgICAgICAgICAgZ2V0SW50ZW50KCkuZ2V0U3Ry
aW5nRXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEUpOwot
ICAgICAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVf
VklERU9fVE9fRklMRSwgc2F2ZVJlbW90ZVZpZGVvVG9GaWxlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChnZXRJbnRlbnQoKS5oYXNFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1P
VEVfVklERU9fVE9fRklMRV9XSURUSCkpIHsKLSAgICAgICAgICBpbnQgdmlkZW9PdXRXaWR0aCA9
Ci0gICAgICAgICAgICAgIGdldEludGVudCgpLmdldEludEV4dHJhKENhbGxBY3Rpdml0eS5FWFRS
QV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX1dJRFRILCAwKTsKLSAgICAgICAgICBpbnRlbnQu
cHV0RXh0cmEoQ2FsbEFjdGl2aXR5LkVYVFJBX1NBVkVfUkVNT1RFX1ZJREVPX1RPX0ZJTEVfV0lE
VEgsIHZpZGVvT3V0V2lkdGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGdldEludGVudCgp
Lmhhc0V4dHJhKENhbGxBY3Rpdml0eS5FWFRSQV9TQVZFX1JFTU9URV9WSURFT19UT19GSUxFX0hF
SUdIVCkpIHsKLSAgICAgICAgICBpbnQgdmlkZW9PdXRIZWlnaHQgPQotICAgICAgICAgICAgICBn
ZXRJbnRlbnQoKS5nZXRJbnRFeHRyYShDYWxsQWN0aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklE
RU9fVE9fRklMRV9IRUlHSFQsIDApOwotICAgICAgICAgIGludGVudC5wdXRFeHRyYShDYWxsQWN0
aXZpdHkuRVhUUkFfU0FWRV9SRU1PVEVfVklERU9fVE9fRklMRV9IRUlHSFQsIHZpZGVvT3V0SGVp
Z2h0KTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBzdGFydEFjdGl2aXR5Rm9yUmVzdWx0
KGludGVudCwgQ09OTkVDVElPTl9SRVFVRVNUKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJv
b2xlYW4gdmFsaWRhdGVVcmwoU3RyaW5nIHVybCkgewotICAgIGlmIChVUkxVdGlsLmlzSHR0cHNV
cmwodXJsKSB8fCBVUkxVdGlsLmlzSHR0cFVybCh1cmwpKSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBuZXcgQWxlcnREaWFsb2cuQnVpbGRlcih0aGlzKQotICAgICAgICAuc2V0
VGl0bGUoZ2V0VGV4dChSLnN0cmluZy5pbnZhbGlkX3VybF90aXRsZSkpCi0gICAgICAgIC5zZXRN
ZXNzYWdlKGdldFN0cmluZyhSLnN0cmluZy5pbnZhbGlkX3VybF90ZXh0LCB1cmwpKQotICAgICAg
ICAuc2V0Q2FuY2VsYWJsZShmYWxzZSkKLSAgICAgICAgLnNldE5ldXRyYWxCdXR0b24oUi5zdHJp
bmcub2ssCi0gICAgICAgICAgICBuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2xpY2tMaXN0ZW5lcigp
IHsKLSAgICAgICAgICAgICAgcHVibGljIHZvaWQgb25DbGljayhEaWFsb2dJbnRlcmZhY2UgZGlh
bG9nLCBpbnQgaWQpIHsKLSAgICAgICAgICAgICAgICBkaWFsb2cuY2FuY2VsKCk7Ci0gICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0pCi0gICAgICAgIC5jcmVhdGUoKQotICAgICAgICAuc2hv
dygpOwotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIHByaXZhdGUgZmluYWwgQWRhcHRlclZp
ZXcuT25JdGVtQ2xpY2tMaXN0ZW5lciByb29tTGlzdENsaWNrTGlzdGVuZXIgPQotICAgICAgbmV3
IEFkYXB0ZXJWaWV3Lk9uSXRlbUNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICAgIEBPdmVycmlkZQot
ICAgICAgICBwdWJsaWMgdm9pZCBvbkl0ZW1DbGljayhBZGFwdGVyVmlldzw/PiBhZGFwdGVyVmll
dywgVmlldyB2aWV3LCBpbnQgaSwgbG9uZyBsKSB7Ci0gICAgICAgICAgU3RyaW5nIHJvb21JZCA9
ICgoVGV4dFZpZXcpIHZpZXcpLmdldFRleHQoKS50b1N0cmluZygpOwotICAgICAgICAgIGNvbm5l
Y3RUb1Jvb20ocm9vbUlkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsKLSAgICAgICAgfQotICAg
ICAgfTsKLQotICBwcml2YXRlIGZpbmFsIE9uQ2xpY2tMaXN0ZW5lciBhZGRGYXZvcml0ZUxpc3Rl
bmVyID0gbmV3IE9uQ2xpY2tMaXN0ZW5lcigpIHsKLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMg
dm9pZCBvbkNsaWNrKFZpZXcgdmlldykgewotICAgICAgU3RyaW5nIG5ld1Jvb20gPSByb29tRWRp
dFRleHQuZ2V0VGV4dCgpLnRvU3RyaW5nKCk7Ci0gICAgICBpZiAobmV3Um9vbS5sZW5ndGgoKSA+
IDAgJiYgIXJvb21MaXN0LmNvbnRhaW5zKG5ld1Jvb20pKSB7Ci0gICAgICAgIGFkYXB0ZXIuYWRk
KG5ld1Jvb20pOwotICAgICAgICBhZGFwdGVyLm5vdGlmeURhdGFTZXRDaGFuZ2VkKCk7Ci0gICAg
ICB9Ci0gICAgfQotICB9OwotCi0gIHByaXZhdGUgZmluYWwgT25DbGlja0xpc3RlbmVyIGNvbm5l
Y3RMaXN0ZW5lciA9IG5ldyBPbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgQE92ZXJyaWRlCi0gICAg
cHVibGljIHZvaWQgb25DbGljayhWaWV3IHZpZXcpIHsKLSAgICAgIGNvbm5lY3RUb1Jvb20ocm9v
bUVkaXRUZXh0LmdldFRleHQoKS50b1N0cmluZygpLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwKTsK
LSAgICB9Ci0gIH07Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvQ3B1TW9u
aXRvci5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9DcHVN
b25pdG9yLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9DcHVNb25pdG9yLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MTAgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgMjAxNSBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBh
bmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuSW50ZW50Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5JbnRlbnRGaWx0ZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5C
YXR0ZXJ5TWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9zLlN5c3RlbUNsb2NrOwotaW1wb3J0IGFu
ZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0
IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRl
cjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7
Ci1pbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQu
RXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlNjaGVkdWxlZEV4ZWN1dG9y
U2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotLyoqCi0g
KiBTaW1wbGUgQ1BVIG1vbml0b3IuICBUaGUgY2FsbGVyIGNyZWF0ZXMgYSBDcHVNb25pdG9yIG9i
amVjdCB3aGljaCBjYW4gdGhlbgotICogYmUgdXNlZCB2aWEgc2FtcGxlQ3B1VXRpbGl6YXRpb24o
KSB0byBjb2xsZWN0IHRoZSBwZXJjZW50dWFsIHVzZSBvZiB0aGUKLSAqIGN1bXVsYXRpdmUgQ1BV
IGNhcGFjaXR5IGZvciBhbGwgQ1BVcyBydW5uaW5nIGF0IHRoZWlyIG5vbWluYWwgZnJlcXVlbmN5
LiAgMwotICogdmFsdWVzIGFyZSBnZW5lcmF0ZWQ6ICgxKSBnZXRDcHVDdXJyZW50KCkgcmV0dXJu
cyB0aGUgdXNlIHNpbmNlIHRoZSBsYXN0Ci0gKiBzYW1wbGVDcHVVdGlsaXphdGlvbigpLCAoMikg
Z2V0Q3B1QXZnMygpIHJldHVybnMgdGhlIHVzZSBzaW5jZSAzIHByaW9yCi0gKiBjYWxscywgYW5k
ICgzKSBnZXRDcHVBdmdBbGwoKSByZXR1cm5zIHRoZSB1c2Ugb3ZlciBhbGwgU0FNUExFX1NBVkVf
TlVNQkVSCi0gKiBjYWxscy4KLSAqCi0gKiA8cD5DUFVzIGluIEFuZHJvaWQgYXJlIG9mdGVuICJv
ZmZsaW5lIiwgYW5kIHdoaWxlIHRoaXMgb2YgY291cnNlIG1lYW5zIDAgSHoKLSAqIGFzIGN1cnJl
bnQgZnJlcXVlbmN5LCBpbiB0aGlzIHN0YXRlIHdlIGNhbm5vdCBldmVuIGdldCB0aGVpciBub21p
bmFsCi0gKiBmcmVxdWVuY3kuICBXZSB0aGVyZWZvcmUgdHJlYWQgY2FyZWZ1bGx5LCBhbmQgYWxs
b3cgYW55IENQVSB0byBiZSBtaXNzaW5nLgotICogTWlzc2luZyBDUFVzIGFyZSBhc3N1bWVkIHRv
IGhhdmUgdGhlIHNhbWUgbm9taW5hbCBmcmVxdWVuY3kgYXMgYW55IGNsb3NlCi0gKiBsb3dlci1u
dW1iZXJlZCBDUFUsIGJ1dCBhcyBzb29uIGFzIGl0IGlzIG9ubGluZSwgd2UnbGwgZ2V0IHRoZWly
IHByb3BlcgotICogZnJlcXVlbmN5IGFuZCByZW1lbWJlciBpdC4gIChTaW5jZSBDUFUgMCBpbiBw
cmFjdGljZSBhbHdheXMgc2VlbSB0byBiZQotICogb25saW5lLCB0aGlzIHVuaWRpcmVjdGlvbmFs
IGZyZXF1ZW5jeSBpbmhlcml0YW5jZSBzaG91bGQgYmUgbm8gcHJvYmxlbSBpbgotICogcHJhY3Rp
Y2UuKQotICoKLSAqIDxwPkNhdmVhdHM6Ci0gKiAgIG8gTm8gcHJvdmlzaW9uIG1hZGUgZm9yIHph
bnkgInR1cmJvIiBtb2RlLCBjb21tb24gaW4gdGhlIHg4NiB3b3JsZC4KLSAqICAgbyBObyBwcm92
aXNpb24gbWFkZSBmb3IgQVJNIGJpZy5MSVRUTEU7IGlmIENQVSBuIGNhbiBzd2l0Y2ggYmVoaW5k
IG91cgotICogICAgIGJhY2ssIHdlIG1pZ2h0IGdldCBpbmNvcnJlY3QgZXN0aW1hdGVzLgotICog
ICBvIFRoaXMgaXMgbm90IHRocmVhZC1zYWZlLiAgVG8gY2FsbCBhc3luY2hyb25vdXNseSwgY3Jl
YXRlIGRpZmZlcmVudAotICogICAgIENwdU1vbml0b3Igb2JqZWN0cy4KLSAqCi0gKiA8cD5JZiB3
ZSBjYW4gZ2F0aGVyIGVub3VnaCBpbmZvIHRvIGdlbmVyYXRlIGEgc2Vuc2libGUgcmVzdWx0LAot
ICogc2FtcGxlQ3B1VXRpbGl6YXRpb24gcmV0dXJucyB0cnVlLiAgSXQgaXMgZGVzaWduZWQgdG8g
bmV2ZXIgdGhyb3cgYW4KLSAqIGV4Y2VwdGlvbi4KLSAqCi0gKiA8cD5zYW1wbGVDcHVVdGlsaXph
dGlvbiBzaG91bGQgbm90IGJlIGNhbGxlZCB0b28gb2Z0ZW4gaW4gaXRzIHByZXNlbnQgZm9ybSwK
LSAqIHNpbmNlIHRoZW4gZGVsdGFzIHdvdWxkIGJlIHNtYWxsIGFuZCB0aGUgcGVyY2VudCB2YWx1
ZXMgd291bGQgZmx1Y3R1YXRlIGFuZAotICogYmUgdW5yZWFkYWJsZS4gSWYgaXQgaXMgZGVzaXJh
YmxlIHRvIGNhbGwgaXQgbW9yZSBvZnRlbiB0aGFuIHNheSBvbmNlIHBlcgotICogc2Vjb25kLCBv
bmUgd291bGQgbmVlZCB0byBpbmNyZWFzZSBTQU1QTEVfU0FWRV9OVU1CRVIgYW5kIHByb2JhYmx5
IHVzZQotICogUXVldWU8SW50ZWdlcj4gdG8gYXZvaWQgY29weWluZyBvdmVyaGVhZC4KLSAqCi0g
KiA8cD5Lbm93biBwcm9ibGVtczoKLSAqICAgMS4gTmV4dXMgNyBkZXZpY2VzIHJ1bm5pbmcgS2l0
a2F0IGhhdmUgYSBrZXJuZWwgd2hpY2ggb2Z0ZW4gb3V0cHV0IGFuCi0gKiAgICAgIGluY29ycmVj
dCAnaWRsZScgZmllbGQgaW4gL3Byb2Mvc3RhdC4gIFRoZSB2YWx1ZSBpcyBjbG9zZSB0byB0d2lj
ZSB0aGUKLSAqICAgICAgY29ycmVjdCB2YWx1ZSwgYW5kIHRoZW4gcmV0dXJucyB0byBiYWNrIHRv
IGNvcnJlY3QgcmVhZGluZy4gIEJvdGggd2hlbgotICogICAgICBqdW1waW5nIHVwIGFuZCBiYWNr
IGRvd24gd2UgbWlnaHQgY3JlYXRlIGZhdWx0eSBDUFUgbG9hZCByZWFkaW5ncy4KLSAqLwotCi1j
bGFzcyBDcHVNb25pdG9yIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJD
cHVNb25pdG9yIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1PVklOR19BVkVSQUdFX1NB
TVBMRVMgPSA1OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDUFVfU1RBVF9TQU1QTEVf
UEVSSU9EX01TID0gMjAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENQVV9TVEFUX0xP
R19QRVJJT0RfTVMgPSA2MDAwOwotCi0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBhcHBDb250ZXh0
OwotICAvLyBVc2VyIENQVSB1c2FnZSBhdCBjdXJyZW50IGZyZXF1ZW5jeS4KLSAgcHJpdmF0ZSBm
aW5hbCBNb3ZpbmdBdmVyYWdlIHVzZXJDcHVVc2FnZTsKLSAgLy8gU3lzdGVtIENQVSB1c2FnZSBh
dCBjdXJyZW50IGZyZXF1ZW5jeS4KLSAgcHJpdmF0ZSBmaW5hbCBNb3ZpbmdBdmVyYWdlIHN5c3Rl
bUNwdVVzYWdlOwotICAvLyBUb3RhbCBDUFUgdXNhZ2UgcmVsYXRpdmUgdG8gbWF4aW11bSBmcmVx
dWVuY3kuCi0gIHByaXZhdGUgZmluYWwgTW92aW5nQXZlcmFnZSB0b3RhbENwdVVzYWdlOwotICAv
LyBDUFUgZnJlcXVlbmN5IGluIHBlcmNlbnRhZ2UgZnJvbSBtYXhpbXVtLgotICBwcml2YXRlIGZp
bmFsIE1vdmluZ0F2ZXJhZ2UgZnJlcXVlbmN5U2NhbGU7Ci0KLSAgcHJpdmF0ZSBTY2hlZHVsZWRF
eGVjdXRvclNlcnZpY2UgZXhlY3V0b3I7Ci0gIHByaXZhdGUgbG9uZyBsYXN0U3RhdExvZ1RpbWVN
czsKLSAgcHJpdmF0ZSBsb25nW10gY3B1RnJlcU1heDsKLSAgcHJpdmF0ZSBpbnQgY3B1c1ByZXNl
bnQ7Ci0gIHByaXZhdGUgaW50IGFjdHVhbENwdXNQcmVzZW50OwotICBwcml2YXRlIGJvb2xlYW4g
aW5pdGlhbGl6ZWQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBjcHVPdmVydXNlOwotICBwcml2YXRlIFN0
cmluZ1tdIG1heFBhdGg7Ci0gIHByaXZhdGUgU3RyaW5nW10gY3VyUGF0aDsKLSAgcHJpdmF0ZSBk
b3VibGVbXSBjdXJGcmVxU2NhbGVzOwotICBwcml2YXRlIFByb2NTdGF0IGxhc3RQcm9jU3RhdDsK
LQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBQcm9jU3RhdCB7Ci0gICAgZmluYWwgbG9uZyB1c2Vy
VGltZTsKLSAgICBmaW5hbCBsb25nIHN5c3RlbVRpbWU7Ci0gICAgZmluYWwgbG9uZyBpZGxlVGlt
ZTsKLQotICAgIFByb2NTdGF0KGxvbmcgdXNlclRpbWUsIGxvbmcgc3lzdGVtVGltZSwgbG9uZyBp
ZGxlVGltZSkgewotICAgICAgdGhpcy51c2VyVGltZSA9IHVzZXJUaW1lOwotICAgICAgdGhpcy5z
eXN0ZW1UaW1lID0gc3lzdGVtVGltZTsKLSAgICAgIHRoaXMuaWRsZVRpbWUgPSBpZGxlVGltZTsK
LSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb3ZpbmdBdmVyYWdlIHsKLSAg
ICBwcml2YXRlIGZpbmFsIGludCBzaXplOwotICAgIHByaXZhdGUgZG91YmxlIHN1bTsKLSAgICBw
cml2YXRlIGRvdWJsZSBjdXJyZW50VmFsdWU7Ci0gICAgcHJpdmF0ZSBkb3VibGUgY2lyY0J1ZmZl
cltdOwotICAgIHByaXZhdGUgaW50IGNpcmNCdWZmZXJJbmRleDsKLQotICAgIHB1YmxpYyBNb3Zp
bmdBdmVyYWdlKGludCBzaXplKSB7Ci0gICAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIHRo
cm93IG5ldyBBc3NlcnRpb25FcnJvcigiU2l6ZSB2YWx1ZSBpbiBNb3ZpbmdBdmVyYWdlIGN0b3Ig
c2hvdWxkIGJlIHBvc2l0aXZlLiIpOwotICAgICAgfQotICAgICAgdGhpcy5zaXplID0gc2l6ZTsK
LSAgICAgIGNpcmNCdWZmZXIgPSBuZXcgZG91YmxlW3NpemVdOwotICAgIH0KLQotICAgIHB1Ymxp
YyB2b2lkIHJlc2V0KCkgewotICAgICAgQXJyYXlzLmZpbGwoY2lyY0J1ZmZlciwgMCk7Ci0gICAg
ICBjaXJjQnVmZmVySW5kZXggPSAwOwotICAgICAgc3VtID0gMDsKLSAgICAgIGN1cnJlbnRWYWx1
ZSA9IDA7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgYWRkVmFsdWUoZG91YmxlIHZhbHVlKSB7
Ci0gICAgICBzdW0gLT0gY2lyY0J1ZmZlcltjaXJjQnVmZmVySW5kZXhdOwotICAgICAgY2lyY0J1
ZmZlcltjaXJjQnVmZmVySW5kZXgrK10gPSB2YWx1ZTsKLSAgICAgIGN1cnJlbnRWYWx1ZSA9IHZh
bHVlOwotICAgICAgc3VtICs9IHZhbHVlOwotICAgICAgaWYgKGNpcmNCdWZmZXJJbmRleCA+PSBz
aXplKSB7Ci0gICAgICAgIGNpcmNCdWZmZXJJbmRleCA9IDA7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgcHVibGljIGRvdWJsZSBnZXRDdXJyZW50KCkgewotICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1
ZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZG91YmxlIGdldEF2ZXJhZ2UoKSB7Ci0gICAgICByZXR1
cm4gc3VtIC8gKGRvdWJsZSkgc2l6ZTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgQ3B1TW9uaXRv
cihDb250ZXh0IGNvbnRleHQpIHsKLSAgICBMb2cuZChUQUcsICJDcHVNb25pdG9yIGN0b3IuIik7
Ci0gICAgYXBwQ29udGV4dCA9IGNvbnRleHQuZ2V0QXBwbGljYXRpb25Db250ZXh0KCk7Ci0gICAg
dXNlckNwdVVzYWdlID0gbmV3IE1vdmluZ0F2ZXJhZ2UoTU9WSU5HX0FWRVJBR0VfU0FNUExFUyk7
Ci0gICAgc3lzdGVtQ3B1VXNhZ2UgPSBuZXcgTW92aW5nQXZlcmFnZShNT1ZJTkdfQVZFUkFHRV9T
QU1QTEVTKTsKLSAgICB0b3RhbENwdVVzYWdlID0gbmV3IE1vdmluZ0F2ZXJhZ2UoTU9WSU5HX0FW
RVJBR0VfU0FNUExFUyk7Ci0gICAgZnJlcXVlbmN5U2NhbGUgPSBuZXcgTW92aW5nQXZlcmFnZShN
T1ZJTkdfQVZFUkFHRV9TQU1QTEVTKTsKLSAgICBsYXN0U3RhdExvZ1RpbWVNcyA9IFN5c3RlbUNs
b2NrLmVsYXBzZWRSZWFsdGltZSgpOwotCi0gICAgc2NoZWR1bGVDcHVVdGlsaXphdGlvblRhc2so
KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHBhdXNlKCkgewotICAgIGlmIChleGVjdXRvciAhPSBu
dWxsKSB7Ci0gICAgICBMb2cuZChUQUcsICJwYXVzZSIpOwotICAgICAgZXhlY3V0b3Iuc2h1dGRv
d25Ob3coKTsKLSAgICAgIGV4ZWN1dG9yID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMg
dm9pZCByZXN1bWUoKSB7Ci0gICAgTG9nLmQoVEFHLCAicmVzdW1lIik7Ci0gICAgcmVzZXRTdGF0
KCk7Ci0gICAgc2NoZWR1bGVDcHVVdGlsaXphdGlvblRhc2soKTsKLSAgfQotCi0gIHB1YmxpYyBz
eW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHsKLSAgICBpZiAoZXhlY3V0b3IgIT0gbnVsbCkgewot
ICAgICAgTG9nLmQoVEFHLCAicmVzZXQiKTsKLSAgICAgIHJlc2V0U3RhdCgpOwotICAgICAgY3B1
T3ZlcnVzZSA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyBzeW5jaHJvbml6ZWQgaW50
IGdldENwdVVzYWdlQ3VycmVudCgpIHsKLSAgICByZXR1cm4gZG91YmxlVG9QZXJjZW50KHVzZXJD
cHVVc2FnZS5nZXRDdXJyZW50KCkgKyBzeXN0ZW1DcHVVc2FnZS5nZXRDdXJyZW50KCkpOwotICB9
Ci0KLSAgcHVibGljIHN5bmNocm9uaXplZCBpbnQgZ2V0Q3B1VXNhZ2VBdmVyYWdlKCkgewotICAg
IHJldHVybiBkb3VibGVUb1BlcmNlbnQodXNlckNwdVVzYWdlLmdldEF2ZXJhZ2UoKSArIHN5c3Rl
bUNwdVVzYWdlLmdldEF2ZXJhZ2UoKSk7Ci0gIH0KLQotICBwdWJsaWMgc3luY2hyb25pemVkIGlu
dCBnZXRGcmVxdWVuY3lTY2FsZUF2ZXJhZ2UoKSB7Ci0gICAgcmV0dXJuIGRvdWJsZVRvUGVyY2Vu
dChmcmVxdWVuY3lTY2FsZS5nZXRBdmVyYWdlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNj
aGVkdWxlQ3B1VXRpbGl6YXRpb25UYXNrKCkgewotICAgIGlmIChleGVjdXRvciAhPSBudWxsKSB7
Ci0gICAgICBleGVjdXRvci5zaHV0ZG93bk5vdygpOwotICAgICAgZXhlY3V0b3IgPSBudWxsOwot
ICAgIH0KLQotICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZFNjaGVkdWxl
ZEV4ZWN1dG9yKCk7Ci0gICAgZXhlY3V0b3Iuc2NoZWR1bGVBdEZpeGVkUmF0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgY3B1VXRpbGl6YXRpb25UYXNrKCk7Ci0gICAgICB9Ci0gICAgfSwgMCwgQ1BVX1NUQVRfU0FN
UExFX1BFUklPRF9NUywgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBjcHVVdGlsaXphdGlvblRhc2soKSB7Ci0gICAgYm9vbGVhbiBjcHVNb25pdG9yQXZhaWxh
YmxlID0gc2FtcGxlQ3B1VXRpbGl6YXRpb24oKTsKLSAgICBpZiAoY3B1TW9uaXRvckF2YWlsYWJs
ZQotICAgICAgICAmJiBTeXN0ZW1DbG9jay5lbGFwc2VkUmVhbHRpbWUoKSAtIGxhc3RTdGF0TG9n
VGltZU1zID49IENQVV9TVEFUX0xPR19QRVJJT0RfTVMpIHsKLSAgICAgIGxhc3RTdGF0TG9nVGlt
ZU1zID0gU3lzdGVtQ2xvY2suZWxhcHNlZFJlYWx0aW1lKCk7Ci0gICAgICBTdHJpbmcgc3RhdFN0
cmluZyA9IGdldFN0YXRTdHJpbmcoKTsKLSAgICAgIExvZy5kKFRBRywgc3RhdFN0cmluZyk7Ci0g
ICAgfQotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIEZp
bGVSZWFkZXIgZmluID0gbmV3IEZpbGVSZWFkZXIoIi9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3By
ZXNlbnQiKTsKLSAgICAgIHRyeSB7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5l
dyBCdWZmZXJlZFJlYWRlcihmaW4pOwotICAgICAgICBTY2FubmVyIHNjYW5uZXIgPSBuZXcgU2Nh
bm5lcihyZWFkZXIpLnVzZURlbGltaXRlcigiWy1cbl0iKTsKLSAgICAgICAgc2Nhbm5lci5uZXh0
SW50KCk7IC8vIFNraXAgbGVhZGluZyBudW1iZXIgMC4KLSAgICAgICAgY3B1c1ByZXNlbnQgPSAx
ICsgc2Nhbm5lci5uZXh0SW50KCk7Ci0gICAgICAgIHNjYW5uZXIuY2xvc2UoKTsKLSAgICAgIH0g
Y2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkNhbm5vdCBkbyBDUFUg
c3RhdHMgZHVlIHRvIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L3ByZXNlbnQgcGFyc2luZyBwcm9i
bGVtIik7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICBmaW4uY2xvc2UoKTsKLSAgICAgIH0K
LSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotICAgICAgTG9nLmUoVEFH
LCAiQ2Fubm90IGRvIENQVSBzdGF0cyBzaW5jZSAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9wcmVz
ZW50IGlzIG1pc3NpbmciKTsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICBM
b2cuZShUQUcsICJFcnJvciBjbG9zaW5nIGZpbGUiKTsKLSAgICB9Ci0KLSAgICBjcHVGcmVxTWF4
ID0gbmV3IGxvbmdbY3B1c1ByZXNlbnRdOwotICAgIG1heFBhdGggPSBuZXcgU3RyaW5nW2NwdXNQ
cmVzZW50XTsKLSAgICBjdXJQYXRoID0gbmV3IFN0cmluZ1tjcHVzUHJlc2VudF07Ci0gICAgY3Vy
RnJlcVNjYWxlcyA9IG5ldyBkb3VibGVbY3B1c1ByZXNlbnRdOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY3B1c1ByZXNlbnQ7IGkrKykgewotICAgICAgY3B1RnJlcU1heFtpXSA9IDA7IC8vIEZy
ZXF1ZW5jeSAibm90IHlldCBkZXRlcm1pbmVkIi4KLSAgICAgIGN1ckZyZXFTY2FsZXNbaV0gPSAw
OwotICAgICAgbWF4UGF0aFtpXSA9ICIvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUiICsgaSAr
ICIvY3B1ZnJlcS9jcHVpbmZvX21heF9mcmVxIjsKLSAgICAgIGN1clBhdGhbaV0gPSAiL3N5cy9k
ZXZpY2VzL3N5c3RlbS9jcHUvY3B1IiArIGkgKyAiL2NwdWZyZXEvc2NhbGluZ19jdXJfZnJlcSI7
Ci0gICAgfQotCi0gICAgbGFzdFByb2NTdGF0ID0gbmV3IFByb2NTdGF0KDAsIDAsIDApOwotICAg
IHJlc2V0U3RhdCgpOwotCi0gICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICB9Ci0KLSAgcHJpdmF0
ZSBzeW5jaHJvbml6ZWQgdm9pZCByZXNldFN0YXQoKSB7Ci0gICAgdXNlckNwdVVzYWdlLnJlc2V0
KCk7Ci0gICAgc3lzdGVtQ3B1VXNhZ2UucmVzZXQoKTsKLSAgICB0b3RhbENwdVVzYWdlLnJlc2V0
KCk7Ci0gICAgZnJlcXVlbmN5U2NhbGUucmVzZXQoKTsKLSAgICBsYXN0U3RhdExvZ1RpbWVNcyA9
IFN5c3RlbUNsb2NrLmVsYXBzZWRSZWFsdGltZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgZ2V0
QmF0dGVyeUxldmVsKCkgewotICAgIC8vIFVzZSBzdGlja3kgYnJvYWRjYXN0IHdpdGggbnVsbCBy
ZWNlaXZlciB0byByZWFkIGJhdHRlcnkgbGV2ZWwgb25jZSBvbmx5LgotICAgIEludGVudCBpbnRl
bnQgPSBhcHBDb250ZXh0LnJlZ2lzdGVyUmVjZWl2ZXIoCi0gICAgICAgIG51bGwgLyogcmVjZWl2
ZXIgKi8sIG5ldyBJbnRlbnRGaWx0ZXIoSW50ZW50LkFDVElPTl9CQVRURVJZX0NIQU5HRUQpKTsK
LQotICAgIGludCBiYXR0ZXJ5TGV2ZWwgPSAwOwotICAgIGludCBiYXR0ZXJ5U2NhbGUgPSBpbnRl
bnQuZ2V0SW50RXh0cmEoQmF0dGVyeU1hbmFnZXIuRVhUUkFfU0NBTEUsIDEwMCk7Ci0gICAgaWYg
KGJhdHRlcnlTY2FsZSA+IDApIHsKLSAgICAgIGJhdHRlcnlMZXZlbCA9Ci0gICAgICAgICAgKGlu
dCkgKDEwMGYgKiBpbnRlbnQuZ2V0SW50RXh0cmEoQmF0dGVyeU1hbmFnZXIuRVhUUkFfTEVWRUws
IDApIC8gYmF0dGVyeVNjYWxlKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJhdHRlcnlMZXZlbDsKLSAg
fQotCi0gIC8qKgotICAgKiBSZS1tZWFzdXJlIENQVSB1c2UuICBDYWxsIHRoaXMgbWV0aG9kIGF0
IGFuIGludGVydmFsIG9mIGFyb3VuZCAxL3MuCi0gICAqIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1
ZSBvbiBzdWNjZXNzLiAgVGhlIGZpZWxkcwotICAgKiBjcHVDdXJyZW50LCBjcHVBdmczLCBhbmQg
Y3B1QXZnQWxsIGFyZSB1cGRhdGVkIG9uIHN1Y2Nlc3MsIGFuZCByZXByZXNlbnRzOgotICAgKiBj
cHVDdXJyZW50OiBUaGUgQ1BVIHVzZSBzaW5jZSB0aGUgbGFzdCBzYW1wbGVDcHVVdGlsaXphdGlv
biBjYWxsLgotICAgKiBjcHVBdmczOiBUaGUgYXZlcmFnZSBDUFUgb3ZlciB0aGUgbGFzdCAzIGNh
bGxzLgotICAgKiBjcHVBdmdBbGw6IFRoZSBhdmVyYWdlIENQVSBvdmVyIHRoZSBsYXN0IFNBTVBM
RV9TQVZFX05VTUJFUiBjYWxscy4KLSAgICovCi0gIHByaXZhdGUgc3luY2hyb25pemVkIGJvb2xl
YW4gc2FtcGxlQ3B1VXRpbGl6YXRpb24oKSB7Ci0gICAgbG9uZyBsYXN0U2Vlbk1heEZyZXEgPSAw
OwotICAgIGxvbmcgY3B1RnJlcUN1clN1bSA9IDA7Ci0gICAgbG9uZyBjcHVGcmVxTWF4U3VtID0g
MDsKLQotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgIGluaXQoKTsKLSAgICB9Ci0gICAg
aWYgKGNwdXNQcmVzZW50ID09IDApIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBhY3R1YWxDcHVzUHJlc2VudCA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjcHVzUHJl
c2VudDsgaSsrKSB7Ci0gICAgICAvKgotICAgICAgICogRm9yIGVhY2ggQ1BVLCBhdHRlbXB0IHRv
IGZpcnN0IHJlYWQgaXRzIG1heCBmcmVxdWVuY3ksIHRoZW4gaXRzCi0gICAgICAgKiBjdXJyZW50
IGZyZXF1ZW5jeS4gIE9uY2UgYXMgdGhlIG1heCBmcmVxdWVuY3kgZm9yIGEgQ1BVIGlzIGZvdW5k
LAotICAgICAgICogc2F2ZSBpdCBpbiBjcHVGcmVxTWF4W10uCi0gICAgICAgKi8KLQotICAgICAg
Y3VyRnJlcVNjYWxlc1tpXSA9IDA7Ci0gICAgICBpZiAoY3B1RnJlcU1heFtpXSA9PSAwKSB7Ci0g
ICAgICAgIC8vIFdlIGhhdmUgbmV2ZXIgZm91bmQgdGhpcyBDUFUncyBtYXggZnJlcXVlbmN5LiAg
QXR0ZW1wdCB0byByZWFkIGl0LgotICAgICAgICBsb25nIGNwdWZyZXFNYXggPSByZWFkRnJlcUZy
b21GaWxlKG1heFBhdGhbaV0pOwotICAgICAgICBpZiAoY3B1ZnJlcU1heCA+IDApIHsKLSAgICAg
ICAgICBMb2cuZChUQUcsICJDb3JlICIgKyBpICsgIi4gTWF4IGZyZXF1ZW5jeTogIiArIGNwdWZy
ZXFNYXgpOwotICAgICAgICAgIGxhc3RTZWVuTWF4RnJlcSA9IGNwdWZyZXFNYXg7Ci0gICAgICAg
ICAgY3B1RnJlcU1heFtpXSA9IGNwdWZyZXFNYXg7Ci0gICAgICAgICAgbWF4UGF0aFtpXSA9IG51
bGw7IC8vIEtpbGwgcGF0aCB0byBmcmVlIGl0cyBtZW1vcnkuCi0gICAgICAgIH0KLSAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGxhc3RTZWVuTWF4RnJlcSA9IGNwdUZyZXFNYXhbaV07IC8vIEEgdmFs
aWQsIHByZXZpb3VzbHkgcmVhZCB2YWx1ZS4KLSAgICAgIH0KLQotICAgICAgbG9uZyBjcHVGcmVx
Q3VyID0gcmVhZEZyZXFGcm9tRmlsZShjdXJQYXRoW2ldKTsKLSAgICAgIGlmIChjcHVGcmVxQ3Vy
ID09IDAgJiYgbGFzdFNlZW5NYXhGcmVxID09IDApIHsKLSAgICAgICAgLy8gTm8gY3VycmVudCBm
cmVxdWVuY3kgaW5mb3JtYXRpb24gZm9yIHRoaXMgQ1BVIGNvcmUgLSBpZ25vcmUgaXQuCi0gICAg
ICAgIGNvbnRpbnVlOwotICAgICAgfQotICAgICAgaWYgKGNwdUZyZXFDdXIgPiAwKSB7Ci0gICAg
ICAgIGFjdHVhbENwdXNQcmVzZW50Kys7Ci0gICAgICB9Ci0gICAgICBjcHVGcmVxQ3VyU3VtICs9
IGNwdUZyZXFDdXI7Ci0KLSAgICAgIC8qIEhlcmUsIGxhc3RTZWVuTWF4RnJlcSBtaWdodCBjb21l
IGZyb20KLSAgICAgICAqIDEuIGNwdUZyZXFbaV0sIG9yCi0gICAgICAgKiAyLiBhIHByZXZpb3Vz
IGl0ZXJhdGlvbiwgb3IKLSAgICAgICAqIDMuIGEgbmV3bHkgcmVhZCB2YWx1ZSwgb3IKLSAgICAg
ICAqIDQuIGh5cG90aGV0aWNhbGx5IGZyb20gdGhlIHByZS1sb29wIGR1bW15LgotICAgICAgICov
Ci0gICAgICBjcHVGcmVxTWF4U3VtICs9IGxhc3RTZWVuTWF4RnJlcTsKLSAgICAgIGlmIChsYXN0
U2Vlbk1heEZyZXEgPiAwKSB7Ci0gICAgICAgIGN1ckZyZXFTY2FsZXNbaV0gPSAoZG91YmxlKSBj
cHVGcmVxQ3VyIC8gbGFzdFNlZW5NYXhGcmVxOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChj
cHVGcmVxQ3VyU3VtID09IDAgfHwgY3B1RnJlcU1heFN1bSA9PSAwKSB7Ci0gICAgICBMb2cuZShU
QUcsICJDb3VsZCBub3QgcmVhZCBtYXggb3IgY3VycmVudCBmcmVxdWVuY3kgZm9yIGFueSBDUFUi
KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNpbmNlIHRo
ZSBjeWNsZSBjb3VudHMgYXJlIGZvciB0aGUgcGVyaW9kIGJldHdlZW4gdGhlIGxhc3QgaW52b2Nh
dGlvbgotICAgICAqIGFuZCB0aGlzIHByZXNlbnQgb25lLCB3ZSBhdmVyYWdlIHRoZSBwZXJjZW50
dWFsIENQVSBmcmVxdWVuY2llcyBiZXR3ZWVuCi0gICAgICogbm93IGFuZCB0aGUgYmVnaW5uaW5n
IG9mIHRoZSBtZWFzdXJlbWVudCBwZXJpb2QuICBUaGlzIGlzIHNpZ25pZmljYW50bHkKLSAgICAg
KiBpbmNvcnJlY3Qgb25seSBpZiB0aGUgZnJlcXVlbmNpZXMgaGF2ZSBwZWVrZWQgb3IgZHJvcHBl
ZCBpbiBiZXR3ZWVuIHRoZQotICAgICAqIGludm9jYXRpb25zLgotICAgICAqLwotICAgIGRvdWJs
ZSBjdXJyZW50RnJlcXVlbmN5U2NhbGUgPSBjcHVGcmVxQ3VyU3VtIC8gKGRvdWJsZSkgY3B1RnJl
cU1heFN1bTsKLSAgICBpZiAoZnJlcXVlbmN5U2NhbGUuZ2V0Q3VycmVudCgpID4gMCkgewotICAg
ICAgY3VycmVudEZyZXF1ZW5jeVNjYWxlID0gKGZyZXF1ZW5jeVNjYWxlLmdldEN1cnJlbnQoKSAr
IGN1cnJlbnRGcmVxdWVuY3lTY2FsZSkgKiAwLjU7Ci0gICAgfQotCi0gICAgUHJvY1N0YXQgcHJv
Y1N0YXQgPSByZWFkUHJvY1N0YXQoKTsKLSAgICBpZiAocHJvY1N0YXQgPT0gbnVsbCkgewotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGxvbmcgZGlmZlVzZXJUaW1lID0gcHJvY1N0
YXQudXNlclRpbWUgLSBsYXN0UHJvY1N0YXQudXNlclRpbWU7Ci0gICAgbG9uZyBkaWZmU3lzdGVt
VGltZSA9IHByb2NTdGF0LnN5c3RlbVRpbWUgLSBsYXN0UHJvY1N0YXQuc3lzdGVtVGltZTsKLSAg
ICBsb25nIGRpZmZJZGxlVGltZSA9IHByb2NTdGF0LmlkbGVUaW1lIC0gbGFzdFByb2NTdGF0Lmlk
bGVUaW1lOwotICAgIGxvbmcgYWxsVGltZSA9IGRpZmZVc2VyVGltZSArIGRpZmZTeXN0ZW1UaW1l
ICsgZGlmZklkbGVUaW1lOwotCi0gICAgaWYgKGN1cnJlbnRGcmVxdWVuY3lTY2FsZSA9PSAwIHx8
IGFsbFRpbWUgPT0gMCkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFVw
ZGF0ZSBzdGF0aXN0aWNzLgotICAgIGZyZXF1ZW5jeVNjYWxlLmFkZFZhbHVlKGN1cnJlbnRGcmVx
dWVuY3lTY2FsZSk7Ci0KLSAgICBkb3VibGUgY3VycmVudFVzZXJDcHVVc2FnZSA9IGRpZmZVc2Vy
VGltZSAvIChkb3VibGUpIGFsbFRpbWU7Ci0gICAgdXNlckNwdVVzYWdlLmFkZFZhbHVlKGN1cnJl
bnRVc2VyQ3B1VXNhZ2UpOwotCi0gICAgZG91YmxlIGN1cnJlbnRTeXN0ZW1DcHVVc2FnZSA9IGRp
ZmZTeXN0ZW1UaW1lIC8gKGRvdWJsZSkgYWxsVGltZTsKLSAgICBzeXN0ZW1DcHVVc2FnZS5hZGRW
YWx1ZShjdXJyZW50U3lzdGVtQ3B1VXNhZ2UpOwotCi0gICAgZG91YmxlIGN1cnJlbnRUb3RhbENw
dVVzYWdlID0KLSAgICAgICAgKGN1cnJlbnRVc2VyQ3B1VXNhZ2UgKyBjdXJyZW50U3lzdGVtQ3B1
VXNhZ2UpICogY3VycmVudEZyZXF1ZW5jeVNjYWxlOwotICAgIHRvdGFsQ3B1VXNhZ2UuYWRkVmFs
dWUoY3VycmVudFRvdGFsQ3B1VXNhZ2UpOwotCi0gICAgLy8gU2F2ZSBuZXcgbWVhc3VyZW1lbnRz
IGZvciBuZXh0IHJvdW5kJ3MgZGVsdGFzLgotICAgIGxhc3RQcm9jU3RhdCA9IHByb2NTdGF0Owot
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGludCBkb3VibGVUb1BlcmNlbnQo
ZG91YmxlIGQpIHsKLSAgICByZXR1cm4gKGludCkgKGQgKiAxMDAgKyAwLjUpOwotICB9Ci0KLSAg
cHJpdmF0ZSBzeW5jaHJvbml6ZWQgU3RyaW5nIGdldFN0YXRTdHJpbmcoKSB7Ci0gICAgU3RyaW5n
QnVpbGRlciBzdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBzdGF0LmFwcGVuZCgiQ1BV
IFVzZXI6ICIpCi0gICAgICAgIC5hcHBlbmQoZG91YmxlVG9QZXJjZW50KHVzZXJDcHVVc2FnZS5n
ZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5kKCIvIikKLSAgICAgICAgLmFwcGVuZChkb3Vi
bGVUb1BlcmNlbnQodXNlckNwdVVzYWdlLmdldEF2ZXJhZ2UoKSkpCi0gICAgICAgIC5hcHBlbmQo
Ii4gU3lzdGVtOiAiKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudChzeXN0ZW1DcHVV
c2FnZS5nZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5kKCIvIikKLSAgICAgICAgLmFwcGVu
ZChkb3VibGVUb1BlcmNlbnQoc3lzdGVtQ3B1VXNhZ2UuZ2V0QXZlcmFnZSgpKSkKLSAgICAgICAg
LmFwcGVuZCgiLiBGcmVxOiAiKQotICAgICAgICAuYXBwZW5kKGRvdWJsZVRvUGVyY2VudChmcmVx
dWVuY3lTY2FsZS5nZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5kKCIvIikKLSAgICAgICAg
LmFwcGVuZChkb3VibGVUb1BlcmNlbnQoZnJlcXVlbmN5U2NhbGUuZ2V0QXZlcmFnZSgpKSkKLSAg
ICAgICAgLmFwcGVuZCgiLiBUb3RhbCB1c2FnZTogIikKLSAgICAgICAgLmFwcGVuZChkb3VibGVU
b1BlcmNlbnQodG90YWxDcHVVc2FnZS5nZXRDdXJyZW50KCkpKQotICAgICAgICAuYXBwZW5kKCIv
IikKLSAgICAgICAgLmFwcGVuZChkb3VibGVUb1BlcmNlbnQodG90YWxDcHVVc2FnZS5nZXRBdmVy
YWdlKCkpKQotICAgICAgICAuYXBwZW5kKCIuIENvcmVzOiAiKQotICAgICAgICAuYXBwZW5kKGFj
dHVhbENwdXNQcmVzZW50KTsKLSAgICBzdGF0LmFwcGVuZCgiKCAiKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNwdXNQcmVzZW50OyBpKyspIHsKLSAgICAgIHN0YXQuYXBwZW5kKGRvdWJsZVRv
UGVyY2VudChjdXJGcmVxU2NhbGVzW2ldKSkuYXBwZW5kKCIgIik7Ci0gICAgfQotICAgIHN0YXQu
YXBwZW5kKCIpLiBCYXR0ZXJ5OiAiKS5hcHBlbmQoZ2V0QmF0dGVyeUxldmVsKCkpOwotICAgIGlm
IChjcHVPdmVydXNlKSB7Ci0gICAgICBzdGF0LmFwcGVuZCgiLiBPdmVydXNlLiIpOwotICAgIH0K
LSAgICByZXR1cm4gc3RhdC50b1N0cmluZygpOwotICB9Ci0KLSAgLyoqCi0gICAqIFJlYWQgYSBz
aW5nbGUgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBuYW1lZCBmaWxlLiAgUmV0dXJuIHRoZSByZWFk
IHZhbHVlCi0gICAqIG9yIGlmIGFuIGVycm9yIG9jY3VycyByZXR1cm4gMC4KLSAgICovCi0gIHBy
aXZhdGUgbG9uZyByZWFkRnJlcUZyb21GaWxlKFN0cmluZyBmaWxlTmFtZSkgewotICAgIGxvbmcg
bnVtYmVyID0gMDsKLSAgICB0cnkgewotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3
IEJ1ZmZlcmVkUmVhZGVyKG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKSk7Ci0gICAgICB0cnkgewot
ICAgICAgICBTdHJpbmcgbGluZSA9IHJlYWRlci5yZWFkTGluZSgpOwotICAgICAgICBudW1iZXIg
PSBwYXJzZUxvbmcobGluZSk7Ci0gICAgICB9IGZpbmFsbHkgewotICAgICAgICByZWFkZXIuY2xv
c2UoKTsKLSAgICAgIH0KLSAgICB9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewot
ICAgICAgLy8gQ1BVIGNvcmUgaXMgb2ZmLCBzbyBmaWxlIHdpdGggaXRzIHNjYWxpbmcgZnJlcXVl
bmN5IC4uLi9jcHVmcmVxL3NjYWxpbmdfY3VyX2ZyZXEKLSAgICAgIC8vIGlzIG5vdCBwcmVzZW50
LiBUaGlzIGlzIG5vdCBhbiBlcnJvci4KLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0g
ICAgICAvLyBDUFUgY29yZSBpcyBvZmYsIHNvIGZpbGUgd2l0aCBpdHMgc2NhbGluZyBmcmVxdWVu
Y3kgLi4uL2NwdWZyZXEvc2NhbGluZ19jdXJfZnJlcQotICAgICAgLy8gaXMgZW1wdHkuIFRoaXMg
aXMgbm90IGFuIGVycm9yLgotICAgIH0KLSAgICByZXR1cm4gbnVtYmVyOwotICB9Ci0KLSAgcHJp
dmF0ZSBzdGF0aWMgbG9uZyBwYXJzZUxvbmcoU3RyaW5nIHZhbHVlKSB7Ci0gICAgbG9uZyBudW1i
ZXIgPSAwOwotICAgIHRyeSB7Ci0gICAgICBudW1iZXIgPSBMb25nLnBhcnNlTG9uZyh2YWx1ZSk7
Ci0gICAgfSBjYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZy5lKFRB
RywgInBhcnNlTG9uZyBlcnJvci4iLCBlKTsKLSAgICB9Ci0gICAgcmV0dXJuIG51bWJlcjsKLSAg
fQotCi0gIC8qCi0gICAqIFJlYWQgdGhlIGN1cnJlbnQgdXRpbGl6YXRpb24gb2YgYWxsIENQVXMg
dXNpbmcgdGhlIGN1bXVsYXRpdmUgZmlyc3QgbGluZQotICAgKiBvZiAvcHJvYy9zdGF0LgotICAg
Ki8KLSAgcHJpdmF0ZSBQcm9jU3RhdCByZWFkUHJvY1N0YXQoKSB7Ci0gICAgbG9uZyB1c2VyVGlt
ZSA9IDA7Ci0gICAgbG9uZyBzeXN0ZW1UaW1lID0gMDsKLSAgICBsb25nIGlkbGVUaW1lID0gMDsK
LSAgICB0cnkgewotICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVh
ZGVyKG5ldyBGaWxlUmVhZGVyKCIvcHJvYy9zdGF0IikpOwotICAgICAgdHJ5IHsKLSAgICAgICAg
Ly8gbGluZSBzaG91bGQgY29udGFpbiBzb21ldGhpbmcgbGlrZSB0aGlzOgotICAgICAgICAvLyBj
cHUgIDUwOTM4MTggMjcxODM4IDM1MTI4MzAgMTY1OTM0MTE5IDEwMTM3NCA0NDcwNzYgMjcyMDg2
IDAgMCAwCi0gICAgICAgIC8vICAgICAgIHVzZXIgICAgbmljZSAgc3lzdGVtICAgICBpZGxlICAg
aW93YWl0ICBpcnEgICBzb2Z0aXJxCi0gICAgICAgIFN0cmluZyBsaW5lID0gcmVhZGVyLnJlYWRM
aW5lKCk7Ci0gICAgICAgIFN0cmluZyBsaW5lc1tdID0gbGluZS5zcGxpdCgiXFxzKyIpOwotICAg
ICAgICBpbnQgbGVuZ3RoID0gbGluZXMubGVuZ3RoOwotICAgICAgICBpZiAobGVuZ3RoID49IDUp
IHsKLSAgICAgICAgICB1c2VyVGltZSA9IHBhcnNlTG9uZyhsaW5lc1sxXSk7IC8vIHVzZXIKLSAg
ICAgICAgICB1c2VyVGltZSArPSBwYXJzZUxvbmcobGluZXNbMl0pOyAvLyBuaWNlCi0gICAgICAg
ICAgc3lzdGVtVGltZSA9IHBhcnNlTG9uZyhsaW5lc1szXSk7IC8vIHN5c3RlbQotICAgICAgICAg
IGlkbGVUaW1lID0gcGFyc2VMb25nKGxpbmVzWzRdKTsgLy8gaWRsZQotICAgICAgICB9Ci0gICAg
ICAgIGlmIChsZW5ndGggPj0gOCkgewotICAgICAgICAgIHVzZXJUaW1lICs9IHBhcnNlTG9uZyhs
aW5lc1s1XSk7IC8vIGlvd2FpdAotICAgICAgICAgIHN5c3RlbVRpbWUgKz0gcGFyc2VMb25nKGxp
bmVzWzZdKTsgLy8gaXJxCi0gICAgICAgICAgc3lzdGVtVGltZSArPSBwYXJzZUxvbmcobGluZXNb
N10pOyAvLyBzb2Z0aXJxCi0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICAgIExvZy5lKFRBRywgIlByb2JsZW1zIHBhcnNpbmcgL3Byb2Mvc3RhdCIsIGUpOwot
ICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgIHJlYWRlci5j
bG9zZSgpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBMb2cuZShUQUcsICJDYW5ub3Qgb3BlbiAvcHJvYy9zdGF0IGZvciByZWFkaW5nIiwg
ZSk7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0g
ICAgICBMb2cuZShUQUcsICJQcm9ibGVtcyByZWFkaW5nIC9wcm9jL3N0YXQiLCBlKTsKLSAgICAg
IHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFByb2NTdGF0KHVzZXJUaW1lLCBz
eXN0ZW1UaW1lLCBpZGxlVGltZSk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvRGlyZWN0UlRDQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnQuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDM0NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJS
VEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBv
cmcuanNvbi5KU09OQXJyYXk7Ci1pbXBvcnQgb3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKLWltcG9y
dCBvcmcuanNvbi5KU09OT2JqZWN0OwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwot
aW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNz
aW9uRGVzY3JpcHRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBq
YXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuRXhlY3V0b3JzOwotaW1wb3J0IGphdmEudXRpbC5yZWdleC5NYXRjaGVyOwotaW1w
b3J0IGphdmEudXRpbC5yZWdleC5QYXR0ZXJuOwotCi0vKioKLSAqIEltcGxlbWVudGF0aW9uIG9m
IEFwcFJUQ0NsaWVudCB0aGF0IHVzZXMgZGlyZWN0IFRDUCBjb25uZWN0aW9uIGFzIHRoZSBzaWdu
YWxpbmcgY2hhbm5lbC4KLSAqIFRoaXMgZWxpbWluYXRlcyB0aGUgbmVlZCBmb3IgYW4gZXh0ZXJu
YWwgc2VydmVyLiBUaGlzIGNsYXNzIGRvZXMgbm90IHN1cHBvcnQgbG9vcGJhY2sKLSAqIGNvbm5l
Y3Rpb25zLgotICovCi1wdWJsaWMgY2xhc3MgRGlyZWN0UlRDQ2xpZW50IGltcGxlbWVudHMgQXBw
UlRDQ2xpZW50LCBUQ1BDaGFubmVsQ2xpZW50LlRDUENoYW5uZWxFdmVudHMgewotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkRpcmVjdFJUQ0NsaWVudCI7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBERUZBVUxUX1BPUlQgPSA4ODg4OwotCi0gIC8vIFJlZ2V4IHBhdHRl
cm4gdXNlZCBmb3IgY2hlY2tpbmcgaWYgcm9vbSBpZCBsb29rcyBsaWtlIGFuIElQLgotICBzdGF0
aWMgZmluYWwgUGF0dGVybiBJUF9QQVRURVJOID0gUGF0dGVybi5jb21waWxlKCIoIgotICAgICAg
Ly8gSVB2NAotICAgICAgKyAiKChcXGQrXFwuKXszfVxcZCspfCIKLSAgICAgIC8vIElQdjYKLSAg
ICAgICsgIlxcWygoKFswLTlhLWZBLUZdezEsNH06KSpbMC05YS1mQS1GXXsxLDR9KT86OiIKLSAg
ICAgICsgIigoWzAtOWEtZkEtRl17MSw0fTopKlswLTlhLWZBLUZdezEsNH0pPylcXF18IgotICAg
ICAgKyAiXFxbKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9KVxcXXwiCi0g
ICAgICAvLyBJUHY2IHdpdGhvdXQgW10KLSAgICAgICsgIigoKFswLTlhLWZBLUZdezEsNH06KSpb
MC05YS1mQS1GXXsxLDR9KT86OigoWzAtOWEtZkEtRl17MSw0fTopKlswLTlhLWZBLUZdezEsNH0p
Pyl8IgotICAgICAgKyAiKChbMC05YS1mQS1GXXsxLDR9Oil7N31bMC05YS1mQS1GXXsxLDR9KXwi
Ci0gICAgICAvLyBMaXRlcmFscwotICAgICAgKyAibG9jYWxob3N0IgotICAgICAgKyAiKSIKLSAg
ICAgIC8vIE9wdGlvbmFsIHBvcnQgbnVtYmVyCi0gICAgICArICIoOihcXGQrKSk/Iik7Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3I7Ci0gIHByaXZhdGUgZmluYWwg
U2lnbmFsaW5nRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IHRjcENs
aWVudDsKLSAgcHJpdmF0ZSBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFt
ZXRlcnM7Ci0KLSAgcHJpdmF0ZSBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7IE5FVywgQ09OTkVDVEVE
LCBDTE9TRUQsIEVSUk9SIH0KLQotICAvLyBBbGwgYWx0ZXJhdGlvbnMgb2YgdGhlIHJvb20gc3Rh
dGUgc2hvdWxkIGJlIGRvbmUgZnJvbSBpbnNpZGUgdGhlIGxvb3BlciB0aHJlYWQuCi0gIHByaXZh
dGUgQ29ubmVjdGlvblN0YXRlIHJvb21TdGF0ZTsKLQotICBwdWJsaWMgRGlyZWN0UlRDQ2xpZW50
KFNpZ25hbGluZ0V2ZW50cyBldmVudHMpIHsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLQot
ICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7Ci0gICAg
cm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLk5FVzsKLSAgfQotCi0gIC8qKgotICAgKiBDb25u
ZWN0cyB0byB0aGUgcm9vbSwgcm9vbUlkIGluIGNvbm5lY3Rpb25zUGFyYW1ldGVycyBpcyByZXF1
aXJlZC4gcm9vbUlkIG11c3QgYmUgYSB2YWxpZAotICAgKiBJUCBhZGRyZXNzIG1hdGNoaW5nIElQ
X1BBVFRFUk4uCi0gICAqLwotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgY29ubmVjdFRvUm9v
bShSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnMpIHsKLSAgICB0
aGlzLmNvbm5lY3Rpb25QYXJhbWV0ZXJzID0gY29ubmVjdGlvblBhcmFtZXRlcnM7Ci0KLSAgICBp
ZiAoY29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgIHJlcG9ydEVycm9yKCJM
b29wYmFjayBjb25uZWN0aW9ucyBhcmVuJ3Qgc3VwcG9ydGVkIGJ5IERpcmVjdFJUQ0NsaWVudC4i
KTsKLSAgICB9Ci0KLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAg
IEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjb25uZWN0VG9S
b29tSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBkaXNjb25uZWN0RnJvbVJvb20oKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShu
ZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigp
IHsKLSAgICAgICAgZGlzY29ubmVjdEZyb21Sb29tSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9
KTsKLSAgfQotCi0gIC8qKgotICAgKiBDb25uZWN0cyB0byB0aGUgcm9vbS4KLSAgICoKLSAgICog
UnVucyBvbiB0aGUgbG9vcGVyIHRocmVhZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBjb25uZWN0
VG9Sb29tSW50ZXJuYWwoKSB7Ci0gICAgdGhpcy5yb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUu
TkVXOwotCi0gICAgU3RyaW5nIGVuZHBvaW50ID0gY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbUlk
OwotCi0gICAgTWF0Y2hlciBtYXRjaGVyID0gSVBfUEFUVEVSTi5tYXRjaGVyKGVuZHBvaW50KTsK
LSAgICBpZiAoIW1hdGNoZXIubWF0Y2hlcygpKSB7Ci0gICAgICByZXBvcnRFcnJvcigicm9vbUlk
IG11c3QgbWF0Y2ggSVBfUEFUVEVSTiBmb3IgRGlyZWN0UlRDQ2xpZW50LiIpOwotICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFN0cmluZyBpcCA9IG1hdGNoZXIuZ3JvdXAoMSk7Ci0gICAgU3Ry
aW5nIHBvcnRTdHIgPSBtYXRjaGVyLmdyb3VwKG1hdGNoZXIuZ3JvdXBDb3VudCgpKTsKLSAgICBp
bnQgcG9ydDsKLQotICAgIGlmIChwb3J0U3RyICE9IG51bGwpIHsKLSAgICAgIHRyeSB7Ci0gICAg
ICAgIHBvcnQgPSBJbnRlZ2VyLnBhcnNlSW50KHBvcnRTdHIpOwotICAgICAgfSBjYXRjaCAoTnVt
YmVyRm9ybWF0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkludmFsaWQgcG9y
dCBudW1iZXI6ICIgKyBwb3J0U3RyKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICBwb3J0ID0gREVGQVVMVF9QT1JUOwotICAgIH0KLQotICAgIHRjcENsaWVu
dCA9IG5ldyBUQ1BDaGFubmVsQ2xpZW50KGV4ZWN1dG9yLCB0aGlzLCBpcCwgcG9ydCk7Ci0gIH0K
LQotICAvKioKLSAgICogRGlzY29ubmVjdHMgZnJvbSB0aGUgcm9vbS4KLSAgICoKLSAgICogUnVu
cyBvbiB0aGUgbG9vcGVyIHRocmVhZC4KLSAgICovCi0gIHByaXZhdGUgdm9pZCBkaXNjb25uZWN0
RnJvbVJvb21JbnRlcm5hbCgpIHsKLSAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuQ0xP
U0VEOwotCi0gICAgaWYgKHRjcENsaWVudCAhPSBudWxsKSB7Ci0gICAgICB0Y3BDbGllbnQuZGlz
Y29ubmVjdCgpOwotICAgICAgdGNwQ2xpZW50ID0gbnVsbDsKLSAgICB9Ci0gICAgZXhlY3V0b3Iu
c2h1dGRvd24oKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZW5kT2ZmZXJT
ZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkg
ewotICAgICAgICAgIHJlcG9ydEVycm9yKCJTZW5kaW5nIG9mZmVyIFNEUCBpbiBub24gY29ubmVj
dGVkIHN0YXRlLiIpOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBKU09O
T2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJz
ZHAiLCBzZHAuZGVzY3JpcHRpb24pOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgIm9m
ZmVyIik7Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2VuZEFuc3dlclNkcChm
aW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNv
blB1dChqc29uLCAic2RwIiwgc2RwLmRlc2NyaXB0aW9uKTsKLSAgICAgICAganNvblB1dChqc29u
LCAidHlwZSIsICJhbnN3ZXIiKTsKLSAgICAgICAgc2VuZE1lc3NhZ2UoanNvbi50b1N0cmluZygp
KTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBz
ZW5kTG9jYWxJY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAg
IGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAg
ICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09O
T2JqZWN0KCk7Ci0gICAgICAgIGpzb25QdXQoanNvbiwgInR5cGUiLCAiY2FuZGlkYXRlIik7Ci0g
ICAgICAgIGpzb25QdXQoanNvbiwgImxhYmVsIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgpOwot
ICAgICAgICBqc29uUHV0KGpzb24sICJpZCIsIGNhbmRpZGF0ZS5zZHBNaWQpOwotICAgICAgICBq
c29uUHV0KGpzb24sICJjYW5kaWRhdGUiLCBjYW5kaWRhdGUuc2RwKTsKLQotICAgICAgICBpZiAo
cm9vbVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICByZXBv
cnRFcnJvcigiU2VuZGluZyBJQ0UgY2FuZGlkYXRlIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7
Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpzb24u
dG9TdHJpbmcoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvKiogU2VuZCByZW1vdmVk
IEljZSBjYW5kaWRhdGVzIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4gKi8KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZVJlbW92YWxzKGZpbmFsIEljZUNh
bmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJs
ZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpz
b24sICJ0eXBlIiwgInJlbW92ZS1jYW5kaWRhdGVzIik7Ci0gICAgICAgIEpTT05BcnJheSBqc29u
QXJyYXkgPSBuZXcgSlNPTkFycmF5KCk7Ci0gICAgICAgIGZvciAoZmluYWwgSWNlQ2FuZGlkYXRl
IGNhbmRpZGF0ZSA6IGNhbmRpZGF0ZXMpIHsKLSAgICAgICAgICBqc29uQXJyYXkucHV0KHRvSnNv
bkNhbmRpZGF0ZShjYW5kaWRhdGUpKTsKLSAgICAgICAgfQotICAgICAgICBqc29uUHV0KGpzb24s
ICJjYW5kaWRhdGVzIiwganNvbkFycmF5KTsKLQotICAgICAgICBpZiAocm9vbVN0YXRlICE9IENv
bm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigiU2VuZGlu
ZyBJQ0UgY2FuZGlkYXRlIHJlbW92YWxzIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7Ci0gICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIHNlbmRNZXNzYWdlKGpzb24udG9TdHJp
bmcoKSk7Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIFRD
UENoYW5uZWxDbGllbnQgZXZlbnQgaGFuZGxlcnMKLQotICAvKioKLSAgICogSWYgdGhlIGNsaWVu
dCBpcyB0aGUgc2VydmVyIHNpZGUsIHRoaXMgd2lsbCB0cmlnZ2VyIG9uQ29ubmVjdGVkVG9Sb29t
LgotICAgKi8KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVENQQ29ubmVjdGVkKGJvb2xl
YW4gaXNTZXJ2ZXIpIHsKLSAgICBpZiAoaXNTZXJ2ZXIpIHsKLSAgICAgIHJvb21TdGF0ZSA9IENv
bm5lY3Rpb25TdGF0ZS5DT05ORUNURUQ7Ci0KLSAgICAgIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFy
YW1ldGVycyA9IG5ldyBTaWduYWxpbmdQYXJhbWV0ZXJzKAotICAgICAgICAgIC8vIEljZSBzZXJ2
ZXJzIGFyZSBub3QgbmVlZGVkIGZvciBkaXJlY3QgY29ubmVjdGlvbnMuCi0gICAgICAgICAgbmV3
IExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPigpLAotICAgICAgICAgIGlzU2Vy
dmVyLCAvLyBTZXJ2ZXIgc2lkZSBhY3RzIGFzIHRoZSBpbml0aWF0b3Igb24gZGlyZWN0IGNvbm5l
Y3Rpb25zLgotICAgICAgICAgIG51bGwsIC8vIGNsaWVudElkCi0gICAgICAgICAgbnVsbCwgLy8g
d3NzVXJsCi0gICAgICAgICAgbnVsbCwgLy8gd3dzUG9zdFVybAotICAgICAgICAgIG51bGwsIC8v
IG9mZmVyU2RwCi0gICAgICAgICAgbnVsbCAvLyBpY2VDYW5kaWRhdGVzCi0gICAgICAgICAgKTsK
LSAgICAgIGV2ZW50cy5vbkNvbm5lY3RlZFRvUm9vbShwYXJhbWV0ZXJzKTsKLSAgICB9Ci0gIH0K
LQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25UQ1BNZXNzYWdlKFN0cmluZyBtc2cpIHsK
LSAgICB0cnkgewotICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QobXNnKTsK
LSAgICAgIFN0cmluZyB0eXBlID0ganNvbi5vcHRTdHJpbmcoInR5cGUiKTsKLSAgICAgIGlmICh0
eXBlLmVxdWFscygiY2FuZGlkYXRlIikpIHsKLSAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2Fu
ZGlkYXRlKHRvSmF2YUNhbmRpZGF0ZShqc29uKSk7Ci0gICAgICB9IGVsc2UgaWYgKHR5cGUuZXF1
YWxzKCJyZW1vdmUtY2FuZGlkYXRlcyIpKSB7Ci0gICAgICAgIEpTT05BcnJheSBjYW5kaWRhdGVB
cnJheSA9IGpzb24uZ2V0SlNPTkFycmF5KCJjYW5kaWRhdGVzIik7Ci0gICAgICAgIEljZUNhbmRp
ZGF0ZVtdIGNhbmRpZGF0ZXMgPSBuZXcgSWNlQ2FuZGlkYXRlW2NhbmRpZGF0ZUFycmF5Lmxlbmd0
aCgpXTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5kaWRhdGVBcnJheS5sZW5ndGgo
KTsgKytpKSB7Ci0gICAgICAgICAgY2FuZGlkYXRlc1tpXSA9IHRvSmF2YUNhbmRpZGF0ZShjYW5k
aWRhdGVBcnJheS5nZXRKU09OT2JqZWN0KGkpKTsKLSAgICAgICAgfQotICAgICAgICBldmVudHMu
b25SZW1vdGVJY2VDYW5kaWRhdGVzUmVtb3ZlZChjYW5kaWRhdGVzKTsKLSAgICAgIH0gZWxzZSBp
ZiAodHlwZS5lcXVhbHMoImFuc3dlciIpKSB7Ci0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbiBz
ZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0
aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlwZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAiKSk7
Ci0gICAgICAgIGV2ZW50cy5vblJlbW90ZURlc2NyaXB0aW9uKHNkcCk7Ci0gICAgICB9IGVsc2Ug
aWYgKHR5cGUuZXF1YWxzKCJvZmZlciIpKSB7Ci0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbiBz
ZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0
aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlwZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAiKSk7
Ci0KLSAgICAgICAgU2lnbmFsaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gbmV3IFNpZ25hbGlu
Z1BhcmFtZXRlcnMoCi0gICAgICAgICAgICAvLyBJY2Ugc2VydmVycyBhcmUgbm90IG5lZWRlZCBm
b3IgZGlyZWN0IGNvbm5lY3Rpb25zLgotICAgICAgICAgICAgbmV3IExpbmtlZExpc3Q8UGVlckNv
bm5lY3Rpb24uSWNlU2VydmVyPigpLAotICAgICAgICAgICAgZmFsc2UsIC8vIFRoaXMgY29kZSB3
aWxsIG9ubHkgYmUgcnVuIG9uIHRoZSBjbGllbnQgc2lkZS4gU28sIHdlIGFyZSBub3QgdGhlIGlu
aXRpYXRvci4KLSAgICAgICAgICAgIG51bGwsIC8vIGNsaWVudElkCi0gICAgICAgICAgICBudWxs
LCAvLyB3c3NVcmwKLSAgICAgICAgICAgIG51bGwsIC8vIHdzc1Bvc3RVcmwKLSAgICAgICAgICAg
IHNkcCwgLy8gb2ZmZXJTZHAKLSAgICAgICAgICAgIG51bGwgLy8gaWNlQ2FuZGlkYXRlcwotICAg
ICAgICAgICAgKTsKLSAgICAgICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RF
RDsKLSAgICAgICAgZXZlbnRzLm9uQ29ubmVjdGVkVG9Sb29tKHBhcmFtZXRlcnMpOwotICAgICAg
fSBlbHNlIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIlVuZXhwZWN0ZWQgVENQIG1lc3NhZ2U6ICIg
KyBtc2cpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAg
cmVwb3J0RXJyb3IoIlRDUCBtZXNzYWdlIEpTT04gcGFyc2luZyBlcnJvcjogIiArIGUudG9TdHJp
bmcoKSk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uVENQRXJy
b3IoU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgcmVwb3J0RXJyb3IoIlRDUCBjb25uZWN0aW9u
IGVycm9yOiAiICsgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIG9uVENQQ2xvc2UoKSB7Ci0gICAgZXZlbnRzLm9uQ2hhbm5lbENsb3NlKCk7Ci0gIH0KLQot
ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotICAvLyBIZWxwZXIgZnVuY3Rpb25zLgotICBwcml2YXRlIHZvaWQg
cmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGVycm9yTWVzc2FnZSkgewotICAgIExvZy5lKFRBRywg
ZXJyb3JNZXNzYWdlKTsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocm9v
bVN0YXRlICE9IENvbm5lY3Rpb25TdGF0ZS5FUlJPUikgewotICAgICAgICAgIHJvb21TdGF0ZSA9
IENvbm5lY3Rpb25TdGF0ZS5FUlJPUjsKLSAgICAgICAgICBldmVudHMub25DaGFubmVsRXJyb3Io
ZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIHNlbmRNZXNzYWdlKGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgZXhlY3V0
b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdGNwQ2xpZW50LnNlbmQobWVzc2FnZSk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBQdXQgYSB8a2V5fC0+fHZhbHVlfCBtYXBwaW5nIGluIHxq
c29ufC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBqc29uUHV0KEpTT05PYmplY3QganNvbiwgU3Ry
aW5nIGtleSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGpzb24ucHV0KGtleSwg
dmFsdWUpOwotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3
IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gQ29udmVydHMgYSBKYXZh
IGNhbmRpZGF0ZSB0byBhIEpTT05PYmplY3QuCi0gIHByaXZhdGUgc3RhdGljIEpTT05PYmplY3Qg
dG9Kc29uQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBKU09O
T2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgIGpzb25QdXQoanNvbiwgImxhYmVs
IiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgpOwotICAgIGpzb25QdXQoanNvbiwgImlkIiwgY2Fu
ZGlkYXRlLnNkcE1pZCk7Ci0gICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlIiwgY2FuZGlkYXRl
LnNkcCk7Ci0gICAgcmV0dXJuIGpzb247Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBhIEpTT04gY2Fu
ZGlkYXRlIHRvIGEgSmF2YSBvYmplY3QuCi0gIHByaXZhdGUgc3RhdGljIEljZUNhbmRpZGF0ZSB0
b0phdmFDYW5kaWRhdGUoSlNPTk9iamVjdCBqc29uKSB0aHJvd3MgSlNPTkV4Y2VwdGlvbiB7Ci0g
ICAgcmV0dXJuIG5ldyBJY2VDYW5kaWRhdGUoCi0gICAgICAgIGpzb24uZ2V0U3RyaW5nKCJpZCIp
LCBqc29uLmdldEludCgibGFiZWwiKSwganNvbi5nZXRTdHJpbmcoImNhbmRpZGF0ZSIpKTsKLSAg
fQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0h1ZEZyYWdtZW50LmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0h1ZEZyYWdtZW50Lmph
dmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9IdWRG
cmFnbWVudC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjA1ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5h
cHAuRnJhZ21lbnQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC51
dGlsLlR5cGVkVmFsdWU7Ci1pbXBvcnQgYW5kcm9pZC52aWV3LkxheW91dEluZmxhdGVyOwotaW1w
b3J0IGFuZHJvaWQudmlldy5WaWV3OwotaW1wb3J0IGFuZHJvaWQudmlldy5WaWV3R3JvdXA7Ci1p
bXBvcnQgYW5kcm9pZC53aWRnZXQuSW1hZ2VCdXR0b247Ci1pbXBvcnQgYW5kcm9pZC53aWRnZXQu
VGV4dFZpZXc7Ci0KLWltcG9ydCBvcmcud2VicnRjLlN0YXRzUmVwb3J0OwotCi1pbXBvcnQgamF2
YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKLQotLyoqCi0gKiBGcmFnbWVu
dCBmb3IgSFVEIHN0YXRpc3RpY3MgZGlzcGxheS4KLSAqLwotcHVibGljIGNsYXNzIEh1ZEZyYWdt
ZW50IGV4dGVuZHMgRnJhZ21lbnQgewotICBwcml2YXRlIFZpZXcgY29udHJvbFZpZXc7Ci0gIHBy
aXZhdGUgVGV4dFZpZXcgZW5jb2RlclN0YXRWaWV3OwotICBwcml2YXRlIFRleHRWaWV3IGh1ZFZp
ZXdCd2U7Ci0gIHByaXZhdGUgVGV4dFZpZXcgaHVkVmlld0Nvbm5lY3Rpb247Ci0gIHByaXZhdGUg
VGV4dFZpZXcgaHVkVmlld1ZpZGVvU2VuZDsKLSAgcHJpdmF0ZSBUZXh0VmlldyBodWRWaWV3Vmlk
ZW9SZWN2OwotICBwcml2YXRlIEltYWdlQnV0dG9uIHRvZ2dsZURlYnVnQnV0dG9uOwotICBwcml2
YXRlIGJvb2xlYW4gdmlkZW9DYWxsRW5hYmxlZDsKLSAgcHJpdmF0ZSBib29sZWFuIGRpc3BsYXlI
dWQ7Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBpc1J1bm5pbmc7Ci0gIHByaXZhdGUgQ3B1
TW9uaXRvciBjcHVNb25pdG9yOwotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgVmlldyBvbkNyZWF0
ZVZpZXcoCi0gICAgICBMYXlvdXRJbmZsYXRlciBpbmZsYXRlciwgVmlld0dyb3VwIGNvbnRhaW5l
ciwgQnVuZGxlIHNhdmVkSW5zdGFuY2VTdGF0ZSkgewotICAgIGNvbnRyb2xWaWV3ID0gaW5mbGF0
ZXIuaW5mbGF0ZShSLmxheW91dC5mcmFnbWVudF9odWQsIGNvbnRhaW5lciwgZmFsc2UpOwotCi0g
ICAgLy8gQ3JlYXRlIFVJIGNvbnRyb2xzLgotICAgIGVuY29kZXJTdGF0VmlldyA9IChUZXh0Vmll
dykgY29udHJvbFZpZXcuZmluZFZpZXdCeUlkKFIuaWQuZW5jb2Rlcl9zdGF0X2NhbGwpOwotICAg
IGh1ZFZpZXdCd2UgPSAoVGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmh1
ZF9zdGF0X2J3ZSk7Ci0gICAgaHVkVmlld0Nvbm5lY3Rpb24gPSAoVGV4dFZpZXcpIGNvbnRyb2xW
aWV3LmZpbmRWaWV3QnlJZChSLmlkLmh1ZF9zdGF0X2Nvbm5lY3Rpb24pOwotICAgIGh1ZFZpZXdW
aWRlb1NlbmQgPSAoVGV4dFZpZXcpIGNvbnRyb2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmh1ZF9z
dGF0X3ZpZGVvX3NlbmQpOwotICAgIGh1ZFZpZXdWaWRlb1JlY3YgPSAoVGV4dFZpZXcpIGNvbnRy
b2xWaWV3LmZpbmRWaWV3QnlJZChSLmlkLmh1ZF9zdGF0X3ZpZGVvX3JlY3YpOwotICAgIHRvZ2ds
ZURlYnVnQnV0dG9uID0gKEltYWdlQnV0dG9uKSBjb250cm9sVmlldy5maW5kVmlld0J5SWQoUi5p
ZC5idXR0b25fdG9nZ2xlX2RlYnVnKTsKLQotICAgIHRvZ2dsZURlYnVnQnV0dG9uLnNldE9uQ2xp
Y2tMaXN0ZW5lcihuZXcgVmlldy5PbkNsaWNrTGlzdGVuZXIoKSB7Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIG9uQ2xpY2soVmlldyB2aWV3KSB7Ci0gICAgICAgIGlmIChkaXNw
bGF5SHVkKSB7Ci0gICAgICAgICAgaW50IHZpc2liaWxpdHkgPQotICAgICAgICAgICAgICAoaHVk
Vmlld0J3ZS5nZXRWaXNpYmlsaXR5KCkgPT0gVmlldy5WSVNJQkxFKSA/IFZpZXcuSU5WSVNJQkxF
IDogVmlldy5WSVNJQkxFOwotICAgICAgICAgIGh1ZFZpZXdzU2V0UHJvcGVydGllcyh2aXNpYmls
aXR5KTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotCi0gICAgcmV0dXJuIGNvbnRyb2xW
aWV3OwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU3RhcnQoKSB7Ci0gICAg
c3VwZXIub25TdGFydCgpOwotCi0gICAgQnVuZGxlIGFyZ3MgPSBnZXRBcmd1bWVudHMoKTsKLSAg
ICBpZiAoYXJncyAhPSBudWxsKSB7Ci0gICAgICB2aWRlb0NhbGxFbmFibGVkID0gYXJncy5nZXRC
b29sZWFuKENhbGxBY3Rpdml0eS5FWFRSQV9WSURFT19DQUxMLCB0cnVlKTsKLSAgICAgIGRpc3Bs
YXlIdWQgPSBhcmdzLmdldEJvb2xlYW4oQ2FsbEFjdGl2aXR5LkVYVFJBX0RJU1BMQVlfSFVELCBm
YWxzZSk7Ci0gICAgfQotICAgIGludCB2aXNpYmlsaXR5ID0gZGlzcGxheUh1ZCA/IFZpZXcuVklT
SUJMRSA6IFZpZXcuSU5WSVNJQkxFOwotICAgIGVuY29kZXJTdGF0Vmlldy5zZXRWaXNpYmlsaXR5
KHZpc2liaWxpdHkpOwotICAgIHRvZ2dsZURlYnVnQnV0dG9uLnNldFZpc2liaWxpdHkodmlzaWJp
bGl0eSk7Ci0gICAgaHVkVmlld3NTZXRQcm9wZXJ0aWVzKFZpZXcuSU5WSVNJQkxFKTsKLSAgICBp
c1J1bm5pbmcgPSB0cnVlOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uU3Rv
cCgpIHsKLSAgICBpc1J1bm5pbmcgPSBmYWxzZTsKLSAgICBzdXBlci5vblN0b3AoKTsKLSAgfQot
Ci0gIHB1YmxpYyB2b2lkIHNldENwdU1vbml0b3IoQ3B1TW9uaXRvciBjcHVNb25pdG9yKSB7Ci0g
ICAgdGhpcy5jcHVNb25pdG9yID0gY3B1TW9uaXRvcjsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBo
dWRWaWV3c1NldFByb3BlcnRpZXMoaW50IHZpc2liaWxpdHkpIHsKLSAgICBodWRWaWV3QndlLnNl
dFZpc2liaWxpdHkodmlzaWJpbGl0eSk7Ci0gICAgaHVkVmlld0Nvbm5lY3Rpb24uc2V0VmlzaWJp
bGl0eSh2aXNpYmlsaXR5KTsKLSAgICBodWRWaWV3VmlkZW9TZW5kLnNldFZpc2liaWxpdHkodmlz
aWJpbGl0eSk7Ci0gICAgaHVkVmlld1ZpZGVvUmVjdi5zZXRWaXNpYmlsaXR5KHZpc2liaWxpdHkp
OwotICAgIGh1ZFZpZXdCd2Uuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfUFQs
IDUpOwotICAgIGh1ZFZpZXdDb25uZWN0aW9uLnNldFRleHRTaXplKFR5cGVkVmFsdWUuQ09NUExF
WF9VTklUX1BULCA1KTsKLSAgICBodWRWaWV3VmlkZW9TZW5kLnNldFRleHRTaXplKFR5cGVkVmFs
dWUuQ09NUExFWF9VTklUX1BULCA1KTsKLSAgICBodWRWaWV3VmlkZW9SZWN2LnNldFRleHRTaXpl
KFR5cGVkVmFsdWUuQ09NUExFWF9VTklUX1BULCA1KTsKLSAgfQotCi0gIHByaXZhdGUgTWFwPFN0
cmluZywgU3RyaW5nPiBnZXRSZXBvcnRNYXAoU3RhdHNSZXBvcnQgcmVwb3J0KSB7Ci0gICAgTWFw
PFN0cmluZywgU3RyaW5nPiByZXBvcnRNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4o
KTsKLSAgICBmb3IgKFN0YXRzUmVwb3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZhbHVlcykgewot
ICAgICAgcmVwb3J0TWFwLnB1dCh2YWx1ZS5uYW1lLCB2YWx1ZS52YWx1ZSk7Ci0gICAgfQotICAg
IHJldHVybiByZXBvcnRNYXA7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCB1cGRhdGVFbmNvZGVyU3Rh
dGlzdGljcyhmaW5hbCBTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHsKLSAgICBpZiAoIWlzUnVubmlu
ZyB8fCAhZGlzcGxheUh1ZCkgewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBTdHJpbmdCdWls
ZGVyIGVuY29kZXJTdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoMTI4KTsKLSAgICBTdHJpbmdCdWls
ZGVyIGJ3ZVN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIFN0cmluZ0J1aWxkZXIgY29u
bmVjdGlvblN0YXQgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgIFN0cmluZ0J1aWxkZXIgdmlk
ZW9TZW5kU3RhdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0gICAgU3RyaW5nQnVpbGRlciB2aWRl
b1JlY3ZTdGF0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLSAgICBTdHJpbmcgZnBzID0gbnVsbDsK
LSAgICBTdHJpbmcgdGFyZ2V0Qml0cmF0ZSA9IG51bGw7Ci0gICAgU3RyaW5nIGFjdHVhbEJpdHJh
dGUgPSBudWxsOwotCi0gICAgZm9yIChTdGF0c1JlcG9ydCByZXBvcnQgOiByZXBvcnRzKSB7Ci0g
ICAgICBpZiAocmVwb3J0LnR5cGUuZXF1YWxzKCJzc3JjIikgJiYgcmVwb3J0LmlkLmNvbnRhaW5z
KCJzc3JjIikgJiYgcmVwb3J0LmlkLmNvbnRhaW5zKCJzZW5kIikpIHsKLSAgICAgICAgLy8gU2Vu
ZCB2aWRlbyBzdGF0aXN0aWNzLgotICAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9ydE1h
cCA9IGdldFJlcG9ydE1hcChyZXBvcnQpOwotICAgICAgICBTdHJpbmcgdHJhY2tJZCA9IHJlcG9y
dE1hcC5nZXQoImdvb2dUcmFja0lkIik7Ci0gICAgICAgIGlmICh0cmFja0lkICE9IG51bGwgJiYg
dHJhY2tJZC5jb250YWlucyhQZWVyQ29ubmVjdGlvbkNsaWVudC5WSURFT19UUkFDS19JRCkpIHsK
LSAgICAgICAgICBmcHMgPSByZXBvcnRNYXAuZ2V0KCJnb29nRnJhbWVSYXRlU2VudCIpOwotICAg
ICAgICAgIHZpZGVvU2VuZFN0YXQuYXBwZW5kKHJlcG9ydC5pZCkuYXBwZW5kKCJcbiIpOwotICAg
ICAgICAgIGZvciAoU3RhdHNSZXBvcnQuVmFsdWUgdmFsdWUgOiByZXBvcnQudmFsdWVzKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHZhbHVlLm5hbWUucmVwbGFjZSgiZ29vZyIsICIiKTsK
LSAgICAgICAgICAgIHZpZGVvU2VuZFN0YXQuYXBwZW5kKG5hbWUpLmFwcGVuZCgiPSIpLmFwcGVu
ZCh2YWx1ZS52YWx1ZSkuYXBwZW5kKCJcbiIpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgfSBlbHNlIGlmIChyZXBvcnQudHlwZS5lcXVhbHMoInNzcmMiKSAmJiByZXBvcnQuaWQuY29u
dGFpbnMoInNzcmMiKQotICAgICAgICAgICYmIHJlcG9ydC5pZC5jb250YWlucygicmVjdiIpKSB7
Ci0gICAgICAgIC8vIFJlY2VpdmUgdmlkZW8gc3RhdGlzdGljcy4KLSAgICAgICAgTWFwPFN0cmlu
ZywgU3RyaW5nPiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAocmVwb3J0KTsKLSAgICAgICAgLy8g
Q2hlY2sgaWYgdGhpcyBzdGF0IGlzIGZvciB2aWRlbyB0cmFjay4KLSAgICAgICAgU3RyaW5nIGZy
YW1lV2lkdGggPSByZXBvcnRNYXAuZ2V0KCJnb29nRnJhbWVXaWR0aFJlY2VpdmVkIik7Ci0gICAg
ICAgIGlmIChmcmFtZVdpZHRoICE9IG51bGwpIHsKLSAgICAgICAgICB2aWRlb1JlY3ZTdGF0LmFw
cGVuZChyZXBvcnQuaWQpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICBmb3IgKFN0YXRzUmVwb3J0
LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZhbHVlcykgewotICAgICAgICAgICAgU3RyaW5nIG5hbWUg
PSB2YWx1ZS5uYW1lLnJlcGxhY2UoImdvb2ciLCAiIik7Ci0gICAgICAgICAgICB2aWRlb1JlY3ZT
dGF0LmFwcGVuZChuYW1lKS5hcHBlbmQoIj0iKS5hcHBlbmQodmFsdWUudmFsdWUpLmFwcGVuZCgi
XG4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSBpZiAocmVwb3J0Lmlk
LmVxdWFscygiYndlZm9ydmlkZW8iKSkgewotICAgICAgICAvLyBCV0Ugc3RhdGlzdGljcy4KLSAg
ICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiByZXBvcnRNYXAgPSBnZXRSZXBvcnRNYXAocmVwb3J0
KTsKLSAgICAgICAgdGFyZ2V0Qml0cmF0ZSA9IHJlcG9ydE1hcC5nZXQoImdvb2dUYXJnZXRFbmNC
aXRyYXRlIik7Ci0gICAgICAgIGFjdHVhbEJpdHJhdGUgPSByZXBvcnRNYXAuZ2V0KCJnb29nQWN0
dWFsRW5jQml0cmF0ZSIpOwotCi0gICAgICAgIGJ3ZVN0YXQuYXBwZW5kKHJlcG9ydC5pZCkuYXBw
ZW5kKCJcbiIpOwotICAgICAgICBmb3IgKFN0YXRzUmVwb3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0
LnZhbHVlcykgewotICAgICAgICAgIFN0cmluZyBuYW1lID0gdmFsdWUubmFtZS5yZXBsYWNlKCJn
b29nIiwgIiIpLnJlcGxhY2UoIkF2YWlsYWJsZSIsICIiKTsKLSAgICAgICAgICBid2VTdGF0LmFw
cGVuZChuYW1lKS5hcHBlbmQoIj0iKS5hcHBlbmQodmFsdWUudmFsdWUpLmFwcGVuZCgiXG4iKTsK
LSAgICAgICAgfQotICAgICAgfSBlbHNlIGlmIChyZXBvcnQudHlwZS5lcXVhbHMoImdvb2dDYW5k
aWRhdGVQYWlyIikpIHsKLSAgICAgICAgLy8gQ29ubmVjdGlvbiBzdGF0aXN0aWNzLgotICAgICAg
ICBNYXA8U3RyaW5nLCBTdHJpbmc+IHJlcG9ydE1hcCA9IGdldFJlcG9ydE1hcChyZXBvcnQpOwot
ICAgICAgICBTdHJpbmcgYWN0aXZlQ29ubmVjdGlvbiA9IHJlcG9ydE1hcC5nZXQoImdvb2dBY3Rp
dmVDb25uZWN0aW9uIik7Ci0gICAgICAgIGlmIChhY3RpdmVDb25uZWN0aW9uICE9IG51bGwgJiYg
YWN0aXZlQ29ubmVjdGlvbi5lcXVhbHMoInRydWUiKSkgewotICAgICAgICAgIGNvbm5lY3Rpb25T
dGF0LmFwcGVuZChyZXBvcnQuaWQpLmFwcGVuZCgiXG4iKTsKLSAgICAgICAgICBmb3IgKFN0YXRz
UmVwb3J0LlZhbHVlIHZhbHVlIDogcmVwb3J0LnZhbHVlcykgewotICAgICAgICAgICAgU3RyaW5n
IG5hbWUgPSB2YWx1ZS5uYW1lLnJlcGxhY2UoImdvb2ciLCAiIik7Ci0gICAgICAgICAgICBjb25u
ZWN0aW9uU3RhdC5hcHBlbmQobmFtZSkuYXBwZW5kKCI9IikuYXBwZW5kKHZhbHVlLnZhbHVlKS5h
cHBlbmQoIlxuIik7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICAg
IGh1ZFZpZXdCd2Uuc2V0VGV4dChid2VTdGF0LnRvU3RyaW5nKCkpOwotICAgIGh1ZFZpZXdDb25u
ZWN0aW9uLnNldFRleHQoY29ubmVjdGlvblN0YXQudG9TdHJpbmcoKSk7Ci0gICAgaHVkVmlld1Zp
ZGVvU2VuZC5zZXRUZXh0KHZpZGVvU2VuZFN0YXQudG9TdHJpbmcoKSk7Ci0gICAgaHVkVmlld1Zp
ZGVvUmVjdi5zZXRUZXh0KHZpZGVvUmVjdlN0YXQudG9TdHJpbmcoKSk7Ci0KLSAgICBpZiAodmlk
ZW9DYWxsRW5hYmxlZCkgewotICAgICAgaWYgKGZwcyAhPSBudWxsKSB7Ci0gICAgICAgIGVuY29k
ZXJTdGF0LmFwcGVuZCgiRnBzOiAgIikuYXBwZW5kKGZwcykuYXBwZW5kKCJcbiIpOwotICAgICAg
fQotICAgICAgaWYgKHRhcmdldEJpdHJhdGUgIT0gbnVsbCkgewotICAgICAgICBlbmNvZGVyU3Rh
dC5hcHBlbmQoIlRhcmdldCBCUjogIikuYXBwZW5kKHRhcmdldEJpdHJhdGUpLmFwcGVuZCgiXG4i
KTsKLSAgICAgIH0KLSAgICAgIGlmIChhY3R1YWxCaXRyYXRlICE9IG51bGwpIHsKLSAgICAgICAg
ZW5jb2RlclN0YXQuYXBwZW5kKCJBY3R1YWwgQlI6ICIpLmFwcGVuZChhY3R1YWxCaXRyYXRlKS5h
cHBlbmQoIlxuIik7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGNwdU1vbml0b3IgIT0gbnVs
bCkgewotICAgICAgZW5jb2RlclN0YXQuYXBwZW5kKCJDUFUlOiAiKQotICAgICAgICAgIC5hcHBl
bmQoY3B1TW9uaXRvci5nZXRDcHVVc2FnZUN1cnJlbnQoKSkKLSAgICAgICAgICAuYXBwZW5kKCIv
IikKLSAgICAgICAgICAuYXBwZW5kKGNwdU1vbml0b3IuZ2V0Q3B1VXNhZ2VBdmVyYWdlKCkpCi0g
ICAgICAgICAgLmFwcGVuZCgiLiBGcmVxOiAiKQotICAgICAgICAgIC5hcHBlbmQoY3B1TW9uaXRv
ci5nZXRGcmVxdWVuY3lTY2FsZUF2ZXJhZ2UoKSk7Ci0gICAgfQotICAgIGVuY29kZXJTdGF0Vmll
dy5zZXRUZXh0KGVuY29kZXJTdGF0LnRvU3RyaW5nKCkpOwotICB9Ci19CkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3Ny
Yy9vcmcvYXBwc3BvdC9hcHBydGMvUGVlckNvbm5lY3Rpb25DbGllbnQuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUGVlckNvbm5lY3Rpb25DbGllbnQuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1BlZXJD
b25uZWN0aW9uQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTY4ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5vcy5FbnZpcm9ubWVudDsK
LWltcG9ydCBhbmRyb2lkLm9zLlBhcmNlbEZpbGVEZXNjcmlwdG9yOwotaW1wb3J0IGFuZHJvaWQu
dXRpbC5Mb2c7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRp
b247Ci1pbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwotaW1wb3J0IGphdmEudXRpbC5FbnVt
U2V0OwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0
OwotaW1wb3J0IGphdmEudXRpbC5UaW1lcjsKLWltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOwot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0aWwu
Y29uY3VycmVudC5TY2hlZHVsZWRFeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLnJl
Z2V4Lk1hdGNoZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci1pbXBvcnQgb3Jn
LmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0ZXJzOwotaW1wb3J0
IG9yZy53ZWJydGMuQXVkaW9Tb3VyY2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5BdWRpb1RyYWNrOwot
aW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRj
LkRhdGFDaGFubmVsOwotaW1wb3J0IG9yZy53ZWJydGMuRWdsQmFzZTsKLWltcG9ydCBvcmcud2Vi
cnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5NZWRpYUNvbnN0cmFpbnRzOwotaW1wb3J0IG9yZy53ZWJydGMuTWVkaWFTdHJlYW07
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlBl
ZXJDb25uZWN0aW9uLkljZUNvbm5lY3Rpb25TdGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJD
b25uZWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcud2VicnRjLlJ0cFBhcmFtZXRlcnM7Ci1pbXBv
cnQgb3JnLndlYnJ0Yy5SdHBTZW5kZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZHBPYnNlcnZlcjsK
LWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcud2VicnRj
LlN0YXRzT2JzZXJ2ZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TdGF0c1JlcG9ydDsKLWltcG9ydCBv
cmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVy
OwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9Tb3VyY2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRl
b1RyYWNrOwotaW1wb3J0IG9yZy53ZWJydGMudm9pY2VlbmdpbmUuV2ViUnRjQXVkaW9NYW5hZ2Vy
OwotaW1wb3J0IG9yZy53ZWJydGMudm9pY2VlbmdpbmUuV2ViUnRjQXVkaW9VdGlsczsKLQotLyoq
Ci0gKiBQZWVyIGNvbm5lY3Rpb24gY2xpZW50IGltcGxlbWVudGF0aW9uLgotICoKLSAqIDxwPkFs
bCBwdWJsaWMgbWV0aG9kcyBhcmUgcm91dGVkIHRvIGxvY2FsIGxvb3BlciB0aHJlYWQuCi0gKiBB
bGwgUGVlckNvbm5lY3Rpb25FdmVudHMgY2FsbGJhY2tzIGFyZSBpbnZva2VkIGZyb20gdGhlIHNh
bWUgbG9vcGVyIHRocmVhZC4KLSAqIFRoaXMgY2xhc3MgaXMgYSBzaW5nbGV0b24uCi0gKi8KLXB1
YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlvbkNsaWVudCB7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwg
U3RyaW5nIFZJREVPX1RSQUNLX0lEID0gIkFSREFNU3YwIjsKLSAgcHVibGljIHN0YXRpYyBmaW5h
bCBTdHJpbmcgQVVESU9fVFJBQ0tfSUQgPSAiQVJEQU1TYTAiOwotICBwdWJsaWMgc3RhdGljIGZp
bmFsIFN0cmluZyBWSURFT19UUkFDS19UWVBFID0gInZpZGVvIjsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFRBRyA9ICJQQ1JUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBWSURFT19DT0RFQ19WUDggPSAiVlA4IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFZJREVPX0NPREVDX1ZQOSA9ICJWUDkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVklERU9fQ09ERUNfSDI2NCA9ICJIMjY0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIEFVRElPX0NPREVDX09QVVMgPSAib3B1cyI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBBVURJT19DT0RFQ19JU0FDID0gIklTQUMiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVklERU9fQ09ERUNfUEFSQU1fU1RBUlRfQklUUkFURSA9ICJ4LWdvb2dsZS1zdGFy
dC1iaXRyYXRlIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0NPREVDX1BB
UkFNX0JJVFJBVEUgPSAibWF4YXZlcmFnZWJpdHJhdGUiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgQVVESU9fRUNIT19DQU5DRUxMQVRJT05fQ09OU1RSQUlOVCA9ICJnb29nRWNob0Nh
bmNlbGxhdGlvbiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJT19BVVRPX0dB
SU5fQ09OVFJPTF9DT05TVFJBSU5UID0gImdvb2dBdXRvR2FpbkNvbnRyb2wiOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgQVVESU9fSElHSF9QQVNTX0ZJTFRFUl9DT05TVFJBSU5UID0g
Imdvb2dIaWdocGFzc0ZpbHRlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBBVURJ
T19OT0lTRV9TVVBQUkVTU0lPTl9DT05TVFJBSU5UID0gImdvb2dOb2lzZVN1cHByZXNzaW9uIjsK
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFVRElPX0xFVkVMX0NPTlRST0xfQ09OU1RS
QUlOVCA9ICJsZXZlbENvbnRyb2wiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFRM
U19TUlRQX0tFWV9BR1JFRU1FTlRfQ09OU1RSQUlOVCA9ICJEdGxzU3J0cEtleUFncmVlbWVudCI7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRF9WSURFT19XSURUSCA9IDEyODA7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBIRF9WSURFT19IRUlHSFQgPSA3MjA7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBCUFNfSU5fS0JQUyA9IDEwMDA7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgUGVlckNvbm5lY3Rpb25DbGllbnQgaW5zdGFuY2UgPSBuZXcgUGVlckNvbm5lY3Rpb25D
bGllbnQoKTsKLSAgcHJpdmF0ZSBmaW5hbCBQQ09ic2VydmVyIHBjT2JzZXJ2ZXIgPSBuZXcgUENP
YnNlcnZlcigpOwotICBwcml2YXRlIGZpbmFsIFNEUE9ic2VydmVyIHNkcE9ic2VydmVyID0gbmV3
IFNEUE9ic2VydmVyKCk7Ci0gIHByaXZhdGUgZmluYWwgU2NoZWR1bGVkRXhlY3V0b3JTZXJ2aWNl
IGV4ZWN1dG9yOwotCi0gIHByaXZhdGUgQ29udGV4dCBjb250ZXh0OwotICBwcml2YXRlIFBlZXJD
b25uZWN0aW9uRmFjdG9yeSBmYWN0b3J5OwotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uIHBlZXJD
b25uZWN0aW9uOwotICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbnVs
bDsKLSAgcHJpdmF0ZSBBdWRpb1NvdXJjZSBhdWRpb1NvdXJjZTsKLSAgcHJpdmF0ZSBWaWRlb1Nv
dXJjZSB2aWRlb1NvdXJjZTsKLSAgcHJpdmF0ZSBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQ7Ci0g
IHByaXZhdGUgYm9vbGVhbiBwcmVmZXJJc2FjOwotICBwcml2YXRlIFN0cmluZyBwcmVmZXJyZWRW
aWRlb0NvZGVjOwotICBwcml2YXRlIGJvb2xlYW4gdmlkZW9DYXB0dXJlclN0b3BwZWQ7Ci0gIHBy
aXZhdGUgYm9vbGVhbiBpc0Vycm9yOwotICBwcml2YXRlIFRpbWVyIHN0YXRzVGltZXI7Ci0gIHBy
aXZhdGUgVmlkZW9SZW5kZXJlci5DYWxsYmFja3MgbG9jYWxSZW5kZXI7Ci0gIHByaXZhdGUgTGlz
dDxWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcz4gcmVtb3RlUmVuZGVyczsKLSAgcHJpdmF0ZSBTaWdu
YWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnM7Ci0gIHByaXZhdGUgTWVkaWFDb25z
dHJhaW50cyBwY0NvbnN0cmFpbnRzOwotICBwcml2YXRlIGludCB2aWRlb1dpZHRoOwotICBwcml2
YXRlIGludCB2aWRlb0hlaWdodDsKLSAgcHJpdmF0ZSBpbnQgdmlkZW9GcHM7Ci0gIHByaXZhdGUg
TWVkaWFDb25zdHJhaW50cyBhdWRpb0NvbnN0cmFpbnRzOwotICBwcml2YXRlIFBhcmNlbEZpbGVE
ZXNjcmlwdG9yIGFlY0R1bXBGaWxlRGVzY3JpcHRvcjsKLSAgcHJpdmF0ZSBNZWRpYUNvbnN0cmFp
bnRzIHNkcE1lZGlhQ29uc3RyYWludHM7Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25QYXJhbWV0
ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgLy8gUXVldWVkIHJlbW90ZSBJQ0UgY2Fu
ZGlkYXRlcyBhcmUgY29uc3VtZWQgb25seSBhZnRlciBib3RoIGxvY2FsIGFuZAotICAvLyByZW1v
dGUgZGVzY3JpcHRpb25zIGFyZSBzZXQuIFNpbWlsYXJseSBsb2NhbCBJQ0UgY2FuZGlkYXRlcyBh
cmUgc2VudCB0bwotICAvLyByZW1vdGUgcGVlciBhZnRlciBib3RoIGxvY2FsIGFuZCByZW1vdGUg
ZGVzY3JpcHRpb24gYXJlIHNldC4KLSAgcHJpdmF0ZSBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4g
cXVldWVkUmVtb3RlQ2FuZGlkYXRlczsKLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvbkV2ZW50cyBl
dmVudHM7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0luaXRpYXRvcjsKLSAgcHJpdmF0ZSBTZXNzaW9u
RGVzY3JpcHRpb24gbG9jYWxTZHA7IC8vIGVpdGhlciBvZmZlciBvciBhbnN3ZXIgU0RQCi0gIHBy
aXZhdGUgTWVkaWFTdHJlYW0gbWVkaWFTdHJlYW07Ci0gIHByaXZhdGUgVmlkZW9DYXB0dXJlciB2
aWRlb0NhcHR1cmVyOwotICAvLyBlbmFibGVWaWRlbyBpcyBzZXQgdG8gdHJ1ZSBpZiB2aWRlbyBz
aG91bGQgYmUgcmVuZGVyZWQgYW5kIHNlbnQuCi0gIHByaXZhdGUgYm9vbGVhbiByZW5kZXJWaWRl
bzsKLSAgcHJpdmF0ZSBWaWRlb1RyYWNrIGxvY2FsVmlkZW9UcmFjazsKLSAgcHJpdmF0ZSBWaWRl
b1RyYWNrIHJlbW90ZVZpZGVvVHJhY2s7Ci0gIHByaXZhdGUgUnRwU2VuZGVyIGxvY2FsVmlkZW9T
ZW5kZXI7Ci0gIC8vIGVuYWJsZUF1ZGlvIGlzIHNldCB0byB0cnVlIGlmIGF1ZGlvIHNob3VsZCBi
ZSBzZW50LgotICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlQXVkaW87Ci0gIHByaXZhdGUgQXVkaW9U
cmFjayBsb2NhbEF1ZGlvVHJhY2s7Ci0KLSAgLyoqCi0gICAqIFBlZXIgY29ubmVjdGlvbiBwYXJh
bWV0ZXJzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBjbGFzcyBQZWVyQ29ubmVjdGlvblBhcmFt
ZXRlcnMgewotICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIHZpZGVvQ2FsbEVuYWJsZWQ7Ci0gICAg
cHVibGljIGZpbmFsIGJvb2xlYW4gbG9vcGJhY2s7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4g
dHJhY2luZzsKLSAgICBwdWJsaWMgZmluYWwgaW50IHZpZGVvV2lkdGg7Ci0gICAgcHVibGljIGZp
bmFsIGludCB2aWRlb0hlaWdodDsKLSAgICBwdWJsaWMgZmluYWwgaW50IHZpZGVvRnBzOwotICAg
IHB1YmxpYyBmaW5hbCBpbnQgdmlkZW9NYXhCaXRyYXRlOwotICAgIHB1YmxpYyBmaW5hbCBTdHJp
bmcgdmlkZW9Db2RlYzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiB2aWRlb0NvZGVjSHdBY2Nl
bGVyYXRpb247Ci0gICAgcHVibGljIGZpbmFsIGludCBhdWRpb1N0YXJ0Qml0cmF0ZTsKLSAgICBw
dWJsaWMgZmluYWwgU3RyaW5nIGF1ZGlvQ29kZWM7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4g
bm9BdWRpb1Byb2Nlc3Npbmc7Ci0gICAgcHVibGljIGZpbmFsIGJvb2xlYW4gYWVjRHVtcDsKLSAg
ICBwdWJsaWMgZmluYWwgYm9vbGVhbiB1c2VPcGVuU0xFUzsKLSAgICBwdWJsaWMgZmluYWwgYm9v
bGVhbiBkaXNhYmxlQnVpbHRJbkFFQzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBkaXNhYmxl
QnVpbHRJbkFHQzsKLSAgICBwdWJsaWMgZmluYWwgYm9vbGVhbiBkaXNhYmxlQnVpbHRJbk5TOwot
ICAgIHB1YmxpYyBmaW5hbCBib29sZWFuIGVuYWJsZUxldmVsQ29udHJvbDsKLQotICAgIHB1Ymxp
YyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMoYm9vbGVhbiB2aWRlb0NhbGxFbmFibGVkLCBib29s
ZWFuIGxvb3BiYWNrLCBib29sZWFuIHRyYWNpbmcsCi0gICAgICAgIGludCB2aWRlb1dpZHRoLCBp
bnQgdmlkZW9IZWlnaHQsIGludCB2aWRlb0ZwcywgaW50IHZpZGVvTWF4Qml0cmF0ZSwgU3RyaW5n
IHZpZGVvQ29kZWMsCi0gICAgICAgIGJvb2xlYW4gdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uLCBp
bnQgYXVkaW9TdGFydEJpdHJhdGUsIFN0cmluZyBhdWRpb0NvZGVjLAotICAgICAgICBib29sZWFu
IG5vQXVkaW9Qcm9jZXNzaW5nLCBib29sZWFuIGFlY0R1bXAsIGJvb2xlYW4gdXNlT3BlblNMRVMs
IGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5BRUMsCi0gICAgICAgIGJvb2xlYW4gZGlzYWJsZUJ1aWx0
SW5BR0MsIGJvb2xlYW4gZGlzYWJsZUJ1aWx0SW5OUywgYm9vbGVhbiBlbmFibGVMZXZlbENvbnRy
b2wpIHsKLSAgICAgIHRoaXMudmlkZW9DYWxsRW5hYmxlZCA9IHZpZGVvQ2FsbEVuYWJsZWQ7Ci0g
ICAgICB0aGlzLmxvb3BiYWNrID0gbG9vcGJhY2s7Ci0gICAgICB0aGlzLnRyYWNpbmcgPSB0cmFj
aW5nOwotICAgICAgdGhpcy52aWRlb1dpZHRoID0gdmlkZW9XaWR0aDsKLSAgICAgIHRoaXMudmlk
ZW9IZWlnaHQgPSB2aWRlb0hlaWdodDsKLSAgICAgIHRoaXMudmlkZW9GcHMgPSB2aWRlb0ZwczsK
LSAgICAgIHRoaXMudmlkZW9NYXhCaXRyYXRlID0gdmlkZW9NYXhCaXRyYXRlOwotICAgICAgdGhp
cy52aWRlb0NvZGVjID0gdmlkZW9Db2RlYzsKLSAgICAgIHRoaXMudmlkZW9Db2RlY0h3QWNjZWxl
cmF0aW9uID0gdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uOwotICAgICAgdGhpcy5hdWRpb1N0YXJ0
Qml0cmF0ZSA9IGF1ZGlvU3RhcnRCaXRyYXRlOwotICAgICAgdGhpcy5hdWRpb0NvZGVjID0gYXVk
aW9Db2RlYzsKLSAgICAgIHRoaXMubm9BdWRpb1Byb2Nlc3NpbmcgPSBub0F1ZGlvUHJvY2Vzc2lu
ZzsKLSAgICAgIHRoaXMuYWVjRHVtcCA9IGFlY0R1bXA7Ci0gICAgICB0aGlzLnVzZU9wZW5TTEVT
ID0gdXNlT3BlblNMRVM7Ci0gICAgICB0aGlzLmRpc2FibGVCdWlsdEluQUVDID0gZGlzYWJsZUJ1
aWx0SW5BRUM7Ci0gICAgICB0aGlzLmRpc2FibGVCdWlsdEluQUdDID0gZGlzYWJsZUJ1aWx0SW5B
R0M7Ci0gICAgICB0aGlzLmRpc2FibGVCdWlsdEluTlMgPSBkaXNhYmxlQnVpbHRJbk5TOwotICAg
ICAgdGhpcy5lbmFibGVMZXZlbENvbnRyb2wgPSBlbmFibGVMZXZlbENvbnRyb2w7Ci0gICAgfQot
ICB9Ci0KLSAgLyoqCi0gICAqIFBlZXIgY29ubmVjdGlvbiBldmVudHMuCi0gICAqLwotICBwdWJs
aWMgaW50ZXJmYWNlIFBlZXJDb25uZWN0aW9uRXZlbnRzIHsKLSAgICAvKioKLSAgICAgKiBDYWxs
YmFjayBmaXJlZCBvbmNlIGxvY2FsIFNEUCBpcyBjcmVhdGVkIGFuZCBzZXQuCi0gICAgICovCi0g
ICAgdm9pZCBvbkxvY2FsRGVzY3JpcHRpb24oZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCk7
Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJlZCBvbmNlIGxvY2FsIEljZSBjYW5kaWRh
dGUgaXMgZ2VuZXJhdGVkLgotICAgICAqLwotICAgIHZvaWQgb25JY2VDYW5kaWRhdGUoZmluYWwg
SWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxsYmFjayBmaXJl
ZCBvbmNlIGxvY2FsIElDRSBjYW5kaWRhdGVzIGFyZSByZW1vdmVkLgotICAgICAqLwotICAgIHZv
aWQgb25JY2VDYW5kaWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVz
KTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgY29ubmVjdGlvbiBpcyBl
c3RhYmxpc2hlZCAoSWNlQ29ubmVjdGlvblN0YXRlIGlzCi0gICAgICogQ09OTkVDVEVEKS4KLSAg
ICAgKi8KLSAgICB2b2lkIG9uSWNlQ29ubmVjdGVkKCk7Ci0KLSAgICAvKioKLSAgICAgKiBDYWxs
YmFjayBmaXJlZCBvbmNlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIChJY2VDb25uZWN0aW9uU3RhdGUg
aXMKLSAgICAgKiBESVNDT05ORUNURUQpLgotICAgICAqLwotICAgIHZvaWQgb25JY2VEaXNjb25u
ZWN0ZWQoKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcGVlciBjb25u
ZWN0aW9uIGlzIGNsb3NlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uUGVlckNvbm5lY3Rpb25DbG9z
ZWQoKTsKLQotICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZpcmVkIG9uY2UgcGVlciBjb25uZWN0
aW9uIHN0YXRpc3RpY3MgaXMgcmVhZHkuCi0gICAgICovCi0gICAgdm9pZCBvblBlZXJDb25uZWN0
aW9uU3RhdHNSZWFkeShmaW5hbCBTdGF0c1JlcG9ydFtdIHJlcG9ydHMpOwotCi0gICAgLyoqCi0g
ICAgICogQ2FsbGJhY2sgZmlyZWQgb25jZSBwZWVyIGNvbm5lY3Rpb24gZXJyb3IgaGFwcGVuZWQu
Ci0gICAgICovCi0gICAgdm9pZCBvblBlZXJDb25uZWN0aW9uRXJyb3IoZmluYWwgU3RyaW5nIGRl
c2NyaXB0aW9uKTsKLSAgfQotCi0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25DbGllbnQoKSB7Ci0g
ICAgLy8gRXhlY3V0b3IgdGhyZWFkIGlzIHN0YXJ0ZWQgb25jZSBpbiBwcml2YXRlIGN0b3IgYW5k
IGlzIHVzZWQgZm9yIGFsbAotICAgIC8vIHBlZXIgY29ubmVjdGlvbiBBUEkgY2FsbHMgdG8gZW5z
dXJlIG5ldyBwZWVyIGNvbm5lY3Rpb24gZmFjdG9yeSBpcwotICAgIC8vIGNyZWF0ZWQgb24gdGhl
IHNhbWUgdGhyZWFkIGFzIHByZXZpb3VzbHkgZGVzdHJveWVkIGZhY3RvcnkuCi0gICAgZXhlY3V0
b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkU2NoZWR1bGVkRXhlY3V0b3IoKTsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgUGVlckNvbm5lY3Rpb25DbGllbnQgZ2V0SW5zdGFuY2UoKSB7Ci0g
ICAgcmV0dXJuIGluc3RhbmNlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2V0UGVlckNvbm5lY3Rp
b25GYWN0b3J5T3B0aW9ucyhQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zKSB7
Ci0gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGNyZWF0
ZVBlZXJDb25uZWN0aW9uRmFjdG9yeShmaW5hbCBDb250ZXh0IGNvbnRleHQsCi0gICAgICBmaW5h
bCBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLCBmaW5h
bCBQZWVyQ29ubmVjdGlvbkV2ZW50cyBldmVudHMpIHsKLSAgICB0aGlzLnBlZXJDb25uZWN0aW9u
UGFyYW1ldGVycyA9IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgICB0aGlzLmV2ZW50cyA9
IGV2ZW50czsKLSAgICB2aWRlb0NhbGxFbmFibGVkID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJz
LnZpZGVvQ2FsbEVuYWJsZWQ7Ci0gICAgLy8gUmVzZXQgdmFyaWFibGVzIHRvIGluaXRpYWwgc3Rh
dGVzLgotICAgIHRoaXMuY29udGV4dCA9IG51bGw7Ci0gICAgZmFjdG9yeSA9IG51bGw7Ci0gICAg
cGVlckNvbm5lY3Rpb24gPSBudWxsOwotICAgIHByZWZlcklzYWMgPSBmYWxzZTsKLSAgICB2aWRl
b0NhcHR1cmVyU3RvcHBlZCA9IGZhbHNlOwotICAgIGlzRXJyb3IgPSBmYWxzZTsKLSAgICBxdWV1
ZWRSZW1vdGVDYW5kaWRhdGVzID0gbnVsbDsKLSAgICBsb2NhbFNkcCA9IG51bGw7IC8vIGVpdGhl
ciBvZmZlciBvciBhbnN3ZXIgU0RQCi0gICAgbWVkaWFTdHJlYW0gPSBudWxsOwotICAgIHZpZGVv
Q2FwdHVyZXIgPSBudWxsOwotICAgIHJlbmRlclZpZGVvID0gdHJ1ZTsKLSAgICBsb2NhbFZpZGVv
VHJhY2sgPSBudWxsOwotICAgIHJlbW90ZVZpZGVvVHJhY2sgPSBudWxsOwotICAgIGxvY2FsVmlk
ZW9TZW5kZXIgPSBudWxsOwotICAgIGVuYWJsZUF1ZGlvID0gdHJ1ZTsKLSAgICBsb2NhbEF1ZGlv
VHJhY2sgPSBudWxsOwotICAgIHN0YXRzVGltZXIgPSBuZXcgVGltZXIoKTsKLQotICAgIGV4ZWN1
dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNyZWF0ZVBlZXJDb25uZWN0aW9uRmFjdG9yeUludGVy
bmFsKGNvbnRleHQpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY3Jl
YXRlUGVlckNvbm5lY3Rpb24oZmluYWwgRWdsQmFzZS5Db250ZXh0IHJlbmRlckVHTENvbnRleHQs
Ci0gICAgICBmaW5hbCBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyBsb2NhbFJlbmRlciwgZmluYWwg
VmlkZW9SZW5kZXJlci5DYWxsYmFja3MgcmVtb3RlUmVuZGVyLAotICAgICAgZmluYWwgVmlkZW9D
YXB0dXJlciB2aWRlb0NhcHR1cmVyLCBmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGlu
Z1BhcmFtZXRlcnMpIHsKLSAgICBjcmVhdGVQZWVyQ29ubmVjdGlvbihyZW5kZXJFR0xDb250ZXh0
LCBsb2NhbFJlbmRlciwgQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdChyZW1vdGVSZW5kZXIpLAot
ICAgICAgICB2aWRlb0NhcHR1cmVyLCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLSAgfQotICBwdWJs
aWMgdm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbihmaW5hbCBFZ2xCYXNlLkNvbnRleHQgcmVuZGVy
RUdMQ29udGV4dCwKLSAgICAgIGZpbmFsIFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIGxvY2FsUmVu
ZGVyLCBmaW5hbCBMaXN0PFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzPiByZW1vdGVSZW5kZXJzLAot
ICAgICAgZmluYWwgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyLCBmaW5hbCBTaWduYWxpbmdQ
YXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnMpIHsKLSAgICBpZiAocGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzID09IG51bGwpIHsKLSAgICAgIExvZy5lKFRBRywgIkNyZWF0aW5nIHBlZXIgY29u
bmVjdGlvbiB3aXRob3V0IGluaXRpYWxpemluZyBmYWN0b3J5LiIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICB0aGlzLmxvY2FsUmVuZGVyID0gbG9jYWxSZW5kZXI7Ci0gICAgdGhpcy5yZW1v
dGVSZW5kZXJzID0gcmVtb3RlUmVuZGVyczsKLSAgICB0aGlzLnZpZGVvQ2FwdHVyZXIgPSB2aWRl
b0NhcHR1cmVyOwotICAgIHRoaXMuc2lnbmFsaW5nUGFyYW1ldGVycyA9IHNpZ25hbGluZ1BhcmFt
ZXRlcnM7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICBjcmVhdGVNZWRpYUNvbnN0cmFpbnRzSW50ZXJuYWwoKTsKLSAgICAgICAgICBjcmVhdGVQZWVy
Q29ubmVjdGlvbkludGVybmFsKHJlbmRlckVHTENvbnRleHQpOwotICAgICAgICB9IGNhdGNoIChF
eGNlcHRpb24gZSkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIHBl
ZXIgY29ubmVjdGlvbjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgICB0aHJvdyBlOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBjbG9zZSgp
IHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjbG9zZUludGVybmFsKCk7Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwdWJsaWMgYm9vbGVhbiBpc1ZpZGVvQ2FsbEVuYWJs
ZWQoKSB7Ci0gICAgcmV0dXJuIHZpZGVvQ2FsbEVuYWJsZWQ7Ci0gIH0KLQotICBwcml2YXRlIHZv
aWQgY3JlYXRlUGVlckNvbm5lY3Rpb25GYWN0b3J5SW50ZXJuYWwoQ29udGV4dCBjb250ZXh0KSB7
Ci0gICAgUGVlckNvbm5lY3Rpb25GYWN0b3J5LmluaXRpYWxpemVJbnRlcm5hbFRyYWNlcigpOwot
ICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudHJhY2luZykgewotICAgICAgUGVlckNv
bm5lY3Rpb25GYWN0b3J5LnN0YXJ0SW50ZXJuYWxUcmFjaW5nQ2FwdHVyZSgKLSAgICAgICAgICBF
bnZpcm9ubWVudC5nZXRFeHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKS5nZXRBYnNvbHV0ZVBhdGgo
KSArIEZpbGUuc2VwYXJhdG9yCi0gICAgICAgICAgKyAid2VicnRjLXRyYWNlLnR4dCIpOwotICAg
IH0KLSAgICBMb2cuZChUQUcsCi0gICAgICAgICJDcmVhdGUgcGVlciBjb25uZWN0aW9uIGZhY3Rv
cnkuIFVzZSB2aWRlbzogIiArIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NhbGxFbmFi
bGVkKTsKLSAgICBpc0Vycm9yID0gZmFsc2U7Ci0KLSAgICAvLyBJbml0aWFsaXplIGZpZWxkIHRy
aWFscy4KLSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuaW5pdGlhbGl6ZUZpZWxkVHJpYWxzKCIi
KTsKLQotICAgIC8vIENoZWNrIHByZWZlcnJlZCB2aWRlbyBjb2RlYy4KLSAgICBwcmVmZXJyZWRW
aWRlb0NvZGVjID0gVklERU9fQ09ERUNfVlA4OwotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkICYm
IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NvZGVjICE9IG51bGwpIHsKLSAgICAgIGlm
IChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9Db2RlYy5lcXVhbHMoVklERU9fQ09ERUNf
VlA5KSkgewotICAgICAgICBwcmVmZXJyZWRWaWRlb0NvZGVjID0gVklERU9fQ09ERUNfVlA5Owot
ICAgICAgfSBlbHNlIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9Db2RlYy5lcXVh
bHMoVklERU9fQ09ERUNfSDI2NCkpIHsKLSAgICAgICAgcHJlZmVycmVkVmlkZW9Db2RlYyA9IFZJ
REVPX0NPREVDX0gyNjQ7Ci0gICAgICB9Ci0gICAgfQotICAgIExvZy5kKFRBRywgIlBlcmVmZXJy
ZWQgdmlkZW8gY29kZWM6ICIgKyBwcmVmZXJyZWRWaWRlb0NvZGVjKTsKLQotICAgIC8vIENoZWNr
IGlmIElTQUMgaXMgdXNlZCBieSBkZWZhdWx0LgotICAgIHByZWZlcklzYWMgPSBwZWVyQ29ubmVj
dGlvblBhcmFtZXRlcnMuYXVkaW9Db2RlYyAhPSBudWxsCi0gICAgICAgICYmIHBlZXJDb25uZWN0
aW9uUGFyYW1ldGVycy5hdWRpb0NvZGVjLmVxdWFscyhBVURJT19DT0RFQ19JU0FDKTsKLQotICAg
IC8vIEVuYWJsZS9kaXNhYmxlIE9wZW5TTCBFUyBwbGF5YmFjay4KLSAgICBpZiAoIXBlZXJDb25u
ZWN0aW9uUGFyYW1ldGVycy51c2VPcGVuU0xFUykgewotICAgICAgTG9nLmQoVEFHLCAiRGlzYWJs
ZSBPcGVuU0wgRVMgYXVkaW8gZXZlbiBpZiBkZXZpY2Ugc3VwcG9ydHMgaXQiKTsKLSAgICAgIFdl
YlJ0Y0F1ZGlvTWFuYWdlci5zZXRCbGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlKHRydWUg
LyogZW5hYmxlICovKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAiQWxsb3cgT3Bl
blNMIEVTIGF1ZGlvIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9N
YW5hZ2VyLnNldEJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UoZmFsc2UpOwotICAgIH0K
LQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuZGlzYWJsZUJ1aWx0SW5BRUMpIHsK
LSAgICAgIExvZy5kKFRBRywgIkRpc2FibGUgYnVpbHQtaW4gQUVDIGV2ZW4gaWYgZGV2aWNlIHN1
cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQWNvdXN0
aWNFY2hvQ2FuY2VsZXIodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgIkVu
YWJsZSBidWlsdC1pbiBBRUMgaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNB
dWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoZmFsc2UpOwotICAg
IH0KLQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuZGlzYWJsZUJ1aWx0SW5BR0Mp
IHsKLSAgICAgIExvZy5kKFRBRywgIkRpc2FibGUgYnVpbHQtaW4gQUdDIGV2ZW4gaWYgZGV2aWNl
IHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQXV0
b21hdGljR2FpbkNvbnRyb2wodHJ1ZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywg
IkVuYWJsZSBidWlsdC1pbiBBR0MgaWYgZGV2aWNlIHN1cHBvcnRzIGl0Iik7Ci0gICAgICBXZWJS
dGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woZmFsc2UpOwot
ICAgIH0KLQotICAgIGlmIChwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMuZGlzYWJsZUJ1aWx0SW5O
UykgewotICAgICAgTG9nLmQoVEFHLCAiRGlzYWJsZSBidWlsdC1pbiBOUyBldmVuIGlmIGRldmlj
ZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVkaW9VdGlscy5zZXRXZWJSdGNCYXNlZE5v
aXNlU3VwcHJlc3Nvcih0cnVlKTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAiRW5h
YmxlIGJ1aWx0LWluIE5TIGlmIGRldmljZSBzdXBwb3J0cyBpdCIpOwotICAgICAgV2ViUnRjQXVk
aW9VdGlscy5zZXRXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvcihmYWxzZSk7Ci0gICAgfQotCi0g
ICAgLy8gQ3JlYXRlIHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5LgotICAgIGlmICghUGVlckNvbm5l
Y3Rpb25GYWN0b3J5LmluaXRpYWxpemVBbmRyb2lkR2xvYmFscygKLSAgICAgICAgICAgIGNvbnRl
eHQsIHRydWUsIHRydWUsIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy52aWRlb0NvZGVjSHdBY2Nl
bGVyYXRpb24pKSB7Ci0gICAgICBldmVudHMub25QZWVyQ29ubmVjdGlvbkVycm9yKCJGYWlsZWQg
dG8gaW5pdGlhbGl6ZUFuZHJvaWRHbG9iYWxzIik7Ci0gICAgfQotICAgIGlmIChvcHRpb25zICE9
IG51bGwpIHsKLSAgICAgIExvZy5kKFRBRywgIkZhY3RvcnkgbmV0d29ya0lnbm9yZU1hc2sgb3B0
aW9uOiAiICsgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayk7Ci0gICAgfQotICAgIHRoaXMuY29u
dGV4dCA9IGNvbnRleHQ7Ci0gICAgZmFjdG9yeSA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3Rvcnko
b3B0aW9ucyk7Ci0gICAgTG9nLmQoVEFHLCAiUGVlciBjb25uZWN0aW9uIGZhY3RvcnkgY3JlYXRl
ZC4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVNZWRpYUNvbnN0cmFpbnRzSW50ZXJu
YWwoKSB7Ci0gICAgLy8gQ3JlYXRlIHBlZXIgY29ubmVjdGlvbiBjb25zdHJhaW50cy4KLSAgICBw
Y0NvbnN0cmFpbnRzID0gbmV3IE1lZGlhQ29uc3RyYWludHMoKTsKLSAgICAvLyBFbmFibGUgRFRM
UyBmb3Igbm9ybWFsIGNhbGxzIGFuZCBkaXNhYmxlIGZvciBsb29wYmFjayBjYWxscy4KLSAgICBp
ZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICBwY0NvbnN0cmFp
bnRzLm9wdGlvbmFsLmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1
ZVBhaXIoRFRMU19TUlRQX0tFWV9BR1JFRU1FTlRfQ09OU1RSQUlOVCwgImZhbHNlIikpOwotICAg
IH0gZWxzZSB7Ci0gICAgICBwY0NvbnN0cmFpbnRzLm9wdGlvbmFsLmFkZCgKLSAgICAgICAgICBu
ZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoRFRMU19TUlRQX0tFWV9BR1JFRU1FTlRf
Q09OU1RSQUlOVCwgInRydWUiKSk7Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMg
YSBjYW1lcmEgb24gZGV2aWNlIGFuZCBkaXNhYmxlIHZpZGVvIGNhbGwgaWYgbm90LgotICAgIGlm
ICh2aWRlb0NhcHR1cmVyID09IG51bGwpIHsKLSAgICAgIExvZy53KFRBRywgIk5vIGNhbWVyYSBv
biBkZXZpY2UuIFN3aXRjaCB0byBhdWRpbyBvbmx5IGNhbGwuIik7Ci0gICAgICB2aWRlb0NhbGxF
bmFibGVkID0gZmFsc2U7Ci0gICAgfQotICAgIC8vIENyZWF0ZSB2aWRlbyBjb25zdHJhaW50cyBp
ZiB2aWRlbyBjYWxsIGlzIGVuYWJsZWQuCi0gICAgaWYgKHZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAg
ICAgIHZpZGVvV2lkdGggPSBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9XaWR0aDsKLSAg
ICAgIHZpZGVvSGVpZ2h0ID0gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLnZpZGVvSGVpZ2h0Owot
ICAgICAgdmlkZW9GcHMgPSBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMudmlkZW9GcHM7Ci0KLSAg
ICAgIC8vIElmIHZpZGVvIHJlc29sdXRpb24gaXMgbm90IHNwZWNpZmllZCwgZGVmYXVsdCB0byBI
RC4KLSAgICAgIGlmICh2aWRlb1dpZHRoID09IDAgfHwgdmlkZW9IZWlnaHQgPT0gMCkgewotICAg
ICAgICB2aWRlb1dpZHRoID0gSERfVklERU9fV0lEVEg7Ci0gICAgICAgIHZpZGVvSGVpZ2h0ID0g
SERfVklERU9fSEVJR0hUOwotICAgICAgfQotCi0gICAgICAvLyBJZiBmcHMgaXMgbm90IHNwZWNp
ZmllZCwgZGVmYXVsdCB0byAzMC4KLSAgICAgIGlmICh2aWRlb0ZwcyA9PSAwKSB7Ci0gICAgICAg
IHZpZGVvRnBzID0gMzA7Ci0gICAgICB9Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQ2FwdHVyaW5n
IGZvcm1hdDogIiArIHZpZGVvV2lkdGggKyAieCIgKyB2aWRlb0hlaWdodCArICJAIiArIHZpZGVv
RnBzKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYXVkaW8gY29uc3RyYWludHMuCi0gICAgYXVk
aW9Db25zdHJhaW50cyA9IG5ldyBNZWRpYUNvbnN0cmFpbnRzKCk7Ci0gICAgLy8gYWRkZWQgZm9y
IGF1ZGlvIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50cwotICAgIGlmIChwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMubm9BdWRpb1Byb2Nlc3NpbmcpIHsKLSAgICAgIExvZy5kKFRBRywgIkRpc2FibGlu
ZyBhdWRpbyBwcm9jZXNzaW5nIik7Ci0gICAgICBhdWRpb0NvbnN0cmFpbnRzLm1hbmRhdG9yeS5h
ZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3RyYWludHMuS2V5VmFsdWVQYWlyKEFVRElPX0VD
SE9fQ0FOQ0VMTEFUSU9OX0NPTlNUUkFJTlQsICJmYWxzZSIpKTsKLSAgICAgIGF1ZGlvQ29uc3Ry
YWludHMubWFuZGF0b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlW
YWx1ZVBhaXIoQVVESU9fQVVUT19HQUlOX0NPTlRST0xfQ09OU1RSQUlOVCwgImZhbHNlIikpOwot
ICAgICAgYXVkaW9Db25zdHJhaW50cy5tYW5kYXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRp
YUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcihBVURJT19ISUdIX1BBU1NfRklMVEVSX0NPTlNUUkFJ
TlQsICJmYWxzZSIpKTsKLSAgICAgIGF1ZGlvQ29uc3RyYWludHMubWFuZGF0b3J5LmFkZCgKLSAg
ICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoQVVESU9fTk9JU0VfU1VQ
UFJFU1NJT05fQ09OU1RSQUlOVCwgImZhbHNlIikpOwotICAgIH0KLSAgICBpZiAocGVlckNvbm5l
Y3Rpb25QYXJhbWV0ZXJzLmVuYWJsZUxldmVsQ29udHJvbCkgewotICAgICAgTG9nLmQoVEFHLCAi
RW5hYmxpbmcgbGV2ZWwgY29udHJvbC4iKTsKLSAgICAgIGF1ZGlvQ29uc3RyYWludHMubWFuZGF0
b3J5LmFkZCgKLSAgICAgICAgICBuZXcgTWVkaWFDb25zdHJhaW50cy5LZXlWYWx1ZVBhaXIoQVVE
SU9fTEVWRUxfQ09OVFJPTF9DT05TVFJBSU5ULCAidHJ1ZSIpKTsKLSAgICB9Ci0gICAgLy8gQ3Jl
YXRlIFNEUCBjb25zdHJhaW50cy4KLSAgICBzZHBNZWRpYUNvbnN0cmFpbnRzID0gbmV3IE1lZGlh
Q29uc3RyYWludHMoKTsKLSAgICBzZHBNZWRpYUNvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0g
ICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcigiT2ZmZXJUb1JlY2VpdmVB
dWRpbyIsICJ0cnVlIikpOwotICAgIGlmICh2aWRlb0NhbGxFbmFibGVkIHx8IHBlZXJDb25uZWN0
aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgc2RwTWVkaWFDb25zdHJhaW50cy5tYW5k
YXRvcnkuYWRkKAotICAgICAgICAgIG5ldyBNZWRpYUNvbnN0cmFpbnRzLktleVZhbHVlUGFpcigi
T2ZmZXJUb1JlY2VpdmVWaWRlbyIsICJ0cnVlIikpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzZHBN
ZWRpYUNvbnN0cmFpbnRzLm1hbmRhdG9yeS5hZGQoCi0gICAgICAgICAgbmV3IE1lZGlhQ29uc3Ry
YWludHMuS2V5VmFsdWVQYWlyKCJPZmZlclRvUmVjZWl2ZVZpZGVvIiwgImZhbHNlIikpOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCBjcmVhdGVQZWVyQ29ubmVjdGlvbkludGVybmFsKEVn
bEJhc2UuQ29udGV4dCByZW5kZXJFR0xDb250ZXh0KSB7Ci0gICAgaWYgKGZhY3RvcnkgPT0gbnVs
bCB8fCBpc0Vycm9yKSB7Ci0gICAgICBMb2cuZShUQUcsICJQZWVyY29ubmVjdGlvbiBmYWN0b3J5
IGlzIG5vdCBjcmVhdGVkIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIExvZy5kKFRBRywg
IkNyZWF0ZSBwZWVyIGNvbm5lY3Rpb24uIik7Ci0KLSAgICBMb2cuZChUQUcsICJQQ0NvbnN0cmFp
bnRzOiAiICsgcGNDb25zdHJhaW50cy50b1N0cmluZygpKTsKLSAgICBxdWV1ZWRSZW1vdGVDYW5k
aWRhdGVzID0gbmV3IExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPigpOwotCi0gICAgaWYgKHZpZGVv
Q2FsbEVuYWJsZWQpIHsKLSAgICAgIExvZy5kKFRBRywgIkVHTENvbnRleHQ6ICIgKyByZW5kZXJF
R0xDb250ZXh0KTsKLSAgICAgIGZhY3Rvcnkuc2V0VmlkZW9Id0FjY2VsZXJhdGlvbk9wdGlvbnMo
cmVuZGVyRUdMQ29udGV4dCwgcmVuZGVyRUdMQ29udGV4dCk7Ci0gICAgfQotCi0gICAgUGVlckNv
bm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbiBydGNDb25maWcgPQotICAgICAgICBuZXcgUGVlckNv
bm5lY3Rpb24uUlRDQ29uZmlndXJhdGlvbihzaWduYWxpbmdQYXJhbWV0ZXJzLmljZVNlcnZlcnMp
OwotICAgIC8vIFRDUCBjYW5kaWRhdGVzIGFyZSBvbmx5IHVzZWZ1bCB3aGVuIGNvbm5lY3Rpbmcg
dG8gYSBzZXJ2ZXIgdGhhdCBzdXBwb3J0cwotICAgIC8vIElDRS1UQ1AuCi0gICAgcnRjQ29uZmln
LnRjcENhbmRpZGF0ZVBvbGljeSA9IFBlZXJDb25uZWN0aW9uLlRjcENhbmRpZGF0ZVBvbGljeS5E
SVNBQkxFRDsKLSAgICBydGNDb25maWcuYnVuZGxlUG9saWN5ID0gUGVlckNvbm5lY3Rpb24uQnVu
ZGxlUG9saWN5Lk1BWEJVTkRMRTsKLSAgICBydGNDb25maWcucnRjcE11eFBvbGljeSA9IFBlZXJD
b25uZWN0aW9uLlJ0Y3BNdXhQb2xpY3kuUkVRVUlSRTsKLSAgICBydGNDb25maWcuY29udGludWFs
R2F0aGVyaW5nUG9saWN5ID0gUGVlckNvbm5lY3Rpb24uQ29udGludWFsR2F0aGVyaW5nUG9saWN5
LkdBVEhFUl9DT05USU5VQUxMWTsKLSAgICAvLyBVc2UgRUNEU0EgZW5jcnlwdGlvbi4KLSAgICBy
dGNDb25maWcua2V5VHlwZSA9IFBlZXJDb25uZWN0aW9uLktleVR5cGUuRUNEU0E7Ci0KLSAgICBw
ZWVyQ29ubmVjdGlvbiA9IGZhY3RvcnkuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlnLCBw
Y0NvbnN0cmFpbnRzLCBwY09ic2VydmVyKTsKLSAgICBpc0luaXRpYXRvciA9IGZhbHNlOwotCi0g
ICAgLy8gU2V0IGRlZmF1bHQgV2ViUlRDIHRyYWNpbmcgYW5kIElORk8gbGliamluZ2xlIGxvZ2dp
bmcuCi0gICAgLy8gTk9URTogdGhpcyBfbXVzdF8gaGFwcGVuIHdoaWxlIHxmYWN0b3J5fCBpcyBh
bGl2ZSEKLSAgICBMb2dnaW5nLmVuYWJsZVRyYWNpbmcoImxvZ2NhdDoiLCBFbnVtU2V0Lm9mKExv
Z2dpbmcuVHJhY2VMZXZlbC5UUkFDRV9ERUZBVUxUKSk7Ci0gICAgTG9nZ2luZy5lbmFibGVMb2dU
b0RlYnVnT3V0cHV0KExvZ2dpbmcuU2V2ZXJpdHkuTFNfSU5GTyk7Ci0KLSAgICBtZWRpYVN0cmVh
bSA9IGZhY3RvcnkuY3JlYXRlTG9jYWxNZWRpYVN0cmVhbSgiQVJEQU1TIik7Ci0gICAgaWYgKHZp
ZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrKGNyZWF0ZVZpZGVv
VHJhY2sodmlkZW9DYXB0dXJlcikpOwotICAgIH0KLQotICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNr
KGNyZWF0ZUF1ZGlvVHJhY2soKSk7Ci0gICAgcGVlckNvbm5lY3Rpb24uYWRkU3RyZWFtKG1lZGlh
U3RyZWFtKTsKLSAgICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgZmluZFZpZGVvU2Vu
ZGVyKCk7Ci0gICAgfQotCi0gICAgaWYgKHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hZWNEdW1w
KSB7Ci0gICAgICB0cnkgewotICAgICAgICBhZWNEdW1wRmlsZURlc2NyaXB0b3IgPQotICAgICAg
ICAgICAgUGFyY2VsRmlsZURlc2NyaXB0b3Iub3BlbihuZXcgRmlsZShFbnZpcm9ubWVudC5nZXRF
eHRlcm5hbFN0b3JhZ2VEaXJlY3RvcnkoKS5nZXRQYXRoKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICsgRmlsZS5zZXBhcmF0b3IgKyAiRG93bmxvYWQvYXVkaW8u
YWVjZHVtcCIpLAotICAgICAgICAgICAgICAgIFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfUkVB
RF9XUklURSB8IFBhcmNlbEZpbGVEZXNjcmlwdG9yLk1PREVfQ1JFQVRFCi0gICAgICAgICAgICAg
ICAgICAgIHwgUGFyY2VsRmlsZURlc2NyaXB0b3IuTU9ERV9UUlVOQ0FURSk7Ci0gICAgICAgIGZh
Y3Rvcnkuc3RhcnRBZWNEdW1wKGFlY0R1bXBGaWxlRGVzY3JpcHRvci5nZXRGZCgpLCAtMSk7Ci0g
ICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkNhbiBu
b3Qgb3BlbiBhZWNkdW1wIGZpbGUiLCBlKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBMb2cuZChU
QUcsICJQZWVyIGNvbm5lY3Rpb24gY3JlYXRlZC4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBj
bG9zZUludGVybmFsKCkgewotICAgIGlmIChmYWN0b3J5ICE9IG51bGwgJiYgcGVlckNvbm5lY3Rp
b25QYXJhbWV0ZXJzLmFlY0R1bXApIHsKLSAgICAgIGZhY3Rvcnkuc3RvcEFlY0R1bXAoKTsKLSAg
ICB9Ci0gICAgTG9nLmQoVEFHLCAiQ2xvc2luZyBwZWVyIGNvbm5lY3Rpb24uIik7Ci0gICAgc3Rh
dHNUaW1lci5jYW5jZWwoKTsKLSAgICBpZiAocGVlckNvbm5lY3Rpb24gIT0gbnVsbCkgewotICAg
ICAgcGVlckNvbm5lY3Rpb24uZGlzcG9zZSgpOwotICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxs
OwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDbG9zaW5nIGF1ZGlvIHNvdXJjZS4iKTsKLSAgICBp
ZiAoYXVkaW9Tb3VyY2UgIT0gbnVsbCkgewotICAgICAgYXVkaW9Tb3VyY2UuZGlzcG9zZSgpOwot
ICAgICAgYXVkaW9Tb3VyY2UgPSBudWxsOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJTdG9wcGlu
ZyBjYXB0dXJlLiIpOwotICAgIGlmICh2aWRlb0NhcHR1cmVyICE9IG51bGwpIHsKLSAgICAgIHRy
eSB7Ci0gICAgICAgIHZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICAgIH0gY2F0Y2gg
KEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNl
cHRpb24oZSk7Ci0gICAgICB9Ci0gICAgICB2aWRlb0NhcHR1cmVyU3RvcHBlZCA9IHRydWU7Ci0g
ICAgICB2aWRlb0NhcHR1cmVyLmRpc3Bvc2UoKTsKLSAgICAgIHZpZGVvQ2FwdHVyZXIgPSBudWxs
OwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDbG9zaW5nIHZpZGVvIHNvdXJjZS4iKTsKLSAgICBp
ZiAodmlkZW9Tb3VyY2UgIT0gbnVsbCkgewotICAgICAgdmlkZW9Tb3VyY2UuZGlzcG9zZSgpOwot
ICAgICAgdmlkZW9Tb3VyY2UgPSBudWxsOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJDbG9zaW5n
IHBlZXIgY29ubmVjdGlvbiBmYWN0b3J5LiIpOwotICAgIGlmIChmYWN0b3J5ICE9IG51bGwpIHsK
LSAgICAgIGZhY3RvcnkuZGlzcG9zZSgpOwotICAgICAgZmFjdG9yeSA9IG51bGw7Ci0gICAgfQot
ICAgIG9wdGlvbnMgPSBudWxsOwotICAgIExvZy5kKFRBRywgIkNsb3NpbmcgcGVlciBjb25uZWN0
aW9uIGRvbmUuIik7Ci0gICAgZXZlbnRzLm9uUGVlckNvbm5lY3Rpb25DbG9zZWQoKTsKLSAgICBQ
ZWVyQ29ubmVjdGlvbkZhY3Rvcnkuc3RvcEludGVybmFsVHJhY2luZ0NhcHR1cmUoKTsKLSAgICBQ
ZWVyQ29ubmVjdGlvbkZhY3Rvcnkuc2h1dGRvd25JbnRlcm5hbFRyYWNlcigpOwotICB9Ci0KLSAg
cHVibGljIGJvb2xlYW4gaXNIRFZpZGVvKCkgewotICAgIGlmICghdmlkZW9DYWxsRW5hYmxlZCkg
ewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB2aWRlb1dpZHRoICog
dmlkZW9IZWlnaHQgPj0gMTI4MCAqIDcyMDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBnZXRTdGF0
cygpIHsKLSAgICBpZiAocGVlckNvbm5lY3Rpb24gPT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGJvb2xlYW4gc3VjY2VzcyA9IHBlZXJDb25uZWN0aW9uLmdl
dFN0YXRzKG5ldyBTdGF0c09ic2VydmVyKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBvbkNvbXBsZXRlKGZpbmFsIFN0YXRzUmVwb3J0W10gcmVwb3J0cykgewotICAgICAg
ICBldmVudHMub25QZWVyQ29ubmVjdGlvblN0YXRzUmVhZHkocmVwb3J0cyk7Ci0gICAgICB9Ci0g
ICAgfSwgbnVsbCk7Ci0gICAgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICBMb2cuZShUQUcsICJnZXRT
dGF0cygpIHJldHVybnMgZmFsc2UhIik7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgZW5h
YmxlU3RhdHNFdmVudHMoYm9vbGVhbiBlbmFibGUsIGludCBwZXJpb2RNcykgewotICAgIGlmIChl
bmFibGUpIHsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHN0YXRzVGltZXIuc2NoZWR1bGUobmV3IFRp
bWVyVGFzaygpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgICAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgICAgICAgICBnZXRTdGF0cygpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sIDAsIHBlcmlvZE1zKTsKLSAgICAgIH0gY2F0
Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIkNhbiBub3Qgc2NoZWR1bGUg
c3RhdGlzdGljcyB0aW1lciIsIGUpOwotICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICBzdGF0
c1RpbWVyLmNhbmNlbCgpOwotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldEF1ZGlvRW5h
YmxlZChmaW5hbCBib29sZWFuIGVuYWJsZSkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgIGVuYWJsZUF1ZGlvID0gZW5hYmxlOwotICAgICAgICBpZiAobG9jYWxBdWRpb1RyYWNr
ICE9IG51bGwpIHsKLSAgICAgICAgICBsb2NhbEF1ZGlvVHJhY2suc2V0RW5hYmxlZChlbmFibGVB
dWRpbyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2b2lk
IHNldFZpZGVvRW5hYmxlZChmaW5hbCBib29sZWFuIGVuYWJsZSkgewotICAgIGV4ZWN1dG9yLmV4
ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIHJlbmRlclZpZGVvID0gZW5hYmxlOwotICAgICAgICBpZiAobG9j
YWxWaWRlb1RyYWNrICE9IG51bGwpIHsKLSAgICAgICAgICBsb2NhbFZpZGVvVHJhY2suc2V0RW5h
YmxlZChyZW5kZXJWaWRlbyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlbW90ZVZpZGVvVHJh
Y2sgIT0gbnVsbCkgewotICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2suc2V0RW5hYmxlZChyZW5k
ZXJWaWRlbyk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIGNyZWF0ZU9mZmVyKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlm
IChwZWVyQ29ubmVjdGlvbiAhPSBudWxsICYmICFpc0Vycm9yKSB7Ci0gICAgICAgICAgTG9nLmQo
VEFHLCAiUEMgQ3JlYXRlIE9GRkVSIik7Ci0gICAgICAgICAgaXNJbml0aWF0b3IgPSB0cnVlOwot
ICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmNyZWF0ZU9mZmVyKHNkcE9ic2VydmVyLCBzZHBNZWRp
YUNvbnN0cmFpbnRzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVi
bGljIHZvaWQgY3JlYXRlQW5zd2VyKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgIGlmIChwZWVyQ29ubmVjdGlvbiAhPSBudWxsICYmICFpc0Vycm9yKSB7Ci0gICAgICAgICAg
TG9nLmQoVEFHLCAiUEMgY3JlYXRlIEFOU1dFUiIpOwotICAgICAgICAgIGlzSW5pdGlhdG9yID0g
ZmFsc2U7Ci0gICAgICAgICAgcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHNkcE9ic2VydmVy
LCBzZHBNZWRpYUNvbnN0cmFpbnRzKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9
Ci0KLSAgcHVibGljIHZvaWQgYWRkUmVtb3RlSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0
ZSBjYW5kaWRhdGUpIHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAg
ICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVl
ckNvbm5lY3Rpb24gIT0gbnVsbCAmJiAhaXNFcnJvcikgewotICAgICAgICAgIGlmIChxdWV1ZWRS
ZW1vdGVDYW5kaWRhdGVzICE9IG51bGwpIHsKLSAgICAgICAgICAgIHF1ZXVlZFJlbW90ZUNhbmRp
ZGF0ZXMuYWRkKGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBl
ZXJDb25uZWN0aW9uLmFkZEljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVtb3ZlUmVt
b3RlSWNlQ2FuZGlkYXRlcyhmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAg
ZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAg
IHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHBlZXJDb25uZWN0aW9uID09IG51bGwg
fHwgaXNFcnJvcikgewotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAvLyBE
cmFpbiB0aGUgcXVldWVkIHJlbW90ZSBjYW5kaWRhdGVzIGlmIHRoZXJlIGlzIGFueSBzbyB0aGF0
Ci0gICAgICAgIC8vIHRoZXkgYXJlIHByb2Nlc3NlZCBpbiB0aGUgcHJvcGVyIG9yZGVyLgotICAg
ICAgICBkcmFpbkNhbmRpZGF0ZXMoKTsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlSWNl
Q2FuZGlkYXRlcyhjYW5kaWRhdGVzKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHNldFJlbW90ZURlc2NyaXB0aW9uKGZpbmFsIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAp
IHsKLSAgICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlk
ZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb24g
PT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIFN0cmluZyBzZHBEZXNjcmlwdGlvbiA9IHNkcC5kZXNjcmlwdGlvbjsKLSAgICAgICAgaWYg
KHByZWZlcklzYWMpIHsKLSAgICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHByZWZlckNvZGVjKHNk
cERlc2NyaXB0aW9uLCBBVURJT19DT0RFQ19JU0FDLCB0cnVlKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgICAgIHNkcERlc2NyaXB0aW9uID0gcHJl
ZmVyQ29kZWMoc2RwRGVzY3JpcHRpb24sIHByZWZlcnJlZFZpZGVvQ29kZWMsIGZhbHNlKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAocGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLmF1ZGlvU3RhcnRC
aXRyYXRlID4gMCkgewotICAgICAgICAgIHNkcERlc2NyaXB0aW9uID0gc2V0U3RhcnRCaXRyYXRl
KAotICAgICAgICAgICAgICBBVURJT19DT0RFQ19PUFVTLCBmYWxzZSwgc2RwRGVzY3JpcHRpb24s
IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycy5hdWRpb1N0YXJ0Qml0cmF0ZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgTG9nLmQoVEFHLCAiU2V0IHJlbW90ZSBTRFAuIik7Ci0gICAgICAgIFNlc3Npb25E
ZXNjcmlwdGlvbiBzZHBSZW1vdGUgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKHNkcC50eXBlLCBz
ZHBEZXNjcmlwdGlvbik7Ci0gICAgICAgIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0
aW9uKHNkcE9ic2VydmVyLCBzZHBSZW1vdGUpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgc3RvcFZpZGVvU291cmNlKCkgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIGlmICh2aWRlb0NhcHR1cmVyICE9IG51bGwgJiYgIXZpZGVvQ2FwdHVyZXJTdG9w
cGVkKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiU3RvcCB2aWRlbyBzb3VyY2UuIik7Ci0gICAg
ICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAg
ICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgfQot
ICAgICAgICAgIHZpZGVvQ2FwdHVyZXJTdG9wcGVkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
fQotICAgIH0pOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc3RhcnRWaWRlb1NvdXJjZSgpIHsKLSAg
ICBleGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBpZiAodmlkZW9DYXB0dXJlciAhPSBudWxs
ICYmIHZpZGVvQ2FwdHVyZXJTdG9wcGVkKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiUmVzdGFy
dCB2aWRlbyBzb3VyY2UuIik7Ci0gICAgICAgICAgdmlkZW9DYXB0dXJlci5zdGFydENhcHR1cmUo
dmlkZW9XaWR0aCwgdmlkZW9IZWlnaHQsIHZpZGVvRnBzKTsKLSAgICAgICAgICB2aWRlb0NhcHR1
cmVyU3RvcHBlZCA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQot
ICBwdWJsaWMgdm9pZCBzZXRWaWRlb01heEJpdHJhdGUoZmluYWwgSW50ZWdlciBtYXhCaXRyYXRl
S2JwcykgewotICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92
ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGlmIChwZWVyQ29ubmVj
dGlvbiA9PSBudWxsIHx8IGxvY2FsVmlkZW9TZW5kZXIgPT0gbnVsbCB8fCBpc0Vycm9yKSB7Ci0g
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIExvZy5kKFRBRywgIlJlcXVlc3Rl
ZCBtYXggdmlkZW8gYml0cmF0ZTogIiArIG1heEJpdHJhdGVLYnBzKTsKLSAgICAgICAgaWYgKGxv
Y2FsVmlkZW9TZW5kZXIgPT0gbnVsbCkgewotICAgICAgICAgIExvZy53KFRBRywgIlNlbmRlciBp
cyBub3QgcmVhZHkuIik7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg
UnRwUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gbG9jYWxWaWRlb1NlbmRlci5nZXRQYXJhbWV0ZXJz
KCk7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXJzLmVuY29kaW5ncy5zaXplKCkgPT0gMCkgewotICAg
ICAgICAgIExvZy53KFRBRywgIlJ0cFBhcmFtZXRlcnMgYXJlIG5vdCByZWFkeS4iKTsKLSAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKFJ0cFBhcmFtZXRlcnMuRW5j
b2RpbmcgZW5jb2RpbmcgOiBwYXJhbWV0ZXJzLmVuY29kaW5ncykgewotICAgICAgICAgIC8vIE51
bGwgdmFsdWUgbWVhbnMgbm8gbGltaXQuCi0gICAgICAgICAgZW5jb2RpbmcubWF4Qml0cmF0ZUJw
cyA9IG1heEJpdHJhdGVLYnBzID09IG51bGwgPyBudWxsIDogbWF4Qml0cmF0ZUticHMgKiBCUFNf
SU5fS0JQUzsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWxvY2FsVmlkZW9TZW5kZXIuc2V0UGFy
YW1ldGVycyhwYXJhbWV0ZXJzKSkgewotICAgICAgICAgIExvZy5lKFRBRywgIlJ0cFNlbmRlci5z
ZXRQYXJhbWV0ZXJzIGZhaWxlZC4iKTsKLSAgICAgICAgfQotICAgICAgICBMb2cuZChUQUcsICJD
b25maWd1cmVkIG1heCB2aWRlbyBiaXRyYXRlIHRvOiAiICsgbWF4Qml0cmF0ZUticHMpOwotICAg
ICAgfQotICAgIH0pOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0
cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICBMb2cuZShUQUcsICJQZWVyY29ubmVjdGlvbiBlcnJv
cjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
aWYgKCFpc0Vycm9yKSB7Ci0gICAgICAgICAgZXZlbnRzLm9uUGVlckNvbm5lY3Rpb25FcnJvcihl
cnJvck1lc3NhZ2UpOwotICAgICAgICAgIGlzRXJyb3IgPSB0cnVlOwotICAgICAgICB9Ci0gICAg
ICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIEF1ZGlvVHJhY2sgY3JlYXRlQXVkaW9UcmFj
aygpIHsKLSAgICBhdWRpb1NvdXJjZSA9IGZhY3RvcnkuY3JlYXRlQXVkaW9Tb3VyY2UoYXVkaW9D
b25zdHJhaW50cyk7Ci0gICAgbG9jYWxBdWRpb1RyYWNrID0gZmFjdG9yeS5jcmVhdGVBdWRpb1Ry
YWNrKEFVRElPX1RSQUNLX0lELCBhdWRpb1NvdXJjZSk7Ci0gICAgbG9jYWxBdWRpb1RyYWNrLnNl
dEVuYWJsZWQoZW5hYmxlQXVkaW8pOwotICAgIHJldHVybiBsb2NhbEF1ZGlvVHJhY2s7Ci0gIH0K
LQotICBwcml2YXRlIFZpZGVvVHJhY2sgY3JlYXRlVmlkZW9UcmFjayhWaWRlb0NhcHR1cmVyIGNh
cHR1cmVyKSB7Ci0gICAgdmlkZW9Tb3VyY2UgPSBmYWN0b3J5LmNyZWF0ZVZpZGVvU291cmNlKGNh
cHR1cmVyKTsKLSAgICBjYXB0dXJlci5zdGFydENhcHR1cmUodmlkZW9XaWR0aCwgdmlkZW9IZWln
aHQsIHZpZGVvRnBzKTsKLQotICAgIGxvY2FsVmlkZW9UcmFjayA9IGZhY3RvcnkuY3JlYXRlVmlk
ZW9UcmFjayhWSURFT19UUkFDS19JRCwgdmlkZW9Tb3VyY2UpOwotICAgIGxvY2FsVmlkZW9UcmFj
ay5zZXRFbmFibGVkKHJlbmRlclZpZGVvKTsKLSAgICBsb2NhbFZpZGVvVHJhY2suYWRkUmVuZGVy
ZXIobmV3IFZpZGVvUmVuZGVyZXIobG9jYWxSZW5kZXIpKTsKLSAgICByZXR1cm4gbG9jYWxWaWRl
b1RyYWNrOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGZpbmRWaWRlb1NlbmRlcigpIHsKLSAgICBm
b3IgKFJ0cFNlbmRlciBzZW5kZXIgOiBwZWVyQ29ubmVjdGlvbi5nZXRTZW5kZXJzKCkpIHsKLSAg
ICAgIGlmIChzZW5kZXIudHJhY2soKSAhPSBudWxsKSB7Ci0gICAgICAgIFN0cmluZyB0cmFja1R5
cGUgPSBzZW5kZXIudHJhY2soKS5raW5kKCk7Ci0gICAgICAgIGlmICh0cmFja1R5cGUuZXF1YWxz
KFZJREVPX1RSQUNLX1RZUEUpKSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiRm91bmQgdmlkZW8g
c2VuZGVyLiIpOwotICAgICAgICAgIGxvY2FsVmlkZW9TZW5kZXIgPSBzZW5kZXI7Ci0gICAgICAg
IH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgc2V0U3Rh
cnRCaXRyYXRlKAotICAgICAgU3RyaW5nIGNvZGVjLCBib29sZWFuIGlzVmlkZW9Db2RlYywgU3Ry
aW5nIHNkcERlc2NyaXB0aW9uLCBpbnQgYml0cmF0ZUticHMpIHsKLSAgICBTdHJpbmdbXSBsaW5l
cyA9IHNkcERlc2NyaXB0aW9uLnNwbGl0KCJcclxuIik7Ci0gICAgaW50IHJ0cG1hcExpbmVJbmRl
eCA9IC0xOwotICAgIGJvb2xlYW4gc2RwRm9ybWF0VXBkYXRlZCA9IGZhbHNlOwotICAgIFN0cmlu
ZyBjb2RlY1J0cE1hcCA9IG51bGw7Ci0gICAgLy8gU2VhcmNoIGZvciBjb2RlYyBydHBtYXAgaW4g
Zm9ybWF0Ci0gICAgLy8gYT1ydHBtYXA6PHBheWxvYWQgdHlwZT4gPGVuY29kaW5nIG5hbWU+Lzxj
bG9jayByYXRlPiBbLzxlbmNvZGluZyBwYXJhbWV0ZXJzPl0KLSAgICBTdHJpbmcgcmVnZXggPSAi
XmE9cnRwbWFwOihcXGQrKSAiICsgY29kZWMgKyAiKC9cXGQrKStbXHJdPyQiOwotICAgIFBhdHRl
cm4gY29kZWNQYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKHJlZ2V4KTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICBNYXRjaGVyIGNvZGVjTWF0Y2hl
ciA9IGNvZGVjUGF0dGVybi5tYXRjaGVyKGxpbmVzW2ldKTsKLSAgICAgIGlmIChjb2RlY01hdGNo
ZXIubWF0Y2hlcygpKSB7Ci0gICAgICAgIGNvZGVjUnRwTWFwID0gY29kZWNNYXRjaGVyLmdyb3Vw
KDEpOwotICAgICAgICBydHBtYXBMaW5lSW5kZXggPSBpOwotICAgICAgICBicmVhazsKLSAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKGNvZGVjUnRwTWFwID09IG51bGwpIHsKLSAgICAgIExvZy53KFRB
RywgIk5vIHJ0cG1hcCBmb3IgIiArIGNvZGVjICsgIiBjb2RlYyIpOwotICAgICAgcmV0dXJuIHNk
cERlc2NyaXB0aW9uOwotICAgIH0KLSAgICBMb2cuZChUQUcsICJGb3VuZCAiICsgY29kZWMgKyAi
IHJ0cG1hcCAiICsgY29kZWNSdHBNYXAgKyAiIGF0ICIgKyBsaW5lc1tydHBtYXBMaW5lSW5kZXhd
KTsKLQotICAgIC8vIENoZWNrIGlmIGE9Zm10cCBzdHJpbmcgYWxyZWFkeSBleGlzdCBpbiByZW1v
dGUgU0RQIGZvciB0aGlzIGNvZGVjIGFuZAotICAgIC8vIHVwZGF0ZSBpdCB3aXRoIG5ldyBiaXRy
YXRlIHBhcmFtZXRlci4KLSAgICByZWdleCA9ICJeYT1mbXRwOiIgKyBjb2RlY1J0cE1hcCArICIg
XFx3Kz1cXGQrLipbXHJdPyQiOwotICAgIGNvZGVjUGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZShy
ZWdleCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgewotICAg
ICAgTWF0Y2hlciBjb2RlY01hdGNoZXIgPSBjb2RlY1BhdHRlcm4ubWF0Y2hlcihsaW5lc1tpXSk7
Ci0gICAgICBpZiAoY29kZWNNYXRjaGVyLm1hdGNoZXMoKSkgewotICAgICAgICBMb2cuZChUQUcs
ICJGb3VuZCAiICsgY29kZWMgKyAiICIgKyBsaW5lc1tpXSk7Ci0gICAgICAgIGlmIChpc1ZpZGVv
Q29kZWMpIHsKLSAgICAgICAgICBsaW5lc1tpXSArPSAiOyAiICsgVklERU9fQ09ERUNfUEFSQU1f
U1RBUlRfQklUUkFURSArICI9IiArIGJpdHJhdGVLYnBzOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgIGxpbmVzW2ldICs9ICI7ICIgKyBBVURJT19DT0RFQ19QQVJBTV9CSVRSQVRFICsgIj0i
ICsgKGJpdHJhdGVLYnBzICogMTAwMCk7Ci0gICAgICAgIH0KLSAgICAgICAgTG9nLmQoVEFHLCAi
VXBkYXRlIHJlbW90ZSBTRFAgbGluZTogIiArIGxpbmVzW2ldKTsKLSAgICAgICAgc2RwRm9ybWF0
VXBkYXRlZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0KLQotICAgIFN0
cmluZ0J1aWxkZXIgbmV3U2RwRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKLSAgICAgIG5ld1NkcERl
c2NyaXB0aW9uLmFwcGVuZChsaW5lc1tpXSkuYXBwZW5kKCJcclxuIik7Ci0gICAgICAvLyBBcHBl
bmQgbmV3IGE9Zm10cCBsaW5lIGlmIG5vIHN1Y2ggbGluZSBleGlzdCBmb3IgYSBjb2RlYy4KLSAg
ICAgIGlmICghc2RwRm9ybWF0VXBkYXRlZCAmJiBpID09IHJ0cG1hcExpbmVJbmRleCkgewotICAg
ICAgICBTdHJpbmcgYml0cmF0ZVNldDsKLSAgICAgICAgaWYgKGlzVmlkZW9Db2RlYykgewotICAg
ICAgICAgIGJpdHJhdGVTZXQgPQotICAgICAgICAgICAgICAiYT1mbXRwOiIgKyBjb2RlY1J0cE1h
cCArICIgIiArIFZJREVPX0NPREVDX1BBUkFNX1NUQVJUX0JJVFJBVEUgKyAiPSIgKyBiaXRyYXRl
S2JwczsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBiaXRyYXRlU2V0ID0gImE9Zm10cDoi
ICsgY29kZWNSdHBNYXAgKyAiICIgKyBBVURJT19DT0RFQ19QQVJBTV9CSVRSQVRFICsgIj0iCi0g
ICAgICAgICAgICAgICsgKGJpdHJhdGVLYnBzICogMTAwMCk7Ci0gICAgICAgIH0KLSAgICAgICAg
TG9nLmQoVEFHLCAiQWRkIHJlbW90ZSBTRFAgbGluZTogIiArIGJpdHJhdGVTZXQpOwotICAgICAg
ICBuZXdTZHBEZXNjcmlwdGlvbi5hcHBlbmQoYml0cmF0ZVNldCkuYXBwZW5kKCJcclxuIik7Ci0g
ICAgICB9Ci0gICAgfQotICAgIHJldHVybiBuZXdTZHBEZXNjcmlwdGlvbi50b1N0cmluZygpOwot
ICB9Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByZWZlckNvZGVjKFN0cmluZyBzZHBEZXNj
cmlwdGlvbiwgU3RyaW5nIGNvZGVjLCBib29sZWFuIGlzQXVkaW8pIHsKLSAgICBTdHJpbmdbXSBs
aW5lcyA9IHNkcERlc2NyaXB0aW9uLnNwbGl0KCJcclxuIik7Ci0gICAgaW50IG1MaW5lSW5kZXgg
PSAtMTsKLSAgICBTdHJpbmcgY29kZWNSdHBNYXAgPSBudWxsOwotICAgIC8vIGE9cnRwbWFwOjxw
YXlsb2FkIHR5cGU+IDxlbmNvZGluZyBuYW1lPi88Y2xvY2sgcmF0ZT4gWy88ZW5jb2RpbmcgcGFy
YW1ldGVycz5dCi0gICAgU3RyaW5nIHJlZ2V4ID0gIl5hPXJ0cG1hcDooXFxkKykgIiArIGNvZGVj
ICsgIigvXFxkKykrW1xyXT8kIjsKLSAgICBQYXR0ZXJuIGNvZGVjUGF0dGVybiA9IFBhdHRlcm4u
Y29tcGlsZShyZWdleCk7Ci0gICAgU3RyaW5nIG1lZGlhRGVzY3JpcHRpb24gPSAibT12aWRlbyAi
OwotICAgIGlmIChpc0F1ZGlvKSB7Ci0gICAgICBtZWRpYURlc2NyaXB0aW9uID0gIm09YXVkaW8g
IjsKLSAgICB9Ci0gICAgZm9yIChpbnQgaSA9IDA7IChpIDwgbGluZXMubGVuZ3RoKSAmJiAobUxp
bmVJbmRleCA9PSAtMSB8fCBjb2RlY1J0cE1hcCA9PSBudWxsKTsgaSsrKSB7Ci0gICAgICBpZiAo
bGluZXNbaV0uc3RhcnRzV2l0aChtZWRpYURlc2NyaXB0aW9uKSkgewotICAgICAgICBtTGluZUlu
ZGV4ID0gaTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0gICAgICBNYXRjaGVyIGNvZGVj
TWF0Y2hlciA9IGNvZGVjUGF0dGVybi5tYXRjaGVyKGxpbmVzW2ldKTsKLSAgICAgIGlmIChjb2Rl
Y01hdGNoZXIubWF0Y2hlcygpKSB7Ci0gICAgICAgIGNvZGVjUnRwTWFwID0gY29kZWNNYXRjaGVy
Lmdyb3VwKDEpOwotICAgICAgfQotICAgIH0KLSAgICBpZiAobUxpbmVJbmRleCA9PSAtMSkgewot
ICAgICAgTG9nLncoVEFHLCAiTm8gIiArIG1lZGlhRGVzY3JpcHRpb24gKyAiIGxpbmUsIHNvIGNh
bid0IHByZWZlciAiICsgY29kZWMpOwotICAgICAgcmV0dXJuIHNkcERlc2NyaXB0aW9uOwotICAg
IH0KLSAgICBpZiAoY29kZWNSdHBNYXAgPT0gbnVsbCkgewotICAgICAgTG9nLncoVEFHLCAiTm8g
cnRwbWFwIGZvciAiICsgY29kZWMpOwotICAgICAgcmV0dXJuIHNkcERlc2NyaXB0aW9uOwotICAg
IH0KLSAgICBMb2cuZChUQUcsICJGb3VuZCAiICsgY29kZWMgKyAiIHJ0cG1hcCAiICsgY29kZWNS
dHBNYXAgKyAiLCBwcmVmZXIgYXQgIiArIGxpbmVzW21MaW5lSW5kZXhdKTsKLSAgICBTdHJpbmdb
XSBvcmlnTUxpbmVQYXJ0cyA9IGxpbmVzW21MaW5lSW5kZXhdLnNwbGl0KCIgIik7Ci0gICAgaWYg
KG9yaWdNTGluZVBhcnRzLmxlbmd0aCA+IDMpIHsKLSAgICAgIFN0cmluZ0J1aWxkZXIgbmV3TUxp
bmUgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwotICAgICAgaW50IG9yaWdQYXJ0SW5kZXggPSAwOwot
ICAgICAgLy8gRm9ybWF0IGlzOiBtPTxtZWRpYT4gPHBvcnQ+IDxwcm90bz4gPGZtdD4gLi4uCi0g
ICAgICBuZXdNTGluZS5hcHBlbmQob3JpZ01MaW5lUGFydHNbb3JpZ1BhcnRJbmRleCsrXSkuYXBw
ZW5kKCIgIik7Ci0gICAgICBuZXdNTGluZS5hcHBlbmQob3JpZ01MaW5lUGFydHNbb3JpZ1BhcnRJ
bmRleCsrXSkuYXBwZW5kKCIgIik7Ci0gICAgICBuZXdNTGluZS5hcHBlbmQob3JpZ01MaW5lUGFy
dHNbb3JpZ1BhcnRJbmRleCsrXSkuYXBwZW5kKCIgIik7Ci0gICAgICBuZXdNTGluZS5hcHBlbmQo
Y29kZWNSdHBNYXApOwotICAgICAgZm9yICg7IG9yaWdQYXJ0SW5kZXggPCBvcmlnTUxpbmVQYXJ0
cy5sZW5ndGg7IG9yaWdQYXJ0SW5kZXgrKykgewotICAgICAgICBpZiAoIW9yaWdNTGluZVBhcnRz
W29yaWdQYXJ0SW5kZXhdLmVxdWFscyhjb2RlY1J0cE1hcCkpIHsKLSAgICAgICAgICBuZXdNTGlu
ZS5hcHBlbmQoIiAiKS5hcHBlbmQob3JpZ01MaW5lUGFydHNbb3JpZ1BhcnRJbmRleF0pOwotICAg
ICAgICB9Ci0gICAgICB9Ci0gICAgICBsaW5lc1ttTGluZUluZGV4XSA9IG5ld01MaW5lLnRvU3Ry
aW5nKCk7Ci0gICAgICBMb2cuZChUQUcsICJDaGFuZ2UgbWVkaWEgZGVzY3JpcHRpb246ICIgKyBs
aW5lc1ttTGluZUluZGV4XSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5lKFRBRywgIldyb25n
IFNEUCBtZWRpYSBkZXNjcmlwdGlvbiBmb3JtYXQ6ICIgKyBsaW5lc1ttTGluZUluZGV4XSk7Ci0g
ICAgfQotICAgIFN0cmluZ0J1aWxkZXIgbmV3U2RwRGVzY3JpcHRpb24gPSBuZXcgU3RyaW5nQnVp
bGRlcigpOwotICAgIGZvciAoU3RyaW5nIGxpbmUgOiBsaW5lcykgewotICAgICAgbmV3U2RwRGVz
Y3JpcHRpb24uYXBwZW5kKGxpbmUpLmFwcGVuZCgiXHJcbiIpOwotICAgIH0KLSAgICByZXR1cm4g
bmV3U2RwRGVzY3JpcHRpb24udG9TdHJpbmcoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkcmFp
bkNhbmRpZGF0ZXMoKSB7Ci0gICAgaWYgKHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMgIT0gbnVsbCkg
ewotICAgICAgTG9nLmQoVEFHLCAiQWRkICIgKyBxdWV1ZWRSZW1vdGVDYW5kaWRhdGVzLnNpemUo
KSArICIgcmVtb3RlIGNhbmRpZGF0ZXMiKTsKLSAgICAgIGZvciAoSWNlQ2FuZGlkYXRlIGNhbmRp
ZGF0ZSA6IHF1ZXVlZFJlbW90ZUNhbmRpZGF0ZXMpIHsKLSAgICAgICAgcGVlckNvbm5lY3Rpb24u
YWRkSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgICB9Ci0gICAgICBxdWV1ZWRSZW1vdGVD
YW5kaWRhdGVzID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3dpdGNoQ2Ft
ZXJhSW50ZXJuYWwoKSB7Ci0gICAgaWYgKHZpZGVvQ2FwdHVyZXIgaW5zdGFuY2VvZiBDYW1lcmFW
aWRlb0NhcHR1cmVyKSB7Ci0gICAgICBpZiAoIXZpZGVvQ2FsbEVuYWJsZWQgfHwgaXNFcnJvciB8
fCB2aWRlb0NhcHR1cmVyID09IG51bGwpIHsKLSAgICAgICAgTG9nLmUoVEFHLCAiRmFpbGVkIHRv
IHN3aXRjaCBjYW1lcmEuIFZpZGVvOiAiICsgdmlkZW9DYWxsRW5hYmxlZCArICIuIEVycm9yIDog
IiArIGlzRXJyb3IpOwotICAgICAgICByZXR1cm47IC8vIE5vIHZpZGVvIGlzIHNlbnQgb3Igb25s
eSBvbmUgY2FtZXJhIGlzIGF2YWlsYWJsZSBvciBlcnJvciBoYXBwZW5lZC4KLSAgICAgIH0KLSAg
ICAgIExvZy5kKFRBRywgIlN3aXRjaCBjYW1lcmEiKTsKLSAgICAgIENhbWVyYVZpZGVvQ2FwdHVy
ZXIgY2FtZXJhVmlkZW9DYXB0dXJlciA9IChDYW1lcmFWaWRlb0NhcHR1cmVyKSB2aWRlb0NhcHR1
cmVyOwotICAgICAgY2FtZXJhVmlkZW9DYXB0dXJlci5zd2l0Y2hDYW1lcmEobnVsbCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgIldpbGwgbm90IHN3aXRjaCBjYW1lcmEsIHZpZGVv
IGNhcHV0dXJlciBpcyBub3QgYSBjYW1lcmEiKTsKLSAgICB9Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBzd2l0Y2hDYW1lcmEoKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7
Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgc3dp
dGNoQ2FtZXJhSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIHB1YmxpYyB2
b2lkIGNoYW5nZUNhcHR1cmVGb3JtYXQoZmluYWwgaW50IHdpZHRoLCBmaW5hbCBpbnQgaGVpZ2h0
LCBmaW5hbCBpbnQgZnJhbWVyYXRlKSB7Ci0gICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgY2hhbmdlQ2FwdHVyZUZvcm1hdEludGVybmFsKHdpZHRoLCBoZWlnaHQsIGZyYW1lcmF0ZSk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgY2hhbmdlQ2FwdHVyZUZv
cm1hdEludGVybmFsKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGZyYW1lcmF0ZSkgewotICAg
IGlmICghdmlkZW9DYWxsRW5hYmxlZCB8fCBpc0Vycm9yIHx8IHZpZGVvQ2FwdHVyZXIgPT0gbnVs
bCkgewotICAgICAgTG9nLmUoVEFHLAotICAgICAgICAgICJGYWlsZWQgdG8gY2hhbmdlIGNhcHR1
cmUgZm9ybWF0LiBWaWRlbzogIiArIHZpZGVvQ2FsbEVuYWJsZWQgKyAiLiBFcnJvciA6ICIgKyBp
c0Vycm9yKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiY2hhbmdlQ2Fw
dHVyZUZvcm1hdDogIiArIHdpZHRoICsgIngiICsgaGVpZ2h0ICsgIkAiICsgZnJhbWVyYXRlKTsK
LSAgICB2aWRlb1NvdXJjZS5hZGFwdE91dHB1dEZvcm1hdCh3aWR0aCwgaGVpZ2h0LCBmcmFtZXJh
dGUpOwotICB9Ci0KLSAgLy8gSW1wbGVtZW50YXRpb24gZGV0YWlsOiBvYnNlcnZlIElDRSAmIHN0
cmVhbSBjaGFuZ2VzIGFuZCByZWFjdCBhY2NvcmRpbmdseS4KLSAgcHJpdmF0ZSBjbGFzcyBQQ09i
c2VydmVyIGltcGxlbWVudHMgUGVlckNvbm5lY3Rpb24uT2JzZXJ2ZXIgewotICAgIEBPdmVycmlk
ZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5k
aWRhdGUpIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
ICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGV2ZW50
cy5vbkljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVk
KGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1
dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICAgIGV2ZW50cy5vbkljZUNhbmRpZGF0ZXNSZW1vdmVkKGNhbmRp
ZGF0ZXMpOwotICAgICAgICB9Ci0gICAgICB9KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAg
ICBwdWJsaWMgdm9pZCBvblNpZ25hbGluZ0NoYW5nZShQZWVyQ29ubmVjdGlvbi5TaWduYWxpbmdT
dGF0ZSBuZXdTdGF0ZSkgewotICAgICAgTG9nLmQoVEFHLCAiU2lnbmFsaW5nU3RhdGU6ICIgKyBu
ZXdTdGF0ZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25JY2VD
b25uZWN0aW9uQ2hhbmdlKGZpbmFsIFBlZXJDb25uZWN0aW9uLkljZUNvbm5lY3Rpb25TdGF0ZSBu
ZXdTdGF0ZSkgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgTG9n
LmQoVEFHLCAiSWNlQ29ubmVjdGlvblN0YXRlOiAiICsgbmV3U3RhdGUpOwotICAgICAgICAgIGlm
IChuZXdTdGF0ZSA9PSBJY2VDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAg
ICBldmVudHMub25JY2VDb25uZWN0ZWQoKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG5ld1N0YXRl
ID09IEljZUNvbm5lY3Rpb25TdGF0ZS5ESVNDT05ORUNURUQpIHsKLSAgICAgICAgICAgIGV2ZW50
cy5vbkljZURpc2Nvbm5lY3RlZCgpOwotICAgICAgICAgIH0gZWxzZSBpZiAobmV3U3RhdGUgPT0g
SWNlQ29ubmVjdGlvblN0YXRlLkZBSUxFRCkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoIklD
RSBjb25uZWN0aW9uIGZhaWxlZC4iKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0p
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uSWNlR2F0aGVyaW5n
Q2hhbmdlKFBlZXJDb25uZWN0aW9uLkljZUdhdGhlcmluZ1N0YXRlIG5ld1N0YXRlKSB7Ci0gICAg
ICBMb2cuZChUQUcsICJJY2VHYXRoZXJpbmdTdGF0ZTogIiArIG5ld1N0YXRlKTsKLSAgICB9Ci0K
LSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkljZUNvbm5lY3Rpb25SZWNlaXZpbmdD
aGFuZ2UoYm9vbGVhbiByZWNlaXZpbmcpIHsKLSAgICAgIExvZy5kKFRBRywgIkljZUNvbm5lY3Rp
b25SZWNlaXZpbmcgY2hhbmdlZCB0byAiICsgcmVjZWl2aW5nKTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkFkZFN0cmVhbShmaW5hbCBNZWRpYVN0cmVhbSBzdHJl
YW0pIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBA
T3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGlmIChwZWVy
Q29ubmVjdGlvbiA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICB9Ci0gICAgICAgICAgaWYgKHN0cmVhbS5hdWRpb1RyYWNrcy5zaXplKCkgPiAxIHx8
IHN0cmVhbS52aWRlb1RyYWNrcy5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJv
cigiV2VpcmQtbG9va2luZyBzdHJlYW06ICIgKyBzdHJlYW0pOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgIH0KLSAgICAgICAgICBpZiAoc3RyZWFtLnZpZGVvVHJhY2tzLnNpemUoKSA9
PSAxKSB7Ci0gICAgICAgICAgICByZW1vdGVWaWRlb1RyYWNrID0gc3RyZWFtLnZpZGVvVHJhY2tz
LmdldCgwKTsKLSAgICAgICAgICAgIHJlbW90ZVZpZGVvVHJhY2suc2V0RW5hYmxlZChyZW5kZXJW
aWRlbyk7Ci0gICAgICAgICAgICBmb3IgKFZpZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHJlbW90ZVJl
bmRlciA6IHJlbW90ZVJlbmRlcnMpIHsKLSAgICAgICAgICAgICAgcmVtb3RlVmlkZW9UcmFjay5h
ZGRSZW5kZXJlcihuZXcgVmlkZW9SZW5kZXJlcihyZW1vdGVSZW5kZXIpKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVy
cmlkZQotICAgIHB1YmxpYyB2b2lkIG9uUmVtb3ZlU3RyZWFtKGZpbmFsIE1lZGlhU3RyZWFtIHN0
cmVhbSkgewotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAg
IEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgcmVtb3Rl
VmlkZW9UcmFjayA9IG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uRGF0YUNoYW5uZWwoZmluYWwgRGF0YUNoYW5uZWwg
ZGMpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJBcHBSVEMgZG9lc24ndCB1c2UgZGF0YSBjaGFubmVs
cywgYnV0IGdvdDogIiArIGRjLmxhYmVsKCkgKyAiIGFueXdheSEiKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblJlbmVnb3RpYXRpb25OZWVkZWQoKSB7Ci0gICAg
ICAvLyBObyBuZWVkIHRvIGRvIGFueXRoaW5nOyBBcHBSVEMgZm9sbG93cyBhIHByZS1hZ3JlZWQt
dXBvbgotICAgICAgLy8gc2lnbmFsaW5nL25lZ290aWF0aW9uIHByb3RvY29sLgotICAgIH0KLSAg
fQotCi0gIC8vIEltcGxlbWVudGF0aW9uIGRldGFpbDogaGFuZGxlIG9mZmVyIGNyZWF0aW9uL3Np
Z25hbGluZyBhbmQgYW5zd2VyIHNldHRpbmcsCi0gIC8vIGFzIHdlbGwgYXMgYWRkaW5nIHJlbW90
ZSBJQ0UgY2FuZGlkYXRlcyBvbmNlIHRoZSBhbnN3ZXIgU0RQIGlzIHNldC4KLSAgcHJpdmF0ZSBj
bGFzcyBTRFBPYnNlcnZlciBpbXBsZW1lbnRzIFNkcE9ic2VydmVyIHsKLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgdm9pZCBvbkNyZWF0ZVN1Y2Nlc3MoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9u
IG9yaWdTZHApIHsKLSAgICAgIGlmIChsb2NhbFNkcCAhPSBudWxsKSB7Ci0gICAgICAgIHJlcG9y
dEVycm9yKCJNdWx0aXBsZSBTRFAgY3JlYXRlLiIpOwotICAgICAgICByZXR1cm47Ci0gICAgICB9
Ci0gICAgICBTdHJpbmcgc2RwRGVzY3JpcHRpb24gPSBvcmlnU2RwLmRlc2NyaXB0aW9uOwotICAg
ICAgaWYgKHByZWZlcklzYWMpIHsKLSAgICAgICAgc2RwRGVzY3JpcHRpb24gPSBwcmVmZXJDb2Rl
YyhzZHBEZXNjcmlwdGlvbiwgQVVESU9fQ09ERUNfSVNBQywgdHJ1ZSk7Ci0gICAgICB9Ci0gICAg
ICBpZiAodmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgICBzZHBEZXNjcmlwdGlvbiA9IHByZWZl
ckNvZGVjKHNkcERlc2NyaXB0aW9uLCBwcmVmZXJyZWRWaWRlb0NvZGVjLCBmYWxzZSk7Ci0gICAg
ICB9Ci0gICAgICBmaW5hbCBTZXNzaW9uRGVzY3JpcHRpb24gc2RwID0gbmV3IFNlc3Npb25EZXNj
cmlwdGlvbihvcmlnU2RwLnR5cGUsIHNkcERlc2NyaXB0aW9uKTsKLSAgICAgIGxvY2FsU2RwID0g
c2RwOwotICAgICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgIEBP
dmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAgaWYgKHBlZXJD
b25uZWN0aW9uICE9IG51bGwgJiYgIWlzRXJyb3IpIHsKLSAgICAgICAgICAgIExvZy5kKFRBRywg
IlNldCBsb2NhbCBTRFAgZnJvbSAiICsgc2RwLnR5cGUpOwotICAgICAgICAgICAgcGVlckNvbm5l
Y3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihzZHBPYnNlcnZlciwgc2RwKTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uU2V0U3VjY2VzcygpIHsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewot
ICAgICAgICAgIGlmIChwZWVyQ29ubmVjdGlvbiA9PSBudWxsIHx8IGlzRXJyb3IpIHsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgaWYgKGlzSW5pdGlhdG9yKSB7
Ci0gICAgICAgICAgICAvLyBGb3Igb2ZmZXJpbmcgcGVlciBjb25uZWN0aW9uIHdlIGZpcnN0IGNy
ZWF0ZSBvZmZlciBhbmQgc2V0Ci0gICAgICAgICAgICAvLyBsb2NhbCBTRFAsIHRoZW4gYWZ0ZXIg
cmVjZWl2aW5nIGFuc3dlciBzZXQgcmVtb3RlIFNEUC4KLSAgICAgICAgICAgIGlmIChwZWVyQ29u
bmVjdGlvbi5nZXRSZW1vdGVEZXNjcmlwdGlvbigpID09IG51bGwpIHsKLSAgICAgICAgICAgICAg
Ly8gV2UndmUganVzdCBzZXQgb3VyIGxvY2FsIFNEUCBzbyB0aW1lIHRvIHNlbmQgaXQuCi0gICAg
ICAgICAgICAgIExvZy5kKFRBRywgIkxvY2FsIFNEUCBzZXQgc3VjY2VzZnVsbHkiKTsKLSAgICAg
ICAgICAgICAgZXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbihsb2NhbFNkcCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAvLyBXZSd2ZSBqdXN0IHNldCByZW1vdGUgZGVzY3Jp
cHRpb24sIHNvIGRyYWluIHJlbW90ZQotICAgICAgICAgICAgICAvLyBhbmQgc2VuZCBsb2NhbCBJ
Q0UgY2FuZGlkYXRlcy4KLSAgICAgICAgICAgICAgTG9nLmQoVEFHLCAiUmVtb3RlIFNEUCBzZXQg
c3VjY2VzZnVsbHkiKTsKLSAgICAgICAgICAgICAgZHJhaW5DYW5kaWRhdGVzKCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIEZvciBhbnN3ZXJpbmcg
cGVlciBjb25uZWN0aW9uIHdlIHNldCByZW1vdGUgU0RQIGFuZCB0aGVuCi0gICAgICAgICAgICAv
LyBjcmVhdGUgYW5zd2VyIGFuZCBzZXQgbG9jYWwgU0RQLgotICAgICAgICAgICAgaWYgKHBlZXJD
b25uZWN0aW9uLmdldExvY2FsRGVzY3JpcHRpb24oKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAg
IC8vIFdlJ3ZlIGp1c3Qgc2V0IG91ciBsb2NhbCBTRFAgc28gdGltZSB0byBzZW5kIGl0LCBkcmFp
bgotICAgICAgICAgICAgICAvLyByZW1vdGUgYW5kIHNlbmQgbG9jYWwgSUNFIGNhbmRpZGF0ZXMu
Ci0gICAgICAgICAgICAgIExvZy5kKFRBRywgIkxvY2FsIFNEUCBzZXQgc3VjY2VzZnVsbHkiKTsK
LSAgICAgICAgICAgICAgZXZlbnRzLm9uTG9jYWxEZXNjcmlwdGlvbihsb2NhbFNkcCk7Ci0gICAg
ICAgICAgICAgIGRyYWluQ2FuZGlkYXRlcygpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgLy8gV2UndmUganVzdCBzZXQgcmVtb3RlIFNEUCAtIGRvIG5vdGhpbmcgZm9yIG5v
dyAtCi0gICAgICAgICAgICAgIC8vIGFuc3dlciB3aWxsIGJlIGNyZWF0ZWQgc29vbi4KLSAgICAg
ICAgICAgICAgTG9nLmQoVEFHLCAiUmVtb3RlIFNEUCBzZXQgc3VjY2VzZnVsbHkiKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0pOwotICAgIH0KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ3JlYXRlRmFpbHVyZShmaW5hbCBTdHJpbmcg
ZXJyb3IpIHsKLSAgICAgIHJlcG9ydEVycm9yKCJjcmVhdGVTRFAgZXJyb3I6ICIgKyBlcnJvcik7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25TZXRGYWlsdXJlKGZp
bmFsIFN0cmluZyBlcnJvcikgewotICAgICAgcmVwb3J0RXJyb3IoInNldFNEUCBlcnJvcjogIiAr
IGVycm9yKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9QZXJjZW50RnJhbWVMYXlvdXQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvUGVyY2VudEZyYW1lTGF5b3V0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9QZXJjZW50RnJhbWVMYXlvdXQuamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdl
YlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ug
b3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1p
bXBvcnQgYW5kcm9pZC51dGlsLkF0dHJpYnV0ZVNldDsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmll
dzsKLWltcG9ydCBhbmRyb2lkLnZpZXcuVmlld0dyb3VwOwotCi0vKioKLSAqIFNpbXBsZSBjb250
YWluZXIgdGhhdCBjb25maW5lcyB0aGUgY2hpbGRyZW4gdG8gYSBzdWJyZWN0YW5nbGUgc3BlY2lm
aWVkIGFzIHBlcmNlbnRhZ2UgdmFsdWVzIG9mCi0gKiB0aGUgY29udGFpbmVyIHNpemUuIFRoZSBj
aGlsZHJlbiBhcmUgY2VudGVyZWQgaG9yaXpvbnRhbGx5IGFuZCB2ZXJ0aWNhbGx5IGluc2lkZSB0
aGUgY29uZmluZWQKLSAqIHNwYWNlLgotICovCi1wdWJsaWMgY2xhc3MgUGVyY2VudEZyYW1lTGF5
b3V0IGV4dGVuZHMgVmlld0dyb3VwIHsKLSAgcHJpdmF0ZSBpbnQgeFBlcmNlbnQgPSAwOwotICBw
cml2YXRlIGludCB5UGVyY2VudCA9IDA7Ci0gIHByaXZhdGUgaW50IHdpZHRoUGVyY2VudCA9IDEw
MDsKLSAgcHJpdmF0ZSBpbnQgaGVpZ2h0UGVyY2VudCA9IDEwMDsKLQotICBwdWJsaWMgUGVyY2Vu
dEZyYW1lTGF5b3V0KENvbnRleHQgY29udGV4dCkgewotICAgIHN1cGVyKGNvbnRleHQpOwotICB9
Ci0KLSAgcHVibGljIFBlcmNlbnRGcmFtZUxheW91dChDb250ZXh0IGNvbnRleHQsIEF0dHJpYnV0
ZVNldCBhdHRycykgewotICAgIHN1cGVyKGNvbnRleHQsIGF0dHJzKTsKLSAgfQotCi0gIHB1Ymxp
YyBQZXJjZW50RnJhbWVMYXlvdXQoQ29udGV4dCBjb250ZXh0LCBBdHRyaWJ1dGVTZXQgYXR0cnMs
IGludCBkZWZTdHlsZUF0dHIpIHsKLSAgICBzdXBlcihjb250ZXh0LCBhdHRycywgZGVmU3R5bGVB
dHRyKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHNldFBvc2l0aW9uKGludCB4UGVyY2VudCwgaW50
IHlQZXJjZW50LCBpbnQgd2lkdGhQZXJjZW50LCBpbnQgaGVpZ2h0UGVyY2VudCkgewotICAgIHRo
aXMueFBlcmNlbnQgPSB4UGVyY2VudDsKLSAgICB0aGlzLnlQZXJjZW50ID0geVBlcmNlbnQ7Ci0g
ICAgdGhpcy53aWR0aFBlcmNlbnQgPSB3aWR0aFBlcmNlbnQ7Ci0gICAgdGhpcy5oZWlnaHRQZXJj
ZW50ID0gaGVpZ2h0UGVyY2VudDsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgYm9vbGVh
biBzaG91bGREZWxheUNoaWxkUHJlc3NlZFN0YXRlKCkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbk1lYXN1cmUoaW50IHdpZHRoTWVh
c3VyZVNwZWMsIGludCBoZWlnaHRNZWFzdXJlU3BlYykgewotICAgIGZpbmFsIGludCB3aWR0aCA9
IGdldERlZmF1bHRTaXplKEludGVnZXIuTUFYX1ZBTFVFLCB3aWR0aE1lYXN1cmVTcGVjKTsKLSAg
ICBmaW5hbCBpbnQgaGVpZ2h0ID0gZ2V0RGVmYXVsdFNpemUoSW50ZWdlci5NQVhfVkFMVUUsIGhl
aWdodE1lYXN1cmVTcGVjKTsKLSAgICBzZXRNZWFzdXJlZERpbWVuc2lvbihNZWFzdXJlU3BlYy5t
YWtlTWVhc3VyZVNwZWMod2lkdGgsIE1lYXN1cmVTcGVjLkVYQUNUTFkpLAotICAgICAgICBNZWFz
dXJlU3BlYy5tYWtlTWVhc3VyZVNwZWMoaGVpZ2h0LCBNZWFzdXJlU3BlYy5FWEFDVExZKSk7Ci0K
LSAgICBmaW5hbCBpbnQgY2hpbGRXaWR0aE1lYXN1cmVTcGVjID0KLSAgICAgICAgTWVhc3VyZVNw
ZWMubWFrZU1lYXN1cmVTcGVjKHdpZHRoICogd2lkdGhQZXJjZW50IC8gMTAwLCBNZWFzdXJlU3Bl
Yy5BVF9NT1NUKTsKLSAgICBmaW5hbCBpbnQgY2hpbGRIZWlnaHRNZWFzdXJlU3BlYyA9Ci0gICAg
ICAgIE1lYXN1cmVTcGVjLm1ha2VNZWFzdXJlU3BlYyhoZWlnaHQgKiBoZWlnaHRQZXJjZW50IC8g
MTAwLCBNZWFzdXJlU3BlYy5BVF9NT1NUKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGdldENo
aWxkQ291bnQoKTsgKytpKSB7Ci0gICAgICBmaW5hbCBWaWV3IGNoaWxkID0gZ2V0Q2hpbGRBdChp
KTsKLSAgICAgIGlmIChjaGlsZC5nZXRWaXNpYmlsaXR5KCkgIT0gR09ORSkgewotICAgICAgICBj
aGlsZC5tZWFzdXJlKGNoaWxkV2lkdGhNZWFzdXJlU3BlYywgY2hpbGRIZWlnaHRNZWFzdXJlU3Bl
Yyk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lk
IG9uTGF5b3V0KGJvb2xlYW4gY2hhbmdlZCwgaW50IGxlZnQsIGludCB0b3AsIGludCByaWdodCwg
aW50IGJvdHRvbSkgewotICAgIGZpbmFsIGludCB3aWR0aCA9IHJpZ2h0IC0gbGVmdDsKLSAgICBm
aW5hbCBpbnQgaGVpZ2h0ID0gYm90dG9tIC0gdG9wOwotICAgIC8vIFN1Yi1yZWN0YW5nbGUgc3Bl
Y2lmaWVkIGJ5IHBlcmNlbnRhZ2UgdmFsdWVzLgotICAgIGZpbmFsIGludCBzdWJXaWR0aCA9IHdp
ZHRoICogd2lkdGhQZXJjZW50IC8gMTAwOwotICAgIGZpbmFsIGludCBzdWJIZWlnaHQgPSBoZWln
aHQgKiBoZWlnaHRQZXJjZW50IC8gMTAwOwotICAgIGZpbmFsIGludCBzdWJMZWZ0ID0gbGVmdCAr
IHdpZHRoICogeFBlcmNlbnQgLyAxMDA7Ci0gICAgZmluYWwgaW50IHN1YlRvcCA9IHRvcCArIGhl
aWdodCAqIHlQZXJjZW50IC8gMTAwOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBnZXRDaGls
ZENvdW50KCk7ICsraSkgewotICAgICAgZmluYWwgVmlldyBjaGlsZCA9IGdldENoaWxkQXQoaSk7
Ci0gICAgICBpZiAoY2hpbGQuZ2V0VmlzaWJpbGl0eSgpICE9IEdPTkUpIHsKLSAgICAgICAgZmlu
YWwgaW50IGNoaWxkV2lkdGggPSBjaGlsZC5nZXRNZWFzdXJlZFdpZHRoKCk7Ci0gICAgICAgIGZp
bmFsIGludCBjaGlsZEhlaWdodCA9IGNoaWxkLmdldE1lYXN1cmVkSGVpZ2h0KCk7Ci0gICAgICAg
IC8vIENlbnRlciBjaGlsZCBib3RoIHZlcnRpY2FsbHkgYW5kIGhvcml6b250YWxseS4KLSAgICAg
ICAgZmluYWwgaW50IGNoaWxkTGVmdCA9IHN1YkxlZnQgKyAoc3ViV2lkdGggLSBjaGlsZFdpZHRo
KSAvIDI7Ci0gICAgICAgIGZpbmFsIGludCBjaGlsZFRvcCA9IHN1YlRvcCArIChzdWJIZWlnaHQg
LSBjaGlsZEhlaWdodCkgLyAyOwotICAgICAgICBjaGlsZC5sYXlvdXQoY2hpbGRMZWZ0LCBjaGls
ZFRvcCwgY2hpbGRMZWZ0ICsgY2hpbGRXaWR0aCwgY2hpbGRUb3AgKyBjaGlsZEhlaWdodCk7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMv
Um9vbVBhcmFtZXRlcnNGZXRjaGVyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL1Jvb21QYXJhbWV0ZXJzRmV0Y2hlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvUm9vbVBhcmFtZXRlcnNGZXRjaGVyLmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
NCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMu
QXBwUlRDQ2xpZW50LlNpZ25hbGluZ1BhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBw
cnRjLnV0aWwuQXN5bmNIdHRwVVJMQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBy
dGMudXRpbC5Bc3luY0h0dHBVUkxDb25uZWN0aW9uLkFzeW5jSHR0cEV2ZW50czsKLQotaW1wb3J0
IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWltcG9ydCBvcmcuanNvbi5KU09OQXJyYXk7Ci1pbXBvcnQg
b3JnLmpzb24uSlNPTkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuanNvbi5KU09OT2JqZWN0OwotaW1w
b3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5l
Y3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci0KLWltcG9ydCBq
YXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQg
amF2YS5uZXQuSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0
IGphdmEudXRpbC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwotCi0vKioK
LSAqIEFzeW5jVGFzayB0aGF0IGNvbnZlcnRzIGFuIEFwcFJUQyByb29tIFVSTCBpbnRvIHRoZSBz
ZXQgb2Ygc2lnbmFsaW5nCi0gKiBwYXJhbWV0ZXJzIHRvIHVzZSB3aXRoIHRoYXQgcm9vbS4KLSAq
LwotcHVibGljIGNsYXNzIFJvb21QYXJhbWV0ZXJzRmV0Y2hlciB7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBUQUcgPSAiUm9vbVJUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBUVVJOX0hUVFBfVElNRU9VVF9NUyA9IDUwMDA7Ci0gIHByaXZhdGUgZmluYWwgUm9v
bVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcg
cm9vbVVybDsKLSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgcm9vbU1lc3NhZ2U7Ci0gIHByaXZhdGUg
QXN5bmNIdHRwVVJMQ29ubmVjdGlvbiBodHRwQ29ubmVjdGlvbjsKLQotICAvKioKLSAgICogUm9v
bSBwYXJhbWV0ZXJzIGZldGNoZXIgY2FsbGJhY2tzLgotICAgKi8KLSAgcHVibGljIGludGVyZmFj
ZSBSb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHMgewotICAgIC8qKgotICAgICAqIENhbGxiYWNr
IGZpcmVkIG9uY2UgdGhlIHJvb20ncyBzaWduYWxpbmcgcGFyYW1ldGVycwotICAgICAqIFNpZ25h
bGluZ1BhcmFtZXRlcnMgYXJlIGV4dHJhY3RlZC4KLSAgICAgKi8KLSAgICB2b2lkIG9uU2lnbmFs
aW5nUGFyYW1ldGVyc1JlYWR5KGZpbmFsIFNpZ25hbGluZ1BhcmFtZXRlcnMgcGFyYW1zKTsKLQot
ICAgIC8qKgotICAgICAqIENhbGxiYWNrIGZvciByb29tIHBhcmFtZXRlcnMgZXh0cmFjdGlvbiBl
cnJvci4KLSAgICAgKi8KLSAgICB2b2lkIG9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKGZpbmFs
IFN0cmluZyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBwdWJsaWMgUm9vbVBhcmFtZXRlcnNGZXRj
aGVyKAotICAgICAgU3RyaW5nIHJvb21VcmwsIFN0cmluZyByb29tTWVzc2FnZSwgZmluYWwgUm9v
bVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMucm9vbVVybCA9IHJv
b21Vcmw7Ci0gICAgdGhpcy5yb29tTWVzc2FnZSA9IHJvb21NZXNzYWdlOwotICAgIHRoaXMuZXZl
bnRzID0gZXZlbnRzOwotICB9Ci0KLSAgcHVibGljIHZvaWQgbWFrZVJlcXVlc3QoKSB7Ci0gICAg
TG9nLmQoVEFHLCAiQ29ubmVjdGluZyB0byByb29tOiAiICsgcm9vbVVybCk7Ci0gICAgaHR0cENv
bm5lY3Rpb24gPQotICAgICAgICBuZXcgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbigiUE9TVCIsIHJv
b21VcmwsIHJvb21NZXNzYWdlLCBuZXcgQXN5bmNIdHRwRXZlbnRzKCkgewotICAgICAgICAgIEBP
dmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cEVycm9yKFN0cmluZyBlcnJvck1l
c3NhZ2UpIHsKLSAgICAgICAgICAgIExvZy5lKFRBRywgIlJvb20gY29ubmVjdGlvbiBlcnJvcjog
IiArIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgICBldmVudHMub25TaWduYWxpbmdQYXJhbWV0
ZXJzRXJyb3IoZXJyb3JNZXNzYWdlKTsKLSAgICAgICAgICB9Ci0KLSAgICAgICAgICBAT3ZlcnJp
ZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0dHBDb21wbGV0ZShTdHJpbmcgcmVzcG9uc2Up
IHsKLSAgICAgICAgICAgIHJvb21IdHRwUmVzcG9uc2VQYXJzZShyZXNwb25zZSk7Ci0gICAgICAg
ICAgfQotICAgICAgICB9KTsKLSAgICBodHRwQ29ubmVjdGlvbi5zZW5kKCk7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgcm9vbUh0dHBSZXNwb25zZVBhcnNlKFN0cmluZyByZXNwb25zZSkgewotICAg
IExvZy5kKFRBRywgIlJvb20gcmVzcG9uc2U6ICIgKyByZXNwb25zZSk7Ci0gICAgdHJ5IHsKLSAg
ICAgIExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVzID0gbnVsbDsKLSAgICAg
IFNlc3Npb25EZXNjcmlwdGlvbiBvZmZlclNkcCA9IG51bGw7Ci0gICAgICBKU09OT2JqZWN0IHJv
b21Kc29uID0gbmV3IEpTT05PYmplY3QocmVzcG9uc2UpOwotCi0gICAgICBTdHJpbmcgcmVzdWx0
ID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJyZXN1bHQiKTsKLSAgICAgIGlmICghcmVzdWx0LmVxdWFs
cygiU1VDQ0VTUyIpKSB7Ci0gICAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNFcnJv
cigiUm9vbSByZXNwb25zZSBlcnJvcjogIiArIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLSAgICAgIHJlc3BvbnNlID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJwYXJhbXMiKTsKLSAg
ICAgIHJvb21Kc29uID0gbmV3IEpTT05PYmplY3QocmVzcG9uc2UpOwotICAgICAgU3RyaW5nIHJv
b21JZCA9IHJvb21Kc29uLmdldFN0cmluZygicm9vbV9pZCIpOwotICAgICAgU3RyaW5nIGNsaWVu
dElkID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJjbGllbnRfaWQiKTsKLSAgICAgIFN0cmluZyB3c3NV
cmwgPSByb29tSnNvbi5nZXRTdHJpbmcoIndzc191cmwiKTsKLSAgICAgIFN0cmluZyB3c3NQb3N0
VXJsID0gcm9vbUpzb24uZ2V0U3RyaW5nKCJ3c3NfcG9zdF91cmwiKTsKLSAgICAgIGJvb2xlYW4g
aW5pdGlhdG9yID0gKHJvb21Kc29uLmdldEJvb2xlYW4oImlzX2luaXRpYXRvciIpKTsKLSAgICAg
IGlmICghaW5pdGlhdG9yKSB7Ci0gICAgICAgIGljZUNhbmRpZGF0ZXMgPSBuZXcgTGlua2VkTGlz
dDxJY2VDYW5kaWRhdGU+KCk7Ci0gICAgICAgIFN0cmluZyBtZXNzYWdlc1N0cmluZyA9IHJvb21K
c29uLmdldFN0cmluZygibWVzc2FnZXMiKTsKLSAgICAgICAgSlNPTkFycmF5IG1lc3NhZ2VzID0g
bmV3IEpTT05BcnJheShtZXNzYWdlc1N0cmluZyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbWVzc2FnZXMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgIFN0cmluZyBtZXNzYWdlU3Ry
aW5nID0gbWVzc2FnZXMuZ2V0U3RyaW5nKGkpOwotICAgICAgICAgIEpTT05PYmplY3QgbWVzc2Fn
ZSA9IG5ldyBKU09OT2JqZWN0KG1lc3NhZ2VTdHJpbmcpOwotICAgICAgICAgIFN0cmluZyBtZXNz
YWdlVHlwZSA9IG1lc3NhZ2UuZ2V0U3RyaW5nKCJ0eXBlIik7Ci0gICAgICAgICAgTG9nLmQoVEFH
LCAiR0FFLT5DICMiICsgaSArICIgOiAiICsgbWVzc2FnZVN0cmluZyk7Ci0gICAgICAgICAgaWYg
KG1lc3NhZ2VUeXBlLmVxdWFscygib2ZmZXIiKSkgewotICAgICAgICAgICAgb2ZmZXJTZHAgPSBu
ZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlv
bi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKG1lc3NhZ2VUeXBlKSwgbWVzc2FnZS5nZXRTdHJpbmco
InNkcCIpKTsKLSAgICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlLmVxdWFscygiY2FuZGlk
YXRlIikpIHsKLSAgICAgICAgICAgIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUgPSBuZXcgSWNlQ2Fu
ZGlkYXRlKAotICAgICAgICAgICAgICAgIG1lc3NhZ2UuZ2V0U3RyaW5nKCJpZCIpLCBtZXNzYWdl
LmdldEludCgibGFiZWwiKSwgbWVzc2FnZS5nZXRTdHJpbmcoImNhbmRpZGF0ZSIpKTsKLSAgICAg
ICAgICAgIGljZUNhbmRpZGF0ZXMuYWRkKGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIExvZy5lKFRBRywgIlVua25vd24gbWVzc2FnZTogIiArIG1lc3NhZ2VTdHJp
bmcpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfQotICAgICAgTG9nLmQoVEFHLCAi
Um9vbUlkOiAiICsgcm9vbUlkICsgIi4gQ2xpZW50SWQ6ICIgKyBjbGllbnRJZCk7Ci0gICAgICBM
b2cuZChUQUcsICJJbml0aWF0b3I6ICIgKyBpbml0aWF0b3IpOwotICAgICAgTG9nLmQoVEFHLCAi
V1NTIHVybDogIiArIHdzc1VybCk7Ci0gICAgICBMb2cuZChUQUcsICJXU1MgUE9TVCB1cmw6ICIg
KyB3c3NQb3N0VXJsKTsKLQotICAgICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2
ZXI+IGljZVNlcnZlcnMgPQotICAgICAgICAgIGljZVNlcnZlcnNGcm9tUENDb25maWdKU09OKHJv
b21Kc29uLmdldFN0cmluZygicGNfY29uZmlnIikpOwotICAgICAgYm9vbGVhbiBpc1R1cm5QcmVz
ZW50ID0gZmFsc2U7Ci0gICAgICBmb3IgKFBlZXJDb25uZWN0aW9uLkljZVNlcnZlciBzZXJ2ZXIg
OiBpY2VTZXJ2ZXJzKSB7Ci0gICAgICAgIExvZy5kKFRBRywgIkljZVNlcnZlcjogIiArIHNlcnZl
cik7Ci0gICAgICAgIGlmIChzZXJ2ZXIudXJpLnN0YXJ0c1dpdGgoInR1cm46IikpIHsKLSAgICAg
ICAgICBpc1R1cm5QcmVzZW50ID0gdHJ1ZTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgfQotICAgICAgLy8gUmVxdWVzdCBUVVJOIHNlcnZlcnMuCi0gICAgICBpZiAoIWlzVHVy
blByZXNlbnQpIHsKLSAgICAgICAgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXI+
IHR1cm5TZXJ2ZXJzID0KLSAgICAgICAgICAgIHJlcXVlc3RUdXJuU2VydmVycyhyb29tSnNvbi5n
ZXRTdHJpbmcoImljZV9zZXJ2ZXJfdXJsIikpOwotICAgICAgICBmb3IgKFBlZXJDb25uZWN0aW9u
LkljZVNlcnZlciB0dXJuU2VydmVyIDogdHVyblNlcnZlcnMpIHsKLSAgICAgICAgICBMb2cuZChU
QUcsICJUdXJuU2VydmVyOiAiICsgdHVyblNlcnZlcik7Ci0gICAgICAgICAgaWNlU2VydmVycy5h
ZGQodHVyblNlcnZlcik7Ci0gICAgICAgIH0KLSAgICAgIH0KLQotICAgICAgU2lnbmFsaW5nUGFy
YW1ldGVycyBwYXJhbXMgPSBuZXcgU2lnbmFsaW5nUGFyYW1ldGVycygKLSAgICAgICAgICBpY2VT
ZXJ2ZXJzLCBpbml0aWF0b3IsIGNsaWVudElkLCB3c3NVcmwsIHdzc1Bvc3RVcmwsIG9mZmVyU2Rw
LCBpY2VDYW5kaWRhdGVzKTsKLSAgICAgIGV2ZW50cy5vblNpZ25hbGluZ1BhcmFtZXRlcnNSZWFk
eShwYXJhbXMpOwotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgZXZlbnRz
Lm9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKCJSb29tIEpTT04gcGFyc2luZyBlcnJvcjogIiAr
IGUudG9TdHJpbmcoKSk7Ci0gICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgZXZl
bnRzLm9uU2lnbmFsaW5nUGFyYW1ldGVyc0Vycm9yKCJSb29tIElPIGVycm9yOiAiICsgZS50b1N0
cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXF1ZXN0cyAmIHJldHVybnMgYSBUVVJOIElD
RSBTZXJ2ZXIgYmFzZWQgb24gYSByZXF1ZXN0IFVSTC4gIE11c3QgYmUgcnVuCi0gIC8vIG9mZiB0
aGUgbWFpbiB0aHJlYWQhCi0gIHByaXZhdGUgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXI+IHJlcXVlc3RUdXJuU2VydmVycyhTdHJpbmcgdXJsKQotICAgICAgdGhyb3dzIElPRXhj
ZXB0aW9uLCBKU09ORXhjZXB0aW9uIHsKLSAgICBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLklj
ZVNlcnZlcj4gdHVyblNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXI+KCk7Ci0gICAgTG9nLmQoVEFHLCAiUmVxdWVzdCBUVVJOIGZyb206ICIgKyB1cmwpOwot
ICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSAoSHR0cFVSTENvbm5lY3Rpb24pIG5l
dyBVUkwodXJsKS5vcGVuQ29ubmVjdGlvbigpOwotICAgIGNvbm5lY3Rpb24uc2V0RG9PdXRwdXQo
dHJ1ZSk7Ci0gICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIlJFRkVSRVIiLCAiaHR0
cHM6Ly9hcHByLnRjIik7Ci0gICAgY29ubmVjdGlvbi5zZXRDb25uZWN0VGltZW91dChUVVJOX0hU
VFBfVElNRU9VVF9NUyk7Ci0gICAgY29ubmVjdGlvbi5zZXRSZWFkVGltZW91dChUVVJOX0hUVFBf
VElNRU9VVF9NUyk7Ci0gICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24uZ2V0UmVzcG9u
c2VDb2RlKCk7Ci0gICAgaWYgKHJlc3BvbnNlQ29kZSAhPSAyMDApIHsKLSAgICAgIHRocm93IG5l
dyBJT0V4Y2VwdGlvbigiTm9uLTIwMCByZXNwb25zZSB3aGVuIHJlcXVlc3RpbmcgVFVSTiBzZXJ2
ZXIgZnJvbSAiICsgdXJsICsgIiA6ICIKLSAgICAgICAgICArIGNvbm5lY3Rpb24uZ2V0SGVhZGVy
RmllbGQobnVsbCkpOwotICAgIH0KLSAgICBJbnB1dFN0cmVhbSByZXNwb25zZVN0cmVhbSA9IGNv
bm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICBTdHJpbmcgcmVzcG9uc2UgPSBkcmFpblN0
cmVhbShyZXNwb25zZVN0cmVhbSk7Ci0gICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7Ci0gICAg
TG9nLmQoVEFHLCAiVFVSTiByZXNwb25zZTogIiArIHJlc3BvbnNlKTsKLSAgICBKU09OT2JqZWN0
IHJlc3BvbnNlSlNPTiA9IG5ldyBKU09OT2JqZWN0KHJlc3BvbnNlKTsKLSAgICBKU09OQXJyYXkg
aWNlU2VydmVycyA9IHJlc3BvbnNlSlNPTi5nZXRKU09OQXJyYXkoImljZVNlcnZlcnMiKTsKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGljZVNlcnZlcnMubGVuZ3RoKCk7ICsraSkgewotICAgICAg
SlNPTk9iamVjdCBzZXJ2ZXIgPSBpY2VTZXJ2ZXJzLmdldEpTT05PYmplY3QoaSk7Ci0gICAgICBK
U09OQXJyYXkgdHVyblVybHMgPSBzZXJ2ZXIuZ2V0SlNPTkFycmF5KCJ1cmxzIik7Ci0gICAgICBT
dHJpbmcgdXNlcm5hbWUgPSBzZXJ2ZXIuaGFzKCJ1c2VybmFtZSIpID8gc2VydmVyLmdldFN0cmlu
ZygidXNlcm5hbWUiKSA6ICIiOwotICAgICAgU3RyaW5nIGNyZWRlbnRpYWwgPSBzZXJ2ZXIuaGFz
KCJjcmVkZW50aWFsIikgPyBzZXJ2ZXIuZ2V0U3RyaW5nKCJjcmVkZW50aWFsIikgOiAiIjsKLSAg
ICAgIGZvciAoaW50IGogPSAwOyBqIDwgdHVyblVybHMubGVuZ3RoKCk7IGorKykgewotICAgICAg
ICBTdHJpbmcgdHVyblVybCA9IHR1cm5VcmxzLmdldFN0cmluZyhqKTsKLSAgICAgICAgdHVyblNl
cnZlcnMuYWRkKG5ldyBQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2ZXIodHVyblVybCwgdXNlcm5hbWUs
IGNyZWRlbnRpYWwpKTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHR1cm5TZXJ2ZXJzOwot
ICB9Ci0KLSAgLy8gUmV0dXJuIHRoZSBsaXN0IG9mIElDRSBzZXJ2ZXJzIGRlc2NyaWJlZCBieSBh
IFdlYlJUQ1BlZXJDb25uZWN0aW9uCi0gIC8vIGNvbmZpZ3VyYXRpb24gc3RyaW5nLgotICBwcml2
YXRlIExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzRnJvbVBD
Q29uZmlnSlNPTihTdHJpbmcgcGNDb25maWcpCi0gICAgICB0aHJvd3MgSlNPTkV4Y2VwdGlvbiB7
Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QocGNDb25maWcpOwotICAgIEpT
T05BcnJheSBzZXJ2ZXJzID0ganNvbi5nZXRKU09OQXJyYXkoImljZVNlcnZlcnMiKTsKLSAgICBM
aW5rZWRMaXN0PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gcmV0ID0gbmV3IExpbmtlZExpc3Q8
UGVlckNvbm5lY3Rpb24uSWNlU2VydmVyPigpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2Vy
dmVycy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICBKU09OT2JqZWN0IHNlcnZlciA9IHNlcnZlcnMu
Z2V0SlNPTk9iamVjdChpKTsKLSAgICAgIFN0cmluZyB1cmwgPSBzZXJ2ZXIuZ2V0U3RyaW5nKCJ1
cmxzIik7Ci0gICAgICBTdHJpbmcgY3JlZGVudGlhbCA9IHNlcnZlci5oYXMoImNyZWRlbnRpYWwi
KSA/IHNlcnZlci5nZXRTdHJpbmcoImNyZWRlbnRpYWwiKSA6ICIiOwotICAgICAgcmV0LmFkZChu
ZXcgUGVlckNvbm5lY3Rpb24uSWNlU2VydmVyKHVybCwgIiIsIGNyZWRlbnRpYWwpKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHJldDsKLSAgfQotCi0gIC8vIFJldHVybiB0aGUgY29udGVudHMgb2YgYW4g
SW5wdXRTdHJlYW0gYXMgYSBTdHJpbmcuCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBkcmFpblN0
cmVhbShJbnB1dFN0cmVhbSBpbikgewotICAgIFNjYW5uZXIgcyA9IG5ldyBTY2FubmVyKGluKS51
c2VEZWxpbWl0ZXIoIlxcQSIpOwotICAgIHJldHVybiBzLmhhc05leHQoKSA/IHMubmV4dCgpIDog
IiI7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9TZXR0aW5nc0Fj
dGl2aXR5LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1Nl
dHRpbmdzQWN0aXZpdHkuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL1NldHRpbmdzQWN0aXZpdHkuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI2
NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0
YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuY29udGVu
dC5TaGFyZWRQcmVmZXJlbmNlczsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuU2hhcmVkUHJlZmVy
ZW5jZXMuT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgYW5kcm9pZC5v
cy5CdW5kbGU7Ci1pbXBvcnQgYW5kcm9pZC5wcmVmZXJlbmNlLkxpc3RQcmVmZXJlbmNlOwotaW1w
b3J0IGFuZHJvaWQucHJlZmVyZW5jZS5QcmVmZXJlbmNlOwotaW1wb3J0IG9yZy53ZWJydGMuQ2Ft
ZXJhMkVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy52b2ljZWVuZ2luZS5XZWJSdGNBdWRp
b1V0aWxzOwotCi0vKioKLSAqIFNldHRpbmdzIGFjdGl2aXR5IGZvciBBcHBSVEMuCi0gKi8KLXB1
YmxpYyBjbGFzcyBTZXR0aW5nc0FjdGl2aXR5IGV4dGVuZHMgQWN0aXZpdHkgaW1wbGVtZW50cyBP
blNoYXJlZFByZWZlcmVuY2VDaGFuZ2VMaXN0ZW5lciB7Ci0gIHByaXZhdGUgU2V0dGluZ3NGcmFn
bWVudCBzZXR0aW5nc0ZyYWdtZW50OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmVmlkZW9DYWxs
OwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmU2NyZWVuY2FwdHVyZTsKLSAgcHJpdmF0ZSBTdHJp
bmcga2V5cHJlZkNhbWVyYTI7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZSZXNvbHV0aW9uOwot
ICBwcml2YXRlIFN0cmluZyBrZXlwcmVmRnBzOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmQ2Fw
dHVyZVF1YWxpdHlTbGlkZXI7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZNYXhWaWRlb0JpdHJh
dGVUeXBlOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVmFsdWU7Ci0g
IHByaXZhdGUgU3RyaW5nIGtleVByZWZWaWRlb0NvZGVjOwotICBwcml2YXRlIFN0cmluZyBrZXlw
cmVmSHdDb2RlYzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkNhcHR1cmVUb1RleHR1cmU7Ci0K
LSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVHlwZTsKLSAgcHJpdmF0
ZSBTdHJpbmcga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVmFsdWU7Ci0gIHByaXZhdGUgU3RyaW5n
IGtleVByZWZBdWRpb0NvZGVjOwotICBwcml2YXRlIFN0cmluZyBrZXlwcmVmTm9BdWRpb1Byb2Nl
c3Npbmc7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZBZWNEdW1wOwotICBwcml2YXRlIFN0cmlu
ZyBrZXlwcmVmT3BlblNMRVM7Ci0gIHByaXZhdGUgU3RyaW5nIGtleXByZWZEaXNhYmxlQnVpbHRJ
bkFFQzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZkRpc2FibGVCdWlsdEluQUdDOwotICBwcml2
YXRlIFN0cmluZyBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5OUzsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5
cHJlZkVuYWJsZUxldmVsQ29udHJvbDsKLSAgcHJpdmF0ZSBTdHJpbmcga2V5cHJlZlNwZWFrZXJw
aG9uZTsKLQotICBwcml2YXRlIFN0cmluZyBrZXlQcmVmUm9vbVNlcnZlclVybDsKLSAgcHJpdmF0
ZSBTdHJpbmcga2V5UHJlZkRpc3BsYXlIdWQ7Ci0gIHByaXZhdGUgU3RyaW5nIGtleVByZWZUcmFj
aW5nOwotCi0gIEBPdmVycmlkZQotICBwcm90ZWN0ZWQgdm9pZCBvbkNyZWF0ZShCdW5kbGUgc2F2
ZWRJbnN0YW5jZVN0YXRlKSB7Ci0gICAgc3VwZXIub25DcmVhdGUoc2F2ZWRJbnN0YW5jZVN0YXRl
KTsKLSAgICBrZXlwcmVmVmlkZW9DYWxsID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmlkZW9j
YWxsX2tleSk7Ci0gICAga2V5cHJlZlNjcmVlbmNhcHR1cmUgPSBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9zY3JlZW5jYXB0dXJlX2tleSk7Ci0gICAga2V5cHJlZkNhbWVyYTIgPSBnZXRTdHJpbmco
Ui5zdHJpbmcucHJlZl9jYW1lcmEyX2tleSk7Ci0gICAga2V5cHJlZlJlc29sdXRpb24gPSBnZXRT
dHJpbmcoUi5zdHJpbmcucHJlZl9yZXNvbHV0aW9uX2tleSk7Ci0gICAga2V5cHJlZkZwcyA9IGdl
dFN0cmluZyhSLnN0cmluZy5wcmVmX2Zwc19rZXkpOwotICAgIGtleXByZWZDYXB0dXJlUXVhbGl0
eVNsaWRlciA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhcHR1cmVxdWFsaXR5c2xpZGVyX2tl
eSk7Ci0gICAga2V5cHJlZk1heFZpZGVvQml0cmF0ZVR5cGUgPSBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9tYXh2aWRlb2JpdHJhdGVfa2V5KTsKLSAgICBrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVmFs
dWUgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9tYXh2aWRlb2JpdHJhdGV2YWx1ZV9rZXkpOwot
ICAgIGtleVByZWZWaWRlb0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdmlkZW9jb2Rl
Y19rZXkpOwotICAgIGtleXByZWZId0NvZGVjID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfaHdj
b2RlY19rZXkpOwotICAgIGtleXByZWZDYXB0dXJlVG9UZXh0dXJlID0gZ2V0U3RyaW5nKFIuc3Ry
aW5nLnByZWZfY2FwdHVyZXRvdGV4dHVyZV9rZXkpOwotCi0gICAga2V5cHJlZlN0YXJ0QXVkaW9C
aXRyYXRlVHlwZSA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRlX2tl
eSk7Ci0gICAga2V5cHJlZlN0YXJ0QXVkaW9CaXRyYXRlVmFsdWUgPSBnZXRTdHJpbmcoUi5zdHJp
bmcucHJlZl9zdGFydGF1ZGlvYml0cmF0ZXZhbHVlX2tleSk7Ci0gICAga2V5UHJlZkF1ZGlvQ29k
ZWMgPSBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl9hdWRpb2NvZGVjX2tleSk7Ci0gICAga2V5cHJl
Zk5vQXVkaW9Qcm9jZXNzaW5nID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbm9hdWRpb3Byb2Nl
c3Npbmdfa2V5KTsKLSAgICBrZXlwcmVmQWVjRHVtcCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVm
X2FlY2R1bXBfa2V5KTsKLSAgICBrZXlwcmVmT3BlblNMRVMgPSBnZXRTdHJpbmcoUi5zdHJpbmcu
cHJlZl9vcGVuc2xlc19rZXkpOwotICAgIGtleXByZWZEaXNhYmxlQnVpbHRJbkFFQyA9IGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fYWVjX2tleSk7Ci0gICAga2V5cHJl
ZkRpc2FibGVCdWlsdEluQUdDID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzYWJsZV9idWls
dF9pbl9hZ2Nfa2V5KTsKLSAgICBrZXlwcmVmRGlzYWJsZUJ1aWx0SW5OUyA9IGdldFN0cmluZyhS
LnN0cmluZy5wcmVmX2Rpc2FibGVfYnVpbHRfaW5fbnNfa2V5KTsKLSAgICBrZXlwcmVmRW5hYmxl
TGV2ZWxDb250cm9sID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZW5hYmxlX2xldmVsX2NvbnRy
b2xfa2V5KTsKLSAgICBrZXlwcmVmU3BlYWtlcnBob25lID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnBy
ZWZfc3BlYWtlcnBob25lX2tleSk7Ci0KLSAgICBrZXlQcmVmUm9vbVNlcnZlclVybCA9IGdldFN0
cmluZyhSLnN0cmluZy5wcmVmX3Jvb21fc2VydmVyX3VybF9rZXkpOwotICAgIGtleVByZWZEaXNw
bGF5SHVkID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfZGlzcGxheWh1ZF9rZXkpOwotICAgIGtl
eVByZWZUcmFjaW5nID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfdHJhY2luZ19rZXkpOwotCi0g
ICAgLy8gRGlzcGxheSB0aGUgZnJhZ21lbnQgYXMgdGhlIG1haW4gY29udGVudC4KLSAgICBzZXR0
aW5nc0ZyYWdtZW50ID0gbmV3IFNldHRpbmdzRnJhZ21lbnQoKTsKLSAgICBnZXRGcmFnbWVudE1h
bmFnZXIoKQotICAgICAgICAuYmVnaW5UcmFuc2FjdGlvbigpCi0gICAgICAgIC5yZXBsYWNlKGFu
ZHJvaWQuUi5pZC5jb250ZW50LCBzZXR0aW5nc0ZyYWdtZW50KQotICAgICAgICAuY29tbWl0KCk7
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHJvdGVjdGVkIHZvaWQgb25SZXN1bWUoKSB7Ci0gICAg
c3VwZXIub25SZXN1bWUoKTsKLSAgICAvLyBTZXQgc3VtbWFyeSB0byBiZSB0aGUgdXNlci1kZXNj
cmlwdGlvbiBmb3IgdGhlIHNlbGVjdGVkIHZhbHVlCi0gICAgU2hhcmVkUHJlZmVyZW5jZXMgc2hh
cmVkUHJlZmVyZW5jZXMgPQotICAgICAgICBzZXR0aW5nc0ZyYWdtZW50LmdldFByZWZlcmVuY2VT
Y3JlZW4oKS5nZXRTaGFyZWRQcmVmZXJlbmNlcygpOwotICAgIHNoYXJlZFByZWZlcmVuY2VzLnJl
Z2lzdGVyT25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0gICAgdXBkYXRl
U3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZWaWRlb0NhbGwpOwotICAgIHVwZGF0
ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmU2NyZWVuY2FwdHVyZSk7Ci0gICAg
dXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZDYW1lcmEyKTsKLSAgICB1
cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmUmVzb2x1dGlvbik7Ci0gICAg
dXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkZwcyk7Ci0gICAgdXBkYXRl
U3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZDYXB0dXJlUXVhbGl0eVNsaWRlcik7
Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZk1heFZpZGVvQml0
cmF0ZVR5cGUpOwotICAgIHVwZGF0ZVN1bW1hcnlCaXRyYXRlKHNoYXJlZFByZWZlcmVuY2VzLCBr
ZXlwcmVmTWF4VmlkZW9CaXRyYXRlVmFsdWUpOwotICAgIHNldFZpZGVvQml0cmF0ZUVuYWJsZShz
aGFyZWRQcmVmZXJlbmNlcyk7Ci0gICAgdXBkYXRlU3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcywg
a2V5UHJlZlZpZGVvQ29kZWMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFByZWZlcmVuY2Vz
LCBrZXlwcmVmSHdDb2RlYyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMs
IGtleXByZWZDYXB0dXJlVG9UZXh0dXJlKTsKLQotICAgIHVwZGF0ZVN1bW1hcnkoc2hhcmVkUHJl
ZmVyZW5jZXMsIGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGUpOwotICAgIHVwZGF0ZVN1bW1h
cnlCaXRyYXRlKHNoYXJlZFByZWZlcmVuY2VzLCBrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1
ZSk7Ci0gICAgc2V0QXVkaW9CaXRyYXRlRW5hYmxlKHNoYXJlZFByZWZlcmVuY2VzKTsKLSAgICB1
cGRhdGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmQXVkaW9Db2RlYyk7Ci0gICAg
dXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZOb0F1ZGlvUHJvY2Vzc2lu
Zyk7Ci0gICAgdXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleXByZWZBZWNEdW1w
KTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZk9wZW5TTEVT
KTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZkRpc2FibGVC
dWlsdEluQUVDKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJl
ZkRpc2FibGVCdWlsdEluQUdDKTsKLSAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNl
cywga2V5cHJlZkRpc2FibGVCdWlsdEluTlMpOwotICAgIHVwZGF0ZVN1bW1hcnlCKHNoYXJlZFBy
ZWZlcmVuY2VzLCBrZXlwcmVmRW5hYmxlTGV2ZWxDb250cm9sKTsKLSAgICB1cGRhdGVTdW1tYXJ5
TGlzdChzaGFyZWRQcmVmZXJlbmNlcywga2V5cHJlZlNwZWFrZXJwaG9uZSk7Ci0KLSAgICB1cGRh
dGVTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLCBrZXlQcmVmUm9vbVNlcnZlclVybCk7Ci0gICAg
dXBkYXRlU3VtbWFyeUIoc2hhcmVkUHJlZmVyZW5jZXMsIGtleVByZWZEaXNwbGF5SHVkKTsKLSAg
ICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5UHJlZlRyYWNpbmcpOwotCi0g
ICAgaWYgKCFDYW1lcmEyRW51bWVyYXRvci5pc1N1cHBvcnRlZCh0aGlzKSkgewotICAgICAgUHJl
ZmVyZW5jZSBjYW1lcmEyUHJlZmVyZW5jZSA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVu
Y2Uoa2V5cHJlZkNhbWVyYTIpOwotCi0gICAgICBjYW1lcmEyUHJlZmVyZW5jZS5zZXRTdW1tYXJ5
KGdldFN0cmluZyhSLnN0cmluZy5wcmVmX2NhbWVyYTJfbm90X3N1cHBvcnRlZCkpOwotICAgICAg
Y2FtZXJhMlByZWZlcmVuY2Uuc2V0RW5hYmxlZChmYWxzZSk7Ci0gICAgfQotCi0gICAgLy8gRGlz
YWJsZSBmb3JjaW5nIFdlYlJUQyBiYXNlZCBBRUMgc28gaXQgd29uJ3QgYWZmZWN0IG91ciB2YWx1
ZS4KLSAgICAvLyBPdGhlcndpc2UsIGlmIGl0IHdhcyBlbmFibGVkLCBpc0Fjb3VzdGljRWNob0Nh
bmNlbGVyU3VwcG9ydGVkIHdvdWxkIGFsd2F5cyByZXR1cm4gZmFsc2UuCi0gICAgV2ViUnRjQXVk
aW9VdGlscy5zZXRXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKGZhbHNlKTsKLSAgICBp
ZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMuaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpKSB7
Ci0gICAgICBQcmVmZXJlbmNlIGRpc2FibGVCdWlsdEluQUVDUHJlZmVyZW5jZSA9Ci0gICAgICAg
ICAgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlwcmVmRGlzYWJsZUJ1aWx0SW5B
RUMpOwotCi0gICAgICBkaXNhYmxlQnVpbHRJbkFFQ1ByZWZlcmVuY2Uuc2V0U3VtbWFyeShnZXRT
dHJpbmcoUi5zdHJpbmcucHJlZl9idWlsdF9pbl9hZWNfbm90X2F2YWlsYWJsZSkpOwotICAgICAg
ZGlzYWJsZUJ1aWx0SW5BRUNQcmVmZXJlbmNlLnNldEVuYWJsZWQoZmFsc2UpOwotICAgIH0KLQot
ICAgIFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJvbChm
YWxzZSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLmlzQXV0b21hdGljR2FpbkNvbnRyb2xT
dXBwb3J0ZWQoKSkgewotICAgICAgUHJlZmVyZW5jZSBkaXNhYmxlQnVpbHRJbkFHQ1ByZWZlcmVu
Y2UgPQotICAgICAgICAgIHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZkRp
c2FibGVCdWlsdEluQUdDKTsKLQotICAgICAgZGlzYWJsZUJ1aWx0SW5BR0NQcmVmZXJlbmNlLnNl
dFN1bW1hcnkoZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYnVpbHRfaW5fYWdjX25vdF9hdmFpbGFi
bGUpKTsKLSAgICAgIGRpc2FibGVCdWlsdEluQUdDUHJlZmVyZW5jZS5zZXRFbmFibGVkKGZhbHNl
KTsKLSAgICB9Ci0KLSAgICBXZWJSdGNBdWRpb1V0aWxzLnNldFdlYlJ0Y0Jhc2VkTm9pc2VTdXBw
cmVzc29yKGZhbHNlKTsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMuaXNOb2lzZVN1cHByZXNz
b3JTdXBwb3J0ZWQoKSkgewotICAgICAgUHJlZmVyZW5jZSBkaXNhYmxlQnVpbHRJbk5TUHJlZmVy
ZW5jZSA9Ci0gICAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJlZmVyZW5jZShrZXlwcmVm
RGlzYWJsZUJ1aWx0SW5OUyk7Ci0KLSAgICAgIGRpc2FibGVCdWlsdEluTlNQcmVmZXJlbmNlLnNl
dFN1bW1hcnkoZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfYnVpbHRfaW5fbnNfbm90X2F2YWlsYWJs
ZSkpOwotICAgICAgZGlzYWJsZUJ1aWx0SW5OU1ByZWZlcmVuY2Uuc2V0RW5hYmxlZChmYWxzZSk7
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHByb3RlY3RlZCB2b2lkIG9uUGF1c2UoKSB7
Ci0gICAgc3VwZXIub25QYXVzZSgpOwotICAgIFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZl
cmVuY2VzID0KLSAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5nZXRQcmVmZXJlbmNlU2NyZWVuKCku
Z2V0U2hhcmVkUHJlZmVyZW5jZXMoKTsKLSAgICBzaGFyZWRQcmVmZXJlbmNlcy51bnJlZ2lzdGVy
T25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0gIH0KLQotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgb25TaGFyZWRQcmVmZXJlbmNlQ2hhbmdlZChTaGFyZWRQcmVmZXJl
bmNlcyBzaGFyZWRQcmVmZXJlbmNlcywgU3RyaW5nIGtleSkgewotICAgIC8vIGNsYW5nLWZvcm1h
dCBvZmYKLSAgICBpZiAoa2V5LmVxdWFscyhrZXlwcmVmUmVzb2x1dGlvbikKLSAgICAgICAgfHwg
a2V5LmVxdWFscyhrZXlwcmVmRnBzKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZNYXhW
aWRlb0JpdHJhdGVUeXBlKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleVByZWZWaWRlb0NvZGVj
KQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGUpCi0g
ICAgICAgIHx8IGtleS5lcXVhbHMoa2V5UHJlZkF1ZGlvQ29kZWMpCi0gICAgICAgIHx8IGtleS5l
cXVhbHMoa2V5UHJlZlJvb21TZXJ2ZXJVcmwpKSB7Ci0gICAgICB1cGRhdGVTdW1tYXJ5KHNoYXJl
ZFByZWZlcmVuY2VzLCBrZXkpOwotICAgIH0gZWxzZSBpZiAoa2V5LmVxdWFscyhrZXlwcmVmTWF4
VmlkZW9CaXRyYXRlVmFsdWUpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZlN0YXJ0QXVk
aW9CaXRyYXRlVmFsdWUpKSB7Ci0gICAgICB1cGRhdGVTdW1tYXJ5Qml0cmF0ZShzaGFyZWRQcmVm
ZXJlbmNlcywga2V5KTsKLSAgICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoa2V5cHJlZlZpZGVvQ2Fs
bCkKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmU2NyZWVuY2FwdHVyZSkKLSAgICAgICAg
fHwga2V5LmVxdWFscyhrZXlwcmVmQ2FtZXJhMikKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlQ
cmVmVHJhY2luZykKLSAgICAgICAgfHwga2V5LmVxdWFscyhrZXlwcmVmQ2FwdHVyZVF1YWxpdHlT
bGlkZXIpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5cHJlZkh3Q29kZWMpCi0gICAgICAgIHx8
IGtleS5lcXVhbHMoa2V5cHJlZkNhcHR1cmVUb1RleHR1cmUpCi0gICAgICAgIHx8IGtleS5lcXVh
bHMoa2V5cHJlZk5vQXVkaW9Qcm9jZXNzaW5nKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXBy
ZWZBZWNEdW1wKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZPcGVuU0xFUykKLSAgICAg
ICAgfHwga2V5LmVxdWFscyhrZXlwcmVmRGlzYWJsZUJ1aWx0SW5BRUMpCi0gICAgICAgIHx8IGtl
eS5lcXVhbHMoa2V5cHJlZkRpc2FibGVCdWlsdEluQUdDKQotICAgICAgICB8fCBrZXkuZXF1YWxz
KGtleXByZWZEaXNhYmxlQnVpbHRJbk5TKQotICAgICAgICB8fCBrZXkuZXF1YWxzKGtleXByZWZF
bmFibGVMZXZlbENvbnRyb2wpCi0gICAgICAgIHx8IGtleS5lcXVhbHMoa2V5UHJlZkRpc3BsYXlI
dWQpKSB7Ci0gICAgICB1cGRhdGVTdW1tYXJ5QihzaGFyZWRQcmVmZXJlbmNlcywga2V5KTsKLSAg
ICB9IGVsc2UgaWYgKGtleS5lcXVhbHMoa2V5cHJlZlNwZWFrZXJwaG9uZSkpIHsKLSAgICAgIHVw
ZGF0ZVN1bW1hcnlMaXN0KHNoYXJlZFByZWZlcmVuY2VzLCBrZXkpOwotICAgIH0KLSAgICAvLyBj
bGFuZy1mb3JtYXQgb24KLSAgICBpZiAoa2V5LmVxdWFscyhrZXlwcmVmTWF4VmlkZW9CaXRyYXRl
VHlwZSkpIHsKLSAgICAgIHNldFZpZGVvQml0cmF0ZUVuYWJsZShzaGFyZWRQcmVmZXJlbmNlcyk7
Ci0gICAgfQotICAgIGlmIChrZXkuZXF1YWxzKGtleXByZWZTdGFydEF1ZGlvQml0cmF0ZVR5cGUp
KSB7Ci0gICAgICBzZXRBdWRpb0JpdHJhdGVFbmFibGUoc2hhcmVkUHJlZmVyZW5jZXMpOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgdm9pZCB1cGRhdGVTdW1tYXJ5KFNoYXJlZFByZWZlcmVuY2Vz
IHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0gICAgUHJlZmVyZW5jZSB1cGRhdGVk
UHJlZiA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5KTsKLSAgICAvLyBTZXQg
c3VtbWFyeSB0byBiZSB0aGUgdXNlci1kZXNjcmlwdGlvbiBmb3IgdGhlIHNlbGVjdGVkIHZhbHVl
Ci0gICAgdXBkYXRlZFByZWYuc2V0U3VtbWFyeShzaGFyZWRQcmVmZXJlbmNlcy5nZXRTdHJpbmco
a2V5LCAiIikpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1bW1hcnlCaXRyYXRlKFNo
YXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0gICAgUHJl
ZmVyZW5jZSB1cGRhdGVkUHJlZiA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVuY2Uoa2V5
KTsKLSAgICB1cGRhdGVkUHJlZi5zZXRTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLmdldFN0cmlu
ZyhrZXksICIiKSArICIga2JwcyIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1bW1h
cnlCKFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0g
ICAgUHJlZmVyZW5jZSB1cGRhdGVkUHJlZiA9IHNldHRpbmdzRnJhZ21lbnQuZmluZFByZWZlcmVu
Y2Uoa2V5KTsKLSAgICB1cGRhdGVkUHJlZi5zZXRTdW1tYXJ5KHNoYXJlZFByZWZlcmVuY2VzLmdl
dEJvb2xlYW4oa2V5LCB0cnVlKQotICAgICAgICAgICAgPyBnZXRTdHJpbmcoUi5zdHJpbmcucHJl
Zl92YWx1ZV9lbmFibGVkKQotICAgICAgICAgICAgOiBnZXRTdHJpbmcoUi5zdHJpbmcucHJlZl92
YWx1ZV9kaXNhYmxlZCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHVwZGF0ZVN1bW1hcnlMaXN0
KFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzLCBTdHJpbmcga2V5KSB7Ci0gICAg
TGlzdFByZWZlcmVuY2UgdXBkYXRlZFByZWYgPSAoTGlzdFByZWZlcmVuY2UpIHNldHRpbmdzRnJh
Z21lbnQuZmluZFByZWZlcmVuY2Uoa2V5KTsKLSAgICB1cGRhdGVkUHJlZi5zZXRTdW1tYXJ5KHVw
ZGF0ZWRQcmVmLmdldEVudHJ5KCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFZpZGVvQml0
cmF0ZUVuYWJsZShTaGFyZWRQcmVmZXJlbmNlcyBzaGFyZWRQcmVmZXJlbmNlcykgewotICAgIFBy
ZWZlcmVuY2UgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZSA9Ci0gICAgICAgIHNldHRpbmdzRnJhZ21l
bnQuZmluZFByZWZlcmVuY2Uoa2V5cHJlZk1heFZpZGVvQml0cmF0ZVZhbHVlKTsKLSAgICBTdHJp
bmcgYml0cmF0ZVR5cGVEZWZhdWx0ID0gZ2V0U3RyaW5nKFIuc3RyaW5nLnByZWZfbWF4dmlkZW9i
aXRyYXRlX2RlZmF1bHQpOwotICAgIFN0cmluZyBiaXRyYXRlVHlwZSA9Ci0gICAgICAgIHNoYXJl
ZFByZWZlcmVuY2VzLmdldFN0cmluZyhrZXlwcmVmTWF4VmlkZW9CaXRyYXRlVHlwZSwgYml0cmF0
ZVR5cGVEZWZhdWx0KTsKLSAgICBpZiAoYml0cmF0ZVR5cGUuZXF1YWxzKGJpdHJhdGVUeXBlRGVm
YXVsdCkpIHsKLSAgICAgIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5hYmxlZChmYWxzZSk7
Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJpdHJhdGVQcmVmZXJlbmNlVmFsdWUuc2V0RW5hYmxlZCh0
cnVlKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0QXVkaW9CaXRyYXRlRW5hYmxl
KFNoYXJlZFByZWZlcmVuY2VzIHNoYXJlZFByZWZlcmVuY2VzKSB7Ci0gICAgUHJlZmVyZW5jZSBi
aXRyYXRlUHJlZmVyZW5jZVZhbHVlID0KLSAgICAgICAgc2V0dGluZ3NGcmFnbWVudC5maW5kUHJl
ZmVyZW5jZShrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVWYWx1ZSk7Ci0gICAgU3RyaW5nIGJpdHJh
dGVUeXBlRGVmYXVsdCA9IGdldFN0cmluZyhSLnN0cmluZy5wcmVmX3N0YXJ0YXVkaW9iaXRyYXRl
X2RlZmF1bHQpOwotICAgIFN0cmluZyBiaXRyYXRlVHlwZSA9Ci0gICAgICAgIHNoYXJlZFByZWZl
cmVuY2VzLmdldFN0cmluZyhrZXlwcmVmU3RhcnRBdWRpb0JpdHJhdGVUeXBlLCBiaXRyYXRlVHlw
ZURlZmF1bHQpOwotICAgIGlmIChiaXRyYXRlVHlwZS5lcXVhbHMoYml0cmF0ZVR5cGVEZWZhdWx0
KSkgewotICAgICAgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZS5zZXRFbmFibGVkKGZhbHNlKTsKLSAg
ICB9IGVsc2UgewotICAgICAgYml0cmF0ZVByZWZlcmVuY2VWYWx1ZS5zZXRFbmFibGVkKHRydWUp
OwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1NldHRp
bmdzRnJhZ21lbnQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvU2V0dGluZ3NGcmFnbWVudC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvU2V0dGluZ3NGcmFnbWVudC5qYXZhCShub25leGlzdGVudCkKQEAg
LTEsMjYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3Qg
QXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5h
cHBydGM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkJ1bmRsZTsKLWltcG9ydCBhbmRyb2lkLnByZWZl
cmVuY2UuUHJlZmVyZW5jZUZyYWdtZW50OwotCi0vKioKLSAqIFNldHRpbmdzIGZyYWdtZW50IGZv
ciBBcHBSVEMuCi0gKi8KLXB1YmxpYyBjbGFzcyBTZXR0aW5nc0ZyYWdtZW50IGV4dGVuZHMgUHJl
ZmVyZW5jZUZyYWdtZW50IHsKLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uQ3JlYXRlKEJ1
bmRsZSBzYXZlZEluc3RhbmNlU3RhdGUpIHsKLSAgICBzdXBlci5vbkNyZWF0ZShzYXZlZEluc3Rh
bmNlU3RhdGUpOwotICAgIC8vIExvYWQgdGhlIHByZWZlcmVuY2VzIGZyb20gYW4gWE1MIHJlc291
cmNlCi0gICAgYWRkUHJlZmVyZW5jZXNGcm9tUmVzb3VyY2UoUi54bWwucHJlZmVyZW5jZXMpOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENsaWVu
dC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFu
bmVsQ2xpZW50LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNTQgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGM7Ci0K
LWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5UaHJlYWRVdGls
czsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEu
aW8uUHJpbnRXcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7Ci1pbXBvcnQgamF2
YS5uZXQuU2VydmVyU29ja2V0OwotaW1wb3J0IGphdmEubmV0LlNvY2tldDsKLWltcG9ydCBqYXZh
Lm5ldC5Vbmtub3duSG9zdEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5F
eGVjdXRvclNlcnZpY2U7Ci0KLS8qKgotICogUmVwbGFjZW1lbnQgZm9yIFdlYlNvY2tldENoYW5u
ZWxDbGllbnQgZm9yIGRpcmVjdCBjb21tdW5pY2F0aW9uIGJldHdlZW4gdHdvIElQIGFkZHJlc3Nl
cy4gSGFuZGxlcwotICogdGhlIHNpZ25hbGluZyBiZXR3ZWVuIHRoZSB0d28gY2xpZW50cyB1c2lu
ZyBhIFRDUCBjb25uZWN0aW9uLgotICoKLSAqIDxwPkFsbCBwdWJsaWMgbWV0aG9kcyBzaG91bGQg
YmUgY2FsbGVkIGZyb20gYSBsb29wZXIgZXhlY3V0b3IgdGhyZWFkCi0gKiBwYXNzZWQgaW4gYSBj
b25zdHJ1Y3Rvciwgb3RoZXJ3aXNlIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KLSAqIEFsbCBl
dmVudHMgYXJlIGRpc3BhdGNoZWQgb24gdGhlIHNhbWUgdGhyZWFkLgotICovCi1wdWJsaWMgY2xh
c3MgVENQQ2hhbm5lbENsaWVudCB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiVENQQ2hhbm5lbENsaWVudCI7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBFeGVjdXRvclNlcnZpY2Ug
ZXhlY3V0b3I7Ci0gIHByaXZhdGUgZmluYWwgVGhyZWFkVXRpbHMuVGhyZWFkQ2hlY2tlciBleGVj
dXRvclRocmVhZENoZWNrOwotICBwcml2YXRlIGZpbmFsIFRDUENoYW5uZWxFdmVudHMgZXZlbnRM
aXN0ZW5lcjsKLSAgcHJpdmF0ZSBUQ1BTb2NrZXQgc29ja2V0OwotCi0gIC8qKgotICAgKiBDYWxs
YmFjayBpbnRlcmZhY2UgZm9yIG1lc3NhZ2VzIGRlbGl2ZXJlZCBvbiBUQ1AgQ29ubmVjdGlvbi4g
QWxsIGNhbGxiYWNrcyBhcmUgaW52b2tlZCBmcm9tIHRoZQotICAgKiBsb29wZXIgZXhlY3V0b3Ig
dGhyZWFkLgotICAgKi8KLSAgcHVibGljIGludGVyZmFjZSBUQ1BDaGFubmVsRXZlbnRzIHsKLSAg
ICB2b2lkIG9uVENQQ29ubmVjdGVkKGJvb2xlYW4gc2VydmVyKTsKLSAgICB2b2lkIG9uVENQTWVz
c2FnZShTdHJpbmcgbWVzc2FnZSk7Ci0gICAgdm9pZCBvblRDUEVycm9yKFN0cmluZyBkZXNjcmlw
dGlvbik7Ci0gICAgdm9pZCBvblRDUENsb3NlKCk7Ci0gIH0KLQotICAvKioKLSAgICogSW5pdGlh
bGl6ZXMgdGhlIFRDUENoYW5uZWxDbGllbnQuIElmIElQIGlzIGEgbG9jYWwgSVAgYWRkcmVzcywg
c3RhcnRzIGEgbGlzdGVuaW5nIHNlcnZlciBvbgotICAgKiB0aGF0IElQLiBJZiBub3QsIGluc3Rl
YWQgY29ubmVjdHMgdG8gdGhlIElQLgotICAgKgotICAgKiBAcGFyYW0gZXZlbnRMaXN0ZW5lciBM
aXN0ZW5lciB0aGF0IHdpbGwgcmVjZWl2ZSBldmVudHMgZnJvbSB0aGUgY2xpZW50LgotICAgKiBA
cGFyYW0gaXAgSVAgYWRkcmVzcyB0byBsaXN0ZW4gb24gb3IgY29ubmVjdCB0by4KLSAgICogQHBh
cmFtIHBvcnQgUG9ydCB0byBsaXN0ZW4gb24gb3IgY29ubmVjdCB0by4KLSAgICovCi0gIHB1Ymxp
YyBUQ1BDaGFubmVsQ2xpZW50KAotICAgICAgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yLCBUQ1BD
aGFubmVsRXZlbnRzIGV2ZW50TGlzdGVuZXIsIFN0cmluZyBpcCwgaW50IHBvcnQpIHsKLSAgICB0
aGlzLmV4ZWN1dG9yID0gZXhlY3V0b3I7Ci0gICAgZXhlY3V0b3JUaHJlYWRDaGVjayA9IG5ldyBU
aHJlYWRVdGlscy5UaHJlYWRDaGVja2VyKCk7Ci0gICAgZXhlY3V0b3JUaHJlYWRDaGVjay5kZXRh
Y2hUaHJlYWQoKTsKLSAgICB0aGlzLmV2ZW50TGlzdGVuZXIgPSBldmVudExpc3RlbmVyOwotCi0g
ICAgSW5ldEFkZHJlc3MgYWRkcmVzczsKLSAgICB0cnkgewotICAgICAgYWRkcmVzcyA9IEluZXRB
ZGRyZXNzLmdldEJ5TmFtZShpcCk7Ci0gICAgfSBjYXRjaCAoVW5rbm93bkhvc3RFeGNlcHRpb24g
ZSkgewotICAgICAgcmVwb3J0RXJyb3IoIkludmFsaWQgSVAgYWRkcmVzcy4iKTsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoYWRkcmVzcy5pc0FueUxvY2FsQWRkcmVzcygpKSB7Ci0g
ICAgICBzb2NrZXQgPSBuZXcgVENQU29ja2V0U2VydmVyKGFkZHJlc3MsIHBvcnQpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICBzb2NrZXQgPSBuZXcgVENQU29ja2V0Q2xpZW50KGFkZHJlc3MsIHBvcnQp
OwotICAgIH0KLQotICAgIHNvY2tldC5zdGFydCgpOwotICB9Ci0KLSAgLyoqCi0gICAqIERpc2Nv
bm5lY3RzIHRoZSBjbGllbnQgaWYgbm90IGFscmVhZHkgZGlzY29ubmVjdGVkLiBUaGlzIHdpbGwg
ZmlyZSB0aGUgb25UQ1BDbG9zZSBldmVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIGRpc2Nvbm5l
Y3QoKSB7Ci0gICAgZXhlY3V0b3JUaHJlYWRDaGVjay5jaGVja0lzT25WYWxpZFRocmVhZCgpOwot
Ci0gICAgc29ja2V0LmRpc2Nvbm5lY3QoKTsKLSAgfQotCi0gIC8qKgotICAgKiBTZW5kcyBhIG1l
c3NhZ2Ugb24gdGhlIHNvY2tldC4KLSAgICoKLSAgICogQHBhcmFtIG1lc3NhZ2UgTWVzc2FnZSB0
byBiZSBzZW50LgotICAgKi8KLSAgcHVibGljIHZvaWQgc2VuZChTdHJpbmcgbWVzc2FnZSkgewot
ICAgIGV4ZWN1dG9yVGhyZWFkQ2hlY2suY2hlY2tJc09uVmFsaWRUaHJlYWQoKTsKLQotICAgIHNv
Y2tldC5zZW5kKG1lc3NhZ2UpOwotICB9Ci0KLSAgLyoqCi0gICAqIEhlbHBlciBtZXRob2QgZm9y
IGZpcmluZyBvblRDUEVycm9yIGV2ZW50cy4gQ2FsbHMgb25UQ1BFcnJvciBvbiB0aGUgZXhlY3V0
b3IgdGhyZWFkLgotICAgKi8KLSAgcHJpdmF0ZSB2b2lkIHJlcG9ydEVycm9yKGZpbmFsIFN0cmlu
ZyBtZXNzYWdlKSB7Ci0gICAgTG9nLmUoVEFHLCAiVENQIEVycm9yOiAiICsgbWVzc2FnZSk7Ci0g
ICAgZXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgZXZlbnRMaXN0ZW5lci5vblRDUEVycm9y
KG1lc3NhZ2UpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLyoqCi0gICAqIEJhc2UgY2xh
c3MgZm9yIHNlcnZlciBhbmQgY2xpZW50IHNvY2tldHMuIENvbnRhaW5zIGEgbGlzdGVuaW5nIHRo
cmVhZCB0aGF0IHdpbGwgY2FsbAotICAgKiBldmVudExpc3RlbmVyLm9uVENQTWVzc2FnZSBvbiBu
ZXcgbWVzc2FnZXMuCi0gICAqLwotICBwcml2YXRlIGFic3RyYWN0IGNsYXNzIFRDUFNvY2tldCBl
eHRlbmRzIFRocmVhZCB7Ci0gICAgLy8gTG9jayBmb3IgZWRpdGluZyBvdXQgYW5kIHJhd1NvY2tl
dAotICAgIHByb3RlY3RlZCBmaW5hbCBPYmplY3QgcmF3U29ja2V0TG9jazsKLSAgICBwcml2YXRl
IFByaW50V3JpdGVyIG91dDsKLSAgICBwcml2YXRlIFNvY2tldCByYXdTb2NrZXQ7Ci0KLSAgICAv
KioKLSAgICAgKiBDb25uZWN0IHRvIHRoZSBwZWVyLCBwb3RlbnRpYWxseSBhIHNsb3cgb3BlcmF0
aW9uLgotICAgICAqCi0gICAgICogQHJldHVybiBTb2NrZXQgY29ubmVjdGlvbiwgbnVsbCBpZiBj
b25uZWN0aW9uIGZhaWxlZC4KLSAgICAgKi8KLSAgICBwdWJsaWMgYWJzdHJhY3QgU29ja2V0IGNv
bm5lY3QoKTsKLSAgICAvKiogUmV0dXJucyB0cnVlIGlmIHNvY2tldHMgaXMgYSBzZXJ2ZXIgcmF3
U29ja2V0LiAqLwotICAgIHB1YmxpYyBhYnN0cmFjdCBib29sZWFuIGlzU2VydmVyKCk7Ci0KLSAg
ICBUQ1BTb2NrZXQoKSB7Ci0gICAgICByYXdTb2NrZXRMb2NrID0gbmV3IE9iamVjdCgpOwotICAg
IH0KLQotICAgIC8qKgotICAgICAqIFRoZSBsaXN0ZW5pbmcgdGhyZWFkLgotICAgICAqLwotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIExvZy5kKFRBRywgIkxp
c3RlbmluZyB0aHJlYWQgc3RhcnRlZC4uLiIpOwotCi0gICAgICAvLyBSZWNlaXZlIGNvbm5lY3Rp
b24gdG8gdGVtcG9yYXJ5IHZhcmlhYmxlIGZpcnN0LCBzbyB3ZSBkb24ndCBibG9jay4KLSAgICAg
IFNvY2tldCB0ZW1wU29ja2V0ID0gY29ubmVjdCgpOwotICAgICAgQnVmZmVyZWRSZWFkZXIgaW47
Ci0KLSAgICAgIExvZy5kKFRBRywgIlRDUCBjb25uZWN0aW9uIGVzdGFibGlzaGVkLiIpOwotCi0g
ICAgICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExvY2spIHsKLSAgICAgICAgaWYgKHJhd1NvY2tl
dCAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmUoVEFHLCAiU29ja2V0IGFscmVhZHkgZXhpc3Rl
ZCBhbmQgd2lsbCBiZSByZXBsYWNlZC4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJhd1NvY2tl
dCA9IHRlbXBTb2NrZXQ7Ci0KLSAgICAgICAgLy8gQ29ubmVjdGluZyBmYWlsZWQsIGVycm9yIGhh
cyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQsIGp1c3QgZXhpdC4KLSAgICAgICAgaWYgKHJhd1NvY2tl
dCA9PSBudWxsKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJ5
IHsKLSAgICAgICAgICBvdXQgPSBuZXcgUHJpbnRXcml0ZXIocmF3U29ja2V0LmdldE91dHB1dFN0
cmVhbSgpLCB0cnVlKTsKLSAgICAgICAgICBpbiA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5w
dXRTdHJlYW1SZWFkZXIocmF3U29ja2V0LmdldElucHV0U3RyZWFtKCkpKTsKLSAgICAgICAgfSBj
YXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJGYWlsZWQgdG8g
b3BlbiBJTyBvbiByYXdTb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIExvZy52KFRBRywgIkV4ZWN1dGUgb25U
Q1BDb25uZWN0ZWQiKTsKLSAgICAgIGV4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewot
ICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAg
IExvZy52KFRBRywgIlJ1biBvblRDUENvbm5lY3RlZCIpOwotICAgICAgICAgIGV2ZW50TGlzdGVu
ZXIub25UQ1BDb25uZWN0ZWQoaXNTZXJ2ZXIoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0pOwotCi0g
ICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKLSAgICAg
ICAgdHJ5IHsKLSAgICAgICAgICBtZXNzYWdlID0gaW4ucmVhZExpbmUoKTsKLSAgICAgICAgfSBj
YXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgICAgIHN5bmNocm9uaXplZCAocmF3U29ja2V0
TG9jaykgewotICAgICAgICAgICAgLy8gSWYgc29ja2V0IHdhcyBjbG9zZWQsIHRoaXMgaXMgZXhw
ZWN0ZWQuCi0gICAgICAgICAgICBpZiAocmF3U29ja2V0ID09IG51bGwpIHsKLSAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCi0gICAgICAgICAgcmVwb3J0
RXJyb3IoIkZhaWxlZCB0byByZWFkIGZyb20gcmF3U29ja2V0OiAiICsgZS5nZXRNZXNzYWdlKCkp
OwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gZGF0YSByZWNl
aXZlZCwgcmF3U29ja2V0IHByb2JhYmx5IGNsb3NlZC4KLSAgICAgICAgaWYgKG1lc3NhZ2UgPT0g
bnVsbCkgewotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgZXhlY3V0b3Iu
ZXhlY3V0ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAg
cHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgTG9nLnYoVEFHLCAiUmVjZWl2ZTogIiAr
IG1lc3NhZ2UpOwotICAgICAgICAgICAgZXZlbnRMaXN0ZW5lci5vblRDUE1lc3NhZ2UobWVzc2Fn
ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0KLQotICAgICAgTG9nLmQoVEFH
LCAiUmVjZWl2aW5nIHRocmVhZCBleGl0aW5nLi4uIik7Ci0KLSAgICAgIC8vIENsb3NlIHRoZSBy
YXdTb2NrZXQgaWYgaXQgaXMgc3RpbGwgb3Blbi4KLSAgICAgIGRpc2Nvbm5lY3QoKTsKLSAgICB9
Ci0KLSAgICAvKioKLSAgICAgKiBDbG9zZXMgdGhlIHJhd1NvY2tldCBpZiBpdCBpcyBzdGlsbCBv
cGVuLiBBbHNvIGZpcmVzIHRoZSBvblRDUENsb3NlIGV2ZW50LgotICAgICAqLwotICAgIHB1Ymxp
YyB2b2lkIGRpc2Nvbm5lY3QoKSB7Ci0gICAgICB0cnkgewotICAgICAgICBzeW5jaHJvbml6ZWQg
KHJhd1NvY2tldExvY2spIHsKLSAgICAgICAgICBpZiAocmF3U29ja2V0ICE9IG51bGwpIHsKLSAg
ICAgICAgICAgIHJhd1NvY2tldC5jbG9zZSgpOwotICAgICAgICAgICAgcmF3U29ja2V0ID0gbnVs
bDsKLSAgICAgICAgICAgIG91dCA9IG51bGw7Ci0KLSAgICAgICAgICAgIGV4ZWN1dG9yLmV4ZWN1
dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgICAgICAgIGV2ZW50TGlzdGVuZXIub25U
Q1BDbG9zZSgpOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVw
b3J0RXJyb3IoIkZhaWxlZCB0byBjbG9zZSByYXdTb2NrZXQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU2VuZHMgYSBtZXNzYWdlIG9uIHRo
ZSBzb2NrZXQuIFNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgZXhlY3V0b3IgdGhyZWFkLgot
ICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHNlbmQoU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICAgIExv
Zy52KFRBRywgIlNlbmQ6ICIgKyBtZXNzYWdlKTsKLQotICAgICAgc3luY2hyb25pemVkIChyYXdT
b2NrZXRMb2NrKSB7Ci0gICAgICAgIGlmIChvdXQgPT0gbnVsbCkgewotICAgICAgICAgIHJlcG9y
dEVycm9yKCJTZW5kaW5nIGRhdGEgb24gY2xvc2VkIHNvY2tldC4iKTsKLSAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLQotICAgICAgICBvdXQud3JpdGUobWVzc2FnZSArICJcbiIpOwotICAg
ICAgICBvdXQuZmx1c2goKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNz
IFRDUFNvY2tldFNlcnZlciBleHRlbmRzIFRDUFNvY2tldCB7Ci0gICAgLy8gU2VydmVyIHNvY2tl
dCBpcyBhbHNvIGd1YXJkZWQgYnkgcmF3U29ja2V0TG9jay4KLSAgICBwcml2YXRlIFNlcnZlclNv
Y2tldCBzZXJ2ZXJTb2NrZXQ7Ci0KLSAgICBmaW5hbCBwcml2YXRlIEluZXRBZGRyZXNzIGFkZHJl
c3M7Ci0gICAgZmluYWwgcHJpdmF0ZSBpbnQgcG9ydDsKLQotICAgIHB1YmxpYyBUQ1BTb2NrZXRT
ZXJ2ZXIoSW5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQpIHsKLSAgICAgIHRoaXMuYWRkcmVz
cyA9IGFkZHJlc3M7Ci0gICAgICB0aGlzLnBvcnQgPSBwb3J0OwotICAgIH0KLQotICAgIC8qKiBP
cGVucyBhIGxpc3RlbmluZyBzb2NrZXQgYW5kIHdhaXRzIGZvciBhIGNvbm5lY3Rpb24uICovCi0g
ICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNvY2tldCBjb25uZWN0KCkgewotICAgICAgTG9nLmQo
VEFHLCAiTGlzdGVuaW5nIG9uIFsiICsgYWRkcmVzcy5nZXRIb3N0QWRkcmVzcygpICsgIl06IiAr
IEludGVnZXIudG9TdHJpbmcocG9ydCkpOwotCi0gICAgICBmaW5hbCBTZXJ2ZXJTb2NrZXQgdGVt
cFNvY2tldDsKLSAgICAgIHRyeSB7Ci0gICAgICAgIHRlbXBTb2NrZXQgPSBuZXcgU2VydmVyU29j
a2V0KHBvcnQsIDAsIGFkZHJlc3MpOwotICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewot
ICAgICAgICByZXBvcnRFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0OiAiICsg
ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgIH0KLQotICAgICAg
c3luY2hyb25pemVkIChyYXdTb2NrZXRMb2NrKSB7Ci0gICAgICAgIGlmIChzZXJ2ZXJTb2NrZXQg
IT0gbnVsbCkgewotICAgICAgICAgIExvZy5lKFRBRywgIlNlcnZlciByYXdTb2NrZXQgd2FzIGFs
cmVhZHkgbGlzdGVuaW5nIGFuZCBuZXcgd2lsbCBiZSBvcGVuZWQuIik7Ci0gICAgICAgIH0KLQot
ICAgICAgICBzZXJ2ZXJTb2NrZXQgPSB0ZW1wU29ja2V0OwotICAgICAgfQotCi0gICAgICB0cnkg
ewotICAgICAgICByZXR1cm4gdGVtcFNvY2tldC5hY2NlcHQoKTsKLSAgICAgIH0gY2F0Y2ggKElP
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byByZWNlaXZlIGNv
bm5lY3Rpb246ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAg
ICAgfQotICAgIH0KLQotICAgIC8qKiBDbG9zZXMgdGhlIGxpc3RlbmluZyBzb2NrZXQgYW5kIGNh
bGxzIHN1cGVyLiAqLwotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3Qo
KSB7Ci0gICAgICB0cnkgewotICAgICAgICBzeW5jaHJvbml6ZWQgKHJhd1NvY2tldExvY2spIHsK
LSAgICAgICAgICBpZiAoc2VydmVyU29ja2V0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNlcnZl
clNvY2tldC5jbG9zZSgpOwotICAgICAgICAgICAgc2VydmVyU29ja2V0ID0gbnVsbDsKLSAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgcmVwb3J0RXJyb3IoIkZhaWxlZCB0byBjbG9zZSBzZXJ2ZXIgc29ja2V0OiAiICsgZS5nZXRN
ZXNzYWdlKCkpOwotICAgICAgfQotCi0gICAgICBzdXBlci5kaXNjb25uZWN0KCk7Ci0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNTZXJ2ZXIoKSB7Ci0gICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGNsYXNzIFRDUFNvY2tldENsaWVu
dCBleHRlbmRzIFRDUFNvY2tldCB7Ci0gICAgZmluYWwgcHJpdmF0ZSBJbmV0QWRkcmVzcyBhZGRy
ZXNzOwotICAgIGZpbmFsIHByaXZhdGUgaW50IHBvcnQ7Ci0KLSAgICBwdWJsaWMgVENQU29ja2V0
Q2xpZW50KEluZXRBZGRyZXNzIGFkZHJlc3MsIGludCBwb3J0KSB7Ci0gICAgICB0aGlzLmFkZHJl
c3MgPSBhZGRyZXNzOwotICAgICAgdGhpcy5wb3J0ID0gcG9ydDsKLSAgICB9Ci0KLSAgICAvKiog
Q29ubmVjdHMgdG8gdGhlIHBlZXIuICovCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIFNvY2tl
dCBjb25uZWN0KCkgewotICAgICAgTG9nLmQoVEFHLCAiQ29ubmVjdGluZyB0byBbIiArIGFkZHJl
c3MuZ2V0SG9zdEFkZHJlc3MoKSArICJdOiIgKyBJbnRlZ2VyLnRvU3RyaW5nKHBvcnQpKTsKLQot
ICAgICAgdHJ5IHsKLSAgICAgICAgcmV0dXJuIG5ldyBTb2NrZXQoYWRkcmVzcywgcG9ydCk7Ci0g
ICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIHJlcG9ydEVycm9yKCJGYWls
ZWQgdG8gY29ubmVjdDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuIG51bGw7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIGJvb2xlYW4gaXNT
ZXJ2ZXIoKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxlci5qYXZhCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9VbmhhbmRsZWRFeGNlcHRp
b25IYW5kbGVyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9VbmhhbmRsZWRFeGNlcHRpb25IYW5kbGVyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAt
MSw4NCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDEzIFRoZSBXZWJSVEMgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFw
cHJ0YzsKLQotaW1wb3J0IGFuZHJvaWQuYXBwLkFjdGl2aXR5OwotaW1wb3J0IGFuZHJvaWQuYXBw
LkFsZXJ0RGlhbG9nOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5EaWFsb2dJbnRlcmZhY2U7Ci1p
bXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLWltcG9ydCBhbmRyb2lkLnV0aWwuVHlwZWRWYWx1ZTsK
LWltcG9ydCBhbmRyb2lkLndpZGdldC5TY3JvbGxWaWV3OwotaW1wb3J0IGFuZHJvaWQud2lkZ2V0
LlRleHRWaWV3OwotCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKLWltcG9ydCBqYXZhLmlv
LlN0cmluZ1dyaXRlcjsKLQotLyoqCi0gKiBTaW5nbGV0b24gaGVscGVyOiBpbnN0YWxsIGEgZGVm
YXVsdCB1bmhhbmRsZWQgZXhjZXB0aW9uIGhhbmRsZXIgd2hpY2ggc2hvd3MKLSAqIGFuIGluZm9y
bWF0aXZlIGRpYWxvZyBhbmQga2lsbHMgdGhlIGFwcC4gIFVzZWZ1bCBmb3IgYXBwcyB3aG9zZQot
ICogZXJyb3ItaGFuZGxpbmcgY29uc2lzdHMgb2YgdGhyb3dpbmcgUnVudGltZUV4Y2VwdGlvbnMu
Ci0gKiBOT1RFOiBhbG1vc3QgYWx3YXlzIG1vcmUgdXNlZnVsIHRvCi0gKiBUaHJlYWQuc2V0RGVm
YXVsdFVuY2F1Z2h0RXhjZXB0aW9uSGFuZGxlcigpIHJhdGhlciB0aGFuCi0gKiBUaHJlYWQuc2V0
VW5jYXVnaHRFeGNlcHRpb25IYW5kbGVyKCksIHRvIGFwcGx5IHRvIGJhY2tncm91bmQgdGhyZWFk
cyBhcyB3ZWxsLgotICovCi1wdWJsaWMgY2xhc3MgVW5oYW5kbGVkRXhjZXB0aW9uSGFuZGxlciBp
bXBsZW1lbnRzIFRocmVhZC5VbmNhdWdodEV4Y2VwdGlvbkhhbmRsZXIgewotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIkFwcFJUQ01vYmlsZUFjdGl2aXR5IjsKLSAgcHJpdmF0
ZSBmaW5hbCBBY3Rpdml0eSBhY3Rpdml0eTsKLQotICBwdWJsaWMgVW5oYW5kbGVkRXhjZXB0aW9u
SGFuZGxlcihmaW5hbCBBY3Rpdml0eSBhY3Rpdml0eSkgewotICAgIHRoaXMuYWN0aXZpdHkgPSBh
Y3Rpdml0eTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHVuY2F1Z2h0RXhjZXB0aW9uKFRocmVhZCB1
bnVzZWRUaHJlYWQsIGZpbmFsIFRocm93YWJsZSBlKSB7Ci0gICAgYWN0aXZpdHkucnVuT25VaVRo
cmVhZChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgU3RyaW5nIHRpdGxlID0gIkZhdGFsIGVycm9yOiAiICsgZ2V0VG9w
TGV2ZWxDYXVzZU1lc3NhZ2UoZSk7Ci0gICAgICAgIFN0cmluZyBtc2cgPSBnZXRSZWN1cnNpdmVT
dGFja1RyYWNlKGUpOwotICAgICAgICBUZXh0VmlldyBlcnJvclZpZXcgPSBuZXcgVGV4dFZpZXco
YWN0aXZpdHkpOwotICAgICAgICBlcnJvclZpZXcuc2V0VGV4dChtc2cpOwotICAgICAgICBlcnJv
clZpZXcuc2V0VGV4dFNpemUoVHlwZWRWYWx1ZS5DT01QTEVYX1VOSVRfU1AsIDgpOwotICAgICAg
ICBTY3JvbGxWaWV3IHNjcm9sbGluZ0NvbnRhaW5lciA9IG5ldyBTY3JvbGxWaWV3KGFjdGl2aXR5
KTsKLSAgICAgICAgc2Nyb2xsaW5nQ29udGFpbmVyLmFkZFZpZXcoZXJyb3JWaWV3KTsKLSAgICAg
ICAgTG9nLmUoVEFHLCB0aXRsZSArICJcblxuIiArIG1zZyk7Ci0gICAgICAgIERpYWxvZ0ludGVy
ZmFjZS5PbkNsaWNrTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgRGlhbG9nSW50ZXJmYWNlLk9uQ2xp
Y2tMaXN0ZW5lcigpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9p
ZCBvbkNsaWNrKERpYWxvZ0ludGVyZmFjZSBkaWFsb2csIGludCB3aGljaCkgewotICAgICAgICAg
ICAgZGlhbG9nLmRpc21pc3MoKTsKLSAgICAgICAgICAgIFN5c3RlbS5leGl0KDEpOwotICAgICAg
ICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgQWxlcnREaWFsb2cuQnVpbGRlciBidWlsZGVyID0g
bmV3IEFsZXJ0RGlhbG9nLkJ1aWxkZXIoYWN0aXZpdHkpOwotICAgICAgICBidWlsZGVyLnNldFRp
dGxlKHRpdGxlKQotICAgICAgICAgICAgLnNldFZpZXcoc2Nyb2xsaW5nQ29udGFpbmVyKQotICAg
ICAgICAgICAgLnNldFBvc2l0aXZlQnV0dG9uKCJFeGl0IiwgbGlzdGVuZXIpCi0gICAgICAgICAg
ICAuc2hvdygpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgTWVz
c2FnZSBhdHRhY2hlZCB0byB0aGUgb3JpZ2luYWwgQ2F1c2Ugb2YgfHR8LgotICBwcml2YXRlIHN0
YXRpYyBTdHJpbmcgZ2V0VG9wTGV2ZWxDYXVzZU1lc3NhZ2UoVGhyb3dhYmxlIHQpIHsKLSAgICBU
aHJvd2FibGUgdG9wTGV2ZWxDYXVzZSA9IHQ7Ci0gICAgd2hpbGUgKHRvcExldmVsQ2F1c2UuZ2V0
Q2F1c2UoKSAhPSBudWxsKSB7Ci0gICAgICB0b3BMZXZlbENhdXNlID0gdG9wTGV2ZWxDYXVzZS5n
ZXRDYXVzZSgpOwotICAgIH0KLSAgICByZXR1cm4gdG9wTGV2ZWxDYXVzZS5nZXRNZXNzYWdlKCk7
Ci0gIH0KLQotICAvLyBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgU3RyaW5nIG9mIHRoZSBzdGFj
a3RyYWNlIGluIHx0fCwgcmVjdXJzaXZlbHkKLSAgLy8gdGhyb3VnaCBhbGwgQ2F1c2VzIHRoYXQg
bGVkIHRvIHx0fC4KLSAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFJlY3Vyc2l2ZVN0YWNrVHJh
Y2UoVGhyb3dhYmxlIHQpIHsKLSAgICBTdHJpbmdXcml0ZXIgd3JpdGVyID0gbmV3IFN0cmluZ1dy
aXRlcigpOwotICAgIHQucHJpbnRTdGFja1RyYWNlKG5ldyBQcmludFdyaXRlcih3cml0ZXIpKTsK
LSAgICByZXR1cm4gd3JpdGVyLnRvU3RyaW5nKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29y
Zy9hcHBzcG90L2FwcHJ0Yy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50LmphdmEKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNvY2tldENoYW5uZWxDbGllbnQuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNv
Y2tldENoYW5uZWxDbGllbnQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI5NiArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0
IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsLkFzeW5jSHR0cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQg
b3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5Bc3luY0h0dHBF
dmVudHM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXI7Ci1pbXBvcnQgYW5kcm9pZC51dGls
LkxvZzsKLQotaW1wb3J0IGRlLnRhdmVuZG8uYXV0b2JhaG4uV2ViU29ja2V0LldlYlNvY2tldENv
bm5lY3Rpb25PYnNlcnZlcjsKLWltcG9ydCBkZS50YXZlbmRvLmF1dG9iYWhuLldlYlNvY2tldENv
bm5lY3Rpb247Ci1pbXBvcnQgZGUudGF2ZW5kby5hdXRvYmFobi5XZWJTb2NrZXRFeGNlcHRpb247
Ci0KLWltcG9ydCBvcmcuanNvbi5KU09ORXhjZXB0aW9uOwotaW1wb3J0IG9yZy5qc29uLkpTT05P
YmplY3Q7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci1pbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4
RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwotCi0vKioKLSAqIFdlYlNv
Y2tldCBjbGllbnQgaW1wbGVtZW50YXRpb24uCi0gKgotICogPHA+QWxsIHB1YmxpYyBtZXRob2Rz
IHNob3VsZCBiZSBjYWxsZWQgZnJvbSBhIGxvb3BlciBleGVjdXRvciB0aHJlYWQKLSAqIHBhc3Nl
ZCBpbiBhIGNvbnN0cnVjdG9yLCBvdGhlcndpc2UgZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgot
ICogQWxsIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBvbiB0aGUgc2FtZSB0aHJlYWQuCi0gKi8KLQot
cHVibGljIGNsYXNzIFdlYlNvY2tldENoYW5uZWxDbGllbnQgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIldTQ2hhbm5lbFJUQ0NsaWVudCI7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBDTE9TRV9USU1FT1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBmaW5hbCBXZWJTb2Nr
ZXRDaGFubmVsRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBmaW5hbCBIYW5kbGVyIGhhbmRsZXI7
Ci0gIHByaXZhdGUgV2ViU29ja2V0Q29ubmVjdGlvbiB3czsKLSAgcHJpdmF0ZSBXZWJTb2NrZXRP
YnNlcnZlciB3c09ic2VydmVyOwotICBwcml2YXRlIFN0cmluZyB3c1NlcnZlclVybDsKLSAgcHJp
dmF0ZSBTdHJpbmcgcG9zdFNlcnZlclVybDsKLSAgcHJpdmF0ZSBTdHJpbmcgcm9vbUlEOwotICBw
cml2YXRlIFN0cmluZyBjbGllbnRJRDsKLSAgcHJpdmF0ZSBXZWJTb2NrZXRDb25uZWN0aW9uU3Rh
dGUgc3RhdGU7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGNsb3NlRXZlbnRMb2NrID0gbmV3IE9i
amVjdCgpOwotICBwcml2YXRlIGJvb2xlYW4gY2xvc2VFdmVudDsKLSAgLy8gV2ViU29ja2V0IHNl
bmQgcXVldWUuIE1lc3NhZ2VzIGFyZSBhZGRlZCB0byB0aGUgcXVldWUgd2hlbiBXZWJTb2NrZXQK
LSAgLy8gY2xpZW50IGlzIG5vdCByZWdpc3RlcmVkIGFuZCBhcmUgY29uc3VtZWQgaW4gcmVnaXN0
ZXIoKSBjYWxsLgotICBwcml2YXRlIGZpbmFsIExpbmtlZExpc3Q8U3RyaW5nPiB3c1NlbmRRdWV1
ZTsKLQotICAvKioKLSAgICogUG9zc2libGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gc3RhdGVzLgot
ICAgKi8KLSAgcHVibGljIGVudW0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlIHsgTkVXLCBDT05O
RUNURUQsIFJFR0lTVEVSRUQsIENMT1NFRCwgRVJST1IgfQotCi0gIC8qKgotICAgKiBDYWxsYmFj
ayBpbnRlcmZhY2UgZm9yIG1lc3NhZ2VzIGRlbGl2ZXJlZCBvbiBXZWJTb2NrZXQuCi0gICAqIEFs
bCBldmVudHMgYXJlIGRpc3BhdGNoZWQgZnJvbSBhIGxvb3BlciBleGVjdXRvciB0aHJlYWQuCi0g
ICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIFdlYlNvY2tldENoYW5uZWxFdmVudHMgewotICAgIHZv
aWQgb25XZWJTb2NrZXRNZXNzYWdlKGZpbmFsIFN0cmluZyBtZXNzYWdlKTsKLSAgICB2b2lkIG9u
V2ViU29ja2V0Q2xvc2UoKTsKLSAgICB2b2lkIG9uV2ViU29ja2V0RXJyb3IoZmluYWwgU3RyaW5n
IGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIHB1YmxpYyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KEhh
bmRsZXIgaGFuZGxlciwgV2ViU29ja2V0Q2hhbm5lbEV2ZW50cyBldmVudHMpIHsKLSAgICB0aGlz
LmhhbmRsZXIgPSBoYW5kbGVyOwotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICAgIHJvb21J
RCA9IG51bGw7Ci0gICAgY2xpZW50SUQgPSBudWxsOwotICAgIHdzU2VuZFF1ZXVlID0gbmV3IExp
bmtlZExpc3Q8U3RyaW5nPigpOwotICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRl
Lk5FVzsKLSAgfQotCi0gIHB1YmxpYyBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUgZ2V0U3RhdGUo
KSB7Ci0gICAgcmV0dXJuIHN0YXRlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgY29ubmVjdChmaW5h
bCBTdHJpbmcgd3NVcmwsIGZpbmFsIFN0cmluZyBwb3N0VXJsKSB7Ci0gICAgY2hlY2tJZkNhbGxl
ZE9uVmFsaWRUaHJlYWQoKTsKLSAgICBpZiAoc3RhdGUgIT0gV2ViU29ja2V0Q29ubmVjdGlvblN0
YXRlLk5FVykgewotICAgICAgTG9nLmUoVEFHLCAiV2ViU29ja2V0IGlzIGFscmVhZHkgY29ubmVj
dGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB3c1NlcnZlclVybCA9IHdzVXJsOwot
ICAgIHBvc3RTZXJ2ZXJVcmwgPSBwb3N0VXJsOwotICAgIGNsb3NlRXZlbnQgPSBmYWxzZTsKLQot
ICAgIExvZy5kKFRBRywgIkNvbm5lY3RpbmcgV2ViU29ja2V0IHRvOiAiICsgd3NVcmwgKyAiLiBQ
b3N0IFVSTDogIiArIHBvc3RVcmwpOwotICAgIHdzID0gbmV3IFdlYlNvY2tldENvbm5lY3Rpb24o
KTsKLSAgICB3c09ic2VydmVyID0gbmV3IFdlYlNvY2tldE9ic2VydmVyKCk7Ci0gICAgdHJ5IHsK
LSAgICAgIHdzLmNvbm5lY3QobmV3IFVSSSh3c1NlcnZlclVybCksIHdzT2JzZXJ2ZXIpOwotICAg
IH0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiVVJJ
IGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0gY2F0Y2ggKFdlYlNvY2tldEV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXJyb3I6
ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICB9Ci0KLSAgcHVibGljIHZvaWQgcmVnaXN0
ZXIoZmluYWwgU3RyaW5nIHJvb21JRCwgZmluYWwgU3RyaW5nIGNsaWVudElEKSB7Ci0gICAgY2hl
Y2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKTsKLSAgICB0aGlzLnJvb21JRCA9IHJvb21JRDsKLSAg
ICB0aGlzLmNsaWVudElEID0gY2xpZW50SUQ7Ci0gICAgaWYgKHN0YXRlICE9IFdlYlNvY2tldENv
bm5lY3Rpb25TdGF0ZS5DT05ORUNURUQpIHsKLSAgICAgIExvZy53KFRBRywgIldlYlNvY2tldCBy
ZWdpc3RlcigpIGluIHN0YXRlICIgKyBzdGF0ZSk7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IExvZy5kKFRBRywgIlJlZ2lzdGVyaW5nIFdlYlNvY2tldCBmb3Igcm9vbSAiICsgcm9vbUlEICsg
Ii4gQ2xpZW50SUQ6ICIgKyBjbGllbnRJRCk7Ci0gICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpT
T05PYmplY3QoKTsKLSAgICB0cnkgewotICAgICAganNvbi5wdXQoImNtZCIsICJyZWdpc3RlciIp
OwotICAgICAganNvbi5wdXQoInJvb21pZCIsIHJvb21JRCk7Ci0gICAgICBqc29uLnB1dCgiY2xp
ZW50aWQiLCBjbGllbnRJRCk7Ci0gICAgICBMb2cuZChUQUcsICJDLT5XU1M6ICIgKyBqc29uLnRv
U3RyaW5nKCkpOwotICAgICAgd3Muc2VuZFRleHRNZXNzYWdlKGpzb24udG9TdHJpbmcoKSk7Ci0g
ICAgICBzdGF0ZSA9IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5SRUdJU1RFUkVEOwotICAgICAg
Ly8gU2VuZCBhbnkgcHJldmlvdXNseSBhY2N1bXVsYXRlZCBtZXNzYWdlcy4KLSAgICAgIGZvciAo
U3RyaW5nIHNlbmRNZXNzYWdlIDogd3NTZW5kUXVldWUpIHsKLSAgICAgICAgc2VuZChzZW5kTWVz
c2FnZSk7Ci0gICAgICB9Ci0gICAgICB3c1NlbmRRdWV1ZS5jbGVhcigpOwotICAgIH0gY2F0Y2gg
KEpTT05FeGNlcHRpb24gZSkgewotICAgICAgcmVwb3J0RXJyb3IoIldlYlNvY2tldCByZWdpc3Rl
ciBKU09OIGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgIH0KLSAgfQotCi0gIHB1Ymxp
YyB2b2lkIHNlbmQoU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxpZFRo
cmVhZCgpOwotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICAgIGNhc2UgTkVXOgotICAgICAgY2Fz
ZSBDT05ORUNURUQ6Ci0gICAgICAgIC8vIFN0b3JlIG91dGdvaW5nIG1lc3NhZ2VzIGFuZCBzZW5k
IHRoZW0gYWZ0ZXIgd2Vic29ja2V0IGNsaWVudAotICAgICAgICAvLyBpcyByZWdpc3RlcmVkLgot
ICAgICAgICBMb2cuZChUQUcsICJXUyBBQ0M6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgd3NTZW5k
UXVldWUuYWRkKG1lc3NhZ2UpOwotICAgICAgICByZXR1cm47Ci0gICAgICBjYXNlIEVSUk9SOgot
ICAgICAgY2FzZSBDTE9TRUQ6Ci0gICAgICAgIExvZy5lKFRBRywgIldlYlNvY2tldCBzZW5kKCkg
aW4gZXJyb3Igb3IgY2xvc2VkIHN0YXRlIDogIiArIG1lc3NhZ2UpOwotICAgICAgICByZXR1cm47
Ci0gICAgICBjYXNlIFJFR0lTVEVSRUQ6Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBK
U09OT2JqZWN0KCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAganNvbi5wdXQoImNtZCIsICJz
ZW5kIik7Ci0gICAgICAgICAganNvbi5wdXQoIm1zZyIsIG1lc3NhZ2UpOwotICAgICAgICAgIG1l
c3NhZ2UgPSBqc29uLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiQy0+V1NTOiAi
ICsgbWVzc2FnZSk7Ci0gICAgICAgICAgd3Muc2VuZFRleHRNZXNzYWdlKG1lc3NhZ2UpOwotICAg
ICAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICByZXBvcnRFcnJvcigi
V2ViU29ja2V0IHNlbmQgSlNPTiBlcnJvcjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICB9Ci0gIH0KLQotICAvLyBUaGlzIGNhbGwgY2FuIGJlIHVz
ZWQgdG8gc2VuZCBXZWJTb2NrZXQgbWVzc2FnZXMgYmVmb3JlIFdlYlNvY2tldAotICAvLyBjb25u
ZWN0aW9uIGlzIG9wZW5lZC4KLSAgcHVibGljIHZvaWQgcG9zdChTdHJpbmcgbWVzc2FnZSkgewot
ICAgIGNoZWNrSWZDYWxsZWRPblZhbGlkVGhyZWFkKCk7Ci0gICAgc2VuZFdTU01lc3NhZ2UoIlBP
U1QiLCBtZXNzYWdlKTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGRpc2Nvbm5lY3QoYm9vbGVhbiB3
YWl0Rm9yQ29tcGxldGUpIHsKLSAgICBjaGVja0lmQ2FsbGVkT25WYWxpZFRocmVhZCgpOwotICAg
IExvZy5kKFRBRywgIkRpc2Nvbm5lY3QgV2ViU29ja2V0LiBTdGF0ZTogIiArIHN0YXRlKTsKLSAg
ICBpZiAoc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLlJFR0lTVEVSRUQpIHsKLSAg
ICAgIC8vIFNlbmQgImJ5ZSIgdG8gV2ViU29ja2V0IHNlcnZlci4KLSAgICAgIHNlbmQoIntcInR5
cGVcIjogXCJieWVcIn0iKTsKLSAgICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRl
LkNPTk5FQ1RFRDsKLSAgICAgIC8vIFNlbmQgaHR0cCBERUxFVEUgdG8gaHR0cCBXZWJTb2NrZXQg
c2VydmVyLgotICAgICAgc2VuZFdTU01lc3NhZ2UoIkRFTEVURSIsICIiKTsKLSAgICB9Ci0gICAg
Ly8gQ2xvc2UgV2ViU29ja2V0IGluIENPTk5FQ1RFRCBvciBFUlJPUiBzdGF0ZXMgb25seS4KLSAg
ICBpZiAoc3RhdGUgPT0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCB8fCBzdGF0
ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuRVJST1IpIHsKLSAgICAgIHdzLmRpc2Nvbm5l
Y3QoKTsKLSAgICAgIHN0YXRlID0gV2ViU29ja2V0Q29ubmVjdGlvblN0YXRlLkNMT1NFRDsKLQot
ICAgICAgLy8gV2FpdCBmb3Igd2Vic29ja2V0IGNsb3NlIGV2ZW50IHRvIHByZXZlbnQgd2Vic29j
a2V0IGxpYnJhcnkgZnJvbQotICAgICAgLy8gc2VuZGluZyBhbnkgcGVuZGluZyBtZXNzYWdlcyB0
byBkZWxldGVkIGxvb3BlciB0aHJlYWQuCi0gICAgICBpZiAod2FpdEZvckNvbXBsZXRlKSB7Ci0g
ICAgICAgIHN5bmNocm9uaXplZCAoY2xvc2VFdmVudExvY2spIHsKLSAgICAgICAgICB3aGlsZSAo
IWNsb3NlRXZlbnQpIHsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgIGNsb3NlRXZl
bnRMb2NrLndhaXQoQ0xPU0VfVElNRU9VVCk7Ci0gICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICBM
b2cuZShUQUcsICJXYWl0IGVycm9yOiAiICsgZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAi
RGlzY29ubmVjdGluZyBXZWJTb2NrZXQgZG9uZS4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBy
ZXBvcnRFcnJvcihmaW5hbCBTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgTG9nLmUoVEFHLCBl
cnJvck1lc3NhZ2UpOwotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBA
T3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHN0YXRlICE9
IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5FUlJPUikgewotICAgICAgICAgIHN0YXRlID0gV2Vi
U29ja2V0Q29ubmVjdGlvblN0YXRlLkVSUk9SOwotICAgICAgICAgIGV2ZW50cy5vbldlYlNvY2tl
dEVycm9yKGVycm9yTWVzc2FnZSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9KTsKLSAgfQot
Ci0gIC8vIEFzeW5jaHJvbm91c2x5IHNlbmQgUE9TVC9ERUxFVEUgdG8gV2ViU29ja2V0IHNlcnZl
ci4KLSAgcHJpdmF0ZSB2b2lkIHNlbmRXU1NNZXNzYWdlKGZpbmFsIFN0cmluZyBtZXRob2QsIGZp
bmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgU3RyaW5nIHBvc3RVcmwgPSBwb3N0U2VydmVyVXJs
ICsgIi8iICsgcm9vbUlEICsgIi8iICsgY2xpZW50SUQ7Ci0gICAgTG9nLmQoVEFHLCAiV1MgIiAr
IG1ldGhvZCArICIgOiAiICsgcG9zdFVybCArICIgOiAiICsgbWVzc2FnZSk7Ci0gICAgQXN5bmNI
dHRwVVJMQ29ubmVjdGlvbiBodHRwQ29ubmVjdGlvbiA9Ci0gICAgICAgIG5ldyBBc3luY0h0dHBV
UkxDb25uZWN0aW9uKG1ldGhvZCwgcG9zdFVybCwgbWVzc2FnZSwgbmV3IEFzeW5jSHR0cEV2ZW50
cygpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBvbkh0dHBF
cnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiV1Mg
IiArIG1ldGhvZCArICIgZXJyb3I6ICIgKyBlcnJvck1lc3NhZ2UpOwotICAgICAgICAgIH0KLQot
ICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9uSHR0cENvbXBsZXRl
KFN0cmluZyByZXNwb25zZSkge30KLSAgICAgICAgfSk7Ci0gICAgaHR0cENvbm5lY3Rpb24uc2Vu
ZCgpOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiBF
bnN1cmVzIHRoYXQgV2ViU29ja2V0IG1ldGhvZCBpcwotICAvLyBjYWxsZWQgb24gYSBsb29wZXIg
dGhyZWFkLgotICBwcml2YXRlIHZvaWQgY2hlY2tJZkNhbGxlZE9uVmFsaWRUaHJlYWQoKSB7Ci0g
ICAgaWYgKFRocmVhZC5jdXJyZW50VGhyZWFkKCkgIT0gaGFuZGxlci5nZXRMb29wZXIoKS5nZXRU
aHJlYWQoKSkgewotICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiV2ViU29j
a2V0IG1ldGhvZCBpcyBub3QgY2FsbGVkIG9uIHZhbGlkIHRocmVhZCIpOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgY2xhc3MgV2ViU29ja2V0T2JzZXJ2ZXIgaW1wbGVtZW50cyBXZWJTb2NrZXRD
b25uZWN0aW9uT2JzZXJ2ZXIgewotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uT3Bl
bigpIHsKLSAgICAgIExvZy5kKFRBRywgIldlYlNvY2tldCBjb25uZWN0aW9uIG9wZW5lZCB0bzog
IiArIHdzU2VydmVyVXJsKTsKLSAgICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0g
ICAgICAgIEBPdmVycmlkZQotICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgICAg
c3RhdGUgPSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVEOwotICAgICAgICAgIC8v
IENoZWNrIGlmIHdlIGhhdmUgcGVuZGluZyByZWdpc3RlciByZXF1ZXN0LgotICAgICAgICAgIGlm
IChyb29tSUQgIT0gbnVsbCAmJiBjbGllbnRJRCAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZWdp
c3Rlcihyb29tSUQsIGNsaWVudElEKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgIH0p
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2xvc2UoV2ViU29j
a2V0Q2xvc2VOb3RpZmljYXRpb24gY29kZSwgU3RyaW5nIHJlYXNvbikgewotICAgICAgTG9nLmQo
VEFHLCAiV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VkLiBDb2RlOiAiICsgY29kZSArICIuIFJl
YXNvbjogIiArIHJlYXNvbiArICIuIFN0YXRlOiAiCi0gICAgICAgICAgICAgICsgc3RhdGUpOwot
ICAgICAgc3luY2hyb25pemVkIChjbG9zZUV2ZW50TG9jaykgewotICAgICAgICBjbG9zZUV2ZW50
ID0gdHJ1ZTsKLSAgICAgICAgY2xvc2VFdmVudExvY2subm90aWZ5KCk7Ci0gICAgICB9Ci0gICAg
ICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAg
ICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICAgIGlmIChzdGF0ZSAhPSBXZWJTb2NrZXRD
b25uZWN0aW9uU3RhdGUuQ0xPU0VEKSB7Ci0gICAgICAgICAgICBzdGF0ZSA9IFdlYlNvY2tldENv
bm5lY3Rpb25TdGF0ZS5DTE9TRUQ7Ci0gICAgICAgICAgICBldmVudHMub25XZWJTb2NrZXRDbG9z
ZSgpOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92
ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0TWVzc2FnZShTdHJpbmcgcGF5bG9hZCkgewot
ICAgICAgTG9nLmQoVEFHLCAiV1NTLT5DOiAiICsgcGF5bG9hZCk7Ci0gICAgICBmaW5hbCBTdHJp
bmcgbWVzc2FnZSA9IHBheWxvYWQ7Ci0gICAgICBoYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkg
ewotICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
ICAgIGlmIChzdGF0ZSA9PSBXZWJTb2NrZXRDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVECi0gICAg
ICAgICAgICAgIHx8IHN0YXRlID09IFdlYlNvY2tldENvbm5lY3Rpb25TdGF0ZS5SRUdJU1RFUkVE
KSB7Ci0gICAgICAgICAgICBldmVudHMub25XZWJTb2NrZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgfSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0g
ICAgcHVibGljIHZvaWQgb25SYXdUZXh0TWVzc2FnZShieXRlW10gcGF5bG9hZCkge30KLQotICAg
IEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQmluYXJ5TWVzc2FnZShieXRlW10gcGF5bG9h
ZCkge30KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNvY2tl
dFJUQ0NsaWVudC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9XZWJTb2NrZXRSVENDbGllbnQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMv
b3JnL2FwcHNwb3QvYXBwcnRjL1dlYlNvY2tldFJUQ0NsaWVudC5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsNDE5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNw
b3QuYXBwcnRjOwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlJvb21QYXJhbWV0ZXJzRmV0
Y2hlci5Sb29tUGFyYW1ldGVyc0ZldGNoZXJFdmVudHM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBw
cnRjLldlYlNvY2tldENoYW5uZWxDbGllbnQuV2ViU29ja2V0Q2hhbm5lbEV2ZW50czsKLWltcG9y
dCBvcmcuYXBwc3BvdC5hcHBydGMuV2ViU29ja2V0Q2hhbm5lbENsaWVudC5XZWJTb2NrZXRDb25u
ZWN0aW9uU3RhdGU7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLnV0aWwuQXN5bmNIdHRwVVJM
Q29ubmVjdGlvbjsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMudXRpbC5Bc3luY0h0dHBVUkxD
b25uZWN0aW9uLkFzeW5jSHR0cEV2ZW50czsKLQotaW1wb3J0IGFuZHJvaWQub3MuSGFuZGxlcjsK
LWltcG9ydCBhbmRyb2lkLm9zLkhhbmRsZXJUaHJlYWQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxv
ZzsKLQotaW1wb3J0IG9yZy5qc29uLkpTT05BcnJheTsKLWltcG9ydCBvcmcuanNvbi5KU09ORXhj
ZXB0aW9uOwotaW1wb3J0IG9yZy5qc29uLkpTT05PYmplY3Q7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5J
Y2VDYW5kaWRhdGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci0KLS8q
KgotICogTmVnb3RpYXRlcyBzaWduYWxpbmcgZm9yIGNoYXR0aW5nIHdpdGggaHR0cHM6Ly9hcHBy
LnRjICJyb29tcyIuCi0gKiBVc2VzIHRoZSBjbGllbnQ8LT5zZXJ2ZXIgc3BlY2lmaWNzIG9mIHRo
ZSBhcHBydGMgQXBwRW5naW5lIHdlYmFwcC4KLSAqCi0gKiA8cD5UbyB1c2U6IGNyZWF0ZSBhbiBp
bnN0YW5jZSBvZiB0aGlzIG9iamVjdCAocmVnaXN0ZXJpbmcgYSBtZXNzYWdlIGhhbmRsZXIpIGFu
ZAotICogY2FsbCBjb25uZWN0VG9Sb29tKCkuICBPbmNlIHJvb20gY29ubmVjdGlvbiBpcyBlc3Rh
Ymxpc2hlZAotICogb25Db25uZWN0ZWRUb1Jvb20oKSBjYWxsYmFjayB3aXRoIHJvb20gcGFyYW1l
dGVycyBpcyBpbnZva2VkLgotICogTWVzc2FnZXMgdG8gb3RoZXIgcGFydHkgKHdpdGggbG9jYWwg
SWNlIGNhbmRpZGF0ZXMgYW5kIGFuc3dlciBTRFApIGNhbgotICogYmUgc2VudCBhZnRlciBXZWJT
b2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZC4KLSAqLwotcHVibGljIGNsYXNzIFdlYlNv
Y2tldFJUQ0NsaWVudCBpbXBsZW1lbnRzIEFwcFJUQ0NsaWVudCwgV2ViU29ja2V0Q2hhbm5lbEV2
ZW50cyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV1NSVENDbGllbnQi
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PTV9KT0lOID0gImpvaW4iOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PTV9NRVNTQUdFID0gIm1lc3NhZ2UiOwotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUk9PTV9MRUFWRSA9ICJsZWF2ZSI7Ci0KLSAgcHJp
dmF0ZSBlbnVtIENvbm5lY3Rpb25TdGF0ZSB7IE5FVywgQ09OTkVDVEVELCBDTE9TRUQsIEVSUk9S
IH0KLQotICBwcml2YXRlIGVudW0gTWVzc2FnZVR5cGUgeyBNRVNTQUdFLCBMRUFWRSB9Ci0KLSAg
cHJpdmF0ZSBmaW5hbCBIYW5kbGVyIGhhbmRsZXI7Ci0gIHByaXZhdGUgYm9vbGVhbiBpbml0aWF0
b3I7Ci0gIHByaXZhdGUgU2lnbmFsaW5nRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50IHdzQ2xpZW50OwotICBwcml2YXRlIENvbm5lY3Rpb25TdGF0ZSByb29t
U3RhdGU7Ci0gIHByaXZhdGUgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJh
bWV0ZXJzOwotICBwcml2YXRlIFN0cmluZyBtZXNzYWdlVXJsOwotICBwcml2YXRlIFN0cmluZyBs
ZWF2ZVVybDsKLQotICBwdWJsaWMgV2ViU29ja2V0UlRDQ2xpZW50KFNpZ25hbGluZ0V2ZW50cyBl
dmVudHMpIHsKLSAgICB0aGlzLmV2ZW50cyA9IGV2ZW50czsKLSAgICByb29tU3RhdGUgPSBDb25u
ZWN0aW9uU3RhdGUuTkVXOwotICAgIGZpbmFsIEhhbmRsZXJUaHJlYWQgaGFuZGxlclRocmVhZCA9
IG5ldyBIYW5kbGVyVGhyZWFkKFRBRyk7Ci0gICAgaGFuZGxlclRocmVhZC5zdGFydCgpOwotICAg
IGhhbmRsZXIgPSBuZXcgSGFuZGxlcihoYW5kbGVyVGhyZWFkLmdldExvb3BlcigpKTsKLSAgfQot
Ci0gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gIC8vIEFwcFJUQ0NsaWVudCBpbnRlcmZhY2UgaW1wbGVtZW50
YXRpb24uCi0gIC8vIEFzeW5jaHJvbm91c2x5IGNvbm5lY3QgdG8gYW4gQXBwUlRDIHJvb20gVVJM
IHVzaW5nIHN1cHBsaWVkIGNvbm5lY3Rpb24KLSAgLy8gcGFyYW1ldGVycywgcmV0cmlldmVzIHJv
b20gcGFyYW1ldGVycyBhbmQgY29ubmVjdCB0byBXZWJTb2NrZXQgc2VydmVyLgotICBAT3ZlcnJp
ZGUKLSAgcHVibGljIHZvaWQgY29ubmVjdFRvUm9vbShSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMg
Y29ubmVjdGlvblBhcmFtZXRlcnMpIHsKLSAgICB0aGlzLmNvbm5lY3Rpb25QYXJhbWV0ZXJzID0g
Y29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjb25u
ZWN0VG9Sb29tSW50ZXJuYWwoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBkaXNjb25uZWN0RnJvbVJvb20oKSB7Ci0gICAgaGFuZGxlci5wb3N0
KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgICBkaXNjb25uZWN0RnJvbVJvb21JbnRlcm5hbCgpOwotICAgICAgICBoYW5k
bGVyLmdldExvb3BlcigpLnF1aXQoKTsKLSAgICAgIH0KLSAgICB9KTsKLSAgfQotCi0gIC8vIENv
bm5lY3RzIHRvIHJvb20gLSBmdW5jdGlvbiBydW5zIG9uIGEgbG9jYWwgbG9vcGVyIHRocmVhZC4K
LSAgcHJpdmF0ZSB2b2lkIGNvbm5lY3RUb1Jvb21JbnRlcm5hbCgpIHsKLSAgICBTdHJpbmcgY29u
bmVjdGlvblVybCA9IGdldENvbm5lY3Rpb25VcmwoY29ubmVjdGlvblBhcmFtZXRlcnMpOwotICAg
IExvZy5kKFRBRywgIkNvbm5lY3QgdG8gcm9vbTogIiArIGNvbm5lY3Rpb25VcmwpOwotICAgIHJv
b21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5ORVc7Ci0gICAgd3NDbGllbnQgPSBuZXcgV2ViU29j
a2V0Q2hhbm5lbENsaWVudChoYW5kbGVyLCB0aGlzKTsKLQotICAgIFJvb21QYXJhbWV0ZXJzRmV0
Y2hlckV2ZW50cyBjYWxsYmFja3MgPSBuZXcgUm9vbVBhcmFtZXRlcnNGZXRjaGVyRXZlbnRzKCkg
ewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBvblNpZ25hbGluZ1BhcmFtZXRl
cnNSZWFkeShmaW5hbCBTaWduYWxpbmdQYXJhbWV0ZXJzIHBhcmFtcykgewotICAgICAgICBXZWJT
b2NrZXRSVENDbGllbnQudGhpcy5oYW5kbGVyLnBvc3QobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
ICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAg
IFdlYlNvY2tldFJUQ0NsaWVudC50aGlzLnNpZ25hbGluZ1BhcmFtZXRlcnNSZWFkeShwYXJhbXMp
OwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0KLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgb25TaWduYWxpbmdQYXJhbWV0ZXJzRXJyb3IoU3RyaW5nIGRlc2Ny
aXB0aW9uKSB7Ci0gICAgICAgIFdlYlNvY2tldFJUQ0NsaWVudC50aGlzLnJlcG9ydEVycm9yKGRl
c2NyaXB0aW9uKTsKLSAgICAgIH0KLSAgICB9OwotCi0gICAgbmV3IFJvb21QYXJhbWV0ZXJzRmV0
Y2hlcihjb25uZWN0aW9uVXJsLCBudWxsLCBjYWxsYmFja3MpLm1ha2VSZXF1ZXN0KCk7Ci0gIH0K
LQotICAvLyBEaXNjb25uZWN0IGZyb20gcm9vbSBhbmQgc2VuZCBieWUgbWVzc2FnZXMgLSBydW5z
IG9uIGEgbG9jYWwgbG9vcGVyIHRocmVhZC4KLSAgcHJpdmF0ZSB2b2lkIGRpc2Nvbm5lY3RGcm9t
Um9vbUludGVybmFsKCkgewotICAgIExvZy5kKFRBRywgIkRpc2Nvbm5lY3QuIFJvb20gc3RhdGU6
ICIgKyByb29tU3RhdGUpOwotICAgIGlmIChyb29tU3RhdGUgPT0gQ29ubmVjdGlvblN0YXRlLkNP
Tk5FQ1RFRCkgewotICAgICAgTG9nLmQoVEFHLCAiQ2xvc2luZyByb29tLiIpOwotICAgICAgc2Vu
ZFBvc3RNZXNzYWdlKE1lc3NhZ2VUeXBlLkxFQVZFLCBsZWF2ZVVybCwgbnVsbCk7Ci0gICAgfQot
ICAgIHJvb21TdGF0ZSA9IENvbm5lY3Rpb25TdGF0ZS5DTE9TRUQ7Ci0gICAgaWYgKHdzQ2xpZW50
ICE9IG51bGwpIHsKLSAgICAgIHdzQ2xpZW50LmRpc2Nvbm5lY3QodHJ1ZSk7Ci0gICAgfQotICB9
Ci0KLSAgLy8gSGVscGVyIGZ1bmN0aW9ucyB0byBnZXQgY29ubmVjdGlvbiwgcG9zdCBtZXNzYWdl
IGFuZCBsZWF2ZSBtZXNzYWdlIFVSTHMKLSAgcHJpdmF0ZSBTdHJpbmcgZ2V0Q29ubmVjdGlvblVy
bChSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlvblBhcmFtZXRlcnMpIHsKLSAgICBy
ZXR1cm4gY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbVVybCArICIvIiArIFJPT01fSk9JTiArICIv
IiArIGNvbm5lY3Rpb25QYXJhbWV0ZXJzLnJvb21JZDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5n
IGdldE1lc3NhZ2VVcmwoCi0gICAgICBSb29tQ29ubmVjdGlvblBhcmFtZXRlcnMgY29ubmVjdGlv
blBhcmFtZXRlcnMsIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVycykgewot
ICAgIHJldHVybiBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tVXJsICsgIi8iICsgUk9PTV9NRVNT
QUdFICsgIi8iICsgY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbUlkCi0gICAgICAgICsgIi8iICsg
c2lnbmFsaW5nUGFyYW1ldGVycy5jbGllbnRJZDsKLSAgfQotCi0gIHByaXZhdGUgU3RyaW5nIGdl
dExlYXZlVXJsKAotICAgICAgUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNvbm5lY3Rpb25QYXJh
bWV0ZXJzLCBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnMpIHsKLSAgICBy
ZXR1cm4gY29ubmVjdGlvblBhcmFtZXRlcnMucm9vbVVybCArICIvIiArIFJPT01fTEVBVkUgKyAi
LyIgKyBjb25uZWN0aW9uUGFyYW1ldGVycy5yb29tSWQgKyAiLyIKLSAgICAgICAgKyBzaWduYWxp
bmdQYXJhbWV0ZXJzLmNsaWVudElkOwotICB9Ci0KLSAgLy8gQ2FsbGJhY2sgaXNzdWVkIHdoZW4g
cm9vbSBwYXJhbWV0ZXJzIGFyZSBleHRyYWN0ZWQuIFJ1bnMgb24gbG9jYWwKLSAgLy8gbG9vcGVy
IHRocmVhZC4KLSAgcHJpdmF0ZSB2b2lkIHNpZ25hbGluZ1BhcmFtZXRlcnNSZWFkeShmaW5hbCBT
aWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRlcnMpIHsKLSAgICBMb2cuZChUQUcs
ICJSb29tIGNvbm5lY3Rpb24gY29tcGxldGVkLiIpOwotICAgIGlmIChjb25uZWN0aW9uUGFyYW1l
dGVycy5sb29wYmFjawotICAgICAgICAmJiAoIXNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlhdG9y
IHx8IHNpZ25hbGluZ1BhcmFtZXRlcnMub2ZmZXJTZHAgIT0gbnVsbCkpIHsKLSAgICAgIHJlcG9y
dEVycm9yKCJMb29wYmFjayByb29tIGlzIGJ1c3kuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIGlmICghY29ubmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2sgJiYgIXNpZ25hbGluZ1BhcmFt
ZXRlcnMuaW5pdGlhdG9yCi0gICAgICAgICYmIHNpZ25hbGluZ1BhcmFtZXRlcnMub2ZmZXJTZHAg
PT0gbnVsbCkgewotICAgICAgTG9nLncoVEFHLCAiTm8gb2ZmZXIgU0RQIGluIHJvb20gcmVzcG9u
c2UuIik7Ci0gICAgfQotICAgIGluaXRpYXRvciA9IHNpZ25hbGluZ1BhcmFtZXRlcnMuaW5pdGlh
dG9yOwotICAgIG1lc3NhZ2VVcmwgPSBnZXRNZXNzYWdlVXJsKGNvbm5lY3Rpb25QYXJhbWV0ZXJz
LCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLSAgICBsZWF2ZVVybCA9IGdldExlYXZlVXJsKGNvbm5l
Y3Rpb25QYXJhbWV0ZXJzLCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLSAgICBMb2cuZChUQUcsICJN
ZXNzYWdlIFVSTDogIiArIG1lc3NhZ2VVcmwpOwotICAgIExvZy5kKFRBRywgIkxlYXZlIFVSTDog
IiArIGxlYXZlVXJsKTsKLSAgICByb29tU3RhdGUgPSBDb25uZWN0aW9uU3RhdGUuQ09OTkVDVEVE
OwotCi0gICAgLy8gRmlyZSBjb25uZWN0aW9uIGFuZCBzaWduYWxpbmcgcGFyYW1ldGVycyBldmVu
dHMuCi0gICAgZXZlbnRzLm9uQ29ubmVjdGVkVG9Sb29tKHNpZ25hbGluZ1BhcmFtZXRlcnMpOwot
Ci0gICAgLy8gQ29ubmVjdCBhbmQgcmVnaXN0ZXIgV2ViU29ja2V0IGNsaWVudC4KLSAgICB3c0Ns
aWVudC5jb25uZWN0KHNpZ25hbGluZ1BhcmFtZXRlcnMud3NzVXJsLCBzaWduYWxpbmdQYXJhbWV0
ZXJzLndzc1Bvc3RVcmwpOwotICAgIHdzQ2xpZW50LnJlZ2lzdGVyKGNvbm5lY3Rpb25QYXJhbWV0
ZXJzLnJvb21JZCwgc2lnbmFsaW5nUGFyYW1ldGVycy5jbGllbnRJZCk7Ci0gIH0KLQotICAvLyBT
ZW5kIGxvY2FsIG9mZmVyIFNEUCB0byB0aGUgb3RoZXIgcGFydGljaXBhbnQuCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBzZW5kT2ZmZXJTZHAoZmluYWwgU2Vzc2lvbkRlc2NyaXB0aW9uIHNk
cCkgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUK
LSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgaWYgKHJvb21TdGF0ZSAhPSBDb25u
ZWN0aW9uU3RhdGUuQ09OTkVDVEVEKSB7Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcg
b2ZmZXIgU0RQIGluIG5vbiBjb25uZWN0ZWQgc3RhdGUuIik7Ci0gICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIEpTT05PYmplY3QganNvbiA9IG5ldyBKU09OT2JqZWN0KCk7Ci0g
ICAgICAgIGpzb25QdXQoanNvbiwgInNkcCIsIHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAgIGpz
b25QdXQoanNvbiwgInR5cGUiLCAib2ZmZXIiKTsKLSAgICAgICAgc2VuZFBvc3RNZXNzYWdlKE1l
c3NhZ2VUeXBlLk1FU1NBR0UsIG1lc3NhZ2VVcmwsIGpzb24udG9TdHJpbmcoKSk7Ci0gICAgICAg
IGlmIChjb25uZWN0aW9uUGFyYW1ldGVycy5sb29wYmFjaykgewotICAgICAgICAgIC8vIEluIGxv
b3BiYWNrIG1vZGUgcmVuYW1lIHRoaXMgb2ZmZXIgdG8gYW5zd2VyIGFuZCByb3V0ZSBpdCBiYWNr
LgotICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbiBzZHBBbnN3ZXIgPSBuZXcgU2Vzc2lvbkRl
c2NyaXB0aW9uKAotICAgICAgICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fu
b25pY2FsRm9ybSgiYW5zd2VyIiksIHNkcC5kZXNjcmlwdGlvbik7Ci0gICAgICAgICAgZXZlbnRz
Lm9uUmVtb3RlRGVzY3JpcHRpb24oc2RwQW5zd2VyKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0pOwotICB9Ci0KLSAgLy8gU2VuZCBsb2NhbCBhbnN3ZXIgU0RQIHRvIHRoZSBvdGhlciBwYXJ0
aWNpcGFudC4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNlbmRBbnN3ZXJTZHAoZmluYWwg
U2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
aWYgKGNvbm5lY3Rpb25QYXJhbWV0ZXJzLmxvb3BiYWNrKSB7Ci0gICAgICAgICAgTG9nLmUoVEFH
LCAiU2VuZGluZyBhbnN3ZXIgaW4gbG9vcGJhY2sgbW9kZS4iKTsKLSAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgSlNPTk9iamVjdCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsK
LSAgICAgICAganNvblB1dChqc29uLCAic2RwIiwgc2RwLmRlc2NyaXB0aW9uKTsKLSAgICAgICAg
anNvblB1dChqc29uLCAidHlwZSIsICJhbnN3ZXIiKTsKLSAgICAgICAgd3NDbGllbnQuc2VuZChq
c29uLnRvU3RyaW5nKCkpOwotICAgICAgfQotICAgIH0pOwotICB9Ci0KLSAgLy8gU2VuZCBJY2Ug
Y2FuZGlkYXRlIHRvIHRoZSBvdGhlciBwYXJ0aWNpcGFudC4KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIHNlbmRMb2NhbEljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRl
KSB7Ci0gICAgaGFuZGxlci5wb3N0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcg
SlNPTk9iamVjdCgpOwotICAgICAgICBqc29uUHV0KGpzb24sICJ0eXBlIiwgImNhbmRpZGF0ZSIp
OwotICAgICAgICBqc29uUHV0KGpzb24sICJsYWJlbCIsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4
KTsKLSAgICAgICAganNvblB1dChqc29uLCAiaWQiLCBjYW5kaWRhdGUuc2RwTWlkKTsKLSAgICAg
ICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlIiwgY2FuZGlkYXRlLnNkcCk7Ci0gICAgICAgIGlm
IChpbml0aWF0b3IpIHsKLSAgICAgICAgICAvLyBDYWxsIGluaXRpYXRvciBzZW5kcyBpY2UgY2Fu
ZGlkYXRlcyB0byBHQUUgc2VydmVyLgotICAgICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVj
dGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAgICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcg
SUNFIGNhbmRpZGF0ZSBpbiBub24gY29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgIH0KLSAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoTWVzc2FnZVR5cGUu
TUVTU0FHRSwgbWVzc2FnZVVybCwganNvbi50b1N0cmluZygpKTsKLSAgICAgICAgICBpZiAoY29u
bmVjdGlvblBhcmFtZXRlcnMubG9vcGJhY2spIHsKLSAgICAgICAgICAgIGV2ZW50cy5vblJlbW90
ZUljZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAvLyBDYWxsIHJlY2VpdmVyIHNlbmRzIGljZSBjYW5kaWRhdGVzIHRvIHdlYnNv
Y2tldCBzZXJ2ZXIuCi0gICAgICAgICAgd3NDbGllbnQuc2VuZChqc29uLnRvU3RyaW5nKCkpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyBTZW5kIHJlbW92ZWQgSWNl
IGNhbmRpZGF0ZXMgdG8gdGhlIG90aGVyIHBhcnRpY2lwYW50LgotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgc2VuZExvY2FsSWNlQ2FuZGlkYXRlUmVtb3ZhbHMoZmluYWwgSWNlQ2FuZGlkYXRl
W10gY2FuZGlkYXRlcykgewotICAgIGhhbmRsZXIucG9zdChuZXcgUnVubmFibGUoKSB7Ci0gICAg
ICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgSlNPTk9iamVj
dCBqc29uID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAganNvblB1dChqc29uLCAidHlwZSIs
ICJyZW1vdmUtY2FuZGlkYXRlcyIpOwotICAgICAgICBKU09OQXJyYXkganNvbkFycmF5ID0gbmV3
IEpTT05BcnJheSgpOwotICAgICAgICBmb3IgKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUg
OiBjYW5kaWRhdGVzKSB7Ci0gICAgICAgICAganNvbkFycmF5LnB1dCh0b0pzb25DYW5kaWRhdGUo
Y2FuZGlkYXRlKSk7Ci0gICAgICAgIH0KLSAgICAgICAganNvblB1dChqc29uLCAiY2FuZGlkYXRl
cyIsIGpzb25BcnJheSk7Ci0gICAgICAgIGlmIChpbml0aWF0b3IpIHsKLSAgICAgICAgICAvLyBD
YWxsIGluaXRpYXRvciBzZW5kcyBpY2UgY2FuZGlkYXRlcyB0byBHQUUgc2VydmVyLgotICAgICAg
ICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkNPTk5FQ1RFRCkgewotICAgICAg
ICAgICAgcmVwb3J0RXJyb3IoIlNlbmRpbmcgSUNFIGNhbmRpZGF0ZSByZW1vdmFscyBpbiBub24g
Y29ubmVjdGVkIHN0YXRlLiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgIH0KLSAg
ICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoTWVzc2FnZVR5cGUuTUVTU0FHRSwgbWVzc2FnZVVybCwg
anNvbi50b1N0cmluZygpKTsKLSAgICAgICAgICBpZiAoY29ubmVjdGlvblBhcmFtZXRlcnMubG9v
cGJhY2spIHsKLSAgICAgICAgICAgIGV2ZW50cy5vblJlbW90ZUljZUNhbmRpZGF0ZXNSZW1vdmVk
KGNhbmRpZGF0ZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAv
LyBDYWxsIHJlY2VpdmVyIHNlbmRzIGljZSBjYW5kaWRhdGVzIHRvIHdlYnNvY2tldCBzZXJ2ZXIu
Ci0gICAgICAgICAgd3NDbGllbnQuc2VuZChqc29uLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfSk7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBXZWJTb2NrZXRD
aGFubmVsRXZlbnRzIGludGVyZmFjZSBpbXBsZW1lbnRhdGlvbi4KLSAgLy8gQWxsIGV2ZW50cyBh
cmUgY2FsbGVkIGJ5IFdlYlNvY2tldENoYW5uZWxDbGllbnQgb24gYSBsb2NhbCBsb29wZXIgdGhy
ZWFkCi0gIC8vIChwYXNzZWQgdG8gV2ViU29ja2V0IGNsaWVudCBjb25zdHJ1Y3RvcikuCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvbldlYlNvY2tldE1lc3NhZ2UoZmluYWwgU3RyaW5nIG1z
ZykgewotICAgIGlmICh3c0NsaWVudC5nZXRTdGF0ZSgpICE9IFdlYlNvY2tldENvbm5lY3Rpb25T
dGF0ZS5SRUdJU1RFUkVEKSB7Ci0gICAgICBMb2cuZShUQUcsICJHb3QgV2ViU29ja2V0IG1lc3Nh
Z2UgaW4gbm9uIHJlZ2lzdGVyZWQgc3RhdGUuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IHRyeSB7Ci0gICAgICBKU09OT2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdChtc2cpOwotICAg
ICAgU3RyaW5nIG1zZ1RleHQgPSBqc29uLmdldFN0cmluZygibXNnIik7Ci0gICAgICBTdHJpbmcg
ZXJyb3JUZXh0ID0ganNvbi5vcHRTdHJpbmcoImVycm9yIik7Ci0gICAgICBpZiAobXNnVGV4dC5s
ZW5ndGgoKSA+IDApIHsKLSAgICAgICAganNvbiA9IG5ldyBKU09OT2JqZWN0KG1zZ1RleHQpOwot
ICAgICAgICBTdHJpbmcgdHlwZSA9IGpzb24ub3B0U3RyaW5nKCJ0eXBlIik7Ci0gICAgICAgIGlm
ICh0eXBlLmVxdWFscygiY2FuZGlkYXRlIikpIHsKLSAgICAgICAgICBldmVudHMub25SZW1vdGVJ
Y2VDYW5kaWRhdGUodG9KYXZhQ2FuZGlkYXRlKGpzb24pKTsKLSAgICAgICAgfSBlbHNlIGlmICh0
eXBlLmVxdWFscygicmVtb3ZlLWNhbmRpZGF0ZXMiKSkgewotICAgICAgICAgIEpTT05BcnJheSBj
YW5kaWRhdGVBcnJheSA9IGpzb24uZ2V0SlNPTkFycmF5KCJjYW5kaWRhdGVzIik7Ci0gICAgICAg
ICAgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcyA9IG5ldyBJY2VDYW5kaWRhdGVbY2FuZGlkYXRl
QXJyYXkubGVuZ3RoKCldOwotICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2FuZGlkYXRl
QXJyYXkubGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgY2FuZGlkYXRlc1tpXSA9IHRvSmF2
YUNhbmRpZGF0ZShjYW5kaWRhdGVBcnJheS5nZXRKU09OT2JqZWN0KGkpKTsKLSAgICAgICAgICB9
Ci0gICAgICAgICAgZXZlbnRzLm9uUmVtb3RlSWNlQ2FuZGlkYXRlc1JlbW92ZWQoY2FuZGlkYXRl
cyk7Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoImFuc3dlciIpKSB7Ci0gICAgICAg
ICAgaWYgKGluaXRpYXRvcikgewotICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCA9
IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgICAgICAgICAgU2Vzc2lvbkRlc2NyaXB0
aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0odHlwZSksIGpzb24uZ2V0U3RyaW5nKCJzZHAiKSk7
Ci0gICAgICAgICAgICBldmVudHMub25SZW1vdGVEZXNjcmlwdGlvbihzZHApOwotICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICByZXBvcnRFcnJvcigiUmVjZWl2ZWQgYW5zd2VyIGZvciBj
YWxsIGluaXRpYXRvcjogIiArIG1zZyk7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KHR5cGUuZXF1YWxzKCJvZmZlciIpKSB7Ci0gICAgICAgICAgaWYgKCFpbml0aWF0b3IpIHsKLSAg
ICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbiBzZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9u
KAotICAgICAgICAgICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxG
b3JtKHR5cGUpLCBqc29uLmdldFN0cmluZygic2RwIikpOwotICAgICAgICAgICAgZXZlbnRzLm9u
UmVtb3RlRGVzY3JpcHRpb24oc2RwKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
cmVwb3J0RXJyb3IoIlJlY2VpdmVkIG9mZmVyIGZvciBjYWxsIHJlY2VpdmVyOiAiICsgbXNnKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAodHlwZS5lcXVhbHMoImJ5ZSIpKSB7Ci0g
ICAgICAgICAgZXZlbnRzLm9uQ2hhbm5lbENsb3NlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgcmVwb3J0RXJyb3IoIlVuZXhwZWN0ZWQgV2ViU29ja2V0IG1lc3NhZ2U6ICIgKyBtc2cp
OwotICAgICAgICB9Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXJyb3JUZXh0ICE9IG51
bGwgJiYgZXJyb3JUZXh0Lmxlbmd0aCgpID4gMCkgewotICAgICAgICAgIHJlcG9ydEVycm9yKCJX
ZWJTb2NrZXQgZXJyb3IgbWVzc2FnZTogIiArIGVycm9yVGV4dCk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgcmVwb3J0RXJyb3IoIlVuZXhwZWN0ZWQgV2ViU29ja2V0IG1lc3NhZ2U6ICIg
KyBtc2cpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBjYXRjaCAoSlNPTkV4Y2VwdGlvbiBl
KSB7Ci0gICAgICByZXBvcnRFcnJvcigiV2ViU29ja2V0IG1lc3NhZ2UgSlNPTiBwYXJzaW5nIGVy
cm9yOiAiICsgZS50b1N0cmluZygpKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25XZWJTb2NrZXRDbG9zZSgpIHsKLSAgICBldmVudHMub25DaGFubmVsQ2xvc2Uo
KTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbldlYlNvY2tldEVycm9yKFN0
cmluZyBkZXNjcmlwdGlvbikgewotICAgIHJlcG9ydEVycm9yKCJXZWJTb2NrZXQgZXJyb3I6ICIg
KyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAvLyBIZWxwZXIgZnVu
Y3Rpb25zLgotICBwcml2YXRlIHZvaWQgcmVwb3J0RXJyb3IoZmluYWwgU3RyaW5nIGVycm9yTWVz
c2FnZSkgewotICAgIExvZy5lKFRBRywgZXJyb3JNZXNzYWdlKTsKLSAgICBoYW5kbGVyLnBvc3Qo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIGlmIChyb29tU3RhdGUgIT0gQ29ubmVjdGlvblN0YXRlLkVSUk9SKSB7Ci0g
ICAgICAgICAgcm9vbVN0YXRlID0gQ29ubmVjdGlvblN0YXRlLkVSUk9SOwotICAgICAgICAgIGV2
ZW50cy5vbkNoYW5uZWxFcnJvcihlcnJvck1lc3NhZ2UpOwotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfSk7Ci0gIH0KLQotICAvLyBQdXQgYSB8a2V5fC0+fHZhbHVlfCBtYXBwaW5nIGluIHxqc29u
fC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBqc29uUHV0KEpTT05PYmplY3QganNvbiwgU3RyaW5n
IGtleSwgT2JqZWN0IHZhbHVlKSB7Ci0gICAgdHJ5IHsKLSAgICAgIGpzb24ucHV0KGtleSwgdmFs
dWUpOwotICAgIH0gY2F0Y2ggKEpTT05FeGNlcHRpb24gZSkgewotICAgICAgdGhyb3cgbmV3IFJ1
bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gU2VuZCBTRFAgb3IgSUNFIGNh
bmRpZGF0ZSB0byBhIHJvb20gc2VydmVyLgotICBwcml2YXRlIHZvaWQgc2VuZFBvc3RNZXNzYWdl
KAotICAgICAgZmluYWwgTWVzc2FnZVR5cGUgbWVzc2FnZVR5cGUsIGZpbmFsIFN0cmluZyB1cmws
IGZpbmFsIFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgU3RyaW5nIGxvZ0luZm8gPSB1cmw7Ci0gICAg
aWYgKG1lc3NhZ2UgIT0gbnVsbCkgewotICAgICAgbG9nSW5mbyArPSAiLiBNZXNzYWdlOiAiICsg
bWVzc2FnZTsKLSAgICB9Ci0gICAgTG9nLmQoVEFHLCAiQy0+R0FFOiAiICsgbG9nSW5mbyk7Ci0g
ICAgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbiBodHRwQ29ubmVjdGlvbiA9Ci0gICAgICAgIG5ldyBB
c3luY0h0dHBVUkxDb25uZWN0aW9uKCJQT1NUIiwgdXJsLCBtZXNzYWdlLCBuZXcgQXN5bmNIdHRw
RXZlbnRzKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIG9u
SHR0cEVycm9yKFN0cmluZyBlcnJvck1lc3NhZ2UpIHsKLSAgICAgICAgICAgIHJlcG9ydEVycm9y
KCJHQUUgUE9TVCBlcnJvcjogIiArIGVycm9yTWVzc2FnZSk7Ci0gICAgICAgICAgfQotCi0gICAg
ICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgb25IdHRwQ29tcGxldGUoU3Ry
aW5nIHJlc3BvbnNlKSB7Ci0gICAgICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT0gTWVzc2FnZVR5
cGUuTUVTU0FHRSkgewotICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgIEpTT05P
YmplY3Qgcm9vbUpzb24gPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZSk7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIHJlc3VsdCA9IHJvb21Kc29uLmdldFN0cmluZygicmVzdWx0Iik7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKCJTVUNDRVNTIikpIHsKLSAgICAgICAgICAgICAg
ICAgIHJlcG9ydEVycm9yKCJHQUUgUE9TVCBlcnJvcjogIiArIHJlc3VsdCk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICB9IGNhdGNoIChKU09ORXhjZXB0aW9uIGUpIHsKLSAgICAg
ICAgICAgICAgICByZXBvcnRFcnJvcigiR0FFIFBPU1QgSlNPTiBlcnJvcjogIiArIGUudG9TdHJp
bmcoKSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAg
ICAgIH0pOwotICAgIGh0dHBDb25uZWN0aW9uLnNlbmQoKTsKLSAgfQotCi0gIC8vIENvbnZlcnRz
IGEgSmF2YSBjYW5kaWRhdGUgdG8gYSBKU09OT2JqZWN0LgotICBwcml2YXRlIEpTT05PYmplY3Qg
dG9Kc29uQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAgICBKU09O
T2JqZWN0IGpzb24gPSBuZXcgSlNPTk9iamVjdCgpOwotICAgIGpzb25QdXQoanNvbiwgImxhYmVs
IiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgpOwotICAgIGpzb25QdXQoanNvbiwgImlkIiwgY2Fu
ZGlkYXRlLnNkcE1pZCk7Ci0gICAganNvblB1dChqc29uLCAiY2FuZGlkYXRlIiwgY2FuZGlkYXRl
LnNkcCk7Ci0gICAgcmV0dXJuIGpzb247Ci0gIH0KLQotICAvLyBDb252ZXJ0cyBhIEpTT04gY2Fu
ZGlkYXRlIHRvIGEgSmF2YSBvYmplY3QuCi0gIEljZUNhbmRpZGF0ZSB0b0phdmFDYW5kaWRhdGUo
SlNPTk9iamVjdCBqc29uKSB0aHJvd3MgSlNPTkV4Y2VwdGlvbiB7Ci0gICAgcmV0dXJuIG5ldyBJ
Y2VDYW5kaWRhdGUoCi0gICAgICAgIGpzb24uZ2V0U3RyaW5nKCJpZCIpLCBqc29uLmdldEludCgi
bGFiZWwiKSwganNvbi5nZXRTdHJpbmcoImNhbmRpZGF0ZSIpKTsKLSAgfQotfQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0aWwvQXBwUlRDVXRpbHMuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9BcHBSVENVdGlscy5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9BcHBS
VENVdGlscy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGMudXRpbDsKLQotaW1wb3J0IGFuZHJv
aWQub3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotLyoqCi0gKiBBcHBSVENV
dGlscyBwcm92aWRlcyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0aHJlYWQgc2FmZXR5
LgotICovCi1wdWJsaWMgZmluYWwgY2xhc3MgQXBwUlRDVXRpbHMgewotICBwcml2YXRlIEFwcFJU
Q1V0aWxzKCkge30KLQotICAvKiogSGVscGVyIG1ldGhvZCB3aGljaCB0aHJvd3MgYW4gZXhjZXB0
aW9uICB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVkLiAqLwotICBwdWJsaWMgc3RhdGljIHZv
aWQgYXNzZXJ0SXNUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24p
IHsKLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRv
IGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICAvKiogSGVscGVyIG1ldGhvZCBmb3IgYnVpbGRp
bmcgYSBzdHJpbmcgb2YgdGhyZWFkIGluZm9ybWF0aW9uLiovCi0gIHB1YmxpYyBzdGF0aWMgU3Ry
aW5nIGdldFRocmVhZEluZm8oKSB7Ci0gICAgcmV0dXJuICJAW25hbWU9IiArIFRocmVhZC5jdXJy
ZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgIiwgaWQ9IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCku
Z2V0SWQoKQotICAgICAgICArICJdIjsKLSAgfQotCi0gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCB0
aGUgY3VycmVudCBidWlsZCwgdGFrZW4gZnJvbSBzeXN0ZW0gcHJvcGVydGllcy4gKi8KLSAgcHVi
bGljIHN0YXRpYyB2b2lkIGxvZ0RldmljZUluZm8oU3RyaW5nIHRhZykgewotICAgIExvZy5kKHRh
ZywgIkFuZHJvaWQgU0RLOiAiICsgQnVpbGQuVkVSU0lPTi5TREtfSU5UICsgIiwgIgotICAgICAg
ICAgICAgKyAiUmVsZWFzZTogIiArIEJ1aWxkLlZFUlNJT04uUkVMRUFTRSArICIsICIKLSAgICAg
ICAgICAgICsgIkJyYW5kOiAiICsgQnVpbGQuQlJBTkQgKyAiLCAiCi0gICAgICAgICAgICArICJE
ZXZpY2U6ICIgKyBCdWlsZC5ERVZJQ0UgKyAiLCAiCi0gICAgICAgICAgICArICJJZDogIiArIEJ1
aWxkLklEICsgIiwgIgotICAgICAgICAgICAgKyAiSGFyZHdhcmU6ICIgKyBCdWlsZC5IQVJEV0FS
RSArICIsICIKLSAgICAgICAgICAgICsgIk1hbnVmYWN0dXJlcjogIiArIEJ1aWxkLk1BTlVGQUNU
VVJFUiArICIsICIKLSAgICAgICAgICAgICsgIk1vZGVsOiAiICsgQnVpbGQuTU9ERUwgKyAiLCAi
Ci0gICAgICAgICAgICArICJQcm9kdWN0OiAiICsgQnVpbGQuUFJPRFVDVCk7Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FzeW5jSHR0cFVSTENvbm5lY3Rp
b24uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdXRpbC9B
c3luY0h0dHBVUkxDb25uZWN0aW9uLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3Jj
L29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FzeW5jSHR0cFVSTENvbm5lY3Rpb24uamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDExOSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE1IFRoZSBX
ZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy5hcHBzcG90LmFwcHJ0Yy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsK
LWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFt
OwotaW1wb3J0IGphdmEubmV0Lkh0dHBVUkxDb25uZWN0aW9uOwotaW1wb3J0IGphdmEubmV0LlNv
Y2tldFRpbWVvdXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEu
dXRpbC5TY2FubmVyOwotCi0vKioKLSAqIEFzeW5jaHJvbm91cyBodHRwIHJlcXVlc3RzIGltcGxl
bWVudGF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgQXN5bmNIdHRwVVJMQ29ubmVjdGlvbiB7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIVFRQX1RJTUVPVVRfTVMgPSA4MDAwOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSFRUUF9PUklHSU4gPSAiaHR0cHM6Ly9hcHByLnRjIjsK
LSAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbWV0aG9kOwotICBwcml2YXRlIGZpbmFsIFN0cmluZyB1
cmw7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIG1lc3NhZ2U7Ci0gIHByaXZhdGUgZmluYWwgQXN5
bmNIdHRwRXZlbnRzIGV2ZW50czsKLSAgcHJpdmF0ZSBTdHJpbmcgY29udGVudFR5cGU7Ci0KLSAg
LyoqCi0gICAqIEh0dHAgcmVxdWVzdHMgY2FsbGJhY2tzLgotICAgKi8KLSAgcHVibGljIGludGVy
ZmFjZSBBc3luY0h0dHBFdmVudHMgewotICAgIHZvaWQgb25IdHRwRXJyb3IoU3RyaW5nIGVycm9y
TWVzc2FnZSk7Ci0gICAgdm9pZCBvbkh0dHBDb21wbGV0ZShTdHJpbmcgcmVzcG9uc2UpOwotICB9
Ci0KLSAgcHVibGljIEFzeW5jSHR0cFVSTENvbm5lY3Rpb24oU3RyaW5nIG1ldGhvZCwgU3RyaW5n
IHVybCwgU3RyaW5nIG1lc3NhZ2UsIEFzeW5jSHR0cEV2ZW50cyBldmVudHMpIHsKLSAgICB0aGlz
Lm1ldGhvZCA9IG1ldGhvZDsKLSAgICB0aGlzLnVybCA9IHVybDsKLSAgICB0aGlzLm1lc3NhZ2Ug
PSBtZXNzYWdlOwotICAgIHRoaXMuZXZlbnRzID0gZXZlbnRzOwotICB9Ci0KLSAgcHVibGljIHZv
aWQgc2V0Q29udGVudFR5cGUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0gICAgdGhpcy5jb250ZW50
VHlwZSA9IGNvbnRlbnRUeXBlOwotICB9Ci0KLSAgcHVibGljIHZvaWQgc2VuZCgpIHsKLSAgICBS
dW5uYWJsZSBydW5IdHRwID0gbmV3IFJ1bm5hYmxlKCkgewotICAgICAgcHVibGljIHZvaWQgcnVu
KCkgewotICAgICAgICBzZW5kSHR0cE1lc3NhZ2UoKTsKLSAgICAgIH0KLSAgICB9OwotICAgIG5l
dyBUaHJlYWQocnVuSHR0cCkuc3RhcnQoKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZW5kSHR0
cE1lc3NhZ2UoKSB7Ci0gICAgdHJ5IHsKLSAgICAgIEh0dHBVUkxDb25uZWN0aW9uIGNvbm5lY3Rp
b24gPSAoSHR0cFVSTENvbm5lY3Rpb24pIG5ldyBVUkwodXJsKS5vcGVuQ29ubmVjdGlvbigpOwot
ICAgICAgYnl0ZVtdIHBvc3REYXRhID0gbmV3IGJ5dGVbMF07Ci0gICAgICBpZiAobWVzc2FnZSAh
PSBudWxsKSB7Ci0gICAgICAgIHBvc3REYXRhID0gbWVzc2FnZS5nZXRCeXRlcygiVVRGLTgiKTsK
LSAgICAgIH0KLSAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdE1ldGhvZChtZXRob2QpOwotICAg
ICAgY29ubmVjdGlvbi5zZXRVc2VDYWNoZXMoZmFsc2UpOwotICAgICAgY29ubmVjdGlvbi5zZXRE
b0lucHV0KHRydWUpOwotICAgICAgY29ubmVjdGlvbi5zZXRDb25uZWN0VGltZW91dChIVFRQX1RJ
TUVPVVRfTVMpOwotICAgICAgY29ubmVjdGlvbi5zZXRSZWFkVGltZW91dChIVFRQX1RJTUVPVVRf
TVMpOwotICAgICAgLy8gVE9ETyhnbGF6bmV2KSAtIHF1ZXJ5IHJlcXVlc3Qgb3JpZ2luIGZyb20g
cHJlZl9yb29tX3NlcnZlcl91cmxfa2V5IHByZWZlcmVuY2VzLgotICAgICAgY29ubmVjdGlvbi5h
ZGRSZXF1ZXN0UHJvcGVydHkoIm9yaWdpbiIsIEhUVFBfT1JJR0lOKTsKLSAgICAgIGJvb2xlYW4g
ZG9PdXRwdXQgPSBmYWxzZTsKLSAgICAgIGlmIChtZXRob2QuZXF1YWxzKCJQT1NUIikpIHsKLSAg
ICAgICAgZG9PdXRwdXQgPSB0cnVlOwotICAgICAgICBjb25uZWN0aW9uLnNldERvT3V0cHV0KHRy
dWUpOwotICAgICAgICBjb25uZWN0aW9uLnNldEZpeGVkTGVuZ3RoU3RyZWFtaW5nTW9kZShwb3N0
RGF0YS5sZW5ndGgpOwotICAgICAgfQotICAgICAgaWYgKGNvbnRlbnRUeXBlID09IG51bGwpIHsK
LSAgICAgICAgY29ubmVjdGlvbi5zZXRSZXF1ZXN0UHJvcGVydHkoIkNvbnRlbnQtVHlwZSIsICJ0
ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04Iik7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBjb25u
ZWN0aW9uLnNldFJlcXVlc3RQcm9wZXJ0eSgiQ29udGVudC1UeXBlIiwgY29udGVudFR5cGUpOwot
ICAgICAgfQotCi0gICAgICAvLyBTZW5kIFBPU1QgcmVxdWVzdC4KLSAgICAgIGlmIChkb091dHB1
dCAmJiBwb3N0RGF0YS5sZW5ndGggPiAwKSB7Ci0gICAgICAgIE91dHB1dFN0cmVhbSBvdXRTdHJl
YW0gPSBjb25uZWN0aW9uLmdldE91dHB1dFN0cmVhbSgpOwotICAgICAgICBvdXRTdHJlYW0ud3Jp
dGUocG9zdERhdGEpOwotICAgICAgICBvdXRTdHJlYW0uY2xvc2UoKTsKLSAgICAgIH0KLQotICAg
ICAgLy8gR2V0IHJlc3BvbnNlLgotICAgICAgaW50IHJlc3BvbnNlQ29kZSA9IGNvbm5lY3Rpb24u
Z2V0UmVzcG9uc2VDb2RlKCk7Ci0gICAgICBpZiAocmVzcG9uc2VDb2RlICE9IDIwMCkgewotICAg
ICAgICBldmVudHMub25IdHRwRXJyb3IoIk5vbi0yMDAgcmVzcG9uc2UgdG8gIiArIG1ldGhvZCAr
ICIgdG8gVVJMOiAiICsgdXJsICsgIiA6ICIKLSAgICAgICAgICAgICsgY29ubmVjdGlvbi5nZXRI
ZWFkZXJGaWVsZChudWxsKSk7Ci0gICAgICAgIGNvbm5lY3Rpb24uZGlzY29ubmVjdCgpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICB9Ci0gICAgICBJbnB1dFN0cmVhbSByZXNwb25zZVN0cmVhbSA9
IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKLSAgICAgIFN0cmluZyByZXNwb25zZSA9IGRy
YWluU3RyZWFtKHJlc3BvbnNlU3RyZWFtKTsKLSAgICAgIHJlc3BvbnNlU3RyZWFtLmNsb3NlKCk7
Ci0gICAgICBjb25uZWN0aW9uLmRpc2Nvbm5lY3QoKTsKLSAgICAgIGV2ZW50cy5vbkh0dHBDb21w
bGV0ZShyZXNwb25zZSk7Ci0gICAgfSBjYXRjaCAoU29ja2V0VGltZW91dEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBldmVudHMub25IdHRwRXJyb3IoIkhUVFAgIiArIG1ldGhvZCArICIgdG8gIiArIHVy
bCArICIgdGltZW91dCIpOwotICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgIGV2
ZW50cy5vbkh0dHBFcnJvcigiSFRUUCAiICsgbWV0aG9kICsgIiB0byAiICsgdXJsICsgIiBlcnJv
cjogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm4gdGhlIGNv
bnRlbnRzIG9mIGFuIElucHV0U3RyZWFtIGFzIGEgU3RyaW5nLgotICBwcml2YXRlIHN0YXRpYyBT
dHJpbmcgZHJhaW5TdHJlYW0oSW5wdXRTdHJlYW0gaW4pIHsKLSAgICBTY2FubmVyIHMgPSBuZXcg
U2Nhbm5lcihpbikudXNlRGVsaW1pdGVyKCJcXEEiKTsKLSAgICByZXR1cm4gcy5oYXNOZXh0KCkg
PyBzLm5leHQoKSA6ICIiOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvdXRpbC9BcHBSVENVdGlscy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy91dGlsL0FwcFJUQ1V0aWxzLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRh
cHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FwcFJUQ1V0aWxzLmphdmEJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMg
UHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5h
cHBzcG90LmFwcHJ0Yy51dGlsOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBh
bmRyb2lkLnV0aWwuTG9nOwotCi0vKioKLSAqIEFwcFJUQ1V0aWxzIHByb3ZpZGVzIGhlbHBlciBm
dW5jdGlvbnMgZm9yIG1hbmFnaW5nIHRocmVhZCBzYWZldHkuCi0gKi8KLXB1YmxpYyBmaW5hbCBj
bGFzcyBBcHBSVENVdGlscyB7Ci0gIHByaXZhdGUgQXBwUlRDVXRpbHMoKSB7fQotCi0gIC8qKiBI
ZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24gIHdoZW4gYW4gYXNzZXJ0aW9u
IGhhcyBmYWlsZWQuICovCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBhc3NlcnRJc1RydWUoYm9vbGVh
biBjb25kaXRpb24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFz
c2VydGlvbkVycm9yKCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAg
fQotCi0gIC8qKiBIZWxwZXIgbWV0aG9kIGZvciBidWlsZGluZyBhIHN0cmluZyBvZiB0aHJlYWQg
aW5mb3JtYXRpb24uKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGhyZWFkSW5mbygpIHsK
LSAgICByZXR1cm4gIkBbbmFtZT0iICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkg
KyAiLCBpZD0iICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRJZCgpCi0gICAgICAgICsgIl0i
OwotICB9Ci0KLSAgLyoqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGJ1aWxkLCB0YWtl
biBmcm9tIHN5c3RlbSBwcm9wZXJ0aWVzLiAqLwotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRGV2
aWNlSW5mbyhTdHJpbmcgdGFnKSB7Ci0gICAgTG9nLmQodGFnLCAiQW5kcm9pZCBTREs6ICIgKyBC
dWlsZC5WRVJTSU9OLlNES19JTlQgKyAiLCAiCi0gICAgICAgICAgICArICJSZWxlYXNlOiAiICsg
QnVpbGQuVkVSU0lPTi5SRUxFQVNFICsgIiwgIgotICAgICAgICAgICAgKyAiQnJhbmQ6ICIgKyBC
dWlsZC5CUkFORCArICIsICIKLSAgICAgICAgICAgICsgIkRldmljZTogIiArIEJ1aWxkLkRFVklD
RSArICIsICIKLSAgICAgICAgICAgICsgIklkOiAiICsgQnVpbGQuSUQgKyAiLCAiCi0gICAgICAg
ICAgICArICJIYXJkd2FyZTogIiArIEJ1aWxkLkhBUkRXQVJFICsgIiwgIgotICAgICAgICAgICAg
KyAiTWFudWZhY3R1cmVyOiAiICsgQnVpbGQuTUFOVUZBQ1RVUkVSICsgIiwgIgotICAgICAgICAg
ICAgKyAiTW9kZWw6ICIgKyBCdWlsZC5NT0RFTCArICIsICIKLSAgICAgICAgICAgICsgIlByb2R1
Y3Q6ICIgKyBCdWlsZC5QUk9EVUNUKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNw
b3QvYXBwcnRjL3V0aWwvQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRhcHAvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy91dGlsL0FzeW5jSHR0cFVSTENvbm5lY3Rpb24u
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3V0
aWwvQXN5bmNIdHRwVVJMQ29ubmVjdGlvbi5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTE5ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTUgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjLnV0
aWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRT
dHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuSHR0
cFVSTENvbm5lY3Rpb247Ci1pbXBvcnQgamF2YS5uZXQuU29ja2V0VGltZW91dEV4Y2VwdGlvbjsK
LWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7Ci0KLS8qKgot
ICogQXN5bmNocm9ub3VzIGh0dHAgcmVxdWVzdHMgaW1wbGVtZW50YXRpb24uCi0gKi8KLXB1Ymxp
YyBjbGFzcyBBc3luY0h0dHBVUkxDb25uZWN0aW9uIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IEhUVFBfVElNRU9VVF9NUyA9IDgwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBIVFRQX09SSUdJTiA9ICJodHRwczovL2FwcHIudGMiOwotICBwcml2YXRlIGZpbmFsIFN0cmlu
ZyBtZXRob2Q7Ci0gIHByaXZhdGUgZmluYWwgU3RyaW5nIHVybDsKLSAgcHJpdmF0ZSBmaW5hbCBT
dHJpbmcgbWVzc2FnZTsKLSAgcHJpdmF0ZSBmaW5hbCBBc3luY0h0dHBFdmVudHMgZXZlbnRzOwot
ICBwcml2YXRlIFN0cmluZyBjb250ZW50VHlwZTsKLQotICAvKioKLSAgICogSHR0cCByZXF1ZXN0
cyBjYWxsYmFja3MuCi0gICAqLwotICBwdWJsaWMgaW50ZXJmYWNlIEFzeW5jSHR0cEV2ZW50cyB7
Ci0gICAgdm9pZCBvbkh0dHBFcnJvcihTdHJpbmcgZXJyb3JNZXNzYWdlKTsKLSAgICB2b2lkIG9u
SHR0cENvbXBsZXRlKFN0cmluZyByZXNwb25zZSk7Ci0gIH0KLQotICBwdWJsaWMgQXN5bmNIdHRw
VVJMQ29ubmVjdGlvbihTdHJpbmcgbWV0aG9kLCBTdHJpbmcgdXJsLCBTdHJpbmcgbWVzc2FnZSwg
QXN5bmNIdHRwRXZlbnRzIGV2ZW50cykgewotICAgIHRoaXMubWV0aG9kID0gbWV0aG9kOwotICAg
IHRoaXMudXJsID0gdXJsOwotICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgdGhpcy5l
dmVudHMgPSBldmVudHM7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBzZXRDb250ZW50VHlwZShTdHJp
bmcgY29udGVudFR5cGUpIHsKLSAgICB0aGlzLmNvbnRlbnRUeXBlID0gY29udGVudFR5cGU7Ci0g
IH0KLQotICBwdWJsaWMgdm9pZCBzZW5kKCkgewotICAgIFJ1bm5hYmxlIHJ1bkh0dHAgPSBuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHNlbmRIdHRw
TWVzc2FnZSgpOwotICAgICAgfQotICAgIH07Ci0gICAgbmV3IFRocmVhZChydW5IdHRwKS5zdGFy
dCgpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNlbmRIdHRwTWVzc2FnZSgpIHsKLSAgICB0cnkg
ewotICAgICAgSHR0cFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IChIdHRwVVJMQ29ubmVjdGlv
bikgbmV3IFVSTCh1cmwpLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICBieXRlW10gcG9zdERhdGEg
PSBuZXcgYnl0ZVswXTsKLSAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKLSAgICAgICAgcG9z
dERhdGEgPSBtZXNzYWdlLmdldEJ5dGVzKCJVVEYtOCIpOwotICAgICAgfQotICAgICAgY29ubmVj
dGlvbi5zZXRSZXF1ZXN0TWV0aG9kKG1ldGhvZCk7Ci0gICAgICBjb25uZWN0aW9uLnNldFVzZUNh
Y2hlcyhmYWxzZSk7Ci0gICAgICBjb25uZWN0aW9uLnNldERvSW5wdXQodHJ1ZSk7Ci0gICAgICBj
b25uZWN0aW9uLnNldENvbm5lY3RUaW1lb3V0KEhUVFBfVElNRU9VVF9NUyk7Ci0gICAgICBjb25u
ZWN0aW9uLnNldFJlYWRUaW1lb3V0KEhUVFBfVElNRU9VVF9NUyk7Ci0gICAgICAvLyBUT0RPKGds
YXpuZXYpIC0gcXVlcnkgcmVxdWVzdCBvcmlnaW4gZnJvbSBwcmVmX3Jvb21fc2VydmVyX3VybF9r
ZXkgcHJlZmVyZW5jZXMuCi0gICAgICBjb25uZWN0aW9uLmFkZFJlcXVlc3RQcm9wZXJ0eSgib3Jp
Z2luIiwgSFRUUF9PUklHSU4pOwotICAgICAgYm9vbGVhbiBkb091dHB1dCA9IGZhbHNlOwotICAg
ICAgaWYgKG1ldGhvZC5lcXVhbHMoIlBPU1QiKSkgewotICAgICAgICBkb091dHB1dCA9IHRydWU7
Ci0gICAgICAgIGNvbm5lY3Rpb24uc2V0RG9PdXRwdXQodHJ1ZSk7Ci0gICAgICAgIGNvbm5lY3Rp
b24uc2V0Rml4ZWRMZW5ndGhTdHJlYW1pbmdNb2RlKHBvc3REYXRhLmxlbmd0aCk7Ci0gICAgICB9
Ci0gICAgICBpZiAoY29udGVudFR5cGUgPT0gbnVsbCkgewotICAgICAgICBjb25uZWN0aW9uLnNl
dFJlcXVlc3RQcm9wZXJ0eSgiQ29udGVudC1UeXBlIiwgInRleHQvcGxhaW47IGNoYXJzZXQ9dXRm
LTgiKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbm5lY3Rpb24uc2V0UmVxdWVzdFByb3Bl
cnR5KCJDb250ZW50LVR5cGUiLCBjb250ZW50VHlwZSk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFNl
bmQgUE9TVCByZXF1ZXN0LgotICAgICAgaWYgKGRvT3V0cHV0ICYmIHBvc3REYXRhLmxlbmd0aCA+
IDApIHsKLSAgICAgICAgT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IGNvbm5lY3Rpb24uZ2V0T3V0
cHV0U3RyZWFtKCk7Ci0gICAgICAgIG91dFN0cmVhbS53cml0ZShwb3N0RGF0YSk7Ci0gICAgICAg
IG91dFN0cmVhbS5jbG9zZSgpOwotICAgICAgfQotCi0gICAgICAvLyBHZXQgcmVzcG9uc2UuCi0g
ICAgICBpbnQgcmVzcG9uc2VDb2RlID0gY29ubmVjdGlvbi5nZXRSZXNwb25zZUNvZGUoKTsKLSAg
ICAgIGlmIChyZXNwb25zZUNvZGUgIT0gMjAwKSB7Ci0gICAgICAgIGV2ZW50cy5vbkh0dHBFcnJv
cigiTm9uLTIwMCByZXNwb25zZSB0byAiICsgbWV0aG9kICsgIiB0byBVUkw6ICIgKyB1cmwgKyAi
IDogIgotICAgICAgICAgICAgKyBjb25uZWN0aW9uLmdldEhlYWRlckZpZWxkKG51bGwpKTsKLSAg
ICAgICAgY29ubmVjdGlvbi5kaXNjb25uZWN0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K
LSAgICAgIElucHV0U3RyZWFtIHJlc3BvbnNlU3RyZWFtID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0
cmVhbSgpOwotICAgICAgU3RyaW5nIHJlc3BvbnNlID0gZHJhaW5TdHJlYW0ocmVzcG9uc2VTdHJl
YW0pOwotICAgICAgcmVzcG9uc2VTdHJlYW0uY2xvc2UoKTsKLSAgICAgIGNvbm5lY3Rpb24uZGlz
Y29ubmVjdCgpOwotICAgICAgZXZlbnRzLm9uSHR0cENvbXBsZXRlKHJlc3BvbnNlKTsKLSAgICB9
IGNhdGNoIChTb2NrZXRUaW1lb3V0RXhjZXB0aW9uIGUpIHsKLSAgICAgIGV2ZW50cy5vbkh0dHBF
cnJvcigiSFRUUCAiICsgbWV0aG9kICsgIiB0byAiICsgdXJsICsgIiB0aW1lb3V0Iik7Ci0gICAg
fSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgICAgZXZlbnRzLm9uSHR0cEVycm9yKCJIVFRQ
ICIgKyBtZXRob2QgKyAiIHRvICIgKyB1cmwgKyAiIGVycm9yOiAiICsgZS5nZXRNZXNzYWdlKCkp
OwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybiB0aGUgY29udGVudHMgb2YgYW4gSW5wdXRTdHJl
YW0gYXMgYSBTdHJpbmcuCi0gIHByaXZhdGUgc3RhdGljIFN0cmluZyBkcmFpblN0cmVhbShJbnB1
dFN0cmVhbSBpbikgewotICAgIFNjYW5uZXIgcyA9IG5ldyBTY2FubmVyKGluKS51c2VEZWxpbWl0
ZXIoIlxcQSIpOwotICAgIHJldHVybiBzLmhhc05leHQoKSA/IHMubmV4dCgpIDogIiI7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvQlVJTEQuZ24KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9CVUlMRC5nbgkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9CVUlMRC5nbgkobm9uZXhpc3RlbnQpCkBAIC0x
LDEzICswLDAgQEAKLSMgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotIwotIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0jIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotIyB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0jIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSMgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0KLWltcG9ydCgiLy9idWlsZC9jb25maWcvYW5kcm9pZC9ydWxlcy5nbmki
KQotCi1hbmRyb2lkX2phdmFfcHJlYnVpbHQoImF1dG9iYW5oX2phdmEiKSB7Ci0gIGphcl9wYXRo
ID0gImxpYi9hdXRvYmFuaC5qYXIiCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5o
L0xJQ0VOU0UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9MSUNFTlNF
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL0xJQ0VOU0UJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwxNzcgKzAsMCBAQAotCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcGFjaGUgTGljZW5zZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVy
c2lvbiAyLjAsIEphbnVhcnkgMjAwNAotICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3
dy5hcGFjaGUub3JnL2xpY2Vuc2VzLwotCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNF
LCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KLQotICAgMS4gRGVmaW5pdGlvbnMuCi0K
LSAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3Ig
dXNlLCByZXByb2R1Y3Rpb24sCi0gICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkg
U2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KLQotICAgICAgIkxpY2Vuc29y
IiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkK
LSAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4K
LQotICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGlu
ZyBlbnRpdHkgYW5kIGFsbAotICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUg
Y29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgotICAgICAgY29udHJvbCB3aXRoIHRo
YXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKLSAgICAgICJj
b250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNl
IHRoZQotICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRo
ZXIgYnkgY29udHJhY3Qgb3IKLSAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2Yg
ZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQotICAgICAgb3V0c3RhbmRpbmcgc2hh
cmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KLQotICAg
ICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVu
dGl0eQotICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5z
ZS4KLQotICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBm
b3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCi0gICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVk
IHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCi0gICAgICBzb3VyY2UsIGFu
ZCBjb25maWd1cmF0aW9uIGZpbGVzLgotCi0gICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4g
YW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAotICAgICAgdHJhbnNmb3JtYXRpb24g
b3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAotICAgICAgbm90
IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9u
LAotICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgotCi0gICAgICAi
V29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJj
ZSBvcgotICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNl
LCBhcyBpbmRpY2F0ZWQgYnkgYQotICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1
ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCi0gICAgICAoYW4gZXhhbXBsZSBpcyBwcm92
aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgotCi0gICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIg
c2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0Ci0gICAgICBm
b3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Ig
d2hpY2ggdGhlCi0gICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9y
YXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCi0gICAgICByZXByZXNlbnQsIGFzIGEgd2hv
bGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcwotICAg
ICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdv
cmtzIHRoYXQgcmVtYWluCi0gICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9y
IGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCi0gICAgICB0aGUgV29yayBhbmQg
RGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgotCi0gICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBt
ZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZwotICAgICAgdGhlIG9yaWdpbmFs
IHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucwot
ICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBp
bnRlbnRpb25hbGx5Ci0gICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBp
biB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCi0gICAgICBvciBieSBhbiBpbmRpdmlk
dWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKLSAg
ICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0
aW9uLCAic3VibWl0dGVkIgotICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVy
YmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAotICAgICAgdG8gdGhlIExpY2Vuc29y
IG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KLSAg
ICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29k
ZSBjb250cm9sIHN5c3RlbXMsCi0gICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0
IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQotICAgICAgTGljZW5zb3IgZm9y
IHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0Ci0g
ICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2Vk
IG9yIG90aGVyd2lzZQotICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmln
aHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCi0KLSAgICAgICJDb250cmlidXRvciIg
c2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0g
ICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBi
eSBMaWNlbnNvciBhbmQKLSAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRo
ZSBXb3JrLgotCi0gICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0
aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250
cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lk
ZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0g
ICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBX
b3JrcyBvZiwKLSAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1Ymxp
Y2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQotICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZl
IFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KLQotICAgMy4gR3JhbnQgb2YgUGF0ZW50
IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCi0gICAgICB0
aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJw
ZXR1YWwsCi0gICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0
eS1mcmVlLCBpcnJldm9jYWJsZQotICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0
aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCi0gICAgICB1c2UsIG9mZmVy
IHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywK
LSAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNs
YWltcyBsaWNlbnNhYmxlCi0gICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vz
c2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgotICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9y
IGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQotICAgICAgd2l0aCB0aGUg
V29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UK
LSAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGlu
Y2x1ZGluZyBhCi0gICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0
KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCi0gICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBv
cmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAotICAgICAgb3IgY29udHJp
YnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcwotICAg
ICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwg
dGVybWluYXRlCi0gICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQu
Ci0KLSAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0
ZSBjb3BpZXMgb2YgdGhlCi0gICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBp
biBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKLSAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBp
biBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91Ci0gICAgICBtZWV0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90
aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKLSAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtz
IGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAotCi0gICAgICAoYikgWW91IG11c3QgY2F1c2Ug
YW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCi0gICAgICAgICAg
c3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCi0KLSAgICAgIChjKSBZb3Ug
bXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3Jrcwot
ICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJh
ZGVtYXJrLCBhbmQKLSAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJj
ZSBmb3JtIG9mIHRoZSBXb3JrLAotICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRo
YXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKLSAgICAgICAgICB0aGUgRGVyaXZhdGl2
ZSBXb3JrczsgYW5kCi0KLSAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0Ui
IHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cwotICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBh
bnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKLSAgICAgICAgICBp
bmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWlu
ZWQKLSAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5v
dGljZXMgdGhhdCBkbyBub3QKLSAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBE
ZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKLSAgICAgICAgICBvZiB0aGUgZm9sbG93
aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAotICAgICAg
ICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZv
cm0gb3IKLSAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRo
ZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKLSAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVy
YXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCi0gICAgICAgICAgd2hlcmV2ZXIg
c3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCi0g
ICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3Nl
cyBvbmx5IGFuZAotICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkg
YWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCi0gICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZh
dGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKLSAgICAgICAgICBvciBh
cyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQK
LSAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5v
dCBiZSBjb25zdHJ1ZWQKLSAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCi0KLSAg
ICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2Rp
ZmljYXRpb25zIGFuZAotICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQg
bGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucwotICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9u
LCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgotICAgICAgZm9yIGFu
eSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCi0g
ICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNl
IGNvbXBsaWVzIHdpdGgKLSAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vu
c2UuCi0KLSAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBs
aWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKLSAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9u
YWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yawotICAgICAgYnkgWW91IHRv
IHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YK
LSAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25k
aXRpb25zLgotICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4g
c2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQotICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0
ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKLSAgICAgIHdpdGggTGlj
ZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KLQotICAgNi4gVHJhZGVtYXJrcy4g
VGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQot
ICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMg
b2YgdGhlIExpY2Vuc29yLAotICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxl
IGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCi0gICAgICBvcmlnaW4gb2YgdGhl
IFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KLQot
ICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi
bGUgbGF3IG9yCi0gICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMg
dGhlIFdvcmsgKGFuZCBlYWNoCi0gICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJp
YnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKLSAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBP
UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgotICAgICAgaW1wbGll
ZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRp
dGlvbnMKLSAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFks
IG9yIEZJVE5FU1MgRk9SIEEKLSAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xl
bHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQotICAgICAgYXBwcm9wcmlhdGVuZXNz
IG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55Ci0gICAg
ICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRl
ciB0aGlzIExpY2Vuc2UuCi0KLSAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBl
dmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAotICAgICAgd2hldGhlciBpbiB0b3J0IChp
bmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCi0gICAgICB1bmxl
c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jv
c3NseQotICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFs
bCBhbnkgQ29udHJpYnV0b3IgYmUKLSAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGlu
Y2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKLSAgICAgIGluY2lkZW50YWws
IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQot
ICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxp
dHkgdG8gdXNlIHRoZQotICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBk
YW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAotICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0
ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKLSAgICAgIG90aGVyIGNv
bW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKLSAg
ICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4K
LQotICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGls
ZSByZWRpc3RyaWJ1dGluZwotICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVy
ZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKLSAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9y
LCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCi0gICAgICBvciBv
dGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGgg
dGhpcwotICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlv
bnMsIFlvdSBtYXkgYWN0IG9ubHkKLSAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91
ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCi0gICAgICBvZiBhbnkgb3RoZXIg
Q29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCi0gICAgICBk
ZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxp
dHkKLSAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBD
b250cmlidXRvciBieSByZWFzb24KLSAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdh
cnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgotCi0gICBFTkQgT0YgVEVSTVMgQU5EIENP
TkRJVElPTlMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRS5tZAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL0xJQ0VOU0UubWQJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRS5tZAkobm9uZXhp
c3RlbnQpCkBAIC0xLDIxICswLDAgQEAKLVRoZSBNSVQgTGljZW5zZSAoTUlUKQotCi1Db3B5cmln
aHQgKGMpIDIwMTQgQ2FtZXJvbiBMb3dlbGwgUGFsbWVyCi0KLVBlcm1pc3Npb24gaXMgaGVyZWJ5
IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkK
LW9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhl
ICJTb2Z0d2FyZSIpLCB0byBkZWFsCi1pbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlv
biwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCi10byB1c2UsIGNvcHks
IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz
ZWxsCi1jb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv
bSB0aGUgU29mdHdhcmUgaXMKLWZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnM6Ci0KLVRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlz
IHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbAotY29waWVzIG9yIHN1
YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLQotVEhFIFNPRlRXQVJFIElTIFBS
T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IK
LUlNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZLAotRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P
TklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi1BVVRIT1JTIE9SIENPUFlSSUdI
VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi1MSUFC
SUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lT
RSwgQVJJU0lORyBGUk9NLAotT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB
UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKLVNPRlRXQVJFLgpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9OT1RJQ0UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGly
ZF9wYXJ0eS9hdXRvYmFuaC9OT1RJQ0UJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRf
cGFydHkvYXV0b2JhbmgvTk9USUNFCShub25leGlzdGVudCkKQEAgLTEsMyArMCwwIEBACi1BdXRv
YmFobkFuZHJvaWQKLUNvcHlyaWdodCAyMDExLDIwMTIgVGF2ZW5kbyBHbWJILiBMaWNlbnNlZCB1
bmRlciBBcGFjaGUgMi4wCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVk
IGF0IFRhdmVuZG8gR21iSCBodHRwOi8vd3d3LnRhdmVuZG8uZGUKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRf
cGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5oLmphcgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL2xpYi9hdXRv
YmFuaC5qYXIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9saWIvYXV0
b2JhbmguamFyCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5o
L2xpYi9hdXRvYmFuaC5qYXIJKG5vbmV4aXN0ZW50KQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9saWIvYXV0b2JhbmguamFyCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRl
ZDogc3ZuOm1pbWUtdHlwZQojIyAtMSArMCwwICMjCi1hcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9h
dXRvYmFuaC9CVUlMRC5nbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5o
L0JVSUxELmduCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5o
L0JVSUxELmduCShub25leGlzdGVudCkKQEAgLTEsMTMgKzAsMCBAQAotIyBDb3B5cmlnaHQgKGMp
IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0j
Ci0jIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSMgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0jIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSMgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFs
bCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotIyBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLQotaW1wb3J0KCIvL2J1
aWxkL2NvbmZpZy9hbmRyb2lkL3J1bGVzLmduaSIpCi0KLWFuZHJvaWRfamF2YV9wcmVidWlsdCgi
YXV0b2JhbmhfamF2YSIpIHsKLSAgamFyX3BhdGggPSAibGliL2F1dG9iYW5oLmphciIKLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3RoaXJkX3BhcnR5L2F1dG9iYW5oL0xJQ0VOU0UJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
dGhpcmRfcGFydHkvYXV0b2JhbmgvTElDRU5TRQkobm9uZXhpc3RlbnQpCkBAIC0xLDE3NyArMCww
IEBACi0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwYWNoZSBMaWNlbnNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDIuMCwgSmFudWFyeSAyMDA0Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvCi0KLSAg
IFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBVU0UsIFJFUFJPRFVDVElPTiwgQU5EIERJU1RSSUJV
VElPTgotCi0gICAxLiBEZWZpbml0aW9ucy4KLQotICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4g
dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwKLSAgICAgIGFu
ZCBkaXN0cmlidXRpb24gYXMgZGVmaW5lZCBieSBTZWN0aW9ucyAxIHRocm91Z2ggOSBvZiB0aGlz
IGRvY3VtZW50LgotCi0gICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBv
d25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQotICAgICAgdGhlIGNvcHlyaWdodCBvd25lciB0
aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgotCi0gICAgICAiTGVnYWwgRW50aXR5IiBzaGFs
bCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsCi0gICAgICBvdGhl
ciBlbnRpdGllcyB0aGF0IGNvbnRyb2wsIGFyZSBjb250cm9sbGVkIGJ5LCBvciBhcmUgdW5kZXIg
Y29tbW9uCi0gICAgICBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMg
b2YgdGhpcyBkZWZpbml0aW9uLAotICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIs
IGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCi0gICAgICBkaXJlY3Rpb24gb3IgbWFu
YWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgotICAgICAgb3Ro
ZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUg
b2YgdGhlCi0gICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3du
ZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgotCi0gICAgICAiWW91IiAob3IgIllvdXIiKSBzaGFsbCBt
ZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5Ci0gICAgICBleGVyY2lzaW5nIHBlcm1p
c3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgotCi0gICAgICAiU291cmNlIiBmb3JtIHNo
YWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywKLSAg
ICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRv
Y3VtZW50YXRpb24KLSAgICAgIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0KLSAg
ICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNo
YW5pY2FsCi0gICAgICB0cmFuc2Zvcm1hdGlvbiBvciB0cmFuc2xhdGlvbiBvZiBhIFNvdXJjZSBm
b3JtLCBpbmNsdWRpbmcgYnV0Ci0gICAgICBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3Qg
Y29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sCi0gICAgICBhbmQgY29udmVyc2lvbnMgdG8g
b3RoZXIgbWVkaWEgdHlwZXMuCi0KLSAgICAgICJXb3JrIiBzaGFsbCBtZWFuIHRoZSB3b3JrIG9m
IGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yCi0gICAgICBPYmplY3QgZm9ybSwgbWFk
ZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhCi0gICAgICBj
b3B5cmlnaHQgbm90aWNlIHRoYXQgaXMgaW5jbHVkZWQgaW4gb3IgYXR0YWNoZWQgdG8gdGhlIHdv
cmsKLSAgICAgIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdyku
Ci0KLSAgICAgICJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVy
IGluIFNvdXJjZSBvciBPYmplY3QKLSAgICAgIGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRl
cml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUKLSAgICAgIGVkaXRvcmlhbCBy
ZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlv
bnMKLSAgICAgIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRo
b3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzCi0gICAgICBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRp
dmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4KLSAgICAgIHNlcGFy
YWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJm
YWNlcyBvZiwKLSAgICAgIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCi0K
LSAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwg
aW5jbHVkaW5nCi0gICAgICB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgV29yayBhbmQgYW55
IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zCi0gICAgICB0byB0aGF0IFdvcmsgb3IgRGVyaXZh
dGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkKLSAgICAgIHN1Ym1pdHRl
ZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQg
b3duZXIKLSAgICAgIG9yIGJ5IGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGF1dGhvcml6
ZWQgdG8gc3VibWl0IG9uIGJlaGFsZiBvZgotICAgICAgdGhlIGNvcHlyaWdodCBvd25lci4gRm9y
IHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiCi0gICAgICBtZWFu
cyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlv
biBzZW50Ci0gICAgICB0byB0aGUgTGljZW5zb3Igb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5j
bHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwotICAgICAgY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJv
bmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywKLSAgICAgIGFu
ZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFs
ZiBvZiwgdGhlCi0gICAgICBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBh
bmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQKLSAgICAgIGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9u
IHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlCi0gICAgICBkZXNpZ25h
dGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0
aW9uLiIKLQotICAgICAgIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkg
aW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKLSAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29u
dHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZAotICAgICAgc3Vic2Vx
dWVudGx5IGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsuCi0KLSAgIDIuIEdyYW50IG9mIENv
cHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgot
ICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91
IGEgcGVycGV0dWFsLAotICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2Us
IHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKLSAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJl
cHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLAotICAgICAgcHVibGljbHkgZGlz
cGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlCi0g
ICAgICBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBm
b3JtLgotCi0gICAzLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVy
bXMgYW5kIGNvbmRpdGlvbnMgb2YKLSAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRv
ciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKLSAgICAgIHdvcmxkd2lkZSwgbm9u
LWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCi0gICAgICAo
ZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pIHBhdGVudCBsaWNlbnNlIHRvIG1ha2Us
IGhhdmUgbWFkZSwKLSAgICAgIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQg
b3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLAotICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFw
cGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUKLSAgICAgIGJ5IHN1
Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyCi0g
ICAgICBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29u
dHJpYnV0aW9uKHMpCi0gICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0
aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQotICAgICAgaW5zdGl0dXRlIHBhdGVudCBsaXRp
Z2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEKLSAgICAgIGNyb3NzLWNsYWlt
IG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsKLSAg
ICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3Rp
dHV0ZXMgZGlyZWN0Ci0gICAgICBvciBjb250cmlidXRvcnkgcGF0ZW50IGluZnJpbmdlbWVudCwg
dGhlbiBhbnkgcGF0ZW50IGxpY2Vuc2VzCi0gICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlz
IExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUKLSAgICAgIGFzIG9mIHRoZSBk
YXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KLQotICAgNC4gUmVkaXN0cmlidXRpb24uIFlv
dSBtYXkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUKLSAgICAgIFdvcmsg
b3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91
dAotICAgICAgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJv
dmlkZWQgdGhhdCBZb3UKLSAgICAgIG1lZXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotCi0g
ICAgICAoYSkgWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBv
cgotICAgICAgICAgIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5k
Ci0KLSAgICAgIChiKSBZb3UgbXVzdCBjYXVzZSBhbnkgbW9kaWZpZWQgZmlsZXMgdG8gY2Fycnkg
cHJvbWluZW50IG5vdGljZXMKLSAgICAgICAgICBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhl
IGZpbGVzOyBhbmQKLQotICAgICAgKGMpIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBm
b3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzCi0gICAgICAgICAgdGhhdCBZb3UgZGlzdHJpYnV0
ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZAotICAgICAgICAgIGF0dHJp
YnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssCi0gICAgICAg
ICAgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFy
dCBvZgotICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBhbmQKLQotICAgICAgKGQpIElm
IHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzCi0g
ICAgICAgICAgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91
IGRpc3RyaWJ1dGUgbXVzdAotICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRo
ZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZAotICAgICAgICAgIHdpdGhpbiBzdWNoIE5P
VElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdAotICAgICAgICAg
IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0
IG9uZQotICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0Ug
dGV4dCBmaWxlIGRpc3RyaWJ1dGVkCi0gICAgICAgICAgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2
ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvcgotICAgICAgICAgIGRvY3VtZW50YXRp
b24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLAotICAg
ICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtz
LCBpZiBhbmQKLSAgICAgICAgICB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9y
bWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMKLSAgICAgICAgICBvZiB0aGUgTk9USUNFIGZpbGUg
YXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kCi0gICAgICAgICAgZG8gbm90
IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24KLSAg
ICAgICAgICBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1
dGUsIGFsb25nc2lkZQotICAgICAgICAgIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0Ug
dGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZAotICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlv
bmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZAotICAgICAgICAgIGFz
IG1vZGlmeWluZyB0aGUgTGljZW5zZS4KLQotICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29w
eXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kCi0gICAgICBtYXkgcHJv
dmlkZSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25z
Ci0gICAgICBmb3IgdXNlLCByZXByb2R1Y3Rpb24sIG9yIGRpc3RyaWJ1dGlvbiBvZiBZb3VyIG1v
ZGlmaWNhdGlvbnMsIG9yCi0gICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBh
IHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwKLSAgICAgIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3Ry
aWJ1dGlvbiBvZiB0aGUgV29yayBvdGhlcndpc2UgY29tcGxpZXMgd2l0aAotICAgICAgdGhlIGNv
bmRpdGlvbnMgc3RhdGVkIGluIHRoaXMgTGljZW5zZS4KLQotICAgNS4gU3VibWlzc2lvbiBvZiBD
b250cmlidXRpb25zLiBVbmxlc3MgWW91IGV4cGxpY2l0bHkgc3RhdGUgb3RoZXJ3aXNlLAotICAg
ICAgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9u
IGluIHRoZSBXb3JrCi0gICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVy
IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgotICAgICAgdGhpcyBMaWNlbnNlLCB3aXRob3V0
IGFueSBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMuCi0gICAgICBOb3R3aXRoc3RhbmRp
bmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5Ci0g
ICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkg
aGF2ZSBleGVjdXRlZAotICAgICAgd2l0aCBMaWNlbnNvciByZWdhcmRpbmcgc3VjaCBDb250cmli
dXRpb25zLgotCi0gICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQg
cGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlCi0gICAgICBuYW1lcywgdHJhZGVtYXJrcywgc2Vy
dmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsCi0gICAgICBleGNl
cHQgYXMgcmVxdWlyZWQgZm9yIHJlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3Jp
YmluZyB0aGUKLSAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNv
bnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLgotCi0gICA3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5
LiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IKLSAgICAgIGFncmVlZCB0byBp
biB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gKLSAgICAgIENv
bnRyaWJ1dG9yIHByb3ZpZGVzIGl0cyBDb250cmlidXRpb25zKSBvbiBhbiAiQVMgSVMiIEJBU0lT
LAotICAgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVp
dGhlciBleHByZXNzIG9yCi0gICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRh
dGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucwotICAgICAgb2YgVElUTEUsIE5PTi1J
TkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQQotICAgICAgUEFS
VElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5p
bmcgdGhlCi0gICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcg
dGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkKLSAgICAgIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3Vy
IGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KLQotICAgOC4gTGlt
aXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVv
cnksCi0gICAgICB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJh
Y3QsIG9yIG90aGVyd2lzZSwKLSAgICAgIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh
dyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5Ci0gICAgICBuZWdsaWdlbnQgYWN0cykg
b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQotICAgICAg
bGlhYmxlIHRvIFlvdSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGFueSBkaXJlY3QsIGluZGlyZWN0
LCBzcGVjaWFsLAotICAgICAgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9m
IGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhCi0gICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNl
IG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlCi0gICAgICBXb3JrIChp
bmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGws
Ci0gICAgICB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBv
ciBhbnkgYW5kIGFsbAotICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcyks
IGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcgotICAgICAgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUg
cG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgotCi0gICA5LiBBY2NlcHRpbmcgV2FycmFudHkg
b3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nCi0gICAgICB0aGUg
V29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVy
LAotICAgICAgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2Fy
cmFudHksIGluZGVtbml0eSwKLSAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBh
bmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCi0gICAgICBMaWNlbnNlLiBIb3dldmVy
LCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seQotICAgICAg
b24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBv
biBiZWhhbGYKLSAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91
IGFncmVlIHRvIGluZGVtbmlmeSwKLSAgICAgIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmli
dXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQotICAgICAgaW5jdXJyZWQgYnksIG9yIGNs
YWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbgotICAgICAg
b2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxp
dHkuCi0KLSAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9w
YXJ0eS9hdXRvYmFuaC9MSUNFTlNFLm1kCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkv
YXV0b2JhbmgvTElDRU5TRS5tZAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0
eS9hdXRvYmFuaC9MSUNFTlNFLm1kCShub25leGlzdGVudCkKQEAgLTEsMjEgKzAsMCBAQAotVGhl
IE1JVCBMaWNlbnNlIChNSVQpCi0KLUNvcHlyaWdodCAoYykgMjAxNCBDYW1lcm9uIExvd2VsbCBQ
YWxtZXIKLQotUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv
IGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQotb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np
YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKLWluIHRo
ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0
aW9uIHRoZSByaWdodHMKLXRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlz
dHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKLWNvcGllcyBvZiB0aGUgU29mdHdhcmUs
IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwotZnVybmlzaGVk
IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLQotVGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUg
aW5jbHVkZWQgaW4gYWxsCi1jb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNv
ZnR3YXJlLgotCi1USEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi1GSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUKLUFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg
Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKLUxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04g
T0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCi1PVVQgT0YgT1Ig
SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ
TkdTIElOIFRIRQotU09GVFdBUkUuCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL05P
VElDRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL05PVElDRQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9OT1RJQ0UJKG5vbmV4
aXN0ZW50KQpAQCAtMSwzICswLDAgQEAKLUF1dG9iYWhuQW5kcm9pZAotQ29weXJpZ2h0IDIwMTEs
MjAxMiBUYXZlbmRvIEdtYkguIExpY2Vuc2VkIHVuZGVyIEFwYWNoZSAyLjAKLVRoaXMgcHJvZHVj
dCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYXQgVGF2ZW5kbyBHbWJIIGh0dHA6Ly93d3cu
dGF2ZW5kby5kZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9saWIvYXV0b2Jhbmgu
amFyCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAv
dGhpcmRfcGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5oLmphcgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBw
L3RoaXJkX3BhcnR5L2F1dG9iYW5oL2xpYi9hdXRvYmFuaC5qYXIJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5oLmphcgkobm9uZXhpc3Rl
bnQpCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL2xpYi9h
dXRvYmFuaC5qYXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46bWltZS10eXBlCiMjIC0xICswLDAg
IyMKLWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3Bl
cnR5CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFt
cGxlcy9hbmRyb2lkYXBwL3RoaXJkX3BhcnR5L2F1dG9iYW5oL2xpYi9hdXRvYmFuaC5qYXIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3Zu
Om1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFwcC90aGlyZF9w
YXJ0eS9hdXRvYmFuaC9saWIvYXV0b2JhbmguamFyCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRf
cGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5oLmphcgkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGFw
cC90aGlyZF9wYXJ0eS9hdXRvYmFuaC9saWIvYXV0b2JhbmguamFyCShub25leGlzdGVudCkKClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRhcHAvdGhpcmRfcGFydHkvYXV0b2JhbmgvbGliL2F1dG9iYW5o
LmphcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkRlbGV0ZWQ6IHN2bjptaW1lLXR5cGUKIyMgLTEgKzAsMCAjIwotYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWRqdW5pdC9SRUFETUUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L1JFQURNRQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZGp1bml0L1JFQURNRQkobm9uZXhpc3RlbnQpCkBAIC0xLDggKzAsMCBAQAot
VGhpcyBkaXJlY3RvcnkgY29udGFpbnMgZXhhbXBsZSBKVW5pdCB0ZXN0cyBmb3IgQW5kcm9pZCBB
cHBSVENNb2JpbGUuCi1NYW55IG9mIHRoZXNlIHRlc3QgdXRpbGl6ZSBSb2JvbGVjdHJpYyB0byBt
b2NrIEFuZHJvaWQgY2xhc3Nlcy4KLQotVG8gY29tcGlsZToKLW5pbmphIC1DIG91dC9EZWJ1ZyBh
bmRyb2lkX2p1bml0X3Rlc3RzCi0KLVRvIHJ1bjoKLW91dC9EZWJ1Zy9iaW4vcnVuX2FuZHJvaWRf
anVuaXRfdGVzdHMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJU
Q0NsaWVudFRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy9EaXJlY3RSVENDbGllbnRUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5p
dC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRlc3QuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJS
VEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2Vy
dEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBv
cnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tp
dG8uQXJndW1lbnRNYXRjaGVycy5hbnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3Vt
ZW50TWF0Y2hlcnMuaXNOb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRv
Lm1vY2s7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udGltZW91dDsKLWltcG9y
dCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5t
b2NraXRvLk1vY2tpdG8udmVyaWZ5Tm9Nb3JlSW50ZXJhY3Rpb25zOwotCi1pbXBvcnQgb3JnLmNo
cm9taXVtLnRlc3RpbmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQg
b3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVu
aXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29u
ZmlnOwotaW1wb3J0IG9yZy5yb2JvbGVjdHJpYy5zaGFkb3dzLlNoYWRvd0xvZzsKLWltcG9ydCBv
cmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlw
dGlvbjsKLQotLyoqCi0gKiBUZXN0IGZvciBEaXJlY3RSVENDbGllbnQuIFRlc3QgaXMgdmVyeSBz
aW1wbGUgYW5kIG9ubHkgdGVzdHMgdGhlIG92ZXJhbGwgc2FuaXR5IG9mIHRoZSBjbGFzcwotICog
YmVoYXZpb3VyLgotICovCi1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFz
cykKLUBDb25maWcobWFuaWZlc3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBEaXJlY3RS
VENDbGllbnRUZXN0IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT01fVVJMID0g
IiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gTE9PUEJBQ0sgPSBmYWxzZTsKLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVNTVlfU0RQX01JRCA9ICJzZHBNaWQiOwot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVNTVlfU0RQID0gInNkcCI7Ci0KLSAgcHVi
bGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSX1dBSVQgPSAxMDA7Ci0gIHB1YmxpYyBzdGF0aWMg
ZmluYWwgaW50IE5FVFdPUktfVElNRU9VVCA9IDEwMDA7Ci0KLSAgcHJpdmF0ZSBEaXJlY3RSVEND
bGllbnQgY2xpZW50OwotICBwcml2YXRlIERpcmVjdFJUQ0NsaWVudCBzZXJ2ZXI7Ci0KLSAgQXBw
UlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cyBjbGllbnRFdmVudHM7Ci0gIEFwcFJUQ0NsaWVudC5T
aWduYWxpbmdFdmVudHMgc2VydmVyRXZlbnRzOwotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZvaWQg
c2V0VXAoKSB7Ci0gICAgU2hhZG93TG9nLnN0cmVhbSA9IFN5c3RlbS5vdXQ7Ci0KLSAgICBjbGll
bnRFdmVudHMgPSBtb2NrKEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMuY2xhc3MpOwotICAg
IHNlcnZlckV2ZW50cyA9IG1vY2soQXBwUlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cy5jbGFzcyk7
Ci0KLSAgICBjbGllbnQgPSBuZXcgRGlyZWN0UlRDQ2xpZW50KGNsaWVudEV2ZW50cyk7Ci0gICAg
c2VydmVyID0gbmV3IERpcmVjdFJUQ0NsaWVudChzZXJ2ZXJFdmVudHMpOwotICB9Ci0KLSAgQFRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkSXBQYXR0ZXJuKCkgewotICAgIC8vIFN0cmluZ3Mg
dGhhdCBzaG91bGQgbWF0Y2ggdGhlIHBhdHRlcm4uCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgot
ICAgIGZpbmFsIFN0cmluZ1tdIGlwQWRkcmVzc2VzID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAg
IjAuMC4wLjAiLAotICAgICAgICAiMTI3LjAuMC4xIiwKLSAgICAgICAgIjE5Mi4xNjguMC4xIiwK
LSAgICAgICAgIjAuMC4wLjA6ODg4OCIsCi0gICAgICAgICIxMjcuMC4wLjE6ODg4OCIsCi0gICAg
ICAgICIxOTIuMTY4LjAuMTo4ODg4IiwKLSAgICAgICAgIjo6IiwKLSAgICAgICAgIjo6MSIsCi0g
ICAgICAgICIyMDAxOjBkYjg6ODVhMzowMDAwOjAwMDA6OGEyZTowMzcwOjc5NDYiLAotICAgICAg
ICAiWzo6XSIsCi0gICAgICAgICJbOjoxXSIsCi0gICAgICAgICJbMjAwMTowZGI4Ojg1YTM6MDAw
MDowMDAwOjhhMmU6MDM3MDo3OTQ2XSIsCi0gICAgICAgICJbOjpdOjg4ODgiLAotICAgICAgICAi
Wzo6MV06ODg4OCIsCi0gICAgICAgICJbMjAwMTowZGI4Ojg1YTM6MDAwMDowMDAwOjhhMmU6MDM3
MDo3OTQ2XTo4ODg4IgotICAgIH07Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgICBmb3Ig
KFN0cmluZyBpcCA6IGlwQWRkcmVzc2VzKSB7Ci0gICAgICBhc3NlcnRUcnVlKGlwICsgIiBkaWRu
J3QgbWF0Y2ggSVBfUEFUVEVSTiBldmVuIHRob3VnaCBpdCBzaG91bGQuIiwKLSAgICAgICAgICBE
aXJlY3RSVENDbGllbnQuSVBfUEFUVEVSTi5tYXRjaGVyKGlwKS5tYXRjaGVzKCkpOwotICAgIH0K
LSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkSXBQYXR0ZXJuKCkgewot
ICAgIC8vIFN0cmluZ3MgdGhhdCBzaG91bGRuJ3QgbWF0Y2ggdGhlIHBhdHRlcm4uCi0gICAgLy8g
Y2xhbmctZm9ybWF0IG9mZgotICAgIGZpbmFsIFN0cmluZ1tdIGludmFsaWRJcEFkZHJlc3NlcyA9
IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICJIZWxsbywgV29ybGQhIiwKLSAgICAgICAgImFhYWEi
LAotICAgICAgICAiMTExMSIsCi0gICAgICAgICJbaGVsbG8gd29ybGRdIiwKLSAgICAgICAgImhl
bGxvOndvcmxkIgotICAgIH07Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgICBmb3IgKFN0
cmluZyBpbnZhbGlkSXAgOiBpbnZhbGlkSXBBZGRyZXNzZXMpIHsKLSAgICAgIGFzc2VydEZhbHNl
KGludmFsaWRJcCArICIgbWF0Y2hlZCBJUF9QQVRURVJOIGV2ZW4gdGhvdWdoIGl0IHNob3VsZG4n
dC4iLAotICAgICAgICAgIERpcmVjdFJUQ0NsaWVudC5JUF9QQVRURVJOLm1hdGNoZXIoaW52YWxp
ZElwKS5tYXRjaGVzKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFRPRE8oc2FrYWwpOiBSZXBsYWNl
IGlzTm90TnVsbChjbGFzcykgd2l0aCBpc05vdE51bGwoKSBvbmNlIEphdmEgOCBpcyB1c2VkLgot
ICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICBAVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0RGlyZWN0UlRDQ2xpZW50KCkgewotICAgIHNlcnZlci5jb25uZWN0VG9Sb29tKG5ldyBB
cHBSVENDbGllbnQuUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzKFJPT01fVVJMLCAiMC4wLjAuMCIs
IExPT1BCQUNLKSk7Ci0gICAgdHJ5IHsKLSAgICAgIFRocmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7
Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdl
dE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNsaWVudC5jb25uZWN0VG9Sb29tKAotICAgICAgICBu
ZXcgQXBwUlRDQ2xpZW50LlJvb21Db25uZWN0aW9uUGFyYW1ldGVycyhST09NX1VSTCwgIjEyNy4w
LjAuMSIsIExPT1BCQUNLKSk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRX
T1JLX1RJTUVPVVQpKQotICAgICAgICAub25Db25uZWN0ZWRUb1Jvb20oYW55KEFwcFJUQ0NsaWVu
dC5TaWduYWxpbmdQYXJhbWV0ZXJzLmNsYXNzKSk7Ci0KLSAgICBTZXNzaW9uRGVzY3JpcHRpb24g
b2ZmZXJTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKFNlc3Npb25EZXNjcmlwdGlvbi5UeXBl
Lk9GRkVSLCBEVU1NWV9TRFApOwotICAgIHNlcnZlci5zZW5kT2ZmZXJTZHAob2ZmZXJTZHApOwot
ICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoTkVUV09SS19USU1FT1VUKSkKLSAgICAg
ICAgLm9uQ29ubmVjdGVkVG9Sb29tKGFueShBcHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVy
cy5jbGFzcykpOwotCi0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dlclNkcCA9Ci0gICAgICAg
IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSLCBE
VU1NWV9TRFApOwotICAgIGNsaWVudC5zZW5kQW5zd2VyU2RwKGFuc3dlclNkcCk7Ci0gICAgdmVy
aWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25S
ZW1vdGVEZXNjcmlwdGlvbihpc05vdE51bGwoU2Vzc2lvbkRlc2NyaXB0aW9uLmNsYXNzKSk7Ci0K
LSAgICBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlID0gbmV3IEljZUNhbmRpZGF0ZShEVU1NWV9TRFBf
TUlELCAwLCBEVU1NWV9TRFApOwotICAgIHNlcnZlci5zZW5kTG9jYWxJY2VDYW5kaWRhdGUoY2Fu
ZGlkYXRlKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KE5FVFdPUktfVElNRU9V
VCkpCi0gICAgICAgIC5vblJlbW90ZUljZUNhbmRpZGF0ZShpc05vdE51bGwoSWNlQ2FuZGlkYXRl
LmNsYXNzKSk7Ci0KLSAgICBjbGllbnQuc2VuZExvY2FsSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7
Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAg
ICAgICAub25SZW1vdGVJY2VDYW5kaWRhdGUoaXNOb3ROdWxsKEljZUNhbmRpZGF0ZS5jbGFzcykp
OwotCi0gICAgY2xpZW50LmRpc2Nvbm5lY3RGcm9tUm9vbSgpOwotICAgIHZlcmlmeShjbGllbnRF
dmVudHMsIHRpbWVvdXQoTkVUV09SS19USU1FT1VUKSkub25DaGFubmVsQ2xvc2UoKTsKLSAgICB2
ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KE5FVFdPUktfVElNRU9VVCkpLm9uQ2hhbm5lbENs
b3NlKCk7Ci0KLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMoY2xpZW50RXZlbnRzKTsKLSAg
ICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMoc2VydmVyRXZlbnRzKTsKLSAgfQotfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZGp1bml0L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENsaWVudFRlc3QuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xp
ZW50VGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90
L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50VGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjAz
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRj
OwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMg
b3JnLm1vY2tpdG8uTW9ja2l0by50aW1lb3V0OwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5N
b2NraXRvLnZlcmlmeTsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnlO
b01vcmVJbnRlcmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LnV0aWwu
RGlzYWJsZWRUZXN0OwotaW1wb3J0IG9yZy5jaHJvbWl1bS50ZXN0aW5nLmxvY2FsLkxvY2FsUm9i
b2xlY3RyaWNUZXN0UnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcu
anVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5y
dW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NrOwotaW1wb3J0IG9yZy5tb2Nr
aXRvLk1vY2tpdG9Bbm5vdGF0aW9uczsKLWltcG9ydCBvcmcucm9ib2xlY3RyaWMuYW5ub3RhdGlv
bi5Db25maWc7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLnNoYWRvd3MuU2hhZG93TG9nOwotCi1p
bXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEu
dXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5U
aW1lVW5pdDsKLQotQFJ1bldpdGgoTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXIuY2xhc3MpCi1A
Q29uZmlnKG1hbmlmZXN0ID0gQ29uZmlnLk5PTkUpCi1wdWJsaWMgY2xhc3MgVENQQ2hhbm5lbENs
aWVudFRlc3QgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE9SVCA9IDg4ODg7Ci0gIC8q
KgotICAgKiBIb3cgbG9uZyB3ZSB3YWl0IGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUg
c2VydmVyLiBDaG9zZW4gcXVpdGUgYXJiaXRyYXJpbHkgYW5kCi0gICAqIGNvdWxkIGJlIG1hZGUg
c21hbGxlciBpZiBuZWVkIGJlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNF
UlZFUl9XQUlUID0gMTA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNUX1RJTUVP
VVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRU5EX1RJTUVPVVQgPSAxMDA7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNDT05ORUNUX1RJTUVPVVQgPSAxMDA7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVJNSU5BVElPTl9USU1FT1VUID0gMTAwMDsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTUVTU0FHRV9TRVJWRVIgPSAiSGVsbG8s
IFNlcnZlciEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9NRVNTQUdFX0NM
SUVOVCA9ICJIZWxsbywgQ2xpZW50ISI7Ci0KLSAgQE1vY2sgVENQQ2hhbm5lbENsaWVudC5UQ1BD
aGFubmVsRXZlbnRzIHNlcnZlckV2ZW50czsKLSAgQE1vY2sgVENQQ2hhbm5lbENsaWVudC5UQ1BD
aGFubmVsRXZlbnRzIGNsaWVudEV2ZW50czsKLQotICBwcml2YXRlIEV4ZWN1dG9yU2VydmljZSBl
eGVjdXRvcjsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IHNlcnZlcjsKLSAgcHJpdmF0ZSBU
Q1BDaGFubmVsQ2xpZW50IGNsaWVudDsKLQotICBAQmVmb3JlCi0gIHB1YmxpYyB2b2lkIHNldFVw
KCkgewotICAgIFNoYWRvd0xvZy5zdHJlYW0gPSBTeXN0ZW0ub3V0OwotCi0gICAgTW9ja2l0b0Fu
bm90YXRpb25zLmluaXRNb2Nrcyh0aGlzKTsKLQotICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5l
d1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7Ci0gIH0KLQotICBAQWZ0ZXIKLSAgcHVibGljIHZvaWQg
dGVhckRvd24oKSB7Ci0gICAgdmVyaWZ5Tm9Nb3JlRXZlbnRzKCk7Ci0KLSAgICBleGVjdXRlQW5k
V2FpdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lk
IHJ1bigpIHsKLSAgICAgICAgY2xpZW50LmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgc2VydmVyLmRp
c2Nvbm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8vIFN0b3AgdGhlIGV4ZWN1dG9y
IHRocmVhZAotICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7Ci0gICAgdHJ5IHsKLSAgICAgIGV4ZWN1
dG9yLmF3YWl0VGVybWluYXRpb24oVEVSTUlOQVRJT05fVElNRU9VVCwgVGltZVVuaXQuTUlMTElT
RUNPTkRTKTsKLSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBm
YWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0Q29ubmVjdElQdjQoKSB7Ci0gICAgc2V0VXBJUHY0U2VydmVyKCk7Ci0gICAgdHJ5IHsK
LSAgICAgIFRocmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0
ZWRFeGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAg
IHNldFVwSVB2NENsaWVudCgpOwotCi0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChD
T05ORUNUX1RJTUVPVVQpKS5vblRDUENvbm5lY3RlZCh0cnVlKTsKLSAgICB2ZXJpZnkoY2xpZW50
RXZlbnRzLCB0aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ29ubmVjdGVkKGZhbHNlKTsK
LSAgfQotCi0gIC8vIEBUZXN0Ci0gIC8vIERpc2FibGVkIGJlY2F1c2UgaXQgZmFpbHMgd2hlbiBJ
UHY2IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGJvdC4KLSAgLy8gVE9ETyhlaG1hbGRvbmFkbyk6
IEVuYWJsZSB3aGVuIGJ1Z3Mud2VicnRjLm9yZy82NDM3IGlzIGZpeGVkLgotICBARGlzYWJsZWRU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDb25uZWN0SVB2NigpIHsKLSAgICBzZXRVcElQdjZTZXJ2
ZXIoKTsKLSAgICB0cnkgewotICAgICAgVGhyZWFkLnNsZWVwKFNFUlZFUl9XQUlUKTsKLSAgICB9
IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2Fn
ZSgpKTsKLSAgICB9Ci0gICAgc2V0VXBJUHY2Q2xpZW50KCk7Ci0KLSAgICB2ZXJpZnkoc2VydmVy
RXZlbnRzLCB0aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ29ubmVjdGVkKHRydWUpOwot
ICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoQ09OTkVDVF9USU1FT1VUKSkub25UQ1BD
b25uZWN0ZWQoZmFsc2UpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNlbmRE
YXRhKCkgewotICAgIHRlc3RDb25uZWN0SVB2NCgpOwotCi0gICAgZXhlY3V0ZUFuZFdhaXQobmV3
IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7
Ci0gICAgICAgIGNsaWVudC5zZW5kKFRFU1RfTUVTU0FHRV9TRVJWRVIpOwotICAgICAgICBzZXJ2
ZXIuc2VuZChURVNUX01FU1NBR0VfQ0xJRU5UKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHZl
cmlmeShzZXJ2ZXJFdmVudHMsIHRpbWVvdXQoU0VORF9USU1FT1VUKSkub25UQ1BNZXNzYWdlKFRF
U1RfTUVTU0FHRV9TRVJWRVIpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoU0VO
RF9USU1FT1VUKSkub25UQ1BNZXNzYWdlKFRFU1RfTUVTU0FHRV9DTElFTlQpOwotICB9Ci0KLSAg
QFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdERpc2Nvbm5lY3RTZXJ2ZXIoKSB7Ci0gICAgdGVzdENv
bm5lY3RJUHY0KCk7Ci0gICAgZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxlKCkgewotICAgICAg
QE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHNlcnZlci5kaXNj
b25uZWN0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0
aW1lb3V0KERJU0NPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ2xvc2UoKTsKLSAgICB2ZXJpZnkoY2xp
ZW50RXZlbnRzLCB0aW1lb3V0KERJU0NPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ2xvc2UoKTsKLSAg
fQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0Q2xpZW50KCkgewotICAg
IHRlc3RDb25uZWN0SVB2NCgpOwotICAgIGV4ZWN1dGVBbmRXYWl0KG5ldyBSdW5uYWJsZSgpIHsK
LSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjbGll
bnQuZGlzY29ubmVjdCgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgdmVyaWZ5KHNlcnZlckV2
ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVPVVQpKS5vblRDUENsb3NlKCk7Ci0gICAgdmVy
aWZ5KGNsaWVudEV2ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVPVVQpKS5vblRDUENsb3Nl
KCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY0U2VydmVyKCkgewotICAgIHNldFVw
U2VydmVyKCIwLjAuMC4wIiwgUE9SVCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY0
Q2xpZW50KCkgewotICAgIHNldFVwQ2xpZW50KCIxMjcuMC4wLjEiLCBQT1JUKTsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBzZXRVcElQdjZTZXJ2ZXIoKSB7Ci0gICAgc2V0VXBTZXJ2ZXIoIjo6Iiwg
UE9SVCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY2Q2xpZW50KCkgewotICAgIHNl
dFVwQ2xpZW50KCI6OjEiLCBQT1JUKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRVcFNlcnZl
cihTdHJpbmcgaXAsIGludCBwb3J0KSB7Ci0gICAgc2VydmVyID0gbmV3IFRDUENoYW5uZWxDbGll
bnQoZXhlY3V0b3IsIHNlcnZlckV2ZW50cywgaXAsIHBvcnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHNldFVwQ2xpZW50KFN0cmluZyBpcCwgaW50IHBvcnQpIHsKLSAgICBjbGllbnQgPSBuZXcg
VENQQ2hhbm5lbENsaWVudChleGVjdXRvciwgY2xpZW50RXZlbnRzLCBpcCwgcG9ydCk7Ci0gIH0K
LQotICAvKioKLSAgICogVmVyaWZpZXMgbm8gbW9yZSBzZXJ2ZXIgb3IgY2xpZW50IGV2ZW50cyBo
YXZlIGJlZW4gaXNzdWVkCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5Tm9Nb3JlRXZlbnRz
KCkgewotICAgIHZlcmlmeU5vTW9yZUludGVyYWN0aW9ucyhzZXJ2ZXJFdmVudHMpOwotICAgIHZl
cmlmeU5vTW9yZUludGVyYWN0aW9ucyhjbGllbnRFdmVudHMpOwotICB9Ci0KLSAgLyoqCi0gICAq
IFF1ZXVlcyBydW5uYWJsZSB0byBiZSBydW4gYW5kIHdhaXRzIGZvciBpdCB0byBiZSBleGVjdXRl
ZCBieSB0aGUgZXhlY3V0b3IgdGhyZWFkCi0gICAqLwotICBwdWJsaWMgdm9pZCBleGVjdXRlQW5k
V2FpdChSdW5uYWJsZSBydW5uYWJsZSkgewotICAgIHRyeSB7Ci0gICAgICBleGVjdXRvci5zdWJt
aXQocnVubmFibGUpLmdldCgpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBm
YWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRlc3QuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
anVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnRUZXN0LmphdmEJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJU
Q0NsaWVudFRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IHN0YXRp
YyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQu
QXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsK
LWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5hbnk7Ci1pbXBvcnQg
c3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuaXNOb3ROdWxsOwotaW1wb3J0IHN0
YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLm1vY2s7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRv
Lk1vY2tpdG8udGltZW91dDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJp
Znk7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udmVyaWZ5Tm9Nb3JlSW50ZXJh
Y3Rpb25zOwotCi1pbXBvcnQgb3JnLmNocm9taXVtLnRlc3RpbmcubG9jYWwuTG9jYWxSb2JvbGVj
dHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVu
aXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLnJv
Ym9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotaW1wb3J0IG9yZy5yb2JvbGVjdHJpYy5zaGFk
b3dzLlNoYWRvd0xvZzsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBv
cmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLQotLyoqCi0gKiBUZXN0IGZvciBEaXJlY3RS
VENDbGllbnQuIFRlc3QgaXMgdmVyeSBzaW1wbGUgYW5kIG9ubHkgdGVzdHMgdGhlIG92ZXJhbGwg
c2FuaXR5IG9mIHRoZSBjbGFzcwotICogYmVoYXZpb3VyLgotICovCi1AUnVuV2l0aChMb2NhbFJv
Ym9sZWN0cmljVGVzdFJ1bm5lci5jbGFzcykKLUBDb25maWcobWFuaWZlc3QgPSBDb25maWcuTk9O
RSkKLXB1YmxpYyBjbGFzcyBEaXJlY3RSVENDbGllbnRUZXN0IHsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFJPT01fVVJMID0gIiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xl
YW4gTE9PUEJBQ0sgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVN
TVlfU0RQX01JRCA9ICJzZHBNaWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVN
TVlfU0RQID0gInNkcCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSX1dBSVQg
PSAxMDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfVElNRU9VVCA9IDEwMDA7
Ci0KLSAgcHJpdmF0ZSBEaXJlY3RSVENDbGllbnQgY2xpZW50OwotICBwcml2YXRlIERpcmVjdFJU
Q0NsaWVudCBzZXJ2ZXI7Ci0KLSAgQXBwUlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cyBjbGllbnRF
dmVudHM7Ci0gIEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMgc2VydmVyRXZlbnRzOwotCi0g
IEBCZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgU2hhZG93TG9nLnN0cmVhbSA9
IFN5c3RlbS5vdXQ7Ci0KLSAgICBjbGllbnRFdmVudHMgPSBtb2NrKEFwcFJUQ0NsaWVudC5TaWdu
YWxpbmdFdmVudHMuY2xhc3MpOwotICAgIHNlcnZlckV2ZW50cyA9IG1vY2soQXBwUlRDQ2xpZW50
LlNpZ25hbGluZ0V2ZW50cy5jbGFzcyk7Ci0KLSAgICBjbGllbnQgPSBuZXcgRGlyZWN0UlRDQ2xp
ZW50KGNsaWVudEV2ZW50cyk7Ci0gICAgc2VydmVyID0gbmV3IERpcmVjdFJUQ0NsaWVudChzZXJ2
ZXJFdmVudHMpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkSXBQYXR0
ZXJuKCkgewotICAgIC8vIFN0cmluZ3MgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHBhdHRlcm4uCi0g
ICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIGZpbmFsIFN0cmluZ1tdIGlwQWRkcmVzc2VzID0g
bmV3IFN0cmluZ1tdIHsKLSAgICAgICAgIjAuMC4wLjAiLAotICAgICAgICAiMTI3LjAuMC4xIiwK
LSAgICAgICAgIjE5Mi4xNjguMC4xIiwKLSAgICAgICAgIjAuMC4wLjA6ODg4OCIsCi0gICAgICAg
ICIxMjcuMC4wLjE6ODg4OCIsCi0gICAgICAgICIxOTIuMTY4LjAuMTo4ODg4IiwKLSAgICAgICAg
Ijo6IiwKLSAgICAgICAgIjo6MSIsCi0gICAgICAgICIyMDAxOjBkYjg6ODVhMzowMDAwOjAwMDA6
OGEyZTowMzcwOjc5NDYiLAotICAgICAgICAiWzo6XSIsCi0gICAgICAgICJbOjoxXSIsCi0gICAg
ICAgICJbMjAwMTowZGI4Ojg1YTM6MDAwMDowMDAwOjhhMmU6MDM3MDo3OTQ2XSIsCi0gICAgICAg
ICJbOjpdOjg4ODgiLAotICAgICAgICAiWzo6MV06ODg4OCIsCi0gICAgICAgICJbMjAwMTowZGI4
Ojg1YTM6MDAwMDowMDAwOjhhMmU6MDM3MDo3OTQ2XTo4ODg4IgotICAgIH07Ci0gICAgLy8gY2xh
bmctZm9ybWF0IG9uCi0KLSAgICBmb3IgKFN0cmluZyBpcCA6IGlwQWRkcmVzc2VzKSB7Ci0gICAg
ICBhc3NlcnRUcnVlKGlwICsgIiBkaWRuJ3QgbWF0Y2ggSVBfUEFUVEVSTiBldmVuIHRob3VnaCBp
dCBzaG91bGQuIiwKLSAgICAgICAgICBEaXJlY3RSVENDbGllbnQuSVBfUEFUVEVSTi5tYXRjaGVy
KGlwKS5tYXRjaGVzKCkpOwotICAgIH0KLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RJbnZhbGlkSXBQYXR0ZXJuKCkgewotICAgIC8vIFN0cmluZ3MgdGhhdCBzaG91bGRuJ3QgbWF0
Y2ggdGhlIHBhdHRlcm4uCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIGZpbmFsIFN0cmlu
Z1tdIGludmFsaWRJcEFkZHJlc3NlcyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICJIZWxsbywg
V29ybGQhIiwKLSAgICAgICAgImFhYWEiLAotICAgICAgICAiMTExMSIsCi0gICAgICAgICJbaGVs
bG8gd29ybGRdIiwKLSAgICAgICAgImhlbGxvOndvcmxkIgotICAgIH07Ci0gICAgLy8gY2xhbmct
Zm9ybWF0IG9uCi0KLSAgICBmb3IgKFN0cmluZyBpbnZhbGlkSXAgOiBpbnZhbGlkSXBBZGRyZXNz
ZXMpIHsKLSAgICAgIGFzc2VydEZhbHNlKGludmFsaWRJcCArICIgbWF0Y2hlZCBJUF9QQVRURVJO
IGV2ZW4gdGhvdWdoIGl0IHNob3VsZG4ndC4iLAotICAgICAgICAgIERpcmVjdFJUQ0NsaWVudC5J
UF9QQVRURVJOLm1hdGNoZXIoaW52YWxpZElwKS5tYXRjaGVzKCkpOwotICAgIH0KLSAgfQotCi0g
IC8vIFRPRE8oc2FrYWwpOiBSZXBsYWNlIGlzTm90TnVsbChjbGFzcykgd2l0aCBpc05vdE51bGwo
KSBvbmNlIEphdmEgOCBpcyB1c2VkLgotICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24i
KQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RGlyZWN0UlRDQ2xpZW50KCkgewotICAgIHNl
cnZlci5jb25uZWN0VG9Sb29tKG5ldyBBcHBSVENDbGllbnQuUm9vbUNvbm5lY3Rpb25QYXJhbWV0
ZXJzKFJPT01fVVJMLCAiMC4wLjAuMCIsIExPT1BCQUNLKSk7Ci0gICAgdHJ5IHsKLSAgICAgIFRo
cmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRp
b24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNsaWVudC5j
b25uZWN0VG9Sb29tKAotICAgICAgICBuZXcgQXBwUlRDQ2xpZW50LlJvb21Db25uZWN0aW9uUGFy
YW1ldGVycyhST09NX1VSTCwgIjEyNy4wLjAuMSIsIExPT1BCQUNLKSk7Ci0gICAgdmVyaWZ5KHNl
cnZlckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25Db25uZWN0
ZWRUb1Jvb20oYW55KEFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0ZXJzLmNsYXNzKSk7Ci0K
LSAgICBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9u
KFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSLCBEVU1NWV9TRFApOwotICAgIHNlcnZlci5z
ZW5kT2ZmZXJTZHAob2ZmZXJTZHApOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQo
TkVUV09SS19USU1FT1VUKSkKLSAgICAgICAgLm9uQ29ubmVjdGVkVG9Sb29tKGFueShBcHBSVEND
bGllbnQuU2lnbmFsaW5nUGFyYW1ldGVycy5jbGFzcykpOwotCi0gICAgU2Vzc2lvbkRlc2NyaXB0
aW9uIGFuc3dlclNkcCA9Ci0gICAgICAgIG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oU2Vzc2lvbkRl
c2NyaXB0aW9uLlR5cGUuQU5TV0VSLCBEVU1NWV9TRFApOwotICAgIGNsaWVudC5zZW5kQW5zd2Vy
U2RwKGFuc3dlclNkcCk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JL
X1RJTUVPVVQpKQotICAgICAgICAub25SZW1vdGVEZXNjcmlwdGlvbihpc05vdE51bGwoU2Vzc2lv
bkRlc2NyaXB0aW9uLmNsYXNzKSk7Ci0KLSAgICBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlID0gbmV3
IEljZUNhbmRpZGF0ZShEVU1NWV9TRFBfTUlELCAwLCBEVU1NWV9TRFApOwotICAgIHNlcnZlci5z
ZW5kTG9jYWxJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRz
LCB0aW1lb3V0KE5FVFdPUktfVElNRU9VVCkpCi0gICAgICAgIC5vblJlbW90ZUljZUNhbmRpZGF0
ZShpc05vdE51bGwoSWNlQ2FuZGlkYXRlLmNsYXNzKSk7Ci0KLSAgICBjbGllbnQuc2VuZExvY2Fs
SWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91
dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25SZW1vdGVJY2VDYW5kaWRhdGUoaXNOb3RO
dWxsKEljZUNhbmRpZGF0ZS5jbGFzcykpOwotCi0gICAgY2xpZW50LmRpc2Nvbm5lY3RGcm9tUm9v
bSgpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoTkVUV09SS19USU1FT1VUKSku
b25DaGFubmVsQ2xvc2UoKTsKLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KE5FVFdP
UktfVElNRU9VVCkpLm9uQ2hhbm5lbENsb3NlKCk7Ci0KLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFj
dGlvbnMoY2xpZW50RXZlbnRzKTsKLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMoc2VydmVy
RXZlbnRzKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQ
Q2hhbm5lbENsaWVudFRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50VGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50VGVzdC5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYg
VGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBh
Y2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3Nl
cnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by50aW1lb3V0OwotaW1w
b3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnZlcmlmeTsKLWltcG9ydCBzdGF0aWMgb3Jn
Lm1vY2tpdG8uTW9ja2l0by52ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcu
Y2hyb21pdW0uYmFzZS50ZXN0LnV0aWwuRGlzYWJsZWRUZXN0OwotaW1wb3J0IG9yZy5jaHJvbWl1
bS50ZXN0aW5nLmxvY2FsLkxvY2FsUm9ib2xlY3RyaWNUZXN0UnVubmVyOwotaW1wb3J0IG9yZy5q
dW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5U
ZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcubW9ja2l0
by5Nb2NrOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG9Bbm5vdGF0aW9uczsKLWltcG9ydCBv
cmcucm9ib2xlY3RyaWMuYW5ub3RhdGlvbi5Db25maWc7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmlj
LnNoYWRvd3MuU2hhZG93TG9nOwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0
b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9y
dCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotQFJ1bldpdGgoTG9jYWxSb2JvbGVj
dHJpY1Rlc3RSdW5uZXIuY2xhc3MpCi1AQ29uZmlnKG1hbmlmZXN0ID0gQ29uZmlnLk5PTkUpCi1w
dWJsaWMgY2xhc3MgVENQQ2hhbm5lbENsaWVudFRlc3QgewotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgUE9SVCA9IDg4ODg7Ci0gIC8qKgotICAgKiBIb3cgbG9uZyB3ZSB3YWl0IGJlZm9yZSB0
cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBDaG9zZW4gcXVpdGUgYXJiaXRyYXJpbHkg
YW5kCi0gICAqIGNvdWxkIGJlIG1hZGUgc21hbGxlciBpZiBuZWVkIGJlLgotICAgKi8KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFUlZFUl9XQUlUID0gMTA7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBDT05ORUNUX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBTRU5EX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVND
T05ORUNUX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVJNSU5B
VElPTl9USU1FT1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1Rf
TUVTU0FHRV9TRVJWRVIgPSAiSGVsbG8sIFNlcnZlciEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEVTVF9NRVNTQUdFX0NMSUVOVCA9ICJIZWxsbywgQ2xpZW50ISI7Ci0KLSAgQE1v
Y2sgVENQQ2hhbm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIHNlcnZlckV2ZW50czsKLSAgQE1v
Y2sgVENQQ2hhbm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIGNsaWVudEV2ZW50czsKLQotICBw
cml2YXRlIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xp
ZW50IHNlcnZlcjsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IGNsaWVudDsKLQotICBAQmVm
b3JlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAgIFNoYWRvd0xvZy5zdHJlYW0gPSBTeXN0
ZW0ub3V0OwotCi0gICAgTW9ja2l0b0Fubm90YXRpb25zLmluaXRNb2Nrcyh0aGlzKTsKLQotICAg
IGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7Ci0gIH0KLQot
ICBAQWZ0ZXIKLSAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0gICAgdmVyaWZ5Tm9Nb3JlRXZl
bnRzKCk7Ci0KLSAgICBleGVjdXRlQW5kV2FpdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3Zl
cnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY2xpZW50LmRpc2Nvbm5l
Y3QoKTsKLSAgICAgICAgc2VydmVyLmRpc2Nvbm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsKLQot
ICAgIC8vIFN0b3AgdGhlIGV4ZWN1dG9yIHRocmVhZAotICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7
Ci0gICAgdHJ5IHsKLSAgICAgIGV4ZWN1dG9yLmF3YWl0VGVybWluYXRpb24oVEVSTUlOQVRJT05f
VElNRU9VVCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICB9IGNhdGNoIChJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0K
LQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29ubmVjdElQdjQoKSB7Ci0gICAgc2V0VXBJ
UHY0U2VydmVyKCk7Ci0gICAgdHJ5IHsKLSAgICAgIFRocmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7
Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdl
dE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHNldFVwSVB2NENsaWVudCgpOwotCi0gICAgdmVyaWZ5
KHNlcnZlckV2ZW50cywgdGltZW91dChDT05ORUNUX1RJTUVPVVQpKS5vblRDUENvbm5lY3RlZCh0
cnVlKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkp
Lm9uVENQQ29ubmVjdGVkKGZhbHNlKTsKLSAgfQotCi0gIC8vIEBUZXN0Ci0gIC8vIERpc2FibGVk
IGJlY2F1c2UgaXQgZmFpbHMgd2hlbiBJUHY2IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGJvdC4K
LSAgLy8gVE9ETyhlaG1hbGRvbmFkbyk6IEVuYWJsZSB3aGVuIGJ1Z3Mud2VicnRjLm9yZy82NDM3
IGlzIGZpeGVkLgotICBARGlzYWJsZWRUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDb25uZWN0SVB2
NigpIHsKLSAgICBzZXRVcElQdjZTZXJ2ZXIoKTsKLSAgICB0cnkgewotICAgICAgVGhyZWFkLnNs
ZWVwKFNFUlZFUl9XQUlUKTsKLSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7
Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgc2V0VXBJUHY2Q2xpZW50
KCk7Ci0KLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkp
Lm9uVENQQ29ubmVjdGVkKHRydWUpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQo
Q09OTkVDVF9USU1FT1VUKSkub25UQ1BDb25uZWN0ZWQoZmFsc2UpOwotICB9Ci0KLSAgQFRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdFNlbmREYXRhKCkgewotICAgIHRlc3RDb25uZWN0SVB2NCgpOwot
Ci0gICAgZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0g
ICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNsaWVudC5zZW5kKFRFU1RfTUVTU0FH
RV9TRVJWRVIpOwotICAgICAgICBzZXJ2ZXIuc2VuZChURVNUX01FU1NBR0VfQ0xJRU5UKTsKLSAg
ICAgIH0KLSAgICB9KTsKLQotICAgIHZlcmlmeShzZXJ2ZXJFdmVudHMsIHRpbWVvdXQoU0VORF9U
SU1FT1VUKSkub25UQ1BNZXNzYWdlKFRFU1RfTUVTU0FHRV9TRVJWRVIpOwotICAgIHZlcmlmeShj
bGllbnRFdmVudHMsIHRpbWVvdXQoU0VORF9USU1FT1VUKSkub25UQ1BNZXNzYWdlKFRFU1RfTUVT
U0FHRV9DTElFTlQpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdERpc2Nvbm5l
Y3RTZXJ2ZXIoKSB7Ci0gICAgdGVzdENvbm5lY3RJUHY0KCk7Ci0gICAgZXhlY3V0ZUFuZFdhaXQo
bmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4o
KSB7Ci0gICAgICAgIHNlcnZlci5kaXNjb25uZWN0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAg
ICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KERJU0NPTk5FQ1RfVElNRU9VVCkpLm9uVENQ
Q2xvc2UoKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KERJU0NPTk5FQ1RfVElN
RU9VVCkpLm9uVENQQ2xvc2UoKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RE
aXNjb25uZWN0Q2xpZW50KCkgewotICAgIHRlc3RDb25uZWN0SVB2NCgpOwotICAgIGV4ZWN1dGVB
bmRXYWl0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZv
aWQgcnVuKCkgewotICAgICAgICBjbGllbnQuZGlzY29ubmVjdCgpOwotICAgICAgfQotICAgIH0p
OwotCi0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVPVVQp
KS5vblRDUENsb3NlKCk7Ci0gICAgdmVyaWZ5KGNsaWVudEV2ZW50cywgdGltZW91dChESVNDT05O
RUNUX1RJTUVPVVQpKS5vblRDUENsb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJ
UHY0U2VydmVyKCkgewotICAgIHNldFVwU2VydmVyKCIwLjAuMC4wIiwgUE9SVCk7Ci0gIH0KLQot
ICBwcml2YXRlIHZvaWQgc2V0VXBJUHY0Q2xpZW50KCkgewotICAgIHNldFVwQ2xpZW50KCIxMjcu
MC4wLjEiLCBQT1JUKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRVcElQdjZTZXJ2ZXIoKSB7
Ci0gICAgc2V0VXBTZXJ2ZXIoIjo6IiwgUE9SVCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0
VXBJUHY2Q2xpZW50KCkgewotICAgIHNldFVwQ2xpZW50KCI6OjEiLCBQT1JUKTsKLSAgfQotCi0g
IHByaXZhdGUgdm9pZCBzZXRVcFNlcnZlcihTdHJpbmcgaXAsIGludCBwb3J0KSB7Ci0gICAgc2Vy
dmVyID0gbmV3IFRDUENoYW5uZWxDbGllbnQoZXhlY3V0b3IsIHNlcnZlckV2ZW50cywgaXAsIHBv
cnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFVwQ2xpZW50KFN0cmluZyBpcCwgaW50IHBv
cnQpIHsKLSAgICBjbGllbnQgPSBuZXcgVENQQ2hhbm5lbENsaWVudChleGVjdXRvciwgY2xpZW50
RXZlbnRzLCBpcCwgcG9ydCk7Ci0gIH0KLQotICAvKioKLSAgICogVmVyaWZpZXMgbm8gbW9yZSBz
ZXJ2ZXIgb3IgY2xpZW50IGV2ZW50cyBoYXZlIGJlZW4gaXNzdWVkCi0gICAqLwotICBwcml2YXRl
IHZvaWQgdmVyaWZ5Tm9Nb3JlRXZlbnRzKCkgewotICAgIHZlcmlmeU5vTW9yZUludGVyYWN0aW9u
cyhzZXJ2ZXJFdmVudHMpOwotICAgIHZlcmlmeU5vTW9yZUludGVyYWN0aW9ucyhjbGllbnRFdmVu
dHMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFF1ZXVlcyBydW5uYWJsZSB0byBiZSBydW4gYW5kIHdh
aXRzIGZvciBpdCB0byBiZSBleGVjdXRlZCBieSB0aGUgZXhlY3V0b3IgdGhyZWFkCi0gICAqLwot
ICBwdWJsaWMgdm9pZCBleGVjdXRlQW5kV2FpdChSdW5uYWJsZSBydW5uYWJsZSkgewotICAgIHRy
eSB7Ci0gICAgICBleGVjdXRvci5zdWJtaXQocnVubmFibGUpLmdldCgpOwotICAgIH0gY2F0Y2gg
KEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRl
c3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJl
Y3RSVENDbGllbnRUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3Jn
L2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDE1NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90
LmFwcHJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwot
aW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGlj
IG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1l
bnRNYXRjaGVycy5hbnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hl
cnMuaXNOb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLm1vY2s7Ci1p
bXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udGltZW91dDsKLWltcG9ydCBzdGF0aWMg
b3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1v
Y2tpdG8udmVyaWZ5Tm9Nb3JlSW50ZXJhY3Rpb25zOwotCi1pbXBvcnQgb3JnLmNocm9taXVtLnRl
c3RpbmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0
LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVy
LlJ1bldpdGg7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotaW1w
b3J0IG9yZy5yb2JvbGVjdHJpYy5zaGFkb3dzLlNoYWRvd0xvZzsKLWltcG9ydCBvcmcud2VicnRj
LkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLQot
LyoqCi0gKiBUZXN0IGZvciBEaXJlY3RSVENDbGllbnQuIFRlc3QgaXMgdmVyeSBzaW1wbGUgYW5k
IG9ubHkgdGVzdHMgdGhlIG92ZXJhbGwgc2FuaXR5IG9mIHRoZSBjbGFzcwotICogYmVoYXZpb3Vy
LgotICovCi1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFzcykKLUBDb25m
aWcobWFuaWZlc3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBEaXJlY3RSVENDbGllbnRU
ZXN0IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT01fVVJMID0gIiI7Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gTE9PUEJBQ0sgPSBmYWxzZTsKLQotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVNTVlfU0RQX01JRCA9ICJzZHBNaWQiOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVNTVlfU0RQID0gInNkcCI7Ci0KLSAgcHVibGljIHN0YXRp
YyBmaW5hbCBpbnQgU0VSVkVSX1dBSVQgPSAxMDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50
IE5FVFdPUktfVElNRU9VVCA9IDEwMDA7Ci0KLSAgcHJpdmF0ZSBEaXJlY3RSVENDbGllbnQgY2xp
ZW50OwotICBwcml2YXRlIERpcmVjdFJUQ0NsaWVudCBzZXJ2ZXI7Ci0KLSAgQXBwUlRDQ2xpZW50
LlNpZ25hbGluZ0V2ZW50cyBjbGllbnRFdmVudHM7Ci0gIEFwcFJUQ0NsaWVudC5TaWduYWxpbmdF
dmVudHMgc2VydmVyRXZlbnRzOwotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7
Ci0gICAgU2hhZG93TG9nLnN0cmVhbSA9IFN5c3RlbS5vdXQ7Ci0KLSAgICBjbGllbnRFdmVudHMg
PSBtb2NrKEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMuY2xhc3MpOwotICAgIHNlcnZlckV2
ZW50cyA9IG1vY2soQXBwUlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cy5jbGFzcyk7Ci0KLSAgICBj
bGllbnQgPSBuZXcgRGlyZWN0UlRDQ2xpZW50KGNsaWVudEV2ZW50cyk7Ci0gICAgc2VydmVyID0g
bmV3IERpcmVjdFJUQ0NsaWVudChzZXJ2ZXJFdmVudHMpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdFZhbGlkSXBQYXR0ZXJuKCkgewotICAgIC8vIFN0cmluZ3MgdGhhdCBzaG91
bGQgbWF0Y2ggdGhlIHBhdHRlcm4uCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIGZpbmFs
IFN0cmluZ1tdIGlwQWRkcmVzc2VzID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgIjAuMC4wLjAi
LAotICAgICAgICAiMTI3LjAuMC4xIiwKLSAgICAgICAgIjE5Mi4xNjguMC4xIiwKLSAgICAgICAg
IjAuMC4wLjA6ODg4OCIsCi0gICAgICAgICIxMjcuMC4wLjE6ODg4OCIsCi0gICAgICAgICIxOTIu
MTY4LjAuMTo4ODg4IiwKLSAgICAgICAgIjo6IiwKLSAgICAgICAgIjo6MSIsCi0gICAgICAgICIy
MDAxOjBkYjg6ODVhMzowMDAwOjAwMDA6OGEyZTowMzcwOjc5NDYiLAotICAgICAgICAiWzo6XSIs
Ci0gICAgICAgICJbOjoxXSIsCi0gICAgICAgICJbMjAwMTowZGI4Ojg1YTM6MDAwMDowMDAwOjhh
MmU6MDM3MDo3OTQ2XSIsCi0gICAgICAgICJbOjpdOjg4ODgiLAotICAgICAgICAiWzo6MV06ODg4
OCIsCi0gICAgICAgICJbMjAwMTowZGI4Ojg1YTM6MDAwMDowMDAwOjhhMmU6MDM3MDo3OTQ2XTo4
ODg4IgotICAgIH07Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgICBmb3IgKFN0cmluZyBp
cCA6IGlwQWRkcmVzc2VzKSB7Ci0gICAgICBhc3NlcnRUcnVlKGlwICsgIiBkaWRuJ3QgbWF0Y2gg
SVBfUEFUVEVSTiBldmVuIHRob3VnaCBpdCBzaG91bGQuIiwKLSAgICAgICAgICBEaXJlY3RSVEND
bGllbnQuSVBfUEFUVEVSTi5tYXRjaGVyKGlwKS5tYXRjaGVzKCkpOwotICAgIH0KLSAgfQotCi0g
IEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkSXBQYXR0ZXJuKCkgewotICAgIC8vIFN0
cmluZ3MgdGhhdCBzaG91bGRuJ3QgbWF0Y2ggdGhlIHBhdHRlcm4uCi0gICAgLy8gY2xhbmctZm9y
bWF0IG9mZgotICAgIGZpbmFsIFN0cmluZ1tdIGludmFsaWRJcEFkZHJlc3NlcyA9IG5ldyBTdHJp
bmdbXSB7Ci0gICAgICAgICJIZWxsbywgV29ybGQhIiwKLSAgICAgICAgImFhYWEiLAotICAgICAg
ICAiMTExMSIsCi0gICAgICAgICJbaGVsbG8gd29ybGRdIiwKLSAgICAgICAgImhlbGxvOndvcmxk
IgotICAgIH07Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgICBmb3IgKFN0cmluZyBpbnZh
bGlkSXAgOiBpbnZhbGlkSXBBZGRyZXNzZXMpIHsKLSAgICAgIGFzc2VydEZhbHNlKGludmFsaWRJ
cCArICIgbWF0Y2hlZCBJUF9QQVRURVJOIGV2ZW4gdGhvdWdoIGl0IHNob3VsZG4ndC4iLAotICAg
ICAgICAgIERpcmVjdFJUQ0NsaWVudC5JUF9QQVRURVJOLm1hdGNoZXIoaW52YWxpZElwKS5tYXRj
aGVzKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFRPRE8oc2FrYWwpOiBSZXBsYWNlIGlzTm90TnVs
bChjbGFzcykgd2l0aCBpc05vdE51bGwoKSBvbmNlIEphdmEgOCBpcyB1c2VkLgotICBAU3VwcHJl
c3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RGly
ZWN0UlRDQ2xpZW50KCkgewotICAgIHNlcnZlci5jb25uZWN0VG9Sb29tKG5ldyBBcHBSVENDbGll
bnQuUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzKFJPT01fVVJMLCAiMC4wLjAuMCIsIExPT1BCQUNL
KSk7Ci0gICAgdHJ5IHsKLSAgICAgIFRocmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7Ci0gICAgfSBj
YXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2Uo
KSk7Ci0gICAgfQotICAgIGNsaWVudC5jb25uZWN0VG9Sb29tKAotICAgICAgICBuZXcgQXBwUlRD
Q2xpZW50LlJvb21Db25uZWN0aW9uUGFyYW1ldGVycyhST09NX1VSTCwgIjEyNy4wLjAuMSIsIExP
T1BCQUNLKSk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVP
VVQpKQotICAgICAgICAub25Db25uZWN0ZWRUb1Jvb20oYW55KEFwcFJUQ0NsaWVudC5TaWduYWxp
bmdQYXJhbWV0ZXJzLmNsYXNzKSk7Ci0KLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAg
PSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSLCBE
VU1NWV9TRFApOwotICAgIHNlcnZlci5zZW5kT2ZmZXJTZHAob2ZmZXJTZHApOwotICAgIHZlcmlm
eShjbGllbnRFdmVudHMsIHRpbWVvdXQoTkVUV09SS19USU1FT1VUKSkKLSAgICAgICAgLm9uQ29u
bmVjdGVkVG9Sb29tKGFueShBcHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVycy5jbGFzcykp
OwotCi0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dlclNkcCA9Ci0gICAgICAgIG5ldyBTZXNz
aW9uRGVzY3JpcHRpb24oU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSLCBEVU1NWV9TRFAp
OwotICAgIGNsaWVudC5zZW5kQW5zd2VyU2RwKGFuc3dlclNkcCk7Ci0gICAgdmVyaWZ5KHNlcnZl
ckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25SZW1vdGVEZXNj
cmlwdGlvbihpc05vdE51bGwoU2Vzc2lvbkRlc2NyaXB0aW9uLmNsYXNzKSk7Ci0KLSAgICBJY2VD
YW5kaWRhdGUgY2FuZGlkYXRlID0gbmV3IEljZUNhbmRpZGF0ZShEVU1NWV9TRFBfTUlELCAwLCBE
VU1NWV9TRFApOwotICAgIHNlcnZlci5zZW5kTG9jYWxJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsK
LSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KE5FVFdPUktfVElNRU9VVCkpCi0gICAg
ICAgIC5vblJlbW90ZUljZUNhbmRpZGF0ZShpc05vdE51bGwoSWNlQ2FuZGlkYXRlLmNsYXNzKSk7
Ci0KLSAgICBjbGllbnQuc2VuZExvY2FsSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgdmVy
aWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25S
ZW1vdGVJY2VDYW5kaWRhdGUoaXNOb3ROdWxsKEljZUNhbmRpZGF0ZS5jbGFzcykpOwotCi0gICAg
Y2xpZW50LmRpc2Nvbm5lY3RGcm9tUm9vbSgpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRp
bWVvdXQoTkVUV09SS19USU1FT1VUKSkub25DaGFubmVsQ2xvc2UoKTsKLSAgICB2ZXJpZnkoc2Vy
dmVyRXZlbnRzLCB0aW1lb3V0KE5FVFdPUktfVElNRU9VVCkpLm9uQ2hhbm5lbENsb3NlKCk7Ci0K
LSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMoY2xpZW50RXZlbnRzKTsKLSAgICB2ZXJpZnlO
b01vcmVJbnRlcmFjdGlvbnMoc2VydmVyRXZlbnRzKTsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3Ny
Yy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENsaWVudFRlc3QuamF2YQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9h
bmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50VGVzdC5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9U
Q1BDaGFubmVsQ2xpZW50VGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjAzICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBv
cnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tp
dG8uTW9ja2l0by50aW1lb3V0OwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnZl
cmlmeTsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnlOb01vcmVJbnRl
cmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LnV0aWwuRGlzYWJsZWRU
ZXN0OwotaW1wb3J0IG9yZy5jaHJvbWl1bS50ZXN0aW5nLmxvY2FsLkxvY2FsUm9ib2xlY3RyaWNU
ZXN0UnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVm
b3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVu
V2l0aDsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NrOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tp
dG9Bbm5vdGF0aW9uczsKLWltcG9ydCBvcmcucm9ib2xlY3RyaWMuYW5ub3RhdGlvbi5Db25maWc7
Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLnNoYWRvd3MuU2hhZG93TG9nOwotCi1pbXBvcnQgamF2
YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25j
dXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsK
LQotQFJ1bldpdGgoTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXIuY2xhc3MpCi1AQ29uZmlnKG1h
bmlmZXN0ID0gQ29uZmlnLk5PTkUpCi1wdWJsaWMgY2xhc3MgVENQQ2hhbm5lbENsaWVudFRlc3Qg
ewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE9SVCA9IDg4ODg7Ci0gIC8qKgotICAgKiBI
b3cgbG9uZyB3ZSB3YWl0IGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBD
aG9zZW4gcXVpdGUgYXJiaXRyYXJpbHkgYW5kCi0gICAqIGNvdWxkIGJlIG1hZGUgc21hbGxlciBp
ZiBuZWVkIGJlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFUlZFUl9XQUlU
ID0gMTA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNUX1RJTUVPVVQgPSAxMDA7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRU5EX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBESVNDT05ORUNUX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGludCBURVJNSU5BVElPTl9USU1FT1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTUVTU0FHRV9TRVJWRVIgPSAiSGVsbG8sIFNlcnZlciEi
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9NRVNTQUdFX0NMSUVOVCA9ICJI
ZWxsbywgQ2xpZW50ISI7Ci0KLSAgQE1vY2sgVENQQ2hhbm5lbENsaWVudC5UQ1BDaGFubmVsRXZl
bnRzIHNlcnZlckV2ZW50czsKLSAgQE1vY2sgVENQQ2hhbm5lbENsaWVudC5UQ1BDaGFubmVsRXZl
bnRzIGNsaWVudEV2ZW50czsKLQotICBwcml2YXRlIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsK
LSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IHNlcnZlcjsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVs
Q2xpZW50IGNsaWVudDsKLQotICBAQmVmb3JlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAg
IFNoYWRvd0xvZy5zdHJlYW0gPSBTeXN0ZW0ub3V0OwotCi0gICAgTW9ja2l0b0Fubm90YXRpb25z
LmluaXRNb2Nrcyh0aGlzKTsKLQotICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRo
cmVhZEV4ZWN1dG9yKCk7Ci0gIH0KLQotICBAQWZ0ZXIKLSAgcHVibGljIHZvaWQgdGVhckRvd24o
KSB7Ci0gICAgdmVyaWZ5Tm9Nb3JlRXZlbnRzKCk7Ci0KLSAgICBleGVjdXRlQW5kV2FpdChuZXcg
UnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsK
LSAgICAgICAgY2xpZW50LmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgc2VydmVyLmRpc2Nvbm5lY3Qo
KTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8vIFN0b3AgdGhlIGV4ZWN1dG9yIHRocmVhZAot
ICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7Ci0gICAgdHJ5IHsKLSAgICAgIGV4ZWN1dG9yLmF3YWl0
VGVybWluYXRpb24oVEVSTUlOQVRJT05fVElNRU9VVCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsK
LSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0
TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29u
bmVjdElQdjQoKSB7Ci0gICAgc2V0VXBJUHY0U2VydmVyKCk7Ci0gICAgdHJ5IHsKLSAgICAgIFRo
cmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRp
b24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHNldFVwSVB2
NENsaWVudCgpOwotCi0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChDT05ORUNUX1RJ
TUVPVVQpKS5vblRDUENvbm5lY3RlZCh0cnVlKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0
aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ29ubmVjdGVkKGZhbHNlKTsKLSAgfQotCi0g
IC8vIEBUZXN0Ci0gIC8vIERpc2FibGVkIGJlY2F1c2UgaXQgZmFpbHMgd2hlbiBJUHY2IGlzIG5v
dCBzdXBwb3J0ZWQgb24gdGhlIGJvdC4KLSAgLy8gVE9ETyhlaG1hbGRvbmFkbyk6IEVuYWJsZSB3
aGVuIGJ1Z3Mud2VicnRjLm9yZy82NDM3IGlzIGZpeGVkLgotICBARGlzYWJsZWRUZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RDb25uZWN0SVB2NigpIHsKLSAgICBzZXRVcElQdjZTZXJ2ZXIoKTsKLSAg
ICB0cnkgewotICAgICAgVGhyZWFkLnNsZWVwKFNFUlZFUl9XQUlUKTsKLSAgICB9IGNhdGNoIChJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAg
ICB9Ci0gICAgc2V0VXBJUHY2Q2xpZW50KCk7Ci0KLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0
aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ29ubmVjdGVkKHRydWUpOwotICAgIHZlcmlm
eShjbGllbnRFdmVudHMsIHRpbWVvdXQoQ09OTkVDVF9USU1FT1VUKSkub25UQ1BDb25uZWN0ZWQo
ZmFsc2UpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNlbmREYXRhKCkgewot
ICAgIHRlc3RDb25uZWN0SVB2NCgpOwotCi0gICAgZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxl
KCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAg
IGNsaWVudC5zZW5kKFRFU1RfTUVTU0FHRV9TRVJWRVIpOwotICAgICAgICBzZXJ2ZXIuc2VuZChU
RVNUX01FU1NBR0VfQ0xJRU5UKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHZlcmlmeShzZXJ2
ZXJFdmVudHMsIHRpbWVvdXQoU0VORF9USU1FT1VUKSkub25UQ1BNZXNzYWdlKFRFU1RfTUVTU0FH
RV9TRVJWRVIpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoU0VORF9USU1FT1VU
KSkub25UQ1BNZXNzYWdlKFRFU1RfTUVTU0FHRV9DTElFTlQpOwotICB9Ci0KLSAgQFRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdERpc2Nvbm5lY3RTZXJ2ZXIoKSB7Ci0gICAgdGVzdENvbm5lY3RJUHY0
KCk7Ci0gICAgZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRl
Ci0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHNlcnZlci5kaXNjb25uZWN0KCk7
Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KERJ
U0NPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ2xvc2UoKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRz
LCB0aW1lb3V0KERJU0NPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ2xvc2UoKTsKLSAgfQotCi0gIEBU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0Q2xpZW50KCkgewotICAgIHRlc3RDb25u
ZWN0SVB2NCgpOwotICAgIGV4ZWN1dGVBbmRXYWl0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBP
dmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjbGllbnQuZGlzY29u
bmVjdCgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGlt
ZW91dChESVNDT05ORUNUX1RJTUVPVVQpKS5vblRDUENsb3NlKCk7Ci0gICAgdmVyaWZ5KGNsaWVu
dEV2ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVPVVQpKS5vblRDUENsb3NlKCk7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY0U2VydmVyKCkgewotICAgIHNldFVwU2VydmVyKCIw
LjAuMC4wIiwgUE9SVCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY0Q2xpZW50KCkg
ewotICAgIHNldFVwQ2xpZW50KCIxMjcuMC4wLjEiLCBQT1JUKTsKLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBzZXRVcElQdjZTZXJ2ZXIoKSB7Ci0gICAgc2V0VXBTZXJ2ZXIoIjo6IiwgUE9SVCk7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY2Q2xpZW50KCkgewotICAgIHNldFVwQ2xpZW50
KCI6OjEiLCBQT1JUKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRVcFNlcnZlcihTdHJpbmcg
aXAsIGludCBwb3J0KSB7Ci0gICAgc2VydmVyID0gbmV3IFRDUENoYW5uZWxDbGllbnQoZXhlY3V0
b3IsIHNlcnZlckV2ZW50cywgaXAsIHBvcnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFVw
Q2xpZW50KFN0cmluZyBpcCwgaW50IHBvcnQpIHsKLSAgICBjbGllbnQgPSBuZXcgVENQQ2hhbm5l
bENsaWVudChleGVjdXRvciwgY2xpZW50RXZlbnRzLCBpcCwgcG9ydCk7Ci0gIH0KLQotICAvKioK
LSAgICogVmVyaWZpZXMgbm8gbW9yZSBzZXJ2ZXIgb3IgY2xpZW50IGV2ZW50cyBoYXZlIGJlZW4g
aXNzdWVkCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5Tm9Nb3JlRXZlbnRzKCkgewotICAg
IHZlcmlmeU5vTW9yZUludGVyYWN0aW9ucyhzZXJ2ZXJFdmVudHMpOwotICAgIHZlcmlmeU5vTW9y
ZUludGVyYWN0aW9ucyhjbGllbnRFdmVudHMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFF1ZXVlcyBy
dW5uYWJsZSB0byBiZSBydW4gYW5kIHdhaXRzIGZvciBpdCB0byBiZSBleGVjdXRlZCBieSB0aGUg
ZXhlY3V0b3IgdGhyZWFkCi0gICAqLwotICBwdWJsaWMgdm9pZCBleGVjdXRlQW5kV2FpdChSdW5u
YWJsZSBydW5uYWJsZSkgewotICAgIHRyeSB7Ci0gICAgICBleGVjdXRvci5zdWJtaXQocnVubmFi
bGUpLmdldCgpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0
TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3Qv
YXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3Jj
L29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJlY3RSVENDbGllbnRUZXN0LmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRl
c3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1NSArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVu
aXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFz
c2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBz
dGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVycy5hbnk7Ci1pbXBvcnQgc3RhdGljIG9y
Zy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuaXNOb3ROdWxsOwotaW1wb3J0IHN0YXRpYyBvcmcu
bW9ja2l0by5Nb2NraXRvLm1vY2s7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8u
dGltZW91dDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnk7Ci1pbXBv
cnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udmVyaWZ5Tm9Nb3JlSW50ZXJhY3Rpb25zOwot
Ci1pbXBvcnQgb3JnLmNocm9taXVtLnRlc3RpbmcubG9jYWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RS
dW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsK
LWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmlj
LmFubm90YXRpb24uQ29uZmlnOwotaW1wb3J0IG9yZy5yb2JvbGVjdHJpYy5zaGFkb3dzLlNoYWRv
d0xvZzsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRj
LlNlc3Npb25EZXNjcmlwdGlvbjsKLQotLyoqCi0gKiBUZXN0IGZvciBEaXJlY3RSVENDbGllbnQu
IFRlc3QgaXMgdmVyeSBzaW1wbGUgYW5kIG9ubHkgdGVzdHMgdGhlIG92ZXJhbGwgc2FuaXR5IG9m
IHRoZSBjbGFzcwotICogYmVoYXZpb3VyLgotICovCi1AUnVuV2l0aChMb2NhbFJvYm9sZWN0cmlj
VGVzdFJ1bm5lci5jbGFzcykKLUBDb25maWcobWFuaWZlc3QgPSBDb25maWcuTk9ORSkKLXB1Ymxp
YyBjbGFzcyBEaXJlY3RSVENDbGllbnRUZXN0IHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIFJPT01fVVJMID0gIiI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gTE9PUEJB
Q0sgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVNTVlfU0RQX01J
RCA9ICJzZHBNaWQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRFVNTVlfU0RQID0g
InNkcCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgU0VSVkVSX1dBSVQgPSAxMDA7Ci0g
IHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktfVElNRU9VVCA9IDEwMDA7Ci0KLSAgcHJp
dmF0ZSBEaXJlY3RSVENDbGllbnQgY2xpZW50OwotICBwcml2YXRlIERpcmVjdFJUQ0NsaWVudCBz
ZXJ2ZXI7Ci0KLSAgQXBwUlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cyBjbGllbnRFdmVudHM7Ci0g
IEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMgc2VydmVyRXZlbnRzOwotCi0gIEBCZWZvcmUK
LSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgU2hhZG93TG9nLnN0cmVhbSA9IFN5c3RlbS5v
dXQ7Ci0KLSAgICBjbGllbnRFdmVudHMgPSBtb2NrKEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVu
dHMuY2xhc3MpOwotICAgIHNlcnZlckV2ZW50cyA9IG1vY2soQXBwUlRDQ2xpZW50LlNpZ25hbGlu
Z0V2ZW50cy5jbGFzcyk7Ci0KLSAgICBjbGllbnQgPSBuZXcgRGlyZWN0UlRDQ2xpZW50KGNsaWVu
dEV2ZW50cyk7Ci0gICAgc2VydmVyID0gbmV3IERpcmVjdFJUQ0NsaWVudChzZXJ2ZXJFdmVudHMp
OwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkSXBQYXR0ZXJuKCkgewot
ICAgIC8vIFN0cmluZ3MgdGhhdCBzaG91bGQgbWF0Y2ggdGhlIHBhdHRlcm4uCi0gICAgLy8gY2xh
bmctZm9ybWF0IG9mZgotICAgIGZpbmFsIFN0cmluZ1tdIGlwQWRkcmVzc2VzID0gbmV3IFN0cmlu
Z1tdIHsKLSAgICAgICAgIjAuMC4wLjAiLAotICAgICAgICAiMTI3LjAuMC4xIiwKLSAgICAgICAg
IjE5Mi4xNjguMC4xIiwKLSAgICAgICAgIjAuMC4wLjA6ODg4OCIsCi0gICAgICAgICIxMjcuMC4w
LjE6ODg4OCIsCi0gICAgICAgICIxOTIuMTY4LjAuMTo4ODg4IiwKLSAgICAgICAgIjo6IiwKLSAg
ICAgICAgIjo6MSIsCi0gICAgICAgICIyMDAxOjBkYjg6ODVhMzowMDAwOjAwMDA6OGEyZTowMzcw
Ojc5NDYiLAotICAgICAgICAiWzo6XSIsCi0gICAgICAgICJbOjoxXSIsCi0gICAgICAgICJbMjAw
MTowZGI4Ojg1YTM6MDAwMDowMDAwOjhhMmU6MDM3MDo3OTQ2XSIsCi0gICAgICAgICJbOjpdOjg4
ODgiLAotICAgICAgICAiWzo6MV06ODg4OCIsCi0gICAgICAgICJbMjAwMTowZGI4Ojg1YTM6MDAw
MDowMDAwOjhhMmU6MDM3MDo3OTQ2XTo4ODg4IgotICAgIH07Ci0gICAgLy8gY2xhbmctZm9ybWF0
IG9uCi0KLSAgICBmb3IgKFN0cmluZyBpcCA6IGlwQWRkcmVzc2VzKSB7Ci0gICAgICBhc3NlcnRU
cnVlKGlwICsgIiBkaWRuJ3QgbWF0Y2ggSVBfUEFUVEVSTiBldmVuIHRob3VnaCBpdCBzaG91bGQu
IiwKLSAgICAgICAgICBEaXJlY3RSVENDbGllbnQuSVBfUEFUVEVSTi5tYXRjaGVyKGlwKS5tYXRj
aGVzKCkpOwotICAgIH0KLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlk
SXBQYXR0ZXJuKCkgewotICAgIC8vIFN0cmluZ3MgdGhhdCBzaG91bGRuJ3QgbWF0Y2ggdGhlIHBh
dHRlcm4uCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIGZpbmFsIFN0cmluZ1tdIGludmFs
aWRJcEFkZHJlc3NlcyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAgICJIZWxsbywgV29ybGQhIiwK
LSAgICAgICAgImFhYWEiLAotICAgICAgICAiMTExMSIsCi0gICAgICAgICJbaGVsbG8gd29ybGRd
IiwKLSAgICAgICAgImhlbGxvOndvcmxkIgotICAgIH07Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9u
Ci0KLSAgICBmb3IgKFN0cmluZyBpbnZhbGlkSXAgOiBpbnZhbGlkSXBBZGRyZXNzZXMpIHsKLSAg
ICAgIGFzc2VydEZhbHNlKGludmFsaWRJcCArICIgbWF0Y2hlZCBJUF9QQVRURVJOIGV2ZW4gdGhv
dWdoIGl0IHNob3VsZG4ndC4iLAotICAgICAgICAgIERpcmVjdFJUQ0NsaWVudC5JUF9QQVRURVJO
Lm1hdGNoZXIoaW52YWxpZElwKS5tYXRjaGVzKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFRPRE8o
c2FrYWwpOiBSZXBsYWNlIGlzTm90TnVsbChjbGFzcykgd2l0aCBpc05vdE51bGwoKSBvbmNlIEph
dmEgOCBpcyB1c2VkLgotICBAU3VwcHJlc3NXYXJuaW5ncygiZGVwcmVjYXRpb24iKQotICBAVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0RGlyZWN0UlRDQ2xpZW50KCkgewotICAgIHNlcnZlci5jb25u
ZWN0VG9Sb29tKG5ldyBBcHBSVENDbGllbnQuUm9vbUNvbm5lY3Rpb25QYXJhbWV0ZXJzKFJPT01f
VVJMLCAiMC4wLjAuMCIsIExPT1BCQUNLKSk7Ci0gICAgdHJ5IHsKLSAgICAgIFRocmVhZC5zbGVl
cChTRVJWRVJfV0FJVCk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewot
ICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIGNsaWVudC5jb25uZWN0VG9S
b29tKAotICAgICAgICBuZXcgQXBwUlRDQ2xpZW50LlJvb21Db25uZWN0aW9uUGFyYW1ldGVycyhS
T09NX1VSTCwgIjEyNy4wLjAuMSIsIExPT1BCQUNLKSk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50
cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25Db25uZWN0ZWRUb1Jvb20o
YW55KEFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0ZXJzLmNsYXNzKSk7Ci0KLSAgICBTZXNz
aW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKFNlc3Npb25E
ZXNjcmlwdGlvbi5UeXBlLk9GRkVSLCBEVU1NWV9TRFApOwotICAgIHNlcnZlci5zZW5kT2ZmZXJT
ZHAob2ZmZXJTZHApOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoTkVUV09SS19U
SU1FT1VUKSkKLSAgICAgICAgLm9uQ29ubmVjdGVkVG9Sb29tKGFueShBcHBSVENDbGllbnQuU2ln
bmFsaW5nUGFyYW1ldGVycy5jbGFzcykpOwotCi0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dl
clNkcCA9Ci0gICAgICAgIG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oU2Vzc2lvbkRlc2NyaXB0aW9u
LlR5cGUuQU5TV0VSLCBEVU1NWV9TRFApOwotICAgIGNsaWVudC5zZW5kQW5zd2VyU2RwKGFuc3dl
clNkcCk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQp
KQotICAgICAgICAub25SZW1vdGVEZXNjcmlwdGlvbihpc05vdE51bGwoU2Vzc2lvbkRlc2NyaXB0
aW9uLmNsYXNzKSk7Ci0KLSAgICBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlID0gbmV3IEljZUNhbmRp
ZGF0ZShEVU1NWV9TRFBfTUlELCAwLCBEVU1NWV9TRFApOwotICAgIHNlcnZlci5zZW5kTG9jYWxJ
Y2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0
KE5FVFdPUktfVElNRU9VVCkpCi0gICAgICAgIC5vblJlbW90ZUljZUNhbmRpZGF0ZShpc05vdE51
bGwoSWNlQ2FuZGlkYXRlLmNsYXNzKSk7Ci0KLSAgICBjbGllbnQuc2VuZExvY2FsSWNlQ2FuZGlk
YXRlKGNhbmRpZGF0ZSk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JL
X1RJTUVPVVQpKQotICAgICAgICAub25SZW1vdGVJY2VDYW5kaWRhdGUoaXNOb3ROdWxsKEljZUNh
bmRpZGF0ZS5jbGFzcykpOwotCi0gICAgY2xpZW50LmRpc2Nvbm5lY3RGcm9tUm9vbSgpOwotICAg
IHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoTkVUV09SS19USU1FT1VUKSkub25DaGFubmVs
Q2xvc2UoKTsKLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KE5FVFdPUktfVElNRU9V
VCkpLm9uQ2hhbm5lbENsb3NlKCk7Ci0KLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMoY2xp
ZW50RXZlbnRzKTsKLSAgICB2ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnMoc2VydmVyRXZlbnRzKTsK
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvVENQQ2hhbm5lbENs
aWVudFRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy9UQ1BDaGFubmVsQ2xpZW50VGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQv
c3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50VGVzdC5qYXZhCShub25leGlz
dGVudCkKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJU
QyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsK
LWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by50aW1lb3V0OwotaW1wb3J0IHN0YXRp
YyBvcmcubW9ja2l0by5Nb2NraXRvLnZlcmlmeTsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8u
TW9ja2l0by52ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnM7Ci0KLWltcG9ydCBvcmcuY2hyb21pdW0u
YmFzZS50ZXN0LnV0aWwuRGlzYWJsZWRUZXN0OwotaW1wb3J0IG9yZy5jaHJvbWl1bS50ZXN0aW5n
LmxvY2FsLkxvY2FsUm9ib2xlY3RyaWNUZXN0UnVubmVyOwotaW1wb3J0IG9yZy5qdW5pdC5BZnRl
cjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1w
b3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWltcG9ydCBvcmcubW9ja2l0by5Nb2NrOwot
aW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG9Bbm5vdGF0aW9uczsKLWltcG9ydCBvcmcucm9ib2xl
Y3RyaWMuYW5ub3RhdGlvbi5Db25maWc7Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLnNoYWRvd3Mu
U2hhZG93TG9nOwotCi1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNl
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotQFJ1bldpdGgoTG9jYWxSb2JvbGVjdHJpY1Rlc3RS
dW5uZXIuY2xhc3MpCi1AQ29uZmlnKG1hbmlmZXN0ID0gQ29uZmlnLk5PTkUpCi1wdWJsaWMgY2xh
c3MgVENQQ2hhbm5lbENsaWVudFRlc3QgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE9S
VCA9IDg4ODg7Ci0gIC8qKgotICAgKiBIb3cgbG9uZyB3ZSB3YWl0IGJlZm9yZSB0cnlpbmcgdG8g
Y29ubmVjdCB0byB0aGUgc2VydmVyLiBDaG9zZW4gcXVpdGUgYXJiaXRyYXJpbHkgYW5kCi0gICAq
IGNvdWxkIGJlIG1hZGUgc21hbGxlciBpZiBuZWVkIGJlLgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IFNFUlZFUl9XQUlUID0gMTA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBDT05ORUNUX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBTRU5E
X1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBESVNDT05ORUNUX1RJ
TUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBURVJNSU5BVElPTl9USU1F
T1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfTUVTU0FHRV9T
RVJWRVIgPSAiSGVsbG8sIFNlcnZlciEiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VEVTVF9NRVNTQUdFX0NMSUVOVCA9ICJIZWxsbywgQ2xpZW50ISI7Ci0KLSAgQE1vY2sgVENQQ2hh
bm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIHNlcnZlckV2ZW50czsKLSAgQE1vY2sgVENQQ2hh
bm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIGNsaWVudEV2ZW50czsKLQotICBwcml2YXRlIEV4
ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IHNlcnZl
cjsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IGNsaWVudDsKLQotICBAQmVmb3JlCi0gIHB1
YmxpYyB2b2lkIHNldFVwKCkgewotICAgIFNoYWRvd0xvZy5zdHJlYW0gPSBTeXN0ZW0ub3V0Owot
Ci0gICAgTW9ja2l0b0Fubm90YXRpb25zLmluaXRNb2Nrcyh0aGlzKTsKLQotICAgIGV4ZWN1dG9y
ID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7Ci0gIH0KLQotICBAQWZ0ZXIK
LSAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0gICAgdmVyaWZ5Tm9Nb3JlRXZlbnRzKCk7Ci0K
LSAgICBleGVjdXRlQW5kV2FpdChuZXcgUnVubmFibGUoKSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAg
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgY2xpZW50LmRpc2Nvbm5lY3QoKTsKLSAg
ICAgICAgc2VydmVyLmRpc2Nvbm5lY3QoKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIC8vIFN0
b3AgdGhlIGV4ZWN1dG9yIHRocmVhZAotICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7Ci0gICAgdHJ5
IHsKLSAgICAgIGV4ZWN1dG9yLmF3YWl0VGVybWluYXRpb24oVEVSTUlOQVRJT05fVElNRU9VVCwg
VGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlv
biBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLQotICBAVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0Q29ubmVjdElQdjQoKSB7Ci0gICAgc2V0VXBJUHY0U2VydmVy
KCk7Ci0gICAgdHJ5IHsKLSAgICAgIFRocmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7Ci0gICAgfSBj
YXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2Uo
KSk7Ci0gICAgfQotICAgIHNldFVwSVB2NENsaWVudCgpOwotCi0gICAgdmVyaWZ5KHNlcnZlckV2
ZW50cywgdGltZW91dChDT05ORUNUX1RJTUVPVVQpKS5vblRDUENvbm5lY3RlZCh0cnVlKTsKLSAg
ICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ29u
bmVjdGVkKGZhbHNlKTsKLSAgfQotCi0gIC8vIEBUZXN0Ci0gIC8vIERpc2FibGVkIGJlY2F1c2Ug
aXQgZmFpbHMgd2hlbiBJUHY2IGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhlIGJvdC4KLSAgLy8gVE9E
TyhlaG1hbGRvbmFkbyk6IEVuYWJsZSB3aGVuIGJ1Z3Mud2VicnRjLm9yZy82NDM3IGlzIGZpeGVk
LgotICBARGlzYWJsZWRUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDb25uZWN0SVB2NigpIHsKLSAg
ICBzZXRVcElQdjZTZXJ2ZXIoKTsKLSAgICB0cnkgewotICAgICAgVGhyZWFkLnNsZWVwKFNFUlZF
Ul9XQUlUKTsKLSAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBm
YWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAgc2V0VXBJUHY2Q2xpZW50KCk7Ci0KLSAg
ICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KENPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ29u
bmVjdGVkKHRydWUpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoQ09OTkVDVF9U
SU1FT1VUKSkub25UQ1BDb25uZWN0ZWQoZmFsc2UpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFNlbmREYXRhKCkgewotICAgIHRlc3RDb25uZWN0SVB2NCgpOwotCi0gICAgZXhl
Y3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNsaWVudC5zZW5kKFRFU1RfTUVTU0FHRV9TRVJWRVIp
OwotICAgICAgICBzZXJ2ZXIuc2VuZChURVNUX01FU1NBR0VfQ0xJRU5UKTsKLSAgICAgIH0KLSAg
ICB9KTsKLQotICAgIHZlcmlmeShzZXJ2ZXJFdmVudHMsIHRpbWVvdXQoU0VORF9USU1FT1VUKSku
b25UQ1BNZXNzYWdlKFRFU1RfTUVTU0FHRV9TRVJWRVIpOwotICAgIHZlcmlmeShjbGllbnRFdmVu
dHMsIHRpbWVvdXQoU0VORF9USU1FT1VUKSkub25UQ1BNZXNzYWdlKFRFU1RfTUVTU0FHRV9DTElF
TlQpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdERpc2Nvbm5lY3RTZXJ2ZXIo
KSB7Ci0gICAgdGVzdENvbm5lY3RJUHY0KCk7Ci0gICAgZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5h
YmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAg
ICAgIHNlcnZlci5kaXNjb25uZWN0KCk7Ci0gICAgICB9Ci0gICAgfSk7Ci0KLSAgICB2ZXJpZnko
c2VydmVyRXZlbnRzLCB0aW1lb3V0KERJU0NPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ2xvc2UoKTsK
LSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KERJU0NPTk5FQ1RfVElNRU9VVCkpLm9u
VENQQ2xvc2UoKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0
Q2xpZW50KCkgewotICAgIHRlc3RDb25uZWN0SVB2NCgpOwotICAgIGV4ZWN1dGVBbmRXYWl0KG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQotICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICBjbGllbnQuZGlzY29ubmVjdCgpOwotICAgICAgfQotICAgIH0pOwotCi0gICAg
dmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVPVVQpKS5vblRDUENs
b3NlKCk7Ci0gICAgdmVyaWZ5KGNsaWVudEV2ZW50cywgdGltZW91dChESVNDT05ORUNUX1RJTUVP
VVQpKS5vblRDUENsb3NlKCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY0U2VydmVy
KCkgewotICAgIHNldFVwU2VydmVyKCIwLjAuMC4wIiwgUE9SVCk7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgc2V0VXBJUHY0Q2xpZW50KCkgewotICAgIHNldFVwQ2xpZW50KCIxMjcuMC4wLjEiLCBQ
T1JUKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRVcElQdjZTZXJ2ZXIoKSB7Ci0gICAgc2V0
VXBTZXJ2ZXIoIjo6IiwgUE9SVCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY2Q2xp
ZW50KCkgewotICAgIHNldFVwQ2xpZW50KCI6OjEiLCBQT1JUKTsKLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBzZXRVcFNlcnZlcihTdHJpbmcgaXAsIGludCBwb3J0KSB7Ci0gICAgc2VydmVyID0gbmV3
IFRDUENoYW5uZWxDbGllbnQoZXhlY3V0b3IsIHNlcnZlckV2ZW50cywgaXAsIHBvcnQpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFVwQ2xpZW50KFN0cmluZyBpcCwgaW50IHBvcnQpIHsKLSAg
ICBjbGllbnQgPSBuZXcgVENQQ2hhbm5lbENsaWVudChleGVjdXRvciwgY2xpZW50RXZlbnRzLCBp
cCwgcG9ydCk7Ci0gIH0KLQotICAvKioKLSAgICogVmVyaWZpZXMgbm8gbW9yZSBzZXJ2ZXIgb3Ig
Y2xpZW50IGV2ZW50cyBoYXZlIGJlZW4gaXNzdWVkCi0gICAqLwotICBwcml2YXRlIHZvaWQgdmVy
aWZ5Tm9Nb3JlRXZlbnRzKCkgewotICAgIHZlcmlmeU5vTW9yZUludGVyYWN0aW9ucyhzZXJ2ZXJF
dmVudHMpOwotICAgIHZlcmlmeU5vTW9yZUludGVyYWN0aW9ucyhjbGllbnRFdmVudHMpOwotICB9
Ci0KLSAgLyoqCi0gICAqIFF1ZXVlcyBydW5uYWJsZSB0byBiZSBydW4gYW5kIHdhaXRzIGZvciBp
dCB0byBiZSBleGVjdXRlZCBieSB0aGUgZXhlY3V0b3IgdGhyZWFkCi0gICAqLwotICBwdWJsaWMg
dm9pZCBleGVjdXRlQW5kV2FpdChSdW5uYWJsZSBydW5uYWJsZSkgewotICAgIHRyeSB7Ci0gICAg
ICBleGVjdXRvci5zdWJtaXQocnVubmFibGUpLmdldCgpOwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlv
biBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJv
aWRqdW5pdC9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRlc3QuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9EaXJlY3RSVENDbGll
bnRUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWRqdW5pdC9zcmMvb3JnL2FwcHNwb3Qv
YXBwcnRjL0RpcmVjdFJUQ0NsaWVudFRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDE1NSAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3Jz
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0YzsK
LQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwotaW1wb3J0IHN0
YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5p
dC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uQXJndW1lbnRNYXRjaGVy
cy5hbnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLkFyZ3VtZW50TWF0Y2hlcnMuaXNOb3RO
dWxsOwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLm1vY2s7Ci1pbXBvcnQgc3Rh
dGljIG9yZy5tb2NraXRvLk1vY2tpdG8udGltZW91dDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tp
dG8uTW9ja2l0by52ZXJpZnk7Ci1pbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8udmVy
aWZ5Tm9Nb3JlSW50ZXJhY3Rpb25zOwotCi1pbXBvcnQgb3JnLmNocm9taXVtLnRlc3RpbmcubG9j
YWwuTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsK
LWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLWltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7
Ci1pbXBvcnQgb3JnLnJvYm9sZWN0cmljLmFubm90YXRpb24uQ29uZmlnOwotaW1wb3J0IG9yZy5y
b2JvbGVjdHJpYy5zaGFkb3dzLlNoYWRvd0xvZzsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRp
ZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLQotLyoqCi0gKiBU
ZXN0IGZvciBEaXJlY3RSVENDbGllbnQuIFRlc3QgaXMgdmVyeSBzaW1wbGUgYW5kIG9ubHkgdGVz
dHMgdGhlIG92ZXJhbGwgc2FuaXR5IG9mIHRoZSBjbGFzcwotICogYmVoYXZpb3VyLgotICovCi1A
UnVuV2l0aChMb2NhbFJvYm9sZWN0cmljVGVzdFJ1bm5lci5jbGFzcykKLUBDb25maWcobWFuaWZl
c3QgPSBDb25maWcuTk9ORSkKLXB1YmxpYyBjbGFzcyBEaXJlY3RSVENDbGllbnRUZXN0IHsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJPT01fVVJMID0gIiI7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGJvb2xlYW4gTE9PUEJBQ0sgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgRFVNTVlfU0RQX01JRCA9ICJzZHBNaWQiOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgRFVNTVlfU0RQID0gInNkcCI7Ci0KLSAgcHVibGljIHN0YXRpYyBmaW5hbCBp
bnQgU0VSVkVSX1dBSVQgPSAxMDA7Ci0gIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE5FVFdPUktf
VElNRU9VVCA9IDEwMDA7Ci0KLSAgcHJpdmF0ZSBEaXJlY3RSVENDbGllbnQgY2xpZW50OwotICBw
cml2YXRlIERpcmVjdFJUQ0NsaWVudCBzZXJ2ZXI7Ci0KLSAgQXBwUlRDQ2xpZW50LlNpZ25hbGlu
Z0V2ZW50cyBjbGllbnRFdmVudHM7Ci0gIEFwcFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMgc2Vy
dmVyRXZlbnRzOwotCi0gIEBCZWZvcmUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgU2hh
ZG93TG9nLnN0cmVhbSA9IFN5c3RlbS5vdXQ7Ci0KLSAgICBjbGllbnRFdmVudHMgPSBtb2NrKEFw
cFJUQ0NsaWVudC5TaWduYWxpbmdFdmVudHMuY2xhc3MpOwotICAgIHNlcnZlckV2ZW50cyA9IG1v
Y2soQXBwUlRDQ2xpZW50LlNpZ25hbGluZ0V2ZW50cy5jbGFzcyk7Ci0KLSAgICBjbGllbnQgPSBu
ZXcgRGlyZWN0UlRDQ2xpZW50KGNsaWVudEV2ZW50cyk7Ci0gICAgc2VydmVyID0gbmV3IERpcmVj
dFJUQ0NsaWVudChzZXJ2ZXJFdmVudHMpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQg
dGVzdFZhbGlkSXBQYXR0ZXJuKCkgewotICAgIC8vIFN0cmluZ3MgdGhhdCBzaG91bGQgbWF0Y2gg
dGhlIHBhdHRlcm4uCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgotICAgIGZpbmFsIFN0cmluZ1td
IGlwQWRkcmVzc2VzID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICAgIjAuMC4wLjAiLAotICAgICAg
ICAiMTI3LjAuMC4xIiwKLSAgICAgICAgIjE5Mi4xNjguMC4xIiwKLSAgICAgICAgIjAuMC4wLjA6
ODg4OCIsCi0gICAgICAgICIxMjcuMC4wLjE6ODg4OCIsCi0gICAgICAgICIxOTIuMTY4LjAuMTo4
ODg4IiwKLSAgICAgICAgIjo6IiwKLSAgICAgICAgIjo6MSIsCi0gICAgICAgICIyMDAxOjBkYjg6
ODVhMzowMDAwOjAwMDA6OGEyZTowMzcwOjc5NDYiLAotICAgICAgICAiWzo6XSIsCi0gICAgICAg
ICJbOjoxXSIsCi0gICAgICAgICJbMjAwMTowZGI4Ojg1YTM6MDAwMDowMDAwOjhhMmU6MDM3MDo3
OTQ2XSIsCi0gICAgICAgICJbOjpdOjg4ODgiLAotICAgICAgICAiWzo6MV06ODg4OCIsCi0gICAg
ICAgICJbMjAwMTowZGI4Ojg1YTM6MDAwMDowMDAwOjhhMmU6MDM3MDo3OTQ2XTo4ODg4IgotICAg
IH07Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgICBmb3IgKFN0cmluZyBpcCA6IGlwQWRk
cmVzc2VzKSB7Ci0gICAgICBhc3NlcnRUcnVlKGlwICsgIiBkaWRuJ3QgbWF0Y2ggSVBfUEFUVEVS
TiBldmVuIHRob3VnaCBpdCBzaG91bGQuIiwKLSAgICAgICAgICBEaXJlY3RSVENDbGllbnQuSVBf
UEFUVEVSTi5tYXRjaGVyKGlwKS5tYXRjaGVzKCkpOwotICAgIH0KLSAgfQotCi0gIEBUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkSXBQYXR0ZXJuKCkgewotICAgIC8vIFN0cmluZ3MgdGhh
dCBzaG91bGRuJ3QgbWF0Y2ggdGhlIHBhdHRlcm4uCi0gICAgLy8gY2xhbmctZm9ybWF0IG9mZgot
ICAgIGZpbmFsIFN0cmluZ1tdIGludmFsaWRJcEFkZHJlc3NlcyA9IG5ldyBTdHJpbmdbXSB7Ci0g
ICAgICAgICJIZWxsbywgV29ybGQhIiwKLSAgICAgICAgImFhYWEiLAotICAgICAgICAiMTExMSIs
Ci0gICAgICAgICJbaGVsbG8gd29ybGRdIiwKLSAgICAgICAgImhlbGxvOndvcmxkIgotICAgIH07
Ci0gICAgLy8gY2xhbmctZm9ybWF0IG9uCi0KLSAgICBmb3IgKFN0cmluZyBpbnZhbGlkSXAgOiBp
bnZhbGlkSXBBZGRyZXNzZXMpIHsKLSAgICAgIGFzc2VydEZhbHNlKGludmFsaWRJcCArICIgbWF0
Y2hlZCBJUF9QQVRURVJOIGV2ZW4gdGhvdWdoIGl0IHNob3VsZG4ndC4iLAotICAgICAgICAgIERp
cmVjdFJUQ0NsaWVudC5JUF9QQVRURVJOLm1hdGNoZXIoaW52YWxpZElwKS5tYXRjaGVzKCkpOwot
ICAgIH0KLSAgfQotCi0gIC8vIFRPRE8oc2FrYWwpOiBSZXBsYWNlIGlzTm90TnVsbChjbGFzcykg
d2l0aCBpc05vdE51bGwoKSBvbmNlIEphdmEgOCBpcyB1c2VkLgotICBAU3VwcHJlc3NXYXJuaW5n
cygiZGVwcmVjYXRpb24iKQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0RGlyZWN0UlRDQ2xp
ZW50KCkgewotICAgIHNlcnZlci5jb25uZWN0VG9Sb29tKG5ldyBBcHBSVENDbGllbnQuUm9vbUNv
bm5lY3Rpb25QYXJhbWV0ZXJzKFJPT01fVVJMLCAiMC4wLjAuMCIsIExPT1BCQUNLKSk7Ci0gICAg
dHJ5IHsKLSAgICAgIFRocmVhZC5zbGVlcChTRVJWRVJfV0FJVCk7Ci0gICAgfSBjYXRjaCAoSW50
ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
fQotICAgIGNsaWVudC5jb25uZWN0VG9Sb29tKAotICAgICAgICBuZXcgQXBwUlRDQ2xpZW50LlJv
b21Db25uZWN0aW9uUGFyYW1ldGVycyhST09NX1VSTCwgIjEyNy4wLjAuMSIsIExPT1BCQUNLKSk7
Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAg
ICAgICAub25Db25uZWN0ZWRUb1Jvb20oYW55KEFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0
ZXJzLmNsYXNzKSk7Ci0KLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gb2ZmZXJTZHAgPSBuZXcgU2Vz
c2lvbkRlc2NyaXB0aW9uKFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLk9GRkVSLCBEVU1NWV9TRFAp
OwotICAgIHNlcnZlci5zZW5kT2ZmZXJTZHAob2ZmZXJTZHApOwotICAgIHZlcmlmeShjbGllbnRF
dmVudHMsIHRpbWVvdXQoTkVUV09SS19USU1FT1VUKSkKLSAgICAgICAgLm9uQ29ubmVjdGVkVG9S
b29tKGFueShBcHBSVENDbGllbnQuU2lnbmFsaW5nUGFyYW1ldGVycy5jbGFzcykpOwotCi0gICAg
U2Vzc2lvbkRlc2NyaXB0aW9uIGFuc3dlclNkcCA9Ci0gICAgICAgIG5ldyBTZXNzaW9uRGVzY3Jp
cHRpb24oU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuQU5TV0VSLCBEVU1NWV9TRFApOwotICAgIGNs
aWVudC5zZW5kQW5zd2VyU2RwKGFuc3dlclNkcCk7Ci0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywg
dGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25SZW1vdGVEZXNjcmlwdGlvbihp
c05vdE51bGwoU2Vzc2lvbkRlc2NyaXB0aW9uLmNsYXNzKSk7Ci0KLSAgICBJY2VDYW5kaWRhdGUg
Y2FuZGlkYXRlID0gbmV3IEljZUNhbmRpZGF0ZShEVU1NWV9TRFBfTUlELCAwLCBEVU1NWV9TRFAp
OwotICAgIHNlcnZlci5zZW5kTG9jYWxJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAgICB2ZXJp
ZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KE5FVFdPUktfVElNRU9VVCkpCi0gICAgICAgIC5vblJl
bW90ZUljZUNhbmRpZGF0ZShpc05vdE51bGwoSWNlQ2FuZGlkYXRlLmNsYXNzKSk7Ci0KLSAgICBj
bGllbnQuc2VuZExvY2FsSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7Ci0gICAgdmVyaWZ5KHNlcnZl
ckV2ZW50cywgdGltZW91dChORVRXT1JLX1RJTUVPVVQpKQotICAgICAgICAub25SZW1vdGVJY2VD
YW5kaWRhdGUoaXNOb3ROdWxsKEljZUNhbmRpZGF0ZS5jbGFzcykpOwotCi0gICAgY2xpZW50LmRp
c2Nvbm5lY3RGcm9tUm9vbSgpOwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoTkVU
V09SS19USU1FT1VUKSkub25DaGFubmVsQ2xvc2UoKTsKLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRz
LCB0aW1lb3V0KE5FVFdPUktfVElNRU9VVCkpLm9uQ2hhbm5lbENsb3NlKCk7Ci0KLSAgICB2ZXJp
ZnlOb01vcmVJbnRlcmFjdGlvbnMoY2xpZW50RXZlbnRzKTsKLSAgICB2ZXJpZnlOb01vcmVJbnRl
cmFjdGlvbnMoc2VydmVyRXZlbnRzKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZGp1bml0L3NyYy9vcmcvYXBw
c3BvdC9hcHBydGMvVENQQ2hhbm5lbENsaWVudFRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkanVu
aXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFubmVsQ2xpZW50VGVzdC5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkanVuaXQvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy9UQ1BDaGFubmVs
Q2xpZW50VGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjAzICswLDAgQEAKLS8qCi0gKiAg
Q29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjOwotCi1pbXBvcnQgc3RhdGlj
IG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKLWltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0
by50aW1lb3V0OwotaW1wb3J0IHN0YXRpYyBvcmcubW9ja2l0by5Nb2NraXRvLnZlcmlmeTsKLWlt
cG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by52ZXJpZnlOb01vcmVJbnRlcmFjdGlvbnM7
Ci0KLWltcG9ydCBvcmcuY2hyb21pdW0uYmFzZS50ZXN0LnV0aWwuRGlzYWJsZWRUZXN0OwotaW1w
b3J0IG9yZy5jaHJvbWl1bS50ZXN0aW5nLmxvY2FsLkxvY2FsUm9ib2xlY3RyaWNUZXN0UnVubmVy
OwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOwotaW1w
b3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKLWlt
cG9ydCBvcmcubW9ja2l0by5Nb2NrOwotaW1wb3J0IG9yZy5tb2NraXRvLk1vY2tpdG9Bbm5vdGF0
aW9uczsKLWltcG9ydCBvcmcucm9ib2xlY3RyaWMuYW5ub3RhdGlvbi5Db25maWc7Ci1pbXBvcnQg
b3JnLnJvYm9sZWN0cmljLnNoYWRvd3MuU2hhZG93TG9nOwotCi1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4
ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotQFJ1bldp
dGgoTG9jYWxSb2JvbGVjdHJpY1Rlc3RSdW5uZXIuY2xhc3MpCi1AQ29uZmlnKG1hbmlmZXN0ID0g
Q29uZmlnLk5PTkUpCi1wdWJsaWMgY2xhc3MgVENQQ2hhbm5lbENsaWVudFRlc3QgewotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgUE9SVCA9IDg4ODg7Ci0gIC8qKgotICAgKiBIb3cgbG9uZyB3
ZSB3YWl0IGJlZm9yZSB0cnlpbmcgdG8gY29ubmVjdCB0byB0aGUgc2VydmVyLiBDaG9zZW4gcXVp
dGUgYXJiaXRyYXJpbHkgYW5kCi0gICAqIGNvdWxkIGJlIG1hZGUgc21hbGxlciBpZiBuZWVkIGJl
LgotICAgKi8KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNFUlZFUl9XQUlUID0gMTA7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDT05ORUNUX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBTRU5EX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBESVNDT05ORUNUX1RJTUVPVVQgPSAxMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBURVJNSU5BVElPTl9USU1FT1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIFRFU1RfTUVTU0FHRV9TRVJWRVIgPSAiSGVsbG8sIFNlcnZlciEiOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9NRVNTQUdFX0NMSUVOVCA9ICJIZWxsbywgQ2xp
ZW50ISI7Ci0KLSAgQE1vY2sgVENQQ2hhbm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIHNlcnZl
ckV2ZW50czsKLSAgQE1vY2sgVENQQ2hhbm5lbENsaWVudC5UQ1BDaGFubmVsRXZlbnRzIGNsaWVu
dEV2ZW50czsKLQotICBwcml2YXRlIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKLSAgcHJpdmF0
ZSBUQ1BDaGFubmVsQ2xpZW50IHNlcnZlcjsKLSAgcHJpdmF0ZSBUQ1BDaGFubmVsQ2xpZW50IGNs
aWVudDsKLQotICBAQmVmb3JlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAgIFNoYWRvd0xv
Zy5zdHJlYW0gPSBTeXN0ZW0ub3V0OwotCi0gICAgTW9ja2l0b0Fubm90YXRpb25zLmluaXRNb2Nr
cyh0aGlzKTsKLQotICAgIGV4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1
dG9yKCk7Ci0gIH0KLQotICBAQWZ0ZXIKLSAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0gICAg
dmVyaWZ5Tm9Nb3JlRXZlbnRzKCk7Ci0KLSAgICBleGVjdXRlQW5kV2FpdChuZXcgUnVubmFibGUo
KSB7Ci0gICAgICBAT3ZlcnJpZGUKLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAg
Y2xpZW50LmRpc2Nvbm5lY3QoKTsKLSAgICAgICAgc2VydmVyLmRpc2Nvbm5lY3QoKTsKLSAgICAg
IH0KLSAgICB9KTsKLQotICAgIC8vIFN0b3AgdGhlIGV4ZWN1dG9yIHRocmVhZAotICAgIGV4ZWN1
dG9yLnNodXRkb3duKCk7Ci0gICAgdHJ5IHsKLSAgICAgIGV4ZWN1dG9yLmF3YWl0VGVybWluYXRp
b24oVEVSTUlOQVRJT05fVElNRU9VVCwgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICB9IGNh
dGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgp
KTsKLSAgICB9Ci0gIH0KLQotICBAVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q29ubmVjdElQdjQo
KSB7Ci0gICAgc2V0VXBJUHY0U2VydmVyKCk7Ci0gICAgdHJ5IHsKLSAgICAgIFRocmVhZC5zbGVl
cChTRVJWRVJfV0FJVCk7Ci0gICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewot
ICAgICAgZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0gICAgfQotICAgIHNldFVwSVB2NENsaWVudCgp
OwotCi0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChDT05ORUNUX1RJTUVPVVQpKS5v
blRDUENvbm5lY3RlZCh0cnVlKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0KENP
Tk5FQ1RfVElNRU9VVCkpLm9uVENQQ29ubmVjdGVkKGZhbHNlKTsKLSAgfQotCi0gIC8vIEBUZXN0
Ci0gIC8vIERpc2FibGVkIGJlY2F1c2UgaXQgZmFpbHMgd2hlbiBJUHY2IGlzIG5vdCBzdXBwb3J0
ZWQgb24gdGhlIGJvdC4KLSAgLy8gVE9ETyhlaG1hbGRvbmFkbyk6IEVuYWJsZSB3aGVuIGJ1Z3Mu
d2VicnRjLm9yZy82NDM3IGlzIGZpeGVkLgotICBARGlzYWJsZWRUZXN0Ci0gIHB1YmxpYyB2b2lk
IHRlc3RDb25uZWN0SVB2NigpIHsKLSAgICBzZXRVcElQdjZTZXJ2ZXIoKTsKLSAgICB0cnkgewot
ICAgICAgVGhyZWFkLnNsZWVwKFNFUlZFUl9XQUlUKTsKLSAgICB9IGNhdGNoIChJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLSAgICB9Ci0gICAg
c2V0VXBJUHY2Q2xpZW50KCk7Ci0KLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KENP
Tk5FQ1RfVElNRU9VVCkpLm9uVENQQ29ubmVjdGVkKHRydWUpOwotICAgIHZlcmlmeShjbGllbnRF
dmVudHMsIHRpbWVvdXQoQ09OTkVDVF9USU1FT1VUKSkub25UQ1BDb25uZWN0ZWQoZmFsc2UpOwot
ICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNlbmREYXRhKCkgewotICAgIHRlc3RD
b25uZWN0SVB2NCgpOwotCi0gICAgZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxlKCkgewotICAg
ICAgQE92ZXJyaWRlCi0gICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGNsaWVudC5z
ZW5kKFRFU1RfTUVTU0FHRV9TRVJWRVIpOwotICAgICAgICBzZXJ2ZXIuc2VuZChURVNUX01FU1NB
R0VfQ0xJRU5UKTsKLSAgICAgIH0KLSAgICB9KTsKLQotICAgIHZlcmlmeShzZXJ2ZXJFdmVudHMs
IHRpbWVvdXQoU0VORF9USU1FT1VUKSkub25UQ1BNZXNzYWdlKFRFU1RfTUVTU0FHRV9TRVJWRVIp
OwotICAgIHZlcmlmeShjbGllbnRFdmVudHMsIHRpbWVvdXQoU0VORF9USU1FT1VUKSkub25UQ1BN
ZXNzYWdlKFRFU1RfTUVTU0FHRV9DTElFTlQpOwotICB9Ci0KLSAgQFRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdERpc2Nvbm5lY3RTZXJ2ZXIoKSB7Ci0gICAgdGVzdENvbm5lY3RJUHY0KCk7Ci0gICAg
ZXhlY3V0ZUFuZFdhaXQobmV3IFJ1bm5hYmxlKCkgewotICAgICAgQE92ZXJyaWRlCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIHNlcnZlci5kaXNjb25uZWN0KCk7Ci0gICAgICB9
Ci0gICAgfSk7Ci0KLSAgICB2ZXJpZnkoc2VydmVyRXZlbnRzLCB0aW1lb3V0KERJU0NPTk5FQ1Rf
VElNRU9VVCkpLm9uVENQQ2xvc2UoKTsKLSAgICB2ZXJpZnkoY2xpZW50RXZlbnRzLCB0aW1lb3V0
KERJU0NPTk5FQ1RfVElNRU9VVCkpLm9uVENQQ2xvc2UoKTsKLSAgfQotCi0gIEBUZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0Q2xpZW50KCkgewotICAgIHRlc3RDb25uZWN0SVB2NCgp
OwotICAgIGV4ZWN1dGVBbmRXYWl0KG5ldyBSdW5uYWJsZSgpIHsKLSAgICAgIEBPdmVycmlkZQot
ICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBjbGllbnQuZGlzY29ubmVjdCgpOwot
ICAgICAgfQotICAgIH0pOwotCi0gICAgdmVyaWZ5KHNlcnZlckV2ZW50cywgdGltZW91dChESVND
T05ORUNUX1RJTUVPVVQpKS5vblRDUENsb3NlKCk7Ci0gICAgdmVyaWZ5KGNsaWVudEV2ZW50cywg
dGltZW91dChESVNDT05ORUNUX1RJTUVPVVQpKS5vblRDUENsb3NlKCk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgc2V0VXBJUHY0U2VydmVyKCkgewotICAgIHNldFVwU2VydmVyKCIwLjAuMC4wIiwg
UE9SVCk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc2V0VXBJUHY0Q2xpZW50KCkgewotICAgIHNl
dFVwQ2xpZW50KCIxMjcuMC4wLjEiLCBQT1JUKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRV
cElQdjZTZXJ2ZXIoKSB7Ci0gICAgc2V0VXBTZXJ2ZXIoIjo6IiwgUE9SVCk7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgc2V0VXBJUHY2Q2xpZW50KCkgewotICAgIHNldFVwQ2xpZW50KCI6OjEiLCBQ
T1JUKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzZXRVcFNlcnZlcihTdHJpbmcgaXAsIGludCBw
b3J0KSB7Ci0gICAgc2VydmVyID0gbmV3IFRDUENoYW5uZWxDbGllbnQoZXhlY3V0b3IsIHNlcnZl
ckV2ZW50cywgaXAsIHBvcnQpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIHNldFVwQ2xpZW50KFN0
cmluZyBpcCwgaW50IHBvcnQpIHsKLSAgICBjbGllbnQgPSBuZXcgVENQQ2hhbm5lbENsaWVudChl
eGVjdXRvciwgY2xpZW50RXZlbnRzLCBpcCwgcG9ydCk7Ci0gIH0KLQotICAvKioKLSAgICogVmVy
aWZpZXMgbm8gbW9yZSBzZXJ2ZXIgb3IgY2xpZW50IGV2ZW50cyBoYXZlIGJlZW4gaXNzdWVkCi0g
ICAqLwotICBwcml2YXRlIHZvaWQgdmVyaWZ5Tm9Nb3JlRXZlbnRzKCkgewotICAgIHZlcmlmeU5v
TW9yZUludGVyYWN0aW9ucyhzZXJ2ZXJFdmVudHMpOwotICAgIHZlcmlmeU5vTW9yZUludGVyYWN0
aW9ucyhjbGllbnRFdmVudHMpOwotICB9Ci0KLSAgLyoqCi0gICAqIFF1ZXVlcyBydW5uYWJsZSB0
byBiZSBydW4gYW5kIHdhaXRzIGZvciBpdCB0byBiZSBleGVjdXRlZCBieSB0aGUgZXhlY3V0b3Ig
dGhyZWFkCi0gICAqLwotICBwdWJsaWMgdm9pZCBleGVjdXRlQW5kV2FpdChSdW5uYWJsZSBydW5u
YWJsZSkgewotICAgIHRyeSB7Ci0gICAgICBleGVjdXRvci5zdWJtaXQocnVubmFibGUpLmdldCgp
OwotICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBmYWlsKGUuZ2V0TWVzc2FnZSgp
KTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0cy9BbmRyb2lkTWFuaWZlc3QueG1sCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDE3ICswLDAg
QEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08bWFuaWZlc3QgeG1s
bnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgot
ICAgIHBhY2thZ2U9Im9yZy5hcHBzcG90LmFwcHJ0Yy50ZXN0IgotICAgIGFuZHJvaWQ6dmVyc2lv
bkNvZGU9IjEiCi0gICAgYW5kcm9pZDp2ZXJzaW9uTmFtZT0iMS4wIiA+Ci0KLSAgICA8dXNlcy1z
ZGsgYW5kcm9pZDptaW5TZGtWZXJzaW9uPSIxMyIgYW5kcm9pZDp0YXJnZXRTZGtWZXJzaW9uPSIy
MSIgLz4KLQotICAgIDxpbnN0cnVtZW50YXRpb24KLSAgICAgICAgYW5kcm9pZDpuYW1lPSJhbmRy
b2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdFJ1bm5lciIKLSAgICAgICAgYW5kcm9pZDp0YXJn
ZXRQYWNrYWdlPSJvcmcuYXBwc3BvdC5hcHBydGMiIC8+Ci0KLSAgICA8YXBwbGljYXRpb24+Ci0g
ICAgICAgIDx1c2VzLWxpYnJhcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlc3QucnVubmVyIiAv
PgotICAgIDwvYXBwbGljYXRpb24+Ci0KLTwvbWFuaWZlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
ZXhhbXBsZXMvYW5kcm9pZHRlc3RzL1JFQURNRQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvUkVBRE1F
CShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvUkVBRE1FCShub25leGlzdGVudCkKQEAgLTEs
MTQgKzAsMCBAQAotVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYW4gZXhhbXBsZSB1bml0IHRlc3Qg
Zm9yIEFuZHJvaWQgQXBwUlRDTW9iaWxlLgotCi1FeGFtcGxlIG9mIGJ1aWxkaW5nICYgdXNpbmcg
dGhlIGFwcDoKLQotLSBCdWlsZCBBbmRyb2lkIEFwcFJUQ01vYmlsZSBhbmQgQXBwUlRDTW9iaWxl
IHVuaXQgdGVzdDoKLWNkIDxwYXRoL3RvL3dlYnJ0Yz4vc3JjCi1uaW5qYSAtQyBvdXQvRGVidWcg
QXBwUlRDTW9iaWxlVGVzdAotCi0tIEluc3RhbGwgQXBwUlRDTW9iaWxlIGFuZCBBcHBSVENNb2Jp
bGVUZXN0OgotYWRiIGluc3RhbGwgLXIgb3V0L0RlYnVnL2Fwa3MvQXBwUlRDTW9iaWxlLmFwawot
YWRiIGluc3RhbGwgLXIgb3V0L0RlYnVnL2Fwa3MvQXBwUlRDTW9iaWxlVGVzdC5hcGsKLQotLSBS
dW4gdW5pdCB0ZXN0czoKLWFkYiBzaGVsbCBhbSBpbnN0cnVtZW50IC13IG9yZy5hcHBzcG90LmFw
cHJ0Yy50ZXN0L2FuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0UnVubmVyClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL2FudC5wcm9wZXJ0aWVzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVz
L2FuZHJvaWR0ZXN0cy9hbnQucHJvcGVydGllcwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3Rz
L2FudC5wcm9wZXJ0aWVzCShub25leGlzdGVudCkKQEAgLTEsMTggKzAsMCBAQAotIyBUaGlzIGZp
bGUgaXMgdXNlZCB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyB1c2VkIGJ5IHRoZSBBbnQgYnVp
bGQgc3lzdGVtLgotIwotIyBUaGlzIGZpbGUgbXVzdCBiZSBjaGVja2VkIGludG8gVmVyc2lvbiBD
b250cm9sIFN5c3RlbXMsIGFzIGl0IGlzCi0jIGludGVncmFsIHRvIHRoZSBidWlsZCBzeXN0ZW0g
b2YgeW91ciBwcm9qZWN0LgotCi0jIFRoaXMgZmlsZSBpcyBvbmx5IHVzZWQgYnkgdGhlIEFudCBz
Y3JpcHQuCi0KLSMgWW91IGNhbiB1c2UgdGhpcyB0byBvdmVycmlkZSBkZWZhdWx0IHZhbHVlcyBz
dWNoIGFzCi0jICAnc291cmNlLmRpcicgZm9yIHRoZSBsb2NhdGlvbiBvZiB5b3VyIGphdmEgc291
cmNlIGZvbGRlciBhbmQKLSMgICdvdXQuZGlyJyBmb3IgdGhlIGxvY2F0aW9uIG9mIHlvdXIgb3V0
cHV0IGZvbGRlci4KLQotIyBZb3UgY2FuIGFsc28gdXNlIGl0IGRlZmluZSBob3cgdGhlIHJlbGVh
c2UgYnVpbGRzIGFyZSBzaWduZWQgYnkgZGVjbGFyaW5nCi0jIHRoZSBmb2xsb3dpbmcgcHJvcGVy
dGllczoKLSMgICdrZXkuc3RvcmUnIGZvciB0aGUgbG9jYXRpb24gb2YgeW91ciBrZXlzdG9yZSBh
bmQKLSMgICdrZXkuYWxpYXMnIGZvciB0aGUgbmFtZSBvZiB0aGUga2V5IHRvIHVzZS4KLSMgVGhl
IHBhc3N3b3JkIHdpbGwgYmUgYXNrZWQgZHVyaW5nIHRoZSBidWlsZCB3aGVuIHlvdSB1c2UgdGhl
ICdyZWxlYXNlJyB0YXJnZXQuCi0KLXRlc3RlZC5wcm9qZWN0LmRpcj0uLi9hbmRyb2lkCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkdGVzdHMvYnVpbGQueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9idWlsZC54bWwJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9idWlsZC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MiAr
MCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3Qg
bmFtZT0iQXBwUlRDTW9iaWxlVGVzdCIgZGVmYXVsdD0iaGVscCI+Ci0KLSAgICA8IS0tIFRoZSBs
b2NhbC5wcm9wZXJ0aWVzIGZpbGUgaXMgY3JlYXRlZCBhbmQgdXBkYXRlZCBieSB0aGUgJ2FuZHJv
aWQnIHRvb2wuCi0gICAgICAgICBJdCBjb250YWlucyB0aGUgcGF0aCB0byB0aGUgU0RLLiBJdCBz
aG91bGQgKk5PVCogYmUgY2hlY2tlZCBpbnRvCi0gICAgICAgICBWZXJzaW9uIENvbnRyb2wgU3lz
dGVtcy4gLS0+Ci0gICAgPHByb3BlcnR5IGZpbGU9ImxvY2FsLnByb3BlcnRpZXMiIC8+Ci0KLSAg
ICA8IS0tIFRoZSBhbnQucHJvcGVydGllcyBmaWxlIGNhbiBiZSBjcmVhdGVkIGJ5IHlvdS4gSXQg
aXMgb25seSBlZGl0ZWQgYnkgdGhlCi0gICAgICAgICAnYW5kcm9pZCcgdG9vbCB0byBhZGQgcHJv
cGVydGllcyB0byBpdC4KLSAgICAgICAgIFRoaXMgaXMgdGhlIHBsYWNlIHRvIGNoYW5nZSBzb21l
IEFudCBzcGVjaWZpYyBidWlsZCBwcm9wZXJ0aWVzLgotICAgICAgICAgSGVyZSBhcmUgc29tZSBw
cm9wZXJ0aWVzIHlvdSBtYXkgd2FudCB0byBjaGFuZ2UvdXBkYXRlOgotCi0gICAgICAgICBzb3Vy
Y2UuZGlyCi0gICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkuIERl
ZmF1bHQgaXMgJ3NyYycuCi0gICAgICAgICBvdXQuZGlyCi0gICAgICAgICAgICAgVGhlIG5hbWUg
b2YgdGhlIG91dHB1dCBkaXJlY3RvcnkuIERlZmF1bHQgaXMgJ2JpbicuCi0KLSAgICAgICAgIEZv
ciBvdGhlciBvdmVycmlkYWJsZSBwcm9wZXJ0aWVzLCBsb29rIGF0IHRoZSBiZWdpbm5pbmcgb2Yg
dGhlIHJ1bGVzCi0gICAgICAgICBmaWxlcyBpbiB0aGUgU0RLLCBhdCB0b29scy9hbnQvYnVpbGQu
eG1sCi0KLSAgICAgICAgIFByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGUgU0RLIGxvY2F0aW9uIG9y
IHRoZSBwcm9qZWN0IHRhcmdldCBzaG91bGQKLSAgICAgICAgIGJlIHVwZGF0ZWQgdXNpbmcgdGhl
ICdhbmRyb2lkJyB0b29sIHdpdGggdGhlICd1cGRhdGUnIGFjdGlvbi4KLQotICAgICAgICAgVGhp
cyBmaWxlIGlzIGFuIGludGVncmFsIHBhcnQgb2YgdGhlIGJ1aWxkIHN5c3RlbSBmb3IgeW91cgot
ICAgICAgICAgYXBwbGljYXRpb24gYW5kIHNob3VsZCBiZSBjaGVja2VkIGludG8gVmVyc2lvbiBD
b250cm9sIFN5c3RlbXMuCi0KLSAgICAgICAgIC0tPgotICAgIDxwcm9wZXJ0eSBmaWxlPSJhbnQu
cHJvcGVydGllcyIgLz4KLQotICAgIDwhLS0gaWYgc2RrLmRpciB3YXMgbm90IHNldCBmcm9tIG9u
ZSBvZiB0aGUgcHJvcGVydHkgZmlsZSwgdGhlbgotICAgICAgICAgZ2V0IGl0IGZyb20gdGhlIEFO
RFJPSURfSE9NRSBlbnYgdmFyLgotICAgICAgICAgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHdl
IGxvYWQgcHJvamVjdC5wcm9wZXJ0aWVzIHNpbmNlCi0gICAgICAgICB0aGUgcHJvZ3VhcmQgY29u
ZmlnIGNhbiB1c2Ugc2RrLmRpciAtLT4KLSAgICA8cHJvcGVydHkgZW52aXJvbm1lbnQ9ImVudiIg
Lz4KLSAgICA8Y29uZGl0aW9uIHByb3BlcnR5PSJzZGsuZGlyIiB2YWx1ZT0iJHtlbnYuQU5EUk9J
RF9TREtfUk9PVH0iPgotICAgICAgICA8aXNzZXQgcHJvcGVydHk9ImVudi5BTkRST0lEX1NES19S
T09UIiAvPgotICAgIDwvY29uZGl0aW9uPgotCi0gICAgPCEtLSBUaGUgcHJvamVjdC5wcm9wZXJ0
aWVzIGZpbGUgaXMgY3JlYXRlZCBhbmQgdXBkYXRlZCBieSB0aGUgJ2FuZHJvaWQnCi0gICAgICAg
ICB0b29sLCBhcyB3ZWxsIGFzIEFEVC4KLQotICAgICAgICAgVGhpcyBjb250YWlucyBwcm9qZWN0
IHNwZWNpZmljIHByb3BlcnRpZXMgc3VjaCBhcyBwcm9qZWN0IHRhcmdldCwgYW5kIGxpYnJhcnkK
LSAgICAgICAgIGRlcGVuZGVuY2llcy4gTG93ZXIgbGV2ZWwgYnVpbGQgcHJvcGVydGllcyBhcmUg
c3RvcmVkIGluIGFudC5wcm9wZXJ0aWVzCi0gICAgICAgICAob3IgaW4gLmNsYXNzcGF0aCBmb3Ig
RWNsaXBzZSBwcm9qZWN0cykuCi0KLSAgICAgICAgIFRoaXMgZmlsZSBpcyBhbiBpbnRlZ3JhbCBw
YXJ0IG9mIHRoZSBidWlsZCBzeXN0ZW0gZm9yIHlvdXIKLSAgICAgICAgIGFwcGxpY2F0aW9uIGFu
ZCBzaG91bGQgYmUgY2hlY2tlZCBpbnRvIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zLiAtLT4KLSAg
ICA8bG9hZHByb3BlcnRpZXMgc3JjRmlsZT0icHJvamVjdC5wcm9wZXJ0aWVzIiAvPgotCi0gICAg
PCEtLSBxdWljayBjaGVjayBvbiBzZGsuZGlyIC0tPgotICAgIDxmYWlsCi0gICAgICAgICAgICBt
ZXNzYWdlPSJzZGsuZGlyIGlzIG1pc3NpbmcuIE1ha2Ugc3VyZSB0byBnZW5lcmF0ZSBsb2NhbC5w
cm9wZXJ0aWVzIHVzaW5nICdhbmRyb2lkIHVwZGF0ZSBwcm9qZWN0JyBvciB0byBpbmplY3QgaXQg
dGhyb3VnaCB0aGUgQU5EUk9JRF9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlLiIKLSAgICAgICAg
ICAgIHVubGVzcz0ic2RrLmRpciIKLSAgICAvPgotCi0gICAgPCEtLQotICAgICAgICBJbXBvcnQg
cGVyIHByb2plY3QgY3VzdG9tIGJ1aWxkIHJ1bGVzIGlmIHByZXNlbnQgYXQgdGhlIHJvb3Qgb2Yg
dGhlIHByb2plY3QuCi0gICAgICAgIFRoaXMgaXMgdGhlIHBsYWNlIHRvIHB1dCBjdXN0b20gaW50
ZXJtZWRpYXJ5IHRhcmdldHMgc3VjaCBhczoKLSAgICAgICAgICAgIC1wcmUtYnVpbGQKLSAgICAg
ICAgICAgIC1wcmUtY29tcGlsZQotICAgICAgICAgICAgLXBvc3QtY29tcGlsZSAoVGhpcyBpcyB0
eXBpY2FsbHkgdXNlZCBmb3IgY29kZSBvYmZ1c2NhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENvbXBpbGVkIGNvZGUgbG9jYXRpb246ICR7b3V0LmNsYXNzZXMuYWJzb2x1dGUuZGly
fQotICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdGhpcyBpcyBub3QgZG9uZSBpbiBwbGFj
ZSwgb3ZlcnJpZGUgJHtvdXQuZGV4LmlucHV0LmFic29sdXRlLmRpcn0pCi0gICAgICAgICAgICAt
cG9zdC1wYWNrYWdlCi0gICAgICAgICAgICAtcG9zdC1idWlsZAotICAgICAgICAgICAgLXByZS1j
bGVhbgotICAgIC0tPgotICAgIDxpbXBvcnQgZmlsZT0iY3VzdG9tX3J1bGVzLnhtbCIgb3B0aW9u
YWw9InRydWUiIC8+Ci0KLSAgICA8IS0tIEltcG9ydCB0aGUgYWN0dWFsIGJ1aWxkIGZpbGUuCi0K
LSAgICAgICAgIFRvIGN1c3RvbWl6ZSBleGlzdGluZyB0YXJnZXRzLCB0aGVyZSBhcmUgdHdvIG9w
dGlvbnM6Ci0gICAgICAgICAtIEN1c3RvbWl6ZSBvbmx5IG9uZSB0YXJnZXQ6Ci0gICAgICAgICAg
ICAgLSBjb3B5L3Bhc3RlIHRoZSB0YXJnZXQgaW50byB0aGlzIGZpbGUsICpiZWZvcmUqIHRoZQot
ICAgICAgICAgICAgICAgPGltcG9ydD4gdGFzay4KLSAgICAgICAgICAgICAtIGN1c3RvbWl6ZSBp
dCB0byB5b3VyIG5lZWRzLgotICAgICAgICAgLSBDdXN0b21pemUgdGhlIHdob2xlIGNvbnRlbnQg
b2YgYnVpbGQueG1sCi0gICAgICAgICAgICAgLSBjb3B5L3Bhc3RlIHRoZSBjb250ZW50IG9mIHRo
ZSBydWxlcyBmaWxlcyAobWludXMgdGhlIHRvcCBub2RlKQotICAgICAgICAgICAgICAgaW50byB0
aGlzIGZpbGUsIHJlcGxhY2luZyB0aGUgPGltcG9ydD4gdGFzay4KLSAgICAgICAgICAgICAtIGN1
c3RvbWl6ZSB0byB5b3VyIG5lZWRzLgotCi0gICAgICAgICAqKioqKioqKioqKioqKioqKioqKioq
KgotICAgICAgICAgKioqKioqIElNUE9SVEFOVCAqKioqKioKLSAgICAgICAgICoqKioqKioqKioq
KioqKioqKioqKioqCi0gICAgICAgICBJbiBhbGwgY2FzZXMgeW91IG11c3QgdXBkYXRlIHRoZSB2
YWx1ZSBvZiB2ZXJzaW9uLXRhZyBiZWxvdyB0byByZWFkICdjdXN0b20nIGluc3RlYWQgb2YgYW4g
aW50ZWdlciwKLSAgICAgICAgIGluIG9yZGVyIHRvIGF2b2lkIGhhdmluZyB5b3VyIGZpbGUgYmUg
b3ZlcnJpZGRlbiBieSB0b29scyBzdWNoIGFzICJhbmRyb2lkIHVwZGF0ZSBwcm9qZWN0IgotICAg
IC0tPgotICAgIDwhLS0gdmVyc2lvbi10YWc6IDEgLS0+Ci0gICAgPGltcG9ydCBmaWxlPSIke3Nk
ay5kaXJ9L3Rvb2xzL2FudC9idWlsZC54bWwiIC8+Ci0KLTwvcHJvamVjdD4KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0
cy9wcm9qZWN0LnByb3BlcnRpZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3Byb2plY3QucHJvcGVy
dGllcwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3Byb2plY3QucHJvcGVydGllcwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDE2ICswLDAgQEAKLSMgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIGJ5IEFuZHJvaWQgVG9vbHMuCi0jIERvIG5vdCBtb2RpZnkgdGhpcyBmaWxlIC0t
IFlPVVIgQ0hBTkdFUyBXSUxMIEJFIEVSQVNFRCEKLSMKLSMgVGhpcyBmaWxlIG11c3QgYmUgY2hl
Y2tlZCBpbiBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4KLSMKLSMgVG8gY3VzdG9taXplIHByb3Bl
cnRpZXMgdXNlZCBieSB0aGUgQW50IGJ1aWxkIHN5c3RlbSBlZGl0Ci0jICJhbnQucHJvcGVydGll
cyIsIGFuZCBvdmVycmlkZSB2YWx1ZXMgdG8gYWRhcHQgdGhlIHNjcmlwdCB0byB5b3VyCi0jIHBy
b2plY3Qgc3RydWN0dXJlLgotIwotIyBUbyBlbmFibGUgUHJvR3VhcmQgdG8gc2hyaW5rIGFuZCBv
YmZ1c2NhdGUgeW91ciBjb2RlLCB1bmNvbW1lbnQgdGhpcyAoYXZhaWxhYmxlIHByb3BlcnRpZXM6
IHNkay5kaXIsIHVzZXIuaG9tZSk6Ci0jcHJvZ3VhcmQuY29uZmlnPSR7c2RrLmRpcn0vdG9vbHMv
cHJvZ3VhcmQvcHJvZ3VhcmQtYW5kcm9pZC50eHQ6cHJvZ3VhcmQtcHJvamVjdC50eHQKLQotIyBQ
cm9qZWN0IHRhcmdldC4KLXRhcmdldD1hbmRyb2lkLTIyCi0KLWphdmEuY29tcGlsZXJhcmdzPS1Y
bGludDphbGwgLVdlcnJvcgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVz
dC9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29y
Zy9hcHBzcG90L2FwcHJ0Yy90ZXN0L0ZpbGVWaWRlb0NhcHR1cmVyVGVzdC5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L0ZpbGVWaWRl
b0NhcHR1cmVyVGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjLnRlc3Q7Ci0KLWltcG9y
dCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50
ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLkxhcmdlVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRl
c3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRl
c3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotCi1pbXBvcnQgb3JnLndlYnJ0
Yy5GaWxlVmlkZW9DYXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7Ci0K
LWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5UaHJlYWQ7Ci1p
bXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwotaW1wb3J0IGphdmEudXRp
bC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotcHVibGljIGNsYXNzIEZp
bGVWaWRlb0NhcHR1cmVyVGVzdCBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsKLSAg
cHJpdmF0ZSBzdGF0aWMgY2xhc3MgRnJhbWUgewotICAgIHB1YmxpYyBieXRlW10gZGF0YTsKLSAg
ICBwdWJsaWMgaW50IHdpZHRoOwotICAgIHB1YmxpYyBpbnQgaGVpZ2h0OwotICB9Ci0KLSAgcHVi
bGljIGNsYXNzIE1vY2tDYXB0dXJlck9ic2VydmVyIGltcGxlbWVudHMgVmlkZW9DYXB0dXJlci5D
YXB0dXJlck9ic2VydmVyIHsKLSAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxGcmFtZT4gZnJh
bWVEYXRhcyA9IG5ldyBBcnJheUxpc3Q8RnJhbWU+KCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBw
dWJsaWMgdm9pZCBvbkNhcHR1cmVyU3RhcnRlZChib29sZWFuIHN1Y2Nlc3MpIHsKLSAgICAgIGFz
c2VydFRydWUoc3VjY2Vzcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgb25DYXB0dXJlclN0b3BwZWQoKSB7Ci0gICAgICAvLyBFbXB0eSBvbiBwdXJwb3NlLgotICAg
IH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkJ5dGVC
dWZmZXJGcmFtZUNhcHR1cmVkKAotICAgICAgICBieXRlW10gZGF0YSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZVN0YW1wKSB7Ci0gICAgICBGcmFtZSBmcmFt
ZSA9IG5ldyBGcmFtZSgpOwotICAgICAgZnJhbWUuZGF0YSA9IGRhdGE7Ci0gICAgICBmcmFtZS53
aWR0aCA9IHdpZHRoOwotICAgICAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgYXNzZXJ0
VHJ1ZShkYXRhLmxlbmd0aCAhPSAwKTsKLSAgICAgIGZyYW1lRGF0YXMuYWRkKGZyYW1lKTsKLSAg
ICAgIG5vdGlmeSgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9u
VGV4dHVyZUZyYW1lQ2FwdHVyZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb2VzVGV4dHVy
ZUlkLAotICAgICAgICBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25n
IHRpbWVzdGFtcCkgewotICAgICAgLy8gRW1wdHkgb24gcHVycG9zZS4KLSAgICB9Ci0KLSAgICBw
dWJsaWMgc3luY2hyb25pemVkIEFycmF5TGlzdDxGcmFtZT4gZ2V0TWluaW11bUZyYW1lc0Jsb2Nr
aW5nKGludCBtaW5GcmFtZXMpCi0gICAgICAgIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgICB3aGlsZSAoZnJhbWVEYXRhcy5zaXplKCkgPCBtaW5GcmFtZXMpIHsKLSAgICAgICAg
d2FpdCgpOwotICAgICAgfQotICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8RnJhbWU+KGZyYW1l
RGF0YXMpOwotICAgIH0KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFZp
ZGVvQ2FwdHVyZUZyb21GaWxlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2Vw
dGlvbiB7Ci0gICAgZmluYWwgaW50IEZSQU1FX1dJRFRIID0gNDsKLSAgICBmaW5hbCBpbnQgRlJB
TUVfSEVJR0hUID0gNDsKLSAgICBmaW5hbCBGaWxlVmlkZW9DYXB0dXJlciBmaWxlVmlkZW9DYXB0
dXJlciA9IG5ldyBGaWxlVmlkZW9DYXB0dXJlcigKLSAgICAgICAgIi9zZGNhcmQvY2hyb21pdW1f
dGVzdHNfcm9vdC93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9h
cHBydGMvdGVzdC8iCi0gICAgICAgICsgImNhcHR1cmV0ZXN0dmlkZW8ueTRtIik7Ci0gICAgZmlu
YWwgTW9ja0NhcHR1cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlciA9IG5ldyBNb2NrQ2FwdHVy
ZXJPYnNlcnZlcigpOwotICAgIGZpbGVWaWRlb0NhcHR1cmVyLmluaXRpYWxpemUobnVsbCwgbnVs
bCwgY2FwdHVyZXJPYnNlcnZlcik7Ci0gICAgZmlsZVZpZGVvQ2FwdHVyZXIuc3RhcnRDYXB0dXJl
KEZSQU1FX1dJRFRILCBGUkFNRV9IRUlHSFQsIDMzKTsKLQotICAgIGZpbmFsIFN0cmluZ1tdIGV4
cGVjdGVkRnJhbWVzID0gewotICAgICAgICAiVEhJUyBJUyBKVVNUIFNPTUUgVEVYVCB4IiwgIlRI
RSBTRUNPTkQgRlJBTUUgcXdlcnR5LiIsICJIRVJFIElTIFRIRSBUSFJJRCBGUkFNRSEifTsKLQot
ICAgIGZpbmFsIEFycmF5TGlzdDxGcmFtZT4gZnJhbWVEYXRhczsKLSAgICBmcmFtZURhdGFzID0g
Y2FwdHVyZXJPYnNlcnZlci5nZXRNaW5pbXVtRnJhbWVzQmxvY2tpbmcoZXhwZWN0ZWRGcmFtZXMu
bGVuZ3RoKTsKLQotICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEZyYW1lcy5sZW5ndGgsIGZyYW1l
RGF0YXMuc2l6ZSgpKTsKLQotICAgIGZpbGVWaWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0g
ICAgZmlsZVZpZGVvQ2FwdHVyZXIuZGlzcG9zZSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBleHBlY3RlZEZyYW1lcy5sZW5ndGg7ICsraSkgewotICAgICAgRnJhbWUgZnJhbWUgPSBmcmFt
ZURhdGFzLmdldChpKTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKEZSQU1FX1dJRFRILCBmcmFtZS53
aWR0aCk7Ci0gICAgICBhc3NlcnRFcXVhbHMoRlJBTUVfSEVJR0hULCBmcmFtZS5oZWlnaHQpOwot
ICAgICAgYXNzZXJ0RXF1YWxzKEZSQU1FX1dJRFRIICogRlJBTUVfSEVJR0hUICogMyAvIDIsIGZy
YW1lLmRhdGEubGVuZ3RoKTsKLQotICAgICAgYnl0ZVtdIGV4cGVjdGVkTlYxMkJ5dGVzID0gbmV3
IGJ5dGVbZnJhbWUuZGF0YS5sZW5ndGhdOwotICAgICAgRmlsZVZpZGVvQ2FwdHVyZXIubmF0aXZl
STQyMFRvTlYyMShleHBlY3RlZEZyYW1lc1tpXS5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVT
X0FTQ0lJKSwKLSAgICAgICAgICBGUkFNRV9XSURUSCwgRlJBTUVfSEVJR0hULCBleHBlY3RlZE5W
MTJCeXRlcyk7Ci0KLSAgICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhleHBlY3RlZE5WMTJC
eXRlcywgZnJhbWUuZGF0YSkpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvdGVzdC9QZWVyQ29ubmVjdGlvbkNsaWVudFRlc3QuamF2YQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1BlZXJDb25uZWN0aW9u
Q2xpZW50VGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy90ZXN0L1BlZXJDb25uZWN0aW9uQ2xpZW50VGVzdC5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsNjc4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFw
cHNwb3QuYXBwcnRjLnRlc3Q7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuQXBwUlRDQ2xp
ZW50LlNpZ25hbGluZ1BhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJD
b25uZWN0aW9uQ2xpZW50OwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlv
bkNsaWVudC5QZWVyQ29ubmVjdGlvbkV2ZW50czsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMu
UGVlckNvbm5lY3Rpb25DbGllbnQuUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotCi1pbXBvcnQg
YW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuRmxha3lUZXN0OwotaW1wb3J0
IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRl
c3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQudXRp
bC5Mb2c7Ci0KLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYTFFbnVtZXJhdG9yOwotaW1wb3J0IG9y
Zy53ZWJydGMuQ2FtZXJhMkVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVt
ZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuRWdsQmFzZTsKLWltcG9ydCBvcmcud2VicnRjLklj
ZUNhbmRpZGF0ZTsKLWltcG9ydCBvcmcud2VicnRjLk1lZGlhQ29kZWNWaWRlb0VuY29kZXI7Ci1p
bXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJD
b25uZWN0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsK
LWltcG9ydCBvcmcud2VicnRjLlN0YXRzUmVwb3J0OwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9D
YXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXI7Ci0KLWltcG9ydCBqYXZh
LnV0aWwuTGlua2VkTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0
aWwuY29uY3VycmVudC5Db3VudERvd25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVu
dC5FeGVjdXRvclNlcnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3Jz
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi1wdWJsaWMgY2xhc3Mg
UGVlckNvbm5lY3Rpb25DbGllbnRUZXN0Ci0gICAgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0
Q2FzZSBpbXBsZW1lbnRzIFBlZXJDb25uZWN0aW9uRXZlbnRzIHsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFRBRyA9ICJSVENDbGllbnRUZXN0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IElDRV9DT05ORUNUSU9OX1dBSVRfVElNRU9VVCA9IDEwMDAwOwotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgV0FJVF9USU1FT1VUID0gNzAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IENBTUVSQV9TV0lUQ0hfQVRURU1QVFMgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgVklERU9fUkVTVEFSVF9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBDQVBUVVJFX0ZPUk1BVF9DSEFOR0VfQVRURU1QVFMgPSAzOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgVklERU9fUkVTVEFSVF9USU1FT1VUID0gNTAwOwotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgRVhQRUNURURfVklERU9fRlJBTUVTID0gMTA7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZyBWSURFT19DT0RFQ19WUDggPSAiVlA4IjsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFZJREVPX0NPREVDX1ZQOSA9ICJWUDkiOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVklERU9fQ09ERUNfSDI2NCA9ICJIMjY0IjsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IEFVRElPX1JVTl9USU1FT1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIExPQ0FMX1JFTkRFUkVSX05BTUUgPSAiTG9jYWwgcmVuZGVyZXIiOwotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVNT1RFX1JFTkRFUkVSX05BTUUgPSAiUmVtb3RlIHJl
bmRlcmVyIjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1ZJREVPX0ZQUyA9IDMw
OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEhfVkdBID0gNjQwOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgSEVJR0hUX1ZHQSA9IDQ4MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IFdJRFRIX1FWR0EgPSAzMjA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUlH
SFRfUVZHQSA9IDI0MDsKLQotICAvLyBUaGUgcGVlciBjb25uZWN0aW9uIGNsaWVudCBpcyBhc3N1
bWVkIHRvIGJlIHRocmVhZCBzYWZlIGluIGl0c2VsZjsgdGhlCi0gIC8vIHJlZmVyZW5jZSBpcyB3
cml0dGVuIGJ5IHRoZSB0ZXN0IHRocmVhZCBhbmQgcmVhZCBieSB3b3JrZXIgdGhyZWFkcy4KLSAg
cHJpdmF0ZSB2b2xhdGlsZSBQZWVyQ29ubmVjdGlvbkNsaWVudCBwY0NsaWVudDsKLSAgcHJpdmF0
ZSB2b2xhdGlsZSBib29sZWFuIGxvb3BiYWNrOwotCi0gIC8vIEVHTCBjb250ZXh0IHRoYXQgY2Fu
IGJlIHVzZWQgYnkgaGFyZHdhcmUgdmlkZW8gZGVjb2RlcnMgdG8gZGVjb2RlIHRvIGEgdGV4dHVy
ZS4KLSAgcHJpdmF0ZSBFZ2xCYXNlIGVnbEJhc2U7Ci0KLSAgLy8gVGhlc2UgYXJlIHByb3RlY3Rl
ZCBieSB0aGVpciByZXNwZWN0aXZlIGV2ZW50IG9iamVjdHMuCi0gIHByaXZhdGUgRXhlY3V0b3JT
ZXJ2aWNlIHNpZ25hbGluZ0V4ZWN1dG9yOwotICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQ7Ci0g
IHByaXZhdGUgYm9vbGVhbiBpc0ljZUNvbm5lY3RlZDsKLSAgcHJpdmF0ZSBTZXNzaW9uRGVzY3Jp
cHRpb24gbG9jYWxTZHA7Ci0gIHByaXZhdGUgTGlzdDxJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0
ZXMgPSBuZXcgTGlua2VkTGlzdDxJY2VDYW5kaWRhdGU+KCk7Ci0gIHByaXZhdGUgZmluYWwgT2Jq
ZWN0IGxvY2FsU2RwRXZlbnQgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0
IGljZUNhbmRpZGF0ZUV2ZW50ID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIE9iamVj
dCBpY2VDb25uZWN0ZWRFdmVudCA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmpl
Y3QgY2xvc2VFdmVudCA9IG5ldyBPYmplY3QoKTsKLQotICAvLyBNb2NrIHJlbmRlcmVyIGltcGxl
bWVudGF0aW9uLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2NrUmVuZGVyZXIgaW1wbGVtZW50
cyBWaWRlb1JlbmRlcmVyLkNhbGxiYWNrcyB7Ci0gICAgLy8gVGhlc2UgYXJlIHByb3RlY3RlZCBi
eSAndGhpcycgc2luY2Ugd2UgZ2V0cyBjYWxsZWQgZnJvbSB3b3JrZXIgdGhyZWFkcy4KLSAgICBw
cml2YXRlIFN0cmluZyByZW5kZXJlck5hbWU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIHJlbmRlckZy
YW1lQ2FsbGVkID0gZmFsc2U7Ci0KLSAgICAvLyBUaHJlYWQtc2FmZSBpbiBpdHNlbGYuCi0gICAg
cHJpdmF0ZSBDb3VudERvd25MYXRjaCBkb25lUmVuZGVyaW5nOwotCi0gICAgcHVibGljIE1vY2tS
ZW5kZXJlcihpbnQgZXhwZWN0ZWRGcmFtZXMsIFN0cmluZyByZW5kZXJlck5hbWUpIHsKLSAgICAg
IHRoaXMucmVuZGVyZXJOYW1lID0gcmVuZGVyZXJOYW1lOwotICAgICAgcmVzZXQoZXhwZWN0ZWRG
cmFtZXMpOwotICAgIH0KLQotICAgIC8vIFJlc2V0cyByZW5kZXIgdG8gd2FpdCBmb3IgbmV3IGFt
b3VudCBvZiB2aWRlbyBmcmFtZXMuCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0
KGludCBleHBlY3RlZEZyYW1lcykgewotICAgICAgcmVuZGVyRnJhbWVDYWxsZWQgPSBmYWxzZTsK
LSAgICAgIGRvbmVSZW5kZXJpbmcgPSBuZXcgQ291bnREb3duTGF0Y2goZXhwZWN0ZWRGcmFtZXMp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBy
ZW5kZXJGcmFtZShWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgICAgaWYgKCFy
ZW5kZXJGcmFtZUNhbGxlZCkgewotICAgICAgICBpZiAocmVuZGVyZXJOYW1lICE9IG51bGwpIHsK
LSAgICAgICAgICBMb2cuZChUQUcsIHJlbmRlcmVyTmFtZSArICIgcmVuZGVyIGZyYW1lOiAiICsg
ZnJhbWUucm90YXRlZFdpZHRoKCkgKyAiIHggIgotICAgICAgICAgICAgICAgICAgKyBmcmFtZS5y
b3RhdGVkSGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIExvZy5kKFRBRywg
IlJlbmRlciBmcmFtZTogIiArIGZyYW1lLnJvdGF0ZWRXaWR0aCgpICsgIiB4ICIgKyBmcmFtZS5y
b3RhdGVkSGVpZ2h0KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZW5kZXJGcmFtZUNh
bGxlZCA9IHRydWU7Ci0gICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7
Ci0gICAgICBkb25lUmVuZGVyaW5nLmNvdW50RG93bigpOwotICAgIH0KLQotICAgIC8vIFRoaXMg
bWV0aG9kIHNob3VsZG4ndCBob2xkIGFueSBsb2NrcyBvciB0b3VjaCBtZW1iZXIgdmFyaWFibGVz
IHNpbmNlIGl0Ci0gICAgLy8gYmxvY2tzLgotICAgIHB1YmxpYyBib29sZWFuIHdhaXRGb3JGcmFt
ZXNSZW5kZXJlZChpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgICAgZG9uZVJlbmRlcmluZy5hd2FpdCh0aW1lb3V0TXMsIFRpbWVVbml0Lk1JTExJU0VDT05E
Uyk7Ci0gICAgICByZXR1cm4gKGRvbmVSZW5kZXJpbmcuZ2V0Q291bnQoKSA8PSAwKTsKLSAgICB9
Ci0gIH0KLQotICAvLyBQZWVyIGNvbm5lY3Rpb24gZXZlbnRzIGltcGxlbWVudGF0aW9uLgotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25Mb2NhbERlc2NyaXB0aW9uKFNlc3Npb25EZXNjcmlw
dGlvbiBzZHApIHsKLSAgICBMb2cuZChUQUcsICJMb2NhbFNEUCB0eXBlOiAiICsgc2RwLnR5cGUp
OwotICAgIHN5bmNocm9uaXplZCAobG9jYWxTZHBFdmVudCkgewotICAgICAgbG9jYWxTZHAgPSBz
ZHA7Ci0gICAgICBsb2NhbFNkcEV2ZW50Lm5vdGlmeUFsbCgpOwotICAgIH0KLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUg
Y2FuZGlkYXRlKSB7Ci0gICAgc3luY2hyb25pemVkIChpY2VDYW5kaWRhdGVFdmVudCkgewotICAg
ICAgTG9nLmQoVEFHLCAiSWNlQ2FuZGlkYXRlICMiICsgaWNlQ2FuZGlkYXRlcy5zaXplKCkgKyAi
IDogIiArIGNhbmRpZGF0ZS50b1N0cmluZygpKTsKLSAgICAgIGlmIChsb29wYmFjaykgewotICAg
ICAgICAvLyBMb29wYmFjayBsb2NhbCBJQ0UgY2FuZGlkYXRlIGluIGEgc2VwYXJhdGUgdGhyZWFk
IHRvIGF2b2lkIGFkZGluZwotICAgICAgICAvLyByZW1vdGUgSUNFIGNhbmRpZGF0ZSBpbiBhIGxv
Y2FsIElDRSBjYW5kaWRhdGUgY2FsbGJhY2suCi0gICAgICAgIHNpZ25hbGluZ0V4ZWN1dG9yLmV4
ZWN1dGUobmV3IFJ1bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1
YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgICAgICAgIHBjQ2xpZW50LmFkZFJlbW90ZUljZUNhbmRp
ZGF0ZShjYW5kaWRhdGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAg
ICBpY2VDYW5kaWRhdGVzLmFkZChjYW5kaWRhdGUpOwotICAgICAgaWNlQ2FuZGlkYXRlRXZlbnQu
bm90aWZ5QWxsKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
SWNlQ2FuZGlkYXRlc1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewot
ICAgIC8vIFRPRE8oaG9uZ2hhaXopOiBBZGQgdGhpcyBmb3IgdGVzdHMuCi0gIH0KLQotICBAT3Zl
cnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VDb25uZWN0ZWQoKSB7Ci0gICAgTG9nLmQoVEFHLCAi
SUNFIENvbm5lY3RlZCIpOwotICAgIHN5bmNocm9uaXplZCAoaWNlQ29ubmVjdGVkRXZlbnQpIHsK
LSAgICAgIGlzSWNlQ29ubmVjdGVkID0gdHJ1ZTsKLSAgICAgIGljZUNvbm5lY3RlZEV2ZW50Lm5v
dGlmeUFsbCgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbklj
ZURpc2Nvbm5lY3RlZCgpIHsKLSAgICBMb2cuZChUQUcsICJJQ0UgRGlzY29ubmVjdGVkIik7Ci0g
ICAgc3luY2hyb25pemVkIChpY2VDb25uZWN0ZWRFdmVudCkgewotICAgICAgaXNJY2VDb25uZWN0
ZWQgPSBmYWxzZTsKLSAgICAgIGljZUNvbm5lY3RlZEV2ZW50Lm5vdGlmeUFsbCgpOwotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25uZWN0aW9uQ2xvc2Vk
KCkgewotICAgIExvZy5kKFRBRywgIlBlZXJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIHN5bmNo
cm9uaXplZCAoY2xvc2VFdmVudCkgewotICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgY2xv
c2VFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25QZWVyQ29ubmVjdGlvbkVycm9yKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIGZh
aWwoIlBDIEVycm9yOiAiICsgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1
YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rpb25TdGF0c1JlYWR5KFN0YXRzUmVwb3J0W10gcmVwb3J0
cykge30KLQotICAvLyBIZWxwZXIgd2FpdCBmdW5jdGlvbnMuCi0gIHByaXZhdGUgYm9vbGVhbiB3
YWl0Rm9yTG9jYWxTRFAoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBzeW5jaHJvbml6ZWQgKGxvY2FsU2RwRXZlbnQpIHsKLSAgICAgIGlmIChsb2NhbFNk
cCA9PSBudWxsKSB7Ci0gICAgICAgIGxvY2FsU2RwRXZlbnQud2FpdCh0aW1lb3V0TXMpOwotICAg
ICAgfQotICAgICAgcmV0dXJuIChsb2NhbFNkcCAhPSBudWxsKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIGJvb2xlYW4gd2FpdEZvckljZUNhbmRpZGF0ZXMoaW50IHRpbWVvdXRNcykgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBzeW5jaHJvbml6ZWQgKGljZUNhbmRpZGF0ZUV2
ZW50KSB7Ci0gICAgICBpZiAoaWNlQ2FuZGlkYXRlcy5zaXplKCkgPT0gMCkgewotICAgICAgICBp
Y2VDYW5kaWRhdGVFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
KGljZUNhbmRpZGF0ZXMuc2l6ZSgpID4gMCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29s
ZWFuIHdhaXRGb3JJY2VDb25uZWN0ZWQoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBzeW5jaHJvbml6ZWQgKGljZUNvbm5lY3RlZEV2ZW50KSB7Ci0gICAg
ICBpZiAoIWlzSWNlQ29ubmVjdGVkKSB7Ci0gICAgICAgIGljZUNvbm5lY3RlZEV2ZW50LndhaXQo
dGltZW91dE1zKTsKLSAgICAgIH0KLSAgICAgIGlmICghaXNJY2VDb25uZWN0ZWQpIHsKLSAgICAg
ICAgTG9nLmUoVEFHLCAiSUNFIGNvbm5lY3Rpb24gZmFpbHVyZSIpOwotICAgICAgfQotCi0gICAg
ICByZXR1cm4gaXNJY2VDb25uZWN0ZWQ7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFu
IHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIHN5bmNocm9uaXplZCAoY2xvc2VFdmVudCkgewotICAgICAg
aWYgKCFpc0Nsb3NlZCkgewotICAgICAgICBjbG9zZUV2ZW50LndhaXQodGltZW91dE1zKTsKLSAg
ICAgIH0KLSAgICAgIHJldHVybiBpc0Nsb3NlZDsKLSAgICB9Ci0gIH0KLQotICBQZWVyQ29ubmVj
dGlvbkNsaWVudCBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChNb2NrUmVuZGVyZXIgbG9jYWxS
ZW5kZXJlciwKLSAgICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciwgUGVlckNvbm5lY3Rp
b25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywKLSAgICAgIFZpZGVvQ2FwdHVy
ZXIgdmlkZW9DYXB0dXJlciwgRWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQpIHsKLSAgICBMaXN0
PFBlZXJDb25uZWN0aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycyA9IG5ldyBMaW5rZWRMaXN0PFBl
ZXJDb25uZWN0aW9uLkljZVNlcnZlcj4oKTsKLSAgICBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25h
bGluZ1BhcmFtZXRlcnMgPQotICAgICAgICBuZXcgU2lnbmFsaW5nUGFyYW1ldGVycyhpY2VTZXJ2
ZXJzLCB0cnVlLCAvLyBpY2VTZXJ2ZXJzLCBpbml0aWF0b3IuCi0gICAgICAgICAgICBudWxsLCBu
dWxsLCBudWxsLCAvLyBjbGllbnRJZCwgd3NzVXJsLCB3c3NQb3N0VXJsLgotICAgICAgICAgICAg
bnVsbCwgbnVsbCk7IC8vIG9mZmVyU2RwLCBpY2VDYW5kaWRhdGVzLgotCi0gICAgUGVlckNvbm5l
Y3Rpb25DbGllbnQgY2xpZW50ID0gUGVlckNvbm5lY3Rpb25DbGllbnQuZ2V0SW5zdGFuY2UoKTsK
LSAgICBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25u
ZWN0aW9uRmFjdG9yeS5PcHRpb25zKCk7Ci0gICAgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9
IDA7Ci0gICAgb3B0aW9ucy5kaXNhYmxlTmV0d29ya01vbml0b3IgPSB0cnVlOwotICAgIGNsaWVu
dC5zZXRQZWVyQ29ubmVjdGlvbkZhY3RvcnlPcHRpb25zKG9wdGlvbnMpOwotICAgIGNsaWVudC5j
cmVhdGVQZWVyQ29ubmVjdGlvbkZhY3RvcnkoCi0gICAgICAgIGdldEluc3RydW1lbnRhdGlvbigp
LmdldFRhcmdldENvbnRleHQoKSwgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLCB0aGlzKTsKLSAg
ICBjbGllbnQuY3JlYXRlUGVlckNvbm5lY3Rpb24oCi0gICAgICAgIGVnbENvbnRleHQsIGxvY2Fs
UmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLCB2aWRlb0NhcHR1cmVyLCBzaWduYWxpbmdQYXJhbWV0
ZXJzKTsKLSAgICBjbGllbnQuY3JlYXRlT2ZmZXIoKTsKLSAgICByZXR1cm4gY2xpZW50OwotICB9
Ci0KLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgY3JlYXRlUGFyYW1ldGVyc0Zv
ckF1ZGlvQ2FsbCgpIHsKLSAgICBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rp
b25QYXJhbWV0ZXJzID0KLSAgICAgICAgbmV3IFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyhmYWxz
ZSwgLyogdmlkZW9DYWxsRW5hYmxlZCAqLwotICAgICAgICAgICAgdHJ1ZSwgLyogbG9vcGJhY2sg
Ki8KLSAgICAgICAgICAgIGZhbHNlLCAvKiB0cmFjaW5nICovCi0gICAgICAgICAgICAvLyBWaWRl
byBjb2RlYyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgMCwgLyogdmlkZW9XaWR0aCAqLwotICAg
ICAgICAgICAgMCwgLyogdmlkZW9IZWlnaHQgKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvRnBz
ICovCi0gICAgICAgICAgICAwLCAvKiB2aWRlb1N0YXJ0Qml0cmF0ZSAqLwotICAgICAgICAgICAg
IiIsIC8qIHZpZGVvQ29kZWMgKi8KLSAgICAgICAgICAgIHRydWUsIC8qIHZpZGVvQ29kZWNId0Fj
Y2VsZXJhdGlvbiAqLwotICAgICAgICAgICAgLy8gQXVkaW8gY29kZWMgcGFyYW1ldGVycy4KLSAg
ICAgICAgICAgIDAsIC8qIGF1ZGlvU3RhcnRCaXRyYXRlICovCi0gICAgICAgICAgICAiT1BVUyIs
IC8qIGF1ZGlvQ29kZWMgKi8KLSAgICAgICAgICAgIGZhbHNlLCAvKiBub0F1ZGlvUHJvY2Vzc2lu
ZyAqLwotICAgICAgICAgICAgZmFsc2UsIC8qIGFlY0R1bXAgKi8KLSAgICAgICAgICAgIGZhbHNl
IC8qIHVzZU9wZW5TTEVTICovLCBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJbkFFQyAqLywgZmFsc2Ug
LyogZGlzYWJsZUJ1aWx0SW5BR0MgKi8sCi0gICAgICAgICAgICBmYWxzZSAvKiBkaXNhYmxlQnVp
bHRJbk5TICovLCBmYWxzZSAvKiBlbmFibGVMZXZlbENvbnRyb2wgKi8pOwotCi0gICAgcmV0dXJu
IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9DYXB0dXJl
ciBjcmVhdGVDYW1lcmFDYXB0dXJlcihib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICBm
aW5hbCBib29sZWFuIHVzZUNhbWVyYTIgPQotICAgICAgICBjYXB0dXJlVG9UZXh0dXJlICYmIENh
bWVyYTJFbnVtZXJhdG9yLmlzU3VwcG9ydGVkKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdl
dENvbnRleHQoKSk7Ci0KLSAgICBDYW1lcmFFbnVtZXJhdG9yIGVudW1lcmF0b3I7Ci0gICAgaWYg
KHVzZUNhbWVyYTIpIHsKLSAgICAgIGVudW1lcmF0b3IgPSBuZXcgQ2FtZXJhMkVudW1lcmF0b3Io
Z2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgZW51bWVyYXRvciA9IG5ldyBDYW1lcmExRW51bWVyYXRvcihjYXB0dXJlVG9UZXh0dXJl
KTsKLSAgICB9Ci0gICAgU3RyaW5nIGRldmljZU5hbWUgPSBlbnVtZXJhdG9yLmdldERldmljZU5h
bWVzKClbMF07Ci0gICAgcmV0dXJuIGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZGV2aWNlTmFt
ZSwgbnVsbCk7Ci0gIH0KLQotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBjcmVh
dGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFN0cmluZyB2aWRlb0NvZGVjKSB7Ci0gICAgUGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyA9Ci0gICAgICAgIG5l
dyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnModHJ1ZSwgLyogdmlkZW9DYWxsRW5hYmxlZCAqLwot
ICAgICAgICAgICAgdHJ1ZSwgLyogbG9vcGJhY2sgKi8KLSAgICAgICAgICAgIGZhbHNlLCAvKiB0
cmFjaW5nICovCi0gICAgICAgICAgICAvLyBWaWRlbyBjb2RlYyBwYXJhbWV0ZXJzLgotICAgICAg
ICAgICAgMCwgLyogdmlkZW9XaWR0aCAqLwotICAgICAgICAgICAgMCwgLyogdmlkZW9IZWlnaHQg
Ki8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvRnBzICovCi0gICAgICAgICAgICAwLCAvKiB2aWRl
b1N0YXJ0Qml0cmF0ZSAqLwotICAgICAgICAgICAgdmlkZW9Db2RlYywgLyogdmlkZW9Db2RlYyAq
LwotICAgICAgICAgICAgdHJ1ZSwgLyogdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uICovCi0gICAg
ICAgICAgICAvLyBBdWRpbyBjb2RlYyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgMCwgLyogYXVk
aW9TdGFydEJpdHJhdGUgKi8KLSAgICAgICAgICAgICJPUFVTIiwgLyogYXVkaW9Db2RlYyAqLwot
ICAgICAgICAgICAgZmFsc2UsIC8qIG5vQXVkaW9Qcm9jZXNzaW5nICovCi0gICAgICAgICAgICBm
YWxzZSwgLyogYWVjRHVtcCAqLwotICAgICAgICAgICAgZmFsc2UgLyogdXNlT3BlblNMRVMgKi8s
IGZhbHNlIC8qIGRpc2FibGVCdWlsdEluQUVDICovLCBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJbkFH
QyAqLywKLSAgICAgICAgICAgIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluTlMgKi8sIGZhbHNlIC8q
IGVuYWJsZUxldmVsQ29udHJvbCAqLyk7Ci0KLSAgICByZXR1cm4gcGVlckNvbm5lY3Rpb25QYXJh
bWV0ZXJzOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAg
IHNpZ25hbGluZ0V4ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7
Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpF
TExZX0JFQU5fTVIxKSB7Ci0gICAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoKTsKLSAgICB9
Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0gICAgc2ln
bmFsaW5nRXhlY3V0b3Iuc2h1dGRvd24oKTsKLSAgICBpZiAoZWdsQmFzZSAhPSBudWxsKSB7Ci0g
ICAgICBlZ2xCYXNlLnJlbGVhc2UoKTsKLSAgICB9Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RTZXRMb2NhbE9mZmVyTWFrZXNWaWRlb0Zsb3dMb2NhbGx5KCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBMb2cuZChUQUcsICJ0ZXN0U2V0TG9jYWxPZmZl
ck1ha2VzVmlkZW9GbG93TG9jYWxseSIpOwotICAgIE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVy
ID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExPQ0FMX1JFTkRFUkVS
X05BTUUpOwotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxS
ZW5kZXJlciwgbmV3IE1vY2tSZW5kZXJlcigwLCBudWxsKSwKLSAgICAgICAgY3JlYXRlUGFyYW1l
dGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFD
YXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAgICAvLyBX
YWl0IGZvciBsb2NhbCBTRFAgYW5kIGljZSBjYW5kaWRhdGVzIHNldCBldmVudHMuCi0gICAgYXNz
ZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlUX1RJ
TUVPVVQpKTsKLSAgICBhc3NlcnRUcnVlKCJJQ0UgY2FuZGlkYXRlcyB3ZXJlIG5vdCBnZW5lcmF0
ZWQuIiwgd2FpdEZvckljZUNhbmRpZGF0ZXMoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICAvLyBDaGVj
ayB0aGF0IGxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUo
Ci0gICAgICAgICJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQuIiwgbG9jYWxS
ZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICBwY0Ns
aWVudC5jbG9zZSgpOwotICAgIGFzc2VydFRydWUoCi0gICAgICAgICJQZWVyQ29ubmVjdGlvbiBj
bG9zZSBldmVudCB3YXMgbm90IHJlY2VpdmVkLiIsIHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3Nl
ZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0U2V0TG9jYWxPZmZlck1ha2Vz
VmlkZW9GbG93TG9jYWxseSBEb25lLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRvTG9vcGJh
Y2tUZXN0KFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzLCBWaWRlb0NhcHR1cmVy
IHZpZGVvQ2FwdHVyZXIsCi0gICAgICBib29sZWFuIGRlY29kZVRvVGV4dHVyZSkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0gICAgTW9ja1JlbmRl
cmVyIGxvY2FsUmVuZGVyZXIgPSBudWxsOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJl
ciA9IG51bGw7Ci0gICAgaWYgKHBhcmFtZXRlcnMudmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAg
TG9nLmQoVEFHLCAidGVzdExvb3BiYWNrIGZvciB2aWRlbyAiICsgcGFyYW1ldGVycy52aWRlb0Nv
ZGVjKTsKLSAgICAgIGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJ
REVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAgICByZW1vdGVSZW5kZXJlciA9
IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJf
TkFNRSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgInRlc3RMb29wYmFjayBmb3Ig
YXVkaW8uIik7Ci0gICAgfQotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGll
bnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVyZXIsIHBhcmFtZXRlcnMsIHZpZGVvQ2FwdHVy
ZXIsCi0gICAgICAgIGRlY29kZVRvVGV4dHVyZSA/IGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQo
KSA6IG51bGwpOwotCi0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5z
d2VyIGFuZCBzZXQgYXMgcmVtb3RlIFNEUC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2Fz
IG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotICAgIFNlc3Npb25E
ZXNjcmlwdGlvbiByZW1vdGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBT
ZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2Fs
U2RwLmRlc2NyaXB0aW9uKTsKLSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1v
dGVTZHApOwotCi0gICAgLy8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1
ZSgiSUNFIGNvbm5lY3Rpb24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05O
RUNUSU9OX1dBSVRfVElNRU9VVCkpOwotCi0gICAgaWYgKHBhcmFtZXRlcnMudmlkZW9DYWxsRW5h
YmxlZCkgewotICAgICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1l
cyB3ZXJlIHJlbmRlcmVkLgotICAgICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdl
cmUgbm90IHJlbmRlcmVkLiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVz
UmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlkZW8g
ZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkLiIsCi0gICAgICAgICAgcmVtb3RlUmVuZGVyZXIud2Fp
dEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAv
LyBGb3IgYXVkaW8ganVzdCBzbGVlcCBmb3IgMSBzZWMuCi0gICAgICAvLyBUT0RPKGdsYXpuZXYp
OiBjaGVjayBob3cgd2UgY2FuIGRldGVjdCB0aGF0IHJlbW90ZSBhdWRpbyB3YXMgcmVuZGVyZWQu
Ci0gICAgICBUaHJlYWQuc2xlZXAoQVVESU9fUlVOX1RJTUVPVVQpOwotICAgIH0KLQotICAgIHBj
Q2xpZW50LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9z
ZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVzdExvb3BiYWNrIGRvbmUuIik7
Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja0F1ZGlvKCkg
dGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQ
YXJhbWV0ZXJzRm9yQXVkaW9DYWxsKCksIG51bGwsIGZhbHNlIC8qIGRlY29kZVRvVGV4dHVyZSAq
Lyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOCgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRl
UGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVD
YW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgZmFsc2UgLyogZGVj
b2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dExvb3BiYWNrVnA5KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBkb0xvb3Bi
YWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOSksCi0g
ICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8p
LCBmYWxzZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tIMjY0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9u
IHsKLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVP
X0NPREVDX0gyNjQpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0
dXJlVG9UZXh0dXJlICovKSwgZmFsc2UgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0g
IEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA4RGVjb2RlVG9UZXh0dXJl
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5T
REtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywg
IkRlY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLCByZXF1aXJlcyBTREsgdmVyc2lv
biAxOS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRl
UGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVD
YW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNv
ZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
TG9vcGJhY2tWcDlEZWNvZGVUb1RleHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24g
ewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJ
VEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRGVjb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBw
b3J0ZWQsIHJlcXVpcmVzIFNESyB2ZXJzaW9uIDE5LiIpOwotICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NP
REVDX1ZQOSksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVU
b1RleHR1cmUgKi8pLCB0cnVlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21h
bGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja0gyNjREZWNvZGVUb1RleHR1cmUoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19J
TlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRGVj
b2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVzIFNESyB2ZXJzaW9uIDE5
LiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJh
bWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX0gyNjQpLAotICAgICAgICBjcmVhdGVDYW1l
cmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNvZGVU
b1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9v
cGJhY2tWcDhDYXB0dXJlVG9UZXh0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRL
QVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkVuY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9y
dGVkLiBSZXF1aXJlcyBTREsgdmVyc2lvbiAxOSIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBUT0RPKHBlcmtqKTogSWYgd2UgY2FuIGFsd2F5cyBjYXB0dXJlIHRvIHRleHR1cmVzLCB0
aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIHRoZQotICAgIC8vIGhhcmR3YXJlIGVuY29kZXIg
c3VwcG9ydHMgdG8gZW5jb2RlIGZyb20gYSB0ZXh0dXJlLgotICAgIGlmICghTWVkaWFDb2RlY1Zp
ZGVvRW5jb2Rlci5pc1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpKSB7Ci0gICAgICBMb2cu
aShUQUcsICJWUDggZW5jb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JW
aWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIo
dHJ1ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8p
OwotICB9Ci0KLSAgLy8gVGVzdCB0aGF0IGEgY2FsbCBjYW4gYmUgc2V0dXAgZXZlbiBpZiB0aGUg
RUdMIGNvbnRleHQgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaXMKLSAgLy8gcmVsZWFzZWQg
YmVmb3JlIHRoZSBWaWRlbyBjb2RlY3MgYXJlIGNyZWF0ZWQuIFRoZSBIVyBlbmNvZGVyIGFuZCBk
ZWNvZGVyIGlzIHNldHVwIHRvIHVzZQotICAvLyB0ZXh0dXJlcy4KLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tFZ2xDb250ZXh0UmVsZWFzZWRBZnRlckNyZWF0aW5nUGMo
KSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNE
S19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAi
RGVjb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlcXVpcmVzIFNESyB2ZXJzaW9u
IDE5Iik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9vcGJhY2sgPSB0cnVlOwotICAg
IFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gY3JlYXRlUGFyYW1ldGVyc0Zv
clZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpOwotICAgIE1vY2tSZW5kZXJlciBsb2NhbFJlbmRl
cmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExPQ0FMX1JFTkRF
UkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9IG5ldyBNb2NrUmVu
ZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJfTkFNRSk7Ci0gICAg
cGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2NhbFJlbmRlcmVyLCByZW1v
dGVSZW5kZXJlciwgcGFyYW1ldGVycywKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIodHJ1
ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsK
LQotICAgIC8vIFdhaXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0
IGFzIHJlbW90ZSBTRFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIs
IHdhaXRGb3JMb2NhbFNEUChXQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIFJlbGVhc2UgdGhlIEVH
TCBjb250ZXh0IHVzZWQgZm9yIGNyZWF0aW5nIHRoZSBQZWVyQ29ubmVjdGlvbkNsaWVudC4KLSAg
ICAvLyBTaW5jZSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudCBpcyBhc3luY2hyb25vdXMsIHdl
IG11c3Qgd2FpdCBmb3IgdGhlIGxvY2FsCi0gICAgLy8gU2Vzc2lvbkRlc2NyaXB0aW9uLgotICAg
IGVnbEJhc2UucmVsZWFzZSgpOwotICAgIGVnbEJhc2UgPSBudWxsOwotCi0gICAgU2Vzc2lvbkRl
c2NyaXB0aW9uIHJlbW90ZVNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNl
c3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxT
ZHAuZGVzY3JpcHRpb24pOwotICAgIHBjQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90
ZVNkcCk7Ci0KLSAgICAvLyBXYWl0IGZvciBJQ0UgY29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVl
KCJJQ0UgY29ubmVjdGlvbiBmYWlsdXJlLiIsIHdhaXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5F
Q1RJT05fV0FJVF9USU1FT1VUKSk7Ci0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3Rl
IHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUoCi0gICAgICAgICJM
b2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQuIiwgbG9jYWxSZW5kZXJlci53YWl0
Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3Rl
IHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZC4iLAotICAgICAgICByZW1vdGVSZW5kZXJl
ci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICBwY0NsaWVudC5j
bG9zZSgpOwotICAgIGFzc2VydFRydWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRf
VElNRU9VVCkpOwotICAgIExvZy5kKFRBRywgInRlc3RMb29wYmFjayBkb25lLiIpOwotICB9Ci0K
LSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tIMjY0Q2FwdHVyZVRvVGV4
dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJ
T04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShU
QUcsICJFbmNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gUmVxdWlyZXMgS0lUS0FU
Iik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFRPRE8ocGVya2opOiBJZiB3ZSBjYW4g
YWx3YXlzIGNhcHR1cmUgdG8gdGV4dHVyZXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYg
dGhlCi0gICAgLy8gaGFyZHdhcmUgZW5jb2RlciBzdXBwb3J0cyB0byBlbmNvZGUgZnJvbSBhIHRl
eHR1cmUuCi0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmlzSDI2NEh3U3VwcG9ydGVk
VXNpbmdUZXh0dXJlcygpKSB7Ci0gICAgICBMb2cuaShUQUcsICJIMjY0IGVuY29kZSB0byB0ZXh0
dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkb0xv
b3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX0gyNjQp
LAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcih0cnVlIC8qIGNhcHR1cmVUb1RleHR1cmUg
Ki8pLCB0cnVlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYg
ZGVmYXVsdCBmcm9udCBjYW1lcmEgY2FuIGJlIHN3aXRjaGVkIHRvIGJhY2sgY2FtZXJhIGFuZCB0
aGVuCi0gIC8vIGFnYWluIHRvIGZyb250IGNhbWVyYS4KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMg
dm9pZCB0ZXN0Q2FtZXJhU3dpdGNoKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBMb2cuZChUQUcsICJ0ZXN0Q2FtZXJhU3dpdGNoIik7Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwot
Ci0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVD
VEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAgTW9ja1JlbmRlcmVy
IHJlbW90ZVJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMs
IFJFTU9URV9SRU5ERVJFUl9OQU1FKTsKLQotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5l
Y3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVyZXIsCi0gICAgICAgIGNyZWF0
ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRl
Q2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwotCi0g
ICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQgYXMg
cmVtb3RlIFNEUC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwgd2Fp
dEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiByZW1v
dGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3JpcHRp
b24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0aW9u
KTsKLSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0gICAg
Ly8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rp
b24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRfVElN
RU9VVCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1l
cyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJl
IG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHN3aXRjaC4iLAotICAgICAgICBsb2NhbFJlbmRl
cmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRUcnVl
KCJSZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJlZm9yZSBjYW1lcmEgc3dp
dGNoLiIsCi0gICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlU
X1RJTUVPVVQpKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQ0FNRVJBX1NXSVRDSF9BVFRF
TVBUUzsgaSsrKSB7Ci0gICAgICAvLyBUcnkgdG8gc3dpdGNoIGNhbWVyYQotICAgICAgcGNDbGll
bnQuc3dpdGNoQ2FtZXJhKCk7Ci0KLSAgICAgIC8vIFJlc2V0IHZpZGVvIHJlbmRlcnMgYW5kIGNo
ZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMKLSAgICAgIC8vIHdlcmUgcmVu
ZGVyZWQgYWZ0ZXIgY2FtZXJhIHN3aXRjaC4KLSAgICAgIGxvY2FsUmVuZGVyZXIucmVzZXQoRVhQ
RUNURURfVklERU9fRlJBTUVTKTsKLSAgICAgIHJlbW90ZVJlbmRlcmVyLnJlc2V0KEVYUEVDVEVE
X1ZJREVPX0ZSQU1FUyk7Ci0gICAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2Vy
ZSBub3QgcmVuZGVyZWQgYWZ0ZXIgY2FtZXJhIHN3aXRjaC4iLAotICAgICAgICAgIGxvY2FsUmVu
ZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0
VHJ1ZSgiUmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciBjYW1lcmEg
c3dpdGNoLiIsCi0gICAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVk
KFdBSVRfVElNRU9VVCkpOwotICAgIH0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwotICAgIGFzc2Vy
dFRydWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkpOwotICAgIExv
Zy5kKFRBRywgInRlc3RDYW1lcmFTd2l0Y2ggZG9uZS4iKTsKLSAgfQotCi0gIC8vIENoZWNrcyBp
ZiB2aWRlbyBzb3VyY2UgY2FuIGJlIHJlc3RhcnRlZCAtIHNpbXVsYXRlIGFwcCBnb2VzIHRvCi0g
IC8vIGJhY2tncm91bmQgYW5kIGJhY2sgdG8gZm9yZWdyb3VuZC4KLSAgLy8gRGlzYWJsZWQgYmVj
YXVzZSBvZiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/
aWQ9NjQ3OAotICBARmxha3lUZXN0Ci0gIC8vQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0
VmlkZW9Tb3VyY2VSZXN0YXJ0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBM
b2cuZChUQUcsICJ0ZXN0VmlkZW9Tb3VyY2VSZXN0YXJ0Iik7Ci0gICAgbG9vcGJhY2sgPSB0cnVl
OwotCi0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVY
UEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAgTW9ja1JlbmRl
cmVyIHJlbW90ZVJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFN
RVMsIFJFTU9URV9SRU5ERVJFUl9OQU1FKTsKLQotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNv
bm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVyZXIsCi0gICAgICAgIGNy
ZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3Jl
YXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwot
Ci0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQg
YXMgcmVtb3RlIFNEUC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwg
d2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiBy
ZW1vdGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3Jp
cHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0
aW9uKTsKLSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0g
ICAgLy8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5l
Y3Rpb24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRf
VElNRU9VVCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZy
YW1lcyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3
ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgdmlkZW8gcmVzdGFydC4iLAotICAgICAgICBsb2NhbFJl
bmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRU
cnVlKCJSZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJlZm9yZSB2aWRlbyBy
ZXN0YXJ0LiIsCi0gICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChX
QUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIFN0b3AgYW5kIHRoZW4gc3RhcnQgdmlkZW8gc291cmNl
IGEgZmV3IHRpbWVzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVklERU9fUkVTVEFSVF9BVFRF
TVBUUzsgaSsrKSB7Ci0gICAgICBwY0NsaWVudC5zdG9wVmlkZW9Tb3VyY2UoKTsKLSAgICAgIFRo
cmVhZC5zbGVlcChWSURFT19SRVNUQVJUX1RJTUVPVVQpOwotICAgICAgcGNDbGllbnQuc3RhcnRW
aWRlb1NvdXJjZSgpOwotCi0gICAgICAvLyBSZXNldCB2aWRlbyByZW5kZXJzIGFuZCBjaGVjayB0
aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzCi0gICAgICAvLyB3ZXJlIHJlbmRlcmVk
IGFmdGVyIHZpZGVvIHJlc3RhcnQuCi0gICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVE
X1ZJREVPX0ZSQU1FUyk7Ci0gICAgICByZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURF
T19GUkFNRVMpOwotICAgICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90
IHJlbmRlcmVkIGFmdGVyIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVy
LndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUo
IlJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIgdmlkZW8gcmVzdGFy
dC4iLAotICAgICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlU
X1RJTUVPVVQpKTsKLSAgICB9Ci0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVl
KHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChU
QUcsICJ0ZXN0VmlkZW9Tb3VyY2VSZXN0YXJ0IGRvbmUuIik7Ci0gIH0KLQotICAvLyBDaGVja3Mg
aWYgY2FwdHVyZSBmb3JtYXQgY2FuIGJlIGNoYW5nZWQgb24gZmx5IGFuZCBkZWNvZGVyIGNhbiBi
ZSByZXNldCBwcm9wZXJseS4KLSAgLy8gRGlzYWJsZWQgYmVjYXVzZSBvZiBodHRwczovL2J1Z3Mu
Y2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NjQ3OAotICBARmxha3lUZXN0
Ci0gIC8vQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FwdHVyZUZvcm1hdENoYW5nZSgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdENhcHR1
cmVGb3JtYXRDaGFuZ2UiKTsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0KLSAgICBNb2NrUmVuZGVy
ZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVT
LCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIg
PSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVS
X05BTUUpOwotCi0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2Nh
bFJlbmRlcmVyLCByZW1vdGVSZW5kZXJlciwKLSAgICAgICAgY3JlYXRlUGFyYW1ldGVyc0ZvclZp
ZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihm
YWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAgICAvLyBXYWl0IGZvciBs
b2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1vdGUgU0RQLgotICAg
IGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJ
VF9USU1FT1VUKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90ZVNkcCA9IG5ldyBTZXNz
aW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5v
bmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRpb24pOwotICAgIHBjQ2xpZW50
LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAgICAvLyBXYWl0IGZvciBJQ0Ug
Y29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVjdGlvbiBmYWlsdXJlLiIsIHdh
aXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1FT1VUKSk7Ci0KLSAgICAv
LyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgcmVuZGVyZWQu
Ci0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJl
Zm9yZSBjYW1lcmEgcmVzb2x1dGlvbiBjaGFuZ2UuIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53
YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVt
b3RlIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHJlc29sdXRp
b24gY2hhbmdlLiIsCi0gICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJl
ZChXQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIENoYW5nZSBjYXB0dXJlIG91dHB1dCBmb3JtYXQg
YSBmZXcgdGltZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyICogQ0FQVFVSRV9GT1JNQVRf
Q0hBTkdFX0FUVEVNUFRTOyBpKyspIHsKLSAgICAgIGlmIChpICUgMiA9PSAwKSB7Ci0gICAgICAg
IHBjQ2xpZW50LmNoYW5nZUNhcHR1cmVGb3JtYXQoV0lEVEhfVkdBLCBIRUlHSFRfVkdBLCBNQVhf
VklERU9fRlBTKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBjQ2xpZW50LmNoYW5nZUNhcHR1
cmVGb3JtYXQoV0lEVEhfUVZHQSwgSEVJR0hUX1FWR0EsIE1BWF9WSURFT19GUFMpOwotICAgICAg
fQotCi0gICAgICAvLyBSZXNldCB2aWRlbyByZW5kZXJzIGFuZCBjaGVjayB0aGF0IGxvY2FsIGFu
ZCByZW1vdGUgdmlkZW8gZnJhbWVzCi0gICAgICAvLyB3ZXJlIHJlbmRlcmVkIGFmdGVyIGNhcHR1
cmUgZm9ybWF0IGNoYW5nZS4KLSAgICAgIGxvY2FsUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklE
RU9fRlJBTUVTKTsKLSAgICAgIHJlbW90ZVJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZS
QU1FUyk7Ci0gICAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVu
ZGVyZWQgYWZ0ZXIgY2FwdHVyZSBmb3JtYXQgY2hhbmdlLiIsCi0gICAgICAgICAgbG9jYWxSZW5k
ZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRU
cnVlKCJSZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIGNhcHR1cmUg
Zm9ybWF0IGNoYW5nZS4iLAotICAgICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNS
ZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICB9Ci0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwot
ICAgIGFzc2VydFRydWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkp
OwotICAgIExvZy5kKFRBRywgInRlc3RDYXB0dXJlRm9ybWF0Q2hhbmdlIGRvbmUuIik7Ci0gIH0K
LX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvVmlkZW9GaWxlUmVu
ZGVyZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvdGVzdC9WaWRlb0ZpbGVSZW5kZXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9WaWRlb0ZpbGVSZW5kZXJlclRlc3Qu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIw
MTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LXBhY2thZ2Ugb3JnLndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRp
b25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24u
U21hbGxUZXN0OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNl
cHRpb247Ci1pbXBvcnQgamF2YS5pby5SYW5kb21BY2Nlc3NGaWxlOwotaW1wb3J0IGphdmEubGFu
Zy5UaHJlYWQ7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWlt
cG9ydCBqYXZhLnV0aWwuUmFuZG9tOwotCi1wdWJsaWMgY2xhc3MgVmlkZW9GaWxlUmVuZGVyZXJU
ZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBAU21hbGxUZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RZdXZSZW5kZXJpbmdUb0ZpbGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0
ZSgpOwotICAgIGZpbmFsIFN0cmluZyB2aWRlb091dFBhdGggPSAiL3NkY2FyZC9jaHJvbWl1bV90
ZXN0c19yb290L3Rlc3R2aWRlb291dC55NG0iOwotICAgIGludCBmcmFtZVdpZHRoID0gNDsKLSAg
ICBpbnQgZnJhbWVIZWlnaHQgPSA0OwotICAgIFZpZGVvRmlsZVJlbmRlcmVyIHZpZGVvRmlsZVJl
bmRlcmVyID0KLSAgICAgICAgbmV3IFZpZGVvRmlsZVJlbmRlcmVyKHZpZGVvT3V0UGF0aCwgZnJh
bWVXaWR0aCwgZnJhbWVIZWlnaHQsIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0KLSAg
ICBTdHJpbmdbXSBmcmFtZXMgPSB7Ci0gICAgICAgICJUSElTIElTIEpVU1QgU09NRSBURVhUIHgi
LCAiVEhFIFNFQ09ORCBGUkFNRSBxd2VydHkuIiwgIkhFUkUgSVMgVEhFIFRIUklEIEZSQU1FISJ9
OwotCi0gICAgZm9yIChTdHJpbmcgZnJhbWVTdHIgOiBmcmFtZXMpIHsKLSAgICAgIGludFtdIHBs
YW5lU2l6ZXMgPSB7Ci0gICAgICAgICAgZnJhbWVXaWR0aCAqIGZyYW1lV2lkdGgsIGZyYW1lV2lk
dGggKiBmcmFtZUhlaWdodCAvIDQsIGZyYW1lV2lkdGggKiBmcmFtZUhlaWdodCAvIDR9OwotCi0g
ICAgICBieXRlW10gZnJhbWVCeXRlcyA9IGZyYW1lU3RyLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNl
dHMuVVNfQVNDSUkpOwotICAgICAgQnl0ZUJ1ZmZlcltdIHl1dlBsYW5lcyA9IG5ldyBCeXRlQnVm
ZmVyWzNdOwotICAgICAgaW50IHBvcyA9IDA7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7
IGkrKykgewotICAgICAgICB5dXZQbGFuZXNbaV0gPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0
KHBsYW5lU2l6ZXNbaV0pOwotICAgICAgICB5dXZQbGFuZXNbaV0ucHV0KGZyYW1lQnl0ZXMsIHBv
cywgcGxhbmVTaXplc1tpXSk7Ci0gICAgICAgIHBvcyArPSBwbGFuZVNpemVzW2ldOwotICAgICAg
fQotCi0gICAgICBpbnRbXSB5dXZTdHJpZGVzID0ge2ZyYW1lV2lkdGgsIGZyYW1lV2lkdGggLyAy
LCBmcmFtZVdpZHRoIC8gMn07Ci0KLSAgICAgIFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1l
ID0KLSAgICAgICAgICBuZXcgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUoZnJhbWVXaWR0aCwgZnJh
bWVIZWlnaHQsIDAsIHl1dlN0cmlkZXMsIHl1dlBsYW5lcywgMCk7Ci0KLSAgICAgIHZpZGVvRmls
ZVJlbmRlcmVyLnJlbmRlckZyYW1lKGZyYW1lKTsKLSAgICB9Ci0gICAgdmlkZW9GaWxlUmVuZGVy
ZXIucmVsZWFzZSgpOwotCi0gICAgUmFuZG9tQWNjZXNzRmlsZSB3cml0dGVuRmlsZSA9IG5ldyBS
YW5kb21BY2Nlc3NGaWxlKHZpZGVvT3V0UGF0aCwgInIiKTsKLSAgICB0cnkgewotICAgICAgaW50
IGxlbmd0aCA9IChpbnQpIHdyaXR0ZW5GaWxlLmxlbmd0aCgpOwotICAgICAgYnl0ZVtdIGRhdGEg
PSBuZXcgYnl0ZVtsZW5ndGhdOwotICAgICAgd3JpdHRlbkZpbGUucmVhZEZ1bGx5KGRhdGEpOwot
ICAgICAgU3RyaW5nIGZpbGVDb250ZW50ID0gbmV3IFN0cmluZyhkYXRhLCBTdGFuZGFyZENoYXJz
ZXRzLlVTX0FTQ0lJKTsKLSAgICAgIFN0cmluZyBleHBlY3RlZCA9ICJZVVY0TVBFRzIgQzQyMCBX
NCBINCBJcCBGMzA6MSBBMToxXG4iCi0gICAgICAgICAgKyAiRlJBTUVcbiIKLSAgICAgICAgICAr
ICJUSElTIElTIEpVU1QgU09NRSBURVhUIHhGUkFNRVxuIgotICAgICAgICAgICsgIlRIRSBTRUNP
TkQgRlJBTUUgcXdlcnR5LkZSQU1FXG4iCi0gICAgICAgICAgKyAiSEVSRSBJUyBUSEUgVEhSSUQg
RlJBTUUhIjsKLSAgICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgZmlsZUNvbnRlbnQpOwotICAg
IH0gZmluYWxseSB7Ci0gICAgICB3cml0dGVuRmlsZS5jbG9zZSgpOwotICAgIH0KLQotICAgIG5l
dyBGaWxlKHZpZGVvT3V0UGF0aCkuZGVsZXRlKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMv
b3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRlby55NG0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5k
cm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9jYXB0dXJldGVzdHZpZGVvLnk0
bQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVz
dC9jYXB0dXJldGVzdHZpZGVvLnk0bQkobm9uZXhpc3RlbnQpCkBAIC0xLDUgKzAsMCBAQAotWVVW
NE1QRUcyIEM0MjAgVzQgSDQgSXAgRjMwOjEgQTE6MQotRlJBTUUKLVRISVMgSVMgSlVTVCBTT01F
IFRFWFQgeEZSQU1FCi1USEUgU0VDT05EIEZSQU1FIHF3ZXJ0eS5GUkFNRQotSEVSRSBJUyBUSEUg
VEhSSUQgRlJBTUUhCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L0Zp
bGVWaWRlb0NhcHR1cmVyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL3Rlc3QvRmlsZVZpZGVvQ2FwdHVyZXJUZXN0LmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvRmlsZVZpZGVvQ2Fw
dHVyZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGMudGVzdDsKLQotaW1wb3J0IGFu
ZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Qu
c3VpdGVidWlsZGVyLmFubm90YXRpb24uTGFyZ2VUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5z
dWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5z
dWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLWltcG9ydCBvcmcud2VicnRjLkZp
bGVWaWRlb0NhcHR1cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9DYXB0dXJlcjsKLQotaW1w
b3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLlRocmVhZDsKLWltcG9y
dCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7Ci1pbXBvcnQgamF2YS51dGlsLkFy
cmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1wdWJsaWMgY2xhc3MgRmlsZVZp
ZGVvQ2FwdHVyZXJUZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBwcml2
YXRlIHN0YXRpYyBjbGFzcyBGcmFtZSB7Ci0gICAgcHVibGljIGJ5dGVbXSBkYXRhOwotICAgIHB1
YmxpYyBpbnQgd2lkdGg7Ci0gICAgcHVibGljIGludCBoZWlnaHQ7Ci0gIH0KLQotICBwdWJsaWMg
Y2xhc3MgTW9ja0NhcHR1cmVyT2JzZXJ2ZXIgaW1wbGVtZW50cyBWaWRlb0NhcHR1cmVyLkNhcHR1
cmVyT2JzZXJ2ZXIgewotICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PEZyYW1lPiBmcmFtZURh
dGFzID0gbmV3IEFycmF5TGlzdDxGcmFtZT4oKTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIG9uQ2FwdHVyZXJTdGFydGVkKGJvb2xlYW4gc3VjY2VzcykgewotICAgICAgYXNzZXJ0
VHJ1ZShzdWNjZXNzKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bkNhcHR1cmVyU3RvcHBlZCgpIHsKLSAgICAgIC8vIEVtcHR5IG9uIHB1cnBvc2UuCi0gICAgfQot
Ci0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uQnl0ZUJ1ZmZl
ckZyYW1lQ2FwdHVyZWQoCi0gICAgICAgIGJ5dGVbXSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lU3RhbXApIHsKLSAgICAgIEZyYW1lIGZyYW1lID0g
bmV3IEZyYW1lKCk7Ci0gICAgICBmcmFtZS5kYXRhID0gZGF0YTsKLSAgICAgIGZyYW1lLndpZHRo
ID0gd2lkdGg7Ci0gICAgICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICBhc3NlcnRUcnVl
KGRhdGEubGVuZ3RoICE9IDApOwotICAgICAgZnJhbWVEYXRhcy5hZGQoZnJhbWUpOwotICAgICAg
bm90aWZ5KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0
dXJlRnJhbWVDYXB0dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQs
Ci0gICAgICAgIGZsb2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGlt
ZXN0YW1wKSB7Ci0gICAgICAvLyBFbXB0eSBvbiBwdXJwb3NlLgotICAgIH0KLQotICAgIHB1Ymxp
YyBzeW5jaHJvbml6ZWQgQXJyYXlMaXN0PEZyYW1lPiBnZXRNaW5pbXVtRnJhbWVzQmxvY2tpbmco
aW50IG1pbkZyYW1lcykKLSAgICAgICAgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICAgIHdoaWxlIChmcmFtZURhdGFzLnNpemUoKSA8IG1pbkZyYW1lcykgewotICAgICAgICB3YWl0
KCk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxGcmFtZT4oZnJhbWVEYXRh
cyk7Ci0gICAgfQotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0VmlkZW9D
YXB0dXJlRnJvbUZpbGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElPRXhjZXB0aW9u
IHsKLSAgICBmaW5hbCBpbnQgRlJBTUVfV0lEVEggPSA0OwotICAgIGZpbmFsIGludCBGUkFNRV9I
RUlHSFQgPSA0OwotICAgIGZpbmFsIEZpbGVWaWRlb0NhcHR1cmVyIGZpbGVWaWRlb0NhcHR1cmVy
ID0gbmV3IEZpbGVWaWRlb0NhcHR1cmVyKAotICAgICAgICAiL3NkY2FyZC9jaHJvbWl1bV90ZXN0
c19yb290L3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0
Yy90ZXN0LyIKLSAgICAgICAgKyAiY2FwdHVyZXRlc3R2aWRlby55NG0iKTsKLSAgICBmaW5hbCBN
b2NrQ2FwdHVyZXJPYnNlcnZlciBjYXB0dXJlck9ic2VydmVyID0gbmV3IE1vY2tDYXB0dXJlck9i
c2VydmVyKCk7Ci0gICAgZmlsZVZpZGVvQ2FwdHVyZXIuaW5pdGlhbGl6ZShudWxsLCBudWxsLCBj
YXB0dXJlck9ic2VydmVyKTsKLSAgICBmaWxlVmlkZW9DYXB0dXJlci5zdGFydENhcHR1cmUoRlJB
TUVfV0lEVEgsIEZSQU1FX0hFSUdIVCwgMzMpOwotCi0gICAgZmluYWwgU3RyaW5nW10gZXhwZWN0
ZWRGcmFtZXMgPSB7Ci0gICAgICAgICJUSElTIElTIEpVU1QgU09NRSBURVhUIHgiLCAiVEhFIFNF
Q09ORCBGUkFNRSBxd2VydHkuIiwgIkhFUkUgSVMgVEhFIFRIUklEIEZSQU1FISJ9OwotCi0gICAg
ZmluYWwgQXJyYXlMaXN0PEZyYW1lPiBmcmFtZURhdGFzOwotICAgIGZyYW1lRGF0YXMgPSBjYXB0
dXJlck9ic2VydmVyLmdldE1pbmltdW1GcmFtZXNCbG9ja2luZyhleHBlY3RlZEZyYW1lcy5sZW5n
dGgpOwotCi0gICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRnJhbWVzLmxlbmd0aCwgZnJhbWVEYXRh
cy5zaXplKCkpOwotCi0gICAgZmlsZVZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBm
aWxlVmlkZW9DYXB0dXJlci5kaXNwb3NlKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4
cGVjdGVkRnJhbWVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICBGcmFtZSBmcmFtZSA9IGZyYW1lRGF0
YXMuZ2V0KGkpOwotCi0gICAgICBhc3NlcnRFcXVhbHMoRlJBTUVfV0lEVEgsIGZyYW1lLndpZHRo
KTsKLSAgICAgIGFzc2VydEVxdWFscyhGUkFNRV9IRUlHSFQsIGZyYW1lLmhlaWdodCk7Ci0gICAg
ICBhc3NlcnRFcXVhbHMoRlJBTUVfV0lEVEggKiBGUkFNRV9IRUlHSFQgKiAzIC8gMiwgZnJhbWUu
ZGF0YS5sZW5ndGgpOwotCi0gICAgICBieXRlW10gZXhwZWN0ZWROVjEyQnl0ZXMgPSBuZXcgYnl0
ZVtmcmFtZS5kYXRhLmxlbmd0aF07Ci0gICAgICBGaWxlVmlkZW9DYXB0dXJlci5uYXRpdmVJNDIw
VG9OVjIxKGV4cGVjdGVkRnJhbWVzW2ldLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVNfQVND
SUkpLAotICAgICAgICAgIEZSQU1FX1dJRFRILCBGUkFNRV9IRUlHSFQsIGV4cGVjdGVkTlYxMkJ5
dGVzKTsKLQotICAgICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGV4cGVjdGVkTlYxMkJ5dGVz
LCBmcmFtZS5kYXRhKSk7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy90ZXN0L1BlZXJDb25uZWN0aW9uQ2xpZW50VGVzdC5qYXZhCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvUGVlckNvbm5lY3Rpb25DbGll
bnRUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3Qv
YXBwcnRjL3Rlc3QvUGVlckNvbm5lY3Rpb25DbGllbnRUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSw2NzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2pl
Y3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3Bv
dC5hcHBydGMudGVzdDsKLQotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVENDbGllbnQu
U2lnbmFsaW5nUGFyYW1ldGVyczsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNvbm5l
Y3Rpb25DbGllbnQ7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25uZWN0aW9uQ2xp
ZW50LlBlZXJDb25uZWN0aW9uRXZlbnRzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVy
Q29ubmVjdGlvbkNsaWVudC5QZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0KLWltcG9ydCBhbmRy
b2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQudGVzdC5GbGFreVRlc3Q7Ci1pbXBvcnQgYW5k
cm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5z
dWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxv
ZzsKLQotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhMUVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5DYW1lcmEyRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0
b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5FZ2xCYXNlOwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2Fu
ZGlkYXRlOwotaW1wb3J0IG9yZy53ZWJydGMuTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcjsKLWltcG9y
dCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5l
Y3Rpb25GYWN0b3J5OwotaW1wb3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotaW1w
b3J0IG9yZy53ZWJydGMuU3RhdHNSZXBvcnQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0NhcHR1
cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlcjsKLQotaW1wb3J0IGphdmEudXRp
bC5MaW5rZWRMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5j
b25jdXJyZW50LkNvdW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4
ZWN1dG9yU2VydmljZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1p
bXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLXB1YmxpYyBjbGFzcyBQZWVy
Q29ubmVjdGlvbkNsaWVudFRlc3QKLSAgICBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNl
IGltcGxlbWVudHMgUGVlckNvbm5lY3Rpb25FdmVudHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIlJUQ0NsaWVudFRlc3QiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1FT1VUID0gMTAwMDA7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBXQUlUX1RJTUVPVVQgPSA3MDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgQ0FNRVJBX1NXSVRDSF9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBWSURFT19SRVNUQVJUX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IENBUFRVUkVfRk9STUFUX0NIQU5HRV9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBWSURFT19SRVNUQVJUX1RJTUVPVVQgPSA1MDA7Ci0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIGludCBFWFBFQ1RFRF9WSURFT19GUkFNRVMgPSAxMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nIFZJREVPX0NPREVDX1ZQOCA9ICJWUDgiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVklERU9fQ09ERUNfVlA5ID0gIlZQOSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBWSURFT19DT0RFQ19IMjY0ID0gIkgyNjQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgQVVESU9fUlVOX1RJTUVPVVQgPSAxMDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgTE9DQUxfUkVOREVSRVJfTkFNRSA9ICJMb2NhbCByZW5kZXJlciI7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBSRU1PVEVfUkVOREVSRVJfTkFNRSA9ICJSZW1vdGUgcmVuZGVy
ZXIiOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVklERU9fRlBTID0gMzA7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSURUSF9WR0EgPSA2NDA7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBIRUlHSFRfVkdBID0gNDgwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgV0lEVEhfUVZHQSA9IDMyMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFSUdIVF9R
VkdBID0gMjQwOwotCi0gIC8vIFRoZSBwZWVyIGNvbm5lY3Rpb24gY2xpZW50IGlzIGFzc3VtZWQg
dG8gYmUgdGhyZWFkIHNhZmUgaW4gaXRzZWxmOyB0aGUKLSAgLy8gcmVmZXJlbmNlIGlzIHdyaXR0
ZW4gYnkgdGhlIHRlc3QgdGhyZWFkIGFuZCByZWFkIGJ5IHdvcmtlciB0aHJlYWRzLgotICBwcml2
YXRlIHZvbGF0aWxlIFBlZXJDb25uZWN0aW9uQ2xpZW50IHBjQ2xpZW50OwotICBwcml2YXRlIHZv
bGF0aWxlIGJvb2xlYW4gbG9vcGJhY2s7Ci0KLSAgLy8gRUdMIGNvbnRleHQgdGhhdCBjYW4gYmUg
dXNlZCBieSBoYXJkd2FyZSB2aWRlbyBkZWNvZGVycyB0byBkZWNvZGUgdG8gYSB0ZXh0dXJlLgot
ICBwcml2YXRlIEVnbEJhc2UgZWdsQmFzZTsKLQotICAvLyBUaGVzZSBhcmUgcHJvdGVjdGVkIGJ5
IHRoZWlyIHJlc3BlY3RpdmUgZXZlbnQgb2JqZWN0cy4KLSAgcHJpdmF0ZSBFeGVjdXRvclNlcnZp
Y2Ugc2lnbmFsaW5nRXhlY3V0b3I7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZDsKLSAgcHJp
dmF0ZSBib29sZWFuIGlzSWNlQ29ubmVjdGVkOwotICBwcml2YXRlIFNlc3Npb25EZXNjcmlwdGlv
biBsb2NhbFNkcDsKLSAgcHJpdmF0ZSBMaXN0PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRlcyA9
IG5ldyBMaW5rZWRMaXN0PEljZUNhbmRpZGF0ZT4oKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3Qg
bG9jYWxTZHBFdmVudCA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgaWNl
Q2FuZGlkYXRlRXZlbnQgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGlj
ZUNvbm5lY3RlZEV2ZW50ID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBj
bG9zZUV2ZW50ID0gbmV3IE9iamVjdCgpOwotCi0gIC8vIE1vY2sgcmVuZGVyZXIgaW1wbGVtZW50
YXRpb24uCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tSZW5kZXJlciBpbXBsZW1lbnRzIFZp
ZGVvUmVuZGVyZXIuQ2FsbGJhY2tzIHsKLSAgICAvLyBUaGVzZSBhcmUgcHJvdGVjdGVkIGJ5ICd0
aGlzJyBzaW5jZSB3ZSBnZXRzIGNhbGxlZCBmcm9tIHdvcmtlciB0aHJlYWRzLgotICAgIHByaXZh
dGUgU3RyaW5nIHJlbmRlcmVyTmFtZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gcmVuZGVyRnJhbWVD
YWxsZWQgPSBmYWxzZTsKLQotICAgIC8vIFRocmVhZC1zYWZlIGluIGl0c2VsZi4KLSAgICBwcml2
YXRlIENvdW50RG93bkxhdGNoIGRvbmVSZW5kZXJpbmc7Ci0KLSAgICBwdWJsaWMgTW9ja1JlbmRl
cmVyKGludCBleHBlY3RlZEZyYW1lcywgU3RyaW5nIHJlbmRlcmVyTmFtZSkgewotICAgICAgdGhp
cy5yZW5kZXJlck5hbWUgPSByZW5kZXJlck5hbWU7Ci0gICAgICByZXNldChleHBlY3RlZEZyYW1l
cyk7Ci0gICAgfQotCi0gICAgLy8gUmVzZXRzIHJlbmRlciB0byB3YWl0IGZvciBuZXcgYW1vdW50
IG9mIHZpZGVvIGZyYW1lcy4KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoaW50
IGV4cGVjdGVkRnJhbWVzKSB7Ci0gICAgICByZW5kZXJGcmFtZUNhbGxlZCA9IGZhbHNlOwotICAg
ICAgZG9uZVJlbmRlcmluZyA9IG5ldyBDb3VudERvd25MYXRjaChleHBlY3RlZEZyYW1lcyk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlbmRl
ckZyYW1lKFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgICBpZiAoIXJlbmRl
ckZyYW1lQ2FsbGVkKSB7Ci0gICAgICAgIGlmIChyZW5kZXJlck5hbWUgIT0gbnVsbCkgewotICAg
ICAgICAgIExvZy5kKFRBRywgcmVuZGVyZXJOYW1lICsgIiByZW5kZXIgZnJhbWU6ICIgKyBmcmFt
ZS5yb3RhdGVkV2lkdGgoKSArICIgeCAiCi0gICAgICAgICAgICAgICAgICArIGZyYW1lLnJvdGF0
ZWRIZWlnaHQoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiUmVu
ZGVyIGZyYW1lOiAiICsgZnJhbWUucm90YXRlZFdpZHRoKCkgKyAiIHggIiArIGZyYW1lLnJvdGF0
ZWRIZWlnaHQoKSk7Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJlbmRlckZyYW1lQ2FsbGVk
ID0gdHJ1ZTsKLSAgICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAg
ICAgIGRvbmVSZW5kZXJpbmcuY291bnREb3duKCk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkbid0IGhvbGQgYW55IGxvY2tzIG9yIHRvdWNoIG1lbWJlciB2YXJpYWJsZXMgc2lu
Y2UgaXQKLSAgICAvLyBibG9ja3MuCi0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvckZyYW1lc1Jl
bmRlcmVkKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
ICBkb25lUmVuZGVyaW5nLmF3YWl0KHRpbWVvdXRNcywgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsK
LSAgICAgIHJldHVybiAoZG9uZVJlbmRlcmluZy5nZXRDb3VudCgpIDw9IDApOwotICAgIH0KLSAg
fQotCi0gIC8vIFBlZXIgY29ubmVjdGlvbiBldmVudHMgaW1wbGVtZW50YXRpb24uCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCBvbkxvY2FsRGVzY3JpcHRpb24oU2Vzc2lvbkRlc2NyaXB0aW9u
IHNkcCkgewotICAgIExvZy5kKFRBRywgIkxvY2FsU0RQIHR5cGU6ICIgKyBzZHAudHlwZSk7Ci0g
ICAgc3luY2hyb25pemVkIChsb2NhbFNkcEV2ZW50KSB7Ci0gICAgICBsb2NhbFNkcCA9IHNkcDsK
LSAgICAgIGxvY2FsU2RwRXZlbnQubm90aWZ5QWxsKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5k
aWRhdGUpIHsKLSAgICBzeW5jaHJvbml6ZWQgKGljZUNhbmRpZGF0ZUV2ZW50KSB7Ci0gICAgICBM
b2cuZChUQUcsICJJY2VDYW5kaWRhdGUgIyIgKyBpY2VDYW5kaWRhdGVzLnNpemUoKSArICIgOiAi
ICsgY2FuZGlkYXRlLnRvU3RyaW5nKCkpOwotICAgICAgaWYgKGxvb3BiYWNrKSB7Ci0gICAgICAg
IC8vIExvb3BiYWNrIGxvY2FsIElDRSBjYW5kaWRhdGUgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgdG8g
YXZvaWQgYWRkaW5nCi0gICAgICAgIC8vIHJlbW90ZSBJQ0UgY2FuZGlkYXRlIGluIGEgbG9jYWwg
SUNFIGNhbmRpZGF0ZSBjYWxsYmFjay4KLSAgICAgICAgc2lnbmFsaW5nRXhlY3V0b3IuZXhlY3V0
ZShuZXcgUnVubmFibGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGlj
IHZvaWQgcnVuKCkgewotICAgICAgICAgICAgcGNDbGllbnQuYWRkUmVtb3RlSWNlQ2FuZGlkYXRl
KGNhbmRpZGF0ZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICAgIGlj
ZUNhbmRpZGF0ZXMuYWRkKGNhbmRpZGF0ZSk7Ci0gICAgICBpY2VDYW5kaWRhdGVFdmVudC5ub3Rp
ZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VD
YW5kaWRhdGVzUmVtb3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAg
Ly8gVE9ETyhob25naGFpeik6IEFkZCB0aGlzIGZvciB0ZXN0cy4KLSAgfQotCi0gIEBPdmVycmlk
ZQotICBwdWJsaWMgdm9pZCBvbkljZUNvbm5lY3RlZCgpIHsKLSAgICBMb2cuZChUQUcsICJJQ0Ug
Q29ubmVjdGVkIik7Ci0gICAgc3luY2hyb25pemVkIChpY2VDb25uZWN0ZWRFdmVudCkgewotICAg
ICAgaXNJY2VDb25uZWN0ZWQgPSB0cnVlOwotICAgICAgaWNlQ29ubmVjdGVkRXZlbnQubm90aWZ5
QWxsKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlRGlz
Y29ubmVjdGVkKCkgewotICAgIExvZy5kKFRBRywgIklDRSBEaXNjb25uZWN0ZWQiKTsKLSAgICBz
eW5jaHJvbml6ZWQgKGljZUNvbm5lY3RlZEV2ZW50KSB7Ci0gICAgICBpc0ljZUNvbm5lY3RlZCA9
IGZhbHNlOwotICAgICAgaWNlQ29ubmVjdGVkRXZlbnQubm90aWZ5QWxsKCk7Ci0gICAgfQotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rpb25DbG9zZWQoKSB7
Ci0gICAgTG9nLmQoVEFHLCAiUGVlckNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgc3luY2hyb25p
emVkIChjbG9zZUV2ZW50KSB7Ci0gICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICBjbG9zZUV2
ZW50Lm5vdGlmeUFsbCgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBvblBlZXJDb25uZWN0aW9uRXJyb3IoU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgZmFpbCgi
UEMgRXJyb3I6ICIgKyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGlj
IHZvaWQgb25QZWVyQ29ubmVjdGlvblN0YXRzUmVhZHkoU3RhdHNSZXBvcnRbXSByZXBvcnRzKSB7
fQotCi0gIC8vIEhlbHBlciB3YWl0IGZ1bmN0aW9ucy4KLSAgcHJpdmF0ZSBib29sZWFuIHdhaXRG
b3JMb2NhbFNEUChpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIHN5bmNocm9uaXplZCAobG9jYWxTZHBFdmVudCkgewotICAgICAgaWYgKGxvY2FsU2RwID09
IG51bGwpIHsKLSAgICAgICAgbG9jYWxTZHBFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gKGxvY2FsU2RwICE9IG51bGwpOwotICAgIH0KLSAgfQotCi0gIHByaXZh
dGUgYm9vbGVhbiB3YWl0Rm9ySWNlQ2FuZGlkYXRlcyhpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIHN5bmNocm9uaXplZCAoaWNlQ2FuZGlkYXRlRXZlbnQp
IHsKLSAgICAgIGlmIChpY2VDYW5kaWRhdGVzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIGljZUNh
bmRpZGF0ZUV2ZW50LndhaXQodGltZW91dE1zKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAoaWNl
Q2FuZGlkYXRlcy5zaXplKCkgPiAwKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4g
d2FpdEZvckljZUNvbm5lY3RlZChpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIHN5bmNocm9uaXplZCAoaWNlQ29ubmVjdGVkRXZlbnQpIHsKLSAgICAgIGlm
ICghaXNJY2VDb25uZWN0ZWQpIHsKLSAgICAgICAgaWNlQ29ubmVjdGVkRXZlbnQud2FpdCh0aW1l
b3V0TXMpOwotICAgICAgfQotICAgICAgaWYgKCFpc0ljZUNvbm5lY3RlZCkgewotICAgICAgICBM
b2cuZShUQUcsICJJQ0UgY29ubmVjdGlvbiBmYWlsdXJlIik7Ci0gICAgICB9Ci0KLSAgICAgIHJl
dHVybiBpc0ljZUNvbm5lY3RlZDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gd2Fp
dEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgc3luY2hyb25pemVkIChjbG9zZUV2ZW50KSB7Ci0gICAgICBpZiAo
IWlzQ2xvc2VkKSB7Ci0gICAgICAgIGNsb3NlRXZlbnQud2FpdCh0aW1lb3V0TXMpOwotICAgICAg
fQotICAgICAgcmV0dXJuIGlzQ2xvc2VkOwotICAgIH0KLSAgfQotCi0gIFBlZXJDb25uZWN0aW9u
Q2xpZW50IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KE1vY2tSZW5kZXJlciBsb2NhbFJlbmRl
cmVyLAotICAgICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyLCBQZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLAotICAgICAgVmlkZW9DYXB0dXJlciB2
aWRlb0NhcHR1cmVyLCBFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCkgewotICAgIExpc3Q8UGVl
ckNvbm5lY3Rpb24uSWNlU2VydmVyPiBpY2VTZXJ2ZXJzID0gbmV3IExpbmtlZExpc3Q8UGVlckNv
bm5lY3Rpb24uSWNlU2VydmVyPigpOwotICAgIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5n
UGFyYW1ldGVycyA9Ci0gICAgICAgIG5ldyBTaWduYWxpbmdQYXJhbWV0ZXJzKGljZVNlcnZlcnMs
IHRydWUsIC8vIGljZVNlcnZlcnMsIGluaXRpYXRvci4KLSAgICAgICAgICAgIG51bGwsIG51bGws
IG51bGwsIC8vIGNsaWVudElkLCB3c3NVcmwsIHdzc1Bvc3RVcmwuCi0gICAgICAgICAgICBudWxs
LCBudWxsKTsgLy8gb2ZmZXJTZHAsIGljZUNhbmRpZGF0ZXMuCi0KLSAgICBQZWVyQ29ubmVjdGlv
bkNsaWVudCBjbGllbnQgPSBQZWVyQ29ubmVjdGlvbkNsaWVudC5nZXRJbnN0YW5jZSgpOwotICAg
IFBlZXJDb25uZWN0aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rp
b25GYWN0b3J5Lk9wdGlvbnMoKTsKLSAgICBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrID0gMDsK
LSAgICBvcHRpb25zLmRpc2FibGVOZXR3b3JrTW9uaXRvciA9IHRydWU7Ci0gICAgY2xpZW50LnNl
dFBlZXJDb25uZWN0aW9uRmFjdG9yeU9wdGlvbnMob3B0aW9ucyk7Ci0gICAgY2xpZW50LmNyZWF0
ZVBlZXJDb25uZWN0aW9uRmFjdG9yeSgKLSAgICAgICAgZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0
VGFyZ2V0Q29udGV4dCgpLCBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMsIHRoaXMpOwotICAgIGNs
aWVudC5jcmVhdGVQZWVyQ29ubmVjdGlvbigKLSAgICAgICAgZWdsQ29udGV4dCwgbG9jYWxSZW5k
ZXJlciwgcmVtb3RlUmVuZGVyZXIsIHZpZGVvQ2FwdHVyZXIsIHNpZ25hbGluZ1BhcmFtZXRlcnMp
OwotICAgIGNsaWVudC5jcmVhdGVPZmZlcigpOwotICAgIHJldHVybiBjbGllbnQ7Ci0gIH0KLQot
ICBwcml2YXRlIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBjcmVhdGVQYXJhbWV0ZXJzRm9yQXVk
aW9DYWxsKCkgewotICAgIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwZWVyQ29ubmVjdGlvblBh
cmFtZXRlcnMgPQotICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzKGZhbHNlLCAv
KiB2aWRlb0NhbGxFbmFibGVkICovCi0gICAgICAgICAgICB0cnVlLCAvKiBsb29wYmFjayAqLwot
ICAgICAgICAgICAgZmFsc2UsIC8qIHRyYWNpbmcgKi8KLSAgICAgICAgICAgIC8vIFZpZGVvIGNv
ZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAwLCAvKiB2aWRlb1dpZHRoICovCi0gICAgICAg
ICAgICAwLCAvKiB2aWRlb0hlaWdodCAqLwotICAgICAgICAgICAgMCwgLyogdmlkZW9GcHMgKi8K
LSAgICAgICAgICAgIDAsIC8qIHZpZGVvU3RhcnRCaXRyYXRlICovCi0gICAgICAgICAgICAiIiwg
LyogdmlkZW9Db2RlYyAqLwotICAgICAgICAgICAgdHJ1ZSwgLyogdmlkZW9Db2RlY0h3QWNjZWxl
cmF0aW9uICovCi0gICAgICAgICAgICAvLyBBdWRpbyBjb2RlYyBwYXJhbWV0ZXJzLgotICAgICAg
ICAgICAgMCwgLyogYXVkaW9TdGFydEJpdHJhdGUgKi8KLSAgICAgICAgICAgICJPUFVTIiwgLyog
YXVkaW9Db2RlYyAqLwotICAgICAgICAgICAgZmFsc2UsIC8qIG5vQXVkaW9Qcm9jZXNzaW5nICov
Ci0gICAgICAgICAgICBmYWxzZSwgLyogYWVjRHVtcCAqLwotICAgICAgICAgICAgZmFsc2UgLyog
dXNlT3BlblNMRVMgKi8sIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluQUVDICovLCBmYWxzZSAvKiBk
aXNhYmxlQnVpbHRJbkFHQyAqLywKLSAgICAgICAgICAgIGZhbHNlIC8qIGRpc2FibGVCdWlsdElu
TlMgKi8sIGZhbHNlIC8qIGVuYWJsZUxldmVsQ29udHJvbCAqLyk7Ci0KLSAgICByZXR1cm4gcGVl
ckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb0NhcHR1cmVyIGNy
ZWF0ZUNhbWVyYUNhcHR1cmVyKGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSkgewotICAgIGZpbmFs
IGJvb2xlYW4gdXNlQ2FtZXJhMiA9Ci0gICAgICAgIGNhcHR1cmVUb1RleHR1cmUgJiYgQ2FtZXJh
MkVudW1lcmF0b3IuaXNTdXBwb3J0ZWQoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29u
dGV4dCgpKTsKLQotICAgIENhbWVyYUVudW1lcmF0b3IgZW51bWVyYXRvcjsKLSAgICBpZiAodXNl
Q2FtZXJhMikgewotICAgICAgZW51bWVyYXRvciA9IG5ldyBDYW1lcmEyRW51bWVyYXRvcihnZXRJ
bnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGNhcHR1cmVUb1RleHR1cmUpOwot
ICAgIH0KLSAgICBTdHJpbmcgZGV2aWNlTmFtZSA9IGVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMo
KVswXTsKLSAgICByZXR1cm4gZW51bWVyYXRvci5jcmVhdGVDYXB0dXJlcihkZXZpY2VOYW1lLCBu
dWxsKTsKLSAgfQotCi0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNyZWF0ZVBh
cmFtZXRlcnNGb3JWaWRlb0NhbGwoU3RyaW5nIHZpZGVvQ29kZWMpIHsKLSAgICBQZWVyQ29ubmVj
dGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzID0KLSAgICAgICAgbmV3IFBl
ZXJDb25uZWN0aW9uUGFyYW1ldGVycyh0cnVlLCAvKiB2aWRlb0NhbGxFbmFibGVkICovCi0gICAg
ICAgICAgICB0cnVlLCAvKiBsb29wYmFjayAqLwotICAgICAgICAgICAgZmFsc2UsIC8qIHRyYWNp
bmcgKi8KLSAgICAgICAgICAgIC8vIFZpZGVvIGNvZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAg
ICAwLCAvKiB2aWRlb1dpZHRoICovCi0gICAgICAgICAgICAwLCAvKiB2aWRlb0hlaWdodCAqLwot
ICAgICAgICAgICAgMCwgLyogdmlkZW9GcHMgKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvU3Rh
cnRCaXRyYXRlICovCi0gICAgICAgICAgICB2aWRlb0NvZGVjLCAvKiB2aWRlb0NvZGVjICovCi0g
ICAgICAgICAgICB0cnVlLCAvKiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24gKi8KLSAgICAgICAg
ICAgIC8vIEF1ZGlvIGNvZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAwLCAvKiBhdWRpb1N0
YXJ0Qml0cmF0ZSAqLwotICAgICAgICAgICAgIk9QVVMiLCAvKiBhdWRpb0NvZGVjICovCi0gICAg
ICAgICAgICBmYWxzZSwgLyogbm9BdWRpb1Byb2Nlc3NpbmcgKi8KLSAgICAgICAgICAgIGZhbHNl
LCAvKiBhZWNEdW1wICovCi0gICAgICAgICAgICBmYWxzZSAvKiB1c2VPcGVuU0xFUyAqLywgZmFs
c2UgLyogZGlzYWJsZUJ1aWx0SW5BRUMgKi8sIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluQUdDICov
LAotICAgICAgICAgICAgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5OUyAqLywgZmFsc2UgLyogZW5h
YmxlTGV2ZWxDb250cm9sICovKTsKLQotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvblBhcmFtZXRl
cnM7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgc2ln
bmFsaW5nRXhlY3V0b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkRXhlY3V0b3IoKTsKLSAg
ICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlf
QkVBTl9NUjEpIHsKLSAgICAgIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZSgpOwotICAgIH0KLSAg
fQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBzaWduYWxp
bmdFeGVjdXRvci5zaHV0ZG93bigpOwotICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAg
IGVnbEJhc2UucmVsZWFzZSgpOwotICAgIH0KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFNldExvY2FsT2ZmZXJNYWtlc1ZpZGVvRmxvd0xvY2FsbHkoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExvZy5kKFRBRywgInRlc3RTZXRMb2NhbE9mZmVyTWFr
ZXNWaWRlb0Zsb3dMb2NhbGx5Iik7Ci0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBu
ZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFN
RSk7Ci0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2NhbFJlbmRl
cmVyLCBuZXcgTW9ja1JlbmRlcmVyKDAsIG51bGwpLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJz
Rm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1
cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQg
Zm9yIGxvY2FsIFNEUCBhbmQgaWNlIGNhbmRpZGF0ZXMgc2V0IGV2ZW50cy4KLSAgICBhc3NlcnRU
cnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9V
VCkpOwotICAgIGFzc2VydFRydWUoIklDRSBjYW5kaWRhdGVzIHdlcmUgbm90IGdlbmVyYXRlZC4i
LCB3YWl0Rm9ySWNlQ2FuZGlkYXRlcyhXQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIENoZWNrIHRo
YXQgbG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgcmVuZGVyZWQuCi0gICAgYXNzZXJ0VHJ1ZSgKLSAg
ICAgICAgIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZC4iLCBsb2NhbFJlbmRl
cmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLQotICAgIHBjQ2xpZW50
LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgIlBlZXJDb25uZWN0aW9uIGNsb3Nl
IGV2ZW50IHdhcyBub3QgcmVjZWl2ZWQuIiwgd2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdB
SVRfVElNRU9VVCkpOwotICAgIExvZy5kKFRBRywgInRlc3RTZXRMb2NhbE9mZmVyTWFrZXNWaWRl
b0Zsb3dMb2NhbGx5IERvbmUuIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZG9Mb29wYmFja1Rl
c3QoUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIFZpZGVvQ2FwdHVyZXIgdmlk
ZW9DYXB0dXJlciwKLSAgICAgIGJvb2xlYW4gZGVjb2RlVG9UZXh0dXJlKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLSAgICBNb2NrUmVuZGVyZXIg
bG9jYWxSZW5kZXJlciA9IG51bGw7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyID0g
bnVsbDsKLSAgICBpZiAocGFyYW1ldGVycy52aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICBMb2cu
ZChUQUcsICJ0ZXN0TG9vcGJhY2sgZm9yIHZpZGVvICIgKyBwYXJhbWV0ZXJzLnZpZGVvQ29kZWMp
OwotICAgICAgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9f
RlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICAgIHJlbW90ZVJlbmRlcmVyID0gbmV3
IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9SRU5ERVJFUl9OQU1F
KTsKLSAgICB9IGVsc2UgewotICAgICAgTG9nLmQoVEFHLCAidGVzdExvb3BiYWNrIGZvciBhdWRp
by4iKTsKLSAgICB9Ci0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChs
b2NhbFJlbmRlcmVyLCByZW1vdGVSZW5kZXJlciwgcGFyYW1ldGVycywgdmlkZW9DYXB0dXJlciwK
LSAgICAgICAgZGVjb2RlVG9UZXh0dXJlID8gZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpIDog
bnVsbCk7Ci0KLSAgICAvLyBXYWl0IGZvciBsb2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIg
YW5kIHNldCBhcyByZW1vdGUgU0RQLgotICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90
IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7Ci0gICAgU2Vzc2lvbkRlc2Ny
aXB0aW9uIHJlbW90ZVNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Np
b25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAu
ZGVzY3JpcHRpb24pOwotICAgIHBjQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNk
cCk7Ci0KLSAgICAvLyBXYWl0IGZvciBJQ0UgY29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJ
Q0UgY29ubmVjdGlvbiBmYWlsdXJlLiIsIHdhaXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJ
T05fV0FJVF9USU1FT1VUKSk7Ci0KLSAgICBpZiAocGFyYW1ldGVycy52aWRlb0NhbGxFbmFibGVk
KSB7Ci0gICAgICAvLyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdl
cmUgcmVuZGVyZWQuCi0gICAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBu
b3QgcmVuZGVyZWQuIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5k
ZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBmcmFt
ZXMgd2VyZSBub3QgcmVuZGVyZWQuIiwKLSAgICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9y
RnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEZv
ciBhdWRpbyBqdXN0IHNsZWVwIGZvciAxIHNlYy4KLSAgICAgIC8vIFRPRE8oZ2xhem5ldik6IGNo
ZWNrIGhvdyB3ZSBjYW4gZGV0ZWN0IHRoYXQgcmVtb3RlIGF1ZGlvIHdhcyByZW5kZXJlZC4KLSAg
ICAgIFRocmVhZC5zbGVlcChBVURJT19SVU5fVElNRU9VVCk7Ci0gICAgfQotCi0gICAgcGNDbGll
bnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChX
QUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0TG9vcGJhY2sgZG9uZS4iKTsKLSAg
fQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrQXVkaW8oKSB0aHJv
d3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFt
ZXRlcnNGb3JBdWRpb0NhbGwoKSwgbnVsbCwgZmFsc2UgLyogZGVjb2RlVG9UZXh0dXJlICovKTsK
LSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA4KCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJh
bWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVy
YUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBmYWxzZSAvKiBkZWNvZGVU
b1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9v
cGJhY2tWcDkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGRvTG9vcGJhY2tU
ZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA5KSwKLSAgICAg
ICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIGZh
bHNlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RMb29wYmFja0gyNjQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewot
ICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09E
RUNfSDI2NCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVU
b1RleHR1cmUgKi8pLCBmYWxzZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNt
YWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDhEZWNvZGVUb1RleHR1cmUoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19J
TlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRGVj
b2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVzIFNESyB2ZXJzaW9uIDE5
LiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJh
bWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVy
YUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCB0cnVlIC8qIGRlY29kZVRv
VGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29w
YmFja1ZwOURlY29kZVRvVGV4dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0g
ICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FU
KSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRl
ZCwgcmVxdWlyZXMgU0RLIHZlcnNpb24gMTkuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNf
VlA5KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4
dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRl
c3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrSDI2NERlY29kZVRvVGV4dHVyZSgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8
IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNvZGUg
dG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZCwgcmVxdWlyZXMgU0RLIHZlcnNpb24gMTkuIik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRl
cnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfSDI2NCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNh
cHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCB0cnVlIC8qIGRlY29kZVRvVGV4
dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFj
a1ZwOENhcHR1cmVUb1RleHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkg
ewotICAgICAgTG9nLmkoVEFHLCAiRW5jb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQu
IFJlcXVpcmVzIFNESyB2ZXJzaW9uIDE5Iik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8v
IFRPRE8ocGVya2opOiBJZiB3ZSBjYW4gYWx3YXlzIGNhcHR1cmUgdG8gdGV4dHVyZXMsIHRoZXJl
IGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlCi0gICAgLy8gaGFyZHdhcmUgZW5jb2RlciBzdXBw
b3J0cyB0byBlbmNvZGUgZnJvbSBhIHRleHR1cmUuCi0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9F
bmNvZGVyLmlzVnA4SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5pKFRB
RywgIlZQOCBlbmNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4iKTsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVv
Q2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcih0cnVl
IC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCB0cnVlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0g
IH0KLQotICAvLyBUZXN0IHRoYXQgYSBjYWxsIGNhbiBiZSBzZXR1cCBldmVuIGlmIHRoZSBFR0wg
Y29udGV4dCB1c2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiBpcwotICAvLyByZWxlYXNlZCBiZWZv
cmUgdGhlIFZpZGVvIGNvZGVjcyBhcmUgY3JlYXRlZC4gVGhlIEhXIGVuY29kZXIgYW5kIGRlY29k
ZXIgaXMgc2V0dXAgdG8gdXNlCi0gIC8vIHRleHR1cmVzLgotICBAU21hbGxUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RMb29wYmFja0VnbENvbnRleHRSZWxlYXNlZEFmdGVyQ3JlYXRpbmdQYygpIHRo
cm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lO
VCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNv
ZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gUmVxdWlyZXMgU0RLIHZlcnNpb24gMTki
KTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb29wYmFjayA9IHRydWU7Ci0gICAgUGVl
ckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlk
ZW9DYWxsKFZJREVPX0NPREVDX1ZQOCk7Ci0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIg
PSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJf
TkFNRSk7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJl
cihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9SRU5ERVJFUl9OQU1FKTsKLSAgICBwY0Ns
aWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIsIHJlbW90ZVJl
bmRlcmVyLCBwYXJhbWV0ZXJzLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcih0cnVlIC8q
IGNhcHR1cmVUb1RleHR1cmUgKi8pLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotCi0g
ICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQgYXMg
cmVtb3RlIFNEUC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwgd2Fp
dEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgRUdMIGNv
bnRleHQgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIFBlZXJDb25uZWN0aW9uQ2xpZW50LgotICAgIC8v
IFNpbmNlIGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50IGlzIGFzeW5jaHJvbm91cywgd2UgbXVz
dCB3YWl0IGZvciB0aGUgbG9jYWwKLSAgICAvLyBTZXNzaW9uRGVzY3JpcHRpb24uCi0gICAgZWds
QmFzZS5yZWxlYXNlKCk7Ci0gICAgZWdsQmFzZSA9IG51bGw7Ci0KLSAgICBTZXNzaW9uRGVzY3Jp
cHRpb24gcmVtb3RlU2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lv
bkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5k
ZXNjcmlwdGlvbik7Ci0gICAgcGNDbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2Rw
KTsKLQotICAgIC8vIFdhaXQgZm9yIElDRSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklD
RSBjb25uZWN0aW9uIGZhaWx1cmUuIiwgd2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElP
Tl9XQUlUX1RJTUVPVVQpKTsKLSAgICAvLyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlk
ZW8gZnJhbWVzIHdlcmUgcmVuZGVyZWQuCi0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgIkxvY2Fs
IHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZC4iLCBsb2NhbFJlbmRlcmVyLndhaXRGb3JG
cmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlk
ZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkLiIsCi0gICAgICAgIHJlbW90ZVJlbmRlcmVyLndh
aXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLQotICAgIHBjQ2xpZW50LmNsb3Nl
KCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1F
T1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVzdExvb3BiYWNrIGRvbmUuIik7Ci0gIH0KLQotICBA
U21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja0gyNjRDYXB0dXJlVG9UZXh0dXJl
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5T
REtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywg
IkVuY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiBSZXF1aXJlcyBLSVRLQVQiKTsK
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVE9ETyhwZXJraik6IElmIHdlIGNhbiBhbHdh
eXMgY2FwdHVyZSB0byB0ZXh0dXJlcywgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiB0aGUK
LSAgICAvLyBoYXJkd2FyZSBlbmNvZGVyIHN1cHBvcnRzIHRvIGVuY29kZSBmcm9tIGEgdGV4dHVy
ZS4KLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNIMjY0SHdTdXBwb3J0ZWRVc2lu
Z1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5pKFRBRywgIkgyNjQgZW5jb2RlIHRvIHRleHR1cmVz
IGlzIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGRvTG9vcGJh
Y2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfSDI2NCksCi0g
ICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyks
IHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiBkZWZh
dWx0IGZyb250IGNhbWVyYSBjYW4gYmUgc3dpdGNoZWQgdG8gYmFjayBjYW1lcmEgYW5kIHRoZW4K
LSAgLy8gYWdhaW4gdG8gZnJvbnQgY2FtZXJhLgotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lk
IHRlc3RDYW1lcmFTd2l0Y2goKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExv
Zy5kKFRBRywgInRlc3RDYW1lcmFTd2l0Y2giKTsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0KLSAg
ICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURf
VklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBNb2NrUmVuZGVyZXIgcmVt
b3RlUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVN
T1RFX1JFTkRFUkVSX05BTUUpOwotCi0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlv
bkNsaWVudChsb2NhbFJlbmRlcmVyLCByZW1vdGVSZW5kZXJlciwKLSAgICAgICAgY3JlYXRlUGFy
YW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1l
cmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAgICAv
LyBXYWl0IGZvciBsb2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1v
dGUgU0RQLgotICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9y
TG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90ZVNk
cCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5U
eXBlLmZyb21DYW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRpb24pOwot
ICAgIHBjQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAgICAvLyBX
YWl0IGZvciBJQ0UgY29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVjdGlvbiBm
YWlsdXJlLiIsIHdhaXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1FT1VU
KSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdl
cmUgcmVuZGVyZWQuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90
IHJlbmRlcmVkIGJlZm9yZSBjYW1lcmEgc3dpdGNoLiIsCi0gICAgICAgIGxvY2FsUmVuZGVyZXIu
d2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJl
bW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3JlIGNhbWVyYSBzd2l0Y2gu
IiwKLSAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElN
RU9VVCkpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBDQU1FUkFfU1dJVENIX0FUVEVNUFRT
OyBpKyspIHsKLSAgICAgIC8vIFRyeSB0byBzd2l0Y2ggY2FtZXJhCi0gICAgICBwY0NsaWVudC5z
d2l0Y2hDYW1lcmEoKTsKLQotICAgICAgLy8gUmVzZXQgdmlkZW8gcmVuZGVycyBhbmQgY2hlY2sg
dGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1lcwotICAgICAgLy8gd2VyZSByZW5kZXJl
ZCBhZnRlciBjYW1lcmEgc3dpdGNoLgotICAgICAgbG9jYWxSZW5kZXJlci5yZXNldChFWFBFQ1RF
RF9WSURFT19GUkFNRVMpOwotICAgICAgcmVtb3RlUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklE
RU9fRlJBTUVTKTsKLSAgICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5v
dCByZW5kZXJlZCBhZnRlciBjYW1lcmEgc3dpdGNoLiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJl
ci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVl
KCJSZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIGNhbWVyYSBzd2l0
Y2guIiwKLSAgICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJ
VF9USU1FT1VUKSk7Ci0gICAgfQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1
ZSh3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgTG9nLmQo
VEFHLCAidGVzdENhbWVyYVN3aXRjaCBkb25lLiIpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIHZp
ZGVvIHNvdXJjZSBjYW4gYmUgcmVzdGFydGVkIC0gc2ltdWxhdGUgYXBwIGdvZXMgdG8KLSAgLy8g
YmFja2dyb3VuZCBhbmQgYmFjayB0byBmb3JlZ3JvdW5kLgotICAvLyBEaXNhYmxlZCBiZWNhdXNl
IG9mIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD02
NDc4Ci0gIEBGbGFreVRlc3QKLSAgLy9AU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RWaWRl
b1NvdXJjZVJlc3RhcnQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExvZy5k
KFRBRywgInRlc3RWaWRlb1NvdXJjZVJlc3RhcnQiKTsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0K
LSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNU
RURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBNb2NrUmVuZGVyZXIg
cmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywg
UkVNT1RFX1JFTkRFUkVSX05BTUUpOwotCi0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVj
dGlvbkNsaWVudChsb2NhbFJlbmRlcmVyLCByZW1vdGVSZW5kZXJlciwKLSAgICAgICAgY3JlYXRl
UGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVD
YW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAg
ICAvLyBXYWl0IGZvciBsb2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyBy
ZW1vdGUgU0RQLgotICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0
Rm9yTG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90
ZVNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlv
bi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRpb24p
OwotICAgIHBjQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAgICAv
LyBXYWl0IGZvciBJQ0UgY29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVjdGlv
biBmYWlsdXJlLiIsIHdhaXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1F
T1VUKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVz
IHdlcmUgcmVuZGVyZWQuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUg
bm90IHJlbmRlcmVkIGJlZm9yZSB2aWRlbyByZXN0YXJ0LiIsCi0gICAgICAgIGxvY2FsUmVuZGVy
ZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUo
IlJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3JlIHZpZGVvIHJlc3Rh
cnQuIiwKLSAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRf
VElNRU9VVCkpOwotCi0gICAgLy8gU3RvcCBhbmQgdGhlbiBzdGFydCB2aWRlbyBzb3VyY2UgYSBm
ZXcgdGltZXMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWSURFT19SRVNUQVJUX0FUVEVNUFRT
OyBpKyspIHsKLSAgICAgIHBjQ2xpZW50LnN0b3BWaWRlb1NvdXJjZSgpOwotICAgICAgVGhyZWFk
LnNsZWVwKFZJREVPX1JFU1RBUlRfVElNRU9VVCk7Ci0gICAgICBwY0NsaWVudC5zdGFydFZpZGVv
U291cmNlKCk7Ci0KLSAgICAgIC8vIFJlc2V0IHZpZGVvIHJlbmRlcnMgYW5kIGNoZWNrIHRoYXQg
bG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMKLSAgICAgIC8vIHdlcmUgcmVuZGVyZWQgYWZ0
ZXIgdmlkZW8gcmVzdGFydC4KLSAgICAgIGxvY2FsUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklE
RU9fRlJBTUVTKTsKLSAgICAgIHJlbW90ZVJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZS
QU1FUyk7Ci0gICAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVu
ZGVyZWQgYWZ0ZXIgdmlkZW8gcmVzdGFydC4iLAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2Fp
dEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVt
b3RlIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciB2aWRlbyByZXN0YXJ0LiIs
Ci0gICAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElN
RU9VVCkpOwotICAgIH0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwotICAgIGFzc2VydFRydWUod2Fp
dEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkpOwotICAgIExvZy5kKFRBRywg
InRlc3RWaWRlb1NvdXJjZVJlc3RhcnQgZG9uZS4iKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiBj
YXB0dXJlIGZvcm1hdCBjYW4gYmUgY2hhbmdlZCBvbiBmbHkgYW5kIGRlY29kZXIgY2FuIGJlIHJl
c2V0IHByb3Blcmx5LgotICAvLyBEaXNhYmxlZCBiZWNhdXNlIG9mIGh0dHBzOi8vYnVncy5jaHJv
bWl1bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD02NDc4Ci0gIEBGbGFreVRlc3QKLSAg
Ly9AU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYXB0dXJlRm9ybWF0Q2hhbmdlKCkgdGhy
b3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBMb2cuZChUQUcsICJ0ZXN0Q2FwdHVyZUZv
cm1hdENoYW5nZSIpOwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAgIE1vY2tSZW5kZXJlciBs
b2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExP
Q0FMX1JFTkRFUkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9IG5l
dyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJfTkFN
RSk7Ci0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVu
ZGVyZXIsIHJlbW90ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9D
YWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNl
IC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQgZm9yIGxvY2Fs
IFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBTRFAuCi0gICAgYXNz
ZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlUX1RJ
TUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2RwID0gbmV3IFNlc3Npb25E
ZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNh
bEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0gICAgcGNDbGllbnQuc2V0
UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdhaXQgZm9yIElDRSBjb25u
ZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZhaWx1cmUuIiwgd2FpdEZv
ckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIENo
ZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4KLSAg
ICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3Jl
IGNhbWVyYSByZXNvbHV0aW9uIGNoYW5nZS4iLAotICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRG
b3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRUcnVlKCJSZW1vdGUg
dmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJlZm9yZSBjYW1lcmEgcmVzb2x1dGlvbiBj
aGFuZ2UuIiwKLSAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdB
SVRfVElNRU9VVCkpOwotCi0gICAgLy8gQ2hhbmdlIGNhcHR1cmUgb3V0cHV0IGZvcm1hdCBhIGZl
dyB0aW1lcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IDIgKiBDQVBUVVJFX0ZPUk1BVF9DSEFO
R0VfQVRURU1QVFM7IGkrKykgewotICAgICAgaWYgKGkgJSAyID09IDApIHsKLSAgICAgICAgcGND
bGllbnQuY2hhbmdlQ2FwdHVyZUZvcm1hdChXSURUSF9WR0EsIEhFSUdIVF9WR0EsIE1BWF9WSURF
T19GUFMpOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgcGNDbGllbnQuY2hhbmdlQ2FwdHVyZUZv
cm1hdChXSURUSF9RVkdBLCBIRUlHSFRfUVZHQSwgTUFYX1ZJREVPX0ZQUyk7Ci0gICAgICB9Ci0K
LSAgICAgIC8vIFJlc2V0IHZpZGVvIHJlbmRlcnMgYW5kIGNoZWNrIHRoYXQgbG9jYWwgYW5kIHJl
bW90ZSB2aWRlbyBmcmFtZXMKLSAgICAgIC8vIHdlcmUgcmVuZGVyZWQgYWZ0ZXIgY2FwdHVyZSBm
b3JtYXQgY2hhbmdlLgotICAgICAgbG9jYWxSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19G
UkFNRVMpOwotICAgICAgcmVtb3RlUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVT
KTsKLSAgICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJl
ZCBhZnRlciBjYXB0dXJlIGZvcm1hdCBjaGFuZ2UuIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVy
LndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUo
IlJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIgY2FwdHVyZSBmb3Jt
YXQgY2hhbmdlLiIsCi0gICAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRl
cmVkKFdBSVRfVElNRU9VVCkpOwotICAgIH0KLQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAg
YXNzZXJ0VHJ1ZSh3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0g
ICAgTG9nLmQoVEFHLCAidGVzdENhcHR1cmVGb3JtYXRDaGFuZ2UgZG9uZS4iKTsKLSAgfQotfQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9WaWRlb0ZpbGVSZW5kZXJl
clRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90
ZXN0L1ZpZGVvRmlsZVJlbmRlcmVyVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVz
dHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1ZpZGVvRmlsZVJlbmRlcmVyVGVzdC5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBU
aGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjOwotCi1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRl
c3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFs
bFRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlv
bjsKLWltcG9ydCBqYXZhLmlvLlJhbmRvbUFjY2Vzc0ZpbGU7Ci1pbXBvcnQgamF2YS5sYW5nLlRo
cmVhZDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7Ci1pbXBvcnQg
amF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0
IGphdmEudXRpbC5SYW5kb207Ci0KLXB1YmxpYyBjbGFzcyBWaWRlb0ZpbGVSZW5kZXJlclRlc3Qg
ZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdFl1dlJlbmRlcmluZ1RvRmlsZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biwgSU9FeGNlcHRpb24gewotICAgIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKCk7
Ci0gICAgZmluYWwgU3RyaW5nIHZpZGVvT3V0UGF0aCA9ICIvc2RjYXJkL2Nocm9taXVtX3Rlc3Rz
X3Jvb3QvdGVzdHZpZGVvb3V0Lnk0bSI7Ci0gICAgaW50IGZyYW1lV2lkdGggPSA0OwotICAgIGlu
dCBmcmFtZUhlaWdodCA9IDQ7Ci0gICAgVmlkZW9GaWxlUmVuZGVyZXIgdmlkZW9GaWxlUmVuZGVy
ZXIgPQotICAgICAgICBuZXcgVmlkZW9GaWxlUmVuZGVyZXIodmlkZW9PdXRQYXRoLCBmcmFtZVdp
ZHRoLCBmcmFtZUhlaWdodCwgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLQotICAgIFN0
cmluZ1tdIGZyYW1lcyA9IHsKLSAgICAgICAgIlRISVMgSVMgSlVTVCBTT01FIFRFWFQgeCIsICJU
SEUgU0VDT05EIEZSQU1FIHF3ZXJ0eS4iLCAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIn07Ci0K
LSAgICBmb3IgKFN0cmluZyBmcmFtZVN0ciA6IGZyYW1lcykgewotICAgICAgaW50W10gcGxhbmVT
aXplcyA9IHsKLSAgICAgICAgICBmcmFtZVdpZHRoICogZnJhbWVXaWR0aCwgZnJhbWVXaWR0aCAq
IGZyYW1lSGVpZ2h0IC8gNCwgZnJhbWVXaWR0aCAqIGZyYW1lSGVpZ2h0IC8gNH07Ci0KLSAgICAg
IGJ5dGVbXSBmcmFtZUJ5dGVzID0gZnJhbWVTdHIuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5V
U19BU0NJSSk7Ci0gICAgICBCeXRlQnVmZmVyW10geXV2UGxhbmVzID0gbmV3IEJ5dGVCdWZmZXJb
M107Ci0gICAgICBpbnQgcG9zID0gMDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsr
KSB7Ci0gICAgICAgIHl1dlBsYW5lc1tpXSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QocGxh
bmVTaXplc1tpXSk7Ci0gICAgICAgIHl1dlBsYW5lc1tpXS5wdXQoZnJhbWVCeXRlcywgcG9zLCBw
bGFuZVNpemVzW2ldKTsKLSAgICAgICAgcG9zICs9IHBsYW5lU2l6ZXNbaV07Ci0gICAgICB9Ci0K
LSAgICAgIGludFtdIHl1dlN0cmlkZXMgPSB7ZnJhbWVXaWR0aCwgZnJhbWVXaWR0aCAvIDIsIGZy
YW1lV2lkdGggLyAyfTsKLQotICAgICAgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUgPQot
ICAgICAgICAgIG5ldyBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZShmcmFtZVdpZHRoLCBmcmFtZUhl
aWdodCwgMCwgeXV2U3RyaWRlcywgeXV2UGxhbmVzLCAwKTsKLQotICAgICAgdmlkZW9GaWxlUmVu
ZGVyZXIucmVuZGVyRnJhbWUoZnJhbWUpOwotICAgIH0KLSAgICB2aWRlb0ZpbGVSZW5kZXJlci5y
ZWxlYXNlKCk7Ci0KLSAgICBSYW5kb21BY2Nlc3NGaWxlIHdyaXR0ZW5GaWxlID0gbmV3IFJhbmRv
bUFjY2Vzc0ZpbGUodmlkZW9PdXRQYXRoLCAiciIpOwotICAgIHRyeSB7Ci0gICAgICBpbnQgbGVu
Z3RoID0gKGludCkgd3JpdHRlbkZpbGUubGVuZ3RoKCk7Ci0gICAgICBieXRlW10gZGF0YSA9IG5l
dyBieXRlW2xlbmd0aF07Ci0gICAgICB3cml0dGVuRmlsZS5yZWFkRnVsbHkoZGF0YSk7Ci0gICAg
ICBTdHJpbmcgZmlsZUNvbnRlbnQgPSBuZXcgU3RyaW5nKGRhdGEsIFN0YW5kYXJkQ2hhcnNldHMu
VVNfQVNDSUkpOwotICAgICAgU3RyaW5nIGV4cGVjdGVkID0gIllVVjRNUEVHMiBDNDIwIFc0IEg0
IElwIEYzMDoxIEExOjFcbiIKLSAgICAgICAgICArICJGUkFNRVxuIgotICAgICAgICAgICsgIlRI
SVMgSVMgSlVTVCBTT01FIFRFWFQgeEZSQU1FXG4iCi0gICAgICAgICAgKyAiVEhFIFNFQ09ORCBG
UkFNRSBxd2VydHkuRlJBTUVcbiIKLSAgICAgICAgICArICJIRVJFIElTIFRIRSBUSFJJRCBGUkFN
RSEiOwotICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmaWxlQ29udGVudCk7Ci0gICAgfSBm
aW5hbGx5IHsKLSAgICAgIHdyaXR0ZW5GaWxlLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgbmV3IEZp
bGUodmlkZW9PdXRQYXRoKS5kZWxldGUoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcv
YXBwc3BvdC9hcHBydGMvdGVzdC9jYXB0dXJldGVzdHZpZGVvLnk0bQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lk
dGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L2NhcHR1cmV0ZXN0dmlkZW8ueTRtCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L2Nh
cHR1cmV0ZXN0dmlkZW8ueTRtCShub25leGlzdGVudCkKQEAgLTEsNSArMCwwIEBACi1ZVVY0TVBF
RzIgQzQyMCBXNCBINCBJcCBGMzA6MSBBMToxCi1GUkFNRQotVEhJUyBJUyBKVVNUIFNPTUUgVEVY
VCB4RlJBTUUKLVRIRSBTRUNPTkQgRlJBTUUgcXdlcnR5LkZSQU1FCi1IRVJFIElTIFRIRSBUSFJJ
RCBGUkFNRSEKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvRmlsZVZp
ZGVvQ2FwdHVyZXJUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3Bv
dC9hcHBydGMvdGVzdC9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMv
YW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9GaWxlVmlkZW9DYXB0dXJl
clRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy50ZXN0OwotCi1pbXBvcnQgYW5kcm9p
ZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0
ZWJ1aWxkZXIuYW5ub3RhdGlvbi5MYXJnZVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRl
YnVpbGRlci5hbm5vdGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRl
YnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0IG9yZy53ZWJydGMuRmlsZVZp
ZGVvQ2FwdHVyZXI7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0NhcHR1cmVyOwotCi1pbXBvcnQg
amF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwotaW1wb3J0IGph
dmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlM
aXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVmlkZW9D
YXB0dXJlclRlc3QgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHByaXZhdGUg
c3RhdGljIGNsYXNzIEZyYW1lIHsKLSAgICBwdWJsaWMgYnl0ZVtdIGRhdGE7Ci0gICAgcHVibGlj
IGludCB3aWR0aDsKLSAgICBwdWJsaWMgaW50IGhlaWdodDsKLSAgfQotCi0gIHB1YmxpYyBjbGFz
cyBNb2NrQ2FwdHVyZXJPYnNlcnZlciBpbXBsZW1lbnRzIFZpZGVvQ2FwdHVyZXIuQ2FwdHVyZXJP
YnNlcnZlciB7Ci0gICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8RnJhbWU+IGZyYW1lRGF0YXMg
PSBuZXcgQXJyYXlMaXN0PEZyYW1lPigpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZv
aWQgb25DYXB0dXJlclN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKSB7Ci0gICAgICBhc3NlcnRUcnVl
KHN1Y2Nlc3MpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2Fw
dHVyZXJTdG9wcGVkKCkgewotICAgICAgLy8gRW1wdHkgb24gcHVycG9zZS4KLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25CeXRlQnVmZmVyRnJh
bWVDYXB0dXJlZCgKLSAgICAgICAgYnl0ZVtdIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IHJvdGF0aW9uLCBsb25nIHRpbWVTdGFtcCkgewotICAgICAgRnJhbWUgZnJhbWUgPSBuZXcg
RnJhbWUoKTsKLSAgICAgIGZyYW1lLmRhdGEgPSBkYXRhOwotICAgICAgZnJhbWUud2lkdGggPSB3
aWR0aDsKLSAgICAgIGZyYW1lLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIGFzc2VydFRydWUoZGF0
YS5sZW5ndGggIT0gMCk7Ci0gICAgICBmcmFtZURhdGFzLmFkZChmcmFtZSk7Ci0gICAgICBub3Rp
ZnkoKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVG
cmFtZUNhcHR1cmVkKGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9lc1RleHR1cmVJZCwKLSAg
ICAgICAgZmxvYXRbXSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3Rh
bXApIHsKLSAgICAgIC8vIEVtcHR5IG9uIHB1cnBvc2UuCi0gICAgfQotCi0gICAgcHVibGljIHN5
bmNocm9uaXplZCBBcnJheUxpc3Q8RnJhbWU+IGdldE1pbmltdW1GcmFtZXNCbG9ja2luZyhpbnQg
bWluRnJhbWVzKQotICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAg
d2hpbGUgKGZyYW1lRGF0YXMuc2l6ZSgpIDwgbWluRnJhbWVzKSB7Ci0gICAgICAgIHdhaXQoKTsK
LSAgICAgIH0KLSAgICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PEZyYW1lPihmcmFtZURhdGFzKTsK
LSAgICB9Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RWaWRlb0NhcHR1
cmVGcm9tRmlsZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewot
ICAgIGZpbmFsIGludCBGUkFNRV9XSURUSCA9IDQ7Ci0gICAgZmluYWwgaW50IEZSQU1FX0hFSUdI
VCA9IDQ7Ci0gICAgZmluYWwgRmlsZVZpZGVvQ2FwdHVyZXIgZmlsZVZpZGVvQ2FwdHVyZXIgPSBu
ZXcgRmlsZVZpZGVvQ2FwdHVyZXIoCi0gICAgICAgICIvc2RjYXJkL2Nocm9taXVtX3Rlc3RzX3Jv
b3Qvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rl
c3QvIgotICAgICAgICArICJjYXB0dXJldGVzdHZpZGVvLnk0bSIpOwotICAgIGZpbmFsIE1vY2tD
YXB0dXJlck9ic2VydmVyIGNhcHR1cmVyT2JzZXJ2ZXIgPSBuZXcgTW9ja0NhcHR1cmVyT2JzZXJ2
ZXIoKTsKLSAgICBmaWxlVmlkZW9DYXB0dXJlci5pbml0aWFsaXplKG51bGwsIG51bGwsIGNhcHR1
cmVyT2JzZXJ2ZXIpOwotICAgIGZpbGVWaWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZShGUkFNRV9X
SURUSCwgRlJBTUVfSEVJR0hULCAzMyk7Ci0KLSAgICBmaW5hbCBTdHJpbmdbXSBleHBlY3RlZEZy
YW1lcyA9IHsKLSAgICAgICAgIlRISVMgSVMgSlVTVCBTT01FIFRFWFQgeCIsICJUSEUgU0VDT05E
IEZSQU1FIHF3ZXJ0eS4iLCAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIn07Ci0KLSAgICBmaW5h
bCBBcnJheUxpc3Q8RnJhbWU+IGZyYW1lRGF0YXM7Ci0gICAgZnJhbWVEYXRhcyA9IGNhcHR1cmVy
T2JzZXJ2ZXIuZ2V0TWluaW11bUZyYW1lc0Jsb2NraW5nKGV4cGVjdGVkRnJhbWVzLmxlbmd0aCk7
Ci0KLSAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWRGcmFtZXMubGVuZ3RoLCBmcmFtZURhdGFzLnNp
emUoKSk7Ci0KLSAgICBmaWxlVmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIGZpbGVW
aWRlb0NhcHR1cmVyLmRpc3Bvc2UoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0
ZWRGcmFtZXMubGVuZ3RoOyArK2kpIHsKLSAgICAgIEZyYW1lIGZyYW1lID0gZnJhbWVEYXRhcy5n
ZXQoaSk7Ci0KLSAgICAgIGFzc2VydEVxdWFscyhGUkFNRV9XSURUSCwgZnJhbWUud2lkdGgpOwot
ICAgICAgYXNzZXJ0RXF1YWxzKEZSQU1FX0hFSUdIVCwgZnJhbWUuaGVpZ2h0KTsKLSAgICAgIGFz
c2VydEVxdWFscyhGUkFNRV9XSURUSCAqIEZSQU1FX0hFSUdIVCAqIDMgLyAyLCBmcmFtZS5kYXRh
Lmxlbmd0aCk7Ci0KLSAgICAgIGJ5dGVbXSBleHBlY3RlZE5WMTJCeXRlcyA9IG5ldyBieXRlW2Zy
YW1lLmRhdGEubGVuZ3RoXTsKLSAgICAgIEZpbGVWaWRlb0NhcHR1cmVyLm5hdGl2ZUk0MjBUb05W
MjEoZXhwZWN0ZWRGcmFtZXNbaV0uZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSSks
Ci0gICAgICAgICAgRlJBTUVfV0lEVEgsIEZSQU1FX0hFSUdIVCwgZXhwZWN0ZWROVjEyQnl0ZXMp
OwotCi0gICAgICBhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZXhwZWN0ZWROVjEyQnl0ZXMsIGZy
YW1lLmRhdGEpKTsKLSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3Qv
YXBwcnRjL3Rlc3QvUGVlckNvbm5lY3Rpb25DbGllbnRUZXN0LmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9p
ZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9QZWVyQ29ubmVjdGlvbkNsaWVudFRl
c3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvdGVzdC9QZWVyQ29ubmVjdGlvbkNsaWVudFRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0x
LDY3OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFw
cHJ0Yy50ZXN0OwotCi1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWdu
YWxpbmdQYXJhbWV0ZXJzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlv
bkNsaWVudDsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNvbm5lY3Rpb25DbGllbnQu
UGVlckNvbm5lY3Rpb25FdmVudHM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25u
ZWN0aW9uQ2xpZW50LlBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLQotaW1wb3J0IGFuZHJvaWQu
b3MuQnVpbGQ7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LkZsYWt5VGVzdDsKLWltcG9ydCBhbmRyb2lk
LnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRl
YnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwot
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmExRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRj
LkNhbWVyYTJFbnVtZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRvcjsK
LWltcG9ydCBvcmcud2VicnRjLkVnbEJhc2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRh
dGU7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5NZWRpYUNvZGVjVmlkZW9FbmNvZGVyOwotaW1wb3J0IG9y
Zy53ZWJydGMuUGVlckNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlv
bkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5TdGF0c1JlcG9ydDsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb1JlbmRlcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLkxp
bmtlZExpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1
cnJlbnQuQ291bnREb3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0
b3JTZXJ2aWNlOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9y
dCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotcHVibGljIGNsYXNzIFBlZXJDb25u
ZWN0aW9uQ2xpZW50VGVzdAotICAgIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgaW1w
bGVtZW50cyBQZWVyQ29ubmVjdGlvbkV2ZW50cyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBUQUcgPSAiUlRDQ2xpZW50VGVzdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJ
Q0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQgPSAxMDAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IFdBSVRfVElNRU9VVCA9IDcwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBD
QU1FUkFfU1dJVENIX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZJ
REVPX1JFU1RBUlRfQVRURU1QVFMgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FQ
VFVSRV9GT1JNQVRfQ0hBTkdFX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IFZJREVPX1JFU1RBUlRfVElNRU9VVCA9IDUwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IEVYUEVDVEVEX1ZJREVPX0ZSQU1FUyA9IDEwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVklERU9fQ09ERUNfVlA4ID0gIlZQOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBWSURFT19DT0RFQ19WUDkgPSAiVlA5IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIFZJREVPX0NPREVDX0gyNjQgPSAiSDI2NCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBBVURJT19SVU5fVElNRU9VVCA9IDEwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBMT0NBTF9SRU5ERVJFUl9OQU1FID0gIkxvY2FsIHJlbmRlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgU3RyaW5nIFJFTU9URV9SRU5ERVJFUl9OQU1FID0gIlJlbW90ZSByZW5kZXJlciI7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9WSURFT19GUFMgPSAzMDsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJRFRIX1ZHQSA9IDY0MDsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IEhFSUdIVF9WR0EgPSA0ODA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBX
SURUSF9RVkdBID0gMzIwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVJR0hUX1FWR0Eg
PSAyNDA7Ci0KLSAgLy8gVGhlIHBlZXIgY29ubmVjdGlvbiBjbGllbnQgaXMgYXNzdW1lZCB0byBi
ZSB0aHJlYWQgc2FmZSBpbiBpdHNlbGY7IHRoZQotICAvLyByZWZlcmVuY2UgaXMgd3JpdHRlbiBi
eSB0aGUgdGVzdCB0aHJlYWQgYW5kIHJlYWQgYnkgd29ya2VyIHRocmVhZHMuCi0gIHByaXZhdGUg
dm9sYXRpbGUgUGVlckNvbm5lY3Rpb25DbGllbnQgcGNDbGllbnQ7Ci0gIHByaXZhdGUgdm9sYXRp
bGUgYm9vbGVhbiBsb29wYmFjazsKLQotICAvLyBFR0wgY29udGV4dCB0aGF0IGNhbiBiZSB1c2Vk
IGJ5IGhhcmR3YXJlIHZpZGVvIGRlY29kZXJzIHRvIGRlY29kZSB0byBhIHRleHR1cmUuCi0gIHBy
aXZhdGUgRWdsQmFzZSBlZ2xCYXNlOwotCi0gIC8vIFRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgdGhl
aXIgcmVzcGVjdGl2ZSBldmVudCBvYmplY3RzLgotICBwcml2YXRlIEV4ZWN1dG9yU2VydmljZSBz
aWduYWxpbmdFeGVjdXRvcjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkOwotICBwcml2YXRl
IGJvb2xlYW4gaXNJY2VDb25uZWN0ZWQ7Ci0gIHByaXZhdGUgU2Vzc2lvbkRlc2NyaXB0aW9uIGxv
Y2FsU2RwOwotICBwcml2YXRlIExpc3Q8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVzID0gbmV3
IExpbmtlZExpc3Q8SWNlQ2FuZGlkYXRlPigpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBsb2Nh
bFNkcEV2ZW50ID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBpY2VDYW5k
aWRhdGVFdmVudCA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgaWNlQ29u
bmVjdGVkRXZlbnQgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGNsb3Nl
RXZlbnQgPSBuZXcgT2JqZWN0KCk7Ci0KLSAgLy8gTW9jayByZW5kZXJlciBpbXBsZW1lbnRhdGlv
bi4KLSAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgTW9ja1JlbmRlcmVyIGltcGxlbWVudHMgVmlkZW9S
ZW5kZXJlci5DYWxsYmFja3MgewotICAgIC8vIFRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgJ3RoaXMn
IHNpbmNlIHdlIGdldHMgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZHMuCi0gICAgcHJpdmF0ZSBT
dHJpbmcgcmVuZGVyZXJOYW1lOwotICAgIHByaXZhdGUgYm9vbGVhbiByZW5kZXJGcmFtZUNhbGxl
ZCA9IGZhbHNlOwotCi0gICAgLy8gVGhyZWFkLXNhZmUgaW4gaXRzZWxmLgotICAgIHByaXZhdGUg
Q291bnREb3duTGF0Y2ggZG9uZVJlbmRlcmluZzsKLQotICAgIHB1YmxpYyBNb2NrUmVuZGVyZXIo
aW50IGV4cGVjdGVkRnJhbWVzLCBTdHJpbmcgcmVuZGVyZXJOYW1lKSB7Ci0gICAgICB0aGlzLnJl
bmRlcmVyTmFtZSA9IHJlbmRlcmVyTmFtZTsKLSAgICAgIHJlc2V0KGV4cGVjdGVkRnJhbWVzKTsK
LSAgICB9Ci0KLSAgICAvLyBSZXNldHMgcmVuZGVyIHRvIHdhaXQgZm9yIG5ldyBhbW91bnQgb2Yg
dmlkZW8gZnJhbWVzLgotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldChpbnQgZXhw
ZWN0ZWRGcmFtZXMpIHsKLSAgICAgIHJlbmRlckZyYW1lQ2FsbGVkID0gZmFsc2U7Ci0gICAgICBk
b25lUmVuZGVyaW5nID0gbmV3IENvdW50RG93bkxhdGNoKGV4cGVjdGVkRnJhbWVzKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVuZGVyRnJh
bWUoVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIGlmICghcmVuZGVyRnJh
bWVDYWxsZWQpIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyTmFtZSAhPSBudWxsKSB7Ci0gICAgICAg
ICAgTG9nLmQoVEFHLCByZW5kZXJlck5hbWUgKyAiIHJlbmRlciBmcmFtZTogIiArIGZyYW1lLnJv
dGF0ZWRXaWR0aCgpICsgIiB4ICIKLSAgICAgICAgICAgICAgICAgICsgZnJhbWUucm90YXRlZEhl
aWdodCgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJSZW5kZXIg
ZnJhbWU6ICIgKyBmcmFtZS5yb3RhdGVkV2lkdGgoKSArICIgeCAiICsgZnJhbWUucm90YXRlZEhl
aWdodCgpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgICAgcmVuZGVyRnJhbWVDYWxsZWQgPSB0
cnVlOwotICAgICAgVmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAg
ZG9uZVJlbmRlcmluZy5jb3VudERvd24oKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBz
aG91bGRuJ3QgaG9sZCBhbnkgbG9ja3Mgb3IgdG91Y2ggbWVtYmVyIHZhcmlhYmxlcyBzaW5jZSBp
dAotICAgIC8vIGJsb2Nrcy4KLSAgICBwdWJsaWMgYm9vbGVhbiB3YWl0Rm9yRnJhbWVzUmVuZGVy
ZWQoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIGRv
bmVSZW5kZXJpbmcuYXdhaXQodGltZW91dE1zLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAg
ICAgcmV0dXJuIChkb25lUmVuZGVyaW5nLmdldENvdW50KCkgPD0gMCk7Ci0gICAgfQotICB9Ci0K
LSAgLy8gUGVlciBjb25uZWN0aW9uIGV2ZW50cyBpbXBsZW1lbnRhdGlvbi4KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIG9uTG9jYWxEZXNjcmlwdGlvbihTZXNzaW9uRGVzY3JpcHRpb24gc2Rw
KSB7Ci0gICAgTG9nLmQoVEFHLCAiTG9jYWxTRFAgdHlwZTogIiArIHNkcC50eXBlKTsKLSAgICBz
eW5jaHJvbml6ZWQgKGxvY2FsU2RwRXZlbnQpIHsKLSAgICAgIGxvY2FsU2RwID0gc2RwOwotICAg
ICAgbG9jYWxTZHBFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0
ZSkgewotICAgIHN5bmNocm9uaXplZCAoaWNlQ2FuZGlkYXRlRXZlbnQpIHsKLSAgICAgIExvZy5k
KFRBRywgIkljZUNhbmRpZGF0ZSAjIiArIGljZUNhbmRpZGF0ZXMuc2l6ZSgpICsgIiA6ICIgKyBj
YW5kaWRhdGUudG9TdHJpbmcoKSk7Ci0gICAgICBpZiAobG9vcGJhY2spIHsKLSAgICAgICAgLy8g
TG9vcGJhY2sgbG9jYWwgSUNFIGNhbmRpZGF0ZSBpbiBhIHNlcGFyYXRlIHRocmVhZCB0byBhdm9p
ZCBhZGRpbmcKLSAgICAgICAgLy8gcmVtb3RlIElDRSBjYW5kaWRhdGUgaW4gYSBsb2NhbCBJQ0Ug
Y2FuZGlkYXRlIGNhbGxiYWNrLgotICAgICAgICBzaWduYWxpbmdFeGVjdXRvci5leGVjdXRlKG5l
dyBSdW5uYWJsZSgpIHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgICAgICBwY0NsaWVudC5hZGRSZW1vdGVJY2VDYW5kaWRhdGUoY2Fu
ZGlkYXRlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgICAgaWNlQ2Fu
ZGlkYXRlcy5hZGQoY2FuZGlkYXRlKTsKLSAgICAgIGljZUNhbmRpZGF0ZUV2ZW50Lm5vdGlmeUFs
bCgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNhbmRp
ZGF0ZXNSZW1vdmVkKGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICAvLyBU
T0RPKGhvbmdoYWl6KTogQWRkIHRoaXMgZm9yIHRlc3RzLgotICB9Ci0KLSAgQE92ZXJyaWRlCi0g
IHB1YmxpYyB2b2lkIG9uSWNlQ29ubmVjdGVkKCkgewotICAgIExvZy5kKFRBRywgIklDRSBDb25u
ZWN0ZWQiKTsKLSAgICBzeW5jaHJvbml6ZWQgKGljZUNvbm5lY3RlZEV2ZW50KSB7Ci0gICAgICBp
c0ljZUNvbm5lY3RlZCA9IHRydWU7Ci0gICAgICBpY2VDb25uZWN0ZWRFdmVudC5ub3RpZnlBbGwo
KTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VEaXNjb25u
ZWN0ZWQoKSB7Ci0gICAgTG9nLmQoVEFHLCAiSUNFIERpc2Nvbm5lY3RlZCIpOwotICAgIHN5bmNo
cm9uaXplZCAoaWNlQ29ubmVjdGVkRXZlbnQpIHsKLSAgICAgIGlzSWNlQ29ubmVjdGVkID0gZmFs
c2U7Ci0gICAgICBpY2VDb25uZWN0ZWRFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVyQ29ubmVjdGlvbkNsb3NlZCgpIHsKLSAg
ICBMb2cuZChUQUcsICJQZWVyQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICBzeW5jaHJvbml6ZWQg
KGNsb3NlRXZlbnQpIHsKLSAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgIGNsb3NlRXZlbnQu
bm90aWZ5QWxsKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
UGVlckNvbm5lY3Rpb25FcnJvcihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICBmYWlsKCJQQyBF
cnJvcjogIiArIGRlc2NyaXB0aW9uKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9p
ZCBvblBlZXJDb25uZWN0aW9uU3RhdHNSZWFkeShTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHt9Ci0K
LSAgLy8gSGVscGVyIHdhaXQgZnVuY3Rpb25zLgotICBwcml2YXRlIGJvb2xlYW4gd2FpdEZvckxv
Y2FsU0RQKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
c3luY2hyb25pemVkIChsb2NhbFNkcEV2ZW50KSB7Ci0gICAgICBpZiAobG9jYWxTZHAgPT0gbnVs
bCkgewotICAgICAgICBsb2NhbFNkcEV2ZW50LndhaXQodGltZW91dE1zKTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiAobG9jYWxTZHAgIT0gbnVsbCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBi
b29sZWFuIHdhaXRGb3JJY2VDYW5kaWRhdGVzKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgc3luY2hyb25pemVkIChpY2VDYW5kaWRhdGVFdmVudCkgewot
ICAgICAgaWYgKGljZUNhbmRpZGF0ZXMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgaWNlQ2FuZGlk
YXRlRXZlbnQud2FpdCh0aW1lb3V0TXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIChpY2VDYW5k
aWRhdGVzLnNpemUoKSA+IDApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3YWl0
Rm9ySWNlQ29ubmVjdGVkKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgc3luY2hyb25pemVkIChpY2VDb25uZWN0ZWRFdmVudCkgewotICAgICAgaWYgKCFp
c0ljZUNvbm5lY3RlZCkgewotICAgICAgICBpY2VDb25uZWN0ZWRFdmVudC53YWl0KHRpbWVvdXRN
cyk7Ci0gICAgICB9Ci0gICAgICBpZiAoIWlzSWNlQ29ubmVjdGVkKSB7Ci0gICAgICAgIExvZy5l
KFRBRywgIklDRSBjb25uZWN0aW9uIGZhaWx1cmUiKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJu
IGlzSWNlQ29ubmVjdGVkOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3YWl0Rm9y
UGVlckNvbm5lY3Rpb25DbG9zZWQoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBzeW5jaHJvbml6ZWQgKGNsb3NlRXZlbnQpIHsKLSAgICAgIGlmICghaXND
bG9zZWQpIHsKLSAgICAgICAgY2xvc2VFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9Ci0g
ICAgICByZXR1cm4gaXNDbG9zZWQ7Ci0gICAgfQotICB9Ci0KLSAgUGVlckNvbm5lY3Rpb25DbGll
bnQgY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQoTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIs
Ci0gICAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIsIFBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMsCi0gICAgICBWaWRlb0NhcHR1cmVyIHZpZGVv
Q2FwdHVyZXIsIEVnbEJhc2UuQ29udGV4dCBlZ2xDb250ZXh0KSB7Ci0gICAgTGlzdDxQZWVyQ29u
bmVjdGlvbi5JY2VTZXJ2ZXI+IGljZVNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVj
dGlvbi5JY2VTZXJ2ZXI+KCk7Ci0gICAgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJh
bWV0ZXJzID0KLSAgICAgICAgbmV3IFNpZ25hbGluZ1BhcmFtZXRlcnMoaWNlU2VydmVycywgdHJ1
ZSwgLy8gaWNlU2VydmVycywgaW5pdGlhdG9yLgotICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVs
bCwgLy8gY2xpZW50SWQsIHdzc1VybCwgd3NzUG9zdFVybC4KLSAgICAgICAgICAgIG51bGwsIG51
bGwpOyAvLyBvZmZlclNkcCwgaWNlQ2FuZGlkYXRlcy4KLQotICAgIFBlZXJDb25uZWN0aW9uQ2xp
ZW50IGNsaWVudCA9IFBlZXJDb25uZWN0aW9uQ2xpZW50LmdldEluc3RhbmNlKCk7Ci0gICAgUGVl
ckNvbm5lY3Rpb25GYWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZh
Y3RvcnkuT3B0aW9ucygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAwOwotICAg
IG9wdGlvbnMuZGlzYWJsZU5ldHdvcmtNb25pdG9yID0gdHJ1ZTsKLSAgICBjbGllbnQuc2V0UGVl
ckNvbm5lY3Rpb25GYWN0b3J5T3B0aW9ucyhvcHRpb25zKTsKLSAgICBjbGllbnQuY3JlYXRlUGVl
ckNvbm5lY3Rpb25GYWN0b3J5KAotICAgICAgICBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJn
ZXRDb250ZXh0KCksIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywgdGhpcyk7Ci0gICAgY2xpZW50
LmNyZWF0ZVBlZXJDb25uZWN0aW9uKAotICAgICAgICBlZ2xDb250ZXh0LCBsb2NhbFJlbmRlcmVy
LCByZW1vdGVSZW5kZXJlciwgdmlkZW9DYXB0dXJlciwgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0g
ICAgY2xpZW50LmNyZWF0ZU9mZmVyKCk7Ci0gICAgcmV0dXJuIGNsaWVudDsKLSAgfQotCi0gIHBy
aXZhdGUgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNyZWF0ZVBhcmFtZXRlcnNGb3JBdWRpb0Nh
bGwoKSB7Ci0gICAgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1l
dGVycyA9Ci0gICAgICAgIG5ldyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMoZmFsc2UsIC8qIHZp
ZGVvQ2FsbEVuYWJsZWQgKi8KLSAgICAgICAgICAgIHRydWUsIC8qIGxvb3BiYWNrICovCi0gICAg
ICAgICAgICBmYWxzZSwgLyogdHJhY2luZyAqLwotICAgICAgICAgICAgLy8gVmlkZW8gY29kZWMg
cGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvV2lkdGggKi8KLSAgICAgICAgICAg
IDAsIC8qIHZpZGVvSGVpZ2h0ICovCi0gICAgICAgICAgICAwLCAvKiB2aWRlb0ZwcyAqLwotICAg
ICAgICAgICAgMCwgLyogdmlkZW9TdGFydEJpdHJhdGUgKi8KLSAgICAgICAgICAgICIiLCAvKiB2
aWRlb0NvZGVjICovCi0gICAgICAgICAgICB0cnVlLCAvKiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRp
b24gKi8KLSAgICAgICAgICAgIC8vIEF1ZGlvIGNvZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAg
ICAwLCAvKiBhdWRpb1N0YXJ0Qml0cmF0ZSAqLwotICAgICAgICAgICAgIk9QVVMiLCAvKiBhdWRp
b0NvZGVjICovCi0gICAgICAgICAgICBmYWxzZSwgLyogbm9BdWRpb1Byb2Nlc3NpbmcgKi8KLSAg
ICAgICAgICAgIGZhbHNlLCAvKiBhZWNEdW1wICovCi0gICAgICAgICAgICBmYWxzZSAvKiB1c2VP
cGVuU0xFUyAqLywgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5BRUMgKi8sIGZhbHNlIC8qIGRpc2Fi
bGVCdWlsdEluQUdDICovLAotICAgICAgICAgICAgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5OUyAq
LywgZmFsc2UgLyogZW5hYmxlTGV2ZWxDb250cm9sICovKTsKLQotICAgIHJldHVybiBwZWVyQ29u
bmVjdGlvblBhcmFtZXRlcnM7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvQ2FwdHVyZXIgY3JlYXRl
Q2FtZXJhQ2FwdHVyZXIoYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgZmluYWwgYm9v
bGVhbiB1c2VDYW1lcmEyID0KLSAgICAgICAgY2FwdHVyZVRvVGV4dHVyZSAmJiBDYW1lcmEyRW51
bWVyYXRvci5pc1N1cHBvcnRlZChnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0
KCkpOwotCi0gICAgQ2FtZXJhRW51bWVyYXRvciBlbnVtZXJhdG9yOwotICAgIGlmICh1c2VDYW1l
cmEyKSB7Ci0gICAgICBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTJFbnVtZXJhdG9yKGdldEluc3Ry
dW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVu
dW1lcmF0b3IgPSBuZXcgQ2FtZXJhMUVudW1lcmF0b3IoY2FwdHVyZVRvVGV4dHVyZSk7Ci0gICAg
fQotICAgIFN0cmluZyBkZXZpY2VOYW1lID0gZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpWzBd
OwotICAgIHJldHVybiBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGRldmljZU5hbWUsIG51bGwp
OwotICB9Ci0KLSAgcHJpdmF0ZSBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgY3JlYXRlUGFyYW1l
dGVyc0ZvclZpZGVvQ2FsbChTdHJpbmcgdmlkZW9Db2RlYykgewotICAgIFBlZXJDb25uZWN0aW9u
UGFyYW1ldGVycyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPQotICAgICAgICBuZXcgUGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzKHRydWUsIC8qIHZpZGVvQ2FsbEVuYWJsZWQgKi8KLSAgICAgICAg
ICAgIHRydWUsIC8qIGxvb3BiYWNrICovCi0gICAgICAgICAgICBmYWxzZSwgLyogdHJhY2luZyAq
LwotICAgICAgICAgICAgLy8gVmlkZW8gY29kZWMgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAs
IC8qIHZpZGVvV2lkdGggKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvSGVpZ2h0ICovCi0gICAg
ICAgICAgICAwLCAvKiB2aWRlb0ZwcyAqLwotICAgICAgICAgICAgMCwgLyogdmlkZW9TdGFydEJp
dHJhdGUgKi8KLSAgICAgICAgICAgIHZpZGVvQ29kZWMsIC8qIHZpZGVvQ29kZWMgKi8KLSAgICAg
ICAgICAgIHRydWUsIC8qIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbiAqLwotICAgICAgICAgICAg
Ly8gQXVkaW8gY29kZWMgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAsIC8qIGF1ZGlvU3RhcnRC
aXRyYXRlICovCi0gICAgICAgICAgICAiT1BVUyIsIC8qIGF1ZGlvQ29kZWMgKi8KLSAgICAgICAg
ICAgIGZhbHNlLCAvKiBub0F1ZGlvUHJvY2Vzc2luZyAqLwotICAgICAgICAgICAgZmFsc2UsIC8q
IGFlY0R1bXAgKi8KLSAgICAgICAgICAgIGZhbHNlIC8qIHVzZU9wZW5TTEVTICovLCBmYWxzZSAv
KiBkaXNhYmxlQnVpbHRJbkFFQyAqLywgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5BR0MgKi8sCi0g
ICAgICAgICAgICBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJbk5TICovLCBmYWxzZSAvKiBlbmFibGVM
ZXZlbENvbnRyb2wgKi8pOwotCi0gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsK
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBzaWduYWxp
bmdFeGVjdXRvciA9IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpOwotICAgIGlm
IChCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFO
X01SMSkgewotICAgICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKCk7Ci0gICAgfQotICB9Ci0K
LSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIHNpZ25hbGluZ0V4
ZWN1dG9yLnNodXRkb3duKCk7Ci0gICAgaWYgKGVnbEJhc2UgIT0gbnVsbCkgewotICAgICAgZWds
QmFzZS5yZWxlYXNlKCk7Ci0gICAgfQotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0U2V0TG9jYWxPZmZlck1ha2VzVmlkZW9GbG93TG9jYWxseSgpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFNldExvY2FsT2ZmZXJNYWtlc1Zp
ZGVvRmxvd0xvY2FsbHkiKTsKLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBN
b2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsK
LSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIs
IG5ldyBNb2NrUmVuZGVyZXIoMCwgbnVsbCksCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRlcnNGb3JW
aWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIo
ZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2FpdCBmb3Ig
bG9jYWwgU0RQIGFuZCBpY2UgY2FuZGlkYXRlcyBzZXQgZXZlbnRzLgotICAgIGFzc2VydFRydWUo
IkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7
Ci0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNhbmRpZGF0ZXMgd2VyZSBub3QgZ2VuZXJhdGVkLiIsIHdh
aXRGb3JJY2VDYW5kaWRhdGVzKFdBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBs
b2NhbCB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKAotICAgICAg
ICAiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkLiIsIGxvY2FsUmVuZGVyZXIu
d2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotCi0gICAgcGNDbGllbnQuY2xv
c2UoKTsKLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiUGVlckNvbm5lY3Rpb24gY2xvc2UgZXZl
bnQgd2FzIG5vdCByZWNlaXZlZC4iLCB3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9U
SU1FT1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFNldExvY2FsT2ZmZXJNYWtlc1ZpZGVvRmxv
d0xvY2FsbHkgRG9uZS4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkb0xvb3BiYWNrVGVzdChQ
ZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVycywgVmlkZW9DYXB0dXJlciB2aWRlb0Nh
cHR1cmVyLAotICAgICAgYm9vbGVhbiBkZWNvZGVUb1RleHR1cmUpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwotICAgIE1vY2tSZW5kZXJlciBsb2Nh
bFJlbmRlcmVyID0gbnVsbDsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIgPSBudWxs
OwotICAgIGlmIChwYXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIExvZy5kKFRB
RywgInRlc3RMb29wYmFjayBmb3IgdmlkZW8gIiArIHBhcmFtZXRlcnMudmlkZW9Db2RlYyk7Ci0g
ICAgICBsb2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFN
RVMsIExPQ0FMX1JFTkRFUkVSX05BTUUpOwotICAgICAgcmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9j
a1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVSX05BTUUpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICBMb2cuZChUQUcsICJ0ZXN0TG9vcGJhY2sgZm9yIGF1ZGlvLiIp
OwotICAgIH0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2Fs
UmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLCBwYXJhbWV0ZXJzLCB2aWRlb0NhcHR1cmVyLAotICAg
ICAgICBkZWNvZGVUb1RleHR1cmUgPyBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkgOiBudWxs
KTsKLQotICAgIC8vIFdhaXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQg
c2V0IGFzIHJlbW90ZSBTRFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0
LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlUX1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRp
b24gcmVtb3RlU2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRl
c2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNj
cmlwdGlvbik7Ci0gICAgcGNDbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsK
LQotICAgIC8vIFdhaXQgZm9yIElDRSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBj
b25uZWN0aW9uIGZhaWx1cmUuIiwgd2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9X
QUlUX1RJTUVPVVQpKTsKLQotICAgIGlmIChwYXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsK
LSAgICAgIC8vIENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBy
ZW5kZXJlZC4KLSAgICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCBy
ZW5kZXJlZC4iLAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVk
KFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZyYW1lcyB3
ZXJlIG5vdCByZW5kZXJlZC4iLAotICAgICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFt
ZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gRm9yIGF1
ZGlvIGp1c3Qgc2xlZXAgZm9yIDEgc2VjLgotICAgICAgLy8gVE9ETyhnbGF6bmV2KTogY2hlY2sg
aG93IHdlIGNhbiBkZXRlY3QgdGhhdCByZW1vdGUgYXVkaW8gd2FzIHJlbmRlcmVkLgotICAgICAg
VGhyZWFkLnNsZWVwKEFVRElPX1JVTl9USU1FT1VUKTsKLSAgICB9Ci0KLSAgICBwY0NsaWVudC5j
bG9zZSgpOwotICAgIGFzc2VydFRydWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRf
VElNRU9VVCkpOwotICAgIExvZy5kKFRBRywgInRlc3RMb29wYmFjayBkb25lLiIpOwotICB9Ci0K
LSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tBdWRpbygpIHRocm93cyBJ
bnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVy
c0ZvckF1ZGlvQ2FsbCgpLCBudWxsLCBmYWxzZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9
Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDgoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRl
cnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2Fw
dHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIGZhbHNlIC8qIGRlY29kZVRvVGV4
dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFj
a1ZwOSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3Qo
Y3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDkpLAotICAgICAgICBj
cmVhdGVDYW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgZmFsc2Ug
LyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdExvb3BiYWNrSDI2NCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAg
ZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19I
MjY0KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4
dHVyZSAqLyksIGZhbHNlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxU
ZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOERlY29kZVRvVGV4dHVyZSgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8
IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNvZGUg
dG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZCwgcmVxdWlyZXMgU0RLIHZlcnNpb24gMTkuIik7
Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRl
cnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2Fw
dHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0
dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNr
VnA5RGVjb2RlVG9UZXh0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBp
ZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsK
LSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLCBy
ZXF1aXJlcyBTREsgdmVyc2lvbiAxOS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9M
b29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDkp
LAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJl
ICovKSwgdHJ1ZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAot
ICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tIMjY0RGVjb2RlVG9UZXh0dXJlKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVp
bGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0byB0
ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLCByZXF1aXJlcyBTREsgdmVyc2lvbiAxOS4iKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0Zv
clZpZGVvQ2FsbChWSURFT19DT0RFQ19IMjY0KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVy
ZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJl
ICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA4
Q2FwdHVyZVRvVGV4dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYg
KEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0g
ICAgICBMb2cuaShUQUcsICJFbmNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gUmVx
dWlyZXMgU0RLIHZlcnNpb24gMTkiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVE9E
TyhwZXJraik6IElmIHdlIGNhbiBhbHdheXMgY2FwdHVyZSB0byB0ZXh0dXJlcywgdGhlcmUgaXMg
bm8gbmVlZCB0byBjaGVjayBpZiB0aGUKLSAgICAvLyBoYXJkd2FyZSBlbmNvZGVyIHN1cHBvcnRz
IHRvIGVuY29kZSBmcm9tIGEgdGV4dHVyZS4KLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29k
ZXIuaXNWcDhId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkgewotICAgICAgTG9nLmkoVEFHLCAi
VlA4IGVuY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxs
KFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyog
Y2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQot
Ci0gIC8vIFRlc3QgdGhhdCBhIGNhbGwgY2FuIGJlIHNldHVwIGV2ZW4gaWYgdGhlIEVHTCBjb250
ZXh0IHVzZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIGlzCi0gIC8vIHJlbGVhc2VkIGJlZm9yZSB0
aGUgVmlkZW8gY29kZWNzIGFyZSBjcmVhdGVkLiBUaGUgSFcgZW5jb2RlciBhbmQgZGVjb2RlciBp
cyBzZXR1cCB0byB1c2UKLSAgLy8gdGV4dHVyZXMuCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZv
aWQgdGVzdExvb3BiYWNrRWdsQ29udGV4dFJlbGVhc2VkQWZ0ZXJDcmVhdGluZ1BjKCkgdGhyb3dz
IEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwg
QnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0
byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiBSZXF1aXJlcyBTREsgdmVyc2lvbiAxOSIpOwot
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLSAgICBQZWVyQ29u
bmVjdGlvblBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0Nh
bGwoVklERU9fQ09ERUNfVlA4KTsKLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5l
dyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1F
KTsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVY
UEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVSX05BTUUpOwotICAgIHBjQ2xpZW50
ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVy
ZXIsIHBhcmFtZXRlcnMsCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyogY2Fw
dHVyZVRvVGV4dHVyZSAqLyksIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0KLSAgICAv
LyBXYWl0IGZvciBsb2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1v
dGUgU0RQLgotICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9y
TG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBFR0wgY29udGV4
dCB1c2VkIGZvciBjcmVhdGluZyB0aGUgUGVlckNvbm5lY3Rpb25DbGllbnQuCi0gICAgLy8gU2lu
Y2UgY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQgaXMgYXN5bmNocm9ub3VzLCB3ZSBtdXN0IHdh
aXQgZm9yIHRoZSBsb2NhbAotICAgIC8vIFNlc3Npb25EZXNjcmlwdGlvbi4KLSAgICBlZ2xCYXNl
LnJlbGVhc2UoKTsKLSAgICBlZ2xCYXNlID0gbnVsbDsKLQotICAgIFNlc3Npb25EZXNjcmlwdGlv
biByZW1vdGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVz
Y3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2Ny
aXB0aW9uKTsKLSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwot
Ci0gICAgLy8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNv
bm5lY3Rpb24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dB
SVRfVElNRU9VVCkpOwotICAgIC8vIENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBm
cmFtZXMgd2VyZSByZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiTG9jYWwgdmlk
ZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkLiIsIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1l
c1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBm
cmFtZXMgd2VyZSBub3QgcmVuZGVyZWQuIiwKLSAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZv
ckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsK
LSAgICBhc3NlcnRUcnVlKHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQp
KTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0TG9vcGJhY2sgZG9uZS4iKTsKLSAgfQotCi0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrSDI2NENhcHR1cmVUb1RleHR1cmUoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19J
TlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRW5j
b2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlcXVpcmVzIEtJVEtBVCIpOwotICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBUT0RPKHBlcmtqKTogSWYgd2UgY2FuIGFsd2F5cyBj
YXB0dXJlIHRvIHRleHR1cmVzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIHRoZQotICAg
IC8vIGhhcmR3YXJlIGVuY29kZXIgc3VwcG9ydHMgdG8gZW5jb2RlIGZyb20gYSB0ZXh0dXJlLgot
ICAgIGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5pc0gyNjRId1N1cHBvcnRlZFVzaW5nVGV4
dHVyZXMoKSkgewotICAgICAgTG9nLmkoVEFHLCAiSDI2NCBlbmNvZGUgdG8gdGV4dHVyZXMgaXMg
bm90IHN1cHBvcnRlZC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rl
c3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19IMjY0KSwKLSAgICAg
ICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIodHJ1ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1
ZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIGRlZmF1bHQg
ZnJvbnQgY2FtZXJhIGNhbiBiZSBzd2l0Y2hlZCB0byBiYWNrIGNhbWVyYSBhbmQgdGhlbgotICAv
LyBhZ2FpbiB0byBmcm9udCBjYW1lcmEuCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVz
dENhbWVyYVN3aXRjaCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQo
VEFHLCAidGVzdENhbWVyYVN3aXRjaCIpOwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAgIE1v
Y2tSZW5kZXJlciBsb2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURF
T19GUkFNRVMsIExPQ0FMX1JFTkRFUkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVS
ZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVf
UkVOREVSRVJfTkFNRSk7Ci0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xp
ZW50KGxvY2FsUmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJhbWV0
ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNh
cHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdh
aXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBT
RFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2Nh
bFNEUChXQUlUX1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2RwID0g
bmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUu
ZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0gICAg
cGNDbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdhaXQg
Zm9yIElDRSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZhaWx1
cmUuIiwgd2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQpKTsK
LQotICAgIC8vIENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBy
ZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVu
ZGVyZWQgYmVmb3JlIGNhbWVyYSBzd2l0Y2guIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0
Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3Rl
IHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHN3aXRjaC4iLAot
ICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VU
KSk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IENBTUVSQV9TV0lUQ0hfQVRURU1QVFM7IGkr
KykgewotICAgICAgLy8gVHJ5IHRvIHN3aXRjaCBjYW1lcmEKLSAgICAgIHBjQ2xpZW50LnN3aXRj
aENhbWVyYSgpOwotCi0gICAgICAvLyBSZXNldCB2aWRlbyByZW5kZXJzIGFuZCBjaGVjayB0aGF0
IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzCi0gICAgICAvLyB3ZXJlIHJlbmRlcmVkIGFm
dGVyIGNhbWVyYSBzd2l0Y2guCi0gICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJ
REVPX0ZSQU1FUyk7Ci0gICAgICByZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19G
UkFNRVMpOwotICAgICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJl
bmRlcmVkIGFmdGVyIGNhbWVyYSBzd2l0Y2guIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVyLndh
aXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUoIlJl
bW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIgY2FtZXJhIHN3aXRjaC4i
LAotICAgICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJ
TUVPVVQpKTsKLSAgICB9Ci0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKHdh
aXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcs
ICJ0ZXN0Q2FtZXJhU3dpdGNoIGRvbmUuIik7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYgdmlkZW8g
c291cmNlIGNhbiBiZSByZXN0YXJ0ZWQgLSBzaW11bGF0ZSBhcHAgZ29lcyB0bwotICAvLyBiYWNr
Z3JvdW5kIGFuZCBiYWNrIHRvIGZvcmVncm91bmQuCi0gIC8vIERpc2FibGVkIGJlY2F1c2Ugb2Yg
aHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTY0NzgK
LSAgQEZsYWt5VGVzdAotICAvL0BTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFZpZGVvU291
cmNlUmVzdGFydCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFH
LCAidGVzdFZpZGVvU291cmNlUmVzdGFydCIpOwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAg
IE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9W
SURFT19GUkFNRVMsIExPQ0FMX1JFTkRFUkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1v
dGVSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1P
VEVfUkVOREVSRVJfTkFNRSk7Ci0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9u
Q2xpZW50KGxvY2FsUmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJh
bWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVy
YUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8v
IFdhaXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90
ZSBTRFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JM
b2NhbFNEUChXQUlUX1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2Rw
ID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5
cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0g
ICAgcGNDbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdh
aXQgZm9yIElDRSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZh
aWx1cmUuIiwgd2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQp
KTsKLQotICAgIC8vIENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2Vy
ZSByZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3Qg
cmVuZGVyZWQgYmVmb3JlIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53
YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVt
b3RlIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgdmlkZW8gcmVzdGFydC4i
LAotICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1F
T1VUKSk7Ci0KLSAgICAvLyBTdG9wIGFuZCB0aGVuIHN0YXJ0IHZpZGVvIHNvdXJjZSBhIGZldyB0
aW1lcy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IFZJREVPX1JFU1RBUlRfQVRURU1QVFM7IGkr
KykgewotICAgICAgcGNDbGllbnQuc3RvcFZpZGVvU291cmNlKCk7Ci0gICAgICBUaHJlYWQuc2xl
ZXAoVklERU9fUkVTVEFSVF9USU1FT1VUKTsKLSAgICAgIHBjQ2xpZW50LnN0YXJ0VmlkZW9Tb3Vy
Y2UoKTsKLQotICAgICAgLy8gUmVzZXQgdmlkZW8gcmVuZGVycyBhbmQgY2hlY2sgdGhhdCBsb2Nh
bCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1lcwotICAgICAgLy8gd2VyZSByZW5kZXJlZCBhZnRlciB2
aWRlbyByZXN0YXJ0LgotICAgICAgbG9jYWxSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19G
UkFNRVMpOwotICAgICAgcmVtb3RlUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVT
KTsKLSAgICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJl
ZCBhZnRlciB2aWRlbyByZXN0YXJ0LiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9y
RnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVlKCJSZW1vdGUg
dmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIHZpZGVvIHJlc3RhcnQuIiwKLSAg
ICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VU
KSk7Ci0gICAgfQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9y
UGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVz
dFZpZGVvU291cmNlUmVzdGFydCBkb25lLiIpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIGNhcHR1
cmUgZm9ybWF0IGNhbiBiZSBjaGFuZ2VkIG9uIGZseSBhbmQgZGVjb2RlciBjYW4gYmUgcmVzZXQg
cHJvcGVybHkuCi0gIC8vIERpc2FibGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9idWdzLmNocm9taXVt
Lm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTY0NzgKLSAgQEZsYWt5VGVzdAotICAvL0BT
bWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhcHR1cmVGb3JtYXRDaGFuZ2UoKSB0aHJvd3Mg
SW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExvZy5kKFRBRywgInRlc3RDYXB0dXJlRm9ybWF0
Q2hhbmdlIik7Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwotCi0gICAgTW9ja1JlbmRlcmVyIGxvY2Fs
UmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxf
UkVOREVSRVJfTkFNRSk7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyID0gbmV3IE1v
Y2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9SRU5ERVJFUl9OQU1FKTsK
LQotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJl
ciwgcmVtb3RlUmVuZGVyZXIsCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwo
VklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyog
Y2FwdHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQ
LCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQgYXMgcmVtb3RlIFNEUC4KLSAgICBhc3NlcnRU
cnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9V
VCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiByZW1vdGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2Ny
aXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9y
bSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0aW9uKTsKLSAgICBwY0NsaWVudC5zZXRSZW1v
dGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0gICAgLy8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rp
b24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rpb24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNl
Q29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gQ2hlY2sg
dGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRlcmVkLgotICAgIGFz
c2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2Ft
ZXJhIHJlc29sdXRpb24gY2hhbmdlLiIsCi0gICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZy
YW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRl
byBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3JlIGNhbWVyYSByZXNvbHV0aW9uIGNoYW5n
ZS4iLAotICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9U
SU1FT1VUKSk7Ci0KLSAgICAvLyBDaGFuZ2UgY2FwdHVyZSBvdXRwdXQgZm9ybWF0IGEgZmV3IHRp
bWVzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMiAqIENBUFRVUkVfRk9STUFUX0NIQU5HRV9B
VFRFTVBUUzsgaSsrKSB7Ci0gICAgICBpZiAoaSAlIDIgPT0gMCkgewotICAgICAgICBwY0NsaWVu
dC5jaGFuZ2VDYXB0dXJlRm9ybWF0KFdJRFRIX1ZHQSwgSEVJR0hUX1ZHQSwgTUFYX1ZJREVPX0ZQ
Uyk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBwY0NsaWVudC5jaGFuZ2VDYXB0dXJlRm9ybWF0
KFdJRFRIX1FWR0EsIEhFSUdIVF9RVkdBLCBNQVhfVklERU9fRlBTKTsKLSAgICAgIH0KLQotICAg
ICAgLy8gUmVzZXQgdmlkZW8gcmVuZGVycyBhbmQgY2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3Rl
IHZpZGVvIGZyYW1lcwotICAgICAgLy8gd2VyZSByZW5kZXJlZCBhZnRlciBjYXB0dXJlIGZvcm1h
dCBjaGFuZ2UuCi0gICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1F
Uyk7Ci0gICAgICByZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwot
ICAgICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFm
dGVyIGNhcHR1cmUgZm9ybWF0IGNoYW5nZS4iLAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2Fp
dEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVt
b3RlIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciBjYXB0dXJlIGZvcm1hdCBj
aGFuZ2UuIiwKLSAgICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQo
V0FJVF9USU1FT1VUKSk7Ci0gICAgfQotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3Nl
cnRUcnVlKHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBM
b2cuZChUQUcsICJ0ZXN0Q2FwdHVyZUZvcm1hdENoYW5nZSBkb25lLiIpOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1ZpZGVvRmlsZVJlbmRlcmVyVGVz
dC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3Qv
VmlkZW9GaWxlUmVuZGVyZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvVmlkZW9GaWxlUmVuZGVyZXJUZXN0LmphdmEJKG5v
bmV4aXN0ZW50KQpAQCAtMSw3OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBX
ZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdl
IG9yZy53ZWJydGM7Ci0KLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENh
c2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVz
dDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwot
aW1wb3J0IGphdmEuaW8uUmFuZG9tQWNjZXNzRmlsZTsKLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFk
OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZh
Lm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLlJhbmRvbTsKLQotcHVibGljIGNsYXNzIFZpZGVvRmlsZVJlbmRlcmVyVGVzdCBleHRl
bmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0WXV2UmVuZGVyaW5nVG9GaWxlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJ
T0V4Y2VwdGlvbiB7Ci0gICAgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoKTsKLSAg
ICBmaW5hbCBTdHJpbmcgdmlkZW9PdXRQYXRoID0gIi9zZGNhcmQvY2hyb21pdW1fdGVzdHNfcm9v
dC90ZXN0dmlkZW9vdXQueTRtIjsKLSAgICBpbnQgZnJhbWVXaWR0aCA9IDQ7Ci0gICAgaW50IGZy
YW1lSGVpZ2h0ID0gNDsKLSAgICBWaWRlb0ZpbGVSZW5kZXJlciB2aWRlb0ZpbGVSZW5kZXJlciA9
Ci0gICAgICAgIG5ldyBWaWRlb0ZpbGVSZW5kZXJlcih2aWRlb091dFBhdGgsIGZyYW1lV2lkdGgs
IGZyYW1lSGVpZ2h0LCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotCi0gICAgU3RyaW5n
W10gZnJhbWVzID0gewotICAgICAgICAiVEhJUyBJUyBKVVNUIFNPTUUgVEVYVCB4IiwgIlRIRSBT
RUNPTkQgRlJBTUUgcXdlcnR5LiIsICJIRVJFIElTIFRIRSBUSFJJRCBGUkFNRSEifTsKLQotICAg
IGZvciAoU3RyaW5nIGZyYW1lU3RyIDogZnJhbWVzKSB7Ci0gICAgICBpbnRbXSBwbGFuZVNpemVz
ID0gewotICAgICAgICAgIGZyYW1lV2lkdGggKiBmcmFtZVdpZHRoLCBmcmFtZVdpZHRoICogZnJh
bWVIZWlnaHQgLyA0LCBmcmFtZVdpZHRoICogZnJhbWVIZWlnaHQgLyA0fTsKLQotICAgICAgYnl0
ZVtdIGZyYW1lQnl0ZXMgPSBmcmFtZVN0ci5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVTX0FT
Q0lJKTsKLSAgICAgIEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclszXTsK
LSAgICAgIGludCBwb3MgPSAwOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsK
LSAgICAgICAgeXV2UGxhbmVzW2ldID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChwbGFuZVNp
emVzW2ldKTsKLSAgICAgICAgeXV2UGxhbmVzW2ldLnB1dChmcmFtZUJ5dGVzLCBwb3MsIHBsYW5l
U2l6ZXNbaV0pOwotICAgICAgICBwb3MgKz0gcGxhbmVTaXplc1tpXTsKLSAgICAgIH0KLQotICAg
ICAgaW50W10geXV2U3RyaWRlcyA9IHtmcmFtZVdpZHRoLCBmcmFtZVdpZHRoIC8gMiwgZnJhbWVX
aWR0aCAvIDJ9OwotCi0gICAgICBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSA9Ci0gICAg
ICAgICAgbmV3IFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lKGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0
LCAwLCB5dXZTdHJpZGVzLCB5dXZQbGFuZXMsIDApOwotCi0gICAgICB2aWRlb0ZpbGVSZW5kZXJl
ci5yZW5kZXJGcmFtZShmcmFtZSk7Ci0gICAgfQotICAgIHZpZGVvRmlsZVJlbmRlcmVyLnJlbGVh
c2UoKTsKLQotICAgIFJhbmRvbUFjY2Vzc0ZpbGUgd3JpdHRlbkZpbGUgPSBuZXcgUmFuZG9tQWNj
ZXNzRmlsZSh2aWRlb091dFBhdGgsICJyIik7Ci0gICAgdHJ5IHsKLSAgICAgIGludCBsZW5ndGgg
PSAoaW50KSB3cml0dGVuRmlsZS5sZW5ndGgoKTsKLSAgICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5
dGVbbGVuZ3RoXTsKLSAgICAgIHdyaXR0ZW5GaWxlLnJlYWRGdWxseShkYXRhKTsKLSAgICAgIFN0
cmluZyBmaWxlQ29udGVudCA9IG5ldyBTdHJpbmcoZGF0YSwgU3RhbmRhcmRDaGFyc2V0cy5VU19B
U0NJSSk7Ci0gICAgICBTdHJpbmcgZXhwZWN0ZWQgPSAiWVVWNE1QRUcyIEM0MjAgVzQgSDQgSXAg
RjMwOjEgQTE6MVxuIgotICAgICAgICAgICsgIkZSQU1FXG4iCi0gICAgICAgICAgKyAiVEhJUyBJ
UyBKVVNUIFNPTUUgVEVYVCB4RlJBTUVcbiIKLSAgICAgICAgICArICJUSEUgU0VDT05EIEZSQU1F
IHF3ZXJ0eS5GUkFNRVxuIgotICAgICAgICAgICsgIkhFUkUgSVMgVEhFIFRIUklEIEZSQU1FISI7
Ci0gICAgICBhc3NlcnRFcXVhbHMoZXhwZWN0ZWQsIGZpbGVDb250ZW50KTsKLSAgICB9IGZpbmFs
bHkgewotICAgICAgd3JpdHRlbkZpbGUuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBuZXcgRmlsZSh2
aWRlb091dFBhdGgpLmRlbGV0ZSgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBz
cG90L2FwcHJ0Yy90ZXN0L2NhcHR1cmV0ZXN0dmlkZW8ueTRtCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0
cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRlby55NG0JKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVy
ZXRlc3R2aWRlby55NG0JKG5vbmV4aXN0ZW50KQpAQCAtMSw1ICswLDAgQEAKLVlVVjRNUEVHMiBD
NDIwIFc0IEg0IElwIEYzMDoxIEExOjEKLUZSQU1FCi1USElTIElTIEpVU1QgU09NRSBURVhUIHhG
UkFNRQotVEhFIFNFQ09ORCBGUkFNRSBxd2VydHkuRlJBTUUKLUhFUkUgSVMgVEhFIFRIUklEIEZS
QU1FIQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9GaWxlVmlkZW9D
YXB0dXJlclRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2Fw
cHJ0Yy90ZXN0L0ZpbGVWaWRlb0NhcHR1cmVyVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRy
b2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L0ZpbGVWaWRlb0NhcHR1cmVyVGVz
dC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IDIwMTYgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRjLnRlc3Q7Ci0KLWltcG9ydCBhbmRyb2lkLnRl
c3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVp
bGRlci5hbm5vdGF0aW9uLkxhcmdlVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWls
ZGVyLmFubm90YXRpb24uTWVkaXVtVGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWls
ZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5GaWxlVmlkZW9D
YXB0dXJlcjsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7Ci0KLWltcG9ydCBqYXZh
LmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5UaHJlYWQ7Ci1pbXBvcnQgamF2YS5u
aW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7
Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLQotcHVibGljIGNsYXNzIEZpbGVWaWRlb0NhcHR1
cmVyVGVzdCBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIHsKLSAgcHJpdmF0ZSBzdGF0
aWMgY2xhc3MgRnJhbWUgewotICAgIHB1YmxpYyBieXRlW10gZGF0YTsKLSAgICBwdWJsaWMgaW50
IHdpZHRoOwotICAgIHB1YmxpYyBpbnQgaGVpZ2h0OwotICB9Ci0KLSAgcHVibGljIGNsYXNzIE1v
Y2tDYXB0dXJlck9ic2VydmVyIGltcGxlbWVudHMgVmlkZW9DYXB0dXJlci5DYXB0dXJlck9ic2Vy
dmVyIHsKLSAgICBwcml2YXRlIGZpbmFsIEFycmF5TGlzdDxGcmFtZT4gZnJhbWVEYXRhcyA9IG5l
dyBBcnJheUxpc3Q8RnJhbWU+KCk7Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBv
bkNhcHR1cmVyU3RhcnRlZChib29sZWFuIHN1Y2Nlc3MpIHsKLSAgICAgIGFzc2VydFRydWUoc3Vj
Y2Vzcyk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJl
clN0b3BwZWQoKSB7Ci0gICAgICAvLyBFbXB0eSBvbiBwdXJwb3NlLgotICAgIH0KLQotICAgIEBP
dmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBvbkJ5dGVCdWZmZXJGcmFtZUNh
cHR1cmVkKAotICAgICAgICBieXRlW10gZGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQg
cm90YXRpb24sIGxvbmcgdGltZVN0YW1wKSB7Ci0gICAgICBGcmFtZSBmcmFtZSA9IG5ldyBGcmFt
ZSgpOwotICAgICAgZnJhbWUuZGF0YSA9IGRhdGE7Ci0gICAgICBmcmFtZS53aWR0aCA9IHdpZHRo
OwotICAgICAgZnJhbWUuaGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgYXNzZXJ0VHJ1ZShkYXRhLmxl
bmd0aCAhPSAwKTsKLSAgICAgIGZyYW1lRGF0YXMuYWRkKGZyYW1lKTsKLSAgICAgIG5vdGlmeSgp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uVGV4dHVyZUZyYW1l
Q2FwdHVyZWQoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgb2VzVGV4dHVyZUlkLAotICAgICAg
ICBmbG9hdFtdIHRyYW5zZm9ybU1hdHJpeCwgaW50IHJvdGF0aW9uLCBsb25nIHRpbWVzdGFtcCkg
ewotICAgICAgLy8gRW1wdHkgb24gcHVycG9zZS4KLSAgICB9Ci0KLSAgICBwdWJsaWMgc3luY2hy
b25pemVkIEFycmF5TGlzdDxGcmFtZT4gZ2V0TWluaW11bUZyYW1lc0Jsb2NraW5nKGludCBtaW5G
cmFtZXMpCi0gICAgICAgIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICB3aGls
ZSAoZnJhbWVEYXRhcy5zaXplKCkgPCBtaW5GcmFtZXMpIHsKLSAgICAgICAgd2FpdCgpOwotICAg
ICAgfQotICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8RnJhbWU+KGZyYW1lRGF0YXMpOwotICAg
IH0KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFZpZGVvQ2FwdHVyZUZy
b21GaWxlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAg
ZmluYWwgaW50IEZSQU1FX1dJRFRIID0gNDsKLSAgICBmaW5hbCBpbnQgRlJBTUVfSEVJR0hUID0g
NDsKLSAgICBmaW5hbCBGaWxlVmlkZW9DYXB0dXJlciBmaWxlVmlkZW9DYXB0dXJlciA9IG5ldyBG
aWxlVmlkZW9DYXB0dXJlcigKLSAgICAgICAgIi9zZGNhcmQvY2hyb21pdW1fdGVzdHNfcm9vdC93
ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC8i
Ci0gICAgICAgICsgImNhcHR1cmV0ZXN0dmlkZW8ueTRtIik7Ci0gICAgZmluYWwgTW9ja0NhcHR1
cmVyT2JzZXJ2ZXIgY2FwdHVyZXJPYnNlcnZlciA9IG5ldyBNb2NrQ2FwdHVyZXJPYnNlcnZlcigp
OwotICAgIGZpbGVWaWRlb0NhcHR1cmVyLmluaXRpYWxpemUobnVsbCwgbnVsbCwgY2FwdHVyZXJP
YnNlcnZlcik7Ci0gICAgZmlsZVZpZGVvQ2FwdHVyZXIuc3RhcnRDYXB0dXJlKEZSQU1FX1dJRFRI
LCBGUkFNRV9IRUlHSFQsIDMzKTsKLQotICAgIGZpbmFsIFN0cmluZ1tdIGV4cGVjdGVkRnJhbWVz
ID0gewotICAgICAgICAiVEhJUyBJUyBKVVNUIFNPTUUgVEVYVCB4IiwgIlRIRSBTRUNPTkQgRlJB
TUUgcXdlcnR5LiIsICJIRVJFIElTIFRIRSBUSFJJRCBGUkFNRSEifTsKLQotICAgIGZpbmFsIEFy
cmF5TGlzdDxGcmFtZT4gZnJhbWVEYXRhczsKLSAgICBmcmFtZURhdGFzID0gY2FwdHVyZXJPYnNl
cnZlci5nZXRNaW5pbXVtRnJhbWVzQmxvY2tpbmcoZXhwZWN0ZWRGcmFtZXMubGVuZ3RoKTsKLQot
ICAgIGFzc2VydEVxdWFscyhleHBlY3RlZEZyYW1lcy5sZW5ndGgsIGZyYW1lRGF0YXMuc2l6ZSgp
KTsKLQotICAgIGZpbGVWaWRlb0NhcHR1cmVyLnN0b3BDYXB0dXJlKCk7Ci0gICAgZmlsZVZpZGVv
Q2FwdHVyZXIuZGlzcG9zZSgpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZEZy
YW1lcy5sZW5ndGg7ICsraSkgewotICAgICAgRnJhbWUgZnJhbWUgPSBmcmFtZURhdGFzLmdldChp
KTsKLQotICAgICAgYXNzZXJ0RXF1YWxzKEZSQU1FX1dJRFRILCBmcmFtZS53aWR0aCk7Ci0gICAg
ICBhc3NlcnRFcXVhbHMoRlJBTUVfSEVJR0hULCBmcmFtZS5oZWlnaHQpOwotICAgICAgYXNzZXJ0
RXF1YWxzKEZSQU1FX1dJRFRIICogRlJBTUVfSEVJR0hUICogMyAvIDIsIGZyYW1lLmRhdGEubGVu
Z3RoKTsKLQotICAgICAgYnl0ZVtdIGV4cGVjdGVkTlYxMkJ5dGVzID0gbmV3IGJ5dGVbZnJhbWUu
ZGF0YS5sZW5ndGhdOwotICAgICAgRmlsZVZpZGVvQ2FwdHVyZXIubmF0aXZlSTQyMFRvTlYyMShl
eHBlY3RlZEZyYW1lc1tpXS5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVTX0FTQ0lJKSwKLSAg
ICAgICAgICBGUkFNRV9XSURUSCwgRlJBTUVfSEVJR0hULCBleHBlY3RlZE5WMTJCeXRlcyk7Ci0K
LSAgICAgIGFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhleHBlY3RlZE5WMTJCeXRlcywgZnJhbWUu
ZGF0YSkpOwotICAgIH0KLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvdGVzdC9QZWVyQ29ubmVjdGlvbkNsaWVudFRlc3QuamF2YQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVz
dHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1BlZXJDb25uZWN0aW9uQ2xpZW50VGVzdC5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90
ZXN0L1BlZXJDb25uZWN0aW9uQ2xpZW50VGVzdC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNjc4
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTQgVGhlIFdlYlJUQyBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwcHNwb3QuYXBwcnRj
LnRlc3Q7Ci0KLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuQXBwUlRDQ2xpZW50LlNpZ25hbGlu
Z1BhcmFtZXRlcnM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25uZWN0aW9uQ2xp
ZW50OwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlvbkNsaWVudC5QZWVy
Q29ubmVjdGlvbkV2ZW50czsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNvbm5lY3Rp
b25DbGllbnQuUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotCi1pbXBvcnQgYW5kcm9pZC5vcy5C
dWlsZDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuRmxha3lUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVz
dC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWls
ZGVyLmFubm90YXRpb24uU21hbGxUZXN0OwotaW1wb3J0IGFuZHJvaWQudXRpbC5Mb2c7Ci0KLWlt
cG9ydCBvcmcud2VicnRjLkNhbWVyYTFFbnVtZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuQ2Ft
ZXJhMkVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmFFbnVtZXJhdG9yOwotaW1w
b3J0IG9yZy53ZWJydGMuRWdsQmFzZTsKLWltcG9ydCBvcmcud2VicnRjLkljZUNhbmRpZGF0ZTsK
LWltcG9ydCBvcmcud2VicnRjLk1lZGlhQ29kZWNWaWRlb0VuY29kZXI7Ci1pbXBvcnQgb3JnLndl
YnJ0Yy5QZWVyQ29ubmVjdGlvbjsKLWltcG9ydCBvcmcud2VicnRjLlBlZXJDb25uZWN0aW9uRmFj
dG9yeTsKLWltcG9ydCBvcmcud2VicnRjLlNlc3Npb25EZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcu
d2VicnRjLlN0YXRzUmVwb3J0OwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9DYXB0dXJlcjsKLWlt
cG9ydCBvcmcud2VicnRjLlZpZGVvUmVuZGVyZXI7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlua2Vk
TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVu
dC5Db3VudERvd25MYXRjaDsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNl
cnZpY2U7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwotaW1wb3J0IGph
dmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi1wdWJsaWMgY2xhc3MgUGVlckNvbm5lY3Rp
b25DbGllbnRUZXN0Ci0gICAgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSBpbXBsZW1l
bnRzIFBlZXJDb25uZWN0aW9uRXZlbnRzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFRBRyA9ICJSVENDbGllbnRUZXN0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IElDRV9D
T05ORUNUSU9OX1dBSVRfVElNRU9VVCA9IDEwMDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgV0FJVF9USU1FT1VUID0gNzAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENBTUVS
QV9TV0lUQ0hfQVRURU1QVFMgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVklERU9f
UkVTVEFSVF9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQVBUVVJF
X0ZPUk1BVF9DSEFOR0VfQVRURU1QVFMgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
VklERU9fUkVTVEFSVF9USU1FT1VUID0gNTAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQg
RVhQRUNURURfVklERU9fRlJBTUVTID0gMTA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBWSURFT19DT0RFQ19WUDggPSAiVlA4IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
IFZJREVPX0NPREVDX1ZQOSA9ICJWUDkiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VklERU9fQ09ERUNfSDI2NCA9ICJIMjY0IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEFV
RElPX1JVTl9USU1FT1VUID0gMTAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExP
Q0FMX1JFTkRFUkVSX05BTUUgPSAiTG9jYWwgcmVuZGVyZXIiOwotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgUkVNT1RFX1JFTkRFUkVSX05BTUUgPSAiUmVtb3RlIHJlbmRlcmVyIjsKLQot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1ZJREVPX0ZQUyA9IDMwOwotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBpbnQgV0lEVEhfVkdBID0gNjQwOwotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgSEVJR0hUX1ZHQSA9IDQ4MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdJRFRI
X1FWR0EgPSAzMjA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIRUlHSFRfUVZHQSA9IDI0
MDsKLQotICAvLyBUaGUgcGVlciBjb25uZWN0aW9uIGNsaWVudCBpcyBhc3N1bWVkIHRvIGJlIHRo
cmVhZCBzYWZlIGluIGl0c2VsZjsgdGhlCi0gIC8vIHJlZmVyZW5jZSBpcyB3cml0dGVuIGJ5IHRo
ZSB0ZXN0IHRocmVhZCBhbmQgcmVhZCBieSB3b3JrZXIgdGhyZWFkcy4KLSAgcHJpdmF0ZSB2b2xh
dGlsZSBQZWVyQ29ubmVjdGlvbkNsaWVudCBwY0NsaWVudDsKLSAgcHJpdmF0ZSB2b2xhdGlsZSBi
b29sZWFuIGxvb3BiYWNrOwotCi0gIC8vIEVHTCBjb250ZXh0IHRoYXQgY2FuIGJlIHVzZWQgYnkg
aGFyZHdhcmUgdmlkZW8gZGVjb2RlcnMgdG8gZGVjb2RlIHRvIGEgdGV4dHVyZS4KLSAgcHJpdmF0
ZSBFZ2xCYXNlIGVnbEJhc2U7Ci0KLSAgLy8gVGhlc2UgYXJlIHByb3RlY3RlZCBieSB0aGVpciBy
ZXNwZWN0aXZlIGV2ZW50IG9iamVjdHMuCi0gIHByaXZhdGUgRXhlY3V0b3JTZXJ2aWNlIHNpZ25h
bGluZ0V4ZWN1dG9yOwotICBwcml2YXRlIGJvb2xlYW4gaXNDbG9zZWQ7Ci0gIHByaXZhdGUgYm9v
bGVhbiBpc0ljZUNvbm5lY3RlZDsKLSAgcHJpdmF0ZSBTZXNzaW9uRGVzY3JpcHRpb24gbG9jYWxT
ZHA7Ci0gIHByaXZhdGUgTGlzdDxJY2VDYW5kaWRhdGU+IGljZUNhbmRpZGF0ZXMgPSBuZXcgTGlu
a2VkTGlzdDxJY2VDYW5kaWRhdGU+KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGxvY2FsU2Rw
RXZlbnQgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGljZUNhbmRpZGF0
ZUV2ZW50ID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBpY2VDb25uZWN0
ZWRFdmVudCA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgY2xvc2VFdmVu
dCA9IG5ldyBPYmplY3QoKTsKLQotICAvLyBNb2NrIHJlbmRlcmVyIGltcGxlbWVudGF0aW9uLgot
ICBwcml2YXRlIHN0YXRpYyBjbGFzcyBNb2NrUmVuZGVyZXIgaW1wbGVtZW50cyBWaWRlb1JlbmRl
cmVyLkNhbGxiYWNrcyB7Ci0gICAgLy8gVGhlc2UgYXJlIHByb3RlY3RlZCBieSAndGhpcycgc2lu
Y2Ugd2UgZ2V0cyBjYWxsZWQgZnJvbSB3b3JrZXIgdGhyZWFkcy4KLSAgICBwcml2YXRlIFN0cmlu
ZyByZW5kZXJlck5hbWU7Ci0gICAgcHJpdmF0ZSBib29sZWFuIHJlbmRlckZyYW1lQ2FsbGVkID0g
ZmFsc2U7Ci0KLSAgICAvLyBUaHJlYWQtc2FmZSBpbiBpdHNlbGYuCi0gICAgcHJpdmF0ZSBDb3Vu
dERvd25MYXRjaCBkb25lUmVuZGVyaW5nOwotCi0gICAgcHVibGljIE1vY2tSZW5kZXJlcihpbnQg
ZXhwZWN0ZWRGcmFtZXMsIFN0cmluZyByZW5kZXJlck5hbWUpIHsKLSAgICAgIHRoaXMucmVuZGVy
ZXJOYW1lID0gcmVuZGVyZXJOYW1lOwotICAgICAgcmVzZXQoZXhwZWN0ZWRGcmFtZXMpOwotICAg
IH0KLQotICAgIC8vIFJlc2V0cyByZW5kZXIgdG8gd2FpdCBmb3IgbmV3IGFtb3VudCBvZiB2aWRl
byBmcmFtZXMuCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KGludCBleHBlY3Rl
ZEZyYW1lcykgewotICAgICAgcmVuZGVyRnJhbWVDYWxsZWQgPSBmYWxzZTsKLSAgICAgIGRvbmVS
ZW5kZXJpbmcgPSBuZXcgQ291bnREb3duTGF0Y2goZXhwZWN0ZWRGcmFtZXMpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZW5kZXJGcmFtZShW
aWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSkgewotICAgICAgaWYgKCFyZW5kZXJGcmFtZUNh
bGxlZCkgewotICAgICAgICBpZiAocmVuZGVyZXJOYW1lICE9IG51bGwpIHsKLSAgICAgICAgICBM
b2cuZChUQUcsIHJlbmRlcmVyTmFtZSArICIgcmVuZGVyIGZyYW1lOiAiICsgZnJhbWUucm90YXRl
ZFdpZHRoKCkgKyAiIHggIgotICAgICAgICAgICAgICAgICAgKyBmcmFtZS5yb3RhdGVkSGVpZ2h0
KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIExvZy5kKFRBRywgIlJlbmRlciBmcmFt
ZTogIiArIGZyYW1lLnJvdGF0ZWRXaWR0aCgpICsgIiB4ICIgKyBmcmFtZS5yb3RhdGVkSGVpZ2h0
KCkpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgICByZW5kZXJGcmFtZUNhbGxlZCA9IHRydWU7
Ci0gICAgICBWaWRlb1JlbmRlcmVyLnJlbmRlckZyYW1lRG9uZShmcmFtZSk7Ci0gICAgICBkb25l
UmVuZGVyaW5nLmNvdW50RG93bigpOwotICAgIH0KLQotICAgIC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZG4ndCBob2xkIGFueSBsb2NrcyBvciB0b3VjaCBtZW1iZXIgdmFyaWFibGVzIHNpbmNlIGl0Ci0g
ICAgLy8gYmxvY2tzLgotICAgIHB1YmxpYyBib29sZWFuIHdhaXRGb3JGcmFtZXNSZW5kZXJlZChp
bnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgZG9uZVJl
bmRlcmluZy5hd2FpdCh0aW1lb3V0TXMsIFRpbWVVbml0Lk1JTExJU0VDT05EUyk7Ci0gICAgICBy
ZXR1cm4gKGRvbmVSZW5kZXJpbmcuZ2V0Q291bnQoKSA8PSAwKTsKLSAgICB9Ci0gIH0KLQotICAv
LyBQZWVyIGNvbm5lY3Rpb24gZXZlbnRzIGltcGxlbWVudGF0aW9uLgotICBAT3ZlcnJpZGUKLSAg
cHVibGljIHZvaWQgb25Mb2NhbERlc2NyaXB0aW9uKFNlc3Npb25EZXNjcmlwdGlvbiBzZHApIHsK
LSAgICBMb2cuZChUQUcsICJMb2NhbFNEUCB0eXBlOiAiICsgc2RwLnR5cGUpOwotICAgIHN5bmNo
cm9uaXplZCAobG9jYWxTZHBFdmVudCkgewotICAgICAgbG9jYWxTZHAgPSBzZHA7Ci0gICAgICBs
b2NhbFNkcEV2ZW50Lm5vdGlmeUFsbCgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBw
dWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZShmaW5hbCBJY2VDYW5kaWRhdGUgY2FuZGlkYXRlKSB7
Ci0gICAgc3luY2hyb25pemVkIChpY2VDYW5kaWRhdGVFdmVudCkgewotICAgICAgTG9nLmQoVEFH
LCAiSWNlQ2FuZGlkYXRlICMiICsgaWNlQ2FuZGlkYXRlcy5zaXplKCkgKyAiIDogIiArIGNhbmRp
ZGF0ZS50b1N0cmluZygpKTsKLSAgICAgIGlmIChsb29wYmFjaykgewotICAgICAgICAvLyBMb29w
YmFjayBsb2NhbCBJQ0UgY2FuZGlkYXRlIGluIGEgc2VwYXJhdGUgdGhyZWFkIHRvIGF2b2lkIGFk
ZGluZwotICAgICAgICAvLyByZW1vdGUgSUNFIGNhbmRpZGF0ZSBpbiBhIGxvY2FsIElDRSBjYW5k
aWRhdGUgY2FsbGJhY2suCi0gICAgICAgIHNpZ25hbGluZ0V4ZWN1dG9yLmV4ZWN1dGUobmV3IFJ1
bm5hYmxlKCkgewotICAgICAgICAgIEBPdmVycmlkZQotICAgICAgICAgIHB1YmxpYyB2b2lkIHJ1
bigpIHsKLSAgICAgICAgICAgIHBjQ2xpZW50LmFkZFJlbW90ZUljZUNhbmRpZGF0ZShjYW5kaWRh
dGUpOwotICAgICAgICAgIH0KLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBpY2VDYW5kaWRh
dGVzLmFkZChjYW5kaWRhdGUpOwotICAgICAgaWNlQ2FuZGlkYXRlRXZlbnQubm90aWZ5QWxsKCk7
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlQ2FuZGlkYXRl
c1JlbW92ZWQoZmluYWwgSWNlQ2FuZGlkYXRlW10gY2FuZGlkYXRlcykgewotICAgIC8vIFRPRE8o
aG9uZ2hhaXopOiBBZGQgdGhpcyBmb3IgdGVzdHMuCi0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVi
bGljIHZvaWQgb25JY2VDb25uZWN0ZWQoKSB7Ci0gICAgTG9nLmQoVEFHLCAiSUNFIENvbm5lY3Rl
ZCIpOwotICAgIHN5bmNocm9uaXplZCAoaWNlQ29ubmVjdGVkRXZlbnQpIHsKLSAgICAgIGlzSWNl
Q29ubmVjdGVkID0gdHJ1ZTsKLSAgICAgIGljZUNvbm5lY3RlZEV2ZW50Lm5vdGlmeUFsbCgpOwot
ICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZURpc2Nvbm5lY3Rl
ZCgpIHsKLSAgICBMb2cuZChUQUcsICJJQ0UgRGlzY29ubmVjdGVkIik7Ci0gICAgc3luY2hyb25p
emVkIChpY2VDb25uZWN0ZWRFdmVudCkgewotICAgICAgaXNJY2VDb25uZWN0ZWQgPSBmYWxzZTsK
LSAgICAgIGljZUNvbm5lY3RlZEV2ZW50Lm5vdGlmeUFsbCgpOwotICAgIH0KLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25uZWN0aW9uQ2xvc2VkKCkgewotICAgIExv
Zy5kKFRBRywgIlBlZXJDb25uZWN0aW9uIGNsb3NlZCIpOwotICAgIHN5bmNocm9uaXplZCAoY2xv
c2VFdmVudCkgewotICAgICAgaXNDbG9zZWQgPSB0cnVlOwotICAgICAgY2xvc2VFdmVudC5ub3Rp
ZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVy
Q29ubmVjdGlvbkVycm9yKFN0cmluZyBkZXNjcmlwdGlvbikgewotICAgIGZhaWwoIlBDIEVycm9y
OiAiICsgZGVzY3JpcHRpb24pOwotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9u
UGVlckNvbm5lY3Rpb25TdGF0c1JlYWR5KFN0YXRzUmVwb3J0W10gcmVwb3J0cykge30KLQotICAv
LyBIZWxwZXIgd2FpdCBmdW5jdGlvbnMuCi0gIHByaXZhdGUgYm9vbGVhbiB3YWl0Rm9yTG9jYWxT
RFAoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBzeW5j
aHJvbml6ZWQgKGxvY2FsU2RwRXZlbnQpIHsKLSAgICAgIGlmIChsb2NhbFNkcCA9PSBudWxsKSB7
Ci0gICAgICAgIGxvY2FsU2RwRXZlbnQud2FpdCh0aW1lb3V0TXMpOwotICAgICAgfQotICAgICAg
cmV0dXJuIChsb2NhbFNkcCAhPSBudWxsKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xl
YW4gd2FpdEZvckljZUNhbmRpZGF0ZXMoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBzeW5jaHJvbml6ZWQgKGljZUNhbmRpZGF0ZUV2ZW50KSB7Ci0gICAg
ICBpZiAoaWNlQ2FuZGlkYXRlcy5zaXplKCkgPT0gMCkgewotICAgICAgICBpY2VDYW5kaWRhdGVF
dmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4gKGljZUNhbmRpZGF0
ZXMuc2l6ZSgpID4gMCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHdhaXRGb3JJ
Y2VDb25uZWN0ZWQoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsK
LSAgICBzeW5jaHJvbml6ZWQgKGljZUNvbm5lY3RlZEV2ZW50KSB7Ci0gICAgICBpZiAoIWlzSWNl
Q29ubmVjdGVkKSB7Ci0gICAgICAgIGljZUNvbm5lY3RlZEV2ZW50LndhaXQodGltZW91dE1zKTsK
LSAgICAgIH0KLSAgICAgIGlmICghaXNJY2VDb25uZWN0ZWQpIHsKLSAgICAgICAgTG9nLmUoVEFH
LCAiSUNFIGNvbm5lY3Rpb24gZmFpbHVyZSIpOwotICAgICAgfQotCi0gICAgICByZXR1cm4gaXNJ
Y2VDb25uZWN0ZWQ7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHdhaXRGb3JQZWVy
Q29ubmVjdGlvbkNsb3NlZChpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIHN5bmNocm9uaXplZCAoY2xvc2VFdmVudCkgewotICAgICAgaWYgKCFpc0Nsb3Nl
ZCkgewotICAgICAgICBjbG9zZUV2ZW50LndhaXQodGltZW91dE1zKTsKLSAgICAgIH0KLSAgICAg
IHJldHVybiBpc0Nsb3NlZDsKLSAgICB9Ci0gIH0KLQotICBQZWVyQ29ubmVjdGlvbkNsaWVudCBj
cmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciwKLSAg
ICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciwgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJz
IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywKLSAgICAgIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0
dXJlciwgRWdsQmFzZS5Db250ZXh0IGVnbENvbnRleHQpIHsKLSAgICBMaXN0PFBlZXJDb25uZWN0
aW9uLkljZVNlcnZlcj4gaWNlU2VydmVycyA9IG5ldyBMaW5rZWRMaXN0PFBlZXJDb25uZWN0aW9u
LkljZVNlcnZlcj4oKTsKLSAgICBTaWduYWxpbmdQYXJhbWV0ZXJzIHNpZ25hbGluZ1BhcmFtZXRl
cnMgPQotICAgICAgICBuZXcgU2lnbmFsaW5nUGFyYW1ldGVycyhpY2VTZXJ2ZXJzLCB0cnVlLCAv
LyBpY2VTZXJ2ZXJzLCBpbml0aWF0b3IuCi0gICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCAv
LyBjbGllbnRJZCwgd3NzVXJsLCB3c3NQb3N0VXJsLgotICAgICAgICAgICAgbnVsbCwgbnVsbCk7
IC8vIG9mZmVyU2RwLCBpY2VDYW5kaWRhdGVzLgotCi0gICAgUGVlckNvbm5lY3Rpb25DbGllbnQg
Y2xpZW50ID0gUGVlckNvbm5lY3Rpb25DbGllbnQuZ2V0SW5zdGFuY2UoKTsKLSAgICBQZWVyQ29u
bmVjdGlvbkZhY3RvcnkuT3B0aW9ucyBvcHRpb25zID0gbmV3IFBlZXJDb25uZWN0aW9uRmFjdG9y
eS5PcHRpb25zKCk7Ci0gICAgb3B0aW9ucy5uZXR3b3JrSWdub3JlTWFzayA9IDA7Ci0gICAgb3B0
aW9ucy5kaXNhYmxlTmV0d29ya01vbml0b3IgPSB0cnVlOwotICAgIGNsaWVudC5zZXRQZWVyQ29u
bmVjdGlvbkZhY3RvcnlPcHRpb25zKG9wdGlvbnMpOwotICAgIGNsaWVudC5jcmVhdGVQZWVyQ29u
bmVjdGlvbkZhY3RvcnkoCi0gICAgICAgIGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENv
bnRleHQoKSwgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzLCB0aGlzKTsKLSAgICBjbGllbnQuY3Jl
YXRlUGVlckNvbm5lY3Rpb24oCi0gICAgICAgIGVnbENvbnRleHQsIGxvY2FsUmVuZGVyZXIsIHJl
bW90ZVJlbmRlcmVyLCB2aWRlb0NhcHR1cmVyLCBzaWduYWxpbmdQYXJhbWV0ZXJzKTsKLSAgICBj
bGllbnQuY3JlYXRlT2ZmZXIoKTsKLSAgICByZXR1cm4gY2xpZW50OwotICB9Ci0KLSAgcHJpdmF0
ZSBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgY3JlYXRlUGFyYW1ldGVyc0ZvckF1ZGlvQ2FsbCgp
IHsKLSAgICBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJz
ID0KLSAgICAgICAgbmV3IFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyhmYWxzZSwgLyogdmlkZW9D
YWxsRW5hYmxlZCAqLwotICAgICAgICAgICAgdHJ1ZSwgLyogbG9vcGJhY2sgKi8KLSAgICAgICAg
ICAgIGZhbHNlLCAvKiB0cmFjaW5nICovCi0gICAgICAgICAgICAvLyBWaWRlbyBjb2RlYyBwYXJh
bWV0ZXJzLgotICAgICAgICAgICAgMCwgLyogdmlkZW9XaWR0aCAqLwotICAgICAgICAgICAgMCwg
LyogdmlkZW9IZWlnaHQgKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvRnBzICovCi0gICAgICAg
ICAgICAwLCAvKiB2aWRlb1N0YXJ0Qml0cmF0ZSAqLwotICAgICAgICAgICAgIiIsIC8qIHZpZGVv
Q29kZWMgKi8KLSAgICAgICAgICAgIHRydWUsIC8qIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbiAq
LwotICAgICAgICAgICAgLy8gQXVkaW8gY29kZWMgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAs
IC8qIGF1ZGlvU3RhcnRCaXRyYXRlICovCi0gICAgICAgICAgICAiT1BVUyIsIC8qIGF1ZGlvQ29k
ZWMgKi8KLSAgICAgICAgICAgIGZhbHNlLCAvKiBub0F1ZGlvUHJvY2Vzc2luZyAqLwotICAgICAg
ICAgICAgZmFsc2UsIC8qIGFlY0R1bXAgKi8KLSAgICAgICAgICAgIGZhbHNlIC8qIHVzZU9wZW5T
TEVTICovLCBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJbkFFQyAqLywgZmFsc2UgLyogZGlzYWJsZUJ1
aWx0SW5BR0MgKi8sCi0gICAgICAgICAgICBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJbk5TICovLCBm
YWxzZSAvKiBlbmFibGVMZXZlbENvbnRyb2wgKi8pOwotCi0gICAgcmV0dXJuIHBlZXJDb25uZWN0
aW9uUGFyYW1ldGVyczsKLSAgfQotCi0gIHByaXZhdGUgVmlkZW9DYXB0dXJlciBjcmVhdGVDYW1l
cmFDYXB0dXJlcihib29sZWFuIGNhcHR1cmVUb1RleHR1cmUpIHsKLSAgICBmaW5hbCBib29sZWFu
IHVzZUNhbWVyYTIgPQotICAgICAgICBjYXB0dXJlVG9UZXh0dXJlICYmIENhbWVyYTJFbnVtZXJh
dG9yLmlzU3VwcG9ydGVkKGdldEluc3RydW1lbnRhdGlvbigpLmdldFRhcmdldENvbnRleHQoKSk7
Ci0KLSAgICBDYW1lcmFFbnVtZXJhdG9yIGVudW1lcmF0b3I7Ci0gICAgaWYgKHVzZUNhbWVyYTIp
IHsKLSAgICAgIGVudW1lcmF0b3IgPSBuZXcgQ2FtZXJhMkVudW1lcmF0b3IoZ2V0SW5zdHJ1bWVu
dGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgZW51bWVy
YXRvciA9IG5ldyBDYW1lcmExRW51bWVyYXRvcihjYXB0dXJlVG9UZXh0dXJlKTsKLSAgICB9Ci0g
ICAgU3RyaW5nIGRldmljZU5hbWUgPSBlbnVtZXJhdG9yLmdldERldmljZU5hbWVzKClbMF07Ci0g
ICAgcmV0dXJuIGVudW1lcmF0b3IuY3JlYXRlQ2FwdHVyZXIoZGV2aWNlTmFtZSwgbnVsbCk7Ci0g
IH0KLQotICBwcml2YXRlIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBjcmVhdGVQYXJhbWV0ZXJz
Rm9yVmlkZW9DYWxsKFN0cmluZyB2aWRlb0NvZGVjKSB7Ci0gICAgUGVlckNvbm5lY3Rpb25QYXJh
bWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyA9Ci0gICAgICAgIG5ldyBQZWVyQ29ubmVj
dGlvblBhcmFtZXRlcnModHJ1ZSwgLyogdmlkZW9DYWxsRW5hYmxlZCAqLwotICAgICAgICAgICAg
dHJ1ZSwgLyogbG9vcGJhY2sgKi8KLSAgICAgICAgICAgIGZhbHNlLCAvKiB0cmFjaW5nICovCi0g
ICAgICAgICAgICAvLyBWaWRlbyBjb2RlYyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgMCwgLyog
dmlkZW9XaWR0aCAqLwotICAgICAgICAgICAgMCwgLyogdmlkZW9IZWlnaHQgKi8KLSAgICAgICAg
ICAgIDAsIC8qIHZpZGVvRnBzICovCi0gICAgICAgICAgICAwLCAvKiB2aWRlb1N0YXJ0Qml0cmF0
ZSAqLwotICAgICAgICAgICAgdmlkZW9Db2RlYywgLyogdmlkZW9Db2RlYyAqLwotICAgICAgICAg
ICAgdHJ1ZSwgLyogdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uICovCi0gICAgICAgICAgICAvLyBB
dWRpbyBjb2RlYyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgMCwgLyogYXVkaW9TdGFydEJpdHJh
dGUgKi8KLSAgICAgICAgICAgICJPUFVTIiwgLyogYXVkaW9Db2RlYyAqLwotICAgICAgICAgICAg
ZmFsc2UsIC8qIG5vQXVkaW9Qcm9jZXNzaW5nICovCi0gICAgICAgICAgICBmYWxzZSwgLyogYWVj
RHVtcCAqLwotICAgICAgICAgICAgZmFsc2UgLyogdXNlT3BlblNMRVMgKi8sIGZhbHNlIC8qIGRp
c2FibGVCdWlsdEluQUVDICovLCBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJbkFHQyAqLywKLSAgICAg
ICAgICAgIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluTlMgKi8sIGZhbHNlIC8qIGVuYWJsZUxldmVs
Q29udHJvbCAqLyk7Ci0KLSAgICByZXR1cm4gcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzOwotICB9
Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIHNldFVwKCkgewotICAgIHNpZ25hbGluZ0V4
ZWN1dG9yID0gRXhlY3V0b3JzLm5ld1NpbmdsZVRocmVhZEV4ZWN1dG9yKCk7Ci0gICAgaWYgKEJ1
aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpFTExZX0JFQU5fTVIx
KSB7Ci0gICAgICBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoKTsKLSAgICB9Ci0gIH0KLQotICBA
T3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgdGVhckRvd24oKSB7Ci0gICAgc2lnbmFsaW5nRXhlY3V0
b3Iuc2h1dGRvd24oKTsKLSAgICBpZiAoZWdsQmFzZSAhPSBudWxsKSB7Ci0gICAgICBlZ2xCYXNl
LnJlbGVhc2UoKTsKLSAgICB9Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RTZXRMb2NhbE9mZmVyTWFrZXNWaWRlb0Zsb3dMb2NhbGx5KCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBMb2cuZChUQUcsICJ0ZXN0U2V0TG9jYWxPZmZlck1ha2VzVmlkZW9G
bG93TG9jYWxseSIpOwotICAgIE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVyID0gbmV3IE1vY2tS
ZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExPQ0FMX1JFTkRFUkVSX05BTUUpOwotICAg
IHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgbmV3
IE1vY2tSZW5kZXJlcigwLCBudWxsKSwKLSAgICAgICAgY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVv
Q2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihmYWxz
ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAgICAvLyBXYWl0IGZvciBsb2Nh
bCBTRFAgYW5kIGljZSBjYW5kaWRhdGVzIHNldCBldmVudHMuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9j
YWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlUX1RJTUVPVVQpKTsKLSAg
ICBhc3NlcnRUcnVlKCJJQ0UgY2FuZGlkYXRlcyB3ZXJlIG5vdCBnZW5lcmF0ZWQuIiwgd2FpdEZv
ckljZUNhbmRpZGF0ZXMoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0IGxvY2Fs
IHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUoCi0gICAgICAgICJM
b2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQuIiwgbG9jYWxSZW5kZXJlci53YWl0
Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICBwY0NsaWVudC5jbG9zZSgp
OwotICAgIGFzc2VydFRydWUoCi0gICAgICAgICJQZWVyQ29ubmVjdGlvbiBjbG9zZSBldmVudCB3
YXMgbm90IHJlY2VpdmVkLiIsIHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVP
VVQpKTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0U2V0TG9jYWxPZmZlck1ha2VzVmlkZW9GbG93TG9j
YWxseSBEb25lLiIpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRvTG9vcGJhY2tUZXN0KFBlZXJD
b25uZWN0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzLCBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVy
ZXIsCi0gICAgICBib29sZWFuIGRlY29kZVRvVGV4dHVyZSkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVu
ZGVyZXIgPSBudWxsOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9IG51bGw7Ci0g
ICAgaWYgKHBhcmFtZXRlcnMudmlkZW9DYWxsRW5hYmxlZCkgewotICAgICAgTG9nLmQoVEFHLCAi
dGVzdExvb3BiYWNrIGZvciB2aWRlbyAiICsgcGFyYW1ldGVycy52aWRlb0NvZGVjKTsKLSAgICAg
IGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywg
TE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAgICByZW1vdGVSZW5kZXJlciA9IG5ldyBNb2NrUmVu
ZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJfTkFNRSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgIExvZy5kKFRBRywgInRlc3RMb29wYmFjayBmb3IgYXVkaW8uIik7Ci0g
ICAgfQotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5k
ZXJlciwgcmVtb3RlUmVuZGVyZXIsIHBhcmFtZXRlcnMsIHZpZGVvQ2FwdHVyZXIsCi0gICAgICAg
IGRlY29kZVRvVGV4dHVyZSA/IGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSA6IG51bGwpOwot
Ci0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQg
YXMgcmVtb3RlIFNEUC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwg
d2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiBy
ZW1vdGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3Jp
cHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0
aW9uKTsKLSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0g
ICAgLy8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5l
Y3Rpb24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRf
VElNRU9VVCkpOwotCi0gICAgaWYgKHBhcmFtZXRlcnMudmlkZW9DYWxsRW5hYmxlZCkgewotICAg
ICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRl
cmVkLgotICAgICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRl
cmVkLiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJ
VF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUg
bm90IHJlbmRlcmVkLiIsCi0gICAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1Jl
bmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAvLyBGb3IgYXVkaW8g
anVzdCBzbGVlcCBmb3IgMSBzZWMuCi0gICAgICAvLyBUT0RPKGdsYXpuZXYpOiBjaGVjayBob3cg
d2UgY2FuIGRldGVjdCB0aGF0IHJlbW90ZSBhdWRpbyB3YXMgcmVuZGVyZWQuCi0gICAgICBUaHJl
YWQuc2xlZXAoQVVESU9fUlVOX1RJTUVPVVQpOwotICAgIH0KLQotICAgIHBjQ2xpZW50LmNsb3Nl
KCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1F
T1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVzdExvb3BiYWNrIGRvbmUuIik7Ci0gIH0KLQotICBA
U21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja0F1ZGlvKCkgdGhyb3dzIEludGVy
cnVwdGVkRXhjZXB0aW9uIHsKLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9y
QXVkaW9DYWxsKCksIG51bGwsIGZhbHNlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQot
ICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOCgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0Zv
clZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJl
cihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgZmFsc2UgLyogZGVjb2RlVG9UZXh0dXJl
ICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA5
KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBkb0xvb3BiYWNrVGVzdChjcmVh
dGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOSksCi0gICAgICAgIGNyZWF0
ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBmYWxzZSAvKiBk
ZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0TG9vcGJhY2tIMjY0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBkb0xv
b3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX0gyNjQp
LAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJl
ICovKSwgZmFsc2UgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QK
LSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA4RGVjb2RlVG9UZXh0dXJlKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVp
bGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0byB0
ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLCByZXF1aXJlcyBTREsgdmVyc2lvbiAxOS4iKTsKLSAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0Zv
clZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJl
cihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNvZGVUb1RleHR1cmUg
Ki8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDlE
ZWNvZGVUb1RleHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChC
dWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAg
ICAgTG9nLmkoVEFHLCAiRGVjb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQsIHJlcXVp
cmVzIFNESyB2ZXJzaW9uIDE5LiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkb0xvb3Bi
YWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX1ZQOSksCi0g
ICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8p
LCB0cnVlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1
YmxpYyB2b2lkIHRlc3RMb29wYmFja0gyNjREZWNvZGVUb1RleHR1cmUoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5W
RVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRGVjb2RlIHRvIHRleHR1
cmVzIGlzIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVzIFNESyB2ZXJzaW9uIDE5LiIpOwotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlk
ZW9DYWxsKFZJREVPX0NPREVDX0gyNjQpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihm
YWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8p
OwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDhDYXB0
dXJlVG9UZXh0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVp
bGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAg
IExvZy5pKFRBRywgIkVuY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiBSZXF1aXJl
cyBTREsgdmVyc2lvbiAxOSIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBUT0RPKHBl
cmtqKTogSWYgd2UgY2FuIGFsd2F5cyBjYXB0dXJlIHRvIHRleHR1cmVzLCB0aGVyZSBpcyBubyBu
ZWVkIHRvIGNoZWNrIGlmIHRoZQotICAgIC8vIGhhcmR3YXJlIGVuY29kZXIgc3VwcG9ydHMgdG8g
ZW5jb2RlIGZyb20gYSB0ZXh0dXJlLgotICAgIGlmICghTWVkaWFDb2RlY1ZpZGVvRW5jb2Rlci5p
c1ZwOEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJlcygpKSB7Ci0gICAgICBMb2cuaShUQUcsICJWUDgg
ZW5jb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIik7Ci0gICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklE
RU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIodHJ1ZSAvKiBjYXB0
dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAg
Ly8gVGVzdCB0aGF0IGEgY2FsbCBjYW4gYmUgc2V0dXAgZXZlbiBpZiB0aGUgRUdMIGNvbnRleHQg
dXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gaXMKLSAgLy8gcmVsZWFzZWQgYmVmb3JlIHRoZSBW
aWRlbyBjb2RlY3MgYXJlIGNyZWF0ZWQuIFRoZSBIVyBlbmNvZGVyIGFuZCBkZWNvZGVyIGlzIHNl
dHVwIHRvIHVzZQotICAvLyB0ZXh0dXJlcy4KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0
ZXN0TG9vcGJhY2tFZ2xDb250ZXh0UmVsZWFzZWRBZnRlckNyZWF0aW5nUGMoKSB0aHJvd3MgSW50
ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWls
ZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRGVjb2RlIHRvIHRl
eHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlcXVpcmVzIFNESyB2ZXJzaW9uIDE5Iik7Ci0gICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbG9vcGJhY2sgPSB0cnVlOwotICAgIFBlZXJDb25uZWN0
aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzID0gY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChW
SURFT19DT0RFQ19WUDgpOwotICAgIE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVyID0gbmV3IE1v
Y2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExPQ0FMX1JFTkRFUkVSX05BTUUpOwot
ICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNU
RURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJfTkFNRSk7Ci0gICAgcGNDbGllbnQgPSBj
cmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2NhbFJlbmRlcmVyLCByZW1vdGVSZW5kZXJlciwg
cGFyYW1ldGVycywKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIodHJ1ZSAvKiBjYXB0dXJl
VG9UZXh0dXJlICovKSwgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLQotICAgIC8vIFdh
aXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBT
RFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2Nh
bFNEUChXQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIFJlbGVhc2UgdGhlIEVHTCBjb250ZXh0IHVz
ZWQgZm9yIGNyZWF0aW5nIHRoZSBQZWVyQ29ubmVjdGlvbkNsaWVudC4KLSAgICAvLyBTaW5jZSBj
cmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudCBpcyBhc3luY2hyb25vdXMsIHdlIG11c3Qgd2FpdCBm
b3IgdGhlIGxvY2FsCi0gICAgLy8gU2Vzc2lvbkRlc2NyaXB0aW9uLgotICAgIGVnbEJhc2UucmVs
ZWFzZSgpOwotICAgIGVnbEJhc2UgPSBudWxsOwotCi0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJl
bW90ZVNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlw
dGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRp
b24pOwotICAgIHBjQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAg
ICAvLyBXYWl0IGZvciBJQ0UgY29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVj
dGlvbiBmYWlsdXJlLiIsIHdhaXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9U
SU1FT1VUKSk7Ci0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1l
cyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUoCi0gICAgICAgICJMb2NhbCB2aWRlbyBm
cmFtZXMgd2VyZSBub3QgcmVuZGVyZWQuIiwgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVu
ZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZyYW1l
cyB3ZXJlIG5vdCByZW5kZXJlZC4iLAotICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJh
bWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwotICAg
IGFzc2VydFRydWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkpOwot
ICAgIExvZy5kKFRBRywgInRlc3RMb29wYmFjayBkb25lLiIpOwotICB9Ci0KLSAgQFNtYWxsVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tIMjY0Q2FwdHVyZVRvVGV4dHVyZSgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8
IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJFbmNvZGUg
dG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gUmVxdWlyZXMgS0lUS0FUIik7Ci0gICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIFRPRE8ocGVya2opOiBJZiB3ZSBjYW4gYWx3YXlzIGNhcHR1
cmUgdG8gdGV4dHVyZXMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgaWYgdGhlCi0gICAgLy8g
aGFyZHdhcmUgZW5jb2RlciBzdXBwb3J0cyB0byBlbmNvZGUgZnJvbSBhIHRleHR1cmUuCi0gICAg
aWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmlzSDI2NEh3U3VwcG9ydGVkVXNpbmdUZXh0dXJl
cygpKSB7Ci0gICAgICBMb2cuaShUQUcsICJIMjY0IGVuY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qg
c3VwcG9ydGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBkb0xvb3BiYWNrVGVzdChj
cmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVDX0gyNjQpLAotICAgICAgICBj
cmVhdGVDYW1lcmFDYXB0dXJlcih0cnVlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCB0cnVlIC8q
IGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYgZGVmYXVsdCBmcm9u
dCBjYW1lcmEgY2FuIGJlIHN3aXRjaGVkIHRvIGJhY2sgY2FtZXJhIGFuZCB0aGVuCi0gIC8vIGFn
YWluIHRvIGZyb250IGNhbWVyYS4KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2Ft
ZXJhU3dpdGNoKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBMb2cuZChUQUcs
ICJ0ZXN0Q2FtZXJhU3dpdGNoIik7Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwotCi0gICAgTW9ja1Jl
bmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZS
QU1FUywgTE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRl
cmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9SRU5E
RVJFUl9OQU1FKTsKLQotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQo
bG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVyZXIsCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRlcnNG
b3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVy
ZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2FpdCBm
b3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQgYXMgcmVtb3RlIFNEUC4K
LSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQ
KFdBSVRfVElNRU9VVCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiByZW1vdGVTZHAgPSBuZXcg
U2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9t
Q2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0aW9uKTsKLSAgICBwY0Ns
aWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0gICAgLy8gV2FpdCBmb3Ig
SUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rpb24gZmFpbHVyZS4i
LCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRfVElNRU9VVCkpOwotCi0g
ICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRl
cmVkLgotICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJl
ZCBiZWZvcmUgY2FtZXJhIHN3aXRjaC4iLAotICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JG
cmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlk
ZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJlZm9yZSBjYW1lcmEgc3dpdGNoLiIsCi0gICAg
ICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsK
LQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQ0FNRVJBX1NXSVRDSF9BVFRFTVBUUzsgaSsrKSB7
Ci0gICAgICAvLyBUcnkgdG8gc3dpdGNoIGNhbWVyYQotICAgICAgcGNDbGllbnQuc3dpdGNoQ2Ft
ZXJhKCk7Ci0KLSAgICAgIC8vIFJlc2V0IHZpZGVvIHJlbmRlcnMgYW5kIGNoZWNrIHRoYXQgbG9j
YWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMKLSAgICAgIC8vIHdlcmUgcmVuZGVyZWQgYWZ0ZXIg
Y2FtZXJhIHN3aXRjaC4KLSAgICAgIGxvY2FsUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9f
RlJBTUVTKTsKLSAgICAgIHJlbW90ZVJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1F
Uyk7Ci0gICAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVy
ZWQgYWZ0ZXIgY2FtZXJhIHN3aXRjaC4iLAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZv
ckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVtb3Rl
IHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciBjYW1lcmEgc3dpdGNoLiIsCi0g
ICAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9V
VCkpOwotICAgIH0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwotICAgIGFzc2VydFRydWUod2FpdEZv
clBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkpOwotICAgIExvZy5kKFRBRywgInRl
c3RDYW1lcmFTd2l0Y2ggZG9uZS4iKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiB2aWRlbyBzb3Vy
Y2UgY2FuIGJlIHJlc3RhcnRlZCAtIHNpbXVsYXRlIGFwcCBnb2VzIHRvCi0gIC8vIGJhY2tncm91
bmQgYW5kIGJhY2sgdG8gZm9yZWdyb3VuZC4KLSAgLy8gRGlzYWJsZWQgYmVjYXVzZSBvZiBodHRw
czovL2J1Z3MuY2hyb21pdW0ub3JnL3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NjQ3OAotICBA
Rmxha3lUZXN0Ci0gIC8vQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0VmlkZW9Tb3VyY2VS
ZXN0YXJ0KCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBMb2cuZChUQUcsICJ0
ZXN0VmlkZW9Tb3VyY2VSZXN0YXJ0Iik7Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwotCi0gICAgTW9j
a1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVP
X0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJl
bmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9S
RU5ERVJFUl9OQU1FKTsKLQotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGll
bnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVyZXIsCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRl
cnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2Fw
dHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2Fp
dCBmb3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQgYXMgcmVtb3RlIFNE
UC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2Fs
U0RQKFdBSVRfVElNRU9VVCkpOwotICAgIFNlc3Npb25EZXNjcmlwdGlvbiByZW1vdGVTZHAgPSBu
ZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5m
cm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0aW9uKTsKLSAgICBw
Y0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0gICAgLy8gV2FpdCBm
b3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rpb24gZmFpbHVy
ZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRfVElNRU9VVCkpOwot
Ci0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIHJl
bmRlcmVkLgotICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5k
ZXJlZCBiZWZvcmUgdmlkZW8gcmVzdGFydC4iLAotICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRG
b3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRUcnVlKCJSZW1vdGUg
dmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJlZm9yZSB2aWRlbyByZXN0YXJ0LiIsCi0g
ICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQp
KTsKLQotICAgIC8vIFN0b3AgYW5kIHRoZW4gc3RhcnQgdmlkZW8gc291cmNlIGEgZmV3IHRpbWVz
LgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgVklERU9fUkVTVEFSVF9BVFRFTVBUUzsgaSsrKSB7
Ci0gICAgICBwY0NsaWVudC5zdG9wVmlkZW9Tb3VyY2UoKTsKLSAgICAgIFRocmVhZC5zbGVlcChW
SURFT19SRVNUQVJUX1RJTUVPVVQpOwotICAgICAgcGNDbGllbnQuc3RhcnRWaWRlb1NvdXJjZSgp
OwotCi0gICAgICAvLyBSZXNldCB2aWRlbyByZW5kZXJzIGFuZCBjaGVjayB0aGF0IGxvY2FsIGFu
ZCByZW1vdGUgdmlkZW8gZnJhbWVzCi0gICAgICAvLyB3ZXJlIHJlbmRlcmVkIGFmdGVyIHZpZGVv
IHJlc3RhcnQuCi0gICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1F
Uyk7Ci0gICAgICByZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwot
ICAgICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFm
dGVyIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFt
ZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRl
byBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIgdmlkZW8gcmVzdGFydC4iLAotICAgICAg
ICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsK
LSAgICB9Ci0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKHdhaXRGb3JQZWVy
Q29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0Vmlk
ZW9Tb3VyY2VSZXN0YXJ0IGRvbmUuIik7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYgY2FwdHVyZSBm
b3JtYXQgY2FuIGJlIGNoYW5nZWQgb24gZmx5IGFuZCBkZWNvZGVyIGNhbiBiZSByZXNldCBwcm9w
ZXJseS4KLSAgLy8gRGlzYWJsZWQgYmVjYXVzZSBvZiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3Jn
L3Avd2VicnRjL2lzc3Vlcy9kZXRhaWw/aWQ9NjQ3OAotICBARmxha3lUZXN0Ci0gIC8vQFNtYWxs
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0Q2FwdHVyZUZvcm1hdENoYW5nZSgpIHRocm93cyBJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdENhcHR1cmVGb3JtYXRDaGFu
Z2UiKTsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0KLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5k
ZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5E
RVJFUl9OQU1FKTsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9ja1Jl
bmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVSX05BTUUpOwotCi0g
ICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2NhbFJlbmRlcmVyLCBy
ZW1vdGVSZW5kZXJlciwKLSAgICAgICAgY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURF
T19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0
dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAgICAvLyBXYWl0IGZvciBsb2NhbCBTRFAsIHJl
bmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1vdGUgU0RQLgotICAgIGFzc2VydFRydWUo
IkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7
Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90ZVNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRp
b24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKCJh
bnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRpb24pOwotICAgIHBjQ2xpZW50LnNldFJlbW90ZURl
c2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAgICAvLyBXYWl0IGZvciBJQ0UgY29ubmVjdGlvbi4K
LSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVjdGlvbiBmYWlsdXJlLiIsIHdhaXRGb3JJY2VDb25u
ZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1FT1VUKSk7Ci0KLSAgICAvLyBDaGVjayB0aGF0
IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgcmVuZGVyZWQuCi0gICAgYXNzZXJ0
VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJlZm9yZSBjYW1lcmEg
cmVzb2x1dGlvbiBjaGFuZ2UuIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVz
UmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZy
YW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHJlc29sdXRpb24gY2hhbmdlLiIs
Ci0gICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVP
VVQpKTsKLQotICAgIC8vIENoYW5nZSBjYXB0dXJlIG91dHB1dCBmb3JtYXQgYSBmZXcgdGltZXMu
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyICogQ0FQVFVSRV9GT1JNQVRfQ0hBTkdFX0FUVEVN
UFRTOyBpKyspIHsKLSAgICAgIGlmIChpICUgMiA9PSAwKSB7Ci0gICAgICAgIHBjQ2xpZW50LmNo
YW5nZUNhcHR1cmVGb3JtYXQoV0lEVEhfVkdBLCBIRUlHSFRfVkdBLCBNQVhfVklERU9fRlBTKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIHBjQ2xpZW50LmNoYW5nZUNhcHR1cmVGb3JtYXQoV0lE
VEhfUVZHQSwgSEVJR0hUX1FWR0EsIE1BWF9WSURFT19GUFMpOwotICAgICAgfQotCi0gICAgICAv
LyBSZXNldCB2aWRlbyByZW5kZXJzIGFuZCBjaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlk
ZW8gZnJhbWVzCi0gICAgICAvLyB3ZXJlIHJlbmRlcmVkIGFmdGVyIGNhcHR1cmUgZm9ybWF0IGNo
YW5nZS4KLSAgICAgIGxvY2FsUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVTKTsK
LSAgICAgIHJlbW90ZVJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1FUyk7Ci0gICAg
ICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIg
Y2FwdHVyZSBmb3JtYXQgY2hhbmdlLiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9y
RnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVlKCJSZW1vdGUg
dmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIGNhcHR1cmUgZm9ybWF0IGNoYW5n
ZS4iLAotICAgICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlU
X1RJTUVPVVQpKTsKLSAgICB9Ci0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwotICAgIGFzc2VydFRy
dWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkpOwotICAgIExvZy5k
KFRBRywgInRlc3RDYXB0dXJlRm9ybWF0Q2hhbmdlIGRvbmUuIik7Ci0gIH0KLX0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0
ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvVmlkZW9GaWxlUmVuZGVyZXJUZXN0Lmph
dmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9WaWRl
b0ZpbGVSZW5kZXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvdGVzdC9WaWRlb0ZpbGVSZW5kZXJlclRlc3QuamF2YQkobm9uZXhp
c3RlbnQpCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IDIwMTYgVGhlIFdlYlJU
QyBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0YzsKLQotaW1wb3J0IGFuZHJvaWQudGVzdC5JbnN0cnVtZW50YXRpb25UZXN0Q2FzZTsK
LWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVyLmFubm90YXRpb24uU21hbGxUZXN0Owot
Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBv
cnQgamF2YS5pby5SYW5kb21BY2Nlc3NGaWxlOwotaW1wb3J0IGphdmEubGFuZy5UaHJlYWQ7Ci1p
bXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwotaW1wb3J0IGphdmEubmlv
LkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0
aWwuUmFuZG9tOwotCi1wdWJsaWMgY2xhc3MgVmlkZW9GaWxlUmVuZGVyZXJUZXN0IGV4dGVuZHMg
SW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRl
c3RZdXZSZW5kZXJpbmdUb0ZpbGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElPRXhj
ZXB0aW9uIHsKLSAgICBFZ2xCYXNlIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZSgpOwotICAgIGZp
bmFsIFN0cmluZyB2aWRlb091dFBhdGggPSAiL3NkY2FyZC9jaHJvbWl1bV90ZXN0c19yb290L3Rl
c3R2aWRlb291dC55NG0iOwotICAgIGludCBmcmFtZVdpZHRoID0gNDsKLSAgICBpbnQgZnJhbWVI
ZWlnaHQgPSA0OwotICAgIFZpZGVvRmlsZVJlbmRlcmVyIHZpZGVvRmlsZVJlbmRlcmVyID0KLSAg
ICAgICAgbmV3IFZpZGVvRmlsZVJlbmRlcmVyKHZpZGVvT3V0UGF0aCwgZnJhbWVXaWR0aCwgZnJh
bWVIZWlnaHQsIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0KLSAgICBTdHJpbmdbXSBm
cmFtZXMgPSB7Ci0gICAgICAgICJUSElTIElTIEpVU1QgU09NRSBURVhUIHgiLCAiVEhFIFNFQ09O
RCBGUkFNRSBxd2VydHkuIiwgIkhFUkUgSVMgVEhFIFRIUklEIEZSQU1FISJ9OwotCi0gICAgZm9y
IChTdHJpbmcgZnJhbWVTdHIgOiBmcmFtZXMpIHsKLSAgICAgIGludFtdIHBsYW5lU2l6ZXMgPSB7
Ci0gICAgICAgICAgZnJhbWVXaWR0aCAqIGZyYW1lV2lkdGgsIGZyYW1lV2lkdGggKiBmcmFtZUhl
aWdodCAvIDQsIGZyYW1lV2lkdGggKiBmcmFtZUhlaWdodCAvIDR9OwotCi0gICAgICBieXRlW10g
ZnJhbWVCeXRlcyA9IGZyYW1lU3RyLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVNfQVNDSUkp
OwotICAgICAgQnl0ZUJ1ZmZlcltdIHl1dlBsYW5lcyA9IG5ldyBCeXRlQnVmZmVyWzNdOwotICAg
ICAgaW50IHBvcyA9IDA7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewotICAg
ICAgICB5dXZQbGFuZXNbaV0gPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KHBsYW5lU2l6ZXNb
aV0pOwotICAgICAgICB5dXZQbGFuZXNbaV0ucHV0KGZyYW1lQnl0ZXMsIHBvcywgcGxhbmVTaXpl
c1tpXSk7Ci0gICAgICAgIHBvcyArPSBwbGFuZVNpemVzW2ldOwotICAgICAgfQotCi0gICAgICBp
bnRbXSB5dXZTdHJpZGVzID0ge2ZyYW1lV2lkdGgsIGZyYW1lV2lkdGggLyAyLCBmcmFtZVdpZHRo
IC8gMn07Ci0KLSAgICAgIFZpZGVvUmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lID0KLSAgICAgICAg
ICBuZXcgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUoZnJhbWVXaWR0aCwgZnJhbWVIZWlnaHQsIDAs
IHl1dlN0cmlkZXMsIHl1dlBsYW5lcywgMCk7Ci0KLSAgICAgIHZpZGVvRmlsZVJlbmRlcmVyLnJl
bmRlckZyYW1lKGZyYW1lKTsKLSAgICB9Ci0gICAgdmlkZW9GaWxlUmVuZGVyZXIucmVsZWFzZSgp
OwotCi0gICAgUmFuZG9tQWNjZXNzRmlsZSB3cml0dGVuRmlsZSA9IG5ldyBSYW5kb21BY2Nlc3NG
aWxlKHZpZGVvT3V0UGF0aCwgInIiKTsKLSAgICB0cnkgewotICAgICAgaW50IGxlbmd0aCA9IChp
bnQpIHdyaXR0ZW5GaWxlLmxlbmd0aCgpOwotICAgICAgYnl0ZVtdIGRhdGEgPSBuZXcgYnl0ZVts
ZW5ndGhdOwotICAgICAgd3JpdHRlbkZpbGUucmVhZEZ1bGx5KGRhdGEpOwotICAgICAgU3RyaW5n
IGZpbGVDb250ZW50ID0gbmV3IFN0cmluZyhkYXRhLCBTdGFuZGFyZENoYXJzZXRzLlVTX0FTQ0lJ
KTsKLSAgICAgIFN0cmluZyBleHBlY3RlZCA9ICJZVVY0TVBFRzIgQzQyMCBXNCBINCBJcCBGMzA6
MSBBMToxXG4iCi0gICAgICAgICAgKyAiRlJBTUVcbiIKLSAgICAgICAgICArICJUSElTIElTIEpV
U1QgU09NRSBURVhUIHhGUkFNRVxuIgotICAgICAgICAgICsgIlRIRSBTRUNPTkQgRlJBTUUgcXdl
cnR5LkZSQU1FXG4iCi0gICAgICAgICAgKyAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIjsKLSAg
ICAgIGFzc2VydEVxdWFscyhleHBlY3RlZCwgZmlsZUNvbnRlbnQpOwotICAgIH0gZmluYWxseSB7
Ci0gICAgICB3cml0dGVuRmlsZS5jbG9zZSgpOwotICAgIH0KLQotICAgIG5ldyBGaWxlKHZpZGVv
T3V0UGF0aCkuZGVsZXRlKCk7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3Qv
YXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRlby55NG0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3Ny
Yy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9jYXB0dXJldGVzdHZpZGVvLnk0bQkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhh
bXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9jYXB0dXJldGVz
dHZpZGVvLnk0bQkobm9uZXhpc3RlbnQpCkBAIC0xLDUgKzAsMCBAQAotWVVWNE1QRUcyIEM0MjAg
VzQgSDQgSXAgRjMwOjEgQTE6MQotRlJBTUUKLVRISVMgSVMgSlVTVCBTT01FIFRFWFQgeEZSQU1F
Ci1USEUgU0VDT05EIEZSQU1FIHF3ZXJ0eS5GUkFNRQotSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUh
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L0ZpbGVWaWRlb0NhcHR1
cmVyVGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRj
L3Rlc3QvRmlsZVZpZGVvQ2FwdHVyZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0
ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvRmlsZVZpZGVvQ2FwdHVyZXJUZXN0Lmph
dmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAx
NiBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGMudGVzdDsKLQotaW1wb3J0IGFuZHJvaWQudGVzdC5J
bnN0cnVtZW50YXRpb25UZXN0Q2FzZTsKLWltcG9ydCBhbmRyb2lkLnRlc3Quc3VpdGVidWlsZGVy
LmFubm90YXRpb24uTGFyZ2VUZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIu
YW5ub3RhdGlvbi5NZWRpdW1UZXN0OwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIu
YW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLWltcG9ydCBvcmcud2VicnRjLkZpbGVWaWRlb0NhcHR1
cmVyOwotaW1wb3J0IG9yZy53ZWJydGMuVmlkZW9DYXB0dXJlcjsKLQotaW1wb3J0IGphdmEuaW8u
SU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLlRocmVhZDsKLWltcG9ydCBqYXZhLm5pby5j
aGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotCi1wdWJsaWMgY2xhc3MgRmlsZVZpZGVvQ2FwdHVyZXJU
ZXN0IGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgewotICBwcml2YXRlIHN0YXRpYyBj
bGFzcyBGcmFtZSB7Ci0gICAgcHVibGljIGJ5dGVbXSBkYXRhOwotICAgIHB1YmxpYyBpbnQgd2lk
dGg7Ci0gICAgcHVibGljIGludCBoZWlnaHQ7Ci0gIH0KLQotICBwdWJsaWMgY2xhc3MgTW9ja0Nh
cHR1cmVyT2JzZXJ2ZXIgaW1wbGVtZW50cyBWaWRlb0NhcHR1cmVyLkNhcHR1cmVyT2JzZXJ2ZXIg
ewotICAgIHByaXZhdGUgZmluYWwgQXJyYXlMaXN0PEZyYW1lPiBmcmFtZURhdGFzID0gbmV3IEFy
cmF5TGlzdDxGcmFtZT4oKTsKLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2Fw
dHVyZXJTdGFydGVkKGJvb2xlYW4gc3VjY2VzcykgewotICAgICAgYXNzZXJ0VHJ1ZShzdWNjZXNz
KTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvbkNhcHR1cmVyU3Rv
cHBlZCgpIHsKLSAgICAgIC8vIEVtcHR5IG9uIHB1cnBvc2UuCi0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIG9uQnl0ZUJ1ZmZlckZyYW1lQ2FwdHVy
ZWQoCi0gICAgICAgIGJ5dGVbXSBkYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCByb3Rh
dGlvbiwgbG9uZyB0aW1lU3RhbXApIHsKLSAgICAgIEZyYW1lIGZyYW1lID0gbmV3IEZyYW1lKCk7
Ci0gICAgICBmcmFtZS5kYXRhID0gZGF0YTsKLSAgICAgIGZyYW1lLndpZHRoID0gd2lkdGg7Ci0g
ICAgICBmcmFtZS5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICBhc3NlcnRUcnVlKGRhdGEubGVuZ3Ro
ICE9IDApOwotICAgICAgZnJhbWVEYXRhcy5hZGQoZnJhbWUpOwotICAgICAgbm90aWZ5KCk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25UZXh0dXJlRnJhbWVDYXB0
dXJlZChpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBvZXNUZXh0dXJlSWQsCi0gICAgICAgIGZs
b2F0W10gdHJhbnNmb3JtTWF0cml4LCBpbnQgcm90YXRpb24sIGxvbmcgdGltZXN0YW1wKSB7Ci0g
ICAgICAvLyBFbXB0eSBvbiBwdXJwb3NlLgotICAgIH0KLQotICAgIHB1YmxpYyBzeW5jaHJvbml6
ZWQgQXJyYXlMaXN0PEZyYW1lPiBnZXRNaW5pbXVtRnJhbWVzQmxvY2tpbmcoaW50IG1pbkZyYW1l
cykKLSAgICAgICAgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIHdoaWxlIChm
cmFtZURhdGFzLnNpemUoKSA8IG1pbkZyYW1lcykgewotICAgICAgICB3YWl0KCk7Ci0gICAgICB9
Ci0gICAgICByZXR1cm4gbmV3IEFycmF5TGlzdDxGcmFtZT4oZnJhbWVEYXRhcyk7Ci0gICAgfQot
ICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0VmlkZW9DYXB0dXJlRnJvbUZp
bGUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICBmaW5h
bCBpbnQgRlJBTUVfV0lEVEggPSA0OwotICAgIGZpbmFsIGludCBGUkFNRV9IRUlHSFQgPSA0Owot
ICAgIGZpbmFsIEZpbGVWaWRlb0NhcHR1cmVyIGZpbGVWaWRlb0NhcHR1cmVyID0gbmV3IEZpbGVW
aWRlb0NhcHR1cmVyKAotICAgICAgICAiL3NkY2FyZC9jaHJvbWl1bV90ZXN0c19yb290L3dlYnJ0
Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0LyIKLSAg
ICAgICAgKyAiY2FwdHVyZXRlc3R2aWRlby55NG0iKTsKLSAgICBmaW5hbCBNb2NrQ2FwdHVyZXJP
YnNlcnZlciBjYXB0dXJlck9ic2VydmVyID0gbmV3IE1vY2tDYXB0dXJlck9ic2VydmVyKCk7Ci0g
ICAgZmlsZVZpZGVvQ2FwdHVyZXIuaW5pdGlhbGl6ZShudWxsLCBudWxsLCBjYXB0dXJlck9ic2Vy
dmVyKTsKLSAgICBmaWxlVmlkZW9DYXB0dXJlci5zdGFydENhcHR1cmUoRlJBTUVfV0lEVEgsIEZS
QU1FX0hFSUdIVCwgMzMpOwotCi0gICAgZmluYWwgU3RyaW5nW10gZXhwZWN0ZWRGcmFtZXMgPSB7
Ci0gICAgICAgICJUSElTIElTIEpVU1QgU09NRSBURVhUIHgiLCAiVEhFIFNFQ09ORCBGUkFNRSBx
d2VydHkuIiwgIkhFUkUgSVMgVEhFIFRIUklEIEZSQU1FISJ9OwotCi0gICAgZmluYWwgQXJyYXlM
aXN0PEZyYW1lPiBmcmFtZURhdGFzOwotICAgIGZyYW1lRGF0YXMgPSBjYXB0dXJlck9ic2VydmVy
LmdldE1pbmltdW1GcmFtZXNCbG9ja2luZyhleHBlY3RlZEZyYW1lcy5sZW5ndGgpOwotCi0gICAg
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkRnJhbWVzLmxlbmd0aCwgZnJhbWVEYXRhcy5zaXplKCkpOwot
Ci0gICAgZmlsZVZpZGVvQ2FwdHVyZXIuc3RvcENhcHR1cmUoKTsKLSAgICBmaWxlVmlkZW9DYXB0
dXJlci5kaXNwb3NlKCk7Ci0KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkRnJhbWVz
Lmxlbmd0aDsgKytpKSB7Ci0gICAgICBGcmFtZSBmcmFtZSA9IGZyYW1lRGF0YXMuZ2V0KGkpOwot
Ci0gICAgICBhc3NlcnRFcXVhbHMoRlJBTUVfV0lEVEgsIGZyYW1lLndpZHRoKTsKLSAgICAgIGFz
c2VydEVxdWFscyhGUkFNRV9IRUlHSFQsIGZyYW1lLmhlaWdodCk7Ci0gICAgICBhc3NlcnRFcXVh
bHMoRlJBTUVfV0lEVEggKiBGUkFNRV9IRUlHSFQgKiAzIC8gMiwgZnJhbWUuZGF0YS5sZW5ndGgp
OwotCi0gICAgICBieXRlW10gZXhwZWN0ZWROVjEyQnl0ZXMgPSBuZXcgYnl0ZVtmcmFtZS5kYXRh
Lmxlbmd0aF07Ci0gICAgICBGaWxlVmlkZW9DYXB0dXJlci5uYXRpdmVJNDIwVG9OVjIxKGV4cGVj
dGVkRnJhbWVzW2ldLmdldEJ5dGVzKFN0YW5kYXJkQ2hhcnNldHMuVVNfQVNDSUkpLAotICAgICAg
ICAgIEZSQU1FX1dJRFRILCBGUkFNRV9IRUlHSFQsIGV4cGVjdGVkTlYxMkJ5dGVzKTsKLQotICAg
ICAgYXNzZXJ0VHJ1ZShBcnJheXMuZXF1YWxzKGV4cGVjdGVkTlYxMkJ5dGVzLCBmcmFtZS5kYXRh
KSk7Ci0gICAgfQotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90
ZXN0L1BlZXJDb25uZWN0aW9uQ2xpZW50VGVzdC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9z
cmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvUGVlckNvbm5lY3Rpb25DbGllbnRUZXN0LmphdmEJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3Qv
UGVlckNvbm5lY3Rpb25DbGllbnRUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NzggKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNCBUaGUgV2ViUlRDIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBwc3BvdC5hcHBydGMudGVz
dDsKLQotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5BcHBSVENDbGllbnQuU2lnbmFsaW5nUGFy
YW1ldGVyczsKLWltcG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNvbm5lY3Rpb25DbGllbnQ7
Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25uZWN0aW9uQ2xpZW50LlBlZXJDb25u
ZWN0aW9uRXZlbnRzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlvbkNs
aWVudC5QZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxk
OwotaW1wb3J0IGFuZHJvaWQudGVzdC5GbGFreVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0Lklu
c3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIu
YW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKLQotaW1wb3J0
IG9yZy53ZWJydGMuQ2FtZXJhMUVudW1lcmF0b3I7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5DYW1lcmEy
RW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYUVudW1lcmF0b3I7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5FZ2xCYXNlOwotaW1wb3J0IG9yZy53ZWJydGMuSWNlQ2FuZGlkYXRlOwotaW1w
b3J0IG9yZy53ZWJydGMuTWVkaWFDb2RlY1ZpZGVvRW5jb2RlcjsKLWltcG9ydCBvcmcud2VicnRj
LlBlZXJDb25uZWN0aW9uOwotaW1wb3J0IG9yZy53ZWJydGMuUGVlckNvbm5lY3Rpb25GYWN0b3J5
OwotaW1wb3J0IG9yZy53ZWJydGMuU2Vzc2lvbkRlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy53ZWJy
dGMuU3RhdHNSZXBvcnQ7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0NhcHR1cmVyOwotaW1wb3J0
IG9yZy53ZWJydGMuVmlkZW9SZW5kZXJlcjsKLQotaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0
OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNv
dW50RG93bkxhdGNoOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yU2Vydmlj
ZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvcnM7Ci1pbXBvcnQgamF2YS51
dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci0KLXB1YmxpYyBjbGFzcyBQZWVyQ29ubmVjdGlvbkNs
aWVudFRlc3QKLSAgICBleHRlbmRzIEluc3RydW1lbnRhdGlvblRlc3RDYXNlIGltcGxlbWVudHMg
UGVlckNvbm5lY3Rpb25FdmVudHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFH
ID0gIlJUQ0NsaWVudFRlc3QiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSUNFX0NPTk5F
Q1RJT05fV0FJVF9USU1FT1VUID0gMTAwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBX
QUlUX1RJTUVPVVQgPSA3MDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FNRVJBX1NX
SVRDSF9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSURFT19SRVNU
QVJUX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENBUFRVUkVfRk9S
TUFUX0NIQU5HRV9BVFRFTVBUUyA9IDM7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBWSURF
T19SRVNUQVJUX1RJTUVPVVQgPSA1MDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBFWFBF
Q1RFRF9WSURFT19GUkFNRVMgPSAxMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZJ
REVPX0NPREVDX1ZQOCA9ICJWUDgiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklE
RU9fQ09ERUNfVlA5ID0gIlZQOSI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWSURF
T19DT0RFQ19IMjY0ID0gIkgyNjQiOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQVVESU9f
UlVOX1RJTUVPVVQgPSAxMDAwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQUxf
UkVOREVSRVJfTkFNRSA9ICJMb2NhbCByZW5kZXJlciI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZyBSRU1PVEVfUkVOREVSRVJfTkFNRSA9ICJSZW1vdGUgcmVuZGVyZXIiOwotCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBNQVhfVklERU9fRlBTID0gMzA7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBXSURUSF9WR0EgPSA2NDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBIRUlHSFRfVkdBID0gNDgwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgV0lEVEhfUVZH
QSA9IDMyMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhFSUdIVF9RVkdBID0gMjQwOwot
Ci0gIC8vIFRoZSBwZWVyIGNvbm5lY3Rpb24gY2xpZW50IGlzIGFzc3VtZWQgdG8gYmUgdGhyZWFk
IHNhZmUgaW4gaXRzZWxmOyB0aGUKLSAgLy8gcmVmZXJlbmNlIGlzIHdyaXR0ZW4gYnkgdGhlIHRl
c3QgdGhyZWFkIGFuZCByZWFkIGJ5IHdvcmtlciB0aHJlYWRzLgotICBwcml2YXRlIHZvbGF0aWxl
IFBlZXJDb25uZWN0aW9uQ2xpZW50IHBjQ2xpZW50OwotICBwcml2YXRlIHZvbGF0aWxlIGJvb2xl
YW4gbG9vcGJhY2s7Ci0KLSAgLy8gRUdMIGNvbnRleHQgdGhhdCBjYW4gYmUgdXNlZCBieSBoYXJk
d2FyZSB2aWRlbyBkZWNvZGVycyB0byBkZWNvZGUgdG8gYSB0ZXh0dXJlLgotICBwcml2YXRlIEVn
bEJhc2UgZWdsQmFzZTsKLQotICAvLyBUaGVzZSBhcmUgcHJvdGVjdGVkIGJ5IHRoZWlyIHJlc3Bl
Y3RpdmUgZXZlbnQgb2JqZWN0cy4KLSAgcHJpdmF0ZSBFeGVjdXRvclNlcnZpY2Ugc2lnbmFsaW5n
RXhlY3V0b3I7Ci0gIHByaXZhdGUgYm9vbGVhbiBpc0Nsb3NlZDsKLSAgcHJpdmF0ZSBib29sZWFu
IGlzSWNlQ29ubmVjdGVkOwotICBwcml2YXRlIFNlc3Npb25EZXNjcmlwdGlvbiBsb2NhbFNkcDsK
LSAgcHJpdmF0ZSBMaXN0PEljZUNhbmRpZGF0ZT4gaWNlQ2FuZGlkYXRlcyA9IG5ldyBMaW5rZWRM
aXN0PEljZUNhbmRpZGF0ZT4oKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgbG9jYWxTZHBFdmVu
dCA9IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgaWNlQ2FuZGlkYXRlRXZl
bnQgPSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGljZUNvbm5lY3RlZEV2
ZW50ID0gbmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBjbG9zZUV2ZW50ID0g
bmV3IE9iamVjdCgpOwotCi0gIC8vIE1vY2sgcmVuZGVyZXIgaW1wbGVtZW50YXRpb24uCi0gIHBy
aXZhdGUgc3RhdGljIGNsYXNzIE1vY2tSZW5kZXJlciBpbXBsZW1lbnRzIFZpZGVvUmVuZGVyZXIu
Q2FsbGJhY2tzIHsKLSAgICAvLyBUaGVzZSBhcmUgcHJvdGVjdGVkIGJ5ICd0aGlzJyBzaW5jZSB3
ZSBnZXRzIGNhbGxlZCBmcm9tIHdvcmtlciB0aHJlYWRzLgotICAgIHByaXZhdGUgU3RyaW5nIHJl
bmRlcmVyTmFtZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gcmVuZGVyRnJhbWVDYWxsZWQgPSBmYWxz
ZTsKLQotICAgIC8vIFRocmVhZC1zYWZlIGluIGl0c2VsZi4KLSAgICBwcml2YXRlIENvdW50RG93
bkxhdGNoIGRvbmVSZW5kZXJpbmc7Ci0KLSAgICBwdWJsaWMgTW9ja1JlbmRlcmVyKGludCBleHBl
Y3RlZEZyYW1lcywgU3RyaW5nIHJlbmRlcmVyTmFtZSkgewotICAgICAgdGhpcy5yZW5kZXJlck5h
bWUgPSByZW5kZXJlck5hbWU7Ci0gICAgICByZXNldChleHBlY3RlZEZyYW1lcyk7Ci0gICAgfQot
Ci0gICAgLy8gUmVzZXRzIHJlbmRlciB0byB3YWl0IGZvciBuZXcgYW1vdW50IG9mIHZpZGVvIGZy
YW1lcy4KLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVzZXQoaW50IGV4cGVjdGVkRnJh
bWVzKSB7Ci0gICAgICByZW5kZXJGcmFtZUNhbGxlZCA9IGZhbHNlOwotICAgICAgZG9uZVJlbmRl
cmluZyA9IG5ldyBDb3VudERvd25MYXRjaChleHBlY3RlZEZyYW1lcyk7Ci0gICAgfQotCi0gICAg
QE92ZXJyaWRlCi0gICAgcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlbmRlckZyYW1lKFZpZGVv
UmVuZGVyZXIuSTQyMEZyYW1lIGZyYW1lKSB7Ci0gICAgICBpZiAoIXJlbmRlckZyYW1lQ2FsbGVk
KSB7Ci0gICAgICAgIGlmIChyZW5kZXJlck5hbWUgIT0gbnVsbCkgewotICAgICAgICAgIExvZy5k
KFRBRywgcmVuZGVyZXJOYW1lICsgIiByZW5kZXIgZnJhbWU6ICIgKyBmcmFtZS5yb3RhdGVkV2lk
dGgoKSArICIgeCAiCi0gICAgICAgICAgICAgICAgICArIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7
Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgTG9nLmQoVEFHLCAiUmVuZGVyIGZyYW1lOiAi
ICsgZnJhbWUucm90YXRlZFdpZHRoKCkgKyAiIHggIiArIGZyYW1lLnJvdGF0ZWRIZWlnaHQoKSk7
Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIHJlbmRlckZyYW1lQ2FsbGVkID0gdHJ1ZTsKLSAg
ICAgIFZpZGVvUmVuZGVyZXIucmVuZGVyRnJhbWVEb25lKGZyYW1lKTsKLSAgICAgIGRvbmVSZW5k
ZXJpbmcuY291bnREb3duKCk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBtZXRob2Qgc2hvdWxkbid0
IGhvbGQgYW55IGxvY2tzIG9yIHRvdWNoIG1lbWJlciB2YXJpYWJsZXMgc2luY2UgaXQKLSAgICAv
LyBibG9ja3MuCi0gICAgcHVibGljIGJvb2xlYW4gd2FpdEZvckZyYW1lc1JlbmRlcmVkKGludCB0
aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgICBkb25lUmVuZGVy
aW5nLmF3YWl0KHRpbWVvdXRNcywgVGltZVVuaXQuTUlMTElTRUNPTkRTKTsKLSAgICAgIHJldHVy
biAoZG9uZVJlbmRlcmluZy5nZXRDb3VudCgpIDw9IDApOwotICAgIH0KLSAgfQotCi0gIC8vIFBl
ZXIgY29ubmVjdGlvbiBldmVudHMgaW1wbGVtZW50YXRpb24uCi0gIEBPdmVycmlkZQotICBwdWJs
aWMgdm9pZCBvbkxvY2FsRGVzY3JpcHRpb24oU2Vzc2lvbkRlc2NyaXB0aW9uIHNkcCkgewotICAg
IExvZy5kKFRBRywgIkxvY2FsU0RQIHR5cGU6ICIgKyBzZHAudHlwZSk7Ci0gICAgc3luY2hyb25p
emVkIChsb2NhbFNkcEV2ZW50KSB7Ci0gICAgICBsb2NhbFNkcCA9IHNkcDsKLSAgICAgIGxvY2Fs
U2RwRXZlbnQubm90aWZ5QWxsKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1Ymxp
YyB2b2lkIG9uSWNlQ2FuZGlkYXRlKGZpbmFsIEljZUNhbmRpZGF0ZSBjYW5kaWRhdGUpIHsKLSAg
ICBzeW5jaHJvbml6ZWQgKGljZUNhbmRpZGF0ZUV2ZW50KSB7Ci0gICAgICBMb2cuZChUQUcsICJJ
Y2VDYW5kaWRhdGUgIyIgKyBpY2VDYW5kaWRhdGVzLnNpemUoKSArICIgOiAiICsgY2FuZGlkYXRl
LnRvU3RyaW5nKCkpOwotICAgICAgaWYgKGxvb3BiYWNrKSB7Ci0gICAgICAgIC8vIExvb3BiYWNr
IGxvY2FsIElDRSBjYW5kaWRhdGUgaW4gYSBzZXBhcmF0ZSB0aHJlYWQgdG8gYXZvaWQgYWRkaW5n
Ci0gICAgICAgIC8vIHJlbW90ZSBJQ0UgY2FuZGlkYXRlIGluIGEgbG9jYWwgSUNFIGNhbmRpZGF0
ZSBjYWxsYmFjay4KLSAgICAgICAgc2lnbmFsaW5nRXhlY3V0b3IuZXhlY3V0ZShuZXcgUnVubmFi
bGUoKSB7Ci0gICAgICAgICAgQE92ZXJyaWRlCi0gICAgICAgICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgICAgICAgcGNDbGllbnQuYWRkUmVtb3RlSWNlQ2FuZGlkYXRlKGNhbmRpZGF0ZSk7
Ci0gICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICAgIH0KLSAgICAgIGljZUNhbmRpZGF0ZXMu
YWRkKGNhbmRpZGF0ZSk7Ci0gICAgICBpY2VDYW5kaWRhdGVFdmVudC5ub3RpZnlBbGwoKTsKLSAg
ICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VDYW5kaWRhdGVzUmVt
b3ZlZChmaW5hbCBJY2VDYW5kaWRhdGVbXSBjYW5kaWRhdGVzKSB7Ci0gICAgLy8gVE9ETyhob25n
aGFpeik6IEFkZCB0aGlzIGZvciB0ZXN0cy4KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMg
dm9pZCBvbkljZUNvbm5lY3RlZCgpIHsKLSAgICBMb2cuZChUQUcsICJJQ0UgQ29ubmVjdGVkIik7
Ci0gICAgc3luY2hyb25pemVkIChpY2VDb25uZWN0ZWRFdmVudCkgewotICAgICAgaXNJY2VDb25u
ZWN0ZWQgPSB0cnVlOwotICAgICAgaWNlQ29ubmVjdGVkRXZlbnQubm90aWZ5QWxsKCk7Ci0gICAg
fQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uSWNlRGlzY29ubmVjdGVkKCkg
ewotICAgIExvZy5kKFRBRywgIklDRSBEaXNjb25uZWN0ZWQiKTsKLSAgICBzeW5jaHJvbml6ZWQg
KGljZUNvbm5lY3RlZEV2ZW50KSB7Ci0gICAgICBpc0ljZUNvbm5lY3RlZCA9IGZhbHNlOwotICAg
ICAgaWNlQ29ubmVjdGVkRXZlbnQubm90aWZ5QWxsKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJy
aWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rpb25DbG9zZWQoKSB7Ci0gICAgTG9nLmQo
VEFHLCAiUGVlckNvbm5lY3Rpb24gY2xvc2VkIik7Ci0gICAgc3luY2hyb25pemVkIChjbG9zZUV2
ZW50KSB7Ci0gICAgICBpc0Nsb3NlZCA9IHRydWU7Ci0gICAgICBjbG9zZUV2ZW50Lm5vdGlmeUFs
bCgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25u
ZWN0aW9uRXJyb3IoU3RyaW5nIGRlc2NyaXB0aW9uKSB7Ci0gICAgZmFpbCgiUEMgRXJyb3I6ICIg
KyBkZXNjcmlwdGlvbik7Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25QZWVy
Q29ubmVjdGlvblN0YXRzUmVhZHkoU3RhdHNSZXBvcnRbXSByZXBvcnRzKSB7fQotCi0gIC8vIEhl
bHBlciB3YWl0IGZ1bmN0aW9ucy4KLSAgcHJpdmF0ZSBib29sZWFuIHdhaXRGb3JMb2NhbFNEUChp
bnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIHN5bmNocm9u
aXplZCAobG9jYWxTZHBFdmVudCkgewotICAgICAgaWYgKGxvY2FsU2RwID09IG51bGwpIHsKLSAg
ICAgICAgbG9jYWxTZHBFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9Ci0gICAgICByZXR1
cm4gKGxvY2FsU2RwICE9IG51bGwpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3
YWl0Rm9ySWNlQ2FuZGlkYXRlcyhpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIHN5bmNocm9uaXplZCAoaWNlQ2FuZGlkYXRlRXZlbnQpIHsKLSAgICAgIGlm
IChpY2VDYW5kaWRhdGVzLnNpemUoKSA9PSAwKSB7Ci0gICAgICAgIGljZUNhbmRpZGF0ZUV2ZW50
LndhaXQodGltZW91dE1zKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAoaWNlQ2FuZGlkYXRlcy5z
aXplKCkgPiAwKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gd2FpdEZvckljZUNv
bm5lY3RlZChpbnQgdGltZW91dE1zKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAg
IHN5bmNocm9uaXplZCAoaWNlQ29ubmVjdGVkRXZlbnQpIHsKLSAgICAgIGlmICghaXNJY2VDb25u
ZWN0ZWQpIHsKLSAgICAgICAgaWNlQ29ubmVjdGVkRXZlbnQud2FpdCh0aW1lb3V0TXMpOwotICAg
ICAgfQotICAgICAgaWYgKCFpc0ljZUNvbm5lY3RlZCkgewotICAgICAgICBMb2cuZShUQUcsICJJ
Q0UgY29ubmVjdGlvbiBmYWlsdXJlIik7Ci0gICAgICB9Ci0KLSAgICAgIHJldHVybiBpc0ljZUNv
bm5lY3RlZDsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gd2FpdEZvclBlZXJDb25u
ZWN0aW9uQ2xvc2VkKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgc3luY2hyb25pemVkIChjbG9zZUV2ZW50KSB7Ci0gICAgICBpZiAoIWlzQ2xvc2VkKSB7
Ci0gICAgICAgIGNsb3NlRXZlbnQud2FpdCh0aW1lb3V0TXMpOwotICAgICAgfQotICAgICAgcmV0
dXJuIGlzQ2xvc2VkOwotICAgIH0KLSAgfQotCi0gIFBlZXJDb25uZWN0aW9uQ2xpZW50IGNyZWF0
ZVBlZXJDb25uZWN0aW9uQ2xpZW50KE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVyLAotICAgICAg
TW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyLCBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgcGVl
ckNvbm5lY3Rpb25QYXJhbWV0ZXJzLAotICAgICAgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVy
LCBFZ2xCYXNlLkNvbnRleHQgZWdsQ29udGV4dCkgewotICAgIExpc3Q8UGVlckNvbm5lY3Rpb24u
SWNlU2VydmVyPiBpY2VTZXJ2ZXJzID0gbmV3IExpbmtlZExpc3Q8UGVlckNvbm5lY3Rpb24uSWNl
U2VydmVyPigpOwotICAgIFNpZ25hbGluZ1BhcmFtZXRlcnMgc2lnbmFsaW5nUGFyYW1ldGVycyA9
Ci0gICAgICAgIG5ldyBTaWduYWxpbmdQYXJhbWV0ZXJzKGljZVNlcnZlcnMsIHRydWUsIC8vIGlj
ZVNlcnZlcnMsIGluaXRpYXRvci4KLSAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIC8vIGNs
aWVudElkLCB3c3NVcmwsIHdzc1Bvc3RVcmwuCi0gICAgICAgICAgICBudWxsLCBudWxsKTsgLy8g
b2ZmZXJTZHAsIGljZUNhbmRpZGF0ZXMuCi0KLSAgICBQZWVyQ29ubmVjdGlvbkNsaWVudCBjbGll
bnQgPSBQZWVyQ29ubmVjdGlvbkNsaWVudC5nZXRJbnN0YW5jZSgpOwotICAgIFBlZXJDb25uZWN0
aW9uRmFjdG9yeS5PcHRpb25zIG9wdGlvbnMgPSBuZXcgUGVlckNvbm5lY3Rpb25GYWN0b3J5Lk9w
dGlvbnMoKTsKLSAgICBvcHRpb25zLm5ldHdvcmtJZ25vcmVNYXNrID0gMDsKLSAgICBvcHRpb25z
LmRpc2FibGVOZXR3b3JrTW9uaXRvciA9IHRydWU7Ci0gICAgY2xpZW50LnNldFBlZXJDb25uZWN0
aW9uRmFjdG9yeU9wdGlvbnMob3B0aW9ucyk7Ci0gICAgY2xpZW50LmNyZWF0ZVBlZXJDb25uZWN0
aW9uRmFjdG9yeSgKLSAgICAgICAgZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4
dCgpLCBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMsIHRoaXMpOwotICAgIGNsaWVudC5jcmVhdGVQ
ZWVyQ29ubmVjdGlvbigKLSAgICAgICAgZWdsQ29udGV4dCwgbG9jYWxSZW5kZXJlciwgcmVtb3Rl
UmVuZGVyZXIsIHZpZGVvQ2FwdHVyZXIsIHNpZ25hbGluZ1BhcmFtZXRlcnMpOwotICAgIGNsaWVu
dC5jcmVhdGVPZmZlcigpOwotICAgIHJldHVybiBjbGllbnQ7Ci0gIH0KLQotICBwcml2YXRlIFBl
ZXJDb25uZWN0aW9uUGFyYW1ldGVycyBjcmVhdGVQYXJhbWV0ZXJzRm9yQXVkaW9DYWxsKCkgewot
ICAgIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPQot
ICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzKGZhbHNlLCAvKiB2aWRlb0NhbGxF
bmFibGVkICovCi0gICAgICAgICAgICB0cnVlLCAvKiBsb29wYmFjayAqLwotICAgICAgICAgICAg
ZmFsc2UsIC8qIHRyYWNpbmcgKi8KLSAgICAgICAgICAgIC8vIFZpZGVvIGNvZGVjIHBhcmFtZXRl
cnMuCi0gICAgICAgICAgICAwLCAvKiB2aWRlb1dpZHRoICovCi0gICAgICAgICAgICAwLCAvKiB2
aWRlb0hlaWdodCAqLwotICAgICAgICAgICAgMCwgLyogdmlkZW9GcHMgKi8KLSAgICAgICAgICAg
IDAsIC8qIHZpZGVvU3RhcnRCaXRyYXRlICovCi0gICAgICAgICAgICAiIiwgLyogdmlkZW9Db2Rl
YyAqLwotICAgICAgICAgICAgdHJ1ZSwgLyogdmlkZW9Db2RlY0h3QWNjZWxlcmF0aW9uICovCi0g
ICAgICAgICAgICAvLyBBdWRpbyBjb2RlYyBwYXJhbWV0ZXJzLgotICAgICAgICAgICAgMCwgLyog
YXVkaW9TdGFydEJpdHJhdGUgKi8KLSAgICAgICAgICAgICJPUFVTIiwgLyogYXVkaW9Db2RlYyAq
LwotICAgICAgICAgICAgZmFsc2UsIC8qIG5vQXVkaW9Qcm9jZXNzaW5nICovCi0gICAgICAgICAg
ICBmYWxzZSwgLyogYWVjRHVtcCAqLwotICAgICAgICAgICAgZmFsc2UgLyogdXNlT3BlblNMRVMg
Ki8sIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluQUVDICovLCBmYWxzZSAvKiBkaXNhYmxlQnVpbHRJ
bkFHQyAqLywKLSAgICAgICAgICAgIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluTlMgKi8sIGZhbHNl
IC8qIGVuYWJsZUxldmVsQ29udHJvbCAqLyk7Ci0KLSAgICByZXR1cm4gcGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzOwotICB9Ci0KLSAgcHJpdmF0ZSBWaWRlb0NhcHR1cmVyIGNyZWF0ZUNhbWVyYUNh
cHR1cmVyKGJvb2xlYW4gY2FwdHVyZVRvVGV4dHVyZSkgewotICAgIGZpbmFsIGJvb2xlYW4gdXNl
Q2FtZXJhMiA9Ci0gICAgICAgIGNhcHR1cmVUb1RleHR1cmUgJiYgQ2FtZXJhMkVudW1lcmF0b3Iu
aXNTdXBwb3J0ZWQoZ2V0SW5zdHJ1bWVudGF0aW9uKCkuZ2V0VGFyZ2V0Q29udGV4dCgpKTsKLQot
ICAgIENhbWVyYUVudW1lcmF0b3IgZW51bWVyYXRvcjsKLSAgICBpZiAodXNlQ2FtZXJhMikgewot
ICAgICAgZW51bWVyYXRvciA9IG5ldyBDYW1lcmEyRW51bWVyYXRvcihnZXRJbnN0cnVtZW50YXRp
b24oKS5nZXRUYXJnZXRDb250ZXh0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICBlbnVtZXJhdG9y
ID0gbmV3IENhbWVyYTFFbnVtZXJhdG9yKGNhcHR1cmVUb1RleHR1cmUpOwotICAgIH0KLSAgICBT
dHJpbmcgZGV2aWNlTmFtZSA9IGVudW1lcmF0b3IuZ2V0RGV2aWNlTmFtZXMoKVswXTsKLSAgICBy
ZXR1cm4gZW51bWVyYXRvci5jcmVhdGVDYXB0dXJlcihkZXZpY2VOYW1lLCBudWxsKTsKLSAgfQot
Ci0gIHByaXZhdGUgUGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIGNyZWF0ZVBhcmFtZXRlcnNGb3JW
aWRlb0NhbGwoU3RyaW5nIHZpZGVvQ29kZWMpIHsKLSAgICBQZWVyQ29ubmVjdGlvblBhcmFtZXRl
cnMgcGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzID0KLSAgICAgICAgbmV3IFBlZXJDb25uZWN0aW9u
UGFyYW1ldGVycyh0cnVlLCAvKiB2aWRlb0NhbGxFbmFibGVkICovCi0gICAgICAgICAgICB0cnVl
LCAvKiBsb29wYmFjayAqLwotICAgICAgICAgICAgZmFsc2UsIC8qIHRyYWNpbmcgKi8KLSAgICAg
ICAgICAgIC8vIFZpZGVvIGNvZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAwLCAvKiB2aWRl
b1dpZHRoICovCi0gICAgICAgICAgICAwLCAvKiB2aWRlb0hlaWdodCAqLwotICAgICAgICAgICAg
MCwgLyogdmlkZW9GcHMgKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvU3RhcnRCaXRyYXRlICov
Ci0gICAgICAgICAgICB2aWRlb0NvZGVjLCAvKiB2aWRlb0NvZGVjICovCi0gICAgICAgICAgICB0
cnVlLCAvKiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24gKi8KLSAgICAgICAgICAgIC8vIEF1ZGlv
IGNvZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAwLCAvKiBhdWRpb1N0YXJ0Qml0cmF0ZSAq
LwotICAgICAgICAgICAgIk9QVVMiLCAvKiBhdWRpb0NvZGVjICovCi0gICAgICAgICAgICBmYWxz
ZSwgLyogbm9BdWRpb1Byb2Nlc3NpbmcgKi8KLSAgICAgICAgICAgIGZhbHNlLCAvKiBhZWNEdW1w
ICovCi0gICAgICAgICAgICBmYWxzZSAvKiB1c2VPcGVuU0xFUyAqLywgZmFsc2UgLyogZGlzYWJs
ZUJ1aWx0SW5BRUMgKi8sIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluQUdDICovLAotICAgICAgICAg
ICAgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5OUyAqLywgZmFsc2UgLyogZW5hYmxlTGV2ZWxDb250
cm9sICovKTsKLQotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvblBhcmFtZXRlcnM7Ci0gIH0KLQot
ICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgc2V0VXAoKSB7Ci0gICAgc2lnbmFsaW5nRXhlY3V0
b3IgPSBFeGVjdXRvcnMubmV3U2luZ2xlVGhyZWFkRXhlY3V0b3IoKTsKLSAgICBpZiAoQnVpbGQu
VkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjEpIHsK
LSAgICAgIGVnbEJhc2UgPSBFZ2xCYXNlLmNyZWF0ZSgpOwotICAgIH0KLSAgfQotCi0gIEBPdmVy
cmlkZQotICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHsKLSAgICBzaWduYWxpbmdFeGVjdXRvci5z
aHV0ZG93bigpOwotICAgIGlmIChlZ2xCYXNlICE9IG51bGwpIHsKLSAgICAgIGVnbEJhc2UucmVs
ZWFzZSgpOwotICAgIH0KLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFNl
dExvY2FsT2ZmZXJNYWtlc1ZpZGVvRmxvd0xvY2FsbHkoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNl
cHRpb24gewotICAgIExvZy5kKFRBRywgInRlc3RTZXRMb2NhbE9mZmVyTWFrZXNWaWRlb0Zsb3dM
b2NhbGx5Iik7Ci0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRl
cmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAgcGND
bGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2NhbFJlbmRlcmVyLCBuZXcgTW9j
a1JlbmRlcmVyKDAsIG51bGwpLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxs
KFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8q
IGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQgZm9yIGxvY2FsIFNE
UCBhbmQgaWNlIGNhbmRpZGF0ZXMgc2V0IGV2ZW50cy4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBT
RFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotICAgIGFz
c2VydFRydWUoIklDRSBjYW5kaWRhdGVzIHdlcmUgbm90IGdlbmVyYXRlZC4iLCB3YWl0Rm9ySWNl
Q2FuZGlkYXRlcyhXQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIENoZWNrIHRoYXQgbG9jYWwgdmlk
ZW8gZnJhbWVzIHdlcmUgcmVuZGVyZWQuCi0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgIkxvY2Fs
IHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZC4iLCBsb2NhbFJlbmRlcmVyLndhaXRGb3JG
cmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0g
ICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgIlBlZXJDb25uZWN0aW9uIGNsb3NlIGV2ZW50IHdhcyBu
b3QgcmVjZWl2ZWQuIiwgd2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkp
OwotICAgIExvZy5kKFRBRywgInRlc3RTZXRMb2NhbE9mZmVyTWFrZXNWaWRlb0Zsb3dMb2NhbGx5
IERvbmUuIik7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZG9Mb29wYmFja1Rlc3QoUGVlckNvbm5l
Y3Rpb25QYXJhbWV0ZXJzIHBhcmFtZXRlcnMsIFZpZGVvQ2FwdHVyZXIgdmlkZW9DYXB0dXJlciwK
LSAgICAgIGJvb2xlYW4gZGVjb2RlVG9UZXh0dXJlKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRp
b24gewotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJl
ciA9IG51bGw7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyID0gbnVsbDsKLSAgICBp
ZiAocGFyYW1ldGVycy52aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICBMb2cuZChUQUcsICJ0ZXN0
TG9vcGJhY2sgZm9yIHZpZGVvICIgKyBwYXJhbWV0ZXJzLnZpZGVvQ29kZWMpOwotICAgICAgbG9j
YWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NB
TF9SRU5ERVJFUl9OQU1FKTsKLSAgICAgIHJlbW90ZVJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJl
cihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9SRU5ERVJFUl9OQU1FKTsKLSAgICB9IGVs
c2UgewotICAgICAgTG9nLmQoVEFHLCAidGVzdExvb3BiYWNrIGZvciBhdWRpby4iKTsKLSAgICB9
Ci0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2NhbFJlbmRlcmVy
LCByZW1vdGVSZW5kZXJlciwgcGFyYW1ldGVycywgdmlkZW9DYXB0dXJlciwKLSAgICAgICAgZGVj
b2RlVG9UZXh0dXJlID8gZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpIDogbnVsbCk7Ci0KLSAg
ICAvLyBXYWl0IGZvciBsb2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyBy
ZW1vdGUgU0RQLgotICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0
Rm9yTG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90
ZVNkcCA9IG5ldyBTZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlv
bi5UeXBlLmZyb21DYW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRpb24p
OwotICAgIHBjQ2xpZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAgICAv
LyBXYWl0IGZvciBJQ0UgY29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVjdGlv
biBmYWlsdXJlLiIsIHdhaXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1F
T1VUKSk7Ci0KLSAgICBpZiAocGFyYW1ldGVycy52aWRlb0NhbGxFbmFibGVkKSB7Ci0gICAgICAv
LyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgcmVuZGVyZWQu
Ci0gICAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQu
IiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJ
TUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBub3Qg
cmVuZGVyZWQuIiwKLSAgICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVy
ZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8vIEZvciBhdWRpbyBqdXN0
IHNsZWVwIGZvciAxIHNlYy4KLSAgICAgIC8vIFRPRE8oZ2xhem5ldik6IGNoZWNrIGhvdyB3ZSBj
YW4gZGV0ZWN0IHRoYXQgcmVtb3RlIGF1ZGlvIHdhcyByZW5kZXJlZC4KLSAgICAgIFRocmVhZC5z
bGVlcChBVURJT19SVU5fVElNRU9VVCk7Ci0gICAgfQotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsK
LSAgICBhc3NlcnRUcnVlKHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQp
KTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0TG9vcGJhY2sgZG9uZS4iKTsKLSAgfQotCi0gIEBTbWFs
bFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrQXVkaW8oKSB0aHJvd3MgSW50ZXJydXB0
ZWRFeGNlcHRpb24gewotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JBdWRp
b0NhbGwoKSwgbnVsbCwgZmFsc2UgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIEBT
bWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA4KCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlk
ZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZh
bHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBmYWxzZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8p
OwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDkoKSB0
aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBh
cmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA5KSwKLSAgICAgICAgY3JlYXRlQ2Ft
ZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIGZhbHNlIC8qIGRlY29k
ZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RM
b29wYmFja0gyNjQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGRvTG9vcGJh
Y2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfSDI2NCksCi0g
ICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8p
LCBmYWxzZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBw
dWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDhEZWNvZGVUb1RleHR1cmUoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5W
RVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRGVjb2RlIHRvIHRleHR1
cmVzIGlzIG5vdCBzdXBwb3J0ZWQsIHJlcXVpcmVzIFNESyB2ZXJzaW9uIDE5LiIpOwotICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlk
ZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZh
bHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCB0cnVlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7
Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOURlY29k
ZVRvVGV4dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBM
b2cuaShUQUcsICJEZWNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZCwgcmVxdWlyZXMg
U0RLIHZlcnNpb24gMTkuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tU
ZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfVlA5KSwKLSAgICAg
ICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIHRy
dWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGlj
IHZvaWQgdGVzdExvb3BiYWNrSDI2NERlY29kZVRvVGV4dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJ
T05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNvZGUgdG8gdGV4dHVyZXMg
aXMgbm90IHN1cHBvcnRlZCwgcmVxdWlyZXMgU0RLIHZlcnNpb24gMTkuIik7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0Nh
bGwoVklERU9fQ09ERUNfSDI2NCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNl
IC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCB0cnVlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0g
IH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOENhcHR1cmVU
b1RleHR1cmUoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5W
RVJTSU9OLlNES19JTlQgPCBCdWlsZC5WRVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9n
LmkoVEFHLCAiRW5jb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlcXVpcmVzIFNE
SyB2ZXJzaW9uIDE5Iik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIFRPRE8ocGVya2op
OiBJZiB3ZSBjYW4gYWx3YXlzIGNhcHR1cmUgdG8gdGV4dHVyZXMsIHRoZXJlIGlzIG5vIG5lZWQg
dG8gY2hlY2sgaWYgdGhlCi0gICAgLy8gaGFyZHdhcmUgZW5jb2RlciBzdXBwb3J0cyB0byBlbmNv
ZGUgZnJvbSBhIHRleHR1cmUuCi0gICAgaWYgKCFNZWRpYUNvZGVjVmlkZW9FbmNvZGVyLmlzVnA4
SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkpIHsKLSAgICAgIExvZy5pKFRBRywgIlZQOCBlbmNv
ZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19D
T0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcih0cnVlIC8qIGNhcHR1cmVU
b1RleHR1cmUgKi8pLCB0cnVlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICAvLyBU
ZXN0IHRoYXQgYSBjYWxsIGNhbiBiZSBzZXR1cCBldmVuIGlmIHRoZSBFR0wgY29udGV4dCB1c2Vk
IGR1cmluZyBpbml0aWFsaXphdGlvbiBpcwotICAvLyByZWxlYXNlZCBiZWZvcmUgdGhlIFZpZGVv
IGNvZGVjcyBhcmUgY3JlYXRlZC4gVGhlIEhXIGVuY29kZXIgYW5kIGRlY29kZXIgaXMgc2V0dXAg
dG8gdXNlCi0gIC8vIHRleHR1cmVzLgotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RM
b29wYmFja0VnbENvbnRleHRSZWxlYXNlZEFmdGVyQ3JlYXRpbmdQYygpIHRocm93cyBJbnRlcnJ1
cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZF
UlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNvZGUgdG8gdGV4dHVy
ZXMgaXMgbm90IHN1cHBvcnRlZC4gUmVxdWlyZXMgU0RLIHZlcnNpb24gMTkiKTsKLSAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBsb29wYmFjayA9IHRydWU7Ci0gICAgUGVlckNvbm5lY3Rpb25Q
YXJhbWV0ZXJzIHBhcmFtZXRlcnMgPSBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVP
X0NPREVDX1ZQOCk7Ci0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBuZXcgTW9ja1Jl
bmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFNRSk7Ci0gICAg
TW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9W
SURFT19GUkFNRVMsIFJFTU9URV9SRU5ERVJFUl9OQU1FKTsKLSAgICBwY0NsaWVudCA9IGNyZWF0
ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLCBwYXJh
bWV0ZXJzLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcih0cnVlIC8qIGNhcHR1cmVUb1Rl
eHR1cmUgKi8pLCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotCi0gICAgLy8gV2FpdCBm
b3IgbG9jYWwgU0RQLCByZW5hbWUgaXQgdG8gYW5zd2VyIGFuZCBzZXQgYXMgcmVtb3RlIFNEUC4K
LSAgICBhc3NlcnRUcnVlKCJMb2NhbCBTRFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQ
KFdBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgRUdMIGNvbnRleHQgdXNlZCBm
b3IgY3JlYXRpbmcgdGhlIFBlZXJDb25uZWN0aW9uQ2xpZW50LgotICAgIC8vIFNpbmNlIGNyZWF0
ZVBlZXJDb25uZWN0aW9uQ2xpZW50IGlzIGFzeW5jaHJvbm91cywgd2UgbXVzdCB3YWl0IGZvciB0
aGUgbG9jYWwKLSAgICAvLyBTZXNzaW9uRGVzY3JpcHRpb24uCi0gICAgZWdsQmFzZS5yZWxlYXNl
KCk7Ci0gICAgZWdsQmFzZSA9IG51bGw7Ci0KLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3Rl
U2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9u
LlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7
Ci0gICAgcGNDbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8v
IFdhaXQgZm9yIElDRSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9u
IGZhaWx1cmUuIiwgd2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVP
VVQpKTsKLSAgICAvLyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdl
cmUgcmVuZGVyZWQuCi0gICAgYXNzZXJ0VHJ1ZSgKLSAgICAgICAgIkxvY2FsIHZpZGVvIGZyYW1l
cyB3ZXJlIG5vdCByZW5kZXJlZC4iLCBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJl
ZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlkZW8gZnJhbWVzIHdl
cmUgbm90IHJlbmRlcmVkLiIsCi0gICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNS
ZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAgYXNz
ZXJ0VHJ1ZSh3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAg
TG9nLmQoVEFHLCAidGVzdExvb3BiYWNrIGRvbmUuIik7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0g
IHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja0gyNjRDYXB0dXJlVG9UZXh0dXJlKCkgdGhyb3dzIElu
dGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVp
bGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkVuY29kZSB0byB0
ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiBSZXF1aXJlcyBLSVRLQVQiKTsKLSAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgLy8gVE9ETyhwZXJraik6IElmIHdlIGNhbiBhbHdheXMgY2FwdHVyZSB0
byB0ZXh0dXJlcywgdGhlcmUgaXMgbm8gbmVlZCB0byBjaGVjayBpZiB0aGUKLSAgICAvLyBoYXJk
d2FyZSBlbmNvZGVyIHN1cHBvcnRzIHRvIGVuY29kZSBmcm9tIGEgdGV4dHVyZS4KLSAgICBpZiAo
IU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNIMjY0SHdTdXBwb3J0ZWRVc2luZ1RleHR1cmVzKCkp
IHsKLSAgICAgIExvZy5pKFRBRywgIkgyNjQgZW5jb2RlIHRvIHRleHR1cmVzIGlzIG5vdCBzdXBw
b3J0ZWQuIik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0
ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNfSDI2NCksCi0gICAgICAgIGNyZWF0
ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVj
b2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiBkZWZhdWx0IGZyb250IGNh
bWVyYSBjYW4gYmUgc3dpdGNoZWQgdG8gYmFjayBjYW1lcmEgYW5kIHRoZW4KLSAgLy8gYWdhaW4g
dG8gZnJvbnQgY2FtZXJhLgotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYW1lcmFT
d2l0Y2goKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExvZy5kKFRBRywgInRl
c3RDYW1lcmFTd2l0Y2giKTsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0KLSAgICBNb2NrUmVuZGVy
ZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVT
LCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIg
PSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVS
X05BTUUpOwotCi0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChsb2Nh
bFJlbmRlcmVyLCByZW1vdGVSZW5kZXJlciwKLSAgICAgICAgY3JlYXRlUGFyYW1ldGVyc0ZvclZp
ZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJlcihm
YWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAgICAvLyBXYWl0IGZvciBs
b2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1vdGUgU0RQLgotICAg
IGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJ
VF9USU1FT1VUKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90ZVNkcCA9IG5ldyBTZXNz
aW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21DYW5v
bmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRpb24pOwotICAgIHBjQ2xpZW50
LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAgICAvLyBXYWl0IGZvciBJQ0Ug
Y29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVjdGlvbiBmYWlsdXJlLiIsIHdh
aXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1FT1VUKSk7Ci0KLSAgICAv
LyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgcmVuZGVyZWQu
Ci0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGJl
Zm9yZSBjYW1lcmEgc3dpdGNoLiIsCi0gICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1l
c1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBm
cmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3JlIGNhbWVyYSBzd2l0Y2guIiwKLSAgICAgICAg
cmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBDQU1FUkFfU1dJVENIX0FUVEVNUFRTOyBpKyspIHsKLSAg
ICAgIC8vIFRyeSB0byBzd2l0Y2ggY2FtZXJhCi0gICAgICBwY0NsaWVudC5zd2l0Y2hDYW1lcmEo
KTsKLQotICAgICAgLy8gUmVzZXQgdmlkZW8gcmVuZGVycyBhbmQgY2hlY2sgdGhhdCBsb2NhbCBh
bmQgcmVtb3RlIHZpZGVvIGZyYW1lcwotICAgICAgLy8gd2VyZSByZW5kZXJlZCBhZnRlciBjYW1l
cmEgc3dpdGNoLgotICAgICAgbG9jYWxSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFN
RVMpOwotICAgICAgcmVtb3RlUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVTKTsK
LSAgICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBh
ZnRlciBjYW1lcmEgc3dpdGNoLiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJh
bWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlk
ZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIGNhbWVyYSBzd2l0Y2guIiwKLSAgICAg
ICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7
Ci0gICAgfQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9yUGVl
ckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVzdENh
bWVyYVN3aXRjaCBkb25lLiIpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIHZpZGVvIHNvdXJjZSBj
YW4gYmUgcmVzdGFydGVkIC0gc2ltdWxhdGUgYXBwIGdvZXMgdG8KLSAgLy8gYmFja2dyb3VuZCBh
bmQgYmFjayB0byBmb3JlZ3JvdW5kLgotICAvLyBEaXNhYmxlZCBiZWNhdXNlIG9mIGh0dHBzOi8v
YnVncy5jaHJvbWl1bS5vcmcvcC93ZWJydGMvaXNzdWVzL2RldGFpbD9pZD02NDc4Ci0gIEBGbGFr
eVRlc3QKLSAgLy9AU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RWaWRlb1NvdXJjZVJlc3Rh
cnQoKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgIExvZy5kKFRBRywgInRlc3RW
aWRlb1NvdXJjZVJlc3RhcnQiKTsKLSAgICBsb29wYmFjayA9IHRydWU7Ci0KLSAgICBNb2NrUmVu
ZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJB
TUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVy
ZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRF
UkVSX05BTUUpOwotCi0gICAgcGNDbGllbnQgPSBjcmVhdGVQZWVyQ29ubmVjdGlvbkNsaWVudChs
b2NhbFJlbmRlcmVyLCByZW1vdGVSZW5kZXJlciwKLSAgICAgICAgY3JlYXRlUGFyYW1ldGVyc0Zv
clZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDgpLAotICAgICAgICBjcmVhdGVDYW1lcmFDYXB0dXJl
cihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgbnVsbCk7Ci0KLSAgICAvLyBXYWl0IGZv
ciBsb2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1vdGUgU0RQLgot
ICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAo
V0FJVF9USU1FT1VUKSk7Ci0gICAgU2Vzc2lvbkRlc2NyaXB0aW9uIHJlbW90ZVNkcCA9IG5ldyBT
ZXNzaW9uRGVzY3JpcHRpb24oCi0gICAgICAgIFNlc3Npb25EZXNjcmlwdGlvbi5UeXBlLmZyb21D
YW5vbmljYWxGb3JtKCJhbnN3ZXIiKSwgbG9jYWxTZHAuZGVzY3JpcHRpb24pOwotICAgIHBjQ2xp
ZW50LnNldFJlbW90ZURlc2NyaXB0aW9uKHJlbW90ZVNkcCk7Ci0KLSAgICAvLyBXYWl0IGZvciBJ
Q0UgY29ubmVjdGlvbi4KLSAgICBhc3NlcnRUcnVlKCJJQ0UgY29ubmVjdGlvbiBmYWlsdXJlLiIs
IHdhaXRGb3JJY2VDb25uZWN0ZWQoSUNFX0NPTk5FQ1RJT05fV0FJVF9USU1FT1VUKSk7Ci0KLSAg
ICAvLyBDaGVjayB0aGF0IGxvY2FsIGFuZCByZW1vdGUgdmlkZW8gZnJhbWVzIHdlcmUgcmVuZGVy
ZWQuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVk
IGJlZm9yZSB2aWRlbyByZXN0YXJ0LiIsCi0gICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZy
YW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRl
byBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3JlIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAg
ICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwot
Ci0gICAgLy8gU3RvcCBhbmQgdGhlbiBzdGFydCB2aWRlbyBzb3VyY2UgYSBmZXcgdGltZXMuCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWSURFT19SRVNUQVJUX0FUVEVNUFRTOyBpKyspIHsKLSAg
ICAgIHBjQ2xpZW50LnN0b3BWaWRlb1NvdXJjZSgpOwotICAgICAgVGhyZWFkLnNsZWVwKFZJREVP
X1JFU1RBUlRfVElNRU9VVCk7Ci0gICAgICBwY0NsaWVudC5zdGFydFZpZGVvU291cmNlKCk7Ci0K
LSAgICAgIC8vIFJlc2V0IHZpZGVvIHJlbmRlcnMgYW5kIGNoZWNrIHRoYXQgbG9jYWwgYW5kIHJl
bW90ZSB2aWRlbyBmcmFtZXMKLSAgICAgIC8vIHdlcmUgcmVuZGVyZWQgYWZ0ZXIgdmlkZW8gcmVz
dGFydC4KLSAgICAgIGxvY2FsUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVTKTsK
LSAgICAgIHJlbW90ZVJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1FUyk7Ci0gICAg
ICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIg
dmlkZW8gcmVzdGFydC4iLAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1Jl
bmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZy
YW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciB2aWRlbyByZXN0YXJ0LiIsCi0gICAgICAgICAg
cmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAg
IH0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwotICAgIGFzc2VydFRydWUod2FpdEZvclBlZXJDb25u
ZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkpOwotICAgIExvZy5kKFRBRywgInRlc3RWaWRlb1Nv
dXJjZVJlc3RhcnQgZG9uZS4iKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiBjYXB0dXJlIGZvcm1h
dCBjYW4gYmUgY2hhbmdlZCBvbiBmbHkgYW5kIGRlY29kZXIgY2FuIGJlIHJlc2V0IHByb3Blcmx5
LgotICAvLyBEaXNhYmxlZCBiZWNhdXNlIG9mIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC93
ZWJydGMvaXNzdWVzL2RldGFpbD9pZD02NDc4Ci0gIEBGbGFreVRlc3QKLSAgLy9AU21hbGxUZXN0
Ci0gIHB1YmxpYyB2b2lkIHRlc3RDYXB0dXJlRm9ybWF0Q2hhbmdlKCkgdGhyb3dzIEludGVycnVw
dGVkRXhjZXB0aW9uIHsKLSAgICBMb2cuZChUQUcsICJ0ZXN0Q2FwdHVyZUZvcm1hdENoYW5nZSIp
OwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAgIE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVy
ID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExPQ0FMX1JFTkRFUkVS
X05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVy
ZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJfTkFNRSk7Ci0KLSAgICBw
Y0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIsIHJlbW90
ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NP
REVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNlIC8qIGNhcHR1cmVU
b1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1l
IGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBTRFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9j
YWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlUX1RJTUVPVVQpKTsKLSAg
ICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2RwID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigK
LSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dl
ciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0gICAgcGNDbGllbnQuc2V0UmVtb3RlRGVzY3Jp
cHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdhaXQgZm9yIElDRSBjb25uZWN0aW9uLgotICAg
IGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZhaWx1cmUuIiwgd2FpdEZvckljZUNvbm5lY3Rl
ZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIENoZWNrIHRoYXQgbG9j
YWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVl
KCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3JlIGNhbWVyYSByZXNv
bHV0aW9uIGNoYW5nZS4iLAotICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5k
ZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlkZW8gZnJhbWVz
IHdlcmUgbm90IHJlbmRlcmVkIGJlZm9yZSBjYW1lcmEgcmVzb2x1dGlvbiBjaGFuZ2UuIiwKLSAg
ICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9VVCkp
OwotCi0gICAgLy8gQ2hhbmdlIGNhcHR1cmUgb3V0cHV0IGZvcm1hdCBhIGZldyB0aW1lcy4KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDIgKiBDQVBUVVJFX0ZPUk1BVF9DSEFOR0VfQVRURU1QVFM7
IGkrKykgewotICAgICAgaWYgKGkgJSAyID09IDApIHsKLSAgICAgICAgcGNDbGllbnQuY2hhbmdl
Q2FwdHVyZUZvcm1hdChXSURUSF9WR0EsIEhFSUdIVF9WR0EsIE1BWF9WSURFT19GUFMpOwotICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgcGNDbGllbnQuY2hhbmdlQ2FwdHVyZUZvcm1hdChXSURUSF9R
VkdBLCBIRUlHSFRfUVZHQSwgTUFYX1ZJREVPX0ZQUyk7Ci0gICAgICB9Ci0KLSAgICAgIC8vIFJl
c2V0IHZpZGVvIHJlbmRlcnMgYW5kIGNoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBm
cmFtZXMKLSAgICAgIC8vIHdlcmUgcmVuZGVyZWQgYWZ0ZXIgY2FwdHVyZSBmb3JtYXQgY2hhbmdl
LgotICAgICAgbG9jYWxSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwotICAg
ICAgcmVtb3RlUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVTKTsKLSAgICAgIGFz
c2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciBjYXB0
dXJlIGZvcm1hdCBjaGFuZ2UuIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFt
ZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRl
byBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIgY2FwdHVyZSBmb3JtYXQgY2hhbmdlLiIs
Ci0gICAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElN
RU9VVCkpOwotICAgIH0KLQotICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3
YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgTG9nLmQoVEFH
LCAidGVzdENhcHR1cmVGb3JtYXRDaGFuZ2UgZG9uZS4iKTsKLSAgfQotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9WaWRlb0ZpbGVSZW5kZXJlclRlc3QuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9l
eGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1ZpZGVvRmls
ZVJlbmRlcmVyVGVzdC5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9h
cHBzcG90L2FwcHJ0Yy90ZXN0L1ZpZGVvRmlsZVJlbmRlcmVyVGVzdC5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgMjAxNiBUaGUgV2ViUlRDIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjOwotCi1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3RydW1lbnRhdGlvblRlc3RDYXNlOwotaW1w
b3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5ub3RhdGlvbi5TbWFsbFRlc3Q7Ci0KLWlt
cG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBq
YXZhLmlvLlJhbmRvbUFjY2Vzc0ZpbGU7Ci1pbXBvcnQgamF2YS5sYW5nLlRocmVhZDsKLWltcG9y
dCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7Ci1pbXBvcnQgamF2YS5uaW8uQnl0
ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5S
YW5kb207Ci0KLXB1YmxpYyBjbGFzcyBWaWRlb0ZpbGVSZW5kZXJlclRlc3QgZXh0ZW5kcyBJbnN0
cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFl1
dlJlbmRlcmluZ1RvRmlsZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRp
b24gewotICAgIEVnbEJhc2UgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKCk7Ci0gICAgZmluYWwg
U3RyaW5nIHZpZGVvT3V0UGF0aCA9ICIvc2RjYXJkL2Nocm9taXVtX3Rlc3RzX3Jvb3QvdGVzdHZp
ZGVvb3V0Lnk0bSI7Ci0gICAgaW50IGZyYW1lV2lkdGggPSA0OwotICAgIGludCBmcmFtZUhlaWdo
dCA9IDQ7Ci0gICAgVmlkZW9GaWxlUmVuZGVyZXIgdmlkZW9GaWxlUmVuZGVyZXIgPQotICAgICAg
ICBuZXcgVmlkZW9GaWxlUmVuZGVyZXIodmlkZW9PdXRQYXRoLCBmcmFtZVdpZHRoLCBmcmFtZUhl
aWdodCwgZWdsQmFzZS5nZXRFZ2xCYXNlQ29udGV4dCgpKTsKLQotICAgIFN0cmluZ1tdIGZyYW1l
cyA9IHsKLSAgICAgICAgIlRISVMgSVMgSlVTVCBTT01FIFRFWFQgeCIsICJUSEUgU0VDT05EIEZS
QU1FIHF3ZXJ0eS4iLCAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIn07Ci0KLSAgICBmb3IgKFN0
cmluZyBmcmFtZVN0ciA6IGZyYW1lcykgewotICAgICAgaW50W10gcGxhbmVTaXplcyA9IHsKLSAg
ICAgICAgICBmcmFtZVdpZHRoICogZnJhbWVXaWR0aCwgZnJhbWVXaWR0aCAqIGZyYW1lSGVpZ2h0
IC8gNCwgZnJhbWVXaWR0aCAqIGZyYW1lSGVpZ2h0IC8gNH07Ci0KLSAgICAgIGJ5dGVbXSBmcmFt
ZUJ5dGVzID0gZnJhbWVTdHIuZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSSk7Ci0g
ICAgICBCeXRlQnVmZmVyW10geXV2UGxhbmVzID0gbmV3IEJ5dGVCdWZmZXJbM107Ci0gICAgICBp
bnQgcG9zID0gMDsKLSAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0gICAgICAg
IHl1dlBsYW5lc1tpXSA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QocGxhbmVTaXplc1tpXSk7
Ci0gICAgICAgIHl1dlBsYW5lc1tpXS5wdXQoZnJhbWVCeXRlcywgcG9zLCBwbGFuZVNpemVzW2ld
KTsKLSAgICAgICAgcG9zICs9IHBsYW5lU2l6ZXNbaV07Ci0gICAgICB9Ci0KLSAgICAgIGludFtd
IHl1dlN0cmlkZXMgPSB7ZnJhbWVXaWR0aCwgZnJhbWVXaWR0aCAvIDIsIGZyYW1lV2lkdGggLyAy
fTsKLQotICAgICAgVmlkZW9SZW5kZXJlci5JNDIwRnJhbWUgZnJhbWUgPQotICAgICAgICAgIG5l
dyBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZShmcmFtZVdpZHRoLCBmcmFtZUhlaWdodCwgMCwgeXV2
U3RyaWRlcywgeXV2UGxhbmVzLCAwKTsKLQotICAgICAgdmlkZW9GaWxlUmVuZGVyZXIucmVuZGVy
RnJhbWUoZnJhbWUpOwotICAgIH0KLSAgICB2aWRlb0ZpbGVSZW5kZXJlci5yZWxlYXNlKCk7Ci0K
LSAgICBSYW5kb21BY2Nlc3NGaWxlIHdyaXR0ZW5GaWxlID0gbmV3IFJhbmRvbUFjY2Vzc0ZpbGUo
dmlkZW9PdXRQYXRoLCAiciIpOwotICAgIHRyeSB7Ci0gICAgICBpbnQgbGVuZ3RoID0gKGludCkg
d3JpdHRlbkZpbGUubGVuZ3RoKCk7Ci0gICAgICBieXRlW10gZGF0YSA9IG5ldyBieXRlW2xlbmd0
aF07Ci0gICAgICB3cml0dGVuRmlsZS5yZWFkRnVsbHkoZGF0YSk7Ci0gICAgICBTdHJpbmcgZmls
ZUNvbnRlbnQgPSBuZXcgU3RyaW5nKGRhdGEsIFN0YW5kYXJkQ2hhcnNldHMuVVNfQVNDSUkpOwot
ICAgICAgU3RyaW5nIGV4cGVjdGVkID0gIllVVjRNUEVHMiBDNDIwIFc0IEg0IElwIEYzMDoxIEEx
OjFcbiIKLSAgICAgICAgICArICJGUkFNRVxuIgotICAgICAgICAgICsgIlRISVMgSVMgSlVTVCBT
T01FIFRFWFQgeEZSQU1FXG4iCi0gICAgICAgICAgKyAiVEhFIFNFQ09ORCBGUkFNRSBxd2VydHku
RlJBTUVcbiIKLSAgICAgICAgICArICJIRVJFIElTIFRIRSBUSFJJRCBGUkFNRSEiOwotICAgICAg
YXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCBmaWxlQ29udGVudCk7Ci0gICAgfSBmaW5hbGx5IHsKLSAg
ICAgIHdyaXR0ZW5GaWxlLmNsb3NlKCk7Ci0gICAgfQotCi0gICAgbmV3IEZpbGUodmlkZW9PdXRQ
YXRoKS5kZWxldGUoKTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBy
dGMvdGVzdC9jYXB0dXJldGVzdHZpZGVvLnk0bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29y
Zy9hcHBzcG90L2FwcHJ0Yy90ZXN0L2NhcHR1cmV0ZXN0dmlkZW8ueTRtCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxl
cy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L2NhcHR1cmV0ZXN0dmlk
ZW8ueTRtCShub25leGlzdGVudCkKQEAgLTEsNSArMCwwIEBACi1ZVVY0TVBFRzIgQzQyMCBXNCBI
NCBJcCBGMzA6MSBBMToxCi1GUkFNRQotVEhJUyBJUyBKVVNUIFNPTUUgVEVYVCB4RlJBTUUKLVRI
RSBTRUNPTkQgRlJBTUUgcXdlcnR5LkZSQU1FCi1IRVJFIElTIFRIRSBUSFJJRCBGUkFNRSEKSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvRmlsZVZpZGVvQ2FwdHVyZXJU
ZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVz
dC9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3Rz
L3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9GaWxlVmlkZW9DYXB0dXJlclRlc3QuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRo
ZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy50ZXN0OwotCi1pbXBvcnQgYW5kcm9pZC50ZXN0Lkluc3Ry
dW1lbnRhdGlvblRlc3RDYXNlOwotaW1wb3J0IGFuZHJvaWQudGVzdC5zdWl0ZWJ1aWxkZXIuYW5u
b3RhdGlvbi5MYXJnZVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5v
dGF0aW9uLk1lZGl1bVRlc3Q7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5v
dGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0IG9yZy53ZWJydGMuRmlsZVZpZGVvQ2FwdHVyZXI7
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5WaWRlb0NhcHR1cmVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4
Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwotaW1wb3J0IGphdmEubmlvLmNoYXJz
ZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0
IGphdmEudXRpbC5BcnJheXM7Ci0KLXB1YmxpYyBjbGFzcyBGaWxlVmlkZW9DYXB0dXJlclRlc3Qg
ZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25UZXN0Q2FzZSB7Ci0gIHByaXZhdGUgc3RhdGljIGNsYXNz
IEZyYW1lIHsKLSAgICBwdWJsaWMgYnl0ZVtdIGRhdGE7Ci0gICAgcHVibGljIGludCB3aWR0aDsK
LSAgICBwdWJsaWMgaW50IGhlaWdodDsKLSAgfQotCi0gIHB1YmxpYyBjbGFzcyBNb2NrQ2FwdHVy
ZXJPYnNlcnZlciBpbXBsZW1lbnRzIFZpZGVvQ2FwdHVyZXIuQ2FwdHVyZXJPYnNlcnZlciB7Ci0g
ICAgcHJpdmF0ZSBmaW5hbCBBcnJheUxpc3Q8RnJhbWU+IGZyYW1lRGF0YXMgPSBuZXcgQXJyYXlM
aXN0PEZyYW1lPigpOwotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgb25DYXB0dXJl
clN0YXJ0ZWQoYm9vbGVhbiBzdWNjZXNzKSB7Ci0gICAgICBhc3NlcnRUcnVlKHN1Y2Nlc3MpOwot
ICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIG9uQ2FwdHVyZXJTdG9wcGVk
KCkgewotICAgICAgLy8gRW1wdHkgb24gcHVycG9zZS4KLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUK
LSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgb25CeXRlQnVmZmVyRnJhbWVDYXB0dXJlZCgK
LSAgICAgICAgYnl0ZVtdIGRhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHJvdGF0aW9u
LCBsb25nIHRpbWVTdGFtcCkgewotICAgICAgRnJhbWUgZnJhbWUgPSBuZXcgRnJhbWUoKTsKLSAg
ICAgIGZyYW1lLmRhdGEgPSBkYXRhOwotICAgICAgZnJhbWUud2lkdGggPSB3aWR0aDsKLSAgICAg
IGZyYW1lLmhlaWdodCA9IGhlaWdodDsKLSAgICAgIGFzc2VydFRydWUoZGF0YS5sZW5ndGggIT0g
MCk7Ci0gICAgICBmcmFtZURhdGFzLmFkZChmcmFtZSk7Ci0gICAgICBub3RpZnkoKTsKLSAgICB9
Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBvblRleHR1cmVGcmFtZUNhcHR1cmVk
KGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG9lc1RleHR1cmVJZCwKLSAgICAgICAgZmxvYXRb
XSB0cmFuc2Zvcm1NYXRyaXgsIGludCByb3RhdGlvbiwgbG9uZyB0aW1lc3RhbXApIHsKLSAgICAg
IC8vIEVtcHR5IG9uIHB1cnBvc2UuCi0gICAgfQotCi0gICAgcHVibGljIHN5bmNocm9uaXplZCBB
cnJheUxpc3Q8RnJhbWU+IGdldE1pbmltdW1GcmFtZXNCbG9ja2luZyhpbnQgbWluRnJhbWVzKQot
ICAgICAgICB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotICAgICAgd2hpbGUgKGZyYW1l
RGF0YXMuc2l6ZSgpIDwgbWluRnJhbWVzKSB7Ci0gICAgICAgIHdhaXQoKTsKLSAgICAgIH0KLSAg
ICAgIHJldHVybiBuZXcgQXJyYXlMaXN0PEZyYW1lPihmcmFtZURhdGFzKTsKLSAgICB9Ci0gIH0K
LQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RWaWRlb0NhcHR1cmVGcm9tRmlsZSgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgIGZpbmFsIGlu
dCBGUkFNRV9XSURUSCA9IDQ7Ci0gICAgZmluYWwgaW50IEZSQU1FX0hFSUdIVCA9IDQ7Ci0gICAg
ZmluYWwgRmlsZVZpZGVvQ2FwdHVyZXIgZmlsZVZpZGVvQ2FwdHVyZXIgPSBuZXcgRmlsZVZpZGVv
Q2FwdHVyZXIoCi0gICAgICAgICIvc2RjYXJkL2Nocm9taXVtX3Rlc3RzX3Jvb3Qvd2VicnRjL2V4
YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvIgotICAgICAg
ICArICJjYXB0dXJldGVzdHZpZGVvLnk0bSIpOwotICAgIGZpbmFsIE1vY2tDYXB0dXJlck9ic2Vy
dmVyIGNhcHR1cmVyT2JzZXJ2ZXIgPSBuZXcgTW9ja0NhcHR1cmVyT2JzZXJ2ZXIoKTsKLSAgICBm
aWxlVmlkZW9DYXB0dXJlci5pbml0aWFsaXplKG51bGwsIG51bGwsIGNhcHR1cmVyT2JzZXJ2ZXIp
OwotICAgIGZpbGVWaWRlb0NhcHR1cmVyLnN0YXJ0Q2FwdHVyZShGUkFNRV9XSURUSCwgRlJBTUVf
SEVJR0hULCAzMyk7Ci0KLSAgICBmaW5hbCBTdHJpbmdbXSBleHBlY3RlZEZyYW1lcyA9IHsKLSAg
ICAgICAgIlRISVMgSVMgSlVTVCBTT01FIFRFWFQgeCIsICJUSEUgU0VDT05EIEZSQU1FIHF3ZXJ0
eS4iLCAiSEVSRSBJUyBUSEUgVEhSSUQgRlJBTUUhIn07Ci0KLSAgICBmaW5hbCBBcnJheUxpc3Q8
RnJhbWU+IGZyYW1lRGF0YXM7Ci0gICAgZnJhbWVEYXRhcyA9IGNhcHR1cmVyT2JzZXJ2ZXIuZ2V0
TWluaW11bUZyYW1lc0Jsb2NraW5nKGV4cGVjdGVkRnJhbWVzLmxlbmd0aCk7Ci0KLSAgICBhc3Nl
cnRFcXVhbHMoZXhwZWN0ZWRGcmFtZXMubGVuZ3RoLCBmcmFtZURhdGFzLnNpemUoKSk7Ci0KLSAg
ICBmaWxlVmlkZW9DYXB0dXJlci5zdG9wQ2FwdHVyZSgpOwotICAgIGZpbGVWaWRlb0NhcHR1cmVy
LmRpc3Bvc2UoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRGcmFtZXMubGVu
Z3RoOyArK2kpIHsKLSAgICAgIEZyYW1lIGZyYW1lID0gZnJhbWVEYXRhcy5nZXQoaSk7Ci0KLSAg
ICAgIGFzc2VydEVxdWFscyhGUkFNRV9XSURUSCwgZnJhbWUud2lkdGgpOwotICAgICAgYXNzZXJ0
RXF1YWxzKEZSQU1FX0hFSUdIVCwgZnJhbWUuaGVpZ2h0KTsKLSAgICAgIGFzc2VydEVxdWFscyhG
UkFNRV9XSURUSCAqIEZSQU1FX0hFSUdIVCAqIDMgLyAyLCBmcmFtZS5kYXRhLmxlbmd0aCk7Ci0K
LSAgICAgIGJ5dGVbXSBleHBlY3RlZE5WMTJCeXRlcyA9IG5ldyBieXRlW2ZyYW1lLmRhdGEubGVu
Z3RoXTsKLSAgICAgIEZpbGVWaWRlb0NhcHR1cmVyLm5hdGl2ZUk0MjBUb05WMjEoZXhwZWN0ZWRG
cmFtZXNbaV0uZ2V0Qnl0ZXMoU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSSksCi0gICAgICAgICAg
RlJBTUVfV0lEVEgsIEZSQU1FX0hFSUdIVCwgZXhwZWN0ZWROVjEyQnl0ZXMpOwotCi0gICAgICBh
c3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoZXhwZWN0ZWROVjEyQnl0ZXMsIGZyYW1lLmRhdGEpKTsK
LSAgICB9Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3Qv
UGVlckNvbm5lY3Rpb25DbGllbnRUZXN0LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9v
cmcvYXBwc3BvdC9hcHBydGMvdGVzdC9QZWVyQ29ubmVjdGlvbkNsaWVudFRlc3QuamF2YQkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvZXhhbXBsZXMvYW5kcm9pZHRlc3RzL3NyYy9vcmcvYXBwc3BvdC9hcHBydGMvdGVzdC9QZWVy
Q29ubmVjdGlvbkNsaWVudFRlc3QuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDY3OCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAyMDE0IFRoZSBXZWJSVEMgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcHBzcG90LmFwcHJ0Yy50ZXN0Owot
Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLkFwcFJUQ0NsaWVudC5TaWduYWxpbmdQYXJhbWV0
ZXJzOwotaW1wb3J0IG9yZy5hcHBzcG90LmFwcHJ0Yy5QZWVyQ29ubmVjdGlvbkNsaWVudDsKLWlt
cG9ydCBvcmcuYXBwc3BvdC5hcHBydGMuUGVlckNvbm5lY3Rpb25DbGllbnQuUGVlckNvbm5lY3Rp
b25FdmVudHM7Ci1pbXBvcnQgb3JnLmFwcHNwb3QuYXBwcnRjLlBlZXJDb25uZWN0aW9uQ2xpZW50
LlBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1p
bXBvcnQgYW5kcm9pZC50ZXN0LkZsYWt5VGVzdDsKLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1
bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQgYW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5v
dGF0aW9uLlNtYWxsVGVzdDsKLWltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwotCi1pbXBvcnQgb3Jn
LndlYnJ0Yy5DYW1lcmExRW51bWVyYXRvcjsKLWltcG9ydCBvcmcud2VicnRjLkNhbWVyYTJFbnVt
ZXJhdG9yOwotaW1wb3J0IG9yZy53ZWJydGMuQ2FtZXJhRW51bWVyYXRvcjsKLWltcG9ydCBvcmcu
d2VicnRjLkVnbEJhc2U7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5JY2VDYW5kaWRhdGU7Ci1pbXBvcnQg
b3JnLndlYnJ0Yy5NZWRpYUNvZGVjVmlkZW9FbmNvZGVyOwotaW1wb3J0IG9yZy53ZWJydGMuUGVl
ckNvbm5lY3Rpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5QZWVyQ29ubmVjdGlvbkZhY3Rvcnk7Ci1p
bXBvcnQgb3JnLndlYnJ0Yy5TZXNzaW9uRGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLndlYnJ0Yy5T
dGF0c1JlcG9ydDsKLWltcG9ydCBvcmcud2VicnRjLlZpZGVvQ2FwdHVyZXI7Ci1pbXBvcnQgb3Jn
LndlYnJ0Yy5WaWRlb1JlbmRlcmVyOwotCi1pbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7Ci1p
bXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ291bnRE
b3duTGF0Y2g7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwot
aW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKLWltcG9ydCBqYXZhLnV0aWwu
Y29uY3VycmVudC5UaW1lVW5pdDsKLQotcHVibGljIGNsYXNzIFBlZXJDb25uZWN0aW9uQ2xpZW50
VGVzdAotICAgIGV4dGVuZHMgSW5zdHJ1bWVudGF0aW9uVGVzdENhc2UgaW1wbGVtZW50cyBQZWVy
Q29ubmVjdGlvbkV2ZW50cyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAi
UlRDQ2xpZW50VGVzdCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBJQ0VfQ09OTkVDVElP
Tl9XQUlUX1RJTUVPVVQgPSAxMDAwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFdBSVRf
VElNRU9VVCA9IDcwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQU1FUkFfU1dJVENI
X0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZJREVPX1JFU1RBUlRf
QVRURU1QVFMgPSAzOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FQVFVSRV9GT1JNQVRf
Q0hBTkdFX0FUVEVNUFRTID0gMzsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFZJREVPX1JF
U1RBUlRfVElNRU9VVCA9IDUwMDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEVYUEVDVEVE
X1ZJREVPX0ZSQU1FUyA9IDEwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVklERU9f
Q09ERUNfVlA4ID0gIlZQOCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWSURFT19D
T0RFQ19WUDkgPSAiVlA5IjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFZJREVPX0NP
REVDX0gyNjQgPSAiSDI2NCI7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBBVURJT19SVU5f
VElNRU9VVCA9IDEwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMT0NBTF9SRU5E
RVJFUl9OQU1FID0gIkxvY2FsIHJlbmRlcmVyIjsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIFJFTU9URV9SRU5ERVJFUl9OQU1FID0gIlJlbW90ZSByZW5kZXJlciI7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgaW50IE1BWF9WSURFT19GUFMgPSAzMDsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgaW50IFdJRFRIX1ZHQSA9IDY0MDsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhF
SUdIVF9WR0EgPSA0ODA7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBXSURUSF9RVkdBID0g
MzIwOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgSEVJR0hUX1FWR0EgPSAyNDA7Ci0KLSAg
Ly8gVGhlIHBlZXIgY29ubmVjdGlvbiBjbGllbnQgaXMgYXNzdW1lZCB0byBiZSB0aHJlYWQgc2Fm
ZSBpbiBpdHNlbGY7IHRoZQotICAvLyByZWZlcmVuY2UgaXMgd3JpdHRlbiBieSB0aGUgdGVzdCB0
aHJlYWQgYW5kIHJlYWQgYnkgd29ya2VyIHRocmVhZHMuCi0gIHByaXZhdGUgdm9sYXRpbGUgUGVl
ckNvbm5lY3Rpb25DbGllbnQgcGNDbGllbnQ7Ci0gIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBs
b29wYmFjazsKLQotICAvLyBFR0wgY29udGV4dCB0aGF0IGNhbiBiZSB1c2VkIGJ5IGhhcmR3YXJl
IHZpZGVvIGRlY29kZXJzIHRvIGRlY29kZSB0byBhIHRleHR1cmUuCi0gIHByaXZhdGUgRWdsQmFz
ZSBlZ2xCYXNlOwotCi0gIC8vIFRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgdGhlaXIgcmVzcGVjdGl2
ZSBldmVudCBvYmplY3RzLgotICBwcml2YXRlIEV4ZWN1dG9yU2VydmljZSBzaWduYWxpbmdFeGVj
dXRvcjsKLSAgcHJpdmF0ZSBib29sZWFuIGlzQ2xvc2VkOwotICBwcml2YXRlIGJvb2xlYW4gaXNJ
Y2VDb25uZWN0ZWQ7Ci0gIHByaXZhdGUgU2Vzc2lvbkRlc2NyaXB0aW9uIGxvY2FsU2RwOwotICBw
cml2YXRlIExpc3Q8SWNlQ2FuZGlkYXRlPiBpY2VDYW5kaWRhdGVzID0gbmV3IExpbmtlZExpc3Q8
SWNlQ2FuZGlkYXRlPigpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBsb2NhbFNkcEV2ZW50ID0g
bmV3IE9iamVjdCgpOwotICBwcml2YXRlIGZpbmFsIE9iamVjdCBpY2VDYW5kaWRhdGVFdmVudCA9
IG5ldyBPYmplY3QoKTsKLSAgcHJpdmF0ZSBmaW5hbCBPYmplY3QgaWNlQ29ubmVjdGVkRXZlbnQg
PSBuZXcgT2JqZWN0KCk7Ci0gIHByaXZhdGUgZmluYWwgT2JqZWN0IGNsb3NlRXZlbnQgPSBuZXcg
T2JqZWN0KCk7Ci0KLSAgLy8gTW9jayByZW5kZXJlciBpbXBsZW1lbnRhdGlvbi4KLSAgcHJpdmF0
ZSBzdGF0aWMgY2xhc3MgTW9ja1JlbmRlcmVyIGltcGxlbWVudHMgVmlkZW9SZW5kZXJlci5DYWxs
YmFja3MgewotICAgIC8vIFRoZXNlIGFyZSBwcm90ZWN0ZWQgYnkgJ3RoaXMnIHNpbmNlIHdlIGdl
dHMgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZHMuCi0gICAgcHJpdmF0ZSBTdHJpbmcgcmVuZGVy
ZXJOYW1lOwotICAgIHByaXZhdGUgYm9vbGVhbiByZW5kZXJGcmFtZUNhbGxlZCA9IGZhbHNlOwot
Ci0gICAgLy8gVGhyZWFkLXNhZmUgaW4gaXRzZWxmLgotICAgIHByaXZhdGUgQ291bnREb3duTGF0
Y2ggZG9uZVJlbmRlcmluZzsKLQotICAgIHB1YmxpYyBNb2NrUmVuZGVyZXIoaW50IGV4cGVjdGVk
RnJhbWVzLCBTdHJpbmcgcmVuZGVyZXJOYW1lKSB7Ci0gICAgICB0aGlzLnJlbmRlcmVyTmFtZSA9
IHJlbmRlcmVyTmFtZTsKLSAgICAgIHJlc2V0KGV4cGVjdGVkRnJhbWVzKTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXNldHMgcmVuZGVyIHRvIHdhaXQgZm9yIG5ldyBhbW91bnQgb2YgdmlkZW8gZnJhbWVz
LgotICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldChpbnQgZXhwZWN0ZWRGcmFtZXMp
IHsKLSAgICAgIHJlbmRlckZyYW1lQ2FsbGVkID0gZmFsc2U7Ci0gICAgICBkb25lUmVuZGVyaW5n
ID0gbmV3IENvdW50RG93bkxhdGNoKGV4cGVjdGVkRnJhbWVzKTsKLSAgICB9Ci0KLSAgICBAT3Zl
cnJpZGUKLSAgICBwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgcmVuZGVyRnJhbWUoVmlkZW9SZW5k
ZXJlci5JNDIwRnJhbWUgZnJhbWUpIHsKLSAgICAgIGlmICghcmVuZGVyRnJhbWVDYWxsZWQpIHsK
LSAgICAgICAgaWYgKHJlbmRlcmVyTmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgTG9nLmQoVEFH
LCByZW5kZXJlck5hbWUgKyAiIHJlbmRlciBmcmFtZTogIiArIGZyYW1lLnJvdGF0ZWRXaWR0aCgp
ICsgIiB4ICIKLSAgICAgICAgICAgICAgICAgICsgZnJhbWUucm90YXRlZEhlaWdodCgpKTsKLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBMb2cuZChUQUcsICJSZW5kZXIgZnJhbWU6ICIgKyBm
cmFtZS5yb3RhdGVkV2lkdGgoKSArICIgeCAiICsgZnJhbWUucm90YXRlZEhlaWdodCgpKTsKLSAg
ICAgICAgfQotICAgICAgfQotICAgICAgcmVuZGVyRnJhbWVDYWxsZWQgPSB0cnVlOwotICAgICAg
VmlkZW9SZW5kZXJlci5yZW5kZXJGcmFtZURvbmUoZnJhbWUpOwotICAgICAgZG9uZVJlbmRlcmlu
Zy5jb3VudERvd24oKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGRuJ3QgaG9s
ZCBhbnkgbG9ja3Mgb3IgdG91Y2ggbWVtYmVyIHZhcmlhYmxlcyBzaW5jZSBpdAotICAgIC8vIGJs
b2Nrcy4KLSAgICBwdWJsaWMgYm9vbGVhbiB3YWl0Rm9yRnJhbWVzUmVuZGVyZWQoaW50IHRpbWVv
dXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICAgIGRvbmVSZW5kZXJpbmcu
YXdhaXQodGltZW91dE1zLCBUaW1lVW5pdC5NSUxMSVNFQ09ORFMpOwotICAgICAgcmV0dXJuIChk
b25lUmVuZGVyaW5nLmdldENvdW50KCkgPD0gMCk7Ci0gICAgfQotICB9Ci0KLSAgLy8gUGVlciBj
b25uZWN0aW9uIGV2ZW50cyBpbXBsZW1lbnRhdGlvbi4KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2
b2lkIG9uTG9jYWxEZXNjcmlwdGlvbihTZXNzaW9uRGVzY3JpcHRpb24gc2RwKSB7Ci0gICAgTG9n
LmQoVEFHLCAiTG9jYWxTRFAgdHlwZTogIiArIHNkcC50eXBlKTsKLSAgICBzeW5jaHJvbml6ZWQg
KGxvY2FsU2RwRXZlbnQpIHsKLSAgICAgIGxvY2FsU2RwID0gc2RwOwotICAgICAgbG9jYWxTZHBF
dmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZv
aWQgb25JY2VDYW5kaWRhdGUoZmluYWwgSWNlQ2FuZGlkYXRlIGNhbmRpZGF0ZSkgewotICAgIHN5
bmNocm9uaXplZCAoaWNlQ2FuZGlkYXRlRXZlbnQpIHsKLSAgICAgIExvZy5kKFRBRywgIkljZUNh
bmRpZGF0ZSAjIiArIGljZUNhbmRpZGF0ZXMuc2l6ZSgpICsgIiA6ICIgKyBjYW5kaWRhdGUudG9T
dHJpbmcoKSk7Ci0gICAgICBpZiAobG9vcGJhY2spIHsKLSAgICAgICAgLy8gTG9vcGJhY2sgbG9j
YWwgSUNFIGNhbmRpZGF0ZSBpbiBhIHNlcGFyYXRlIHRocmVhZCB0byBhdm9pZCBhZGRpbmcKLSAg
ICAgICAgLy8gcmVtb3RlIElDRSBjYW5kaWRhdGUgaW4gYSBsb2NhbCBJQ0UgY2FuZGlkYXRlIGNh
bGxiYWNrLgotICAgICAgICBzaWduYWxpbmdFeGVjdXRvci5leGVjdXRlKG5ldyBSdW5uYWJsZSgp
IHsKLSAgICAgICAgICBAT3ZlcnJpZGUKLSAgICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0g
ICAgICAgICAgICBwY0NsaWVudC5hZGRSZW1vdGVJY2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKLSAg
ICAgICAgICB9Ci0gICAgICAgIH0pOwotICAgICAgfQotICAgICAgaWNlQ2FuZGlkYXRlcy5hZGQo
Y2FuZGlkYXRlKTsKLSAgICAgIGljZUNhbmRpZGF0ZUV2ZW50Lm5vdGlmeUFsbCgpOwotICAgIH0K
LSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvbkljZUNhbmRpZGF0ZXNSZW1vdmVk
KGZpbmFsIEljZUNhbmRpZGF0ZVtdIGNhbmRpZGF0ZXMpIHsKLSAgICAvLyBUT0RPKGhvbmdoYWl6
KTogQWRkIHRoaXMgZm9yIHRlc3RzLgotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lk
IG9uSWNlQ29ubmVjdGVkKCkgewotICAgIExvZy5kKFRBRywgIklDRSBDb25uZWN0ZWQiKTsKLSAg
ICBzeW5jaHJvbml6ZWQgKGljZUNvbm5lY3RlZEV2ZW50KSB7Ci0gICAgICBpc0ljZUNvbm5lY3Rl
ZCA9IHRydWU7Ci0gICAgICBpY2VDb25uZWN0ZWRFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0g
IH0KLQotICBAT3ZlcnJpZGUKLSAgcHVibGljIHZvaWQgb25JY2VEaXNjb25uZWN0ZWQoKSB7Ci0g
ICAgTG9nLmQoVEFHLCAiSUNFIERpc2Nvbm5lY3RlZCIpOwotICAgIHN5bmNocm9uaXplZCAoaWNl
Q29ubmVjdGVkRXZlbnQpIHsKLSAgICAgIGlzSWNlQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAgICBp
Y2VDb25uZWN0ZWRFdmVudC5ub3RpZnlBbGwoKTsKLSAgICB9Ci0gIH0KLQotICBAT3ZlcnJpZGUK
LSAgcHVibGljIHZvaWQgb25QZWVyQ29ubmVjdGlvbkNsb3NlZCgpIHsKLSAgICBMb2cuZChUQUcs
ICJQZWVyQ29ubmVjdGlvbiBjbG9zZWQiKTsKLSAgICBzeW5jaHJvbml6ZWQgKGNsb3NlRXZlbnQp
IHsKLSAgICAgIGlzQ2xvc2VkID0gdHJ1ZTsKLSAgICAgIGNsb3NlRXZlbnQubm90aWZ5QWxsKCk7
Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRlCi0gIHB1YmxpYyB2b2lkIG9uUGVlckNvbm5lY3Rp
b25FcnJvcihTdHJpbmcgZGVzY3JpcHRpb24pIHsKLSAgICBmYWlsKCJQQyBFcnJvcjogIiArIGRl
c2NyaXB0aW9uKTsKLSAgfQotCi0gIEBPdmVycmlkZQotICBwdWJsaWMgdm9pZCBvblBlZXJDb25u
ZWN0aW9uU3RhdHNSZWFkeShTdGF0c1JlcG9ydFtdIHJlcG9ydHMpIHt9Ci0KLSAgLy8gSGVscGVy
IHdhaXQgZnVuY3Rpb25zLgotICBwcml2YXRlIGJvb2xlYW4gd2FpdEZvckxvY2FsU0RQKGludCB0
aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgc3luY2hyb25pemVk
IChsb2NhbFNkcEV2ZW50KSB7Ci0gICAgICBpZiAobG9jYWxTZHAgPT0gbnVsbCkgewotICAgICAg
ICBsb2NhbFNkcEV2ZW50LndhaXQodGltZW91dE1zKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiAo
bG9jYWxTZHAgIT0gbnVsbCk7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHdhaXRG
b3JJY2VDYW5kaWRhdGVzKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgc3luY2hyb25pemVkIChpY2VDYW5kaWRhdGVFdmVudCkgewotICAgICAgaWYgKGlj
ZUNhbmRpZGF0ZXMuc2l6ZSgpID09IDApIHsKLSAgICAgICAgaWNlQ2FuZGlkYXRlRXZlbnQud2Fp
dCh0aW1lb3V0TXMpOwotICAgICAgfQotICAgICAgcmV0dXJuIChpY2VDYW5kaWRhdGVzLnNpemUo
KSA+IDApOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3YWl0Rm9ySWNlQ29ubmVj
dGVkKGludCB0aW1lb3V0TXMpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgc3lu
Y2hyb25pemVkIChpY2VDb25uZWN0ZWRFdmVudCkgewotICAgICAgaWYgKCFpc0ljZUNvbm5lY3Rl
ZCkgewotICAgICAgICBpY2VDb25uZWN0ZWRFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9
Ci0gICAgICBpZiAoIWlzSWNlQ29ubmVjdGVkKSB7Ci0gICAgICAgIExvZy5lKFRBRywgIklDRSBj
b25uZWN0aW9uIGZhaWx1cmUiKTsKLSAgICAgIH0KLQotICAgICAgcmV0dXJuIGlzSWNlQ29ubmVj
dGVkOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiB3YWl0Rm9yUGVlckNvbm5lY3Rp
b25DbG9zZWQoaW50IHRpbWVvdXRNcykgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAg
ICBzeW5jaHJvbml6ZWQgKGNsb3NlRXZlbnQpIHsKLSAgICAgIGlmICghaXNDbG9zZWQpIHsKLSAg
ICAgICAgY2xvc2VFdmVudC53YWl0KHRpbWVvdXRNcyk7Ci0gICAgICB9Ci0gICAgICByZXR1cm4g
aXNDbG9zZWQ7Ci0gICAgfQotICB9Ci0KLSAgUGVlckNvbm5lY3Rpb25DbGllbnQgY3JlYXRlUGVl
ckNvbm5lY3Rpb25DbGllbnQoTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIsCi0gICAgICBNb2Nr
UmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIsIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBwZWVyQ29u
bmVjdGlvblBhcmFtZXRlcnMsCi0gICAgICBWaWRlb0NhcHR1cmVyIHZpZGVvQ2FwdHVyZXIsIEVn
bEJhc2UuQ29udGV4dCBlZ2xDb250ZXh0KSB7Ci0gICAgTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VT
ZXJ2ZXI+IGljZVNlcnZlcnMgPSBuZXcgTGlua2VkTGlzdDxQZWVyQ29ubmVjdGlvbi5JY2VTZXJ2
ZXI+KCk7Ci0gICAgU2lnbmFsaW5nUGFyYW1ldGVycyBzaWduYWxpbmdQYXJhbWV0ZXJzID0KLSAg
ICAgICAgbmV3IFNpZ25hbGluZ1BhcmFtZXRlcnMoaWNlU2VydmVycywgdHJ1ZSwgLy8gaWNlU2Vy
dmVycywgaW5pdGlhdG9yLgotICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgLy8gY2xpZW50
SWQsIHdzc1VybCwgd3NzUG9zdFVybC4KLSAgICAgICAgICAgIG51bGwsIG51bGwpOyAvLyBvZmZl
clNkcCwgaWNlQ2FuZGlkYXRlcy4KLQotICAgIFBlZXJDb25uZWN0aW9uQ2xpZW50IGNsaWVudCA9
IFBlZXJDb25uZWN0aW9uQ2xpZW50LmdldEluc3RhbmNlKCk7Ci0gICAgUGVlckNvbm5lY3Rpb25G
YWN0b3J5Lk9wdGlvbnMgb3B0aW9ucyA9IG5ldyBQZWVyQ29ubmVjdGlvbkZhY3RvcnkuT3B0aW9u
cygpOwotICAgIG9wdGlvbnMubmV0d29ya0lnbm9yZU1hc2sgPSAwOwotICAgIG9wdGlvbnMuZGlz
YWJsZU5ldHdvcmtNb25pdG9yID0gdHJ1ZTsKLSAgICBjbGllbnQuc2V0UGVlckNvbm5lY3Rpb25G
YWN0b3J5T3B0aW9ucyhvcHRpb25zKTsKLSAgICBjbGllbnQuY3JlYXRlUGVlckNvbm5lY3Rpb25G
YWN0b3J5KAotICAgICAgICBnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCks
IHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycywgdGhpcyk7Ci0gICAgY2xpZW50LmNyZWF0ZVBlZXJD
b25uZWN0aW9uKAotICAgICAgICBlZ2xDb250ZXh0LCBsb2NhbFJlbmRlcmVyLCByZW1vdGVSZW5k
ZXJlciwgdmlkZW9DYXB0dXJlciwgc2lnbmFsaW5nUGFyYW1ldGVycyk7Ci0gICAgY2xpZW50LmNy
ZWF0ZU9mZmVyKCk7Ci0gICAgcmV0dXJuIGNsaWVudDsKLSAgfQotCi0gIHByaXZhdGUgUGVlckNv
bm5lY3Rpb25QYXJhbWV0ZXJzIGNyZWF0ZVBhcmFtZXRlcnNGb3JBdWRpb0NhbGwoKSB7Ci0gICAg
UGVlckNvbm5lY3Rpb25QYXJhbWV0ZXJzIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyA9Ci0gICAg
ICAgIG5ldyBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMoZmFsc2UsIC8qIHZpZGVvQ2FsbEVuYWJs
ZWQgKi8KLSAgICAgICAgICAgIHRydWUsIC8qIGxvb3BiYWNrICovCi0gICAgICAgICAgICBmYWxz
ZSwgLyogdHJhY2luZyAqLwotICAgICAgICAgICAgLy8gVmlkZW8gY29kZWMgcGFyYW1ldGVycy4K
LSAgICAgICAgICAgIDAsIC8qIHZpZGVvV2lkdGggKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVv
SGVpZ2h0ICovCi0gICAgICAgICAgICAwLCAvKiB2aWRlb0ZwcyAqLwotICAgICAgICAgICAgMCwg
LyogdmlkZW9TdGFydEJpdHJhdGUgKi8KLSAgICAgICAgICAgICIiLCAvKiB2aWRlb0NvZGVjICov
Ci0gICAgICAgICAgICB0cnVlLCAvKiB2aWRlb0NvZGVjSHdBY2NlbGVyYXRpb24gKi8KLSAgICAg
ICAgICAgIC8vIEF1ZGlvIGNvZGVjIHBhcmFtZXRlcnMuCi0gICAgICAgICAgICAwLCAvKiBhdWRp
b1N0YXJ0Qml0cmF0ZSAqLwotICAgICAgICAgICAgIk9QVVMiLCAvKiBhdWRpb0NvZGVjICovCi0g
ICAgICAgICAgICBmYWxzZSwgLyogbm9BdWRpb1Byb2Nlc3NpbmcgKi8KLSAgICAgICAgICAgIGZh
bHNlLCAvKiBhZWNEdW1wICovCi0gICAgICAgICAgICBmYWxzZSAvKiB1c2VPcGVuU0xFUyAqLywg
ZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5BRUMgKi8sIGZhbHNlIC8qIGRpc2FibGVCdWlsdEluQUdD
ICovLAotICAgICAgICAgICAgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5OUyAqLywgZmFsc2UgLyog
ZW5hYmxlTGV2ZWxDb250cm9sICovKTsKLQotICAgIHJldHVybiBwZWVyQ29ubmVjdGlvblBhcmFt
ZXRlcnM7Ci0gIH0KLQotICBwcml2YXRlIFZpZGVvQ2FwdHVyZXIgY3JlYXRlQ2FtZXJhQ2FwdHVy
ZXIoYm9vbGVhbiBjYXB0dXJlVG9UZXh0dXJlKSB7Ci0gICAgZmluYWwgYm9vbGVhbiB1c2VDYW1l
cmEyID0KLSAgICAgICAgY2FwdHVyZVRvVGV4dHVyZSAmJiBDYW1lcmEyRW51bWVyYXRvci5pc1N1
cHBvcnRlZChnZXRJbnN0cnVtZW50YXRpb24oKS5nZXRUYXJnZXRDb250ZXh0KCkpOwotCi0gICAg
Q2FtZXJhRW51bWVyYXRvciBlbnVtZXJhdG9yOwotICAgIGlmICh1c2VDYW1lcmEyKSB7Ci0gICAg
ICBlbnVtZXJhdG9yID0gbmV3IENhbWVyYTJFbnVtZXJhdG9yKGdldEluc3RydW1lbnRhdGlvbigp
LmdldFRhcmdldENvbnRleHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGVudW1lcmF0b3IgPSBu
ZXcgQ2FtZXJhMUVudW1lcmF0b3IoY2FwdHVyZVRvVGV4dHVyZSk7Ci0gICAgfQotICAgIFN0cmlu
ZyBkZXZpY2VOYW1lID0gZW51bWVyYXRvci5nZXREZXZpY2VOYW1lcygpWzBdOwotICAgIHJldHVy
biBlbnVtZXJhdG9yLmNyZWF0ZUNhcHR1cmVyKGRldmljZU5hbWUsIG51bGwpOwotICB9Ci0KLSAg
cHJpdmF0ZSBQZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVv
Q2FsbChTdHJpbmcgdmlkZW9Db2RlYykgewotICAgIFBlZXJDb25uZWN0aW9uUGFyYW1ldGVycyBw
ZWVyQ29ubmVjdGlvblBhcmFtZXRlcnMgPQotICAgICAgICBuZXcgUGVlckNvbm5lY3Rpb25QYXJh
bWV0ZXJzKHRydWUsIC8qIHZpZGVvQ2FsbEVuYWJsZWQgKi8KLSAgICAgICAgICAgIHRydWUsIC8q
IGxvb3BiYWNrICovCi0gICAgICAgICAgICBmYWxzZSwgLyogdHJhY2luZyAqLwotICAgICAgICAg
ICAgLy8gVmlkZW8gY29kZWMgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvV2lk
dGggKi8KLSAgICAgICAgICAgIDAsIC8qIHZpZGVvSGVpZ2h0ICovCi0gICAgICAgICAgICAwLCAv
KiB2aWRlb0ZwcyAqLwotICAgICAgICAgICAgMCwgLyogdmlkZW9TdGFydEJpdHJhdGUgKi8KLSAg
ICAgICAgICAgIHZpZGVvQ29kZWMsIC8qIHZpZGVvQ29kZWMgKi8KLSAgICAgICAgICAgIHRydWUs
IC8qIHZpZGVvQ29kZWNId0FjY2VsZXJhdGlvbiAqLwotICAgICAgICAgICAgLy8gQXVkaW8gY29k
ZWMgcGFyYW1ldGVycy4KLSAgICAgICAgICAgIDAsIC8qIGF1ZGlvU3RhcnRCaXRyYXRlICovCi0g
ICAgICAgICAgICAiT1BVUyIsIC8qIGF1ZGlvQ29kZWMgKi8KLSAgICAgICAgICAgIGZhbHNlLCAv
KiBub0F1ZGlvUHJvY2Vzc2luZyAqLwotICAgICAgICAgICAgZmFsc2UsIC8qIGFlY0R1bXAgKi8K
LSAgICAgICAgICAgIGZhbHNlIC8qIHVzZU9wZW5TTEVTICovLCBmYWxzZSAvKiBkaXNhYmxlQnVp
bHRJbkFFQyAqLywgZmFsc2UgLyogZGlzYWJsZUJ1aWx0SW5BR0MgKi8sCi0gICAgICAgICAgICBm
YWxzZSAvKiBkaXNhYmxlQnVpbHRJbk5TICovLCBmYWxzZSAvKiBlbmFibGVMZXZlbENvbnRyb2wg
Ki8pOwotCi0gICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uUGFyYW1ldGVyczsKLSAgfQotCi0gIEBP
dmVycmlkZQotICBwdWJsaWMgdm9pZCBzZXRVcCgpIHsKLSAgICBzaWduYWxpbmdFeGVjdXRvciA9
IEV4ZWN1dG9ycy5uZXdTaW5nbGVUaHJlYWRFeGVjdXRvcigpOwotICAgIGlmIChCdWlsZC5WRVJT
SU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMSkgewotICAg
ICAgZWdsQmFzZSA9IEVnbEJhc2UuY3JlYXRlKCk7Ci0gICAgfQotICB9Ci0KLSAgQE92ZXJyaWRl
Ci0gIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgewotICAgIHNpZ25hbGluZ0V4ZWN1dG9yLnNodXRk
b3duKCk7Ci0gICAgaWYgKGVnbEJhc2UgIT0gbnVsbCkgewotICAgICAgZWdsQmFzZS5yZWxlYXNl
KCk7Ci0gICAgfQotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0U2V0TG9j
YWxPZmZlck1ha2VzVmlkZW9GbG93TG9jYWxseSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlv
biB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFNldExvY2FsT2ZmZXJNYWtlc1ZpZGVvRmxvd0xvY2Fs
bHkiKTsKLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVyZXIo
RVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBwY0NsaWVu
dCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIsIG5ldyBNb2NrUmVu
ZGVyZXIoMCwgbnVsbCksCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklE
RU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2Fw
dHVyZVRvVGV4dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQIGFu
ZCBpY2UgY2FuZGlkYXRlcyBzZXQgZXZlbnRzLgotICAgIGFzc2VydFRydWUoIkxvY2FsIFNEUCB3
YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0
VHJ1ZSgiSUNFIGNhbmRpZGF0ZXMgd2VyZSBub3QgZ2VuZXJhdGVkLiIsIHdhaXRGb3JJY2VDYW5k
aWRhdGVzKFdBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCB2aWRlbyBm
cmFtZXMgd2VyZSByZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiTG9jYWwgdmlk
ZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkLiIsIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1l
c1JlbmRlcmVkKFdBSVRfVElNRU9VVCkpOwotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBh
c3NlcnRUcnVlKAotICAgICAgICAiUGVlckNvbm5lY3Rpb24gY2xvc2UgZXZlbnQgd2FzIG5vdCBy
ZWNlaXZlZC4iLCB3YWl0Rm9yUGVlckNvbm5lY3Rpb25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0g
ICAgTG9nLmQoVEFHLCAidGVzdFNldExvY2FsT2ZmZXJNYWtlc1ZpZGVvRmxvd0xvY2FsbHkgRG9u
ZS4iKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkb0xvb3BiYWNrVGVzdChQZWVyQ29ubmVjdGlv
blBhcmFtZXRlcnMgcGFyYW1ldGVycywgVmlkZW9DYXB0dXJlciB2aWRlb0NhcHR1cmVyLAotICAg
ICAgYm9vbGVhbiBkZWNvZGVUb1RleHR1cmUpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7
Ci0gICAgbG9vcGJhY2sgPSB0cnVlOwotICAgIE1vY2tSZW5kZXJlciBsb2NhbFJlbmRlcmVyID0g
bnVsbDsKLSAgICBNb2NrUmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIgPSBudWxsOwotICAgIGlmIChw
YXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIExvZy5kKFRBRywgInRlc3RMb29w
YmFjayBmb3IgdmlkZW8gIiArIHBhcmFtZXRlcnMudmlkZW9Db2RlYyk7Ci0gICAgICBsb2NhbFJl
bmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExPQ0FMX1JF
TkRFUkVSX05BTUUpOwotICAgICAgcmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVY
UEVDVEVEX1ZJREVPX0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVSX05BTUUpOwotICAgIH0gZWxzZSB7
Ci0gICAgICBMb2cuZChUQUcsICJ0ZXN0TG9vcGJhY2sgZm9yIGF1ZGlvLiIpOwotICAgIH0KLSAg
ICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVuZGVyZXIsIHJl
bW90ZVJlbmRlcmVyLCBwYXJhbWV0ZXJzLCB2aWRlb0NhcHR1cmVyLAotICAgICAgICBkZWNvZGVU
b1RleHR1cmUgPyBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkgOiBudWxsKTsKLQotICAgIC8v
IFdhaXQgZm9yIGxvY2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90
ZSBTRFAuCi0gICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JM
b2NhbFNEUChXQUlUX1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2Rw
ID0gbmV3IFNlc3Npb25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5
cGUuZnJvbUNhbm9uaWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0g
ICAgcGNDbGllbnQuc2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdh
aXQgZm9yIElDRSBjb25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZh
aWx1cmUuIiwgd2FpdEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQp
KTsKLQotICAgIGlmIChwYXJhbWV0ZXJzLnZpZGVvQ2FsbEVuYWJsZWQpIHsKLSAgICAgIC8vIENo
ZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4KLSAg
ICAgIGFzc2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZC4iLAot
ICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdBSVRfVElNRU9V
VCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5k
ZXJlZC4iLAotICAgICAgICAgIHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChX
QUlUX1RJTUVPVVQpKTsKLSAgICB9IGVsc2UgewotICAgICAgLy8gRm9yIGF1ZGlvIGp1c3Qgc2xl
ZXAgZm9yIDEgc2VjLgotICAgICAgLy8gVE9ETyhnbGF6bmV2KTogY2hlY2sgaG93IHdlIGNhbiBk
ZXRlY3QgdGhhdCByZW1vdGUgYXVkaW8gd2FzIHJlbmRlcmVkLgotICAgICAgVGhyZWFkLnNsZWVw
KEFVRElPX1JVTl9USU1FT1VUKTsKLSAgICB9Ci0KLSAgICBwY0NsaWVudC5jbG9zZSgpOwotICAg
IGFzc2VydFRydWUod2FpdEZvclBlZXJDb25uZWN0aW9uQ2xvc2VkKFdBSVRfVElNRU9VVCkpOwot
ICAgIExvZy5kKFRBRywgInRlc3RMb29wYmFjayBkb25lLiIpOwotICB9Ci0KLSAgQFNtYWxsVGVz
dAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tBdWRpbygpIHRocm93cyBJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvckF1ZGlvQ2Fs
bCgpLCBudWxsLCBmYWxzZSAvKiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxs
VGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0TG9vcGJhY2tWcDgoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0Nh
bGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2Ug
LyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIGZhbHNlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0g
IH0KLQotICBAU21hbGxUZXN0Ci0gIHB1YmxpYyB2b2lkIHRlc3RMb29wYmFja1ZwOSgpIHRocm93
cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1l
dGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDkpLAotICAgICAgICBjcmVhdGVDYW1lcmFD
YXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgZmFsc2UgLyogZGVjb2RlVG9U
ZXh0dXJlICovKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3Bi
YWNrSDI2NCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgZG9Mb29wYmFja1Rl
c3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19IMjY0KSwKLSAgICAg
ICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIGZh
bHNlIC8qIGRlY29kZVRvVGV4dHVyZSAqLyk7Ci0gIH0KLQotICBAU21hbGxUZXN0Ci0gIHB1Ymxp
YyB2b2lkIHRlc3RMb29wYmFja1ZwOERlY29kZVRvVGV4dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRl
ZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJ
T05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShUQUcsICJEZWNvZGUgdG8gdGV4dHVyZXMg
aXMgbm90IHN1cHBvcnRlZCwgcmVxdWlyZXMgU0RLIHZlcnNpb24gMTkuIik7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGRvTG9vcGJhY2tUZXN0KGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0Nh
bGwoVklERU9fQ09ERUNfVlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2Ug
LyogY2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAg
fQotCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA5RGVjb2RlVG9U
ZXh0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVS
U0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5p
KFRBRywgIkRlY29kZSB0byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLCByZXF1aXJlcyBTREsg
dmVyc2lvbiAxOS4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3Qo
Y3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19WUDkpLAotICAgICAgICBj
cmVhdGVDYW1lcmFDYXB0dXJlcihmYWxzZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAv
KiBkZWNvZGVUb1RleHR1cmUgKi8pOwotICB9Ci0KLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9p
ZCB0ZXN0TG9vcGJhY2tIMjY0RGVjb2RlVG9UZXh0dXJlKCkgdGhyb3dzIEludGVycnVwdGVkRXhj
ZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lPTl9D
T0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0byB0ZXh0dXJlcyBpcyBu
b3Qgc3VwcG9ydGVkLCByZXF1aXJlcyBTREsgdmVyc2lvbiAxOS4iKTsKLSAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFyYW1ldGVyc0ZvclZpZGVvQ2FsbChW
SURFT19DT0RFQ19IMjY0KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyog
Y2FwdHVyZVRvVGV4dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQot
Ci0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3BiYWNrVnA4Q2FwdHVyZVRvVGV4
dHVyZSgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgaWYgKEJ1aWxkLlZFUlNJ
T04uU0RLX0lOVCA8IEJ1aWxkLlZFUlNJT05fQ09ERVMuS0lUS0FUKSB7Ci0gICAgICBMb2cuaShU
QUcsICJFbmNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRlZC4gUmVxdWlyZXMgU0RLIHZl
cnNpb24gMTkiKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVE9ETyhwZXJraik6IElm
IHdlIGNhbiBhbHdheXMgY2FwdHVyZSB0byB0ZXh0dXJlcywgdGhlcmUgaXMgbm8gbmVlZCB0byBj
aGVjayBpZiB0aGUKLSAgICAvLyBoYXJkd2FyZSBlbmNvZGVyIHN1cHBvcnRzIHRvIGVuY29kZSBm
cm9tIGEgdGV4dHVyZS4KLSAgICBpZiAoIU1lZGlhQ29kZWNWaWRlb0VuY29kZXIuaXNWcDhId1N1
cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkgewotICAgICAgTG9nLmkoVEFHLCAiVlA4IGVuY29kZSB0
byB0ZXh0dXJlcyBpcyBub3Qgc3VwcG9ydGVkLiIpOwotICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBkb0xvb3BiYWNrVGVzdChjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9DYWxsKFZJREVPX0NPREVD
X1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyogY2FwdHVyZVRvVGV4
dHVyZSAqLyksIHRydWUgLyogZGVjb2RlVG9UZXh0dXJlICovKTsKLSAgfQotCi0gIC8vIFRlc3Qg
dGhhdCBhIGNhbGwgY2FuIGJlIHNldHVwIGV2ZW4gaWYgdGhlIEVHTCBjb250ZXh0IHVzZWQgZHVy
aW5nIGluaXRpYWxpemF0aW9uIGlzCi0gIC8vIHJlbGVhc2VkIGJlZm9yZSB0aGUgVmlkZW8gY29k
ZWNzIGFyZSBjcmVhdGVkLiBUaGUgSFcgZW5jb2RlciBhbmQgZGVjb2RlciBpcyBzZXR1cCB0byB1
c2UKLSAgLy8gdGV4dHVyZXMuCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdExvb3Bi
YWNrRWdsQ29udGV4dFJlbGVhc2VkQWZ0ZXJDcmVhdGluZ1BjKCkgdGhyb3dzIEludGVycnVwdGVk
RXhjZXB0aW9uIHsKLSAgICBpZiAoQnVpbGQuVkVSU0lPTi5TREtfSU5UIDwgQnVpbGQuVkVSU0lP
Tl9DT0RFUy5LSVRLQVQpIHsKLSAgICAgIExvZy5pKFRBRywgIkRlY29kZSB0byB0ZXh0dXJlcyBp
cyBub3Qgc3VwcG9ydGVkLiBSZXF1aXJlcyBTREsgdmVyc2lvbiAxOSIpOwotICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLSAgICBQZWVyQ29ubmVjdGlvblBhcmFt
ZXRlcnMgcGFyYW1ldGVycyA9IGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09E
RUNfVlA4KTsKLSAgICBNb2NrUmVuZGVyZXIgbG9jYWxSZW5kZXJlciA9IG5ldyBNb2NrUmVuZGVy
ZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBMT0NBTF9SRU5ERVJFUl9OQU1FKTsKLSAgICBNb2Nr
UmVuZGVyZXIgcmVtb3RlUmVuZGVyZXIgPSBuZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVP
X0ZSQU1FUywgUkVNT1RFX1JFTkRFUkVSX05BTUUpOwotICAgIHBjQ2xpZW50ID0gY3JlYXRlUGVl
ckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVuZGVyZXIsIHBhcmFtZXRl
cnMsCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKHRydWUgLyogY2FwdHVyZVRvVGV4dHVy
ZSAqLyksIGVnbEJhc2UuZ2V0RWdsQmFzZUNvbnRleHQoKSk7Ci0KLSAgICAvLyBXYWl0IGZvciBs
b2NhbCBTRFAsIHJlbmFtZSBpdCB0byBhbnN3ZXIgYW5kIHNldCBhcyByZW1vdGUgU0RQLgotICAg
IGFzc2VydFRydWUoIkxvY2FsIFNEUCB3YXMgbm90IHNldC4iLCB3YWl0Rm9yTG9jYWxTRFAoV0FJ
VF9USU1FT1VUKSk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBFR0wgY29udGV4dCB1c2VkIGZvciBj
cmVhdGluZyB0aGUgUGVlckNvbm5lY3Rpb25DbGllbnQuCi0gICAgLy8gU2luY2UgY3JlYXRlUGVl
ckNvbm5lY3Rpb25DbGllbnQgaXMgYXN5bmNocm9ub3VzLCB3ZSBtdXN0IHdhaXQgZm9yIHRoZSBs
b2NhbAotICAgIC8vIFNlc3Npb25EZXNjcmlwdGlvbi4KLSAgICBlZ2xCYXNlLnJlbGVhc2UoKTsK
LSAgICBlZ2xCYXNlID0gbnVsbDsKLQotICAgIFNlc3Npb25EZXNjcmlwdGlvbiByZW1vdGVTZHAg
PSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAgICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlw
ZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiksIGxvY2FsU2RwLmRlc2NyaXB0aW9uKTsKLSAg
ICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlvbihyZW1vdGVTZHApOwotCi0gICAgLy8gV2Fp
dCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNzZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rpb24gZmFp
bHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElDRV9DT05ORUNUSU9OX1dBSVRfVElNRU9VVCkp
OwotICAgIC8vIENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBy
ZW5kZXJlZC4KLSAgICBhc3NlcnRUcnVlKAotICAgICAgICAiTG9jYWwgdmlkZW8gZnJhbWVzIHdl
cmUgbm90IHJlbmRlcmVkLiIsIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVkKFdB
SVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSBu
b3QgcmVuZGVyZWQuIiwKLSAgICAgICAgcmVtb3RlUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRl
cmVkKFdBSVRfVElNRU9VVCkpOwotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRU
cnVlKHdhaXRGb3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cu
ZChUQUcsICJ0ZXN0TG9vcGJhY2sgZG9uZS4iKTsKLSAgfQotCi0gIEBTbWFsbFRlc3QKLSAgcHVi
bGljIHZvaWQgdGVzdExvb3BiYWNrSDI2NENhcHR1cmVUb1RleHR1cmUoKSB0aHJvd3MgSW50ZXJy
dXB0ZWRFeGNlcHRpb24gewotICAgIGlmIChCdWlsZC5WRVJTSU9OLlNES19JTlQgPCBCdWlsZC5W
RVJTSU9OX0NPREVTLktJVEtBVCkgewotICAgICAgTG9nLmkoVEFHLCAiRW5jb2RlIHRvIHRleHR1
cmVzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlcXVpcmVzIEtJVEtBVCIpOwotICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAvLyBUT0RPKHBlcmtqKTogSWYgd2UgY2FuIGFsd2F5cyBjYXB0dXJlIHRvIHRl
eHR1cmVzLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNoZWNrIGlmIHRoZQotICAgIC8vIGhhcmR3YXJl
IGVuY29kZXIgc3VwcG9ydHMgdG8gZW5jb2RlIGZyb20gYSB0ZXh0dXJlLgotICAgIGlmICghTWVk
aWFDb2RlY1ZpZGVvRW5jb2Rlci5pc0gyNjRId1N1cHBvcnRlZFVzaW5nVGV4dHVyZXMoKSkgewot
ICAgICAgTG9nLmkoVEFHLCAiSDI2NCBlbmNvZGUgdG8gdGV4dHVyZXMgaXMgbm90IHN1cHBvcnRl
ZC4iKTsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgZG9Mb29wYmFja1Rlc3QoY3JlYXRlUGFy
YW1ldGVyc0ZvclZpZGVvQ2FsbChWSURFT19DT0RFQ19IMjY0KSwKLSAgICAgICAgY3JlYXRlQ2Ft
ZXJhQ2FwdHVyZXIodHJ1ZSAvKiBjYXB0dXJlVG9UZXh0dXJlICovKSwgdHJ1ZSAvKiBkZWNvZGVU
b1RleHR1cmUgKi8pOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIGRlZmF1bHQgZnJvbnQgY2FtZXJh
IGNhbiBiZSBzd2l0Y2hlZCB0byBiYWNrIGNhbWVyYSBhbmQgdGhlbgotICAvLyBhZ2FpbiB0byBm
cm9udCBjYW1lcmEuCi0gIEBTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdENhbWVyYVN3aXRj
aCgpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdENh
bWVyYVN3aXRjaCIpOwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAgIE1vY2tSZW5kZXJlciBs
b2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMsIExP
Q0FMX1JFTkRFUkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9IG5l
dyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJfTkFN
RSk7Ci0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2FsUmVu
ZGVyZXIsIHJlbW90ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlkZW9D
YWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZhbHNl
IC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQgZm9yIGxvY2Fs
IFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBTRFAuCi0gICAgYXNz
ZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlUX1RJ
TUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2RwID0gbmV3IFNlc3Npb25E
ZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9uaWNh
bEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0gICAgcGNDbGllbnQuc2V0
UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdhaXQgZm9yIElDRSBjb25u
ZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZhaWx1cmUuIiwgd2FpdEZv
ckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQpKTsKLQotICAgIC8vIENo
ZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4KLSAg
ICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVmb3Jl
IGNhbWVyYSBzd2l0Y2guIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVu
ZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZyYW1l
cyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHN3aXRjaC4iLAotICAgICAgICByZW1v
dGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IENBTUVSQV9TV0lUQ0hfQVRURU1QVFM7IGkrKykgewotICAgICAg
Ly8gVHJ5IHRvIHN3aXRjaCBjYW1lcmEKLSAgICAgIHBjQ2xpZW50LnN3aXRjaENhbWVyYSgpOwot
Ci0gICAgICAvLyBSZXNldCB2aWRlbyByZW5kZXJzIGFuZCBjaGVjayB0aGF0IGxvY2FsIGFuZCBy
ZW1vdGUgdmlkZW8gZnJhbWVzCi0gICAgICAvLyB3ZXJlIHJlbmRlcmVkIGFmdGVyIGNhbWVyYSBz
d2l0Y2guCi0gICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1FUyk7
Ci0gICAgICByZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwotICAg
ICAgYXNzZXJ0VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVy
IGNhbWVyYSBzd2l0Y2guIiwKLSAgICAgICAgICBsb2NhbFJlbmRlcmVyLndhaXRGb3JGcmFtZXNS
ZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAgICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBm
cmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYWZ0ZXIgY2FtZXJhIHN3aXRjaC4iLAotICAgICAgICAg
IHJlbW90ZVJlbmRlcmVyLndhaXRGb3JGcmFtZXNSZW5kZXJlZChXQUlUX1RJTUVPVVQpKTsKLSAg
ICB9Ci0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKHdhaXRGb3JQZWVyQ29u
bmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcsICJ0ZXN0Q2FtZXJh
U3dpdGNoIGRvbmUuIik7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYgdmlkZW8gc291cmNlIGNhbiBi
ZSByZXN0YXJ0ZWQgLSBzaW11bGF0ZSBhcHAgZ29lcyB0bwotICAvLyBiYWNrZ3JvdW5kIGFuZCBi
YWNrIHRvIGZvcmVncm91bmQuCi0gIC8vIERpc2FibGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9idWdz
LmNocm9taXVtLm9yZy9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTY0NzgKLSAgQEZsYWt5VGVz
dAotICAvL0BTbWFsbFRlc3QKLSAgcHVibGljIHZvaWQgdGVzdFZpZGVvU291cmNlUmVzdGFydCgp
IHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFZpZGVv
U291cmNlUmVzdGFydCIpOwotICAgIGxvb3BiYWNrID0gdHJ1ZTsKLQotICAgIE1vY2tSZW5kZXJl
ciBsb2NhbFJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihFWFBFQ1RFRF9WSURFT19GUkFNRVMs
IExPQ0FMX1JFTkRFUkVSX05BTUUpOwotICAgIE1vY2tSZW5kZXJlciByZW1vdGVSZW5kZXJlciA9
IG5ldyBNb2NrUmVuZGVyZXIoRVhQRUNURURfVklERU9fRlJBTUVTLCBSRU1PVEVfUkVOREVSRVJf
TkFNRSk7Ci0KLSAgICBwY0NsaWVudCA9IGNyZWF0ZVBlZXJDb25uZWN0aW9uQ2xpZW50KGxvY2Fs
UmVuZGVyZXIsIHJlbW90ZVJlbmRlcmVyLAotICAgICAgICBjcmVhdGVQYXJhbWV0ZXJzRm9yVmlk
ZW9DYWxsKFZJREVPX0NPREVDX1ZQOCksCi0gICAgICAgIGNyZWF0ZUNhbWVyYUNhcHR1cmVyKGZh
bHNlIC8qIGNhcHR1cmVUb1RleHR1cmUgKi8pLCBudWxsKTsKLQotICAgIC8vIFdhaXQgZm9yIGxv
Y2FsIFNEUCwgcmVuYW1lIGl0IHRvIGFuc3dlciBhbmQgc2V0IGFzIHJlbW90ZSBTRFAuCi0gICAg
YXNzZXJ0VHJ1ZSgiTG9jYWwgU0RQIHdhcyBub3Qgc2V0LiIsIHdhaXRGb3JMb2NhbFNEUChXQUlU
X1RJTUVPVVQpKTsKLSAgICBTZXNzaW9uRGVzY3JpcHRpb24gcmVtb3RlU2RwID0gbmV3IFNlc3Np
b25EZXNjcmlwdGlvbigKLSAgICAgICAgU2Vzc2lvbkRlc2NyaXB0aW9uLlR5cGUuZnJvbUNhbm9u
aWNhbEZvcm0oImFuc3dlciIpLCBsb2NhbFNkcC5kZXNjcmlwdGlvbik7Ci0gICAgcGNDbGllbnQu
c2V0UmVtb3RlRGVzY3JpcHRpb24ocmVtb3RlU2RwKTsKLQotICAgIC8vIFdhaXQgZm9yIElDRSBj
b25uZWN0aW9uLgotICAgIGFzc2VydFRydWUoIklDRSBjb25uZWN0aW9uIGZhaWx1cmUuIiwgd2Fp
dEZvckljZUNvbm5lY3RlZChJQ0VfQ09OTkVDVElPTl9XQUlUX1RJTUVPVVQpKTsKLQotICAgIC8v
IENoZWNrIHRoYXQgbG9jYWwgYW5kIHJlbW90ZSB2aWRlbyBmcmFtZXMgd2VyZSByZW5kZXJlZC4K
LSAgICBhc3NlcnRUcnVlKCJMb2NhbCB2aWRlbyBmcmFtZXMgd2VyZSBub3QgcmVuZGVyZWQgYmVm
b3JlIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVz
UmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZy
YW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgdmlkZW8gcmVzdGFydC4iLAotICAgICAgICBy
ZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0KLSAg
ICAvLyBTdG9wIGFuZCB0aGVuIHN0YXJ0IHZpZGVvIHNvdXJjZSBhIGZldyB0aW1lcy4KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IFZJREVPX1JFU1RBUlRfQVRURU1QVFM7IGkrKykgewotICAgICAg
cGNDbGllbnQuc3RvcFZpZGVvU291cmNlKCk7Ci0gICAgICBUaHJlYWQuc2xlZXAoVklERU9fUkVT
VEFSVF9USU1FT1VUKTsKLSAgICAgIHBjQ2xpZW50LnN0YXJ0VmlkZW9Tb3VyY2UoKTsKLQotICAg
ICAgLy8gUmVzZXQgdmlkZW8gcmVuZGVycyBhbmQgY2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3Rl
IHZpZGVvIGZyYW1lcwotICAgICAgLy8gd2VyZSByZW5kZXJlZCBhZnRlciB2aWRlbyByZXN0YXJ0
LgotICAgICAgbG9jYWxSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwotICAg
ICAgcmVtb3RlUmVuZGVyZXIucmVzZXQoRVhQRUNURURfVklERU9fRlJBTUVTKTsKLSAgICAgIGFz
c2VydFRydWUoIkxvY2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciB2aWRl
byByZXN0YXJ0LiIsCi0gICAgICAgICAgbG9jYWxSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVy
ZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgICBhc3NlcnRUcnVlKCJSZW1vdGUgdmlkZW8gZnJhbWVz
IHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIHZpZGVvIHJlc3RhcnQuIiwKLSAgICAgICAgICByZW1v
dGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgfQot
ICAgIHBjQ2xpZW50LmNsb3NlKCk7Ci0gICAgYXNzZXJ0VHJ1ZSh3YWl0Rm9yUGVlckNvbm5lY3Rp
b25DbG9zZWQoV0FJVF9USU1FT1VUKSk7Ci0gICAgTG9nLmQoVEFHLCAidGVzdFZpZGVvU291cmNl
UmVzdGFydCBkb25lLiIpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIGNhcHR1cmUgZm9ybWF0IGNh
biBiZSBjaGFuZ2VkIG9uIGZseSBhbmQgZGVjb2RlciBjYW4gYmUgcmVzZXQgcHJvcGVybHkuCi0g
IC8vIERpc2FibGVkIGJlY2F1c2Ugb2YgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3dlYnJ0
Yy9pc3N1ZXMvZGV0YWlsP2lkPTY0NzgKLSAgQEZsYWt5VGVzdAotICAvL0BTbWFsbFRlc3QKLSAg
cHVibGljIHZvaWQgdGVzdENhcHR1cmVGb3JtYXRDaGFuZ2UoKSB0aHJvd3MgSW50ZXJydXB0ZWRF
eGNlcHRpb24gewotICAgIExvZy5kKFRBRywgInRlc3RDYXB0dXJlRm9ybWF0Q2hhbmdlIik7Ci0g
ICAgbG9vcGJhY2sgPSB0cnVlOwotCi0gICAgTW9ja1JlbmRlcmVyIGxvY2FsUmVuZGVyZXIgPSBu
ZXcgTW9ja1JlbmRlcmVyKEVYUEVDVEVEX1ZJREVPX0ZSQU1FUywgTE9DQUxfUkVOREVSRVJfTkFN
RSk7Ci0gICAgTW9ja1JlbmRlcmVyIHJlbW90ZVJlbmRlcmVyID0gbmV3IE1vY2tSZW5kZXJlcihF
WFBFQ1RFRF9WSURFT19GUkFNRVMsIFJFTU9URV9SRU5ERVJFUl9OQU1FKTsKLQotICAgIHBjQ2xp
ZW50ID0gY3JlYXRlUGVlckNvbm5lY3Rpb25DbGllbnQobG9jYWxSZW5kZXJlciwgcmVtb3RlUmVu
ZGVyZXIsCi0gICAgICAgIGNyZWF0ZVBhcmFtZXRlcnNGb3JWaWRlb0NhbGwoVklERU9fQ09ERUNf
VlA4KSwKLSAgICAgICAgY3JlYXRlQ2FtZXJhQ2FwdHVyZXIoZmFsc2UgLyogY2FwdHVyZVRvVGV4
dHVyZSAqLyksIG51bGwpOwotCi0gICAgLy8gV2FpdCBmb3IgbG9jYWwgU0RQLCByZW5hbWUgaXQg
dG8gYW5zd2VyIGFuZCBzZXQgYXMgcmVtb3RlIFNEUC4KLSAgICBhc3NlcnRUcnVlKCJMb2NhbCBT
RFAgd2FzIG5vdCBzZXQuIiwgd2FpdEZvckxvY2FsU0RQKFdBSVRfVElNRU9VVCkpOwotICAgIFNl
c3Npb25EZXNjcmlwdGlvbiByZW1vdGVTZHAgPSBuZXcgU2Vzc2lvbkRlc2NyaXB0aW9uKAotICAg
ICAgICBTZXNzaW9uRGVzY3JpcHRpb24uVHlwZS5mcm9tQ2Fub25pY2FsRm9ybSgiYW5zd2VyIiks
IGxvY2FsU2RwLmRlc2NyaXB0aW9uKTsKLSAgICBwY0NsaWVudC5zZXRSZW1vdGVEZXNjcmlwdGlv
bihyZW1vdGVTZHApOwotCi0gICAgLy8gV2FpdCBmb3IgSUNFIGNvbm5lY3Rpb24uCi0gICAgYXNz
ZXJ0VHJ1ZSgiSUNFIGNvbm5lY3Rpb24gZmFpbHVyZS4iLCB3YWl0Rm9ySWNlQ29ubmVjdGVkKElD
RV9DT05ORUNUSU9OX1dBSVRfVElNRU9VVCkpOwotCi0gICAgLy8gQ2hlY2sgdGhhdCBsb2NhbCBh
bmQgcmVtb3RlIHZpZGVvIGZyYW1lcyB3ZXJlIHJlbmRlcmVkLgotICAgIGFzc2VydFRydWUoIkxv
Y2FsIHZpZGVvIGZyYW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBiZWZvcmUgY2FtZXJhIHJlc29sdXRp
b24gY2hhbmdlLiIsCi0gICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1JlbmRlcmVk
KFdBSVRfVElNRU9VVCkpOwotICAgIGFzc2VydFRydWUoIlJlbW90ZSB2aWRlbyBmcmFtZXMgd2Vy
ZSBub3QgcmVuZGVyZWQgYmVmb3JlIGNhbWVyYSByZXNvbHV0aW9uIGNoYW5nZS4iLAotICAgICAg
ICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VUKSk7Ci0K
LSAgICAvLyBDaGFuZ2UgY2FwdHVyZSBvdXRwdXQgZm9ybWF0IGEgZmV3IHRpbWVzLgotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMiAqIENBUFRVUkVfRk9STUFUX0NIQU5HRV9BVFRFTVBUUzsgaSsr
KSB7Ci0gICAgICBpZiAoaSAlIDIgPT0gMCkgewotICAgICAgICBwY0NsaWVudC5jaGFuZ2VDYXB0
dXJlRm9ybWF0KFdJRFRIX1ZHQSwgSEVJR0hUX1ZHQSwgTUFYX1ZJREVPX0ZQUyk7Ci0gICAgICB9
IGVsc2UgewotICAgICAgICBwY0NsaWVudC5jaGFuZ2VDYXB0dXJlRm9ybWF0KFdJRFRIX1FWR0Es
IEhFSUdIVF9RVkdBLCBNQVhfVklERU9fRlBTKTsKLSAgICAgIH0KLQotICAgICAgLy8gUmVzZXQg
dmlkZW8gcmVuZGVycyBhbmQgY2hlY2sgdGhhdCBsb2NhbCBhbmQgcmVtb3RlIHZpZGVvIGZyYW1l
cwotICAgICAgLy8gd2VyZSByZW5kZXJlZCBhZnRlciBjYXB0dXJlIGZvcm1hdCBjaGFuZ2UuCi0g
ICAgICBsb2NhbFJlbmRlcmVyLnJlc2V0KEVYUEVDVEVEX1ZJREVPX0ZSQU1FUyk7Ci0gICAgICBy
ZW1vdGVSZW5kZXJlci5yZXNldChFWFBFQ1RFRF9WSURFT19GUkFNRVMpOwotICAgICAgYXNzZXJ0
VHJ1ZSgiTG9jYWwgdmlkZW8gZnJhbWVzIHdlcmUgbm90IHJlbmRlcmVkIGFmdGVyIGNhcHR1cmUg
Zm9ybWF0IGNoYW5nZS4iLAotICAgICAgICAgIGxvY2FsUmVuZGVyZXIud2FpdEZvckZyYW1lc1Jl
bmRlcmVkKFdBSVRfVElNRU9VVCkpOwotICAgICAgYXNzZXJ0VHJ1ZSgiUmVtb3RlIHZpZGVvIGZy
YW1lcyB3ZXJlIG5vdCByZW5kZXJlZCBhZnRlciBjYXB0dXJlIGZvcm1hdCBjaGFuZ2UuIiwKLSAg
ICAgICAgICByZW1vdGVSZW5kZXJlci53YWl0Rm9yRnJhbWVzUmVuZGVyZWQoV0FJVF9USU1FT1VU
KSk7Ci0gICAgfQotCi0gICAgcGNDbGllbnQuY2xvc2UoKTsKLSAgICBhc3NlcnRUcnVlKHdhaXRG
b3JQZWVyQ29ubmVjdGlvbkNsb3NlZChXQUlUX1RJTUVPVVQpKTsKLSAgICBMb2cuZChUQUcsICJ0
ZXN0Q2FwdHVyZUZvcm1hdENoYW5nZSBkb25lLiIpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3Jj
L29yZy9hcHBzcG90L2FwcHJ0Yy90ZXN0L1ZpZGVvRmlsZVJlbmRlcmVyVGVzdC5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1w
bGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvVmlkZW9GaWxlUmVu
ZGVyZXJUZXN0LmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNw
b3QvYXBwcnRjL3Rlc3QvVmlkZW9GaWxlUmVuZGVyZXJUZXN0LmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSw3OCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDE2IFRoZSBXZWJSVEMgUHJvamVj
dCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGM7
Ci0KLWltcG9ydCBhbmRyb2lkLnRlc3QuSW5zdHJ1bWVudGF0aW9uVGVzdENhc2U7Ci1pbXBvcnQg
YW5kcm9pZC50ZXN0LnN1aXRlYnVpbGRlci5hbm5vdGF0aW9uLlNtYWxsVGVzdDsKLQotaW1wb3J0
IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEu
aW8uUmFuZG9tQWNjZXNzRmlsZTsKLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwotaW1wb3J0IGph
dmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVm
ZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRv
bTsKLQotcHVibGljIGNsYXNzIFZpZGVvRmlsZVJlbmRlcmVyVGVzdCBleHRlbmRzIEluc3RydW1l
bnRhdGlvblRlc3RDYXNlIHsKLSAgQFNtYWxsVGVzdAotICBwdWJsaWMgdm9pZCB0ZXN0WXV2UmVu
ZGVyaW5nVG9GaWxlKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7
Ci0gICAgRWdsQmFzZSBlZ2xCYXNlID0gRWdsQmFzZS5jcmVhdGUoKTsKLSAgICBmaW5hbCBTdHJp
bmcgdmlkZW9PdXRQYXRoID0gIi9zZGNhcmQvY2hyb21pdW1fdGVzdHNfcm9vdC90ZXN0dmlkZW9v
dXQueTRtIjsKLSAgICBpbnQgZnJhbWVXaWR0aCA9IDQ7Ci0gICAgaW50IGZyYW1lSGVpZ2h0ID0g
NDsKLSAgICBWaWRlb0ZpbGVSZW5kZXJlciB2aWRlb0ZpbGVSZW5kZXJlciA9Ci0gICAgICAgIG5l
dyBWaWRlb0ZpbGVSZW5kZXJlcih2aWRlb091dFBhdGgsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0
LCBlZ2xCYXNlLmdldEVnbEJhc2VDb250ZXh0KCkpOwotCi0gICAgU3RyaW5nW10gZnJhbWVzID0g
ewotICAgICAgICAiVEhJUyBJUyBKVVNUIFNPTUUgVEVYVCB4IiwgIlRIRSBTRUNPTkQgRlJBTUUg
cXdlcnR5LiIsICJIRVJFIElTIFRIRSBUSFJJRCBGUkFNRSEifTsKLQotICAgIGZvciAoU3RyaW5n
IGZyYW1lU3RyIDogZnJhbWVzKSB7Ci0gICAgICBpbnRbXSBwbGFuZVNpemVzID0gewotICAgICAg
ICAgIGZyYW1lV2lkdGggKiBmcmFtZVdpZHRoLCBmcmFtZVdpZHRoICogZnJhbWVIZWlnaHQgLyA0
LCBmcmFtZVdpZHRoICogZnJhbWVIZWlnaHQgLyA0fTsKLQotICAgICAgYnl0ZVtdIGZyYW1lQnl0
ZXMgPSBmcmFtZVN0ci5nZXRCeXRlcyhTdGFuZGFyZENoYXJzZXRzLlVTX0FTQ0lJKTsKLSAgICAg
IEJ5dGVCdWZmZXJbXSB5dXZQbGFuZXMgPSBuZXcgQnl0ZUJ1ZmZlclszXTsKLSAgICAgIGludCBw
b3MgPSAwOwotICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKLSAgICAgICAgeXV2
UGxhbmVzW2ldID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChwbGFuZVNpemVzW2ldKTsKLSAg
ICAgICAgeXV2UGxhbmVzW2ldLnB1dChmcmFtZUJ5dGVzLCBwb3MsIHBsYW5lU2l6ZXNbaV0pOwot
ICAgICAgICBwb3MgKz0gcGxhbmVTaXplc1tpXTsKLSAgICAgIH0KLQotICAgICAgaW50W10geXV2
U3RyaWRlcyA9IHtmcmFtZVdpZHRoLCBmcmFtZVdpZHRoIC8gMiwgZnJhbWVXaWR0aCAvIDJ9Owot
Ci0gICAgICBWaWRlb1JlbmRlcmVyLkk0MjBGcmFtZSBmcmFtZSA9Ci0gICAgICAgICAgbmV3IFZp
ZGVvUmVuZGVyZXIuSTQyMEZyYW1lKGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0LCAwLCB5dXZTdHJp
ZGVzLCB5dXZQbGFuZXMsIDApOwotCi0gICAgICB2aWRlb0ZpbGVSZW5kZXJlci5yZW5kZXJGcmFt
ZShmcmFtZSk7Ci0gICAgfQotICAgIHZpZGVvRmlsZVJlbmRlcmVyLnJlbGVhc2UoKTsKLQotICAg
IFJhbmRvbUFjY2Vzc0ZpbGUgd3JpdHRlbkZpbGUgPSBuZXcgUmFuZG9tQWNjZXNzRmlsZSh2aWRl
b091dFBhdGgsICJyIik7Ci0gICAgdHJ5IHsKLSAgICAgIGludCBsZW5ndGggPSAoaW50KSB3cml0
dGVuRmlsZS5sZW5ndGgoKTsKLSAgICAgIGJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbbGVuZ3RoXTsK
LSAgICAgIHdyaXR0ZW5GaWxlLnJlYWRGdWxseShkYXRhKTsKLSAgICAgIFN0cmluZyBmaWxlQ29u
dGVudCA9IG5ldyBTdHJpbmcoZGF0YSwgU3RhbmRhcmRDaGFyc2V0cy5VU19BU0NJSSk7Ci0gICAg
ICBTdHJpbmcgZXhwZWN0ZWQgPSAiWVVWNE1QRUcyIEM0MjAgVzQgSDQgSXAgRjMwOjEgQTE6MVxu
IgotICAgICAgICAgICsgIkZSQU1FXG4iCi0gICAgICAgICAgKyAiVEhJUyBJUyBKVVNUIFNPTUUg
VEVYVCB4RlJBTUVcbiIKLSAgICAgICAgICArICJUSEUgU0VDT05EIEZSQU1FIHF3ZXJ0eS5GUkFN
RVxuIgotICAgICAgICAgICsgIkhFUkUgSVMgVEhFIFRIUklEIEZSQU1FISI7Ci0gICAgICBhc3Nl
cnRFcXVhbHMoZXhwZWN0ZWQsIGZpbGVDb250ZW50KTsKLSAgICB9IGZpbmFsbHkgewotICAgICAg
d3JpdHRlbkZpbGUuY2xvc2UoKTsKLSAgICB9Ci0KLSAgICBuZXcgRmlsZSh2aWRlb091dFBhdGgp
LmRlbGV0ZSgpOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9leGFtcGxlcy9hbmRyb2lkdGVzdHMvc3JjL29yZy9hcHBzcG90L2FwcHJ0Yy90
ZXN0L2NhcHR1cmV0ZXN0dmlkZW8ueTRtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2FuZHJvaWR0ZXN0cy9zcmMvb3JnL2Fw
cHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRlby55NG0JKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL2V4YW1wbGVzL2Fu
ZHJvaWR0ZXN0cy9zcmMvb3JnL2FwcHNwb3QvYXBwcnRjL3Rlc3QvY2FwdHVyZXRlc3R2aWRlby55
NG0JKG5vbmV4aXN0ZW50KQpAQCAtMSw1ICswLDAgQEAKLVlVVjRNUEVHMiBDNDIwIFc0IEg0IElw
IEYzMDoxIEExOjEKLUZSQU1FCi1USElTIElTIEpVU1QgU09NRSBURVhUIHhGUkFNRQotVEhFIFNF
Q09ORCBGUkFNRSBxd2VydHkuRlJBTUUKLUhFUkUgSVMgVEhFIFRIUklEIEZSQU1FIQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2F1ZGlvX2NvbW1vbi5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlv
X2NvbW1vbi5oCShub25leGlzdGVudCkKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQVVE
SU9fQ09NTU9OX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lE
X0FVRElPX0NPTU1PTl9IXwotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotY29uc3QgaW50IGtEZWZh
dWx0U2FtcGxlUmF0ZSA9IDQ0MTAwOwotY29uc3QgaW50IGtOdW1DaGFubmVscyA9IDE7Ci0vLyBO
dW1iZXIgb2YgYnl0ZXMgcGVyIGF1ZGlvIGZyYW1lLgotLy8gRXhhbXBsZTogMTYtYml0IFBDTSBp
biBtb25vID0+IDEqKDE2LzgpPTIgW2J5dGVzL2ZyYW1lXQotY29uc3Qgc2l6ZV90IGtCeXRlc1Bl
ckZyYW1lID0ga051bUNoYW5uZWxzICogKDE2IC8gOCk7Ci0vLyBEZWxheSBlc3RpbWF0ZXMgZm9y
IHRoZSB0d28gZGlmZmVyZW50IHN1cHBvcnRlZCBtb2Rlcy4gVGhlc2UgdmFsdWVzIGFyZSBiYXNl
ZAotLy8gb24gcmVhbC10aW1lIHJvdW5kLXRyaXAgZGVsYXkgZXN0aW1hdGVzIG9uIGEgbGFyZ2Ug
c2V0IG9mIGRldmljZXMgYW5kIHRoZXkKLS8vIGFyZSBsb3dlciBib3VuZHMgc2luY2UgdGhlIGZp
bHRlciBsZW5ndGggaXMgMTI4IG1zLCBzbyB0aGUgQUVDIHdvcmtzIGZvcgotLy8gZGVsYXlzIGlu
IHRoZSByYW5nZSBbNTAsIH4xNzBdIG1zIGFuZCBbMTUwLCB+MjcwXSBtcy4gTm90ZSB0aGF0LCBp
biBtb3N0Ci0vLyBjYXNlcywgdGhlIGxvd2VzdCBkZWxheSBlc3RpbWF0ZSB3aWxsIG5vdCBiZSB1
dGlsaXplZCBzaW5jZSBkZXZpY2VzIHRoYXQKLS8vIHN1cHBvcnQgbG93LWxhdGVuY3kgb3V0cHV0
IGF1ZGlvIG9mdGVuIHN1cHBvcnRzIEhXIEFFQyBhcyB3ZWxsLgotY29uc3QgaW50IGtMb3dMYXRl
bmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcyA9IDUwOwotY29uc3QgaW50IGtIaWdo
TGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMgPSAxNTA7Ci0KLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0Vf
QU5EUk9JRF9BVURJT19DT01NT05fSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fZGV2aWNl
X3RlbXBsYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19kZXZpY2VfdGVt
cGxhdGUuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19kZXZpY2Vf
dGVtcGxhdGUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU2NCArMCwwIEBACi0vKgotICogIENvcHly
aWdodCAoYykgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50
ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUg
ZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAg
YmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRy
ZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9B
VURJT19ERVZJQ0VfVEVNUExBVEVfSF8KLSNkZWZpbmUgV0VCUlRDX01PRFVMRVNfQVVESU9fREVW
SUNFX0FORFJPSURfQVVESU9fREVWSUNFX1RFTVBMQVRFX0hfCi0KLSNpbmNsdWRlICJ3ZWJydGMv
YmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9sb2dnaW5nLmgiCi0jaW5jbHVk
ZSAid2VicnRjL2Jhc2UvdGhyZWFkX2NoZWNrZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgiCi0jaW5jbHVkZSAid2VicnRj
L21vZHVsZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9nZW5lcmljLmgiCi0KLW5hbWVzcGFj
ZSB3ZWJydGMgewotCi0vLyBJbnB1dFR5cGUvT3V0cHV0VHlwZSBjYW4gYmUgYW55IGNsYXNzIHRo
YXQgaW1wbGVtZW50cyB0aGUgY2FwdHVyaW5nL3JlbmRlcmluZwotLy8gcGFydCBvZiB0aGUgQXVk
aW9EZXZpY2VHZW5lcmljIEFQSS4KLS8vIENvbnN0cnVjdGlvbiBhbmQgZGVzdHJ1Y3Rpb24gbXVz
dCBiZSBkb25lIG9uIG9uZSBhbmQgdGhlIHNhbWUgdGhyZWFkLiBFYWNoCi0vLyBpbnRlcm5hbCBp
bXBsZW1lbnRhdGlvbiBvZiBJbnB1dFR5cGUgYW5kIE91dHB1dFR5cGUgd2lsbCBSVENfRENIRUNL
IGlmIHRoYXQKLS8vIGlzIG5vdCB0aGUgY2FzZS4gQWxsIGltcGxlbWVudGVkIG1ldGhvZHMgbXVz
dCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgc2FtZQotLy8gdGhyZWFkLiBTZWUgY29tbWVudHMgaW4g
ZWFjaCBJbnB1dFR5cGUvT3V0cHV0VHlwZSBjbGFzcyBmb3IgbW9yZSBpbmZvLgotLy8gSXQgaXMg
cG9zc2libGUgdG8gY2FsbCB0aGUgdHdvIHN0YXRpYyBtZXRob2RzIChTZXRBbmRyb2lkQXVkaW9E
ZXZpY2VPYmplY3RzCi0vLyBhbmQgQ2xlYXJBbmRyb2lkQXVkaW9EZXZpY2VPYmplY3RzKSBmcm9t
IGEgZGlmZmVyZW50IHRocmVhZCBidXQgYm90aCB3aWxsCi0vLyBSVENfQ0hFQ0sgdGhhdCB0aGUg
Y2FsbGluZyB0aHJlYWQgaXMgYXR0YWNoZWQgdG8gYSBKYXZhIFZNLgotCi10ZW1wbGF0ZSA8Y2xh
c3MgSW5wdXRUeXBlLCBjbGFzcyBPdXRwdXRUeXBlPgotY2xhc3MgQXVkaW9EZXZpY2VUZW1wbGF0
ZSA6IHB1YmxpYyBBdWRpb0RldmljZUdlbmVyaWMgewotIHB1YmxpYzoKLSAgQXVkaW9EZXZpY2VU
ZW1wbGF0ZShBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRpb19sYXllciwKLSAgICAg
ICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgICA6IGF1
ZGlvX2xheWVyXyhhdWRpb19sYXllciksCi0gICAgICAgIGF1ZGlvX21hbmFnZXJfKGF1ZGlvX21h
bmFnZXIpLAotICAgICAgICBvdXRwdXRfKGF1ZGlvX21hbmFnZXJfKSwKLSAgICAgICAgaW5wdXRf
KGF1ZGlvX21hbmFnZXJfKSwKLSAgICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSB7Ci0gICAgTE9H
KElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBSVENfQ0hFQ0soYXVkaW9fbWFuYWdlcik7Ci0g
ICAgYXVkaW9fbWFuYWdlcl8tPlNldEFjdGl2ZUF1ZGlvTGF5ZXIoYXVkaW9fbGF5ZXIpOwotICB9
Ci0KLSAgdmlydHVhbCB+QXVkaW9EZXZpY2VUZW1wbGF0ZSgpIHsgTE9HKElORk8pIDw8IF9fRlVO
Q1RJT05fXzsgfQotCi0gIGludDMyX3QgQWN0aXZlQXVkaW9MYXllcigKLSAgICAgIEF1ZGlvRGV2
aWNlTW9kdWxlOjpBdWRpb0xheWVyJiBhdWRpb0xheWVyKSBjb25zdCBvdmVycmlkZSB7Ci0gICAg
TE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBhdWRpb0xheWVyID0gYXVkaW9fbGF5ZXJf
OwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgSW5pdFN0YXR1cyBJbml0KCkgb3ZlcnJpZGUgewot
ICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgICBSVENfRENIRUNLKCFpbml0aWFsaXpl
ZF8pOwotICAgIGlmICghYXVkaW9fbWFuYWdlcl8tPkluaXQoKSkgewotICAgICAgcmV0dXJuIElu
aXRTdGF0dXM6Ok9USEVSX0VSUk9SOwotICAgIH0KLSAgICBpZiAob3V0cHV0Xy5Jbml0KCkgIT0g
MCkgewotICAgICAgYXVkaW9fbWFuYWdlcl8tPkNsb3NlKCk7Ci0gICAgICByZXR1cm4gSW5pdFN0
YXR1czo6UExBWU9VVF9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKGlucHV0Xy5Jbml0KCkgIT0gMCkg
ewotICAgICAgb3V0cHV0Xy5UZXJtaW5hdGUoKTsKLSAgICAgIGF1ZGlvX21hbmFnZXJfLT5DbG9z
ZSgpOwotICAgICAgcmV0dXJuIEluaXRTdGF0dXM6OlJFQ09SRElOR19FUlJPUjsKLSAgICB9Ci0g
ICAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgICByZXR1cm4gSW5pdFN0YXR1czo6T0s7Ci0gIH0K
LQotICBpbnQzMl90IFRlcm1pbmF0ZSgpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19G
VU5DVElPTl9fOwotICAgIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7Ci0gICAgaW50MzJfdCBlcnIgPSBpbnB1dF8uVGVybWluYXRlKCk7Ci0gICAgZXJy
IHw9IG91dHB1dF8uVGVybWluYXRlKCk7Ci0gICAgZXJyIHw9ICFhdWRpb19tYW5hZ2VyXy0+Q2xv
c2UoKTsKLSAgICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgICBSVENfRENIRUNLX0VRKGVyciwg
MCk7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotCi0gIGJvb2wgSW5pdGlhbGl6ZWQoKSBjb25zdCBv
dmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBSVENfRENIRUNL
KHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICAgIHJldHVybiBpbml0
aWFsaXplZF87Ci0gIH0KLQotICBpbnQxNl90IFBsYXlvdXREZXZpY2VzKCkgb3ZlcnJpZGUgewot
ICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICBp
bnQxNl90IFJlY29yZGluZ0RldmljZXMoKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9f
RlVOQ1RJT05fXzsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIGludDMyX3QgUGxheW91dERldmlj
ZU5hbWUoCi0gICAgICB1aW50MTZfdCBpbmRleCwKLSAgICAgIGNoYXIgbmFtZVtrQWRtTWF4RGV2
aWNlTmFtZVNpemVdLAotICAgICAgY2hhciBndWlkW2tBZG1NYXhHdWlkU2l6ZV0pIG92ZXJyaWRl
IHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4g
LTE7Ci0gIH0KLQotICBpbnQzMl90IFJlY29yZGluZ0RldmljZU5hbWUoCi0gICAgICB1aW50MTZf
dCBpbmRleCwKLSAgICAgIGNoYXIgbmFtZVtrQWRtTWF4RGV2aWNlTmFtZVNpemVdLAotICAgICAg
Y2hhciBndWlkW2tBZG1NYXhHdWlkU2l6ZV0pIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJT
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90
IFNldFBsYXlvdXREZXZpY2UodWludDE2X3QgaW5kZXgpIG92ZXJyaWRlIHsKLSAgICAvLyBPSyB0
byB1c2UgYnV0IGl0IGhhcyBubyBlZmZlY3QgY3VycmVudGx5IHNpbmNlIGRldmljZSBzZWxlY3Rp
b24gaXMKLSAgICAvLyBkb25lIHVzaW5nIEFuZG9pZCBBUElzIGluc3RlYWQuCi0gICAgTE9HKElO
Rk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMyX3QgU2V0
UGxheW91dERldmljZSgKLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjpXaW5kb3dzRGV2aWNlVHlw
ZSBkZXZpY2UpIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2Fs
bGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFNldFJlY29yZGluZ0Rldmlj
ZSh1aW50MTZfdCBpbmRleCkgb3ZlcnJpZGUgewotICAgIC8vIE9LIHRvIHVzZSBidXQgaXQgaGFz
IG5vIGVmZmVjdCBjdXJyZW50bHkgc2luY2UgZGV2aWNlIHNlbGVjdGlvbiBpcwotICAgIC8vIGRv
bmUgdXNpbmcgQW5kb2lkIEFQSXMgaW5zdGVhZC4KLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElP
Tl9fOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBTZXRSZWNvcmRpbmdEZXZpY2Uo
Ci0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6V2luZG93c0RldmljZVR5cGUgZGV2aWNlKSBvdmVy
cmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0
dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBQbGF5b3V0SXNBdmFpbGFibGUoYm9vbCYgYXZhaWxh
YmxlKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBhdmFp
bGFibGUgPSB0cnVlOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBJbml0UGxheW91
dCgpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVy
biBvdXRwdXRfLkluaXRQbGF5b3V0KCk7Ci0gIH0KLQotICBib29sIFBsYXlvdXRJc0luaXRpYWxp
emVkKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0g
ICAgcmV0dXJuIG91dHB1dF8uUGxheW91dElzSW5pdGlhbGl6ZWQoKTsKLSAgfQotCi0gIGludDMy
X3QgUmVjb3JkaW5nSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSBvdmVycmlkZSB7Ci0gICAg
TE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBhdmFpbGFibGUgPSB0cnVlOwotICAgIHJl
dHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBJbml0UmVjb3JkaW5nKCkgb3ZlcnJpZGUgewotICAg
IExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIGlucHV0Xy5Jbml0UmVjb3Jk
aW5nKCk7Ci0gIH0KLQotICBib29sIFJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKSBjb25zdCBvdmVy
cmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gaW5wdXRf
LlJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKTsKLSAgfQotCi0gIGludDMyX3QgU3RhcnRQbGF5b3V0
KCkgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaWYgKCFh
dWRpb19tYW5hZ2VyXy0+SXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKSkgewotICAgICAgTE9H
KFdBUk5JTkcpCi0gICAgICAgICAgPDwgIlRoZSBhcHBsaWNhdGlvbiBzaG91bGQgdXNlIE1PREVf
SU5fQ09NTVVOSUNBVElPTiBhdWRpbyBtb2RlISI7Ci0gICAgfQotICAgIHJldHVybiBvdXRwdXRf
LlN0YXJ0UGxheW91dCgpOwotICB9Ci0KLSAgaW50MzJfdCBTdG9wUGxheW91dCgpIG92ZXJyaWRl
IHsKLSAgICAvLyBBdm9pZCB1c2luZyBhdWRpbyBtYW5nZXIgKEpOSS9KYXZhIGNvc3QpIGlmIHBs
YXlvdXQgd2FzIGluYWN0aXZlLgotICAgIGlmICghUGxheWluZygpKQotICAgICAgcmV0dXJuIDA7
Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBpbnQzMl90IGVyciA9IG91dHB1
dF8uU3RvcFBsYXlvdXQoKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0KLSAgYm9vbCBQbGF5aW5n
KCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAg
cmV0dXJuIG91dHB1dF8uUGxheWluZygpOwotICB9Ci0KLSAgaW50MzJfdCBTdGFydFJlY29yZGlu
ZygpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGlmICgh
YXVkaW9fbWFuYWdlcl8tPklzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCkpIHsKLSAgICAgIExP
RyhXQVJOSU5HKQotICAgICAgICAgIDw8ICJUaGUgYXBwbGljYXRpb24gc2hvdWxkIHVzZSBNT0RF
X0lOX0NPTU1VTklDQVRJT04gYXVkaW8gbW9kZSEiOwotICAgIH0KLSAgICByZXR1cm4gaW5wdXRf
LlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIH0KLQotICBpbnQzMl90IFN0b3BSZWNvcmRpbmcoKSBvdmVy
cmlkZSB7Ci0gICAgLy8gQXZvaWQgdXNpbmcgYXVkaW8gbWFuZ2VyIChKTkkvSmF2YSBjb3N0KSBp
ZiByZWNvcmRpbmcgd2FzIGluYWN0aXZlLgotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187
Ci0gICAgaWYgKCFSZWNvcmRpbmcoKSkKLSAgICAgIHJldHVybiAwOwotICAgIGludDMyX3QgZXJy
ID0gaW5wdXRfLlN0b3BSZWNvcmRpbmcoKTsKLSAgICByZXR1cm4gZXJyOwotICB9Ci0KLSAgYm9v
bCBSZWNvcmRpbmcoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIGlucHV0Xy5SZWNvcmRp
bmcoKSA7Ci0gIH0KLQotICBpbnQzMl90IFNldEFHQyhib29sIGVuYWJsZSkgb3ZlcnJpZGUgewot
ICAgIGlmIChlbmFibGUpIHsKLSAgICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxs
ZWQiOwotICAgIH0KLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBib29sIEFHQygpIGNvbnN0IG92
ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIGludDMyX3QgU2V0V2F2ZU91dFZvbHVtZSgKLSAgICAgIHVpbnQxNl90IHZv
bHVtZUxlZnQsIHVpbnQxNl90IHZvbHVtZVJpZ2h0KSBvdmVycmlkZSB7Ci0gICAgIEZBVEFMKCkg
PDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGlu
dDMyX3QgV2F2ZU91dFZvbHVtZSgKLSAgICAgIHVpbnQxNl90JiB2b2x1bWVMZWZ0LCB1aW50MTZf
dCYgdm9sdW1lUmlnaHQpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IEluaXRT
cGVha2VyKCkgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAg
cmV0dXJuIDA7Ci0gIH0KLQotICBib29sIFNwZWFrZXJJc0luaXRpYWxpemVkKCkgY29uc3Qgb3Zl
cnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIHRydWU7
Ci0gIH0KLQotICBpbnQzMl90IEluaXRNaWNyb3Bob25lKCkgb3ZlcnJpZGUgewotICAgIExPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBib29sIE1pY3Jv
cGhvbmVJc0luaXRpYWxpemVkKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBf
X0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpbnQzMl90IFNwZWFrZXJW
b2x1bWVJc0F2YWlsYWJsZShib29sJiBhdmFpbGFibGUpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5G
TykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiBvdXRwdXRfLlNwZWFrZXJWb2x1bWVJc0F2
YWlsYWJsZShhdmFpbGFibGUpOwotICB9Ci0KLSAgaW50MzJfdCBTZXRTcGVha2VyVm9sdW1lKHVp
bnQzMl90IHZvbHVtZSkgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187
Ci0gICAgcmV0dXJuIG91dHB1dF8uU2V0U3BlYWtlclZvbHVtZSh2b2x1bWUpOwotICB9Ci0KLSAg
aW50MzJfdCBTcGVha2VyVm9sdW1lKHVpbnQzMl90JiB2b2x1bWUpIGNvbnN0IG92ZXJyaWRlIHsK
LSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiBvdXRwdXRfLlNwZWFr
ZXJWb2x1bWUodm9sdW1lKTsKLSAgfQotCi0gIGludDMyX3QgTWF4U3BlYWtlclZvbHVtZSh1aW50
MzJfdCYgbWF4Vm9sdW1lKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVO
Q1RJT05fXzsKLSAgICByZXR1cm4gb3V0cHV0Xy5NYXhTcGVha2VyVm9sdW1lKG1heFZvbHVtZSk7
Ci0gIH0KLQotICBpbnQzMl90IE1pblNwZWFrZXJWb2x1bWUodWludDMyX3QmIG1pblZvbHVtZSkg
Y29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0
dXJuIG91dHB1dF8uTWluU3BlYWtlclZvbHVtZShtaW5Wb2x1bWUpOwotICB9Ci0KLSAgaW50MzJf
dCBTcGVha2VyVm9sdW1lU3RlcFNpemUodWludDE2X3QmIHN0ZXBTaXplKSBjb25zdCBvdmVycmlk
ZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJu
IC0xOwotICB9Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25lVm9sdW1lSXNBdmFpbGFibGUoYm9vbCYg
YXZhaWxhYmxlKSBvdmVycmlkZXsKLSAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICBGQVRBTCgp
IDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBp
bnQzMl90IFNldE1pY3JvcGhvbmVWb2x1bWUodWludDMyX3Qgdm9sdW1lKSBvdmVycmlkZSB7Ci0g
ICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwot
ICB9Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25lVm9sdW1lKHVpbnQzMl90JiB2b2x1bWUpIGNvbnN0
IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAg
ICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IE1heE1pY3JvcGhvbmVWb2x1bWUodWludDMy
X3QmIG1heFZvbHVtZSkgY29uc3Qgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBu
ZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgTWluTWlj
cm9waG9uZVZvbHVtZSh1aW50MzJfdCYgbWluVm9sdW1lKSBjb25zdCBvdmVycmlkZSB7Ci0gICAg
RkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9
Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25lVm9sdW1lU3RlcFNpemUodWludDE2X3QmIHN0ZXBTaXpl
KSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxl
ZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBTcGVha2VyTXV0ZUlzQXZhaWxh
YmxlKGJvb2wmIGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBu
ZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU2V0U3Bl
YWtlck11dGUoYm9vbCBlbmFibGUpIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFNwZWFr
ZXJNdXRlKGJvb2wmIGVuYWJsZWQpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJT
aG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90
IE1pY3JvcGhvbmVNdXRlSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSBvdmVycmlkZSB7Ci0g
ICAgRkFUQUwoKSA8PCAiTm90IGltcGxlbWVudGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQot
ICBpbnQzMl90IFNldE1pY3JvcGhvbmVNdXRlKGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAg
RkFUQUwoKSA8PCAiTm90IGltcGxlbWVudGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBp
bnQzMl90IE1pY3JvcGhvbmVNdXRlKGJvb2wmIGVuYWJsZWQpIGNvbnN0IG92ZXJyaWRlIHsKLSAg
ICBGQVRBTCgpIDw8ICJOb3QgaW1wbGVtZW50ZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0g
IGludDMyX3QgTWljcm9waG9uZUJvb3N0SXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSBvdmVy
cmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0
dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBTZXRNaWNyb3Bob25lQm9vc3QoYm9vbCBlbmFibGUp
IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAg
ICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IE1pY3JvcGhvbmVCb29zdChib29sJiBlbmFi
bGVkKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNh
bGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBTdGVyZW9QbGF5b3V0SXNB
dmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9f
RlVOQ1RJT05fXzsKLSAgICBhdmFpbGFibGUgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKLSAgfQot
Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBzdXBwb3J0LgotICBpbnQzMl90IFNldFN0ZXJlb1Bs
YXlvdXQoYm9vbCBlbmFibGUpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElP
Tl9fOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBzdXBw
b3J0LgotICBpbnQzMl90IFN0ZXJlb1BsYXlvdXQoYm9vbCYgZW5hYmxlZCkgY29uc3Qgb3ZlcnJp
ZGUgewotICAgIGVuYWJsZWQgPSBmYWxzZTsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIg
YmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFN0ZXJlb1JlY29y
ZGluZ0lzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIExPRyhJTkZP
KSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgcmV0dXJuIDA7
Ci0gIH0KLQotICBpbnQzMl90IFNldFN0ZXJlb1JlY29yZGluZyhib29sIGVuYWJsZSkgb3ZlcnJp
ZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIC0xOwotICB9
Ci0KLSAgaW50MzJfdCBTdGVyZW9SZWNvcmRpbmcoYm9vbCYgZW5hYmxlZCkgY29uc3Qgb3ZlcnJp
ZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgZW5hYmxlZCA9IGZhbHNl
OwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBTZXRQbGF5b3V0QnVmZmVyKAotICAg
ICAgY29uc3QgQXVkaW9EZXZpY2VNb2R1bGU6OkJ1ZmZlclR5cGUgdHlwZSwgdWludDE2X3Qgc2l6
ZU1TKSBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7
Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBQbGF5b3V0QnVmZmVyKAotICAgICAg
QXVkaW9EZXZpY2VNb2R1bGU6OkJ1ZmZlclR5cGUmIHR5cGUsIHVpbnQxNl90JiBzaXplTVMpIGNv
bnN0IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsK
LSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IFBsYXlvdXREZWxheSh1aW50MTZfdCYg
ZGVsYXlfbXMpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICAvLyBCZXN0IGd1ZXNzIHdlIGNhbiBkbyBp
cyB0byB1c2UgaGFsZiBvZiB0aGUgZXN0aW1hdGVkIHRvdGFsIGRlbGF5LgotICAgIGRlbGF5X21z
ID0gYXVkaW9fbWFuYWdlcl8tPkdldERlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcygpIC8gMjsK
LSAgICBSVENfRENIRUNLX0dUKGRlbGF5X21zLCAwKTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0g
IGludDMyX3QgUmVjb3JkaW5nRGVsYXkodWludDE2X3QmIGRlbGF5X21zKSBjb25zdCBvdmVycmlk
ZSB7Ci0gICAgLy8gQmVzdCBndWVzcyB3ZSBjYW4gZG8gaXMgdG8gdXNlIGhhbGYgb2YgdGhlIGVz
dGltYXRlZCB0b3RhbCBkZWxheS4KLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAg
IGRlbGF5X21zID0gYXVkaW9fbWFuYWdlcl8tPkdldERlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25k
cygpIC8gMjsKLSAgICBSVENfRENIRUNLX0dUKGRlbGF5X21zLCAwKTsKLSAgICByZXR1cm4gMDsK
LSAgfQotCi0gIGludDMyX3QgQ1BVTG9hZCh1aW50MTZfdCYgbG9hZCkgY29uc3Qgb3ZlcnJpZGUg
ewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAt
MTsKLSAgfQotCi0gIGJvb2wgUGxheW91dFdhcm5pbmcoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAg
cmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgYm9vbCBQbGF5b3V0RXJyb3IoKSBjb25zdCBvdmVycmlk
ZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgYm9vbCBSZWNvcmRpbmdXYXJuaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgUmVjb3Jk
aW5nRXJyb3IoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
dm9pZCBDbGVhclBsYXlvdXRXYXJuaW5nKCkgb3ZlcnJpZGUgeyBMT0coSU5GTykgPDwgX19GVU5D
VElPTl9fOyB9Ci0KLSAgdm9pZCBDbGVhclBsYXlvdXRFcnJvcigpIG92ZXJyaWRlIHsgTE9HKElO
Rk8pIDw8IF9fRlVOQ1RJT05fXzsgfQotCi0gIHZvaWQgQ2xlYXJSZWNvcmRpbmdXYXJuaW5nKCkg
b3ZlcnJpZGUgeyBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOyB9Ci0KLSAgdm9pZCBDbGVhclJl
Y29yZGluZ0Vycm9yKCkgb3ZlcnJpZGUgeyBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOyB9Ci0K
LSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIp
IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIG91dHB1dF8u
QXR0YWNoQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXIpOwotICAgIGlucHV0Xy5BdHRhY2hBdWRpb0J1
ZmZlcihhdWRpb0J1ZmZlcik7Ci0gIH0KLQotICAvLyBUT0RPKGhlbnJpa2EpOiByZW1vdmUKLSAg
aW50MzJfdCBTZXRQbGF5b3V0U2FtcGxlUmF0ZShjb25zdCB1aW50MzJfdCBzYW1wbGVzUGVyU2Vj
KSBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0g
ICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBTZXRMb3Vkc3BlYWtlclN0YXR1cyhib29s
IGVuYWJsZSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxs
ZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgR2V0TG91ZHNwZWFrZXJTdGF0
dXMoYm9vbCYgZW5hYmxlKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxk
IG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBkZXZpY2UgYm90aCBzdXBwb3J0cyBidWlsdCBpbiBBRUMgYW5kIHRoZSBkZXZp
Y2UKLSAgLy8gaXMgbm90IGJsYWNrbGlzdGVkLgotICAvLyBDdXJyZW50bHksIGlmIE9wZW5TTCBF
UyBpcyB1c2VkIGluIGJvdGggZGlyZWN0aW9ucywgdGhpcyBtZXRob2Qgd2lsbCBzdGlsbAotICAv
LyByZXBvcnQgdGhlIGNvcnJlY3QgdmFsdWUgYW5kIGl0IGhhcyB0aGUgY29ycmVjdCBlZmZlY3Qu
IEFzIGFuIGV4YW1wbGU6Ci0gIC8vIGEgZGV2aWNlIHN1cHBvcnRzIGJ1aWx0IGluIEFFQyBhbmQg
dGhpcyBtZXRob2QgcmV0dXJucyB0cnVlLiBMaWJqaW5nbGUKLSAgLy8gd2lsbCB0aGVuIGRpc2Fi
bGUgdGhlIFdlYlJUQyBiYXNlZCBBRUMgYW5kIHRoYXQgd2lsbCB3b3JrIGZvciBhbGwgZGV2aWNl
cwotICAvLyAobWFpbmx5IE5leHVzKSBldmVuIHdoZW4gT3BlblNMIEVTIGlzIHVzZWQgZm9yIGlu
cHV0IHNpbmNlIG91ciBjdXJyZW50Ci0gIC8vIGltcGxlbWVudGF0aW9uIHdpbGwgZW5hYmxlIGJ1
aWx0LWluIEFFQyBieSBkZWZhdWx0IGFsc28gZm9yIE9wZW5TTCBFUy4KLSAgLy8gVGhlIG9ubHkg
ImJhZCIgdGhpbmcgdGhhdCBoYXBwZW5zIHRvZGF5IGlzIHRoYXQgd2hlbiBMaWJqaW5nbGUgY2Fs
bHMKLSAgLy8gT3BlblNMRVNSZWNvcmRlcjo6RW5hYmxlQnVpbHRJbkFFQygpIGl0IHdpbGwgbm90
IGhhdmUgYW55IHJlYWwgZWZmZWN0IGFuZAotICAvLyBhICJOb3QgSW1wbGVtZW50ZWQiIGxvZyB3
aWxsIGJlIGZpbGVkLiBUaGlzIG5vbi1wZXJmZWN0IHN0YXRlIHdpbGwgcmVtYWluCi0gIC8vIHVu
dGlsIEkgaGF2ZSBhZGRlZCBmdWxsIHN1cHBvcnQgZm9yIGF1ZGlvIGVmZmVjdHMgYmFzZWQgb24g
T3BlblNMIEVTIEFQSXMuCi0gIGJvb2wgQnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkgY29uc3Qgb3Zl
cnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIGF1ZGlv
X21hbmFnZXJfLT5Jc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCk7Ci0gIH0KLQotICAv
LyBUT0RPKGhlbnJpa2EpOiBhZGQgaW1wbGVtZW50YXRpb24gZm9yIE9wZW5TTCBFUyBiYXNlZCBh
dWRpbyBhcyB3ZWxsLgotICBpbnQzMl90IEVuYWJsZUJ1aWx0SW5BRUMoYm9vbCBlbmFibGUpIG92
ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fIDw8ICIoIiA8PCBlbmFibGUg
PDwgIikiOwotICAgIFJUQ19DSEVDSyhCdWlsdEluQUVDSXNBdmFpbGFibGUoKSkgPDwgIkhXIEFF
QyBpcyBub3QgYXZhaWxhYmxlIjsKLSAgICByZXR1cm4gaW5wdXRfLkVuYWJsZUJ1aWx0SW5BRUMo
ZW5hYmxlKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGJvdGggc3Vw
cG9ydHMgYnVpbHQgaW4gQUdDIGFuZCB0aGUgZGV2aWNlCi0gIC8vIGlzIG5vdCBibGFja2xpc3Rl
ZC4KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIGltcGxlbWVudGF0aW9uIGZvciBPcGVuU0wgRVMg
YmFzZWQgYXVkaW8gYXMgd2VsbC4KLSAgLy8gSW4gYWRkaXRpb24sIHNlZSBjb21tZW50cyBmb3Ig
QnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkuCi0gIGJvb2wgQnVpbHRJbkFHQ0lzQXZhaWxhYmxlKCkg
Y29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0
dXJuIGF1ZGlvX21hbmFnZXJfLT5Jc0F1dG9tYXRpY0dhaW5Db250cm9sU3VwcG9ydGVkKCk7Ci0g
IH0KLQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgaW1wbGVtZW50YXRpb24gZm9yIE9wZW5TTCBF
UyBiYXNlZCBhdWRpbyBhcyB3ZWxsLgotICBpbnQzMl90IEVuYWJsZUJ1aWx0SW5BR0MoYm9vbCBl
bmFibGUpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fIDw8ICIoIiA8
PCBlbmFibGUgPDwgIikiOwotICAgIFJUQ19DSEVDSyhCdWlsdEluQUdDSXNBdmFpbGFibGUoKSkg
PDwgIkhXIEFHQyBpcyBub3QgYXZhaWxhYmxlIjsKLSAgICByZXR1cm4gaW5wdXRfLkVuYWJsZUJ1
aWx0SW5BR0MoZW5hYmxlKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNl
IGJvdGggc3VwcG9ydHMgYnVpbHQgaW4gTlMgYW5kIHRoZSBkZXZpY2UKLSAgLy8gaXMgbm90IGJs
YWNrbGlzdGVkLgotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgaW1wbGVtZW50YXRpb24gZm9yIE9w
ZW5TTCBFUyBiYXNlZCBhdWRpbyBhcyB3ZWxsLgotICAvLyBJbiBhZGRpdGlvbiwgc2VlIGNvbW1l
bnRzIGZvciBCdWlsdEluQUVDSXNBdmFpbGFibGUoKS4KLSAgYm9vbCBCdWlsdEluTlNJc0F2YWls
YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwot
ICAgIHJldHVybiBhdWRpb19tYW5hZ2VyXy0+SXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKTsK
LSAgfQotCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBpbXBsZW1lbnRhdGlvbiBmb3IgT3BlblNM
IEVTIGJhc2VkIGF1ZGlvIGFzIHdlbGwuCi0gIGludDMyX3QgRW5hYmxlQnVpbHRJbk5TKGJvb2wg
ZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXyA8PCAiKCIg
PDwgZW5hYmxlIDw8ICIpIjsKLSAgICBSVENfQ0hFQ0soQnVpbHRJbk5TSXNBdmFpbGFibGUoKSkg
PDwgIkhXIE5TIGlzIG5vdCBhdmFpbGFibGUiOwotICAgIHJldHVybiBpbnB1dF8uRW5hYmxlQnVp
bHRJbk5TKGVuYWJsZSk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0
aHJlYWRfY2hlY2tlcl87Ci0KLSAgLy8gTG9jYWwgY29weSBvZiB0aGUgYXVkaW8gbGF5ZXIgc2V0
IGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhlCi0gIC8vIEF1ZGlvRGV2aWNlTW9kdWxlSW1wbCBp
bnN0YW5jZS4gUmVhZCBvbmx5IHZhbHVlLgotICBjb25zdCBBdWRpb0RldmljZU1vZHVsZTo6QXVk
aW9MYXllciBhdWRpb19sYXllcl87Ci0KLSAgLy8gTm9uLW93bmluZyByYXcgcG9pbnRlciB0byBB
dWRpb01hbmFnZXIgaW5zdGFuY2UgZ2l2ZW4gdG8gdXNlIGF0Ci0gIC8vIGNvbnN0cnVjdGlvbi4g
VGhlIHJlYWwgb2JqZWN0IGlzIG93bmVkIGJ5IEF1ZGlvRGV2aWNlTW9kdWxlSW1wbCBhbmQgdGhl
Ci0gIC8vIGxpZmUgdGltZSBpcyB0aGUgc2FtZSBhcyB0aGF0IG9mIHRoZSBBdWRpb0RldmljZU1v
ZHVsZUltcGwsIGhlbmNlIHRoZXJlCi0gIC8vIGlzIG5vIHJpc2sgb2YgcmVhZGluZyBhIE5VTEwg
cG9pbnRlciBhdCBhbnkgdGltZSBpbiB0aGlzIGNsYXNzLgotICBBdWRpb01hbmFnZXIqIGNvbnN0
IGF1ZGlvX21hbmFnZXJfOwotCi0gIE91dHB1dFR5cGUgb3V0cHV0XzsKLQotICBJbnB1dFR5cGUg
aW5wdXRfOwotCi0gIGJvb2wgaW5pdGlhbGl6ZWRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHdl
YnJ0YwotCi0jZW5kaWYgIC8vIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0FV
RElPX0RFVklDRV9URU1QTEFURV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19kZXZpY2Vf
dW5pdHRlc3QuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19kZXZpY2VfdW5p
dHRlc3QuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fZGV2aWNl
X3VuaXR0ZXN0LmNjCShub25leGlzdGVudCkKQEAgLTEsMTAyNSArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0j
aW5jbHVkZSA8bGlzdD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8bnVtZXJpYz4KLSNp
bmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAid2VicnRjL2Jh
c2UvYXJyYXlzaXplLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY3JpdGljYWxzZWN0aW9uLmgi
Ci0jaW5jbHVkZSAid2VicnRjL2Jhc2UvZm9ybWF0X21hY3Jvcy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9iYXNlL3Njb3BlZF9yZWZfcHRyLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGltZXV0aWxz
LmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9f
Y29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
YXVkaW9fbWFuYWdlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL2J1aWxkX2luZm8uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZp
Y2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvYXVkaW9fZGV2aWNlX2ltcGwuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2UuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9tb2NrX2F1ZGlvX3RyYW5zcG9ydC5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZS9ldmVudF93cmFwcGVyLmgi
Ci0jaW5jbHVkZSAid2VicnRjL3N5c3RlbV93cmFwcGVycy9pbmNsdWRlL3NsZWVwLmgiCi0jaW5j
bHVkZSAid2VicnRjL3Rlc3QvZ21vY2suaCIKLSNpbmNsdWRlICJ3ZWJydGMvdGVzdC9ndGVzdC5o
IgotI2luY2x1ZGUgIndlYnJ0Yy90ZXN0L3Rlc3RzdXBwb3J0L2ZpbGV1dGlscy5oIgotCi11c2lu
ZyBzdGQ6OmNvdXQ7Ci11c2luZyBzdGQ6OmVuZGw7Ci11c2luZyA6OnRlc3Rpbmc6Ol87Ci11c2lu
ZyA6OnRlc3Rpbmc6OkF0TGVhc3Q7Ci11c2luZyA6OnRlc3Rpbmc6Okd0OwotdXNpbmcgOjp0ZXN0
aW5nOjpJbnZva2U7Ci11c2luZyA6OnRlc3Rpbmc6Ok5pY2VNb2NrOwotdXNpbmcgOjp0ZXN0aW5n
OjpOb3ROdWxsOwotdXNpbmcgOjp0ZXN0aW5nOjpSZXR1cm47Ci0KLS8vICNkZWZpbmUgRU5BQkxF
X0RFQlVHX1BSSU5URgotI2lmZGVmIEVOQUJMRV9ERUJVR19QUklOVEYKLSNkZWZpbmUgUFJJTlRE
KC4uLikgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJHU19fKTsKLSNlbHNlCi0jZGVmaW5lIFBSSU5U
RCguLi4pICgodm9pZCkwKQotI2VuZGlmCi0jZGVmaW5lIFBSSU5UKC4uLikgZnByaW50ZihzdGRl
cnIsIF9fVkFfQVJHU19fKTsKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIE51bWJlciBvZiBj
YWxsYmFja3MgKGlucHV0IG9yIG91dHB1dCkgdGhlIHRlc3RzIHdhaXRzIGZvciBiZWZvcmUgd2Ug
c2V0Ci0vLyBhbiBldmVudCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRlc3Qgd2FzIE9LLgotc3RhdGlj
IGNvbnN0IHNpemVfdCBrTnVtQ2FsbGJhY2tzID0gMTA7Ci0vLyBNYXggYW1vdW50IG9mIHRpbWUg
d2Ugd2FpdCBmb3IgYW4gZXZlbnQgdG8gYmUgc2V0IHdoaWxlIGNvdW50aW5nIGNhbGxiYWNrcy4K
LXN0YXRpYyBjb25zdCBpbnQga1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29uZHMgPSAxMCAqIDEwMDA7
Ci0vLyBBdmVyYWdlIG51bWJlciBvZiBhdWRpbyBjYWxsYmFja3MgcGVyIHNlY29uZCBhc3N1bWlu
ZyAxMG1zIHBhY2tldCBzaXplLgotc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtQ2FsbGJhY2tzUGVy
U2Vjb25kID0gMTAwOwotLy8gUGxheSBvdXQgYSB0ZXN0IGZpbGUgZHVyaW5nIHRoaXMgdGltZSAo
dW5pdCBpcyBpbiBzZWNvbmRzKS4KLXN0YXRpYyBjb25zdCBpbnQga0ZpbGVQbGF5VGltZUluU2Vj
ID0gNTsKLXN0YXRpYyBjb25zdCBzaXplX3Qga0JpdHNQZXJTYW1wbGUgPSAxNjsKLXN0YXRpYyBj
b25zdCBzaXplX3Qga0J5dGVzUGVyU2FtcGxlID0ga0JpdHNQZXJTYW1wbGUgLyA4OwotLy8gUnVu
IHRoZSBmdWxsLWR1cGxleCB0ZXN0IGR1cmluZyB0aGlzIHRpbWUgKHVuaXQgaXMgaW4gc2Vjb25k
cykuCi0vLyBOb3RlIHRoYXQgZmlyc3QgfGtOdW1JZ25vcmVGaXJzdENhbGxiYWNrc3wgYXJlIGln
bm9yZWQuCi1zdGF0aWMgY29uc3QgaW50IGtGdWxsRHVwbGV4VGltZUluU2VjID0gNTsKLS8vIFdh
aXQgZm9yIHRoZSBjYWxsYmFjayBzZXF1ZW5jZSB0byBzdGFiaWxpemUgYnkgaWdub3JpbmcgdGhp
cyBhbW91bnQgb2YgdGhlCi0vLyBpbml0aWFsIGNhbGxiYWNrcyAoYXZvaWRzIGluaXRpYWwgRklG
TyBhY2Nlc3MpLgotLy8gT25seSB1c2VkIGluIHRoZSBSdW5QbGF5b3V0QW5kUmVjb3JkaW5nSW5G
dWxsRHVwbGV4IHRlc3QuCi1zdGF0aWMgY29uc3Qgc2l6ZV90IGtOdW1JZ25vcmVGaXJzdENhbGxi
YWNrcyA9IDUwOwotLy8gU2V0cyB0aGUgbnVtYmVyIG9mIGltcHVsc2VzIHBlciBzZWNvbmQgaW4g
dGhlIGxhdGVuY3kgdGVzdC4KLXN0YXRpYyBjb25zdCBpbnQga0ltcHVsc2VGcmVxdWVuY3lJbkh6
ID0gMTsKLS8vIExlbmd0aCBvZiByb3VuZC10cmlwIGxhdGVuY3kgbWVhc3VyZW1lbnRzLiBOdW1i
ZXIgb2YgdHJhbnNtaXR0ZWQgaW1wdWxzZXMKLS8vIGlzIGtJbXB1bHNlRnJlcXVlbmN5SW5IeiAq
IGtNZWFzdXJlTGF0ZW5jeVRpbWVJblNlYyAtIDEuCi1zdGF0aWMgY29uc3QgaW50IGtNZWFzdXJl
TGF0ZW5jeVRpbWVJblNlYyA9IDExOwotLy8gVXRpbGl6ZWQgaW4gcm91bmQtdHJpcCBsYXRlbmN5
IG1lYXN1cmVtZW50cyB0byBhdm9pZCBjYXB0dXJpbmcgbm9pc2Ugc2FtcGxlcy4KLXN0YXRpYyBj
b25zdCBpbnQga0ltcHVsc2VUaHJlc2hvbGQgPSAxMDAwOwotc3RhdGljIGNvbnN0IGNoYXIga1Rh
Z1tdID0gIlsuLi4uLi4uLi4uXSAiOwotCi1lbnVtIFRyYW5zcG9ydFR5cGUgewotICBrUGxheW91
dCA9IDB4MSwKLSAga1JlY29yZGluZyA9IDB4MiwKLX07Ci0KLS8vIEludGVyZmFjZSBmb3IgcHJv
Y2Vzc2luZyB0aGUgYXVkaW8gc3RyZWFtLiBSZWFsIGltcGxlbWVudGF0aW9ucyBjYW4gZS5nLgot
Ly8gcnVuIGF1ZGlvIGluIGxvb3BiYWNrLCByZWFkIGF1ZGlvIGZyb20gYSBmaWxlIG9yIHBlcmZv
cm0gbGF0ZW5jeQotLy8gbWVhc3VyZW1lbnRzLgotY2xhc3MgQXVkaW9TdHJlYW1JbnRlcmZhY2Ug
ewotIHB1YmxpYzoKLSAgdmlydHVhbCB2b2lkIFdyaXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgc2l6
ZV90IG51bV9mcmFtZXMpID0gMDsKLSAgdmlydHVhbCB2b2lkIFJlYWQodm9pZCogZGVzdGluYXRp
b24sIHNpemVfdCBudW1fZnJhbWVzKSA9IDA7Ci0gcHJvdGVjdGVkOgotICB2aXJ0dWFsIH5BdWRp
b1N0cmVhbUludGVyZmFjZSgpIHt9Ci19OwotCi0vLyBSZWFkcyBhdWRpbyBzYW1wbGVzIGZyb20g
YSBQQ00gZmlsZSB3aGVyZSB0aGUgZmlsZSBpcyBzdG9yZWQgaW4gbWVtb3J5IGF0Ci0vLyBjb25z
dHJ1Y3Rpb24uCi1jbGFzcyBGaWxlQXVkaW9TdHJlYW0gOiBwdWJsaWMgQXVkaW9TdHJlYW1JbnRl
cmZhY2UgewotIHB1YmxpYzoKLSAgRmlsZUF1ZGlvU3RyZWFtKAotICAgICAgc2l6ZV90IG51bV9j
YWxsYmFja3MsIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlX25hbWUsIGludCBzYW1wbGVfcmF0ZSkK
LSAgICAgIDogZmlsZV9zaXplX2luX2J5dGVzXygwKSwKLSAgICAgICAgc2FtcGxlX3JhdGVfKHNh
bXBsZV9yYXRlKSwKLSAgICAgICAgZmlsZV9wb3NfKDApIHsKLSAgICBmaWxlX3NpemVfaW5fYnl0
ZXNfID0gdGVzdDo6R2V0RmlsZVNpemUoZmlsZV9uYW1lKTsKLSAgICBzYW1wbGVfcmF0ZV8gPSBz
YW1wbGVfcmF0ZTsKLSAgICBFWFBFQ1RfR0UoZmlsZV9zaXplX2luX2NhbGxiYWNrcygpLCBudW1f
Y2FsbGJhY2tzKQotICAgICAgICA8PCAiU2l6ZSBvZiB0ZXN0IGZpbGUgaXMgbm90IGxhcmdlIGVu
b3VnaCB0byBsYXN0IGR1cmluZyB0aGUgdGVzdC4iOwotICAgIGNvbnN0IHNpemVfdCBudW1fMTZi
aXRfc2FtcGxlcyA9Ci0gICAgICAgIHRlc3Q6OkdldEZpbGVTaXplKGZpbGVfbmFtZSkgLyBrQnl0
ZXNQZXJTYW1wbGU7Ci0gICAgZmlsZV8ucmVzZXQobmV3IGludDE2X3RbbnVtXzE2Yml0X3NhbXBs
ZXNdKTsKLSAgICBGSUxFKiBhdWRpb19maWxlID0gZm9wZW4oZmlsZV9uYW1lLmNfc3RyKCksICJy
YiIpOwotICAgIEVYUEVDVF9ORShhdWRpb19maWxlLCBudWxscHRyKTsKLSAgICBzaXplX3QgbnVt
X3NhbXBsZXNfcmVhZCA9IGZyZWFkKAotICAgICAgICBmaWxlXy5nZXQoKSwgc2l6ZW9mKGludDE2
X3QpLCBudW1fMTZiaXRfc2FtcGxlcywgYXVkaW9fZmlsZSk7Ci0gICAgRVhQRUNUX0VRKG51bV9z
YW1wbGVzX3JlYWQsIG51bV8xNmJpdF9zYW1wbGVzKTsKLSAgICBmY2xvc2UoYXVkaW9fZmlsZSk7
Ci0gIH0KLQotICAvLyBBdWRpb1N0cmVhbUludGVyZmFjZTo6V3JpdGUoKSBpcyBub3QgaW1wbGVt
ZW50ZWQuCi0gIHZvaWQgV3JpdGUoY29uc3Qgdm9pZCogc291cmNlLCBzaXplX3QgbnVtX2ZyYW1l
cykgb3ZlcnJpZGUge30KLQotICAvLyBSZWFkIHNhbXBsZXMgZnJvbSBmaWxlIHN0b3JlZCBpbiBt
ZW1vcnkgKGF0IGNvbnN0cnVjdGlvbikgYW5kIGNvcHkKLSAgLy8gfG51bV9mcmFtZXN8ICg8PT4g
MTBtcykgdG8gdGhlIHxkZXN0aW5hdGlvbnwgYnl0ZSBidWZmZXIuCi0gIHZvaWQgUmVhZCh2b2lk
KiBkZXN0aW5hdGlvbiwgc2l6ZV90IG51bV9mcmFtZXMpIG92ZXJyaWRlIHsKLSAgICBtZW1jcHko
ZGVzdGluYXRpb24sCi0gICAgICAgICAgIHN0YXRpY19jYXN0PGludDE2X3QqPiAoJmZpbGVfW2Zp
bGVfcG9zX10pLAotICAgICAgICAgICBudW1fZnJhbWVzICogc2l6ZW9mKGludDE2X3QpKTsKLSAg
ICBmaWxlX3Bvc18gKz0gbnVtX2ZyYW1lczsKLSAgfQotCi0gIGludCBmaWxlX3NpemVfaW5fc2Vj
b25kcygpIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigKLSAgICAgICAgZmls
ZV9zaXplX2luX2J5dGVzXyAvIChrQnl0ZXNQZXJTYW1wbGUgKiBzYW1wbGVfcmF0ZV8pKTsKLSAg
fQotICBzaXplX3QgZmlsZV9zaXplX2luX2NhbGxiYWNrcygpIGNvbnN0IHsKLSAgICByZXR1cm4g
ZmlsZV9zaXplX2luX3NlY29uZHMoKSAqIGtOdW1DYWxsYmFja3NQZXJTZWNvbmQ7Ci0gIH0KLQot
IHByaXZhdGU6Ci0gIHNpemVfdCBmaWxlX3NpemVfaW5fYnl0ZXNfOwotICBpbnQgc2FtcGxlX3Jh
dGVfOwotICBzdGQ6OnVuaXF1ZV9wdHI8aW50MTZfdFtdPiBmaWxlXzsKLSAgc2l6ZV90IGZpbGVf
cG9zXzsKLX07Ci0KLS8vIFNpbXBsZSBmaXJzdCBpbiBmaXJzdCBvdXQgKEZJRk8pIGNsYXNzIHRo
YXQgd3JhcHMgYSBsaXN0IG9mIDE2LWJpdCBhdWRpbwotLy8gYnVmZmVycyBvZiBmaXhlZCBzaXpl
IGFuZCBhbGxvd3MgV3JpdGUgYW5kIFJlYWQgb3BlcmF0aW9ucy4gVGhlIGlkZWEgaXMgdG8KLS8v
IHN0b3JlIHJlY29yZGVkIGF1ZGlvIGJ1ZmZlcnMgKHVzaW5nIFdyaXRlKSBhbmQgdGhlbiByZWFk
ICh1c2luZyBSZWFkKSB0aGVzZQotLy8gc3RvcmVkIGJ1ZmZlcnMgd2l0aCBhcyBzaG9ydCBkZWxh
eSBhcyBwb3NzaWJsZSB3aGVuIHRoZSBhdWRpbyBsYXllciBuZWVkcwotLy8gZGF0YSB0byBwbGF5
IG91dC4gVGhlIG51bWJlciBvZiBidWZmZXJzIGluIHRoZSBGSUZPIHdpbGwgc3RhYmlsaXplIHVu
ZGVyCi0vLyBub3JtYWwgY29uZGl0aW9ucyBzaW5jZSB0aGVyZSB3aWxsIGJlIGEgYmFsYW5jZSBi
ZXR3ZWVuIFdyaXRlIGFuZCBSZWFkIGNhbGxzLgotLy8gVGhlIGNvbnRhaW5lciBpcyBhIHN0ZDo6
bGlzdCBjb250YWluZXIgYW5kIGFjY2VzcyBpcyBwcm90ZWN0ZWQgd2l0aCBhIGxvY2sKLS8vIHNp
bmNlIGJvdGggc2lkZXMgKHBsYXlvdXQgYW5kIHJlY29yZGluZykgYXJlIGRyaXZlbiBieSBpdHMg
b3duIHRocmVhZC4KLWNsYXNzIEZpZm9BdWRpb1N0cmVhbSA6IHB1YmxpYyBBdWRpb1N0cmVhbUlu
dGVyZmFjZSB7Ci0gcHVibGljOgotICBleHBsaWNpdCBGaWZvQXVkaW9TdHJlYW0oc2l6ZV90IGZy
YW1lc19wZXJfYnVmZmVyKQotICAgICAgOiBmcmFtZXNfcGVyX2J1ZmZlcl8oZnJhbWVzX3Blcl9i
dWZmZXIpLAotICAgICAgICBieXRlc19wZXJfYnVmZmVyXyhmcmFtZXNfcGVyX2J1ZmZlcl8gKiBz
aXplb2YoaW50MTZfdCkpLAotICAgICAgICBmaWZvXyhuZXcgQXVkaW9CdWZmZXJMaXN0KSwKLSAg
ICAgICAgbGFyZ2VzdF9zaXplXygwKSwKLSAgICAgICAgdG90YWxfd3JpdHRlbl9lbGVtZW50c18o
MCksCi0gICAgICAgIHdyaXRlX2NvdW50XygwKSB7Ci0gICAgRVhQRUNUX05FKGZpZm9fLmdldCgp
LCBudWxscHRyKTsKLSAgfQotCi0gIH5GaWZvQXVkaW9TdHJlYW0oKSB7Ci0gICAgRmx1c2goKTsK
LSAgfQotCi0gIC8vIEFsbG9jYXRlIG5ldyBtZW1vcnksIGNvcHkgfG51bV9mcmFtZXN8IHNhbXBs
ZXMgZnJvbSB8c291cmNlfCBpbnRvIG1lbW9yeQotICAvLyBhbmQgYWRkIHBvaW50ZXIgdG8gdGhl
IG1lbW9yeSBsb2NhdGlvbiB0byBlbmQgb2YgdGhlIGxpc3QuCi0gIC8vIEluY3JlYXNlcyB0aGUg
c2l6ZSBvZiB0aGUgRklGTyBieSBvbmUgZWxlbWVudC4KLSAgdm9pZCBXcml0ZShjb25zdCB2b2lk
KiBzb3VyY2UsIHNpemVfdCBudW1fZnJhbWVzKSBvdmVycmlkZSB7Ci0gICAgQVNTRVJUX0VRKG51
bV9mcmFtZXMsIGZyYW1lc19wZXJfYnVmZmVyXyk7Ci0gICAgUFJJTlREKCIrIik7Ci0gICAgaWYg
KHdyaXRlX2NvdW50XysrIDwga051bUlnbm9yZUZpcnN0Q2FsbGJhY2tzKSB7Ci0gICAgICByZXR1
cm47Ci0gICAgfQotICAgIGludDE2X3QqIG1lbW9yeSA9IG5ldyBpbnQxNl90W2ZyYW1lc19wZXJf
YnVmZmVyX107Ci0gICAgbWVtY3B5KHN0YXRpY19jYXN0PGludDE2X3QqPiAoJm1lbW9yeVswXSks
Ci0gICAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgYnl0ZXNfcGVyX2J1ZmZlcl8pOwotICAg
IHJ0Yzo6Q3JpdFNjb3BlIGxvY2soJmxvY2tfKTsKLSAgICBmaWZvXy0+cHVzaF9iYWNrKG1lbW9y
eSk7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBmaWZvXy0+c2l6ZSgpOwotICAgIGlmIChzaXpl
ID4gbGFyZ2VzdF9zaXplXykgewotICAgICAgbGFyZ2VzdF9zaXplXyA9IHNpemU7Ci0gICAgICBQ
UklOVEQoIiglIiBQUkl1UyAiKSIsIGxhcmdlc3Rfc2l6ZV8pOwotICAgIH0KLSAgICB0b3RhbF93
cml0dGVuX2VsZW1lbnRzXyArPSBzaXplOwotICB9Ci0KLSAgLy8gUmVhZCBwb2ludGVyIHRvIGRh
dGEgYnVmZmVyIGZyb20gZnJvbnQgb2YgbGlzdCwgY29weSB8bnVtX2ZyYW1lc3wgb2Ygc3RvcmVk
Ci0gIC8vIGRhdGEgaW50byB8ZGVzdGluYXRpb258IGFuZCBkZWxldGUgdGhlIHV0aWxpemVkIG1l
bW9yeSBhbGxvY2F0aW9uLgotICAvLyBEZWNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIEZJRk8gYnkg
b25lIGVsZW1lbnQuCi0gIHZvaWQgUmVhZCh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IG51bV9m
cmFtZXMpIG92ZXJyaWRlIHsKLSAgICBBU1NFUlRfRVEobnVtX2ZyYW1lcywgZnJhbWVzX3Blcl9i
dWZmZXJfKTsKLSAgICBQUklOVEQoIi0iKTsKLSAgICBydGM6OkNyaXRTY29wZSBsb2NrKCZsb2Nr
Xyk7Ci0gICAgaWYgKGZpZm9fLT5lbXB0eSgpKSB7Ci0gICAgICBtZW1zZXQoZGVzdGluYXRpb24s
IDAsIGJ5dGVzX3Blcl9idWZmZXJfKTsKLSAgICB9IGVsc2UgewotICAgICAgaW50MTZfdCogbWVt
b3J5ID0gZmlmb18tPmZyb250KCk7Ci0gICAgICBmaWZvXy0+cG9wX2Zyb250KCk7Ci0gICAgICBt
ZW1jcHkoZGVzdGluYXRpb24sCi0gICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MTZfdCo+ICgm
bWVtb3J5WzBdKSwKLSAgICAgICAgICAgICBieXRlc19wZXJfYnVmZmVyXyk7Ci0gICAgICBkZWxl
dGUgbWVtb3J5OwotICAgIH0KLSAgfQotCi0gIHNpemVfdCBzaXplKCkgY29uc3QgewotICAgIHJl
dHVybiBmaWZvXy0+c2l6ZSgpOwotICB9Ci0KLSAgc2l6ZV90IGxhcmdlc3Rfc2l6ZSgpIGNvbnN0
IHsKLSAgICByZXR1cm4gbGFyZ2VzdF9zaXplXzsKLSAgfQotCi0gIHNpemVfdCBhdmVyYWdlX3Np
emUoKSBjb25zdCB7Ci0gICAgcmV0dXJuICh0b3RhbF93cml0dGVuX2VsZW1lbnRzXyA9PSAwKSA/
IDAuMCA6IDAuNSArIHN0YXRpY19jYXN0PGZsb2F0PiAoCi0gICAgICB0b3RhbF93cml0dGVuX2Vs
ZW1lbnRzXykgLyAod3JpdGVfY291bnRfIC0ga051bUlnbm9yZUZpcnN0Q2FsbGJhY2tzKTsKLSAg
fQotCi0gcHJpdmF0ZToKLSAgdm9pZCBGbHVzaCgpIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBmaWZv
Xy0+YmVnaW4oKTsgaXQgIT0gZmlmb18tPmVuZCgpOyArK2l0KSB7Ci0gICAgICBkZWxldGUgKml0
OwotICAgIH0KLSAgICBmaWZvXy0+Y2xlYXIoKTsKLSAgfQotCi0gIHVzaW5nIEF1ZGlvQnVmZmVy
TGlzdCA9IHN0ZDo6bGlzdDxpbnQxNl90Kj47Ci0gIHJ0Yzo6Q3JpdGljYWxTZWN0aW9uIGxvY2tf
OwotICBjb25zdCBzaXplX3QgZnJhbWVzX3Blcl9idWZmZXJfOwotICBjb25zdCBzaXplX3QgYnl0
ZXNfcGVyX2J1ZmZlcl87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb0J1ZmZlckxpc3Q+IGZpZm9f
OwotICBzaXplX3QgbGFyZ2VzdF9zaXplXzsKLSAgc2l6ZV90IHRvdGFsX3dyaXR0ZW5fZWxlbWVu
dHNfOwotICBzaXplX3Qgd3JpdGVfY291bnRfOwotfTsKLQotLy8gSW5zZXJ0cyBwZXJpb2RpYyBp
bXB1bHNlcyBhbmQgbWVhc3VyZXMgdGhlIGxhdGVuY3kgYmV0d2VlbiB0aGUgdGltZSBvZgotLy8g
dHJhbnNtaXNzaW9uIGFuZCB0aW1lIG9mIHJlY2VpdmluZyB0aGUgc2FtZSBpbXB1bHNlLgotLy8g
VXNhZ2UgcmVxdWlyZXMgYSBzcGVjaWFsIGhhcmR3YXJlIGNhbGxlZCBBdWRpbyBMb29wYmFjayBE
b25nbGUuCi0vLyBTZWUgaHR0cDovL3NvdXJjZS5hbmRyb2lkLmNvbS9kZXZpY2VzL2F1ZGlvL2xv
b3BiYWNrLmh0bWwgZm9yIGRldGFpbHMuCi1jbGFzcyBMYXRlbmN5TWVhc3VyaW5nQXVkaW9TdHJl
YW0gOiBwdWJsaWMgQXVkaW9TdHJlYW1JbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgZXhwbGljaXQg
TGF0ZW5jeU1lYXN1cmluZ0F1ZGlvU3RyZWFtKHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcikKLSAg
ICAgIDogZnJhbWVzX3Blcl9idWZmZXJfKGZyYW1lc19wZXJfYnVmZmVyKSwKLSAgICAgICAgYnl0
ZXNfcGVyX2J1ZmZlcl8oZnJhbWVzX3Blcl9idWZmZXJfICogc2l6ZW9mKGludDE2X3QpKSwKLSAg
ICAgICAgcGxheV9jb3VudF8oMCksCi0gICAgICAgIHJlY19jb3VudF8oMCksCi0gICAgICAgIHB1
bHNlX3RpbWVfKDApIHsKLSAgfQotCi0gIC8vIEluc2VydCBwZXJpb2RpYyBpbXB1bHNlcyBpbiBm
aXJzdCB0d28gc2FtcGxlcyBvZiB8ZGVzdGluYXRpb258LgotICB2b2lkIFJlYWQodm9pZCogZGVz
dGluYXRpb24sIHNpemVfdCBudW1fZnJhbWVzKSBvdmVycmlkZSB7Ci0gICAgQVNTRVJUX0VRKG51
bV9mcmFtZXMsIGZyYW1lc19wZXJfYnVmZmVyXyk7Ci0gICAgaWYgKHBsYXlfY291bnRfID09IDAp
IHsKLSAgICAgIFBSSU5UKCJbIik7Ci0gICAgfQotICAgIHBsYXlfY291bnRfKys7Ci0gICAgbWVt
c2V0KGRlc3RpbmF0aW9uLCAwLCBieXRlc19wZXJfYnVmZmVyXyk7Ci0gICAgaWYgKHBsYXlfY291
bnRfICUgKGtOdW1DYWxsYmFja3NQZXJTZWNvbmQgLyBrSW1wdWxzZUZyZXF1ZW5jeUluSHopID09
IDApIHsKLSAgICAgIGlmIChwdWxzZV90aW1lXyA9PSAwKSB7Ci0gICAgICAgIHB1bHNlX3RpbWVf
ID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gICAgICB9Ci0gICAgICBQUklOVCgiLiIpOwotICAgICAg
Y29uc3QgaW50MTZfdCBpbXB1bHNlID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQxNl90Pjo6bWF4
KCk7Ci0gICAgICBpbnQxNl90KiBwdHIxNiA9IHN0YXRpY19jYXN0PGludDE2X3QqPiAoZGVzdGlu
YXRpb24pOwotICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpIHsKLSAgICAgICAg
cHRyMTZbaV0gPSBpbXB1bHNlOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIERldGVjdCBy
ZWNlaXZlZCBpbXB1bHNlcyBpbiB8c291cmNlfCwgZGVyaXZlIHRpbWUgYmV0d2VlbiB0cmFuc21p
c3Npb24gYW5kCi0gIC8vIGRldGVjdGlvbiBhbmQgYWRkIHRoZSBjYWxjdWxhdGVkIGRlbGF5IHRv
IGxpc3Qgb2YgbGF0ZW5jaWVzLgotICB2b2lkIFdyaXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgc2l6
ZV90IG51bV9mcmFtZXMpIG92ZXJyaWRlIHsKLSAgICBBU1NFUlRfRVEobnVtX2ZyYW1lcywgZnJh
bWVzX3Blcl9idWZmZXJfKTsKLSAgICByZWNfY291bnRfKys7Ci0gICAgaWYgKHB1bHNlX3RpbWVf
ID09IDApIHsKLSAgICAgIC8vIEF2b2lkIGRldGVjdGlvbiBvZiBuZXcgaW1wdWxzZSByZXNwb25z
ZSB1bnRpbCBhIG5ldyBpbXB1bHNlIGhhcwotICAgICAgLy8gYmVlbiB0cmFuc21pdHRlZCAoc2V0
cyB8cHVsc2VfdGltZV98IHRvIHZhbHVlIGxhcmdlciB0aGFuIHplcm8pLgotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBjb25zdCBpbnQxNl90KiBwdHIxNiA9IHN0YXRpY19jYXN0PGNvbnN0IGlu
dDE2X3QqPiAoc291cmNlKTsKLSAgICBzdGQ6OnZlY3RvcjxpbnQxNl90PiB2ZWMocHRyMTYsIHB0
cjE2ICsgbnVtX2ZyYW1lcyk7Ci0gICAgLy8gRmluZCBtYXggdmFsdWUgaW4gdGhlIGF1ZGlvIGJ1
ZmZlci4KLSAgICBpbnQgbWF4ID0gKnN0ZDo6bWF4X2VsZW1lbnQodmVjLmJlZ2luKCksIHZlYy5l
bmQoKSk7Ci0gICAgLy8gRmluZCBpbmRleCAoZWxlbWVudCBwb3NpdGlvbiBpbiB2ZWN0b3IpIG9m
IHRoZSBtYXggZWxlbWVudC4KLSAgICBpbnQgaW5kZXhfb2ZfbWF4ID0gc3RkOjpkaXN0YW5jZSh2
ZWMuYmVnaW4oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmZp
bmQodmVjLmJlZ2luKCksIHZlYy5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXgpKTsKLSAgICBpZiAobWF4ID4ga0ltcHVsc2VUaHJlc2hvbGQpIHsKLSAgICAg
IFBSSU5URCgiKCVkLCVkKSIsIG1heCwgaW5kZXhfb2ZfbWF4KTsKLSAgICAgIGludDY0X3Qgbm93
X3RpbWUgPSBydGM6OlRpbWVNaWxsaXMoKTsKLSAgICAgIGludCBleHRyYV9kZWxheSA9IEluZGV4
VG9NaWxsaXNlY29uZHMoc3RhdGljX2Nhc3Q8ZG91YmxlPiAoaW5kZXhfb2ZfbWF4KSk7Ci0gICAg
ICBQUklOVEQoIlslZF0iLCBzdGF0aWNfY2FzdDxpbnQ+IChub3dfdGltZSAtIHB1bHNlX3RpbWVf
KSk7Ci0gICAgICBQUklOVEQoIlslZF0iLCBleHRyYV9kZWxheSk7Ci0gICAgICAvLyBUb3RhbCBs
YXRlbmN5IGlzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHJhbnNtaXQgdGltZSBhbmQgZGV0ZWN0
aW9uCi0gICAgICAvLyB0b21lIHBsdXMgdGhlIGV4dHJhIGRlbGF5IHdpdGhpbiB0aGUgYnVmZmVy
IGluIHdoaWNoIHdlIGRldGVjdGVkIHRoZQotICAgICAgLy8gcmVjZWl2ZWQgaW1wdWxzZS4gSXQg
aXMgdHJhbnNtaXR0ZWQgYXQgc2FtcGxlIDAgYnV0IGNhbiBiZSByZWNlaXZlZAotICAgICAgLy8g
YXQgc2FtcGxlIE4gd2hlcmUgTiA+IDAuIFRoZSB0ZXJtIHxleHRyYV9kZWxheXwgYWNjb3VudHMg
Zm9yIE4gYW5kIGl0Ci0gICAgICAvLyBpcyBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMTBtcy4KLSAg
ICAgIGxhdGVuY2llc18ucHVzaF9iYWNrKG5vd190aW1lIC0gcHVsc2VfdGltZV8gKyBleHRyYV9k
ZWxheSk7Ci0gICAgICBwdWxzZV90aW1lXyA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgIFBSSU5U
RCgiLSIpOwotICAgIH0KLSAgfQotCi0gIHNpemVfdCBudW1fbGF0ZW5jeV92YWx1ZXMoKSBjb25z
dCB7Ci0gICAgcmV0dXJuIGxhdGVuY2llc18uc2l6ZSgpOwotICB9Ci0KLSAgaW50IG1pbl9sYXRl
bmN5KCkgY29uc3QgewotICAgIGlmIChsYXRlbmNpZXNfLmVtcHR5KCkpCi0gICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gKnN0ZDo6bWluX2VsZW1lbnQobGF0ZW5jaWVzXy5iZWdpbigpLCBsYXRl
bmNpZXNfLmVuZCgpKTsKLSAgfQotCi0gIGludCBtYXhfbGF0ZW5jeSgpIGNvbnN0IHsKLSAgICBp
ZiAobGF0ZW5jaWVzXy5lbXB0eSgpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICpzdGQ6
Om1heF9lbGVtZW50KGxhdGVuY2llc18uYmVnaW4oKSwgbGF0ZW5jaWVzXy5lbmQoKSk7Ci0gIH0K
LQotICBpbnQgYXZlcmFnZV9sYXRlbmN5KCkgY29uc3QgewotICAgIGlmIChsYXRlbmNpZXNfLmVt
cHR5KCkpCi0gICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMC41ICsgc3RhdGljX2Nhc3Q8ZG91
YmxlPiAoCi0gICAgICAgIHN0ZDo6YWNjdW11bGF0ZShsYXRlbmNpZXNfLmJlZ2luKCksIGxhdGVu
Y2llc18uZW5kKCksIDApKSAvCi0gICAgICAgIGxhdGVuY2llc18uc2l6ZSgpOwotICB9Ci0KLSAg
dm9pZCBQcmludFJlc3VsdHMoKSBjb25zdCB7Ci0gICAgUFJJTlQoIl0gIik7Ci0gICAgZm9yIChh
dXRvIGl0ID0gbGF0ZW5jaWVzXy5iZWdpbigpOyBpdCAhPSBsYXRlbmNpZXNfLmVuZCgpOyArK2l0
KSB7Ci0gICAgICBQUklOVCgiJWQgIiwgKml0KTsKLSAgICB9Ci0gICAgUFJJTlQoIlxuIik7Ci0g
ICAgUFJJTlQoIiVzW21pbiwgbWF4LCBhdmddPVslZCwgJWQsICVkXSBtc1xuIiwga1RhZywKLSAg
ICAgICAgbWluX2xhdGVuY3koKSwgbWF4X2xhdGVuY3koKSwgYXZlcmFnZV9sYXRlbmN5KCkpOwot
ICB9Ci0KLSAgaW50IEluZGV4VG9NaWxsaXNlY29uZHMoZG91YmxlIGluZGV4KSBjb25zdCB7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMTAuMCAqIChpbmRleCAvIGZyYW1lc19wZXJfYnVm
ZmVyXykgKyAwLjUpOwotICB9Ci0KLSBwcml2YXRlOgotICBjb25zdCBzaXplX3QgZnJhbWVzX3Bl
cl9idWZmZXJfOwotICBjb25zdCBzaXplX3QgYnl0ZXNfcGVyX2J1ZmZlcl87Ci0gIHNpemVfdCBw
bGF5X2NvdW50XzsKLSAgc2l6ZV90IHJlY19jb3VudF87Ci0gIGludDY0X3QgcHVsc2VfdGltZV87
Ci0gIHN0ZDo6dmVjdG9yPGludD4gbGF0ZW5jaWVzXzsKLX07Ci0KLS8vIE1vY2tzIHRoZSBBdWRp
b1RyYW5zcG9ydCBvYmplY3QgYW5kIHByb3hpZXMgYWN0aW9ucyBmb3IgdGhlIHR3byBjYWxsYmFj
a3MKLS8vIChSZWNvcmRlZERhdGFJc0F2YWlsYWJsZSBhbmQgTmVlZE1vcmVQbGF5RGF0YSkgdG8g
ZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucwotLy8gb2YgQXVkaW9TdHJlYW1JbnRlcmZhY2UuCi1j
bGFzcyBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkIDogcHVibGljIHRlc3Q6Ok1vY2tBdWRpb1Ry
YW5zcG9ydCB7Ci0gcHVibGljOgotICBleHBsaWNpdCBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lk
KGludCB0eXBlKQotICAgICAgOiBudW1fY2FsbGJhY2tzXygwKSwKLSAgICAgICAgdHlwZV8odHlw
ZSksCi0gICAgICAgIHBsYXlfY291bnRfKDApLAotICAgICAgICByZWNfY291bnRfKDApLAotICAg
ICAgICBhdWRpb19zdHJlYW1fKG51bGxwdHIpIHt9Ci0KLSAgdmlydHVhbCB+TW9ja0F1ZGlvVHJh
bnNwb3J0QW5kcm9pZCgpIHt9Ci0KLSAgLy8gU2V0IGRlZmF1bHQgYWN0aW9ucyBvZiB0aGUgbW9j
ayBvYmplY3QuIFdlIGFyZSBkZWxlZ2F0aW5nIHRvIGZha2UKLSAgLy8gaW1wbGVtZW50YXRpb25z
IChvZiBBdWRpb1N0cmVhbUludGVyZmFjZSkgaGVyZS4KLSAgdm9pZCBIYW5kbGVDYWxsYmFja3Mo
RXZlbnRXcmFwcGVyKiB0ZXN0X2lzX2RvbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIEF1ZGlv
U3RyZWFtSW50ZXJmYWNlKiBhdWRpb19zdHJlYW0sCi0gICAgICAgICAgICAgICAgICAgICAgIGlu
dCBudW1fY2FsbGJhY2tzKSB7Ci0gICAgdGVzdF9pc19kb25lXyA9IHRlc3RfaXNfZG9uZTsKLSAg
ICBhdWRpb19zdHJlYW1fID0gYXVkaW9fc3RyZWFtOwotICAgIG51bV9jYWxsYmFja3NfID0gbnVt
X2NhbGxiYWNrczsKLSAgICBpZiAocGxheV9tb2RlKCkpIHsKLSAgICAgIE9OX0NBTEwoKnRoaXMs
IE5lZWRNb3JlUGxheURhdGEoXywgXywgXywgXywgXywgXywgXywgXykpCi0gICAgICAgICAgLldp
bGxCeURlZmF1bHQoCi0gICAgICAgICAgICAgIEludm9rZSh0aGlzLCAmTW9ja0F1ZGlvVHJhbnNw
b3J0QW5kcm9pZDo6UmVhbE5lZWRNb3JlUGxheURhdGEpKTsKLSAgICB9Ci0gICAgaWYgKHJlY19t
b2RlKCkpIHsKLSAgICAgIE9OX0NBTEwoKnRoaXMsIFJlY29yZGVkRGF0YUlzQXZhaWxhYmxlKF8s
IF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8pKQotICAgICAgICAgIC5XaWxsQnlEZWZhdWx0KElu
dm9rZSgKLSAgICAgICAgICAgICAgdGhpcywgJk1vY2tBdWRpb1RyYW5zcG9ydEFuZHJvaWQ6OlJl
YWxSZWNvcmRlZERhdGFJc0F2YWlsYWJsZSkpOwotICAgIH0KLSAgfQotCi0gIGludDMyX3QgUmVh
bFJlY29yZGVkRGF0YUlzQXZhaWxhYmxlKGNvbnN0IHZvaWQqIGF1ZGlvU2FtcGxlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG5TYW1wbGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbkJ5dGVz
UGVyU2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
aXplX3QgbkNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB1aW50MzJfdCBzYW1wbGVzUGVyU2VjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCB1aW50MzJfdCB0b3RhbERlbGF5TVMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludDMyX3QgY2xvY2tEcmlmdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgY3VycmVudE1pY0xl
dmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib29sIGtl
eVByZXNzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
JiBuZXdNaWNMZXZlbCkgewotICAgIEVYUEVDVF9UUlVFKHJlY19tb2RlKCkpIDw8ICJObyB0ZXN0
IGlzIGV4cGVjdGluZyB0aGVzZSBjYWxsYmFja3MuIjsKLSAgICByZWNfY291bnRfKys7Ci0gICAg
Ly8gUHJvY2VzcyB0aGUgcmVjb3JkZWQgYXVkaW8gc3RyZWFtIGlmIGFuIEF1ZGlvU3RyZWFtSW50
ZXJmYWNlCi0gICAgLy8gaW1wbGVtZW50YXRpb24gZXhpc3RzLgotICAgIGlmIChhdWRpb19zdHJl
YW1fKSB7Ci0gICAgICBhdWRpb19zdHJlYW1fLT5Xcml0ZShhdWRpb1NhbXBsZXMsIG5TYW1wbGVz
KTsKLSAgICB9Ci0gICAgaWYgKFJlY2VpdmVkRW5vdWdoQ2FsbGJhY2tzKCkpIHsKLSAgICAgIHRl
c3RfaXNfZG9uZV8tPlNldCgpOwotICAgIH0KLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMy
X3QgUmVhbE5lZWRNb3JlUGxheURhdGEoY29uc3Qgc2l6ZV90IG5TYW1wbGVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuQnl0ZXNQZXJTYW1wbGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IG5DaGFubmVscywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50MzJfdCBzYW1wbGVzUGVyU2VjLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGF1ZGlvU2FtcGxlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QmIG5TYW1wbGVzT3V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QqIGVsYXBzZWRfdGltZV9tcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90KiBudHBfdGltZV9tcykgewotICAgIEVYUEVD
VF9UUlVFKHBsYXlfbW9kZSgpKSA8PCAiTm8gdGVzdCBpcyBleHBlY3RpbmcgdGhlc2UgY2FsbGJh
Y2tzLiI7Ci0gICAgcGxheV9jb3VudF8rKzsKLSAgICBuU2FtcGxlc091dCA9IG5TYW1wbGVzOwot
ICAgIC8vIFJlYWQgKHBvc3NpYmx5IHByb2Nlc3NlZCkgYXVkaW8gc3RyZWFtIHNhbXBsZXMgdG8g
YmUgcGxheWVkIG91dCBpZiBhbgotICAgIC8vIEF1ZGlvU3RyZWFtSW50ZXJmYWNlIGltcGxlbWVu
dGF0aW9uIGV4aXN0cy4KLSAgICBpZiAoYXVkaW9fc3RyZWFtXykgewotICAgICAgYXVkaW9fc3Ry
ZWFtXy0+UmVhZChhdWRpb1NhbXBsZXMsIG5TYW1wbGVzKTsKLSAgICB9Ci0gICAgaWYgKFJlY2Vp
dmVkRW5vdWdoQ2FsbGJhY2tzKCkpIHsKLSAgICAgIHRlc3RfaXNfZG9uZV8tPlNldCgpOwotICAg
IH0KLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGJvb2wgUmVjZWl2ZWRFbm91Z2hDYWxsYmFja3Mo
KSB7Ci0gICAgYm9vbCByZWNvcmRpbmdfZG9uZSA9IGZhbHNlOwotICAgIGlmIChyZWNfbW9kZSgp
KQotICAgICAgcmVjb3JkaW5nX2RvbmUgPSByZWNfY291bnRfID49IG51bV9jYWxsYmFja3NfOwot
ICAgIGVsc2UKLSAgICAgIHJlY29yZGluZ19kb25lID0gdHJ1ZTsKLQotICAgIGJvb2wgcGxheW91
dF9kb25lID0gZmFsc2U7Ci0gICAgaWYgKHBsYXlfbW9kZSgpKQotICAgICAgcGxheW91dF9kb25l
ID0gcGxheV9jb3VudF8gPj0gbnVtX2NhbGxiYWNrc187Ci0gICAgZWxzZQotICAgICAgcGxheW91
dF9kb25lID0gdHJ1ZTsKLQotICAgIHJldHVybiByZWNvcmRpbmdfZG9uZSAmJiBwbGF5b3V0X2Rv
bmU7Ci0gIH0KLQotICBib29sIHBsYXlfbW9kZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfICYga1Bs
YXlvdXQ7IH0KLSAgYm9vbCByZWNfbW9kZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGVfICYga1JlY29y
ZGluZzsgfQotCi0gcHJpdmF0ZToKLSAgRXZlbnRXcmFwcGVyKiB0ZXN0X2lzX2RvbmVfOwotICBz
aXplX3QgbnVtX2NhbGxiYWNrc187Ci0gIGludCB0eXBlXzsKLSAgc2l6ZV90IHBsYXlfY291bnRf
OwotICBzaXplX3QgcmVjX2NvdW50XzsKLSAgQXVkaW9TdHJlYW1JbnRlcmZhY2UqIGF1ZGlvX3N0
cmVhbV87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxMYXRlbmN5TWVhc3VyaW5nQXVkaW9TdHJlYW0+IGxh
dGVuY3lfYXVkaW9fc3RyZWFtXzsKLX07Ci0KLS8vIEF1ZGlvRGV2aWNlVGVzdCB0ZXN0IGZpeHR1
cmUuCi1jbGFzcyBBdWRpb0RldmljZVRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBw
cm90ZWN0ZWQ6Ci0gIEF1ZGlvRGV2aWNlVGVzdCgpCi0gICAgICA6IHRlc3RfaXNfZG9uZV8oRXZl
bnRXcmFwcGVyOjpDcmVhdGUoKSkgewotICAgIC8vIE9uZS10aW1lIGluaXRpYWxpemF0aW9uIG9m
IEpWTSBhbmQgYXBwbGljYXRpb24gY29udGV4dC4gRW5zdXJlcyB0aGF0IHdlCi0gICAgLy8gY2Fu
IGRvIGNhbGxzIGJldHdlZW4gQysrIGFuZCBKYXZhLiBJbml0aWFsaXplcyBib3RoIEphdmEgYW5k
IE9wZW5TTCBFUwotICAgIC8vIGltcGxlbWVudGF0aW9ucy4KLSAgICB3ZWJydGM6OmF1ZGlvZGV2
aWNlbW9kdWxlOjpFbnN1cmVJbml0aWFsaXplZCgpOwotICAgIC8vIENyZWF0ZXMgYW4gYXVkaW8g
ZGV2aWNlIHVzaW5nIGEgZGVmYXVsdCBhdWRpbyBsYXllci4KLSAgICBhdWRpb19kZXZpY2VfID0g
Q3JlYXRlQXVkaW9EZXZpY2UoQXVkaW9EZXZpY2VNb2R1bGU6OmtQbGF0Zm9ybURlZmF1bHRBdWRp
byk7Ci0gICAgRVhQRUNUX05FKGF1ZGlvX2RldmljZV8uZ2V0KCksIG51bGxwdHIpOwotICAgIEVY
UEVDVF9FUSgwLCBhdWRpb19kZXZpY2VfLT5Jbml0KCkpOwotICAgIHBsYXlvdXRfcGFyYW1ldGVy
c18gPSBhdWRpb19tYW5hZ2VyKCktPkdldFBsYXlvdXRBdWRpb1BhcmFtZXRlcnMoKTsKLSAgICBy
ZWNvcmRfcGFyYW1ldGVyc18gPSBhdWRpb19tYW5hZ2VyKCktPkdldFJlY29yZEF1ZGlvUGFyYW1l
dGVycygpOwotICAgIGJ1aWxkX2luZm9fLnJlc2V0KG5ldyBCdWlsZEluZm8oKSk7Ci0gIH0KLSAg
dmlydHVhbCB+QXVkaW9EZXZpY2VUZXN0KCkgewotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZp
Y2VfLT5UZXJtaW5hdGUoKSk7Ci0gIH0KLQotICBpbnQgcGxheW91dF9zYW1wbGVfcmF0ZSgpIGNv
bnN0IHsKLSAgICByZXR1cm4gcGxheW91dF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpOwotICB9
Ci0gIGludCByZWNvcmRfc2FtcGxlX3JhdGUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHJlY29yZF9w
YXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpOwotICB9Ci0gIHNpemVfdCBwbGF5b3V0X2NoYW5uZWxz
KCkgY29uc3QgewotICAgIHJldHVybiBwbGF5b3V0X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7Ci0g
IH0KLSAgc2l6ZV90IHJlY29yZF9jaGFubmVscygpIGNvbnN0IHsKLSAgICByZXR1cm4gcmVjb3Jk
X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7Ci0gIH0KLSAgc2l6ZV90IHBsYXlvdXRfZnJhbWVzX3Bl
cl8xMG1zX2J1ZmZlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gcGxheW91dF9wYXJhbWV0ZXJzXy5m
cmFtZXNfcGVyXzEwbXNfYnVmZmVyKCk7Ci0gIH0KLSAgc2l6ZV90IHJlY29yZF9mcmFtZXNfcGVy
XzEwbXNfYnVmZmVyKCkgY29uc3QgewotICAgIHJldHVybiByZWNvcmRfcGFyYW1ldGVyc18uZnJh
bWVzX3Blcl8xMG1zX2J1ZmZlcigpOwotICB9Ci0KLSAgaW50IHRvdGFsX2RlbGF5X21zKCkgY29u
c3QgewotICAgIHJldHVybiBhdWRpb19tYW5hZ2VyKCktPkdldERlbGF5RXN0aW1hdGVJbk1pbGxp
c2Vjb25kcygpOwotICB9Ci0KLSAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9kdWxl
PiBhdWRpb19kZXZpY2UoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGF1ZGlvX2RldmljZV87Ci0gIH0K
LQotICBBdWRpb0RldmljZU1vZHVsZUltcGwqIGF1ZGlvX2RldmljZV9pbXBsKCkgY29uc3Qgewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxBdWRpb0RldmljZU1vZHVsZUltcGwqPihhdWRpb19kZXZp
Y2VfLmdldCgpKTsKLSAgfQotCi0gIEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcigpIGNvbnN0
IHsKLSAgICByZXR1cm4gYXVkaW9fZGV2aWNlX2ltcGwoKS0+R2V0QW5kcm9pZEF1ZGlvTWFuYWdl
ckZvclRlc3QoKTsKLSAgfQotCi0gIEF1ZGlvTWFuYWdlciogR2V0QXVkaW9NYW5hZ2VyKEF1ZGlv
RGV2aWNlTW9kdWxlKiBhZG0pIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9E
ZXZpY2VNb2R1bGVJbXBsKj4oYWRtKS0+Ci0gICAgICAgIEdldEFuZHJvaWRBdWRpb01hbmFnZXJG
b3JUZXN0KCk7Ci0gIH0KLQotICBBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9fZGV2aWNlX2J1ZmZl
cigpIGNvbnN0IHsKLSAgICByZXR1cm4gYXVkaW9fZGV2aWNlX2ltcGwoKS0+R2V0QXVkaW9EZXZp
Y2VCdWZmZXIoKTsKLSAgfQotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVs
ZT4gQ3JlYXRlQXVkaW9EZXZpY2UoCi0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXll
ciBhdWRpb19sYXllcikgewotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVs
ZT4gbW9kdWxlKAotICAgICAgICBBdWRpb0RldmljZU1vZHVsZTo6Q3JlYXRlKDAsIGF1ZGlvX2xh
eWVyKSk7Ci0gICAgcmV0dXJuIG1vZHVsZTsKLSAgfQotCi0gIC8vIFJldHVybnMgZmlsZSBuYW1l
IHJlbGF0aXZlIHRvIHRoZSByZXNvdXJjZSByb290IGdpdmVuIGEgc2FtcGxlIHJhdGUuCi0gIHN0
ZDo6c3RyaW5nIEdldEZpbGVOYW1lKGludCBzYW1wbGVfcmF0ZSkgewotICAgIEVYUEVDVF9UUlVF
KHNhbXBsZV9yYXRlID09IDQ4MDAwIHx8IHNhbXBsZV9yYXRlID09IDQ0MTAwKTsKLSAgICBjaGFy
IGZuYW1lWzY0XTsKLSAgICBzbnByaW50ZihmbmFtZSwKLSAgICAgICAgICAgICBzaXplb2YoZm5h
bWUpLAotICAgICAgICAgICAgICJhdWRpb19kZXZpY2UvYXVkaW9fc2hvcnQlZCIsCi0gICAgICAg
ICAgICAgc2FtcGxlX3JhdGUgLyAxMDAwKTsKLSAgICBzdGQ6OnN0cmluZyBmaWxlX25hbWUod2Vi
cnRjOjp0ZXN0OjpSZXNvdXJjZVBhdGgoZm5hbWUsICJwY20iKSk7Ci0gICAgRVhQRUNUX1RSVUUo
dGVzdDo6RmlsZUV4aXN0cyhmaWxlX25hbWUpKTsKLSNpZmRlZiBFTkFCTEVfUFJJTlRGCi0gICAg
UFJJTlQoImZpbGUgbmFtZTogJXNcbiIsIGZpbGVfbmFtZS5jX3N0cigpKTsKLSAgICBjb25zdCBz
aXplX3QgYnl0ZXMgPSB0ZXN0OjpHZXRGaWxlU2l6ZShmaWxlX25hbWUpOwotICAgIFBSSU5UKCJm
aWxlIHNpemU6ICUiIFBSSXVTICIgW2J5dGVzXVxuIiwgYnl0ZXMpOwotICAgIFBSSU5UKCJmaWxl
IHNpemU6ICUiIFBSSXVTICIgW3NhbXBsZXNdXG4iLCBieXRlcyAvIGtCeXRlc1BlclNhbXBsZSk7
Ci0gICAgY29uc3QgaW50IHNlY29uZHMgPQotICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVz
IC8gKHNhbXBsZV9yYXRlICoga0J5dGVzUGVyU2FtcGxlKSk7Ci0gICAgUFJJTlQoImZpbGUgc2l6
ZTogJWQgW3NlY3NdXG4iLCBzZWNvbmRzKTsKLSAgICBQUklOVCgiZmlsZSBzaXplOiAlIiBQUkl1
UyAiIFtjYWxsYmFja3NdXG4iLAotICAgICAgICAgIHNlY29uZHMgKiBrTnVtQ2FsbGJhY2tzUGVy
U2Vjb25kKTsKLSNlbmRpZgotICAgIHJldHVybiBmaWxlX25hbWU7Ci0gIH0KLQotICBBdWRpb0Rl
dmljZU1vZHVsZTo6QXVkaW9MYXllciBHZXRBY3RpdmVBdWRpb0xheWVyKCkgY29uc3QgewotICAg
IEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGF1ZGlvX2xheWVyOwotICAgIEVYUEVDVF9F
USgwLCBhdWRpb19kZXZpY2UoKS0+QWN0aXZlQXVkaW9MYXllcigmYXVkaW9fbGF5ZXIpKTsKLSAg
ICByZXR1cm4gYXVkaW9fbGF5ZXI7Ci0gIH0KLQotICBpbnQgVGVzdERlbGF5T25BdWRpb0xheWVy
KAotICAgICAgY29uc3QgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXImIGxheWVyX3RvX3Rl
c3QpIHsKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZXZpY2VNb2R1bGU+IGF1ZGlvX2Rl
dmljZTsKLSAgICBhdWRpb19kZXZpY2UgPSBDcmVhdGVBdWRpb0RldmljZShsYXllcl90b190ZXN0
KTsKLSAgICBFWFBFQ1RfTkUoYXVkaW9fZGV2aWNlLmdldCgpLCBudWxscHRyKTsKLSAgICBBdWRp
b01hbmFnZXIqIGF1ZGlvX21hbmFnZXIgPSBHZXRBdWRpb01hbmFnZXIoYXVkaW9fZGV2aWNlLmdl
dCgpKTsKLSAgICBFWFBFQ1RfTkUoYXVkaW9fbWFuYWdlciwgbnVsbHB0cik7Ci0gICAgcmV0dXJu
IGF1ZGlvX21hbmFnZXItPkdldERlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcygpOwotICB9Ci0K
LSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgVGVzdEFjdGl2ZUF1ZGlvTGF5ZXIoCi0g
ICAgICBjb25zdCBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciYgbGF5ZXJfdG9fdGVzdCkg
ewotICAgIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRpb0RldmljZU1vZHVsZT4gYXVkaW9fZGV2aWNl
OwotICAgIGF1ZGlvX2RldmljZSA9IENyZWF0ZUF1ZGlvRGV2aWNlKGxheWVyX3RvX3Rlc3QpOwot
ICAgIEVYUEVDVF9ORShhdWRpb19kZXZpY2UuZ2V0KCksIG51bGxwdHIpOwotICAgIEF1ZGlvRGV2
aWNlTW9kdWxlOjpBdWRpb0xheWVyIGFjdGl2ZTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2
aWNlLT5BY3RpdmVBdWRpb0xheWVyKCZhY3RpdmUpKTsKLSAgICByZXR1cm4gYWN0aXZlOwotICB9
Ci0KLSAgYm9vbCBEaXNhYmxlVGVzdEZvclRoaXNEZXZpY2UoY29uc3Qgc3RkOjpzdHJpbmcmIG1v
ZGVsKSB7Ci0gICAgcmV0dXJuIChidWlsZF9pbmZvXy0+R2V0RGV2aWNlTW9kZWwoKSA9PSBtb2Rl
bCk7Ci0gIH0KLQotICAvLyBWb2x1bWUgY29udHJvbCBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0
ZWQgZm9yIHRoZSBKYXZhIG91dHB1dCBhdWRpbyBsYXllci4KLSAgLy8gRm9yIE9wZW5TTCBFUywg
dGhlIGludGVybmFsIHN0cmVhbSB2b2x1bWUgaXMgYWx3YXlzIG9uIG1heCBsZXZlbCBhbmQgdGhl
cmUKLSAgLy8gaXMgbm8gbmVlZCBmb3IgdGhpcyB0ZXN0IHRvIHNldCBpdCB0byBtYXguCi0gIGJv
b2wgQXVkaW9MYXllclN1cHBvcnRzVm9sdW1lQ29udHJvbCgpIGNvbnN0IHsKLSAgICByZXR1cm4g
R2V0QWN0aXZlQXVkaW9MYXllcigpID09IEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFB
dWRpbzsKLSAgfQotCi0gIHZvaWQgU2V0TWF4UGxheW91dFZvbHVtZSgpIHsKLSAgICBpZiAoIUF1
ZGlvTGF5ZXJTdXBwb3J0c1ZvbHVtZUNvbnRyb2woKSkKLSAgICAgIHJldHVybjsKLSAgICB1aW50
MzJfdCBtYXhfdm9sdW1lOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+TWF4U3Bl
YWtlclZvbHVtZSgmbWF4X3ZvbHVtZSkpOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2Uo
KS0+U2V0U3BlYWtlclZvbHVtZShtYXhfdm9sdW1lKSk7Ci0gIH0KLQotICB2b2lkIERpc2FibGVC
dWlsdEluQUVDSWZBdmFpbGFibGUoKSB7Ci0gICAgaWYgKGF1ZGlvX2RldmljZSgpLT5CdWlsdElu
QUVDSXNBdmFpbGFibGUoKSkgewotICAgICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5F
bmFibGVCdWlsdEluQUVDKGZhbHNlKSk7Ci0gICAgfQotICB9Ci0KLSAgdm9pZCBTdGFydFBsYXlv
dXQoKSB7Ci0gICAgRVhQRUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5QbGF5b3V0SXNJbml0aWFs
aXplZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPlBsYXlpbmcoKSk7Ci0g
ICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5Jbml0UGxheW91dCgpKTsKLSAgICBFWFBF
Q1RfVFJVRShhdWRpb19kZXZpY2UoKS0+UGxheW91dElzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgRVhQ
RUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TdGFydFBsYXlvdXQoKSk7Ci0gICAgRVhQRUNUX1RS
VUUoYXVkaW9fZGV2aWNlKCktPlBsYXlpbmcoKSk7Ci0gIH0KLQotICB2b2lkIFN0b3BQbGF5b3V0
KCkgewotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+U3RvcFBsYXlvdXQoKSk7Ci0g
ICAgRVhQRUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5QbGF5aW5nKCkpOwotICAgIEVYUEVDVF9G
QUxTRShhdWRpb19kZXZpY2UoKS0+UGxheW91dElzSW5pdGlhbGl6ZWQoKSk7Ci0gIH0KLQotICB2
b2lkIFN0YXJ0UmVjb3JkaW5nKCkgewotICAgIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+
UmVjb3JkaW5nSXNJbml0aWFsaXplZCgpKTsKLSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNl
KCktPlJlY29yZGluZygpKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPkluaXRS
ZWNvcmRpbmcoKSk7Ci0gICAgRVhQRUNUX1RSVUUoYXVkaW9fZGV2aWNlKCktPlJlY29yZGluZ0lz
SW5pdGlhbGl6ZWQoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TdGFydFJl
Y29yZGluZygpKTsKLSAgICBFWFBFQ1RfVFJVRShhdWRpb19kZXZpY2UoKS0+UmVjb3JkaW5nKCkp
OwotICB9Ci0KLSAgdm9pZCBTdG9wUmVjb3JkaW5nKCkgewotICAgIEVYUEVDVF9FUSgwLCBhdWRp
b19kZXZpY2UoKS0+U3RvcFJlY29yZGluZygpKTsKLSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2
aWNlKCktPlJlY29yZGluZygpKTsKLSAgfQotCi0gIGludCBHZXRNYXhTcGVha2VyVm9sdW1lKCkg
Y29uc3QgewotICAgIHVpbnQzMl90IG1heF92b2x1bWUoMCk7Ci0gICAgRVhQRUNUX0VRKDAsIGF1
ZGlvX2RldmljZSgpLT5NYXhTcGVha2VyVm9sdW1lKCZtYXhfdm9sdW1lKSk7Ci0gICAgcmV0dXJu
IG1heF92b2x1bWU7Ci0gIH0KLQotICBpbnQgR2V0TWluU3BlYWtlclZvbHVtZSgpIGNvbnN0IHsK
LSAgICB1aW50MzJfdCBtaW5fdm9sdW1lKDApOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZp
Y2UoKS0+TWluU3BlYWtlclZvbHVtZSgmbWluX3ZvbHVtZSkpOwotICAgIHJldHVybiBtaW5fdm9s
dW1lOwotICB9Ci0KLSAgaW50IEdldFNwZWFrZXJWb2x1bWUoKSBjb25zdCB7Ci0gICAgdWludDMy
X3Qgdm9sdW1lKDApOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+U3BlYWtlclZv
bHVtZSgmdm9sdW1lKSk7Ci0gICAgcmV0dXJuIHZvbHVtZTsKLSAgfQotCi0gIHN0ZDo6dW5pcXVl
X3B0cjxFdmVudFdyYXBwZXI+IHRlc3RfaXNfZG9uZV87Ci0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxB
dWRpb0RldmljZU1vZHVsZT4gYXVkaW9fZGV2aWNlXzsKLSAgQXVkaW9QYXJhbWV0ZXJzIHBsYXlv
dXRfcGFyYW1ldGVyc187Ci0gIEF1ZGlvUGFyYW1ldGVycyByZWNvcmRfcGFyYW1ldGVyc187Ci0g
IHN0ZDo6dW5pcXVlX3B0cjxCdWlsZEluZm8+IGJ1aWxkX2luZm9fOwotfTsKLQotVEVTVF9GKEF1
ZGlvRGV2aWNlVGVzdCwgQ29uc3RydWN0RGVzdHJ1Y3QpIHsKLSAgLy8gVXNpbmcgdGhlIHRlc3Qg
Zml4dHVyZSB0byBjcmVhdGUgYW5kIGRlc3RydWN0IHRoZSBhdWRpbyBkZXZpY2UgbW9kdWxlLgot
fQotCi0vLyBXZSBhbHdheXMgYXNrIGZvciBhIGRlZmF1bHQgYXVkaW8gbGF5ZXIgd2hlbiB0aGUg
QURNIGlzIGNvbnN0cnVjdGVkLiBCdXQgdGhlCi0vLyBBRE0gd2lsbCB0aGVuIGludGVybmFsbHkg
c2V0IHRoZSBiZXN0IHN1aXRhYmxlIGNvbWJpbmF0aW9uIG9mIGF1ZGlvIGxheWVycywKLS8vIGZv
ciBpbnB1dCBhbmQgb3V0cHV0IGJhc2VkIG9uIGlmIGxvdy1sYXRlbmN5IG91dHB1dCBhbmQvb3Ig
aW5wdXQgYXVkaW8gaW4KLS8vIGNvbWJpbmF0aW9uIHdpdGggT3BlblNMIEVTIGlzIHN1cHBvcnRl
ZCBvciBub3QuIFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgdGhlCi0vLyBjb3JyZWN0IHNlbGVjdGlv
biBpcyBkb25lLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgVmVyaWZ5RGVmYXVsdEF1ZGlvTGF5
ZXIpIHsKLSAgY29uc3QgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXIg
PSBHZXRBY3RpdmVBdWRpb0xheWVyKCk7Ci0gIGJvb2wgbG93X2xhdGVuY3lfb3V0cHV0ID0gYXVk
aW9fbWFuYWdlcigpLT5Jc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCk7Ci0gIGJvb2wgbG93
X2xhdGVuY3lfaW5wdXQgPSBhdWRpb19tYW5hZ2VyKCktPklzTG93TGF0ZW5jeVJlY29yZFN1cHBv
cnRlZCgpOwotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBleHBlY3RlZF9hdWRpb19s
YXllcjsKLSAgaWYgKGxvd19sYXRlbmN5X291dHB1dCAmJiBsb3dfbGF0ZW5jeV9pbnB1dCkgewot
ICAgIGV4cGVjdGVkX2F1ZGlvX2xheWVyID0gQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkT3Bl
blNMRVNBdWRpbzsKLSAgfSBlbHNlIGlmIChsb3dfbGF0ZW5jeV9vdXRwdXQgJiYgIWxvd19sYXRl
bmN5X2lucHV0KSB7Ci0gICAgZXhwZWN0ZWRfYXVkaW9fbGF5ZXIgPQotICAgICAgICBBdWRpb0Rl
dmljZU1vZHVsZTo6a0FuZHJvaWRKYXZhSW5wdXRBbmRPcGVuU0xFU091dHB1dEF1ZGlvOwotICB9
IGVsc2UgewotICAgIGV4cGVjdGVkX2F1ZGlvX2xheWVyID0gQXVkaW9EZXZpY2VNb2R1bGU6OmtB
bmRyb2lkSmF2YUF1ZGlvOwotICB9Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9hdWRpb19sYXllciwg
YXVkaW9fbGF5ZXIpOwotfQotCi0vLyBWZXJpZnkgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBleHBs
aWNpdGx5IGNyZWF0ZSB0aGUgdHdvIHR5cGVzIG9mIHN1cHBvcnRlZAotLy8gQURNcy4gVGhlc2Ug
dHdvIHRlc3RzIG92ZXJyaWRlcyB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gb2YgbmF0aXZlIGF1ZGlv
IGxheWVyCi0vLyBieSBpZ25vcmluZyBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGxvdy1sYXRlbmN5
IG91dHB1dCBvciBub3QuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBDb3JyZWN0QXVkaW9MYXll
cklzVXNlZEZvckNvbWJpbmVkSmF2YU9wZW5TTENvbWJvKSB7Ci0gIEF1ZGlvRGV2aWNlTW9kdWxl
OjpBdWRpb0xheWVyIGV4cGVjdGVkX2xheWVyID0KLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjpr
QW5kcm9pZEphdmFJbnB1dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW87Ci0gIEF1ZGlvRGV2aWNlTW9k
dWxlOjpBdWRpb0xheWVyIGFjdGl2ZV9sYXllciA9IFRlc3RBY3RpdmVBdWRpb0xheWVyKAotICAg
ICAgZXhwZWN0ZWRfbGF5ZXIpOwotICBFWFBFQ1RfRVEoZXhwZWN0ZWRfbGF5ZXIsIGFjdGl2ZV9s
YXllcik7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIENvcnJlY3RBdWRpb0xheWVySXNV
c2VkRm9ySmF2YUluQm90aERpcmVjdGlvbnMpIHsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlv
TGF5ZXIgZXhwZWN0ZWRfbGF5ZXIgPQotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lk
SmF2YUF1ZGlvOwotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhY3RpdmVfbGF5ZXIg
PSBUZXN0QWN0aXZlQXVkaW9MYXllcigKLSAgICAgIGV4cGVjdGVkX2xheWVyKTsKLSAgRVhQRUNU
X0VRKGV4cGVjdGVkX2xheWVyLCBhY3RpdmVfbGF5ZXIpOwotfQotCi1URVNUX0YoQXVkaW9EZXZp
Y2VUZXN0LCBDb3JyZWN0QXVkaW9MYXllcklzVXNlZEZvck9wZW5TTEluQm90aERpcmVjdGlvbnMp
IHsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgZXhwZWN0ZWRfbGF5ZXIgPQotICAg
ICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkT3BlblNMRVNBdWRpbzsKLSAgQXVkaW9EZXZp
Y2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYWN0aXZlX2xheWVyID0KLSAgICAgIFRlc3RBY3RpdmVBdWRp
b0xheWVyKGV4cGVjdGVkX2xheWVyKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX2xheWVyLCBhY3Rp
dmVfbGF5ZXIpOwotfQotCi0vLyBUaGUgQW5kcm9pZCBBRE0gc3VwcG9ydHMgdHdvIGRpZmZlcmVu
dCBkZWxheSByZXBvcnRpbmcgbW9kZXMuIE9uZSBmb3IgdGhlCi0vLyBsb3ctbGF0ZW5jeSBvdXRw
dXQgcGF0aCAoaW4gY29tYmluYXRpb24gd2l0aCBPcGVuU0wgRVMpLCBhbmQgb25lIGZvciB0aGUK
LS8vIGhpZ2gtbGF0ZW5jeSBvdXRwdXQgcGF0aCAoSmF2YSBiYWNrZW5kcyBpbiBib3RoIGRpcmVj
dGlvbnMpLiBUaGVzZSB0d28gdGVzdHMKLS8vIHZlcmlmaWVzIHRoYXQgdGhlIGF1ZGlvIG1hbmFn
ZXIgcmVwb3J0cyBjb3JyZWN0IGRlbGF5IGVzdGltYXRlIGdpdmVuIHRoZQotLy8gc2VsZWN0ZWQg
YXVkaW8gbGF5ZXIuIE5vdGUgdGhhdCwgdGhpcyBkZWxheSBlc3RpbWF0ZSB3aWxsIG9ubHkgYmUg
dXRpbGl6ZWQKLS8vIGlmIHRoZSBIVyBBRUMgaXMgZGlzYWJsZWQuCi1URVNUX0YoQXVkaW9EZXZp
Y2VUZXN0LCBVc2VzQ29ycmVjdERlbGF5RXN0aW1hdGVGb3JIaWdoTGF0ZW5jeU91dHB1dFBhdGgp
IHsKLSAgRVhQRUNUX0VRKGtIaWdoTGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29u
ZHMsCi0gICAgICAgICAgICBUZXN0RGVsYXlPbkF1ZGlvTGF5ZXIoQXVkaW9EZXZpY2VNb2R1bGU6
OmtBbmRyb2lkSmF2YUF1ZGlvKSk7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFVzZXND
b3JyZWN0RGVsYXlFc3RpbWF0ZUZvckxvd0xhdGVuY3lPdXRwdXRQYXRoKSB7Ci0gIEVYUEVDVF9F
UShrTG93TGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMsCi0gICAgICAgICAg
ICBUZXN0RGVsYXlPbkF1ZGlvTGF5ZXIoCi0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJv
aWRKYXZhSW5wdXRBbmRPcGVuU0xFU091dHB1dEF1ZGlvKSk7Ci19Ci0KLS8vIEVuc3VyZSB0aGF0
IHRoZSBBRE0gaW50ZXJuYWwgYXVkaW8gZGV2aWNlIGJ1ZmZlciBpcyBjb25maWd1cmVkIHRvIHVz
ZSB0aGUKLS8vIGNvcnJlY3Qgc2V0IG9mIHBhcmFtZXRlcnMuCi1URVNUX0YoQXVkaW9EZXZpY2VU
ZXN0LCBWZXJpZnlBdWRpb0RldmljZUJ1ZmZlclBhcmFtZXRlcnMpIHsKLSAgRVhQRUNUX0VRKHBs
YXlvdXRfcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKSwKLSAgICAgICAgICAgIGF1ZGlvX2Rldmlj
ZV9idWZmZXIoKS0+UGxheW91dFNhbXBsZVJhdGUoKSk7Ci0gIEVYUEVDVF9FUShyZWNvcmRfcGFy
YW1ldGVyc18uc2FtcGxlX3JhdGUoKSwKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZV9idWZmZXIo
KS0+UmVjb3JkaW5nU2FtcGxlUmF0ZSgpKTsKLSAgRVhQRUNUX0VRKHBsYXlvdXRfcGFyYW1ldGVy
c18uY2hhbm5lbHMoKSwKLSAgICAgICAgICAgIGF1ZGlvX2RldmljZV9idWZmZXIoKS0+UGxheW91
dENoYW5uZWxzKCkpOwotICBFWFBFQ1RfRVEocmVjb3JkX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCks
Ci0gICAgICAgICAgICBhdWRpb19kZXZpY2VfYnVmZmVyKCktPlJlY29yZGluZ0NoYW5uZWxzKCkp
OwotfQotCi0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIEluaXRUZXJtaW5hdGUpIHsKLSAgLy8g
SW5pdGlhbGl6YXRpb24gaXMgcGFydCBvZiB0aGUgdGVzdCBmaXh0dXJlLgotICBFWFBFQ1RfVFJV
RShhdWRpb19kZXZpY2UoKS0+SW5pdGlhbGl6ZWQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19k
ZXZpY2UoKS0+VGVybWluYXRlKCkpOwotICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPklu
aXRpYWxpemVkKCkpOwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBEZXZpY2VzKSB7Ci0g
IC8vIERldmljZSBlbnVtZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkLiBWZXJpZnkgZml4ZWQgdmFs
dWVzIG9ubHkuCi0gIEVYUEVDVF9FUSgxLCBhdWRpb19kZXZpY2UoKS0+UGxheW91dERldmljZXMo
KSk7Ci0gIEVYUEVDVF9FUSgxLCBhdWRpb19kZXZpY2UoKS0+UmVjb3JkaW5nRGV2aWNlcygpKTsK
LX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgU3BlYWtlclZvbHVtZVNob3VsZEJlQXZhaWxh
YmxlKSB7Ci0gIC8vIFRoZSBPcGVuU0wgRVMgb3V0cHV0IGF1ZGlvIHBhdGggZG9lcyBub3Qgc3Vw
cG9ydCB2b2x1bWUgY29udHJvbC4KLSAgaWYgKCFBdWRpb0xheWVyU3VwcG9ydHNWb2x1bWVDb250
cm9sKCkpCi0gICAgcmV0dXJuOwotICBib29sIGF2YWlsYWJsZTsKLSAgRVhQRUNUX0VRKDAsIGF1
ZGlvX2RldmljZSgpLT5TcGVha2VyVm9sdW1lSXNBdmFpbGFibGUoJmF2YWlsYWJsZSkpOwotICBF
WFBFQ1RfVFJVRShhdmFpbGFibGUpOwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBNYXhT
cGVha2VyVm9sdW1lSXNQb3NpdGl2ZSkgewotICAvLyBUaGUgT3BlblNMIEVTIG91dHB1dCBhdWRp
byBwYXRoIGRvZXMgbm90IHN1cHBvcnQgdm9sdW1lIGNvbnRyb2wuCi0gIGlmICghQXVkaW9MYXll
clN1cHBvcnRzVm9sdW1lQ29udHJvbCgpKQotICAgIHJldHVybjsKLSAgU3RhcnRQbGF5b3V0KCk7
Ci0gIEVYUEVDVF9HVChHZXRNYXhTcGVha2VyVm9sdW1lKCksIDApOwotICBTdG9wUGxheW91dCgp
OwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBNaW5TcGVha2VyVm9sdW1lSXNaZXJvKSB7
Ci0gIC8vIFRoZSBPcGVuU0wgRVMgb3V0cHV0IGF1ZGlvIHBhdGggZG9lcyBub3Qgc3VwcG9ydCB2
b2x1bWUgY29udHJvbC4KLSAgaWYgKCFBdWRpb0xheWVyU3VwcG9ydHNWb2x1bWVDb250cm9sKCkp
Ci0gICAgcmV0dXJuOwotICBFWFBFQ1RfRVEoR2V0TWluU3BlYWtlclZvbHVtZSgpLCAwKTsKLX0K
LQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgRGVmYXVsdFNwZWFrZXJWb2x1bWVJc1dpdGhpbk1p
bk1heCkgewotICAvLyBUaGUgT3BlblNMIEVTIG91dHB1dCBhdWRpbyBwYXRoIGRvZXMgbm90IHN1
cHBvcnQgdm9sdW1lIGNvbnRyb2wuCi0gIGlmICghQXVkaW9MYXllclN1cHBvcnRzVm9sdW1lQ29u
dHJvbCgpKQotICAgIHJldHVybjsKLSAgY29uc3QgaW50IGRlZmF1bHRfdm9sdW1lID0gR2V0U3Bl
YWtlclZvbHVtZSgpOwotICBFWFBFQ1RfR0UoZGVmYXVsdF92b2x1bWUsIEdldE1pblNwZWFrZXJW
b2x1bWUoKSk7Ci0gIEVYUEVDVF9MRShkZWZhdWx0X3ZvbHVtZSwgR2V0TWF4U3BlYWtlclZvbHVt
ZSgpKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgU2V0U3BlYWtlclZvbHVtZUFjdHVh
bGx5U2V0c1ZvbHVtZSkgewotICAvLyBUaGUgT3BlblNMIEVTIG91dHB1dCBhdWRpbyBwYXRoIGRv
ZXMgbm90IHN1cHBvcnQgdm9sdW1lIGNvbnRyb2wuCi0gIGlmICghQXVkaW9MYXllclN1cHBvcnRz
Vm9sdW1lQ29udHJvbCgpKQotICAgIHJldHVybjsKLSAgY29uc3QgaW50IGRlZmF1bHRfdm9sdW1l
ID0gR2V0U3BlYWtlclZvbHVtZSgpOwotICBjb25zdCBpbnQgbWF4X3ZvbHVtZSA9IEdldE1heFNw
ZWFrZXJWb2x1bWUoKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TZXRTcGVha2Vy
Vm9sdW1lKG1heF92b2x1bWUpKTsKLSAgaW50IG5ld192b2x1bWUgPSBHZXRTcGVha2VyVm9sdW1l
KCk7Ci0gIEVYUEVDVF9FUShuZXdfdm9sdW1lLCBtYXhfdm9sdW1lKTsKLSAgRVhQRUNUX0VRKDAs
IGF1ZGlvX2RldmljZSgpLT5TZXRTcGVha2VyVm9sdW1lKGRlZmF1bHRfdm9sdW1lKSk7Ci19Ci0K
LS8vIFRlc3RzIHRoYXQgcGxheW91dCBjYW4gYmUgaW5pdGlhdGVkLCBzdGFydGVkIGFuZCBzdG9w
cGVkLiBObyBhdWRpbyBjYWxsYmFjawotLy8gaXMgcmVnaXN0ZXJlZCBpbiB0aGlzIHRlc3QuCi0v
LyBGbGFreSBvbiBvdXIgdHJ5Ym90cyBtYWtlcyB0aGlzIHRlc3QgdW51c2FibGUuCi0vLyBodHRw
czovL2NvZGUuZ29vZ2xlLmNvbS9wL3dlYnJ0Yy9pc3N1ZXMvZGV0YWlsP2lkPTUwNDYKLVRFU1Rf
RihBdWRpb0RldmljZVRlc3QsIERJU0FCTEVEX1N0YXJ0U3RvcFBsYXlvdXQpIHsKLSAgU3RhcnRQ
bGF5b3V0KCk7Ci0gIFN0b3BQbGF5b3V0KCk7Ci0gIFN0YXJ0UGxheW91dCgpOwotICBTdG9wUGxh
eW91dCgpOwotfQotCi0vLyBUZXN0cyB0aGF0IHJlY29yZGluZyBjYW4gYmUgaW5pdGlhdGVkLCBz
dGFydGVkIGFuZCBzdG9wcGVkLiBObyBhdWRpbyBjYWxsYmFjawotLy8gaXMgcmVnaXN0ZXJlZCBp
biB0aGlzIHRlc3QuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBTdGFydFN0b3BSZWNvcmRpbmcp
IHsKLSAgU3RhcnRSZWNvcmRpbmcoKTsKLSAgU3RvcFJlY29yZGluZygpOwotICBTdGFydFJlY29y
ZGluZygpOwotICBTdG9wUmVjb3JkaW5nKCk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGNhbGxpbmcg
U3RvcFBsYXlvdXQoKSB3aWxsIGxlYXZlIHVzIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUKLS8v
IHdoaWNoIHdpbGwgcmVxdWlyZSBhIG5ldyBjYWxsIHRvIEluaXRQbGF5b3V0KCkuIFRoaXMgdGVz
dCBkb2VzIG5vdCBjYWxsCi0vLyBTdGFydFBsYXlvdXQoKSB3aGlsZSBiZWluZyB1bmluaXRpYWxp
emVkIHNpbmNlIGRvaW5nIHNvIHdpbGwgaGl0IGEKLS8vIFJUQ19EQ0hFQ0sgYW5kIGRlYXRoIHRl
c3RzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEFuZHJvaWQuCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0
LCBTdG9wUGxheW91dFJlcXVpcmVzSW5pdFRvUmVzdGFydCkgewotICBFWFBFQ1RfRVEoMCwgYXVk
aW9fZGV2aWNlKCktPkluaXRQbGF5b3V0KCkpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNl
KCktPlN0YXJ0UGxheW91dCgpKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5TdG9w
UGxheW91dCgpKTsKLSAgRVhQRUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5QbGF5b3V0SXNJbml0
aWFsaXplZCgpKTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgY2FsbGluZyBTdG9wUmVjb3JkaW5nKCkg
d2lsbCBsZWF2ZSB1cyBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlCi0vLyB3aGljaCB3aWxsIHJl
cXVpcmUgYSBuZXcgY2FsbCB0byBJbml0UmVjb3JkaW5nKCkuIFRoaXMgdGVzdCBkb2VzIG5vdCBj
YWxsCi0vLyBTdGFydFJlY29yZGluZygpIHdoaWxlIGJlaW5nIHVuaW5pdGlhbGl6ZWQgc2luY2Ug
ZG9pbmcgc28gd2lsbCBoaXQgYQotLy8gUlRDX0RDSEVDSyBhbmQgZGVhdGggdGVzdHMgYXJlIG5v
dCBzdXBwb3J0ZWQgb24gQW5kcm9pZC4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFN0b3BSZWNv
cmRpbmdSZXF1aXJlc0luaXRUb1Jlc3RhcnQpIHsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rldmlj
ZSgpLT5Jbml0UmVjb3JkaW5nKCkpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0
YXJ0UmVjb3JkaW5nKCkpOwotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0b3BSZWNv
cmRpbmcoKSk7Ci0gIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+UmVjb3JkaW5nSXNJbml0
aWFsaXplZCgpKTsKLX0KLQotLy8gU3RhcnQgcGxheW91dCBhbmQgdmVyaWZ5IHRoYXQgdGhlIG5h
dGl2ZSBhdWRpbyBsYXllciBzdGFydHMgYXNraW5nIGZvciByZWFsCi0vLyBhdWRpbyBzYW1wbGVz
IHRvIHBsYXkgb3V0IHVzaW5nIHRoZSBOZWVkTW9yZVBsYXlEYXRhIGNhbGxiYWNrLgotVEVTVF9G
KEF1ZGlvRGV2aWNlVGVzdCwgU3RhcnRQbGF5b3V0VmVyaWZ5Q2FsbGJhY2tzKSB7Ci0gIE1vY2tB
dWRpb1RyYW5zcG9ydEFuZHJvaWQgbW9jayhrUGxheW91dCk7Ci0gIG1vY2suSGFuZGxlQ2FsbGJh
Y2tzKHRlc3RfaXNfZG9uZV8uZ2V0KCksIG51bGxwdHIsIGtOdW1DYWxsYmFja3MpOwotICBFWFBF
Q1RfQ0FMTChtb2NrLCBOZWVkTW9yZVBsYXlEYXRhKHBsYXlvdXRfZnJhbWVzX3Blcl8xMG1zX2J1
ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtCeXRlc1BlclNh
bXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGF5b3V0X2NoYW5u
ZWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxheW91dF9zYW1w
bGVfcmF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdE51bGwo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLCBfLCBfKSkKLSAgICAg
IC5UaW1lcyhBdExlYXN0KGtOdW1DYWxsYmFja3MpKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rl
dmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJhY2soJm1vY2spKTsKLSAgU3RhcnRQbGF5b3V0KCk7
Ci0gIHRlc3RfaXNfZG9uZV8tPldhaXQoa1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29uZHMpOwotICBT
dG9wUGxheW91dCgpOwotfQotCi0vLyBTdGFydCByZWNvcmRpbmcgYW5kIHZlcmlmeSB0aGF0IHRo
ZSBuYXRpdmUgYXVkaW8gbGF5ZXIgc3RhcnRzIGZlZWRpbmcgcmVhbAotLy8gYXVkaW8gc2FtcGxl
cyB2aWEgdGhlIFJlY29yZGVkRGF0YUlzQXZhaWxhYmxlIGNhbGxiYWNrLgotVEVTVF9GKEF1ZGlv
RGV2aWNlVGVzdCwgU3RhcnRSZWNvcmRpbmdWZXJpZnlDYWxsYmFja3MpIHsKLSAgTW9ja0F1ZGlv
VHJhbnNwb3J0QW5kcm9pZCBtb2NrKGtSZWNvcmRpbmcpOwotICBtb2NrLkhhbmRsZUNhbGxiYWNr
cyh0ZXN0X2lzX2RvbmVfLmdldCgpLCBudWxscHRyLCBrTnVtQ2FsbGJhY2tzKTsKLSAgRVhQRUNU
X0NBTEwobW9jaywgUmVjb3JkZWREYXRhSXNBdmFpbGFibGUoTm90TnVsbCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRfZnJhbWVzX3Blcl8xMG1z
X2J1ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
Qnl0ZXNQZXJTYW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlY29yZF9jaGFubmVscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWNvcmRfc2FtcGxlX3JhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG90YWxfZGVsYXlfbXMoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8pKQotICAgICAgLlRpbWVzKEF0TGVhc3Qoa051bUNhbGxiYWNrcykpOwotCi0gIEVYUEVD
VF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+UmVnaXN0ZXJBdWRpb0NhbGxiYWNrKCZtb2NrKSk7Ci0g
IFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIHRlc3RfaXNfZG9uZV8tPldhaXQoa1Rlc3RUaW1lT3V0SW5N
aWxsaXNlY29uZHMpOwotICBTdG9wUmVjb3JkaW5nKCk7Ci19Ci0KLQotLy8gU3RhcnQgcGxheW91
dCBhbmQgcmVjb3JkaW5nIChmdWxsLWR1cGxleCBhdWRpbykgYW5kIHZlcmlmeSB0aGF0IGF1ZGlv
IGlzCi0vLyBhY3RpdmUgaW4gYm90aCBkaXJlY3Rpb25zLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVz
dCwgU3RhcnRQbGF5b3V0QW5kUmVjb3JkaW5nVmVyaWZ5Q2FsbGJhY2tzKSB7Ci0gIE1vY2tBdWRp
b1RyYW5zcG9ydEFuZHJvaWQgbW9jayhrUGxheW91dCB8IGtSZWNvcmRpbmcpOwotICBtb2NrLkhh
bmRsZUNhbGxiYWNrcyh0ZXN0X2lzX2RvbmVfLmdldCgpLCBudWxscHRyLCAga051bUNhbGxiYWNr
cyk7Ci0gIEVYUEVDVF9DQUxMKG1vY2ssIE5lZWRNb3JlUGxheURhdGEocGxheW91dF9mcmFtZXNf
cGVyXzEwbXNfYnVmZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0J5dGVzUGVyU2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBs
YXlvdXRfY2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
bGF5b3V0X3NhbXBsZV9yYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTm90TnVsbCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8sIF8s
IF8pKQotICAgICAgLlRpbWVzKEF0TGVhc3Qoa051bUNhbGxiYWNrcykpOwotICBFWFBFQ1RfQ0FM
TChtb2NrLCBSZWNvcmRlZERhdGFJc0F2YWlsYWJsZShOb3ROdWxsKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZF9mcmFtZXNfcGVyXzEwbXNfYnVm
ZmVyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtCeXRl
c1BlclNhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjb3JkX2NoYW5uZWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlY29yZF9zYW1wbGVfcmF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0b3RhbF9kZWxheV9tcygpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XykpCi0gICAgICAuVGltZXMoQXRMZWFzdChrTnVtQ2FsbGJhY2tzKSk7Ci0gIEVYUEVDVF9FUSgw
LCBhdWRpb19kZXZpY2UoKS0+UmVnaXN0ZXJBdWRpb0NhbGxiYWNrKCZtb2NrKSk7Ci0gIFN0YXJ0
UGxheW91dCgpOwotICBTdGFydFJlY29yZGluZygpOwotICB0ZXN0X2lzX2RvbmVfLT5XYWl0KGtU
ZXN0VGltZU91dEluTWlsbGlzZWNvbmRzKTsKLSAgU3RvcFJlY29yZGluZygpOwotICBTdG9wUGxh
eW91dCgpOwotfQotCi0vLyBTdGFydCBwbGF5b3V0IGFuZCByZWFkIGF1ZGlvIGZyb20gYW4gZXh0
ZXJuYWwgUENNIGZpbGUgd2hlbiB0aGUgYXVkaW8gbGF5ZXIKLS8vIGFza3MgZm9yIGRhdGEgdG8g
cGxheSBvdXQuIFJlYWwgYXVkaW8gaXMgcGxheWVkIG91dCBpbiB0aGlzIHRlc3QgYnV0IGl0IGRv
ZXMKLS8vIG5vdCBjb250YWluIGFueSBleHBsaWNpdCB2ZXJpZmljYXRpb24gdGhhdCB0aGUgYXVk
aW8gcXVhbGl0eSBpcyBwZXJmZWN0LgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgUnVuUGxheW91
dFdpdGhGaWxlQXNTb3VyY2UpIHsKLSAgLy8gVE9ETyhoZW5yaWthKTogZXh0ZW5kIHRlc3Qgd2hl
biBtb25vIG91dHB1dCBpcyBzdXBwb3J0ZWQuCi0gIEVYUEVDVF9FUSgxdSwgcGxheW91dF9jaGFu
bmVscygpKTsKLSAgTmljZU1vY2s8TW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZD4gbW9jayhrUGxh
eW91dCk7Ci0gIGNvbnN0IGludCBudW1fY2FsbGJhY2tzID0ga0ZpbGVQbGF5VGltZUluU2VjICog
a051bUNhbGxiYWNrc1BlclNlY29uZDsKLSAgc3RkOjpzdHJpbmcgZmlsZV9uYW1lID0gR2V0Rmls
ZU5hbWUocGxheW91dF9zYW1wbGVfcmF0ZSgpKTsKLSAgc3RkOjp1bmlxdWVfcHRyPEZpbGVBdWRp
b1N0cmVhbT4gZmlsZV9hdWRpb19zdHJlYW0oCi0gICAgICBuZXcgRmlsZUF1ZGlvU3RyZWFtKG51
bV9jYWxsYmFja3MsIGZpbGVfbmFtZSwgcGxheW91dF9zYW1wbGVfcmF0ZSgpKSk7Ci0gIG1vY2su
SGFuZGxlQ2FsbGJhY2tzKHRlc3RfaXNfZG9uZV8uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgIGZpbGVfYXVkaW9fc3RyZWFtLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICBudW1f
Y2FsbGJhY2tzKTsKLSAgLy8gU2V0TWF4UGxheW91dFZvbHVtZSgpOwotICBFWFBFQ1RfRVEoMCwg
YXVkaW9fZGV2aWNlKCktPlJlZ2lzdGVyQXVkaW9DYWxsYmFjaygmbW9jaykpOwotICBTdGFydFBs
YXlvdXQoKTsKLSAgdGVzdF9pc19kb25lXy0+V2FpdChrVGVzdFRpbWVPdXRJbk1pbGxpc2Vjb25k
cyk7Ci0gIFN0b3BQbGF5b3V0KCk7Ci19Ci0KLS8vIFN0YXJ0IHBsYXlvdXQgYW5kIHJlY29yZGlu
ZyBhbmQgc3RvcmUgcmVjb3JkZWQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUgRklGTwotLy8gYnVm
ZmVyIGZyb20gd2hpY2ggdGhlIHBsYXlvdXQgc2lkZSB0aGVuIHJlYWRzIGl0cyBzYW1wbGVzIGlu
IHRoZSBzYW1lIG9yZGVyCi0vLyBhcyB0aGV5IHdlcmUgc3RvcmVkLiBVbmRlciBpZGVhbCBjaXJj
dW1zdGFuY2VzLCBhIGNhbGxiYWNrIHNlcXVlbmNlIHdvdWxkCi0vLyBsb29rIGxpa2U6IC4uList
Ky0rLSstKy0rLSstLi4uLCB3aGVyZSAnKycgbWVhbnMgJ3BhY2tldCByZWNvcmRlZCcgYW5kICct
JwotLy8gbWVhbnMgJ3BhY2tldCBwbGF5ZWQnLiBVbmRlciBzdWNoIGNvbmRpdGlvbnMsIHRoZSBG
SUZPIHdvdWxkIG9ubHkgY29udGFpbgotLy8gb25lIHBhY2tldCBvbiBhdmVyYWdlLiBIb3dldmVy
LCB1bmRlciBtb3JlIHJlYWxpc3RpYyBjb25kaXRpb25zLCB0aGUgc2l6ZQotLy8gb2YgdGhlIEZJ
Rk8gd2lsbCB2YXJ5IG1vcmUgZHVlIHRvIGFuIHVuYmFsYW5jZSBiZXR3ZWVuIHRoZSB0d28gc2lk
ZXMuCi0vLyBUaGlzIHRlc3QgdHJpZXMgdG8gdmVyaWZ5IHRoYXQgdGhlIGRldmljZSBtYWludGFp
bnMgYSBiYWxhbmNlZCBjYWxsYmFjay0KLS8vIHNlcXVlbmNlIGJ5IHJ1bm5pbmcgaW4gbG9vcGJh
Y2sgZm9yIHRlbiBzZWNvbmRzIHdoaWxlIG1lYXN1cmluZyB0aGUgc2l6ZQotLy8gKG1heCBhbmQg
YXZlcmFnZSkgb2YgdGhlIEZJRk8uIFRoZSBzaXplIG9mIHRoZSBGSUZPIGlzIGluY3JlYXNlZCBi
eSB0aGUKLS8vIHJlY29yZGluZyBzaWRlIGFuZCBkZWNyZWFzZWQgYnkgdGhlIHBsYXlvdXQgc2lk
ZS4KLS8vIFRPRE8oaGVucmlrYSk6IHR1bmUgdGhlIGZpbmFsIHRlc3QgcGFyYW1ldGVycyBhZnRl
ciBydW5uaW5nIHRlc3RzIG9uIHNldmVyYWwKLS8vIGRpZmZlcmVudCBkZXZpY2VzLgotVEVTVF9G
KEF1ZGlvRGV2aWNlVGVzdCwgUnVuUGxheW91dEFuZFJlY29yZGluZ0luRnVsbER1cGxleCkgewot
ICBFWFBFQ1RfRVEocmVjb3JkX2NoYW5uZWxzKCksIHBsYXlvdXRfY2hhbm5lbHMoKSk7Ci0gIEVY
UEVDVF9FUShyZWNvcmRfc2FtcGxlX3JhdGUoKSwgcGxheW91dF9zYW1wbGVfcmF0ZSgpKTsKLSAg
TmljZU1vY2s8TW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZD4gbW9jayhrUGxheW91dCB8IGtSZWNv
cmRpbmcpOwotICBzdGQ6OnVuaXF1ZV9wdHI8Rmlmb0F1ZGlvU3RyZWFtPiBmaWZvX2F1ZGlvX3N0
cmVhbSgKLSAgICAgIG5ldyBGaWZvQXVkaW9TdHJlYW0ocGxheW91dF9mcmFtZXNfcGVyXzEwbXNf
YnVmZmVyKCkpKTsKLSAgbW9jay5IYW5kbGVDYWxsYmFja3ModGVzdF9pc19kb25lXy5nZXQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgZmlmb19hdWRpb19zdHJlYW0uZ2V0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgIGtGdWxsRHVwbGV4VGltZUluU2VjICoga051bUNhbGxiYWNrc1BlclNl
Y29uZCk7Ci0gIFNldE1heFBsYXlvdXRWb2x1bWUoKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rl
dmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJhY2soJm1vY2spKTsKLSAgU3RhcnRSZWNvcmRpbmco
KTsKLSAgU3RhcnRQbGF5b3V0KCk7Ci0gIHRlc3RfaXNfZG9uZV8tPldhaXQoc3RkOjptYXgoa1Rl
c3RUaW1lT3V0SW5NaWxsaXNlY29uZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MTAwMCAqIGtGdWxsRHVwbGV4VGltZUluU2VjKSk7Ci0gIFN0b3BQbGF5b3V0KCk7Ci0gIFN0b3BS
ZWNvcmRpbmcoKTsKLQotICAvLyBUaGVzZSB0aHJlc2hvbGRzIGFyZSBzZXQgcmF0aGVyIGhpZ2gg
dG8gYWNjb21vZGF0ZSBkaWZmZXJlbmNlcyBpbiBoYXJkd2FyZQotICAvLyBpbiBzZXZlcmFsIGRl
dmljZXMsIHNvIHRoaXMgdGVzdCBjYW4gYmUgdXNlZCBpbiBzd2FybWluZy4KLSAgLy8gU2VlIGh0
dHA6Ly9idWdzLndlYnJ0Yy5vcmcvNjQ2NAotICBFWFBFQ1RfTEUoZmlmb19hdWRpb19zdHJlYW0t
PmF2ZXJhZ2Vfc2l6ZSgpLCAzMHUpOwotICBFWFBFQ1RfTEUoZmlmb19hdWRpb19zdHJlYW0tPmxh
cmdlc3Rfc2l6ZSgpLCA0MHUpOwotfQotCi0vLyBNZWFzdXJlcyBsb29wYmFjayBsYXRlbmN5IGFu
ZCByZXBvcnRzIHRoZSBtaW4sIG1heCBhbmQgYXZlcmFnZSB2YWx1ZXMgZm9yCi0vLyBhIGZ1bGwg
ZHVwbGV4IGF1ZGlvIHNlc3Npb24uCi0vLyBUaGUgbGF0ZW5jeSBpcyBtZWFzdXJlZCBsaWtlIHNv
OgotLy8gLSBJbnNlcnQgaW1wdWxzZXMgcGVyaW9kaWNhbGx5IG9uIHRoZSBvdXRwdXQgc2lkZS4K
LS8vIC0gRGV0ZWN0IHRoZSBpbXB1bHNlcyBvbiB0aGUgaW5wdXQgc2lkZS4KLS8vIC0gTWVhc3Vy
ZSB0aGUgdGltZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHRyYW5zbWl0IHRpbWUgYW5kIHJlY2Vp
dmUgdGltZS4KLS8vIC0gU3RvcmUgdGltZSBkaWZmZXJlbmNlcyBpbiBhIHZlY3RvciBhbmQgY2Fs
Y3VsYXRlIG1pbiwgbWF4IGFuZCBhdmVyYWdlLgotLy8gVGhpcyB0ZXN0IHJlcXVpcmVzIGEgc3Bl
Y2lhbCBoYXJkd2FyZSBjYWxsZWQgQXVkaW8gTG9vcGJhY2sgRG9uZ2xlLgotLy8gU2VlIGh0dHA6
Ly9zb3VyY2UuYW5kcm9pZC5jb20vZGV2aWNlcy9hdWRpby9sb29wYmFjay5odG1sIGZvciBkZXRh
aWxzLgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgRElTQUJMRURfTWVhc3VyZUxvb3BiYWNrTGF0
ZW5jeSkgewotICBFWFBFQ1RfRVEocmVjb3JkX2NoYW5uZWxzKCksIHBsYXlvdXRfY2hhbm5lbHMo
KSk7Ci0gIEVYUEVDVF9FUShyZWNvcmRfc2FtcGxlX3JhdGUoKSwgcGxheW91dF9zYW1wbGVfcmF0
ZSgpKTsKLSAgTmljZU1vY2s8TW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZD4gbW9jayhrUGxheW91
dCB8IGtSZWNvcmRpbmcpOwotICBzdGQ6OnVuaXF1ZV9wdHI8TGF0ZW5jeU1lYXN1cmluZ0F1ZGlv
U3RyZWFtPiBsYXRlbmN5X2F1ZGlvX3N0cmVhbSgKLSAgICAgIG5ldyBMYXRlbmN5TWVhc3VyaW5n
QXVkaW9TdHJlYW0ocGxheW91dF9mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCkpKTsKLSAgbW9jay5I
YW5kbGVDYWxsYmFja3ModGVzdF9pc19kb25lXy5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgbGF0ZW5jeV9hdWRpb19zdHJlYW0uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIGtN
ZWFzdXJlTGF0ZW5jeVRpbWVJblNlYyAqIGtOdW1DYWxsYmFja3NQZXJTZWNvbmQpOwotICBFWFBF
Q1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlJlZ2lzdGVyQXVkaW9DYWxsYmFjaygmbW9jaykpOwot
ICBTZXRNYXhQbGF5b3V0Vm9sdW1lKCk7Ci0gIERpc2FibGVCdWlsdEluQUVDSWZBdmFpbGFibGUo
KTsKLSAgU3RhcnRSZWNvcmRpbmcoKTsKLSAgU3RhcnRQbGF5b3V0KCk7Ci0gIHRlc3RfaXNfZG9u
ZV8tPldhaXQoc3RkOjptYXgoa1Rlc3RUaW1lT3V0SW5NaWxsaXNlY29uZHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMTAwMCAqIGtNZWFzdXJlTGF0ZW5jeVRpbWVJblNlYykpOwot
ICBTdG9wUGxheW91dCgpOwotICBTdG9wUmVjb3JkaW5nKCk7Ci0gIC8vIFZlcmlmeSB0aGF0IHRo
ZSBjb3JyZWN0IG51bWJlciBvZiB0cmFuc21pdHRlZCBpbXB1bHNlcyBhcmUgZGV0ZWN0ZWQuCi0g
IEVYUEVDVF9FUShsYXRlbmN5X2F1ZGlvX3N0cmVhbS0+bnVtX2xhdGVuY3lfdmFsdWVzKCksCi0g
ICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KAotICAgICAgICAgICAgICAgIGtJbXB1bHNl
RnJlcXVlbmN5SW5IeiAqIGtNZWFzdXJlTGF0ZW5jeVRpbWVJblNlYyAtIDEpKTsKLSAgbGF0ZW5j
eV9hdWRpb19zdHJlYW0tPlByaW50UmVzdWx0cygpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2Vi
cnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuY2MKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwyOTcgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRp
b19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgiCi0KLSNpbmNsdWRlIDx1dGlsaXR5Pgot
Ci0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2FycmF5
c2l6ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLQotI2Rl
ZmluZSBUQUcgIkF1ZGlvTWFuYWdlciIKLSNkZWZpbmUgQUxPR1YoLi4uKSBfX2FuZHJvaWRfbG9n
X3ByaW50KEFORFJPSURfTE9HX1ZFUkJPU0UsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFM
T0dEKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgVEFHLCBfX1ZB
X0FSR1NfXykKLSNkZWZpbmUgQUxPR0UoLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURf
TE9HX0VSUk9SLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HVyguLi4pIF9fYW5kcm9p
ZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfV0FSTiwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUg
QUxPR0koLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8sIFRBRywgX19W
QV9BUkdTX18pCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0vLyBBdWRpb01hbmFnZXI6OkphdmFB
dWRpb01hbmFnZXIgaW1wbGVtZW50YXRpb24KLUF1ZGlvTWFuYWdlcjo6SmF2YUF1ZGlvTWFuYWdl
cjo6SmF2YUF1ZGlvTWFuYWdlcigKLSAgICBOYXRpdmVSZWdpc3RyYXRpb24qIG5hdGl2ZV9yZWcs
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdsb2JhbFJlZj4gYXVkaW9fbWFuYWdlcikKLSAgICA6IGF1
ZGlvX21hbmFnZXJfKHN0ZDo6bW92ZShhdWRpb19tYW5hZ2VyKSksCi0gICAgICBpbml0XyhuYXRp
dmVfcmVnLT5HZXRNZXRob2RJZCgiaW5pdCIsICIoKVoiKSksCi0gICAgICBkaXNwb3NlXyhuYXRp
dmVfcmVnLT5HZXRNZXRob2RJZCgiZGlzcG9zZSIsICIoKVYiKSksCi0gICAgICBpc19jb21tdW5p
Y2F0aW9uX21vZGVfZW5hYmxlZF8oCi0gICAgICAgICAgbmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQo
ImlzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkIiwgIigpWiIpKSwKLSAgICAgIGlzX2RldmljZV9i
bGFja2xpc3RlZF9mb3Jfb3Blbl9zbGVzX3VzYWdlXygKLSAgICAgICAgICBuYXRpdmVfcmVnLT5H
ZXRNZXRob2RJZCgiaXNEZXZpY2VCbGFja2xpc3RlZEZvck9wZW5TTEVTVXNhZ2UiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoKVoiKSkgewotICBBTE9HRCgiSmF2YUF1ZGlv
TWFuYWdlcjo6Y3RvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotfQotCi1BdWRpb01h
bmFnZXI6OkphdmFBdWRpb01hbmFnZXI6On5KYXZhQXVkaW9NYW5hZ2VyKCkgewotICBBTE9HRCgi
SmF2YUF1ZGlvTWFuYWdlcjo6ZHRvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotfQot
Ci1ib29sIEF1ZGlvTWFuYWdlcjo6SmF2YUF1ZGlvTWFuYWdlcjo6SW5pdCgpIHsKLSAgcmV0dXJu
IGF1ZGlvX21hbmFnZXJfLT5DYWxsQm9vbGVhbk1ldGhvZChpbml0Xyk7Ci19Ci0KLXZvaWQgQXVk
aW9NYW5hZ2VyOjpKYXZhQXVkaW9NYW5hZ2VyOjpDbG9zZSgpIHsKLSAgYXVkaW9fbWFuYWdlcl8t
PkNhbGxWb2lkTWV0aG9kKGRpc3Bvc2VfKTsKLX0KLQotYm9vbCBBdWRpb01hbmFnZXI6OkphdmFB
dWRpb01hbmFnZXI6OklzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCkgewotICByZXR1cm4gYXVk
aW9fbWFuYWdlcl8tPkNhbGxCb29sZWFuTWV0aG9kKGlzX2NvbW11bmljYXRpb25fbW9kZV9lbmFi
bGVkXyk7Ci19Ci0KLWJvb2wgQXVkaW9NYW5hZ2VyOjpKYXZhQXVkaW9NYW5hZ2VyOjpJc0Rldmlj
ZUJsYWNrbGlzdGVkRm9yT3BlblNMRVNVc2FnZSgpIHsKLSAgcmV0dXJuIGF1ZGlvX21hbmFnZXJf
LT5DYWxsQm9vbGVhbk1ldGhvZCgKLSAgICAgIGlzX2RldmljZV9ibGFja2xpc3RlZF9mb3Jfb3Bl
bl9zbGVzX3VzYWdlXyk7Ci19Ci0KLS8vIEF1ZGlvTWFuYWdlciBpbXBsZW1lbnRhdGlvbgotQXVk
aW9NYW5hZ2VyOjpBdWRpb01hbmFnZXIoKQotICAgIDogal9lbnZpcm9ubWVudF8oSlZNOjpHZXRJ
bnN0YW5jZSgpLT5lbnZpcm9ubWVudCgpKSwKLSAgICAgIGF1ZGlvX2xheWVyXyhBdWRpb0Rldmlj
ZU1vZHVsZTo6a1BsYXRmb3JtRGVmYXVsdEF1ZGlvKSwKLSAgICAgIGluaXRpYWxpemVkXyhmYWxz
ZSksCi0gICAgICBoYXJkd2FyZV9hZWNfKGZhbHNlKSwKLSAgICAgIGhhcmR3YXJlX2FnY18oZmFs
c2UpLAotICAgICAgaGFyZHdhcmVfbnNfKGZhbHNlKSwKLSAgICAgIGxvd19sYXRlbmN5X3BsYXlv
dXRfKGZhbHNlKSwKLSAgICAgIGxvd19sYXRlbmN5X3JlY29yZF8oZmFsc2UpLAotICAgICAgZGVs
YXlfZXN0aW1hdGVfaW5fbWlsbGlzZWNvbmRzXygwKSB7Ci0gIEFMT0dEKCJjdG9yJXMiLCBHZXRU
aHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19DSEVDSyhqX2Vudmlyb25tZW50Xyk7Ci0gIEpO
SU5hdGl2ZU1ldGhvZCBuYXRpdmVfbWV0aG9kc1tdID0gewotICAgICAgeyJuYXRpdmVDYWNoZUF1
ZGlvUGFyYW1ldGVycyIsICIoSUlaWlpaWlpJSUopViIsCi0gICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oJndlYnJ0Yzo6QXVkaW9NYW5hZ2VyOjpDYWNoZUF1ZGlvUGFyYW1ldGVycyl9fTsK
LSAgal9uYXRpdmVfcmVnaXN0cmF0aW9uXyA9IGpfZW52aXJvbm1lbnRfLT5SZWdpc3Rlck5hdGl2
ZXMoCi0gICAgICAib3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb01hbmFnZXIiLCBu
YXRpdmVfbWV0aG9kcywKLSAgICAgIGFycmF5c2l6ZShuYXRpdmVfbWV0aG9kcykpOwotICBqX2F1
ZGlvX21hbmFnZXJfLnJlc2V0KG5ldyBKYXZhQXVkaW9NYW5hZ2VyKAotICAgICAgal9uYXRpdmVf
cmVnaXN0cmF0aW9uXy5nZXQoKSwKLSAgICAgIGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl8tPk5ld09i
amVjdCgKLSAgICAgICAgICAiPGluaXQ+IiwgIihMYW5kcm9pZC9jb250ZW50L0NvbnRleHQ7SilW
IiwKLSAgICAgICAgICBKVk06OkdldEluc3RhbmNlKCktPmNvbnRleHQoKSwgUG9pbnRlclRvamxv
bmcodGhpcykpKSk7Ci19Ci0KLUF1ZGlvTWFuYWdlcjo6fkF1ZGlvTWFuYWdlcigpIHsKLSAgQUxP
R0QoIn5kdG9yJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhy
ZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIENsb3NlKCk7Ci19Ci0KLXZv
aWQgQXVkaW9NYW5hZ2VyOjpTZXRBY3RpdmVBdWRpb0xheWVyKAotICAgIEF1ZGlvRGV2aWNlTW9k
dWxlOjpBdWRpb0xheWVyIGF1ZGlvX2xheWVyKSB7Ci0gIEFMT0dEKCJTZXRBY3RpdmVBdWRpb0xh
eWVyKCVkKSVzIiwgYXVkaW9fbGF5ZXIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRD
X0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RD
SEVDSyghaW5pdGlhbGl6ZWRfKTsKLSAgLy8gU3RvcmUgdGhlIGN1cnJlbnRseSB1dGlsaXplZCBh
dWRpbyBsYXllci4KLSAgYXVkaW9fbGF5ZXJfID0gYXVkaW9fbGF5ZXI7Ci0gIC8vIFRoZSBkZWxh
eSBlc3RpbWF0ZSBjYW4gdGFrZSBvbmUgb2YgdHdvIGZpeGVkIHZhbHVlcyBkZXBlbmRpbmcgb24g
aWYgdGhlCi0gIC8vIGRldmljZSBzdXBwb3J0cyBsb3ctbGF0ZW5jeSBvdXRwdXQgb3Igbm90LiBI
b3dldmVyLCBpdCBpcyBhbHNvIHBvc3NpYmxlCi0gIC8vIHRoYXQgdGhlIHVzZXIgZXhwbGljaXRs
eSBzZWxlY3RzIHRoZSBoaWdoLWxhdGVuY3kgYXVkaW8gcGF0aCwgaGVuY2Ugd2UgdXNlCi0gIC8v
IHRoZSBzZWxlY3RlZCB8YXVkaW9fbGF5ZXJ8IGhlcmUgdG8gc2V0IHRoZSBkZWxheSBlc3RpbWF0
ZS4KLSAgZGVsYXlfZXN0aW1hdGVfaW5fbWlsbGlzZWNvbmRzXyA9Ci0gICAgICAoYXVkaW9fbGF5
ZXIgPT0gQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2YUF1ZGlvKSA/Ci0gICAgICBrSGln
aExhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzIDoKLSAgICAgIGtMb3dMYXRl
bmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kczsKLSAgQUxPR0QoImRlbGF5X2VzdGlt
YXRlX2luX21pbGxpc2Vjb25kczogJWQiLCBkZWxheV9lc3RpbWF0ZV9pbl9taWxsaXNlY29uZHNf
KTsKLX0KLQotU0xPYmplY3RJdGYgQXVkaW9NYW5hZ2VyOjpHZXRPcGVuU0xFbmdpbmUoKSB7Ci0g
IEFMT0dEKCJHZXRPcGVuU0xFbmdpbmUlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAg
UlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgLy8g
T25seSBhbGxvdyB1c2FnZSBvZiBPcGVuU0wgRVMgaWYgc3VjaCBhbiBhdWRpbyBsYXllciBoYXMg
YmVlbiBzcGVjaWZpZWQuCi0gIGlmIChhdWRpb19sYXllcl8gIT0gQXVkaW9EZXZpY2VNb2R1bGU6
OmtBbmRyb2lkT3BlblNMRVNBdWRpbyAmJgotICAgICAgYXVkaW9fbGF5ZXJfICE9Ci0gICAgICAg
ICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2YUlucHV0QW5kT3BlblNMRVNPdXRwdXRB
dWRpbykgewotICAgIEFMT0dJKCJVbmFibGUgdG8gY3JlYXRlIE9wZW5TTCBlbmdpbmUgZm9yIHRo
ZSBjdXJyZW50IGF1ZGlvIGxheWVyOiAlZCIsCi0gICAgICAgICAgYXVkaW9fbGF5ZXJfKTsKLSAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICAvLyBPcGVuU0wgRVMgZm9yIEFuZHJvaWQgb25seSBz
dXBwb3J0cyBhIHNpbmdsZSBlbmdpbmUgcGVyIGFwcGxpY2F0aW9uLgotICAvLyBJZiBvbmUgYWxy
ZWFkeSBoYXMgYmVlbiBjcmVhdGVkLCByZXR1cm4gZXhpc3Rpbmcgb2JqZWN0IGluc3RlYWQgb2YK
LSAgLy8gY3JlYXRpbmcgYSBuZXcuCi0gIGlmIChlbmdpbmVfb2JqZWN0Xy5HZXQoKSAhPSBudWxs
cHRyKSB7Ci0gICAgQUxPR0koIlRoZSBPcGVuU0wgRVMgZW5naW5lIG9iamVjdCBoYXMgYWxyZWFk
eSBiZWVuIGNyZWF0ZWQiKTsKLSAgICByZXR1cm4gZW5naW5lX29iamVjdF8uR2V0KCk7Ci0gIH0K
LSAgLy8gQ3JlYXRlIHRoZSBlbmdpbmUgb2JqZWN0IGluIHRocmVhZCBzYWZlIG1vZGUuCi0gIGNv
bnN0IFNMRW5naW5lT3B0aW9uIG9wdGlvbltdID0gewotICAgICAge1NMX0VOR0lORU9QVElPTl9U
SFJFQURTQUZFLCBzdGF0aWNfY2FzdDxTTHVpbnQzMj4oU0xfQk9PTEVBTl9UUlVFKX19OwotICBT
THJlc3VsdCByZXN1bHQgPQotICAgICAgc2xDcmVhdGVFbmdpbmUoZW5naW5lX29iamVjdF8uUmVj
ZWl2ZSgpLCAxLCBvcHRpb24sIDAsIE5VTEwsIE5VTEwpOwotICBpZiAocmVzdWx0ICE9IFNMX1JF
U1VMVF9TVUNDRVNTKSB7Ci0gICAgQUxPR0UoInNsQ3JlYXRlRW5naW5lKCkgZmFpbGVkOiAlcyIs
IEdldFNMRXJyb3JTdHJpbmcocmVzdWx0KSk7Ci0gICAgZW5naW5lX29iamVjdF8uUmVzZXQoKTsK
LSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICAvLyBSZWFsaXplIHRoZSBTTCBFbmdpbmUgaW4g
c3luY2hyb25vdXMgbW9kZS4KLSAgcmVzdWx0ID0gZW5naW5lX29iamVjdF8tPlJlYWxpemUoZW5n
aW5lX29iamVjdF8uR2V0KCksIFNMX0JPT0xFQU5fRkFMU0UpOwotICBpZiAocmVzdWx0ICE9IFNM
X1JFU1VMVF9TVUNDRVNTKSB7Ci0gICAgQUxPR0UoIlJlYWxpemUoKSBmYWlsZWQ6ICVzIiwgR2V0
U0xFcnJvclN0cmluZyhyZXN1bHQpKTsKLSAgICBlbmdpbmVfb2JqZWN0Xy5SZXNldCgpOwotICAg
IHJldHVybiBudWxscHRyOwotICB9Ci0gIC8vIEZpbmFsbHkgcmV0dXJuIHRoZSBTTE9iamVjdEl0
ZiBpbnRlcmZhY2Ugb2YgdGhlIGVuZ2luZSBvYmplY3QuCi0gIHJldHVybiBlbmdpbmVfb2JqZWN0
Xy5HZXQoKTsKLX0KLQotYm9vbCBBdWRpb01hbmFnZXI6OkluaXQoKSB7Ci0gIEFMT0dEKCJJbml0
JXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0soIWluaXRpYWxpemVkXyk7
Ci0gIFJUQ19EQ0hFQ0tfTkUoYXVkaW9fbGF5ZXJfLCBBdWRpb0RldmljZU1vZHVsZTo6a1BsYXRm
b3JtRGVmYXVsdEF1ZGlvKTsKLSAgaWYgKCFqX2F1ZGlvX21hbmFnZXJfLT5Jbml0KCkpIHsKLSAg
ICBBTE9HRSgiaW5pdCBmYWlsZWQhIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGluaXRp
YWxpemVkXyA9IHRydWU7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6
Q2xvc2UoKSB7Ci0gIEFMT0dEKCJDbG9zZSVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBp
ZiAoIWluaXRpYWxpemVkXykKLSAgICByZXR1cm4gdHJ1ZTsKLSAgal9hdWRpb19tYW5hZ2VyXy0+
Q2xvc2UoKTsKLSAgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0gIHJldHVybiB0cnVlOwotfQotCi1i
b29sIEF1ZGlvTWFuYWdlcjo6SXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKSBjb25zdCB7Ci0g
IEFMT0dEKCJJc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgpIik7Ci0gIFJUQ19EQ0hFQ0sodGhy
ZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVybiBqX2F1ZGlvX21h
bmFnZXJfLT5Jc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgpOwotfQotCi1ib29sIEF1ZGlvTWFu
YWdlcjo6SXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpIGNvbnN0IHsKLSAgUlRDX0RD
SEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIGhh
cmR3YXJlX2FlY187Ci19Ci0KLWJvb2wgQXVkaW9NYW5hZ2VyOjpJc0F1dG9tYXRpY0dhaW5Db250
cm9sU3VwcG9ydGVkKCkgY29uc3QgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1cm4gaGFyZHdhcmVfYWdjXzsKLX0KLQotYm9vbCBB
dWRpb01hbmFnZXI6OklzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgY29uc3QgewotICBSVENf
RENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1cm4g
aGFyZHdhcmVfbnNfOwotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6SXNMb3dMYXRlbmN5UGxheW91
dFN1cHBvcnRlZCgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVk
T25WYWxpZFRocmVhZCgpKTsKLSAgQUxPR0QoIklzTG93TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQo
KSIpOwotICAvLyBTb21lIGRldmljZXMgYXJlIGJsYWNrbGlzdGVkIGZvciB1c2FnZSBvZiBPcGVu
U0wgRVMgZXZlbiBpZiB0aGV5IHJlcG9ydAotICAvLyB0aGF0IGxvdy1sYXRlbmN5IHBsYXlvdXQg
aXMgc3VwcG9ydGVkLiBTZWUgYi8yMTQ4NTcwMyBmb3IgZGV0YWlscy4KLSAgcmV0dXJuIGpfYXVk
aW9fbWFuYWdlcl8tPklzRGV2aWNlQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCkgPwotICAg
ICAgZmFsc2UgOiBsb3dfbGF0ZW5jeV9wbGF5b3V0XzsKLX0KLQotYm9vbCBBdWRpb01hbmFnZXI6
OklzTG93TGF0ZW5jeVJlY29yZFN1cHBvcnRlZCgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgQUxPR0QoIklzTG93TGF0ZW5j
eVJlY29yZFN1cHBvcnRlZCgpIik7Ci0gIHJldHVybiBsb3dfbGF0ZW5jeV9yZWNvcmRfOwotfQot
Ci1ib29sIEF1ZGlvTWFuYWdlcjo6SXNQcm9BdWRpb1N1cHBvcnRlZCgpIGNvbnN0IHsKLSAgUlRD
X0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgQUxPR0Qo
IklzUHJvQXVkaW9TdXBwb3J0ZWQoKSIpOwotICAvLyBUT0RPKGhlbnJpa2EpOiByZXR1cm4gdGhl
IHN0YXRlIGluZGVwZW5kZW50bHkgb2YgaWYgT3BlblNMIEVTIGlzCi0gIC8vIGJsYWNrbGlzdGVk
IG9yIG5vdCBmb3Igbm93LiBXZSBjb3VsZCB1c2UgdGhlIHNhbWUgYXBwcm9hY2ggYXMgaW4KLSAg
Ly8gSXNMb3dMYXRlbmN5UGxheW91dFN1cHBvcnRlZCgpIGJ1dCBJIGNhbid0IHNlZSB0aGUgbmVl
ZCBmb3IgaXQgeWV0LgotICByZXR1cm4gcHJvX2F1ZGlvXzsKLX0KLQotaW50IEF1ZGlvTWFuYWdl
cjo6R2V0RGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzKCkgY29uc3QgewotICByZXR1cm4gZGVs
YXlfZXN0aW1hdGVfaW5fbWlsbGlzZWNvbmRzXzsKLX0KLQotdm9pZCBKTklDQUxMIEF1ZGlvTWFu
YWdlcjo6Q2FjaGVBdWRpb1BhcmFtZXRlcnMoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IG9iaiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc2FtcGxlX3JhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGNoYW5u
ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJv
b2xlYW4gaGFyZHdhcmVfYWVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgamJvb2xlYW4gaGFyZHdhcmVfYWdjLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gaGFyZHdhcmVfbnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBsb3dfbGF0
ZW5jeV9vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBqYm9vbGVhbiBsb3dfbGF0ZW5jeV9pbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIHByb19hdWRpbywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgb3V0cHV0X2J1ZmZlcl9z
aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlu
dCBpbnB1dF9idWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpsb25nIG5hdGl2ZV9hdWRpb19tYW5hZ2VyKSB7Ci0gIHdlYnJ0Yzo6QXVk
aW9NYW5hZ2VyKiB0aGlzX29iamVjdCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6
QXVkaW9NYW5hZ2VyKj4obmF0aXZlX2F1ZGlvX21hbmFnZXIpOwotICB0aGlzX29iamVjdC0+T25D
YWNoZUF1ZGlvUGFyYW1ldGVycygKLSAgICAgIGVudiwgc2FtcGxlX3JhdGUsIGNoYW5uZWxzLCBo
YXJkd2FyZV9hZWMsIGhhcmR3YXJlX2FnYywgaGFyZHdhcmVfbnMsCi0gICAgICBsb3dfbGF0ZW5j
eV9vdXRwdXQsIGxvd19sYXRlbmN5X2lucHV0LCBwcm9fYXVkaW8sIG91dHB1dF9idWZmZXJfc2l6
ZSwKLSAgICAgIGlucHV0X2J1ZmZlcl9zaXplKTsKLX0KLQotdm9pZCBBdWRpb01hbmFnZXI6Ok9u
Q2FjaGVBdWRpb1BhcmFtZXRlcnMoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqaW50IHNhbXBsZV9yYXRlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamludCBjaGFubmVscywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX2FlYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX2FnYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3
YXJlX25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xl
YW4gbG93X2xhdGVuY3lfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamJvb2xlYW4gbG93X2xhdGVuY3lfaW5wdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBwcm9fYXVkaW8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG91dHB1dF9idWZmZXJfc2l6ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgaW5wdXRfYnVmZmVy
X3NpemUpIHsKLSAgQUxPR0QoIk9uQ2FjaGVBdWRpb1BhcmFtZXRlcnMlcyIsIEdldFRocmVhZElu
Zm8oKS5jX3N0cigpKTsKLSAgQUxPR0QoImhhcmR3YXJlX2FlYzogJWQiLCBoYXJkd2FyZV9hZWMp
OwotICBBTE9HRCgiaGFyZHdhcmVfYWdjOiAlZCIsIGhhcmR3YXJlX2FnYyk7Ci0gIEFMT0dEKCJo
YXJkd2FyZV9uczogJWQiLCBoYXJkd2FyZV9ucyk7Ci0gIEFMT0dEKCJsb3dfbGF0ZW5jeV9vdXRw
dXQ6ICVkIiwgbG93X2xhdGVuY3lfb3V0cHV0KTsKLSAgQUxPR0QoImxvd19sYXRlbmN5X2lucHV0
OiAlZCIsIGxvd19sYXRlbmN5X2lucHV0KTsKLSAgQUxPR0QoInByb19hdWRpbzogJWQiLCBwcm9f
YXVkaW8pOwotICBBTE9HRCgic2FtcGxlX3JhdGU6ICVkIiwgc2FtcGxlX3JhdGUpOwotICBBTE9H
RCgiY2hhbm5lbHM6ICVkIiwgY2hhbm5lbHMpOwotICBBTE9HRCgib3V0cHV0X2J1ZmZlcl9zaXpl
OiAlZCIsIG91dHB1dF9idWZmZXJfc2l6ZSk7Ci0gIEFMT0dEKCJpbnB1dF9idWZmZXJfc2l6ZTog
JWQiLCBpbnB1dF9idWZmZXJfc2l6ZSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGhhcmR3YXJlX2FlY18gPSBoYXJkd2FyZV9hZWM7Ci0g
IGhhcmR3YXJlX2FnY18gPSBoYXJkd2FyZV9hZ2M7Ci0gIGhhcmR3YXJlX25zXyA9IGhhcmR3YXJl
X25zOwotICBsb3dfbGF0ZW5jeV9wbGF5b3V0XyA9IGxvd19sYXRlbmN5X291dHB1dDsKLSAgbG93
X2xhdGVuY3lfcmVjb3JkXyA9IGxvd19sYXRlbmN5X2lucHV0OwotICBwcm9fYXVkaW9fID0gcHJv
X2F1ZGlvOwotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCBmb3Igc3RlcmVvIG91dHB1
dC4KLSAgcGxheW91dF9wYXJhbWV0ZXJzXy5yZXNldChzYW1wbGVfcmF0ZSwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihjaGFubmVscyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8c2l6ZV90PihvdXRwdXRfYnVmZmVyX3NpemUpKTsKLSAgcmVjb3JkX3BhcmFtZXRlcnNfLnJl
c2V0KHNhbXBsZV9yYXRlLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNoYW5uZWxzKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4oaW5wdXRfYnVmZmVyX3NpemUp
KTsKLX0KLQotY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBBdWRpb01hbmFnZXI6OkdldFBsYXlvdXRB
dWRpb1BhcmFtZXRlcnMoKSB7Ci0gIFJUQ19DSEVDSyhwbGF5b3V0X3BhcmFtZXRlcnNfLmlzX3Zh
bGlkKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFk
KCkpOwotICByZXR1cm4gcGxheW91dF9wYXJhbWV0ZXJzXzsKLX0KLQotY29uc3QgQXVkaW9QYXJh
bWV0ZXJzJiBBdWRpb01hbmFnZXI6OkdldFJlY29yZEF1ZGlvUGFyYW1ldGVycygpIHsKLSAgUlRD
X0NIRUNLKHJlY29yZF9wYXJhbWV0ZXJzXy5pc192YWxpZCgpKTsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIHJlY29yZF9wYXJh
bWV0ZXJzXzsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9hdWRpb19tYW5hZ2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5h
Z2VyLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5o
CShub25leGlzdGVudCkKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0FVRElPX01BTkFH
RVJfSF8KLSNkZWZpbmUgV0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQVVESU9f
TUFOQUdFUl9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5j
bHVkZSA8U0xFUy9PcGVuU0xFUy5oPgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGhyZWFkX2No
ZWNrZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9h
dWRpb19jb21tb24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYXVk
aW9fZGV2aWNlX2NvbmZpZy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9pbmNsdWRlL2F1ZGlvX2RldmljZV9kZWZpbmVzLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfY29tbW9uLmgiCi0jaW5jbHVkZSAid2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9nZW5lcmljLmgiCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5kcm9pZC5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9qdm1fYW5kcm9pZC5oIgotCi1u
YW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gSW1wbGVtZW50cyBzdXBwb3J0IGZvciBmdW5jdGlvbnMg
aW4gdGhlIFdlYlJUQyBhdWRpbyBzdGFjayBmb3IgQW5kcm9pZCB0aGF0Ci0vLyByZWxpZXMgb24g
dGhlIEF1ZGlvTWFuYWdlciBpbiBhbmRyb2lkLm1lZGlhLiBJdCBhbHNvIHBvcHVsYXRlcyBhbgot
Ly8gQXVkaW9QYXJhbWV0ZXIgc3RydWN0dXJlIHdpdGggbmF0aXZlIGF1ZGlvIHBhcmFtZXRlcnMg
ZGV0ZWN0ZWQgYXQKLS8vIGNvbnN0cnVjdGlvbi4gVGhpcyBjbGFzcyBkb2VzIG5vdCBtYWtlIGFu
eSBhdWRpby1yZWxhdGVkIG1vZGlmaWNhdGlvbnMKLS8vIHVubGVzcyBJbml0KCkgaXMgY2FsbGVk
LiBDYWNoaW5nIGF1ZGlvIHBhcmFtZXRlcnMgbWFrZXMgbm8gY2hhbmdlcyBidXQgb25seQotLy8g
cmVhZHMgZGF0YSBmcm9tIHRoZSBKYXZhIHNpZGUuCi1jbGFzcyBBdWRpb01hbmFnZXIgewotIHB1
YmxpYzoKLSAgLy8gV3JhcHMgdGhlIEphdmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvTWFu
YWdlciBpbnRvIG9uZSBoZWxwZXIgY2xhc3MuCi0gIC8vIFN0b3JlcyBtZXRob2QgSURzIGZvciBh
bGwgc3VwcG9ydGVkIG1ldGhvZHMgYXQgY29uc3RydWN0aW9uIGFuZCB0aGVuCi0gIC8vIGFsbG93
cyBjYWxscyBsaWtlIEphdmFBdWRpb01hbmFnZXI6OkNsb3NlKCkgd2hpbGUgaGlkaW5nIHRoZSBK
YXZhL0pOSQotICAvLyBwYXJ0cyB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjYWxsLgot
ICBjbGFzcyBKYXZhQXVkaW9NYW5hZ2VyIHsKLSAgIHB1YmxpYzoKLSAgICBKYXZhQXVkaW9NYW5h
Z2VyKE5hdGl2ZVJlZ2lzdHJhdGlvbiogbmF0aXZlX3JlZ2lzdHJhdGlvbiwKLSAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX21hbmFnZXIpOwotICAg
IH5KYXZhQXVkaW9NYW5hZ2VyKCk7Ci0KLSAgICBib29sIEluaXQoKTsKLSAgICB2b2lkIENsb3Nl
KCk7Ci0gICAgYm9vbCBJc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgpOwotICAgIGJvb2wgSXNE
ZXZpY2VCbGFja2xpc3RlZEZvck9wZW5TTEVTVXNhZ2UoKTsKLQotICAgcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBhdWRpb19tYW5hZ2VyXzsKLSAgICBqbWV0aG9kSUQg
aW5pdF87Ci0gICAgam1ldGhvZElEIGRpc3Bvc2VfOwotICAgIGptZXRob2RJRCBpc19jb21tdW5p
Y2F0aW9uX21vZGVfZW5hYmxlZF87Ci0gICAgam1ldGhvZElEIGlzX2RldmljZV9ibGFja2xpc3Rl
ZF9mb3Jfb3Blbl9zbGVzX3VzYWdlXzsKLSAgfTsKLQotICBBdWRpb01hbmFnZXIoKTsKLSAgfkF1
ZGlvTWFuYWdlcigpOwotCi0gIC8vIFNldHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgYXVkaW8gbGF5
ZXIgY29tYmluYXRpb24uIE11c3QgYmUgY2FsbGVkIGJlZm9yZQotICAvLyBJbml0KCkuCi0gIHZv
aWQgU2V0QWN0aXZlQXVkaW9MYXllcihBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRp
b19sYXllcik7Ci0KLSAgLy8gQ3JlYXRlcyBhbmQgcmVhbGl6ZXMgdGhlIG1haW4gKGdsb2JhbCkg
T3BlbiBTTCBlbmdpbmUgb2JqZWN0IGFuZCByZXR1cm5zCi0gIC8vIGEgcmVmZXJlbmNlIHRvIGl0
LiBUaGUgZW5naW5lIG9iamVjdCBpcyBvbmx5IGNyZWF0ZWQgYXQgdGhlIGZpcnN0IGNhbGwKLSAg
Ly8gc2luY2UgT3BlblNMIEVTIGZvciBBbmRyb2lkIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgZW5n
aW5lIHBlciBhcHBsaWNhdGlvbi4KLSAgLy8gU3Vic2VxdWVudCBjYWxscyByZXR1cm5zIHRoZSBh
bHJlYWR5IGNyZWF0ZWQgZW5naW5lLiBUaGUgU0wgZW5naW5lIG9iamVjdAotICAvLyBpcyBkZXN0
cm95ZWQgd2hlbiB0aGUgQXVkaW9NYW5hZ2VyIG9iamVjdCBpcyBkZWxldGVkLiBJdCBtZWFucyB0
aGF0IHRoZQotICAvLyBlbmdpbmUgb2JqZWN0IHdpbGwgYmUgdGhlIGZpcnN0IE9wZW5TTCBFUyBv
YmplY3QgdG8gYmUgY3JlYXRlZCBhbmQgbGFzdAotICAvLyBvYmplY3QgdG8gYmUgZGVzdHJveWVk
LgotICAvLyBOb3RlIHRoYXQgTlVMTCB3aWxsIGJlIHJldHVybmVkIHVubGVzcyB0aGUgYXVkaW8g
bGF5ZXIgaXMgc3BlY2lmaWVkIGFzCi0gIC8vIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZE9w
ZW5TTEVTQXVkaW8gb3IKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2YUlucHV0
QW5kT3BlblNMRVNPdXRwdXRBdWRpby4KLSAgU0xPYmplY3RJdGYgR2V0T3BlblNMRW5naW5lKCk7
Ci0KLSAgLy8gSW5pdGlhbGl6ZXMgdGhlIGF1ZGlvIG1hbmFnZXIgYW5kIHN0b3JlcyB0aGUgY3Vy
cmVudCBhdWRpbyBtb2RlLgotICBib29sIEluaXQoKTsKLSAgLy8gUmV2ZXJ0IGFueSBzZXR0aW5n
IGRvbmUgYnkgSW5pdCgpLgotICBib29sIENsb3NlKCk7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlm
IGN1cnJlbnQgYXVkaW8gbW9kZSBpcyBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9O
LgotICBib29sIElzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCkgY29uc3Q7Ci0KLSAgLy8gTmF0
aXZlIGF1ZGlvIHBhcmFtZXRlcnMgc3RvcmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24uCi0gIGNvbnN0
IEF1ZGlvUGFyYW1ldGVycyYgR2V0UGxheW91dEF1ZGlvUGFyYW1ldGVycygpOwotICBjb25zdCBB
dWRpb1BhcmFtZXRlcnMmIEdldFJlY29yZEF1ZGlvUGFyYW1ldGVycygpOwotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGJ1aWx0LWluIGF1ZGlvIGVmZmVjdHMgZm9y
IEFFQywgQUdDCi0gIC8vIGFuZCBOUy4gU29tZSBkZXZpY2VzIGNhbiBhbHNvIGJlIGJsYWNrbGlz
dGVkIGZvciB1c2UgaW4gY29tYmluYXRpb24gd2l0aAotICAvLyBwbGF0Zm9ybSBlZmZlY3RzIGFu
ZCB0aGVzZSBkZXZpY2VzIHdpbGwgcmV0dXJuIGZhbHNlLgotICAvLyBDYW4gY3VycmVudGx5IG9u
bHkgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgSmF2YSBiYXNlZCBhdWRpbyBiYWNrZW5k
Ci0gIC8vIGZvciB0aGUgcmVjb3Jpbmcgc2lkZSAoaS5lLiB1c2luZyB0aGUgYW5kcm9pZC5tZWRp
YS5BdWRpb1JlY29yZCBBUEkpLgotICBib29sIElzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0
ZWQoKSBjb25zdDsKLSAgYm9vbCBJc0F1dG9tYXRpY0dhaW5Db250cm9sU3VwcG9ydGVkKCkgY29u
c3Q7Ci0gIGJvb2wgSXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSBjb25zdDsKLQotICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyB0aGUgbG93LWxhdGVuY3kgYXVkaW8g
cGF0aHMgaW4KLSAgLy8gY29tYmluYXRpb24gd2l0aCBPcGVuU0wgRVMuCi0gIGJvb2wgSXNMb3dM
YXRlbmN5UGxheW91dFN1cHBvcnRlZCgpIGNvbnN0OwotICBib29sIElzTG93TGF0ZW5jeVJlY29y
ZFN1cHBvcnRlZCgpIGNvbnN0OwotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1
cHBvcnRzIHByby1hdWRpbyBmZWF0dXJlcyBpbiBjb21iaW5hdGlvbiB3aXRoCi0gIC8vIE9wZW5T
TCBFUy4KLSAgYm9vbCBJc1Byb0F1ZGlvU3VwcG9ydGVkKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJu
cyB0aGUgZXN0aW1hdGVkIHRvdGFsIGRlbGF5IG9mIHRoaXMgZGV2aWNlLiBVbml0IGlzIGluIG1p
bGxpc2Vjb25kcy4KLSAgLy8gVGhlIHZhdWxlIGlzIHNldCBvbmNlIGF0IGNvbnN0cnVjdGlvbiBh
bmQgbmV2ZXIgY2hhbmdlcyBhZnRlciB0aGF0LgotICAvLyBQb3NzaWJsZSB2YWx1ZXMgYXJlIHdl
YnJ0Yzo6a0xvd0xhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzIGFuZAotICAv
LyB3ZWJydGM6OmtIaWdoTGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMuCi0g
IGludCBHZXREZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMoKSBjb25zdDsKLQotIHByaXZhdGU6
Ci0gIC8vIENhbGxlZCBmcm9tIEphdmEgc2lkZSBzbyB3ZSBjYW4gY2FjaGUgdGhlIG5hdGl2ZSBh
dWRpbyBwYXJhbWV0ZXJzLgotICAvLyBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBieSB0aGUg
V2ViUnRjQXVkaW9NYW5hZ2VyIGNvbnN0cnVjdG9yLCBpLmUuCi0gIC8vIG9uIHRoZSBzYW1lIHRo
cmVhZCB0aGF0IHRoaXMgb2JqZWN0IGlzIGNyZWF0ZWQgb24uCi0gIHN0YXRpYyB2b2lkIEpOSUNB
TEwgQ2FjaGVBdWRpb1BhcmFtZXRlcnMoSk5JRW52KiBlbnYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBvYmosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamludCBzYW1wbGVfcmF0ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IGNoYW5uZWxzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX2FlYywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBoYXJkd2Fy
ZV9hZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xl
YW4gaGFyZHdhcmVfbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamJvb2xlYW4gbG93X2xhdGVuY3lfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGxvd19sYXRlbmN5X2lucHV0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIHByb19hdWRpbywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG91dHB1dF9idWZm
ZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50
IGlucHV0X2J1ZmZlcl9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpsb25nIG5hdGl2ZV9hdWRpb19tYW5hZ2VyKTsKLSAgdm9pZCBPbkNhY2hlQXVkaW9Q
YXJhbWV0ZXJzKEpOSUVudiogZW52LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlu
dCBzYW1wbGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgY2hhbm5l
bHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBoYXJkd2FyZV9hZWMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBoYXJkd2FyZV9hZ2MsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBoYXJkd2FyZV9ucywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGxvd19sYXRlbmN5X291dHB1dCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGxvd19sYXRlbmN5X2lucHV0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gcHJvX2F1ZGlvLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgamludCBvdXRwdXRfYnVmZmVyX3NpemUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBqaW50IGlucHV0X2J1ZmZlcl9zaXplKTsKLQotICAvLyBT
dG9yZXMgdGhyZWFkIElEIGluIHRoZSBjb25zdHJ1Y3Rvci4KLSAgLy8gV2UgY2FuIHRoZW4gdXNl
IFRocmVhZENoZWNrZXI6OkNhbGxlZE9uVmFsaWRUaHJlYWQoKSB0byBlbnN1cmUgdGhhdAotICAv
LyBvdGhlciBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQuCi0gIHJ0Yzo6
VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87Ci0KLSAgLy8gQ2FsbHMgQXR0YWNoQ3VycmVu
dFRocmVhZCgpIGlmIHRoaXMgdGhyZWFkIGlzIG5vdCBhdHRhY2hlZCBhdCBjb25zdHJ1Y3Rpb24u
Ci0gIC8vIEFsc28gZW5zdXJlcyB0aGF0IERldGFjaEN1cnJlbnRUaHJlYWQoKSBpcyBjYWxsZWQg
YXQgZGVzdHJ1Y3Rpb24uCi0gIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCBhdHRhY2hfdGhy
ZWFkX2lmX25lZWRlZF87Ci0KLSAgLy8gV3JhcHMgdGhlIEpOSSBpbnRlcmZhY2UgcG9pbnRlciBh
bmQgbWV0aG9kcyBhc3NvY2lhdGVkIHdpdGggaXQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxKTklFbnZp
cm9ubWVudD4gal9lbnZpcm9ubWVudF87Ci0KLSAgLy8gQ29udGFpbnMgZmFjdG9yeSBtZXRob2Qg
Zm9yIGNyZWF0aW5nIHRoZSBKYXZhIG9iamVjdC4KLSAgc3RkOjp1bmlxdWVfcHRyPE5hdGl2ZVJl
Z2lzdHJhdGlvbj4gal9uYXRpdmVfcmVnaXN0cmF0aW9uXzsKLQotICAvLyBXcmFwcyB0aGUgSmF2
YSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgQXVkaW9NYW5hZ2VyLgotICBzdGQ6OnVuaXF1ZV9wdHI8
QXVkaW9NYW5hZ2VyOjpKYXZhQXVkaW9NYW5hZ2VyPiBqX2F1ZGlvX21hbmFnZXJfOwotCi0gIC8v
IENvbnRhaW5zIHRoZSBzZWxlY3RlZCBhdWRpbyBsYXllciBzcGVjaWZpZWQgYnkgdGhlIEF1ZGlv
TGF5ZXIgZW51bWVyYXRvcgotICAvLyBpbiB0aGUgQXVkaW9EZXZpY2VNb2R1bGUgY2xhc3MuCi0g
IEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGF1ZGlvX2xheWVyXzsKLQotICAvLyBUaGlz
IG9iamVjdCBpcyB0aGUgZ2xvYmFsIGVudHJ5IHBvaW50IG9mIHRoZSBPcGVuU0wgRVMgQVBJLgot
ICAvLyBBZnRlciBjcmVhdGluZyB0aGUgZW5naW5lIG9iamVjdCwgdGhlIGFwcGxpY2F0aW9uIGNh
biBvYnRhaW4gdGhpcyBvYmplY3TigJhzCi0gIC8vIFNMRW5naW5lSXRmIGludGVyZmFjZS4gVGhp
cyBpbnRlcmZhY2UgY29udGFpbnMgY3JlYXRpb24gbWV0aG9kcyBmb3IgYWxsCi0gIC8vIHRoZSBv
dGhlciBvYmplY3QgdHlwZXMgaW4gdGhlIEFQSS4gTm9uZSBvZiB0aGVzZSBpbnRlcmZhY2UgYXJl
IHJlYWxpemVkCi0gIC8vIGJ5IHRoaXMgY2xhc3MuIEl0IG9ubHkgcHJvdmlkZXMgYWNjZXNzIHRv
IHRoZSBnbG9iYWwgZW5naW5lIG9iamVjdC4KLSAgd2VicnRjOjpTY29wZWRTTE9iamVjdEl0ZiBl
bmdpbmVfb2JqZWN0XzsKLQotICAvLyBTZXQgdG8gdHJ1ZSBieSBJbml0KCkgYW5kIGZhbHNlIGJ5
IENsb3NlKCkuCi0gIGJvb2wgaW5pdGlhbGl6ZWRfOwotCi0gIC8vIFRydWUgaWYgZGV2aWNlIHN1
cHBvcnRzIGhhcmR3YXJlIChvciBidWlsdC1pbikgQUVDLgotICBib29sIGhhcmR3YXJlX2FlY187
Ci0gIC8vIFRydWUgaWYgZGV2aWNlIHN1cHBvcnRzIGhhcmR3YXJlIChvciBidWlsdC1pbikgQUdD
LgotICBib29sIGhhcmR3YXJlX2FnY187Ci0gIC8vIFRydWUgaWYgZGV2aWNlIHN1cHBvcnRzIGhh
cmR3YXJlIChvciBidWlsdC1pbikgTlMuCi0gIGJvb2wgaGFyZHdhcmVfbnNfOwotCi0gIC8vIFRy
dWUgaWYgZGV2aWNlIHN1cHBvcnRzIHRoZSBsb3ctbGF0ZW5jeSBPcGVuU0wgRVMgYXVkaW8gcGF0
aCBmb3Igb3V0cHV0LgotICBib29sIGxvd19sYXRlbmN5X3BsYXlvdXRfOwotCi0gIC8vIFRydWUg
aWYgZGV2aWNlIHN1cHBvcnRzIHRoZSBsb3ctbGF0ZW5jeSBPcGVuU0wgRVMgYXVkaW8gcGF0aCBm
b3IgaW5wdXQuCi0gIGJvb2wgbG93X2xhdGVuY3lfcmVjb3JkXzsKLQotICAvLyBUcnVlIGlmIGRl
dmljZSBzdXBwb3J0cyB0aGUgbG93LWxhdGVuY3kgT3BlblNMIEVTIHByby1hdWRpbyBwYXRoLgot
ICBib29sIHByb19hdWRpb187Ci0KLSAgLy8gVGhlIGRlbGF5IGVzdGltYXRlIGNhbiB0YWtlIG9u
ZSBvZiB0d28gZml4ZWQgdmFsdWVzIGRlcGVuZGluZyBvbiBpZiB0aGUKLSAgLy8gZGV2aWNlIHN1
cHBvcnRzIGxvdy1sYXRlbmN5IG91dHB1dCBvciBub3QuCi0gIGludCBkZWxheV9lc3RpbWF0ZV9p
bl9taWxsaXNlY29uZHNfOwotCi0gIC8vIENvbnRhaW5zIG5hdGl2ZSBwYXJhbWV0ZXJzIChlLmcu
IHNhbXBsZSByYXRlLCBjaGFubmVsIGNvbmZpZ3VyYXRpb24pLgotICAvLyBTZXQgYXQgY29uc3Ry
dWN0aW9uIGluIE9uQ2FjaGVBdWRpb1BhcmFtZXRlcnMoKSB3aGljaCBpcyBjYWxsZWQgZnJvbQot
ICAvLyBKYXZhIG9uIHRoZSBzYW1lIHRocmVhZCBhcyB0aGlzIG9iamVjdCBpcyBjcmVhdGVkIG9u
LgotICBBdWRpb1BhcmFtZXRlcnMgcGxheW91dF9wYXJhbWV0ZXJzXzsKLSAgQXVkaW9QYXJhbWV0
ZXJzIHJlY29yZF9wYXJhbWV0ZXJzXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQot
I2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19NQU5B
R0VSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXJfdW5pdHRlc3QuY2MKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyX3VuaXR0ZXN0LmNjCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXJfdW5pdHRlc3QuY2MJ
KG5vbmV4aXN0ZW50KQpAQCAtMSwyMzEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIw
MTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgot
ICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBw
cm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5U
Uy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGlu
IHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0K
LSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0FuZHJvaWQuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9i
YXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2Zvcm1hdF9tYWNyb3MuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5h
Z2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYnVp
bGRfaW5mby5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2Vuc3VyZV9pbml0aWFsaXplZC5oIgotI2luY2x1ZGUgIndlYnJ0Yy90ZXN0L2d0ZXN0LmgiCi0K
LSNkZWZpbmUgUFJJTlQoLi4uKSBmcHJpbnRmKHN0ZGVyciwgX19WQV9BUkdTX18pOwotCi1uYW1l
c3BhY2Ugd2VicnRjIHsKLQotc3RhdGljIGNvbnN0IGNoYXIga1RhZ1tdID0gIiAgIjsKLQotY2xh
c3MgQXVkaW9NYW5hZ2VyVGVzdCA6IHB1YmxpYyA6OnRlc3Rpbmc6OlRlc3QgewotIHByb3RlY3Rl
ZDoKLSAgQXVkaW9NYW5hZ2VyVGVzdCgpIHsKLSAgICAvLyBPbmUtdGltZSBpbml0aWFsaXphdGlv
biBvZiBKVk0gYW5kIGFwcGxpY2F0aW9uIGNvbnRleHQuIEVuc3VyZXMgdGhhdCB3ZQotICAgIC8v
IGNhbiBkbyBjYWxscyBiZXR3ZWVuIEMrKyBhbmQgSmF2YS4KLSAgICB3ZWJydGM6OmF1ZGlvZGV2
aWNlbW9kdWxlOjpFbnN1cmVJbml0aWFsaXplZCgpOwotICAgIGF1ZGlvX21hbmFnZXJfLnJlc2V0
KG5ldyBBdWRpb01hbmFnZXIoKSk7Ci0gICAgU2V0QWN0aXZlQXVkaW9MYXllcigpOwotICAgIHBs
YXlvdXRfcGFyYW1ldGVyc18gPSBhdWRpb19tYW5hZ2VyKCktPkdldFBsYXlvdXRBdWRpb1BhcmFt
ZXRlcnMoKTsKLSAgICByZWNvcmRfcGFyYW1ldGVyc18gPSBhdWRpb19tYW5hZ2VyKCktPkdldFJl
Y29yZEF1ZGlvUGFyYW1ldGVycygpOwotICB9Ci0KLSAgQXVkaW9NYW5hZ2VyKiBhdWRpb19tYW5h
Z2VyKCkgY29uc3QgeyByZXR1cm4gYXVkaW9fbWFuYWdlcl8uZ2V0KCk7IH0KLQotICAvLyBBIHZh
bGlkIGF1ZGlvIGxheWVyIG11c3QgYWx3YXlzIGJlIHNldCBiZWZvcmUgY2FsbGluZyBJbml0KCks
IGhlbmNlIHdlCi0gIC8vIG1pZ2h0IGFzIHdlbGwgbWFrZSBpdCBhIHBhcnQgb2YgdGhlIHRlc3Qg
Zml4dHVyZS4KLSAgdm9pZCBTZXRBY3RpdmVBdWRpb0xheWVyKCkgewotICAgIEVYUEVDVF9FUSgw
LCBhdWRpb19tYW5hZ2VyKCktPkdldERlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcygpKTsKLSAg
ICBhdWRpb19tYW5hZ2VyKCktPlNldEFjdGl2ZUF1ZGlvTGF5ZXIoQXVkaW9EZXZpY2VNb2R1bGU6
OmtBbmRyb2lkSmF2YUF1ZGlvKTsKLSAgICBFWFBFQ1RfTkUoMCwgYXVkaW9fbWFuYWdlcigpLT5H
ZXREZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMoKSk7Ci0gIH0KLQotICAvLyBPbmUgd2F5IHRv
IGVuc3VyZSB0aGF0IHRoZSBlbmdpbmUgb2JqZWN0IGlzIHZhbGlkIGlzIHRvIGNyZWF0ZSBhbgot
ICAvLyBTTCBFbmdpbmUgaW50ZXJmYWNlIHNpbmNlIGl0IGV4cG9zZXMgY3JlYXRpb24gbWV0aG9k
cyBvZiBhbGwgdGhlIE9wZW5TTCBFUwotICAvLyBvYmplY3QgdHlwZXMgYW5kIGl0IGlzIG9ubHkg
c3VwcG9ydGVkIG9uIHRoZSBlbmdpbmUgb2JqZWN0LiBUaGlzIG1ldGhvZAotICAvLyBhbHNvIHZl
cmlmaWVzIHRoYXQgdGhlIGVuZ2luZSBpbnRlcmZhY2Ugc3VwcG9ydHMgYXQgbGVhc3Qgb25lIGlu
dGVyZmFjZS4KLSAgLy8gTm90ZSB0aGF0LCB0aGUgdGVzdCBiZWxvdyBpcyBub3QgYSBmdWxsIHRl
c3Qgb2YgdGhlIFNMRW5naW5lSXRmIG9iamVjdAotICAvLyBidXQgb25seSBhIHNpbXBsZSBzYW5p
dHkgdGVzdCB0byBjaGVjayB0aGF0IHRoZSBnbG9iYWwgZW5naW5lIG9iamVjdCBpcyBPSy4KLSAg
dm9pZCBWYWxpZGF0ZVNMRW5naW5lKFNMT2JqZWN0SXRmIGVuZ2luZV9vYmplY3QpIHsKLSAgICBF
WFBFQ1RfTkUobnVsbHB0ciwgZW5naW5lX29iamVjdCk7Ci0gICAgLy8gR2V0IHRoZSBTTCBFbmdp
bmUgaW50ZXJmYWNlIHdoaWNoIGlzIGV4cG9zZWQgYnkgdGhlIGVuZ2luZSBvYmplY3QuCi0gICAg
U0xFbmdpbmVJdGYgZW5naW5lOwotICAgIFNMcmVzdWx0IHJlc3VsdCA9Ci0gICAgICAgICgqZW5n
aW5lX29iamVjdCktPkdldEludGVyZmFjZShlbmdpbmVfb2JqZWN0LCBTTF9JSURfRU5HSU5FLCAm
ZW5naW5lKTsKLSAgICBFWFBFQ1RfRVEocmVzdWx0LCBTTF9SRVNVTFRfU1VDQ0VTUykgPDwgIkdl
dEludGVyZmFjZSgpIG9uIGVuZ2luZSBmYWlsZWQiOwotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBT
TCBFbmdpbmUgaW50ZXJmYWNlIGV4cG9zZXMgYXQgbGVhc3Qgb25lIGludGVyZmFjZS4KLSAgICBT
THVpbnQzMiBvYmplY3RfaWQgPSBTTF9PQkpFQ1RJRF9FTkdJTkU7Ci0gICAgU0x1aW50MzIgbnVt
X3N1cHBvcnRlZF9pbnRlcmZhY2VzID0gMDsKLSAgICByZXN1bHQgPSAoKmVuZ2luZSktPlF1ZXJ5
TnVtU3VwcG9ydGVkSW50ZXJmYWNlcyhlbmdpbmUsIG9iamVjdF9pZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtX3N1cHBvcnRlZF9pbnRl
cmZhY2VzKTsKLSAgICBFWFBFQ1RfRVEocmVzdWx0LCBTTF9SRVNVTFRfU1VDQ0VTUykKLSAgICAg
ICAgPDwgIlF1ZXJ5TnVtU3VwcG9ydGVkSW50ZXJmYWNlcygpIGZhaWxlZCI7Ci0gICAgRVhQRUNU
X0dFKG51bV9zdXBwb3J0ZWRfaW50ZXJmYWNlcywgMXUpOwotICB9Ci0KLSAgc3RkOjp1bmlxdWVf
cHRyPEF1ZGlvTWFuYWdlcj4gYXVkaW9fbWFuYWdlcl87Ci0gIEF1ZGlvUGFyYW1ldGVycyBwbGF5
b3V0X3BhcmFtZXRlcnNfOwotICBBdWRpb1BhcmFtZXRlcnMgcmVjb3JkX3BhcmFtZXRlcnNfOwot
fTsKLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIENvbnN0cnVjdERlc3RydWN0KSB7Ci19Ci0K
LS8vIEl0IHNob3VsZCBub3QgYmUgcG9zc2libGUgdG8gY3JlYXRlIGFuIE9wZW5TTCBlbmdpbmUg
b2JqZWN0IGlmIEphdmEgYmFzZWQKLS8vIGF1ZGlvIGlzIHJlcXVlc3RlZCBpbiBib3RoIGRpcmVj
dGlvbnMuCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgR2V0T3BlblNMRW5naW5lU2hvdWxkRmFp
bEZvckphdmFBdWRpb0xheWVyKSB7Ci0gIGF1ZGlvX21hbmFnZXIoKS0+U2V0QWN0aXZlQXVkaW9M
YXllcihBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRKYXZhQXVkaW8pOwotICBTTE9iamVjdEl0
ZiBlbmdpbmVfb2JqZWN0ID0gYXVkaW9fbWFuYWdlcigpLT5HZXRPcGVuU0xFbmdpbmUoKTsKLSAg
RVhQRUNUX0VRKG51bGxwdHIsIGVuZ2luZV9vYmplY3QpOwotfQotCi0vLyBJdCBzaG91bGQgYmUg
cG9zc2libGUgdG8gY3JlYXRlIGFuIE9wZW5TTCBlbmdpbmUgb2JqZWN0IGlmIE9wZW5TTCBFUyBi
YXNlZAotLy8gYXVkaW8gaXMgcmVxdWVzdGVkIGluIGFueSBkaXJlY3Rpb24uCi1URVNUX0YoQXVk
aW9NYW5hZ2VyVGVzdCwgR2V0T3BlblNMRW5naW5lU2hvdWxkU3VjY2VlZEZvck9wZW5TTEVTQXVk
aW9MYXllcikgewotICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBhdWRpbyBsYXllcnMgdGhhdCB1c2Vz
IE9wZW5TTCBFUyBhdWRpby4KLSAgY29uc3QgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIg
b3BlbnNsZXNfYXVkaW9bXSA9IHsKLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZE9w
ZW5TTEVTQXVkaW8sCi0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6a0FuZHJvaWRKYXZhSW5wdXRB
bmRPcGVuU0xFU091dHB1dEF1ZGlvfTsKLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIGdsb2JhbCAoc2lu
Z2xldG9uKSBPcGVuU0wgRW5naW5lIGNhbiBiZSBhY3F1aXJlZCBmb3IgYWxsCi0gIC8vIGF1ZGlv
IGxheWVzIHRoYXQgdXNlcyBPcGVuU0wgRVMuIE5vdGUgdGhhdCB0aGUgZW5naW5lIGlzIG9ubHkg
Y3JlYXRlZCBvbmNlLgotICBmb3IgKGNvbnN0IEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVy
IGF1ZGlvX2xheWVyIDogb3BlbnNsZXNfYXVkaW8pIHsKLSAgICBhdWRpb19tYW5hZ2VyKCktPlNl
dEFjdGl2ZUF1ZGlvTGF5ZXIoYXVkaW9fbGF5ZXIpOwotICAgIFNMT2JqZWN0SXRmIGVuZ2luZV9v
YmplY3QgPSBhdWRpb19tYW5hZ2VyKCktPkdldE9wZW5TTEVuZ2luZSgpOwotICAgIEVYUEVDVF9O
RShudWxscHRyLCBlbmdpbmVfb2JqZWN0KTsKLSAgICAvLyBQZXJmb3JtIGEgc2ltcGxlIHNhbml0
eSBjaGVjayBvZiB0aGUgY3JlYXRlZCBlbmdpbmUgb2JqZWN0LgotICAgIFZhbGlkYXRlU0xFbmdp
bmUoZW5naW5lX29iamVjdCk7Ci0gIH0KLX0KLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIElu
aXRDbG9zZSkgewotICBFWFBFQ1RfVFJVRShhdWRpb19tYW5hZ2VyKCktPkluaXQoKSk7Ci0gIEVY
UEVDVF9UUlVFKGF1ZGlvX21hbmFnZXIoKS0+Q2xvc2UoKSk7Ci19Ci0KLVRFU1RfRihBdWRpb01h
bmFnZXJUZXN0LCBJc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKSB7Ci0gIFBSSU5UKCIl
c0Fjb3VzdGljIEVjaG8gQ2FuY2VsZXIgc3VwcG9ydDogJXNcbiIsIGtUYWcsCi0gICAgICAgIGF1
ZGlvX21hbmFnZXIoKS0+SXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpID8gIlllcyIg
OiAiTm8iKTsKLX0KLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIElzQXV0b21hdGljR2FpbkNv
bnRyb2xTdXBwb3J0ZWQpIHsKLSAgRVhQRUNUX0ZBTFNFKGF1ZGlvX21hbmFnZXIoKS0+SXNBdXRv
bWF0aWNHYWluQ29udHJvbFN1cHBvcnRlZCgpKTsKLX0KLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRl
c3QsIElzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKSB7Ci0gIFBSSU5UKCIlc05vaXNlIFN1cHBy
ZXNzb3Igc3VwcG9ydDogJXNcbiIsIGtUYWcsCi0gICAgICAgIGF1ZGlvX21hbmFnZXIoKS0+SXNO
b2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSA/ICJZZXMiIDogIk5vIik7Ci19Ci0KLVRFU1RfRihB
dWRpb01hbmFnZXJUZXN0LCBJc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKSB7Ci0gIFBSSU5U
KCIlc0xvdyBsYXRlbmN5IG91dHB1dCBzdXBwb3J0OiAlc1xuIiwga1RhZywKLSAgICAgICAgYXVk
aW9fbWFuYWdlcigpLT5Jc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCkgPyAiWWVzIiA6ICJO
byIpOwotfQotCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgSXNMb3dMYXRlbmN5UmVjb3JkU3Vw
cG9ydGVkKSB7Ci0gIFBSSU5UKCIlc0xvdyBsYXRlbmN5IGlucHV0IHN1cHBvcnQ6ICVzXG4iLCBr
VGFnLAotICAgICAgICBhdWRpb19tYW5hZ2VyKCktPklzTG93TGF0ZW5jeVJlY29yZFN1cHBvcnRl
ZCgpID8gIlllcyIgOiAiTm8iKTsKLX0KLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIElzUHJv
QXVkaW9TdXBwb3J0ZWQpIHsKLSAgUFJJTlQoIiVzUHJvIGF1ZGlvIHN1cHBvcnQ6ICVzXG4iLCBr
VGFnLAotICAgICAgICBhdWRpb19tYW5hZ2VyKCktPklzUHJvQXVkaW9TdXBwb3J0ZWQoKSA/ICJZ
ZXMiIDogIk5vIik7Ci19Ci0KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBTaG93QXVkaW9QYXJh
bWV0ZXJJbmZvKSB7Ci0gIGNvbnN0IGJvb2wgbG93X2xhdGVuY3lfb3V0ID0gYXVkaW9fbWFuYWdl
cigpLT5Jc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCk7Ci0gIGNvbnN0IGJvb2wgbG93X2xh
dGVuY3lfaW4gPSBhdWRpb19tYW5hZ2VyKCktPklzTG93TGF0ZW5jeVJlY29yZFN1cHBvcnRlZCgp
OwotICBQUklOVCgiUExBWU9VVDpcbiIpOwotICBQUklOVCgiJXNhdWRpbyBsYXllcjogJXNcbiIs
IGtUYWcsCi0gICAgICAgIGxvd19sYXRlbmN5X291dCA/ICJMb3cgbGF0ZW5jeSBPcGVuU0wiIDog
IkphdmEvSk5JIGJhc2VkIEF1ZGlvVHJhY2siKTsKLSAgUFJJTlQoIiVzc2FtcGxlIHJhdGU6ICVk
IEh6XG4iLCBrVGFnLCBwbGF5b3V0X3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCkpOwotICBQUklO
VCgiJXNjaGFubmVsczogJSIgUFJJdVMgIlxuIiwga1RhZywgcGxheW91dF9wYXJhbWV0ZXJzXy5j
aGFubmVscygpKTsKLSAgUFJJTlQoIiVzZnJhbWVzIHBlciBidWZmZXI6ICUiIFBSSXVTICIgPD0+
ICUuMmYgbXNcbiIsIGtUYWcsCi0gICAgICAgIHBsYXlvdXRfcGFyYW1ldGVyc18uZnJhbWVzX3Bl
cl9idWZmZXIoKSwKLSAgICAgICAgcGxheW91dF9wYXJhbWV0ZXJzXy5HZXRCdWZmZXJTaXplSW5N
aWxsaXNlY29uZHMoKSk7Ci0gIFBSSU5UKCJSRUNPUkQ6IFxuIik7Ci0gIFBSSU5UKCIlc2F1ZGlv
IGxheWVyOiAlc1xuIiwga1RhZywKLSAgICAgICAgbG93X2xhdGVuY3lfaW4gPyAiTG93IGxhdGVu
Y3kgT3BlblNMIiA6ICJKYXZhL0pOSSBiYXNlZCBBdWRpb1JlY29yZCIpOwotICBQUklOVCgiJXNz
YW1wbGUgcmF0ZTogJWQgSHpcbiIsIGtUYWcsIHJlY29yZF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0
ZSgpKTsKLSAgUFJJTlQoIiVzY2hhbm5lbHM6ICUiIFBSSXVTICJcbiIsIGtUYWcsIHJlY29yZF9w
YXJhbWV0ZXJzXy5jaGFubmVscygpKTsKLSAgUFJJTlQoIiVzZnJhbWVzIHBlciBidWZmZXI6ICUi
IFBSSXVTICIgPD0+ICUuMmYgbXNcbiIsIGtUYWcsCi0gICAgICAgIHJlY29yZF9wYXJhbWV0ZXJz
Xy5mcmFtZXNfcGVyX2J1ZmZlcigpLAotICAgICAgICByZWNvcmRfcGFyYW1ldGVyc18uR2V0QnVm
ZmVyU2l6ZUluTWlsbGlzZWNvbmRzKCkpOwotfQotCi0vLyBUaGUgYXVkaW8gZGV2aWNlIG1vZHVs
ZSBvbmx5IHN1cHBvcnMgdGhlIHNhbWUgc2FtcGxlIHJhdGUgaW4gYm90aCBkaXJlY3Rpb25zLgot
Ly8gSW4gYWRkaXRpb24sIGluIGZ1bGwtZHVwbGV4IGxvdy1sYXRlbmN5IG1vZGUgKE9wZW5TTCBF
UyksIGJvdGggaW5wdXQgYW5kCi0vLyBvdXRwdXQgbXVzdCB1c2UgdGhlIHNhbWUgbmF0aXZlIGJ1
ZmZlciBzaXplIHRvIGFsbG93IGZvciB1c2FnZSBvZiB0aGUgZmFzdAotLy8gYXVkaW8gdHJhY2sg
aW4gQW5kcm9pZC4KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBWZXJpZnlBdWRpb1BhcmFtZXRl
cnMpIHsKLSAgY29uc3QgYm9vbCBsb3dfbGF0ZW5jeV9vdXQgPSBhdWRpb19tYW5hZ2VyKCktPklz
TG93TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQoKTsKLSAgY29uc3QgYm9vbCBsb3dfbGF0ZW5jeV9p
biA9IGF1ZGlvX21hbmFnZXIoKS0+SXNMb3dMYXRlbmN5UmVjb3JkU3VwcG9ydGVkKCk7Ci0gIEVY
UEVDVF9FUShwbGF5b3V0X3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCksCi0gICAgICAgICAgICBy
ZWNvcmRfcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKSk7Ci0gIGlmIChsb3dfbGF0ZW5jeV9vdXQg
JiYgbG93X2xhdGVuY3lfaW4pIHsKLSAgICBFWFBFQ1RfRVEocGxheW91dF9wYXJhbWV0ZXJzXy5m
cmFtZXNfcGVyX2J1ZmZlcigpLAotICAgICAgICAgICAgICByZWNvcmRfcGFyYW1ldGVyc18uZnJh
bWVzX3Blcl9idWZmZXIoKSk7Ci0gIH0KLX0KLQotLy8gQWRkIGRldmljZS1zcGVjaWZpYyBpbmZv
cm1hdGlvbiB0byB0aGUgdGVzdCBmb3IgbG9nZ2luZyBwdXJwb3Nlcy4KLVRFU1RfRihBdWRpb01h
bmFnZXJUZXN0LCBTaG93RGV2aWNlSW5mbykgewotICBCdWlsZEluZm8gYnVpbGRfaW5mbzsKLSAg
UFJJTlQoIiVzbW9kZWw6ICVzXG4iLCBrVGFnLCBidWlsZF9pbmZvLkdldERldmljZU1vZGVsKCku
Y19zdHIoKSk7Ci0gIFBSSU5UKCIlc2JyYW5kOiAlc1xuIiwga1RhZywgYnVpbGRfaW5mby5HZXRC
cmFuZCgpLmNfc3RyKCkpOwotICBQUklOVCgiJXNtYW51ZmFjdHVyZXI6ICVzXG4iLAotICAgICAg
ICBrVGFnLCBidWlsZF9pbmZvLkdldERldmljZU1hbnVmYWN0dXJlcigpLmNfc3RyKCkpOwotfQot
Ci0vLyBBZGQgQW5kcm9pZCBidWlsZCBpbmZvcm1hdGlvbiB0byB0aGUgdGVzdCBmb3IgbG9nZ2lu
ZyBwdXJwb3Nlcy4KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBTaG93QnVpbGRJbmZvKSB7Ci0g
IEJ1aWxkSW5mbyBidWlsZF9pbmZvOwotICBQUklOVCgiJXNidWlsZCByZWxlYXNlOiAlc1xuIiwg
a1RhZywgYnVpbGRfaW5mby5HZXRCdWlsZFJlbGVhc2UoKS5jX3N0cigpKTsKLSAgUFJJTlQoIiVz
YnVpbGQgaWQ6ICVzXG4iLCBrVGFnLCBidWlsZF9pbmZvLkdldEFuZHJvaWRCdWlsZElkKCkuY19z
dHIoKSk7Ci0gIFBSSU5UKCIlc2J1aWxkIHR5cGU6ICVzXG4iLCBrVGFnLCBidWlsZF9pbmZvLkdl
dEJ1aWxkVHlwZSgpLmNfc3RyKCkpOwotICBQUklOVCgiJXNTREsgdmVyc2lvbjogJWRcbiIsIGtU
YWcsIGJ1aWxkX2luZm8uR2V0U2RrVmVyc2lvbigpKTsKLX0KLQotLy8gQmFzaWMgdGVzdCBvZiB0
aGUgQXVkaW9QYXJhbWV0ZXJzIGNsYXNzIHVzaW5nIGRlZmF1bHQgY29uc3RydWN0aW9uIHdoZXJl
Ci0vLyBhbGwgbWVtYmVycyBhcmUgc2V0IHRvIHplcm8uCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVz
dCwgQXVkaW9QYXJhbWV0ZXJzV2l0aERlZmF1bHRDb25zdHJ1Y3Rpb24pIHsKLSAgQXVkaW9QYXJh
bWV0ZXJzIHBhcmFtczsKLSAgRVhQRUNUX0ZBTFNFKHBhcmFtcy5pc192YWxpZCgpKTsKLSAgRVhQ
RUNUX0VRKDAsIHBhcmFtcy5zYW1wbGVfcmF0ZSgpKTsKLSAgRVhQRUNUX0VRKDBVLCBwYXJhbXMu
Y2hhbm5lbHMoKSk7Ci0gIEVYUEVDVF9FUSgwVSwgcGFyYW1zLmZyYW1lc19wZXJfYnVmZmVyKCkp
OwotICBFWFBFQ1RfRVEoMFUsIHBhcmFtcy5mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCkpOwotICBF
WFBFQ1RfRVEoMFUsIHBhcmFtcy5HZXRCeXRlc1BlckZyYW1lKCkpOwotICBFWFBFQ1RfRVEoMFUs
IHBhcmFtcy5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDBVLCBwYXJhbXMuR2V0
Qnl0ZXNQZXIxMG1zQnVmZmVyKCkpOwotICBFWFBFQ1RfRVEoMC4wZiwgcGFyYW1zLkdldEJ1ZmZl
clNpemVJbk1pbGxpc2Vjb25kcygpKTsKLX0KLQotLy8gQmFzaWMgdGVzdCBvZiB0aGUgQXVkaW9Q
YXJhbWV0ZXJzIGNsYXNzIHVzaW5nIG5vbiBkZWZhdWx0IGNvbnN0cnVjdGlvbi4KLVRFU1RfRihB
dWRpb01hbmFnZXJUZXN0LCBBdWRpb1BhcmFtZXRlcnNXaXRoTm9uRGVmYXVsdENvbnN0cnVjdGlv
bikgewotICBjb25zdCBpbnQga1NhbXBsZVJhdGUgPSA0ODAwMDsKLSAgY29uc3Qgc2l6ZV90IGtD
aGFubmVscyA9IDE7Ci0gIGNvbnN0IHNpemVfdCBrRnJhbWVzUGVyQnVmZmVyID0gNDgwOwotICBj
b25zdCBzaXplX3Qga0ZyYW1lc1BlcjEwbXNCdWZmZXIgPSA0ODA7Ci0gIGNvbnN0IHNpemVfdCBr
Qnl0ZXNQZXJGcmFtZSA9IDI7Ci0gIGNvbnN0IGZsb2F0IGtCdWZmZXJTaXplSW5NcyA9IDEwLjBm
OwotICBBdWRpb1BhcmFtZXRlcnMgcGFyYW1zKGtTYW1wbGVSYXRlLCBrQ2hhbm5lbHMsIGtGcmFt
ZXNQZXJCdWZmZXIpOwotICBFWFBFQ1RfVFJVRShwYXJhbXMuaXNfdmFsaWQoKSk7Ci0gIEVYUEVD
VF9FUShrU2FtcGxlUmF0ZSwgcGFyYW1zLnNhbXBsZV9yYXRlKCkpOwotICBFWFBFQ1RfRVEoa0No
YW5uZWxzLCBwYXJhbXMuY2hhbm5lbHMoKSk7Ci0gIEVYUEVDVF9FUShrRnJhbWVzUGVyQnVmZmVy
LCBwYXJhbXMuZnJhbWVzX3Blcl9idWZmZXIoKSk7Ci0gIEVYUEVDVF9FUShzdGF0aWNfY2FzdDxz
aXplX3Q+KGtTYW1wbGVSYXRlIC8gMTAwKSwKLSAgICAgICAgICAgIHBhcmFtcy5mcmFtZXNfcGVy
XzEwbXNfYnVmZmVyKCkpOwotICBFWFBFQ1RfRVEoa0J5dGVzUGVyRnJhbWUsIHBhcmFtcy5HZXRC
eXRlc1BlckZyYW1lKCkpOwotICBFWFBFQ1RfRVEoa0J5dGVzUGVyRnJhbWUgKiBrRnJhbWVzUGVy
QnVmZmVyLCBwYXJhbXMuR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIEVYUEVDVF9FUShrQnl0ZXNQ
ZXJGcmFtZSAqIGtGcmFtZXNQZXIxMG1zQnVmZmVyLAotICAgICAgICAgICAgcGFyYW1zLkdldEJ5
dGVzUGVyMTBtc0J1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKGtCdWZmZXJTaXplSW5NcywgcGFyYW1z
LkdldEJ1ZmZlclNpemVJbk1pbGxpc2Vjb25kcygpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdl
YnJ0YwotCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX3JlY29yZF9qbmkuY2MKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNvcmRfam5pLmNjCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX3JlY29yZF9qbmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAt
MSwyNTYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMv
bW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNvcmRfam5pLmgiCi0KLSNpbmNs
dWRlIDx1dGlsaXR5PgotCi0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KLQotI2luY2x1ZGUgIndl
YnJ0Yy9iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2Zvcm1hdF9tYWNyb3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMv
bW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaCIKLQotI2RlZmluZSBU
QUcgIkF1ZGlvUmVjb3JkSm5pIgotI2RlZmluZSBBTE9HViguLi4pIF9fYW5kcm9pZF9sb2dfcHJp
bnQoQU5EUk9JRF9MT0dfVkVSQk9TRSwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR0Qo
Li4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCBUQUcsIF9fVkFfQVJH
U19fKQotI2RlZmluZSBBTE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0df
RVJST1IsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dXKC4uLikgX19hbmRyb2lkX2xv
Z19wcmludChBTkRST0lEX0xPR19XQVJOLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9H
SSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgVEFHLCBfX1ZBX0FS
R1NfXykKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIEF1ZGlvUmVjb3JkSm5pOjpKYXZhQXVk
aW9SZWNvcmQgaW1wbGVtZW50YXRpb24uCi1BdWRpb1JlY29yZEpuaTo6SmF2YUF1ZGlvUmVjb3Jk
OjpKYXZhQXVkaW9SZWNvcmQoCi0gICAgTmF0aXZlUmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVnLAot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX3JlY29yZCkKLSAgICA6IGF1ZGlv
X3JlY29yZF8oc3RkOjptb3ZlKGF1ZGlvX3JlY29yZCkpLAotICAgICAgaW5pdF9yZWNvcmRpbmdf
KG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJpbml0UmVjb3JkaW5nIiwgIihJSSlJIikpLAotICAg
ICAgc3RhcnRfcmVjb3JkaW5nXyhuYXRpdmVfcmVnLT5HZXRNZXRob2RJZCgic3RhcnRSZWNvcmRp
bmciLCAiKClaIikpLAotICAgICAgc3RvcF9yZWNvcmRpbmdfKG5hdGl2ZV9yZWctPkdldE1ldGhv
ZElkKCJzdG9wUmVjb3JkaW5nIiwgIigpWiIpKSwKLSAgICAgIGVuYWJsZV9idWlsdF9pbl9hZWNf
KG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJlbmFibGVCdWlsdEluQUVDIiwgIihaKVoiKSksCi0g
ICAgICBlbmFibGVfYnVpbHRfaW5fbnNfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJlbmFibGVC
dWlsdEluTlMiLCAiKFopWiIpKSB7fQotCi1BdWRpb1JlY29yZEpuaTo6SmF2YUF1ZGlvUmVjb3Jk
Ojp+SmF2YUF1ZGlvUmVjb3JkKCkge30KLQotaW50IEF1ZGlvUmVjb3JkSm5pOjpKYXZhQXVkaW9S
ZWNvcmQ6OkluaXRSZWNvcmRpbmcoCi0gICAgaW50IHNhbXBsZV9yYXRlLCBzaXplX3QgY2hhbm5l
bHMpIHsKLSAgcmV0dXJuIGF1ZGlvX3JlY29yZF8tPkNhbGxJbnRNZXRob2QoaW5pdF9yZWNvcmRp
bmdfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxq
aW50PihzYW1wbGVfcmF0ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PGppbnQ+KGNoYW5uZWxzKSk7Ci19Ci0KLWJvb2wgQXVkaW9SZWNvcmRKbmk6
OkphdmFBdWRpb1JlY29yZDo6U3RhcnRSZWNvcmRpbmcoKSB7Ci0gIHJldHVybiBhdWRpb19yZWNv
cmRfLT5DYWxsQm9vbGVhbk1ldGhvZChzdGFydF9yZWNvcmRpbmdfKTsKLX0KLQotYm9vbCBBdWRp
b1JlY29yZEpuaTo6SmF2YUF1ZGlvUmVjb3JkOjpTdG9wUmVjb3JkaW5nKCkgewotICByZXR1cm4g
YXVkaW9fcmVjb3JkXy0+Q2FsbEJvb2xlYW5NZXRob2Qoc3RvcF9yZWNvcmRpbmdfKTsKLX0KLQot
Ym9vbCBBdWRpb1JlY29yZEpuaTo6SmF2YUF1ZGlvUmVjb3JkOjpFbmFibGVCdWlsdEluQUVDKGJv
b2wgZW5hYmxlKSB7Ci0gIHJldHVybiBhdWRpb19yZWNvcmRfLT5DYWxsQm9vbGVhbk1ldGhvZChl
bmFibGVfYnVpbHRfaW5fYWVjXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PGpib29sZWFuPihlbmFibGUpKTsKLX0KLQotYm9vbCBBdWRpb1Jl
Y29yZEpuaTo6SmF2YUF1ZGlvUmVjb3JkOjpFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpIHsK
LSAgcmV0dXJuIGF1ZGlvX3JlY29yZF8tPkNhbGxCb29sZWFuTWV0aG9kKGVuYWJsZV9idWlsdF9p
bl9uc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxqYm9vbGVhbj4oZW5hYmxlKSk7Ci19Ci0KLS8vIEF1ZGlvUmVjb3JkSm5pIGltcGxlbWVu
dGF0aW9uLgotQXVkaW9SZWNvcmRKbmk6OkF1ZGlvUmVjb3JkSm5pKEF1ZGlvTWFuYWdlciogYXVk
aW9fbWFuYWdlcikKLSAgICA6IGpfZW52aXJvbm1lbnRfKEpWTTo6R2V0SW5zdGFuY2UoKS0+ZW52
aXJvbm1lbnQoKSksCi0gICAgICBhdWRpb19tYW5hZ2VyXyhhdWRpb19tYW5hZ2VyKSwKLSAgICAg
IGF1ZGlvX3BhcmFtZXRlcnNfKGF1ZGlvX21hbmFnZXItPkdldFJlY29yZEF1ZGlvUGFyYW1ldGVy
cygpKSwKLSAgICAgIHRvdGFsX2RlbGF5X2luX21pbGxpc2Vjb25kc18oMCksCi0gICAgICBkaXJl
Y3RfYnVmZmVyX2FkZHJlc3NfKG51bGxwdHIpLAotICAgICAgZGlyZWN0X2J1ZmZlcl9jYXBhY2l0
eV9pbl9ieXRlc18oMCksCi0gICAgICBmcmFtZXNfcGVyX2J1ZmZlcl8oMCksCi0gICAgICBpbml0
aWFsaXplZF8oZmFsc2UpLAotICAgICAgcmVjb3JkaW5nXyhmYWxzZSksCi0gICAgICBhdWRpb19k
ZXZpY2VfYnVmZmVyXyhudWxscHRyKSB7Ci0gIEFMT0dEKCJjdG9yJXMiLCBHZXRUaHJlYWRJbmZv
KCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0soYXVkaW9fcGFyYW1ldGVyc18uaXNfdmFsaWQoKSk7
Ci0gIFJUQ19DSEVDSyhqX2Vudmlyb25tZW50Xyk7Ci0gIEpOSU5hdGl2ZU1ldGhvZCBuYXRpdmVf
bWV0aG9kc1tdID0gewotICAgICAgeyJuYXRpdmVDYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MiLCAi
KExqYXZhL25pby9CeXRlQnVmZmVyO0opViIsCi0gICAgICByZWludGVycHJldF9jYXN0PHZvaWQq
PigKLSAgICAgICAgICAmd2VicnRjOjpBdWRpb1JlY29yZEpuaTo6Q2FjaGVEaXJlY3RCdWZmZXJB
ZGRyZXNzKX0sCi0gICAgICB7Im5hdGl2ZURhdGFJc1JlY29yZGVkIiwgIihJSilWIiwKLSAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ3ZWJydGM6OkF1ZGlvUmVjb3JkSm5pOjpEYXRhSXNS
ZWNvcmRlZCl9fTsKLSAgal9uYXRpdmVfcmVnaXN0cmF0aW9uXyA9IGpfZW52aXJvbm1lbnRfLT5S
ZWdpc3Rlck5hdGl2ZXMoCi0gICAgICAib3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRp
b1JlY29yZCIsIG5hdGl2ZV9tZXRob2RzLAotICAgICAgYXJyYXlzaXplKG5hdGl2ZV9tZXRob2Rz
KSk7Ci0gIGpfYXVkaW9fcmVjb3JkXy5yZXNldChuZXcgSmF2YUF1ZGlvUmVjb3JkKAotICAgICAg
al9uYXRpdmVfcmVnaXN0cmF0aW9uXy5nZXQoKSwKLSAgICAgIGpfbmF0aXZlX3JlZ2lzdHJhdGlv
bl8tPk5ld09iamVjdCgKLSAgICAgICAgICAiPGluaXQ+IiwgIihMYW5kcm9pZC9jb250ZW50L0Nv
bnRleHQ7SilWIiwKLSAgICAgICAgICBKVk06OkdldEluc3RhbmNlKCktPmNvbnRleHQoKSwgUG9p
bnRlclRvamxvbmcodGhpcykpKSk7Ci0gIC8vIERldGFjaCBmcm9tIHRoaXMgdGhyZWFkIHNpbmNl
IHdlIHdhbnQgdG8gdXNlIHRoZSBjaGVja2VyIHRvIHZlcmlmeSBjYWxscwotICAvLyBmcm9tIHRo
ZSBKYXZhIGJhc2VkIGF1ZGlvIHRocmVhZC4KLSAgdGhyZWFkX2NoZWNrZXJfamF2YV8uRGV0YWNo
RnJvbVRocmVhZCgpOwotfQotCi1BdWRpb1JlY29yZEpuaTo6fkF1ZGlvUmVjb3JkSm5pKCkgewot
ICBBTE9HRCgifmR0b3IlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVD
Syh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgVGVybWluYXRlKCk7
Ci19Ci0KLWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OkluaXQoKSB7Ci0gIEFMT0dEKCJJbml0JXMi
LCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJf
LkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQzMl90IEF1ZGlv
UmVjb3JkSm5pOjpUZXJtaW5hdGUoKSB7Ci0gIEFMT0dEKCJUZXJtaW5hdGUlcyIsIEdldFRocmVh
ZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25W
YWxpZFRocmVhZCgpKTsKLSAgU3RvcFJlY29yZGluZygpOwotICByZXR1cm4gMDsKLX0KLQotaW50
MzJfdCBBdWRpb1JlY29yZEpuaTo6SW5pdFJlY29yZGluZygpIHsKLSAgQUxPR0QoIkluaXRSZWNv
cmRpbmclcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDSyghaW5pdGlhbGl6
ZWRfKTsKLSAgUlRDX0RDSEVDSyghcmVjb3JkaW5nXyk7Ci0gIGludCBmcmFtZXNfcGVyX2J1ZmZl
ciA9IGpfYXVkaW9fcmVjb3JkXy0+SW5pdFJlY29yZGluZygKLSAgICAgIGF1ZGlvX3BhcmFtZXRl
cnNfLnNhbXBsZV9yYXRlKCksIGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCkpOwotICBpZiAo
ZnJhbWVzX3Blcl9idWZmZXIgPCAwKSB7Ci0gICAgQUxPR0UoIkluaXRSZWNvcmRpbmcgZmFpbGVk
ISIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBmcmFtZXNfcGVyX2J1ZmZlcl8gPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGZyYW1lc19wZXJfYnVmZmVyKTsKLSAgQUxPR0QoImZyYW1lc19wZXJfYnVm
ZmVyOiAlIiBQUkl1UywgZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgUlRDX0NIRUNLX0VRKGRpcmVj
dF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfLAotICAgICAgICAgICAgICAgZnJhbWVzX3Blcl9i
dWZmZXJfICoga0J5dGVzUGVyRnJhbWUpOwotICBSVENfQ0hFQ0tfRVEoZnJhbWVzX3Blcl9idWZm
ZXJfLCBhdWRpb19wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyXzEwbXNfYnVmZmVyKCkpOwotICBpbml0
aWFsaXplZF8gPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQotaW50MzJfdCBBdWRpb1JlY29yZEpu
aTo6U3RhcnRSZWNvcmRpbmcoKSB7Ci0gIEFMT0dEKCJTdGFydFJlY29yZGluZyVzIiwgR2V0VGhy
ZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRP
blZhbGlkVGhyZWFkKCkpOwotICBSVENfRENIRUNLKGluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hF
Q0soIXJlY29yZGluZ18pOwotICBpZiAoIWpfYXVkaW9fcmVjb3JkXy0+U3RhcnRSZWNvcmRpbmco
KSkgewotICAgIEFMT0dFKCJTdGFydFJlY29yZGluZyBmYWlsZWQhIik7Ci0gICAgcmV0dXJuIC0x
OwotICB9Ci0gIHJlY29yZGluZ18gPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQotaW50MzJfdCBB
dWRpb1JlY29yZEpuaTo6U3RvcFJlY29yZGluZygpIHsKLSAgQUxPR0QoIlN0b3BSZWNvcmRpbmcl
cyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tl
cl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKCFpbml0aWFsaXplZF8gfHwgIXJlY29y
ZGluZ18pIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWpfYXVkaW9fcmVjb3JkXy0+U3Rv
cFJlY29yZGluZygpKSB7Ci0gICAgQUxPR0UoIlN0b3BSZWNvcmRpbmcgZmFpbGVkISIpOwotICAg
IHJldHVybiAtMTsKLSAgfQotICAvLyBJZiB3ZSBkb24ndCBkZXRhY2ggaGVyZSwgd2Ugd2lsbCBo
aXQgYSBSVENfRENIRUNLIGluIE9uRGF0YUlzUmVjb3JkZWQoKQotICAvLyBuZXh0IHRpbWUgU3Rh
cnRSZWNvcmRpbmcoKSBpcyBjYWxsZWQgc2luY2UgaXQgd2lsbCBjcmVhdGUgYSBuZXcgSmF2YQot
ICAvLyB0aHJlYWQuCi0gIHRocmVhZF9jaGVja2VyX2phdmFfLkRldGFjaEZyb21UaHJlYWQoKTsK
LSAgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0gIHJlY29yZGluZ18gPSBmYWxzZTsKLSAgZGlyZWN0
X2J1ZmZlcl9hZGRyZXNzXz0gbnVsbHB0cjsKLSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQXVkaW9S
ZWNvcmRKbmk6OkF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb0J1ZmZl
cikgewotICBBTE9HRCgiQXR0YWNoQXVkaW9CdWZmZXIiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8g
PSBhdWRpb0J1ZmZlcjsKLSAgY29uc3QgaW50IHNhbXBsZV9yYXRlX2h6ID0gYXVkaW9fcGFyYW1l
dGVyc18uc2FtcGxlX3JhdGUoKTsKLSAgQUxPR0QoIlNldFJlY29yZGluZ1NhbXBsZVJhdGUoJWQp
Iiwgc2FtcGxlX3JhdGVfaHopOwotICBhdWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0UmVjb3JkaW5n
U2FtcGxlUmF0ZShzYW1wbGVfcmF0ZV9oeik7Ci0gIGNvbnN0IHNpemVfdCBjaGFubmVscyA9IGF1
ZGlvX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7Ci0gIEFMT0dEKCJTZXRSZWNvcmRpbmdDaGFubmVs
cyglIiBQUkl1UyAiKSIsIGNoYW5uZWxzKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJl
Y29yZGluZ0NoYW5uZWxzKGNoYW5uZWxzKTsKLSAgdG90YWxfZGVsYXlfaW5fbWlsbGlzZWNvbmRz
XyA9Ci0gICAgICBhdWRpb19tYW5hZ2VyXy0+R2V0RGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRz
KCk7Ci0gIFJUQ19EQ0hFQ0tfR1QodG90YWxfZGVsYXlfaW5fbWlsbGlzZWNvbmRzXywgMCk7Ci0g
IEFMT0dEKCJ0b3RhbF9kZWxheV9pbl9taWxsaXNlY29uZHM6ICVkIiwgdG90YWxfZGVsYXlfaW5f
bWlsbGlzZWNvbmRzXyk7Ci19Ci0KLWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OkVuYWJsZUJ1aWx0
SW5BRUMoYm9vbCBlbmFibGUpIHsKLSAgQUxPR0QoIkVuYWJsZUJ1aWx0SW5BRUMlcyIsIEdldFRo
cmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVk
T25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIGpfYXVkaW9fcmVjb3JkXy0+RW5hYmxlQnVpbHRJ
bkFFQyhlbmFibGUpID8gMCA6IC0xOwotfQotCi1pbnQzMl90IEF1ZGlvUmVjb3JkSm5pOjpFbmFi
bGVCdWlsdEluQUdDKGJvb2wgZW5hYmxlKSB7Ci0gIC8vIFRPRE8oaGVucmlrYSk6IHBvc3NpYmx5
IHJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2VkIGJ5IGFueSBjbGllbnQuCi0gIEZBVEFMKCkgPDwg
IlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICByZXR1cm4gLTE7Ci19Ci0KLWludDMyX3QgQXVk
aW9SZWNvcmRKbmk6OkVuYWJsZUJ1aWx0SW5OUyhib29sIGVuYWJsZSkgewotICBBTE9HRCgiRW5h
YmxlQnVpbHRJbk5TJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0so
dGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVybiBqX2F1ZGlv
X3JlY29yZF8tPkVuYWJsZUJ1aWx0SW5OUyhlbmFibGUpID8gMCA6IC0xOwotfQotCi12b2lkIEpO
SUNBTEwgQXVkaW9SZWNvcmRKbmk6OkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcygKLSAgICBKTklF
bnYqIGVudiwgam9iamVjdCBvYmosIGpvYmplY3QgYnl0ZV9idWZmZXIsIGpsb25nIG5hdGl2ZUF1
ZGlvUmVjb3JkKSB7Ci0gIHdlYnJ0Yzo6QXVkaW9SZWNvcmRKbmkqIHRoaXNfb2JqZWN0ID0KLSAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpBdWRpb1JlY29yZEpuaSo+IChuYXRpdmVBdWRp
b1JlY29yZCk7Ci0gIHRoaXNfb2JqZWN0LT5PbkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhlbnYs
IGJ5dGVfYnVmZmVyKTsKLX0KLQotdm9pZCBBdWRpb1JlY29yZEpuaTo6T25DYWNoZURpcmVjdEJ1
ZmZlckFkZHJlc3MoCi0gICAgSk5JRW52KiBlbnYsIGpvYmplY3QgYnl0ZV9idWZmZXIpIHsKLSAg
QUxPR0QoIk9uQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFk
X2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0soIWRpcmVjdF9i
dWZmZXJfYWRkcmVzc18pOwotICBkaXJlY3RfYnVmZmVyX2FkZHJlc3NfID0KLSAgICAgIGVudi0+
R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhieXRlX2J1ZmZlcik7Ci0gIGpsb25nIGNhcGFjaXR5ID0g
ZW52LT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShieXRlX2J1ZmZlcik7Ci0gIEFMT0dEKCJkaXJl
Y3QgYnVmZmVyIGNhcGFjaXR5OiAlbGxkIiwgY2FwYWNpdHkpOwotICBkaXJlY3RfYnVmZmVyX2Nh
cGFjaXR5X2luX2J5dGVzXyA9IHN0YXRpY19jYXN0PHNpemVfdD4oY2FwYWNpdHkpOwotfQotCi12
b2lkIEpOSUNBTEwgQXVkaW9SZWNvcmRKbmk6OkRhdGFJc1JlY29yZGVkKAotICBKTklFbnYqIGVu
diwgam9iamVjdCBvYmosIGppbnQgbGVuZ3RoLCBqbG9uZyBuYXRpdmVBdWRpb1JlY29yZCkgewot
ICB3ZWJydGM6OkF1ZGlvUmVjb3JkSm5pKiB0aGlzX29iamVjdCA9Ci0gICAgICByZWludGVycHJl
dF9jYXN0PHdlYnJ0Yzo6QXVkaW9SZWNvcmRKbmkqPiAobmF0aXZlQXVkaW9SZWNvcmQpOwotICB0
aGlzX29iamVjdC0+T25EYXRhSXNSZWNvcmRlZChsZW5ndGgpOwotfQotCi0vLyBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgb24gYSBoaWdoLXByaW9yaXR5IHRocmVhZCBmcm9tIEphdmEuIFRoZSBuYW1l
IG9mCi0vLyB0aGUgdGhyZWFkIGlzICdBdWRpb1JlY29yZFRocmVhZCcuCi12b2lkIEF1ZGlvUmVj
b3JkSm5pOjpPbkRhdGFJc1JlY29yZGVkKGludCBsZW5ndGgpIHsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl9qYXZhXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoIWF1ZGlvX2Rl
dmljZV9idWZmZXJfKSB7Ci0gICAgQUxPR0UoIkF0dGFjaEF1ZGlvQnVmZmVyIGhhcyBub3QgYmVl
biBjYWxsZWQhIik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5T
ZXRSZWNvcmRlZEJ1ZmZlcihkaXJlY3RfYnVmZmVyX2FkZHJlc3NfLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgLy8gV2Ug
cHJvdmlkZSBvbmUgKGNvbWJpbmVkKSBmaXhlZCBkZWxheSBlc3RpbWF0ZSBmb3IgdGhlIEFQTSBh
bmQgdXNlIHRoZQotICAvLyB8cGxheURlbGF5TXN8IHBhcmFtZXRlciBvbmx5LiBDb21wb25lbnRz
IGxpa2UgdGhlIEFFQyBvbmx5IHNlZXMgdGhlIHN1bQotICAvLyBvZiB8cGxheURlbGF5TXN8IGFu
ZCB8cmVjRGVsYXlNc3wsIGhlbmNlIHRoZSBkaXN0cmlidXRpb25zIGRvZXMgbm90IG1hdHRlci4K
LSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFZRRURhdGEodG90YWxfZGVsYXlfaW5fbWlsbGlz
ZWNvbmRzXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgICAvLyByZWNE
ZWxheU1zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOyAgLy8gY2xvY2tE
cmlmdAotICBpZiAoYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPkRlbGl2ZXJSZWNvcmRlZERhdGEoKSA9
PSAtMSkgewotICAgIEFMT0dFKCJBdWRpb0RldmljZUJ1ZmZlcjo6RGVsaXZlclJlY29yZGVkRGF0
YSBmYWlsZWQhIik7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZp
Y2UvYW5kcm9pZC9hdWRpb19yZWNvcmRfam5pLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9hdWRpb19yZWNvcmRfam5pLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
YXVkaW9fcmVjb3JkX2puaS5oCShub25leGlzdGVudCkKQEAgLTEsMTYzICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9B
TkRST0lEX0FVRElPX1JFQ09SRF9KTklfSF8KLSNkZWZpbmUgV0VCUlRDX01PRFVMRVNfQVVESU9f
REVWSUNFX0FORFJPSURfQVVESU9fUkVDT1JEX0pOSV9IXwotCi0jaW5jbHVkZSA8bWVtb3J5Pgot
Ci0jaW5jbHVkZSA8am5pLmg+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aHJlYWRfY2hlY2tl
ci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlv
X21hbmFnZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVk
ZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVz
L3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9k
dWxlcy91dGlsaXR5L2luY2x1ZGUvanZtX2FuZHJvaWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7
Ci0KLS8vIEltcGxlbWVudHMgMTYtYml0IG1vbm8gUENNIGF1ZGlvIGlucHV0IHN1cHBvcnQgZm9y
IEFuZHJvaWQgdXNpbmcgdGhlIEphdmEKLS8vIEF1ZGlvUmVjb3JkIGludGVyZmFjZS4gTW9zdCBv
ZiB0aGUgd29yayBpcyBkb25lIGJ5IGl0cyBKYXZhIGNvdW50ZXJwYXJ0IGluCi0vLyBXZWJSdGNB
dWRpb1JlY29yZC5qYXZhLiBUaGlzIGNsYXNzIGlzIGNyZWF0ZWQgYW5kIGxpdmVzIG9uIGEgdGhy
ZWFkIGluCi0vLyBDKystbGFuZCwgYnV0IHJlY29yZGVkIGF1ZGlvIGJ1ZmZlcnMgYXJlIGRlbGl2
ZXJlZCBvbiBhIGhpZ2gtcHJpb3JpdHkKLS8vIHRocmVhZCBtYW5hZ2VkIGJ5IHRoZSBKYXZhIGNs
YXNzLgotLy8KLS8vIFRoZSBKYXZhIGNsYXNzIG1ha2VzIHVzZSBvZiBBdWRpb0VmZmVjdCBmZWF0
dXJlcyAobWFpbmx5IEFFQykgd2hpY2ggYXJlCi0vLyBmaXJzdCBhdmFpbGFibGUgaW4gSmVsbHkg
QmVhbi4gSWYgaXQgaXMgaW5zdGFudGlhdGVkIHJ1bm5pbmcgYWdhaW5zdCBlYXJsaWVyCi0vLyBT
REtzLCB0aGUgQUVDIHByb3ZpZGVkIGJ5IHRoZSBBUE0gaW4gV2ViUlRDIG11c3QgYmUgdXNlZCBh
bmQgZW5hYmxlZAotLy8gc2VwYXJhdGVseSBpbnN0ZWFkLgotLy8KLS8vIEFuIGluc3RhbmNlIG11
c3QgYmUgY3JlYXRlZCBhbmQgZGVzdHJveWVkIG9uIG9uZSBhbmQgdGhlIHNhbWUgdGhyZWFkLgot
Ly8gQWxsIHB1YmxpYyBtZXRob2RzIG11c3QgYWxzbyBiZSBjYWxsZWQgb24gdGhlIHNhbWUgdGhy
ZWFkLiBBIHRocmVhZCBjaGVja2VyCi0vLyB3aWxsIFJUQ19EQ0hFQ0sgaWYgYW55IG1ldGhvZCBp
cyBjYWxsZWQgb24gYW4gaW52YWxpZCB0aHJlYWQuCi0vLwotLy8gVGhpcyBjbGFzcyB1c2VzIEF0
dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCB0byBhdHRhY2ggdG8gYSBKYXZhIFZNIGlmIG5lZWRl
ZAotLy8gYW5kIGRldGFjaCB3aGVuIHRoZSBvYmplY3QgZ29lcyBvdXQgb2Ygc2NvcGUuIEFkZGl0
aW9uYWwgdGhyZWFkIGNoZWNraW5nCi0vLyBndWFyYW50ZWVzIHRoYXQgbm8gb3RoZXIgKHBvc3Np
Ymx5IG5vbiBhdHRhY2hlZCkgdGhyZWFkIGlzIHVzZWQuCi1jbGFzcyBBdWRpb1JlY29yZEpuaSB7
Ci0gcHVibGljOgotICAvLyBXcmFwcyB0aGUgSmF2YSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUgQXVk
aW9SZWNvcmRKbmkgaW50byBvbmUgaGVscGVyIGNsYXNzLgotICBjbGFzcyBKYXZhQXVkaW9SZWNv
cmQgewotICAgcHVibGljOgotICAgIEphdmFBdWRpb1JlY29yZChOYXRpdmVSZWdpc3RyYXRpb24q
IG5hdGl2ZV9yZWdpc3RyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEdsb2JhbFJlZj4gYXVkaW9fdHJhY2spOwotICAgIH5KYXZhQXVkaW9SZWNvcmQoKTsKLQotICAg
IGludCBJbml0UmVjb3JkaW5nKGludCBzYW1wbGVfcmF0ZSwgc2l6ZV90IGNoYW5uZWxzKTsKLSAg
ICBib29sIFN0YXJ0UmVjb3JkaW5nKCk7Ci0gICAgYm9vbCBTdG9wUmVjb3JkaW5nKCk7Ci0gICAg
Ym9vbCBFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKTsKLSAgICBib29sIEVuYWJsZUJ1aWx0
SW5OUyhib29sIGVuYWJsZSk7Ci0KLSAgIHByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEds
b2JhbFJlZj4gYXVkaW9fcmVjb3JkXzsKLSAgICBqbWV0aG9kSUQgaW5pdF9yZWNvcmRpbmdfOwot
ICAgIGptZXRob2RJRCBzdGFydF9yZWNvcmRpbmdfOwotICAgIGptZXRob2RJRCBzdG9wX3JlY29y
ZGluZ187Ci0gICAgam1ldGhvZElEIGVuYWJsZV9idWlsdF9pbl9hZWNfOwotICAgIGptZXRob2RJ
RCBlbmFibGVfYnVpbHRfaW5fbnNfOwotICB9OwotCi0gIGV4cGxpY2l0IEF1ZGlvUmVjb3JkSm5p
KEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcik7Ci0gIH5BdWRpb1JlY29yZEpuaSgpOwotCi0g
IGludDMyX3QgSW5pdCgpOwotICBpbnQzMl90IFRlcm1pbmF0ZSgpOwotCi0gIGludDMyX3QgSW5p
dFJlY29yZGluZygpOwotICBib29sIFJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKSBjb25zdCB7IHJl
dHVybiBpbml0aWFsaXplZF87IH0KLQotICBpbnQzMl90IFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGlu
dDMyX3QgU3RvcFJlY29yZGluZygpOwotICBib29sIFJlY29yZGluZygpIGNvbnN0IHsgcmV0dXJu
IHJlY29yZGluZ187IH0KLQotICB2b2lkIEF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlvRGV2aWNlQnVm
ZmVyKiBhdWRpb0J1ZmZlcik7Ci0KLSAgaW50MzJfdCBFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5h
YmxlKTsKLSAgaW50MzJfdCBFbmFibGVCdWlsdEluQUdDKGJvb2wgZW5hYmxlKTsKLSAgaW50MzJf
dCBFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpOwotCi0gcHJpdmF0ZToKLSAgLy8gQ2FsbGVk
IGZyb20gSmF2YSBzaWRlIHNvIHdlIGNhbiBjYWNoZSB0aGUgYWRkcmVzcyBvZiB0aGUgSmF2YS1t
YW5nZWQKLSAgLy8gfGJ5dGVfYnVmZmVyfCBpbiB8ZGlyZWN0X2J1ZmZlcl9hZGRyZXNzX3wuIFRo
ZSBzaXplIG9mIHRoZSBidWZmZXIKLSAgLy8gaXMgYWxzbyBzdG9yZWQgaW4gfGRpcmVjdF9idWZm
ZXJfY2FwYWNpdHlfaW5fYnl0ZXNffC4KLSAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQg
YnkgdGhlIFdlYlJ0Y0F1ZGlvUmVjb3JkIGNvbnN0cnVjdG9yLCBpLmUuLAotICAvLyBvbiB0aGUg
c2FtZSB0aHJlYWQgdGhhdCB0aGlzIG9iamVjdCBpcyBjcmVhdGVkIG9uLgotICBzdGF0aWMgdm9p
ZCBKTklDQUxMIENhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcygKLSAgICBKTklFbnYqIGVudiwgam9i
amVjdCBvYmosIGpvYmplY3QgYnl0ZV9idWZmZXIsIGpsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKTsK
LSAgdm9pZCBPbkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhKTklFbnYqIGVudiwgam9iamVjdCBi
eXRlX2J1ZmZlcik7Ci0KLSAgLy8gQ2FsbGVkIHBlcmlvZGljYWxseSBieSB0aGUgSmF2YSBiYXNl
ZCBXZWJSdGNBdWRpb1JlY29yZCBvYmplY3Qgd2hlbgotICAvLyByZWNvcmRpbmcgaGFzIHN0YXJ0
ZWQuIEVhY2ggY2FsbCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBhcmUgfGxlbmd0aHwgbmV3Ci0gIC8v
IGJ5dGVzIHJlY29yZGVkIGluIHRoZSBtZW1vcnkgYXJlYSB8ZGlyZWN0X2J1ZmZlcl9hZGRyZXNz
X3wgYW5kIGl0IGlzCi0gIC8vIG5vdyB0aW1lIHRvIHNlbmQgdGhlc2UgdG8gdGhlIGNvbnN1bWVy
LgotICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gYSBoaWdoLXByaW9yaXR5IHRocmVhZCBm
cm9tIEphdmEuIFRoZSBuYW1lIG9mCi0gIC8vIHRoZSB0aHJlYWQgaXMgJ0F1ZGlvUmVjb3JkVGhy
ZWFkJy4KLSAgc3RhdGljIHZvaWQgSk5JQ0FMTCBEYXRhSXNSZWNvcmRlZCgKLSAgICBKTklFbnYq
IGVudiwgam9iamVjdCBvYmosIGppbnQgbGVuZ3RoLCBqbG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7
Ci0gIHZvaWQgT25EYXRhSXNSZWNvcmRlZChpbnQgbGVuZ3RoKTsKLQotICAvLyBTdG9yZXMgdGhy
ZWFkIElEIGluIGNvbnN0cnVjdG9yLgotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNr
ZXJfOwotCi0gIC8vIFN0b3JlcyB0aHJlYWQgSUQgaW4gZmlyc3QgY2FsbCB0byBPbkRhdGFJc1Jl
Y29yZGVkKCkgZnJvbSBoaWdoLXByaW9yaXR5Ci0gIC8vIHRocmVhZCBpbiBKYXZhLiBEZXRhY2hl
ZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgb2JqZWN0LgotICBydGM6OlRocmVhZENoZWNr
ZXIgdGhyZWFkX2NoZWNrZXJfamF2YV87Ci0KLSAgLy8gQ2FsbHMgQXR0YWNoQ3VycmVudFRocmVh
ZCgpIGlmIHRoaXMgdGhyZWFkIGlzIG5vdCBhdHRhY2hlZCBhdCBjb25zdHJ1Y3Rpb24uCi0gIC8v
IEFsc28gZW5zdXJlcyB0aGF0IERldGFjaEN1cnJlbnRUaHJlYWQoKSBpcyBjYWxsZWQgYXQgZGVz
dHJ1Y3Rpb24uCi0gIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCBhdHRhY2hfdGhyZWFkX2lm
X25lZWRlZF87Ci0KLSAgLy8gV3JhcHMgdGhlIEpOSSBpbnRlcmZhY2UgcG9pbnRlciBhbmQgbWV0
aG9kcyBhc3NvY2lhdGVkIHdpdGggaXQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxKTklFbnZpcm9ubWVu
dD4gal9lbnZpcm9ubWVudF87Ci0KLSAgLy8gQ29udGFpbnMgZmFjdG9yeSBtZXRob2QgZm9yIGNy
ZWF0aW5nIHRoZSBKYXZhIG9iamVjdC4KLSAgc3RkOjp1bmlxdWVfcHRyPE5hdGl2ZVJlZ2lzdHJh
dGlvbj4gal9uYXRpdmVfcmVnaXN0cmF0aW9uXzsKLQotICAvLyBXcmFwcyB0aGUgSmF2YSBzcGVj
aWZpYyBwYXJ0cyBvZiB0aGUgQXVkaW9SZWNvcmRKbmkgY2xhc3MuCi0gIHN0ZDo6dW5pcXVlX3B0
cjxBdWRpb1JlY29yZEpuaTo6SmF2YUF1ZGlvUmVjb3JkPiBqX2F1ZGlvX3JlY29yZF87Ci0KLSAg
Ly8gUmF3IHBvaW50ZXIgdG8gdGhlIGF1ZGlvIG1hbmdlci4KLSAgY29uc3QgQXVkaW9NYW5hZ2Vy
KiBhdWRpb19tYW5hZ2VyXzsKLQotICAvLyBDb250YWlucyBhdWRpbyBwYXJhbWV0ZXJzIHByb3Zp
ZGVkIHRvIHRoaXMgY2xhc3MgYXQgY29uc3RydWN0aW9uIGJ5IHRoZQotICAvLyBBdWRpb01hbmFn
ZXIuCi0gIGNvbnN0IEF1ZGlvUGFyYW1ldGVycyBhdWRpb19wYXJhbWV0ZXJzXzsKLQotICAvLyBE
ZWxheSBlc3RpbWF0ZSBvZiB0aGUgdG90YWwgcm91bmQtdHJpcCBkZWxheSAoaW5wdXQgKyBvdXRw
dXQpLgotICAvLyBGaXhlZCB2YWx1ZSBzZXQgb25jZSBpbiBBdHRhY2hBdWRpb0J1ZmZlcigpIGFu
ZCBpdCBjYW4gdGFrZSBvbmUgb3V0IG9mIHR3bwotICAvLyBwb3NzaWJsZSB2YWx1ZXMuIFNlZSBh
dWRpb19jb21tb24uaCBmb3IgZGV0YWlscy4KLSAgaW50IHRvdGFsX2RlbGF5X2luX21pbGxpc2Vj
b25kc187Ci0KLSAgLy8gQ2FjaGVkIGNvcHkgb2YgYWRkcmVzcyB0byBkaXJlY3QgYXVkaW8gYnVm
ZmVyIG93bmVkIGJ5IHxqX2F1ZGlvX3JlY29yZF98LgotICB2b2lkKiBkaXJlY3RfYnVmZmVyX2Fk
ZHJlc3NfOwotCi0gIC8vIE51bWJlciBvZiBieXRlcyBpbiB0aGUgZGlyZWN0IGF1ZGlvIGJ1ZmZl
ciBvd25lZCBieSB8al9hdWRpb19yZWNvcmRffC4KLSAgc2l6ZV90IGRpcmVjdF9idWZmZXJfY2Fw
YWNpdHlfaW5fYnl0ZXNfOwotCi0gIC8vIE51bWJlciBhdWRpbyBmcmFtZXMgcGVyIGF1ZGlvIGJ1
ZmZlci4gRWFjaCBhdWRpbyBmcmFtZSBjb3JyZXNwb25kcyB0bwotICAvLyBvbmUgc2FtcGxlIG9m
IFBDTSBtb25vIGRhdGEgYXQgMTYgYml0cyBwZXIgc2FtcGxlLiBIZW5jZSwgZWFjaCBhdWRpbwot
ICAvLyBmcmFtZSBjb250YWlucyAyIGJ5dGVzIChnaXZlbiB0aGF0IHRoZSBKYXZhIGxheWVyIG9u
bHkgc3VwcG9ydHMgbW9ubykuCi0gIC8vIEV4YW1wbGU6IDQ4MCBmb3IgNDgwMDAgSHogb3IgNDQx
IGZvciA0NDEwMCBIei4KLSAgc2l6ZV90IGZyYW1lc19wZXJfYnVmZmVyXzsKLQotICBib29sIGlu
aXRpYWxpemVkXzsKLQotICBib29sIHJlY29yZGluZ187Ci0KLSAgLy8gUmF3IHBvaW50ZXIgaGFu
ZGxlIHByb3ZpZGVkIHRvIHVzIGluIEF0dGFjaEF1ZGlvQnVmZmVyKCkuIE93bmVkIGJ5IHRoZQot
ICAvLyBBdWRpb0RldmljZU1vZHVsZUltcGwgY2xhc3MgYW5kIGNhbGxlZCBieSBBdWRpb0Rldmlj
ZU1vZHVsZTo6Q3JlYXRlKCkuCi0gIEF1ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb19kZXZpY2VfYnVm
ZmVyXzsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENf
TU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19SRUNPUkRfSk5JX0hfCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2F1ZGlvX3RyYWNrX2puaS5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRy
b2lkL2F1ZGlvX3RyYWNrX2puaS5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9hdWRpb190cmFja19qbmkuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNjMgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZp
Y2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJhY2tfam5pLmgiCi0KLSNpbmNsdWRlIDx1dGlsaXR5
PgotCi0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2Fy
cmF5c2l6ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndl
YnJ0Yy9iYXNlL2Zvcm1hdF9tYWNyb3MuaCIKLQotI2RlZmluZSBUQUcgIkF1ZGlvVHJhY2tKbmki
Ci0jZGVmaW5lIEFMT0dWKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19WRVJC
T1NFLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HRCguLi4pIF9fYW5kcm9pZF9sb2df
cHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dF
KC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgVEFHLCBfX1ZBX0FS
R1NfXykKLSNkZWZpbmUgQUxPR1coLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9H
X1dBUk4sIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dJKC4uLikgX19hbmRyb2lkX2xv
Z19wcmludChBTkRST0lEX0xPR19JTkZPLCBUQUcsIF9fVkFfQVJHU19fKQotCi1uYW1lc3BhY2Ug
d2VicnRjIHsKLQotLy8gQXVkaW9UcmFja0puaTo6SmF2YUF1ZGlvVHJhY2sgaW1wbGVtZW50YXRp
b24uCi1BdWRpb1RyYWNrSm5pOjpKYXZhQXVkaW9UcmFjazo6SmF2YUF1ZGlvVHJhY2soCi0gICAg
TmF0aXZlUmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVnLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9i
YWxSZWY+IGF1ZGlvX3RyYWNrKQotICAgIDogYXVkaW9fdHJhY2tfKHN0ZDo6bW92ZShhdWRpb190
cmFjaykpLAotICAgICAgaW5pdF9wbGF5b3V0XyhuYXRpdmVfcmVnLT5HZXRNZXRob2RJZCgiaW5p
dFBsYXlvdXQiLCAiKElJKVoiKSksCi0gICAgICBzdGFydF9wbGF5b3V0XyhuYXRpdmVfcmVnLT5H
ZXRNZXRob2RJZCgic3RhcnRQbGF5b3V0IiwgIigpWiIpKSwKLSAgICAgIHN0b3BfcGxheW91dF8o
bmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQoInN0b3BQbGF5b3V0IiwgIigpWiIpKSwKLSAgICAgIHNl
dF9zdHJlYW1fdm9sdW1lXyhuYXRpdmVfcmVnLT5HZXRNZXRob2RJZCgic2V0U3RyZWFtVm9sdW1l
IiwgIihJKVoiKSksCi0gICAgICBnZXRfc3RyZWFtX21heF92b2x1bWVfKAotICAgICAgICAgIG5h
dGl2ZV9yZWctPkdldE1ldGhvZElkKCJnZXRTdHJlYW1NYXhWb2x1bWUiLCAiKClJIikpLAotICAg
ICAgZ2V0X3N0cmVhbV92b2x1bWVfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJnZXRTdHJlYW1W
b2x1bWUiLCAiKClJIikpIHt9Ci0KLUF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNrOjp+SmF2
YUF1ZGlvVHJhY2soKSB7fQotCi1ib29sIEF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNrOjpJ
bml0UGxheW91dChpbnQgc2FtcGxlX3JhdGUsIGludCBjaGFubmVscykgewotICByZXR1cm4gYXVk
aW9fdHJhY2tfLT5DYWxsQm9vbGVhbk1ldGhvZChpbml0X3BsYXlvdXRfLCBzYW1wbGVfcmF0ZSwg
Y2hhbm5lbHMpOwotfQotCi1ib29sIEF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNrOjpTdGFy
dFBsYXlvdXQoKSB7Ci0gIHJldHVybiBhdWRpb190cmFja18tPkNhbGxCb29sZWFuTWV0aG9kKHN0
YXJ0X3BsYXlvdXRfKTsKLX0KLQotYm9vbCBBdWRpb1RyYWNrSm5pOjpKYXZhQXVkaW9UcmFjazo6
U3RvcFBsYXlvdXQoKSB7Ci0gIHJldHVybiBhdWRpb190cmFja18tPkNhbGxCb29sZWFuTWV0aG9k
KHN0b3BfcGxheW91dF8pOwotfQotCi1ib29sIEF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNr
OjpTZXRTdHJlYW1Wb2x1bWUoaW50IHZvbHVtZSkgewotICByZXR1cm4gYXVkaW9fdHJhY2tfLT5D
YWxsQm9vbGVhbk1ldGhvZChzZXRfc3RyZWFtX3ZvbHVtZV8sIHZvbHVtZSk7Ci19Ci0KLWludCBB
dWRpb1RyYWNrSm5pOjpKYXZhQXVkaW9UcmFjazo6R2V0U3RyZWFtTWF4Vm9sdW1lKCkgewotICBy
ZXR1cm4gYXVkaW9fdHJhY2tfLT5DYWxsSW50TWV0aG9kKGdldF9zdHJlYW1fbWF4X3ZvbHVtZV8p
OwotfQotCi1pbnQgQXVkaW9UcmFja0puaTo6SmF2YUF1ZGlvVHJhY2s6OkdldFN0cmVhbVZvbHVt
ZSgpIHsKLSAgcmV0dXJuIGF1ZGlvX3RyYWNrXy0+Q2FsbEludE1ldGhvZChnZXRfc3RyZWFtX3Zv
bHVtZV8pOwotfQotCi0vLyBUT0RPKGhlbnJpa2EpOiBwb3NzaWJsZSBleHRlbmQgdXNhZ2Ugb2Yg
QXVkaW9NYW5hZ2VyIGFuZCBhZGQgaXQgYXMgbWVtYmVyLgotQXVkaW9UcmFja0puaTo6QXVkaW9U
cmFja0puaShBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBqX2Vudmlyb25tZW50
XyhKVk06OkdldEluc3RhbmNlKCktPmVudmlyb25tZW50KCkpLAotICAgICAgYXVkaW9fcGFyYW1l
dGVyc18oYXVkaW9fbWFuYWdlci0+R2V0UGxheW91dEF1ZGlvUGFyYW1ldGVycygpKSwKLSAgICAg
IGRpcmVjdF9idWZmZXJfYWRkcmVzc18obnVsbHB0ciksCi0gICAgICBkaXJlY3RfYnVmZmVyX2Nh
cGFjaXR5X2luX2J5dGVzXygwKSwKLSAgICAgIGZyYW1lc19wZXJfYnVmZmVyXygwKSwKLSAgICAg
IGluaXRpYWxpemVkXyhmYWxzZSksCi0gICAgICBwbGF5aW5nXyhmYWxzZSksCi0gICAgICBhdWRp
b19kZXZpY2VfYnVmZmVyXyhudWxscHRyKSB7Ci0gIEFMT0dEKCJjdG9yJXMiLCBHZXRUaHJlYWRJ
bmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0soYXVkaW9fcGFyYW1ldGVyc18uaXNfdmFsaWQo
KSk7Ci0gIFJUQ19DSEVDSyhqX2Vudmlyb25tZW50Xyk7Ci0gIEpOSU5hdGl2ZU1ldGhvZCBuYXRp
dmVfbWV0aG9kc1tdID0gewotICAgICAgeyJuYXRpdmVDYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3Mi
LCAiKExqYXZhL25pby9CeXRlQnVmZmVyO0opViIsCi0gICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPigKLSAgICAgICAgICAmd2VicnRjOjpBdWRpb1RyYWNrSm5pOjpDYWNoZURpcmVjdEJ1ZmZl
ckFkZHJlc3MpfSwKLSAgICAgIHsibmF0aXZlR2V0UGxheW91dERhdGEiLCAiKElKKVYiLAotICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJndlYnJ0Yzo6QXVkaW9UcmFja0puaTo6R2V0UGxh
eW91dERhdGEpfX07Ci0gIGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl8gPSBqX2Vudmlyb25tZW50Xy0+
UmVnaXN0ZXJOYXRpdmVzKAotICAgICAgIm9yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVk
aW9UcmFjayIsIG5hdGl2ZV9tZXRob2RzLAotICAgICAgYXJyYXlzaXplKG5hdGl2ZV9tZXRob2Rz
KSk7Ci0gIGpfYXVkaW9fdHJhY2tfLnJlc2V0KG5ldyBKYXZhQXVkaW9UcmFjaygKLSAgICAgIGpf
bmF0aXZlX3JlZ2lzdHJhdGlvbl8uZ2V0KCksCi0gICAgICBqX25hdGl2ZV9yZWdpc3RyYXRpb25f
LT5OZXdPYmplY3QoCi0gICAgICAgICAgIjxpbml0PiIsICIoTGFuZHJvaWQvY29udGVudC9Db250
ZXh0O0opViIsCi0gICAgICAgICAgSlZNOjpHZXRJbnN0YW5jZSgpLT5jb250ZXh0KCksIFBvaW50
ZXJUb2psb25nKHRoaXMpKSkpOwotICAvLyBEZXRhY2ggZnJvbSB0aGlzIHRocmVhZCBzaW5jZSB3
ZSB3YW50IHRvIHVzZSB0aGUgY2hlY2tlciB0byB2ZXJpZnkgY2FsbHMKLSAgLy8gZnJvbSB0aGUg
SmF2YSBiYXNlZCBhdWRpbyB0aHJlYWQuCi0gIHRocmVhZF9jaGVja2VyX2phdmFfLkRldGFjaEZy
b21UaHJlYWQoKTsKLX0KLQotQXVkaW9UcmFja0puaTo6fkF1ZGlvVHJhY2tKbmkoKSB7Ci0gIEFM
T0dEKCJ+ZHRvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRo
cmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBUZXJtaW5hdGUoKTsKLX0K
LQotaW50MzJfdCBBdWRpb1RyYWNrSm5pOjpJbml0KCkgewotICBBTE9HRCgiSW5pdCVzIiwgR2V0
VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1cm4gMDsKLX0KLQotaW50MzJfdCBBdWRpb1RyYWNr
Sm5pOjpUZXJtaW5hdGUoKSB7Ci0gIEFMT0dEKCJUZXJtaW5hdGUlcyIsIEdldFRocmVhZEluZm8o
KS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRo
cmVhZCgpKTsKLSAgU3RvcFBsYXlvdXQoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludDMyX3QgQXVk
aW9UcmFja0puaTo6SW5pdFBsYXlvdXQoKSB7Ci0gIEFMT0dEKCJJbml0UGxheW91dCVzIiwgR2V0
VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxs
ZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfRENIRUNLKCFpbml0aWFsaXplZF8pOwotICBSVENf
RENIRUNLKCFwbGF5aW5nXyk7Ci0gIGlmICghal9hdWRpb190cmFja18tPkluaXRQbGF5b3V0KAot
ICAgICAgYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKSwgYXVkaW9fcGFyYW1ldGVyc18u
Y2hhbm5lbHMoKSkpIHsKLSAgICBBTE9HRSgiSW5pdFBsYXlvdXQgZmFpbGVkISIpOwotICAgIHJl
dHVybiAtMTsKLSAgfQotICBpbml0aWFsaXplZF8gPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQot
aW50MzJfdCBBdWRpb1RyYWNrSm5pOjpTdGFydFBsYXlvdXQoKSB7Ci0gIEFMT0dEKCJTdGFydFBs
YXlvdXQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDSyhpbml0aWFsaXpl
ZF8pOwotICBSVENfRENIRUNLKCFwbGF5aW5nXyk7Ci0gIGlmICghal9hdWRpb190cmFja18tPlN0
YXJ0UGxheW91dCgpKSB7Ci0gICAgQUxPR0UoIlN0YXJ0UGxheW91dCBmYWlsZWQhIik7Ci0gICAg
cmV0dXJuIC0xOwotICB9Ci0gIHBsYXlpbmdfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWlu
dDMyX3QgQXVkaW9UcmFja0puaTo6U3RvcFBsYXlvdXQoKSB7Ci0gIEFMT0dEKCJTdG9wUGxheW91
dCVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoIWluaXRpYWxpemVkXyB8fCAhcGxh
eWluZ18pIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICBpZiAoIWpfYXVkaW9fdHJhY2tfLT5TdG9w
UGxheW91dCgpKSB7Ci0gICAgQUxPR0UoIlN0b3BQbGF5b3V0IGZhaWxlZCEiKTsKLSAgICByZXR1
cm4gLTE7Ci0gIH0KLSAgLy8gSWYgd2UgZG9uJ3QgZGV0YWNoIGhlcmUsIHdlIHdpbGwgaGl0IGEg
UlRDX0RDSEVDSyBpbiBPbkRhdGFJc1JlY29yZGVkKCkKLSAgLy8gbmV4dCB0aW1lIFN0YXJ0UmVj
b3JkaW5nKCkgaXMgY2FsbGVkIHNpbmNlIGl0IHdpbGwgY3JlYXRlIGEgbmV3IEphdmEKLSAgLy8g
dGhyZWFkLgotICB0aHJlYWRfY2hlY2tlcl9qYXZhXy5EZXRhY2hGcm9tVGhyZWFkKCk7Ci0gIGlu
aXRpYWxpemVkXyA9IGZhbHNlOwotICBwbGF5aW5nXyA9IGZhbHNlOwotICBkaXJlY3RfYnVmZmVy
X2FkZHJlc3NfID0gbnVsbHB0cjsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBBdWRpb1RyYWNrSm5p
OjpTcGVha2VyVm9sdW1lSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSB7Ci0gIGF2YWlsYWJs
ZSA9IHRydWU7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgQXVkaW9UcmFja0puaTo6U2V0U3BlYWtl
clZvbHVtZSh1aW50MzJfdCB2b2x1bWUpIHsKLSAgQUxPR0QoIlNldFNwZWFrZXJWb2x1bWUoJWQp
JXMiLCB2b2x1bWUsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIGpfYXVkaW9fdHJh
Y2tfLT5TZXRTdHJlYW1Wb2x1bWUodm9sdW1lKSA/IDAgOiAtMTsKLX0KLQotaW50IEF1ZGlvVHJh
Y2tKbmk6Ok1heFNwZWFrZXJWb2x1bWUodWludDMyX3QmIG1heF92b2x1bWUpIGNvbnN0IHsKLSAg
QUxPR0QoIk1heFNwZWFrZXJWb2x1bWUlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAg
UlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgbWF4
X3ZvbHVtZSA9IGpfYXVkaW9fdHJhY2tfLT5HZXRTdHJlYW1NYXhWb2x1bWUoKTsKLSAgcmV0dXJu
IDA7Ci19Ci0KLWludCBBdWRpb1RyYWNrSm5pOjpNaW5TcGVha2VyVm9sdW1lKHVpbnQzMl90JiBt
aW5fdm9sdW1lKSBjb25zdCB7Ci0gIEFMT0dEKCJNYXhTcGVha2VyVm9sdW1lJXMiLCBHZXRUaHJl
YWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9u
VmFsaWRUaHJlYWQoKSk7Ci0gIG1pbl92b2x1bWUgPSAwOwotICByZXR1cm4gMDsKLX0KLQotaW50
IEF1ZGlvVHJhY2tKbmk6OlNwZWFrZXJWb2x1bWUodWludDMyX3QmIHZvbHVtZSkgY29uc3Qgewot
ICBBTE9HRCgiU3BlYWtlclZvbHVtZSVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBS
VENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICB2b2x1
bWUgPSBqX2F1ZGlvX3RyYWNrXy0+R2V0U3RyZWFtVm9sdW1lKCk7Ci0gIHJldHVybiAwOwotfQot
Ci0vLyBUT0RPKGhlbnJpa2EpOiBwb3NzaWJseSBhZGQgc3RlcmVvIHN1cHBvcnQuCi12b2lkIEF1
ZGlvVHJhY2tKbmk6OkF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb0J1
ZmZlcikgewotICBBTE9HRCgiQXR0YWNoQXVkaW9CdWZmZXIlcyIsIEdldFRocmVhZEluZm8oKS5j
X3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVh
ZCgpKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb0J1ZmZlcjsKLSAgY29uc3QgaW50
IHNhbXBsZV9yYXRlX2h6ID0gYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKTsKLSAgQUxP
R0QoIlNldFBsYXlvdXRTYW1wbGVSYXRlKCVkKSIsIHNhbXBsZV9yYXRlX2h6KTsKLSAgYXVkaW9f
ZGV2aWNlX2J1ZmZlcl8tPlNldFBsYXlvdXRTYW1wbGVSYXRlKHNhbXBsZV9yYXRlX2h6KTsKLSAg
Y29uc3Qgc2l6ZV90IGNoYW5uZWxzID0gYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKTsKLSAg
QUxPR0QoIlNldFBsYXlvdXRDaGFubmVscyglIiBQUkl1UyAiKSIsIGNoYW5uZWxzKTsKLSAgYXVk
aW9fZGV2aWNlX2J1ZmZlcl8tPlNldFBsYXlvdXRDaGFubmVscyhjaGFubmVscyk7Ci19Ci0KLXZv
aWQgSk5JQ0FMTCBBdWRpb1RyYWNrSm5pOjpDYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoCi0gICAg
Sk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBqb2JqZWN0IGJ5dGVfYnVmZmVyLCBqbG9uZyBuYXRp
dmVBdWRpb1RyYWNrKSB7Ci0gIHdlYnJ0Yzo6QXVkaW9UcmFja0puaSogdGhpc19vYmplY3QgPQot
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx3ZWJydGM6OkF1ZGlvVHJhY2tKbmkqPiAobmF0aXZlQXVk
aW9UcmFjayk7Ci0gIHRoaXNfb2JqZWN0LT5PbkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhlbnYs
IGJ5dGVfYnVmZmVyKTsKLX0KLQotdm9pZCBBdWRpb1RyYWNrSm5pOjpPbkNhY2hlRGlyZWN0QnVm
ZmVyQWRkcmVzcygKLSAgICBKTklFbnYqIGVudiwgam9iamVjdCBieXRlX2J1ZmZlcikgewotICBB
TE9HRCgiT25DYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDSyghZGlyZWN0X2J1
ZmZlcl9hZGRyZXNzXyk7Ci0gIGRpcmVjdF9idWZmZXJfYWRkcmVzc18gPQotICAgICAgZW52LT5H
ZXREaXJlY3RCdWZmZXJBZGRyZXNzKGJ5dGVfYnVmZmVyKTsKLSAgamxvbmcgY2FwYWNpdHkgPSBl
bnYtPkdldERpcmVjdEJ1ZmZlckNhcGFjaXR5KGJ5dGVfYnVmZmVyKTsKLSAgQUxPR0QoImRpcmVj
dCBidWZmZXIgY2FwYWNpdHk6ICVsbGQiLCBjYXBhY2l0eSk7Ci0gIGRpcmVjdF9idWZmZXJfY2Fw
YWNpdHlfaW5fYnl0ZXNfID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihjYXBhY2l0eSk7Ci0gIGZyYW1l
c19wZXJfYnVmZmVyXyA9IGRpcmVjdF9idWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfIC8ga0J5dGVz
UGVyRnJhbWU7Ci0gIEFMT0dEKCJmcmFtZXNfcGVyX2J1ZmZlcjogJSIgUFJJdVMsIGZyYW1lc19w
ZXJfYnVmZmVyXyk7Ci19Ci0KLXZvaWQgSk5JQ0FMTCBBdWRpb1RyYWNrSm5pOjpHZXRQbGF5b3V0
RGF0YSgKLSAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBqaW50IGxlbmd0aCwgamxvbmcgbmF0
aXZlQXVkaW9UcmFjaykgewotICB3ZWJydGM6OkF1ZGlvVHJhY2tKbmkqIHRoaXNfb2JqZWN0ID0K
LSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpBdWRpb1RyYWNrSm5pKj4gKG5hdGl2ZUF1
ZGlvVHJhY2spOwotICB0aGlzX29iamVjdC0+T25HZXRQbGF5b3V0RGF0YShzdGF0aWNfY2FzdDxz
aXplX3Q+KGxlbmd0aCkpOwotfQotCi0vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb24gYSBoaWdo
LXByaW9yaXR5IHRocmVhZCBmcm9tIEphdmEuIFRoZSBuYW1lIG9mCi0vLyB0aGUgdGhyZWFkIGlz
ICdBdWRpb1JlY29yZFRyYWNrJy4KLXZvaWQgQXVkaW9UcmFja0puaTo6T25HZXRQbGF5b3V0RGF0
YShzaXplX3QgbGVuZ3RoKSB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfamF2YV8uQ2Fs
bGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDS19FUShmcmFtZXNfcGVyX2J1ZmZlcl8s
IGxlbmd0aCAvIGtCeXRlc1BlckZyYW1lKTsKLSAgaWYgKCFhdWRpb19kZXZpY2VfYnVmZmVyXykg
ewotICAgIEFMT0dFKCJBdHRhY2hBdWRpb0J1ZmZlciBoYXMgbm90IGJlZW4gY2FsbGVkISIpOwot
ICAgIHJldHVybjsKLSAgfQotICAvLyBQdWxsIGRlY29kZWQgZGF0YSAoaW4gMTYtYml0IFBDTSBm
b3JtYXQpIGZyb20gaml0dGVyIGJ1ZmZlci4KLSAgaW50IHNhbXBsZXMgPSBhdWRpb19kZXZpY2Vf
YnVmZmVyXy0+UmVxdWVzdFBsYXlvdXREYXRhKGZyYW1lc19wZXJfYnVmZmVyXyk7Ci0gIGlmIChz
YW1wbGVzIDw9IDApIHsKLSAgICBBTE9HRSgiQXVkaW9EZXZpY2VCdWZmZXI6OlJlcXVlc3RQbGF5
b3V0RGF0YSBmYWlsZWQhIik7Ci0gICAgcmV0dXJuOwotICB9Ci0gIFJUQ19EQ0hFQ0tfRVEoc3Rh
dGljX2Nhc3Q8c2l6ZV90PihzYW1wbGVzKSwgZnJhbWVzX3Blcl9idWZmZXJfKTsKLSAgLy8gQ29w
eSBkZWNvZGVkIGRhdGEgaW50byBjb21tb24gYnl0ZSBidWZmZXIgdG8gZW5zdXJlIHRoYXQgaXQg
Y2FuIGJlCi0gIC8vIHdyaXR0ZW4gdG8gdGhlIEphdmEgYmFzZWQgYXVkaW8gdHJhY2suCi0gIHNh
bXBsZXMgPSBhdWRpb19kZXZpY2VfYnVmZmVyXy0+R2V0UGxheW91dERhdGEoZGlyZWN0X2J1ZmZl
cl9hZGRyZXNzXyk7Ci0gIFJUQ19EQ0hFQ0tfRVEobGVuZ3RoLCBrQnl0ZXNQZXJGcmFtZSAqIHNh
bXBsZXMpOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2F1ZGlvX3RyYWNrX2puaS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJh
Y2tfam5pLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJhY2tf
am5pLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQVVESU9f
VFJBQ0tfSk5JX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lE
X0FVRElPX1RSQUNLX0pOSV9IXwotCi0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSA8am5p
Lmg+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aHJlYWRfY2hlY2tlci5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19k
ZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
dWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkv
aW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy91dGls
aXR5L2luY2x1ZGUvanZtX2FuZHJvaWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIElt
cGxlbWVudHMgMTYtYml0IG1vbm8gUENNIGF1ZGlvIG91dHB1dCBzdXBwb3J0IGZvciBBbmRyb2lk
IHVzaW5nIHRoZSBKYXZhCi0vLyBBdWRpb1RyYWNrIGludGVyZmFjZS4gTW9zdCBvZiB0aGUgd29y
ayBpcyBkb25lIGJ5IGl0cyBKYXZhIGNvdW50ZXJwYXJ0IGluCi0vLyBXZWJSdGNBdWRpb1RyYWNr
LmphdmEuIFRoaXMgY2xhc3MgaXMgY3JlYXRlZCBhbmQgbGl2ZXMgb24gYSB0aHJlYWQgaW4KLS8v
IEMrKy1sYW5kLCBidXQgZGVjb2RlZCBhdWRpbyBidWZmZXJzIGFyZSByZXF1ZXN0ZWQgb24gYSBo
aWdoLXByaW9yaXR5Ci0vLyB0aHJlYWQgbWFuYWdlZCBieSB0aGUgSmF2YSBjbGFzcy4KLS8vCi0v
LyBBbiBpbnN0YW5jZSBtdXN0IGJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbiBvbmUgYW5kIHRo
ZSBzYW1lIHRocmVhZC4KLS8vIEFsbCBwdWJsaWMgbWV0aG9kcyBtdXN0IGFsc28gYmUgY2FsbGVk
IG9uIHRoZSBzYW1lIHRocmVhZC4gQSB0aHJlYWQgY2hlY2tlcgotLy8gd2lsbCBSVENfRENIRUNL
IGlmIGFueSBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIGludmFsaWQgdGhyZWFkLgotLy8KLS8vIFRo
aXMgY2xhc3MgdXNlcyBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQgdG8gYXR0YWNoIHRvIGEg
SmF2YSBWTSBpZiBuZWVkZWQKLS8vIGFuZCBkZXRhY2ggd2hlbiB0aGUgb2JqZWN0IGdvZXMgb3V0
IG9mIHNjb3BlLiBBZGRpdGlvbmFsIHRocmVhZCBjaGVja2luZwotLy8gZ3VhcmFudGVlcyB0aGF0
IG5vIG90aGVyIChwb3NzaWJseSBub24gYXR0YWNoZWQpIHRocmVhZCBpcyB1c2VkLgotY2xhc3Mg
QXVkaW9UcmFja0puaSB7Ci0gcHVibGljOgotICAvLyBXcmFwcyB0aGUgSmF2YSBzcGVjaWZpYyBw
YXJ0cyBvZiB0aGUgQXVkaW9UcmFja0puaSBpbnRvIG9uZSBoZWxwZXIgY2xhc3MuCi0gIGNsYXNz
IEphdmFBdWRpb1RyYWNrIHsKLSAgIHB1YmxpYzoKLSAgICBKYXZhQXVkaW9UcmFjayhOYXRpdmVS
ZWdpc3RyYXRpb24qIG5hdGl2ZV9yZWdpc3RyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdsb2JhbFJlZj4gYXVkaW9fdHJhY2spOwotICAgIH5KYXZhQXVkaW9UcmFj
aygpOwotCi0gICAgYm9vbCBJbml0UGxheW91dChpbnQgc2FtcGxlX3JhdGUsIGludCBjaGFubmVs
cyk7Ci0gICAgYm9vbCBTdGFydFBsYXlvdXQoKTsKLSAgICBib29sIFN0b3BQbGF5b3V0KCk7Ci0g
ICAgYm9vbCBTZXRTdHJlYW1Wb2x1bWUoaW50IHZvbHVtZSk7Ci0gICAgaW50IEdldFN0cmVhbU1h
eFZvbHVtZSgpOwotICAgIGludCBHZXRTdHJlYW1Wb2x1bWUoKTsKLQotICAgcHJpdmF0ZToKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBhdWRpb190cmFja187Ci0gICAgam1ldGhvZElE
IGluaXRfcGxheW91dF87Ci0gICAgam1ldGhvZElEIHN0YXJ0X3BsYXlvdXRfOwotICAgIGptZXRo
b2RJRCBzdG9wX3BsYXlvdXRfOwotICAgIGptZXRob2RJRCBzZXRfc3RyZWFtX3ZvbHVtZV87Ci0g
ICAgam1ldGhvZElEIGdldF9zdHJlYW1fbWF4X3ZvbHVtZV87Ci0gICAgam1ldGhvZElEIGdldF9z
dHJlYW1fdm9sdW1lXzsKLSAgfTsKLQotICBleHBsaWNpdCBBdWRpb1RyYWNrSm5pKEF1ZGlvTWFu
YWdlciogYXVkaW9fbWFuYWdlcik7Ci0gIH5BdWRpb1RyYWNrSm5pKCk7Ci0KLSAgaW50MzJfdCBJ
bml0KCk7Ci0gIGludDMyX3QgVGVybWluYXRlKCk7Ci0KLSAgaW50MzJfdCBJbml0UGxheW91dCgp
OwotICBib29sIFBsYXlvdXRJc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gaW5pdGlhbGl6
ZWRfOyB9Ci0KLSAgaW50MzJfdCBTdGFydFBsYXlvdXQoKTsKLSAgaW50MzJfdCBTdG9wUGxheW91
dCgpOwotICBib29sIFBsYXlpbmcoKSBjb25zdCB7IHJldHVybiBwbGF5aW5nXzsgfQotCi0gIGlu
dCBTcGVha2VyVm9sdW1lSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKTsKLSAgaW50IFNldFNw
ZWFrZXJWb2x1bWUodWludDMyX3Qgdm9sdW1lKTsKLSAgaW50IFNwZWFrZXJWb2x1bWUodWludDMy
X3QmIHZvbHVtZSkgY29uc3Q7Ci0gIGludCBNYXhTcGVha2VyVm9sdW1lKHVpbnQzMl90JiBtYXhf
dm9sdW1lKSBjb25zdDsKLSAgaW50IE1pblNwZWFrZXJWb2x1bWUodWludDMyX3QmIG1pbl92b2x1
bWUpIGNvbnN0OwotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIq
IGF1ZGlvQnVmZmVyKTsKLQotIHByaXZhdGU6Ci0gIC8vIENhbGxlZCBmcm9tIEphdmEgc2lkZSBz
byB3ZSBjYW4gY2FjaGUgdGhlIGFkZHJlc3Mgb2YgdGhlIEphdmEtbWFuZ2VkCi0gIC8vIHxieXRl
X2J1ZmZlcnwgaW4gfGRpcmVjdF9idWZmZXJfYWRkcmVzc198LiBUaGUgc2l6ZSBvZiB0aGUgYnVm
ZmVyCi0gIC8vIGlzIGFsc28gc3RvcmVkIGluIHxkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5
dGVzX3wuCi0gIC8vIENhbGxlZCBvbiB0aGUgc2FtZSB0aHJlYWQgYXMgdGhlIGNyZWF0aW5nIHRo
cmVhZC4KLSAgc3RhdGljIHZvaWQgSk5JQ0FMTCBDYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoCi0g
ICAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBqb2JqZWN0IGJ5dGVfYnVmZmVyLCBqbG9uZyBu
YXRpdmVBdWRpb1RyYWNrKTsKLSAgdm9pZCBPbkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhKTklF
bnYqIGVudiwgam9iamVjdCBieXRlX2J1ZmZlcik7Ci0KLSAgLy8gQ2FsbGVkIHBlcmlvZGljYWxs
eSBieSB0aGUgSmF2YSBiYXNlZCBXZWJSdGNBdWRpb1RyYWNrIG9iamVjdCB3aGVuCi0gIC8vIHBs
YXlvdXQgaGFzIHN0YXJ0ZWQuIEVhY2ggY2FsbCBpbmRpY2F0ZXMgdGhhdCB8bGVuZ3RofCBuZXcg
Ynl0ZXMgc2hvdWxkCi0gIC8vIGJlIHdyaXR0ZW4gdG8gdGhlIG1lbW9yeSBhcmVhIHxkaXJlY3Rf
YnVmZmVyX2FkZHJlc3NffCBmb3IgcGxheW91dC4KLSAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVk
IG9uIGEgaGlnaC1wcmlvcml0eSB0aHJlYWQgZnJvbSBKYXZhLiBUaGUgbmFtZSBvZgotICAvLyB0
aGUgdGhyZWFkIGlzICdBdWRpb1RyYWNrVGhyZWFkJy4KLSAgc3RhdGljIHZvaWQgSk5JQ0FMTCBH
ZXRQbGF5b3V0RGF0YSgKLSAgICBKTklFbnYqIGVudiwgam9iamVjdCBvYmosIGppbnQgbGVuZ3Ro
LCBqbG9uZyBuYXRpdmVBdWRpb1RyYWNrKTsKLSAgdm9pZCBPbkdldFBsYXlvdXREYXRhKHNpemVf
dCBsZW5ndGgpOwotCi0gIC8vIFN0b3JlcyB0aHJlYWQgSUQgaW4gY29uc3RydWN0b3IuCi0gIHJ0
Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl87Ci0KLSAgLy8gU3RvcmVzIHRocmVhZCBJ
RCBpbiBmaXJzdCBjYWxsIHRvIE9uR2V0UGxheW91dERhdGEoKSBmcm9tIGhpZ2gtcHJpb3JpdHkK
LSAgLy8gdGhyZWFkIGluIEphdmEuIERldGFjaGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhp
cyBvYmplY3QuCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl9qYXZhXzsKLQot
ICAvLyBDYWxscyBBdHRhY2hDdXJyZW50VGhyZWFkKCkgaWYgdGhpcyB0aHJlYWQgaXMgbm90IGF0
dGFjaGVkIGF0IGNvbnN0cnVjdGlvbi4KLSAgLy8gQWxzbyBlbnN1cmVzIHRoYXQgRGV0YWNoQ3Vy
cmVudFRocmVhZCgpIGlzIGNhbGxlZCBhdCBkZXN0cnVjdGlvbi4KLSAgQXR0YWNoQ3VycmVudFRo
cmVhZElmTmVlZGVkIGF0dGFjaF90aHJlYWRfaWZfbmVlZGVkXzsKLQotICAvLyBXcmFwcyB0aGUg
Sk5JIGludGVyZmFjZSBwb2ludGVyIGFuZCBtZXRob2RzIGFzc29jaWF0ZWQgd2l0aCBpdC4KLSAg
c3RkOjp1bmlxdWVfcHRyPEpOSUVudmlyb25tZW50PiBqX2Vudmlyb25tZW50XzsKLQotICAvLyBD
b250YWlucyBmYWN0b3J5IG1ldGhvZCBmb3IgY3JlYXRpbmcgdGhlIEphdmEgb2JqZWN0LgotICBz
dGQ6OnVuaXF1ZV9wdHI8TmF0aXZlUmVnaXN0cmF0aW9uPiBqX25hdGl2ZV9yZWdpc3RyYXRpb25f
OwotCi0gIC8vIFdyYXBzIHRoZSBKYXZhIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBBdWRpb1RyYWNr
Sm5pIGNsYXNzLgotICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9UcmFja0puaTo6SmF2YUF1ZGlvVHJh
Y2s+IGpfYXVkaW9fdHJhY2tfOwotCi0gIC8vIENvbnRhaW5zIGF1ZGlvIHBhcmFtZXRlcnMgcHJv
dmlkZWQgdG8gdGhpcyBjbGFzcyBhdCBjb25zdHJ1Y3Rpb24gYnkgdGhlCi0gIC8vIEF1ZGlvTWFu
YWdlci4KLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzIGF1ZGlvX3BhcmFtZXRlcnNfOwotCi0gIC8v
IENhY2hlZCBjb3B5IG9mIGFkZHJlc3MgdG8gZGlyZWN0IGF1ZGlvIGJ1ZmZlciBvd25lZCBieSB8
al9hdWRpb190cmFja198LgotICB2b2lkKiBkaXJlY3RfYnVmZmVyX2FkZHJlc3NfOwotCi0gIC8v
IE51bWJlciBvZiBieXRlcyBpbiB0aGUgZGlyZWN0IGF1ZGlvIGJ1ZmZlciBvd25lZCBieSB8al9h
dWRpb190cmFja198LgotICBzaXplX3QgZGlyZWN0X2J1ZmZlcl9jYXBhY2l0eV9pbl9ieXRlc187
Ci0KLSAgLy8gTnVtYmVyIG9mIGF1ZGlvIGZyYW1lcyBwZXIgYXVkaW8gYnVmZmVyLiBFYWNoIGF1
ZGlvIGZyYW1lIGNvcnJlc3BvbmRzIHRvCi0gIC8vIG9uZSBzYW1wbGUgb2YgUENNIG1vbm8gZGF0
YSBhdCAxNiBiaXRzIHBlciBzYW1wbGUuIEhlbmNlLCBlYWNoIGF1ZGlvCi0gIC8vIGZyYW1lIGNv
bnRhaW5zIDIgYnl0ZXMgKGdpdmVuIHRoYXQgdGhlIEphdmEgbGF5ZXIgb25seSBzdXBwb3J0cyBt
b25vKS4KLSAgLy8gRXhhbXBsZTogNDgwIGZvciA0ODAwMCBIeiBvciA0NDEgZm9yIDQ0MTAwIEh6
LgotICBzaXplX3QgZnJhbWVzX3Blcl9idWZmZXJfOwotCi0gIGJvb2wgaW5pdGlhbGl6ZWRfOwot
Ci0gIGJvb2wgcGxheWluZ187Ci0KLSAgLy8gUmF3IHBvaW50ZXIgaGFuZGxlIHByb3ZpZGVkIHRv
IHVzIGluIEF0dGFjaEF1ZGlvQnVmZmVyKCkuIE93bmVkIGJ5IHRoZQotICAvLyBBdWRpb0Rldmlj
ZU1vZHVsZUltcGwgY2xhc3MgYW5kIGNhbGxlZCBieSBBdWRpb0RldmljZU1vZHVsZTo6Q3JlYXRl
KCkuCi0gIC8vIFRoZSBBdWRpb0RldmljZUJ1ZmZlciBpcyBhIG1lbWJlciBvZiB0aGUgQXVkaW9E
ZXZpY2VNb2R1bGVJbXBsIGluc3RhbmNlCi0gIC8vIGFuZCB0aGVyZWZvcmUgb3V0bGl2ZXMgdGhp
cyBvYmplY3QuCi0gIEF1ZGlvRGV2aWNlQnVmZmVyKiBhdWRpb19kZXZpY2VfYnVmZmVyXzsKLX07
Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19B
VURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19UUkFDS19KTklfSF8KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvYnVpbGRfaW5mby5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxkX2luZm8u
Y2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYnVpbGRfaW5mby5jYwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5j
bHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYnVpbGRfaW5mby5oIgot
Ci0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5kcm9p
ZC5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotQnVpbGRJbmZvOjpCdWlsZEluZm8oKQotICAg
IDogal9lbnZpcm9ubWVudF8oSlZNOjpHZXRJbnN0YW5jZSgpLT5lbnZpcm9ubWVudCgpKSwKLSAg
ICAgIGpfYnVpbGRfaW5mb18oCi0gICAgICAgICAgSlZNOjpHZXRJbnN0YW5jZSgpLT5HZXRDbGFz
cygib3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8iKSkge30KLQotc3RkOjpzdHJpbmcg
QnVpbGRJbmZvOjpHZXRTdHJpbmdGcm9tSmF2YShjb25zdCBjaGFyKiBuYW1lKSB7Ci0gIGptZXRo
b2RJRCBpZCA9IGpfYnVpbGRfaW5mb18uR2V0U3RhdGljTWV0aG9kSWQobmFtZSwgIigpTGphdmEv
bGFuZy9TdHJpbmc7Iik7Ci0gIGpzdHJpbmcgal9zdHJpbmcgPSBzdGF0aWNfY2FzdDxqc3RyaW5n
PigKLSAgICAgIGpfYnVpbGRfaW5mb18uQ2FsbFN0YXRpY09iamVjdE1ldGhvZChpZCkpOwotICBy
ZXR1cm4gal9lbnZpcm9ubWVudF8tPkphdmFUb1N0ZFN0cmluZyhqX3N0cmluZyk7Ci19Ci0KLXN0
ZDo6c3RyaW5nIEJ1aWxkSW5mbzo6R2V0RGV2aWNlTW9kZWwoKSB7Ci0gIHJldHVybiBHZXRTdHJp
bmdGcm9tSmF2YSgiZ2V0RGV2aWNlTW9kZWwiKTsKLX0KLQotc3RkOjpzdHJpbmcgQnVpbGRJbmZv
OjpHZXRCcmFuZCgpIHsKLSAgcmV0dXJuIEdldFN0cmluZ0Zyb21KYXZhKCJnZXRCcmFuZCIpOwot
fQotCi1zdGQ6OnN0cmluZyBCdWlsZEluZm86OkdldERldmljZU1hbnVmYWN0dXJlcigpIHsKLSAg
cmV0dXJuIEdldFN0cmluZ0Zyb21KYXZhKCJnZXREZXZpY2VNYW51ZmFjdHVyZXIiKTsKLX0KLQot
c3RkOjpzdHJpbmcgQnVpbGRJbmZvOjpHZXRBbmRyb2lkQnVpbGRJZCgpIHsKLSAgcmV0dXJuIEdl
dFN0cmluZ0Zyb21KYXZhKCJnZXRBbmRyb2lkQnVpbGRJZCIpOwotfQotCi1zdGQ6OnN0cmluZyBC
dWlsZEluZm86OkdldEJ1aWxkVHlwZSgpIHsKLSAgcmV0dXJuIEdldFN0cmluZ0Zyb21KYXZhKCJn
ZXRCdWlsZFR5cGUiKTsKLX0KLQotc3RkOjpzdHJpbmcgQnVpbGRJbmZvOjpHZXRCdWlsZFJlbGVh
c2UoKSB7Ci0gIHJldHVybiBHZXRTdHJpbmdGcm9tSmF2YSgiZ2V0QnVpbGRSZWxlYXNlIik7Ci19
Ci0KLVNka0NvZGUgQnVpbGRJbmZvOjpHZXRTZGtWZXJzaW9uKCkgewotICBqbWV0aG9kSUQgaWQg
PSBqX2J1aWxkX2luZm9fLkdldFN0YXRpY01ldGhvZElkKCJnZXRTZGtWZXJzaW9uIiwgIigpSSIp
OwotICBqaW50IGpfdmVyc2lvbiA9IGpfYnVpbGRfaW5mb18uQ2FsbFN0YXRpY0ludE1ldGhvZChp
ZCk7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxTZGtDb2RlPihqX3ZlcnNpb24pOwotfQotCi19ICAv
LyBuYW1lc3BhY2Ugd2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxkX2luZm8uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxkX2luZm8uaAkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19kZXZpY2UvYW5kcm9pZC9idWlsZF9pbmZvLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw4NSArMCww
IEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9y
cy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5k
IGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUu
IEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUg
Zm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0
IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19BVURJ
T19ERVZJQ0VfQU5EUk9JRF9CVUlMRF9JTkZPX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FV
RElPX0RFVklDRV9BTkRST0lEX0JVSUxEX0lORk9fSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotI2lu
Y2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvbW9k
dWxlcy91dGlsaXR5L2luY2x1ZGUvanZtX2FuZHJvaWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7
Ci0KLS8vIFRoaXMgZW51bWVyYXRpb24gbWFwcyB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5IEJ1
aWxkSW5mbzo6R2V0U2RrVmVyc2lvbigpLAotLy8gaW5kaWNhdGluZyB0aGUgQW5kcm9pZCByZWxl
YXNlIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIFNESyB2ZXJzaW9uLgotLy8gU2VlIGh0dHBzOi8v
ZGV2ZWxvcGVyLmFuZHJvaWQuY29tL2d1aWRlL3RvcGljcy9tYW5pZmVzdC91c2VzLXNkay1lbGVt
ZW50Lmh0bWwKLS8vIGZvciBkZXRhaWxzLgotZW51bSBTZGtDb2RlIHsKLSAgU0RLX0NPREVfSkVM
TFlfQkVBTiA9IDE2LCAgICAgIC8vIEFuZHJvaWQgNC4xCi0gIFNES19DT0RFX0pFTExZX0JFQU5f
TVIxID0gMTcsICAvLyBBbmRyb2lkIDQuMgotICBTREtfQ09ERV9KRUxMWV9CRUFOX01SMiA9IDE4
LCAgLy8gQW5kcm9pZCA0LjMKLSAgU0RLX0NPREVfS0lUS0FUID0gMTksICAgICAgICAgIC8vIEFu
ZHJvaWQgNC40Ci0gIFNES19DT0RFX1dBVENIID0gMjAsICAgICAgICAgICAvLyBBbmRyb2lkIDQu
NFcKLSAgU0RLX0NPREVfTE9MTElQT1AgPSAyMSwgICAgICAgIC8vIEFuZHJvaWQgNS4wCi0gIFNE
S19DT0RFX0xPTExJUE9QX01SMSA9IDIyLCAgICAvLyBBbmRyb2lkIDUuMQotICBTREtfQ09ERV9N
QVJTSE1BTExPVyA9IDIzLCAgICAgLy8gQW5kcm9pZCA2LjAKLSAgU0RLX0NPREVfTiA9IDI0LAot
fTsKLQotLy8gVXRpbGl0eSBjbGFzcyB1c2VkIHRvIHF1ZXJ5IHRoZSBKYXZhIGNsYXNzIChvcmcv
d2VicnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mbykKLS8vIGZvciBkZXZpY2UgYW5kIEFuZHJvaWQg
YnVpbGQgaW5mb3JtYXRpb24uCi0vLyBUaGUgY2FsbGluZyB0aHJlYWQgaXMgYXR0YWNoZWQgdG8g
dGhlIEpWTSBhdCBjb25zdHJ1Y3Rpb24gaWYgbmVlZGVkIGFuZCBhCi0vLyB2YWxpZCBKYXZhIGVu
dmlyb25tZW50IG9iamVjdCBpcyBhbHNvIGNyZWF0ZWQuCi0vLyBBbGwgR2V0IG1ldGhvZHMgbXVz
dCBiZSBjYWxsZWQgb24gdGhlIGNyZWF0aW5nIHRocmVhZC4gSWYgbm90LCB0aGUgY29kZSB3aWxs
Ci0vLyBoaXQgUlRDX0RDSEVDS3Mgd2hlbiBjYWxsaW5nIEpOSUVudmlyb25tZW50OjpKYXZhVG9T
dGRTdHJpbmcoKS4KLWNsYXNzIEJ1aWxkSW5mbyB7Ci0gcHVibGljOgotICBCdWlsZEluZm8oKTsK
LSAgfkJ1aWxkSW5mbygpIHt9Ci0KLSAgLy8gRW5kLXVzZXItdmlzaWJsZSBuYW1lIGZvciB0aGUg
ZW5kIHByb2R1Y3QgKGUuZy4gIk5leHVzIDYiKS4KLSAgc3RkOjpzdHJpbmcgR2V0RGV2aWNlTW9k
ZWwoKTsKLSAgLy8gQ29uc3VtZXItdmlzaWJsZSBicmFuZCAoZS5nLiAiZ29vZ2xlIikuCi0gIHN0
ZDo6c3RyaW5nIEdldEJyYW5kKCk7Ci0gIC8vIE1hbnVmYWN0dXJlciBvZiB0aGUgcHJvZHVjdC9o
YXJkd2FyZSAoZS5nLiAibW90b3JvbGEiKS4KLSAgc3RkOjpzdHJpbmcgR2V0RGV2aWNlTWFudWZh
Y3R1cmVyKCk7Ci0gIC8vIEFuZHJvaWQgYnVpbGQgSUQgKGUuZy4gTE1ZNDdEKS4KLSAgc3RkOjpz
dHJpbmcgR2V0QW5kcm9pZEJ1aWxkSWQoKTsKLSAgLy8gVGhlIHR5cGUgb2YgYnVpbGQgKGUuZy4g
InVzZXIiIG9yICJlbmciKS4KLSAgc3RkOjpzdHJpbmcgR2V0QnVpbGRUeXBlKCk7Ci0gIC8vIFRo
ZSB1c2VyLXZpc2libGUgdmVyc2lvbiBzdHJpbmcgKGUuZy4gIjUuMSIpLgotICBzdGQ6OnN0cmlu
ZyBHZXRCdWlsZFJlbGVhc2UoKTsKLSAgLy8gVGhlIHVzZXItdmlzaWJsZSBTREsgdmVyc2lvbiBv
ZiB0aGUgZnJhbWV3b3JrIChlLmcuIDIxKS4gU2VlIFNka0NvZGUgZW51bQotICAvLyBmb3IgdHJh
bnNsYXRpb24uCi0gIFNka0NvZGUgR2V0U2RrVmVyc2lvbigpOwotCi0gcHJpdmF0ZToKLSAgLy8g
SGVscGVyIG1ldGhvZCB3aGljaCBjYWxscyBhIHN0YXRpYyBnZXR0ZXIgbWV0aG9kIHdpdGggfG5h
bWV8IGFuZCByZXR1cm5zCi0gIC8vIGEgc3RyaW5nIGZyb20gSmF2YS4KLSAgc3RkOjpzdHJpbmcg
R2V0U3RyaW5nRnJvbUphdmEoY29uc3QgY2hhciogbmFtZSk7Ci0KLSAgLy8gRW5zdXJlcyB0aGF0
IHRoaXMgY2xhc3MgY2FuIGFjY2VzcyBhIHZhbGlkIEpOSSBpbnRlcmZhY2UgcG9pbnRlciBldmVu
Ci0gIC8vIGlmIHRoZSBjcmVhdGluZyB0aHJlYWQgd2FzIG5vdCBhdHRhY2hlZCB0byB0aGUgSlZN
LgotICBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQgYXR0YWNoX3RocmVhZF9pZl9uZWVkZWRf
OwotCi0gIC8vIFByb3ZpZGVzIGFjY2VzcyB0byB0aGUgSk5JRW52IGludGVyZmFjZSBwb2ludGVy
IGFuZCB0aGUgSmF2YVRvU3RkU3RyaW5nKCkKLSAgLy8gbWV0aG9kIHdoaWNoIGlzIHVzZWQgdG8g
dHJhbnNsYXRlIEphdmEgc3RyaW5ncyB0byBzdGQgc3RyaW5ncy4KLSAgc3RkOjp1bmlxdWVfcHRy
PEpOSUVudmlyb25tZW50PiBqX2Vudmlyb25tZW50XzsKLQotICAvLyBIb2xkcyB0aGUgamNsYXNz
IG9iamVjdCBhbmQgcHJvdmlkZXMgYWNjZXNzIHRvIENhbGxTdGF0aWNPYmplY3RNZXRob2QoKS4K
LSAgLy8gVXNlZCBieSBHZXRTdHJpbmdGcm9tSmF2YSgpIGR1cmluZyBjb25zdHJ1Y3Rpb24gb25s
eS4KLSAgSmF2YUNsYXNzIGpfYnVpbGRfaW5mb187Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2Vi
cnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQlVJ
TERfSU5GT19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuY2MKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuY2MJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRpYWxpemVkLmNjCShub25leGlz
dGVudCkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdl
YlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAq
ICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBy
aWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBj
b250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRI
T1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRl
ICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQu
aCIKLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2lnbm9y
ZV93dW5kZWYuaCIKLQotLy8gTm90ZTogdGhpcyBkZXBlbmRlbmN5IGlzIGRhbmdlcm91cyBzaW5j
ZSBpdCByZWFjaGVzIGludG8gQ2hyb21pdW0ncyBiYXNlLgotLy8gVGhlcmUncyBhIHJpc2sgb2Yg
ZS5nLiBtYWNybyBjbGFzaGVzLiBUaGlzIGZpbGUgbWF5IG9ubHkgYmUgdXNlZCBpbiB0ZXN0cy4K
LVJUQ19QVVNIX0lHTk9SSU5HX1dVTkRFRigpCi0jaW5jbHVkZSAiYmFzZS9hbmRyb2lkL2NvbnRl
eHRfdXRpbHMuaCIKLSNpbmNsdWRlICJiYXNlL2FuZHJvaWQvam5pX2FuZHJvaWQuaCIKLVJUQ19Q
T1BfSUdOT1JJTkdfV1VOREVGKCkKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNvcmRf
am5pLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVk
aW9fdHJhY2tfam5pLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRl
L2p2bV9hbmRyb2lkLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGF1ZGlvZGV2
aWNlbW9kdWxlIHsKLQotc3RhdGljIHB0aHJlYWRfb25jZV90IGdfaW5pdGlhbGl6ZV9vbmNlID0g
UFRIUkVBRF9PTkNFX0lOSVQ7Ci0KLXZvaWQgRW5zdXJlSW5pdGlhbGl6ZWRPbmNlKCkgewotICBS
VENfQ0hFQ0soOjpiYXNlOjphbmRyb2lkOjpJc1ZNSW5pdGlhbGl6ZWQoKSk7Ci0gIEpOSUVudiog
am5pID0gOjpiYXNlOjphbmRyb2lkOjpBdHRhY2hDdXJyZW50VGhyZWFkKCk7Ci0gIEphdmFWTSog
anZtID0gTlVMTDsKLSAgUlRDX0NIRUNLX0VRKDAsIGpuaS0+R2V0SmF2YVZNKCZqdm0pKTsKLSAg
am9iamVjdCBjb250ZXh0ID0gOjpiYXNlOjphbmRyb2lkOjpHZXRBcHBsaWNhdGlvbkNvbnRleHQo
KS5vYmooKTsKLQotICAvLyBJbml0aWFsaXplIHRoZSBKYXZhIGVudmlyb25tZW50IChjdXJyZW50
bHkgb25seSB1c2VkIGJ5IHRoZSBhdWRpbyBtYW5hZ2VyKS4KLSAgd2VicnRjOjpKVk06OkluaXRp
YWxpemUoanZtLCBjb250ZXh0KTsKLX0KLQotdm9pZCBFbnN1cmVJbml0aWFsaXplZCgpIHsKLSAg
UlRDX0NIRUNLX0VRKDAsIHB0aHJlYWRfb25jZSgmZ19pbml0aWFsaXplX29uY2UsICZFbnN1cmVJ
bml0aWFsaXplZE9uY2UpKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIGF1ZGlvZGV2aWNlbW9kdWxl
Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2Vuc3VyZV9pbml0
aWFsaXplZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRpYWxpemVk
LmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRpYWxpemVk
LmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgYXVkaW9kZXZpY2Vtb2R1bGUgewotCi12
b2lkIEVuc3VyZUluaXRpYWxpemVkKCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSBhdWRpb2RldmljZW1v
ZHVsZQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mby5qYXZhCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8uamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L3ZvaWNlZW5naW5lL0J1aWxkSW5mby5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTEgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2lu
ZTsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBCdWls
ZEluZm8gewotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXZpY2UoKSB7Ci0gICAgcmV0dXJu
IEJ1aWxkLkRFVklDRTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERldmljZU1v
ZGVsKCkgewotICAgIHJldHVybiBCdWlsZC5NT0RFTDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMg
U3RyaW5nIGdldFByb2R1Y3QoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlBST0RVQ1Q7Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCcmFuZCgpIHsKLSAgICByZXR1cm4gQnVpbGQuQlJB
TkQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXZpY2VNYW51ZmFjdHVyZXIo
KSB7Ci0gICAgcmV0dXJuIEJ1aWxkLk1BTlVGQUNUVVJFUjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgU3RyaW5nIGdldEFuZHJvaWRCdWlsZElkKCkgewotICAgIHJldHVybiBCdWlsZC5JRDsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJ1aWxkVHlwZSgpIHsKLSAgICByZXR1cm4g
QnVpbGQuVFlQRTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJ1aWxkUmVsZWFz
ZSgpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5SRUxFQVNFOwotICB9Ci0KLSAgcHVibGlj
IHN0YXRpYyBpbnQgZ2V0U2RrVmVyc2lvbigpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5T
REtfSU5UOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
dm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZmZWN0
cy5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEJKG5vbmV4aXN0ZW50KQpA
QCAtMSwzMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndl
YnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0
IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRp
b2Z4LkFjb3VzdGljRWNob0NhbmNlbGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5B
dWRpb0VmZmVjdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3QuRGVz
Y3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXV0b21hdGljR2FpbkNvbnRy
b2w7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4Lk5vaXNlU3VwcHJlc3NvcjsKLWltcG9y
dCBhbmRyb2lkLm9zLkJ1aWxkOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2
YS51dGlsLlVVSUQ7Ci0KLS8vIFRoaXMgY2xhc3Mgd3JhcHMgY29udHJvbCBvZiB0aHJlZSBkaWZm
ZXJlbnQgcGxhdGZvcm0gZWZmZWN0cy4gU3VwcG9ydGVkCi0vLyBlZmZlY3RzIGFyZTogQWNvdXN0
aWNFY2hvQ2FuY2VsZXIgKEFFQykgYW5kIE5vaXNlU3VwcHJlc3NvciAoTlMpLgotLy8gQ2FsbGlu
ZyBlbmFibGUoKSB3aWxsIGFjdGl2ZSBhbGwgZWZmZWN0cyB0aGF0IGFyZQotLy8gc3VwcG9ydGVk
IGJ5IHRoZSBkZXZpY2UgaWYgdGhlIGNvcnJlc3BvbmRpbmcgfHNob3VsZEVuYWJsZVhYWHwgbWVt
YmVyIGlzIHNldC4KLWNsYXNzIFdlYlJ0Y0F1ZGlvRWZmZWN0cyB7Ci0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBT
dHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvRWZmZWN0cyI7Ci0KLSAgLy8gVVVJRHMgZm9yIFNvZnR3
YXJlIEF1ZGlvIEVmZmVjdHMgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHVzaW5nLgotICAvLyBUaGUg
aW1wbGVtZW50b3IgZmllbGQgd2lsbCBiZSBzZXQgdG8gIlRoZSBBbmRyb2lkIE9wZW4gU291cmNl
IFByb2plY3QiLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVVUlEIEFPU1BfQUNPVVNUSUNfRUNI
T19DQU5DRUxFUiA9Ci0gICAgICBVVUlELmZyb21TdHJpbmcoImJiMzkyZWMwLThkNGQtMTFlMC1h
ODk2LTAwMDJhNWQ1YzUxYiIpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVVUlEIEFPU1BfTk9J
U0VfU1VQUFJFU1NPUiA9Ci0gICAgICBVVUlELmZyb21TdHJpbmcoImMwNmM4NDAwLThlMDYtMTFl
MC05Y2I2LTAwMDJhNWQ1YzUxYiIpOwotCi0gIC8vIENvbnRhaW5zIHRoZSBhdmFpbGFibGUgZWZm
ZWN0IGRlc2NyaXB0b3JzIHJldHVybmVkIGZyb20gdGhlCi0gIC8vIEF1ZGlvRWZmZWN0LmdldEVm
ZmVjdHMoKSBjYWxsLiBUaGlzIHJlc3VsdCBpcyBjYWNoZWQgdG8gYXZvaWQgZG9pbmcgdGhlCi0g
IC8vIHNsb3cgT1MgY2FsbCBtdWx0aXBsZSB0aW1lcy4KLSAgcHJpdmF0ZSBzdGF0aWMgRGVzY3Jp
cHRvcltdIGNhY2hlZEVmZmVjdHMgPSBudWxsOwotCi0gIC8vIENvbnRhaW5zIHRoZSBhdWRpbyBl
ZmZlY3Qgb2JqZWN0cy4gQ3JlYXRlZCBpbiBlbmFibGUoKSBhbmQgZGVzdHJveWVkCi0gIC8vIGlu
IHJlbGVhc2UoKS4KLSAgcHJpdmF0ZSBBY291c3RpY0VjaG9DYW5jZWxlciBhZWMgPSBudWxsOwot
ICBwcml2YXRlIE5vaXNlU3VwcHJlc3NvciBucyA9IG51bGw7Ci0KLSAgLy8gQWZmZWN0cyB0aGUg
ZmluYWwgc3RhdGUgZ2l2ZW4gdG8gdGhlIHNldEVuYWJsZWQoKSBtZXRob2Qgb24gZWFjaCBlZmZl
Y3QuCi0gIC8vIFRoZSBkZWZhdWx0IHN0YXRlIGlzIHNldCB0byAiZGlzYWJsZWQiIGJ1dCBlYWNo
IGVmZmVjdCBjYW4gYWxzbyBiZSBlbmFibGVkCi0gIC8vIGJ5IGNhbGxpbmcgc2V0QUVDKCkgYW5k
IHNldE5TKCkuCi0gIC8vIFRvIGVuYWJsZSBhbiBlZmZlY3QsIGJvdGggdGhlIHNob3VsZEVuYWJs
ZVhYWCBtZW1iZXIgYW5kIHRoZSBzdGF0aWMKLSAgLy8gY2FuVXNlWFhYKCkgbXVzdCBiZSB0cnVl
LgotICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkRW5hYmxlQWVjID0gZmFsc2U7Ci0gIHByaXZhdGUg
Ym9vbGVhbiBzaG91bGRFbmFibGVOcyA9IGZhbHNlOwotCi0gIC8vIENoZWNrcyBpZiB0aGUgZGV2
aWNlIGltcGxlbWVudHMgQWNvdXN0aWMgRWNobyBDYW5jZWxsYXRpb24gKEFFQykuCi0gIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGltcGxlbWVudHMgQUVDLCBmYWxzZSBvdGhlcndpc2Uu
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVk
KCkgewotICAgIC8vIE5vdGU6IHdlJ3JlIHVzaW5nIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJFZmZl
Y3RBdmFpbGFibGUoKSBpbnN0ZWFkIG9mCi0gICAgLy8gQWNvdXN0aWNFY2hvQ2FuY2VsZXIuaXNB
dmFpbGFibGUoKSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGdldEVmZmVjdHMoKQotICAgIC8vIE9T
IEFQSSBjYWxsLgotICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5QmVh
bk9ySGlnaGVyKCkgJiYgaXNBY291c3RpY0VjaG9DYW5jZWxlckVmZmVjdEF2YWlsYWJsZSgpOwot
ICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIHRoZSBkZXZpY2UgaW1wbGVtZW50cyBOb2lzZSBTdXBwcmVz
c2lvbiAoTlMpLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIE5T
LCBmYWxzZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJl
c3NvclN1cHBvcnRlZCgpIHsKLSAgICAvLyBOb3RlOiB3ZSdyZSB1c2luZyBpc05vaXNlU3VwcHJl
c3NvckVmZmVjdEF2YWlsYWJsZSgpIGluc3RlYWQgb2YKLSAgICAvLyBOb2lzZVN1cHByZXNzb3Iu
aXNBdmFpbGFibGUoKSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGdldEVmZmVjdHMoKQotICAgIC8v
IE9TIEFQSSBjYWxsLgotICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5
QmVhbk9ySGlnaGVyKCkgJiYgaXNOb2lzZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGJsYWNrbGlzdGVkIGZvciBI
VyBBRUMgdXNhZ2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNl
bGVyQmxhY2tsaXN0ZWQoKSB7Ci0gICAgTGlzdDxTdHJpbmc+IGJsYWNrTGlzdGVkTW9kZWxzID0g
V2ViUnRjQXVkaW9VdGlscy5nZXRCbGFja0xpc3RlZE1vZGVsc0ZvckFlY1VzYWdlKCk7Ci0gICAg
Ym9vbGVhbiBpc0JsYWNrbGlzdGVkID0gYmxhY2tMaXN0ZWRNb2RlbHMuY29udGFpbnMoQnVpbGQu
TU9ERUwpOwotICAgIGlmIChpc0JsYWNrbGlzdGVkKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCBC
dWlsZC5NT0RFTCArICIgaXMgYmxhY2tsaXN0ZWQgZm9yIEhXIEFFQyB1c2FnZSEiKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGlzQmxhY2tsaXN0ZWQ7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGRldmljZSBpcyBibGFja2xpc3RlZCBmb3IgSFcgTlMgdXNhZ2UuCi0gIHB1YmxpYyBzdGF0
aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvckJsYWNrbGlzdGVkKCkgewotICAgIExpc3Q8U3Ry
aW5nPiBibGFja0xpc3RlZE1vZGVscyA9IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0QmxhY2tMaXN0ZWRN
b2RlbHNGb3JOc1VzYWdlKCk7Ci0gICAgYm9vbGVhbiBpc0JsYWNrbGlzdGVkID0gYmxhY2tMaXN0
ZWRNb2RlbHMuY29udGFpbnMoQnVpbGQuTU9ERUwpOwotICAgIGlmIChpc0JsYWNrbGlzdGVkKSB7
Ci0gICAgICBMb2dnaW5nLncoVEFHLCBCdWlsZC5NT0RFTCArICIgaXMgYmxhY2tsaXN0ZWQgZm9y
IEhXIE5TIHVzYWdlISIpOwotICAgIH0KLSAgICByZXR1cm4gaXNCbGFja2xpc3RlZDsKLSAgfQot
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gQUVDIHNob3VsZCBiZSBleGNsdWRl
ZCBiYXNlZCBvbiBpdHMgVVVJRC4KLSAgLy8gQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCkgY2Fu
IHRocm93IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi4KLSAgQFRhcmdldEFwaSgxOCkKLSAgcHJpdmF0
ZSBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyRXhjbHVkZWRCeVVVSUQoKSB7
Ci0gICAgZm9yIChEZXNjcmlwdG9yIGQgOiBnZXRBdmFpbGFibGVFZmZlY3RzKCkpIHsKLSAgICAg
IGlmIChkLnR5cGUuZXF1YWxzKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX0FFQykKLSAgICAgICAg
ICAmJiBkLnV1aWQuZXF1YWxzKEFPU1BfQUNPVVNUSUNfRUNIT19DQU5DRUxFUikpIHsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQot
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gTlMgc2hvdWxkIGJlIGV4Y2x1ZGVk
IGJhc2VkIG9uIGl0cyBVVUlELgotICAvLyBBdWRpb0VmZmVjdC5xdWVyeUVmZmVjdHMoKSBjYW4g
dGhyb3cgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRl
IHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yRXhjbHVkZWRCeVVVSUQoKSB7Ci0gICAg
Zm9yIChEZXNjcmlwdG9yIGQgOiBnZXRBdmFpbGFibGVFZmZlY3RzKCkpIHsKLSAgICAgIGlmIChk
LnR5cGUuZXF1YWxzKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX05TKSAmJiBkLnV1aWQuZXF1YWxz
KEFPU1BfTk9JU0VfU1VQUFJFU1NPUikpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9
Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZGV2aWNlIHN1cHBvcnRzIEFjb3VzdGljIEVjaG8gQ2FuY2VsbGF0aW9uIChBRUMpLgotICBA
VGFyZ2V0QXBpKDE4KQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXJFZmZlY3RBdmFpbGFibGUoKSB7Ci0gICAgcmV0dXJuIGlzRWZmZWN0VHlwZUF2YWlsYWJs
ZShBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9BRUMpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgTm9pc2UgU3VwcHJlc3Npb24gKE5TKS4KLSAgQFRhcmdl
dEFwaSgxOCkKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvckVmZmVj
dEF2YWlsYWJsZSgpIHsKLSAgICByZXR1cm4gaXNFZmZlY3RUeXBlQXZhaWxhYmxlKEF1ZGlvRWZm
ZWN0LkVGRkVDVF9UWVBFX05TKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgY29u
ZGl0aW9ucyBmb3Igc3VwcG9ydGluZyB0aGUgSFcgQUVDIGFyZSBmdWxmaWxsZWQuCi0gIC8vIEl0
IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGVuYWJsZSB0aGUgSFcgQUVDIGlmIHRoaXMgbWV0aG9k
IHJldHVybnMgZmFsc2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjYW5Vc2VBY291c3RpY0Vj
aG9DYW5jZWxlcigpIHsKLSAgICBib29sZWFuIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyID0g
aXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpCi0gICAgICAgICYmICFXZWJSdGNBdWRp
b1V0aWxzLnVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKQotICAgICAgICAmJiAh
aXNBY291c3RpY0VjaG9DYW5jZWxlckJsYWNrbGlzdGVkKCkgJiYgIWlzQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXJFeGNsdWRlZEJ5VVVJRCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJjYW5Vc2VBY291c3Rp
Y0VjaG9DYW5jZWxlcjogIiArIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKTsKLSAgICByZXR1
cm4gY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXI7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUg
aWYgYWxsIGNvbmRpdGlvbnMgZm9yIHN1cHBvcnRpbmcgdGhlIEhXIE5TIGFyZSBmdWxmaWxsZWQu
Ci0gIC8vIEl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGVuYWJsZSB0aGUgSFcgTlMgaWYgdGhp
cyBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGNhblVzZU5v
aXNlU3VwcHJlc3NvcigpIHsKLSAgICBib29sZWFuIGNhblVzZU5vaXNlU3VwcHJlc3NvciA9IGlz
Tm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkKLSAgICAgICAgJiYgIVdlYlJ0Y0F1ZGlvVXRpbHMu
dXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoKSAmJiAhaXNOb2lzZVN1cHByZXNzb3JCbGFj
a2xpc3RlZCgpCi0gICAgICAgICYmICFpc05vaXNlU3VwcHJlc3NvckV4Y2x1ZGVkQnlVVUlEKCk7
Ci0gICAgTG9nZ2luZy5kKFRBRywgImNhblVzZU5vaXNlU3VwcHJlc3NvcjogIiArIGNhblVzZU5v
aXNlU3VwcHJlc3Nvcik7Ci0gICAgcmV0dXJuIGNhblVzZU5vaXNlU3VwcHJlc3NvcjsKLSAgfQot
Ci0gIHN0YXRpYyBXZWJSdGNBdWRpb0VmZmVjdHMgY3JlYXRlKCkgewotICAgIC8vIFJldHVybiBu
dWxsIGlmIFZvSVAgZWZmZWN0cyAoQUVDLCBBR0MgYW5kIE5TKSBhcmUgbm90IHN1cHBvcnRlZC4K
LSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuT3JIaWdoZXIoKSkg
ewotICAgICAgTG9nZ2luZy53KFRBRywgIkFQSSBsZXZlbCAxNiBvciBoaWdoZXIgaXMgcmVxdWly
ZWQhIik7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBXZWJSdGNB
dWRpb0VmZmVjdHMoKTsKLSAgfQotCi0gIHByaXZhdGUgV2ViUnRjQXVkaW9FZmZlY3RzKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5m
bygpKTsKLSAgfQotCi0gIC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlIG9yIGRpc2FibGUg
dGhlIHBsYXRmb3JtIEFFQy4gSXQgbW9kaWZpZXMKLSAgLy8gfHNob3VsZEVuYWJsZUFlY3wgd2hp
Y2ggaXMgdXNlZCBpbiBlbmFibGUoKSB3aGVyZSB0aGUgYWN0dWFsIHN0YXRlCi0gIC8vIG9mIHRo
ZSBBRUMgZWZmZWN0IGlzIG1vZGlmaWVkLiBSZXR1cm5zIHRydWUgaWYgSFcgQUVDIGlzIHN1cHBv
cnRlZCBhbmQKLSAgLy8gZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgYm9vbGVhbiBzZXRBRUMo
Ym9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic2V0QUVDKCIgKyBlbmFibGUg
KyAiKSIpOwotICAgIGlmICghY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKSkgewotICAgICAg
TG9nZ2luZy53KFRBRywgIlBsYXRmb3JtIEFFQyBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICBz
aG91bGRFbmFibGVBZWMgPSBmYWxzZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
aWYgKGFlYyAhPSBudWxsICYmIChlbmFibGUgIT0gc2hvdWxkRW5hYmxlQWVjKSkgewotICAgICAg
TG9nZ2luZy5lKFRBRywgIlBsYXRmb3JtIEFFQyBzdGF0ZSBjYW4ndCBiZSBtb2RpZmllZCB3aGls
ZSByZWNvcmRpbmciKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc2hvdWxkRW5h
YmxlQWVjID0gZW5hYmxlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gQ2FsbCB0aGlz
IG1ldGhvZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gTlMuIEl0IG1vZGlmaWVz
Ci0gIC8vIHxzaG91bGRFbmFibGVOc3wgd2hpY2ggaXMgdXNlZCBpbiBlbmFibGUoKSB3aGVyZSB0
aGUgYWN0dWFsIHN0YXRlCi0gIC8vIG9mIHRoZSBOUyBlZmZlY3QgaXMgbW9kaWZpZWQuIFJldHVy
bnMgdHJ1ZSBpZiBIVyBOUyBpcyBzdXBwb3J0ZWQgYW5kCi0gIC8vIGZhbHNlIG90aGVyd2lzZS4K
LSAgcHVibGljIGJvb2xlYW4gc2V0TlMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQo
VEFHLCAic2V0TlMoIiArIGVuYWJsZSArICIpIik7Ci0gICAgaWYgKCFjYW5Vc2VOb2lzZVN1cHBy
ZXNzb3IoKSkgewotICAgICAgTG9nZ2luZy53KFRBRywgIlBsYXRmb3JtIE5TIGlzIG5vdCBzdXBw
b3J0ZWQiKTsKLSAgICAgIHNob3VsZEVuYWJsZU5zID0gZmFsc2U7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIGlmIChucyAhPSBudWxsICYmIChlbmFibGUgIT0gc2hvdWxkRW5hYmxl
TnMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiUGxhdGZvcm0gTlMgc3RhdGUgY2FuJ3QgYmUg
bW9kaWZpZWQgd2hpbGUgcmVjb3JkaW5nIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHNob3VsZEVuYWJsZU5zID0gZW5hYmxlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAg
cHVibGljIHZvaWQgZW5hYmxlKGludCBhdWRpb1Nlc3Npb24pIHsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiZW5hYmxlKGF1ZGlvU2Vzc2lvbj0iICsgYXVkaW9TZXNzaW9uICsgIikiKTsKLSAgICBhc3Nl
cnRUcnVlKGFlYyA9PSBudWxsKTsKLSAgICBhc3NlcnRUcnVlKG5zID09IG51bGwpOwotCi0gICAg
Ly8gQWRkIGxvZ2dpbmcgb2Ygc3VwcG9ydGVkIGVmZmVjdHMgYnV0IGZpbHRlciBvdXQgIlZvSVAg
ZWZmZWN0cyIsIGkuZS4sCi0gICAgLy8gQUVDLCBBRUMgYW5kIE5TLgotICAgIGZvciAoRGVzY3Jp
cHRvciBkIDogQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCkpIHsKLSAgICAgIGlmIChlZmZlY3RU
eXBlSXNWb0lQKGQudHlwZSkgfHwgREVCVUcpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIm5h
bWU6ICIgKyBkLm5hbWUgKyAiLCAiCi0gICAgICAgICAgICAgICAgKyAibW9kZTogIiArIGQuY29u
bmVjdE1vZGUgKyAiLCAiCi0gICAgICAgICAgICAgICAgKyAiaW1wbGVtZW50b3I6ICIgKyBkLmlt
cGxlbWVudG9yICsgIiwgIgotICAgICAgICAgICAgICAgICsgIlVVSUQ6ICIgKyBkLnV1aWQpOwot
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVk
KCkpIHsKLSAgICAgIC8vIENyZWF0ZSBhbiBBY291c3RpY0VjaG9DYW5jZWxlciBhbmQgYXR0YWNo
IGl0IHRvIHRoZSBBdWRpb1JlY29yZCBvbgotICAgICAgLy8gdGhlIHNwZWNpZmllZCBhdWRpbyBz
ZXNzaW9uLgotICAgICAgYWVjID0gQWNvdXN0aWNFY2hvQ2FuY2VsZXIuY3JlYXRlKGF1ZGlvU2Vz
c2lvbik7Ci0gICAgICBpZiAoYWVjICE9IG51bGwpIHsKLSAgICAgICAgYm9vbGVhbiBlbmFibGVk
ID0gYWVjLmdldEVuYWJsZWQoKTsKLSAgICAgICAgYm9vbGVhbiBlbmFibGUgPSBzaG91bGRFbmFi
bGVBZWMgJiYgY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKTsKLSAgICAgICAgaWYgKGFlYy5z
ZXRFbmFibGVkKGVuYWJsZSkgIT0gQXVkaW9FZmZlY3QuU1VDQ0VTUykgewotICAgICAgICAgIExv
Z2dpbmcuZShUQUcsICJGYWlsZWQgdG8gc2V0IHRoZSBBY291c3RpY0VjaG9DYW5jZWxlciBzdGF0
ZSIpOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJBY291c3RpY0VjaG9DYW5j
ZWxlcjogd2FzICIgKyAoZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpCi0gICAgICAg
ICAgICAgICAgKyAiLCBlbmFibGU6ICIgKyBlbmFibGUgKyAiLCBpcyBub3c6ICIKLSAgICAgICAg
ICAgICAgICArIChhZWMuZ2V0RW5hYmxlZCgpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOwot
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBjcmVhdGUg
dGhlIEFjb3VzdGljRWNob0NhbmNlbGVyIGluc3RhbmNlIik7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpIHsKLSAgICAgIC8vIENyZWF0ZSBh
biBOb2lzZVN1cHByZXNzb3IgYW5kIGF0dGFjaCBpdCB0byB0aGUgQXVkaW9SZWNvcmQgb24gdGhl
Ci0gICAgICAvLyBzcGVjaWZpZWQgYXVkaW8gc2Vzc2lvbi4KLSAgICAgIG5zID0gTm9pc2VTdXBw
cmVzc29yLmNyZWF0ZShhdWRpb1Nlc3Npb24pOwotICAgICAgaWYgKG5zICE9IG51bGwpIHsKLSAg
ICAgICAgYm9vbGVhbiBlbmFibGVkID0gbnMuZ2V0RW5hYmxlZCgpOwotICAgICAgICBib29sZWFu
IGVuYWJsZSA9IHNob3VsZEVuYWJsZU5zICYmIGNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwotICAg
ICAgICBpZiAobnMuc2V0RW5hYmxlZChlbmFibGUpICE9IEF1ZGlvRWZmZWN0LlNVQ0NFU1MpIHsK
LSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHNldCB0aGUgTm9pc2VTdXBwcmVz
c29yIHN0YXRlIik7Ci0gICAgICAgIH0KLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIk5vaXNlU3Vw
cHJlc3Nvcjogd2FzICIgKyAoZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpICsgIiwg
ZW5hYmxlOiAiCi0gICAgICAgICAgICAgICAgKyBlbmFibGUgKyAiLCBpcyBub3c6ICIgKyAobnMu
Z2V0RW5hYmxlZCgpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBjcmVhdGUgdGhlIE5vaXNlU3VwcHJl
c3NvciBpbnN0YW5jZSIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJlbGVhc2VzIGFs
bCBuYXRpdmUgYXVkaW8gZWZmZWN0IHJlc291cmNlcy4gSXQgaXMgYSBnb29kIHByYWN0aWNlIHRv
Ci0gIC8vIHJlbGVhc2UgdGhlIGVmZmVjdCBlbmdpbmUgd2hlbiBub3QgaW4gdXNlIGFzIGNvbnRy
b2wgY2FuIGJlIHJldHVybmVkCi0gIC8vIHRvIG90aGVyIGFwcGxpY2F0aW9ucyBvciB0aGUgbmF0
aXZlIHJlc291cmNlcyByZWxlYXNlZC4KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAicmVsZWFzZSIpOwotICAgIGlmIChhZWMgIT0gbnVsbCkgewotICAgICAg
YWVjLnJlbGVhc2UoKTsKLSAgICAgIGFlYyA9IG51bGw7Ci0gICAgfQotICAgIGlmIChucyAhPSBu
dWxsKSB7Ci0gICAgICBucy5yZWxlYXNlKCk7Ci0gICAgICBucyA9IG51bGw7Ci0gICAgfQotICB9
Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGZvciBlZmZlY3QgdHlwZXMgaW4gfHR5cGV8IHRoYXQgYXJl
IG9mICJWb0lQIiB0eXBlczoKLSAgLy8gQWNvdXN0aWMgRWNobyBDYW5jZWxlciAoQUVDKSBvciBB
dXRvbWF0aWMgR2FpbiBDb250cm9sIChBR0MpIG9yCi0gIC8vIE5vaXNlIFN1cHByZXNzb3IgKE5T
KS4gTm90ZSB0aGF0LCBhbiBleHRyYSBjaGVjayBmb3Igc3VwcG9ydCBpcyBuZWVkZWQKLSAgLy8g
aW4gZWFjaCBjb21wYXJpc29uIHNpbmNlIHNvbWUgZGV2aWNlcyBpbmNsdWRlcyBlZmZlY3RzIGlu
IHRoZQotICAvLyBBdWRpb0VmZmVjdC5EZXNjcmlwdG9yIGFycmF5IHRoYXQgYXJlIGFjdHVhbGx5
IG5vdCBhdmFpbGFibGUgb24gdGhlIGRldmljZS4KLSAgLy8gQXMgYW4gZXhhbXBsZTogU2Ftc3Vu
ZyBHYWxheHkgUzYgaW5jbHVkZXMgYW4gQUdDIGluIHRoZSBkZXNjcmlwdG9yIGJ1dAotICAvLyBB
dXRvbWF0aWNHYWluQ29udHJvbC5pc0F2YWlsYWJsZSgpIHJldHVybnMgZmFsc2UuCi0gIEBUYXJn
ZXRBcGkoMTgpCi0gIHByaXZhdGUgYm9vbGVhbiBlZmZlY3RUeXBlSXNWb0lQKFVVSUQgdHlwZSkg
ewotICAgIGlmICghV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5NUjJPckhpZ2hl
cigpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIChBdWRpb0VmZmVjdC5FRkZF
Q1RfVFlQRV9BRUMuZXF1YWxzKHR5cGUpICYmIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0
ZWQoKSkKLSAgICAgICAgfHwgKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX05TLmVxdWFscyh0eXBl
KSAmJiBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpKTsKLSAgfQotCi0gIC8vIEhlbHBlciBt
ZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFp
bGVkLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25kaXRpb24p
IHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9y
KCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIC8vIFJl
dHVybnMgdGhlIGNhY2hlZCBjb3B5IG9mIHRoZSBhdWRpbyBlZmZlY3RzIGFycmF5LCBpZiBhdmFp
bGFibGUsIG9yCi0gIC8vIHF1ZXJpZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZm9yIHRoZSBsaXN0
IG9mIGVmZmVjdHMuCi0gIHByaXZhdGUgc3RhdGljIERlc2NyaXB0b3JbXSBnZXRBdmFpbGFibGVF
ZmZlY3RzKCkgewotICAgIGlmIChjYWNoZWRFZmZlY3RzICE9IG51bGwpIHsKLSAgICAgIHJldHVy
biBjYWNoZWRFZmZlY3RzOwotICAgIH0KLSAgICAvLyBUaGUgY2FjaGluZyBpcyBiZXN0IGVmZm9y
dCBvbmx5IC0gaWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gc2V2ZXJhbAotICAgIC8vIHRo
cmVhZHMgaW4gcGFyYWxsZWwsIHRoZXkgbWF5IGVuZCB1cCBkb2luZyB0aGUgdW5kZXJseWluZyBP
UyBjYWxsCi0gICAgLy8gbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm9ybWFsbHkgb25seSBjYWxsZWQg
b24gb25lIHRocmVhZCBzbyB0aGVyZSdzIG5vCi0gICAgLy8gcmVhbCBuZWVkIHRvIG9wdGltaXpl
IGZvciB0aGUgbXVsdGlwbGUgdGhyZWFkcyBjYXNlLgotICAgIGNhY2hlZEVmZmVjdHMgPSBBdWRp
b0VmZmVjdC5xdWVyeUVmZmVjdHMoKTsKLSAgICByZXR1cm4gY2FjaGVkRWZmZWN0czsKLSAgfQot
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlZmZlY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBlIGlz
IGF2YWlsYWJsZS4gRnVuY3Rpb25hbGx5Ci0gIC8vIGVxdWl2YWxlbnQgdG8gKE5vaXNlU3VwcHJl
c3NvcnxBdXRvbWF0aWNHYWluQ29udHJvbHwuLi4pLmlzQXZhaWxhYmxlKCksIGJ1dAotICAvLyBm
YXN0ZXIgYXMgaXQgYXZvaWRzIHRoZSBleHBlbnNpdmUgT1MgY2FsbCB0byBlbnVtZXJhdGUgZWZm
ZWN0cy4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0VmZmVjdFR5cGVBdmFpbGFibGUoVVVJ
RCBlZmZlY3RUeXBlKSB7Ci0gICAgRGVzY3JpcHRvcltdIGVmZmVjdHMgPSBnZXRBdmFpbGFibGVF
ZmZlY3RzKCk7Ci0gICAgaWYgKGVmZmVjdHMgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBmb3IgKERlc2NyaXB0b3IgZCA6IGVmZmVjdHMpIHsKLSAgICAgIGlmIChk
LnR5cGUuZXF1YWxzKGVmZmVjdFR5cGUpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb01hbmFnZXIuamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vlbmdp
bmUvV2ViUnRjQXVkaW9NYW5hZ2VyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb01hbmFnZXIu
amF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM0NyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAo
YykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
LSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0
dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQ
QVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91
bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0g
Ki8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgb3JnLndlYnJ0
Yy5Mb2dnaW5nOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9y
dCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFj
a2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1hdDsKLWltcG9ydCBh
bmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvUmVj
b3JkOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9UcmFjazsKLWltcG9ydCBhbmRyb2lkLm9z
LkJ1aWxkOwotCi1pbXBvcnQgamF2YS51dGlsLlRpbWVyOwotaW1wb3J0IGphdmEudXRpbC5UaW1l
clRhc2s7Ci0KLS8vIFdlYlJ0Y0F1ZGlvTWFuYWdlciBoYW5kbGVzIHRhc2tzIHRoYXQgdXNlcyBh
bmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlci4KLS8vIEF0IGNvbnN0cnVjdGlvbiwgc3RvcmVBdWRp
b1BhcmFtZXRlcnMoKSBpcyBjYWxsZWQgYW5kIGl0IHJldHJpZXZlcwotLy8gZnVuZGFtZW50YWwg
YXVkaW8gcGFyYW1ldGVycyBsaWtlIG5hdGl2ZSBzYW1wbGUgcmF0ZSBhbmQgbnVtYmVyIG9mIGNo
YW5uZWxzLgotLy8gVGhlIHJlc3VsdCBpcyB0aGVuIHByb3ZpZGVkIHRvIHRoZSBjYWxsZXIgYnkg
bmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRlcnMoKS4KLS8vIEl0IGlzIGFsc28gcG9zc2libGUgdG8g
Y2FsbCBpbml0KCkgdG8gc2V0IHVwIHRoZSBhdWRpbyBlbnZpcm9ubWVudCBmb3IgYmVzdAotLy8g
cG9zc2libGUgIlZvSVAgcGVyZm9ybWFuY2UiLiBBbGwgc2V0dGluZ3MgZG9uZSBpbiBpbml0KCkg
YXJlIHJldmVydGVkIGJ5Ci0vLyBkaXNwb3NlKCkuIFRoaXMgY2xhc3MgY2FuIGFsc28gYmUgdXNl
ZCB3aXRob3V0IGNhbGxpbmcgaW5pdCgpIGlmIHRoZSB1c2VyCi0vLyBwcmVmZXJzIHRvIHNldCB1
cCB0aGUgYXVkaW8gZW52aXJvbm1lbnQgc2VwYXJhdGVseS4gSG93ZXZlciwgaXQgaXMKLS8vIHJl
Y29tbWVuZGVkIHRvIGFsd2F5cyB1c2UgQXVkaW9NYW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNBVElP
Ti4KLXB1YmxpYyBjbGFzcyBXZWJSdGNBdWRpb01hbmFnZXIgewotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3Ry
aW5nIFRBRyA9ICJXZWJSdGNBdWRpb01hbmFnZXIiOwotCi0gIHByaXZhdGUgc3RhdGljIGJvb2xl
YW4gYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZSA9IGZhbHNlOwotICBwcml2YXRlIHN0
YXRpYyBib29sZWFuIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJc092ZXJyaWRkZW4g
PSBmYWxzZTsKLQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIG92ZXJyaWRlIHRoZSBkZWF1bHQg
bGlzdCBvZiBibGFja2xpc3RlZCBkZXZpY2VzCi0gIC8vIHNwZWNpZmllZCBpbiBXZWJSdGNBdWRp
b1V0aWxzLkJMQUNLTElTVEVEX09QRU5fU0xfRVNfTU9ERUxTLgotICAvLyBBbGxvd3MgYW4gYXBw
IHRvIHRha2UgY29udHJvbCBvdmVyIHdoaWNoIGRldmljZXMgdG8gZXhsdWRlIGZyb20gdXNpbmcK
LSAgLy8gdGhlIE9wZW5TTCBFUyBhdWRpbyBvdXRwdXQgcGF0aAotICBwdWJsaWMgc3RhdGljIHN5
bmNocm9uaXplZCB2b2lkIHNldEJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UoYm9vbGVh
biBlbmFibGUpIHsKLSAgICBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlSXNPdmVycmlk
ZGVuID0gdHJ1ZTsKLSAgICBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlID0gZW5hYmxl
OwotICB9Ci0KLSAgLy8gRGVmYXVsdCBhdWRpbyBkYXRhIGZvcm1hdCBpcyBQQ00gMTYgYml0IHBl
ciBzYW1wbGUuCi0gIC8vIEd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2Vz
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUU19QRVJfU0FNUExFID0gMTY7Ci0KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUiA9IDI1NjsK
LQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3RlcmVvIHN1cHBvcnQgZm9yIHBsYXlvdXQuCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSEFOTkVMUyA9IDE7Ci0KLSAgLy8gTGlzdCBvZiBw
b3NzaWJsZSBhdWRpbyBtb2Rlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQVVE
SU9fTU9ERVMgPSBuZXcgU3RyaW5nW10gewotICAgICAgIk1PREVfTk9STUFMIiwgIk1PREVfUklO
R1RPTkUiLCAiTU9ERV9JTl9DQUxMIiwgIk1PREVfSU5fQ09NTVVOSUNBVElPTiIsCi0gIH07Ci0K
LSAgLy8gUHJpdmF0ZSB1dGlsaXR5IGNsYXNzIHRoYXQgcGVyaW9kaWNhbGx5IGNoZWNrcyBhbmQg
bG9ncyB0aGUgdm9sdW1lIGxldmVsCi0gIC8vIG9mIHRoZSBhdWRpbyBzdHJlYW0gdGhhdCBpcyBj
dXJyZW50bHkgY29udHJvbGxlZCBieSB0aGUgdm9sdW1lIGNvbnRyb2wuCi0gIC8vIEEgdGltZXIg
dHJpZ2dlcnMgbG9ncyBvbmNlIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIHRoZSB0aW1lcidzIGFzc29j
aWF0ZWQKLSAgLy8gdGhyZWFkIGlzIG5hbWVkICJXZWJSdGNWb2x1bWVMZXZlbExvZ2dlclRocmVh
ZCIuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFZvbHVtZUxvZ2dlciB7Ci0gICAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFRIUkVBRF9OQU1FID0gIldlYlJ0Y1ZvbHVtZUxldmVsTG9nZ2Vy
VGhyZWFkIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVElNRVJfUEVSSU9EX0lOX1NF
Q09ORFMgPSAxMDsKLQotICAgIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdl
cjsKLSAgICBwcml2YXRlIFRpbWVyIHRpbWVyOwotCi0gICAgcHVibGljIFZvbHVtZUxvZ2dlcihB
dWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyKSB7Ci0gICAgICB0aGlzLmF1ZGlvTWFuYWdlciA9IGF1
ZGlvTWFuYWdlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKLSAgICAgIHRp
bWVyID0gbmV3IFRpbWVyKFRIUkVBRF9OQU1FKTsKLSAgICAgIHRpbWVyLnNjaGVkdWxlKG5ldyBM
b2dWb2x1bWVUYXNrKGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1NYXhWb2x1bWUoQXVkaW9NYW5hZ2Vy
LlNUUkVBTV9SSU5HKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb01hbmFnZXIuZ2V0
U3RyZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCkpLAotICAgICAg
ICAgIDAsIFRJTUVSX1BFUklPRF9JTl9TRUNPTkRTICogMTAwMCk7Ci0gICAgfQotCi0gICAgcHJp
dmF0ZSBjbGFzcyBMb2dWb2x1bWVUYXNrIGV4dGVuZHMgVGltZXJUYXNrIHsKLSAgICAgIHByaXZh
dGUgZmluYWwgaW50IG1heFJpbmdWb2x1bWU7Ci0gICAgICBwcml2YXRlIGZpbmFsIGludCBtYXhW
b2ljZUNhbGxWb2x1bWU7Ci0KLSAgICAgIExvZ1ZvbHVtZVRhc2soaW50IG1heFJpbmdWb2x1bWUs
IGludCBtYXhWb2ljZUNhbGxWb2x1bWUpIHsKLSAgICAgICAgdGhpcy5tYXhSaW5nVm9sdW1lID0g
bWF4UmluZ1ZvbHVtZTsKLSAgICAgICAgdGhpcy5tYXhWb2ljZUNhbGxWb2x1bWUgPSBtYXhWb2lj
ZUNhbGxWb2x1bWU7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
ICAgZmluYWwgaW50IG1vZGUgPSBhdWRpb01hbmFnZXIuZ2V0TW9kZSgpOwotICAgICAgICBpZiAo
bW9kZSA9PSBBdWRpb01hbmFnZXIuTU9ERV9SSU5HVE9ORSkgewotICAgICAgICAgIExvZ2dpbmcu
ZChUQUcsICJTVFJFQU1fUklORyBzdHJlYW0gdm9sdW1lOiAiCi0gICAgICAgICAgICAgICAgICAr
IGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9SSU5HKSAr
ICIgKG1heD0iCi0gICAgICAgICAgICAgICAgICArIG1heFJpbmdWb2x1bWUgKyAiKSIpOwotICAg
ICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gQXVkaW9NYW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNBVElP
TikgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJWT0lDRV9DQUxMIHN0cmVhbSB2b2x1bWU6
ICIKLSAgICAgICAgICAgICAgICAgICsgYXVkaW9NYW5hZ2VyLmdldFN0cmVhbVZvbHVtZShBdWRp
b01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwpICsgIiAobWF4PSIKLSAgICAgICAgICAgICAgICAg
ICsgbWF4Vm9pY2VDYWxsVm9sdW1lICsgIikiKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0K
LQotICAgIHByaXZhdGUgdm9pZCBzdG9wKCkgewotICAgICAgaWYgKHRpbWVyICE9IG51bGwpIHsK
LSAgICAgICAgdGltZXIuY2FuY2VsKCk7Ci0gICAgICAgIHRpbWVyID0gbnVsbDsKLSAgICAgIH0K
LSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlQXVkaW9NYW5hZ2VyOwot
ICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBBdWRpb01h
bmFnZXIgYXVkaW9NYW5hZ2VyOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZCA9IGZh
bHNlOwotICBwcml2YXRlIGludCBuYXRpdmVTYW1wbGVSYXRlOwotICBwcml2YXRlIGludCBuYXRp
dmVDaGFubmVsczsKLQotICBwcml2YXRlIGJvb2xlYW4gaGFyZHdhcmVBRUM7Ci0gIHByaXZhdGUg
Ym9vbGVhbiBoYXJkd2FyZUFHQzsKLSAgcHJpdmF0ZSBib29sZWFuIGhhcmR3YXJlTlM7Ci0gIHBy
aXZhdGUgYm9vbGVhbiBsb3dMYXRlbmN5T3V0cHV0OwotICBwcml2YXRlIGJvb2xlYW4gbG93TGF0
ZW5jeUlucHV0OwotICBwcml2YXRlIGJvb2xlYW4gcHJvQXVkaW87Ci0gIHByaXZhdGUgaW50IHNh
bXBsZVJhdGU7Ci0gIHByaXZhdGUgaW50IGNoYW5uZWxzOwotICBwcml2YXRlIGludCBvdXRwdXRC
dWZmZXJTaXplOwotICBwcml2YXRlIGludCBpbnB1dEJ1ZmZlclNpemU7Ci0KLSAgcHJpdmF0ZSBm
aW5hbCBWb2x1bWVMb2dnZXIgdm9sdW1lTG9nZ2VyOwotCi0gIFdlYlJ0Y0F1ZGlvTWFuYWdlcihD
b250ZXh0IGNvbnRleHQsIGxvbmcgbmF0aXZlQXVkaW9NYW5hZ2VyKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIHRo
aXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5uYXRpdmVBdWRpb01hbmFnZXIgPSBuYXRp
dmVBdWRpb01hbmFnZXI7Ci0gICAgYXVkaW9NYW5hZ2VyID0gKEF1ZGlvTWFuYWdlcikgY29udGV4
dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVESU9fU0VSVklDRSk7Ci0gICAgaWYgKERFQlVH
KSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0RldmljZUluZm8oVEFHKTsKLSAgICB9Ci0g
ICAgdm9sdW1lTG9nZ2VyID0gbmV3IFZvbHVtZUxvZ2dlcihhdWRpb01hbmFnZXIpOwotICAgIHN0
b3JlQXVkaW9QYXJhbWV0ZXJzKCk7Ci0gICAgbmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRlcnMoc2Ft
cGxlUmF0ZSwgY2hhbm5lbHMsIGhhcmR3YXJlQUVDLCBoYXJkd2FyZUFHQywgaGFyZHdhcmVOUywK
LSAgICAgICAgbG93TGF0ZW5jeU91dHB1dCwgbG93TGF0ZW5jeUlucHV0LCBwcm9BdWRpbywgb3V0
cHV0QnVmZmVyU2l6ZSwgaW5wdXRCdWZmZXJTaXplLAotICAgICAgICBuYXRpdmVBdWRpb01hbmFn
ZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGluaXQoKSB7Ci0gICAgTG9nZ2luZy5kKFRB
RywgImluaXQiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIGlmIChp
bml0aWFsaXplZCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIExvZ2dpbmcuZChU
QUcsICJhdWRpbyBtb2RlIGlzOiAiICsgQVVESU9fTU9ERVNbYXVkaW9NYW5hZ2VyLmdldE1vZGUo
KV0pOwotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB2b2x1bWVMb2dnZXIuc3RhcnQoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkaXNwb3NlKCkgewotICAg
IExvZ2dpbmcuZChUQUcsICJkaXNwb3NlIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5m
bygpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQotICAg
IHZvbHVtZUxvZ2dlci5zdG9wKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNDb21tdW5p
Y2F0aW9uTW9kZUVuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIChhdWRpb01hbmFnZXIuZ2V0TW9kZSgp
ID09IEF1ZGlvTWFuYWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT04pOwotICB9Ci0KLSAgcHJpdmF0
ZSBib29sZWFuIGlzRGV2aWNlQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCkgewotICAgIGJv
b2xlYW4gYmxhY2tsaXN0ZWQgPSBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlSXNPdmVy
cmlkZGVuCi0gICAgICAgID8gYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZQotICAgICAg
ICA6IFdlYlJ0Y0F1ZGlvVXRpbHMuZGV2aWNlSXNCbGFja2xpc3RlZEZvck9wZW5TTEVTVXNhZ2Uo
KTsKLSAgICBpZiAoYmxhY2tsaXN0ZWQpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsIEJ1aWxkLk1P
REVMICsgIiBpcyBibGFja2xpc3RlZCBmb3IgT3BlblNMIEVTIHVzYWdlISIpOwotICAgIH0KLSAg
ICByZXR1cm4gYmxhY2tsaXN0ZWQ7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RvcmVBdWRpb1Bh
cmFtZXRlcnMoKSB7Ci0gICAgLy8gT25seSBtb25vIGlzIHN1cHBvcnRlZCBjdXJyZW50bHkgKGlu
IGJvdGggZGlyZWN0aW9ucykuCi0gICAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN1cHBvcnQgZm9y
IHN0ZXJlbyBwbGF5b3V0LgotICAgIGNoYW5uZWxzID0gQ0hBTk5FTFM7Ci0gICAgc2FtcGxlUmF0
ZSA9IGdldE5hdGl2ZU91dHB1dFNhbXBsZVJhdGUoKTsKLSAgICBoYXJkd2FyZUFFQyA9IGlzQWNv
dXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKTsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiB1c2Ug
b2YgaGFyZHdhcmUgQUdDIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEN1cnJlbnRseQotICAgIC8v
IGhhcmRjb2RlZCB0byBmYWxzZS4gVG8gYmUgcmVtb3ZlZC4KLSAgICBoYXJkd2FyZUFHQyA9IGZh
bHNlOwotICAgIGhhcmR3YXJlTlMgPSBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpOwotICAg
IGxvd0xhdGVuY3lPdXRwdXQgPSBpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0ZWQoKTsKLSAgICBs
b3dMYXRlbmN5SW5wdXQgPSBpc0xvd0xhdGVuY3lJbnB1dFN1cHBvcnRlZCgpOwotICAgIHByb0F1
ZGlvID0gaXNQcm9BdWRpb1N1cHBvcnRlZCgpOwotICAgIG91dHB1dEJ1ZmZlclNpemUgPSBsb3dM
YXRlbmN5T3V0cHV0ID8gZ2V0TG93TGF0ZW5jeU91dHB1dEZyYW1lc1BlckJ1ZmZlcigpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRNaW5PdXRwdXRGcmFtZVNp
emUoc2FtcGxlUmF0ZSwgY2hhbm5lbHMpOwotICAgIGlucHV0QnVmZmVyU2l6ZSA9IGxvd0xhdGVu
Y3lJbnB1dCA/IGdldExvd0xhdGVuY3lJbnB1dEZyYW1lc1BlckJ1ZmZlcigpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0TWluSW5wdXRGcmFtZVNpemUoc2FtcGxl
UmF0ZSwgY2hhbm5lbHMpOwotICB9Ci0KLSAgLy8gR2V0cyB0aGUgY3VycmVudCBlYXJwaWVjZSBz
dGF0ZS4KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0VhcnBpZWNlKCkgewotICAgIHJldHVybiBjb250
ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5G
RUFUVVJFX1RFTEVQSE9OWSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgbG93LWxhdGVu
Y3kgYXVkaW8gb3V0cHV0IGlzIHN1cHBvcnRlZC4KLSAgcHJpdmF0ZSBib29sZWFuIGlzTG93TGF0
ZW5jeU91dHB1dFN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gaXNPcGVuU0xFU1N1cHBvcnRlZCgp
Ci0gICAgICAgICYmIGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJl
KFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfQVVESU9fTE9XX0xBVEVOQ1kpOwotICB9Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGlmIGxvdy1sYXRlbmN5IGF1ZGlvIGlucHV0IGlzIHN1cHBvcnRlZC4KLSAg
Ly8gVE9ETyhoZW5yaWthKTogcmVtb3ZlIHRoZSBoYXJkY29kZWQgZmFsc2UgcmV0dXJuIHZhbHVl
IHdoZW4gT3BlblNMIEVTCi0gIC8vIGlucHV0IHBlcmZvcm1hbmNlIGhhcyBiZWVuIGV2YWx1YXRl
ZCBhbmQgdGVzdGVkIG1vcmUuCi0gIHB1YmxpYyBib29sZWFuIGlzTG93TGF0ZW5jeUlucHV0U3Vw
cG9ydGVkKCkgewotICAgIC8vIFRPRE8oaGVucmlrYSk6IGludmVzdGlnYXRlIGlmIHNvbWUgc29y
dCBvZiBkZXZpY2UgbGlzdCBpcyBuZWVkZWQgaGVyZQotICAgIC8vIGFzIHdlbGwuIFRoZSBOREsg
ZG9jIHN0YXRlcyB0aGF0OiAiQXMgb2YgQVBJIGxldmVsIDIxLCBsb3dlciBsYXRlbmN5Ci0gICAg
Ly8gYXVkaW8gaW5wdXQgaXMgc3VwcG9ydGVkIG9uIHNlbGVjdCBkZXZpY2VzLiBUbyB0YWtlIGFk
dmFudGFnZSBvZiB0aGlzCi0gICAgLy8gZmVhdHVyZSwgZmlyc3QgY29uZmlybSB0aGF0IGxvd2Vy
IGxhdGVuY3kgb3V0cHV0IGlzIGF2YWlsYWJsZSIuCi0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvVXRp
bHMucnVubmluZ09uTG9sbGlwb3BPckhpZ2hlcigpICYmIGlzTG93TGF0ZW5jeU91dHB1dFN1cHBv
cnRlZCgpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaGFzIHByb2Zl
c3Npb25hbCBhdWRpbyBsZXZlbCBvZiBmdW5jdGlvbmFsaXR5Ci0gIC8vIGFuZCB0aGVyZWZvcmUg
c3VwcG9ydHMgdGhlIGxvd2VzdCBwb3NzaWJsZSByb3VuZC10cmlwIGxhdGVuY3kuCi0gIHByaXZh
dGUgYm9vbGVhbiBpc1Byb0F1ZGlvU3VwcG9ydGVkKCkgewotICAgIHJldHVybiBXZWJSdGNBdWRp
b1V0aWxzLnJ1bm5pbmdPbk1hcnNobWFsbG93T3JIaWdoZXIoKQotICAgICAgICAmJiBjb250ZXh0
LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFU
VVJFX0FVRElPX1BSTyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBuYXRpdmUgb3V0cHV0IHNh
bXBsZSByYXRlIGZvciB0aGlzIGRldmljZSdzIG91dHB1dCBzdHJlYW0uCi0gIHByaXZhdGUgaW50
IGdldE5hdGl2ZU91dHB1dFNhbXBsZVJhdGUoKSB7Ci0gICAgLy8gT3ZlcnJpZGUgdGhpcyBpZiB3
ZSdyZSBydW5uaW5nIG9uIGFuIG9sZCBlbXVsYXRvciBpbWFnZSB3aGljaCBvbmx5Ci0gICAgLy8g
c3VwcG9ydHMgOCBrSHogYW5kIGRvZXNuJ3Qgc3VwcG9ydCBQUk9QRVJUWV9PVVRQVVRfU0FNUExF
X1JBVEUuCi0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uRW11bGF0b3IoKSkgewot
ICAgICAgTG9nZ2luZy5kKFRBRywgIlJ1bm5pbmcgZW11bGF0b3IsIG92ZXJyaWRpbmcgc2FtcGxl
IHJhdGUgdG8gOCBrSHouIik7Ci0gICAgICByZXR1cm4gODAwMDsKLSAgICB9Ci0gICAgLy8gRGVm
YXVsdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0RGVmYXVsdFNhbXBs
ZVJhdGVIeigpLgotICAgIC8vIElmIHNvLCB1c2UgdGhhdCB2YWx1ZSBhbmQgcmV0dXJuIGhlcmUu
Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMuaXNEZWZhdWx0U2FtcGxlUmF0ZU92ZXJyaWRkZW4o
KSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkRlZmF1bHQgc2FtcGxlIHJhdGUgaXMgb3ZlcnJp
ZGVuIHRvICIKLSAgICAgICAgICAgICAgKyBXZWJSdGNBdWRpb1V0aWxzLmdldERlZmF1bHRTYW1w
bGVSYXRlSHooKSArICIgSHoiKTsKLSAgICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLmdldERl
ZmF1bHRTYW1wbGVSYXRlSHooKTsKLSAgICB9Ci0gICAgLy8gTm8gb3ZlcnJpZGVzIGF2YWlsYWJs
ZS4gRGVsaXZlciBiZXN0IHBvc3NpYmxlIGVzdGltYXRlIGJhc2VkIG9uIGRlZmF1bHQKLSAgICAv
LyBBbmRyb2lkIEF1ZGlvTWFuYWdlciBBUElzLgotICAgIGZpbmFsIGludCBzYW1wbGVSYXRlSHo7
Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuTVIxT3JIaWdoZXIo
KSkgewotICAgICAgc2FtcGxlUmF0ZUh6ID0gZ2V0U2FtcGxlUmF0ZU9uSmVsbHlCZWFuTVIxME9y
SGlnaGVyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNhbXBsZVJhdGVIeiA9IFdlYlJ0Y0F1ZGlv
VXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpOwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFH
LCAiU2FtcGxlIHJhdGUgaXMgc2V0IHRvICIgKyBzYW1wbGVSYXRlSHogKyAiIEh6Iik7Ci0gICAg
cmV0dXJuIHNhbXBsZVJhdGVIejsKLSAgfQotCi0gIEBUYXJnZXRBcGkoMTcpCi0gIHByaXZhdGUg
aW50IGdldFNhbXBsZVJhdGVPbkplbGx5QmVhbk1SMTBPckhpZ2hlcigpIHsKLSAgICBTdHJpbmcg
c2FtcGxlUmF0ZVN0cmluZyA9IGF1ZGlvTWFuYWdlci5nZXRQcm9wZXJ0eShBdWRpb01hbmFnZXIu
UFJPUEVSVFlfT1VUUFVUX1NBTVBMRV9SQVRFKTsKLSAgICByZXR1cm4gKHNhbXBsZVJhdGVTdHJp
bmcgPT0gbnVsbCkgPyBXZWJSdGNBdWRpb1V0aWxzLmdldERlZmF1bHRTYW1wbGVSYXRlSHooKQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEludGVnZXIucGFyc2VJbnQo
c2FtcGxlUmF0ZVN0cmluZyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBuYXRpdmUgb3V0cHV0
IGJ1ZmZlciBzaXplIGZvciBsb3ctbGF0ZW5jeSBvdXRwdXQgc3RyZWFtcy4KLSAgQFRhcmdldEFw
aSgxNykKLSAgcHJpdmF0ZSBpbnQgZ2V0TG93TGF0ZW5jeU91dHB1dEZyYW1lc1BlckJ1ZmZlcigp
IHsKLSAgICBhc3NlcnRUcnVlKGlzTG93TGF0ZW5jeU91dHB1dFN1cHBvcnRlZCgpKTsKLSAgICBp
ZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuTVIxT3JIaWdoZXIoKSkgewot
ICAgICAgcmV0dXJuIERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUjsKLSAgICB9Ci0gICAgU3RyaW5n
IGZyYW1lc1BlckJ1ZmZlciA9Ci0gICAgICAgIGF1ZGlvTWFuYWdlci5nZXRQcm9wZXJ0eShBdWRp
b01hbmFnZXIuUFJPUEVSVFlfT1VUUFVUX0ZSQU1FU19QRVJfQlVGRkVSKTsKLSAgICByZXR1cm4g
ZnJhbWVzUGVyQnVmZmVyID09IG51bGwgPyBERUZBVUxUX0ZSQU1FX1BFUl9CVUZGRVIgOiBJbnRl
Z2VyLnBhcnNlSW50KGZyYW1lc1BlckJ1ZmZlcik7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIGRldmljZSBzdXBwb3J0cyBhbiBhdWRpbyBlZmZlY3QgKEFFQyBvciBOUykuCi0gIC8v
IEZvdXIgY29uZGl0aW9ucyBtdXN0IGJlIGZ1bGZpbGxlZCBpZiBmdW5jdGlvbnMgYXJlIHRvIHJl
dHVybiB0cnVlOgotICAvLyAxKSB0aGUgcGxhdGZvcm0gbXVzdCBzdXBwb3J0IHRoZSBidWlsdC1p
biAoSFcpIGVmZmVjdCwKLSAgLy8gMikgZXhwbGljaXQgdXNlIChvdmVycmlkZSkgb2YgYSBXZWJS
VEMgYmFzZWQgdmVyc2lvbiBtdXN0IG5vdCBiZSBzZXQsCi0gIC8vIDMpIHRoZSBkZXZpY2UgbXVz
dCBub3QgYmUgYmxhY2tsaXN0ZWQgZm9yIHVzZSBvZiB0aGUgZWZmZWN0LCBhbmQKLSAgLy8gNCkg
dGhlIFVVSUQgb2YgdGhlIGVmZmVjdCBtdXN0IGJlIGFwcHJvdmVkIChzb21lIFVVSURzIGNhbiBi
ZSBleGNsdWRlZCkuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5j
ZWxlclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNhblVzZUFj
b3VzdGljRWNob0NhbmNlbGVyKCk7Ci0gIH0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc05v
aXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3Rz
LmNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWluaW11
bSBvdXRwdXQgYnVmZmVyIHNpemUgZm9yIEphdmEgYmFzZWQgYXVkaW8gKEF1ZGlvVHJhY2spLgot
ICAvLyBUaGlzIHNpemUgY2FuIGFsc28gYmUgdXNlZCBmb3IgT3BlblNMIEVTIGltcGxlbWVudGF0
aW9ucyBvbiBkZXZpY2VzIHRoYXQKLSAgLy8gbGFja3Mgc3VwcG9ydCBvZiBsb3ctbGF0ZW5jeSBv
dXRwdXQuCi0gIHByaXZhdGUgc3RhdGljIGludCBnZXRNaW5PdXRwdXRGcmFtZVNpemUoaW50IHNh
bXBsZVJhdGVJbkh6LCBpbnQgbnVtQ2hhbm5lbHMpIHsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJG
cmFtZSA9IG51bUNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGZpbmFsIGlu
dCBjaGFubmVsQ29uZmlnOwotICAgIGlmIChudW1DaGFubmVscyA9PSAxKSB7Ci0gICAgICBjaGFu
bmVsQ29uZmlnID0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTzsKLSAgICB9IGVsc2UgaWYg
KG51bUNoYW5uZWxzID09IDIpIHsKLSAgICAgIGNoYW5uZWxDb25maWcgPSBBdWRpb0Zvcm1hdC5D
SEFOTkVMX09VVF9TVEVSRU87Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9
Ci0gICAgcmV0dXJuIEF1ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgICAgICAg
IHNhbXBsZVJhdGVJbkh6LCBjaGFubmVsQ29uZmlnLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01f
MTZCSVQpCi0gICAgICAgIC8gYnl0ZXNQZXJGcmFtZTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhl
IG5hdGl2ZSBpbnB1dCBidWZmZXIgc2l6ZSBmb3IgaW5wdXQgc3RyZWFtcy4KLSAgcHJpdmF0ZSBp
bnQgZ2V0TG93TGF0ZW5jeUlucHV0RnJhbWVzUGVyQnVmZmVyKCkgewotICAgIGFzc2VydFRydWUo
aXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0ZWQoKSk7Ci0gICAgcmV0dXJuIGdldExvd0xhdGVuY3lP
dXRwdXRGcmFtZXNQZXJCdWZmZXIoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG1pbmltdW0g
aW5wdXQgYnVmZmVyIHNpemUgZm9yIEphdmEgYmFzZWQgYXVkaW8gKEF1ZGlvUmVjb3JkKS4KLSAg
Ly8gVGhpcyBzaXplIGNhbiBjYWxzbyBiZSB1c2VkIGZvciBPcGVuU0wgRVMgaW1wbGVtZW50YXRp
b25zIG9uIGRldmljZXMgdGhhdAotICAvLyBsYWNrcyBzdXBwb3J0IG9mIGxvdy1sYXRlbmN5IGlu
cHV0LgotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TWluSW5wdXRGcmFtZVNpemUoaW50IHNhbXBs
ZVJhdGVJbkh6LCBpbnQgbnVtQ2hhbm5lbHMpIHsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJGcmFt
ZSA9IG51bUNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGFzc2VydFRydWUo
bnVtQ2hhbm5lbHMgPT0gQ0hBTk5FTFMpOwotICAgIHJldHVybiBBdWRpb1JlY29yZC5nZXRNaW5C
dWZmZXJTaXplKAotICAgICAgICAgICAgICAgc2FtcGxlUmF0ZUluSHosIEF1ZGlvRm9ybWF0LkNI
QU5ORUxfSU5fTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUKQotICAgICAgICAv
IGJ5dGVzUGVyRnJhbWU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgT3BlblNMIEVTIGF1
ZGlvIGlzIHN1cHBvcnRlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc09wZW5TTEVTU3Vw
cG9ydGVkKCkgewotICAgIC8vIENoZWNrIGZvciBBUEkgbGV2ZWwgOSBvciBoaWdoZXIsIHRvIGNv
bmZpcm0gdXNlIG9mIE9wZW5TTCBFUy4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5ydW5u
aW5nT25HaW5nZXJCcmVhZE9ySGlnaGVyKCk7Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdo
aWNoIHRocm93cyBhbiBleGNlcHRpb24gIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0g
IHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAg
IGlmICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVj
dGVkIGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBuYXRp
dmUgdm9pZCBuYXRpdmVDYWNoZUF1ZGlvUGFyYW1ldGVycyhpbnQgc2FtcGxlUmF0ZSwgaW50IGNo
YW5uZWxzLCBib29sZWFuIGhhcmR3YXJlQUVDLAotICAgICAgYm9vbGVhbiBoYXJkd2FyZUFHQywg
Ym9vbGVhbiBoYXJkd2FyZU5TLCBib29sZWFuIGxvd0xhdGVuY3lPdXRwdXQsIGJvb2xlYW4gbG93
TGF0ZW5jeUlucHV0LAotICAgICAgYm9vbGVhbiBwcm9BdWRpbywgaW50IG91dHB1dEJ1ZmZlclNp
emUsIGludCBpbnB1dEJ1ZmZlclNpemUsIGxvbmcgbmF0aXZlQXVkaW9NYW5hZ2VyKTsKLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNB
dWRpb1JlY29yZC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1JlY29yZC5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2Vi
UnRjQXVkaW9SZWNvcmQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI4NiArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1p
bXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotaW1wb3J0IG9yZy53ZWJydGMuVGhyZWFkVXRpbHM7
Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlh
LkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQ7Ci1pbXBvcnQg
YW5kcm9pZC5tZWRpYS5NZWRpYVJlY29yZGVyLkF1ZGlvU291cmNlOwotaW1wb3J0IGFuZHJvaWQu
b3MuUHJvY2VzczsKLQotaW1wb3J0IGphdmEubGFuZy5TeXN0ZW07Ci1pbXBvcnQgamF2YS5uaW8u
Qnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQotcHVi
bGljIGNsYXNzIFdlYlJ0Y0F1ZGlvUmVjb3JkIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9v
bGVhbiBERUJVRyA9IGZhbHNlOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiV2ViUnRjQXVkaW9SZWNvcmQiOwotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0YSBmb3JtYXQg
aXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRl
ZCBieSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFNfUEVSX1NB
TVBMRSA9IDE2OwotCi0gIC8vIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggcmVjb3JkZWQgYnVmZmVy
IHByb3ZpZGVkIHRvIHRoZSBjbGllbnQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQUxM
QkFDS19CVUZGRVJfU0laRV9NUyA9IDEwOwotCi0gIC8vIEF2ZXJhZ2UgbnVtYmVyIG9mIGNhbGxi
YWNrcyBwZXIgc2Vjb25kLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSU19QRVJf
U0VDT05EID0gMTAwMCAvIENBTExCQUNLX0JVRkZFUl9TSVpFX01TOwotCi0gIC8vIFdlIGFzayBm
b3IgYSBuYXRpdmUgYnVmZmVyIHNpemUgb2YgQlVGRkVSX1NJWkVfRkFDVE9SICogKG1pbmltdW0g
cmVxdWlyZWQKLSAgLy8gYnVmZmVyIHNpemUpLiBUaGUgZXh0cmEgc3BhY2UgaXMgYWxsb2NhdGVk
IHRvIGd1YXJkIGFnYWluc3QgZ2xpdGNoZXMgdW5kZXIKLSAgLy8gaGlnaCBsb2FkLgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSX1NJWkVfRkFDVE9SID0gMjsKLQotICAvLyBUaGUg
QXVkaW9SZWNvcmRKYXZhVGhyZWFkIGlzIGFsbG93ZWQgdG8gd2FpdCBmb3Igc3VjY2Vzc2Z1bCBj
YWxsIHRvIGpvaW4oKQotICAvLyBidXQgdGhlIHdhaXQgdGltZXMgb3V0IGFmdGhlciB0aGlzIGFt
b3VudCBvZiB0aW1lLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEFVRElPX1JFQ09SRF9U
SFJFQURfSk9JTl9USU1FT1VUX01TID0gMjAwMDsKLQotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0
aXZlQXVkaW9SZWNvcmQ7Ci0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotCi0gIHBy
aXZhdGUgV2ViUnRjQXVkaW9FZmZlY3RzIGVmZmVjdHMgPSBudWxsOwotCi0gIHByaXZhdGUgQnl0
ZUJ1ZmZlciBieXRlQnVmZmVyOwotCi0gIHByaXZhdGUgQXVkaW9SZWNvcmQgYXVkaW9SZWNvcmQg
PSBudWxsOwotICBwcml2YXRlIEF1ZGlvUmVjb3JkVGhyZWFkIGF1ZGlvVGhyZWFkID0gbnVsbDsK
LQotICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIG1pY3JvcGhvbmVNdXRlID0gZmFs
c2U7Ci0gIHByaXZhdGUgYnl0ZVtdIGVtcHR5Qnl0ZXM7Ci0KLSAgLyoqCi0gICAqIEF1ZGlvIHRo
cmVhZCB3aGljaCBrZWVwcyBjYWxsaW5nIEJ5dGVCdWZmZXIucmVhZCgpIHdhaXRpbmcgZm9yIGF1
ZGlvCi0gICAqIHRvIGJlIHJlY29yZGVkLiBGZWVkcyByZWNvcmRlZCBkYXRhIHRvIHRoZSBuYXRp
dmUgY291bnRlcnBhcnQgYXMgYQotICAgKiBwZXJpb2RpYyBzZXF1ZW5jZSBvZiBjYWxsYmFja3Mg
dXNpbmcgRGF0YUlzUmVjb3JkZWQoKS4KLSAgICogVGhpcyB0aHJlYWQgdXNlcyBhIFByb2Nlc3Mu
VEhSRUFEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyBwcmlvcml0eS4KLSAgICovCi0gIHByaXZhdGUg
Y2xhc3MgQXVkaW9SZWNvcmRUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotICAgIHByaXZhdGUgdm9s
YXRpbGUgYm9vbGVhbiBrZWVwQWxpdmUgPSB0cnVlOwotCi0gICAgcHVibGljIEF1ZGlvUmVjb3Jk
VGhyZWFkKFN0cmluZyBuYW1lKSB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBA
T3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBQcm9jZXNzLnNldFRocmVh
ZFByaW9yaXR5KFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyk7Ci0gICAgICBM
b2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmRUaHJlYWQiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRU
aHJlYWRJbmZvKCkpOwotICAgICAgYXNzZXJ0VHJ1ZShhdWRpb1JlY29yZC5nZXRSZWNvcmRpbmdT
dGF0ZSgpID09IEF1ZGlvUmVjb3JkLlJFQ09SRFNUQVRFX1JFQ09SRElORyk7Ci0KLSAgICAgIGxv
bmcgbGFzdFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHdoaWxlIChrZWVwQWxpdmUp
IHsKLSAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGF1ZGlvUmVjb3JkLnJlYWQoYnl0ZUJ1ZmZlciwg
Ynl0ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSBieXRlQnVm
ZmVyLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgICBpZiAobWljcm9waG9uZU11dGUpIHsKLSAgICAg
ICAgICAgIGJ5dGVCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICAgIGJ5dGVCdWZmZXIucHV0KGVt
cHR5Qnl0ZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBuYXRpdmVEYXRhSXNSZWNvcmRlZChi
eXRlc1JlYWQsIG5hdGl2ZUF1ZGlvUmVjb3JkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQucmVhZCBmYWlsZWQ6ICIgKyBieXRlc1JlYWQp
OwotICAgICAgICAgIGlmIChieXRlc1JlYWQgPT0gQXVkaW9SZWNvcmQuRVJST1JfSU5WQUxJRF9P
UEVSQVRJT04pIHsKLSAgICAgICAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICBsb25nIG5vd1RpbWUg
PSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICBsb25nIGR1cmF0aW9uSW5NcyA9IFRpbWVV
bml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKChub3dUaW1lIC0gbGFzdFRpbWUpKTsKLSAgICAgICAg
ICBsYXN0VGltZSA9IG5vd1RpbWU7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgImJ5dGVzUmVh
ZFsiICsgZHVyYXRpb25Jbk1zICsgIl0gIiArIGJ5dGVzUmVhZCk7Ci0gICAgICAgIH0KLSAgICAg
IH0KLQotICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKGF1ZGlvUmVjb3JkICE9IG51bGwpIHsKLSAg
ICAgICAgICBhdWRpb1JlY29yZC5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2ggKEls
bGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1Jl
Y29yZC5zdG9wIGZhaWxlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBTdG9wcyB0aGUgaW5uZXIgdGhyZWFkIGxvb3AgYW5kIGFsc28gY2FsbHMgQXVkaW9S
ZWNvcmQuc3RvcCgpLgotICAgIC8vIERvZXMgbm90IGJsb2NrIHRoZSBjYWxsaW5nIHRocmVhZC4K
LSAgICBwdWJsaWMgdm9pZCBzdG9wVGhyZWFkKCkgewotICAgICAgTG9nZ2luZy5kKFRBRywgInN0
b3BUaHJlYWQiKTsKLSAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0gIFdl
YlJ0Y0F1ZGlvUmVjb3JkKENvbnRleHQgY29udGV4dCwgbG9uZyBuYXRpdmVBdWRpb1JlY29yZCkg
ewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFk
SW5mbygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMubmF0aXZlQXVk
aW9SZWNvcmQgPSBuYXRpdmVBdWRpb1JlY29yZDsKLSAgICBpZiAoREVCVUcpIHsKLSAgICAgIFdl
YlJ0Y0F1ZGlvVXRpbHMubG9nRGV2aWNlSW5mbyhUQUcpOwotICAgIH0KLSAgICBlZmZlY3RzID0g
V2ViUnRjQXVkaW9FZmZlY3RzLmNyZWF0ZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGVu
YWJsZUJ1aWx0SW5BRUMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZW5h
YmxlQnVpbHRJbkFFQygiICsgZW5hYmxlICsgJyknKTsKLSAgICBpZiAoZWZmZWN0cyA9PSBudWxs
KSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQnVpbHQtaW4gQUVDIGlzIG5vdCBzdXBwb3J0ZWQg
b24gdGhpcyBwbGF0Zm9ybSIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gZWZmZWN0cy5zZXRBRUMoZW5hYmxlKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBlbmFi
bGVCdWlsdEluTlMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZW5hYmxl
QnVpbHRJbk5TKCIgKyBlbmFibGUgKyAnKScpOwotICAgIGlmIChlZmZlY3RzID09IG51bGwpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJCdWlsdC1pbiBOUyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRo
aXMgcGxhdGZvcm0iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGVm
ZmVjdHMuc2V0TlMoZW5hYmxlKTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGluaXRSZWNvcmRpbmco
aW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIExvZ2dpbmcuZChUQUcsICJpbml0
UmVjb3JkaW5nKHNhbXBsZVJhdGU9IiArIHNhbXBsZVJhdGUgKyAiLCBjaGFubmVscz0iICsgY2hh
bm5lbHMgKyAiKSIpOwotICAgIGlmICghV2ViUnRjQXVkaW9VdGlscy5oYXNQZXJtaXNzaW9uKGNv
bnRleHQsIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5SRUNPUkRfQVVESU8pKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAiUkVDT1JEX0FVRElPIHBlcm1pc3Npb24gaXMgbWlzc2luZyIpOwot
ICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoYXVkaW9SZWNvcmQgIT0gbnVsbCkgewot
ICAgICAgTG9nZ2luZy5lKFRBRywgIkluaXRSZWNvcmRpbmcoKSBjYWxsZWQgdHdpY2Ugd2l0aG91
dCBTdG9wUmVjb3JkaW5nKCkiKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZmluYWwg
aW50IGJ5dGVzUGVyRnJhbWUgPSBjaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsKLSAg
ICBmaW5hbCBpbnQgZnJhbWVzUGVyQnVmZmVyID0gc2FtcGxlUmF0ZSAvIEJVRkZFUlNfUEVSX1NF
Q09ORDsKLSAgICBieXRlQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChieXRlc1Bl
ckZyYW1lICogZnJhbWVzUGVyQnVmZmVyKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiYnl0ZUJ1ZmZl
ci5jYXBhY2l0eTogIiArIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgZW1wdHlCeXRlcyA9
IG5ldyBieXRlW2J5dGVCdWZmZXIuY2FwYWNpdHkoKV07Ci0gICAgLy8gUmF0aGVyIHRoYW4gcGFz
c2luZyB0aGUgQnl0ZUJ1ZmZlciB3aXRoIGV2ZXJ5IGNhbGxiYWNrIChyZXF1aXJpbmcKLSAgICAv
LyB0aGUgcG90ZW50aWFsbHkgZXhwZW5zaXZlIEdldERpcmVjdEJ1ZmZlckFkZHJlc3MpIHdlIHNp
bXBseSBoYXZlIHRoZQotICAgIC8vIHRoZSBuYXRpdmUgY2xhc3MgY2FjaGUgdGhlIGFkZHJlc3Mg
dG8gdGhlIG1lbW9yeSBvbmNlLgotICAgIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhi
eXRlQnVmZmVyLCBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgICAvLyBHZXQgdGhlIG1pbmltdW0g
YnVmZmVyIHNpemUgcmVxdWlyZWQgZm9yIHRoZSBzdWNjZXNzZnVsIGNyZWF0aW9uIG9mCi0gICAg
Ly8gYW4gQXVkaW9SZWNvcmQgb2JqZWN0LCBpbiBieXRlIHVuaXRzLgotICAgIC8vIE5vdGUgdGhh
dCB0aGlzIHNpemUgZG9lc24ndCBndWFyYW50ZWUgYSBzbW9vdGggcmVjb3JkaW5nIHVuZGVyIGxv
YWQuCi0gICAgaW50IG1pbkJ1ZmZlclNpemUgPSBBdWRpb1JlY29yZC5nZXRNaW5CdWZmZXJTaXpl
KAotICAgICAgICBzYW1wbGVSYXRlLCBBdWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8sIEF1ZGlv
Rm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVCk7Ci0gICAgaWYgKG1pbkJ1ZmZlclNpemUgPT0gQXVk
aW9SZWNvcmQuRVJST1IgfHwgbWluQnVmZmVyU2l6ZSA9PSBBdWRpb1JlY29yZC5FUlJPUl9CQURf
VkFMVUUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1JlY29yZC5nZXRNaW5CdWZmZXJT
aXplIGZhaWxlZDogIiArIG1pbkJ1ZmZlclNpemUpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZTogIiArIG1p
bkJ1ZmZlclNpemUpOwotCi0gICAgLy8gVXNlIGEgbGFyZ2VyIGJ1ZmZlciBzaXplIHRoYW4gdGhl
IG1pbmltdW0gcmVxdWlyZWQgd2hlbiBjcmVhdGluZyB0aGUKLSAgICAvLyBBdWRpb1JlY29yZCBp
bnN0YW5jZSB0byBlbnN1cmUgc21vb3RoIHJlY29yZGluZyB1bmRlciBsb2FkLiBJdCBoYXMgYmVl
bgotICAgIC8vIHZlcmlmaWVkIHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIGFjdHVhbCBy
ZWNvcmRpbmcgbGF0ZW5jeS4KLSAgICBpbnQgYnVmZmVyU2l6ZUluQnl0ZXMgPSBNYXRoLm1heChC
VUZGRVJfU0laRV9GQUNUT1IgKiBtaW5CdWZmZXJTaXplLCBieXRlQnVmZmVyLmNhcGFjaXR5KCkp
OwotICAgIExvZ2dpbmcuZChUQUcsICJidWZmZXJTaXplSW5CeXRlczogIiArIGJ1ZmZlclNpemVJ
bkJ5dGVzKTsKLSAgICB0cnkgewotICAgICAgYXVkaW9SZWNvcmQgPSBuZXcgQXVkaW9SZWNvcmQo
QXVkaW9Tb3VyY2UuVk9JQ0VfQ09NTVVOSUNBVElPTiwgc2FtcGxlUmF0ZSwKLSAgICAgICAgICBB
dWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8sIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJ
VCwgYnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICBy
ZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmIChhdWRpb1JlY29yZCA9PSBudWxsIHx8IGF1ZGlvUmVj
b3JkLmdldFN0YXRlKCkgIT0gQXVkaW9SZWNvcmQuU1RBVEVfSU5JVElBTElaRUQpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IEF1ZGlvUmVjb3JkIGluc3Rh
bmNlIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmIChlZmZlY3RzICE9IG51bGwp
IHsKLSAgICAgIGVmZmVjdHMuZW5hYmxlKGF1ZGlvUmVjb3JkLmdldEF1ZGlvU2Vzc2lvbklkKCkp
OwotICAgIH0KLSAgICAvLyBWZXJpZnkgdGhhdCBhbGwgYXVkaW8gcGFyYW1ldGVycyBhcmUgdmFs
aWQgYW5kIGNvcnJlY3QuCi0gICAgaWYgKCFhcmVQYXJhbWV0ZXJzVmFsaWQoc2FtcGxlUmF0ZSwg
Y2hhbm5lbHMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXQgbGVhc3Qgb25lIGF1ZGlvIHJl
Y29yZCBwYXJhbWV0ZXIgaXMgaW52YWxpZC4iKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0g
ICAgbG9nTWFpblBhcmFtZXRlcnMoKTsKLSAgICBsb2dNYWluUGFyYW1ldGVyc0V4dGVuZGVkKCk7
Ci0gICAgcmV0dXJuIGZyYW1lc1BlckJ1ZmZlcjsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBz
dGFydFJlY29yZGluZygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRSZWNvcmRpbmciKTsK
LSAgICBhc3NlcnRUcnVlKGF1ZGlvUmVjb3JkICE9IG51bGwpOwotICAgIGFzc2VydFRydWUoYXVk
aW9UaHJlYWQgPT0gbnVsbCk7Ci0gICAgdHJ5IHsKLSAgICAgIGF1ZGlvUmVjb3JkLnN0YXJ0UmVj
b3JkaW5nKCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJBdWRpb1JlY29yZC5zdGFydFJlY29yZGluZyBmYWlsZWQ6ICIgKyBl
LmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhdWRp
b1JlY29yZC5nZXRSZWNvcmRpbmdTdGF0ZSgpICE9IEF1ZGlvUmVjb3JkLlJFQ09SRFNUQVRFX1JF
Q09SRElORykgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLnN0YXJ0UmVjb3Jk
aW5nIGZhaWxlZCIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRpb1RocmVh
ZCA9IG5ldyBBdWRpb1JlY29yZFRocmVhZCgiQXVkaW9SZWNvcmRKYXZhVGhyZWFkIik7Ci0gICAg
YXVkaW9UaHJlYWQuc3RhcnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUg
Ym9vbGVhbiBzdG9wUmVjb3JkaW5nKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wUmVjb3Jk
aW5nIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCAhPSBudWxsKTsKLSAgICBhdWRpb1Ro
cmVhZC5zdG9wVGhyZWFkKCk7Ci0gICAgaWYgKCFUaHJlYWRVdGlscy5qb2luVW5pbnRlcnJ1cHRp
Ymx5KGF1ZGlvVGhyZWFkLCBBVURJT19SRUNPUkRfVEhSRUFEX0pPSU5fVElNRU9VVF9NUykpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJKb2luIG9mIEF1ZGlvUmVjb3JkSmF2YVRocmVhZCB0aW1l
ZCBvdXQiKTsKLSAgICB9Ci0gICAgYXVkaW9UaHJlYWQgPSBudWxsOwotICAgIGlmIChlZmZlY3Rz
ICE9IG51bGwpIHsKLSAgICAgIGVmZmVjdHMucmVsZWFzZSgpOwotICAgIH0KLSAgICBhdWRpb1Jl
Y29yZC5yZWxlYXNlKCk7Ci0gICAgYXVkaW9SZWNvcmQgPSBudWxsOwotICAgIHJldHVybiB0cnVl
OwotICB9Ci0KLSAgLy8gVmVyaWZpZXMgdGhhdCB0aGUgYXVkaW8gcmVjb3JkIGlzIHVzaW5nIGNv
cnJlY3QgcGFyYW1ldGVycywgaS5lLiwgdGhhdCB0aGUKLSAgLy8gY3JlYXRlZCBpbnN0YW5jZSB1
c2VzIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXNrZWQgZm9yLgotICBwcml2YXRlIGJvb2xlYW4g
YXJlUGFyYW1ldGVyc1ZhbGlkKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsKLSAgICBy
ZXR1cm4gKGF1ZGlvUmVjb3JkLmdldEF1ZGlvRm9ybWF0KCkgPT0gQXVkaW9Gb3JtYXQuRU5DT0RJ
TkdfUENNXzE2QklUCi0gICAgICAgICYmIGF1ZGlvUmVjb3JkLmdldENoYW5uZWxDb25maWd1cmF0
aW9uKCkgPT0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9NT05PCi0gICAgICAgICYmIGF1ZGlvUmVj
b3JkLmdldEF1ZGlvU291cmNlKCkgPT0gQXVkaW9Tb3VyY2UuVk9JQ0VfQ09NTVVOSUNBVElPTgot
ICAgICAgICAmJiBhdWRpb1JlY29yZC5nZXRTYW1wbGVSYXRlKCkgPT0gc2FtcGxlUmF0ZSAmJiBh
dWRpb1JlY29yZC5nZXRDaGFubmVsQ291bnQoKSA9PSBjaGFubmVscyk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnMoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlv
UmVjb3JkOiAiCi0gICAgICAgICAgICArICJzZXNzaW9uIElEOiAiICsgYXVkaW9SZWNvcmQuZ2V0
QXVkaW9TZXNzaW9uSWQoKSArICIsICIKLSAgICAgICAgICAgICsgImNoYW5uZWxzOiAiICsgYXVk
aW9SZWNvcmQuZ2V0Q2hhbm5lbENvdW50KCkgKyAiLCAiCi0gICAgICAgICAgICArICJzYW1wbGUg
cmF0ZTogIiArIGF1ZGlvUmVjb3JkLmdldFNhbXBsZVJhdGUoKSk7Ci0gIH0KLQotICBwcml2YXRl
IHZvaWQgbG9nTWFpblBhcmFtZXRlcnNFeHRlbmRlZCgpIHsKLSAgICBpZiAoV2ViUnRjQXVkaW9V
dGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcuZChU
QUcsICJBdWRpb1JlY29yZDogIgotICAgICAgICAgICAgICAvLyBUaGUgZnJhbWUgY291bnQgb2Yg
dGhlIG5hdGl2ZSBBdWRpb1JlY29yZCBidWZmZXIuCi0gICAgICAgICAgICAgICsgImJ1ZmZlciBz
aXplIGluIGZyYW1lczogIiArIGF1ZGlvUmVjb3JkLmdldEJ1ZmZlclNpemVJbkZyYW1lcygpKTsK
LSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRp
b24gIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQg
YXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0g
ICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0
cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYWNoZURp
cmVjdEJ1ZmZlckFkZHJlc3MoQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBsb25nIG5hdGl2ZUF1ZGlv
UmVjb3JkKTsKLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZURhdGFJc1JlY29yZGVkKGlu
dCBieXRlcywgbG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgLy8gU2V0cyBhbGwgcmVjb3Jk
ZWQgc2FtcGxlcyB0byB6ZXJvIGlmIHxtdXRlfCBpcyB0cnVlLCBpLmUuLCBlbnN1cmVzIHRoYXQK
LSAgLy8gdGhlIG1pY3JvcGhvbmUgaXMgbXV0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRN
aWNyb3Bob25lTXV0ZShib29sZWFuIG11dGUpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAic2V0TWlj
cm9waG9uZU11dGUoIiArIG11dGUgKyAiKSIpOwotICAgIG1pY3JvcGhvbmVNdXRlID0gbXV0ZTsK
LSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
bW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5n
aW5lL1dlYlJ0Y0F1ZGlvVHJhY2suamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9UcmFjay5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vl
bmdpbmUvV2ViUnRjQXVkaW9UcmFjay5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzQ1ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGMudm9pY2Vlbmdp
bmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRl
bnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFu
ZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9UcmFj
azsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci0KLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFk
OwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJSdGNBdWRp
b1RyYWNrIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwot
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9UcmFjayI7
Ci0KLSAgLy8gRGVmYXVsdCBhdWRpbyBkYXRhIGZvcm1hdCBpcyBQQ00gMTYgYml0IHBlciBzYW1w
bGUuCi0gIC8vIEd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2VzLgotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUU19QRVJfU0FNUExFID0gMTY7Ci0KLSAgLy8gUmVx
dWVzdGVkIHNpemUgb2YgZWFjaCByZWNvcmRlZCBidWZmZXIgcHJvdmlkZWQgdG8gdGhlIGNsaWVu
dC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENBTExCQUNLX0JVRkZFUl9TSVpFX01TID0g
MTA7Ci0KLSAgLy8gQXZlcmFnZSBudW1iZXIgb2YgY2FsbGJhY2tzIHBlciBzZWNvbmQuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVJTX1BFUl9TRUNPTkQgPSAxMDAwIC8gQ0FMTEJB
Q0tfQlVGRkVSX1NJWkVfTVM7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0g
IHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVBdWRpb1RyYWNrOwotICBwcml2YXRlIGZpbmFsIEF1
ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7Ci0KLSAgcHJpdmF0ZSBCeXRlQnVmZmVyIGJ5dGVCdWZm
ZXI7Ci0KLSAgcHJpdmF0ZSBBdWRpb1RyYWNrIGF1ZGlvVHJhY2sgPSBudWxsOwotICBwcml2YXRl
IEF1ZGlvVHJhY2tUaHJlYWQgYXVkaW9UaHJlYWQgPSBudWxsOwotCi0gIC8vIFNhbXBsZXMgdG8g
YmUgcGxheWVkIGFyZSByZXBsYWNlZCBieSB6ZXJvcyBpZiB8c3BlYWtlck11dGV8IGlzIHNldCB0
byB0cnVlLgotICAvLyBDYW4gYmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3BlYWtlciBpcyBm
dWxseSBtdXRlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBzcGVha2VyTXV0
ZSA9IGZhbHNlOwotICBwcml2YXRlIGJ5dGVbXSBlbXB0eUJ5dGVzOwotCi0gIC8qKgotICAgKiBB
dWRpbyB0aHJlYWQgd2hpY2gga2VlcHMgY2FsbGluZyBBdWRpb1RyYWNrLndyaXRlKCkgdG8gc3Ry
ZWFtIGF1ZGlvLgotICAgKiBEYXRhIGlzIHBlcmlvZGljYWxseSBhY3F1aXJlZCBmcm9tIHRoZSBu
YXRpdmUgV2ViUlRDIGxheWVyIHVzaW5nIHRoZQotICAgKiBuYXRpdmVHZXRQbGF5b3V0RGF0YSBj
YWxsYmFjayBmdW5jdGlvbi4KLSAgICogVGhpcyB0aHJlYWQgdXNlcyBhIFByb2Nlc3MuVEhSRUFE
X1BSSU9SSVRZX1VSR0VOVF9BVURJTyBwcmlvcml0eS4KLSAgICovCi0gIHByaXZhdGUgY2xhc3Mg
QXVkaW9UcmFja1RocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBi
b29sZWFuIGtlZXBBbGl2ZSA9IHRydWU7Ci0KLSAgICBwdWJsaWMgQXVkaW9UcmFja1RocmVhZChT
dHJpbmcgbmFtZSkgewotICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRl
Ci0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgUHJvY2Vzcy5zZXRUaHJlYWRQcmlvcml0
eShQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8pOwotICAgICAgTG9nZ2luZy5k
KFRBRywgIkF1ZGlvVHJhY2tUaHJlYWQiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZv
KCkpOwotCi0gICAgICB0cnkgewotICAgICAgICAvLyBJbiBNT0RFX1NUUkVBTSBtb2RlIHdlIGNh
biBvcHRpb25hbGx5IHByaW1lIHRoZSBvdXRwdXQgYnVmZmVyIGJ5Ci0gICAgICAgIC8vIHdyaXRp
bmcgdXAgdG8gYnVmZmVyU2l6ZUluQnl0ZXMgKGZyb20gY29uc3RydWN0b3IpIGJlZm9yZSBzdGFy
dGluZy4KLSAgICAgICAgLy8gVGhpcyBwcmltaW5nIHdpbGwgYXZvaWQgYW4gaW1tZWRpYXRlIHVu
ZGVycnVuLCBidXQgaXMgbm90IHJlcXVpcmVkLgotICAgICAgICAvLyBUT0RPKGhlbnJpa2EpOiBp
bml0aWFsIHRlc3RzIGhhdmUgc2hvd24gdGhhdCBwcmltaW5nIGlzIG5vdCByZXF1aXJlZC4KLSAg
ICAgICAgYXVkaW9UcmFjay5wbGF5KCk7Ci0gICAgICAgIGFzc2VydFRydWUoYXVkaW9UcmFjay5n
ZXRQbGF5U3RhdGUoKSA9PSBBdWRpb1RyYWNrLlBMQVlTVEFURV9QTEFZSU5HKTsKLSAgICAgIH0g
Y2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcs
ICJBdWRpb1RyYWNrLnBsYXkgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZpeGVkIHNpemUgaW4gYnl0ZXMgb2YgZWFjaCAx
MG1zIGJsb2NrIG9mIGF1ZGlvIGRhdGEgdGhhdCB3ZSBhc2sgZm9yCi0gICAgICAvLyB1c2luZyBj
YWxsYmFja3MgdG8gdGhlIG5hdGl2ZSBXZWJSVEMgY2xpZW50LgotICAgICAgZmluYWwgaW50IHNp
emVJbkJ5dGVzID0gYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpOwotCi0gICAgICB3aGlsZSAoa2VlcEFs
aXZlKSB7Ci0gICAgICAgIC8vIEdldCAxMG1zIG9mIFBDTSBkYXRhIGZyb20gdGhlIG5hdGl2ZSBX
ZWJSVEMgY2xpZW50LiBBdWRpbyBkYXRhIGlzCi0gICAgICAgIC8vIHdyaXR0ZW4gaW50byB0aGUg
Y29tbW9uIEJ5dGVCdWZmZXIgdXNpbmcgdGhlIGFkZHJlc3MgdGhhdCB3YXMKLSAgICAgICAgLy8g
Y2FjaGVkIGF0IGNvbnN0cnVjdGlvbi4KLSAgICAgICAgbmF0aXZlR2V0UGxheW91dERhdGEoc2l6
ZUluQnl0ZXMsIG5hdGl2ZUF1ZGlvVHJhY2spOwotICAgICAgICAvLyBXcml0ZSBkYXRhIHVudGls
IGFsbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIGF1ZGlvIHNpbmsuCi0gICAgICAgIC8v
IFVwb24gcmV0dXJuLCB0aGUgYnVmZmVyIHBvc2l0aW9uIHdpbGwgaGF2ZSBiZWVuIGFkdmFuY2Vk
IHRvIHJlZmxlY3QKLSAgICAgICAgLy8gdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHN1Y2Nl
c3NmdWxseSB3cml0dGVuIHRvIHRoZSBBdWRpb1RyYWNrLgotICAgICAgICBhc3NlcnRUcnVlKHNp
emVJbkJ5dGVzIDw9IGJ5dGVCdWZmZXIucmVtYWluaW5nKCkpOwotICAgICAgICBpZiAoc3BlYWtl
ck11dGUpIHsKLSAgICAgICAgICBieXRlQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgYnl0ZUJ1
ZmZlci5wdXQoZW1wdHlCeXRlcyk7Ci0gICAgICAgICAgYnl0ZUJ1ZmZlci5wb3NpdGlvbigwKTsK
LSAgICAgICAgfQotICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKLSAgICAgICAgaWYgKFdl
YlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTG9sbGlwb3BPckhpZ2hlcigpKSB7Ci0gICAgICAgICAg
Ynl0ZXNXcml0dGVuID0gd3JpdGVPbkxvbGxpcG9wKGF1ZGlvVHJhY2ssIGJ5dGVCdWZmZXIsIHNp
emVJbkJ5dGVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBieXRlc1dyaXR0ZW4gPSB3
cml0ZVByZUxvbGxpcG9wKGF1ZGlvVHJhY2ssIGJ5dGVCdWZmZXIsIHNpemVJbkJ5dGVzKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IHNpemVJbkJ5dGVzKSB7Ci0gICAg
ICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvVHJhY2sud3JpdGUgZmFpbGVkOiAiICsgYnl0ZXNX
cml0dGVuKTsKLSAgICAgICAgICBpZiAoYnl0ZXNXcml0dGVuID09IEF1ZGlvVHJhY2suRVJST1Jf
SU5WQUxJRF9PUEVSQVRJT04pIHsKLSAgICAgICAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBUaGUgYnl0ZSBidWZmZXIgbXVzdCBiZSBy
ZXdpbmRlZCBzaW5jZSBieXRlQnVmZmVyLnBvc2l0aW9uKCkgaXMKLSAgICAgICAgLy8gaW5jcmVh
c2VkIGF0IGVhY2ggY2FsbCB0byBBdWRpb1RyYWNrLndyaXRlKCkuIElmIHdlIGRvbid0IGRvIHRo
aXMsCi0gICAgICAgIC8vIG5leHQgY2FsbCB0byBBdWRpb1RyYWNrLndyaXRlKCkgd2lsbCBmYWls
LgotICAgICAgICBieXRlQnVmZmVyLnJld2luZCgpOwotCi0gICAgICAgIC8vIFRPRE8oaGVucmlr
YSk6IGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGRlbGF5IGVzdGltYXRlIGhlcmUgYnkKLSAg
ICAgICAgLy8gY291bnRpbmcgbnVtYmVyIG9mIHdyaXR0ZW4gZnJhbWVzIGFuZCBzdWJ0cmFjdGlu
ZyB0aGUgcmVzdWx0IGZyb20KLSAgICAgICAgLy8gYXVkaW9UcmFjay5nZXRQbGF5YmFja0hlYWRQ
b3NpdGlvbigpLgotICAgICAgfQotCi0gICAgICB0cnkgewotICAgICAgICBhdWRpb1RyYWNrLnN0
b3AoKTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAg
IExvZ2dpbmcuZShUQUcsICJBdWRpb1RyYWNrLnN0b3AgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdl
KCkpOwotICAgICAgfQotICAgICAgYXNzZXJ0VHJ1ZShhdWRpb1RyYWNrLmdldFBsYXlTdGF0ZSgp
ID09IEF1ZGlvVHJhY2suUExBWVNUQVRFX1NUT1BQRUQpOwotICAgICAgYXVkaW9UcmFjay5mbHVz
aCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IHdyaXRlT25Mb2xsaXBvcChBdWRpb1RyYWNr
IGF1ZGlvVHJhY2ssIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwgaW50IHNpemVJbkJ5dGVzKSB7Ci0g
ICAgICByZXR1cm4gYXVkaW9UcmFjay53cml0ZShieXRlQnVmZmVyLCBzaXplSW5CeXRlcywgQXVk
aW9UcmFjay5XUklURV9CTE9DS0lORyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgd3JpdGVQ
cmVMb2xsaXBvcChBdWRpb1RyYWNrIGF1ZGlvVHJhY2ssIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwg
aW50IHNpemVJbkJ5dGVzKSB7Ci0gICAgICByZXR1cm4gYXVkaW9UcmFjay53cml0ZShieXRlQnVm
ZmVyLmFycmF5KCksIGJ5dGVCdWZmZXIuYXJyYXlPZmZzZXQoKSwgc2l6ZUluQnl0ZXMpOwotICAg
IH0KLQotICAgIHB1YmxpYyB2b2lkIGpvaW5UaHJlYWQoKSB7Ci0gICAgICBrZWVwQWxpdmUgPSBm
YWxzZTsKLSAgICAgIHdoaWxlIChpc0FsaXZlKCkpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAg
ICBqb2luKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLSAg
ICAgICAgICAvLyBJZ25vcmUuCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBX
ZWJSdGNBdWRpb1RyYWNrKENvbnRleHQgY29udGV4dCwgbG9uZyBuYXRpdmVBdWRpb1RyYWNrKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJ
bmZvKCkpOwotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5uYXRpdmVBdWRp
b1RyYWNrID0gbmF0aXZlQXVkaW9UcmFjazsKLSAgICBhdWRpb01hbmFnZXIgPSAoQXVkaW9NYW5h
Z2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BVURJT19TRVJWSUNFKTsKLSAg
ICBpZiAoREVCVUcpIHsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMubG9nRGV2aWNlSW5mbyhUQUcp
OwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0UGxheW91dChpbnQgc2FtcGxl
UmF0ZSwgaW50IGNoYW5uZWxzKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImluaXRQbGF5b3V0KHNh
bXBsZVJhdGU9IiArIHNhbXBsZVJhdGUgKyAiLCBjaGFubmVscz0iICsgY2hhbm5lbHMgKyAiKSIp
OwotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gY2hhbm5lbHMgKiAoQklUU19QRVJfU0FN
UExFIC8gOCk7Ci0gICAgYnl0ZUJ1ZmZlciA9IGJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3QoYnl0
ZXNQZXJGcmFtZSAqIChzYW1wbGVSYXRlIC8gQlVGRkVSU19QRVJfU0VDT05EKSk7Ci0gICAgTG9n
Z2luZy5kKFRBRywgImJ5dGVCdWZmZXIuY2FwYWNpdHk6ICIgKyBieXRlQnVmZmVyLmNhcGFjaXR5
KCkpOwotICAgIGVtcHR5Qnl0ZXMgPSBuZXcgYnl0ZVtieXRlQnVmZmVyLmNhcGFjaXR5KCldOwot
ICAgIC8vIFJhdGhlciB0aGFuIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXIgd2l0aCBldmVyeSBjYWxs
YmFjayAocmVxdWlyaW5nCi0gICAgLy8gdGhlIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBHZXREaXJl
Y3RCdWZmZXJBZGRyZXNzKSB3ZSBzaW1wbHkgaGF2ZSB0aGUKLSAgICAvLyB0aGUgbmF0aXZlIGNs
YXNzIGNhY2hlIHRoZSBhZGRyZXNzIHRvIHRoZSBtZW1vcnkgb25jZS4KLSAgICBuYXRpdmVDYWNo
ZURpcmVjdEJ1ZmZlckFkZHJlc3MoYnl0ZUJ1ZmZlciwgbmF0aXZlQXVkaW9UcmFjayk7Ci0KLSAg
ICAvLyBHZXQgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgcmVxdWlyZWQgZm9yIHRoZSBzdWNjZXNz
ZnVsIGNyZWF0aW9uIG9mIGFuCi0gICAgLy8gQXVkaW9UcmFjayBvYmplY3QgdG8gYmUgY3JlYXRl
ZCBpbiB0aGUgTU9ERV9TVFJFQU0gbW9kZS4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBzaXplIGRv
ZXNuJ3QgZ3VhcmFudGVlIGEgc21vb3RoIHBsYXliYWNrIHVuZGVyIGxvYWQuCi0gICAgLy8gVE9E
TyhoZW5yaWthKTogc2hvdWxkIHdlIGV4dGVuZCB0aGUgYnVmZmVyIHNpemUgdG8gYXZvaWQgZ2xp
dGNoZXM/Ci0gICAgZmluYWwgaW50IG1pbkJ1ZmZlclNpemVJbkJ5dGVzID0gQXVkaW9UcmFjay5n
ZXRNaW5CdWZmZXJTaXplKAotICAgICAgICBzYW1wbGVSYXRlLCBBdWRpb0Zvcm1hdC5DSEFOTkVM
X09VVF9NT05PLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpOwotICAgIExvZ2dpbmcu
ZChUQUcsICJBdWRpb1RyYWNrLmdldE1pbkJ1ZmZlclNpemU6ICIgKyBtaW5CdWZmZXJTaXplSW5C
eXRlcyk7Ci0gICAgLy8gRm9yIHRoZSBzdHJlYW1pbmcgbW9kZSwgZGF0YSBtdXN0IGJlIHdyaXR0
ZW4gdG8gdGhlIGF1ZGlvIHNpbmsgaW4KLSAgICAvLyBjaHVua3Mgb2Ygc2l6ZSAoZ2l2ZW4gYnkg
Ynl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSBsZXNzIHRoYW4gb3IgZXF1YWwKLSAgICAvLyB0byB0aGUg
dG90YWwgYnVmZmVyIHNpemUgfG1pbkJ1ZmZlclNpemVJbkJ5dGVzfC4gQnV0LCB3ZSBoYXZlIHNl
ZW4KLSAgICAvLyByZXBvcnRzIG9mICJnZXRNaW5CdWZmZXJTaXplKCk6IGVycm9yIHF1ZXJ5aW5n
IGhhcmR3YXJlIi4gSGVuY2UsIGl0Ci0gICAgLy8gY2FuIGhhcHBlbiB0aGF0IHxtaW5CdWZmZXJT
aXplSW5CeXRlc3wgY29udGFpbnMgYW4gaW52YWxpZCB2YWx1ZS4KLSAgICBpZiAobWluQnVmZmVy
U2l6ZUluQnl0ZXMgPCBieXRlQnVmZmVyLmNhcGFjaXR5KCkpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJBdWRpb1RyYWNrLmdldE1pbkJ1ZmZlclNpemUgcmV0dXJucyBhbiBpbnZhbGlkIHZhbHVl
LiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEVuc3VyZSB0aGF0IHBy
ZXZpc2lvbiBhdWRpbyBzZXNzaW9uIHdhcyBzdG9wcGVkIGNvcnJlY3RseSBiZWZvcmUgdHJ5aW5n
Ci0gICAgLy8gdG8gY3JlYXRlIGEgbmV3IEF1ZGlvVHJhY2suCi0gICAgaWYgKGF1ZGlvVHJhY2sg
IT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNvbmZsaWN0IHdpdGggZXhpc3Rpbmcg
QXVkaW9UcmFjay4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdHJ5IHsKLSAg
ICAgIC8vIENyZWF0ZSBhbiBBdWRpb1RyYWNrIG9iamVjdCBhbmQgaW5pdGlhbGl6ZSBpdHMgYXNz
b2NpYXRlZCBhdWRpbyBidWZmZXIuCi0gICAgICAvLyBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZlciBk
ZXRlcm1pbmVzIGhvdyBsb25nIGFuIEF1ZGlvVHJhY2sgY2FuIHBsYXkKLSAgICAgIC8vIGJlZm9y
ZSBydW5uaW5nIG91dCBvZiBkYXRhLgotICAgICAgYXVkaW9UcmFjayA9Ci0gICAgICAgICAgbmV3
IEF1ZGlvVHJhY2soQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMLCBzYW1wbGVSYXRlLCBB
dWRpb0Zvcm1hdC5DSEFOTkVMX09VVF9NT05PLAotICAgICAgICAgICAgICBBdWRpb0Zvcm1hdC5F
TkNPRElOR19QQ01fMTZCSVQsIG1pbkJ1ZmZlclNpemVJbkJ5dGVzLCBBdWRpb1RyYWNrLk1PREVf
U1RSRUFNKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAg
ICAgTG9nZ2luZy5kKFRBRywgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIEl0IGNhbiBoYXBwZW4gdGhhdCBhbiBBdWRpb1RyYWNrIGlzIGNyZWF0
ZWQgYnV0IGl0IHdhcyBub3Qgc3VjY2Vzc2Z1bGx5Ci0gICAgLy8gaW5pdGlhbGl6ZWQgdXBvbiBj
cmVhdGlvbi4gU2VlbXMgdG8gYmUgdGhlIGNhc2UgZS5nLiB3aGVuIHRoZSBtYXhpbXVtCi0gICAg
Ly8gbnVtYmVyIG9mIGdsb2JhbGx5IGF2YWlsYWJsZSBhdWRpbyB0cmFja3MgaXMgZXhjZWVkZWQu
Ci0gICAgaWYgKGF1ZGlvVHJhY2suZ2V0U3RhdGUoKSAhPSBBdWRpb1RyYWNrLlNUQVRFX0lOSVRJ
QUxJWkVEKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiSW5pdGlhbGl6YXRpb24gb2YgYXVkaW8g
dHJhY2sgZmFpbGVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBWZXJp
ZnkgdGhhdCBhbGwgYXVkaW8gcGFyYW1ldGVycyBhcmUgdmFsaWQgYW5kIGNvcnJlY3QuCi0gICAg
aWYgKCFhcmVQYXJhbWV0ZXJzVmFsaWQoc2FtcGxlUmF0ZSwgY2hhbm5lbHMpKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAiQXQgbGVhc3Qgb25lIGF1ZGlvIHRyYWNrIHBhcmFtZXRlciBpcyBpbnZh
bGlkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBsb2dNYWluUGFyYW1ldGVy
cygpOwotICAgIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzdGFydFBsYXlvdXQoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgInN0YXJ0UGxheW91dCIpOwotICAgIGFzc2VydFRydWUoYXVkaW9UcmFjayAhPSBudWxs
KTsKLSAgICBhc3NlcnRUcnVlKGF1ZGlvVGhyZWFkID09IG51bGwpOwotICAgIGlmIChhdWRpb1Ry
YWNrLmdldFN0YXRlKCkgIT0gQXVkaW9UcmFjay5TVEFURV9JTklUSUFMSVpFRCkgewotICAgICAg
TG9nZ2luZy5lKFRBRywgIkF1ZGlvIHRyYWNrIGlzIG5vdCBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6
ZWQuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGF1ZGlvVGhyZWFkID0gbmV3
IEF1ZGlvVHJhY2tUaHJlYWQoIkF1ZGlvVHJhY2tKYXZhVGhyZWFkIik7Ci0gICAgYXVkaW9UaHJl
YWQuc3RhcnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBz
dG9wUGxheW91dCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RvcFBsYXlvdXQiKTsKLSAgICBh
c3NlcnRUcnVlKGF1ZGlvVGhyZWFkICE9IG51bGwpOwotICAgIGxvZ1VuZGVycnVuQ291bnQoKTsK
LSAgICBhdWRpb1RocmVhZC5qb2luVGhyZWFkKCk7Ci0gICAgYXVkaW9UaHJlYWQgPSBudWxsOwot
ICAgIGlmIChhdWRpb1RyYWNrICE9IG51bGwpIHsKLSAgICAgIGF1ZGlvVHJhY2sucmVsZWFzZSgp
OwotICAgICAgYXVkaW9UcmFjayA9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotICB9
Ci0KLSAgLy8gR2V0IG1heCBwb3NzaWJsZSB2b2x1bWUgaW5kZXggZm9yIGEgcGhvbmUgY2FsbCBh
dWRpbyBzdHJlYW0uCi0gIHByaXZhdGUgaW50IGdldFN0cmVhbU1heFZvbHVtZSgpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAiZ2V0U3RyZWFtTWF4Vm9sdW1lIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRp
b01hbmFnZXIgIT0gbnVsbCk7Ci0gICAgcmV0dXJuIGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1NYXhW
b2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKTsKLSAgfQotCi0gIC8vIFNldCBj
dXJyZW50IHZvbHVtZSBsZXZlbCBmb3IgYSBwaG9uZSBjYWxsIGF1ZGlvIHN0cmVhbS4KLSAgcHJp
dmF0ZSBib29sZWFuIHNldFN0cmVhbVZvbHVtZShpbnQgdm9sdW1lKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgInNldFN0cmVhbVZvbHVtZSgiICsgdm9sdW1lICsgIikiKTsKLSAgICBhc3NlcnRUcnVl
KGF1ZGlvTWFuYWdlciAhPSBudWxsKTsKLSAgICBpZiAoaXNWb2x1bWVGaXhlZCgpKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAiVGhlIGRldmljZSBpbXBsZW1lbnRzIGEgZml4ZWQgdm9sdW1lIHBv
bGljeS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYXVkaW9NYW5hZ2VyLnNl
dFN0cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwsIHZvbHVtZSwgMCk7
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNWb2x1bWVGaXhl
ZCgpIHsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTG9sbGlwb3BPckhpZ2hl
cigpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBhdWRpb01hbmFnZXIuaXNWb2x1
bWVGaXhlZCgpOwotICB9Ci0KLSAgLyoqIEdldCBjdXJyZW50IHZvbHVtZSBsZXZlbCBmb3IgYSBw
aG9uZSBjYWxsIGF1ZGlvIHN0cmVhbS4gKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0U3RyZWFtVm9sdW1l
KCkgewotICAgIExvZ2dpbmcuZChUQUcsICJnZXRTdHJlYW1Wb2x1bWUiKTsKLSAgICBhc3NlcnRU
cnVlKGF1ZGlvTWFuYWdlciAhPSBudWxsKTsKLSAgICByZXR1cm4gYXVkaW9NYW5hZ2VyLmdldFN0
cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwpOwotICB9Ci0KLSAgLy8g
VmVyaWZpZXMgdGhhdCB0aGUgYXVkaW8gdHJhY2sgaXMgdXNpbmcgY29ycmVjdCBwYXJhbWV0ZXJz
LCBpLmUuLCB0aGF0IHRoZQotICAvLyBjcmVhdGVkIHRyYWNrIHVzZXMgdGhlIHBhcmFtZXRlcnMg
dGhhdCB3ZSBhc2tlZCBmb3IuCi0gIHByaXZhdGUgYm9vbGVhbiBhcmVQYXJhbWV0ZXJzVmFsaWQo
aW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIGZpbmFsIGludCBzdHJlYW1UeXBl
ID0gYXVkaW9UcmFjay5nZXRTdHJlYW1UeXBlKCk7Ci0gICAgcmV0dXJuIChhdWRpb1RyYWNrLmdl
dEF1ZGlvRm9ybWF0KCkgPT0gQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUCi0gICAgICAg
ICYmIGF1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvbmZpZ3VyYXRpb24oKSA9PSBBdWRpb0Zvcm1hdC5D
SEFOTkVMX09VVF9NT05PCi0gICAgICAgICYmIHN0cmVhbVR5cGUgPT0gQXVkaW9NYW5hZ2VyLlNU
UkVBTV9WT0lDRV9DQUxMICYmIGF1ZGlvVHJhY2suZ2V0U2FtcGxlUmF0ZSgpID09IHNhbXBsZVJh
dGUKLSAgICAgICAgJiYgc2FtcGxlUmF0ZSA9PSBhdWRpb1RyYWNrLmdldE5hdGl2ZU91dHB1dFNh
bXBsZVJhdGUoc3RyZWFtVHlwZSkKLSAgICAgICAgJiYgYXVkaW9UcmFjay5nZXRDaGFubmVsQ291
bnQoKSA9PSBjaGFubmVscyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRl
cnMoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2s6ICIKLSAgICAgICAgICAgICsg
InNlc3Npb24gSUQ6ICIgKyBhdWRpb1RyYWNrLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAiCi0g
ICAgICAgICAgICArICJjaGFubmVsczogIiArIGF1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvdW50KCkg
KyAiLCAiCi0gICAgICAgICAgICArICJzYW1wbGUgcmF0ZTogIiArIGF1ZGlvVHJhY2suZ2V0U2Ft
cGxlUmF0ZSgpICsgIiwgIgotICAgICAgICAgICAgLy8gR2FpbiAoPj0xLjApIGV4cHJlc3NlZCBh
cyBsaW5lYXIgbXVsdGlwbGllciBvbiBzYW1wbGUgdmFsdWVzLgotICAgICAgICAgICAgKyAibWF4
IGdhaW46ICIgKyBhdWRpb1RyYWNrLmdldE1heFZvbHVtZSgpKTsKLSAgfQotCi0gIHByaXZhdGUg
dm9pZCBsb2dNYWluUGFyYW1ldGVyc0V4dGVuZGVkKCkgewotICAgIGlmIChXZWJSdGNBdWRpb1V0
aWxzLnJ1bm5pbmdPbk1hcnNobWFsbG93T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5kKFRB
RywgIkF1ZGlvVHJhY2s6ICIKLSAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBzaXplIG9m
IHRoZSBBdWRpb1RyYWNrIGJ1ZmZlciB0aGF0IHRoZSBhcHAgd3JpdGVzIHRvLgotICAgICAgICAg
ICAgICArICJidWZmZXIgc2l6ZSBpbiBmcmFtZXM6ICIgKyBhdWRpb1RyYWNrLmdldEJ1ZmZlclNp
emVJbkZyYW1lcygpKTsKLSAgICB9Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09u
Tm91Z2F0T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2s6ICIK
LSAgICAgICAgICAgICAgLy8gTWF4aW11bSBzaXplIG9mIHRoZSBBdWRpb1RyYWNrIGJ1ZmZlciBp
biBmcmFtZXMuCi0gICAgICAgICAgICAgICsgImJ1ZmZlciBjYXBhY2l0eSBpbiBmcmFtZXM6ICIg
KyBhdWRpb1RyYWNrLmdldEJ1ZmZlckNhcGFjaXR5SW5GcmFtZXMoKSk7Ci0gICAgfQotICB9Ci0K
LSAgLy8gUHJpbnRzIHRoZSBudW1iZXIgb2YgdW5kZXJydW4gb2NjdXJyZW5jZXMgaW4gdGhlIGFw
cGxpY2F0aW9uLWxldmVsIHdyaXRlCi0gIC8vIGJ1ZmZlciBzaW5jZSB0aGUgQXVkaW9UcmFjayB3
YXMgY3JlYXRlZC4gQW4gdW5kZXJydW4gb2NjdXJzIGlmIHRoZSBhcHAgZG9lcwotICAvLyBub3Qg
d3JpdGUgYXVkaW8gZGF0YSBxdWlja2x5IGVub3VnaCwgY2F1c2luZyB0aGUgYnVmZmVyIHRvIHVu
ZGVyZmxvdyBhbmQgYQotICAvLyBwb3RlbnRpYWwgYXVkaW8gZ2xpdGNoLgotICAvLyBUT0RPKGhl
bnJpa2EpOiBrZWVwIHRyYWNrIG9mIHRoaXMgdmFsdWUgaW4gdGhlIGZpZWxkIGFuZCBwb3NzaWJs
eSBhZGQgbmV3Ci0gIC8vIFVNQSBzdGF0IGlmIG5lZWRlZC4KLSAgcHJpdmF0ZSB2b2lkIGxvZ1Vu
ZGVycnVuQ291bnQoKSB7Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTm91Z2F0
T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgInVuZGVycnVuIGNvdW50OiAiICsg
YXVkaW9UcmFjay5nZXRVbmRlcnJ1bkNvdW50KCkpOwotICAgIH0KLSAgfQotCi0gIC8vIEhlbHBl
ciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiAgd2hlbiBhbiBhc3NlcnRpb24gaGFz
IGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUcnVlKGJvb2xlYW4gY29uZGl0
aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25F
cnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICBw
cml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhCeXRlQnVm
ZmVyIGJ5dGVCdWZmZXIsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gIHByaXZhdGUgbmF0
aXZlIHZvaWQgbmF0aXZlR2V0UGxheW91dERhdGEoaW50IGJ5dGVzLCBsb25nIG5hdGl2ZUF1ZGlv
UmVjb3JkKTsKLQotICAvLyBTZXRzIGFsbCBzYW1wbGVzIHRvIGJlIHBsYXllZCBvdXQgdG8gemVy
byBpZiB8bXV0ZXwgaXMgdHJ1ZSwgaS5lLiwKLSAgLy8gZW5zdXJlcyB0aGF0IHRoZSBzcGVha2Vy
IGlzIG11dGVkLgotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0U3BlYWtlck11dGUoYm9vbGVhbiBt
dXRlKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgInNldFNwZWFrZXJNdXRlKCIgKyBtdXRlICsgIiki
KTsKLSAgICBzcGVha2VyTXV0ZSA9IG11dGU7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
amF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1V0aWxzLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5l
L1dlYlJ0Y0F1ZGlvVXRpbHMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVXRpbHMuamF2YQko
bm9uZXhpc3RlbnQpCkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAx
NSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0g
KiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHBy
b3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRT
LiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4g
dGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQot
cGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dn
aW5nOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5j
b250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1pbXBv
cnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotCi1pbXBvcnQgamF2YS5sYW5nLlRocmVhZDsKLWltcG9y
dCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMgZmlu
YWwgY2xhc3MgV2ViUnRjQXVkaW9VdGlscyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmlu
ZyBUQUcgPSAiV2ViUnRjQXVkaW9VdGlscyI7Ci0KLSAgLy8gTGlzdCBvZiBkZXZpY2VzIHdoZXJl
IHdlIGhhdmUgc2VlbiBpc3N1ZXMgKGUuZy4gYmFkIGF1ZGlvIHF1YWxpdHkpIHVzaW5nCi0gIC8v
IHRoZSBsb3cgbGF0ZW5jeSBvdXRwdXQgbW9kZSBpbiBjb21iaW5hdGlvbiB3aXRoIE9wZW5TTCBF
Uy4KLSAgLy8gVGhlIGRldmljZSBuYW1lIGlzIGdpdmVuIGJ5IEJ1aWxkLk1PREVMLgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBCTEFDS0xJU1RFRF9PUEVOX1NMX0VTX01PREVMUyA9
IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAvLyBUaGlzIGxpc3QgaXMgY3VycmVudGx5IGVtcHR5IDst
KQotICB9OwotCi0gIC8vIExpc3Qgb2YgZGV2aWNlcyB3aGVyZSBpdCBoYXMgYmVlbiB2ZXJpZmll
ZCB0aGF0IHRoZSBidWlsdC1pbiBlZmZlY3QKLSAgLy8gYmFkIGFuZCB3aGVyZSBpdCBtYWtlcyBz
ZW5zZSB0byBhdm9pZCB1c2luZyBpdCBhbmQgaW5zdGVhZCByZWx5IG9uIHRoZQotICAvLyBuYXRp
dmUgV2ViUlRDIHZlcnNpb24gaW5zdGVhZC4gVGhlIGRldmljZSBuYW1lIGlzIGdpdmVuIGJ5IEJ1
aWxkLk1PREVMLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBCTEFDS0xJU1RFRF9B
RUNfTU9ERUxTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICJENjUwMyIsIC8vIFNvbnkgWHBlcmlh
IFoyIEQ2NTAzCi0gICAgICAiT05FIEEyMDA1IiwgLy8gT25lUGx1cyAyCi0gICAgICAiTW90b0cz
IiwgLy8gTW90byBHICgzcmQgR2VuZXJhdGlvbikKLSAgfTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nW10gQkxBQ0tMSVNURURfTlNfTU9ERUxTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAg
ICJOZXh1cyAxMCIsICJOZXh1cyA5IiwKLSAgICAgICJPTkUgQTIwMDUiLCAvLyBPbmVQbHVzIDIK
LSAgfTsKLQotICAvLyBVc2UgMTZrSHogYXMgdGhlIGRlZmF1bHQgc2FtcGxlIHJhdGUuIEEgaGln
aGVyIHNhbXBsZSByYXRlIG1pZ2h0IHByZXZlbnQKLSAgLy8gdXMgZnJvbSBzdXBwb3J0aW5nIGNv
bW11bmljYXRpb24gbW9kZSBvbiBzb21lIG9sZGVyIChlLmcuIElDUykgZGV2aWNlcy4KLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU0FNUExFX1JBVEVfSFogPSAxNjAwMDsKLSAg
cHJpdmF0ZSBzdGF0aWMgaW50IGRlZmF1bHRTYW1wbGVSYXRlSHogPSBERUZBVUxUX1NBTVBMRV9S
QVRFX0haOwotICAvLyBTZXQgdG8gdHJ1ZSBpZiBzZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgaGFz
IGJlZW4gY2FsbGVkLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRGVmYXVsdFNhbXBsZVJh
dGVPdmVycmlkZGVuID0gZmFsc2U7Ci0KLSAgLy8gQnkgZGVmYXVsdCwgdXRpbGl6ZSBoYXJkd2Fy
ZSBiYXNlZCBhdWRpbyBlZmZlY3RzIGZvciBBRUMgYW5kIE5TIHdoZW4KLSAgLy8gYXZhaWxhYmxl
LgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXIgPSBmYWxzZTsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZE5v
aXNlU3VwcHJlc3NvciA9IGZhbHNlOwotCi0gIC8vIENhbGwgdGhlc2UgbWV0aG9kcyBpZiBhbnkg
aGFyZHdhcmUgYmFzZWQgZWZmZWN0IHNoYWxsIGJlIHJlcGxhY2VkIGJ5IGEKLSAgLy8gc29mdHdh
cmUgYmFzZWQgdmVyc2lvbiBwcm92aWRlZCBieSB0aGUgV2ViUlRDIHN0YWNrIGluc3RlYWQuCi0g
IHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWRBY291c3RpY0Vj
aG9DYW5jZWxlcihib29sZWFuIGVuYWJsZSkgewotICAgIHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNF
Y2hvQ2FuY2VsZXIgPSBlbmFibGU7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQg
dm9pZCBzZXRXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3Nvcihib29sZWFuIGVuYWJsZSkgewotICAg
IHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yID0gZW5hYmxlOwotICB9Ci0gIHB1YmxpYyBz
dGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJv
bChib29sZWFuIGVuYWJsZSkgewotICAgIC8vIFRPRE8oaGVucmlrYSk6IGRlcHJlY2F0ZWQ7IHJl
bW92ZSB3aGVuIG5vIGxvbmdlciB1c2VkIGJ5IGFueSBjbGllbnQuCi0gICAgTG9nZ2luZy53KFRB
RywgInNldFdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woKSBpcyBkZXByZWNhdGVkIik7
Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBib29sZWFuIHVzZVdlYlJ0Y0Jh
c2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKSB7Ci0gICAgaWYgKHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0
aWNFY2hvQ2FuY2VsZXIpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJPdmVycmlkaW5nIGRlZmF1
bHQgYmVoYXZpb3I7IG5vdyB1c2luZyBXZWJSVEMgQUVDISIpOwotICAgIH0KLSAgICByZXR1cm4g
dXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcjsKLSAgfQotICBwdWJsaWMgc3RhdGlj
IHN5bmNocm9uaXplZCBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKCkgewot
ICAgIGlmICh1c2VXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvcikgewotICAgICAgTG9nZ2luZy53
KFRBRywgIk92ZXJyaWRpbmcgZGVmYXVsdCBiZWhhdmlvcjsgbm93IHVzaW5nIFdlYlJUQyBOUyEi
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yOwotICB9
Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGRlcHJlY2F0ZWQ7IHJlbW92ZSB3aGVuIG5vIGxvbmdlciB1
c2VkIGJ5IGFueSBjbGllbnQuCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4g
dXNlV2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJvbCgpIHsKLSAgICAvLyBBbHdheXMgcmV0
dXJuIHRydWUgaGVyZSB0byBhdm9pZCB0cnlpbmcgdG8gdXNlIGFueSBidWlsdC1pbiBBR0MuCi0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBz
dXBwb3J0cyBhbiBhdWRpbyBlZmZlY3QgKEFFQyBvciBOUykuCi0gIC8vIEZvdXIgY29uZGl0aW9u
cyBtdXN0IGJlIGZ1bGZpbGxlZCBpZiBmdW5jdGlvbnMgYXJlIHRvIHJldHVybiB0cnVlOgotICAv
LyAxKSB0aGUgcGxhdGZvcm0gbXVzdCBzdXBwb3J0IHRoZSBidWlsdC1pbiAoSFcpIGVmZmVjdCwK
LSAgLy8gMikgZXhwbGljaXQgdXNlIChvdmVycmlkZSkgb2YgYSBXZWJSVEMgYmFzZWQgdmVyc2lv
biBtdXN0IG5vdCBiZSBzZXQsCi0gIC8vIDMpIHRoZSBkZXZpY2UgbXVzdCBub3QgYmUgYmxhY2ts
aXN0ZWQgZm9yIHVzZSBvZiB0aGUgZWZmZWN0LCBhbmQKLSAgLy8gNCkgdGhlIFVVSUQgb2YgdGhl
IGVmZmVjdCBtdXN0IGJlIGFwcHJvdmVkIChzb21lIFVVSURzIGNhbiBiZSBleGNsdWRlZCkuCi0g
IHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkg
ewotICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2Vs
ZXIoKTsKLSAgfQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JTdXBw
b3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VOb2lzZVN1cHBy
ZXNzb3IoKTsKLSAgfQotICAvLyBUT0RPKGhlbnJpa2EpOiBkZXByZWNhdGVkOyByZW1vdmUgd2hl
biBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4g
aXNBdXRvbWF0aWNHYWluQ29udHJvbFN1cHBvcnRlZCgpIHsKLSAgICAvLyBBbHdheXMgcmV0dXJu
IGZhbHNlIGhlcmUgdG8gYXZvaWQgdHJ5aW5nIHRvIHVzZSBhbnkgYnVpbHQtaW4gQUdDLgotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIENhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGRlZmF1
bHQgaGFuZGxpbmcgb2YgcXVlcnlpbmcgdGhlIG5hdGl2ZSBzYW1wbGUKLSAgLy8gcmF0ZSBzaGFs
bCBiZSBvdmVycmlkZGVuLiBDYW4gYmUgdXNlZnVsIG9uIHNvbWUgZGV2aWNlcyB3aGVyZSB0aGUK
LSAgLy8gYXZhaWxhYmxlIEFuZHJvaWQgQVBJcyBhcmUga25vd24gdG8gcmV0dXJuIGludmFsaWQg
cmVzdWx0cy4KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0U2Ft
cGxlUmF0ZUh6KGludCBzYW1wbGVSYXRlSHopIHsKLSAgICBpc0RlZmF1bHRTYW1wbGVSYXRlT3Zl
cnJpZGRlbiA9IHRydWU7Ci0gICAgZGVmYXVsdFNhbXBsZVJhdGVIeiA9IHNhbXBsZVJhdGVIejsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gaXNEZWZhdWx0U2Ft
cGxlUmF0ZU92ZXJyaWRkZW4oKSB7Ci0gICAgcmV0dXJuIGlzRGVmYXVsdFNhbXBsZVJhdGVPdmVy
cmlkZGVuOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgaW50IGdldERlZmF1
bHRTYW1wbGVSYXRlSHooKSB7Ci0gICAgcmV0dXJuIGRlZmF1bHRTYW1wbGVSYXRlSHo7Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRCbGFja0xpc3RlZE1vZGVsc0ZvckFl
Y1VzYWdlKCkgewotICAgIHJldHVybiBBcnJheXMuYXNMaXN0KFdlYlJ0Y0F1ZGlvVXRpbHMuQkxB
Q0tMSVNURURfQUVDX01PREVMUyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5n
PiBnZXRCbGFja0xpc3RlZE1vZGVsc0Zvck5zVXNhZ2UoKSB7Ci0gICAgcmV0dXJuIEFycmF5cy5h
c0xpc3QoV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9OU19NT0RFTFMpOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkdpbmdlckJyZWFkT3JIaWdoZXIoKSB7Ci0g
ICAgLy8gTm92ZW1iZXIgMjAxMDogQW5kcm9pZCAyLjMsIEFQSSBMZXZlbCA5LgotICAgIHJldHVy
biBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5HSU5HRVJCUkVB
RDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25KZWxseUJlYW5Pckhp
Z2hlcigpIHsKLSAgICAvLyBKdW5lIDIwMTI6IEFuZHJvaWQgNC4xLiBBUEkgTGV2ZWwgMTYuCi0g
ICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpF
TExZX0JFQU47Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uSmVsbHlC
ZWFuTVIxT3JIaWdoZXIoKSB7Ci0gICAgLy8gTm92ZW1iZXIgMjAxMjogQW5kcm9pZCA0LjIuIEFQ
SSBMZXZlbCAxNy4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZF
UlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjE7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xl
YW4gcnVubmluZ09uSmVsbHlCZWFuTVIyT3JIaWdoZXIoKSB7Ci0gICAgLy8gSnVseSAyNCwgMjAx
MzogQW5kcm9pZCA0LjMuIEFQSSBMZXZlbCAxOC4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5T
REtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjI7Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uTG9sbGlwb3BPckhpZ2hlcigpIHsKLSAgICAv
LyBBUEkgTGV2ZWwgMjEuCi0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWls
ZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFu
IHJ1bm5pbmdPbk1hcnNobWFsbG93T3JIaWdoZXIoKSB7Ci0gICAgLy8gQVBJIExldmVsIDIzLgot
ICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5N
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbk5vdWdhdE9ySGlnaGVy
KCkgewotICAgIC8vIEFQSSBMZXZlbCAyNC4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtf
SU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTjsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2Qg
Zm9yIGJ1aWxkaW5nIGEgc3RyaW5nIG9mIHRocmVhZCBpbmZvcm1hdGlvbi4KLSAgcHVibGljIHN0
YXRpYyBTdHJpbmcgZ2V0VGhyZWFkSW5mbygpIHsKLSAgICByZXR1cm4gIkBbbmFtZT0iICsgVGhy
ZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAiLCBpZD0iICsgVGhyZWFkLmN1cnJlbnRU
aHJlYWQoKS5nZXRJZCgpCi0gICAgICAgICsgIl0iOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHdlJ3JlIHJ1bm5pbmcgb24gZW11bGF0b3IuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBy
dW5uaW5nT25FbXVsYXRvcigpIHsKLSAgICByZXR1cm4gQnVpbGQuSEFSRFdBUkUuZXF1YWxzKCJn
b2xkZmlzaCIpICYmIEJ1aWxkLkJSQU5ELnN0YXJ0c1dpdGgoImdlbmVyaWNfIik7Ci0gIH0KLQot
ICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpcyBibGFja2xpc3RlZCBmb3IgT3BlblNM
IEVTIHVzYWdlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGV2aWNlSXNCbGFja2xpc3RlZEZv
ck9wZW5TTEVTVXNhZ2UoKSB7Ci0gICAgTGlzdDxTdHJpbmc+IGJsYWNrTGlzdGVkTW9kZWxzID0g
QXJyYXlzLmFzTGlzdChCTEFDS0xJU1RFRF9PUEVOX1NMX0VTX01PREVMUyk7Ci0gICAgcmV0dXJu
IGJsYWNrTGlzdGVkTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgfQotCi0gIC8vIElu
Zm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGJ1aWxkLCB0YWtlbiBmcm9tIHN5c3RlbSBwcm9w
ZXJ0aWVzLgotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRGV2aWNlSW5mbyhTdHJpbmcgdGFnKSB7
Ci0gICAgTG9nZ2luZy5kKHRhZywgIkFuZHJvaWQgU0RLOiAiICsgQnVpbGQuVkVSU0lPTi5TREtf
SU5UICsgIiwgIgotICAgICAgICAgICAgKyAiUmVsZWFzZTogIiArIEJ1aWxkLlZFUlNJT04uUkVM
RUFTRSArICIsICIKLSAgICAgICAgICAgICsgIkJyYW5kOiAiICsgQnVpbGQuQlJBTkQgKyAiLCAi
Ci0gICAgICAgICAgICArICJEZXZpY2U6ICIgKyBCdWlsZC5ERVZJQ0UgKyAiLCAiCi0gICAgICAg
ICAgICArICJJZDogIiArIEJ1aWxkLklEICsgIiwgIgotICAgICAgICAgICAgKyAiSGFyZHdhcmU6
ICIgKyBCdWlsZC5IQVJEV0FSRSArICIsICIKLSAgICAgICAgICAgICsgIk1hbnVmYWN0dXJlcjog
IiArIEJ1aWxkLk1BTlVGQUNUVVJFUiArICIsICIKLSAgICAgICAgICAgICsgIk1vZGVsOiAiICsg
QnVpbGQuTU9ERUwgKyAiLCAiCi0gICAgICAgICAgICArICJQcm9kdWN0OiAiICsgQnVpbGQuUFJP
RFVDVCk7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYgdGhlIHByb2Nlc3MgaGFzIGFzIHNwZWNpZmll
ZCBwZXJtaXNzaW9uIG9yIG5vdC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1Blcm1pc3Np
b24oQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgcGVybWlzc2lvbikgewotICAgIHJldHVybiBjb250
ZXh0LmNoZWNrUGVybWlzc2lvbihwZXJtaXNzaW9uLCBQcm9jZXNzLm15UGlkKCksIFByb2Nlc3Mu
bXlVaWQoKSkKLSAgICAgICAgPT0gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVEOwot
ICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX2NvbW1vbi5jYwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX2NvbW1vbi5jYwkocmV2aXNpb24gMjEyMjczKQor
KysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwx
MDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uaCIKLQotI2luY2x1ZGUg
PFNMRVMvT3BlblNMRVMuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2FycmF5c2l6ZS5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQot
Ly8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBnaXZlbiBhbiBpbnRlZ2VyIFNMX1JF
U1VMVF9YWFggY29kZS4KLS8vIFRoZSBtYXBwaW5nIGNhbiBiZSBmb3VuZCBpbiA8U0xFUy9PcGVu
U0xFUy5oPi4KLWNvbnN0IGNoYXIqIEdldFNMRXJyb3JTdHJpbmcoc2l6ZV90IGNvZGUpIHsKLSAg
c3RhdGljIGNvbnN0IGNoYXIqIHNsX2Vycm9yX3N0cmluZ3NbXSA9IHsKLSAgICAgICJTTF9SRVNV
TFRfU1VDQ0VTUyIsICAgICAgICAgICAgICAgICAvLyAwCi0gICAgICAiU0xfUkVTVUxUX1BSRUNP
TkRJVElPTlNfVklPTEFURUQiLCAgLy8gMQotICAgICAgIlNMX1JFU1VMVF9QQVJBTUVURVJfSU5W
QUxJRCIsICAgICAgIC8vIDIKLSAgICAgICJTTF9SRVNVTFRfTUVNT1JZX0ZBSUxVUkUiLCAgICAg
ICAgICAvLyAzCi0gICAgICAiU0xfUkVTVUxUX1JFU09VUkNFX0VSUk9SIiwgICAgICAgICAgLy8g
NAotICAgICAgIlNMX1JFU1VMVF9SRVNPVVJDRV9MT1NUIiwgICAgICAgICAgIC8vIDUKLSAgICAg
ICJTTF9SRVNVTFRfSU9fRVJST1IiLCAgICAgICAgICAgICAgICAvLyA2Ci0gICAgICAiU0xfUkVT
VUxUX0JVRkZFUl9JTlNVRkZJQ0lFTlQiLCAgICAgLy8gNwotICAgICAgIlNMX1JFU1VMVF9DT05U
RU5UX0NPUlJVUFRFRCIsICAgICAgIC8vIDgKLSAgICAgICJTTF9SRVNVTFRfQ09OVEVOVF9VTlNV
UFBPUlRFRCIsICAgICAvLyA5Ci0gICAgICAiU0xfUkVTVUxUX0NPTlRFTlRfTk9UX0ZPVU5EIiwg
ICAgICAgLy8gMTAKLSAgICAgICJTTF9SRVNVTFRfUEVSTUlTU0lPTl9ERU5JRUQiLCAgICAgICAv
LyAxMQotICAgICAgIlNMX1JFU1VMVF9GRUFUVVJFX1VOU1VQUE9SVEVEIiwgICAgIC8vIDEyCi0g
ICAgICAiU0xfUkVTVUxUX0lOVEVSTkFMX0VSUk9SIiwgICAgICAgICAgLy8gMTMKLSAgICAgICJT
TF9SRVNVTFRfVU5LTk9XTl9FUlJPUiIsICAgICAgICAgICAvLyAxNAotICAgICAgIlNMX1JFU1VM
VF9PUEVSQVRJT05fQUJPUlRFRCIsICAgICAgIC8vIDE1Ci0gICAgICAiU0xfUkVTVUxUX0NPTlRS
T0xfTE9TVCIsICAgICAgICAgICAgLy8gMTYKLSAgfTsKLQotICBpZiAoY29kZSA+PSBhcnJheXNp
emUoc2xfZXJyb3Jfc3RyaW5ncykpIHsKLSAgICByZXR1cm4gIlNMX1JFU1VMVF9VTktOT1dOX0VS
Uk9SIjsKLSAgfQotICByZXR1cm4gc2xfZXJyb3Jfc3RyaW5nc1tjb2RlXTsKLX0KLQotU0xEYXRh
Rm9ybWF0X1BDTSBDcmVhdGVQQ01Db25maWd1cmF0aW9uKHNpemVfdCBjaGFubmVscywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGJpdHNfcGVyX3NhbXBs
ZSkgewotICBSVENfQ0hFQ0tfRVEoYml0c19wZXJfc2FtcGxlLCBTTF9QQ01TQU1QTEVGT1JNQVRf
RklYRURfMTYpOwotICBTTERhdGFGb3JtYXRfUENNIGZvcm1hdDsKLSAgZm9ybWF0LmZvcm1hdFR5
cGUgPSBTTF9EQVRBRk9STUFUX1BDTTsKLSAgZm9ybWF0Lm51bUNoYW5uZWxzID0gc3RhdGljX2Nh
c3Q8U0x1aW50MzI+KGNoYW5uZWxzKTsKLSAgLy8gTm90ZSB0aGF0LCB0aGUgdW5pdCBvZiBzYW1w
bGUgcmF0ZSBpcyBhY3R1YWxseSBpbiBtaWxsaUhlcnR6IGFuZCBub3QgSGVydHouCi0gIHN3aXRj
aCAoc2FtcGxlX3JhdGUpIHsKLSAgICBjYXNlIDgwMDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1Bl
clNlYyA9IFNMX1NBTVBMSU5HUkFURV84OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAxNjAwMDoK
LSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzE2OwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSAyMjA1MDoKLSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xf
U0FNUExJTkdSQVRFXzIyXzA1OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzMjAwMDoKLSAgICAg
IGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzMyOwotICAgICAgYnJlYWs7
Ci0gICAgY2FzZSA0NDEwMDoKLSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJ
TkdSQVRFXzQ0XzE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDQ4MDAwOgotICAgICAgZm9ybWF0
LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVfNDg7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIDY0MDAwOgotICAgICAgZm9ybWF0LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVf
NjQ7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDg4MjAwOgotICAgICAgZm9ybWF0LnNhbXBsZXNQ
ZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVfODhfMjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgOTYw
MDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1BlclNlYyA9IFNMX1NBTVBMSU5HUkFURV85NjsKLSAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbnN1
cHBvcnRlZCBzYW1wbGUgcmF0ZTogIiA8PCBzYW1wbGVfcmF0ZTsKLSAgICAgIGJyZWFrOwotICB9
Ci0gIGZvcm1hdC5iaXRzUGVyU2FtcGxlID0gU0xfUENNU0FNUExFRk9STUFUX0ZJWEVEXzE2Owot
ICBmb3JtYXQuY29udGFpbmVyU2l6ZSA9IFNMX1BDTVNBTVBMRUZPUk1BVF9GSVhFRF8xNjsKLSAg
Zm9ybWF0LmVuZGlhbm5lc3MgPSBTTF9CWVRFT1JERVJfTElUVExFRU5ESUFOOwotICBpZiAoZm9y
bWF0Lm51bUNoYW5uZWxzID09IDEpIHsKLSAgICBmb3JtYXQuY2hhbm5lbE1hc2sgPSBTTF9TUEVB
S0VSX0ZST05UX0NFTlRFUjsKLSAgfSBlbHNlIGlmIChmb3JtYXQubnVtQ2hhbm5lbHMgPT0gMikg
ewotICAgIGZvcm1hdC5jaGFubmVsTWFzayA9IFNMX1NQRUFLRVJfRlJPTlRfTEVGVCB8IFNMX1NQ
RUFLRVJfRlJPTlRfUklHSFQ7Ci0gIH0gZWxzZSB7Ci0gICAgUlRDX0NIRUNLKGZhbHNlKSA8PCAi
VW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGNoYW5uZWxzOiAiCi0gICAgICAgICAgICAgICAgICAgICA8
PCBmb3JtYXQubnVtQ2hhbm5lbHM7Ci0gIH0KLSAgcmV0dXJuIGZvcm1hdDsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX2NvbW1vbi5oCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX2NvbW1vbi5oCShub25leGlzdGVudCkK
QEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRD
X01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfQ09NTU9OX0hfCi0jZGVmaW5l
IFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX09QRU5TTEVTX0NPTU1PTl9IXwot
Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jaW5jbHVkZSA8U0xFUy9PcGVuU0xFUy5oPgotCi1uYW1l
c3BhY2Ugd2VicnRjIHsKLQotLy8gUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBnaXZl
biBhbiBpbnRlZ2VyIFNMX1JFU1VMVF9YWFggY29kZS4KLS8vIFRoZSBtYXBwaW5nIGNhbiBiZSBm
b3VuZCBpbiA8U0xFUy9PcGVuU0xFUy5oPi4KLWNvbnN0IGNoYXIqIEdldFNMRXJyb3JTdHJpbmco
c2l6ZV90IGNvZGUpOwotCi0vLyBDb25maWd1cmVzIGFuIFNMX0RBVEFGT1JNQVRfUENNIHN0cnVj
dHVyZSBiYXNlZCBvbiBuYXRpdmUgYXVkaW8gcGFyYW1ldGVycy4KLVNMRGF0YUZvcm1hdF9QQ00g
Q3JlYXRlUENNQ29uZmlndXJhdGlvbihzaXplX3QgY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbXBsZV9yYXRlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBiaXRzX3Blcl9zYW1wbGUpOwotCi0vLyBI
ZWxwZXIgY2xhc3MgZm9yIHVzaW5nIFNMT2JqZWN0SXRmIGludGVyZmFjZXMuCi10ZW1wbGF0ZSA8
dHlwZW5hbWUgU0xUeXBlLCB0eXBlbmFtZSBTTERlcmVmVHlwZT4KLWNsYXNzIFNjb3BlZFNMT2Jq
ZWN0IHsKLSBwdWJsaWM6Ci0gIFNjb3BlZFNMT2JqZWN0KCkgOiBvYmpfKG51bGxwdHIpIHt9Ci0K
LSAgflNjb3BlZFNMT2JqZWN0KCkgeyBSZXNldCgpOyB9Ci0KLSAgU0xUeXBlKiBSZWNlaXZlKCkg
ewotICAgIFJUQ19EQ0hFQ0soIW9ial8pOwotICAgIHJldHVybiAmb2JqXzsKLSAgfQotCi0gIFNM
RGVyZWZUeXBlIG9wZXJhdG9yLT4oKSB7IHJldHVybiAqb2JqXzsgfQotCi0gIFNMVHlwZSBHZXQo
KSBjb25zdCB7IHJldHVybiBvYmpfOyB9Ci0KLSAgdm9pZCBSZXNldCgpIHsKLSAgICBpZiAob2Jq
XykgewotICAgICAgKCpvYmpfKS0+RGVzdHJveShvYmpfKTsKLSAgICAgIG9ial8gPSBudWxscHRy
OwotICAgIH0KLSAgfQotCi0gcHJpdmF0ZToKLSAgU0xUeXBlIG9ial87Ci19OwotCi10eXBlZGVm
IFNjb3BlZFNMT2JqZWN0PFNMT2JqZWN0SXRmLCBjb25zdCBTTE9iamVjdEl0Zl8qPiBTY29wZWRT
TE9iamVjdEl0ZjsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFdFQlJU
Q19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX09QRU5TTEVTX0NPTU1PTl9IXwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19wbGF5ZXIuY2MKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5k
cm9pZC9vcGVuc2xlc19wbGF5ZXIuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvb3BlbnNsZXNfcGxheWVyLmNjCShub25leGlzdGVudCkKQEAgLTEsNDI2ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmgiCi0KLSNpbmNsdWRlIDxhbmRyb2lkL2xvZy5o
PgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYXJyYXlzaXplLmgiCi0jaW5jbHVkZSAid2VicnRj
L2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvZm9ybWF0X21hY3Jvcy5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3RpbWV1dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRl
ICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvZmluZV9hdWRpb19idWZmZXIuaCIKLQotI2Rl
ZmluZSBUQUcgIk9wZW5TTEVTUGxheWVyIgotI2RlZmluZSBBTE9HViguLi4pIF9fYW5kcm9pZF9s
b2dfcHJpbnQoQU5EUk9JRF9MT0dfVkVSQk9TRSwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUg
QUxPR0QoLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCBUQUcsIF9f
VkFfQVJHU19fKQotI2RlZmluZSBBTE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9J
RF9MT0dfRVJST1IsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dXKC4uLikgX19hbmRy
b2lkX2xvZ19wcmludChBTkRST0lEX0xPR19XQVJOLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmlu
ZSBBTE9HSSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgVEFHLCBf
X1ZBX0FSR1NfXykKLQotI2RlZmluZSBSRVRVUk5fT05fRVJST1Iob3AsIC4uLikgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgU0xyZXN1bHQgZXJyID0gKG9wKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChlcnIgIT0gU0xfUkVTVUxUX1NVQ0NF
U1MpIHsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIEFMT0dFKCIlcyBmYWlsZWQ6ICVz
IiwgI29wLCBHZXRTTEVycm9yU3RyaW5nKGVycikpOyBcCi0gICAgICByZXR1cm4gX19WQV9BUkdT
X187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgfSB3aGlsZSAoMCkK
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLU9wZW5TTEVTUGxheWVyOjpPcGVuU0xFU1BsYXllcihB
dWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBhdWRpb19tYW5hZ2VyXyhhdWRpb19t
YW5hZ2VyKSwKLSAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfKGF1ZGlvX21hbmFnZXItPkdldFBsYXlv
dXRBdWRpb1BhcmFtZXRlcnMoKSksCi0gICAgICBhdWRpb19kZXZpY2VfYnVmZmVyXyhudWxscHRy
KSwKLSAgICAgIGluaXRpYWxpemVkXyhmYWxzZSksCi0gICAgICBwbGF5aW5nXyhmYWxzZSksCi0g
ICAgICBidWZmZXJfaW5kZXhfKDApLAotICAgICAgZW5naW5lXyhudWxscHRyKSwKLSAgICAgIHBs
YXllcl8obnVsbHB0ciksCi0gICAgICBzaW1wbGVfYnVmZmVyX3F1ZXVlXyhudWxscHRyKSwKLSAg
ICAgIHZvbHVtZV8obnVsbHB0ciksCi0gICAgICBsYXN0X3BsYXlfdGltZV8oMCkgewotICBBTE9H
RCgiY3RvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICAvLyBVc2UgbmF0aXZlIGF1
ZGlvIG91dHB1dCBwYXJhbWV0ZXJzIHByb3ZpZGVkIGJ5IHRoZSBhdWRpbyBtYW5hZ2VyIGFuZAot
ICAvLyBkZWZpbmUgdGhlIFBDTSBmb3JtYXQgc3RydWN0dXJlLgotICBwY21fZm9ybWF0XyA9IENy
ZWF0ZVBDTUNvbmZpZ3VyYXRpb24oYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBs
ZV9yYXRlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19w
YXJhbWV0ZXJzXy5iaXRzX3Blcl9zYW1wbGUoKSk7Ci0gIC8vIERldGFjaCBmcm9tIHRoaXMgdGhy
ZWFkIHNpbmNlIHdlIHdhbnQgdG8gdXNlIHRoZSBjaGVja2VyIHRvIHZlcmlmeSBjYWxscwotICAv
LyBmcm9tIHRoZSBpbnRlcm5hbCAgYXVkaW8gdGhyZWFkLgotICB0aHJlYWRfY2hlY2tlcl9vcGVu
c2xlc18uRGV0YWNoRnJvbVRocmVhZCgpOwotfQotCi1PcGVuU0xFU1BsYXllcjo6fk9wZW5TTEVT
UGxheWVyKCkgewotICBBTE9HRCgiZHRvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBU
ZXJtaW5hdGUoKTsKLSAgRGVzdHJveUF1ZGlvUGxheWVyKCk7Ci0gIERlc3Ryb3lNaXgoKTsKLSAg
ZW5naW5lXyA9IG51bGxwdHI7Ci0gIFJUQ19EQ0hFQ0soIWVuZ2luZV8pOwotICBSVENfRENIRUNL
KCFvdXRwdXRfbWl4Xy5HZXQoKSk7Ci0gIFJUQ19EQ0hFQ0soIXBsYXllcl8pOwotICBSVENfRENI
RUNLKCFzaW1wbGVfYnVmZmVyX3F1ZXVlXyk7Ci0gIFJUQ19EQ0hFQ0soIXZvbHVtZV8pOwotfQot
Ci1pbnQgT3BlblNMRVNQbGF5ZXI6OkluaXQoKSB7Ci0gIEFMT0dEKCJJbml0JXMiLCBHZXRUaHJl
YWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9u
VmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNQbGF5ZXI6OlRl
cm1pbmF0ZSgpIHsKLSAgQUxPR0QoIlRlcm1pbmF0ZSVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3Ry
KCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkp
OwotICBTdG9wUGxheW91dCgpOwotICByZXR1cm4gMDsKLX0KLQotaW50IE9wZW5TTEVTUGxheWVy
OjpJbml0UGxheW91dCgpIHsKLSAgQUxPR0QoIkluaXRQbGF5b3V0JXMiLCBHZXRUaHJlYWRJbmZv
KCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0soIWluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXBs
YXlpbmdfKTsKLSAgaWYgKCFPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKSkgewotICAgIEFMT0dFKCJG
YWlsZWQgdG8gb2J0YWluIFNMIEVuZ2luZSBpbnRlcmZhY2UiKTsKLSAgICByZXR1cm4gLTE7Ci0g
IH0KLSAgQ3JlYXRlTWl4KCk7Ci0gIGluaXRpYWxpemVkXyA9IHRydWU7Ci0gIGJ1ZmZlcl9pbmRl
eF8gPSAwOwotICByZXR1cm4gMDsKLX0KLQotaW50IE9wZW5TTEVTUGxheWVyOjpTdGFydFBsYXlv
dXQoKSB7Ci0gIEFMT0dEKCJTdGFydFBsYXlvdXQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigp
KTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsK
LSAgUlRDX0RDSEVDSyhpbml0aWFsaXplZF8pOwotICBSVENfRENIRUNLKCFwbGF5aW5nXyk7Ci0g
IGlmIChmaW5lX2F1ZGlvX2J1ZmZlcl8pIHsKLSAgICBmaW5lX2F1ZGlvX2J1ZmZlcl8tPlJlc2V0
UGxheW91dCgpOwotICB9Ci0gIC8vIFRoZSBudW1iZXIgb2YgbG93ZXIgbGF0ZW5jeSBhdWRpbyBw
bGF5ZXJzIGlzIGxpbWl0ZWQsIGhlbmNlIHdlIGNyZWF0ZSB0aGUKLSAgLy8gYXVkaW8gcGxheWVy
IGluIFN0YXJ0KCkgYW5kIGRlc3Ryb3kgaXQgaW4gU3RvcCgpLgotICBDcmVhdGVBdWRpb1BsYXll
cigpOwotICAvLyBGaWxsIHVwIGF1ZGlvIGJ1ZmZlcnMgdG8gYXZvaWQgaW5pdGlhbCBnbGl0Y2gg
YW5kIHRvIGVuc3VyZSB0aGF0IHBsYXliYWNrCi0gIC8vIHN0YXJ0cyB3aGVuIG1vZGUgaXMgbGF0
ZXIgY2hhbmdlZCB0byBTTF9QTEFZU1RBVEVfUExBWUlORy4KLSAgLy8gVE9ETyhoZW5yaWthKTog
d2UgY2FuIHNhdmUgc29tZSBkZWxheSBieSBvbmx5IG1ha2luZyBvbmUgY2FsbCB0bwotICAvLyBF
bnF1ZXVlUGxheW91dERhdGEuIE1vc3QgbGlrZWx5IG5vdCB3b3J0aCB0aGUgcmlzayBvZiBhZGRp
bmcgYSBnbGl0Y2guCi0gIGxhc3RfcGxheV90aW1lXyA9IHJ0Yzo6VGltZSgpOwotICBmb3IgKGlu
dCBpID0gMDsgaSA8IGtOdW1PZk9wZW5TTEVTQnVmZmVyczsgKytpKSB7Ci0gICAgRW5xdWV1ZVBs
YXlvdXREYXRhKHRydWUpOwotICB9Ci0gIC8vIFN0YXJ0IHN0cmVhbWluZyBkYXRhIGJ5IHNldHRp
bmcgdGhlIHBsYXkgc3RhdGUgdG8gU0xfUExBWVNUQVRFX1BMQVlJTkcuCi0gIC8vIEZvciBhIHBs
YXllciBvYmplY3QsIHdoZW4gdGhlIG9iamVjdCBpcyBpbiB0aGUgU0xfUExBWVNUQVRFX1BMQVlJ
TkcKLSAgLy8gc3RhdGUsIGFkZGluZyBidWZmZXJzIHdpbGwgaW1wbGljaXRseSBzdGFydCBwbGF5
YmFjay4KLSAgUkVUVVJOX09OX0VSUk9SKCgqcGxheWVyXyktPlNldFBsYXlTdGF0ZShwbGF5ZXJf
LCBTTF9QTEFZU1RBVEVfUExBWUlORyksIC0xKTsKLSAgcGxheWluZ18gPSAoR2V0UGxheVN0YXRl
KCkgPT0gU0xfUExBWVNUQVRFX1BMQVlJTkcpOwotICBSVENfRENIRUNLKHBsYXlpbmdfKTsKLSAg
cmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXllcjo6U3RvcFBsYXlvdXQoKSB7Ci0gIEFM
T0dEKCJTdG9wUGxheW91dCVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENI
RUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoIWluaXRp
YWxpemVkXyB8fCAhcGxheWluZ18pIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICAvLyBTdG9wIHBs
YXlpbmcgYnkgc2V0dGluZyB0aGUgcGxheSBzdGF0ZSB0byBTTF9QTEFZU1RBVEVfU1RPUFBFRC4K
LSAgUkVUVVJOX09OX0VSUk9SKCgqcGxheWVyXyktPlNldFBsYXlTdGF0ZShwbGF5ZXJfLCBTTF9Q
TEFZU1RBVEVfU1RPUFBFRCksIC0xKTsKLSAgLy8gQ2xlYXIgdGhlIGJ1ZmZlciBxdWV1ZSB0byBm
bHVzaCBvdXQgYW55IHJlbWFpbmluZyBkYXRhLgotICBSRVRVUk5fT05fRVJST1IoKCpzaW1wbGVf
YnVmZmVyX3F1ZXVlXyktPkNsZWFyKHNpbXBsZV9idWZmZXJfcXVldWVfKSwgLTEpOwotI2lmIFJU
Q19EQ0hFQ0tfSVNfT04KLSAgLy8gVmVyaWZ5IHRoYXQgdGhlIGJ1ZmZlciBxdWV1ZSBpcyBpbiBm
YWN0IGNsZWFyZWQgYXMgaXQgc2hvdWxkLgotICBTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZVN0
YXRlIGJ1ZmZlcl9xdWV1ZV9zdGF0ZTsKLSAgKCpzaW1wbGVfYnVmZmVyX3F1ZXVlXyktPkdldFN0
YXRlKHNpbXBsZV9idWZmZXJfcXVldWVfLCAmYnVmZmVyX3F1ZXVlX3N0YXRlKTsKLSAgUlRDX0RD
SEVDS19FUSgwdSwgYnVmZmVyX3F1ZXVlX3N0YXRlLmNvdW50KTsKLSAgUlRDX0RDSEVDS19FUSgw
dSwgYnVmZmVyX3F1ZXVlX3N0YXRlLmluZGV4KTsKLSNlbmRpZgotICAvLyBUaGUgbnVtYmVyIG9m
IGxvd2VyIGxhdGVuY3kgYXVkaW8gcGxheWVycyBpcyBsaW1pdGVkLCBoZW5jZSB3ZSBjcmVhdGUg
dGhlCi0gIC8vIGF1ZGlvIHBsYXllciBpbiBTdGFydCgpIGFuZCBkZXN0cm95IGl0IGluIFN0b3Ao
KS4KLSAgRGVzdHJveUF1ZGlvUGxheWVyKCk7Ci0gIHRocmVhZF9jaGVja2VyX29wZW5zbGVzXy5E
ZXRhY2hGcm9tVGhyZWFkKCk7Ci0gIGluaXRpYWxpemVkXyA9IGZhbHNlOwotICBwbGF5aW5nXyA9
IGZhbHNlOwotICByZXR1cm4gMDsKLX0KLQotaW50IE9wZW5TTEVTUGxheWVyOjpTcGVha2VyVm9s
dW1lSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSB7Ci0gIGF2YWlsYWJsZSA9IGZhbHNlOwot
ICByZXR1cm4gMDsKLX0KLQotaW50IE9wZW5TTEVTUGxheWVyOjpNYXhTcGVha2VyVm9sdW1lKHVp
bnQzMl90JiBtYXhWb2x1bWUpIGNvbnN0IHsKLSAgcmV0dXJuIC0xOwotfQotCi1pbnQgT3BlblNM
RVNQbGF5ZXI6Ok1pblNwZWFrZXJWb2x1bWUodWludDMyX3QmIG1pblZvbHVtZSkgY29uc3Qgewot
ICByZXR1cm4gLTE7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXllcjo6U2V0U3BlYWtlclZvbHVtZSh1
aW50MzJfdCB2b2x1bWUpIHsKLSAgcmV0dXJuIC0xOwotfQotCi1pbnQgT3BlblNMRVNQbGF5ZXI6
OlNwZWFrZXJWb2x1bWUodWludDMyX3QmIHZvbHVtZSkgY29uc3QgewotICByZXR1cm4gLTE7Ci19
Ci0KLXZvaWQgT3BlblNMRVNQbGF5ZXI6OkF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlvRGV2aWNlQnVm
ZmVyKiBhdWRpb0J1ZmZlcikgewotICBBTE9HRCgiQXR0YWNoQXVkaW9CdWZmZXIiKTsKLSAgUlRD
X0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgYXVkaW9f
ZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb0J1ZmZlcjsKLSAgY29uc3QgaW50IHNhbXBsZV9yYXRlX2h6
ID0gYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKTsKLSAgQUxPR0QoIlNldFBsYXlvdXRT
YW1wbGVSYXRlKCVkKSIsIHNhbXBsZV9yYXRlX2h6KTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8t
PlNldFBsYXlvdXRTYW1wbGVSYXRlKHNhbXBsZV9yYXRlX2h6KTsKLSAgY29uc3Qgc2l6ZV90IGNo
YW5uZWxzID0gYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKTsKLSAgQUxPR0QoIlNldFBsYXlv
dXRDaGFubmVscyglIiBQUkl1UyAiKSIsIGNoYW5uZWxzKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZl
cl8tPlNldFBsYXlvdXRDaGFubmVscyhjaGFubmVscyk7Ci0gIFJUQ19DSEVDSyhhdWRpb19kZXZp
Y2VfYnVmZmVyXyk7Ci0gIEFsbG9jYXRlRGF0YUJ1ZmZlcnMoKTsKLX0KLQotdm9pZCBPcGVuU0xF
U1BsYXllcjo6QWxsb2NhdGVEYXRhQnVmZmVycygpIHsKLSAgQUxPR0QoIkFsbG9jYXRlRGF0YUJ1
ZmZlcnMiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVh
ZCgpKTsKLSAgUlRDX0RDSEVDSyghc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pOwotICBSVENfQ0hFQ0so
YXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotICAvLyBDcmVhdGUgYSBtb2RpZmllZCBhdWRpbyBidWZm
ZXIgY2xhc3Mgd2hpY2ggYWxsb3dzIHVzIHRvIGFzayBmb3IgYW55IG51bWJlcgotICAvLyBvZiBz
YW1wbGVzIChhbmQgbm90IG9ubHkgbXVsdGlwbGUgb2YgMTBtcykgdG8gbWF0Y2ggdGhlIG5hdGl2
ZSBPcGVuU0wgRVMKLSAgLy8gYnVmZmVyIHNpemUuIFRoZSBuYXRpdmUgYnVmZmVyIHNpemUgY29y
cmVzcG9uZHMgdG8gdGhlCi0gIC8vIFBST1BFUlRZX09VVFBVVF9GUkFNRVNfUEVSX0JVRkZFUiBw
cm9wZXJ0eSB3aGljaCBpcyB0aGUgbnVtYmVyIG9mIGF1ZGlvCi0gIC8vIGZyYW1lcyB0aGF0IHRo
ZSBIQUwgKEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyKSBidWZmZXIgY2FuIGhvbGQuIEl0IGlz
Ci0gIC8vIHJlY29tbWVuZGVkIHRvIGNvbnN0cnVjdCBhdWRpbyBidWZmZXJzIHNvIHRoYXQgdGhl
eSBjb250YWluIGFuIGV4YWN0Ci0gIC8vIG11bHRpcGxlIG9mIHRoaXMgbnVtYmVyLiBJZiBzbywg
Y2FsbGJhY2tzIHdpbGwgb2NjdXIgYXQgcmVndWxhciBpbnRlcnZhbHMsCi0gIC8vIHdoaWNoIHJl
ZHVjZXMgaml0dGVyLgotICBBTE9HRCgibmF0aXZlIGJ1ZmZlciBzaXplOiAlIiBQUkl1UywgYXVk
aW9fcGFyYW1ldGVyc18uR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIEFMT0dEKCJuYXRpdmUgYnVm
ZmVyIHNpemUgaW4gbXM6ICUuMmYiLAotICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5HZXRCdWZm
ZXJTaXplSW5NaWxsaXNlY29uZHMoKSk7Ci0gIGZpbmVfYXVkaW9fYnVmZmVyXy5yZXNldChuZXcg
RmluZUF1ZGlvQnVmZmVyKAotICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8sIGF1ZGlvX3BhcmFt
ZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVyKCksCi0gICAgICBhdWRpb19wYXJhbWV0ZXJzXy5zYW1w
bGVfcmF0ZSgpKSk7Ci0gIC8vIEVhY2ggYnVmZmVyIG11c3QgYmUgb2YgdGhpcyBzaXplIHRvIGF2
b2lkIHVubmVjZXNzYXJ5IG1lbWNweSB3aGlsZSBjYWNoaW5nCi0gIC8vIGRhdGEgYmV0d2VlbiBz
dWNjZXNzaXZlIGNhbGxiYWNrcy4KLSAgY29uc3Qgc2l6ZV90IHJlcXVpcmVkX2J1ZmZlcl9zaXpl
ID0KLSAgICAgIGZpbmVfYXVkaW9fYnVmZmVyXy0+UmVxdWlyZWRQbGF5b3V0QnVmZmVyU2l6ZUJ5
dGVzKCk7Ci0gIEFMT0dEKCJyZXF1aXJlZCBidWZmZXIgc2l6ZTogJSIgUFJJdVMsIHJlcXVpcmVk
X2J1ZmZlcl9zaXplKTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtT2ZPcGVuU0xFU0J1ZmZl
cnM7ICsraSkgewotICAgIGF1ZGlvX2J1ZmZlcnNfW2ldLnJlc2V0KG5ldyBTTGludDhbcmVxdWly
ZWRfYnVmZmVyX3NpemVdKTsKLSAgfQotfQotCi1ib29sIE9wZW5TTEVTUGxheWVyOjpPYnRhaW5F
bmdpbmVJbnRlcmZhY2UoKSB7Ci0gIEFMT0dEKCJPYnRhaW5FbmdpbmVJbnRlcmZhY2UiKTsKLSAg
UlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYg
KGVuZ2luZV8pCi0gICAgcmV0dXJuIHRydWU7Ci0gIC8vIEdldCBhY2Nlc3MgdG8gKG9yIGNyZWF0
ZSBpZiBub3QgYWxyZWFkeSBleGlzdGluZykgdGhlIGdsb2JhbCBPcGVuU0wgRW5naW5lCi0gIC8v
IG9iamVjdC4KLSAgU0xPYmplY3RJdGYgZW5naW5lX29iamVjdCA9IGF1ZGlvX21hbmFnZXJfLT5H
ZXRPcGVuU0xFbmdpbmUoKTsKLSAgaWYgKGVuZ2luZV9vYmplY3QgPT0gbnVsbHB0cikgewotICAg
IEFMT0dFKCJGYWlsZWQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgT3BlblNMIGVuZ2luZSIpOwotICAg
IHJldHVybiBmYWxzZTsKLSAgfQotICAvLyBHZXQgdGhlIFNMIEVuZ2luZSBJbnRlcmZhY2Ugd2hp
Y2ggaXMgaW1wbGljaXQuCi0gIFJFVFVSTl9PTl9FUlJPUigKLSAgICAgICgqZW5naW5lX29iamVj
dCktPkdldEludGVyZmFjZShlbmdpbmVfb2JqZWN0LCBTTF9JSURfRU5HSU5FLCAmZW5naW5lXyks
Ci0gICAgICBmYWxzZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1ib29sIE9wZW5TTEVTUGxheWVy
OjpDcmVhdGVNaXgoKSB7Ci0gIEFMT0dEKCJDcmVhdGVNaXgiKTsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDSyhlbmdpbmVf
KTsKLSAgaWYgKG91dHB1dF9taXhfLkdldCgpKQotICAgIHJldHVybiB0cnVlOwotCi0gIC8vIENy
ZWF0ZSB0aGUgb3VwdXQgbWl4IG9uIHRoZSBlbmdpbmUgb2JqZWN0LiBObyBpbnRlcmZhY2VzIHdp
bGwgYmUgdXNlZC4KLSAgUkVUVVJOX09OX0VSUk9SKCgqZW5naW5lXyktPkNyZWF0ZU91dHB1dE1p
eChlbmdpbmVfLCBvdXRwdXRfbWl4Xy5SZWNlaXZlKCksIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciksCi0gICAgICAgICAg
ICAgICAgICBmYWxzZSk7Ci0gIFJFVFVSTl9PTl9FUlJPUihvdXRwdXRfbWl4Xy0+UmVhbGl6ZShv
dXRwdXRfbWl4Xy5HZXQoKSwgU0xfQk9PTEVBTl9GQUxTRSksCi0gICAgICAgICAgICAgICAgICBm
YWxzZSk7Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIE9wZW5TTEVTUGxheWVyOjpEZXN0cm95
TWl4KCkgewotICBBTE9HRCgiRGVzdHJveU1peCIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoIW91dHB1dF9taXhfLkdldCgpKQot
ICAgIHJldHVybjsKLSAgb3V0cHV0X21peF8uUmVzZXQoKTsKLX0KLQotYm9vbCBPcGVuU0xFU1Bs
YXllcjo6Q3JlYXRlQXVkaW9QbGF5ZXIoKSB7Ci0gIEFMT0dEKCJDcmVhdGVBdWRpb1BsYXllciIp
OwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwot
ICBSVENfRENIRUNLKG91dHB1dF9taXhfLkdldCgpKTsKLSAgaWYgKHBsYXllcl9vYmplY3RfLkdl
dCgpKQotICAgIHJldHVybiB0cnVlOwotICBSVENfRENIRUNLKCFwbGF5ZXJfKTsKLSAgUlRDX0RD
SEVDSyghc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pOwotICBSVENfRENIRUNLKCF2b2x1bWVfKTsKLQot
ICAvLyBzb3VyY2U6IEFuZHJvaWQgU2ltcGxlIEJ1ZmZlciBRdWV1ZSBEYXRhIExvY2F0b3IgaXMg
c291cmNlLgotICBTTERhdGFMb2NhdG9yX0FuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZSBzaW1wbGVf
YnVmZmVyX3F1ZXVlID0gewotICAgICAgU0xfREFUQUxPQ0FUT1JfQU5EUk9JRFNJTVBMRUJVRkZF
UlFVRVVFLAotICAgICAgc3RhdGljX2Nhc3Q8U0x1aW50MzI+KGtOdW1PZk9wZW5TTEVTQnVmZmVy
cyl9OwotICBTTERhdGFTb3VyY2UgYXVkaW9fc291cmNlID0geyZzaW1wbGVfYnVmZmVyX3F1ZXVl
LCAmcGNtX2Zvcm1hdF99OwotCi0gIC8vIHNpbms6IE91dHB1dE1peC1iYXNlZCBkYXRhIGlzIHNp
bmsuCi0gIFNMRGF0YUxvY2F0b3JfT3V0cHV0TWl4IGxvY2F0b3Jfb3V0cHV0X21peCA9IHtTTF9E
QVRBTE9DQVRPUl9PVVRQVVRNSVgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXRfbWl4Xy5HZXQoKX07Ci0gIFNMRGF0YVNpbmsgYXVkaW9fc2lu
ayA9IHsmbG9jYXRvcl9vdXRwdXRfbWl4LCBudWxscHRyfTsKLQotICAvLyBEZWZpbmUgaW50ZXJm
YWNlcyB0aGF0IHdlIGluZGVuZCB0byB1c2UgYW5kIHJlYWxpemUuCi0gIGNvbnN0IFNMSW50ZXJm
YWNlSUQgaW50ZXJmYWNlX2lkc1tdID0gewotICAgICAgU0xfSUlEX0FORFJPSURDT05GSUdVUkFU
SU9OLCBTTF9JSURfQlVGRkVSUVVFVUUsIFNMX0lJRF9WT0xVTUV9OwotICBjb25zdCBTTGJvb2xl
YW4gaW50ZXJmYWNlX3JlcXVpcmVkW10gPSB7Ci0gICAgICBTTF9CT09MRUFOX1RSVUUsIFNMX0JP
T0xFQU5fVFJVRSwgU0xfQk9PTEVBTl9UUlVFfTsKLQotICAvLyBDcmVhdGUgdGhlIGF1ZGlvIHBs
YXllciBvbiB0aGUgZW5naW5lIGludGVyZmFjZS4KLSAgUkVUVVJOX09OX0VSUk9SKAotICAgICAg
KCplbmdpbmVfKS0+Q3JlYXRlQXVkaW9QbGF5ZXIoCi0gICAgICAgICAgZW5naW5lXywgcGxheWVy
X29iamVjdF8uUmVjZWl2ZSgpLCAmYXVkaW9fc291cmNlLCAmYXVkaW9fc2luaywKLSAgICAgICAg
ICBhcnJheXNpemUoaW50ZXJmYWNlX2lkcyksIGludGVyZmFjZV9pZHMsIGludGVyZmFjZV9yZXF1
aXJlZCksCi0gICAgICBmYWxzZSk7Ci0KLSAgLy8gVXNlIHRoZSBBbmRyb2lkIGNvbmZpZ3VyYXRp
b24gaW50ZXJmYWNlIHRvIHNldCBwbGF0Zm9ybS1zcGVjaWZpYwotICAvLyBwYXJhbWV0ZXJzLiBT
aG91bGQgYmUgZG9uZSBiZWZvcmUgcGxheWVyIGlzIHJlYWxpemVkLgotICBTTEFuZHJvaWRDb25m
aWd1cmF0aW9uSXRmIHBsYXllcl9jb25maWc7Ci0gIFJFVFVSTl9PTl9FUlJPUigKLSAgICAgIHBs
YXllcl9vYmplY3RfLT5HZXRJbnRlcmZhY2UocGxheWVyX29iamVjdF8uR2V0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0lJRF9BTkRST0lEQ09ORklHVVJBVElPTiwg
JnBsYXllcl9jb25maWcpLAotICAgICAgZmFsc2UpOwotICAvLyBTZXQgYXVkaW8gcGxheWVyIGNv
bmZpZ3VyYXRpb24gdG8gU0xfQU5EUk9JRF9TVFJFQU1fVk9JQ0Ugd2hpY2gKLSAgLy8gY29ycmVz
cG9uZHMgdG8gYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwuCi0g
IFNMaW50MzIgc3RyZWFtX3R5cGUgPSBTTF9BTkRST0lEX1NUUkVBTV9WT0lDRTsKLSAgUkVUVVJO
X09OX0VSUk9SKAotICAgICAgKCpwbGF5ZXJfY29uZmlnKQotICAgICAgICAgIC0+U2V0Q29uZmln
dXJhdGlvbihwbGF5ZXJfY29uZmlnLCBTTF9BTkRST0lEX0tFWV9TVFJFQU1fVFlQRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnN0cmVhbV90eXBlLCBzaXplb2YoU0xpbnQzMikpLAot
ICAgICAgZmFsc2UpOwotCi0gIC8vIFJlYWxpemUgdGhlIGF1ZGlvIHBsYXllciBvYmplY3QgYWZ0
ZXIgY29uZmlndXJhdGlvbiBoYXMgYmVlbiBzZXQuCi0gIFJFVFVSTl9PTl9FUlJPUigKLSAgICAg
IHBsYXllcl9vYmplY3RfLT5SZWFsaXplKHBsYXllcl9vYmplY3RfLkdldCgpLCBTTF9CT09MRUFO
X0ZBTFNFKSwgZmFsc2UpOwotCi0gIC8vIEdldCB0aGUgU0xQbGF5SXRmIGludGVyZmFjZSBvbiB0
aGUgYXVkaW8gcGxheWVyLgotICBSRVRVUk5fT05fRVJST1IoCi0gICAgICBwbGF5ZXJfb2JqZWN0
Xy0+R2V0SW50ZXJmYWNlKHBsYXllcl9vYmplY3RfLkdldCgpLCBTTF9JSURfUExBWSwgJnBsYXll
cl8pLAotICAgICAgZmFsc2UpOwotCi0gIC8vIEdldCB0aGUgU0xBbmRyb2lkU2ltcGxlQnVmZmVy
UXVldWVJdGYgaW50ZXJmYWNlIG9uIHRoZSBhdWRpbyBwbGF5ZXIuCi0gIFJFVFVSTl9PTl9FUlJP
UigKLSAgICAgIHBsYXllcl9vYmplY3RfLT5HZXRJbnRlcmZhY2UocGxheWVyX29iamVjdF8uR2V0
KCksIFNMX0lJRF9CVUZGRVJRVUVVRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnNpbXBsZV9idWZmZXJfcXVldWVfKSwKLSAgICAgIGZhbHNlKTsKLQotICAvLyBSZWdpc3Rl
ciBjYWxsYmFjayBtZXRob2QgZm9yIHRoZSBBbmRyb2lkIFNpbXBsZSBCdWZmZXIgUXVldWUgaW50
ZXJmYWNlLgotICAvLyBUaGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBuYXRpdmUg
YXVkaW8gbGF5ZXIgbmVlZHMgYXVkaW8gZGF0YS4KLSAgUkVUVVJOX09OX0VSUk9SKCgqc2ltcGxl
X2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAgICAgICAgICAgICAgICAgLT5SZWdpc3RlckNhbGxiYWNr
KHNpbXBsZV9idWZmZXJfcXVldWVfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNrLCB0aGlzKSwKLSAgICAgICAgICAgICAg
ICAgIGZhbHNlKTsKLQotICAvLyBHZXQgdGhlIFNMVm9sdW1lSXRmIGludGVyZmFjZSBvbiB0aGUg
YXVkaW8gcGxheWVyLgotICBSRVRVUk5fT05fRVJST1IocGxheWVyX29iamVjdF8tPkdldEludGVy
ZmFjZShwbGF5ZXJfb2JqZWN0Xy5HZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0xfSUlEX1ZPTFVNRSwgJnZvbHVtZV8pLAotICAgICAgICAgICAg
ICAgICAgZmFsc2UpOwotCi0gIC8vIFRPRE8oaGVucmlrYSk6IG1pZ2h0IG5vdCBiZSByZXF1aXJl
ZCB0byBzZXQgdm9sdW1lIHRvIG1heCBoZXJlIHNpbmNlIGl0Ci0gIC8vIHNlZW1zIHRvIGJlIGRl
ZmF1bHQgb24gbW9zdCBkZXZpY2VzLiBNaWdodCBiZSByZXF1aXJlZCBmb3IgdW5pdCB0ZXN0cy4K
LSAgLy8gUkVUVVJOX09OX0VSUk9SKCgqdm9sdW1lXyktPlNldFZvbHVtZUxldmVsKHZvbHVtZV8s
IDApLCBmYWxzZSk7Ci0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgT3BlblNMRVNQbGF5ZXI6
OkRlc3Ryb3lBdWRpb1BsYXllcigpIHsKLSAgQUxPR0QoIkRlc3Ryb3lBdWRpb1BsYXllciIpOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBp
ZiAoIXBsYXllcl9vYmplY3RfLkdldCgpKQotICAgIHJldHVybjsKLSAgKCpzaW1wbGVfYnVmZmVy
X3F1ZXVlXykKLSAgICAgIC0+UmVnaXN0ZXJDYWxsYmFjayhzaW1wbGVfYnVmZmVyX3F1ZXVlXywg
bnVsbHB0ciwgbnVsbHB0cik7Ci0gIHBsYXllcl9vYmplY3RfLlJlc2V0KCk7Ci0gIHBsYXllcl8g
PSBudWxscHRyOwotICBzaW1wbGVfYnVmZmVyX3F1ZXVlXyA9IG51bGxwdHI7Ci0gIHZvbHVtZV8g
PSBudWxscHRyOwotfQotCi0vLyBzdGF0aWMKLXZvaWQgT3BlblNMRVNQbGF5ZXI6OlNpbXBsZUJ1
ZmZlclF1ZXVlQ2FsbGJhY2soCi0gICAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVJdGYgY2Fs
bGVyLAotICAgIHZvaWQqIGNvbnRleHQpIHsKLSAgT3BlblNMRVNQbGF5ZXIqIHN0cmVhbSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8T3BlblNMRVNQbGF5ZXIqPihjb250ZXh0KTsKLSAgc3RyZWFtLT5GaWxs
QnVmZmVyUXVldWUoKTsKLX0KLQotdm9pZCBPcGVuU0xFU1BsYXllcjo6RmlsbEJ1ZmZlclF1ZXVl
KCkgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyX29wZW5zbGVzXy5DYWxsZWRPblZhbGlk
VGhyZWFkKCkpOwotICBTTHVpbnQzMiBzdGF0ZSA9IEdldFBsYXlTdGF0ZSgpOwotICBpZiAoc3Rh
dGUgIT0gU0xfUExBWVNUQVRFX1BMQVlJTkcpIHsKLSAgICBBTE9HVygiQnVmZmVyIGNhbGxiYWNr
IGluIG5vbi1wbGF5aW5nIHN0YXRlISIpOwotICAgIHJldHVybjsKLSAgfQotICBFbnF1ZXVlUGxh
eW91dERhdGEoZmFsc2UpOwotfQotCi12b2lkIE9wZW5TTEVTUGxheWVyOjpFbnF1ZXVlUGxheW91
dERhdGEoYm9vbCBzaWxlbmNlKSB7Ci0gIC8vIENoZWNrIGRlbHRhIHRpbWUgYmV0d2VlbiB0d28g
c3VjY2Vzc2l2ZSBjYWxsYmFja3MgYW5kIHByb3ZpZGUgYSB3YXJuaW5nCi0gIC8vIGlmIGl0IGJl
Y29tZXMgdmVyeSBsYXJnZS4KLSAgLy8gVE9ETyhoZW5yaWthKTogdXNpbmcgMTUwbXMgYXMgdXBw
ZXIgbGltaXQgYnV0IHRoaXMgdmFsdWUgaXMgcmF0aGVyIHJhbmRvbS4KLSAgY29uc3QgdWludDMy
X3QgY3VycmVudF90aW1lID0gcnRjOjpUaW1lKCk7Ci0gIGNvbnN0IHVpbnQzMl90IGRpZmYgPSBj
dXJyZW50X3RpbWUgLSBsYXN0X3BsYXlfdGltZV87Ci0gIGlmIChkaWZmID4gMTUwKSB7Ci0gICAg
QUxPR1coIkJhZCBPcGVuU0wgRVMgcGxheW91dCB0aW1pbmcsIGRUPSV1IFttc10iLCBkaWZmKTsK
LSAgfQotICBsYXN0X3BsYXlfdGltZV8gPSBjdXJyZW50X3RpbWU7Ci0gIFNMaW50OCogYXVkaW9f
cHRyID0gYXVkaW9fYnVmZmVyc19bYnVmZmVyX2luZGV4X10uZ2V0KCk7Ci0gIGlmIChzaWxlbmNl
KSB7Ci0gICAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKLSAgICAvLyBBdm9pZCBhcXVpcmluZyByZWFsIGF1ZGlvIGRhdGEgZnJvbSBXZWJSVEMgYW5k
IGZpbGwgdGhlIGJ1ZmZlciB3aXRoCi0gICAgLy8gemVyb3MgaW5zdGVhZC4gVXNlZCB0byBwcmlt
ZSB0aGUgYnVmZmVyIHdpdGggc2lsZW5jZSBhbmQgdG8gYXZvaWQgYXNraW5nCi0gICAgLy8gZm9y
IGF1ZGlvIGRhdGEgZnJvbSB0d28gZGlmZmVyZW50IHRocmVhZHMuCi0gICAgbWVtc2V0KGF1ZGlv
X3B0ciwgMCwgYXVkaW9fcGFyYW1ldGVyc18uR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIH0gZWxz
ZSB7Ci0gICAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl9vcGVuc2xlc18uQ2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKLSAgICAvLyBSZWFkIGF1ZGlvIGRhdGEgZnJvbSB0aGUgV2ViUlRDIHNvdXJj
ZSB1c2luZyB0aGUgRmluZUF1ZGlvQnVmZmVyIG9iamVjdAotICAgIC8vIHRvIGFkanVzdCBmb3Ig
ZGlmZmVyZW5jZXMgaW4gYnVmZmVyIHNpemUgYmV0d2VlbiBXZWJSVEMgKDEwbXMpIGFuZCBuYXRp
dmUKLSAgICAvLyBPcGVuU0wgRVMuCi0gICAgZmluZV9hdWRpb19idWZmZXJfLT5HZXRQbGF5b3V0
RGF0YShhdWRpb19wdHIpOwotICB9Ci0gIC8vIEVucXVldWUgdGhlIGRlY29kZWQgYXVkaW8gYnVm
ZmVyIGZvciBwbGF5YmFjay4KLSAgU0xyZXN1bHQgZXJyID0gKCpzaW1wbGVfYnVmZmVyX3F1ZXVl
XykKLSAgICAgICAgICAgICAgICAgICAgIC0+RW5xdWV1ZShzaW1wbGVfYnVmZmVyX3F1ZXVlXywg
YXVkaW9fcHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhcmFtZXRl
cnNfLkdldEJ5dGVzUGVyQnVmZmVyKCkpOwotICBpZiAoU0xfUkVTVUxUX1NVQ0NFU1MgIT0gZXJy
KSB7Ci0gICAgQUxPR0UoIkVucXVldWUgZmFpbGVkOiAlZCIsIGVycik7Ci0gIH0KLSAgYnVmZmVy
X2luZGV4XyA9IChidWZmZXJfaW5kZXhfICsgMSkgJSBrTnVtT2ZPcGVuU0xFU0J1ZmZlcnM7Ci19
Ci0KLVNMdWludDMyIE9wZW5TTEVTUGxheWVyOjpHZXRQbGF5U3RhdGUoKSBjb25zdCB7Ci0gIFJU
Q19EQ0hFQ0socGxheWVyXyk7Ci0gIFNMdWludDMyIHN0YXRlOwotICBTTHJlc3VsdCBlcnIgPSAo
KnBsYXllcl8pLT5HZXRQbGF5U3RhdGUocGxheWVyXywgJnN0YXRlKTsKLSAgaWYgKFNMX1JFU1VM
VF9TVUNDRVNTICE9IGVycikgewotICAgIEFMT0dFKCJHZXRQbGF5U3RhdGUgZmFpbGVkOiAlZCIs
IGVycik7Ci0gIH0KLSAgcmV0dXJuIHN0YXRlOwotfQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxOTYgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVESU9f
REVWSUNFX0FORFJPSURfT1BFTlNMRVNfUExBWUVSX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVT
X0FVRElPX0RFVklDRV9BTkRST0lEX09QRU5TTEVTX1BMQVlFUl9IXwotCi0jaW5jbHVkZSA8U0xF
Uy9PcGVuU0xFUy5oPgotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZC5oPgotI2luY2x1
ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZENvbmZpZ3VyYXRpb24uaD4KLQotI2luY2x1ZGUgIndl
YnJ0Yy9iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX2NvbW1vbi5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9pbmNsdWRlL2F1ZGlvX2RldmljZV9kZWZp
bmVzLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX2Rldmlj
ZV9nZW5lcmljLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hl
bHBlcnNfYW5kcm9pZC5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotY2xhc3MgRmluZUF1ZGlv
QnVmZmVyOwotCi0vLyBJbXBsZW1lbnRzIDE2LWJpdCBtb25vIFBDTSBhdWRpbyBvdXRwdXQgc3Vw
cG9ydCBmb3IgQW5kcm9pZCB1c2luZyB0aGUKLS8vIEMgYmFzZWQgT3BlblNMIEVTIEFQSS4gTm8g
Y2FsbHMgZnJvbSBDL0MrKyB0byBKYXZhIHVzaW5nIEpOSSBpcyBkb25lLgotLy8KLS8vIEFuIGlu
c3RhbmNlIG11c3QgYmUgY3JlYXRlZCBhbmQgZGVzdHJveWVkIG9uIG9uZSBhbmQgdGhlIHNhbWUg
dGhyZWFkLgotLy8gQWxsIHB1YmxpYyBtZXRob2RzIG11c3QgYWxzbyBiZSBjYWxsZWQgb24gdGhl
IHNhbWUgdGhyZWFkLiBBIHRocmVhZCBjaGVja2VyCi0vLyB3aWxsIFJUQ19EQ0hFQ0sgaWYgYW55
IG1ldGhvZCBpcyBjYWxsZWQgb24gYW4gaW52YWxpZCB0aHJlYWQuIERlY29kZWQgYXVkaW8KLS8v
IGJ1ZmZlcnMgYXJlIHJlcXVlc3RlZCBvbiBhIGRlZGljYXRlZCBpbnRlcm5hbCB0aHJlYWQgbWFu
YWdlZCBieSB0aGUgT3BlblNMCi0vLyBFUyBsYXllci4KLS8vCi0vLyBUaGUgZXhpc3RpbmcgZGVz
aWduIGZvcmNlcyB0aGUgdXNlciB0byBjYWxsIEluaXRQbGF5b3V0KCkgYWZ0ZXIgU3RvcGxheW91
dCgpCi0vLyB0byBiZSBhYmxlIHRvIGNhbGwgU3RhcnRQbGF5b3V0KCkgYWdhaW4uIFRoaXMgaXMg
aW5saW5lIHdpdGggaG93IHRoZSBKYXZhLQotLy8gYmFzZWQgaW1wbGVtZW50YXRpb24gd29ya3Mu
Ci0vLwotLy8gT3BlblNMIEVTIGlzIGEgbmF0aXZlIEMgQVBJIHdoaWNoIGhhdmUgbm8gRGFsdmlr
LXJlbGF0ZWQgb3ZlcmhlYWQgc3VjaCBhcwotLy8gZ2FyYmFnZSBjb2xsZWN0aW9uIHBhdXNlcyBh
bmQgaXQgc3VwcG9ydHMgcmVkdWNlZCBhdWRpbyBvdXRwdXQgbGF0ZW5jeS4KLS8vIElmIHRoZSBk
ZXZpY2UgZG9lc24ndCBjbGFpbSB0aGlzIGZlYXR1cmUgYnV0IHN1cHBvcnRzIEFQSSBsZXZlbCA5
IChBbmRyb2lkCi0vLyBwbGF0Zm9ybSB2ZXJzaW9uIDIuMykgb3IgbGF0ZXIsIHRoZW4gd2UgY2Fu
IHN0aWxsIHVzZSB0aGUgT3BlblNMIEVTIEFQSXMgYnV0Ci0vLyB0aGUgb3V0cHV0IGxhdGVuY3kg
bWF5IGJlIGhpZ2hlci4KLWNsYXNzIE9wZW5TTEVTUGxheWVyIHsKLSBwdWJsaWM6Ci0gIC8vIEJl
Z2lubmluZyB3aXRoIEFQSSBsZXZlbCAxNyAoQW5kcm9pZCA0LjIpLCBhIGJ1ZmZlciBjb3VudCBv
ZiAyIG9yIG1vcmUgaXMKLSAgLy8gcmVxdWlyZWQgZm9yIGxvd2VyIGxhdGVuY3kuIEJlZ2lubmlu
ZyB3aXRoIEFQSSBsZXZlbCAxOCAoQW5kcm9pZCA0LjMpLCBhCi0gIC8vIGJ1ZmZlciBjb3VudCBv
ZiAxIGlzIHN1ZmZpY2llbnQgZm9yIGxvd2VyIGxhdGVuY3kuIEluIGFkZGl0aW9uLCB0aGUgYnVm
ZmVyCi0gIC8vIHNpemUgYW5kIHNhbXBsZSByYXRlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRo
ZSBkZXZpY2UncyBuYXRpdmUgb3V0cHV0Ci0gIC8vIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWQgdmlh
IHRoZSBhdWRpbyBtYW5hZ2VyIGF0IGNvbnN0cnVjdGlvbi4KLSAgLy8gVE9ETyhoZW5yaWthKTog
cGVyaGFwcyBzZXQgdGhpcyB2YWx1ZSBkeW5hbWljYWxseSBiYXNlZCBvbiBPUyB2ZXJzaW9uLgot
ICBzdGF0aWMgY29uc3QgaW50IGtOdW1PZk9wZW5TTEVTQnVmZmVycyA9IDI7Ci0KLSAgZXhwbGlj
aXQgT3BlblNMRVNQbGF5ZXIoQXVkaW9NYW5hZ2VyKiBhdWRpb19tYW5hZ2VyKTsKLSAgfk9wZW5T
TEVTUGxheWVyKCk7Ci0KLSAgaW50IEluaXQoKTsKLSAgaW50IFRlcm1pbmF0ZSgpOwotCi0gIGlu
dCBJbml0UGxheW91dCgpOwotICBib29sIFBsYXlvdXRJc0luaXRpYWxpemVkKCkgY29uc3QgeyBy
ZXR1cm4gaW5pdGlhbGl6ZWRfOyB9Ci0KLSAgaW50IFN0YXJ0UGxheW91dCgpOwotICBpbnQgU3Rv
cFBsYXlvdXQoKTsKLSAgYm9vbCBQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gcGxheWluZ187IH0K
LQotICBpbnQgU3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSk7Ci0gIGlu
dCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90IHZvbHVtZSk7Ci0gIGludCBTcGVha2VyVm9sdW1l
KHVpbnQzMl90JiB2b2x1bWUpIGNvbnN0OwotICBpbnQgTWF4U3BlYWtlclZvbHVtZSh1aW50MzJf
dCYgbWF4Vm9sdW1lKSBjb25zdDsKLSAgaW50IE1pblNwZWFrZXJWb2x1bWUodWludDMyX3QmIG1p
blZvbHVtZSkgY29uc3Q7Ci0KLSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1
ZmZlciogYXVkaW9CdWZmZXIpOwotCi0gcHJpdmF0ZToKLSAgLy8gVGhlc2UgY2FsbGJhY2sgbWV0
aG9kcyBhcmUgY2FsbGVkIHdoZW4gZGF0YSBpcyByZXF1aXJlZCBmb3IgcGxheW91dC4KLSAgLy8g
VGhleSBhcmUgYm90aCBjYWxsZWQgZnJvbSBhbiBpbnRlcm5hbCAiT3BlblNMIEVTIHRocmVhZCIg
d2hpY2ggaXMgbm90Ci0gIC8vIGF0dGFjaGVkIHRvIHRoZSBEYWx2aWsgVk0uCi0gIHN0YXRpYyB2
b2lkIFNpbXBsZUJ1ZmZlclF1ZXVlQ2FsbGJhY2soU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVJ
dGYgY2FsbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQq
IGNvbnRleHQpOwotICB2b2lkIEZpbGxCdWZmZXJRdWV1ZSgpOwotICAvLyBSZWFkcyBhdWRpbyBk
YXRhIGluIFBDTSBmb3JtYXQgdXNpbmcgdGhlIEF1ZGlvRGV2aWNlQnVmZmVyLgotICAvLyBDYW4g
YmUgY2FsbGVkIGJvdGggb24gdGhlIG1haW4gdGhyZWFkIChkdXJpbmcgU3RhcnQoKSkgYW5kIGZy
b20gdGhlCi0gIC8vIGludGVybmFsIGF1ZGlvIHRocmVhZCB3aGlsZSBvdXRwdXQgc3RyZWFtaW5n
IGlzIGFjdGl2ZS4KLSAgLy8gSWYgdGhlIHxzaWxlbmNlfCBmbGFnIGlzIHNldCwgdGhlIGF1ZGlv
IGlzIGZpbGxlZCB3aXRoIHplcm9zIGluc3RlYWQgb2YKLSAgLy8gYXNraW5nIHRoZSBXZWJSVEMg
bGF5ZXIgZm9yIHJlYWwgYXVkaW8gZGF0YS4gVGhpcyBwcm9jZWR1cmUgaXMgYWxzbyBrbm93bgot
ICAvLyBhcyBhdWRpbyBwcmltaW5nLgotICB2b2lkIEVucXVldWVQbGF5b3V0RGF0YShib29sIHNp
bGVuY2UpOwotCi0gIC8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYXVkaW8gYnVmZmVycyB3aGljaCB3
aWxsIGJlIHVzZWQgdG8gcmVuZGVyIGF1ZGlvCi0gIC8vIHZpYSB0aGUgU0xBbmRyb2lkU2ltcGxl
QnVmZmVyUXVldWVJdGYgaW50ZXJmYWNlLgotICB2b2lkIEFsbG9jYXRlRGF0YUJ1ZmZlcnMoKTsK
LQotICAvLyBPYnRhaW5lcyB0aGUgU0wgRW5naW5lIEludGVyZmFjZSBmcm9tIHRoZSBleGlzdGlu
ZyBnbG9iYWwgRW5naW5lIG9iamVjdC4KLSAgLy8gVGhlIGludGVyZmFjZSBleHBvc2VzIGNyZWF0
aW9uIG1ldGhvZHMgb2YgYWxsIHRoZSBPcGVuU0wgRVMgb2JqZWN0IHR5cGVzLgotICAvLyBUaGlz
IG1ldGhvZCBkZWZpbmVzIHRoZSB8ZW5naW5lX3wgbWVtYmVyIHZhcmlhYmxlLgotICBib29sIE9i
dGFpbkVuZ2luZUludGVyZmFjZSgpOwotCi0gIC8vIENyZWF0ZXMvZGVzdHJveXMgdGhlIG91dHB1
dCBtaXggb2JqZWN0LgotICBib29sIENyZWF0ZU1peCgpOwotICB2b2lkIERlc3Ryb3lNaXgoKTsK
LQotICAvLyBDcmVhdGVzL2Rlc3Ryb3lzIHRoZSBhdWRpbyBwbGF5ZXIgYW5kIHRoZSBzaW1wbGUt
YnVmZmVyIG9iamVjdC4KLSAgLy8gQWxzbyBjcmVhdGVzIHRoZSB2b2x1bWUgb2JqZWN0LgotICBi
b29sIENyZWF0ZUF1ZGlvUGxheWVyKCk7Ci0gIHZvaWQgRGVzdHJveUF1ZGlvUGxheWVyKCk7Ci0K
LSAgU0x1aW50MzIgR2V0UGxheVN0YXRlKCkgY29uc3Q7Ci0KLSAgLy8gRW5zdXJlcyB0aGF0IG1l
dGhvZHMgYXJlIGNhbGxlZCBmcm9tIHRoZSBzYW1lIHRocmVhZCBhcyB0aGlzIG9iamVjdCBpcwot
ICAvLyBjcmVhdGVkIG9uLgotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwot
Ci0gIC8vIFN0b3JlcyB0aHJlYWQgSUQgaW4gZmlyc3QgY2FsbCB0byBTaW1wbGVCdWZmZXJRdWV1
ZUNhbGxiYWNrKCkgZnJvbSBpbnRlcm5hbAotICAvLyBub24tYXBwbGljYXRpb24gdGhyZWFkIHdo
aWNoIGlzIG5vdCBhdHRhY2hlZCB0byB0aGUgRGFsdmlrIEpWTS4KLSAgLy8gRGV0YWNoZWQgZHVy
aW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRo
cmVhZF9jaGVja2VyX29wZW5zbGVzXzsKLQotICAvLyBSYXcgcG9pbnRlciB0byB0aGUgYXVkaW8g
bWFuYWdlciBpbmplY3RlZCBhdCBjb25zdHJ1Y3Rpb24uIFVzZWQgdG8gY2FjaGUKLSAgLy8gYXVk
aW8gcGFyYW1ldGVycyBhbmQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgU0wgZW5naW5lIG9iamVjdCBu
ZWVkZWQgYnkgdGhlCi0gIC8vIE9idGFpbkVuZ2luZUludGVyZmFjZSgpIG1ldGhvZC4gVGhlIGF1
ZGlvIG1hbmFnZXIgb3V0bGl2ZXMgYW55IGluc3RhbmNlIG9mCi0gIC8vIHRoaXMgY2xhc3MuCi0g
IEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcl87Ci0KLSAgLy8gQ29udGFpbnMgYXVkaW8gcGFy
YW1ldGVycyBwcm92aWRlZCB0byB0aGlzIGNsYXNzIGF0IGNvbnN0cnVjdGlvbiBieSB0aGUKLSAg
Ly8gQXVkaW9NYW5hZ2VyLgotICBjb25zdCBBdWRpb1BhcmFtZXRlcnMgYXVkaW9fcGFyYW1ldGVy
c187Ci0KLSAgLy8gUmF3IHBvaW50ZXIgaGFuZGxlIHByb3ZpZGVkIHRvIHVzIGluIEF0dGFjaEF1
ZGlvQnVmZmVyKCkuIE93bmVkIGJ5IHRoZQotICAvLyBBdWRpb0RldmljZU1vZHVsZUltcGwgY2xh
c3MgYW5kIGNhbGxlZCBieSBBdWRpb0RldmljZU1vZHVsZTo6Q3JlYXRlKCkuCi0gIEF1ZGlvRGV2
aWNlQnVmZmVyKiBhdWRpb19kZXZpY2VfYnVmZmVyXzsKLQotICBib29sIGluaXRpYWxpemVkXzsK
LSAgYm9vbCBwbGF5aW5nXzsKLQotICAvLyBQQ00tdHlwZSBmb3JtYXQgZGVmaW5pdGlvbi4KLSAg
Ly8gVE9ETyhoZW5yaWthKTogYWRkIHN1cHBvcnQgZm9yIFNMQW5kcm9pZERhdGFGb3JtYXRfUENN
X0VYIChhbmRyb2lkLTIxKSBpZgotICAvLyAzMi1iaXQgZmxvYXQgcmVwcmVzZW50YXRpb24gaXMg
bmVlZGVkLgotICBTTERhdGFGb3JtYXRfUENNIHBjbV9mb3JtYXRfOwotCi0gIC8vIFF1ZXVlIG9m
IGF1ZGlvIGJ1ZmZlcnMgdG8gYmUgdXNlZCBieSB0aGUgcGxheWVyIG9iamVjdCBmb3IgcmVuZGVy
aW5nCi0gIC8vIGF1ZGlvLiBUaGV5IHdpbGwgYmUgdXNlZCBpbiBhIFJvdW5kLXJvYmluIHdheSBh
bmQgdGhlIHNpemUgb2YgZWFjaCBidWZmZXIKLSAgLy8gaXMgZ2l2ZW4gYnkgRmluZUF1ZGlvQnVm
ZmVyOjpSZXF1aXJlZEJ1ZmZlclNpemVCeXRlcygpLgotICBzdGQ6OnVuaXF1ZV9wdHI8U0xpbnQ4
W10+IGF1ZGlvX2J1ZmZlcnNfW2tOdW1PZk9wZW5TTEVTQnVmZmVyc107Ci0KLSAgLy8gRmluZUF1
ZGlvQnVmZmVyIHRha2VzIGFuIEF1ZGlvRGV2aWNlQnVmZmVyIHdoaWNoIGRlbGl2ZXJzIGF1ZGlv
IGRhdGEKLSAgLy8gaW4gY2h1bmtzIG9mIDEwbXMuIEl0IHRoZW4gYWxsb3dzIGZvciB0aGlzIGRh
dGEgdG8gYmUgcHVsbGVkIGluCi0gIC8vIGEgZmluZXIgb3IgY29hcnNlciBncmFudWxhcml0eS4g
SS5lLiBpbnRlcmFjdGluZyB3aXRoIHRoaXMgY2xhc3MgaW5zdGVhZAotICAvLyBvZiBkaXJlY3Rs
eSB3aXRoIHRoZSBBdWRpb0RldmljZUJ1ZmZlciBvbmUgY2FuIGFzayBmb3IgYW55IG51bWJlciBv
ZgotICAvLyBhdWRpbyBkYXRhIHNhbXBsZXMuCi0gIC8vIEV4YW1wbGU6IG5hdGl2ZSBidWZmZXIg
c2l6ZSBjYW4gYmUgMTkyIGF1ZGlvIGZyYW1lcyBhdCA0OGtIeiBzYW1wbGUgcmF0ZS4KLSAgLy8g
V2ViUlRDIHdpbGwgcHJvdmlkZSA0ODAgYXVkaW8gZnJhbWVzIHBlciAxMG1zIGJ1dCBPcGVuU0wg
RVMgYXNrcyBmb3IgMTkyCi0gIC8vIGluIGVhY2ggY2FsbGJhY2sgKG9uZSBldmVyeSA0dGggbXMp
LiBUaGlzIGNsYXNzIGNhbiB0aGVuIGFzayBmb3IgMTkyIGFuZAotICAvLyB0aGUgRmluZUF1ZGlv
QnVmZmVyIHdpbGwgYXNrIFdlYlJUQyBmb3IgbmV3IGRhdGEgYXBwcm94aW1hdGVseSBvbmx5IGV2
ZXJ5Ci0gIC8vIHNlY29uZCBjYWxsYmFjayBhbmQgYWxzbyBjYWNoZSBub24tdXRpbGl6ZWQgYXVk
aW8uCi0gIHN0ZDo6dW5pcXVlX3B0cjxGaW5lQXVkaW9CdWZmZXI+IGZpbmVfYXVkaW9fYnVmZmVy
XzsKLQotICAvLyBLZWVwcyB0cmFjayBvZiBhY3RpdmUgYXVkaW8gYnVmZmVyICduJyBpbiB0aGUg
YXVkaW9fYnVmZmVyc19bbl0gcXVldWUuCi0gIC8vIEV4YW1wbGUgKGtOdW1PZk9wZW5TTEVTQnVm
ZmVycyA9IDIpOiBjb3VudHMgMCwgMSwgMCwgMSwgLi4uCi0gIGludCBidWZmZXJfaW5kZXhfOwot
Ci0gIC8vIFRoaXMgaW50ZXJmYWNlIGV4cG9zZXMgY3JlYXRpb24gbWV0aG9kcyBmb3IgYWxsIHRo
ZSBPcGVuU0wgRVMgb2JqZWN0IHR5cGVzLgotICAvLyBJdCBpcyB0aGUgT3BlblNMIEVTIEFQSSBl
bnRyeSBwb2ludC4KLSAgU0xFbmdpbmVJdGYgZW5naW5lXzsKLQotICAvLyBPdXRwdXQgbWl4IG9i
amVjdCB0byBiZSB1c2VkIGJ5IHRoZSBwbGF5ZXIgb2JqZWN0LgotICB3ZWJydGM6OlNjb3BlZFNM
T2JqZWN0SXRmIG91dHB1dF9taXhfOwotCi0gIC8vIFRoZSBhdWRpbyBwbGF5ZXIgbWVkaWEgb2Jq
ZWN0IHBsYXlzIG91dCBhdWRpbyB0byB0aGUgc3BlYWtlcnMuIEl0IGFsc28KLSAgLy8gc3VwcG9y
dHMgdm9sdW1lIGNvbnRyb2wuCi0gIHdlYnJ0Yzo6U2NvcGVkU0xPYmplY3RJdGYgcGxheWVyX29i
amVjdF87Ci0KLSAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkIG9uIHRoZSBhdWRpbyBw
bGF5ZXIgYW5kIGl0IGNvbnRyb2xzIHRoZSBzdGF0ZQotICAvLyBvZiB0aGUgYXVkaW8gcGxheWVy
LgotICBTTFBsYXlJdGYgcGxheWVyXzsKLQotICAvLyBUaGUgQW5kcm9pZCBTaW1wbGUgQnVmZmVy
IFF1ZXVlIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQgb24gdGhlIGF1ZGlvIHBsYXllcgotICAvLyBh
bmQgaXQgcHJvdmlkZXMgbWV0aG9kcyB0byBzZW5kIGF1ZGlvIGRhdGEgZnJvbSB0aGUgc291cmNl
IHRvIHRoZSBhdWRpbwotICAvLyBwbGF5ZXIgZm9yIHJlbmRlcmluZy4KLSAgU0xBbmRyb2lkU2lt
cGxlQnVmZmVyUXVldWVJdGYgc2ltcGxlX2J1ZmZlcl9xdWV1ZV87Ci0KLSAgLy8gVGhpcyBpbnRl
cmZhY2UgZXhwb3NlcyBjb250cm9scyBmb3IgbWFuaXB1bGF0aW5nIHRoZSBvYmplY3TigJlzIGF1
ZGlvIHZvbHVtZQotICAvLyBwcm9wZXJ0aWVzLiBUaGlzIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQg
b24gdGhlIEF1ZGlvIFBsYXllciBvYmplY3QuCi0gIFNMVm9sdW1lSXRmIHZvbHVtZV87Ci0KLSAg
Ly8gTGFzdCB0aW1lIHRoZSBPcGVuU0wgRVMgbGF5ZXIgYXNrZWQgZm9yIGF1ZGlvIGRhdGEgdG8g
cGxheSBvdXQuCi0gIHVpbnQzMl90IGxhc3RfcGxheV90aW1lXzsKLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5E
Uk9JRF9PUEVOU0xFU19QTEFZRVJfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfcmVj
b3JkZXIuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19yZWNvcmRlci5j
YwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19yZWNvcmRlci5j
Ywkobm9uZXhpc3RlbnQpCkBAIC0xLDQyNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykg
MjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVz
X3JlY29yZGVyLmgiCi0KLSNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgotCi0jaW5jbHVkZSAid2Vi
cnRjL2Jhc2UvYXJyYXlzaXplLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0j
aW5jbHVkZSAid2VicnRjL2Jhc2UvZm9ybWF0X21hY3Jvcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9i
YXNlL3RpbWV1dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvZmluZV9hdWRpb19idWZmZXIuaCIKLQotI2RlZmluZSBUQUcgIk9wZW5TTEVT
UmVjb3JkZXIiCi0jZGVmaW5lIEFMT0dWKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lE
X0xPR19WRVJCT1NFLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HRCguLi4pIF9fYW5k
cm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVCVUcsIFRBRywgX19WQV9BUkdTX18pCi0jZGVm
aW5lIEFMT0dFKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgVEFH
LCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR1coLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFO
RFJPSURfTE9HX1dBUk4sIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dJKC4uLikgX19h
bmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCBUQUcsIF9fVkFfQVJHU19fKQotCi0j
ZGVmaW5lIExPR19PTl9FUlJPUihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIFtdKFNMcmVzdWx0IGVycikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgaWYgKGVyciAhPSBTTF9SRVNVTFRfU1VDQ0VTUykgeyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICBBTE9HRSgiJXM6JWQgJXMgZmFpbGVkOiAlcyIsIF9fRklM
RV9fLCBfX0xJTkVfXywgI29wLCBcCi0gICAgICAgICAgICBHZXRTTEVycm9yU3RyaW5nKGVycikp
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gdHJ1ZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJuIGZhbHNl
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIH0ob3ApCi0K
LW5hbWVzcGFjZSB3ZWJydGMgewotCi1PcGVuU0xFU1JlY29yZGVyOjpPcGVuU0xFU1JlY29yZGVy
KEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcikKLSAgICA6IGF1ZGlvX21hbmFnZXJfKGF1ZGlv
X21hbmFnZXIpLAotICAgICAgYXVkaW9fcGFyYW1ldGVyc18oYXVkaW9fbWFuYWdlci0+R2V0UmVj
b3JkQXVkaW9QYXJhbWV0ZXJzKCkpLAotICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8obnVsbHB0
ciksCi0gICAgICBpbml0aWFsaXplZF8oZmFsc2UpLAotICAgICAgcmVjb3JkaW5nXyhmYWxzZSks
Ci0gICAgICBlbmdpbmVfKG51bGxwdHIpLAotICAgICAgcmVjb3JkZXJfKG51bGxwdHIpLAotICAg
ICAgc2ltcGxlX2J1ZmZlcl9xdWV1ZV8obnVsbHB0ciksCi0gICAgICBidWZmZXJfaW5kZXhfKDAp
LAotICAgICAgbGFzdF9yZWNfdGltZV8oMCkgewotICBBTE9HRCgiY3RvciVzIiwgR2V0VGhyZWFk
SW5mbygpLmNfc3RyKCkpOwotICAvLyBEZXRhY2ggZnJvbSB0aGlzIHRocmVhZCBzaW5jZSB3ZSB3
YW50IHRvIHVzZSB0aGUgY2hlY2tlciB0byB2ZXJpZnkgY2FsbHMKLSAgLy8gZnJvbSB0aGUgaW50
ZXJuYWwgIGF1ZGlvIHRocmVhZC4KLSAgdGhyZWFkX2NoZWNrZXJfb3BlbnNsZXNfLkRldGFjaEZy
b21UaHJlYWQoKTsKLSAgLy8gVXNlIG5hdGl2ZSBhdWRpbyBvdXRwdXQgcGFyYW1ldGVycyBwcm92
aWRlZCBieSB0aGUgYXVkaW8gbWFuYWdlciBhbmQKLSAgLy8gZGVmaW5lIHRoZSBQQ00gZm9ybWF0
IHN0cnVjdHVyZS4KLSAgcGNtX2Zvcm1hdF8gPSBDcmVhdGVQQ01Db25maWd1cmF0aW9uKGF1ZGlv
X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uYml0c19wZXJfc2FtcGxl
KCkpOwotfQotCi1PcGVuU0xFU1JlY29yZGVyOjp+T3BlblNMRVNSZWNvcmRlcigpIHsKLSAgQUxP
R0QoImR0b3IlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJl
YWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgVGVybWluYXRlKCk7Ci0gIERl
c3Ryb3lBdWRpb1JlY29yZGVyKCk7Ci0gIGVuZ2luZV8gPSBudWxscHRyOwotICBSVENfRENIRUNL
KCFlbmdpbmVfKTsKLSAgUlRDX0RDSEVDSyghcmVjb3JkZXJfKTsKLSAgUlRDX0RDSEVDSyghc2lt
cGxlX2J1ZmZlcl9xdWV1ZV8pOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6SW5pdCgpIHsK
LSAgQUxPR0QoIkluaXQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVD
Syh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIDA7Ci19
Ci0KLWludCBPcGVuU0xFU1JlY29yZGVyOjpUZXJtaW5hdGUoKSB7Ci0gIEFMT0dEKCJUZXJtaW5h
dGUlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgU3RvcFJlY29yZGluZygpOwotICByZXR1
cm4gMDsKLX0KLQotaW50IE9wZW5TTEVTUmVjb3JkZXI6OkluaXRSZWNvcmRpbmcoKSB7Ci0gIEFM
T0dEKCJJbml0UmVjb3JkaW5nJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hF
Q0soIWluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXJlY29yZGluZ18pOwotICBpZiAoIU9i
dGFpbkVuZ2luZUludGVyZmFjZSgpKSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBvYnRhaW4gU0wg
RW5naW5lIGludGVyZmFjZSIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBDcmVhdGVBdWRpb1Jl
Y29yZGVyKCk7Ci0gIGluaXRpYWxpemVkXyA9IHRydWU7Ci0gIGJ1ZmZlcl9pbmRleF8gPSAwOwot
ICByZXR1cm4gMDsKLX0KLQotaW50IE9wZW5TTEVTUmVjb3JkZXI6OlN0YXJ0UmVjb3JkaW5nKCkg
ewotICBBTE9HRCgiU3RhcnRSZWNvcmRpbmclcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsK
LSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAg
UlRDX0RDSEVDSyhpbml0aWFsaXplZF8pOwotICBSVENfRENIRUNLKCFyZWNvcmRpbmdfKTsKLSAg
aWYgKGZpbmVfYXVkaW9fYnVmZmVyXykgewotICAgIGZpbmVfYXVkaW9fYnVmZmVyXy0+UmVzZXRS
ZWNvcmQoKTsKLSAgfQotICAvLyBBZGQgYnVmZmVycyB0byB0aGUgcXVldWUgYmVmb3JlIGNoYW5n
aW5nIHN0YXRlIHRvIFNMX1JFQ09SRFNUQVRFX1JFQ09SRElORwotICAvLyB0byBlbnN1cmUgdGhh
dCByZWNvcmRpbmcgc3RhcnRzIGFzIHNvb24gYXMgdGhlIHN0YXRlIGlzIG1vZGlmaWVkLiBPbiBz
b21lCi0gIC8vIGRldmljZXMsIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlOjpDbGVhcigpIHVz
ZWQgaW4gU3RvcCgpIGRvZXMgbm90IGZsdXNoCi0gIC8vIHRoZSBidWZmZXJzIGFzIGludGVuZGVk
IGFuZCB3ZSB0aGVyZWZvcmUgY2hlY2sgdGhlIG51bWJlciBvZiBidWZmZXJzCi0gIC8vIGFscmVh
ZHkgcXVldWVkIGZpcnN0LiBFbnF1ZXVlKCkgY2FuIHJldHVybiBTTF9SRVNVTFRfQlVGRkVSX0lO
U1VGRklDSUVOVAotICAvLyBvdGhlcndpc2UuCi0gIGludCBudW1fYnVmZmVyc19pbl9xdWV1ZSA9
IEdldEJ1ZmZlckNvdW50KCk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga051bU9mT3BlblNMRVNC
dWZmZXJzIC0gbnVtX2J1ZmZlcnNfaW5fcXVldWU7ICsraSkgewotICAgIGlmICghRW5xdWV1ZUF1
ZGlvQnVmZmVyKCkpIHsKLSAgICAgIHJlY29yZGluZ18gPSBmYWxzZTsKLSAgICAgIHJldHVybiAt
MTsKLSAgICB9Ci0gIH0KLSAgbnVtX2J1ZmZlcnNfaW5fcXVldWUgPSBHZXRCdWZmZXJDb3VudCgp
OwotICBSVENfRENIRUNLX0VRKG51bV9idWZmZXJzX2luX3F1ZXVlLCBrTnVtT2ZPcGVuU0xFU0J1
ZmZlcnMpOwotICBMb2dCdWZmZXJTdGF0ZSgpOwotICAvLyBTdGFydCBhdWRpbyByZWNvcmRpbmcg
YnkgY2hhbmdpbmcgdGhlIHN0YXRlIHRvIFNMX1JFQ09SRFNUQVRFX1JFQ09SRElORy4KLSAgLy8g
R2l2ZW4gdGhhdCBidWZmZXJzIGFyZSBhbHJlYWR5IGVucXVldWVkLCByZWNvcmRpbmcgc2hvdWxk
IHN0YXJ0IGF0IG9uY2UuCi0gIC8vIFRoZSBtYWNybyByZXR1cm5zIC0xIGlmIHJlY29yZGluZyBm
YWlscyB0byBzdGFydC4KLSAgbGFzdF9yZWNfdGltZV8gPSBydGM6OlRpbWUoKTsKLSAgaWYgKExP
R19PTl9FUlJPUigKLSAgICAgICAgICAoKnJlY29yZGVyXyktPlNldFJlY29yZFN0YXRlKHJlY29y
ZGVyXywgU0xfUkVDT1JEU1RBVEVfUkVDT1JESU5HKSkpIHsKLSAgICByZXR1cm4gLTE7Ci0gIH0K
LSAgcmVjb3JkaW5nXyA9IChHZXRSZWNvcmRTdGF0ZSgpID09IFNMX1JFQ09SRFNUQVRFX1JFQ09S
RElORyk7Ci0gIFJUQ19EQ0hFQ0socmVjb3JkaW5nXyk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQg
T3BlblNMRVNSZWNvcmRlcjo6U3RvcFJlY29yZGluZygpIHsKLSAgQUxPR0QoIlN0b3BSZWNvcmRp
bmclcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKCFpbml0aWFsaXplZF8gfHwgIXJl
Y29yZGluZ18pIHsKLSAgICByZXR1cm4gMDsKLSAgfQotICAvLyBTdG9wIHJlY29yZGluZyBieSBz
ZXR0aW5nIHRoZSByZWNvcmQgc3RhdGUgdG8gU0xfUkVDT1JEU1RBVEVfU1RPUFBFRC4KLSAgaWYg
KExPR19PTl9FUlJPUigKLSAgICAgICAgICAoKnJlY29yZGVyXyktPlNldFJlY29yZFN0YXRlKHJl
Y29yZGVyXywgU0xfUkVDT1JEU1RBVEVfU1RPUFBFRCkpKSB7Ci0gICAgcmV0dXJuIC0xOwotICB9
Ci0gIC8vIENsZWFyIHRoZSBidWZmZXIgcXVldWUgdG8gZ2V0IHJpZCBvZiBvbGQgZGF0YSB3aGVu
IHJlc3VtaW5nIHJlY29yZGluZy4KLSAgaWYgKExPR19PTl9FUlJPUigoKnNpbXBsZV9idWZmZXJf
cXVldWVfKS0+Q2xlYXIoc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pKSkgewotICAgIHJldHVybiAtMTsK
LSAgfQotICB0aHJlYWRfY2hlY2tlcl9vcGVuc2xlc18uRGV0YWNoRnJvbVRocmVhZCgpOwotICBp
bml0aWFsaXplZF8gPSBmYWxzZTsKLSAgcmVjb3JkaW5nXyA9IGZhbHNlOwotICByZXR1cm4gMDsK
LX0KLQotdm9pZCBPcGVuU0xFU1JlY29yZGVyOjpBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0Rldmlj
ZUJ1ZmZlciogYXVkaW9fYnVmZmVyKSB7Ci0gIEFMT0dEKCJBdHRhY2hBdWRpb0J1ZmZlciIpOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBS
VENfQ0hFQ0soYXVkaW9fYnVmZmVyKTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8gPSBhdWRpb19i
dWZmZXI7Ci0gIC8vIEVuc3VyZSB0aGF0IHRoZSBhdWRpbyBkZXZpY2UgYnVmZmVyIGlzIGluZm9y
bWVkIGFib3V0IHRoZSBuYXRpdmUgc2FtcGxlCi0gIC8vIHJhdGUgdXNlZCBvbiB0aGUgcmVjb3Jk
aW5nIHNpZGUuCi0gIGNvbnN0IGludCBzYW1wbGVfcmF0ZV9oeiA9IGF1ZGlvX3BhcmFtZXRlcnNf
LnNhbXBsZV9yYXRlKCk7Ci0gIEFMT0dEKCJTZXRSZWNvcmRpbmdTYW1wbGVSYXRlKCVkKSIsIHNh
bXBsZV9yYXRlX2h6KTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlNldFJlY29yZGluZ1NhbXBs
ZVJhdGUoc2FtcGxlX3JhdGVfaHopOwotICAvLyBFbnN1cmUgdGhhdCB0aGUgYXVkaW8gZGV2aWNl
IGJ1ZmZlciBpcyBpbmZvcm1lZCBhYm91dCB0aGUgbnVtYmVyIG9mCi0gIC8vIGNoYW5uZWxzIHBy
ZWZlcnJlZCBieSB0aGUgT1Mgb24gdGhlIHJlY29yZGluZyBzaWRlLgotICBjb25zdCBzaXplX3Qg
Y2hhbm5lbHMgPSBhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpOwotICBBTE9HRCgiU2V0UmVj
b3JkaW5nQ2hhbm5lbHMoJSIgUFJJdVMgIikiLCBjaGFubmVscyk7Ci0gIGF1ZGlvX2RldmljZV9i
dWZmZXJfLT5TZXRSZWNvcmRpbmdDaGFubmVscyhjaGFubmVscyk7Ci0gIC8vIEFsbG9jYXRlZCBt
ZW1vcnkgZm9yIGludGVybmFsIGRhdGEgYnVmZmVycyBnaXZlbiBleGlzdGluZyBhdWRpbyBwYXJh
bWV0ZXJzLgotICBBbGxvY2F0ZURhdGFCdWZmZXJzKCk7Ci19Ci0KLWludCBPcGVuU0xFU1JlY29y
ZGVyOjpFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKSB7Ci0gIEFMT0dEKCJFbmFibGVCdWls
dEluQUVDKCVkKSIsIGVuYWJsZSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxl
ZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIEFMT0dFKCJOb3QgaW1wbGVtZW50ZWQiKTsKLSAgcmV0dXJu
IDA7Ci19Ci0KLWludCBPcGVuU0xFU1JlY29yZGVyOjpFbmFibGVCdWlsdEluQUdDKGJvb2wgZW5h
YmxlKSB7Ci0gIEFMT0dEKCJFbmFibGVCdWlsdEluQUdDKCVkKSIsIGVuYWJsZSk7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIEFMT0dFKCJO
b3QgaW1wbGVtZW50ZWQiKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1JlY29yZGVy
OjpFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpIHsKLSAgQUxPR0QoIkVuYWJsZUJ1aWx0SW5O
UyglZCkiLCBlbmFibGUpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZh
bGlkVGhyZWFkKCkpOwotICBBTE9HRSgiTm90IGltcGxlbWVudGVkIik7Ci0gIHJldHVybiAwOwot
fQotCi1ib29sIE9wZW5TTEVTUmVjb3JkZXI6Ok9idGFpbkVuZ2luZUludGVyZmFjZSgpIHsKLSAg
QUxPR0QoIk9idGFpbkVuZ2luZUludGVyZmFjZSIpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBpZiAoZW5naW5lXykKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgLy8gR2V0IGFjY2VzcyB0byAob3IgY3JlYXRlIGlmIG5vdCBhbHJlYWR5IGV4aXN0
aW5nKSB0aGUgZ2xvYmFsIE9wZW5TTCBFbmdpbmUKLSAgLy8gb2JqZWN0LgotICBTTE9iamVjdEl0
ZiBlbmdpbmVfb2JqZWN0ID0gYXVkaW9fbWFuYWdlcl8tPkdldE9wZW5TTEVuZ2luZSgpOwotICBp
ZiAoZW5naW5lX29iamVjdCA9PSBudWxscHRyKSB7Ci0gICAgQUxPR0UoIkZhaWxlZCB0byBhY2Nl
c3MgdGhlIGdsb2JhbCBPcGVuU0wgZW5naW5lIik7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0g
IC8vIEdldCB0aGUgU0wgRW5naW5lIEludGVyZmFjZSB3aGljaCBpcyBpbXBsaWNpdC4KLSAgaWYg
KExPR19PTl9FUlJPUigKLSAgICAgICAgICAoKmVuZ2luZV9vYmplY3QpCi0gICAgICAgICAgICAg
IC0+R2V0SW50ZXJmYWNlKGVuZ2luZV9vYmplY3QsIFNMX0lJRF9FTkdJTkUsICZlbmdpbmVfKSkp
IHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgT3Bl
blNMRVNSZWNvcmRlcjo6Q3JlYXRlQXVkaW9SZWNvcmRlcigpIHsKLSAgQUxPR0QoIkNyZWF0ZUF1
ZGlvUmVjb3JkZXIiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKLSAgaWYgKHJlY29yZGVyX29iamVjdF8uR2V0KCkpCi0gICAgcmV0dXJuIHRy
dWU7Ci0gIFJUQ19EQ0hFQ0soIXJlY29yZGVyXyk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9idWZm
ZXJfcXVldWVfKTsKLQotICAvLyBBdWRpbyBzb3VyY2UgY29uZmlndXJhdGlvbi4KLSAgU0xEYXRh
TG9jYXRvcl9JT0RldmljZSBtaWNfbG9jYXRvciA9IHtTTF9EQVRBTE9DQVRPUl9JT0RFVklDRSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTF9JT0RFVklDRV9BVURJ
T0lOUFVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0RFRkFV
TFRERVZJQ0VJRF9BVURJT0lOUFVULCBOVUxMfTsKLSAgU0xEYXRhU291cmNlIGF1ZGlvX3NvdXJj
ZSA9IHsmbWljX2xvY2F0b3IsIE5VTEx9OwotCi0gIC8vIEF1ZGlvIHNpbmsgY29uZmlndXJhdGlv
bi4KLSAgU0xEYXRhTG9jYXRvcl9BbmRyb2lkU2ltcGxlQnVmZmVyUXVldWUgYnVmZmVyX3F1ZXVl
ID0gewotICAgICAgU0xfREFUQUxPQ0FUT1JfQU5EUk9JRFNJTVBMRUJVRkZFUlFVRVVFLAotICAg
ICAgc3RhdGljX2Nhc3Q8U0x1aW50MzI+KGtOdW1PZk9wZW5TTEVTQnVmZmVycyl9OwotICBTTERh
dGFTaW5rIGF1ZGlvX3NpbmsgPSB7JmJ1ZmZlcl9xdWV1ZSwgJnBjbV9mb3JtYXRffTsKLQotICAv
LyBDcmVhdGUgdGhlIGF1ZGlvIHJlY29yZGVyIG9iamVjdCAocmVxdWlyZXMgdGhlIFJFQ09SRF9B
VURJTyBwZXJtaXNzaW9uKS4KLSAgLy8gRG8gbm90IHJlYWxpemUgdGhlIHJlY29yZGVyIHlldC4g
U2V0IHRoZSBjb25maWd1cmF0aW9uIGZpcnN0LgotICBjb25zdCBTTEludGVyZmFjZUlEIGludGVy
ZmFjZV9pZFtdID0ge1NMX0lJRF9BTkRST0lEU0lNUExFQlVGRkVSUVVFVUUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xfSUlEX0FORFJPSURDT05GSUdVUkFUSU9O
fTsKLSAgY29uc3QgU0xib29sZWFuIGludGVyZmFjZV9yZXF1aXJlZFtdID0ge1NMX0JPT0xFQU5f
VFJVRSwgU0xfQk9PTEVBTl9UUlVFfTsKLSAgaWYgKExPR19PTl9FUlJPUigoKmVuZ2luZV8pLT5D
cmVhdGVBdWRpb1JlY29yZGVyKAotICAgICAgICAgIGVuZ2luZV8sIHJlY29yZGVyX29iamVjdF8u
UmVjZWl2ZSgpLCAmYXVkaW9fc291cmNlLCAmYXVkaW9fc2luaywKLSAgICAgICAgICBhcnJheXNp
emUoaW50ZXJmYWNlX2lkKSwgaW50ZXJmYWNlX2lkLCBpbnRlcmZhY2VfcmVxdWlyZWQpKSkgewot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIENvbmZpZ3VyZSB0aGUgYXVkaW8gcmVjb3Jk
ZXIgKGJlZm9yZSBpdCBpcyByZWFsaXplZCkuCi0gIFNMQW5kcm9pZENvbmZpZ3VyYXRpb25JdGYg
cmVjb3JkZXJfY29uZmlnOwotICBpZiAoTE9HX09OX0VSUk9SKChyZWNvcmRlcl9vYmplY3RfLT5H
ZXRJbnRlcmZhY2UocmVjb3JkZXJfb2JqZWN0Xy5HZXQoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0lJRF9BTkRST0lEQ09ORklHVVJBVElP
TiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZy
ZWNvcmRlcl9jb25maWcpKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBVc2Vz
IHRoZSBkZWZhdWx0IG1pY3JvcGhvbmUgdHVuZWQgZm9yIGF1ZGlvIGNvbW11bmljYXRpb24uCi0g
IC8vIE5vdGUgdGhhdCwgU0xfQU5EUk9JRF9SRUNPUkRJTkdfUFJFU0VUX1ZPSUNFX1JFQ09HTklU
SU9OIGxlYWRzIHRvIGEgZmFzdAotICAvLyB0cmFjayBidXQgYWxzbyBleGNsdWRlcyB1c2FnZSBv
ZiByZXF1aXJlZCBlZmZlY3RzIGxpa2UgQUVDLCBBR0MgYW5kIE5TLgotICAvLyBTTF9BTkRST0lE
X1JFQ09SRElOR19QUkVTRVRfVk9JQ0VfQ09NTVVOSUNBVElPTgotICBTTGludDMyIHN0cmVhbV90
eXBlID0gU0xfQU5EUk9JRF9SRUNPUkRJTkdfUFJFU0VUX1ZPSUNFX0NPTU1VTklDQVRJT047Ci0g
IGlmIChMT0dfT05fRVJST1IoKCgqcmVjb3JkZXJfY29uZmlnKQotICAgICAgICAgICAgICAgICAg
ICAgICAgLT5TZXRDb25maWd1cmF0aW9uKHJlY29yZGVyX2NvbmZpZywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTF9BTkRST0lEX0tFWV9SRUNPUkRJTkdfUFJF
U0VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1f
dHlwZSwgc2l6ZW9mKFNMaW50MzIpKSkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAg
Ly8gVGhlIGF1ZGlvIHJlY29yZGVyIGNhbiBub3cgYmUgcmVhbGl6ZWQgKGluIHN5bmNocm9ub3Vz
IG1vZGUpLgotICBpZiAoTE9HX09OX0VSUk9SKChyZWNvcmRlcl9vYmplY3RfLT5SZWFsaXplKHJl
Y29yZGVyX29iamVjdF8uR2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU0xfQk9PTEVBTl9GQUxTRSkpKSkgewotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIC8vIEdldCB0aGUgaW1wbGljaXQgcmVjb3JkZXIgaW50ZXJmYWNlIChTTF9JSURfUkVD
T1JEKS4KLSAgaWYgKExPR19PTl9FUlJPUigocmVjb3JkZXJfb2JqZWN0Xy0+R2V0SW50ZXJmYWNl
KAotICAgICAgICAgIHJlY29yZGVyX29iamVjdF8uR2V0KCksIFNMX0lJRF9SRUNPUkQsICZyZWNv
cmRlcl8pKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBHZXQgdGhlIHNpbXBs
ZSBidWZmZXIgcXVldWUgaW50ZXJmYWNlIChTTF9JSURfQU5EUk9JRFNJTVBMRUJVRkZFUlFVRVVF
KS4KLSAgLy8gSXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLgotICBpZiAoTE9HX09OX0VSUk9S
KChyZWNvcmRlcl9vYmplY3RfLT5HZXRJbnRlcmZhY2UoCi0gICAgICAgICAgcmVjb3JkZXJfb2Jq
ZWN0Xy5HZXQoKSwgU0xfSUlEX0FORFJPSURTSU1QTEVCVUZGRVJRVUVVRSwKLSAgICAgICAgICAm
c2ltcGxlX2J1ZmZlcl9xdWV1ZV8pKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAv
LyBSZWdpc3RlciB0aGUgaW5wdXQgY2FsbGJhY2sgZm9yIHRoZSBzaW1wbGUgYnVmZmVyIHF1ZXVl
LgotICAvLyBUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHdoZW4gcmVjZWl2aW5nIG5ldyBk
YXRhIGZyb20gdGhlIGRldmljZS4KLSAgaWYgKExPR19PTl9FUlJPUigoKCpzaW1wbGVfYnVmZmVy
X3F1ZXVlXykKLSAgICAgICAgICAgICAgICAgICAgICAgIC0+UmVnaXN0ZXJDYWxsYmFjayhzaW1w
bGVfYnVmZmVyX3F1ZXVlXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNrLCB0aGlzKSkpKSB7Ci0gICAgcmV0dXJuIGZh
bHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIE9wZW5TTEVTUmVjb3JkZXI6OkRl
c3Ryb3lBdWRpb1JlY29yZGVyKCkgewotICBBTE9HRCgiRGVzdHJveUF1ZGlvUmVjb3JkZXIiKTsK
LSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAg
aWYgKCFyZWNvcmRlcl9vYmplY3RfLkdldCgpKQotICAgIHJldHVybjsKLSAgKCpzaW1wbGVfYnVm
ZmVyX3F1ZXVlXykKLSAgICAgIC0+UmVnaXN0ZXJDYWxsYmFjayhzaW1wbGVfYnVmZmVyX3F1ZXVl
XywgbnVsbHB0ciwgbnVsbHB0cik7Ci0gIHJlY29yZGVyX29iamVjdF8uUmVzZXQoKTsKLSAgcmVj
b3JkZXJfID0gbnVsbHB0cjsKLSAgc2ltcGxlX2J1ZmZlcl9xdWV1ZV8gPSBudWxscHRyOwotfQot
Ci12b2lkIE9wZW5TTEVTUmVjb3JkZXI6OlNpbXBsZUJ1ZmZlclF1ZXVlQ2FsbGJhY2soCi0gICAg
U0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVJdGYgYnVmZmVyX3F1ZXVlLAotICAgIHZvaWQqIGNv
bnRleHQpIHsKLSAgT3BlblNMRVNSZWNvcmRlciogc3RyZWFtID0gc3RhdGljX2Nhc3Q8T3BlblNM
RVNSZWNvcmRlcio+KGNvbnRleHQpOwotICBzdHJlYW0tPlJlYWRCdWZmZXJRdWV1ZSgpOwotfQot
Ci12b2lkIE9wZW5TTEVTUmVjb3JkZXI6OkFsbG9jYXRlRGF0YUJ1ZmZlcnMoKSB7Ci0gIEFMT0dE
KCJBbGxvY2F0ZURhdGFCdWZmZXJzIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9idWZmZXJfcXVldWVf
KTsKLSAgUlRDX0NIRUNLKGF1ZGlvX2RldmljZV9idWZmZXJfKTsKLSAgLy8gQ3JlYXRlIGEgbW9k
aWZpZWQgYXVkaW8gYnVmZmVyIGNsYXNzIHdoaWNoIGFsbG93cyB1cyB0byBkZWxpdmVyIGFueSBu
dW1iZXIKLSAgLy8gb2Ygc2FtcGxlcyAoYW5kIG5vdCBvbmx5IG11bHRpcGxlIG9mIDEwbXMpIHRv
IG1hdGNoIHRoZSBuYXRpdmUgYXVkaW8gdW5pdAotICAvLyBidWZmZXIgc2l6ZS4KLSAgQUxPR0Qo
ImZyYW1lcyBwZXIgbmF0aXZlIGJ1ZmZlcjogJSIgUFJJdVMsCi0gICAgICAgIGF1ZGlvX3BhcmFt
ZXRlcnNfLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotICBBTE9HRCgiZnJhbWVzIHBlciAxMG1zIGJ1
ZmZlcjogJSIgUFJJdVMsCi0gICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLmZyYW1lc19wZXJfMTBt
c19idWZmZXIoKSk7Ci0gIEFMT0dEKCJieXRlcyBwZXIgbmF0aXZlIGJ1ZmZlcjogJSIgUFJJdVMs
Ci0gICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVyKCkpOwotICBBTE9H
RCgibmF0aXZlIHNhbXBsZSByYXRlOiAlZCIsIGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRl
KCkpOwotICBSVENfRENIRUNLKGF1ZGlvX2RldmljZV9idWZmZXJfKTsKLSAgZmluZV9hdWRpb19i
dWZmZXJfLnJlc2V0KG5ldyBGaW5lQXVkaW9CdWZmZXIoCi0gICAgICBhdWRpb19kZXZpY2VfYnVm
ZmVyXywgYXVkaW9fcGFyYW1ldGVyc18uR2V0Qnl0ZXNQZXJCdWZmZXIoKSwKLSAgICAgIGF1ZGlv
X3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCkpKTsKLSAgLy8gQWxsb2NhdGUgcXVldWUgb2YgYXVk
aW8gYnVmZmVycyB0aGF0IHN0b3JlcyByZWNvcmRlZCBhdWRpbyBzYW1wbGVzLgotICBjb25zdCBp
bnQgZGF0YV9zaXplX2J5dGVzID0gYXVkaW9fcGFyYW1ldGVyc18uR2V0Qnl0ZXNQZXJCdWZmZXIo
KTsKLSAgYXVkaW9fYnVmZmVyc18ucmVzZXQobmV3IHN0ZDo6dW5pcXVlX3B0cjxTTGludDhbXT5b
a051bU9mT3BlblNMRVNCdWZmZXJzXSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga051bU9mT3Bl
blNMRVNCdWZmZXJzOyArK2kpIHsKLSAgICBhdWRpb19idWZmZXJzX1tpXS5yZXNldChuZXcgU0xp
bnQ4W2RhdGFfc2l6ZV9ieXRlc10pOwotICB9Ci19Ci0KLXZvaWQgT3BlblNMRVNSZWNvcmRlcjo6
UmVhZEJ1ZmZlclF1ZXVlKCkgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyX29wZW5zbGVz
Xy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBTTHVpbnQzMiBzdGF0ZSA9IEdldFJlY29yZFN0
YXRlKCk7Ci0gIGlmIChzdGF0ZSAhPSBTTF9SRUNPUkRTVEFURV9SRUNPUkRJTkcpIHsKLSAgICBB
TE9HVygiQnVmZmVyIGNhbGxiYWNrIGluIG5vbi1yZWNvcmRpbmcgc3RhdGUhIik7Ci0gICAgcmV0
dXJuOwotICB9Ci0gIC8vIENoZWNrIGRlbHRhIHRpbWUgYmV0d2VlbiB0d28gc3VjY2Vzc2l2ZSBj
YWxsYmFja3MgYW5kIHByb3ZpZGUgYSB3YXJuaW5nCi0gIC8vIGlmIGl0IGJlY29tZXMgdmVyeSBs
YXJnZS4KLSAgLy8gVE9ETyhoZW5yaWthKTogdXNpbmcgMTUwbXMgYXMgdXBwZXIgbGltaXQgYnV0
IHRoaXMgdmFsdWUgaXMgcmF0aGVyIHJhbmRvbS4KLSAgY29uc3QgdWludDMyX3QgY3VycmVudF90
aW1lID0gcnRjOjpUaW1lKCk7Ci0gIGNvbnN0IHVpbnQzMl90IGRpZmYgPSBjdXJyZW50X3RpbWUg
LSBsYXN0X3JlY190aW1lXzsKLSAgaWYgKGRpZmYgPiAxNTApIHsKLSAgICBBTE9HVygiQmFkIE9w
ZW5TTCBFUyByZWNvcmQgdGltaW5nLCBkVD0ldSBbbXNdIiwgZGlmZik7Ci0gIH0KLSAgbGFzdF9y
ZWNfdGltZV8gPSBjdXJyZW50X3RpbWU7Ci0gIC8vIFNlbmQgcmVjb3JkZWQgYXVkaW8gZGF0YSB0
byB0aGUgV2ViUlRDIHNpbmsuCi0gIC8vIFRPRE8oaGVucmlrYSk6IGZpeCBkZWxheSBlc3RpbWF0
ZXMuIEl0IGlzIE9LIHRvIHVzZSBmaXhlZCB2YWx1ZXMgZm9yIG5vdwotICAvLyBzaW5jZSB0aGVy
ZSBpcyBubyBzdXBwb3J0IHRvIHR1cm4gb2ZmIGJ1aWx0LWluIEVDIGluIGNvbWJpbmF0aW9uIHdp
dGgKLSAgLy8gT3BlblNMIEVTIGFueWhvdy4gSGVuY2UsIGFzIGlzLCB0aGUgV2ViUlRDIGJhc2Vk
IEFFQyAod2hpY2ggd291bGQgdXNlCi0gIC8vIHRoZXNlIGVzdGltYXRlcykgd2lsbCBuZXZlciBi
ZSBhY3RpdmUuCi0gIGNvbnN0IHNpemVfdCBzaXplX2luX2J5dGVzID0KLSAgICAgIHN0YXRpY19j
YXN0PHNpemVfdD4oYXVkaW9fcGFyYW1ldGVyc18uR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIGNv
bnN0IGludDhfdCogZGF0YSA9Ci0gICAgICBzdGF0aWNfY2FzdDxjb25zdCBpbnQ4X3QqPihhdWRp
b19idWZmZXJzX1tidWZmZXJfaW5kZXhfXS5nZXQoKSk7Ci0gIGZpbmVfYXVkaW9fYnVmZmVyXy0+
RGVsaXZlclJlY29yZGVkRGF0YShkYXRhLCBzaXplX2luX2J5dGVzLCAyNSwgMjUpOwotICAvLyBF
bnF1ZXVlIHRoZSB1dGlsaXplZCBhdWRpbyBidWZmZXIgYW5kIHVzZSBpZiBmb3IgcmVjb3JkaW5n
IGFnYWluLgotICBFbnF1ZXVlQXVkaW9CdWZmZXIoKTsKLX0KLQotYm9vbCBPcGVuU0xFU1JlY29y
ZGVyOjpFbnF1ZXVlQXVkaW9CdWZmZXIoKSB7Ci0gIFNMcmVzdWx0IGVyciA9Ci0gICAgICAoKnNp
bXBsZV9idWZmZXJfcXVldWVfKQotICAgICAgICAgIC0+RW5xdWV1ZShzaW1wbGVfYnVmZmVyX3F1
ZXVlXywgYXVkaW9fYnVmZmVyc19bYnVmZmVyX2luZGV4X10uZ2V0KCksCi0gICAgICAgICAgICAg
ICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVyKCkpOwotICBpZiAoU0xf
UkVTVUxUX1NVQ0NFU1MgIT0gZXJyKSB7Ci0gICAgQUxPR0UoIkVucXVldWUgZmFpbGVkOiAlcyIs
IEdldFNMRXJyb3JTdHJpbmcoZXJyKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIGJ1ZmZl
cl9pbmRleF8gPSAoYnVmZmVyX2luZGV4XyArIDEpICUga051bU9mT3BlblNMRVNCdWZmZXJzOwot
ICByZXR1cm4gdHJ1ZTsKLX0KLQotU0x1aW50MzIgT3BlblNMRVNSZWNvcmRlcjo6R2V0UmVjb3Jk
U3RhdGUoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0socmVjb3JkZXJfKTsKLSAgU0x1aW50MzIgc3Rh
dGU7Ci0gIFNMcmVzdWx0IGVyciA9ICgqcmVjb3JkZXJfKS0+R2V0UmVjb3JkU3RhdGUocmVjb3Jk
ZXJfLCAmc3RhdGUpOwotICBpZiAoU0xfUkVTVUxUX1NVQ0NFU1MgIT0gZXJyKSB7Ci0gICAgQUxP
R0UoIkdldFJlY29yZFN0YXRlIGZhaWxlZDogJXMiLCBHZXRTTEVycm9yU3RyaW5nKGVycikpOwot
ICB9Ci0gIHJldHVybiBzdGF0ZTsKLX0KLQotU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0
ZSBPcGVuU0xFU1JlY29yZGVyOjpHZXRCdWZmZXJRdWV1ZVN0YXRlKCkgY29uc3QgewotICBSVENf
RENIRUNLKHNpbXBsZV9idWZmZXJfcXVldWVfKTsKLSAgLy8gc3RhdGUuY291bnQ6IE51bWJlciBv
ZiBidWZmZXJzIGN1cnJlbnRseSBpbiB0aGUgcXVldWUuCi0gIC8vIHN0YXRlLmluZGV4OiBJbmRl
eCBvZiB0aGUgY3VycmVudGx5IGZpbGxpbmcgYnVmZmVyLiBUaGlzIGlzIGEgbGluZWFyIGluZGV4
Ci0gIC8vIHRoYXQga2VlcHMgYSBjdW11bGF0aXZlIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgYnVm
ZmVycyByZWNvcmRlZC4KLSAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0ZSBzdGF0ZTsK
LSAgU0xyZXN1bHQgZXJyID0KLSAgICAgICgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pLT5HZXRTdGF0
ZShzaW1wbGVfYnVmZmVyX3F1ZXVlXywgJnN0YXRlKTsKLSAgaWYgKFNMX1JFU1VMVF9TVUNDRVNT
ICE9IGVycikgewotICAgIEFMT0dFKCJHZXRTdGF0ZSBmYWlsZWQ6ICVzIiwgR2V0U0xFcnJvclN0
cmluZyhlcnIpKTsKLSAgfQotICByZXR1cm4gc3RhdGU7Ci19Ci0KLXZvaWQgT3BlblNMRVNSZWNv
cmRlcjo6TG9nQnVmZmVyU3RhdGUoKSBjb25zdCB7Ci0gIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1
ZXVlU3RhdGUgc3RhdGUgPSBHZXRCdWZmZXJRdWV1ZVN0YXRlKCk7Ci0gIEFMT0dEKCJzdGF0ZS5j
b3VudDolZCBzdGF0ZS5pbmRleDolZCIsIHN0YXRlLmNvdW50LCBzdGF0ZS5pbmRleCk7Ci19Ci0K
LVNMdWludDMyIE9wZW5TTEVTUmVjb3JkZXI6OkdldEJ1ZmZlckNvdW50KCkgewotICBTTEFuZHJv
aWRTaW1wbGVCdWZmZXJRdWV1ZVN0YXRlIHN0YXRlID0gR2V0QnVmZmVyUXVldWVTdGF0ZSgpOwot
ICByZXR1cm4gc3RhdGUuY291bnQ7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfcmVjb3JkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL29wZW5zbGVzX3JlY29yZGVyLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2Fu
ZHJvaWQvb3BlbnNsZXNfcmVjb3JkZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE5MyArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19BVURJT19E
RVZJQ0VfQU5EUk9JRF9PUEVOU0xFU19SRUNPUkRFUl9IXwotI2RlZmluZSBXRUJSVENfTU9EVUxF
U19BVURJT19ERVZJQ0VfQU5EUk9JRF9PUEVOU0xFU19SRUNPUkRFUl9IXwotCi0jaW5jbHVkZSA8
U0xFUy9PcGVuU0xFUy5oPgotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZC5oPgotI2lu
Y2x1ZGUgPFNMRVMvT3BlblNMRVNfQW5kcm9pZENvbmZpZ3VyYXRpb24uaD4KLQotI2luY2x1ZGUg
PG1lbW9yeT4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5j
bHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmgi
Ci0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFu
YWdlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29w
ZW5zbGVzX2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9p
bmNsdWRlL2F1ZGlvX2RldmljZV9kZWZpbmVzLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMv
YXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9nZW5lcmljLmgiCi0jaW5jbHVkZSAid2VicnRjL21v
ZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5kcm9pZC5oIgotCi1uYW1lc3BhY2Ugd2Vi
cnRjIHsKLQotY2xhc3MgRmluZUF1ZGlvQnVmZmVyOwotCi0vLyBJbXBsZW1lbnRzIDE2LWJpdCBt
b25vIFBDTSBhdWRpbyBpbnB1dCBzdXBwb3J0IGZvciBBbmRyb2lkIHVzaW5nIHRoZQotLy8gQyBi
YXNlZCBPcGVuU0wgRVMgQVBJLiBObyBjYWxscyBmcm9tIEMvQysrIHRvIEphdmEgdXNpbmcgSk5J
IGlzIGRvbmUuCi0vLwotLy8gQW4gaW5zdGFuY2UgbXVzdCBiZSBjcmVhdGVkIGFuZCBkZXN0cm95
ZWQgb24gb25lIGFuZCB0aGUgc2FtZSB0aHJlYWQuCi0vLyBBbGwgcHVibGljIG1ldGhvZHMgbXVz
dCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0aHJlYWQuIEEgdGhyZWFkIGNoZWNrZXIKLS8v
IHdpbGwgUlRDX0RDSEVDSyBpZiBhbnkgbWV0aG9kIGlzIGNhbGxlZCBvbiBhbiBpbnZhbGlkIHRo
cmVhZC4gUmVjb3JkZWQgYXVkaW8KLS8vIGJ1ZmZlcnMgYXJlIHByb3ZpZGVkIG9uIGEgZGVkaWNh
dGVkIGludGVybmFsIHRocmVhZCBtYW5hZ2VkIGJ5IHRoZSBPcGVuU0wKLS8vIEVTIGxheWVyLgot
Ly8KLS8vIFRoZSBleGlzdGluZyBkZXNpZ24gZm9yY2VzIHRoZSB1c2VyIHRvIGNhbGwgSW5pdFJl
Y29yZGluZygpIGFmdGVyCi0vLyBTdG9wUmVjb3JkaW5nKCkgdG8gYmUgYWJsZSB0byBjYWxsIFN0
YXJ0UmVjb3JkaW5nKCkgYWdhaW4uIFRoaXMgaXMgaW5saW5lCi0vLyB3aXRoIGhvdyB0aGUgSmF2
YS1iYXNlZCBpbXBsZW1lbnRhdGlvbiB3b3Jrcy4KLS8vCi0vLyBBcyBvZiBBUEkgbGV2ZWwgMjEs
IGxvd2VyIGxhdGVuY3kgYXVkaW8gaW5wdXQgaXMgc3VwcG9ydGVkIG9uIHNlbGVjdCBkZXZpY2Vz
LgotLy8gVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmZWF0dXJlLCBmaXJzdCBjb25maXJtIHRo
YXQgbG93ZXIgbGF0ZW5jeSBvdXRwdXQgaXMKLS8vIGF2YWlsYWJsZS4gVGhlIGNhcGFiaWxpdHkg
Zm9yIGxvd2VyIGxhdGVuY3kgb3V0cHV0IGlzIGEgcHJlcmVxdWlzaXRlIGZvciB0aGUKLS8vIGxv
d2VyIGxhdGVuY3kgaW5wdXQgZmVhdHVyZS4gVGhlbiwgY3JlYXRlIGFuIEF1ZGlvUmVjb3JkZXIg
d2l0aCB0aGUgc2FtZQotLy8gc2FtcGxlIHJhdGUgYW5kIGJ1ZmZlciBzaXplIGFzIHdvdWxkIGJl
IHVzZWQgZm9yIG91dHB1dC4gT3BlblNMIEVTIGludGVyZmFjZXMKLS8vIGZvciBpbnB1dCBlZmZl
Y3RzIHByZWNsdWRlIHRoZSBsb3dlciBsYXRlbmN5IHBhdGguCi0vLyBTZWUgaHR0cHM6Ly9kZXZl
bG9wZXIuYW5kcm9pZC5jb20vbmRrL2d1aWRlcy9hdWRpby9vcGVuc2wtcHJvZy1ub3Rlcy5odG1s
Ci0vLyBmb3IgbW9yZSBkZXRhaWxzLgotY2xhc3MgT3BlblNMRVNSZWNvcmRlciB7Ci0gcHVibGlj
OgotICAvLyBCZWdpbm5pbmcgd2l0aCBBUEkgbGV2ZWwgMTcgKEFuZHJvaWQgNC4yKSwgYSBidWZm
ZXIgY291bnQgb2YgMiBvciBtb3JlIGlzCi0gIC8vIHJlcXVpcmVkIGZvciBsb3dlciBsYXRlbmN5
LiBCZWdpbm5pbmcgd2l0aCBBUEkgbGV2ZWwgMTggKEFuZHJvaWQgNC4zKSwgYQotICAvLyBidWZm
ZXIgY291bnQgb2YgMSBpcyBzdWZmaWNpZW50IGZvciBsb3dlciBsYXRlbmN5LiBJbiBhZGRpdGlv
biwgdGhlIGJ1ZmZlcgotICAvLyBzaXplIGFuZCBzYW1wbGUgcmF0ZSBtdXN0IGJlIGNvbXBhdGli
bGUgd2l0aCB0aGUgZGV2aWNlJ3MgbmF0aXZlIGlucHV0Ci0gIC8vIGNvbmZpZ3VyYXRpb24gcHJv
dmlkZWQgdmlhIHRoZSBhdWRpbyBtYW5hZ2VyIGF0IGNvbnN0cnVjdGlvbi4KLSAgLy8gVE9ETyho
ZW5yaWthKTogcGVyaGFwcyBzZXQgdGhpcyB2YWx1ZSBkeW5hbWljYWxseSBiYXNlZCBvbiBPUyB2
ZXJzaW9uLgotICBzdGF0aWMgY29uc3QgaW50IGtOdW1PZk9wZW5TTEVTQnVmZmVycyA9IDI7Ci0K
LSAgZXhwbGljaXQgT3BlblNMRVNSZWNvcmRlcihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIp
OwotICB+T3BlblNMRVNSZWNvcmRlcigpOwotCi0gIGludCBJbml0KCk7Ci0gIGludCBUZXJtaW5h
dGUoKTsKLQotICBpbnQgSW5pdFJlY29yZGluZygpOwotICBib29sIFJlY29yZGluZ0lzSW5pdGlh
bGl6ZWQoKSBjb25zdCB7IHJldHVybiBpbml0aWFsaXplZF87IH0KLQotICBpbnQgU3RhcnRSZWNv
cmRpbmcoKTsKLSAgaW50IFN0b3BSZWNvcmRpbmcoKTsKLSAgYm9vbCBSZWNvcmRpbmcoKSBjb25z
dCB7IHJldHVybiByZWNvcmRpbmdfOyB9Ci0KLSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihBdWRp
b0RldmljZUJ1ZmZlciogYXVkaW9fYnVmZmVyKTsKLQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQg
c3VwcG9ydCB1c2luZyBPcGVuU0wgRVMgQVBJcyB3aGVuIGF2YWlsYWJsZS4KLSAgaW50IEVuYWJs
ZUJ1aWx0SW5BRUMoYm9vbCBlbmFibGUpOwotICBpbnQgRW5hYmxlQnVpbHRJbkFHQyhib29sIGVu
YWJsZSk7Ci0gIGludCBFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpOwotCi0gcHJpdmF0ZToK
LSAgLy8gT2J0YWluZXMgdGhlIFNMIEVuZ2luZSBJbnRlcmZhY2UgZnJvbSB0aGUgZXhpc3Rpbmcg
Z2xvYmFsIEVuZ2luZSBvYmplY3QuCi0gIC8vIFRoZSBpbnRlcmZhY2UgZXhwb3NlcyBjcmVhdGlv
biBtZXRob2RzIG9mIGFsbCB0aGUgT3BlblNMIEVTIG9iamVjdCB0eXBlcy4KLSAgLy8gVGhpcyBt
ZXRob2QgZGVmaW5lcyB0aGUgfGVuZ2luZV98IG1lbWJlciB2YXJpYWJsZS4KLSAgYm9vbCBPYnRh
aW5FbmdpbmVJbnRlcmZhY2UoKTsKLQotICAvLyBDcmVhdGVzL2Rlc3Ryb3lzIHRoZSBhdWRpbyBy
ZWNvcmRlciBhbmQgdGhlIHNpbXBsZS1idWZmZXIgcXVldWUgb2JqZWN0LgotICBib29sIENyZWF0
ZUF1ZGlvUmVjb3JkZXIoKTsKLSAgdm9pZCBEZXN0cm95QXVkaW9SZWNvcmRlcigpOwotCi0gIC8v
IEFsbG9jYXRlIG1lbW9yeSBmb3IgYXVkaW8gYnVmZmVycyB3aGljaCB3aWxsIGJlIHVzZWQgdG8g
Y2FwdHVyZSBhdWRpbwotICAvLyB2aWEgdGhlIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRm
IGludGVyZmFjZS4KLSAgdm9pZCBBbGxvY2F0ZURhdGFCdWZmZXJzKCk7Ci0KLSAgLy8gVGhlc2Ug
Y2FsbGJhY2sgbWV0aG9kcyBhcmUgY2FsbGVkIHdoZW4gZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRv
IHRoZSBpbnB1dAotICAvLyBidWZmZXIgcXVldWUuIFRoZXkgYXJlIGJvdGggY2FsbGVkIGZyb20g
YW4gaW50ZXJuYWwgIk9wZW5TTCBFUyB0aHJlYWQiCi0gIC8vIHdoaWNoIGlzIG5vdCBhdHRhY2hl
ZCB0byB0aGUgRGFsdmlrIFZNLgotICBzdGF0aWMgdm9pZCBTaW1wbGVCdWZmZXJRdWV1ZUNhbGxi
YWNrKFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIGNhbGxlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBjb250ZXh0KTsKLSAgdm9pZCBSZWFkQnVm
ZmVyUXVldWUoKTsKLQotICAvLyBXcmFwcyBjYWxscyB0byBTTEFuZHJvaWRTaW1wbGVCdWZmZXJR
dWV1ZVN0YXRlOjpFbnF1ZXVlKCkgYW5kIGl0IGNhbiBiZQotICAvLyBjYWxsZWQgYm90aCBvbiB0
aGUgbWFpbiB0aHJlYWQgKGJ1dCBiZWZvcmUgcmVjb3JkaW5nIGhhcyBzdGFydGVkKSBhbmQgZnJv
bQotICAvLyB0aGUgaW50ZXJuYWwgYXVkaW8gdGhyZWFkIHdoaWxlIGlucHV0IHN0cmVhbWluZyBp
cyBhY3RpdmUuIEl0IHVzZXMKLSAgLy8gfHNpbXBsZV9idWZmZXJfcXVldWVffCBidXQgbm8gbG9j
ayBpcyBuZWVkZWQgc2luY2UgdGhlIGluaXRpYWwgY2FsbHMgZnJvbQotICAvLyB0aGUgbWFpbiB0
aHJlYWQgYW5kIHRoZSBuYXRpdmUgY2FsbGJhY2sgdGhyZWFkIGFyZSBtdXR1YWxseSBleGNsdXNp
dmUuCi0gIGJvb2wgRW5xdWV1ZUF1ZGlvQnVmZmVyKCk7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3Vy
cmVudCByZWNvcmRlciBzdGF0ZS4KLSAgU0x1aW50MzIgR2V0UmVjb3JkU3RhdGUoKSBjb25zdDsK
LQotICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGJ1ZmZlciBxdWV1ZSBzdGF0ZS4KLSAgU0xBbmRy
b2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0ZSBHZXRCdWZmZXJRdWV1ZVN0YXRlKCkgY29uc3Q7Ci0K
LSAgLy8gTnVtYmVyIG9mIGJ1ZmZlcnMgY3VycmVudGx5IGluIHRoZSBxdWV1ZS4KLSAgU0x1aW50
MzIgR2V0QnVmZmVyQ291bnQoKTsKLQotICAvLyBQcmludHMgYSBsb2cgbWVzc2FnZSBvZiB0aGUg
Y3VycmVudCBxdWV1ZSBzdGF0ZS4gQ2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZwotICAvLyBwdXJw
b3Nlcy4KLSAgdm9pZCBMb2dCdWZmZXJTdGF0ZSgpIGNvbnN0OwotCi0gIC8vIEVuc3VyZXMgdGhh
dCBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQgYXMgdGhpcyBvYmplY3Qg
aXMKLSAgLy8gY3JlYXRlZCBvbi4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2Vy
XzsKLQotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGZpcnN0IGNhbGwgdG8gU2ltcGxlQnVmZmVy
UXVldWVDYWxsYmFjaygpIGZyb20gaW50ZXJuYWwKLSAgLy8gbm9uLWFwcGxpY2F0aW9uIHRocmVh
ZCB3aGljaCBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIERhbHZpayBKVk0uCi0gIC8vIERldGFjaGVk
IGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBvYmplY3QuCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tl
ciB0aHJlYWRfY2hlY2tlcl9vcGVuc2xlc187Ci0KLSAgLy8gUmF3IHBvaW50ZXIgdG8gdGhlIGF1
ZGlvIG1hbmFnZXIgaW5qZWN0ZWQgYXQgY29uc3RydWN0aW9uLiBVc2VkIHRvIGNhY2hlCi0gIC8v
IGF1ZGlvIHBhcmFtZXRlcnMgYW5kIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIFNMIGVuZ2luZSBvYmpl
Y3QgbmVlZGVkIGJ5IHRoZQotICAvLyBPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKSBtZXRob2QuIFRo
ZSBhdWRpbyBtYW5hZ2VyIG91dGxpdmVzIGFueSBpbnN0YW5jZSBvZgotICAvLyB0aGlzIGNsYXNz
LgotICBBdWRpb01hbmFnZXIqIGNvbnN0IGF1ZGlvX21hbmFnZXJfOwotCi0gIC8vIENvbnRhaW5z
IGF1ZGlvIHBhcmFtZXRlcnMgcHJvdmlkZWQgdG8gdGhpcyBjbGFzcyBhdCBjb25zdHJ1Y3Rpb24g
YnkgdGhlCi0gIC8vIEF1ZGlvTWFuYWdlci4KLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzIGF1ZGlv
X3BhcmFtZXRlcnNfOwotCi0gIC8vIFJhdyBwb2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1cyBp
biBBdHRhY2hBdWRpb0J1ZmZlcigpLiBPd25lZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VNb2R1
bGVJbXBsIGNsYXNzIGFuZCBjYWxsZWQgYnkgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgpLgot
ICBBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9fZGV2aWNlX2J1ZmZlcl87Ci0KLSAgLy8gUENNLXR5
cGUgZm9ybWF0IGRlZmluaXRpb24uCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBzdXBwb3J0IGZv
ciBTTEFuZHJvaWREYXRhRm9ybWF0X1BDTV9FWCAoYW5kcm9pZC0yMSkgaWYKLSAgLy8gMzItYml0
IGZsb2F0IHJlcHJlc2VudGF0aW9uIGlzIG5lZWRlZC4KLSAgU0xEYXRhRm9ybWF0X1BDTSBwY21f
Zm9ybWF0XzsKLQotICBib29sIGluaXRpYWxpemVkXzsKLSAgYm9vbCByZWNvcmRpbmdfOwotCi0g
IC8vIFRoaXMgaW50ZXJmYWNlIGV4cG9zZXMgY3JlYXRpb24gbWV0aG9kcyBmb3IgYWxsIHRoZSBP
cGVuU0wgRVMgb2JqZWN0IHR5cGVzLgotICAvLyBJdCBpcyB0aGUgT3BlblNMIEVTIEFQSSBlbnRy
eSBwb2ludC4KLSAgU0xFbmdpbmVJdGYgZW5naW5lXzsKLQotICAvLyBUaGUgYXVkaW8gcmVjb3Jk
ZXIgbWVkaWEgb2JqZWN0IHJlY29yZHMgYXVkaW8gdG8gdGhlIGRlc3RpbmF0aW9uIHNwZWNpZmll
ZAotICAvLyBieSB0aGUgZGF0YSBzaW5rIGNhcHR1cmluZyBpdCBmcm9tIHRoZSBpbnB1dCBzcGVj
aWZpZWQgYnkgdGhlIGRhdGEgc291cmNlLgotICB3ZWJydGM6OlNjb3BlZFNMT2JqZWN0SXRmIHJl
Y29yZGVyX29iamVjdF87Ci0KLSAgLy8gVGhpcyBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkIG9uIHRo
ZSBhdWRpbyByZWNvcmRlciBvYmplY3QgYW5kIGl0IGNvbnRyb2xzCi0gIC8vIHRoZSBzdGF0ZSBv
ZiB0aGUgYXVkaW8gcmVjb3JkZXIuCi0gIFNMUmVjb3JkSXRmIHJlY29yZGVyXzsKLQotICAvLyBU
aGUgQW5kcm9pZCBTaW1wbGUgQnVmZmVyIFF1ZXVlIGludGVyZmFjZSBpcyBzdXBwb3J0ZWQgb24g
dGhlIGF1ZGlvCi0gIC8vIHJlY29yZGVyLiBGb3IgcmVjb3JkaW5nLCBhbiBhcHAgc2hvdWxkIGVu
cXVldWUgZW1wdHkgYnVmZmVycy4gV2hlbiBhCi0gIC8vIHJlZ2lzdGVyZWQgY2FsbGJhY2sgc2Vu
ZHMgbm90aWZpY2F0aW9uIHRoYXQgdGhlIHN5c3RlbSBoYXMgZmluaXNoZWQgd3JpdGluZwotICAv
LyBkYXRhIHRvIHRoZSBidWZmZXIsIHRoZSBhcHAgY2FuIHJlYWQgdGhlIGJ1ZmZlci4KLSAgU0xB
bmRyb2lkU2ltcGxlQnVmZmVyUXVldWVJdGYgc2ltcGxlX2J1ZmZlcl9xdWV1ZV87Ci0KLSAgLy8g
Q29uc3VtZXMgYXVkaW8gb2YgbmF0aXZlIGJ1ZmZlciBzaXplIGFuZCBmZWVkcyB0aGUgV2ViUlRD
IGxheWVyIHdpdGggMTBtcwotICAvLyBjaHVua3Mgb2YgYXVkaW8uCi0gIHN0ZDo6dW5pcXVlX3B0
cjxGaW5lQXVkaW9CdWZmZXI+IGZpbmVfYXVkaW9fYnVmZmVyXzsKLQotICAvLyBRdWV1ZSBvZiBh
dWRpbyBidWZmZXJzIHRvIGJlIHVzZWQgYnkgdGhlIHJlY29yZGVyIG9iamVjdCBmb3IgY2FwdHVy
aW5nCi0gIC8vIGF1ZGlvLiBUaGV5IHdpbGwgYmUgdXNlZCBpbiBhIFJvdW5kLXJvYmluIHdheSBh
bmQgdGhlIHNpemUgb2YgZWFjaCBidWZmZXIKLSAgLy8gaXMgZ2l2ZW4gYnkgQXVkaW9QYXJhbWV0
ZXJzOjpHZXRCeXRlc1BlckJ1ZmZlcigpLCBpLmUuLCBpdCBjb3JyZXNwb25kcyB0bwotICAvLyB0
aGUgbmF0aXZlIE9wZW5TTCBFUyBidWZmZXIgc2l6ZS4KLSAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6
dW5pcXVlX3B0cjxTTGludDhbXT5bXT4gYXVkaW9fYnVmZmVyc187Ci0KLSAgLy8gS2VlcHMgdHJh
Y2sgb2YgYWN0aXZlIGF1ZGlvIGJ1ZmZlciAnbicgaW4gdGhlIGF1ZGlvX2J1ZmZlcnNfW25dIHF1
ZXVlLgotICAvLyBFeGFtcGxlIChrTnVtT2ZPcGVuU0xFU0J1ZmZlcnMgPSAyKTogY291bnRzIDAs
IDEsIDAsIDEsIC4uLgotICBpbnQgYnVmZmVyX2luZGV4XzsKLQotICAvLyBMYXN0IHRpbWUgdGhl
IE9wZW5TTCBFUyBsYXllciBkZWxpdmVyZWQgcmVjb3JkZWQgYXVkaW8gZGF0YS4KLSAgdWludDMy
X3QgbGFzdF9yZWNfdGltZV87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRp
ZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfUkVDT1JE
RVJfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9hdWRpb19jb21tb24uaAkobm9uZXhpc3RlbnQpCkBAIC0xLDMyICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklD
RV9BTkRST0lEX0FVRElPX0NPTU1PTl9IXwotI2RlZmluZSBXRUJSVENfTU9EVUxFU19BVURJT19E
RVZJQ0VfQU5EUk9JRF9BVURJT19DT01NT05fSF8KLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLWNv
bnN0IGludCBrRGVmYXVsdFNhbXBsZVJhdGUgPSA0NDEwMDsKLWNvbnN0IGludCBrTnVtQ2hhbm5l
bHMgPSAxOwotLy8gTnVtYmVyIG9mIGJ5dGVzIHBlciBhdWRpbyBmcmFtZS4KLS8vIEV4YW1wbGU6
IDE2LWJpdCBQQ00gaW4gbW9ubyA9PiAxKigxNi84KT0yIFtieXRlcy9mcmFtZV0KLWNvbnN0IHNp
emVfdCBrQnl0ZXNQZXJGcmFtZSA9IGtOdW1DaGFubmVscyAqICgxNiAvIDgpOwotLy8gRGVsYXkg
ZXN0aW1hdGVzIGZvciB0aGUgdHdvIGRpZmZlcmVudCBzdXBwb3J0ZWQgbW9kZXMuIFRoZXNlIHZh
bHVlcyBhcmUgYmFzZWQKLS8vIG9uIHJlYWwtdGltZSByb3VuZC10cmlwIGRlbGF5IGVzdGltYXRl
cyBvbiBhIGxhcmdlIHNldCBvZiBkZXZpY2VzIGFuZCB0aGV5Ci0vLyBhcmUgbG93ZXIgYm91bmRz
IHNpbmNlIHRoZSBmaWx0ZXIgbGVuZ3RoIGlzIDEyOCBtcywgc28gdGhlIEFFQyB3b3JrcyBmb3IK
LS8vIGRlbGF5cyBpbiB0aGUgcmFuZ2UgWzUwLCB+MTcwXSBtcyBhbmQgWzE1MCwgfjI3MF0gbXMu
IE5vdGUgdGhhdCwgaW4gbW9zdAotLy8gY2FzZXMsIHRoZSBsb3dlc3QgZGVsYXkgZXN0aW1hdGUg
d2lsbCBub3QgYmUgdXRpbGl6ZWQgc2luY2UgZGV2aWNlcyB0aGF0Ci0vLyBzdXBwb3J0IGxvdy1s
YXRlbmN5IG91dHB1dCBhdWRpbyBvZnRlbiBzdXBwb3J0cyBIVyBBRUMgYXMgd2VsbC4KLWNvbnN0
IGludCBrTG93TGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHMgPSA1MDsKLWNv
bnN0IGludCBrSGlnaExhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzID0gMTUw
OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX01PRFVMRVNf
QVVESU9fREVWSUNFX0FORFJPSURfQVVESU9fQ09NTU9OX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2F1ZGlvX2RldmljZV90ZW1wbGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVk
aW9fZGV2aWNlX3RlbXBsYXRlLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
YXVkaW9fZGV2aWNlX3RlbXBsYXRlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NjQgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVESU9fREVW
SUNFX0FORFJPSURfQVVESU9fREVWSUNFX1RFTVBMQVRFX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RV
TEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0FVRElPX0RFVklDRV9URU1QTEFURV9IXwotCi0jaW5j
bHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvbG9nZ2lu
Zy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5jbHVkZSAi
d2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5o
IgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gSW5wdXRUeXBlL091dHB1dFR5cGUgY2FuIGJl
IGFueSBjbGFzcyB0aGF0IGltcGxlbWVudHMgdGhlIGNhcHR1cmluZy9yZW5kZXJpbmcKLS8vIHBh
cnQgb2YgdGhlIEF1ZGlvRGV2aWNlR2VuZXJpYyBBUEkuCi0vLyBDb25zdHJ1Y3Rpb24gYW5kIGRl
c3RydWN0aW9uIG11c3QgYmUgZG9uZSBvbiBvbmUgYW5kIHRoZSBzYW1lIHRocmVhZC4gRWFjaAot
Ly8gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgSW5wdXRUeXBlIGFuZCBPdXRwdXRUeXBlIHdp
bGwgUlRDX0RDSEVDSyBpZiB0aGF0Ci0vLyBpcyBub3QgdGhlIGNhc2UuIEFsbCBpbXBsZW1lbnRl
ZCBtZXRob2RzIG11c3QgYWxzbyBiZSBjYWxsZWQgb24gdGhlIHNhbWUKLS8vIHRocmVhZC4gU2Vl
IGNvbW1lbnRzIGluIGVhY2ggSW5wdXRUeXBlL091dHB1dFR5cGUgY2xhc3MgZm9yIG1vcmUgaW5m
by4KLS8vIEl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgdGhlIHR3byBzdGF0aWMgbWV0aG9kcyAoU2V0
QW5kcm9pZEF1ZGlvRGV2aWNlT2JqZWN0cwotLy8gYW5kIENsZWFyQW5kcm9pZEF1ZGlvRGV2aWNl
T2JqZWN0cykgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQgYnV0IGJvdGggd2lsbAotLy8gUlRDX0NI
RUNLIHRoYXQgdGhlIGNhbGxpbmcgdGhyZWFkIGlzIGF0dGFjaGVkIHRvIGEgSmF2YSBWTS4KLQot
dGVtcGxhdGUgPGNsYXNzIElucHV0VHlwZSwgY2xhc3MgT3V0cHV0VHlwZT4KLWNsYXNzIEF1ZGlv
RGV2aWNlVGVtcGxhdGUgOiBwdWJsaWMgQXVkaW9EZXZpY2VHZW5lcmljIHsKLSBwdWJsaWM6Ci0g
IEF1ZGlvRGV2aWNlVGVtcGxhdGUoQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9f
bGF5ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyKiBhdWRpb19tYW5hZ2Vy
KQotICAgICAgOiBhdWRpb19sYXllcl8oYXVkaW9fbGF5ZXIpLAotICAgICAgICBhdWRpb19tYW5h
Z2VyXyhhdWRpb19tYW5hZ2VyKSwKLSAgICAgICAgb3V0cHV0XyhhdWRpb19tYW5hZ2VyXyksCi0g
ICAgICAgIGlucHV0XyhhdWRpb19tYW5hZ2VyXyksCi0gICAgICAgIGluaXRpYWxpemVkXyhmYWxz
ZSkgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgUlRDX0NIRUNLKGF1ZGlv
X21hbmFnZXIpOwotICAgIGF1ZGlvX21hbmFnZXJfLT5TZXRBY3RpdmVBdWRpb0xheWVyKGF1ZGlv
X2xheWVyKTsKLSAgfQotCi0gIHZpcnR1YWwgfkF1ZGlvRGV2aWNlVGVtcGxhdGUoKSB7IExPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX187IH0KLQotICBpbnQzMl90IEFjdGl2ZUF1ZGlvTGF5ZXIoCi0g
ICAgICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciYgYXVkaW9MYXllcikgY29uc3Qgb3Zl
cnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgYXVkaW9MYXllciA9
IGF1ZGlvX2xheWVyXzsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIEluaXRTdGF0dXMgSW5pdCgp
IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIFJUQ19EQ0hF
Q0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gICAgUlRDX0RDSEVD
SyghaW5pdGlhbGl6ZWRfKTsKLSAgICBpZiAoIWF1ZGlvX21hbmFnZXJfLT5Jbml0KCkpIHsKLSAg
ICAgIHJldHVybiBJbml0U3RhdHVzOjpPVEhFUl9FUlJPUjsKLSAgICB9Ci0gICAgaWYgKG91dHB1
dF8uSW5pdCgpICE9IDApIHsKLSAgICAgIGF1ZGlvX21hbmFnZXJfLT5DbG9zZSgpOwotICAgICAg
cmV0dXJuIEluaXRTdGF0dXM6OlBMQVlPVVRfRVJST1I7Ci0gICAgfQotICAgIGlmIChpbnB1dF8u
SW5pdCgpICE9IDApIHsKLSAgICAgIG91dHB1dF8uVGVybWluYXRlKCk7Ci0gICAgICBhdWRpb19t
YW5hZ2VyXy0+Q2xvc2UoKTsKLSAgICAgIHJldHVybiBJbml0U3RhdHVzOjpSRUNPUkRJTkdfRVJS
T1I7Ci0gICAgfQotICAgIGluaXRpYWxpemVkXyA9IHRydWU7Ci0gICAgcmV0dXJuIEluaXRTdGF0
dXM6Ok9LOwotICB9Ci0KLSAgaW50MzJfdCBUZXJtaW5hdGUoKSBvdmVycmlkZSB7Ci0gICAgTE9H
KElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5D
YWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICAgIGludDMyX3QgZXJyID0gaW5wdXRfLlRlcm1pbmF0
ZSgpOwotICAgIGVyciB8PSBvdXRwdXRfLlRlcm1pbmF0ZSgpOwotICAgIGVyciB8PSAhYXVkaW9f
bWFuYWdlcl8tPkNsb3NlKCk7Ci0gICAgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0gICAgUlRDX0RD
SEVDS19FUShlcnIsIDApOwotICAgIHJldHVybiBlcnI7Ci0gIH0KLQotICBib29sIEluaXRpYWxp
emVkKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0g
ICAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAg
ICByZXR1cm4gaW5pdGlhbGl6ZWRfOwotICB9Ci0KLSAgaW50MTZfdCBQbGF5b3V0RGV2aWNlcygp
IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiAx
OwotICB9Ci0KLSAgaW50MTZfdCBSZWNvcmRpbmdEZXZpY2VzKCkgb3ZlcnJpZGUgewotICAgIExP
RyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICBpbnQzMl90
IFBsYXlvdXREZXZpY2VOYW1lKAotICAgICAgdWludDE2X3QgaW5kZXgsCi0gICAgICBjaGFyIG5h
bWVba0FkbU1heERldmljZU5hbWVTaXplXSwKLSAgICAgIGNoYXIgZ3VpZFtrQWRtTWF4R3VpZFNp
emVdKSBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7
Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBSZWNvcmRpbmdEZXZpY2VOYW1lKAot
ICAgICAgdWludDE2X3QgaW5kZXgsCi0gICAgICBjaGFyIG5hbWVba0FkbU1heERldmljZU5hbWVT
aXplXSwKLSAgICAgIGNoYXIgZ3VpZFtrQWRtTWF4R3VpZFNpemVdKSBvdmVycmlkZSB7Ci0gICAg
RkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9
Ci0KLSAgaW50MzJfdCBTZXRQbGF5b3V0RGV2aWNlKHVpbnQxNl90IGluZGV4KSBvdmVycmlkZSB7
Ci0gICAgLy8gT0sgdG8gdXNlIGJ1dCBpdCBoYXMgbm8gZWZmZWN0IGN1cnJlbnRseSBzaW5jZSBk
ZXZpY2Ugc2VsZWN0aW9uIGlzCi0gICAgLy8gZG9uZSB1c2luZyBBbmRvaWQgQVBJcyBpbnN0ZWFk
LgotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQot
ICBpbnQzMl90IFNldFBsYXlvdXREZXZpY2UoCi0gICAgICBBdWRpb0RldmljZU1vZHVsZTo6V2lu
ZG93c0RldmljZVR5cGUgZGV2aWNlKSBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxk
IG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBTZXRS
ZWNvcmRpbmdEZXZpY2UodWludDE2X3QgaW5kZXgpIG92ZXJyaWRlIHsKLSAgICAvLyBPSyB0byB1
c2UgYnV0IGl0IGhhcyBubyBlZmZlY3QgY3VycmVudGx5IHNpbmNlIGRldmljZSBzZWxlY3Rpb24g
aXMKLSAgICAvLyBkb25lIHVzaW5nIEFuZG9pZCBBUElzIGluc3RlYWQuCi0gICAgTE9HKElORk8p
IDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMyX3QgU2V0UmVj
b3JkaW5nRGV2aWNlKAotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OldpbmRvd3NEZXZpY2VUeXBl
IGRldmljZSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxs
ZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgUGxheW91dElzQXZhaWxhYmxl
KGJvb2wmIGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9O
X187Ci0gICAgYXZhaWxhYmxlID0gdHJ1ZTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMy
X3QgSW5pdFBsYXlvdXQoKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05f
XzsKLSAgICByZXR1cm4gb3V0cHV0Xy5Jbml0UGxheW91dCgpOwotICB9Ci0KLSAgYm9vbCBQbGF5
b3V0SXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19G
VU5DVElPTl9fOwotICAgIHJldHVybiBvdXRwdXRfLlBsYXlvdXRJc0luaXRpYWxpemVkKCk7Ci0g
IH0KLQotICBpbnQzMl90IFJlY29yZGluZ0lzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkgb3Zl
cnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgYXZhaWxhYmxlID0g
dHJ1ZTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMyX3QgSW5pdFJlY29yZGluZygpIG92
ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiBpbnB1
dF8uSW5pdFJlY29yZGluZygpOwotICB9Ci0KLSAgYm9vbCBSZWNvcmRpbmdJc0luaXRpYWxpemVk
KCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAg
cmV0dXJuIGlucHV0Xy5SZWNvcmRpbmdJc0luaXRpYWxpemVkKCk7Ci0gIH0KLQotICBpbnQzMl90
IFN0YXJ0UGxheW91dCgpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9f
OwotICAgIGlmICghYXVkaW9fbWFuYWdlcl8tPklzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCkp
IHsKLSAgICAgIExPRyhXQVJOSU5HKQotICAgICAgICAgIDw8ICJUaGUgYXBwbGljYXRpb24gc2hv
dWxkIHVzZSBNT0RFX0lOX0NPTU1VTklDQVRJT04gYXVkaW8gbW9kZSEiOwotICAgIH0KLSAgICBy
ZXR1cm4gb3V0cHV0Xy5TdGFydFBsYXlvdXQoKTsKLSAgfQotCi0gIGludDMyX3QgU3RvcFBsYXlv
dXQoKSBvdmVycmlkZSB7Ci0gICAgLy8gQXZvaWQgdXNpbmcgYXVkaW8gbWFuZ2VyIChKTkkvSmF2
YSBjb3N0KSBpZiBwbGF5b3V0IHdhcyBpbmFjdGl2ZS4KLSAgICBpZiAoIVBsYXlpbmcoKSkKLSAg
ICAgIHJldHVybiAwOwotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgaW50MzJf
dCBlcnIgPSBvdXRwdXRfLlN0b3BQbGF5b3V0KCk7Ci0gICAgcmV0dXJuIGVycjsKLSAgfQotCi0g
IGJvb2wgUGxheWluZygpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5D
VElPTl9fOwotICAgIHJldHVybiBvdXRwdXRfLlBsYXlpbmcoKTsKLSAgfQotCi0gIGludDMyX3Qg
U3RhcnRSZWNvcmRpbmcoKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05f
XzsKLSAgICBpZiAoIWF1ZGlvX21hbmFnZXJfLT5Jc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgp
KSB7Ci0gICAgICBMT0coV0FSTklORykKLSAgICAgICAgICA8PCAiVGhlIGFwcGxpY2F0aW9uIHNo
b3VsZCB1c2UgTU9ERV9JTl9DT01NVU5JQ0FUSU9OIGF1ZGlvIG1vZGUhIjsKLSAgICB9Ci0gICAg
cmV0dXJuIGlucHV0Xy5TdGFydFJlY29yZGluZygpOwotICB9Ci0KLSAgaW50MzJfdCBTdG9wUmVj
b3JkaW5nKCkgb3ZlcnJpZGUgewotICAgIC8vIEF2b2lkIHVzaW5nIGF1ZGlvIG1hbmdlciAoSk5J
L0phdmEgY29zdCkgaWYgcmVjb3JkaW5nIHdhcyBpbmFjdGl2ZS4KLSAgICBMT0coSU5GTykgPDwg
X19GVU5DVElPTl9fOwotICAgIGlmICghUmVjb3JkaW5nKCkpCi0gICAgICByZXR1cm4gMDsKLSAg
ICBpbnQzMl90IGVyciA9IGlucHV0Xy5TdG9wUmVjb3JkaW5nKCk7Ci0gICAgcmV0dXJuIGVycjsK
LSAgfQotCi0gIGJvb2wgUmVjb3JkaW5nKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBp
bnB1dF8uUmVjb3JkaW5nKCkgOwotICB9Ci0KLSAgaW50MzJfdCBTZXRBR0MoYm9vbCBlbmFibGUp
IG92ZXJyaWRlIHsKLSAgICBpZiAoZW5hYmxlKSB7Ci0gICAgICBGQVRBTCgpIDw8ICJTaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIjsKLSAgICB9Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgYm9vbCBB
R0MoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAg
ICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICBpbnQzMl90IFNldFdhdmVPdXRWb2x1bWUoCi0gICAg
ICB1aW50MTZfdCB2b2x1bWVMZWZ0LCB1aW50MTZfdCB2b2x1bWVSaWdodCkgb3ZlcnJpZGUgewot
ICAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7
Ci0gIH0KLQotICBpbnQzMl90IFdhdmVPdXRWb2x1bWUoCi0gICAgICB1aW50MTZfdCYgdm9sdW1l
TGVmdCwgdWludDE2X3QmIHZvbHVtZVJpZ2h0KSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwo
KSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAg
aW50MzJfdCBJbml0U3BlYWtlcigpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5D
VElPTl9fOwotICAgIHJldHVybiAwOwotICB9Ci0KLSAgYm9vbCBTcGVha2VySXNJbml0aWFsaXpl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAg
IHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW50MzJfdCBJbml0TWljcm9waG9uZSgpIG92ZXJyaWRl
IHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiAwOwotICB9Ci0K
LSAgYm9vbCBNaWNyb3Bob25lSXNJbml0aWFsaXplZCgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBM
T0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW50
MzJfdCBTcGVha2VyVm9sdW1lSXNBdmFpbGFibGUoYm9vbCYgYXZhaWxhYmxlKSBvdmVycmlkZSB7
Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gb3V0cHV0Xy5TcGVh
a2VyVm9sdW1lSXNBdmFpbGFibGUoYXZhaWxhYmxlKTsKLSAgfQotCi0gIGludDMyX3QgU2V0U3Bl
YWtlclZvbHVtZSh1aW50MzJfdCB2b2x1bWUpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwg
X19GVU5DVElPTl9fOwotICAgIHJldHVybiBvdXRwdXRfLlNldFNwZWFrZXJWb2x1bWUodm9sdW1l
KTsKLSAgfQotCi0gIGludDMyX3QgU3BlYWtlclZvbHVtZSh1aW50MzJfdCYgdm9sdW1lKSBjb25z
dCBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4g
b3V0cHV0Xy5TcGVha2VyVm9sdW1lKHZvbHVtZSk7Ci0gIH0KLQotICBpbnQzMl90IE1heFNwZWFr
ZXJWb2x1bWUodWludDMyX3QmIG1heFZvbHVtZSkgY29uc3Qgb3ZlcnJpZGUgewotICAgIExPRyhJ
TkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgcmV0dXJuIG91dHB1dF8uTWF4U3BlYWtlclZvbHVt
ZShtYXhWb2x1bWUpOwotICB9Ci0KLSAgaW50MzJfdCBNaW5TcGVha2VyVm9sdW1lKHVpbnQzMl90
JiBtaW5Wb2x1bWUpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElP
Tl9fOwotICAgIHJldHVybiBvdXRwdXRfLk1pblNwZWFrZXJWb2x1bWUobWluVm9sdW1lKTsKLSAg
fQotCi0gIGludDMyX3QgU3BlYWtlclZvbHVtZVN0ZXBTaXplKHVpbnQxNl90JiBzdGVwU2l6ZSkg
Y29uc3Qgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQi
OwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgTWljcm9waG9uZVZvbHVtZUlzQXZh
aWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkgb3ZlcnJpZGV7Ci0gICAgYXZhaWxhYmxlID0gZmFsc2U7
Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0x
OwotICB9Ci0KLSAgaW50MzJfdCBTZXRNaWNyb3Bob25lVm9sdW1lKHVpbnQzMl90IHZvbHVtZSkg
b3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAg
IHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgTWljcm9waG9uZVZvbHVtZSh1aW50MzJfdCYg
dm9sdW1lKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJl
IGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBNYXhNaWNyb3Bob25l
Vm9sdW1lKHVpbnQzMl90JiBtYXhWb2x1bWUpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgp
IDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBp
bnQzMl90IE1pbk1pY3JvcGhvbmVWb2x1bWUodWludDMyX3QmIG1pblZvbHVtZSkgY29uc3Qgb3Zl
cnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJl
dHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgTWljcm9waG9uZVZvbHVtZVN0ZXBTaXplKHVpbnQx
Nl90JiBzdGVwU2l6ZSkgY29uc3Qgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBu
ZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU3BlYWtl
ck11dGVJc0F2YWlsYWJsZShib29sJiBhdmFpbGFibGUpIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgp
IDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBp
bnQzMl90IFNldFNwZWFrZXJNdXRlKGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgRkFUQUwo
KSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAg
aW50MzJfdCBTcGVha2VyTXV0ZShib29sJiBlbmFibGVkKSBjb25zdCBvdmVycmlkZSB7Ci0gICAg
RkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9
Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25lTXV0ZUlzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkg
b3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIk5vdCBpbXBsZW1lbnRlZCI7Ci0gICAgcmV0dXJu
IC0xOwotICB9Ci0KLSAgaW50MzJfdCBTZXRNaWNyb3Bob25lTXV0ZShib29sIGVuYWJsZSkgb3Zl
cnJpZGUgewotICAgIEZBVEFMKCkgPDwgIk5vdCBpbXBsZW1lbnRlZCI7Ci0gICAgcmV0dXJuIC0x
OwotICB9Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25lTXV0ZShib29sJiBlbmFibGVkKSBjb25zdCBv
dmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiTm90IGltcGxlbWVudGVkIjsKLSAgICByZXR1cm4g
LTE7Ci0gIH0KLQotICBpbnQzMl90IE1pY3JvcGhvbmVCb29zdElzQXZhaWxhYmxlKGJvb2wmIGF2
YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxs
ZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU2V0TWljcm9waG9uZUJvb3N0
KGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVyIGJl
IGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBNaWNyb3Bob25lQm9v
c3QoYm9vbCYgZW5hYmxlZCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3Vs
ZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU3Rl
cmVvUGxheW91dElzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkgb3ZlcnJpZGUgewotICAgIExP
RyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187Ci0gICAgYXZhaWxhYmxlID0gZmFsc2U7Ci0gICAgcmV0
dXJuIDA7Ci0gIH0KLQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydC4KLSAgaW50MzJf
dCBTZXRTdGVyZW9QbGF5b3V0KGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8p
IDw8IF9fRlVOQ1RJT05fXzsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICAvLyBUT0RPKGhlbnJp
a2EpOiBhZGQgc3VwcG9ydC4KLSAgaW50MzJfdCBTdGVyZW9QbGF5b3V0KGJvb2wmIGVuYWJsZWQp
IGNvbnN0IG92ZXJyaWRlIHsKLSAgICBlbmFibGVkID0gZmFsc2U7Ci0gICAgRkFUQUwoKSA8PCAi
U2hvdWxkIG5ldmVyIGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJf
dCBTdGVyZW9SZWNvcmRpbmdJc0F2YWlsYWJsZShib29sJiBhdmFpbGFibGUpIG92ZXJyaWRlIHsK
LSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGF2YWlsYWJsZSA9IGZhbHNlOwot
ICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW50MzJfdCBTZXRTdGVyZW9SZWNvcmRpbmcoYm9vbCBl
bmFibGUpIG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIHJl
dHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU3RlcmVvUmVjb3JkaW5nKGJvb2wmIGVuYWJsZWQp
IGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAgIGVu
YWJsZWQgPSBmYWxzZTsKLSAgICByZXR1cm4gMDsKLSAgfQotCi0gIGludDMyX3QgU2V0UGxheW91
dEJ1ZmZlcigKLSAgICAgIGNvbnN0IEF1ZGlvRGV2aWNlTW9kdWxlOjpCdWZmZXJUeXBlIHR5cGUs
IHVpbnQxNl90IHNpemVNUykgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZl
ciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgUGxheW91dEJ1
ZmZlcigKLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjpCdWZmZXJUeXBlJiB0eXBlLCB1aW50MTZf
dCYgc2l6ZU1TKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgRkFUQUwoKSA8PCAiU2hvdWxkIG5ldmVy
IGJlIGNhbGxlZCI7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0KLSAgaW50MzJfdCBQbGF5b3V0RGVs
YXkodWludDE2X3QmIGRlbGF5X21zKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgLy8gQmVzdCBndWVz
cyB3ZSBjYW4gZG8gaXMgdG8gdXNlIGhhbGYgb2YgdGhlIGVzdGltYXRlZCB0b3RhbCBkZWxheS4K
LSAgICBkZWxheV9tcyA9IGF1ZGlvX21hbmFnZXJfLT5HZXREZWxheUVzdGltYXRlSW5NaWxsaXNl
Y29uZHMoKSAvIDI7Ci0gICAgUlRDX0RDSEVDS19HVChkZWxheV9tcywgMCk7Ci0gICAgcmV0dXJu
IDA7Ci0gIH0KLQotICBpbnQzMl90IFJlY29yZGluZ0RlbGF5KHVpbnQxNl90JiBkZWxheV9tcykg
Y29uc3Qgb3ZlcnJpZGUgewotICAgIC8vIEJlc3QgZ3Vlc3Mgd2UgY2FuIGRvIGlzIHRvIHVzZSBo
YWxmIG9mIHRoZSBlc3RpbWF0ZWQgdG90YWwgZGVsYXkuCi0gICAgTE9HKElORk8pIDw8IF9fRlVO
Q1RJT05fXzsKLSAgICBkZWxheV9tcyA9IGF1ZGlvX21hbmFnZXJfLT5HZXREZWxheUVzdGltYXRl
SW5NaWxsaXNlY29uZHMoKSAvIDI7Ci0gICAgUlRDX0RDSEVDS19HVChkZWxheV9tcywgMCk7Ci0g
ICAgcmV0dXJuIDA7Ci0gIH0KLQotICBpbnQzMl90IENQVUxvYWQodWludDE2X3QmIGxvYWQpIGNv
bnN0IG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsK
LSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBib29sIFBsYXlvdXRXYXJuaW5nKCkgY29uc3Qgb3Zl
cnJpZGUgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgUGxheW91dEVycm9yKCkg
Y29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIGJvb2wgUmVjb3Jk
aW5nV2FybmluZygpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQot
ICBib29sIFJlY29yZGluZ0Vycm9yKCkgY29uc3Qgb3ZlcnJpZGUgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIHZvaWQgQ2xlYXJQbGF5b3V0V2FybmluZygpIG92ZXJyaWRlIHsgTE9HKElO
Rk8pIDw8IF9fRlVOQ1RJT05fXzsgfQotCi0gIHZvaWQgQ2xlYXJQbGF5b3V0RXJyb3IoKSBvdmVy
cmlkZSB7IExPRyhJTkZPKSA8PCBfX0ZVTkNUSU9OX187IH0KLQotICB2b2lkIENsZWFyUmVjb3Jk
aW5nV2FybmluZygpIG92ZXJyaWRlIHsgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsgfQotCi0g
IHZvaWQgQ2xlYXJSZWNvcmRpbmdFcnJvcigpIG92ZXJyaWRlIHsgTE9HKElORk8pIDw8IF9fRlVO
Q1RJT05fXzsgfQotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIq
IGF1ZGlvQnVmZmVyKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXzsK
LSAgICBvdXRwdXRfLkF0dGFjaEF1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyKTsKLSAgICBpbnB1dF8u
QXR0YWNoQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXIpOwotICB9Ci0KLSAgLy8gVE9ETyhoZW5yaWth
KTogcmVtb3ZlCi0gIGludDMyX3QgU2V0UGxheW91dFNhbXBsZVJhdGUoY29uc3QgdWludDMyX3Qg
c2FtcGxlc1BlclNlYykgb3ZlcnJpZGUgewotICAgIEZBVEFMKCkgPDwgIlNob3VsZCBuZXZlciBi
ZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0gIGludDMyX3QgU2V0TG91ZHNwZWFr
ZXJTdGF0dXMoYm9vbCBlbmFibGUpIG92ZXJyaWRlIHsKLSAgICBGQVRBTCgpIDw8ICJTaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIjsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLQotICBpbnQzMl90IEdldExv
dWRzcGVha2VyU3RhdHVzKGJvb2wmIGVuYWJsZSkgY29uc3Qgb3ZlcnJpZGUgewotICAgIEZBVEFM
KCkgPDwgIlNob3VsZCBuZXZlciBiZSBjYWxsZWQiOwotICAgIHJldHVybiAtMTsKLSAgfQotCi0g
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGJvdGggc3VwcG9ydHMgYnVpbHQgaW4gQUVD
IGFuZCB0aGUgZGV2aWNlCi0gIC8vIGlzIG5vdCBibGFja2xpc3RlZC4KLSAgLy8gQ3VycmVudGx5
LCBpZiBPcGVuU0wgRVMgaXMgdXNlZCBpbiBib3RoIGRpcmVjdGlvbnMsIHRoaXMgbWV0aG9kIHdp
bGwgc3RpbGwKLSAgLy8gcmVwb3J0IHRoZSBjb3JyZWN0IHZhbHVlIGFuZCBpdCBoYXMgdGhlIGNv
cnJlY3QgZWZmZWN0LiBBcyBhbiBleGFtcGxlOgotICAvLyBhIGRldmljZSBzdXBwb3J0cyBidWls
dCBpbiBBRUMgYW5kIHRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZS4gTGliamluZ2xlCi0gIC8vIHdp
bGwgdGhlbiBkaXNhYmxlIHRoZSBXZWJSVEMgYmFzZWQgQUVDIGFuZCB0aGF0IHdpbGwgd29yayBm
b3IgYWxsIGRldmljZXMKLSAgLy8gKG1haW5seSBOZXh1cykgZXZlbiB3aGVuIE9wZW5TTCBFUyBp
cyB1c2VkIGZvciBpbnB1dCBzaW5jZSBvdXIgY3VycmVudAotICAvLyBpbXBsZW1lbnRhdGlvbiB3
aWxsIGVuYWJsZSBidWlsdC1pbiBBRUMgYnkgZGVmYXVsdCBhbHNvIGZvciBPcGVuU0wgRVMuCi0g
IC8vIFRoZSBvbmx5ICJiYWQiIHRoaW5nIHRoYXQgaGFwcGVucyB0b2RheSBpcyB0aGF0IHdoZW4g
TGliamluZ2xlIGNhbGxzCi0gIC8vIE9wZW5TTEVTUmVjb3JkZXI6OkVuYWJsZUJ1aWx0SW5BRUMo
KSBpdCB3aWxsIG5vdCBoYXZlIGFueSByZWFsIGVmZmVjdCBhbmQKLSAgLy8gYSAiTm90IEltcGxl
bWVudGVkIiBsb2cgd2lsbCBiZSBmaWxlZC4gVGhpcyBub24tcGVyZmVjdCBzdGF0ZSB3aWxsIHJl
bWFpbgotICAvLyB1bnRpbCBJIGhhdmUgYWRkZWQgZnVsbCBzdXBwb3J0IGZvciBhdWRpbyBlZmZl
Y3RzIGJhc2VkIG9uIE9wZW5TTCBFUyBBUElzLgotICBib29sIEJ1aWx0SW5BRUNJc0F2YWlsYWJs
ZSgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElPTl9fOwotICAg
IHJldHVybiBhdWRpb19tYW5hZ2VyXy0+SXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgp
OwotICB9Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIGltcGxlbWVudGF0aW9uIGZvciBPcGVu
U0wgRVMgYmFzZWQgYXVkaW8gYXMgd2VsbC4KLSAgaW50MzJfdCBFbmFibGVCdWlsdEluQUVDKGJv
b2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJT05fXyA8PCAi
KCIgPDwgZW5hYmxlIDw8ICIpIjsKLSAgICBSVENfQ0hFQ0soQnVpbHRJbkFFQ0lzQXZhaWxhYmxl
KCkpIDw8ICJIVyBBRUMgaXMgbm90IGF2YWlsYWJsZSI7Ci0gICAgcmV0dXJuIGlucHV0Xy5FbmFi
bGVCdWlsdEluQUVDKGVuYWJsZSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRl
dmljZSBib3RoIHN1cHBvcnRzIGJ1aWx0IGluIEFHQyBhbmQgdGhlIGRldmljZQotICAvLyBpcyBu
b3QgYmxhY2tsaXN0ZWQuCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBpbXBsZW1lbnRhdGlvbiBm
b3IgT3BlblNMIEVTIGJhc2VkIGF1ZGlvIGFzIHdlbGwuCi0gIC8vIEluIGFkZGl0aW9uLCBzZWUg
Y29tbWVudHMgZm9yIEJ1aWx0SW5BRUNJc0F2YWlsYWJsZSgpLgotICBib29sIEJ1aWx0SW5BR0NJ
c0F2YWlsYWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICBMT0coSU5GTykgPDwgX19GVU5DVElP
Tl9fOwotICAgIHJldHVybiBhdWRpb19tYW5hZ2VyXy0+SXNBdXRvbWF0aWNHYWluQ29udHJvbFN1
cHBvcnRlZCgpOwotICB9Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIGltcGxlbWVudGF0aW9u
IGZvciBPcGVuU0wgRVMgYmFzZWQgYXVkaW8gYXMgd2VsbC4KLSAgaW50MzJfdCBFbmFibGVCdWls
dEluQUdDKGJvb2wgZW5hYmxlKSBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9fRlVOQ1RJ
T05fXyA8PCAiKCIgPDwgZW5hYmxlIDw8ICIpIjsKLSAgICBSVENfQ0hFQ0soQnVpbHRJbkFHQ0lz
QXZhaWxhYmxlKCkpIDw8ICJIVyBBR0MgaXMgbm90IGF2YWlsYWJsZSI7Ci0gICAgcmV0dXJuIGlu
cHV0Xy5FbmFibGVCdWlsdEluQUdDKGVuYWJsZSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIGRldmljZSBib3RoIHN1cHBvcnRzIGJ1aWx0IGluIE5TIGFuZCB0aGUgZGV2aWNlCi0g
IC8vIGlzIG5vdCBibGFja2xpc3RlZC4KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIGltcGxlbWVu
dGF0aW9uIGZvciBPcGVuU0wgRVMgYmFzZWQgYXVkaW8gYXMgd2VsbC4KLSAgLy8gSW4gYWRkaXRp
b24sIHNlZSBjb21tZW50cyBmb3IgQnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkuCi0gIGJvb2wgQnVp
bHRJbk5TSXNBdmFpbGFibGUoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgTE9HKElORk8pIDw8IF9f
RlVOQ1RJT05fXzsKLSAgICByZXR1cm4gYXVkaW9fbWFuYWdlcl8tPklzTm9pc2VTdXBwcmVzc29y
U3VwcG9ydGVkKCk7Ci0gIH0KLQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgaW1wbGVtZW50YXRp
b24gZm9yIE9wZW5TTCBFUyBiYXNlZCBhdWRpbyBhcyB3ZWxsLgotICBpbnQzMl90IEVuYWJsZUJ1
aWx0SW5OUyhib29sIGVuYWJsZSkgb3ZlcnJpZGUgewotICAgIExPRyhJTkZPKSA8PCBfX0ZVTkNU
SU9OX18gPDwgIigiIDw8IGVuYWJsZSA8PCAiKSI7Ci0gICAgUlRDX0NIRUNLKEJ1aWx0SW5OU0lz
QXZhaWxhYmxlKCkpIDw8ICJIVyBOUyBpcyBub3QgYXZhaWxhYmxlIjsKLSAgICByZXR1cm4gaW5w
dXRfLkVuYWJsZUJ1aWx0SW5OUyhlbmFibGUpOwotICB9Ci0KLSBwcml2YXRlOgotICBydGM6OlRo
cmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotCi0gIC8vIExvY2FsIGNvcHkgb2YgdGhlIGF1
ZGlvIGxheWVyIHNldCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoZQotICAvLyBBdWRpb0Rldmlj
ZU1vZHVsZUltcGwgaW5zdGFuY2UuIFJlYWQgb25seSB2YWx1ZS4KLSAgY29uc3QgQXVkaW9EZXZp
Y2VNb2R1bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXJfOwotCi0gIC8vIE5vbi1vd25pbmcgcmF3
IHBvaW50ZXIgdG8gQXVkaW9NYW5hZ2VyIGluc3RhbmNlIGdpdmVuIHRvIHVzZSBhdAotICAvLyBj
b25zdHJ1Y3Rpb24uIFRoZSByZWFsIG9iamVjdCBpcyBvd25lZCBieSBBdWRpb0RldmljZU1vZHVs
ZUltcGwgYW5kIHRoZQotICAvLyBsaWZlIHRpbWUgaXMgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUg
QXVkaW9EZXZpY2VNb2R1bGVJbXBsLCBoZW5jZSB0aGVyZQotICAvLyBpcyBubyByaXNrIG9mIHJl
YWRpbmcgYSBOVUxMIHBvaW50ZXIgYXQgYW55IHRpbWUgaW4gdGhpcyBjbGFzcy4KLSAgQXVkaW9N
YW5hZ2VyKiBjb25zdCBhdWRpb19tYW5hZ2VyXzsKLQotICBPdXRwdXRUeXBlIG91dHB1dF87Ci0K
LSAgSW5wdXRUeXBlIGlucHV0XzsKLQotICBib29sIGluaXRpYWxpemVkXzsKLX07Ci0KLX0gIC8v
IG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJ
Q0VfQU5EUk9JRF9BVURJT19ERVZJQ0VfVEVNUExBVEVfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
YXVkaW9fZGV2aWNlX3VuaXR0ZXN0LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVk
aW9fZGV2aWNlX3VuaXR0ZXN0LmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2F1ZGlvX2RldmljZV91bml0dGVzdC5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMjUgKzAsMCBA
QAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMu
IEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBB
biBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZv
dW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBh
dXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVk
ZSA8bGltaXRzPgotI2luY2x1ZGUgPGxpc3Q+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUg
PG51bWVyaWM+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1
ZGUgIndlYnJ0Yy9iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NyaXRp
Y2Fsc2VjdGlvbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2Zvcm1hdF9tYWNyb3MuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvYmFzZS9zY29wZWRfcmVmX3B0ci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9i
YXNlL3RpbWV1dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9idWlsZF9pbmZvLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRpYWxpemVkLmgiCi0jaW5jbHVkZSAi
d2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2F1ZGlvX2RldmljZV9pbXBsLmgiCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlLmgiCi0j
aW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2luY2x1ZGUvbW9ja19hdWRpb190
cmFuc3BvcnQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvc3lzdGVtX3dyYXBwZXJzL2luY2x1ZGUvZXZl
bnRfd3JhcHBlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9zeXN0ZW1fd3JhcHBlcnMvaW5jbHVkZS9z
bGVlcC5oIgotI2luY2x1ZGUgIndlYnJ0Yy90ZXN0L2dtb2NrLmgiCi0jaW5jbHVkZSAid2VicnRj
L3Rlc3QvZ3Rlc3QuaCIKLSNpbmNsdWRlICJ3ZWJydGMvdGVzdC90ZXN0c3VwcG9ydC9maWxldXRp
bHMuaCIKLQotdXNpbmcgc3RkOjpjb3V0OwotdXNpbmcgc3RkOjplbmRsOwotdXNpbmcgOjp0ZXN0
aW5nOjpfOwotdXNpbmcgOjp0ZXN0aW5nOjpBdExlYXN0OwotdXNpbmcgOjp0ZXN0aW5nOjpHdDsK
LXVzaW5nIDo6dGVzdGluZzo6SW52b2tlOwotdXNpbmcgOjp0ZXN0aW5nOjpOaWNlTW9jazsKLXVz
aW5nIDo6dGVzdGluZzo6Tm90TnVsbDsKLXVzaW5nIDo6dGVzdGluZzo6UmV0dXJuOwotCi0vLyAj
ZGVmaW5lIEVOQUJMRV9ERUJVR19QUklOVEYKLSNpZmRlZiBFTkFCTEVfREVCVUdfUFJJTlRGCi0j
ZGVmaW5lIFBSSU5URCguLi4pIGZwcmludGYoc3RkZXJyLCBfX1ZBX0FSR1NfXyk7Ci0jZWxzZQot
I2RlZmluZSBQUklOVEQoLi4uKSAoKHZvaWQpMCkKLSNlbmRpZgotI2RlZmluZSBQUklOVCguLi4p
IGZwcmludGYoc3RkZXJyLCBfX1ZBX0FSR1NfXyk7Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0v
LyBOdW1iZXIgb2YgY2FsbGJhY2tzIChpbnB1dCBvciBvdXRwdXQpIHRoZSB0ZXN0cyB3YWl0cyBm
b3IgYmVmb3JlIHdlIHNldAotLy8gYW4gZXZlbnQgaW5kaWNhdGluZyB0aGF0IHRoZSB0ZXN0IHdh
cyBPSy4KLXN0YXRpYyBjb25zdCBzaXplX3Qga051bUNhbGxiYWNrcyA9IDEwOwotLy8gTWF4IGFt
b3VudCBvZiB0aW1lIHdlIHdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHNldCB3aGlsZSBjb3VudGlu
ZyBjYWxsYmFja3MuCi1zdGF0aWMgY29uc3QgaW50IGtUZXN0VGltZU91dEluTWlsbGlzZWNvbmRz
ID0gMTAgKiAxMDAwOwotLy8gQXZlcmFnZSBudW1iZXIgb2YgYXVkaW8gY2FsbGJhY2tzIHBlciBz
ZWNvbmQgYXNzdW1pbmcgMTBtcyBwYWNrZXQgc2l6ZS4KLXN0YXRpYyBjb25zdCBzaXplX3Qga051
bUNhbGxiYWNrc1BlclNlY29uZCA9IDEwMDsKLS8vIFBsYXkgb3V0IGEgdGVzdCBmaWxlIGR1cmlu
ZyB0aGlzIHRpbWUgKHVuaXQgaXMgaW4gc2Vjb25kcykuCi1zdGF0aWMgY29uc3QgaW50IGtGaWxl
UGxheVRpbWVJblNlYyA9IDU7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IGtCaXRzUGVyU2FtcGxlID0g
MTY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IGtCeXRlc1BlclNhbXBsZSA9IGtCaXRzUGVyU2FtcGxl
IC8gODsKLS8vIFJ1biB0aGUgZnVsbC1kdXBsZXggdGVzdCBkdXJpbmcgdGhpcyB0aW1lICh1bml0
IGlzIGluIHNlY29uZHMpLgotLy8gTm90ZSB0aGF0IGZpcnN0IHxrTnVtSWdub3JlRmlyc3RDYWxs
YmFja3N8IGFyZSBpZ25vcmVkLgotc3RhdGljIGNvbnN0IGludCBrRnVsbER1cGxleFRpbWVJblNl
YyA9IDU7Ci0vLyBXYWl0IGZvciB0aGUgY2FsbGJhY2sgc2VxdWVuY2UgdG8gc3RhYmlsaXplIGJ5
IGlnbm9yaW5nIHRoaXMgYW1vdW50IG9mIHRoZQotLy8gaW5pdGlhbCBjYWxsYmFja3MgKGF2b2lk
cyBpbml0aWFsIEZJRk8gYWNjZXNzKS4KLS8vIE9ubHkgdXNlZCBpbiB0aGUgUnVuUGxheW91dEFu
ZFJlY29yZGluZ0luRnVsbER1cGxleCB0ZXN0Lgotc3RhdGljIGNvbnN0IHNpemVfdCBrTnVtSWdu
b3JlRmlyc3RDYWxsYmFja3MgPSA1MDsKLS8vIFNldHMgdGhlIG51bWJlciBvZiBpbXB1bHNlcyBw
ZXIgc2Vjb25kIGluIHRoZSBsYXRlbmN5IHRlc3QuCi1zdGF0aWMgY29uc3QgaW50IGtJbXB1bHNl
RnJlcXVlbmN5SW5IeiA9IDE7Ci0vLyBMZW5ndGggb2Ygcm91bmQtdHJpcCBsYXRlbmN5IG1lYXN1
cmVtZW50cy4gTnVtYmVyIG9mIHRyYW5zbWl0dGVkIGltcHVsc2VzCi0vLyBpcyBrSW1wdWxzZUZy
ZXF1ZW5jeUluSHogKiBrTWVhc3VyZUxhdGVuY3lUaW1lSW5TZWMgLSAxLgotc3RhdGljIGNvbnN0
IGludCBrTWVhc3VyZUxhdGVuY3lUaW1lSW5TZWMgPSAxMTsKLS8vIFV0aWxpemVkIGluIHJvdW5k
LXRyaXAgbGF0ZW5jeSBtZWFzdXJlbWVudHMgdG8gYXZvaWQgY2FwdHVyaW5nIG5vaXNlIHNhbXBs
ZXMuCi1zdGF0aWMgY29uc3QgaW50IGtJbXB1bHNlVGhyZXNob2xkID0gMTAwMDsKLXN0YXRpYyBj
b25zdCBjaGFyIGtUYWdbXSA9ICJbLi4uLi4uLi4uLl0gIjsKLQotZW51bSBUcmFuc3BvcnRUeXBl
IHsKLSAga1BsYXlvdXQgPSAweDEsCi0gIGtSZWNvcmRpbmcgPSAweDIsCi19OwotCi0vLyBJbnRl
cmZhY2UgZm9yIHByb2Nlc3NpbmcgdGhlIGF1ZGlvIHN0cmVhbS4gUmVhbCBpbXBsZW1lbnRhdGlv
bnMgY2FuIGUuZy4KLS8vIHJ1biBhdWRpbyBpbiBsb29wYmFjaywgcmVhZCBhdWRpbyBmcm9tIGEg
ZmlsZSBvciBwZXJmb3JtIGxhdGVuY3kKLS8vIG1lYXN1cmVtZW50cy4KLWNsYXNzIEF1ZGlvU3Ry
ZWFtSW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIHZpcnR1YWwgdm9pZCBXcml0ZShjb25zdCB2b2lk
KiBzb3VyY2UsIHNpemVfdCBudW1fZnJhbWVzKSA9IDA7Ci0gIHZpcnR1YWwgdm9pZCBSZWFkKHZv
aWQqIGRlc3RpbmF0aW9uLCBzaXplX3QgbnVtX2ZyYW1lcykgPSAwOwotIHByb3RlY3RlZDoKLSAg
dmlydHVhbCB+QXVkaW9TdHJlYW1JbnRlcmZhY2UoKSB7fQotfTsKLQotLy8gUmVhZHMgYXVkaW8g
c2FtcGxlcyBmcm9tIGEgUENNIGZpbGUgd2hlcmUgdGhlIGZpbGUgaXMgc3RvcmVkIGluIG1lbW9y
eSBhdAotLy8gY29uc3RydWN0aW9uLgotY2xhc3MgRmlsZUF1ZGlvU3RyZWFtIDogcHVibGljIEF1
ZGlvU3RyZWFtSW50ZXJmYWNlIHsKLSBwdWJsaWM6Ci0gIEZpbGVBdWRpb1N0cmVhbSgKLSAgICAg
IHNpemVfdCBudW1fY2FsbGJhY2tzLCBjb25zdCBzdGQ6OnN0cmluZyYgZmlsZV9uYW1lLCBpbnQg
c2FtcGxlX3JhdGUpCi0gICAgICA6IGZpbGVfc2l6ZV9pbl9ieXRlc18oMCksCi0gICAgICAgIHNh
bXBsZV9yYXRlXyhzYW1wbGVfcmF0ZSksCi0gICAgICAgIGZpbGVfcG9zXygwKSB7Ci0gICAgZmls
ZV9zaXplX2luX2J5dGVzXyA9IHRlc3Q6OkdldEZpbGVTaXplKGZpbGVfbmFtZSk7Ci0gICAgc2Ft
cGxlX3JhdGVfID0gc2FtcGxlX3JhdGU7Ci0gICAgRVhQRUNUX0dFKGZpbGVfc2l6ZV9pbl9jYWxs
YmFja3MoKSwgbnVtX2NhbGxiYWNrcykKLSAgICAgICAgPDwgIlNpemUgb2YgdGVzdCBmaWxlIGlz
IG5vdCBsYXJnZSBlbm91Z2ggdG8gbGFzdCBkdXJpbmcgdGhlIHRlc3QuIjsKLSAgICBjb25zdCBz
aXplX3QgbnVtXzE2Yml0X3NhbXBsZXMgPQotICAgICAgICB0ZXN0OjpHZXRGaWxlU2l6ZShmaWxl
X25hbWUpIC8ga0J5dGVzUGVyU2FtcGxlOwotICAgIGZpbGVfLnJlc2V0KG5ldyBpbnQxNl90W251
bV8xNmJpdF9zYW1wbGVzXSk7Ci0gICAgRklMRSogYXVkaW9fZmlsZSA9IGZvcGVuKGZpbGVfbmFt
ZS5jX3N0cigpLCAicmIiKTsKLSAgICBFWFBFQ1RfTkUoYXVkaW9fZmlsZSwgbnVsbHB0cik7Ci0g
ICAgc2l6ZV90IG51bV9zYW1wbGVzX3JlYWQgPSBmcmVhZCgKLSAgICAgICAgZmlsZV8uZ2V0KCks
IHNpemVvZihpbnQxNl90KSwgbnVtXzE2Yml0X3NhbXBsZXMsIGF1ZGlvX2ZpbGUpOwotICAgIEVY
UEVDVF9FUShudW1fc2FtcGxlc19yZWFkLCBudW1fMTZiaXRfc2FtcGxlcyk7Ci0gICAgZmNsb3Nl
KGF1ZGlvX2ZpbGUpOwotICB9Ci0KLSAgLy8gQXVkaW9TdHJlYW1JbnRlcmZhY2U6OldyaXRlKCkg
aXMgbm90IGltcGxlbWVudGVkLgotICB2b2lkIFdyaXRlKGNvbnN0IHZvaWQqIHNvdXJjZSwgc2l6
ZV90IG51bV9mcmFtZXMpIG92ZXJyaWRlIHt9Ci0KLSAgLy8gUmVhZCBzYW1wbGVzIGZyb20gZmls
ZSBzdG9yZWQgaW4gbWVtb3J5IChhdCBjb25zdHJ1Y3Rpb24pIGFuZCBjb3B5Ci0gIC8vIHxudW1f
ZnJhbWVzfCAoPD0+IDEwbXMpIHRvIHRoZSB8ZGVzdGluYXRpb258IGJ5dGUgYnVmZmVyLgotICB2
b2lkIFJlYWQodm9pZCogZGVzdGluYXRpb24sIHNpemVfdCBudW1fZnJhbWVzKSBvdmVycmlkZSB7
Ci0gICAgbWVtY3B5KGRlc3RpbmF0aW9uLAotICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQxNl90
Kj4gKCZmaWxlX1tmaWxlX3Bvc19dKSwKLSAgICAgICAgICAgbnVtX2ZyYW1lcyAqIHNpemVvZihp
bnQxNl90KSk7Ci0gICAgZmlsZV9wb3NfICs9IG51bV9mcmFtZXM7Ci0gIH0KLQotICBpbnQgZmls
ZV9zaXplX2luX3NlY29uZHMoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
Ci0gICAgICAgIGZpbGVfc2l6ZV9pbl9ieXRlc18gLyAoa0J5dGVzUGVyU2FtcGxlICogc2FtcGxl
X3JhdGVfKSk7Ci0gIH0KLSAgc2l6ZV90IGZpbGVfc2l6ZV9pbl9jYWxsYmFja3MoKSBjb25zdCB7
Ci0gICAgcmV0dXJuIGZpbGVfc2l6ZV9pbl9zZWNvbmRzKCkgKiBrTnVtQ2FsbGJhY2tzUGVyU2Vj
b25kOwotICB9Ci0KLSBwcml2YXRlOgotICBzaXplX3QgZmlsZV9zaXplX2luX2J5dGVzXzsKLSAg
aW50IHNhbXBsZV9yYXRlXzsKLSAgc3RkOjp1bmlxdWVfcHRyPGludDE2X3RbXT4gZmlsZV87Ci0g
IHNpemVfdCBmaWxlX3Bvc187Ci19OwotCi0vLyBTaW1wbGUgZmlyc3QgaW4gZmlyc3Qgb3V0IChG
SUZPKSBjbGFzcyB0aGF0IHdyYXBzIGEgbGlzdCBvZiAxNi1iaXQgYXVkaW8KLS8vIGJ1ZmZlcnMg
b2YgZml4ZWQgc2l6ZSBhbmQgYWxsb3dzIFdyaXRlIGFuZCBSZWFkIG9wZXJhdGlvbnMuIFRoZSBp
ZGVhIGlzIHRvCi0vLyBzdG9yZSByZWNvcmRlZCBhdWRpbyBidWZmZXJzICh1c2luZyBXcml0ZSkg
YW5kIHRoZW4gcmVhZCAodXNpbmcgUmVhZCkgdGhlc2UKLS8vIHN0b3JlZCBidWZmZXJzIHdpdGgg
YXMgc2hvcnQgZGVsYXkgYXMgcG9zc2libGUgd2hlbiB0aGUgYXVkaW8gbGF5ZXIgbmVlZHMKLS8v
IGRhdGEgdG8gcGxheSBvdXQuIFRoZSBudW1iZXIgb2YgYnVmZmVycyBpbiB0aGUgRklGTyB3aWxs
IHN0YWJpbGl6ZSB1bmRlcgotLy8gbm9ybWFsIGNvbmRpdGlvbnMgc2luY2UgdGhlcmUgd2lsbCBi
ZSBhIGJhbGFuY2UgYmV0d2VlbiBXcml0ZSBhbmQgUmVhZCBjYWxscy4KLS8vIFRoZSBjb250YWlu
ZXIgaXMgYSBzdGQ6Omxpc3QgY29udGFpbmVyIGFuZCBhY2Nlc3MgaXMgcHJvdGVjdGVkIHdpdGgg
YSBsb2NrCi0vLyBzaW5jZSBib3RoIHNpZGVzIChwbGF5b3V0IGFuZCByZWNvcmRpbmcpIGFyZSBk
cml2ZW4gYnkgaXRzIG93biB0aHJlYWQuCi1jbGFzcyBGaWZvQXVkaW9TdHJlYW0gOiBwdWJsaWMg
QXVkaW9TdHJlYW1JbnRlcmZhY2UgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgRmlmb0F1ZGlvU3Ry
ZWFtKHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcikKLSAgICAgIDogZnJhbWVzX3Blcl9idWZmZXJf
KGZyYW1lc19wZXJfYnVmZmVyKSwKLSAgICAgICAgYnl0ZXNfcGVyX2J1ZmZlcl8oZnJhbWVzX3Bl
cl9idWZmZXJfICogc2l6ZW9mKGludDE2X3QpKSwKLSAgICAgICAgZmlmb18obmV3IEF1ZGlvQnVm
ZmVyTGlzdCksCi0gICAgICAgIGxhcmdlc3Rfc2l6ZV8oMCksCi0gICAgICAgIHRvdGFsX3dyaXR0
ZW5fZWxlbWVudHNfKDApLAotICAgICAgICB3cml0ZV9jb3VudF8oMCkgewotICAgIEVYUEVDVF9O
RShmaWZvXy5nZXQoKSwgbnVsbHB0cik7Ci0gIH0KLQotICB+Rmlmb0F1ZGlvU3RyZWFtKCkgewot
ICAgIEZsdXNoKCk7Ci0gIH0KLQotICAvLyBBbGxvY2F0ZSBuZXcgbWVtb3J5LCBjb3B5IHxudW1f
ZnJhbWVzfCBzYW1wbGVzIGZyb20gfHNvdXJjZXwgaW50byBtZW1vcnkKLSAgLy8gYW5kIGFkZCBw
b2ludGVyIHRvIHRoZSBtZW1vcnkgbG9jYXRpb24gdG8gZW5kIG9mIHRoZSBsaXN0LgotICAvLyBJ
bmNyZWFzZXMgdGhlIHNpemUgb2YgdGhlIEZJRk8gYnkgb25lIGVsZW1lbnQuCi0gIHZvaWQgV3Jp
dGUoY29uc3Qgdm9pZCogc291cmNlLCBzaXplX3QgbnVtX2ZyYW1lcykgb3ZlcnJpZGUgewotICAg
IEFTU0VSVF9FUShudW1fZnJhbWVzLCBmcmFtZXNfcGVyX2J1ZmZlcl8pOwotICAgIFBSSU5URCgi
KyIpOwotICAgIGlmICh3cml0ZV9jb3VudF8rKyA8IGtOdW1JZ25vcmVGaXJzdENhbGxiYWNrcykg
ewotICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbnQxNl90KiBtZW1vcnkgPSBuZXcgaW50MTZf
dFtmcmFtZXNfcGVyX2J1ZmZlcl9dOwotICAgIG1lbWNweShzdGF0aWNfY2FzdDxpbnQxNl90Kj4g
KCZtZW1vcnlbMF0pLAotICAgICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgIGJ5dGVzX3Blcl9i
dWZmZXJfKTsKLSAgICBydGM6OkNyaXRTY29wZSBsb2NrKCZsb2NrXyk7Ci0gICAgZmlmb18tPnB1
c2hfYmFjayhtZW1vcnkpOwotICAgIGNvbnN0IHNpemVfdCBzaXplID0gZmlmb18tPnNpemUoKTsK
LSAgICBpZiAoc2l6ZSA+IGxhcmdlc3Rfc2l6ZV8pIHsKLSAgICAgIGxhcmdlc3Rfc2l6ZV8gPSBz
aXplOwotICAgICAgUFJJTlREKCIoJSIgUFJJdVMgIikiLCBsYXJnZXN0X3NpemVfKTsKLSAgICB9
Ci0gICAgdG90YWxfd3JpdHRlbl9lbGVtZW50c18gKz0gc2l6ZTsKLSAgfQotCi0gIC8vIFJlYWQg
cG9pbnRlciB0byBkYXRhIGJ1ZmZlciBmcm9tIGZyb250IG9mIGxpc3QsIGNvcHkgfG51bV9mcmFt
ZXN8IG9mIHN0b3JlZAotICAvLyBkYXRhIGludG8gfGRlc3RpbmF0aW9ufCBhbmQgZGVsZXRlIHRo
ZSB1dGlsaXplZCBtZW1vcnkgYWxsb2NhdGlvbi4KLSAgLy8gRGVjcmVhc2VzIHRoZSBzaXplIG9m
IHRoZSBGSUZPIGJ5IG9uZSBlbGVtZW50LgotICB2b2lkIFJlYWQodm9pZCogZGVzdGluYXRpb24s
IHNpemVfdCBudW1fZnJhbWVzKSBvdmVycmlkZSB7Ci0gICAgQVNTRVJUX0VRKG51bV9mcmFtZXMs
IGZyYW1lc19wZXJfYnVmZmVyXyk7Ci0gICAgUFJJTlREKCItIik7Ci0gICAgcnRjOjpDcml0U2Nv
cGUgbG9jaygmbG9ja18pOwotICAgIGlmIChmaWZvXy0+ZW1wdHkoKSkgewotICAgICAgbWVtc2V0
KGRlc3RpbmF0aW9uLCAwLCBieXRlc19wZXJfYnVmZmVyXyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
IGludDE2X3QqIG1lbW9yeSA9IGZpZm9fLT5mcm9udCgpOwotICAgICAgZmlmb18tPnBvcF9mcm9u
dCgpOwotICAgICAgbWVtY3B5KGRlc3RpbmF0aW9uLAotICAgICAgICAgICAgIHN0YXRpY19jYXN0
PGludDE2X3QqPiAoJm1lbW9yeVswXSksCi0gICAgICAgICAgICAgYnl0ZXNfcGVyX2J1ZmZlcl8p
OwotICAgICAgZGVsZXRlIG1lbW9yeTsKLSAgICB9Ci0gIH0KLQotICBzaXplX3Qgc2l6ZSgpIGNv
bnN0IHsKLSAgICByZXR1cm4gZmlmb18tPnNpemUoKTsKLSAgfQotCi0gIHNpemVfdCBsYXJnZXN0
X3NpemUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGxhcmdlc3Rfc2l6ZV87Ci0gIH0KLQotICBzaXpl
X3QgYXZlcmFnZV9zaXplKCkgY29uc3QgewotICAgIHJldHVybiAodG90YWxfd3JpdHRlbl9lbGVt
ZW50c18gPT0gMCkgPyAwLjAgOiAwLjUgKyBzdGF0aWNfY2FzdDxmbG9hdD4gKAotICAgICAgdG90
YWxfd3JpdHRlbl9lbGVtZW50c18pIC8gKHdyaXRlX2NvdW50XyAtIGtOdW1JZ25vcmVGaXJzdENh
bGxiYWNrcyk7Ci0gIH0KLQotIHByaXZhdGU6Ci0gIHZvaWQgRmx1c2goKSB7Ci0gICAgZm9yIChh
dXRvIGl0ID0gZmlmb18tPmJlZ2luKCk7IGl0ICE9IGZpZm9fLT5lbmQoKTsgKytpdCkgewotICAg
ICAgZGVsZXRlICppdDsKLSAgICB9Ci0gICAgZmlmb18tPmNsZWFyKCk7Ci0gIH0KLQotICB1c2lu
ZyBBdWRpb0J1ZmZlckxpc3QgPSBzdGQ6Omxpc3Q8aW50MTZfdCo+OwotICBydGM6OkNyaXRpY2Fs
U2VjdGlvbiBsb2NrXzsKLSAgY29uc3Qgc2l6ZV90IGZyYW1lc19wZXJfYnVmZmVyXzsKLSAgY29u
c3Qgc2l6ZV90IGJ5dGVzX3Blcl9idWZmZXJfOwotICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9CdWZm
ZXJMaXN0PiBmaWZvXzsKLSAgc2l6ZV90IGxhcmdlc3Rfc2l6ZV87Ci0gIHNpemVfdCB0b3RhbF93
cml0dGVuX2VsZW1lbnRzXzsKLSAgc2l6ZV90IHdyaXRlX2NvdW50XzsKLX07Ci0KLS8vIEluc2Vy
dHMgcGVyaW9kaWMgaW1wdWxzZXMgYW5kIG1lYXN1cmVzIHRoZSBsYXRlbmN5IGJldHdlZW4gdGhl
IHRpbWUgb2YKLS8vIHRyYW5zbWlzc2lvbiBhbmQgdGltZSBvZiByZWNlaXZpbmcgdGhlIHNhbWUg
aW1wdWxzZS4KLS8vIFVzYWdlIHJlcXVpcmVzIGEgc3BlY2lhbCBoYXJkd2FyZSBjYWxsZWQgQXVk
aW8gTG9vcGJhY2sgRG9uZ2xlLgotLy8gU2VlIGh0dHA6Ly9zb3VyY2UuYW5kcm9pZC5jb20vZGV2
aWNlcy9hdWRpby9sb29wYmFjay5odG1sIGZvciBkZXRhaWxzLgotY2xhc3MgTGF0ZW5jeU1lYXN1
cmluZ0F1ZGlvU3RyZWFtIDogcHVibGljIEF1ZGlvU3RyZWFtSW50ZXJmYWNlIHsKLSBwdWJsaWM6
Ci0gIGV4cGxpY2l0IExhdGVuY3lNZWFzdXJpbmdBdWRpb1N0cmVhbShzaXplX3QgZnJhbWVzX3Bl
cl9idWZmZXIpCi0gICAgICA6IGZyYW1lc19wZXJfYnVmZmVyXyhmcmFtZXNfcGVyX2J1ZmZlciks
Ci0gICAgICAgIGJ5dGVzX3Blcl9idWZmZXJfKGZyYW1lc19wZXJfYnVmZmVyXyAqIHNpemVvZihp
bnQxNl90KSksCi0gICAgICAgIHBsYXlfY291bnRfKDApLAotICAgICAgICByZWNfY291bnRfKDAp
LAotICAgICAgICBwdWxzZV90aW1lXygwKSB7Ci0gIH0KLQotICAvLyBJbnNlcnQgcGVyaW9kaWMg
aW1wdWxzZXMgaW4gZmlyc3QgdHdvIHNhbXBsZXMgb2YgfGRlc3RpbmF0aW9ufC4KLSAgdm9pZCBS
ZWFkKHZvaWQqIGRlc3RpbmF0aW9uLCBzaXplX3QgbnVtX2ZyYW1lcykgb3ZlcnJpZGUgewotICAg
IEFTU0VSVF9FUShudW1fZnJhbWVzLCBmcmFtZXNfcGVyX2J1ZmZlcl8pOwotICAgIGlmIChwbGF5
X2NvdW50XyA9PSAwKSB7Ci0gICAgICBQUklOVCgiWyIpOwotICAgIH0KLSAgICBwbGF5X2NvdW50
XysrOwotICAgIG1lbXNldChkZXN0aW5hdGlvbiwgMCwgYnl0ZXNfcGVyX2J1ZmZlcl8pOwotICAg
IGlmIChwbGF5X2NvdW50XyAlIChrTnVtQ2FsbGJhY2tzUGVyU2Vjb25kIC8ga0ltcHVsc2VGcmVx
dWVuY3lJbkh6KSA9PSAwKSB7Ci0gICAgICBpZiAocHVsc2VfdGltZV8gPT0gMCkgewotICAgICAg
ICBwdWxzZV90aW1lXyA9IHJ0Yzo6VGltZU1pbGxpcygpOwotICAgICAgfQotICAgICAgUFJJTlQo
Ii4iKTsKLSAgICAgIGNvbnN0IGludDE2X3QgaW1wdWxzZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MTZfdD46Om1heCgpOwotICAgICAgaW50MTZfdCogcHRyMTYgPSBzdGF0aWNfY2FzdDxpbnQx
Nl90Kj4gKGRlc3RpbmF0aW9uKTsKLSAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytp
KSB7Ci0gICAgICAgIHB0cjE2W2ldID0gaW1wdWxzZTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICAvLyBEZXRlY3QgcmVjZWl2ZWQgaW1wdWxzZXMgaW4gfHNvdXJjZXwsIGRlcml2ZSB0aW1lIGJl
dHdlZW4gdHJhbnNtaXNzaW9uIGFuZAotICAvLyBkZXRlY3Rpb24gYW5kIGFkZCB0aGUgY2FsY3Vs
YXRlZCBkZWxheSB0byBsaXN0IG9mIGxhdGVuY2llcy4KLSAgdm9pZCBXcml0ZShjb25zdCB2b2lk
KiBzb3VyY2UsIHNpemVfdCBudW1fZnJhbWVzKSBvdmVycmlkZSB7Ci0gICAgQVNTRVJUX0VRKG51
bV9mcmFtZXMsIGZyYW1lc19wZXJfYnVmZmVyXyk7Ci0gICAgcmVjX2NvdW50XysrOwotICAgIGlm
IChwdWxzZV90aW1lXyA9PSAwKSB7Ci0gICAgICAvLyBBdm9pZCBkZXRlY3Rpb24gb2YgbmV3IGlt
cHVsc2UgcmVzcG9uc2UgdW50aWwgYSBuZXcgaW1wdWxzZSBoYXMKLSAgICAgIC8vIGJlZW4gdHJh
bnNtaXR0ZWQgKHNldHMgfHB1bHNlX3RpbWVffCB0byB2YWx1ZSBsYXJnZXIgdGhhbiB6ZXJvKS4K
LSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgaW50MTZfdCogcHRyMTYgPSBzdGF0aWNf
Y2FzdDxjb25zdCBpbnQxNl90Kj4gKHNvdXJjZSk7Ci0gICAgc3RkOjp2ZWN0b3I8aW50MTZfdD4g
dmVjKHB0cjE2LCBwdHIxNiArIG51bV9mcmFtZXMpOwotICAgIC8vIEZpbmQgbWF4IHZhbHVlIGlu
IHRoZSBhdWRpbyBidWZmZXIuCi0gICAgaW50IG1heCA9ICpzdGQ6Om1heF9lbGVtZW50KHZlYy5i
ZWdpbigpLCB2ZWMuZW5kKCkpOwotICAgIC8vIEZpbmQgaW5kZXggKGVsZW1lbnQgcG9zaXRpb24g
aW4gdmVjdG9yKSBvZiB0aGUgbWF4IGVsZW1lbnQuCi0gICAgaW50IGluZGV4X29mX21heCA9IHN0
ZDo6ZGlzdGFuY2UodmVjLmJlZ2luKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpmaW5kKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWF4KSk7Ci0gICAgaWYgKG1heCA+IGtJbXB1bHNlVGhyZXNo
b2xkKSB7Ci0gICAgICBQUklOVEQoIiglZCwlZCkiLCBtYXgsIGluZGV4X29mX21heCk7Ci0gICAg
ICBpbnQ2NF90IG5vd190aW1lID0gcnRjOjpUaW1lTWlsbGlzKCk7Ci0gICAgICBpbnQgZXh0cmFf
ZGVsYXkgPSBJbmRleFRvTWlsbGlzZWNvbmRzKHN0YXRpY19jYXN0PGRvdWJsZT4gKGluZGV4X29m
X21heCkpOwotICAgICAgUFJJTlREKCJbJWRdIiwgc3RhdGljX2Nhc3Q8aW50PiAobm93X3RpbWUg
LSBwdWxzZV90aW1lXykpOwotICAgICAgUFJJTlREKCJbJWRdIiwgZXh0cmFfZGVsYXkpOwotICAg
ICAgLy8gVG90YWwgbGF0ZW5jeSBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRyYW5zbWl0IHRp
bWUgYW5kIGRldGVjdGlvbgotICAgICAgLy8gdG9tZSBwbHVzIHRoZSBleHRyYSBkZWxheSB3aXRo
aW4gdGhlIGJ1ZmZlciBpbiB3aGljaCB3ZSBkZXRlY3RlZCB0aGUKLSAgICAgIC8vIHJlY2VpdmVk
IGltcHVsc2UuIEl0IGlzIHRyYW5zbWl0dGVkIGF0IHNhbXBsZSAwIGJ1dCBjYW4gYmUgcmVjZWl2
ZWQKLSAgICAgIC8vIGF0IHNhbXBsZSBOIHdoZXJlIE4gPiAwLiBUaGUgdGVybSB8ZXh0cmFfZGVs
YXl8IGFjY291bnRzIGZvciBOIGFuZCBpdAotICAgICAgLy8gaXMgYSB2YWx1ZSBiZXR3ZWVuIDAg
YW5kIDEwbXMuCi0gICAgICBsYXRlbmNpZXNfLnB1c2hfYmFjayhub3dfdGltZSAtIHB1bHNlX3Rp
bWVfICsgZXh0cmFfZGVsYXkpOwotICAgICAgcHVsc2VfdGltZV8gPSAwOwotICAgIH0gZWxzZSB7
Ci0gICAgICBQUklOVEQoIi0iKTsKLSAgICB9Ci0gIH0KLQotICBzaXplX3QgbnVtX2xhdGVuY3lf
dmFsdWVzKCkgY29uc3QgewotICAgIHJldHVybiBsYXRlbmNpZXNfLnNpemUoKTsKLSAgfQotCi0g
IGludCBtaW5fbGF0ZW5jeSgpIGNvbnN0IHsKLSAgICBpZiAobGF0ZW5jaWVzXy5lbXB0eSgpKQot
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuICpzdGQ6Om1pbl9lbGVtZW50KGxhdGVuY2llc18u
YmVnaW4oKSwgbGF0ZW5jaWVzXy5lbmQoKSk7Ci0gIH0KLQotICBpbnQgbWF4X2xhdGVuY3koKSBj
b25zdCB7Ci0gICAgaWYgKGxhdGVuY2llc18uZW1wdHkoKSkKLSAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiAqc3RkOjptYXhfZWxlbWVudChsYXRlbmNpZXNfLmJlZ2luKCksIGxhdGVuY2llc18u
ZW5kKCkpOwotICB9Ci0KLSAgaW50IGF2ZXJhZ2VfbGF0ZW5jeSgpIGNvbnN0IHsKLSAgICBpZiAo
bGF0ZW5jaWVzXy5lbXB0eSgpKQotICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDAuNSArIHN0
YXRpY19jYXN0PGRvdWJsZT4gKAotICAgICAgICBzdGQ6OmFjY3VtdWxhdGUobGF0ZW5jaWVzXy5i
ZWdpbigpLCBsYXRlbmNpZXNfLmVuZCgpLCAwKSkgLwotICAgICAgICBsYXRlbmNpZXNfLnNpemUo
KTsKLSAgfQotCi0gIHZvaWQgUHJpbnRSZXN1bHRzKCkgY29uc3QgewotICAgIFBSSU5UKCJdICIp
OwotICAgIGZvciAoYXV0byBpdCA9IGxhdGVuY2llc18uYmVnaW4oKTsgaXQgIT0gbGF0ZW5jaWVz
Xy5lbmQoKTsgKytpdCkgewotICAgICAgUFJJTlQoIiVkICIsICppdCk7Ci0gICAgfQotICAgIFBS
SU5UKCJcbiIpOwotICAgIFBSSU5UKCIlc1ttaW4sIG1heCwgYXZnXT1bJWQsICVkLCAlZF0gbXNc
biIsIGtUYWcsCi0gICAgICAgIG1pbl9sYXRlbmN5KCksIG1heF9sYXRlbmN5KCksIGF2ZXJhZ2Vf
bGF0ZW5jeSgpKTsKLSAgfQotCi0gIGludCBJbmRleFRvTWlsbGlzZWNvbmRzKGRvdWJsZSBpbmRl
eCkgY29uc3QgewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDEwLjAgKiAoaW5kZXggLyBm
cmFtZXNfcGVyX2J1ZmZlcl8pICsgMC41KTsKLSAgfQotCi0gcHJpdmF0ZToKLSAgY29uc3Qgc2l6
ZV90IGZyYW1lc19wZXJfYnVmZmVyXzsKLSAgY29uc3Qgc2l6ZV90IGJ5dGVzX3Blcl9idWZmZXJf
OwotICBzaXplX3QgcGxheV9jb3VudF87Ci0gIHNpemVfdCByZWNfY291bnRfOwotICBpbnQ2NF90
IHB1bHNlX3RpbWVfOwotICBzdGQ6OnZlY3RvcjxpbnQ+IGxhdGVuY2llc187Ci19OwotCi0vLyBN
b2NrcyB0aGUgQXVkaW9UcmFuc3BvcnQgb2JqZWN0IGFuZCBwcm94aWVzIGFjdGlvbnMgZm9yIHRo
ZSB0d28gY2FsbGJhY2tzCi0vLyAoUmVjb3JkZWREYXRhSXNBdmFpbGFibGUgYW5kIE5lZWRNb3Jl
UGxheURhdGEpIHRvIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMKLS8vIG9mIEF1ZGlvU3RyZWFt
SW50ZXJmYWNlLgotY2xhc3MgTW9ja0F1ZGlvVHJhbnNwb3J0QW5kcm9pZCA6IHB1YmxpYyB0ZXN0
OjpNb2NrQXVkaW9UcmFuc3BvcnQgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgTW9ja0F1ZGlvVHJh
bnNwb3J0QW5kcm9pZChpbnQgdHlwZSkKLSAgICAgIDogbnVtX2NhbGxiYWNrc18oMCksCi0gICAg
ICAgIHR5cGVfKHR5cGUpLAotICAgICAgICBwbGF5X2NvdW50XygwKSwKLSAgICAgICAgcmVjX2Nv
dW50XygwKSwKLSAgICAgICAgYXVkaW9fc3RyZWFtXyhudWxscHRyKSB7fQotCi0gIHZpcnR1YWwg
fk1vY2tBdWRpb1RyYW5zcG9ydEFuZHJvaWQoKSB7fQotCi0gIC8vIFNldCBkZWZhdWx0IGFjdGlv
bnMgb2YgdGhlIG1vY2sgb2JqZWN0LiBXZSBhcmUgZGVsZWdhdGluZyB0byBmYWtlCi0gIC8vIGlt
cGxlbWVudGF0aW9ucyAob2YgQXVkaW9TdHJlYW1JbnRlcmZhY2UpIGhlcmUuCi0gIHZvaWQgSGFu
ZGxlQ2FsbGJhY2tzKEV2ZW50V3JhcHBlciogdGVzdF9pc19kb25lLAotICAgICAgICAgICAgICAg
ICAgICAgICBBdWRpb1N0cmVhbUludGVyZmFjZSogYXVkaW9fc3RyZWFtLAotICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgbnVtX2NhbGxiYWNrcykgewotICAgIHRlc3RfaXNfZG9uZV8gPSB0ZXN0
X2lzX2RvbmU7Ci0gICAgYXVkaW9fc3RyZWFtXyA9IGF1ZGlvX3N0cmVhbTsKLSAgICBudW1fY2Fs
bGJhY2tzXyA9IG51bV9jYWxsYmFja3M7Ci0gICAgaWYgKHBsYXlfbW9kZSgpKSB7Ci0gICAgICBP
Tl9DQUxMKCp0aGlzLCBOZWVkTW9yZVBsYXlEYXRhKF8sIF8sIF8sIF8sIF8sIF8sIF8sIF8pKQot
ICAgICAgICAgIC5XaWxsQnlEZWZhdWx0KAotICAgICAgICAgICAgICBJbnZva2UodGhpcywgJk1v
Y2tBdWRpb1RyYW5zcG9ydEFuZHJvaWQ6OlJlYWxOZWVkTW9yZVBsYXlEYXRhKSk7Ci0gICAgfQot
ICAgIGlmIChyZWNfbW9kZSgpKSB7Ci0gICAgICBPTl9DQUxMKCp0aGlzLCBSZWNvcmRlZERhdGFJ
c0F2YWlsYWJsZShfLCBfLCBfLCBfLCBfLCBfLCBfLCBfLCBfLCBfKSkKLSAgICAgICAgICAuV2ls
bEJ5RGVmYXVsdChJbnZva2UoCi0gICAgICAgICAgICAgIHRoaXMsICZNb2NrQXVkaW9UcmFuc3Bv
cnRBbmRyb2lkOjpSZWFsUmVjb3JkZWREYXRhSXNBdmFpbGFibGUpKTsKLSAgICB9Ci0gIH0KLQot
ICBpbnQzMl90IFJlYWxSZWNvcmRlZERhdGFJc0F2YWlsYWJsZShjb25zdCB2b2lkKiBhdWRpb1Nh
bXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVf
dCBuU2FtcGxlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
c2l6ZV90IG5CeXRlc1BlclNhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc2l6ZV90IG5DaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdWludDMyX3Qgc2FtcGxlc1BlclNlYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3QgdG90YWxEZWxheU1TLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQzMl90IGNsb2NrRHJp
ZnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90
IGN1cnJlbnRNaWNMZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgYm9vbCBrZXlQcmVzc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCYgbmV3TWljTGV2ZWwpIHsKLSAgICBFWFBFQ1RfVFJVRShyZWNfbW9kZSgp
KSA8PCAiTm8gdGVzdCBpcyBleHBlY3RpbmcgdGhlc2UgY2FsbGJhY2tzLiI7Ci0gICAgcmVjX2Nv
dW50XysrOwotICAgIC8vIFByb2Nlc3MgdGhlIHJlY29yZGVkIGF1ZGlvIHN0cmVhbSBpZiBhbiBB
dWRpb1N0cmVhbUludGVyZmFjZQotICAgIC8vIGltcGxlbWVudGF0aW9uIGV4aXN0cy4KLSAgICBp
ZiAoYXVkaW9fc3RyZWFtXykgewotICAgICAgYXVkaW9fc3RyZWFtXy0+V3JpdGUoYXVkaW9TYW1w
bGVzLCBuU2FtcGxlcyk7Ci0gICAgfQotICAgIGlmIChSZWNlaXZlZEVub3VnaENhbGxiYWNrcygp
KSB7Ci0gICAgICB0ZXN0X2lzX2RvbmVfLT5TZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0g
IH0KLQotICBpbnQzMl90IFJlYWxOZWVkTW9yZVBsYXlEYXRhKGNvbnN0IHNpemVfdCBuU2FtcGxl
cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgbkJ5dGVzUGVy
U2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBuQ2hh
bm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDMyX3Qgc2Ft
cGxlc1BlclNlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiBhdWRpb1Nh
bXBsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90JiBuU2FtcGxlc091
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQ2NF90KiBlbGFwc2VkX3RpbWVf
bXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCogbnRwX3RpbWVfbXMp
IHsKLSAgICBFWFBFQ1RfVFJVRShwbGF5X21vZGUoKSkgPDwgIk5vIHRlc3QgaXMgZXhwZWN0aW5n
IHRoZXNlIGNhbGxiYWNrcy4iOwotICAgIHBsYXlfY291bnRfKys7Ci0gICAgblNhbXBsZXNPdXQg
PSBuU2FtcGxlczsKLSAgICAvLyBSZWFkIChwb3NzaWJseSBwcm9jZXNzZWQpIGF1ZGlvIHN0cmVh
bSBzYW1wbGVzIHRvIGJlIHBsYXllZCBvdXQgaWYgYW4KLSAgICAvLyBBdWRpb1N0cmVhbUludGVy
ZmFjZSBpbXBsZW1lbnRhdGlvbiBleGlzdHMuCi0gICAgaWYgKGF1ZGlvX3N0cmVhbV8pIHsKLSAg
ICAgIGF1ZGlvX3N0cmVhbV8tPlJlYWQoYXVkaW9TYW1wbGVzLCBuU2FtcGxlcyk7Ci0gICAgfQot
ICAgIGlmIChSZWNlaXZlZEVub3VnaENhbGxiYWNrcygpKSB7Ci0gICAgICB0ZXN0X2lzX2RvbmVf
LT5TZXQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLQotICBib29sIFJlY2VpdmVkRW5v
dWdoQ2FsbGJhY2tzKCkgewotICAgIGJvb2wgcmVjb3JkaW5nX2RvbmUgPSBmYWxzZTsKLSAgICBp
ZiAocmVjX21vZGUoKSkKLSAgICAgIHJlY29yZGluZ19kb25lID0gcmVjX2NvdW50XyA+PSBudW1f
Y2FsbGJhY2tzXzsKLSAgICBlbHNlCi0gICAgICByZWNvcmRpbmdfZG9uZSA9IHRydWU7Ci0KLSAg
ICBib29sIHBsYXlvdXRfZG9uZSA9IGZhbHNlOwotICAgIGlmIChwbGF5X21vZGUoKSkKLSAgICAg
IHBsYXlvdXRfZG9uZSA9IHBsYXlfY291bnRfID49IG51bV9jYWxsYmFja3NfOwotICAgIGVsc2UK
LSAgICAgIHBsYXlvdXRfZG9uZSA9IHRydWU7Ci0KLSAgICByZXR1cm4gcmVjb3JkaW5nX2RvbmUg
JiYgcGxheW91dF9kb25lOwotICB9Ci0KLSAgYm9vbCBwbGF5X21vZGUoKSBjb25zdCB7IHJldHVy
biB0eXBlXyAmIGtQbGF5b3V0OyB9Ci0gIGJvb2wgcmVjX21vZGUoKSBjb25zdCB7IHJldHVybiB0
eXBlXyAmIGtSZWNvcmRpbmc7IH0KLQotIHByaXZhdGU6Ci0gIEV2ZW50V3JhcHBlciogdGVzdF9p
c19kb25lXzsKLSAgc2l6ZV90IG51bV9jYWxsYmFja3NfOwotICBpbnQgdHlwZV87Ci0gIHNpemVf
dCBwbGF5X2NvdW50XzsKLSAgc2l6ZV90IHJlY19jb3VudF87Ci0gIEF1ZGlvU3RyZWFtSW50ZXJm
YWNlKiBhdWRpb19zdHJlYW1fOwotICBzdGQ6OnVuaXF1ZV9wdHI8TGF0ZW5jeU1lYXN1cmluZ0F1
ZGlvU3RyZWFtPiBsYXRlbmN5X2F1ZGlvX3N0cmVhbV87Ci19OwotCi0vLyBBdWRpb0RldmljZVRl
c3QgdGVzdCBmaXh0dXJlLgotY2xhc3MgQXVkaW9EZXZpY2VUZXN0IDogcHVibGljIDo6dGVzdGlu
Zzo6VGVzdCB7Ci0gcHJvdGVjdGVkOgotICBBdWRpb0RldmljZVRlc3QoKQotICAgICAgOiB0ZXN0
X2lzX2RvbmVfKEV2ZW50V3JhcHBlcjo6Q3JlYXRlKCkpIHsKLSAgICAvLyBPbmUtdGltZSBpbml0
aWFsaXphdGlvbiBvZiBKVk0gYW5kIGFwcGxpY2F0aW9uIGNvbnRleHQuIEVuc3VyZXMgdGhhdCB3
ZQotICAgIC8vIGNhbiBkbyBjYWxscyBiZXR3ZWVuIEMrKyBhbmQgSmF2YS4gSW5pdGlhbGl6ZXMg
Ym90aCBKYXZhIGFuZCBPcGVuU0wgRVMKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMuCi0gICAgd2Vi
cnRjOjphdWRpb2RldmljZW1vZHVsZTo6RW5zdXJlSW5pdGlhbGl6ZWQoKTsKLSAgICAvLyBDcmVh
dGVzIGFuIGF1ZGlvIGRldmljZSB1c2luZyBhIGRlZmF1bHQgYXVkaW8gbGF5ZXIuCi0gICAgYXVk
aW9fZGV2aWNlXyA9IENyZWF0ZUF1ZGlvRGV2aWNlKEF1ZGlvRGV2aWNlTW9kdWxlOjprUGxhdGZv
cm1EZWZhdWx0QXVkaW8pOwotICAgIEVYUEVDVF9ORShhdWRpb19kZXZpY2VfLmdldCgpLCBudWxs
cHRyKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlXy0+SW5pdCgpKTsKLSAgICBwbGF5
b3V0X3BhcmFtZXRlcnNfID0gYXVkaW9fbWFuYWdlcigpLT5HZXRQbGF5b3V0QXVkaW9QYXJhbWV0
ZXJzKCk7Ci0gICAgcmVjb3JkX3BhcmFtZXRlcnNfID0gYXVkaW9fbWFuYWdlcigpLT5HZXRSZWNv
cmRBdWRpb1BhcmFtZXRlcnMoKTsKLSAgICBidWlsZF9pbmZvXy5yZXNldChuZXcgQnVpbGRJbmZv
KCkpOwotICB9Ci0gIHZpcnR1YWwgfkF1ZGlvRGV2aWNlVGVzdCgpIHsKLSAgICBFWFBFQ1RfRVEo
MCwgYXVkaW9fZGV2aWNlXy0+VGVybWluYXRlKCkpOwotICB9Ci0KLSAgaW50IHBsYXlvdXRfc2Ft
cGxlX3JhdGUoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHBsYXlvdXRfcGFyYW1ldGVyc18uc2FtcGxl
X3JhdGUoKTsKLSAgfQotICBpbnQgcmVjb3JkX3NhbXBsZV9yYXRlKCkgY29uc3QgewotICAgIHJl
dHVybiByZWNvcmRfcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKTsKLSAgfQotICBzaXplX3QgcGxh
eW91dF9jaGFubmVscygpIGNvbnN0IHsKLSAgICByZXR1cm4gcGxheW91dF9wYXJhbWV0ZXJzXy5j
aGFubmVscygpOwotICB9Ci0gIHNpemVfdCByZWNvcmRfY2hhbm5lbHMoKSBjb25zdCB7Ci0gICAg
cmV0dXJuIHJlY29yZF9wYXJhbWV0ZXJzXy5jaGFubmVscygpOwotICB9Ci0gIHNpemVfdCBwbGF5
b3V0X2ZyYW1lc19wZXJfMTBtc19idWZmZXIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIHBsYXlvdXRf
cGFyYW1ldGVyc18uZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpOwotICB9Ci0gIHNpemVfdCByZWNv
cmRfZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpIGNvbnN0IHsKLSAgICByZXR1cm4gcmVjb3JkX3Bh
cmFtZXRlcnNfLmZyYW1lc19wZXJfMTBtc19idWZmZXIoKTsKLSAgfQotCi0gIGludCB0b3RhbF9k
ZWxheV9tcygpIGNvbnN0IHsKLSAgICByZXR1cm4gYXVkaW9fbWFuYWdlcigpLT5HZXREZWxheUVz
dGltYXRlSW5NaWxsaXNlY29uZHMoKTsKLSAgfQotCi0gIHJ0Yzo6c2NvcGVkX3JlZnB0cjxBdWRp
b0RldmljZU1vZHVsZT4gYXVkaW9fZGV2aWNlKCkgY29uc3QgewotICAgIHJldHVybiBhdWRpb19k
ZXZpY2VfOwotICB9Ci0KLSAgQXVkaW9EZXZpY2VNb2R1bGVJbXBsKiBhdWRpb19kZXZpY2VfaW1w
bCgpIGNvbnN0IHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXVkaW9EZXZpY2VNb2R1bGVJbXBs
Kj4oYXVkaW9fZGV2aWNlXy5nZXQoKSk7Ci0gIH0KLQotICBBdWRpb01hbmFnZXIqIGF1ZGlvX21h
bmFnZXIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGF1ZGlvX2RldmljZV9pbXBsKCktPkdldEFuZHJv
aWRBdWRpb01hbmFnZXJGb3JUZXN0KCk7Ci0gIH0KLQotICBBdWRpb01hbmFnZXIqIEdldEF1ZGlv
TWFuYWdlcihBdWRpb0RldmljZU1vZHVsZSogYWRtKSBjb25zdCB7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEF1ZGlvRGV2aWNlTW9kdWxlSW1wbCo+KGFkbSktPgotICAgICAgICBHZXRBbmRyb2lk
QXVkaW9NYW5hZ2VyRm9yVGVzdCgpOwotICB9Ci0KLSAgQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlv
X2RldmljZV9idWZmZXIoKSBjb25zdCB7Ci0gICAgcmV0dXJuIGF1ZGlvX2RldmljZV9pbXBsKCkt
PkdldEF1ZGlvRGV2aWNlQnVmZmVyKCk7Ci0gIH0KLQotICBydGM6OnNjb3BlZF9yZWZwdHI8QXVk
aW9EZXZpY2VNb2R1bGU+IENyZWF0ZUF1ZGlvRGV2aWNlKAotICAgICAgQXVkaW9EZXZpY2VNb2R1
bGU6OkF1ZGlvTGF5ZXIgYXVkaW9fbGF5ZXIpIHsKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8QXVk
aW9EZXZpY2VNb2R1bGU+IG1vZHVsZSgKLSAgICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0
ZSgwLCBhdWRpb19sYXllcikpOwotICAgIHJldHVybiBtb2R1bGU7Ci0gIH0KLQotICAvLyBSZXR1
cm5zIGZpbGUgbmFtZSByZWxhdGl2ZSB0byB0aGUgcmVzb3VyY2Ugcm9vdCBnaXZlbiBhIHNhbXBs
ZSByYXRlLgotICBzdGQ6OnN0cmluZyBHZXRGaWxlTmFtZShpbnQgc2FtcGxlX3JhdGUpIHsKLSAg
ICBFWFBFQ1RfVFJVRShzYW1wbGVfcmF0ZSA9PSA0ODAwMCB8fCBzYW1wbGVfcmF0ZSA9PSA0NDEw
MCk7Ci0gICAgY2hhciBmbmFtZVs2NF07Ci0gICAgc25wcmludGYoZm5hbWUsCi0gICAgICAgICAg
ICAgc2l6ZW9mKGZuYW1lKSwKLSAgICAgICAgICAgICAiYXVkaW9fZGV2aWNlL2F1ZGlvX3Nob3J0
JWQiLAotICAgICAgICAgICAgIHNhbXBsZV9yYXRlIC8gMTAwMCk7Ci0gICAgc3RkOjpzdHJpbmcg
ZmlsZV9uYW1lKHdlYnJ0Yzo6dGVzdDo6UmVzb3VyY2VQYXRoKGZuYW1lLCAicGNtIikpOwotICAg
IEVYUEVDVF9UUlVFKHRlc3Q6OkZpbGVFeGlzdHMoZmlsZV9uYW1lKSk7Ci0jaWZkZWYgRU5BQkxF
X1BSSU5URgotICAgIFBSSU5UKCJmaWxlIG5hbWU6ICVzXG4iLCBmaWxlX25hbWUuY19zdHIoKSk7
Ci0gICAgY29uc3Qgc2l6ZV90IGJ5dGVzID0gdGVzdDo6R2V0RmlsZVNpemUoZmlsZV9uYW1lKTsK
LSAgICBQUklOVCgiZmlsZSBzaXplOiAlIiBQUkl1UyAiIFtieXRlc11cbiIsIGJ5dGVzKTsKLSAg
ICBQUklOVCgiZmlsZSBzaXplOiAlIiBQUkl1UyAiIFtzYW1wbGVzXVxuIiwgYnl0ZXMgLyBrQnl0
ZXNQZXJTYW1wbGUpOwotICAgIGNvbnN0IGludCBzZWNvbmRzID0KLSAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihieXRlcyAvIChzYW1wbGVfcmF0ZSAqIGtCeXRlc1BlclNhbXBsZSkpOwotICAgIFBS
SU5UKCJmaWxlIHNpemU6ICVkIFtzZWNzXVxuIiwgc2Vjb25kcyk7Ci0gICAgUFJJTlQoImZpbGUg
c2l6ZTogJSIgUFJJdVMgIiBbY2FsbGJhY2tzXVxuIiwKLSAgICAgICAgICBzZWNvbmRzICoga051
bUNhbGxiYWNrc1BlclNlY29uZCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gZmlsZV9uYW1lOwotICB9
Ci0KLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgR2V0QWN0aXZlQXVkaW9MYXllcigp
IGNvbnN0IHsKLSAgICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRpb19sYXllcjsK
LSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPkFjdGl2ZUF1ZGlvTGF5ZXIoJmF1ZGlv
X2xheWVyKSk7Ci0gICAgcmV0dXJuIGF1ZGlvX2xheWVyOwotICB9Ci0KLSAgaW50IFRlc3REZWxh
eU9uQXVkaW9MYXllcigKLSAgICAgIGNvbnN0IEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVy
JiBsYXllcl90b190ZXN0KSB7Ci0gICAgcnRjOjpzY29wZWRfcmVmcHRyPEF1ZGlvRGV2aWNlTW9k
dWxlPiBhdWRpb19kZXZpY2U7Ci0gICAgYXVkaW9fZGV2aWNlID0gQ3JlYXRlQXVkaW9EZXZpY2Uo
bGF5ZXJfdG9fdGVzdCk7Ci0gICAgRVhQRUNUX05FKGF1ZGlvX2RldmljZS5nZXQoKSwgbnVsbHB0
cik7Ci0gICAgQXVkaW9NYW5hZ2VyKiBhdWRpb19tYW5hZ2VyID0gR2V0QXVkaW9NYW5hZ2VyKGF1
ZGlvX2RldmljZS5nZXQoKSk7Ci0gICAgRVhQRUNUX05FKGF1ZGlvX21hbmFnZXIsIG51bGxwdHIp
OwotICAgIHJldHVybiBhdWRpb19tYW5hZ2VyLT5HZXREZWxheUVzdGltYXRlSW5NaWxsaXNlY29u
ZHMoKTsKLSAgfQotCi0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIFRlc3RBY3RpdmVB
dWRpb0xheWVyKAotICAgICAgY29uc3QgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXImIGxh
eWVyX3RvX3Rlc3QpIHsKLSAgICBydGM6OnNjb3BlZF9yZWZwdHI8QXVkaW9EZXZpY2VNb2R1bGU+
IGF1ZGlvX2RldmljZTsKLSAgICBhdWRpb19kZXZpY2UgPSBDcmVhdGVBdWRpb0RldmljZShsYXll
cl90b190ZXN0KTsKLSAgICBFWFBFQ1RfTkUoYXVkaW9fZGV2aWNlLmdldCgpLCBudWxscHRyKTsK
LSAgICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhY3RpdmU7Ci0gICAgRVhQRUNUX0VR
KDAsIGF1ZGlvX2RldmljZS0+QWN0aXZlQXVkaW9MYXllcigmYWN0aXZlKSk7Ci0gICAgcmV0dXJu
IGFjdGl2ZTsKLSAgfQotCi0gIGJvb2wgRGlzYWJsZVRlc3RGb3JUaGlzRGV2aWNlKGNvbnN0IHN0
ZDo6c3RyaW5nJiBtb2RlbCkgewotICAgIHJldHVybiAoYnVpbGRfaW5mb18tPkdldERldmljZU1v
ZGVsKCkgPT0gbW9kZWwpOwotICB9Ci0KLSAgLy8gVm9sdW1lIGNvbnRyb2wgaXMgY3VycmVudGx5
IG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgSmF2YSBvdXRwdXQgYXVkaW8gbGF5ZXIuCi0gIC8vIEZv
ciBPcGVuU0wgRVMsIHRoZSBpbnRlcm5hbCBzdHJlYW0gdm9sdW1lIGlzIGFsd2F5cyBvbiBtYXgg
bGV2ZWwgYW5kIHRoZXJlCi0gIC8vIGlzIG5vIG5lZWQgZm9yIHRoaXMgdGVzdCB0byBzZXQgaXQg
dG8gbWF4LgotICBib29sIEF1ZGlvTGF5ZXJTdXBwb3J0c1ZvbHVtZUNvbnRyb2woKSBjb25zdCB7
Ci0gICAgcmV0dXJuIEdldEFjdGl2ZUF1ZGlvTGF5ZXIoKSA9PSBBdWRpb0RldmljZU1vZHVsZTo6
a0FuZHJvaWRKYXZhQXVkaW87Ci0gIH0KLQotICB2b2lkIFNldE1heFBsYXlvdXRWb2x1bWUoKSB7
Ci0gICAgaWYgKCFBdWRpb0xheWVyU3VwcG9ydHNWb2x1bWVDb250cm9sKCkpCi0gICAgICByZXR1
cm47Ci0gICAgdWludDMyX3QgbWF4X3ZvbHVtZTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2
aWNlKCktPk1heFNwZWFrZXJWb2x1bWUoJm1heF92b2x1bWUpKTsKLSAgICBFWFBFQ1RfRVEoMCwg
YXVkaW9fZGV2aWNlKCktPlNldFNwZWFrZXJWb2x1bWUobWF4X3ZvbHVtZSkpOwotICB9Ci0KLSAg
dm9pZCBEaXNhYmxlQnVpbHRJbkFFQ0lmQXZhaWxhYmxlKCkgewotICAgIGlmIChhdWRpb19kZXZp
Y2UoKS0+QnVpbHRJbkFFQ0lzQXZhaWxhYmxlKCkpIHsKLSAgICAgIEVYUEVDVF9FUSgwLCBhdWRp
b19kZXZpY2UoKS0+RW5hYmxlQnVpbHRJbkFFQyhmYWxzZSkpOwotICAgIH0KLSAgfQotCi0gIHZv
aWQgU3RhcnRQbGF5b3V0KCkgewotICAgIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+UGxh
eW91dElzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNFKGF1ZGlvX2RldmljZSgpLT5Q
bGF5aW5nKCkpOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+SW5pdFBsYXlvdXQo
KSk7Ci0gICAgRVhQRUNUX1RSVUUoYXVkaW9fZGV2aWNlKCktPlBsYXlvdXRJc0luaXRpYWxpemVk
KCkpOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+U3RhcnRQbGF5b3V0KCkpOwot
ICAgIEVYUEVDVF9UUlVFKGF1ZGlvX2RldmljZSgpLT5QbGF5aW5nKCkpOwotICB9Ci0KLSAgdm9p
ZCBTdG9wUGxheW91dCgpIHsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0b3BQ
bGF5b3V0KCkpOwotICAgIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+UGxheWluZygpKTsK
LSAgICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPlBsYXlvdXRJc0luaXRpYWxpemVkKCkp
OwotICB9Ci0KLSAgdm9pZCBTdGFydFJlY29yZGluZygpIHsKLSAgICBFWFBFQ1RfRkFMU0UoYXVk
aW9fZGV2aWNlKCktPlJlY29yZGluZ0lzSW5pdGlhbGl6ZWQoKSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KGF1ZGlvX2RldmljZSgpLT5SZWNvcmRpbmcoKSk7Ci0gICAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rl
dmljZSgpLT5Jbml0UmVjb3JkaW5nKCkpOwotICAgIEVYUEVDVF9UUlVFKGF1ZGlvX2RldmljZSgp
LT5SZWNvcmRpbmdJc0luaXRpYWxpemVkKCkpOwotICAgIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZp
Y2UoKS0+U3RhcnRSZWNvcmRpbmcoKSk7Ci0gICAgRVhQRUNUX1RSVUUoYXVkaW9fZGV2aWNlKCkt
PlJlY29yZGluZygpKTsKLSAgfQotCi0gIHZvaWQgU3RvcFJlY29yZGluZygpIHsKLSAgICBFWFBF
Q1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlN0b3BSZWNvcmRpbmcoKSk7Ci0gICAgRVhQRUNUX0ZB
TFNFKGF1ZGlvX2RldmljZSgpLT5SZWNvcmRpbmcoKSk7Ci0gIH0KLQotICBpbnQgR2V0TWF4U3Bl
YWtlclZvbHVtZSgpIGNvbnN0IHsKLSAgICB1aW50MzJfdCBtYXhfdm9sdW1lKDApOwotICAgIEVY
UEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+TWF4U3BlYWtlclZvbHVtZSgmbWF4X3ZvbHVtZSkp
OwotICAgIHJldHVybiBtYXhfdm9sdW1lOwotICB9Ci0KLSAgaW50IEdldE1pblNwZWFrZXJWb2x1
bWUoKSBjb25zdCB7Ci0gICAgdWludDMyX3QgbWluX3ZvbHVtZSgwKTsKLSAgICBFWFBFQ1RfRVEo
MCwgYXVkaW9fZGV2aWNlKCktPk1pblNwZWFrZXJWb2x1bWUoJm1pbl92b2x1bWUpKTsKLSAgICBy
ZXR1cm4gbWluX3ZvbHVtZTsKLSAgfQotCi0gIGludCBHZXRTcGVha2VyVm9sdW1lKCkgY29uc3Qg
ewotICAgIHVpbnQzMl90IHZvbHVtZSgwKTsKLSAgICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNl
KCktPlNwZWFrZXJWb2x1bWUoJnZvbHVtZSkpOwotICAgIHJldHVybiB2b2x1bWU7Ci0gIH0KLQot
ICBzdGQ6OnVuaXF1ZV9wdHI8RXZlbnRXcmFwcGVyPiB0ZXN0X2lzX2RvbmVfOwotICBydGM6OnNj
b3BlZF9yZWZwdHI8QXVkaW9EZXZpY2VNb2R1bGU+IGF1ZGlvX2RldmljZV87Ci0gIEF1ZGlvUGFy
YW1ldGVycyBwbGF5b3V0X3BhcmFtZXRlcnNfOwotICBBdWRpb1BhcmFtZXRlcnMgcmVjb3JkX3Bh
cmFtZXRlcnNfOwotICBzdGQ6OnVuaXF1ZV9wdHI8QnVpbGRJbmZvPiBidWlsZF9pbmZvXzsKLX07
Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIENvbnN0cnVjdERlc3RydWN0KSB7Ci0gIC8vIFVz
aW5nIHRoZSB0ZXN0IGZpeHR1cmUgdG8gY3JlYXRlIGFuZCBkZXN0cnVjdCB0aGUgYXVkaW8gZGV2
aWNlIG1vZHVsZS4KLX0KLQotLy8gV2UgYWx3YXlzIGFzayBmb3IgYSBkZWZhdWx0IGF1ZGlvIGxh
eWVyIHdoZW4gdGhlIEFETSBpcyBjb25zdHJ1Y3RlZC4gQnV0IHRoZQotLy8gQURNIHdpbGwgdGhl
biBpbnRlcm5hbGx5IHNldCB0aGUgYmVzdCBzdWl0YWJsZSBjb21iaW5hdGlvbiBvZiBhdWRpbyBs
YXllcnMsCi0vLyBmb3IgaW5wdXQgYW5kIG91dHB1dCBiYXNlZCBvbiBpZiBsb3ctbGF0ZW5jeSBv
dXRwdXQgYW5kL29yIGlucHV0IGF1ZGlvIGluCi0vLyBjb21iaW5hdGlvbiB3aXRoIE9wZW5TTCBF
UyBpcyBzdXBwb3J0ZWQgb3Igbm90LiBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZQotLy8gY29y
cmVjdCBzZWxlY3Rpb24gaXMgZG9uZS4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFZlcmlmeURl
ZmF1bHRBdWRpb0xheWVyKSB7Ci0gIGNvbnN0IEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVy
IGF1ZGlvX2xheWVyID0gR2V0QWN0aXZlQXVkaW9MYXllcigpOwotICBib29sIGxvd19sYXRlbmN5
X291dHB1dCA9IGF1ZGlvX21hbmFnZXIoKS0+SXNMb3dMYXRlbmN5UGxheW91dFN1cHBvcnRlZCgp
OwotICBib29sIGxvd19sYXRlbmN5X2lucHV0ID0gYXVkaW9fbWFuYWdlcigpLT5Jc0xvd0xhdGVu
Y3lSZWNvcmRTdXBwb3J0ZWQoKTsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIgZXhw
ZWN0ZWRfYXVkaW9fbGF5ZXI7Ci0gIGlmIChsb3dfbGF0ZW5jeV9vdXRwdXQgJiYgbG93X2xhdGVu
Y3lfaW5wdXQpIHsKLSAgICBleHBlY3RlZF9hdWRpb19sYXllciA9IEF1ZGlvRGV2aWNlTW9kdWxl
OjprQW5kcm9pZE9wZW5TTEVTQXVkaW87Ci0gIH0gZWxzZSBpZiAobG93X2xhdGVuY3lfb3V0cHV0
ICYmICFsb3dfbGF0ZW5jeV9pbnB1dCkgewotICAgIGV4cGVjdGVkX2F1ZGlvX2xheWVyID0KLSAg
ICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2YUlucHV0QW5kT3BlblNMRVNPdXRw
dXRBdWRpbzsKLSAgfSBlbHNlIHsKLSAgICBleHBlY3RlZF9hdWRpb19sYXllciA9IEF1ZGlvRGV2
aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRpbzsKLSAgfQotICBFWFBFQ1RfRVEoZXhwZWN0ZWRf
YXVkaW9fbGF5ZXIsIGF1ZGlvX2xheWVyKTsKLX0KLQotLy8gVmVyaWZ5IHRoYXQgaXQgaXMgcG9z
c2libGUgdG8gZXhwbGljaXRseSBjcmVhdGUgdGhlIHR3byB0eXBlcyBvZiBzdXBwb3J0ZWQKLS8v
IEFETXMuIFRoZXNlIHR3byB0ZXN0cyBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uIG9m
IG5hdGl2ZSBhdWRpbyBsYXllcgotLy8gYnkgaWdub3JpbmcgaWYgdGhlIGRldmljZSBzdXBwb3J0
cyBsb3ctbGF0ZW5jeSBvdXRwdXQgb3Igbm90LgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgQ29y
cmVjdEF1ZGlvTGF5ZXJJc1VzZWRGb3JDb21iaW5lZEphdmFPcGVuU0xDb21ibykgewotICBBdWRp
b0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBleHBlY3RlZF9sYXllciA9Ci0gICAgICBBdWRpb0Rl
dmljZU1vZHVsZTo6a0FuZHJvaWRKYXZhSW5wdXRBbmRPcGVuU0xFU091dHB1dEF1ZGlvOwotICBB
dWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhY3RpdmVfbGF5ZXIgPSBUZXN0QWN0aXZlQXVk
aW9MYXllcigKLSAgICAgIGV4cGVjdGVkX2xheWVyKTsKLSAgRVhQRUNUX0VRKGV4cGVjdGVkX2xh
eWVyLCBhY3RpdmVfbGF5ZXIpOwotfQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBDb3JyZWN0
QXVkaW9MYXllcklzVXNlZEZvckphdmFJbkJvdGhEaXJlY3Rpb25zKSB7Ci0gIEF1ZGlvRGV2aWNl
TW9kdWxlOjpBdWRpb0xheWVyIGV4cGVjdGVkX2xheWVyID0KLSAgICAgIEF1ZGlvRGV2aWNlTW9k
dWxlOjprQW5kcm9pZEphdmFBdWRpbzsKLSAgQXVkaW9EZXZpY2VNb2R1bGU6OkF1ZGlvTGF5ZXIg
YWN0aXZlX2xheWVyID0gVGVzdEFjdGl2ZUF1ZGlvTGF5ZXIoCi0gICAgICBleHBlY3RlZF9sYXll
cik7Ci0gIEVYUEVDVF9FUShleHBlY3RlZF9sYXllciwgYWN0aXZlX2xheWVyKTsKLX0KLQotVEVT
VF9GKEF1ZGlvRGV2aWNlVGVzdCwgQ29ycmVjdEF1ZGlvTGF5ZXJJc1VzZWRGb3JPcGVuU0xJbkJv
dGhEaXJlY3Rpb25zKSB7Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGV4cGVjdGVk
X2xheWVyID0KLSAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZE9wZW5TTEVTQXVkaW87
Ci0gIEF1ZGlvRGV2aWNlTW9kdWxlOjpBdWRpb0xheWVyIGFjdGl2ZV9sYXllciA9Ci0gICAgICBU
ZXN0QWN0aXZlQXVkaW9MYXllcihleHBlY3RlZF9sYXllcik7Ci0gIEVYUEVDVF9FUShleHBlY3Rl
ZF9sYXllciwgYWN0aXZlX2xheWVyKTsKLX0KLQotLy8gVGhlIEFuZHJvaWQgQURNIHN1cHBvcnRz
IHR3byBkaWZmZXJlbnQgZGVsYXkgcmVwb3J0aW5nIG1vZGVzLiBPbmUgZm9yIHRoZQotLy8gbG93
LWxhdGVuY3kgb3V0cHV0IHBhdGggKGluIGNvbWJpbmF0aW9uIHdpdGggT3BlblNMIEVTKSwgYW5k
IG9uZSBmb3IgdGhlCi0vLyBoaWdoLWxhdGVuY3kgb3V0cHV0IHBhdGggKEphdmEgYmFja2VuZHMg
aW4gYm90aCBkaXJlY3Rpb25zKS4gVGhlc2UgdHdvIHRlc3RzCi0vLyB2ZXJpZmllcyB0aGF0IHRo
ZSBhdWRpbyBtYW5hZ2VyIHJlcG9ydHMgY29ycmVjdCBkZWxheSBlc3RpbWF0ZSBnaXZlbiB0aGUK
LS8vIHNlbGVjdGVkIGF1ZGlvIGxheWVyLiBOb3RlIHRoYXQsIHRoaXMgZGVsYXkgZXN0aW1hdGUg
d2lsbCBvbmx5IGJlIHV0aWxpemVkCi0vLyBpZiB0aGUgSFcgQUVDIGlzIGRpc2FibGVkLgotVEVT
VF9GKEF1ZGlvRGV2aWNlVGVzdCwgVXNlc0NvcnJlY3REZWxheUVzdGltYXRlRm9ySGlnaExhdGVu
Y3lPdXRwdXRQYXRoKSB7Ci0gIEVYUEVDVF9FUShrSGlnaExhdGVuY3lNb2RlRGVsYXlFc3RpbWF0
ZUluTWlsbGlzZWNvbmRzLAotICAgICAgICAgICAgVGVzdERlbGF5T25BdWRpb0xheWVyKEF1ZGlv
RGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRpbykpOwotfQotCi1URVNUX0YoQXVkaW9EZXZp
Y2VUZXN0LCBVc2VzQ29ycmVjdERlbGF5RXN0aW1hdGVGb3JMb3dMYXRlbmN5T3V0cHV0UGF0aCkg
ewotICBFWFBFQ1RfRVEoa0xvd0xhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRz
LAotICAgICAgICAgICAgVGVzdERlbGF5T25BdWRpb0xheWVyKAotICAgICAgQXVkaW9EZXZpY2VN
b2R1bGU6OmtBbmRyb2lkSmF2YUlucHV0QW5kT3BlblNMRVNPdXRwdXRBdWRpbykpOwotfQotCi0v
LyBFbnN1cmUgdGhhdCB0aGUgQURNIGludGVybmFsIGF1ZGlvIGRldmljZSBidWZmZXIgaXMgY29u
ZmlndXJlZCB0byB1c2UgdGhlCi0vLyBjb3JyZWN0IHNldCBvZiBwYXJhbWV0ZXJzLgotVEVTVF9G
KEF1ZGlvRGV2aWNlVGVzdCwgVmVyaWZ5QXVkaW9EZXZpY2VCdWZmZXJQYXJhbWV0ZXJzKSB7Ci0g
IEVYUEVDVF9FUShwbGF5b3V0X3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCksCi0gICAgICAgICAg
ICBhdWRpb19kZXZpY2VfYnVmZmVyKCktPlBsYXlvdXRTYW1wbGVSYXRlKCkpOwotICBFWFBFQ1Rf
RVEocmVjb3JkX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCksCi0gICAgICAgICAgICBhdWRpb19k
ZXZpY2VfYnVmZmVyKCktPlJlY29yZGluZ1NhbXBsZVJhdGUoKSk7Ci0gIEVYUEVDVF9FUShwbGF5
b3V0X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCksCi0gICAgICAgICAgICBhdWRpb19kZXZpY2VfYnVm
ZmVyKCktPlBsYXlvdXRDaGFubmVscygpKTsKLSAgRVhQRUNUX0VRKHJlY29yZF9wYXJhbWV0ZXJz
Xy5jaGFubmVscygpLAotICAgICAgICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcigpLT5SZWNvcmRp
bmdDaGFubmVscygpKTsKLX0KLQotCi1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBJbml0VGVybWlu
YXRlKSB7Ci0gIC8vIEluaXRpYWxpemF0aW9uIGlzIHBhcnQgb2YgdGhlIHRlc3QgZml4dHVyZS4K
LSAgRVhQRUNUX1RSVUUoYXVkaW9fZGV2aWNlKCktPkluaXRpYWxpemVkKCkpOwotICBFWFBFQ1Rf
RVEoMCwgYXVkaW9fZGV2aWNlKCktPlRlcm1pbmF0ZSgpKTsKLSAgRVhQRUNUX0ZBTFNFKGF1ZGlv
X2RldmljZSgpLT5Jbml0aWFsaXplZCgpKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwg
RGV2aWNlcykgewotICAvLyBEZXZpY2UgZW51bWVyYXRpb24gaXMgbm90IHN1cHBvcnRlZC4gVmVy
aWZ5IGZpeGVkIHZhbHVlcyBvbmx5LgotICBFWFBFQ1RfRVEoMSwgYXVkaW9fZGV2aWNlKCktPlBs
YXlvdXREZXZpY2VzKCkpOwotICBFWFBFQ1RfRVEoMSwgYXVkaW9fZGV2aWNlKCktPlJlY29yZGlu
Z0RldmljZXMoKSk7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFNwZWFrZXJWb2x1bWVT
aG91bGRCZUF2YWlsYWJsZSkgewotICAvLyBUaGUgT3BlblNMIEVTIG91dHB1dCBhdWRpbyBwYXRo
IGRvZXMgbm90IHN1cHBvcnQgdm9sdW1lIGNvbnRyb2wuCi0gIGlmICghQXVkaW9MYXllclN1cHBv
cnRzVm9sdW1lQ29udHJvbCgpKQotICAgIHJldHVybjsKLSAgYm9vbCBhdmFpbGFibGU7Ci0gIEVY
UEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+U3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKCZhdmFp
bGFibGUpKTsKLSAgRVhQRUNUX1RSVUUoYXZhaWxhYmxlKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2
aWNlVGVzdCwgTWF4U3BlYWtlclZvbHVtZUlzUG9zaXRpdmUpIHsKLSAgLy8gVGhlIE9wZW5TTCBF
UyBvdXRwdXQgYXVkaW8gcGF0aCBkb2VzIG5vdCBzdXBwb3J0IHZvbHVtZSBjb250cm9sLgotICBp
ZiAoIUF1ZGlvTGF5ZXJTdXBwb3J0c1ZvbHVtZUNvbnRyb2woKSkKLSAgICByZXR1cm47Ci0gIFN0
YXJ0UGxheW91dCgpOwotICBFWFBFQ1RfR1QoR2V0TWF4U3BlYWtlclZvbHVtZSgpLCAwKTsKLSAg
U3RvcFBsYXlvdXQoKTsKLX0KLQotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgTWluU3BlYWtlclZv
bHVtZUlzWmVybykgewotICAvLyBUaGUgT3BlblNMIEVTIG91dHB1dCBhdWRpbyBwYXRoIGRvZXMg
bm90IHN1cHBvcnQgdm9sdW1lIGNvbnRyb2wuCi0gIGlmICghQXVkaW9MYXllclN1cHBvcnRzVm9s
dW1lQ29udHJvbCgpKQotICAgIHJldHVybjsKLSAgRVhQRUNUX0VRKEdldE1pblNwZWFrZXJWb2x1
bWUoKSwgMCk7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIERlZmF1bHRTcGVha2VyVm9s
dW1lSXNXaXRoaW5NaW5NYXgpIHsKLSAgLy8gVGhlIE9wZW5TTCBFUyBvdXRwdXQgYXVkaW8gcGF0
aCBkb2VzIG5vdCBzdXBwb3J0IHZvbHVtZSBjb250cm9sLgotICBpZiAoIUF1ZGlvTGF5ZXJTdXBw
b3J0c1ZvbHVtZUNvbnRyb2woKSkKLSAgICByZXR1cm47Ci0gIGNvbnN0IGludCBkZWZhdWx0X3Zv
bHVtZSA9IEdldFNwZWFrZXJWb2x1bWUoKTsKLSAgRVhQRUNUX0dFKGRlZmF1bHRfdm9sdW1lLCBH
ZXRNaW5TcGVha2VyVm9sdW1lKCkpOwotICBFWFBFQ1RfTEUoZGVmYXVsdF92b2x1bWUsIEdldE1h
eFNwZWFrZXJWb2x1bWUoKSk7Ci19Ci0KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFNldFNwZWFr
ZXJWb2x1bWVBY3R1YWxseVNldHNWb2x1bWUpIHsKLSAgLy8gVGhlIE9wZW5TTCBFUyBvdXRwdXQg
YXVkaW8gcGF0aCBkb2VzIG5vdCBzdXBwb3J0IHZvbHVtZSBjb250cm9sLgotICBpZiAoIUF1ZGlv
TGF5ZXJTdXBwb3J0c1ZvbHVtZUNvbnRyb2woKSkKLSAgICByZXR1cm47Ci0gIGNvbnN0IGludCBk
ZWZhdWx0X3ZvbHVtZSA9IEdldFNwZWFrZXJWb2x1bWUoKTsKLSAgY29uc3QgaW50IG1heF92b2x1
bWUgPSBHZXRNYXhTcGVha2VyVm9sdW1lKCk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2Uo
KS0+U2V0U3BlYWtlclZvbHVtZShtYXhfdm9sdW1lKSk7Ci0gIGludCBuZXdfdm9sdW1lID0gR2V0
U3BlYWtlclZvbHVtZSgpOwotICBFWFBFQ1RfRVEobmV3X3ZvbHVtZSwgbWF4X3ZvbHVtZSk7Ci0g
IEVYUEVDVF9FUSgwLCBhdWRpb19kZXZpY2UoKS0+U2V0U3BlYWtlclZvbHVtZShkZWZhdWx0X3Zv
bHVtZSkpOwotfQotCi0vLyBUZXN0cyB0aGF0IHBsYXlvdXQgY2FuIGJlIGluaXRpYXRlZCwgc3Rh
cnRlZCBhbmQgc3RvcHBlZC4gTm8gYXVkaW8gY2FsbGJhY2sKLS8vIGlzIHJlZ2lzdGVyZWQgaW4g
dGhpcyB0ZXN0LgotLy8gRmxha3kgb24gb3VyIHRyeWJvdHMgbWFrZXMgdGhpcyB0ZXN0IHVudXNh
YmxlLgotLy8gaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC93ZWJydGMvaXNzdWVzL2RldGFpbD9p
ZD01MDQ2Ci1URVNUX0YoQXVkaW9EZXZpY2VUZXN0LCBESVNBQkxFRF9TdGFydFN0b3BQbGF5b3V0
KSB7Ci0gIFN0YXJ0UGxheW91dCgpOwotICBTdG9wUGxheW91dCgpOwotICBTdGFydFBsYXlvdXQo
KTsKLSAgU3RvcFBsYXlvdXQoKTsKLX0KLQotLy8gVGVzdHMgdGhhdCByZWNvcmRpbmcgY2FuIGJl
IGluaXRpYXRlZCwgc3RhcnRlZCBhbmQgc3RvcHBlZC4gTm8gYXVkaW8gY2FsbGJhY2sKLS8vIGlz
IHJlZ2lzdGVyZWQgaW4gdGhpcyB0ZXN0LgotVEVTVF9GKEF1ZGlvRGV2aWNlVGVzdCwgU3RhcnRT
dG9wUmVjb3JkaW5nKSB7Ci0gIFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIFN0b3BSZWNvcmRpbmcoKTsK
LSAgU3RhcnRSZWNvcmRpbmcoKTsKLSAgU3RvcFJlY29yZGluZygpOwotfQotCi0vLyBWZXJpZnkg
dGhhdCBjYWxsaW5nIFN0b3BQbGF5b3V0KCkgd2lsbCBsZWF2ZSB1cyBpbiBhbiB1bmluaXRpYWxp
emVkIHN0YXRlCi0vLyB3aGljaCB3aWxsIHJlcXVpcmUgYSBuZXcgY2FsbCB0byBJbml0UGxheW91
dCgpLiBUaGlzIHRlc3QgZG9lcyBub3QgY2FsbAotLy8gU3RhcnRQbGF5b3V0KCkgd2hpbGUgYmVp
bmcgdW5pbml0aWFsaXplZCBzaW5jZSBkb2luZyBzbyB3aWxsIGhpdCBhCi0vLyBSVENfRENIRUNL
IGFuZCBkZWF0aCB0ZXN0cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBBbmRyb2lkLgotVEVTVF9GKEF1
ZGlvRGV2aWNlVGVzdCwgU3RvcFBsYXlvdXRSZXF1aXJlc0luaXRUb1Jlc3RhcnQpIHsKLSAgRVhQ
RUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5Jbml0UGxheW91dCgpKTsKLSAgRVhQRUNUX0VRKDAs
IGF1ZGlvX2RldmljZSgpLT5TdGFydFBsYXlvdXQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBhdWRpb19k
ZXZpY2UoKS0+U3RvcFBsYXlvdXQoKSk7Ci0gIEVYUEVDVF9GQUxTRShhdWRpb19kZXZpY2UoKS0+
UGxheW91dElzSW5pdGlhbGl6ZWQoKSk7Ci19Ci0KLS8vIFZlcmlmeSB0aGF0IGNhbGxpbmcgU3Rv
cFJlY29yZGluZygpIHdpbGwgbGVhdmUgdXMgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0ZQotLy8g
d2hpY2ggd2lsbCByZXF1aXJlIGEgbmV3IGNhbGwgdG8gSW5pdFJlY29yZGluZygpLiBUaGlzIHRl
c3QgZG9lcyBub3QgY2FsbAotLy8gU3RhcnRSZWNvcmRpbmcoKSB3aGlsZSBiZWluZyB1bmluaXRp
YWxpemVkIHNpbmNlIGRvaW5nIHNvIHdpbGwgaGl0IGEKLS8vIFJUQ19EQ0hFQ0sgYW5kIGRlYXRo
IHRlc3RzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIEFuZHJvaWQuCi1URVNUX0YoQXVkaW9EZXZpY2VU
ZXN0LCBTdG9wUmVjb3JkaW5nUmVxdWlyZXNJbml0VG9SZXN0YXJ0KSB7Ci0gIEVYUEVDVF9FUSgw
LCBhdWRpb19kZXZpY2UoKS0+SW5pdFJlY29yZGluZygpKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlv
X2RldmljZSgpLT5TdGFydFJlY29yZGluZygpKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2Rldmlj
ZSgpLT5TdG9wUmVjb3JkaW5nKCkpOwotICBFWFBFQ1RfRkFMU0UoYXVkaW9fZGV2aWNlKCktPlJl
Y29yZGluZ0lzSW5pdGlhbGl6ZWQoKSk7Ci19Ci0KLS8vIFN0YXJ0IHBsYXlvdXQgYW5kIHZlcmlm
eSB0aGF0IHRoZSBuYXRpdmUgYXVkaW8gbGF5ZXIgc3RhcnRzIGFza2luZyBmb3IgcmVhbAotLy8g
YXVkaW8gc2FtcGxlcyB0byBwbGF5IG91dCB1c2luZyB0aGUgTmVlZE1vcmVQbGF5RGF0YSBjYWxs
YmFjay4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFN0YXJ0UGxheW91dFZlcmlmeUNhbGxiYWNr
cykgewotICBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkIG1vY2soa1BsYXlvdXQpOwotICBtb2Nr
LkhhbmRsZUNhbGxiYWNrcyh0ZXN0X2lzX2RvbmVfLmdldCgpLCBudWxscHRyLCBrTnVtQ2FsbGJh
Y2tzKTsKLSAgRVhQRUNUX0NBTEwobW9jaywgTmVlZE1vcmVQbGF5RGF0YShwbGF5b3V0X2ZyYW1l
c19wZXJfMTBtc19idWZmZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrQnl0ZXNQZXJTYW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGxheW91dF9jaGFubmVscygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBsYXlvdXRfc2FtcGxlX3JhdGUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOb3ROdWxsKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXywg
XywgXykpCi0gICAgICAuVGltZXMoQXRMZWFzdChrTnVtQ2FsbGJhY2tzKSk7Ci0gIEVYUEVDVF9F
USgwLCBhdWRpb19kZXZpY2UoKS0+UmVnaXN0ZXJBdWRpb0NhbGxiYWNrKCZtb2NrKSk7Ci0gIFN0
YXJ0UGxheW91dCgpOwotICB0ZXN0X2lzX2RvbmVfLT5XYWl0KGtUZXN0VGltZU91dEluTWlsbGlz
ZWNvbmRzKTsKLSAgU3RvcFBsYXlvdXQoKTsKLX0KLQotLy8gU3RhcnQgcmVjb3JkaW5nIGFuZCB2
ZXJpZnkgdGhhdCB0aGUgbmF0aXZlIGF1ZGlvIGxheWVyIHN0YXJ0cyBmZWVkaW5nIHJlYWwKLS8v
IGF1ZGlvIHNhbXBsZXMgdmlhIHRoZSBSZWNvcmRlZERhdGFJc0F2YWlsYWJsZSBjYWxsYmFjay4K
LVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFN0YXJ0UmVjb3JkaW5nVmVyaWZ5Q2FsbGJhY2tzKSB7
Ci0gIE1vY2tBdWRpb1RyYW5zcG9ydEFuZHJvaWQgbW9jayhrUmVjb3JkaW5nKTsKLSAgbW9jay5I
YW5kbGVDYWxsYmFja3ModGVzdF9pc19kb25lXy5nZXQoKSwgbnVsbHB0ciwga051bUNhbGxiYWNr
cyk7Ci0gIEVYUEVDVF9DQUxMKG1vY2ssIFJlY29yZGVkRGF0YUlzQXZhaWxhYmxlKE5vdE51bGwo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX2Zy
YW1lc19wZXJfMTBtc19idWZmZXIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga0J5dGVzUGVyU2FtcGxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWNvcmRfY2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkX3NhbXBsZV9yYXRlKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX2RlbGF5X21zKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKSkKLSAgICAgIC5UaW1lcyhBdExlYXN0KGtOdW1DYWxsYmFja3Mp
KTsKLQotICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlJlZ2lzdGVyQXVkaW9DYWxsYmFj
aygmbW9jaykpOwotICBTdGFydFJlY29yZGluZygpOwotICB0ZXN0X2lzX2RvbmVfLT5XYWl0KGtU
ZXN0VGltZU91dEluTWlsbGlzZWNvbmRzKTsKLSAgU3RvcFJlY29yZGluZygpOwotfQotCi0KLS8v
IFN0YXJ0IHBsYXlvdXQgYW5kIHJlY29yZGluZyAoZnVsbC1kdXBsZXggYXVkaW8pIGFuZCB2ZXJp
ZnkgdGhhdCBhdWRpbyBpcwotLy8gYWN0aXZlIGluIGJvdGggZGlyZWN0aW9ucy4KLVRFU1RfRihB
dWRpb0RldmljZVRlc3QsIFN0YXJ0UGxheW91dEFuZFJlY29yZGluZ1ZlcmlmeUNhbGxiYWNrcykg
ewotICBNb2NrQXVkaW9UcmFuc3BvcnRBbmRyb2lkIG1vY2soa1BsYXlvdXQgfCBrUmVjb3JkaW5n
KTsKLSAgbW9jay5IYW5kbGVDYWxsYmFja3ModGVzdF9pc19kb25lXy5nZXQoKSwgbnVsbHB0ciwg
IGtOdW1DYWxsYmFja3MpOwotICBFWFBFQ1RfQ0FMTChtb2NrLCBOZWVkTW9yZVBsYXlEYXRhKHBs
YXlvdXRfZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGtCeXRlc1BlclNhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwbGF5b3V0X2NoYW5uZWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGxheW91dF9zYW1wbGVfcmF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5vdE51bGwoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfLCBfLCBfKSkKLSAgICAgIC5UaW1lcyhBdExlYXN0KGtOdW1DYWxsYmFja3MpKTsK
LSAgRVhQRUNUX0NBTEwobW9jaywgUmVjb3JkZWREYXRhSXNBdmFpbGFibGUoTm90TnVsbCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRfZnJhbWVz
X3Blcl8xMG1zX2J1ZmZlcigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrQnl0ZXNQZXJTYW1wbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlY29yZF9jaGFubmVscygpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZWNvcmRfc2FtcGxlX3JhdGUoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfZGVsYXlfbXMoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8pKQotICAgICAgLlRpbWVzKEF0TGVhc3Qoa051bUNhbGxiYWNrcykpOwot
ICBFWFBFQ1RfRVEoMCwgYXVkaW9fZGV2aWNlKCktPlJlZ2lzdGVyQXVkaW9DYWxsYmFjaygmbW9j
aykpOwotICBTdGFydFBsYXlvdXQoKTsKLSAgU3RhcnRSZWNvcmRpbmcoKTsKLSAgdGVzdF9pc19k
b25lXy0+V2FpdChrVGVzdFRpbWVPdXRJbk1pbGxpc2Vjb25kcyk7Ci0gIFN0b3BSZWNvcmRpbmco
KTsKLSAgU3RvcFBsYXlvdXQoKTsKLX0KLQotLy8gU3RhcnQgcGxheW91dCBhbmQgcmVhZCBhdWRp
byBmcm9tIGFuIGV4dGVybmFsIFBDTSBmaWxlIHdoZW4gdGhlIGF1ZGlvIGxheWVyCi0vLyBhc2tz
IGZvciBkYXRhIHRvIHBsYXkgb3V0LiBSZWFsIGF1ZGlvIGlzIHBsYXllZCBvdXQgaW4gdGhpcyB0
ZXN0IGJ1dCBpdCBkb2VzCi0vLyBub3QgY29udGFpbiBhbnkgZXhwbGljaXQgdmVyaWZpY2F0aW9u
IHRoYXQgdGhlIGF1ZGlvIHF1YWxpdHkgaXMgcGVyZmVjdC4KLVRFU1RfRihBdWRpb0RldmljZVRl
c3QsIFJ1blBsYXlvdXRXaXRoRmlsZUFzU291cmNlKSB7Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGV4
dGVuZCB0ZXN0IHdoZW4gbW9ubyBvdXRwdXQgaXMgc3VwcG9ydGVkLgotICBFWFBFQ1RfRVEoMXUs
IHBsYXlvdXRfY2hhbm5lbHMoKSk7Ci0gIE5pY2VNb2NrPE1vY2tBdWRpb1RyYW5zcG9ydEFuZHJv
aWQ+IG1vY2soa1BsYXlvdXQpOwotICBjb25zdCBpbnQgbnVtX2NhbGxiYWNrcyA9IGtGaWxlUGxh
eVRpbWVJblNlYyAqIGtOdW1DYWxsYmFja3NQZXJTZWNvbmQ7Ci0gIHN0ZDo6c3RyaW5nIGZpbGVf
bmFtZSA9IEdldEZpbGVOYW1lKHBsYXlvdXRfc2FtcGxlX3JhdGUoKSk7Ci0gIHN0ZDo6dW5pcXVl
X3B0cjxGaWxlQXVkaW9TdHJlYW0+IGZpbGVfYXVkaW9fc3RyZWFtKAotICAgICAgbmV3IEZpbGVB
dWRpb1N0cmVhbShudW1fY2FsbGJhY2tzLCBmaWxlX25hbWUsIHBsYXlvdXRfc2FtcGxlX3JhdGUo
KSkpOwotICBtb2NrLkhhbmRsZUNhbGxiYWNrcyh0ZXN0X2lzX2RvbmVfLmdldCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICBmaWxlX2F1ZGlvX3N0cmVhbS5nZXQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgbnVtX2NhbGxiYWNrcyk7Ci0gIC8vIFNldE1heFBsYXlvdXRWb2x1bWUoKTsKLSAg
RVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJhY2soJm1vY2sp
KTsKLSAgU3RhcnRQbGF5b3V0KCk7Ci0gIHRlc3RfaXNfZG9uZV8tPldhaXQoa1Rlc3RUaW1lT3V0
SW5NaWxsaXNlY29uZHMpOwotICBTdG9wUGxheW91dCgpOwotfQotCi0vLyBTdGFydCBwbGF5b3V0
IGFuZCByZWNvcmRpbmcgYW5kIHN0b3JlIHJlY29yZGVkIGRhdGEgaW4gYW4gaW50ZXJtZWRpYXRl
IEZJRk8KLS8vIGJ1ZmZlciBmcm9tIHdoaWNoIHRoZSBwbGF5b3V0IHNpZGUgdGhlbiByZWFkcyBp
dHMgc2FtcGxlcyBpbiB0aGUgc2FtZSBvcmRlcgotLy8gYXMgdGhleSB3ZXJlIHN0b3JlZC4gVW5k
ZXIgaWRlYWwgY2lyY3Vtc3RhbmNlcywgYSBjYWxsYmFjayBzZXF1ZW5jZSB3b3VsZAotLy8gbG9v
ayBsaWtlOiAuLi4rLSstKy0rLSstKy0rLS4uLiwgd2hlcmUgJysnIG1lYW5zICdwYWNrZXQgcmVj
b3JkZWQnIGFuZCAnLScKLS8vIG1lYW5zICdwYWNrZXQgcGxheWVkJy4gVW5kZXIgc3VjaCBjb25k
aXRpb25zLCB0aGUgRklGTyB3b3VsZCBvbmx5IGNvbnRhaW4KLS8vIG9uZSBwYWNrZXQgb24gYXZl
cmFnZS4gSG93ZXZlciwgdW5kZXIgbW9yZSByZWFsaXN0aWMgY29uZGl0aW9ucywgdGhlIHNpemUK
LS8vIG9mIHRoZSBGSUZPIHdpbGwgdmFyeSBtb3JlIGR1ZSB0byBhbiB1bmJhbGFuY2UgYmV0d2Vl
biB0aGUgdHdvIHNpZGVzLgotLy8gVGhpcyB0ZXN0IHRyaWVzIHRvIHZlcmlmeSB0aGF0IHRoZSBk
ZXZpY2UgbWFpbnRhaW5zIGEgYmFsYW5jZWQgY2FsbGJhY2stCi0vLyBzZXF1ZW5jZSBieSBydW5u
aW5nIGluIGxvb3BiYWNrIGZvciB0ZW4gc2Vjb25kcyB3aGlsZSBtZWFzdXJpbmcgdGhlIHNpemUK
LS8vIChtYXggYW5kIGF2ZXJhZ2UpIG9mIHRoZSBGSUZPLiBUaGUgc2l6ZSBvZiB0aGUgRklGTyBp
cyBpbmNyZWFzZWQgYnkgdGhlCi0vLyByZWNvcmRpbmcgc2lkZSBhbmQgZGVjcmVhc2VkIGJ5IHRo
ZSBwbGF5b3V0IHNpZGUuCi0vLyBUT0RPKGhlbnJpa2EpOiB0dW5lIHRoZSBmaW5hbCB0ZXN0IHBh
cmFtZXRlcnMgYWZ0ZXIgcnVubmluZyB0ZXN0cyBvbiBzZXZlcmFsCi0vLyBkaWZmZXJlbnQgZGV2
aWNlcy4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIFJ1blBsYXlvdXRBbmRSZWNvcmRpbmdJbkZ1
bGxEdXBsZXgpIHsKLSAgRVhQRUNUX0VRKHJlY29yZF9jaGFubmVscygpLCBwbGF5b3V0X2NoYW5u
ZWxzKCkpOwotICBFWFBFQ1RfRVEocmVjb3JkX3NhbXBsZV9yYXRlKCksIHBsYXlvdXRfc2FtcGxl
X3JhdGUoKSk7Ci0gIE5pY2VNb2NrPE1vY2tBdWRpb1RyYW5zcG9ydEFuZHJvaWQ+IG1vY2soa1Bs
YXlvdXQgfCBrUmVjb3JkaW5nKTsKLSAgc3RkOjp1bmlxdWVfcHRyPEZpZm9BdWRpb1N0cmVhbT4g
Zmlmb19hdWRpb19zdHJlYW0oCi0gICAgICBuZXcgRmlmb0F1ZGlvU3RyZWFtKHBsYXlvdXRfZnJh
bWVzX3Blcl8xMG1zX2J1ZmZlcigpKSk7Ci0gIG1vY2suSGFuZGxlQ2FsbGJhY2tzKHRlc3RfaXNf
ZG9uZV8uZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIGZpZm9fYXVkaW9fc3RyZWFtLmdl
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICBrRnVsbER1cGxleFRpbWVJblNlYyAqIGtOdW1D
YWxsYmFja3NQZXJTZWNvbmQpOwotICBTZXRNYXhQbGF5b3V0Vm9sdW1lKCk7Ci0gIEVYUEVDVF9F
USgwLCBhdWRpb19kZXZpY2UoKS0+UmVnaXN0ZXJBdWRpb0NhbGxiYWNrKCZtb2NrKSk7Ci0gIFN0
YXJ0UmVjb3JkaW5nKCk7Ci0gIFN0YXJ0UGxheW91dCgpOwotICB0ZXN0X2lzX2RvbmVfLT5XYWl0
KHN0ZDo6bWF4KGtUZXN0VGltZU91dEluTWlsbGlzZWNvbmRzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDEwMDAgKiBrRnVsbER1cGxleFRpbWVJblNlYykpOwotICBTdG9wUGxheW91
dCgpOwotICBTdG9wUmVjb3JkaW5nKCk7Ci0KLSAgLy8gVGhlc2UgdGhyZXNob2xkcyBhcmUgc2V0
IHJhdGhlciBoaWdoIHRvIGFjY29tb2RhdGUgZGlmZmVyZW5jZXMgaW4gaGFyZHdhcmUKLSAgLy8g
aW4gc2V2ZXJhbCBkZXZpY2VzLCBzbyB0aGlzIHRlc3QgY2FuIGJlIHVzZWQgaW4gc3dhcm1pbmcu
Ci0gIC8vIFNlZSBodHRwOi8vYnVncy53ZWJydGMub3JnLzY0NjQKLSAgRVhQRUNUX0xFKGZpZm9f
YXVkaW9fc3RyZWFtLT5hdmVyYWdlX3NpemUoKSwgMzB1KTsKLSAgRVhQRUNUX0xFKGZpZm9fYXVk
aW9fc3RyZWFtLT5sYXJnZXN0X3NpemUoKSwgNDB1KTsKLX0KLQotLy8gTWVhc3VyZXMgbG9vcGJh
Y2sgbGF0ZW5jeSBhbmQgcmVwb3J0cyB0aGUgbWluLCBtYXggYW5kIGF2ZXJhZ2UgdmFsdWVzIGZv
cgotLy8gYSBmdWxsIGR1cGxleCBhdWRpbyBzZXNzaW9uLgotLy8gVGhlIGxhdGVuY3kgaXMgbWVh
c3VyZWQgbGlrZSBzbzoKLS8vIC0gSW5zZXJ0IGltcHVsc2VzIHBlcmlvZGljYWxseSBvbiB0aGUg
b3V0cHV0IHNpZGUuCi0vLyAtIERldGVjdCB0aGUgaW1wdWxzZXMgb24gdGhlIGlucHV0IHNpZGUu
Ci0vLyAtIE1lYXN1cmUgdGhlIHRpbWUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0cmFuc21pdCB0
aW1lIGFuZCByZWNlaXZlIHRpbWUuCi0vLyAtIFN0b3JlIHRpbWUgZGlmZmVyZW5jZXMgaW4gYSB2
ZWN0b3IgYW5kIGNhbGN1bGF0ZSBtaW4sIG1heCBhbmQgYXZlcmFnZS4KLS8vIFRoaXMgdGVzdCBy
ZXF1aXJlcyBhIHNwZWNpYWwgaGFyZHdhcmUgY2FsbGVkIEF1ZGlvIExvb3BiYWNrIERvbmdsZS4K
LS8vIFNlZSBodHRwOi8vc291cmNlLmFuZHJvaWQuY29tL2RldmljZXMvYXVkaW8vbG9vcGJhY2su
aHRtbCBmb3IgZGV0YWlscy4KLVRFU1RfRihBdWRpb0RldmljZVRlc3QsIERJU0FCTEVEX01lYXN1
cmVMb29wYmFja0xhdGVuY3kpIHsKLSAgRVhQRUNUX0VRKHJlY29yZF9jaGFubmVscygpLCBwbGF5
b3V0X2NoYW5uZWxzKCkpOwotICBFWFBFQ1RfRVEocmVjb3JkX3NhbXBsZV9yYXRlKCksIHBsYXlv
dXRfc2FtcGxlX3JhdGUoKSk7Ci0gIE5pY2VNb2NrPE1vY2tBdWRpb1RyYW5zcG9ydEFuZHJvaWQ+
IG1vY2soa1BsYXlvdXQgfCBrUmVjb3JkaW5nKTsKLSAgc3RkOjp1bmlxdWVfcHRyPExhdGVuY3lN
ZWFzdXJpbmdBdWRpb1N0cmVhbT4gbGF0ZW5jeV9hdWRpb19zdHJlYW0oCi0gICAgICBuZXcgTGF0
ZW5jeU1lYXN1cmluZ0F1ZGlvU3RyZWFtKHBsYXlvdXRfZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigp
KSk7Ci0gIG1vY2suSGFuZGxlQ2FsbGJhY2tzKHRlc3RfaXNfZG9uZV8uZ2V0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgIGxhdGVuY3lfYXVkaW9fc3RyZWFtLmdldCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICBrTWVhc3VyZUxhdGVuY3lUaW1lSW5TZWMgKiBrTnVtQ2FsbGJhY2tzUGVyU2Vj
b25kKTsKLSAgRVhQRUNUX0VRKDAsIGF1ZGlvX2RldmljZSgpLT5SZWdpc3RlckF1ZGlvQ2FsbGJh
Y2soJm1vY2spKTsKLSAgU2V0TWF4UGxheW91dFZvbHVtZSgpOwotICBEaXNhYmxlQnVpbHRJbkFF
Q0lmQXZhaWxhYmxlKCk7Ci0gIFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIFN0YXJ0UGxheW91dCgpOwot
ICB0ZXN0X2lzX2RvbmVfLT5XYWl0KHN0ZDo6bWF4KGtUZXN0VGltZU91dEluTWlsbGlzZWNvbmRz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAgKiBrTWVhc3VyZUxhdGVuY3lU
aW1lSW5TZWMpKTsKLSAgU3RvcFBsYXlvdXQoKTsKLSAgU3RvcFJlY29yZGluZygpOwotICAvLyBW
ZXJpZnkgdGhhdCB0aGUgY29ycmVjdCBudW1iZXIgb2YgdHJhbnNtaXR0ZWQgaW1wdWxzZXMgYXJl
IGRldGVjdGVkLgotICBFWFBFQ1RfRVEobGF0ZW5jeV9hdWRpb19zdHJlYW0tPm51bV9sYXRlbmN5
X3ZhbHVlcygpLAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PigKLSAgICAgICAgICAg
ICAgICBrSW1wdWxzZUZyZXF1ZW5jeUluSHogKiBrTWVhc3VyZUxhdGVuY3lUaW1lSW5TZWMgLSAx
KSk7Ci0gIGxhdGVuY3lfYXVkaW9fc3RyZWFtLT5QcmludFJlc3VsdHMoKTsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmNjCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5jYwkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmNjCShub25leGlzdGVudCkKQEAg
LTEsMjk3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAid2VicnRj
L21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oIgotCi0jaW5jbHVk
ZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0KLSNpbmNsdWRlICJ3ZWJy
dGMvYmFzZS9hcnJheXNpemUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24u
aCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy91dGlsaXR5L2luY2x1ZGUvaGVscGVyc19hbmRy
b2lkLmgiCi0KLSNkZWZpbmUgVEFHICJBdWRpb01hbmFnZXIiCi0jZGVmaW5lIEFMT0dWKC4uLikg
X19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19WRVJCT1NFLCBUQUcsIF9fVkFfQVJHU19f
KQotI2RlZmluZSBBTE9HRCguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfREVC
VUcsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dFKC4uLikgX19hbmRyb2lkX2xvZ19w
cmludChBTkRST0lEX0xPR19FUlJPUiwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR1co
Li4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1dBUk4sIFRBRywgX19WQV9BUkdT
X18pCi0jZGVmaW5lIEFMT0dJKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19J
TkZPLCBUQUcsIF9fVkFfQVJHU19fKQotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gQXVkaW9N
YW5hZ2VyOjpKYXZhQXVkaW9NYW5hZ2VyIGltcGxlbWVudGF0aW9uCi1BdWRpb01hbmFnZXI6Okph
dmFBdWRpb01hbmFnZXI6OkphdmFBdWRpb01hbmFnZXIoCi0gICAgTmF0aXZlUmVnaXN0cmF0aW9u
KiBuYXRpdmVfcmVnLAotICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX21hbmFn
ZXIpCi0gICAgOiBhdWRpb19tYW5hZ2VyXyhzdGQ6Om1vdmUoYXVkaW9fbWFuYWdlcikpLAotICAg
ICAgaW5pdF8obmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQoImluaXQiLCAiKClaIikpLAotICAgICAg
ZGlzcG9zZV8obmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQoImRpc3Bvc2UiLCAiKClWIikpLAotICAg
ICAgaXNfY29tbXVuaWNhdGlvbl9tb2RlX2VuYWJsZWRfKAotICAgICAgICAgIG5hdGl2ZV9yZWct
PkdldE1ldGhvZElkKCJpc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCIsICIoKVoiKSksCi0gICAg
ICBpc19kZXZpY2VfYmxhY2tsaXN0ZWRfZm9yX29wZW5fc2xlc191c2FnZV8oCi0gICAgICAgICAg
bmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQoImlzRGV2aWNlQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1Vz
YWdlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKClaIikpIHsKLSAgQUxP
R0QoIkphdmFBdWRpb01hbmFnZXI6OmN0b3IlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsK
LX0KLQotQXVkaW9NYW5hZ2VyOjpKYXZhQXVkaW9NYW5hZ2VyOjp+SmF2YUF1ZGlvTWFuYWdlcigp
IHsKLSAgQUxPR0QoIkphdmFBdWRpb01hbmFnZXI6OmR0b3IlcyIsIEdldFRocmVhZEluZm8oKS5j
X3N0cigpKTsKLX0KLQotYm9vbCBBdWRpb01hbmFnZXI6OkphdmFBdWRpb01hbmFnZXI6OkluaXQo
KSB7Ci0gIHJldHVybiBhdWRpb19tYW5hZ2VyXy0+Q2FsbEJvb2xlYW5NZXRob2QoaW5pdF8pOwot
fQotCi12b2lkIEF1ZGlvTWFuYWdlcjo6SmF2YUF1ZGlvTWFuYWdlcjo6Q2xvc2UoKSB7Ci0gIGF1
ZGlvX21hbmFnZXJfLT5DYWxsVm9pZE1ldGhvZChkaXNwb3NlXyk7Ci19Ci0KLWJvb2wgQXVkaW9N
YW5hZ2VyOjpKYXZhQXVkaW9NYW5hZ2VyOjpJc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgpIHsK
LSAgcmV0dXJuIGF1ZGlvX21hbmFnZXJfLT5DYWxsQm9vbGVhbk1ldGhvZChpc19jb21tdW5pY2F0
aW9uX21vZGVfZW5hYmxlZF8pOwotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6SmF2YUF1ZGlvTWFu
YWdlcjo6SXNEZXZpY2VCbGFja2xpc3RlZEZvck9wZW5TTEVTVXNhZ2UoKSB7Ci0gIHJldHVybiBh
dWRpb19tYW5hZ2VyXy0+Q2FsbEJvb2xlYW5NZXRob2QoCi0gICAgICBpc19kZXZpY2VfYmxhY2ts
aXN0ZWRfZm9yX29wZW5fc2xlc191c2FnZV8pOwotfQotCi0vLyBBdWRpb01hbmFnZXIgaW1wbGVt
ZW50YXRpb24KLUF1ZGlvTWFuYWdlcjo6QXVkaW9NYW5hZ2VyKCkKLSAgICA6IGpfZW52aXJvbm1l
bnRfKEpWTTo6R2V0SW5zdGFuY2UoKS0+ZW52aXJvbm1lbnQoKSksCi0gICAgICBhdWRpb19sYXll
cl8oQXVkaW9EZXZpY2VNb2R1bGU6OmtQbGF0Zm9ybURlZmF1bHRBdWRpbyksCi0gICAgICBpbml0
aWFsaXplZF8oZmFsc2UpLAotICAgICAgaGFyZHdhcmVfYWVjXyhmYWxzZSksCi0gICAgICBoYXJk
d2FyZV9hZ2NfKGZhbHNlKSwKLSAgICAgIGhhcmR3YXJlX25zXyhmYWxzZSksCi0gICAgICBsb3df
bGF0ZW5jeV9wbGF5b3V0XyhmYWxzZSksCi0gICAgICBsb3dfbGF0ZW5jeV9yZWNvcmRfKGZhbHNl
KSwKLSAgICAgIGRlbGF5X2VzdGltYXRlX2luX21pbGxpc2Vjb25kc18oMCkgewotICBBTE9HRCgi
Y3RvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfQ0hFQ0soal9lbnZpcm9u
bWVudF8pOwotICBKTklOYXRpdmVNZXRob2QgbmF0aXZlX21ldGhvZHNbXSA9IHsKLSAgICAgIHsi
bmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRlcnMiLCAiKElJWlpaWlpaSUlKKVYiLAotICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ3ZWJydGM6OkF1ZGlvTWFuYWdlcjo6Q2FjaGVBdWRpb1Bh
cmFtZXRlcnMpfX07Ci0gIGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl8gPSBqX2Vudmlyb25tZW50Xy0+
UmVnaXN0ZXJOYXRpdmVzKAotICAgICAgIm9yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVk
aW9NYW5hZ2VyIiwgbmF0aXZlX21ldGhvZHMsCi0gICAgICBhcnJheXNpemUobmF0aXZlX21ldGhv
ZHMpKTsKLSAgal9hdWRpb19tYW5hZ2VyXy5yZXNldChuZXcgSmF2YUF1ZGlvTWFuYWdlcigKLSAg
ICAgIGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl8uZ2V0KCksCi0gICAgICBqX25hdGl2ZV9yZWdpc3Ry
YXRpb25fLT5OZXdPYmplY3QoCi0gICAgICAgICAgIjxpbml0PiIsICIoTGFuZHJvaWQvY29udGVu
dC9Db250ZXh0O0opViIsCi0gICAgICAgICAgSlZNOjpHZXRJbnN0YW5jZSgpLT5jb250ZXh0KCks
IFBvaW50ZXJUb2psb25nKHRoaXMpKSkpOwotfQotCi1BdWRpb01hbmFnZXI6On5BdWRpb01hbmFn
ZXIoKSB7Ci0gIEFMT0dEKCJ+ZHRvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBS
VENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBDbG9z
ZSgpOwotfQotCi12b2lkIEF1ZGlvTWFuYWdlcjo6U2V0QWN0aXZlQXVkaW9MYXllcigKLSAgICBB
dWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRpb19sYXllcikgewotICBBTE9HRCgiU2V0
QWN0aXZlQXVkaW9MYXllciglZCklcyIsIGF1ZGlvX2xheWVyLCBHZXRUaHJlYWRJbmZvKCkuY19z
dHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQo
KSk7Ci0gIFJUQ19EQ0hFQ0soIWluaXRpYWxpemVkXyk7Ci0gIC8vIFN0b3JlIHRoZSBjdXJyZW50
bHkgdXRpbGl6ZWQgYXVkaW8gbGF5ZXIuCi0gIGF1ZGlvX2xheWVyXyA9IGF1ZGlvX2xheWVyOwot
ICAvLyBUaGUgZGVsYXkgZXN0aW1hdGUgY2FuIHRha2Ugb25lIG9mIHR3byBmaXhlZCB2YWx1ZXMg
ZGVwZW5kaW5nIG9uIGlmIHRoZQotICAvLyBkZXZpY2Ugc3VwcG9ydHMgbG93LWxhdGVuY3kgb3V0
cHV0IG9yIG5vdC4gSG93ZXZlciwgaXQgaXMgYWxzbyBwb3NzaWJsZQotICAvLyB0aGF0IHRoZSB1
c2VyIGV4cGxpY2l0bHkgc2VsZWN0cyB0aGUgaGlnaC1sYXRlbmN5IGF1ZGlvIHBhdGgsIGhlbmNl
IHdlIHVzZQotICAvLyB0aGUgc2VsZWN0ZWQgfGF1ZGlvX2xheWVyfCBoZXJlIHRvIHNldCB0aGUg
ZGVsYXkgZXN0aW1hdGUuCi0gIGRlbGF5X2VzdGltYXRlX2luX21pbGxpc2Vjb25kc18gPQotICAg
ICAgKGF1ZGlvX2xheWVyID09IEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRpbykg
PwotICAgICAga0hpZ2hMYXRlbmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcyA6Ci0g
ICAgICBrTG93TGF0ZW5jeU1vZGVEZWxheUVzdGltYXRlSW5NaWxsaXNlY29uZHM7Ci0gIEFMT0dE
KCJkZWxheV9lc3RpbWF0ZV9pbl9taWxsaXNlY29uZHM6ICVkIiwgZGVsYXlfZXN0aW1hdGVfaW5f
bWlsbGlzZWNvbmRzXyk7Ci19Ci0KLVNMT2JqZWN0SXRmIEF1ZGlvTWFuYWdlcjo6R2V0T3BlblNM
RW5naW5lKCkgewotICBBTE9HRCgiR2V0T3BlblNMRW5naW5lJXMiLCBHZXRUaHJlYWRJbmZvKCku
Y19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJl
YWQoKSk7Ci0gIC8vIE9ubHkgYWxsb3cgdXNhZ2Ugb2YgT3BlblNMIEVTIGlmIHN1Y2ggYW4gYXVk
aW8gbGF5ZXIgaGFzIGJlZW4gc3BlY2lmaWVkLgotICBpZiAoYXVkaW9fbGF5ZXJfICE9IEF1ZGlv
RGV2aWNlTW9kdWxlOjprQW5kcm9pZE9wZW5TTEVTQXVkaW8gJiYKLSAgICAgIGF1ZGlvX2xheWVy
XyAhPQotICAgICAgICAgIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFJbnB1dEFuZE9w
ZW5TTEVTT3V0cHV0QXVkaW8pIHsKLSAgICBBTE9HSSgiVW5hYmxlIHRvIGNyZWF0ZSBPcGVuU0wg
ZW5naW5lIGZvciB0aGUgY3VycmVudCBhdWRpbyBsYXllcjogJWQiLAotICAgICAgICAgIGF1ZGlv
X2xheWVyXyk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgLy8gT3BlblNMIEVTIGZvciBB
bmRyb2lkIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgZW5naW5lIHBlciBhcHBsaWNhdGlvbi4KLSAg
Ly8gSWYgb25lIGFscmVhZHkgaGFzIGJlZW4gY3JlYXRlZCwgcmV0dXJuIGV4aXN0aW5nIG9iamVj
dCBpbnN0ZWFkIG9mCi0gIC8vIGNyZWF0aW5nIGEgbmV3LgotICBpZiAoZW5naW5lX29iamVjdF8u
R2V0KCkgIT0gbnVsbHB0cikgewotICAgIEFMT0dJKCJUaGUgT3BlblNMIEVTIGVuZ2luZSBvYmpl
Y3QgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkIik7Ci0gICAgcmV0dXJuIGVuZ2luZV9vYmplY3Rf
LkdldCgpOwotICB9Ci0gIC8vIENyZWF0ZSB0aGUgZW5naW5lIG9iamVjdCBpbiB0aHJlYWQgc2Fm
ZSBtb2RlLgotICBjb25zdCBTTEVuZ2luZU9wdGlvbiBvcHRpb25bXSA9IHsKLSAgICAgIHtTTF9F
TkdJTkVPUFRJT05fVEhSRUFEU0FGRSwgc3RhdGljX2Nhc3Q8U0x1aW50MzI+KFNMX0JPT0xFQU5f
VFJVRSl9fTsKLSAgU0xyZXN1bHQgcmVzdWx0ID0KLSAgICAgIHNsQ3JlYXRlRW5naW5lKGVuZ2lu
ZV9vYmplY3RfLlJlY2VpdmUoKSwgMSwgb3B0aW9uLCAwLCBOVUxMLCBOVUxMKTsKLSAgaWYgKHJl
c3VsdCAhPSBTTF9SRVNVTFRfU1VDQ0VTUykgewotICAgIEFMT0dFKCJzbENyZWF0ZUVuZ2luZSgp
IGZhaWxlZDogJXMiLCBHZXRTTEVycm9yU3RyaW5nKHJlc3VsdCkpOwotICAgIGVuZ2luZV9vYmpl
Y3RfLlJlc2V0KCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci0gIH0KLSAgLy8gUmVhbGl6ZSB0aGUg
U0wgRW5naW5lIGluIHN5bmNocm9ub3VzIG1vZGUuCi0gIHJlc3VsdCA9IGVuZ2luZV9vYmplY3Rf
LT5SZWFsaXplKGVuZ2luZV9vYmplY3RfLkdldCgpLCBTTF9CT09MRUFOX0ZBTFNFKTsKLSAgaWYg
KHJlc3VsdCAhPSBTTF9SRVNVTFRfU1VDQ0VTUykgewotICAgIEFMT0dFKCJSZWFsaXplKCkgZmFp
bGVkOiAlcyIsIEdldFNMRXJyb3JTdHJpbmcocmVzdWx0KSk7Ci0gICAgZW5naW5lX29iamVjdF8u
UmVzZXQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLSAgfQotICAvLyBGaW5hbGx5IHJldHVybiB0
aGUgU0xPYmplY3RJdGYgaW50ZXJmYWNlIG9mIHRoZSBlbmdpbmUgb2JqZWN0LgotICByZXR1cm4g
ZW5naW5lX29iamVjdF8uR2V0KCk7Ci19Ci0KLWJvb2wgQXVkaW9NYW5hZ2VyOjpJbml0KCkgewot
ICBBTE9HRCgiSW5pdCVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNL
KHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfRENIRUNLKCFp
bml0aWFsaXplZF8pOwotICBSVENfRENIRUNLX05FKGF1ZGlvX2xheWVyXywgQXVkaW9EZXZpY2VN
b2R1bGU6OmtQbGF0Zm9ybURlZmF1bHRBdWRpbyk7Ci0gIGlmICghal9hdWRpb19tYW5hZ2VyXy0+
SW5pdCgpKSB7Ci0gICAgQUxPR0UoImluaXQgZmFpbGVkISIpOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotICBpbml0aWFsaXplZF8gPSB0cnVlOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBB
dWRpb01hbmFnZXI6OkNsb3NlKCkgewotICBBTE9HRCgiQ2xvc2UlcyIsIEdldFRocmVhZEluZm8o
KS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRo
cmVhZCgpKTsKLSAgaWYgKCFpbml0aWFsaXplZF8pCi0gICAgcmV0dXJuIHRydWU7Ci0gIGpfYXVk
aW9fbWFuYWdlcl8tPkNsb3NlKCk7Ci0gIGluaXRpYWxpemVkXyA9IGZhbHNlOwotICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBBdWRpb01hbmFnZXI6OklzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVk
KCkgY29uc3QgewotICBBTE9HRCgiSXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKSIpOwotICBS
VENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1
cm4gal9hdWRpb19tYW5hZ2VyXy0+SXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKTsKLX0KLQot
Ym9vbCBBdWRpb01hbmFnZXI6OklzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSBjb25z
dCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7
Ci0gIHJldHVybiBoYXJkd2FyZV9hZWNfOwotfQotCi1ib29sIEF1ZGlvTWFuYWdlcjo6SXNBdXRv
bWF0aWNHYWluQ29udHJvbFN1cHBvcnRlZCgpIGNvbnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIGhhcmR3YXJlX2FnY187
Ci19Ci0KLWJvb2wgQXVkaW9NYW5hZ2VyOjpJc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIGNv
bnN0IHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgp
KTsKLSAgcmV0dXJuIGhhcmR3YXJlX25zXzsKLX0KLQotYm9vbCBBdWRpb01hbmFnZXI6OklzTG93
TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2No
ZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIEFMT0dEKCJJc0xvd0xhdGVuY3lQbGF5
b3V0U3VwcG9ydGVkKCkiKTsKLSAgLy8gU29tZSBkZXZpY2VzIGFyZSBibGFja2xpc3RlZCBmb3Ig
dXNhZ2Ugb2YgT3BlblNMIEVTIGV2ZW4gaWYgdGhleSByZXBvcnQKLSAgLy8gdGhhdCBsb3ctbGF0
ZW5jeSBwbGF5b3V0IGlzIHN1cHBvcnRlZC4gU2VlIGIvMjE0ODU3MDMgZm9yIGRldGFpbHMuCi0g
IHJldHVybiBqX2F1ZGlvX21hbmFnZXJfLT5Jc0RldmljZUJsYWNrbGlzdGVkRm9yT3BlblNMRVNV
c2FnZSgpID8KLSAgICAgIGZhbHNlIDogbG93X2xhdGVuY3lfcGxheW91dF87Ci19Ci0KLWJvb2wg
QXVkaW9NYW5hZ2VyOjpJc0xvd0xhdGVuY3lSZWNvcmRTdXBwb3J0ZWQoKSBjb25zdCB7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIEFMT0dE
KCJJc0xvd0xhdGVuY3lSZWNvcmRTdXBwb3J0ZWQoKSIpOwotICByZXR1cm4gbG93X2xhdGVuY3lf
cmVjb3JkXzsKLX0KLQotYm9vbCBBdWRpb01hbmFnZXI6OklzUHJvQXVkaW9TdXBwb3J0ZWQoKSBj
b25zdCB7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQo
KSk7Ci0gIEFMT0dEKCJJc1Byb0F1ZGlvU3VwcG9ydGVkKCkiKTsKLSAgLy8gVE9ETyhoZW5yaWth
KTogcmV0dXJuIHRoZSBzdGF0ZSBpbmRlcGVuZGVudGx5IG9mIGlmIE9wZW5TTCBFUyBpcwotICAv
LyBibGFja2xpc3RlZCBvciBub3QgZm9yIG5vdy4gV2UgY291bGQgdXNlIHRoZSBzYW1lIGFwcHJv
YWNoIGFzIGluCi0gIC8vIElzTG93TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQoKSBidXQgSSBjYW4n
dCBzZWUgdGhlIG5lZWQgZm9yIGl0IHlldC4KLSAgcmV0dXJuIHByb19hdWRpb187Ci19Ci0KLWlu
dCBBdWRpb01hbmFnZXI6OkdldERlbGF5RXN0aW1hdGVJbk1pbGxpc2Vjb25kcygpIGNvbnN0IHsK
LSAgcmV0dXJuIGRlbGF5X2VzdGltYXRlX2luX21pbGxpc2Vjb25kc187Ci19Ci0KLXZvaWQgSk5J
Q0FMTCBBdWRpb01hbmFnZXI6OkNhY2hlQXVkaW9QYXJhbWV0ZXJzKEpOSUVudiogZW52LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9iamVjdCBvYmos
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IHNh
bXBsZV9yYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgamludCBjaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX2FlYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJlX2FnYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGhhcmR3YXJl
X25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJv
b2xlYW4gbG93X2xhdGVuY3lfb3V0cHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgamJvb2xlYW4gbG93X2xhdGVuY3lfaW5wdXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBwcm9fYXVkaW8s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50IG91
dHB1dF9idWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppbnQgaW5wdXRfYnVmZmVyX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVfYXVkaW9fbWFuYWdlcikgewot
ICB3ZWJydGM6OkF1ZGlvTWFuYWdlciogdGhpc19vYmplY3QgPQotICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx3ZWJydGM6OkF1ZGlvTWFuYWdlcio+KG5hdGl2ZV9hdWRpb19tYW5hZ2VyKTsKLSAgdGhp
c19vYmplY3QtPk9uQ2FjaGVBdWRpb1BhcmFtZXRlcnMoCi0gICAgICBlbnYsIHNhbXBsZV9yYXRl
LCBjaGFubmVscywgaGFyZHdhcmVfYWVjLCBoYXJkd2FyZV9hZ2MsIGhhcmR3YXJlX25zLAotICAg
ICAgbG93X2xhdGVuY3lfb3V0cHV0LCBsb3dfbGF0ZW5jeV9pbnB1dCwgcHJvX2F1ZGlvLCBvdXRw
dXRfYnVmZmVyX3NpemUsCi0gICAgICBpbnB1dF9idWZmZXJfc2l6ZSk7Ci19Ci0KLXZvaWQgQXVk
aW9NYW5hZ2VyOjpPbkNhY2hlQXVkaW9QYXJhbWV0ZXJzKEpOSUVudiogZW52LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBzYW1wbGVfcmF0ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgY2hhbm5lbHMsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBoYXJkd2FyZV9h
ZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBo
YXJkd2FyZV9hZ2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBq
Ym9vbGVhbiBoYXJkd2FyZV9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpib29sZWFuIGxvd19sYXRlbmN5X291dHB1dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIGxvd19sYXRlbmN5X2lucHV0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gcHJvX2F1ZGlvLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBvdXRwdXRfYnVm
ZmVyX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqaW50
IGlucHV0X2J1ZmZlcl9zaXplKSB7Ci0gIEFMT0dEKCJPbkNhY2hlQXVkaW9QYXJhbWV0ZXJzJXMi
LCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIEFMT0dEKCJoYXJkd2FyZV9hZWM6ICVkIiwg
aGFyZHdhcmVfYWVjKTsKLSAgQUxPR0QoImhhcmR3YXJlX2FnYzogJWQiLCBoYXJkd2FyZV9hZ2Mp
OwotICBBTE9HRCgiaGFyZHdhcmVfbnM6ICVkIiwgaGFyZHdhcmVfbnMpOwotICBBTE9HRCgibG93
X2xhdGVuY3lfb3V0cHV0OiAlZCIsIGxvd19sYXRlbmN5X291dHB1dCk7Ci0gIEFMT0dEKCJsb3df
bGF0ZW5jeV9pbnB1dDogJWQiLCBsb3dfbGF0ZW5jeV9pbnB1dCk7Ci0gIEFMT0dEKCJwcm9fYXVk
aW86ICVkIiwgcHJvX2F1ZGlvKTsKLSAgQUxPR0QoInNhbXBsZV9yYXRlOiAlZCIsIHNhbXBsZV9y
YXRlKTsKLSAgQUxPR0QoImNoYW5uZWxzOiAlZCIsIGNoYW5uZWxzKTsKLSAgQUxPR0QoIm91dHB1
dF9idWZmZXJfc2l6ZTogJWQiLCBvdXRwdXRfYnVmZmVyX3NpemUpOwotICBBTE9HRCgiaW5wdXRf
YnVmZmVyX3NpemU6ICVkIiwgaW5wdXRfYnVmZmVyX3NpemUpOwotICBSVENfRENIRUNLKHRocmVh
ZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBoYXJkd2FyZV9hZWNfID0gaGFy
ZHdhcmVfYWVjOwotICBoYXJkd2FyZV9hZ2NfID0gaGFyZHdhcmVfYWdjOwotICBoYXJkd2FyZV9u
c18gPSBoYXJkd2FyZV9uczsKLSAgbG93X2xhdGVuY3lfcGxheW91dF8gPSBsb3dfbGF0ZW5jeV9v
dXRwdXQ7Ci0gIGxvd19sYXRlbmN5X3JlY29yZF8gPSBsb3dfbGF0ZW5jeV9pbnB1dDsKLSAgcHJv
X2F1ZGlvXyA9IHByb19hdWRpbzsKLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN1cHBvcnQgZm9y
IHN0ZXJlbyBvdXRwdXQuCi0gIHBsYXlvdXRfcGFyYW1ldGVyc18ucmVzZXQoc2FtcGxlX3JhdGUs
IHN0YXRpY19jYXN0PHNpemVfdD4oY2hhbm5lbHMpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHNpemVfdD4ob3V0cHV0X2J1ZmZlcl9zaXplKSk7Ci0gIHJlY29yZF9w
YXJhbWV0ZXJzXy5yZXNldChzYW1wbGVfcmF0ZSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihjaGFubmVs
cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KGlucHV0
X2J1ZmZlcl9zaXplKSk7Ci19Ci0KLWNvbnN0IEF1ZGlvUGFyYW1ldGVycyYgQXVkaW9NYW5hZ2Vy
OjpHZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKCkgewotICBSVENfQ0hFQ0socGxheW91dF9wYXJh
bWV0ZXJzXy5pc192YWxpZCgpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVk
T25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIHBsYXlvdXRfcGFyYW1ldGVyc187Ci19Ci0KLWNv
bnN0IEF1ZGlvUGFyYW1ldGVycyYgQXVkaW9NYW5hZ2VyOjpHZXRSZWNvcmRBdWRpb1BhcmFtZXRl
cnMoKSB7Ci0gIFJUQ19DSEVDSyhyZWNvcmRfcGFyYW1ldGVyc18uaXNfdmFsaWQoKSk7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVy
biByZWNvcmRfcGFyYW1ldGVyc187Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvYXVkaW9fbWFuYWdlci5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1
ZGlvX21hbmFnZXIuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDIwNiArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9J
RF9BVURJT19NQU5BR0VSX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9B
TkRST0lEX0FVRElPX01BTkFHRVJfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUg
PGpuaS5oPgotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVMuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9i
YXNlL3RocmVhZF9jaGVja2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2F1ZGlvX2RldmljZV9jb25maWcuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX2NvbW1vbi5oIgot
I2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfZ2VuZXJp
Yy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2Fu
ZHJvaWQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy91dGlsaXR5L2luY2x1ZGUvanZtX2Fu
ZHJvaWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIEltcGxlbWVudHMgc3VwcG9ydCBm
b3IgZnVuY3Rpb25zIGluIHRoZSBXZWJSVEMgYXVkaW8gc3RhY2sgZm9yIEFuZHJvaWQgdGhhdAot
Ly8gcmVsaWVzIG9uIHRoZSBBdWRpb01hbmFnZXIgaW4gYW5kcm9pZC5tZWRpYS4gSXQgYWxzbyBw
b3B1bGF0ZXMgYW4KLS8vIEF1ZGlvUGFyYW1ldGVyIHN0cnVjdHVyZSB3aXRoIG5hdGl2ZSBhdWRp
byBwYXJhbWV0ZXJzIGRldGVjdGVkIGF0Ci0vLyBjb25zdHJ1Y3Rpb24uIFRoaXMgY2xhc3MgZG9l
cyBub3QgbWFrZSBhbnkgYXVkaW8tcmVsYXRlZCBtb2RpZmljYXRpb25zCi0vLyB1bmxlc3MgSW5p
dCgpIGlzIGNhbGxlZC4gQ2FjaGluZyBhdWRpbyBwYXJhbWV0ZXJzIG1ha2VzIG5vIGNoYW5nZXMg
YnV0IG9ubHkKLS8vIHJlYWRzIGRhdGEgZnJvbSB0aGUgSmF2YSBzaWRlLgotY2xhc3MgQXVkaW9N
YW5hZ2VyIHsKLSBwdWJsaWM6Ci0gIC8vIFdyYXBzIHRoZSBKYXZhIHNwZWNpZmljIHBhcnRzIG9m
IHRoZSBBdWRpb01hbmFnZXIgaW50byBvbmUgaGVscGVyIGNsYXNzLgotICAvLyBTdG9yZXMgbWV0
aG9kIElEcyBmb3IgYWxsIHN1cHBvcnRlZCBtZXRob2RzIGF0IGNvbnN0cnVjdGlvbiBhbmQgdGhl
bgotICAvLyBhbGxvd3MgY2FsbHMgbGlrZSBKYXZhQXVkaW9NYW5hZ2VyOjpDbG9zZSgpIHdoaWxl
IGhpZGluZyB0aGUgSmF2YS9KTkkKLSAgLy8gcGFydHMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgY2FsbC4KLSAgY2xhc3MgSmF2YUF1ZGlvTWFuYWdlciB7Ci0gICBwdWJsaWM6Ci0gICAg
SmF2YUF1ZGlvTWFuYWdlcihOYXRpdmVSZWdpc3RyYXRpb24qIG5hdGl2ZV9yZWdpc3RyYXRpb24s
Ci0gICAgICAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBhdWRpb19t
YW5hZ2VyKTsKLSAgICB+SmF2YUF1ZGlvTWFuYWdlcigpOwotCi0gICAgYm9vbCBJbml0KCk7Ci0g
ICAgdm9pZCBDbG9zZSgpOwotICAgIGJvb2wgSXNDb21tdW5pY2F0aW9uTW9kZUVuYWJsZWQoKTsK
LSAgICBib29sIElzRGV2aWNlQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCk7Ci0KLSAgIHBy
aXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdsb2JhbFJlZj4gYXVkaW9fbWFuYWdlcl87Ci0g
ICAgam1ldGhvZElEIGluaXRfOwotICAgIGptZXRob2RJRCBkaXNwb3NlXzsKLSAgICBqbWV0aG9k
SUQgaXNfY29tbXVuaWNhdGlvbl9tb2RlX2VuYWJsZWRfOwotICAgIGptZXRob2RJRCBpc19kZXZp
Y2VfYmxhY2tsaXN0ZWRfZm9yX29wZW5fc2xlc191c2FnZV87Ci0gIH07Ci0KLSAgQXVkaW9NYW5h
Z2VyKCk7Ci0gIH5BdWRpb01hbmFnZXIoKTsKLQotICAvLyBTZXRzIHRoZSBjdXJyZW50bHkgYWN0
aXZlIGF1ZGlvIGxheWVyIGNvbWJpbmF0aW9uLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUKLSAgLy8g
SW5pdCgpLgotICB2b2lkIFNldEFjdGl2ZUF1ZGlvTGF5ZXIoQXVkaW9EZXZpY2VNb2R1bGU6OkF1
ZGlvTGF5ZXIgYXVkaW9fbGF5ZXIpOwotCi0gIC8vIENyZWF0ZXMgYW5kIHJlYWxpemVzIHRoZSBt
YWluIChnbG9iYWwpIE9wZW4gU0wgZW5naW5lIG9iamVjdCBhbmQgcmV0dXJucwotICAvLyBhIHJl
ZmVyZW5jZSB0byBpdC4gVGhlIGVuZ2luZSBvYmplY3QgaXMgb25seSBjcmVhdGVkIGF0IHRoZSBm
aXJzdCBjYWxsCi0gIC8vIHNpbmNlIE9wZW5TTCBFUyBmb3IgQW5kcm9pZCBvbmx5IHN1cHBvcnRz
IGEgc2luZ2xlIGVuZ2luZSBwZXIgYXBwbGljYXRpb24uCi0gIC8vIFN1YnNlcXVlbnQgY2FsbHMg
cmV0dXJucyB0aGUgYWxyZWFkeSBjcmVhdGVkIGVuZ2luZS4gVGhlIFNMIGVuZ2luZSBvYmplY3QK
LSAgLy8gaXMgZGVzdHJveWVkIHdoZW4gdGhlIEF1ZGlvTWFuYWdlciBvYmplY3QgaXMgZGVsZXRl
ZC4gSXQgbWVhbnMgdGhhdCB0aGUKLSAgLy8gZW5naW5lIG9iamVjdCB3aWxsIGJlIHRoZSBmaXJz
dCBPcGVuU0wgRVMgb2JqZWN0IHRvIGJlIGNyZWF0ZWQgYW5kIGxhc3QKLSAgLy8gb2JqZWN0IHRv
IGJlIGRlc3Ryb3llZC4KLSAgLy8gTm90ZSB0aGF0IE5VTEwgd2lsbCBiZSByZXR1cm5lZCB1bmxl
c3MgdGhlIGF1ZGlvIGxheWVyIGlzIHNwZWNpZmllZCBhcwotICAvLyBBdWRpb0RldmljZU1vZHVs
ZTo6a0FuZHJvaWRPcGVuU0xFU0F1ZGlvIG9yCi0gIC8vIEF1ZGlvRGV2aWNlTW9kdWxlOjprQW5k
cm9pZEphdmFJbnB1dEFuZE9wZW5TTEVTT3V0cHV0QXVkaW8uCi0gIFNMT2JqZWN0SXRmIEdldE9w
ZW5TTEVuZ2luZSgpOwotCi0gIC8vIEluaXRpYWxpemVzIHRoZSBhdWRpbyBtYW5hZ2VyIGFuZCBz
dG9yZXMgdGhlIGN1cnJlbnQgYXVkaW8gbW9kZS4KLSAgYm9vbCBJbml0KCk7Ci0gIC8vIFJldmVy
dCBhbnkgc2V0dGluZyBkb25lIGJ5IEluaXQoKS4KLSAgYm9vbCBDbG9zZSgpOwotCi0gIC8vIFJl
dHVybnMgdHJ1ZSBpZiBjdXJyZW50IGF1ZGlvIG1vZGUgaXMgQXVkaW9NYW5hZ2VyLk1PREVfSU5f
Q09NTVVOSUNBVElPTi4KLSAgYm9vbCBJc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgpIGNvbnN0
OwotCi0gIC8vIE5hdGl2ZSBhdWRpbyBwYXJhbWV0ZXJzIHN0b3JlZCBkdXJpbmcgY29uc3RydWN0
aW9uLgotICBjb25zdCBBdWRpb1BhcmFtZXRlcnMmIEdldFBsYXlvdXRBdWRpb1BhcmFtZXRlcnMo
KTsKLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzJiBHZXRSZWNvcmRBdWRpb1BhcmFtZXRlcnMoKTsK
LQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBidWlsdC1pbiBhdWRp
byBlZmZlY3RzIGZvciBBRUMsIEFHQwotICAvLyBhbmQgTlMuIFNvbWUgZGV2aWNlcyBjYW4gYWxz
byBiZSBibGFja2xpc3RlZCBmb3IgdXNlIGluIGNvbWJpbmF0aW9uIHdpdGgKLSAgLy8gcGxhdGZv
cm0gZWZmZWN0cyBhbmQgdGhlc2UgZGV2aWNlcyB3aWxsIHJldHVybiBmYWxzZS4KLSAgLy8gQ2Fu
IGN1cnJlbnRseSBvbmx5IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBhIEphdmEgYmFzZWQg
YXVkaW8gYmFja2VuZAotICAvLyBmb3IgdGhlIHJlY29yaW5nIHNpZGUgKGkuZS4gdXNpbmcgdGhl
IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQgQVBJKS4KLSAgYm9vbCBJc0Fjb3VzdGljRWNob0Nh
bmNlbGVyU3VwcG9ydGVkKCkgY29uc3Q7Ci0gIGJvb2wgSXNBdXRvbWF0aWNHYWluQ29udHJvbFN1
cHBvcnRlZCgpIGNvbnN0OwotICBib29sIElzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgY29u
c3Q7Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgdGhlIGxvdy1s
YXRlbmN5IGF1ZGlvIHBhdGhzIGluCi0gIC8vIGNvbWJpbmF0aW9uIHdpdGggT3BlblNMIEVTLgot
ICBib29sIElzTG93TGF0ZW5jeVBsYXlvdXRTdXBwb3J0ZWQoKSBjb25zdDsKLSAgYm9vbCBJc0xv
d0xhdGVuY3lSZWNvcmRTdXBwb3J0ZWQoKSBjb25zdDsKLQotICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGRldmljZSBzdXBwb3J0cyBwcm8tYXVkaW8gZmVhdHVyZXMgaW4gY29tYmluYXRpb24gd2l0
aAotICAvLyBPcGVuU0wgRVMuCi0gIGJvb2wgSXNQcm9BdWRpb1N1cHBvcnRlZCgpIGNvbnN0Owot
Ci0gIC8vIFJldHVybnMgdGhlIGVzdGltYXRlZCB0b3RhbCBkZWxheSBvZiB0aGlzIGRldmljZS4g
VW5pdCBpcyBpbiBtaWxsaXNlY29uZHMuCi0gIC8vIFRoZSB2YXVsZSBpcyBzZXQgb25jZSBhdCBj
b25zdHJ1Y3Rpb24gYW5kIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgdGhhdC4KLSAgLy8gUG9zc2libGUg
dmFsdWVzIGFyZSB3ZWJydGM6OmtMb3dMYXRlbmN5TW9kZURlbGF5RXN0aW1hdGVJbk1pbGxpc2Vj
b25kcyBhbmQKLSAgLy8gd2VicnRjOjprSGlnaExhdGVuY3lNb2RlRGVsYXlFc3RpbWF0ZUluTWls
bGlzZWNvbmRzLgotICBpbnQgR2V0RGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzKCkgY29uc3Q7
Ci0KLSBwcml2YXRlOgotICAvLyBDYWxsZWQgZnJvbSBKYXZhIHNpZGUgc28gd2UgY2FuIGNhY2hl
IHRoZSBuYXRpdmUgYXVkaW8gcGFyYW1ldGVycy4KLSAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBj
YWxsZWQgYnkgdGhlIFdlYlJ0Y0F1ZGlvTWFuYWdlciBjb25zdHJ1Y3RvciwgaS5lLgotICAvLyBv
biB0aGUgc2FtZSB0aHJlYWQgdGhhdCB0aGlzIG9iamVjdCBpcyBjcmVhdGVkIG9uLgotICBzdGF0
aWMgdm9pZCBKTklDQUxMIENhY2hlQXVkaW9QYXJhbWV0ZXJzKEpOSUVudiogZW52LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvYmplY3Qgb2JqLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgc2FtcGxlX3JhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBjaGFubmVscywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBoYXJk
d2FyZV9hZWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJv
b2xlYW4gaGFyZHdhcmVfYWdjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGpib29sZWFuIGhhcmR3YXJlX25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGpib29sZWFuIGxvd19sYXRlbmN5X291dHB1dCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBsb3dfbGF0ZW5jeV9pbnB1
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBw
cm9fYXVkaW8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlu
dCBvdXRwdXRfYnVmZmVyX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgamludCBpbnB1dF9idWZmZXJfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBqbG9uZyBuYXRpdmVfYXVkaW9fbWFuYWdlcik7Ci0gIHZvaWQg
T25DYWNoZUF1ZGlvUGFyYW1ldGVycyhKTklFbnYqIGVudiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGppbnQgc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBqaW50IGNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4g
aGFyZHdhcmVfYWVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gaGFy
ZHdhcmVfYWdjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamJvb2xlYW4gaGFyZHdh
cmVfbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBsb3dfbGF0ZW5j
eV9vdXRwdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYm9vbGVhbiBsb3dfbGF0
ZW5jeV9pbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpib29sZWFuIHByb19h
dWRpbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppbnQgb3V0cHV0X2J1ZmZlcl9z
aXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamludCBpbnB1dF9idWZmZXJfc2l6
ZSk7Ci0KLSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiB0aGUgY29uc3RydWN0b3IuCi0gIC8vIFdl
IGNhbiB0aGVuIHVzZSBUaHJlYWRDaGVja2VyOjpDYWxsZWRPblZhbGlkVGhyZWFkKCkgdG8gZW5z
dXJlIHRoYXQKLSAgLy8gb3RoZXIgbWV0aG9kcyBhcmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgdGhy
ZWFkLgotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotCi0gIC8vIENhbGxz
IEF0dGFjaEN1cnJlbnRUaHJlYWQoKSBpZiB0aGlzIHRocmVhZCBpcyBub3QgYXR0YWNoZWQgYXQg
Y29uc3RydWN0aW9uLgotICAvLyBBbHNvIGVuc3VyZXMgdGhhdCBEZXRhY2hDdXJyZW50VGhyZWFk
KCkgaXMgY2FsbGVkIGF0IGRlc3RydWN0aW9uLgotICBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVk
ZWQgYXR0YWNoX3RocmVhZF9pZl9uZWVkZWRfOwotCi0gIC8vIFdyYXBzIHRoZSBKTkkgaW50ZXJm
YWNlIHBvaW50ZXIgYW5kIG1ldGhvZHMgYXNzb2NpYXRlZCB3aXRoIGl0LgotICBzdGQ6OnVuaXF1
ZV9wdHI8Sk5JRW52aXJvbm1lbnQ+IGpfZW52aXJvbm1lbnRfOwotCi0gIC8vIENvbnRhaW5zIGZh
Y3RvcnkgbWV0aG9kIGZvciBjcmVhdGluZyB0aGUgSmF2YSBvYmplY3QuCi0gIHN0ZDo6dW5pcXVl
X3B0cjxOYXRpdmVSZWdpc3RyYXRpb24+IGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl87Ci0KLSAgLy8g
V3JhcHMgdGhlIEphdmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvTWFuYWdlci4KLSAgc3Rk
Ojp1bmlxdWVfcHRyPEF1ZGlvTWFuYWdlcjo6SmF2YUF1ZGlvTWFuYWdlcj4gal9hdWRpb19tYW5h
Z2VyXzsKLQotICAvLyBDb250YWlucyB0aGUgc2VsZWN0ZWQgYXVkaW8gbGF5ZXIgc3BlY2lmaWVk
IGJ5IHRoZSBBdWRpb0xheWVyIGVudW1lcmF0b3IKLSAgLy8gaW4gdGhlIEF1ZGlvRGV2aWNlTW9k
dWxlIGNsYXNzLgotICBBdWRpb0RldmljZU1vZHVsZTo6QXVkaW9MYXllciBhdWRpb19sYXllcl87
Ci0KLSAgLy8gVGhpcyBvYmplY3QgaXMgdGhlIGdsb2JhbCBlbnRyeSBwb2ludCBvZiB0aGUgT3Bl
blNMIEVTIEFQSS4KLSAgLy8gQWZ0ZXIgY3JlYXRpbmcgdGhlIGVuZ2luZSBvYmplY3QsIHRoZSBh
cHBsaWNhdGlvbiBjYW4gb2J0YWluIHRoaXMgb2JqZWN04oCYcwotICAvLyBTTEVuZ2luZUl0ZiBp
bnRlcmZhY2UuIFRoaXMgaW50ZXJmYWNlIGNvbnRhaW5zIGNyZWF0aW9uIG1ldGhvZHMgZm9yIGFs
bAotICAvLyB0aGUgb3RoZXIgb2JqZWN0IHR5cGVzIGluIHRoZSBBUEkuIE5vbmUgb2YgdGhlc2Ug
aW50ZXJmYWNlIGFyZSByZWFsaXplZAotICAvLyBieSB0aGlzIGNsYXNzLiBJdCBvbmx5IHByb3Zp
ZGVzIGFjY2VzcyB0byB0aGUgZ2xvYmFsIGVuZ2luZSBvYmplY3QuCi0gIHdlYnJ0Yzo6U2NvcGVk
U0xPYmplY3RJdGYgZW5naW5lX29iamVjdF87Ci0KLSAgLy8gU2V0IHRvIHRydWUgYnkgSW5pdCgp
IGFuZCBmYWxzZSBieSBDbG9zZSgpLgotICBib29sIGluaXRpYWxpemVkXzsKLQotICAvLyBUcnVl
IGlmIGRldmljZSBzdXBwb3J0cyBoYXJkd2FyZSAob3IgYnVpbHQtaW4pIEFFQy4KLSAgYm9vbCBo
YXJkd2FyZV9hZWNfOwotICAvLyBUcnVlIGlmIGRldmljZSBzdXBwb3J0cyBoYXJkd2FyZSAob3Ig
YnVpbHQtaW4pIEFHQy4KLSAgYm9vbCBoYXJkd2FyZV9hZ2NfOwotICAvLyBUcnVlIGlmIGRldmlj
ZSBzdXBwb3J0cyBoYXJkd2FyZSAob3IgYnVpbHQtaW4pIE5TLgotICBib29sIGhhcmR3YXJlX25z
XzsKLQotICAvLyBUcnVlIGlmIGRldmljZSBzdXBwb3J0cyB0aGUgbG93LWxhdGVuY3kgT3BlblNM
IEVTIGF1ZGlvIHBhdGggZm9yIG91dHB1dC4KLSAgYm9vbCBsb3dfbGF0ZW5jeV9wbGF5b3V0XzsK
LQotICAvLyBUcnVlIGlmIGRldmljZSBzdXBwb3J0cyB0aGUgbG93LWxhdGVuY3kgT3BlblNMIEVT
IGF1ZGlvIHBhdGggZm9yIGlucHV0LgotICBib29sIGxvd19sYXRlbmN5X3JlY29yZF87Ci0KLSAg
Ly8gVHJ1ZSBpZiBkZXZpY2Ugc3VwcG9ydHMgdGhlIGxvdy1sYXRlbmN5IE9wZW5TTCBFUyBwcm8t
YXVkaW8gcGF0aC4KLSAgYm9vbCBwcm9fYXVkaW9fOwotCi0gIC8vIFRoZSBkZWxheSBlc3RpbWF0
ZSBjYW4gdGFrZSBvbmUgb2YgdHdvIGZpeGVkIHZhbHVlcyBkZXBlbmRpbmcgb24gaWYgdGhlCi0g
IC8vIGRldmljZSBzdXBwb3J0cyBsb3ctbGF0ZW5jeSBvdXRwdXQgb3Igbm90LgotICBpbnQgZGVs
YXlfZXN0aW1hdGVfaW5fbWlsbGlzZWNvbmRzXzsKLQotICAvLyBDb250YWlucyBuYXRpdmUgcGFy
YW1ldGVycyAoZS5nLiBzYW1wbGUgcmF0ZSwgY2hhbm5lbCBjb25maWd1cmF0aW9uKS4KLSAgLy8g
U2V0IGF0IGNvbnN0cnVjdGlvbiBpbiBPbkNhY2hlQXVkaW9QYXJhbWV0ZXJzKCkgd2hpY2ggaXMg
Y2FsbGVkIGZyb20KLSAgLy8gSmF2YSBvbiB0aGUgc2FtZSB0aHJlYWQgYXMgdGhpcyBvYmplY3Qg
aXMgY3JlYXRlZCBvbi4KLSAgQXVkaW9QYXJhbWV0ZXJzIHBsYXlvdXRfcGFyYW1ldGVyc187Ci0g
IEF1ZGlvUGFyYW1ldGVycyByZWNvcmRfcGFyYW1ldGVyc187Ci19OwotCi19ICAvLyBuYW1lc3Bh
Y2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJP
SURfQVVESU9fTUFOQUdFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyX3Vu
aXR0ZXN0LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlcl91bml0
dGVzdC5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2Vy
X3VuaXR0ZXN0LmNjCShub25leGlzdGVudCkKQEAgLTEsMjMxICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8U0xFUy9PcGVuU0xFU19BbmRyb2lkLmg+Ci0KLSNpbmNs
dWRlICJ3ZWJydGMvYmFzZS9hcnJheXNpemUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9mb3Jt
YXRfbWFjcm9zLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvYXVkaW9fbWFuYWdlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hbmRyb2lkL2J1aWxkX2luZm8uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9lbnN1cmVfaW5pdGlhbGl6ZWQuaCIKLSNpbmNsdWRlICJ3ZWJydGMvdGVz
dC9ndGVzdC5oIgotCi0jZGVmaW5lIFBSSU5UKC4uLikgZnByaW50ZihzdGRlcnIsIF9fVkFfQVJH
U19fKTsKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLXN0YXRpYyBjb25zdCBjaGFyIGtUYWdbXSA9
ICIgICI7Ci0KLWNsYXNzIEF1ZGlvTWFuYWdlclRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0
IHsKLSBwcm90ZWN0ZWQ6Ci0gIEF1ZGlvTWFuYWdlclRlc3QoKSB7Ci0gICAgLy8gT25lLXRpbWUg
aW5pdGlhbGl6YXRpb24gb2YgSlZNIGFuZCBhcHBsaWNhdGlvbiBjb250ZXh0LiBFbnN1cmVzIHRo
YXQgd2UKLSAgICAvLyBjYW4gZG8gY2FsbHMgYmV0d2VlbiBDKysgYW5kIEphdmEuCi0gICAgd2Vi
cnRjOjphdWRpb2RldmljZW1vZHVsZTo6RW5zdXJlSW5pdGlhbGl6ZWQoKTsKLSAgICBhdWRpb19t
YW5hZ2VyXy5yZXNldChuZXcgQXVkaW9NYW5hZ2VyKCkpOwotICAgIFNldEFjdGl2ZUF1ZGlvTGF5
ZXIoKTsKLSAgICBwbGF5b3V0X3BhcmFtZXRlcnNfID0gYXVkaW9fbWFuYWdlcigpLT5HZXRQbGF5
b3V0QXVkaW9QYXJhbWV0ZXJzKCk7Ci0gICAgcmVjb3JkX3BhcmFtZXRlcnNfID0gYXVkaW9fbWFu
YWdlcigpLT5HZXRSZWNvcmRBdWRpb1BhcmFtZXRlcnMoKTsKLSAgfQotCi0gIEF1ZGlvTWFuYWdl
ciogYXVkaW9fbWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIGF1ZGlvX21hbmFnZXJfLmdldCgpOyB9
Ci0KLSAgLy8gQSB2YWxpZCBhdWRpbyBsYXllciBtdXN0IGFsd2F5cyBiZSBzZXQgYmVmb3JlIGNh
bGxpbmcgSW5pdCgpLCBoZW5jZSB3ZQotICAvLyBtaWdodCBhcyB3ZWxsIG1ha2UgaXQgYSBwYXJ0
IG9mIHRoZSB0ZXN0IGZpeHR1cmUuCi0gIHZvaWQgU2V0QWN0aXZlQXVkaW9MYXllcigpIHsKLSAg
ICBFWFBFQ1RfRVEoMCwgYXVkaW9fbWFuYWdlcigpLT5HZXREZWxheUVzdGltYXRlSW5NaWxsaXNl
Y29uZHMoKSk7Ci0gICAgYXVkaW9fbWFuYWdlcigpLT5TZXRBY3RpdmVBdWRpb0xheWVyKEF1ZGlv
RGV2aWNlTW9kdWxlOjprQW5kcm9pZEphdmFBdWRpbyk7Ci0gICAgRVhQRUNUX05FKDAsIGF1ZGlv
X21hbmFnZXIoKS0+R2V0RGVsYXlFc3RpbWF0ZUluTWlsbGlzZWNvbmRzKCkpOwotICB9Ci0KLSAg
Ly8gT25lIHdheSB0byBlbnN1cmUgdGhhdCB0aGUgZW5naW5lIG9iamVjdCBpcyB2YWxpZCBpcyB0
byBjcmVhdGUgYW4KLSAgLy8gU0wgRW5naW5lIGludGVyZmFjZSBzaW5jZSBpdCBleHBvc2VzIGNy
ZWF0aW9uIG1ldGhvZHMgb2YgYWxsIHRoZSBPcGVuU0wgRVMKLSAgLy8gb2JqZWN0IHR5cGVzIGFu
ZCBpdCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB0aGUgZW5naW5lIG9iamVjdC4gVGhpcyBtZXRob2QK
LSAgLy8gYWxzbyB2ZXJpZmllcyB0aGF0IHRoZSBlbmdpbmUgaW50ZXJmYWNlIHN1cHBvcnRzIGF0
IGxlYXN0IG9uZSBpbnRlcmZhY2UuCi0gIC8vIE5vdGUgdGhhdCwgdGhlIHRlc3QgYmVsb3cgaXMg
bm90IGEgZnVsbCB0ZXN0IG9mIHRoZSBTTEVuZ2luZUl0ZiBvYmplY3QKLSAgLy8gYnV0IG9ubHkg
YSBzaW1wbGUgc2FuaXR5IHRlc3QgdG8gY2hlY2sgdGhhdCB0aGUgZ2xvYmFsIGVuZ2luZSBvYmpl
Y3QgaXMgT0suCi0gIHZvaWQgVmFsaWRhdGVTTEVuZ2luZShTTE9iamVjdEl0ZiBlbmdpbmVfb2Jq
ZWN0KSB7Ci0gICAgRVhQRUNUX05FKG51bGxwdHIsIGVuZ2luZV9vYmplY3QpOwotICAgIC8vIEdl
dCB0aGUgU0wgRW5naW5lIGludGVyZmFjZSB3aGljaCBpcyBleHBvc2VkIGJ5IHRoZSBlbmdpbmUg
b2JqZWN0LgotICAgIFNMRW5naW5lSXRmIGVuZ2luZTsKLSAgICBTTHJlc3VsdCByZXN1bHQgPQot
ICAgICAgICAoKmVuZ2luZV9vYmplY3QpLT5HZXRJbnRlcmZhY2UoZW5naW5lX29iamVjdCwgU0xf
SUlEX0VOR0lORSwgJmVuZ2luZSk7Ci0gICAgRVhQRUNUX0VRKHJlc3VsdCwgU0xfUkVTVUxUX1NV
Q0NFU1MpIDw8ICJHZXRJbnRlcmZhY2UoKSBvbiBlbmdpbmUgZmFpbGVkIjsKLSAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgU0wgRW5naW5lIGludGVyZmFjZSBleHBvc2VzIGF0IGxlYXN0IG9uZSBpbnRl
cmZhY2UuCi0gICAgU0x1aW50MzIgb2JqZWN0X2lkID0gU0xfT0JKRUNUSURfRU5HSU5FOwotICAg
IFNMdWludDMyIG51bV9zdXBwb3J0ZWRfaW50ZXJmYWNlcyA9IDA7Ci0gICAgcmVzdWx0ID0gKCpl
bmdpbmUpLT5RdWVyeU51bVN1cHBvcnRlZEludGVyZmFjZXMoZW5naW5lLCBvYmplY3RfaWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm51bV9z
dXBwb3J0ZWRfaW50ZXJmYWNlcyk7Ci0gICAgRVhQRUNUX0VRKHJlc3VsdCwgU0xfUkVTVUxUX1NV
Q0NFU1MpCi0gICAgICAgIDw8ICJRdWVyeU51bVN1cHBvcnRlZEludGVyZmFjZXMoKSBmYWlsZWQi
OwotICAgIEVYUEVDVF9HRShudW1fc3VwcG9ydGVkX2ludGVyZmFjZXMsIDF1KTsKLSAgfQotCi0g
IHN0ZDo6dW5pcXVlX3B0cjxBdWRpb01hbmFnZXI+IGF1ZGlvX21hbmFnZXJfOwotICBBdWRpb1Bh
cmFtZXRlcnMgcGxheW91dF9wYXJhbWV0ZXJzXzsKLSAgQXVkaW9QYXJhbWV0ZXJzIHJlY29yZF9w
YXJhbWV0ZXJzXzsKLX07Ci0KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBDb25zdHJ1Y3REZXN0
cnVjdCkgewotfQotCi0vLyBJdCBzaG91bGQgbm90IGJlIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBP
cGVuU0wgZW5naW5lIG9iamVjdCBpZiBKYXZhIGJhc2VkCi0vLyBhdWRpbyBpcyByZXF1ZXN0ZWQg
aW4gYm90aCBkaXJlY3Rpb25zLgotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIEdldE9wZW5TTEVu
Z2luZVNob3VsZEZhaWxGb3JKYXZhQXVkaW9MYXllcikgewotICBhdWRpb19tYW5hZ2VyKCktPlNl
dEFjdGl2ZUF1ZGlvTGF5ZXIoQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRyb2lkSmF2YUF1ZGlvKTsK
LSAgU0xPYmplY3RJdGYgZW5naW5lX29iamVjdCA9IGF1ZGlvX21hbmFnZXIoKS0+R2V0T3BlblNM
RW5naW5lKCk7Ci0gIEVYUEVDVF9FUShudWxscHRyLCBlbmdpbmVfb2JqZWN0KTsKLX0KLQotLy8g
SXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBPcGVuU0wgZW5naW5lIG9iamVjdCBp
ZiBPcGVuU0wgRVMgYmFzZWQKLS8vIGF1ZGlvIGlzIHJlcXVlc3RlZCBpbiBhbnkgZGlyZWN0aW9u
LgotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIEdldE9wZW5TTEVuZ2luZVNob3VsZFN1Y2NlZWRG
b3JPcGVuU0xFU0F1ZGlvTGF5ZXIpIHsKLSAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgYXVkaW8gbGF5
ZXJzIHRoYXQgdXNlcyBPcGVuU0wgRVMgYXVkaW8uCi0gIGNvbnN0IEF1ZGlvRGV2aWNlTW9kdWxl
OjpBdWRpb0xheWVyIG9wZW5zbGVzX2F1ZGlvW10gPSB7Ci0gICAgICBBdWRpb0RldmljZU1vZHVs
ZTo6a0FuZHJvaWRPcGVuU0xFU0F1ZGlvLAotICAgICAgQXVkaW9EZXZpY2VNb2R1bGU6OmtBbmRy
b2lkSmF2YUlucHV0QW5kT3BlblNMRVNPdXRwdXRBdWRpb307Ci0gIC8vIFZlcmlmeSB0aGF0IHRo
ZSBnbG9iYWwgKHNpbmdsZXRvbikgT3BlblNMIEVuZ2luZSBjYW4gYmUgYWNxdWlyZWQgZm9yIGFs
bAotICAvLyBhdWRpbyBsYXllcyB0aGF0IHVzZXMgT3BlblNMIEVTLiBOb3RlIHRoYXQgdGhlIGVu
Z2luZSBpcyBvbmx5IGNyZWF0ZWQgb25jZS4KLSAgZm9yIChjb25zdCBBdWRpb0RldmljZU1vZHVs
ZTo6QXVkaW9MYXllciBhdWRpb19sYXllciA6IG9wZW5zbGVzX2F1ZGlvKSB7Ci0gICAgYXVkaW9f
bWFuYWdlcigpLT5TZXRBY3RpdmVBdWRpb0xheWVyKGF1ZGlvX2xheWVyKTsKLSAgICBTTE9iamVj
dEl0ZiBlbmdpbmVfb2JqZWN0ID0gYXVkaW9fbWFuYWdlcigpLT5HZXRPcGVuU0xFbmdpbmUoKTsK
LSAgICBFWFBFQ1RfTkUobnVsbHB0ciwgZW5naW5lX29iamVjdCk7Ci0gICAgLy8gUGVyZm9ybSBh
IHNpbXBsZSBzYW5pdHkgY2hlY2sgb2YgdGhlIGNyZWF0ZWQgZW5naW5lIG9iamVjdC4KLSAgICBW
YWxpZGF0ZVNMRW5naW5lKGVuZ2luZV9vYmplY3QpOwotICB9Ci19Ci0KLVRFU1RfRihBdWRpb01h
bmFnZXJUZXN0LCBJbml0Q2xvc2UpIHsKLSAgRVhQRUNUX1RSVUUoYXVkaW9fbWFuYWdlcigpLT5J
bml0KCkpOwotICBFWFBFQ1RfVFJVRShhdWRpb19tYW5hZ2VyKCktPkNsb3NlKCkpOwotfQotCi1U
RVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgSXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCkg
ewotICBQUklOVCgiJXNBY291c3RpYyBFY2hvIENhbmNlbGVyIHN1cHBvcnQ6ICVzXG4iLCBrVGFn
LAotICAgICAgICBhdWRpb19tYW5hZ2VyKCktPklzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0
ZWQoKSA/ICJZZXMiIDogIk5vIik7Ci19Ci0KLVRFU1RfRihBdWRpb01hbmFnZXJUZXN0LCBJc0F1
dG9tYXRpY0dhaW5Db250cm9sU3VwcG9ydGVkKSB7Ci0gIEVYUEVDVF9GQUxTRShhdWRpb19tYW5h
Z2VyKCktPklzQXV0b21hdGljR2FpbkNvbnRyb2xTdXBwb3J0ZWQoKSk7Ci19Ci0KLVRFU1RfRihB
dWRpb01hbmFnZXJUZXN0LCBJc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCkgewotICBQUklOVCgi
JXNOb2lzZSBTdXBwcmVzc29yIHN1cHBvcnQ6ICVzXG4iLCBrVGFnLAotICAgICAgICBhdWRpb19t
YW5hZ2VyKCktPklzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgPyAiWWVzIiA6ICJObyIpOwot
fQotCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgSXNMb3dMYXRlbmN5UGxheW91dFN1cHBvcnRl
ZCkgewotICBQUklOVCgiJXNMb3cgbGF0ZW5jeSBvdXRwdXQgc3VwcG9ydDogJXNcbiIsIGtUYWcs
Ci0gICAgICAgIGF1ZGlvX21hbmFnZXIoKS0+SXNMb3dMYXRlbmN5UGxheW91dFN1cHBvcnRlZCgp
ID8gIlllcyIgOiAiTm8iKTsKLX0KLQotVEVTVF9GKEF1ZGlvTWFuYWdlclRlc3QsIElzTG93TGF0
ZW5jeVJlY29yZFN1cHBvcnRlZCkgewotICBQUklOVCgiJXNMb3cgbGF0ZW5jeSBpbnB1dCBzdXBw
b3J0OiAlc1xuIiwga1RhZywKLSAgICAgICAgYXVkaW9fbWFuYWdlcigpLT5Jc0xvd0xhdGVuY3lS
ZWNvcmRTdXBwb3J0ZWQoKSA/ICJZZXMiIDogIk5vIik7Ci19Ci0KLVRFU1RfRihBdWRpb01hbmFn
ZXJUZXN0LCBJc1Byb0F1ZGlvU3VwcG9ydGVkKSB7Ci0gIFBSSU5UKCIlc1BybyBhdWRpbyBzdXBw
b3J0OiAlc1xuIiwga1RhZywKLSAgICAgICAgYXVkaW9fbWFuYWdlcigpLT5Jc1Byb0F1ZGlvU3Vw
cG9ydGVkKCkgPyAiWWVzIiA6ICJObyIpOwotfQotCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwg
U2hvd0F1ZGlvUGFyYW1ldGVySW5mbykgewotICBjb25zdCBib29sIGxvd19sYXRlbmN5X291dCA9
IGF1ZGlvX21hbmFnZXIoKS0+SXNMb3dMYXRlbmN5UGxheW91dFN1cHBvcnRlZCgpOwotICBjb25z
dCBib29sIGxvd19sYXRlbmN5X2luID0gYXVkaW9fbWFuYWdlcigpLT5Jc0xvd0xhdGVuY3lSZWNv
cmRTdXBwb3J0ZWQoKTsKLSAgUFJJTlQoIlBMQVlPVVQ6XG4iKTsKLSAgUFJJTlQoIiVzYXVkaW8g
bGF5ZXI6ICVzXG4iLCBrVGFnLAotICAgICAgICBsb3dfbGF0ZW5jeV9vdXQgPyAiTG93IGxhdGVu
Y3kgT3BlblNMIiA6ICJKYXZhL0pOSSBiYXNlZCBBdWRpb1RyYWNrIik7Ci0gIFBSSU5UKCIlc3Nh
bXBsZSByYXRlOiAlZCBIelxuIiwga1RhZywgcGxheW91dF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0
ZSgpKTsKLSAgUFJJTlQoIiVzY2hhbm5lbHM6ICUiIFBSSXVTICJcbiIsIGtUYWcsIHBsYXlvdXRf
cGFyYW1ldGVyc18uY2hhbm5lbHMoKSk7Ci0gIFBSSU5UKCIlc2ZyYW1lcyBwZXIgYnVmZmVyOiAl
IiBQUkl1UyAiIDw9PiAlLjJmIG1zXG4iLCBrVGFnLAotICAgICAgICBwbGF5b3V0X3BhcmFtZXRl
cnNfLmZyYW1lc19wZXJfYnVmZmVyKCksCi0gICAgICAgIHBsYXlvdXRfcGFyYW1ldGVyc18uR2V0
QnVmZmVyU2l6ZUluTWlsbGlzZWNvbmRzKCkpOwotICBQUklOVCgiUkVDT1JEOiBcbiIpOwotICBQ
UklOVCgiJXNhdWRpbyBsYXllcjogJXNcbiIsIGtUYWcsCi0gICAgICAgIGxvd19sYXRlbmN5X2lu
ID8gIkxvdyBsYXRlbmN5IE9wZW5TTCIgOiAiSmF2YS9KTkkgYmFzZWQgQXVkaW9SZWNvcmQiKTsK
LSAgUFJJTlQoIiVzc2FtcGxlIHJhdGU6ICVkIEh6XG4iLCBrVGFnLCByZWNvcmRfcGFyYW1ldGVy
c18uc2FtcGxlX3JhdGUoKSk7Ci0gIFBSSU5UKCIlc2NoYW5uZWxzOiAlIiBQUkl1UyAiXG4iLCBr
VGFnLCByZWNvcmRfcGFyYW1ldGVyc18uY2hhbm5lbHMoKSk7Ci0gIFBSSU5UKCIlc2ZyYW1lcyBw
ZXIgYnVmZmVyOiAlIiBQUkl1UyAiIDw9PiAlLjJmIG1zXG4iLCBrVGFnLAotICAgICAgICByZWNv
cmRfcGFyYW1ldGVyc18uZnJhbWVzX3Blcl9idWZmZXIoKSwKLSAgICAgICAgcmVjb3JkX3BhcmFt
ZXRlcnNfLkdldEJ1ZmZlclNpemVJbk1pbGxpc2Vjb25kcygpKTsKLX0KLQotLy8gVGhlIGF1ZGlv
IGRldmljZSBtb2R1bGUgb25seSBzdXBwb3JzIHRoZSBzYW1lIHNhbXBsZSByYXRlIGluIGJvdGgg
ZGlyZWN0aW9ucy4KLS8vIEluIGFkZGl0aW9uLCBpbiBmdWxsLWR1cGxleCBsb3ctbGF0ZW5jeSBt
b2RlIChPcGVuU0wgRVMpLCBib3RoIGlucHV0IGFuZAotLy8gb3V0cHV0IG11c3QgdXNlIHRoZSBz
YW1lIG5hdGl2ZSBidWZmZXIgc2l6ZSB0byBhbGxvdyBmb3IgdXNhZ2Ugb2YgdGhlIGZhc3QKLS8v
IGF1ZGlvIHRyYWNrIGluIEFuZHJvaWQuCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgVmVyaWZ5
QXVkaW9QYXJhbWV0ZXJzKSB7Ci0gIGNvbnN0IGJvb2wgbG93X2xhdGVuY3lfb3V0ID0gYXVkaW9f
bWFuYWdlcigpLT5Jc0xvd0xhdGVuY3lQbGF5b3V0U3VwcG9ydGVkKCk7Ci0gIGNvbnN0IGJvb2wg
bG93X2xhdGVuY3lfaW4gPSBhdWRpb19tYW5hZ2VyKCktPklzTG93TGF0ZW5jeVJlY29yZFN1cHBv
cnRlZCgpOwotICBFWFBFQ1RfRVEocGxheW91dF9wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpLAot
ICAgICAgICAgICAgcmVjb3JkX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCkpOwotICBpZiAobG93
X2xhdGVuY3lfb3V0ICYmIGxvd19sYXRlbmN5X2luKSB7Ci0gICAgRVhQRUNUX0VRKHBsYXlvdXRf
cGFyYW1ldGVyc18uZnJhbWVzX3Blcl9idWZmZXIoKSwKLSAgICAgICAgICAgICAgcmVjb3JkX3Bh
cmFtZXRlcnNfLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotICB9Ci19Ci0KLS8vIEFkZCBkZXZpY2Ut
c3BlY2lmaWMgaW5mb3JtYXRpb24gdG8gdGhlIHRlc3QgZm9yIGxvZ2dpbmcgcHVycG9zZXMuCi1U
RVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgU2hvd0RldmljZUluZm8pIHsKLSAgQnVpbGRJbmZvIGJ1
aWxkX2luZm87Ci0gIFBSSU5UKCIlc21vZGVsOiAlc1xuIiwga1RhZywgYnVpbGRfaW5mby5HZXRE
ZXZpY2VNb2RlbCgpLmNfc3RyKCkpOwotICBQUklOVCgiJXNicmFuZDogJXNcbiIsIGtUYWcsIGJ1
aWxkX2luZm8uR2V0QnJhbmQoKS5jX3N0cigpKTsKLSAgUFJJTlQoIiVzbWFudWZhY3R1cmVyOiAl
c1xuIiwKLSAgICAgICAga1RhZywgYnVpbGRfaW5mby5HZXREZXZpY2VNYW51ZmFjdHVyZXIoKS5j
X3N0cigpKTsKLX0KLQotLy8gQWRkIEFuZHJvaWQgYnVpbGQgaW5mb3JtYXRpb24gdG8gdGhlIHRl
c3QgZm9yIGxvZ2dpbmcgcHVycG9zZXMuCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgU2hvd0J1
aWxkSW5mbykgewotICBCdWlsZEluZm8gYnVpbGRfaW5mbzsKLSAgUFJJTlQoIiVzYnVpbGQgcmVs
ZWFzZTogJXNcbiIsIGtUYWcsIGJ1aWxkX2luZm8uR2V0QnVpbGRSZWxlYXNlKCkuY19zdHIoKSk7
Ci0gIFBSSU5UKCIlc2J1aWxkIGlkOiAlc1xuIiwga1RhZywgYnVpbGRfaW5mby5HZXRBbmRyb2lk
QnVpbGRJZCgpLmNfc3RyKCkpOwotICBQUklOVCgiJXNidWlsZCB0eXBlOiAlc1xuIiwga1RhZywg
YnVpbGRfaW5mby5HZXRCdWlsZFR5cGUoKS5jX3N0cigpKTsKLSAgUFJJTlQoIiVzU0RLIHZlcnNp
b246ICVkXG4iLCBrVGFnLCBidWlsZF9pbmZvLkdldFNka1ZlcnNpb24oKSk7Ci19Ci0KLS8vIEJh
c2ljIHRlc3Qgb2YgdGhlIEF1ZGlvUGFyYW1ldGVycyBjbGFzcyB1c2luZyBkZWZhdWx0IGNvbnN0
cnVjdGlvbiB3aGVyZQotLy8gYWxsIG1lbWJlcnMgYXJlIHNldCB0byB6ZXJvLgotVEVTVF9GKEF1
ZGlvTWFuYWdlclRlc3QsIEF1ZGlvUGFyYW1ldGVyc1dpdGhEZWZhdWx0Q29uc3RydWN0aW9uKSB7
Ci0gIEF1ZGlvUGFyYW1ldGVycyBwYXJhbXM7Ci0gIEVYUEVDVF9GQUxTRShwYXJhbXMuaXNfdmFs
aWQoKSk7Ci0gIEVYUEVDVF9FUSgwLCBwYXJhbXMuc2FtcGxlX3JhdGUoKSk7Ci0gIEVYUEVDVF9F
USgwVSwgcGFyYW1zLmNoYW5uZWxzKCkpOwotICBFWFBFQ1RfRVEoMFUsIHBhcmFtcy5mcmFtZXNf
cGVyX2J1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDBVLCBwYXJhbXMuZnJhbWVzX3Blcl8xMG1zX2J1
ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDBVLCBwYXJhbXMuR2V0Qnl0ZXNQZXJGcmFtZSgpKTsKLSAg
RVhQRUNUX0VRKDBVLCBwYXJhbXMuR2V0Qnl0ZXNQZXJCdWZmZXIoKSk7Ci0gIEVYUEVDVF9FUSgw
VSwgcGFyYW1zLkdldEJ5dGVzUGVyMTBtc0J1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKDAuMGYsIHBh
cmFtcy5HZXRCdWZmZXJTaXplSW5NaWxsaXNlY29uZHMoKSk7Ci19Ci0KLS8vIEJhc2ljIHRlc3Qg
b2YgdGhlIEF1ZGlvUGFyYW1ldGVycyBjbGFzcyB1c2luZyBub24gZGVmYXVsdCBjb25zdHJ1Y3Rp
b24uCi1URVNUX0YoQXVkaW9NYW5hZ2VyVGVzdCwgQXVkaW9QYXJhbWV0ZXJzV2l0aE5vbkRlZmF1
bHRDb25zdHJ1Y3Rpb24pIHsKLSAgY29uc3QgaW50IGtTYW1wbGVSYXRlID0gNDgwMDA7Ci0gIGNv
bnN0IHNpemVfdCBrQ2hhbm5lbHMgPSAxOwotICBjb25zdCBzaXplX3Qga0ZyYW1lc1BlckJ1ZmZl
ciA9IDQ4MDsKLSAgY29uc3Qgc2l6ZV90IGtGcmFtZXNQZXIxMG1zQnVmZmVyID0gNDgwOwotICBj
b25zdCBzaXplX3Qga0J5dGVzUGVyRnJhbWUgPSAyOwotICBjb25zdCBmbG9hdCBrQnVmZmVyU2l6
ZUluTXMgPSAxMC4wZjsKLSAgQXVkaW9QYXJhbWV0ZXJzIHBhcmFtcyhrU2FtcGxlUmF0ZSwga0No
YW5uZWxzLCBrRnJhbWVzUGVyQnVmZmVyKTsKLSAgRVhQRUNUX1RSVUUocGFyYW1zLmlzX3ZhbGlk
KCkpOwotICBFWFBFQ1RfRVEoa1NhbXBsZVJhdGUsIHBhcmFtcy5zYW1wbGVfcmF0ZSgpKTsKLSAg
RVhQRUNUX0VRKGtDaGFubmVscywgcGFyYW1zLmNoYW5uZWxzKCkpOwotICBFWFBFQ1RfRVEoa0Zy
YW1lc1BlckJ1ZmZlciwgcGFyYW1zLmZyYW1lc19wZXJfYnVmZmVyKCkpOwotICBFWFBFQ1RfRVEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihrU2FtcGxlUmF0ZSAvIDEwMCksCi0gICAgICAgICAgICBwYXJh
bXMuZnJhbWVzX3Blcl8xMG1zX2J1ZmZlcigpKTsKLSAgRVhQRUNUX0VRKGtCeXRlc1BlckZyYW1l
LCBwYXJhbXMuR2V0Qnl0ZXNQZXJGcmFtZSgpKTsKLSAgRVhQRUNUX0VRKGtCeXRlc1BlckZyYW1l
ICoga0ZyYW1lc1BlckJ1ZmZlciwgcGFyYW1zLkdldEJ5dGVzUGVyQnVmZmVyKCkpOwotICBFWFBF
Q1RfRVEoa0J5dGVzUGVyRnJhbWUgKiBrRnJhbWVzUGVyMTBtc0J1ZmZlciwKLSAgICAgICAgICAg
IHBhcmFtcy5HZXRCeXRlc1BlcjEwbXNCdWZmZXIoKSk7Ci0gIEVYUEVDVF9FUShrQnVmZmVyU2l6
ZUluTXMsIHBhcmFtcy5HZXRCdWZmZXJTaXplSW5NaWxsaXNlY29uZHMoKSk7Ci19Ci0KLX0gIC8v
IG5hbWVzcGFjZSB3ZWJydGMKLQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNvcmRfam5p
LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fcmVjb3JkX2puaS5jYwkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19yZWNvcmRfam5pLmNjCShub25l
eGlzdGVudCkKQEAgLTEsMjU2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEzIFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5j
bHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fcmVjb3JkX2pu
aS5oIgotCi0jaW5jbHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0K
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9hcnJheXNpemUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFz
ZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9mb3JtYXRfbWFjcm9zLmgiCi0jaW5j
bHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fY29tbW9uLmgi
Ci0KLSNkZWZpbmUgVEFHICJBdWRpb1JlY29yZEpuaSIKLSNkZWZpbmUgQUxPR1YoLi4uKSBfX2Fu
ZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1ZFUkJPU0UsIFRBRywgX19WQV9BUkdTX18pCi0j
ZGVmaW5lIEFMT0dEKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywg
VEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR0UoLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50
KEFORFJPSURfTE9HX0VSUk9SLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HVyguLi4p
IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfV0FSTiwgVEFHLCBfX1ZBX0FSR1NfXykK
LSNkZWZpbmUgQUxPR0koLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8s
IFRBRywgX19WQV9BUkdTX18pCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0vLyBBdWRpb1JlY29y
ZEpuaTo6SmF2YUF1ZGlvUmVjb3JkIGltcGxlbWVudGF0aW9uLgotQXVkaW9SZWNvcmRKbmk6Okph
dmFBdWRpb1JlY29yZDo6SmF2YUF1ZGlvUmVjb3JkKAotICAgIE5hdGl2ZVJlZ2lzdHJhdGlvbiog
bmF0aXZlX3JlZywKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBhdWRpb19yZWNvcmQp
Ci0gICAgOiBhdWRpb19yZWNvcmRfKHN0ZDo6bW92ZShhdWRpb19yZWNvcmQpKSwKLSAgICAgIGlu
aXRfcmVjb3JkaW5nXyhuYXRpdmVfcmVnLT5HZXRNZXRob2RJZCgiaW5pdFJlY29yZGluZyIsICIo
SUkpSSIpKSwKLSAgICAgIHN0YXJ0X3JlY29yZGluZ18obmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQo
InN0YXJ0UmVjb3JkaW5nIiwgIigpWiIpKSwKLSAgICAgIHN0b3BfcmVjb3JkaW5nXyhuYXRpdmVf
cmVnLT5HZXRNZXRob2RJZCgic3RvcFJlY29yZGluZyIsICIoKVoiKSksCi0gICAgICBlbmFibGVf
YnVpbHRfaW5fYWVjXyhuYXRpdmVfcmVnLT5HZXRNZXRob2RJZCgiZW5hYmxlQnVpbHRJbkFFQyIs
ICIoWilaIikpLAotICAgICAgZW5hYmxlX2J1aWx0X2luX25zXyhuYXRpdmVfcmVnLT5HZXRNZXRo
b2RJZCgiZW5hYmxlQnVpbHRJbk5TIiwgIihaKVoiKSkge30KLQotQXVkaW9SZWNvcmRKbmk6Okph
dmFBdWRpb1JlY29yZDo6fkphdmFBdWRpb1JlY29yZCgpIHt9Ci0KLWludCBBdWRpb1JlY29yZEpu
aTo6SmF2YUF1ZGlvUmVjb3JkOjpJbml0UmVjb3JkaW5nKAotICAgIGludCBzYW1wbGVfcmF0ZSwg
c2l6ZV90IGNoYW5uZWxzKSB7Ci0gIHJldHVybiBhdWRpb19yZWNvcmRfLT5DYWxsSW50TWV0aG9k
KGluaXRfcmVjb3JkaW5nXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8amludD4oc2FtcGxlX3JhdGUpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxqaW50PihjaGFubmVscykpOwotfQotCi1ib29sIEF1
ZGlvUmVjb3JkSm5pOjpKYXZhQXVkaW9SZWNvcmQ6OlN0YXJ0UmVjb3JkaW5nKCkgewotICByZXR1
cm4gYXVkaW9fcmVjb3JkXy0+Q2FsbEJvb2xlYW5NZXRob2Qoc3RhcnRfcmVjb3JkaW5nXyk7Ci19
Ci0KLWJvb2wgQXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZDo6U3RvcFJlY29yZGluZygp
IHsKLSAgcmV0dXJuIGF1ZGlvX3JlY29yZF8tPkNhbGxCb29sZWFuTWV0aG9kKHN0b3BfcmVjb3Jk
aW5nXyk7Ci19Ci0KLWJvb2wgQXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZDo6RW5hYmxl
QnVpbHRJbkFFQyhib29sIGVuYWJsZSkgewotICByZXR1cm4gYXVkaW9fcmVjb3JkXy0+Q2FsbEJv
b2xlYW5NZXRob2QoZW5hYmxlX2J1aWx0X2luX2FlY18sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxqYm9vbGVhbj4oZW5hYmxlKSk7Ci19Ci0K
LWJvb2wgQXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZDo6RW5hYmxlQnVpbHRJbk5TKGJv
b2wgZW5hYmxlKSB7Ci0gIHJldHVybiBhdWRpb19yZWNvcmRfLT5DYWxsQm9vbGVhbk1ldGhvZChl
bmFibGVfYnVpbHRfaW5fbnNfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8amJvb2xlYW4+KGVuYWJsZSkpOwotfQotCi0vLyBBdWRpb1JlY29y
ZEpuaSBpbXBsZW1lbnRhdGlvbi4KLUF1ZGlvUmVjb3JkSm5pOjpBdWRpb1JlY29yZEpuaShBdWRp
b01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBqX2Vudmlyb25tZW50XyhKVk06OkdldElu
c3RhbmNlKCktPmVudmlyb25tZW50KCkpLAotICAgICAgYXVkaW9fbWFuYWdlcl8oYXVkaW9fbWFu
YWdlciksCi0gICAgICBhdWRpb19wYXJhbWV0ZXJzXyhhdWRpb19tYW5hZ2VyLT5HZXRSZWNvcmRB
dWRpb1BhcmFtZXRlcnMoKSksCi0gICAgICB0b3RhbF9kZWxheV9pbl9taWxsaXNlY29uZHNfKDAp
LAotICAgICAgZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyhudWxscHRyKSwKLSAgICAgIGRpcmVjdF9i
dWZmZXJfY2FwYWNpdHlfaW5fYnl0ZXNfKDApLAotICAgICAgZnJhbWVzX3Blcl9idWZmZXJfKDAp
LAotICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSwKLSAgICAgIHJlY29yZGluZ18oZmFsc2UpLAot
ICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8obnVsbHB0cikgewotICBBTE9HRCgiY3RvciVzIiwg
R2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKGF1ZGlvX3BhcmFtZXRlcnNf
LmlzX3ZhbGlkKCkpOwotICBSVENfQ0hFQ0soal9lbnZpcm9ubWVudF8pOwotICBKTklOYXRpdmVN
ZXRob2QgbmF0aXZlX21ldGhvZHNbXSA9IHsKLSAgICAgIHsibmF0aXZlQ2FjaGVEaXJlY3RCdWZm
ZXJBZGRyZXNzIiwgIihMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtKKVYiLAotICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oCi0gICAgICAgICAgJndlYnJ0Yzo6QXVkaW9SZWNvcmRKbmk6OkNhY2hl
RGlyZWN0QnVmZmVyQWRkcmVzcyl9LAotICAgICAgeyJuYXRpdmVEYXRhSXNSZWNvcmRlZCIsICIo
SUopViIsCi0gICAgICByZWludGVycHJldF9jYXN0PHZvaWQqPigmd2VicnRjOjpBdWRpb1JlY29y
ZEpuaTo6RGF0YUlzUmVjb3JkZWQpfX07Ci0gIGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl8gPSBqX2Vu
dmlyb25tZW50Xy0+UmVnaXN0ZXJOYXRpdmVzKAotICAgICAgIm9yZy93ZWJydGMvdm9pY2Vlbmdp
bmUvV2ViUnRjQXVkaW9SZWNvcmQiLCBuYXRpdmVfbWV0aG9kcywKLSAgICAgIGFycmF5c2l6ZShu
YXRpdmVfbWV0aG9kcykpOwotICBqX2F1ZGlvX3JlY29yZF8ucmVzZXQobmV3IEphdmFBdWRpb1Jl
Y29yZCgKLSAgICAgIGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl8uZ2V0KCksCi0gICAgICBqX25hdGl2
ZV9yZWdpc3RyYXRpb25fLT5OZXdPYmplY3QoCi0gICAgICAgICAgIjxpbml0PiIsICIoTGFuZHJv
aWQvY29udGVudC9Db250ZXh0O0opViIsCi0gICAgICAgICAgSlZNOjpHZXRJbnN0YW5jZSgpLT5j
b250ZXh0KCksIFBvaW50ZXJUb2psb25nKHRoaXMpKSkpOwotICAvLyBEZXRhY2ggZnJvbSB0aGlz
IHRocmVhZCBzaW5jZSB3ZSB3YW50IHRvIHVzZSB0aGUgY2hlY2tlciB0byB2ZXJpZnkgY2FsbHMK
LSAgLy8gZnJvbSB0aGUgSmF2YSBiYXNlZCBhdWRpbyB0aHJlYWQuCi0gIHRocmVhZF9jaGVja2Vy
X2phdmFfLkRldGFjaEZyb21UaHJlYWQoKTsKLX0KLQotQXVkaW9SZWNvcmRKbmk6On5BdWRpb1Jl
Y29yZEpuaSgpIHsKLSAgQUxPR0QoIn5kdG9yJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7
Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0g
IFRlcm1pbmF0ZSgpOwotfQotCi1pbnQzMl90IEF1ZGlvUmVjb3JkSm5pOjpJbml0KCkgewotICBB
TE9HRCgiSW5pdCVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRo
cmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1cm4gMDsKLX0KLQot
aW50MzJfdCBBdWRpb1JlY29yZEpuaTo6VGVybWluYXRlKCkgewotICBBTE9HRCgiVGVybWluYXRl
JXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNr
ZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFN0b3BSZWNvcmRpbmcoKTsKLSAgcmV0dXJu
IDA7Ci19Ci0KLWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OkluaXRSZWNvcmRpbmcoKSB7Ci0gIEFM
T0dEKCJJbml0UmVjb3JkaW5nJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hF
Q0soIWluaXRpYWxpemVkXyk7Ci0gIFJUQ19EQ0hFQ0soIXJlY29yZGluZ18pOwotICBpbnQgZnJh
bWVzX3Blcl9idWZmZXIgPSBqX2F1ZGlvX3JlY29yZF8tPkluaXRSZWNvcmRpbmcoCi0gICAgICBh
dWRpb19wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpLCBhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVs
cygpKTsKLSAgaWYgKGZyYW1lc19wZXJfYnVmZmVyIDwgMCkgewotICAgIEFMT0dFKCJJbml0UmVj
b3JkaW5nIGZhaWxlZCEiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgZnJhbWVzX3Blcl9idWZm
ZXJfID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZXNfcGVyX2J1ZmZlcik7Ci0gIEFMT0dEKCJm
cmFtZXNfcGVyX2J1ZmZlcjogJSIgUFJJdVMsIGZyYW1lc19wZXJfYnVmZmVyXyk7Ci0gIFJUQ19D
SEVDS19FUShkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzXywKLSAgICAgICAgICAgICAg
IGZyYW1lc19wZXJfYnVmZmVyXyAqIGtCeXRlc1BlckZyYW1lKTsKLSAgUlRDX0NIRUNLX0VRKGZy
YW1lc19wZXJfYnVmZmVyXywgYXVkaW9fcGFyYW1ldGVyc18uZnJhbWVzX3Blcl8xMG1zX2J1ZmZl
cigpKTsKLSAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludDMyX3Qg
QXVkaW9SZWNvcmRKbmk6OlN0YXJ0UmVjb3JkaW5nKCkgewotICBBTE9HRCgiU3RhcnRSZWNvcmRp
bmclcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDSyhpbml0aWFsaXplZF8p
OwotICBSVENfRENIRUNLKCFyZWNvcmRpbmdfKTsKLSAgaWYgKCFqX2F1ZGlvX3JlY29yZF8tPlN0
YXJ0UmVjb3JkaW5nKCkpIHsKLSAgICBBTE9HRSgiU3RhcnRSZWNvcmRpbmcgZmFpbGVkISIpOwot
ICAgIHJldHVybiAtMTsKLSAgfQotICByZWNvcmRpbmdfID0gdHJ1ZTsKLSAgcmV0dXJuIDA7Ci19
Ci0KLWludDMyX3QgQXVkaW9SZWNvcmRKbmk6OlN0b3BSZWNvcmRpbmcoKSB7Ci0gIEFMT0dEKCJT
dG9wUmVjb3JkaW5nJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0so
dGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGlmICghaW5pdGlhbGl6
ZWRfIHx8ICFyZWNvcmRpbmdfKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKCFqX2F1ZGlv
X3JlY29yZF8tPlN0b3BSZWNvcmRpbmcoKSkgewotICAgIEFMT0dFKCJTdG9wUmVjb3JkaW5nIGZh
aWxlZCEiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgLy8gSWYgd2UgZG9uJ3QgZGV0YWNoIGhl
cmUsIHdlIHdpbGwgaGl0IGEgUlRDX0RDSEVDSyBpbiBPbkRhdGFJc1JlY29yZGVkKCkKLSAgLy8g
bmV4dCB0aW1lIFN0YXJ0UmVjb3JkaW5nKCkgaXMgY2FsbGVkIHNpbmNlIGl0IHdpbGwgY3JlYXRl
IGEgbmV3IEphdmEKLSAgLy8gdGhyZWFkLgotICB0aHJlYWRfY2hlY2tlcl9qYXZhXy5EZXRhY2hG
cm9tVGhyZWFkKCk7Ci0gIGluaXRpYWxpemVkXyA9IGZhbHNlOwotICByZWNvcmRpbmdfID0gZmFs
c2U7Ci0gIGRpcmVjdF9idWZmZXJfYWRkcmVzc189IG51bGxwdHI7Ci0gIHJldHVybiAwOwotfQot
Ci12b2lkIEF1ZGlvUmVjb3JkSm5pOjpBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1ZmZl
ciogYXVkaW9CdWZmZXIpIHsKLSAgQUxPR0QoIkF0dGFjaEF1ZGlvQnVmZmVyIik7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGF1ZGlvX2Rl
dmljZV9idWZmZXJfID0gYXVkaW9CdWZmZXI7Ci0gIGNvbnN0IGludCBzYW1wbGVfcmF0ZV9oeiA9
IGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCk7Ci0gIEFMT0dEKCJTZXRSZWNvcmRpbmdT
YW1wbGVSYXRlKCVkKSIsIHNhbXBsZV9yYXRlX2h6KTsKLSAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8t
PlNldFJlY29yZGluZ1NhbXBsZVJhdGUoc2FtcGxlX3JhdGVfaHopOwotICBjb25zdCBzaXplX3Qg
Y2hhbm5lbHMgPSBhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpOwotICBBTE9HRCgiU2V0UmVj
b3JkaW5nQ2hhbm5lbHMoJSIgUFJJdVMgIikiLCBjaGFubmVscyk7Ci0gIGF1ZGlvX2RldmljZV9i
dWZmZXJfLT5TZXRSZWNvcmRpbmdDaGFubmVscyhjaGFubmVscyk7Ci0gIHRvdGFsX2RlbGF5X2lu
X21pbGxpc2Vjb25kc18gPQotICAgICAgYXVkaW9fbWFuYWdlcl8tPkdldERlbGF5RXN0aW1hdGVJ
bk1pbGxpc2Vjb25kcygpOwotICBSVENfRENIRUNLX0dUKHRvdGFsX2RlbGF5X2luX21pbGxpc2Vj
b25kc18sIDApOwotICBBTE9HRCgidG90YWxfZGVsYXlfaW5fbWlsbGlzZWNvbmRzOiAlZCIsIHRv
dGFsX2RlbGF5X2luX21pbGxpc2Vjb25kc18pOwotfQotCi1pbnQzMl90IEF1ZGlvUmVjb3JkSm5p
OjpFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKSB7Ci0gIEFMT0dEKCJFbmFibGVCdWlsdElu
QUVDJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2No
ZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVybiBqX2F1ZGlvX3JlY29yZF8t
PkVuYWJsZUJ1aWx0SW5BRUMoZW5hYmxlKSA/IDAgOiAtMTsKLX0KLQotaW50MzJfdCBBdWRpb1Jl
Y29yZEpuaTo6RW5hYmxlQnVpbHRJbkFHQyhib29sIGVuYWJsZSkgewotICAvLyBUT0RPKGhlbnJp
a2EpOiBwb3NzaWJseSByZW1vdmUgd2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50Lgot
ICBGQVRBTCgpIDw8ICJTaG91bGQgbmV2ZXIgYmUgY2FsbGVkIjsKLSAgcmV0dXJuIC0xOwotfQot
Ci1pbnQzMl90IEF1ZGlvUmVjb3JkSm5pOjpFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpIHsK
LSAgQUxPR0QoIkVuYWJsZUJ1aWx0SW5OUyVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwot
ICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBy
ZXR1cm4gal9hdWRpb19yZWNvcmRfLT5FbmFibGVCdWlsdEluTlMoZW5hYmxlKSA/IDAgOiAtMTsK
LX0KLQotdm9pZCBKTklDQUxMIEF1ZGlvUmVjb3JkSm5pOjpDYWNoZURpcmVjdEJ1ZmZlckFkZHJl
c3MoCi0gICAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBqb2JqZWN0IGJ5dGVfYnVmZmVyLCBq
bG9uZyBuYXRpdmVBdWRpb1JlY29yZCkgewotICB3ZWJydGM6OkF1ZGlvUmVjb3JkSm5pKiB0aGlz
X29iamVjdCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6QXVkaW9SZWNvcmRKbmkq
PiAobmF0aXZlQXVkaW9SZWNvcmQpOwotICB0aGlzX29iamVjdC0+T25DYWNoZURpcmVjdEJ1ZmZl
ckFkZHJlc3MoZW52LCBieXRlX2J1ZmZlcik7Ci19Ci0KLXZvaWQgQXVkaW9SZWNvcmRKbmk6Ok9u
Q2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKAotICAgIEpOSUVudiogZW52LCBqb2JqZWN0IGJ5dGVf
YnVmZmVyKSB7Ci0gIEFMT0dEKCJPbkNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyIpOwotICBSVENf
RENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfRENI
RUNLKCFkaXJlY3RfYnVmZmVyX2FkZHJlc3NfKTsKLSAgZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyA9
Ci0gICAgICBlbnYtPkdldERpcmVjdEJ1ZmZlckFkZHJlc3MoYnl0ZV9idWZmZXIpOwotICBqbG9u
ZyBjYXBhY2l0eSA9IGVudi0+R2V0RGlyZWN0QnVmZmVyQ2FwYWNpdHkoYnl0ZV9idWZmZXIpOwot
ICBBTE9HRCgiZGlyZWN0IGJ1ZmZlciBjYXBhY2l0eTogJWxsZCIsIGNhcGFjaXR5KTsKLSAgZGly
ZWN0X2J1ZmZlcl9jYXBhY2l0eV9pbl9ieXRlc18gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGNhcGFj
aXR5KTsKLX0KLQotdm9pZCBKTklDQUxMIEF1ZGlvUmVjb3JkSm5pOjpEYXRhSXNSZWNvcmRlZCgK
LSAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBqaW50IGxlbmd0aCwgamxvbmcgbmF0aXZlQXVk
aW9SZWNvcmQpIHsKLSAgd2VicnRjOjpBdWRpb1JlY29yZEpuaSogdGhpc19vYmplY3QgPQotICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx3ZWJydGM6OkF1ZGlvUmVjb3JkSm5pKj4gKG5hdGl2ZUF1ZGlv
UmVjb3JkKTsKLSAgdGhpc19vYmplY3QtPk9uRGF0YUlzUmVjb3JkZWQobGVuZ3RoKTsKLX0KLQot
Ly8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGEgaGlnaC1wcmlvcml0eSB0aHJlYWQgZnJvbSBK
YXZhLiBUaGUgbmFtZSBvZgotLy8gdGhlIHRocmVhZCBpcyAnQXVkaW9SZWNvcmRUaHJlYWQnLgot
dm9pZCBBdWRpb1JlY29yZEpuaTo6T25EYXRhSXNSZWNvcmRlZChpbnQgbGVuZ3RoKSB7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfamF2YV8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAg
aWYgKCFhdWRpb19kZXZpY2VfYnVmZmVyXykgewotICAgIEFMT0dFKCJBdHRhY2hBdWRpb0J1ZmZl
ciBoYXMgbm90IGJlZW4gY2FsbGVkISIpOwotICAgIHJldHVybjsKLSAgfQotICBhdWRpb19kZXZp
Y2VfYnVmZmVyXy0+U2V0UmVjb3JkZWRCdWZmZXIoZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lc19wZXJfYnVmZmVy
Xyk7Ci0gIC8vIFdlIHByb3ZpZGUgb25lIChjb21iaW5lZCkgZml4ZWQgZGVsYXkgZXN0aW1hdGUg
Zm9yIHRoZSBBUE0gYW5kIHVzZSB0aGUKLSAgLy8gfHBsYXlEZWxheU1zfCBwYXJhbWV0ZXIgb25s
eS4gQ29tcG9uZW50cyBsaWtlIHRoZSBBRUMgb25seSBzZWVzIHRoZSBzdW0KLSAgLy8gb2YgfHBs
YXlEZWxheU1zfCBhbmQgfHJlY0RlbGF5TXN8LCBoZW5jZSB0aGUgZGlzdHJpYnV0aW9ucyBkb2Vz
IG5vdCBtYXR0ZXIuCi0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRWUUVEYXRhKHRvdGFsX2Rl
bGF5X2luX21pbGxpc2Vjb25kc18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsICAgLy8gcmVjRGVsYXlNcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
KTsgIC8vIGNsb2NrRHJpZnQKLSAgaWYgKGF1ZGlvX2RldmljZV9idWZmZXJfLT5EZWxpdmVyUmVj
b3JkZWREYXRhKCkgPT0gLTEpIHsKLSAgICBBTE9HRSgiQXVkaW9EZXZpY2VCdWZmZXI6OkRlbGl2
ZXJSZWNvcmRlZERhdGEgZmFpbGVkISIpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fcmVjb3JkX2puaS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvYXVkaW9fcmVjb3JkX2puaS5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2F1ZGlvX3JlY29yZF9qbmkuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE2MyAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxMyBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19B
VURJT19ERVZJQ0VfQU5EUk9JRF9BVURJT19SRUNPUkRfSk5JX0hfCi0jZGVmaW5lIFdFQlJUQ19N
T0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX0FVRElPX1JFQ09SRF9KTklfSF8KLQotI2luY2x1
ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2Uv
dGhyZWFkX2NoZWNrZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2luY2x1ZGUvYXVkaW9fZGV2aWNlX2RlZmluZXMuaCIKLSNpbmNsdWRlICJ3ZWJydGMv
bW9kdWxlcy9hdWRpb19kZXZpY2UvYXVkaW9fZGV2aWNlX2dlbmVyaWMuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvbW9kdWxlcy91dGlsaXR5L2luY2x1ZGUvaGVscGVyc19hbmRyb2lkLmgiCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2p2bV9hbmRyb2lkLmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotCi0vLyBJbXBsZW1lbnRzIDE2LWJpdCBtb25vIFBDTSBhdWRpbyBpbnB1
dCBzdXBwb3J0IGZvciBBbmRyb2lkIHVzaW5nIHRoZSBKYXZhCi0vLyBBdWRpb1JlY29yZCBpbnRl
cmZhY2UuIE1vc3Qgb2YgdGhlIHdvcmsgaXMgZG9uZSBieSBpdHMgSmF2YSBjb3VudGVycGFydCBp
bgotLy8gV2ViUnRjQXVkaW9SZWNvcmQuamF2YS4gVGhpcyBjbGFzcyBpcyBjcmVhdGVkIGFuZCBs
aXZlcyBvbiBhIHRocmVhZCBpbgotLy8gQysrLWxhbmQsIGJ1dCByZWNvcmRlZCBhdWRpbyBidWZm
ZXJzIGFyZSBkZWxpdmVyZWQgb24gYSBoaWdoLXByaW9yaXR5Ci0vLyB0aHJlYWQgbWFuYWdlZCBi
eSB0aGUgSmF2YSBjbGFzcy4KLS8vCi0vLyBUaGUgSmF2YSBjbGFzcyBtYWtlcyB1c2Ugb2YgQXVk
aW9FZmZlY3QgZmVhdHVyZXMgKG1haW5seSBBRUMpIHdoaWNoIGFyZQotLy8gZmlyc3QgYXZhaWxh
YmxlIGluIEplbGx5IEJlYW4uIElmIGl0IGlzIGluc3RhbnRpYXRlZCBydW5uaW5nIGFnYWluc3Qg
ZWFybGllcgotLy8gU0RLcywgdGhlIEFFQyBwcm92aWRlZCBieSB0aGUgQVBNIGluIFdlYlJUQyBt
dXN0IGJlIHVzZWQgYW5kIGVuYWJsZWQKLS8vIHNlcGFyYXRlbHkgaW5zdGVhZC4KLS8vCi0vLyBB
biBpbnN0YW5jZSBtdXN0IGJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbiBvbmUgYW5kIHRoZSBz
YW1lIHRocmVhZC4KLS8vIEFsbCBwdWJsaWMgbWV0aG9kcyBtdXN0IGFsc28gYmUgY2FsbGVkIG9u
IHRoZSBzYW1lIHRocmVhZC4gQSB0aHJlYWQgY2hlY2tlcgotLy8gd2lsbCBSVENfRENIRUNLIGlm
IGFueSBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIGludmFsaWQgdGhyZWFkLgotLy8KLS8vIFRoaXMg
Y2xhc3MgdXNlcyBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQgdG8gYXR0YWNoIHRvIGEgSmF2
YSBWTSBpZiBuZWVkZWQKLS8vIGFuZCBkZXRhY2ggd2hlbiB0aGUgb2JqZWN0IGdvZXMgb3V0IG9m
IHNjb3BlLiBBZGRpdGlvbmFsIHRocmVhZCBjaGVja2luZwotLy8gZ3VhcmFudGVlcyB0aGF0IG5v
IG90aGVyIChwb3NzaWJseSBub24gYXR0YWNoZWQpIHRocmVhZCBpcyB1c2VkLgotY2xhc3MgQXVk
aW9SZWNvcmRKbmkgewotIHB1YmxpYzoKLSAgLy8gV3JhcHMgdGhlIEphdmEgc3BlY2lmaWMgcGFy
dHMgb2YgdGhlIEF1ZGlvUmVjb3JkSm5pIGludG8gb25lIGhlbHBlciBjbGFzcy4KLSAgY2xhc3Mg
SmF2YUF1ZGlvUmVjb3JkIHsKLSAgIHB1YmxpYzoKLSAgICBKYXZhQXVkaW9SZWNvcmQoTmF0aXZl
UmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVnaXN0cmF0aW9uLAotICAgICAgICAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX3RyYWNrKTsKLSAgICB+SmF2YUF1ZGlvUmVj
b3JkKCk7Ci0KLSAgICBpbnQgSW5pdFJlY29yZGluZyhpbnQgc2FtcGxlX3JhdGUsIHNpemVfdCBj
aGFubmVscyk7Ci0gICAgYm9vbCBTdGFydFJlY29yZGluZygpOwotICAgIGJvb2wgU3RvcFJlY29y
ZGluZygpOwotICAgIGJvb2wgRW5hYmxlQnVpbHRJbkFFQyhib29sIGVuYWJsZSk7Ci0gICAgYm9v
bCBFbmFibGVCdWlsdEluTlMoYm9vbCBlbmFibGUpOwotCi0gICBwcml2YXRlOgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX3JlY29yZF87Ci0gICAgam1ldGhvZElEIGluaXRf
cmVjb3JkaW5nXzsKLSAgICBqbWV0aG9kSUQgc3RhcnRfcmVjb3JkaW5nXzsKLSAgICBqbWV0aG9k
SUQgc3RvcF9yZWNvcmRpbmdfOwotICAgIGptZXRob2RJRCBlbmFibGVfYnVpbHRfaW5fYWVjXzsK
LSAgICBqbWV0aG9kSUQgZW5hYmxlX2J1aWx0X2luX25zXzsKLSAgfTsKLQotICBleHBsaWNpdCBB
dWRpb1JlY29yZEpuaShBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpOwotICB+QXVkaW9SZWNv
cmRKbmkoKTsKLQotICBpbnQzMl90IEluaXQoKTsKLSAgaW50MzJfdCBUZXJtaW5hdGUoKTsKLQot
ICBpbnQzMl90IEluaXRSZWNvcmRpbmcoKTsKLSAgYm9vbCBSZWNvcmRpbmdJc0luaXRpYWxpemVk
KCkgY29uc3QgeyByZXR1cm4gaW5pdGlhbGl6ZWRfOyB9Ci0KLSAgaW50MzJfdCBTdGFydFJlY29y
ZGluZygpOwotICBpbnQzMl90IFN0b3BSZWNvcmRpbmcoKTsKLSAgYm9vbCBSZWNvcmRpbmcoKSBj
b25zdCB7IHJldHVybiByZWNvcmRpbmdfOyB9Ci0KLSAgdm9pZCBBdHRhY2hBdWRpb0J1ZmZlcihB
dWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIpOwotCi0gIGludDMyX3QgRW5hYmxlQnVpbHRJ
bkFFQyhib29sIGVuYWJsZSk7Ci0gIGludDMyX3QgRW5hYmxlQnVpbHRJbkFHQyhib29sIGVuYWJs
ZSk7Ci0gIGludDMyX3QgRW5hYmxlQnVpbHRJbk5TKGJvb2wgZW5hYmxlKTsKLQotIHByaXZhdGU6
Ci0gIC8vIENhbGxlZCBmcm9tIEphdmEgc2lkZSBzbyB3ZSBjYW4gY2FjaGUgdGhlIGFkZHJlc3Mg
b2YgdGhlIEphdmEtbWFuZ2VkCi0gIC8vIHxieXRlX2J1ZmZlcnwgaW4gfGRpcmVjdF9idWZmZXJf
YWRkcmVzc198LiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyCi0gIC8vIGlzIGFsc28gc3RvcmVkIGlu
IHxkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzX3wuCi0gIC8vIFRoaXMgbWV0aG9kIHdp
bGwgYmUgY2FsbGVkIGJ5IHRoZSBXZWJSdGNBdWRpb1JlY29yZCBjb25zdHJ1Y3RvciwgaS5lLiwK
LSAgLy8gb24gdGhlIHNhbWUgdGhyZWFkIHRoYXQgdGhpcyBvYmplY3QgaXMgY3JlYXRlZCBvbi4K
LSAgc3RhdGljIHZvaWQgSk5JQ0FMTCBDYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoCi0gICAgSk5J
RW52KiBlbnYsIGpvYmplY3Qgb2JqLCBqb2JqZWN0IGJ5dGVfYnVmZmVyLCBqbG9uZyBuYXRpdmVB
dWRpb1JlY29yZCk7Ci0gIHZvaWQgT25DYWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoSk5JRW52KiBl
bnYsIGpvYmplY3QgYnl0ZV9idWZmZXIpOwotCi0gIC8vIENhbGxlZCBwZXJpb2RpY2FsbHkgYnkg
dGhlIEphdmEgYmFzZWQgV2ViUnRjQXVkaW9SZWNvcmQgb2JqZWN0IHdoZW4KLSAgLy8gcmVjb3Jk
aW5nIGhhcyBzdGFydGVkLiBFYWNoIGNhbGwgaW5kaWNhdGVzIHRoYXQgdGhlcmUgYXJlIHxsZW5n
dGh8IG5ldwotICAvLyBieXRlcyByZWNvcmRlZCBpbiB0aGUgbWVtb3J5IGFyZWEgfGRpcmVjdF9i
dWZmZXJfYWRkcmVzc198IGFuZCBpdCBpcwotICAvLyBub3cgdGltZSB0byBzZW5kIHRoZXNlIHRv
IHRoZSBjb25zdW1lci4KLSAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIG9uIGEgaGlnaC1wcmlv
cml0eSB0aHJlYWQgZnJvbSBKYXZhLiBUaGUgbmFtZSBvZgotICAvLyB0aGUgdGhyZWFkIGlzICdB
dWRpb1JlY29yZFRocmVhZCcuCi0gIHN0YXRpYyB2b2lkIEpOSUNBTEwgRGF0YUlzUmVjb3JkZWQo
Ci0gICAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2JqLCBqaW50IGxlbmd0aCwgamxvbmcgbmF0aXZl
QXVkaW9SZWNvcmQpOwotICB2b2lkIE9uRGF0YUlzUmVjb3JkZWQoaW50IGxlbmd0aCk7Ci0KLSAg
Ly8gU3RvcmVzIHRocmVhZCBJRCBpbiBjb25zdHJ1Y3Rvci4KLSAgcnRjOjpUaHJlYWRDaGVja2Vy
IHRocmVhZF9jaGVja2VyXzsKLQotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGZpcnN0IGNhbGwg
dG8gT25EYXRhSXNSZWNvcmRlZCgpIGZyb20gaGlnaC1wcmlvcml0eQotICAvLyB0aHJlYWQgaW4g
SmF2YS4gRGV0YWNoZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIG9iamVjdC4KLSAgcnRj
OjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2VyX2phdmFfOwotCi0gIC8vIENhbGxzIEF0dGFj
aEN1cnJlbnRUaHJlYWQoKSBpZiB0aGlzIHRocmVhZCBpcyBub3QgYXR0YWNoZWQgYXQgY29uc3Ry
dWN0aW9uLgotICAvLyBBbHNvIGVuc3VyZXMgdGhhdCBEZXRhY2hDdXJyZW50VGhyZWFkKCkgaXMg
Y2FsbGVkIGF0IGRlc3RydWN0aW9uLgotICBBdHRhY2hDdXJyZW50VGhyZWFkSWZOZWVkZWQgYXR0
YWNoX3RocmVhZF9pZl9uZWVkZWRfOwotCi0gIC8vIFdyYXBzIHRoZSBKTkkgaW50ZXJmYWNlIHBv
aW50ZXIgYW5kIG1ldGhvZHMgYXNzb2NpYXRlZCB3aXRoIGl0LgotICBzdGQ6OnVuaXF1ZV9wdHI8
Sk5JRW52aXJvbm1lbnQ+IGpfZW52aXJvbm1lbnRfOwotCi0gIC8vIENvbnRhaW5zIGZhY3Rvcnkg
bWV0aG9kIGZvciBjcmVhdGluZyB0aGUgSmF2YSBvYmplY3QuCi0gIHN0ZDo6dW5pcXVlX3B0cjxO
YXRpdmVSZWdpc3RyYXRpb24+IGpfbmF0aXZlX3JlZ2lzdHJhdGlvbl87Ci0KLSAgLy8gV3JhcHMg
dGhlIEphdmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvUmVjb3JkSm5pIGNsYXNzLgotICBz
dGQ6OnVuaXF1ZV9wdHI8QXVkaW9SZWNvcmRKbmk6OkphdmFBdWRpb1JlY29yZD4gal9hdWRpb19y
ZWNvcmRfOwotCi0gIC8vIFJhdyBwb2ludGVyIHRvIHRoZSBhdWRpbyBtYW5nZXIuCi0gIGNvbnN0
IEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdlcl87Ci0KLSAgLy8gQ29udGFpbnMgYXVkaW8gcGFy
YW1ldGVycyBwcm92aWRlZCB0byB0aGlzIGNsYXNzIGF0IGNvbnN0cnVjdGlvbiBieSB0aGUKLSAg
Ly8gQXVkaW9NYW5hZ2VyLgotICBjb25zdCBBdWRpb1BhcmFtZXRlcnMgYXVkaW9fcGFyYW1ldGVy
c187Ci0KLSAgLy8gRGVsYXkgZXN0aW1hdGUgb2YgdGhlIHRvdGFsIHJvdW5kLXRyaXAgZGVsYXkg
KGlucHV0ICsgb3V0cHV0KS4KLSAgLy8gRml4ZWQgdmFsdWUgc2V0IG9uY2UgaW4gQXR0YWNoQXVk
aW9CdWZmZXIoKSBhbmQgaXQgY2FuIHRha2Ugb25lIG91dCBvZiB0d28KLSAgLy8gcG9zc2libGUg
dmFsdWVzLiBTZWUgYXVkaW9fY29tbW9uLmggZm9yIGRldGFpbHMuCi0gIGludCB0b3RhbF9kZWxh
eV9pbl9taWxsaXNlY29uZHNfOwotCi0gIC8vIENhY2hlZCBjb3B5IG9mIGFkZHJlc3MgdG8gZGly
ZWN0IGF1ZGlvIGJ1ZmZlciBvd25lZCBieSB8al9hdWRpb19yZWNvcmRffC4KLSAgdm9pZCogZGly
ZWN0X2J1ZmZlcl9hZGRyZXNzXzsKLQotICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpcmVj
dCBhdWRpbyBidWZmZXIgb3duZWQgYnkgfGpfYXVkaW9fcmVjb3JkX3wuCi0gIHNpemVfdCBkaXJl
Y3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzXzsKLQotICAvLyBOdW1iZXIgYXVkaW8gZnJhbWVz
IHBlciBhdWRpbyBidWZmZXIuIEVhY2ggYXVkaW8gZnJhbWUgY29ycmVzcG9uZHMgdG8KLSAgLy8g
b25lIHNhbXBsZSBvZiBQQ00gbW9ubyBkYXRhIGF0IDE2IGJpdHMgcGVyIHNhbXBsZS4gSGVuY2Us
IGVhY2ggYXVkaW8KLSAgLy8gZnJhbWUgY29udGFpbnMgMiBieXRlcyAoZ2l2ZW4gdGhhdCB0aGUg
SmF2YSBsYXllciBvbmx5IHN1cHBvcnRzIG1vbm8pLgotICAvLyBFeGFtcGxlOiA0ODAgZm9yIDQ4
MDAwIEh6IG9yIDQ0MSBmb3IgNDQxMDAgSHouCi0gIHNpemVfdCBmcmFtZXNfcGVyX2J1ZmZlcl87
Ci0KLSAgYm9vbCBpbml0aWFsaXplZF87Ci0KLSAgYm9vbCByZWNvcmRpbmdfOwotCi0gIC8vIFJh
dyBwb2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hBdWRpb0J1ZmZlcigpLiBP
d25lZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNsYXNzIGFuZCBjYWxsZWQg
YnkgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgpLgotICBBdWRpb0RldmljZUJ1ZmZlciogYXVk
aW9fZGV2aWNlX2J1ZmZlcl87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRp
ZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQVVESU9fUkVDT1JEX0pO
SV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb190cmFja19qbmkuY2MKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19kZXZpY2UvYW5kcm9pZC9hdWRpb190cmFja19qbmkuY2MJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvYXVkaW9fdHJhY2tfam5pLmNjCShub25leGlzdGVudCkKQEAgLTEsMjYz
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAid2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYXVkaW9fbWFuYWdlci5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX3RyYWNrX2puaS5oIgotCi0jaW5j
bHVkZSA8dXRpbGl0eT4KLQotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0KLSNpbmNsdWRlICJ3
ZWJydGMvYmFzZS9hcnJheXNpemUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9mb3JtYXRfbWFjcm9zLmgiCi0KLSNkZWZpbmUgVEFHICJB
dWRpb1RyYWNrSm5pIgotI2RlZmluZSBBTE9HViguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5E
Uk9JRF9MT0dfVkVSQk9TRSwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR0QoLi4uKSBf
X2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCBUQUcsIF9fVkFfQVJHU19fKQot
I2RlZmluZSBBTE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1Is
IFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dXKC4uLikgX19hbmRyb2lkX2xvZ19wcmlu
dChBTkRST0lEX0xPR19XQVJOLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HSSguLi4p
IF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgVEFHLCBfX1ZBX0FSR1NfXykK
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIEF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNr
IGltcGxlbWVudGF0aW9uLgotQXVkaW9UcmFja0puaTo6SmF2YUF1ZGlvVHJhY2s6OkphdmFBdWRp
b1RyYWNrKAotICAgIE5hdGl2ZVJlZ2lzdHJhdGlvbiogbmF0aXZlX3JlZywKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R2xvYmFsUmVmPiBhdWRpb190cmFjaykKLSAgICA6IGF1ZGlvX3RyYWNrXyhzdGQ6
Om1vdmUoYXVkaW9fdHJhY2spKSwKLSAgICAgIGluaXRfcGxheW91dF8obmF0aXZlX3JlZy0+R2V0
TWV0aG9kSWQoImluaXRQbGF5b3V0IiwgIihJSSlaIikpLAotICAgICAgc3RhcnRfcGxheW91dF8o
bmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQoInN0YXJ0UGxheW91dCIsICIoKVoiKSksCi0gICAgICBz
dG9wX3BsYXlvdXRfKG5hdGl2ZV9yZWctPkdldE1ldGhvZElkKCJzdG9wUGxheW91dCIsICIoKVoi
KSksCi0gICAgICBzZXRfc3RyZWFtX3ZvbHVtZV8obmF0aXZlX3JlZy0+R2V0TWV0aG9kSWQoInNl
dFN0cmVhbVZvbHVtZSIsICIoSSlaIikpLAotICAgICAgZ2V0X3N0cmVhbV9tYXhfdm9sdW1lXygK
LSAgICAgICAgICBuYXRpdmVfcmVnLT5HZXRNZXRob2RJZCgiZ2V0U3RyZWFtTWF4Vm9sdW1lIiwg
IigpSSIpKSwKLSAgICAgIGdldF9zdHJlYW1fdm9sdW1lXyhuYXRpdmVfcmVnLT5HZXRNZXRob2RJ
ZCgiZ2V0U3RyZWFtVm9sdW1lIiwgIigpSSIpKSB7fQotCi1BdWRpb1RyYWNrSm5pOjpKYXZhQXVk
aW9UcmFjazo6fkphdmFBdWRpb1RyYWNrKCkge30KLQotYm9vbCBBdWRpb1RyYWNrSm5pOjpKYXZh
QXVkaW9UcmFjazo6SW5pdFBsYXlvdXQoaW50IHNhbXBsZV9yYXRlLCBpbnQgY2hhbm5lbHMpIHsK
LSAgcmV0dXJuIGF1ZGlvX3RyYWNrXy0+Q2FsbEJvb2xlYW5NZXRob2QoaW5pdF9wbGF5b3V0Xywg
c2FtcGxlX3JhdGUsIGNoYW5uZWxzKTsKLX0KLQotYm9vbCBBdWRpb1RyYWNrSm5pOjpKYXZhQXVk
aW9UcmFjazo6U3RhcnRQbGF5b3V0KCkgewotICByZXR1cm4gYXVkaW9fdHJhY2tfLT5DYWxsQm9v
bGVhbk1ldGhvZChzdGFydF9wbGF5b3V0Xyk7Ci19Ci0KLWJvb2wgQXVkaW9UcmFja0puaTo6SmF2
YUF1ZGlvVHJhY2s6OlN0b3BQbGF5b3V0KCkgewotICByZXR1cm4gYXVkaW9fdHJhY2tfLT5DYWxs
Qm9vbGVhbk1ldGhvZChzdG9wX3BsYXlvdXRfKTsKLX0KLQotYm9vbCBBdWRpb1RyYWNrSm5pOjpK
YXZhQXVkaW9UcmFjazo6U2V0U3RyZWFtVm9sdW1lKGludCB2b2x1bWUpIHsKLSAgcmV0dXJuIGF1
ZGlvX3RyYWNrXy0+Q2FsbEJvb2xlYW5NZXRob2Qoc2V0X3N0cmVhbV92b2x1bWVfLCB2b2x1bWUp
OwotfQotCi1pbnQgQXVkaW9UcmFja0puaTo6SmF2YUF1ZGlvVHJhY2s6OkdldFN0cmVhbU1heFZv
bHVtZSgpIHsKLSAgcmV0dXJuIGF1ZGlvX3RyYWNrXy0+Q2FsbEludE1ldGhvZChnZXRfc3RyZWFt
X21heF92b2x1bWVfKTsKLX0KLQotaW50IEF1ZGlvVHJhY2tKbmk6OkphdmFBdWRpb1RyYWNrOjpH
ZXRTdHJlYW1Wb2x1bWUoKSB7Ci0gIHJldHVybiBhdWRpb190cmFja18tPkNhbGxJbnRNZXRob2Qo
Z2V0X3N0cmVhbV92b2x1bWVfKTsKLX0KLQotLy8gVE9ETyhoZW5yaWthKTogcG9zc2libGUgZXh0
ZW5kIHVzYWdlIG9mIEF1ZGlvTWFuYWdlciBhbmQgYWRkIGl0IGFzIG1lbWJlci4KLUF1ZGlvVHJh
Y2tKbmk6OkF1ZGlvVHJhY2tKbmkoQXVkaW9NYW5hZ2VyKiBhdWRpb19tYW5hZ2VyKQotICAgIDog
al9lbnZpcm9ubWVudF8oSlZNOjpHZXRJbnN0YW5jZSgpLT5lbnZpcm9ubWVudCgpKSwKLSAgICAg
IGF1ZGlvX3BhcmFtZXRlcnNfKGF1ZGlvX21hbmFnZXItPkdldFBsYXlvdXRBdWRpb1BhcmFtZXRl
cnMoKSksCi0gICAgICBkaXJlY3RfYnVmZmVyX2FkZHJlc3NfKG51bGxwdHIpLAotICAgICAgZGly
ZWN0X2J1ZmZlcl9jYXBhY2l0eV9pbl9ieXRlc18oMCksCi0gICAgICBmcmFtZXNfcGVyX2J1ZmZl
cl8oMCksCi0gICAgICBpbml0aWFsaXplZF8oZmFsc2UpLAotICAgICAgcGxheWluZ18oZmFsc2Up
LAotICAgICAgYXVkaW9fZGV2aWNlX2J1ZmZlcl8obnVsbHB0cikgewotICBBTE9HRCgiY3RvciVz
IiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKGF1ZGlvX3BhcmFtZXRl
cnNfLmlzX3ZhbGlkKCkpOwotICBSVENfQ0hFQ0soal9lbnZpcm9ubWVudF8pOwotICBKTklOYXRp
dmVNZXRob2QgbmF0aXZlX21ldGhvZHNbXSA9IHsKLSAgICAgIHsibmF0aXZlQ2FjaGVEaXJlY3RC
dWZmZXJBZGRyZXNzIiwgIihMamF2YS9uaW8vQnl0ZUJ1ZmZlcjtKKVYiLAotICAgICAgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oCi0gICAgICAgICAgJndlYnJ0Yzo6QXVkaW9UcmFja0puaTo6Q2Fj
aGVEaXJlY3RCdWZmZXJBZGRyZXNzKX0sCi0gICAgICB7Im5hdGl2ZUdldFBsYXlvdXREYXRhIiwg
IihJSilWIiwKLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ3ZWJydGM6OkF1ZGlvVHJh
Y2tKbmk6OkdldFBsYXlvdXREYXRhKX19OwotICBqX25hdGl2ZV9yZWdpc3RyYXRpb25fID0gal9l
bnZpcm9ubWVudF8tPlJlZ2lzdGVyTmF0aXZlcygKLSAgICAgICJvcmcvd2VicnRjL3ZvaWNlZW5n
aW5lL1dlYlJ0Y0F1ZGlvVHJhY2siLCBuYXRpdmVfbWV0aG9kcywKLSAgICAgIGFycmF5c2l6ZShu
YXRpdmVfbWV0aG9kcykpOwotICBqX2F1ZGlvX3RyYWNrXy5yZXNldChuZXcgSmF2YUF1ZGlvVHJh
Y2soCi0gICAgICBqX25hdGl2ZV9yZWdpc3RyYXRpb25fLmdldCgpLAotICAgICAgal9uYXRpdmVf
cmVnaXN0cmF0aW9uXy0+TmV3T2JqZWN0KAotICAgICAgICAgICI8aW5pdD4iLCAiKExhbmRyb2lk
L2NvbnRlbnQvQ29udGV4dDtKKVYiLAotICAgICAgICAgIEpWTTo6R2V0SW5zdGFuY2UoKS0+Y29u
dGV4dCgpLCBQb2ludGVyVG9qbG9uZyh0aGlzKSkpKTsKLSAgLy8gRGV0YWNoIGZyb20gdGhpcyB0
aHJlYWQgc2luY2Ugd2Ugd2FudCB0byB1c2UgdGhlIGNoZWNrZXIgdG8gdmVyaWZ5IGNhbGxzCi0g
IC8vIGZyb20gdGhlIEphdmEgYmFzZWQgYXVkaW8gdGhyZWFkLgotICB0aHJlYWRfY2hlY2tlcl9q
YXZhXy5EZXRhY2hGcm9tVGhyZWFkKCk7Ci19Ci0KLUF1ZGlvVHJhY2tKbmk6On5BdWRpb1RyYWNr
Sm5pKCkgewotICBBTE9HRCgifmR0b3IlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAg
UlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgVGVy
bWluYXRlKCk7Ci19Ci0KLWludDMyX3QgQXVkaW9UcmFja0puaTo6SW5pdCgpIHsKLSAgQUxPR0Qo
IkluaXQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludDMy
X3QgQXVkaW9UcmFja0puaTo6VGVybWluYXRlKCkgewotICBBTE9HRCgiVGVybWluYXRlJXMiLCBH
ZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNh
bGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFN0b3BQbGF5b3V0KCk7Ci0gIHJldHVybiAwOwotfQot
Ci1pbnQzMl90IEF1ZGlvVHJhY2tKbmk6OkluaXRQbGF5b3V0KCkgewotICBBTE9HRCgiSW5pdFBs
YXlvdXQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRf
Y2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDSyghaW5pdGlhbGl6
ZWRfKTsKLSAgUlRDX0RDSEVDSyghcGxheWluZ18pOwotICBpZiAoIWpfYXVkaW9fdHJhY2tfLT5J
bml0UGxheW91dCgKLSAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCksIGF1ZGlv
X3BhcmFtZXRlcnNfLmNoYW5uZWxzKCkpKSB7Ci0gICAgQUxPR0UoIkluaXRQbGF5b3V0IGZhaWxl
ZCEiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAgaW5pdGlhbGl6ZWRfID0gdHJ1ZTsKLSAgcmV0
dXJuIDA7Ci19Ci0KLWludDMyX3QgQXVkaW9UcmFja0puaTo6U3RhcnRQbGF5b3V0KCkgewotICBB
TE9HRCgiU3RhcnRQbGF5b3V0JXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hF
Q0soaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSyghcGxheWluZ18pOwotICBpZiAoIWpfYXVk
aW9fdHJhY2tfLT5TdGFydFBsYXlvdXQoKSkgewotICAgIEFMT0dFKCJTdGFydFBsYXlvdXQgZmFp
bGVkISIpOwotICAgIHJldHVybiAtMTsKLSAgfQotICBwbGF5aW5nXyA9IHRydWU7Ci0gIHJldHVy
biAwOwotfQotCi1pbnQzMl90IEF1ZGlvVHJhY2tKbmk6OlN0b3BQbGF5b3V0KCkgewotICBBTE9H
RCgiU3RvcFBsYXlvdXQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVD
Syh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKCFpbml0aWFs
aXplZF8gfHwgIXBsYXlpbmdfKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgaWYgKCFqX2F1ZGlv
X3RyYWNrXy0+U3RvcFBsYXlvdXQoKSkgewotICAgIEFMT0dFKCJTdG9wUGxheW91dCBmYWlsZWQh
Iik7Ci0gICAgcmV0dXJuIC0xOwotICB9Ci0gIC8vIElmIHdlIGRvbid0IGRldGFjaCBoZXJlLCB3
ZSB3aWxsIGhpdCBhIFJUQ19EQ0hFQ0sgaW4gT25EYXRhSXNSZWNvcmRlZCgpCi0gIC8vIG5leHQg
dGltZSBTdGFydFJlY29yZGluZygpIGlzIGNhbGxlZCBzaW5jZSBpdCB3aWxsIGNyZWF0ZSBhIG5l
dyBKYXZhCi0gIC8vIHRocmVhZC4KLSAgdGhyZWFkX2NoZWNrZXJfamF2YV8uRGV0YWNoRnJvbVRo
cmVhZCgpOwotICBpbml0aWFsaXplZF8gPSBmYWxzZTsKLSAgcGxheWluZ18gPSBmYWxzZTsKLSAg
ZGlyZWN0X2J1ZmZlcl9hZGRyZXNzXyA9IG51bGxwdHI7Ci0gIHJldHVybiAwOwotfQotCi1pbnQg
QXVkaW9UcmFja0puaTo6U3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkg
ewotICBhdmFpbGFibGUgPSB0cnVlOwotICByZXR1cm4gMDsKLX0KLQotaW50IEF1ZGlvVHJhY2tK
bmk6OlNldFNwZWFrZXJWb2x1bWUodWludDMyX3Qgdm9sdW1lKSB7Ci0gIEFMT0dEKCJTZXRTcGVh
a2VyVm9sdW1lKCVkKSVzIiwgdm9sdW1lLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIHJldHVy
biBqX2F1ZGlvX3RyYWNrXy0+U2V0U3RyZWFtVm9sdW1lKHZvbHVtZSkgPyAwIDogLTE7Ci19Ci0K
LWludCBBdWRpb1RyYWNrSm5pOjpNYXhTcGVha2VyVm9sdW1lKHVpbnQzMl90JiBtYXhfdm9sdW1l
KSBjb25zdCB7Ci0gIEFMT0dEKCJNYXhTcGVha2VyVm9sdW1lJXMiLCBHZXRUaHJlYWRJbmZvKCku
Y19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJl
YWQoKSk7Ci0gIG1heF92b2x1bWUgPSBqX2F1ZGlvX3RyYWNrXy0+R2V0U3RyZWFtTWF4Vm9sdW1l
KCk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgQXVkaW9UcmFja0puaTo6TWluU3BlYWtlclZvbHVt
ZSh1aW50MzJfdCYgbWluX3ZvbHVtZSkgY29uc3QgewotICBBTE9HRCgiTWF4U3BlYWtlclZvbHVt
ZSVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBtaW5fdm9sdW1lID0gMDsKLSAgcmV0dXJu
IDA7Ci19Ci0KLWludCBBdWRpb1RyYWNrSm5pOjpTcGVha2VyVm9sdW1lKHVpbnQzMl90JiB2b2x1
bWUpIGNvbnN0IHsKLSAgQUxPR0QoIlNwZWFrZXJWb2x1bWUlcyIsIEdldFRocmVhZEluZm8oKS5j
X3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVh
ZCgpKTsKLSAgdm9sdW1lID0gal9hdWRpb190cmFja18tPkdldFN0cmVhbVZvbHVtZSgpOwotICBy
ZXR1cm4gMDsKLX0KLQotLy8gVE9ETyhoZW5yaWthKTogcG9zc2libHkgYWRkIHN0ZXJlbyBzdXBw
b3J0Lgotdm9pZCBBdWRpb1RyYWNrSm5pOjpBdHRhY2hBdWRpb0J1ZmZlcihBdWRpb0RldmljZUJ1
ZmZlciogYXVkaW9CdWZmZXIpIHsKLSAgQUxPR0QoIkF0dGFjaEF1ZGlvQnVmZmVyJXMiLCBHZXRU
aHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxl
ZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfID0gYXVkaW9CdWZmZXI7
Ci0gIGNvbnN0IGludCBzYW1wbGVfcmF0ZV9oeiA9IGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9y
YXRlKCk7Ci0gIEFMT0dEKCJTZXRQbGF5b3V0U2FtcGxlUmF0ZSglZCkiLCBzYW1wbGVfcmF0ZV9o
eik7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRQbGF5b3V0U2FtcGxlUmF0ZShzYW1wbGVf
cmF0ZV9oeik7Ci0gIGNvbnN0IHNpemVfdCBjaGFubmVscyA9IGF1ZGlvX3BhcmFtZXRlcnNfLmNo
YW5uZWxzKCk7Ci0gIEFMT0dEKCJTZXRQbGF5b3V0Q2hhbm5lbHMoJSIgUFJJdVMgIikiLCBjaGFu
bmVscyk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRQbGF5b3V0Q2hhbm5lbHMoY2hhbm5l
bHMpOwotfQotCi12b2lkIEpOSUNBTEwgQXVkaW9UcmFja0puaTo6Q2FjaGVEaXJlY3RCdWZmZXJB
ZGRyZXNzKAotICAgIEpOSUVudiogZW52LCBqb2JqZWN0IG9iaiwgam9iamVjdCBieXRlX2J1ZmZl
ciwgamxvbmcgbmF0aXZlQXVkaW9UcmFjaykgewotICB3ZWJydGM6OkF1ZGlvVHJhY2tKbmkqIHRo
aXNfb2JqZWN0ID0KLSAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8d2VicnRjOjpBdWRpb1RyYWNrSm5p
Kj4gKG5hdGl2ZUF1ZGlvVHJhY2spOwotICB0aGlzX29iamVjdC0+T25DYWNoZURpcmVjdEJ1ZmZl
ckFkZHJlc3MoZW52LCBieXRlX2J1ZmZlcik7Ci19Ci0KLXZvaWQgQXVkaW9UcmFja0puaTo6T25D
YWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoCi0gICAgSk5JRW52KiBlbnYsIGpvYmplY3QgYnl0ZV9i
dWZmZXIpIHsKLSAgQUxPR0QoIk9uQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzIik7Ci0gIFJUQ19E
Q0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hF
Q0soIWRpcmVjdF9idWZmZXJfYWRkcmVzc18pOwotICBkaXJlY3RfYnVmZmVyX2FkZHJlc3NfID0K
LSAgICAgIGVudi0+R2V0RGlyZWN0QnVmZmVyQWRkcmVzcyhieXRlX2J1ZmZlcik7Ci0gIGpsb25n
IGNhcGFjaXR5ID0gZW52LT5HZXREaXJlY3RCdWZmZXJDYXBhY2l0eShieXRlX2J1ZmZlcik7Ci0g
IEFMT0dEKCJkaXJlY3QgYnVmZmVyIGNhcGFjaXR5OiAlbGxkIiwgY2FwYWNpdHkpOwotICBkaXJl
Y3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5dGVzXyA9IHN0YXRpY19jYXN0PHNpemVfdD4oY2FwYWNp
dHkpOwotICBmcmFtZXNfcGVyX2J1ZmZlcl8gPSBkaXJlY3RfYnVmZmVyX2NhcGFjaXR5X2luX2J5
dGVzXyAvIGtCeXRlc1BlckZyYW1lOwotICBBTE9HRCgiZnJhbWVzX3Blcl9idWZmZXI6ICUiIFBS
SXVTLCBmcmFtZXNfcGVyX2J1ZmZlcl8pOwotfQotCi12b2lkIEpOSUNBTEwgQXVkaW9UcmFja0pu
aTo6R2V0UGxheW91dERhdGEoCi0gIEpOSUVudiogZW52LCBqb2JqZWN0IG9iaiwgamludCBsZW5n
dGgsIGpsb25nIG5hdGl2ZUF1ZGlvVHJhY2spIHsKLSAgd2VicnRjOjpBdWRpb1RyYWNrSm5pKiB0
aGlzX29iamVjdCA9Ci0gICAgICByZWludGVycHJldF9jYXN0PHdlYnJ0Yzo6QXVkaW9UcmFja0pu
aSo+IChuYXRpdmVBdWRpb1RyYWNrKTsKLSAgdGhpc19vYmplY3QtPk9uR2V0UGxheW91dERhdGEo
c3RhdGljX2Nhc3Q8c2l6ZV90PihsZW5ndGgpKTsKLX0KLQotLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIG9uIGEgaGlnaC1wcmlvcml0eSB0aHJlYWQgZnJvbSBKYXZhLiBUaGUgbmFtZSBvZgotLy8g
dGhlIHRocmVhZCBpcyAnQXVkaW9SZWNvcmRUcmFjaycuCi12b2lkIEF1ZGlvVHJhY2tKbmk6Ok9u
R2V0UGxheW91dERhdGEoc2l6ZV90IGxlbmd0aCkgewotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyX2phdmFfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0tfRVEoZnJhbWVz
X3Blcl9idWZmZXJfLCBsZW5ndGggLyBrQnl0ZXNQZXJGcmFtZSk7Ci0gIGlmICghYXVkaW9fZGV2
aWNlX2J1ZmZlcl8pIHsKLSAgICBBTE9HRSgiQXR0YWNoQXVkaW9CdWZmZXIgaGFzIG5vdCBiZWVu
IGNhbGxlZCEiKTsKLSAgICByZXR1cm47Ci0gIH0KLSAgLy8gUHVsbCBkZWNvZGVkIGRhdGEgKGlu
IDE2LWJpdCBQQ00gZm9ybWF0KSBmcm9tIGppdHRlciBidWZmZXIuCi0gIGludCBzYW1wbGVzID0g
YXVkaW9fZGV2aWNlX2J1ZmZlcl8tPlJlcXVlc3RQbGF5b3V0RGF0YShmcmFtZXNfcGVyX2J1ZmZl
cl8pOwotICBpZiAoc2FtcGxlcyA8PSAwKSB7Ci0gICAgQUxPR0UoIkF1ZGlvRGV2aWNlQnVmZmVy
OjpSZXF1ZXN0UGxheW91dERhdGEgZmFpbGVkISIpOwotICAgIHJldHVybjsKLSAgfQotICBSVENf
RENIRUNLX0VRKHN0YXRpY19jYXN0PHNpemVfdD4oc2FtcGxlcyksIGZyYW1lc19wZXJfYnVmZmVy
Xyk7Ci0gIC8vIENvcHkgZGVjb2RlZCBkYXRhIGludG8gY29tbW9uIGJ5dGUgYnVmZmVyIHRvIGVu
c3VyZSB0aGF0IGl0IGNhbiBiZQotICAvLyB3cml0dGVuIHRvIHRoZSBKYXZhIGJhc2VkIGF1ZGlv
IHRyYWNrLgotICBzYW1wbGVzID0gYXVkaW9fZGV2aWNlX2J1ZmZlcl8tPkdldFBsYXlvdXREYXRh
KGRpcmVjdF9idWZmZXJfYWRkcmVzc18pOwotICBSVENfRENIRUNLX0VRKGxlbmd0aCwga0J5dGVz
UGVyRnJhbWUgKiBzYW1wbGVzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9hdWRpb190cmFja19qbmkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRy
b2lkL2F1ZGlvX3RyYWNrX2puaS5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2F1ZGlvX3RyYWNrX2puaS5oCShub25leGlzdGVudCkKQEAgLTEsMTU1ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9B
TkRST0lEX0FVRElPX1RSQUNLX0pOSV9IXwotI2RlZmluZSBXRUJSVENfTU9EVUxFU19BVURJT19E
RVZJQ0VfQU5EUk9JRF9BVURJT19UUkFDS19KTklfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQot
I2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvdGhyZWFkX2NoZWNrZXIu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19j
b21tb24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9h
dWRpb19tYW5hZ2VyLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2lu
Y2x1ZGUvYXVkaW9fZGV2aWNlX2RlZmluZXMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvYXVkaW9fZGV2aWNlX2dlbmVyaWMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9k
dWxlcy91dGlsaXR5L2luY2x1ZGUvaGVscGVyc19hbmRyb2lkLmgiCi0jaW5jbHVkZSAid2VicnRj
L21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2p2bV9hbmRyb2lkLmgiCi0KLW5hbWVzcGFjZSB3ZWJy
dGMgewotCi0vLyBJbXBsZW1lbnRzIDE2LWJpdCBtb25vIFBDTSBhdWRpbyBvdXRwdXQgc3VwcG9y
dCBmb3IgQW5kcm9pZCB1c2luZyB0aGUgSmF2YQotLy8gQXVkaW9UcmFjayBpbnRlcmZhY2UuIE1v
c3Qgb2YgdGhlIHdvcmsgaXMgZG9uZSBieSBpdHMgSmF2YSBjb3VudGVycGFydCBpbgotLy8gV2Vi
UnRjQXVkaW9UcmFjay5qYXZhLiBUaGlzIGNsYXNzIGlzIGNyZWF0ZWQgYW5kIGxpdmVzIG9uIGEg
dGhyZWFkIGluCi0vLyBDKystbGFuZCwgYnV0IGRlY29kZWQgYXVkaW8gYnVmZmVycyBhcmUgcmVx
dWVzdGVkIG9uIGEgaGlnaC1wcmlvcml0eQotLy8gdGhyZWFkIG1hbmFnZWQgYnkgdGhlIEphdmEg
Y2xhc3MuCi0vLwotLy8gQW4gaW5zdGFuY2UgbXVzdCBiZSBjcmVhdGVkIGFuZCBkZXN0cm95ZWQg
b24gb25lIGFuZCB0aGUgc2FtZSB0aHJlYWQuCi0vLyBBbGwgcHVibGljIG1ldGhvZHMgbXVzdCBh
bHNvIGJlIGNhbGxlZCBvbiB0aGUgc2FtZSB0aHJlYWQuIEEgdGhyZWFkIGNoZWNrZXIKLS8vIHdp
bGwgUlRDX0RDSEVDSyBpZiBhbnkgbWV0aG9kIGlzIGNhbGxlZCBvbiBhbiBpbnZhbGlkIHRocmVh
ZC4KLS8vCi0vLyBUaGlzIGNsYXNzIHVzZXMgQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkIHRv
IGF0dGFjaCB0byBhIEphdmEgVk0gaWYgbmVlZGVkCi0vLyBhbmQgZGV0YWNoIHdoZW4gdGhlIG9i
amVjdCBnb2VzIG91dCBvZiBzY29wZS4gQWRkaXRpb25hbCB0aHJlYWQgY2hlY2tpbmcKLS8vIGd1
YXJhbnRlZXMgdGhhdCBubyBvdGhlciAocG9zc2libHkgbm9uIGF0dGFjaGVkKSB0aHJlYWQgaXMg
dXNlZC4KLWNsYXNzIEF1ZGlvVHJhY2tKbmkgewotIHB1YmxpYzoKLSAgLy8gV3JhcHMgdGhlIEph
dmEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIEF1ZGlvVHJhY2tKbmkgaW50byBvbmUgaGVscGVyIGNs
YXNzLgotICBjbGFzcyBKYXZhQXVkaW9UcmFjayB7Ci0gICBwdWJsaWM6Ci0gICAgSmF2YUF1ZGlv
VHJhY2soTmF0aXZlUmVnaXN0cmF0aW9uKiBuYXRpdmVfcmVnaXN0cmF0aW9uLAotICAgICAgICAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IGF1ZGlvX3RyYWNrKTsKLSAgICB+
SmF2YUF1ZGlvVHJhY2soKTsKLQotICAgIGJvb2wgSW5pdFBsYXlvdXQoaW50IHNhbXBsZV9yYXRl
LCBpbnQgY2hhbm5lbHMpOwotICAgIGJvb2wgU3RhcnRQbGF5b3V0KCk7Ci0gICAgYm9vbCBTdG9w
UGxheW91dCgpOwotICAgIGJvb2wgU2V0U3RyZWFtVm9sdW1lKGludCB2b2x1bWUpOwotICAgIGlu
dCBHZXRTdHJlYW1NYXhWb2x1bWUoKTsKLSAgICBpbnQgR2V0U3RyZWFtVm9sdW1lKCk7Ci0KLSAg
IHByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdsb2JhbFJlZj4gYXVkaW9fdHJhY2tfOwot
ICAgIGptZXRob2RJRCBpbml0X3BsYXlvdXRfOwotICAgIGptZXRob2RJRCBzdGFydF9wbGF5b3V0
XzsKLSAgICBqbWV0aG9kSUQgc3RvcF9wbGF5b3V0XzsKLSAgICBqbWV0aG9kSUQgc2V0X3N0cmVh
bV92b2x1bWVfOwotICAgIGptZXRob2RJRCBnZXRfc3RyZWFtX21heF92b2x1bWVfOwotICAgIGpt
ZXRob2RJRCBnZXRfc3RyZWFtX3ZvbHVtZV87Ci0gIH07Ci0KLSAgZXhwbGljaXQgQXVkaW9UcmFj
a0puaShBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpOwotICB+QXVkaW9UcmFja0puaSgpOwot
Ci0gIGludDMyX3QgSW5pdCgpOwotICBpbnQzMl90IFRlcm1pbmF0ZSgpOwotCi0gIGludDMyX3Qg
SW5pdFBsYXlvdXQoKTsKLSAgYm9vbCBQbGF5b3V0SXNJbml0aWFsaXplZCgpIGNvbnN0IHsgcmV0
dXJuIGluaXRpYWxpemVkXzsgfQotCi0gIGludDMyX3QgU3RhcnRQbGF5b3V0KCk7Ci0gIGludDMy
X3QgU3RvcFBsYXlvdXQoKTsKLSAgYm9vbCBQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gcGxheWlu
Z187IH0KLQotICBpbnQgU3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSk7
Ci0gIGludCBTZXRTcGVha2VyVm9sdW1lKHVpbnQzMl90IHZvbHVtZSk7Ci0gIGludCBTcGVha2Vy
Vm9sdW1lKHVpbnQzMl90JiB2b2x1bWUpIGNvbnN0OwotICBpbnQgTWF4U3BlYWtlclZvbHVtZSh1
aW50MzJfdCYgbWF4X3ZvbHVtZSkgY29uc3Q7Ci0gIGludCBNaW5TcGVha2VyVm9sdW1lKHVpbnQz
Ml90JiBtaW5fdm9sdW1lKSBjb25zdDsKLQotICB2b2lkIEF0dGFjaEF1ZGlvQnVmZmVyKEF1ZGlv
RGV2aWNlQnVmZmVyKiBhdWRpb0J1ZmZlcik7Ci0KLSBwcml2YXRlOgotICAvLyBDYWxsZWQgZnJv
bSBKYXZhIHNpZGUgc28gd2UgY2FuIGNhY2hlIHRoZSBhZGRyZXNzIG9mIHRoZSBKYXZhLW1hbmdl
ZAotICAvLyB8Ynl0ZV9idWZmZXJ8IGluIHxkaXJlY3RfYnVmZmVyX2FkZHJlc3NffC4gVGhlIHNp
emUgb2YgdGhlIGJ1ZmZlcgotICAvLyBpcyBhbHNvIHN0b3JlZCBpbiB8ZGlyZWN0X2J1ZmZlcl9j
YXBhY2l0eV9pbl9ieXRlc198LgotICAvLyBDYWxsZWQgb24gdGhlIHNhbWUgdGhyZWFkIGFzIHRo
ZSBjcmVhdGluZyB0aHJlYWQuCi0gIHN0YXRpYyB2b2lkIEpOSUNBTEwgQ2FjaGVEaXJlY3RCdWZm
ZXJBZGRyZXNzKAotICAgIEpOSUVudiogZW52LCBqb2JqZWN0IG9iaiwgam9iamVjdCBieXRlX2J1
ZmZlciwgamxvbmcgbmF0aXZlQXVkaW9UcmFjayk7Ci0gIHZvaWQgT25DYWNoZURpcmVjdEJ1ZmZl
ckFkZHJlc3MoSk5JRW52KiBlbnYsIGpvYmplY3QgYnl0ZV9idWZmZXIpOwotCi0gIC8vIENhbGxl
ZCBwZXJpb2RpY2FsbHkgYnkgdGhlIEphdmEgYmFzZWQgV2ViUnRjQXVkaW9UcmFjayBvYmplY3Qg
d2hlbgotICAvLyBwbGF5b3V0IGhhcyBzdGFydGVkLiBFYWNoIGNhbGwgaW5kaWNhdGVzIHRoYXQg
fGxlbmd0aHwgbmV3IGJ5dGVzIHNob3VsZAotICAvLyBiZSB3cml0dGVuIHRvIHRoZSBtZW1vcnkg
YXJlYSB8ZGlyZWN0X2J1ZmZlcl9hZGRyZXNzX3wgZm9yIHBsYXlvdXQuCi0gIC8vIFRoaXMgbWV0
aG9kIGlzIGNhbGxlZCBvbiBhIGhpZ2gtcHJpb3JpdHkgdGhyZWFkIGZyb20gSmF2YS4gVGhlIG5h
bWUgb2YKLSAgLy8gdGhlIHRocmVhZCBpcyAnQXVkaW9UcmFja1RocmVhZCcuCi0gIHN0YXRpYyB2
b2lkIEpOSUNBTEwgR2V0UGxheW91dERhdGEoCi0gICAgSk5JRW52KiBlbnYsIGpvYmplY3Qgb2Jq
LCBqaW50IGxlbmd0aCwgamxvbmcgbmF0aXZlQXVkaW9UcmFjayk7Ci0gIHZvaWQgT25HZXRQbGF5
b3V0RGF0YShzaXplX3QgbGVuZ3RoKTsKLQotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGNvbnN0
cnVjdG9yLgotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotCi0gIC8vIFN0
b3JlcyB0aHJlYWQgSUQgaW4gZmlyc3QgY2FsbCB0byBPbkdldFBsYXlvdXREYXRhKCkgZnJvbSBo
aWdoLXByaW9yaXR5Ci0gIC8vIHRocmVhZCBpbiBKYXZhLiBEZXRhY2hlZCBkdXJpbmcgY29uc3Ry
dWN0aW9uIG9mIHRoaXMgb2JqZWN0LgotICBydGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNr
ZXJfamF2YV87Ci0KLSAgLy8gQ2FsbHMgQXR0YWNoQ3VycmVudFRocmVhZCgpIGlmIHRoaXMgdGhy
ZWFkIGlzIG5vdCBhdHRhY2hlZCBhdCBjb25zdHJ1Y3Rpb24uCi0gIC8vIEFsc28gZW5zdXJlcyB0
aGF0IERldGFjaEN1cnJlbnRUaHJlYWQoKSBpcyBjYWxsZWQgYXQgZGVzdHJ1Y3Rpb24uCi0gIEF0
dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCBhdHRhY2hfdGhyZWFkX2lmX25lZWRlZF87Ci0KLSAg
Ly8gV3JhcHMgdGhlIEpOSSBpbnRlcmZhY2UgcG9pbnRlciBhbmQgbWV0aG9kcyBhc3NvY2lhdGVk
IHdpdGggaXQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxKTklFbnZpcm9ubWVudD4gal9lbnZpcm9ubWVu
dF87Ci0KLSAgLy8gQ29udGFpbnMgZmFjdG9yeSBtZXRob2QgZm9yIGNyZWF0aW5nIHRoZSBKYXZh
IG9iamVjdC4KLSAgc3RkOjp1bmlxdWVfcHRyPE5hdGl2ZVJlZ2lzdHJhdGlvbj4gal9uYXRpdmVf
cmVnaXN0cmF0aW9uXzsKLQotICAvLyBXcmFwcyB0aGUgSmF2YSBzcGVjaWZpYyBwYXJ0cyBvZiB0
aGUgQXVkaW9UcmFja0puaSBjbGFzcy4KLSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvVHJhY2tKbmk6
OkphdmFBdWRpb1RyYWNrPiBqX2F1ZGlvX3RyYWNrXzsKLQotICAvLyBDb250YWlucyBhdWRpbyBw
YXJhbWV0ZXJzIHByb3ZpZGVkIHRvIHRoaXMgY2xhc3MgYXQgY29uc3RydWN0aW9uIGJ5IHRoZQot
ICAvLyBBdWRpb01hbmFnZXIuCi0gIGNvbnN0IEF1ZGlvUGFyYW1ldGVycyBhdWRpb19wYXJhbWV0
ZXJzXzsKLQotICAvLyBDYWNoZWQgY29weSBvZiBhZGRyZXNzIHRvIGRpcmVjdCBhdWRpbyBidWZm
ZXIgb3duZWQgYnkgfGpfYXVkaW9fdHJhY2tffC4KLSAgdm9pZCogZGlyZWN0X2J1ZmZlcl9hZGRy
ZXNzXzsKLQotICAvLyBOdW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGRpcmVjdCBhdWRpbyBidWZmZXIg
b3duZWQgYnkgfGpfYXVkaW9fdHJhY2tffC4KLSAgc2l6ZV90IGRpcmVjdF9idWZmZXJfY2FwYWNp
dHlfaW5fYnl0ZXNfOwotCi0gIC8vIE51bWJlciBvZiBhdWRpbyBmcmFtZXMgcGVyIGF1ZGlvIGJ1
ZmZlci4gRWFjaCBhdWRpbyBmcmFtZSBjb3JyZXNwb25kcyB0bwotICAvLyBvbmUgc2FtcGxlIG9m
IFBDTSBtb25vIGRhdGEgYXQgMTYgYml0cyBwZXIgc2FtcGxlLiBIZW5jZSwgZWFjaCBhdWRpbwot
ICAvLyBmcmFtZSBjb250YWlucyAyIGJ5dGVzIChnaXZlbiB0aGF0IHRoZSBKYXZhIGxheWVyIG9u
bHkgc3VwcG9ydHMgbW9ubykuCi0gIC8vIEV4YW1wbGU6IDQ4MCBmb3IgNDgwMDAgSHogb3IgNDQx
IGZvciA0NDEwMCBIei4KLSAgc2l6ZV90IGZyYW1lc19wZXJfYnVmZmVyXzsKLQotICBib29sIGlu
aXRpYWxpemVkXzsKLQotICBib29sIHBsYXlpbmdfOwotCi0gIC8vIFJhdyBwb2ludGVyIGhhbmRs
ZSBwcm92aWRlZCB0byB1cyBpbiBBdHRhY2hBdWRpb0J1ZmZlcigpLiBPd25lZCBieSB0aGUKLSAg
Ly8gQXVkaW9EZXZpY2VNb2R1bGVJbXBsIGNsYXNzIGFuZCBjYWxsZWQgYnkgQXVkaW9EZXZpY2VN
b2R1bGU6OkNyZWF0ZSgpLgotICAvLyBUaGUgQXVkaW9EZXZpY2VCdWZmZXIgaXMgYSBtZW1iZXIg
b2YgdGhlIEF1ZGlvRGV2aWNlTW9kdWxlSW1wbCBpbnN0YW5jZQotICAvLyBhbmQgdGhlcmVmb3Jl
IG91dGxpdmVzIHRoaXMgb2JqZWN0LgotICBBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9fZGV2aWNl
X2J1ZmZlcl87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VC
UlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQVVESU9fVFJBQ0tfSk5JX0hfCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL2J1aWxkX2luZm8uY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9idWlsZF9pbmZvLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1aWxk
X2luZm8uY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2J1
aWxkX2luZm8uaCIKLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9o
ZWxwZXJzX2FuZHJvaWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLUJ1aWxkSW5mbzo6QnVp
bGRJbmZvKCkKLSAgICA6IGpfZW52aXJvbm1lbnRfKEpWTTo6R2V0SW5zdGFuY2UoKS0+ZW52aXJv
bm1lbnQoKSksCi0gICAgICBqX2J1aWxkX2luZm9fKAotICAgICAgICAgIEpWTTo6R2V0SW5zdGFu
Y2UoKS0+R2V0Q2xhc3MoIm9yZy93ZWJydGMvdm9pY2VlbmdpbmUvQnVpbGRJbmZvIikpIHt9Ci0K
LXN0ZDo6c3RyaW5nIEJ1aWxkSW5mbzo6R2V0U3RyaW5nRnJvbUphdmEoY29uc3QgY2hhciogbmFt
ZSkgewotICBqbWV0aG9kSUQgaWQgPSBqX2J1aWxkX2luZm9fLkdldFN0YXRpY01ldGhvZElkKG5h
bWUsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICBqc3RyaW5nIGpfc3RyaW5nID0gc3RhdGlj
X2Nhc3Q8anN0cmluZz4oCi0gICAgICBqX2J1aWxkX2luZm9fLkNhbGxTdGF0aWNPYmplY3RNZXRo
b2QoaWQpKTsKLSAgcmV0dXJuIGpfZW52aXJvbm1lbnRfLT5KYXZhVG9TdGRTdHJpbmcoal9zdHJp
bmcpOwotfQotCi1zdGQ6OnN0cmluZyBCdWlsZEluZm86OkdldERldmljZU1vZGVsKCkgewotICBy
ZXR1cm4gR2V0U3RyaW5nRnJvbUphdmEoImdldERldmljZU1vZGVsIik7Ci19Ci0KLXN0ZDo6c3Ry
aW5nIEJ1aWxkSW5mbzo6R2V0QnJhbmQoKSB7Ci0gIHJldHVybiBHZXRTdHJpbmdGcm9tSmF2YSgi
Z2V0QnJhbmQiKTsKLX0KLQotc3RkOjpzdHJpbmcgQnVpbGRJbmZvOjpHZXREZXZpY2VNYW51ZmFj
dHVyZXIoKSB7Ci0gIHJldHVybiBHZXRTdHJpbmdGcm9tSmF2YSgiZ2V0RGV2aWNlTWFudWZhY3R1
cmVyIik7Ci19Ci0KLXN0ZDo6c3RyaW5nIEJ1aWxkSW5mbzo6R2V0QW5kcm9pZEJ1aWxkSWQoKSB7
Ci0gIHJldHVybiBHZXRTdHJpbmdGcm9tSmF2YSgiZ2V0QW5kcm9pZEJ1aWxkSWQiKTsKLX0KLQot
c3RkOjpzdHJpbmcgQnVpbGRJbmZvOjpHZXRCdWlsZFR5cGUoKSB7Ci0gIHJldHVybiBHZXRTdHJp
bmdGcm9tSmF2YSgiZ2V0QnVpbGRUeXBlIik7Ci19Ci0KLXN0ZDo6c3RyaW5nIEJ1aWxkSW5mbzo6
R2V0QnVpbGRSZWxlYXNlKCkgewotICByZXR1cm4gR2V0U3RyaW5nRnJvbUphdmEoImdldEJ1aWxk
UmVsZWFzZSIpOwotfQotCi1TZGtDb2RlIEJ1aWxkSW5mbzo6R2V0U2RrVmVyc2lvbigpIHsKLSAg
am1ldGhvZElEIGlkID0gal9idWlsZF9pbmZvXy5HZXRTdGF0aWNNZXRob2RJZCgiZ2V0U2RrVmVy
c2lvbiIsICIoKUkiKTsKLSAgamludCBqX3ZlcnNpb24gPSBqX2J1aWxkX2luZm9fLkNhbGxTdGF0
aWNJbnRNZXRob2QoaWQpOwotICByZXR1cm4gc3RhdGljX2Nhc3Q8U2RrQ29kZT4oal92ZXJzaW9u
KTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9idWls
ZF9pbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9idWlsZF9pbmZvLmgJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvYnVpbGRfaW5mby5oCShub25leGlzdGVudCkK
QEAgLTEsODUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRD
X01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfQlVJTERfSU5GT19IXwotI2RlZmluZSBXRUJS
VENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9CVUlMRF9JTkZPX0hfCi0KLSNpbmNsdWRl
IDxqbmkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2p2bV9hbmRyb2lkLmgiCi0KLW5hbWVz
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
ZWQgdG8gdGhlIEpWTS4KLSAgQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkIGF0dGFjaF90aHJl
YWRfaWZfbmVlZGVkXzsKLQotICAvLyBQcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEpOSUVudiBpbnRl
cmZhY2UgcG9pbnRlciBhbmQgdGhlIEphdmFUb1N0ZFN0cmluZygpCi0gIC8vIG1ldGhvZCB3aGlj
aCBpcyB1c2VkIHRvIHRyYW5zbGF0ZSBKYXZhIHN0cmluZ3MgdG8gc3RkIHN0cmluZ3MuCi0gIHN0
ZDo6dW5pcXVlX3B0cjxKTklFbnZpcm9ubWVudD4gal9lbnZpcm9ubWVudF87Ci0KLSAgLy8gSG9s
ZHMgdGhlIGpjbGFzcyBvYmplY3QgYW5kIHByb3ZpZGVzIGFjY2VzcyB0byBDYWxsU3RhdGljT2Jq
ZWN0TWV0aG9kKCkuCi0gIC8vIFVzZWQgYnkgR2V0U3RyaW5nRnJvbUphdmEoKSBkdXJpbmcgY29u
c3RydWN0aW9uIG9ubHkuCi0gIEphdmFDbGFzcyBqX2J1aWxkX2luZm9fOwotfTsKLQotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklD
RV9BTkRST0lEX0JVSUxEX0lORk9fSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRp
YWxpemVkLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJlX2luaXRpYWxpemVk
LmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2Vuc3VyZV9pbml0aWFsaXpl
ZC5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvZW5zdXJl
X2luaXRpYWxpemVkLmgiCi0KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0KLSNpbmNsdWRlICJ3ZWJy
dGMvYmFzZS9pZ25vcmVfd3VuZGVmLmgiCi0KLS8vIE5vdGU6IHRoaXMgZGVwZW5kZW5jeSBpcyBk
YW5nZXJvdXMgc2luY2UgaXQgcmVhY2hlcyBpbnRvIENocm9taXVtJ3MgYmFzZS4KLS8vIFRoZXJl
J3MgYSByaXNrIG9mIGUuZy4gbWFjcm8gY2xhc2hlcy4gVGhpcyBmaWxlIG1heSBvbmx5IGJlIHVz
ZWQgaW4gdGVzdHMuCi1SVENfUFVTSF9JR05PUklOR19XVU5ERUYoKQotI2luY2x1ZGUgImJhc2Uv
YW5kcm9pZC9jb250ZXh0X3V0aWxzLmgiCi0jaW5jbHVkZSAiYmFzZS9hbmRyb2lkL2puaV9hbmRy
b2lkLmgiCi1SVENfUE9QX0lHTk9SSU5HX1dVTkRFRigpCi0jaW5jbHVkZSAid2VicnRjL2Jhc2Uv
Y2hlY2tzLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQv
YXVkaW9fcmVjb3JkX2puaS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hbmRyb2lkL2F1ZGlvX3RyYWNrX2puaS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3V0
aWxpdHkvaW5jbHVkZS9qdm1fYW5kcm9pZC5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSBhdWRpb2RldmljZW1vZHVsZSB7Ci0KLXN0YXRpYyBwdGhyZWFkX29uY2VfdCBnX2luaXRp
YWxpemVfb25jZSA9IFBUSFJFQURfT05DRV9JTklUOwotCi12b2lkIEVuc3VyZUluaXRpYWxpemVk
T25jZSgpIHsKLSAgUlRDX0NIRUNLKDo6YmFzZTo6YW5kcm9pZDo6SXNWTUluaXRpYWxpemVkKCkp
OwotICBKTklFbnYqIGpuaSA9IDo6YmFzZTo6YW5kcm9pZDo6QXR0YWNoQ3VycmVudFRocmVhZCgp
OwotICBKYXZhVk0qIGp2bSA9IE5VTEw7Ci0gIFJUQ19DSEVDS19FUSgwLCBqbmktPkdldEphdmFW
TSgmanZtKSk7Ci0gIGpvYmplY3QgY29udGV4dCA9IDo6YmFzZTo6YW5kcm9pZDo6R2V0QXBwbGlj
YXRpb25Db250ZXh0KCkub2JqKCk7Ci0KLSAgLy8gSW5pdGlhbGl6ZSB0aGUgSmF2YSBlbnZpcm9u
bWVudCAoY3VycmVudGx5IG9ubHkgdXNlZCBieSB0aGUgYXVkaW8gbWFuYWdlcikuCi0gIHdlYnJ0
Yzo6SlZNOjpJbml0aWFsaXplKGp2bSwgY29udGV4dCk7Ci19Ci0KLXZvaWQgRW5zdXJlSW5pdGlh
bGl6ZWQoKSB7Ci0gIFJUQ19DSEVDS19FUSgwLCBwdGhyZWFkX29uY2UoJmdfaW5pdGlhbGl6ZV9v
bmNlLCAmRW5zdXJlSW5pdGlhbGl6ZWRPbmNlKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSBhdWRp
b2RldmljZW1vZHVsZQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9lbnN1cmVfaW5pdGlhbGl6ZWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2Vuc3Vy
ZV9pbml0aWFsaXplZC5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2Vuc3Vy
ZV9pbml0aWFsaXplZC5oCShub25leGlzdGVudCkKQEAgLTEsMTcgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIGF1ZGlvZGV2aWNl
bW9kdWxlIHsKLQotdm9pZCBFbnN1cmVJbml0aWFsaXplZCgpOwotCi19ICAvLyBuYW1lc3BhY2Ug
YXVkaW9kZXZpY2Vtb2R1bGUKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8uamF2YQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUv
QnVpbGRJbmZvLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8uamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDUxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJy
dGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotCi1wdWJsaWMgZmlu
YWwgY2xhc3MgQnVpbGRJbmZvIHsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlKCkg
ewotICAgIHJldHVybiBCdWlsZC5ERVZJQ0U7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmlu
ZyBnZXREZXZpY2VNb2RlbCgpIHsKLSAgICByZXR1cm4gQnVpbGQuTU9ERUw7Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIFN0cmluZyBnZXRQcm9kdWN0KCkgewotICAgIHJldHVybiBCdWlsZC5QUk9E
VUNUOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QnJhbmQoKSB7Ci0gICAgcmV0
dXJuIEJ1aWxkLkJSQU5EOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNl
TWFudWZhY3R1cmVyKCkgewotICAgIHJldHVybiBCdWlsZC5NQU5VRkFDVFVSRVI7Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBbmRyb2lkQnVpbGRJZCgpIHsKLSAgICByZXR1cm4g
QnVpbGQuSUQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCdWlsZFR5cGUoKSB7
Ci0gICAgcmV0dXJuIEJ1aWxkLlRZUEU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBn
ZXRCdWlsZFJlbGVhc2UoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uUkVMRUFTRTsKLSAg
fQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFNka1ZlcnNpb24oKSB7Ci0gICAgcmV0dXJuIEJ1
aWxkLlZFUlNJT04uU0RLX0lOVDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZmZWN0cy5qYXZhCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJS
dGNBdWRpb0VmZmVjdHMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZmZWN0cy5qYXZhCShu
b25leGlzdGVudCkKQEAgLTEsMzI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1w
YWNrYWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxvZ2dp
bmc7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJv
aWQubWVkaWEuYXVkaW9meC5BY291c3RpY0VjaG9DYW5jZWxlcjsKLWltcG9ydCBhbmRyb2lkLm1l
ZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1
ZGlvRWZmZWN0LkRlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1dG9t
YXRpY0dhaW5Db250cm9sOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5Ob2lzZVN1cHBy
ZXNzb3I7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0
OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vLyBUaGlzIGNsYXNzIHdyYXBzIGNvbnRyb2wg
b2YgdGhyZWUgZGlmZmVyZW50IHBsYXRmb3JtIGVmZmVjdHMuIFN1cHBvcnRlZAotLy8gZWZmZWN0
cyBhcmU6IEFjb3VzdGljRWNob0NhbmNlbGVyIChBRUMpIGFuZCBOb2lzZVN1cHByZXNzb3IgKE5T
KS4KLS8vIENhbGxpbmcgZW5hYmxlKCkgd2lsbCBhY3RpdmUgYWxsIGVmZmVjdHMgdGhhdCBhcmUK
LS8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHxzaG91bGRF
bmFibGVYWFh8IG1lbWJlciBpcyBzZXQuCi1jbGFzcyBXZWJSdGNBdWRpb0VmZmVjdHMgewotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb0VmZmVjdHMiOwotCi0gIC8vIFVV
SURzIGZvciBTb2Z0d2FyZSBBdWRpbyBFZmZlY3RzIHRoYXQgd2Ugd2FudCB0byBhdm9pZCB1c2lu
Zy4KLSAgLy8gVGhlIGltcGxlbWVudG9yIGZpZWxkIHdpbGwgYmUgc2V0IHRvICJUaGUgQW5kcm9p
ZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ii4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVVJRCBBT1NQ
X0FDT1VTVElDX0VDSE9fQ0FOQ0VMRVIgPQotICAgICAgVVVJRC5mcm9tU3RyaW5nKCJiYjM5MmVj
MC04ZDRkLTExZTAtYTg5Ni0wMDAyYTVkNWM1MWIiKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
VVVJRCBBT1NQX05PSVNFX1NVUFBSRVNTT1IgPQotICAgICAgVVVJRC5mcm9tU3RyaW5nKCJjMDZj
ODQwMC04ZTA2LTExZTAtOWNiNi0wMDAyYTVkNWM1MWIiKTsKLQotICAvLyBDb250YWlucyB0aGUg
YXZhaWxhYmxlIGVmZmVjdCBkZXNjcmlwdG9ycyByZXR1cm5lZCBmcm9tIHRoZQotICAvLyBBdWRp
b0VmZmVjdC5nZXRFZmZlY3RzKCkgY2FsbC4gVGhpcyByZXN1bHQgaXMgY2FjaGVkIHRvIGF2b2lk
IGRvaW5nIHRoZQotICAvLyBzbG93IE9TIGNhbGwgbXVsdGlwbGUgdGltZXMuCi0gIHByaXZhdGUg
c3RhdGljIERlc2NyaXB0b3JbXSBjYWNoZWRFZmZlY3RzID0gbnVsbDsKLQotICAvLyBDb250YWlu
cyB0aGUgYXVkaW8gZWZmZWN0IG9iamVjdHMuIENyZWF0ZWQgaW4gZW5hYmxlKCkgYW5kIGRlc3Ry
b3llZAotICAvLyBpbiByZWxlYXNlKCkuCi0gIHByaXZhdGUgQWNvdXN0aWNFY2hvQ2FuY2VsZXIg
YWVjID0gbnVsbDsKLSAgcHJpdmF0ZSBOb2lzZVN1cHByZXNzb3IgbnMgPSBudWxsOwotCi0gIC8v
IEFmZmVjdHMgdGhlIGZpbmFsIHN0YXRlIGdpdmVuIHRvIHRoZSBzZXRFbmFibGVkKCkgbWV0aG9k
IG9uIGVhY2ggZWZmZWN0LgotICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBpcyBzZXQgdG8gImRpc2Fi
bGVkIiBidXQgZWFjaCBlZmZlY3QgY2FuIGFsc28gYmUgZW5hYmxlZAotICAvLyBieSBjYWxsaW5n
IHNldEFFQygpIGFuZCBzZXROUygpLgotICAvLyBUbyBlbmFibGUgYW4gZWZmZWN0LCBib3RoIHRo
ZSBzaG91bGRFbmFibGVYWFggbWVtYmVyIGFuZCB0aGUgc3RhdGljCi0gIC8vIGNhblVzZVhYWCgp
IG11c3QgYmUgdHJ1ZS4KLSAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEVuYWJsZUFlYyA9IGZhbHNl
OwotICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkRW5hYmxlTnMgPSBmYWxzZTsKLQotICAvLyBDaGVj
a3MgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIEFjb3VzdGljIEVjaG8gQ2FuY2VsbGF0aW9uIChB
RUMpLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIEFFQywgZmFs
c2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5j
ZWxlclN1cHBvcnRlZCgpIHsKLSAgICAvLyBOb3RlOiB3ZSdyZSB1c2luZyBpc0Fjb3VzdGljRWNo
b0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCkgaW5zdGVhZCBvZgotICAgIC8vIEFjb3VzdGljRWNo
b0NhbmNlbGVyLmlzQXZhaWxhYmxlKCkgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBnZXRFZmZlY3Rz
KCkKLSAgICAvLyBPUyBBUEkgY2FsbC4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5ydW5u
aW5nT25KZWxseUJlYW5PckhpZ2hlcigpICYmIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJFZmZlY3RB
dmFpbGFibGUoKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiB0aGUgZGV2aWNlIGltcGxlbWVudHMg
Tm9pc2UgU3VwcHJlc3Npb24gKE5TKS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ug
aW1wbGVtZW50cyBOUywgZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4g
aXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSB7Ci0gICAgLy8gTm90ZTogd2UncmUgdXNpbmcg
aXNOb2lzZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKSBpbnN0ZWFkIG9mCi0gICAgLy8gTm9p
c2VTdXBwcmVzc29yLmlzQXZhaWxhYmxlKCkgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBnZXRFZmZl
Y3RzKCkKLSAgICAvLyBPUyBBUEkgY2FsbC4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5y
dW5uaW5nT25KZWxseUJlYW5PckhpZ2hlcigpICYmIGlzTm9pc2VTdXBwcmVzc29yRWZmZWN0QXZh
aWxhYmxlKCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpcyBibGFj
a2xpc3RlZCBmb3IgSFcgQUVDIHVzYWdlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291
c3RpY0VjaG9DYW5jZWxlckJsYWNrbGlzdGVkKCkgewotICAgIExpc3Q8U3RyaW5nPiBibGFja0xp
c3RlZE1vZGVscyA9IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0QmxhY2tMaXN0ZWRNb2RlbHNGb3JBZWNV
c2FnZSgpOwotICAgIGJvb2xlYW4gaXNCbGFja2xpc3RlZCA9IGJsYWNrTGlzdGVkTW9kZWxzLmNv
bnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgICBpZiAoaXNCbGFja2xpc3RlZCkgewotICAgICAgTG9n
Z2luZy53KFRBRywgQnVpbGQuTU9ERUwgKyAiIGlzIGJsYWNrbGlzdGVkIGZvciBIVyBBRUMgdXNh
Z2UhIik7Ci0gICAgfQotICAgIHJldHVybiBpc0JsYWNrbGlzdGVkOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0ZWQgZm9yIEhXIE5TIHVzYWdlLgot
ICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JCbGFja2xpc3RlZCgpIHsK
LSAgICBMaXN0PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBXZWJSdGNBdWRpb1V0aWxzLmdl
dEJsYWNrTGlzdGVkTW9kZWxzRm9yTnNVc2FnZSgpOwotICAgIGJvb2xlYW4gaXNCbGFja2xpc3Rl
ZCA9IGJsYWNrTGlzdGVkTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgICBpZiAoaXNC
bGFja2xpc3RlZCkgewotICAgICAgTG9nZ2luZy53KFRBRywgQnVpbGQuTU9ERUwgKyAiIGlzIGJs
YWNrbGlzdGVkIGZvciBIVyBOUyB1c2FnZSEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzQmxhY2ts
aXN0ZWQ7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIEFFQyBzaG91
bGQgYmUgZXhjbHVkZWQgYmFzZWQgb24gaXRzIFVVSUQuCi0gIC8vIEF1ZGlvRWZmZWN0LnF1ZXJ5
RWZmZWN0cygpIGNhbiB0aHJvdyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uCi0gIEBUYXJnZXRBcGko
MTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5jZWxlckV4Y2x1
ZGVkQnlVVUlEKCkgewotICAgIGZvciAoRGVzY3JpcHRvciBkIDogZ2V0QXZhaWxhYmxlRWZmZWN0
cygpKSB7Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9B
RUMpCi0gICAgICAgICAgJiYgZC51dWlkLmVxdWFscyhBT1NQX0FDT1VTVElDX0VDSE9fQ0FOQ0VM
RVIpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
ZmFsc2U7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIE5TIHNob3Vs
ZCBiZSBleGNsdWRlZCBiYXNlZCBvbiBpdHMgVVVJRC4KLSAgLy8gQXVkaW9FZmZlY3QucXVlcnlF
ZmZlY3RzKCkgY2FuIHRocm93IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi4KLSAgQFRhcmdldEFwaSgx
OCkKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvckV4Y2x1ZGVkQnlV
VUlEKCkgewotICAgIGZvciAoRGVzY3JpcHRvciBkIDogZ2V0QXZhaWxhYmxlRWZmZWN0cygpKSB7
Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9OUykgJiYg
ZC51dWlkLmVxdWFscyhBT1NQX05PSVNFX1NVUFBSRVNTT1IpKSB7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBBY291c3RpYyBFY2hvIENhbmNlbGxhdGlv
biAoQUVDKS4KLSAgQFRhcmdldEFwaSgxOCkKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Fj
b3VzdGljRWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCkgewotICAgIHJldHVybiBpc0VmZmVj
dFR5cGVBdmFpbGFibGUoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDKTsKLSAgfQotCi0gIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIE5vaXNlIFN1cHByZXNzaW9uIChO
UykuCi0gIEBUYXJnZXRBcGkoMTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1
cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKSB7Ci0gICAgcmV0dXJuIGlzRWZmZWN0VHlwZUF2YWls
YWJsZShBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9OUyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRy
dWUgaWYgYWxsIGNvbmRpdGlvbnMgZm9yIHN1cHBvcnRpbmcgdGhlIEhXIEFFQyBhcmUgZnVsZmls
bGVkLgotICAvLyBJdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBlbmFibGUgdGhlIEhXIEFFQyBp
ZiB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2Fu
VXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKSB7Ci0gICAgYm9vbGVhbiBjYW5Vc2VBY291c3RpY0Vj
aG9DYW5jZWxlciA9IGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKQotICAgICAgICAm
JiAhV2ViUnRjQXVkaW9VdGlscy51c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKCkK
LSAgICAgICAgJiYgIWlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJCbGFja2xpc3RlZCgpICYmICFpc0Fj
b3VzdGljRWNob0NhbmNlbGVyRXhjbHVkZWRCeVVVSUQoKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
Y2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXI6ICIgKyBjYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxl
cik7Ci0gICAgcmV0dXJuIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyOwotICB9Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGlmIGFsbCBjb25kaXRpb25zIGZvciBzdXBwb3J0aW5nIHRoZSBIVyBOUyBh
cmUgZnVsZmlsbGVkLgotICAvLyBJdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBlbmFibGUgdGhl
IEhXIE5TIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9v
bGVhbiBjYW5Vc2VOb2lzZVN1cHByZXNzb3IoKSB7Ci0gICAgYm9vbGVhbiBjYW5Vc2VOb2lzZVN1
cHByZXNzb3IgPSBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpCi0gICAgICAgICYmICFXZWJS
dGNBdWRpb1V0aWxzLnVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKCkgJiYgIWlzTm9pc2VT
dXBwcmVzc29yQmxhY2tsaXN0ZWQoKQotICAgICAgICAmJiAhaXNOb2lzZVN1cHByZXNzb3JFeGNs
dWRlZEJ5VVVJRCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJjYW5Vc2VOb2lzZVN1cHByZXNzb3I6
ICIgKyBjYW5Vc2VOb2lzZVN1cHByZXNzb3IpOwotICAgIHJldHVybiBjYW5Vc2VOb2lzZVN1cHBy
ZXNzb3I7Ci0gIH0KLQotICBzdGF0aWMgV2ViUnRjQXVkaW9FZmZlY3RzIGNyZWF0ZSgpIHsKLSAg
ICAvLyBSZXR1cm4gbnVsbCBpZiBWb0lQIGVmZmVjdHMgKEFFQywgQUdDIGFuZCBOUykgYXJlIG5v
dCBzdXBwb3J0ZWQuCi0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5QmVh
bk9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJBUEkgbGV2ZWwgMTYgb3IgaGln
aGVyIGlzIHJlcXVpcmVkISIpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJldHVy
biBuZXcgV2ViUnRjQXVkaW9FZmZlY3RzKCk7Ci0gIH0KLQotICBwcml2YXRlIFdlYlJ0Y0F1ZGlv
RWZmZWN0cygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0aWxz
LmdldFRocmVhZEluZm8oKSk7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGVuYWJs
ZSBvciBkaXNhYmxlIHRoZSBwbGF0Zm9ybSBBRUMuIEl0IG1vZGlmaWVzCi0gIC8vIHxzaG91bGRF
bmFibGVBZWN8IHdoaWNoIGlzIHVzZWQgaW4gZW5hYmxlKCkgd2hlcmUgdGhlIGFjdHVhbCBzdGF0
ZQotICAvLyBvZiB0aGUgQUVDIGVmZmVjdCBpcyBtb2RpZmllZC4gUmV0dXJucyB0cnVlIGlmIEhX
IEFFQyBpcyBzdXBwb3J0ZWQgYW5kCi0gIC8vIGZhbHNlIG90aGVyd2lzZS4KLSAgcHVibGljIGJv
b2xlYW4gc2V0QUVDKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInNldEFF
QygiICsgZW5hYmxlICsgIikiKTsKLSAgICBpZiAoIWNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVy
KCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJQbGF0Zm9ybSBBRUMgaXMgbm90IHN1cHBvcnRl
ZCIpOwotICAgICAgc2hvdWxkRW5hYmxlQWVjID0gZmFsc2U7Ci0gICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotICAgIGlmIChhZWMgIT0gbnVsbCAmJiAoZW5hYmxlICE9IHNob3VsZEVuYWJsZUFl
YykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJQbGF0Zm9ybSBBRUMgc3RhdGUgY2FuJ3QgYmUg
bW9kaWZpZWQgd2hpbGUgcmVjb3JkaW5nIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHNob3VsZEVuYWJsZUFlYyA9IGVuYWJsZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0g
IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHBsYXRmb3JtIE5T
LiBJdCBtb2RpZmllcwotICAvLyB8c2hvdWxkRW5hYmxlTnN8IHdoaWNoIGlzIHVzZWQgaW4gZW5h
YmxlKCkgd2hlcmUgdGhlIGFjdHVhbCBzdGF0ZQotICAvLyBvZiB0aGUgTlMgZWZmZWN0IGlzIG1v
ZGlmaWVkLiBSZXR1cm5zIHRydWUgaWYgSFcgTlMgaXMgc3VwcG9ydGVkIGFuZAotICAvLyBmYWxz
ZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBib29sZWFuIHNldE5TKGJvb2xlYW4gZW5hYmxlKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgInNldE5TKCIgKyBlbmFibGUgKyAiKSIpOwotICAgIGlmICghY2Fu
VXNlTm9pc2VTdXBwcmVzc29yKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJQbGF0Zm9ybSBO
UyBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICBzaG91bGRFbmFibGVOcyA9IGZhbHNlOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobnMgIT0gbnVsbCAmJiAoZW5hYmxlICE9
IHNob3VsZEVuYWJsZU5zKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlBsYXRmb3JtIE5TIHN0
YXRlIGNhbid0IGJlIG1vZGlmaWVkIHdoaWxlIHJlY29yZGluZyIpOwotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBzaG91bGRFbmFibGVOcyA9IGVuYWJsZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVuYWJsZShpbnQgYXVkaW9TZXNzaW9uKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgImVuYWJsZShhdWRpb1Nlc3Npb249IiArIGF1ZGlvU2Vzc2lvbiArICIp
Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhZWMgPT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShucyA9PSBu
dWxsKTsKLQotICAgIC8vIEFkZCBsb2dnaW5nIG9mIHN1cHBvcnRlZCBlZmZlY3RzIGJ1dCBmaWx0
ZXIgb3V0ICJWb0lQIGVmZmVjdHMiLCBpLmUuLAotICAgIC8vIEFFQywgQUVDIGFuZCBOUy4KLSAg
ICBmb3IgKERlc2NyaXB0b3IgZCA6IEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0cygpKSB7Ci0gICAg
ICBpZiAoZWZmZWN0VHlwZUlzVm9JUChkLnR5cGUpIHx8IERFQlVHKSB7Ci0gICAgICAgIExvZ2dp
bmcuZChUQUcsICJuYW1lOiAiICsgZC5uYW1lICsgIiwgIgotICAgICAgICAgICAgICAgICsgIm1v
ZGU6ICIgKyBkLmNvbm5lY3RNb2RlICsgIiwgIgotICAgICAgICAgICAgICAgICsgImltcGxlbWVu
dG9yOiAiICsgZC5pbXBsZW1lbnRvciArICIsICIKLSAgICAgICAgICAgICAgICArICJVVUlEOiAi
ICsgZC51dWlkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXNBY291c3RpY0VjaG9DYW5j
ZWxlclN1cHBvcnRlZCgpKSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gQWNvdXN0aWNFY2hvQ2FuY2Vs
ZXIgYW5kIGF0dGFjaCBpdCB0byB0aGUgQXVkaW9SZWNvcmQgb24KLSAgICAgIC8vIHRoZSBzcGVj
aWZpZWQgYXVkaW8gc2Vzc2lvbi4KLSAgICAgIGFlYyA9IEFjb3VzdGljRWNob0NhbmNlbGVyLmNy
ZWF0ZShhdWRpb1Nlc3Npb24pOwotICAgICAgaWYgKGFlYyAhPSBudWxsKSB7Ci0gICAgICAgIGJv
b2xlYW4gZW5hYmxlZCA9IGFlYy5nZXRFbmFibGVkKCk7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxl
ID0gc2hvdWxkRW5hYmxlQWVjICYmIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKCk7Ci0gICAg
ICAgIGlmIChhZWMuc2V0RW5hYmxlZChlbmFibGUpICE9IEF1ZGlvRWZmZWN0LlNVQ0NFU1MpIHsK
LSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHNldCB0aGUgQWNvdXN0aWNFY2hv
Q2FuY2VsZXIgc3RhdGUiKTsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiQWNv
dXN0aWNFY2hvQ2FuY2VsZXI6IHdhcyAiICsgKGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlzYWJs
ZWQiKQotICAgICAgICAgICAgICAgICsgIiwgZW5hYmxlOiAiICsgZW5hYmxlICsgIiwgaXMgbm93
OiAiCi0gICAgICAgICAgICAgICAgKyAoYWVjLmdldEVuYWJsZWQoKSA/ICJlbmFibGVkIiA6ICJk
aXNhYmxlZCIpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJGYWls
ZWQgdG8gY3JlYXRlIHRoZSBBY291c3RpY0VjaG9DYW5jZWxlciBpbnN0YW5jZSIpOwotICAgICAg
fQotICAgIH0KLQotICAgIGlmIChpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpKSB7Ci0gICAg
ICAvLyBDcmVhdGUgYW4gTm9pc2VTdXBwcmVzc29yIGFuZCBhdHRhY2ggaXQgdG8gdGhlIEF1ZGlv
UmVjb3JkIG9uIHRoZQotICAgICAgLy8gc3BlY2lmaWVkIGF1ZGlvIHNlc3Npb24uCi0gICAgICBu
cyA9IE5vaXNlU3VwcHJlc3Nvci5jcmVhdGUoYXVkaW9TZXNzaW9uKTsKLSAgICAgIGlmIChucyAh
PSBudWxsKSB7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlZCA9IG5zLmdldEVuYWJsZWQoKTsKLSAg
ICAgICAgYm9vbGVhbiBlbmFibGUgPSBzaG91bGRFbmFibGVOcyAmJiBjYW5Vc2VOb2lzZVN1cHBy
ZXNzb3IoKTsKLSAgICAgICAgaWYgKG5zLnNldEVuYWJsZWQoZW5hYmxlKSAhPSBBdWRpb0VmZmVj
dC5TVUNDRVNTKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBzZXQgdGhl
IE5vaXNlU3VwcHJlc3NvciBzdGF0ZSIpOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZChU
QUcsICJOb2lzZVN1cHByZXNzb3I6IHdhcyAiICsgKGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlz
YWJsZWQiKSArICIsIGVuYWJsZTogIgotICAgICAgICAgICAgICAgICsgZW5hYmxlICsgIiwgaXMg
bm93OiAiICsgKG5zLmdldEVuYWJsZWQoKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKLSAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gY3JlYXRlIHRo
ZSBOb2lzZVN1cHByZXNzb3IgaW5zdGFuY2UiKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAv
LyBSZWxlYXNlcyBhbGwgbmF0aXZlIGF1ZGlvIGVmZmVjdCByZXNvdXJjZXMuIEl0IGlzIGEgZ29v
ZCBwcmFjdGljZSB0bwotICAvLyByZWxlYXNlIHRoZSBlZmZlY3QgZW5naW5lIHdoZW4gbm90IGlu
IHVzZSBhcyBjb250cm9sIGNhbiBiZSByZXR1cm5lZAotICAvLyB0byBvdGhlciBhcHBsaWNhdGlv
bnMgb3IgdGhlIG5hdGl2ZSByZXNvdXJjZXMgcmVsZWFzZWQuCi0gIHB1YmxpYyB2b2lkIHJlbGVh
c2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInJlbGVhc2UiKTsKLSAgICBpZiAoYWVjICE9IG51
bGwpIHsKLSAgICAgIGFlYy5yZWxlYXNlKCk7Ci0gICAgICBhZWMgPSBudWxsOwotICAgIH0KLSAg
ICBpZiAobnMgIT0gbnVsbCkgewotICAgICAgbnMucmVsZWFzZSgpOwotICAgICAgbnMgPSBudWxs
OwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBmb3IgZWZmZWN0IHR5cGVzIGluIHx0
eXBlfCB0aGF0IGFyZSBvZiAiVm9JUCIgdHlwZXM6Ci0gIC8vIEFjb3VzdGljIEVjaG8gQ2FuY2Vs
ZXIgKEFFQykgb3IgQXV0b21hdGljIEdhaW4gQ29udHJvbCAoQUdDKSBvcgotICAvLyBOb2lzZSBT
dXBwcmVzc29yIChOUykuIE5vdGUgdGhhdCwgYW4gZXh0cmEgY2hlY2sgZm9yIHN1cHBvcnQgaXMg
bmVlZGVkCi0gIC8vIGluIGVhY2ggY29tcGFyaXNvbiBzaW5jZSBzb21lIGRldmljZXMgaW5jbHVk
ZXMgZWZmZWN0cyBpbiB0aGUKLSAgLy8gQXVkaW9FZmZlY3QuRGVzY3JpcHRvciBhcnJheSB0aGF0
IGFyZSBhY3R1YWxseSBub3QgYXZhaWxhYmxlIG9uIHRoZSBkZXZpY2UuCi0gIC8vIEFzIGFuIGV4
YW1wbGU6IFNhbXN1bmcgR2FsYXh5IFM2IGluY2x1ZGVzIGFuIEFHQyBpbiB0aGUgZGVzY3JpcHRv
ciBidXQKLSAgLy8gQXV0b21hdGljR2FpbkNvbnRyb2wuaXNBdmFpbGFibGUoKSByZXR1cm5zIGZh
bHNlLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRlIGJvb2xlYW4gZWZmZWN0VHlwZUlzVm9J
UChVVUlEIHR5cGUpIHsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlC
ZWFuTVIyT3JIaWdoZXIoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAoQXVk
aW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDLmVxdWFscyh0eXBlKSAmJiBpc0Fjb3VzdGljRWNob0Nh
bmNlbGVyU3VwcG9ydGVkKCkpCi0gICAgICAgIHx8IChBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9O
Uy5lcXVhbHModHlwZSkgJiYgaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSk7Ci0gIH0KLQot
ICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhbiBhc3Nl
cnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUcnVlKGJvb2xl
YW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBB
c3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUiKTsKLSAgICB9Ci0g
IH0KLQotICAvLyBSZXR1cm5zIHRoZSBjYWNoZWQgY29weSBvZiB0aGUgYXVkaW8gZWZmZWN0cyBh
cnJheSwgaWYgYXZhaWxhYmxlLCBvcgotICAvLyBxdWVyaWVzIHRoZSBvcGVyYXRpbmcgc3lzdGVt
IGZvciB0aGUgbGlzdCBvZiBlZmZlY3RzLgotICBwcml2YXRlIHN0YXRpYyBEZXNjcmlwdG9yW10g
Z2V0QXZhaWxhYmxlRWZmZWN0cygpIHsKLSAgICBpZiAoY2FjaGVkRWZmZWN0cyAhPSBudWxsKSB7
Ci0gICAgICByZXR1cm4gY2FjaGVkRWZmZWN0czsKLSAgICB9Ci0gICAgLy8gVGhlIGNhY2hpbmcg
aXMgYmVzdCBlZmZvcnQgb25seSAtIGlmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHNldmVy
YWwKLSAgICAvLyB0aHJlYWRzIGluIHBhcmFsbGVsLCB0aGV5IG1heSBlbmQgdXAgZG9pbmcgdGhl
IHVuZGVybHlpbmcgT1MgY2FsbAotICAgIC8vIG11bHRpcGxlIHRpbWVzLiBJdCdzIG5vcm1hbGx5
IG9ubHkgY2FsbGVkIG9uIG9uZSB0aHJlYWQgc28gdGhlcmUncyBubwotICAgIC8vIHJlYWwgbmVl
ZCB0byBvcHRpbWl6ZSBmb3IgdGhlIG11bHRpcGxlIHRocmVhZHMgY2FzZS4KLSAgICBjYWNoZWRF
ZmZlY3RzID0gQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCk7Ci0gICAgcmV0dXJuIGNhY2hlZEVm
ZmVjdHM7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZWZmZWN0IG9mIHRoZSBzcGVj
aWZpZWQgdHlwZSBpcyBhdmFpbGFibGUuIEZ1bmN0aW9uYWxseQotICAvLyBlcXVpdmFsZW50IHRv
IChOb2lzZVN1cHByZXNzb3J8QXV0b21hdGljR2FpbkNvbnRyb2x8Li4uKS5pc0F2YWlsYWJsZSgp
LCBidXQKLSAgLy8gZmFzdGVyIGFzIGl0IGF2b2lkcyB0aGUgZXhwZW5zaXZlIE9TIGNhbGwgdG8g
ZW51bWVyYXRlIGVmZmVjdHMuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNFZmZlY3RUeXBl
QXZhaWxhYmxlKFVVSUQgZWZmZWN0VHlwZSkgewotICAgIERlc2NyaXB0b3JbXSBlZmZlY3RzID0g
Z2V0QXZhaWxhYmxlRWZmZWN0cygpOwotICAgIGlmIChlZmZlY3RzID09IG51bGwpIHsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZm9yIChEZXNjcmlwdG9yIGQgOiBlZmZlY3RzKSB7
Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhlZmZlY3RUeXBlKSkgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9N
YW5hZ2VyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlci5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRj
QXVkaW9NYW5hZ2VyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDcgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1w
b3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJn
ZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5j
b250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Gb3Jt
YXQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5t
ZWRpYS5BdWRpb1JlY29yZDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvVHJhY2s7Ci1pbXBv
cnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1wb3J0IGphdmEudXRpbC5UaW1lcjsKLWltcG9ydCBq
YXZhLnV0aWwuVGltZXJUYXNrOwotCi0vLyBXZWJSdGNBdWRpb01hbmFnZXIgaGFuZGxlcyB0YXNr
cyB0aGF0IHVzZXMgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIuCi0vLyBBdCBjb25zdHJ1Y3Rp
b24sIHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCkgaXMgY2FsbGVkIGFuZCBpdCByZXRyaWV2ZXMKLS8v
IGZ1bmRhbWVudGFsIGF1ZGlvIHBhcmFtZXRlcnMgbGlrZSBuYXRpdmUgc2FtcGxlIHJhdGUgYW5k
IG51bWJlciBvZiBjaGFubmVscy4KLS8vIFRoZSByZXN1bHQgaXMgdGhlbiBwcm92aWRlZCB0byB0
aGUgY2FsbGVyIGJ5IG5hdGl2ZUNhY2hlQXVkaW9QYXJhbWV0ZXJzKCkuCi0vLyBJdCBpcyBhbHNv
IHBvc3NpYmxlIHRvIGNhbGwgaW5pdCgpIHRvIHNldCB1cCB0aGUgYXVkaW8gZW52aXJvbm1lbnQg
Zm9yIGJlc3QKLS8vIHBvc3NpYmxlICJWb0lQIHBlcmZvcm1hbmNlIi4gQWxsIHNldHRpbmdzIGRv
bmUgaW4gaW5pdCgpIGFyZSByZXZlcnRlZCBieQotLy8gZGlzcG9zZSgpLiBUaGlzIGNsYXNzIGNh
biBhbHNvIGJlIHVzZWQgd2l0aG91dCBjYWxsaW5nIGluaXQoKSBpZiB0aGUgdXNlcgotLy8gcHJl
ZmVycyB0byBzZXQgdXAgdGhlIGF1ZGlvIGVudmlyb25tZW50IHNlcGFyYXRlbHkuIEhvd2V2ZXIs
IGl0IGlzCi0vLyByZWNvbW1lbmRlZCB0byBhbHdheXMgdXNlIEF1ZGlvTWFuYWdlci5NT0RFX0lO
X0NPTU1VTklDQVRJT04uCi1wdWJsaWMgY2xhc3MgV2ViUnRjQXVkaW9NYW5hZ2VyIHsKLSAgcHJp
dmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9NYW5hZ2VyIjsKLQotICBwcml2YXRl
IHN0YXRpYyBib29sZWFuIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UgPSBmYWxzZTsK
LSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdl
SXNPdmVycmlkZGVuID0gZmFsc2U7Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBvdmVycmlk
ZSB0aGUgZGVhdWx0IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZGV2aWNlcwotICAvLyBzcGVjaWZpZWQg
aW4gV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9PUEVOX1NMX0VTX01PREVMUy4KLSAgLy8g
QWxsb3dzIGFuIGFwcCB0byB0YWtlIGNvbnRyb2wgb3ZlciB3aGljaCBkZXZpY2VzIHRvIGV4bHVk
ZSBmcm9tIHVzaW5nCi0gIC8vIHRoZSBPcGVuU0wgRVMgYXVkaW8gb3V0cHV0IHBhdGgKLSAgcHVi
bGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRCbGFja2xpc3REZXZpY2VGb3JPcGVuU0xF
U1VzYWdlKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNV
c2FnZUlzT3ZlcnJpZGRlbiA9IHRydWU7Ci0gICAgYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNV
c2FnZSA9IGVuYWJsZTsKLSAgfQotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0YSBmb3JtYXQgaXMg
UENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRlZCBi
eSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFNfUEVSX1NBTVBM
RSA9IDE2OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0ZSQU1FX1BFUl9C
VUZGRVIgPSAyNTY7Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN0ZXJlbyBzdXBwb3J0IGZv
ciBwbGF5b3V0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0hBTk5FTFMgPSAxOwotCi0g
IC8vIExpc3Qgb2YgcG9zc2libGUgYXVkaW8gbW9kZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IFN0cmluZ1tdIEFVRElPX01PREVTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICJNT0RFX05PUk1B
TCIsICJNT0RFX1JJTkdUT05FIiwgIk1PREVfSU5fQ0FMTCIsICJNT0RFX0lOX0NPTU1VTklDQVRJ
T04iLAotICB9OwotCi0gIC8vIFByaXZhdGUgdXRpbGl0eSBjbGFzcyB0aGF0IHBlcmlvZGljYWxs
eSBjaGVja3MgYW5kIGxvZ3MgdGhlIHZvbHVtZSBsZXZlbAotICAvLyBvZiB0aGUgYXVkaW8gc3Ry
ZWFtIHRoYXQgaXMgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhlIHZvbHVtZSBjb250cm9sLgot
ICAvLyBBIHRpbWVyIHRyaWdnZXJzIGxvZ3Mgb25jZSBldmVyeSAxMCBzZWNvbmRzIGFuZCB0aGUg
dGltZXIncyBhc3NvY2lhdGVkCi0gIC8vIHRocmVhZCBpcyBuYW1lZCAiV2ViUnRjVm9sdW1lTGV2
ZWxMb2dnZXJUaHJlYWQiLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWb2x1bWVMb2dnZXIgewot
ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSFJFQURfTkFNRSA9ICJXZWJSdGNWb2x1
bWVMZXZlbExvZ2dlclRocmVhZCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJTUVS
X1BFUklPRF9JTl9TRUNPTkRTID0gMTA7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEF1ZGlvTWFuYWdl
ciBhdWRpb01hbmFnZXI7Ci0gICAgcHJpdmF0ZSBUaW1lciB0aW1lcjsKLQotICAgIHB1YmxpYyBW
b2x1bWVMb2dnZXIoQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcikgewotICAgICAgdGhpcy5hdWRp
b01hbmFnZXIgPSBhdWRpb01hbmFnZXI7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RhcnQo
KSB7Ci0gICAgICB0aW1lciA9IG5ldyBUaW1lcihUSFJFQURfTkFNRSk7Ci0gICAgICB0aW1lci5z
Y2hlZHVsZShuZXcgTG9nVm9sdW1lVGFzayhhdWRpb01hbmFnZXIuZ2V0U3RyZWFtTWF4Vm9sdW1l
KEF1ZGlvTWFuYWdlci5TVFJFQU1fUklORyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYXVk
aW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NB
TEwpKSwKLSAgICAgICAgICAwLCBUSU1FUl9QRVJJT0RfSU5fU0VDT05EUyAqIDEwMDApOwotICAg
IH0KLQotICAgIHByaXZhdGUgY2xhc3MgTG9nVm9sdW1lVGFzayBleHRlbmRzIFRpbWVyVGFzayB7
Ci0gICAgICBwcml2YXRlIGZpbmFsIGludCBtYXhSaW5nVm9sdW1lOwotICAgICAgcHJpdmF0ZSBm
aW5hbCBpbnQgbWF4Vm9pY2VDYWxsVm9sdW1lOwotCi0gICAgICBMb2dWb2x1bWVUYXNrKGludCBt
YXhSaW5nVm9sdW1lLCBpbnQgbWF4Vm9pY2VDYWxsVm9sdW1lKSB7Ci0gICAgICAgIHRoaXMubWF4
UmluZ1ZvbHVtZSA9IG1heFJpbmdWb2x1bWU7Ci0gICAgICAgIHRoaXMubWF4Vm9pY2VDYWxsVm9s
dW1lID0gbWF4Vm9pY2VDYWxsVm9sdW1lOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICAgIGZpbmFsIGludCBtb2RlID0gYXVkaW9NYW5hZ2VyLmdldE1vZGUoKTsK
LSAgICAgICAgaWYgKG1vZGUgPT0gQXVkaW9NYW5hZ2VyLk1PREVfUklOR1RPTkUpIHsKLSAgICAg
ICAgICBMb2dnaW5nLmQoVEFHLCAiU1RSRUFNX1JJTkcgc3RyZWFtIHZvbHVtZTogIgotICAgICAg
ICAgICAgICAgICAgKyBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5T
VFJFQU1fUklORykgKyAiIChtYXg9IgotICAgICAgICAgICAgICAgICAgKyBtYXhSaW5nVm9sdW1l
ICsgIikiKTsKLSAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEF1ZGlvTWFuYWdlci5NT0RFX0lO
X0NPTU1VTklDQVRJT04pIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVk9JQ0VfQ0FMTCBz
dHJlYW0gdm9sdW1lOiAiCi0gICAgICAgICAgICAgICAgICArIGF1ZGlvTWFuYWdlci5nZXRTdHJl
YW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKSArICIgKG1heD0iCi0gICAg
ICAgICAgICAgICAgICArIG1heFZvaWNlQ2FsbFZvbHVtZSArICIpIik7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RvcCgpIHsKLSAgICAgIGlmICh0aW1l
ciAhPSBudWxsKSB7Ci0gICAgICAgIHRpbWVyLmNhbmNlbCgpOwotICAgICAgICB0aW1lciA9IG51
bGw7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZUF1
ZGlvTWFuYWdlcjsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0gIHByaXZhdGUg
ZmluYWwgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcjsKLQotICBwcml2YXRlIGJvb2xlYW4gaW5p
dGlhbGl6ZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBpbnQgbmF0aXZlU2FtcGxlUmF0ZTsKLSAgcHJp
dmF0ZSBpbnQgbmF0aXZlQ2hhbm5lbHM7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGhhcmR3YXJlQUVD
OwotICBwcml2YXRlIGJvb2xlYW4gaGFyZHdhcmVBR0M7Ci0gIHByaXZhdGUgYm9vbGVhbiBoYXJk
d2FyZU5TOwotICBwcml2YXRlIGJvb2xlYW4gbG93TGF0ZW5jeU91dHB1dDsKLSAgcHJpdmF0ZSBi
b29sZWFuIGxvd0xhdGVuY3lJbnB1dDsKLSAgcHJpdmF0ZSBib29sZWFuIHByb0F1ZGlvOwotICBw
cml2YXRlIGludCBzYW1wbGVSYXRlOwotICBwcml2YXRlIGludCBjaGFubmVsczsKLSAgcHJpdmF0
ZSBpbnQgb3V0cHV0QnVmZmVyU2l6ZTsKLSAgcHJpdmF0ZSBpbnQgaW5wdXRCdWZmZXJTaXplOwot
Ci0gIHByaXZhdGUgZmluYWwgVm9sdW1lTG9nZ2VyIHZvbHVtZUxvZ2dlcjsKLQotICBXZWJSdGNB
dWRpb01hbmFnZXIoQ29udGV4dCBjb250ZXh0LCBsb25nIG5hdGl2ZUF1ZGlvTWFuYWdlcikgewot
ICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5m
bygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMubmF0aXZlQXVkaW9N
YW5hZ2VyID0gbmF0aXZlQXVkaW9NYW5hZ2VyOwotICAgIGF1ZGlvTWFuYWdlciA9IChBdWRpb01h
bmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpOwot
ICAgIGlmIChERUJVRykgewotICAgICAgV2ViUnRjQXVkaW9VdGlscy5sb2dEZXZpY2VJbmZvKFRB
Ryk7Ci0gICAgfQotICAgIHZvbHVtZUxvZ2dlciA9IG5ldyBWb2x1bWVMb2dnZXIoYXVkaW9NYW5h
Z2VyKTsKLSAgICBzdG9yZUF1ZGlvUGFyYW1ldGVycygpOwotICAgIG5hdGl2ZUNhY2hlQXVkaW9Q
YXJhbWV0ZXJzKHNhbXBsZVJhdGUsIGNoYW5uZWxzLCBoYXJkd2FyZUFFQywgaGFyZHdhcmVBR0Ms
IGhhcmR3YXJlTlMsCi0gICAgICAgIGxvd0xhdGVuY3lPdXRwdXQsIGxvd0xhdGVuY3lJbnB1dCwg
cHJvQXVkaW8sIG91dHB1dEJ1ZmZlclNpemUsIGlucHV0QnVmZmVyU2l6ZSwKLSAgICAgICAgbmF0
aXZlQXVkaW9NYW5hZ2VyKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0KCkgewotICAg
IExvZ2dpbmcuZChUQUcsICJpbml0IiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5mbygp
KTsKLSAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBMb2dnaW5nLmQoVEFHLCAiYXVkaW8gbW9kZSBpczogIiArIEFVRElPX01PREVTW2F1ZGlvTWFu
YWdlci5nZXRNb2RlKCldKTsKLSAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgdm9sdW1lTG9n
Z2VyLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgZGlz
cG9zZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSIgKyBXZWJSdGNBdWRpb1V0aWxz
LmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICB2b2x1bWVMb2dnZXIuc3RvcCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29s
ZWFuIGlzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCkgewotICAgIHJldHVybiAoYXVkaW9NYW5h
Z2VyLmdldE1vZGUoKSA9PSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OKTsKLSAg
fQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0RldmljZUJsYWNrbGlzdGVkRm9yT3BlblNMRVNVc2Fn
ZSgpIHsKLSAgICBib29sZWFuIGJsYWNrbGlzdGVkID0gYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNM
RVNVc2FnZUlzT3ZlcnJpZGRlbgotICAgICAgICA/IGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVT
VXNhZ2UKLSAgICAgICAgOiBXZWJSdGNBdWRpb1V0aWxzLmRldmljZUlzQmxhY2tsaXN0ZWRGb3JP
cGVuU0xFU1VzYWdlKCk7Ci0gICAgaWYgKGJsYWNrbGlzdGVkKSB7Ci0gICAgICBMb2dnaW5nLmUo
VEFHLCBCdWlsZC5NT0RFTCArICIgaXMgYmxhY2tsaXN0ZWQgZm9yIE9wZW5TTCBFUyB1c2FnZSEi
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGJsYWNrbGlzdGVkOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCkgewotICAgIC8vIE9ubHkgbW9ubyBpcyBzdXBwb3J0ZWQg
Y3VycmVudGx5IChpbiBib3RoIGRpcmVjdGlvbnMpLgotICAgIC8vIFRPRE8oaGVucmlrYSk6IGFk
ZCBzdXBwb3J0IGZvciBzdGVyZW8gcGxheW91dC4KLSAgICBjaGFubmVscyA9IENIQU5ORUxTOwot
ICAgIHNhbXBsZVJhdGUgPSBnZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKCk7Ci0gICAgaGFyZHdh
cmVBRUMgPSBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCk7Ci0gICAgLy8gVE9ETyho
ZW5yaWthKTogdXNlIG9mIGhhcmR3YXJlIEFHQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBDdXJy
ZW50bHkKLSAgICAvLyBoYXJkY29kZWQgdG8gZmFsc2UuIFRvIGJlIHJlbW92ZWQuCi0gICAgaGFy
ZHdhcmVBR0MgPSBmYWxzZTsKLSAgICBoYXJkd2FyZU5TID0gaXNOb2lzZVN1cHByZXNzb3JTdXBw
b3J0ZWQoKTsKLSAgICBsb3dMYXRlbmN5T3V0cHV0ID0gaXNMb3dMYXRlbmN5T3V0cHV0U3VwcG9y
dGVkKCk7Ci0gICAgbG93TGF0ZW5jeUlucHV0ID0gaXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0ZWQo
KTsKLSAgICBwcm9BdWRpbyA9IGlzUHJvQXVkaW9TdXBwb3J0ZWQoKTsKLSAgICBvdXRwdXRCdWZm
ZXJTaXplID0gbG93TGF0ZW5jeU91dHB1dCA/IGdldExvd0xhdGVuY3lPdXRwdXRGcmFtZXNQZXJC
dWZmZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0TWlu
T3V0cHV0RnJhbWVTaXplKHNhbXBsZVJhdGUsIGNoYW5uZWxzKTsKLSAgICBpbnB1dEJ1ZmZlclNp
emUgPSBsb3dMYXRlbmN5SW5wdXQgPyBnZXRMb3dMYXRlbmN5SW5wdXRGcmFtZXNQZXJCdWZmZXIo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldE1pbklucHV0RnJh
bWVTaXplKHNhbXBsZVJhdGUsIGNoYW5uZWxzKTsKLSAgfQotCi0gIC8vIEdldHMgdGhlIGN1cnJl
bnQgZWFycGllY2Ugc3RhdGUuCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNFYXJwaWVjZSgpIHsKLSAg
ICByZXR1cm4gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFj
a2FnZU1hbmFnZXIuRkVBVFVSRV9URUxFUEhPTlkpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIGxvdy1sYXRlbmN5IGF1ZGlvIG91dHB1dCBpcyBzdXBwb3J0ZWQuCi0gIHByaXZhdGUgYm9v
bGVhbiBpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIGlzT3BlblNM
RVNTdXBwb3J0ZWQoKQotICAgICAgICAmJiBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFz
U3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX0FVRElPX0xPV19MQVRFTkNZKTsK
LSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBsb3ctbGF0ZW5jeSBhdWRpbyBpbnB1dCBpcyBz
dXBwb3J0ZWQuCi0gIC8vIFRPRE8oaGVucmlrYSk6IHJlbW92ZSB0aGUgaGFyZGNvZGVkIGZhbHNl
IHJldHVybiB2YWx1ZSB3aGVuIE9wZW5TTCBFUwotICAvLyBpbnB1dCBwZXJmb3JtYW5jZSBoYXMg
YmVlbiBldmFsdWF0ZWQgYW5kIHRlc3RlZCBtb3JlLgotICBwdWJsaWMgYm9vbGVhbiBpc0xvd0xh
dGVuY3lJbnB1dFN1cHBvcnRlZCgpIHsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBpbnZlc3RpZ2F0
ZSBpZiBzb21lIHNvcnQgb2YgZGV2aWNlIGxpc3QgaXMgbmVlZGVkIGhlcmUKLSAgICAvLyBhcyB3
ZWxsLiBUaGUgTkRLIGRvYyBzdGF0ZXMgdGhhdDogIkFzIG9mIEFQSSBsZXZlbCAyMSwgbG93ZXIg
bGF0ZW5jeQotICAgIC8vIGF1ZGlvIGlucHV0IGlzIHN1cHBvcnRlZCBvbiBzZWxlY3QgZGV2aWNl
cy4gVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcwotICAgIC8vIGZlYXR1cmUsIGZpcnN0IGNvbmZp
cm0gdGhhdCBsb3dlciBsYXRlbmN5IG91dHB1dCBpcyBhdmFpbGFibGUiLgotICAgIHJldHVybiBX
ZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkxvbGxpcG9wT3JIaWdoZXIoKSAmJiBpc0xvd0xhdGVu
Y3lPdXRwdXRTdXBwb3J0ZWQoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2
aWNlIGhhcyBwcm9mZXNzaW9uYWwgYXVkaW8gbGV2ZWwgb2YgZnVuY3Rpb25hbGl0eQotICAvLyBh
bmQgdGhlcmVmb3JlIHN1cHBvcnRzIHRoZSBsb3dlc3QgcG9zc2libGUgcm91bmQtdHJpcCBsYXRl
bmN5LgotICBwcml2YXRlIGJvb2xlYW4gaXNQcm9BdWRpb1N1cHBvcnRlZCgpIHsKLSAgICByZXR1
cm4gV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkKLSAgICAg
ICAgJiYgY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFja2Fn
ZU1hbmFnZXIuRkVBVFVSRV9BVURJT19QUk8pOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmF0
aXZlIG91dHB1dCBzYW1wbGUgcmF0ZSBmb3IgdGhpcyBkZXZpY2UncyBvdXRwdXQgc3RyZWFtLgot
ICBwcml2YXRlIGludCBnZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKCkgewotICAgIC8vIE92ZXJy
aWRlIHRoaXMgaWYgd2UncmUgcnVubmluZyBvbiBhbiBvbGQgZW11bGF0b3IgaW1hZ2Ugd2hpY2gg
b25seQotICAgIC8vIHN1cHBvcnRzIDgga0h6IGFuZCBkb2Vzbid0IHN1cHBvcnQgUFJPUEVSVFlf
T1VUUFVUX1NBTVBMRV9SQVRFLgotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkVt
dWxhdG9yKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJSdW5uaW5nIGVtdWxhdG9yLCBvdmVy
cmlkaW5nIHNhbXBsZSByYXRlIHRvIDgga0h6LiIpOwotICAgICAgcmV0dXJuIDgwMDA7Ci0gICAg
fQotICAgIC8vIERlZmF1bHQgY2FuIGJlIG92ZXJyaWRlbiBieSBXZWJSdGNBdWRpb1V0aWxzLnNl
dERlZmF1bHRTYW1wbGVSYXRlSHooKS4KLSAgICAvLyBJZiBzbywgdXNlIHRoYXQgdmFsdWUgYW5k
IHJldHVybiBoZXJlLgotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLmlzRGVmYXVsdFNhbXBsZVJh
dGVPdmVycmlkZGVuKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJEZWZhdWx0IHNhbXBsZSBy
YXRlIGlzIG92ZXJyaWRlbiB0byAiCi0gICAgICAgICAgICAgICsgV2ViUnRjQXVkaW9VdGlscy5n
ZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgKyAiIEh6Iik7Ci0gICAgICByZXR1cm4gV2ViUnRjQXVk
aW9VdGlscy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCk7Ci0gICAgfQotICAgIC8vIE5vIG92ZXJy
aWRlcyBhdmFpbGFibGUuIERlbGl2ZXIgYmVzdCBwb3NzaWJsZSBlc3RpbWF0ZSBiYXNlZCBvbiBk
ZWZhdWx0Ci0gICAgLy8gQW5kcm9pZCBBdWRpb01hbmFnZXIgQVBJcy4KLSAgICBmaW5hbCBpbnQg
c2FtcGxlUmF0ZUh6OwotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5QmVh
bk1SMU9ySGlnaGVyKCkpIHsKLSAgICAgIHNhbXBsZVJhdGVIeiA9IGdldFNhbXBsZVJhdGVPbkpl
bGx5QmVhbk1SMTBPckhpZ2hlcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzYW1wbGVSYXRlSHog
PSBXZWJSdGNBdWRpb1V0aWxzLmdldERlZmF1bHRTYW1wbGVSYXRlSHooKTsKLSAgICB9Ci0gICAg
TG9nZ2luZy5kKFRBRywgIlNhbXBsZSByYXRlIGlzIHNldCB0byAiICsgc2FtcGxlUmF0ZUh6ICsg
IiBIeiIpOwotICAgIHJldHVybiBzYW1wbGVSYXRlSHo7Ci0gIH0KLQotICBAVGFyZ2V0QXBpKDE3
KQotICBwcml2YXRlIGludCBnZXRTYW1wbGVSYXRlT25KZWxseUJlYW5NUjEwT3JIaWdoZXIoKSB7
Ci0gICAgU3RyaW5nIHNhbXBsZVJhdGVTdHJpbmcgPSBhdWRpb01hbmFnZXIuZ2V0UHJvcGVydHko
QXVkaW9NYW5hZ2VyLlBST1BFUlRZX09VVFBVVF9TQU1QTEVfUkFURSk7Ci0gICAgcmV0dXJuIChz
YW1wbGVSYXRlU3RyaW5nID09IG51bGwpID8gV2ViUnRjQXVkaW9VdGlscy5nZXREZWZhdWx0U2Ft
cGxlUmF0ZUh6KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBJbnRl
Z2VyLnBhcnNlSW50KHNhbXBsZVJhdGVTdHJpbmcpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUg
bmF0aXZlIG91dHB1dCBidWZmZXIgc2l6ZSBmb3IgbG93LWxhdGVuY3kgb3V0cHV0IHN0cmVhbXMu
Ci0gIEBUYXJnZXRBcGkoMTcpCi0gIHByaXZhdGUgaW50IGdldExvd0xhdGVuY3lPdXRwdXRGcmFt
ZXNQZXJCdWZmZXIoKSB7Ci0gICAgYXNzZXJ0VHJ1ZShpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0
ZWQoKSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5QmVhbk1SMU9y
SGlnaGVyKCkpIHsKLSAgICAgIHJldHVybiBERUZBVUxUX0ZSQU1FX1BFUl9CVUZGRVI7Ci0gICAg
fQotICAgIFN0cmluZyBmcmFtZXNQZXJCdWZmZXIgPQotICAgICAgICBhdWRpb01hbmFnZXIuZ2V0
UHJvcGVydHkoQXVkaW9NYW5hZ2VyLlBST1BFUlRZX09VVFBVVF9GUkFNRVNfUEVSX0JVRkZFUik7
Ci0gICAgcmV0dXJuIGZyYW1lc1BlckJ1ZmZlciA9PSBudWxsID8gREVGQVVMVF9GUkFNRV9QRVJf
QlVGRkVSIDogSW50ZWdlci5wYXJzZUludChmcmFtZXNQZXJCdWZmZXIpOwotICB9Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYW4gYXVkaW8gZWZmZWN0IChBRUMg
b3IgTlMpLgotICAvLyBGb3VyIGNvbmRpdGlvbnMgbXVzdCBiZSBmdWxmaWxsZWQgaWYgZnVuY3Rp
b25zIGFyZSB0byByZXR1cm4gdHJ1ZToKLSAgLy8gMSkgdGhlIHBsYXRmb3JtIG11c3Qgc3VwcG9y
dCB0aGUgYnVpbHQtaW4gKEhXKSBlZmZlY3QsCi0gIC8vIDIpIGV4cGxpY2l0IHVzZSAob3ZlcnJp
ZGUpIG9mIGEgV2ViUlRDIGJhc2VkIHZlcnNpb24gbXVzdCBub3QgYmUgc2V0LAotICAvLyAzKSB0
aGUgZGV2aWNlIG11c3Qgbm90IGJlIGJsYWNrbGlzdGVkIGZvciB1c2Ugb2YgdGhlIGVmZmVjdCwg
YW5kCi0gIC8vIDQpIHRoZSBVVUlEIG9mIHRoZSBlZmZlY3QgbXVzdCBiZSBhcHByb3ZlZCAoc29t
ZSBVVUlEcyBjYW4gYmUgZXhjbHVkZWQpLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNv
dXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvRWZm
ZWN0cy5jYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpOwotICB9Ci0gIHByaXZhdGUgc3RhdGlj
IGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0
Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VOb2lzZVN1cHByZXNzb3IoKTsKLSAgfQotCi0gIC8vIFJldHVy
bnMgdGhlIG1pbmltdW0gb3V0cHV0IGJ1ZmZlciBzaXplIGZvciBKYXZhIGJhc2VkIGF1ZGlvIChB
dWRpb1RyYWNrKS4KLSAgLy8gVGhpcyBzaXplIGNhbiBhbHNvIGJlIHVzZWQgZm9yIE9wZW5TTCBF
UyBpbXBsZW1lbnRhdGlvbnMgb24gZGV2aWNlcyB0aGF0Ci0gIC8vIGxhY2tzIHN1cHBvcnQgb2Yg
bG93LWxhdGVuY3kgb3V0cHV0LgotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TWluT3V0cHV0RnJh
bWVTaXplKGludCBzYW1wbGVSYXRlSW5IeiwgaW50IG51bUNoYW5uZWxzKSB7Ci0gICAgZmluYWwg
aW50IGJ5dGVzUGVyRnJhbWUgPSBudW1DaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsK
LSAgICBmaW5hbCBpbnQgY2hhbm5lbENvbmZpZzsKLSAgICBpZiAobnVtQ2hhbm5lbHMgPT0gMSkg
ewotICAgICAgY2hhbm5lbENvbmZpZyA9IEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUX01PTk87Ci0g
ICAgfSBlbHNlIGlmIChudW1DaGFubmVscyA9PSAyKSB7Ci0gICAgICBjaGFubmVsQ29uZmlnID0g
QXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfU1RFUkVPOwotICAgIH0gZWxzZSB7Ci0gICAgICByZXR1
cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiBBdWRpb1RyYWNrLmdldE1pbkJ1ZmZlclNpemUoCi0g
ICAgICAgICAgICAgICBzYW1wbGVSYXRlSW5IeiwgY2hhbm5lbENvbmZpZywgQXVkaW9Gb3JtYXQu
RU5DT0RJTkdfUENNXzE2QklUKQotICAgICAgICAvIGJ5dGVzUGVyRnJhbWU7Ci0gIH0KLQotICAv
LyBSZXR1cm5zIHRoZSBuYXRpdmUgaW5wdXQgYnVmZmVyIHNpemUgZm9yIGlucHV0IHN0cmVhbXMu
Ci0gIHByaXZhdGUgaW50IGdldExvd0xhdGVuY3lJbnB1dEZyYW1lc1BlckJ1ZmZlcigpIHsKLSAg
ICBhc3NlcnRUcnVlKGlzTG93TGF0ZW5jeUlucHV0U3VwcG9ydGVkKCkpOwotICAgIHJldHVybiBn
ZXRMb3dMYXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCk7Ci0gIH0KLQotICAvLyBSZXR1cm5z
IHRoZSBtaW5pbXVtIGlucHV0IGJ1ZmZlciBzaXplIGZvciBKYXZhIGJhc2VkIGF1ZGlvIChBdWRp
b1JlY29yZCkuCi0gIC8vIFRoaXMgc2l6ZSBjYW4gY2Fsc28gYmUgdXNlZCBmb3IgT3BlblNMIEVT
IGltcGxlbWVudGF0aW9ucyBvbiBkZXZpY2VzIHRoYXQKLSAgLy8gbGFja3Mgc3VwcG9ydCBvZiBs
b3ctbGF0ZW5jeSBpbnB1dC4KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldE1pbklucHV0RnJhbWVT
aXplKGludCBzYW1wbGVSYXRlSW5IeiwgaW50IG51bUNoYW5uZWxzKSB7Ci0gICAgZmluYWwgaW50
IGJ5dGVzUGVyRnJhbWUgPSBudW1DaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsKLSAg
ICBhc3NlcnRUcnVlKG51bUNoYW5uZWxzID09IENIQU5ORUxTKTsKLSAgICByZXR1cm4gQXVkaW9S
ZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgICAgICAgIHNhbXBsZVJhdGVJbkh6LCBB
dWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8sIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJ
VCkKLSAgICAgICAgLyBieXRlc1BlckZyYW1lOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlm
IE9wZW5TTCBFUyBhdWRpbyBpcyBzdXBwb3J0ZWQuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4g
aXNPcGVuU0xFU1N1cHBvcnRlZCgpIHsKLSAgICAvLyBDaGVjayBmb3IgQVBJIGxldmVsIDkgb3Ig
aGlnaGVyLCB0byBjb25maXJtIHVzZSBvZiBPcGVuU0wgRVMuCi0gICAgcmV0dXJuIFdlYlJ0Y0F1
ZGlvVXRpbHMucnVubmluZ09uR2luZ2VyQnJlYWRPckhpZ2hlcigpOwotICB9Ci0KLSAgLy8gSGVs
cGVyIG1ldGhvZCB3aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uICB3aGVuIGFuIGFzc2VydGlvbiBo
YXMgZmFpbGVkLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25k
aXRpb24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlv
bkVycm9yKCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0g
IHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRlcnMoaW50IHNhbXBs
ZVJhdGUsIGludCBjaGFubmVscywgYm9vbGVhbiBoYXJkd2FyZUFFQywKLSAgICAgIGJvb2xlYW4g
aGFyZHdhcmVBR0MsIGJvb2xlYW4gaGFyZHdhcmVOUywgYm9vbGVhbiBsb3dMYXRlbmN5T3V0cHV0
LCBib29sZWFuIGxvd0xhdGVuY3lJbnB1dCwKLSAgICAgIGJvb2xlYW4gcHJvQXVkaW8sIGludCBv
dXRwdXRCdWZmZXJTaXplLCBpbnQgaW5wdXRCdWZmZXJTaXplLCBsb25nIG5hdGl2ZUF1ZGlvTWFu
YWdlcik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vl
bmdpbmUvV2ViUnRjQXVkaW9SZWNvcmQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9SZWNvcmQuamF2YQko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3Zv
aWNlZW5naW5lL1dlYlJ0Y0F1ZGlvUmVjb3JkLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyODYg
KzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1
dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0
cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2Fu
IGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJv
amVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2lj
ZWVuZ2luZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLWltcG9ydCBvcmcud2VicnRj
LlRocmVhZFV0aWxzOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQg
YW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvUmVj
b3JkOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFSZWNvcmRlci5BdWRpb1NvdXJjZTsKLWlt
cG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci0KLWltcG9ydCBqYXZhLmxhbmcuU3lzdGVtOwotaW1w
b3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGlt
ZVVuaXQ7Ci0KLXB1YmxpYyBjbGFzcyBXZWJSdGNBdWRpb1JlY29yZCB7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvUmVjb3JkIjsKLQotICAvLyBEZWZhdWx0IGF1ZGlv
IGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4KLSAgLy8gR3VhcmFudGVlZCB0
byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICAvLyBSZXF1ZXN0ZWQgc2l6ZSBvZiBlYWNoIHJl
Y29yZGVkIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY2xpZW50LgotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBpbnQgQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVMgPSAxMDsKLQotICAvLyBBdmVyYWdlIG51
bWJlciBvZiBjYWxsYmFja3MgcGVyIHNlY29uZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50
IEJVRkZFUlNfUEVSX1NFQ09ORCA9IDEwMDAgLyBDQUxMQkFDS19CVUZGRVJfU0laRV9NUzsKLQot
ICAvLyBXZSBhc2sgZm9yIGEgbmF0aXZlIGJ1ZmZlciBzaXplIG9mIEJVRkZFUl9TSVpFX0ZBQ1RP
UiAqIChtaW5pbXVtIHJlcXVpcmVkCi0gIC8vIGJ1ZmZlciBzaXplKS4gVGhlIGV4dHJhIHNwYWNl
IGlzIGFsbG9jYXRlZCB0byBndWFyZCBhZ2FpbnN0IGdsaXRjaGVzIHVuZGVyCi0gIC8vIGhpZ2gg
bG9hZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVRkZFUl9TSVpFX0ZBQ1RPUiA9IDI7
Ci0KLSAgLy8gVGhlIEF1ZGlvUmVjb3JkSmF2YVRocmVhZCBpcyBhbGxvd2VkIHRvIHdhaXQgZm9y
IHN1Y2Nlc3NmdWwgY2FsbCB0byBqb2luKCkKLSAgLy8gYnV0IHRoZSB3YWl0IHRpbWVzIG91dCBh
ZnRoZXIgdGhpcyBhbW91bnQgb2YgdGltZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBB
VURJT19SRUNPUkRfVEhSRUFEX0pPSU5fVElNRU9VVF9NUyA9IDIwMDA7Ci0KLSAgcHJpdmF0ZSBm
aW5hbCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkOwotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29u
dGV4dDsKLQotICBwcml2YXRlIFdlYlJ0Y0F1ZGlvRWZmZWN0cyBlZmZlY3RzID0gbnVsbDsKLQot
ICBwcml2YXRlIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlcjsKLQotICBwcml2YXRlIEF1ZGlvUmVjb3Jk
IGF1ZGlvUmVjb3JkID0gbnVsbDsKLSAgcHJpdmF0ZSBBdWRpb1JlY29yZFRocmVhZCBhdWRpb1Ro
cmVhZCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBtaWNyb3Bo
b25lTXV0ZSA9IGZhbHNlOwotICBwcml2YXRlIGJ5dGVbXSBlbXB0eUJ5dGVzOwotCi0gIC8qKgot
ICAgKiBBdWRpbyB0aHJlYWQgd2hpY2gga2VlcHMgY2FsbGluZyBCeXRlQnVmZmVyLnJlYWQoKSB3
YWl0aW5nIGZvciBhdWRpbwotICAgKiB0byBiZSByZWNvcmRlZC4gRmVlZHMgcmVjb3JkZWQgZGF0
YSB0byB0aGUgbmF0aXZlIGNvdW50ZXJwYXJ0IGFzIGEKLSAgICogcGVyaW9kaWMgc2VxdWVuY2Ug
b2YgY2FsbGJhY2tzIHVzaW5nIERhdGFJc1JlY29yZGVkKCkuCi0gICAqIFRoaXMgdGhyZWFkIHVz
ZXMgYSBQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8gcHJpb3JpdHkuCi0gICAq
LwotICBwcml2YXRlIGNsYXNzIEF1ZGlvUmVjb3JkVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKLSAg
ICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4ga2VlcEFsaXZlID0gdHJ1ZTsKLQotICAgIHB1Ymxp
YyBBdWRpb1JlY29yZFRocmVhZChTdHJpbmcgbmFtZSkgewotICAgICAgc3VwZXIobmFtZSk7Ci0g
ICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgUHJv
Y2Vzcy5zZXRUaHJlYWRQcmlvcml0eShQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVE
SU8pOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvUmVjb3JkVGhyZWFkIiArIFdlYlJ0Y0F1
ZGlvVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICAgIGFzc2VydFRydWUoYXVkaW9SZWNvcmQu
Z2V0UmVjb3JkaW5nU3RhdGUoKSA9PSBBdWRpb1JlY29yZC5SRUNPUkRTVEFURV9SRUNPUkRJTkcp
OwotCi0gICAgICBsb25nIGxhc3RUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICB3aGls
ZSAoa2VlcEFsaXZlKSB7Ci0gICAgICAgIGludCBieXRlc1JlYWQgPSBhdWRpb1JlY29yZC5yZWFk
KGJ5dGVCdWZmZXIsIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgICAgIGlmIChieXRlc1Jl
YWQgPT0gYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgaWYgKG1pY3JvcGhvbmVN
dXRlKSB7Ci0gICAgICAgICAgICBieXRlQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICBieXRl
QnVmZmVyLnB1dChlbXB0eUJ5dGVzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbmF0aXZlRGF0
YUlzUmVjb3JkZWQoYnl0ZXNSZWFkLCBuYXRpdmVBdWRpb1JlY29yZCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLnJlYWQgZmFpbGVkOiAi
ICsgYnl0ZXNSZWFkKTsKLSAgICAgICAgICBpZiAoYnl0ZXNSZWFkID09IEF1ZGlvUmVjb3JkLkVS
Uk9SX0lOVkFMSURfT1BFUkFUSU9OKSB7Ci0gICAgICAgICAgICBrZWVwQWxpdmUgPSBmYWxzZTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAgICAg
bG9uZyBub3dUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgbG9uZyBkdXJhdGlv
bkluTXMgPSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcygobm93VGltZSAtIGxhc3RUaW1l
KSk7Ci0gICAgICAgICAgbGFzdFRpbWUgPSBub3dUaW1lOwotICAgICAgICAgIExvZ2dpbmcuZChU
QUcsICJieXRlc1JlYWRbIiArIGR1cmF0aW9uSW5NcyArICJdICIgKyBieXRlc1JlYWQpOwotICAg
ICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmIChhdWRpb1JlY29yZCAh
PSBudWxsKSB7Ci0gICAgICAgICAgYXVkaW9SZWNvcmQuc3RvcCgpOwotICAgICAgICB9Ci0gICAg
ICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUo
VEFHLCAiQXVkaW9SZWNvcmQuc3RvcCBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gU3RvcHMgdGhlIGlubmVyIHRocmVhZCBsb29wIGFuZCBhbHNv
IGNhbGxzIEF1ZGlvUmVjb3JkLnN0b3AoKS4KLSAgICAvLyBEb2VzIG5vdCBibG9jayB0aGUgY2Fs
bGluZyB0aHJlYWQuCi0gICAgcHVibGljIHZvaWQgc3RvcFRocmVhZCgpIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICJzdG9wVGhyZWFkIik7Ci0gICAgICBrZWVwQWxpdmUgPSBmYWxzZTsKLSAgICB9
Ci0gIH0KLQotICBXZWJSdGNBdWRpb1JlY29yZChDb250ZXh0IGNvbnRleHQsIGxvbmcgbmF0aXZl
QXVkaW9SZWNvcmQpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0
aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICB0
aGlzLm5hdGl2ZUF1ZGlvUmVjb3JkID0gbmF0aXZlQXVkaW9SZWNvcmQ7Ci0gICAgaWYgKERFQlVH
KSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0RldmljZUluZm8oVEFHKTsKLSAgICB9Ci0g
ICAgZWZmZWN0cyA9IFdlYlJ0Y0F1ZGlvRWZmZWN0cy5jcmVhdGUoKTsKLSAgfQotCi0gIHByaXZh
dGUgYm9vbGVhbiBlbmFibGVCdWlsdEluQUVDKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgImVuYWJsZUJ1aWx0SW5BRUMoIiArIGVuYWJsZSArICcpJyk7Ci0gICAgaWYgKGVm
ZmVjdHMgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkJ1aWx0LWluIEFFQyBpcyBu
b3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGVmZmVjdHMuc2V0QUVDKGVuYWJsZSk7Ci0gIH0KLQotICBwcml2YXRl
IGJvb2xlYW4gZW5hYmxlQnVpbHRJbk5TKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgImVuYWJsZUJ1aWx0SW5OUygiICsgZW5hYmxlICsgJyknKTsKLSAgICBpZiAoZWZmZWN0
cyA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQnVpbHQtaW4gTlMgaXMgbm90IHN1
cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiBlZmZlY3RzLnNldE5TKGVuYWJsZSk7Ci0gIH0KLQotICBwcml2YXRlIGludCBp
bml0UmVjb3JkaW5nKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAiaW5pdFJlY29yZGluZyhzYW1wbGVSYXRlPSIgKyBzYW1wbGVSYXRlICsgIiwgY2hh
bm5lbHM9IiArIGNoYW5uZWxzICsgIikiKTsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMuaGFz
UGVybWlzc2lvbihjb250ZXh0LCBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUkVDT1JEX0FV
RElPKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlJFQ09SRF9BVURJTyBwZXJtaXNzaW9uIGlz
IG1pc3NpbmciKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvUmVjb3Jk
ICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJJbml0UmVjb3JkaW5nKCkgY2FsbGVk
IHR3aWNlIHdpdGhvdXQgU3RvcFJlY29yZGluZygpIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAg
fQotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gY2hhbm5lbHMgKiAoQklUU19QRVJfU0FN
UExFIC8gOCk7Ci0gICAgZmluYWwgaW50IGZyYW1lc1BlckJ1ZmZlciA9IHNhbXBsZVJhdGUgLyBC
VUZGRVJTX1BFUl9TRUNPTkQ7Ci0gICAgYnl0ZUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2NhdGVE
aXJlY3QoYnl0ZXNQZXJGcmFtZSAqIGZyYW1lc1BlckJ1ZmZlcik7Ci0gICAgTG9nZ2luZy5kKFRB
RywgImJ5dGVCdWZmZXIuY2FwYWNpdHk6ICIgKyBieXRlQnVmZmVyLmNhcGFjaXR5KCkpOwotICAg
IGVtcHR5Qnl0ZXMgPSBuZXcgYnl0ZVtieXRlQnVmZmVyLmNhcGFjaXR5KCldOwotICAgIC8vIFJh
dGhlciB0aGFuIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXIgd2l0aCBldmVyeSBjYWxsYmFjayAocmVx
dWlyaW5nCi0gICAgLy8gdGhlIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBHZXREaXJlY3RCdWZmZXJB
ZGRyZXNzKSB3ZSBzaW1wbHkgaGF2ZSB0aGUKLSAgICAvLyB0aGUgbmF0aXZlIGNsYXNzIGNhY2hl
IHRoZSBhZGRyZXNzIHRvIHRoZSBtZW1vcnkgb25jZS4KLSAgICBuYXRpdmVDYWNoZURpcmVjdEJ1
ZmZlckFkZHJlc3MoYnl0ZUJ1ZmZlciwgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gICAgLy8gR2V0
IHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVpcmVkIGZvciB0aGUgc3VjY2Vzc2Z1bCBjcmVh
dGlvbiBvZgotICAgIC8vIGFuIEF1ZGlvUmVjb3JkIG9iamVjdCwgaW4gYnl0ZSB1bml0cy4KLSAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBzaXplIGRvZXNuJ3QgZ3VhcmFudGVlIGEgc21vb3RoIHJlY29y
ZGluZyB1bmRlciBsb2FkLgotICAgIGludCBtaW5CdWZmZXJTaXplID0gQXVkaW9SZWNvcmQuZ2V0
TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgc2FtcGxlUmF0ZSwgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9J
Tl9NT05PLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpOwotICAgIGlmIChtaW5CdWZm
ZXJTaXplID09IEF1ZGlvUmVjb3JkLkVSUk9SIHx8IG1pbkJ1ZmZlclNpemUgPT0gQXVkaW9SZWNv
cmQuRVJST1JfQkFEX1ZBTFVFKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQu
Z2V0TWluQnVmZmVyU2l6ZSBmYWlsZWQ6ICIgKyBtaW5CdWZmZXJTaXplKTsKLSAgICAgIHJldHVy
biAtMTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvUmVjb3JkLmdldE1pbkJ1ZmZl
clNpemU6ICIgKyBtaW5CdWZmZXJTaXplKTsKLQotICAgIC8vIFVzZSBhIGxhcmdlciBidWZmZXIg
c2l6ZSB0aGFuIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcgdGhlCi0gICAgLy8g
QXVkaW9SZWNvcmQgaW5zdGFuY2UgdG8gZW5zdXJlIHNtb290aCByZWNvcmRpbmcgdW5kZXIgbG9h
ZC4gSXQgaGFzIGJlZW4KLSAgICAvLyB2ZXJpZmllZCB0aGF0IGl0IGRvZXMgbm90IGluY3JlYXNl
IHRoZSBhY3R1YWwgcmVjb3JkaW5nIGxhdGVuY3kuCi0gICAgaW50IGJ1ZmZlclNpemVJbkJ5dGVz
ID0gTWF0aC5tYXgoQlVGRkVSX1NJWkVfRkFDVE9SICogbWluQnVmZmVyU2l6ZSwgYnl0ZUJ1ZmZl
ci5jYXBhY2l0eSgpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiYnVmZmVyU2l6ZUluQnl0ZXM6ICIg
KyBidWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgdHJ5IHsKLSAgICAgIGF1ZGlvUmVjb3JkID0gbmV3
IEF1ZGlvUmVjb3JkKEF1ZGlvU291cmNlLlZPSUNFX0NPTU1VTklDQVRJT04sIHNhbXBsZVJhdGUs
Ci0gICAgICAgICAgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9NT05PLCBBdWRpb0Zvcm1hdC5FTkNP
RElOR19QQ01fMTZCSVQsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICB9IGNhdGNoIChJbGxlZ2Fs
QXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgZS5nZXRNZXNzYWdl
KCkpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoYXVkaW9SZWNvcmQgPT0gbnVs
bCB8fCBhdWRpb1JlY29yZC5nZXRTdGF0ZSgpICE9IEF1ZGlvUmVjb3JkLlNUQVRFX0lOSVRJQUxJ
WkVEKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBBdWRp
b1JlY29yZCBpbnN0YW5jZSIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoZWZm
ZWN0cyAhPSBudWxsKSB7Ci0gICAgICBlZmZlY3RzLmVuYWJsZShhdWRpb1JlY29yZC5nZXRBdWRp
b1Nlc3Npb25JZCgpKTsKLSAgICB9Ci0gICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGF1ZGlvIHBhcmFt
ZXRlcnMgYXJlIHZhbGlkIGFuZCBjb3JyZWN0LgotICAgIGlmICghYXJlUGFyYW1ldGVyc1ZhbGlk
KHNhbXBsZVJhdGUsIGNoYW5uZWxzKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF0IGxlYXN0
IG9uZSBhdWRpbyByZWNvcmQgcGFyYW1ldGVyIGlzIGludmFsaWQuIik7Ci0gICAgICByZXR1cm4g
LTE7Ci0gICAgfQotICAgIGxvZ01haW5QYXJhbWV0ZXJzKCk7Ci0gICAgbG9nTWFpblBhcmFtZXRl
cnNFeHRlbmRlZCgpOwotICAgIHJldHVybiBmcmFtZXNQZXJCdWZmZXI7Ci0gIH0KLQotICBwcml2
YXRlIGJvb2xlYW4gc3RhcnRSZWNvcmRpbmcoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0YXJ0
UmVjb3JkaW5nIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1JlY29yZCAhPSBudWxsKTsKLSAgICBh
c3NlcnRUcnVlKGF1ZGlvVGhyZWFkID09IG51bGwpOwotICAgIHRyeSB7Ci0gICAgICBhdWRpb1Jl
Y29yZC5zdGFydFJlY29yZGluZygpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlv
biBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQuc3RhcnRSZWNvcmRpbmcg
ZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAoYXVkaW9SZWNvcmQuZ2V0UmVjb3JkaW5nU3RhdGUoKSAhPSBBdWRpb1JlY29yZC5S
RUNPUkRTVEFURV9SRUNPUkRJTkcpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1JlY29y
ZC5zdGFydFJlY29yZGluZyBmYWlsZWQiKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgYXVkaW9UaHJlYWQgPSBuZXcgQXVkaW9SZWNvcmRUaHJlYWQoIkF1ZGlvUmVjb3JkSmF2YVRo
cmVhZCIpOwotICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LQotICBwcml2YXRlIGJvb2xlYW4gc3RvcFJlY29yZGluZygpIHsKLSAgICBMb2dnaW5nLmQoVEFH
LCAic3RvcFJlY29yZGluZyIpOwotICAgIGFzc2VydFRydWUoYXVkaW9UaHJlYWQgIT0gbnVsbCk7
Ci0gICAgYXVkaW9UaHJlYWQuc3RvcFRocmVhZCgpOwotICAgIGlmICghVGhyZWFkVXRpbHMuam9p
blVuaW50ZXJydXB0aWJseShhdWRpb1RocmVhZCwgQVVESU9fUkVDT1JEX1RIUkVBRF9KT0lOX1RJ
TUVPVVRfTVMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiSm9pbiBvZiBBdWRpb1JlY29yZEph
dmFUaHJlYWQgdGltZWQgb3V0Iik7Ci0gICAgfQotICAgIGF1ZGlvVGhyZWFkID0gbnVsbDsKLSAg
ICBpZiAoZWZmZWN0cyAhPSBudWxsKSB7Ci0gICAgICBlZmZlY3RzLnJlbGVhc2UoKTsKLSAgICB9
Ci0gICAgYXVkaW9SZWNvcmQucmVsZWFzZSgpOwotICAgIGF1ZGlvUmVjb3JkID0gbnVsbDsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFZlcmlmaWVzIHRoYXQgdGhlIGF1ZGlvIHJlY29y
ZCBpcyB1c2luZyBjb3JyZWN0IHBhcmFtZXRlcnMsIGkuZS4sIHRoYXQgdGhlCi0gIC8vIGNyZWF0
ZWQgaW5zdGFuY2UgdXNlcyB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFza2VkIGZvci4KLSAgcHJp
dmF0ZSBib29sZWFuIGFyZVBhcmFtZXRlcnNWYWxpZChpbnQgc2FtcGxlUmF0ZSwgaW50IGNoYW5u
ZWxzKSB7Ci0gICAgcmV0dXJuIChhdWRpb1JlY29yZC5nZXRBdWRpb0Zvcm1hdCgpID09IEF1ZGlv
Rm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVAotICAgICAgICAmJiBhdWRpb1JlY29yZC5nZXRDaGFu
bmVsQ29uZmlndXJhdGlvbigpID09IEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5fTU9OTwotICAgICAg
ICAmJiBhdWRpb1JlY29yZC5nZXRBdWRpb1NvdXJjZSgpID09IEF1ZGlvU291cmNlLlZPSUNFX0NP
TU1VTklDQVRJT04KLSAgICAgICAgJiYgYXVkaW9SZWNvcmQuZ2V0U2FtcGxlUmF0ZSgpID09IHNh
bXBsZVJhdGUgJiYgYXVkaW9SZWNvcmQuZ2V0Q2hhbm5lbENvdW50KCkgPT0gY2hhbm5lbHMpOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzKCkgewotICAgIExvZ2dpbmcu
ZChUQUcsICJBdWRpb1JlY29yZDogIgotICAgICAgICAgICAgKyAic2Vzc2lvbiBJRDogIiArIGF1
ZGlvUmVjb3JkLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAiCi0gICAgICAgICAgICArICJjaGFu
bmVsczogIiArIGF1ZGlvUmVjb3JkLmdldENoYW5uZWxDb3VudCgpICsgIiwgIgotICAgICAgICAg
ICAgKyAic2FtcGxlIHJhdGU6ICIgKyBhdWRpb1JlY29yZC5nZXRTYW1wbGVSYXRlKCkpOwotICB9
Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKSB7Ci0gICAgaWYg
KFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTWFyc2htYWxsb3dPckhpZ2hlcigpKSB7Ci0gICAg
ICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQ6ICIKLSAgICAgICAgICAgICAgLy8gVGhlIGZy
YW1lIGNvdW50IG9mIHRoZSBuYXRpdmUgQXVkaW9SZWNvcmQgYnVmZmVyLgotICAgICAgICAgICAg
ICArICJidWZmZXIgc2l6ZSBpbiBmcmFtZXM6ICIgKyBhdWRpb1JlY29yZC5nZXRCdWZmZXJTaXpl
SW5GcmFtZXMoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3aGljaCB0aHJv
d3MgYW4gZXhjZXB0aW9uICB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVkLgotICBwcml2YXRl
IHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25kaXRpb24pIHsKLSAgICBpZiAoIWNv
bmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCBjb25k
aXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQg
bmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwgbG9u
ZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVEYXRh
SXNSZWNvcmRlZChpbnQgYnl0ZXMsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gIC8vIFNl
dHMgYWxsIHJlY29yZGVkIHNhbXBsZXMgdG8gemVybyBpZiB8bXV0ZXwgaXMgdHJ1ZSwgaS5lLiwg
ZW5zdXJlcyB0aGF0Ci0gIC8vIHRoZSBtaWNyb3Bob25lIGlzIG11dGVkLgotICBwdWJsaWMgc3Rh
dGljIHZvaWQgc2V0TWljcm9waG9uZU11dGUoYm9vbGVhbiBtdXRlKSB7Ci0gICAgTG9nZ2luZy53
KFRBRywgInNldE1pY3JvcGhvbmVNdXRlKCIgKyBtdXRlICsgIikiKTsKLSAgICBtaWNyb3Bob25l
TXV0ZSA9IG11dGU7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1RyYWNrLmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZp
Y2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVHJh
Y2suamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVHJhY2suamF2YQkobm9uZXhpc3RlbnQpCkBA
IC0xLDM0NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2Vi
cnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi1pbXBvcnQg
YW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1h
dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1l
ZGlhLkF1ZGlvVHJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotCi1pbXBvcnQgamF2
YS5sYW5nLlRocmVhZDsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi1wdWJsaWMgY2xh
c3MgV2ViUnRjQXVkaW9UcmFjayB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVC
VUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0
Y0F1ZGlvVHJhY2siOwotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0YSBmb3JtYXQgaXMgUENNIDE2
IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRlZCBieSBhbGwg
ZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFNfUEVSX1NBTVBMRSA9IDE2
OwotCi0gIC8vIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggcmVjb3JkZWQgYnVmZmVyIHByb3ZpZGVk
IHRvIHRoZSBjbGllbnQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQUxMQkFDS19CVUZG
RVJfU0laRV9NUyA9IDEwOwotCi0gIC8vIEF2ZXJhZ2UgbnVtYmVyIG9mIGNhbGxiYWNrcyBwZXIg
c2Vjb25kLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSU19QRVJfU0VDT05EID0g
MTAwMCAvIENBTExCQUNLX0JVRkZFUl9TSVpFX01TOwotCi0gIHByaXZhdGUgZmluYWwgQ29udGV4
dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlQXVkaW9UcmFjazsKLSAgcHJp
dmF0ZSBmaW5hbCBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotCi0gIHByaXZhdGUgQnl0ZUJ1
ZmZlciBieXRlQnVmZmVyOwotCi0gIHByaXZhdGUgQXVkaW9UcmFjayBhdWRpb1RyYWNrID0gbnVs
bDsKLSAgcHJpdmF0ZSBBdWRpb1RyYWNrVGhyZWFkIGF1ZGlvVGhyZWFkID0gbnVsbDsKLQotICAv
LyBTYW1wbGVzIHRvIGJlIHBsYXllZCBhcmUgcmVwbGFjZWQgYnkgemVyb3MgaWYgfHNwZWFrZXJN
dXRlfCBpcyBzZXQgdG8gdHJ1ZS4KLSAgLy8gQ2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhl
IHNwZWFrZXIgaXMgZnVsbHkgbXV0ZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xl
YW4gc3BlYWtlck11dGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBieXRlW10gZW1wdHlCeXRlczsKLQot
ICAvKioKLSAgICogQXVkaW8gdGhyZWFkIHdoaWNoIGtlZXBzIGNhbGxpbmcgQXVkaW9UcmFjay53
cml0ZSgpIHRvIHN0cmVhbSBhdWRpby4KLSAgICogRGF0YSBpcyBwZXJpb2RpY2FsbHkgYWNxdWly
ZWQgZnJvbSB0aGUgbmF0aXZlIFdlYlJUQyBsYXllciB1c2luZyB0aGUKLSAgICogbmF0aXZlR2V0
UGxheW91dERhdGEgY2FsbGJhY2sgZnVuY3Rpb24uCi0gICAqIFRoaXMgdGhyZWFkIHVzZXMgYSBQ
cm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8gcHJpb3JpdHkuCi0gICAqLwotICBw
cml2YXRlIGNsYXNzIEF1ZGlvVHJhY2tUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotICAgIHByaXZh
dGUgdm9sYXRpbGUgYm9vbGVhbiBrZWVwQWxpdmUgPSB0cnVlOwotCi0gICAgcHVibGljIEF1ZGlv
VHJhY2tUaHJlYWQoU3RyaW5nIG5hbWUpIHsKLSAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQot
ICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIFByb2Nlc3Muc2V0
VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJHRU5UX0FVRElPKTsKLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrVGhyZWFkIiArIFdlYlJ0Y0F1ZGlvVXRpbHMu
Z2V0VGhyZWFkSW5mbygpKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgLy8gSW4gTU9ERV9TVFJF
QU0gbW9kZSB3ZSBjYW4gb3B0aW9uYWxseSBwcmltZSB0aGUgb3V0cHV0IGJ1ZmZlciBieQotICAg
ICAgICAvLyB3cml0aW5nIHVwIHRvIGJ1ZmZlclNpemVJbkJ5dGVzIChmcm9tIGNvbnN0cnVjdG9y
KSBiZWZvcmUgc3RhcnRpbmcuCi0gICAgICAgIC8vIFRoaXMgcHJpbWluZyB3aWxsIGF2b2lkIGFu
IGltbWVkaWF0ZSB1bmRlcnJ1biwgYnV0IGlzIG5vdCByZXF1aXJlZC4KLSAgICAgICAgLy8gVE9E
TyhoZW5yaWthKTogaW5pdGlhbCB0ZXN0cyBoYXZlIHNob3duIHRoYXQgcHJpbWluZyBpcyBub3Qg
cmVxdWlyZWQuCi0gICAgICAgIGF1ZGlvVHJhY2sucGxheSgpOwotICAgICAgICBhc3NlcnRUcnVl
KGF1ZGlvVHJhY2suZ2V0UGxheVN0YXRlKCkgPT0gQXVkaW9UcmFjay5QTEFZU1RBVEVfUExBWUlO
Ryk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICBM
b2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5wbGF5IGZhaWxlZDogIiArIGUuZ2V0TWVzc2FnZSgp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBGaXhlZCBzaXplIGluIGJ5
dGVzIG9mIGVhY2ggMTBtcyBibG9jayBvZiBhdWRpbyBkYXRhIHRoYXQgd2UgYXNrIGZvcgotICAg
ICAgLy8gdXNpbmcgY2FsbGJhY2tzIHRvIHRoZSBuYXRpdmUgV2ViUlRDIGNsaWVudC4KLSAgICAg
IGZpbmFsIGludCBzaXplSW5CeXRlcyA9IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKTsKLQotICAgICAg
d2hpbGUgKGtlZXBBbGl2ZSkgewotICAgICAgICAvLyBHZXQgMTBtcyBvZiBQQ00gZGF0YSBmcm9t
IHRoZSBuYXRpdmUgV2ViUlRDIGNsaWVudC4gQXVkaW8gZGF0YSBpcwotICAgICAgICAvLyB3cml0
dGVuIGludG8gdGhlIGNvbW1vbiBCeXRlQnVmZmVyIHVzaW5nIHRoZSBhZGRyZXNzIHRoYXQgd2Fz
Ci0gICAgICAgIC8vIGNhY2hlZCBhdCBjb25zdHJ1Y3Rpb24uCi0gICAgICAgIG5hdGl2ZUdldFBs
YXlvdXREYXRhKHNpemVJbkJ5dGVzLCBuYXRpdmVBdWRpb1RyYWNrKTsKLSAgICAgICAgLy8gV3Jp
dGUgZGF0YSB1bnRpbCBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBhdWRpbyBzaW5r
LgotICAgICAgICAvLyBVcG9uIHJldHVybiwgdGhlIGJ1ZmZlciBwb3NpdGlvbiB3aWxsIGhhdmUg
YmVlbiBhZHZhbmNlZCB0byByZWZsZWN0Ci0gICAgICAgIC8vIHRoZSBhbW91bnQgb2YgZGF0YSB0
aGF0IHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgQXVkaW9UcmFjay4KLSAgICAgICAg
YXNzZXJ0VHJ1ZShzaXplSW5CeXRlcyA8PSBieXRlQnVmZmVyLnJlbWFpbmluZygpKTsKLSAgICAg
ICAgaWYgKHNwZWFrZXJNdXRlKSB7Ci0gICAgICAgICAgYnl0ZUJ1ZmZlci5jbGVhcigpOwotICAg
ICAgICAgIGJ5dGVCdWZmZXIucHV0KGVtcHR5Qnl0ZXMpOwotICAgICAgICAgIGJ5dGVCdWZmZXIu
cG9zaXRpb24oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IDA7Ci0g
ICAgICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkxvbGxpcG9wT3JIaWdoZXIoKSkg
ewotICAgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlT25Mb2xsaXBvcChhdWRpb1RyYWNrLCBi
eXRlQnVmZmVyLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYnl0
ZXNXcml0dGVuID0gd3JpdGVQcmVMb2xsaXBvcChhdWRpb1RyYWNrLCBieXRlQnVmZmVyLCBzaXpl
SW5CeXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAhPSBzaXplSW5C
eXRlcykgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1RyYWNrLndyaXRlIGZhaWxl
ZDogIiArIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSBBdWRp
b1RyYWNrLkVSUk9SX0lOVkFMSURfT1BFUkFUSU9OKSB7Ci0gICAgICAgICAgICBrZWVwQWxpdmUg
PSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhlIGJ5dGUgYnVm
ZmVyIG11c3QgYmUgcmV3aW5kZWQgc2luY2UgYnl0ZUJ1ZmZlci5wb3NpdGlvbigpIGlzCi0gICAg
ICAgIC8vIGluY3JlYXNlZCBhdCBlYWNoIGNhbGwgdG8gQXVkaW9UcmFjay53cml0ZSgpLiBJZiB3
ZSBkb24ndCBkbyB0aGlzLAotICAgICAgICAvLyBuZXh0IGNhbGwgdG8gQXVkaW9UcmFjay53cml0
ZSgpIHdpbGwgZmFpbC4KLSAgICAgICAgYnl0ZUJ1ZmZlci5yZXdpbmQoKTsKLQotICAgICAgICAv
LyBUT0RPKGhlbnJpa2EpOiBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBkZWxheSBlc3RpbWF0
ZSBoZXJlIGJ5Ci0gICAgICAgIC8vIGNvdW50aW5nIG51bWJlciBvZiB3cml0dGVuIGZyYW1lcyBh
bmQgc3VidHJhY3RpbmcgdGhlIHJlc3VsdCBmcm9tCi0gICAgICAgIC8vIGF1ZGlvVHJhY2suZ2V0
UGxheWJhY2tIZWFkUG9zaXRpb24oKS4KLSAgICAgIH0KLQotICAgICAgdHJ5IHsKLSAgICAgICAg
YXVkaW9UcmFjay5zdG9wKCk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24g
ZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5zdG9wIGZhaWxlZDogIiAr
IGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICAgIGFzc2VydFRydWUoYXVkaW9UcmFjay5n
ZXRQbGF5U3RhdGUoKSA9PSBBdWRpb1RyYWNrLlBMQVlTVEFURV9TVE9QUEVEKTsKLSAgICAgIGF1
ZGlvVHJhY2suZmx1c2goKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCB3cml0ZU9uTG9sbGlw
b3AoQXVkaW9UcmFjayBhdWRpb1RyYWNrLCBCeXRlQnVmZmVyIGJ5dGVCdWZmZXIsIGludCBzaXpl
SW5CeXRlcykgewotICAgICAgcmV0dXJuIGF1ZGlvVHJhY2sud3JpdGUoYnl0ZUJ1ZmZlciwgc2l6
ZUluQnl0ZXMsIEF1ZGlvVHJhY2suV1JJVEVfQkxPQ0tJTkcpOwotICAgIH0KLQotICAgIHByaXZh
dGUgaW50IHdyaXRlUHJlTG9sbGlwb3AoQXVkaW9UcmFjayBhdWRpb1RyYWNrLCBCeXRlQnVmZmVy
IGJ5dGVCdWZmZXIsIGludCBzaXplSW5CeXRlcykgewotICAgICAgcmV0dXJuIGF1ZGlvVHJhY2su
d3JpdGUoYnl0ZUJ1ZmZlci5hcnJheSgpLCBieXRlQnVmZmVyLmFycmF5T2Zmc2V0KCksIHNpemVJ
bkJ5dGVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBqb2luVGhyZWFkKCkgewotICAgICAg
a2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgICB3aGlsZSAoaXNBbGl2ZSgpKSB7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgam9pbigpOwotICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICAgICAgLy8gSWdub3JlLgotICAgICAgICB9Ci0gICAgICB9Ci0gICAg
fQotICB9Ci0KLSAgV2ViUnRjQXVkaW9UcmFjayhDb250ZXh0IGNvbnRleHQsIGxvbmcgbmF0aXZl
QXVkaW9UcmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRp
bHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRo
aXMubmF0aXZlQXVkaW9UcmFjayA9IG5hdGl2ZUF1ZGlvVHJhY2s7Ci0gICAgYXVkaW9NYW5hZ2Vy
ID0gKEF1ZGlvTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVESU9f
U0VSVklDRSk7Ci0gICAgaWYgKERFQlVHKSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0Rl
dmljZUluZm8oVEFHKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaW5pdFBsYXlv
dXQoaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIExvZ2dpbmcuZChUQUcsICJp
bml0UGxheW91dChzYW1wbGVSYXRlPSIgKyBzYW1wbGVSYXRlICsgIiwgY2hhbm5lbHM9IiArIGNo
YW5uZWxzICsgIikiKTsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJGcmFtZSA9IGNoYW5uZWxzICog
KEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGJ5dGVCdWZmZXIgPSBieXRlQnVmZmVyLmFsbG9j
YXRlRGlyZWN0KGJ5dGVzUGVyRnJhbWUgKiAoc2FtcGxlUmF0ZSAvIEJVRkZFUlNfUEVSX1NFQ09O
RCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJieXRlQnVmZmVyLmNhcGFjaXR5OiAiICsgYnl0ZUJ1
ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBlbXB0eUJ5dGVzID0gbmV3IGJ5dGVbYnl0ZUJ1ZmZlci5j
YXBhY2l0eSgpXTsKLSAgICAvLyBSYXRoZXIgdGhhbiBwYXNzaW5nIHRoZSBCeXRlQnVmZmVyIHdp
dGggZXZlcnkgY2FsbGJhY2sgKHJlcXVpcmluZwotICAgIC8vIHRoZSBwb3RlbnRpYWxseSBleHBl
bnNpdmUgR2V0RGlyZWN0QnVmZmVyQWRkcmVzcykgd2Ugc2ltcGx5IGhhdmUgdGhlCi0gICAgLy8g
dGhlIG5hdGl2ZSBjbGFzcyBjYWNoZSB0aGUgYWRkcmVzcyB0byB0aGUgbWVtb3J5IG9uY2UuCi0g
ICAgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKGJ5dGVCdWZmZXIsIG5hdGl2ZUF1ZGlv
VHJhY2spOwotCi0gICAgLy8gR2V0IHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVpcmVkIGZv
ciB0aGUgc3VjY2Vzc2Z1bCBjcmVhdGlvbiBvZiBhbgotICAgIC8vIEF1ZGlvVHJhY2sgb2JqZWN0
IHRvIGJlIGNyZWF0ZWQgaW4gdGhlIE1PREVfU1RSRUFNIG1vZGUuCi0gICAgLy8gTm90ZSB0aGF0
IHRoaXMgc2l6ZSBkb2Vzbid0IGd1YXJhbnRlZSBhIHNtb290aCBwbGF5YmFjayB1bmRlciBsb2Fk
LgotICAgIC8vIFRPRE8oaGVucmlrYSk6IHNob3VsZCB3ZSBleHRlbmQgdGhlIGJ1ZmZlciBzaXpl
IHRvIGF2b2lkIGdsaXRjaGVzPwotICAgIGZpbmFsIGludCBtaW5CdWZmZXJTaXplSW5CeXRlcyA9
IEF1ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgc2FtcGxlUmF0ZSwgQXVkaW9G
b3JtYXQuQ0hBTk5FTF9PVVRfTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUKTsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplOiAiICsgbWlu
QnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIC8vIEZvciB0aGUgc3RyZWFtaW5nIG1vZGUsIGRhdGEg
bXVzdCBiZSB3cml0dGVuIHRvIHRoZSBhdWRpbyBzaW5rIGluCi0gICAgLy8gY2h1bmtzIG9mIHNp
emUgKGdpdmVuIGJ5IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkgbGVzcyB0aGFuIG9yIGVxdWFsCi0g
ICAgLy8gdG8gdGhlIHRvdGFsIGJ1ZmZlciBzaXplIHxtaW5CdWZmZXJTaXplSW5CeXRlc3wuIEJ1
dCwgd2UgaGF2ZSBzZWVuCi0gICAgLy8gcmVwb3J0cyBvZiAiZ2V0TWluQnVmZmVyU2l6ZSgpOiBl
cnJvciBxdWVyeWluZyBoYXJkd2FyZSIuIEhlbmNlLCBpdAotICAgIC8vIGNhbiBoYXBwZW4gdGhh
dCB8bWluQnVmZmVyU2l6ZUluQnl0ZXN8IGNvbnRhaW5zIGFuIGludmFsaWQgdmFsdWUuCi0gICAg
aWYgKG1pbkJ1ZmZlclNpemVJbkJ5dGVzIDwgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplIHJldHVybnMgYW4g
aW52YWxpZCB2YWx1ZS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBF
bnN1cmUgdGhhdCBwcmV2aXNpb24gYXVkaW8gc2Vzc2lvbiB3YXMgc3RvcHBlZCBjb3JyZWN0bHkg
YmVmb3JlIHRyeWluZwotICAgIC8vIHRvIGNyZWF0ZSBhIG5ldyBBdWRpb1RyYWNrLgotICAgIGlm
IChhdWRpb1RyYWNrICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDb25mbGljdCB3
aXRoIGV4aXN0aW5nIEF1ZGlvVHJhY2suIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHRyeSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gQXVkaW9UcmFjayBvYmplY3QgYW5kIGluaXRp
YWxpemUgaXRzIGFzc29jaWF0ZWQgYXVkaW8gYnVmZmVyLgotICAgICAgLy8gVGhlIHNpemUgb2Yg
dGhpcyBidWZmZXIgZGV0ZXJtaW5lcyBob3cgbG9uZyBhbiBBdWRpb1RyYWNrIGNhbiBwbGF5Ci0g
ICAgICAvLyBiZWZvcmUgcnVubmluZyBvdXQgb2YgZGF0YS4KLSAgICAgIGF1ZGlvVHJhY2sgPQot
ICAgICAgICAgIG5ldyBBdWRpb1RyYWNrKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwg
c2FtcGxlUmF0ZSwgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTywKLSAgICAgICAgICAgICAg
QXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklULCBtaW5CdWZmZXJTaXplSW5CeXRlcywgQXVk
aW9UcmFjay5NT0RFX1NUUkVBTSk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0
aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJdCBjYW4gaGFwcGVuIHRoYXQgYW4gQXVkaW9U
cmFjayBpcyBjcmVhdGVkIGJ1dCBpdCB3YXMgbm90IHN1Y2Nlc3NmdWxseQotICAgIC8vIGluaXRp
YWxpemVkIHVwb24gY3JlYXRpb24uIFNlZW1zIHRvIGJlIHRoZSBjYXNlIGUuZy4gd2hlbiB0aGUg
bWF4aW11bQotICAgIC8vIG51bWJlciBvZiBnbG9iYWxseSBhdmFpbGFibGUgYXVkaW8gdHJhY2tz
IGlzIGV4Y2VlZGVkLgotICAgIGlmIChhdWRpb1RyYWNrLmdldFN0YXRlKCkgIT0gQXVkaW9UcmFj
ay5TVEFURV9JTklUSUFMSVpFRCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkluaXRpYWxpemF0
aW9uIG9mIGF1ZGlvIHRyYWNrIGZhaWxlZC4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGF1ZGlvIHBhcmFtZXRlcnMgYXJlIHZhbGlkIGFuZCBj
b3JyZWN0LgotICAgIGlmICghYXJlUGFyYW1ldGVyc1ZhbGlkKHNhbXBsZVJhdGUsIGNoYW5uZWxz
KSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF0IGxlYXN0IG9uZSBhdWRpbyB0cmFjayBwYXJh
bWV0ZXIgaXMgaW52YWxpZC4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgbG9n
TWFpblBhcmFtZXRlcnMoKTsKLSAgICBsb2dNYWluUGFyYW1ldGVyc0V4dGVuZGVkKCk7Ci0gICAg
cmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRQbGF5b3V0KCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFBsYXlvdXQiKTsKLSAgICBhc3NlcnRUcnVlKGF1ZGlv
VHJhY2sgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCA9PSBudWxsKTsKLSAg
ICBpZiAoYXVkaW9UcmFjay5nZXRTdGF0ZSgpICE9IEF1ZGlvVHJhY2suU1RBVEVfSU5JVElBTEla
RUQpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpbyB0cmFjayBpcyBub3Qgc3VjY2Vzc2Z1
bGx5IGluaXRpYWxpemVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRp
b1RocmVhZCA9IG5ldyBBdWRpb1RyYWNrVGhyZWFkKCJBdWRpb1RyYWNrSmF2YVRocmVhZCIpOwot
ICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2
YXRlIGJvb2xlYW4gc3RvcFBsYXlvdXQoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BQbGF5
b3V0Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCAhPSBudWxsKTsKLSAgICBsb2dVbmRl
cnJ1bkNvdW50KCk7Ci0gICAgYXVkaW9UaHJlYWQuam9pblRocmVhZCgpOwotICAgIGF1ZGlvVGhy
ZWFkID0gbnVsbDsKLSAgICBpZiAoYXVkaW9UcmFjayAhPSBudWxsKSB7Ci0gICAgICBhdWRpb1Ry
YWNrLnJlbGVhc2UoKTsKLSAgICAgIGF1ZGlvVHJhY2sgPSBudWxsOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEdldCBtYXggcG9zc2libGUgdm9sdW1lIGluZGV4IGZvciBh
IHBob25lIGNhbGwgYXVkaW8gc3RyZWFtLgotICBwcml2YXRlIGludCBnZXRTdHJlYW1NYXhWb2x1
bWUoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImdldFN0cmVhbU1heFZvbHVtZSIpOwotICAgIGFz
c2VydFRydWUoYXVkaW9NYW5hZ2VyICE9IG51bGwpOwotICAgIHJldHVybiBhdWRpb01hbmFnZXIu
Z2V0U3RyZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCk7Ci0gIH0K
LQotICAvLyBTZXQgY3VycmVudCB2b2x1bWUgbGV2ZWwgZm9yIGEgcGhvbmUgY2FsbCBhdWRpbyBz
dHJlYW0uCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRTdHJlYW1Wb2x1bWUoaW50IHZvbHVtZSkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJzZXRTdHJlYW1Wb2x1bWUoIiArIHZvbHVtZSArICIpIik7Ci0g
ICAgYXNzZXJ0VHJ1ZShhdWRpb01hbmFnZXIgIT0gbnVsbCk7Ci0gICAgaWYgKGlzVm9sdW1lRml4
ZWQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlRoZSBkZXZpY2UgaW1wbGVtZW50cyBhIGZp
eGVkIHZvbHVtZSBwb2xpY3kuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGF1
ZGlvTWFuYWdlci5zZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxM
LCB2b2x1bWUsIDApOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFu
IGlzVm9sdW1lRml4ZWQoKSB7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkxv
bGxpcG9wT3JIaWdoZXIoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYXVkaW9N
YW5hZ2VyLmlzVm9sdW1lRml4ZWQoKTsKLSAgfQotCi0gIC8qKiBHZXQgY3VycmVudCB2b2x1bWUg
bGV2ZWwgZm9yIGEgcGhvbmUgY2FsbCBhdWRpbyBzdHJlYW0uICovCi0gIHByaXZhdGUgaW50IGdl
dFN0cmVhbVZvbHVtZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZ2V0U3RyZWFtVm9sdW1lIik7
Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb01hbmFnZXIgIT0gbnVsbCk7Ci0gICAgcmV0dXJuIGF1ZGlv
TWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKTsK
LSAgfQotCi0gIC8vIFZlcmlmaWVzIHRoYXQgdGhlIGF1ZGlvIHRyYWNrIGlzIHVzaW5nIGNvcnJl
Y3QgcGFyYW1ldGVycywgaS5lLiwgdGhhdCB0aGUKLSAgLy8gY3JlYXRlZCB0cmFjayB1c2VzIHRo
ZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXNrZWQgZm9yLgotICBwcml2YXRlIGJvb2xlYW4gYXJlUGFy
YW1ldGVyc1ZhbGlkKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsKLSAgICBmaW5hbCBp
bnQgc3RyZWFtVHlwZSA9IGF1ZGlvVHJhY2suZ2V0U3RyZWFtVHlwZSgpOwotICAgIHJldHVybiAo
YXVkaW9UcmFjay5nZXRBdWRpb0Zvcm1hdCgpID09IEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8x
NkJJVAotICAgICAgICAmJiBhdWRpb1RyYWNrLmdldENoYW5uZWxDb25maWd1cmF0aW9uKCkgPT0g
QXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTwotICAgICAgICAmJiBzdHJlYW1UeXBlID09IEF1
ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCAmJiBhdWRpb1RyYWNrLmdldFNhbXBsZVJhdGUo
KSA9PSBzYW1wbGVSYXRlCi0gICAgICAgICYmIHNhbXBsZVJhdGUgPT0gYXVkaW9UcmFjay5nZXRO
YXRpdmVPdXRwdXRTYW1wbGVSYXRlKHN0cmVhbVR5cGUpCi0gICAgICAgICYmIGF1ZGlvVHJhY2su
Z2V0Q2hhbm5lbENvdW50KCkgPT0gY2hhbm5lbHMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxv
Z01haW5QYXJhbWV0ZXJzKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrOiAiCi0g
ICAgICAgICAgICArICJzZXNzaW9uIElEOiAiICsgYXVkaW9UcmFjay5nZXRBdWRpb1Nlc3Npb25J
ZCgpICsgIiwgIgotICAgICAgICAgICAgKyAiY2hhbm5lbHM6ICIgKyBhdWRpb1RyYWNrLmdldENo
YW5uZWxDb3VudCgpICsgIiwgIgotICAgICAgICAgICAgKyAic2FtcGxlIHJhdGU6ICIgKyBhdWRp
b1RyYWNrLmdldFNhbXBsZVJhdGUoKSArICIsICIKLSAgICAgICAgICAgIC8vIEdhaW4gKD49MS4w
KSBleHByZXNzZWQgYXMgbGluZWFyIG11bHRpcGxpZXIgb24gc2FtcGxlIHZhbHVlcy4KLSAgICAg
ICAgICAgICsgIm1heCBnYWluOiAiICsgYXVkaW9UcmFjay5nZXRNYXhWb2x1bWUoKSk7Ci0gIH0K
LQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnNFeHRlbmRlZCgpIHsKLSAgICBpZiAo
V2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkpIHsKLSAgICAg
IExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrOiAiCi0gICAgICAgICAgICAgIC8vIFRoZSBlZmZl
Y3RpdmUgc2l6ZSBvZiB0aGUgQXVkaW9UcmFjayBidWZmZXIgdGhhdCB0aGUgYXBwIHdyaXRlcyB0
by4KLSAgICAgICAgICAgICAgKyAiYnVmZmVyIHNpemUgaW4gZnJhbWVzOiAiICsgYXVkaW9UcmFj
ay5nZXRCdWZmZXJTaXplSW5GcmFtZXMoKSk7Ci0gICAgfQotICAgIGlmIChXZWJSdGNBdWRpb1V0
aWxzLnJ1bm5pbmdPbk5vdWdhdE9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJB
dWRpb1RyYWNrOiAiCi0gICAgICAgICAgICAgIC8vIE1heGltdW0gc2l6ZSBvZiB0aGUgQXVkaW9U
cmFjayBidWZmZXIgaW4gZnJhbWVzLgotICAgICAgICAgICAgICArICJidWZmZXIgY2FwYWNpdHkg
aW4gZnJhbWVzOiAiICsgYXVkaW9UcmFjay5nZXRCdWZmZXJDYXBhY2l0eUluRnJhbWVzKCkpOwot
ICAgIH0KLSAgfQotCi0gIC8vIFByaW50cyB0aGUgbnVtYmVyIG9mIHVuZGVycnVuIG9jY3VycmVu
Y2VzIGluIHRoZSBhcHBsaWNhdGlvbi1sZXZlbCB3cml0ZQotICAvLyBidWZmZXIgc2luY2UgdGhl
IEF1ZGlvVHJhY2sgd2FzIGNyZWF0ZWQuIEFuIHVuZGVycnVuIG9jY3VycyBpZiB0aGUgYXBwIGRv
ZXMKLSAgLy8gbm90IHdyaXRlIGF1ZGlvIGRhdGEgcXVpY2tseSBlbm91Z2gsIGNhdXNpbmcgdGhl
IGJ1ZmZlciB0byB1bmRlcmZsb3cgYW5kIGEKLSAgLy8gcG90ZW50aWFsIGF1ZGlvIGdsaXRjaC4K
LSAgLy8gVE9ETyhoZW5yaWthKToga2VlcCB0cmFjayBvZiB0aGlzIHZhbHVlIGluIHRoZSBmaWVs
ZCBhbmQgcG9zc2libHkgYWRkIG5ldwotICAvLyBVTUEgc3RhdCBpZiBuZWVkZWQuCi0gIHByaXZh
dGUgdm9pZCBsb2dVbmRlcnJ1bkNvdW50KCkgewotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1
bm5pbmdPbk5vdWdhdE9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJ1bmRlcnJ1
biBjb3VudDogIiArIGF1ZGlvVHJhY2suZ2V0VW5kZXJydW5Db3VudCgpKTsKLSAgICB9Ci0gIH0K
LQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24gIHdoZW4gYW4g
YXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShi
b29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBu
ZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAg
fQotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYWNoZURpcmVjdEJ1ZmZlckFk
ZHJlc3MoQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKTsKLQot
ICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUdldFBsYXlvdXREYXRhKGludCBieXRlcywgbG9u
ZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgLy8gU2V0cyBhbGwgc2FtcGxlcyB0byBiZSBwbGF5
ZWQgb3V0IHRvIHplcm8gaWYgfG11dGV8IGlzIHRydWUsIGkuZS4sCi0gIC8vIGVuc3VyZXMgdGhh
dCB0aGUgc3BlYWtlciBpcyBtdXRlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFNwZWFrZXJN
dXRlKGJvb2xlYW4gbXV0ZSkgewotICAgIExvZ2dpbmcudyhUQUcsICJzZXRTcGVha2VyTXV0ZSgi
ICsgbXV0ZSArICIpIik7Ci0gICAgc3BlYWtlck11dGUgPSBtdXRlOwotICB9Ci19CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9V
dGlscy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0
Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1V0aWxzLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRp
b1V0aWxzLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLyoKLSAqICBDb3B5
cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGlu
dGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhl
IGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICog
IGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0
cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1wb3J0IG9y
Zy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1w
b3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm9z
LkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLQotaW1wb3J0IGphdmEubGFuZy5U
aHJlYWQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsK
LQotcHVibGljIGZpbmFsIGNsYXNzIFdlYlJ0Y0F1ZGlvVXRpbHMgewotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvVXRpbHMiOwotCi0gIC8vIExpc3Qgb2Yg
ZGV2aWNlcyB3aGVyZSB3ZSBoYXZlIHNlZW4gaXNzdWVzIChlLmcuIGJhZCBhdWRpbyBxdWFsaXR5
KSB1c2luZwotICAvLyB0aGUgbG93IGxhdGVuY3kgb3V0cHV0IG1vZGUgaW4gY29tYmluYXRpb24g
d2l0aCBPcGVuU0wgRVMuCi0gIC8vIFRoZSBkZXZpY2UgbmFtZSBpcyBnaXZlbiBieSBCdWlsZC5N
T0RFTC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQkxBQ0tMSVNURURfT1BFTl9T
TF9FU19NT0RFTFMgPSBuZXcgU3RyaW5nW10gewotICAgICAgLy8gVGhpcyBsaXN0IGlzIGN1cnJl
bnRseSBlbXB0eSA7LSkKLSAgfTsKLQotICAvLyBMaXN0IG9mIGRldmljZXMgd2hlcmUgaXQgaGFz
IGJlZW4gdmVyaWZpZWQgdGhhdCB0aGUgYnVpbHQtaW4gZWZmZWN0Ci0gIC8vIGJhZCBhbmQgd2hl
cmUgaXQgbWFrZXMgc2Vuc2UgdG8gYXZvaWQgdXNpbmcgaXQgYW5kIGluc3RlYWQgcmVseSBvbiB0
aGUKLSAgLy8gbmF0aXZlIFdlYlJUQyB2ZXJzaW9uIGluc3RlYWQuIFRoZSBkZXZpY2UgbmFtZSBp
cyBnaXZlbiBieSBCdWlsZC5NT0RFTC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10g
QkxBQ0tMSVNURURfQUVDX01PREVMUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAiRDY1MDMiLCAv
LyBTb255IFhwZXJpYSBaMiBENjUwMwotICAgICAgIk9ORSBBMjAwNSIsIC8vIE9uZVBsdXMgMgot
ICAgICAgIk1vdG9HMyIsIC8vIE1vdG8gRyAoM3JkIEdlbmVyYXRpb24pCi0gIH07Ci0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEJMQUNLTElTVEVEX05TX01PREVMUyA9IG5ldyBTdHJp
bmdbXSB7Ci0gICAgICAiTmV4dXMgMTAiLCAiTmV4dXMgOSIsCi0gICAgICAiT05FIEEyMDA1Iiwg
Ly8gT25lUGx1cyAyCi0gIH07Ci0KLSAgLy8gVXNlIDE2a0h6IGFzIHRoZSBkZWZhdWx0IHNhbXBs
ZSByYXRlLiBBIGhpZ2hlciBzYW1wbGUgcmF0ZSBtaWdodCBwcmV2ZW50Ci0gIC8vIHVzIGZyb20g
c3VwcG9ydGluZyBjb21tdW5pY2F0aW9uIG1vZGUgb24gc29tZSBvbGRlciAoZS5nLiBJQ1MpIGRl
dmljZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NBTVBMRV9SQVRFX0ha
ID0gMTYwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGludCBkZWZhdWx0U2FtcGxlUmF0ZUh6ID0gREVG
QVVMVF9TQU1QTEVfUkFURV9IWjsKLSAgLy8gU2V0IHRvIHRydWUgaWYgc2V0RGVmYXVsdFNhbXBs
ZVJhdGVIeigpIGhhcyBiZWVuIGNhbGxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Rl
ZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbiA9IGZhbHNlOwotCi0gIC8vIEJ5IGRlZmF1bHQsIHV0
aWxpemUgaGFyZHdhcmUgYmFzZWQgYXVkaW8gZWZmZWN0cyBmb3IgQUVDIGFuZCBOUyB3aGVuCi0g
IC8vIGF2YWlsYWJsZS4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZEFj
b3VzdGljRWNob0NhbmNlbGVyID0gZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gdXNl
V2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IgPSBmYWxzZTsKLQotICAvLyBDYWxsIHRoZXNlIG1l
dGhvZHMgaWYgYW55IGhhcmR3YXJlIGJhc2VkIGVmZmVjdCBzaGFsbCBiZSByZXBsYWNlZCBieSBh
Ci0gIC8vIHNvZnR3YXJlIGJhc2VkIHZlcnNpb24gcHJvdmlkZWQgYnkgdGhlIFdlYlJUQyBzdGFj
ayBpbnN0ZWFkLgotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFdlYlJ0Y0Jh
c2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoYm9vbGVhbiBlbmFibGUpIHsKLSAgICB1c2VXZWJSdGNC
YXNlZEFjb3VzdGljRWNob0NhbmNlbGVyID0gZW5hYmxlOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMg
c3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoYm9vbGVhbiBl
bmFibGUpIHsKLSAgICB1c2VXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvciA9IGVuYWJsZTsKLSAg
fQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFdlYlJ0Y0Jhc2VkQXV0b21h
dGljR2FpbkNvbnRyb2woYm9vbGVhbiBlbmFibGUpIHsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBk
ZXByZWNhdGVkOyByZW1vdmUgd2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICAg
IExvZ2dpbmcudyhUQUcsICJzZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKCkgaXMg
ZGVwcmVjYXRlZCIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVh
biB1c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKCkgewotICAgIGlmICh1c2VXZWJS
dGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiT3Zl
cnJpZGluZyBkZWZhdWx0IGJlaGF2aW9yOyBub3cgdXNpbmcgV2ViUlRDIEFFQyEiKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXI7Ci0gIH0KLSAg
cHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZE5vaXNlU3Vw
cHJlc3NvcigpIHsKLSAgICBpZiAodXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IpIHsKLSAg
ICAgIExvZ2dpbmcudyhUQUcsICJPdmVycmlkaW5nIGRlZmF1bHQgYmVoYXZpb3I7IG5vdyB1c2lu
ZyBXZWJSVEMgTlMhIik7Ci0gICAgfQotICAgIHJldHVybiB1c2VXZWJSdGNCYXNlZE5vaXNlU3Vw
cHJlc3NvcjsKLSAgfQotICAvLyBUT0RPKGhlbnJpa2EpOiBkZXByZWNhdGVkOyByZW1vdmUgd2hl
biBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICBwdWJsaWMgc3RhdGljIHN5bmNocm9u
aXplZCBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woKSB7Ci0gICAg
Ly8gQWx3YXlzIHJldHVybiB0cnVlIGhlcmUgdG8gYXZvaWQgdHJ5aW5nIHRvIHVzZSBhbnkgYnVp
bHQtaW4gQUdDLgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBkZXZpY2Ugc3VwcG9ydHMgYW4gYXVkaW8gZWZmZWN0IChBRUMgb3IgTlMpLgotICAvLyBG
b3VyIGNvbmRpdGlvbnMgbXVzdCBiZSBmdWxmaWxsZWQgaWYgZnVuY3Rpb25zIGFyZSB0byByZXR1
cm4gdHJ1ZToKLSAgLy8gMSkgdGhlIHBsYXRmb3JtIG11c3Qgc3VwcG9ydCB0aGUgYnVpbHQtaW4g
KEhXKSBlZmZlY3QsCi0gIC8vIDIpIGV4cGxpY2l0IHVzZSAob3ZlcnJpZGUpIG9mIGEgV2ViUlRD
IGJhc2VkIHZlcnNpb24gbXVzdCBub3QgYmUgc2V0LAotICAvLyAzKSB0aGUgZGV2aWNlIG11c3Qg
bm90IGJlIGJsYWNrbGlzdGVkIGZvciB1c2Ugb2YgdGhlIGVmZmVjdCwgYW5kCi0gIC8vIDQpIHRo
ZSBVVUlEIG9mIHRoZSBlZmZlY3QgbXVzdCBiZSBhcHByb3ZlZCAoc29tZSBVVUlEcyBjYW4gYmUg
ZXhjbHVkZWQpLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5jZWxl
clN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNhblVzZUFjb3Vz
dGljRWNob0NhbmNlbGVyKCk7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9pc2VT
dXBwcmVzc29yU3VwcG9ydGVkKCkgewotICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuY2Fu
VXNlTm9pc2VTdXBwcmVzc29yKCk7Ci0gIH0KLSAgLy8gVE9ETyhoZW5yaWthKTogZGVwcmVjYXRl
ZDsgcmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQgYnkgYW55IGNsaWVudC4KLSAgcHVibGljIHN0
YXRpYyBib29sZWFuIGlzQXV0b21hdGljR2FpbkNvbnRyb2xTdXBwb3J0ZWQoKSB7Ci0gICAgLy8g
QWx3YXlzIHJldHVybiBmYWxzZSBoZXJlIHRvIGF2b2lkIHRyeWluZyB0byB1c2UgYW55IGJ1aWx0
LWluIEFHQy4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0aG9k
IGlmIHRoZSBkZWZhdWx0IGhhbmRsaW5nIG9mIHF1ZXJ5aW5nIHRoZSBuYXRpdmUgc2FtcGxlCi0g
IC8vIHJhdGUgc2hhbGwgYmUgb3ZlcnJpZGRlbi4gQ2FuIGJlIHVzZWZ1bCBvbiBzb21lIGRldmlj
ZXMgd2hlcmUgdGhlCi0gIC8vIGF2YWlsYWJsZSBBbmRyb2lkIEFQSXMgYXJlIGtub3duIHRvIHJl
dHVybiBpbnZhbGlkIHJlc3VsdHMuCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQg
c2V0RGVmYXVsdFNhbXBsZVJhdGVIeihpbnQgc2FtcGxlUmF0ZUh6KSB7Ci0gICAgaXNEZWZhdWx0
U2FtcGxlUmF0ZU92ZXJyaWRkZW4gPSB0cnVlOwotICAgIGRlZmF1bHRTYW1wbGVSYXRlSHogPSBz
YW1wbGVSYXRlSHo7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBib29sZWFu
IGlzRGVmYXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuKCkgewotICAgIHJldHVybiBpc0RlZmF1bHRT
YW1wbGVSYXRlT3ZlcnJpZGRlbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVk
IGludCBnZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgewotICAgIHJldHVybiBkZWZhdWx0U2FtcGxl
UmF0ZUh6OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0QmxhY2tMaXN0
ZWRNb2RlbHNGb3JBZWNVc2FnZSgpIHsKLSAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChXZWJSdGNB
dWRpb1V0aWxzLkJMQUNLTElTVEVEX0FFQ19NT0RFTFMpOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBMaXN0PFN0cmluZz4gZ2V0QmxhY2tMaXN0ZWRNb2RlbHNGb3JOc1VzYWdlKCkgewotICAgIHJl
dHVybiBBcnJheXMuYXNMaXN0KFdlYlJ0Y0F1ZGlvVXRpbHMuQkxBQ0tMSVNURURfTlNfTU9ERUxT
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25HaW5nZXJCcmVhZE9y
SGlnaGVyKCkgewotICAgIC8vIE5vdmVtYmVyIDIwMTA6IEFuZHJvaWQgMi4zLCBBUEkgTGV2ZWwg
OS4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09E
RVMuR0lOR0VSQlJFQUQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09u
SmVsbHlCZWFuT3JIaWdoZXIoKSB7Ci0gICAgLy8gSnVuZSAyMDEyOiBBbmRyb2lkIDQuMS4gQVBJ
IExldmVsIDE2LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVS
U0lPTl9DT0RFUy5KRUxMWV9CRUFOOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1
bm5pbmdPbkplbGx5QmVhbk1SMU9ySGlnaGVyKCkgewotICAgIC8vIE5vdmVtYmVyIDIwMTI6IEFu
ZHJvaWQgNC4yLiBBUEkgTGV2ZWwgMTcuCi0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lO
VCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpFTExZX0JFQU5fTVIxOwotICB9Ci0KLSAgcHVibGlj
IHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkplbGx5QmVhbk1SMk9ySGlnaGVyKCkgewotICAgIC8v
IEp1bHkgMjQsIDIwMTM6IEFuZHJvaWQgNC4zLiBBUEkgTGV2ZWwgMTguCi0gICAgcmV0dXJuIEJ1
aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpFTExZX0JFQU5fTVIy
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkxvbGxpcG9wT3JIaWdo
ZXIoKSB7Ci0gICAgLy8gQVBJIExldmVsIDIxLgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNE
S19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUDsKLSAgfQotCi0gIHB1YmxpYyBz
dGF0aWMgYm9vbGVhbiBydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkgewotICAgIC8vIEFQ
SSBMZXZlbCAyMy4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZF
UlNJT05fQ09ERVMuTTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25O
b3VnYXRPckhpZ2hlcigpIHsKLSAgICAvLyBBUEkgTGV2ZWwgMjQuCi0gICAgcmV0dXJuIEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk47Ci0gIH0KLQotICAvLyBI
ZWxwZXIgbWV0aG9kIGZvciBidWlsZGluZyBhIHN0cmluZyBvZiB0aHJlYWQgaW5mb3JtYXRpb24u
Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRocmVhZEluZm8oKSB7Ci0gICAgcmV0dXJuICJA
W25hbWU9IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgIiwgaWQ9IiArIFRo
cmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0SWQoKQotICAgICAgICArICJdIjsKLSAgfQotCi0gIC8v
IFJldHVybnMgdHJ1ZSBpZiB3ZSdyZSBydW5uaW5nIG9uIGVtdWxhdG9yLgotICBwdWJsaWMgc3Rh
dGljIGJvb2xlYW4gcnVubmluZ09uRW11bGF0b3IoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLkhBUkRX
QVJFLmVxdWFscygiZ29sZGZpc2giKSAmJiBCdWlsZC5CUkFORC5zdGFydHNXaXRoKCJnZW5lcmlj
XyIpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0
ZWQgZm9yIE9wZW5TTCBFUyB1c2FnZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRldmljZUlz
QmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCkgewotICAgIExpc3Q8U3RyaW5nPiBibGFja0xp
c3RlZE1vZGVscyA9IEFycmF5cy5hc0xpc3QoQkxBQ0tMSVNURURfT1BFTl9TTF9FU19NT0RFTFMp
OwotICAgIHJldHVybiBibGFja0xpc3RlZE1vZGVscy5jb250YWlucyhCdWlsZC5NT0RFTCk7Ci0g
IH0KLQotICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBidWlsZCwgdGFrZW4gZnJv
bSBzeXN0ZW0gcHJvcGVydGllcy4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGxvZ0RldmljZUluZm8o
U3RyaW5nIHRhZykgewotICAgIExvZ2dpbmcuZCh0YWcsICJBbmRyb2lkIFNESzogIiArIEJ1aWxk
LlZFUlNJT04uU0RLX0lOVCArICIsICIKLSAgICAgICAgICAgICsgIlJlbGVhc2U6ICIgKyBCdWls
ZC5WRVJTSU9OLlJFTEVBU0UgKyAiLCAiCi0gICAgICAgICAgICArICJCcmFuZDogIiArIEJ1aWxk
LkJSQU5EICsgIiwgIgotICAgICAgICAgICAgKyAiRGV2aWNlOiAiICsgQnVpbGQuREVWSUNFICsg
IiwgIgotICAgICAgICAgICAgKyAiSWQ6ICIgKyBCdWlsZC5JRCArICIsICIKLSAgICAgICAgICAg
ICsgIkhhcmR3YXJlOiAiICsgQnVpbGQuSEFSRFdBUkUgKyAiLCAiCi0gICAgICAgICAgICArICJN
YW51ZmFjdHVyZXI6ICIgKyBCdWlsZC5NQU5VRkFDVFVSRVIgKyAiLCAiCi0gICAgICAgICAgICAr
ICJNb2RlbDogIiArIEJ1aWxkLk1PREVMICsgIiwgIgotICAgICAgICAgICAgKyAiUHJvZHVjdDog
IiArIEJ1aWxkLlBST0RVQ1QpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIHRoZSBwcm9jZXNzIGhh
cyBhcyBzcGVjaWZpZWQgcGVybWlzc2lvbiBvciBub3QuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVh
biBoYXNQZXJtaXNzaW9uKENvbnRleHQgY29udGV4dCwgU3RyaW5nIHBlcm1pc3Npb24pIHsKLSAg
ICByZXR1cm4gY29udGV4dC5jaGVja1Blcm1pc3Npb24ocGVybWlzc2lvbiwgUHJvY2Vzcy5teVBp
ZCgpLCBQcm9jZXNzLm15VWlkKCkpCi0gICAgICAgID09IFBhY2thZ2VNYW5hZ2VyLlBFUk1JU1NJ
T05fR1JBTlRFRDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24u
Y2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uY2MJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfY29tbW9uLmNjCShub25leGlz
dGVudCkKQEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfY29tbW9uLmgi
Ci0KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTLmg+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9h
cnJheXNpemUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLQotbmFtZXNwYWNl
IHdlYnJ0YyB7Ci0KLS8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZ2l2ZW4gYW4g
aW50ZWdlciBTTF9SRVNVTFRfWFhYIGNvZGUuCi0vLyBUaGUgbWFwcGluZyBjYW4gYmUgZm91bmQg
aW4gPFNMRVMvT3BlblNMRVMuaD4uCi1jb25zdCBjaGFyKiBHZXRTTEVycm9yU3RyaW5nKHNpemVf
dCBjb2RlKSB7Ci0gIHN0YXRpYyBjb25zdCBjaGFyKiBzbF9lcnJvcl9zdHJpbmdzW10gPSB7Ci0g
ICAgICAiU0xfUkVTVUxUX1NVQ0NFU1MiLCAgICAgICAgICAgICAgICAgLy8gMAotICAgICAgIlNM
X1JFU1VMVF9QUkVDT05ESVRJT05TX1ZJT0xBVEVEIiwgIC8vIDEKLSAgICAgICJTTF9SRVNVTFRf
UEFSQU1FVEVSX0lOVkFMSUQiLCAgICAgICAvLyAyCi0gICAgICAiU0xfUkVTVUxUX01FTU9SWV9G
QUlMVVJFIiwgICAgICAgICAgLy8gMwotICAgICAgIlNMX1JFU1VMVF9SRVNPVVJDRV9FUlJPUiIs
ICAgICAgICAgIC8vIDQKLSAgICAgICJTTF9SRVNVTFRfUkVTT1VSQ0VfTE9TVCIsICAgICAgICAg
ICAvLyA1Ci0gICAgICAiU0xfUkVTVUxUX0lPX0VSUk9SIiwgICAgICAgICAgICAgICAgLy8gNgot
ICAgICAgIlNMX1JFU1VMVF9CVUZGRVJfSU5TVUZGSUNJRU5UIiwgICAgIC8vIDcKLSAgICAgICJT
TF9SRVNVTFRfQ09OVEVOVF9DT1JSVVBURUQiLCAgICAgICAvLyA4Ci0gICAgICAiU0xfUkVTVUxU
X0NPTlRFTlRfVU5TVVBQT1JURUQiLCAgICAgLy8gOQotICAgICAgIlNMX1JFU1VMVF9DT05URU5U
X05PVF9GT1VORCIsICAgICAgIC8vIDEwCi0gICAgICAiU0xfUkVTVUxUX1BFUk1JU1NJT05fREVO
SUVEIiwgICAgICAgLy8gMTEKLSAgICAgICJTTF9SRVNVTFRfRkVBVFVSRV9VTlNVUFBPUlRFRCIs
ICAgICAvLyAxMgotICAgICAgIlNMX1JFU1VMVF9JTlRFUk5BTF9FUlJPUiIsICAgICAgICAgIC8v
IDEzCi0gICAgICAiU0xfUkVTVUxUX1VOS05PV05fRVJST1IiLCAgICAgICAgICAgLy8gMTQKLSAg
ICAgICJTTF9SRVNVTFRfT1BFUkFUSU9OX0FCT1JURUQiLCAgICAgICAvLyAxNQotICAgICAgIlNM
X1JFU1VMVF9DT05UUk9MX0xPU1QiLCAgICAgICAgICAgIC8vIDE2Ci0gIH07Ci0KLSAgaWYgKGNv
ZGUgPj0gYXJyYXlzaXplKHNsX2Vycm9yX3N0cmluZ3MpKSB7Ci0gICAgcmV0dXJuICJTTF9SRVNV
TFRfVU5LTk9XTl9FUlJPUiI7Ci0gIH0KLSAgcmV0dXJuIHNsX2Vycm9yX3N0cmluZ3NbY29kZV07
Ci19Ci0KLVNMRGF0YUZvcm1hdF9QQ00gQ3JlYXRlUENNQ29uZmlndXJhdGlvbihzaXplX3QgY2hh
bm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNhbXBs
ZV9yYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBi
aXRzX3Blcl9zYW1wbGUpIHsKLSAgUlRDX0NIRUNLX0VRKGJpdHNfcGVyX3NhbXBsZSwgU0xfUENN
U0FNUExFRk9STUFUX0ZJWEVEXzE2KTsKLSAgU0xEYXRhRm9ybWF0X1BDTSBmb3JtYXQ7Ci0gIGZv
cm1hdC5mb3JtYXRUeXBlID0gU0xfREFUQUZPUk1BVF9QQ007Ci0gIGZvcm1hdC5udW1DaGFubmVs
cyA9IHN0YXRpY19jYXN0PFNMdWludDMyPihjaGFubmVscyk7Ci0gIC8vIE5vdGUgdGhhdCwgdGhl
IHVuaXQgb2Ygc2FtcGxlIHJhdGUgaXMgYWN0dWFsbHkgaW4gbWlsbGlIZXJ0eiBhbmQgbm90IEhl
cnR6LgotICBzd2l0Y2ggKHNhbXBsZV9yYXRlKSB7Ci0gICAgY2FzZSA4MDAwOgotICAgICAgZm9y
bWF0LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElOR1JBVEVfODsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2UgMTYwMDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1BlclNlYyA9IFNMX1NBTVBMSU5HUkFU
RV8xNjsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjIwNTA6Ci0gICAgICBmb3JtYXQuc2FtcGxl
c1BlclNlYyA9IFNMX1NBTVBMSU5HUkFURV8yMl8wNTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2Ug
MzIwMDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1BlclNlYyA9IFNMX1NBTVBMSU5HUkFURV8zMjsK
LSAgICAgIGJyZWFrOwotICAgIGNhc2UgNDQxMDA6Ci0gICAgICBmb3JtYXQuc2FtcGxlc1BlclNl
YyA9IFNMX1NBTVBMSU5HUkFURV80NF8xOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0ODAwMDoK
LSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzQ4OwotICAgICAg
YnJlYWs7Ci0gICAgY2FzZSA2NDAwMDoKLSAgICAgIGZvcm1hdC5zYW1wbGVzUGVyU2VjID0gU0xf
U0FNUExJTkdSQVRFXzY0OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSA4ODIwMDoKLSAgICAgIGZv
cm1hdC5zYW1wbGVzUGVyU2VjID0gU0xfU0FNUExJTkdSQVRFXzg4XzI7Ci0gICAgICBicmVhazsK
LSAgICBjYXNlIDk2MDAwOgotICAgICAgZm9ybWF0LnNhbXBsZXNQZXJTZWMgPSBTTF9TQU1QTElO
R1JBVEVfOTY7Ci0gICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgUlRDX0NIRUNLKGZh
bHNlKSA8PCAiVW5zdXBwb3J0ZWQgc2FtcGxlIHJhdGU6ICIgPDwgc2FtcGxlX3JhdGU7Ci0gICAg
ICBicmVhazsKLSAgfQotICBmb3JtYXQuYml0c1BlclNhbXBsZSA9IFNMX1BDTVNBTVBMRUZPUk1B
VF9GSVhFRF8xNjsKLSAgZm9ybWF0LmNvbnRhaW5lclNpemUgPSBTTF9QQ01TQU1QTEVGT1JNQVRf
RklYRURfMTY7Ci0gIGZvcm1hdC5lbmRpYW5uZXNzID0gU0xfQllURU9SREVSX0xJVFRMRUVORElB
TjsKLSAgaWYgKGZvcm1hdC5udW1DaGFubmVscyA9PSAxKSB7Ci0gICAgZm9ybWF0LmNoYW5uZWxN
YXNrID0gU0xfU1BFQUtFUl9GUk9OVF9DRU5URVI7Ci0gIH0gZWxzZSBpZiAoZm9ybWF0Lm51bUNo
YW5uZWxzID09IDIpIHsKLSAgICBmb3JtYXQuY2hhbm5lbE1hc2sgPSBTTF9TUEVBS0VSX0ZST05U
X0xFRlQgfCBTTF9TUEVBS0VSX0ZST05UX1JJR0hUOwotICB9IGVsc2UgewotICAgIFJUQ19DSEVD
SyhmYWxzZSkgPDwgIlVuc3VwcG9ydGVkIG51bWJlciBvZiBjaGFubmVsczogIgotICAgICAgICAg
ICAgICAgICAgICAgPDwgZm9ybWF0Lm51bUNoYW5uZWxzOwotICB9Ci0gIHJldHVybiBmb3JtYXQ7
Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNs
ZXNfY29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24u
aAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEz
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0j
aWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX09QRU5TTEVTX0NPTU1P
Tl9IXwotI2RlZmluZSBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9PUEVOU0xF
U19DT01NT05fSF8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPFNMRVMvT3BlblNM
RVMuaD4KLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVz
ZW50YXRpb24gZ2l2ZW4gYW4gaW50ZWdlciBTTF9SRVNVTFRfWFhYIGNvZGUuCi0vLyBUaGUgbWFw
cGluZyBjYW4gYmUgZm91bmQgaW4gPFNMRVMvT3BlblNMRVMuaD4uCi1jb25zdCBjaGFyKiBHZXRT
TEVycm9yU3RyaW5nKHNpemVfdCBjb2RlKTsKLQotLy8gQ29uZmlndXJlcyBhbiBTTF9EQVRBRk9S
TUFUX1BDTSBzdHJ1Y3R1cmUgYmFzZWQgb24gbmF0aXZlIGF1ZGlvIHBhcmFtZXRlcnMuCi1TTERh
dGFGb3JtYXRfUENNIENyZWF0ZVBDTUNvbmZpZ3VyYXRpb24oc2l6ZV90IGNoYW5uZWxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzYW1wbGVfcmF0ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYml0c19wZXJfc2Ft
cGxlKTsKLQotLy8gSGVscGVyIGNsYXNzIGZvciB1c2luZyBTTE9iamVjdEl0ZiBpbnRlcmZhY2Vz
LgotdGVtcGxhdGUgPHR5cGVuYW1lIFNMVHlwZSwgdHlwZW5hbWUgU0xEZXJlZlR5cGU+Ci1jbGFz
cyBTY29wZWRTTE9iamVjdCB7Ci0gcHVibGljOgotICBTY29wZWRTTE9iamVjdCgpIDogb2JqXyhu
dWxscHRyKSB7fQotCi0gIH5TY29wZWRTTE9iamVjdCgpIHsgUmVzZXQoKTsgfQotCi0gIFNMVHlw
ZSogUmVjZWl2ZSgpIHsKLSAgICBSVENfRENIRUNLKCFvYmpfKTsKLSAgICByZXR1cm4gJm9ial87
Ci0gIH0KLQotICBTTERlcmVmVHlwZSBvcGVyYXRvci0+KCkgeyByZXR1cm4gKm9ial87IH0KLQot
ICBTTFR5cGUgR2V0KCkgY29uc3QgeyByZXR1cm4gb2JqXzsgfQotCi0gIHZvaWQgUmVzZXQoKSB7
Ci0gICAgaWYgKG9ial8pIHsKLSAgICAgICgqb2JqXyktPkRlc3Ryb3kob2JqXyk7Ci0gICAgICBv
YmpfID0gbnVsbHB0cjsKLSAgICB9Ci0gIH0KLQotIHByaXZhdGU6Ci0gIFNMVHlwZSBvYmpfOwot
fTsKLQotdHlwZWRlZiBTY29wZWRTTE9iamVjdDxTTE9iamVjdEl0ZiwgY29uc3QgU0xPYmplY3RJ
dGZfKj4gU2NvcGVkU0xPYmplY3RJdGY7Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2Vu
ZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9PUEVOU0xFU19DT01N
T05fSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmNjCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNsZXNfcGxheWVyLmNjCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDQy
NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3Qg
YXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJl
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICog
IHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBj
YW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBw
cm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5oIgotCi0jaW5jbHVkZSA8
YW5kcm9pZC9sb2cuaD4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2FycmF5c2l6ZS5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2Zvcm1h
dF9tYWNyb3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aW1ldXRpbHMuaCIKLSNpbmNsdWRl
ICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaCIKLSNp
bmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2Vy
LmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2ZpbmVfYXVkaW9fYnVm
ZmVyLmgiCi0KLSNkZWZpbmUgVEFHICJPcGVuU0xFU1BsYXllciIKLSNkZWZpbmUgQUxPR1YoLi4u
KSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1ZFUkJPU0UsIFRBRywgX19WQV9BUkdT
X18pCi0jZGVmaW5lIEFMT0dEKC4uLikgX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19E
RUJVRywgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxPR0UoLi4uKSBfX2FuZHJvaWRfbG9n
X3ByaW50KEFORFJPSURfTE9HX0VSUk9SLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9H
VyguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfV0FSTiwgVEFHLCBfX1ZBX0FS
R1NfXykKLSNkZWZpbmUgQUxPR0koLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9H
X0lORk8sIFRBRywgX19WQV9BUkdTX18pCi0KLSNkZWZpbmUgUkVUVVJOX09OX0VSUk9SKG9wLCAu
Li4pICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGRvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIFNMcmVzdWx0IGVyciA9IChv
cCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoZXJyICE9IFNM
X1JFU1VMVF9TVUNDRVNTKSB7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBBTE9HRSgi
JXMgZmFpbGVkOiAlcyIsICNvcCwgR2V0U0xFcnJvclN0cmluZyhlcnIpKTsgXAotICAgICAgcmV0
dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g
IH0gd2hpbGUgKDApCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1PcGVuU0xFU1BsYXllcjo6T3Bl
blNMRVNQbGF5ZXIoQXVkaW9NYW5hZ2VyKiBhdWRpb19tYW5hZ2VyKQotICAgIDogYXVkaW9fbWFu
YWdlcl8oYXVkaW9fbWFuYWdlciksCi0gICAgICBhdWRpb19wYXJhbWV0ZXJzXyhhdWRpb19tYW5h
Z2VyLT5HZXRQbGF5b3V0QXVkaW9QYXJhbWV0ZXJzKCkpLAotICAgICAgYXVkaW9fZGV2aWNlX2J1
ZmZlcl8obnVsbHB0ciksCi0gICAgICBpbml0aWFsaXplZF8oZmFsc2UpLAotICAgICAgcGxheWlu
Z18oZmFsc2UpLAotICAgICAgYnVmZmVyX2luZGV4XygwKSwKLSAgICAgIGVuZ2luZV8obnVsbHB0
ciksCi0gICAgICBwbGF5ZXJfKG51bGxwdHIpLAotICAgICAgc2ltcGxlX2J1ZmZlcl9xdWV1ZV8o
bnVsbHB0ciksCi0gICAgICB2b2x1bWVfKG51bGxwdHIpLAotICAgICAgbGFzdF9wbGF5X3RpbWVf
KDApIHsKLSAgQUxPR0QoImN0b3IlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgLy8g
VXNlIG5hdGl2ZSBhdWRpbyBvdXRwdXQgcGFyYW1ldGVycyBwcm92aWRlZCBieSB0aGUgYXVkaW8g
bWFuYWdlciBhbmQKLSAgLy8gZGVmaW5lIHRoZSBQQ00gZm9ybWF0IHN0cnVjdHVyZS4KLSAgcGNt
X2Zvcm1hdF8gPSBDcmVhdGVQQ01Db25maWd1cmF0aW9uKGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5u
ZWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXJh
bWV0ZXJzXy5zYW1wbGVfcmF0ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXVkaW9fcGFyYW1ldGVyc18uYml0c19wZXJfc2FtcGxlKCkpOwotICAvLyBEZXRhY2gg
ZnJvbSB0aGlzIHRocmVhZCBzaW5jZSB3ZSB3YW50IHRvIHVzZSB0aGUgY2hlY2tlciB0byB2ZXJp
ZnkgY2FsbHMKLSAgLy8gZnJvbSB0aGUgaW50ZXJuYWwgIGF1ZGlvIHRocmVhZC4KLSAgdGhyZWFk
X2NoZWNrZXJfb3BlbnNsZXNfLkRldGFjaEZyb21UaHJlYWQoKTsKLX0KLQotT3BlblNMRVNQbGF5
ZXI6On5PcGVuU0xFU1BsYXllcigpIHsKLSAgQUxPR0QoImR0b3IlcyIsIEdldFRocmVhZEluZm8o
KS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRo
cmVhZCgpKTsKLSAgVGVybWluYXRlKCk7Ci0gIERlc3Ryb3lBdWRpb1BsYXllcigpOwotICBEZXN0
cm95TWl4KCk7Ci0gIGVuZ2luZV8gPSBudWxscHRyOwotICBSVENfRENIRUNLKCFlbmdpbmVfKTsK
LSAgUlRDX0RDSEVDSyghb3V0cHV0X21peF8uR2V0KCkpOwotICBSVENfRENIRUNLKCFwbGF5ZXJf
KTsKLSAgUlRDX0RDSEVDSyghc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pOwotICBSVENfRENIRUNLKCF2
b2x1bWVfKTsKLX0KLQotaW50IE9wZW5TTEVTUGxheWVyOjpJbml0KCkgewotICBBTE9HRCgiSW5p
dCVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVj
a2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1cm4gMDsKLX0KLQotaW50IE9wZW5T
TEVTUGxheWVyOjpUZXJtaW5hdGUoKSB7Ci0gIEFMT0dEKCJUZXJtaW5hdGUlcyIsIEdldFRocmVh
ZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25W
YWxpZFRocmVhZCgpKTsKLSAgU3RvcFBsYXlvdXQoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBP
cGVuU0xFU1BsYXllcjo6SW5pdFBsYXlvdXQoKSB7Ci0gIEFMT0dEKCJJbml0UGxheW91dCVzIiwg
R2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5D
YWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfRENIRUNLKCFpbml0aWFsaXplZF8pOwotICBS
VENfRENIRUNLKCFwbGF5aW5nXyk7Ci0gIGlmICghT2J0YWluRW5naW5lSW50ZXJmYWNlKCkpIHsK
LSAgICBBTE9HRSgiRmFpbGVkIHRvIG9idGFpbiBTTCBFbmdpbmUgaW50ZXJmYWNlIik7Ci0gICAg
cmV0dXJuIC0xOwotICB9Ci0gIENyZWF0ZU1peCgpOwotICBpbml0aWFsaXplZF8gPSB0cnVlOwot
ICBidWZmZXJfaW5kZXhfID0gMDsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXll
cjo6U3RhcnRQbGF5b3V0KCkgewotICBBTE9HRCgiU3RhcnRQbGF5b3V0JXMiLCBHZXRUaHJlYWRJ
bmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFs
aWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSygh
cGxheWluZ18pOwotICBpZiAoZmluZV9hdWRpb19idWZmZXJfKSB7Ci0gICAgZmluZV9hdWRpb19i
dWZmZXJfLT5SZXNldFBsYXlvdXQoKTsKLSAgfQotICAvLyBUaGUgbnVtYmVyIG9mIGxvd2VyIGxh
dGVuY3kgYXVkaW8gcGxheWVycyBpcyBsaW1pdGVkLCBoZW5jZSB3ZSBjcmVhdGUgdGhlCi0gIC8v
IGF1ZGlvIHBsYXllciBpbiBTdGFydCgpIGFuZCBkZXN0cm95IGl0IGluIFN0b3AoKS4KLSAgQ3Jl
YXRlQXVkaW9QbGF5ZXIoKTsKLSAgLy8gRmlsbCB1cCBhdWRpbyBidWZmZXJzIHRvIGF2b2lkIGlu
aXRpYWwgZ2xpdGNoIGFuZCB0byBlbnN1cmUgdGhhdCBwbGF5YmFjawotICAvLyBzdGFydHMgd2hl
biBtb2RlIGlzIGxhdGVyIGNoYW5nZWQgdG8gU0xfUExBWVNUQVRFX1BMQVlJTkcuCi0gIC8vIFRP
RE8oaGVucmlrYSk6IHdlIGNhbiBzYXZlIHNvbWUgZGVsYXkgYnkgb25seSBtYWtpbmcgb25lIGNh
bGwgdG8KLSAgLy8gRW5xdWV1ZVBsYXlvdXREYXRhLiBNb3N0IGxpa2VseSBub3Qgd29ydGggdGhl
IHJpc2sgb2YgYWRkaW5nIGEgZ2xpdGNoLgotICBsYXN0X3BsYXlfdGltZV8gPSBydGM6OlRpbWUo
KTsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBrTnVtT2ZPcGVuU0xFU0J1ZmZlcnM7ICsraSkgewot
ICAgIEVucXVldWVQbGF5b3V0RGF0YSh0cnVlKTsKLSAgfQotICAvLyBTdGFydCBzdHJlYW1pbmcg
ZGF0YSBieSBzZXR0aW5nIHRoZSBwbGF5IHN0YXRlIHRvIFNMX1BMQVlTVEFURV9QTEFZSU5HLgot
ICAvLyBGb3IgYSBwbGF5ZXIgb2JqZWN0LCB3aGVuIHRoZSBvYmplY3QgaXMgaW4gdGhlIFNMX1BM
QVlTVEFURV9QTEFZSU5HCi0gIC8vIHN0YXRlLCBhZGRpbmcgYnVmZmVycyB3aWxsIGltcGxpY2l0
bHkgc3RhcnQgcGxheWJhY2suCi0gIFJFVFVSTl9PTl9FUlJPUigoKnBsYXllcl8pLT5TZXRQbGF5
U3RhdGUocGxheWVyXywgU0xfUExBWVNUQVRFX1BMQVlJTkcpLCAtMSk7Ci0gIHBsYXlpbmdfID0g
KEdldFBsYXlTdGF0ZSgpID09IFNMX1BMQVlTVEFURV9QTEFZSU5HKTsKLSAgUlRDX0RDSEVDSyhw
bGF5aW5nXyk7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNQbGF5ZXI6OlN0b3BQbGF5
b3V0KCkgewotICBBTE9HRCgiU3RvcFBsYXlvdXQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigp
KTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsK
LSAgaWYgKCFpbml0aWFsaXplZF8gfHwgIXBsYXlpbmdfKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0K
LSAgLy8gU3RvcCBwbGF5aW5nIGJ5IHNldHRpbmcgdGhlIHBsYXkgc3RhdGUgdG8gU0xfUExBWVNU
QVRFX1NUT1BQRUQuCi0gIFJFVFVSTl9PTl9FUlJPUigoKnBsYXllcl8pLT5TZXRQbGF5U3RhdGUo
cGxheWVyXywgU0xfUExBWVNUQVRFX1NUT1BQRUQpLCAtMSk7Ci0gIC8vIENsZWFyIHRoZSBidWZm
ZXIgcXVldWUgdG8gZmx1c2ggb3V0IGFueSByZW1haW5pbmcgZGF0YS4KLSAgUkVUVVJOX09OX0VS
Uk9SKCgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pLT5DbGVhcihzaW1wbGVfYnVmZmVyX3F1ZXVlXyks
IC0xKTsKLSNpZiBSVENfRENIRUNLX0lTX09OCi0gIC8vIFZlcmlmeSB0aGF0IHRoZSBidWZmZXIg
cXVldWUgaXMgaW4gZmFjdCBjbGVhcmVkIGFzIGl0IHNob3VsZC4KLSAgU0xBbmRyb2lkU2ltcGxl
QnVmZmVyUXVldWVTdGF0ZSBidWZmZXJfcXVldWVfc3RhdGU7Ci0gICgqc2ltcGxlX2J1ZmZlcl9x
dWV1ZV8pLT5HZXRTdGF0ZShzaW1wbGVfYnVmZmVyX3F1ZXVlXywgJmJ1ZmZlcl9xdWV1ZV9zdGF0
ZSk7Ci0gIFJUQ19EQ0hFQ0tfRVEoMHUsIGJ1ZmZlcl9xdWV1ZV9zdGF0ZS5jb3VudCk7Ci0gIFJU
Q19EQ0hFQ0tfRVEoMHUsIGJ1ZmZlcl9xdWV1ZV9zdGF0ZS5pbmRleCk7Ci0jZW5kaWYKLSAgLy8g
VGhlIG51bWJlciBvZiBsb3dlciBsYXRlbmN5IGF1ZGlvIHBsYXllcnMgaXMgbGltaXRlZCwgaGVu
Y2Ugd2UgY3JlYXRlIHRoZQotICAvLyBhdWRpbyBwbGF5ZXIgaW4gU3RhcnQoKSBhbmQgZGVzdHJv
eSBpdCBpbiBTdG9wKCkuCi0gIERlc3Ryb3lBdWRpb1BsYXllcigpOwotICB0aHJlYWRfY2hlY2tl
cl9vcGVuc2xlc18uRGV0YWNoRnJvbVRocmVhZCgpOwotICBpbml0aWFsaXplZF8gPSBmYWxzZTsK
LSAgcGxheWluZ18gPSBmYWxzZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXll
cjo6U3BlYWtlclZvbHVtZUlzQXZhaWxhYmxlKGJvb2wmIGF2YWlsYWJsZSkgewotICBhdmFpbGFi
bGUgPSBmYWxzZTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1BsYXllcjo6TWF4U3Bl
YWtlclZvbHVtZSh1aW50MzJfdCYgbWF4Vm9sdW1lKSBjb25zdCB7Ci0gIHJldHVybiAtMTsKLX0K
LQotaW50IE9wZW5TTEVTUGxheWVyOjpNaW5TcGVha2VyVm9sdW1lKHVpbnQzMl90JiBtaW5Wb2x1
bWUpIGNvbnN0IHsKLSAgcmV0dXJuIC0xOwotfQotCi1pbnQgT3BlblNMRVNQbGF5ZXI6OlNldFNw
ZWFrZXJWb2x1bWUodWludDMyX3Qgdm9sdW1lKSB7Ci0gIHJldHVybiAtMTsKLX0KLQotaW50IE9w
ZW5TTEVTUGxheWVyOjpTcGVha2VyVm9sdW1lKHVpbnQzMl90JiB2b2x1bWUpIGNvbnN0IHsKLSAg
cmV0dXJuIC0xOwotfQotCi12b2lkIE9wZW5TTEVTUGxheWVyOjpBdHRhY2hBdWRpb0J1ZmZlcihB
dWRpb0RldmljZUJ1ZmZlciogYXVkaW9CdWZmZXIpIHsKLSAgQUxPR0QoIkF0dGFjaEF1ZGlvQnVm
ZmVyIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQo
KSk7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfID0gYXVkaW9CdWZmZXI7Ci0gIGNvbnN0IGludCBz
YW1wbGVfcmF0ZV9oeiA9IGF1ZGlvX3BhcmFtZXRlcnNfLnNhbXBsZV9yYXRlKCk7Ci0gIEFMT0dE
KCJTZXRQbGF5b3V0U2FtcGxlUmF0ZSglZCkiLCBzYW1wbGVfcmF0ZV9oeik7Ci0gIGF1ZGlvX2Rl
dmljZV9idWZmZXJfLT5TZXRQbGF5b3V0U2FtcGxlUmF0ZShzYW1wbGVfcmF0ZV9oeik7Ci0gIGNv
bnN0IHNpemVfdCBjaGFubmVscyA9IGF1ZGlvX3BhcmFtZXRlcnNfLmNoYW5uZWxzKCk7Ci0gIEFM
T0dEKCJTZXRQbGF5b3V0Q2hhbm5lbHMoJSIgUFJJdVMgIikiLCBjaGFubmVscyk7Ci0gIGF1ZGlv
X2RldmljZV9idWZmZXJfLT5TZXRQbGF5b3V0Q2hhbm5lbHMoY2hhbm5lbHMpOwotICBSVENfQ0hF
Q0soYXVkaW9fZGV2aWNlX2J1ZmZlcl8pOwotICBBbGxvY2F0ZURhdGFCdWZmZXJzKCk7Ci19Ci0K
LXZvaWQgT3BlblNMRVNQbGF5ZXI6OkFsbG9jYXRlRGF0YUJ1ZmZlcnMoKSB7Ci0gIEFMT0dEKCJB
bGxvY2F0ZURhdGFCdWZmZXJzIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxl
ZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9idWZmZXJfcXVldWVfKTsK
LSAgUlRDX0NIRUNLKGF1ZGlvX2RldmljZV9idWZmZXJfKTsKLSAgLy8gQ3JlYXRlIGEgbW9kaWZp
ZWQgYXVkaW8gYnVmZmVyIGNsYXNzIHdoaWNoIGFsbG93cyB1cyB0byBhc2sgZm9yIGFueSBudW1i
ZXIKLSAgLy8gb2Ygc2FtcGxlcyAoYW5kIG5vdCBvbmx5IG11bHRpcGxlIG9mIDEwbXMpIHRvIG1h
dGNoIHRoZSBuYXRpdmUgT3BlblNMIEVTCi0gIC8vIGJ1ZmZlciBzaXplLiBUaGUgbmF0aXZlIGJ1
ZmZlciBzaXplIGNvcnJlc3BvbmRzIHRvIHRoZQotICAvLyBQUk9QRVJUWV9PVVRQVVRfRlJBTUVT
X1BFUl9CVUZGRVIgcHJvcGVydHkgd2hpY2ggaXMgdGhlIG51bWJlciBvZiBhdWRpbwotICAvLyBm
cmFtZXMgdGhhdCB0aGUgSEFMIChIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllcikgYnVmZmVyIGNh
biBob2xkLiBJdCBpcwotICAvLyByZWNvbW1lbmRlZCB0byBjb25zdHJ1Y3QgYXVkaW8gYnVmZmVy
cyBzbyB0aGF0IHRoZXkgY29udGFpbiBhbiBleGFjdAotICAvLyBtdWx0aXBsZSBvZiB0aGlzIG51
bWJlci4gSWYgc28sIGNhbGxiYWNrcyB3aWxsIG9jY3VyIGF0IHJlZ3VsYXIgaW50ZXJ2YWxzLAot
ICAvLyB3aGljaCByZWR1Y2VzIGppdHRlci4KLSAgQUxPR0QoIm5hdGl2ZSBidWZmZXIgc2l6ZTog
JSIgUFJJdVMsIGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVyKCkpOwotICBBTE9H
RCgibmF0aXZlIGJ1ZmZlciBzaXplIGluIG1zOiAlLjJmIiwKLSAgICAgICAgYXVkaW9fcGFyYW1l
dGVyc18uR2V0QnVmZmVyU2l6ZUluTWlsbGlzZWNvbmRzKCkpOwotICBmaW5lX2F1ZGlvX2J1ZmZl
cl8ucmVzZXQobmV3IEZpbmVBdWRpb0J1ZmZlcigKLSAgICAgIGF1ZGlvX2RldmljZV9idWZmZXJf
LCBhdWRpb19wYXJhbWV0ZXJzXy5HZXRCeXRlc1BlckJ1ZmZlcigpLAotICAgICAgYXVkaW9fcGFy
YW1ldGVyc18uc2FtcGxlX3JhdGUoKSkpOwotICAvLyBFYWNoIGJ1ZmZlciBtdXN0IGJlIG9mIHRo
aXMgc2l6ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBtZW1jcHkgd2hpbGUgY2FjaGluZwotICAvLyBk
YXRhIGJldHdlZW4gc3VjY2Vzc2l2ZSBjYWxsYmFja3MuCi0gIGNvbnN0IHNpemVfdCByZXF1aXJl
ZF9idWZmZXJfc2l6ZSA9Ci0gICAgICBmaW5lX2F1ZGlvX2J1ZmZlcl8tPlJlcXVpcmVkUGxheW91
dEJ1ZmZlclNpemVCeXRlcygpOwotICBBTE9HRCgicmVxdWlyZWQgYnVmZmVyIHNpemU6ICUiIFBS
SXVTLCByZXF1aXJlZF9idWZmZXJfc2l6ZSk7Ci0gIGZvciAoaW50IGkgPSAwOyBpIDwga051bU9m
T3BlblNMRVNCdWZmZXJzOyArK2kpIHsKLSAgICBhdWRpb19idWZmZXJzX1tpXS5yZXNldChuZXcg
U0xpbnQ4W3JlcXVpcmVkX2J1ZmZlcl9zaXplXSk7Ci0gIH0KLX0KLQotYm9vbCBPcGVuU0xFU1Bs
YXllcjo6T2J0YWluRW5naW5lSW50ZXJmYWNlKCkgewotICBBTE9HRCgiT2J0YWluRW5naW5lSW50
ZXJmYWNlIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJl
YWQoKSk7Ci0gIGlmIChlbmdpbmVfKQotICAgIHJldHVybiB0cnVlOwotICAvLyBHZXQgYWNjZXNz
IHRvIChvciBjcmVhdGUgaWYgbm90IGFscmVhZHkgZXhpc3RpbmcpIHRoZSBnbG9iYWwgT3BlblNM
IEVuZ2luZQotICAvLyBvYmplY3QuCi0gIFNMT2JqZWN0SXRmIGVuZ2luZV9vYmplY3QgPSBhdWRp
b19tYW5hZ2VyXy0+R2V0T3BlblNMRW5naW5lKCk7Ci0gIGlmIChlbmdpbmVfb2JqZWN0ID09IG51
bGxwdHIpIHsKLSAgICBBTE9HRSgiRmFpbGVkIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIE9wZW5TTCBl
bmdpbmUiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgLy8gR2V0IHRoZSBTTCBFbmdpbmUg
SW50ZXJmYWNlIHdoaWNoIGlzIGltcGxpY2l0LgotICBSRVRVUk5fT05fRVJST1IoCi0gICAgICAo
KmVuZ2luZV9vYmplY3QpLT5HZXRJbnRlcmZhY2UoZW5naW5lX29iamVjdCwgU0xfSUlEX0VOR0lO
RSwgJmVuZ2luZV8pLAotICAgICAgZmFsc2UpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBP
cGVuU0xFU1BsYXllcjo6Q3JlYXRlTWl4KCkgewotICBBTE9HRCgiQ3JlYXRlTWl4Iik7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFJUQ19E
Q0hFQ0soZW5naW5lXyk7Ci0gIGlmIChvdXRwdXRfbWl4Xy5HZXQoKSkKLSAgICByZXR1cm4gdHJ1
ZTsKLQotICAvLyBDcmVhdGUgdGhlIG91cHV0IG1peCBvbiB0aGUgZW5naW5lIG9iamVjdC4gTm8g
aW50ZXJmYWNlcyB3aWxsIGJlIHVzZWQuCi0gIFJFVFVSTl9PTl9FUlJPUigoKmVuZ2luZV8pLT5D
cmVhdGVPdXRwdXRNaXgoZW5naW5lXywgb3V0cHV0X21peF8uUmVjZWl2ZSgpLCAwLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGxwdHIsIG51bGxwdHIp
LAotICAgICAgICAgICAgICAgICAgZmFsc2UpOwotICBSRVRVUk5fT05fRVJST1Iob3V0cHV0X21p
eF8tPlJlYWxpemUob3V0cHV0X21peF8uR2V0KCksIFNMX0JPT0xFQU5fRkFMU0UpLAotICAgICAg
ICAgICAgICAgICAgZmFsc2UpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBPcGVuU0xFU1Bs
YXllcjo6RGVzdHJveU1peCgpIHsKLSAgQUxPR0QoIkRlc3Ryb3lNaXgiKTsKLSAgUlRDX0RDSEVD
Syh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKCFvdXRwdXRf
bWl4Xy5HZXQoKSkKLSAgICByZXR1cm47Ci0gIG91dHB1dF9taXhfLlJlc2V0KCk7Ci19Ci0KLWJv
b2wgT3BlblNMRVNQbGF5ZXI6OkNyZWF0ZUF1ZGlvUGxheWVyKCkgewotICBBTE9HRCgiQ3JlYXRl
QXVkaW9QbGF5ZXIiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxp
ZFRocmVhZCgpKTsKLSAgUlRDX0RDSEVDSyhvdXRwdXRfbWl4Xy5HZXQoKSk7Ci0gIGlmIChwbGF5
ZXJfb2JqZWN0Xy5HZXQoKSkKLSAgICByZXR1cm4gdHJ1ZTsKLSAgUlRDX0RDSEVDSyghcGxheWVy
Xyk7Ci0gIFJUQ19EQ0hFQ0soIXNpbXBsZV9idWZmZXJfcXVldWVfKTsKLSAgUlRDX0RDSEVDSygh
dm9sdW1lXyk7Ci0KLSAgLy8gc291cmNlOiBBbmRyb2lkIFNpbXBsZSBCdWZmZXIgUXVldWUgRGF0
YSBMb2NhdG9yIGlzIHNvdXJjZS4KLSAgU0xEYXRhTG9jYXRvcl9BbmRyb2lkU2ltcGxlQnVmZmVy
UXVldWUgc2ltcGxlX2J1ZmZlcl9xdWV1ZSA9IHsKLSAgICAgIFNMX0RBVEFMT0NBVE9SX0FORFJP
SURTSU1QTEVCVUZGRVJRVUVVRSwKLSAgICAgIHN0YXRpY19jYXN0PFNMdWludDMyPihrTnVtT2ZP
cGVuU0xFU0J1ZmZlcnMpfTsKLSAgU0xEYXRhU291cmNlIGF1ZGlvX3NvdXJjZSA9IHsmc2ltcGxl
X2J1ZmZlcl9xdWV1ZSwgJnBjbV9mb3JtYXRffTsKLQotICAvLyBzaW5rOiBPdXRwdXRNaXgtYmFz
ZWQgZGF0YSBpcyBzaW5rLgotICBTTERhdGFMb2NhdG9yX091dHB1dE1peCBsb2NhdG9yX291dHB1
dF9taXggPSB7U0xfREFUQUxPQ0FUT1JfT1VUUFVUTUlYLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X21peF8uR2V0KCl9OwotICBTTERhdGFT
aW5rIGF1ZGlvX3NpbmsgPSB7JmxvY2F0b3Jfb3V0cHV0X21peCwgbnVsbHB0cn07Ci0KLSAgLy8g
RGVmaW5lIGludGVyZmFjZXMgdGhhdCB3ZSBpbmRlbmQgdG8gdXNlIGFuZCByZWFsaXplLgotICBj
b25zdCBTTEludGVyZmFjZUlEIGludGVyZmFjZV9pZHNbXSA9IHsKLSAgICAgIFNMX0lJRF9BTkRS
T0lEQ09ORklHVVJBVElPTiwgU0xfSUlEX0JVRkZFUlFVRVVFLCBTTF9JSURfVk9MVU1FfTsKLSAg
Y29uc3QgU0xib29sZWFuIGludGVyZmFjZV9yZXF1aXJlZFtdID0gewotICAgICAgU0xfQk9PTEVB
Tl9UUlVFLCBTTF9CT09MRUFOX1RSVUUsIFNMX0JPT0xFQU5fVFJVRX07Ci0KLSAgLy8gQ3JlYXRl
IHRoZSBhdWRpbyBwbGF5ZXIgb24gdGhlIGVuZ2luZSBpbnRlcmZhY2UuCi0gIFJFVFVSTl9PTl9F
UlJPUigKLSAgICAgICgqZW5naW5lXyktPkNyZWF0ZUF1ZGlvUGxheWVyKAotICAgICAgICAgIGVu
Z2luZV8sIHBsYXllcl9vYmplY3RfLlJlY2VpdmUoKSwgJmF1ZGlvX3NvdXJjZSwgJmF1ZGlvX3Np
bmssCi0gICAgICAgICAgYXJyYXlzaXplKGludGVyZmFjZV9pZHMpLCBpbnRlcmZhY2VfaWRzLCBp
bnRlcmZhY2VfcmVxdWlyZWQpLAotICAgICAgZmFsc2UpOwotCi0gIC8vIFVzZSB0aGUgQW5kcm9p
ZCBjb25maWd1cmF0aW9uIGludGVyZmFjZSB0byBzZXQgcGxhdGZvcm0tc3BlY2lmaWMKLSAgLy8g
cGFyYW1ldGVycy4gU2hvdWxkIGJlIGRvbmUgYmVmb3JlIHBsYXllciBpcyByZWFsaXplZC4KLSAg
U0xBbmRyb2lkQ29uZmlndXJhdGlvbkl0ZiBwbGF5ZXJfY29uZmlnOwotICBSRVRVUk5fT05fRVJS
T1IoCi0gICAgICBwbGF5ZXJfb2JqZWN0Xy0+R2V0SW50ZXJmYWNlKHBsYXllcl9vYmplY3RfLkdl
dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTF9JSURfQU5EUk9JRENP
TkZJR1VSQVRJT04sICZwbGF5ZXJfY29uZmlnKSwKLSAgICAgIGZhbHNlKTsKLSAgLy8gU2V0IGF1
ZGlvIHBsYXllciBjb25maWd1cmF0aW9uIHRvIFNMX0FORFJPSURfU1RSRUFNX1ZPSUNFIHdoaWNo
Ci0gIC8vIGNvcnJlc3BvbmRzIHRvIGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyLlNUUkVBTV9W
T0lDRV9DQUxMLgotICBTTGludDMyIHN0cmVhbV90eXBlID0gU0xfQU5EUk9JRF9TVFJFQU1fVk9J
Q0U7Ci0gIFJFVFVSTl9PTl9FUlJPUigKLSAgICAgICgqcGxheWVyX2NvbmZpZykKLSAgICAgICAg
ICAtPlNldENvbmZpZ3VyYXRpb24ocGxheWVyX2NvbmZpZywgU0xfQU5EUk9JRF9LRVlfU1RSRUFN
X1RZUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJlYW1fdHlwZSwgc2l6ZW9m
KFNMaW50MzIpKSwKLSAgICAgIGZhbHNlKTsKLQotICAvLyBSZWFsaXplIHRoZSBhdWRpbyBwbGF5
ZXIgb2JqZWN0IGFmdGVyIGNvbmZpZ3VyYXRpb24gaGFzIGJlZW4gc2V0LgotICBSRVRVUk5fT05f
RVJST1IoCi0gICAgICBwbGF5ZXJfb2JqZWN0Xy0+UmVhbGl6ZShwbGF5ZXJfb2JqZWN0Xy5HZXQo
KSwgU0xfQk9PTEVBTl9GQUxTRSksIGZhbHNlKTsKLQotICAvLyBHZXQgdGhlIFNMUGxheUl0ZiBp
bnRlcmZhY2Ugb24gdGhlIGF1ZGlvIHBsYXllci4KLSAgUkVUVVJOX09OX0VSUk9SKAotICAgICAg
cGxheWVyX29iamVjdF8tPkdldEludGVyZmFjZShwbGF5ZXJfb2JqZWN0Xy5HZXQoKSwgU0xfSUlE
X1BMQVksICZwbGF5ZXJfKSwKLSAgICAgIGZhbHNlKTsKLQotICAvLyBHZXQgdGhlIFNMQW5kcm9p
ZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIGludGVyZmFjZSBvbiB0aGUgYXVkaW8gcGxheWVyLgotICBS
RVRVUk5fT05fRVJST1IoCi0gICAgICBwbGF5ZXJfb2JqZWN0Xy0+R2V0SW50ZXJmYWNlKHBsYXll
cl9vYmplY3RfLkdldCgpLCBTTF9JSURfQlVGRkVSUVVFVUUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZzaW1wbGVfYnVmZmVyX3F1ZXVlXyksCi0gICAgICBmYWxzZSk7Ci0K
LSAgLy8gUmVnaXN0ZXIgY2FsbGJhY2sgbWV0aG9kIGZvciB0aGUgQW5kcm9pZCBTaW1wbGUgQnVm
ZmVyIFF1ZXVlIGludGVyZmFjZS4KLSAgLy8gVGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgd2hl
biB0aGUgbmF0aXZlIGF1ZGlvIGxheWVyIG5lZWRzIGF1ZGlvIGRhdGEuCi0gIFJFVFVSTl9PTl9F
UlJPUigoKnNpbXBsZV9idWZmZXJfcXVldWVfKQotICAgICAgICAgICAgICAgICAgICAgIC0+UmVn
aXN0ZXJDYWxsYmFjayhzaW1wbGVfYnVmZmVyX3F1ZXVlXywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2ltcGxlQnVmZmVyUXVldWVDYWxsYmFjaywgdGhpcyksCi0g
ICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0KLSAgLy8gR2V0IHRoZSBTTFZvbHVtZUl0ZiBpbnRl
cmZhY2Ugb24gdGhlIGF1ZGlvIHBsYXllci4KLSAgUkVUVVJOX09OX0VSUk9SKHBsYXllcl9vYmpl
Y3RfLT5HZXRJbnRlcmZhY2UocGxheWVyX29iamVjdF8uR2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0lJRF9WT0xVTUUsICZ2b2x1bWVfKSwK
LSAgICAgICAgICAgICAgICAgIGZhbHNlKTsKLQotICAvLyBUT0RPKGhlbnJpa2EpOiBtaWdodCBu
b3QgYmUgcmVxdWlyZWQgdG8gc2V0IHZvbHVtZSB0byBtYXggaGVyZSBzaW5jZSBpdAotICAvLyBz
ZWVtcyB0byBiZSBkZWZhdWx0IG9uIG1vc3QgZGV2aWNlcy4gTWlnaHQgYmUgcmVxdWlyZWQgZm9y
IHVuaXQgdGVzdHMuCi0gIC8vIFJFVFVSTl9PTl9FUlJPUigoKnZvbHVtZV8pLT5TZXRWb2x1bWVM
ZXZlbCh2b2x1bWVfLCAwKSwgZmFsc2UpOwotCi0gIHJldHVybiB0cnVlOwotfQotCi12b2lkIE9w
ZW5TTEVTUGxheWVyOjpEZXN0cm95QXVkaW9QbGF5ZXIoKSB7Ci0gIEFMT0dEKCJEZXN0cm95QXVk
aW9QbGF5ZXIiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRo
cmVhZCgpKTsKLSAgaWYgKCFwbGF5ZXJfb2JqZWN0Xy5HZXQoKSkKLSAgICByZXR1cm47Ci0gICgq
c2ltcGxlX2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAtPlJlZ2lzdGVyQ2FsbGJhY2soc2ltcGxlX2J1
ZmZlcl9xdWV1ZV8sIG51bGxwdHIsIG51bGxwdHIpOwotICBwbGF5ZXJfb2JqZWN0Xy5SZXNldCgp
OwotICBwbGF5ZXJfID0gbnVsbHB0cjsKLSAgc2ltcGxlX2J1ZmZlcl9xdWV1ZV8gPSBudWxscHRy
OwotICB2b2x1bWVfID0gbnVsbHB0cjsKLX0KLQotLy8gc3RhdGljCi12b2lkIE9wZW5TTEVTUGxh
eWVyOjpTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNrKAotICAgIFNMQW5kcm9pZFNpbXBsZUJ1ZmZl
clF1ZXVlSXRmIGNhbGxlciwKLSAgICB2b2lkKiBjb250ZXh0KSB7Ci0gIE9wZW5TTEVTUGxheWVy
KiBzdHJlYW0gPSByZWludGVycHJldF9jYXN0PE9wZW5TTEVTUGxheWVyKj4oY29udGV4dCk7Ci0g
IHN0cmVhbS0+RmlsbEJ1ZmZlclF1ZXVlKCk7Ci19Ci0KLXZvaWQgT3BlblNMRVNQbGF5ZXI6OkZp
bGxCdWZmZXJRdWV1ZSgpIHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl9vcGVuc2xlc18u
Q2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgU0x1aW50MzIgc3RhdGUgPSBHZXRQbGF5U3RhdGUo
KTsKLSAgaWYgKHN0YXRlICE9IFNMX1BMQVlTVEFURV9QTEFZSU5HKSB7Ci0gICAgQUxPR1coIkJ1
ZmZlciBjYWxsYmFjayBpbiBub24tcGxheWluZyBzdGF0ZSEiKTsKLSAgICByZXR1cm47Ci0gIH0K
LSAgRW5xdWV1ZVBsYXlvdXREYXRhKGZhbHNlKTsKLX0KLQotdm9pZCBPcGVuU0xFU1BsYXllcjo6
RW5xdWV1ZVBsYXlvdXREYXRhKGJvb2wgc2lsZW5jZSkgewotICAvLyBDaGVjayBkZWx0YSB0aW1l
IGJldHdlZW4gdHdvIHN1Y2Nlc3NpdmUgY2FsbGJhY2tzIGFuZCBwcm92aWRlIGEgd2FybmluZwot
ICAvLyBpZiBpdCBiZWNvbWVzIHZlcnkgbGFyZ2UuCi0gIC8vIFRPRE8oaGVucmlrYSk6IHVzaW5n
IDE1MG1zIGFzIHVwcGVyIGxpbWl0IGJ1dCB0aGlzIHZhbHVlIGlzIHJhdGhlciByYW5kb20uCi0g
IGNvbnN0IHVpbnQzMl90IGN1cnJlbnRfdGltZSA9IHJ0Yzo6VGltZSgpOwotICBjb25zdCB1aW50
MzJfdCBkaWZmID0gY3VycmVudF90aW1lIC0gbGFzdF9wbGF5X3RpbWVfOwotICBpZiAoZGlmZiA+
IDE1MCkgewotICAgIEFMT0dXKCJCYWQgT3BlblNMIEVTIHBsYXlvdXQgdGltaW5nLCBkVD0ldSBb
bXNdIiwgZGlmZik7Ci0gIH0KLSAgbGFzdF9wbGF5X3RpbWVfID0gY3VycmVudF90aW1lOwotICBT
TGludDgqIGF1ZGlvX3B0ciA9IGF1ZGlvX2J1ZmZlcnNfW2J1ZmZlcl9pbmRleF9dLmdldCgpOwot
ICBpZiAoc2lsZW5jZSkgewotICAgIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9u
VmFsaWRUaHJlYWQoKSk7Ci0gICAgLy8gQXZvaWQgYXF1aXJpbmcgcmVhbCBhdWRpbyBkYXRhIGZy
b20gV2ViUlRDIGFuZCBmaWxsIHRoZSBidWZmZXIgd2l0aAotICAgIC8vIHplcm9zIGluc3RlYWQu
IFVzZWQgdG8gcHJpbWUgdGhlIGJ1ZmZlciB3aXRoIHNpbGVuY2UgYW5kIHRvIGF2b2lkIGFza2lu
ZwotICAgIC8vIGZvciBhdWRpbyBkYXRhIGZyb20gdHdvIGRpZmZlcmVudCB0aHJlYWRzLgotICAg
IG1lbXNldChhdWRpb19wdHIsIDAsIGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVy
KCkpOwotICB9IGVsc2UgewotICAgIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfb3BlbnNsZXNf
LkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gICAgLy8gUmVhZCBhdWRpbyBkYXRhIGZyb20gdGhl
IFdlYlJUQyBzb3VyY2UgdXNpbmcgdGhlIEZpbmVBdWRpb0J1ZmZlciBvYmplY3QKLSAgICAvLyB0
byBhZGp1c3QgZm9yIGRpZmZlcmVuY2VzIGluIGJ1ZmZlciBzaXplIGJldHdlZW4gV2ViUlRDICgx
MG1zKSBhbmQgbmF0aXZlCi0gICAgLy8gT3BlblNMIEVTLgotICAgIGZpbmVfYXVkaW9fYnVmZmVy
Xy0+R2V0UGxheW91dERhdGEoYXVkaW9fcHRyKTsKLSAgfQotICAvLyBFbnF1ZXVlIHRoZSBkZWNv
ZGVkIGF1ZGlvIGJ1ZmZlciBmb3IgcGxheWJhY2suCi0gIFNMcmVzdWx0IGVyciA9ICgqc2ltcGxl
X2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAgICAgICAgICAgICAgICAtPkVucXVldWUoc2ltcGxlX2J1
ZmZlcl9xdWV1ZV8sIGF1ZGlvX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dWRpb19wYXJhbWV0ZXJzXy5HZXRCeXRlc1BlckJ1ZmZlcigpKTsKLSAgaWYgKFNMX1JFU1VMVF9T
VUNDRVNTICE9IGVycikgewotICAgIEFMT0dFKCJFbnF1ZXVlIGZhaWxlZDogJWQiLCBlcnIpOwot
ICB9Ci0gIGJ1ZmZlcl9pbmRleF8gPSAoYnVmZmVyX2luZGV4XyArIDEpICUga051bU9mT3BlblNM
RVNCdWZmZXJzOwotfQotCi1TTHVpbnQzMiBPcGVuU0xFU1BsYXllcjo6R2V0UGxheVN0YXRlKCkg
Y29uc3QgewotICBSVENfRENIRUNLKHBsYXllcl8pOwotICBTTHVpbnQzMiBzdGF0ZTsKLSAgU0xy
ZXN1bHQgZXJyID0gKCpwbGF5ZXJfKS0+R2V0UGxheVN0YXRlKHBsYXllcl8sICZzdGF0ZSk7Ci0g
IGlmIChTTF9SRVNVTFRfU1VDQ0VTUyAhPSBlcnIpIHsKLSAgICBBTE9HRSgiR2V0UGxheVN0YXRl
IGZhaWxlZDogJWQiLCBlcnIpOwotICB9Ci0gIHJldHVybiBzdGF0ZTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19wbGF5ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5oCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3BsYXllci5oCShub25leGlzdGVudCkKQEAg
LTEsMTk2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJv
amVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBj
YW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
Ci0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdy
YW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0
aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19N
T0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX09QRU5TTEVTX1BMQVlFUl9IXwotI2RlZmluZSBX
RUJSVENfTU9EVUxFU19BVURJT19ERVZJQ0VfQU5EUk9JRF9PUEVOU0xFU19QTEFZRVJfSF8KLQot
I2luY2x1ZGUgPFNMRVMvT3BlblNMRVMuaD4KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0FuZHJv
aWQuaD4KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0FuZHJvaWRDb25maWd1cmF0aW9uLmg+Ci0K
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aHJlYWRfY2hlY2tlci5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX2NvbW1vbi5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19jb21t
b24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvaW5jbHVkZS9hdWRp
b19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL3V0aWxp
dHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLWNs
YXNzIEZpbmVBdWRpb0J1ZmZlcjsKLQotLy8gSW1wbGVtZW50cyAxNi1iaXQgbW9ubyBQQ00gYXVk
aW8gb3V0cHV0IHN1cHBvcnQgZm9yIEFuZHJvaWQgdXNpbmcgdGhlCi0vLyBDIGJhc2VkIE9wZW5T
TCBFUyBBUEkuIE5vIGNhbGxzIGZyb20gQy9DKysgdG8gSmF2YSB1c2luZyBKTkkgaXMgZG9uZS4K
LS8vCi0vLyBBbiBpbnN0YW5jZSBtdXN0IGJlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbiBvbmUg
YW5kIHRoZSBzYW1lIHRocmVhZC4KLS8vIEFsbCBwdWJsaWMgbWV0aG9kcyBtdXN0IGFsc28gYmUg
Y2FsbGVkIG9uIHRoZSBzYW1lIHRocmVhZC4gQSB0aHJlYWQgY2hlY2tlcgotLy8gd2lsbCBSVENf
RENIRUNLIGlmIGFueSBtZXRob2QgaXMgY2FsbGVkIG9uIGFuIGludmFsaWQgdGhyZWFkLiBEZWNv
ZGVkIGF1ZGlvCi0vLyBidWZmZXJzIGFyZSByZXF1ZXN0ZWQgb24gYSBkZWRpY2F0ZWQgaW50ZXJu
YWwgdGhyZWFkIG1hbmFnZWQgYnkgdGhlIE9wZW5TTAotLy8gRVMgbGF5ZXIuCi0vLwotLy8gVGhl
IGV4aXN0aW5nIGRlc2lnbiBmb3JjZXMgdGhlIHVzZXIgdG8gY2FsbCBJbml0UGxheW91dCgpIGFm
dGVyIFN0b3BsYXlvdXQoKQotLy8gdG8gYmUgYWJsZSB0byBjYWxsIFN0YXJ0UGxheW91dCgpIGFn
YWluLiBUaGlzIGlzIGlubGluZSB3aXRoIGhvdyB0aGUgSmF2YS0KLS8vIGJhc2VkIGltcGxlbWVu
dGF0aW9uIHdvcmtzLgotLy8KLS8vIE9wZW5TTCBFUyBpcyBhIG5hdGl2ZSBDIEFQSSB3aGljaCBo
YXZlIG5vIERhbHZpay1yZWxhdGVkIG92ZXJoZWFkIHN1Y2ggYXMKLS8vIGdhcmJhZ2UgY29sbGVj
dGlvbiBwYXVzZXMgYW5kIGl0IHN1cHBvcnRzIHJlZHVjZWQgYXVkaW8gb3V0cHV0IGxhdGVuY3ku
Ci0vLyBJZiB0aGUgZGV2aWNlIGRvZXNuJ3QgY2xhaW0gdGhpcyBmZWF0dXJlIGJ1dCBzdXBwb3J0
cyBBUEkgbGV2ZWwgOSAoQW5kcm9pZAotLy8gcGxhdGZvcm0gdmVyc2lvbiAyLjMpIG9yIGxhdGVy
LCB0aGVuIHdlIGNhbiBzdGlsbCB1c2UgdGhlIE9wZW5TTCBFUyBBUElzIGJ1dAotLy8gdGhlIG91
dHB1dCBsYXRlbmN5IG1heSBiZSBoaWdoZXIuCi1jbGFzcyBPcGVuU0xFU1BsYXllciB7Ci0gcHVi
bGljOgotICAvLyBCZWdpbm5pbmcgd2l0aCBBUEkgbGV2ZWwgMTcgKEFuZHJvaWQgNC4yKSwgYSBi
dWZmZXIgY291bnQgb2YgMiBvciBtb3JlIGlzCi0gIC8vIHJlcXVpcmVkIGZvciBsb3dlciBsYXRl
bmN5LiBCZWdpbm5pbmcgd2l0aCBBUEkgbGV2ZWwgMTggKEFuZHJvaWQgNC4zKSwgYQotICAvLyBi
dWZmZXIgY291bnQgb2YgMSBpcyBzdWZmaWNpZW50IGZvciBsb3dlciBsYXRlbmN5LiBJbiBhZGRp
dGlvbiwgdGhlIGJ1ZmZlcgotICAvLyBzaXplIGFuZCBzYW1wbGUgcmF0ZSBtdXN0IGJlIGNvbXBh
dGlibGUgd2l0aCB0aGUgZGV2aWNlJ3MgbmF0aXZlIG91dHB1dAotICAvLyBjb25maWd1cmF0aW9u
IHByb3ZpZGVkIHZpYSB0aGUgYXVkaW8gbWFuYWdlciBhdCBjb25zdHJ1Y3Rpb24uCi0gIC8vIFRP
RE8oaGVucmlrYSk6IHBlcmhhcHMgc2V0IHRoaXMgdmFsdWUgZHluYW1pY2FsbHkgYmFzZWQgb24g
T1MgdmVyc2lvbi4KLSAgc3RhdGljIGNvbnN0IGludCBrTnVtT2ZPcGVuU0xFU0J1ZmZlcnMgPSAy
OwotCi0gIGV4cGxpY2l0IE9wZW5TTEVTUGxheWVyKEF1ZGlvTWFuYWdlciogYXVkaW9fbWFuYWdl
cik7Ci0gIH5PcGVuU0xFU1BsYXllcigpOwotCi0gIGludCBJbml0KCk7Ci0gIGludCBUZXJtaW5h
dGUoKTsKLQotICBpbnQgSW5pdFBsYXlvdXQoKTsKLSAgYm9vbCBQbGF5b3V0SXNJbml0aWFsaXpl
ZCgpIGNvbnN0IHsgcmV0dXJuIGluaXRpYWxpemVkXzsgfQotCi0gIGludCBTdGFydFBsYXlvdXQo
KTsKLSAgaW50IFN0b3BQbGF5b3V0KCk7Ci0gIGJvb2wgUGxheWluZygpIGNvbnN0IHsgcmV0dXJu
IHBsYXlpbmdfOyB9Ci0KLSAgaW50IFNwZWFrZXJWb2x1bWVJc0F2YWlsYWJsZShib29sJiBhdmFp
bGFibGUpOwotICBpbnQgU2V0U3BlYWtlclZvbHVtZSh1aW50MzJfdCB2b2x1bWUpOwotICBpbnQg
U3BlYWtlclZvbHVtZSh1aW50MzJfdCYgdm9sdW1lKSBjb25zdDsKLSAgaW50IE1heFNwZWFrZXJW
b2x1bWUodWludDMyX3QmIG1heFZvbHVtZSkgY29uc3Q7Ci0gIGludCBNaW5TcGVha2VyVm9sdW1l
KHVpbnQzMl90JiBtaW5Wb2x1bWUpIGNvbnN0OwotCi0gIHZvaWQgQXR0YWNoQXVkaW9CdWZmZXIo
QXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvQnVmZmVyKTsKLQotIHByaXZhdGU6Ci0gIC8vIFRoZXNl
IGNhbGxiYWNrIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGVuIGRhdGEgaXMgcmVxdWlyZWQgZm9yIHBs
YXlvdXQuCi0gIC8vIFRoZXkgYXJlIGJvdGggY2FsbGVkIGZyb20gYW4gaW50ZXJuYWwgIk9wZW5T
TCBFUyB0aHJlYWQiIHdoaWNoIGlzIG5vdAotICAvLyBhdHRhY2hlZCB0byB0aGUgRGFsdmlrIFZN
LgotICBzdGF0aWMgdm9pZCBTaW1wbGVCdWZmZXJRdWV1ZUNhbGxiYWNrKFNMQW5kcm9pZFNpbXBs
ZUJ1ZmZlclF1ZXVlSXRmIGNhbGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkKiBjb250ZXh0KTsKLSAgdm9pZCBGaWxsQnVmZmVyUXVldWUoKTsKLSAgLy8g
UmVhZHMgYXVkaW8gZGF0YSBpbiBQQ00gZm9ybWF0IHVzaW5nIHRoZSBBdWRpb0RldmljZUJ1ZmZl
ci4KLSAgLy8gQ2FuIGJlIGNhbGxlZCBib3RoIG9uIHRoZSBtYWluIHRocmVhZCAoZHVyaW5nIFN0
YXJ0KCkpIGFuZCBmcm9tIHRoZQotICAvLyBpbnRlcm5hbCBhdWRpbyB0aHJlYWQgd2hpbGUgb3V0
cHV0IHN0cmVhbWluZyBpcyBhY3RpdmUuCi0gIC8vIElmIHRoZSB8c2lsZW5jZXwgZmxhZyBpcyBz
ZXQsIHRoZSBhdWRpbyBpcyBmaWxsZWQgd2l0aCB6ZXJvcyBpbnN0ZWFkIG9mCi0gIC8vIGFza2lu
ZyB0aGUgV2ViUlRDIGxheWVyIGZvciByZWFsIGF1ZGlvIGRhdGEuIFRoaXMgcHJvY2VkdXJlIGlz
IGFsc28ga25vd24KLSAgLy8gYXMgYXVkaW8gcHJpbWluZy4KLSAgdm9pZCBFbnF1ZXVlUGxheW91
dERhdGEoYm9vbCBzaWxlbmNlKTsKLQotICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGF1ZGlvIGJ1
ZmZlcnMgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlbmRlciBhdWRpbwotICAvLyB2aWEgdGhlIFNM
QW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIGludGVyZmFjZS4KLSAgdm9pZCBBbGxvY2F0ZURh
dGFCdWZmZXJzKCk7Ci0KLSAgLy8gT2J0YWluZXMgdGhlIFNMIEVuZ2luZSBJbnRlcmZhY2UgZnJv
bSB0aGUgZXhpc3RpbmcgZ2xvYmFsIEVuZ2luZSBvYmplY3QuCi0gIC8vIFRoZSBpbnRlcmZhY2Ug
ZXhwb3NlcyBjcmVhdGlvbiBtZXRob2RzIG9mIGFsbCB0aGUgT3BlblNMIEVTIG9iamVjdCB0eXBl
cy4KLSAgLy8gVGhpcyBtZXRob2QgZGVmaW5lcyB0aGUgfGVuZ2luZV98IG1lbWJlciB2YXJpYWJs
ZS4KLSAgYm9vbCBPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKTsKLQotICAvLyBDcmVhdGVzL2Rlc3Ry
b3lzIHRoZSBvdXRwdXQgbWl4IG9iamVjdC4KLSAgYm9vbCBDcmVhdGVNaXgoKTsKLSAgdm9pZCBE
ZXN0cm95TWl4KCk7Ci0KLSAgLy8gQ3JlYXRlcy9kZXN0cm95cyB0aGUgYXVkaW8gcGxheWVyIGFu
ZCB0aGUgc2ltcGxlLWJ1ZmZlciBvYmplY3QuCi0gIC8vIEFsc28gY3JlYXRlcyB0aGUgdm9sdW1l
IG9iamVjdC4KLSAgYm9vbCBDcmVhdGVBdWRpb1BsYXllcigpOwotICB2b2lkIERlc3Ryb3lBdWRp
b1BsYXllcigpOwotCi0gIFNMdWludDMyIEdldFBsYXlTdGF0ZSgpIGNvbnN0OwotCi0gIC8vIEVu
c3VyZXMgdGhhdCBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbSB0aGUgc2FtZSB0aHJlYWQgYXMgdGhp
cyBvYmplY3QgaXMKLSAgLy8gY3JlYXRlZCBvbi4KLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVh
ZF9jaGVja2VyXzsKLQotICAvLyBTdG9yZXMgdGhyZWFkIElEIGluIGZpcnN0IGNhbGwgdG8gU2lt
cGxlQnVmZmVyUXVldWVDYWxsYmFjaygpIGZyb20gaW50ZXJuYWwKLSAgLy8gbm9uLWFwcGxpY2F0
aW9uIHRocmVhZCB3aGljaCBpcyBub3QgYXR0YWNoZWQgdG8gdGhlIERhbHZpayBKVk0uCi0gIC8v
IERldGFjaGVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBvYmplY3QuCi0gIHJ0Yzo6VGhy
ZWFkQ2hlY2tlciB0aHJlYWRfY2hlY2tlcl9vcGVuc2xlc187Ci0KLSAgLy8gUmF3IHBvaW50ZXIg
dG8gdGhlIGF1ZGlvIG1hbmFnZXIgaW5qZWN0ZWQgYXQgY29uc3RydWN0aW9uLiBVc2VkIHRvIGNh
Y2hlCi0gIC8vIGF1ZGlvIHBhcmFtZXRlcnMgYW5kIHRvIGFjY2VzcyB0aGUgZ2xvYmFsIFNMIGVu
Z2luZSBvYmplY3QgbmVlZGVkIGJ5IHRoZQotICAvLyBPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKSBt
ZXRob2QuIFRoZSBhdWRpbyBtYW5hZ2VyIG91dGxpdmVzIGFueSBpbnN0YW5jZSBvZgotICAvLyB0
aGlzIGNsYXNzLgotICBBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXJfOwotCi0gIC8vIENvbnRh
aW5zIGF1ZGlvIHBhcmFtZXRlcnMgcHJvdmlkZWQgdG8gdGhpcyBjbGFzcyBhdCBjb25zdHJ1Y3Rp
b24gYnkgdGhlCi0gIC8vIEF1ZGlvTWFuYWdlci4KLSAgY29uc3QgQXVkaW9QYXJhbWV0ZXJzIGF1
ZGlvX3BhcmFtZXRlcnNfOwotCi0gIC8vIFJhdyBwb2ludGVyIGhhbmRsZSBwcm92aWRlZCB0byB1
cyBpbiBBdHRhY2hBdWRpb0J1ZmZlcigpLiBPd25lZCBieSB0aGUKLSAgLy8gQXVkaW9EZXZpY2VN
b2R1bGVJbXBsIGNsYXNzIGFuZCBjYWxsZWQgYnkgQXVkaW9EZXZpY2VNb2R1bGU6OkNyZWF0ZSgp
LgotICBBdWRpb0RldmljZUJ1ZmZlciogYXVkaW9fZGV2aWNlX2J1ZmZlcl87Ci0KLSAgYm9vbCBp
bml0aWFsaXplZF87Ci0gIGJvb2wgcGxheWluZ187Ci0KLSAgLy8gUENNLXR5cGUgZm9ybWF0IGRl
ZmluaXRpb24uCi0gIC8vIFRPRE8oaGVucmlrYSk6IGFkZCBzdXBwb3J0IGZvciBTTEFuZHJvaWRE
YXRhRm9ybWF0X1BDTV9FWCAoYW5kcm9pZC0yMSkgaWYKLSAgLy8gMzItYml0IGZsb2F0IHJlcHJl
c2VudGF0aW9uIGlzIG5lZWRlZC4KLSAgU0xEYXRhRm9ybWF0X1BDTSBwY21fZm9ybWF0XzsKLQot
ICAvLyBRdWV1ZSBvZiBhdWRpbyBidWZmZXJzIHRvIGJlIHVzZWQgYnkgdGhlIHBsYXllciBvYmpl
Y3QgZm9yIHJlbmRlcmluZwotICAvLyBhdWRpby4gVGhleSB3aWxsIGJlIHVzZWQgaW4gYSBSb3Vu
ZC1yb2JpbiB3YXkgYW5kIHRoZSBzaXplIG9mIGVhY2ggYnVmZmVyCi0gIC8vIGlzIGdpdmVuIGJ5
IEZpbmVBdWRpb0J1ZmZlcjo6UmVxdWlyZWRCdWZmZXJTaXplQnl0ZXMoKS4KLSAgc3RkOjp1bmlx
dWVfcHRyPFNMaW50OFtdPiBhdWRpb19idWZmZXJzX1trTnVtT2ZPcGVuU0xFU0J1ZmZlcnNdOwot
Ci0gIC8vIEZpbmVBdWRpb0J1ZmZlciB0YWtlcyBhbiBBdWRpb0RldmljZUJ1ZmZlciB3aGljaCBk
ZWxpdmVycyBhdWRpbyBkYXRhCi0gIC8vIGluIGNodW5rcyBvZiAxMG1zLiBJdCB0aGVuIGFsbG93
cyBmb3IgdGhpcyBkYXRhIHRvIGJlIHB1bGxlZCBpbgotICAvLyBhIGZpbmVyIG9yIGNvYXJzZXIg
Z3JhbnVsYXJpdHkuIEkuZS4gaW50ZXJhY3Rpbmcgd2l0aCB0aGlzIGNsYXNzIGluc3RlYWQKLSAg
Ly8gb2YgZGlyZWN0bHkgd2l0aCB0aGUgQXVkaW9EZXZpY2VCdWZmZXIgb25lIGNhbiBhc2sgZm9y
IGFueSBudW1iZXIgb2YKLSAgLy8gYXVkaW8gZGF0YSBzYW1wbGVzLgotICAvLyBFeGFtcGxlOiBu
YXRpdmUgYnVmZmVyIHNpemUgY2FuIGJlIDE5MiBhdWRpbyBmcmFtZXMgYXQgNDhrSHogc2FtcGxl
IHJhdGUuCi0gIC8vIFdlYlJUQyB3aWxsIHByb3ZpZGUgNDgwIGF1ZGlvIGZyYW1lcyBwZXIgMTBt
cyBidXQgT3BlblNMIEVTIGFza3MgZm9yIDE5MgotICAvLyBpbiBlYWNoIGNhbGxiYWNrIChvbmUg
ZXZlcnkgNHRoIG1zKS4gVGhpcyBjbGFzcyBjYW4gdGhlbiBhc2sgZm9yIDE5MiBhbmQKLSAgLy8g
dGhlIEZpbmVBdWRpb0J1ZmZlciB3aWxsIGFzayBXZWJSVEMgZm9yIG5ldyBkYXRhIGFwcHJveGlt
YXRlbHkgb25seSBldmVyeQotICAvLyBzZWNvbmQgY2FsbGJhY2sgYW5kIGFsc28gY2FjaGUgbm9u
LXV0aWxpemVkIGF1ZGlvLgotICBzdGQ6OnVuaXF1ZV9wdHI8RmluZUF1ZGlvQnVmZmVyPiBmaW5l
X2F1ZGlvX2J1ZmZlcl87Ci0KLSAgLy8gS2VlcHMgdHJhY2sgb2YgYWN0aXZlIGF1ZGlvIGJ1ZmZl
ciAnbicgaW4gdGhlIGF1ZGlvX2J1ZmZlcnNfW25dIHF1ZXVlLgotICAvLyBFeGFtcGxlIChrTnVt
T2ZPcGVuU0xFU0J1ZmZlcnMgPSAyKTogY291bnRzIDAsIDEsIDAsIDEsIC4uLgotICBpbnQgYnVm
ZmVyX2luZGV4XzsKLQotICAvLyBUaGlzIGludGVyZmFjZSBleHBvc2VzIGNyZWF0aW9uIG1ldGhv
ZHMgZm9yIGFsbCB0aGUgT3BlblNMIEVTIG9iamVjdCB0eXBlcy4KLSAgLy8gSXQgaXMgdGhlIE9w
ZW5TTCBFUyBBUEkgZW50cnkgcG9pbnQuCi0gIFNMRW5naW5lSXRmIGVuZ2luZV87Ci0KLSAgLy8g
T3V0cHV0IG1peCBvYmplY3QgdG8gYmUgdXNlZCBieSB0aGUgcGxheWVyIG9iamVjdC4KLSAgd2Vi
cnRjOjpTY29wZWRTTE9iamVjdEl0ZiBvdXRwdXRfbWl4XzsKLQotICAvLyBUaGUgYXVkaW8gcGxh
eWVyIG1lZGlhIG9iamVjdCBwbGF5cyBvdXQgYXVkaW8gdG8gdGhlIHNwZWFrZXJzLiBJdCBhbHNv
Ci0gIC8vIHN1cHBvcnRzIHZvbHVtZSBjb250cm9sLgotICB3ZWJydGM6OlNjb3BlZFNMT2JqZWN0
SXRmIHBsYXllcl9vYmplY3RfOwotCi0gIC8vIFRoaXMgaW50ZXJmYWNlIGlzIHN1cHBvcnRlZCBv
biB0aGUgYXVkaW8gcGxheWVyIGFuZCBpdCBjb250cm9scyB0aGUgc3RhdGUKLSAgLy8gb2YgdGhl
IGF1ZGlvIHBsYXllci4KLSAgU0xQbGF5SXRmIHBsYXllcl87Ci0KLSAgLy8gVGhlIEFuZHJvaWQg
U2ltcGxlIEJ1ZmZlciBRdWV1ZSBpbnRlcmZhY2UgaXMgc3VwcG9ydGVkIG9uIHRoZSBhdWRpbyBw
bGF5ZXIKLSAgLy8gYW5kIGl0IHByb3ZpZGVzIG1ldGhvZHMgdG8gc2VuZCBhdWRpbyBkYXRhIGZy
b20gdGhlIHNvdXJjZSB0byB0aGUgYXVkaW8KLSAgLy8gcGxheWVyIGZvciByZW5kZXJpbmcuCi0g
IFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIHNpbXBsZV9idWZmZXJfcXVldWVfOwotCi0g
IC8vIFRoaXMgaW50ZXJmYWNlIGV4cG9zZXMgY29udHJvbHMgZm9yIG1hbmlwdWxhdGluZyB0aGUg
b2JqZWN04oCZcyBhdWRpbyB2b2x1bWUKLSAgLy8gcHJvcGVydGllcy4gVGhpcyBpbnRlcmZhY2Ug
aXMgc3VwcG9ydGVkIG9uIHRoZSBBdWRpbyBQbGF5ZXIgb2JqZWN0LgotICBTTFZvbHVtZUl0ZiB2
b2x1bWVfOwotCi0gIC8vIExhc3QgdGltZSB0aGUgT3BlblNMIEVTIGxheWVyIGFza2VkIGZvciBh
dWRpbyBkYXRhIHRvIHBsYXkgb3V0LgotICB1aW50MzJfdCBsYXN0X3BsYXlfdGltZV87Ci19Owot
Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVE
SU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfUExBWUVSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L29wZW5zbGVzX3JlY29yZGVyLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNs
ZXNfcmVjb3JkZXIuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvb3BlbnNs
ZXNfcmVjb3JkZXIuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MjYgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5k
cm9pZC9vcGVuc2xlc19yZWNvcmRlci5oIgotCi0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KLQot
I2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2FycmF5c2l6ZS5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNl
L2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2Zvcm1hdF9tYWNyb3MuaCIKLSNpbmNs
dWRlICJ3ZWJydGMvYmFzZS90aW1ldXRpbHMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19jb21tb24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9hdWRpb19tYW5hZ2VyLmgiCi0jaW5jbHVkZSAid2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2ZpbmVfYXVkaW9fYnVmZmVyLmgiCi0KLSNkZWZpbmUg
VEFHICJPcGVuU0xFU1JlY29yZGVyIgotI2RlZmluZSBBTE9HViguLi4pIF9fYW5kcm9pZF9sb2df
cHJpbnQoQU5EUk9JRF9MT0dfVkVSQk9TRSwgVEFHLCBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQUxP
R0QoLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0RFQlVHLCBUQUcsIF9fVkFf
QVJHU19fKQotI2RlZmluZSBBTE9HRSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9M
T0dfRVJST1IsIFRBRywgX19WQV9BUkdTX18pCi0jZGVmaW5lIEFMT0dXKC4uLikgX19hbmRyb2lk
X2xvZ19wcmludChBTkRST0lEX0xPR19XQVJOLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBB
TE9HSSguLi4pIF9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgVEFHLCBfX1ZB
X0FSR1NfXykKLQotI2RlZmluZSBMT0dfT05fRVJST1Iob3ApICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICBbXShTTHJlc3VsdCBlcnIpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChlcnIgIT0gU0xfUkVTVUxUX1NVQ0NFU1Mp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgQUxPR0UoIiVzOiVkICVzIGZhaWxl
ZDogJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sICNvcCwgXAotICAgICAgICAgICAgR2V0U0xFcnJv
clN0cmluZyhlcnIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIHRy
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IHJldHVybiBmYWxzZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICB9KG9wKQotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotT3BlblNMRVNSZWNvcmRlcjo6T3Bl
blNMRVNSZWNvcmRlcihBdWRpb01hbmFnZXIqIGF1ZGlvX21hbmFnZXIpCi0gICAgOiBhdWRpb19t
YW5hZ2VyXyhhdWRpb19tYW5hZ2VyKSwKLSAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfKGF1ZGlvX21h
bmFnZXItPkdldFJlY29yZEF1ZGlvUGFyYW1ldGVycygpKSwKLSAgICAgIGF1ZGlvX2RldmljZV9i
dWZmZXJfKG51bGxwdHIpLAotICAgICAgaW5pdGlhbGl6ZWRfKGZhbHNlKSwKLSAgICAgIHJlY29y
ZGluZ18oZmFsc2UpLAotICAgICAgZW5naW5lXyhudWxscHRyKSwKLSAgICAgIHJlY29yZGVyXyhu
dWxscHRyKSwKLSAgICAgIHNpbXBsZV9idWZmZXJfcXVldWVfKG51bGxwdHIpLAotICAgICAgYnVm
ZmVyX2luZGV4XygwKSwKLSAgICAgIGxhc3RfcmVjX3RpbWVfKDApIHsKLSAgQUxPR0QoImN0b3Il
cyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgLy8gRGV0YWNoIGZyb20gdGhpcyB0aHJl
YWQgc2luY2Ugd2Ugd2FudCB0byB1c2UgdGhlIGNoZWNrZXIgdG8gdmVyaWZ5IGNhbGxzCi0gIC8v
IGZyb20gdGhlIGludGVybmFsICBhdWRpbyB0aHJlYWQuCi0gIHRocmVhZF9jaGVja2VyX29wZW5z
bGVzXy5EZXRhY2hGcm9tVGhyZWFkKCk7Ci0gIC8vIFVzZSBuYXRpdmUgYXVkaW8gb3V0cHV0IHBh
cmFtZXRlcnMgcHJvdmlkZWQgYnkgdGhlIGF1ZGlvIG1hbmFnZXIgYW5kCi0gIC8vIGRlZmluZSB0
aGUgUENNIGZvcm1hdCBzdHJ1Y3R1cmUuCi0gIHBjbV9mb3JtYXRfID0gQ3JlYXRlUENNQ29uZmln
dXJhdGlvbihhdWRpb19wYXJhbWV0ZXJzXy5jaGFubmVscygpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXVkaW9fcGFyYW1ldGVyc18uc2FtcGxlX3JhdGUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvX3BhcmFtZXRlcnNfLmJp
dHNfcGVyX3NhbXBsZSgpKTsKLX0KLQotT3BlblNMRVNSZWNvcmRlcjo6fk9wZW5TTEVTUmVjb3Jk
ZXIoKSB7Ci0gIEFMT0dEKCJkdG9yJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJU
Q19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFRlcm1p
bmF0ZSgpOwotICBEZXN0cm95QXVkaW9SZWNvcmRlcigpOwotICBlbmdpbmVfID0gbnVsbHB0cjsK
LSAgUlRDX0RDSEVDSyghZW5naW5lXyk7Ci0gIFJUQ19EQ0hFQ0soIXJlY29yZGVyXyk7Ci0gIFJU
Q19EQ0hFQ0soIXNpbXBsZV9idWZmZXJfcXVldWVfKTsKLX0KLQotaW50IE9wZW5TTEVTUmVjb3Jk
ZXI6OkluaXQoKSB7Ci0gIEFMT0dEKCJJbml0JXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7
Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0g
IHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6VGVybWluYXRlKCkgewotICBB
TE9HRCgiVGVybWluYXRlJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hF
Q0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIFN0b3BSZWNvcmRp
bmcoKTsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1JlY29yZGVyOjpJbml0UmVjb3Jk
aW5nKCkgewotICBBTE9HRCgiSW5pdFJlY29yZGluZyVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3Ry
KCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkp
OwotICBSVENfRENIRUNLKCFpbml0aWFsaXplZF8pOwotICBSVENfRENIRUNLKCFyZWNvcmRpbmdf
KTsKLSAgaWYgKCFPYnRhaW5FbmdpbmVJbnRlcmZhY2UoKSkgewotICAgIEFMT0dFKCJGYWlsZWQg
dG8gb2J0YWluIFNMIEVuZ2luZSBpbnRlcmZhY2UiKTsKLSAgICByZXR1cm4gLTE7Ci0gIH0KLSAg
Q3JlYXRlQXVkaW9SZWNvcmRlcigpOwotICBpbml0aWFsaXplZF8gPSB0cnVlOwotICBidWZmZXJf
aW5kZXhfID0gMDsKLSAgcmV0dXJuIDA7Ci19Ci0KLWludCBPcGVuU0xFU1JlY29yZGVyOjpTdGFy
dFJlY29yZGluZygpIHsKLSAgQUxPR0QoIlN0YXJ0UmVjb3JkaW5nJXMiLCBHZXRUaHJlYWRJbmZv
KCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7Ci0gIFJUQ19EQ0hFQ0soaW5pdGlhbGl6ZWRfKTsKLSAgUlRDX0RDSEVDSyghcmVj
b3JkaW5nXyk7Ci0gIGlmIChmaW5lX2F1ZGlvX2J1ZmZlcl8pIHsKLSAgICBmaW5lX2F1ZGlvX2J1
ZmZlcl8tPlJlc2V0UmVjb3JkKCk7Ci0gIH0KLSAgLy8gQWRkIGJ1ZmZlcnMgdG8gdGhlIHF1ZXVl
IGJlZm9yZSBjaGFuZ2luZyBzdGF0ZSB0byBTTF9SRUNPUkRTVEFURV9SRUNPUkRJTkcKLSAgLy8g
dG8gZW5zdXJlIHRoYXQgcmVjb3JkaW5nIHN0YXJ0cyBhcyBzb29uIGFzIHRoZSBzdGF0ZSBpcyBt
b2RpZmllZC4gT24gc29tZQotICAvLyBkZXZpY2VzLCBTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1
ZTo6Q2xlYXIoKSB1c2VkIGluIFN0b3AoKSBkb2VzIG5vdCBmbHVzaAotICAvLyB0aGUgYnVmZmVy
cyBhcyBpbnRlbmRlZCBhbmQgd2UgdGhlcmVmb3JlIGNoZWNrIHRoZSBudW1iZXIgb2YgYnVmZmVy
cwotICAvLyBhbHJlYWR5IHF1ZXVlZCBmaXJzdC4gRW5xdWV1ZSgpIGNhbiByZXR1cm4gU0xfUkVT
VUxUX0JVRkZFUl9JTlNVRkZJQ0lFTlQKLSAgLy8gb3RoZXJ3aXNlLgotICBpbnQgbnVtX2J1ZmZl
cnNfaW5fcXVldWUgPSBHZXRCdWZmZXJDb3VudCgpOwotICBmb3IgKGludCBpID0gMDsgaSA8IGtO
dW1PZk9wZW5TTEVTQnVmZmVycyAtIG51bV9idWZmZXJzX2luX3F1ZXVlOyArK2kpIHsKLSAgICBp
ZiAoIUVucXVldWVBdWRpb0J1ZmZlcigpKSB7Ci0gICAgICByZWNvcmRpbmdfID0gZmFsc2U7Ci0g
ICAgICByZXR1cm4gLTE7Ci0gICAgfQotICB9Ci0gIG51bV9idWZmZXJzX2luX3F1ZXVlID0gR2V0
QnVmZmVyQ291bnQoKTsKLSAgUlRDX0RDSEVDS19FUShudW1fYnVmZmVyc19pbl9xdWV1ZSwga051
bU9mT3BlblNMRVNCdWZmZXJzKTsKLSAgTG9nQnVmZmVyU3RhdGUoKTsKLSAgLy8gU3RhcnQgYXVk
aW8gcmVjb3JkaW5nIGJ5IGNoYW5naW5nIHRoZSBzdGF0ZSB0byBTTF9SRUNPUkRTVEFURV9SRUNP
UkRJTkcuCi0gIC8vIEdpdmVuIHRoYXQgYnVmZmVycyBhcmUgYWxyZWFkeSBlbnF1ZXVlZCwgcmVj
b3JkaW5nIHNob3VsZCBzdGFydCBhdCBvbmNlLgotICAvLyBUaGUgbWFjcm8gcmV0dXJucyAtMSBp
ZiByZWNvcmRpbmcgZmFpbHMgdG8gc3RhcnQuCi0gIGxhc3RfcmVjX3RpbWVfID0gcnRjOjpUaW1l
KCk7Ci0gIGlmIChMT0dfT05fRVJST1IoCi0gICAgICAgICAgKCpyZWNvcmRlcl8pLT5TZXRSZWNv
cmRTdGF0ZShyZWNvcmRlcl8sIFNMX1JFQ09SRFNUQVRFX1JFQ09SRElORykpKSB7Ci0gICAgcmV0
dXJuIC0xOwotICB9Ci0gIHJlY29yZGluZ18gPSAoR2V0UmVjb3JkU3RhdGUoKSA9PSBTTF9SRUNP
UkRTVEFURV9SRUNPUkRJTkcpOwotICBSVENfRENIRUNLKHJlY29yZGluZ18pOwotICByZXR1cm4g
MDsKLX0KLQotaW50IE9wZW5TTEVTUmVjb3JkZXI6OlN0b3BSZWNvcmRpbmcoKSB7Ci0gIEFMT0dE
KCJTdG9wUmVjb3JkaW5nJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19EQ0hF
Q0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGlmICghaW5pdGlh
bGl6ZWRfIHx8ICFyZWNvcmRpbmdfKSB7Ci0gICAgcmV0dXJuIDA7Ci0gIH0KLSAgLy8gU3RvcCBy
ZWNvcmRpbmcgYnkgc2V0dGluZyB0aGUgcmVjb3JkIHN0YXRlIHRvIFNMX1JFQ09SRFNUQVRFX1NU
T1BQRUQuCi0gIGlmIChMT0dfT05fRVJST1IoCi0gICAgICAgICAgKCpyZWNvcmRlcl8pLT5TZXRS
ZWNvcmRTdGF0ZShyZWNvcmRlcl8sIFNMX1JFQ09SRFNUQVRFX1NUT1BQRUQpKSkgewotICAgIHJl
dHVybiAtMTsKLSAgfQotICAvLyBDbGVhciB0aGUgYnVmZmVyIHF1ZXVlIHRvIGdldCByaWQgb2Yg
b2xkIGRhdGEgd2hlbiByZXN1bWluZyByZWNvcmRpbmcuCi0gIGlmIChMT0dfT05fRVJST1IoKCpz
aW1wbGVfYnVmZmVyX3F1ZXVlXyktPkNsZWFyKHNpbXBsZV9idWZmZXJfcXVldWVfKSkpIHsKLSAg
ICByZXR1cm4gLTE7Ci0gIH0KLSAgdGhyZWFkX2NoZWNrZXJfb3BlbnNsZXNfLkRldGFjaEZyb21U
aHJlYWQoKTsKLSAgaW5pdGlhbGl6ZWRfID0gZmFsc2U7Ci0gIHJlY29yZGluZ18gPSBmYWxzZTsK
LSAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgT3BlblNMRVNSZWNvcmRlcjo6QXR0YWNoQXVkaW9CdWZm
ZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2J1ZmZlcikgewotICBBTE9HRCgiQXR0YWNoQXVk
aW9CdWZmZXIiKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRo
cmVhZCgpKTsKLSAgUlRDX0NIRUNLKGF1ZGlvX2J1ZmZlcik7Ci0gIGF1ZGlvX2RldmljZV9idWZm
ZXJfID0gYXVkaW9fYnVmZmVyOwotICAvLyBFbnN1cmUgdGhhdCB0aGUgYXVkaW8gZGV2aWNlIGJ1
ZmZlciBpcyBpbmZvcm1lZCBhYm91dCB0aGUgbmF0aXZlIHNhbXBsZQotICAvLyByYXRlIHVzZWQg
b24gdGhlIHJlY29yZGluZyBzaWRlLgotICBjb25zdCBpbnQgc2FtcGxlX3JhdGVfaHogPSBhdWRp
b19wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpOwotICBBTE9HRCgiU2V0UmVjb3JkaW5nU2FtcGxl
UmF0ZSglZCkiLCBzYW1wbGVfcmF0ZV9oeik7Ci0gIGF1ZGlvX2RldmljZV9idWZmZXJfLT5TZXRS
ZWNvcmRpbmdTYW1wbGVSYXRlKHNhbXBsZV9yYXRlX2h6KTsKLSAgLy8gRW5zdXJlIHRoYXQgdGhl
IGF1ZGlvIGRldmljZSBidWZmZXIgaXMgaW5mb3JtZWQgYWJvdXQgdGhlIG51bWJlciBvZgotICAv
LyBjaGFubmVscyBwcmVmZXJyZWQgYnkgdGhlIE9TIG9uIHRoZSByZWNvcmRpbmcgc2lkZS4KLSAg
Y29uc3Qgc2l6ZV90IGNoYW5uZWxzID0gYXVkaW9fcGFyYW1ldGVyc18uY2hhbm5lbHMoKTsKLSAg
QUxPR0QoIlNldFJlY29yZGluZ0NoYW5uZWxzKCUiIFBSSXVTICIpIiwgY2hhbm5lbHMpOwotICBh
dWRpb19kZXZpY2VfYnVmZmVyXy0+U2V0UmVjb3JkaW5nQ2hhbm5lbHMoY2hhbm5lbHMpOwotICAv
LyBBbGxvY2F0ZWQgbWVtb3J5IGZvciBpbnRlcm5hbCBkYXRhIGJ1ZmZlcnMgZ2l2ZW4gZXhpc3Rp
bmcgYXVkaW8gcGFyYW1ldGVycy4KLSAgQWxsb2NhdGVEYXRhQnVmZmVycygpOwotfQotCi1pbnQg
T3BlblNMRVNSZWNvcmRlcjo6RW5hYmxlQnVpbHRJbkFFQyhib29sIGVuYWJsZSkgewotICBBTE9H
RCgiRW5hYmxlQnVpbHRJbkFFQyglZCkiLCBlbmFibGUpOwotICBSVENfRENIRUNLKHRocmVhZF9j
aGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBBTE9HRSgiTm90IGltcGxlbWVudGVk
Iik7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3BlblNMRVNSZWNvcmRlcjo6RW5hYmxlQnVpbHRJ
bkFHQyhib29sIGVuYWJsZSkgewotICBBTE9HRCgiRW5hYmxlQnVpbHRJbkFHQyglZCkiLCBlbmFi
bGUpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkp
OwotICBBTE9HRSgiTm90IGltcGxlbWVudGVkIik7Ci0gIHJldHVybiAwOwotfQotCi1pbnQgT3Bl
blNMRVNSZWNvcmRlcjo6RW5hYmxlQnVpbHRJbk5TKGJvb2wgZW5hYmxlKSB7Ci0gIEFMT0dEKCJF
bmFibGVCdWlsdEluTlMoJWQpIiwgZW5hYmxlKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tl
cl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgQUxPR0UoIk5vdCBpbXBsZW1lbnRlZCIpOwot
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBPcGVuU0xFU1JlY29yZGVyOjpPYnRhaW5FbmdpbmVJbnRl
cmZhY2UoKSB7Ci0gIEFMT0dEKCJPYnRhaW5FbmdpbmVJbnRlcmZhY2UiKTsKLSAgUlRDX0RDSEVD
Syh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgaWYgKGVuZ2luZV8p
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIC8vIEdldCBhY2Nlc3MgdG8gKG9yIGNyZWF0ZSBpZiBub3Qg
YWxyZWFkeSBleGlzdGluZykgdGhlIGdsb2JhbCBPcGVuU0wgRW5naW5lCi0gIC8vIG9iamVjdC4K
LSAgU0xPYmplY3RJdGYgZW5naW5lX29iamVjdCA9IGF1ZGlvX21hbmFnZXJfLT5HZXRPcGVuU0xF
bmdpbmUoKTsKLSAgaWYgKGVuZ2luZV9vYmplY3QgPT0gbnVsbHB0cikgewotICAgIEFMT0dFKCJG
YWlsZWQgdG8gYWNjZXNzIHRoZSBnbG9iYWwgT3BlblNMIGVuZ2luZSIpOwotICAgIHJldHVybiBm
YWxzZTsKLSAgfQotICAvLyBHZXQgdGhlIFNMIEVuZ2luZSBJbnRlcmZhY2Ugd2hpY2ggaXMgaW1w
bGljaXQuCi0gIGlmIChMT0dfT05fRVJST1IoCi0gICAgICAgICAgKCplbmdpbmVfb2JqZWN0KQot
ICAgICAgICAgICAgICAtPkdldEludGVyZmFjZShlbmdpbmVfb2JqZWN0LCBTTF9JSURfRU5HSU5F
LCAmZW5naW5lXykpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0gIHJldHVybiB0cnVlOwot
fQotCi1ib29sIE9wZW5TTEVTUmVjb3JkZXI6OkNyZWF0ZUF1ZGlvUmVjb3JkZXIoKSB7Ci0gIEFM
T0dEKCJDcmVhdGVBdWRpb1JlY29yZGVyIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJf
LkNhbGxlZE9uVmFsaWRUaHJlYWQoKSk7Ci0gIGlmIChyZWNvcmRlcl9vYmplY3RfLkdldCgpKQot
ICAgIHJldHVybiB0cnVlOwotICBSVENfRENIRUNLKCFyZWNvcmRlcl8pOwotICBSVENfRENIRUNL
KCFzaW1wbGVfYnVmZmVyX3F1ZXVlXyk7Ci0KLSAgLy8gQXVkaW8gc291cmNlIGNvbmZpZ3VyYXRp
b24uCi0gIFNMRGF0YUxvY2F0b3JfSU9EZXZpY2UgbWljX2xvY2F0b3IgPSB7U0xfREFUQUxPQ0FU
T1JfSU9ERVZJQ0UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xf
SU9ERVZJQ0VfQVVESU9JTlBVVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTTF9ERUZBVUxUREVWSUNFSURfQVVESU9JTlBVVCwgTlVMTH07Ci0gIFNMRGF0YVNvdXJj
ZSBhdWRpb19zb3VyY2UgPSB7Jm1pY19sb2NhdG9yLCBOVUxMfTsKLQotICAvLyBBdWRpbyBzaW5r
IGNvbmZpZ3VyYXRpb24uCi0gIFNMRGF0YUxvY2F0b3JfQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVl
IGJ1ZmZlcl9xdWV1ZSA9IHsKLSAgICAgIFNMX0RBVEFMT0NBVE9SX0FORFJPSURTSU1QTEVCVUZG
RVJRVUVVRSwKLSAgICAgIHN0YXRpY19jYXN0PFNMdWludDMyPihrTnVtT2ZPcGVuU0xFU0J1ZmZl
cnMpfTsKLSAgU0xEYXRhU2luayBhdWRpb19zaW5rID0geyZidWZmZXJfcXVldWUsICZwY21fZm9y
bWF0X307Ci0KLSAgLy8gQ3JlYXRlIHRoZSBhdWRpbyByZWNvcmRlciBvYmplY3QgKHJlcXVpcmVz
IHRoZSBSRUNPUkRfQVVESU8gcGVybWlzc2lvbikuCi0gIC8vIERvIG5vdCByZWFsaXplIHRoZSBy
ZWNvcmRlciB5ZXQuIFNldCB0aGUgY29uZmlndXJhdGlvbiBmaXJzdC4KLSAgY29uc3QgU0xJbnRl
cmZhY2VJRCBpbnRlcmZhY2VfaWRbXSA9IHtTTF9JSURfQU5EUk9JRFNJTVBMRUJVRkZFUlFVRVVF
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0lJRF9BTkRST0lE
Q09ORklHVVJBVElPTn07Ci0gIGNvbnN0IFNMYm9vbGVhbiBpbnRlcmZhY2VfcmVxdWlyZWRbXSA9
IHtTTF9CT09MRUFOX1RSVUUsIFNMX0JPT0xFQU5fVFJVRX07Ci0gIGlmIChMT0dfT05fRVJST1Io
KCplbmdpbmVfKS0+Q3JlYXRlQXVkaW9SZWNvcmRlcigKLSAgICAgICAgICBlbmdpbmVfLCByZWNv
cmRlcl9vYmplY3RfLlJlY2VpdmUoKSwgJmF1ZGlvX3NvdXJjZSwgJmF1ZGlvX3NpbmssCi0gICAg
ICAgICAgYXJyYXlzaXplKGludGVyZmFjZV9pZCksIGludGVyZmFjZV9pZCwgaW50ZXJmYWNlX3Jl
cXVpcmVkKSkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBDb25maWd1cmUgdGhl
IGF1ZGlvIHJlY29yZGVyIChiZWZvcmUgaXQgaXMgcmVhbGl6ZWQpLgotICBTTEFuZHJvaWRDb25m
aWd1cmF0aW9uSXRmIHJlY29yZGVyX2NvbmZpZzsKLSAgaWYgKExPR19PTl9FUlJPUigocmVjb3Jk
ZXJfb2JqZWN0Xy0+R2V0SW50ZXJmYWNlKHJlY29yZGVyX29iamVjdF8uR2V0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTF9JSURfQU5EUk9J
RENPTkZJR1VSQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmcmVjb3JkZXJfY29uZmlnKSkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgLy8gVXNlcyB0aGUgZGVmYXVsdCBtaWNyb3Bob25lIHR1bmVkIGZvciBhdWRpbyBjb21t
dW5pY2F0aW9uLgotICAvLyBOb3RlIHRoYXQsIFNMX0FORFJPSURfUkVDT1JESU5HX1BSRVNFVF9W
T0lDRV9SRUNPR05JVElPTiBsZWFkcyB0byBhIGZhc3QKLSAgLy8gdHJhY2sgYnV0IGFsc28gZXhj
bHVkZXMgdXNhZ2Ugb2YgcmVxdWlyZWQgZWZmZWN0cyBsaWtlIEFFQywgQUdDIGFuZCBOUy4KLSAg
Ly8gU0xfQU5EUk9JRF9SRUNPUkRJTkdfUFJFU0VUX1ZPSUNFX0NPTU1VTklDQVRJT04KLSAgU0xp
bnQzMiBzdHJlYW1fdHlwZSA9IFNMX0FORFJPSURfUkVDT1JESU5HX1BSRVNFVF9WT0lDRV9DT01N
VU5JQ0FUSU9OOwotICBpZiAoTE9HX09OX0VSUk9SKCgoKnJlY29yZGVyX2NvbmZpZykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIC0+U2V0Q29uZmlndXJhdGlvbihyZWNvcmRlcl9jb25maWcsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xfQU5EUk9JRF9LRVlf
UkVDT1JESU5HX1BSRVNFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmc3RyZWFtX3R5cGUsIHNpemVvZihTTGludDMyKSkpKSkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIC8vIFRoZSBhdWRpbyByZWNvcmRlciBjYW4gbm93IGJlIHJlYWxpemVkIChp
biBzeW5jaHJvbm91cyBtb2RlKS4KLSAgaWYgKExPR19PTl9FUlJPUigocmVjb3JkZXJfb2JqZWN0
Xy0+UmVhbGl6ZShyZWNvcmRlcl9vYmplY3RfLkdldCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNMX0JPT0xFQU5fRkFMU0UpKSkpIHsKLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBHZXQgdGhlIGltcGxpY2l0IHJlY29yZGVyIGludGVyZmFj
ZSAoU0xfSUlEX1JFQ09SRCkuCi0gIGlmIChMT0dfT05fRVJST1IoKHJlY29yZGVyX29iamVjdF8t
PkdldEludGVyZmFjZSgKLSAgICAgICAgICByZWNvcmRlcl9vYmplY3RfLkdldCgpLCBTTF9JSURf
UkVDT1JELCAmcmVjb3JkZXJfKSkpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8g
R2V0IHRoZSBzaW1wbGUgYnVmZmVyIHF1ZXVlIGludGVyZmFjZSAoU0xfSUlEX0FORFJPSURTSU1Q
TEVCVUZGRVJRVUVVRSkuCi0gIC8vIEl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZC4KLSAgaWYg
KExPR19PTl9FUlJPUigocmVjb3JkZXJfb2JqZWN0Xy0+R2V0SW50ZXJmYWNlKAotICAgICAgICAg
IHJlY29yZGVyX29iamVjdF8uR2V0KCksIFNMX0lJRF9BTkRST0lEU0lNUExFQlVGRkVSUVVFVUUs
Ci0gICAgICAgICAgJnNpbXBsZV9idWZmZXJfcXVldWVfKSkpKSB7Ci0gICAgcmV0dXJuIGZhbHNl
OwotICB9Ci0KLSAgLy8gUmVnaXN0ZXIgdGhlIGlucHV0IGNhbGxiYWNrIGZvciB0aGUgc2ltcGxl
IGJ1ZmZlciBxdWV1ZS4KLSAgLy8gVGhpcyBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIHJl
Y2VpdmluZyBuZXcgZGF0YSBmcm9tIHRoZSBkZXZpY2UuCi0gIGlmIChMT0dfT05fRVJST1IoKCgq
c2ltcGxlX2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAgICAgICAgICAgICAgICAgICAtPlJlZ2lzdGVy
Q2FsbGJhY2soc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU2ltcGxlQnVmZmVyUXVldWVDYWxsYmFjaywgdGhpcykpKSkgewot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBPcGVuU0xF
U1JlY29yZGVyOjpEZXN0cm95QXVkaW9SZWNvcmRlcigpIHsKLSAgQUxPR0QoIkRlc3Ryb3lBdWRp
b1JlY29yZGVyIik7Ci0gIFJUQ19EQ0hFQ0sodGhyZWFkX2NoZWNrZXJfLkNhbGxlZE9uVmFsaWRU
aHJlYWQoKSk7Ci0gIGlmICghcmVjb3JkZXJfb2JqZWN0Xy5HZXQoKSkKLSAgICByZXR1cm47Ci0g
ICgqc2ltcGxlX2J1ZmZlcl9xdWV1ZV8pCi0gICAgICAtPlJlZ2lzdGVyQ2FsbGJhY2soc2ltcGxl
X2J1ZmZlcl9xdWV1ZV8sIG51bGxwdHIsIG51bGxwdHIpOwotICByZWNvcmRlcl9vYmplY3RfLlJl
c2V0KCk7Ci0gIHJlY29yZGVyXyA9IG51bGxwdHI7Ci0gIHNpbXBsZV9idWZmZXJfcXVldWVfID0g
bnVsbHB0cjsKLX0KLQotdm9pZCBPcGVuU0xFU1JlY29yZGVyOjpTaW1wbGVCdWZmZXJRdWV1ZUNh
bGxiYWNrKAotICAgIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIGJ1ZmZlcl9xdWV1ZSwK
LSAgICB2b2lkKiBjb250ZXh0KSB7Ci0gIE9wZW5TTEVTUmVjb3JkZXIqIHN0cmVhbSA9IHN0YXRp
Y19jYXN0PE9wZW5TTEVTUmVjb3JkZXIqPihjb250ZXh0KTsKLSAgc3RyZWFtLT5SZWFkQnVmZmVy
UXVldWUoKTsKLX0KLQotdm9pZCBPcGVuU0xFU1JlY29yZGVyOjpBbGxvY2F0ZURhdGFCdWZmZXJz
KCkgewotICBBTE9HRCgiQWxsb2NhdGVEYXRhQnVmZmVycyIpOwotICBSVENfRENIRUNLKHRocmVh
ZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBSVENfRENIRUNLKCFzaW1wbGVf
YnVmZmVyX3F1ZXVlXyk7Ci0gIFJUQ19DSEVDSyhhdWRpb19kZXZpY2VfYnVmZmVyXyk7Ci0gIC8v
IENyZWF0ZSBhIG1vZGlmaWVkIGF1ZGlvIGJ1ZmZlciBjbGFzcyB3aGljaCBhbGxvd3MgdXMgdG8g
ZGVsaXZlciBhbnkgbnVtYmVyCi0gIC8vIG9mIHNhbXBsZXMgKGFuZCBub3Qgb25seSBtdWx0aXBs
ZSBvZiAxMG1zKSB0byBtYXRjaCB0aGUgbmF0aXZlIGF1ZGlvIHVuaXQKLSAgLy8gYnVmZmVyIHNp
emUuCi0gIEFMT0dEKCJmcmFtZXMgcGVyIG5hdGl2ZSBidWZmZXI6ICUiIFBSSXVTLAotICAgICAg
ICBhdWRpb19wYXJhbWV0ZXJzXy5mcmFtZXNfcGVyX2J1ZmZlcigpKTsKLSAgQUxPR0QoImZyYW1l
cyBwZXIgMTBtcyBidWZmZXI6ICUiIFBSSXVTLAotICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5m
cmFtZXNfcGVyXzEwbXNfYnVmZmVyKCkpOwotICBBTE9HRCgiYnl0ZXMgcGVyIG5hdGl2ZSBidWZm
ZXI6ICUiIFBSSXVTLAotICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5HZXRCeXRlc1BlckJ1ZmZl
cigpKTsKLSAgQUxPR0QoIm5hdGl2ZSBzYW1wbGUgcmF0ZTogJWQiLCBhdWRpb19wYXJhbWV0ZXJz
Xy5zYW1wbGVfcmF0ZSgpKTsKLSAgUlRDX0RDSEVDSyhhdWRpb19kZXZpY2VfYnVmZmVyXyk7Ci0g
IGZpbmVfYXVkaW9fYnVmZmVyXy5yZXNldChuZXcgRmluZUF1ZGlvQnVmZmVyKAotICAgICAgYXVk
aW9fZGV2aWNlX2J1ZmZlcl8sIGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVmZmVyKCks
Ci0gICAgICBhdWRpb19wYXJhbWV0ZXJzXy5zYW1wbGVfcmF0ZSgpKSk7Ci0gIC8vIEFsbG9jYXRl
IHF1ZXVlIG9mIGF1ZGlvIGJ1ZmZlcnMgdGhhdCBzdG9yZXMgcmVjb3JkZWQgYXVkaW8gc2FtcGxl
cy4KLSAgY29uc3QgaW50IGRhdGFfc2l6ZV9ieXRlcyA9IGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5
dGVzUGVyQnVmZmVyKCk7Ci0gIGF1ZGlvX2J1ZmZlcnNfLnJlc2V0KG5ldyBzdGQ6OnVuaXF1ZV9w
dHI8U0xpbnQ4W10+W2tOdW1PZk9wZW5TTEVTQnVmZmVyc10pOwotICBmb3IgKGludCBpID0gMDsg
aSA8IGtOdW1PZk9wZW5TTEVTQnVmZmVyczsgKytpKSB7Ci0gICAgYXVkaW9fYnVmZmVyc19baV0u
cmVzZXQobmV3IFNMaW50OFtkYXRhX3NpemVfYnl0ZXNdKTsKLSAgfQotfQotCi12b2lkIE9wZW5T
TEVTUmVjb3JkZXI6OlJlYWRCdWZmZXJRdWV1ZSgpIHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl9vcGVuc2xlc18uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgU0x1aW50MzIgc3RhdGUg
PSBHZXRSZWNvcmRTdGF0ZSgpOwotICBpZiAoc3RhdGUgIT0gU0xfUkVDT1JEU1RBVEVfUkVDT1JE
SU5HKSB7Ci0gICAgQUxPR1coIkJ1ZmZlciBjYWxsYmFjayBpbiBub24tcmVjb3JkaW5nIHN0YXRl
ISIpOwotICAgIHJldHVybjsKLSAgfQotICAvLyBDaGVjayBkZWx0YSB0aW1lIGJldHdlZW4gdHdv
IHN1Y2Nlc3NpdmUgY2FsbGJhY2tzIGFuZCBwcm92aWRlIGEgd2FybmluZwotICAvLyBpZiBpdCBi
ZWNvbWVzIHZlcnkgbGFyZ2UuCi0gIC8vIFRPRE8oaGVucmlrYSk6IHVzaW5nIDE1MG1zIGFzIHVw
cGVyIGxpbWl0IGJ1dCB0aGlzIHZhbHVlIGlzIHJhdGhlciByYW5kb20uCi0gIGNvbnN0IHVpbnQz
Ml90IGN1cnJlbnRfdGltZSA9IHJ0Yzo6VGltZSgpOwotICBjb25zdCB1aW50MzJfdCBkaWZmID0g
Y3VycmVudF90aW1lIC0gbGFzdF9yZWNfdGltZV87Ci0gIGlmIChkaWZmID4gMTUwKSB7Ci0gICAg
QUxPR1coIkJhZCBPcGVuU0wgRVMgcmVjb3JkIHRpbWluZywgZFQ9JXUgW21zXSIsIGRpZmYpOwot
ICB9Ci0gIGxhc3RfcmVjX3RpbWVfID0gY3VycmVudF90aW1lOwotICAvLyBTZW5kIHJlY29yZGVk
IGF1ZGlvIGRhdGEgdG8gdGhlIFdlYlJUQyBzaW5rLgotICAvLyBUT0RPKGhlbnJpa2EpOiBmaXgg
ZGVsYXkgZXN0aW1hdGVzLiBJdCBpcyBPSyB0byB1c2UgZml4ZWQgdmFsdWVzIGZvciBub3cKLSAg
Ly8gc2luY2UgdGhlcmUgaXMgbm8gc3VwcG9ydCB0byB0dXJuIG9mZiBidWlsdC1pbiBFQyBpbiBj
b21iaW5hdGlvbiB3aXRoCi0gIC8vIE9wZW5TTCBFUyBhbnlob3cuIEhlbmNlLCBhcyBpcywgdGhl
IFdlYlJUQyBiYXNlZCBBRUMgKHdoaWNoIHdvdWxkIHVzZQotICAvLyB0aGVzZSBlc3RpbWF0ZXMp
IHdpbGwgbmV2ZXIgYmUgYWN0aXZlLgotICBjb25zdCBzaXplX3Qgc2l6ZV9pbl9ieXRlcyA9Ci0g
ICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KGF1ZGlvX3BhcmFtZXRlcnNfLkdldEJ5dGVzUGVyQnVm
ZmVyKCkpOwotICBjb25zdCBpbnQ4X3QqIGRhdGEgPQotICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
aW50OF90Kj4oYXVkaW9fYnVmZmVyc19bYnVmZmVyX2luZGV4X10uZ2V0KCkpOwotICBmaW5lX2F1
ZGlvX2J1ZmZlcl8tPkRlbGl2ZXJSZWNvcmRlZERhdGEoZGF0YSwgc2l6ZV9pbl9ieXRlcywgMjUs
IDI1KTsKLSAgLy8gRW5xdWV1ZSB0aGUgdXRpbGl6ZWQgYXVkaW8gYnVmZmVyIGFuZCB1c2UgaWYg
Zm9yIHJlY29yZGluZyBhZ2Fpbi4KLSAgRW5xdWV1ZUF1ZGlvQnVmZmVyKCk7Ci19Ci0KLWJvb2wg
T3BlblNMRVNSZWNvcmRlcjo6RW5xdWV1ZUF1ZGlvQnVmZmVyKCkgewotICBTTHJlc3VsdCBlcnIg
PQotICAgICAgKCpzaW1wbGVfYnVmZmVyX3F1ZXVlXykKLSAgICAgICAgICAtPkVucXVldWUoc2lt
cGxlX2J1ZmZlcl9xdWV1ZV8sIGF1ZGlvX2J1ZmZlcnNfW2J1ZmZlcl9pbmRleF9dLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICBhdWRpb19wYXJhbWV0ZXJzXy5HZXRCeXRlc1BlckJ1ZmZlcigp
KTsKLSAgaWYgKFNMX1JFU1VMVF9TVUNDRVNTICE9IGVycikgewotICAgIEFMT0dFKCJFbnF1ZXVl
IGZhaWxlZDogJXMiLCBHZXRTTEVycm9yU3RyaW5nKGVycikpOwotICAgIHJldHVybiBmYWxzZTsK
LSAgfQotICBidWZmZXJfaW5kZXhfID0gKGJ1ZmZlcl9pbmRleF8gKyAxKSAlIGtOdW1PZk9wZW5T
TEVTQnVmZmVyczsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLVNMdWludDMyIE9wZW5TTEVTUmVjb3Jk
ZXI6OkdldFJlY29yZFN0YXRlKCkgY29uc3QgewotICBSVENfRENIRUNLKHJlY29yZGVyXyk7Ci0g
IFNMdWludDMyIHN0YXRlOwotICBTTHJlc3VsdCBlcnIgPSAoKnJlY29yZGVyXyktPkdldFJlY29y
ZFN0YXRlKHJlY29yZGVyXywgJnN0YXRlKTsKLSAgaWYgKFNMX1JFU1VMVF9TVUNDRVNTICE9IGVy
cikgewotICAgIEFMT0dFKCJHZXRSZWNvcmRTdGF0ZSBmYWlsZWQ6ICVzIiwgR2V0U0xFcnJvclN0
cmluZyhlcnIpKTsKLSAgfQotICByZXR1cm4gc3RhdGU7Ci19Ci0KLVNMQW5kcm9pZFNpbXBsZUJ1
ZmZlclF1ZXVlU3RhdGUgT3BlblNMRVNSZWNvcmRlcjo6R2V0QnVmZmVyUXVldWVTdGF0ZSgpIGNv
bnN0IHsKLSAgUlRDX0RDSEVDSyhzaW1wbGVfYnVmZmVyX3F1ZXVlXyk7Ci0gIC8vIHN0YXRlLmNv
dW50OiBOdW1iZXIgb2YgYnVmZmVycyBjdXJyZW50bHkgaW4gdGhlIHF1ZXVlLgotICAvLyBzdGF0
ZS5pbmRleDogSW5kZXggb2YgdGhlIGN1cnJlbnRseSBmaWxsaW5nIGJ1ZmZlci4gVGhpcyBpcyBh
IGxpbmVhciBpbmRleAotICAvLyB0aGF0IGtlZXBzIGEgY3VtdWxhdGl2ZSBjb3VudCBvZiB0aGUg
bnVtYmVyIG9mIGJ1ZmZlcnMgcmVjb3JkZWQuCi0gIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVl
U3RhdGUgc3RhdGU7Ci0gIFNMcmVzdWx0IGVyciA9Ci0gICAgICAoKnNpbXBsZV9idWZmZXJfcXVl
dWVfKS0+R2V0U3RhdGUoc2ltcGxlX2J1ZmZlcl9xdWV1ZV8sICZzdGF0ZSk7Ci0gIGlmIChTTF9S
RVNVTFRfU1VDQ0VTUyAhPSBlcnIpIHsKLSAgICBBTE9HRSgiR2V0U3RhdGUgZmFpbGVkOiAlcyIs
IEdldFNMRXJyb3JTdHJpbmcoZXJyKSk7Ci0gIH0KLSAgcmV0dXJuIHN0YXRlOwotfQotCi12b2lk
IE9wZW5TTEVTUmVjb3JkZXI6OkxvZ0J1ZmZlclN0YXRlKCkgY29uc3QgewotICBTTEFuZHJvaWRT
aW1wbGVCdWZmZXJRdWV1ZVN0YXRlIHN0YXRlID0gR2V0QnVmZmVyUXVldWVTdGF0ZSgpOwotICBB
TE9HRCgic3RhdGUuY291bnQ6JWQgc3RhdGUuaW5kZXg6JWQiLCBzdGF0ZS5jb3VudCwgc3RhdGUu
aW5kZXgpOwotfQotCi1TTHVpbnQzMiBPcGVuU0xFU1JlY29yZGVyOjpHZXRCdWZmZXJDb3VudCgp
IHsKLSAgU0xBbmRyb2lkU2ltcGxlQnVmZmVyUXVldWVTdGF0ZSBzdGF0ZSA9IEdldEJ1ZmZlclF1
ZXVlU3RhdGUoKTsKLSAgcmV0dXJuIHN0YXRlLmNvdW50OwotfQotCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3JlY29yZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvYW5kcm9pZC9vcGVuc2xlc19yZWNvcmRlci5oCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL29wZW5zbGVzX3JlY29yZGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxOTMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01P
RFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfUkVDT1JERVJfSF8KLSNkZWZpbmUg
V0VCUlRDX01PRFVMRVNfQVVESU9fREVWSUNFX0FORFJPSURfT1BFTlNMRVNfUkVDT1JERVJfSF8K
LQotI2luY2x1ZGUgPFNMRVMvT3BlblNMRVMuaD4KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0Fu
ZHJvaWQuaD4KLSNpbmNsdWRlIDxTTEVTL09wZW5TTEVTX0FuZHJvaWRDb25maWd1cmF0aW9uLmg+
Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aHJlYWRfY2hl
Y2tlci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2F1
ZGlvX2NvbW1vbi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRy
b2lkL2F1ZGlvX21hbmFnZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZp
Y2UvYW5kcm9pZC9vcGVuc2xlc19jb21tb24uaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9h
dWRpb19kZXZpY2UvaW5jbHVkZS9hdWRpb19kZXZpY2VfZGVmaW5lcy5oIgotI2luY2x1ZGUgIndl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hdWRpb19kZXZpY2VfZ2VuZXJpYy5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaCIKLQot
bmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLWNsYXNzIEZpbmVBdWRpb0J1ZmZlcjsKLQotLy8gSW1wbGVt
ZW50cyAxNi1iaXQgbW9ubyBQQ00gYXVkaW8gaW5wdXQgc3VwcG9ydCBmb3IgQW5kcm9pZCB1c2lu
ZyB0aGUKLS8vIEMgYmFzZWQgT3BlblNMIEVTIEFQSS4gTm8gY2FsbHMgZnJvbSBDL0MrKyB0byBK
YXZhIHVzaW5nIEpOSSBpcyBkb25lLgotLy8KLS8vIEFuIGluc3RhbmNlIG11c3QgYmUgY3JlYXRl
ZCBhbmQgZGVzdHJveWVkIG9uIG9uZSBhbmQgdGhlIHNhbWUgdGhyZWFkLgotLy8gQWxsIHB1Ymxp
YyBtZXRob2RzIG11c3QgYWxzbyBiZSBjYWxsZWQgb24gdGhlIHNhbWUgdGhyZWFkLiBBIHRocmVh
ZCBjaGVja2VyCi0vLyB3aWxsIFJUQ19EQ0hFQ0sgaWYgYW55IG1ldGhvZCBpcyBjYWxsZWQgb24g
YW4gaW52YWxpZCB0aHJlYWQuIFJlY29yZGVkIGF1ZGlvCi0vLyBidWZmZXJzIGFyZSBwcm92aWRl
ZCBvbiBhIGRlZGljYXRlZCBpbnRlcm5hbCB0aHJlYWQgbWFuYWdlZCBieSB0aGUgT3BlblNMCi0v
LyBFUyBsYXllci4KLS8vCi0vLyBUaGUgZXhpc3RpbmcgZGVzaWduIGZvcmNlcyB0aGUgdXNlciB0
byBjYWxsIEluaXRSZWNvcmRpbmcoKSBhZnRlcgotLy8gU3RvcFJlY29yZGluZygpIHRvIGJlIGFi
bGUgdG8gY2FsbCBTdGFydFJlY29yZGluZygpIGFnYWluLiBUaGlzIGlzIGlubGluZQotLy8gd2l0
aCBob3cgdGhlIEphdmEtYmFzZWQgaW1wbGVtZW50YXRpb24gd29ya3MuCi0vLwotLy8gQXMgb2Yg
QVBJIGxldmVsIDIxLCBsb3dlciBsYXRlbmN5IGF1ZGlvIGlucHV0IGlzIHN1cHBvcnRlZCBvbiBz
ZWxlY3QgZGV2aWNlcy4KLS8vIFRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgZmVhdHVyZSwgZmly
c3QgY29uZmlybSB0aGF0IGxvd2VyIGxhdGVuY3kgb3V0cHV0IGlzCi0vLyBhdmFpbGFibGUuIFRo
ZSBjYXBhYmlsaXR5IGZvciBsb3dlciBsYXRlbmN5IG91dHB1dCBpcyBhIHByZXJlcXVpc2l0ZSBm
b3IgdGhlCi0vLyBsb3dlciBsYXRlbmN5IGlucHV0IGZlYXR1cmUuIFRoZW4sIGNyZWF0ZSBhbiBB
dWRpb1JlY29yZGVyIHdpdGggdGhlIHNhbWUKLS8vIHNhbXBsZSByYXRlIGFuZCBidWZmZXIgc2l6
ZSBhcyB3b3VsZCBiZSB1c2VkIGZvciBvdXRwdXQuIE9wZW5TTCBFUyBpbnRlcmZhY2VzCi0vLyBm
b3IgaW5wdXQgZWZmZWN0cyBwcmVjbHVkZSB0aGUgbG93ZXIgbGF0ZW5jeSBwYXRoLgotLy8gU2Vl
IGh0dHBzOi8vZGV2ZWxvcGVyLmFuZHJvaWQuY29tL25kay9ndWlkZXMvYXVkaW8vb3BlbnNsLXBy
b2ctbm90ZXMuaHRtbAotLy8gZm9yIG1vcmUgZGV0YWlscy4KLWNsYXNzIE9wZW5TTEVTUmVjb3Jk
ZXIgewotIHB1YmxpYzoKLSAgLy8gQmVnaW5uaW5nIHdpdGggQVBJIGxldmVsIDE3IChBbmRyb2lk
IDQuMiksIGEgYnVmZmVyIGNvdW50IG9mIDIgb3IgbW9yZSBpcwotICAvLyByZXF1aXJlZCBmb3Ig
bG93ZXIgbGF0ZW5jeS4gQmVnaW5uaW5nIHdpdGggQVBJIGxldmVsIDE4IChBbmRyb2lkIDQuMyks
IGEKLSAgLy8gYnVmZmVyIGNvdW50IG9mIDEgaXMgc3VmZmljaWVudCBmb3IgbG93ZXIgbGF0ZW5j
eS4gSW4gYWRkaXRpb24sIHRoZSBidWZmZXIKLSAgLy8gc2l6ZSBhbmQgc2FtcGxlIHJhdGUgbXVz
dCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGRldmljZSdzIG5hdGl2ZSBpbnB1dAotICAvLyBjb25m
aWd1cmF0aW9uIHByb3ZpZGVkIHZpYSB0aGUgYXVkaW8gbWFuYWdlciBhdCBjb25zdHJ1Y3Rpb24u
Ci0gIC8vIFRPRE8oaGVucmlrYSk6IHBlcmhhcHMgc2V0IHRoaXMgdmFsdWUgZHluYW1pY2FsbHkg
YmFzZWQgb24gT1MgdmVyc2lvbi4KLSAgc3RhdGljIGNvbnN0IGludCBrTnVtT2ZPcGVuU0xFU0J1
ZmZlcnMgPSAyOwotCi0gIGV4cGxpY2l0IE9wZW5TTEVTUmVjb3JkZXIoQXVkaW9NYW5hZ2VyKiBh
dWRpb19tYW5hZ2VyKTsKLSAgfk9wZW5TTEVTUmVjb3JkZXIoKTsKLQotICBpbnQgSW5pdCgpOwot
ICBpbnQgVGVybWluYXRlKCk7Ci0KLSAgaW50IEluaXRSZWNvcmRpbmcoKTsKLSAgYm9vbCBSZWNv
cmRpbmdJc0luaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gaW5pdGlhbGl6ZWRfOyB9Ci0KLSAg
aW50IFN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGludCBTdG9wUmVjb3JkaW5nKCk7Ci0gIGJvb2wgUmVj
b3JkaW5nKCkgY29uc3QgeyByZXR1cm4gcmVjb3JkaW5nXzsgfQotCi0gIHZvaWQgQXR0YWNoQXVk
aW9CdWZmZXIoQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2J1ZmZlcik7Ci0KLSAgLy8gVE9ETyho
ZW5yaWthKTogYWRkIHN1cHBvcnQgdXNpbmcgT3BlblNMIEVTIEFQSXMgd2hlbiBhdmFpbGFibGUu
Ci0gIGludCBFbmFibGVCdWlsdEluQUVDKGJvb2wgZW5hYmxlKTsKLSAgaW50IEVuYWJsZUJ1aWx0
SW5BR0MoYm9vbCBlbmFibGUpOwotICBpbnQgRW5hYmxlQnVpbHRJbk5TKGJvb2wgZW5hYmxlKTsK
LQotIHByaXZhdGU6Ci0gIC8vIE9idGFpbmVzIHRoZSBTTCBFbmdpbmUgSW50ZXJmYWNlIGZyb20g
dGhlIGV4aXN0aW5nIGdsb2JhbCBFbmdpbmUgb2JqZWN0LgotICAvLyBUaGUgaW50ZXJmYWNlIGV4
cG9zZXMgY3JlYXRpb24gbWV0aG9kcyBvZiBhbGwgdGhlIE9wZW5TTCBFUyBvYmplY3QgdHlwZXMu
Ci0gIC8vIFRoaXMgbWV0aG9kIGRlZmluZXMgdGhlIHxlbmdpbmVffCBtZW1iZXIgdmFyaWFibGUu
Ci0gIGJvb2wgT2J0YWluRW5naW5lSW50ZXJmYWNlKCk7Ci0KLSAgLy8gQ3JlYXRlcy9kZXN0cm95
cyB0aGUgYXVkaW8gcmVjb3JkZXIgYW5kIHRoZSBzaW1wbGUtYnVmZmVyIHF1ZXVlIG9iamVjdC4K
LSAgYm9vbCBDcmVhdGVBdWRpb1JlY29yZGVyKCk7Ci0gIHZvaWQgRGVzdHJveUF1ZGlvUmVjb3Jk
ZXIoKTsKLQotICAvLyBBbGxvY2F0ZSBtZW1vcnkgZm9yIGF1ZGlvIGJ1ZmZlcnMgd2hpY2ggd2ls
bCBiZSB1c2VkIHRvIGNhcHR1cmUgYXVkaW8KLSAgLy8gdmlhIHRoZSBTTEFuZHJvaWRTaW1wbGVC
dWZmZXJRdWV1ZUl0ZiBpbnRlcmZhY2UuCi0gIHZvaWQgQWxsb2NhdGVEYXRhQnVmZmVycygpOwot
Ci0gIC8vIFRoZXNlIGNhbGxiYWNrIG1ldGhvZHMgYXJlIGNhbGxlZCB3aGVuIGRhdGEgaGFzIGJl
ZW4gd3JpdHRlbiB0byB0aGUgaW5wdXQKLSAgLy8gYnVmZmVyIHF1ZXVlLiBUaGV5IGFyZSBib3Ro
IGNhbGxlZCBmcm9tIGFuIGludGVybmFsICJPcGVuU0wgRVMgdGhyZWFkIgotICAvLyB3aGljaCBp
cyBub3QgYXR0YWNoZWQgdG8gdGhlIERhbHZpayBWTS4KLSAgc3RhdGljIHZvaWQgU2ltcGxlQnVm
ZmVyUXVldWVDYWxsYmFjayhTTEFuZHJvaWRTaW1wbGVCdWZmZXJRdWV1ZUl0ZiBjYWxsZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY29udGV4dCk7Ci0g
IHZvaWQgUmVhZEJ1ZmZlclF1ZXVlKCk7Ci0KLSAgLy8gV3JhcHMgY2FsbHMgdG8gU0xBbmRyb2lk
U2ltcGxlQnVmZmVyUXVldWVTdGF0ZTo6RW5xdWV1ZSgpIGFuZCBpdCBjYW4gYmUKLSAgLy8gY2Fs
bGVkIGJvdGggb24gdGhlIG1haW4gdGhyZWFkIChidXQgYmVmb3JlIHJlY29yZGluZyBoYXMgc3Rh
cnRlZCkgYW5kIGZyb20KLSAgLy8gdGhlIGludGVybmFsIGF1ZGlvIHRocmVhZCB3aGlsZSBpbnB1
dCBzdHJlYW1pbmcgaXMgYWN0aXZlLiBJdCB1c2VzCi0gIC8vIHxzaW1wbGVfYnVmZmVyX3F1ZXVl
X3wgYnV0IG5vIGxvY2sgaXMgbmVlZGVkIHNpbmNlIHRoZSBpbml0aWFsIGNhbGxzIGZyb20KLSAg
Ly8gdGhlIG1haW4gdGhyZWFkIGFuZCB0aGUgbmF0aXZlIGNhbGxiYWNrIHRocmVhZCBhcmUgbXV0
dWFsbHkgZXhjbHVzaXZlLgotICBib29sIEVucXVldWVBdWRpb0J1ZmZlcigpOwotCi0gIC8vIFJl
dHVybnMgdGhlIGN1cnJlbnQgcmVjb3JkZXIgc3RhdGUuCi0gIFNMdWludDMyIEdldFJlY29yZFN0
YXRlKCkgY29uc3Q7Ci0KLSAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBidWZmZXIgcXVldWUgc3Rh
dGUuCi0gIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlU3RhdGUgR2V0QnVmZmVyUXVldWVTdGF0
ZSgpIGNvbnN0OwotCi0gIC8vIE51bWJlciBvZiBidWZmZXJzIGN1cnJlbnRseSBpbiB0aGUgcXVl
dWUuCi0gIFNMdWludDMyIEdldEJ1ZmZlckNvdW50KCk7Ci0KLSAgLy8gUHJpbnRzIGEgbG9nIG1l
c3NhZ2Ugb2YgdGhlIGN1cnJlbnQgcXVldWUgc3RhdGUuIENhbiBiZSB1c2VkIGZvciBkZWJ1Z2dp
bmcKLSAgLy8gcHVycG9zZXMuCi0gIHZvaWQgTG9nQnVmZmVyU3RhdGUoKSBjb25zdDsKLQotICAv
LyBFbnN1cmVzIHRoYXQgbWV0aG9kcyBhcmUgY2FsbGVkIGZyb20gdGhlIHNhbWUgdGhyZWFkIGFz
IHRoaXMgb2JqZWN0IGlzCi0gIC8vIGNyZWF0ZWQgb24uCi0gIHJ0Yzo6VGhyZWFkQ2hlY2tlciB0
aHJlYWRfY2hlY2tlcl87Ci0KLSAgLy8gU3RvcmVzIHRocmVhZCBJRCBpbiBmaXJzdCBjYWxsIHRv
IFNpbXBsZUJ1ZmZlclF1ZXVlQ2FsbGJhY2soKSBmcm9tIGludGVybmFsCi0gIC8vIG5vbi1hcHBs
aWNhdGlvbiB0aHJlYWQgd2hpY2ggaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBEYWx2aWsgSlZNLgot
ICAvLyBEZXRhY2hlZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgb2JqZWN0LgotICBydGM6
OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfb3BlbnNsZXNfOwotCi0gIC8vIFJhdyBwb2lu
dGVyIHRvIHRoZSBhdWRpbyBtYW5hZ2VyIGluamVjdGVkIGF0IGNvbnN0cnVjdGlvbi4gVXNlZCB0
byBjYWNoZQotICAvLyBhdWRpbyBwYXJhbWV0ZXJzIGFuZCB0byBhY2Nlc3MgdGhlIGdsb2JhbCBT
TCBlbmdpbmUgb2JqZWN0IG5lZWRlZCBieSB0aGUKLSAgLy8gT2J0YWluRW5naW5lSW50ZXJmYWNl
KCkgbWV0aG9kLiBUaGUgYXVkaW8gbWFuYWdlciBvdXRsaXZlcyBhbnkgaW5zdGFuY2Ugb2YKLSAg
Ly8gdGhpcyBjbGFzcy4KLSAgQXVkaW9NYW5hZ2VyKiBjb25zdCBhdWRpb19tYW5hZ2VyXzsKLQot
ICAvLyBDb250YWlucyBhdWRpbyBwYXJhbWV0ZXJzIHByb3ZpZGVkIHRvIHRoaXMgY2xhc3MgYXQg
Y29uc3RydWN0aW9uIGJ5IHRoZQotICAvLyBBdWRpb01hbmFnZXIuCi0gIGNvbnN0IEF1ZGlvUGFy
YW1ldGVycyBhdWRpb19wYXJhbWV0ZXJzXzsKLQotICAvLyBSYXcgcG9pbnRlciBoYW5kbGUgcHJv
dmlkZWQgdG8gdXMgaW4gQXR0YWNoQXVkaW9CdWZmZXIoKS4gT3duZWQgYnkgdGhlCi0gIC8vIEF1
ZGlvRGV2aWNlTW9kdWxlSW1wbCBjbGFzcyBhbmQgY2FsbGVkIGJ5IEF1ZGlvRGV2aWNlTW9kdWxl
OjpDcmVhdGUoKS4KLSAgQXVkaW9EZXZpY2VCdWZmZXIqIGF1ZGlvX2RldmljZV9idWZmZXJfOwot
Ci0gIC8vIFBDTS10eXBlIGZvcm1hdCBkZWZpbml0aW9uLgotICAvLyBUT0RPKGhlbnJpa2EpOiBh
ZGQgc3VwcG9ydCBmb3IgU0xBbmRyb2lkRGF0YUZvcm1hdF9QQ01fRVggKGFuZHJvaWQtMjEpIGlm
Ci0gIC8vIDMyLWJpdCBmbG9hdCByZXByZXNlbnRhdGlvbiBpcyBuZWVkZWQuCi0gIFNMRGF0YUZv
cm1hdF9QQ00gcGNtX2Zvcm1hdF87Ci0KLSAgYm9vbCBpbml0aWFsaXplZF87Ci0gIGJvb2wgcmVj
b3JkaW5nXzsKLQotICAvLyBUaGlzIGludGVyZmFjZSBleHBvc2VzIGNyZWF0aW9uIG1ldGhvZHMg
Zm9yIGFsbCB0aGUgT3BlblNMIEVTIG9iamVjdCB0eXBlcy4KLSAgLy8gSXQgaXMgdGhlIE9wZW5T
TCBFUyBBUEkgZW50cnkgcG9pbnQuCi0gIFNMRW5naW5lSXRmIGVuZ2luZV87Ci0KLSAgLy8gVGhl
IGF1ZGlvIHJlY29yZGVyIG1lZGlhIG9iamVjdCByZWNvcmRzIGF1ZGlvIHRvIHRoZSBkZXN0aW5h
dGlvbiBzcGVjaWZpZWQKLSAgLy8gYnkgdGhlIGRhdGEgc2luayBjYXB0dXJpbmcgaXQgZnJvbSB0
aGUgaW5wdXQgc3BlY2lmaWVkIGJ5IHRoZSBkYXRhIHNvdXJjZS4KLSAgd2VicnRjOjpTY29wZWRT
TE9iamVjdEl0ZiByZWNvcmRlcl9vYmplY3RfOwotCi0gIC8vIFRoaXMgaW50ZXJmYWNlIGlzIHN1
cHBvcnRlZCBvbiB0aGUgYXVkaW8gcmVjb3JkZXIgb2JqZWN0IGFuZCBpdCBjb250cm9scwotICAv
LyB0aGUgc3RhdGUgb2YgdGhlIGF1ZGlvIHJlY29yZGVyLgotICBTTFJlY29yZEl0ZiByZWNvcmRl
cl87Ci0KLSAgLy8gVGhlIEFuZHJvaWQgU2ltcGxlIEJ1ZmZlciBRdWV1ZSBpbnRlcmZhY2UgaXMg
c3VwcG9ydGVkIG9uIHRoZSBhdWRpbwotICAvLyByZWNvcmRlci4gRm9yIHJlY29yZGluZywgYW4g
YXBwIHNob3VsZCBlbnF1ZXVlIGVtcHR5IGJ1ZmZlcnMuIFdoZW4gYQotICAvLyByZWdpc3RlcmVk
IGNhbGxiYWNrIHNlbmRzIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzeXN0ZW0gaGFzIGZpbmlzaGVk
IHdyaXRpbmcKLSAgLy8gZGF0YSB0byB0aGUgYnVmZmVyLCB0aGUgYXBwIGNhbiByZWFkIHRoZSBi
dWZmZXIuCi0gIFNMQW5kcm9pZFNpbXBsZUJ1ZmZlclF1ZXVlSXRmIHNpbXBsZV9idWZmZXJfcXVl
dWVfOwotCi0gIC8vIENvbnN1bWVzIGF1ZGlvIG9mIG5hdGl2ZSBidWZmZXIgc2l6ZSBhbmQgZmVl
ZHMgdGhlIFdlYlJUQyBsYXllciB3aXRoIDEwbXMKLSAgLy8gY2h1bmtzIG9mIGF1ZGlvLgotICBz
dGQ6OnVuaXF1ZV9wdHI8RmluZUF1ZGlvQnVmZmVyPiBmaW5lX2F1ZGlvX2J1ZmZlcl87Ci0KLSAg
Ly8gUXVldWUgb2YgYXVkaW8gYnVmZmVycyB0byBiZSB1c2VkIGJ5IHRoZSByZWNvcmRlciBvYmpl
Y3QgZm9yIGNhcHR1cmluZwotICAvLyBhdWRpby4gVGhleSB3aWxsIGJlIHVzZWQgaW4gYSBSb3Vu
ZC1yb2JpbiB3YXkgYW5kIHRoZSBzaXplIG9mIGVhY2ggYnVmZmVyCi0gIC8vIGlzIGdpdmVuIGJ5
IEF1ZGlvUGFyYW1ldGVyczo6R2V0Qnl0ZXNQZXJCdWZmZXIoKSwgaS5lLiwgaXQgY29ycmVzcG9u
ZHMgdG8KLSAgLy8gdGhlIG5hdGl2ZSBPcGVuU0wgRVMgYnVmZmVyIHNpemUuCi0gIHN0ZDo6dW5p
cXVlX3B0cjxzdGQ6OnVuaXF1ZV9wdHI8U0xpbnQ4W10+W10+IGF1ZGlvX2J1ZmZlcnNfOwotCi0g
IC8vIEtlZXBzIHRyYWNrIG9mIGFjdGl2ZSBhdWRpbyBidWZmZXIgJ24nIGluIHRoZSBhdWRpb19i
dWZmZXJzX1tuXSBxdWV1ZS4KLSAgLy8gRXhhbXBsZSAoa051bU9mT3BlblNMRVNCdWZmZXJzID0g
Mik6IGNvdW50cyAwLCAxLCAwLCAxLCAuLi4KLSAgaW50IGJ1ZmZlcl9pbmRleF87Ci0KLSAgLy8g
TGFzdCB0aW1lIHRoZSBPcGVuU0wgRVMgbGF5ZXIgZGVsaXZlcmVkIHJlY29yZGVkIGF1ZGlvIGRh
dGEuCi0gIHVpbnQzMl90IGxhc3RfcmVjX3RpbWVfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHdl
YnJ0YwotCi0jZW5kaWYgIC8vIFdFQlJUQ19NT0RVTEVTX0FVRElPX0RFVklDRV9BTkRST0lEX09Q
RU5TTEVTX1JFQ09SREVSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvdm9pY2VlbmdpbmUvQnVpbGRJbmZvLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mby5qYXZhCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vlbmdp
bmUvQnVpbGRJbmZvLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBv
cnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotcHVibGljIGZpbmFsIGNsYXNzIEJ1aWxkSW5mbyB7Ci0g
IHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERldmljZSgpIHsKLSAgICByZXR1cm4gQnVpbGQuREVW
SUNFOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlTW9kZWwoKSB7Ci0g
ICAgcmV0dXJuIEJ1aWxkLk1PREVMOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0
UHJvZHVjdCgpIHsKLSAgICByZXR1cm4gQnVpbGQuUFJPRFVDVDsKLSAgfQotCi0gIHB1YmxpYyBz
dGF0aWMgU3RyaW5nIGdldEJyYW5kKCkgewotICAgIHJldHVybiBCdWlsZC5CUkFORDsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERldmljZU1hbnVmYWN0dXJlcigpIHsKLSAgICBy
ZXR1cm4gQnVpbGQuTUFOVUZBQ1RVUkVSOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcg
Z2V0QW5kcm9pZEJ1aWxkSWQoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLklEOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBTdHJpbmcgZ2V0QnVpbGRUeXBlKCkgewotICAgIHJldHVybiBCdWlsZC5UWVBF
OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QnVpbGRSZWxlYXNlKCkgewotICAg
IHJldHVybiBCdWlsZC5WRVJTSU9OLlJFTEVBU0U7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGlu
dCBnZXRTZGtWZXJzaW9uKCkgewotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0g
IH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2lu
ZS9XZWJSdGNBdWRpb0VmZmVjdHMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2ph
dmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEJKHJl
dmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2lj
ZWVuZ2luZS9XZWJSdGNBdWRpb0VmZmVjdHMuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMyNSAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNl
ZW5naW5lOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi1pbXBvcnQgYW5kcm9pZC5h
bm5vdGF0aW9uLlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQWNvdXN0
aWNFY2hvQ2FuY2VsZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1ZGlvRWZmZWN0
OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdWRpb0VmZmVjdC5EZXNjcmlwdG9yOwot
aW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdXRvbWF0aWNHYWluQ29udHJvbDsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguTm9pc2VTdXBwcmVzc29yOwotaW1wb3J0IGFuZHJvaWQu
b3MuQnVpbGQ7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJ
RDsKLQotLy8gVGhpcyBjbGFzcyB3cmFwcyBjb250cm9sIG9mIHRocmVlIGRpZmZlcmVudCBwbGF0
Zm9ybSBlZmZlY3RzLiBTdXBwb3J0ZWQKLS8vIGVmZmVjdHMgYXJlOiBBY291c3RpY0VjaG9DYW5j
ZWxlciAoQUVDKSBhbmQgTm9pc2VTdXBwcmVzc29yIChOUykuCi0vLyBDYWxsaW5nIGVuYWJsZSgp
IHdpbGwgYWN0aXZlIGFsbCBlZmZlY3RzIHRoYXQgYXJlCi0vLyBzdXBwb3J0ZWQgYnkgdGhlIGRl
dmljZSBpZiB0aGUgY29ycmVzcG9uZGluZyB8c2hvdWxkRW5hYmxlWFhYfCBtZW1iZXIgaXMgc2V0
LgotY2xhc3MgV2ViUnRjQXVkaW9FZmZlY3RzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9v
bGVhbiBERUJVRyA9IGZhbHNlOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcg
PSAiV2ViUnRjQXVkaW9FZmZlY3RzIjsKLQotICAvLyBVVUlEcyBmb3IgU29mdHdhcmUgQXVkaW8g
RWZmZWN0cyB0aGF0IHdlIHdhbnQgdG8gYXZvaWQgdXNpbmcuCi0gIC8vIFRoZSBpbXBsZW1lbnRv
ciBmaWVsZCB3aWxsIGJlIHNldCB0byAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFVVSUQgQU9TUF9BQ09VU1RJQ19FQ0hPX0NBTkNFTEVS
ID0KLSAgICAgIFVVSUQuZnJvbVN0cmluZygiYmIzOTJlYzAtOGQ0ZC0xMWUwLWE4OTYtMDAwMmE1
ZDVjNTFiIik7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFVVSUQgQU9TUF9OT0lTRV9TVVBQUkVT
U09SID0KLSAgICAgIFVVSUQuZnJvbVN0cmluZygiYzA2Yzg0MDAtOGUwNi0xMWUwLTljYjYtMDAw
MmE1ZDVjNTFiIik7Ci0KLSAgLy8gQ29udGFpbnMgdGhlIGF2YWlsYWJsZSBlZmZlY3QgZGVzY3Jp
cHRvcnMgcmV0dXJuZWQgZnJvbSB0aGUKLSAgLy8gQXVkaW9FZmZlY3QuZ2V0RWZmZWN0cygpIGNh
bGwuIFRoaXMgcmVzdWx0IGlzIGNhY2hlZCB0byBhdm9pZCBkb2luZyB0aGUKLSAgLy8gc2xvdyBP
UyBjYWxsIG11bHRpcGxlIHRpbWVzLgotICBwcml2YXRlIHN0YXRpYyBEZXNjcmlwdG9yW10gY2Fj
aGVkRWZmZWN0cyA9IG51bGw7Ci0KLSAgLy8gQ29udGFpbnMgdGhlIGF1ZGlvIGVmZmVjdCBvYmpl
Y3RzLiBDcmVhdGVkIGluIGVuYWJsZSgpIGFuZCBkZXN0cm95ZWQKLSAgLy8gaW4gcmVsZWFzZSgp
LgotICBwcml2YXRlIEFjb3VzdGljRWNob0NhbmNlbGVyIGFlYyA9IG51bGw7Ci0gIHByaXZhdGUg
Tm9pc2VTdXBwcmVzc29yIG5zID0gbnVsbDsKLQotICAvLyBBZmZlY3RzIHRoZSBmaW5hbCBzdGF0
ZSBnaXZlbiB0byB0aGUgc2V0RW5hYmxlZCgpIG1ldGhvZCBvbiBlYWNoIGVmZmVjdC4KLSAgLy8g
VGhlIGRlZmF1bHQgc3RhdGUgaXMgc2V0IHRvICJkaXNhYmxlZCIgYnV0IGVhY2ggZWZmZWN0IGNh
biBhbHNvIGJlIGVuYWJsZWQKLSAgLy8gYnkgY2FsbGluZyBzZXRBRUMoKSBhbmQgc2V0TlMoKS4K
LSAgLy8gVG8gZW5hYmxlIGFuIGVmZmVjdCwgYm90aCB0aGUgc2hvdWxkRW5hYmxlWFhYIG1lbWJl
ciBhbmQgdGhlIHN0YXRpYwotICAvLyBjYW5Vc2VYWFgoKSBtdXN0IGJlIHRydWUuCi0gIHByaXZh
dGUgYm9vbGVhbiBzaG91bGRFbmFibGVBZWMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHNo
b3VsZEVuYWJsZU5zID0gZmFsc2U7Ci0KLSAgLy8gQ2hlY2tzIGlmIHRoZSBkZXZpY2UgaW1wbGVt
ZW50cyBBY291c3RpYyBFY2hvIENhbmNlbGxhdGlvbiAoQUVDKS4KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBkZXZpY2UgaW1wbGVtZW50cyBBRUMsIGZhbHNlIG90aGVyd2lzZS4KLSAgcHVibGlj
IHN0YXRpYyBib29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAg
Ly8gTm90ZTogd2UncmUgdXNpbmcgaXNBY291c3RpY0VjaG9DYW5jZWxlckVmZmVjdEF2YWlsYWJs
ZSgpIGluc3RlYWQgb2YKLSAgICAvLyBBY291c3RpY0VjaG9DYW5jZWxlci5pc0F2YWlsYWJsZSgp
IHRvIGF2b2lkIHRoZSBleHBlbnNpdmUgZ2V0RWZmZWN0cygpCi0gICAgLy8gT1MgQVBJIGNhbGwu
Ci0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuT3JIaWdoZXIo
KSAmJiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCk7Ci0gIH0KLQotICAv
LyBDaGVja3MgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIE5vaXNlIFN1cHByZXNzaW9uIChOUyku
Ci0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGltcGxlbWVudHMgTlMsIGZhbHNlIG90
aGVyd2lzZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9y
dGVkKCkgewotICAgIC8vIE5vdGU6IHdlJ3JlIHVzaW5nIGlzTm9pc2VTdXBwcmVzc29yRWZmZWN0
QXZhaWxhYmxlKCkgaW5zdGVhZCBvZgotICAgIC8vIE5vaXNlU3VwcHJlc3Nvci5pc0F2YWlsYWJs
ZSgpIHRvIGF2b2lkIHRoZSBleHBlbnNpdmUgZ2V0RWZmZWN0cygpCi0gICAgLy8gT1MgQVBJIGNh
bGwuCi0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuT3JIaWdo
ZXIoKSAmJiBpc05vaXNlU3VwcHJlc3NvckVmZmVjdEF2YWlsYWJsZSgpOwotICB9Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0ZWQgZm9yIEhXIEFFQyB1c2Fn
ZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJCbGFja2xp
c3RlZCgpIHsKLSAgICBMaXN0PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBXZWJSdGNBdWRp
b1V0aWxzLmdldEJsYWNrTGlzdGVkTW9kZWxzRm9yQWVjVXNhZ2UoKTsKLSAgICBib29sZWFuIGlz
QmxhY2tsaXN0ZWQgPSBibGFja0xpc3RlZE1vZGVscy5jb250YWlucyhCdWlsZC5NT0RFTCk7Ci0g
ICAgaWYgKGlzQmxhY2tsaXN0ZWQpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsIEJ1aWxkLk1PREVM
ICsgIiBpcyBibGFja2xpc3RlZCBmb3IgSFcgQUVDIHVzYWdlISIpOwotICAgIH0KLSAgICByZXR1
cm4gaXNCbGFja2xpc3RlZDsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNl
IGlzIGJsYWNrbGlzdGVkIGZvciBIVyBOUyB1c2FnZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFu
IGlzTm9pc2VTdXBwcmVzc29yQmxhY2tsaXN0ZWQoKSB7Ci0gICAgTGlzdDxTdHJpbmc+IGJsYWNr
TGlzdGVkTW9kZWxzID0gV2ViUnRjQXVkaW9VdGlscy5nZXRCbGFja0xpc3RlZE1vZGVsc0Zvck5z
VXNhZ2UoKTsKLSAgICBib29sZWFuIGlzQmxhY2tsaXN0ZWQgPSBibGFja0xpc3RlZE1vZGVscy5j
b250YWlucyhCdWlsZC5NT0RFTCk7Ci0gICAgaWYgKGlzQmxhY2tsaXN0ZWQpIHsKLSAgICAgIExv
Z2dpbmcudyhUQUcsIEJ1aWxkLk1PREVMICsgIiBpcyBibGFja2xpc3RlZCBmb3IgSFcgTlMgdXNh
Z2UhIik7Ci0gICAgfQotICAgIHJldHVybiBpc0JsYWNrbGlzdGVkOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBBRUMgc2hvdWxkIGJlIGV4Y2x1ZGVkIGJhc2VkIG9u
IGl0cyBVVUlELgotICAvLyBBdWRpb0VmZmVjdC5xdWVyeUVmZmVjdHMoKSBjYW4gdGhyb3cgSWxs
ZWdhbFN0YXRlRXhjZXB0aW9uLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRlIHN0YXRpYyBi
b29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJFeGNsdWRlZEJ5VVVJRCgpIHsKLSAgICBmb3Ig
KERlc2NyaXB0b3IgZCA6IGdldEF2YWlsYWJsZUVmZmVjdHMoKSkgewotICAgICAgaWYgKGQudHlw
ZS5lcXVhbHMoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDKQotICAgICAgICAgICYmIGQudXVp
ZC5lcXVhbHMoQU9TUF9BQ09VU1RJQ19FQ0hPX0NBTkNFTEVSKSkgewotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBOUyBzaG91bGQgYmUgZXhjbHVkZWQgYmFzZWQgb24g
aXRzIFVVSUQuCi0gIC8vIEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0cygpIGNhbiB0aHJvdyBJbGxl
Z2FsU3RhdGVFeGNlcHRpb24uCi0gIEBUYXJnZXRBcGkoMTgpCi0gIHByaXZhdGUgc3RhdGljIGJv
b2xlYW4gaXNOb2lzZVN1cHByZXNzb3JFeGNsdWRlZEJ5VVVJRCgpIHsKLSAgICBmb3IgKERlc2Ny
aXB0b3IgZCA6IGdldEF2YWlsYWJsZUVmZmVjdHMoKSkgewotICAgICAgaWYgKGQudHlwZS5lcXVh
bHMoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfTlMpICYmIGQudXVpZC5lcXVhbHMoQU9TUF9OT0lT
RV9TVVBQUkVTU09SKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ug
c3VwcG9ydHMgQWNvdXN0aWMgRWNobyBDYW5jZWxsYXRpb24gKEFFQykuCi0gIEBUYXJnZXRBcGko
MTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5jZWxlckVmZmVj
dEF2YWlsYWJsZSgpIHsKLSAgICByZXR1cm4gaXNFZmZlY3RUeXBlQXZhaWxhYmxlKEF1ZGlvRWZm
ZWN0LkVGRkVDVF9UWVBFX0FFQyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRl
dmljZSBzdXBwb3J0cyBOb2lzZSBTdXBwcmVzc2lvbiAoTlMpLgotICBAVGFyZ2V0QXBpKDE4KQot
ICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yRWZmZWN0QXZhaWxhYmxl
KCkgewotICAgIHJldHVybiBpc0VmZmVjdFR5cGVBdmFpbGFibGUoQXVkaW9FZmZlY3QuRUZGRUNU
X1RZUEVfTlMpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25kaXRpb25zIGZv
ciBzdXBwb3J0aW5nIHRoZSBIVyBBRUMgYXJlIGZ1bGZpbGxlZC4KLSAgLy8gSXQgd2lsbCBub3Qg
YmUgcG9zc2libGUgdG8gZW5hYmxlIHRoZSBIVyBBRUMgaWYgdGhpcyBtZXRob2QgcmV0dXJucyBm
YWxzZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVy
KCkgewotICAgIGJvb2xlYW4gY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIgPSBpc0Fjb3VzdGlj
RWNob0NhbmNlbGVyU3VwcG9ydGVkKCkKLSAgICAgICAgJiYgIVdlYlJ0Y0F1ZGlvVXRpbHMudXNl
V2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcigpCi0gICAgICAgICYmICFpc0Fjb3VzdGlj
RWNob0NhbmNlbGVyQmxhY2tsaXN0ZWQoKSAmJiAhaXNBY291c3RpY0VjaG9DYW5jZWxlckV4Y2x1
ZGVkQnlVVUlEKCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgImNhblVzZUFjb3VzdGljRWNob0NhbmNl
bGVyOiAiICsgY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIpOwotICAgIHJldHVybiBjYW5Vc2VB
Y291c3RpY0VjaG9DYW5jZWxlcjsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgY29u
ZGl0aW9ucyBmb3Igc3VwcG9ydGluZyB0aGUgSFcgTlMgYXJlIGZ1bGZpbGxlZC4KLSAgLy8gSXQg
d2lsbCBub3QgYmUgcG9zc2libGUgdG8gZW5hYmxlIHRoZSBIVyBOUyBpZiB0aGlzIG1ldGhvZCBy
ZXR1cm5zIGZhbHNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuVXNlTm9pc2VTdXBwcmVz
c29yKCkgewotICAgIGJvb2xlYW4gY2FuVXNlTm9pc2VTdXBwcmVzc29yID0gaXNOb2lzZVN1cHBy
ZXNzb3JTdXBwb3J0ZWQoKQotICAgICAgICAmJiAhV2ViUnRjQXVkaW9VdGlscy51c2VXZWJSdGNC
YXNlZE5vaXNlU3VwcHJlc3NvcigpICYmICFpc05vaXNlU3VwcHJlc3NvckJsYWNrbGlzdGVkKCkK
LSAgICAgICAgJiYgIWlzTm9pc2VTdXBwcmVzc29yRXhjbHVkZWRCeVVVSUQoKTsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiY2FuVXNlTm9pc2VTdXBwcmVzc29yOiAiICsgY2FuVXNlTm9pc2VTdXBwcmVz
c29yKTsKLSAgICByZXR1cm4gY2FuVXNlTm9pc2VTdXBwcmVzc29yOwotICB9Ci0KLSAgc3RhdGlj
IFdlYlJ0Y0F1ZGlvRWZmZWN0cyBjcmVhdGUoKSB7Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgVm9J
UCBlZmZlY3RzIChBRUMsIEFHQyBhbmQgTlMpIGFyZSBub3Qgc3VwcG9ydGVkLgotICAgIGlmICgh
V2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5PckhpZ2hlcigpKSB7Ci0gICAgICBM
b2dnaW5nLncoVEFHLCAiQVBJIGxldmVsIDE2IG9yIGhpZ2hlciBpcyByZXF1aXJlZCEiKTsKLSAg
ICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFdlYlJ0Y0F1ZGlvRWZmZWN0
cygpOwotICB9Ci0KLSAgcHJpdmF0ZSBXZWJSdGNBdWRpb0VmZmVjdHMoKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICB9
Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZv
cm0gQUVDLiBJdCBtb2RpZmllcwotICAvLyB8c2hvdWxkRW5hYmxlQWVjfCB3aGljaCBpcyB1c2Vk
IGluIGVuYWJsZSgpIHdoZXJlIHRoZSBhY3R1YWwgc3RhdGUKLSAgLy8gb2YgdGhlIEFFQyBlZmZl
Y3QgaXMgbW9kaWZpZWQuIFJldHVybnMgdHJ1ZSBpZiBIVyBBRUMgaXMgc3VwcG9ydGVkIGFuZAot
ICAvLyBmYWxzZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBib29sZWFuIHNldEFFQyhib29sZWFuIGVu
YWJsZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJzZXRBRUMoIiArIGVuYWJsZSArICIpIik7Ci0g
ICAgaWYgKCFjYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpKSB7Ci0gICAgICBMb2dnaW5nLnco
VEFHLCAiUGxhdGZvcm0gQUVDIGlzIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgIHNob3VsZEVuYWJs
ZUFlYyA9IGZhbHNlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYWVjICE9
IG51bGwgJiYgKGVuYWJsZSAhPSBzaG91bGRFbmFibGVBZWMpKSB7Ci0gICAgICBMb2dnaW5nLmUo
VEFHLCAiUGxhdGZvcm0gQUVDIHN0YXRlIGNhbid0IGJlIG1vZGlmaWVkIHdoaWxlIHJlY29yZGlu
ZyIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzaG91bGRFbmFibGVBZWMgPSBl
bmFibGU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRv
IGVuYWJsZSBvciBkaXNhYmxlIHRoZSBwbGF0Zm9ybSBOUy4gSXQgbW9kaWZpZXMKLSAgLy8gfHNo
b3VsZEVuYWJsZU5zfCB3aGljaCBpcyB1c2VkIGluIGVuYWJsZSgpIHdoZXJlIHRoZSBhY3R1YWwg
c3RhdGUKLSAgLy8gb2YgdGhlIE5TIGVmZmVjdCBpcyBtb2RpZmllZC4gUmV0dXJucyB0cnVlIGlm
IEhXIE5TIGlzIHN1cHBvcnRlZCBhbmQKLSAgLy8gZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMg
Ym9vbGVhbiBzZXROUyhib29sZWFuIGVuYWJsZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJzZXRO
UygiICsgZW5hYmxlICsgIikiKTsKLSAgICBpZiAoIWNhblVzZU5vaXNlU3VwcHJlc3NvcigpKSB7
Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiUGxhdGZvcm0gTlMgaXMgbm90IHN1cHBvcnRlZCIpOwot
ICAgICAgc2hvdWxkRW5hYmxlTnMgPSBmYWxzZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgaWYgKG5zICE9IG51bGwgJiYgKGVuYWJsZSAhPSBzaG91bGRFbmFibGVOcykpIHsKLSAg
ICAgIExvZ2dpbmcuZShUQUcsICJQbGF0Zm9ybSBOUyBzdGF0ZSBjYW4ndCBiZSBtb2RpZmllZCB3
aGlsZSByZWNvcmRpbmciKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc2hvdWxk
RW5hYmxlTnMgPSBlbmFibGU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9p
ZCBlbmFibGUoaW50IGF1ZGlvU2Vzc2lvbikgewotICAgIExvZ2dpbmcuZChUQUcsICJlbmFibGUo
YXVkaW9TZXNzaW9uPSIgKyBhdWRpb1Nlc3Npb24gKyAiKSIpOwotICAgIGFzc2VydFRydWUoYWVj
ID09IG51bGwpOwotICAgIGFzc2VydFRydWUobnMgPT0gbnVsbCk7Ci0KLSAgICAvLyBBZGQgbG9n
Z2luZyBvZiBzdXBwb3J0ZWQgZWZmZWN0cyBidXQgZmlsdGVyIG91dCAiVm9JUCBlZmZlY3RzIiwg
aS5lLiwKLSAgICAvLyBBRUMsIEFFQyBhbmQgTlMuCi0gICAgZm9yIChEZXNjcmlwdG9yIGQgOiBB
dWRpb0VmZmVjdC5xdWVyeUVmZmVjdHMoKSkgewotICAgICAgaWYgKGVmZmVjdFR5cGVJc1ZvSVAo
ZC50eXBlKSB8fCBERUJVRykgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAibmFtZTogIiArIGQu
bmFtZSArICIsICIKLSAgICAgICAgICAgICAgICArICJtb2RlOiAiICsgZC5jb25uZWN0TW9kZSAr
ICIsICIKLSAgICAgICAgICAgICAgICArICJpbXBsZW1lbnRvcjogIiArIGQuaW1wbGVtZW50b3Ig
KyAiLCAiCi0gICAgICAgICAgICAgICAgKyAiVVVJRDogIiArIGQudXVpZCk7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSkgewotICAg
ICAgLy8gQ3JlYXRlIGFuIEFjb3VzdGljRWNob0NhbmNlbGVyIGFuZCBhdHRhY2ggaXQgdG8gdGhl
IEF1ZGlvUmVjb3JkIG9uCi0gICAgICAvLyB0aGUgc3BlY2lmaWVkIGF1ZGlvIHNlc3Npb24uCi0g
ICAgICBhZWMgPSBBY291c3RpY0VjaG9DYW5jZWxlci5jcmVhdGUoYXVkaW9TZXNzaW9uKTsKLSAg
ICAgIGlmIChhZWMgIT0gbnVsbCkgewotICAgICAgICBib29sZWFuIGVuYWJsZWQgPSBhZWMuZ2V0
RW5hYmxlZCgpOwotICAgICAgICBib29sZWFuIGVuYWJsZSA9IHNob3VsZEVuYWJsZUFlYyAmJiBj
YW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpOwotICAgICAgICBpZiAoYWVjLnNldEVuYWJsZWQo
ZW5hYmxlKSAhPSBBdWRpb0VmZmVjdC5TVUNDRVNTKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRB
RywgIkZhaWxlZCB0byBzZXQgdGhlIEFjb3VzdGljRWNob0NhbmNlbGVyIHN0YXRlIik7Ci0gICAg
ICAgIH0KLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIkFjb3VzdGljRWNob0NhbmNlbGVyOiB3YXMg
IiArIChlbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIikKLSAgICAgICAgICAgICAgICAr
ICIsIGVuYWJsZTogIiArIGVuYWJsZSArICIsIGlzIG5vdzogIgotICAgICAgICAgICAgICAgICsg
KGFlYy5nZXRFbmFibGVkKCkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7Ci0gICAgICB9IGVs
c2UgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgQWNvdXN0
aWNFY2hvQ2FuY2VsZXIgaW5zdGFuY2UiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXNO
b2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSkgewotICAgICAgLy8gQ3JlYXRlIGFuIE5vaXNlU3Vw
cHJlc3NvciBhbmQgYXR0YWNoIGl0IHRvIHRoZSBBdWRpb1JlY29yZCBvbiB0aGUKLSAgICAgIC8v
IHNwZWNpZmllZCBhdWRpbyBzZXNzaW9uLgotICAgICAgbnMgPSBOb2lzZVN1cHByZXNzb3IuY3Jl
YXRlKGF1ZGlvU2Vzc2lvbik7Ci0gICAgICBpZiAobnMgIT0gbnVsbCkgewotICAgICAgICBib29s
ZWFuIGVuYWJsZWQgPSBucy5nZXRFbmFibGVkKCk7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlID0g
c2hvdWxkRW5hYmxlTnMgJiYgY2FuVXNlTm9pc2VTdXBwcmVzc29yKCk7Ci0gICAgICAgIGlmIChu
cy5zZXRFbmFibGVkKGVuYWJsZSkgIT0gQXVkaW9FZmZlY3QuU1VDQ0VTUykgewotICAgICAgICAg
IExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gc2V0IHRoZSBOb2lzZVN1cHByZXNzb3Igc3RhdGUi
KTsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTm9pc2VTdXBwcmVzc29yOiB3
YXMgIiArIChlbmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgKyAiLCBlbmFibGU6ICIK
LSAgICAgICAgICAgICAgICArIGVuYWJsZSArICIsIGlzIG5vdzogIiArIChucy5nZXRFbmFibGVk
KCkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBM
b2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgTm9pc2VTdXBwcmVzc29yIGluc3Rh
bmNlIik7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVsZWFzZXMgYWxsIG5hdGl2ZSBh
dWRpbyBlZmZlY3QgcmVzb3VyY2VzLiBJdCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8KLSAgLy8gcmVs
ZWFzZSB0aGUgZWZmZWN0IGVuZ2luZSB3aGVuIG5vdCBpbiB1c2UgYXMgY29udHJvbCBjYW4gYmUg
cmV0dXJuZWQKLSAgLy8gdG8gb3RoZXIgYXBwbGljYXRpb25zIG9yIHRoZSBuYXRpdmUgcmVzb3Vy
Y2VzIHJlbGVhc2VkLgotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChU
QUcsICJyZWxlYXNlIik7Ci0gICAgaWYgKGFlYyAhPSBudWxsKSB7Ci0gICAgICBhZWMucmVsZWFz
ZSgpOwotICAgICAgYWVjID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKG5zICE9IG51bGwpIHsKLSAg
ICAgIG5zLnJlbGVhc2UoKTsKLSAgICAgIG5zID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvLyBS
ZXR1cm5zIHRydWUgZm9yIGVmZmVjdCB0eXBlcyBpbiB8dHlwZXwgdGhhdCBhcmUgb2YgIlZvSVAi
IHR5cGVzOgotICAvLyBBY291c3RpYyBFY2hvIENhbmNlbGVyIChBRUMpIG9yIEF1dG9tYXRpYyBH
YWluIENvbnRyb2wgKEFHQykgb3IKLSAgLy8gTm9pc2UgU3VwcHJlc3NvciAoTlMpLiBOb3RlIHRo
YXQsIGFuIGV4dHJhIGNoZWNrIGZvciBzdXBwb3J0IGlzIG5lZWRlZAotICAvLyBpbiBlYWNoIGNv
bXBhcmlzb24gc2luY2Ugc29tZSBkZXZpY2VzIGluY2x1ZGVzIGVmZmVjdHMgaW4gdGhlCi0gIC8v
IEF1ZGlvRWZmZWN0LkRlc2NyaXB0b3IgYXJyYXkgdGhhdCBhcmUgYWN0dWFsbHkgbm90IGF2YWls
YWJsZSBvbiB0aGUgZGV2aWNlLgotICAvLyBBcyBhbiBleGFtcGxlOiBTYW1zdW5nIEdhbGF4eSBT
NiBpbmNsdWRlcyBhbiBBR0MgaW4gdGhlIGRlc2NyaXB0b3IgYnV0Ci0gIC8vIEF1dG9tYXRpY0dh
aW5Db250cm9sLmlzQXZhaWxhYmxlKCkgcmV0dXJucyBmYWxzZS4KLSAgQFRhcmdldEFwaSgxOCkK
LSAgcHJpdmF0ZSBib29sZWFuIGVmZmVjdFR5cGVJc1ZvSVAoVVVJRCB0eXBlKSB7Ci0gICAgaWYg
KCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5QmVhbk1SMk9ySGlnaGVyKCkpCi0gICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX0FF
Qy5lcXVhbHModHlwZSkgJiYgaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpKQotICAg
ICAgICB8fCAoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfTlMuZXF1YWxzKHR5cGUpICYmIGlzTm9p
c2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3aGlj
aCB0aHJvd3MgYW4gZXhjZXB0aW9uIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHBy
aXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlm
ICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVk
IGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUg
Y2FjaGVkIGNvcHkgb2YgdGhlIGF1ZGlvIGVmZmVjdHMgYXJyYXksIGlmIGF2YWlsYWJsZSwgb3IK
LSAgLy8gcXVlcmllcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmb3IgdGhlIGxpc3Qgb2YgZWZmZWN0
cy4KLSAgcHJpdmF0ZSBzdGF0aWMgRGVzY3JpcHRvcltdIGdldEF2YWlsYWJsZUVmZmVjdHMoKSB7
Ci0gICAgaWYgKGNhY2hlZEVmZmVjdHMgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIGNhY2hlZEVm
ZmVjdHM7Ci0gICAgfQotICAgIC8vIFRoZSBjYWNoaW5nIGlzIGJlc3QgZWZmb3J0IG9ubHkgLSBp
ZiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBzZXZlcmFsCi0gICAgLy8gdGhyZWFkcyBpbiBw
YXJhbGxlbCwgdGhleSBtYXkgZW5kIHVwIGRvaW5nIHRoZSB1bmRlcmx5aW5nIE9TIGNhbGwKLSAg
ICAvLyBtdWx0aXBsZSB0aW1lcy4gSXQncyBub3JtYWxseSBvbmx5IGNhbGxlZCBvbiBvbmUgdGhy
ZWFkIHNvIHRoZXJlJ3Mgbm8KLSAgICAvLyByZWFsIG5lZWQgdG8gb3B0aW1pemUgZm9yIHRoZSBt
dWx0aXBsZSB0aHJlYWRzIGNhc2UuCi0gICAgY2FjaGVkRWZmZWN0cyA9IEF1ZGlvRWZmZWN0LnF1
ZXJ5RWZmZWN0cygpOwotICAgIHJldHVybiBjYWNoZWRFZmZlY3RzOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIGFuIGVmZmVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgYXZhaWxhYmxl
LiBGdW5jdGlvbmFsbHkKLSAgLy8gZXF1aXZhbGVudCB0byAoTm9pc2VTdXBwcmVzc29yfEF1dG9t
YXRpY0dhaW5Db250cm9sfC4uLikuaXNBdmFpbGFibGUoKSwgYnV0Ci0gIC8vIGZhc3RlciBhcyBp
dCBhdm9pZHMgdGhlIGV4cGVuc2l2ZSBPUyBjYWxsIHRvIGVudW1lcmF0ZSBlZmZlY3RzLgotICBw
cml2YXRlIHN0YXRpYyBib29sZWFuIGlzRWZmZWN0VHlwZUF2YWlsYWJsZShVVUlEIGVmZmVjdFR5
cGUpIHsKLSAgICBEZXNjcmlwdG9yW10gZWZmZWN0cyA9IGdldEF2YWlsYWJsZUVmZmVjdHMoKTsK
LSAgICBpZiAoZWZmZWN0cyA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIGZvciAoRGVzY3JpcHRvciBkIDogZWZmZWN0cykgewotICAgICAgaWYgKGQudHlwZS5lcXVh
bHMoZWZmZWN0VHlwZSkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlci5qYXZhCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNB
dWRpb01hbmFnZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlci5qYXZhCShub25l
eGlzdGVudCkKQEAgLTEsMzQ3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7
Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQu
Y29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdl
cjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVk
aWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQ7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5BdWRpb1RyYWNrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci0K
LWltcG9ydCBqYXZhLnV0aWwuVGltZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKLQot
Ly8gV2ViUnRjQXVkaW9NYW5hZ2VyIGhhbmRsZXMgdGFza3MgdGhhdCB1c2VzIGFuZHJvaWQubWVk
aWEuQXVkaW9NYW5hZ2VyLgotLy8gQXQgY29uc3RydWN0aW9uLCBzdG9yZUF1ZGlvUGFyYW1ldGVy
cygpIGlzIGNhbGxlZCBhbmQgaXQgcmV0cmlldmVzCi0vLyBmdW5kYW1lbnRhbCBhdWRpbyBwYXJh
bWV0ZXJzIGxpa2UgbmF0aXZlIHNhbXBsZSByYXRlIGFuZCBudW1iZXIgb2YgY2hhbm5lbHMuCi0v
LyBUaGUgcmVzdWx0IGlzIHRoZW4gcHJvdmlkZWQgdG8gdGhlIGNhbGxlciBieSBuYXRpdmVDYWNo
ZUF1ZGlvUGFyYW1ldGVycygpLgotLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjYWxsIGluaXQo
KSB0byBzZXQgdXAgdGhlIGF1ZGlvIGVudmlyb25tZW50IGZvciBiZXN0Ci0vLyBwb3NzaWJsZSAi
Vm9JUCBwZXJmb3JtYW5jZSIuIEFsbCBzZXR0aW5ncyBkb25lIGluIGluaXQoKSBhcmUgcmV2ZXJ0
ZWQgYnkKLS8vIGRpc3Bvc2UoKS4gVGhpcyBjbGFzcyBjYW4gYWxzbyBiZSB1c2VkIHdpdGhvdXQg
Y2FsbGluZyBpbml0KCkgaWYgdGhlIHVzZXIKLS8vIHByZWZlcnMgdG8gc2V0IHVwIHRoZSBhdWRp
byBlbnZpcm9ubWVudCBzZXBhcmF0ZWx5LiBIb3dldmVyLCBpdCBpcwotLy8gcmVjb21tZW5kZWQg
dG8gYWx3YXlzIHVzZSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OLgotcHVibGlj
IGNsYXNzIFdlYlJ0Y0F1ZGlvTWFuYWdlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xl
YW4gREVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0g
IldlYlJ0Y0F1ZGlvTWFuYWdlciI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBibGFja2xp
c3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlID0gZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xl
YW4gYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZUlzT3ZlcnJpZGRlbiA9IGZhbHNlOwot
Ci0gIC8vIENhbGwgdGhpcyBtZXRob2QgdG8gb3ZlcnJpZGUgdGhlIGRlYXVsdCBsaXN0IG9mIGJs
YWNrbGlzdGVkIGRldmljZXMKLSAgLy8gc3BlY2lmaWVkIGluIFdlYlJ0Y0F1ZGlvVXRpbHMuQkxB
Q0tMSVNURURfT1BFTl9TTF9FU19NT0RFTFMuCi0gIC8vIEFsbG93cyBhbiBhcHAgdG8gdGFrZSBj
b250cm9sIG92ZXIgd2hpY2ggZGV2aWNlcyB0byBleGx1ZGUgZnJvbSB1c2luZwotICAvLyB0aGUg
T3BlblNMIEVTIGF1ZGlvIG91dHB1dCBwYXRoCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVk
IHZvaWQgc2V0QmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZShib29sZWFuIGVuYWJsZSkg
ewotICAgIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJc092ZXJyaWRkZW4gPSB0cnVl
OwotICAgIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UgPSBlbmFibGU7Ci0gIH0KLQot
ICAvLyBEZWZhdWx0IGF1ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4K
LSAgLy8gR3VhcmFudGVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBpbnQgREVGQVVMVF9GUkFNRV9QRVJfQlVGRkVSID0gMjU2OwotCi0gIC8vIFRP
RE8oaGVucmlrYSk6IGFkZCBzdGVyZW8gc3VwcG9ydCBmb3IgcGxheW91dC4KLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgaW50IENIQU5ORUxTID0gMTsKLQotICAvLyBMaXN0IG9mIHBvc3NpYmxlIGF1
ZGlvIG1vZGVzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBBVURJT19NT0RFUyA9
IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAiTU9ERV9OT1JNQUwiLCAiTU9ERV9SSU5HVE9ORSIsICJN
T0RFX0lOX0NBTEwiLCAiTU9ERV9JTl9DT01NVU5JQ0FUSU9OIiwKLSAgfTsKLQotICAvLyBQcml2
YXRlIHV0aWxpdHkgY2xhc3MgdGhhdCBwZXJpb2RpY2FsbHkgY2hlY2tzIGFuZCBsb2dzIHRoZSB2
b2x1bWUgbGV2ZWwKLSAgLy8gb2YgdGhlIGF1ZGlvIHN0cmVhbSB0aGF0IGlzIGN1cnJlbnRseSBj
b250cm9sbGVkIGJ5IHRoZSB2b2x1bWUgY29udHJvbC4KLSAgLy8gQSB0aW1lciB0cmlnZ2VycyBs
b2dzIG9uY2UgZXZlcnkgMTAgc2Vjb25kcyBhbmQgdGhlIHRpbWVyJ3MgYXNzb2NpYXRlZAotICAv
LyB0aHJlYWQgaXMgbmFtZWQgIldlYlJ0Y1ZvbHVtZUxldmVsTG9nZ2VyVGhyZWFkIi4KLSAgcHJp
dmF0ZSBzdGF0aWMgY2xhc3MgVm9sdW1lTG9nZ2VyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEhSRUFEX05BTUUgPSAiV2ViUnRjVm9sdW1lTGV2ZWxMb2dnZXJUaHJlYWQiOwot
ICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBUSU1FUl9QRVJJT0RfSU5fU0VDT05EUyA9IDEw
OwotCi0gICAgcHJpdmF0ZSBmaW5hbCBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotICAgIHBy
aXZhdGUgVGltZXIgdGltZXI7Ci0KLSAgICBwdWJsaWMgVm9sdW1lTG9nZ2VyKEF1ZGlvTWFuYWdl
ciBhdWRpb01hbmFnZXIpIHsKLSAgICAgIHRoaXMuYXVkaW9NYW5hZ2VyID0gYXVkaW9NYW5hZ2Vy
OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgewotICAgICAgdGltZXIgPSBuZXcg
VGltZXIoVEhSRUFEX05BTUUpOwotICAgICAgdGltZXIuc2NoZWR1bGUobmV3IExvZ1ZvbHVtZVRh
c2soYXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1JJ
TkcpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1NYXhW
b2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKSksCi0gICAgICAgICAgMCwgVElN
RVJfUEVSSU9EX0lOX1NFQ09ORFMgKiAxMDAwKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNz
IExvZ1ZvbHVtZVRhc2sgZXh0ZW5kcyBUaW1lclRhc2sgewotICAgICAgcHJpdmF0ZSBmaW5hbCBp
bnQgbWF4UmluZ1ZvbHVtZTsKLSAgICAgIHByaXZhdGUgZmluYWwgaW50IG1heFZvaWNlQ2FsbFZv
bHVtZTsKLQotICAgICAgTG9nVm9sdW1lVGFzayhpbnQgbWF4UmluZ1ZvbHVtZSwgaW50IG1heFZv
aWNlQ2FsbFZvbHVtZSkgewotICAgICAgICB0aGlzLm1heFJpbmdWb2x1bWUgPSBtYXhSaW5nVm9s
dW1lOwotICAgICAgICB0aGlzLm1heFZvaWNlQ2FsbFZvbHVtZSA9IG1heFZvaWNlQ2FsbFZvbHVt
ZTsKLSAgICAgIH0KLQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBmaW5hbCBp
bnQgbW9kZSA9IGF1ZGlvTWFuYWdlci5nZXRNb2RlKCk7Ci0gICAgICAgIGlmIChtb2RlID09IEF1
ZGlvTWFuYWdlci5NT0RFX1JJTkdUT05FKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlNU
UkVBTV9SSU5HIHN0cmVhbSB2b2x1bWU6ICIKLSAgICAgICAgICAgICAgICAgICsgYXVkaW9NYW5h
Z2VyLmdldFN0cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1JJTkcpICsgIiAobWF4PSIK
LSAgICAgICAgICAgICAgICAgICsgbWF4UmluZ1ZvbHVtZSArICIpIik7Ci0gICAgICAgIH0gZWxz
ZSBpZiAobW9kZSA9PSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OKSB7Ci0gICAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIlZPSUNFX0NBTEwgc3RyZWFtIHZvbHVtZTogIgotICAgICAg
ICAgICAgICAgICAgKyBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5T
VFJFQU1fVk9JQ0VfQ0FMTCkgKyAiIChtYXg9IgotICAgICAgICAgICAgICAgICAgKyBtYXhWb2lj
ZUNhbGxWb2x1bWUgKyAiKSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJp
dmF0ZSB2b2lkIHN0b3AoKSB7Ci0gICAgICBpZiAodGltZXIgIT0gbnVsbCkgewotICAgICAgICB0
aW1lci5jYW5jZWwoKTsKLSAgICAgICAgdGltZXIgPSBudWxsOwotICAgICAgfQotICAgIH0KLSAg
fQotCi0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVBdWRpb01hbmFnZXI7Ci0gIHByaXZhdGUg
ZmluYWwgQ29udGV4dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIEF1ZGlvTWFuYWdlciBhdWRp
b01hbmFnZXI7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gIHBy
aXZhdGUgaW50IG5hdGl2ZVNhbXBsZVJhdGU7Ci0gIHByaXZhdGUgaW50IG5hdGl2ZUNoYW5uZWxz
OwotCi0gIHByaXZhdGUgYm9vbGVhbiBoYXJkd2FyZUFFQzsKLSAgcHJpdmF0ZSBib29sZWFuIGhh
cmR3YXJlQUdDOwotICBwcml2YXRlIGJvb2xlYW4gaGFyZHdhcmVOUzsKLSAgcHJpdmF0ZSBib29s
ZWFuIGxvd0xhdGVuY3lPdXRwdXQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBsb3dMYXRlbmN5SW5wdXQ7
Ci0gIHByaXZhdGUgYm9vbGVhbiBwcm9BdWRpbzsKLSAgcHJpdmF0ZSBpbnQgc2FtcGxlUmF0ZTsK
LSAgcHJpdmF0ZSBpbnQgY2hhbm5lbHM7Ci0gIHByaXZhdGUgaW50IG91dHB1dEJ1ZmZlclNpemU7
Ci0gIHByaXZhdGUgaW50IGlucHV0QnVmZmVyU2l6ZTsKLQotICBwcml2YXRlIGZpbmFsIFZvbHVt
ZUxvZ2dlciB2b2x1bWVMb2dnZXI7Ci0KLSAgV2ViUnRjQXVkaW9NYW5hZ2VyKENvbnRleHQgY29u
dGV4dCwgbG9uZyBuYXRpdmVBdWRpb01hbmFnZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3Rv
ciIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgdGhpcy5jb250ZXh0
ID0gY29udGV4dDsKLSAgICB0aGlzLm5hdGl2ZUF1ZGlvTWFuYWdlciA9IG5hdGl2ZUF1ZGlvTWFu
YWdlcjsKLSAgICBhdWRpb01hbmFnZXIgPSAoQXVkaW9NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3Rl
bVNlcnZpY2UoQ29udGV4dC5BVURJT19TRVJWSUNFKTsKLSAgICBpZiAoREVCVUcpIHsKLSAgICAg
IFdlYlJ0Y0F1ZGlvVXRpbHMubG9nRGV2aWNlSW5mbyhUQUcpOwotICAgIH0KLSAgICB2b2x1bWVM
b2dnZXIgPSBuZXcgVm9sdW1lTG9nZ2VyKGF1ZGlvTWFuYWdlcik7Ci0gICAgc3RvcmVBdWRpb1Bh
cmFtZXRlcnMoKTsKLSAgICBuYXRpdmVDYWNoZUF1ZGlvUGFyYW1ldGVycyhzYW1wbGVSYXRlLCBj
aGFubmVscywgaGFyZHdhcmVBRUMsIGhhcmR3YXJlQUdDLCBoYXJkd2FyZU5TLAotICAgICAgICBs
b3dMYXRlbmN5T3V0cHV0LCBsb3dMYXRlbmN5SW5wdXQsIHByb0F1ZGlvLCBvdXRwdXRCdWZmZXJT
aXplLCBpbnB1dEJ1ZmZlclNpemUsCi0gICAgICAgIG5hdGl2ZUF1ZGlvTWFuYWdlcik7Ci0gIH0K
LQotICBwcml2YXRlIGJvb2xlYW4gaW5pdCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdCIg
KyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKGluaXRpYWxpemVk
KSB7Ci0gICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgImF1ZGlv
IG1vZGUgaXM6ICIgKyBBVURJT19NT0RFU1thdWRpb01hbmFnZXIuZ2V0TW9kZSgpXSk7Ci0gICAg
aW5pdGlhbGl6ZWQgPSB0cnVlOwotICAgIHZvbHVtZUxvZ2dlci5zdGFydCgpOwotICAgIHJldHVy
biB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgImRpc3Bvc2UiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAg
IGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdm9sdW1lTG9n
Z2VyLnN0b3AoKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NvbW11bmljYXRpb25Nb2Rl
RW5hYmxlZCgpIHsKLSAgICByZXR1cm4gKGF1ZGlvTWFuYWdlci5nZXRNb2RlKCkgPT0gQXVkaW9N
YW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNBVElPTik7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4g
aXNEZXZpY2VCbGFja2xpc3RlZEZvck9wZW5TTEVTVXNhZ2UoKSB7Ci0gICAgYm9vbGVhbiBibGFj
a2xpc3RlZCA9IGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJc092ZXJyaWRkZW4KLSAg
ICAgICAgPyBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlCi0gICAgICAgIDogV2ViUnRj
QXVkaW9VdGlscy5kZXZpY2VJc0JsYWNrbGlzdGVkRm9yT3BlblNMRVNVc2FnZSgpOwotICAgIGlm
IChibGFja2xpc3RlZCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgQnVpbGQuTU9ERUwgKyAiIGlz
IGJsYWNrbGlzdGVkIGZvciBPcGVuU0wgRVMgdXNhZ2UhIik7Ci0gICAgfQotICAgIHJldHVybiBi
bGFja2xpc3RlZDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdG9yZUF1ZGlvUGFyYW1ldGVycygp
IHsKLSAgICAvLyBPbmx5IG1vbm8gaXMgc3VwcG9ydGVkIGN1cnJlbnRseSAoaW4gYm90aCBkaXJl
Y3Rpb25zKS4KLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCBmb3Igc3RlcmVvIHBs
YXlvdXQuCi0gICAgY2hhbm5lbHMgPSBDSEFOTkVMUzsKLSAgICBzYW1wbGVSYXRlID0gZ2V0TmF0
aXZlT3V0cHV0U2FtcGxlUmF0ZSgpOwotICAgIGhhcmR3YXJlQUVDID0gaXNBY291c3RpY0VjaG9D
YW5jZWxlclN1cHBvcnRlZCgpOwotICAgIC8vIFRPRE8oaGVucmlrYSk6IHVzZSBvZiBoYXJkd2Fy
ZSBBR0MgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gQ3VycmVudGx5Ci0gICAgLy8gaGFyZGNvZGVk
IHRvIGZhbHNlLiBUbyBiZSByZW1vdmVkLgotICAgIGhhcmR3YXJlQUdDID0gZmFsc2U7Ci0gICAg
aGFyZHdhcmVOUyA9IGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCk7Ci0gICAgbG93TGF0ZW5j
eU91dHB1dCA9IGlzTG93TGF0ZW5jeU91dHB1dFN1cHBvcnRlZCgpOwotICAgIGxvd0xhdGVuY3lJ
bnB1dCA9IGlzTG93TGF0ZW5jeUlucHV0U3VwcG9ydGVkKCk7Ci0gICAgcHJvQXVkaW8gPSBpc1By
b0F1ZGlvU3VwcG9ydGVkKCk7Ci0gICAgb3V0cHV0QnVmZmVyU2l6ZSA9IGxvd0xhdGVuY3lPdXRw
dXQgPyBnZXRMb3dMYXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldE1pbk91dHB1dEZyYW1lU2l6ZShzYW1wbGVS
YXRlLCBjaGFubmVscyk7Ci0gICAgaW5wdXRCdWZmZXJTaXplID0gbG93TGF0ZW5jeUlucHV0ID8g
Z2V0TG93TGF0ZW5jeUlucHV0RnJhbWVzUGVyQnVmZmVyKCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOiBnZXRNaW5JbnB1dEZyYW1lU2l6ZShzYW1wbGVSYXRlLCBjaGFu
bmVscyk7Ci0gIH0KLQotICAvLyBHZXRzIHRoZSBjdXJyZW50IGVhcnBpZWNlIHN0YXRlLgotICBw
cml2YXRlIGJvb2xlYW4gaGFzRWFycGllY2UoKSB7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ2V0UGFj
a2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfVEVM
RVBIT05ZKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBsb3ctbGF0ZW5jeSBhdWRpbyBv
dXRwdXQgaXMgc3VwcG9ydGVkLgotICBwcml2YXRlIGJvb2xlYW4gaXNMb3dMYXRlbmN5T3V0cHV0
U3VwcG9ydGVkKCkgewotICAgIHJldHVybiBpc09wZW5TTEVTU3VwcG9ydGVkKCkKLSAgICAgICAg
JiYgY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFja2FnZU1h
bmFnZXIuRkVBVFVSRV9BVURJT19MT1dfTEFURU5DWSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRy
dWUgaWYgbG93LWxhdGVuY3kgYXVkaW8gaW5wdXQgaXMgc3VwcG9ydGVkLgotICAvLyBUT0RPKGhl
bnJpa2EpOiByZW1vdmUgdGhlIGhhcmRjb2RlZCBmYWxzZSByZXR1cm4gdmFsdWUgd2hlbiBPcGVu
U0wgRVMKLSAgLy8gaW5wdXQgcGVyZm9ybWFuY2UgaGFzIGJlZW4gZXZhbHVhdGVkIGFuZCB0ZXN0
ZWQgbW9yZS4KLSAgcHVibGljIGJvb2xlYW4gaXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0ZWQoKSB7
Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogaW52ZXN0aWdhdGUgaWYgc29tZSBzb3J0IG9mIGRldmlj
ZSBsaXN0IGlzIG5lZWRlZCBoZXJlCi0gICAgLy8gYXMgd2VsbC4gVGhlIE5ESyBkb2Mgc3RhdGVz
IHRoYXQ6ICJBcyBvZiBBUEkgbGV2ZWwgMjEsIGxvd2VyIGxhdGVuY3kKLSAgICAvLyBhdWRpbyBp
bnB1dCBpcyBzdXBwb3J0ZWQgb24gc2VsZWN0IGRldmljZXMuIFRvIHRha2UgYWR2YW50YWdlIG9m
IHRoaXMKLSAgICAvLyBmZWF0dXJlLCBmaXJzdCBjb25maXJtIHRoYXQgbG93ZXIgbGF0ZW5jeSBv
dXRwdXQgaXMgYXZhaWxhYmxlIi4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5n
T25Mb2xsaXBvcE9ySGlnaGVyKCkgJiYgaXNMb3dMYXRlbmN5T3V0cHV0U3VwcG9ydGVkKCk7Ci0g
IH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBoYXMgcHJvZmVzc2lvbmFsIGF1
ZGlvIGxldmVsIG9mIGZ1bmN0aW9uYWxpdHkKLSAgLy8gYW5kIHRoZXJlZm9yZSBzdXBwb3J0cyB0
aGUgbG93ZXN0IHBvc3NpYmxlIHJvdW5kLXRyaXAgbGF0ZW5jeS4KLSAgcHJpdmF0ZSBib29sZWFu
IGlzUHJvQXVkaW9TdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMucnVu
bmluZ09uTWFyc2htYWxsb3dPckhpZ2hlcigpCi0gICAgICAgICYmIGNvbnRleHQuZ2V0UGFja2Fn
ZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfQVVESU9f
UFJPKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG5hdGl2ZSBvdXRwdXQgc2FtcGxlIHJhdGUg
Zm9yIHRoaXMgZGV2aWNlJ3Mgb3V0cHV0IHN0cmVhbS4KLSAgcHJpdmF0ZSBpbnQgZ2V0TmF0aXZl
T3V0cHV0U2FtcGxlUmF0ZSgpIHsKLSAgICAvLyBPdmVycmlkZSB0aGlzIGlmIHdlJ3JlIHJ1bm5p
bmcgb24gYW4gb2xkIGVtdWxhdG9yIGltYWdlIHdoaWNoIG9ubHkKLSAgICAvLyBzdXBwb3J0cyA4
IGtIeiBhbmQgZG9lc24ndCBzdXBwb3J0IFBST1BFUlRZX09VVFBVVF9TQU1QTEVfUkFURS4KLSAg
ICBpZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25FbXVsYXRvcigpKSB7Ci0gICAgICBMb2dn
aW5nLmQoVEFHLCAiUnVubmluZyBlbXVsYXRvciwgb3ZlcnJpZGluZyBzYW1wbGUgcmF0ZSB0byA4
IGtIei4iKTsKLSAgICAgIHJldHVybiA4MDAwOwotICAgIH0KLSAgICAvLyBEZWZhdWx0IGNhbiBi
ZSBvdmVycmlkZW4gYnkgV2ViUnRjQXVkaW9VdGlscy5zZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCku
Ci0gICAgLy8gSWYgc28sIHVzZSB0aGF0IHZhbHVlIGFuZCByZXR1cm4gaGVyZS4KLSAgICBpZiAo
V2ViUnRjQXVkaW9VdGlscy5pc0RlZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbigpKSB7Ci0gICAg
ICBMb2dnaW5nLmQoVEFHLCAiRGVmYXVsdCBzYW1wbGUgcmF0ZSBpcyBvdmVycmlkZW4gdG8gIgot
ICAgICAgICAgICAgICArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigp
ICsgIiBIeiIpOwotICAgICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBs
ZVJhdGVIeigpOwotICAgIH0KLSAgICAvLyBObyBvdmVycmlkZXMgYXZhaWxhYmxlLiBEZWxpdmVy
IGJlc3QgcG9zc2libGUgZXN0aW1hdGUgYmFzZWQgb24gZGVmYXVsdAotICAgIC8vIEFuZHJvaWQg
QXVkaW9NYW5hZ2VyIEFQSXMuCi0gICAgZmluYWwgaW50IHNhbXBsZVJhdGVIejsKLSAgICBpZiAo
V2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5NUjFPckhpZ2hlcigpKSB7Ci0gICAg
ICBzYW1wbGVSYXRlSHogPSBnZXRTYW1wbGVSYXRlT25KZWxseUJlYW5NUjEwT3JIaWdoZXIoKTsK
LSAgICB9IGVsc2UgewotICAgICAgc2FtcGxlUmF0ZUh6ID0gV2ViUnRjQXVkaW9VdGlscy5nZXRE
ZWZhdWx0U2FtcGxlUmF0ZUh6KCk7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJTYW1wbGUg
cmF0ZSBpcyBzZXQgdG8gIiArIHNhbXBsZVJhdGVIeiArICIgSHoiKTsKLSAgICByZXR1cm4gc2Ft
cGxlUmF0ZUh6OwotICB9Ci0KLSAgQFRhcmdldEFwaSgxNykKLSAgcHJpdmF0ZSBpbnQgZ2V0U2Ft
cGxlUmF0ZU9uSmVsbHlCZWFuTVIxME9ySGlnaGVyKCkgewotICAgIFN0cmluZyBzYW1wbGVSYXRl
U3RyaW5nID0gYXVkaW9NYW5hZ2VyLmdldFByb3BlcnR5KEF1ZGlvTWFuYWdlci5QUk9QRVJUWV9P
VVRQVVRfU0FNUExFX1JBVEUpOwotICAgIHJldHVybiAoc2FtcGxlUmF0ZVN0cmluZyA9PSBudWxs
KSA/IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogSW50ZWdlci5wYXJzZUludChzYW1wbGVSYXRl
U3RyaW5nKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG5hdGl2ZSBvdXRwdXQgYnVmZmVyIHNp
emUgZm9yIGxvdy1sYXRlbmN5IG91dHB1dCBzdHJlYW1zLgotICBAVGFyZ2V0QXBpKDE3KQotICBw
cml2YXRlIGludCBnZXRMb3dMYXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCkgewotICAgIGFz
c2VydFRydWUoaXNMb3dMYXRlbmN5T3V0cHV0U3VwcG9ydGVkKCkpOwotICAgIGlmICghV2ViUnRj
QXVkaW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5NUjFPckhpZ2hlcigpKSB7Ci0gICAgICByZXR1
cm4gREVGQVVMVF9GUkFNRV9QRVJfQlVGRkVSOwotICAgIH0KLSAgICBTdHJpbmcgZnJhbWVzUGVy
QnVmZmVyID0KLSAgICAgICAgYXVkaW9NYW5hZ2VyLmdldFByb3BlcnR5KEF1ZGlvTWFuYWdlci5Q
Uk9QRVJUWV9PVVRQVVRfRlJBTUVTX1BFUl9CVUZGRVIpOwotICAgIHJldHVybiBmcmFtZXNQZXJC
dWZmZXIgPT0gbnVsbCA/IERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUiA6IEludGVnZXIucGFyc2VJ
bnQoZnJhbWVzUGVyQnVmZmVyKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2
aWNlIHN1cHBvcnRzIGFuIGF1ZGlvIGVmZmVjdCAoQUVDIG9yIE5TKS4KLSAgLy8gRm91ciBjb25k
aXRpb25zIG11c3QgYmUgZnVsZmlsbGVkIGlmIGZ1bmN0aW9ucyBhcmUgdG8gcmV0dXJuIHRydWU6
Ci0gIC8vIDEpIHRoZSBwbGF0Zm9ybSBtdXN0IHN1cHBvcnQgdGhlIGJ1aWx0LWluIChIVykgZWZm
ZWN0LAotICAvLyAyKSBleHBsaWNpdCB1c2UgKG92ZXJyaWRlKSBvZiBhIFdlYlJUQyBiYXNlZCB2
ZXJzaW9uIG11c3Qgbm90IGJlIHNldCwKLSAgLy8gMykgdGhlIGRldmljZSBtdXN0IG5vdCBiZSBi
bGFja2xpc3RlZCBmb3IgdXNlIG9mIHRoZSBlZmZlY3QsIGFuZAotICAvLyA0KSB0aGUgVVVJRCBv
ZiB0aGUgZWZmZWN0IG11c3QgYmUgYXBwcm92ZWQgKHNvbWUgVVVJRHMgY2FuIGJlIGV4Y2x1ZGVk
KS4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9y
dGVkKCkgewotICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuY2FuVXNlQWNvdXN0aWNFY2hv
Q2FuY2VsZXIoKTsKLSAgfQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVz
c29yU3VwcG9ydGVkKCkgewotICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuY2FuVXNlTm9p
c2VTdXBwcmVzc29yKCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIG91dHB1dCBi
dWZmZXIgc2l6ZSBmb3IgSmF2YSBiYXNlZCBhdWRpbyAoQXVkaW9UcmFjaykuCi0gIC8vIFRoaXMg
c2l6ZSBjYW4gYWxzbyBiZSB1c2VkIGZvciBPcGVuU0wgRVMgaW1wbGVtZW50YXRpb25zIG9uIGRl
dmljZXMgdGhhdAotICAvLyBsYWNrcyBzdXBwb3J0IG9mIGxvdy1sYXRlbmN5IG91dHB1dC4KLSAg
cHJpdmF0ZSBzdGF0aWMgaW50IGdldE1pbk91dHB1dEZyYW1lU2l6ZShpbnQgc2FtcGxlUmF0ZUlu
SHosIGludCBudW1DaGFubmVscykgewotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gbnVt
Q2hhbm5lbHMgKiAoQklUU19QRVJfU0FNUExFIC8gOCk7Ci0gICAgZmluYWwgaW50IGNoYW5uZWxD
b25maWc7Ci0gICAgaWYgKG51bUNoYW5uZWxzID09IDEpIHsKLSAgICAgIGNoYW5uZWxDb25maWcg
PSBBdWRpb0Zvcm1hdC5DSEFOTkVMX09VVF9NT05POwotICAgIH0gZWxzZSBpZiAobnVtQ2hhbm5l
bHMgPT0gMikgewotICAgICAgY2hhbm5lbENvbmZpZyA9IEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VU
X1NURVJFTzsKLSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1
cm4gQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplKAotICAgICAgICAgICAgICAgc2FtcGxlUmF0
ZUluSHosIGNoYW5uZWxDb25maWcsIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVCkKLSAg
ICAgICAgLyBieXRlc1BlckZyYW1lOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmF0aXZlIGlu
cHV0IGJ1ZmZlciBzaXplIGZvciBpbnB1dCBzdHJlYW1zLgotICBwcml2YXRlIGludCBnZXRMb3dM
YXRlbmN5SW5wdXRGcmFtZXNQZXJCdWZmZXIoKSB7Ci0gICAgYXNzZXJ0VHJ1ZShpc0xvd0xhdGVu
Y3lJbnB1dFN1cHBvcnRlZCgpKTsKLSAgICByZXR1cm4gZ2V0TG93TGF0ZW5jeU91dHB1dEZyYW1l
c1BlckJ1ZmZlcigpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBpbnB1dCBidWZm
ZXIgc2l6ZSBmb3IgSmF2YSBiYXNlZCBhdWRpbyAoQXVkaW9SZWNvcmQpLgotICAvLyBUaGlzIHNp
emUgY2FuIGNhbHNvIGJlIHVzZWQgZm9yIE9wZW5TTCBFUyBpbXBsZW1lbnRhdGlvbnMgb24gZGV2
aWNlcyB0aGF0Ci0gIC8vIGxhY2tzIHN1cHBvcnQgb2YgbG93LWxhdGVuY3kgaW5wdXQuCi0gIHBy
aXZhdGUgc3RhdGljIGludCBnZXRNaW5JbnB1dEZyYW1lU2l6ZShpbnQgc2FtcGxlUmF0ZUluSHos
IGludCBudW1DaGFubmVscykgewotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gbnVtQ2hh
bm5lbHMgKiAoQklUU19QRVJfU0FNUExFIC8gOCk7Ci0gICAgYXNzZXJ0VHJ1ZShudW1DaGFubmVs
cyA9PSBDSEFOTkVMUyk7Ci0gICAgcmV0dXJuIEF1ZGlvUmVjb3JkLmdldE1pbkJ1ZmZlclNpemUo
Ci0gICAgICAgICAgICAgICBzYW1wbGVSYXRlSW5IeiwgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9N
T05PLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpCi0gICAgICAgIC8gYnl0ZXNQZXJG
cmFtZTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBPcGVuU0wgRVMgYXVkaW8gaXMgc3Vw
cG9ydGVkLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzT3BlblNMRVNTdXBwb3J0ZWQoKSB7
Ci0gICAgLy8gQ2hlY2sgZm9yIEFQSSBsZXZlbCA5IG9yIGhpZ2hlciwgdG8gY29uZmlybSB1c2Ug
b2YgT3BlblNMIEVTLgotICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkdpbmdl
ckJyZWFkT3JIaWdoZXIoKTsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2Qgd2hpY2ggdGhyb3dz
IGFuIGV4Y2VwdGlvbiAgd2hlbiBhbiBhc3NlcnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBz
dGF0aWMgdm9pZCBhc3NlcnRUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25k
aXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0
aW9uIHRvIGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5h
dGl2ZUNhY2hlQXVkaW9QYXJhbWV0ZXJzKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMsIGJv
b2xlYW4gaGFyZHdhcmVBRUMsCi0gICAgICBib29sZWFuIGhhcmR3YXJlQUdDLCBib29sZWFuIGhh
cmR3YXJlTlMsIGJvb2xlYW4gbG93TGF0ZW5jeU91dHB1dCwgYm9vbGVhbiBsb3dMYXRlbmN5SW5w
dXQsCi0gICAgICBib29sZWFuIHByb0F1ZGlvLCBpbnQgb3V0cHV0QnVmZmVyU2l6ZSwgaW50IGlu
cHV0QnVmZmVyU2l6ZSwgbG9uZyBuYXRpdmVBdWRpb01hbmFnZXIpOwotfQpJbmRleDogU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2Uv
YW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvUmVjb3Jk
LmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3Zv
aWNlZW5naW5lL1dlYlJ0Y0F1ZGlvUmVjb3JkLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1Jl
Y29yZC5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcu
d2VicnRjLkxvZ2dpbmc7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5UaHJlYWRVdGlsczsKLQotaW1wb3J0
IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Gb3Jt
YXQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1JlY29yZDsKLWltcG9ydCBhbmRyb2lkLm1l
ZGlhLk1lZGlhUmVjb3JkZXIuQXVkaW9Tb3VyY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNz
OwotCi1pbXBvcnQgamF2YS5sYW5nLlN5c3RlbTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVy
OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi1wdWJsaWMgY2xhc3Mg
V2ViUnRjQXVkaW9SZWNvcmQgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVH
ID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNB
dWRpb1JlY29yZCI7Ci0KLSAgLy8gRGVmYXVsdCBhdWRpbyBkYXRhIGZvcm1hdCBpcyBQQ00gMTYg
Yml0IHBlciBzYW1wbGUuCi0gIC8vIEd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBk
ZXZpY2VzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUU19QRVJfU0FNUExFID0gMTY7
Ci0KLSAgLy8gUmVxdWVzdGVkIHNpemUgb2YgZWFjaCByZWNvcmRlZCBidWZmZXIgcHJvdmlkZWQg
dG8gdGhlIGNsaWVudC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENBTExCQUNLX0JVRkZF
Ul9TSVpFX01TID0gMTA7Ci0KLSAgLy8gQXZlcmFnZSBudW1iZXIgb2YgY2FsbGJhY2tzIHBlciBz
ZWNvbmQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVJTX1BFUl9TRUNPTkQgPSAx
MDAwIC8gQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVM7Ci0KLSAgLy8gV2UgYXNrIGZvciBhIG5hdGl2
ZSBidWZmZXIgc2l6ZSBvZiBCVUZGRVJfU0laRV9GQUNUT1IgKiAobWluaW11bSByZXF1aXJlZAot
ICAvLyBidWZmZXIgc2l6ZSkuIFRoZSBleHRyYSBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gZ3VhcmQg
YWdhaW5zdCBnbGl0Y2hlcyB1bmRlcgotICAvLyBoaWdoIGxvYWQuCi0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBCVUZGRVJfU0laRV9GQUNUT1IgPSAyOwotCi0gIC8vIFRoZSBBdWRpb1JlY29y
ZEphdmFUaHJlYWQgaXMgYWxsb3dlZCB0byB3YWl0IGZvciBzdWNjZXNzZnVsIGNhbGwgdG8gam9p
bigpCi0gIC8vIGJ1dCB0aGUgd2FpdCB0aW1lcyBvdXQgYWZ0aGVyIHRoaXMgYW1vdW50IG9mIHRp
bWUuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgQVVESU9fUkVDT1JEX1RIUkVBRF9KT0lO
X1RJTUVPVVRfTVMgPSAyMDAwOwotCi0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVBdWRpb1Jl
Y29yZDsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0KLSAgcHJpdmF0ZSBXZWJS
dGNBdWRpb0VmZmVjdHMgZWZmZWN0cyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBCeXRlQnVmZmVyIGJ5
dGVCdWZmZXI7Ci0KLSAgcHJpdmF0ZSBBdWRpb1JlY29yZCBhdWRpb1JlY29yZCA9IG51bGw7Ci0g
IHByaXZhdGUgQXVkaW9SZWNvcmRUaHJlYWQgYXVkaW9UaHJlYWQgPSBudWxsOwotCi0gIHByaXZh
dGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gbWljcm9waG9uZU11dGUgPSBmYWxzZTsKLSAgcHJp
dmF0ZSBieXRlW10gZW1wdHlCeXRlczsKLQotICAvKioKLSAgICogQXVkaW8gdGhyZWFkIHdoaWNo
IGtlZXBzIGNhbGxpbmcgQnl0ZUJ1ZmZlci5yZWFkKCkgd2FpdGluZyBmb3IgYXVkaW8KLSAgICog
dG8gYmUgcmVjb3JkZWQuIEZlZWRzIHJlY29yZGVkIGRhdGEgdG8gdGhlIG5hdGl2ZSBjb3VudGVy
cGFydCBhcyBhCi0gICAqIHBlcmlvZGljIHNlcXVlbmNlIG9mIGNhbGxiYWNrcyB1c2luZyBEYXRh
SXNSZWNvcmRlZCgpLgotICAgKiBUaGlzIHRocmVhZCB1c2VzIGEgUHJvY2Vzcy5USFJFQURfUFJJ
T1JJVFlfVVJHRU5UX0FVRElPIHByaW9yaXR5LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBBdWRp
b1JlY29yZFRocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29s
ZWFuIGtlZXBBbGl2ZSA9IHRydWU7Ci0KLSAgICBwdWJsaWMgQXVkaW9SZWNvcmRUaHJlYWQoU3Ry
aW5nIG5hbWUpIHsKLSAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQot
ICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIFByb2Nlc3Muc2V0VGhyZWFkUHJpb3JpdHko
UHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJHRU5UX0FVRElPKTsKLSAgICAgIExvZ2dpbmcuZChU
QUcsICJBdWRpb1JlY29yZFRocmVhZCIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8o
KSk7Ci0gICAgICBhc3NlcnRUcnVlKGF1ZGlvUmVjb3JkLmdldFJlY29yZGluZ1N0YXRlKCkgPT0g
QXVkaW9SZWNvcmQuUkVDT1JEU1RBVEVfUkVDT1JESU5HKTsKLQotICAgICAgbG9uZyBsYXN0VGlt
ZSA9IFN5c3RlbS5uYW5vVGltZSgpOwotICAgICAgd2hpbGUgKGtlZXBBbGl2ZSkgewotICAgICAg
ICBpbnQgYnl0ZXNSZWFkID0gYXVkaW9SZWNvcmQucmVhZChieXRlQnVmZmVyLCBieXRlQnVmZmVy
LmNhcGFjaXR5KCkpOwotICAgICAgICBpZiAoYnl0ZXNSZWFkID09IGJ5dGVCdWZmZXIuY2FwYWNp
dHkoKSkgewotICAgICAgICAgIGlmIChtaWNyb3Bob25lTXV0ZSkgewotICAgICAgICAgICAgYnl0
ZUJ1ZmZlci5jbGVhcigpOwotICAgICAgICAgICAgYnl0ZUJ1ZmZlci5wdXQoZW1wdHlCeXRlcyk7
Ci0gICAgICAgICAgfQotICAgICAgICAgIG5hdGl2ZURhdGFJc1JlY29yZGVkKGJ5dGVzUmVhZCwg
bmF0aXZlQXVkaW9SZWNvcmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIExvZ2dpbmcu
ZShUQUcsICJBdWRpb1JlY29yZC5yZWFkIGZhaWxlZDogIiArIGJ5dGVzUmVhZCk7Ci0gICAgICAg
ICAgaWYgKGJ5dGVzUmVhZCA9PSBBdWRpb1JlY29yZC5FUlJPUl9JTlZBTElEX09QRVJBVElPTikg
ewotICAgICAgICAgICAga2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGlmIChERUJVRykgewotICAgICAgICAgIGxvbmcgbm93VGltZSA9IFN5c3RlbS5u
YW5vVGltZSgpOwotICAgICAgICAgIGxvbmcgZHVyYXRpb25Jbk1zID0gVGltZVVuaXQuTkFOT1NF
Q09ORFMudG9NaWxsaXMoKG5vd1RpbWUgLSBsYXN0VGltZSkpOwotICAgICAgICAgIGxhc3RUaW1l
ID0gbm93VGltZTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiYnl0ZXNSZWFkWyIgKyBkdXJh
dGlvbkluTXMgKyAiXSAiICsgYnl0ZXNSZWFkKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAg
ICB0cnkgewotICAgICAgICBpZiAoYXVkaW9SZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgIGF1
ZGlvUmVjb3JkLnN0b3AoKTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRl
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLnN0b3Ag
ZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFN0
b3BzIHRoZSBpbm5lciB0aHJlYWQgbG9vcCBhbmQgYWxzbyBjYWxscyBBdWRpb1JlY29yZC5zdG9w
KCkuCi0gICAgLy8gRG9lcyBub3QgYmxvY2sgdGhlIGNhbGxpbmcgdGhyZWFkLgotICAgIHB1Ymxp
YyB2b2lkIHN0b3BUaHJlYWQoKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAic3RvcFRocmVhZCIp
OwotICAgICAga2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgV2ViUnRjQXVkaW9S
ZWNvcmQoQ29udGV4dCBjb250ZXh0LCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwot
ICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5uYXRpdmVBdWRpb1JlY29yZCA9
IG5hdGl2ZUF1ZGlvUmVjb3JkOwotICAgIGlmIChERUJVRykgewotICAgICAgV2ViUnRjQXVkaW9V
dGlscy5sb2dEZXZpY2VJbmZvKFRBRyk7Ci0gICAgfQotICAgIGVmZmVjdHMgPSBXZWJSdGNBdWRp
b0VmZmVjdHMuY3JlYXRlKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlQnVpbHRJ
bkFFQyhib29sZWFuIGVuYWJsZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJlbmFibGVCdWlsdElu
QUVDKCIgKyBlbmFibGUgKyAnKScpOwotICAgIGlmIChlZmZlY3RzID09IG51bGwpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJCdWlsdC1pbiBBRUMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBs
YXRmb3JtIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBlZmZlY3Rz
LnNldEFFQyhlbmFibGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZUJ1aWx0SW5O
Uyhib29sZWFuIGVuYWJsZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJlbmFibGVCdWlsdEluTlMo
IiArIGVuYWJsZSArICcpJyk7Ci0gICAgaWYgKGVmZmVjdHMgPT0gbnVsbCkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgIkJ1aWx0LWluIE5TIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9y
bSIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZWZmZWN0cy5zZXRO
UyhlbmFibGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgaW5pdFJlY29yZGluZyhpbnQgc2FtcGxl
UmF0ZSwgaW50IGNoYW5uZWxzKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImluaXRSZWNvcmRpbmco
c2FtcGxlUmF0ZT0iICsgc2FtcGxlUmF0ZSArICIsIGNoYW5uZWxzPSIgKyBjaGFubmVscyArICIp
Iik7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLmhhc1Blcm1pc3Npb24oY29udGV4dCwgYW5k
cm9pZC5NYW5pZmVzdC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTykpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJSRUNPUkRfQVVESU8gcGVybWlzc2lvbiBpcyBtaXNzaW5nIik7Ci0gICAgICByZXR1
cm4gLTE7Ci0gICAgfQotICAgIGlmIChhdWRpb1JlY29yZCAhPSBudWxsKSB7Ci0gICAgICBMb2dn
aW5nLmUoVEFHLCAiSW5pdFJlY29yZGluZygpIGNhbGxlZCB0d2ljZSB3aXRob3V0IFN0b3BSZWNv
cmRpbmcoKSIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBmaW5hbCBpbnQgYnl0ZXNQ
ZXJGcmFtZSA9IGNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGZpbmFsIGlu
dCBmcmFtZXNQZXJCdWZmZXIgPSBzYW1wbGVSYXRlIC8gQlVGRkVSU19QRVJfU0VDT05EOwotICAg
IGJ5dGVCdWZmZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGJ5dGVzUGVyRnJhbWUgKiBm
cmFtZXNQZXJCdWZmZXIpOwotICAgIExvZ2dpbmcuZChUQUcsICJieXRlQnVmZmVyLmNhcGFjaXR5
OiAiICsgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBlbXB0eUJ5dGVzID0gbmV3IGJ5dGVb
Ynl0ZUJ1ZmZlci5jYXBhY2l0eSgpXTsKLSAgICAvLyBSYXRoZXIgdGhhbiBwYXNzaW5nIHRoZSBC
eXRlQnVmZmVyIHdpdGggZXZlcnkgY2FsbGJhY2sgKHJlcXVpcmluZwotICAgIC8vIHRoZSBwb3Rl
bnRpYWxseSBleHBlbnNpdmUgR2V0RGlyZWN0QnVmZmVyQWRkcmVzcykgd2Ugc2ltcGx5IGhhdmUg
dGhlCi0gICAgLy8gdGhlIG5hdGl2ZSBjbGFzcyBjYWNoZSB0aGUgYWRkcmVzcyB0byB0aGUgbWVt
b3J5IG9uY2UuCi0gICAgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKGJ5dGVCdWZmZXIs
IG5hdGl2ZUF1ZGlvUmVjb3JkKTsKLQotICAgIC8vIEdldCB0aGUgbWluaW11bSBidWZmZXIgc2l6
ZSByZXF1aXJlZCBmb3IgdGhlIHN1Y2Nlc3NmdWwgY3JlYXRpb24gb2YKLSAgICAvLyBhbiBBdWRp
b1JlY29yZCBvYmplY3QsIGluIGJ5dGUgdW5pdHMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgc2l6
ZSBkb2Vzbid0IGd1YXJhbnRlZSBhIHNtb290aCByZWNvcmRpbmcgdW5kZXIgbG9hZC4KLSAgICBp
bnQgbWluQnVmZmVyU2l6ZSA9IEF1ZGlvUmVjb3JkLmdldE1pbkJ1ZmZlclNpemUoCi0gICAgICAg
IHNhbXBsZVJhdGUsIEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5fTU9OTywgQXVkaW9Gb3JtYXQuRU5D
T0RJTkdfUENNXzE2QklUKTsKLSAgICBpZiAobWluQnVmZmVyU2l6ZSA9PSBBdWRpb1JlY29yZC5F
UlJPUiB8fCBtaW5CdWZmZXJTaXplID09IEF1ZGlvUmVjb3JkLkVSUk9SX0JBRF9WQUxVRSkgewot
ICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLmdldE1pbkJ1ZmZlclNpemUgZmFpbGVk
OiAiICsgbWluQnVmZmVyU2l6ZSk7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIExvZ2dp
bmcuZChUQUcsICJBdWRpb1JlY29yZC5nZXRNaW5CdWZmZXJTaXplOiAiICsgbWluQnVmZmVyU2l6
ZSk7Ci0KLSAgICAvLyBVc2UgYSBsYXJnZXIgYnVmZmVyIHNpemUgdGhhbiB0aGUgbWluaW11bSBy
ZXF1aXJlZCB3aGVuIGNyZWF0aW5nIHRoZQotICAgIC8vIEF1ZGlvUmVjb3JkIGluc3RhbmNlIHRv
IGVuc3VyZSBzbW9vdGggcmVjb3JkaW5nIHVuZGVyIGxvYWQuIEl0IGhhcyBiZWVuCi0gICAgLy8g
dmVyaWZpZWQgdGhhdCBpdCBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgYWN0dWFsIHJlY29yZGluZyBs
YXRlbmN5LgotICAgIGludCBidWZmZXJTaXplSW5CeXRlcyA9IE1hdGgubWF4KEJVRkZFUl9TSVpF
X0ZBQ1RPUiAqIG1pbkJ1ZmZlclNpemUsIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgTG9n
Z2luZy5kKFRBRywgImJ1ZmZlclNpemVJbkJ5dGVzOiAiICsgYnVmZmVyU2l6ZUluQnl0ZXMpOwot
ICAgIHRyeSB7Ci0gICAgICBhdWRpb1JlY29yZCA9IG5ldyBBdWRpb1JlY29yZChBdWRpb1NvdXJj
ZS5WT0lDRV9DT01NVU5JQ0FUSU9OLCBzYW1wbGVSYXRlLAotICAgICAgICAgIEF1ZGlvRm9ybWF0
LkNIQU5ORUxfSU5fTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklULCBidWZmZXJT
aXplSW5CeXRlcyk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiAtMTsK
LSAgICB9Ci0gICAgaWYgKGF1ZGlvUmVjb3JkID09IG51bGwgfHwgYXVkaW9SZWNvcmQuZ2V0U3Rh
dGUoKSAhPSBBdWRpb1JlY29yZC5TVEFURV9JTklUSUFMSVpFRCkgewotICAgICAgTG9nZ2luZy5l
KFRBRywgIkZhaWxlZCB0byBjcmVhdGUgYSBuZXcgQXVkaW9SZWNvcmQgaW5zdGFuY2UiKTsKLSAg
ICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKGVmZmVjdHMgIT0gbnVsbCkgewotICAgICAg
ZWZmZWN0cy5lbmFibGUoYXVkaW9SZWNvcmQuZ2V0QXVkaW9TZXNzaW9uSWQoKSk7Ci0gICAgfQot
ICAgIC8vIFZlcmlmeSB0aGF0IGFsbCBhdWRpbyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBhbmQgY29y
cmVjdC4KLSAgICBpZiAoIWFyZVBhcmFtZXRlcnNWYWxpZChzYW1wbGVSYXRlLCBjaGFubmVscykp
IHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdCBsZWFzdCBvbmUgYXVkaW8gcmVjb3JkIHBhcmFt
ZXRlciBpcyBpbnZhbGlkLiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBsb2dNYWlu
UGFyYW1ldGVycygpOwotICAgIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKTsKLSAgICByZXR1
cm4gZnJhbWVzUGVyQnVmZmVyOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHN0YXJ0UmVjb3Jk
aW5nKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFJlY29yZGluZyIpOwotICAgIGFzc2Vy
dFRydWUoYXVkaW9SZWNvcmQgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCA9
PSBudWxsKTsKLSAgICB0cnkgewotICAgICAgYXVkaW9SZWNvcmQuc3RhcnRSZWNvcmRpbmcoKTsK
LSAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5l
KFRBRywgIkF1ZGlvUmVjb3JkLnN0YXJ0UmVjb3JkaW5nIGZhaWxlZDogIiArIGUuZ2V0TWVzc2Fn
ZSgpKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvUmVjb3JkLmdl
dFJlY29yZGluZ1N0YXRlKCkgIT0gQXVkaW9SZWNvcmQuUkVDT1JEU1RBVEVfUkVDT1JESU5HKSB7
Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQuc3RhcnRSZWNvcmRpbmcgZmFpbGVk
Iik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGF1ZGlvVGhyZWFkID0gbmV3IEF1
ZGlvUmVjb3JkVGhyZWFkKCJBdWRpb1JlY29yZEphdmFUaHJlYWQiKTsKLSAgICBhdWRpb1RocmVh
ZC5zdGFydCgpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHN0
b3BSZWNvcmRpbmcoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BSZWNvcmRpbmciKTsKLSAg
ICBhc3NlcnRUcnVlKGF1ZGlvVGhyZWFkICE9IG51bGwpOwotICAgIGF1ZGlvVGhyZWFkLnN0b3BU
aHJlYWQoKTsKLSAgICBpZiAoIVRocmVhZFV0aWxzLmpvaW5VbmludGVycnVwdGlibHkoYXVkaW9U
aHJlYWQsIEFVRElPX1JFQ09SRF9USFJFQURfSk9JTl9USU1FT1VUX01TKSkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgIkpvaW4gb2YgQXVkaW9SZWNvcmRKYXZhVGhyZWFkIHRpbWVkIG91dCIpOwot
ICAgIH0KLSAgICBhdWRpb1RocmVhZCA9IG51bGw7Ci0gICAgaWYgKGVmZmVjdHMgIT0gbnVsbCkg
ewotICAgICAgZWZmZWN0cy5yZWxlYXNlKCk7Ci0gICAgfQotICAgIGF1ZGlvUmVjb3JkLnJlbGVh
c2UoKTsKLSAgICBhdWRpb1JlY29yZCA9IG51bGw7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICAvLyBWZXJpZmllcyB0aGF0IHRoZSBhdWRpbyByZWNvcmQgaXMgdXNpbmcgY29ycmVjdCBwYXJh
bWV0ZXJzLCBpLmUuLCB0aGF0IHRoZQotICAvLyBjcmVhdGVkIGluc3RhbmNlIHVzZXMgdGhlIHBh
cmFtZXRlcnMgdGhhdCB3ZSBhc2tlZCBmb3IuCi0gIHByaXZhdGUgYm9vbGVhbiBhcmVQYXJhbWV0
ZXJzVmFsaWQoaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIHJldHVybiAoYXVk
aW9SZWNvcmQuZ2V0QXVkaW9Gb3JtYXQoKSA9PSBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZC
SVQKLSAgICAgICAgJiYgYXVkaW9SZWNvcmQuZ2V0Q2hhbm5lbENvbmZpZ3VyYXRpb24oKSA9PSBB
dWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8KLSAgICAgICAgJiYgYXVkaW9SZWNvcmQuZ2V0QXVk
aW9Tb3VyY2UoKSA9PSBBdWRpb1NvdXJjZS5WT0lDRV9DT01NVU5JQ0FUSU9OCi0gICAgICAgICYm
IGF1ZGlvUmVjb3JkLmdldFNhbXBsZVJhdGUoKSA9PSBzYW1wbGVSYXRlICYmIGF1ZGlvUmVjb3Jk
LmdldENoYW5uZWxDb3VudCgpID09IGNoYW5uZWxzKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBs
b2dNYWluUGFyYW1ldGVycygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQ6ICIK
LSAgICAgICAgICAgICsgInNlc3Npb24gSUQ6ICIgKyBhdWRpb1JlY29yZC5nZXRBdWRpb1Nlc3Np
b25JZCgpICsgIiwgIgotICAgICAgICAgICAgKyAiY2hhbm5lbHM6ICIgKyBhdWRpb1JlY29yZC5n
ZXRDaGFubmVsQ291bnQoKSArICIsICIKLSAgICAgICAgICAgICsgInNhbXBsZSByYXRlOiAiICsg
YXVkaW9SZWNvcmQuZ2V0U2FtcGxlUmF0ZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dN
YWluUGFyYW1ldGVyc0V4dGVuZGVkKCkgewotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5p
bmdPbk1hcnNobWFsbG93T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlv
UmVjb3JkOiAiCi0gICAgICAgICAgICAgIC8vIFRoZSBmcmFtZSBjb3VudCBvZiB0aGUgbmF0aXZl
IEF1ZGlvUmVjb3JkIGJ1ZmZlci4KLSAgICAgICAgICAgICAgKyAiYnVmZmVyIHNpemUgaW4gZnJh
bWVzOiAiICsgYXVkaW9SZWNvcmQuZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKCkpOwotICAgIH0KLSAg
fQotCi0gIC8vIEhlbHBlciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiAgd2hlbiBh
biBhc3NlcnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUcnVl
KGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93
IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUiKTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVy
QWRkcmVzcyhCeXRlQnVmZmVyIGJ5dGVCdWZmZXIsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwot
Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlRGF0YUlzUmVjb3JkZWQoaW50IGJ5dGVzLCBs
b25nIG5hdGl2ZUF1ZGlvUmVjb3JkKTsKLQotICAvLyBTZXRzIGFsbCByZWNvcmRlZCBzYW1wbGVz
IHRvIHplcm8gaWYgfG11dGV8IGlzIHRydWUsIGkuZS4sIGVuc3VyZXMgdGhhdAotICAvLyB0aGUg
bWljcm9waG9uZSBpcyBtdXRlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldE1pY3JvcGhvbmVN
dXRlKGJvb2xlYW4gbXV0ZSkgewotICAgIExvZ2dpbmcudyhUQUcsICJzZXRNaWNyb3Bob25lTXV0
ZSgiICsgbXV0ZSArICIpIik7Ci0gICAgbWljcm9waG9uZU11dGUgPSBtdXRlOwotICB9Ci19Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRj
QXVkaW9UcmFjay5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1RyYWNrLmphdmEJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJS
dGNBdWRpb1RyYWNrLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlv
bmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAg
aW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1h
eQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1w
b3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0
OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Gb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRp
YS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1RyYWNrOwotaW1wb3J0
IGFuZHJvaWQub3MuUHJvY2VzczsKLQotaW1wb3J0IGphdmEubGFuZy5UaHJlYWQ7Ci1pbXBvcnQg
amF2YS5uaW8uQnl0ZUJ1ZmZlcjsKLQotcHVibGljIGNsYXNzIFdlYlJ0Y0F1ZGlvVHJhY2sgewot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb1RyYWNrIjsKLQotICAvLyBE
ZWZhdWx0IGF1ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4KLSAgLy8g
R3VhcmFudGVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICAvLyBSZXF1ZXN0ZWQgc2l6
ZSBvZiBlYWNoIHJlY29yZGVkIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY2xpZW50LgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVMgPSAxMDsKLQotICAv
LyBBdmVyYWdlIG51bWJlciBvZiBjYWxsYmFja3MgcGVyIHNlY29uZC4KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IEJVRkZFUlNfUEVSX1NFQ09ORCA9IDEwMDAgLyBDQUxMQkFDS19CVUZGRVJf
U0laRV9NUzsKLQotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgcHJpdmF0ZSBm
aW5hbCBsb25nIG5hdGl2ZUF1ZGlvVHJhY2s7Ci0gIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2Vy
IGF1ZGlvTWFuYWdlcjsKLQotICBwcml2YXRlIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlcjsKLQotICBw
cml2YXRlIEF1ZGlvVHJhY2sgYXVkaW9UcmFjayA9IG51bGw7Ci0gIHByaXZhdGUgQXVkaW9UcmFj
a1RocmVhZCBhdWRpb1RocmVhZCA9IG51bGw7Ci0KLSAgLy8gU2FtcGxlcyB0byBiZSBwbGF5ZWQg
YXJlIHJlcGxhY2VkIGJ5IHplcm9zIGlmIHxzcGVha2VyTXV0ZXwgaXMgc2V0IHRvIHRydWUuCi0g
IC8vIENhbiBiZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBzcGVha2VyIGlzIGZ1bGx5IG11dGVk
LgotICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIHNwZWFrZXJNdXRlID0gZmFsc2U7
Ci0gIHByaXZhdGUgYnl0ZVtdIGVtcHR5Qnl0ZXM7Ci0KLSAgLyoqCi0gICAqIEF1ZGlvIHRocmVh
ZCB3aGljaCBrZWVwcyBjYWxsaW5nIEF1ZGlvVHJhY2sud3JpdGUoKSB0byBzdHJlYW0gYXVkaW8u
Ci0gICAqIERhdGEgaXMgcGVyaW9kaWNhbGx5IGFjcXVpcmVkIGZyb20gdGhlIG5hdGl2ZSBXZWJS
VEMgbGF5ZXIgdXNpbmcgdGhlCi0gICAqIG5hdGl2ZUdldFBsYXlvdXREYXRhIGNhbGxiYWNrIGZ1
bmN0aW9uLgotICAgKiBUaGlzIHRocmVhZCB1c2VzIGEgUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlf
VVJHRU5UX0FVRElPIHByaW9yaXR5LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBBdWRpb1RyYWNr
VGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4ga2Vl
cEFsaXZlID0gdHJ1ZTsKLQotICAgIHB1YmxpYyBBdWRpb1RyYWNrVGhyZWFkKFN0cmluZyBuYW1l
KSB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJs
aWMgdm9pZCBydW4oKSB7Ci0gICAgICBQcm9jZXNzLnNldFRocmVhZFByaW9yaXR5KFByb2Nlc3Mu
VEhSRUFEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVk
aW9UcmFja1RocmVhZCIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0KLSAg
ICAgIHRyeSB7Ci0gICAgICAgIC8vIEluIE1PREVfU1RSRUFNIG1vZGUgd2UgY2FuIG9wdGlvbmFs
bHkgcHJpbWUgdGhlIG91dHB1dCBidWZmZXIgYnkKLSAgICAgICAgLy8gd3JpdGluZyB1cCB0byBi
dWZmZXJTaXplSW5CeXRlcyAoZnJvbSBjb25zdHJ1Y3RvcikgYmVmb3JlIHN0YXJ0aW5nLgotICAg
ICAgICAvLyBUaGlzIHByaW1pbmcgd2lsbCBhdm9pZCBhbiBpbW1lZGlhdGUgdW5kZXJydW4sIGJ1
dCBpcyBub3QgcmVxdWlyZWQuCi0gICAgICAgIC8vIFRPRE8oaGVucmlrYSk6IGluaXRpYWwgdGVz
dHMgaGF2ZSBzaG93biB0aGF0IHByaW1pbmcgaXMgbm90IHJlcXVpcmVkLgotICAgICAgICBhdWRp
b1RyYWNrLnBsYXkoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShhdWRpb1RyYWNrLmdldFBsYXlTdGF0
ZSgpID09IEF1ZGlvVHJhY2suUExBWVNUQVRFX1BMQVlJTkcpOwotICAgICAgfSBjYXRjaCAoSWxs
ZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvVHJh
Y2sucGxheSBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICAgIH0KLQotICAgICAgLy8gRml4ZWQgc2l6ZSBpbiBieXRlcyBvZiBlYWNoIDEwbXMgYmxvY2sg
b2YgYXVkaW8gZGF0YSB0aGF0IHdlIGFzayBmb3IKLSAgICAgIC8vIHVzaW5nIGNhbGxiYWNrcyB0
byB0aGUgbmF0aXZlIFdlYlJUQyBjbGllbnQuCi0gICAgICBmaW5hbCBpbnQgc2l6ZUluQnl0ZXMg
PSBieXRlQnVmZmVyLmNhcGFjaXR5KCk7Ci0KLSAgICAgIHdoaWxlIChrZWVwQWxpdmUpIHsKLSAg
ICAgICAgLy8gR2V0IDEwbXMgb2YgUENNIGRhdGEgZnJvbSB0aGUgbmF0aXZlIFdlYlJUQyBjbGll
bnQuIEF1ZGlvIGRhdGEgaXMKLSAgICAgICAgLy8gd3JpdHRlbiBpbnRvIHRoZSBjb21tb24gQnl0
ZUJ1ZmZlciB1c2luZyB0aGUgYWRkcmVzcyB0aGF0IHdhcwotICAgICAgICAvLyBjYWNoZWQgYXQg
Y29uc3RydWN0aW9uLgotICAgICAgICBuYXRpdmVHZXRQbGF5b3V0RGF0YShzaXplSW5CeXRlcywg
bmF0aXZlQXVkaW9UcmFjayk7Ci0gICAgICAgIC8vIFdyaXRlIGRhdGEgdW50aWwgYWxsIGRhdGEg
aGFzIGJlZW4gd3JpdHRlbiB0byB0aGUgYXVkaW8gc2luay4KLSAgICAgICAgLy8gVXBvbiByZXR1
cm4sIHRoZSBidWZmZXIgcG9zaXRpb24gd2lsbCBoYXZlIGJlZW4gYWR2YW5jZWQgdG8gcmVmbGVj
dAotICAgICAgICAvLyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHdy
aXR0ZW4gdG8gdGhlIEF1ZGlvVHJhY2suCi0gICAgICAgIGFzc2VydFRydWUoc2l6ZUluQnl0ZXMg
PD0gYnl0ZUJ1ZmZlci5yZW1haW5pbmcoKSk7Ci0gICAgICAgIGlmIChzcGVha2VyTXV0ZSkgewot
ICAgICAgICAgIGJ5dGVCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICBieXRlQnVmZmVyLnB1dChl
bXB0eUJ5dGVzKTsKLSAgICAgICAgICBieXRlQnVmZmVyLnBvc2l0aW9uKDApOwotICAgICAgICB9
Ci0gICAgICAgIGludCBieXRlc1dyaXR0ZW4gPSAwOwotICAgICAgICBpZiAoV2ViUnRjQXVkaW9V
dGlscy5ydW5uaW5nT25Mb2xsaXBvcE9ySGlnaGVyKCkpIHsKLSAgICAgICAgICBieXRlc1dyaXR0
ZW4gPSB3cml0ZU9uTG9sbGlwb3AoYXVkaW9UcmFjaywgYnl0ZUJ1ZmZlciwgc2l6ZUluQnl0ZXMp
OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlUHJlTG9s
bGlwb3AoYXVkaW9UcmFjaywgYnl0ZUJ1ZmZlciwgc2l6ZUluQnl0ZXMpOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChieXRlc1dyaXR0ZW4gIT0gc2l6ZUluQnl0ZXMpIHsKLSAgICAgICAgICBMb2dn
aW5nLmUoVEFHLCAiQXVkaW9UcmFjay53cml0ZSBmYWlsZWQ6ICIgKyBieXRlc1dyaXR0ZW4pOwot
ICAgICAgICAgIGlmIChieXRlc1dyaXR0ZW4gPT0gQXVkaW9UcmFjay5FUlJPUl9JTlZBTElEX09Q
RVJBVElPTikgewotICAgICAgICAgICAga2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgICAgIC8vIFRoZSBieXRlIGJ1ZmZlciBtdXN0IGJlIHJld2luZGVkIHNp
bmNlIGJ5dGVCdWZmZXIucG9zaXRpb24oKSBpcwotICAgICAgICAvLyBpbmNyZWFzZWQgYXQgZWFj
aCBjYWxsIHRvIEF1ZGlvVHJhY2sud3JpdGUoKS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywKLSAgICAg
ICAgLy8gbmV4dCBjYWxsIHRvIEF1ZGlvVHJhY2sud3JpdGUoKSB3aWxsIGZhaWwuCi0gICAgICAg
IGJ5dGVCdWZmZXIucmV3aW5kKCk7Ci0KLSAgICAgICAgLy8gVE9ETyhoZW5yaWthKTogaXQgaXMg
cG9zc2libGUgdG8gY3JlYXRlIGEgZGVsYXkgZXN0aW1hdGUgaGVyZSBieQotICAgICAgICAvLyBj
b3VudGluZyBudW1iZXIgb2Ygd3JpdHRlbiBmcmFtZXMgYW5kIHN1YnRyYWN0aW5nIHRoZSByZXN1
bHQgZnJvbQotICAgICAgICAvLyBhdWRpb1RyYWNrLmdldFBsYXliYWNrSGVhZFBvc2l0aW9uKCku
Ci0gICAgICB9Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGF1ZGlvVHJhY2suc3RvcCgpOwotICAg
ICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5l
KFRBRywgIkF1ZGlvVHJhY2suc3RvcCBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
ICB9Ci0gICAgICBhc3NlcnRUcnVlKGF1ZGlvVHJhY2suZ2V0UGxheVN0YXRlKCkgPT0gQXVkaW9U
cmFjay5QTEFZU1RBVEVfU1RPUFBFRCk7Ci0gICAgICBhdWRpb1RyYWNrLmZsdXNoKCk7Ci0gICAg
fQotCi0gICAgcHJpdmF0ZSBpbnQgd3JpdGVPbkxvbGxpcG9wKEF1ZGlvVHJhY2sgYXVkaW9UcmFj
aywgQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBpbnQgc2l6ZUluQnl0ZXMpIHsKLSAgICAgIHJldHVy
biBhdWRpb1RyYWNrLndyaXRlKGJ5dGVCdWZmZXIsIHNpemVJbkJ5dGVzLCBBdWRpb1RyYWNrLldS
SVRFX0JMT0NLSU5HKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCB3cml0ZVByZUxvbGxpcG9w
KEF1ZGlvVHJhY2sgYXVkaW9UcmFjaywgQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBpbnQgc2l6ZUlu
Qnl0ZXMpIHsKLSAgICAgIHJldHVybiBhdWRpb1RyYWNrLndyaXRlKGJ5dGVCdWZmZXIuYXJyYXko
KSwgYnl0ZUJ1ZmZlci5hcnJheU9mZnNldCgpLCBzaXplSW5CeXRlcyk7Ci0gICAgfQotCi0gICAg
cHVibGljIHZvaWQgam9pblRocmVhZCgpIHsKLSAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAg
ICAgd2hpbGUgKGlzQWxpdmUoKSkgewotICAgICAgICB0cnkgewotICAgICAgICAgIGpvaW4oKTsK
LSAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgIC8v
IElnbm9yZS4KLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIFdlYlJ0Y0F1ZGlv
VHJhY2soQ29udGV4dCBjb250ZXh0LCBsb25nIG5hdGl2ZUF1ZGlvVHJhY2spIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0g
ICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAgICB0aGlzLm5hdGl2ZUF1ZGlvVHJhY2sgPSBu
YXRpdmVBdWRpb1RyYWNrOwotICAgIGF1ZGlvTWFuYWdlciA9IChBdWRpb01hbmFnZXIpIGNvbnRl
eHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpOwotICAgIGlmIChERUJV
RykgewotICAgICAgV2ViUnRjQXVkaW9VdGlscy5sb2dEZXZpY2VJbmZvKFRBRyk7Ci0gICAgfQot
ICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGluaXRQbGF5b3V0KGludCBzYW1wbGVSYXRlLCBpbnQg
Y2hhbm5lbHMpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdFBsYXlvdXQoc2FtcGxlUmF0ZT0i
ICsgc2FtcGxlUmF0ZSArICIsIGNoYW5uZWxzPSIgKyBjaGFubmVscyArICIpIik7Ci0gICAgZmlu
YWwgaW50IGJ5dGVzUGVyRnJhbWUgPSBjaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsK
LSAgICBieXRlQnVmZmVyID0gYnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChieXRlc1BlckZyYW1l
ICogKHNhbXBsZVJhdGUgLyBCVUZGRVJTX1BFUl9TRUNPTkQpKTsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiYnl0ZUJ1ZmZlci5jYXBhY2l0eTogIiArIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAg
ZW1wdHlCeXRlcyA9IG5ldyBieXRlW2J5dGVCdWZmZXIuY2FwYWNpdHkoKV07Ci0gICAgLy8gUmF0
aGVyIHRoYW4gcGFzc2luZyB0aGUgQnl0ZUJ1ZmZlciB3aXRoIGV2ZXJ5IGNhbGxiYWNrIChyZXF1
aXJpbmcKLSAgICAvLyB0aGUgcG90ZW50aWFsbHkgZXhwZW5zaXZlIEdldERpcmVjdEJ1ZmZlckFk
ZHJlc3MpIHdlIHNpbXBseSBoYXZlIHRoZQotICAgIC8vIHRoZSBuYXRpdmUgY2xhc3MgY2FjaGUg
dGhlIGFkZHJlc3MgdG8gdGhlIG1lbW9yeSBvbmNlLgotICAgIG5hdGl2ZUNhY2hlRGlyZWN0QnVm
ZmVyQWRkcmVzcyhieXRlQnVmZmVyLCBuYXRpdmVBdWRpb1RyYWNrKTsKLQotICAgIC8vIEdldCB0
aGUgbWluaW11bSBidWZmZXIgc2l6ZSByZXF1aXJlZCBmb3IgdGhlIHN1Y2Nlc3NmdWwgY3JlYXRp
b24gb2YgYW4KLSAgICAvLyBBdWRpb1RyYWNrIG9iamVjdCB0byBiZSBjcmVhdGVkIGluIHRoZSBN
T0RFX1NUUkVBTSBtb2RlLgotICAgIC8vIE5vdGUgdGhhdCB0aGlzIHNpemUgZG9lc24ndCBndWFy
YW50ZWUgYSBzbW9vdGggcGxheWJhY2sgdW5kZXIgbG9hZC4KLSAgICAvLyBUT0RPKGhlbnJpa2Ep
OiBzaG91bGQgd2UgZXh0ZW5kIHRoZSBidWZmZXIgc2l6ZSB0byBhdm9pZCBnbGl0Y2hlcz8KLSAg
ICBmaW5hbCBpbnQgbWluQnVmZmVyU2l6ZUluQnl0ZXMgPSBBdWRpb1RyYWNrLmdldE1pbkJ1ZmZl
clNpemUoCi0gICAgICAgIHNhbXBsZVJhdGUsIEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUX01PTk8s
IEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1
ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZTogIiArIG1pbkJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAg
ICAvLyBGb3IgdGhlIHN0cmVhbWluZyBtb2RlLCBkYXRhIG11c3QgYmUgd3JpdHRlbiB0byB0aGUg
YXVkaW8gc2luayBpbgotICAgIC8vIGNodW5rcyBvZiBzaXplIChnaXZlbiBieSBieXRlQnVmZmVy
LmNhcGFjaXR5KCkpIGxlc3MgdGhhbiBvciBlcXVhbAotICAgIC8vIHRvIHRoZSB0b3RhbCBidWZm
ZXIgc2l6ZSB8bWluQnVmZmVyU2l6ZUluQnl0ZXN8LiBCdXQsIHdlIGhhdmUgc2VlbgotICAgIC8v
IHJlcG9ydHMgb2YgImdldE1pbkJ1ZmZlclNpemUoKTogZXJyb3IgcXVlcnlpbmcgaGFyZHdhcmUi
LiBIZW5jZSwgaXQKLSAgICAvLyBjYW4gaGFwcGVuIHRoYXQgfG1pbkJ1ZmZlclNpemVJbkJ5dGVz
fCBjb250YWlucyBhbiBpbnZhbGlkIHZhbHVlLgotICAgIGlmIChtaW5CdWZmZXJTaXplSW5CeXRl
cyA8IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlv
VHJhY2suZ2V0TWluQnVmZmVyU2l6ZSByZXR1cm5zIGFuIGludmFsaWQgdmFsdWUuIik7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRW5zdXJlIHRoYXQgcHJldmlzaW9uIGF1
ZGlvIHNlc3Npb24gd2FzIHN0b3BwZWQgY29ycmVjdGx5IGJlZm9yZSB0cnlpbmcKLSAgICAvLyB0
byBjcmVhdGUgYSBuZXcgQXVkaW9UcmFjay4KLSAgICBpZiAoYXVkaW9UcmFjayAhPSBudWxsKSB7
Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQ29uZmxpY3Qgd2l0aCBleGlzdGluZyBBdWRpb1RyYWNr
LiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB0cnkgewotICAgICAgLy8gQ3Jl
YXRlIGFuIEF1ZGlvVHJhY2sgb2JqZWN0IGFuZCBpbml0aWFsaXplIGl0cyBhc3NvY2lhdGVkIGF1
ZGlvIGJ1ZmZlci4KLSAgICAgIC8vIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIGRldGVybWluZXMg
aG93IGxvbmcgYW4gQXVkaW9UcmFjayBjYW4gcGxheQotICAgICAgLy8gYmVmb3JlIHJ1bm5pbmcg
b3V0IG9mIGRhdGEuCi0gICAgICBhdWRpb1RyYWNrID0KLSAgICAgICAgICBuZXcgQXVkaW9UcmFj
ayhBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwsIHNhbXBsZVJhdGUsIEF1ZGlvRm9ybWF0
LkNIQU5ORUxfT1VUX01PTk8sCi0gICAgICAgICAgICAgIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BD
TV8xNkJJVCwgbWluQnVmZmVyU2l6ZUluQnl0ZXMsIEF1ZGlvVHJhY2suTU9ERV9TVFJFQU0pOwot
ICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5n
LmQoVEFHLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgLy8gSXQgY2FuIGhhcHBlbiB0aGF0IGFuIEF1ZGlvVHJhY2sgaXMgY3JlYXRlZCBidXQgaXQg
d2FzIG5vdCBzdWNjZXNzZnVsbHkKLSAgICAvLyBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBT
ZWVtcyB0byBiZSB0aGUgY2FzZSBlLmcuIHdoZW4gdGhlIG1heGltdW0KLSAgICAvLyBudW1iZXIg
b2YgZ2xvYmFsbHkgYXZhaWxhYmxlIGF1ZGlvIHRyYWNrcyBpcyBleGNlZWRlZC4KLSAgICBpZiAo
YXVkaW9UcmFjay5nZXRTdGF0ZSgpICE9IEF1ZGlvVHJhY2suU1RBVEVfSU5JVElBTElaRUQpIHsK
LSAgICAgIExvZ2dpbmcuZShUQUcsICJJbml0aWFsaXphdGlvbiBvZiBhdWRpbyB0cmFjayBmYWls
ZWQuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFZlcmlmeSB0aGF0IGFs
bCBhdWRpbyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBhbmQgY29ycmVjdC4KLSAgICBpZiAoIWFyZVBh
cmFtZXRlcnNWYWxpZChzYW1wbGVSYXRlLCBjaGFubmVscykpIHsKLSAgICAgIExvZ2dpbmcuZShU
QUcsICJBdCBsZWFzdCBvbmUgYXVkaW8gdHJhY2sgcGFyYW1ldGVyIGlzIGludmFsaWQuIik7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGxvZ01haW5QYXJhbWV0ZXJzKCk7Ci0gICAg
bG9nTWFpblBhcmFtZXRlcnNFeHRlbmRlZCgpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAg
cHJpdmF0ZSBib29sZWFuIHN0YXJ0UGxheW91dCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3Rh
cnRQbGF5b3V0Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RyYWNrICE9IG51bGwpOwotICAgIGFz
c2VydFRydWUoYXVkaW9UaHJlYWQgPT0gbnVsbCk7Ci0gICAgaWYgKGF1ZGlvVHJhY2suZ2V0U3Rh
dGUoKSAhPSBBdWRpb1RyYWNrLlNUQVRFX0lOSVRJQUxJWkVEKSB7Ci0gICAgICBMb2dnaW5nLmUo
VEFHLCAiQXVkaW8gdHJhY2sgaXMgbm90IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4iKTsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYXVkaW9UaHJlYWQgPSBuZXcgQXVkaW9UcmFj
a1RocmVhZCgiQXVkaW9UcmFja0phdmFUaHJlYWQiKTsKLSAgICBhdWRpb1RocmVhZC5zdGFydCgp
OwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHN0b3BQbGF5b3V0
KCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wUGxheW91dCIpOwotICAgIGFzc2VydFRydWUo
YXVkaW9UaHJlYWQgIT0gbnVsbCk7Ci0gICAgbG9nVW5kZXJydW5Db3VudCgpOwotICAgIGF1ZGlv
VGhyZWFkLmpvaW5UaHJlYWQoKTsKLSAgICBhdWRpb1RocmVhZCA9IG51bGw7Ci0gICAgaWYgKGF1
ZGlvVHJhY2sgIT0gbnVsbCkgewotICAgICAgYXVkaW9UcmFjay5yZWxlYXNlKCk7Ci0gICAgICBh
dWRpb1RyYWNrID0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBH
ZXQgbWF4IHBvc3NpYmxlIHZvbHVtZSBpbmRleCBmb3IgYSBwaG9uZSBjYWxsIGF1ZGlvIHN0cmVh
bS4KLSAgcHJpdmF0ZSBpbnQgZ2V0U3RyZWFtTWF4Vm9sdW1lKCkgewotICAgIExvZ2dpbmcuZChU
QUcsICJnZXRTdHJlYW1NYXhWb2x1bWUiKTsKLSAgICBhc3NlcnRUcnVlKGF1ZGlvTWFuYWdlciAh
PSBudWxsKTsKLSAgICByZXR1cm4gYXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRp
b01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwpOwotICB9Ci0KLSAgLy8gU2V0IGN1cnJlbnQgdm9s
dW1lIGxldmVsIGZvciBhIHBob25lIGNhbGwgYXVkaW8gc3RyZWFtLgotICBwcml2YXRlIGJvb2xl
YW4gc2V0U3RyZWFtVm9sdW1lKGludCB2b2x1bWUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic2V0
U3RyZWFtVm9sdW1lKCIgKyB2b2x1bWUgKyAiKSIpOwotICAgIGFzc2VydFRydWUoYXVkaW9NYW5h
Z2VyICE9IG51bGwpOwotICAgIGlmIChpc1ZvbHVtZUZpeGVkKCkpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJUaGUgZGV2aWNlIGltcGxlbWVudHMgYSBmaXhlZCB2b2x1bWUgcG9saWN5LiIpOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRpb01hbmFnZXIuc2V0U3RyZWFtVm9s
dW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgdm9sdW1lLCAwKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1ZvbHVtZUZpeGVkKCkgewotICAg
IGlmICghV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25Mb2xsaXBvcE9ySGlnaGVyKCkpCi0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGF1ZGlvTWFuYWdlci5pc1ZvbHVtZUZpeGVkKCk7
Ci0gIH0KLQotICAvKiogR2V0IGN1cnJlbnQgdm9sdW1lIGxldmVsIGZvciBhIHBob25lIGNhbGwg
YXVkaW8gc3RyZWFtLiAqLwotICBwcml2YXRlIGludCBnZXRTdHJlYW1Wb2x1bWUoKSB7Ci0gICAg
TG9nZ2luZy5kKFRBRywgImdldFN0cmVhbVZvbHVtZSIpOwotICAgIGFzc2VydFRydWUoYXVkaW9N
YW5hZ2VyICE9IG51bGwpOwotICAgIHJldHVybiBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1l
KEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCk7Ci0gIH0KLQotICAvLyBWZXJpZmllcyB0
aGF0IHRoZSBhdWRpbyB0cmFjayBpcyB1c2luZyBjb3JyZWN0IHBhcmFtZXRlcnMsIGkuZS4sIHRo
YXQgdGhlCi0gIC8vIGNyZWF0ZWQgdHJhY2sgdXNlcyB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFz
a2VkIGZvci4KLSAgcHJpdmF0ZSBib29sZWFuIGFyZVBhcmFtZXRlcnNWYWxpZChpbnQgc2FtcGxl
UmF0ZSwgaW50IGNoYW5uZWxzKSB7Ci0gICAgZmluYWwgaW50IHN0cmVhbVR5cGUgPSBhdWRpb1Ry
YWNrLmdldFN0cmVhbVR5cGUoKTsKLSAgICByZXR1cm4gKGF1ZGlvVHJhY2suZ2V0QXVkaW9Gb3Jt
YXQoKSA9PSBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQKLSAgICAgICAgJiYgYXVkaW9U
cmFjay5nZXRDaGFubmVsQ29uZmlndXJhdGlvbigpID09IEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VU
X01PTk8KLSAgICAgICAgJiYgc3RyZWFtVHlwZSA9PSBBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNF
X0NBTEwgJiYgYXVkaW9UcmFjay5nZXRTYW1wbGVSYXRlKCkgPT0gc2FtcGxlUmF0ZQotICAgICAg
ICAmJiBzYW1wbGVSYXRlID09IGF1ZGlvVHJhY2suZ2V0TmF0aXZlT3V0cHV0U2FtcGxlUmF0ZShz
dHJlYW1UeXBlKQotICAgICAgICAmJiBhdWRpb1RyYWNrLmdldENoYW5uZWxDb3VudCgpID09IGNo
YW5uZWxzKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dNYWluUGFyYW1ldGVycygpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFjazogIgotICAgICAgICAgICAgKyAic2Vzc2lvbiBJ
RDogIiArIGF1ZGlvVHJhY2suZ2V0QXVkaW9TZXNzaW9uSWQoKSArICIsICIKLSAgICAgICAgICAg
ICsgImNoYW5uZWxzOiAiICsgYXVkaW9UcmFjay5nZXRDaGFubmVsQ291bnQoKSArICIsICIKLSAg
ICAgICAgICAgICsgInNhbXBsZSByYXRlOiAiICsgYXVkaW9UcmFjay5nZXRTYW1wbGVSYXRlKCkg
KyAiLCAiCi0gICAgICAgICAgICAvLyBHYWluICg+PTEuMCkgZXhwcmVzc2VkIGFzIGxpbmVhciBt
dWx0aXBsaWVyIG9uIHNhbXBsZSB2YWx1ZXMuCi0gICAgICAgICAgICArICJtYXggZ2FpbjogIiAr
IGF1ZGlvVHJhY2suZ2V0TWF4Vm9sdW1lKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01h
aW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKSB7Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmlu
Z09uTWFyc2htYWxsb3dPckhpZ2hlcigpKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9U
cmFjazogIgotICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0aXZlIHNpemUgb2YgdGhlIEF1ZGlv
VHJhY2sgYnVmZmVyIHRoYXQgdGhlIGFwcCB3cml0ZXMgdG8uCi0gICAgICAgICAgICAgICsgImJ1
ZmZlciBzaXplIGluIGZyYW1lczogIiArIGF1ZGlvVHJhY2suZ2V0QnVmZmVyU2l6ZUluRnJhbWVz
KCkpOwotICAgIH0KLSAgICBpZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25Ob3VnYXRPckhp
Z2hlcigpKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFjazogIgotICAgICAgICAg
ICAgICAvLyBNYXhpbXVtIHNpemUgb2YgdGhlIEF1ZGlvVHJhY2sgYnVmZmVyIGluIGZyYW1lcy4K
LSAgICAgICAgICAgICAgKyAiYnVmZmVyIGNhcGFjaXR5IGluIGZyYW1lczogIiArIGF1ZGlvVHJh
Y2suZ2V0QnVmZmVyQ2FwYWNpdHlJbkZyYW1lcygpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBQcmlu
dHMgdGhlIG51bWJlciBvZiB1bmRlcnJ1biBvY2N1cnJlbmNlcyBpbiB0aGUgYXBwbGljYXRpb24t
bGV2ZWwgd3JpdGUKLSAgLy8gYnVmZmVyIHNpbmNlIHRoZSBBdWRpb1RyYWNrIHdhcyBjcmVhdGVk
LiBBbiB1bmRlcnJ1biBvY2N1cnMgaWYgdGhlIGFwcCBkb2VzCi0gIC8vIG5vdCB3cml0ZSBhdWRp
byBkYXRhIHF1aWNrbHkgZW5vdWdoLCBjYXVzaW5nIHRoZSBidWZmZXIgdG8gdW5kZXJmbG93IGFu
ZCBhCi0gIC8vIHBvdGVudGlhbCBhdWRpbyBnbGl0Y2guCi0gIC8vIFRPRE8oaGVucmlrYSk6IGtl
ZXAgdHJhY2sgb2YgdGhpcyB2YWx1ZSBpbiB0aGUgZmllbGQgYW5kIHBvc3NpYmx5IGFkZCBuZXcK
LSAgLy8gVU1BIHN0YXQgaWYgbmVlZGVkLgotICBwcml2YXRlIHZvaWQgbG9nVW5kZXJydW5Db3Vu
dCgpIHsKLSAgICBpZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25Ob3VnYXRPckhpZ2hlcigp
KSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAidW5kZXJydW4gY291bnQ6ICIgKyBhdWRpb1RyYWNr
LmdldFVuZGVycnVuQ291bnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3
aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uICB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVkLgot
ICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25kaXRpb24pIHsKLSAg
ICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJFeHBl
Y3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgbmF0
aXZlIHZvaWQgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKEJ5dGVCdWZmZXIgYnl0ZUJ1
ZmZlciwgbG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBu
YXRpdmVHZXRQbGF5b3V0RGF0YShpbnQgYnl0ZXMsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwot
Ci0gIC8vIFNldHMgYWxsIHNhbXBsZXMgdG8gYmUgcGxheWVkIG91dCB0byB6ZXJvIGlmIHxtdXRl
fCBpcyB0cnVlLCBpLmUuLAotICAvLyBlbnN1cmVzIHRoYXQgdGhlIHNwZWFrZXIgaXMgbXV0ZWQu
Ci0gIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRTcGVha2VyTXV0ZShib29sZWFuIG11dGUpIHsKLSAg
ICBMb2dnaW5nLncoVEFHLCAic2V0U3BlYWtlck11dGUoIiArIG11dGUgKyAiKSIpOwotICAgIHNw
ZWFrZXJNdXRlID0gbXV0ZTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVXRpbHMuamF2YQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVk
aW9VdGlscy5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3Jj
L29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9VdGlscy5qYXZhCShub25leGlzdGVu
dCkKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJS
VEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAg
dGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmln
aHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29u
dHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9S
UyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9y
Zy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci0KLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0u
UGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lk
Lm9zLlByb2Nlc3M7Ci0KLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwotaW1wb3J0IGphdmEudXRp
bC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBX
ZWJSdGNBdWRpb1V0aWxzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJX
ZWJSdGNBdWRpb1V0aWxzIjsKLQotICAvLyBMaXN0IG9mIGRldmljZXMgd2hlcmUgd2UgaGF2ZSBz
ZWVuIGlzc3VlcyAoZS5nLiBiYWQgYXVkaW8gcXVhbGl0eSkgdXNpbmcKLSAgLy8gdGhlIGxvdyBs
YXRlbmN5IG91dHB1dCBtb2RlIGluIGNvbWJpbmF0aW9uIHdpdGggT3BlblNMIEVTLgotICAvLyBU
aGUgZGV2aWNlIG5hbWUgaXMgZ2l2ZW4gYnkgQnVpbGQuTU9ERUwuCi0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIFN0cmluZ1tdIEJMQUNLTElTVEVEX09QRU5fU0xfRVNfTU9ERUxTID0gbmV3IFN0cmlu
Z1tdIHsKLSAgICAgIC8vIFRoaXMgbGlzdCBpcyBjdXJyZW50bHkgZW1wdHkgOy0pCi0gIH07Ci0K
LSAgLy8gTGlzdCBvZiBkZXZpY2VzIHdoZXJlIGl0IGhhcyBiZWVuIHZlcmlmaWVkIHRoYXQgdGhl
IGJ1aWx0LWluIGVmZmVjdAotICAvLyBiYWQgYW5kIHdoZXJlIGl0IG1ha2VzIHNlbnNlIHRvIGF2
b2lkIHVzaW5nIGl0IGFuZCBpbnN0ZWFkIHJlbHkgb24gdGhlCi0gIC8vIG5hdGl2ZSBXZWJSVEMg
dmVyc2lvbiBpbnN0ZWFkLiBUaGUgZGV2aWNlIG5hbWUgaXMgZ2l2ZW4gYnkgQnVpbGQuTU9ERUwu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEJMQUNLTElTVEVEX0FFQ19NT0RFTFMg
PSBuZXcgU3RyaW5nW10gewotICAgICAgIkQ2NTAzIiwgLy8gU29ueSBYcGVyaWEgWjIgRDY1MDMK
LSAgICAgICJPTkUgQTIwMDUiLCAvLyBPbmVQbHVzIDIKLSAgICAgICJNb3RvRzMiLCAvLyBNb3Rv
IEcgKDNyZCBHZW5lcmF0aW9uKQotICB9OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdb
XSBCTEFDS0xJU1RFRF9OU19NT0RFTFMgPSBuZXcgU3RyaW5nW10gewotICAgICAgIk5leHVzIDEw
IiwgIk5leHVzIDkiLAotICAgICAgIk9ORSBBMjAwNSIsIC8vIE9uZVBsdXMgMgotICB9OwotCi0g
IC8vIFVzZSAxNmtIeiBhcyB0aGUgZGVmYXVsdCBzYW1wbGUgcmF0ZS4gQSBoaWdoZXIgc2FtcGxl
IHJhdGUgbWlnaHQgcHJldmVudAotICAvLyB1cyBmcm9tIHN1cHBvcnRpbmcgY29tbXVuaWNhdGlv
biBtb2RlIG9uIHNvbWUgb2xkZXIgKGUuZy4gSUNTKSBkZXZpY2VzLgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgREVGQVVMVF9TQU1QTEVfUkFURV9IWiA9IDE2MDAwOwotICBwcml2YXRlIHN0
YXRpYyBpbnQgZGVmYXVsdFNhbXBsZVJhdGVIeiA9IERFRkFVTFRfU0FNUExFX1JBVEVfSFo7Ci0g
IC8vIFNldCB0byB0cnVlIGlmIHNldERlZmF1bHRTYW1wbGVSYXRlSHooKSBoYXMgYmVlbiBjYWxs
ZWQuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEZWZhdWx0U2FtcGxlUmF0ZU92ZXJyaWRk
ZW4gPSBmYWxzZTsKLQotICAvLyBCeSBkZWZhdWx0LCB1dGlsaXplIGhhcmR3YXJlIGJhc2VkIGF1
ZGlvIGVmZmVjdHMgZm9yIEFFQyBhbmQgTlMgd2hlbgotICAvLyBhdmFpbGFibGUuCi0gIHByaXZh
dGUgc3RhdGljIGJvb2xlYW4gdXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlciA9IGZh
bHNlOwotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVz
c29yID0gZmFsc2U7Ci0KLSAgLy8gQ2FsbCB0aGVzZSBtZXRob2RzIGlmIGFueSBoYXJkd2FyZSBi
YXNlZCBlZmZlY3Qgc2hhbGwgYmUgcmVwbGFjZWQgYnkgYQotICAvLyBzb2Z0d2FyZSBiYXNlZCB2
ZXJzaW9uIHByb3ZpZGVkIGJ5IHRoZSBXZWJSVEMgc3RhY2sgaW5zdGVhZC4KLSAgcHVibGljIHN0
YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVy
KGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgdXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxl
ciA9IGVuYWJsZTsKLSAgfQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFdl
YlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgdXNlV2ViUnRj
QmFzZWROb2lzZVN1cHByZXNzb3IgPSBlbmFibGU7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBzeW5j
aHJvbml6ZWQgdm9pZCBzZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKGJvb2xlYW4g
ZW5hYmxlKSB7Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogZGVwcmVjYXRlZDsgcmVtb3ZlIHdoZW4g
bm8gbG9uZ2VyIHVzZWQgYnkgYW55IGNsaWVudC4KLSAgICBMb2dnaW5nLncoVEFHLCAic2V0V2Vi
UnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJvbCgpIGlzIGRlcHJlY2F0ZWQiKTsKLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gdXNlV2ViUnRjQmFzZWRBY291c3Rp
Y0VjaG9DYW5jZWxlcigpIHsKLSAgICBpZiAodXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5j
ZWxlcikgewotICAgICAgTG9nZ2luZy53KFRBRywgIk92ZXJyaWRpbmcgZGVmYXVsdCBiZWhhdmlv
cjsgbm93IHVzaW5nIFdlYlJUQyBBRUMhIik7Ci0gICAgfQotICAgIHJldHVybiB1c2VXZWJSdGNC
YXNlZEFjb3VzdGljRWNob0NhbmNlbGVyOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25p
emVkIGJvb2xlYW4gdXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoKSB7Ci0gICAgaWYgKHVz
ZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiT3Zl
cnJpZGluZyBkZWZhdWx0IGJlaGF2aW9yOyBub3cgdXNpbmcgV2ViUlRDIE5TISIpOwotICAgIH0K
LSAgICByZXR1cm4gdXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3I7Ci0gIH0KLSAgLy8gVE9E
TyhoZW5yaWthKTogZGVwcmVjYXRlZDsgcmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQgYnkgYW55
IGNsaWVudC4KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB1c2VXZWJSdGNC
YXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKCkgewotICAgIC8vIEFsd2F5cyByZXR1cm4gdHJ1ZSBo
ZXJlIHRvIGF2b2lkIHRyeWluZyB0byB1c2UgYW55IGJ1aWx0LWluIEFHQy4KLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGFu
IGF1ZGlvIGVmZmVjdCAoQUVDIG9yIE5TKS4KLSAgLy8gRm91ciBjb25kaXRpb25zIG11c3QgYmUg
ZnVsZmlsbGVkIGlmIGZ1bmN0aW9ucyBhcmUgdG8gcmV0dXJuIHRydWU6Ci0gIC8vIDEpIHRoZSBw
bGF0Zm9ybSBtdXN0IHN1cHBvcnQgdGhlIGJ1aWx0LWluIChIVykgZWZmZWN0LAotICAvLyAyKSBl
eHBsaWNpdCB1c2UgKG92ZXJyaWRlKSBvZiBhIFdlYlJUQyBiYXNlZCB2ZXJzaW9uIG11c3Qgbm90
IGJlIHNldCwKLSAgLy8gMykgdGhlIGRldmljZSBtdXN0IG5vdCBiZSBibGFja2xpc3RlZCBmb3Ig
dXNlIG9mIHRoZSBlZmZlY3QsIGFuZAotICAvLyA0KSB0aGUgVVVJRCBvZiB0aGUgZWZmZWN0IG11
c3QgYmUgYXBwcm92ZWQgKHNvbWUgVVVJRHMgY2FuIGJlIGV4Y2x1ZGVkKS4KLSAgcHVibGljIHN0
YXRpYyBib29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0
dXJuIFdlYlJ0Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpOwotICB9
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIHsK
LSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwot
ICB9Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGRlcHJlY2F0ZWQ7IHJlbW92ZSB3aGVuIG5vIGxvbmdl
ciB1c2VkIGJ5IGFueSBjbGllbnQuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0F1dG9tYXRp
Y0dhaW5Db250cm9sU3VwcG9ydGVkKCkgewotICAgIC8vIEFsd2F5cyByZXR1cm4gZmFsc2UgaGVy
ZSB0byBhdm9pZCB0cnlpbmcgdG8gdXNlIGFueSBidWlsdC1pbiBBR0MuCi0gICAgcmV0dXJuIGZh
bHNlOwotICB9Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgZGVmYXVsdCBoYW5kbGlu
ZyBvZiBxdWVyeWluZyB0aGUgbmF0aXZlIHNhbXBsZQotICAvLyByYXRlIHNoYWxsIGJlIG92ZXJy
aWRkZW4uIENhbiBiZSB1c2VmdWwgb24gc29tZSBkZXZpY2VzIHdoZXJlIHRoZQotICAvLyBhdmFp
bGFibGUgQW5kcm9pZCBBUElzIGFyZSBrbm93biB0byByZXR1cm4gaW52YWxpZCByZXN1bHRzLgot
ICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHRTYW1wbGVSYXRlSHoo
aW50IHNhbXBsZVJhdGVIeikgewotICAgIGlzRGVmYXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuID0g
dHJ1ZTsKLSAgICBkZWZhdWx0U2FtcGxlUmF0ZUh6ID0gc2FtcGxlUmF0ZUh6OwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBpc0RlZmF1bHRTYW1wbGVSYXRlT3Zl
cnJpZGRlbigpIHsKLSAgICByZXR1cm4gaXNEZWZhdWx0U2FtcGxlUmF0ZU92ZXJyaWRkZW47Ci0g
IH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBpbnQgZ2V0RGVmYXVsdFNhbXBsZVJh
dGVIeigpIHsKLSAgICByZXR1cm4gZGVmYXVsdFNhbXBsZVJhdGVIejsKLSAgfQotCi0gIHB1Ymxp
YyBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldEJsYWNrTGlzdGVkTW9kZWxzRm9yQWVjVXNhZ2UoKSB7
Ci0gICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9B
RUNfTU9ERUxTKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldEJsYWNr
TGlzdGVkTW9kZWxzRm9yTnNVc2FnZSgpIHsKLSAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChXZWJS
dGNBdWRpb1V0aWxzLkJMQUNLTElTVEVEX05TX01PREVMUyk7Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIGJvb2xlYW4gcnVubmluZ09uR2luZ2VyQnJlYWRPckhpZ2hlcigpIHsKLSAgICAvLyBOb3Zl
bWJlciAyMDEwOiBBbmRyb2lkIDIuMywgQVBJIExldmVsIDkuCi0gICAgcmV0dXJuIEJ1aWxkLlZF
UlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkdJTkdFUkJSRUFEOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkplbGx5QmVhbk9ySGlnaGVyKCkgewot
ICAgIC8vIEp1bmUgMjAxMjogQW5kcm9pZCA0LjEuIEFQSSBMZXZlbCAxNi4KLSAgICByZXR1cm4g
QnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTjsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25KZWxseUJlYW5NUjFPckhp
Z2hlcigpIHsKLSAgICAvLyBOb3ZlbWJlciAyMDEyOiBBbmRyb2lkIDQuMi4gQVBJIExldmVsIDE3
LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RF
Uy5KRUxMWV9CRUFOX01SMTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5n
T25KZWxseUJlYW5NUjJPckhpZ2hlcigpIHsKLSAgICAvLyBKdWx5IDI0LCAyMDEzOiBBbmRyb2lk
IDQuMy4gQVBJIExldmVsIDE4LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0g
QnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgYm9vbGVhbiBydW5uaW5nT25Mb2xsaXBvcE9ySGlnaGVyKCkgewotICAgIC8vIEFQSSBMZXZl
bCAyMS4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05f
Q09ERVMuTE9MTElQT1A7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09u
TWFyc2htYWxsb3dPckhpZ2hlcigpIHsKLSAgICAvLyBBUEkgTGV2ZWwgMjMuCi0gICAgcmV0dXJu
IEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk07Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uTm91Z2F0T3JIaWdoZXIoKSB7Ci0gICAg
Ly8gQVBJIExldmVsIDI0LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVp
bGQuVkVSU0lPTl9DT0RFUy5OOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgYnVpbGRp
bmcgYSBzdHJpbmcgb2YgdGhyZWFkIGluZm9ybWF0aW9uLgotICBwdWJsaWMgc3RhdGljIFN0cmlu
ZyBnZXRUaHJlYWRJbmZvKCkgewotICAgIHJldHVybiAiQFtuYW1lPSIgKyBUaHJlYWQuY3VycmVu
dFRocmVhZCgpLmdldE5hbWUoKSArICIsIGlkPSIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdl
dElkKCkKLSAgICAgICAgKyAiXSI7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgd2UncmUg
cnVubmluZyBvbiBlbXVsYXRvci4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkVt
dWxhdG9yKCkgewotICAgIHJldHVybiBCdWlsZC5IQVJEV0FSRS5lcXVhbHMoImdvbGRmaXNoIikg
JiYgQnVpbGQuQlJBTkQuc3RhcnRzV2l0aCgiZ2VuZXJpY18iKTsKLSAgfQotCi0gIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGJsYWNrbGlzdGVkIGZvciBPcGVuU0wgRVMgdXNhZ2Uu
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBkZXZpY2VJc0JsYWNrbGlzdGVkRm9yT3BlblNMRVNV
c2FnZSgpIHsKLSAgICBMaXN0PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBBcnJheXMuYXNM
aXN0KEJMQUNLTElTVEVEX09QRU5fU0xfRVNfTU9ERUxTKTsKLSAgICByZXR1cm4gYmxhY2tMaXN0
ZWRNb2RlbHMuY29udGFpbnMoQnVpbGQuTU9ERUwpOwotICB9Ci0KLSAgLy8gSW5mb3JtYXRpb24g
YWJvdXQgdGhlIGN1cnJlbnQgYnVpbGQsIHRha2VuIGZyb20gc3lzdGVtIHByb3BlcnRpZXMuCi0g
IHB1YmxpYyBzdGF0aWMgdm9pZCBsb2dEZXZpY2VJbmZvKFN0cmluZyB0YWcpIHsKLSAgICBMb2dn
aW5nLmQodGFnLCAiQW5kcm9pZCBTREs6ICIgKyBCdWlsZC5WRVJTSU9OLlNES19JTlQgKyAiLCAi
Ci0gICAgICAgICAgICArICJSZWxlYXNlOiAiICsgQnVpbGQuVkVSU0lPTi5SRUxFQVNFICsgIiwg
IgotICAgICAgICAgICAgKyAiQnJhbmQ6ICIgKyBCdWlsZC5CUkFORCArICIsICIKLSAgICAgICAg
ICAgICsgIkRldmljZTogIiArIEJ1aWxkLkRFVklDRSArICIsICIKLSAgICAgICAgICAgICsgIklk
OiAiICsgQnVpbGQuSUQgKyAiLCAiCi0gICAgICAgICAgICArICJIYXJkd2FyZTogIiArIEJ1aWxk
LkhBUkRXQVJFICsgIiwgIgotICAgICAgICAgICAgKyAiTWFudWZhY3R1cmVyOiAiICsgQnVpbGQu
TUFOVUZBQ1RVUkVSICsgIiwgIgotICAgICAgICAgICAgKyAiTW9kZWw6ICIgKyBCdWlsZC5NT0RF
TCArICIsICIKLSAgICAgICAgICAgICsgIlByb2R1Y3Q6ICIgKyBCdWlsZC5QUk9EVUNUKTsKLSAg
fQotCi0gIC8vIENoZWNrcyBpZiB0aGUgcHJvY2VzcyBoYXMgYXMgc3BlY2lmaWVkIHBlcm1pc3Np
b24gb3Igbm90LgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzUGVybWlzc2lvbihDb250ZXh0
IGNvbnRleHQsIFN0cmluZyBwZXJtaXNzaW9uKSB7Ci0gICAgcmV0dXJuIGNvbnRleHQuY2hlY2tQ
ZXJtaXNzaW9uKHBlcm1pc3Npb24sIFByb2Nlc3MubXlQaWQoKSwgUHJvY2Vzcy5teVVpZCgpKQot
ICAgICAgICA9PSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQ7Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZElu
Zm8uamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMv
dm9pY2VlbmdpbmUvQnVpbGRJbmZvLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2Fu
ZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8uamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNr
YWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwot
Ci1wdWJsaWMgZmluYWwgY2xhc3MgQnVpbGRJbmZvIHsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcg
Z2V0RGV2aWNlKCkgewotICAgIHJldHVybiBCdWlsZC5ERVZJQ0U7Ci0gIH0KLQotICBwdWJsaWMg
c3RhdGljIFN0cmluZyBnZXREZXZpY2VNb2RlbCgpIHsKLSAgICByZXR1cm4gQnVpbGQuTU9ERUw7
Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQcm9kdWN0KCkgewotICAgIHJldHVy
biBCdWlsZC5QUk9EVUNUOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QnJhbmQo
KSB7Ci0gICAgcmV0dXJuIEJ1aWxkLkJSQU5EOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJp
bmcgZ2V0RGV2aWNlTWFudWZhY3R1cmVyKCkgewotICAgIHJldHVybiBCdWlsZC5NQU5VRkFDVFVS
RVI7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBbmRyb2lkQnVpbGRJZCgpIHsK
LSAgICByZXR1cm4gQnVpbGQuSUQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRC
dWlsZFR5cGUoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlRZUEU7Ci0gIH0KLQotICBwdWJsaWMgc3Rh
dGljIFN0cmluZyBnZXRCdWlsZFJlbGVhc2UoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04u
UkVMRUFTRTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFNka1ZlcnNpb24oKSB7Ci0g
ICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVDsKLSAgfQotfQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZmZWN0cy5q
YXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2lj
ZWVuZ2luZS9XZWJSdGNBdWRpb0VmZmVjdHMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZp
Y2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZm
ZWN0cy5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRl
bGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBm
aWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBi
ZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJl
ZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcu
d2VicnRjLkxvZ2dpbmc7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwot
aW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BY291c3RpY0VjaG9DYW5jZWxlcjsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRp
YS5hdWRpb2Z4LkF1ZGlvRWZmZWN0LkRlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5h
dWRpb2Z4LkF1dG9tYXRpY0dhaW5Db250cm9sOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9m
eC5Ob2lzZVN1cHByZXNzb3I7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1wb3J0IGph
dmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vLyBUaGlzIGNsYXNzIHdy
YXBzIGNvbnRyb2wgb2YgdGhyZWUgZGlmZmVyZW50IHBsYXRmb3JtIGVmZmVjdHMuIFN1cHBvcnRl
ZAotLy8gZWZmZWN0cyBhcmU6IEFjb3VzdGljRWNob0NhbmNlbGVyIChBRUMpIGFuZCBOb2lzZVN1
cHByZXNzb3IgKE5TKS4KLS8vIENhbGxpbmcgZW5hYmxlKCkgd2lsbCBhY3RpdmUgYWxsIGVmZmVj
dHMgdGhhdCBhcmUKLS8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGlmIHRoZSBjb3JyZXNwb25k
aW5nIHxzaG91bGRFbmFibGVYWFh8IG1lbWJlciBpcyBzZXQuCi1jbGFzcyBXZWJSdGNBdWRpb0Vm
ZmVjdHMgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb0VmZmVjdHMi
OwotCi0gIC8vIFVVSURzIGZvciBTb2Z0d2FyZSBBdWRpbyBFZmZlY3RzIHRoYXQgd2Ugd2FudCB0
byBhdm9pZCB1c2luZy4KLSAgLy8gVGhlIGltcGxlbWVudG9yIGZpZWxkIHdpbGwgYmUgc2V0IHRv
ICJUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ii4KLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgVVVJRCBBT1NQX0FDT1VTVElDX0VDSE9fQ0FOQ0VMRVIgPQotICAgICAgVVVJRC5mcm9tU3Ry
aW5nKCJiYjM5MmVjMC04ZDRkLTExZTAtYTg5Ni0wMDAyYTVkNWM1MWIiKTsKLSAgcHJpdmF0ZSBz
dGF0aWMgZmluYWwgVVVJRCBBT1NQX05PSVNFX1NVUFBSRVNTT1IgPQotICAgICAgVVVJRC5mcm9t
U3RyaW5nKCJjMDZjODQwMC04ZTA2LTExZTAtOWNiNi0wMDAyYTVkNWM1MWIiKTsKLQotICAvLyBD
b250YWlucyB0aGUgYXZhaWxhYmxlIGVmZmVjdCBkZXNjcmlwdG9ycyByZXR1cm5lZCBmcm9tIHRo
ZQotICAvLyBBdWRpb0VmZmVjdC5nZXRFZmZlY3RzKCkgY2FsbC4gVGhpcyByZXN1bHQgaXMgY2Fj
aGVkIHRvIGF2b2lkIGRvaW5nIHRoZQotICAvLyBzbG93IE9TIGNhbGwgbXVsdGlwbGUgdGltZXMu
Ci0gIHByaXZhdGUgc3RhdGljIERlc2NyaXB0b3JbXSBjYWNoZWRFZmZlY3RzID0gbnVsbDsKLQot
ICAvLyBDb250YWlucyB0aGUgYXVkaW8gZWZmZWN0IG9iamVjdHMuIENyZWF0ZWQgaW4gZW5hYmxl
KCkgYW5kIGRlc3Ryb3llZAotICAvLyBpbiByZWxlYXNlKCkuCi0gIHByaXZhdGUgQWNvdXN0aWNF
Y2hvQ2FuY2VsZXIgYWVjID0gbnVsbDsKLSAgcHJpdmF0ZSBOb2lzZVN1cHByZXNzb3IgbnMgPSBu
dWxsOwotCi0gIC8vIEFmZmVjdHMgdGhlIGZpbmFsIHN0YXRlIGdpdmVuIHRvIHRoZSBzZXRFbmFi
bGVkKCkgbWV0aG9kIG9uIGVhY2ggZWZmZWN0LgotICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBpcyBz
ZXQgdG8gImRpc2FibGVkIiBidXQgZWFjaCBlZmZlY3QgY2FuIGFsc28gYmUgZW5hYmxlZAotICAv
LyBieSBjYWxsaW5nIHNldEFFQygpIGFuZCBzZXROUygpLgotICAvLyBUbyBlbmFibGUgYW4gZWZm
ZWN0LCBib3RoIHRoZSBzaG91bGRFbmFibGVYWFggbWVtYmVyIGFuZCB0aGUgc3RhdGljCi0gIC8v
IGNhblVzZVhYWCgpIG11c3QgYmUgdHJ1ZS4KLSAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEVuYWJs
ZUFlYyA9IGZhbHNlOwotICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkRW5hYmxlTnMgPSBmYWxzZTsK
LQotICAvLyBDaGVja3MgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIEFjb3VzdGljIEVjaG8gQ2Fu
Y2VsbGF0aW9uIChBRUMpLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpbXBsZW1l
bnRzIEFFQywgZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291
c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpIHsKLSAgICAvLyBOb3RlOiB3ZSdyZSB1c2luZyBp
c0Fjb3VzdGljRWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCkgaW5zdGVhZCBvZgotICAgIC8v
IEFjb3VzdGljRWNob0NhbmNlbGVyLmlzQXZhaWxhYmxlKCkgdG8gYXZvaWQgdGhlIGV4cGVuc2l2
ZSBnZXRFZmZlY3RzKCkKLSAgICAvLyBPUyBBUEkgY2FsbC4KLSAgICByZXR1cm4gV2ViUnRjQXVk
aW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5PckhpZ2hlcigpICYmIGlzQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXJFZmZlY3RBdmFpbGFibGUoKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiB0aGUgZGV2aWNl
IGltcGxlbWVudHMgTm9pc2UgU3VwcHJlc3Npb24gKE5TKS4KLSAgLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSBkZXZpY2UgaW1wbGVtZW50cyBOUywgZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgc3Rh
dGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSB7Ci0gICAgLy8gTm90ZTog
d2UncmUgdXNpbmcgaXNOb2lzZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKSBpbnN0ZWFkIG9m
Ci0gICAgLy8gTm9pc2VTdXBwcmVzc29yLmlzQXZhaWxhYmxlKCkgdG8gYXZvaWQgdGhlIGV4cGVu
c2l2ZSBnZXRFZmZlY3RzKCkKLSAgICAvLyBPUyBBUEkgY2FsbC4KLSAgICByZXR1cm4gV2ViUnRj
QXVkaW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5PckhpZ2hlcigpICYmIGlzTm9pc2VTdXBwcmVz
c29yRWZmZWN0QXZhaWxhYmxlKCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRl
dmljZSBpcyBibGFja2xpc3RlZCBmb3IgSFcgQUVDIHVzYWdlLgotICBwdWJsaWMgc3RhdGljIGJv
b2xlYW4gaXNBY291c3RpY0VjaG9DYW5jZWxlckJsYWNrbGlzdGVkKCkgewotICAgIExpc3Q8U3Ry
aW5nPiBibGFja0xpc3RlZE1vZGVscyA9IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0QmxhY2tMaXN0ZWRN
b2RlbHNGb3JBZWNVc2FnZSgpOwotICAgIGJvb2xlYW4gaXNCbGFja2xpc3RlZCA9IGJsYWNrTGlz
dGVkTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgICBpZiAoaXNCbGFja2xpc3RlZCkg
ewotICAgICAgTG9nZ2luZy53KFRBRywgQnVpbGQuTU9ERUwgKyAiIGlzIGJsYWNrbGlzdGVkIGZv
ciBIVyBBRUMgdXNhZ2UhIik7Ci0gICAgfQotICAgIHJldHVybiBpc0JsYWNrbGlzdGVkOwotICB9
Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0ZWQgZm9yIEhX
IE5TIHVzYWdlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JCbGFj
a2xpc3RlZCgpIHsKLSAgICBMaXN0PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBXZWJSdGNB
dWRpb1V0aWxzLmdldEJsYWNrTGlzdGVkTW9kZWxzRm9yTnNVc2FnZSgpOwotICAgIGJvb2xlYW4g
aXNCbGFja2xpc3RlZCA9IGJsYWNrTGlzdGVkTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsK
LSAgICBpZiAoaXNCbGFja2xpc3RlZCkgewotICAgICAgTG9nZ2luZy53KFRBRywgQnVpbGQuTU9E
RUwgKyAiIGlzIGJsYWNrbGlzdGVkIGZvciBIVyBOUyB1c2FnZSEiKTsKLSAgICB9Ci0gICAgcmV0
dXJuIGlzQmxhY2tsaXN0ZWQ7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRm
b3JtIEFFQyBzaG91bGQgYmUgZXhjbHVkZWQgYmFzZWQgb24gaXRzIFVVSUQuCi0gIC8vIEF1ZGlv
RWZmZWN0LnF1ZXJ5RWZmZWN0cygpIGNhbiB0aHJvdyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uCi0g
IEBUYXJnZXRBcGkoMTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9D
YW5jZWxlckV4Y2x1ZGVkQnlVVUlEKCkgewotICAgIGZvciAoRGVzY3JpcHRvciBkIDogZ2V0QXZh
aWxhYmxlRWZmZWN0cygpKSB7Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhBdWRpb0VmZmVjdC5F
RkZFQ1RfVFlQRV9BRUMpCi0gICAgICAgICAgJiYgZC51dWlkLmVxdWFscyhBT1NQX0FDT1VTVElD
X0VDSE9fQ0FOQ0VMRVIpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRm
b3JtIE5TIHNob3VsZCBiZSBleGNsdWRlZCBiYXNlZCBvbiBpdHMgVVVJRC4KLSAgLy8gQXVkaW9F
ZmZlY3QucXVlcnlFZmZlY3RzKCkgY2FuIHRocm93IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi4KLSAg
QFRhcmdldEFwaSgxOCkKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3Nv
ckV4Y2x1ZGVkQnlVVUlEKCkgewotICAgIGZvciAoRGVzY3JpcHRvciBkIDogZ2V0QXZhaWxhYmxl
RWZmZWN0cygpKSB7Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhBdWRpb0VmZmVjdC5FRkZFQ1Rf
VFlQRV9OUykgJiYgZC51dWlkLmVxdWFscyhBT1NQX05PSVNFX1NVUFBSRVNTT1IpKSB7Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0K
LQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBBY291c3RpYyBFY2hv
IENhbmNlbGxhdGlvbiAoQUVDKS4KLSAgQFRhcmdldEFwaSgxOCkKLSAgcHJpdmF0ZSBzdGF0aWMg
Ym9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCkgewotICAgIHJl
dHVybiBpc0VmZmVjdFR5cGVBdmFpbGFibGUoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDKTsK
LSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIE5vaXNlIFN1
cHByZXNzaW9uIChOUykuCi0gIEBUYXJnZXRBcGkoMTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xl
YW4gaXNOb2lzZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKSB7Ci0gICAgcmV0dXJuIGlzRWZm
ZWN0VHlwZUF2YWlsYWJsZShBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9OUyk7Ci0gIH0KLQotICAv
LyBSZXR1cm5zIHRydWUgaWYgYWxsIGNvbmRpdGlvbnMgZm9yIHN1cHBvcnRpbmcgdGhlIEhXIEFF
QyBhcmUgZnVsZmlsbGVkLgotICAvLyBJdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBlbmFibGUg
dGhlIEhXIEFFQyBpZiB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICBwdWJsaWMgc3RhdGlj
IGJvb2xlYW4gY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKSB7Ci0gICAgYm9vbGVhbiBjYW5V
c2VBY291c3RpY0VjaG9DYW5jZWxlciA9IGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQo
KQotICAgICAgICAmJiAhV2ViUnRjQXVkaW9VdGlscy51c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNo
b0NhbmNlbGVyKCkKLSAgICAgICAgJiYgIWlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJCbGFja2xpc3Rl
ZCgpICYmICFpc0Fjb3VzdGljRWNob0NhbmNlbGVyRXhjbHVkZWRCeVVVSUQoKTsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXI6ICIgKyBjYW5Vc2VBY291c3Rp
Y0VjaG9DYW5jZWxlcik7Ci0gICAgcmV0dXJuIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyOwot
ICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25kaXRpb25zIGZvciBzdXBwb3J0aW5n
IHRoZSBIVyBOUyBhcmUgZnVsZmlsbGVkLgotICAvLyBJdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0
byBlbmFibGUgdGhlIEhXIE5TIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gIHB1Ymxp
YyBzdGF0aWMgYm9vbGVhbiBjYW5Vc2VOb2lzZVN1cHByZXNzb3IoKSB7Ci0gICAgYm9vbGVhbiBj
YW5Vc2VOb2lzZVN1cHByZXNzb3IgPSBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpCi0gICAg
ICAgICYmICFXZWJSdGNBdWRpb1V0aWxzLnVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKCkg
JiYgIWlzTm9pc2VTdXBwcmVzc29yQmxhY2tsaXN0ZWQoKQotICAgICAgICAmJiAhaXNOb2lzZVN1
cHByZXNzb3JFeGNsdWRlZEJ5VVVJRCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJjYW5Vc2VOb2lz
ZVN1cHByZXNzb3I6ICIgKyBjYW5Vc2VOb2lzZVN1cHByZXNzb3IpOwotICAgIHJldHVybiBjYW5V
c2VOb2lzZVN1cHByZXNzb3I7Ci0gIH0KLQotICBzdGF0aWMgV2ViUnRjQXVkaW9FZmZlY3RzIGNy
ZWF0ZSgpIHsKLSAgICAvLyBSZXR1cm4gbnVsbCBpZiBWb0lQIGVmZmVjdHMgKEFFQywgQUdDIGFu
ZCBOUykgYXJlIG5vdCBzdXBwb3J0ZWQuCi0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5p
bmdPbkplbGx5QmVhbk9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJBUEkgbGV2
ZWwgMTYgb3IgaGlnaGVyIGlzIHJlcXVpcmVkISIpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAg
fQotICAgIHJldHVybiBuZXcgV2ViUnRjQXVkaW9FZmZlY3RzKCk7Ci0gIH0KLQotICBwcml2YXRl
IFdlYlJ0Y0F1ZGlvRWZmZWN0cygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJS
dGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0
aG9kIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBwbGF0Zm9ybSBBRUMuIEl0IG1vZGlmaWVzCi0g
IC8vIHxzaG91bGRFbmFibGVBZWN8IHdoaWNoIGlzIHVzZWQgaW4gZW5hYmxlKCkgd2hlcmUgdGhl
IGFjdHVhbCBzdGF0ZQotICAvLyBvZiB0aGUgQUVDIGVmZmVjdCBpcyBtb2RpZmllZC4gUmV0dXJu
cyB0cnVlIGlmIEhXIEFFQyBpcyBzdXBwb3J0ZWQgYW5kCi0gIC8vIGZhbHNlIG90aGVyd2lzZS4K
LSAgcHVibGljIGJvb2xlYW4gc2V0QUVDKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgInNldEFFQygiICsgZW5hYmxlICsgIikiKTsKLSAgICBpZiAoIWNhblVzZUFjb3VzdGlj
RWNob0NhbmNlbGVyKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJQbGF0Zm9ybSBBRUMgaXMg
bm90IHN1cHBvcnRlZCIpOwotICAgICAgc2hvdWxkRW5hYmxlQWVjID0gZmFsc2U7Ci0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChhZWMgIT0gbnVsbCAmJiAoZW5hYmxlICE9IHNo
b3VsZEVuYWJsZUFlYykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJQbGF0Zm9ybSBBRUMgc3Rh
dGUgY2FuJ3QgYmUgbW9kaWZpZWQgd2hpbGUgcmVjb3JkaW5nIik7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHNob3VsZEVuYWJsZUFlYyA9IGVuYWJsZTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi0gIC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhl
IHBsYXRmb3JtIE5TLiBJdCBtb2RpZmllcwotICAvLyB8c2hvdWxkRW5hYmxlTnN8IHdoaWNoIGlz
IHVzZWQgaW4gZW5hYmxlKCkgd2hlcmUgdGhlIGFjdHVhbCBzdGF0ZQotICAvLyBvZiB0aGUgTlMg
ZWZmZWN0IGlzIG1vZGlmaWVkLiBSZXR1cm5zIHRydWUgaWYgSFcgTlMgaXMgc3VwcG9ydGVkIGFu
ZAotICAvLyBmYWxzZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBib29sZWFuIHNldE5TKGJvb2xlYW4g
ZW5hYmxlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInNldE5TKCIgKyBlbmFibGUgKyAiKSIpOwot
ICAgIGlmICghY2FuVXNlTm9pc2VTdXBwcmVzc29yKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcs
ICJQbGF0Zm9ybSBOUyBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICBzaG91bGRFbmFibGVOcyA9
IGZhbHNlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobnMgIT0gbnVsbCAm
JiAoZW5hYmxlICE9IHNob3VsZEVuYWJsZU5zKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlBs
YXRmb3JtIE5TIHN0YXRlIGNhbid0IGJlIG1vZGlmaWVkIHdoaWxlIHJlY29yZGluZyIpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzaG91bGRFbmFibGVOcyA9IGVuYWJsZTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVuYWJsZShpbnQgYXVkaW9TZXNz
aW9uKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImVuYWJsZShhdWRpb1Nlc3Npb249IiArIGF1ZGlv
U2Vzc2lvbiArICIpIik7Ci0gICAgYXNzZXJ0VHJ1ZShhZWMgPT0gbnVsbCk7Ci0gICAgYXNzZXJ0
VHJ1ZShucyA9PSBudWxsKTsKLQotICAgIC8vIEFkZCBsb2dnaW5nIG9mIHN1cHBvcnRlZCBlZmZl
Y3RzIGJ1dCBmaWx0ZXIgb3V0ICJWb0lQIGVmZmVjdHMiLCBpLmUuLAotICAgIC8vIEFFQywgQUVD
IGFuZCBOUy4KLSAgICBmb3IgKERlc2NyaXB0b3IgZCA6IEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0
cygpKSB7Ci0gICAgICBpZiAoZWZmZWN0VHlwZUlzVm9JUChkLnR5cGUpIHx8IERFQlVHKSB7Ci0g
ICAgICAgIExvZ2dpbmcuZChUQUcsICJuYW1lOiAiICsgZC5uYW1lICsgIiwgIgotICAgICAgICAg
ICAgICAgICsgIm1vZGU6ICIgKyBkLmNvbm5lY3RNb2RlICsgIiwgIgotICAgICAgICAgICAgICAg
ICsgImltcGxlbWVudG9yOiAiICsgZC5pbXBsZW1lbnRvciArICIsICIKLSAgICAgICAgICAgICAg
ICArICJVVUlEOiAiICsgZC51dWlkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXNBY291
c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpKSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gQWNvdXN0
aWNFY2hvQ2FuY2VsZXIgYW5kIGF0dGFjaCBpdCB0byB0aGUgQXVkaW9SZWNvcmQgb24KLSAgICAg
IC8vIHRoZSBzcGVjaWZpZWQgYXVkaW8gc2Vzc2lvbi4KLSAgICAgIGFlYyA9IEFjb3VzdGljRWNo
b0NhbmNlbGVyLmNyZWF0ZShhdWRpb1Nlc3Npb24pOwotICAgICAgaWYgKGFlYyAhPSBudWxsKSB7
Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlZCA9IGFlYy5nZXRFbmFibGVkKCk7Ci0gICAgICAgIGJv
b2xlYW4gZW5hYmxlID0gc2hvdWxkRW5hYmxlQWVjICYmIGNhblVzZUFjb3VzdGljRWNob0NhbmNl
bGVyKCk7Ci0gICAgICAgIGlmIChhZWMuc2V0RW5hYmxlZChlbmFibGUpICE9IEF1ZGlvRWZmZWN0
LlNVQ0NFU1MpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHNldCB0aGUg
QWNvdXN0aWNFY2hvQ2FuY2VsZXIgc3RhdGUiKTsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5n
LmQoVEFHLCAiQWNvdXN0aWNFY2hvQ2FuY2VsZXI6IHdhcyAiICsgKGVuYWJsZWQgPyAiZW5hYmxl
ZCIgOiAiZGlzYWJsZWQiKQotICAgICAgICAgICAgICAgICsgIiwgZW5hYmxlOiAiICsgZW5hYmxl
ICsgIiwgaXMgbm93OiAiCi0gICAgICAgICAgICAgICAgKyAoYWVjLmdldEVuYWJsZWQoKSA/ICJl
bmFibGVkIiA6ICJkaXNhYmxlZCIpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcu
ZShUQUcsICJGYWlsZWQgdG8gY3JlYXRlIHRoZSBBY291c3RpY0VjaG9DYW5jZWxlciBpbnN0YW5j
ZSIpOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRl
ZCgpKSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gTm9pc2VTdXBwcmVzc29yIGFuZCBhdHRhY2ggaXQg
dG8gdGhlIEF1ZGlvUmVjb3JkIG9uIHRoZQotICAgICAgLy8gc3BlY2lmaWVkIGF1ZGlvIHNlc3Np
b24uCi0gICAgICBucyA9IE5vaXNlU3VwcHJlc3Nvci5jcmVhdGUoYXVkaW9TZXNzaW9uKTsKLSAg
ICAgIGlmIChucyAhPSBudWxsKSB7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlZCA9IG5zLmdldEVu
YWJsZWQoKTsKLSAgICAgICAgYm9vbGVhbiBlbmFibGUgPSBzaG91bGRFbmFibGVOcyAmJiBjYW5V
c2VOb2lzZVN1cHByZXNzb3IoKTsKLSAgICAgICAgaWYgKG5zLnNldEVuYWJsZWQoZW5hYmxlKSAh
PSBBdWRpb0VmZmVjdC5TVUNDRVNTKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxl
ZCB0byBzZXQgdGhlIE5vaXNlU3VwcHJlc3NvciBzdGF0ZSIpOwotICAgICAgICB9Ci0gICAgICAg
IExvZ2dpbmcuZChUQUcsICJOb2lzZVN1cHByZXNzb3I6IHdhcyAiICsgKGVuYWJsZWQgPyAiZW5h
YmxlZCIgOiAiZGlzYWJsZWQiKSArICIsIGVuYWJsZTogIgotICAgICAgICAgICAgICAgICsgZW5h
YmxlICsgIiwgaXMgbm93OiAiICsgKG5zLmdldEVuYWJsZWQoKSA/ICJlbmFibGVkIiA6ICJkaXNh
YmxlZCIpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJGYWlsZWQg
dG8gY3JlYXRlIHRoZSBOb2lzZVN1cHByZXNzb3IgaW5zdGFuY2UiKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICAvLyBSZWxlYXNlcyBhbGwgbmF0aXZlIGF1ZGlvIGVmZmVjdCByZXNvdXJjZXMu
IEl0IGlzIGEgZ29vZCBwcmFjdGljZSB0bwotICAvLyByZWxlYXNlIHRoZSBlZmZlY3QgZW5naW5l
IHdoZW4gbm90IGluIHVzZSBhcyBjb250cm9sIGNhbiBiZSByZXR1cm5lZAotICAvLyB0byBvdGhl
ciBhcHBsaWNhdGlvbnMgb3IgdGhlIG5hdGl2ZSByZXNvdXJjZXMgcmVsZWFzZWQuCi0gIHB1Ymxp
YyB2b2lkIHJlbGVhc2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInJlbGVhc2UiKTsKLSAgICBp
ZiAoYWVjICE9IG51bGwpIHsKLSAgICAgIGFlYy5yZWxlYXNlKCk7Ci0gICAgICBhZWMgPSBudWxs
OwotICAgIH0KLSAgICBpZiAobnMgIT0gbnVsbCkgewotICAgICAgbnMucmVsZWFzZSgpOwotICAg
ICAgbnMgPSBudWxsOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBmb3IgZWZmZWN0
IHR5cGVzIGluIHx0eXBlfCB0aGF0IGFyZSBvZiAiVm9JUCIgdHlwZXM6Ci0gIC8vIEFjb3VzdGlj
IEVjaG8gQ2FuY2VsZXIgKEFFQykgb3IgQXV0b21hdGljIEdhaW4gQ29udHJvbCAoQUdDKSBvcgot
ICAvLyBOb2lzZSBTdXBwcmVzc29yIChOUykuIE5vdGUgdGhhdCwgYW4gZXh0cmEgY2hlY2sgZm9y
IHN1cHBvcnQgaXMgbmVlZGVkCi0gIC8vIGluIGVhY2ggY29tcGFyaXNvbiBzaW5jZSBzb21lIGRl
dmljZXMgaW5jbHVkZXMgZWZmZWN0cyBpbiB0aGUKLSAgLy8gQXVkaW9FZmZlY3QuRGVzY3JpcHRv
ciBhcnJheSB0aGF0IGFyZSBhY3R1YWxseSBub3QgYXZhaWxhYmxlIG9uIHRoZSBkZXZpY2UuCi0g
IC8vIEFzIGFuIGV4YW1wbGU6IFNhbXN1bmcgR2FsYXh5IFM2IGluY2x1ZGVzIGFuIEFHQyBpbiB0
aGUgZGVzY3JpcHRvciBidXQKLSAgLy8gQXV0b21hdGljR2FpbkNvbnRyb2wuaXNBdmFpbGFibGUo
KSByZXR1cm5zIGZhbHNlLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRlIGJvb2xlYW4gZWZm
ZWN0VHlwZUlzVm9JUChVVUlEIHR5cGUpIHsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVu
bmluZ09uSmVsbHlCZWFuTVIyT3JIaWdoZXIoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiAoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDLmVxdWFscyh0eXBlKSAmJiBpc0Fj
b3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkpCi0gICAgICAgIHx8IChBdWRpb0VmZmVjdC5F
RkZFQ1RfVFlQRV9OUy5lcXVhbHModHlwZSkgJiYgaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQo
KSk7Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24g
d2hlbiBhbiBhc3NlcnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3Nl
cnRUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAg
IHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUi
KTsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBjYWNoZWQgY29weSBvZiB0aGUgYXVk
aW8gZWZmZWN0cyBhcnJheSwgaWYgYXZhaWxhYmxlLCBvcgotICAvLyBxdWVyaWVzIHRoZSBvcGVy
YXRpbmcgc3lzdGVtIGZvciB0aGUgbGlzdCBvZiBlZmZlY3RzLgotICBwcml2YXRlIHN0YXRpYyBE
ZXNjcmlwdG9yW10gZ2V0QXZhaWxhYmxlRWZmZWN0cygpIHsKLSAgICBpZiAoY2FjaGVkRWZmZWN0
cyAhPSBudWxsKSB7Ci0gICAgICByZXR1cm4gY2FjaGVkRWZmZWN0czsKLSAgICB9Ci0gICAgLy8g
VGhlIGNhY2hpbmcgaXMgYmVzdCBlZmZvcnQgb25seSAtIGlmIHRoaXMgbWV0aG9kIGlzIGNhbGxl
ZCBmcm9tIHNldmVyYWwKLSAgICAvLyB0aHJlYWRzIGluIHBhcmFsbGVsLCB0aGV5IG1heSBlbmQg
dXAgZG9pbmcgdGhlIHVuZGVybHlpbmcgT1MgY2FsbAotICAgIC8vIG11bHRpcGxlIHRpbWVzLiBJ
dCdzIG5vcm1hbGx5IG9ubHkgY2FsbGVkIG9uIG9uZSB0aHJlYWQgc28gdGhlcmUncyBubwotICAg
IC8vIHJlYWwgbmVlZCB0byBvcHRpbWl6ZSBmb3IgdGhlIG11bHRpcGxlIHRocmVhZHMgY2FzZS4K
LSAgICBjYWNoZWRFZmZlY3RzID0gQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCk7Ci0gICAgcmV0
dXJuIGNhY2hlZEVmZmVjdHM7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZWZmZWN0
IG9mIHRoZSBzcGVjaWZpZWQgdHlwZSBpcyBhdmFpbGFibGUuIEZ1bmN0aW9uYWxseQotICAvLyBl
cXVpdmFsZW50IHRvIChOb2lzZVN1cHByZXNzb3J8QXV0b21hdGljR2FpbkNvbnRyb2x8Li4uKS5p
c0F2YWlsYWJsZSgpLCBidXQKLSAgLy8gZmFzdGVyIGFzIGl0IGF2b2lkcyB0aGUgZXhwZW5zaXZl
IE9TIGNhbGwgdG8gZW51bWVyYXRlIGVmZmVjdHMuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4g
aXNFZmZlY3RUeXBlQXZhaWxhYmxlKFVVSUQgZWZmZWN0VHlwZSkgewotICAgIERlc2NyaXB0b3Jb
XSBlZmZlY3RzID0gZ2V0QXZhaWxhYmxlRWZmZWN0cygpOwotICAgIGlmIChlZmZlY3RzID09IG51
bGwpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZm9yIChEZXNjcmlwdG9yIGQg
OiBlZmZlY3RzKSB7Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhlZmZlY3RUeXBlKSkgewotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUv
V2ViUnRjQXVkaW9NYW5hZ2VyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlci5qYXZhCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vl
bmdpbmUvV2ViUnRjQXVkaW9NYW5hZ2VyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDcgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVu
Z2luZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuYW5u
b3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBv
cnQgYW5kcm9pZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVk
aWEuQXVkaW9Gb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5BdWRpb1JlY29yZDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlv
VHJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1wb3J0IGphdmEudXRpbC5UaW1l
cjsKLWltcG9ydCBqYXZhLnV0aWwuVGltZXJUYXNrOwotCi0vLyBXZWJSdGNBdWRpb01hbmFnZXIg
aGFuZGxlcyB0YXNrcyB0aGF0IHVzZXMgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIuCi0vLyBB
dCBjb25zdHJ1Y3Rpb24sIHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCkgaXMgY2FsbGVkIGFuZCBpdCBy
ZXRyaWV2ZXMKLS8vIGZ1bmRhbWVudGFsIGF1ZGlvIHBhcmFtZXRlcnMgbGlrZSBuYXRpdmUgc2Ft
cGxlIHJhdGUgYW5kIG51bWJlciBvZiBjaGFubmVscy4KLS8vIFRoZSByZXN1bHQgaXMgdGhlbiBw
cm92aWRlZCB0byB0aGUgY2FsbGVyIGJ5IG5hdGl2ZUNhY2hlQXVkaW9QYXJhbWV0ZXJzKCkuCi0v
LyBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwgaW5pdCgpIHRvIHNldCB1cCB0aGUgYXVkaW8g
ZW52aXJvbm1lbnQgZm9yIGJlc3QKLS8vIHBvc3NpYmxlICJWb0lQIHBlcmZvcm1hbmNlIi4gQWxs
IHNldHRpbmdzIGRvbmUgaW4gaW5pdCgpIGFyZSByZXZlcnRlZCBieQotLy8gZGlzcG9zZSgpLiBU
aGlzIGNsYXNzIGNhbiBhbHNvIGJlIHVzZWQgd2l0aG91dCBjYWxsaW5nIGluaXQoKSBpZiB0aGUg
dXNlcgotLy8gcHJlZmVycyB0byBzZXQgdXAgdGhlIGF1ZGlvIGVudmlyb25tZW50IHNlcGFyYXRl
bHkuIEhvd2V2ZXIsIGl0IGlzCi0vLyByZWNvbW1lbmRlZCB0byBhbHdheXMgdXNlIEF1ZGlvTWFu
YWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT04uCi1wdWJsaWMgY2xhc3MgV2ViUnRjQXVkaW9NYW5h
Z2VyIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9NYW5hZ2VyIjsK
LQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNh
Z2UgPSBmYWxzZTsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBibGFja2xpc3REZXZpY2VGb3JP
cGVuU0xFU1VzYWdlSXNPdmVycmlkZGVuID0gZmFsc2U7Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhv
ZCB0byBvdmVycmlkZSB0aGUgZGVhdWx0IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZGV2aWNlcwotICAv
LyBzcGVjaWZpZWQgaW4gV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9PUEVOX1NMX0VTX01P
REVMUy4KLSAgLy8gQWxsb3dzIGFuIGFwcCB0byB0YWtlIGNvbnRyb2wgb3ZlciB3aGljaCBkZXZp
Y2VzIHRvIGV4bHVkZSBmcm9tIHVzaW5nCi0gIC8vIHRoZSBPcGVuU0wgRVMgYXVkaW8gb3V0cHV0
IHBhdGgKLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRCbGFja2xpc3REZXZp
Y2VGb3JPcGVuU0xFU1VzYWdlKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgYmxhY2tsaXN0RGV2aWNl
Rm9yT3BlblNMRVNVc2FnZUlzT3ZlcnJpZGRlbiA9IHRydWU7Ci0gICAgYmxhY2tsaXN0RGV2aWNl
Rm9yT3BlblNMRVNVc2FnZSA9IGVuYWJsZTsKLSAgfQotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0
YSBmb3JtYXQgaXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJl
IHN1cHBvcnRlZCBieSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJ
VFNfUEVSX1NBTVBMRSA9IDE2OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxU
X0ZSQU1FX1BFUl9CVUZGRVIgPSAyNTY7Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN0ZXJl
byBzdXBwb3J0IGZvciBwbGF5b3V0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0hBTk5F
TFMgPSAxOwotCi0gIC8vIExpc3Qgb2YgcG9zc2libGUgYXVkaW8gbW9kZXMuCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZ1tdIEFVRElPX01PREVTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAg
ICJNT0RFX05PUk1BTCIsICJNT0RFX1JJTkdUT05FIiwgIk1PREVfSU5fQ0FMTCIsICJNT0RFX0lO
X0NPTU1VTklDQVRJT04iLAotICB9OwotCi0gIC8vIFByaXZhdGUgdXRpbGl0eSBjbGFzcyB0aGF0
IHBlcmlvZGljYWxseSBjaGVja3MgYW5kIGxvZ3MgdGhlIHZvbHVtZSBsZXZlbAotICAvLyBvZiB0
aGUgYXVkaW8gc3RyZWFtIHRoYXQgaXMgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhlIHZvbHVt
ZSBjb250cm9sLgotICAvLyBBIHRpbWVyIHRyaWdnZXJzIGxvZ3Mgb25jZSBldmVyeSAxMCBzZWNv
bmRzIGFuZCB0aGUgdGltZXIncyBhc3NvY2lhdGVkCi0gIC8vIHRocmVhZCBpcyBuYW1lZCAiV2Vi
UnRjVm9sdW1lTGV2ZWxMb2dnZXJUaHJlYWQiLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWb2x1
bWVMb2dnZXIgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSFJFQURfTkFNRSA9
ICJXZWJSdGNWb2x1bWVMZXZlbExvZ2dlclRocmVhZCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IFRJTUVSX1BFUklPRF9JTl9TRUNPTkRTID0gMTA7Ci0KLSAgICBwcml2YXRlIGZpbmFs
IEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7Ci0gICAgcHJpdmF0ZSBUaW1lciB0aW1lcjsKLQot
ICAgIHB1YmxpYyBWb2x1bWVMb2dnZXIoQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcikgewotICAg
ICAgdGhpcy5hdWRpb01hbmFnZXIgPSBhdWRpb01hbmFnZXI7Ci0gICAgfQotCi0gICAgcHVibGlj
IHZvaWQgc3RhcnQoKSB7Ci0gICAgICB0aW1lciA9IG5ldyBUaW1lcihUSFJFQURfTkFNRSk7Ci0g
ICAgICB0aW1lci5zY2hlZHVsZShuZXcgTG9nVm9sdW1lVGFzayhhdWRpb01hbmFnZXIuZ2V0U3Ry
ZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fUklORyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgYXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRpb01hbmFnZXIuU1RS
RUFNX1ZPSUNFX0NBTEwpKSwKLSAgICAgICAgICAwLCBUSU1FUl9QRVJJT0RfSU5fU0VDT05EUyAq
IDEwMDApOwotICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgTG9nVm9sdW1lVGFzayBleHRlbmRz
IFRpbWVyVGFzayB7Ci0gICAgICBwcml2YXRlIGZpbmFsIGludCBtYXhSaW5nVm9sdW1lOwotICAg
ICAgcHJpdmF0ZSBmaW5hbCBpbnQgbWF4Vm9pY2VDYWxsVm9sdW1lOwotCi0gICAgICBMb2dWb2x1
bWVUYXNrKGludCBtYXhSaW5nVm9sdW1lLCBpbnQgbWF4Vm9pY2VDYWxsVm9sdW1lKSB7Ci0gICAg
ICAgIHRoaXMubWF4UmluZ1ZvbHVtZSA9IG1heFJpbmdWb2x1bWU7Ci0gICAgICAgIHRoaXMubWF4
Vm9pY2VDYWxsVm9sdW1lID0gbWF4Vm9pY2VDYWxsVm9sdW1lOwotICAgICAgfQotCi0gICAgICBw
dWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICAgIGZpbmFsIGludCBtb2RlID0gYXVkaW9NYW5hZ2Vy
LmdldE1vZGUoKTsKLSAgICAgICAgaWYgKG1vZGUgPT0gQXVkaW9NYW5hZ2VyLk1PREVfUklOR1RP
TkUpIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU1RSRUFNX1JJTkcgc3RyZWFtIHZvbHVt
ZTogIgotICAgICAgICAgICAgICAgICAgKyBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1
ZGlvTWFuYWdlci5TVFJFQU1fUklORykgKyAiIChtYXg9IgotICAgICAgICAgICAgICAgICAgKyBt
YXhSaW5nVm9sdW1lICsgIikiKTsKLSAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEF1ZGlvTWFu
YWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT04pIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
Vk9JQ0VfQ0FMTCBzdHJlYW0gdm9sdW1lOiAiCi0gICAgICAgICAgICAgICAgICArIGF1ZGlvTWFu
YWdlci5nZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKSArICIg
KG1heD0iCi0gICAgICAgICAgICAgICAgICArIG1heFZvaWNlQ2FsbFZvbHVtZSArICIpIik7Ci0g
ICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RvcCgpIHsKLSAg
ICAgIGlmICh0aW1lciAhPSBudWxsKSB7Ci0gICAgICAgIHRpbWVyLmNhbmNlbCgpOwotICAgICAg
ICB0aW1lciA9IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBs
b25nIG5hdGl2ZUF1ZGlvTWFuYWdlcjsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7
Ci0gIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcjsKLQotICBwcml2YXRl
IGJvb2xlYW4gaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBpbnQgbmF0aXZlU2FtcGxl
UmF0ZTsKLSAgcHJpdmF0ZSBpbnQgbmF0aXZlQ2hhbm5lbHM7Ci0KLSAgcHJpdmF0ZSBib29sZWFu
IGhhcmR3YXJlQUVDOwotICBwcml2YXRlIGJvb2xlYW4gaGFyZHdhcmVBR0M7Ci0gIHByaXZhdGUg
Ym9vbGVhbiBoYXJkd2FyZU5TOwotICBwcml2YXRlIGJvb2xlYW4gbG93TGF0ZW5jeU91dHB1dDsK
LSAgcHJpdmF0ZSBib29sZWFuIGxvd0xhdGVuY3lJbnB1dDsKLSAgcHJpdmF0ZSBib29sZWFuIHBy
b0F1ZGlvOwotICBwcml2YXRlIGludCBzYW1wbGVSYXRlOwotICBwcml2YXRlIGludCBjaGFubmVs
czsKLSAgcHJpdmF0ZSBpbnQgb3V0cHV0QnVmZmVyU2l6ZTsKLSAgcHJpdmF0ZSBpbnQgaW5wdXRC
dWZmZXJTaXplOwotCi0gIHByaXZhdGUgZmluYWwgVm9sdW1lTG9nZ2VyIHZvbHVtZUxvZ2dlcjsK
LQotICBXZWJSdGNBdWRpb01hbmFnZXIoQ29udGV4dCBjb250ZXh0LCBsb25nIG5hdGl2ZUF1ZGlv
TWFuYWdlcikgewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRpbHMu
Z2V0VGhyZWFkSW5mbygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMu
bmF0aXZlQXVkaW9NYW5hZ2VyID0gbmF0aXZlQXVkaW9NYW5hZ2VyOwotICAgIGF1ZGlvTWFuYWdl
ciA9IChBdWRpb01hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElP
X1NFUlZJQ0UpOwotICAgIGlmIChERUJVRykgewotICAgICAgV2ViUnRjQXVkaW9VdGlscy5sb2dE
ZXZpY2VJbmZvKFRBRyk7Ci0gICAgfQotICAgIHZvbHVtZUxvZ2dlciA9IG5ldyBWb2x1bWVMb2dn
ZXIoYXVkaW9NYW5hZ2VyKTsKLSAgICBzdG9yZUF1ZGlvUGFyYW1ldGVycygpOwotICAgIG5hdGl2
ZUNhY2hlQXVkaW9QYXJhbWV0ZXJzKHNhbXBsZVJhdGUsIGNoYW5uZWxzLCBoYXJkd2FyZUFFQywg
aGFyZHdhcmVBR0MsIGhhcmR3YXJlTlMsCi0gICAgICAgIGxvd0xhdGVuY3lPdXRwdXQsIGxvd0xh
dGVuY3lJbnB1dCwgcHJvQXVkaW8sIG91dHB1dEJ1ZmZlclNpemUsIGlucHV0QnVmZmVyU2l6ZSwK
LSAgICAgICAgbmF0aXZlQXVkaW9NYW5hZ2VyKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBp
bml0KCkgewotICAgIExvZ2dpbmcuZChUQUcsICJpbml0IiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0
VGhyZWFkSW5mbygpKTsKLSAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiYXVkaW8gbW9kZSBpczogIiArIEFVRElPX01P
REVTW2F1ZGlvTWFuYWdlci5nZXRNb2RlKCldKTsKLSAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0g
ICAgdm9sdW1lTG9nZ2VyLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgZGlzcG9zZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSIgKyBXZWJS
dGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewot
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2b2x1bWVMb2dnZXIuc3RvcCgpOwotICB9Ci0KLSAg
cHJpdmF0ZSBib29sZWFuIGlzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCkgewotICAgIHJldHVy
biAoYXVkaW9NYW5hZ2VyLmdldE1vZGUoKSA9PSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5J
Q0FUSU9OKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0RldmljZUJsYWNrbGlzdGVkRm9y
T3BlblNMRVNVc2FnZSgpIHsKLSAgICBib29sZWFuIGJsYWNrbGlzdGVkID0gYmxhY2tsaXN0RGV2
aWNlRm9yT3BlblNMRVNVc2FnZUlzT3ZlcnJpZGRlbgotICAgICAgICA/IGJsYWNrbGlzdERldmlj
ZUZvck9wZW5TTEVTVXNhZ2UKLSAgICAgICAgOiBXZWJSdGNBdWRpb1V0aWxzLmRldmljZUlzQmxh
Y2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCk7Ci0gICAgaWYgKGJsYWNrbGlzdGVkKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCBCdWlsZC5NT0RFTCArICIgaXMgYmxhY2tsaXN0ZWQgZm9yIE9wZW5T
TCBFUyB1c2FnZSEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJsYWNrbGlzdGVkOwotICB9Ci0KLSAg
cHJpdmF0ZSB2b2lkIHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCkgewotICAgIC8vIE9ubHkgbW9ubyBp
cyBzdXBwb3J0ZWQgY3VycmVudGx5IChpbiBib3RoIGRpcmVjdGlvbnMpLgotICAgIC8vIFRPRE8o
aGVucmlrYSk6IGFkZCBzdXBwb3J0IGZvciBzdGVyZW8gcGxheW91dC4KLSAgICBjaGFubmVscyA9
IENIQU5ORUxTOwotICAgIHNhbXBsZVJhdGUgPSBnZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKCk7
Ci0gICAgaGFyZHdhcmVBRUMgPSBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCk7Ci0g
ICAgLy8gVE9ETyhoZW5yaWthKTogdXNlIG9mIGhhcmR3YXJlIEFHQyBpcyBubyBsb25nZXIgc3Vw
cG9ydGVkLiBDdXJyZW50bHkKLSAgICAvLyBoYXJkY29kZWQgdG8gZmFsc2UuIFRvIGJlIHJlbW92
ZWQuCi0gICAgaGFyZHdhcmVBR0MgPSBmYWxzZTsKLSAgICBoYXJkd2FyZU5TID0gaXNOb2lzZVN1
cHByZXNzb3JTdXBwb3J0ZWQoKTsKLSAgICBsb3dMYXRlbmN5T3V0cHV0ID0gaXNMb3dMYXRlbmN5
T3V0cHV0U3VwcG9ydGVkKCk7Ci0gICAgbG93TGF0ZW5jeUlucHV0ID0gaXNMb3dMYXRlbmN5SW5w
dXRTdXBwb3J0ZWQoKTsKLSAgICBwcm9BdWRpbyA9IGlzUHJvQXVkaW9TdXBwb3J0ZWQoKTsKLSAg
ICBvdXRwdXRCdWZmZXJTaXplID0gbG93TGF0ZW5jeU91dHB1dCA/IGdldExvd0xhdGVuY3lPdXRw
dXRGcmFtZXNQZXJCdWZmZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDogZ2V0TWluT3V0cHV0RnJhbWVTaXplKHNhbXBsZVJhdGUsIGNoYW5uZWxzKTsKLSAgICBp
bnB1dEJ1ZmZlclNpemUgPSBsb3dMYXRlbmN5SW5wdXQgPyBnZXRMb3dMYXRlbmN5SW5wdXRGcmFt
ZXNQZXJCdWZmZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdl
dE1pbklucHV0RnJhbWVTaXplKHNhbXBsZVJhdGUsIGNoYW5uZWxzKTsKLSAgfQotCi0gIC8vIEdl
dHMgdGhlIGN1cnJlbnQgZWFycGllY2Ugc3RhdGUuCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNFYXJw
aWVjZSgpIHsKLSAgICByZXR1cm4gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3Rl
bUZlYXR1cmUoUGFja2FnZU1hbmFnZXIuRkVBVFVSRV9URUxFUEhPTlkpOwotICB9Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGlmIGxvdy1sYXRlbmN5IGF1ZGlvIG91dHB1dCBpcyBzdXBwb3J0ZWQuCi0g
IHByaXZhdGUgYm9vbGVhbiBpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0
dXJuIGlzT3BlblNMRVNTdXBwb3J0ZWQoKQotICAgICAgICAmJiBjb250ZXh0LmdldFBhY2thZ2VN
YW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX0FVRElPX0xP
V19MQVRFTkNZKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBsb3ctbGF0ZW5jeSBhdWRp
byBpbnB1dCBpcyBzdXBwb3J0ZWQuCi0gIC8vIFRPRE8oaGVucmlrYSk6IHJlbW92ZSB0aGUgaGFy
ZGNvZGVkIGZhbHNlIHJldHVybiB2YWx1ZSB3aGVuIE9wZW5TTCBFUwotICAvLyBpbnB1dCBwZXJm
b3JtYW5jZSBoYXMgYmVlbiBldmFsdWF0ZWQgYW5kIHRlc3RlZCBtb3JlLgotICBwdWJsaWMgYm9v
bGVhbiBpc0xvd0xhdGVuY3lJbnB1dFN1cHBvcnRlZCgpIHsKLSAgICAvLyBUT0RPKGhlbnJpa2Ep
OiBpbnZlc3RpZ2F0ZSBpZiBzb21lIHNvcnQgb2YgZGV2aWNlIGxpc3QgaXMgbmVlZGVkIGhlcmUK
LSAgICAvLyBhcyB3ZWxsLiBUaGUgTkRLIGRvYyBzdGF0ZXMgdGhhdDogIkFzIG9mIEFQSSBsZXZl
bCAyMSwgbG93ZXIgbGF0ZW5jeQotICAgIC8vIGF1ZGlvIGlucHV0IGlzIHN1cHBvcnRlZCBvbiBz
ZWxlY3QgZGV2aWNlcy4gVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcwotICAgIC8vIGZlYXR1cmUs
IGZpcnN0IGNvbmZpcm0gdGhhdCBsb3dlciBsYXRlbmN5IG91dHB1dCBpcyBhdmFpbGFibGUiLgot
ICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkxvbGxpcG9wT3JIaWdoZXIoKSAm
JiBpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0ZWQoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGUgZGV2aWNlIGhhcyBwcm9mZXNzaW9uYWwgYXVkaW8gbGV2ZWwgb2YgZnVuY3Rpb25h
bGl0eQotICAvLyBhbmQgdGhlcmVmb3JlIHN1cHBvcnRzIHRoZSBsb3dlc3QgcG9zc2libGUgcm91
bmQtdHJpcCBsYXRlbmN5LgotICBwcml2YXRlIGJvb2xlYW4gaXNQcm9BdWRpb1N1cHBvcnRlZCgp
IHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGln
aGVyKCkKLSAgICAgICAgJiYgY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZl
YXR1cmUoUGFja2FnZU1hbmFnZXIuRkVBVFVSRV9BVURJT19QUk8pOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0aGUgbmF0aXZlIG91dHB1dCBzYW1wbGUgcmF0ZSBmb3IgdGhpcyBkZXZpY2UncyBvdXRw
dXQgc3RyZWFtLgotICBwcml2YXRlIGludCBnZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKCkgewot
ICAgIC8vIE92ZXJyaWRlIHRoaXMgaWYgd2UncmUgcnVubmluZyBvbiBhbiBvbGQgZW11bGF0b3Ig
aW1hZ2Ugd2hpY2ggb25seQotICAgIC8vIHN1cHBvcnRzIDgga0h6IGFuZCBkb2Vzbid0IHN1cHBv
cnQgUFJPUEVSVFlfT1VUUFVUX1NBTVBMRV9SQVRFLgotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxz
LnJ1bm5pbmdPbkVtdWxhdG9yKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJSdW5uaW5nIGVt
dWxhdG9yLCBvdmVycmlkaW5nIHNhbXBsZSByYXRlIHRvIDgga0h6LiIpOwotICAgICAgcmV0dXJu
IDgwMDA7Ci0gICAgfQotICAgIC8vIERlZmF1bHQgY2FuIGJlIG92ZXJyaWRlbiBieSBXZWJSdGNB
dWRpb1V0aWxzLnNldERlZmF1bHRTYW1wbGVSYXRlSHooKS4KLSAgICAvLyBJZiBzbywgdXNlIHRo
YXQgdmFsdWUgYW5kIHJldHVybiBoZXJlLgotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLmlzRGVm
YXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJEZWZh
dWx0IHNhbXBsZSByYXRlIGlzIG92ZXJyaWRlbiB0byAiCi0gICAgICAgICAgICAgICsgV2ViUnRj
QXVkaW9VdGlscy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgKyAiIEh6Iik7Ci0gICAgICByZXR1
cm4gV2ViUnRjQXVkaW9VdGlscy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCk7Ci0gICAgfQotICAg
IC8vIE5vIG92ZXJyaWRlcyBhdmFpbGFibGUuIERlbGl2ZXIgYmVzdCBwb3NzaWJsZSBlc3RpbWF0
ZSBiYXNlZCBvbiBkZWZhdWx0Ci0gICAgLy8gQW5kcm9pZCBBdWRpb01hbmFnZXIgQVBJcy4KLSAg
ICBmaW5hbCBpbnQgc2FtcGxlUmF0ZUh6OwotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5p
bmdPbkplbGx5QmVhbk1SMU9ySGlnaGVyKCkpIHsKLSAgICAgIHNhbXBsZVJhdGVIeiA9IGdldFNh
bXBsZVJhdGVPbkplbGx5QmVhbk1SMTBPckhpZ2hlcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICBz
YW1wbGVSYXRlSHogPSBXZWJSdGNBdWRpb1V0aWxzLmdldERlZmF1bHRTYW1wbGVSYXRlSHooKTsK
LSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIlNhbXBsZSByYXRlIGlzIHNldCB0byAiICsgc2Ft
cGxlUmF0ZUh6ICsgIiBIeiIpOwotICAgIHJldHVybiBzYW1wbGVSYXRlSHo7Ci0gIH0KLQotICBA
VGFyZ2V0QXBpKDE3KQotICBwcml2YXRlIGludCBnZXRTYW1wbGVSYXRlT25KZWxseUJlYW5NUjEw
T3JIaWdoZXIoKSB7Ci0gICAgU3RyaW5nIHNhbXBsZVJhdGVTdHJpbmcgPSBhdWRpb01hbmFnZXIu
Z2V0UHJvcGVydHkoQXVkaW9NYW5hZ2VyLlBST1BFUlRZX09VVFBVVF9TQU1QTEVfUkFURSk7Ci0g
ICAgcmV0dXJuIChzYW1wbGVSYXRlU3RyaW5nID09IG51bGwpID8gV2ViUnRjQXVkaW9VdGlscy5n
ZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBJbnRlZ2VyLnBhcnNlSW50KHNhbXBsZVJhdGVTdHJpbmcpOwotICB9Ci0KLSAgLy8g
UmV0dXJucyB0aGUgbmF0aXZlIG91dHB1dCBidWZmZXIgc2l6ZSBmb3IgbG93LWxhdGVuY3kgb3V0
cHV0IHN0cmVhbXMuCi0gIEBUYXJnZXRBcGkoMTcpCi0gIHByaXZhdGUgaW50IGdldExvd0xhdGVu
Y3lPdXRwdXRGcmFtZXNQZXJCdWZmZXIoKSB7Ci0gICAgYXNzZXJ0VHJ1ZShpc0xvd0xhdGVuY3lP
dXRwdXRTdXBwb3J0ZWQoKSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkpl
bGx5QmVhbk1SMU9ySGlnaGVyKCkpIHsKLSAgICAgIHJldHVybiBERUZBVUxUX0ZSQU1FX1BFUl9C
VUZGRVI7Ci0gICAgfQotICAgIFN0cmluZyBmcmFtZXNQZXJCdWZmZXIgPQotICAgICAgICBhdWRp
b01hbmFnZXIuZ2V0UHJvcGVydHkoQXVkaW9NYW5hZ2VyLlBST1BFUlRZX09VVFBVVF9GUkFNRVNf
UEVSX0JVRkZFUik7Ci0gICAgcmV0dXJuIGZyYW1lc1BlckJ1ZmZlciA9PSBudWxsID8gREVGQVVM
VF9GUkFNRV9QRVJfQlVGRkVSIDogSW50ZWdlci5wYXJzZUludChmcmFtZXNQZXJCdWZmZXIpOwot
ICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYW4gYXVkaW8g
ZWZmZWN0IChBRUMgb3IgTlMpLgotICAvLyBGb3VyIGNvbmRpdGlvbnMgbXVzdCBiZSBmdWxmaWxs
ZWQgaWYgZnVuY3Rpb25zIGFyZSB0byByZXR1cm4gdHJ1ZToKLSAgLy8gMSkgdGhlIHBsYXRmb3Jt
IG11c3Qgc3VwcG9ydCB0aGUgYnVpbHQtaW4gKEhXKSBlZmZlY3QsCi0gIC8vIDIpIGV4cGxpY2l0
IHVzZSAob3ZlcnJpZGUpIG9mIGEgV2ViUlRDIGJhc2VkIHZlcnNpb24gbXVzdCBub3QgYmUgc2V0
LAotICAvLyAzKSB0aGUgZGV2aWNlIG11c3Qgbm90IGJlIGJsYWNrbGlzdGVkIGZvciB1c2Ugb2Yg
dGhlIGVmZmVjdCwgYW5kCi0gIC8vIDQpIHRoZSBVVUlEIG9mIHRoZSBlZmZlY3QgbXVzdCBiZSBh
cHByb3ZlZCAoc29tZSBVVUlEcyBjYW4gYmUgZXhjbHVkZWQpLgotICBwcml2YXRlIHN0YXRpYyBi
b29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdl
YlJ0Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpOwotICB9Ci0gIHBy
aXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSB7Ci0gICAg
cmV0dXJuIFdlYlJ0Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VOb2lzZVN1cHByZXNzb3IoKTsKLSAgfQot
Ci0gIC8vIFJldHVybnMgdGhlIG1pbmltdW0gb3V0cHV0IGJ1ZmZlciBzaXplIGZvciBKYXZhIGJh
c2VkIGF1ZGlvIChBdWRpb1RyYWNrKS4KLSAgLy8gVGhpcyBzaXplIGNhbiBhbHNvIGJlIHVzZWQg
Zm9yIE9wZW5TTCBFUyBpbXBsZW1lbnRhdGlvbnMgb24gZGV2aWNlcyB0aGF0Ci0gIC8vIGxhY2tz
IHN1cHBvcnQgb2YgbG93LWxhdGVuY3kgb3V0cHV0LgotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0
TWluT3V0cHV0RnJhbWVTaXplKGludCBzYW1wbGVSYXRlSW5IeiwgaW50IG51bUNoYW5uZWxzKSB7
Ci0gICAgZmluYWwgaW50IGJ5dGVzUGVyRnJhbWUgPSBudW1DaGFubmVscyAqIChCSVRTX1BFUl9T
QU1QTEUgLyA4KTsKLSAgICBmaW5hbCBpbnQgY2hhbm5lbENvbmZpZzsKLSAgICBpZiAobnVtQ2hh
bm5lbHMgPT0gMSkgewotICAgICAgY2hhbm5lbENvbmZpZyA9IEF1ZGlvRm9ybWF0LkNIQU5ORUxf
T1VUX01PTk87Ci0gICAgfSBlbHNlIGlmIChudW1DaGFubmVscyA9PSAyKSB7Ci0gICAgICBjaGFu
bmVsQ29uZmlnID0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfU1RFUkVPOwotICAgIH0gZWxzZSB7
Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiBBdWRpb1RyYWNrLmdldE1pbkJ1
ZmZlclNpemUoCi0gICAgICAgICAgICAgICBzYW1wbGVSYXRlSW5IeiwgY2hhbm5lbENvbmZpZywg
QXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUKQotICAgICAgICAvIGJ5dGVzUGVyRnJhbWU7
Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBuYXRpdmUgaW5wdXQgYnVmZmVyIHNpemUgZm9yIGlu
cHV0IHN0cmVhbXMuCi0gIHByaXZhdGUgaW50IGdldExvd0xhdGVuY3lJbnB1dEZyYW1lc1BlckJ1
ZmZlcigpIHsKLSAgICBhc3NlcnRUcnVlKGlzTG93TGF0ZW5jeUlucHV0U3VwcG9ydGVkKCkpOwot
ICAgIHJldHVybiBnZXRMb3dMYXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCk7Ci0gIH0KLQot
ICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIGlucHV0IGJ1ZmZlciBzaXplIGZvciBKYXZhIGJhc2Vk
IGF1ZGlvIChBdWRpb1JlY29yZCkuCi0gIC8vIFRoaXMgc2l6ZSBjYW4gY2Fsc28gYmUgdXNlZCBm
b3IgT3BlblNMIEVTIGltcGxlbWVudGF0aW9ucyBvbiBkZXZpY2VzIHRoYXQKLSAgLy8gbGFja3Mg
c3VwcG9ydCBvZiBsb3ctbGF0ZW5jeSBpbnB1dC4KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldE1p
bklucHV0RnJhbWVTaXplKGludCBzYW1wbGVSYXRlSW5IeiwgaW50IG51bUNoYW5uZWxzKSB7Ci0g
ICAgZmluYWwgaW50IGJ5dGVzUGVyRnJhbWUgPSBudW1DaGFubmVscyAqIChCSVRTX1BFUl9TQU1Q
TEUgLyA4KTsKLSAgICBhc3NlcnRUcnVlKG51bUNoYW5uZWxzID09IENIQU5ORUxTKTsKLSAgICBy
ZXR1cm4gQXVkaW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgICAgICAgIHNhbXBs
ZVJhdGVJbkh6LCBBdWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8sIEF1ZGlvRm9ybWF0LkVOQ09E
SU5HX1BDTV8xNkJJVCkKLSAgICAgICAgLyBieXRlc1BlckZyYW1lOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIE9wZW5TTCBFUyBhdWRpbyBpcyBzdXBwb3J0ZWQuCi0gIHByaXZhdGUgc3Rh
dGljIGJvb2xlYW4gaXNPcGVuU0xFU1N1cHBvcnRlZCgpIHsKLSAgICAvLyBDaGVjayBmb3IgQVBJ
IGxldmVsIDkgb3IgaGlnaGVyLCB0byBjb25maXJtIHVzZSBvZiBPcGVuU0wgRVMuCi0gICAgcmV0
dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uR2luZ2VyQnJlYWRPckhpZ2hlcigpOwotICB9
Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uICB3aGVuIGFu
IGFzc2VydGlvbiBoYXMgZmFpbGVkLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUo
Ym9vbGVhbiBjb25kaXRpb24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cg
bmV3IEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAg
IH0KLSAgfQotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRl
cnMoaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscywgYm9vbGVhbiBoYXJkd2FyZUFFQywKLSAg
ICAgIGJvb2xlYW4gaGFyZHdhcmVBR0MsIGJvb2xlYW4gaGFyZHdhcmVOUywgYm9vbGVhbiBsb3dM
YXRlbmN5T3V0cHV0LCBib29sZWFuIGxvd0xhdGVuY3lJbnB1dCwKLSAgICAgIGJvb2xlYW4gcHJv
QXVkaW8sIGludCBvdXRwdXRCdWZmZXJTaXplLCBpbnQgaW5wdXRCdWZmZXJTaXplLCBsb25nIG5h
dGl2ZUF1ZGlvTWFuYWdlcik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93
ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9SZWNvcmQuamF2YQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rl
dmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9S
ZWNvcmQuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvUmVjb3JkLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwyODYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLWltcG9y
dCBvcmcud2VicnRjLlRocmVhZFV0aWxzOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRl
eHQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm1l
ZGlhLkF1ZGlvUmVjb3JkOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFSZWNvcmRlci5BdWRp
b1NvdXJjZTsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci0KLWltcG9ydCBqYXZhLmxhbmcu
U3lzdGVtOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNv
bmN1cnJlbnQuVGltZVVuaXQ7Ci0KLXB1YmxpYyBjbGFzcyBXZWJSdGNBdWRpb1JlY29yZCB7Ci0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvUmVjb3JkIjsKLQotICAvLyBE
ZWZhdWx0IGF1ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4KLSAgLy8g
R3VhcmFudGVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICAvLyBSZXF1ZXN0ZWQgc2l6
ZSBvZiBlYWNoIHJlY29yZGVkIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY2xpZW50LgotICBwcml2
YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVMgPSAxMDsKLQotICAv
LyBBdmVyYWdlIG51bWJlciBvZiBjYWxsYmFja3MgcGVyIHNlY29uZC4KLSAgcHJpdmF0ZSBzdGF0
aWMgZmluYWwgaW50IEJVRkZFUlNfUEVSX1NFQ09ORCA9IDEwMDAgLyBDQUxMQkFDS19CVUZGRVJf
U0laRV9NUzsKLQotICAvLyBXZSBhc2sgZm9yIGEgbmF0aXZlIGJ1ZmZlciBzaXplIG9mIEJVRkZF
Ul9TSVpFX0ZBQ1RPUiAqIChtaW5pbXVtIHJlcXVpcmVkCi0gIC8vIGJ1ZmZlciBzaXplKS4gVGhl
IGV4dHJhIHNwYWNlIGlzIGFsbG9jYXRlZCB0byBndWFyZCBhZ2FpbnN0IGdsaXRjaGVzIHVuZGVy
Ci0gIC8vIGhpZ2ggbG9hZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVRkZFUl9TSVpF
X0ZBQ1RPUiA9IDI7Ci0KLSAgLy8gVGhlIEF1ZGlvUmVjb3JkSmF2YVRocmVhZCBpcyBhbGxvd2Vk
IHRvIHdhaXQgZm9yIHN1Y2Nlc3NmdWwgY2FsbCB0byBqb2luKCkKLSAgLy8gYnV0IHRoZSB3YWl0
IHRpbWVzIG91dCBhZnRoZXIgdGhpcyBhbW91bnQgb2YgdGltZS4KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgbG9uZyBBVURJT19SRUNPUkRfVEhSRUFEX0pPSU5fVElNRU9VVF9NUyA9IDIwMDA7Ci0K
LSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkOwotICBwcml2YXRlIGZpbmFs
IENvbnRleHQgY29udGV4dDsKLQotICBwcml2YXRlIFdlYlJ0Y0F1ZGlvRWZmZWN0cyBlZmZlY3Rz
ID0gbnVsbDsKLQotICBwcml2YXRlIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlcjsKLQotICBwcml2YXRl
IEF1ZGlvUmVjb3JkIGF1ZGlvUmVjb3JkID0gbnVsbDsKLSAgcHJpdmF0ZSBBdWRpb1JlY29yZFRo
cmVhZCBhdWRpb1RocmVhZCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9v
bGVhbiBtaWNyb3Bob25lTXV0ZSA9IGZhbHNlOwotICBwcml2YXRlIGJ5dGVbXSBlbXB0eUJ5dGVz
OwotCi0gIC8qKgotICAgKiBBdWRpbyB0aHJlYWQgd2hpY2gga2VlcHMgY2FsbGluZyBCeXRlQnVm
ZmVyLnJlYWQoKSB3YWl0aW5nIGZvciBhdWRpbwotICAgKiB0byBiZSByZWNvcmRlZC4gRmVlZHMg
cmVjb3JkZWQgZGF0YSB0byB0aGUgbmF0aXZlIGNvdW50ZXJwYXJ0IGFzIGEKLSAgICogcGVyaW9k
aWMgc2VxdWVuY2Ugb2YgY2FsbGJhY2tzIHVzaW5nIERhdGFJc1JlY29yZGVkKCkuCi0gICAqIFRo
aXMgdGhyZWFkIHVzZXMgYSBQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8gcHJp
b3JpdHkuCi0gICAqLwotICBwcml2YXRlIGNsYXNzIEF1ZGlvUmVjb3JkVGhyZWFkIGV4dGVuZHMg
VGhyZWFkIHsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4ga2VlcEFsaXZlID0gdHJ1ZTsK
LQotICAgIHB1YmxpYyBBdWRpb1JlY29yZFRocmVhZChTdHJpbmcgbmFtZSkgewotICAgICAgc3Vw
ZXIobmFtZSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkg
ewotICAgICAgUHJvY2Vzcy5zZXRUaHJlYWRQcmlvcml0eShQcm9jZXNzLlRIUkVBRF9QUklPUklU
WV9VUkdFTlRfQVVESU8pOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvUmVjb3JkVGhyZWFk
IiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICAgIGFzc2VydFRydWUo
YXVkaW9SZWNvcmQuZ2V0UmVjb3JkaW5nU3RhdGUoKSA9PSBBdWRpb1JlY29yZC5SRUNPUkRTVEFU
RV9SRUNPUkRJTkcpOwotCi0gICAgICBsb25nIGxhc3RUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7
Ci0gICAgICB3aGlsZSAoa2VlcEFsaXZlKSB7Ci0gICAgICAgIGludCBieXRlc1JlYWQgPSBhdWRp
b1JlY29yZC5yZWFkKGJ5dGVCdWZmZXIsIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgICAg
IGlmIChieXRlc1JlYWQgPT0gYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgaWYg
KG1pY3JvcGhvbmVNdXRlKSB7Ci0gICAgICAgICAgICBieXRlQnVmZmVyLmNsZWFyKCk7Ci0gICAg
ICAgICAgICBieXRlQnVmZmVyLnB1dChlbXB0eUJ5dGVzKTsKLSAgICAgICAgICB9Ci0gICAgICAg
ICAgbmF0aXZlRGF0YUlzUmVjb3JkZWQoYnl0ZXNSZWFkLCBuYXRpdmVBdWRpb1JlY29yZCk7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLnJl
YWQgZmFpbGVkOiAiICsgYnl0ZXNSZWFkKTsKLSAgICAgICAgICBpZiAoYnl0ZXNSZWFkID09IEF1
ZGlvUmVjb3JkLkVSUk9SX0lOVkFMSURfT1BFUkFUSU9OKSB7Ci0gICAgICAgICAgICBrZWVwQWxp
dmUgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHKSB7
Ci0gICAgICAgICAgbG9uZyBub3dUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAg
bG9uZyBkdXJhdGlvbkluTXMgPSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcygobm93VGlt
ZSAtIGxhc3RUaW1lKSk7Ci0gICAgICAgICAgbGFzdFRpbWUgPSBub3dUaW1lOwotICAgICAgICAg
IExvZ2dpbmcuZChUQUcsICJieXRlc1JlYWRbIiArIGR1cmF0aW9uSW5NcyArICJdICIgKyBieXRl
c1JlYWQpOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmIChh
dWRpb1JlY29yZCAhPSBudWxsKSB7Ci0gICAgICAgICAgYXVkaW9SZWNvcmQuc3RvcCgpOwotICAg
ICAgICB9Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAg
ICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQuc3RvcCBmYWlsZWQ6ICIgKyBlLmdldE1lc3Nh
Z2UoKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3RvcHMgdGhlIGlubmVyIHRocmVhZCBs
b29wIGFuZCBhbHNvIGNhbGxzIEF1ZGlvUmVjb3JkLnN0b3AoKS4KLSAgICAvLyBEb2VzIG5vdCBi
bG9jayB0aGUgY2FsbGluZyB0aHJlYWQuCi0gICAgcHVibGljIHZvaWQgc3RvcFRocmVhZCgpIHsK
LSAgICAgIExvZ2dpbmcuZChUQUcsICJzdG9wVGhyZWFkIik7Ci0gICAgICBrZWVwQWxpdmUgPSBm
YWxzZTsKLSAgICB9Ci0gIH0KLQotICBXZWJSdGNBdWRpb1JlY29yZChDb250ZXh0IGNvbnRleHQs
IGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBX
ZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgdGhpcy5jb250ZXh0ID0gY29u
dGV4dDsKLSAgICB0aGlzLm5hdGl2ZUF1ZGlvUmVjb3JkID0gbmF0aXZlQXVkaW9SZWNvcmQ7Ci0g
ICAgaWYgKERFQlVHKSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0RldmljZUluZm8oVEFH
KTsKLSAgICB9Ci0gICAgZWZmZWN0cyA9IFdlYlJ0Y0F1ZGlvRWZmZWN0cy5jcmVhdGUoKTsKLSAg
fQotCi0gIHByaXZhdGUgYm9vbGVhbiBlbmFibGVCdWlsdEluQUVDKGJvb2xlYW4gZW5hYmxlKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgImVuYWJsZUJ1aWx0SW5BRUMoIiArIGVuYWJsZSArICcpJyk7
Ci0gICAgaWYgKGVmZmVjdHMgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkJ1aWx0
LWluIEFFQyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGVmZmVjdHMuc2V0QUVDKGVuYWJsZSk7Ci0gIH0K
LQotICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlQnVpbHRJbk5TKGJvb2xlYW4gZW5hYmxlKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgImVuYWJsZUJ1aWx0SW5OUygiICsgZW5hYmxlICsgJyknKTsKLSAg
ICBpZiAoZWZmZWN0cyA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQnVpbHQtaW4g
TlMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiBlZmZlY3RzLnNldE5TKGVuYWJsZSk7Ci0gIH0KLQotICBw
cml2YXRlIGludCBpbml0UmVjb3JkaW5nKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsK
LSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdFJlY29yZGluZyhzYW1wbGVSYXRlPSIgKyBzYW1wbGVS
YXRlICsgIiwgY2hhbm5lbHM9IiArIGNoYW5uZWxzICsgIikiKTsKLSAgICBpZiAoIVdlYlJ0Y0F1
ZGlvVXRpbHMuaGFzUGVybWlzc2lvbihjb250ZXh0LCBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Np
b24uUkVDT1JEX0FVRElPKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlJFQ09SRF9BVURJTyBw
ZXJtaXNzaW9uIGlzIG1pc3NpbmciKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYg
KGF1ZGlvUmVjb3JkICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJJbml0UmVjb3Jk
aW5nKCkgY2FsbGVkIHR3aWNlIHdpdGhvdXQgU3RvcFJlY29yZGluZygpIik7Ci0gICAgICByZXR1
cm4gLTE7Ci0gICAgfQotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gY2hhbm5lbHMgKiAo
QklUU19QRVJfU0FNUExFIC8gOCk7Ci0gICAgZmluYWwgaW50IGZyYW1lc1BlckJ1ZmZlciA9IHNh
bXBsZVJhdGUgLyBCVUZGRVJTX1BFUl9TRUNPTkQ7Ci0gICAgYnl0ZUJ1ZmZlciA9IEJ5dGVCdWZm
ZXIuYWxsb2NhdGVEaXJlY3QoYnl0ZXNQZXJGcmFtZSAqIGZyYW1lc1BlckJ1ZmZlcik7Ci0gICAg
TG9nZ2luZy5kKFRBRywgImJ5dGVCdWZmZXIuY2FwYWNpdHk6ICIgKyBieXRlQnVmZmVyLmNhcGFj
aXR5KCkpOwotICAgIGVtcHR5Qnl0ZXMgPSBuZXcgYnl0ZVtieXRlQnVmZmVyLmNhcGFjaXR5KCld
OwotICAgIC8vIFJhdGhlciB0aGFuIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXIgd2l0aCBldmVyeSBj
YWxsYmFjayAocmVxdWlyaW5nCi0gICAgLy8gdGhlIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBHZXRE
aXJlY3RCdWZmZXJBZGRyZXNzKSB3ZSBzaW1wbHkgaGF2ZSB0aGUKLSAgICAvLyB0aGUgbmF0aXZl
IGNsYXNzIGNhY2hlIHRoZSBhZGRyZXNzIHRvIHRoZSBtZW1vcnkgb25jZS4KLSAgICBuYXRpdmVD
YWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoYnl0ZUJ1ZmZlciwgbmF0aXZlQXVkaW9SZWNvcmQpOwot
Ci0gICAgLy8gR2V0IHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVpcmVkIGZvciB0aGUgc3Vj
Y2Vzc2Z1bCBjcmVhdGlvbiBvZgotICAgIC8vIGFuIEF1ZGlvUmVjb3JkIG9iamVjdCwgaW4gYnl0
ZSB1bml0cy4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBzaXplIGRvZXNuJ3QgZ3VhcmFudGVlIGEg
c21vb3RoIHJlY29yZGluZyB1bmRlciBsb2FkLgotICAgIGludCBtaW5CdWZmZXJTaXplID0gQXVk
aW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgc2FtcGxlUmF0ZSwgQXVkaW9Gb3Jt
YXQuQ0hBTk5FTF9JTl9NT05PLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpOwotICAg
IGlmIChtaW5CdWZmZXJTaXplID09IEF1ZGlvUmVjb3JkLkVSUk9SIHx8IG1pbkJ1ZmZlclNpemUg
PT0gQXVkaW9SZWNvcmQuRVJST1JfQkFEX1ZBTFVFKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAi
QXVkaW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZSBmYWlsZWQ6ICIgKyBtaW5CdWZmZXJTaXplKTsK
LSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvUmVjb3Jk
LmdldE1pbkJ1ZmZlclNpemU6ICIgKyBtaW5CdWZmZXJTaXplKTsKLQotICAgIC8vIFVzZSBhIGxh
cmdlciBidWZmZXIgc2l6ZSB0aGFuIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcg
dGhlCi0gICAgLy8gQXVkaW9SZWNvcmQgaW5zdGFuY2UgdG8gZW5zdXJlIHNtb290aCByZWNvcmRp
bmcgdW5kZXIgbG9hZC4gSXQgaGFzIGJlZW4KLSAgICAvLyB2ZXJpZmllZCB0aGF0IGl0IGRvZXMg
bm90IGluY3JlYXNlIHRoZSBhY3R1YWwgcmVjb3JkaW5nIGxhdGVuY3kuCi0gICAgaW50IGJ1ZmZl
clNpemVJbkJ5dGVzID0gTWF0aC5tYXgoQlVGRkVSX1NJWkVfRkFDVE9SICogbWluQnVmZmVyU2l6
ZSwgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiYnVmZmVyU2l6
ZUluQnl0ZXM6ICIgKyBidWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgdHJ5IHsKLSAgICAgIGF1ZGlv
UmVjb3JkID0gbmV3IEF1ZGlvUmVjb3JkKEF1ZGlvU291cmNlLlZPSUNFX0NPTU1VTklDQVRJT04s
IHNhbXBsZVJhdGUsCi0gICAgICAgICAgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9NT05PLCBBdWRp
b0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICB9IGNh
dGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
ZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoYXVkaW9S
ZWNvcmQgPT0gbnVsbCB8fCBhdWRpb1JlY29yZC5nZXRTdGF0ZSgpICE9IEF1ZGlvUmVjb3JkLlNU
QVRFX0lOSVRJQUxJWkVEKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIGNyZWF0
ZSBhIG5ldyBBdWRpb1JlY29yZCBpbnN0YW5jZSIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgICBpZiAoZWZmZWN0cyAhPSBudWxsKSB7Ci0gICAgICBlZmZlY3RzLmVuYWJsZShhdWRpb1Jl
Y29yZC5nZXRBdWRpb1Nlc3Npb25JZCgpKTsKLSAgICB9Ci0gICAgLy8gVmVyaWZ5IHRoYXQgYWxs
IGF1ZGlvIHBhcmFtZXRlcnMgYXJlIHZhbGlkIGFuZCBjb3JyZWN0LgotICAgIGlmICghYXJlUGFy
YW1ldGVyc1ZhbGlkKHNhbXBsZVJhdGUsIGNoYW5uZWxzKSkgewotICAgICAgTG9nZ2luZy5lKFRB
RywgIkF0IGxlYXN0IG9uZSBhdWRpbyByZWNvcmQgcGFyYW1ldGVyIGlzIGludmFsaWQuIik7Ci0g
ICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGxvZ01haW5QYXJhbWV0ZXJzKCk7Ci0gICAgbG9n
TWFpblBhcmFtZXRlcnNFeHRlbmRlZCgpOwotICAgIHJldHVybiBmcmFtZXNQZXJCdWZmZXI7Ci0g
IH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRSZWNvcmRpbmcoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgInN0YXJ0UmVjb3JkaW5nIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1JlY29yZCAhPSBu
dWxsKTsKLSAgICBhc3NlcnRUcnVlKGF1ZGlvVGhyZWFkID09IG51bGwpOwotICAgIHRyeSB7Ci0g
ICAgICBhdWRpb1JlY29yZC5zdGFydFJlY29yZGluZygpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxT
dGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQuc3Rh
cnRSZWNvcmRpbmcgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBpZiAoYXVkaW9SZWNvcmQuZ2V0UmVjb3JkaW5nU3RhdGUoKSAhPSBB
dWRpb1JlY29yZC5SRUNPUkRTVEFURV9SRUNPUkRJTkcpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcs
ICJBdWRpb1JlY29yZC5zdGFydFJlY29yZGluZyBmYWlsZWQiKTsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgYXVkaW9UaHJlYWQgPSBuZXcgQXVkaW9SZWNvcmRUaHJlYWQoIkF1ZGlv
UmVjb3JkSmF2YVRocmVhZCIpOwotICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RvcFJlY29yZGluZygpIHsKLSAgICBM
b2dnaW5nLmQoVEFHLCAic3RvcFJlY29yZGluZyIpOwotICAgIGFzc2VydFRydWUoYXVkaW9UaHJl
YWQgIT0gbnVsbCk7Ci0gICAgYXVkaW9UaHJlYWQuc3RvcFRocmVhZCgpOwotICAgIGlmICghVGhy
ZWFkVXRpbHMuam9pblVuaW50ZXJydXB0aWJseShhdWRpb1RocmVhZCwgQVVESU9fUkVDT1JEX1RI
UkVBRF9KT0lOX1RJTUVPVVRfTVMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiSm9pbiBvZiBB
dWRpb1JlY29yZEphdmFUaHJlYWQgdGltZWQgb3V0Iik7Ci0gICAgfQotICAgIGF1ZGlvVGhyZWFk
ID0gbnVsbDsKLSAgICBpZiAoZWZmZWN0cyAhPSBudWxsKSB7Ci0gICAgICBlZmZlY3RzLnJlbGVh
c2UoKTsKLSAgICB9Ci0gICAgYXVkaW9SZWNvcmQucmVsZWFzZSgpOwotICAgIGF1ZGlvUmVjb3Jk
ID0gbnVsbDsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFZlcmlmaWVzIHRoYXQgdGhl
IGF1ZGlvIHJlY29yZCBpcyB1c2luZyBjb3JyZWN0IHBhcmFtZXRlcnMsIGkuZS4sIHRoYXQgdGhl
Ci0gIC8vIGNyZWF0ZWQgaW5zdGFuY2UgdXNlcyB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFza2Vk
IGZvci4KLSAgcHJpdmF0ZSBib29sZWFuIGFyZVBhcmFtZXRlcnNWYWxpZChpbnQgc2FtcGxlUmF0
ZSwgaW50IGNoYW5uZWxzKSB7Ci0gICAgcmV0dXJuIChhdWRpb1JlY29yZC5nZXRBdWRpb0Zvcm1h
dCgpID09IEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVAotICAgICAgICAmJiBhdWRpb1Jl
Y29yZC5nZXRDaGFubmVsQ29uZmlndXJhdGlvbigpID09IEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5f
TU9OTwotICAgICAgICAmJiBhdWRpb1JlY29yZC5nZXRBdWRpb1NvdXJjZSgpID09IEF1ZGlvU291
cmNlLlZPSUNFX0NPTU1VTklDQVRJT04KLSAgICAgICAgJiYgYXVkaW9SZWNvcmQuZ2V0U2FtcGxl
UmF0ZSgpID09IHNhbXBsZVJhdGUgJiYgYXVkaW9SZWNvcmQuZ2V0Q2hhbm5lbENvdW50KCkgPT0g
Y2hhbm5lbHMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1JlY29yZDogIgotICAgICAgICAgICAgKyAic2Vzc2lv
biBJRDogIiArIGF1ZGlvUmVjb3JkLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAiCi0gICAgICAg
ICAgICArICJjaGFubmVsczogIiArIGF1ZGlvUmVjb3JkLmdldENoYW5uZWxDb3VudCgpICsgIiwg
IgotICAgICAgICAgICAgKyAic2FtcGxlIHJhdGU6ICIgKyBhdWRpb1JlY29yZC5nZXRTYW1wbGVS
YXRlKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQo
KSB7Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTWFyc2htYWxsb3dPckhpZ2hl
cigpKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQ6ICIKLSAgICAgICAgICAg
ICAgLy8gVGhlIGZyYW1lIGNvdW50IG9mIHRoZSBuYXRpdmUgQXVkaW9SZWNvcmQgYnVmZmVyLgot
ICAgICAgICAgICAgICArICJidWZmZXIgc2l6ZSBpbiBmcmFtZXM6ICIgKyBhdWRpb1JlY29yZC5n
ZXRCdWZmZXJTaXplSW5GcmFtZXMoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhv
ZCB3aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uICB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVk
LgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25kaXRpb24pIHsK
LSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJF
eHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUg
bmF0aXZlIHZvaWQgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKEJ5dGVCdWZmZXIgYnl0
ZUJ1ZmZlciwgbG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9p
ZCBuYXRpdmVEYXRhSXNSZWNvcmRlZChpbnQgYnl0ZXMsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQp
OwotCi0gIC8vIFNldHMgYWxsIHJlY29yZGVkIHNhbXBsZXMgdG8gemVybyBpZiB8bXV0ZXwgaXMg
dHJ1ZSwgaS5lLiwgZW5zdXJlcyB0aGF0Ci0gIC8vIHRoZSBtaWNyb3Bob25lIGlzIG11dGVkLgot
ICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0TWljcm9waG9uZU11dGUoYm9vbGVhbiBtdXRlKSB7Ci0g
ICAgTG9nZ2luZy53KFRBRywgInNldE1pY3JvcGhvbmVNdXRlKCIgKyBtdXRlICsgIikiKTsKLSAg
ICBtaWNyb3Bob25lTXV0ZSA9IG11dGU7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1RyYWNrLmphdmEKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dl
YlJ0Y0F1ZGlvVHJhY2suamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVHJhY2suamF2YQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDM0NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBU
aGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAg
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5z
ZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qg
b2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3Bl
cnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAg
QWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhl
IEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFj
a2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5n
OwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRp
YS5BdWRpb0Zvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLkF1ZGlvVHJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwot
Ci1pbXBvcnQgamF2YS5sYW5nLlRocmVhZDsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwot
Ci1wdWJsaWMgY2xhc3MgV2ViUnRjQXVkaW9UcmFjayB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VEFHID0gIldlYlJ0Y0F1ZGlvVHJhY2siOwotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0YSBmb3Jt
YXQgaXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBv
cnRlZCBieSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFNfUEVS
X1NBTVBMRSA9IDE2OwotCi0gIC8vIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggcmVjb3JkZWQgYnVm
ZmVyIHByb3ZpZGVkIHRvIHRoZSBjbGllbnQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBD
QUxMQkFDS19CVUZGRVJfU0laRV9NUyA9IDEwOwotCi0gIC8vIEF2ZXJhZ2UgbnVtYmVyIG9mIGNh
bGxiYWNrcyBwZXIgc2Vjb25kLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSU19Q
RVJfU0VDT05EID0gMTAwMCAvIENBTExCQUNLX0JVRkZFUl9TSVpFX01TOwotCi0gIHByaXZhdGUg
ZmluYWwgQ29udGV4dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlQXVkaW9U
cmFjazsKLSAgcHJpdmF0ZSBmaW5hbCBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotCi0gIHBy
aXZhdGUgQnl0ZUJ1ZmZlciBieXRlQnVmZmVyOwotCi0gIHByaXZhdGUgQXVkaW9UcmFjayBhdWRp
b1RyYWNrID0gbnVsbDsKLSAgcHJpdmF0ZSBBdWRpb1RyYWNrVGhyZWFkIGF1ZGlvVGhyZWFkID0g
bnVsbDsKLQotICAvLyBTYW1wbGVzIHRvIGJlIHBsYXllZCBhcmUgcmVwbGFjZWQgYnkgemVyb3Mg
aWYgfHNwZWFrZXJNdXRlfCBpcyBzZXQgdG8gdHJ1ZS4KLSAgLy8gQ2FuIGJlIHVzZWQgdG8gZW5z
dXJlIHRoYXQgdGhlIHNwZWFrZXIgaXMgZnVsbHkgbXV0ZWQuCi0gIHByaXZhdGUgc3RhdGljIHZv
bGF0aWxlIGJvb2xlYW4gc3BlYWtlck11dGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBieXRlW10gZW1w
dHlCeXRlczsKLQotICAvKioKLSAgICogQXVkaW8gdGhyZWFkIHdoaWNoIGtlZXBzIGNhbGxpbmcg
QXVkaW9UcmFjay53cml0ZSgpIHRvIHN0cmVhbSBhdWRpby4KLSAgICogRGF0YSBpcyBwZXJpb2Rp
Y2FsbHkgYWNxdWlyZWQgZnJvbSB0aGUgbmF0aXZlIFdlYlJUQyBsYXllciB1c2luZyB0aGUKLSAg
ICogbmF0aXZlR2V0UGxheW91dERhdGEgY2FsbGJhY2sgZnVuY3Rpb24uCi0gICAqIFRoaXMgdGhy
ZWFkIHVzZXMgYSBQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8gcHJpb3JpdHku
Ci0gICAqLwotICBwcml2YXRlIGNsYXNzIEF1ZGlvVHJhY2tUaHJlYWQgZXh0ZW5kcyBUaHJlYWQg
ewotICAgIHByaXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBrZWVwQWxpdmUgPSB0cnVlOwotCi0gICAg
cHVibGljIEF1ZGlvVHJhY2tUaHJlYWQoU3RyaW5nIG5hbWUpIHsKLSAgICAgIHN1cGVyKG5hbWUp
OwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAg
IFByb2Nlc3Muc2V0VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJHRU5U
X0FVRElPKTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrVGhyZWFkIiArIFdlYlJ0
Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgLy8g
SW4gTU9ERV9TVFJFQU0gbW9kZSB3ZSBjYW4gb3B0aW9uYWxseSBwcmltZSB0aGUgb3V0cHV0IGJ1
ZmZlciBieQotICAgICAgICAvLyB3cml0aW5nIHVwIHRvIGJ1ZmZlclNpemVJbkJ5dGVzIChmcm9t
IGNvbnN0cnVjdG9yKSBiZWZvcmUgc3RhcnRpbmcuCi0gICAgICAgIC8vIFRoaXMgcHJpbWluZyB3
aWxsIGF2b2lkIGFuIGltbWVkaWF0ZSB1bmRlcnJ1biwgYnV0IGlzIG5vdCByZXF1aXJlZC4KLSAg
ICAgICAgLy8gVE9ETyhoZW5yaWthKTogaW5pdGlhbCB0ZXN0cyBoYXZlIHNob3duIHRoYXQgcHJp
bWluZyBpcyBub3QgcmVxdWlyZWQuCi0gICAgICAgIGF1ZGlvVHJhY2sucGxheSgpOwotICAgICAg
ICBhc3NlcnRUcnVlKGF1ZGlvVHJhY2suZ2V0UGxheVN0YXRlKCkgPT0gQXVkaW9UcmFjay5QTEFZ
U1RBVEVfUExBWUlORyk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkg
ewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5wbGF5IGZhaWxlZDogIiArIGUu
Z2V0TWVzc2FnZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBGaXhl
ZCBzaXplIGluIGJ5dGVzIG9mIGVhY2ggMTBtcyBibG9jayBvZiBhdWRpbyBkYXRhIHRoYXQgd2Ug
YXNrIGZvcgotICAgICAgLy8gdXNpbmcgY2FsbGJhY2tzIHRvIHRoZSBuYXRpdmUgV2ViUlRDIGNs
aWVudC4KLSAgICAgIGZpbmFsIGludCBzaXplSW5CeXRlcyA9IGJ5dGVCdWZmZXIuY2FwYWNpdHko
KTsKLQotICAgICAgd2hpbGUgKGtlZXBBbGl2ZSkgewotICAgICAgICAvLyBHZXQgMTBtcyBvZiBQ
Q00gZGF0YSBmcm9tIHRoZSBuYXRpdmUgV2ViUlRDIGNsaWVudC4gQXVkaW8gZGF0YSBpcwotICAg
ICAgICAvLyB3cml0dGVuIGludG8gdGhlIGNvbW1vbiBCeXRlQnVmZmVyIHVzaW5nIHRoZSBhZGRy
ZXNzIHRoYXQgd2FzCi0gICAgICAgIC8vIGNhY2hlZCBhdCBjb25zdHJ1Y3Rpb24uCi0gICAgICAg
IG5hdGl2ZUdldFBsYXlvdXREYXRhKHNpemVJbkJ5dGVzLCBuYXRpdmVBdWRpb1RyYWNrKTsKLSAg
ICAgICAgLy8gV3JpdGUgZGF0YSB1bnRpbCBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRo
ZSBhdWRpbyBzaW5rLgotICAgICAgICAvLyBVcG9uIHJldHVybiwgdGhlIGJ1ZmZlciBwb3NpdGlv
biB3aWxsIGhhdmUgYmVlbiBhZHZhbmNlZCB0byByZWZsZWN0Ci0gICAgICAgIC8vIHRoZSBhbW91
bnQgb2YgZGF0YSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgQXVkaW9UcmFj
ay4KLSAgICAgICAgYXNzZXJ0VHJ1ZShzaXplSW5CeXRlcyA8PSBieXRlQnVmZmVyLnJlbWFpbmlu
ZygpKTsKLSAgICAgICAgaWYgKHNwZWFrZXJNdXRlKSB7Ci0gICAgICAgICAgYnl0ZUJ1ZmZlci5j
bGVhcigpOwotICAgICAgICAgIGJ5dGVCdWZmZXIucHV0KGVtcHR5Qnl0ZXMpOwotICAgICAgICAg
IGJ5dGVCdWZmZXIucG9zaXRpb24oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJ5dGVzV3Jp
dHRlbiA9IDA7Ci0gICAgICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkxvbGxpcG9w
T3JIaWdoZXIoKSkgewotICAgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlT25Mb2xsaXBvcChh
dWRpb1RyYWNrLCBieXRlQnVmZmVyLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgYnl0ZXNXcml0dGVuID0gd3JpdGVQcmVMb2xsaXBvcChhdWRpb1RyYWNrLCBieXRl
QnVmZmVyLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRl
biAhPSBzaXplSW5CeXRlcykgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1RyYWNr
LndyaXRlIGZhaWxlZDogIiArIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgICAgaWYgKGJ5dGVzV3Jp
dHRlbiA9PSBBdWRpb1RyYWNrLkVSUk9SX0lOVkFMSURfT1BFUkFUSU9OKSB7Ci0gICAgICAgICAg
ICBrZWVwQWxpdmUgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
VGhlIGJ5dGUgYnVmZmVyIG11c3QgYmUgcmV3aW5kZWQgc2luY2UgYnl0ZUJ1ZmZlci5wb3NpdGlv
bigpIGlzCi0gICAgICAgIC8vIGluY3JlYXNlZCBhdCBlYWNoIGNhbGwgdG8gQXVkaW9UcmFjay53
cml0ZSgpLiBJZiB3ZSBkb24ndCBkbyB0aGlzLAotICAgICAgICAvLyBuZXh0IGNhbGwgdG8gQXVk
aW9UcmFjay53cml0ZSgpIHdpbGwgZmFpbC4KLSAgICAgICAgYnl0ZUJ1ZmZlci5yZXdpbmQoKTsK
LQotICAgICAgICAvLyBUT0RPKGhlbnJpa2EpOiBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBk
ZWxheSBlc3RpbWF0ZSBoZXJlIGJ5Ci0gICAgICAgIC8vIGNvdW50aW5nIG51bWJlciBvZiB3cml0
dGVuIGZyYW1lcyBhbmQgc3VidHJhY3RpbmcgdGhlIHJlc3VsdCBmcm9tCi0gICAgICAgIC8vIGF1
ZGlvVHJhY2suZ2V0UGxheWJhY2tIZWFkUG9zaXRpb24oKS4KLSAgICAgIH0KLQotICAgICAgdHJ5
IHsKLSAgICAgICAgYXVkaW9UcmFjay5zdG9wKCk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3Rh
dGVFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5zdG9w
IGZhaWxlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICAgIGFzc2VydFRydWUo
YXVkaW9UcmFjay5nZXRQbGF5U3RhdGUoKSA9PSBBdWRpb1RyYWNrLlBMQVlTVEFURV9TVE9QUEVE
KTsKLSAgICAgIGF1ZGlvVHJhY2suZmx1c2goKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCB3
cml0ZU9uTG9sbGlwb3AoQXVkaW9UcmFjayBhdWRpb1RyYWNrLCBCeXRlQnVmZmVyIGJ5dGVCdWZm
ZXIsIGludCBzaXplSW5CeXRlcykgewotICAgICAgcmV0dXJuIGF1ZGlvVHJhY2sud3JpdGUoYnl0
ZUJ1ZmZlciwgc2l6ZUluQnl0ZXMsIEF1ZGlvVHJhY2suV1JJVEVfQkxPQ0tJTkcpOwotICAgIH0K
LQotICAgIHByaXZhdGUgaW50IHdyaXRlUHJlTG9sbGlwb3AoQXVkaW9UcmFjayBhdWRpb1RyYWNr
LCBCeXRlQnVmZmVyIGJ5dGVCdWZmZXIsIGludCBzaXplSW5CeXRlcykgewotICAgICAgcmV0dXJu
IGF1ZGlvVHJhY2sud3JpdGUoYnl0ZUJ1ZmZlci5hcnJheSgpLCBieXRlQnVmZmVyLmFycmF5T2Zm
c2V0KCksIHNpemVJbkJ5dGVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBqb2luVGhyZWFk
KCkgewotICAgICAga2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgICB3aGlsZSAoaXNBbGl2ZSgpKSB7
Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgam9pbigpOwotICAgICAgICB9IGNhdGNoIChJbnRl
cnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgLy8gSWdub3JlLgotICAgICAgICB9Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgV2ViUnRjQXVkaW9UcmFjayhDb250ZXh0IGNvbnRleHQs
IGxvbmcgbmF0aXZlQXVkaW9UcmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdl
YlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250
ZXh0OwotICAgIHRoaXMubmF0aXZlQXVkaW9UcmFjayA9IG5hdGl2ZUF1ZGlvVHJhY2s7Ci0gICAg
YXVkaW9NYW5hZ2VyID0gKEF1ZGlvTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENv
bnRleHQuQVVESU9fU0VSVklDRSk7Ci0gICAgaWYgKERFQlVHKSB7Ci0gICAgICBXZWJSdGNBdWRp
b1V0aWxzLmxvZ0RldmljZUluZm8oVEFHKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xl
YW4gaW5pdFBsYXlvdXQoaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIExvZ2dp
bmcuZChUQUcsICJpbml0UGxheW91dChzYW1wbGVSYXRlPSIgKyBzYW1wbGVSYXRlICsgIiwgY2hh
bm5lbHM9IiArIGNoYW5uZWxzICsgIikiKTsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJGcmFtZSA9
IGNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGJ5dGVCdWZmZXIgPSBieXRl
QnVmZmVyLmFsbG9jYXRlRGlyZWN0KGJ5dGVzUGVyRnJhbWUgKiAoc2FtcGxlUmF0ZSAvIEJVRkZF
UlNfUEVSX1NFQ09ORCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJieXRlQnVmZmVyLmNhcGFjaXR5
OiAiICsgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBlbXB0eUJ5dGVzID0gbmV3IGJ5dGVb
Ynl0ZUJ1ZmZlci5jYXBhY2l0eSgpXTsKLSAgICAvLyBSYXRoZXIgdGhhbiBwYXNzaW5nIHRoZSBC
eXRlQnVmZmVyIHdpdGggZXZlcnkgY2FsbGJhY2sgKHJlcXVpcmluZwotICAgIC8vIHRoZSBwb3Rl
bnRpYWxseSBleHBlbnNpdmUgR2V0RGlyZWN0QnVmZmVyQWRkcmVzcykgd2Ugc2ltcGx5IGhhdmUg
dGhlCi0gICAgLy8gdGhlIG5hdGl2ZSBjbGFzcyBjYWNoZSB0aGUgYWRkcmVzcyB0byB0aGUgbWVt
b3J5IG9uY2UuCi0gICAgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKGJ5dGVCdWZmZXIs
IG5hdGl2ZUF1ZGlvVHJhY2spOwotCi0gICAgLy8gR2V0IHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXpl
IHJlcXVpcmVkIGZvciB0aGUgc3VjY2Vzc2Z1bCBjcmVhdGlvbiBvZiBhbgotICAgIC8vIEF1ZGlv
VHJhY2sgb2JqZWN0IHRvIGJlIGNyZWF0ZWQgaW4gdGhlIE1PREVfU1RSRUFNIG1vZGUuCi0gICAg
Ly8gTm90ZSB0aGF0IHRoaXMgc2l6ZSBkb2Vzbid0IGd1YXJhbnRlZSBhIHNtb290aCBwbGF5YmFj
ayB1bmRlciBsb2FkLgotICAgIC8vIFRPRE8oaGVucmlrYSk6IHNob3VsZCB3ZSBleHRlbmQgdGhl
IGJ1ZmZlciBzaXplIHRvIGF2b2lkIGdsaXRjaGVzPwotICAgIGZpbmFsIGludCBtaW5CdWZmZXJT
aXplSW5CeXRlcyA9IEF1ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgc2FtcGxl
UmF0ZSwgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdf
UENNXzE2QklUKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJT
aXplOiAiICsgbWluQnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIC8vIEZvciB0aGUgc3RyZWFtaW5n
IG1vZGUsIGRhdGEgbXVzdCBiZSB3cml0dGVuIHRvIHRoZSBhdWRpbyBzaW5rIGluCi0gICAgLy8g
Y2h1bmtzIG9mIHNpemUgKGdpdmVuIGJ5IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkgbGVzcyB0aGFu
IG9yIGVxdWFsCi0gICAgLy8gdG8gdGhlIHRvdGFsIGJ1ZmZlciBzaXplIHxtaW5CdWZmZXJTaXpl
SW5CeXRlc3wuIEJ1dCwgd2UgaGF2ZSBzZWVuCi0gICAgLy8gcmVwb3J0cyBvZiAiZ2V0TWluQnVm
ZmVyU2l6ZSgpOiBlcnJvciBxdWVyeWluZyBoYXJkd2FyZSIuIEhlbmNlLCBpdAotICAgIC8vIGNh
biBoYXBwZW4gdGhhdCB8bWluQnVmZmVyU2l6ZUluQnl0ZXN8IGNvbnRhaW5zIGFuIGludmFsaWQg
dmFsdWUuCi0gICAgaWYgKG1pbkJ1ZmZlclNpemVJbkJ5dGVzIDwgYnl0ZUJ1ZmZlci5jYXBhY2l0
eSgpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXpl
IHJldHVybnMgYW4gaW52YWxpZCB2YWx1ZS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCBwcmV2aXNpb24gYXVkaW8gc2Vzc2lvbiB3YXMgc3RvcHBl
ZCBjb3JyZWN0bHkgYmVmb3JlIHRyeWluZwotICAgIC8vIHRvIGNyZWF0ZSBhIG5ldyBBdWRpb1Ry
YWNrLgotICAgIGlmIChhdWRpb1RyYWNrICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcs
ICJDb25mbGljdCB3aXRoIGV4aXN0aW5nIEF1ZGlvVHJhY2suIik7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHRyeSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gQXVkaW9UcmFjayBvYmpl
Y3QgYW5kIGluaXRpYWxpemUgaXRzIGFzc29jaWF0ZWQgYXVkaW8gYnVmZmVyLgotICAgICAgLy8g
VGhlIHNpemUgb2YgdGhpcyBidWZmZXIgZGV0ZXJtaW5lcyBob3cgbG9uZyBhbiBBdWRpb1RyYWNr
IGNhbiBwbGF5Ci0gICAgICAvLyBiZWZvcmUgcnVubmluZyBvdXQgb2YgZGF0YS4KLSAgICAgIGF1
ZGlvVHJhY2sgPQotICAgICAgICAgIG5ldyBBdWRpb1RyYWNrKEF1ZGlvTWFuYWdlci5TVFJFQU1f
Vk9JQ0VfQ0FMTCwgc2FtcGxlUmF0ZSwgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTywKLSAg
ICAgICAgICAgICAgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklULCBtaW5CdWZmZXJTaXpl
SW5CeXRlcywgQXVkaW9UcmFjay5NT0RFX1NUUkVBTSk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFy
Z3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsIGUuZ2V0TWVzc2FnZSgp
KTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJdCBjYW4gaGFwcGVuIHRo
YXQgYW4gQXVkaW9UcmFjayBpcyBjcmVhdGVkIGJ1dCBpdCB3YXMgbm90IHN1Y2Nlc3NmdWxseQot
ICAgIC8vIGluaXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFNlZW1zIHRvIGJlIHRoZSBjYXNlIGUu
Zy4gd2hlbiB0aGUgbWF4aW11bQotICAgIC8vIG51bWJlciBvZiBnbG9iYWxseSBhdmFpbGFibGUg
YXVkaW8gdHJhY2tzIGlzIGV4Y2VlZGVkLgotICAgIGlmIChhdWRpb1RyYWNrLmdldFN0YXRlKCkg
IT0gQXVkaW9UcmFjay5TVEFURV9JTklUSUFMSVpFRCkgewotICAgICAgTG9nZ2luZy5lKFRBRywg
IkluaXRpYWxpemF0aW9uIG9mIGF1ZGlvIHRyYWNrIGZhaWxlZC4iKTsKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGF1ZGlvIHBhcmFtZXRlcnMgYXJl
IHZhbGlkIGFuZCBjb3JyZWN0LgotICAgIGlmICghYXJlUGFyYW1ldGVyc1ZhbGlkKHNhbXBsZVJh
dGUsIGNoYW5uZWxzKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF0IGxlYXN0IG9uZSBhdWRp
byB0cmFjayBwYXJhbWV0ZXIgaXMgaW52YWxpZC4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgbG9nTWFpblBhcmFtZXRlcnMoKTsKLSAgICBsb2dNYWluUGFyYW1ldGVyc0V4dGVu
ZGVkKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRQ
bGF5b3V0KCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFBsYXlvdXQiKTsKLSAgICBhc3Nl
cnRUcnVlKGF1ZGlvVHJhY2sgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCA9
PSBudWxsKTsKLSAgICBpZiAoYXVkaW9UcmFjay5nZXRTdGF0ZSgpICE9IEF1ZGlvVHJhY2suU1RB
VEVfSU5JVElBTElaRUQpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpbyB0cmFjayBpcyBu
b3Qgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBhdWRpb1RocmVhZCA9IG5ldyBBdWRpb1RyYWNrVGhyZWFkKCJBdWRpb1RyYWNrSmF2
YVRocmVhZCIpOwotICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RvcFBsYXlvdXQoKSB7Ci0gICAgTG9nZ2luZy5kKFRB
RywgInN0b3BQbGF5b3V0Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCAhPSBudWxsKTsK
LSAgICBsb2dVbmRlcnJ1bkNvdW50KCk7Ci0gICAgYXVkaW9UaHJlYWQuam9pblRocmVhZCgpOwot
ICAgIGF1ZGlvVGhyZWFkID0gbnVsbDsKLSAgICBpZiAoYXVkaW9UcmFjayAhPSBudWxsKSB7Ci0g
ICAgICBhdWRpb1RyYWNrLnJlbGVhc2UoKTsKLSAgICAgIGF1ZGlvVHJhY2sgPSBudWxsOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEdldCBtYXggcG9zc2libGUgdm9sdW1l
IGluZGV4IGZvciBhIHBob25lIGNhbGwgYXVkaW8gc3RyZWFtLgotICBwcml2YXRlIGludCBnZXRT
dHJlYW1NYXhWb2x1bWUoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImdldFN0cmVhbU1heFZvbHVt
ZSIpOwotICAgIGFzc2VydFRydWUoYXVkaW9NYW5hZ2VyICE9IG51bGwpOwotICAgIHJldHVybiBh
dWRpb01hbmFnZXIuZ2V0U3RyZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0Vf
Q0FMTCk7Ci0gIH0KLQotICAvLyBTZXQgY3VycmVudCB2b2x1bWUgbGV2ZWwgZm9yIGEgcGhvbmUg
Y2FsbCBhdWRpbyBzdHJlYW0uCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRTdHJlYW1Wb2x1bWUoaW50
IHZvbHVtZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJzZXRTdHJlYW1Wb2x1bWUoIiArIHZvbHVt
ZSArICIpIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb01hbmFnZXIgIT0gbnVsbCk7Ci0gICAgaWYg
KGlzVm9sdW1lRml4ZWQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlRoZSBkZXZpY2UgaW1w
bGVtZW50cyBhIGZpeGVkIHZvbHVtZSBwb2xpY3kuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGF1ZGlvTWFuYWdlci5zZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVB
TV9WT0lDRV9DQUxMLCB2b2x1bWUsIDApOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJp
dmF0ZSBib29sZWFuIGlzVm9sdW1lRml4ZWQoKSB7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxz
LnJ1bm5pbmdPbkxvbGxpcG9wT3JIaWdoZXIoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gYXVkaW9NYW5hZ2VyLmlzVm9sdW1lRml4ZWQoKTsKLSAgfQotCi0gIC8qKiBHZXQgY3Vy
cmVudCB2b2x1bWUgbGV2ZWwgZm9yIGEgcGhvbmUgY2FsbCBhdWRpbyBzdHJlYW0uICovCi0gIHBy
aXZhdGUgaW50IGdldFN0cmVhbVZvbHVtZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZ2V0U3Ry
ZWFtVm9sdW1lIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb01hbmFnZXIgIT0gbnVsbCk7Ci0gICAg
cmV0dXJuIGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9W
T0lDRV9DQUxMKTsKLSAgfQotCi0gIC8vIFZlcmlmaWVzIHRoYXQgdGhlIGF1ZGlvIHRyYWNrIGlz
IHVzaW5nIGNvcnJlY3QgcGFyYW1ldGVycywgaS5lLiwgdGhhdCB0aGUKLSAgLy8gY3JlYXRlZCB0
cmFjayB1c2VzIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXNrZWQgZm9yLgotICBwcml2YXRlIGJv
b2xlYW4gYXJlUGFyYW1ldGVyc1ZhbGlkKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsK
LSAgICBmaW5hbCBpbnQgc3RyZWFtVHlwZSA9IGF1ZGlvVHJhY2suZ2V0U3RyZWFtVHlwZSgpOwot
ICAgIHJldHVybiAoYXVkaW9UcmFjay5nZXRBdWRpb0Zvcm1hdCgpID09IEF1ZGlvRm9ybWF0LkVO
Q09ESU5HX1BDTV8xNkJJVAotICAgICAgICAmJiBhdWRpb1RyYWNrLmdldENoYW5uZWxDb25maWd1
cmF0aW9uKCkgPT0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTwotICAgICAgICAmJiBzdHJl
YW1UeXBlID09IEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCAmJiBhdWRpb1RyYWNrLmdl
dFNhbXBsZVJhdGUoKSA9PSBzYW1wbGVSYXRlCi0gICAgICAgICYmIHNhbXBsZVJhdGUgPT0gYXVk
aW9UcmFjay5nZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKHN0cmVhbVR5cGUpCi0gICAgICAgICYm
IGF1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvdW50KCkgPT0gY2hhbm5lbHMpOwotICB9Ci0KLSAgcHJp
dmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJBdWRp
b1RyYWNrOiAiCi0gICAgICAgICAgICArICJzZXNzaW9uIElEOiAiICsgYXVkaW9UcmFjay5nZXRB
dWRpb1Nlc3Npb25JZCgpICsgIiwgIgotICAgICAgICAgICAgKyAiY2hhbm5lbHM6ICIgKyBhdWRp
b1RyYWNrLmdldENoYW5uZWxDb3VudCgpICsgIiwgIgotICAgICAgICAgICAgKyAic2FtcGxlIHJh
dGU6ICIgKyBhdWRpb1RyYWNrLmdldFNhbXBsZVJhdGUoKSArICIsICIKLSAgICAgICAgICAgIC8v
IEdhaW4gKD49MS4wKSBleHByZXNzZWQgYXMgbGluZWFyIG11bHRpcGxpZXIgb24gc2FtcGxlIHZh
bHVlcy4KLSAgICAgICAgICAgICsgIm1heCBnYWluOiAiICsgYXVkaW9UcmFjay5nZXRNYXhWb2x1
bWUoKSk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnNFeHRlbmRlZCgp
IHsKLSAgICBpZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVy
KCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrOiAiCi0gICAgICAgICAgICAg
IC8vIFRoZSBlZmZlY3RpdmUgc2l6ZSBvZiB0aGUgQXVkaW9UcmFjayBidWZmZXIgdGhhdCB0aGUg
YXBwIHdyaXRlcyB0by4KLSAgICAgICAgICAgICAgKyAiYnVmZmVyIHNpemUgaW4gZnJhbWVzOiAi
ICsgYXVkaW9UcmFjay5nZXRCdWZmZXJTaXplSW5GcmFtZXMoKSk7Ci0gICAgfQotICAgIGlmIChX
ZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbk5vdWdhdE9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dp
bmcuZChUQUcsICJBdWRpb1RyYWNrOiAiCi0gICAgICAgICAgICAgIC8vIE1heGltdW0gc2l6ZSBv
ZiB0aGUgQXVkaW9UcmFjayBidWZmZXIgaW4gZnJhbWVzLgotICAgICAgICAgICAgICArICJidWZm
ZXIgY2FwYWNpdHkgaW4gZnJhbWVzOiAiICsgYXVkaW9UcmFjay5nZXRCdWZmZXJDYXBhY2l0eUlu
RnJhbWVzKCkpOwotICAgIH0KLSAgfQotCi0gIC8vIFByaW50cyB0aGUgbnVtYmVyIG9mIHVuZGVy
cnVuIG9jY3VycmVuY2VzIGluIHRoZSBhcHBsaWNhdGlvbi1sZXZlbCB3cml0ZQotICAvLyBidWZm
ZXIgc2luY2UgdGhlIEF1ZGlvVHJhY2sgd2FzIGNyZWF0ZWQuIEFuIHVuZGVycnVuIG9jY3VycyBp
ZiB0aGUgYXBwIGRvZXMKLSAgLy8gbm90IHdyaXRlIGF1ZGlvIGRhdGEgcXVpY2tseSBlbm91Z2gs
IGNhdXNpbmcgdGhlIGJ1ZmZlciB0byB1bmRlcmZsb3cgYW5kIGEKLSAgLy8gcG90ZW50aWFsIGF1
ZGlvIGdsaXRjaC4KLSAgLy8gVE9ETyhoZW5yaWthKToga2VlcCB0cmFjayBvZiB0aGlzIHZhbHVl
IGluIHRoZSBmaWVsZCBhbmQgcG9zc2libHkgYWRkIG5ldwotICAvLyBVTUEgc3RhdCBpZiBuZWVk
ZWQuCi0gIHByaXZhdGUgdm9pZCBsb2dVbmRlcnJ1bkNvdW50KCkgewotICAgIGlmIChXZWJSdGNB
dWRpb1V0aWxzLnJ1bm5pbmdPbk5vdWdhdE9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcuZChU
QUcsICJ1bmRlcnJ1biBjb3VudDogIiArIGF1ZGlvVHJhY2suZ2V0VW5kZXJydW5Db3VudCgpKTsK
LSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRp
b24gIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQg
YXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0g
ICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0
cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYWNoZURp
cmVjdEJ1ZmZlckFkZHJlc3MoQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBsb25nIG5hdGl2ZUF1ZGlv
UmVjb3JkKTsKLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUdldFBsYXlvdXREYXRhKGlu
dCBieXRlcywgbG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgLy8gU2V0cyBhbGwgc2FtcGxl
cyB0byBiZSBwbGF5ZWQgb3V0IHRvIHplcm8gaWYgfG11dGV8IGlzIHRydWUsIGkuZS4sCi0gIC8v
IGVuc3VyZXMgdGhhdCB0aGUgc3BlYWtlciBpcyBtdXRlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lk
IHNldFNwZWFrZXJNdXRlKGJvb2xlYW4gbXV0ZSkgewotICAgIExvZ2dpbmcudyhUQUcsICJzZXRT
cGVha2VyTXV0ZSgiICsgbXV0ZSArICIpIik7Ci0gICAgc3BlYWtlck11dGUgPSBtdXRlOwotICB9
Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUv
V2ViUnRjQXVkaW9VdGlscy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9z
cmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1V0aWxzLmphdmEJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2lu
ZS9XZWJSdGNBdWRpb1V0aWxzLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsK
LQotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5D
b250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9y
dCBhbmRyb2lkLm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLQotaW1wb3J0
IGphdmEubGFuZy5UaHJlYWQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZh
LnV0aWwuTGlzdDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdlYlJ0Y0F1ZGlvVXRpbHMgewotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvVXRpbHMiOwotCi0g
IC8vIExpc3Qgb2YgZGV2aWNlcyB3aGVyZSB3ZSBoYXZlIHNlZW4gaXNzdWVzIChlLmcuIGJhZCBh
dWRpbyBxdWFsaXR5KSB1c2luZwotICAvLyB0aGUgbG93IGxhdGVuY3kgb3V0cHV0IG1vZGUgaW4g
Y29tYmluYXRpb24gd2l0aCBPcGVuU0wgRVMuCi0gIC8vIFRoZSBkZXZpY2UgbmFtZSBpcyBnaXZl
biBieSBCdWlsZC5NT0RFTC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQkxBQ0tM
SVNURURfT1BFTl9TTF9FU19NT0RFTFMgPSBuZXcgU3RyaW5nW10gewotICAgICAgLy8gVGhpcyBs
aXN0IGlzIGN1cnJlbnRseSBlbXB0eSA7LSkKLSAgfTsKLQotICAvLyBMaXN0IG9mIGRldmljZXMg
d2hlcmUgaXQgaGFzIGJlZW4gdmVyaWZpZWQgdGhhdCB0aGUgYnVpbHQtaW4gZWZmZWN0Ci0gIC8v
IGJhZCBhbmQgd2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gYXZvaWQgdXNpbmcgaXQgYW5kIGluc3Rl
YWQgcmVseSBvbiB0aGUKLSAgLy8gbmF0aXZlIFdlYlJUQyB2ZXJzaW9uIGluc3RlYWQuIFRoZSBk
ZXZpY2UgbmFtZSBpcyBnaXZlbiBieSBCdWlsZC5NT0RFTC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgU3RyaW5nW10gQkxBQ0tMSVNURURfQUVDX01PREVMUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAg
ICAiRDY1MDMiLCAvLyBTb255IFhwZXJpYSBaMiBENjUwMwotICAgICAgIk9ORSBBMjAwNSIsIC8v
IE9uZVBsdXMgMgotICAgICAgIk1vdG9HMyIsIC8vIE1vdG8gRyAoM3JkIEdlbmVyYXRpb24pCi0g
IH07Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEJMQUNLTElTVEVEX05TX01PREVM
UyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAiTmV4dXMgMTAiLCAiTmV4dXMgOSIsCi0gICAgICAi
T05FIEEyMDA1IiwgLy8gT25lUGx1cyAyCi0gIH07Ci0KLSAgLy8gVXNlIDE2a0h6IGFzIHRoZSBk
ZWZhdWx0IHNhbXBsZSByYXRlLiBBIGhpZ2hlciBzYW1wbGUgcmF0ZSBtaWdodCBwcmV2ZW50Ci0g
IC8vIHVzIGZyb20gc3VwcG9ydGluZyBjb21tdW5pY2F0aW9uIG1vZGUgb24gc29tZSBvbGRlciAo
ZS5nLiBJQ1MpIGRldmljZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NB
TVBMRV9SQVRFX0haID0gMTYwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGludCBkZWZhdWx0U2FtcGxl
UmF0ZUh6ID0gREVGQVVMVF9TQU1QTEVfUkFURV9IWjsKLSAgLy8gU2V0IHRvIHRydWUgaWYgc2V0
RGVmYXVsdFNhbXBsZVJhdGVIeigpIGhhcyBiZWVuIGNhbGxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMg
Ym9vbGVhbiBpc0RlZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbiA9IGZhbHNlOwotCi0gIC8vIEJ5
IGRlZmF1bHQsIHV0aWxpemUgaGFyZHdhcmUgYmFzZWQgYXVkaW8gZWZmZWN0cyBmb3IgQUVDIGFu
ZCBOUyB3aGVuCi0gIC8vIGF2YWlsYWJsZS4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1c2VX
ZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyID0gZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGlj
IGJvb2xlYW4gdXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IgPSBmYWxzZTsKLQotICAvLyBD
YWxsIHRoZXNlIG1ldGhvZHMgaWYgYW55IGhhcmR3YXJlIGJhc2VkIGVmZmVjdCBzaGFsbCBiZSBy
ZXBsYWNlZCBieSBhCi0gIC8vIHNvZnR3YXJlIGJhc2VkIHZlcnNpb24gcHJvdmlkZWQgYnkgdGhl
IFdlYlJUQyBzdGFjayBpbnN0ZWFkLgotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lk
IHNldFdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoYm9vbGVhbiBlbmFibGUpIHsKLSAg
ICB1c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyID0gZW5hYmxlOwotICB9Ci0gIHB1
YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWROb2lzZVN1cHByZXNz
b3IoYm9vbGVhbiBlbmFibGUpIHsKLSAgICB1c2VXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvciA9
IGVuYWJsZTsKLSAgfQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFdlYlJ0
Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woYm9vbGVhbiBlbmFibGUpIHsKLSAgICAvLyBUT0RP
KGhlbnJpa2EpOiBkZXByZWNhdGVkOyByZW1vdmUgd2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkg
Y2xpZW50LgotICAgIExvZ2dpbmcudyhUQUcsICJzZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5D
b250cm9sKCkgaXMgZGVwcmVjYXRlZCIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJv
bml6ZWQgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKCkgewotICAg
IGlmICh1c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKSB7Ci0gICAgICBMb2dnaW5n
LncoVEFHLCAiT3ZlcnJpZGluZyBkZWZhdWx0IGJlaGF2aW9yOyBub3cgdXNpbmcgV2ViUlRDIEFF
QyEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2Vs
ZXI7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB1c2VXZWJSdGNC
YXNlZE5vaXNlU3VwcHJlc3NvcigpIHsKLSAgICBpZiAodXNlV2ViUnRjQmFzZWROb2lzZVN1cHBy
ZXNzb3IpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJPdmVycmlkaW5nIGRlZmF1bHQgYmVoYXZp
b3I7IG5vdyB1c2luZyBXZWJSVEMgTlMhIik7Ci0gICAgfQotICAgIHJldHVybiB1c2VXZWJSdGNC
YXNlZE5vaXNlU3VwcHJlc3NvcjsKLSAgfQotICAvLyBUT0RPKGhlbnJpa2EpOiBkZXByZWNhdGVk
OyByZW1vdmUgd2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICBwdWJsaWMgc3Rh
dGljIHN5bmNocm9uaXplZCBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRy
b2woKSB7Ci0gICAgLy8gQWx3YXlzIHJldHVybiB0cnVlIGhlcmUgdG8gYXZvaWQgdHJ5aW5nIHRv
IHVzZSBhbnkgYnVpbHQtaW4gQUdDLgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYW4gYXVkaW8gZWZmZWN0IChBRUMgb3Ig
TlMpLgotICAvLyBGb3VyIGNvbmRpdGlvbnMgbXVzdCBiZSBmdWxmaWxsZWQgaWYgZnVuY3Rpb25z
IGFyZSB0byByZXR1cm4gdHJ1ZToKLSAgLy8gMSkgdGhlIHBsYXRmb3JtIG11c3Qgc3VwcG9ydCB0
aGUgYnVpbHQtaW4gKEhXKSBlZmZlY3QsCi0gIC8vIDIpIGV4cGxpY2l0IHVzZSAob3ZlcnJpZGUp
IG9mIGEgV2ViUlRDIGJhc2VkIHZlcnNpb24gbXVzdCBub3QgYmUgc2V0LAotICAvLyAzKSB0aGUg
ZGV2aWNlIG11c3Qgbm90IGJlIGJsYWNrbGlzdGVkIGZvciB1c2Ugb2YgdGhlIGVmZmVjdCwgYW5k
Ci0gIC8vIDQpIHRoZSBVVUlEIG9mIHRoZSBlZmZlY3QgbXVzdCBiZSBhcHByb3ZlZCAoc29tZSBV
VUlEcyBjYW4gYmUgZXhjbHVkZWQpLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291c3Rp
Y0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3Rz
LmNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKCk7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBib29s
ZWFuIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgewotICAgIHJldHVybiBXZWJSdGNBdWRp
b0VmZmVjdHMuY2FuVXNlTm9pc2VTdXBwcmVzc29yKCk7Ci0gIH0KLSAgLy8gVE9ETyhoZW5yaWth
KTogZGVwcmVjYXRlZDsgcmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQgYnkgYW55IGNsaWVudC4K
LSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzQXV0b21hdGljR2FpbkNvbnRyb2xTdXBwb3J0ZWQo
KSB7Ci0gICAgLy8gQWx3YXlzIHJldHVybiBmYWxzZSBoZXJlIHRvIGF2b2lkIHRyeWluZyB0byB1
c2UgYW55IGJ1aWx0LWluIEFHQy4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBDYWxs
IHRoaXMgbWV0aG9kIGlmIHRoZSBkZWZhdWx0IGhhbmRsaW5nIG9mIHF1ZXJ5aW5nIHRoZSBuYXRp
dmUgc2FtcGxlCi0gIC8vIHJhdGUgc2hhbGwgYmUgb3ZlcnJpZGRlbi4gQ2FuIGJlIHVzZWZ1bCBv
biBzb21lIGRldmljZXMgd2hlcmUgdGhlCi0gIC8vIGF2YWlsYWJsZSBBbmRyb2lkIEFQSXMgYXJl
IGtub3duIHRvIHJldHVybiBpbnZhbGlkIHJlc3VsdHMuCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hy
b25pemVkIHZvaWQgc2V0RGVmYXVsdFNhbXBsZVJhdGVIeihpbnQgc2FtcGxlUmF0ZUh6KSB7Ci0g
ICAgaXNEZWZhdWx0U2FtcGxlUmF0ZU92ZXJyaWRkZW4gPSB0cnVlOwotICAgIGRlZmF1bHRTYW1w
bGVSYXRlSHogPSBzYW1wbGVSYXRlSHo7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9u
aXplZCBib29sZWFuIGlzRGVmYXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuKCkgewotICAgIHJldHVy
biBpc0RlZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMg
c3luY2hyb25pemVkIGludCBnZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgewotICAgIHJldHVybiBk
ZWZhdWx0U2FtcGxlUmF0ZUh6OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4g
Z2V0QmxhY2tMaXN0ZWRNb2RlbHNGb3JBZWNVc2FnZSgpIHsKLSAgICByZXR1cm4gQXJyYXlzLmFz
TGlzdChXZWJSdGNBdWRpb1V0aWxzLkJMQUNLTElTVEVEX0FFQ19NT0RFTFMpOwotICB9Ci0KLSAg
cHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0QmxhY2tMaXN0ZWRNb2RlbHNGb3JOc1VzYWdl
KCkgewotICAgIHJldHVybiBBcnJheXMuYXNMaXN0KFdlYlJ0Y0F1ZGlvVXRpbHMuQkxBQ0tMSVNU
RURfTlNfTU9ERUxTKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25H
aW5nZXJCcmVhZE9ySGlnaGVyKCkgewotICAgIC8vIE5vdmVtYmVyIDIwMTA6IEFuZHJvaWQgMi4z
LCBBUEkgTGV2ZWwgOS4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxk
LlZFUlNJT05fQ09ERVMuR0lOR0VSQlJFQUQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xl
YW4gcnVubmluZ09uSmVsbHlCZWFuT3JIaWdoZXIoKSB7Ci0gICAgLy8gSnVuZSAyMDEyOiBBbmRy
b2lkIDQuMS4gQVBJIExldmVsIDE2LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQg
Pj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBib29sZWFuIHJ1bm5pbmdPbkplbGx5QmVhbk1SMU9ySGlnaGVyKCkgewotICAgIC8vIE5vdmVt
YmVyIDIwMTI6IEFuZHJvaWQgNC4yLiBBUEkgTGV2ZWwgMTcuCi0gICAgcmV0dXJuIEJ1aWxkLlZF
UlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpFTExZX0JFQU5fTVIxOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkplbGx5QmVhbk1SMk9ySGlnaGVy
KCkgewotICAgIC8vIEp1bHkgMjQsIDIwMTM6IEFuZHJvaWQgNC4zLiBBUEkgTGV2ZWwgMTguCi0g
ICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpF
TExZX0JFQU5fTVIyOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkxv
bGxpcG9wT3JIaWdoZXIoKSB7Ci0gICAgLy8gQVBJIExldmVsIDIxLgotICAgIHJldHVybiBCdWls
ZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUDsKLSAgfQot
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkg
ewotICAgIC8vIEFQSSBMZXZlbCAyMy4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5U
ID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVh
biBydW5uaW5nT25Ob3VnYXRPckhpZ2hlcigpIHsKLSAgICAvLyBBUEkgTGV2ZWwgMjQuCi0gICAg
cmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk47Ci0g
IH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIGZvciBidWlsZGluZyBhIHN0cmluZyBvZiB0aHJlYWQg
aW5mb3JtYXRpb24uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRocmVhZEluZm8oKSB7Ci0g
ICAgcmV0dXJuICJAW25hbWU9IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsg
IiwgaWQ9IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0SWQoKQotICAgICAgICArICJdIjsK
LSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSdyZSBydW5uaW5nIG9uIGVtdWxhdG9yLgot
ICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uRW11bGF0b3IoKSB7Ci0gICAgcmV0dXJu
IEJ1aWxkLkhBUkRXQVJFLmVxdWFscygiZ29sZGZpc2giKSAmJiBCdWlsZC5CUkFORC5zdGFydHNX
aXRoKCJnZW5lcmljXyIpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ug
aXMgYmxhY2tsaXN0ZWQgZm9yIE9wZW5TTCBFUyB1c2FnZS4KLSAgcHVibGljIHN0YXRpYyBib29s
ZWFuIGRldmljZUlzQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCkgewotICAgIExpc3Q8U3Ry
aW5nPiBibGFja0xpc3RlZE1vZGVscyA9IEFycmF5cy5hc0xpc3QoQkxBQ0tMSVNURURfT1BFTl9T
TF9FU19NT0RFTFMpOwotICAgIHJldHVybiBibGFja0xpc3RlZE1vZGVscy5jb250YWlucyhCdWls
ZC5NT0RFTCk7Ci0gIH0KLQotICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBidWls
ZCwgdGFrZW4gZnJvbSBzeXN0ZW0gcHJvcGVydGllcy4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGxv
Z0RldmljZUluZm8oU3RyaW5nIHRhZykgewotICAgIExvZ2dpbmcuZCh0YWcsICJBbmRyb2lkIFNE
SzogIiArIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCArICIsICIKLSAgICAgICAgICAgICsgIlJlbGVh
c2U6ICIgKyBCdWlsZC5WRVJTSU9OLlJFTEVBU0UgKyAiLCAiCi0gICAgICAgICAgICArICJCcmFu
ZDogIiArIEJ1aWxkLkJSQU5EICsgIiwgIgotICAgICAgICAgICAgKyAiRGV2aWNlOiAiICsgQnVp
bGQuREVWSUNFICsgIiwgIgotICAgICAgICAgICAgKyAiSWQ6ICIgKyBCdWlsZC5JRCArICIsICIK
LSAgICAgICAgICAgICsgIkhhcmR3YXJlOiAiICsgQnVpbGQuSEFSRFdBUkUgKyAiLCAiCi0gICAg
ICAgICAgICArICJNYW51ZmFjdHVyZXI6ICIgKyBCdWlsZC5NQU5VRkFDVFVSRVIgKyAiLCAiCi0g
ICAgICAgICAgICArICJNb2RlbDogIiArIEJ1aWxkLk1PREVMICsgIiwgIgotICAgICAgICAgICAg
KyAiUHJvZHVjdDogIiArIEJ1aWxkLlBST0RVQ1QpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIHRo
ZSBwcm9jZXNzIGhhcyBhcyBzcGVjaWZpZWQgcGVybWlzc2lvbiBvciBub3QuCi0gIHB1YmxpYyBz
dGF0aWMgYm9vbGVhbiBoYXNQZXJtaXNzaW9uKENvbnRleHQgY29udGV4dCwgU3RyaW5nIHBlcm1p
c3Npb24pIHsKLSAgICByZXR1cm4gY29udGV4dC5jaGVja1Blcm1pc3Npb24ocGVybWlzc2lvbiwg
UHJvY2Vzcy5teVBpZCgpLCBQcm9jZXNzLm15VWlkKCkpCi0gICAgICAgID09IFBhY2thZ2VNYW5h
Z2VyLlBFUk1JU1NJT05fR1JBTlRFRDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mby5qYXZhCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
ZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8u
amF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2Vi
cnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mby5qYXZhCShub25leGlzdGVudCkKQEAgLTEsNTEgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVu
Z2luZTsKLQotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBC
dWlsZEluZm8gewotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXZpY2UoKSB7Ci0gICAgcmV0
dXJuIEJ1aWxkLkRFVklDRTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldERldmlj
ZU1vZGVsKCkgewotICAgIHJldHVybiBCdWlsZC5NT0RFTDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0
aWMgU3RyaW5nIGdldFByb2R1Y3QoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlBST0RVQ1Q7Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCcmFuZCgpIHsKLSAgICByZXR1cm4gQnVpbGQu
QlJBTkQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXREZXZpY2VNYW51ZmFjdHVy
ZXIoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLk1BTlVGQUNUVVJFUjsKLSAgfQotCi0gIHB1YmxpYyBz
dGF0aWMgU3RyaW5nIGdldEFuZHJvaWRCdWlsZElkKCkgewotICAgIHJldHVybiBCdWlsZC5JRDsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJ1aWxkVHlwZSgpIHsKLSAgICByZXR1
cm4gQnVpbGQuVFlQRTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJ1aWxkUmVs
ZWFzZSgpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5SRUxFQVNFOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBpbnQgZ2V0U2RrVmVyc2lvbigpIHsKLSAgICByZXR1cm4gQnVpbGQuVkVSU0lP
Ti5TREtfSU5UOwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZp
Y2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZm
ZWN0cy5qYXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzMjUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3Jn
LndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1w
b3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5UYXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5h
dWRpb2Z4LkFjb3VzdGljRWNob0NhbmNlbGVyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9m
eC5BdWRpb0VmZmVjdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3Qu
RGVzY3JpcHRvcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQXV0b21hdGljR2FpbkNv
bnRyb2w7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4Lk5vaXNlU3VwcHJlc3NvcjsKLWlt
cG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQg
amF2YS51dGlsLlVVSUQ7Ci0KLS8vIFRoaXMgY2xhc3Mgd3JhcHMgY29udHJvbCBvZiB0aHJlZSBk
aWZmZXJlbnQgcGxhdGZvcm0gZWZmZWN0cy4gU3VwcG9ydGVkCi0vLyBlZmZlY3RzIGFyZTogQWNv
dXN0aWNFY2hvQ2FuY2VsZXIgKEFFQykgYW5kIE5vaXNlU3VwcHJlc3NvciAoTlMpLgotLy8gQ2Fs
bGluZyBlbmFibGUoKSB3aWxsIGFjdGl2ZSBhbGwgZWZmZWN0cyB0aGF0IGFyZQotLy8gc3VwcG9y
dGVkIGJ5IHRoZSBkZXZpY2UgaWYgdGhlIGNvcnJlc3BvbmRpbmcgfHNob3VsZEVuYWJsZVhYWHwg
bWVtYmVyIGlzIHNldC4KLWNsYXNzIFdlYlJ0Y0F1ZGlvRWZmZWN0cyB7Ci0gIHByaXZhdGUgc3Rh
dGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvRWZmZWN0cyI7Ci0KLSAgLy8gVVVJRHMgZm9yIFNv
ZnR3YXJlIEF1ZGlvIEVmZmVjdHMgdGhhdCB3ZSB3YW50IHRvIGF2b2lkIHVzaW5nLgotICAvLyBU
aGUgaW1wbGVtZW50b3IgZmllbGQgd2lsbCBiZSBzZXQgdG8gIlRoZSBBbmRyb2lkIE9wZW4gU291
cmNlIFByb2plY3QiLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVVUlEIEFPU1BfQUNPVVNUSUNf
RUNIT19DQU5DRUxFUiA9Ci0gICAgICBVVUlELmZyb21TdHJpbmcoImJiMzkyZWMwLThkNGQtMTFl
MC1hODk2LTAwMDJhNWQ1YzUxYiIpOwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBVVUlEIEFPU1Bf
Tk9JU0VfU1VQUFJFU1NPUiA9Ci0gICAgICBVVUlELmZyb21TdHJpbmcoImMwNmM4NDAwLThlMDYt
MTFlMC05Y2I2LTAwMDJhNWQ1YzUxYiIpOwotCi0gIC8vIENvbnRhaW5zIHRoZSBhdmFpbGFibGUg
ZWZmZWN0IGRlc2NyaXB0b3JzIHJldHVybmVkIGZyb20gdGhlCi0gIC8vIEF1ZGlvRWZmZWN0Lmdl
dEVmZmVjdHMoKSBjYWxsLiBUaGlzIHJlc3VsdCBpcyBjYWNoZWQgdG8gYXZvaWQgZG9pbmcgdGhl
Ci0gIC8vIHNsb3cgT1MgY2FsbCBtdWx0aXBsZSB0aW1lcy4KLSAgcHJpdmF0ZSBzdGF0aWMgRGVz
Y3JpcHRvcltdIGNhY2hlZEVmZmVjdHMgPSBudWxsOwotCi0gIC8vIENvbnRhaW5zIHRoZSBhdWRp
byBlZmZlY3Qgb2JqZWN0cy4gQ3JlYXRlZCBpbiBlbmFibGUoKSBhbmQgZGVzdHJveWVkCi0gIC8v
IGluIHJlbGVhc2UoKS4KLSAgcHJpdmF0ZSBBY291c3RpY0VjaG9DYW5jZWxlciBhZWMgPSBudWxs
OwotICBwcml2YXRlIE5vaXNlU3VwcHJlc3NvciBucyA9IG51bGw7Ci0KLSAgLy8gQWZmZWN0cyB0
aGUgZmluYWwgc3RhdGUgZ2l2ZW4gdG8gdGhlIHNldEVuYWJsZWQoKSBtZXRob2Qgb24gZWFjaCBl
ZmZlY3QuCi0gIC8vIFRoZSBkZWZhdWx0IHN0YXRlIGlzIHNldCB0byAiZGlzYWJsZWQiIGJ1dCBl
YWNoIGVmZmVjdCBjYW4gYWxzbyBiZSBlbmFibGVkCi0gIC8vIGJ5IGNhbGxpbmcgc2V0QUVDKCkg
YW5kIHNldE5TKCkuCi0gIC8vIFRvIGVuYWJsZSBhbiBlZmZlY3QsIGJvdGggdGhlIHNob3VsZEVu
YWJsZVhYWCBtZW1iZXIgYW5kIHRoZSBzdGF0aWMKLSAgLy8gY2FuVXNlWFhYKCkgbXVzdCBiZSB0
cnVlLgotICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkRW5hYmxlQWVjID0gZmFsc2U7Ci0gIHByaXZh
dGUgYm9vbGVhbiBzaG91bGRFbmFibGVOcyA9IGZhbHNlOwotCi0gIC8vIENoZWNrcyBpZiB0aGUg
ZGV2aWNlIGltcGxlbWVudHMgQWNvdXN0aWMgRWNobyBDYW5jZWxsYXRpb24gKEFFQykuCi0gIC8v
IFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGltcGxlbWVudHMgQUVDLCBmYWxzZSBvdGhlcndp
c2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9y
dGVkKCkgewotICAgIC8vIE5vdGU6IHdlJ3JlIHVzaW5nIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJF
ZmZlY3RBdmFpbGFibGUoKSBpbnN0ZWFkIG9mCi0gICAgLy8gQWNvdXN0aWNFY2hvQ2FuY2VsZXIu
aXNBdmFpbGFibGUoKSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGdldEVmZmVjdHMoKQotICAgIC8v
IE9TIEFQSSBjYWxsLgotICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5
QmVhbk9ySGlnaGVyKCkgJiYgaXNBY291c3RpY0VjaG9DYW5jZWxlckVmZmVjdEF2YWlsYWJsZSgp
OwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIHRoZSBkZXZpY2UgaW1wbGVtZW50cyBOb2lzZSBTdXBw
cmVzc2lvbiAoTlMpLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRz
IE5TLCBmYWxzZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3Vw
cHJlc3NvclN1cHBvcnRlZCgpIHsKLSAgICAvLyBOb3RlOiB3ZSdyZSB1c2luZyBpc05vaXNlU3Vw
cHJlc3NvckVmZmVjdEF2YWlsYWJsZSgpIGluc3RlYWQgb2YKLSAgICAvLyBOb2lzZVN1cHByZXNz
b3IuaXNBdmFpbGFibGUoKSB0byBhdm9pZCB0aGUgZXhwZW5zaXZlIGdldEVmZmVjdHMoKQotICAg
IC8vIE9TIEFQSSBjYWxsLgotICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkpl
bGx5QmVhbk9ySGlnaGVyKCkgJiYgaXNOb2lzZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKTsK
LSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGJsYWNrbGlzdGVkIGZv
ciBIVyBBRUMgdXNhZ2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0Nh
bmNlbGVyQmxhY2tsaXN0ZWQoKSB7Ci0gICAgTGlzdDxTdHJpbmc+IGJsYWNrTGlzdGVkTW9kZWxz
ID0gV2ViUnRjQXVkaW9VdGlscy5nZXRCbGFja0xpc3RlZE1vZGVsc0ZvckFlY1VzYWdlKCk7Ci0g
ICAgYm9vbGVhbiBpc0JsYWNrbGlzdGVkID0gYmxhY2tMaXN0ZWRNb2RlbHMuY29udGFpbnMoQnVp
bGQuTU9ERUwpOwotICAgIGlmIChpc0JsYWNrbGlzdGVkKSB7Ci0gICAgICBMb2dnaW5nLncoVEFH
LCBCdWlsZC5NT0RFTCArICIgaXMgYmxhY2tsaXN0ZWQgZm9yIEhXIEFFQyB1c2FnZSEiKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGlzQmxhY2tsaXN0ZWQ7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIGRldmljZSBpcyBibGFja2xpc3RlZCBmb3IgSFcgTlMgdXNhZ2UuCi0gIHB1YmxpYyBz
dGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvckJsYWNrbGlzdGVkKCkgewotICAgIExpc3Q8
U3RyaW5nPiBibGFja0xpc3RlZE1vZGVscyA9IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0QmxhY2tMaXN0
ZWRNb2RlbHNGb3JOc1VzYWdlKCk7Ci0gICAgYm9vbGVhbiBpc0JsYWNrbGlzdGVkID0gYmxhY2tM
aXN0ZWRNb2RlbHMuY29udGFpbnMoQnVpbGQuTU9ERUwpOwotICAgIGlmIChpc0JsYWNrbGlzdGVk
KSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCBCdWlsZC5NT0RFTCArICIgaXMgYmxhY2tsaXN0ZWQg
Zm9yIEhXIE5TIHVzYWdlISIpOwotICAgIH0KLSAgICByZXR1cm4gaXNCbGFja2xpc3RlZDsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gQUVDIHNob3VsZCBiZSBleGNs
dWRlZCBiYXNlZCBvbiBpdHMgVVVJRC4KLSAgLy8gQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCkg
Y2FuIHRocm93IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi4KLSAgQFRhcmdldEFwaSgxOCkKLSAgcHJp
dmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyRXhjbHVkZWRCeVVVSUQo
KSB7Ci0gICAgZm9yIChEZXNjcmlwdG9yIGQgOiBnZXRBdmFpbGFibGVFZmZlY3RzKCkpIHsKLSAg
ICAgIGlmIChkLnR5cGUuZXF1YWxzKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX0FFQykKLSAgICAg
ICAgICAmJiBkLnV1aWQuZXF1YWxzKEFPU1BfQUNPVVNUSUNfRUNIT19DQU5DRUxFUikpIHsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gTlMgc2hvdWxkIGJlIGV4Y2x1
ZGVkIGJhc2VkIG9uIGl0cyBVVUlELgotICAvLyBBdWRpb0VmZmVjdC5xdWVyeUVmZmVjdHMoKSBj
YW4gdGhyb3cgSWxsZWdhbFN0YXRlRXhjZXB0aW9uLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2
YXRlIHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yRXhjbHVkZWRCeVVVSUQoKSB7Ci0g
ICAgZm9yIChEZXNjcmlwdG9yIGQgOiBnZXRBdmFpbGFibGVFZmZlY3RzKCkpIHsKLSAgICAgIGlm
IChkLnR5cGUuZXF1YWxzKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX05TKSAmJiBkLnV1aWQuZXF1
YWxzKEFPU1BfTk9JU0VfU1VQUFJFU1NPUikpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZGV2aWNlIHN1cHBvcnRzIEFjb3VzdGljIEVjaG8gQ2FuY2VsbGF0aW9uIChBRUMpLgot
ICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzQWNvdXN0aWNFY2hv
Q2FuY2VsZXJFZmZlY3RBdmFpbGFibGUoKSB7Ci0gICAgcmV0dXJuIGlzRWZmZWN0VHlwZUF2YWls
YWJsZShBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9BRUMpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgTm9pc2UgU3VwcHJlc3Npb24gKE5TKS4KLSAgQFRh
cmdldEFwaSgxOCkKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvckVm
ZmVjdEF2YWlsYWJsZSgpIHsKLSAgICByZXR1cm4gaXNFZmZlY3RUeXBlQXZhaWxhYmxlKEF1ZGlv
RWZmZWN0LkVGRkVDVF9UWVBFX05TKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwg
Y29uZGl0aW9ucyBmb3Igc3VwcG9ydGluZyB0aGUgSFcgQUVDIGFyZSBmdWxmaWxsZWQuCi0gIC8v
IEl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGVuYWJsZSB0aGUgSFcgQUVDIGlmIHRoaXMgbWV0
aG9kIHJldHVybnMgZmFsc2UuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjYW5Vc2VBY291c3Rp
Y0VjaG9DYW5jZWxlcigpIHsKLSAgICBib29sZWFuIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVy
ID0gaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpCi0gICAgICAgICYmICFXZWJSdGNB
dWRpb1V0aWxzLnVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKQotICAgICAgICAm
JiAhaXNBY291c3RpY0VjaG9DYW5jZWxlckJsYWNrbGlzdGVkKCkgJiYgIWlzQWNvdXN0aWNFY2hv
Q2FuY2VsZXJFeGNsdWRlZEJ5VVVJRCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJjYW5Vc2VBY291
c3RpY0VjaG9DYW5jZWxlcjogIiArIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKTsKLSAgICBy
ZXR1cm4gY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXI7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRy
dWUgaWYgYWxsIGNvbmRpdGlvbnMgZm9yIHN1cHBvcnRpbmcgdGhlIEhXIE5TIGFyZSBmdWxmaWxs
ZWQuCi0gIC8vIEl0IHdpbGwgbm90IGJlIHBvc3NpYmxlIHRvIGVuYWJsZSB0aGUgSFcgTlMgaWYg
dGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGNhblVz
ZU5vaXNlU3VwcHJlc3NvcigpIHsKLSAgICBib29sZWFuIGNhblVzZU5vaXNlU3VwcHJlc3NvciA9
IGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkKLSAgICAgICAgJiYgIVdlYlJ0Y0F1ZGlvVXRp
bHMudXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoKSAmJiAhaXNOb2lzZVN1cHByZXNzb3JC
bGFja2xpc3RlZCgpCi0gICAgICAgICYmICFpc05vaXNlU3VwcHJlc3NvckV4Y2x1ZGVkQnlVVUlE
KCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgImNhblVzZU5vaXNlU3VwcHJlc3NvcjogIiArIGNhblVz
ZU5vaXNlU3VwcHJlc3Nvcik7Ci0gICAgcmV0dXJuIGNhblVzZU5vaXNlU3VwcHJlc3NvcjsKLSAg
fQotCi0gIHN0YXRpYyBXZWJSdGNBdWRpb0VmZmVjdHMgY3JlYXRlKCkgewotICAgIC8vIFJldHVy
biBudWxsIGlmIFZvSVAgZWZmZWN0cyAoQUVDLCBBR0MgYW5kIE5TKSBhcmUgbm90IHN1cHBvcnRl
ZC4KLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuT3JIaWdoZXIo
KSkgewotICAgICAgTG9nZ2luZy53KFRBRywgIkFQSSBsZXZlbCAxNiBvciBoaWdoZXIgaXMgcmVx
dWlyZWQhIik7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBXZWJS
dGNBdWRpb0VmZmVjdHMoKTsKLSAgfQotCi0gIHByaXZhdGUgV2ViUnRjQXVkaW9FZmZlY3RzKCkg
ewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFk
SW5mbygpKTsKLSAgfQotCi0gIC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlIG9yIGRpc2Fi
bGUgdGhlIHBsYXRmb3JtIEFFQy4gSXQgbW9kaWZpZXMKLSAgLy8gfHNob3VsZEVuYWJsZUFlY3wg
d2hpY2ggaXMgdXNlZCBpbiBlbmFibGUoKSB3aGVyZSB0aGUgYWN0dWFsIHN0YXRlCi0gIC8vIG9m
IHRoZSBBRUMgZWZmZWN0IGlzIG1vZGlmaWVkLiBSZXR1cm5zIHRydWUgaWYgSFcgQUVDIGlzIHN1
cHBvcnRlZCBhbmQKLSAgLy8gZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgYm9vbGVhbiBzZXRB
RUMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic2V0QUVDKCIgKyBlbmFi
bGUgKyAiKSIpOwotICAgIGlmICghY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKSkgewotICAg
ICAgTG9nZ2luZy53KFRBRywgIlBsYXRmb3JtIEFFQyBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAg
ICBzaG91bGRFbmFibGVBZWMgPSBmYWxzZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKGFlYyAhPSBudWxsICYmIChlbmFibGUgIT0gc2hvdWxkRW5hYmxlQWVjKSkgewotICAg
ICAgTG9nZ2luZy5lKFRBRywgIlBsYXRmb3JtIEFFQyBzdGF0ZSBjYW4ndCBiZSBtb2RpZmllZCB3
aGlsZSByZWNvcmRpbmciKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc2hvdWxk
RW5hYmxlQWVjID0gZW5hYmxlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gQ2FsbCB0
aGlzIG1ldGhvZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gTlMuIEl0IG1vZGlm
aWVzCi0gIC8vIHxzaG91bGRFbmFibGVOc3wgd2hpY2ggaXMgdXNlZCBpbiBlbmFibGUoKSB3aGVy
ZSB0aGUgYWN0dWFsIHN0YXRlCi0gIC8vIG9mIHRoZSBOUyBlZmZlY3QgaXMgbW9kaWZpZWQuIFJl
dHVybnMgdHJ1ZSBpZiBIVyBOUyBpcyBzdXBwb3J0ZWQgYW5kCi0gIC8vIGZhbHNlIG90aGVyd2lz
ZS4KLSAgcHVibGljIGJvb2xlYW4gc2V0TlMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAic2V0TlMoIiArIGVuYWJsZSArICIpIik7Ci0gICAgaWYgKCFjYW5Vc2VOb2lzZVN1
cHByZXNzb3IoKSkgewotICAgICAgTG9nZ2luZy53KFRBRywgIlBsYXRmb3JtIE5TIGlzIG5vdCBz
dXBwb3J0ZWQiKTsKLSAgICAgIHNob3VsZEVuYWJsZU5zID0gZmFsc2U7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChucyAhPSBudWxsICYmIChlbmFibGUgIT0gc2hvdWxkRW5h
YmxlTnMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiUGxhdGZvcm0gTlMgc3RhdGUgY2FuJ3Qg
YmUgbW9kaWZpZWQgd2hpbGUgcmVjb3JkaW5nIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHNob3VsZEVuYWJsZU5zID0gZW5hYmxlOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0K
LSAgcHVibGljIHZvaWQgZW5hYmxlKGludCBhdWRpb1Nlc3Npb24pIHsKLSAgICBMb2dnaW5nLmQo
VEFHLCAiZW5hYmxlKGF1ZGlvU2Vzc2lvbj0iICsgYXVkaW9TZXNzaW9uICsgIikiKTsKLSAgICBh
c3NlcnRUcnVlKGFlYyA9PSBudWxsKTsKLSAgICBhc3NlcnRUcnVlKG5zID09IG51bGwpOwotCi0g
ICAgLy8gQWRkIGxvZ2dpbmcgb2Ygc3VwcG9ydGVkIGVmZmVjdHMgYnV0IGZpbHRlciBvdXQgIlZv
SVAgZWZmZWN0cyIsIGkuZS4sCi0gICAgLy8gQUVDLCBBRUMgYW5kIE5TLgotICAgIGZvciAoRGVz
Y3JpcHRvciBkIDogQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCkpIHsKLSAgICAgIGlmIChlZmZl
Y3RUeXBlSXNWb0lQKGQudHlwZSkgfHwgREVCVUcpIHsKLSAgICAgICAgTG9nZ2luZy5kKFRBRywg
Im5hbWU6ICIgKyBkLm5hbWUgKyAiLCAiCi0gICAgICAgICAgICAgICAgKyAibW9kZTogIiArIGQu
Y29ubmVjdE1vZGUgKyAiLCAiCi0gICAgICAgICAgICAgICAgKyAiaW1wbGVtZW50b3I6ICIgKyBk
LmltcGxlbWVudG9yICsgIiwgIgotICAgICAgICAgICAgICAgICsgIlVVSUQ6ICIgKyBkLnV1aWQp
OwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9y
dGVkKCkpIHsKLSAgICAgIC8vIENyZWF0ZSBhbiBBY291c3RpY0VjaG9DYW5jZWxlciBhbmQgYXR0
YWNoIGl0IHRvIHRoZSBBdWRpb1JlY29yZCBvbgotICAgICAgLy8gdGhlIHNwZWNpZmllZCBhdWRp
byBzZXNzaW9uLgotICAgICAgYWVjID0gQWNvdXN0aWNFY2hvQ2FuY2VsZXIuY3JlYXRlKGF1ZGlv
U2Vzc2lvbik7Ci0gICAgICBpZiAoYWVjICE9IG51bGwpIHsKLSAgICAgICAgYm9vbGVhbiBlbmFi
bGVkID0gYWVjLmdldEVuYWJsZWQoKTsKLSAgICAgICAgYm9vbGVhbiBlbmFibGUgPSBzaG91bGRF
bmFibGVBZWMgJiYgY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKTsKLSAgICAgICAgaWYgKGFl
Yy5zZXRFbmFibGVkKGVuYWJsZSkgIT0gQXVkaW9FZmZlY3QuU1VDQ0VTUykgewotICAgICAgICAg
IExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gc2V0IHRoZSBBY291c3RpY0VjaG9DYW5jZWxlciBz
dGF0ZSIpOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcuZChUQUcsICJBY291c3RpY0VjaG9D
YW5jZWxlcjogd2FzICIgKyAoZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpCi0gICAg
ICAgICAgICAgICAgKyAiLCBlbmFibGU6ICIgKyBlbmFibGUgKyAiLCBpcyBub3c6ICIKLSAgICAg
ICAgICAgICAgICArIChhZWMuZ2V0RW5hYmxlZCgpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikp
OwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBjcmVh
dGUgdGhlIEFjb3VzdGljRWNob0NhbmNlbGVyIGluc3RhbmNlIik7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkpIHsKLSAgICAgIC8vIENyZWF0
ZSBhbiBOb2lzZVN1cHByZXNzb3IgYW5kIGF0dGFjaCBpdCB0byB0aGUgQXVkaW9SZWNvcmQgb24g
dGhlCi0gICAgICAvLyBzcGVjaWZpZWQgYXVkaW8gc2Vzc2lvbi4KLSAgICAgIG5zID0gTm9pc2VT
dXBwcmVzc29yLmNyZWF0ZShhdWRpb1Nlc3Npb24pOwotICAgICAgaWYgKG5zICE9IG51bGwpIHsK
LSAgICAgICAgYm9vbGVhbiBlbmFibGVkID0gbnMuZ2V0RW5hYmxlZCgpOwotICAgICAgICBib29s
ZWFuIGVuYWJsZSA9IHNob3VsZEVuYWJsZU5zICYmIGNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwot
ICAgICAgICBpZiAobnMuc2V0RW5hYmxlZChlbmFibGUpICE9IEF1ZGlvRWZmZWN0LlNVQ0NFU1Mp
IHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHNldCB0aGUgTm9pc2VTdXBw
cmVzc29yIHN0YXRlIik7Ci0gICAgICAgIH0KLSAgICAgICAgTG9nZ2luZy5kKFRBRywgIk5vaXNl
U3VwcHJlc3Nvcjogd2FzICIgKyAoZW5hYmxlZCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpICsg
IiwgZW5hYmxlOiAiCi0gICAgICAgICAgICAgICAgKyBlbmFibGUgKyAiLCBpcyBub3c6ICIgKyAo
bnMuZ2V0RW5hYmxlZCgpID8gImVuYWJsZWQiIDogImRpc2FibGVkIikpOwotICAgICAgfSBlbHNl
IHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBjcmVhdGUgdGhlIE5vaXNlU3Vw
cHJlc3NvciBpbnN0YW5jZSIpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIC8vIFJlbGVhc2Vz
IGFsbCBuYXRpdmUgYXVkaW8gZWZmZWN0IHJlc291cmNlcy4gSXQgaXMgYSBnb29kIHByYWN0aWNl
IHRvCi0gIC8vIHJlbGVhc2UgdGhlIGVmZmVjdCBlbmdpbmUgd2hlbiBub3QgaW4gdXNlIGFzIGNv
bnRyb2wgY2FuIGJlIHJldHVybmVkCi0gIC8vIHRvIG90aGVyIGFwcGxpY2F0aW9ucyBvciB0aGUg
bmF0aXZlIHJlc291cmNlcyByZWxlYXNlZC4KLSAgcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAicmVsZWFzZSIpOwotICAgIGlmIChhZWMgIT0gbnVsbCkgewotICAg
ICAgYWVjLnJlbGVhc2UoKTsKLSAgICAgIGFlYyA9IG51bGw7Ci0gICAgfQotICAgIGlmIChucyAh
PSBudWxsKSB7Ci0gICAgICBucy5yZWxlYXNlKCk7Ci0gICAgICBucyA9IG51bGw7Ci0gICAgfQot
ICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGZvciBlZmZlY3QgdHlwZXMgaW4gfHR5cGV8IHRoYXQg
YXJlIG9mICJWb0lQIiB0eXBlczoKLSAgLy8gQWNvdXN0aWMgRWNobyBDYW5jZWxlciAoQUVDKSBv
ciBBdXRvbWF0aWMgR2FpbiBDb250cm9sIChBR0MpIG9yCi0gIC8vIE5vaXNlIFN1cHByZXNzb3Ig
KE5TKS4gTm90ZSB0aGF0LCBhbiBleHRyYSBjaGVjayBmb3Igc3VwcG9ydCBpcyBuZWVkZWQKLSAg
Ly8gaW4gZWFjaCBjb21wYXJpc29uIHNpbmNlIHNvbWUgZGV2aWNlcyBpbmNsdWRlcyBlZmZlY3Rz
IGluIHRoZQotICAvLyBBdWRpb0VmZmVjdC5EZXNjcmlwdG9yIGFycmF5IHRoYXQgYXJlIGFjdHVh
bGx5IG5vdCBhdmFpbGFibGUgb24gdGhlIGRldmljZS4KLSAgLy8gQXMgYW4gZXhhbXBsZTogU2Ft
c3VuZyBHYWxheHkgUzYgaW5jbHVkZXMgYW4gQUdDIGluIHRoZSBkZXNjcmlwdG9yIGJ1dAotICAv
LyBBdXRvbWF0aWNHYWluQ29udHJvbC5pc0F2YWlsYWJsZSgpIHJldHVybnMgZmFsc2UuCi0gIEBU
YXJnZXRBcGkoMTgpCi0gIHByaXZhdGUgYm9vbGVhbiBlZmZlY3RUeXBlSXNWb0lQKFVVSUQgdHlw
ZSkgewotICAgIGlmICghV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5NUjJPckhp
Z2hlcigpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIChBdWRpb0VmZmVjdC5F
RkZFQ1RfVFlQRV9BRUMuZXF1YWxzKHR5cGUpICYmIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBw
b3J0ZWQoKSkKLSAgICAgICAgfHwgKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX05TLmVxdWFscyh0
eXBlKSAmJiBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpKTsKLSAgfQotCi0gIC8vIEhlbHBl
ciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiB3aGVuIGFuIGFzc2VydGlvbiBoYXMg
ZmFpbGVkLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25kaXRp
b24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVy
cm9yKCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIC8v
IFJldHVybnMgdGhlIGNhY2hlZCBjb3B5IG9mIHRoZSBhdWRpbyBlZmZlY3RzIGFycmF5LCBpZiBh
dmFpbGFibGUsIG9yCi0gIC8vIHF1ZXJpZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0gZm9yIHRoZSBs
aXN0IG9mIGVmZmVjdHMuCi0gIHByaXZhdGUgc3RhdGljIERlc2NyaXB0b3JbXSBnZXRBdmFpbGFi
bGVFZmZlY3RzKCkgewotICAgIGlmIChjYWNoZWRFZmZlY3RzICE9IG51bGwpIHsKLSAgICAgIHJl
dHVybiBjYWNoZWRFZmZlY3RzOwotICAgIH0KLSAgICAvLyBUaGUgY2FjaGluZyBpcyBiZXN0IGVm
Zm9ydCBvbmx5IC0gaWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gc2V2ZXJhbAotICAgIC8v
IHRocmVhZHMgaW4gcGFyYWxsZWwsIHRoZXkgbWF5IGVuZCB1cCBkb2luZyB0aGUgdW5kZXJseWlu
ZyBPUyBjYWxsCi0gICAgLy8gbXVsdGlwbGUgdGltZXMuIEl0J3Mgbm9ybWFsbHkgb25seSBjYWxs
ZWQgb24gb25lIHRocmVhZCBzbyB0aGVyZSdzIG5vCi0gICAgLy8gcmVhbCBuZWVkIHRvIG9wdGlt
aXplIGZvciB0aGUgbXVsdGlwbGUgdGhyZWFkcyBjYXNlLgotICAgIGNhY2hlZEVmZmVjdHMgPSBB
dWRpb0VmZmVjdC5xdWVyeUVmZmVjdHMoKTsKLSAgICByZXR1cm4gY2FjaGVkRWZmZWN0czsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlZmZlY3Qgb2YgdGhlIHNwZWNpZmllZCB0eXBl
IGlzIGF2YWlsYWJsZS4gRnVuY3Rpb25hbGx5Ci0gIC8vIGVxdWl2YWxlbnQgdG8gKE5vaXNlU3Vw
cHJlc3NvcnxBdXRvbWF0aWNHYWluQ29udHJvbHwuLi4pLmlzQXZhaWxhYmxlKCksIGJ1dAotICAv
LyBmYXN0ZXIgYXMgaXQgYXZvaWRzIHRoZSBleHBlbnNpdmUgT1MgY2FsbCB0byBlbnVtZXJhdGUg
ZWZmZWN0cy4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0VmZmVjdFR5cGVBdmFpbGFibGUo
VVVJRCBlZmZlY3RUeXBlKSB7Ci0gICAgRGVzY3JpcHRvcltdIGVmZmVjdHMgPSBnZXRBdmFpbGFi
bGVFZmZlY3RzKCk7Ci0gICAgaWYgKGVmZmVjdHMgPT0gbnVsbCkgewotICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgICBmb3IgKERlc2NyaXB0b3IgZCA6IGVmZmVjdHMpIHsKLSAgICAgIGlm
IChkLnR5cGUuZXF1YWxzKGVmZmVjdFR5cGUpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb01hbmFnZXIuamF2
YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vl
bmdpbmUvV2ViUnRjQXVkaW9NYW5hZ2VyLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb01hbmFn
ZXIuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDM0NyArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgb3JnLndl
YnJ0Yy5Mb2dnaW5nOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9uLlRhcmdldEFwaTsKLWlt
cG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0u
UGFja2FnZU1hbmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1hdDsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlv
UmVjb3JkOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9UcmFjazsKLWltcG9ydCBhbmRyb2lk
Lm9zLkJ1aWxkOwotCi1pbXBvcnQgamF2YS51dGlsLlRpbWVyOwotaW1wb3J0IGphdmEudXRpbC5U
aW1lclRhc2s7Ci0KLS8vIFdlYlJ0Y0F1ZGlvTWFuYWdlciBoYW5kbGVzIHRhc2tzIHRoYXQgdXNl
cyBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlci4KLS8vIEF0IGNvbnN0cnVjdGlvbiwgc3RvcmVB
dWRpb1BhcmFtZXRlcnMoKSBpcyBjYWxsZWQgYW5kIGl0IHJldHJpZXZlcwotLy8gZnVuZGFtZW50
YWwgYXVkaW8gcGFyYW1ldGVycyBsaWtlIG5hdGl2ZSBzYW1wbGUgcmF0ZSBhbmQgbnVtYmVyIG9m
IGNoYW5uZWxzLgotLy8gVGhlIHJlc3VsdCBpcyB0aGVuIHByb3ZpZGVkIHRvIHRoZSBjYWxsZXIg
YnkgbmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRlcnMoKS4KLS8vIEl0IGlzIGFsc28gcG9zc2libGUg
dG8gY2FsbCBpbml0KCkgdG8gc2V0IHVwIHRoZSBhdWRpbyBlbnZpcm9ubWVudCBmb3IgYmVzdAot
Ly8gcG9zc2libGUgIlZvSVAgcGVyZm9ybWFuY2UiLiBBbGwgc2V0dGluZ3MgZG9uZSBpbiBpbml0
KCkgYXJlIHJldmVydGVkIGJ5Ci0vLyBkaXNwb3NlKCkuIFRoaXMgY2xhc3MgY2FuIGFsc28gYmUg
dXNlZCB3aXRob3V0IGNhbGxpbmcgaW5pdCgpIGlmIHRoZSB1c2VyCi0vLyBwcmVmZXJzIHRvIHNl
dCB1cCB0aGUgYXVkaW8gZW52aXJvbm1lbnQgc2VwYXJhdGVseS4gSG93ZXZlciwgaXQgaXMKLS8v
IHJlY29tbWVuZGVkIHRvIGFsd2F5cyB1c2UgQXVkaW9NYW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNB
VElPTi4KLXB1YmxpYyBjbGFzcyBXZWJSdGNBdWRpb01hbmFnZXIgewotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
U3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb01hbmFnZXIiOwotCi0gIHByaXZhdGUgc3RhdGljIGJv
b2xlYW4gYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZSA9IGZhbHNlOwotICBwcml2YXRl
IHN0YXRpYyBib29sZWFuIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJc092ZXJyaWRk
ZW4gPSBmYWxzZTsKLQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIG92ZXJyaWRlIHRoZSBkZWF1
bHQgbGlzdCBvZiBibGFja2xpc3RlZCBkZXZpY2VzCi0gIC8vIHNwZWNpZmllZCBpbiBXZWJSdGNB
dWRpb1V0aWxzLkJMQUNLTElTVEVEX09QRU5fU0xfRVNfTU9ERUxTLgotICAvLyBBbGxvd3MgYW4g
YXBwIHRvIHRha2UgY29udHJvbCBvdmVyIHdoaWNoIGRldmljZXMgdG8gZXhsdWRlIGZyb20gdXNp
bmcKLSAgLy8gdGhlIE9wZW5TTCBFUyBhdWRpbyBvdXRwdXQgcGF0aAotICBwdWJsaWMgc3RhdGlj
IHN5bmNocm9uaXplZCB2b2lkIHNldEJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UoYm9v
bGVhbiBlbmFibGUpIHsKLSAgICBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlSXNPdmVy
cmlkZGVuID0gdHJ1ZTsKLSAgICBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlID0gZW5h
YmxlOwotICB9Ci0KLSAgLy8gRGVmYXVsdCBhdWRpbyBkYXRhIGZvcm1hdCBpcyBQQ00gMTYgYml0
IHBlciBzYW1wbGUuCi0gIC8vIEd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZp
Y2VzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUU19QRVJfU0FNUExFID0gMTY7Ci0K
LSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUiA9IDI1
NjsKLQotICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3RlcmVvIHN1cHBvcnQgZm9yIHBsYXlvdXQu
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDSEFOTkVMUyA9IDE7Ci0KLSAgLy8gTGlzdCBv
ZiBwb3NzaWJsZSBhdWRpbyBtb2Rlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10g
QVVESU9fTU9ERVMgPSBuZXcgU3RyaW5nW10gewotICAgICAgIk1PREVfTk9STUFMIiwgIk1PREVf
UklOR1RPTkUiLCAiTU9ERV9JTl9DQUxMIiwgIk1PREVfSU5fQ09NTVVOSUNBVElPTiIsCi0gIH07
Ci0KLSAgLy8gUHJpdmF0ZSB1dGlsaXR5IGNsYXNzIHRoYXQgcGVyaW9kaWNhbGx5IGNoZWNrcyBh
bmQgbG9ncyB0aGUgdm9sdW1lIGxldmVsCi0gIC8vIG9mIHRoZSBhdWRpbyBzdHJlYW0gdGhhdCBp
cyBjdXJyZW50bHkgY29udHJvbGxlZCBieSB0aGUgdm9sdW1lIGNvbnRyb2wuCi0gIC8vIEEgdGlt
ZXIgdHJpZ2dlcnMgbG9ncyBvbmNlIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIHRoZSB0aW1lcidzIGFz
c29jaWF0ZWQKLSAgLy8gdGhyZWFkIGlzIG5hbWVkICJXZWJSdGNWb2x1bWVMZXZlbExvZ2dlclRo
cmVhZCIuCi0gIHByaXZhdGUgc3RhdGljIGNsYXNzIFZvbHVtZUxvZ2dlciB7Ci0gICAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRIUkVBRF9OQU1FID0gIldlYlJ0Y1ZvbHVtZUxldmVsTG9n
Z2VyVGhyZWFkIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgVElNRVJfUEVSSU9EX0lO
X1NFQ09ORFMgPSAxMDsKLQotICAgIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFu
YWdlcjsKLSAgICBwcml2YXRlIFRpbWVyIHRpbWVyOwotCi0gICAgcHVibGljIFZvbHVtZUxvZ2dl
cihBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyKSB7Ci0gICAgICB0aGlzLmF1ZGlvTWFuYWdlciA9
IGF1ZGlvTWFuYWdlcjsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKLSAgICAg
IHRpbWVyID0gbmV3IFRpbWVyKFRIUkVBRF9OQU1FKTsKLSAgICAgIHRpbWVyLnNjaGVkdWxlKG5l
dyBMb2dWb2x1bWVUYXNrKGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1NYXhWb2x1bWUoQXVkaW9NYW5h
Z2VyLlNUUkVBTV9SSU5HKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpb01hbmFnZXIu
Z2V0U3RyZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCkpLAotICAg
ICAgICAgIDAsIFRJTUVSX1BFUklPRF9JTl9TRUNPTkRTICogMTAwMCk7Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBjbGFzcyBMb2dWb2x1bWVUYXNrIGV4dGVuZHMgVGltZXJUYXNrIHsKLSAgICAgIHBy
aXZhdGUgZmluYWwgaW50IG1heFJpbmdWb2x1bWU7Ci0gICAgICBwcml2YXRlIGZpbmFsIGludCBt
YXhWb2ljZUNhbGxWb2x1bWU7Ci0KLSAgICAgIExvZ1ZvbHVtZVRhc2soaW50IG1heFJpbmdWb2x1
bWUsIGludCBtYXhWb2ljZUNhbGxWb2x1bWUpIHsKLSAgICAgICAgdGhpcy5tYXhSaW5nVm9sdW1l
ID0gbWF4UmluZ1ZvbHVtZTsKLSAgICAgICAgdGhpcy5tYXhWb2ljZUNhbGxWb2x1bWUgPSBtYXhW
b2ljZUNhbGxWb2x1bWU7Ci0gICAgICB9Ci0KLSAgICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAg
ICAgICAgZmluYWwgaW50IG1vZGUgPSBhdWRpb01hbmFnZXIuZ2V0TW9kZSgpOwotICAgICAgICBp
ZiAobW9kZSA9PSBBdWRpb01hbmFnZXIuTU9ERV9SSU5HVE9ORSkgewotICAgICAgICAgIExvZ2dp
bmcuZChUQUcsICJTVFJFQU1fUklORyBzdHJlYW0gdm9sdW1lOiAiCi0gICAgICAgICAgICAgICAg
ICArIGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9SSU5H
KSArICIgKG1heD0iCi0gICAgICAgICAgICAgICAgICArIG1heFJpbmdWb2x1bWUgKyAiKSIpOwot
ICAgICAgICB9IGVsc2UgaWYgKG1vZGUgPT0gQXVkaW9NYW5hZ2VyLk1PREVfSU5fQ09NTVVOSUNB
VElPTikgewotICAgICAgICAgIExvZ2dpbmcuZChUQUcsICJWT0lDRV9DQUxMIHN0cmVhbSB2b2x1
bWU6ICIKLSAgICAgICAgICAgICAgICAgICsgYXVkaW9NYW5hZ2VyLmdldFN0cmVhbVZvbHVtZShB
dWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwpICsgIiAobWF4PSIKLSAgICAgICAgICAgICAg
ICAgICsgbWF4Vm9pY2VDYWxsVm9sdW1lICsgIikiKTsKLSAgICAgICAgfQotICAgICAgfQotICAg
IH0KLQotICAgIHByaXZhdGUgdm9pZCBzdG9wKCkgewotICAgICAgaWYgKHRpbWVyICE9IG51bGwp
IHsKLSAgICAgICAgdGltZXIuY2FuY2VsKCk7Ci0gICAgICAgIHRpbWVyID0gbnVsbDsKLSAgICAg
IH0KLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlQXVkaW9NYW5hZ2Vy
OwotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBBdWRp
b01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0aWFsaXplZCA9
IGZhbHNlOwotICBwcml2YXRlIGludCBuYXRpdmVTYW1wbGVSYXRlOwotICBwcml2YXRlIGludCBu
YXRpdmVDaGFubmVsczsKLQotICBwcml2YXRlIGJvb2xlYW4gaGFyZHdhcmVBRUM7Ci0gIHByaXZh
dGUgYm9vbGVhbiBoYXJkd2FyZUFHQzsKLSAgcHJpdmF0ZSBib29sZWFuIGhhcmR3YXJlTlM7Ci0g
IHByaXZhdGUgYm9vbGVhbiBsb3dMYXRlbmN5T3V0cHV0OwotICBwcml2YXRlIGJvb2xlYW4gbG93
TGF0ZW5jeUlucHV0OwotICBwcml2YXRlIGJvb2xlYW4gcHJvQXVkaW87Ci0gIHByaXZhdGUgaW50
IHNhbXBsZVJhdGU7Ci0gIHByaXZhdGUgaW50IGNoYW5uZWxzOwotICBwcml2YXRlIGludCBvdXRw
dXRCdWZmZXJTaXplOwotICBwcml2YXRlIGludCBpbnB1dEJ1ZmZlclNpemU7Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBWb2x1bWVMb2dnZXIgdm9sdW1lTG9nZ2VyOwotCi0gIFdlYlJ0Y0F1ZGlvTWFuYWdl
cihDb250ZXh0IGNvbnRleHQsIGxvbmcgbmF0aXZlQXVkaW9NYW5hZ2VyKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAg
IHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5uYXRpdmVBdWRpb01hbmFnZXIgPSBu
YXRpdmVBdWRpb01hbmFnZXI7Ci0gICAgYXVkaW9NYW5hZ2VyID0gKEF1ZGlvTWFuYWdlcikgY29u
dGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVESU9fU0VSVklDRSk7Ci0gICAgaWYgKERF
QlVHKSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0RldmljZUluZm8oVEFHKTsKLSAgICB9
Ci0gICAgdm9sdW1lTG9nZ2VyID0gbmV3IFZvbHVtZUxvZ2dlcihhdWRpb01hbmFnZXIpOwotICAg
IHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCk7Ci0gICAgbmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRlcnMo
c2FtcGxlUmF0ZSwgY2hhbm5lbHMsIGhhcmR3YXJlQUVDLCBoYXJkd2FyZUFHQywgaGFyZHdhcmVO
UywKLSAgICAgICAgbG93TGF0ZW5jeU91dHB1dCwgbG93TGF0ZW5jeUlucHV0LCBwcm9BdWRpbywg
b3V0cHV0QnVmZmVyU2l6ZSwgaW5wdXRCdWZmZXJTaXplLAotICAgICAgICBuYXRpdmVBdWRpb01h
bmFnZXIpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGluaXQoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgImluaXQiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIGlm
IChpbml0aWFsaXplZCkgewotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIExvZ2dpbmcu
ZChUQUcsICJhdWRpbyBtb2RlIGlzOiAiICsgQVVESU9fTU9ERVNbYXVkaW9NYW5hZ2VyLmdldE1v
ZGUoKV0pOwotICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICB2b2x1bWVMb2dnZXIuc3RhcnQo
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBkaXNwb3NlKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJkaXNwb3NlIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFk
SW5mbygpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICByZXR1cm47Ci0gICAgfQot
ICAgIHZvbHVtZUxvZ2dlci5zdG9wKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNDb21t
dW5pY2F0aW9uTW9kZUVuYWJsZWQoKSB7Ci0gICAgcmV0dXJuIChhdWRpb01hbmFnZXIuZ2V0TW9k
ZSgpID09IEF1ZGlvTWFuYWdlci5NT0RFX0lOX0NPTU1VTklDQVRJT04pOwotICB9Ci0KLSAgcHJp
dmF0ZSBib29sZWFuIGlzRGV2aWNlQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCkgewotICAg
IGJvb2xlYW4gYmxhY2tsaXN0ZWQgPSBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlSXNP
dmVycmlkZGVuCi0gICAgICAgID8gYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZQotICAg
ICAgICA6IFdlYlJ0Y0F1ZGlvVXRpbHMuZGV2aWNlSXNCbGFja2xpc3RlZEZvck9wZW5TTEVTVXNh
Z2UoKTsKLSAgICBpZiAoYmxhY2tsaXN0ZWQpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsIEJ1aWxk
Lk1PREVMICsgIiBpcyBibGFja2xpc3RlZCBmb3IgT3BlblNMIEVTIHVzYWdlISIpOwotICAgIH0K
LSAgICByZXR1cm4gYmxhY2tsaXN0ZWQ7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgc3RvcmVBdWRp
b1BhcmFtZXRlcnMoKSB7Ci0gICAgLy8gT25seSBtb25vIGlzIHN1cHBvcnRlZCBjdXJyZW50bHkg
KGluIGJvdGggZGlyZWN0aW9ucykuCi0gICAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN1cHBvcnQg
Zm9yIHN0ZXJlbyBwbGF5b3V0LgotICAgIGNoYW5uZWxzID0gQ0hBTk5FTFM7Ci0gICAgc2FtcGxl
UmF0ZSA9IGdldE5hdGl2ZU91dHB1dFNhbXBsZVJhdGUoKTsKLSAgICBoYXJkd2FyZUFFQyA9IGlz
QWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKTsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiB1
c2Ugb2YgaGFyZHdhcmUgQUdDIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEN1cnJlbnRseQotICAg
IC8vIGhhcmRjb2RlZCB0byBmYWxzZS4gVG8gYmUgcmVtb3ZlZC4KLSAgICBoYXJkd2FyZUFHQyA9
IGZhbHNlOwotICAgIGhhcmR3YXJlTlMgPSBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpOwot
ICAgIGxvd0xhdGVuY3lPdXRwdXQgPSBpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0ZWQoKTsKLSAg
ICBsb3dMYXRlbmN5SW5wdXQgPSBpc0xvd0xhdGVuY3lJbnB1dFN1cHBvcnRlZCgpOwotICAgIHBy
b0F1ZGlvID0gaXNQcm9BdWRpb1N1cHBvcnRlZCgpOwotICAgIG91dHB1dEJ1ZmZlclNpemUgPSBs
b3dMYXRlbmN5T3V0cHV0ID8gZ2V0TG93TGF0ZW5jeU91dHB1dEZyYW1lc1BlckJ1ZmZlcigpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRNaW5PdXRwdXRGcmFt
ZVNpemUoc2FtcGxlUmF0ZSwgY2hhbm5lbHMpOwotICAgIGlucHV0QnVmZmVyU2l6ZSA9IGxvd0xh
dGVuY3lJbnB1dCA/IGdldExvd0xhdGVuY3lJbnB1dEZyYW1lc1BlckJ1ZmZlcigpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0TWluSW5wdXRGcmFtZVNpemUoc2Ft
cGxlUmF0ZSwgY2hhbm5lbHMpOwotICB9Ci0KLSAgLy8gR2V0cyB0aGUgY3VycmVudCBlYXJwaWVj
ZSBzdGF0ZS4KLSAgcHJpdmF0ZSBib29sZWFuIGhhc0VhcnBpZWNlKCkgewotICAgIHJldHVybiBj
b250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdl
ci5GRUFUVVJFX1RFTEVQSE9OWSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgbG93LWxh
dGVuY3kgYXVkaW8gb3V0cHV0IGlzIHN1cHBvcnRlZC4KLSAgcHJpdmF0ZSBib29sZWFuIGlzTG93
TGF0ZW5jeU91dHB1dFN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gaXNPcGVuU0xFU1N1cHBvcnRl
ZCgpCi0gICAgICAgICYmIGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIoKS5oYXNTeXN0ZW1GZWF0
dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfQVVESU9fTE9XX0xBVEVOQ1kpOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyB0cnVlIGlmIGxvdy1sYXRlbmN5IGF1ZGlvIGlucHV0IGlzIHN1cHBvcnRlZC4K
LSAgLy8gVE9ETyhoZW5yaWthKTogcmVtb3ZlIHRoZSBoYXJkY29kZWQgZmFsc2UgcmV0dXJuIHZh
bHVlIHdoZW4gT3BlblNMIEVTCi0gIC8vIGlucHV0IHBlcmZvcm1hbmNlIGhhcyBiZWVuIGV2YWx1
YXRlZCBhbmQgdGVzdGVkIG1vcmUuCi0gIHB1YmxpYyBib29sZWFuIGlzTG93TGF0ZW5jeUlucHV0
U3VwcG9ydGVkKCkgewotICAgIC8vIFRPRE8oaGVucmlrYSk6IGludmVzdGlnYXRlIGlmIHNvbWUg
c29ydCBvZiBkZXZpY2UgbGlzdCBpcyBuZWVkZWQgaGVyZQotICAgIC8vIGFzIHdlbGwuIFRoZSBO
REsgZG9jIHN0YXRlcyB0aGF0OiAiQXMgb2YgQVBJIGxldmVsIDIxLCBsb3dlciBsYXRlbmN5Ci0g
ICAgLy8gYXVkaW8gaW5wdXQgaXMgc3VwcG9ydGVkIG9uIHNlbGVjdCBkZXZpY2VzLiBUbyB0YWtl
IGFkdmFudGFnZSBvZiB0aGlzCi0gICAgLy8gZmVhdHVyZSwgZmlyc3QgY29uZmlybSB0aGF0IGxv
d2VyIGxhdGVuY3kgb3V0cHV0IGlzIGF2YWlsYWJsZSIuCi0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlv
VXRpbHMucnVubmluZ09uTG9sbGlwb3BPckhpZ2hlcigpICYmIGlzTG93TGF0ZW5jeU91dHB1dFN1
cHBvcnRlZCgpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaGFzIHBy
b2Zlc3Npb25hbCBhdWRpbyBsZXZlbCBvZiBmdW5jdGlvbmFsaXR5Ci0gIC8vIGFuZCB0aGVyZWZv
cmUgc3VwcG9ydHMgdGhlIGxvd2VzdCBwb3NzaWJsZSByb3VuZC10cmlwIGxhdGVuY3kuCi0gIHBy
aXZhdGUgYm9vbGVhbiBpc1Byb0F1ZGlvU3VwcG9ydGVkKCkgewotICAgIHJldHVybiBXZWJSdGNB
dWRpb1V0aWxzLnJ1bm5pbmdPbk1hcnNobWFsbG93T3JIaWdoZXIoKQotICAgICAgICAmJiBjb250
ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCkuaGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5G
RUFUVVJFX0FVRElPX1BSTyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBuYXRpdmUgb3V0cHV0
IHNhbXBsZSByYXRlIGZvciB0aGlzIGRldmljZSdzIG91dHB1dCBzdHJlYW0uCi0gIHByaXZhdGUg
aW50IGdldE5hdGl2ZU91dHB1dFNhbXBsZVJhdGUoKSB7Ci0gICAgLy8gT3ZlcnJpZGUgdGhpcyBp
ZiB3ZSdyZSBydW5uaW5nIG9uIGFuIG9sZCBlbXVsYXRvciBpbWFnZSB3aGljaCBvbmx5Ci0gICAg
Ly8gc3VwcG9ydHMgOCBrSHogYW5kIGRvZXNuJ3Qgc3VwcG9ydCBQUk9QRVJUWV9PVVRQVVRfU0FN
UExFX1JBVEUuCi0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uRW11bGF0b3IoKSkg
ewotICAgICAgTG9nZ2luZy5kKFRBRywgIlJ1bm5pbmcgZW11bGF0b3IsIG92ZXJyaWRpbmcgc2Ft
cGxlIHJhdGUgdG8gOCBrSHouIik7Ci0gICAgICByZXR1cm4gODAwMDsKLSAgICB9Ci0gICAgLy8g
RGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IFdlYlJ0Y0F1ZGlvVXRpbHMuc2V0RGVmYXVsdFNh
bXBsZVJhdGVIeigpLgotICAgIC8vIElmIHNvLCB1c2UgdGhhdCB2YWx1ZSBhbmQgcmV0dXJuIGhl
cmUuCi0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMuaXNEZWZhdWx0U2FtcGxlUmF0ZU92ZXJyaWRk
ZW4oKSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkRlZmF1bHQgc2FtcGxlIHJhdGUgaXMgb3Zl
cnJpZGVuIHRvICIKLSAgICAgICAgICAgICAgKyBXZWJSdGNBdWRpb1V0aWxzLmdldERlZmF1bHRT
YW1wbGVSYXRlSHooKSArICIgSHoiKTsKLSAgICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLmdl
dERlZmF1bHRTYW1wbGVSYXRlSHooKTsKLSAgICB9Ci0gICAgLy8gTm8gb3ZlcnJpZGVzIGF2YWls
YWJsZS4gRGVsaXZlciBiZXN0IHBvc3NpYmxlIGVzdGltYXRlIGJhc2VkIG9uIGRlZmF1bHQKLSAg
ICAvLyBBbmRyb2lkIEF1ZGlvTWFuYWdlciBBUElzLgotICAgIGZpbmFsIGludCBzYW1wbGVSYXRl
SHo7Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuTVIxT3JIaWdo
ZXIoKSkgewotICAgICAgc2FtcGxlUmF0ZUh6ID0gZ2V0U2FtcGxlUmF0ZU9uSmVsbHlCZWFuTVIx
ME9ySGlnaGVyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIHNhbXBsZVJhdGVIeiA9IFdlYlJ0Y0F1
ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpOwotICAgIH0KLSAgICBMb2dnaW5nLmQo
VEFHLCAiU2FtcGxlIHJhdGUgaXMgc2V0IHRvICIgKyBzYW1wbGVSYXRlSHogKyAiIEh6Iik7Ci0g
ICAgcmV0dXJuIHNhbXBsZVJhdGVIejsKLSAgfQotCi0gIEBUYXJnZXRBcGkoMTcpCi0gIHByaXZh
dGUgaW50IGdldFNhbXBsZVJhdGVPbkplbGx5QmVhbk1SMTBPckhpZ2hlcigpIHsKLSAgICBTdHJp
bmcgc2FtcGxlUmF0ZVN0cmluZyA9IGF1ZGlvTWFuYWdlci5nZXRQcm9wZXJ0eShBdWRpb01hbmFn
ZXIuUFJPUEVSVFlfT1VUUFVUX1NBTVBMRV9SQVRFKTsKLSAgICByZXR1cm4gKHNhbXBsZVJhdGVT
dHJpbmcgPT0gbnVsbCkgPyBXZWJSdGNBdWRpb1V0aWxzLmdldERlZmF1bHRTYW1wbGVSYXRlSHoo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IEludGVnZXIucGFyc2VJ
bnQoc2FtcGxlUmF0ZVN0cmluZyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBuYXRpdmUgb3V0
cHV0IGJ1ZmZlciBzaXplIGZvciBsb3ctbGF0ZW5jeSBvdXRwdXQgc3RyZWFtcy4KLSAgQFRhcmdl
dEFwaSgxNykKLSAgcHJpdmF0ZSBpbnQgZ2V0TG93TGF0ZW5jeU91dHB1dEZyYW1lc1BlckJ1ZmZl
cigpIHsKLSAgICBhc3NlcnRUcnVlKGlzTG93TGF0ZW5jeU91dHB1dFN1cHBvcnRlZCgpKTsKLSAg
ICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuTVIxT3JIaWdoZXIoKSkg
ewotICAgICAgcmV0dXJuIERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUjsKLSAgICB9Ci0gICAgU3Ry
aW5nIGZyYW1lc1BlckJ1ZmZlciA9Ci0gICAgICAgIGF1ZGlvTWFuYWdlci5nZXRQcm9wZXJ0eShB
dWRpb01hbmFnZXIuUFJPUEVSVFlfT1VUUFVUX0ZSQU1FU19QRVJfQlVGRkVSKTsKLSAgICByZXR1
cm4gZnJhbWVzUGVyQnVmZmVyID09IG51bGwgPyBERUZBVUxUX0ZSQU1FX1BFUl9CVUZGRVIgOiBJ
bnRlZ2VyLnBhcnNlSW50KGZyYW1lc1BlckJ1ZmZlcik7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBhbiBhdWRpbyBlZmZlY3QgKEFFQyBvciBOUykuCi0g
IC8vIEZvdXIgY29uZGl0aW9ucyBtdXN0IGJlIGZ1bGZpbGxlZCBpZiBmdW5jdGlvbnMgYXJlIHRv
IHJldHVybiB0cnVlOgotICAvLyAxKSB0aGUgcGxhdGZvcm0gbXVzdCBzdXBwb3J0IHRoZSBidWls
dC1pbiAoSFcpIGVmZmVjdCwKLSAgLy8gMikgZXhwbGljaXQgdXNlIChvdmVycmlkZSkgb2YgYSBX
ZWJSVEMgYmFzZWQgdmVyc2lvbiBtdXN0IG5vdCBiZSBzZXQsCi0gIC8vIDMpIHRoZSBkZXZpY2Ug
bXVzdCBub3QgYmUgYmxhY2tsaXN0ZWQgZm9yIHVzZSBvZiB0aGUgZWZmZWN0LCBhbmQKLSAgLy8g
NCkgdGhlIFVVSUQgb2YgdGhlIGVmZmVjdCBtdXN0IGJlIGFwcHJvdmVkIChzb21lIFVVSURzIGNh
biBiZSBleGNsdWRlZCkuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9D
YW5jZWxlclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNhblVz
ZUFjb3VzdGljRWNob0NhbmNlbGVyKCk7Ci0gIH0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBp
c05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZl
Y3RzLmNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWlu
aW11bSBvdXRwdXQgYnVmZmVyIHNpemUgZm9yIEphdmEgYmFzZWQgYXVkaW8gKEF1ZGlvVHJhY2sp
LgotICAvLyBUaGlzIHNpemUgY2FuIGFsc28gYmUgdXNlZCBmb3IgT3BlblNMIEVTIGltcGxlbWVu
dGF0aW9ucyBvbiBkZXZpY2VzIHRoYXQKLSAgLy8gbGFja3Mgc3VwcG9ydCBvZiBsb3ctbGF0ZW5j
eSBvdXRwdXQuCi0gIHByaXZhdGUgc3RhdGljIGludCBnZXRNaW5PdXRwdXRGcmFtZVNpemUoaW50
IHNhbXBsZVJhdGVJbkh6LCBpbnQgbnVtQ2hhbm5lbHMpIHsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQ
ZXJGcmFtZSA9IG51bUNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGZpbmFs
IGludCBjaGFubmVsQ29uZmlnOwotICAgIGlmIChudW1DaGFubmVscyA9PSAxKSB7Ci0gICAgICBj
aGFubmVsQ29uZmlnID0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTzsKLSAgICB9IGVsc2Ug
aWYgKG51bUNoYW5uZWxzID09IDIpIHsKLSAgICAgIGNoYW5uZWxDb25maWcgPSBBdWRpb0Zvcm1h
dC5DSEFOTkVMX09VVF9TVEVSRU87Ci0gICAgfSBlbHNlIHsKLSAgICAgIHJldHVybiAtMTsKLSAg
ICB9Ci0gICAgcmV0dXJuIEF1ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgICAg
ICAgIHNhbXBsZVJhdGVJbkh6LCBjaGFubmVsQ29uZmlnLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19Q
Q01fMTZCSVQpCi0gICAgICAgIC8gYnl0ZXNQZXJGcmFtZTsKLSAgfQotCi0gIC8vIFJldHVybnMg
dGhlIG5hdGl2ZSBpbnB1dCBidWZmZXIgc2l6ZSBmb3IgaW5wdXQgc3RyZWFtcy4KLSAgcHJpdmF0
ZSBpbnQgZ2V0TG93TGF0ZW5jeUlucHV0RnJhbWVzUGVyQnVmZmVyKCkgewotICAgIGFzc2VydFRy
dWUoaXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0ZWQoKSk7Ci0gICAgcmV0dXJuIGdldExvd0xhdGVu
Y3lPdXRwdXRGcmFtZXNQZXJCdWZmZXIoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG1pbmlt
dW0gaW5wdXQgYnVmZmVyIHNpemUgZm9yIEphdmEgYmFzZWQgYXVkaW8gKEF1ZGlvUmVjb3JkKS4K
LSAgLy8gVGhpcyBzaXplIGNhbiBjYWxzbyBiZSB1c2VkIGZvciBPcGVuU0wgRVMgaW1wbGVtZW50
YXRpb25zIG9uIGRldmljZXMgdGhhdAotICAvLyBsYWNrcyBzdXBwb3J0IG9mIGxvdy1sYXRlbmN5
IGlucHV0LgotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TWluSW5wdXRGcmFtZVNpemUoaW50IHNh
bXBsZVJhdGVJbkh6LCBpbnQgbnVtQ2hhbm5lbHMpIHsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJG
cmFtZSA9IG51bUNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGFzc2VydFRy
dWUobnVtQ2hhbm5lbHMgPT0gQ0hBTk5FTFMpOwotICAgIHJldHVybiBBdWRpb1JlY29yZC5nZXRN
aW5CdWZmZXJTaXplKAotICAgICAgICAgICAgICAgc2FtcGxlUmF0ZUluSHosIEF1ZGlvRm9ybWF0
LkNIQU5ORUxfSU5fTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUKQotICAgICAg
ICAvIGJ5dGVzUGVyRnJhbWU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgT3BlblNMIEVT
IGF1ZGlvIGlzIHN1cHBvcnRlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc09wZW5TTEVT
U3VwcG9ydGVkKCkgewotICAgIC8vIENoZWNrIGZvciBBUEkgbGV2ZWwgOSBvciBoaWdoZXIsIHRv
IGNvbmZpcm0gdXNlIG9mIE9wZW5TTCBFUy4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5y
dW5uaW5nT25HaW5nZXJCcmVhZE9ySGlnaGVyKCk7Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9k
IHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24gIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQu
Ci0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewot
ICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4
cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBu
YXRpdmUgdm9pZCBuYXRpdmVDYWNoZUF1ZGlvUGFyYW1ldGVycyhpbnQgc2FtcGxlUmF0ZSwgaW50
IGNoYW5uZWxzLCBib29sZWFuIGhhcmR3YXJlQUVDLAotICAgICAgYm9vbGVhbiBoYXJkd2FyZUFH
QywgYm9vbGVhbiBoYXJkd2FyZU5TLCBib29sZWFuIGxvd0xhdGVuY3lPdXRwdXQsIGJvb2xlYW4g
bG93TGF0ZW5jeUlucHV0LAotICAgICAgYm9vbGVhbiBwcm9BdWRpbywgaW50IG91dHB1dEJ1ZmZl
clNpemUsIGludCBpbnB1dEJ1ZmZlclNpemUsIGxvbmcgbmF0aXZlQXVkaW9NYW5hZ2VyKTsKLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJS
dGNBdWRpb1JlY29yZC5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMv
b3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1JlY29yZC5qYXZhCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUv
V2ViUnRjQXVkaW9SZWNvcmQuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDI4NiArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwot
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotaW1wb3J0IG9yZy53ZWJydGMuVGhyZWFkVXRp
bHM7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1l
ZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQ7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5NZWRpYVJlY29yZGVyLkF1ZGlvU291cmNlOwotaW1wb3J0IGFuZHJv
aWQub3MuUHJvY2VzczsKLQotaW1wb3J0IGphdmEubGFuZy5TeXN0ZW07Ci1pbXBvcnQgamF2YS5u
aW8uQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKLQot
cHVibGljIGNsYXNzIFdlYlJ0Y0F1ZGlvUmVjb3JkIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
Ym9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBU
QUcgPSAiV2ViUnRjQXVkaW9SZWNvcmQiOwotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0YSBmb3Jt
YXQgaXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBv
cnRlZCBieSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFNfUEVS
X1NBTVBMRSA9IDE2OwotCi0gIC8vIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggcmVjb3JkZWQgYnVm
ZmVyIHByb3ZpZGVkIHRvIHRoZSBjbGllbnQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBD
QUxMQkFDS19CVUZGRVJfU0laRV9NUyA9IDEwOwotCi0gIC8vIEF2ZXJhZ2UgbnVtYmVyIG9mIGNh
bGxiYWNrcyBwZXIgc2Vjb25kLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSU19Q
RVJfU0VDT05EID0gMTAwMCAvIENBTExCQUNLX0JVRkZFUl9TSVpFX01TOwotCi0gIC8vIFdlIGFz
ayBmb3IgYSBuYXRpdmUgYnVmZmVyIHNpemUgb2YgQlVGRkVSX1NJWkVfRkFDVE9SICogKG1pbmlt
dW0gcmVxdWlyZWQKLSAgLy8gYnVmZmVyIHNpemUpLiBUaGUgZXh0cmEgc3BhY2UgaXMgYWxsb2Nh
dGVkIHRvIGd1YXJkIGFnYWluc3QgZ2xpdGNoZXMgdW5kZXIKLSAgLy8gaGlnaCBsb2FkLgotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSX1NJWkVfRkFDVE9SID0gMjsKLQotICAvLyBU
aGUgQXVkaW9SZWNvcmRKYXZhVGhyZWFkIGlzIGFsbG93ZWQgdG8gd2FpdCBmb3Igc3VjY2Vzc2Z1
bCBjYWxsIHRvIGpvaW4oKQotICAvLyBidXQgdGhlIHdhaXQgdGltZXMgb3V0IGFmdGhlciB0aGlz
IGFtb3VudCBvZiB0aW1lLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIEFVRElPX1JFQ09S
RF9USFJFQURfSk9JTl9USU1FT1VUX01TID0gMjAwMDsKLQotICBwcml2YXRlIGZpbmFsIGxvbmcg
bmF0aXZlQXVkaW9SZWNvcmQ7Ci0gIHByaXZhdGUgZmluYWwgQ29udGV4dCBjb250ZXh0OwotCi0g
IHByaXZhdGUgV2ViUnRjQXVkaW9FZmZlY3RzIGVmZmVjdHMgPSBudWxsOwotCi0gIHByaXZhdGUg
Qnl0ZUJ1ZmZlciBieXRlQnVmZmVyOwotCi0gIHByaXZhdGUgQXVkaW9SZWNvcmQgYXVkaW9SZWNv
cmQgPSBudWxsOwotICBwcml2YXRlIEF1ZGlvUmVjb3JkVGhyZWFkIGF1ZGlvVGhyZWFkID0gbnVs
bDsKLQotICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIG1pY3JvcGhvbmVNdXRlID0g
ZmFsc2U7Ci0gIHByaXZhdGUgYnl0ZVtdIGVtcHR5Qnl0ZXM7Ci0KLSAgLyoqCi0gICAqIEF1ZGlv
IHRocmVhZCB3aGljaCBrZWVwcyBjYWxsaW5nIEJ5dGVCdWZmZXIucmVhZCgpIHdhaXRpbmcgZm9y
IGF1ZGlvCi0gICAqIHRvIGJlIHJlY29yZGVkLiBGZWVkcyByZWNvcmRlZCBkYXRhIHRvIHRoZSBu
YXRpdmUgY291bnRlcnBhcnQgYXMgYQotICAgKiBwZXJpb2RpYyBzZXF1ZW5jZSBvZiBjYWxsYmFj
a3MgdXNpbmcgRGF0YUlzUmVjb3JkZWQoKS4KLSAgICogVGhpcyB0aHJlYWQgdXNlcyBhIFByb2Nl
c3MuVEhSRUFEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyBwcmlvcml0eS4KLSAgICovCi0gIHByaXZh
dGUgY2xhc3MgQXVkaW9SZWNvcmRUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotICAgIHByaXZhdGUg
dm9sYXRpbGUgYm9vbGVhbiBrZWVwQWxpdmUgPSB0cnVlOwotCi0gICAgcHVibGljIEF1ZGlvUmVj
b3JkVGhyZWFkKFN0cmluZyBuYW1lKSB7Ci0gICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAg
ICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBydW4oKSB7Ci0gICAgICBQcm9jZXNzLnNldFRo
cmVhZFByaW9yaXR5KFByb2Nlc3MuVEhSRUFEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyk7Ci0gICAg
ICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmRUaHJlYWQiICsgV2ViUnRjQXVkaW9VdGlscy5n
ZXRUaHJlYWRJbmZvKCkpOwotICAgICAgYXNzZXJ0VHJ1ZShhdWRpb1JlY29yZC5nZXRSZWNvcmRp
bmdTdGF0ZSgpID09IEF1ZGlvUmVjb3JkLlJFQ09SRFNUQVRFX1JFQ09SRElORyk7Ci0KLSAgICAg
IGxvbmcgbGFzdFRpbWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgIHdoaWxlIChrZWVwQWxp
dmUpIHsKLSAgICAgICAgaW50IGJ5dGVzUmVhZCA9IGF1ZGlvUmVjb3JkLnJlYWQoYnl0ZUJ1ZmZl
ciwgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICAgICAgaWYgKGJ5dGVzUmVhZCA9PSBieXRl
QnVmZmVyLmNhcGFjaXR5KCkpIHsKLSAgICAgICAgICBpZiAobWljcm9waG9uZU11dGUpIHsKLSAg
ICAgICAgICAgIGJ5dGVCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICAgIGJ5dGVCdWZmZXIucHV0
KGVtcHR5Qnl0ZXMpOwotICAgICAgICAgIH0KLSAgICAgICAgICBuYXRpdmVEYXRhSXNSZWNvcmRl
ZChieXRlc1JlYWQsIG5hdGl2ZUF1ZGlvUmVjb3JkKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQucmVhZCBmYWlsZWQ6ICIgKyBieXRlc1Jl
YWQpOwotICAgICAgICAgIGlmIChieXRlc1JlYWQgPT0gQXVkaW9SZWNvcmQuRVJST1JfSU5WQUxJ
RF9PUEVSQVRJT04pIHsKLSAgICAgICAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBpZiAoREVCVUcpIHsKLSAgICAgICAgICBsb25nIG5vd1Rp
bWUgPSBTeXN0ZW0ubmFub1RpbWUoKTsKLSAgICAgICAgICBsb25nIGR1cmF0aW9uSW5NcyA9IFRp
bWVVbml0Lk5BTk9TRUNPTkRTLnRvTWlsbGlzKChub3dUaW1lIC0gbGFzdFRpbWUpKTsKLSAgICAg
ICAgICBsYXN0VGltZSA9IG5vd1RpbWU7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgImJ5dGVz
UmVhZFsiICsgZHVyYXRpb25Jbk1zICsgIl0gIiArIGJ5dGVzUmVhZCk7Ci0gICAgICAgIH0KLSAg
ICAgIH0KLQotICAgICAgdHJ5IHsKLSAgICAgICAgaWYgKGF1ZGlvUmVjb3JkICE9IG51bGwpIHsK
LSAgICAgICAgICBhdWRpb1JlY29yZC5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICAgIH0gY2F0Y2gg
KElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRp
b1JlY29yZC5zdG9wIGZhaWxlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBTdG9wcyB0aGUgaW5uZXIgdGhyZWFkIGxvb3AgYW5kIGFsc28gY2FsbHMgQXVk
aW9SZWNvcmQuc3RvcCgpLgotICAgIC8vIERvZXMgbm90IGJsb2NrIHRoZSBjYWxsaW5nIHRocmVh
ZC4KLSAgICBwdWJsaWMgdm9pZCBzdG9wVGhyZWFkKCkgewotICAgICAgTG9nZ2luZy5kKFRBRywg
InN0b3BUaHJlYWQiKTsKLSAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAgIH0KLSAgfQotCi0g
IFdlYlJ0Y0F1ZGlvUmVjb3JkKENvbnRleHQgY29udGV4dCwgbG9uZyBuYXRpdmVBdWRpb1JlY29y
ZCkgewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhy
ZWFkSW5mbygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMubmF0aXZl
QXVkaW9SZWNvcmQgPSBuYXRpdmVBdWRpb1JlY29yZDsKLSAgICBpZiAoREVCVUcpIHsKLSAgICAg
IFdlYlJ0Y0F1ZGlvVXRpbHMubG9nRGV2aWNlSW5mbyhUQUcpOwotICAgIH0KLSAgICBlZmZlY3Rz
ID0gV2ViUnRjQXVkaW9FZmZlY3RzLmNyZWF0ZSgpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFu
IGVuYWJsZUJ1aWx0SW5BRUMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAi
ZW5hYmxlQnVpbHRJbkFFQygiICsgZW5hYmxlICsgJyknKTsKLSAgICBpZiAoZWZmZWN0cyA9PSBu
dWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQnVpbHQtaW4gQUVDIGlzIG5vdCBzdXBwb3J0
ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gZWZmZWN0cy5zZXRBRUMoZW5hYmxlKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBl
bmFibGVCdWlsdEluTlMoYm9vbGVhbiBlbmFibGUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZW5h
YmxlQnVpbHRJbk5TKCIgKyBlbmFibGUgKyAnKScpOwotICAgIGlmIChlZmZlY3RzID09IG51bGwp
IHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJCdWlsdC1pbiBOUyBpcyBub3Qgc3VwcG9ydGVkIG9u
IHRoaXMgcGxhdGZvcm0iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IGVmZmVjdHMuc2V0TlMoZW5hYmxlKTsKLSAgfQotCi0gIHByaXZhdGUgaW50IGluaXRSZWNvcmRp
bmcoaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIExvZ2dpbmcuZChUQUcsICJp
bml0UmVjb3JkaW5nKHNhbXBsZVJhdGU9IiArIHNhbXBsZVJhdGUgKyAiLCBjaGFubmVscz0iICsg
Y2hhbm5lbHMgKyAiKSIpOwotICAgIGlmICghV2ViUnRjQXVkaW9VdGlscy5oYXNQZXJtaXNzaW9u
KGNvbnRleHQsIGFuZHJvaWQuTWFuaWZlc3QucGVybWlzc2lvbi5SRUNPUkRfQVVESU8pKSB7Ci0g
ICAgICBMb2dnaW5nLmUoVEFHLCAiUkVDT1JEX0FVRElPIHBlcm1pc3Npb24gaXMgbWlzc2luZyIp
OwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoYXVkaW9SZWNvcmQgIT0gbnVsbCkg
ewotICAgICAgTG9nZ2luZy5lKFRBRywgIkluaXRSZWNvcmRpbmcoKSBjYWxsZWQgdHdpY2Ugd2l0
aG91dCBTdG9wUmVjb3JkaW5nKCkiKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgZmlu
YWwgaW50IGJ5dGVzUGVyRnJhbWUgPSBjaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsK
LSAgICBmaW5hbCBpbnQgZnJhbWVzUGVyQnVmZmVyID0gc2FtcGxlUmF0ZSAvIEJVRkZFUlNfUEVS
X1NFQ09ORDsKLSAgICBieXRlQnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChieXRl
c1BlckZyYW1lICogZnJhbWVzUGVyQnVmZmVyKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiYnl0ZUJ1
ZmZlci5jYXBhY2l0eTogIiArIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgZW1wdHlCeXRl
cyA9IG5ldyBieXRlW2J5dGVCdWZmZXIuY2FwYWNpdHkoKV07Ci0gICAgLy8gUmF0aGVyIHRoYW4g
cGFzc2luZyB0aGUgQnl0ZUJ1ZmZlciB3aXRoIGV2ZXJ5IGNhbGxiYWNrIChyZXF1aXJpbmcKLSAg
ICAvLyB0aGUgcG90ZW50aWFsbHkgZXhwZW5zaXZlIEdldERpcmVjdEJ1ZmZlckFkZHJlc3MpIHdl
IHNpbXBseSBoYXZlIHRoZQotICAgIC8vIHRoZSBuYXRpdmUgY2xhc3MgY2FjaGUgdGhlIGFkZHJl
c3MgdG8gdGhlIG1lbW9yeSBvbmNlLgotICAgIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVz
cyhieXRlQnVmZmVyLCBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgICAvLyBHZXQgdGhlIG1pbmlt
dW0gYnVmZmVyIHNpemUgcmVxdWlyZWQgZm9yIHRoZSBzdWNjZXNzZnVsIGNyZWF0aW9uIG9mCi0g
ICAgLy8gYW4gQXVkaW9SZWNvcmQgb2JqZWN0LCBpbiBieXRlIHVuaXRzLgotICAgIC8vIE5vdGUg
dGhhdCB0aGlzIHNpemUgZG9lc24ndCBndWFyYW50ZWUgYSBzbW9vdGggcmVjb3JkaW5nIHVuZGVy
IGxvYWQuCi0gICAgaW50IG1pbkJ1ZmZlclNpemUgPSBBdWRpb1JlY29yZC5nZXRNaW5CdWZmZXJT
aXplKAotICAgICAgICBzYW1wbGVSYXRlLCBBdWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8sIEF1
ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVCk7Ci0gICAgaWYgKG1pbkJ1ZmZlclNpemUgPT0g
QXVkaW9SZWNvcmQuRVJST1IgfHwgbWluQnVmZmVyU2l6ZSA9PSBBdWRpb1JlY29yZC5FUlJPUl9C
QURfVkFMVUUpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1JlY29yZC5nZXRNaW5CdWZm
ZXJTaXplIGZhaWxlZDogIiArIG1pbkJ1ZmZlclNpemUpOwotICAgICAgcmV0dXJuIC0xOwotICAg
IH0KLSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZTogIiAr
IG1pbkJ1ZmZlclNpemUpOwotCi0gICAgLy8gVXNlIGEgbGFyZ2VyIGJ1ZmZlciBzaXplIHRoYW4g
dGhlIG1pbmltdW0gcmVxdWlyZWQgd2hlbiBjcmVhdGluZyB0aGUKLSAgICAvLyBBdWRpb1JlY29y
ZCBpbnN0YW5jZSB0byBlbnN1cmUgc21vb3RoIHJlY29yZGluZyB1bmRlciBsb2FkLiBJdCBoYXMg
YmVlbgotICAgIC8vIHZlcmlmaWVkIHRoYXQgaXQgZG9lcyBub3QgaW5jcmVhc2UgdGhlIGFjdHVh
bCByZWNvcmRpbmcgbGF0ZW5jeS4KLSAgICBpbnQgYnVmZmVyU2l6ZUluQnl0ZXMgPSBNYXRoLm1h
eChCVUZGRVJfU0laRV9GQUNUT1IgKiBtaW5CdWZmZXJTaXplLCBieXRlQnVmZmVyLmNhcGFjaXR5
KCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJidWZmZXJTaXplSW5CeXRlczogIiArIGJ1ZmZlclNp
emVJbkJ5dGVzKTsKLSAgICB0cnkgewotICAgICAgYXVkaW9SZWNvcmQgPSBuZXcgQXVkaW9SZWNv
cmQoQXVkaW9Tb3VyY2UuVk9JQ0VfQ09NTVVOSUNBVElPTiwgc2FtcGxlUmF0ZSwKLSAgICAgICAg
ICBBdWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8sIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8x
NkJJVCwgYnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCBlLmdldE1lc3NhZ2UoKSk7Ci0gICAg
ICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmIChhdWRpb1JlY29yZCA9PSBudWxsIHx8IGF1ZGlv
UmVjb3JkLmdldFN0YXRlKCkgIT0gQXVkaW9SZWNvcmQuU1RBVEVfSU5JVElBTElaRUQpIHsKLSAg
ICAgIExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gY3JlYXRlIGEgbmV3IEF1ZGlvUmVjb3JkIGlu
c3RhbmNlIik7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGlmIChlZmZlY3RzICE9IG51
bGwpIHsKLSAgICAgIGVmZmVjdHMuZW5hYmxlKGF1ZGlvUmVjb3JkLmdldEF1ZGlvU2Vzc2lvbklk
KCkpOwotICAgIH0KLSAgICAvLyBWZXJpZnkgdGhhdCBhbGwgYXVkaW8gcGFyYW1ldGVycyBhcmUg
dmFsaWQgYW5kIGNvcnJlY3QuCi0gICAgaWYgKCFhcmVQYXJhbWV0ZXJzVmFsaWQoc2FtcGxlUmF0
ZSwgY2hhbm5lbHMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXQgbGVhc3Qgb25lIGF1ZGlv
IHJlY29yZCBwYXJhbWV0ZXIgaXMgaW52YWxpZC4iKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9
Ci0gICAgbG9nTWFpblBhcmFtZXRlcnMoKTsKLSAgICBsb2dNYWluUGFyYW1ldGVyc0V4dGVuZGVk
KCk7Ci0gICAgcmV0dXJuIGZyYW1lc1BlckJ1ZmZlcjsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVh
biBzdGFydFJlY29yZGluZygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRSZWNvcmRpbmci
KTsKLSAgICBhc3NlcnRUcnVlKGF1ZGlvUmVjb3JkICE9IG51bGwpOwotICAgIGFzc2VydFRydWUo
YXVkaW9UaHJlYWQgPT0gbnVsbCk7Ci0gICAgdHJ5IHsKLSAgICAgIGF1ZGlvUmVjb3JkLnN0YXJ0
UmVjb3JkaW5nKCk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAg
ICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1JlY29yZC5zdGFydFJlY29yZGluZyBmYWlsZWQ6ICIg
KyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChh
dWRpb1JlY29yZC5nZXRSZWNvcmRpbmdTdGF0ZSgpICE9IEF1ZGlvUmVjb3JkLlJFQ09SRFNUQVRF
X1JFQ09SRElORykgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLnN0YXJ0UmVj
b3JkaW5nIGZhaWxlZCIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRpb1Ro
cmVhZCA9IG5ldyBBdWRpb1JlY29yZFRocmVhZCgiQXVkaW9SZWNvcmRKYXZhVGhyZWFkIik7Ci0g
ICAgYXVkaW9UaHJlYWQuc3RhcnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZh
dGUgYm9vbGVhbiBzdG9wUmVjb3JkaW5nKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJzdG9wUmVj
b3JkaW5nIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCAhPSBudWxsKTsKLSAgICBhdWRp
b1RocmVhZC5zdG9wVGhyZWFkKCk7Ci0gICAgaWYgKCFUaHJlYWRVdGlscy5qb2luVW5pbnRlcnJ1
cHRpYmx5KGF1ZGlvVGhyZWFkLCBBVURJT19SRUNPUkRfVEhSRUFEX0pPSU5fVElNRU9VVF9NUykp
IHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJKb2luIG9mIEF1ZGlvUmVjb3JkSmF2YVRocmVhZCB0
aW1lZCBvdXQiKTsKLSAgICB9Ci0gICAgYXVkaW9UaHJlYWQgPSBudWxsOwotICAgIGlmIChlZmZl
Y3RzICE9IG51bGwpIHsKLSAgICAgIGVmZmVjdHMucmVsZWFzZSgpOwotICAgIH0KLSAgICBhdWRp
b1JlY29yZC5yZWxlYXNlKCk7Ci0gICAgYXVkaW9SZWNvcmQgPSBudWxsOwotICAgIHJldHVybiB0
cnVlOwotICB9Ci0KLSAgLy8gVmVyaWZpZXMgdGhhdCB0aGUgYXVkaW8gcmVjb3JkIGlzIHVzaW5n
IGNvcnJlY3QgcGFyYW1ldGVycywgaS5lLiwgdGhhdCB0aGUKLSAgLy8gY3JlYXRlZCBpbnN0YW5j
ZSB1c2VzIHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXNrZWQgZm9yLgotICBwcml2YXRlIGJvb2xl
YW4gYXJlUGFyYW1ldGVyc1ZhbGlkKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsKLSAg
ICByZXR1cm4gKGF1ZGlvUmVjb3JkLmdldEF1ZGlvRm9ybWF0KCkgPT0gQXVkaW9Gb3JtYXQuRU5D
T0RJTkdfUENNXzE2QklUCi0gICAgICAgICYmIGF1ZGlvUmVjb3JkLmdldENoYW5uZWxDb25maWd1
cmF0aW9uKCkgPT0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9NT05PCi0gICAgICAgICYmIGF1ZGlv
UmVjb3JkLmdldEF1ZGlvU291cmNlKCkgPT0gQXVkaW9Tb3VyY2UuVk9JQ0VfQ09NTVVOSUNBVElP
TgotICAgICAgICAmJiBhdWRpb1JlY29yZC5nZXRTYW1wbGVSYXRlKCkgPT0gc2FtcGxlUmF0ZSAm
JiBhdWRpb1JlY29yZC5nZXRDaGFubmVsQ291bnQoKSA9PSBjaGFubmVscyk7Ci0gIH0KLQotICBw
cml2YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnMoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1
ZGlvUmVjb3JkOiAiCi0gICAgICAgICAgICArICJzZXNzaW9uIElEOiAiICsgYXVkaW9SZWNvcmQu
Z2V0QXVkaW9TZXNzaW9uSWQoKSArICIsICIKLSAgICAgICAgICAgICsgImNoYW5uZWxzOiAiICsg
YXVkaW9SZWNvcmQuZ2V0Q2hhbm5lbENvdW50KCkgKyAiLCAiCi0gICAgICAgICAgICArICJzYW1w
bGUgcmF0ZTogIiArIGF1ZGlvUmVjb3JkLmdldFNhbXBsZVJhdGUoKSk7Ci0gIH0KLQotICBwcml2
YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnNFeHRlbmRlZCgpIHsKLSAgICBpZiAoV2ViUnRjQXVk
aW9VdGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcu
ZChUQUcsICJBdWRpb1JlY29yZDogIgotICAgICAgICAgICAgICAvLyBUaGUgZnJhbWUgY291bnQg
b2YgdGhlIG5hdGl2ZSBBdWRpb1JlY29yZCBidWZmZXIuCi0gICAgICAgICAgICAgICsgImJ1ZmZl
ciBzaXplIGluIGZyYW1lczogIiArIGF1ZGlvUmVjb3JkLmdldEJ1ZmZlclNpemVJbkZyYW1lcygp
KTsKLSAgICB9Ci0gIH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNl
cHRpb24gIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3RhdGljIHZv
aWQgYXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7
Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBi
ZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYWNo
ZURpcmVjdEJ1ZmZlckFkZHJlc3MoQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBsb25nIG5hdGl2ZUF1
ZGlvUmVjb3JkKTsKLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZURhdGFJc1JlY29yZGVk
KGludCBieXRlcywgbG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgLy8gU2V0cyBhbGwgcmVj
b3JkZWQgc2FtcGxlcyB0byB6ZXJvIGlmIHxtdXRlfCBpcyB0cnVlLCBpLmUuLCBlbnN1cmVzIHRo
YXQKLSAgLy8gdGhlIG1pY3JvcGhvbmUgaXMgbXV0ZWQuCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBz
ZXRNaWNyb3Bob25lTXV0ZShib29sZWFuIG11dGUpIHsKLSAgICBMb2dnaW5nLncoVEFHLCAic2V0
TWljcm9waG9uZU11dGUoIiArIG11dGUgKyAiKSIpOwotICAgIG1pY3JvcGhvbmVNdXRlID0gbXV0
ZTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNl
ZW5naW5lL1dlYlJ0Y0F1ZGlvVHJhY2suamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lk
L2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9UcmFjay5qYXZhCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9p
Y2VlbmdpbmUvV2ViUnRjQXVkaW9UcmFjay5qYXZhCShub25leGlzdGVudCkKQEAgLTEsMzQ1ICsw
LDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRo
b3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91
bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJl
ZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBi
ZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2pl
Y3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSBy
b290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGMudm9pY2Vl
bmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci0KLWltcG9ydCBhbmRyb2lkLmNv
bnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0
IGFuZHJvaWQubWVkaWEuQXVkaW9NYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9U
cmFjazsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci0KLWltcG9ydCBqYXZhLmxhbmcuVGhy
ZWFkOwotaW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci0KLXB1YmxpYyBjbGFzcyBXZWJSdGNB
dWRpb1RyYWNrIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNl
OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9UcmFj
ayI7Ci0KLSAgLy8gRGVmYXVsdCBhdWRpbyBkYXRhIGZvcm1hdCBpcyBQQ00gMTYgYml0IHBlciBz
YW1wbGUuCi0gIC8vIEd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2VzLgot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUU19QRVJfU0FNUExFID0gMTY7Ci0KLSAgLy8g
UmVxdWVzdGVkIHNpemUgb2YgZWFjaCByZWNvcmRlZCBidWZmZXIgcHJvdmlkZWQgdG8gdGhlIGNs
aWVudC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENBTExCQUNLX0JVRkZFUl9TSVpFX01T
ID0gMTA7Ci0KLSAgLy8gQXZlcmFnZSBudW1iZXIgb2YgY2FsbGJhY2tzIHBlciBzZWNvbmQuCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVJTX1BFUl9TRUNPTkQgPSAxMDAwIC8gQ0FM
TEJBQ0tfQlVGRkVSX1NJWkVfTVM7Ci0KLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7
Ci0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVBdWRpb1RyYWNrOwotICBwcml2YXRlIGZpbmFs
IEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7Ci0KLSAgcHJpdmF0ZSBCeXRlQnVmZmVyIGJ5dGVC
dWZmZXI7Ci0KLSAgcHJpdmF0ZSBBdWRpb1RyYWNrIGF1ZGlvVHJhY2sgPSBudWxsOwotICBwcml2
YXRlIEF1ZGlvVHJhY2tUaHJlYWQgYXVkaW9UaHJlYWQgPSBudWxsOwotCi0gIC8vIFNhbXBsZXMg
dG8gYmUgcGxheWVkIGFyZSByZXBsYWNlZCBieSB6ZXJvcyBpZiB8c3BlYWtlck11dGV8IGlzIHNl
dCB0byB0cnVlLgotICAvLyBDYW4gYmUgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgc3BlYWtlciBp
cyBmdWxseSBtdXRlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBzcGVha2Vy
TXV0ZSA9IGZhbHNlOwotICBwcml2YXRlIGJ5dGVbXSBlbXB0eUJ5dGVzOwotCi0gIC8qKgotICAg
KiBBdWRpbyB0aHJlYWQgd2hpY2gga2VlcHMgY2FsbGluZyBBdWRpb1RyYWNrLndyaXRlKCkgdG8g
c3RyZWFtIGF1ZGlvLgotICAgKiBEYXRhIGlzIHBlcmlvZGljYWxseSBhY3F1aXJlZCBmcm9tIHRo
ZSBuYXRpdmUgV2ViUlRDIGxheWVyIHVzaW5nIHRoZQotICAgKiBuYXRpdmVHZXRQbGF5b3V0RGF0
YSBjYWxsYmFjayBmdW5jdGlvbi4KLSAgICogVGhpcyB0aHJlYWQgdXNlcyBhIFByb2Nlc3MuVEhS
RUFEX1BSSU9SSVRZX1VSR0VOVF9BVURJTyBwcmlvcml0eS4KLSAgICovCi0gIHByaXZhdGUgY2xh
c3MgQXVkaW9UcmFja1RocmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgcHJpdmF0ZSB2b2xhdGls
ZSBib29sZWFuIGtlZXBBbGl2ZSA9IHRydWU7Ci0KLSAgICBwdWJsaWMgQXVkaW9UcmFja1RocmVh
ZChTdHJpbmcgbmFtZSkgewotICAgICAgc3VwZXIobmFtZSk7Ci0gICAgfQotCi0gICAgQE92ZXJy
aWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgUHJvY2Vzcy5zZXRUaHJlYWRQcmlv
cml0eShQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8pOwotICAgICAgTG9nZ2lu
Zy5kKFRBRywgIkF1ZGlvVHJhY2tUaHJlYWQiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJ
bmZvKCkpOwotCi0gICAgICB0cnkgewotICAgICAgICAvLyBJbiBNT0RFX1NUUkVBTSBtb2RlIHdl
IGNhbiBvcHRpb25hbGx5IHByaW1lIHRoZSBvdXRwdXQgYnVmZmVyIGJ5Ci0gICAgICAgIC8vIHdy
aXRpbmcgdXAgdG8gYnVmZmVyU2l6ZUluQnl0ZXMgKGZyb20gY29uc3RydWN0b3IpIGJlZm9yZSBz
dGFydGluZy4KLSAgICAgICAgLy8gVGhpcyBwcmltaW5nIHdpbGwgYXZvaWQgYW4gaW1tZWRpYXRl
IHVuZGVycnVuLCBidXQgaXMgbm90IHJlcXVpcmVkLgotICAgICAgICAvLyBUT0RPKGhlbnJpa2Ep
OiBpbml0aWFsIHRlc3RzIGhhdmUgc2hvd24gdGhhdCBwcmltaW5nIGlzIG5vdCByZXF1aXJlZC4K
LSAgICAgICAgYXVkaW9UcmFjay5wbGF5KCk7Ci0gICAgICAgIGFzc2VydFRydWUoYXVkaW9UcmFj
ay5nZXRQbGF5U3RhdGUoKSA9PSBBdWRpb1RyYWNrLlBMQVlTVEFURV9QTEFZSU5HKTsKLSAgICAg
IH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIExvZ2dpbmcuZShU
QUcsICJBdWRpb1RyYWNrLnBsYXkgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIC8vIEZpeGVkIHNpemUgaW4gYnl0ZXMgb2YgZWFj
aCAxMG1zIGJsb2NrIG9mIGF1ZGlvIGRhdGEgdGhhdCB3ZSBhc2sgZm9yCi0gICAgICAvLyB1c2lu
ZyBjYWxsYmFja3MgdG8gdGhlIG5hdGl2ZSBXZWJSVEMgY2xpZW50LgotICAgICAgZmluYWwgaW50
IHNpemVJbkJ5dGVzID0gYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpOwotCi0gICAgICB3aGlsZSAoa2Vl
cEFsaXZlKSB7Ci0gICAgICAgIC8vIEdldCAxMG1zIG9mIFBDTSBkYXRhIGZyb20gdGhlIG5hdGl2
ZSBXZWJSVEMgY2xpZW50LiBBdWRpbyBkYXRhIGlzCi0gICAgICAgIC8vIHdyaXR0ZW4gaW50byB0
aGUgY29tbW9uIEJ5dGVCdWZmZXIgdXNpbmcgdGhlIGFkZHJlc3MgdGhhdCB3YXMKLSAgICAgICAg
Ly8gY2FjaGVkIGF0IGNvbnN0cnVjdGlvbi4KLSAgICAgICAgbmF0aXZlR2V0UGxheW91dERhdGEo
c2l6ZUluQnl0ZXMsIG5hdGl2ZUF1ZGlvVHJhY2spOwotICAgICAgICAvLyBXcml0ZSBkYXRhIHVu
dGlsIGFsbCBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIGF1ZGlvIHNpbmsuCi0gICAgICAg
IC8vIFVwb24gcmV0dXJuLCB0aGUgYnVmZmVyIHBvc2l0aW9uIHdpbGwgaGF2ZSBiZWVuIGFkdmFu
Y2VkIHRvIHJlZmxlY3QKLSAgICAgICAgLy8gdGhlIGFtb3VudCBvZiBkYXRhIHRoYXQgd2FzIHN1
Y2Nlc3NmdWxseSB3cml0dGVuIHRvIHRoZSBBdWRpb1RyYWNrLgotICAgICAgICBhc3NlcnRUcnVl
KHNpemVJbkJ5dGVzIDw9IGJ5dGVCdWZmZXIucmVtYWluaW5nKCkpOwotICAgICAgICBpZiAoc3Bl
YWtlck11dGUpIHsKLSAgICAgICAgICBieXRlQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgYnl0
ZUJ1ZmZlci5wdXQoZW1wdHlCeXRlcyk7Ci0gICAgICAgICAgYnl0ZUJ1ZmZlci5wb3NpdGlvbigw
KTsKLSAgICAgICAgfQotICAgICAgICBpbnQgYnl0ZXNXcml0dGVuID0gMDsKLSAgICAgICAgaWYg
KFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTG9sbGlwb3BPckhpZ2hlcigpKSB7Ci0gICAgICAg
ICAgYnl0ZXNXcml0dGVuID0gd3JpdGVPbkxvbGxpcG9wKGF1ZGlvVHJhY2ssIGJ5dGVCdWZmZXIs
IHNpemVJbkJ5dGVzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBieXRlc1dyaXR0ZW4g
PSB3cml0ZVByZUxvbGxpcG9wKGF1ZGlvVHJhY2ssIGJ5dGVCdWZmZXIsIHNpemVJbkJ5dGVzKTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoYnl0ZXNXcml0dGVuICE9IHNpemVJbkJ5dGVzKSB7Ci0g
ICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvVHJhY2sud3JpdGUgZmFpbGVkOiAiICsgYnl0
ZXNXcml0dGVuKTsKLSAgICAgICAgICBpZiAoYnl0ZXNXcml0dGVuID09IEF1ZGlvVHJhY2suRVJS
T1JfSU5WQUxJRF9PUEVSQVRJT04pIHsKLSAgICAgICAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwot
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBUaGUgYnl0ZSBidWZmZXIgbXVzdCBi
ZSByZXdpbmRlZCBzaW5jZSBieXRlQnVmZmVyLnBvc2l0aW9uKCkgaXMKLSAgICAgICAgLy8gaW5j
cmVhc2VkIGF0IGVhY2ggY2FsbCB0byBBdWRpb1RyYWNrLndyaXRlKCkuIElmIHdlIGRvbid0IGRv
IHRoaXMsCi0gICAgICAgIC8vIG5leHQgY2FsbCB0byBBdWRpb1RyYWNrLndyaXRlKCkgd2lsbCBm
YWlsLgotICAgICAgICBieXRlQnVmZmVyLnJld2luZCgpOwotCi0gICAgICAgIC8vIFRPRE8oaGVu
cmlrYSk6IGl0IGlzIHBvc3NpYmxlIHRvIGNyZWF0ZSBhIGRlbGF5IGVzdGltYXRlIGhlcmUgYnkK
LSAgICAgICAgLy8gY291bnRpbmcgbnVtYmVyIG9mIHdyaXR0ZW4gZnJhbWVzIGFuZCBzdWJ0cmFj
dGluZyB0aGUgcmVzdWx0IGZyb20KLSAgICAgICAgLy8gYXVkaW9UcmFjay5nZXRQbGF5YmFja0hl
YWRQb3NpdGlvbigpLgotICAgICAgfQotCi0gICAgICB0cnkgewotICAgICAgICBhdWRpb1RyYWNr
LnN0b3AoKTsKLSAgICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBlKSB7Ci0gICAg
ICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1RyYWNrLnN0b3AgZmFpbGVkOiAiICsgZS5nZXRNZXNz
YWdlKCkpOwotICAgICAgfQotICAgICAgYXNzZXJ0VHJ1ZShhdWRpb1RyYWNrLmdldFBsYXlTdGF0
ZSgpID09IEF1ZGlvVHJhY2suUExBWVNUQVRFX1NUT1BQRUQpOwotICAgICAgYXVkaW9UcmFjay5m
bHVzaCgpOwotICAgIH0KLQotICAgIHByaXZhdGUgaW50IHdyaXRlT25Mb2xsaXBvcChBdWRpb1Ry
YWNrIGF1ZGlvVHJhY2ssIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwgaW50IHNpemVJbkJ5dGVzKSB7
Ci0gICAgICByZXR1cm4gYXVkaW9UcmFjay53cml0ZShieXRlQnVmZmVyLCBzaXplSW5CeXRlcywg
QXVkaW9UcmFjay5XUklURV9CTE9DS0lORyk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBpbnQgd3Jp
dGVQcmVMb2xsaXBvcChBdWRpb1RyYWNrIGF1ZGlvVHJhY2ssIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZl
ciwgaW50IHNpemVJbkJ5dGVzKSB7Ci0gICAgICByZXR1cm4gYXVkaW9UcmFjay53cml0ZShieXRl
QnVmZmVyLmFycmF5KCksIGJ5dGVCdWZmZXIuYXJyYXlPZmZzZXQoKSwgc2l6ZUluQnl0ZXMpOwot
ICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGpvaW5UaHJlYWQoKSB7Ci0gICAgICBrZWVwQWxpdmUg
PSBmYWxzZTsKLSAgICAgIHdoaWxlIChpc0FsaXZlKCkpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICBqb2luKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsK
LSAgICAgICAgICAvLyBJZ25vcmUuCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICBXZWJSdGNBdWRpb1RyYWNrKENvbnRleHQgY29udGV4dCwgbG9uZyBuYXRpdmVBdWRpb1RyYWNr
KSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJl
YWRJbmZvKCkpOwotICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5uYXRpdmVB
dWRpb1RyYWNrID0gbmF0aXZlQXVkaW9UcmFjazsKLSAgICBhdWRpb01hbmFnZXIgPSAoQXVkaW9N
YW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2UoQ29udGV4dC5BVURJT19TRVJWSUNFKTsK
LSAgICBpZiAoREVCVUcpIHsKLSAgICAgIFdlYlJ0Y0F1ZGlvVXRpbHMubG9nRGV2aWNlSW5mbyhU
QUcpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0UGxheW91dChpbnQgc2Ft
cGxlUmF0ZSwgaW50IGNoYW5uZWxzKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImluaXRQbGF5b3V0
KHNhbXBsZVJhdGU9IiArIHNhbXBsZVJhdGUgKyAiLCBjaGFubmVscz0iICsgY2hhbm5lbHMgKyAi
KSIpOwotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gY2hhbm5lbHMgKiAoQklUU19QRVJf
U0FNUExFIC8gOCk7Ci0gICAgYnl0ZUJ1ZmZlciA9IGJ5dGVCdWZmZXIuYWxsb2NhdGVEaXJlY3Qo
Ynl0ZXNQZXJGcmFtZSAqIChzYW1wbGVSYXRlIC8gQlVGRkVSU19QRVJfU0VDT05EKSk7Ci0gICAg
TG9nZ2luZy5kKFRBRywgImJ5dGVCdWZmZXIuY2FwYWNpdHk6ICIgKyBieXRlQnVmZmVyLmNhcGFj
aXR5KCkpOwotICAgIGVtcHR5Qnl0ZXMgPSBuZXcgYnl0ZVtieXRlQnVmZmVyLmNhcGFjaXR5KCld
OwotICAgIC8vIFJhdGhlciB0aGFuIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXIgd2l0aCBldmVyeSBj
YWxsYmFjayAocmVxdWlyaW5nCi0gICAgLy8gdGhlIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBHZXRE
aXJlY3RCdWZmZXJBZGRyZXNzKSB3ZSBzaW1wbHkgaGF2ZSB0aGUKLSAgICAvLyB0aGUgbmF0aXZl
IGNsYXNzIGNhY2hlIHRoZSBhZGRyZXNzIHRvIHRoZSBtZW1vcnkgb25jZS4KLSAgICBuYXRpdmVD
YWNoZURpcmVjdEJ1ZmZlckFkZHJlc3MoYnl0ZUJ1ZmZlciwgbmF0aXZlQXVkaW9UcmFjayk7Ci0K
LSAgICAvLyBHZXQgdGhlIG1pbmltdW0gYnVmZmVyIHNpemUgcmVxdWlyZWQgZm9yIHRoZSBzdWNj
ZXNzZnVsIGNyZWF0aW9uIG9mIGFuCi0gICAgLy8gQXVkaW9UcmFjayBvYmplY3QgdG8gYmUgY3Jl
YXRlZCBpbiB0aGUgTU9ERV9TVFJFQU0gbW9kZS4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBzaXpl
IGRvZXNuJ3QgZ3VhcmFudGVlIGEgc21vb3RoIHBsYXliYWNrIHVuZGVyIGxvYWQuCi0gICAgLy8g
VE9ETyhoZW5yaWthKTogc2hvdWxkIHdlIGV4dGVuZCB0aGUgYnVmZmVyIHNpemUgdG8gYXZvaWQg
Z2xpdGNoZXM/Ci0gICAgZmluYWwgaW50IG1pbkJ1ZmZlclNpemVJbkJ5dGVzID0gQXVkaW9UcmFj
ay5nZXRNaW5CdWZmZXJTaXplKAotICAgICAgICBzYW1wbGVSYXRlLCBBdWRpb0Zvcm1hdC5DSEFO
TkVMX09VVF9NT05PLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpOwotICAgIExvZ2dp
bmcuZChUQUcsICJBdWRpb1RyYWNrLmdldE1pbkJ1ZmZlclNpemU6ICIgKyBtaW5CdWZmZXJTaXpl
SW5CeXRlcyk7Ci0gICAgLy8gRm9yIHRoZSBzdHJlYW1pbmcgbW9kZSwgZGF0YSBtdXN0IGJlIHdy
aXR0ZW4gdG8gdGhlIGF1ZGlvIHNpbmsgaW4KLSAgICAvLyBjaHVua3Mgb2Ygc2l6ZSAoZ2l2ZW4g
YnkgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSBsZXNzIHRoYW4gb3IgZXF1YWwKLSAgICAvLyB0byB0
aGUgdG90YWwgYnVmZmVyIHNpemUgfG1pbkJ1ZmZlclNpemVJbkJ5dGVzfC4gQnV0LCB3ZSBoYXZl
IHNlZW4KLSAgICAvLyByZXBvcnRzIG9mICJnZXRNaW5CdWZmZXJTaXplKCk6IGVycm9yIHF1ZXJ5
aW5nIGhhcmR3YXJlIi4gSGVuY2UsIGl0Ci0gICAgLy8gY2FuIGhhcHBlbiB0aGF0IHxtaW5CdWZm
ZXJTaXplSW5CeXRlc3wgY29udGFpbnMgYW4gaW52YWxpZCB2YWx1ZS4KLSAgICBpZiAobWluQnVm
ZmVyU2l6ZUluQnl0ZXMgPCBieXRlQnVmZmVyLmNhcGFjaXR5KCkpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJBdWRpb1RyYWNrLmdldE1pbkJ1ZmZlclNpemUgcmV0dXJucyBhbiBpbnZhbGlkIHZh
bHVlLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIEVuc3VyZSB0aGF0
IHByZXZpc2lvbiBhdWRpbyBzZXNzaW9uIHdhcyBzdG9wcGVkIGNvcnJlY3RseSBiZWZvcmUgdHJ5
aW5nCi0gICAgLy8gdG8gY3JlYXRlIGEgbmV3IEF1ZGlvVHJhY2suCi0gICAgaWYgKGF1ZGlvVHJh
Y2sgIT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkNvbmZsaWN0IHdpdGggZXhpc3Rp
bmcgQXVkaW9UcmFjay4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgdHJ5IHsK
LSAgICAgIC8vIENyZWF0ZSBhbiBBdWRpb1RyYWNrIG9iamVjdCBhbmQgaW5pdGlhbGl6ZSBpdHMg
YXNzb2NpYXRlZCBhdWRpbyBidWZmZXIuCi0gICAgICAvLyBUaGUgc2l6ZSBvZiB0aGlzIGJ1ZmZl
ciBkZXRlcm1pbmVzIGhvdyBsb25nIGFuIEF1ZGlvVHJhY2sgY2FuIHBsYXkKLSAgICAgIC8vIGJl
Zm9yZSBydW5uaW5nIG91dCBvZiBkYXRhLgotICAgICAgYXVkaW9UcmFjayA9Ci0gICAgICAgICAg
bmV3IEF1ZGlvVHJhY2soQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMLCBzYW1wbGVSYXRl
LCBBdWRpb0Zvcm1hdC5DSEFOTkVMX09VVF9NT05PLAotICAgICAgICAgICAgICBBdWRpb0Zvcm1h
dC5FTkNPRElOR19QQ01fMTZCSVQsIG1pbkJ1ZmZlclNpemVJbkJ5dGVzLCBBdWRpb1RyYWNrLk1P
REVfU1RSRUFNKTsKLSAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewot
ICAgICAgTG9nZ2luZy5kKFRBRywgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIC8vIEl0IGNhbiBoYXBwZW4gdGhhdCBhbiBBdWRpb1RyYWNrIGlzIGNy
ZWF0ZWQgYnV0IGl0IHdhcyBub3Qgc3VjY2Vzc2Z1bGx5Ci0gICAgLy8gaW5pdGlhbGl6ZWQgdXBv
biBjcmVhdGlvbi4gU2VlbXMgdG8gYmUgdGhlIGNhc2UgZS5nLiB3aGVuIHRoZSBtYXhpbXVtCi0g
ICAgLy8gbnVtYmVyIG9mIGdsb2JhbGx5IGF2YWlsYWJsZSBhdWRpbyB0cmFja3MgaXMgZXhjZWVk
ZWQuCi0gICAgaWYgKGF1ZGlvVHJhY2suZ2V0U3RhdGUoKSAhPSBBdWRpb1RyYWNrLlNUQVRFX0lO
SVRJQUxJWkVEKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiSW5pdGlhbGl6YXRpb24gb2YgYXVk
aW8gdHJhY2sgZmFpbGVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAvLyBW
ZXJpZnkgdGhhdCBhbGwgYXVkaW8gcGFyYW1ldGVycyBhcmUgdmFsaWQgYW5kIGNvcnJlY3QuCi0g
ICAgaWYgKCFhcmVQYXJhbWV0ZXJzVmFsaWQoc2FtcGxlUmF0ZSwgY2hhbm5lbHMpKSB7Ci0gICAg
ICBMb2dnaW5nLmUoVEFHLCAiQXQgbGVhc3Qgb25lIGF1ZGlvIHRyYWNrIHBhcmFtZXRlciBpcyBp
bnZhbGlkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBsb2dNYWluUGFyYW1l
dGVycygpOwotICAgIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBzdGFydFBsYXlvdXQoKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgInN0YXJ0UGxheW91dCIpOwotICAgIGFzc2VydFRydWUoYXVkaW9UcmFjayAhPSBu
dWxsKTsKLSAgICBhc3NlcnRUcnVlKGF1ZGlvVGhyZWFkID09IG51bGwpOwotICAgIGlmIChhdWRp
b1RyYWNrLmdldFN0YXRlKCkgIT0gQXVkaW9UcmFjay5TVEFURV9JTklUSUFMSVpFRCkgewotICAg
ICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvIHRyYWNrIGlzIG5vdCBzdWNjZXNzZnVsbHkgaW5pdGlh
bGl6ZWQuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGF1ZGlvVGhyZWFkID0g
bmV3IEF1ZGlvVHJhY2tUaHJlYWQoIkF1ZGlvVHJhY2tKYXZhVGhyZWFkIik7Ci0gICAgYXVkaW9U
aHJlYWQuc3RhcnQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVh
biBzdG9wUGxheW91dCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RvcFBsYXlvdXQiKTsKLSAg
ICBhc3NlcnRUcnVlKGF1ZGlvVGhyZWFkICE9IG51bGwpOwotICAgIGxvZ1VuZGVycnVuQ291bnQo
KTsKLSAgICBhdWRpb1RocmVhZC5qb2luVGhyZWFkKCk7Ci0gICAgYXVkaW9UaHJlYWQgPSBudWxs
OwotICAgIGlmIChhdWRpb1RyYWNrICE9IG51bGwpIHsKLSAgICAgIGF1ZGlvVHJhY2sucmVsZWFz
ZSgpOwotICAgICAgYXVkaW9UcmFjayA9IG51bGw7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
ICB9Ci0KLSAgLy8gR2V0IG1heCBwb3NzaWJsZSB2b2x1bWUgaW5kZXggZm9yIGEgcGhvbmUgY2Fs
bCBhdWRpbyBzdHJlYW0uCi0gIHByaXZhdGUgaW50IGdldFN0cmVhbU1heFZvbHVtZSgpIHsKLSAg
ICBMb2dnaW5nLmQoVEFHLCAiZ2V0U3RyZWFtTWF4Vm9sdW1lIik7Ci0gICAgYXNzZXJ0VHJ1ZShh
dWRpb01hbmFnZXIgIT0gbnVsbCk7Ci0gICAgcmV0dXJuIGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1N
YXhWb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKTsKLSAgfQotCi0gIC8vIFNl
dCBjdXJyZW50IHZvbHVtZSBsZXZlbCBmb3IgYSBwaG9uZSBjYWxsIGF1ZGlvIHN0cmVhbS4KLSAg
cHJpdmF0ZSBib29sZWFuIHNldFN0cmVhbVZvbHVtZShpbnQgdm9sdW1lKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgInNldFN0cmVhbVZvbHVtZSgiICsgdm9sdW1lICsgIikiKTsKLSAgICBhc3NlcnRU
cnVlKGF1ZGlvTWFuYWdlciAhPSBudWxsKTsKLSAgICBpZiAoaXNWb2x1bWVGaXhlZCgpKSB7Ci0g
ICAgICBMb2dnaW5nLmUoVEFHLCAiVGhlIGRldmljZSBpbXBsZW1lbnRzIGEgZml4ZWQgdm9sdW1l
IHBvbGljeS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgYXVkaW9NYW5hZ2Vy
LnNldFN0cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwsIHZvbHVtZSwg
MCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNWb2x1bWVG
aXhlZCgpIHsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTG9sbGlwb3BPckhp
Z2hlcigpKQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBhdWRpb01hbmFnZXIuaXNW
b2x1bWVGaXhlZCgpOwotICB9Ci0KLSAgLyoqIEdldCBjdXJyZW50IHZvbHVtZSBsZXZlbCBmb3Ig
YSBwaG9uZSBjYWxsIGF1ZGlvIHN0cmVhbS4gKi8KLSAgcHJpdmF0ZSBpbnQgZ2V0U3RyZWFtVm9s
dW1lKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJnZXRTdHJlYW1Wb2x1bWUiKTsKLSAgICBhc3Nl
cnRUcnVlKGF1ZGlvTWFuYWdlciAhPSBudWxsKTsKLSAgICByZXR1cm4gYXVkaW9NYW5hZ2VyLmdl
dFN0cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwpOwotICB9Ci0KLSAg
Ly8gVmVyaWZpZXMgdGhhdCB0aGUgYXVkaW8gdHJhY2sgaXMgdXNpbmcgY29ycmVjdCBwYXJhbWV0
ZXJzLCBpLmUuLCB0aGF0IHRoZQotICAvLyBjcmVhdGVkIHRyYWNrIHVzZXMgdGhlIHBhcmFtZXRl
cnMgdGhhdCB3ZSBhc2tlZCBmb3IuCi0gIHByaXZhdGUgYm9vbGVhbiBhcmVQYXJhbWV0ZXJzVmFs
aWQoaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIGZpbmFsIGludCBzdHJlYW1U
eXBlID0gYXVkaW9UcmFjay5nZXRTdHJlYW1UeXBlKCk7Ci0gICAgcmV0dXJuIChhdWRpb1RyYWNr
LmdldEF1ZGlvRm9ybWF0KCkgPT0gQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklUCi0gICAg
ICAgICYmIGF1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvbmZpZ3VyYXRpb24oKSA9PSBBdWRpb0Zvcm1h
dC5DSEFOTkVMX09VVF9NT05PCi0gICAgICAgICYmIHN0cmVhbVR5cGUgPT0gQXVkaW9NYW5hZ2Vy
LlNUUkVBTV9WT0lDRV9DQUxMICYmIGF1ZGlvVHJhY2suZ2V0U2FtcGxlUmF0ZSgpID09IHNhbXBs
ZVJhdGUKLSAgICAgICAgJiYgc2FtcGxlUmF0ZSA9PSBhdWRpb1RyYWNrLmdldE5hdGl2ZU91dHB1
dFNhbXBsZVJhdGUoc3RyZWFtVHlwZSkKLSAgICAgICAgJiYgYXVkaW9UcmFjay5nZXRDaGFubmVs
Q291bnQoKSA9PSBjaGFubmVscyk7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBhcmFt
ZXRlcnMoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2s6ICIKLSAgICAgICAgICAg
ICsgInNlc3Npb24gSUQ6ICIgKyBhdWRpb1RyYWNrLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAi
Ci0gICAgICAgICAgICArICJjaGFubmVsczogIiArIGF1ZGlvVHJhY2suZ2V0Q2hhbm5lbENvdW50
KCkgKyAiLCAiCi0gICAgICAgICAgICArICJzYW1wbGUgcmF0ZTogIiArIGF1ZGlvVHJhY2suZ2V0
U2FtcGxlUmF0ZSgpICsgIiwgIgotICAgICAgICAgICAgLy8gR2FpbiAoPj0xLjApIGV4cHJlc3Nl
ZCBhcyBsaW5lYXIgbXVsdGlwbGllciBvbiBzYW1wbGUgdmFsdWVzLgotICAgICAgICAgICAgKyAi
bWF4IGdhaW46ICIgKyBhdWRpb1RyYWNrLmdldE1heFZvbHVtZSgpKTsKLSAgfQotCi0gIHByaXZh
dGUgdm9pZCBsb2dNYWluUGFyYW1ldGVyc0V4dGVuZGVkKCkgewotICAgIGlmIChXZWJSdGNBdWRp
b1V0aWxzLnJ1bm5pbmdPbk1hcnNobWFsbG93T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5k
KFRBRywgIkF1ZGlvVHJhY2s6ICIKLSAgICAgICAgICAgICAgLy8gVGhlIGVmZmVjdGl2ZSBzaXpl
IG9mIHRoZSBBdWRpb1RyYWNrIGJ1ZmZlciB0aGF0IHRoZSBhcHAgd3JpdGVzIHRvLgotICAgICAg
ICAgICAgICArICJidWZmZXIgc2l6ZSBpbiBmcmFtZXM6ICIgKyBhdWRpb1RyYWNrLmdldEJ1ZmZl
clNpemVJbkZyYW1lcygpKTsKLSAgICB9Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmlu
Z09uTm91Z2F0T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2s6
ICIKLSAgICAgICAgICAgICAgLy8gTWF4aW11bSBzaXplIG9mIHRoZSBBdWRpb1RyYWNrIGJ1ZmZl
ciBpbiBmcmFtZXMuCi0gICAgICAgICAgICAgICsgImJ1ZmZlciBjYXBhY2l0eSBpbiBmcmFtZXM6
ICIgKyBhdWRpb1RyYWNrLmdldEJ1ZmZlckNhcGFjaXR5SW5GcmFtZXMoKSk7Ci0gICAgfQotICB9
Ci0KLSAgLy8gUHJpbnRzIHRoZSBudW1iZXIgb2YgdW5kZXJydW4gb2NjdXJyZW5jZXMgaW4gdGhl
IGFwcGxpY2F0aW9uLWxldmVsIHdyaXRlCi0gIC8vIGJ1ZmZlciBzaW5jZSB0aGUgQXVkaW9UcmFj
ayB3YXMgY3JlYXRlZC4gQW4gdW5kZXJydW4gb2NjdXJzIGlmIHRoZSBhcHAgZG9lcwotICAvLyBu
b3Qgd3JpdGUgYXVkaW8gZGF0YSBxdWlja2x5IGVub3VnaCwgY2F1c2luZyB0aGUgYnVmZmVyIHRv
IHVuZGVyZmxvdyBhbmQgYQotICAvLyBwb3RlbnRpYWwgYXVkaW8gZ2xpdGNoLgotICAvLyBUT0RP
KGhlbnJpa2EpOiBrZWVwIHRyYWNrIG9mIHRoaXMgdmFsdWUgaW4gdGhlIGZpZWxkIGFuZCBwb3Nz
aWJseSBhZGQgbmV3Ci0gIC8vIFVNQSBzdGF0IGlmIG5lZWRlZC4KLSAgcHJpdmF0ZSB2b2lkIGxv
Z1VuZGVycnVuQ291bnQoKSB7Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTm91
Z2F0T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgInVuZGVycnVuIGNvdW50OiAi
ICsgYXVkaW9UcmFjay5nZXRVbmRlcnJ1bkNvdW50KCkpOwotICAgIH0KLSAgfQotCi0gIC8vIEhl
bHBlciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiAgd2hlbiBhbiBhc3NlcnRpb24g
aGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUcnVlKGJvb2xlYW4gY29u
ZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBBc3NlcnRp
b25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUiKTsKLSAgICB9Ci0gIH0KLQot
ICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhCeXRl
QnVmZmVyIGJ5dGVCdWZmZXIsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gIHByaXZhdGUg
bmF0aXZlIHZvaWQgbmF0aXZlR2V0UGxheW91dERhdGEoaW50IGJ5dGVzLCBsb25nIG5hdGl2ZUF1
ZGlvUmVjb3JkKTsKLQotICAvLyBTZXRzIGFsbCBzYW1wbGVzIHRvIGJlIHBsYXllZCBvdXQgdG8g
emVybyBpZiB8bXV0ZXwgaXMgdHJ1ZSwgaS5lLiwKLSAgLy8gZW5zdXJlcyB0aGF0IHRoZSBzcGVh
a2VyIGlzIG11dGVkLgotICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0U3BlYWtlck11dGUoYm9vbGVh
biBtdXRlKSB7Ci0gICAgTG9nZ2luZy53KFRBRywgInNldFNwZWFrZXJNdXRlKCIgKyBtdXRlICsg
IikiKTsKLSAgICBzcGVha2VyTXV0ZSA9IG11dGU7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1V0aWxzLmphdmEK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
bW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5n
aW5lL1dlYlJ0Y0F1ZGlvVXRpbHMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5k
cm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVXRpbHMuamF2
YQkobm9uZXhpc3RlbnQpCkBAIC0xLDIwMiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykg
MjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAq
Ci0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUg
bGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhl
IHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFs
IHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRF
TlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQg
aW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8K
LQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5M
b2dnaW5nOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9p
ZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotCi1pbXBvcnQgamF2YS5sYW5nLlRocmVhZDsKLWlt
cG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1wdWJsaWMg
ZmluYWwgY2xhc3MgV2ViUnRjQXVkaW9VdGlscyB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9VdGlscyI7Ci0KLSAgLy8gTGlzdCBvZiBkZXZpY2VzIHdo
ZXJlIHdlIGhhdmUgc2VlbiBpc3N1ZXMgKGUuZy4gYmFkIGF1ZGlvIHF1YWxpdHkpIHVzaW5nCi0g
IC8vIHRoZSBsb3cgbGF0ZW5jeSBvdXRwdXQgbW9kZSBpbiBjb21iaW5hdGlvbiB3aXRoIE9wZW5T
TCBFUy4KLSAgLy8gVGhlIGRldmljZSBuYW1lIGlzIGdpdmVuIGJ5IEJ1aWxkLk1PREVMLgotICBw
cml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBCTEFDS0xJU1RFRF9PUEVOX1NMX0VTX01PREVM
UyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAvLyBUaGlzIGxpc3QgaXMgY3VycmVudGx5IGVtcHR5
IDstKQotICB9OwotCi0gIC8vIExpc3Qgb2YgZGV2aWNlcyB3aGVyZSBpdCBoYXMgYmVlbiB2ZXJp
ZmllZCB0aGF0IHRoZSBidWlsdC1pbiBlZmZlY3QKLSAgLy8gYmFkIGFuZCB3aGVyZSBpdCBtYWtl
cyBzZW5zZSB0byBhdm9pZCB1c2luZyBpdCBhbmQgaW5zdGVhZCByZWx5IG9uIHRoZQotICAvLyBu
YXRpdmUgV2ViUlRDIHZlcnNpb24gaW5zdGVhZC4gVGhlIGRldmljZSBuYW1lIGlzIGdpdmVuIGJ5
IEJ1aWxkLk1PREVMLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBCTEFDS0xJU1RF
RF9BRUNfTU9ERUxTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICJENjUwMyIsIC8vIFNvbnkgWHBl
cmlhIFoyIEQ2NTAzCi0gICAgICAiT05FIEEyMDA1IiwgLy8gT25lUGx1cyAyCi0gICAgICAiTW90
b0czIiwgLy8gTW90byBHICgzcmQgR2VuZXJhdGlvbikKLSAgfTsKLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nW10gQkxBQ0tMSVNURURfTlNfTU9ERUxTID0gbmV3IFN0cmluZ1tdIHsKLSAg
ICAgICJOZXh1cyAxMCIsICJOZXh1cyA5IiwKLSAgICAgICJPTkUgQTIwMDUiLCAvLyBPbmVQbHVz
IDIKLSAgfTsKLQotICAvLyBVc2UgMTZrSHogYXMgdGhlIGRlZmF1bHQgc2FtcGxlIHJhdGUuIEEg
aGlnaGVyIHNhbXBsZSByYXRlIG1pZ2h0IHByZXZlbnQKLSAgLy8gdXMgZnJvbSBzdXBwb3J0aW5n
IGNvbW11bmljYXRpb24gbW9kZSBvbiBzb21lIG9sZGVyIChlLmcuIElDUykgZGV2aWNlcy4KLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IERFRkFVTFRfU0FNUExFX1JBVEVfSFogPSAxNjAwMDsK
LSAgcHJpdmF0ZSBzdGF0aWMgaW50IGRlZmF1bHRTYW1wbGVSYXRlSHogPSBERUZBVUxUX1NBTVBM
RV9SQVRFX0haOwotICAvLyBTZXQgdG8gdHJ1ZSBpZiBzZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkg
aGFzIGJlZW4gY2FsbGVkLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzRGVmYXVsdFNhbXBs
ZVJhdGVPdmVycmlkZGVuID0gZmFsc2U7Ci0KLSAgLy8gQnkgZGVmYXVsdCwgdXRpbGl6ZSBoYXJk
d2FyZSBiYXNlZCBhdWRpbyBlZmZlY3RzIGZvciBBRUMgYW5kIE5TIHdoZW4KLSAgLy8gYXZhaWxh
YmxlLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hv
Q2FuY2VsZXIgPSBmYWxzZTsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1c2VXZWJSdGNCYXNl
ZE5vaXNlU3VwcHJlc3NvciA9IGZhbHNlOwotCi0gIC8vIENhbGwgdGhlc2UgbWV0aG9kcyBpZiBh
bnkgaGFyZHdhcmUgYmFzZWQgZWZmZWN0IHNoYWxsIGJlIHJlcGxhY2VkIGJ5IGEKLSAgLy8gc29m
dHdhcmUgYmFzZWQgdmVyc2lvbiBwcm92aWRlZCBieSB0aGUgV2ViUlRDIHN0YWNrIGluc3RlYWQu
Ci0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWRBY291c3Rp
Y0VjaG9DYW5jZWxlcihib29sZWFuIGVuYWJsZSkgewotICAgIHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0
aWNFY2hvQ2FuY2VsZXIgPSBlbmFibGU7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6
ZWQgdm9pZCBzZXRXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3Nvcihib29sZWFuIGVuYWJsZSkgewot
ICAgIHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yID0gZW5hYmxlOwotICB9Ci0gIHB1Ymxp
YyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29u
dHJvbChib29sZWFuIGVuYWJsZSkgewotICAgIC8vIFRPRE8oaGVucmlrYSk6IGRlcHJlY2F0ZWQ7
IHJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2VkIGJ5IGFueSBjbGllbnQuCi0gICAgTG9nZ2luZy53
KFRBRywgInNldFdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woKSBpcyBkZXByZWNhdGVk
Iik7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBib29sZWFuIHVzZVdlYlJ0
Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKSB7Ci0gICAgaWYgKHVzZVdlYlJ0Y0Jhc2VkQWNv
dXN0aWNFY2hvQ2FuY2VsZXIpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJPdmVycmlkaW5nIGRl
ZmF1bHQgYmVoYXZpb3I7IG5vdyB1c2luZyBXZWJSVEMgQUVDISIpOwotICAgIH0KLSAgICByZXR1
cm4gdXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcjsKLSAgfQotICBwdWJsaWMgc3Rh
dGljIHN5bmNocm9uaXplZCBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKCkg
ewotICAgIGlmICh1c2VXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvcikgewotICAgICAgTG9nZ2lu
Zy53KFRBRywgIk92ZXJyaWRpbmcgZGVmYXVsdCBiZWhhdmlvcjsgbm93IHVzaW5nIFdlYlJUQyBO
UyEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yOwot
ICB9Ci0gIC8vIFRPRE8oaGVucmlrYSk6IGRlcHJlY2F0ZWQ7IHJlbW92ZSB3aGVuIG5vIGxvbmdl
ciB1c2VkIGJ5IGFueSBjbGllbnQuCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xl
YW4gdXNlV2ViUnRjQmFzZWRBdXRvbWF0aWNHYWluQ29udHJvbCgpIHsKLSAgICAvLyBBbHdheXMg
cmV0dXJuIHRydWUgaGVyZSB0byBhdm9pZCB0cnlpbmcgdG8gdXNlIGFueSBidWlsdC1pbiBBR0Mu
Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmlj
ZSBzdXBwb3J0cyBhbiBhdWRpbyBlZmZlY3QgKEFFQyBvciBOUykuCi0gIC8vIEZvdXIgY29uZGl0
aW9ucyBtdXN0IGJlIGZ1bGZpbGxlZCBpZiBmdW5jdGlvbnMgYXJlIHRvIHJldHVybiB0cnVlOgot
ICAvLyAxKSB0aGUgcGxhdGZvcm0gbXVzdCBzdXBwb3J0IHRoZSBidWlsdC1pbiAoSFcpIGVmZmVj
dCwKLSAgLy8gMikgZXhwbGljaXQgdXNlIChvdmVycmlkZSkgb2YgYSBXZWJSVEMgYmFzZWQgdmVy
c2lvbiBtdXN0IG5vdCBiZSBzZXQsCi0gIC8vIDMpIHRoZSBkZXZpY2UgbXVzdCBub3QgYmUgYmxh
Y2tsaXN0ZWQgZm9yIHVzZSBvZiB0aGUgZWZmZWN0LCBhbmQKLSAgLy8gNCkgdGhlIFVVSUQgb2Yg
dGhlIGVmZmVjdCBtdXN0IGJlIGFwcHJvdmVkIChzb21lIFVVSURzIGNhbiBiZSBleGNsdWRlZCku
Ci0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVk
KCkgewotICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuY2FuVXNlQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXIoKTsKLSAgfQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JT
dXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VOb2lzZVN1
cHByZXNzb3IoKTsKLSAgfQotICAvLyBUT0RPKGhlbnJpa2EpOiBkZXByZWNhdGVkOyByZW1vdmUg
d2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICBwdWJsaWMgc3RhdGljIGJvb2xl
YW4gaXNBdXRvbWF0aWNHYWluQ29udHJvbFN1cHBvcnRlZCgpIHsKLSAgICAvLyBBbHdheXMgcmV0
dXJuIGZhbHNlIGhlcmUgdG8gYXZvaWQgdHJ5aW5nIHRvIHVzZSBhbnkgYnVpbHQtaW4gQUdDLgot
ICAgIHJldHVybiBmYWxzZTsKLSAgfQotCi0gIC8vIENhbGwgdGhpcyBtZXRob2QgaWYgdGhlIGRl
ZmF1bHQgaGFuZGxpbmcgb2YgcXVlcnlpbmcgdGhlIG5hdGl2ZSBzYW1wbGUKLSAgLy8gcmF0ZSBz
aGFsbCBiZSBvdmVycmlkZGVuLiBDYW4gYmUgdXNlZnVsIG9uIHNvbWUgZGV2aWNlcyB3aGVyZSB0
aGUKLSAgLy8gYXZhaWxhYmxlIEFuZHJvaWQgQVBJcyBhcmUga25vd24gdG8gcmV0dXJuIGludmFs
aWQgcmVzdWx0cy4KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXREZWZhdWx0
U2FtcGxlUmF0ZUh6KGludCBzYW1wbGVSYXRlSHopIHsKLSAgICBpc0RlZmF1bHRTYW1wbGVSYXRl
T3ZlcnJpZGRlbiA9IHRydWU7Ci0gICAgZGVmYXVsdFNhbXBsZVJhdGVIeiA9IHNhbXBsZVJhdGVI
ejsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gaXNEZWZhdWx0
U2FtcGxlUmF0ZU92ZXJyaWRkZW4oKSB7Ci0gICAgcmV0dXJuIGlzRGVmYXVsdFNhbXBsZVJhdGVP
dmVycmlkZGVuOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgaW50IGdldERl
ZmF1bHRTYW1wbGVSYXRlSHooKSB7Ci0gICAgcmV0dXJuIGRlZmF1bHRTYW1wbGVSYXRlSHo7Ci0g
IH0KLQotICBwdWJsaWMgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXRCbGFja0xpc3RlZE1vZGVsc0Zv
ckFlY1VzYWdlKCkgewotICAgIHJldHVybiBBcnJheXMuYXNMaXN0KFdlYlJ0Y0F1ZGlvVXRpbHMu
QkxBQ0tMSVNURURfQUVDX01PREVMUyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIExpc3Q8U3Ry
aW5nPiBnZXRCbGFja0xpc3RlZE1vZGVsc0Zvck5zVXNhZ2UoKSB7Ci0gICAgcmV0dXJuIEFycmF5
cy5hc0xpc3QoV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9OU19NT0RFTFMpOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkdpbmdlckJyZWFkT3JIaWdoZXIoKSB7
Ci0gICAgLy8gTm92ZW1iZXIgMjAxMDogQW5kcm9pZCAyLjMsIEFQSSBMZXZlbCA5LgotICAgIHJl
dHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5HSU5HRVJC
UkVBRDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25KZWxseUJlYW5P
ckhpZ2hlcigpIHsKLSAgICAvLyBKdW5lIDIwMTI6IEFuZHJvaWQgNC4xLiBBUEkgTGV2ZWwgMTYu
Ci0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVT
LkpFTExZX0JFQU47Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uSmVs
bHlCZWFuTVIxT3JIaWdoZXIoKSB7Ci0gICAgLy8gTm92ZW1iZXIgMjAxMjogQW5kcm9pZCA0LjIu
IEFQSSBMZXZlbCAxNy4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxk
LlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjE7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJv
b2xlYW4gcnVubmluZ09uSmVsbHlCZWFuTVIyT3JIaWdoZXIoKSB7Ci0gICAgLy8gSnVseSAyNCwg
MjAxMzogQW5kcm9pZCA0LjMuIEFQSSBMZXZlbCAxOC4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lP
Ti5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTl9NUjI7Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uTG9sbGlwb3BPckhpZ2hlcigpIHsKLSAg
ICAvLyBBUEkgTGV2ZWwgMjEuCi0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBC
dWlsZC5WRVJTSU9OX0NPREVTLkxPTExJUE9QOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29s
ZWFuIHJ1bm5pbmdPbk1hcnNobWFsbG93T3JIaWdoZXIoKSB7Ci0gICAgLy8gQVBJIExldmVsIDIz
LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RF
Uy5NOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbk5vdWdhdE9ySGln
aGVyKCkgewotICAgIC8vIEFQSSBMZXZlbCAyNC4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5T
REtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTjsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRo
b2QgZm9yIGJ1aWxkaW5nIGEgc3RyaW5nIG9mIHRocmVhZCBpbmZvcm1hdGlvbi4KLSAgcHVibGlj
IHN0YXRpYyBTdHJpbmcgZ2V0VGhyZWFkSW5mbygpIHsKLSAgICByZXR1cm4gIkBbbmFtZT0iICsg
VGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXROYW1lKCkgKyAiLCBpZD0iICsgVGhyZWFkLmN1cnJl
bnRUaHJlYWQoKS5nZXRJZCgpCi0gICAgICAgICsgIl0iOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0
cnVlIGlmIHdlJ3JlIHJ1bm5pbmcgb24gZW11bGF0b3IuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVh
biBydW5uaW5nT25FbXVsYXRvcigpIHsKLSAgICByZXR1cm4gQnVpbGQuSEFSRFdBUkUuZXF1YWxz
KCJnb2xkZmlzaCIpICYmIEJ1aWxkLkJSQU5ELnN0YXJ0c1dpdGgoImdlbmVyaWNfIik7Ci0gIH0K
LQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpcyBibGFja2xpc3RlZCBmb3IgT3Bl
blNMIEVTIHVzYWdlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGV2aWNlSXNCbGFja2xpc3Rl
ZEZvck9wZW5TTEVTVXNhZ2UoKSB7Ci0gICAgTGlzdDxTdHJpbmc+IGJsYWNrTGlzdGVkTW9kZWxz
ID0gQXJyYXlzLmFzTGlzdChCTEFDS0xJU1RFRF9PUEVOX1NMX0VTX01PREVMUyk7Ci0gICAgcmV0
dXJuIGJsYWNrTGlzdGVkTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgfQotCi0gIC8v
IEluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGJ1aWxkLCB0YWtlbiBmcm9tIHN5c3RlbSBw
cm9wZXJ0aWVzLgotICBwdWJsaWMgc3RhdGljIHZvaWQgbG9nRGV2aWNlSW5mbyhTdHJpbmcgdGFn
KSB7Ci0gICAgTG9nZ2luZy5kKHRhZywgIkFuZHJvaWQgU0RLOiAiICsgQnVpbGQuVkVSU0lPTi5T
REtfSU5UICsgIiwgIgotICAgICAgICAgICAgKyAiUmVsZWFzZTogIiArIEJ1aWxkLlZFUlNJT04u
UkVMRUFTRSArICIsICIKLSAgICAgICAgICAgICsgIkJyYW5kOiAiICsgQnVpbGQuQlJBTkQgKyAi
LCAiCi0gICAgICAgICAgICArICJEZXZpY2U6ICIgKyBCdWlsZC5ERVZJQ0UgKyAiLCAiCi0gICAg
ICAgICAgICArICJJZDogIiArIEJ1aWxkLklEICsgIiwgIgotICAgICAgICAgICAgKyAiSGFyZHdh
cmU6ICIgKyBCdWlsZC5IQVJEV0FSRSArICIsICIKLSAgICAgICAgICAgICsgIk1hbnVmYWN0dXJl
cjogIiArIEJ1aWxkLk1BTlVGQUNUVVJFUiArICIsICIKLSAgICAgICAgICAgICsgIk1vZGVsOiAi
ICsgQnVpbGQuTU9ERUwgKyAiLCAiCi0gICAgICAgICAgICArICJQcm9kdWN0OiAiICsgQnVpbGQu
UFJPRFVDVCk7Ci0gIH0KLQotICAvLyBDaGVja3MgaWYgdGhlIHByb2Nlc3MgaGFzIGFzIHNwZWNp
ZmllZCBwZXJtaXNzaW9uIG9yIG5vdC4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGhhc1Blcm1p
c3Npb24oQ29udGV4dCBjb250ZXh0LCBTdHJpbmcgcGVybWlzc2lvbikgewotICAgIHJldHVybiBj
b250ZXh0LmNoZWNrUGVybWlzc2lvbihwZXJtaXNzaW9uLCBQcm9jZXNzLm15UGlkKCksIFByb2Nl
c3MubXlVaWQoKSkKLSAgICAgICAgPT0gUGFja2FnZU1hbmFnZXIuUEVSTUlTU0lPTl9HUkFOVEVE
OwotICB9Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vl
bmdpbmUvQnVpbGRJbmZvLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3Ny
Yy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL0J1aWxkSW5mby5qYXZhCShyZXZpc2lvbiAyMTIyNzMp
CisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvQnVpbGRJ
bmZvLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MSArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgYW5kcm9p
ZC5vcy5CdWlsZDsKLQotcHVibGljIGZpbmFsIGNsYXNzIEJ1aWxkSW5mbyB7Ci0gIHB1YmxpYyBz
dGF0aWMgU3RyaW5nIGdldERldmljZSgpIHsKLSAgICByZXR1cm4gQnVpbGQuREVWSUNFOwotICB9
Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNlTW9kZWwoKSB7Ci0gICAgcmV0dXJu
IEJ1aWxkLk1PREVMOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UHJvZHVjdCgp
IHsKLSAgICByZXR1cm4gQnVpbGQuUFJPRFVDVDsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgU3Ry
aW5nIGdldEJyYW5kKCkgewotICAgIHJldHVybiBCdWlsZC5CUkFORDsKLSAgfQotCi0gIHB1Ymxp
YyBzdGF0aWMgU3RyaW5nIGdldERldmljZU1hbnVmYWN0dXJlcigpIHsKLSAgICByZXR1cm4gQnVp
bGQuTUFOVUZBQ1RVUkVSOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QW5kcm9p
ZEJ1aWxkSWQoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLklEOwotICB9Ci0KLSAgcHVibGljIHN0YXRp
YyBTdHJpbmcgZ2V0QnVpbGRUeXBlKCkgewotICAgIHJldHVybiBCdWlsZC5UWVBFOwotICB9Ci0K
LSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QnVpbGRSZWxlYXNlKCkgewotICAgIHJldHVybiBC
dWlsZC5WRVJTSU9OLlJFTEVBU0U7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGludCBnZXRTZGtW
ZXJzaW9uKCkgewotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQ7Ci0gIH0KLX0KSW5k
ZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNB
dWRpb0VmZmVjdHMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29y
Zy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9FZmZlY3RzLmphdmEJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9X
ZWJSdGNBdWRpb0VmZmVjdHMuamF2YQkobm9uZXhpc3RlbnQpCkBAIC0xLDMyNSArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcud2VicnRjLnZvaWNlZW5naW5lOwot
Ci1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi1pbXBvcnQgYW5kcm9pZC5hbm5vdGF0aW9u
LlRhcmdldEFwaTsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLmF1ZGlvZnguQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1ZGlvRWZmZWN0OwotaW1wb3J0
IGFuZHJvaWQubWVkaWEuYXVkaW9meC5BdWRpb0VmZmVjdC5EZXNjcmlwdG9yOwotaW1wb3J0IGFu
ZHJvaWQubWVkaWEuYXVkaW9meC5BdXRvbWF0aWNHYWluQ29udHJvbDsKLWltcG9ydCBhbmRyb2lk
Lm1lZGlhLmF1ZGlvZnguTm9pc2VTdXBwcmVzc29yOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7
Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVVVJRDsKLQotLy8g
VGhpcyBjbGFzcyB3cmFwcyBjb250cm9sIG9mIHRocmVlIGRpZmZlcmVudCBwbGF0Zm9ybSBlZmZl
Y3RzLiBTdXBwb3J0ZWQKLS8vIGVmZmVjdHMgYXJlOiBBY291c3RpY0VjaG9DYW5jZWxlciAoQUVD
KSBhbmQgTm9pc2VTdXBwcmVzc29yIChOUykuCi0vLyBDYWxsaW5nIGVuYWJsZSgpIHdpbGwgYWN0
aXZlIGFsbCBlZmZlY3RzIHRoYXQgYXJlCi0vLyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBpZiB0
aGUgY29ycmVzcG9uZGluZyB8c2hvdWxkRW5hYmxlWFhYfCBtZW1iZXIgaXMgc2V0LgotY2xhc3Mg
V2ViUnRjQXVkaW9FZmZlY3RzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJV
RyA9IGZhbHNlOwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRj
QXVkaW9FZmZlY3RzIjsKLQotICAvLyBVVUlEcyBmb3IgU29mdHdhcmUgQXVkaW8gRWZmZWN0cyB0
aGF0IHdlIHdhbnQgdG8gYXZvaWQgdXNpbmcuCi0gIC8vIFRoZSBpbXBsZW1lbnRvciBmaWVsZCB3
aWxsIGJlIHNldCB0byAiVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCIuCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFVVSUQgQU9TUF9BQ09VU1RJQ19FQ0hPX0NBTkNFTEVSID0KLSAgICAg
IFVVSUQuZnJvbVN0cmluZygiYmIzOTJlYzAtOGQ0ZC0xMWUwLWE4OTYtMDAwMmE1ZDVjNTFiIik7
Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFVVSUQgQU9TUF9OT0lTRV9TVVBQUkVTU09SID0KLSAg
ICAgIFVVSUQuZnJvbVN0cmluZygiYzA2Yzg0MDAtOGUwNi0xMWUwLTljYjYtMDAwMmE1ZDVjNTFi
Iik7Ci0KLSAgLy8gQ29udGFpbnMgdGhlIGF2YWlsYWJsZSBlZmZlY3QgZGVzY3JpcHRvcnMgcmV0
dXJuZWQgZnJvbSB0aGUKLSAgLy8gQXVkaW9FZmZlY3QuZ2V0RWZmZWN0cygpIGNhbGwuIFRoaXMg
cmVzdWx0IGlzIGNhY2hlZCB0byBhdm9pZCBkb2luZyB0aGUKLSAgLy8gc2xvdyBPUyBjYWxsIG11
bHRpcGxlIHRpbWVzLgotICBwcml2YXRlIHN0YXRpYyBEZXNjcmlwdG9yW10gY2FjaGVkRWZmZWN0
cyA9IG51bGw7Ci0KLSAgLy8gQ29udGFpbnMgdGhlIGF1ZGlvIGVmZmVjdCBvYmplY3RzLiBDcmVh
dGVkIGluIGVuYWJsZSgpIGFuZCBkZXN0cm95ZWQKLSAgLy8gaW4gcmVsZWFzZSgpLgotICBwcml2
YXRlIEFjb3VzdGljRWNob0NhbmNlbGVyIGFlYyA9IG51bGw7Ci0gIHByaXZhdGUgTm9pc2VTdXBw
cmVzc29yIG5zID0gbnVsbDsKLQotICAvLyBBZmZlY3RzIHRoZSBmaW5hbCBzdGF0ZSBnaXZlbiB0
byB0aGUgc2V0RW5hYmxlZCgpIG1ldGhvZCBvbiBlYWNoIGVmZmVjdC4KLSAgLy8gVGhlIGRlZmF1
bHQgc3RhdGUgaXMgc2V0IHRvICJkaXNhYmxlZCIgYnV0IGVhY2ggZWZmZWN0IGNhbiBhbHNvIGJl
IGVuYWJsZWQKLSAgLy8gYnkgY2FsbGluZyBzZXRBRUMoKSBhbmQgc2V0TlMoKS4KLSAgLy8gVG8g
ZW5hYmxlIGFuIGVmZmVjdCwgYm90aCB0aGUgc2hvdWxkRW5hYmxlWFhYIG1lbWJlciBhbmQgdGhl
IHN0YXRpYwotICAvLyBjYW5Vc2VYWFgoKSBtdXN0IGJlIHRydWUuCi0gIHByaXZhdGUgYm9vbGVh
biBzaG91bGRFbmFibGVBZWMgPSBmYWxzZTsKLSAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEVuYWJs
ZU5zID0gZmFsc2U7Ci0KLSAgLy8gQ2hlY2tzIGlmIHRoZSBkZXZpY2UgaW1wbGVtZW50cyBBY291
c3RpYyBFY2hvIENhbmNlbGxhdGlvbiAoQUVDKS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBk
ZXZpY2UgaW1wbGVtZW50cyBBRUMsIGZhbHNlIG90aGVyd2lzZS4KLSAgcHVibGljIHN0YXRpYyBi
b29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAgLy8gTm90ZTog
d2UncmUgdXNpbmcgaXNBY291c3RpY0VjaG9DYW5jZWxlckVmZmVjdEF2YWlsYWJsZSgpIGluc3Rl
YWQgb2YKLSAgICAvLyBBY291c3RpY0VjaG9DYW5jZWxlci5pc0F2YWlsYWJsZSgpIHRvIGF2b2lk
IHRoZSBleHBlbnNpdmUgZ2V0RWZmZWN0cygpCi0gICAgLy8gT1MgQVBJIGNhbGwuCi0gICAgcmV0
dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuT3JIaWdoZXIoKSAmJiBpc0Fj
b3VzdGljRWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCk7Ci0gIH0KLQotICAvLyBDaGVja3Mg
aWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIE5vaXNlIFN1cHByZXNzaW9uIChOUykuCi0gIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGltcGxlbWVudHMgTlMsIGZhbHNlIG90aGVyd2lzZS4K
LSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgewot
ICAgIC8vIE5vdGU6IHdlJ3JlIHVzaW5nIGlzTm9pc2VTdXBwcmVzc29yRWZmZWN0QXZhaWxhYmxl
KCkgaW5zdGVhZCBvZgotICAgIC8vIE5vaXNlU3VwcHJlc3Nvci5pc0F2YWlsYWJsZSgpIHRvIGF2
b2lkIHRoZSBleHBlbnNpdmUgZ2V0RWZmZWN0cygpCi0gICAgLy8gT1MgQVBJIGNhbGwuCi0gICAg
cmV0dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVsbHlCZWFuT3JIaWdoZXIoKSAmJiBp
c05vaXNlU3VwcHJlc3NvckVmZmVjdEF2YWlsYWJsZSgpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0ZWQgZm9yIEhXIEFFQyB1c2FnZS4KLSAgcHVi
bGljIHN0YXRpYyBib29sZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJCbGFja2xpc3RlZCgpIHsK
LSAgICBMaXN0PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBXZWJSdGNBdWRpb1V0aWxzLmdl
dEJsYWNrTGlzdGVkTW9kZWxzRm9yQWVjVXNhZ2UoKTsKLSAgICBib29sZWFuIGlzQmxhY2tsaXN0
ZWQgPSBibGFja0xpc3RlZE1vZGVscy5jb250YWlucyhCdWlsZC5NT0RFTCk7Ci0gICAgaWYgKGlz
QmxhY2tsaXN0ZWQpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsIEJ1aWxkLk1PREVMICsgIiBpcyBi
bGFja2xpc3RlZCBmb3IgSFcgQUVDIHVzYWdlISIpOwotICAgIH0KLSAgICByZXR1cm4gaXNCbGFj
a2xpc3RlZDsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGJsYWNr
bGlzdGVkIGZvciBIVyBOUyB1c2FnZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9pc2VT
dXBwcmVzc29yQmxhY2tsaXN0ZWQoKSB7Ci0gICAgTGlzdDxTdHJpbmc+IGJsYWNrTGlzdGVkTW9k
ZWxzID0gV2ViUnRjQXVkaW9VdGlscy5nZXRCbGFja0xpc3RlZE1vZGVsc0Zvck5zVXNhZ2UoKTsK
LSAgICBib29sZWFuIGlzQmxhY2tsaXN0ZWQgPSBibGFja0xpc3RlZE1vZGVscy5jb250YWlucyhC
dWlsZC5NT0RFTCk7Ci0gICAgaWYgKGlzQmxhY2tsaXN0ZWQpIHsKLSAgICAgIExvZ2dpbmcudyhU
QUcsIEJ1aWxkLk1PREVMICsgIiBpcyBibGFja2xpc3RlZCBmb3IgSFcgTlMgdXNhZ2UhIik7Ci0g
ICAgfQotICAgIHJldHVybiBpc0JsYWNrbGlzdGVkOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBwbGF0Zm9ybSBBRUMgc2hvdWxkIGJlIGV4Y2x1ZGVkIGJhc2VkIG9uIGl0cyBVVUlE
LgotICAvLyBBdWRpb0VmZmVjdC5xdWVyeUVmZmVjdHMoKSBjYW4gdGhyb3cgSWxsZWdhbFN0YXRl
RXhjZXB0aW9uLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlz
QWNvdXN0aWNFY2hvQ2FuY2VsZXJFeGNsdWRlZEJ5VVVJRCgpIHsKLSAgICBmb3IgKERlc2NyaXB0
b3IgZCA6IGdldEF2YWlsYWJsZUVmZmVjdHMoKSkgewotICAgICAgaWYgKGQudHlwZS5lcXVhbHMo
QXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDKQotICAgICAgICAgICYmIGQudXVpZC5lcXVhbHMo
QU9TUF9BQ09VU1RJQ19FQ0hPX0NBTkNFTEVSKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBwbGF0Zm9ybSBOUyBzaG91bGQgYmUgZXhjbHVkZWQgYmFzZWQgb24gaXRzIFVVSUQu
Ci0gIC8vIEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0cygpIGNhbiB0aHJvdyBJbGxlZ2FsU3RhdGVF
eGNlcHRpb24uCi0gIEBUYXJnZXRBcGkoMTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNO
b2lzZVN1cHByZXNzb3JFeGNsdWRlZEJ5VVVJRCgpIHsKLSAgICBmb3IgKERlc2NyaXB0b3IgZCA6
IGdldEF2YWlsYWJsZUVmZmVjdHMoKSkgewotICAgICAgaWYgKGQudHlwZS5lcXVhbHMoQXVkaW9F
ZmZlY3QuRUZGRUNUX1RZUEVfTlMpICYmIGQudXVpZC5lcXVhbHMoQU9TUF9OT0lTRV9TVVBQUkVT
U09SKSkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMg
QWNvdXN0aWMgRWNobyBDYW5jZWxsYXRpb24gKEFFQykuCi0gIEBUYXJnZXRBcGkoMTgpCi0gIHBy
aXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5jZWxlckVmZmVjdEF2YWlsYWJs
ZSgpIHsKLSAgICByZXR1cm4gaXNFZmZlY3RUeXBlQXZhaWxhYmxlKEF1ZGlvRWZmZWN0LkVGRkVD
VF9UWVBFX0FFQyk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBzdXBw
b3J0cyBOb2lzZSBTdXBwcmVzc2lvbiAoTlMpLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRl
IHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yRWZmZWN0QXZhaWxhYmxlKCkgewotICAg
IHJldHVybiBpc0VmZmVjdFR5cGVBdmFpbGFibGUoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfTlMp
OwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25kaXRpb25zIGZvciBzdXBwb3J0
aW5nIHRoZSBIVyBBRUMgYXJlIGZ1bGZpbGxlZC4KLSAgLy8gSXQgd2lsbCBub3QgYmUgcG9zc2li
bGUgdG8gZW5hYmxlIHRoZSBIVyBBRUMgaWYgdGhpcyBtZXRob2QgcmV0dXJucyBmYWxzZS4KLSAg
cHVibGljIHN0YXRpYyBib29sZWFuIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKCkgewotICAg
IGJvb2xlYW4gY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIgPSBpc0Fjb3VzdGljRWNob0NhbmNl
bGVyU3VwcG9ydGVkKCkKLSAgICAgICAgJiYgIVdlYlJ0Y0F1ZGlvVXRpbHMudXNlV2ViUnRjQmFz
ZWRBY291c3RpY0VjaG9DYW5jZWxlcigpCi0gICAgICAgICYmICFpc0Fjb3VzdGljRWNob0NhbmNl
bGVyQmxhY2tsaXN0ZWQoKSAmJiAhaXNBY291c3RpY0VjaG9DYW5jZWxlckV4Y2x1ZGVkQnlVVUlE
KCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgImNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyOiAiICsg
Y2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIpOwotICAgIHJldHVybiBjYW5Vc2VBY291c3RpY0Vj
aG9DYW5jZWxlcjsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBhbGwgY29uZGl0aW9ucyBm
b3Igc3VwcG9ydGluZyB0aGUgSFcgTlMgYXJlIGZ1bGZpbGxlZC4KLSAgLy8gSXQgd2lsbCBub3Qg
YmUgcG9zc2libGUgdG8gZW5hYmxlIHRoZSBIVyBOUyBpZiB0aGlzIG1ldGhvZCByZXR1cm5zIGZh
bHNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2FuVXNlTm9pc2VTdXBwcmVzc29yKCkgewot
ICAgIGJvb2xlYW4gY2FuVXNlTm9pc2VTdXBwcmVzc29yID0gaXNOb2lzZVN1cHByZXNzb3JTdXBw
b3J0ZWQoKQotICAgICAgICAmJiAhV2ViUnRjQXVkaW9VdGlscy51c2VXZWJSdGNCYXNlZE5vaXNl
U3VwcHJlc3NvcigpICYmICFpc05vaXNlU3VwcHJlc3NvckJsYWNrbGlzdGVkKCkKLSAgICAgICAg
JiYgIWlzTm9pc2VTdXBwcmVzc29yRXhjbHVkZWRCeVVVSUQoKTsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiY2FuVXNlTm9pc2VTdXBwcmVzc29yOiAiICsgY2FuVXNlTm9pc2VTdXBwcmVzc29yKTsKLSAg
ICByZXR1cm4gY2FuVXNlTm9pc2VTdXBwcmVzc29yOwotICB9Ci0KLSAgc3RhdGljIFdlYlJ0Y0F1
ZGlvRWZmZWN0cyBjcmVhdGUoKSB7Ci0gICAgLy8gUmV0dXJuIG51bGwgaWYgVm9JUCBlZmZlY3Rz
IChBRUMsIEFHQyBhbmQgTlMpIGFyZSBub3Qgc3VwcG9ydGVkLgotICAgIGlmICghV2ViUnRjQXVk
aW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5PckhpZ2hlcigpKSB7Ci0gICAgICBMb2dnaW5nLnco
VEFHLCAiQVBJIGxldmVsIDE2IG9yIGhpZ2hlciBpcyByZXF1aXJlZCEiKTsKLSAgICAgIHJldHVy
biBudWxsOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFdlYlJ0Y0F1ZGlvRWZmZWN0cygpOwotICB9
Ci0KLSAgcHJpdmF0ZSBXZWJSdGNBdWRpb0VmZmVjdHMoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywg
ImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICB9Ci0KLSAgLy8g
Q2FsbCB0aGlzIG1ldGhvZCB0byBlbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gQUVDLiBJ
dCBtb2RpZmllcwotICAvLyB8c2hvdWxkRW5hYmxlQWVjfCB3aGljaCBpcyB1c2VkIGluIGVuYWJs
ZSgpIHdoZXJlIHRoZSBhY3R1YWwgc3RhdGUKLSAgLy8gb2YgdGhlIEFFQyBlZmZlY3QgaXMgbW9k
aWZpZWQuIFJldHVybnMgdHJ1ZSBpZiBIVyBBRUMgaXMgc3VwcG9ydGVkIGFuZAotICAvLyBmYWxz
ZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBib29sZWFuIHNldEFFQyhib29sZWFuIGVuYWJsZSkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJzZXRBRUMoIiArIGVuYWJsZSArICIpIik7Ci0gICAgaWYgKCFj
YW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiUGxh
dGZvcm0gQUVDIGlzIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgIHNob3VsZEVuYWJsZUFlYyA9IGZh
bHNlOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoYWVjICE9IG51bGwgJiYg
KGVuYWJsZSAhPSBzaG91bGRFbmFibGVBZWMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiUGxh
dGZvcm0gQUVDIHN0YXRlIGNhbid0IGJlIG1vZGlmaWVkIHdoaWxlIHJlY29yZGluZyIpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzaG91bGRFbmFibGVBZWMgPSBlbmFibGU7Ci0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGVuYWJsZSBv
ciBkaXNhYmxlIHRoZSBwbGF0Zm9ybSBOUy4gSXQgbW9kaWZpZXMKLSAgLy8gfHNob3VsZEVuYWJs
ZU5zfCB3aGljaCBpcyB1c2VkIGluIGVuYWJsZSgpIHdoZXJlIHRoZSBhY3R1YWwgc3RhdGUKLSAg
Ly8gb2YgdGhlIE5TIGVmZmVjdCBpcyBtb2RpZmllZC4gUmV0dXJucyB0cnVlIGlmIEhXIE5TIGlz
IHN1cHBvcnRlZCBhbmQKLSAgLy8gZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgYm9vbGVhbiBz
ZXROUyhib29sZWFuIGVuYWJsZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJzZXROUygiICsgZW5h
YmxlICsgIikiKTsKLSAgICBpZiAoIWNhblVzZU5vaXNlU3VwcHJlc3NvcigpKSB7Ci0gICAgICBM
b2dnaW5nLncoVEFHLCAiUGxhdGZvcm0gTlMgaXMgbm90IHN1cHBvcnRlZCIpOwotICAgICAgc2hv
dWxkRW5hYmxlTnMgPSBmYWxzZTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KG5zICE9IG51bGwgJiYgKGVuYWJsZSAhPSBzaG91bGRFbmFibGVOcykpIHsKLSAgICAgIExvZ2dp
bmcuZShUQUcsICJQbGF0Zm9ybSBOUyBzdGF0ZSBjYW4ndCBiZSBtb2RpZmllZCB3aGlsZSByZWNv
cmRpbmciKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc2hvdWxkRW5hYmxlTnMg
PSBlbmFibGU7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwdWJsaWMgdm9pZCBlbmFibGUo
aW50IGF1ZGlvU2Vzc2lvbikgewotICAgIExvZ2dpbmcuZChUQUcsICJlbmFibGUoYXVkaW9TZXNz
aW9uPSIgKyBhdWRpb1Nlc3Npb24gKyAiKSIpOwotICAgIGFzc2VydFRydWUoYWVjID09IG51bGwp
OwotICAgIGFzc2VydFRydWUobnMgPT0gbnVsbCk7Ci0KLSAgICAvLyBBZGQgbG9nZ2luZyBvZiBz
dXBwb3J0ZWQgZWZmZWN0cyBidXQgZmlsdGVyIG91dCAiVm9JUCBlZmZlY3RzIiwgaS5lLiwKLSAg
ICAvLyBBRUMsIEFFQyBhbmQgTlMuCi0gICAgZm9yIChEZXNjcmlwdG9yIGQgOiBBdWRpb0VmZmVj
dC5xdWVyeUVmZmVjdHMoKSkgewotICAgICAgaWYgKGVmZmVjdFR5cGVJc1ZvSVAoZC50eXBlKSB8
fCBERUJVRykgewotICAgICAgICBMb2dnaW5nLmQoVEFHLCAibmFtZTogIiArIGQubmFtZSArICIs
ICIKLSAgICAgICAgICAgICAgICArICJtb2RlOiAiICsgZC5jb25uZWN0TW9kZSArICIsICIKLSAg
ICAgICAgICAgICAgICArICJpbXBsZW1lbnRvcjogIiArIGQuaW1wbGVtZW50b3IgKyAiLCAiCi0g
ICAgICAgICAgICAgICAgKyAiVVVJRDogIiArIGQudXVpZCk7Ci0gICAgICB9Ci0gICAgfQotCi0g
ICAgaWYgKGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSkgewotICAgICAgLy8gQ3Jl
YXRlIGFuIEFjb3VzdGljRWNob0NhbmNlbGVyIGFuZCBhdHRhY2ggaXQgdG8gdGhlIEF1ZGlvUmVj
b3JkIG9uCi0gICAgICAvLyB0aGUgc3BlY2lmaWVkIGF1ZGlvIHNlc3Npb24uCi0gICAgICBhZWMg
PSBBY291c3RpY0VjaG9DYW5jZWxlci5jcmVhdGUoYXVkaW9TZXNzaW9uKTsKLSAgICAgIGlmIChh
ZWMgIT0gbnVsbCkgewotICAgICAgICBib29sZWFuIGVuYWJsZWQgPSBhZWMuZ2V0RW5hYmxlZCgp
OwotICAgICAgICBib29sZWFuIGVuYWJsZSA9IHNob3VsZEVuYWJsZUFlYyAmJiBjYW5Vc2VBY291
c3RpY0VjaG9DYW5jZWxlcigpOwotICAgICAgICBpZiAoYWVjLnNldEVuYWJsZWQoZW5hYmxlKSAh
PSBBdWRpb0VmZmVjdC5TVUNDRVNTKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxl
ZCB0byBzZXQgdGhlIEFjb3VzdGljRWNob0NhbmNlbGVyIHN0YXRlIik7Ci0gICAgICAgIH0KLSAg
ICAgICAgTG9nZ2luZy5kKFRBRywgIkFjb3VzdGljRWNob0NhbmNlbGVyOiB3YXMgIiArIChlbmFi
bGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIikKLSAgICAgICAgICAgICAgICArICIsIGVuYWJs
ZTogIiArIGVuYWJsZSArICIsIGlzIG5vdzogIgotICAgICAgICAgICAgICAgICsgKGFlYy5nZXRF
bmFibGVkKCkgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7Ci0gICAgICB9IGVsc2UgewotICAg
ICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXIgaW5zdGFuY2UiKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXNOb2lzZVN1cHBy
ZXNzb3JTdXBwb3J0ZWQoKSkgewotICAgICAgLy8gQ3JlYXRlIGFuIE5vaXNlU3VwcHJlc3NvciBh
bmQgYXR0YWNoIGl0IHRvIHRoZSBBdWRpb1JlY29yZCBvbiB0aGUKLSAgICAgIC8vIHNwZWNpZmll
ZCBhdWRpbyBzZXNzaW9uLgotICAgICAgbnMgPSBOb2lzZVN1cHByZXNzb3IuY3JlYXRlKGF1ZGlv
U2Vzc2lvbik7Ci0gICAgICBpZiAobnMgIT0gbnVsbCkgewotICAgICAgICBib29sZWFuIGVuYWJs
ZWQgPSBucy5nZXRFbmFibGVkKCk7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlID0gc2hvdWxkRW5h
YmxlTnMgJiYgY2FuVXNlTm9pc2VTdXBwcmVzc29yKCk7Ci0gICAgICAgIGlmIChucy5zZXRFbmFi
bGVkKGVuYWJsZSkgIT0gQXVkaW9FZmZlY3QuU1VDQ0VTUykgewotICAgICAgICAgIExvZ2dpbmcu
ZShUQUcsICJGYWlsZWQgdG8gc2V0IHRoZSBOb2lzZVN1cHByZXNzb3Igc3RhdGUiKTsKLSAgICAg
ICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAiTm9pc2VTdXBwcmVzc29yOiB3YXMgIiArIChl
bmFibGVkID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgKyAiLCBlbmFibGU6ICIKLSAgICAgICAg
ICAgICAgICArIGVuYWJsZSArICIsIGlzIG5vdzogIiArIChucy5nZXRFbmFibGVkKCkgPyAiZW5h
YmxlZCIgOiAiZGlzYWJsZWQiKSk7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBMb2dnaW5nLmUo
VEFHLCAiRmFpbGVkIHRvIGNyZWF0ZSB0aGUgTm9pc2VTdXBwcmVzc29yIGluc3RhbmNlIik7Ci0g
ICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLy8gUmVsZWFzZXMgYWxsIG5hdGl2ZSBhdWRpbyBlZmZl
Y3QgcmVzb3VyY2VzLiBJdCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8KLSAgLy8gcmVsZWFzZSB0aGUg
ZWZmZWN0IGVuZ2luZSB3aGVuIG5vdCBpbiB1c2UgYXMgY29udHJvbCBjYW4gYmUgcmV0dXJuZWQK
LSAgLy8gdG8gb3RoZXIgYXBwbGljYXRpb25zIG9yIHRoZSBuYXRpdmUgcmVzb3VyY2VzIHJlbGVh
c2VkLgotICBwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJyZWxl
YXNlIik7Ci0gICAgaWYgKGFlYyAhPSBudWxsKSB7Ci0gICAgICBhZWMucmVsZWFzZSgpOwotICAg
ICAgYWVjID0gbnVsbDsKLSAgICB9Ci0gICAgaWYgKG5zICE9IG51bGwpIHsKLSAgICAgIG5zLnJl
bGVhc2UoKTsKLSAgICAgIG5zID0gbnVsbDsKLSAgICB9Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRy
dWUgZm9yIGVmZmVjdCB0eXBlcyBpbiB8dHlwZXwgdGhhdCBhcmUgb2YgIlZvSVAiIHR5cGVzOgot
ICAvLyBBY291c3RpYyBFY2hvIENhbmNlbGVyIChBRUMpIG9yIEF1dG9tYXRpYyBHYWluIENvbnRy
b2wgKEFHQykgb3IKLSAgLy8gTm9pc2UgU3VwcHJlc3NvciAoTlMpLiBOb3RlIHRoYXQsIGFuIGV4
dHJhIGNoZWNrIGZvciBzdXBwb3J0IGlzIG5lZWRlZAotICAvLyBpbiBlYWNoIGNvbXBhcmlzb24g
c2luY2Ugc29tZSBkZXZpY2VzIGluY2x1ZGVzIGVmZmVjdHMgaW4gdGhlCi0gIC8vIEF1ZGlvRWZm
ZWN0LkRlc2NyaXB0b3IgYXJyYXkgdGhhdCBhcmUgYWN0dWFsbHkgbm90IGF2YWlsYWJsZSBvbiB0
aGUgZGV2aWNlLgotICAvLyBBcyBhbiBleGFtcGxlOiBTYW1zdW5nIEdhbGF4eSBTNiBpbmNsdWRl
cyBhbiBBR0MgaW4gdGhlIGRlc2NyaXB0b3IgYnV0Ci0gIC8vIEF1dG9tYXRpY0dhaW5Db250cm9s
LmlzQXZhaWxhYmxlKCkgcmV0dXJucyBmYWxzZS4KLSAgQFRhcmdldEFwaSgxOCkKLSAgcHJpdmF0
ZSBib29sZWFuIGVmZmVjdFR5cGVJc1ZvSVAoVVVJRCB0eXBlKSB7Ci0gICAgaWYgKCFXZWJSdGNB
dWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5QmVhbk1SMk9ySGlnaGVyKCkpCi0gICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICByZXR1cm4gKEF1ZGlvRWZmZWN0LkVGRkVDVF9UWVBFX0FFQy5lcXVhbHMo
dHlwZSkgJiYgaXNBY291c3RpY0VjaG9DYW5jZWxlclN1cHBvcnRlZCgpKQotICAgICAgICB8fCAo
QXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfTlMuZXF1YWxzKHR5cGUpICYmIGlzTm9pc2VTdXBwcmVz
c29yU3VwcG9ydGVkKCkpOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3aGljaCB0aHJvd3Mg
YW4gZXhjZXB0aW9uIHdoZW4gYW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3Rh
dGljIHZvaWQgYXNzZXJ0VHJ1ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0
aW9uKSB7Ci0gICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlv
biB0byBiZSB0cnVlIik7Ci0gICAgfQotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgY2FjaGVkIGNv
cHkgb2YgdGhlIGF1ZGlvIGVmZmVjdHMgYXJyYXksIGlmIGF2YWlsYWJsZSwgb3IKLSAgLy8gcXVl
cmllcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmb3IgdGhlIGxpc3Qgb2YgZWZmZWN0cy4KLSAgcHJp
dmF0ZSBzdGF0aWMgRGVzY3JpcHRvcltdIGdldEF2YWlsYWJsZUVmZmVjdHMoKSB7Ci0gICAgaWYg
KGNhY2hlZEVmZmVjdHMgIT0gbnVsbCkgewotICAgICAgcmV0dXJuIGNhY2hlZEVmZmVjdHM7Ci0g
ICAgfQotICAgIC8vIFRoZSBjYWNoaW5nIGlzIGJlc3QgZWZmb3J0IG9ubHkgLSBpZiB0aGlzIG1l
dGhvZCBpcyBjYWxsZWQgZnJvbSBzZXZlcmFsCi0gICAgLy8gdGhyZWFkcyBpbiBwYXJhbGxlbCwg
dGhleSBtYXkgZW5kIHVwIGRvaW5nIHRoZSB1bmRlcmx5aW5nIE9TIGNhbGwKLSAgICAvLyBtdWx0
aXBsZSB0aW1lcy4gSXQncyBub3JtYWxseSBvbmx5IGNhbGxlZCBvbiBvbmUgdGhyZWFkIHNvIHRo
ZXJlJ3Mgbm8KLSAgICAvLyByZWFsIG5lZWQgdG8gb3B0aW1pemUgZm9yIHRoZSBtdWx0aXBsZSB0
aHJlYWRzIGNhc2UuCi0gICAgY2FjaGVkRWZmZWN0cyA9IEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0
cygpOwotICAgIHJldHVybiBjYWNoZWRFZmZlY3RzOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIGFuIGVmZmVjdCBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgaXMgYXZhaWxhYmxlLiBGdW5jdGlv
bmFsbHkKLSAgLy8gZXF1aXZhbGVudCB0byAoTm9pc2VTdXBwcmVzc29yfEF1dG9tYXRpY0dhaW5D
b250cm9sfC4uLikuaXNBdmFpbGFibGUoKSwgYnV0Ci0gIC8vIGZhc3RlciBhcyBpdCBhdm9pZHMg
dGhlIGV4cGVuc2l2ZSBPUyBjYWxsIHRvIGVudW1lcmF0ZSBlZmZlY3RzLgotICBwcml2YXRlIHN0
YXRpYyBib29sZWFuIGlzRWZmZWN0VHlwZUF2YWlsYWJsZShVVUlEIGVmZmVjdFR5cGUpIHsKLSAg
ICBEZXNjcmlwdG9yW10gZWZmZWN0cyA9IGdldEF2YWlsYWJsZUVmZmVjdHMoKTsKLSAgICBpZiAo
ZWZmZWN0cyA9PSBudWxsKSB7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGZvciAo
RGVzY3JpcHRvciBkIDogZWZmZWN0cykgewotICAgICAgaWYgKGQudHlwZS5lcXVhbHMoZWZmZWN0
VHlwZSkpIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlci5qYXZhCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb01hbmFn
ZXIuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlci5qYXZhCShub25leGlzdGVudCkK
QEAgLTEsMzQ3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci0KLWltcG9y
dCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5D
b250ZXh0OwotaW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9y
dCBhbmRyb2lkLm1lZGlhLkF1ZGlvRm9ybWF0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9N
YW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9SZWNvcmQ7Ci1pbXBvcnQgYW5kcm9p
ZC5tZWRpYS5BdWRpb1RyYWNrOwotaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7Ci0KLWltcG9ydCBq
YXZhLnV0aWwuVGltZXI7Ci1pbXBvcnQgamF2YS51dGlsLlRpbWVyVGFzazsKLQotLy8gV2ViUnRj
QXVkaW9NYW5hZ2VyIGhhbmRsZXMgdGFza3MgdGhhdCB1c2VzIGFuZHJvaWQubWVkaWEuQXVkaW9N
YW5hZ2VyLgotLy8gQXQgY29uc3RydWN0aW9uLCBzdG9yZUF1ZGlvUGFyYW1ldGVycygpIGlzIGNh
bGxlZCBhbmQgaXQgcmV0cmlldmVzCi0vLyBmdW5kYW1lbnRhbCBhdWRpbyBwYXJhbWV0ZXJzIGxp
a2UgbmF0aXZlIHNhbXBsZSByYXRlIGFuZCBudW1iZXIgb2YgY2hhbm5lbHMuCi0vLyBUaGUgcmVz
dWx0IGlzIHRoZW4gcHJvdmlkZWQgdG8gdGhlIGNhbGxlciBieSBuYXRpdmVDYWNoZUF1ZGlvUGFy
YW1ldGVycygpLgotLy8gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjYWxsIGluaXQoKSB0byBzZXQg
dXAgdGhlIGF1ZGlvIGVudmlyb25tZW50IGZvciBiZXN0Ci0vLyBwb3NzaWJsZSAiVm9JUCBwZXJm
b3JtYW5jZSIuIEFsbCBzZXR0aW5ncyBkb25lIGluIGluaXQoKSBhcmUgcmV2ZXJ0ZWQgYnkKLS8v
IGRpc3Bvc2UoKS4gVGhpcyBjbGFzcyBjYW4gYWxzbyBiZSB1c2VkIHdpdGhvdXQgY2FsbGluZyBp
bml0KCkgaWYgdGhlIHVzZXIKLS8vIHByZWZlcnMgdG8gc2V0IHVwIHRoZSBhdWRpbyBlbnZpcm9u
bWVudCBzZXBhcmF0ZWx5LiBIb3dldmVyLCBpdCBpcwotLy8gcmVjb21tZW5kZWQgdG8gYWx3YXlz
IHVzZSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OLgotcHVibGljIGNsYXNzIFdl
YlJ0Y0F1ZGlvTWFuYWdlciB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcg
PSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1
ZGlvTWFuYWdlciI7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBibGFja2xpc3REZXZpY2VG
b3JPcGVuU0xFU1VzYWdlID0gZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gYmxhY2ts
aXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZUlzT3ZlcnJpZGRlbiA9IGZhbHNlOwotCi0gIC8vIENh
bGwgdGhpcyBtZXRob2QgdG8gb3ZlcnJpZGUgdGhlIGRlYXVsdCBsaXN0IG9mIGJsYWNrbGlzdGVk
IGRldmljZXMKLSAgLy8gc3BlY2lmaWVkIGluIFdlYlJ0Y0F1ZGlvVXRpbHMuQkxBQ0tMSVNURURf
T1BFTl9TTF9FU19NT0RFTFMuCi0gIC8vIEFsbG93cyBhbiBhcHAgdG8gdGFrZSBjb250cm9sIG92
ZXIgd2hpY2ggZGV2aWNlcyB0byBleGx1ZGUgZnJvbSB1c2luZwotICAvLyB0aGUgT3BlblNMIEVT
IGF1ZGlvIG91dHB1dCBwYXRoCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgc2V0
QmxhY2tsaXN0RGV2aWNlRm9yT3BlblNMRVNVc2FnZShib29sZWFuIGVuYWJsZSkgewotICAgIGJs
YWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJc092ZXJyaWRkZW4gPSB0cnVlOwotICAgIGJs
YWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UgPSBlbmFibGU7Ci0gIH0KLQotICAvLyBEZWZh
dWx0IGF1ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4KLSAgLy8gR3Vh
cmFudGVlZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZhdGUgc3RhdGlj
IGZpbmFsIGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5h
bCBpbnQgREVGQVVMVF9GUkFNRV9QRVJfQlVGRkVSID0gMjU2OwotCi0gIC8vIFRPRE8oaGVucmlr
YSk6IGFkZCBzdGVyZW8gc3VwcG9ydCBmb3IgcGxheW91dC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgaW50IENIQU5ORUxTID0gMTsKLQotICAvLyBMaXN0IG9mIHBvc3NpYmxlIGF1ZGlvIG1vZGVz
LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBBVURJT19NT0RFUyA9IG5ldyBTdHJp
bmdbXSB7Ci0gICAgICAiTU9ERV9OT1JNQUwiLCAiTU9ERV9SSU5HVE9ORSIsICJNT0RFX0lOX0NB
TEwiLCAiTU9ERV9JTl9DT01NVU5JQ0FUSU9OIiwKLSAgfTsKLQotICAvLyBQcml2YXRlIHV0aWxp
dHkgY2xhc3MgdGhhdCBwZXJpb2RpY2FsbHkgY2hlY2tzIGFuZCBsb2dzIHRoZSB2b2x1bWUgbGV2
ZWwKLSAgLy8gb2YgdGhlIGF1ZGlvIHN0cmVhbSB0aGF0IGlzIGN1cnJlbnRseSBjb250cm9sbGVk
IGJ5IHRoZSB2b2x1bWUgY29udHJvbC4KLSAgLy8gQSB0aW1lciB0cmlnZ2VycyBsb2dzIG9uY2Ug
ZXZlcnkgMTAgc2Vjb25kcyBhbmQgdGhlIHRpbWVyJ3MgYXNzb2NpYXRlZAotICAvLyB0aHJlYWQg
aXMgbmFtZWQgIldlYlJ0Y1ZvbHVtZUxldmVsTG9nZ2VyVGhyZWFkIi4KLSAgcHJpdmF0ZSBzdGF0
aWMgY2xhc3MgVm9sdW1lTG9nZ2VyIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcg
VEhSRUFEX05BTUUgPSAiV2ViUnRjVm9sdW1lTGV2ZWxMb2dnZXJUaHJlYWQiOwotICAgIHByaXZh
dGUgc3RhdGljIGZpbmFsIGludCBUSU1FUl9QRVJJT0RfSU5fU0VDT05EUyA9IDEwOwotCi0gICAg
cHJpdmF0ZSBmaW5hbCBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotICAgIHByaXZhdGUgVGlt
ZXIgdGltZXI7Ci0KLSAgICBwdWJsaWMgVm9sdW1lTG9nZ2VyKEF1ZGlvTWFuYWdlciBhdWRpb01h
bmFnZXIpIHsKLSAgICAgIHRoaXMuYXVkaW9NYW5hZ2VyID0gYXVkaW9NYW5hZ2VyOwotICAgIH0K
LQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgewotICAgICAgdGltZXIgPSBuZXcgVGltZXIoVEhS
RUFEX05BTUUpOwotICAgICAgdGltZXIuc2NoZWR1bGUobmV3IExvZ1ZvbHVtZVRhc2soYXVkaW9N
YW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1JJTkcpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvTWFuYWdlci5nZXRTdHJlYW1NYXhWb2x1bWUoQXVk
aW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKSksCi0gICAgICAgICAgMCwgVElNRVJfUEVSSU9E
X0lOX1NFQ09ORFMgKiAxMDAwKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGNsYXNzIExvZ1ZvbHVt
ZVRhc2sgZXh0ZW5kcyBUaW1lclRhc2sgewotICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbWF4Umlu
Z1ZvbHVtZTsKLSAgICAgIHByaXZhdGUgZmluYWwgaW50IG1heFZvaWNlQ2FsbFZvbHVtZTsKLQot
ICAgICAgTG9nVm9sdW1lVGFzayhpbnQgbWF4UmluZ1ZvbHVtZSwgaW50IG1heFZvaWNlQ2FsbFZv
bHVtZSkgewotICAgICAgICB0aGlzLm1heFJpbmdWb2x1bWUgPSBtYXhSaW5nVm9sdW1lOwotICAg
ICAgICB0aGlzLm1heFZvaWNlQ2FsbFZvbHVtZSA9IG1heFZvaWNlQ2FsbFZvbHVtZTsKLSAgICAg
IH0KLQotICAgICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAgICBmaW5hbCBpbnQgbW9kZSA9
IGF1ZGlvTWFuYWdlci5nZXRNb2RlKCk7Ci0gICAgICAgIGlmIChtb2RlID09IEF1ZGlvTWFuYWdl
ci5NT0RFX1JJTkdUT05FKSB7Ci0gICAgICAgICAgTG9nZ2luZy5kKFRBRywgIlNUUkVBTV9SSU5H
IHN0cmVhbSB2b2x1bWU6ICIKLSAgICAgICAgICAgICAgICAgICsgYXVkaW9NYW5hZ2VyLmdldFN0
cmVhbVZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1JJTkcpICsgIiAobWF4PSIKLSAgICAgICAg
ICAgICAgICAgICsgbWF4UmluZ1ZvbHVtZSArICIpIik7Ci0gICAgICAgIH0gZWxzZSBpZiAobW9k
ZSA9PSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OKSB7Ci0gICAgICAgICAgTG9n
Z2luZy5kKFRBRywgIlZPSUNFX0NBTEwgc3RyZWFtIHZvbHVtZTogIgotICAgICAgICAgICAgICAg
ICAgKyBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9J
Q0VfQ0FMTCkgKyAiIChtYXg9IgotICAgICAgICAgICAgICAgICAgKyBtYXhWb2ljZUNhbGxWb2x1
bWUgKyAiKSIpOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lk
IHN0b3AoKSB7Ci0gICAgICBpZiAodGltZXIgIT0gbnVsbCkgewotICAgICAgICB0aW1lci5jYW5j
ZWwoKTsKLSAgICAgICAgdGltZXIgPSBudWxsOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHBy
aXZhdGUgZmluYWwgbG9uZyBuYXRpdmVBdWRpb01hbmFnZXI7Ci0gIHByaXZhdGUgZmluYWwgQ29u
dGV4dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIEF1ZGlvTWFuYWdlciBhdWRpb01hbmFnZXI7
Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGluaXRpYWxpemVkID0gZmFsc2U7Ci0gIHByaXZhdGUgaW50
IG5hdGl2ZVNhbXBsZVJhdGU7Ci0gIHByaXZhdGUgaW50IG5hdGl2ZUNoYW5uZWxzOwotCi0gIHBy
aXZhdGUgYm9vbGVhbiBoYXJkd2FyZUFFQzsKLSAgcHJpdmF0ZSBib29sZWFuIGhhcmR3YXJlQUdD
OwotICBwcml2YXRlIGJvb2xlYW4gaGFyZHdhcmVOUzsKLSAgcHJpdmF0ZSBib29sZWFuIGxvd0xh
dGVuY3lPdXRwdXQ7Ci0gIHByaXZhdGUgYm9vbGVhbiBsb3dMYXRlbmN5SW5wdXQ7Ci0gIHByaXZh
dGUgYm9vbGVhbiBwcm9BdWRpbzsKLSAgcHJpdmF0ZSBpbnQgc2FtcGxlUmF0ZTsKLSAgcHJpdmF0
ZSBpbnQgY2hhbm5lbHM7Ci0gIHByaXZhdGUgaW50IG91dHB1dEJ1ZmZlclNpemU7Ci0gIHByaXZh
dGUgaW50IGlucHV0QnVmZmVyU2l6ZTsKLQotICBwcml2YXRlIGZpbmFsIFZvbHVtZUxvZ2dlciB2
b2x1bWVMb2dnZXI7Ci0KLSAgV2ViUnRjQXVkaW9NYW5hZ2VyKENvbnRleHQgY29udGV4dCwgbG9u
ZyBuYXRpdmVBdWRpb01hbmFnZXIpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJS
dGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgdGhpcy5jb250ZXh0ID0gY29udGV4
dDsKLSAgICB0aGlzLm5hdGl2ZUF1ZGlvTWFuYWdlciA9IG5hdGl2ZUF1ZGlvTWFuYWdlcjsKLSAg
ICBhdWRpb01hbmFnZXIgPSAoQXVkaW9NYW5hZ2VyKSBjb250ZXh0LmdldFN5c3RlbVNlcnZpY2Uo
Q29udGV4dC5BVURJT19TRVJWSUNFKTsKLSAgICBpZiAoREVCVUcpIHsKLSAgICAgIFdlYlJ0Y0F1
ZGlvVXRpbHMubG9nRGV2aWNlSW5mbyhUQUcpOwotICAgIH0KLSAgICB2b2x1bWVMb2dnZXIgPSBu
ZXcgVm9sdW1lTG9nZ2VyKGF1ZGlvTWFuYWdlcik7Ci0gICAgc3RvcmVBdWRpb1BhcmFtZXRlcnMo
KTsKLSAgICBuYXRpdmVDYWNoZUF1ZGlvUGFyYW1ldGVycyhzYW1wbGVSYXRlLCBjaGFubmVscywg
aGFyZHdhcmVBRUMsIGhhcmR3YXJlQUdDLCBoYXJkd2FyZU5TLAotICAgICAgICBsb3dMYXRlbmN5
T3V0cHV0LCBsb3dMYXRlbmN5SW5wdXQsIHByb0F1ZGlvLCBvdXRwdXRCdWZmZXJTaXplLCBpbnB1
dEJ1ZmZlclNpemUsCi0gICAgICAgIG5hdGl2ZUF1ZGlvTWFuYWdlcik7Ci0gIH0KLQotICBwcml2
YXRlIGJvb2xlYW4gaW5pdCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdCIgKyBXZWJSdGNB
dWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKGluaXRpYWxpemVkKSB7Ci0gICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgImF1ZGlvIG1vZGUgaXM6
ICIgKyBBVURJT19NT0RFU1thdWRpb01hbmFnZXIuZ2V0TW9kZSgpXSk7Ci0gICAgaW5pdGlhbGl6
ZWQgPSB0cnVlOwotICAgIHZvbHVtZUxvZ2dlci5zdGFydCgpOwotICAgIHJldHVybiB0cnVlOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGRpc3Bvc2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImRp
c3Bvc2UiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIGlmICghaW5p
dGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdm9sdW1lTG9nZ2VyLnN0b3Ao
KTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0NvbW11bmljYXRpb25Nb2RlRW5hYmxlZCgp
IHsKLSAgICByZXR1cm4gKGF1ZGlvTWFuYWdlci5nZXRNb2RlKCkgPT0gQXVkaW9NYW5hZ2VyLk1P
REVfSU5fQ09NTVVOSUNBVElPTik7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaXNEZXZpY2VC
bGFja2xpc3RlZEZvck9wZW5TTEVTVXNhZ2UoKSB7Ci0gICAgYm9vbGVhbiBibGFja2xpc3RlZCA9
IGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2VJc092ZXJyaWRkZW4KLSAgICAgICAgPyBi
bGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1VzYWdlCi0gICAgICAgIDogV2ViUnRjQXVkaW9VdGls
cy5kZXZpY2VJc0JsYWNrbGlzdGVkRm9yT3BlblNMRVNVc2FnZSgpOwotICAgIGlmIChibGFja2xp
c3RlZCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgQnVpbGQuTU9ERUwgKyAiIGlzIGJsYWNrbGlz
dGVkIGZvciBPcGVuU0wgRVMgdXNhZ2UhIik7Ci0gICAgfQotICAgIHJldHVybiBibGFja2xpc3Rl
ZDsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBzdG9yZUF1ZGlvUGFyYW1ldGVycygpIHsKLSAgICAv
LyBPbmx5IG1vbm8gaXMgc3VwcG9ydGVkIGN1cnJlbnRseSAoaW4gYm90aCBkaXJlY3Rpb25zKS4K
LSAgICAvLyBUT0RPKGhlbnJpa2EpOiBhZGQgc3VwcG9ydCBmb3Igc3RlcmVvIHBsYXlvdXQuCi0g
ICAgY2hhbm5lbHMgPSBDSEFOTkVMUzsKLSAgICBzYW1wbGVSYXRlID0gZ2V0TmF0aXZlT3V0cHV0
U2FtcGxlUmF0ZSgpOwotICAgIGhhcmR3YXJlQUVDID0gaXNBY291c3RpY0VjaG9DYW5jZWxlclN1
cHBvcnRlZCgpOwotICAgIC8vIFRPRE8oaGVucmlrYSk6IHVzZSBvZiBoYXJkd2FyZSBBR0MgaXMg
bm8gbG9uZ2VyIHN1cHBvcnRlZC4gQ3VycmVudGx5Ci0gICAgLy8gaGFyZGNvZGVkIHRvIGZhbHNl
LiBUbyBiZSByZW1vdmVkLgotICAgIGhhcmR3YXJlQUdDID0gZmFsc2U7Ci0gICAgaGFyZHdhcmVO
UyA9IGlzTm9pc2VTdXBwcmVzc29yU3VwcG9ydGVkKCk7Ci0gICAgbG93TGF0ZW5jeU91dHB1dCA9
IGlzTG93TGF0ZW5jeU91dHB1dFN1cHBvcnRlZCgpOwotICAgIGxvd0xhdGVuY3lJbnB1dCA9IGlz
TG93TGF0ZW5jeUlucHV0U3VwcG9ydGVkKCk7Ci0gICAgcHJvQXVkaW8gPSBpc1Byb0F1ZGlvU3Vw
cG9ydGVkKCk7Ci0gICAgb3V0cHV0QnVmZmVyU2l6ZSA9IGxvd0xhdGVuY3lPdXRwdXQgPyBnZXRM
b3dMYXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IGdldE1pbk91dHB1dEZyYW1lU2l6ZShzYW1wbGVSYXRlLCBjaGFu
bmVscyk7Ci0gICAgaW5wdXRCdWZmZXJTaXplID0gbG93TGF0ZW5jeUlucHV0ID8gZ2V0TG93TGF0
ZW5jeUlucHV0RnJhbWVzUGVyQnVmZmVyKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiBnZXRNaW5JbnB1dEZyYW1lU2l6ZShzYW1wbGVSYXRlLCBjaGFubmVscyk7Ci0g
IH0KLQotICAvLyBHZXRzIHRoZSBjdXJyZW50IGVhcnBpZWNlIHN0YXRlLgotICBwcml2YXRlIGJv
b2xlYW4gaGFzRWFycGllY2UoKSB7Ci0gICAgcmV0dXJuIGNvbnRleHQuZ2V0UGFja2FnZU1hbmFn
ZXIoKS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfVEVMRVBIT05ZKTsK
LSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBsb3ctbGF0ZW5jeSBhdWRpbyBvdXRwdXQgaXMg
c3VwcG9ydGVkLgotICBwcml2YXRlIGJvb2xlYW4gaXNMb3dMYXRlbmN5T3V0cHV0U3VwcG9ydGVk
KCkgewotICAgIHJldHVybiBpc09wZW5TTEVTU3VwcG9ydGVkKCkKLSAgICAgICAgJiYgY29udGV4
dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFja2FnZU1hbmFnZXIuRkVB
VFVSRV9BVURJT19MT1dfTEFURU5DWSk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgbG93
LWxhdGVuY3kgYXVkaW8gaW5wdXQgaXMgc3VwcG9ydGVkLgotICAvLyBUT0RPKGhlbnJpa2EpOiBy
ZW1vdmUgdGhlIGhhcmRjb2RlZCBmYWxzZSByZXR1cm4gdmFsdWUgd2hlbiBPcGVuU0wgRVMKLSAg
Ly8gaW5wdXQgcGVyZm9ybWFuY2UgaGFzIGJlZW4gZXZhbHVhdGVkIGFuZCB0ZXN0ZWQgbW9yZS4K
LSAgcHVibGljIGJvb2xlYW4gaXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0ZWQoKSB7Ci0gICAgLy8g
VE9ETyhoZW5yaWthKTogaW52ZXN0aWdhdGUgaWYgc29tZSBzb3J0IG9mIGRldmljZSBsaXN0IGlz
IG5lZWRlZCBoZXJlCi0gICAgLy8gYXMgd2VsbC4gVGhlIE5ESyBkb2Mgc3RhdGVzIHRoYXQ6ICJB
cyBvZiBBUEkgbGV2ZWwgMjEsIGxvd2VyIGxhdGVuY3kKLSAgICAvLyBhdWRpbyBpbnB1dCBpcyBz
dXBwb3J0ZWQgb24gc2VsZWN0IGRldmljZXMuIFRvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMKLSAg
ICAvLyBmZWF0dXJlLCBmaXJzdCBjb25maXJtIHRoYXQgbG93ZXIgbGF0ZW5jeSBvdXRwdXQgaXMg
YXZhaWxhYmxlIi4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25Mb2xsaXBv
cE9ySGlnaGVyKCkgJiYgaXNMb3dMYXRlbmN5T3V0cHV0U3VwcG9ydGVkKCk7Ci0gIH0KLQotICAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBoYXMgcHJvZmVzc2lvbmFsIGF1ZGlvIGxldmVs
IG9mIGZ1bmN0aW9uYWxpdHkKLSAgLy8gYW5kIHRoZXJlZm9yZSBzdXBwb3J0cyB0aGUgbG93ZXN0
IHBvc3NpYmxlIHJvdW5kLXRyaXAgbGF0ZW5jeS4KLSAgcHJpdmF0ZSBib29sZWFuIGlzUHJvQXVk
aW9TdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTWFy
c2htYWxsb3dPckhpZ2hlcigpCi0gICAgICAgICYmIGNvbnRleHQuZ2V0UGFja2FnZU1hbmFnZXIo
KS5oYXNTeXN0ZW1GZWF0dXJlKFBhY2thZ2VNYW5hZ2VyLkZFQVRVUkVfQVVESU9fUFJPKTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdGhlIG5hdGl2ZSBvdXRwdXQgc2FtcGxlIHJhdGUgZm9yIHRoaXMg
ZGV2aWNlJ3Mgb3V0cHV0IHN0cmVhbS4KLSAgcHJpdmF0ZSBpbnQgZ2V0TmF0aXZlT3V0cHV0U2Ft
cGxlUmF0ZSgpIHsKLSAgICAvLyBPdmVycmlkZSB0aGlzIGlmIHdlJ3JlIHJ1bm5pbmcgb24gYW4g
b2xkIGVtdWxhdG9yIGltYWdlIHdoaWNoIG9ubHkKLSAgICAvLyBzdXBwb3J0cyA4IGtIeiBhbmQg
ZG9lc24ndCBzdXBwb3J0IFBST1BFUlRZX09VVFBVVF9TQU1QTEVfUkFURS4KLSAgICBpZiAoV2Vi
UnRjQXVkaW9VdGlscy5ydW5uaW5nT25FbXVsYXRvcigpKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFH
LCAiUnVubmluZyBlbXVsYXRvciwgb3ZlcnJpZGluZyBzYW1wbGUgcmF0ZSB0byA4IGtIei4iKTsK
LSAgICAgIHJldHVybiA4MDAwOwotICAgIH0KLSAgICAvLyBEZWZhdWx0IGNhbiBiZSBvdmVycmlk
ZW4gYnkgV2ViUnRjQXVkaW9VdGlscy5zZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkuCi0gICAgLy8g
SWYgc28sIHVzZSB0aGF0IHZhbHVlIGFuZCByZXR1cm4gaGVyZS4KLSAgICBpZiAoV2ViUnRjQXVk
aW9VdGlscy5pc0RlZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbigpKSB7Ci0gICAgICBMb2dnaW5n
LmQoVEFHLCAiRGVmYXVsdCBzYW1wbGUgcmF0ZSBpcyBvdmVycmlkZW4gdG8gIgotICAgICAgICAg
ICAgICArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpICsgIiBIeiIp
OwotICAgICAgcmV0dXJuIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigp
OwotICAgIH0KLSAgICAvLyBObyBvdmVycmlkZXMgYXZhaWxhYmxlLiBEZWxpdmVyIGJlc3QgcG9z
c2libGUgZXN0aW1hdGUgYmFzZWQgb24gZGVmYXVsdAotICAgIC8vIEFuZHJvaWQgQXVkaW9NYW5h
Z2VyIEFQSXMuCi0gICAgZmluYWwgaW50IHNhbXBsZVJhdGVIejsKLSAgICBpZiAoV2ViUnRjQXVk
aW9VdGlscy5ydW5uaW5nT25KZWxseUJlYW5NUjFPckhpZ2hlcigpKSB7Ci0gICAgICBzYW1wbGVS
YXRlSHogPSBnZXRTYW1wbGVSYXRlT25KZWxseUJlYW5NUjEwT3JIaWdoZXIoKTsKLSAgICB9IGVs
c2UgewotICAgICAgc2FtcGxlUmF0ZUh6ID0gV2ViUnRjQXVkaW9VdGlscy5nZXREZWZhdWx0U2Ft
cGxlUmF0ZUh6KCk7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcsICJTYW1wbGUgcmF0ZSBpcyBz
ZXQgdG8gIiArIHNhbXBsZVJhdGVIeiArICIgSHoiKTsKLSAgICByZXR1cm4gc2FtcGxlUmF0ZUh6
OwotICB9Ci0KLSAgQFRhcmdldEFwaSgxNykKLSAgcHJpdmF0ZSBpbnQgZ2V0U2FtcGxlUmF0ZU9u
SmVsbHlCZWFuTVIxME9ySGlnaGVyKCkgewotICAgIFN0cmluZyBzYW1wbGVSYXRlU3RyaW5nID0g
YXVkaW9NYW5hZ2VyLmdldFByb3BlcnR5KEF1ZGlvTWFuYWdlci5QUk9QRVJUWV9PVVRQVVRfU0FN
UExFX1JBVEUpOwotICAgIHJldHVybiAoc2FtcGxlUmF0ZVN0cmluZyA9PSBudWxsKSA/IFdlYlJ0
Y0F1ZGlvVXRpbHMuZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDogSW50ZWdlci5wYXJzZUludChzYW1wbGVSYXRlU3RyaW5nKTsK
LSAgfQotCi0gIC8vIFJldHVybnMgdGhlIG5hdGl2ZSBvdXRwdXQgYnVmZmVyIHNpemUgZm9yIGxv
dy1sYXRlbmN5IG91dHB1dCBzdHJlYW1zLgotICBAVGFyZ2V0QXBpKDE3KQotICBwcml2YXRlIGlu
dCBnZXRMb3dMYXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCkgewotICAgIGFzc2VydFRydWUo
aXNMb3dMYXRlbmN5T3V0cHV0U3VwcG9ydGVkKCkpOwotICAgIGlmICghV2ViUnRjQXVkaW9VdGls
cy5ydW5uaW5nT25KZWxseUJlYW5NUjFPckhpZ2hlcigpKSB7Ci0gICAgICByZXR1cm4gREVGQVVM
VF9GUkFNRV9QRVJfQlVGRkVSOwotICAgIH0KLSAgICBTdHJpbmcgZnJhbWVzUGVyQnVmZmVyID0K
LSAgICAgICAgYXVkaW9NYW5hZ2VyLmdldFByb3BlcnR5KEF1ZGlvTWFuYWdlci5QUk9QRVJUWV9P
VVRQVVRfRlJBTUVTX1BFUl9CVUZGRVIpOwotICAgIHJldHVybiBmcmFtZXNQZXJCdWZmZXIgPT0g
bnVsbCA/IERFRkFVTFRfRlJBTUVfUEVSX0JVRkZFUiA6IEludGVnZXIucGFyc2VJbnQoZnJhbWVz
UGVyQnVmZmVyKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBv
cnRzIGFuIGF1ZGlvIGVmZmVjdCAoQUVDIG9yIE5TKS4KLSAgLy8gRm91ciBjb25kaXRpb25zIG11
c3QgYmUgZnVsZmlsbGVkIGlmIGZ1bmN0aW9ucyBhcmUgdG8gcmV0dXJuIHRydWU6Ci0gIC8vIDEp
IHRoZSBwbGF0Zm9ybSBtdXN0IHN1cHBvcnQgdGhlIGJ1aWx0LWluIChIVykgZWZmZWN0LAotICAv
LyAyKSBleHBsaWNpdCB1c2UgKG92ZXJyaWRlKSBvZiBhIFdlYlJUQyBiYXNlZCB2ZXJzaW9uIG11
c3Qgbm90IGJlIHNldCwKLSAgLy8gMykgdGhlIGRldmljZSBtdXN0IG5vdCBiZSBibGFja2xpc3Rl
ZCBmb3IgdXNlIG9mIHRoZSBlZmZlY3QsIGFuZAotICAvLyA0KSB0aGUgVVVJRCBvZiB0aGUgZWZm
ZWN0IG11c3QgYmUgYXBwcm92ZWQgKHNvbWUgVVVJRHMgY2FuIGJlIGV4Y2x1ZGVkKS4KLSAgcHJp
dmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCkgewot
ICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIo
KTsKLSAgfQotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzTm9pc2VTdXBwcmVzc29yU3VwcG9y
dGVkKCkgewotICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMuY2FuVXNlTm9pc2VTdXBwcmVz
c29yKCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBtaW5pbXVtIG91dHB1dCBidWZmZXIgc2l6
ZSBmb3IgSmF2YSBiYXNlZCBhdWRpbyAoQXVkaW9UcmFjaykuCi0gIC8vIFRoaXMgc2l6ZSBjYW4g
YWxzbyBiZSB1c2VkIGZvciBPcGVuU0wgRVMgaW1wbGVtZW50YXRpb25zIG9uIGRldmljZXMgdGhh
dAotICAvLyBsYWNrcyBzdXBwb3J0IG9mIGxvdy1sYXRlbmN5IG91dHB1dC4KLSAgcHJpdmF0ZSBz
dGF0aWMgaW50IGdldE1pbk91dHB1dEZyYW1lU2l6ZShpbnQgc2FtcGxlUmF0ZUluSHosIGludCBu
dW1DaGFubmVscykgewotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gbnVtQ2hhbm5lbHMg
KiAoQklUU19QRVJfU0FNUExFIC8gOCk7Ci0gICAgZmluYWwgaW50IGNoYW5uZWxDb25maWc7Ci0g
ICAgaWYgKG51bUNoYW5uZWxzID09IDEpIHsKLSAgICAgIGNoYW5uZWxDb25maWcgPSBBdWRpb0Zv
cm1hdC5DSEFOTkVMX09VVF9NT05POwotICAgIH0gZWxzZSBpZiAobnVtQ2hhbm5lbHMgPT0gMikg
ewotICAgICAgY2hhbm5lbENvbmZpZyA9IEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUX1NURVJFTzsK
LSAgICB9IGVsc2UgewotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gQXVkaW9U
cmFjay5nZXRNaW5CdWZmZXJTaXplKAotICAgICAgICAgICAgICAgc2FtcGxlUmF0ZUluSHosIGNo
YW5uZWxDb25maWcsIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVCkKLSAgICAgICAgLyBi
eXRlc1BlckZyYW1lOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbmF0aXZlIGlucHV0IGJ1ZmZl
ciBzaXplIGZvciBpbnB1dCBzdHJlYW1zLgotICBwcml2YXRlIGludCBnZXRMb3dMYXRlbmN5SW5w
dXRGcmFtZXNQZXJCdWZmZXIoKSB7Ci0gICAgYXNzZXJ0VHJ1ZShpc0xvd0xhdGVuY3lJbnB1dFN1
cHBvcnRlZCgpKTsKLSAgICByZXR1cm4gZ2V0TG93TGF0ZW5jeU91dHB1dEZyYW1lc1BlckJ1ZmZl
cigpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUgbWluaW11bSBpbnB1dCBidWZmZXIgc2l6ZSBm
b3IgSmF2YSBiYXNlZCBhdWRpbyAoQXVkaW9SZWNvcmQpLgotICAvLyBUaGlzIHNpemUgY2FuIGNh
bHNvIGJlIHVzZWQgZm9yIE9wZW5TTCBFUyBpbXBsZW1lbnRhdGlvbnMgb24gZGV2aWNlcyB0aGF0
Ci0gIC8vIGxhY2tzIHN1cHBvcnQgb2YgbG93LWxhdGVuY3kgaW5wdXQuCi0gIHByaXZhdGUgc3Rh
dGljIGludCBnZXRNaW5JbnB1dEZyYW1lU2l6ZShpbnQgc2FtcGxlUmF0ZUluSHosIGludCBudW1D
aGFubmVscykgewotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gbnVtQ2hhbm5lbHMgKiAo
QklUU19QRVJfU0FNUExFIC8gOCk7Ci0gICAgYXNzZXJ0VHJ1ZShudW1DaGFubmVscyA9PSBDSEFO
TkVMUyk7Ci0gICAgcmV0dXJuIEF1ZGlvUmVjb3JkLmdldE1pbkJ1ZmZlclNpemUoCi0gICAgICAg
ICAgICAgICBzYW1wbGVSYXRlSW5IeiwgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9NT05PLCBBdWRp
b0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpCi0gICAgICAgIC8gYnl0ZXNQZXJGcmFtZTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBPcGVuU0wgRVMgYXVkaW8gaXMgc3VwcG9ydGVkLgot
ICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzT3BlblNMRVNTdXBwb3J0ZWQoKSB7Ci0gICAgLy8g
Q2hlY2sgZm9yIEFQSSBsZXZlbCA5IG9yIGhpZ2hlciwgdG8gY29uZmlybSB1c2Ugb2YgT3BlblNM
IEVTLgotICAgIHJldHVybiBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkdpbmdlckJyZWFkT3JI
aWdoZXIoKTsKLSAgfQotCi0gIC8vIEhlbHBlciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2Vw
dGlvbiAgd2hlbiBhbiBhc3NlcnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9p
ZCBhc3NlcnRUcnVlKGJvb2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsK
LSAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJl
IHRydWUiKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhY2hl
QXVkaW9QYXJhbWV0ZXJzKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMsIGJvb2xlYW4gaGFy
ZHdhcmVBRUMsCi0gICAgICBib29sZWFuIGhhcmR3YXJlQUdDLCBib29sZWFuIGhhcmR3YXJlTlMs
IGJvb2xlYW4gbG93TGF0ZW5jeU91dHB1dCwgYm9vbGVhbiBsb3dMYXRlbmN5SW5wdXQsCi0gICAg
ICBib29sZWFuIHByb0F1ZGlvLCBpbnQgb3V0cHV0QnVmZmVyU2l6ZSwgaW50IGlucHV0QnVmZmVy
U2l6ZSwgbG9uZyBuYXRpdmVBdWRpb01hbmFnZXIpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9q
YXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvUmVjb3JkLmphdmEKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5l
L1dlYlJ0Y0F1ZGlvUmVjb3JkLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJv
aWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1JlY29yZC5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxv
Z2dpbmc7Ci1pbXBvcnQgb3JnLndlYnJ0Yy5UaHJlYWRVdGlsczsKLQotaW1wb3J0IGFuZHJvaWQu
Y29udGVudC5Db250ZXh0OwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9Gb3JtYXQ7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5BdWRpb1JlY29yZDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLk1lZGlh
UmVjb3JkZXIuQXVkaW9Tb3VyY2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotCi1pbXBv
cnQgamF2YS5sYW5nLlN5c3RlbTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0
IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwotCi1wdWJsaWMgY2xhc3MgV2ViUnRjQXVk
aW9SZWNvcmQgewotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7
Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb1JlY29y
ZCI7Ci0KLSAgLy8gRGVmYXVsdCBhdWRpbyBkYXRhIGZvcm1hdCBpcyBQQ00gMTYgYml0IHBlciBz
YW1wbGUuCi0gIC8vIEd1YXJhbnRlZWQgdG8gYmUgc3VwcG9ydGVkIGJ5IGFsbCBkZXZpY2VzLgot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQklUU19QRVJfU0FNUExFID0gMTY7Ci0KLSAgLy8g
UmVxdWVzdGVkIHNpemUgb2YgZWFjaCByZWNvcmRlZCBidWZmZXIgcHJvdmlkZWQgdG8gdGhlIGNs
aWVudC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IENBTExCQUNLX0JVRkZFUl9TSVpFX01T
ID0gMTA7Ci0KLSAgLy8gQXZlcmFnZSBudW1iZXIgb2YgY2FsbGJhY2tzIHBlciBzZWNvbmQuCi0g
IHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBCVUZGRVJTX1BFUl9TRUNPTkQgPSAxMDAwIC8gQ0FM
TEJBQ0tfQlVGRkVSX1NJWkVfTVM7Ci0KLSAgLy8gV2UgYXNrIGZvciBhIG5hdGl2ZSBidWZmZXIg
c2l6ZSBvZiBCVUZGRVJfU0laRV9GQUNUT1IgKiAobWluaW11bSByZXF1aXJlZAotICAvLyBidWZm
ZXIgc2l6ZSkuIFRoZSBleHRyYSBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gZ3VhcmQgYWdhaW5zdCBn
bGl0Y2hlcyB1bmRlcgotICAvLyBoaWdoIGxvYWQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGlu
dCBCVUZGRVJfU0laRV9GQUNUT1IgPSAyOwotCi0gIC8vIFRoZSBBdWRpb1JlY29yZEphdmFUaHJl
YWQgaXMgYWxsb3dlZCB0byB3YWl0IGZvciBzdWNjZXNzZnVsIGNhbGwgdG8gam9pbigpCi0gIC8v
IGJ1dCB0aGUgd2FpdCB0aW1lcyBvdXQgYWZ0aGVyIHRoaXMgYW1vdW50IG9mIHRpbWUuCi0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgQVVESU9fUkVDT1JEX1RIUkVBRF9KT0lOX1RJTUVPVVRf
TVMgPSAyMDAwOwotCi0gIHByaXZhdGUgZmluYWwgbG9uZyBuYXRpdmVBdWRpb1JlY29yZDsKLSAg
cHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0KLSAgcHJpdmF0ZSBXZWJSdGNBdWRpb0Vm
ZmVjdHMgZWZmZWN0cyA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBCeXRlQnVmZmVyIGJ5dGVCdWZmZXI7
Ci0KLSAgcHJpdmF0ZSBBdWRpb1JlY29yZCBhdWRpb1JlY29yZCA9IG51bGw7Ci0gIHByaXZhdGUg
QXVkaW9SZWNvcmRUaHJlYWQgYXVkaW9UaHJlYWQgPSBudWxsOwotCi0gIHByaXZhdGUgc3RhdGlj
IHZvbGF0aWxlIGJvb2xlYW4gbWljcm9waG9uZU11dGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBieXRl
W10gZW1wdHlCeXRlczsKLQotICAvKioKLSAgICogQXVkaW8gdGhyZWFkIHdoaWNoIGtlZXBzIGNh
bGxpbmcgQnl0ZUJ1ZmZlci5yZWFkKCkgd2FpdGluZyBmb3IgYXVkaW8KLSAgICogdG8gYmUgcmVj
b3JkZWQuIEZlZWRzIHJlY29yZGVkIGRhdGEgdG8gdGhlIG5hdGl2ZSBjb3VudGVycGFydCBhcyBh
Ci0gICAqIHBlcmlvZGljIHNlcXVlbmNlIG9mIGNhbGxiYWNrcyB1c2luZyBEYXRhSXNSZWNvcmRl
ZCgpLgotICAgKiBUaGlzIHRocmVhZCB1c2VzIGEgUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJH
RU5UX0FVRElPIHByaW9yaXR5LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBBdWRpb1JlY29yZFRo
cmVhZCBleHRlbmRzIFRocmVhZCB7Ci0gICAgcHJpdmF0ZSB2b2xhdGlsZSBib29sZWFuIGtlZXBB
bGl2ZSA9IHRydWU7Ci0KLSAgICBwdWJsaWMgQXVkaW9SZWNvcmRUaHJlYWQoU3RyaW5nIG5hbWUp
IHsKLSAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1Ymxp
YyB2b2lkIHJ1bigpIHsKLSAgICAgIFByb2Nlc3Muc2V0VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5U
SFJFQURfUFJJT1JJVFlfVVJHRU5UX0FVRElPKTsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJBdWRp
b1JlY29yZFRocmVhZCIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAg
ICBhc3NlcnRUcnVlKGF1ZGlvUmVjb3JkLmdldFJlY29yZGluZ1N0YXRlKCkgPT0gQXVkaW9SZWNv
cmQuUkVDT1JEU1RBVEVfUkVDT1JESU5HKTsKLQotICAgICAgbG9uZyBsYXN0VGltZSA9IFN5c3Rl
bS5uYW5vVGltZSgpOwotICAgICAgd2hpbGUgKGtlZXBBbGl2ZSkgewotICAgICAgICBpbnQgYnl0
ZXNSZWFkID0gYXVkaW9SZWNvcmQucmVhZChieXRlQnVmZmVyLCBieXRlQnVmZmVyLmNhcGFjaXR5
KCkpOwotICAgICAgICBpZiAoYnl0ZXNSZWFkID09IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkgewot
ICAgICAgICAgIGlmIChtaWNyb3Bob25lTXV0ZSkgewotICAgICAgICAgICAgYnl0ZUJ1ZmZlci5j
bGVhcigpOwotICAgICAgICAgICAgYnl0ZUJ1ZmZlci5wdXQoZW1wdHlCeXRlcyk7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIG5hdGl2ZURhdGFJc1JlY29yZGVkKGJ5dGVzUmVhZCwgbmF0aXZlQXVk
aW9SZWNvcmQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJB
dWRpb1JlY29yZC5yZWFkIGZhaWxlZDogIiArIGJ5dGVzUmVhZCk7Ci0gICAgICAgICAgaWYgKGJ5
dGVzUmVhZCA9PSBBdWRpb1JlY29yZC5FUlJPUl9JTlZBTElEX09QRVJBVElPTikgewotICAgICAg
ICAgICAga2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IGlmIChERUJVRykgewotICAgICAgICAgIGxvbmcgbm93VGltZSA9IFN5c3RlbS5uYW5vVGltZSgp
OwotICAgICAgICAgIGxvbmcgZHVyYXRpb25Jbk1zID0gVGltZVVuaXQuTkFOT1NFQ09ORFMudG9N
aWxsaXMoKG5vd1RpbWUgLSBsYXN0VGltZSkpOwotICAgICAgICAgIGxhc3RUaW1lID0gbm93VGlt
ZTsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiYnl0ZXNSZWFkWyIgKyBkdXJhdGlvbkluTXMg
KyAiXSAiICsgYnl0ZXNSZWFkKTsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICB0cnkgewot
ICAgICAgICBpZiAoYXVkaW9SZWNvcmQgIT0gbnVsbCkgewotICAgICAgICAgIGF1ZGlvUmVjb3Jk
LnN0b3AoKTsKLSAgICAgICAgfQotICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9u
IGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLnN0b3AgZmFpbGVkOiAi
ICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFN0b3BzIHRoZSBp
bm5lciB0aHJlYWQgbG9vcCBhbmQgYWxzbyBjYWxscyBBdWRpb1JlY29yZC5zdG9wKCkuCi0gICAg
Ly8gRG9lcyBub3QgYmxvY2sgdGhlIGNhbGxpbmcgdGhyZWFkLgotICAgIHB1YmxpYyB2b2lkIHN0
b3BUaHJlYWQoKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAic3RvcFRocmVhZCIpOwotICAgICAg
a2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAgV2ViUnRjQXVkaW9SZWNvcmQoQ29u
dGV4dCBjb250ZXh0LCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKSB7Ci0gICAgTG9nZ2luZy5kKFRB
RywgImN0b3IiICsgV2ViUnRjQXVkaW9VdGlscy5nZXRUaHJlYWRJbmZvKCkpOwotICAgIHRoaXMu
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgdGhpcy5uYXRpdmVBdWRpb1JlY29yZCA9IG5hdGl2ZUF1
ZGlvUmVjb3JkOwotICAgIGlmIChERUJVRykgewotICAgICAgV2ViUnRjQXVkaW9VdGlscy5sb2dE
ZXZpY2VJbmZvKFRBRyk7Ci0gICAgfQotICAgIGVmZmVjdHMgPSBXZWJSdGNBdWRpb0VmZmVjdHMu
Y3JlYXRlKCk7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gZW5hYmxlQnVpbHRJbkFFQyhib29s
ZWFuIGVuYWJsZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJlbmFibGVCdWlsdEluQUVDKCIgKyBl
bmFibGUgKyAnKScpOwotICAgIGlmIChlZmZlY3RzID09IG51bGwpIHsKLSAgICAgIExvZ2dpbmcu
ZShUQUcsICJCdWlsdC1pbiBBRUMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7
Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBlZmZlY3RzLnNldEFFQyhl
bmFibGUpOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGVuYWJsZUJ1aWx0SW5OUyhib29sZWFu
IGVuYWJsZSkgewotICAgIExvZ2dpbmcuZChUQUcsICJlbmFibGVCdWlsdEluTlMoIiArIGVuYWJs
ZSArICcpJyk7Ci0gICAgaWYgKGVmZmVjdHMgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRB
RywgIkJ1aWx0LWluIE5TIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gZWZmZWN0cy5zZXROUyhlbmFibGUp
OwotICB9Ci0KLSAgcHJpdmF0ZSBpbnQgaW5pdFJlY29yZGluZyhpbnQgc2FtcGxlUmF0ZSwgaW50
IGNoYW5uZWxzKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImluaXRSZWNvcmRpbmcoc2FtcGxlUmF0
ZT0iICsgc2FtcGxlUmF0ZSArICIsIGNoYW5uZWxzPSIgKyBjaGFubmVscyArICIpIik7Ci0gICAg
aWYgKCFXZWJSdGNBdWRpb1V0aWxzLmhhc1Blcm1pc3Npb24oY29udGV4dCwgYW5kcm9pZC5NYW5p
ZmVzdC5wZXJtaXNzaW9uLlJFQ09SRF9BVURJTykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJS
RUNPUkRfQVVESU8gcGVybWlzc2lvbiBpcyBtaXNzaW5nIik7Ci0gICAgICByZXR1cm4gLTE7Ci0g
ICAgfQotICAgIGlmIChhdWRpb1JlY29yZCAhPSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFH
LCAiSW5pdFJlY29yZGluZygpIGNhbGxlZCB0d2ljZSB3aXRob3V0IFN0b3BSZWNvcmRpbmcoKSIp
OwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJGcmFtZSA9
IGNoYW5uZWxzICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGZpbmFsIGludCBmcmFtZXNQ
ZXJCdWZmZXIgPSBzYW1wbGVSYXRlIC8gQlVGRkVSU19QRVJfU0VDT05EOwotICAgIGJ5dGVCdWZm
ZXIgPSBCeXRlQnVmZmVyLmFsbG9jYXRlRGlyZWN0KGJ5dGVzUGVyRnJhbWUgKiBmcmFtZXNQZXJC
dWZmZXIpOwotICAgIExvZ2dpbmcuZChUQUcsICJieXRlQnVmZmVyLmNhcGFjaXR5OiAiICsgYnl0
ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBlbXB0eUJ5dGVzID0gbmV3IGJ5dGVbYnl0ZUJ1ZmZl
ci5jYXBhY2l0eSgpXTsKLSAgICAvLyBSYXRoZXIgdGhhbiBwYXNzaW5nIHRoZSBCeXRlQnVmZmVy
IHdpdGggZXZlcnkgY2FsbGJhY2sgKHJlcXVpcmluZwotICAgIC8vIHRoZSBwb3RlbnRpYWxseSBl
eHBlbnNpdmUgR2V0RGlyZWN0QnVmZmVyQWRkcmVzcykgd2Ugc2ltcGx5IGhhdmUgdGhlCi0gICAg
Ly8gdGhlIG5hdGl2ZSBjbGFzcyBjYWNoZSB0aGUgYWRkcmVzcyB0byB0aGUgbWVtb3J5IG9uY2Uu
Ci0gICAgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKGJ5dGVCdWZmZXIsIG5hdGl2ZUF1
ZGlvUmVjb3JkKTsKLQotICAgIC8vIEdldCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSByZXF1aXJl
ZCBmb3IgdGhlIHN1Y2Nlc3NmdWwgY3JlYXRpb24gb2YKLSAgICAvLyBhbiBBdWRpb1JlY29yZCBv
YmplY3QsIGluIGJ5dGUgdW5pdHMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgc2l6ZSBkb2Vzbid0
IGd1YXJhbnRlZSBhIHNtb290aCByZWNvcmRpbmcgdW5kZXIgbG9hZC4KLSAgICBpbnQgbWluQnVm
ZmVyU2l6ZSA9IEF1ZGlvUmVjb3JkLmdldE1pbkJ1ZmZlclNpemUoCi0gICAgICAgIHNhbXBsZVJh
dGUsIEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5fTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENN
XzE2QklUKTsKLSAgICBpZiAobWluQnVmZmVyU2l6ZSA9PSBBdWRpb1JlY29yZC5FUlJPUiB8fCBt
aW5CdWZmZXJTaXplID09IEF1ZGlvUmVjb3JkLkVSUk9SX0JBRF9WQUxVRSkgewotICAgICAgTG9n
Z2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLmdldE1pbkJ1ZmZlclNpemUgZmFpbGVkOiAiICsgbWlu
QnVmZmVyU2l6ZSk7Ci0gICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIExvZ2dpbmcuZChUQUcs
ICJBdWRpb1JlY29yZC5nZXRNaW5CdWZmZXJTaXplOiAiICsgbWluQnVmZmVyU2l6ZSk7Ci0KLSAg
ICAvLyBVc2UgYSBsYXJnZXIgYnVmZmVyIHNpemUgdGhhbiB0aGUgbWluaW11bSByZXF1aXJlZCB3
aGVuIGNyZWF0aW5nIHRoZQotICAgIC8vIEF1ZGlvUmVjb3JkIGluc3RhbmNlIHRvIGVuc3VyZSBz
bW9vdGggcmVjb3JkaW5nIHVuZGVyIGxvYWQuIEl0IGhhcyBiZWVuCi0gICAgLy8gdmVyaWZpZWQg
dGhhdCBpdCBkb2VzIG5vdCBpbmNyZWFzZSB0aGUgYWN0dWFsIHJlY29yZGluZyBsYXRlbmN5Lgot
ICAgIGludCBidWZmZXJTaXplSW5CeXRlcyA9IE1hdGgubWF4KEJVRkZFUl9TSVpFX0ZBQ1RPUiAq
IG1pbkJ1ZmZlclNpemUsIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgTG9nZ2luZy5kKFRB
RywgImJ1ZmZlclNpemVJbkJ5dGVzOiAiICsgYnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIHRyeSB7
Ci0gICAgICBhdWRpb1JlY29yZCA9IG5ldyBBdWRpb1JlY29yZChBdWRpb1NvdXJjZS5WT0lDRV9D
T01NVU5JQ0FUSU9OLCBzYW1wbGVSYXRlLAotICAgICAgICAgIEF1ZGlvRm9ybWF0LkNIQU5ORUxf
SU5fTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklULCBidWZmZXJTaXplSW5CeXRl
cyk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgIExv
Z2dpbmcuZShUQUcsIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0g
ICAgaWYgKGF1ZGlvUmVjb3JkID09IG51bGwgfHwgYXVkaW9SZWNvcmQuZ2V0U3RhdGUoKSAhPSBB
dWRpb1JlY29yZC5TVEFURV9JTklUSUFMSVpFRCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkZh
aWxlZCB0byBjcmVhdGUgYSBuZXcgQXVkaW9SZWNvcmQgaW5zdGFuY2UiKTsKLSAgICAgIHJldHVy
biAtMTsKLSAgICB9Ci0gICAgaWYgKGVmZmVjdHMgIT0gbnVsbCkgewotICAgICAgZWZmZWN0cy5l
bmFibGUoYXVkaW9SZWNvcmQuZ2V0QXVkaW9TZXNzaW9uSWQoKSk7Ci0gICAgfQotICAgIC8vIFZl
cmlmeSB0aGF0IGFsbCBhdWRpbyBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBhbmQgY29ycmVjdC4KLSAg
ICBpZiAoIWFyZVBhcmFtZXRlcnNWYWxpZChzYW1wbGVSYXRlLCBjaGFubmVscykpIHsKLSAgICAg
IExvZ2dpbmcuZShUQUcsICJBdCBsZWFzdCBvbmUgYXVkaW8gcmVjb3JkIHBhcmFtZXRlciBpcyBp
bnZhbGlkLiIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBsb2dNYWluUGFyYW1ldGVy
cygpOwotICAgIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKTsKLSAgICByZXR1cm4gZnJhbWVz
UGVyQnVmZmVyOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHN0YXJ0UmVjb3JkaW5nKCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFJlY29yZGluZyIpOwotICAgIGFzc2VydFRydWUoYXVk
aW9SZWNvcmQgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCA9PSBudWxsKTsK
LSAgICB0cnkgewotICAgICAgYXVkaW9SZWNvcmQuc3RhcnRSZWNvcmRpbmcoKTsKLSAgICB9IGNh
dGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF1
ZGlvUmVjb3JkLnN0YXJ0UmVjb3JkaW5nIGZhaWxlZDogIiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvUmVjb3JkLmdldFJlY29yZGlu
Z1N0YXRlKCkgIT0gQXVkaW9SZWNvcmQuUkVDT1JEU1RBVEVfUkVDT1JESU5HKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQuc3RhcnRSZWNvcmRpbmcgZmFpbGVkIik7Ci0gICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGF1ZGlvVGhyZWFkID0gbmV3IEF1ZGlvUmVjb3Jk
VGhyZWFkKCJBdWRpb1JlY29yZEphdmFUaHJlYWQiKTsKLSAgICBhdWRpb1RocmVhZC5zdGFydCgp
OwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHN0b3BSZWNvcmRp
bmcoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BSZWNvcmRpbmciKTsKLSAgICBhc3NlcnRU
cnVlKGF1ZGlvVGhyZWFkICE9IG51bGwpOwotICAgIGF1ZGlvVGhyZWFkLnN0b3BUaHJlYWQoKTsK
LSAgICBpZiAoIVRocmVhZFV0aWxzLmpvaW5VbmludGVycnVwdGlibHkoYXVkaW9UaHJlYWQsIEFV
RElPX1JFQ09SRF9USFJFQURfSk9JTl9USU1FT1VUX01TKSkgewotICAgICAgTG9nZ2luZy5lKFRB
RywgIkpvaW4gb2YgQXVkaW9SZWNvcmRKYXZhVGhyZWFkIHRpbWVkIG91dCIpOwotICAgIH0KLSAg
ICBhdWRpb1RocmVhZCA9IG51bGw7Ci0gICAgaWYgKGVmZmVjdHMgIT0gbnVsbCkgewotICAgICAg
ZWZmZWN0cy5yZWxlYXNlKCk7Ci0gICAgfQotICAgIGF1ZGlvUmVjb3JkLnJlbGVhc2UoKTsKLSAg
ICBhdWRpb1JlY29yZCA9IG51bGw7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBWZXJp
ZmllcyB0aGF0IHRoZSBhdWRpbyByZWNvcmQgaXMgdXNpbmcgY29ycmVjdCBwYXJhbWV0ZXJzLCBp
LmUuLCB0aGF0IHRoZQotICAvLyBjcmVhdGVkIGluc3RhbmNlIHVzZXMgdGhlIHBhcmFtZXRlcnMg
dGhhdCB3ZSBhc2tlZCBmb3IuCi0gIHByaXZhdGUgYm9vbGVhbiBhcmVQYXJhbWV0ZXJzVmFsaWQo
aW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIHJldHVybiAoYXVkaW9SZWNvcmQu
Z2V0QXVkaW9Gb3JtYXQoKSA9PSBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQKLSAgICAg
ICAgJiYgYXVkaW9SZWNvcmQuZ2V0Q2hhbm5lbENvbmZpZ3VyYXRpb24oKSA9PSBBdWRpb0Zvcm1h
dC5DSEFOTkVMX0lOX01PTk8KLSAgICAgICAgJiYgYXVkaW9SZWNvcmQuZ2V0QXVkaW9Tb3VyY2Uo
KSA9PSBBdWRpb1NvdXJjZS5WT0lDRV9DT01NVU5JQ0FUSU9OCi0gICAgICAgICYmIGF1ZGlvUmVj
b3JkLmdldFNhbXBsZVJhdGUoKSA9PSBzYW1wbGVSYXRlICYmIGF1ZGlvUmVjb3JkLmdldENoYW5u
ZWxDb3VudCgpID09IGNoYW5uZWxzKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dNYWluUGFy
YW1ldGVycygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQ6ICIKLSAgICAgICAg
ICAgICsgInNlc3Npb24gSUQ6ICIgKyBhdWRpb1JlY29yZC5nZXRBdWRpb1Nlc3Npb25JZCgpICsg
IiwgIgotICAgICAgICAgICAgKyAiY2hhbm5lbHM6ICIgKyBhdWRpb1JlY29yZC5nZXRDaGFubmVs
Q291bnQoKSArICIsICIKLSAgICAgICAgICAgICsgInNhbXBsZSByYXRlOiAiICsgYXVkaW9SZWNv
cmQuZ2V0U2FtcGxlUmF0ZSgpKTsKLSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dNYWluUGFyYW1l
dGVyc0V4dGVuZGVkKCkgewotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbk1hcnNo
bWFsbG93T3JIaWdoZXIoKSkgewotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvUmVjb3JkOiAi
Ci0gICAgICAgICAgICAgIC8vIFRoZSBmcmFtZSBjb3VudCBvZiB0aGUgbmF0aXZlIEF1ZGlvUmVj
b3JkIGJ1ZmZlci4KLSAgICAgICAgICAgICAgKyAiYnVmZmVyIHNpemUgaW4gZnJhbWVzOiAiICsg
YXVkaW9SZWNvcmQuZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKCkpOwotICAgIH0KLSAgfQotCi0gIC8v
IEhlbHBlciBtZXRob2Qgd2hpY2ggdGhyb3dzIGFuIGV4Y2VwdGlvbiAgd2hlbiBhbiBhc3NlcnRp
b24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUcnVlKGJvb2xlYW4g
Y29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5ldyBBc3Nl
cnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUiKTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVzcyhC
eXRlQnVmZmVyIGJ5dGVCdWZmZXIsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gIHByaXZh
dGUgbmF0aXZlIHZvaWQgbmF0aXZlRGF0YUlzUmVjb3JkZWQoaW50IGJ5dGVzLCBsb25nIG5hdGl2
ZUF1ZGlvUmVjb3JkKTsKLQotICAvLyBTZXRzIGFsbCByZWNvcmRlZCBzYW1wbGVzIHRvIHplcm8g
aWYgfG11dGV8IGlzIHRydWUsIGkuZS4sIGVuc3VyZXMgdGhhdAotICAvLyB0aGUgbWljcm9waG9u
ZSBpcyBtdXRlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldE1pY3JvcGhvbmVNdXRlKGJvb2xl
YW4gbXV0ZSkgewotICAgIExvZ2dpbmcudyhUQUcsICJzZXRNaWNyb3Bob25lTXV0ZSgiICsgbXV0
ZSArICIpIik7Ci0gICAgbWljcm9waG9uZU11dGUgPSBtdXRlOwotICB9Ci19CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2Rldmlj
ZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9UcmFj
ay5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92
b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1RyYWNrLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2
aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1Ry
YWNrLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1wb3J0IG9yZy53
ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0OwotaW1wb3J0
IGFuZHJvaWQubWVkaWEuQXVkaW9Gb3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01h
bmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb1RyYWNrOwotaW1wb3J0IGFuZHJvaWQu
b3MuUHJvY2VzczsKLQotaW1wb3J0IGphdmEubGFuZy5UaHJlYWQ7Ci1pbXBvcnQgamF2YS5uaW8u
Qnl0ZUJ1ZmZlcjsKLQotcHVibGljIGNsYXNzIFdlYlJ0Y0F1ZGlvVHJhY2sgewotICBwcml2YXRl
IHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMg
ZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb1RyYWNrIjsKLQotICAvLyBEZWZhdWx0IGF1
ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4KLSAgLy8gR3VhcmFudGVl
ZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICAvLyBSZXF1ZXN0ZWQgc2l6ZSBvZiBlYWNo
IHJlY29yZGVkIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY2xpZW50LgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVMgPSAxMDsKLQotICAvLyBBdmVyYWdl
IG51bWJlciBvZiBjYWxsYmFja3MgcGVyIHNlY29uZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IEJVRkZFUlNfUEVSX1NFQ09ORCA9IDEwMDAgLyBDQUxMQkFDS19CVUZGRVJfU0laRV9NUzsK
LQotICBwcml2YXRlIGZpbmFsIENvbnRleHQgY29udGV4dDsKLSAgcHJpdmF0ZSBmaW5hbCBsb25n
IG5hdGl2ZUF1ZGlvVHJhY2s7Ci0gIHByaXZhdGUgZmluYWwgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFu
YWdlcjsKLQotICBwcml2YXRlIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlcjsKLQotICBwcml2YXRlIEF1
ZGlvVHJhY2sgYXVkaW9UcmFjayA9IG51bGw7Ci0gIHByaXZhdGUgQXVkaW9UcmFja1RocmVhZCBh
dWRpb1RocmVhZCA9IG51bGw7Ci0KLSAgLy8gU2FtcGxlcyB0byBiZSBwbGF5ZWQgYXJlIHJlcGxh
Y2VkIGJ5IHplcm9zIGlmIHxzcGVha2VyTXV0ZXwgaXMgc2V0IHRvIHRydWUuCi0gIC8vIENhbiBi
ZSB1c2VkIHRvIGVuc3VyZSB0aGF0IHRoZSBzcGVha2VyIGlzIGZ1bGx5IG11dGVkLgotICBwcml2
YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIHNwZWFrZXJNdXRlID0gZmFsc2U7Ci0gIHByaXZh
dGUgYnl0ZVtdIGVtcHR5Qnl0ZXM7Ci0KLSAgLyoqCi0gICAqIEF1ZGlvIHRocmVhZCB3aGljaCBr
ZWVwcyBjYWxsaW5nIEF1ZGlvVHJhY2sud3JpdGUoKSB0byBzdHJlYW0gYXVkaW8uCi0gICAqIERh
dGEgaXMgcGVyaW9kaWNhbGx5IGFjcXVpcmVkIGZyb20gdGhlIG5hdGl2ZSBXZWJSVEMgbGF5ZXIg
dXNpbmcgdGhlCi0gICAqIG5hdGl2ZUdldFBsYXlvdXREYXRhIGNhbGxiYWNrIGZ1bmN0aW9uLgot
ICAgKiBUaGlzIHRocmVhZCB1c2VzIGEgUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJHRU5UX0FV
RElPIHByaW9yaXR5LgotICAgKi8KLSAgcHJpdmF0ZSBjbGFzcyBBdWRpb1RyYWNrVGhyZWFkIGV4
dGVuZHMgVGhyZWFkIHsKLSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4ga2VlcEFsaXZlID0g
dHJ1ZTsKLQotICAgIHB1YmxpYyBBdWRpb1RyYWNrVGhyZWFkKFN0cmluZyBuYW1lKSB7Ci0gICAg
ICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgdm9pZCBy
dW4oKSB7Ci0gICAgICBQcm9jZXNzLnNldFRocmVhZFByaW9yaXR5KFByb2Nlc3MuVEhSRUFEX1BS
SU9SSVRZX1VSR0VOVF9BVURJTyk7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFja1Ro
cmVhZCIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0KLSAgICAgIHRyeSB7
Ci0gICAgICAgIC8vIEluIE1PREVfU1RSRUFNIG1vZGUgd2UgY2FuIG9wdGlvbmFsbHkgcHJpbWUg
dGhlIG91dHB1dCBidWZmZXIgYnkKLSAgICAgICAgLy8gd3JpdGluZyB1cCB0byBidWZmZXJTaXpl
SW5CeXRlcyAoZnJvbSBjb25zdHJ1Y3RvcikgYmVmb3JlIHN0YXJ0aW5nLgotICAgICAgICAvLyBU
aGlzIHByaW1pbmcgd2lsbCBhdm9pZCBhbiBpbW1lZGlhdGUgdW5kZXJydW4sIGJ1dCBpcyBub3Qg
cmVxdWlyZWQuCi0gICAgICAgIC8vIFRPRE8oaGVucmlrYSk6IGluaXRpYWwgdGVzdHMgaGF2ZSBz
aG93biB0aGF0IHByaW1pbmcgaXMgbm90IHJlcXVpcmVkLgotICAgICAgICBhdWRpb1RyYWNrLnBs
YXkoKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShhdWRpb1RyYWNrLmdldFBsYXlTdGF0ZSgpID09IEF1
ZGlvVHJhY2suUExBWVNUQVRFX1BMQVlJTkcpOwotICAgICAgfSBjYXRjaCAoSWxsZWdhbFN0YXRl
RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvVHJhY2sucGxheSBm
YWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQot
ICAgICAgLy8gRml4ZWQgc2l6ZSBpbiBieXRlcyBvZiBlYWNoIDEwbXMgYmxvY2sgb2YgYXVkaW8g
ZGF0YSB0aGF0IHdlIGFzayBmb3IKLSAgICAgIC8vIHVzaW5nIGNhbGxiYWNrcyB0byB0aGUgbmF0
aXZlIFdlYlJUQyBjbGllbnQuCi0gICAgICBmaW5hbCBpbnQgc2l6ZUluQnl0ZXMgPSBieXRlQnVm
ZmVyLmNhcGFjaXR5KCk7Ci0KLSAgICAgIHdoaWxlIChrZWVwQWxpdmUpIHsKLSAgICAgICAgLy8g
R2V0IDEwbXMgb2YgUENNIGRhdGEgZnJvbSB0aGUgbmF0aXZlIFdlYlJUQyBjbGllbnQuIEF1ZGlv
IGRhdGEgaXMKLSAgICAgICAgLy8gd3JpdHRlbiBpbnRvIHRoZSBjb21tb24gQnl0ZUJ1ZmZlciB1
c2luZyB0aGUgYWRkcmVzcyB0aGF0IHdhcwotICAgICAgICAvLyBjYWNoZWQgYXQgY29uc3RydWN0
aW9uLgotICAgICAgICBuYXRpdmVHZXRQbGF5b3V0RGF0YShzaXplSW5CeXRlcywgbmF0aXZlQXVk
aW9UcmFjayk7Ci0gICAgICAgIC8vIFdyaXRlIGRhdGEgdW50aWwgYWxsIGRhdGEgaGFzIGJlZW4g
d3JpdHRlbiB0byB0aGUgYXVkaW8gc2luay4KLSAgICAgICAgLy8gVXBvbiByZXR1cm4sIHRoZSBi
dWZmZXIgcG9zaXRpb24gd2lsbCBoYXZlIGJlZW4gYWR2YW5jZWQgdG8gcmVmbGVjdAotICAgICAg
ICAvLyB0aGUgYW1vdW50IG9mIGRhdGEgdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4gdG8g
dGhlIEF1ZGlvVHJhY2suCi0gICAgICAgIGFzc2VydFRydWUoc2l6ZUluQnl0ZXMgPD0gYnl0ZUJ1
ZmZlci5yZW1haW5pbmcoKSk7Ci0gICAgICAgIGlmIChzcGVha2VyTXV0ZSkgewotICAgICAgICAg
IGJ5dGVCdWZmZXIuY2xlYXIoKTsKLSAgICAgICAgICBieXRlQnVmZmVyLnB1dChlbXB0eUJ5dGVz
KTsKLSAgICAgICAgICBieXRlQnVmZmVyLnBvc2l0aW9uKDApOwotICAgICAgICB9Ci0gICAgICAg
IGludCBieXRlc1dyaXR0ZW4gPSAwOwotICAgICAgICBpZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5u
aW5nT25Mb2xsaXBvcE9ySGlnaGVyKCkpIHsKLSAgICAgICAgICBieXRlc1dyaXR0ZW4gPSB3cml0
ZU9uTG9sbGlwb3AoYXVkaW9UcmFjaywgYnl0ZUJ1ZmZlciwgc2l6ZUluQnl0ZXMpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlUHJlTG9sbGlwb3AoYXVk
aW9UcmFjaywgYnl0ZUJ1ZmZlciwgc2l6ZUluQnl0ZXMpOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChieXRlc1dyaXR0ZW4gIT0gc2l6ZUluQnl0ZXMpIHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFH
LCAiQXVkaW9UcmFjay53cml0ZSBmYWlsZWQ6ICIgKyBieXRlc1dyaXR0ZW4pOwotICAgICAgICAg
IGlmIChieXRlc1dyaXR0ZW4gPT0gQXVkaW9UcmFjay5FUlJPUl9JTlZBTElEX09QRVJBVElPTikg
ewotICAgICAgICAgICAga2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIC8vIFRoZSBieXRlIGJ1ZmZlciBtdXN0IGJlIHJld2luZGVkIHNpbmNlIGJ5dGVC
dWZmZXIucG9zaXRpb24oKSBpcwotICAgICAgICAvLyBpbmNyZWFzZWQgYXQgZWFjaCBjYWxsIHRv
IEF1ZGlvVHJhY2sud3JpdGUoKS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywKLSAgICAgICAgLy8gbmV4
dCBjYWxsIHRvIEF1ZGlvVHJhY2sud3JpdGUoKSB3aWxsIGZhaWwuCi0gICAgICAgIGJ5dGVCdWZm
ZXIucmV3aW5kKCk7Ci0KLSAgICAgICAgLy8gVE9ETyhoZW5yaWthKTogaXQgaXMgcG9zc2libGUg
dG8gY3JlYXRlIGEgZGVsYXkgZXN0aW1hdGUgaGVyZSBieQotICAgICAgICAvLyBjb3VudGluZyBu
dW1iZXIgb2Ygd3JpdHRlbiBmcmFtZXMgYW5kIHN1YnRyYWN0aW5nIHRoZSByZXN1bHQgZnJvbQot
ICAgICAgICAvLyBhdWRpb1RyYWNrLmdldFBsYXliYWNrSGVhZFBvc2l0aW9uKCkuCi0gICAgICB9
Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGF1ZGlvVHJhY2suc3RvcCgpOwotICAgICAgfSBjYXRj
aCAoSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1
ZGlvVHJhY2suc3RvcCBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0gICAgICB9Ci0gICAg
ICBhc3NlcnRUcnVlKGF1ZGlvVHJhY2suZ2V0UGxheVN0YXRlKCkgPT0gQXVkaW9UcmFjay5QTEFZ
U1RBVEVfU1RPUFBFRCk7Ci0gICAgICBhdWRpb1RyYWNrLmZsdXNoKCk7Ci0gICAgfQotCi0gICAg
cHJpdmF0ZSBpbnQgd3JpdGVPbkxvbGxpcG9wKEF1ZGlvVHJhY2sgYXVkaW9UcmFjaywgQnl0ZUJ1
ZmZlciBieXRlQnVmZmVyLCBpbnQgc2l6ZUluQnl0ZXMpIHsKLSAgICAgIHJldHVybiBhdWRpb1Ry
YWNrLndyaXRlKGJ5dGVCdWZmZXIsIHNpemVJbkJ5dGVzLCBBdWRpb1RyYWNrLldSSVRFX0JMT0NL
SU5HKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCB3cml0ZVByZUxvbGxpcG9wKEF1ZGlvVHJh
Y2sgYXVkaW9UcmFjaywgQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBpbnQgc2l6ZUluQnl0ZXMpIHsK
LSAgICAgIHJldHVybiBhdWRpb1RyYWNrLndyaXRlKGJ5dGVCdWZmZXIuYXJyYXkoKSwgYnl0ZUJ1
ZmZlci5hcnJheU9mZnNldCgpLCBzaXplSW5CeXRlcyk7Ci0gICAgfQotCi0gICAgcHVibGljIHZv
aWQgam9pblRocmVhZCgpIHsKLSAgICAgIGtlZXBBbGl2ZSA9IGZhbHNlOwotICAgICAgd2hpbGUg
KGlzQWxpdmUoKSkgewotICAgICAgICB0cnkgewotICAgICAgICAgIGpvaW4oKTsKLSAgICAgICAg
fSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotICAgICAgICAgIC8vIElnbm9yZS4K
LSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotCi0gIFdlYlJ0Y0F1ZGlvVHJhY2soQ29u
dGV4dCBjb250ZXh0LCBsb25nIG5hdGl2ZUF1ZGlvVHJhY2spIHsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgdGhpcy5j
b250ZXh0ID0gY29udGV4dDsKLSAgICB0aGlzLm5hdGl2ZUF1ZGlvVHJhY2sgPSBuYXRpdmVBdWRp
b1RyYWNrOwotICAgIGF1ZGlvTWFuYWdlciA9IChBdWRpb01hbmFnZXIpIGNvbnRleHQuZ2V0U3lz
dGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0UpOwotICAgIGlmIChERUJVRykgewotICAg
ICAgV2ViUnRjQXVkaW9VdGlscy5sb2dEZXZpY2VJbmZvKFRBRyk7Ci0gICAgfQotICB9Ci0KLSAg
cHJpdmF0ZSBib29sZWFuIGluaXRQbGF5b3V0KGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMp
IHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiaW5pdFBsYXlvdXQoc2FtcGxlUmF0ZT0iICsgc2FtcGxl
UmF0ZSArICIsIGNoYW5uZWxzPSIgKyBjaGFubmVscyArICIpIik7Ci0gICAgZmluYWwgaW50IGJ5
dGVzUGVyRnJhbWUgPSBjaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsKLSAgICBieXRl
QnVmZmVyID0gYnl0ZUJ1ZmZlci5hbGxvY2F0ZURpcmVjdChieXRlc1BlckZyYW1lICogKHNhbXBs
ZVJhdGUgLyBCVUZGRVJTX1BFUl9TRUNPTkQpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiYnl0ZUJ1
ZmZlci5jYXBhY2l0eTogIiArIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgZW1wdHlCeXRl
cyA9IG5ldyBieXRlW2J5dGVCdWZmZXIuY2FwYWNpdHkoKV07Ci0gICAgLy8gUmF0aGVyIHRoYW4g
cGFzc2luZyB0aGUgQnl0ZUJ1ZmZlciB3aXRoIGV2ZXJ5IGNhbGxiYWNrIChyZXF1aXJpbmcKLSAg
ICAvLyB0aGUgcG90ZW50aWFsbHkgZXhwZW5zaXZlIEdldERpcmVjdEJ1ZmZlckFkZHJlc3MpIHdl
IHNpbXBseSBoYXZlIHRoZQotICAgIC8vIHRoZSBuYXRpdmUgY2xhc3MgY2FjaGUgdGhlIGFkZHJl
c3MgdG8gdGhlIG1lbW9yeSBvbmNlLgotICAgIG5hdGl2ZUNhY2hlRGlyZWN0QnVmZmVyQWRkcmVz
cyhieXRlQnVmZmVyLCBuYXRpdmVBdWRpb1RyYWNrKTsKLQotICAgIC8vIEdldCB0aGUgbWluaW11
bSBidWZmZXIgc2l6ZSByZXF1aXJlZCBmb3IgdGhlIHN1Y2Nlc3NmdWwgY3JlYXRpb24gb2YgYW4K
LSAgICAvLyBBdWRpb1RyYWNrIG9iamVjdCB0byBiZSBjcmVhdGVkIGluIHRoZSBNT0RFX1NUUkVB
TSBtb2RlLgotICAgIC8vIE5vdGUgdGhhdCB0aGlzIHNpemUgZG9lc24ndCBndWFyYW50ZWUgYSBz
bW9vdGggcGxheWJhY2sgdW5kZXIgbG9hZC4KLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBzaG91bGQg
d2UgZXh0ZW5kIHRoZSBidWZmZXIgc2l6ZSB0byBhdm9pZCBnbGl0Y2hlcz8KLSAgICBmaW5hbCBp
bnQgbWluQnVmZmVyU2l6ZUluQnl0ZXMgPSBBdWRpb1RyYWNrLmdldE1pbkJ1ZmZlclNpemUoCi0g
ICAgICAgIHNhbXBsZVJhdGUsIEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUX01PTk8sIEF1ZGlvRm9y
bWF0LkVOQ09ESU5HX1BDTV8xNkJJVCk7Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvVHJhY2su
Z2V0TWluQnVmZmVyU2l6ZTogIiArIG1pbkJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICAvLyBGb3Ig
dGhlIHN0cmVhbWluZyBtb2RlLCBkYXRhIG11c3QgYmUgd3JpdHRlbiB0byB0aGUgYXVkaW8gc2lu
ayBpbgotICAgIC8vIGNodW5rcyBvZiBzaXplIChnaXZlbiBieSBieXRlQnVmZmVyLmNhcGFjaXR5
KCkpIGxlc3MgdGhhbiBvciBlcXVhbAotICAgIC8vIHRvIHRoZSB0b3RhbCBidWZmZXIgc2l6ZSB8
bWluQnVmZmVyU2l6ZUluQnl0ZXN8LiBCdXQsIHdlIGhhdmUgc2VlbgotICAgIC8vIHJlcG9ydHMg
b2YgImdldE1pbkJ1ZmZlclNpemUoKTogZXJyb3IgcXVlcnlpbmcgaGFyZHdhcmUiLiBIZW5jZSwg
aXQKLSAgICAvLyBjYW4gaGFwcGVuIHRoYXQgfG1pbkJ1ZmZlclNpemVJbkJ5dGVzfCBjb250YWlu
cyBhbiBpbnZhbGlkIHZhbHVlLgotICAgIGlmIChtaW5CdWZmZXJTaXplSW5CeXRlcyA8IGJ5dGVC
dWZmZXIuY2FwYWNpdHkoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvVHJhY2suZ2V0
TWluQnVmZmVyU2l6ZSByZXR1cm5zIGFuIGludmFsaWQgdmFsdWUuIik7Ci0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gRW5zdXJlIHRoYXQgcHJldmlzaW9uIGF1ZGlvIHNlc3Np
b24gd2FzIHN0b3BwZWQgY29ycmVjdGx5IGJlZm9yZSB0cnlpbmcKLSAgICAvLyB0byBjcmVhdGUg
YSBuZXcgQXVkaW9UcmFjay4KLSAgICBpZiAoYXVkaW9UcmFjayAhPSBudWxsKSB7Ci0gICAgICBM
b2dnaW5nLmUoVEFHLCAiQ29uZmxpY3Qgd2l0aCBleGlzdGluZyBBdWRpb1RyYWNrLiIpOwotICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICB0cnkgewotICAgICAgLy8gQ3JlYXRlIGFuIEF1
ZGlvVHJhY2sgb2JqZWN0IGFuZCBpbml0aWFsaXplIGl0cyBhc3NvY2lhdGVkIGF1ZGlvIGJ1ZmZl
ci4KLSAgICAgIC8vIFRoZSBzaXplIG9mIHRoaXMgYnVmZmVyIGRldGVybWluZXMgaG93IGxvbmcg
YW4gQXVkaW9UcmFjayBjYW4gcGxheQotICAgICAgLy8gYmVmb3JlIHJ1bm5pbmcgb3V0IG9mIGRh
dGEuCi0gICAgICBhdWRpb1RyYWNrID0KLSAgICAgICAgICBuZXcgQXVkaW9UcmFjayhBdWRpb01h
bmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwsIHNhbXBsZVJhdGUsIEF1ZGlvRm9ybWF0LkNIQU5ORUxf
T1VUX01PTk8sCi0gICAgICAgICAgICAgIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVCwg
bWluQnVmZmVyU2l6ZUluQnl0ZXMsIEF1ZGlvVHJhY2suTU9ERV9TVFJFQU0pOwotICAgIH0gY2F0
Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCBl
LmdldE1lc3NhZ2UoKSk7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gSXQg
Y2FuIGhhcHBlbiB0aGF0IGFuIEF1ZGlvVHJhY2sgaXMgY3JlYXRlZCBidXQgaXQgd2FzIG5vdCBz
dWNjZXNzZnVsbHkKLSAgICAvLyBpbml0aWFsaXplZCB1cG9uIGNyZWF0aW9uLiBTZWVtcyB0byBi
ZSB0aGUgY2FzZSBlLmcuIHdoZW4gdGhlIG1heGltdW0KLSAgICAvLyBudW1iZXIgb2YgZ2xvYmFs
bHkgYXZhaWxhYmxlIGF1ZGlvIHRyYWNrcyBpcyBleGNlZWRlZC4KLSAgICBpZiAoYXVkaW9UcmFj
ay5nZXRTdGF0ZSgpICE9IEF1ZGlvVHJhY2suU1RBVEVfSU5JVElBTElaRUQpIHsKLSAgICAgIExv
Z2dpbmcuZShUQUcsICJJbml0aWFsaXphdGlvbiBvZiBhdWRpbyB0cmFjayBmYWlsZWQuIik7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFZlcmlmeSB0aGF0IGFsbCBhdWRpbyBw
YXJhbWV0ZXJzIGFyZSB2YWxpZCBhbmQgY29ycmVjdC4KLSAgICBpZiAoIWFyZVBhcmFtZXRlcnNW
YWxpZChzYW1wbGVSYXRlLCBjaGFubmVscykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdCBs
ZWFzdCBvbmUgYXVkaW8gdHJhY2sgcGFyYW1ldGVyIGlzIGludmFsaWQuIik7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGxvZ01haW5QYXJhbWV0ZXJzKCk7Ci0gICAgbG9nTWFpblBh
cmFtZXRlcnNFeHRlbmRlZCgpOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBi
b29sZWFuIHN0YXJ0UGxheW91dCgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic3RhcnRQbGF5b3V0
Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RyYWNrICE9IG51bGwpOwotICAgIGFzc2VydFRydWUo
YXVkaW9UaHJlYWQgPT0gbnVsbCk7Ci0gICAgaWYgKGF1ZGlvVHJhY2suZ2V0U3RhdGUoKSAhPSBB
dWRpb1RyYWNrLlNUQVRFX0lOSVRJQUxJWkVEKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVk
aW8gdHJhY2sgaXMgbm90IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZC4iKTsKLSAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgYXVkaW9UaHJlYWQgPSBuZXcgQXVkaW9UcmFja1RocmVhZCgi
QXVkaW9UcmFja0phdmFUaHJlYWQiKTsKLSAgICBhdWRpb1RocmVhZC5zdGFydCgpOwotICAgIHJl
dHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29sZWFuIHN0b3BQbGF5b3V0KCkgewotICAg
IExvZ2dpbmcuZChUQUcsICJzdG9wUGxheW91dCIpOwotICAgIGFzc2VydFRydWUoYXVkaW9UaHJl
YWQgIT0gbnVsbCk7Ci0gICAgbG9nVW5kZXJydW5Db3VudCgpOwotICAgIGF1ZGlvVGhyZWFkLmpv
aW5UaHJlYWQoKTsKLSAgICBhdWRpb1RocmVhZCA9IG51bGw7Ci0gICAgaWYgKGF1ZGlvVHJhY2sg
IT0gbnVsbCkgewotICAgICAgYXVkaW9UcmFjay5yZWxlYXNlKCk7Ci0gICAgICBhdWRpb1RyYWNr
ID0gbnVsbDsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICAvLyBHZXQgbWF4IHBv
c3NpYmxlIHZvbHVtZSBpbmRleCBmb3IgYSBwaG9uZSBjYWxsIGF1ZGlvIHN0cmVhbS4KLSAgcHJp
dmF0ZSBpbnQgZ2V0U3RyZWFtTWF4Vm9sdW1lKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJnZXRT
dHJlYW1NYXhWb2x1bWUiKTsKLSAgICBhc3NlcnRUcnVlKGF1ZGlvTWFuYWdlciAhPSBudWxsKTsK
LSAgICByZXR1cm4gYXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRpb01hbmFnZXIu
U1RSRUFNX1ZPSUNFX0NBTEwpOwotICB9Ci0KLSAgLy8gU2V0IGN1cnJlbnQgdm9sdW1lIGxldmVs
IGZvciBhIHBob25lIGNhbGwgYXVkaW8gc3RyZWFtLgotICBwcml2YXRlIGJvb2xlYW4gc2V0U3Ry
ZWFtVm9sdW1lKGludCB2b2x1bWUpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAic2V0U3RyZWFtVm9s
dW1lKCIgKyB2b2x1bWUgKyAiKSIpOwotICAgIGFzc2VydFRydWUoYXVkaW9NYW5hZ2VyICE9IG51
bGwpOwotICAgIGlmIChpc1ZvbHVtZUZpeGVkKCkpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJU
aGUgZGV2aWNlIGltcGxlbWVudHMgYSBmaXhlZCB2b2x1bWUgcG9saWN5LiIpOwotICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICBhdWRpb01hbmFnZXIuc2V0U3RyZWFtVm9sdW1lKEF1ZGlv
TWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCwgdm9sdW1lLCAwKTsKLSAgICByZXR1cm4gdHJ1ZTsK
LSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc1ZvbHVtZUZpeGVkKCkgewotICAgIGlmICghV2Vi
UnRjQXVkaW9VdGlscy5ydW5uaW5nT25Mb2xsaXBvcE9ySGlnaGVyKCkpCi0gICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGF1ZGlvTWFuYWdlci5pc1ZvbHVtZUZpeGVkKCk7Ci0gIH0KLQot
ICAvKiogR2V0IGN1cnJlbnQgdm9sdW1lIGxldmVsIGZvciBhIHBob25lIGNhbGwgYXVkaW8gc3Ry
ZWFtLiAqLwotICBwcml2YXRlIGludCBnZXRTdHJlYW1Wb2x1bWUoKSB7Ci0gICAgTG9nZ2luZy5k
KFRBRywgImdldFN0cmVhbVZvbHVtZSIpOwotICAgIGFzc2VydFRydWUoYXVkaW9NYW5hZ2VyICE9
IG51bGwpOwotICAgIHJldHVybiBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFu
YWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCk7Ci0gIH0KLQotICAvLyBWZXJpZmllcyB0aGF0IHRoZSBh
dWRpbyB0cmFjayBpcyB1c2luZyBjb3JyZWN0IHBhcmFtZXRlcnMsIGkuZS4sIHRoYXQgdGhlCi0g
IC8vIGNyZWF0ZWQgdHJhY2sgdXNlcyB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFza2VkIGZvci4K
LSAgcHJpdmF0ZSBib29sZWFuIGFyZVBhcmFtZXRlcnNWYWxpZChpbnQgc2FtcGxlUmF0ZSwgaW50
IGNoYW5uZWxzKSB7Ci0gICAgZmluYWwgaW50IHN0cmVhbVR5cGUgPSBhdWRpb1RyYWNrLmdldFN0
cmVhbVR5cGUoKTsKLSAgICByZXR1cm4gKGF1ZGlvVHJhY2suZ2V0QXVkaW9Gb3JtYXQoKSA9PSBB
dWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQKLSAgICAgICAgJiYgYXVkaW9UcmFjay5nZXRD
aGFubmVsQ29uZmlndXJhdGlvbigpID09IEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUX01PTk8KLSAg
ICAgICAgJiYgc3RyZWFtVHlwZSA9PSBBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNFX0NBTEwgJiYg
YXVkaW9UcmFjay5nZXRTYW1wbGVSYXRlKCkgPT0gc2FtcGxlUmF0ZQotICAgICAgICAmJiBzYW1w
bGVSYXRlID09IGF1ZGlvVHJhY2suZ2V0TmF0aXZlT3V0cHV0U2FtcGxlUmF0ZShzdHJlYW1UeXBl
KQotICAgICAgICAmJiBhdWRpb1RyYWNrLmdldENoYW5uZWxDb3VudCgpID09IGNoYW5uZWxzKTsK
LSAgfQotCi0gIHByaXZhdGUgdm9pZCBsb2dNYWluUGFyYW1ldGVycygpIHsKLSAgICBMb2dnaW5n
LmQoVEFHLCAiQXVkaW9UcmFjazogIgotICAgICAgICAgICAgKyAic2Vzc2lvbiBJRDogIiArIGF1
ZGlvVHJhY2suZ2V0QXVkaW9TZXNzaW9uSWQoKSArICIsICIKLSAgICAgICAgICAgICsgImNoYW5u
ZWxzOiAiICsgYXVkaW9UcmFjay5nZXRDaGFubmVsQ291bnQoKSArICIsICIKLSAgICAgICAgICAg
ICsgInNhbXBsZSByYXRlOiAiICsgYXVkaW9UcmFjay5nZXRTYW1wbGVSYXRlKCkgKyAiLCAiCi0g
ICAgICAgICAgICAvLyBHYWluICg+PTEuMCkgZXhwcmVzc2VkIGFzIGxpbmVhciBtdWx0aXBsaWVy
IG9uIHNhbXBsZSB2YWx1ZXMuCi0gICAgICAgICAgICArICJtYXggZ2FpbjogIiArIGF1ZGlvVHJh
Y2suZ2V0TWF4Vm9sdW1lKCkpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0
ZXJzRXh0ZW5kZWQoKSB7Ci0gICAgaWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTWFyc2ht
YWxsb3dPckhpZ2hlcigpKSB7Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFjazogIgot
ICAgICAgICAgICAgICAvLyBUaGUgZWZmZWN0aXZlIHNpemUgb2YgdGhlIEF1ZGlvVHJhY2sgYnVm
ZmVyIHRoYXQgdGhlIGFwcCB3cml0ZXMgdG8uCi0gICAgICAgICAgICAgICsgImJ1ZmZlciBzaXpl
IGluIGZyYW1lczogIiArIGF1ZGlvVHJhY2suZ2V0QnVmZmVyU2l6ZUluRnJhbWVzKCkpOwotICAg
IH0KLSAgICBpZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25Ob3VnYXRPckhpZ2hlcigpKSB7
Ci0gICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFjazogIgotICAgICAgICAgICAgICAvLyBN
YXhpbXVtIHNpemUgb2YgdGhlIEF1ZGlvVHJhY2sgYnVmZmVyIGluIGZyYW1lcy4KLSAgICAgICAg
ICAgICAgKyAiYnVmZmVyIGNhcGFjaXR5IGluIGZyYW1lczogIiArIGF1ZGlvVHJhY2suZ2V0QnVm
ZmVyQ2FwYWNpdHlJbkZyYW1lcygpKTsKLSAgICB9Ci0gIH0KLQotICAvLyBQcmludHMgdGhlIG51
bWJlciBvZiB1bmRlcnJ1biBvY2N1cnJlbmNlcyBpbiB0aGUgYXBwbGljYXRpb24tbGV2ZWwgd3Jp
dGUKLSAgLy8gYnVmZmVyIHNpbmNlIHRoZSBBdWRpb1RyYWNrIHdhcyBjcmVhdGVkLiBBbiB1bmRl
cnJ1biBvY2N1cnMgaWYgdGhlIGFwcCBkb2VzCi0gIC8vIG5vdCB3cml0ZSBhdWRpbyBkYXRhIHF1
aWNrbHkgZW5vdWdoLCBjYXVzaW5nIHRoZSBidWZmZXIgdG8gdW5kZXJmbG93IGFuZCBhCi0gIC8v
IHBvdGVudGlhbCBhdWRpbyBnbGl0Y2guCi0gIC8vIFRPRE8oaGVucmlrYSk6IGtlZXAgdHJhY2sg
b2YgdGhpcyB2YWx1ZSBpbiB0aGUgZmllbGQgYW5kIHBvc3NpYmx5IGFkZCBuZXcKLSAgLy8gVU1B
IHN0YXQgaWYgbmVlZGVkLgotICBwcml2YXRlIHZvaWQgbG9nVW5kZXJydW5Db3VudCgpIHsKLSAg
ICBpZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25Ob3VnYXRPckhpZ2hlcigpKSB7Ci0gICAg
ICBMb2dnaW5nLmQoVEFHLCAidW5kZXJydW4gY291bnQ6ICIgKyBhdWRpb1RyYWNrLmdldFVuZGVy
cnVuQ291bnQoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3aGljaCB0aHJv
d3MgYW4gZXhjZXB0aW9uICB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVkLgotICBwcml2YXRl
IHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25kaXRpb24pIHsKLSAgICBpZiAoIWNv
bmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCBjb25k
aXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgbmF0aXZlIHZvaWQg
bmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwgbG9u
ZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVHZXRQ
bGF5b3V0RGF0YShpbnQgYnl0ZXMsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gIC8vIFNl
dHMgYWxsIHNhbXBsZXMgdG8gYmUgcGxheWVkIG91dCB0byB6ZXJvIGlmIHxtdXRlfCBpcyB0cnVl
LCBpLmUuLAotICAvLyBlbnN1cmVzIHRoYXQgdGhlIHNwZWFrZXIgaXMgbXV0ZWQuCi0gIHB1Ymxp
YyBzdGF0aWMgdm9pZCBzZXRTcGVha2VyTXV0ZShib29sZWFuIG11dGUpIHsKLSAgICBMb2dnaW5n
LncoVEFHLCAic2V0U3BlYWtlck11dGUoIiArIG11dGUgKyAiKSIpOwotICAgIHNwZWFrZXJNdXRl
ID0gbXV0ZTsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVXRpbHMuamF2YQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9h
bmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9VdGlscy5q
YXZhCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJy
dGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9VdGlscy5qYXZhCShub25leGlzdGVudCkKQEAgLTEs
MjAyICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVj
dCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4g
YmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0g
KiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50
IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5n
IHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53ZWJydGMu
dm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxvZ2dpbmc7Ci0KLWltcG9ydCBhbmRy
b2lkLmNvbnRlbnQuQ29udGV4dDsKLWltcG9ydCBhbmRyb2lkLmNvbnRlbnQucG0uUGFja2FnZU1h
bmFnZXI7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLWltcG9ydCBhbmRyb2lkLm9zLlByb2Nl
c3M7Ci0KLWltcG9ydCBqYXZhLmxhbmcuVGhyZWFkOwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7
Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLXB1YmxpYyBmaW5hbCBjbGFzcyBXZWJSdGNBdWRp
b1V0aWxzIHsKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRp
b1V0aWxzIjsKLQotICAvLyBMaXN0IG9mIGRldmljZXMgd2hlcmUgd2UgaGF2ZSBzZWVuIGlzc3Vl
cyAoZS5nLiBiYWQgYXVkaW8gcXVhbGl0eSkgdXNpbmcKLSAgLy8gdGhlIGxvdyBsYXRlbmN5IG91
dHB1dCBtb2RlIGluIGNvbWJpbmF0aW9uIHdpdGggT3BlblNMIEVTLgotICAvLyBUaGUgZGV2aWNl
IG5hbWUgaXMgZ2l2ZW4gYnkgQnVpbGQuTU9ERUwuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0
cmluZ1tdIEJMQUNLTElTVEVEX09QRU5fU0xfRVNfTU9ERUxTID0gbmV3IFN0cmluZ1tdIHsKLSAg
ICAgIC8vIFRoaXMgbGlzdCBpcyBjdXJyZW50bHkgZW1wdHkgOy0pCi0gIH07Ci0KLSAgLy8gTGlz
dCBvZiBkZXZpY2VzIHdoZXJlIGl0IGhhcyBiZWVuIHZlcmlmaWVkIHRoYXQgdGhlIGJ1aWx0LWlu
IGVmZmVjdAotICAvLyBiYWQgYW5kIHdoZXJlIGl0IG1ha2VzIHNlbnNlIHRvIGF2b2lkIHVzaW5n
IGl0IGFuZCBpbnN0ZWFkIHJlbHkgb24gdGhlCi0gIC8vIG5hdGl2ZSBXZWJSVEMgdmVyc2lvbiBp
bnN0ZWFkLiBUaGUgZGV2aWNlIG5hbWUgaXMgZ2l2ZW4gYnkgQnVpbGQuTU9ERUwuCi0gIHByaXZh
dGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEJMQUNLTElTVEVEX0FFQ19NT0RFTFMgPSBuZXcgU3Ry
aW5nW10gewotICAgICAgIkQ2NTAzIiwgLy8gU29ueSBYcGVyaWEgWjIgRDY1MDMKLSAgICAgICJP
TkUgQTIwMDUiLCAvLyBPbmVQbHVzIDIKLSAgICAgICJNb3RvRzMiLCAvLyBNb3RvIEcgKDNyZCBH
ZW5lcmF0aW9uKQotICB9OwotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBCTEFDS0xJ
U1RFRF9OU19NT0RFTFMgPSBuZXcgU3RyaW5nW10gewotICAgICAgIk5leHVzIDEwIiwgIk5leHVz
IDkiLAotICAgICAgIk9ORSBBMjAwNSIsIC8vIE9uZVBsdXMgMgotICB9OwotCi0gIC8vIFVzZSAx
NmtIeiBhcyB0aGUgZGVmYXVsdCBzYW1wbGUgcmF0ZS4gQSBoaWdoZXIgc2FtcGxlIHJhdGUgbWln
aHQgcHJldmVudAotICAvLyB1cyBmcm9tIHN1cHBvcnRpbmcgY29tbXVuaWNhdGlvbiBtb2RlIG9u
IHNvbWUgb2xkZXIgKGUuZy4gSUNTKSBkZXZpY2VzLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBp
bnQgREVGQVVMVF9TQU1QTEVfUkFURV9IWiA9IDE2MDAwOwotICBwcml2YXRlIHN0YXRpYyBpbnQg
ZGVmYXVsdFNhbXBsZVJhdGVIeiA9IERFRkFVTFRfU0FNUExFX1JBVEVfSFo7Ci0gIC8vIFNldCB0
byB0cnVlIGlmIHNldERlZmF1bHRTYW1wbGVSYXRlSHooKSBoYXMgYmVlbiBjYWxsZWQuCi0gIHBy
aXZhdGUgc3RhdGljIGJvb2xlYW4gaXNEZWZhdWx0U2FtcGxlUmF0ZU92ZXJyaWRkZW4gPSBmYWxz
ZTsKLQotICAvLyBCeSBkZWZhdWx0LCB1dGlsaXplIGhhcmR3YXJlIGJhc2VkIGF1ZGlvIGVmZmVj
dHMgZm9yIEFFQyBhbmQgTlMgd2hlbgotICAvLyBhdmFpbGFibGUuCi0gIHByaXZhdGUgc3RhdGlj
IGJvb2xlYW4gdXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlciA9IGZhbHNlOwotICBw
cml2YXRlIHN0YXRpYyBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yID0gZmFs
c2U7Ci0KLSAgLy8gQ2FsbCB0aGVzZSBtZXRob2RzIGlmIGFueSBoYXJkd2FyZSBiYXNlZCBlZmZl
Y3Qgc2hhbGwgYmUgcmVwbGFjZWQgYnkgYQotICAvLyBzb2Z0d2FyZSBiYXNlZCB2ZXJzaW9uIHBy
b3ZpZGVkIGJ5IHRoZSBXZWJSVEMgc3RhY2sgaW5zdGVhZC4KLSAgcHVibGljIHN0YXRpYyBzeW5j
aHJvbml6ZWQgdm9pZCBzZXRXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKGJvb2xlYW4g
ZW5hYmxlKSB7Ci0gICAgdXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlciA9IGVuYWJs
ZTsKLSAgfQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFdlYlJ0Y0Jhc2Vk
Tm9pc2VTdXBwcmVzc29yKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgdXNlV2ViUnRjQmFzZWROb2lz
ZVN1cHByZXNzb3IgPSBlbmFibGU7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQg
dm9pZCBzZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKGJvb2xlYW4gZW5hYmxlKSB7
Ci0gICAgLy8gVE9ETyhoZW5yaWthKTogZGVwcmVjYXRlZDsgcmVtb3ZlIHdoZW4gbm8gbG9uZ2Vy
IHVzZWQgYnkgYW55IGNsaWVudC4KLSAgICBMb2dnaW5nLncoVEFHLCAic2V0V2ViUnRjQmFzZWRB
dXRvbWF0aWNHYWluQ29udHJvbCgpIGlzIGRlcHJlY2F0ZWQiKTsKLSAgfQotCi0gIHB1YmxpYyBz
dGF0aWMgc3luY2hyb25pemVkIGJvb2xlYW4gdXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5j
ZWxlcigpIHsKLSAgICBpZiAodXNlV2ViUnRjQmFzZWRBY291c3RpY0VjaG9DYW5jZWxlcikgewot
ICAgICAgTG9nZ2luZy53KFRBRywgIk92ZXJyaWRpbmcgZGVmYXVsdCBiZWhhdmlvcjsgbm93IHVz
aW5nIFdlYlJUQyBBRUMhIik7Ci0gICAgfQotICAgIHJldHVybiB1c2VXZWJSdGNCYXNlZEFjb3Vz
dGljRWNob0NhbmNlbGVyOwotICB9Ci0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIGJvb2xl
YW4gdXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoKSB7Ci0gICAgaWYgKHVzZVdlYlJ0Y0Jh
c2VkTm9pc2VTdXBwcmVzc29yKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAiT3ZlcnJpZGluZyBk
ZWZhdWx0IGJlaGF2aW9yOyBub3cgdXNpbmcgV2ViUlRDIE5TISIpOwotICAgIH0KLSAgICByZXR1
cm4gdXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3I7Ci0gIH0KLSAgLy8gVE9ETyhoZW5yaWth
KTogZGVwcmVjYXRlZDsgcmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQgYnkgYW55IGNsaWVudC4K
LSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZEF1dG9t
YXRpY0dhaW5Db250cm9sKCkgewotICAgIC8vIEFsd2F5cyByZXR1cm4gdHJ1ZSBoZXJlIHRvIGF2
b2lkIHRyeWluZyB0byB1c2UgYW55IGJ1aWx0LWluIEFHQy4KLSAgICByZXR1cm4gdHJ1ZTsKLSAg
fQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIGFuIGF1ZGlvIGVm
ZmVjdCAoQUVDIG9yIE5TKS4KLSAgLy8gRm91ciBjb25kaXRpb25zIG11c3QgYmUgZnVsZmlsbGVk
IGlmIGZ1bmN0aW9ucyBhcmUgdG8gcmV0dXJuIHRydWU6Ci0gIC8vIDEpIHRoZSBwbGF0Zm9ybSBt
dXN0IHN1cHBvcnQgdGhlIGJ1aWx0LWluIChIVykgZWZmZWN0LAotICAvLyAyKSBleHBsaWNpdCB1
c2UgKG92ZXJyaWRlKSBvZiBhIFdlYlJUQyBiYXNlZCB2ZXJzaW9uIG11c3Qgbm90IGJlIHNldCwK
LSAgLy8gMykgdGhlIGRldmljZSBtdXN0IG5vdCBiZSBibGFja2xpc3RlZCBmb3IgdXNlIG9mIHRo
ZSBlZmZlY3QsIGFuZAotICAvLyA0KSB0aGUgVVVJRCBvZiB0aGUgZWZmZWN0IG11c3QgYmUgYXBw
cm92ZWQgKHNvbWUgVVVJRHMgY2FuIGJlIGV4Y2x1ZGVkKS4KLSAgcHVibGljIHN0YXRpYyBib29s
ZWFuIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0
Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpOwotICB9Ci0gIHB1Ymxp
YyBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpIHsKLSAgICByZXR1
cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNhblVzZU5vaXNlU3VwcHJlc3NvcigpOwotICB9Ci0gIC8v
IFRPRE8oaGVucmlrYSk6IGRlcHJlY2F0ZWQ7IHJlbW92ZSB3aGVuIG5vIGxvbmdlciB1c2VkIGJ5
IGFueSBjbGllbnQuCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0F1dG9tYXRpY0dhaW5Db250
cm9sU3VwcG9ydGVkKCkgewotICAgIC8vIEFsd2F5cyByZXR1cm4gZmFsc2UgaGVyZSB0byBhdm9p
ZCB0cnlpbmcgdG8gdXNlIGFueSBidWlsdC1pbiBBR0MuCi0gICAgcmV0dXJuIGZhbHNlOwotICB9
Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgZGVmYXVsdCBoYW5kbGluZyBvZiBxdWVy
eWluZyB0aGUgbmF0aXZlIHNhbXBsZQotICAvLyByYXRlIHNoYWxsIGJlIG92ZXJyaWRkZW4uIENh
biBiZSB1c2VmdWwgb24gc29tZSBkZXZpY2VzIHdoZXJlIHRoZQotICAvLyBhdmFpbGFibGUgQW5k
cm9pZCBBUElzIGFyZSBrbm93biB0byByZXR1cm4gaW52YWxpZCByZXN1bHRzLgotICBwdWJsaWMg
c3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldERlZmF1bHRTYW1wbGVSYXRlSHooaW50IHNhbXBs
ZVJhdGVIeikgewotICAgIGlzRGVmYXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuID0gdHJ1ZTsKLSAg
ICBkZWZhdWx0U2FtcGxlUmF0ZUh6ID0gc2FtcGxlUmF0ZUh6OwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiBpc0RlZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbigp
IHsKLSAgICByZXR1cm4gaXNEZWZhdWx0U2FtcGxlUmF0ZU92ZXJyaWRkZW47Ci0gIH0KLQotICBw
dWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBpbnQgZ2V0RGVmYXVsdFNhbXBsZVJhdGVIeigpIHsK
LSAgICByZXR1cm4gZGVmYXVsdFNhbXBsZVJhdGVIejsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMg
TGlzdDxTdHJpbmc+IGdldEJsYWNrTGlzdGVkTW9kZWxzRm9yQWVjVXNhZ2UoKSB7Ci0gICAgcmV0
dXJuIEFycmF5cy5hc0xpc3QoV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9BRUNfTU9ERUxT
KTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgTGlzdDxTdHJpbmc+IGdldEJsYWNrTGlzdGVkTW9k
ZWxzRm9yTnNVc2FnZSgpIHsKLSAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChXZWJSdGNBdWRpb1V0
aWxzLkJMQUNLTElTVEVEX05TX01PREVMUyk7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xl
YW4gcnVubmluZ09uR2luZ2VyQnJlYWRPckhpZ2hlcigpIHsKLSAgICAvLyBOb3ZlbWJlciAyMDEw
OiBBbmRyb2lkIDIuMywgQVBJIExldmVsIDkuCi0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RL
X0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkdJTkdFUkJSRUFEOwotICB9Ci0KLSAgcHVibGlj
IHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkplbGx5QmVhbk9ySGlnaGVyKCkgewotICAgIC8vIEp1
bmUgMjAxMjogQW5kcm9pZCA0LjEuIEFQSSBMZXZlbCAxNi4KLSAgICByZXR1cm4gQnVpbGQuVkVS
U0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuSkVMTFlfQkVBTjsKLSAgfQotCi0g
IHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25KZWxseUJlYW5NUjFPckhpZ2hlcigpIHsK
LSAgICAvLyBOb3ZlbWJlciAyMDEyOiBBbmRyb2lkIDQuMi4gQVBJIExldmVsIDE3LgotICAgIHJl
dHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5KRUxMWV9C
RUFOX01SMTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25KZWxseUJl
YW5NUjJPckhpZ2hlcigpIHsKLSAgICAvLyBKdWx5IDI0LCAyMDEzOiBBbmRyb2lkIDQuMy4gQVBJ
IExldmVsIDE4LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVS
U0lPTl9DT0RFUy5KRUxMWV9CRUFOX01SMjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVh
biBydW5uaW5nT25Mb2xsaXBvcE9ySGlnaGVyKCkgewotICAgIC8vIEFQSSBMZXZlbCAyMS4KLSAg
ICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05fQ09ERVMuTE9M
TElQT1A7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmluZ09uTWFyc2htYWxs
b3dPckhpZ2hlcigpIHsKLSAgICAvLyBBUEkgTGV2ZWwgMjMuCi0gICAgcmV0dXJuIEJ1aWxkLlZF
UlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk07Ci0gIH0KLQotICBwdWJsaWMg
c3RhdGljIGJvb2xlYW4gcnVubmluZ09uTm91Z2F0T3JIaWdoZXIoKSB7Ci0gICAgLy8gQVBJIExl
dmVsIDI0LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQuVkVSU0lP
Tl9DT0RFUy5OOwotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCBmb3IgYnVpbGRpbmcgYSBzdHJp
bmcgb2YgdGhyZWFkIGluZm9ybWF0aW9uLgotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRUaHJl
YWRJbmZvKCkgewotICAgIHJldHVybiAiQFtuYW1lPSIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgp
LmdldE5hbWUoKSArICIsIGlkPSIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldElkKCkKLSAg
ICAgICAgKyAiXSI7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgd2UncmUgcnVubmluZyBv
biBlbXVsYXRvci4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkVtdWxhdG9yKCkg
ewotICAgIHJldHVybiBCdWlsZC5IQVJEV0FSRS5lcXVhbHMoImdvbGRmaXNoIikgJiYgQnVpbGQu
QlJBTkQuc3RhcnRzV2l0aCgiZ2VuZXJpY18iKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGUgZGV2aWNlIGlzIGJsYWNrbGlzdGVkIGZvciBPcGVuU0wgRVMgdXNhZ2UuCi0gIHB1Ymxp
YyBzdGF0aWMgYm9vbGVhbiBkZXZpY2VJc0JsYWNrbGlzdGVkRm9yT3BlblNMRVNVc2FnZSgpIHsK
LSAgICBMaXN0PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBBcnJheXMuYXNMaXN0KEJMQUNL
TElTVEVEX09QRU5fU0xfRVNfTU9ERUxTKTsKLSAgICByZXR1cm4gYmxhY2tMaXN0ZWRNb2RlbHMu
Y29udGFpbnMoQnVpbGQuTU9ERUwpOwotICB9Ci0KLSAgLy8gSW5mb3JtYXRpb24gYWJvdXQgdGhl
IGN1cnJlbnQgYnVpbGQsIHRha2VuIGZyb20gc3lzdGVtIHByb3BlcnRpZXMuCi0gIHB1YmxpYyBz
dGF0aWMgdm9pZCBsb2dEZXZpY2VJbmZvKFN0cmluZyB0YWcpIHsKLSAgICBMb2dnaW5nLmQodGFn
LCAiQW5kcm9pZCBTREs6ICIgKyBCdWlsZC5WRVJTSU9OLlNES19JTlQgKyAiLCAiCi0gICAgICAg
ICAgICArICJSZWxlYXNlOiAiICsgQnVpbGQuVkVSU0lPTi5SRUxFQVNFICsgIiwgIgotICAgICAg
ICAgICAgKyAiQnJhbmQ6ICIgKyBCdWlsZC5CUkFORCArICIsICIKLSAgICAgICAgICAgICsgIkRl
dmljZTogIiArIEJ1aWxkLkRFVklDRSArICIsICIKLSAgICAgICAgICAgICsgIklkOiAiICsgQnVp
bGQuSUQgKyAiLCAiCi0gICAgICAgICAgICArICJIYXJkd2FyZTogIiArIEJ1aWxkLkhBUkRXQVJF
ICsgIiwgIgotICAgICAgICAgICAgKyAiTWFudWZhY3R1cmVyOiAiICsgQnVpbGQuTUFOVUZBQ1RV
UkVSICsgIiwgIgotICAgICAgICAgICAgKyAiTW9kZWw6ICIgKyBCdWlsZC5NT0RFTCArICIsICIK
LSAgICAgICAgICAgICsgIlByb2R1Y3Q6ICIgKyBCdWlsZC5QUk9EVUNUKTsKLSAgfQotCi0gIC8v
IENoZWNrcyBpZiB0aGUgcHJvY2VzcyBoYXMgYXMgc3BlY2lmaWVkIHBlcm1pc3Npb24gb3Igbm90
LgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaGFzUGVybWlzc2lvbihDb250ZXh0IGNvbnRleHQs
IFN0cmluZyBwZXJtaXNzaW9uKSB7Ci0gICAgcmV0dXJuIGNvbnRleHQuY2hlY2tQZXJtaXNzaW9u
KHBlcm1pc3Npb24sIFByb2Nlc3MubXlQaWQoKSwgUHJvY2Vzcy5teVVpZCgpKQotICAgICAgICA9
PSBQYWNrYWdlTWFuYWdlci5QRVJNSVNTSU9OX0dSQU5URUQ7Ci0gIH0KLX0KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNl
L2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8uamF2YQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2Vlbmdp
bmUvQnVpbGRJbmZvLmphdmEJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2
YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8uamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDUxICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi1wYWNrYWdlIG9yZy53
ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwotCi1wdWJsaWMg
ZmluYWwgY2xhc3MgQnVpbGRJbmZvIHsKLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2aWNl
KCkgewotICAgIHJldHVybiBCdWlsZC5ERVZJQ0U7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0
cmluZyBnZXREZXZpY2VNb2RlbCgpIHsKLSAgICByZXR1cm4gQnVpbGQuTU9ERUw7Ci0gIH0KLQot
ICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQcm9kdWN0KCkgewotICAgIHJldHVybiBCdWlsZC5Q
Uk9EVUNUOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QnJhbmQoKSB7Ci0gICAg
cmV0dXJuIEJ1aWxkLkJSQU5EOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RGV2
aWNlTWFudWZhY3R1cmVyKCkgewotICAgIHJldHVybiBCdWlsZC5NQU5VRkFDVFVSRVI7Ci0gIH0K
LQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRBbmRyb2lkQnVpbGRJZCgpIHsKLSAgICByZXR1
cm4gQnVpbGQuSUQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRCdWlsZFR5cGUo
KSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlRZUEU7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIFN0cmlu
ZyBnZXRCdWlsZFJlbGVhc2UoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uUkVMRUFTRTsK
LSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgaW50IGdldFNka1ZlcnNpb24oKSB7Ci0gICAgcmV0dXJu
IEJ1aWxkLlZFUlNJT04uU0RLX0lOVDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZh
L3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZmZWN0cy5qYXZhCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9X
ZWJSdGNBdWRpb0VmZmVjdHMuamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9p
ZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvRWZmZWN0cy5qYXZh
CShub25leGlzdGVudCkKQEAgLTEsMzI1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAy
MDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwg
cHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVO
VFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBp
biB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwot
Ci1wYWNrYWdlIG9yZy53ZWJydGMudm9pY2VlbmdpbmU7Ci0KLWltcG9ydCBvcmcud2VicnRjLkxv
Z2dpbmc7Ci0KLWltcG9ydCBhbmRyb2lkLmFubm90YXRpb24uVGFyZ2V0QXBpOwotaW1wb3J0IGFu
ZHJvaWQubWVkaWEuYXVkaW9meC5BY291c3RpY0VjaG9DYW5jZWxlcjsKLWltcG9ydCBhbmRyb2lk
Lm1lZGlhLmF1ZGlvZnguQXVkaW9FZmZlY3Q7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4
LkF1ZGlvRWZmZWN0LkRlc2NyaXB0b3I7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5hdWRpb2Z4LkF1
dG9tYXRpY0dhaW5Db250cm9sOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuYXVkaW9meC5Ob2lzZVN1
cHByZXNzb3I7Ci1pbXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1wb3J0IGphdmEudXRpbC5M
aXN0OwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi0vLyBUaGlzIGNsYXNzIHdyYXBzIGNvbnRy
b2wgb2YgdGhyZWUgZGlmZmVyZW50IHBsYXRmb3JtIGVmZmVjdHMuIFN1cHBvcnRlZAotLy8gZWZm
ZWN0cyBhcmU6IEFjb3VzdGljRWNob0NhbmNlbGVyIChBRUMpIGFuZCBOb2lzZVN1cHByZXNzb3Ig
KE5TKS4KLS8vIENhbGxpbmcgZW5hYmxlKCkgd2lsbCBhY3RpdmUgYWxsIGVmZmVjdHMgdGhhdCBh
cmUKLS8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGlmIHRoZSBjb3JyZXNwb25kaW5nIHxzaG91
bGRFbmFibGVYWFh8IG1lbWJlciBpcyBzZXQuCi1jbGFzcyBXZWJSdGNBdWRpb0VmZmVjdHMgewot
ICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLSAgcHJpdmF0
ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRBRyA9ICJXZWJSdGNBdWRpb0VmZmVjdHMiOwotCi0gIC8v
IFVVSURzIGZvciBTb2Z0d2FyZSBBdWRpbyBFZmZlY3RzIHRoYXQgd2Ugd2FudCB0byBhdm9pZCB1
c2luZy4KLSAgLy8gVGhlIGltcGxlbWVudG9yIGZpZWxkIHdpbGwgYmUgc2V0IHRvICJUaGUgQW5k
cm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ii4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgVVVJRCBB
T1NQX0FDT1VTVElDX0VDSE9fQ0FOQ0VMRVIgPQotICAgICAgVVVJRC5mcm9tU3RyaW5nKCJiYjM5
MmVjMC04ZDRkLTExZTAtYTg5Ni0wMDAyYTVkNWM1MWIiKTsKLSAgcHJpdmF0ZSBzdGF0aWMgZmlu
YWwgVVVJRCBBT1NQX05PSVNFX1NVUFBSRVNTT1IgPQotICAgICAgVVVJRC5mcm9tU3RyaW5nKCJj
MDZjODQwMC04ZTA2LTExZTAtOWNiNi0wMDAyYTVkNWM1MWIiKTsKLQotICAvLyBDb250YWlucyB0
aGUgYXZhaWxhYmxlIGVmZmVjdCBkZXNjcmlwdG9ycyByZXR1cm5lZCBmcm9tIHRoZQotICAvLyBB
dWRpb0VmZmVjdC5nZXRFZmZlY3RzKCkgY2FsbC4gVGhpcyByZXN1bHQgaXMgY2FjaGVkIHRvIGF2
b2lkIGRvaW5nIHRoZQotICAvLyBzbG93IE9TIGNhbGwgbXVsdGlwbGUgdGltZXMuCi0gIHByaXZh
dGUgc3RhdGljIERlc2NyaXB0b3JbXSBjYWNoZWRFZmZlY3RzID0gbnVsbDsKLQotICAvLyBDb250
YWlucyB0aGUgYXVkaW8gZWZmZWN0IG9iamVjdHMuIENyZWF0ZWQgaW4gZW5hYmxlKCkgYW5kIGRl
c3Ryb3llZAotICAvLyBpbiByZWxlYXNlKCkuCi0gIHByaXZhdGUgQWNvdXN0aWNFY2hvQ2FuY2Vs
ZXIgYWVjID0gbnVsbDsKLSAgcHJpdmF0ZSBOb2lzZVN1cHByZXNzb3IgbnMgPSBudWxsOwotCi0g
IC8vIEFmZmVjdHMgdGhlIGZpbmFsIHN0YXRlIGdpdmVuIHRvIHRoZSBzZXRFbmFibGVkKCkgbWV0
aG9kIG9uIGVhY2ggZWZmZWN0LgotICAvLyBUaGUgZGVmYXVsdCBzdGF0ZSBpcyBzZXQgdG8gImRp
c2FibGVkIiBidXQgZWFjaCBlZmZlY3QgY2FuIGFsc28gYmUgZW5hYmxlZAotICAvLyBieSBjYWxs
aW5nIHNldEFFQygpIGFuZCBzZXROUygpLgotICAvLyBUbyBlbmFibGUgYW4gZWZmZWN0LCBib3Ro
IHRoZSBzaG91bGRFbmFibGVYWFggbWVtYmVyIGFuZCB0aGUgc3RhdGljCi0gIC8vIGNhblVzZVhY
WCgpIG11c3QgYmUgdHJ1ZS4KLSAgcHJpdmF0ZSBib29sZWFuIHNob3VsZEVuYWJsZUFlYyA9IGZh
bHNlOwotICBwcml2YXRlIGJvb2xlYW4gc2hvdWxkRW5hYmxlTnMgPSBmYWxzZTsKLQotICAvLyBD
aGVja3MgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIEFjb3VzdGljIEVjaG8gQ2FuY2VsbGF0aW9u
IChBRUMpLgotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpbXBsZW1lbnRzIEFFQywg
ZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9D
YW5jZWxlclN1cHBvcnRlZCgpIHsKLSAgICAvLyBOb3RlOiB3ZSdyZSB1c2luZyBpc0Fjb3VzdGlj
RWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCkgaW5zdGVhZCBvZgotICAgIC8vIEFjb3VzdGlj
RWNob0NhbmNlbGVyLmlzQXZhaWxhYmxlKCkgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBnZXRFZmZl
Y3RzKCkKLSAgICAvLyBPUyBBUEkgY2FsbC4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5y
dW5uaW5nT25KZWxseUJlYW5PckhpZ2hlcigpICYmIGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJFZmZl
Y3RBdmFpbGFibGUoKTsKLSAgfQotCi0gIC8vIENoZWNrcyBpZiB0aGUgZGV2aWNlIGltcGxlbWVu
dHMgTm9pc2UgU3VwcHJlc3Npb24gKE5TKS4KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZp
Y2UgaW1wbGVtZW50cyBOUywgZmFsc2Ugb3RoZXJ3aXNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xl
YW4gaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSB7Ci0gICAgLy8gTm90ZTogd2UncmUgdXNp
bmcgaXNOb2lzZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKSBpbnN0ZWFkIG9mCi0gICAgLy8g
Tm9pc2VTdXBwcmVzc29yLmlzQXZhaWxhYmxlKCkgdG8gYXZvaWQgdGhlIGV4cGVuc2l2ZSBnZXRF
ZmZlY3RzKCkKLSAgICAvLyBPUyBBUEkgY2FsbC4KLSAgICByZXR1cm4gV2ViUnRjQXVkaW9VdGls
cy5ydW5uaW5nT25KZWxseUJlYW5PckhpZ2hlcigpICYmIGlzTm9pc2VTdXBwcmVzc29yRWZmZWN0
QXZhaWxhYmxlKCk7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBpcyBi
bGFja2xpc3RlZCBmb3IgSFcgQUVDIHVzYWdlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNB
Y291c3RpY0VjaG9DYW5jZWxlckJsYWNrbGlzdGVkKCkgewotICAgIExpc3Q8U3RyaW5nPiBibGFj
a0xpc3RlZE1vZGVscyA9IFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0QmxhY2tMaXN0ZWRNb2RlbHNGb3JB
ZWNVc2FnZSgpOwotICAgIGJvb2xlYW4gaXNCbGFja2xpc3RlZCA9IGJsYWNrTGlzdGVkTW9kZWxz
LmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgICBpZiAoaXNCbGFja2xpc3RlZCkgewotICAgICAg
TG9nZ2luZy53KFRBRywgQnVpbGQuTU9ERUwgKyAiIGlzIGJsYWNrbGlzdGVkIGZvciBIVyBBRUMg
dXNhZ2UhIik7Ci0gICAgfQotICAgIHJldHVybiBpc0JsYWNrbGlzdGVkOwotICB9Ci0KLSAgLy8g
UmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2tsaXN0ZWQgZm9yIEhXIE5TIHVzYWdl
LgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JCbGFja2xpc3RlZCgp
IHsKLSAgICBMaXN0PFN0cmluZz4gYmxhY2tMaXN0ZWRNb2RlbHMgPSBXZWJSdGNBdWRpb1V0aWxz
LmdldEJsYWNrTGlzdGVkTW9kZWxzRm9yTnNVc2FnZSgpOwotICAgIGJvb2xlYW4gaXNCbGFja2xp
c3RlZCA9IGJsYWNrTGlzdGVkTW9kZWxzLmNvbnRhaW5zKEJ1aWxkLk1PREVMKTsKLSAgICBpZiAo
aXNCbGFja2xpc3RlZCkgewotICAgICAgTG9nZ2luZy53KFRBRywgQnVpbGQuTU9ERUwgKyAiIGlz
IGJsYWNrbGlzdGVkIGZvciBIVyBOUyB1c2FnZSEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlzQmxh
Y2tsaXN0ZWQ7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIEFFQyBz
aG91bGQgYmUgZXhjbHVkZWQgYmFzZWQgb24gaXRzIFVVSUQuCi0gIC8vIEF1ZGlvRWZmZWN0LnF1
ZXJ5RWZmZWN0cygpIGNhbiB0aHJvdyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24uCi0gIEBUYXJnZXRB
cGkoMTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5jZWxlckV4
Y2x1ZGVkQnlVVUlEKCkgewotICAgIGZvciAoRGVzY3JpcHRvciBkIDogZ2V0QXZhaWxhYmxlRWZm
ZWN0cygpKSB7Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQ
RV9BRUMpCi0gICAgICAgICAgJiYgZC51dWlkLmVxdWFscyhBT1NQX0FDT1VTVElDX0VDSE9fQ0FO
Q0VMRVIpKSB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBsYXRmb3JtIE5TIHNo
b3VsZCBiZSBleGNsdWRlZCBiYXNlZCBvbiBpdHMgVVVJRC4KLSAgLy8gQXVkaW9FZmZlY3QucXVl
cnlFZmZlY3RzKCkgY2FuIHRocm93IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbi4KLSAgQFRhcmdldEFw
aSgxOCkKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc05vaXNlU3VwcHJlc3NvckV4Y2x1ZGVk
QnlVVUlEKCkgewotICAgIGZvciAoRGVzY3JpcHRvciBkIDogZ2V0QXZhaWxhYmxlRWZmZWN0cygp
KSB7Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9OUykg
JiYgZC51dWlkLmVxdWFscyhBT1NQX05PSVNFX1NVUFBSRVNTT1IpKSB7Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGRldmljZSBzdXBwb3J0cyBBY291c3RpYyBFY2hvIENhbmNlbGxh
dGlvbiAoQUVDKS4KLSAgQFRhcmdldEFwaSgxOCkKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBp
c0Fjb3VzdGljRWNob0NhbmNlbGVyRWZmZWN0QXZhaWxhYmxlKCkgewotICAgIHJldHVybiBpc0Vm
ZmVjdFR5cGVBdmFpbGFibGUoQXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDKTsKLSAgfQotCi0g
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIE5vaXNlIFN1cHByZXNzaW9u
IChOUykuCi0gIEBUYXJnZXRBcGkoMTgpCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNOb2lz
ZVN1cHByZXNzb3JFZmZlY3RBdmFpbGFibGUoKSB7Ci0gICAgcmV0dXJuIGlzRWZmZWN0VHlwZUF2
YWlsYWJsZShBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQRV9OUyk7Ci0gIH0KLQotICAvLyBSZXR1cm5z
IHRydWUgaWYgYWxsIGNvbmRpdGlvbnMgZm9yIHN1cHBvcnRpbmcgdGhlIEhXIEFFQyBhcmUgZnVs
ZmlsbGVkLgotICAvLyBJdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBlbmFibGUgdGhlIEhXIEFF
QyBpZiB0aGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4g
Y2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXIoKSB7Ci0gICAgYm9vbGVhbiBjYW5Vc2VBY291c3Rp
Y0VjaG9DYW5jZWxlciA9IGlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKQotICAgICAg
ICAmJiAhV2ViUnRjQXVkaW9VdGlscy51c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVy
KCkKLSAgICAgICAgJiYgIWlzQWNvdXN0aWNFY2hvQ2FuY2VsZXJCbGFja2xpc3RlZCgpICYmICFp
c0Fjb3VzdGljRWNob0NhbmNlbGVyRXhjbHVkZWRCeVVVSUQoKTsKLSAgICBMb2dnaW5nLmQoVEFH
LCAiY2FuVXNlQWNvdXN0aWNFY2hvQ2FuY2VsZXI6ICIgKyBjYW5Vc2VBY291c3RpY0VjaG9DYW5j
ZWxlcik7Ci0gICAgcmV0dXJuIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyB0cnVlIGlmIGFsbCBjb25kaXRpb25zIGZvciBzdXBwb3J0aW5nIHRoZSBIVyBO
UyBhcmUgZnVsZmlsbGVkLgotICAvLyBJdCB3aWxsIG5vdCBiZSBwb3NzaWJsZSB0byBlbmFibGUg
dGhlIEhXIE5TIGlmIHRoaXMgbWV0aG9kIHJldHVybnMgZmFsc2UuCi0gIHB1YmxpYyBzdGF0aWMg
Ym9vbGVhbiBjYW5Vc2VOb2lzZVN1cHByZXNzb3IoKSB7Ci0gICAgYm9vbGVhbiBjYW5Vc2VOb2lz
ZVN1cHByZXNzb3IgPSBpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpCi0gICAgICAgICYmICFX
ZWJSdGNBdWRpb1V0aWxzLnVzZVdlYlJ0Y0Jhc2VkTm9pc2VTdXBwcmVzc29yKCkgJiYgIWlzTm9p
c2VTdXBwcmVzc29yQmxhY2tsaXN0ZWQoKQotICAgICAgICAmJiAhaXNOb2lzZVN1cHByZXNzb3JF
eGNsdWRlZEJ5VVVJRCgpOwotICAgIExvZ2dpbmcuZChUQUcsICJjYW5Vc2VOb2lzZVN1cHByZXNz
b3I6ICIgKyBjYW5Vc2VOb2lzZVN1cHByZXNzb3IpOwotICAgIHJldHVybiBjYW5Vc2VOb2lzZVN1
cHByZXNzb3I7Ci0gIH0KLQotICBzdGF0aWMgV2ViUnRjQXVkaW9FZmZlY3RzIGNyZWF0ZSgpIHsK
LSAgICAvLyBSZXR1cm4gbnVsbCBpZiBWb0lQIGVmZmVjdHMgKEFFQywgQUdDIGFuZCBOUykgYXJl
IG5vdCBzdXBwb3J0ZWQuCi0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5
QmVhbk9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJBUEkgbGV2ZWwgMTYgb3Ig
aGlnaGVyIGlzIHJlcXVpcmVkISIpOwotICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIHJl
dHVybiBuZXcgV2ViUnRjQXVkaW9FZmZlY3RzKCk7Ci0gIH0KLQotICBwcml2YXRlIFdlYlJ0Y0F1
ZGlvRWZmZWN0cygpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRpb1V0
aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGVu
YWJsZSBvciBkaXNhYmxlIHRoZSBwbGF0Zm9ybSBBRUMuIEl0IG1vZGlmaWVzCi0gIC8vIHxzaG91
bGRFbmFibGVBZWN8IHdoaWNoIGlzIHVzZWQgaW4gZW5hYmxlKCkgd2hlcmUgdGhlIGFjdHVhbCBz
dGF0ZQotICAvLyBvZiB0aGUgQUVDIGVmZmVjdCBpcyBtb2RpZmllZC4gUmV0dXJucyB0cnVlIGlm
IEhXIEFFQyBpcyBzdXBwb3J0ZWQgYW5kCi0gIC8vIGZhbHNlIG90aGVyd2lzZS4KLSAgcHVibGlj
IGJvb2xlYW4gc2V0QUVDKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInNl
dEFFQygiICsgZW5hYmxlICsgIikiKTsKLSAgICBpZiAoIWNhblVzZUFjb3VzdGljRWNob0NhbmNl
bGVyKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJQbGF0Zm9ybSBBRUMgaXMgbm90IHN1cHBv
cnRlZCIpOwotICAgICAgc2hvdWxkRW5hYmxlQWVjID0gZmFsc2U7Ci0gICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIGlmIChhZWMgIT0gbnVsbCAmJiAoZW5hYmxlICE9IHNob3VsZEVuYWJs
ZUFlYykpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJQbGF0Zm9ybSBBRUMgc3RhdGUgY2FuJ3Qg
YmUgbW9kaWZpZWQgd2hpbGUgcmVjb3JkaW5nIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHNob3VsZEVuYWJsZUFlYyA9IGVuYWJsZTsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHBsYXRmb3Jt
IE5TLiBJdCBtb2RpZmllcwotICAvLyB8c2hvdWxkRW5hYmxlTnN8IHdoaWNoIGlzIHVzZWQgaW4g
ZW5hYmxlKCkgd2hlcmUgdGhlIGFjdHVhbCBzdGF0ZQotICAvLyBvZiB0aGUgTlMgZWZmZWN0IGlz
IG1vZGlmaWVkLiBSZXR1cm5zIHRydWUgaWYgSFcgTlMgaXMgc3VwcG9ydGVkIGFuZAotICAvLyBm
YWxzZSBvdGhlcndpc2UuCi0gIHB1YmxpYyBib29sZWFuIHNldE5TKGJvb2xlYW4gZW5hYmxlKSB7
Ci0gICAgTG9nZ2luZy5kKFRBRywgInNldE5TKCIgKyBlbmFibGUgKyAiKSIpOwotICAgIGlmICgh
Y2FuVXNlTm9pc2VTdXBwcmVzc29yKCkpIHsKLSAgICAgIExvZ2dpbmcudyhUQUcsICJQbGF0Zm9y
bSBOUyBpcyBub3Qgc3VwcG9ydGVkIik7Ci0gICAgICBzaG91bGRFbmFibGVOcyA9IGZhbHNlOwot
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAobnMgIT0gbnVsbCAmJiAoZW5hYmxl
ICE9IHNob3VsZEVuYWJsZU5zKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlBsYXRmb3JtIE5T
IHN0YXRlIGNhbid0IGJlIG1vZGlmaWVkIHdoaWxlIHJlY29yZGluZyIpOwotICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBzaG91bGRFbmFibGVOcyA9IGVuYWJsZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLSAgfQotCi0gIHB1YmxpYyB2b2lkIGVuYWJsZShpbnQgYXVkaW9TZXNzaW9uKSB7Ci0g
ICAgTG9nZ2luZy5kKFRBRywgImVuYWJsZShhdWRpb1Nlc3Npb249IiArIGF1ZGlvU2Vzc2lvbiAr
ICIpIik7Ci0gICAgYXNzZXJ0VHJ1ZShhZWMgPT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShucyA9
PSBudWxsKTsKLQotICAgIC8vIEFkZCBsb2dnaW5nIG9mIHN1cHBvcnRlZCBlZmZlY3RzIGJ1dCBm
aWx0ZXIgb3V0ICJWb0lQIGVmZmVjdHMiLCBpLmUuLAotICAgIC8vIEFFQywgQUVDIGFuZCBOUy4K
LSAgICBmb3IgKERlc2NyaXB0b3IgZCA6IEF1ZGlvRWZmZWN0LnF1ZXJ5RWZmZWN0cygpKSB7Ci0g
ICAgICBpZiAoZWZmZWN0VHlwZUlzVm9JUChkLnR5cGUpIHx8IERFQlVHKSB7Ci0gICAgICAgIExv
Z2dpbmcuZChUQUcsICJuYW1lOiAiICsgZC5uYW1lICsgIiwgIgotICAgICAgICAgICAgICAgICsg
Im1vZGU6ICIgKyBkLmNvbm5lY3RNb2RlICsgIiwgIgotICAgICAgICAgICAgICAgICsgImltcGxl
bWVudG9yOiAiICsgZC5pbXBsZW1lbnRvciArICIsICIKLSAgICAgICAgICAgICAgICArICJVVUlE
OiAiICsgZC51dWlkKTsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoaXNBY291c3RpY0VjaG9D
YW5jZWxlclN1cHBvcnRlZCgpKSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gQWNvdXN0aWNFY2hvQ2Fu
Y2VsZXIgYW5kIGF0dGFjaCBpdCB0byB0aGUgQXVkaW9SZWNvcmQgb24KLSAgICAgIC8vIHRoZSBz
cGVjaWZpZWQgYXVkaW8gc2Vzc2lvbi4KLSAgICAgIGFlYyA9IEFjb3VzdGljRWNob0NhbmNlbGVy
LmNyZWF0ZShhdWRpb1Nlc3Npb24pOwotICAgICAgaWYgKGFlYyAhPSBudWxsKSB7Ci0gICAgICAg
IGJvb2xlYW4gZW5hYmxlZCA9IGFlYy5nZXRFbmFibGVkKCk7Ci0gICAgICAgIGJvb2xlYW4gZW5h
YmxlID0gc2hvdWxkRW5hYmxlQWVjICYmIGNhblVzZUFjb3VzdGljRWNob0NhbmNlbGVyKCk7Ci0g
ICAgICAgIGlmIChhZWMuc2V0RW5hYmxlZChlbmFibGUpICE9IEF1ZGlvRWZmZWN0LlNVQ0NFU1Mp
IHsKLSAgICAgICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIHNldCB0aGUgQWNvdXN0aWNF
Y2hvQ2FuY2VsZXIgc3RhdGUiKTsKLSAgICAgICAgfQotICAgICAgICBMb2dnaW5nLmQoVEFHLCAi
QWNvdXN0aWNFY2hvQ2FuY2VsZXI6IHdhcyAiICsgKGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAiZGlz
YWJsZWQiKQotICAgICAgICAgICAgICAgICsgIiwgZW5hYmxlOiAiICsgZW5hYmxlICsgIiwgaXMg
bm93OiAiCi0gICAgICAgICAgICAgICAgKyAoYWVjLmdldEVuYWJsZWQoKSA/ICJlbmFibGVkIiA6
ICJkaXNhYmxlZCIpKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJG
YWlsZWQgdG8gY3JlYXRlIHRoZSBBY291c3RpY0VjaG9DYW5jZWxlciBpbnN0YW5jZSIpOwotICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChpc05vaXNlU3VwcHJlc3NvclN1cHBvcnRlZCgpKSB7Ci0g
ICAgICAvLyBDcmVhdGUgYW4gTm9pc2VTdXBwcmVzc29yIGFuZCBhdHRhY2ggaXQgdG8gdGhlIEF1
ZGlvUmVjb3JkIG9uIHRoZQotICAgICAgLy8gc3BlY2lmaWVkIGF1ZGlvIHNlc3Npb24uCi0gICAg
ICBucyA9IE5vaXNlU3VwcHJlc3Nvci5jcmVhdGUoYXVkaW9TZXNzaW9uKTsKLSAgICAgIGlmIChu
cyAhPSBudWxsKSB7Ci0gICAgICAgIGJvb2xlYW4gZW5hYmxlZCA9IG5zLmdldEVuYWJsZWQoKTsK
LSAgICAgICAgYm9vbGVhbiBlbmFibGUgPSBzaG91bGRFbmFibGVOcyAmJiBjYW5Vc2VOb2lzZVN1
cHByZXNzb3IoKTsKLSAgICAgICAgaWYgKG5zLnNldEVuYWJsZWQoZW5hYmxlKSAhPSBBdWRpb0Vm
ZmVjdC5TVUNDRVNTKSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkZhaWxlZCB0byBzZXQg
dGhlIE5vaXNlU3VwcHJlc3NvciBzdGF0ZSIpOwotICAgICAgICB9Ci0gICAgICAgIExvZ2dpbmcu
ZChUQUcsICJOb2lzZVN1cHByZXNzb3I6IHdhcyAiICsgKGVuYWJsZWQgPyAiZW5hYmxlZCIgOiAi
ZGlzYWJsZWQiKSArICIsIGVuYWJsZTogIgotICAgICAgICAgICAgICAgICsgZW5hYmxlICsgIiwg
aXMgbm93OiAiICsgKG5zLmdldEVuYWJsZWQoKSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpKTsK
LSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIExvZ2dpbmcuZShUQUcsICJGYWlsZWQgdG8gY3JlYXRl
IHRoZSBOb2lzZVN1cHByZXNzb3IgaW5zdGFuY2UiKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQot
ICAvLyBSZWxlYXNlcyBhbGwgbmF0aXZlIGF1ZGlvIGVmZmVjdCByZXNvdXJjZXMuIEl0IGlzIGEg
Z29vZCBwcmFjdGljZSB0bwotICAvLyByZWxlYXNlIHRoZSBlZmZlY3QgZW5naW5lIHdoZW4gbm90
IGluIHVzZSBhcyBjb250cm9sIGNhbiBiZSByZXR1cm5lZAotICAvLyB0byBvdGhlciBhcHBsaWNh
dGlvbnMgb3IgdGhlIG5hdGl2ZSByZXNvdXJjZXMgcmVsZWFzZWQuCi0gIHB1YmxpYyB2b2lkIHJl
bGVhc2UoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInJlbGVhc2UiKTsKLSAgICBpZiAoYWVjICE9
IG51bGwpIHsKLSAgICAgIGFlYy5yZWxlYXNlKCk7Ci0gICAgICBhZWMgPSBudWxsOwotICAgIH0K
LSAgICBpZiAobnMgIT0gbnVsbCkgewotICAgICAgbnMucmVsZWFzZSgpOwotICAgICAgbnMgPSBu
dWxsOwotICAgIH0KLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBmb3IgZWZmZWN0IHR5cGVzIGlu
IHx0eXBlfCB0aGF0IGFyZSBvZiAiVm9JUCIgdHlwZXM6Ci0gIC8vIEFjb3VzdGljIEVjaG8gQ2Fu
Y2VsZXIgKEFFQykgb3IgQXV0b21hdGljIEdhaW4gQ29udHJvbCAoQUdDKSBvcgotICAvLyBOb2lz
ZSBTdXBwcmVzc29yIChOUykuIE5vdGUgdGhhdCwgYW4gZXh0cmEgY2hlY2sgZm9yIHN1cHBvcnQg
aXMgbmVlZGVkCi0gIC8vIGluIGVhY2ggY29tcGFyaXNvbiBzaW5jZSBzb21lIGRldmljZXMgaW5j
bHVkZXMgZWZmZWN0cyBpbiB0aGUKLSAgLy8gQXVkaW9FZmZlY3QuRGVzY3JpcHRvciBhcnJheSB0
aGF0IGFyZSBhY3R1YWxseSBub3QgYXZhaWxhYmxlIG9uIHRoZSBkZXZpY2UuCi0gIC8vIEFzIGFu
IGV4YW1wbGU6IFNhbXN1bmcgR2FsYXh5IFM2IGluY2x1ZGVzIGFuIEFHQyBpbiB0aGUgZGVzY3Jp
cHRvciBidXQKLSAgLy8gQXV0b21hdGljR2FpbkNvbnRyb2wuaXNBdmFpbGFibGUoKSByZXR1cm5z
IGZhbHNlLgotICBAVGFyZ2V0QXBpKDE4KQotICBwcml2YXRlIGJvb2xlYW4gZWZmZWN0VHlwZUlz
Vm9JUChVVUlEIHR5cGUpIHsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uSmVs
bHlCZWFuTVIyT3JIaWdoZXIoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAo
QXVkaW9FZmZlY3QuRUZGRUNUX1RZUEVfQUVDLmVxdWFscyh0eXBlKSAmJiBpc0Fjb3VzdGljRWNo
b0NhbmNlbGVyU3VwcG9ydGVkKCkpCi0gICAgICAgIHx8IChBdWRpb0VmZmVjdC5FRkZFQ1RfVFlQ
RV9OUy5lcXVhbHModHlwZSkgJiYgaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSk7Ci0gIH0K
LQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhbiBh
c3NlcnRpb24gaGFzIGZhaWxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBhc3NlcnRUcnVlKGJv
b2xlYW4gY29uZGl0aW9uKSB7Ci0gICAgaWYgKCFjb25kaXRpb24pIHsKLSAgICAgIHRocm93IG5l
dyBBc3NlcnRpb25FcnJvcigiRXhwZWN0ZWQgY29uZGl0aW9uIHRvIGJlIHRydWUiKTsKLSAgICB9
Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRoZSBjYWNoZWQgY29weSBvZiB0aGUgYXVkaW8gZWZmZWN0
cyBhcnJheSwgaWYgYXZhaWxhYmxlLCBvcgotICAvLyBxdWVyaWVzIHRoZSBvcGVyYXRpbmcgc3lz
dGVtIGZvciB0aGUgbGlzdCBvZiBlZmZlY3RzLgotICBwcml2YXRlIHN0YXRpYyBEZXNjcmlwdG9y
W10gZ2V0QXZhaWxhYmxlRWZmZWN0cygpIHsKLSAgICBpZiAoY2FjaGVkRWZmZWN0cyAhPSBudWxs
KSB7Ci0gICAgICByZXR1cm4gY2FjaGVkRWZmZWN0czsKLSAgICB9Ci0gICAgLy8gVGhlIGNhY2hp
bmcgaXMgYmVzdCBlZmZvcnQgb25seSAtIGlmIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBmcm9tIHNl
dmVyYWwKLSAgICAvLyB0aHJlYWRzIGluIHBhcmFsbGVsLCB0aGV5IG1heSBlbmQgdXAgZG9pbmcg
dGhlIHVuZGVybHlpbmcgT1MgY2FsbAotICAgIC8vIG11bHRpcGxlIHRpbWVzLiBJdCdzIG5vcm1h
bGx5IG9ubHkgY2FsbGVkIG9uIG9uZSB0aHJlYWQgc28gdGhlcmUncyBubwotICAgIC8vIHJlYWwg
bmVlZCB0byBvcHRpbWl6ZSBmb3IgdGhlIG11bHRpcGxlIHRocmVhZHMgY2FzZS4KLSAgICBjYWNo
ZWRFZmZlY3RzID0gQXVkaW9FZmZlY3QucXVlcnlFZmZlY3RzKCk7Ci0gICAgcmV0dXJuIGNhY2hl
ZEVmZmVjdHM7Ci0gIH0KLQotICAvLyBSZXR1cm5zIHRydWUgaWYgYW4gZWZmZWN0IG9mIHRoZSBz
cGVjaWZpZWQgdHlwZSBpcyBhdmFpbGFibGUuIEZ1bmN0aW9uYWxseQotICAvLyBlcXVpdmFsZW50
IHRvIChOb2lzZVN1cHByZXNzb3J8QXV0b21hdGljR2FpbkNvbnRyb2x8Li4uKS5pc0F2YWlsYWJs
ZSgpLCBidXQKLSAgLy8gZmFzdGVyIGFzIGl0IGF2b2lkcyB0aGUgZXhwZW5zaXZlIE9TIGNhbGwg
dG8gZW51bWVyYXRlIGVmZmVjdHMuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNFZmZlY3RU
eXBlQXZhaWxhYmxlKFVVSUQgZWZmZWN0VHlwZSkgewotICAgIERlc2NyaXB0b3JbXSBlZmZlY3Rz
ID0gZ2V0QXZhaWxhYmxlRWZmZWN0cygpOwotICAgIGlmIChlZmZlY3RzID09IG51bGwpIHsKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgZm9yIChEZXNjcmlwdG9yIGQgOiBlZmZlY3Rz
KSB7Ci0gICAgICBpZiAoZC50eXBlLmVxdWFscyhlZmZlY3RUeXBlKSkgewotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVk
aW9NYW5hZ2VyLmphdmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcv
d2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlci5qYXZhCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2Vi
UnRjQXVkaW9NYW5hZ2VyLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNDcgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsKLQot
aW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuYW5ub3RhdGlvbi5U
YXJnZXRBcGk7Ci1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9p
ZC5jb250ZW50LnBtLlBhY2thZ2VNYW5hZ2VyOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuQXVkaW9G
b3JtYXQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXI7Ci1pbXBvcnQgYW5kcm9p
ZC5tZWRpYS5BdWRpb1JlY29yZDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvVHJhY2s7Ci1p
bXBvcnQgYW5kcm9pZC5vcy5CdWlsZDsKLQotaW1wb3J0IGphdmEudXRpbC5UaW1lcjsKLWltcG9y
dCBqYXZhLnV0aWwuVGltZXJUYXNrOwotCi0vLyBXZWJSdGNBdWRpb01hbmFnZXIgaGFuZGxlcyB0
YXNrcyB0aGF0IHVzZXMgYW5kcm9pZC5tZWRpYS5BdWRpb01hbmFnZXIuCi0vLyBBdCBjb25zdHJ1
Y3Rpb24sIHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCkgaXMgY2FsbGVkIGFuZCBpdCByZXRyaWV2ZXMK
LS8vIGZ1bmRhbWVudGFsIGF1ZGlvIHBhcmFtZXRlcnMgbGlrZSBuYXRpdmUgc2FtcGxlIHJhdGUg
YW5kIG51bWJlciBvZiBjaGFubmVscy4KLS8vIFRoZSByZXN1bHQgaXMgdGhlbiBwcm92aWRlZCB0
byB0aGUgY2FsbGVyIGJ5IG5hdGl2ZUNhY2hlQXVkaW9QYXJhbWV0ZXJzKCkuCi0vLyBJdCBpcyBh
bHNvIHBvc3NpYmxlIHRvIGNhbGwgaW5pdCgpIHRvIHNldCB1cCB0aGUgYXVkaW8gZW52aXJvbm1l
bnQgZm9yIGJlc3QKLS8vIHBvc3NpYmxlICJWb0lQIHBlcmZvcm1hbmNlIi4gQWxsIHNldHRpbmdz
IGRvbmUgaW4gaW5pdCgpIGFyZSByZXZlcnRlZCBieQotLy8gZGlzcG9zZSgpLiBUaGlzIGNsYXNz
IGNhbiBhbHNvIGJlIHVzZWQgd2l0aG91dCBjYWxsaW5nIGluaXQoKSBpZiB0aGUgdXNlcgotLy8g
cHJlZmVycyB0byBzZXQgdXAgdGhlIGF1ZGlvIGVudmlyb25tZW50IHNlcGFyYXRlbHkuIEhvd2V2
ZXIsIGl0IGlzCi0vLyByZWNvbW1lbmRlZCB0byBhbHdheXMgdXNlIEF1ZGlvTWFuYWdlci5NT0RF
X0lOX0NPTU1VTklDQVRJT04uCi1wdWJsaWMgY2xhc3MgV2ViUnRjQXVkaW9NYW5hZ2VyIHsKLSAg
cHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiV2ViUnRjQXVkaW9NYW5hZ2VyIjsKLQotICBwcml2
YXRlIHN0YXRpYyBib29sZWFuIGJsYWNrbGlzdERldmljZUZvck9wZW5TTEVTVXNhZ2UgPSBmYWxz
ZTsKLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBibGFja2xpc3REZXZpY2VGb3JPcGVuU0xFU1Vz
YWdlSXNPdmVycmlkZGVuID0gZmFsc2U7Ci0KLSAgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBvdmVy
cmlkZSB0aGUgZGVhdWx0IGxpc3Qgb2YgYmxhY2tsaXN0ZWQgZGV2aWNlcwotICAvLyBzcGVjaWZp
ZWQgaW4gV2ViUnRjQXVkaW9VdGlscy5CTEFDS0xJU1RFRF9PUEVOX1NMX0VTX01PREVMUy4KLSAg
Ly8gQWxsb3dzIGFuIGFwcCB0byB0YWtlIGNvbnRyb2wgb3ZlciB3aGljaCBkZXZpY2VzIHRvIGV4
bHVkZSBmcm9tIHVzaW5nCi0gIC8vIHRoZSBPcGVuU0wgRVMgYXVkaW8gb3V0cHV0IHBhdGgKLSAg
cHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgdm9pZCBzZXRCbGFja2xpc3REZXZpY2VGb3JPcGVu
U0xFU1VzYWdlKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNM
RVNVc2FnZUlzT3ZlcnJpZGRlbiA9IHRydWU7Ci0gICAgYmxhY2tsaXN0RGV2aWNlRm9yT3BlblNM
RVNVc2FnZSA9IGVuYWJsZTsKLSAgfQotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0YSBmb3JtYXQg
aXMgUENNIDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRl
ZCBieSBhbGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFNfUEVSX1NB
TVBMRSA9IDE2OwotCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX0ZSQU1FX1BF
Ul9CVUZGRVIgPSAyNTY7Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogYWRkIHN0ZXJlbyBzdXBwb3J0
IGZvciBwbGF5b3V0LgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQ0hBTk5FTFMgPSAxOwot
Ci0gIC8vIExpc3Qgb2YgcG9zc2libGUgYXVkaW8gbW9kZXMuCi0gIHByaXZhdGUgc3RhdGljIGZp
bmFsIFN0cmluZ1tdIEFVRElPX01PREVTID0gbmV3IFN0cmluZ1tdIHsKLSAgICAgICJNT0RFX05P
Uk1BTCIsICJNT0RFX1JJTkdUT05FIiwgIk1PREVfSU5fQ0FMTCIsICJNT0RFX0lOX0NPTU1VTklD
QVRJT04iLAotICB9OwotCi0gIC8vIFByaXZhdGUgdXRpbGl0eSBjbGFzcyB0aGF0IHBlcmlvZGlj
YWxseSBjaGVja3MgYW5kIGxvZ3MgdGhlIHZvbHVtZSBsZXZlbAotICAvLyBvZiB0aGUgYXVkaW8g
c3RyZWFtIHRoYXQgaXMgY3VycmVudGx5IGNvbnRyb2xsZWQgYnkgdGhlIHZvbHVtZSBjb250cm9s
LgotICAvLyBBIHRpbWVyIHRyaWdnZXJzIGxvZ3Mgb25jZSBldmVyeSAxMCBzZWNvbmRzIGFuZCB0
aGUgdGltZXIncyBhc3NvY2lhdGVkCi0gIC8vIHRocmVhZCBpcyBuYW1lZCAiV2ViUnRjVm9sdW1l
TGV2ZWxMb2dnZXJUaHJlYWQiLgotICBwcml2YXRlIHN0YXRpYyBjbGFzcyBWb2x1bWVMb2dnZXIg
ewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUSFJFQURfTkFNRSA9ICJXZWJSdGNW
b2x1bWVMZXZlbExvZ2dlclRocmVhZCI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJ
TUVSX1BFUklPRF9JTl9TRUNPTkRTID0gMTA7Ci0KLSAgICBwcml2YXRlIGZpbmFsIEF1ZGlvTWFu
YWdlciBhdWRpb01hbmFnZXI7Ci0gICAgcHJpdmF0ZSBUaW1lciB0aW1lcjsKLQotICAgIHB1Ymxp
YyBWb2x1bWVMb2dnZXIoQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcikgewotICAgICAgdGhpcy5h
dWRpb01hbmFnZXIgPSBhdWRpb01hbmFnZXI7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3Rh
cnQoKSB7Ci0gICAgICB0aW1lciA9IG5ldyBUaW1lcihUSFJFQURfTkFNRSk7Ci0gICAgICB0aW1l
ci5zY2hlZHVsZShuZXcgTG9nVm9sdW1lVGFzayhhdWRpb01hbmFnZXIuZ2V0U3RyZWFtTWF4Vm9s
dW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fUklORyksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
YXVkaW9NYW5hZ2VyLmdldFN0cmVhbU1heFZvbHVtZShBdWRpb01hbmFnZXIuU1RSRUFNX1ZPSUNF
X0NBTEwpKSwKLSAgICAgICAgICAwLCBUSU1FUl9QRVJJT0RfSU5fU0VDT05EUyAqIDEwMDApOwot
ICAgIH0KLQotICAgIHByaXZhdGUgY2xhc3MgTG9nVm9sdW1lVGFzayBleHRlbmRzIFRpbWVyVGFz
ayB7Ci0gICAgICBwcml2YXRlIGZpbmFsIGludCBtYXhSaW5nVm9sdW1lOwotICAgICAgcHJpdmF0
ZSBmaW5hbCBpbnQgbWF4Vm9pY2VDYWxsVm9sdW1lOwotCi0gICAgICBMb2dWb2x1bWVUYXNrKGlu
dCBtYXhSaW5nVm9sdW1lLCBpbnQgbWF4Vm9pY2VDYWxsVm9sdW1lKSB7Ci0gICAgICAgIHRoaXMu
bWF4UmluZ1ZvbHVtZSA9IG1heFJpbmdWb2x1bWU7Ci0gICAgICAgIHRoaXMubWF4Vm9pY2VDYWxs
Vm9sdW1lID0gbWF4Vm9pY2VDYWxsVm9sdW1lOwotICAgICAgfQotCi0gICAgICBwdWJsaWMgdm9p
ZCBydW4oKSB7Ci0gICAgICAgIGZpbmFsIGludCBtb2RlID0gYXVkaW9NYW5hZ2VyLmdldE1vZGUo
KTsKLSAgICAgICAgaWYgKG1vZGUgPT0gQXVkaW9NYW5hZ2VyLk1PREVfUklOR1RPTkUpIHsKLSAg
ICAgICAgICBMb2dnaW5nLmQoVEFHLCAiU1RSRUFNX1JJTkcgc3RyZWFtIHZvbHVtZTogIgotICAg
ICAgICAgICAgICAgICAgKyBhdWRpb01hbmFnZXIuZ2V0U3RyZWFtVm9sdW1lKEF1ZGlvTWFuYWdl
ci5TVFJFQU1fUklORykgKyAiIChtYXg9IgotICAgICAgICAgICAgICAgICAgKyBtYXhSaW5nVm9s
dW1lICsgIikiKTsKLSAgICAgICAgfSBlbHNlIGlmIChtb2RlID09IEF1ZGlvTWFuYWdlci5NT0RF
X0lOX0NPTU1VTklDQVRJT04pIHsKLSAgICAgICAgICBMb2dnaW5nLmQoVEFHLCAiVk9JQ0VfQ0FM
TCBzdHJlYW0gdm9sdW1lOiAiCi0gICAgICAgICAgICAgICAgICArIGF1ZGlvTWFuYWdlci5nZXRT
dHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxMKSArICIgKG1heD0iCi0g
ICAgICAgICAgICAgICAgICArIG1heFZvaWNlQ2FsbFZvbHVtZSArICIpIik7Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgc3RvcCgpIHsKLSAgICAgIGlmICh0
aW1lciAhPSBudWxsKSB7Ci0gICAgICAgIHRpbWVyLmNhbmNlbCgpOwotICAgICAgICB0aW1lciA9
IG51bGw7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBmaW5hbCBsb25nIG5hdGl2
ZUF1ZGlvTWFuYWdlcjsKLSAgcHJpdmF0ZSBmaW5hbCBDb250ZXh0IGNvbnRleHQ7Ci0gIHByaXZh
dGUgZmluYWwgQXVkaW9NYW5hZ2VyIGF1ZGlvTWFuYWdlcjsKLQotICBwcml2YXRlIGJvb2xlYW4g
aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgcHJpdmF0ZSBpbnQgbmF0aXZlU2FtcGxlUmF0ZTsKLSAg
cHJpdmF0ZSBpbnQgbmF0aXZlQ2hhbm5lbHM7Ci0KLSAgcHJpdmF0ZSBib29sZWFuIGhhcmR3YXJl
QUVDOwotICBwcml2YXRlIGJvb2xlYW4gaGFyZHdhcmVBR0M7Ci0gIHByaXZhdGUgYm9vbGVhbiBo
YXJkd2FyZU5TOwotICBwcml2YXRlIGJvb2xlYW4gbG93TGF0ZW5jeU91dHB1dDsKLSAgcHJpdmF0
ZSBib29sZWFuIGxvd0xhdGVuY3lJbnB1dDsKLSAgcHJpdmF0ZSBib29sZWFuIHByb0F1ZGlvOwot
ICBwcml2YXRlIGludCBzYW1wbGVSYXRlOwotICBwcml2YXRlIGludCBjaGFubmVsczsKLSAgcHJp
dmF0ZSBpbnQgb3V0cHV0QnVmZmVyU2l6ZTsKLSAgcHJpdmF0ZSBpbnQgaW5wdXRCdWZmZXJTaXpl
OwotCi0gIHByaXZhdGUgZmluYWwgVm9sdW1lTG9nZ2VyIHZvbHVtZUxvZ2dlcjsKLQotICBXZWJS
dGNBdWRpb01hbmFnZXIoQ29udGV4dCBjb250ZXh0LCBsb25nIG5hdGl2ZUF1ZGlvTWFuYWdlcikg
ewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFk
SW5mbygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIHRoaXMubmF0aXZlQXVk
aW9NYW5hZ2VyID0gbmF0aXZlQXVkaW9NYW5hZ2VyOwotICAgIGF1ZGlvTWFuYWdlciA9IChBdWRp
b01hbmFnZXIpIGNvbnRleHQuZ2V0U3lzdGVtU2VydmljZShDb250ZXh0LkFVRElPX1NFUlZJQ0Up
OwotICAgIGlmIChERUJVRykgewotICAgICAgV2ViUnRjQXVkaW9VdGlscy5sb2dEZXZpY2VJbmZv
KFRBRyk7Ci0gICAgfQotICAgIHZvbHVtZUxvZ2dlciA9IG5ldyBWb2x1bWVMb2dnZXIoYXVkaW9N
YW5hZ2VyKTsKLSAgICBzdG9yZUF1ZGlvUGFyYW1ldGVycygpOwotICAgIG5hdGl2ZUNhY2hlQXVk
aW9QYXJhbWV0ZXJzKHNhbXBsZVJhdGUsIGNoYW5uZWxzLCBoYXJkd2FyZUFFQywgaGFyZHdhcmVB
R0MsIGhhcmR3YXJlTlMsCi0gICAgICAgIGxvd0xhdGVuY3lPdXRwdXQsIGxvd0xhdGVuY3lJbnB1
dCwgcHJvQXVkaW8sIG91dHB1dEJ1ZmZlclNpemUsIGlucHV0QnVmZmVyU2l6ZSwKLSAgICAgICAg
bmF0aXZlQXVkaW9NYW5hZ2VyKTsKLSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpbml0KCkgewot
ICAgIExvZ2dpbmcuZChUQUcsICJpbml0IiArIFdlYlJ0Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5m
bygpKTsKLSAgICBpZiAoaW5pdGlhbGl6ZWQpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICBMb2dnaW5nLmQoVEFHLCAiYXVkaW8gbW9kZSBpczogIiArIEFVRElPX01PREVTW2F1ZGlv
TWFuYWdlci5nZXRNb2RlKCldKTsKLSAgICBpbml0aWFsaXplZCA9IHRydWU7Ci0gICAgdm9sdW1l
TG9nZ2VyLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIHZvaWQg
ZGlzcG9zZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZGlzcG9zZSIgKyBXZWJSdGNBdWRpb1V0
aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICB2b2x1bWVMb2dnZXIuc3RvcCgpOwotICB9Ci0KLSAgcHJpdmF0ZSBi
b29sZWFuIGlzQ29tbXVuaWNhdGlvbk1vZGVFbmFibGVkKCkgewotICAgIHJldHVybiAoYXVkaW9N
YW5hZ2VyLmdldE1vZGUoKSA9PSBBdWRpb01hbmFnZXIuTU9ERV9JTl9DT01NVU5JQ0FUSU9OKTsK
LSAgfQotCi0gIHByaXZhdGUgYm9vbGVhbiBpc0RldmljZUJsYWNrbGlzdGVkRm9yT3BlblNMRVNV
c2FnZSgpIHsKLSAgICBib29sZWFuIGJsYWNrbGlzdGVkID0gYmxhY2tsaXN0RGV2aWNlRm9yT3Bl
blNMRVNVc2FnZUlzT3ZlcnJpZGRlbgotICAgICAgICA/IGJsYWNrbGlzdERldmljZUZvck9wZW5T
TEVTVXNhZ2UKLSAgICAgICAgOiBXZWJSdGNBdWRpb1V0aWxzLmRldmljZUlzQmxhY2tsaXN0ZWRG
b3JPcGVuU0xFU1VzYWdlKCk7Ci0gICAgaWYgKGJsYWNrbGlzdGVkKSB7Ci0gICAgICBMb2dnaW5n
LmUoVEFHLCBCdWlsZC5NT0RFTCArICIgaXMgYmxhY2tsaXN0ZWQgZm9yIE9wZW5TTCBFUyB1c2Fn
ZSEiKTsKLSAgICB9Ci0gICAgcmV0dXJuIGJsYWNrbGlzdGVkOwotICB9Ci0KLSAgcHJpdmF0ZSB2
b2lkIHN0b3JlQXVkaW9QYXJhbWV0ZXJzKCkgewotICAgIC8vIE9ubHkgbW9ubyBpcyBzdXBwb3J0
ZWQgY3VycmVudGx5IChpbiBib3RoIGRpcmVjdGlvbnMpLgotICAgIC8vIFRPRE8oaGVucmlrYSk6
IGFkZCBzdXBwb3J0IGZvciBzdGVyZW8gcGxheW91dC4KLSAgICBjaGFubmVscyA9IENIQU5ORUxT
OwotICAgIHNhbXBsZVJhdGUgPSBnZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKCk7Ci0gICAgaGFy
ZHdhcmVBRUMgPSBpc0Fjb3VzdGljRWNob0NhbmNlbGVyU3VwcG9ydGVkKCk7Ci0gICAgLy8gVE9E
TyhoZW5yaWthKTogdXNlIG9mIGhhcmR3YXJlIEFHQyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBD
dXJyZW50bHkKLSAgICAvLyBoYXJkY29kZWQgdG8gZmFsc2UuIFRvIGJlIHJlbW92ZWQuCi0gICAg
aGFyZHdhcmVBR0MgPSBmYWxzZTsKLSAgICBoYXJkd2FyZU5TID0gaXNOb2lzZVN1cHByZXNzb3JT
dXBwb3J0ZWQoKTsKLSAgICBsb3dMYXRlbmN5T3V0cHV0ID0gaXNMb3dMYXRlbmN5T3V0cHV0U3Vw
cG9ydGVkKCk7Ci0gICAgbG93TGF0ZW5jeUlucHV0ID0gaXNMb3dMYXRlbmN5SW5wdXRTdXBwb3J0
ZWQoKTsKLSAgICBwcm9BdWRpbyA9IGlzUHJvQXVkaW9TdXBwb3J0ZWQoKTsKLSAgICBvdXRwdXRC
dWZmZXJTaXplID0gbG93TGF0ZW5jeU91dHB1dCA/IGdldExvd0xhdGVuY3lPdXRwdXRGcmFtZXNQ
ZXJCdWZmZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0
TWluT3V0cHV0RnJhbWVTaXplKHNhbXBsZVJhdGUsIGNoYW5uZWxzKTsKLSAgICBpbnB1dEJ1ZmZl
clNpemUgPSBsb3dMYXRlbmN5SW5wdXQgPyBnZXRMb3dMYXRlbmN5SW5wdXRGcmFtZXNQZXJCdWZm
ZXIoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGdldE1pbklucHV0
RnJhbWVTaXplKHNhbXBsZVJhdGUsIGNoYW5uZWxzKTsKLSAgfQotCi0gIC8vIEdldHMgdGhlIGN1
cnJlbnQgZWFycGllY2Ugc3RhdGUuCi0gIHByaXZhdGUgYm9vbGVhbiBoYXNFYXJwaWVjZSgpIHsK
LSAgICByZXR1cm4gY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUo
UGFja2FnZU1hbmFnZXIuRkVBVFVSRV9URUxFUEhPTlkpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0
cnVlIGlmIGxvdy1sYXRlbmN5IGF1ZGlvIG91dHB1dCBpcyBzdXBwb3J0ZWQuCi0gIHByaXZhdGUg
Ym9vbGVhbiBpc0xvd0xhdGVuY3lPdXRwdXRTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIGlzT3Bl
blNMRVNTdXBwb3J0ZWQoKQotICAgICAgICAmJiBjb250ZXh0LmdldFBhY2thZ2VNYW5hZ2VyKCku
aGFzU3lzdGVtRmVhdHVyZShQYWNrYWdlTWFuYWdlci5GRUFUVVJFX0FVRElPX0xPV19MQVRFTkNZ
KTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiBsb3ctbGF0ZW5jeSBhdWRpbyBpbnB1dCBp
cyBzdXBwb3J0ZWQuCi0gIC8vIFRPRE8oaGVucmlrYSk6IHJlbW92ZSB0aGUgaGFyZGNvZGVkIGZh
bHNlIHJldHVybiB2YWx1ZSB3aGVuIE9wZW5TTCBFUwotICAvLyBpbnB1dCBwZXJmb3JtYW5jZSBo
YXMgYmVlbiBldmFsdWF0ZWQgYW5kIHRlc3RlZCBtb3JlLgotICBwdWJsaWMgYm9vbGVhbiBpc0xv
d0xhdGVuY3lJbnB1dFN1cHBvcnRlZCgpIHsKLSAgICAvLyBUT0RPKGhlbnJpa2EpOiBpbnZlc3Rp
Z2F0ZSBpZiBzb21lIHNvcnQgb2YgZGV2aWNlIGxpc3QgaXMgbmVlZGVkIGhlcmUKLSAgICAvLyBh
cyB3ZWxsLiBUaGUgTkRLIGRvYyBzdGF0ZXMgdGhhdDogIkFzIG9mIEFQSSBsZXZlbCAyMSwgbG93
ZXIgbGF0ZW5jeQotICAgIC8vIGF1ZGlvIGlucHV0IGlzIHN1cHBvcnRlZCBvbiBzZWxlY3QgZGV2
aWNlcy4gVG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcwotICAgIC8vIGZlYXR1cmUsIGZpcnN0IGNv
bmZpcm0gdGhhdCBsb3dlciBsYXRlbmN5IG91dHB1dCBpcyBhdmFpbGFibGUiLgotICAgIHJldHVy
biBXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkxvbGxpcG9wT3JIaWdoZXIoKSAmJiBpc0xvd0xh
dGVuY3lPdXRwdXRTdXBwb3J0ZWQoKTsKLSAgfQotCi0gIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
ZGV2aWNlIGhhcyBwcm9mZXNzaW9uYWwgYXVkaW8gbGV2ZWwgb2YgZnVuY3Rpb25hbGl0eQotICAv
LyBhbmQgdGhlcmVmb3JlIHN1cHBvcnRzIHRoZSBsb3dlc3QgcG9zc2libGUgcm91bmQtdHJpcCBs
YXRlbmN5LgotICBwcml2YXRlIGJvb2xlYW4gaXNQcm9BdWRpb1N1cHBvcnRlZCgpIHsKLSAgICBy
ZXR1cm4gV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkKLSAg
ICAgICAgJiYgY29udGV4dC5nZXRQYWNrYWdlTWFuYWdlcigpLmhhc1N5c3RlbUZlYXR1cmUoUGFj
a2FnZU1hbmFnZXIuRkVBVFVSRV9BVURJT19QUk8pOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0aGUg
bmF0aXZlIG91dHB1dCBzYW1wbGUgcmF0ZSBmb3IgdGhpcyBkZXZpY2UncyBvdXRwdXQgc3RyZWFt
LgotICBwcml2YXRlIGludCBnZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKCkgewotICAgIC8vIE92
ZXJyaWRlIHRoaXMgaWYgd2UncmUgcnVubmluZyBvbiBhbiBvbGQgZW11bGF0b3IgaW1hZ2Ugd2hp
Y2ggb25seQotICAgIC8vIHN1cHBvcnRzIDgga0h6IGFuZCBkb2Vzbid0IHN1cHBvcnQgUFJPUEVS
VFlfT1VUUFVUX1NBTVBMRV9SQVRFLgotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdP
bkVtdWxhdG9yKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJSdW5uaW5nIGVtdWxhdG9yLCBv
dmVycmlkaW5nIHNhbXBsZSByYXRlIHRvIDgga0h6LiIpOwotICAgICAgcmV0dXJuIDgwMDA7Ci0g
ICAgfQotICAgIC8vIERlZmF1bHQgY2FuIGJlIG92ZXJyaWRlbiBieSBXZWJSdGNBdWRpb1V0aWxz
LnNldERlZmF1bHRTYW1wbGVSYXRlSHooKS4KLSAgICAvLyBJZiBzbywgdXNlIHRoYXQgdmFsdWUg
YW5kIHJldHVybiBoZXJlLgotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLmlzRGVmYXVsdFNhbXBs
ZVJhdGVPdmVycmlkZGVuKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJEZWZhdWx0IHNhbXBs
ZSByYXRlIGlzIG92ZXJyaWRlbiB0byAiCi0gICAgICAgICAgICAgICsgV2ViUnRjQXVkaW9VdGls
cy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgKyAiIEh6Iik7Ci0gICAgICByZXR1cm4gV2ViUnRj
QXVkaW9VdGlscy5nZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCk7Ci0gICAgfQotICAgIC8vIE5vIG92
ZXJyaWRlcyBhdmFpbGFibGUuIERlbGl2ZXIgYmVzdCBwb3NzaWJsZSBlc3RpbWF0ZSBiYXNlZCBv
biBkZWZhdWx0Ci0gICAgLy8gQW5kcm9pZCBBdWRpb01hbmFnZXIgQVBJcy4KLSAgICBmaW5hbCBp
bnQgc2FtcGxlUmF0ZUh6OwotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5
QmVhbk1SMU9ySGlnaGVyKCkpIHsKLSAgICAgIHNhbXBsZVJhdGVIeiA9IGdldFNhbXBsZVJhdGVP
bkplbGx5QmVhbk1SMTBPckhpZ2hlcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICBzYW1wbGVSYXRl
SHogPSBXZWJSdGNBdWRpb1V0aWxzLmdldERlZmF1bHRTYW1wbGVSYXRlSHooKTsKLSAgICB9Ci0g
ICAgTG9nZ2luZy5kKFRBRywgIlNhbXBsZSByYXRlIGlzIHNldCB0byAiICsgc2FtcGxlUmF0ZUh6
ICsgIiBIeiIpOwotICAgIHJldHVybiBzYW1wbGVSYXRlSHo7Ci0gIH0KLQotICBAVGFyZ2V0QXBp
KDE3KQotICBwcml2YXRlIGludCBnZXRTYW1wbGVSYXRlT25KZWxseUJlYW5NUjEwT3JIaWdoZXIo
KSB7Ci0gICAgU3RyaW5nIHNhbXBsZVJhdGVTdHJpbmcgPSBhdWRpb01hbmFnZXIuZ2V0UHJvcGVy
dHkoQXVkaW9NYW5hZ2VyLlBST1BFUlRZX09VVFBVVF9TQU1QTEVfUkFURSk7Ci0gICAgcmV0dXJu
IChzYW1wbGVSYXRlU3RyaW5nID09IG51bGwpID8gV2ViUnRjQXVkaW9VdGlscy5nZXREZWZhdWx0
U2FtcGxlUmF0ZUh6KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBJ
bnRlZ2VyLnBhcnNlSW50KHNhbXBsZVJhdGVTdHJpbmcpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0
aGUgbmF0aXZlIG91dHB1dCBidWZmZXIgc2l6ZSBmb3IgbG93LWxhdGVuY3kgb3V0cHV0IHN0cmVh
bXMuCi0gIEBUYXJnZXRBcGkoMTcpCi0gIHByaXZhdGUgaW50IGdldExvd0xhdGVuY3lPdXRwdXRG
cmFtZXNQZXJCdWZmZXIoKSB7Ci0gICAgYXNzZXJ0VHJ1ZShpc0xvd0xhdGVuY3lPdXRwdXRTdXBw
b3J0ZWQoKSk7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkplbGx5QmVhbk1S
MU9ySGlnaGVyKCkpIHsKLSAgICAgIHJldHVybiBERUZBVUxUX0ZSQU1FX1BFUl9CVUZGRVI7Ci0g
ICAgfQotICAgIFN0cmluZyBmcmFtZXNQZXJCdWZmZXIgPQotICAgICAgICBhdWRpb01hbmFnZXIu
Z2V0UHJvcGVydHkoQXVkaW9NYW5hZ2VyLlBST1BFUlRZX09VVFBVVF9GUkFNRVNfUEVSX0JVRkZF
Uik7Ci0gICAgcmV0dXJuIGZyYW1lc1BlckJ1ZmZlciA9PSBudWxsID8gREVGQVVMVF9GUkFNRV9Q
RVJfQlVGRkVSIDogSW50ZWdlci5wYXJzZUludChmcmFtZXNQZXJCdWZmZXIpOwotICB9Ci0KLSAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYW4gYXVkaW8gZWZmZWN0IChB
RUMgb3IgTlMpLgotICAvLyBGb3VyIGNvbmRpdGlvbnMgbXVzdCBiZSBmdWxmaWxsZWQgaWYgZnVu
Y3Rpb25zIGFyZSB0byByZXR1cm4gdHJ1ZToKLSAgLy8gMSkgdGhlIHBsYXRmb3JtIG11c3Qgc3Vw
cG9ydCB0aGUgYnVpbHQtaW4gKEhXKSBlZmZlY3QsCi0gIC8vIDIpIGV4cGxpY2l0IHVzZSAob3Zl
cnJpZGUpIG9mIGEgV2ViUlRDIGJhc2VkIHZlcnNpb24gbXVzdCBub3QgYmUgc2V0LAotICAvLyAz
KSB0aGUgZGV2aWNlIG11c3Qgbm90IGJlIGJsYWNrbGlzdGVkIGZvciB1c2Ugb2YgdGhlIGVmZmVj
dCwgYW5kCi0gIC8vIDQpIHRoZSBVVUlEIG9mIHRoZSBlZmZlY3QgbXVzdCBiZSBhcHByb3ZlZCAo
c29tZSBVVUlEcyBjYW4gYmUgZXhjbHVkZWQpLgotICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlz
QWNvdXN0aWNFY2hvQ2FuY2VsZXJTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdlYlJ0Y0F1ZGlv
RWZmZWN0cy5jYW5Vc2VBY291c3RpY0VjaG9DYW5jZWxlcigpOwotICB9Ci0gIHByaXZhdGUgc3Rh
dGljIGJvb2xlYW4gaXNOb2lzZVN1cHByZXNzb3JTdXBwb3J0ZWQoKSB7Ci0gICAgcmV0dXJuIFdl
YlJ0Y0F1ZGlvRWZmZWN0cy5jYW5Vc2VOb2lzZVN1cHByZXNzb3IoKTsKLSAgfQotCi0gIC8vIFJl
dHVybnMgdGhlIG1pbmltdW0gb3V0cHV0IGJ1ZmZlciBzaXplIGZvciBKYXZhIGJhc2VkIGF1ZGlv
IChBdWRpb1RyYWNrKS4KLSAgLy8gVGhpcyBzaXplIGNhbiBhbHNvIGJlIHVzZWQgZm9yIE9wZW5T
TCBFUyBpbXBsZW1lbnRhdGlvbnMgb24gZGV2aWNlcyB0aGF0Ci0gIC8vIGxhY2tzIHN1cHBvcnQg
b2YgbG93LWxhdGVuY3kgb3V0cHV0LgotICBwcml2YXRlIHN0YXRpYyBpbnQgZ2V0TWluT3V0cHV0
RnJhbWVTaXplKGludCBzYW1wbGVSYXRlSW5IeiwgaW50IG51bUNoYW5uZWxzKSB7Ci0gICAgZmlu
YWwgaW50IGJ5dGVzUGVyRnJhbWUgPSBudW1DaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4
KTsKLSAgICBmaW5hbCBpbnQgY2hhbm5lbENvbmZpZzsKLSAgICBpZiAobnVtQ2hhbm5lbHMgPT0g
MSkgewotICAgICAgY2hhbm5lbENvbmZpZyA9IEF1ZGlvRm9ybWF0LkNIQU5ORUxfT1VUX01PTk87
Ci0gICAgfSBlbHNlIGlmIChudW1DaGFubmVscyA9PSAyKSB7Ci0gICAgICBjaGFubmVsQ29uZmln
ID0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfU1RFUkVPOwotICAgIH0gZWxzZSB7Ci0gICAgICBy
ZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiBBdWRpb1RyYWNrLmdldE1pbkJ1ZmZlclNpemUo
Ci0gICAgICAgICAgICAgICBzYW1wbGVSYXRlSW5IeiwgY2hhbm5lbENvbmZpZywgQXVkaW9Gb3Jt
YXQuRU5DT0RJTkdfUENNXzE2QklUKQotICAgICAgICAvIGJ5dGVzUGVyRnJhbWU7Ci0gIH0KLQot
ICAvLyBSZXR1cm5zIHRoZSBuYXRpdmUgaW5wdXQgYnVmZmVyIHNpemUgZm9yIGlucHV0IHN0cmVh
bXMuCi0gIHByaXZhdGUgaW50IGdldExvd0xhdGVuY3lJbnB1dEZyYW1lc1BlckJ1ZmZlcigpIHsK
LSAgICBhc3NlcnRUcnVlKGlzTG93TGF0ZW5jeUlucHV0U3VwcG9ydGVkKCkpOwotICAgIHJldHVy
biBnZXRMb3dMYXRlbmN5T3V0cHV0RnJhbWVzUGVyQnVmZmVyKCk7Ci0gIH0KLQotICAvLyBSZXR1
cm5zIHRoZSBtaW5pbXVtIGlucHV0IGJ1ZmZlciBzaXplIGZvciBKYXZhIGJhc2VkIGF1ZGlvIChB
dWRpb1JlY29yZCkuCi0gIC8vIFRoaXMgc2l6ZSBjYW4gY2Fsc28gYmUgdXNlZCBmb3IgT3BlblNM
IEVTIGltcGxlbWVudGF0aW9ucyBvbiBkZXZpY2VzIHRoYXQKLSAgLy8gbGFja3Mgc3VwcG9ydCBv
ZiBsb3ctbGF0ZW5jeSBpbnB1dC4KLSAgcHJpdmF0ZSBzdGF0aWMgaW50IGdldE1pbklucHV0RnJh
bWVTaXplKGludCBzYW1wbGVSYXRlSW5IeiwgaW50IG51bUNoYW5uZWxzKSB7Ci0gICAgZmluYWwg
aW50IGJ5dGVzUGVyRnJhbWUgPSBudW1DaGFubmVscyAqIChCSVRTX1BFUl9TQU1QTEUgLyA4KTsK
LSAgICBhc3NlcnRUcnVlKG51bUNoYW5uZWxzID09IENIQU5ORUxTKTsKLSAgICByZXR1cm4gQXVk
aW9SZWNvcmQuZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgICAgICAgIHNhbXBsZVJhdGVJbkh6
LCBBdWRpb0Zvcm1hdC5DSEFOTkVMX0lOX01PTk8sIEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8x
NkJJVCkKLSAgICAgICAgLyBieXRlc1BlckZyYW1lOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIE9wZW5TTCBFUyBhdWRpbyBpcyBzdXBwb3J0ZWQuCi0gIHByaXZhdGUgc3RhdGljIGJvb2xl
YW4gaXNPcGVuU0xFU1N1cHBvcnRlZCgpIHsKLSAgICAvLyBDaGVjayBmb3IgQVBJIGxldmVsIDkg
b3IgaGlnaGVyLCB0byBjb25maXJtIHVzZSBvZiBPcGVuU0wgRVMuCi0gICAgcmV0dXJuIFdlYlJ0
Y0F1ZGlvVXRpbHMucnVubmluZ09uR2luZ2VyQnJlYWRPckhpZ2hlcigpOwotICB9Ci0KLSAgLy8g
SGVscGVyIG1ldGhvZCB3aGljaCB0aHJvd3MgYW4gZXhjZXB0aW9uICB3aGVuIGFuIGFzc2VydGlv
biBoYXMgZmFpbGVkLgotICBwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBj
b25kaXRpb24pIHsKLSAgICBpZiAoIWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2Vy
dGlvbkVycm9yKCJFeHBlY3RlZCBjb25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGUgbmF0aXZlIHZvaWQgbmF0aXZlQ2FjaGVBdWRpb1BhcmFtZXRlcnMoaW50IHNh
bXBsZVJhdGUsIGludCBjaGFubmVscywgYm9vbGVhbiBoYXJkd2FyZUFFQywKLSAgICAgIGJvb2xl
YW4gaGFyZHdhcmVBR0MsIGJvb2xlYW4gaGFyZHdhcmVOUywgYm9vbGVhbiBsb3dMYXRlbmN5T3V0
cHV0LCBib29sZWFuIGxvd0xhdGVuY3lJbnB1dCwKLSAgICAgIGJvb2xlYW4gcHJvQXVkaW8sIGlu
dCBvdXRwdXRCdWZmZXJTaXplLCBpbnQgaW5wdXRCdWZmZXJTaXplLCBsb25nIG5hdGl2ZUF1ZGlv
TWFuYWdlcik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9p
Y2VlbmdpbmUvV2ViUnRjQXVkaW9SZWNvcmQuamF2YQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2RldmljZS9hbmRy
b2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9SZWNvcmQuamF2
YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRj
L3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvUmVjb3JkLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwy
ODYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0
IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBi
ZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAq
ICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQg
Y2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcg
cHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4g
dGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52
b2ljZWVuZ2luZTsKLQotaW1wb3J0IG9yZy53ZWJydGMuTG9nZ2luZzsKLWltcG9ydCBvcmcud2Vi
cnRjLlRocmVhZFV0aWxzOwotCi1pbXBvcnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBv
cnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zvcm1hdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlv
UmVjb3JkOwotaW1wb3J0IGFuZHJvaWQubWVkaWEuTWVkaWFSZWNvcmRlci5BdWRpb1NvdXJjZTsK
LWltcG9ydCBhbmRyb2lkLm9zLlByb2Nlc3M7Ci0KLWltcG9ydCBqYXZhLmxhbmcuU3lzdGVtOwot
aW1wb3J0IGphdmEubmlvLkJ5dGVCdWZmZXI7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQu
VGltZVVuaXQ7Ci0KLXB1YmxpYyBjbGFzcyBXZWJSdGNBdWRpb1JlY29yZCB7Ci0gIHByaXZhdGUg
c3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBm
aW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvUmVjb3JkIjsKLQotICAvLyBEZWZhdWx0IGF1
ZGlvIGRhdGEgZm9ybWF0IGlzIFBDTSAxNiBiaXQgcGVyIHNhbXBsZS4KLSAgLy8gR3VhcmFudGVl
ZCB0byBiZSBzdXBwb3J0ZWQgYnkgYWxsIGRldmljZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFs
IGludCBCSVRTX1BFUl9TQU1QTEUgPSAxNjsKLQotICAvLyBSZXF1ZXN0ZWQgc2l6ZSBvZiBlYWNo
IHJlY29yZGVkIGJ1ZmZlciBwcm92aWRlZCB0byB0aGUgY2xpZW50LgotICBwcml2YXRlIHN0YXRp
YyBmaW5hbCBpbnQgQ0FMTEJBQ0tfQlVGRkVSX1NJWkVfTVMgPSAxMDsKLQotICAvLyBBdmVyYWdl
IG51bWJlciBvZiBjYWxsYmFja3MgcGVyIHNlY29uZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwg
aW50IEJVRkZFUlNfUEVSX1NFQ09ORCA9IDEwMDAgLyBDQUxMQkFDS19CVUZGRVJfU0laRV9NUzsK
LQotICAvLyBXZSBhc2sgZm9yIGEgbmF0aXZlIGJ1ZmZlciBzaXplIG9mIEJVRkZFUl9TSVpFX0ZB
Q1RPUiAqIChtaW5pbXVtIHJlcXVpcmVkCi0gIC8vIGJ1ZmZlciBzaXplKS4gVGhlIGV4dHJhIHNw
YWNlIGlzIGFsbG9jYXRlZCB0byBndWFyZCBhZ2FpbnN0IGdsaXRjaGVzIHVuZGVyCi0gIC8vIGhp
Z2ggbG9hZC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJVRkZFUl9TSVpFX0ZBQ1RPUiA9
IDI7Ci0KLSAgLy8gVGhlIEF1ZGlvUmVjb3JkSmF2YVRocmVhZCBpcyBhbGxvd2VkIHRvIHdhaXQg
Zm9yIHN1Y2Nlc3NmdWwgY2FsbCB0byBqb2luKCkKLSAgLy8gYnV0IHRoZSB3YWl0IHRpbWVzIG91
dCBhZnRoZXIgdGhpcyBhbW91bnQgb2YgdGltZS4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9u
ZyBBVURJT19SRUNPUkRfVEhSRUFEX0pPSU5fVElNRU9VVF9NUyA9IDIwMDA7Ci0KLSAgcHJpdmF0
ZSBmaW5hbCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkOwotICBwcml2YXRlIGZpbmFsIENvbnRleHQg
Y29udGV4dDsKLQotICBwcml2YXRlIFdlYlJ0Y0F1ZGlvRWZmZWN0cyBlZmZlY3RzID0gbnVsbDsK
LQotICBwcml2YXRlIEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlcjsKLQotICBwcml2YXRlIEF1ZGlvUmVj
b3JkIGF1ZGlvUmVjb3JkID0gbnVsbDsKLSAgcHJpdmF0ZSBBdWRpb1JlY29yZFRocmVhZCBhdWRp
b1RocmVhZCA9IG51bGw7Ci0KLSAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBtaWNy
b3Bob25lTXV0ZSA9IGZhbHNlOwotICBwcml2YXRlIGJ5dGVbXSBlbXB0eUJ5dGVzOwotCi0gIC8q
KgotICAgKiBBdWRpbyB0aHJlYWQgd2hpY2gga2VlcHMgY2FsbGluZyBCeXRlQnVmZmVyLnJlYWQo
KSB3YWl0aW5nIGZvciBhdWRpbwotICAgKiB0byBiZSByZWNvcmRlZC4gRmVlZHMgcmVjb3JkZWQg
ZGF0YSB0byB0aGUgbmF0aXZlIGNvdW50ZXJwYXJ0IGFzIGEKLSAgICogcGVyaW9kaWMgc2VxdWVu
Y2Ugb2YgY2FsbGJhY2tzIHVzaW5nIERhdGFJc1JlY29yZGVkKCkuCi0gICAqIFRoaXMgdGhyZWFk
IHVzZXMgYSBQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8gcHJpb3JpdHkuCi0g
ICAqLwotICBwcml2YXRlIGNsYXNzIEF1ZGlvUmVjb3JkVGhyZWFkIGV4dGVuZHMgVGhyZWFkIHsK
LSAgICBwcml2YXRlIHZvbGF0aWxlIGJvb2xlYW4ga2VlcEFsaXZlID0gdHJ1ZTsKLQotICAgIHB1
YmxpYyBBdWRpb1JlY29yZFRocmVhZChTdHJpbmcgbmFtZSkgewotICAgICAgc3VwZXIobmFtZSk7
Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgcnVuKCkgewotICAgICAg
UHJvY2Vzcy5zZXRUaHJlYWRQcmlvcml0eShQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRf
QVVESU8pOwotICAgICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvUmVjb3JkVGhyZWFkIiArIFdlYlJ0
Y0F1ZGlvVXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICAgIGFzc2VydFRydWUoYXVkaW9SZWNv
cmQuZ2V0UmVjb3JkaW5nU3RhdGUoKSA9PSBBdWRpb1JlY29yZC5SRUNPUkRTVEFURV9SRUNPUkRJ
TkcpOwotCi0gICAgICBsb25nIGxhc3RUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICB3
aGlsZSAoa2VlcEFsaXZlKSB7Ci0gICAgICAgIGludCBieXRlc1JlYWQgPSBhdWRpb1JlY29yZC5y
ZWFkKGJ5dGVCdWZmZXIsIGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSk7Ci0gICAgICAgIGlmIChieXRl
c1JlYWQgPT0gYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSB7Ci0gICAgICAgICAgaWYgKG1pY3JvcGhv
bmVNdXRlKSB7Ci0gICAgICAgICAgICBieXRlQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgICAgICBi
eXRlQnVmZmVyLnB1dChlbXB0eUJ5dGVzKTsKLSAgICAgICAgICB9Ci0gICAgICAgICAgbmF0aXZl
RGF0YUlzUmVjb3JkZWQoYnl0ZXNSZWFkLCBuYXRpdmVBdWRpb1JlY29yZCk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgTG9nZ2luZy5lKFRBRywgIkF1ZGlvUmVjb3JkLnJlYWQgZmFpbGVk
OiAiICsgYnl0ZXNSZWFkKTsKLSAgICAgICAgICBpZiAoYnl0ZXNSZWFkID09IEF1ZGlvUmVjb3Jk
LkVSUk9SX0lOVkFMSURfT1BFUkFUSU9OKSB7Ci0gICAgICAgICAgICBrZWVwQWxpdmUgPSBmYWxz
ZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKERFQlVHKSB7Ci0gICAgICAg
ICAgbG9uZyBub3dUaW1lID0gU3lzdGVtLm5hbm9UaW1lKCk7Ci0gICAgICAgICAgbG9uZyBkdXJh
dGlvbkluTXMgPSBUaW1lVW5pdC5OQU5PU0VDT05EUy50b01pbGxpcygobm93VGltZSAtIGxhc3RU
aW1lKSk7Ci0gICAgICAgICAgbGFzdFRpbWUgPSBub3dUaW1lOwotICAgICAgICAgIExvZ2dpbmcu
ZChUQUcsICJieXRlc1JlYWRbIiArIGR1cmF0aW9uSW5NcyArICJdICIgKyBieXRlc1JlYWQpOwot
ICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIHRyeSB7Ci0gICAgICAgIGlmIChhdWRpb1JlY29y
ZCAhPSBudWxsKSB7Ci0gICAgICAgICAgYXVkaW9SZWNvcmQuc3RvcCgpOwotICAgICAgICB9Ci0g
ICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAgICBMb2dnaW5n
LmUoVEFHLCAiQXVkaW9SZWNvcmQuc3RvcCBmYWlsZWQ6ICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0g
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gU3RvcHMgdGhlIGlubmVyIHRocmVhZCBsb29wIGFuZCBh
bHNvIGNhbGxzIEF1ZGlvUmVjb3JkLnN0b3AoKS4KLSAgICAvLyBEb2VzIG5vdCBibG9jayB0aGUg
Y2FsbGluZyB0aHJlYWQuCi0gICAgcHVibGljIHZvaWQgc3RvcFRocmVhZCgpIHsKLSAgICAgIExv
Z2dpbmcuZChUQUcsICJzdG9wVGhyZWFkIik7Ci0gICAgICBrZWVwQWxpdmUgPSBmYWxzZTsKLSAg
ICB9Ci0gIH0KLQotICBXZWJSdGNBdWRpb1JlY29yZChDb250ZXh0IGNvbnRleHQsIGxvbmcgbmF0
aXZlQXVkaW9SZWNvcmQpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiY3RvciIgKyBXZWJSdGNBdWRp
b1V0aWxzLmdldFRocmVhZEluZm8oKSk7Ci0gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKLSAg
ICB0aGlzLm5hdGl2ZUF1ZGlvUmVjb3JkID0gbmF0aXZlQXVkaW9SZWNvcmQ7Ci0gICAgaWYgKERF
QlVHKSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxvZ0RldmljZUluZm8oVEFHKTsKLSAgICB9
Ci0gICAgZWZmZWN0cyA9IFdlYlJ0Y0F1ZGlvRWZmZWN0cy5jcmVhdGUoKTsKLSAgfQotCi0gIHBy
aXZhdGUgYm9vbGVhbiBlbmFibGVCdWlsdEluQUVDKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9n
Z2luZy5kKFRBRywgImVuYWJsZUJ1aWx0SW5BRUMoIiArIGVuYWJsZSArICcpJyk7Ci0gICAgaWYg
KGVmZmVjdHMgPT0gbnVsbCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkJ1aWx0LWluIEFFQyBp
cyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKLSAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGVmZmVjdHMuc2V0QUVDKGVuYWJsZSk7Ci0gIH0KLQotICBwcml2
YXRlIGJvb2xlYW4gZW5hYmxlQnVpbHRJbk5TKGJvb2xlYW4gZW5hYmxlKSB7Ci0gICAgTG9nZ2lu
Zy5kKFRBRywgImVuYWJsZUJ1aWx0SW5OUygiICsgZW5hYmxlICsgJyknKTsKLSAgICBpZiAoZWZm
ZWN0cyA9PSBudWxsKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQnVpbHQtaW4gTlMgaXMgbm90
IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiBlZmZlY3RzLnNldE5TKGVuYWJsZSk7Ci0gIH0KLQotICBwcml2YXRlIGlu
dCBpbml0UmVjb3JkaW5nKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsKLSAgICBMb2dn
aW5nLmQoVEFHLCAiaW5pdFJlY29yZGluZyhzYW1wbGVSYXRlPSIgKyBzYW1wbGVSYXRlICsgIiwg
Y2hhbm5lbHM9IiArIGNoYW5uZWxzICsgIikiKTsKLSAgICBpZiAoIVdlYlJ0Y0F1ZGlvVXRpbHMu
aGFzUGVybWlzc2lvbihjb250ZXh0LCBhbmRyb2lkLk1hbmlmZXN0LnBlcm1pc3Npb24uUkVDT1JE
X0FVRElPKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlJFQ09SRF9BVURJTyBwZXJtaXNzaW9u
IGlzIG1pc3NpbmciKTsKLSAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKGF1ZGlvUmVj
b3JkICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJJbml0UmVjb3JkaW5nKCkgY2Fs
bGVkIHR3aWNlIHdpdGhvdXQgU3RvcFJlY29yZGluZygpIik7Ci0gICAgICByZXR1cm4gLTE7Ci0g
ICAgfQotICAgIGZpbmFsIGludCBieXRlc1BlckZyYW1lID0gY2hhbm5lbHMgKiAoQklUU19QRVJf
U0FNUExFIC8gOCk7Ci0gICAgZmluYWwgaW50IGZyYW1lc1BlckJ1ZmZlciA9IHNhbXBsZVJhdGUg
LyBCVUZGRVJTX1BFUl9TRUNPTkQ7Ci0gICAgYnl0ZUJ1ZmZlciA9IEJ5dGVCdWZmZXIuYWxsb2Nh
dGVEaXJlY3QoYnl0ZXNQZXJGcmFtZSAqIGZyYW1lc1BlckJ1ZmZlcik7Ci0gICAgTG9nZ2luZy5k
KFRBRywgImJ5dGVCdWZmZXIuY2FwYWNpdHk6ICIgKyBieXRlQnVmZmVyLmNhcGFjaXR5KCkpOwot
ICAgIGVtcHR5Qnl0ZXMgPSBuZXcgYnl0ZVtieXRlQnVmZmVyLmNhcGFjaXR5KCldOwotICAgIC8v
IFJhdGhlciB0aGFuIHBhc3NpbmcgdGhlIEJ5dGVCdWZmZXIgd2l0aCBldmVyeSBjYWxsYmFjayAo
cmVxdWlyaW5nCi0gICAgLy8gdGhlIHBvdGVudGlhbGx5IGV4cGVuc2l2ZSBHZXREaXJlY3RCdWZm
ZXJBZGRyZXNzKSB3ZSBzaW1wbHkgaGF2ZSB0aGUKLSAgICAvLyB0aGUgbmF0aXZlIGNsYXNzIGNh
Y2hlIHRoZSBhZGRyZXNzIHRvIHRoZSBtZW1vcnkgb25jZS4KLSAgICBuYXRpdmVDYWNoZURpcmVj
dEJ1ZmZlckFkZHJlc3MoYnl0ZUJ1ZmZlciwgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gICAgLy8g
R2V0IHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVpcmVkIGZvciB0aGUgc3VjY2Vzc2Z1bCBj
cmVhdGlvbiBvZgotICAgIC8vIGFuIEF1ZGlvUmVjb3JkIG9iamVjdCwgaW4gYnl0ZSB1bml0cy4K
LSAgICAvLyBOb3RlIHRoYXQgdGhpcyBzaXplIGRvZXNuJ3QgZ3VhcmFudGVlIGEgc21vb3RoIHJl
Y29yZGluZyB1bmRlciBsb2FkLgotICAgIGludCBtaW5CdWZmZXJTaXplID0gQXVkaW9SZWNvcmQu
Z2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgc2FtcGxlUmF0ZSwgQXVkaW9Gb3JtYXQuQ0hBTk5F
TF9JTl9NT05PLCBBdWRpb0Zvcm1hdC5FTkNPRElOR19QQ01fMTZCSVQpOwotICAgIGlmIChtaW5C
dWZmZXJTaXplID09IEF1ZGlvUmVjb3JkLkVSUk9SIHx8IG1pbkJ1ZmZlclNpemUgPT0gQXVkaW9S
ZWNvcmQuRVJST1JfQkFEX1ZBTFVFKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNv
cmQuZ2V0TWluQnVmZmVyU2l6ZSBmYWlsZWQ6ICIgKyBtaW5CdWZmZXJTaXplKTsKLSAgICAgIHJl
dHVybiAtMTsKLSAgICB9Ci0gICAgTG9nZ2luZy5kKFRBRywgIkF1ZGlvUmVjb3JkLmdldE1pbkJ1
ZmZlclNpemU6ICIgKyBtaW5CdWZmZXJTaXplKTsKLQotICAgIC8vIFVzZSBhIGxhcmdlciBidWZm
ZXIgc2l6ZSB0aGFuIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHdoZW4gY3JlYXRpbmcgdGhlCi0gICAg
Ly8gQXVkaW9SZWNvcmQgaW5zdGFuY2UgdG8gZW5zdXJlIHNtb290aCByZWNvcmRpbmcgdW5kZXIg
bG9hZC4gSXQgaGFzIGJlZW4KLSAgICAvLyB2ZXJpZmllZCB0aGF0IGl0IGRvZXMgbm90IGluY3Jl
YXNlIHRoZSBhY3R1YWwgcmVjb3JkaW5nIGxhdGVuY3kuCi0gICAgaW50IGJ1ZmZlclNpemVJbkJ5
dGVzID0gTWF0aC5tYXgoQlVGRkVSX1NJWkVfRkFDVE9SICogbWluQnVmZmVyU2l6ZSwgYnl0ZUJ1
ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiYnVmZmVyU2l6ZUluQnl0ZXM6
ICIgKyBidWZmZXJTaXplSW5CeXRlcyk7Ci0gICAgdHJ5IHsKLSAgICAgIGF1ZGlvUmVjb3JkID0g
bmV3IEF1ZGlvUmVjb3JkKEF1ZGlvU291cmNlLlZPSUNFX0NPTU1VTklDQVRJT04sIHNhbXBsZVJh
dGUsCi0gICAgICAgICAgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9JTl9NT05PLCBBdWRpb0Zvcm1hdC5F
TkNPRElOR19QQ01fMTZCSVQsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKLSAgICB9IGNhdGNoIChJbGxl
Z2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgZS5nZXRNZXNz
YWdlKCkpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoYXVkaW9SZWNvcmQgPT0g
bnVsbCB8fCBhdWRpb1JlY29yZC5nZXRTdGF0ZSgpICE9IEF1ZGlvUmVjb3JkLlNUQVRFX0lOSVRJ
QUxJWkVEKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBB
dWRpb1JlY29yZCBpbnN0YW5jZSIpOwotICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAo
ZWZmZWN0cyAhPSBudWxsKSB7Ci0gICAgICBlZmZlY3RzLmVuYWJsZShhdWRpb1JlY29yZC5nZXRB
dWRpb1Nlc3Npb25JZCgpKTsKLSAgICB9Ci0gICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGF1ZGlvIHBh
cmFtZXRlcnMgYXJlIHZhbGlkIGFuZCBjb3JyZWN0LgotICAgIGlmICghYXJlUGFyYW1ldGVyc1Zh
bGlkKHNhbXBsZVJhdGUsIGNoYW5uZWxzKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF0IGxl
YXN0IG9uZSBhdWRpbyByZWNvcmQgcGFyYW1ldGVyIGlzIGludmFsaWQuIik7Ci0gICAgICByZXR1
cm4gLTE7Ci0gICAgfQotICAgIGxvZ01haW5QYXJhbWV0ZXJzKCk7Ci0gICAgbG9nTWFpblBhcmFt
ZXRlcnNFeHRlbmRlZCgpOwotICAgIHJldHVybiBmcmFtZXNQZXJCdWZmZXI7Ci0gIH0KLQotICBw
cml2YXRlIGJvb2xlYW4gc3RhcnRSZWNvcmRpbmcoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0
YXJ0UmVjb3JkaW5nIik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1JlY29yZCAhPSBudWxsKTsKLSAg
ICBhc3NlcnRUcnVlKGF1ZGlvVGhyZWFkID09IG51bGwpOwotICAgIHRyeSB7Ci0gICAgICBhdWRp
b1JlY29yZC5zdGFydFJlY29yZGluZygpOwotICAgIH0gY2F0Y2ggKElsbGVnYWxTdGF0ZUV4Y2Vw
dGlvbiBlKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9SZWNvcmQuc3RhcnRSZWNvcmRp
bmcgZmFpbGVkOiAiICsgZS5nZXRNZXNzYWdlKCkpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoYXVkaW9SZWNvcmQuZ2V0UmVjb3JkaW5nU3RhdGUoKSAhPSBBdWRpb1JlY29y
ZC5SRUNPUkRTVEFURV9SRUNPUkRJTkcpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1Jl
Y29yZC5zdGFydFJlY29yZGluZyBmYWlsZWQiKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgYXVkaW9UaHJlYWQgPSBuZXcgQXVkaW9SZWNvcmRUaHJlYWQoIkF1ZGlvUmVjb3JkSmF2
YVRocmVhZCIpOwotICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0g
IH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RvcFJlY29yZGluZygpIHsKLSAgICBMb2dnaW5nLmQo
VEFHLCAic3RvcFJlY29yZGluZyIpOwotICAgIGFzc2VydFRydWUoYXVkaW9UaHJlYWQgIT0gbnVs
bCk7Ci0gICAgYXVkaW9UaHJlYWQuc3RvcFRocmVhZCgpOwotICAgIGlmICghVGhyZWFkVXRpbHMu
am9pblVuaW50ZXJydXB0aWJseShhdWRpb1RocmVhZCwgQVVESU9fUkVDT1JEX1RIUkVBRF9KT0lO
X1RJTUVPVVRfTVMpKSB7Ci0gICAgICBMb2dnaW5nLmUoVEFHLCAiSm9pbiBvZiBBdWRpb1JlY29y
ZEphdmFUaHJlYWQgdGltZWQgb3V0Iik7Ci0gICAgfQotICAgIGF1ZGlvVGhyZWFkID0gbnVsbDsK
LSAgICBpZiAoZWZmZWN0cyAhPSBudWxsKSB7Ci0gICAgICBlZmZlY3RzLnJlbGVhc2UoKTsKLSAg
ICB9Ci0gICAgYXVkaW9SZWNvcmQucmVsZWFzZSgpOwotICAgIGF1ZGlvUmVjb3JkID0gbnVsbDsK
LSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIFZlcmlmaWVzIHRoYXQgdGhlIGF1ZGlvIHJl
Y29yZCBpcyB1c2luZyBjb3JyZWN0IHBhcmFtZXRlcnMsIGkuZS4sIHRoYXQgdGhlCi0gIC8vIGNy
ZWF0ZWQgaW5zdGFuY2UgdXNlcyB0aGUgcGFyYW1ldGVycyB0aGF0IHdlIGFza2VkIGZvci4KLSAg
cHJpdmF0ZSBib29sZWFuIGFyZVBhcmFtZXRlcnNWYWxpZChpbnQgc2FtcGxlUmF0ZSwgaW50IGNo
YW5uZWxzKSB7Ci0gICAgcmV0dXJuIChhdWRpb1JlY29yZC5nZXRBdWRpb0Zvcm1hdCgpID09IEF1
ZGlvRm9ybWF0LkVOQ09ESU5HX1BDTV8xNkJJVAotICAgICAgICAmJiBhdWRpb1JlY29yZC5nZXRD
aGFubmVsQ29uZmlndXJhdGlvbigpID09IEF1ZGlvRm9ybWF0LkNIQU5ORUxfSU5fTU9OTwotICAg
ICAgICAmJiBhdWRpb1JlY29yZC5nZXRBdWRpb1NvdXJjZSgpID09IEF1ZGlvU291cmNlLlZPSUNF
X0NPTU1VTklDQVRJT04KLSAgICAgICAgJiYgYXVkaW9SZWNvcmQuZ2V0U2FtcGxlUmF0ZSgpID09
IHNhbXBsZVJhdGUgJiYgYXVkaW9SZWNvcmQuZ2V0Q2hhbm5lbENvdW50KCkgPT0gY2hhbm5lbHMp
OwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzKCkgewotICAgIExvZ2dp
bmcuZChUQUcsICJBdWRpb1JlY29yZDogIgotICAgICAgICAgICAgKyAic2Vzc2lvbiBJRDogIiAr
IGF1ZGlvUmVjb3JkLmdldEF1ZGlvU2Vzc2lvbklkKCkgKyAiLCAiCi0gICAgICAgICAgICArICJj
aGFubmVsczogIiArIGF1ZGlvUmVjb3JkLmdldENoYW5uZWxDb3VudCgpICsgIiwgIgotICAgICAg
ICAgICAgKyAic2FtcGxlIHJhdGU6ICIgKyBhdWRpb1JlY29yZC5nZXRTYW1wbGVSYXRlKCkpOwot
ICB9Ci0KLSAgcHJpdmF0ZSB2b2lkIGxvZ01haW5QYXJhbWV0ZXJzRXh0ZW5kZWQoKSB7Ci0gICAg
aWYgKFdlYlJ0Y0F1ZGlvVXRpbHMucnVubmluZ09uTWFyc2htYWxsb3dPckhpZ2hlcigpKSB7Ci0g
ICAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9SZWNvcmQ6ICIKLSAgICAgICAgICAgICAgLy8gVGhl
IGZyYW1lIGNvdW50IG9mIHRoZSBuYXRpdmUgQXVkaW9SZWNvcmQgYnVmZmVyLgotICAgICAgICAg
ICAgICArICJidWZmZXIgc2l6ZSBpbiBmcmFtZXM6ICIgKyBhdWRpb1JlY29yZC5nZXRCdWZmZXJT
aXplSW5GcmFtZXMoKSk7Ci0gICAgfQotICB9Ci0KLSAgLy8gSGVscGVyIG1ldGhvZCB3aGljaCB0
aHJvd3MgYW4gZXhjZXB0aW9uICB3aGVuIGFuIGFzc2VydGlvbiBoYXMgZmFpbGVkLgotICBwcml2
YXRlIHN0YXRpYyB2b2lkIGFzc2VydFRydWUoYm9vbGVhbiBjb25kaXRpb24pIHsKLSAgICBpZiAo
IWNvbmRpdGlvbikgewotICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKCJFeHBlY3RlZCBj
b25kaXRpb24gdG8gYmUgdHJ1ZSIpOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGUgbmF0aXZlIHZv
aWQgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKEJ5dGVCdWZmZXIgYnl0ZUJ1ZmZlciwg
bG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVE
YXRhSXNSZWNvcmRlZChpbnQgYnl0ZXMsIGxvbmcgbmF0aXZlQXVkaW9SZWNvcmQpOwotCi0gIC8v
IFNldHMgYWxsIHJlY29yZGVkIHNhbXBsZXMgdG8gemVybyBpZiB8bXV0ZXwgaXMgdHJ1ZSwgaS5l
LiwgZW5zdXJlcyB0aGF0Ci0gIC8vIHRoZSBtaWNyb3Bob25lIGlzIG11dGVkLgotICBwdWJsaWMg
c3RhdGljIHZvaWQgc2V0TWljcm9waG9uZU11dGUoYm9vbGVhbiBtdXRlKSB7Ci0gICAgTG9nZ2lu
Zy53KFRBRywgInNldE1pY3JvcGhvbmVNdXRlKCIgKyBtdXRlICsgIikiKTsKLSAgICBtaWNyb3Bo
b25lTXV0ZSA9IG11dGU7Ci0gIH0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3Jn
L3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1RyYWNrLmphdmEKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19k
ZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9vcmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlv
VHJhY2suamF2YQkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19kZXZpY2UvYW5kcm9pZC9qYXZhL3NyYy9v
cmcvd2VicnRjL3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVHJhY2suamF2YQkobm9uZXhpc3RlbnQp
CkBAIC0xLDM0NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotcGFja2FnZSBvcmcu
d2VicnRjLnZvaWNlZW5naW5lOwotCi1pbXBvcnQgb3JnLndlYnJ0Yy5Mb2dnaW5nOwotCi1pbXBv
cnQgYW5kcm9pZC5jb250ZW50LkNvbnRleHQ7Ci1pbXBvcnQgYW5kcm9pZC5tZWRpYS5BdWRpb0Zv
cm1hdDsKLWltcG9ydCBhbmRyb2lkLm1lZGlhLkF1ZGlvTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lk
Lm1lZGlhLkF1ZGlvVHJhY2s7Ci1pbXBvcnQgYW5kcm9pZC5vcy5Qcm9jZXNzOwotCi1pbXBvcnQg
amF2YS5sYW5nLlRocmVhZDsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotCi1wdWJsaWMg
Y2xhc3MgV2ViUnRjQXVkaW9UcmFjayB7Ci0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4g
REVCVUcgPSBmYWxzZTsKLQotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldl
YlJ0Y0F1ZGlvVHJhY2siOwotCi0gIC8vIERlZmF1bHQgYXVkaW8gZGF0YSBmb3JtYXQgaXMgUENN
IDE2IGJpdCBwZXIgc2FtcGxlLgotICAvLyBHdWFyYW50ZWVkIHRvIGJlIHN1cHBvcnRlZCBieSBh
bGwgZGV2aWNlcy4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEJJVFNfUEVSX1NBTVBMRSA9
IDE2OwotCi0gIC8vIFJlcXVlc3RlZCBzaXplIG9mIGVhY2ggcmVjb3JkZWQgYnVmZmVyIHByb3Zp
ZGVkIHRvIHRoZSBjbGllbnQuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBDQUxMQkFDS19C
VUZGRVJfU0laRV9NUyA9IDEwOwotCi0gIC8vIEF2ZXJhZ2UgbnVtYmVyIG9mIGNhbGxiYWNrcyBw
ZXIgc2Vjb25kLgotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSU19QRVJfU0VDT05E
ID0gMTAwMCAvIENBTExCQUNLX0JVRkZFUl9TSVpFX01TOwotCi0gIHByaXZhdGUgZmluYWwgQ29u
dGV4dCBjb250ZXh0OwotICBwcml2YXRlIGZpbmFsIGxvbmcgbmF0aXZlQXVkaW9UcmFjazsKLSAg
cHJpdmF0ZSBmaW5hbCBBdWRpb01hbmFnZXIgYXVkaW9NYW5hZ2VyOwotCi0gIHByaXZhdGUgQnl0
ZUJ1ZmZlciBieXRlQnVmZmVyOwotCi0gIHByaXZhdGUgQXVkaW9UcmFjayBhdWRpb1RyYWNrID0g
bnVsbDsKLSAgcHJpdmF0ZSBBdWRpb1RyYWNrVGhyZWFkIGF1ZGlvVGhyZWFkID0gbnVsbDsKLQot
ICAvLyBTYW1wbGVzIHRvIGJlIHBsYXllZCBhcmUgcmVwbGFjZWQgYnkgemVyb3MgaWYgfHNwZWFr
ZXJNdXRlfCBpcyBzZXQgdG8gdHJ1ZS4KLSAgLy8gQ2FuIGJlIHVzZWQgdG8gZW5zdXJlIHRoYXQg
dGhlIHNwZWFrZXIgaXMgZnVsbHkgbXV0ZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJv
b2xlYW4gc3BlYWtlck11dGUgPSBmYWxzZTsKLSAgcHJpdmF0ZSBieXRlW10gZW1wdHlCeXRlczsK
LQotICAvKioKLSAgICogQXVkaW8gdGhyZWFkIHdoaWNoIGtlZXBzIGNhbGxpbmcgQXVkaW9UcmFj
ay53cml0ZSgpIHRvIHN0cmVhbSBhdWRpby4KLSAgICogRGF0YSBpcyBwZXJpb2RpY2FsbHkgYWNx
dWlyZWQgZnJvbSB0aGUgbmF0aXZlIFdlYlJUQyBsYXllciB1c2luZyB0aGUKLSAgICogbmF0aXZl
R2V0UGxheW91dERhdGEgY2FsbGJhY2sgZnVuY3Rpb24uCi0gICAqIFRoaXMgdGhyZWFkIHVzZXMg
YSBQcm9jZXNzLlRIUkVBRF9QUklPUklUWV9VUkdFTlRfQVVESU8gcHJpb3JpdHkuCi0gICAqLwot
ICBwcml2YXRlIGNsYXNzIEF1ZGlvVHJhY2tUaHJlYWQgZXh0ZW5kcyBUaHJlYWQgewotICAgIHBy
aXZhdGUgdm9sYXRpbGUgYm9vbGVhbiBrZWVwQWxpdmUgPSB0cnVlOwotCi0gICAgcHVibGljIEF1
ZGlvVHJhY2tUaHJlYWQoU3RyaW5nIG5hbWUpIHsKLSAgICAgIHN1cGVyKG5hbWUpOwotICAgIH0K
LQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKLSAgICAgIFByb2Nlc3Mu
c2V0VGhyZWFkUHJpb3JpdHkoUHJvY2Vzcy5USFJFQURfUFJJT1JJVFlfVVJHRU5UX0FVRElPKTsK
LSAgICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrVGhyZWFkIiArIFdlYlJ0Y0F1ZGlvVXRp
bHMuZ2V0VGhyZWFkSW5mbygpKTsKLQotICAgICAgdHJ5IHsKLSAgICAgICAgLy8gSW4gTU9ERV9T
VFJFQU0gbW9kZSB3ZSBjYW4gb3B0aW9uYWxseSBwcmltZSB0aGUgb3V0cHV0IGJ1ZmZlciBieQot
ICAgICAgICAvLyB3cml0aW5nIHVwIHRvIGJ1ZmZlclNpemVJbkJ5dGVzIChmcm9tIGNvbnN0cnVj
dG9yKSBiZWZvcmUgc3RhcnRpbmcuCi0gICAgICAgIC8vIFRoaXMgcHJpbWluZyB3aWxsIGF2b2lk
IGFuIGltbWVkaWF0ZSB1bmRlcnJ1biwgYnV0IGlzIG5vdCByZXF1aXJlZC4KLSAgICAgICAgLy8g
VE9ETyhoZW5yaWthKTogaW5pdGlhbCB0ZXN0cyBoYXZlIHNob3duIHRoYXQgcHJpbWluZyBpcyBu
b3QgcmVxdWlyZWQuCi0gICAgICAgIGF1ZGlvVHJhY2sucGxheSgpOwotICAgICAgICBhc3NlcnRU
cnVlKGF1ZGlvVHJhY2suZ2V0UGxheVN0YXRlKCkgPT0gQXVkaW9UcmFjay5QTEFZU1RBVEVfUExB
WUlORyk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRpb24gZSkgewotICAgICAg
ICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5wbGF5IGZhaWxlZDogIiArIGUuZ2V0TWVzc2Fn
ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICAvLyBGaXhlZCBzaXplIGlu
IGJ5dGVzIG9mIGVhY2ggMTBtcyBibG9jayBvZiBhdWRpbyBkYXRhIHRoYXQgd2UgYXNrIGZvcgot
ICAgICAgLy8gdXNpbmcgY2FsbGJhY2tzIHRvIHRoZSBuYXRpdmUgV2ViUlRDIGNsaWVudC4KLSAg
ICAgIGZpbmFsIGludCBzaXplSW5CeXRlcyA9IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKTsKLQotICAg
ICAgd2hpbGUgKGtlZXBBbGl2ZSkgewotICAgICAgICAvLyBHZXQgMTBtcyBvZiBQQ00gZGF0YSBm
cm9tIHRoZSBuYXRpdmUgV2ViUlRDIGNsaWVudC4gQXVkaW8gZGF0YSBpcwotICAgICAgICAvLyB3
cml0dGVuIGludG8gdGhlIGNvbW1vbiBCeXRlQnVmZmVyIHVzaW5nIHRoZSBhZGRyZXNzIHRoYXQg
d2FzCi0gICAgICAgIC8vIGNhY2hlZCBhdCBjb25zdHJ1Y3Rpb24uCi0gICAgICAgIG5hdGl2ZUdl
dFBsYXlvdXREYXRhKHNpemVJbkJ5dGVzLCBuYXRpdmVBdWRpb1RyYWNrKTsKLSAgICAgICAgLy8g
V3JpdGUgZGF0YSB1bnRpbCBhbGwgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBhdWRpbyBz
aW5rLgotICAgICAgICAvLyBVcG9uIHJldHVybiwgdGhlIGJ1ZmZlciBwb3NpdGlvbiB3aWxsIGhh
dmUgYmVlbiBhZHZhbmNlZCB0byByZWZsZWN0Ci0gICAgICAgIC8vIHRoZSBhbW91bnQgb2YgZGF0
YSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbiB0byB0aGUgQXVkaW9UcmFjay4KLSAgICAg
ICAgYXNzZXJ0VHJ1ZShzaXplSW5CeXRlcyA8PSBieXRlQnVmZmVyLnJlbWFpbmluZygpKTsKLSAg
ICAgICAgaWYgKHNwZWFrZXJNdXRlKSB7Ci0gICAgICAgICAgYnl0ZUJ1ZmZlci5jbGVhcigpOwot
ICAgICAgICAgIGJ5dGVCdWZmZXIucHV0KGVtcHR5Qnl0ZXMpOwotICAgICAgICAgIGJ5dGVCdWZm
ZXIucG9zaXRpb24oMCk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50IGJ5dGVzV3JpdHRlbiA9IDA7
Ci0gICAgICAgIGlmIChXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdPbkxvbGxpcG9wT3JIaWdoZXIo
KSkgewotICAgICAgICAgIGJ5dGVzV3JpdHRlbiA9IHdyaXRlT25Mb2xsaXBvcChhdWRpb1RyYWNr
LCBieXRlQnVmZmVyLCBzaXplSW5CeXRlcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
Ynl0ZXNXcml0dGVuID0gd3JpdGVQcmVMb2xsaXBvcChhdWRpb1RyYWNrLCBieXRlQnVmZmVyLCBz
aXplSW5CeXRlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiAhPSBzaXpl
SW5CeXRlcykgewotICAgICAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpb1RyYWNrLndyaXRlIGZh
aWxlZDogIiArIGJ5dGVzV3JpdHRlbik7Ci0gICAgICAgICAgaWYgKGJ5dGVzV3JpdHRlbiA9PSBB
dWRpb1RyYWNrLkVSUk9SX0lOVkFMSURfT1BFUkFUSU9OKSB7Ci0gICAgICAgICAgICBrZWVwQWxp
dmUgPSBmYWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhlIGJ5dGUg
YnVmZmVyIG11c3QgYmUgcmV3aW5kZWQgc2luY2UgYnl0ZUJ1ZmZlci5wb3NpdGlvbigpIGlzCi0g
ICAgICAgIC8vIGluY3JlYXNlZCBhdCBlYWNoIGNhbGwgdG8gQXVkaW9UcmFjay53cml0ZSgpLiBJ
ZiB3ZSBkb24ndCBkbyB0aGlzLAotICAgICAgICAvLyBuZXh0IGNhbGwgdG8gQXVkaW9UcmFjay53
cml0ZSgpIHdpbGwgZmFpbC4KLSAgICAgICAgYnl0ZUJ1ZmZlci5yZXdpbmQoKTsKLQotICAgICAg
ICAvLyBUT0RPKGhlbnJpa2EpOiBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUgYSBkZWxheSBlc3Rp
bWF0ZSBoZXJlIGJ5Ci0gICAgICAgIC8vIGNvdW50aW5nIG51bWJlciBvZiB3cml0dGVuIGZyYW1l
cyBhbmQgc3VidHJhY3RpbmcgdGhlIHJlc3VsdCBmcm9tCi0gICAgICAgIC8vIGF1ZGlvVHJhY2su
Z2V0UGxheWJhY2tIZWFkUG9zaXRpb24oKS4KLSAgICAgIH0KLQotICAgICAgdHJ5IHsKLSAgICAg
ICAgYXVkaW9UcmFjay5zdG9wKCk7Ci0gICAgICB9IGNhdGNoIChJbGxlZ2FsU3RhdGVFeGNlcHRp
b24gZSkgewotICAgICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5zdG9wIGZhaWxlZDog
IiArIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAgIH0KLSAgICAgIGFzc2VydFRydWUoYXVkaW9UcmFj
ay5nZXRQbGF5U3RhdGUoKSA9PSBBdWRpb1RyYWNrLlBMQVlTVEFURV9TVE9QUEVEKTsKLSAgICAg
IGF1ZGlvVHJhY2suZmx1c2goKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCB3cml0ZU9uTG9s
bGlwb3AoQXVkaW9UcmFjayBhdWRpb1RyYWNrLCBCeXRlQnVmZmVyIGJ5dGVCdWZmZXIsIGludCBz
aXplSW5CeXRlcykgewotICAgICAgcmV0dXJuIGF1ZGlvVHJhY2sud3JpdGUoYnl0ZUJ1ZmZlciwg
c2l6ZUluQnl0ZXMsIEF1ZGlvVHJhY2suV1JJVEVfQkxPQ0tJTkcpOwotICAgIH0KLQotICAgIHBy
aXZhdGUgaW50IHdyaXRlUHJlTG9sbGlwb3AoQXVkaW9UcmFjayBhdWRpb1RyYWNrLCBCeXRlQnVm
ZmVyIGJ5dGVCdWZmZXIsIGludCBzaXplSW5CeXRlcykgewotICAgICAgcmV0dXJuIGF1ZGlvVHJh
Y2sud3JpdGUoYnl0ZUJ1ZmZlci5hcnJheSgpLCBieXRlQnVmZmVyLmFycmF5T2Zmc2V0KCksIHNp
emVJbkJ5dGVzKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBqb2luVGhyZWFkKCkgewotICAg
ICAga2VlcEFsaXZlID0gZmFsc2U7Ci0gICAgICB3aGlsZSAoaXNBbGl2ZSgpKSB7Ci0gICAgICAg
IHRyeSB7Ci0gICAgICAgICAgam9pbigpOwotICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4
Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgLy8gSWdub3JlLgotICAgICAgICB9Ci0gICAgICB9Ci0g
ICAgfQotICB9Ci0KLSAgV2ViUnRjQXVkaW9UcmFjayhDb250ZXh0IGNvbnRleHQsIGxvbmcgbmF0
aXZlQXVkaW9UcmFjaykgewotICAgIExvZ2dpbmcuZChUQUcsICJjdG9yIiArIFdlYlJ0Y0F1ZGlv
VXRpbHMuZ2V0VGhyZWFkSW5mbygpKTsKLSAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAg
IHRoaXMubmF0aXZlQXVkaW9UcmFjayA9IG5hdGl2ZUF1ZGlvVHJhY2s7Ci0gICAgYXVkaW9NYW5h
Z2VyID0gKEF1ZGlvTWFuYWdlcikgY29udGV4dC5nZXRTeXN0ZW1TZXJ2aWNlKENvbnRleHQuQVVE
SU9fU0VSVklDRSk7Ci0gICAgaWYgKERFQlVHKSB7Ci0gICAgICBXZWJSdGNBdWRpb1V0aWxzLmxv
Z0RldmljZUluZm8oVEFHKTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gaW5pdFBs
YXlvdXQoaW50IHNhbXBsZVJhdGUsIGludCBjaGFubmVscykgewotICAgIExvZ2dpbmcuZChUQUcs
ICJpbml0UGxheW91dChzYW1wbGVSYXRlPSIgKyBzYW1wbGVSYXRlICsgIiwgY2hhbm5lbHM9IiAr
IGNoYW5uZWxzICsgIikiKTsKLSAgICBmaW5hbCBpbnQgYnl0ZXNQZXJGcmFtZSA9IGNoYW5uZWxz
ICogKEJJVFNfUEVSX1NBTVBMRSAvIDgpOwotICAgIGJ5dGVCdWZmZXIgPSBieXRlQnVmZmVyLmFs
bG9jYXRlRGlyZWN0KGJ5dGVzUGVyRnJhbWUgKiAoc2FtcGxlUmF0ZSAvIEJVRkZFUlNfUEVSX1NF
Q09ORCkpOwotICAgIExvZ2dpbmcuZChUQUcsICJieXRlQnVmZmVyLmNhcGFjaXR5OiAiICsgYnl0
ZUJ1ZmZlci5jYXBhY2l0eSgpKTsKLSAgICBlbXB0eUJ5dGVzID0gbmV3IGJ5dGVbYnl0ZUJ1ZmZl
ci5jYXBhY2l0eSgpXTsKLSAgICAvLyBSYXRoZXIgdGhhbiBwYXNzaW5nIHRoZSBCeXRlQnVmZmVy
IHdpdGggZXZlcnkgY2FsbGJhY2sgKHJlcXVpcmluZwotICAgIC8vIHRoZSBwb3RlbnRpYWxseSBl
eHBlbnNpdmUgR2V0RGlyZWN0QnVmZmVyQWRkcmVzcykgd2Ugc2ltcGx5IGhhdmUgdGhlCi0gICAg
Ly8gdGhlIG5hdGl2ZSBjbGFzcyBjYWNoZSB0aGUgYWRkcmVzcyB0byB0aGUgbWVtb3J5IG9uY2Uu
Ci0gICAgbmF0aXZlQ2FjaGVEaXJlY3RCdWZmZXJBZGRyZXNzKGJ5dGVCdWZmZXIsIG5hdGl2ZUF1
ZGlvVHJhY2spOwotCi0gICAgLy8gR2V0IHRoZSBtaW5pbXVtIGJ1ZmZlciBzaXplIHJlcXVpcmVk
IGZvciB0aGUgc3VjY2Vzc2Z1bCBjcmVhdGlvbiBvZiBhbgotICAgIC8vIEF1ZGlvVHJhY2sgb2Jq
ZWN0IHRvIGJlIGNyZWF0ZWQgaW4gdGhlIE1PREVfU1RSRUFNIG1vZGUuCi0gICAgLy8gTm90ZSB0
aGF0IHRoaXMgc2l6ZSBkb2Vzbid0IGd1YXJhbnRlZSBhIHNtb290aCBwbGF5YmFjayB1bmRlciBs
b2FkLgotICAgIC8vIFRPRE8oaGVucmlrYSk6IHNob3VsZCB3ZSBleHRlbmQgdGhlIGJ1ZmZlciBz
aXplIHRvIGF2b2lkIGdsaXRjaGVzPwotICAgIGZpbmFsIGludCBtaW5CdWZmZXJTaXplSW5CeXRl
cyA9IEF1ZGlvVHJhY2suZ2V0TWluQnVmZmVyU2l6ZSgKLSAgICAgICAgc2FtcGxlUmF0ZSwgQXVk
aW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTywgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklU
KTsKLSAgICBMb2dnaW5nLmQoVEFHLCAiQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplOiAiICsg
bWluQnVmZmVyU2l6ZUluQnl0ZXMpOwotICAgIC8vIEZvciB0aGUgc3RyZWFtaW5nIG1vZGUsIGRh
dGEgbXVzdCBiZSB3cml0dGVuIHRvIHRoZSBhdWRpbyBzaW5rIGluCi0gICAgLy8gY2h1bmtzIG9m
IHNpemUgKGdpdmVuIGJ5IGJ5dGVCdWZmZXIuY2FwYWNpdHkoKSkgbGVzcyB0aGFuIG9yIGVxdWFs
Ci0gICAgLy8gdG8gdGhlIHRvdGFsIGJ1ZmZlciBzaXplIHxtaW5CdWZmZXJTaXplSW5CeXRlc3wu
IEJ1dCwgd2UgaGF2ZSBzZWVuCi0gICAgLy8gcmVwb3J0cyBvZiAiZ2V0TWluQnVmZmVyU2l6ZSgp
OiBlcnJvciBxdWVyeWluZyBoYXJkd2FyZSIuIEhlbmNlLCBpdAotICAgIC8vIGNhbiBoYXBwZW4g
dGhhdCB8bWluQnVmZmVyU2l6ZUluQnl0ZXN8IGNvbnRhaW5zIGFuIGludmFsaWQgdmFsdWUuCi0g
ICAgaWYgKG1pbkJ1ZmZlclNpemVJbkJ5dGVzIDwgYnl0ZUJ1ZmZlci5jYXBhY2l0eSgpKSB7Ci0g
ICAgICBMb2dnaW5nLmUoVEFHLCAiQXVkaW9UcmFjay5nZXRNaW5CdWZmZXJTaXplIHJldHVybnMg
YW4gaW52YWxpZCB2YWx1ZS4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAv
LyBFbnN1cmUgdGhhdCBwcmV2aXNpb24gYXVkaW8gc2Vzc2lvbiB3YXMgc3RvcHBlZCBjb3JyZWN0
bHkgYmVmb3JlIHRyeWluZwotICAgIC8vIHRvIGNyZWF0ZSBhIG5ldyBBdWRpb1RyYWNrLgotICAg
IGlmIChhdWRpb1RyYWNrICE9IG51bGwpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJDb25mbGlj
dCB3aXRoIGV4aXN0aW5nIEF1ZGlvVHJhY2suIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHRyeSB7Ci0gICAgICAvLyBDcmVhdGUgYW4gQXVkaW9UcmFjayBvYmplY3QgYW5kIGlu
aXRpYWxpemUgaXRzIGFzc29jaWF0ZWQgYXVkaW8gYnVmZmVyLgotICAgICAgLy8gVGhlIHNpemUg
b2YgdGhpcyBidWZmZXIgZGV0ZXJtaW5lcyBob3cgbG9uZyBhbiBBdWRpb1RyYWNrIGNhbiBwbGF5
Ci0gICAgICAvLyBiZWZvcmUgcnVubmluZyBvdXQgb2YgZGF0YS4KLSAgICAgIGF1ZGlvVHJhY2sg
PQotICAgICAgICAgIG5ldyBBdWRpb1RyYWNrKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FM
TCwgc2FtcGxlUmF0ZSwgQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTywKLSAgICAgICAgICAg
ICAgQXVkaW9Gb3JtYXQuRU5DT0RJTkdfUENNXzE2QklULCBtaW5CdWZmZXJTaXplSW5CeXRlcywg
QXVkaW9UcmFjay5NT0RFX1NUUkVBTSk7Ci0gICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhj
ZXB0aW9uIGUpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsIGUuZ2V0TWVzc2FnZSgpKTsKLSAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBJdCBjYW4gaGFwcGVuIHRoYXQgYW4gQXVk
aW9UcmFjayBpcyBjcmVhdGVkIGJ1dCBpdCB3YXMgbm90IHN1Y2Nlc3NmdWxseQotICAgIC8vIGlu
aXRpYWxpemVkIHVwb24gY3JlYXRpb24uIFNlZW1zIHRvIGJlIHRoZSBjYXNlIGUuZy4gd2hlbiB0
aGUgbWF4aW11bQotICAgIC8vIG51bWJlciBvZiBnbG9iYWxseSBhdmFpbGFibGUgYXVkaW8gdHJh
Y2tzIGlzIGV4Y2VlZGVkLgotICAgIGlmIChhdWRpb1RyYWNrLmdldFN0YXRlKCkgIT0gQXVkaW9U
cmFjay5TVEFURV9JTklUSUFMSVpFRCkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkluaXRpYWxp
emF0aW9uIG9mIGF1ZGlvIHRyYWNrIGZhaWxlZC4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgLy8gVmVyaWZ5IHRoYXQgYWxsIGF1ZGlvIHBhcmFtZXRlcnMgYXJlIHZhbGlkIGFu
ZCBjb3JyZWN0LgotICAgIGlmICghYXJlUGFyYW1ldGVyc1ZhbGlkKHNhbXBsZVJhdGUsIGNoYW5u
ZWxzKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIkF0IGxlYXN0IG9uZSBhdWRpbyB0cmFjayBw
YXJhbWV0ZXIgaXMgaW52YWxpZC4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAg
bG9nTWFpblBhcmFtZXRlcnMoKTsKLSAgICBsb2dNYWluUGFyYW1ldGVyc0V4dGVuZGVkKCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBwcml2YXRlIGJvb2xlYW4gc3RhcnRQbGF5b3V0KCkg
ewotICAgIExvZ2dpbmcuZChUQUcsICJzdGFydFBsYXlvdXQiKTsKLSAgICBhc3NlcnRUcnVlKGF1
ZGlvVHJhY2sgIT0gbnVsbCk7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCA9PSBudWxsKTsK
LSAgICBpZiAoYXVkaW9UcmFjay5nZXRTdGF0ZSgpICE9IEF1ZGlvVHJhY2suU1RBVEVfSU5JVElB
TElaRUQpIHsKLSAgICAgIExvZ2dpbmcuZShUQUcsICJBdWRpbyB0cmFjayBpcyBub3Qgc3VjY2Vz
c2Z1bGx5IGluaXRpYWxpemVkLiIpOwotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBh
dWRpb1RocmVhZCA9IG5ldyBBdWRpb1RyYWNrVGhyZWFkKCJBdWRpb1RyYWNrSmF2YVRocmVhZCIp
OwotICAgIGF1ZGlvVGhyZWFkLnN0YXJ0KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBw
cml2YXRlIGJvb2xlYW4gc3RvcFBsYXlvdXQoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgInN0b3BQ
bGF5b3V0Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb1RocmVhZCAhPSBudWxsKTsKLSAgICBsb2dV
bmRlcnJ1bkNvdW50KCk7Ci0gICAgYXVkaW9UaHJlYWQuam9pblRocmVhZCgpOwotICAgIGF1ZGlv
VGhyZWFkID0gbnVsbDsKLSAgICBpZiAoYXVkaW9UcmFjayAhPSBudWxsKSB7Ci0gICAgICBhdWRp
b1RyYWNrLnJlbGVhc2UoKTsKLSAgICAgIGF1ZGlvVHJhY2sgPSBudWxsOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIC8vIEdldCBtYXggcG9zc2libGUgdm9sdW1lIGluZGV4IGZv
ciBhIHBob25lIGNhbGwgYXVkaW8gc3RyZWFtLgotICBwcml2YXRlIGludCBnZXRTdHJlYW1NYXhW
b2x1bWUoKSB7Ci0gICAgTG9nZ2luZy5kKFRBRywgImdldFN0cmVhbU1heFZvbHVtZSIpOwotICAg
IGFzc2VydFRydWUoYXVkaW9NYW5hZ2VyICE9IG51bGwpOwotICAgIHJldHVybiBhdWRpb01hbmFn
ZXIuZ2V0U3RyZWFtTWF4Vm9sdW1lKEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCk7Ci0g
IH0KLQotICAvLyBTZXQgY3VycmVudCB2b2x1bWUgbGV2ZWwgZm9yIGEgcGhvbmUgY2FsbCBhdWRp
byBzdHJlYW0uCi0gIHByaXZhdGUgYm9vbGVhbiBzZXRTdHJlYW1Wb2x1bWUoaW50IHZvbHVtZSkg
ewotICAgIExvZ2dpbmcuZChUQUcsICJzZXRTdHJlYW1Wb2x1bWUoIiArIHZvbHVtZSArICIpIik7
Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb01hbmFnZXIgIT0gbnVsbCk7Ci0gICAgaWYgKGlzVm9sdW1l
Rml4ZWQoKSkgewotICAgICAgTG9nZ2luZy5lKFRBRywgIlRoZSBkZXZpY2UgaW1wbGVtZW50cyBh
IGZpeGVkIHZvbHVtZSBwb2xpY3kuIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGF1ZGlvTWFuYWdlci5zZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9D
QUxMLCB2b2x1bWUsIDApOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgcHJpdmF0ZSBib29s
ZWFuIGlzVm9sdW1lRml4ZWQoKSB7Ci0gICAgaWYgKCFXZWJSdGNBdWRpb1V0aWxzLnJ1bm5pbmdP
bkxvbGxpcG9wT3JIaWdoZXIoKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYXVk
aW9NYW5hZ2VyLmlzVm9sdW1lRml4ZWQoKTsKLSAgfQotCi0gIC8qKiBHZXQgY3VycmVudCB2b2x1
bWUgbGV2ZWwgZm9yIGEgcGhvbmUgY2FsbCBhdWRpbyBzdHJlYW0uICovCi0gIHByaXZhdGUgaW50
IGdldFN0cmVhbVZvbHVtZSgpIHsKLSAgICBMb2dnaW5nLmQoVEFHLCAiZ2V0U3RyZWFtVm9sdW1l
Iik7Ci0gICAgYXNzZXJ0VHJ1ZShhdWRpb01hbmFnZXIgIT0gbnVsbCk7Ci0gICAgcmV0dXJuIGF1
ZGlvTWFuYWdlci5nZXRTdHJlYW1Wb2x1bWUoQXVkaW9NYW5hZ2VyLlNUUkVBTV9WT0lDRV9DQUxM
KTsKLSAgfQotCi0gIC8vIFZlcmlmaWVzIHRoYXQgdGhlIGF1ZGlvIHRyYWNrIGlzIHVzaW5nIGNv
cnJlY3QgcGFyYW1ldGVycywgaS5lLiwgdGhhdCB0aGUKLSAgLy8gY3JlYXRlZCB0cmFjayB1c2Vz
IHRoZSBwYXJhbWV0ZXJzIHRoYXQgd2UgYXNrZWQgZm9yLgotICBwcml2YXRlIGJvb2xlYW4gYXJl
UGFyYW1ldGVyc1ZhbGlkKGludCBzYW1wbGVSYXRlLCBpbnQgY2hhbm5lbHMpIHsKLSAgICBmaW5h
bCBpbnQgc3RyZWFtVHlwZSA9IGF1ZGlvVHJhY2suZ2V0U3RyZWFtVHlwZSgpOwotICAgIHJldHVy
biAoYXVkaW9UcmFjay5nZXRBdWRpb0Zvcm1hdCgpID09IEF1ZGlvRm9ybWF0LkVOQ09ESU5HX1BD
TV8xNkJJVAotICAgICAgICAmJiBhdWRpb1RyYWNrLmdldENoYW5uZWxDb25maWd1cmF0aW9uKCkg
PT0gQXVkaW9Gb3JtYXQuQ0hBTk5FTF9PVVRfTU9OTwotICAgICAgICAmJiBzdHJlYW1UeXBlID09
IEF1ZGlvTWFuYWdlci5TVFJFQU1fVk9JQ0VfQ0FMTCAmJiBhdWRpb1RyYWNrLmdldFNhbXBsZVJh
dGUoKSA9PSBzYW1wbGVSYXRlCi0gICAgICAgICYmIHNhbXBsZVJhdGUgPT0gYXVkaW9UcmFjay5n
ZXROYXRpdmVPdXRwdXRTYW1wbGVSYXRlKHN0cmVhbVR5cGUpCi0gICAgICAgICYmIGF1ZGlvVHJh
Y2suZ2V0Q2hhbm5lbENvdW50KCkgPT0gY2hhbm5lbHMpOwotICB9Ci0KLSAgcHJpdmF0ZSB2b2lk
IGxvZ01haW5QYXJhbWV0ZXJzKCkgewotICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrOiAi
Ci0gICAgICAgICAgICArICJzZXNzaW9uIElEOiAiICsgYXVkaW9UcmFjay5nZXRBdWRpb1Nlc3Np
b25JZCgpICsgIiwgIgotICAgICAgICAgICAgKyAiY2hhbm5lbHM6ICIgKyBhdWRpb1RyYWNrLmdl
dENoYW5uZWxDb3VudCgpICsgIiwgIgotICAgICAgICAgICAgKyAic2FtcGxlIHJhdGU6ICIgKyBh
dWRpb1RyYWNrLmdldFNhbXBsZVJhdGUoKSArICIsICIKLSAgICAgICAgICAgIC8vIEdhaW4gKD49
MS4wKSBleHByZXNzZWQgYXMgbGluZWFyIG11bHRpcGxpZXIgb24gc2FtcGxlIHZhbHVlcy4KLSAg
ICAgICAgICAgICsgIm1heCBnYWluOiAiICsgYXVkaW9UcmFjay5nZXRNYXhWb2x1bWUoKSk7Ci0g
IH0KLQotICBwcml2YXRlIHZvaWQgbG9nTWFpblBhcmFtZXRlcnNFeHRlbmRlZCgpIHsKLSAgICBp
ZiAoV2ViUnRjQXVkaW9VdGlscy5ydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkpIHsKLSAg
ICAgIExvZ2dpbmcuZChUQUcsICJBdWRpb1RyYWNrOiAiCi0gICAgICAgICAgICAgIC8vIFRoZSBl
ZmZlY3RpdmUgc2l6ZSBvZiB0aGUgQXVkaW9UcmFjayBidWZmZXIgdGhhdCB0aGUgYXBwIHdyaXRl
cyB0by4KLSAgICAgICAgICAgICAgKyAiYnVmZmVyIHNpemUgaW4gZnJhbWVzOiAiICsgYXVkaW9U
cmFjay5nZXRCdWZmZXJTaXplSW5GcmFtZXMoKSk7Ci0gICAgfQotICAgIGlmIChXZWJSdGNBdWRp
b1V0aWxzLnJ1bm5pbmdPbk5vdWdhdE9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcs
ICJBdWRpb1RyYWNrOiAiCi0gICAgICAgICAgICAgIC8vIE1heGltdW0gc2l6ZSBvZiB0aGUgQXVk
aW9UcmFjayBidWZmZXIgaW4gZnJhbWVzLgotICAgICAgICAgICAgICArICJidWZmZXIgY2FwYWNp
dHkgaW4gZnJhbWVzOiAiICsgYXVkaW9UcmFjay5nZXRCdWZmZXJDYXBhY2l0eUluRnJhbWVzKCkp
OwotICAgIH0KLSAgfQotCi0gIC8vIFByaW50cyB0aGUgbnVtYmVyIG9mIHVuZGVycnVuIG9jY3Vy
cmVuY2VzIGluIHRoZSBhcHBsaWNhdGlvbi1sZXZlbCB3cml0ZQotICAvLyBidWZmZXIgc2luY2Ug
dGhlIEF1ZGlvVHJhY2sgd2FzIGNyZWF0ZWQuIEFuIHVuZGVycnVuIG9jY3VycyBpZiB0aGUgYXBw
IGRvZXMKLSAgLy8gbm90IHdyaXRlIGF1ZGlvIGRhdGEgcXVpY2tseSBlbm91Z2gsIGNhdXNpbmcg
dGhlIGJ1ZmZlciB0byB1bmRlcmZsb3cgYW5kIGEKLSAgLy8gcG90ZW50aWFsIGF1ZGlvIGdsaXRj
aC4KLSAgLy8gVE9ETyhoZW5yaWthKToga2VlcCB0cmFjayBvZiB0aGlzIHZhbHVlIGluIHRoZSBm
aWVsZCBhbmQgcG9zc2libHkgYWRkIG5ldwotICAvLyBVTUEgc3RhdCBpZiBuZWVkZWQuCi0gIHBy
aXZhdGUgdm9pZCBsb2dVbmRlcnJ1bkNvdW50KCkgewotICAgIGlmIChXZWJSdGNBdWRpb1V0aWxz
LnJ1bm5pbmdPbk5vdWdhdE9ySGlnaGVyKCkpIHsKLSAgICAgIExvZ2dpbmcuZChUQUcsICJ1bmRl
cnJ1biBjb3VudDogIiArIGF1ZGlvVHJhY2suZ2V0VW5kZXJydW5Db3VudCgpKTsKLSAgICB9Ci0g
IH0KLQotICAvLyBIZWxwZXIgbWV0aG9kIHdoaWNoIHRocm93cyBhbiBleGNlcHRpb24gIHdoZW4g
YW4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuCi0gIHByaXZhdGUgc3RhdGljIHZvaWQgYXNzZXJ0VHJ1
ZShib29sZWFuIGNvbmRpdGlvbikgewotICAgIGlmICghY29uZGl0aW9uKSB7Ci0gICAgICB0aHJv
dyBuZXcgQXNzZXJ0aW9uRXJyb3IoIkV4cGVjdGVkIGNvbmRpdGlvbiB0byBiZSB0cnVlIik7Ci0g
ICAgfQotICB9Ci0KLSAgcHJpdmF0ZSBuYXRpdmUgdm9pZCBuYXRpdmVDYWNoZURpcmVjdEJ1ZmZl
ckFkZHJlc3MoQnl0ZUJ1ZmZlciBieXRlQnVmZmVyLCBsb25nIG5hdGl2ZUF1ZGlvUmVjb3JkKTsK
LQotICBwcml2YXRlIG5hdGl2ZSB2b2lkIG5hdGl2ZUdldFBsYXlvdXREYXRhKGludCBieXRlcywg
bG9uZyBuYXRpdmVBdWRpb1JlY29yZCk7Ci0KLSAgLy8gU2V0cyBhbGwgc2FtcGxlcyB0byBiZSBw
bGF5ZWQgb3V0IHRvIHplcm8gaWYgfG11dGV8IGlzIHRydWUsIGkuZS4sCi0gIC8vIGVuc3VyZXMg
dGhhdCB0aGUgc3BlYWtlciBpcyBtdXRlZC4KLSAgcHVibGljIHN0YXRpYyB2b2lkIHNldFNwZWFr
ZXJNdXRlKGJvb2xlYW4gbXV0ZSkgewotICAgIExvZ2dpbmcudyhUQUcsICJzZXRTcGVha2VyTXV0
ZSgiICsgbXV0ZSArICIpIik7Ci0gICAgc3BlYWtlck11dGUgPSBtdXRlOwotICB9Ci19CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X2RldmljZS9hbmRyb2lkL2phdmEvc3JjL29yZy93ZWJydGMvdm9pY2VlbmdpbmUvV2ViUnRjQXVk
aW9VdGlscy5qYXZhCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dl
YnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNBdWRpb1V0aWxzLmphdmEJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fZGV2aWNlL2FuZHJvaWQvamF2YS9zcmMvb3JnL3dlYnJ0Yy92b2ljZWVuZ2luZS9XZWJSdGNB
dWRpb1V0aWxzLmphdmEJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMDIgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5
IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFs
IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4g
dGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQot
ICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZSB0cmVlLgotICovCi0KLXBhY2thZ2Ugb3JnLndlYnJ0Yy52b2ljZWVuZ2luZTsKLQotaW1wb3J0
IG9yZy53ZWJydGMuTG9nZ2luZzsKLQotaW1wb3J0IGFuZHJvaWQuY29udGVudC5Db250ZXh0Owot
aW1wb3J0IGFuZHJvaWQuY29udGVudC5wbS5QYWNrYWdlTWFuYWdlcjsKLWltcG9ydCBhbmRyb2lk
Lm9zLkJ1aWxkOwotaW1wb3J0IGFuZHJvaWQub3MuUHJvY2VzczsKLQotaW1wb3J0IGphdmEubGFu
Zy5UaHJlYWQ7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuTGlz
dDsKLQotcHVibGljIGZpbmFsIGNsYXNzIFdlYlJ0Y0F1ZGlvVXRpbHMgewotICBwcml2YXRlIHN0
YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIldlYlJ0Y0F1ZGlvVXRpbHMiOwotCi0gIC8vIExpc3Qg
b2YgZGV2aWNlcyB3aGVyZSB3ZSBoYXZlIHNlZW4gaXNzdWVzIChlLmcuIGJhZCBhdWRpbyBxdWFs
aXR5KSB1c2luZwotICAvLyB0aGUgbG93IGxhdGVuY3kgb3V0cHV0IG1vZGUgaW4gY29tYmluYXRp
b24gd2l0aCBPcGVuU0wgRVMuCi0gIC8vIFRoZSBkZXZpY2UgbmFtZSBpcyBnaXZlbiBieSBCdWls
ZC5NT0RFTC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nW10gQkxBQ0tMSVNURURfT1BF
Tl9TTF9FU19NT0RFTFMgPSBuZXcgU3RyaW5nW10gewotICAgICAgLy8gVGhpcyBsaXN0IGlzIGN1
cnJlbnRseSBlbXB0eSA7LSkKLSAgfTsKLQotICAvLyBMaXN0IG9mIGRldmljZXMgd2hlcmUgaXQg
aGFzIGJlZW4gdmVyaWZpZWQgdGhhdCB0aGUgYnVpbHQtaW4gZWZmZWN0Ci0gIC8vIGJhZCBhbmQg
d2hlcmUgaXQgbWFrZXMgc2Vuc2UgdG8gYXZvaWQgdXNpbmcgaXQgYW5kIGluc3RlYWQgcmVseSBv
biB0aGUKLSAgLy8gbmF0aXZlIFdlYlJUQyB2ZXJzaW9uIGluc3RlYWQuIFRoZSBkZXZpY2UgbmFt
ZSBpcyBnaXZlbiBieSBCdWlsZC5NT0RFTC4KLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5n
W10gQkxBQ0tMSVNURURfQUVDX01PREVMUyA9IG5ldyBTdHJpbmdbXSB7Ci0gICAgICAiRDY1MDMi
LCAvLyBTb255IFhwZXJpYSBaMiBENjUwMwotICAgICAgIk9ORSBBMjAwNSIsIC8vIE9uZVBsdXMg
MgotICAgICAgIk1vdG9HMyIsIC8vIE1vdG8gRyAoM3JkIEdlbmVyYXRpb24pCi0gIH07Ci0gIHBy
aXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEJMQUNLTElTVEVEX05TX01PREVMUyA9IG5ldyBT
dHJpbmdbXSB7Ci0gICAgICAiTmV4dXMgMTAiLCAiTmV4dXMgOSIsCi0gICAgICAiT05FIEEyMDA1
IiwgLy8gT25lUGx1cyAyCi0gIH07Ci0KLSAgLy8gVXNlIDE2a0h6IGFzIHRoZSBkZWZhdWx0IHNh
bXBsZSByYXRlLiBBIGhpZ2hlciBzYW1wbGUgcmF0ZSBtaWdodCBwcmV2ZW50Ci0gIC8vIHVzIGZy
b20gc3VwcG9ydGluZyBjb21tdW5pY2F0aW9uIG1vZGUgb24gc29tZSBvbGRlciAoZS5nLiBJQ1Mp
IGRldmljZXMuCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBERUZBVUxUX1NBTVBMRV9SQVRF
X0haID0gMTYwMDA7Ci0gIHByaXZhdGUgc3RhdGljIGludCBkZWZhdWx0U2FtcGxlUmF0ZUh6ID0g
REVGQVVMVF9TQU1QTEVfUkFURV9IWjsKLSAgLy8gU2V0IHRvIHRydWUgaWYgc2V0RGVmYXVsdFNh
bXBsZVJhdGVIeigpIGhhcyBiZWVuIGNhbGxlZC4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBp
c0RlZmF1bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbiA9IGZhbHNlOwotCi0gIC8vIEJ5IGRlZmF1bHQs
IHV0aWxpemUgaGFyZHdhcmUgYmFzZWQgYXVkaW8gZWZmZWN0cyBmb3IgQUVDIGFuZCBOUyB3aGVu
Ci0gIC8vIGF2YWlsYWJsZS4KLSAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB1c2VXZWJSdGNCYXNl
ZEFjb3VzdGljRWNob0NhbmNlbGVyID0gZmFsc2U7Ci0gIHByaXZhdGUgc3RhdGljIGJvb2xlYW4g
dXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IgPSBmYWxzZTsKLQotICAvLyBDYWxsIHRoZXNl
IG1ldGhvZHMgaWYgYW55IGhhcmR3YXJlIGJhc2VkIGVmZmVjdCBzaGFsbCBiZSByZXBsYWNlZCBi
eSBhCi0gIC8vIHNvZnR3YXJlIGJhc2VkIHZlcnNpb24gcHJvdmlkZWQgYnkgdGhlIFdlYlJUQyBz
dGFjayBpbnN0ZWFkLgotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFdlYlJ0
Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXIoYm9vbGVhbiBlbmFibGUpIHsKLSAgICB1c2VXZWJS
dGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyID0gZW5hYmxlOwotICB9Ci0gIHB1YmxpYyBzdGF0
aWMgc3luY2hyb25pemVkIHZvaWQgc2V0V2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IoYm9vbGVh
biBlbmFibGUpIHsKLSAgICB1c2VXZWJSdGNCYXNlZE5vaXNlU3VwcHJlc3NvciA9IGVuYWJsZTsK
LSAgfQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIHNldFdlYlJ0Y0Jhc2VkQXV0
b21hdGljR2FpbkNvbnRyb2woYm9vbGVhbiBlbmFibGUpIHsKLSAgICAvLyBUT0RPKGhlbnJpa2Ep
OiBkZXByZWNhdGVkOyByZW1vdmUgd2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50Lgot
ICAgIExvZ2dpbmcudyhUQUcsICJzZXRXZWJSdGNCYXNlZEF1dG9tYXRpY0dhaW5Db250cm9sKCkg
aXMgZGVwcmVjYXRlZCIpOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9v
bGVhbiB1c2VXZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKCkgewotICAgIGlmICh1c2VX
ZWJSdGNCYXNlZEFjb3VzdGljRWNob0NhbmNlbGVyKSB7Ci0gICAgICBMb2dnaW5nLncoVEFHLCAi
T3ZlcnJpZGluZyBkZWZhdWx0IGJlaGF2aW9yOyBub3cgdXNpbmcgV2ViUlRDIEFFQyEiKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHVzZVdlYlJ0Y0Jhc2VkQWNvdXN0aWNFY2hvQ2FuY2VsZXI7Ci0gIH0K
LSAgcHVibGljIHN0YXRpYyBzeW5jaHJvbml6ZWQgYm9vbGVhbiB1c2VXZWJSdGNCYXNlZE5vaXNl
U3VwcHJlc3NvcigpIHsKLSAgICBpZiAodXNlV2ViUnRjQmFzZWROb2lzZVN1cHByZXNzb3IpIHsK
LSAgICAgIExvZ2dpbmcudyhUQUcsICJPdmVycmlkaW5nIGRlZmF1bHQgYmVoYXZpb3I7IG5vdyB1
c2luZyBXZWJSVEMgTlMhIik7Ci0gICAgfQotICAgIHJldHVybiB1c2VXZWJSdGNCYXNlZE5vaXNl
U3VwcHJlc3NvcjsKLSAgfQotICAvLyBUT0RPKGhlbnJpa2EpOiBkZXByZWNhdGVkOyByZW1vdmUg
d2hlbiBubyBsb25nZXIgdXNlZCBieSBhbnkgY2xpZW50LgotICBwdWJsaWMgc3RhdGljIHN5bmNo
cm9uaXplZCBib29sZWFuIHVzZVdlYlJ0Y0Jhc2VkQXV0b21hdGljR2FpbkNvbnRyb2woKSB7Ci0g
ICAgLy8gQWx3YXlzIHJldHVybiB0cnVlIGhlcmUgdG8gYXZvaWQgdHJ5aW5nIHRvIHVzZSBhbnkg
YnVpbHQtaW4gQUdDLgotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVl
IGlmIHRoZSBkZXZpY2Ugc3VwcG9ydHMgYW4gYXVkaW8gZWZmZWN0IChBRUMgb3IgTlMpLgotICAv
LyBGb3VyIGNvbmRpdGlvbnMgbXVzdCBiZSBmdWxmaWxsZWQgaWYgZnVuY3Rpb25zIGFyZSB0byBy
ZXR1cm4gdHJ1ZToKLSAgLy8gMSkgdGhlIHBsYXRmb3JtIG11c3Qgc3VwcG9ydCB0aGUgYnVpbHQt
aW4gKEhXKSBlZmZlY3QsCi0gIC8vIDIpIGV4cGxpY2l0IHVzZSAob3ZlcnJpZGUpIG9mIGEgV2Vi
UlRDIGJhc2VkIHZlcnNpb24gbXVzdCBub3QgYmUgc2V0LAotICAvLyAzKSB0aGUgZGV2aWNlIG11
c3Qgbm90IGJlIGJsYWNrbGlzdGVkIGZvciB1c2Ugb2YgdGhlIGVmZmVjdCwgYW5kCi0gIC8vIDQp
IHRoZSBVVUlEIG9mIHRoZSBlZmZlY3QgbXVzdCBiZSBhcHByb3ZlZCAoc29tZSBVVUlEcyBjYW4g
YmUgZXhjbHVkZWQpLgotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNBY291c3RpY0VjaG9DYW5j
ZWxlclN1cHBvcnRlZCgpIHsKLSAgICByZXR1cm4gV2ViUnRjQXVkaW9FZmZlY3RzLmNhblVzZUFj
b3VzdGljRWNob0NhbmNlbGVyKCk7Ci0gIH0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9p
c2VTdXBwcmVzc29yU3VwcG9ydGVkKCkgewotICAgIHJldHVybiBXZWJSdGNBdWRpb0VmZmVjdHMu
Y2FuVXNlTm9pc2VTdXBwcmVzc29yKCk7Ci0gIH0KLSAgLy8gVE9ETyhoZW5yaWthKTogZGVwcmVj
YXRlZDsgcmVtb3ZlIHdoZW4gbm8gbG9uZ2VyIHVzZWQgYnkgYW55IGNsaWVudC4KLSAgcHVibGlj
IHN0YXRpYyBib29sZWFuIGlzQXV0b21hdGljR2FpbkNvbnRyb2xTdXBwb3J0ZWQoKSB7Ci0gICAg
Ly8gQWx3YXlzIHJldHVybiBmYWxzZSBoZXJlIHRvIGF2b2lkIHRyeWluZyB0byB1c2UgYW55IGJ1
aWx0LWluIEFHQy4KLSAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLQotICAvLyBDYWxsIHRoaXMgbWV0
aG9kIGlmIHRoZSBkZWZhdWx0IGhhbmRsaW5nIG9mIHF1ZXJ5aW5nIHRoZSBuYXRpdmUgc2FtcGxl
Ci0gIC8vIHJhdGUgc2hhbGwgYmUgb3ZlcnJpZGRlbi4gQ2FuIGJlIHVzZWZ1bCBvbiBzb21lIGRl
dmljZXMgd2hlcmUgdGhlCi0gIC8vIGF2YWlsYWJsZSBBbmRyb2lkIEFQSXMgYXJlIGtub3duIHRv
IHJldHVybiBpbnZhbGlkIHJlc3VsdHMuCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZv
aWQgc2V0RGVmYXVsdFNhbXBsZVJhdGVIeihpbnQgc2FtcGxlUmF0ZUh6KSB7Ci0gICAgaXNEZWZh
dWx0U2FtcGxlUmF0ZU92ZXJyaWRkZW4gPSB0cnVlOwotICAgIGRlZmF1bHRTYW1wbGVSYXRlSHog
PSBzYW1wbGVSYXRlSHo7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCBib29s
ZWFuIGlzRGVmYXVsdFNhbXBsZVJhdGVPdmVycmlkZGVuKCkgewotICAgIHJldHVybiBpc0RlZmF1
bHRTYW1wbGVSYXRlT3ZlcnJpZGRlbjsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgc3luY2hyb25p
emVkIGludCBnZXREZWZhdWx0U2FtcGxlUmF0ZUh6KCkgewotICAgIHJldHVybiBkZWZhdWx0U2Ft
cGxlUmF0ZUh6OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0QmxhY2tM
aXN0ZWRNb2RlbHNGb3JBZWNVc2FnZSgpIHsKLSAgICByZXR1cm4gQXJyYXlzLmFzTGlzdChXZWJS
dGNBdWRpb1V0aWxzLkJMQUNLTElTVEVEX0FFQ19NT0RFTFMpOwotICB9Ci0KLSAgcHVibGljIHN0
YXRpYyBMaXN0PFN0cmluZz4gZ2V0QmxhY2tMaXN0ZWRNb2RlbHNGb3JOc1VzYWdlKCkgewotICAg
IHJldHVybiBBcnJheXMuYXNMaXN0KFdlYlJ0Y0F1ZGlvVXRpbHMuQkxBQ0tMSVNURURfTlNfTU9E
RUxTKTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25HaW5nZXJCcmVh
ZE9ySGlnaGVyKCkgewotICAgIC8vIE5vdmVtYmVyIDIwMTA6IEFuZHJvaWQgMi4zLCBBUEkgTGV2
ZWwgOS4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxkLlZFUlNJT05f
Q09ERVMuR0lOR0VSQlJFQUQ7Ci0gIH0KLQotICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gcnVubmlu
Z09uSmVsbHlCZWFuT3JIaWdoZXIoKSB7Ci0gICAgLy8gSnVuZSAyMDEyOiBBbmRyb2lkIDQuMS4g
QVBJIExldmVsIDE2LgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9OLlNES19JTlQgPj0gQnVpbGQu
VkVSU0lPTl9DT0RFUy5KRUxMWV9CRUFOOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFu
IHJ1bm5pbmdPbkplbGx5QmVhbk1SMU9ySGlnaGVyKCkgewotICAgIC8vIE5vdmVtYmVyIDIwMTI6
IEFuZHJvaWQgNC4yLiBBUEkgTGV2ZWwgMTcuCi0gICAgcmV0dXJuIEJ1aWxkLlZFUlNJT04uU0RL
X0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpFTExZX0JFQU5fTVIxOwotICB9Ci0KLSAgcHVi
bGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkplbGx5QmVhbk1SMk9ySGlnaGVyKCkgewotICAg
IC8vIEp1bHkgMjQsIDIwMTM6IEFuZHJvaWQgNC4zLiBBUEkgTGV2ZWwgMTguCi0gICAgcmV0dXJu
IEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLkpFTExZX0JFQU5f
TVIyOwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIHJ1bm5pbmdPbkxvbGxpcG9wT3JI
aWdoZXIoKSB7Ci0gICAgLy8gQVBJIExldmVsIDIxLgotICAgIHJldHVybiBCdWlsZC5WRVJTSU9O
LlNES19JTlQgPj0gQnVpbGQuVkVSU0lPTl9DT0RFUy5MT0xMSVBPUDsKLSAgfQotCi0gIHB1Ymxp
YyBzdGF0aWMgYm9vbGVhbiBydW5uaW5nT25NYXJzaG1hbGxvd09ySGlnaGVyKCkgewotICAgIC8v
IEFQSSBMZXZlbCAyMy4KLSAgICByZXR1cm4gQnVpbGQuVkVSU0lPTi5TREtfSU5UID49IEJ1aWxk
LlZFUlNJT05fQ09ERVMuTTsKLSAgfQotCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBydW5uaW5n
T25Ob3VnYXRPckhpZ2hlcigpIHsKLSAgICAvLyBBUEkgTGV2ZWwgMjQuCi0gICAgcmV0dXJuIEJ1
aWxkLlZFUlNJT04uU0RLX0lOVCA+PSBCdWlsZC5WRVJTSU9OX0NPREVTLk47Ci0gIH0KLQotICAv
LyBIZWxwZXIgbWV0aG9kIGZvciBidWlsZGluZyBhIHN0cmluZyBvZiB0aHJlYWQgaW5mb3JtYXRp
b24uCi0gIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFRocmVhZEluZm8oKSB7Ci0gICAgcmV0dXJu
ICJAW25hbWU9IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpICsgIiwgaWQ9IiAr
IFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0SWQoKQotICAgICAgICArICJdIjsKLSAgfQotCi0g
IC8vIFJldHVybnMgdHJ1ZSBpZiB3ZSdyZSBydW5uaW5nIG9uIGVtdWxhdG9yLgotICBwdWJsaWMg
c3RhdGljIGJvb2xlYW4gcnVubmluZ09uRW11bGF0b3IoKSB7Ci0gICAgcmV0dXJuIEJ1aWxkLkhB
UkRXQVJFLmVxdWFscygiZ29sZGZpc2giKSAmJiBCdWlsZC5CUkFORC5zdGFydHNXaXRoKCJnZW5l
cmljXyIpOwotICB9Ci0KLSAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBkZXZpY2UgaXMgYmxhY2ts
aXN0ZWQgZm9yIE9wZW5TTCBFUyB1c2FnZS4KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGRldmlj
ZUlzQmxhY2tsaXN0ZWRGb3JPcGVuU0xFU1VzYWdlKCkgewotICAgIExpc3Q8U3RyaW5nPiBibGFj
a0xpc3RlZE1vZGVscyA9IEFycmF5cy5hc0xpc3QoQkxBQ0tMSVNURURfT1BFTl9TTF9FU19NT0RF
TFMpOwotICAgIHJldHVybiBibGFja0xpc3RlZE1vZGVscy5jb250YWlucyhCdWlsZC5NT0RFTCk7
Ci0gIH0KLQotICAvLyBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBidWlsZCwgdGFrZW4g
ZnJvbSBzeXN0ZW0gcHJvcGVydGllcy4KLSAgcHVibGljIHN0YXRpYyB2b2lkIGxvZ0RldmljZUlu
Zm8oU3RyaW5nIHRhZykgewotICAgIExvZ2dpbmcuZCh0YWcsICJBbmRyb2lkIFNESzogIiArIEJ1
aWxkLlZFUlNJT04uU0RLX0lOVCArICIsICIKLSAgICAgICAgICAgICsgIlJlbGVhc2U6ICIgKyBC
dWlsZC5WRVJTSU9OLlJFTEVBU0UgKyAiLCAiCi0gICAgICAgICAgICArICJCcmFuZDogIiArIEJ1
aWxkLkJSQU5EICsgIiwgIgotICAgICAgICAgICAgKyAiRGV2aWNlOiAiICsgQnVpbGQuREVWSUNF
ICsgIiwgIgotICAgICAgICAgICAgKyAiSWQ6ICIgKyBCdWlsZC5JRCArICIsICIKLSAgICAgICAg
ICAgICsgIkhhcmR3YXJlOiAiICsgQnVpbGQuSEFSRFdBUkUgKyAiLCAiCi0gICAgICAgICAgICAr
ICJNYW51ZmFjdHVyZXI6ICIgKyBCdWlsZC5NQU5VRkFDVFVSRVIgKyAiLCAiCi0gICAgICAgICAg
ICArICJNb2RlbDogIiArIEJ1aWxkLk1PREVMICsgIiwgIgotICAgICAgICAgICAgKyAiUHJvZHVj
dDogIiArIEJ1aWxkLlBST0RVQ1QpOwotICB9Ci0KLSAgLy8gQ2hlY2tzIGlmIHRoZSBwcm9jZXNz
IGhhcyBhcyBzcGVjaWZpZWQgcGVybWlzc2lvbiBvciBub3QuCi0gIHB1YmxpYyBzdGF0aWMgYm9v
bGVhbiBoYXNQZXJtaXNzaW9uKENvbnRleHQgY29udGV4dCwgU3RyaW5nIHBlcm1pc3Npb24pIHsK
LSAgICByZXR1cm4gY29udGV4dC5jaGVja1Blcm1pc3Npb24ocGVybWlzc2lvbiwgUHJvY2Vzcy5t
eVBpZCgpLCBQcm9jZXNzLm15VWlkKCkpCi0gICAgICAgID09IFBhY2thZ2VNYW5hZ2VyLlBFUk1J
U1NJT05fR1JBTlRFRDsKLSAgfQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYWVjX2R1bXBfYmFz
ZWRfc2ltdWxhdG9yLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FlY19kdW1wX2Jh
c2VkX3NpbXVsYXRvci5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYWVj
X2R1bXBfYmFzZWRfc2ltdWxhdG9yLmNjCShub25leGlzdGVudCkKQEAgLTEsNTM2ICswLDAgQEAK
LS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4g
YWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3Vu
ZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0
aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9m
IHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0KLSNpbmNsdWRl
ICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYWVjX2R1bXBfYmFzZWRfc2lt
dWxhdG9yLmgiCi0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZfdXRpbHMuaCIKLSNp
bmNsdWRlICJ3ZWJydGMvdGVzdC90ZXN0c3VwcG9ydC90cmFjZV90b19zdGRlcnIuaCIKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci1uYW1lc3BhY2UgewotCi0vLyBWZXJp
Znkgb3V0cHV0IGJpdGV4YWN0bmVzcyBmb3IgdGhlIGZpeGVkIGludGVyZmFjZS4KLS8vIFRPRE8o
cGVhaCk6IENoZWNrIHdoZXRoZXIgaXQgd291bGQgbWFrZSBzZW5zZSB0byBhZGQgYSB0aHJlc2hv
bGQKLS8vIHRvIHVzZSBmb3IgY2hlY2tpbmcgdGhlIGJpdGV4YWN0bmVzcyBpbiBhIHNvZnQgbWFu
bmVyLgotYm9vbCBWZXJpZnlGaXhlZEJpdEV4YWN0bmVzcyhjb25zdCB3ZWJydGM6OmF1ZGlvcHJv
Yzo6U3RyZWFtJiBtc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1ZGlv
RnJhbWUmIGZyYW1lKSB7Ci0gIGlmICgoc2l6ZW9mKGludDE2X3QpICogZnJhbWUuc2FtcGxlc19w
ZXJfY2hhbm5lbF8gKiBmcmFtZS5udW1fY2hhbm5lbHNfKSAhPQotICAgICAgbXNnLm91dHB1dF9k
YXRhKCkuc2l6ZSgpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgewotICAgIGZvciAo
c2l6ZV90IGsgPSAwOyBrIDwgZnJhbWUubnVtX2NoYW5uZWxzXyAqIGZyYW1lLnNhbXBsZXNfcGVy
X2NoYW5uZWxfOwotICAgICAgICAgKytrKSB7Ci0gICAgICBpZiAobXNnLm91dHB1dF9kYXRhKCku
ZGF0YSgpW2tdICE9IGZyYW1lLmRhdGFfW2tdKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgIH0KLSAgICB9Ci0gIH0KLSAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIFZlcmlmeSBvdXRwdXQg
Yml0ZXhhY3RuZXNzIGZvciB0aGUgZmxvYXQgaW50ZXJmYWNlLgotYm9vbCBWZXJpZnlGbG9hdEJp
dEV4YWN0bmVzcyhjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6U3RyZWFtJiBtc2csCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmVhbUNvbmZpZyYgb3V0X2NvbmZpZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ2hhbm5lbEJ1ZmZlcjxmbG9hdD4mIG91
dF9idWYpIHsKLSAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4obXNnLm91dHB1dF9jaGFubmVsX3Np
emUoKSkgIT0KLSAgICAgICAgICBvdXRfY29uZmlnLm51bV9jaGFubmVscygpIHx8Ci0gICAgICBt
c2cub3V0cHV0X2NoYW5uZWwoMCkuc2l6ZSgpICE9IG91dF9jb25maWcubnVtX2ZyYW1lcygpKSB7
Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9IGVsc2UgewotICAgIGZvciAoaW50IGNoID0gMDsgY2gg
PCBtc2cub3V0cHV0X2NoYW5uZWxfc2l6ZSgpOyArK2NoKSB7Ci0gICAgICBmb3IgKHNpemVfdCBz
YW1wbGUgPSAwOyBzYW1wbGUgPCBvdXRfY29uZmlnLm51bV9mcmFtZXMoKTsgKytzYW1wbGUpIHsK
LSAgICAgICAgaWYgKG1zZy5vdXRwdXRfY2hhbm5lbChjaCkuZGF0YSgpW3NhbXBsZV0gIT0KLSAg
ICAgICAgICAgIG91dF9idWYuY2hhbm5lbHMoKVtjaF1bc2FtcGxlXSkgewotICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLSAgfQotICByZXR1cm4gdHJ1
ZTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLXZvaWQgQWVjRHVtcEJhc2VkU2ltdWxhdG9yOjpQ
cmVwYXJlUHJvY2Vzc1N0cmVhbUNhbGwoCi0gICAgY29uc3Qgd2VicnRjOjphdWRpb3Byb2M6OlN0
cmVhbSYgbXNnLAotICAgIGJvb2wqIHNldF9zdHJlYW1fYW5hbG9nX2xldmVsX2NhbGxlZCkgewot
ICBpZiAobXNnLmhhc19pbnB1dF9kYXRhKCkpIHsKLSAgICAvLyBGaXhlZCBpbnRlcmZhY2UgcHJv
Y2Vzc2luZy4KLSAgICAvLyBWZXJpZnkgaW50ZXJmYWNlIGludmFyaWFuY2UuCi0gICAgUlRDX0NI
RUNLKGludGVyZmFjZV91c2VkXyA9PSBJbnRlcmZhY2VUeXBlOjprRml4ZWRJbnRlcmZhY2UgfHwK
LSAgICAgICAgICAgICAgaW50ZXJmYWNlX3VzZWRfID09IEludGVyZmFjZVR5cGU6OmtOb3RTcGVj
aWZpZWQpOwotICAgIGludGVyZmFjZV91c2VkXyA9IEludGVyZmFjZVR5cGU6OmtGaXhlZEludGVy
ZmFjZTsKLQotICAgIC8vIFBvcHVsYXRlIGlucHV0IGJ1ZmZlci4KLSAgICBSVENfQ0hFQ0tfRVEo
c2l6ZW9mKGZ3ZF9mcmFtZV8uZGF0YV9bMF0pICogZndkX2ZyYW1lXy5zYW1wbGVzX3Blcl9jaGFu
bmVsXyAqCi0gICAgICAgICAgICAgICAgICAgICBmd2RfZnJhbWVfLm51bV9jaGFubmVsc18sCi0g
ICAgICAgICAgICAgICAgIG1zZy5pbnB1dF9kYXRhKCkuc2l6ZSgpKTsKLSAgICBtZW1jcHkoZndk
X2ZyYW1lXy5kYXRhXywgbXNnLmlucHV0X2RhdGEoKS5kYXRhKCksIG1zZy5pbnB1dF9kYXRhKCku
c2l6ZSgpKTsKLSAgfSBlbHNlIHsKLSAgICAvLyBGbG9hdCBpbnRlcmZhY2UgcHJvY2Vzc2luZy4K
LSAgICAvLyBWZXJpZnkgaW50ZXJmYWNlIGludmFyaWFuY2UuCi0gICAgUlRDX0NIRUNLKGludGVy
ZmFjZV91c2VkXyA9PSBJbnRlcmZhY2VUeXBlOjprRmxvYXRJbnRlcmZhY2UgfHwKLSAgICAgICAg
ICAgICAgaW50ZXJmYWNlX3VzZWRfID09IEludGVyZmFjZVR5cGU6OmtOb3RTcGVjaWZpZWQpOwot
ICAgIGludGVyZmFjZV91c2VkXyA9IEludGVyZmFjZVR5cGU6OmtGbG9hdEludGVyZmFjZTsKLQot
ICAgIFJUQ19DSEVDS19FUShpbl9idWZfLT5udW1fY2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8c2l6ZV90Pihtc2cuaW5wdXRfY2hhbm5lbF9zaXplKCkpKTsKLQotICAg
IC8vIFBvcHVsYXRlIGlucHV0IGJ1ZmZlci4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1zZy5p
bnB1dF9jaGFubmVsX3NpemUoKTsgKytpKSB7Ci0gICAgICBSVENfQ0hFQ0tfRVEoaW5fYnVmXy0+
bnVtX2ZyYW1lcygpICogc2l6ZW9mKCppbl9idWZfLT5jaGFubmVscygpW2ldKSwKLSAgICAgICAg
ICAgICAgICAgICBtc2cuaW5wdXRfY2hhbm5lbChpKS5zaXplKCkpOwotICAgICAgc3RkOjptZW1j
cHkoaW5fYnVmXy0+Y2hhbm5lbHMoKVtpXSwgbXNnLmlucHV0X2NoYW5uZWwoaSkuZGF0YSgpLAot
ICAgICAgICAgICAgICAgICAgbXNnLmlucHV0X2NoYW5uZWwoaSkuc2l6ZSgpKTsKLSAgICB9Ci0g
IH0KLQotICBpZiAoIXNldHRpbmdzXy5zdHJlYW1fZGVsYXkpIHsKLSAgICBpZiAobXNnLmhhc19k
ZWxheSgpKSB7Ci0gICAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwK
LSAgICAgICAgICAgICAgICAgICBhcF8tPnNldF9zdHJlYW1fZGVsYXlfbXMobXNnLmRlbGF5KCkp
KTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6
a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+c2V0X3N0cmVhbV9kZWxheV9tcygqc2V0
dGluZ3NfLnN0cmVhbV9kZWxheSkpOwotICB9Ci0KLSAgaWYgKCFzZXR0aW5nc18uc3RyZWFtX2Ry
aWZ0X3NhbXBsZXMpIHsKLSAgICBpZiAobXNnLmhhc19kcmlmdCgpKSB7Ci0gICAgICBhcF8tPmVj
aG9fY2FuY2VsbGF0aW9uKCktPnNldF9zdHJlYW1fZHJpZnRfc2FtcGxlcyhtc2cuZHJpZnQoKSk7
Ci0gICAgfQotICB9IGVsc2UgewotICAgIGFwXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+c2V0X3N0
cmVhbV9kcmlmdF9zYW1wbGVzKAotICAgICAgICAqc2V0dGluZ3NfLnN0cmVhbV9kcmlmdF9zYW1w
bGVzKTsKLSAgfQotCi0gIGlmICghc2V0dGluZ3NfLnVzZV90cykgewotICAgIGlmIChtc2cuaGFz
X2tleXByZXNzKCkpIHsKLSAgICAgIGFwXy0+c2V0X3N0cmVhbV9rZXlfcHJlc3NlZChtc2cua2V5
cHJlc3MoKSk7Ci0gICAgfQotICB9IGVsc2UgewotICAgIGFwXy0+c2V0X3N0cmVhbV9rZXlfcHJl
c3NlZCgqc2V0dGluZ3NfLnVzZV90cyk7Ci0gIH0KLQotICAvLyBUT0RPKHBlYWgpOiBBZGQgc3Vw
cG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIGFuYWxvZyBsZXZlbCB2aWEgdGhlCi0gIC8vIGNvbW1h
bmQtbGluZS4KLSAgaWYgKG1zZy5oYXNfbGV2ZWwoKSkgewotICAgIFJUQ19DSEVDS19FUShBdWRp
b1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8tPmdhaW5fY29udHJv
bCgpLT5zZXRfc3RyZWFtX2FuYWxvZ19sZXZlbChtc2cubGV2ZWwoKSkpOwotICAgICpzZXRfc3Ry
ZWFtX2FuYWxvZ19sZXZlbF9jYWxsZWQgPSB0cnVlOwotICB9IGVsc2UgewotICAgICpzZXRfc3Ry
ZWFtX2FuYWxvZ19sZXZlbF9jYWxsZWQgPSBmYWxzZTsKLSAgfQotfQotCi12b2lkIEFlY0R1bXBC
YXNlZFNpbXVsYXRvcjo6VmVyaWZ5UHJvY2Vzc1N0cmVhbUJpdEV4YWN0bmVzcygKLSAgICBjb25z
dCB3ZWJydGM6OmF1ZGlvcHJvYzo6U3RyZWFtJiBtc2cpIHsKLSAgaWYgKGJpdGV4YWN0X291dHB1
dF8pIHsKLSAgICBpZiAoaW50ZXJmYWNlX3VzZWRfID09IEludGVyZmFjZVR5cGU6OmtGaXhlZElu
dGVyZmFjZSkgewotICAgICAgYml0ZXhhY3Rfb3V0cHV0XyA9IFZlcmlmeUZpeGVkQml0RXhhY3Ru
ZXNzKG1zZywgZndkX2ZyYW1lXyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgIGJpdGV4YWN0X291dHB1
dF8gPSBWZXJpZnlGbG9hdEJpdEV4YWN0bmVzcyhtc2csIG91dF9jb25maWdfLCAqb3V0X2J1Zl8p
OwotICAgIH0KLSAgfQotfQotCi12b2lkIEFlY0R1bXBCYXNlZFNpbXVsYXRvcjo6UHJlcGFyZVJl
dmVyc2VQcm9jZXNzU3RyZWFtQ2FsbCgKLSAgICBjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6UmV2
ZXJzZVN0cmVhbSYgbXNnKSB7Ci0gIGlmIChtc2cuaGFzX2RhdGEoKSkgewotICAgIC8vIEZpeGVk
IGludGVyZmFjZSBwcm9jZXNzaW5nLgotICAgIC8vIFZlcmlmeSBpbnRlcmZhY2UgaW52YXJpYW5j
ZS4KLSAgICBSVENfQ0hFQ0soaW50ZXJmYWNlX3VzZWRfID09IEludGVyZmFjZVR5cGU6OmtGaXhl
ZEludGVyZmFjZSB8fAotICAgICAgICAgICAgICBpbnRlcmZhY2VfdXNlZF8gPT0gSW50ZXJmYWNl
VHlwZTo6a05vdFNwZWNpZmllZCk7Ci0gICAgaW50ZXJmYWNlX3VzZWRfID0gSW50ZXJmYWNlVHlw
ZTo6a0ZpeGVkSW50ZXJmYWNlOwotCi0gICAgLy8gUG9wdWxhdGUgaW5wdXQgYnVmZmVyLgotICAg
IFJUQ19DSEVDS19FUShzaXplb2YoaW50MTZfdCkgKiByZXZfZnJhbWVfLnNhbXBsZXNfcGVyX2No
YW5uZWxfICoKLSAgICAgICAgICAgICAgICAgICAgIHJldl9mcmFtZV8ubnVtX2NoYW5uZWxzXywK
LSAgICAgICAgICAgICAgICAgbXNnLmRhdGEoKS5zaXplKCkpOwotICAgIG1lbWNweShyZXZfZnJh
bWVfLmRhdGFfLCBtc2cuZGF0YSgpLmRhdGEoKSwgbXNnLmRhdGEoKS5zaXplKCkpOwotICB9IGVs
c2UgewotICAgIC8vIEZsb2F0IGludGVyZmFjZSBwcm9jZXNzaW5nLgotICAgIC8vIFZlcmlmeSBp
bnRlcmZhY2UgaW52YXJpYW5jZS4KLSAgICBSVENfQ0hFQ0soaW50ZXJmYWNlX3VzZWRfID09IElu
dGVyZmFjZVR5cGU6OmtGbG9hdEludGVyZmFjZSB8fAotICAgICAgICAgICAgICBpbnRlcmZhY2Vf
dXNlZF8gPT0gSW50ZXJmYWNlVHlwZTo6a05vdFNwZWNpZmllZCk7Ci0gICAgaW50ZXJmYWNlX3Vz
ZWRfID0gSW50ZXJmYWNlVHlwZTo6a0Zsb2F0SW50ZXJmYWNlOwotCi0gICAgUlRDX0NIRUNLX0VR
KHJldmVyc2VfaW5fYnVmXy0+bnVtX2NoYW5uZWxzKCksCi0gICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHNpemVfdD4obXNnLmNoYW5uZWxfc2l6ZSgpKSk7Ci0KLSAgICAvLyBQb3B1bGF0ZSBp
bnB1dCBidWZmZXIuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtc2cuY2hhbm5lbF9zaXplKCk7
ICsraSkgewotICAgICAgUlRDX0NIRUNLX0VRKHJldmVyc2VfaW5fYnVmXy0+bnVtX2ZyYW1lcygp
ICoKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpyZXZlcnNlX2luX2J1Zl8tPmNoYW5u
ZWxzKClbaV0pLAotICAgICAgICAgICAgICAgICAgIG1zZy5jaGFubmVsKGkpLnNpemUoKSk7Ci0g
ICAgICBzdGQ6Om1lbWNweShyZXZlcnNlX2luX2J1Zl8tPmNoYW5uZWxzKClbaV0sIG1zZy5jaGFu
bmVsKGkpLmRhdGEoKSwKLSAgICAgICAgICAgICAgICAgIG1zZy5jaGFubmVsKGkpLnNpemUoKSk7
Ci0gICAgfQotICB9Ci19Ci0KLXZvaWQgQWVjRHVtcEJhc2VkU2ltdWxhdG9yOjpQcm9jZXNzKCkg
ewotICBzdGQ6OnVuaXF1ZV9wdHI8dGVzdDo6VHJhY2VUb1N0ZGVycj4gdHJhY2VfdG9fc3RkZXJy
OwotICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dpbmcpIHsKLSAgICB0cmFjZV90b19z
dGRlcnIucmVzZXQobmV3IHRlc3Q6OlRyYWNlVG9TdGRlcnIodHJ1ZSkpOwotICB9Ci0KLSAgQ3Jl
YXRlQXVkaW9Qcm9jZXNzb3IoKTsKLSAgZHVtcF9pbnB1dF9maWxlXyA9IE9wZW5GaWxlKHNldHRp
bmdzXy5hZWNfZHVtcF9pbnB1dF9maWxlbmFtZS0+Y19zdHIoKSwgInJiIik7Ci0KLSAgd2VicnRj
OjphdWRpb3Byb2M6OkV2ZW50IGV2ZW50X21zZzsKLSAgaW50IG51bV9mb3J3YXJkX2NodW5rc19w
cm9jZXNzZWQgPSAwOwotICBjb25zdCBmbG9hdCBrT25lQnlrQ2h1bmtzUGVyU2Vjb25kID0KLSAg
ICAgIDEuZiAvIEF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcjo6a0NodW5rc1BlclNlY29uZDsKLSAg
d2hpbGUgKFJlYWRNZXNzYWdlRnJvbUZpbGUoZHVtcF9pbnB1dF9maWxlXywgJmV2ZW50X21zZykp
IHsKLSAgICBzd2l0Y2ggKGV2ZW50X21zZy50eXBlKCkpIHsKLSAgICAgIGNhc2Ugd2VicnRjOjph
dWRpb3Byb2M6OkV2ZW50OjpJTklUOgotICAgICAgICBSVENfQ0hFQ0soZXZlbnRfbXNnLmhhc19p
bml0KCkpOwotICAgICAgICBIYW5kbGVNZXNzYWdlKGV2ZW50X21zZy5pbml0KCkpOwotICAgICAg
ICBicmVhazsKLSAgICAgIGNhc2Ugd2VicnRjOjphdWRpb3Byb2M6OkV2ZW50OjpTVFJFQU06Ci0g
ICAgICAgIFJUQ19DSEVDSyhldmVudF9tc2cuaGFzX3N0cmVhbSgpKTsKLSAgICAgICAgSGFuZGxl
TWVzc2FnZShldmVudF9tc2cuc3RyZWFtKCkpOwotICAgICAgICArK251bV9mb3J3YXJkX2NodW5r
c19wcm9jZXNzZWQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSB3ZWJydGM6OmF1ZGlvcHJv
Yzo6RXZlbnQ6OlJFVkVSU0VfU1RSRUFNOgotICAgICAgICBSVENfQ0hFQ0soZXZlbnRfbXNnLmhh
c19yZXZlcnNlX3N0cmVhbSgpKTsKLSAgICAgICAgSGFuZGxlTWVzc2FnZShldmVudF9tc2cucmV2
ZXJzZV9zdHJlYW0oKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSB3ZWJydGM6OmF1ZGlv
cHJvYzo6RXZlbnQ6OkNPTkZJRzoKLSAgICAgICAgUlRDX0NIRUNLKGV2ZW50X21zZy5oYXNfY29u
ZmlnKCkpOwotICAgICAgICBIYW5kbGVNZXNzYWdlKGV2ZW50X21zZy5jb25maWcoKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgICAgZGVmYXVsdDoKLSAgICAgICAgUlRDX0NIRUNLKGZhbHNlKTsKLSAg
ICB9Ci0gICAgaWYgKHRyYWNlX3RvX3N0ZGVycikgewotICAgICAgdHJhY2VfdG9fc3RkZXJyLT5T
ZXRUaW1lU2Vjb25kcyhudW1fZm9yd2FyZF9jaHVua3NfcHJvY2Vzc2VkICoKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga09uZUJ5a0NodW5rc1BlclNlY29uZCk7Ci0gICAg
fQotICB9Ci0KLSAgZmNsb3NlKGR1bXBfaW5wdXRfZmlsZV8pOwotCi0gIERlc3Ryb3lBdWRpb1By
b2Nlc3NvcigpOwotfQotCi12b2lkIEFlY0R1bXBCYXNlZFNpbXVsYXRvcjo6SGFuZGxlTWVzc2Fn
ZSgKLSAgICBjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6Q29uZmlnJiBtc2cpIHsKLSAgaWYgKHNl
dHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJDb25maWcg
YXQgZnJhbWU6IiA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgRm9yd2FyZDogIiA8
PCBnZXRfbnVtX3Byb2Nlc3Nfc3RyZWFtX2NhbGxzKCkgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6
Y291dCA8PCAiIFJldmVyc2U6ICIgPDwgZ2V0X251bV9yZXZlcnNlX3Byb2Nlc3Nfc3RyZWFtX2Nh
bGxzKCkKLSAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotICB9Ci0KLSAgaWYgKCFzZXR0aW5n
c18uZGlzY2FyZF9hbGxfc2V0dGluZ3NfaW5fYWVjZHVtcCkgewotICAgIGlmIChzZXR0aW5nc18u
dXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgc3RkOjpjb3V0IDw8ICJTZXR0aW5nIHVzZWQg
aW4gY29uZmlnOiIgPDwgc3RkOjplbmRsOwotICAgIH0KLSAgICBDb25maWcgY29uZmlnOwotICAg
IEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmlnIGFwbV9jb25maWc7Ci0KLSAgICBpZiAobXNnLmhhc19h
ZWNfZW5hYmxlZCgpIHx8IHNldHRpbmdzXy51c2VfYWVjKSB7Ci0gICAgICBib29sIGVuYWJsZSA9
IHNldHRpbmdzXy51c2VfYWVjID8gKnNldHRpbmdzXy51c2VfYWVjIDogbXNnLmFlY19lbmFibGVk
KCk7Ci0gICAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAg
ICAgICAgICAgICAgICBhcF8tPmVjaG9fY2FuY2VsbGF0aW9uKCktPkVuYWJsZShlbmFibGUpKTsK
LSAgICAgIGlmIChzZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6
OmNvdXQgPDwgIiBhZWNfZW5hYmxlZDogIiA8PCAoZW5hYmxlID8gInRydWUiIDogImZhbHNlIikK
LSAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobXNnLmhhc19hZWNfZGVsYXlfYWdub3N0aWNfZW5hYmxlZCgpIHx8IHNldHRpbmdzXy51c2Vf
ZGVsYXlfYWdub3N0aWMpIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9kZWxh
eV9hZ25vc3RpYwotICAgICAgICAgICAgICAgICAgICAgICAgPyAqc2V0dGluZ3NfLnVzZV9kZWxh
eV9hZ25vc3RpYwotICAgICAgICAgICAgICAgICAgICAgICAgOiBtc2cuYWVjX2RlbGF5X2Fnbm9z
dGljX2VuYWJsZWQoKTsKLSAgICAgIGNvbmZpZy5TZXQ8RGVsYXlBZ25vc3RpYz4obmV3IERlbGF5
QWdub3N0aWMoZW5hYmxlKSk7Ci0gICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dp
bmcpIHsKLSAgICAgICAgc3RkOjpjb3V0IDw8ICIgYWVjX2RlbGF5X2Fnbm9zdGljX2VuYWJsZWQ6
ICIKLSAgICAgICAgICAgICAgICAgIDw8IChlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiKSA8PCBz
dGQ6OmVuZGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1zZy5oYXNfYWVjX2RyaWZ0X2Nv
bXBlbnNhdGlvbl9lbmFibGVkKCkgfHwKLSAgICAgICAgc2V0dGluZ3NfLnVzZV9kcmlmdF9jb21w
ZW5zYXRpb24pIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9kcmlmdF9jb21w
ZW5zYXRpb24KLSAgICAgICAgICAgICAgICAgICAgICAgID8gKnNldHRpbmdzXy51c2VfZHJpZnRf
Y29tcGVuc2F0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICA6IG1zZy5hZWNfZHJpZnRfY29t
cGVuc2F0aW9uX2VuYWJsZWQoKTsKLSAgICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6
OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+
ZW5hYmxlX2RyaWZ0X2NvbXBlbnNhdGlvbihlbmFibGUpKTsKLSAgICAgIGlmIChzZXR0aW5nc18u
dXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiBhZWNfZHJpZnRf
Y29tcGVuc2F0aW9uX2VuYWJsZWQ6ICIKLSAgICAgICAgICAgICAgICAgIDw8IChlbmFibGUgPyAi
dHJ1ZSIgOiAiZmFsc2UiKSA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KG1zZy5oYXNfYWVjX2V4dGVuZGVkX2ZpbHRlcl9lbmFibGVkKCkgfHwKLSAgICAgICAgc2V0dGlu
Z3NfLnVzZV9leHRlbmRlZF9maWx0ZXIpIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3Nf
LnVzZV9leHRlbmRlZF9maWx0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgID8gKnNldHRpbmdz
Xy51c2VfZXh0ZW5kZWRfZmlsdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICA6IG1zZy5hZWNf
ZXh0ZW5kZWRfZmlsdGVyX2VuYWJsZWQoKTsKLSAgICAgIGNvbmZpZy5TZXQ8RXh0ZW5kZWRGaWx0
ZXI+KG5ldyBFeHRlbmRlZEZpbHRlcihlbmFibGUpKTsKLSAgICAgIGlmIChzZXR0aW5nc18udXNl
X3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiBhZWNfZXh0ZW5kZWRf
ZmlsdGVyX2VuYWJsZWQ6ICIKLSAgICAgICAgICAgICAgICAgIDw8IChlbmFibGUgPyAidHJ1ZSIg
OiAiZmFsc2UiKSA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1zZy5o
YXNfYWVjX3N1cHByZXNzaW9uX2xldmVsKCkgfHwgc2V0dGluZ3NfLmFlY19zdXBwcmVzc2lvbl9s
ZXZlbCkgewotICAgICAgaW50IGxldmVsID0gc2V0dGluZ3NfLmFlY19zdXBwcmVzc2lvbl9sZXZl
bAotICAgICAgICAgICAgICAgICAgICAgID8gKnNldHRpbmdzXy5hZWNfc3VwcHJlc3Npb25fbGV2
ZWwKLSAgICAgICAgICAgICAgICAgICAgICA6IG1zZy5hZWNfc3VwcHJlc3Npb25fbGV2ZWwoKTsK
LSAgICAgIFJUQ19DSEVDS19FUSgKLSAgICAgICAgICBBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9y
LAotICAgICAgICAgIGFwXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+c2V0X3N1cHByZXNzaW9uX2xl
dmVsKAotICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx3ZWJydGM6OkVjaG9DYW5jZWxsYXRpb246
OlN1cHByZXNzaW9uTGV2ZWw+KGxldmVsKSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVy
Ym9zZV9sb2dnaW5nKSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGFlY19zdXBwcmVzc2lvbl9s
ZXZlbDogIiA8PCBsZXZlbCA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYg
KG1zZy5oYXNfYWVjbV9lbmFibGVkKCkgfHwgc2V0dGluZ3NfLnVzZV9hZWNtKSB7Ci0gICAgICBi
b29sIGVuYWJsZSA9Ci0gICAgICAgICAgc2V0dGluZ3NfLnVzZV9hZWNtID8gKnNldHRpbmdzXy51
c2VfYWVjbSA6IG1zZy5hZWNtX2VuYWJsZWQoKTsKLSAgICAgIFJUQ19DSEVDS19FUShBdWRpb1By
b2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+ZWNob19jb250cm9s
X21vYmlsZSgpLT5FbmFibGUoZW5hYmxlKSk7Ci0gICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJi
b3NlX2xvZ2dpbmcpIHsKLSAgICAgICAgc3RkOjpjb3V0IDw8ICIgYWVjbV9lbmFibGVkOiAiIDw8
IChlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiKQotICAgICAgICAgICAgICAgICAgPDwgc3RkOjpl
bmRsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChtc2cuaGFzX2FlY21fY29tZm9ydF9ub2lz
ZV9lbmFibGVkKCkgfHwKLSAgICAgICAgc2V0dGluZ3NfLnVzZV9hZWNtX2NvbWZvcnRfbm9pc2Up
IHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9hZWNtX2NvbWZvcnRfbm9pc2UK
LSAgICAgICAgICAgICAgICAgICAgICAgID8gKnNldHRpbmdzXy51c2VfYWVjbV9jb21mb3J0X25v
aXNlCi0gICAgICAgICAgICAgICAgICAgICAgICA6IG1zZy5hZWNtX2NvbWZvcnRfbm9pc2VfZW5h
YmxlZCgpOwotICAgICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0g
ICAgICAgICAgICAgICAgICAgYXBfLT5lY2hvX2NvbnRyb2xfbW9iaWxlKCktPmVuYWJsZV9jb21m
b3J0X25vaXNlKGVuYWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dn
aW5nKSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGFlY21fY29tZm9ydF9ub2lzZV9lbmFibGVk
OiAiCi0gICAgICAgICAgICAgICAgICA8PCAoZW5hYmxlID8gInRydWUiIDogImZhbHNlIikgPDwg
c3RkOjplbmRsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChtc2cuaGFzX2FlY21fcm91dGlu
Z19tb2RlKCkgfHwgc2V0dGluZ3NfLmFlY21fcm91dGluZ19tb2RlKSB7Ci0gICAgICBpbnQgcm91
dGluZ19tb2RlID0gc2V0dGluZ3NfLmFlY21fcm91dGluZ19tb2RlCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID8gKnNldHRpbmdzXy5hZWNtX3JvdXRpbmdfbW9kZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IG1zZy5hZWNtX3JvdXRpbmdfbW9kZSgpOwotICAgICAgUlRDX0NI
RUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgYXBf
LT5lY2hvX2NvbnRyb2xfbW9iaWxlKCktPnNldF9yb3V0aW5nX21vZGUoCi0gICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PHdlYnJ0Yzo6RWNob0NvbnRyb2xNb2JpbGU6OlJvdXRpbmdN
b2RlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRpbmdfbW9kZSkpKTsKLSAgICAg
IGlmIChzZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQg
PDwgIiBhZWNtX3JvdXRpbmdfbW9kZTogIiA8PCByb3V0aW5nX21vZGUgPDwgc3RkOjplbmRsOwot
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtc2cuaGFzX2FnY19lbmFibGVkKCkgfHwgc2V0dGlu
Z3NfLnVzZV9hZ2MpIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9hZ2MgPyAq
c2V0dGluZ3NfLnVzZV9hZ2MgOiBtc2cuYWdjX2VuYWJsZWQoKTsKLSAgICAgIFJUQ19DSEVDS19F
UShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+Z2Fp
bl9jb250cm9sKCktPkVuYWJsZShlbmFibGUpKTsKLSAgICAgIGlmIChzZXR0aW5nc18udXNlX3Zl
cmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiBhZ2NfZW5hYmxlZDogIiA8
PCAoZW5hYmxlID8gInRydWUiIDogImZhbHNlIikKLSAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6
ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobXNnLmhhc19hZ2NfbW9kZSgpIHx8IHNl
dHRpbmdzXy5hZ2NfbW9kZSkgewotICAgICAgaW50IG1vZGUgPSBzZXR0aW5nc18uYWdjX21vZGUg
PyAqc2V0dGluZ3NfLmFnY19tb2RlIDogbXNnLmFnY19tb2RlKCk7Ci0gICAgICBSVENfQ0hFQ0tf
RVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgICAgICBhcF8tPmdh
aW5fY29udHJvbCgpLT5zZXRfbW9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8d2VicnRjOjpHYWluQ29udHJvbDo6TW9kZT4obW9kZSkpKTsKLSAgICAgIGlmIChzZXR0aW5n
c18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiBhZ2NfbW9k
ZTogIiA8PCBtb2RlIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobXNn
Lmhhc19hZ2NfbGltaXRlcl9lbmFibGVkKCkgfHwgc2V0dGluZ3NfLnVzZV9hZ2NfbGltaXRlcikg
ewotICAgICAgYm9vbCBlbmFibGUgPSBzZXR0aW5nc18udXNlX2FnY19saW1pdGVyID8gKnNldHRp
bmdzXy51c2VfYWdjX2xpbWl0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IG1zZy5hZ2NfbGltaXRlcl9lbmFibGVkKCk7Ci0gICAgICBSVENfQ0hFQ0tf
RVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgICAgICBhcF8tPmdh
aW5fY29udHJvbCgpLT5lbmFibGVfbGltaXRlcihlbmFibGUpKTsKLSAgICAgIGlmIChzZXR0aW5n
c18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiBhZ2NfbGlt
aXRlcl9lbmFibGVkOiAiIDw8IChlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiKQotICAgICAgICAg
ICAgICAgICAgPDwgc3RkOjplbmRsOwotICAgICAgfQotICAgIH0KLQotICAgIC8vIFRPRE8ocGVh
aCk6IEFkZCBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0aGUgRXhwZXJpbWVudGFsIEFHQyBmcm9t
IHRoZQotICAgIC8vIGNvbW1hbmQgbGluZS4KLSAgICBpZiAobXNnLmhhc19ub2lzZV9yb2J1c3Rf
YWdjX2VuYWJsZWQoKSkgewotICAgICAgY29uZmlnLlNldDxFeHBlcmltZW50YWxBZ2M+KAotICAg
ICAgICAgIG5ldyBFeHBlcmltZW50YWxBZ2MobXNnLm5vaXNlX3JvYnVzdF9hZ2NfZW5hYmxlZCgp
KSk7Ci0gICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dpbmcpIHsKLSAgICAgICAg
c3RkOjpjb3V0IDw8ICIgbm9pc2Vfcm9idXN0X2FnY19lbmFibGVkOiAiCi0gICAgICAgICAgICAg
ICAgICA8PCAobXNnLm5vaXNlX3JvYnVzdF9hZ2NfZW5hYmxlZCgpID8gInRydWUiIDogImZhbHNl
IikKLSAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobXNnLmhhc190cmFuc2llbnRfc3VwcHJlc3Npb25fZW5hYmxlZCgpIHx8IHNldHRpbmdz
Xy51c2VfdHMpIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV90cyA/ICpzZXR0
aW5nc18udXNlX3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtc2cu
dHJhbnNpZW50X3N1cHByZXNzaW9uX2VuYWJsZWQoKTsKLSAgICAgIGNvbmZpZy5TZXQ8RXhwZXJp
bWVudGFsTnM+KG5ldyBFeHBlcmltZW50YWxOcyhlbmFibGUpKTsKLSAgICAgIGlmIChzZXR0aW5n
c18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiB0cmFuc2ll
bnRfc3VwcHJlc3Npb25fZW5hYmxlZDogIgotICAgICAgICAgICAgICAgICAgPDwgKGVuYWJsZSA/
ICJ0cnVlIiA6ICJmYWxzZSIpIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBp
ZiAobXNnLmhhc19pbnRlbGxpZ2liaWxpdHlfZW5oYW5jZXJfZW5hYmxlZCgpIHx8IHNldHRpbmdz
Xy51c2VfaWUpIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9pZSA/ICpzZXR0
aW5nc18udXNlX2llCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtc2cu
aW50ZWxsaWdpYmlsaXR5X2VuaGFuY2VyX2VuYWJsZWQoKTsKLSAgICAgIGNvbmZpZy5TZXQ8SW50
ZWxsaWdpYmlsaXR5PihuZXcgSW50ZWxsaWdpYmlsaXR5KGVuYWJsZSkpOwotICAgICAgaWYgKHNl
dHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGlu
dGVsbGlnaWJpbGl0eV9lbmhhbmNlcl9lbmFibGVkOiAiCi0gICAgICAgICAgICAgICAgICA8PCAo
ZW5hYmxlID8gInRydWUiIDogImZhbHNlIikgPDwgc3RkOjplbmRsOwotICAgICAgfQotICAgIH0K
LQotICAgIGlmIChtc2cuaGFzX2hwZl9lbmFibGVkKCkgfHwgc2V0dGluZ3NfLnVzZV9ocGYpIHsK
LSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9ocGYgPyAqc2V0dGluZ3NfLnVzZV9o
cGYgOiBtc2cuaHBmX2VuYWJsZWQoKTsKLSAgICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Np
bmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+aGlnaF9wYXNzX2ZpbHRlcigp
LT5FbmFibGUoZW5hYmxlKSk7Ci0gICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dp
bmcpIHsKLSAgICAgICAgc3RkOjpjb3V0IDw8ICIgaHBmX2VuYWJsZWQ6ICIgPDwgKGVuYWJsZSA/
ICJ0cnVlIiA6ICJmYWxzZSIpCi0gICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1zZy5oYXNfbnNfZW5hYmxlZCgpIHx8IHNldHRpbmdzXy51
c2VfbnMpIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9ucyA/ICpzZXR0aW5n
c18udXNlX25zIDogbXNnLm5zX2VuYWJsZWQoKTsKLSAgICAgIFJUQ19DSEVDS19FUShBdWRpb1By
b2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+bm9pc2Vfc3VwcHJl
c3Npb24oKS0+RW5hYmxlKGVuYWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9z
ZV9sb2dnaW5nKSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIG5zX2VuYWJsZWQ6ICIgPDwgKGVu
YWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpCi0gICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1zZy5oYXNfbnNfbGV2ZWwoKSB8fCBzZXR0aW5n
c18ubnNfbGV2ZWwpIHsKLSAgICAgIGludCBsZXZlbCA9IHNldHRpbmdzXy5uc19sZXZlbCA/ICpz
ZXR0aW5nc18ubnNfbGV2ZWwgOiBtc2cubnNfbGV2ZWwoKTsKLSAgICAgIFJUQ19DSEVDS19FUShB
dWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+bm9pc2Vf
c3VwcHJlc3Npb24oKS0+c2V0X2xldmVsKAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxOb2lzZVN1cHByZXNzaW9uOjpMZXZlbD4obGV2ZWwpKSk7Ci0gICAgICBpZiAoc2V0dGlu
Z3NfLnVzZV92ZXJib3NlX2xvZ2dpbmcpIHsKLSAgICAgICAgc3RkOjpjb3V0IDw8ICIgbnNfbGV2
ZWw6ICIgPDwgbGV2ZWwgPDwgc3RkOjplbmRsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChz
ZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2luZyAmJiBtc2cuaGFzX2V4cGVyaW1lbnRzX2Rlc2Ny
aXB0aW9uKCkgJiYKLSAgICAgICAgbXNnLmV4cGVyaW1lbnRzX2Rlc2NyaXB0aW9uKCkuc2l6ZSgp
ID4gMCkgewotICAgICAgc3RkOjpjb3V0IDw8ICIgZXhwZXJpbWVudHMgbm90IGluY2x1ZGVkIGJ5
IGRlZmF1bHQgaW4gdGhlIHNpbXVsYXRpb246ICIKLSAgICAgICAgICAgICAgICA8PCBtc2cuZXhw
ZXJpbWVudHNfZGVzY3JpcHRpb24oKSA8PCBzdGQ6OmVuZGw7Ci0gICAgfQotCi0gICAgaWYgKHNl
dHRpbmdzXy51c2VfcmVmaW5lZF9hZGFwdGl2ZV9maWx0ZXIpIHsKLSAgICAgIGNvbmZpZy5TZXQ8
UmVmaW5lZEFkYXB0aXZlRmlsdGVyPigKLSAgICAgICAgICBuZXcgUmVmaW5lZEFkYXB0aXZlRmls
dGVyKCpzZXR0aW5nc18udXNlX3JlZmluZWRfYWRhcHRpdmVfZmlsdGVyKSk7Ci0gICAgfQotCi0g
ICAgaWYgKHNldHRpbmdzXy51c2VfYWVjMykgewotICAgICAgY29uZmlnLlNldDxFY2hvQ2FuY2Vs
bGVyMz4obmV3IEVjaG9DYW5jZWxsZXIzKCpzZXR0aW5nc18udXNlX2FlYzMpKTsKLSAgICB9Ci0K
LSAgICBpZiAoc2V0dGluZ3NfLnVzZV9sYykgewotICAgICAgYXBtX2NvbmZpZy5sZXZlbF9jb250
cm9sbGVyLmVuYWJsZWQgPSAqc2V0dGluZ3NfLnVzZV9sYzsKLSAgICB9Ci0KLSAgICBpZiAoc2V0
dGluZ3NfLnVzZV9yZWQpIHsKLSAgICAgIGFwbV9jb25maWcucmVzaWR1YWxfZWNob19kZXRlY3Rv
ci5lbmFibGVkID0gKnNldHRpbmdzXy51c2VfcmVkOwotICAgIH0KLQotICAgIGFwXy0+QXBwbHlD
b25maWcoYXBtX2NvbmZpZyk7Ci0gICAgYXBfLT5TZXRFeHRyYU9wdGlvbnMoY29uZmlnKTsKLSAg
fQotfQotCi12b2lkIEFlY0R1bXBCYXNlZFNpbXVsYXRvcjo6SGFuZGxlTWVzc2FnZShjb25zdCB3
ZWJydGM6OmF1ZGlvcHJvYzo6SW5pdCYgbXNnKSB7Ci0gIFJUQ19DSEVDSyhtc2cuaGFzX3NhbXBs
ZV9yYXRlKCkpOwotICBSVENfQ0hFQ0sobXNnLmhhc19udW1faW5wdXRfY2hhbm5lbHMoKSk7Ci0g
IFJUQ19DSEVDSyhtc2cuaGFzX251bV9yZXZlcnNlX2NoYW5uZWxzKCkpOwotICBSVENfQ0hFQ0so
bXNnLmhhc19yZXZlcnNlX3NhbXBsZV9yYXRlKCkpOwotCi0gIGlmIChzZXR0aW5nc18udXNlX3Zl
cmJvc2VfbG9nZ2luZykgewotICAgIHN0ZDo6Y291dCA8PCAiSW5pdCBhdCBmcmFtZToiIDw8IHN0
ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgIiBGb3J3YXJkOiAiIDw8IGdldF9udW1fcHJvY2Vz
c19zdHJlYW1fY2FsbHMoKSA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgUmV2ZXJz
ZTogIiA8PCBnZXRfbnVtX3JldmVyc2VfcHJvY2Vzc19zdHJlYW1fY2FsbHMoKQotICAgICAgICAg
ICAgICA8PCBzdGQ6OmVuZGw7Ci0gIH0KLQotICBpbnQgbnVtX291dHB1dF9jaGFubmVsczsKLSAg
aWYgKHNldHRpbmdzXy5vdXRwdXRfbnVtX2NoYW5uZWxzKSB7Ci0gICAgbnVtX291dHB1dF9jaGFu
bmVscyA9ICpzZXR0aW5nc18ub3V0cHV0X251bV9jaGFubmVsczsKLSAgfSBlbHNlIHsKLSAgICBu
dW1fb3V0cHV0X2NoYW5uZWxzID0gbXNnLmhhc19udW1fb3V0cHV0X2NoYW5uZWxzKCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgID8gbXNnLm51bV9vdXRwdXRfY2hhbm5lbHMoKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtc2cubnVtX2lucHV0X2NoYW5uZWxzKCk7Ci0g
IH0KLQotICBpbnQgb3V0cHV0X3NhbXBsZV9yYXRlOwotICBpZiAoc2V0dGluZ3NfLm91dHB1dF9z
YW1wbGVfcmF0ZV9oeikgewotICAgIG91dHB1dF9zYW1wbGVfcmF0ZSA9ICpzZXR0aW5nc18ub3V0
cHV0X3NhbXBsZV9yYXRlX2h6OwotICB9IGVsc2UgewotICAgIG91dHB1dF9zYW1wbGVfcmF0ZSA9
IG1zZy5oYXNfb3V0cHV0X3NhbXBsZV9yYXRlKCkgPyBtc2cub3V0cHV0X3NhbXBsZV9yYXRlKCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
bXNnLnNhbXBsZV9yYXRlKCk7Ci0gIH0KLQotICBpbnQgbnVtX3JldmVyc2Vfb3V0cHV0X2NoYW5u
ZWxzOwotICBpZiAoc2V0dGluZ3NfLnJldmVyc2Vfb3V0cHV0X251bV9jaGFubmVscykgewotICAg
IG51bV9yZXZlcnNlX291dHB1dF9jaGFubmVscyA9ICpzZXR0aW5nc18ucmV2ZXJzZV9vdXRwdXRf
bnVtX2NoYW5uZWxzOwotICB9IGVsc2UgewotICAgIG51bV9yZXZlcnNlX291dHB1dF9jaGFubmVs
cyA9IG1zZy5oYXNfbnVtX3JldmVyc2Vfb3V0cHV0X2NoYW5uZWxzKCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyBtc2cubnVtX3JldmVyc2Vfb3V0cHV0X2NoYW5uZWxz
KCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtc2cubnVtX3JldmVy
c2VfY2hhbm5lbHMoKTsKLSAgfQotCi0gIGludCByZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZTsK
LSAgaWYgKHNldHRpbmdzXy5yZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZV9oeikgewotICAgIHJl
dmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlID0gKnNldHRpbmdzXy5yZXZlcnNlX291dHB1dF9zYW1w
bGVfcmF0ZV9oejsKLSAgfSBlbHNlIHsKLSAgICByZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZSA9
IG1zZy5oYXNfcmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3JhdGUoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID8gbXNnLnJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlKCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1zZy5yZXZlcnNlX3NhbXBsZV9y
YXRlKCk7Ci0gIH0KLQotICBTZXR1cEJ1ZmZlcnNDb25maWdzT3V0cHV0cygKLSAgICAgIG1zZy5z
YW1wbGVfcmF0ZSgpLCBvdXRwdXRfc2FtcGxlX3JhdGUsIG1zZy5yZXZlcnNlX3NhbXBsZV9yYXRl
KCksCi0gICAgICByZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZSwgbXNnLm51bV9pbnB1dF9jaGFu
bmVscygpLCBudW1fb3V0cHV0X2NoYW5uZWxzLAotICAgICAgbXNnLm51bV9yZXZlcnNlX2NoYW5u
ZWxzKCksIG51bV9yZXZlcnNlX291dHB1dF9jaGFubmVscyk7Ci19Ci0KLXZvaWQgQWVjRHVtcEJh
c2VkU2ltdWxhdG9yOjpIYW5kbGVNZXNzYWdlKAotICAgIGNvbnN0IHdlYnJ0Yzo6YXVkaW9wcm9j
OjpTdHJlYW0mIG1zZykgewotICBib29sIHNldF9zdHJlYW1fYW5hbG9nX2xldmVsX2NhbGxlZCA9
IGZhbHNlOwotICBQcmVwYXJlUHJvY2Vzc1N0cmVhbUNhbGwobXNnLCAmc2V0X3N0cmVhbV9hbmFs
b2dfbGV2ZWxfY2FsbGVkKTsKLSAgUHJvY2Vzc1N0cmVhbShpbnRlcmZhY2VfdXNlZF8gPT0gSW50
ZXJmYWNlVHlwZTo6a0ZpeGVkSW50ZXJmYWNlKTsKLSAgaWYgKHNldF9zdHJlYW1fYW5hbG9nX2xl
dmVsX2NhbGxlZCkgewotICAgIC8vIENhbGwgc3RyZWFtIGFuYWxvZyBsZXZlbCB0byBlbnN1cmUg
dGhhdCBhbnkgc2lkZS1lZmZlY3RzIGFyZSB0cmlnZ2VyZWQuCi0gICAgKHZvaWQpYXBfLT5nYWlu
X2NvbnRyb2woKS0+c3RyZWFtX2FuYWxvZ19sZXZlbCgpOwotICB9Ci0KLSAgVmVyaWZ5UHJvY2Vz
c1N0cmVhbUJpdEV4YWN0bmVzcyhtc2cpOwotfQotCi12b2lkIEFlY0R1bXBCYXNlZFNpbXVsYXRv
cjo6SGFuZGxlTWVzc2FnZSgKLSAgICBjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6UmV2ZXJzZVN0
cmVhbSYgbXNnKSB7Ci0gIFByZXBhcmVSZXZlcnNlUHJvY2Vzc1N0cmVhbUNhbGwobXNnKTsKLSAg
UHJvY2Vzc1JldmVyc2VTdHJlYW0oaW50ZXJmYWNlX3VzZWRfID09IEludGVyZmFjZVR5cGU6OmtG
aXhlZEludGVyZmFjZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAvLyBuYW1lc3Bh
Y2Ugd2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9zaW11bGF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9zaW11bGF0b3Iu
aAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYWVjX2R1bXBfYmFzZWRfc2lt
dWxhdG9yLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NiArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19BVURJT19QUk9DRVNTSU5HX1RFU1RfQUVD
X0RVTVBfQkFTRURfU0lNVUxBVE9SX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BS
T0NFU1NJTkdfVEVTVF9BRUNfRFVNUF9CQVNFRF9TSU1VTEFUT1JfSF8KLQotI2luY2x1ZGUgIndl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRpb19wcm9jZXNzaW5nX3NpbXVs
YXRvci5oIgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY29uc3RydWN0b3JtYWdpYy5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9iYXNlL2lnbm9yZV93dW5kZWYuaCIKLQotUlRDX1BVU0hfSUdOT1JJTkdf
V1VOREVGKCkKLSNpZmRlZiBXRUJSVENfQU5EUk9JRF9QTEFURk9STV9CVUlMRAotI2luY2x1ZGUg
ImV4dGVybmFsL3dlYnJ0Yy93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL2RlYnVnLnBi
LmgiCi0jZWxzZQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvZGVi
dWcucGIuaCIKLSNlbmRpZgotUlRDX1BPUF9JR05PUklOR19XVU5ERUYoKQotCi1uYW1lc3BhY2Ug
d2VicnRjIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotLy8gVXNlZCB0byBwZXJmb3JtIGFuIGF1ZGlv
IHByb2Nlc3Npbmcgc2ltdWxhdGlvbiBmcm9tIGFuIGFlYyBkdW1wLgotY2xhc3MgQWVjRHVtcEJh
c2VkU2ltdWxhdG9yIGZpbmFsIDogcHVibGljIEF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvciB7Ci0g
cHVibGljOgotICBleHBsaWNpdCBBZWNEdW1wQmFzZWRTaW11bGF0b3IoY29uc3QgU2ltdWxhdGlv
blNldHRpbmdzJiBzZXR0aW5ncykKLSAgICAgIDogQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yKHNl
dHRpbmdzKSB7fQotICB+QWVjRHVtcEJhc2VkU2ltdWxhdG9yKCkgb3ZlcnJpZGUge30KLQotICAv
LyBQcm9jZXNzZXMgdGhlIG1lc3NhZ2VzIGluIHRoZSBhZWNkdW1wIGZpbGUuCi0gIHZvaWQgUHJv
Y2VzcygpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgdm9pZCBIYW5kbGVNZXNzYWdlKGNvbnN0
IHdlYnJ0Yzo6YXVkaW9wcm9jOjpJbml0JiBtc2cpOwotICB2b2lkIEhhbmRsZU1lc3NhZ2UoY29u
c3Qgd2VicnRjOjphdWRpb3Byb2M6OlN0cmVhbSYgbXNnKTsKLSAgdm9pZCBIYW5kbGVNZXNzYWdl
KGNvbnN0IHdlYnJ0Yzo6YXVkaW9wcm9jOjpSZXZlcnNlU3RyZWFtJiBtc2cpOwotICB2b2lkIEhh
bmRsZU1lc3NhZ2UoY29uc3Qgd2VicnRjOjphdWRpb3Byb2M6OkNvbmZpZyYgbXNnKTsKLSAgdm9p
ZCBQcmVwYXJlUHJvY2Vzc1N0cmVhbUNhbGwoY29uc3Qgd2VicnRjOjphdWRpb3Byb2M6OlN0cmVh
bSYgbXNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sKiBzZXRfc3RyZWFt
X2FuYWxvZ19sZXZlbF9jYWxsZWQpOwotICB2b2lkIFByZXBhcmVSZXZlcnNlUHJvY2Vzc1N0cmVh
bUNhbGwoCi0gICAgICBjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6UmV2ZXJzZVN0cmVhbSYgbXNn
KTsKLSAgdm9pZCBWZXJpZnlQcm9jZXNzU3RyZWFtQml0RXhhY3RuZXNzKGNvbnN0IHdlYnJ0Yzo6
YXVkaW9wcm9jOjpTdHJlYW0mIG1zZyk7Ci0KLSAgZW51bSBJbnRlcmZhY2VUeXBlIHsKLSAgICBr
Rml4ZWRJbnRlcmZhY2UsCi0gICAga0Zsb2F0SW50ZXJmYWNlLAotICAgIGtOb3RTcGVjaWZpZWQs
Ci0gIH07Ci0KLSAgRklMRSogZHVtcF9pbnB1dF9maWxlXzsKLSAgSW50ZXJmYWNlVHlwZSBpbnRl
cmZhY2VfdXNlZF8gPSBJbnRlcmZhY2VUeXBlOjprTm90U3BlY2lmaWVkOwotCi0gIFJUQ19ESVNB
TExPV19JTVBMSUNJVF9DT05TVFJVQ1RPUlMoQWVjRHVtcEJhc2VkU2ltdWxhdG9yKTsKLX07Ci0K
LX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAg
Ly8gV0VCUlRDX01PRFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX0FFQ19EVU1QX0JBU0VEX1NJ
TVVMQVRPUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L0FuZHJvaWRN
YW5pZmVzdC54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0
L0FuZHJvaWRNYW5pZmVzdC54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L2FuZHJvaWQvYXBtdGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCShub25leGlzdGVudCkKQEAgLTEs
MzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0g
QkVHSU5fSU5DTFVERShtYW5pZmVzdCkgLS0+Ci08bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0
cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgotICAgICAgICBwYWNrYWdl
PSJjb20uZXhhbXBsZS5uYXRpdmVfYWN0aXZpdHkiCi0gICAgICAgIGFuZHJvaWQ6dmVyc2lvbkNv
ZGU9IjEiCi0gICAgICAgIGFuZHJvaWQ6dmVyc2lvbk5hbWU9IjEuMCI+Ci0KLSAgICA8IS0tIFRo
aXMgaXMgdGhlIHBsYXRmb3JtIEFQSSB3aGVyZSBOYXRpdmVBY3Rpdml0eSB3YXMgaW50cm9kdWNl
ZC4gLS0+Ci0gICAgPHVzZXMtc2RrIGFuZHJvaWQ6bWluU2RrVmVyc2lvbj0iOCIgLz4KLQotICAg
IDwhLS0gVGhpcyAuYXBrIGhhcyBubyBKYXZhIGNvZGUgaXRzZWxmLCBzbyBzZXQgaGFzQ29kZSB0
byBmYWxzZS4gLS0+Ci0gICAgPGFwcGxpY2F0aW9uIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBw
X25hbWUiIGFuZHJvaWQ6aGFzQ29kZT0iZmFsc2UiIGFuZHJvaWQ6ZGVidWdnYWJsZT0idHJ1ZSI+
Ci0KLSAgICAgICAgPCEtLSBPdXIgYWN0aXZpdHkgaXMgdGhlIGJ1aWx0LWluIE5hdGl2ZUFjdGl2
aXR5IGZyYW1ld29yayBjbGFzcy4KLSAgICAgICAgICAgICBUaGlzIHdpbGwgdGFrZSBjYXJlIG9m
IGludGVncmF0aW5nIHdpdGggb3VyIE5ESyBjb2RlLiAtLT4KLSAgICAgICAgPGFjdGl2aXR5IGFu
ZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAuTmF0aXZlQWN0aXZpdHkiCi0gICAgICAgICAgICAgICAg
YW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSIKLSAgICAgICAgICAgICAgICBhbmRyb2lk
OmNvbmZpZ0NoYW5nZXM9Im9yaWVudGF0aW9ufGtleWJvYXJkSGlkZGVuIj4KLSAgICAgICAgICAg
IDwhLS0gVGVsbCBOYXRpdmVBY3Rpdml0eSB0aGUgbmFtZSBvZiBvciAuc28gLS0+Ci0gICAgICAg
ICAgICA8bWV0YS1kYXRhIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAubGliX25hbWUiCi0gICAg
ICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmFsdWU9ImFwbXRlc3QtYWN0aXZpdHkiIC8+Ci0gICAg
ICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAgICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6
bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNh
dGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+
Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAg
PC9hcHBsaWNhdGlvbj4KLQotPC9tYW5pZmVzdD4gCi08IS0tIEVORF9JTkNMVURFKG1hbmlmZXN0
KSAtLT4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9kZWZhdWx0LnByb3Bl
cnRpZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2RlZmF1
bHQucHJvcGVydGllcwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9p
ZC9hcG10ZXN0L2RlZmF1bHQucHJvcGVydGllcwkobm9uZXhpc3RlbnQpCkBAIC0xLDExICswLDAg
QEAKLSMgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IEFuZHJvaWQgVG9v
bHMuCi0jIERvIG5vdCBtb2RpZnkgdGhpcyBmaWxlIC0tIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIEVS
QVNFRCEKLSMgCi0jIFRoaXMgZmlsZSBtdXN0IGJlIGNoZWNrZWQgaW4gVmVyc2lvbiBDb250cm9s
IFN5c3RlbXMuCi0jIAotIyBUbyBjdXN0b21pemUgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBBbnQg
YnVpbGQgc3lzdGVtIHVzZSwKLSMgImJ1aWxkLnByb3BlcnRpZXMiLCBhbmQgb3ZlcnJpZGUgdmFs
dWVzIHRvIGFkYXB0IHRoZSBzY3JpcHQgdG8geW91cgotIyBwcm9qZWN0IHN0cnVjdHVyZS4KLQot
IyBQcm9qZWN0IHRhcmdldC4KLXRhcmdldD1hbmRyb2lkLTkKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L2FuZHJvaWQvYXBtdGVzdC9qbmkvbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L2FuZHJvaWQvYXBtdGVzdC9qbmkvbWFpbi5jCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Np
bmcvdGVzdC9hbmRyb2lkL2FwbXRlc3Qvam5pL21haW4uYwkobm9uZXhpc3RlbnQpCkBAIC0xLDMw
NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291
cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZl
cnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUg
ZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWlu
IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUu
b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxp
Y2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0
ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywK
LSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg
ZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg
bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIg
dGhlIExpY2Vuc2UuCi0gKgotICovCi0KLS8vQkVHSU5fSU5DTFVERShhbGwpCi0jaW5jbHVkZSA8
am5pLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNs
dWRlIDxHTEVTL2dsLmg+Ci0KLSNpbmNsdWRlIDxhbmRyb2lkL3NlbnNvci5oPgotI2luY2x1ZGUg
PGFuZHJvaWQvbG9nLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZF9uYXRpdmVfYXBwX2dsdWUuaD4KLQot
I2RlZmluZSBMT0dJKC4uLikgKCh2b2lkKV9fYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0df
SU5GTywgIm5hdGl2ZS1hY3Rpdml0eSIsIF9fVkFfQVJHU19fKSkKLSNkZWZpbmUgTE9HVyguLi4p
ICgodm9pZClfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX1dBUk4sICJuYXRpdmUtYWN0
aXZpdHkiLCBfX1ZBX0FSR1NfXykpCi0KLS8qKgotICogT3VyIHNhdmVkIHN0YXRlIGRhdGEuCi0g
Ki8KLXN0cnVjdCBzYXZlZF9zdGF0ZSB7Ci0gICAgZmxvYXQgYW5nbGU7Ci0gICAgaW50MzJfdCB4
OwotICAgIGludDMyX3QgeTsKLX07Ci0KLS8qKgotICogU2hhcmVkIHN0YXRlIGZvciBvdXIgYXBw
LgotICovCi1zdHJ1Y3QgZW5naW5lIHsKLSAgICBzdHJ1Y3QgYW5kcm9pZF9hcHAqIGFwcDsKLQot
ICAgIEFTZW5zb3JNYW5hZ2VyKiBzZW5zb3JNYW5hZ2VyOwotICAgIGNvbnN0IEFTZW5zb3IqIGFj
Y2VsZXJvbWV0ZXJTZW5zb3I7Ci0gICAgQVNlbnNvckV2ZW50UXVldWUqIHNlbnNvckV2ZW50UXVl
dWU7Ci0KLSAgICBpbnQgYW5pbWF0aW5nOwotICAgIEVHTERpc3BsYXkgZGlzcGxheTsKLSAgICBF
R0xTdXJmYWNlIHN1cmZhY2U7Ci0gICAgRUdMQ29udGV4dCBjb250ZXh0OwotICAgIGludDMyX3Qg
d2lkdGg7Ci0gICAgaW50MzJfdCBoZWlnaHQ7Ci0gICAgc3RydWN0IHNhdmVkX3N0YXRlIHN0YXRl
OwotfTsKLQotLyoqCi0gKiBJbml0aWFsaXplIGFuIEVHTCBjb250ZXh0IGZvciB0aGUgY3VycmVu
dCBkaXNwbGF5LgotICovCi1zdGF0aWMgaW50IGVuZ2luZV9pbml0X2Rpc3BsYXkoc3RydWN0IGVu
Z2luZSogZW5naW5lKSB7Ci0gICAgLy8gaW5pdGlhbGl6ZSBPcGVuR0wgRVMgYW5kIEVHTAotCi0g
ICAgLyoKLSAgICAgKiBIZXJlIHNwZWNpZnkgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIGRlc2lyZWQg
Y29uZmlndXJhdGlvbi4KLSAgICAgKiBCZWxvdywgd2Ugc2VsZWN0IGFuIEVHTENvbmZpZyB3aXRo
IGF0IGxlYXN0IDggYml0cyBwZXIgY29sb3IKLSAgICAgKiBjb21wb25lbnQgY29tcGF0aWJsZSB3
aXRoIG9uLXNjcmVlbiB3aW5kb3dzCi0gICAgICovCi0gICAgY29uc3QgRUdMaW50IGF0dHJpYnNb
XSA9IHsKLSAgICAgICAgICAgIEVHTF9TVVJGQUNFX1RZUEUsIEVHTF9XSU5ET1dfQklULAotICAg
ICAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKLSAgICAgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4
LAotICAgICAgICAgICAgRUdMX1JFRF9TSVpFLCA4LAotICAgICAgICAgICAgRUdMX05PTkUKLSAg
ICB9OwotICAgIEVHTGludCB3LCBoLCBkdW1teSwgZm9ybWF0OwotICAgIEVHTGludCBudW1Db25m
aWdzOwotICAgIEVHTENvbmZpZyBjb25maWc7Ci0gICAgRUdMU3VyZmFjZSBzdXJmYWNlOwotICAg
IEVHTENvbnRleHQgY29udGV4dDsKLQotICAgIEVHTERpc3BsYXkgZGlzcGxheSA9IGVnbEdldERp
c3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0KLSAgICBlZ2xJbml0aWFsaXplKGRpc3BsYXks
IDAsIDApOwotCi0gICAgLyogSGVyZSwgdGhlIGFwcGxpY2F0aW9uIGNob29zZXMgdGhlIGNvbmZp
Z3VyYXRpb24gaXQgZGVzaXJlcy4gSW4gdGhpcwotICAgICAqIHNhbXBsZSwgd2UgaGF2ZSBhIHZl
cnkgc2ltcGxpZmllZCBzZWxlY3Rpb24gcHJvY2Vzcywgd2hlcmUgd2UgcGljawotICAgICAqIHRo
ZSBmaXJzdCBFR0xDb25maWcgdGhhdCBtYXRjaGVzIG91ciBjcml0ZXJpYSAqLwotICAgIGVnbENo
b29zZUNvbmZpZyhkaXNwbGF5LCBhdHRyaWJzLCAmY29uZmlnLCAxLCAmbnVtQ29uZmlncyk7Ci0K
LSAgICAvKiBFR0xfTkFUSVZFX1ZJU1VBTF9JRCBpcyBhbiBhdHRyaWJ1dGUgb2YgdGhlIEVHTENv
bmZpZyB0aGF0IGlzCi0gICAgICogZ3VhcmFudGVlZCB0byBiZSBhY2NlcHRlZCBieSBBTmF0aXZl
V2luZG93X3NldEJ1ZmZlcnNHZW9tZXRyeSgpLgotICAgICAqIEFzIHNvb24gYXMgd2UgcGlja2Vk
IGEgRUdMQ29uZmlnLCB3ZSBjYW4gc2FmZWx5IHJlY29uZmlndXJlIHRoZQotICAgICAqIEFOYXRp
dmVXaW5kb3cgYnVmZmVycyB0byBtYXRjaCwgdXNpbmcgRUdMX05BVElWRV9WSVNVQUxfSUQuICov
Ci0gICAgZWdsR2V0Q29uZmlnQXR0cmliKGRpc3BsYXksIGNvbmZpZywgRUdMX05BVElWRV9WSVNV
QUxfSUQsICZmb3JtYXQpOwotCi0gICAgQU5hdGl2ZVdpbmRvd19zZXRCdWZmZXJzR2VvbWV0cnko
ZW5naW5lLT5hcHAtPndpbmRvdywgMCwgMCwgZm9ybWF0KTsKLQotICAgIHN1cmZhY2UgPSBlZ2xD
cmVhdGVXaW5kb3dTdXJmYWNlKGRpc3BsYXksIGNvbmZpZywgZW5naW5lLT5hcHAtPndpbmRvdywg
TlVMTCk7Ci0gICAgY29udGV4dCA9IGVnbENyZWF0ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBO
VUxMLCBOVUxMKTsKLQotICAgIGlmIChlZ2xNYWtlQ3VycmVudChkaXNwbGF5LCBzdXJmYWNlLCBz
dXJmYWNlLCBjb250ZXh0KSA9PSBFR0xfRkFMU0UpIHsKLSAgICAgICAgTE9HVygiVW5hYmxlIHRv
IGVnbE1ha2VDdXJyZW50Iik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBlZ2xR
dWVyeVN1cmZhY2UoZGlzcGxheSwgc3VyZmFjZSwgRUdMX1dJRFRILCAmdyk7Ci0gICAgZWdsUXVl
cnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVHTF9IRUlHSFQsICZoKTsKLQotICAgIGVuZ2lu
ZS0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgZW5naW5lLT5jb250ZXh0ID0gY29udGV4dDsKLSAg
ICBlbmdpbmUtPnN1cmZhY2UgPSBzdXJmYWNlOwotICAgIGVuZ2luZS0+d2lkdGggPSB3OwotICAg
IGVuZ2luZS0+aGVpZ2h0ID0gaDsKLSAgICBlbmdpbmUtPnN0YXRlLmFuZ2xlID0gMDsKLQotICAg
IC8vIEluaXRpYWxpemUgR0wgc3RhdGUuCi0gICAgZ2xIaW50KEdMX1BFUlNQRUNUSVZFX0NPUlJF
Q1RJT05fSElOVCwgR0xfRkFTVEVTVCk7Ci0gICAgZ2xFbmFibGUoR0xfQ1VMTF9GQUNFKTsKLSAg
ICBnbFNoYWRlTW9kZWwoR0xfU01PT1RIKTsKLSAgICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7
Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBKdXN0IHRoZSBjdXJyZW50IGZyYW1lIGlu
IHRoZSBkaXNwbGF5LgotICovCi1zdGF0aWMgdm9pZCBlbmdpbmVfZHJhd19mcmFtZShzdHJ1Y3Qg
ZW5naW5lKiBlbmdpbmUpIHsKLSAgICBpZiAoZW5naW5lLT5kaXNwbGF5ID09IE5VTEwpIHsKLSAg
ICAgICAgLy8gTm8gZGlzcGxheS4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1
c3QgZmlsbCB0aGUgc2NyZWVuIHdpdGggYSBjb2xvci4KLSAgICBnbENsZWFyQ29sb3IoKChmbG9h
dCllbmdpbmUtPnN0YXRlLngpL2VuZ2luZS0+d2lkdGgsIGVuZ2luZS0+c3RhdGUuYW5nbGUsCi0g
ICAgICAgICAgICAoKGZsb2F0KWVuZ2luZS0+c3RhdGUueSkvZW5naW5lLT5oZWlnaHQsIDEpOwot
ICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJVCk7Ci0KLSAgICBlZ2xTd2FwQnVmZmVycyhl
bmdpbmUtPmRpc3BsYXksIGVuZ2luZS0+c3VyZmFjZSk7Ci19Ci0KLS8qKgotICogVGVhciBkb3du
IHRoZSBFR0wgY29udGV4dCBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5Lgot
ICovCi1zdGF0aWMgdm9pZCBlbmdpbmVfdGVybV9kaXNwbGF5KHN0cnVjdCBlbmdpbmUqIGVuZ2lu
ZSkgewotICAgIGlmIChlbmdpbmUtPmRpc3BsYXkgIT0gRUdMX05PX0RJU1BMQVkpIHsKLSAgICAg
ICAgZWdsTWFrZUN1cnJlbnQoZW5naW5lLT5kaXNwbGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05P
X1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAgICAgICAgaWYgKGVuZ2luZS0+Y29udGV4dCAh
PSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAgICAgICAgZWdsRGVzdHJveUNvbnRleHQoZW5naW5l
LT5kaXNwbGF5LCBlbmdpbmUtPmNvbnRleHQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmdp
bmUtPnN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0UpIHsKLSAgICAgICAgICAgIGVnbERlc3Ryb3lT
dXJmYWNlKGVuZ2luZS0+ZGlzcGxheSwgZW5naW5lLT5zdXJmYWNlKTsKLSAgICAgICAgfQotICAg
ICAgICBlZ2xUZXJtaW5hdGUoZW5naW5lLT5kaXNwbGF5KTsKLSAgICB9Ci0gICAgZW5naW5lLT5h
bmltYXRpbmcgPSAwOwotICAgIGVuZ2luZS0+ZGlzcGxheSA9IEVHTF9OT19ESVNQTEFZOwotICAg
IGVuZ2luZS0+Y29udGV4dCA9IEVHTF9OT19DT05URVhUOwotICAgIGVuZ2luZS0+c3VyZmFjZSA9
IEVHTF9OT19TVVJGQUNFOwotfQotCi0vKioKLSAqIFByb2Nlc3MgdGhlIG5leHQgaW5wdXQgZXZl
bnQuCi0gKi8KLXN0YXRpYyBpbnQzMl90IGVuZ2luZV9oYW5kbGVfaW5wdXQoc3RydWN0IGFuZHJv
aWRfYXBwKiBhcHAsIEFJbnB1dEV2ZW50KiBldmVudCkgewotICAgIHN0cnVjdCBlbmdpbmUqIGVu
Z2luZSA9IChzdHJ1Y3QgZW5naW5lKilhcHAtPnVzZXJEYXRhOwotICAgIGlmIChBSW5wdXRFdmVu
dF9nZXRUeXBlKGV2ZW50KSA9PSBBSU5QVVRfRVZFTlRfVFlQRV9NT1RJT04pIHsKLSAgICAgICAg
ZW5naW5lLT5hbmltYXRpbmcgPSAxOwotICAgICAgICBlbmdpbmUtPnN0YXRlLnggPSBBTW90aW9u
RXZlbnRfZ2V0WChldmVudCwgMCk7Ci0gICAgICAgIGVuZ2luZS0+c3RhdGUueSA9IEFNb3Rpb25F
dmVudF9nZXRZKGV2ZW50LCAwKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVy
biAwOwotfQotCi0vKioKLSAqIFByb2Nlc3MgdGhlIG5leHQgbWFpbiBjb21tYW5kLgotICovCi1z
dGF0aWMgdm9pZCBlbmdpbmVfaGFuZGxlX2NtZChzdHJ1Y3QgYW5kcm9pZF9hcHAqIGFwcCwgaW50
MzJfdCBjbWQpIHsKLSAgICBzdHJ1Y3QgZW5naW5lKiBlbmdpbmUgPSAoc3RydWN0IGVuZ2luZSop
YXBwLT51c2VyRGF0YTsKLSAgICBzd2l0Y2ggKGNtZCkgewotICAgICAgICBjYXNlIEFQUF9DTURf
U0FWRV9TVEFURToKLSAgICAgICAgICAgIC8vIFRoZSBzeXN0ZW0gaGFzIGFza2VkIHVzIHRvIHNh
dmUgb3VyIGN1cnJlbnQgc3RhdGUuICBEbyBzby4KLSAgICAgICAgICAgIGVuZ2luZS0+YXBwLT5z
YXZlZFN0YXRlID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2F2ZWRfc3RhdGUpKTsKLSAgICAgICAg
ICAgICooKHN0cnVjdCBzYXZlZF9zdGF0ZSopZW5naW5lLT5hcHAtPnNhdmVkU3RhdGUpID0gZW5n
aW5lLT5zdGF0ZTsKLSAgICAgICAgICAgIGVuZ2luZS0+YXBwLT5zYXZlZFN0YXRlU2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2F2ZWRfc3RhdGUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQVBQX0NNRF9JTklUX1dJTkRPVzoKLSAgICAgICAgICAgIC8vIFRoZSB3aW5kb3cgaXMgYmVp
bmcgc2hvd24sIGdldCBpdCByZWFkeS4KLSAgICAgICAgICAgIGlmIChlbmdpbmUtPmFwcC0+d2lu
ZG93ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBlbmdpbmVfaW5pdF9kaXNwbGF5KGVuZ2lu
ZSk7Ci0gICAgICAgICAgICAgICAgZW5naW5lX2RyYXdfZnJhbWUoZW5naW5lKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFQUF9DTURfVEVSTV9XSU5E
T1c6Ci0gICAgICAgICAgICAvLyBUaGUgd2luZG93IGlzIGJlaW5nIGhpZGRlbiBvciBjbG9zZWQs
IGNsZWFuIGl0IHVwLgotICAgICAgICAgICAgZW5naW5lX3Rlcm1fZGlzcGxheShlbmdpbmUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVBQX0NNRF9HQUlORURfRk9DVVM6Ci0g
ICAgICAgICAgICAvLyBXaGVuIG91ciBhcHAgZ2FpbnMgZm9jdXMsIHdlIHN0YXJ0IG1vbml0b3Jp
bmcgdGhlIGFjY2VsZXJvbWV0ZXIuCi0gICAgICAgICAgICBpZiAoZW5naW5lLT5hY2NlbGVyb21l
dGVyU2Vuc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBBU2Vuc29yRXZlbnRRdWV1ZV9l
bmFibGVTZW5zb3IoZW5naW5lLT5zZW5zb3JFdmVudFF1ZXVlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgZW5naW5lLT5hY2NlbGVyb21ldGVyU2Vuc29yKTsKLSAgICAgICAgICAgICAgICAvLyBX
ZSdkIGxpa2UgdG8gZ2V0IDYwIGV2ZW50cyBwZXIgc2Vjb25kIChpbiB1cykuCi0gICAgICAgICAg
ICAgICAgQVNlbnNvckV2ZW50UXVldWVfc2V0RXZlbnRSYXRlKGVuZ2luZS0+c2Vuc29yRXZlbnRR
dWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNv
ciwgKDEwMDBMLzYwKSoxMDAwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEFQUF9DTURfTE9TVF9GT0NVUzoKLSAgICAgICAgICAgIC8vIFdoZW4gb3Vy
IGFwcCBsb3NlcyBmb2N1cywgd2Ugc3RvcCBtb25pdG9yaW5nIHRoZSBhY2NlbGVyb21ldGVyLgot
ICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBhdm9pZCBjb25zdW1pbmcgYmF0dGVyeSB3aGlsZSBu
b3QgYmVpbmcgdXNlZC4KLSAgICAgICAgICAgIGlmIChlbmdpbmUtPmFjY2VsZXJvbWV0ZXJTZW5z
b3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIEFTZW5zb3JFdmVudFF1ZXVlX2Rpc2FibGVT
ZW5zb3IoZW5naW5lLT5zZW5zb3JFdmVudFF1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ZW5naW5lLT5hY2NlbGVyb21ldGVyU2Vuc29yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IC8vIEFsc28gc3RvcCBhbmltYXRpbmcuCi0gICAgICAgICAgICBlbmdpbmUtPmFuaW1hdGluZyA9
IDA7Ci0gICAgICAgICAgICBlbmdpbmVfZHJhd19mcmFtZShlbmdpbmUpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotfQotCi0vKioKLSAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQg
b2YgYSBuYXRpdmUgYXBwbGljYXRpb24gdGhhdCBpcyB1c2luZwotICogYW5kcm9pZF9uYXRpdmVf
YXBwX2dsdWUuICBJdCBydW5zIGluIGl0cyBvd24gdGhyZWFkLCB3aXRoIGl0cyBvd24KLSAqIGV2
ZW50IGxvb3AgZm9yIHJlY2VpdmluZyBpbnB1dCBldmVudHMgYW5kIGRvaW5nIG90aGVyIHRoaW5n
cy4KLSAqLwotdm9pZCBhbmRyb2lkX21haW4oc3RydWN0IGFuZHJvaWRfYXBwKiBzdGF0ZSkgewot
ICAgIHN0cnVjdCBlbmdpbmUgZW5naW5lOwotCi0gICAgLy8gTWFrZSBzdXJlIGdsdWUgaXNuJ3Qg
c3RyaXBwZWQuCi0gICAgYXBwX2R1bW15KCk7Ci0KLSAgICBtZW1zZXQoJmVuZ2luZSwgMCwgc2l6
ZW9mKGVuZ2luZSkpOwotICAgIHN0YXRlLT51c2VyRGF0YSA9ICZlbmdpbmU7Ci0gICAgc3RhdGUt
Pm9uQXBwQ21kID0gZW5naW5lX2hhbmRsZV9jbWQ7Ci0gICAgc3RhdGUtPm9uSW5wdXRFdmVudCA9
IGVuZ2luZV9oYW5kbGVfaW5wdXQ7Ci0gICAgZW5naW5lLmFwcCA9IHN0YXRlOwotCi0gICAgLy8g
UHJlcGFyZSB0byBtb25pdG9yIGFjY2VsZXJvbWV0ZXIKLSAgICBlbmdpbmUuc2Vuc29yTWFuYWdl
ciA9IEFTZW5zb3JNYW5hZ2VyX2dldEluc3RhbmNlKCk7Ci0gICAgZW5naW5lLmFjY2VsZXJvbWV0
ZXJTZW5zb3IgPSBBU2Vuc29yTWFuYWdlcl9nZXREZWZhdWx0U2Vuc29yKGVuZ2luZS5zZW5zb3JN
YW5hZ2VyLAotICAgICAgICAgICAgQVNFTlNPUl9UWVBFX0FDQ0VMRVJPTUVURVIpOwotICAgIGVu
Z2luZS5zZW5zb3JFdmVudFF1ZXVlID0gQVNlbnNvck1hbmFnZXJfY3JlYXRlRXZlbnRRdWV1ZShl
bmdpbmUuc2Vuc29yTWFuYWdlciwKLSAgICAgICAgICAgIHN0YXRlLT5sb29wZXIsIExPT1BFUl9J
RF9VU0VSLCBOVUxMLCBOVUxMKTsKLQotICAgIGlmIChzdGF0ZS0+c2F2ZWRTdGF0ZSAhPSBOVUxM
KSB7Ci0gICAgICAgIC8vIFdlIGFyZSBzdGFydGluZyB3aXRoIGEgcHJldmlvdXMgc2F2ZWQgc3Rh
dGU7IHJlc3RvcmUgZnJvbSBpdC4KLSAgICAgICAgZW5naW5lLnN0YXRlID0gKihzdHJ1Y3Qgc2F2
ZWRfc3RhdGUqKXN0YXRlLT5zYXZlZFN0YXRlOwotICAgIH0KLQotICAgIC8vIGxvb3Agd2FpdGlu
ZyBmb3Igc3R1ZmYgdG8gZG8uCi0KLSAgICB3aGlsZSAoMSkgewotICAgICAgICAvLyBSZWFkIGFs
bCBwZW5kaW5nIGV2ZW50cy4KLSAgICAgICAgaW50IGlkZW50OwotICAgICAgICBpbnQgZXZlbnRz
OwotICAgICAgICBzdHJ1Y3QgYW5kcm9pZF9wb2xsX3NvdXJjZSogc291cmNlOwotCi0gICAgICAg
IC8vIElmIG5vdCBhbmltYXRpbmcsIHdlIHdpbGwgYmxvY2sgZm9yZXZlciB3YWl0aW5nIGZvciBl
dmVudHMuCi0gICAgICAgIC8vIElmIGFuaW1hdGluZywgd2UgbG9vcCB1bnRpbCBhbGwgZXZlbnRz
IGFyZSByZWFkLCB0aGVuIGNvbnRpbnVlCi0gICAgICAgIC8vIHRvIGRyYXcgdGhlIG5leHQgZnJh
bWUgb2YgYW5pbWF0aW9uLgotICAgICAgICB3aGlsZSAoKGlkZW50PUFMb29wZXJfcG9sbEFsbChl
bmdpbmUuYW5pbWF0aW5nID8gMCA6IC0xLCBOVUxMLCAmZXZlbnRzLAotICAgICAgICAgICAgICAg
ICh2b2lkKiopJnNvdXJjZSkpID49IDApIHsKLQotICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGlz
IGV2ZW50LgotICAgICAgICAgICAgaWYgKHNvdXJjZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAg
ICAgc291cmNlLT5wcm9jZXNzKHN0YXRlLCBzb3VyY2UpOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICAvLyBJZiBhIHNlbnNvciBoYXMgZGF0YSwgcHJvY2VzcyBpdCBub3cuCi0gICAgICAg
ICAgICBpZiAoaWRlbnQgPT0gTE9PUEVSX0lEX1VTRVIpIHsKLSAgICAgICAgICAgICAgICBpZiAo
ZW5naW5lLmFjY2VsZXJvbWV0ZXJTZW5zb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAg
ICBBU2Vuc29yRXZlbnQgZXZlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChBU2Vuc29y
RXZlbnRRdWV1ZV9nZXRFdmVudHMoZW5naW5lLnNlbnNvckV2ZW50UXVldWUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmV2ZW50LCAxKSA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIExPR0koImFjY2VsZXJvbWV0ZXI6IHg9JWYgeT0lZiB6PSVmIiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXZlbnQuYWNjZWxlcmF0aW9uLngsIGV2ZW50LmFjY2VsZXJhdGlv
bi55LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5hY2NlbGVyYXRpb24u
eik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGFyZSBleGl0aW5nLgotICAgICAgICAg
ICAgaWYgKHN0YXRlLT5kZXN0cm95UmVxdWVzdGVkICE9IDApIHsKLSAgICAgICAgICAgICAgICBl
bmdpbmVfdGVybV9kaXNwbGF5KCZlbmdpbmUpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChlbmdpbmUuYW5pbWF0aW5nKSB7
Ci0gICAgICAgICAgICAvLyBEb25lIHdpdGggZXZlbnRzOyBkcmF3IG5leHQgYW5pbWF0aW9uIGZy
YW1lLgotICAgICAgICAgICAgZW5naW5lLnN0YXRlLmFuZ2xlICs9IC4wMWY7Ci0gICAgICAgICAg
ICBpZiAoZW5naW5lLnN0YXRlLmFuZ2xlID4gMSkgewotICAgICAgICAgICAgICAgIGVuZ2luZS5z
dGF0ZS5hbmdsZSA9IDA7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIERyYXdpbmcg
aXMgdGhyb3R0bGVkIHRvIHRoZSBzY3JlZW4gdXBkYXRlIHJhdGUsIHNvIHRoZXJlCi0gICAgICAg
ICAgICAvLyBpcyBubyBuZWVkIHRvIGRvIHRpbWluZyBoZXJlLgotICAgICAgICAgICAgZW5naW5l
X2RyYXdfZnJhbWUoJmVuZ2luZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0vL0VORF9JTkNMVURF
KGFsbCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9yZXMvdmFsdWVzL3N0
cmluZ3MueG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9y
ZXMvdmFsdWVzL3N0cmluZ3MueG1sCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVz
dC9hbmRyb2lkL2FwbXRlc3QvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAkobm9uZXhpc3RlbnQpCkBA
IC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxy
ZXNvdXJjZXM+Ci0gICAgPHN0cmluZyBuYW1lPSJhcHBfbmFtZSI+YXBtdGVzdDwvc3RyaW5nPgot
PC9yZXNvdXJjZXM+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hcG10ZXN0Lm0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19wcm9jZXNzaW5nL3Rlc3QvYXBtdGVzdC5tCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Np
bmcvdGVzdC9hcG10ZXN0Lm0JKG5vbmV4aXN0ZW50KQpAQCAtMSwzNTUgKzAsMCBAQAotZnVuY3Rp
b24gYXBtdGVzdCh0YXNrLCB0ZXN0bmFtZSwgZmlsZXBhdGgsIGNhc2VudW1iZXIsIGxlZ2FjeSkK
LSVBUE1URVNUIGlzIGEgdG9vbCB0byBwcm9jZXNzIEFQTSBmaWxlIHNldHMgYW5kIGVhc2lseSBk
aXNwbGF5IHRoZSBvdXRwdXQuCi0lICAgQVBNVEVTVChUQVNLLCBURVNUTkFNRSwgQ0FTRU5VTUJF
UikgcGVyZm9ybXMgb25lIG9mIHNldmVyYWwgVEFTS3M6Ci0lICAgICAndGVzdCcgIFByb2Nlc3Nl
cyB0aGUgZmlsZXMgdG8gcHJvZHVjZSB0ZXN0IG91dHB1dC4KLSUgICAgICdsaXN0JyAgUHJpbnRz
IGEgbGlzdCBvZiBjYXNlcyBpbiB0aGUgdGVzdCBzZXQsIHByZWNlZGVkIGJ5IHRoZWlyCi0lICAg
ICAgICAgICAgIENBU0VOVU1CRVJzLgotJSAgICAgJ3Nob3cnICBVc2VzIHNwY2xhYiB0byBzaG93
IHRoZSB0ZXN0IGNhc2Ugc3BlY2lmaWVkIGJ5IHRoZQotJSAgICAgICAgICAgICBDQVNFTlVNQkVS
IHBhcmFtZXRlci4KLSUKLSUgICB1c2luZyBhIHNldCBvZiB0ZXN0IGZpbGVzIGRldGVybWluZWQg
YnkgVEVTVE5BTUU6Ci0lICAgICAnYWxsJyAgIEFsbCB0ZXN0cy4KLSUgICAgICdhcG0nICAgVGhl
IHN0YW5kYXJkIEFQTSB0ZXN0IHNldCAoZGVmYXVsdCkuCi0lICAgICAnYXBtbScgIFRoZSBtb2Jp
bGUgQVBNIHRlc3Qgc2V0LgotJSAgICAgJ2FlYycgICBUaGUgQUVDIHRlc3Qgc2V0LgotJSAgICAg
J2FlY20nICBUaGUgQUVDTSB0ZXN0IHNldC4KLSUgICAgICdhZ2MnICAgVGhlIEFHQyB0ZXN0IHNl
dC4KLSUgICAgICducycgICAgVGhlIE5TIHRlc3Qgc2V0LgotJSAgICAgJ3ZhZCcgICBUaGUgVkFE
IHRlc3Qgc2V0LgotJQotJSAgIEZJTEVQQVRIIHNwZWNpZmllcyB0aGUgcGF0aCB0byB0aGUgdGVz
dCBkYXRhIGZpbGVzLgotJQotJSAgIENBU0VOVU1CRVIgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IGEg
c2luZ2xlIHRlc3QgY2FzZS4gT21pdCBDQVNFTlVNQkVSLAotJSAgIG9yIHNldCB0byB6ZXJvLCB0
byB1c2UgYWxsIHRlc3QgY2FzZXMuCi0lCi0KLWlmIG5hcmdpbiA8IDUgfHwgaXNlbXB0eShsZWdh
Y3kpCi0gICUgU2V0IHRvIHRydWUgdG8gcnVuIG9sZCBWUUUgcmVjb3JkaW5ncy4KLSAgbGVnYWN5
ID0gZmFsc2U7Ci1lbmQKLQotaWYgbmFyZ2luIDwgNCB8fCBpc2VtcHR5KGNhc2VudW1iZXIpCi0g
IGNhc2VudW1iZXIgPSAwOwotZW5kCi0KLWlmIG5hcmdpbiA8IDMgfHwgaXNlbXB0eShmaWxlcGF0
aCkKLSAgZmlsZXBhdGggPSAnZGF0YS8nOwotZW5kCi0KLWlmIG5hcmdpbiA8IDIgfHwgaXNlbXB0
eSh0ZXN0bmFtZSkKLSAgdGVzdG5hbWUgPSAnYWxsJzsKLWVuZAotCi1pZiBuYXJnaW4gPCAxIHx8
IGlzZW1wdHkodGFzaykKLSAgdGFzayA9ICd0ZXN0JzsKLWVuZAotCi1pZiB+c3RyY21wKHRhc2ss
ICd0ZXN0JykgJiYgfnN0cmNtcCh0YXNrLCAnbGlzdCcpICYmIH5zdHJjbXAodGFzaywgJ3Nob3cn
KQotICBlcnJvcihbJ1RBU0sgJyB0YXNrICcgaXMgbm90IHJlY29nbml6ZWQnXSk7Ci1lbmQKLQot
aWYgY2FzZW51bWJlciA9PSAwICYmIHN0cmNtcCh0YXNrLCAnc2hvdycpCi0gIGVycm9yKFsnQ0FT
RU5VTUJFUiBtdXN0IGJlIHNwZWNpZmllZCBmb3IgVEFTSyAnIHRhc2tdKTsKLWVuZAotCi1pbnBh
dGggPSBbZmlsZXBhdGggJ2lucHV0LyddOwotb3V0cGF0aCA9IFtmaWxlcGF0aCAnb3V0cHV0Lydd
OwotcmVmcGF0aCA9IFtmaWxlcGF0aCAncmVmZXJlbmNlLyddOwotCi1pZiBzdHJjbXAodGVzdG5h
bWUsICdhbGwnKQotICB0ZXN0cyA9IHsnYXBtJywnYXBtbScsJ2FlYycsJ2FlY20nLCdhZ2MnLCdu
cycsJ3ZhZCd9OwotZWxzZQotICB0ZXN0cyA9IHt0ZXN0bmFtZX07Ci1lbmQKLQotaWYgbGVnYWN5
Ci0gIHByb2duYW1lID0gJy4vdGVzdCc7Ci1lbHNlCi0gIHByb2duYW1lID0gJy4vcHJvY2Vzc190
ZXN0JzsKLWVuZAotCi1nbG9iYWwgZmFyRmlsZTsKLWdsb2JhbCBuZWFyRmlsZTsKLWdsb2JhbCBl
dmVudEZpbGU7Ci1nbG9iYWwgZGVsYXlGaWxlOwotZ2xvYmFsIGRyaWZ0RmlsZTsKLQotaWYgbGVn
YWN5Ci0gIGZhckZpbGUgPSAndnFlRmFyLnBjbSc7Ci0gIG5lYXJGaWxlID0gJ3ZxZU5lYXIucGNt
JzsKLSAgZXZlbnRGaWxlID0gJ3ZxZUV2ZW50LmRhdCc7Ci0gIGRlbGF5RmlsZSA9ICd2cWVCdWYu
ZGF0JzsKLSAgZHJpZnRGaWxlID0gJ3ZxZURyaWZ0LmRhdCc7Ci1lbHNlCi0gIGZhckZpbGUgPSAn
YXBtX2Zhci5wY20nOwotICBuZWFyRmlsZSA9ICdhcG1fbmVhci5wY20nOwotICBldmVudEZpbGUg
PSAnYXBtX2V2ZW50LmRhdCc7Ci0gIGRlbGF5RmlsZSA9ICdhcG1fZGVsYXkuZGF0JzsKLSAgZHJp
ZnRGaWxlID0gJ2FwbV9kcmlmdC5kYXQnOwotZW5kCi0KLXNpbXVsYXRlTW9kZSA9IGZhbHNlOwot
bkVyciA9IDA7Ci1uQ2FzZXMgPSAwOwotZm9yIGk9MTpsZW5ndGgodGVzdHMpCi0gIHNpbXVsYXRl
TW9kZSA9IGZhbHNlOwotCi0gIGlmIHN0cmNtcCh0ZXN0c3tpfSwgJ2FwbScpCi0gICAgdGVzdGRp
ciA9IFsnYXBtLyddOwotICAgIG91dGZpbGUgPSBbJ291dCddOwotICAgIGlmIGxlZ2FjeQotICAg
ICAgb3B0ID0gWyctZWMgMSAtYWdjIDIgLW5jIDIgLXZhZCAzJ107Ci0gICAgZWxzZQotICAgICAg
b3B0ID0gWyctLW5vX3Byb2dyZXNzIC1ocGYnIC4uLgotICAgICAgICAgICcgLWFlYyAtLWRyaWZ0
X2NvbXBlbnNhdGlvbiAtYWdjIC0tZml4ZWRfZGlnaXRhbCcgLi4uCi0gICAgICAgICAgJyAtbnMg
LS1uc19tb2RlcmF0ZSAtdmFkJ107Ci0gICAgZW5kCi0KLSAgZWxzZWlmIHN0cmNtcCh0ZXN0c3tp
fSwgJ2FwbS1zd2InKQotICAgIHNpbXVsYXRlTW9kZSA9IHRydWU7Ci0gICAgdGVzdGRpciA9IFsn
YXBtLXN3Yi8nXTsKLSAgICBvdXRmaWxlID0gWydvdXQnXTsKLSAgICBpZiBsZWdhY3kKLSAgICAg
IG9wdCA9IFsnLWZzIDMyMDAwIC1lYyAxIC1hZ2MgMiAtbmMgMiddOwotICAgIGVsc2UKLSAgICAg
IG9wdCA9IFsnLS1ub19wcm9ncmVzcyAtZnMgMzIwMDAgLWhwZicgLi4uCi0gICAgICAgICAgJyAt
YWVjIC0tZHJpZnRfY29tcGVuc2F0aW9uIC1hZ2MgLS1hZGFwdGl2ZV9kaWdpdGFsJyAuLi4KLSAg
ICAgICAgICAnIC1ucyAtLW5zX21vZGVyYXRlIC12YWQnXTsKLSAgICBlbmQKLSAgZWxzZWlmIHN0
cmNtcCh0ZXN0c3tpfSwgJ2FwbW0nKQotICAgIHRlc3RkaXIgPSBbJ2FwbW0vJ107Ci0gICAgb3V0
ZmlsZSA9IFsnb3V0J107Ci0gICAgb3B0ID0gWyctYWVjIC0tZHJpZnRfY29tcGVuc2F0aW9uIC1h
Z2MgLS1maXhlZF9kaWdpdGFsIC1ocGYgLW5zICcgLi4uCi0gICAgICAgICctLW5zX21vZGVyYXRl
J107Ci0KLSAgZWxzZQotICAgIGVycm9yKFsnVEVTVE5BTUUgJyB0ZXN0c3tpfSAnIGlzIG5vdCBy
ZWNvZ25pemVkJ10pOwotICBlbmQKLQotICBpbnBhdGh0ZXN0ID0gW2lucGF0aCB0ZXN0ZGlyXTsK
LSAgb3V0cGF0aHRlc3QgPSBbb3V0cGF0aCB0ZXN0ZGlyXTsKLSAgcmVmcGF0aHRlc3QgPSBbcmVm
cGF0aCB0ZXN0ZGlyXTsKLQotICBpZiB+ZXhpc3QoaW5wYXRodGVzdCwnZGlyJykKLSAgICBlcnJv
cihbJ0lucHV0IGRpcmVjdG9yeSAnIGlucGF0aHRlc3QgJyBkb2VzIG5vdCBleGlzdCddKTsKLSAg
ZW5kCi0KLSAgaWYgfmV4aXN0KHJlZnBhdGh0ZXN0LCdkaXInKQotICAgIHdhcm5pbmcoWydSZWZl
cmVuY2UgZGlyZWN0b3J5ICcgcmVmcGF0aHRlc3QgJyBkb2VzIG5vdCBleGlzdCddKTsKLSAgZW5k
Ci0KLSAgW3N0YXR1cywgZXJyTXNnXSA9IG1rZGlyKG91dHBhdGh0ZXN0KTsKLSAgaWYgKHN0YXR1
cyA9PSAwKQotICAgIGVycm9yKGVyck1zZyk7Ci0gIGVuZAotCi0gIFtuRXJyLCBuQ2FzZXNdID0g
cmVjdXJzZURpcihpbnBhdGh0ZXN0LCBvdXRwYXRodGVzdCwgcmVmcGF0aHRlc3QsIG91dGZpbGUs
IC4uLgotICAgICAgcHJvZ25hbWUsIG9wdCwgc2ltdWxhdGVNb2RlLCBuRXJyLCBuQ2FzZXMsIHRh
c2ssIGNhc2VudW1iZXIsIGxlZ2FjeSk7Ci0KLSAgaWYgc3RyY21wKHRhc2ssICd0ZXN0JykgfHwg
c3RyY21wKHRhc2ssICdzaG93JykKLSAgICBzeXN0ZW0oWydybSAnIGZhckZpbGVdKTsKLSAgICBz
eXN0ZW0oWydybSAnIG5lYXJGaWxlXSk7Ci0gICAgaWYgc2ltdWxhdGVNb2RlID09IGZhbHNlCi0g
ICAgICBzeXN0ZW0oWydybSAnIGV2ZW50RmlsZV0pOwotICAgICAgc3lzdGVtKFsncm0gJyBkZWxh
eUZpbGVdKTsKLSAgICAgIHN5c3RlbShbJ3JtICcgZHJpZnRGaWxlXSk7Ci0gICAgZW5kCi0gIGVu
ZAotZW5kCi0KLWlmIH5zdHJjbXAodGFzaywgJ2xpc3QnKQotICBpZiBuRXJyID09IDAKLSAgICBm
cHJpbnRmKDEsICdcbkFsbCBmaWxlcyBhcmUgYml0LWV4YWN0IHRvIHJlZmVyZW5jZVxuJywgbkVy
cik7Ci0gIGVsc2UKLSAgICBmcHJpbnRmKDEsICdcbiVkIGZpbGVzIGFyZSBOT1QgYml0LWV4YWN0
IHRvIHJlZmVyZW5jZVxuJywgbkVycik7Ci0gIGVuZAotZW5kCi0KLQotZnVuY3Rpb24gW25FcnJP
dXQsIG5DYXNlc10gPSByZWN1cnNlRGlyKGlucGF0aCwgb3V0cGF0aCwgcmVmcGF0aCwgLi4uCi0g
ICAgb3V0ZmlsZSwgcHJvZ25hbWUsIG9wdCwgc2ltdWxhdGVNb2RlLCBuRXJyLCBuQ2FzZXMsIHRh
c2ssIGNhc2VudW1iZXIsIC4uLgotICAgIGxlZ2FjeSkKLQotZ2xvYmFsIGZhckZpbGU7Ci1nbG9i
YWwgbmVhckZpbGU7Ci1nbG9iYWwgZXZlbnRGaWxlOwotZ2xvYmFsIGRlbGF5RmlsZTsKLWdsb2Jh
bCBkcmlmdEZpbGU7Ci0KLWRpcnMgPSBkaXIoaW5wYXRoKTsKLW5EaXJzID0gMDsKLW5FcnJPdXQg
PSBuRXJyOwotZm9yIGk9MzpsZW5ndGgoZGlycykgJSBza2lwIC4gYW5kIC4uCi0gIG5EaXJzID0g
bkRpcnMgKyBkaXJzKGkpLmlzZGlyOwotZW5kCi0KLQotaWYgbkRpcnMgPT0gMAotICBuQ2FzZXMg
PSBuQ2FzZXMgKyAxOwotCi0gIGlmIGNhc2VudW1iZXIgPT0gbkNhc2VzIHx8IGNhc2VudW1iZXIg
PT0gMAotCi0gICAgaWYgc3RyY21wKHRhc2ssICdsaXN0JykKLSAgICAgIGZwcmludGYoW251bTJz
dHIobkNhc2VzKSAnLiAnIG91dGZpbGUgJ1xuJ10pCi0gICAgZWxzZQotICAgICAgdmFkb3V0Zmls
ZSA9IFsndmFkXycgb3V0ZmlsZSAnLmRhdCddOwotICAgICAgb3V0ZmlsZSA9IFtvdXRmaWxlICcu
cGNtJ107Ci0KLSAgICAgICUgQ2hlY2sgZm9yIFZBRCB0ZXN0Ci0gICAgICB2YWRUZXN0ID0gMDsK
LSAgICAgIGlmIH5pc2VtcHR5KGZpbmRzdHIob3B0LCAnLXZhZCcpKQotICAgICAgICB2YWRUZXN0
ID0gMTsKLSAgICAgICAgaWYgbGVnYWN5Ci0gICAgICAgICAgb3B0ID0gW29wdCAnICcgb3V0cGF0
aCB2YWRvdXRmaWxlXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIG9wdCA9IFtvcHQgJyAtLXZh
ZF9vdXRfZmlsZSAnIG91dHBhdGggdmFkb3V0ZmlsZV07Ci0gICAgICAgIGVuZAotICAgICAgZW5k
Ci0KLSAgICAgIGlmIGV4aXN0KFtpbnBhdGggJ3ZxZUZhci5wY20nXSkKLSAgICAgICAgc3lzdGVt
KFsnbG4gLXMgLWYgJyBpbnBhdGggJ3ZxZUZhci5wY20gJyBmYXJGaWxlXSk7Ci0gICAgICBlbHNl
aWYgZXhpc3QoW2lucGF0aCAnYXBtX2Zhci5wY20nXSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMg
LWYgJyBpbnBhdGggJ2FwbV9mYXIucGNtICcgZmFyRmlsZV0pOwotICAgICAgZW5kCi0KLSAgICAg
IGlmIGV4aXN0KFtpbnBhdGggJ3ZxZU5lYXIucGNtJ10pCi0gICAgICAgIHN5c3RlbShbJ2xuIC1z
IC1mICcgaW5wYXRoICd2cWVOZWFyLnBjbSAnIG5lYXJGaWxlXSk7Ci0gICAgICBlbHNlaWYgZXhp
c3QoW2lucGF0aCAnYXBtX25lYXIucGNtJ10pCi0gICAgICAgIHN5c3RlbShbJ2xuIC1zIC1mICcg
aW5wYXRoICdhcG1fbmVhci5wY20gJyBuZWFyRmlsZV0pOwotICAgICAgZW5kCi0KLSAgICAgIGlm
IGV4aXN0KFtpbnBhdGggJ3ZxZUV2ZW50LmRhdCddKQotICAgICAgICBzeXN0ZW0oWydsbiAtcyAt
ZiAnIGlucGF0aCAndnFlRXZlbnQuZGF0ICcgZXZlbnRGaWxlXSk7Ci0gICAgICBlbHNlaWYgZXhp
c3QoW2lucGF0aCAnYXBtX2V2ZW50LmRhdCddKQotICAgICAgICBzeXN0ZW0oWydsbiAtcyAtZiAn
IGlucGF0aCAnYXBtX2V2ZW50LmRhdCAnIGV2ZW50RmlsZV0pOwotICAgICAgZW5kCi0KLSAgICAg
IGlmIGV4aXN0KFtpbnBhdGggJ3ZxZUJ1Zi5kYXQnXSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMg
LWYgJyBpbnBhdGggJ3ZxZUJ1Zi5kYXQgJyBkZWxheUZpbGVdKTsKLSAgICAgIGVsc2VpZiBleGlz
dChbaW5wYXRoICdhcG1fZGVsYXkuZGF0J10pCi0gICAgICAgIHN5c3RlbShbJ2xuIC1zIC1mICcg
aW5wYXRoICdhcG1fZGVsYXkuZGF0ICcgZGVsYXlGaWxlXSk7Ci0gICAgICBlbmQKLQotICAgICAg
aWYgZXhpc3QoW2lucGF0aCAndnFlU2tldy5kYXQnXSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMg
LWYgJyBpbnBhdGggJ3ZxZVNrZXcuZGF0ICcgZHJpZnRGaWxlXSk7Ci0gICAgICBlbHNlaWYgZXhp
c3QoW2lucGF0aCAndnFlRHJpZnQuZGF0J10pCi0gICAgICAgIHN5c3RlbShbJ2xuIC1zIC1mICcg
aW5wYXRoICd2cWVEcmlmdC5kYXQgJyBkcmlmdEZpbGVdKTsKLSAgICAgIGVsc2VpZiBleGlzdChb
aW5wYXRoICdhcG1fZHJpZnQuZGF0J10pCi0gICAgICAgIHN5c3RlbShbJ2xuIC1zIC1mICcgaW5w
YXRoICdhcG1fZHJpZnQuZGF0ICcgZHJpZnRGaWxlXSk7Ci0gICAgICBlbmQKLQotICAgICAgaWYg
c2ltdWxhdGVNb2RlID09IGZhbHNlCi0gICAgICAgIGNvbW1hbmQgPSBbcHJvZ25hbWUgJyAtbyAn
IG91dHBhdGggb3V0ZmlsZSAnICcgb3B0XTsKLSAgICAgIGVsc2UKLSAgICAgICAgaWYgbGVnYWN5
Ci0gICAgICAgICAgaW5wdXRDbWQgPSBbJyAtaW4gJyBuZWFyRmlsZV07Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICBpbnB1dENtZCA9IFsnIC1pICcgbmVhckZpbGVdOwotICAgICAgICBlbmQKLQot
ICAgICAgICBpZiBleGlzdChbZmFyRmlsZV0pCi0gICAgICAgICAgaWYgbGVnYWN5Ci0gICAgICAg
ICAgICBpbnB1dENtZCA9IFsnIC1pZiAnIGZhckZpbGUgaW5wdXRDbWRdOwotICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGlucHV0Q21kID0gWycgLWlyICcgZmFyRmlsZSBpbnB1dENtZF07Ci0g
ICAgICAgICAgZW5kCi0gICAgICAgIGVuZAotICAgICAgICBjb21tYW5kID0gW3Byb2duYW1lIGlu
cHV0Q21kICcgLW8gJyBvdXRwYXRoIG91dGZpbGUgJyAnIG9wdF07Ci0gICAgICBlbmQKLSAgICAg
ICUgVGhpcyBwcmV2ZW50cyBNQVRMQUIgZnJvbSB1c2luZyBpdHMgb3duIEMgbGlicmFyaWVzLgot
ICAgICAgc2hlbGxjbWQgPSBbJ2Jhc2ggLWMgInVuc2V0IExEX0xJQlJBUllfUEFUSDsnXTsKLSAg
ICAgIGZwcmludGYoW2NvbW1hbmQgJ1xuJ10pOwotICAgICAgW3N0YXR1cywgcmVzdWx0XSA9IHN5
c3RlbShbc2hlbGxjbWQgY29tbWFuZCAnIiddKTsKLSAgICAgIGZwcmludGYocmVzdWx0KTsKLQot
ICAgICAgZnByaW50ZihbJ1JlZmVyZW5jZSBmaWxlOiAnIHJlZnBhdGggb3V0ZmlsZSAnXG4nXSk7
Ci0KLSAgICAgIGlmIHZhZFRlc3QgPT0gMQotICAgICAgICBlcXVhbF90b19yZWYgPSBhcmVfZmls
ZXNfZXF1YWwoW291dHBhdGggdmFkb3V0ZmlsZV0sIC4uLgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgW3JlZnBhdGggdmFkb3V0ZmlsZV0sIC4uLgotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludDgnKTsKLSAgICAgICAgaWYgfmVxdWFsX3Rv
X3JlZgotICAgICAgICAgIG5FcnIgPSBuRXJyICsgMTsKLSAgICAgICAgZW5kCi0gICAgICBlbmQK
LQotICAgICAgW2VxdWFsX3RvX3JlZiwgZGlmZnZlY3Rvcl0gPSBhcmVfZmlsZXNfZXF1YWwoW291
dHBhdGggb3V0ZmlsZV0sIC4uLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgW3JlZnBhdGggb3V0ZmlsZV0sIC4uLgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ludDE2Jyk7Ci0gICAgICBpZiB+ZXF1
YWxfdG9fcmVmCi0gICAgICAgIG5FcnIgPSBuRXJyICsgMTsKLSAgICAgIGVuZAotCi0gICAgICBp
ZiBzdHJjbXAodGFzaywgJ3Nob3cnKQotICAgICAgICAlIEFzc3VtZSB0aGUgbGFzdCBpbml0IGdp
dmVzIHRoZSBzYW1wbGUgcmF0ZSBvZiBpbnRlcmVzdC4KLSAgICAgICAgc3RyX2lkeCA9IHN0cmZp
bmQocmVzdWx0LCAnU2FtcGxlIHJhdGU6Jyk7Ci0gICAgICAgIGZzID0gc3RyMm51bShyZXN1bHQo
c3RyX2lkeChlbmQpICsgMTM6c3RyX2lkeChlbmQpICsgMTcpKTsKLSAgICAgICAgZnByaW50Zign
VXNpbmcgJWQgSHpcbicsIGZzKTsKLQotICAgICAgICBpZiBleGlzdChbZmFyRmlsZV0pCi0gICAg
ICAgICAgc3BjbGFiKGZzLCBmYXJGaWxlLCBuZWFyRmlsZSwgW3JlZnBhdGggb3V0ZmlsZV0sIC4u
LgotICAgICAgICAgICAgICBbb3V0cGF0aCBvdXRmaWxlXSwgZGlmZnZlY3Rvcik7Ci0gICAgICAg
ICAgJXNwY2xhYihmcywgZGlmZnZlY3Rvcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICBzcGNs
YWIoZnMsIG5lYXJGaWxlLCBbcmVmcGF0aCBvdXRmaWxlXSwgW291dHBhdGggb3V0ZmlsZV0sIC4u
LgotICAgICAgICAgICAgICBkaWZmdmVjdG9yKTsKLSAgICAgICAgICAlc3BjbGFiKGZzLCBkaWZm
dmVjdG9yKTsKLSAgICAgICAgZW5kCi0gICAgICBlbmQKLSAgICBlbmQKLSAgZW5kCi1lbHNlCi0K
LSAgZm9yIGk9MzpsZW5ndGgoZGlycykKLSAgICBpZiBkaXJzKGkpLmlzZGlyCi0gICAgICBbbkVy
ciwgbkNhc2VzXSA9IHJlY3Vyc2VEaXIoW2lucGF0aCBkaXJzKGkpLm5hbWUgJy8nXSwgb3V0cGF0
aCwgLi4uCi0gICAgICAgICAgcmVmcGF0aCxbb3V0ZmlsZSAnXycgZGlycyhpKS5uYW1lXSwgcHJv
Z25hbWUsIG9wdCwgLi4uCi0gICAgICAgICAgc2ltdWxhdGVNb2RlLCBuRXJyLCBuQ2FzZXMsIHRh
c2ssIGNhc2VudW1iZXIsIGxlZ2FjeSk7Ci0gICAgZW5kCi0gIGVuZAotZW5kCi1uRXJyT3V0ID0g
bkVycjsKLQotZnVuY3Rpb24gW2FyZV9lcXVhbCwgZGlmZnZlY3Rvcl0gPSAuLi4KLSAgICBhcmVf
ZmlsZXNfZXF1YWwobmV3ZmlsZSwgcmVmZmlsZSwgcHJlY2lzaW9uLCBkaWZmdmVjdG9yKQotCi1h
cmVfZXF1YWwgPSBmYWxzZTsKLWRpZmZ2ZWN0b3IgPSAwOwotaWYgfmV4aXN0KG5ld2ZpbGUsJ2Zp
bGUnKQotICB3YXJuaW5nKFsnT3V0cHV0IGZpbGUgJyBuZXdmaWxlICcgZG9lcyBub3QgZXhpc3Qn
XSk7ICAKLSAgcmV0dXJuCi1lbmQKLQotaWYgfmV4aXN0KHJlZmZpbGUsJ2ZpbGUnKQotICB3YXJu
aW5nKFsnUmVmZXJlbmNlIGZpbGUgJyByZWZmaWxlICcgZG9lcyBub3QgZXhpc3QnXSk7ICAKLSAg
cmV0dXJuCi1lbmQKLQotZmlkID0gZm9wZW4obmV3ZmlsZSwncmInKTsKLW5ldyA9IGZyZWFkKGZp
ZCxpbmYscHJlY2lzaW9uKTsKLWZjbG9zZShmaWQpOwotCi1maWQgPSBmb3BlbihyZWZmaWxlLCdy
YicpOwotcmVmID0gZnJlYWQoZmlkLGluZixwcmVjaXNpb24pOwotZmNsb3NlKGZpZCk7Ci0KLWlm
IGxlbmd0aChuZXcpIH49IGxlbmd0aChyZWYpCi0gIHdhcm5pbmcoJ1JlZmVyZW5jZSBpcyBub3Qg
dGhlIHNhbWUgbGVuZ3RoIGFzIG91dHB1dCcpOwotICBtaW5sZW5ndGggPSBtaW4obGVuZ3RoKG5l
dyksIGxlbmd0aChyZWYpKTsKLSAgbmV3ID0gbmV3KDE6bWlubGVuZ3RoKTsKLSAgcmVmID0gcmVm
KDE6bWlubGVuZ3RoKTsKLWVuZAotZGlmZnZlY3RvciA9IG5ldyAtIHJlZjsKLQotaWYgaXNlcXVh
bChuZXcsIHJlZikKLSAgZnByaW50ZihbbmV3ZmlsZSAnIGlzIGJpdC1leGFjdCB0byByZWZlcmVu
Y2VcbiddKTsKLSAgYXJlX2VxdWFsID0gdHJ1ZTsKLWVsc2UKLSAgaWYgaXNlbXB0eShuZXcpCi0g
ICAgd2FybmluZyhbbmV3ZmlsZSAnIGlzIGVtcHR5J10pOwotICAgIHJldHVybgotICBlbmQKLSAg
c25yID0gc25yc2VnKG5ldyxyZWYsODApOwotICBmcHJpbnRmKCdcbicpOwotICBhcmVfZXF1YWwg
PSBmYWxzZTsKLWVuZApJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fYnVmZmVyX3Rvb2xzLmNj
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlvX2J1ZmZlcl90b29scy5jYwkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fYnVmZmVyX3Rvb2xzLmNjCShu
b25leGlzdGVudCkKQEAgLTEsNTUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUg
VGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICog
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9w
ZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4g
IEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRo
ZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNp
bmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fYnVmZmVy
X3Rvb2xzLmgiCi0KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1u
YW1lc3BhY2UgdGVzdCB7Ci0KLXZvaWQgU2V0dXBGcmFtZShjb25zdCBTdHJlYW1Db25maWcmIHN0
cmVhbV9jb25maWcsCi0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZmxvYXQqPiogZnJhbWUs
Ci0gICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+KiBmcmFtZV9zYW1wbGVzKSB7Ci0g
IGZyYW1lX3NhbXBsZXMtPnJlc2l6ZShzdHJlYW1fY29uZmlnLm51bV9jaGFubmVscygpICoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbV9jb25maWcubnVtX2ZyYW1lcygpKTsKLSAgZnJh
bWUtPnJlc2l6ZShzdHJlYW1fY29uZmlnLm51bV9jaGFubmVscygpKTsKLSAgZm9yIChzaXplX3Qg
Y2ggPSAwOyBjaCA8IHN0cmVhbV9jb25maWcubnVtX2NoYW5uZWxzKCk7ICsrY2gpIHsKLSAgICAo
KmZyYW1lKVtjaF0gPSAmKCpmcmFtZV9zYW1wbGVzKVtjaCAqIHN0cmVhbV9jb25maWcubnVtX2Zy
YW1lcygpXTsKLSAgfQotfQotCi12b2lkIENvcHlWZWN0b3JUb0F1ZGlvQnVmZmVyKGNvbnN0IFN0
cmVhbUNvbmZpZyYgc3RyZWFtX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnRjOjpBcnJheVZpZXc8Y29uc3QgZmxvYXQ+IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXVkaW9CdWZmZXIqIGRlc3RpbmF0aW9uKSB7Ci0gIHN0ZDo6dmVjdG9yPGZsb2F0
Kj4gaW5wdXQ7Ci0gIHN0ZDo6dmVjdG9yPGZsb2F0PiBpbnB1dF9zYW1wbGVzOwotCi0gIFNldHVw
RnJhbWUoc3RyZWFtX2NvbmZpZywgJmlucHV0LCAmaW5wdXRfc2FtcGxlcyk7Ci0KLSAgUlRDX0NI
RUNLX0VRKGlucHV0X3NhbXBsZXMuc2l6ZSgpLCBzb3VyY2Uuc2l6ZSgpKTsKLSAgbWVtY3B5KGlu
cHV0X3NhbXBsZXMuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLAotICAgICAgICAgc291cmNlLnNpemUo
KSAqIHNpemVvZihzb3VyY2VbMF0pKTsKLQotICBkZXN0aW5hdGlvbi0+Q29weUZyb20oJmlucHV0
WzBdLCBzdHJlYW1fY29uZmlnKTsKLX0KLQotdm9pZCBFeHRyYWN0VmVjdG9yRnJvbUF1ZGlvQnVm
ZmVyKGNvbnN0IFN0cmVhbUNvbmZpZyYgc3RyZWFtX2NvbmZpZywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBdWRpb0J1ZmZlciogc291cmNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiogZGVzdGluYXRpb24pIHsKLSAgc3Rk
Ojp2ZWN0b3I8ZmxvYXQqPiBvdXRwdXQ7Ci0KLSAgU2V0dXBGcmFtZShzdHJlYW1fY29uZmlnLCAm
b3V0cHV0LCBkZXN0aW5hdGlvbik7Ci0KLSAgc291cmNlLT5Db3B5VG8oc3RyZWFtX2NvbmZpZywg
Jm91dHB1dFswXSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRpb19idWZmZXJfdG9vbHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRpb19idWZmZXJfdG9vbHMuaAkocmV2aXNpb24gMjEy
MjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fYnVmZmVyX3Rvb2xzLmgJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzNSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRD
IHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRo
YXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNv
dXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0
cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRy
aWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMg
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJS
VENfTU9EVUxFU19BVURJT19QUk9DRVNTSU5HX1RFU1RfQVVESU9fQlVGRkVSX1RPT0xTX0hfCi0j
ZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9BVURJT19CVUZGRVJf
VE9PTFNfSF8KLQotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9hcnJh
eV92aWV3LmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy9hdWRp
b19idWZmZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL2lu
Y2x1ZGUvYXVkaW9fcHJvY2Vzc2luZy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFj
ZSB0ZXN0IHsKLQotLy8gQ29waWVzIGEgdmVjdG9yIGludG8gYW4gYXVkaW9idWZmZXIuCi12b2lk
IENvcHlWZWN0b3JUb0F1ZGlvQnVmZmVyKGNvbnN0IFN0cmVhbUNvbmZpZyYgc3RyZWFtX2NvbmZp
ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjOjpBcnJheVZpZXc8Y29uc3QgZmxv
YXQ+IHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9CdWZmZXIqIGRl
c3RpbmF0aW9uKTsKLQotLy8gRXh0cmFjdHMgYSB2ZWN0b3IgZnJvbSBhbiBhdWRpb2J1ZmZlci4K
LXZvaWQgRXh0cmFjdFZlY3RvckZyb21BdWRpb0J1ZmZlcihjb25zdCBTdHJlYW1Db25maWcmIHN0
cmVhbV9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaW9CdWZm
ZXIqIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnZlY3Rv
cjxmbG9hdD4qIGRlc3RpbmF0aW9uKTsKLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19QUk9DRVNT
SU5HX1RFU1RfQVVESU9fQlVGRkVSX1RPT0xTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRp
b19wcm9jZXNzaW5nX3NpbXVsYXRvci5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9h
dWRpb19wcm9jZXNzaW5nX3NpbXVsYXRvci5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNz
aW5nL3Rlc3QvYXVkaW9fcHJvY2Vzc2luZ19zaW11bGF0b3IuY2MJKG5vbmV4aXN0ZW50KQpAQCAt
MSwzOTEgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMv
bW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fcHJvY2Vzc2luZ19zaW11bGF0b3Iu
aCIKLQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLSNpbmNsdWRl
IDxzc3RyZWFtPgotI2luY2x1ZGUgPHN0cmluZz4KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNs
dWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9zdHJpbmd1
dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9jb21tb25fYXVkaW8vaW5jbHVkZS9hdWRpb191dGls
LmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy9pbmNsdWRlL2F1
ZGlvX3Byb2Nlc3NpbmcuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7
Ci1uYW1lc3BhY2UgewotCi12b2lkIENvcHlGcm9tQXVkaW9GcmFtZShjb25zdCBBdWRpb0ZyYW1l
JiBzcmMsIENoYW5uZWxCdWZmZXI8ZmxvYXQ+KiBkZXN0KSB7Ci0gIFJUQ19DSEVDS19FUShzcmMu
bnVtX2NoYW5uZWxzXywgZGVzdC0+bnVtX2NoYW5uZWxzKCkpOwotICBSVENfQ0hFQ0tfRVEoc3Jj
LnNhbXBsZXNfcGVyX2NoYW5uZWxfLCBkZXN0LT5udW1fZnJhbWVzKCkpOwotICAvLyBDb3B5IHRo
ZSBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlci4KLSAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IHRtcChz
cmMuc2FtcGxlc19wZXJfY2hhbm5lbF8gKiBzcmMubnVtX2NoYW5uZWxzXyk7Ci0gIFMxNlRvRmxv
YXQoc3JjLmRhdGFfLCB0bXAuc2l6ZSgpLCB0bXAuZGF0YSgpKTsKLSAgRGVpbnRlcmxlYXZlKHRt
cC5kYXRhKCksIHNyYy5zYW1wbGVzX3Blcl9jaGFubmVsXywgc3JjLm51bV9jaGFubmVsc18sCi0g
ICAgICAgICAgICAgICBkZXN0LT5jaGFubmVscygpKTsKLX0KLQotc3RkOjpzdHJpbmcgR2V0SW5k
ZXhlZE91dHB1dFdhdkZpbGVuYW1lKGNvbnN0IHN0ZDo6c3RyaW5nJiB3YXZfbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnRlcikgewotICBzdGQ6
OnN0cmluZ3N0cmVhbSBzczsKLSAgc3MgPDwgd2F2X25hbWUuc3Vic3RyKDAsIHdhdl9uYW1lLnNp
emUoKSAtIDQpIDw8ICJfIiA8PCBjb3VudGVyCi0gICAgIDw8IHdhdl9uYW1lLnN1YnN0cih3YXZf
bmFtZS5zaXplKCkgLSA0KTsKLSAgcmV0dXJuIHNzLnN0cigpOwotfQotCi12b2lkIFdyaXRlRWNo
b0xpa2VsaWhvb2RHcmFwaEZpbGVIZWFkZXIoc3RkOjpvZnN0cmVhbSogb3V0cHV0X2ZpbGUpIHsK
LSAgKCpvdXRwdXRfZmlsZSkgPDwgImltcG9ydCBudW1weSBhcyBucCIgPDwgc3RkOjplbmRsCi0g
ICAgICAgICAgICAgICAgIDw8ICJpbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgcGx0IiA8PCBz
dGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgPDwgInkgPSBucC5hcnJheShbIjsKLX0KLQotdm9p
ZCBXcml0ZUVjaG9MaWtlbGlob29kR3JhcGhGaWxlRm9vdGVyKHN0ZDo6b2ZzdHJlYW0qIG91dHB1
dF9maWxlKSB7Ci0gICgqb3V0cHV0X2ZpbGUpIDw8ICJdKSIgPDwgc3RkOjplbmRsCi0gICAgICAg
ICAgICAgICAgIDw8ICJ4ID0gbnAuYXJhbmdlKGxlbih5KSkqLjAxIiA8PCBzdGQ6OmVuZGwKLSAg
ICAgICAgICAgICAgICAgPDwgInBsdC5wbG90KHgsIHkpIiA8PCBzdGQ6OmVuZGwKLSAgICAgICAg
ICAgICAgICAgPDwgInBsdC55bGFiZWwoJ0VjaG8gbGlrZWxpaG9vZCcpIiA8PCBzdGQ6OmVuZGwK
LSAgICAgICAgICAgICAgICAgPDwgInBsdC54bGFiZWwoJ1RpbWUgKHMpJykiIDw8IHN0ZDo6ZW5k
bAotICAgICAgICAgICAgICAgICA8PCAicGx0LnlsaW0oWzAsMV0pIiA8PCBzdGQ6OmVuZGwKLSAg
ICAgICAgICAgICAgICAgPDwgInBsdC5zaG93KCkiIDw8IHN0ZDo6ZW5kbDsKLX0KLQotfSAgLy8g
bmFtZXNwYWNlCi0KLVNpbXVsYXRpb25TZXR0aW5nczo6U2ltdWxhdGlvblNldHRpbmdzKCkgPSBk
ZWZhdWx0OwotU2ltdWxhdGlvblNldHRpbmdzOjpTaW11bGF0aW9uU2V0dGluZ3MoY29uc3QgU2lt
dWxhdGlvblNldHRpbmdzJikgPSBkZWZhdWx0OwotU2ltdWxhdGlvblNldHRpbmdzOjp+U2ltdWxh
dGlvblNldHRpbmdzKCkgPSBkZWZhdWx0OwotCi12b2lkIENvcHlUb0F1ZGlvRnJhbWUoY29uc3Qg
Q2hhbm5lbEJ1ZmZlcjxmbG9hdD4mIHNyYywgQXVkaW9GcmFtZSogZGVzdCkgewotICBSVENfQ0hF
Q0tfRVEoc3JjLm51bV9jaGFubmVscygpLCBkZXN0LT5udW1fY2hhbm5lbHNfKTsKLSAgUlRDX0NI
RUNLX0VRKHNyYy5udW1fZnJhbWVzKCksIGRlc3QtPnNhbXBsZXNfcGVyX2NoYW5uZWxfKTsKLSAg
Zm9yIChzaXplX3QgY2ggPSAwOyBjaCA8IGRlc3QtPm51bV9jaGFubmVsc187ICsrY2gpIHsKLSAg
ICBmb3IgKHNpemVfdCBzYW1wbGUgPSAwOyBzYW1wbGUgPCBkZXN0LT5zYW1wbGVzX3Blcl9jaGFu
bmVsXzsgKytzYW1wbGUpIHsKLSAgICAgIGRlc3QtPmRhdGFfW3NhbXBsZSAqIGRlc3QtPm51bV9j
aGFubmVsc18gKyBjaF0gPQotICAgICAgICAgIHNyYy5jaGFubmVscygpW2NoXVtzYW1wbGVdICog
MzI3Njc7Ci0gICAgfQotICB9Ci19Ci0KLUF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcjo6QXVkaW9Q
cm9jZXNzaW5nU2ltdWxhdG9yKAotICAgIGNvbnN0IFNpbXVsYXRpb25TZXR0aW5ncyYgc2V0dGlu
Z3MpCi0gICAgOiBzZXR0aW5nc18oc2V0dGluZ3MpIHsKLSAgaWYgKHNldHRpbmdzXy5yZWRfZ3Jh
cGhfb3V0cHV0X2ZpbGVuYW1lICYmCi0gICAgICBzZXR0aW5nc18ucmVkX2dyYXBoX291dHB1dF9m
aWxlbmFtZS0+c2l6ZSgpID4gMCkgewotICAgIHJlc2lkdWFsX2VjaG9fbGlrZWxpaG9vZF9ncmFw
aF93cml0ZXJfLm9wZW4oCi0gICAgICAgICpzZXR0aW5nc18ucmVkX2dyYXBoX291dHB1dF9maWxl
bmFtZSk7Ci0gICAgUlRDX0NIRUNLKHJlc2lkdWFsX2VjaG9fbGlrZWxpaG9vZF9ncmFwaF93cml0
ZXJfLmlzX29wZW4oKSk7Ci0gICAgV3JpdGVFY2hvTGlrZWxpaG9vZEdyYXBoRmlsZUhlYWRlcigm
cmVzaWR1YWxfZWNob19saWtlbGlob29kX2dyYXBoX3dyaXRlcl8pOwotICB9Ci19Ci0KLUF1ZGlv
UHJvY2Vzc2luZ1NpbXVsYXRvcjo6fkF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcigpIHsKLSAgaWYg
KHJlc2lkdWFsX2VjaG9fbGlrZWxpaG9vZF9ncmFwaF93cml0ZXJfLmlzX29wZW4oKSkgewotICAg
IFdyaXRlRWNob0xpa2VsaWhvb2RHcmFwaEZpbGVGb290ZXIoJnJlc2lkdWFsX2VjaG9fbGlrZWxp
aG9vZF9ncmFwaF93cml0ZXJfKTsKLSAgICByZXNpZHVhbF9lY2hvX2xpa2VsaWhvb2RfZ3JhcGhf
d3JpdGVyXy5jbG9zZSgpOwotICB9Ci19Ci0KLUF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcjo6U2Nv
cGVkVGltZXI6On5TY29wZWRUaW1lcigpIHsKLSAgaW50NjRfdCBpbnRlcnZhbCA9IHJ0Yzo6VGlt
ZU5hbm9zKCkgLSBzdGFydF90aW1lXzsKLSAgcHJvY190aW1lXy0+c3VtICs9IGludGVydmFsOwot
ICBwcm9jX3RpbWVfLT5tYXggPSBzdGQ6Om1heChwcm9jX3RpbWVfLT5tYXgsIGludGVydmFsKTsK
LSAgcHJvY190aW1lXy0+bWluID0gc3RkOjptaW4ocHJvY190aW1lXy0+bWluLCBpbnRlcnZhbCk7
Ci19Ci0KLXZvaWQgQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjpQcm9jZXNzU3RyZWFtKGJvb2wg
Zml4ZWRfaW50ZXJmYWNlKSB7Ci0gIGlmIChmaXhlZF9pbnRlcmZhY2UpIHsKLSAgICB7Ci0gICAg
ICBjb25zdCBhdXRvIHN0ID0gU2NvcGVkVGltZXIobXV0YWJsZV9wcm9jX3RpbWUoKSk7Ci0gICAg
ICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwgYXBfLT5Qcm9jZXNzU3Ry
ZWFtKCZmd2RfZnJhbWVfKSk7Ci0gICAgfQotICAgIENvcHlGcm9tQXVkaW9GcmFtZShmd2RfZnJh
bWVfLCBvdXRfYnVmXy5nZXQoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgY29uc3QgYXV0byBzdCA9IFNj
b3BlZFRpbWVyKG11dGFibGVfcHJvY190aW1lKCkpOwotICAgIFJUQ19DSEVDS19FUShBdWRpb1By
b2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8tPlByb2Nlc3NTdHJlYW0o
aW5fYnVmXy0+Y2hhbm5lbHMoKSwgaW5fY29uZmlnXywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dF9jb25maWdfLCBvdXRfYnVmXy0+Y2hhbm5lbHMoKSkpOwotICB9Ci0K
LSAgaWYgKGJ1ZmZlcl93cml0ZXJfKSB7Ci0gICAgYnVmZmVyX3dyaXRlcl8tPldyaXRlKCpvdXRf
YnVmXyk7Ci0gIH0KLQotICBpZiAocmVzaWR1YWxfZWNob19saWtlbGlob29kX2dyYXBoX3dyaXRl
cl8uaXNfb3BlbigpKSB7Ci0gICAgYXV0byBzdGF0cyA9IGFwXy0+R2V0U3RhdGlzdGljcygpOwot
ICAgIHJlc2lkdWFsX2VjaG9fbGlrZWxpaG9vZF9ncmFwaF93cml0ZXJfIDw8IHN0YXRzLnJlc2lk
dWFsX2VjaG9fbGlrZWxpaG9vZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8ICIsICI7Ci0gIH0KLQotICArK251bV9wcm9jZXNzX3N0cmVhbV9jYWxsc187Ci19
Ci0KLXZvaWQgQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjpQcm9jZXNzUmV2ZXJzZVN0cmVhbShi
b29sIGZpeGVkX2ludGVyZmFjZSkgewotICBpZiAoZml4ZWRfaW50ZXJmYWNlKSB7Ci0gICAgY29u
c3QgYXV0byBzdCA9IFNjb3BlZFRpbWVyKG11dGFibGVfcHJvY190aW1lKCkpOwotICAgIFJUQ19D
SEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8t
PlByb2Nlc3NSZXZlcnNlU3RyZWFtKCZyZXZfZnJhbWVfKSk7Ci0gICAgQ29weUZyb21BdWRpb0Zy
YW1lKHJldl9mcmFtZV8sIHJldmVyc2Vfb3V0X2J1Zl8uZ2V0KCkpOwotCi0gIH0gZWxzZSB7Ci0g
ICAgY29uc3QgYXV0byBzdCA9IFNjb3BlZFRpbWVyKG11dGFibGVfcHJvY190aW1lKCkpOwotICAg
IFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAg
ICBhcF8tPlByb2Nlc3NSZXZlcnNlU3RyZWFtKAotICAgICAgICAgICAgICAgICAgICAgcmV2ZXJz
ZV9pbl9idWZfLT5jaGFubmVscygpLCByZXZlcnNlX2luX2NvbmZpZ18sCi0gICAgICAgICAgICAg
ICAgICAgICByZXZlcnNlX291dF9jb25maWdfLCByZXZlcnNlX291dF9idWZfLT5jaGFubmVscygp
KSk7Ci0gIH0KLQotICBpZiAocmV2ZXJzZV9idWZmZXJfd3JpdGVyXykgewotICAgIHJldmVyc2Vf
YnVmZmVyX3dyaXRlcl8tPldyaXRlKCpyZXZlcnNlX291dF9idWZfKTsKLSAgfQotCi0gICsrbnVt
X3JldmVyc2VfcHJvY2Vzc19zdHJlYW1fY2FsbHNfOwotfQotCi12b2lkIEF1ZGlvUHJvY2Vzc2lu
Z1NpbXVsYXRvcjo6U2V0dXBCdWZmZXJzQ29uZmlnc091dHB1dHMoCi0gICAgaW50IGlucHV0X3Nh
bXBsZV9yYXRlX2h6LAotICAgIGludCBvdXRwdXRfc2FtcGxlX3JhdGVfaHosCi0gICAgaW50IHJl
dmVyc2VfaW5wdXRfc2FtcGxlX3JhdGVfaHosCi0gICAgaW50IHJldmVyc2Vfb3V0cHV0X3NhbXBs
ZV9yYXRlX2h6LAotICAgIGludCBpbnB1dF9udW1fY2hhbm5lbHMsCi0gICAgaW50IG91dHB1dF9u
dW1fY2hhbm5lbHMsCi0gICAgaW50IHJldmVyc2VfaW5wdXRfbnVtX2NoYW5uZWxzLAotICAgIGlu
dCByZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMpIHsKLSAgaW5fY29uZmlnXyA9IFN0cmVhbUNv
bmZpZyhpbnB1dF9zYW1wbGVfcmF0ZV9oeiwgaW5wdXRfbnVtX2NoYW5uZWxzKTsKLSAgaW5fYnVm
Xy5yZXNldChuZXcgQ2hhbm5lbEJ1ZmZlcjxmbG9hdD4oCi0gICAgICBydGM6OkNoZWNrZWREaXZF
eGFjdChpbnB1dF9zYW1wbGVfcmF0ZV9oeiwga0NodW5rc1BlclNlY29uZCksCi0gICAgICBpbnB1
dF9udW1fY2hhbm5lbHMpKTsKLQotICByZXZlcnNlX2luX2NvbmZpZ18gPQotICAgICAgU3RyZWFt
Q29uZmlnKHJldmVyc2VfaW5wdXRfc2FtcGxlX3JhdGVfaHosIHJldmVyc2VfaW5wdXRfbnVtX2No
YW5uZWxzKTsKLSAgcmV2ZXJzZV9pbl9idWZfLnJlc2V0KG5ldyBDaGFubmVsQnVmZmVyPGZsb2F0
PigKLSAgICAgIHJ0Yzo6Q2hlY2tlZERpdkV4YWN0KHJldmVyc2VfaW5wdXRfc2FtcGxlX3JhdGVf
aHosIGtDaHVua3NQZXJTZWNvbmQpLAotICAgICAgcmV2ZXJzZV9pbnB1dF9udW1fY2hhbm5lbHMp
KTsKLQotICBvdXRfY29uZmlnXyA9IFN0cmVhbUNvbmZpZyhvdXRwdXRfc2FtcGxlX3JhdGVfaHos
IG91dHB1dF9udW1fY2hhbm5lbHMpOwotICBvdXRfYnVmXy5yZXNldChuZXcgQ2hhbm5lbEJ1ZmZl
cjxmbG9hdD4oCi0gICAgICBydGM6OkNoZWNrZWREaXZFeGFjdChvdXRwdXRfc2FtcGxlX3JhdGVf
aHosIGtDaHVua3NQZXJTZWNvbmQpLAotICAgICAgb3V0cHV0X251bV9jaGFubmVscykpOwotCi0g
IHJldmVyc2Vfb3V0X2NvbmZpZ18gPQotICAgICAgU3RyZWFtQ29uZmlnKHJldmVyc2Vfb3V0cHV0
X3NhbXBsZV9yYXRlX2h6LCByZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMpOwotICByZXZlcnNl
X291dF9idWZfLnJlc2V0KG5ldyBDaGFubmVsQnVmZmVyPGZsb2F0PigKLSAgICAgIHJ0Yzo6Q2hl
Y2tlZERpdkV4YWN0KHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6LCBrQ2h1bmtzUGVyU2Vj
b25kKSwKLSAgICAgIHJldmVyc2Vfb3V0cHV0X251bV9jaGFubmVscykpOwotCi0gIGZ3ZF9mcmFt
ZV8uc2FtcGxlX3JhdGVfaHpfID0gaW5wdXRfc2FtcGxlX3JhdGVfaHo7Ci0gIGZ3ZF9mcmFtZV8u
c2FtcGxlc19wZXJfY2hhbm5lbF8gPQotICAgICAgcnRjOjpDaGVja2VkRGl2RXhhY3QoZndkX2Zy
YW1lXy5zYW1wbGVfcmF0ZV9oel8sIGtDaHVua3NQZXJTZWNvbmQpOwotICBmd2RfZnJhbWVfLm51
bV9jaGFubmVsc18gPSBpbnB1dF9udW1fY2hhbm5lbHM7Ci0KLSAgcmV2X2ZyYW1lXy5zYW1wbGVf
cmF0ZV9oel8gPSByZXZlcnNlX2lucHV0X3NhbXBsZV9yYXRlX2h6OwotICByZXZfZnJhbWVfLnNh
bXBsZXNfcGVyX2NoYW5uZWxfID0KLSAgICAgIHJ0Yzo6Q2hlY2tlZERpdkV4YWN0KHJldl9mcmFt
ZV8uc2FtcGxlX3JhdGVfaHpfLCBrQ2h1bmtzUGVyU2Vjb25kKTsKLSAgcmV2X2ZyYW1lXy5udW1f
Y2hhbm5lbHNfID0gcmV2ZXJzZV9pbnB1dF9udW1fY2hhbm5lbHM7Ci0KLSAgaWYgKHNldHRpbmdz
Xy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7Ci0gICAgc3RkOjpjb3V0IDw8ICJTYW1wbGUgcmF0ZXM6
IiA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgRm9yd2FyZCBpbnB1dDogIiA8PCBp
bnB1dF9zYW1wbGVfcmF0ZV9oeiA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgRm9y
d2FyZCBvdXRwdXQ6ICIgPDwgb3V0cHV0X3NhbXBsZV9yYXRlX2h6IDw8IHN0ZDo6ZW5kbDsKLSAg
ICBzdGQ6OmNvdXQgPDwgIiBSZXZlcnNlIGlucHV0OiAiIDw8IHJldmVyc2VfaW5wdXRfc2FtcGxl
X3JhdGVfaHoKLSAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAi
IFJldmVyc2Ugb3V0cHV0OiAiIDw8IHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6Ci0gICAg
ICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgIk51bWJlciBvZiBjaGFu
bmVsczogIiA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgRm9yd2FyZCBpbnB1dDog
IiA8PCBpbnB1dF9udW1fY2hhbm5lbHMgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAi
IEZvcndhcmQgb3V0cHV0OiAiIDw8IG91dHB1dF9udW1fY2hhbm5lbHMgPDwgc3RkOjplbmRsOwot
ICAgIHN0ZDo6Y291dCA8PCAiIFJldmVyc2UgaW5wdXQ6ICIgPDwgcmV2ZXJzZV9pbnB1dF9udW1f
Y2hhbm5lbHMgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAiIFJldmVyc2Ugb3V0cHV0
OiAiIDw8IHJldmVyc2Vfb3V0cHV0X251bV9jaGFubmVscwotICAgICAgICAgICAgICA8PCBzdGQ6
OmVuZGw7Ci0gIH0KLQotICBTZXR1cE91dHB1dCgpOwotfQotCi12b2lkIEF1ZGlvUHJvY2Vzc2lu
Z1NpbXVsYXRvcjo6U2V0dXBPdXRwdXQoKSB7Ci0gIGlmIChzZXR0aW5nc18ub3V0cHV0X2ZpbGVu
YW1lKSB7Ci0gICAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7Ci0gICAgaWYgKHNldHRpbmdzXy5zdG9y
ZV9pbnRlcm1lZGlhdGVfb3V0cHV0KSB7Ci0gICAgICBmaWxlbmFtZSA9IEdldEluZGV4ZWRPdXRw
dXRXYXZGaWxlbmFtZSgqc2V0dGluZ3NfLm91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9yZXNldF9jb3VudGVyXyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgIGZpbGVuYW1lID0gKnNldHRpbmdzXy5vdXRwdXRfZmlsZW5hbWU7
Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdhdldyaXRlcj4gb3V0X2ZpbGUoCi0gICAg
ICAgIG5ldyBXYXZXcml0ZXIoZmlsZW5hbWUsIG91dF9jb25maWdfLnNhbXBsZV9yYXRlX2h6KCks
Ci0gICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRfY29uZmlnXy5u
dW1fY2hhbm5lbHMoKSkpKTsKLSAgICBidWZmZXJfd3JpdGVyXy5yZXNldChuZXcgQ2hhbm5lbEJ1
ZmZlcldhdldyaXRlcihzdGQ6Om1vdmUob3V0X2ZpbGUpKSk7Ci0gIH0KLQotICBpZiAoc2V0dGlu
Z3NfLnJldmVyc2Vfb3V0cHV0X2ZpbGVuYW1lKSB7Ci0gICAgc3RkOjpzdHJpbmcgZmlsZW5hbWU7
Ci0gICAgaWYgKHNldHRpbmdzXy5zdG9yZV9pbnRlcm1lZGlhdGVfb3V0cHV0KSB7Ci0gICAgICBm
aWxlbmFtZSA9IEdldEluZGV4ZWRPdXRwdXRXYXZGaWxlbmFtZSgqc2V0dGluZ3NfLnJldmVyc2Vf
b3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0X3Jlc2V0X2NvdW50ZXJfKTsKLSAgICB9IGVsc2UgewotICAgICAgZmlsZW5h
bWUgPSAqc2V0dGluZ3NfLnJldmVyc2Vfb3V0cHV0X2ZpbGVuYW1lOwotICAgIH0KLQotICAgIHN0
ZDo6dW5pcXVlX3B0cjxXYXZXcml0ZXI+IHJldmVyc2Vfb3V0X2ZpbGUoCi0gICAgICAgIG5ldyBX
YXZXcml0ZXIoZmlsZW5hbWUsIHJldmVyc2Vfb3V0X2NvbmZpZ18uc2FtcGxlX3JhdGVfaHooKSwK
LSAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KHJldmVyc2Vfb3V0X2Nv
bmZpZ18ubnVtX2NoYW5uZWxzKCkpKSk7Ci0gICAgcmV2ZXJzZV9idWZmZXJfd3JpdGVyXy5yZXNl
dCgKLSAgICAgICAgbmV3IENoYW5uZWxCdWZmZXJXYXZXcml0ZXIoc3RkOjptb3ZlKHJldmVyc2Vf
b3V0X2ZpbGUpKSk7Ci0gIH0KLQotICArK291dHB1dF9yZXNldF9jb3VudGVyXzsKLX0KLQotdm9p
ZCBBdWRpb1Byb2Nlc3NpbmdTaW11bGF0b3I6OkRlc3Ryb3lBdWRpb1Byb2Nlc3NvcigpIHsKLSAg
aWYgKHNldHRpbmdzXy5hZWNfZHVtcF9vdXRwdXRfZmlsZW5hbWUpIHsKLSAgICBSVENfQ0hFQ0tf
RVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwgYXBfLT5TdG9wRGVidWdSZWNvcmRpbmcoKSk7
Ci0gIH0KLX0KLQotdm9pZCBBdWRpb1Byb2Nlc3NpbmdTaW11bGF0b3I6OkNyZWF0ZUF1ZGlvUHJv
Y2Vzc29yKCkgewotICBDb25maWcgY29uZmlnOwotICBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZyBh
cG1fY29uZmlnOwotICBpZiAoc2V0dGluZ3NfLnVzZV9iZiAmJiAqc2V0dGluZ3NfLnVzZV9iZikg
ewotICAgIGNvbmZpZy5TZXQ8QmVhbWZvcm1pbmc+KG5ldyBCZWFtZm9ybWluZygKLSAgICAgICAg
dHJ1ZSwgUGFyc2VBcnJheUdlb21ldHJ5KCpzZXR0aW5nc18ubWljcm9waG9uZV9wb3NpdGlvbnMp
LAotICAgICAgICBTcGhlcmljYWxQb2ludGYoRGVncmVlc1RvUmFkaWFucyhzZXR0aW5nc18udGFy
Z2V0X2FuZ2xlX2RlZ3JlZXMpLCAwLmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAxLmYpKSk7
Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy51c2VfdHMpIHsKLSAgICBjb25maWcuU2V0PEV4cGVyaW1l
bnRhbE5zPihuZXcgRXhwZXJpbWVudGFsTnMoKnNldHRpbmdzXy51c2VfdHMpKTsKLSAgfQotICBp
ZiAoc2V0dGluZ3NfLnVzZV9pZSkgewotICAgIGNvbmZpZy5TZXQ8SW50ZWxsaWdpYmlsaXR5Pihu
ZXcgSW50ZWxsaWdpYmlsaXR5KCpzZXR0aW5nc18udXNlX2llKSk7Ci0gIH0KLSAgaWYgKHNldHRp
bmdzXy51c2VfYWVjMykgewotICAgIGNvbmZpZy5TZXQ8RWNob0NhbmNlbGxlcjM+KG5ldyBFY2hv
Q2FuY2VsbGVyMygqc2V0dGluZ3NfLnVzZV9hZWMzKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy51
c2VfbGMpIHsKLSAgICBhcG1fY29uZmlnLmxldmVsX2NvbnRyb2xsZXIuZW5hYmxlZCA9ICpzZXR0
aW5nc18udXNlX2xjOwotICB9Ci0gIGlmIChzZXR0aW5nc18udXNlX3JlZmluZWRfYWRhcHRpdmVf
ZmlsdGVyKSB7Ci0gICAgY29uZmlnLlNldDxSZWZpbmVkQWRhcHRpdmVGaWx0ZXI+KAotICAgICAg
ICBuZXcgUmVmaW5lZEFkYXB0aXZlRmlsdGVyKCpzZXR0aW5nc18udXNlX3JlZmluZWRfYWRhcHRp
dmVfZmlsdGVyKSk7Ci0gIH0KLSAgY29uZmlnLlNldDxFeHRlbmRlZEZpbHRlcj4obmV3IEV4dGVu
ZGVkRmlsdGVyKAotICAgICAgIXNldHRpbmdzXy51c2VfZXh0ZW5kZWRfZmlsdGVyIHx8ICpzZXR0
aW5nc18udXNlX2V4dGVuZGVkX2ZpbHRlcikpOwotICBjb25maWcuU2V0PERlbGF5QWdub3N0aWM+
KG5ldyBEZWxheUFnbm9zdGljKCFzZXR0aW5nc18udXNlX2RlbGF5X2Fnbm9zdGljIHx8Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNldHRpbmdzXy51c2Vf
ZGVsYXlfYWdub3N0aWMpKTsKLSAgaWYgKHNldHRpbmdzXy51c2VfcmVkKSB7Ci0gICAgYXBtX2Nv
bmZpZy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yLmVuYWJsZWQgPSAqc2V0dGluZ3NfLnVzZV9yZWQ7
Ci0gIH0KLQotICBhcF8ucmVzZXQoQXVkaW9Qcm9jZXNzaW5nOjpDcmVhdGUoY29uZmlnKSk7Ci0g
IFJUQ19DSEVDSyhhcF8pOwotCi0gIGFwXy0+QXBwbHlDb25maWcoYXBtX2NvbmZpZyk7Ci0KLSAg
aWYgKHNldHRpbmdzXy51c2VfYWVjKSB7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2lu
Zzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+
RW5hYmxlKCpzZXR0aW5nc18udXNlX2FlYykpOwotICB9Ci0gIGlmIChzZXR0aW5nc18udXNlX2Fl
Y20pIHsKLSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAg
ICAgICAgICAgICAgYXBfLT5lY2hvX2NvbnRyb2xfbW9iaWxlKCktPkVuYWJsZSgqc2V0dGluZ3Nf
LnVzZV9hZWNtKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy51c2VfYWdjKSB7Ci0gICAgUlRDX0NI
RUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+
Z2Fpbl9jb250cm9sKCktPkVuYWJsZSgqc2V0dGluZ3NfLnVzZV9hZ2MpKTsKLSAgfQotICBpZiAo
c2V0dGluZ3NfLnVzZV9ocGYpIHsKLSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjpr
Tm9FcnJvciwKLSAgICAgICAgICAgICAgICAgYXBfLT5oaWdoX3Bhc3NfZmlsdGVyKCktPkVuYWJs
ZSgqc2V0dGluZ3NfLnVzZV9ocGYpKTsKLSAgfQotICBpZiAoc2V0dGluZ3NfLnVzZV9ucykgewot
ICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAg
ICAgICBhcF8tPm5vaXNlX3N1cHByZXNzaW9uKCktPkVuYWJsZSgqc2V0dGluZ3NfLnVzZV9ucykp
OwotICB9Ci0gIGlmIChzZXR0aW5nc18udXNlX2xlKSB7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlv
UHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+bGV2ZWxfZXN0aW1h
dG9yKCktPkVuYWJsZSgqc2V0dGluZ3NfLnVzZV9sZSkpOwotICB9Ci0gIGlmIChzZXR0aW5nc18u
dXNlX3ZhZCkgewotICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAot
ICAgICAgICAgICAgICAgICBhcF8tPnZvaWNlX2RldGVjdGlvbigpLT5FbmFibGUoKnNldHRpbmdz
Xy51c2VfdmFkKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy51c2VfYWdjX2xpbWl0ZXIpIHsKLSAg
ICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwgYXBfLT5nYWluX2NvbnRy
b2woKS0+ZW5hYmxlX2xpbWl0ZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqc2V0dGluZ3NfLnVzZV9hZ2NfbGltaXRlcikpOwotICB9Ci0gIGlmIChz
ZXR0aW5nc18uYWdjX3RhcmdldF9sZXZlbCkgewotICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nl
c3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8tPmdhaW5fY29udHJvbCgpLT5z
ZXRfdGFyZ2V0X2xldmVsX2RiZnMoCi0gICAgICAgICAgICAgICAgICAgICAqc2V0dGluZ3NfLmFn
Y190YXJnZXRfbGV2ZWwpKTsKLSAgfQotCi0gIGlmIChzZXR0aW5nc18uYWdjX21vZGUpIHsKLSAg
ICBSVENfQ0hFQ0tfRVEoCi0gICAgICAgIEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAg
ICAgIGFwXy0+Z2Fpbl9jb250cm9sKCktPnNldF9tb2RlKAotICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8d2VicnRjOjpHYWluQ29udHJvbDo6TW9kZT4oKnNldHRpbmdzXy5hZ2NfbW9kZSkpKTsKLSAg
fQotCi0gIGlmIChzZXR0aW5nc18udXNlX2RyaWZ0X2NvbXBlbnNhdGlvbikgewotICAgIFJUQ19D
SEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8t
PmVjaG9fY2FuY2VsbGF0aW9uKCktPmVuYWJsZV9kcmlmdF9jb21wZW5zYXRpb24oCi0gICAgICAg
ICAgICAgICAgICAgICAqc2V0dGluZ3NfLnVzZV9kcmlmdF9jb21wZW5zYXRpb24pKTsKLSAgfQot
Ci0gIGlmIChzZXR0aW5nc18uYWVjX3N1cHByZXNzaW9uX2xldmVsKSB7Ci0gICAgUlRDX0NIRUNL
X0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+ZWNo
b19jYW5jZWxsYXRpb24oKS0+c2V0X3N1cHByZXNzaW9uX2xldmVsKAotICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8d2VicnRjOjpFY2hvQ2FuY2VsbGF0aW9uOjpTdXBwcmVzc2lvbkxl
dmVsPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAqc2V0dGluZ3NfLmFlY19zdXBwcmVzc2lv
bl9sZXZlbCkpKTsKLSAgfQotCi0gIGlmIChzZXR0aW5nc18uYWVjbV9yb3V0aW5nX21vZGUpIHsK
LSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAg
ICAgICAgYXBfLT5lY2hvX2NvbnRyb2xfbW9iaWxlKCktPnNldF9yb3V0aW5nX21vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx3ZWJydGM6OkVjaG9Db250cm9sTW9iaWxlOjpS
b3V0aW5nTW9kZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgKnNldHRpbmdzXy5hZWNtX3Jv
dXRpbmdfbW9kZSkpKTsKLSAgfQotCi0gIGlmIChzZXR0aW5nc18udXNlX2FlY21fY29tZm9ydF9u
b2lzZSkgewotICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAg
ICAgICAgICAgICAgICBhcF8tPmVjaG9fY29udHJvbF9tb2JpbGUoKS0+ZW5hYmxlX2NvbWZvcnRf
bm9pc2UoCi0gICAgICAgICAgICAgICAgICAgICAqc2V0dGluZ3NfLnVzZV9hZWNtX2NvbWZvcnRf
bm9pc2UpKTsKLSAgfQotCi0gIGlmIChzZXR0aW5nc18udmFkX2xpa2VsaWhvb2QpIHsKLSAgICBS
VENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgICAg
YXBfLT52b2ljZV9kZXRlY3Rpb24oKS0+c2V0X2xpa2VsaWhvb2QoCi0gICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDx3ZWJydGM6OlZvaWNlRGV0ZWN0aW9uOjpMaWtlbGlob29kPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAqc2V0dGluZ3NfLnZhZF9saWtlbGlob29kKSkpOwotICB9
Ci0gIGlmIChzZXR0aW5nc18ubnNfbGV2ZWwpIHsKLSAgICBSVENfQ0hFQ0tfRVEoCi0gICAgICAg
IEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgIGFwXy0+bm9pc2Vfc3VwcHJlc3Np
b24oKS0+c2V0X2xldmVsKAotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Tm9pc2VTdXBwcmVzc2lv
bjo6TGV2ZWw+KCpzZXR0aW5nc18ubnNfbGV2ZWwpKSk7Ci0gIH0KLQotICBpZiAoc2V0dGluZ3Nf
LnVzZV90cykgewotICAgIGFwXy0+c2V0X3N0cmVhbV9rZXlfcHJlc3NlZCgqc2V0dGluZ3NfLnVz
ZV90cyk7Ci0gIH0KLQotICBpZiAoc2V0dGluZ3NfLmFlY19kdW1wX291dHB1dF9maWxlbmFtZSkg
ewotICAgIHNpemVfdCBrTWF4RmlsZW5hbWVTaXplID0gQXVkaW9Qcm9jZXNzaW5nOjprTWF4Rmls
ZW5hbWVTaXplOwotICAgIFJUQ19DSEVDS19MRShzZXR0aW5nc18uYWVjX2R1bXBfb3V0cHV0X2Zp
bGVuYW1lLT5zaXplKCksIGtNYXhGaWxlbmFtZVNpemUpOwotICAgIFJUQ19DSEVDS19FUShBdWRp
b1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8tPlN0YXJ0RGVidWdS
ZWNvcmRpbmcoCi0gICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc18uYWVjX2R1bXBfb3V0cHV0
X2ZpbGVuYW1lLT5jX3N0cigpLCAtMSkpOwotICB9Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0
Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRpb19wcm9j
ZXNzaW5nX3NpbXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlvX3By
b2Nlc3Npbmdfc2ltdWxhdG9yLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L2F1ZGlvX3Byb2Nlc3Npbmdfc2ltdWxhdG9yLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxODIgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVE
SU9fUFJPQ0VTU0lOR19URVNUX0FVRElPX1BST0NFU1NJTkdfU0lNVUxBVE9SX0hfCi0jZGVmaW5l
IFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9BVURJT19QUk9DRVNTSU5HX1NJ
TVVMQVRPUl9IXwotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGZzdHJlYW0+Ci0j
aW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0K
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS90aW1ldXRpbHMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFz
ZS9jb25zdHJ1Y3Rvcm1hZ2ljLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2Uvb3B0aW9uYWwuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvY29tbW9uX2F1ZGlvL2NoYW5uZWxfYnVmZmVyLmgiCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy9pbmNsdWRlL2F1ZGlvX3Byb2Nlc3Np
bmcuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdGVz
dF91dGlscy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotLy8g
SG9sZHMgYWxsIHRoZSBwYXJhbWV0ZXJzIGF2YWlsYWJsZSBmb3IgY29udHJvbGxpbmcgdGhlIHNp
bXVsYXRpb24uCi1zdHJ1Y3QgU2ltdWxhdGlvblNldHRpbmdzIHsKLSAgU2ltdWxhdGlvblNldHRp
bmdzKCk7Ci0gIFNpbXVsYXRpb25TZXR0aW5ncyhjb25zdCBTaW11bGF0aW9uU2V0dGluZ3MmKTsK
LSAgflNpbXVsYXRpb25TZXR0aW5ncygpOwotICBydGM6Ok9wdGlvbmFsPGludD4gc3RyZWFtX2Rl
bGF5OwotICBydGM6Ok9wdGlvbmFsPGludD4gc3RyZWFtX2RyaWZ0X3NhbXBsZXM7Ci0gIHJ0Yzo6
T3B0aW9uYWw8aW50PiBvdXRwdXRfc2FtcGxlX3JhdGVfaHo7Ci0gIHJ0Yzo6T3B0aW9uYWw8aW50
PiBvdXRwdXRfbnVtX2NoYW5uZWxzOwotICBydGM6Ok9wdGlvbmFsPGludD4gcmV2ZXJzZV9vdXRw
dXRfc2FtcGxlX3JhdGVfaHo7Ci0gIHJ0Yzo6T3B0aW9uYWw8aW50PiByZXZlcnNlX291dHB1dF9u
dW1fY2hhbm5lbHM7Ci0gIHJ0Yzo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+IG1pY3JvcGhvbmVfcG9z
aXRpb25zOwotICBpbnQgdGFyZ2V0X2FuZ2xlX2RlZ3JlZXMgPSA5MDsKLSAgcnRjOjpPcHRpb25h
bDxzdGQ6OnN0cmluZz4gb3V0cHV0X2ZpbGVuYW1lOwotICBydGM6Ok9wdGlvbmFsPHN0ZDo6c3Ry
aW5nPiByZXZlcnNlX291dHB1dF9maWxlbmFtZTsKLSAgcnRjOjpPcHRpb25hbDxzdGQ6OnN0cmlu
Zz4gaW5wdXRfZmlsZW5hbWU7Ci0gIHJ0Yzo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+IHJldmVyc2Vf
aW5wdXRfZmlsZW5hbWU7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gdXNlX2FlYzsKLSAgcnRjOjpP
cHRpb25hbDxib29sPiB1c2VfYWVjbTsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1c2VfcmVkOyAg
Ly8gUmVzaWR1YWwgRWNobyBEZXRlY3Rvci4KLSAgcnRjOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4g
cmVkX2dyYXBoX291dHB1dF9maWxlbmFtZTsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1c2VfYWdj
OwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9ocGY7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4g
dXNlX25zOwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV90czsKLSAgcnRjOjpPcHRpb25hbDxi
b29sPiB1c2VfYmY7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gdXNlX2llOwotICBydGM6Ok9wdGlv
bmFsPGJvb2w+IHVzZV92YWQ7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gdXNlX2xlOwotICBydGM6
Ok9wdGlvbmFsPGJvb2w+IHVzZV9hbGw7Ci0gIHJ0Yzo6T3B0aW9uYWw8aW50PiBhZWNfc3VwcHJl
c3Npb25fbGV2ZWw7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gdXNlX2RlbGF5X2Fnbm9zdGljOwot
ICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9leHRlbmRlZF9maWx0ZXI7Ci0gIHJ0Yzo6T3B0aW9u
YWw8Ym9vbD4gdXNlX2RyaWZ0X2NvbXBlbnNhdGlvbjsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1
c2VfYWVjMzsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1c2VfbGM7Ci0gIHJ0Yzo6T3B0aW9uYWw8
aW50PiBhZWNtX3JvdXRpbmdfbW9kZTsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1c2VfYWVjbV9j
b21mb3J0X25vaXNlOwotICBydGM6Ok9wdGlvbmFsPGludD4gYWdjX21vZGU7Ci0gIHJ0Yzo6T3B0
aW9uYWw8aW50PiBhZ2NfdGFyZ2V0X2xldmVsOwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9h
Z2NfbGltaXRlcjsKLSAgcnRjOjpPcHRpb25hbDxpbnQ+IGFnY19jb21wcmVzc2lvbl9nYWluOwot
ICBydGM6Ok9wdGlvbmFsPGludD4gdmFkX2xpa2VsaWhvb2Q7Ci0gIHJ0Yzo6T3B0aW9uYWw8aW50
PiBuc19sZXZlbDsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1c2VfcmVmaW5lZF9hZGFwdGl2ZV9m
aWx0ZXI7Ci0gIGJvb2wgcmVwb3J0X3BlcmZvcm1hbmNlID0gZmFsc2U7Ci0gIGJvb2wgcmVwb3J0
X2JpdGV4YWN0bmVzcyA9IGZhbHNlOwotICBib29sIHVzZV92ZXJib3NlX2xvZ2dpbmcgPSBmYWxz
ZTsKLSAgYm9vbCBkaXNjYXJkX2FsbF9zZXR0aW5nc19pbl9hZWNkdW1wID0gdHJ1ZTsKLSAgcnRj
OjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gYWVjX2R1bXBfaW5wdXRfZmlsZW5hbWU7Ci0gIHJ0Yzo6
T3B0aW9uYWw8c3RkOjpzdHJpbmc+IGFlY19kdW1wX291dHB1dF9maWxlbmFtZTsKLSAgYm9vbCBm
aXhlZF9pbnRlcmZhY2UgPSBmYWxzZTsKLSAgYm9vbCBzdG9yZV9pbnRlcm1lZGlhdGVfb3V0cHV0
ID0gZmFsc2U7Ci19OwotCi0vLyBIb2xkcyBhIGZldyBzdGF0aXN0aWNzIGFib3V0IGEgc2VyaWVz
IG9mIFRpY2tJbnRlcnZhbHMuCi1zdHJ1Y3QgVGlja0ludGVydmFsU3RhdHMgewotICBUaWNrSW50
ZXJ2YWxTdGF0cygpIDogbWluKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSB7
fQotICBpbnQ2NF90IHN1bTsKLSAgaW50NjRfdCBtYXg7Ci0gIGludDY0X3QgbWluOwotfTsKLQot
Ly8gQ29waWVzIHNhbXBsZXMgcHJlc2VudCBpbiBhIENoYW5uZWxCdWZmZXIgaW50byBhbiBBdWRp
b0ZyYW1lLgotdm9pZCBDb3B5VG9BdWRpb0ZyYW1lKGNvbnN0IENoYW5uZWxCdWZmZXI8ZmxvYXQ+
JiBzcmMsIEF1ZGlvRnJhbWUqIGRlc3QpOwotCi0vLyBQcm92aWRlcyBjb21tb24gZnVuY3Rpb25h
bGl0eSBmb3IgcGVyZm9ybWluZyBhdWRpb3Byb2Nlc3Npbmcgc2ltdWxhdGlvbnMuCi1jbGFzcyBB
dWRpb1Byb2Nlc3NpbmdTaW11bGF0b3IgewotIHB1YmxpYzoKLSAgc3RhdGljIGNvbnN0IGludCBr
Q2h1bmtzUGVyU2Vjb25kID0gMTAwMCAvIEF1ZGlvUHJvY2Vzc2luZzo6a0NodW5rU2l6ZU1zOwot
Ci0gIGV4cGxpY2l0IEF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcihjb25zdCBTaW11bGF0aW9uU2V0
dGluZ3MmIHNldHRpbmdzKTsKLSAgdmlydHVhbCB+QXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yKCk7
Ci0KLSAgLy8gUHJvY2Vzc2VzIHRoZSBkYXRhIGluIHRoZSBpbnB1dC4KLSAgdmlydHVhbCB2b2lk
IFByb2Nlc3MoKSA9IDA7Ci0KLSAgLy8gUmV0dXJucyB0aGUgZXhlY3V0aW9uIHRpbWUgb2YgYWxs
IEF1ZGlvUHJvY2Vzc2luZyBjYWxscy4KLSAgY29uc3QgVGlja0ludGVydmFsU3RhdHMmIHByb2Nf
dGltZSgpIGNvbnN0IHsgcmV0dXJuIHByb2NfdGltZV87IH0KLQotICAvLyBSZXBvcnRzIHdoZXRo
ZXIgdGhlIHByb2Nlc3NlZCByZWNvcmRpbmcgd2FzIGJpdGV4YWN0LgotICBib29sIE91dHB1dFdh
c0JpdGV4YWN0KCkgeyByZXR1cm4gYml0ZXhhY3Rfb3V0cHV0XzsgfQotCi0gIHNpemVfdCBnZXRf
bnVtX3Byb2Nlc3Nfc3RyZWFtX2NhbGxzKCkgeyByZXR1cm4gbnVtX3Byb2Nlc3Nfc3RyZWFtX2Nh
bGxzXzsgfQotICBzaXplX3QgZ2V0X251bV9yZXZlcnNlX3Byb2Nlc3Nfc3RyZWFtX2NhbGxzKCkg
ewotICAgIHJldHVybiBudW1fcmV2ZXJzZV9wcm9jZXNzX3N0cmVhbV9jYWxsc187Ci0gIH0KLQot
IHByb3RlY3RlZDoKLSAgLy8gUkFJSSBjbGFzcyBmb3IgZXhlY3V0aW9uIHRpbWUgbWVhc3VyZW1l
bnQuIFVwZGF0ZXMgdGhlIHByb3ZpZGVkCi0gIC8vIFRpY2tJbnRlcnZhbFN0YXRzIGJhc2VkIG9u
IHRoZSB0aW1lIGJldHdlZW4gU2NvcGVkVGltZXIgY3JlYXRpb24gYW5kCi0gIC8vIGxlYXZpbmcg
dGhlIGVuY2xvc2luZyBzY29wZS4KLSAgY2xhc3MgU2NvcGVkVGltZXIgewotICAgcHVibGljOgot
ICAgIGV4cGxpY2l0IFNjb3BlZFRpbWVyKFRpY2tJbnRlcnZhbFN0YXRzKiBwcm9jX3RpbWUpCi0g
ICAgICAgIDogcHJvY190aW1lXyhwcm9jX3RpbWUpLCBzdGFydF90aW1lXyhydGM6OlRpbWVOYW5v
cygpKSB7fQotCi0gICAgflNjb3BlZFRpbWVyKCk7Ci0KLSAgIHByaXZhdGU6Ci0gICAgVGlja0lu
dGVydmFsU3RhdHMqIGNvbnN0IHByb2NfdGltZV87Ci0gICAgaW50NjRfdCBzdGFydF90aW1lXzsK
LSAgfTsKLQotICBUaWNrSW50ZXJ2YWxTdGF0cyogbXV0YWJsZV9wcm9jX3RpbWUoKSB7IHJldHVy
biAmcHJvY190aW1lXzsgfQotICB2b2lkIFByb2Nlc3NTdHJlYW0oYm9vbCBmaXhlZF9pbnRlcmZh
Y2UpOwotICB2b2lkIFByb2Nlc3NSZXZlcnNlU3RyZWFtKGJvb2wgZml4ZWRfaW50ZXJmYWNlKTsK
LSAgdm9pZCBDcmVhdGVBdWRpb1Byb2Nlc3NvcigpOwotICB2b2lkIERlc3Ryb3lBdWRpb1Byb2Nl
c3NvcigpOwotICB2b2lkIFNldHVwQnVmZmVyc0NvbmZpZ3NPdXRwdXRzKGludCBpbnB1dF9zYW1w
bGVfcmF0ZV9oeiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgb3V0cHV0
X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBy
ZXZlcnNlX2lucHV0X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCByZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZV9oeiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgaW5wdXRfbnVtX2NoYW5uZWxzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRwdXRfbnVtX2NoYW5uZWxzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXZlcnNlX2lucHV0X251bV9jaGFubmVscywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV2ZXJzZV9vdXRwdXRfbnVt
X2NoYW5uZWxzKTsKLQotICBjb25zdCBTaW11bGF0aW9uU2V0dGluZ3Mgc2V0dGluZ3NfOwotICBz
dGQ6OnVuaXF1ZV9wdHI8QXVkaW9Qcm9jZXNzaW5nPiBhcF87Ci0KLSAgc3RkOjp1bmlxdWVfcHRy
PENoYW5uZWxCdWZmZXI8ZmxvYXQ+PiBpbl9idWZfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5l
bEJ1ZmZlcjxmbG9hdD4+IG91dF9idWZfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZl
cjxmbG9hdD4+IHJldmVyc2VfaW5fYnVmXzsKLSAgc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZm
ZXI8ZmxvYXQ+PiByZXZlcnNlX291dF9idWZfOwotICBTdHJlYW1Db25maWcgaW5fY29uZmlnXzsK
LSAgU3RyZWFtQ29uZmlnIG91dF9jb25maWdfOwotICBTdHJlYW1Db25maWcgcmV2ZXJzZV9pbl9j
b25maWdfOwotICBTdHJlYW1Db25maWcgcmV2ZXJzZV9vdXRfY29uZmlnXzsKLSAgc3RkOjp1bmlx
dWVfcHRyPENoYW5uZWxCdWZmZXJXYXZSZWFkZXI+IGJ1ZmZlcl9yZWFkZXJfOwotICBzdGQ6OnVu
aXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZlcldhdlJlYWRlcj4gcmV2ZXJzZV9idWZmZXJfcmVhZGVyXzsK
LSAgQXVkaW9GcmFtZSByZXZfZnJhbWVfOwotICBBdWRpb0ZyYW1lIGZ3ZF9mcmFtZV87Ci0gIGJv
b2wgYml0ZXhhY3Rfb3V0cHV0XyA9IHRydWU7Ci0KLSBwcml2YXRlOgotICB2b2lkIFNldHVwT3V0
cHV0KCk7Ci0KLSAgc2l6ZV90IG51bV9wcm9jZXNzX3N0cmVhbV9jYWxsc18gPSAwOwotICBzaXpl
X3QgbnVtX3JldmVyc2VfcHJvY2Vzc19zdHJlYW1fY2FsbHNfID0gMDsKLSAgc2l6ZV90IG91dHB1
dF9yZXNldF9jb3VudGVyXyA9IDA7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDaGFubmVsQnVmZmVyV2F2
V3JpdGVyPiBidWZmZXJfd3JpdGVyXzsKLSAgc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZmZXJX
YXZXcml0ZXI+IHJldmVyc2VfYnVmZmVyX3dyaXRlcl87Ci0gIFRpY2tJbnRlcnZhbFN0YXRzIHBy
b2NfdGltZV87Ci0gIHN0ZDo6b2ZzdHJlYW0gcmVzaWR1YWxfZWNob19saWtlbGlob29kX2dyYXBo
X3dyaXRlcl87Ci0KLSAgUlRDX0RJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhBdWRpb1By
b2Nlc3NpbmdTaW11bGF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5h
bWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19QUk9DRVNT
SU5HX1RFU1RfQVVESU9fUFJPQ0VTU0lOR19TSU1VTEFUT1JfSF8KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90
ZXN0L2F1ZGlvcHJvY19mbG9hdC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRp
b3Byb2NfZmxvYXQuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlv
cHJvY19mbG9hdC5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ0MyArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAoYykgMjAxNCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBS
ZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwg
aW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0
aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0g
KiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNl
IHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPG1lbW9yeT4KLQot
I2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAiZ2ZsYWdzL2dmbGFncy5oIgotI2luY2x1
ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvaW5jbHVkZS9hdWRpb19wcm9jZXNz
aW5nLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2Fl
Y19kdW1wX2Jhc2VkX3NpbXVsYXRvci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X3Byb2Nlc3NpbmcvdGVzdC9hdWRpb19wcm9jZXNzaW5nX3NpbXVsYXRvci5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC93YXZfYmFzZWRfc2ltdWxhdG9y
LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIHRlc3QgewotbmFtZXNwYWNlIHsK
LQotY29uc3QgaW50IGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSA9IC0xMDAwMDsKLQotY29u
c3QgY2hhciBrVXNhZ2VEZXNjcmlwdGlvbltdID0KLSAgICAiVXNhZ2U6IGF1ZGlvcHJvY19mIFtv
cHRpb25zXSAtaSA8aW5wdXQud2F2PlxuIgotICAgICIgICAgICAgICAgICAgICAgICAgb3JcbiIK
LSAgICAiICAgICAgIGF1ZGlvcHJvY19mIFtvcHRpb25zXSAtZHVtcF9pbnB1dCA8YWVjX2R1bXA+
XG4iCi0gICAgIlxuXG4iCi0gICAgIkNvbW1hbmQtbGluZSB0b29sIHRvIHNpbXVsYXRlIGEgY2Fs
bCB1c2luZyB0aGUgYXVkaW8gIgotICAgICJwcm9jZXNzaW5nIG1vZHVsZSwgZWl0aGVyIGJhc2Vk
IG9uIHdhdiBmaWxlcyBvciAiCi0gICAgInByb3RvYnVmIGRlYnVnIGR1bXAgcmVjb3JkaW5ncy4i
OwotCi1ERUZJTkVfc3RyaW5nKGR1bXBfaW5wdXQsICIiLCAiQWVjIGR1bXAgaW5wdXQgZmlsZW5h
bWUiKTsKLURFRklORV9zdHJpbmcoZHVtcF9vdXRwdXQsICIiLCAiQWVjIGR1bXAgb3V0cHV0IGZp
bGVuYW1lIik7Ci1ERUZJTkVfc3RyaW5nKGksICIiLCAiRm9yd2FyZCBzdHJlYW0gaW5wdXQgd2F2
IGZpbGVuYW1lIik7Ci1ERUZJTkVfc3RyaW5nKG8sICIiLCAiRm9yd2FyZCBzdHJlYW0gb3V0cHV0
IHdhdiBmaWxlbmFtZSIpOwotREVGSU5FX3N0cmluZyhyaSwgIiIsICJSZXZlcnNlIHN0cmVhbSBp
bnB1dCB3YXYgZmlsZW5hbWUiKTsKLURFRklORV9zdHJpbmcocm8sICIiLCAiUmV2ZXJzZSBzdHJl
YW0gb3V0cHV0IHdhdiBmaWxlbmFtZSIpOwotREVGSU5FX2ludDMyKG91dHB1dF9udW1fY2hhbm5l
bHMsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAg
ICAgICJOdW1iZXIgb2YgZm9yd2FyZCBzdHJlYW0gb3V0cHV0IGNoYW5uZWxzIik7Ci1ERUZJTkVf
aW50MzIocmV2ZXJzZV9vdXRwdXRfbnVtX2NoYW5uZWxzLAotICAgICAgICAgICAgIGtQYXJhbWV0
ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiTnVtYmVyIG9mIFJldmVyc2Ugc3Ry
ZWFtIG91dHB1dCBjaGFubmVscyIpOwotREVGSU5FX2ludDMyKG91dHB1dF9zYW1wbGVfcmF0ZV9o
eiwKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAg
ICAgIkZvcndhcmQgc3RyZWFtIG91dHB1dCBzYW1wbGUgcmF0ZSBpbiBIeiIpOwotREVGSU5FX2lu
dDMyKHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgIGtQYXJhbWV0
ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiUmV2ZXJzZSBzdHJlYW0gb3V0cHV0
IHNhbXBsZSByYXRlIGluIEh6Iik7Ci1ERUZJTkVfc3RyaW5nKG1pY19wb3NpdGlvbnMsCi0gICAg
ICAgICAgICAgICIiLAotICAgICAgICAgICAgICAiU3BhY2UgZGVsaW1pdGVkIGNhcnRlc2lhbiBj
b29yZGluYXRlcyBvZiBtaWNyb3Bob25lcyBpbiAiCi0gICAgICAgICAgICAgICJtZXRlcnMuIFRo
ZSBjb29yZGluYXRlcyBvZiBlYWNoIHBvaW50IGFyZSBjb250aWd1b3VzLiBGb3IgYSAiCi0gICAg
ICAgICAgICAgICJ0d28gZWxlbWVudCBhcnJheTogXCJ4MSB5MSB6MSB4MiB5MiB6MlwiIik7Ci1E
RUZJTkVfaW50MzIodGFyZ2V0X2FuZ2xlX2RlZ3JlZXMsCi0gICAgICAgICAgICAgOTAsCi0gICAg
ICAgICAgICAgIlRoZSBhemltdXRoIG9mIHRoZSB0YXJnZXQgaW4gZGVncmVlcyAoMC0zNTkpLiBP
bmx5IGFwcGxpZXMgdG8gIgotICAgICAgICAgICAgICJiZWFtZm9ybWluZy4iKTsKLURFRklORV9i
b29sKGZpeGVkX2ludGVyZmFjZSwKLSAgICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgIlVz
ZSB0aGUgZml4ZWQgaW50ZXJmYWNlIHdoZW4gb3BlcmF0aW5nIG9uIHdhdiBmaWxlcyIpOwotREVG
SU5FX2ludDMyKGFlYywKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUs
Ci0gICAgICAgICAgICAgIkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSBlY2hvIGNh
bmNlbGxlciIpOwotREVGSU5FX2ludDMyKGFlY20sCi0gICAgICAgICAgICAga1BhcmFtZXRlck5v
dFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkgb3IgZGVhY3RpdmF0
ZSgwKSB0aGUgbW9iaWxlIGVjaG8gY29udHJvbGxlciIpOwotREVGSU5FX2ludDMyKHJlZCwKLSAg
ICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIkFj
dGl2YXRlICgxKSBvciBkZWFjdGl2YXRlICgwKSB0aGUgcmVzaWR1YWwgZWNobyBkZXRlY3RvciIp
OwotREVGSU5FX3N0cmluZyhyZWRfZ3JhcGgsICIiLCAiT3V0cHV0IGZpbGVuYW1lIGZvciBncmFw
aCBvZiBlY2hvIGxpa2VsaWhvb2QiKTsKLURFRklORV9pbnQzMihhZ2MsCi0gICAgICAgICAgICAg
a1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkg
b3IgZGVhY3RpdmF0ZSgwKSB0aGUgQUdDIik7Ci1ERUZJTkVfaW50MzIoaHBmLAotICAgICAgICAg
ICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUg
KDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIGhpZ2gtcGFzcyBmaWx0ZXIiKTsKLURFRklORV9pbnQz
MihucywKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAg
ICAgICAgIkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSBub2lzZSBzdXBwcmVzc29y
Iik7Ci1ERUZJTkVfaW50MzIodHMsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmll
ZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkgb3IgZGVhY3RpdmF0ZSgwKSB0aGUg
dHJhbnNpZW50IHN1cHByZXNzb3IiKTsKLURFRklORV9pbnQzMihiZiwKLSAgICAgICAgICAgICBr
UGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIkFjdGl2YXRlICgxKSBv
ciBkZWFjdGl2YXRlKDApIHRoZSBiZWFtZm9ybWVyIik7Ci1ERUZJTkVfaW50MzIoaWUsCi0gICAg
ICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3Rp
dmF0ZSAoMSkgb3IgZGVhY3RpdmF0ZSgwKSB0aGUgaW50ZWxsaWdpYmlsaXR5IGVuaGFuY2VyIik7
Ci1ERUZJTkVfaW50MzIodmFkLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRW
YWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIHZv
aWNlIGFjdGl2aXR5IGRldGVjdG9yIik7Ci1ERUZJTkVfaW50MzIobGUsCi0gICAgICAgICAgICAg
a1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkg
b3IgZGVhY3RpdmF0ZSgwKSB0aGUgbGV2ZWwgZXN0aW1hdG9yIik7Ci1ERUZJTkVfYm9vbChhbGxf
ZGVmYXVsdCwKLSAgICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgIkFjdGl2YXRlIGFsbCBv
ZiB0aGUgZGVmYXVsdCBjb21wb25lbnRzICh3aWxsIGJlIG92ZXJyaWRkZW4gYnkgYW55ICIKLSAg
ICAgICAgICAgICJvdGhlciBzZXR0aW5ncykiKTsKLURFRklORV9pbnQzMihhZWNfc3VwcHJlc3Np
b25fbGV2ZWwsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAg
ICAgICAgICAgICJTZXQgdGhlIGFlYyBzdXBwcmVzc2lvbiBsZXZlbCAoMC0yKSIpOwotREVGSU5F
X2ludDMyKGRlbGF5X2Fnbm9zdGljLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZp
ZWRWYWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhl
IEFFQyBkZWxheSBhZ25vc3RpYyBtb2RlIik7Ci1ERUZJTkVfaW50MzIoZXh0ZW5kZWRfZmlsdGVy
LAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAg
ICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIEFFQyBleHRlbmRlZCBmaWx0ZXIg
bW9kZSIpOwotREVGSU5FX2ludDMyKGRyaWZ0X2NvbXBlbnNhdGlvbiwKLSAgICAgICAgICAgICBr
UGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIkFjdGl2YXRlICgxKSBv
ciBkZWFjdGl2YXRlKDApIHRoZSBkcmlmdCBjb21wZW5zYXRpb24iKTsKLURFRklORV9pbnQzMihh
ZWMzLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAg
ICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIGV4cGVyaW1lbnRhbCBBRUMg
bW9kZSBBRUMzIik7Ci1ERUZJTkVfaW50MzIobGMsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5v
dFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkgb3IgZGVhY3RpdmF0
ZSgwKSB0aGUgbGV2ZWwgY29udHJvbCIpOwotREVGSU5FX2ludDMyKAotICAgIHJlZmluZWRfYWRh
cHRpdmVfZmlsdGVyLAotICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAiQWN0
aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIHJlZmluZWQgYWRhcHRpdmUgZmlsdGVyIGZ1
bmN0aW9uYWxpdHkiKTsKLURFRklORV9pbnQzMihhZWNtX3JvdXRpbmdfbW9kZSwKLSAgICAgICAg
ICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIlNwZWNpZnkg
dGhlIEFFQ00gcm91dGluZyBtb2RlICgwLTQpIik7Ci1ERUZJTkVfaW50MzIoYWVjbV9jb21mb3J0
X25vaXNlLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAg
ICAgICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIEFFQ00gY29tZm9ydCBu
b2lzZSIpOwotREVGSU5FX2ludDMyKGFnY19tb2RlLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJO
b3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiU3BlY2lmeSB0aGUgQUdDIG1vZGUgKDAt
MikiKTsKLURFRklORV9pbnQzMihhZ2NfdGFyZ2V0X2xldmVsLAotICAgICAgICAgICAgIGtQYXJh
bWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiU3BlY2lmeSB0aGUgQUdDIHRh
cmdldCBsZXZlbCAoMC0zMSkiKTsKLURFRklORV9pbnQzMihhZ2NfbGltaXRlciwKLSAgICAgICAg
ICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIkFjdGl2YXRl
ICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSBsZXZlbCBlc3RpbWF0b3IiKTsKLURFRklORV9pbnQz
MihhZ2NfY29tcHJlc3Npb25fZ2FpbiwKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lm
aWVkVmFsdWUsCi0gICAgICAgICAgICAgIlNwZWNpZnkgdGhlIEFHQyBjb21wcmVzc2lvbiBnYWlu
ICgwLTkwKSIpOwotREVGSU5FX2ludDMyKHZhZF9saWtlbGlob29kLAotICAgICAgICAgICAgIGtQ
YXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiU3BlY2lmeSB0aGUgVkFE
IGxpa2VsaWhvb2QgKDAtMykiKTsKLURFRklORV9pbnQzMihuc19sZXZlbCwKLSAgICAgICAgICAg
ICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIlNwZWNpZnkgdGhl
IE5TIGxldmVsICgwLTMpIik7Ci1ERUZJTkVfaW50MzIoc3RyZWFtX2RlbGF5LAotICAgICAgICAg
ICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiU3BlY2lmeSB0
aGUgc3RyZWFtIGRlbGF5IGluIG1zIHRvIHVzZSIpOwotREVGSU5FX2ludDMyKHN0cmVhbV9kcmlm
dF9zYW1wbGVzLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAg
ICAgICAgICAgICAiU3BlY2lmeSB0aGUgbnVtYmVyIG9mIHN0cmVhbSBkcmlmdCBzYW1wbGVzIHRv
IHVzZSIpOwotREVGSU5FX2Jvb2wocGVyZm9ybWFuY2VfcmVwb3J0LCBmYWxzZSwgIlJlcG9ydCB0
aGUgQVBNIHBlcmZvcm1hbmNlICIpOwotREVGSU5FX2Jvb2wodmVyYm9zZSwgZmFsc2UsICJQcm9k
dWNlIHZlcmJvc2Ugb3V0cHV0Iik7Ci1ERUZJTkVfYm9vbChiaXRleGFjdG5lc3NfcmVwb3J0LAot
ICAgICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgICAiUmVwb3J0IGJpdGV4YWN0bmVzcyBmb3Ig
YWVjIGR1bXAgcmVzdWx0IHJlcHJvZHVjdGlvbiIpOwotREVGSU5FX2Jvb2woZGlzY2FyZF9zZXR0
aW5nc19pbl9hZWNkdW1wLAotICAgICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgICAiRGlzY2Fy
ZCBhbnkgY29uZmlnIHNldHRpbmdzIHNwZWNpZmllZCBpbiB0aGUgYWVjIGR1bXAiKTsKLURFRklO
RV9ib29sKHN0b3JlX2ludGVybWVkaWF0ZV9vdXRwdXQsCi0gICAgICAgICAgICBmYWxzZSwKLSAg
ICAgICAgICAgICJDcmVhdGVzIG5ldyBvdXRwdXQgZmlsZXMgYWZ0ZXIgZWFjaCBpbml0Iik7Ci0K
LXZvaWQgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKGNvbnN0IHN0ZDo6c3RyaW5nIHZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcnRjOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4qIHBhcmFt
ZXRlcikgewotICBpZiAodmFsdWUuY29tcGFyZSgiIikgIT0gMCkgewotICAgICpwYXJhbWV0ZXIg
PSBydGM6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPih2YWx1ZSk7Ci0gIH0KLX0KLQotdm9pZCBTZXRT
ZXR0aW5nSWZTcGVjaWZpZWQoaW50IHZhbHVlLCBydGM6Ok9wdGlvbmFsPGludD4qIHBhcmFtZXRl
cikgewotICBpZiAodmFsdWUgIT0ga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlKSB7Ci0gICAg
KnBhcmFtZXRlciA9IHJ0Yzo6T3B0aW9uYWw8aW50Pih2YWx1ZSk7Ci0gIH0KLX0KLQotdm9pZCBT
ZXRTZXR0aW5nSWZGbGFnU2V0KGludDMyX3QgZmxhZywgcnRjOjpPcHRpb25hbDxib29sPiogcGFy
YW1ldGVyKSB7Ci0gIGlmIChmbGFnID09IDApIHsKLSAgICAqcGFyYW1ldGVyID0gcnRjOjpPcHRp
b25hbDxib29sPihmYWxzZSk7Ci0gIH0gZWxzZSBpZiAoZmxhZyA9PSAxKSB7Ci0gICAgKnBhcmFt
ZXRlciA9IHJ0Yzo6T3B0aW9uYWw8Ym9vbD4odHJ1ZSk7Ci0gIH0KLX0KLQotU2ltdWxhdGlvblNl
dHRpbmdzIENyZWF0ZVNldHRpbmdzKCkgewotICBTaW11bGF0aW9uU2V0dGluZ3Mgc2V0dGluZ3M7
Ci0gIGlmIChGTEFHU19hbGxfZGVmYXVsdCkgewotICAgIHNldHRpbmdzLnVzZV9sZSA9IHJ0Yzo6
T3B0aW9uYWw8Ym9vbD4odHJ1ZSk7Ci0gICAgc2V0dGluZ3MudXNlX3ZhZCA9IHJ0Yzo6T3B0aW9u
YWw8Ym9vbD4odHJ1ZSk7Ci0gICAgc2V0dGluZ3MudXNlX2llID0gcnRjOjpPcHRpb25hbDxib29s
PihmYWxzZSk7Ci0gICAgc2V0dGluZ3MudXNlX2JmID0gcnRjOjpPcHRpb25hbDxib29sPihmYWxz
ZSk7Ci0gICAgc2V0dGluZ3MudXNlX3RzID0gcnRjOjpPcHRpb25hbDxib29sPih0cnVlKTsKLSAg
ICBzZXR0aW5ncy51c2VfbnMgPSBydGM6Ok9wdGlvbmFsPGJvb2w+KHRydWUpOwotICAgIHNldHRp
bmdzLnVzZV9ocGYgPSBydGM6Ok9wdGlvbmFsPGJvb2w+KHRydWUpOwotICAgIHNldHRpbmdzLnVz
ZV9hZ2MgPSBydGM6Ok9wdGlvbmFsPGJvb2w+KHRydWUpOwotICAgIHNldHRpbmdzLnVzZV9hZWMg
PSBydGM6Ok9wdGlvbmFsPGJvb2w+KHRydWUpOwotICAgIHNldHRpbmdzLnVzZV9hZWNtID0gcnRj
OjpPcHRpb25hbDxib29sPihmYWxzZSk7Ci0gICAgc2V0dGluZ3MudXNlX3JlZCA9IHJ0Yzo6T3B0
aW9uYWw8Ym9vbD4oZmFsc2UpOwotICB9Ci0gIFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19k
dW1wX2lucHV0LCAmc2V0dGluZ3MuYWVjX2R1bXBfaW5wdXRfZmlsZW5hbWUpOwotICBTZXRTZXR0
aW5nSWZTcGVjaWZpZWQoRkxBR1NfZHVtcF9vdXRwdXQsICZzZXR0aW5ncy5hZWNfZHVtcF9vdXRw
dXRfZmlsZW5hbWUpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1NfaSwgJnNldHRpbmdz
LmlucHV0X2ZpbGVuYW1lKTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdTX28sICZzZXR0
aW5ncy5vdXRwdXRfZmlsZW5hbWUpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1Nfcmks
ICZzZXR0aW5ncy5yZXZlcnNlX2lucHV0X2ZpbGVuYW1lKTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lm
aWVkKEZMQUdTX3JvLCAmc2V0dGluZ3MucmV2ZXJzZV9vdXRwdXRfZmlsZW5hbWUpOwotICBTZXRT
ZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1Nfb3V0cHV0X251bV9jaGFubmVscywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICZzZXR0aW5ncy5vdXRwdXRfbnVtX2NoYW5uZWxzKTsKLSAgU2V0U2V0dGlu
Z0lmU3BlY2lmaWVkKEZMQUdTX3JldmVyc2Vfb3V0cHV0X251bV9jaGFubmVscywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICZzZXR0aW5ncy5yZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMpOwot
ICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1Nfb3V0cHV0X3NhbXBsZV9yYXRlX2h6LAotICAg
ICAgICAgICAgICAgICAgICAgICAgJnNldHRpbmdzLm91dHB1dF9zYW1wbGVfcmF0ZV9oeik7Ci0g
IFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19yZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZV9o
eiwKLSAgICAgICAgICAgICAgICAgICAgICAgICZzZXR0aW5ncy5yZXZlcnNlX291dHB1dF9zYW1w
bGVfcmF0ZV9oeik7Ci0gIFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19taWNfcG9zaXRpb25z
LCAmc2V0dGluZ3MubWljcm9waG9uZV9wb3NpdGlvbnMpOwotICBzZXR0aW5ncy50YXJnZXRfYW5n
bGVfZGVncmVlcyA9IEZMQUdTX3RhcmdldF9hbmdsZV9kZWdyZWVzOwotICBTZXRTZXR0aW5nSWZG
bGFnU2V0KEZMQUdTX2FlYywgJnNldHRpbmdzLnVzZV9hZWMpOwotICBTZXRTZXR0aW5nSWZGbGFn
U2V0KEZMQUdTX2FlY20sICZzZXR0aW5ncy51c2VfYWVjbSk7Ci0gIFNldFNldHRpbmdJZkZsYWdT
ZXQoRkxBR1NfcmVkLCAmc2V0dGluZ3MudXNlX3JlZCk7Ci0gIFNldFNldHRpbmdJZlNwZWNpZmll
ZChGTEFHU19yZWRfZ3JhcGgsICZzZXR0aW5ncy5yZWRfZ3JhcGhfb3V0cHV0X2ZpbGVuYW1lKTsK
LSAgU2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU19hZ2MsICZzZXR0aW5ncy51c2VfYWdjKTsKLSAg
U2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU19ocGYsICZzZXR0aW5ncy51c2VfaHBmKTsKLSAgU2V0
U2V0dGluZ0lmRmxhZ1NldChGTEFHU19ucywgJnNldHRpbmdzLnVzZV9ucyk7Ci0gIFNldFNldHRp
bmdJZkZsYWdTZXQoRkxBR1NfdHMsICZzZXR0aW5ncy51c2VfdHMpOwotICBTZXRTZXR0aW5nSWZG
bGFnU2V0KEZMQUdTX2JmLCAmc2V0dGluZ3MudXNlX2JmKTsKLSAgU2V0U2V0dGluZ0lmRmxhZ1Nl
dChGTEFHU19pZSwgJnNldHRpbmdzLnVzZV9pZSk7Ci0gIFNldFNldHRpbmdJZkZsYWdTZXQoRkxB
R1NfdmFkLCAmc2V0dGluZ3MudXNlX3ZhZCk7Ci0gIFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1Nf
bGUsICZzZXR0aW5ncy51c2VfbGUpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1NfYWVj
X3N1cHByZXNzaW9uX2xldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgJnNldHRpbmdzLmFl
Y19zdXBwcmVzc2lvbl9sZXZlbCk7Ci0gIFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1NfZGVsYXlf
YWdub3N0aWMsICZzZXR0aW5ncy51c2VfZGVsYXlfYWdub3N0aWMpOwotICBTZXRTZXR0aW5nSWZG
bGFnU2V0KEZMQUdTX2V4dGVuZGVkX2ZpbHRlciwgJnNldHRpbmdzLnVzZV9leHRlbmRlZF9maWx0
ZXIpOwotICBTZXRTZXR0aW5nSWZGbGFnU2V0KEZMQUdTX2RyaWZ0X2NvbXBlbnNhdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAmc2V0dGluZ3MudXNlX2RyaWZ0X2NvbXBlbnNhdGlvbik7Ci0g
IFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1NfcmVmaW5lZF9hZGFwdGl2ZV9maWx0ZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgJnNldHRpbmdzLnVzZV9yZWZpbmVkX2FkYXB0aXZlX2ZpbHRlcik7
Ci0KLSAgU2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU19hZWMzLCAmc2V0dGluZ3MudXNlX2FlYzMp
OwotICBTZXRTZXR0aW5nSWZGbGFnU2V0KEZMQUdTX2xjLCAmc2V0dGluZ3MudXNlX2xjKTsKLSAg
U2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdTX2FlY21fcm91dGluZ19tb2RlLCAmc2V0dGluZ3Mu
YWVjbV9yb3V0aW5nX21vZGUpOwotICBTZXRTZXR0aW5nSWZGbGFnU2V0KEZMQUdTX2FlY21fY29t
Zm9ydF9ub2lzZSwKLSAgICAgICAgICAgICAgICAgICAgICAmc2V0dGluZ3MudXNlX2FlY21fY29t
Zm9ydF9ub2lzZSk7Ci0gIFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19hZ2NfbW9kZSwgJnNl
dHRpbmdzLmFnY19tb2RlKTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdTX2FnY190YXJn
ZXRfbGV2ZWwsICZzZXR0aW5ncy5hZ2NfdGFyZ2V0X2xldmVsKTsKLSAgU2V0U2V0dGluZ0lmRmxh
Z1NldChGTEFHU19hZ2NfbGltaXRlciwgJnNldHRpbmdzLnVzZV9hZ2NfbGltaXRlcik7Ci0gIFNl
dFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19hZ2NfY29tcHJlc3Npb25fZ2FpbiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICZzZXR0aW5ncy5hZ2NfY29tcHJlc3Npb25fZ2Fpbik7Ci0gIFNldFNl
dHRpbmdJZlNwZWNpZmllZChGTEFHU192YWRfbGlrZWxpaG9vZCwgJnNldHRpbmdzLnZhZF9saWtl
bGlob29kKTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdTX25zX2xldmVsLCAmc2V0dGlu
Z3MubnNfbGV2ZWwpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1Nfc3RyZWFtX2RlbGF5
LCAmc2V0dGluZ3Muc3RyZWFtX2RlbGF5KTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdT
X3N0cmVhbV9kcmlmdF9zYW1wbGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgJnNldHRpbmdz
LnN0cmVhbV9kcmlmdF9zYW1wbGVzKTsKLSAgc2V0dGluZ3MucmVwb3J0X3BlcmZvcm1hbmNlID0g
RkxBR1NfcGVyZm9ybWFuY2VfcmVwb3J0OwotICBzZXR0aW5ncy51c2VfdmVyYm9zZV9sb2dnaW5n
ID0gRkxBR1NfdmVyYm9zZTsKLSAgc2V0dGluZ3MucmVwb3J0X2JpdGV4YWN0bmVzcyA9IEZMQUdT
X2JpdGV4YWN0bmVzc19yZXBvcnQ7Ci0gIHNldHRpbmdzLmRpc2NhcmRfYWxsX3NldHRpbmdzX2lu
X2FlY2R1bXAgPSBGTEFHU19kaXNjYXJkX3NldHRpbmdzX2luX2FlY2R1bXA7Ci0gIHNldHRpbmdz
LmZpeGVkX2ludGVyZmFjZSA9IEZMQUdTX2ZpeGVkX2ludGVyZmFjZTsKLSAgc2V0dGluZ3Muc3Rv
cmVfaW50ZXJtZWRpYXRlX291dHB1dCA9IEZMQUdTX3N0b3JlX2ludGVybWVkaWF0ZV9vdXRwdXQ7
Ci0KLSAgcmV0dXJuIHNldHRpbmdzOwotfQotCi12b2lkIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JB
bmRFeGl0KGJvb2wgY29uZGl0aW9uLCBzdGQ6OnN0cmluZyBtZXNzYWdlKSB7Ci0gIGlmIChjb25k
aXRpb24pIHsKLSAgICBzdGQ6OmNlcnIgPDwgbWVzc2FnZSA8PCBzdGQ6OmVuZGw7Ci0gICAgZXhp
dCgxKTsKLSAgfQotfQotCi12b2lkIFBlcmZvcm1CYXNpY1BhcmFtZXRlclNhbml0eUNoZWNrcyhj
b25zdCBTaW11bGF0aW9uU2V0dGluZ3MmIHNldHRpbmdzKSB7Ci0gIGlmIChzZXR0aW5ncy5pbnB1
dF9maWxlbmFtZSB8fCBzZXR0aW5ncy5yZXZlcnNlX2lucHV0X2ZpbGVuYW1lKSB7Ci0gICAgUmVw
b3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoISFzZXR0aW5ncy5hZWNfZHVtcF9pbnB1dF9maWxl
bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IFRoZSBhZWMg
ZHVtcCBjYW5ub3QgYmUgc3BlY2lmaWVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAidG9nZXRoZXIgd2l0aCBpbnB1dCB3YXYgZmlsZXMhXG4iKTsKLQotICAgIFJlcG9ydENv
bmRpdGlvbmFsRXJyb3JBbmRFeGl0KCFzZXR0aW5ncy5pbnB1dF9maWxlbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3I6IFdoZW4gb3BlcmF0aW5nIGF0IHdhdiBm
aWxlcywgdGhlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5wdXQgd2F2
IGZpbGVuYW1lIG11c3QgYmUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJz
cGVjaWZpZWQhXG4iKTsKLQotICAgIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KAotICAg
ICAgICBzZXR0aW5ncy5yZXZlcnNlX291dHB1dF9maWxlbmFtZSAmJiAhc2V0dGluZ3MucmV2ZXJz
ZV9pbnB1dF9maWxlbmFtZSwKLSAgICAgICAgIkVycm9yOiBXaGVuIG9wZXJhdGluZyBhdCB3YXYg
ZmlsZXMsIHRoZSByZXZlcnNlIGlucHV0IHdhdiBmaWxlbmFtZSAiCi0gICAgICAgICJtdXN0IGJl
IHNwZWNpZmllZCBpZiB0aGUgcmV2ZXJzZSBvdXRwdXQgd2F2IGZpbGVuYW1lIGlzIHNwZWNpZmll
ZCFcbiIpOwotICB9IGVsc2UgewotICAgIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KCFz
ZXR0aW5ncy5hZWNfZHVtcF9pbnB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiRXJyb3I6IEVpdGhlciB0aGUgYWVjIGR1bXAgb3IgdGhlIHdhdiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlucHV0IGZpbGVzIG11c3QgYmUgc3BlY2lm
aWVkIVxuIik7Ci0gIH0KLQotICBSZXBvcnRDb25kaXRpb25hbEVycm9yQW5kRXhpdCgKLSAgICAg
IHNldHRpbmdzLnVzZV9hZWMgJiYgKnNldHRpbmdzLnVzZV9hZWMgJiYgc2V0dGluZ3MudXNlX2Fl
Y20gJiYKLSAgICAgICAgICAqc2V0dGluZ3MudXNlX2FlY20sCi0gICAgICAiRXJyb3I6IFRoZSBB
RUMgYW5kIHRoZSBBRUNNIGNhbm5vdCBiZSBhY3RpdmF0ZWQgYXQgdGhlIHNhbWUgdGltZSFcbiIp
OwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGluZ3Mub3V0
cHV0X3NhbXBsZV9yYXRlX2h6ICYmICpzZXR0aW5ncy5vdXRwdXRfc2FtcGxlX3JhdGVfaHogPD0g
MCwKLSAgICAgICJFcnJvcjogLS1vdXRwdXRfc2FtcGxlX3JhdGVfaHogbXVzdCBiZSBwb3NpdGl2
ZSFcbiIpOwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGlu
Z3MucmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3JhdGVfaHogJiYKLSAgICAgICAgICBzZXR0aW5ncy5v
dXRwdXRfc2FtcGxlX3JhdGVfaHogJiYKLSAgICAgICAgICAqc2V0dGluZ3Mub3V0cHV0X3NhbXBs
ZV9yYXRlX2h6IDw9IDAsCi0gICAgICAiRXJyb3I6IC0tcmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3Jh
dGVfaHogbXVzdCBiZSBwb3NpdGl2ZSFcbiIpOwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JB
bmRFeGl0KAotICAgICAgc2V0dGluZ3Mub3V0cHV0X251bV9jaGFubmVscyAmJiAqc2V0dGluZ3Mu
b3V0cHV0X251bV9jaGFubmVscyA8PSAwLAotICAgICAgIkVycm9yOiAtLW91dHB1dF9udW1fY2hh
bm5lbHMgbXVzdCBiZSBwb3NpdGl2ZSFcbiIpOwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JB
bmRFeGl0KAotICAgICAgc2V0dGluZ3MucmV2ZXJzZV9vdXRwdXRfbnVtX2NoYW5uZWxzICYmCi0g
ICAgICAgICAgKnNldHRpbmdzLnJldmVyc2Vfb3V0cHV0X251bV9jaGFubmVscyA8PSAwLAotICAg
ICAgIkVycm9yOiAtLXJldmVyc2Vfb3V0cHV0X251bV9jaGFubmVscyBtdXN0IGJlIHBvc2l0aXZl
IVxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5n
cy51c2VfYmYgJiYgKnNldHRpbmdzLnVzZV9iZiAmJiAhc2V0dGluZ3MubWljcm9waG9uZV9wb3Np
dGlvbnMsCi0gICAgICAiRXJyb3I6IC0tbWljX3Bvc2l0aW9ucyBtdXN0IGJlIHNwZWNpZmllZCB3
aGVuIHRoZSBiZWFtZm9ybWVyIGlzICIKLSAgICAgICJhY3RpdmF0ZWQuXG4iKTsKLQotICBSZXBv
cnRDb25kaXRpb25hbEVycm9yQW5kRXhpdCgKLSAgICAgIHNldHRpbmdzLnRhcmdldF9hbmdsZV9k
ZWdyZWVzIDwgMCB8fCBzZXR0aW5ncy50YXJnZXRfYW5nbGVfZGVncmVlcyA+IDM1OSwKLSAgICAg
ICJFcnJvcjogLXRhcmdldF9hbmdsZV9kZWdyZWVzIG11c3QgYmUgc3BlY2lmaWVkIGJldHdlZW4g
MCBhbmQgMzU5LlxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAg
ICBzZXR0aW5ncy5hZWNfc3VwcHJlc3Npb25fbGV2ZWwgJiYKLSAgICAgICAgICAoKCpzZXR0aW5n
cy5hZWNfc3VwcHJlc3Npb25fbGV2ZWwpIDwgMCB8fAotICAgICAgICAgICAoKnNldHRpbmdzLmFl
Y19zdXBwcmVzc2lvbl9sZXZlbCkgPiAyKSwKLSAgICAgICJFcnJvcjogLS1hZWNfc3VwcHJlc3Np
b25fbGV2ZWwgbXVzdCBiZSBzcGVjaWZpZWQgYmV0d2VlbiAwIGFuZCAyLlxuIik7Ci0KLSAgUmVw
b3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5ncy5hZWNtX3JvdXRpbmdf
bW9kZSAmJiAoKCpzZXR0aW5ncy5hZWNtX3JvdXRpbmdfbW9kZSkgPCAwIHx8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpzZXR0aW5ncy5hZWNtX3JvdXRpbmdfbW9kZSkg
PiA0KSwKLSAgICAgICJFcnJvcjogLS1hZWNtX3JvdXRpbmdfbW9kZSBtdXN0IGJlIHNwZWNpZmll
ZCBiZXR3ZWVuIDAgYW5kIDQuXG4iKTsKLQotICBSZXBvcnRDb25kaXRpb25hbEVycm9yQW5kRXhp
dCgKLSAgICAgIHNldHRpbmdzLmFnY190YXJnZXRfbGV2ZWwgJiYgKCgqc2V0dGluZ3MuYWdjX3Rh
cmdldF9sZXZlbCkgPCAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KnNldHRpbmdzLmFnY190YXJnZXRfbGV2ZWwpID4gMzEpLAotICAgICAgIkVycm9yOiAtLWFnY190
YXJnZXRfbGV2ZWwgbXVzdCBiZSBzcGVjaWZpZWQgYmV0d2VlbiAwIGFuZCAzMS5cbiIpOwotCi0g
IFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGluZ3MuYWdjX2NvbXBy
ZXNzaW9uX2dhaW4gJiYgKCgqc2V0dGluZ3MuYWdjX2NvbXByZXNzaW9uX2dhaW4pIDwgMCB8fAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2V0dGluZ3MuYWdjX2Nv
bXByZXNzaW9uX2dhaW4pID4gOTApLAotICAgICAgIkVycm9yOiAtLWFnY19jb21wcmVzc2lvbl9n
YWluIG11c3QgYmUgc3BlY2lmaWVkIGJldHdlZW4gMCBhbmQgOTAuXG4iKTsKLQotICBSZXBvcnRD
b25kaXRpb25hbEVycm9yQW5kRXhpdCgKLSAgICAgIHNldHRpbmdzLnZhZF9saWtlbGlob29kICYm
Ci0gICAgICAgICAgKCgqc2V0dGluZ3MudmFkX2xpa2VsaWhvb2QpIDwgMCB8fCAoKnNldHRpbmdz
LnZhZF9saWtlbGlob29kKSA+IDMpLAotICAgICAgIkVycm9yOiAtLXZhZF9saWtlbGlob29kIG11
c3QgYmUgc3BlY2lmaWVkIGJldHdlZW4gMCBhbmQgMy5cbiIpOwotCi0gIFJlcG9ydENvbmRpdGlv
bmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGluZ3MubnNfbGV2ZWwgJiYKLSAgICAgICAgICAo
KCpzZXR0aW5ncy5uc19sZXZlbCkgPCAwIHx8ICgqc2V0dGluZ3MubnNfbGV2ZWwpID4gMyksCi0g
ICAgICAiRXJyb3I6IC0tbnNfbGV2ZWwgbXVzdCBiZSBzcGVjaWZpZWQgYmV0d2VlbiAwIGFuZCAz
LlxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5n
cy5yZXBvcnRfYml0ZXhhY3RuZXNzICYmICFzZXR0aW5ncy5hZWNfZHVtcF9pbnB1dF9maWxlbmFt
ZSwKLSAgICAgICJFcnJvcjogLS1iaXRleGFjdG5lc3NfcmVwb3J0IGNhbiBvbmx5IGJlIHVzZWQg
d2hlbiBvcGVyYXRpbmcgb24gYW4gIgotICAgICAgImFlY2R1bXBcbiIpOwotCi0gIGF1dG8gdmFs
aWRfd2F2X25hbWUgPSBbXShjb25zdCBzdGQ6OnN0cmluZyYgd2F2X2ZpbGVfbmFtZSkgewotICAg
IGlmICh3YXZfZmlsZV9uYW1lLnNpemUoKSA8IDUpIHsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKCh3YXZfZmlsZV9uYW1lLmNvbXBhcmUod2F2X2ZpbGVfbmFtZS5zaXplKCkg
LSA0LCA0LCAiLndhdiIpID09IDApIHx8Ci0gICAgICAgICh3YXZfZmlsZV9uYW1lLmNvbXBhcmUo
d2F2X2ZpbGVfbmFtZS5zaXplKCkgLSA0LCA0LCAiLldBViIpID09IDApKSB7Ci0gICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9OwotCi0gIFJlcG9ydENvbmRp
dGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGluZ3MuaW5wdXRfZmlsZW5hbWUgJiYgKCF2
YWxpZF93YXZfbmFtZSgqc2V0dGluZ3MuaW5wdXRfZmlsZW5hbWUpKSwKLSAgICAgICJFcnJvcjog
LS1pIG11c3QgYmUgYSB2YWxpZCAud2F2IGZpbGUgbmFtZS5cbiIpOwotCi0gIFJlcG9ydENvbmRp
dGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGluZ3Mub3V0cHV0X2ZpbGVuYW1lICYmICgh
dmFsaWRfd2F2X25hbWUoKnNldHRpbmdzLm91dHB1dF9maWxlbmFtZSkpLAotICAgICAgIkVycm9y
OiAtLW8gbXVzdCBiZSBhIHZhbGlkIC53YXYgZmlsZSBuYW1lLlxuIik7Ci0KLSAgUmVwb3J0Q29u
ZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5ncy5yZXZlcnNlX2lucHV0X2ZpbGVu
YW1lICYmCi0gICAgICAgICAgKCF2YWxpZF93YXZfbmFtZSgqc2V0dGluZ3MucmV2ZXJzZV9pbnB1
dF9maWxlbmFtZSkpLAotICAgICAgIkVycm9yOiAtLXJpIG11c3QgYmUgYSB2YWxpZCAud2F2IGZp
bGUgbmFtZS5cbiIpOwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAg
c2V0dGluZ3MucmV2ZXJzZV9vdXRwdXRfZmlsZW5hbWUgJiYKLSAgICAgICAgICAoIXZhbGlkX3dh
dl9uYW1lKCpzZXR0aW5ncy5yZXZlcnNlX291dHB1dF9maWxlbmFtZSkpLAotICAgICAgIkVycm9y
OiAtLXJvIG11c3QgYmUgYSB2YWxpZCAud2F2IGZpbGUgbmFtZS5cbiIpOwotfQotCi19ICAvLyBu
YW1lc3BhY2UKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewotICBnb29nbGU6
OlNldFVzYWdlTWVzc2FnZShrVXNhZ2VEZXNjcmlwdGlvbik7Ci0gIGdvb2dsZTo6UGFyc2VDb21t
YW5kTGluZUZsYWdzKCZhcmdjLCAmYXJndiwgdHJ1ZSk7Ci0KLSAgU2ltdWxhdGlvblNldHRpbmdz
IHNldHRpbmdzID0gQ3JlYXRlU2V0dGluZ3MoKTsKLSAgUGVyZm9ybUJhc2ljUGFyYW1ldGVyU2Fu
aXR5Q2hlY2tzKHNldHRpbmdzKTsKLSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvUHJvY2Vzc2luZ1Np
bXVsYXRvcj4gcHJvY2Vzc29yOwotCi0gIGlmIChzZXR0aW5ncy5hZWNfZHVtcF9pbnB1dF9maWxl
bmFtZSkgewotICAgIHByb2Nlc3Nvci5yZXNldChuZXcgQWVjRHVtcEJhc2VkU2ltdWxhdG9yKHNl
dHRpbmdzKSk7Ci0gIH0gZWxzZSB7Ci0gICAgcHJvY2Vzc29yLnJlc2V0KG5ldyBXYXZCYXNlZFNp
bXVsYXRvcihzZXR0aW5ncykpOwotICB9Ci0KLSAgcHJvY2Vzc29yLT5Qcm9jZXNzKCk7Ci0KLSAg
aWYgKHNldHRpbmdzLnJlcG9ydF9wZXJmb3JtYW5jZSkgewotICAgIGNvbnN0IGF1dG8mIHByb2Nf
dGltZSA9IHByb2Nlc3Nvci0+cHJvY190aW1lKCk7Ci0gICAgaW50NjRfdCBleGVjX3RpbWVfdXMg
PSBwcm9jX3RpbWUuc3VtIC8gcnRjOjprTnVtTmFub3NlY3NQZXJNaWNyb3NlYzsKLSAgICBzdGQ6
OmNvdXQgPDwgc3RkOjplbmRsCi0gICAgICAgICAgICAgIDw8ICJFeGVjdXRpb24gdGltZTogIiA8
PCBleGVjX3RpbWVfdXMgKiAxZS02IDw8ICIgcywgRmlsZSB0aW1lOiAiCi0gICAgICAgICAgICAg
IDw8IHByb2Nlc3Nvci0+Z2V0X251bV9wcm9jZXNzX3N0cmVhbV9jYWxscygpICogMS5mIC8KLSAg
ICAgICAgICAgICAgICAgICAgIEF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcjo6a0NodW5rc1BlclNl
Y29uZAotICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgPDwgIlRpbWUg
cGVyIGZ3ZCBzdHJlYW0gY2h1bmsgKG1lYW4sIG1heCwgbWluKTogIiA8PCBzdGQ6OmVuZGwKLSAg
ICAgICAgICAgICAgPDwgZXhlY190aW1lX3VzICogMS5mIC8gcHJvY2Vzc29yLT5nZXRfbnVtX3By
b2Nlc3Nfc3RyZWFtX2NhbGxzKCkKLSAgICAgICAgICAgICAgPDwgIiB1cywgIiA8PCAxLmYgKiBw
cm9jX3RpbWUubWF4IC8gcnRjOjprTnVtTmFub3NlY3NQZXJNaWNyb3NlYwotICAgICAgICAgICAg
ICA8PCAiIHVzLCAiIDw8IDEuZiAqIHByb2NfdGltZS5taW4gLyBydGM6OmtOdW1OYW5vc2Vjc1Bl
ck1pY3Jvc2VjCi0gICAgICAgICAgICAgIDw8ICIgdXMiIDw8IHN0ZDo6ZW5kbDsKLSAgfQotCi0g
IGlmIChzZXR0aW5ncy5yZXBvcnRfYml0ZXhhY3RuZXNzICYmIHNldHRpbmdzLmFlY19kdW1wX2lu
cHV0X2ZpbGVuYW1lKSB7Ci0gICAgaWYgKHByb2Nlc3Nvci0+T3V0cHV0V2FzQml0ZXhhY3QoKSkg
ewotICAgICAgc3RkOjpjb3V0IDw8ICJUaGUgcHJvY2Vzc2luZyB3YXMgYml0ZXhhY3QuIjsKLSAg
ICB9IGVsc2UgewotICAgICAgc3RkOjpjb3V0IDw8ICJUaGUgcHJvY2Vzc2luZyB3YXMgbm90IGJp
dGV4YWN0LiI7Ci0gICAgfQotICB9Ci0KLSAgcmV0dXJuIDA7Ci19Ci0KLX0gIC8vIG5hbWVzcGFj
ZSB0ZXN0Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFy
KiBhcmd2W10pIHsKLSAgcmV0dXJuIHdlYnJ0Yzo6dGVzdDo6bWFpbihhcmdjLCBhcmd2KTsKLX0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fcHJvY2Vzc2luZy90ZXN0L2JpdGV4YWN0bmVzc190b29scy5jYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X3Byb2Nlc3NpbmcvdGVzdC9iaXRleGFjdG5lc3NfdG9vbHMuY2MJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fcHJvY2Vzc2luZy90ZXN0L2JpdGV4YWN0bmVzc190b29scy5jYwkobm9uZXhpc3RlbnQpCkBA
IC0xLDE0NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHBy
b2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQg
Y2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJj
ZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBn
cmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1
dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmls
ZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIndlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9iaXRleGFjdG5lc3NfdG9vbHMuaCIKLQot
I2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8c3RyaW5n
PgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2FycmF5X3ZpZXcu
aCIKLSNpbmNsdWRlICJ3ZWJydGMvdGVzdC90ZXN0c3VwcG9ydC9maWxldXRpbHMuaCIKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLXN0ZDo6c3RyaW5nIEdldEFwbVJl
bmRlclRlc3RWZWN0b3JGaWxlTmFtZShpbnQgc2FtcGxlX3JhdGVfaHopIHsKLSAgc3dpdGNoIChz
YW1wbGVfcmF0ZV9oeikgewotICAgIGNhc2UgODAwMDoKLSAgICAgIHJldHVybiBSZXNvdXJjZVBh
dGgoImZhcjhfc3RlcmVvIiwgInBjbSIpOwotICAgIGNhc2UgMTYwMDA6Ci0gICAgICByZXR1cm4g
UmVzb3VyY2VQYXRoKCJmYXIxNl9zdGVyZW8iLCAicGNtIik7Ci0gICAgY2FzZSAzMjAwMDoKLSAg
ICAgIHJldHVybiBSZXNvdXJjZVBhdGgoImZhcjMyX3N0ZXJlbyIsICJwY20iKTsKLSAgICBjYXNl
IDQ4MDAwOgotICAgICAgcmV0dXJuIFJlc291cmNlUGF0aCgiZmFyNDhfc3RlcmVvIiwgInBjbSIp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICBSVENfRENIRUNLKGZhbHNlKTsKLSAgfQotICByZXR1cm4g
IiI7Ci19Ci0KLXN0ZDo6c3RyaW5nIEdldEFwbUNhcHR1cmVUZXN0VmVjdG9yRmlsZU5hbWUoaW50
IHNhbXBsZV9yYXRlX2h6KSB7Ci0gIHN3aXRjaCAoc2FtcGxlX3JhdGVfaHopIHsKLSAgICBjYXNl
IDgwMDA6Ci0gICAgICByZXR1cm4gUmVzb3VyY2VQYXRoKCJuZWFyOF9zdGVyZW8iLCAicGNtIik7
Ci0gICAgY2FzZSAxNjAwMDoKLSAgICAgIHJldHVybiBSZXNvdXJjZVBhdGgoIm5lYXIxNl9zdGVy
ZW8iLCAicGNtIik7Ci0gICAgY2FzZSAzMjAwMDoKLSAgICAgIHJldHVybiBSZXNvdXJjZVBhdGgo
Im5lYXIzMl9zdGVyZW8iLCAicGNtIik7Ci0gICAgY2FzZSA0ODAwMDoKLSAgICAgIHJldHVybiBS
ZXNvdXJjZVBhdGgoIm5lYXI0OF9zdGVyZW8iLCAicGNtIik7Ci0gICAgZGVmYXVsdDoKLSAgICAg
IFJUQ19EQ0hFQ0soZmFsc2UpOwotICB9Ci0gIHJldHVybiAiIjsKLX0KLQotdm9pZCBSZWFkRmxv
YXRTYW1wbGVzRnJvbVN0ZXJlb0ZpbGUoc2l6ZV90IHNhbXBsZXNfcGVyX2NoYW5uZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtX2NoYW5uZWxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5wdXRBdWRpb0ZpbGUqIHN0ZXJlb19w
Y21fZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0Yzo6QXJyYXlW
aWV3PGZsb2F0PiBkYXRhKSB7Ci0gIFJUQ19EQ0hFQ0tfRVEoZGF0YS5zaXplKCksIHNhbXBsZXNf
cGVyX2NoYW5uZWwgKiBudW1fY2hhbm5lbHMpOwotICBzdGQ6OnZlY3RvcjxpbnQxNl90PiByZWFk
X3NhbXBsZXMoc2FtcGxlc19wZXJfY2hhbm5lbCAqIDIpOwotICBzdGVyZW9fcGNtX2ZpbGUtPlJl
YWQoc2FtcGxlc19wZXJfY2hhbm5lbCAqIDIsIHJlYWRfc2FtcGxlcy5kYXRhKCkpOwotCi0gIC8v
IENvbnZlcnQgc2FtcGxlcyB0byBmbG9hdCBhbmQgZGlzY2FyZCBhbnkgY2hhbm5lbHMgbm90IG5l
ZWRlZC4KLSAgZm9yIChzaXplX3Qgc2FtcGxlID0gMDsgc2FtcGxlIDwgc2FtcGxlc19wZXJfY2hh
bm5lbDsgKytzYW1wbGUpIHsKLSAgICBmb3IgKHNpemVfdCBjaGFubmVsID0gMDsgY2hhbm5lbCA8
IG51bV9jaGFubmVsczsgKytjaGFubmVsKSB7Ci0gICAgICBkYXRhW3NhbXBsZSAqIG51bV9jaGFu
bmVscyArIGNoYW5uZWxdID0KLSAgICAgICAgICByZWFkX3NhbXBsZXNbc2FtcGxlICogMiArIGNo
YW5uZWxdIC8gMzI3NjguMGY7Ci0gICAgfQotICB9Ci19Ci0KLTo6dGVzdGluZzo6QXNzZXJ0aW9u
UmVzdWx0IFZlcmlmeURlaW50ZXJsZWF2ZWRBcnJheSgKLSAgICBzaXplX3Qgc2FtcGxlc19wZXJf
Y2hhbm5lbCwKLSAgICBzaXplX3QgbnVtX2NoYW5uZWxzLAotICAgIHJ0Yzo6QXJyYXlWaWV3PGNv
bnN0IGZsb2F0PiByZWZlcmVuY2UsCi0gICAgcnRjOjpBcnJheVZpZXc8Y29uc3QgZmxvYXQ+IG91
dHB1dCwKLSAgICBmbG9hdCBlbGVtZW50X2Vycm9yX2JvdW5kKSB7Ci0gIC8vIEZvcm0gdmVjdG9y
cyB0byBjb21wYXJlIHRoZSByZWZlcmVuY2UgdG8uIE9ubHkgdGhlIGZpcnN0IHZhbHVlcyBvZiB0
aGUKLSAgLy8gb3V0cHV0cyBhcmUgY29tcGFyZWQgaW4gb3JkZXIgbm90IGhhdmluZyB0byBzcGVj
aWZ5IGFsbCBwcmVjZWVkaW5nIGZyYW1lcwotICAvLyBhcyB0ZXN0dmVjdG9ycy4KLSAgY29uc3Qg
c2l6ZV90IHJlZmVyZW5jZV9mcmFtZV9sZW5ndGggPQotICAgICAgcnRjOjpDaGVja2VkRGl2RXhh
Y3QocmVmZXJlbmNlLnNpemUoKSwgbnVtX2NoYW5uZWxzKTsKLQotICBzdGQ6OnZlY3RvcjxmbG9h
dD4gb3V0cHV0X3RvX3ZlcmlmeTsKLSAgZm9yIChzaXplX3QgY2hhbm5lbF9ubyA9IDA7IGNoYW5u
ZWxfbm8gPCBudW1fY2hhbm5lbHM7ICsrY2hhbm5lbF9ubykgewotICAgIG91dHB1dF90b192ZXJp
ZnkuaW5zZXJ0KG91dHB1dF90b192ZXJpZnkuZW5kKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0LmJlZ2luKCkgKyBjaGFubmVsX25vICogc2FtcGxlc19wZXJfY2hhbm5lbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYmVnaW4oKSArIGNoYW5uZWxfbm8g
KiBzYW1wbGVzX3Blcl9jaGFubmVsICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVmZXJlbmNlX2ZyYW1lX2xlbmd0aCk7Ci0gIH0KLQotICByZXR1cm4gVmVyaWZ5QXJyYXkocmVm
ZXJlbmNlLCBvdXRwdXRfdG9fdmVyaWZ5LCBlbGVtZW50X2Vycm9yX2JvdW5kKTsKLX0KLQotOjp0
ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgVmVyaWZ5QXJyYXkocnRjOjpBcnJheVZpZXc8Y29uc3Qg
ZmxvYXQ+IHJlZmVyZW5jZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJ0Yzo6QXJyYXlWaWV3PGNvbnN0IGZsb2F0PiBvdXRwdXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCBlbGVtZW50X2Vycm9yX2JvdW5kKSB7Ci0gIC8vIFRo
ZSB2ZWN0b3JzIGFyZSBkZWVtZWQgdG8gYmUgYml0ZXhhY3Qgb25seSBpZgotICAvLyBhKSBvdXRw
dXQgaGF2ZSBhIHNpemUgYXQgbGVhc3QgYXMgbG9uZyBhcyB0aGUgcmVmZXJlbmNlLgotICAvLyBi
KSB0aGUgc2FtcGxlcyBpbiB0aGUgcmVmZXJlbmNlIGFyZSBiaXRleGFjdCB3aXRoIHRoZSBjb3Jy
ZXNwb25kaW5nIHNhbXBsZXMKLSAgLy8gICAgaW4gdGhlIG91dHB1dC4KLQotICBib29sIGVxdWFs
ID0gdHJ1ZTsKLSAgaWYgKG91dHB1dC5zaXplKCkgPCByZWZlcmVuY2Uuc2l6ZSgpKSB7Ci0gICAg
ZXF1YWwgPSBmYWxzZTsKLSAgfSBlbHNlIHsKLSAgICAvLyBDb21wYXJlIHRoZSBmaXJzdCBzYW1w
bGVzIGluIHRoZSB2ZWN0b3JzLgotICAgIGZvciAoc2l6ZV90IGsgPSAwOyBrIDwgcmVmZXJlbmNl
LnNpemUoKTsgKytrKSB7Ci0gICAgICBpZiAoZmFicyhvdXRwdXRba10gLSByZWZlcmVuY2Vba10p
ID4gZWxlbWVudF9lcnJvcl9ib3VuZCkgewotICAgICAgICBlcXVhbCA9IGZhbHNlOwotICAgICAg
ICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICBpZiAoZXF1YWwpIHsKLSAgICByZXR1
cm4gOjp0ZXN0aW5nOjpBc3NlcnRpb25TdWNjZXNzKCk7Ci0gIH0KLQotICAvLyBMYW1iZGEgZnVu
Y3Rpb24gdGhhdCBwcm9kdWNlcyBhIGZvcm1hdHRlZCBzdHJpbmcgd2l0aCB0aGUgZGF0YSBpbiB0
aGUKLSAgLy8gdmVjdG9yLgotICBhdXRvIHByaW50X3ZlY3Rvcl9pbl9jX2Zvcm1hdCA9IFtdKHJ0
Yzo6QXJyYXlWaWV3PGNvbnN0IGZsb2F0PiB2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBudW1fdmFsdWVzX3RvX3ByaW50KSB7Ci0gICAgc3RkOjpzdHJpbmcg
cyA9ICJ7ICI7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBzdGQ6Om1pbihudW1fdmFsdWVz
X3RvX3ByaW50LCB2LnNpemUoKSk7ICsraykgewotICAgICAgcyArPSBzdGQ6OnRvX3N0cmluZyh2
W2tdKSArICJmIjsKLSAgICAgIHMgKz0gKGsgPCAobnVtX3ZhbHVlc190b19wcmludCAtIDEpKSA/
ICIsICIgOiAiIjsKLSAgICB9Ci0gICAgcmV0dXJuIHMgKyAiIH0iOwotICB9OwotCi0gIC8vIElm
IHRoZSB2ZWN0b3JzIGFyZSBkZWVtZWQgbm90IHRvIGJlIHNpbWlsYXIsIHJldHVybiBhIHJlcG9y
dCBvZiB0aGUKLSAgLy8gZGlmZmVyZW5jZS4KLSAgcmV0dXJuIDo6dGVzdGluZzo6QXNzZXJ0aW9u
RmFpbHVyZSgpCi0gICAgICAgICA8PCBzdGQ6OmVuZGwKLSAgICAgICAgIDw8ICIgICAgQWN0dWFs
IHZhbHVlcyA6ICIKLSAgICAgICAgIDw8IHByaW50X3ZlY3Rvcl9pbl9jX2Zvcm1hdChvdXRwdXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjptaW4ob3V0cHV0LnNp
emUoKSwgcmVmZXJlbmNlLnNpemUoKSkpCi0gICAgICAgICA8PCBzdGQ6OmVuZGwKLSAgICAgICAg
IDw8ICIgICAgRXhwZWN0ZWQgdmFsdWVzOiAiCi0gICAgICAgICA8PCBwcmludF92ZWN0b3JfaW5f
Y19mb3JtYXQocmVmZXJlbmNlLCByZWZlcmVuY2Uuc2l6ZSgpKSA8PCBzdGQ6OmVuZGw7Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nl
c3NpbmcvdGVzdC9iaXRleGFjdG5lc3NfdG9vbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Npbmcv
dGVzdC9iaXRleGFjdG5lc3NfdG9vbHMuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5n
L3Rlc3QvYml0ZXhhY3RuZXNzX3Rvb2xzLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NiArMCwwIEBA
Ci0KLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElP
X1BST0NFU1NJTkdfVEVTVF9CSVRFWEFDVE5FU1NfVE9PTFNfSF8KLSNkZWZpbmUgV0VCUlRDX01P
RFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX0JJVEVYQUNUTkVTU19UT09MU19IXwotCi0jaW5j
bHVkZSA8c3RyaW5nPgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYXJyYXlfdmlldy5oIgotI2lu
Y2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGluZy9uZXRlcS90b29scy9pbnB1dF9hdWRp
b19maWxlLmgiCi0jaW5jbHVkZSAid2VicnRjL3Rlc3QvZ3Rlc3QuaCIKLQotbmFtZXNwYWNlIHdl
YnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLS8vIFJldHVybnMgdGVzdCB2ZWN0b3IgdG8gdXNl
IGZvciB0aGUgcmVuZGVyIHNpZ25hbCBpbiBhbgotLy8gQVBNIGJpdGV4YWN0bmVzcyB0ZXN0Lgot
c3RkOjpzdHJpbmcgR2V0QXBtUmVuZGVyVGVzdFZlY3RvckZpbGVOYW1lKGludCBzYW1wbGVfcmF0
ZV9oeik7Ci0KLS8vIFJldHVybnMgdGVzdCB2ZWN0b3IgdG8gdXNlIGZvciB0aGUgY2FwdHVyZSBz
aWduYWwgaW4gYW4KLS8vIEFQTSBiaXRleGFjdG5lc3MgdGVzdC4KLXN0ZDo6c3RyaW5nIEdldEFw
bUNhcHR1cmVUZXN0VmVjdG9yRmlsZU5hbWUoaW50IHNhbXBsZV9yYXRlX2h6KTsKLQotLy8gRXh0
cmFjdCBmbG9hdCBzYW1wbGVzIGZyb20gYSBwY20gZmlsZS4KLXZvaWQgUmVhZEZsb2F0U2FtcGxl
c0Zyb21TdGVyZW9GaWxlKHNpemVfdCBzYW1wbGVzX3Blcl9jaGFubmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bV9jaGFubmVscywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIElucHV0QXVkaW9GaWxlKiBzdGVyZW9fcGNtX2ZpbGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGM6OkFycmF5VmlldzxmbG9h
dD4gZGF0YSk7Ci0KLS8vIFZlcmlmaWVzIGEgZnJhbWUgYWdhaW5zdCBhIHJlZmVyZW5jZSBhbmQg
cmV0dXJucyB0aGUgcmVzdWx0cyBhcyBhbgotLy8gQXNzZXJ0aW9uUmVzdWx0LgotOjp0ZXN0aW5n
OjpBc3NlcnRpb25SZXN1bHQgVmVyaWZ5RGVpbnRlcmxlYXZlZEFycmF5KAotICAgIHNpemVfdCBz
YW1wbGVzX3Blcl9jaGFubmVsLAotICAgIHNpemVfdCBudW1fY2hhbm5lbHMsCi0gICAgcnRjOjpB
cnJheVZpZXc8Y29uc3QgZmxvYXQ+IHJlZmVyZW5jZSwKLSAgICBydGM6OkFycmF5Vmlldzxjb25z
dCBmbG9hdD4gb3V0cHV0LAotICAgIGZsb2F0IGVsZW1lbnRfZXJyb3JfYm91bmQpOwotCi0vLyBW
ZXJpZmllcyBhIHZlY3RvciBhZ2FpbnN0IGEgcmVmZXJlbmNlIGFuZCByZXR1cm5zIHRoZSByZXN1
bHRzIGFzIGFuCi0vLyBBc3NlcnRpb25SZXN1bHQuCi06OnRlc3Rpbmc6OkFzc2VydGlvblJlc3Vs
dCBWZXJpZnlBcnJheShydGM6OkFycmF5Vmlldzxjb25zdCBmbG9hdD4gcmVmZXJlbmNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjOjpBcnJheVZpZXc8Y29uc3Qg
ZmxvYXQ+IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGVsZW1lbnRfZXJyb3JfYm91bmQpOwotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8g
bmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NF
U1NJTkdfVEVTVF9CSVRFWEFDVE5FU1NfVE9PTFNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2Rl
YnVnX2R1bXBfcmVwbGF5ZXIuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVidWdf
ZHVtcF9yZXBsYXllci5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVi
dWdfZHVtcF9yZXBsYXllci5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDI3MCArMCwwIEBACi0vKgot
ICogIENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJp
Z2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0
aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAq
ICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMg
bWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUg
c291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nl
c3NpbmcvdGVzdC9kZWJ1Z19kdW1wX3JlcGxheWVyLmgiCi0KLSNpbmNsdWRlICJ3ZWJydGMvYmFz
ZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rl
c3QvcHJvdG9idWZfdXRpbHMuaCIKLQotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSB0
ZXN0IHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBNYXliZVJlc2V0QnVmZmVyKHN0ZDo6dW5pcXVl
X3B0cjxDaGFubmVsQnVmZmVyPGZsb2F0Pj4qIGJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJlYW1Db25maWcmIGNvbmZpZykgewotICBhdXRvJiBidWZmZXJfcmVmID0gKmJ1
ZmZlcjsKLSAgaWYgKCFidWZmZXJfcmVmLmdldCgpIHx8IGJ1ZmZlcl9yZWYtPm51bV9mcmFtZXMo
KSAhPSBjb25maWcubnVtX2ZyYW1lcygpIHx8Ci0gICAgICBidWZmZXJfcmVmLT5udW1fY2hhbm5l
bHMoKSAhPSBjb25maWcubnVtX2NoYW5uZWxzKCkpIHsKLSAgICBidWZmZXJfcmVmLnJlc2V0KG5l
dyBDaGFubmVsQnVmZmVyPGZsb2F0Pihjb25maWcubnVtX2ZyYW1lcygpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLm51bV9jaGFubmVscygpKSk7
Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLURlYnVnRHVtcFJlcGxheWVyOjpEZWJ1Z0R1
bXBSZXBsYXllcigpCi0gICAgOiBpbnB1dF8obnVsbHB0ciksICAvLyB3aWxsIGJlIGNyZWF0ZWQg
dXBvbiB1c2FnZS4KLSAgICAgIHJldmVyc2VfKG51bGxwdHIpLAotICAgICAgb3V0cHV0XyhudWxs
cHRyKSwKLSAgICAgIGFwbV8obnVsbHB0ciksCi0gICAgICBkZWJ1Z19maWxlXyhudWxscHRyKSB7
fQotCi1EZWJ1Z0R1bXBSZXBsYXllcjo6fkRlYnVnRHVtcFJlcGxheWVyKCkgewotICBpZiAoZGVi
dWdfZmlsZV8pCi0gICAgZmNsb3NlKGRlYnVnX2ZpbGVfKTsKLX0KLQotYm9vbCBEZWJ1Z0R1bXBS
ZXBsYXllcjo6U2V0RHVtcEZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gIGRl
YnVnX2ZpbGVfID0gZm9wZW4oZmlsZW5hbWUuY19zdHIoKSwgInJiIik7Ci0gIExvYWROZXh0TWVz
c2FnZSgpOwotICByZXR1cm4gZGVidWdfZmlsZV87Ci19Ci0KLS8vIEdldCBuZXh0IGV2ZW50IHRo
YXQgaGFzIG5vdCBydW4uCi1ydGM6Ok9wdGlvbmFsPGF1ZGlvcHJvYzo6RXZlbnQ+IERlYnVnRHVt
cFJlcGxheWVyOjpHZXROZXh0RXZlbnQoKSBjb25zdCB7Ci0gIGlmICghaGFzX25leHRfZXZlbnRf
KQotICAgIHJldHVybiBydGM6Ok9wdGlvbmFsPGF1ZGlvcHJvYzo6RXZlbnQ+KCk7Ci0gIGVsc2UK
LSAgICByZXR1cm4gcnRjOjpPcHRpb25hbDxhdWRpb3Byb2M6OkV2ZW50PihuZXh0X2V2ZW50Xyk7
Ci19Ci0KLS8vIFJ1biB0aGUgbmV4dCBldmVudC4gUmV0dXJucyB0aGUgZXZlbnQgdHlwZS4KLWJv
b2wgRGVidWdEdW1wUmVwbGF5ZXI6OlJ1bk5leHRFdmVudCgpIHsKLSAgaWYgKCFoYXNfbmV4dF9l
dmVudF8pCi0gICAgcmV0dXJuIGZhbHNlOwotICBzd2l0Y2ggKG5leHRfZXZlbnRfLnR5cGUoKSkg
ewotICAgIGNhc2UgYXVkaW9wcm9jOjpFdmVudDo6SU5JVDoKLSAgICAgIE9uSW5pdEV2ZW50KG5l
eHRfZXZlbnRfLmluaXQoKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIGF1ZGlvcHJvYzo6RXZl
bnQ6OlNUUkVBTToKLSAgICAgIE9uU3RyZWFtRXZlbnQobmV4dF9ldmVudF8uc3RyZWFtKCkpOwot
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhdWRpb3Byb2M6OkV2ZW50OjpSRVZFUlNFX1NUUkVBTToK
LSAgICAgIE9uUmV2ZXJzZVN0cmVhbUV2ZW50KG5leHRfZXZlbnRfLnJldmVyc2Vfc3RyZWFtKCkp
OwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhdWRpb3Byb2M6OkV2ZW50OjpDT05GSUc6Ci0gICAg
ICBPbkNvbmZpZ0V2ZW50KG5leHRfZXZlbnRfLmNvbmZpZygpKTsKLSAgICAgIGJyZWFrOwotICAg
IGNhc2UgYXVkaW9wcm9jOjpFdmVudDo6VU5LTk9XTl9FVkVOVDoKLSAgICAgIC8vIFdlIGRvIG5v
dCBleHBlY3QgdG8gcmVjZWl2ZSBVTktOT1dOIGV2ZW50LgotICAgICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0gIExvYWROZXh0TWVzc2FnZSgpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotY29uc3QgQ2hh
bm5lbEJ1ZmZlcjxmbG9hdD4qIERlYnVnRHVtcFJlcGxheWVyOjpHZXRPdXRwdXQoKSBjb25zdCB7
Ci0gIHJldHVybiBvdXRwdXRfLmdldCgpOwotfQotCi1TdHJlYW1Db25maWcgRGVidWdEdW1wUmVw
bGF5ZXI6OkdldE91dHB1dENvbmZpZygpIGNvbnN0IHsKLSAgcmV0dXJuIG91dHB1dF9jb25maWdf
OwotfQotCi0vLyBPbkluaXRFdmVudCByZXNldCB0aGUgaW5wdXQvb3V0cHV0L3Jlc2VydmUgY2hh
bm5lbCBmb3JtYXQuCi12b2lkIERlYnVnRHVtcFJlcGxheWVyOjpPbkluaXRFdmVudChjb25zdCBh
dWRpb3Byb2M6OkluaXQmIG1zZykgewotICBSVENfQ0hFQ0sobXNnLmhhc19udW1faW5wdXRfY2hh
bm5lbHMoKSk7Ci0gIFJUQ19DSEVDSyhtc2cuaGFzX291dHB1dF9zYW1wbGVfcmF0ZSgpKTsKLSAg
UlRDX0NIRUNLKG1zZy5oYXNfbnVtX291dHB1dF9jaGFubmVscygpKTsKLSAgUlRDX0NIRUNLKG1z
Zy5oYXNfcmV2ZXJzZV9zYW1wbGVfcmF0ZSgpKTsKLSAgUlRDX0NIRUNLKG1zZy5oYXNfbnVtX3Jl
dmVyc2VfY2hhbm5lbHMoKSk7Ci0KLSAgaW5wdXRfY29uZmlnXyA9IFN0cmVhbUNvbmZpZyhtc2cu
c2FtcGxlX3JhdGUoKSwgbXNnLm51bV9pbnB1dF9jaGFubmVscygpKTsKLSAgb3V0cHV0X2NvbmZp
Z18gPQotICAgICAgU3RyZWFtQ29uZmlnKG1zZy5vdXRwdXRfc2FtcGxlX3JhdGUoKSwgbXNnLm51
bV9vdXRwdXRfY2hhbm5lbHMoKSk7Ci0gIHJldmVyc2VfY29uZmlnXyA9Ci0gICAgICBTdHJlYW1D
b25maWcobXNnLnJldmVyc2Vfc2FtcGxlX3JhdGUoKSwgbXNnLm51bV9yZXZlcnNlX2NoYW5uZWxz
KCkpOwotCi0gIE1heWJlUmVzZXRCdWZmZXIoJmlucHV0XywgaW5wdXRfY29uZmlnXyk7Ci0gIE1h
eWJlUmVzZXRCdWZmZXIoJm91dHB1dF8sIG91dHB1dF9jb25maWdfKTsKLSAgTWF5YmVSZXNldEJ1
ZmZlcigmcmV2ZXJzZV8sIHJldmVyc2VfY29uZmlnXyk7Ci19Ci0KLS8vIE9uU3RyZWFtRXZlbnQg
cmVwbGF5cyBhbiBpbnB1dCBzaWduYWwgYW5kIHZlcmlmaWVzIHRoZSBvdXRwdXQuCi12b2lkIERl
YnVnRHVtcFJlcGxheWVyOjpPblN0cmVhbUV2ZW50KGNvbnN0IGF1ZGlvcHJvYzo6U3RyZWFtJiBt
c2cpIHsKLSAgLy8gQVBNIHNob3VsZCBoYXZlIGJlZW4gY3JlYXRlZC4KLSAgUlRDX0NIRUNLKGFw
bV8uZ2V0KCkpOwotCi0gIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAot
ICAgICAgICAgICAgICAgYXBtXy0+Z2Fpbl9jb250cm9sKCktPnNldF9zdHJlYW1fYW5hbG9nX2xl
dmVsKG1zZy5sZXZlbCgpKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vy
cm9yLAotICAgICAgICAgICAgICAgYXBtXy0+c2V0X3N0cmVhbV9kZWxheV9tcyhtc2cuZGVsYXko
KSkpOwotCi0gIGFwbV8tPmVjaG9fY2FuY2VsbGF0aW9uKCktPnNldF9zdHJlYW1fZHJpZnRfc2Ft
cGxlcyhtc2cuZHJpZnQoKSk7Ci0gIGlmIChtc2cuaGFzX2tleXByZXNzKCkpIHsKLSAgICBhcG1f
LT5zZXRfc3RyZWFtX2tleV9wcmVzc2VkKG1zZy5rZXlwcmVzcygpKTsKLSAgfSBlbHNlIHsKLSAg
ICBhcG1fLT5zZXRfc3RyZWFtX2tleV9wcmVzc2VkKHRydWUpOwotICB9Ci0KLSAgUlRDX0NIRUNL
X0VRKGlucHV0X2NvbmZpZ18ubnVtX2NoYW5uZWxzKCksCi0gICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxzaXplX3Q+KG1zZy5pbnB1dF9jaGFubmVsX3NpemUoKSkpOwotICBSVENfQ0hFQ0tfRVEo
aW5wdXRfY29uZmlnXy5udW1fZnJhbWVzKCkgKiBzaXplb2YoZmxvYXQpLAotICAgICAgICAgICAg
ICAgbXNnLmlucHV0X2NoYW5uZWwoMCkuc2l6ZSgpKTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8
IG1zZy5pbnB1dF9jaGFubmVsX3NpemUoKTsgKytpKSB7Ci0gICAgbWVtY3B5KGlucHV0Xy0+Y2hh
bm5lbHMoKVtpXSwgbXNnLmlucHV0X2NoYW5uZWwoaSkuZGF0YSgpLAotICAgICAgICAgICBtc2cu
aW5wdXRfY2hhbm5lbChpKS5zaXplKCkpOwotICB9Ci0KLSAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJv
Y2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBhcG1fLT5Qcm9jZXNzU3RyZWFtKGlu
cHV0Xy0+Y2hhbm5lbHMoKSwgaW5wdXRfY29uZmlnXywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0X2NvbmZpZ18sIG91dHB1dF8tPmNoYW5uZWxzKCkpKTsKLX0KLQot
dm9pZCBEZWJ1Z0R1bXBSZXBsYXllcjo6T25SZXZlcnNlU3RyZWFtRXZlbnQoCi0gICAgY29uc3Qg
YXVkaW9wcm9jOjpSZXZlcnNlU3RyZWFtJiBtc2cpIHsKLSAgLy8gQVBNIHNob3VsZCBoYXZlIGJl
ZW4gY3JlYXRlZC4KLSAgUlRDX0NIRUNLKGFwbV8uZ2V0KCkpOwotCi0gIFJUQ19DSEVDS19HVCht
c2cuY2hhbm5lbF9zaXplKCksIDApOwotICBSVENfQ0hFQ0tfRVEocmV2ZXJzZV9jb25maWdfLm51
bV9jaGFubmVscygpLAotICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90Pihtc2cuY2hh
bm5lbF9zaXplKCkpKTsKLSAgUlRDX0NIRUNLX0VRKHJldmVyc2VfY29uZmlnXy5udW1fZnJhbWVz
KCkgKiBzaXplb2YoZmxvYXQpLAotICAgICAgICAgICAgICAgbXNnLmNoYW5uZWwoMCkuc2l6ZSgp
KTsKLQotICBmb3IgKGludCBpID0gMDsgaSA8IG1zZy5jaGFubmVsX3NpemUoKTsgKytpKSB7Ci0g
ICAgbWVtY3B5KHJldmVyc2VfLT5jaGFubmVscygpW2ldLCBtc2cuY2hhbm5lbChpKS5kYXRhKCks
Ci0gICAgICAgICAgIG1zZy5jaGFubmVsKGkpLnNpemUoKSk7Ci0gIH0KLQotICBSVENfQ0hFQ0tf
RVEoCi0gICAgICBBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgYXBtXy0+UHJvY2Vz
c1JldmVyc2VTdHJlYW0ocmV2ZXJzZV8tPmNoYW5uZWxzKCksIHJldmVyc2VfY29uZmlnXywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VfY29uZmlnXywgcmV2ZXJzZV8t
PmNoYW5uZWxzKCkpKTsKLX0KLQotdm9pZCBEZWJ1Z0R1bXBSZXBsYXllcjo6T25Db25maWdFdmVu
dChjb25zdCBhdWRpb3Byb2M6OkNvbmZpZyYgbXNnKSB7Ci0gIE1heWJlUmVjcmVhdGVBcG0obXNn
KTsKLSAgQ29uZmlndXJlQXBtKG1zZyk7Ci19Ci0KLXZvaWQgRGVidWdEdW1wUmVwbGF5ZXI6Ok1h
eWJlUmVjcmVhdGVBcG0oY29uc3QgYXVkaW9wcm9jOjpDb25maWcmIG1zZykgewotICAvLyBUaGVz
ZSBjb25maWd1cmF0aW9ucyBjYW5ub3QgYmUgY2hhbmdlZCBvbiB0aGUgZmx5LgotICBDb25maWcg
Y29uZmlnOwotICBSVENfQ0hFQ0sobXNnLmhhc19hZWNfZGVsYXlfYWdub3N0aWNfZW5hYmxlZCgp
KTsKLSAgY29uZmlnLlNldDxEZWxheUFnbm9zdGljPigKLSAgICAgIG5ldyBEZWxheUFnbm9zdGlj
KG1zZy5hZWNfZGVsYXlfYWdub3N0aWNfZW5hYmxlZCgpKSk7Ci0KLSAgUlRDX0NIRUNLKG1zZy5o
YXNfbm9pc2Vfcm9idXN0X2FnY19lbmFibGVkKCkpOwotICBjb25maWcuU2V0PEV4cGVyaW1lbnRh
bEFnYz4oCi0gICAgICBuZXcgRXhwZXJpbWVudGFsQWdjKG1zZy5ub2lzZV9yb2J1c3RfYWdjX2Vu
YWJsZWQoKSkpOwotCi0gIFJUQ19DSEVDSyhtc2cuaGFzX3RyYW5zaWVudF9zdXBwcmVzc2lvbl9l
bmFibGVkKCkpOwotICBjb25maWcuU2V0PEV4cGVyaW1lbnRhbE5zPigKLSAgICAgIG5ldyBFeHBl
cmltZW50YWxOcyhtc2cudHJhbnNpZW50X3N1cHByZXNzaW9uX2VuYWJsZWQoKSkpOwotCi0gIFJU
Q19DSEVDSyhtc2cuaGFzX2FlY19leHRlbmRlZF9maWx0ZXJfZW5hYmxlZCgpKTsKLSAgY29uZmln
LlNldDxFeHRlbmRlZEZpbHRlcj4oCi0gICAgICBuZXcgRXh0ZW5kZWRGaWx0ZXIobXNnLmFlY19l
eHRlbmRlZF9maWx0ZXJfZW5hYmxlZCgpKSk7Ci0KLSAgUlRDX0NIRUNLKG1zZy5oYXNfaW50ZWxs
aWdpYmlsaXR5X2VuaGFuY2VyX2VuYWJsZWQoKSk7Ci0gIGNvbmZpZy5TZXQ8SW50ZWxsaWdpYmls
aXR5PigKLSAgICAgIG5ldyBJbnRlbGxpZ2liaWxpdHkobXNnLmludGVsbGlnaWJpbGl0eV9lbmhh
bmNlcl9lbmFibGVkKCkpKTsKLQotICAvLyBXZSBvbmx5IGNyZWF0ZSBBUE0gb25jZSwgc2luY2Ug
Y2hhbmdlcyBvbiB0aGVzZSBmaWVsZHMgc2hvdWxkIG5vdAotICAvLyBoYXBwZW4gaW4gY3VycmVu
dCBpbXBsZW1lbnRhdGlvbi4KLSAgaWYgKCFhcG1fLmdldCgpKSB7Ci0gICAgYXBtXy5yZXNldChB
dWRpb1Byb2Nlc3Npbmc6OkNyZWF0ZShjb25maWcpKTsKLSAgfQotfQotCi12b2lkIERlYnVnRHVt
cFJlcGxheWVyOjpDb25maWd1cmVBcG0oY29uc3QgYXVkaW9wcm9jOjpDb25maWcmIG1zZykgewot
ICAvLyBBRUMgY29uZmlncy4KLSAgUlRDX0NIRUNLKG1zZy5oYXNfYWVjX2VuYWJsZWQoKSk7Ci0g
IFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAg
YXBtXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+RW5hYmxlKG1zZy5hZWNfZW5hYmxlZCgpKSk7Ci0K
LSAgUlRDX0NIRUNLKG1zZy5oYXNfYWVjX2RyaWZ0X2NvbXBlbnNhdGlvbl9lbmFibGVkKCkpOwot
ICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAg
IGFwbV8tPmVjaG9fY2FuY2VsbGF0aW9uKCktPmVuYWJsZV9kcmlmdF9jb21wZW5zYXRpb24oCi0g
ICAgICAgICAgICAgICAgICAgbXNnLmFlY19kcmlmdF9jb21wZW5zYXRpb25fZW5hYmxlZCgpKSk7
Ci0KLSAgUlRDX0NIRUNLKG1zZy5oYXNfYWVjX3N1cHByZXNzaW9uX2xldmVsKCkpOwotICBSVENf
Q0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgIGFwbV8t
PmVjaG9fY2FuY2VsbGF0aW9uKCktPnNldF9zdXBwcmVzc2lvbl9sZXZlbCgKLSAgICAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxFY2hvQ2FuY2VsbGF0aW9uOjpTdXBwcmVzc2lvbkxldmVsPigK
LSAgICAgICAgICAgICAgICAgICAgICAgbXNnLmFlY19zdXBwcmVzc2lvbl9sZXZlbCgpKSkpOwot
Ci0gIC8vIEFFQ00gY29uZmlncy4KLSAgUlRDX0NIRUNLKG1zZy5oYXNfYWVjbV9lbmFibGVkKCkp
OwotICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAg
ICAgIGFwbV8tPmVjaG9fY29udHJvbF9tb2JpbGUoKS0+RW5hYmxlKG1zZy5hZWNtX2VuYWJsZWQo
KSkpOwotCi0gIFJUQ19DSEVDSyhtc2cuaGFzX2FlY21fY29tZm9ydF9ub2lzZV9lbmFibGVkKCkp
OwotICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAg
ICAgIGFwbV8tPmVjaG9fY29udHJvbF9tb2JpbGUoKS0+ZW5hYmxlX2NvbWZvcnRfbm9pc2UoCi0g
ICAgICAgICAgICAgICAgICAgbXNnLmFlY21fY29tZm9ydF9ub2lzZV9lbmFibGVkKCkpKTsKLQot
ICBSVENfQ0hFQ0sobXNnLmhhc19hZWNtX3JvdXRpbmdfbW9kZSgpKTsKLSAgUlRDX0NIRUNLX0VR
KEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBhcG1fLT5lY2hvX2Nv
bnRyb2xfbW9iaWxlKCktPnNldF9yb3V0aW5nX21vZGUoCi0gICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8RWNob0NvbnRyb2xNb2JpbGU6OlJvdXRpbmdNb2RlPigKLSAgICAgICAgICAgICAg
ICAgICAgICAgbXNnLmFlY21fcm91dGluZ19tb2RlKCkpKSk7Ci0KLSAgLy8gQUdDIGNvbmZpZ3Mu
Ci0gIFJUQ19DSEVDSyhtc2cuaGFzX2FnY19lbmFibGVkKCkpOwotICBSVENfQ0hFQ0tfRVEoQXVk
aW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgIGFwbV8tPmdhaW5fY29udHJv
bCgpLT5FbmFibGUobXNnLmFnY19lbmFibGVkKCkpKTsKLQotICBSVENfQ0hFQ0sobXNnLmhhc19h
Z2NfbW9kZSgpKTsKLSAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0g
ICAgICAgICAgICAgICBhcG1fLT5nYWluX2NvbnRyb2woKS0+c2V0X21vZGUoCi0gICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8R2FpbkNvbnRyb2w6Ok1vZGU+KG1zZy5hZ2NfbW9kZSgpKSkp
OwotCi0gIFJUQ19DSEVDSyhtc2cuaGFzX2FnY19saW1pdGVyX2VuYWJsZWQoKSk7Ci0gIFJUQ19D
SEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgYXBtXy0+
Z2Fpbl9jb250cm9sKCktPmVuYWJsZV9saW1pdGVyKG1zZy5hZ2NfbGltaXRlcl9lbmFibGVkKCkp
KTsKLQotICAvLyBIUEYgY29uZmlncy4KLSAgUlRDX0NIRUNLKG1zZy5oYXNfaHBmX2VuYWJsZWQo
KSk7Ci0gIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAg
ICAgICAgYXBtXy0+aGlnaF9wYXNzX2ZpbHRlcigpLT5FbmFibGUobXNnLmhwZl9lbmFibGVkKCkp
KTsKLQotICAvLyBOUyBjb25maWdzLgotICBSVENfQ0hFQ0sobXNnLmhhc19uc19lbmFibGVkKCkp
OwotICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAg
ICAgIGFwbV8tPm5vaXNlX3N1cHByZXNzaW9uKCktPkVuYWJsZShtc2cubnNfZW5hYmxlZCgpKSk7
Ci0KLSAgUlRDX0NIRUNLKG1zZy5oYXNfbnNfbGV2ZWwoKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRp
b1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgYXBtXy0+bm9pc2Vfc3VwcHJl
c3Npb24oKS0+c2V0X2xldmVsKAotICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE5vaXNl
U3VwcHJlc3Npb246OkxldmVsPihtc2cubnNfbGV2ZWwoKSkpKTsKLX0KLQotdm9pZCBEZWJ1Z0R1
bXBSZXBsYXllcjo6TG9hZE5leHRNZXNzYWdlKCkgewotICBoYXNfbmV4dF9ldmVudF8gPQotICAg
ICAgZGVidWdfZmlsZV8gJiYgUmVhZE1lc3NhZ2VGcm9tRmlsZShkZWJ1Z19maWxlXywgJm5leHRf
ZXZlbnRfKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2RlYnVnX2R1bXBfcmVwbGF5ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX3Byb2Nlc3NpbmcvdGVzdC9kZWJ1Z19kdW1wX3JlcGxheWVyLmgJKHJldmlzaW9uIDIxMjI3
MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fcHJvY2Vzc2luZy90ZXN0L2RlYnVnX2R1bXBfcmVwbGF5ZXIuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJU
Q19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9ERUJVR19EVU1QX1JFUExBWUVSX0hfCi0j
ZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9ERUJVR19EVU1QX1JF
UExBWUVSX0hfCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0jaW5j
bHVkZSAid2VicnRjL2Jhc2UvaWdub3JlX3d1bmRlZi5oIgotI2luY2x1ZGUgIndlYnJ0Yy9jb21t
b25fYXVkaW8vY2hhbm5lbF9idWZmZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRp
b19wcm9jZXNzaW5nL2luY2x1ZGUvYXVkaW9fcHJvY2Vzc2luZy5oIgotCi1SVENfUFVTSF9JR05P
UklOR19XVU5ERUYoKQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Npbmcv
ZGVidWcucGIuaCIKLVJUQ19QT1BfSUdOT1JJTkdfV1VOREVGKCkKLQotbmFtZXNwYWNlIHdlYnJ0
YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLWNsYXNzIERlYnVnRHVtcFJlcGxheWVyIHsKLSBwdWJs
aWM6Ci0gIERlYnVnRHVtcFJlcGxheWVyKCk7Ci0gIH5EZWJ1Z0R1bXBSZXBsYXllcigpOwotCi0g
IC8vIFNldCBkdW1wIGZpbGUKLSAgYm9vbCBTZXREdW1wRmlsZShjb25zdCBzdGQ6OnN0cmluZyYg
ZmlsZW5hbWUpOwotCi0gIC8vIFJldHVybiBuZXh0IGV2ZW50LgotICBydGM6Ok9wdGlvbmFsPGF1
ZGlvcHJvYzo6RXZlbnQ+IEdldE5leHRFdmVudCgpIGNvbnN0OwotCi0gIC8vIFJ1biB0aGUgbmV4
dCBldmVudC4gUmV0dXJucyB0cnVlIGlmIHN1Y2NlZWRlZC4KLSAgYm9vbCBSdW5OZXh0RXZlbnQo
KTsKLQotICBjb25zdCBDaGFubmVsQnVmZmVyPGZsb2F0PiogR2V0T3V0cHV0KCkgY29uc3Q7Ci0g
IFN0cmVhbUNvbmZpZyBHZXRPdXRwdXRDb25maWcoKSBjb25zdDsKLQotIHByaXZhdGU6Ci0gIC8v
IEZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGZhY2lsaXRpZXMgZm9yIHJlcGxheWluZyBkZWJ1ZyBk
dW1wcy4KLSAgdm9pZCBPbkluaXRFdmVudChjb25zdCBhdWRpb3Byb2M6OkluaXQmIG1zZyk7Ci0g
IHZvaWQgT25TdHJlYW1FdmVudChjb25zdCBhdWRpb3Byb2M6OlN0cmVhbSYgbXNnKTsKLSAgdm9p
ZCBPblJldmVyc2VTdHJlYW1FdmVudChjb25zdCBhdWRpb3Byb2M6OlJldmVyc2VTdHJlYW0mIG1z
Zyk7Ci0gIHZvaWQgT25Db25maWdFdmVudChjb25zdCBhdWRpb3Byb2M6OkNvbmZpZyYgbXNnKTsK
LQotICB2b2lkIE1heWJlUmVjcmVhdGVBcG0oY29uc3QgYXVkaW9wcm9jOjpDb25maWcmIG1zZyk7
Ci0gIHZvaWQgQ29uZmlndXJlQXBtKGNvbnN0IGF1ZGlvcHJvYzo6Q29uZmlnJiBtc2cpOwotCi0g
IHZvaWQgTG9hZE5leHRNZXNzYWdlKCk7Ci0KLSAgLy8gQnVmZmVyIGZvciBBUE0gaW5wdXQvb3V0
cHV0LgotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZlcjxmbG9hdD4+IGlucHV0XzsKLSAg
c3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZmZXI8ZmxvYXQ+PiByZXZlcnNlXzsKLSAgc3RkOjp1
bmlxdWVfcHRyPENoYW5uZWxCdWZmZXI8ZmxvYXQ+PiBvdXRwdXRfOwotCi0gIHN0ZDo6dW5pcXVl
X3B0cjxBdWRpb1Byb2Nlc3Npbmc+IGFwbV87Ci0KLSAgRklMRSogZGVidWdfZmlsZV87Ci0KLSAg
U3RyZWFtQ29uZmlnIGlucHV0X2NvbmZpZ187Ci0gIFN0cmVhbUNvbmZpZyByZXZlcnNlX2NvbmZp
Z187Ci0gIFN0cmVhbUNvbmZpZyBvdXRwdXRfY29uZmlnXzsKLQotICBib29sIGhhc19uZXh0X2V2
ZW50XzsKLSAgYXVkaW9wcm9jOjpFdmVudCBuZXh0X2V2ZW50XzsKLX07Ci0KLX0gIC8vIG5hbWVz
cGFjZSB0ZXN0Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX01P
RFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX0RFQlVHX0RVTVBfUkVQTEFZRVJfSF8KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
cHJvY2Vzc2luZy90ZXN0L2RlYnVnX2R1bXBfdGVzdC5jYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Np
bmcvdGVzdC9kZWJ1Z19kdW1wX3Rlc3QuY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2lu
Zy90ZXN0L2RlYnVnX2R1bXBfdGVzdC5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDU2NCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGRlZi5oPiAgLy8gc2l6ZV90
Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rv
cj4KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX2NvZGluZy9uZXRlcS90b29scy9y
ZXNhbXBsZV9pbnB1dF9hdWRpb19maWxlLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVk
aW9fcHJvY2Vzc2luZy90ZXN0L2RlYnVnX2R1bXBfcmVwbGF5ZXIuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdGVzdF91dGlscy5oIgotI2luY2x1ZGUg
IndlYnJ0Yy90ZXN0L2d0ZXN0LmgiCi0jaW5jbHVkZSAid2VicnRjL3Rlc3QvdGVzdHN1cHBvcnQv
ZmlsZXV0aWxzLmgiCi0KLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0K
LW5hbWVzcGFjZSB7Ci0KLXZvaWQgTWF5YmVSZXNldEJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8Q2hh
bm5lbEJ1ZmZlcjxmbG9hdD4+KiBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyZWFtQ29uZmlnJiBjb25maWcpIHsKLSAgYXV0byYgYnVmZmVyX3JlZiA9ICpidWZmZXI7Ci0g
IGlmICghYnVmZmVyX3JlZi5nZXQoKSB8fCBidWZmZXJfcmVmLT5udW1fZnJhbWVzKCkgIT0gY29u
ZmlnLm51bV9mcmFtZXMoKSB8fAotICAgICAgYnVmZmVyX3JlZi0+bnVtX2NoYW5uZWxzKCkgIT0g
Y29uZmlnLm51bV9jaGFubmVscygpKSB7Ci0gICAgYnVmZmVyX3JlZi5yZXNldChuZXcgQ2hhbm5l
bEJ1ZmZlcjxmbG9hdD4oY29uZmlnLm51bV9mcmFtZXMoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZy5udW1fY2hhbm5lbHMoKSkpOwotICB9Ci19
Ci0KLWNsYXNzIERlYnVnRHVtcEdlbmVyYXRvciB7Ci0gcHVibGljOgotICBEZWJ1Z0R1bXBHZW5l
cmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0X2ZpbGVfbmFtZSwKLSAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnB1dF9maWxlX3JhdGVfaHosCi0gICAgICAgICAgICAgICAgICAgICBpbnQg
aW5wdXRfY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYg
cmV2ZXJzZV9maWxlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgcmV2ZXJzZV9maWxl
X3JhdGVfaHosCi0gICAgICAgICAgICAgICAgICAgICBpbnQgcmV2ZXJzZV9jaGFubmVscywKLSAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbmZpZyYgY29uZmlnLAotICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGR1bXBfZmlsZV9uYW1lKTsKLQotICAvLyBDb25zdHJ1
Y3RvciB0aGF0IHVzZXMgZGVmYXVsdCBpbnB1dCBmaWxlcy4KLSAgZXhwbGljaXQgRGVidWdEdW1w
R2VuZXJhdG9yKGNvbnN0IENvbmZpZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQXVkaW9Qcm9jZXNzaW5nOjpDb25maWcmIGFwbV9jb25maWcpOwotCi0gIH5E
ZWJ1Z0R1bXBHZW5lcmF0b3IoKTsKLQotICAvLyBDaGFuZ2VzIHRoZSBzYW1wbGUgcmF0ZSBvZiB0
aGUgaW5wdXQgYXVkaW8gdG8gdGhlIEFQTS4KLSAgdm9pZCBTZXRJbnB1dFJhdGUoaW50IHJhdGVf
aHopOwotCi0gIC8vIFNldHMgaWYgY29udmVydHMgc3RlcmVvIGlucHV0IHNpZ25hbCB0byBtb25v
IGJ5IGRpc2NhcmRpbmcgb3RoZXIgY2hhbm5lbHMuCi0gIHZvaWQgRm9yY2VJbnB1dE1vbm8oYm9v
bCBtb25vKTsKLQotICAvLyBDaGFuZ2VzIHRoZSBzYW1wbGUgcmF0ZSBvZiB0aGUgcmV2ZXJzZSBh
dWRpbyB0byB0aGUgQVBNLgotICB2b2lkIFNldFJldmVyc2VSYXRlKGludCByYXRlX2h6KTsKLQot
ICAvLyBTZXRzIGlmIGNvbnZlcnRzIHN0ZXJlbyByZXZlcnNlIHNpZ25hbCB0byBtb25vIGJ5IGRp
c2NhcmRpbmcgb3RoZXIKLSAgLy8gY2hhbm5lbHMuCi0gIHZvaWQgRm9yY2VSZXZlcnNlTW9ubyhi
b29sIG1vbm8pOwotCi0gIC8vIFNldHMgdGhlIHJlcXVpcmVkIHNhbXBsZSByYXRlIG9mIHRoZSBB
UE0gb3V0cHV0LgotICB2b2lkIFNldE91dHB1dFJhdGUoaW50IHJhdGVfaHopOwotCi0gIC8vIFNl
dHMgdGhlIHJlcXVpcmVkIGNoYW5uZWxzIG9mIHRoZSBBUE0gb3V0cHV0LgotICB2b2lkIFNldE91
dHB1dENoYW5uZWxzKGludCBjaGFubmVscyk7Ci0KLSAgc3RkOjpzdHJpbmcgZHVtcF9maWxlX25h
bWUoKSBjb25zdCB7IHJldHVybiBkdW1wX2ZpbGVfbmFtZV87IH0KLQotICB2b2lkIFN0YXJ0UmVj
b3JkaW5nKCk7Ci0gIHZvaWQgUHJvY2VzcyhzaXplX3QgbnVtX2Jsb2Nrcyk7Ci0gIHZvaWQgU3Rv
cFJlY29yZGluZygpOwotICBBdWRpb1Byb2Nlc3NpbmcqIGFwbSgpIGNvbnN0IHsgcmV0dXJuIGFw
bV8uZ2V0KCk7IH0KLQotIHByaXZhdGU6Ci0gIHN0YXRpYyB2b2lkIFJlYWRBbmREZWludGVybGVh
dmUoUmVzYW1wbGVJbnB1dEF1ZGlvRmlsZSogYXVkaW8sIGludCBjaGFubmVscywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJlYW1Db25maWcmIGNvbmZpZywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogY29uc3QqIGJ1ZmZlcik7Ci0K
LSAgLy8gQVBNIGlucHV0L291dHB1dCBzZXR0aW5ncy4KLSAgU3RyZWFtQ29uZmlnIGlucHV0X2Nv
bmZpZ187Ci0gIFN0cmVhbUNvbmZpZyByZXZlcnNlX2NvbmZpZ187Ci0gIFN0cmVhbUNvbmZpZyBv
dXRwdXRfY29uZmlnXzsKLQotICAvLyBJbnB1dCBmaWxlIGZvcm1hdC4KLSAgY29uc3Qgc3RkOjpz
dHJpbmcgaW5wdXRfZmlsZV9uYW1lXzsKLSAgUmVzYW1wbGVJbnB1dEF1ZGlvRmlsZSBpbnB1dF9h
dWRpb187Ci0gIGNvbnN0IGludCBpbnB1dF9maWxlX2NoYW5uZWxzXzsKLQotICAvLyBSZXZlcnNl
IGZpbGUgZm9ybWF0LgotICBjb25zdCBzdGQ6OnN0cmluZyByZXZlcnNlX2ZpbGVfbmFtZV87Ci0g
IFJlc2FtcGxlSW5wdXRBdWRpb0ZpbGUgcmV2ZXJzZV9hdWRpb187Ci0gIGNvbnN0IGludCByZXZl
cnNlX2ZpbGVfY2hhbm5lbHNfOwotCi0gIC8vIEJ1ZmZlciBmb3IgQVBNIGlucHV0L291dHB1dC4K
LSAgc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZmZXI8ZmxvYXQ+PiBpbnB1dF87Ci0gIHN0ZDo6
dW5pcXVlX3B0cjxDaGFubmVsQnVmZmVyPGZsb2F0Pj4gcmV2ZXJzZV87Ci0gIHN0ZDo6dW5pcXVl
X3B0cjxDaGFubmVsQnVmZmVyPGZsb2F0Pj4gb3V0cHV0XzsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8
QXVkaW9Qcm9jZXNzaW5nPiBhcG1fOwotCi0gIGNvbnN0IHN0ZDo6c3RyaW5nIGR1bXBfZmlsZV9u
YW1lXzsKLX07Ci0KLURlYnVnRHVtcEdlbmVyYXRvcjo6RGVidWdEdW1wR2VuZXJhdG9yKGNvbnN0
IHN0ZDo6c3RyaW5nJiBpbnB1dF9maWxlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaW5wdXRfcmF0ZV9oeiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBpbnB1dF9jaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXZlcnNlX2ZpbGVfbmFtZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXZlcnNlX3JhdGVf
aHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV2ZXJzZV9j
aGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENv
bmZpZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIGR1bXBfZmlsZV9uYW1lKQotICAgIDogaW5wdXRfY29uZmlnXyhpbnB1
dF9yYXRlX2h6LCBpbnB1dF9jaGFubmVscyksCi0gICAgICByZXZlcnNlX2NvbmZpZ18ocmV2ZXJz
ZV9yYXRlX2h6LCByZXZlcnNlX2NoYW5uZWxzKSwKLSAgICAgIG91dHB1dF9jb25maWdfKGlucHV0
X3JhdGVfaHosIGlucHV0X2NoYW5uZWxzKSwKLSAgICAgIGlucHV0X2F1ZGlvXyhpbnB1dF9maWxl
X25hbWUsIGlucHV0X3JhdGVfaHosIGlucHV0X3JhdGVfaHopLAotICAgICAgaW5wdXRfZmlsZV9j
aGFubmVsc18oaW5wdXRfY2hhbm5lbHMpLAotICAgICAgcmV2ZXJzZV9hdWRpb18ocmV2ZXJzZV9m
aWxlX25hbWUsIHJldmVyc2VfcmF0ZV9oeiwgcmV2ZXJzZV9yYXRlX2h6KSwKLSAgICAgIHJldmVy
c2VfZmlsZV9jaGFubmVsc18ocmV2ZXJzZV9jaGFubmVscyksCi0gICAgICBpbnB1dF8obmV3IENo
YW5uZWxCdWZmZXI8ZmxvYXQ+KGlucHV0X2NvbmZpZ18ubnVtX2ZyYW1lcygpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9jb25maWdfLm51bV9jaGFubmVscygp
KSksCi0gICAgICByZXZlcnNlXyhuZXcgQ2hhbm5lbEJ1ZmZlcjxmbG9hdD4ocmV2ZXJzZV9jb25m
aWdfLm51bV9mcmFtZXMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXZlcnNlX2NvbmZpZ18ubnVtX2NoYW5uZWxzKCkpKSwKLSAgICAgIG91dHB1dF8obmV3IENo
YW5uZWxCdWZmZXI8ZmxvYXQ+KG91dHB1dF9jb25maWdfLm51bV9mcmFtZXMoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb25maWdfLm51bV9jaGFubmVs
cygpKSksCi0gICAgICBhcG1fKEF1ZGlvUHJvY2Vzc2luZzo6Q3JlYXRlKGNvbmZpZykpLAotICAg
ICAgZHVtcF9maWxlX25hbWVfKGR1bXBfZmlsZV9uYW1lKSB7Ci19Ci0KLURlYnVnRHVtcEdlbmVy
YXRvcjo6RGVidWdEdW1wR2VuZXJhdG9yKAotICAgIGNvbnN0IENvbmZpZyYgY29uZmlnLAotICAg
IGNvbnN0IEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmlnJiBhcG1fY29uZmlnKQotICAgIDogRGVidWdE
dW1wR2VuZXJhdG9yKFJlc291cmNlUGF0aCgibmVhcjMyX3N0ZXJlbyIsICJwY20iKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAzMjAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgIFJlc291cmNlUGF0aCgiZmFyMzJfc3RlcmVvIiwgInBj
bSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIDMyMDAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgIFRlbXBGaWxlbmFtZShPdXRwdXRQYXRoKCksICJkZWJ1Z19hZWMiKSkgewot
ICBhcG1fLT5BcHBseUNvbmZpZyhhcG1fY29uZmlnKTsKLX0KLQotRGVidWdEdW1wR2VuZXJhdG9y
Ojp+RGVidWdEdW1wR2VuZXJhdG9yKCkgewotICByZW1vdmUoZHVtcF9maWxlX25hbWVfLmNfc3Ry
KCkpOwotfQotCi12b2lkIERlYnVnRHVtcEdlbmVyYXRvcjo6U2V0SW5wdXRSYXRlKGludCByYXRl
X2h6KSB7Ci0gIGlucHV0X2F1ZGlvXy5zZXRfb3V0cHV0X3JhdGVfaHoocmF0ZV9oeik7Ci0gIGlu
cHV0X2NvbmZpZ18uc2V0X3NhbXBsZV9yYXRlX2h6KHJhdGVfaHopOwotICBNYXliZVJlc2V0QnVm
ZmVyKCZpbnB1dF8sIGlucHV0X2NvbmZpZ18pOwotfQotCi12b2lkIERlYnVnRHVtcEdlbmVyYXRv
cjo6Rm9yY2VJbnB1dE1vbm8oYm9vbCBtb25vKSB7Ci0gIGNvbnN0IGludCBjaGFubmVscyA9IG1v
bm8gPyAxIDogaW5wdXRfZmlsZV9jaGFubmVsc187Ci0gIGlucHV0X2NvbmZpZ18uc2V0X251bV9j
aGFubmVscyhjaGFubmVscyk7Ci0gIE1heWJlUmVzZXRCdWZmZXIoJmlucHV0XywgaW5wdXRfY29u
ZmlnXyk7Ci19Ci0KLXZvaWQgRGVidWdEdW1wR2VuZXJhdG9yOjpTZXRSZXZlcnNlUmF0ZShpbnQg
cmF0ZV9oeikgewotICByZXZlcnNlX2F1ZGlvXy5zZXRfb3V0cHV0X3JhdGVfaHoocmF0ZV9oeik7
Ci0gIHJldmVyc2VfY29uZmlnXy5zZXRfc2FtcGxlX3JhdGVfaHoocmF0ZV9oeik7Ci0gIE1heWJl
UmVzZXRCdWZmZXIoJnJldmVyc2VfLCByZXZlcnNlX2NvbmZpZ18pOwotfQotCi12b2lkIERlYnVn
RHVtcEdlbmVyYXRvcjo6Rm9yY2VSZXZlcnNlTW9ubyhib29sIG1vbm8pIHsKLSAgY29uc3QgaW50
IGNoYW5uZWxzID0gbW9ubyA/IDEgOiByZXZlcnNlX2ZpbGVfY2hhbm5lbHNfOwotICByZXZlcnNl
X2NvbmZpZ18uc2V0X251bV9jaGFubmVscyhjaGFubmVscyk7Ci0gIE1heWJlUmVzZXRCdWZmZXIo
JnJldmVyc2VfLCByZXZlcnNlX2NvbmZpZ18pOwotfQotCi12b2lkIERlYnVnRHVtcEdlbmVyYXRv
cjo6U2V0T3V0cHV0UmF0ZShpbnQgcmF0ZV9oeikgewotICBvdXRwdXRfY29uZmlnXy5zZXRfc2Ft
cGxlX3JhdGVfaHoocmF0ZV9oeik7Ci0gIE1heWJlUmVzZXRCdWZmZXIoJm91dHB1dF8sIG91dHB1
dF9jb25maWdfKTsKLX0KLQotdm9pZCBEZWJ1Z0R1bXBHZW5lcmF0b3I6OlNldE91dHB1dENoYW5u
ZWxzKGludCBjaGFubmVscykgewotICBvdXRwdXRfY29uZmlnXy5zZXRfbnVtX2NoYW5uZWxzKGNo
YW5uZWxzKTsKLSAgTWF5YmVSZXNldEJ1ZmZlcigmb3V0cHV0Xywgb3V0cHV0X2NvbmZpZ18pOwot
fQotCi12b2lkIERlYnVnRHVtcEdlbmVyYXRvcjo6U3RhcnRSZWNvcmRpbmcoKSB7Ci0gIGFwbV8t
PlN0YXJ0RGVidWdSZWNvcmRpbmcoZHVtcF9maWxlX25hbWVfLmNfc3RyKCksIC0xKTsKLX0KLQot
dm9pZCBEZWJ1Z0R1bXBHZW5lcmF0b3I6OlByb2Nlc3Moc2l6ZV90IG51bV9ibG9ja3MpIHsKLSAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fYmxvY2tzOyArK2kpIHsKLSAgICBSZWFkQW5kRGVp
bnRlcmxlYXZlKCZyZXZlcnNlX2F1ZGlvXywgcmV2ZXJzZV9maWxlX2NoYW5uZWxzXywKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJldmVyc2VfY29uZmlnXywgcmV2ZXJzZV8tPmNoYW5uZWxzKCkp
OwotICAgIFJlYWRBbmREZWludGVybGVhdmUoJmlucHV0X2F1ZGlvXywgaW5wdXRfZmlsZV9jaGFu
bmVsc18sIGlucHV0X2NvbmZpZ18sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF8tPmNo
YW5uZWxzKCkpOwotICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLCBh
cG1fLT5zZXRfc3RyZWFtX2RlbGF5X21zKDEwMCkpOwotICAgIGFwbV8tPnNldF9zdHJlYW1fa2V5
X3ByZXNzZWQoaSAlIDEwID09IDkpOwotICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6
OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcG1fLT5Qcm9jZXNzU3RyZWFtKGlucHV0Xy0+
Y2hhbm5lbHMoKSwgaW5wdXRfY29uZmlnXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwdXRfY29uZmlnXywgb3V0cHV0Xy0+Y2hhbm5lbHMoKSkpOwotCi0gICAgUlRD
X0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFw
bV8tPlByb2Nlc3NSZXZlcnNlU3RyZWFtKHJldmVyc2VfLT5jaGFubmVscygpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlX2NvbmZpZ18sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VfY29uZmlnXywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZV8tPmNo
YW5uZWxzKCkpKTsKLSAgfQotfQotCi12b2lkIERlYnVnRHVtcEdlbmVyYXRvcjo6U3RvcFJlY29y
ZGluZygpIHsKLSAgYXBtXy0+U3RvcERlYnVnUmVjb3JkaW5nKCk7Ci19Ci0KLXZvaWQgRGVidWdE
dW1wR2VuZXJhdG9yOjpSZWFkQW5kRGVpbnRlcmxlYXZlKFJlc2FtcGxlSW5wdXRBdWRpb0ZpbGUq
IGF1ZGlvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyZWFtQ29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCogY29uc3QqIGJ1ZmZlcikgewotICBjb25zdCBzaXplX3Qg
bnVtX2ZyYW1lcyA9IGNvbmZpZy5udW1fZnJhbWVzKCk7Ci0gIGNvbnN0IGludCBvdXRfY2hhbm5l
bHMgPSBjb25maWcubnVtX2NoYW5uZWxzKCk7Ci0KLSAgc3RkOjp2ZWN0b3I8aW50MTZfdD4gc2ln
bmFsKGNoYW5uZWxzICogbnVtX2ZyYW1lcyk7Ci0KLSAgYXVkaW8tPlJlYWQobnVtX2ZyYW1lcyAq
IGNoYW5uZWxzLCAmc2lnbmFsWzBdKTsKLQotICAvLyBXZSBvbmx5IGFsbG93IHJlZHVjaW5nIG51
bWJlciBvZiBjaGFubmVscyBieSBkaXNjYXJkaW5nIHNvbWUgY2hhbm5lbHMuCi0gIFJUQ19DSEVD
S19MRShvdXRfY2hhbm5lbHMsIGNoYW5uZWxzKTsKLSAgZm9yIChpbnQgY2hhbm5lbCA9IDA7IGNo
YW5uZWwgPCBvdXRfY2hhbm5lbHM7ICsrY2hhbm5lbCkgewotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtX2ZyYW1lczsgKytpKSB7Ci0gICAgICBidWZmZXJbY2hhbm5lbF1baV0gPSBTMTZU
b0Zsb2F0KHNpZ25hbFtpICogY2hhbm5lbHMgKyBjaGFubmVsXSk7Ci0gICAgfQotICB9Ci19Ci0K
LX0gIC8vIG5hbWVzcGFjZQotCi1jbGFzcyBEZWJ1Z0R1bXBUZXN0IDogcHVibGljIDo6dGVzdGlu
Zzo6VGVzdCB7Ci0gcHVibGljOgotICAvLyBWZXJpZnlEZWJ1Z0R1bXAgcmVwbGF5cyBhIGRlYnVn
IGR1bXAgdXNpbmcgQVBNIGFuZCB2ZXJpZmllcyB0aGF0IHRoZSByZXN1bHQKLSAgLy8gaXMgYml0
LWV4YWN0LWlkZW50aWNhbCB0byB0aGUgb3V0cHV0IGNoYW5uZWwgaW4gdGhlIGR1bXAuIFRoaXMg
aXMgb25seQotICAvLyBndWFyYW50ZWVkIGlmIHRoZSBkZWJ1ZyBkdW1wIGlzIHN0YXJ0ZWQgb24g
dGhlIGZpcnN0IGZyYW1lLgotICB2b2lkIFZlcmlmeURlYnVnRHVtcChjb25zdCBzdGQ6OnN0cmlu
ZyYgZHVtcF9maWxlX25hbWUpOwotCi0gcHJpdmF0ZToKLSAgRGVidWdEdW1wUmVwbGF5ZXIgZGVi
dWdfZHVtcF9yZXBsYXllcl87Ci19OwotCi12b2lkIERlYnVnRHVtcFRlc3Q6OlZlcmlmeURlYnVn
RHVtcChjb25zdCBzdGQ6OnN0cmluZyYgaW5fZmlsZW5hbWUpIHsKLSAgQVNTRVJUX1RSVUUoZGVi
dWdfZHVtcF9yZXBsYXllcl8uU2V0RHVtcEZpbGUoaW5fZmlsZW5hbWUpKTsKLQotICB3aGlsZSAo
Y29uc3QgcnRjOjpPcHRpb25hbDxhdWRpb3Byb2M6OkV2ZW50PiBldmVudCA9Ci0gICAgICBkZWJ1
Z19kdW1wX3JlcGxheWVyXy5HZXROZXh0RXZlbnQoKSkgewotICAgIGRlYnVnX2R1bXBfcmVwbGF5
ZXJfLlJ1bk5leHRFdmVudCgpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGF1ZGlvcHJvYzo6
RXZlbnQ6OlNUUkVBTSkgewotICAgICAgY29uc3QgYXVkaW9wcm9jOjpTdHJlYW0qIG1zZyA9ICZl
dmVudC0+c3RyZWFtKCk7Ci0gICAgICBjb25zdCBTdHJlYW1Db25maWcgb3V0cHV0X2NvbmZpZyA9
IGRlYnVnX2R1bXBfcmVwbGF5ZXJfLkdldE91dHB1dENvbmZpZygpOwotICAgICAgY29uc3QgQ2hh
bm5lbEJ1ZmZlcjxmbG9hdD4qIG91dHB1dCA9IGRlYnVnX2R1bXBfcmVwbGF5ZXJfLkdldE91dHB1
dCgpOwotICAgICAgLy8gQ2hlY2sgdGhhdCBvdXRwdXQgb2YgQVBNIGlzIGJpdC1leGFjdCB0byB0
aGUgb3V0cHV0IGluIHRoZSBkdW1wLgotICAgICAgQVNTRVJUX0VRKG91dHB1dF9jb25maWcubnVt
X2NoYW5uZWxzKCksCi0gICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90Pihtc2ctPm91
dHB1dF9jaGFubmVsX3NpemUoKSkpOwotICAgICAgQVNTRVJUX0VRKG91dHB1dF9jb25maWcubnVt
X2ZyYW1lcygpICogc2l6ZW9mKGZsb2F0KSwKLSAgICAgICAgICAgICAgICBtc2ctPm91dHB1dF9j
aGFubmVsKDApLnNpemUoKSk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1zZy0+b3V0cHV0
X2NoYW5uZWxfc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQVNTRVJUX0VRKDAsIG1lbWNtcChvdXRw
dXQtPmNoYW5uZWxzKClbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5vdXRw
dXRfY2hhbm5lbChpKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5v
dXRwdXRfY2hhbm5lbChpKS5zaXplKCkpKTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotVEVT
VF9GKERlYnVnRHVtcFRlc3QsIFNpbXBsZUNhc2UpIHsKLSAgQ29uZmlnIGNvbmZpZzsKLSAgRGVi
dWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmln
KCkpOwotICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2VuZXJhdG9yLlByb2Nlc3Mo
MTAwKTsKLSAgZ2VuZXJhdG9yLlN0b3BSZWNvcmRpbmcoKTsKLSAgVmVyaWZ5RGVidWdEdW1wKGdl
bmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKTsKLX0KLQotVEVTVF9GKERlYnVnRHVtcFRlc3QsIENo
YW5nZUlucHV0Rm9ybWF0KSB7Ci0gIENvbmZpZyBjb25maWc7Ci0gIERlYnVnRHVtcEdlbmVyYXRv
ciBnZW5lcmF0b3IoY29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLQotICBnZW5l
cmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2Vu
ZXJhdG9yLlNldElucHV0UmF0ZSg0ODAwMCk7Ci0KLSAgZ2VuZXJhdG9yLkZvcmNlSW5wdXRNb25v
KHRydWUpOwotICAvLyBOdW1iZXIgb2Ygb3V0cHV0IGNoYW5uZWwgc2hvdWxkIG5vdCBiZSBsYXJn
ZXIgdGhhbiB0aGF0IG9mIGlucHV0LiBBUE0gd2lsbAotICAvLyBmYWlsIG90aGVyd2lzZS4KLSAg
Z2VuZXJhdG9yLlNldE91dHB1dENoYW5uZWxzKDEpOwotCi0gIGdlbmVyYXRvci5Qcm9jZXNzKDEw
MCk7Ci0gIGdlbmVyYXRvci5TdG9wUmVjb3JkaW5nKCk7Ci0gIFZlcmlmeURlYnVnRHVtcChnZW5l
cmF0b3IuZHVtcF9maWxlX25hbWUoKSk7Ci19Ci0KLVRFU1RfRihEZWJ1Z0R1bXBUZXN0LCBDaGFu
Z2VSZXZlcnNlRm9ybWF0KSB7Ci0gIENvbmZpZyBjb25maWc7Ci0gIERlYnVnRHVtcEdlbmVyYXRv
ciBnZW5lcmF0b3IoY29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJh
dG9yLlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVy
YXRvci5TZXRSZXZlcnNlUmF0ZSg0ODAwMCk7Ci0gIGdlbmVyYXRvci5Gb3JjZVJldmVyc2VNb25v
KHRydWUpOwotICBnZW5lcmF0b3IuUHJvY2VzcygxMDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29y
ZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAoZ2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpOwot
fQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgQ2hhbmdlT3V0cHV0Rm9ybWF0KSB7Ci0gIENvbmZp
ZyBjb25maWc7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5lcmF0b3IoY29uZmlnLCBBdWRpb1By
b2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGdl
bmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5TZXRPdXRwdXRSYXRlKDQ4MDAwKTsK
LSAgZ2VuZXJhdG9yLlNldE91dHB1dENoYW5uZWxzKDEpOwotICBnZW5lcmF0b3IuUHJvY2Vzcygx
MDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAoZ2Vu
ZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpOwotfQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgVG9n
Z2xlQWVjKSB7Ci0gIENvbmZpZyBjb25maWc7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5lcmF0
b3IoY29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0
UmVjb3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0KLSAgRWNob0NhbmNlbGxh
dGlvbiogYWVjID0gZ2VuZXJhdG9yLmFwbSgpLT5lY2hvX2NhbmNlbGxhdGlvbigpOwotICBFWFBF
Q1RfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwgYWVjLT5FbmFibGUoIWFlYy0+aXNfZW5h
YmxlZCgpKSk7Ci0KLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2VuZXJhdG9yLlN0b3BS
ZWNvcmRpbmcoKTsKLSAgVmVyaWZ5RGVidWdEdW1wKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgp
KTsKLX0KLQotVEVTVF9GKERlYnVnRHVtcFRlc3QsIFRvZ2dsZURlbGF5QWdub3N0aWNBZWMpIHsK
LSAgQ29uZmlnIGNvbmZpZzsKLSAgY29uZmlnLlNldDxEZWxheUFnbm9zdGljPihuZXcgRGVsYXlB
Z25vc3RpYyh0cnVlKSk7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5lcmF0b3IoY29uZmlnLCBB
dWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0UmVjb3JkaW5nKCk7
Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0KLSAgRWNob0NhbmNlbGxhdGlvbiogYWVjID0g
Z2VuZXJhdG9yLmFwbSgpLT5lY2hvX2NhbmNlbGxhdGlvbigpOwotICBFWFBFQ1RfRVEoQXVkaW9Q
cm9jZXNzaW5nOjprTm9FcnJvciwgYWVjLT5FbmFibGUoIWFlYy0+aXNfZW5hYmxlZCgpKSk7Ci0K
LSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2VuZXJhdG9yLlN0b3BSZWNvcmRpbmcoKTsK
LSAgVmVyaWZ5RGVidWdEdW1wKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKTsKLX0KLQotVEVT
VF9GKERlYnVnRHVtcFRlc3QsIFZlcmlmeVJlZmluZWRBZGFwdGl2ZUZpbHRlckV4cGVyaW1lbnRh
bFN0cmluZykgewotICBDb25maWcgY29uZmlnOwotICBjb25maWcuU2V0PFJlZmluZWRBZGFwdGl2
ZUZpbHRlcj4obmV3IFJlZmluZWRBZGFwdGl2ZUZpbHRlcih0cnVlKSk7Ci0gIERlYnVnRHVtcEdl
bmVyYXRvciBnZW5lcmF0b3IoY29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAg
Z2VuZXJhdG9yLlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0g
IGdlbmVyYXRvci5TdG9wUmVjb3JkaW5nKCk7Ci0KLSAgRGVidWdEdW1wUmVwbGF5ZXIgZGVidWdf
ZHVtcF9yZXBsYXllcl87Ci0KLSAgQVNTRVJUX1RSVUUoZGVidWdfZHVtcF9yZXBsYXllcl8uU2V0
RHVtcEZpbGUoZ2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpKTsKLQotICB3aGlsZSAoY29uc3Qg
cnRjOjpPcHRpb25hbDxhdWRpb3Byb2M6OkV2ZW50PiBldmVudCA9Ci0gICAgICAgICAgICAgZGVi
dWdfZHVtcF9yZXBsYXllcl8uR2V0TmV4dEV2ZW50KCkpIHsKLSAgICBkZWJ1Z19kdW1wX3JlcGxh
eWVyXy5SdW5OZXh0RXZlbnQoKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBhdWRpb3Byb2M6
OkV2ZW50OjpDT05GSUcpIHsKLSAgICAgIGNvbnN0IGF1ZGlvcHJvYzo6Q29uZmlnKiBtc2cgPSAm
ZXZlbnQtPmNvbmZpZygpOwotICAgICAgQVNTRVJUX1RSVUUobXNnLT5oYXNfZXhwZXJpbWVudHNf
ZGVzY3JpcHRpb24oKSk7Ci0gICAgICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vi
c3RyaW5nLCAiUmVmaW5lZEFkYXB0aXZlRmlsdGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXNnLT5leHBlcmltZW50c19kZXNjcmlwdGlvbigpLmNfc3RyKCkpOwotICAgIH0KLSAgfQot
fQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgVmVyaWZ5Q29tYmluZWRFeHBlcmltZW50YWxTdHJp
bmdJbmNsdXNpdmUpIHsKLSAgQ29uZmlnIGNvbmZpZzsKLSAgY29uZmlnLlNldDxSZWZpbmVkQWRh
cHRpdmVGaWx0ZXI+KG5ldyBSZWZpbmVkQWRhcHRpdmVGaWx0ZXIodHJ1ZSkpOwotICBjb25maWcu
U2V0PEVjaG9DYW5jZWxsZXIzPihuZXcgRWNob0NhbmNlbGxlcjModHJ1ZSkpOwotICBEZWJ1Z0R1
bXBHZW5lcmF0b3IgZ2VuZXJhdG9yKGNvbmZpZywgQXVkaW9Qcm9jZXNzaW5nOjpDb25maWcoKSk7
Ci0gIGdlbmVyYXRvci5TdGFydFJlY29yZGluZygpOwotICBnZW5lcmF0b3IuUHJvY2VzcygxMDAp
OwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotCi0gIERlYnVnRHVtcFJlcGxheWVyIGRl
YnVnX2R1bXBfcmVwbGF5ZXJfOwotCi0gIEFTU0VSVF9UUlVFKGRlYnVnX2R1bXBfcmVwbGF5ZXJf
LlNldER1bXBGaWxlKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKSk7Ci0KLSAgd2hpbGUgKGNv
bnN0IHJ0Yzo6T3B0aW9uYWw8YXVkaW9wcm9jOjpFdmVudD4gZXZlbnQgPQotICAgICAgICAgICAg
IGRlYnVnX2R1bXBfcmVwbGF5ZXJfLkdldE5leHRFdmVudCgpKSB7Ci0gICAgZGVidWdfZHVtcF9y
ZXBsYXllcl8uUnVuTmV4dEV2ZW50KCk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gYXVkaW9w
cm9jOjpFdmVudDo6Q09ORklHKSB7Ci0gICAgICBjb25zdCBhdWRpb3Byb2M6OkNvbmZpZyogbXNn
ID0gJmV2ZW50LT5jb25maWcoKTsKLSAgICAgIEFTU0VSVF9UUlVFKG1zZy0+aGFzX2V4cGVyaW1l
bnRzX2Rlc2NyaXB0aW9uKCkpOwotICAgICAgRVhQRUNUX1BSRURfRk9STUFUMih0ZXN0aW5nOjpJ
c1N1YnN0cmluZywgIlJlZmluZWRBZGFwdGl2ZUZpbHRlciIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgIG1zZy0+ZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKLSAgICAgIEVY
UEVDVF9QUkVEX0ZPUk1BVDIodGVzdGluZzo6SXNTdWJzdHJpbmcsICJBRUMzIiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgbXNnLT5leHBlcmltZW50c19kZXNjcmlwdGlvbigpLmNfc3RyKCkp
OwotICAgIH0KLSAgfQotfQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgVmVyaWZ5Q29tYmluZWRF
eHBlcmltZW50YWxTdHJpbmdFeGNsdXNpdmUpIHsKLSAgQ29uZmlnIGNvbmZpZzsKLSAgY29uZmln
LlNldDxSZWZpbmVkQWRhcHRpdmVGaWx0ZXI+KG5ldyBSZWZpbmVkQWRhcHRpdmVGaWx0ZXIodHJ1
ZSkpOwotICBEZWJ1Z0R1bXBHZW5lcmF0b3IgZ2VuZXJhdG9yKGNvbmZpZywgQXVkaW9Qcm9jZXNz
aW5nOjpDb25maWcoKSk7Ci0gIGdlbmVyYXRvci5TdGFydFJlY29yZGluZygpOwotICBnZW5lcmF0
b3IuUHJvY2VzcygxMDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotCi0gIERlYnVn
RHVtcFJlcGxheWVyIGRlYnVnX2R1bXBfcmVwbGF5ZXJfOwotCi0gIEFTU0VSVF9UUlVFKGRlYnVn
X2R1bXBfcmVwbGF5ZXJfLlNldER1bXBGaWxlKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKSk7
Ci0KLSAgd2hpbGUgKGNvbnN0IHJ0Yzo6T3B0aW9uYWw8YXVkaW9wcm9jOjpFdmVudD4gZXZlbnQg
PQotICAgICAgICAgICAgIGRlYnVnX2R1bXBfcmVwbGF5ZXJfLkdldE5leHRFdmVudCgpKSB7Ci0g
ICAgZGVidWdfZHVtcF9yZXBsYXllcl8uUnVuTmV4dEV2ZW50KCk7Ci0gICAgaWYgKGV2ZW50LT50
eXBlKCkgPT0gYXVkaW9wcm9jOjpFdmVudDo6Q09ORklHKSB7Ci0gICAgICBjb25zdCBhdWRpb3By
b2M6OkNvbmZpZyogbXNnID0gJmV2ZW50LT5jb25maWcoKTsKLSAgICAgIEFTU0VSVF9UUlVFKG1z
Zy0+aGFzX2V4cGVyaW1lbnRzX2Rlc2NyaXB0aW9uKCkpOwotICAgICAgRVhQRUNUX1BSRURfRk9S
TUFUMih0ZXN0aW5nOjpJc1N1YnN0cmluZywgIlJlZmluZWRBZGFwdGl2ZUZpbHRlciIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIG1zZy0+ZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKS5jX3N0
cigpKTsKLSAgICAgIEVYUEVDVF9QUkVEX0ZPUk1BVDIodGVzdGluZzo6SXNOb3RTdWJzdHJpbmcs
ICJBRUMzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5leHBlcmltZW50c19kZXNj
cmlwdGlvbigpLmNfc3RyKCkpOwotICAgIH0KLSAgfQotfQotCi1URVNUX0YoRGVidWdEdW1wVGVz
dCwgVmVyaWZ5QWVjM0V4cGVyaW1lbnRhbFN0cmluZykgewotICBDb25maWcgY29uZmlnOwotICBj
b25maWcuU2V0PEVjaG9DYW5jZWxsZXIzPihuZXcgRWNob0NhbmNlbGxlcjModHJ1ZSkpOwotICBE
ZWJ1Z0R1bXBHZW5lcmF0b3IgZ2VuZXJhdG9yKGNvbmZpZywgQXVkaW9Qcm9jZXNzaW5nOjpDb25m
aWcoKSk7Ci0gIGdlbmVyYXRvci5TdGFydFJlY29yZGluZygpOwotICBnZW5lcmF0b3IuUHJvY2Vz
cygxMDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotCi0gIERlYnVnRHVtcFJlcGxh
eWVyIGRlYnVnX2R1bXBfcmVwbGF5ZXJfOwotCi0gIEFTU0VSVF9UUlVFKGRlYnVnX2R1bXBfcmVw
bGF5ZXJfLlNldER1bXBGaWxlKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKSk7Ci0KLSAgd2hp
bGUgKGNvbnN0IHJ0Yzo6T3B0aW9uYWw8YXVkaW9wcm9jOjpFdmVudD4gZXZlbnQgPQotICAgICAg
ICAgICAgIGRlYnVnX2R1bXBfcmVwbGF5ZXJfLkdldE5leHRFdmVudCgpKSB7Ci0gICAgZGVidWdf
ZHVtcF9yZXBsYXllcl8uUnVuTmV4dEV2ZW50KCk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0g
YXVkaW9wcm9jOjpFdmVudDo6Q09ORklHKSB7Ci0gICAgICBjb25zdCBhdWRpb3Byb2M6OkNvbmZp
ZyogbXNnID0gJmV2ZW50LT5jb25maWcoKTsKLSAgICAgIEFTU0VSVF9UUlVFKG1zZy0+aGFzX2V4
cGVyaW1lbnRzX2Rlc2NyaXB0aW9uKCkpOwotICAgICAgRVhQRUNUX1BSRURfRk9STUFUMih0ZXN0
aW5nOjpJc1N1YnN0cmluZywgIkFFQzMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ct
PmV4cGVyaW1lbnRzX2Rlc2NyaXB0aW9uKCkuY19zdHIoKSk7Ci0gICAgfQotICB9Ci19Ci0KLVRF
U1RfRihEZWJ1Z0R1bXBUZXN0LCBWZXJpZnlMZXZlbENvbnRyb2xsZXJFeHBlcmltZW50YWxTdHJp
bmcpIHsKLSAgQ29uZmlnIGNvbmZpZzsKLSAgQXVkaW9Qcm9jZXNzaW5nOjpDb25maWcgYXBtX2Nv
bmZpZzsKLSAgYXBtX2NvbmZpZy5sZXZlbF9jb250cm9sbGVyLmVuYWJsZWQgPSB0cnVlOwotICBE
ZWJ1Z0R1bXBHZW5lcmF0b3IgZ2VuZXJhdG9yKGNvbmZpZywgYXBtX2NvbmZpZyk7Ci0gIGdlbmVy
YXRvci5TdGFydFJlY29yZGluZygpOwotICBnZW5lcmF0b3IuUHJvY2VzcygxMDApOwotICBnZW5l
cmF0b3IuU3RvcFJlY29yZGluZygpOwotCi0gIERlYnVnRHVtcFJlcGxheWVyIGRlYnVnX2R1bXBf
cmVwbGF5ZXJfOwotCi0gIEFTU0VSVF9UUlVFKGRlYnVnX2R1bXBfcmVwbGF5ZXJfLlNldER1bXBG
aWxlKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKSk7Ci0KLSAgd2hpbGUgKGNvbnN0IHJ0Yzo6
T3B0aW9uYWw8YXVkaW9wcm9jOjpFdmVudD4gZXZlbnQgPQotICAgICAgICAgICAgIGRlYnVnX2R1
bXBfcmVwbGF5ZXJfLkdldE5leHRFdmVudCgpKSB7Ci0gICAgZGVidWdfZHVtcF9yZXBsYXllcl8u
UnVuTmV4dEV2ZW50KCk7Ci0gICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gYXVkaW9wcm9jOjpFdmVu
dDo6Q09ORklHKSB7Ci0gICAgICBjb25zdCBhdWRpb3Byb2M6OkNvbmZpZyogbXNnID0gJmV2ZW50
LT5jb25maWcoKTsKLSAgICAgIEFTU0VSVF9UUlVFKG1zZy0+aGFzX2V4cGVyaW1lbnRzX2Rlc2Ny
aXB0aW9uKCkpOwotICAgICAgRVhQRUNUX1BSRURfRk9STUFUMih0ZXN0aW5nOjpJc1N1YnN0cmlu
ZywgIkxldmVsQ29udHJvbGxlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+ZXhw
ZXJpbWVudHNfZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKLSAgICB9Ci0gIH0KLX0KLQotVEVTVF9G
KERlYnVnRHVtcFRlc3QsIFZlcmlmeUVtcHR5RXhwZXJpbWVudGFsU3RyaW5nKSB7Ci0gIENvbmZp
ZyBjb25maWc7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5lcmF0b3IoY29uZmlnLCBBdWRpb1By
b2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGdl
bmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5TdG9wUmVjb3JkaW5nKCk7Ci0KLSAg
RGVidWdEdW1wUmVwbGF5ZXIgZGVidWdfZHVtcF9yZXBsYXllcl87Ci0KLSAgQVNTRVJUX1RSVUUo
ZGVidWdfZHVtcF9yZXBsYXllcl8uU2V0RHVtcEZpbGUoZ2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1l
KCkpKTsKLQotICB3aGlsZSAoY29uc3QgcnRjOjpPcHRpb25hbDxhdWRpb3Byb2M6OkV2ZW50PiBl
dmVudCA9Ci0gICAgICAgICAgICAgZGVidWdfZHVtcF9yZXBsYXllcl8uR2V0TmV4dEV2ZW50KCkp
IHsKLSAgICBkZWJ1Z19kdW1wX3JlcGxheWVyXy5SdW5OZXh0RXZlbnQoKTsKLSAgICBpZiAoZXZl
bnQtPnR5cGUoKSA9PSBhdWRpb3Byb2M6OkV2ZW50OjpDT05GSUcpIHsKLSAgICAgIGNvbnN0IGF1
ZGlvcHJvYzo6Q29uZmlnKiBtc2cgPSAmZXZlbnQtPmNvbmZpZygpOwotICAgICAgQVNTRVJUX1RS
VUUobXNnLT5oYXNfZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKSk7Ci0gICAgICBFWFBFQ1RfRVEo
MHUsIG1zZy0+ZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKS5zaXplKCkpOwotICAgIH0KLSAgfQot
fQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgVG9nZ2xlQWVjTGV2ZWwpIHsKLSAgQ29uZmlnIGNv
bmZpZzsKLSAgRGVidWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJvY2Vz
c2luZzo6Q29uZmlnKCkpOwotICBFY2hvQ2FuY2VsbGF0aW9uKiBhZWMgPSBnZW5lcmF0b3IuYXBt
KCktPmVjaG9fY2FuY2VsbGF0aW9uKCk7Ci0gIEVYUEVDVF9FUShBdWRpb1Byb2Nlc3Npbmc6OmtO
b0Vycm9yLCBhZWMtPkVuYWJsZSh0cnVlKSk7Ci0gIEVYUEVDVF9FUShBdWRpb1Byb2Nlc3Npbmc6
OmtOb0Vycm9yLAotICAgICAgICAgICAgYWVjLT5zZXRfc3VwcHJlc3Npb25fbGV2ZWwoRWNob0Nh
bmNlbGxhdGlvbjo6a0xvd1N1cHByZXNzaW9uKSk7Ci0gIGdlbmVyYXRvci5TdGFydFJlY29yZGlu
ZygpOwotICBnZW5lcmF0b3IuUHJvY2VzcygxMDApOwotCi0gIEVYUEVDVF9FUShBdWRpb1Byb2Nl
c3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgYWVjLT5zZXRfc3VwcHJlc3Npb25fbGV2ZWwo
RWNob0NhbmNlbGxhdGlvbjo6a0hpZ2hTdXBwcmVzc2lvbikpOwotICBnZW5lcmF0b3IuUHJvY2Vz
cygxMDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAo
Z2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpOwotfQotCi0vLyBBR0MgaXMgbm90IHN1cHBvcnRl
ZCBvbiBBbmRyb2lkIG9yIGlPUy4KLSNpZiBkZWZpbmVkKFdFQlJUQ19BTkRST0lEKSB8fCBkZWZp
bmVkKFdFQlJUQ19JT1MpCi0jZGVmaW5lIE1BWUJFX1RvZ2dsZUFnYyBESVNBQkxFRF9Ub2dnbGVB
Z2MKLSNlbHNlCi0jZGVmaW5lIE1BWUJFX1RvZ2dsZUFnYyBUb2dnbGVBZ2MKLSNlbmRpZgotVEVT
VF9GKERlYnVnRHVtcFRlc3QsIE1BWUJFX1RvZ2dsZUFnYykgewotICBDb25maWcgY29uZmlnOwot
ICBEZWJ1Z0R1bXBHZW5lcmF0b3IgZ2VuZXJhdG9yKGNvbmZpZywgQXVkaW9Qcm9jZXNzaW5nOjpD
b25maWcoKSk7Ci0gIGdlbmVyYXRvci5TdGFydFJlY29yZGluZygpOwotICBnZW5lcmF0b3IuUHJv
Y2VzcygxMDApOwotCi0gIEdhaW5Db250cm9sKiBhZ2MgPSBnZW5lcmF0b3IuYXBtKCktPmdhaW5f
Y29udHJvbCgpOwotICBFWFBFQ1RfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwgYWdjLT5F
bmFibGUoIWFnYy0+aXNfZW5hYmxlZCgpKSk7Ci0KLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsK
LSAgZ2VuZXJhdG9yLlN0b3BSZWNvcmRpbmcoKTsKLSAgVmVyaWZ5RGVidWdEdW1wKGdlbmVyYXRv
ci5kdW1wX2ZpbGVfbmFtZSgpKTsKLX0KLQotVEVTVF9GKERlYnVnRHVtcFRlc3QsIFRvZ2dsZU5z
KSB7Ci0gIENvbmZpZyBjb25maWc7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5lcmF0b3IoY29u
ZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0UmVjb3Jk
aW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0KLSAgTm9pc2VTdXBwcmVzc2lvbiog
bnMgPSBnZW5lcmF0b3IuYXBtKCktPm5vaXNlX3N1cHByZXNzaW9uKCk7Ci0gIEVYUEVDVF9FUShB
dWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLCBucy0+RW5hYmxlKCFucy0+aXNfZW5hYmxlZCgpKSk7
Ci0KLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2VuZXJhdG9yLlN0b3BSZWNvcmRpbmco
KTsKLSAgVmVyaWZ5RGVidWdEdW1wKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKTsKLX0KLQot
VEVTVF9GKERlYnVnRHVtcFRlc3QsIFRyYW5zaWVudFN1cHByZXNzaW9uT24pIHsKLSAgQ29uZmln
IGNvbmZpZzsKLSAgY29uZmlnLlNldDxFeHBlcmltZW50YWxOcz4obmV3IEV4cGVyaW1lbnRhbE5z
KHRydWUpKTsKLSAgRGVidWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJv
Y2Vzc2luZzo6Q29uZmlnKCkpOwotICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2Vu
ZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2VuZXJhdG9yLlN0b3BSZWNvcmRpbmcoKTsKLSAgVmVy
aWZ5RGVidWdEdW1wKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgpKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L3Byb3RvYnVmX3V0aWxzLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3Byb3RvYnVm
X3V0aWxzLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9wcm90b2J1Zl91
dGlscy5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxl
Y3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxl
IFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBm
b3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4K
LSAqLwotCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3By
b3RvYnVmX3V0aWxzLmgiCi0jaW5jbHVkZSAid2VicnRjL3R5cGVkZWZzLmgiCi0KLW5hbWVzcGFj
ZSB3ZWJydGMgewotCi1zaXplX3QgUmVhZE1lc3NhZ2VCeXRlc0Zyb21GaWxlKEZJTEUqIGZpbGUs
IHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+KiBieXRlcykgewotICAvLyBUaGUgIndpcmUgZm9y
bWF0IiBmb3IgdGhlIHNpemUgaXMgbGl0dGxlLWVuZGlhbi4gQXNzdW1lIHdlJ3JlIHJ1bm5pbmcg
b24KLSAgLy8gYSBsaXR0bGUtZW5kaWFuIG1hY2hpbmUuCi0jaWZuZGVmIFdFQlJUQ19BUkNIX0xJ
VFRMRV9FTkRJQU4KLSNlcnJvciAiTmVlZCB0byBjb252ZXJ0IG1lc3NzYWdlIGZyb20gbGl0dGxl
LWVuZGlhbi4iCi0jZW5kaWYKLSAgaW50MzJfdCBzaXplID0gMDsKLSAgaWYgKGZyZWFkKCZzaXpl
LCBzaXplb2Yoc2l6ZSksIDEsIGZpbGUpICE9IDEpCi0gICAgcmV0dXJuIDA7Ci0gIGlmIChzaXpl
IDw9IDApCi0gICAgcmV0dXJuIDA7Ci0KLSAgYnl0ZXMtPnJlc2V0KG5ldyB1aW50OF90W3NpemVd
KTsKLSAgcmV0dXJuIGZyZWFkKGJ5dGVzLT5nZXQoKSwgc2l6ZW9mKCgqYnl0ZXMpWzBdKSwgc2l6
ZSwgZmlsZSk7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBlcnJv
ciBvciBlbmQtb2YtZmlsZS4KLWJvb2wgUmVhZE1lc3NhZ2VGcm9tRmlsZShGSUxFKiBmaWxlLCA6
Omdvb2dsZTo6cHJvdG9idWY6Ok1lc3NhZ2VMaXRlKiBtc2cpIHsKLSAgc3RkOjp1bmlxdWVfcHRy
PHVpbnQ4X3RbXT4gYnl0ZXM7Ci0gIHNpemVfdCBzaXplID0gUmVhZE1lc3NhZ2VCeXRlc0Zyb21G
aWxlKGZpbGUsICZieXRlcyk7Ci0gIGlmICghc2l6ZSkKLSAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
bXNnLT5DbGVhcigpOwotICByZXR1cm4gbXNnLT5QYXJzZUZyb21BcnJheShieXRlcy5nZXQoKSwg
c2l6ZSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L3Byb3RvYnVmX3V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZf
dXRpbHMuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZfdXRp
bHMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDMzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9QUk9UT0JV
Rl9VVElMU19IXwotI2RlZmluZSBXRUJSVENfTU9EVUxFU19BVURJT19QUk9DRVNTSU5HX1RFU1Rf
UFJPVE9CVUZfVVRJTFNfSF8KLQotI2luY2x1ZGUgPG1lbW9yeT4KLQotI2luY2x1ZGUgIndlYnJ0
Yy9iYXNlL2lnbm9yZV93dW5kZWYuaCIKLQotUlRDX1BVU0hfSUdOT1JJTkdfV1VOREVGKCkKLSNp
bmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL2RlYnVnLnBiLmgiCi1SVENf
UE9QX0lHTk9SSU5HX1dVTkRFRigpCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0vLyBBbGxvY2F0
ZXMgbmV3IG1lbW9yeSBpbiB0aGUgdW5pcXVlX3B0ciB0byBmaXQgdGhlIHJhdyBtZXNzYWdlIGFu
ZCByZXR1cm5zIHRoZQotLy8gbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCi1zaXplX3QgUmVhZE1lc3Nh
Z2VCeXRlc0Zyb21GaWxlKEZJTEUqIGZpbGUsIHN0ZDo6dW5pcXVlX3B0cjx1aW50OF90W10+KiBi
eXRlcyk7Ci0KLS8vIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBlcnJvciBvciBl
bmQtb2YtZmlsZS4KLWJvb2wgUmVhZE1lc3NhZ2VGcm9tRmlsZShGSUxFKiBmaWxlLCA6Omdvb2ds
ZTo6cHJvdG9idWY6Ok1lc3NhZ2VMaXRlKiBtc2cpOwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRj
Ci0KLSNlbmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX1BST1RP
QlVGX1VUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC90ZXN0X3V0aWxzLmNjCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMv
YXVkaW9fcHJvY2Vzc2luZy90ZXN0L3Rlc3RfdXRpbHMuY2MJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
cHJvY2Vzc2luZy90ZXN0L3Rlc3RfdXRpbHMuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTggKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlIDx1dGlsaXR5PgotCi0jaW5j
bHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVk
aW9fcHJvY2Vzc2luZy90ZXN0L3Rlc3RfdXRpbHMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0K
LVJhd0ZpbGU6OlJhd0ZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKQotICAgIDogZmls
ZV9oYW5kbGVfKGZvcGVuKGZpbGVuYW1lLmNfc3RyKCksICJ3YiIpKSB7fQotCi1SYXdGaWxlOjp+
UmF3RmlsZSgpIHsKLSAgZmNsb3NlKGZpbGVfaGFuZGxlXyk7Ci19Ci0KLXZvaWQgUmF3RmlsZTo6
V3JpdGVTYW1wbGVzKGNvbnN0IGludDE2X3QqIHNhbXBsZXMsIHNpemVfdCBudW1fc2FtcGxlcykg
ewotI2lmbmRlZiBXRUJSVENfQVJDSF9MSVRUTEVfRU5ESUFOCi0jZXJyb3IgIk5lZWQgdG8gY29u
dmVydCBzYW1wbGVzIHRvIGxpdHRsZS1lbmRpYW4gd2hlbiB3cml0aW5nIHRvIFBDTSBmaWxlIgot
I2VuZGlmCi0gIGZ3cml0ZShzYW1wbGVzLCBzaXplb2YoKnNhbXBsZXMpLCBudW1fc2FtcGxlcywg
ZmlsZV9oYW5kbGVfKTsKLX0KLQotdm9pZCBSYXdGaWxlOjpXcml0ZVNhbXBsZXMoY29uc3QgZmxv
YXQqIHNhbXBsZXMsIHNpemVfdCBudW1fc2FtcGxlcykgewotICBmd3JpdGUoc2FtcGxlcywgc2l6
ZW9mKCpzYW1wbGVzKSwgbnVtX3NhbXBsZXMsIGZpbGVfaGFuZGxlXyk7Ci19Ci0KLUNoYW5uZWxC
dWZmZXJXYXZSZWFkZXI6OkNoYW5uZWxCdWZmZXJXYXZSZWFkZXIoc3RkOjp1bmlxdWVfcHRyPFdh
dlJlYWRlcj4gZmlsZSkKLSAgICA6IGZpbGVfKHN0ZDo6bW92ZShmaWxlKSkge30KLQotQ2hhbm5l
bEJ1ZmZlcldhdlJlYWRlcjo6fkNoYW5uZWxCdWZmZXJXYXZSZWFkZXIoKSA9IGRlZmF1bHQ7Ci0K
LWJvb2wgQ2hhbm5lbEJ1ZmZlcldhdlJlYWRlcjo6UmVhZChDaGFubmVsQnVmZmVyPGZsb2F0Piog
YnVmZmVyKSB7Ci0gIFJUQ19DSEVDS19FUShmaWxlXy0+bnVtX2NoYW5uZWxzKCksIGJ1ZmZlci0+
bnVtX2NoYW5uZWxzKCkpOwotICBpbnRlcmxlYXZlZF8ucmVzaXplKGJ1ZmZlci0+c2l6ZSgpKTsK
LSAgaWYgKGZpbGVfLT5SZWFkU2FtcGxlcyhpbnRlcmxlYXZlZF8uc2l6ZSgpLCAmaW50ZXJsZWF2
ZWRfWzBdKSAhPQotICAgICAgaW50ZXJsZWF2ZWRfLnNpemUoKSkgewotICAgIHJldHVybiBmYWxz
ZTsKLSAgfQotCi0gIEZsb2F0UzE2VG9GbG9hdCgmaW50ZXJsZWF2ZWRfWzBdLCBpbnRlcmxlYXZl
ZF8uc2l6ZSgpLCAmaW50ZXJsZWF2ZWRfWzBdKTsKLSAgRGVpbnRlcmxlYXZlKCZpbnRlcmxlYXZl
ZF9bMF0sIGJ1ZmZlci0+bnVtX2ZyYW1lcygpLCBidWZmZXItPm51bV9jaGFubmVscygpLAotICAg
ICAgICAgICAgICAgYnVmZmVyLT5jaGFubmVscygpKTsKLSAgcmV0dXJuIHRydWU7Ci19Ci0KLUNo
YW5uZWxCdWZmZXJXYXZXcml0ZXI6OkNoYW5uZWxCdWZmZXJXYXZXcml0ZXIoc3RkOjp1bmlxdWVf
cHRyPFdhdldyaXRlcj4gZmlsZSkKLSAgICA6IGZpbGVfKHN0ZDo6bW92ZShmaWxlKSkge30KLQot
Q2hhbm5lbEJ1ZmZlcldhdldyaXRlcjo6fkNoYW5uZWxCdWZmZXJXYXZXcml0ZXIoKSA9IGRlZmF1
bHQ7Ci0KLXZvaWQgQ2hhbm5lbEJ1ZmZlcldhdldyaXRlcjo6V3JpdGUoY29uc3QgQ2hhbm5lbEJ1
ZmZlcjxmbG9hdD4mIGJ1ZmZlcikgewotICBSVENfQ0hFQ0tfRVEoZmlsZV8tPm51bV9jaGFubmVs
cygpLCBidWZmZXIubnVtX2NoYW5uZWxzKCkpOwotICBpbnRlcmxlYXZlZF8ucmVzaXplKGJ1ZmZl
ci5zaXplKCkpOwotICBJbnRlcmxlYXZlKGJ1ZmZlci5jaGFubmVscygpLCBidWZmZXIubnVtX2Zy
YW1lcygpLCBidWZmZXIubnVtX2NoYW5uZWxzKCksCi0gICAgICAgICAgICAgJmludGVybGVhdmVk
X1swXSk7Ci0gIEZsb2F0VG9GbG9hdFMxNigmaW50ZXJsZWF2ZWRfWzBdLCBpbnRlcmxlYXZlZF8u
c2l6ZSgpLCAmaW50ZXJsZWF2ZWRfWzBdKTsKLSAgZmlsZV8tPldyaXRlU2FtcGxlcygmaW50ZXJs
ZWF2ZWRfWzBdLCBpbnRlcmxlYXZlZF8uc2l6ZSgpKTsKLX0KLQotdm9pZCBXcml0ZUludERhdGEo
Y29uc3QgaW50MTZfdCogZGF0YSwKLSAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCi0g
ICAgICAgICAgICAgICAgICBXYXZXcml0ZXIqIHdhdl9maWxlLAotICAgICAgICAgICAgICAgICAg
UmF3RmlsZSogcmF3X2ZpbGUpIHsKLSAgaWYgKHdhdl9maWxlKSB7Ci0gICAgd2F2X2ZpbGUtPldy
aXRlU2FtcGxlcyhkYXRhLCBsZW5ndGgpOwotICB9Ci0gIGlmIChyYXdfZmlsZSkgewotICAgIHJh
d19maWxlLT5Xcml0ZVNhbXBsZXMoZGF0YSwgbGVuZ3RoKTsKLSAgfQotfQotCi12b2lkIFdyaXRl
RmxvYXREYXRhKGNvbnN0IGZsb2F0KiBjb25zdCogZGF0YSwKLSAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IHNhbXBsZXNfcGVyX2NoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgIHNpemVfdCBu
dW1fY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgIFdhdldyaXRlciogd2F2X2ZpbGUsCi0g
ICAgICAgICAgICAgICAgICAgIFJhd0ZpbGUqIHJhd19maWxlKSB7Ci0gIHNpemVfdCBsZW5ndGgg
PSBudW1fY2hhbm5lbHMgKiBzYW1wbGVzX3Blcl9jaGFubmVsOwotICBzdGQ6OnVuaXF1ZV9wdHI8
ZmxvYXRbXT4gYnVmZmVyKG5ldyBmbG9hdFtsZW5ndGhdKTsKLSAgSW50ZXJsZWF2ZShkYXRhLCBz
YW1wbGVzX3Blcl9jaGFubmVsLCBudW1fY2hhbm5lbHMsIGJ1ZmZlci5nZXQoKSk7Ci0gIGlmIChy
YXdfZmlsZSkgewotICAgIHJhd19maWxlLT5Xcml0ZVNhbXBsZXMoYnVmZmVyLmdldCgpLCBsZW5n
dGgpOwotICB9Ci0gIC8vIFRPRE8oYWx1ZWJzKTogVXNlIFNjYWxlVG9JbnQxNlJhbmdlKCkgZnJv
bSBhdWRpb191dGlsCi0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICBidWZmZXJbaV0gPSBidWZmZXJbaV0gPiAwID8KLSAgICAgICAgICAgICAgICBidWZmZXJbaV0g
KiBzdGQ6Om51bWVyaWNfbGltaXRzPGludDE2X3Q+OjptYXgoKSA6Ci0gICAgICAgICAgICAgICAg
LWJ1ZmZlcltpXSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MTZfdD46Om1pbigpOwotICB9Ci0g
IGlmICh3YXZfZmlsZSkgewotICAgIHdhdl9maWxlLT5Xcml0ZVNhbXBsZXMoYnVmZmVyLmdldCgp
LCBsZW5ndGgpOwotICB9Ci19Ci0KLUZJTEUqIE9wZW5GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBm
aWxlbmFtZSwgY29uc3QgY2hhciogbW9kZSkgewotICBGSUxFKiBmaWxlID0gZm9wZW4oZmlsZW5h
bWUuY19zdHIoKSwgbW9kZSk7Ci0gIGlmICghZmlsZSkgewotICAgIHByaW50ZigiVW5hYmxlIHRv
IG9wZW4gZmlsZSAlc1xuIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0gICAgZXhpdCgxKTsKLSAgfQot
ICByZXR1cm4gZmlsZTsKLX0KLQotc2l6ZV90IFNhbXBsZXNGcm9tUmF0ZShpbnQgcmF0ZSkgewot
ICByZXR1cm4gc3RhdGljX2Nhc3Q8c2l6ZV90PihBdWRpb1Byb2Nlc3Npbmc6OmtDaHVua1NpemVN
cyAqIHJhdGUgLyAxMDAwKTsKLX0KLQotdm9pZCBTZXRGcmFtZVNhbXBsZVJhdGUoQXVkaW9GcmFt
ZSogZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGVfaHopIHsK
LSAgZnJhbWUtPnNhbXBsZV9yYXRlX2h6XyA9IHNhbXBsZV9yYXRlX2h6OwotICBmcmFtZS0+c2Ft
cGxlc19wZXJfY2hhbm5lbF8gPSBBdWRpb1Byb2Nlc3Npbmc6OmtDaHVua1NpemVNcyAqCi0gICAg
ICBzYW1wbGVfcmF0ZV9oeiAvIDEwMDA7Ci19Ci0KLUF1ZGlvUHJvY2Vzc2luZzo6Q2hhbm5lbExh
eW91dCBMYXlvdXRGcm9tQ2hhbm5lbHMoc2l6ZV90IG51bV9jaGFubmVscykgewotICBzd2l0Y2gg
KG51bV9jaGFubmVscykgewotICAgIGNhc2UgMToKLSAgICAgIHJldHVybiBBdWRpb1Byb2Nlc3Np
bmc6OmtNb25vOwotICAgIGNhc2UgMjoKLSAgICAgIHJldHVybiBBdWRpb1Byb2Nlc3Npbmc6OmtT
dGVyZW87Ci0gICAgZGVmYXVsdDoKLSAgICAgIFJUQ19DSEVDSyhmYWxzZSk7Ci0gICAgICByZXR1
cm4gQXVkaW9Qcm9jZXNzaW5nOjprTW9ubzsKLSAgfQotfQotCi1zdGQ6OnZlY3RvcjxQb2ludD4g
UGFyc2VBcnJheUdlb21ldHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBtaWNfcG9zaXRpb25zKSB7Ci0g
IGNvbnN0IHN0ZDo6dmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBQYXJzZUxpc3Q8ZmxvYXQ+KG1pY19w
b3NpdGlvbnMpOwotICBjb25zdCBzaXplX3QgbnVtX21pY3MgPQotICAgICAgcnRjOjpDaGVja2Vk
RGl2RXhhY3QodmFsdWVzLnNpemUoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PigzKSk7Ci0gIFJUQ19D
SEVDS19HVChudW1fbWljcywgMHUpIDw8ICJtaWNfcG9zaXRpb25zIGlzIG5vdCBsYXJnZSBlbm91
Z2guIjsKLQotICBzdGQ6OnZlY3RvcjxQb2ludD4gcmVzdWx0OwotICByZXN1bHQucmVzZXJ2ZShu
dW1fbWljcyk7Ci0gIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzLnNpemUoKTsgaSArPSAz
KSB7Ci0gICAgcmVzdWx0LnB1c2hfYmFjayhQb2ludCh2YWx1ZXNbaSArIDBdLCB2YWx1ZXNbaSAr
IDFdLCB2YWx1ZXNbaSArIDJdKSk7Ci0gIH0KLQotICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGQ6
OnZlY3RvcjxQb2ludD4gUGFyc2VBcnJheUdlb21ldHJ5KGNvbnN0IHN0ZDo6c3RyaW5nJiBtaWNf
cG9zaXRpb25zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
bnVtX21pY3MpIHsKLSAgc3RkOjp2ZWN0b3I8UG9pbnQ+IHJlc3VsdCA9IFBhcnNlQXJyYXlHZW9t
ZXRyeShtaWNfcG9zaXRpb25zKTsKLSAgUlRDX0NIRUNLX0VRKHJlc3VsdC5zaXplKCksIG51bV9t
aWNzKQotICAgICAgPDwgIkNvdWxkIG5vdCBwYXJzZSBtaWNfcG9zaXRpb25zIG9yIGluY29ycmVj
dCBudW1iZXIgb2YgcG9pbnRzLiI7Ci0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLX0gIC8vIG5hbWVz
cGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3Rlc3RfdXRpbHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX3Byb2Nlc3NpbmcvdGVzdC90ZXN0X3V0aWxzLmgJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L3Rlc3RfdXRpbHMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE1OCArMCwwIEBA
Ci0vKgotICogIENvcHlyaWdodCAoYykgMjAxNCBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4g
QWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFu
IGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91
bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1
dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19BVURJT19Q
Uk9DRVNTSU5HX1RFU1RfVEVTVF9VVElMU19IXwotI2RlZmluZSBXRUJSVENfTU9EVUxFU19BVURJ
T19QUk9DRVNTSU5HX1RFU1RfVEVTVF9VVElMU19IXwotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2lu
Y2x1ZGUgPGl0ZXJhdG9yPgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0j
aW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgIndlYnJ0Yy9i
YXNlL2NvbnN0cnVjdG9ybWFnaWMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvY29tbW9uX2F1ZGlvL2No
YW5uZWxfYnVmZmVyLmgiCi0jaW5jbHVkZSAid2VicnRjL2NvbW1vbl9hdWRpby93YXZfZmlsZS5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvaW5jbHVkZS9hdWRp
b19wcm9jZXNzaW5nLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvaW5jbHVkZS9tb2R1bGVf
Y29tbW9uX3R5cGVzLmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi1zdGF0aWMgY29uc3QgQXVk
aW9Qcm9jZXNzaW5nOjpFcnJvciBrTm9FcnIgPSBBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yOwot
I2RlZmluZSBFWFBFQ1RfTk9FUlIoZXhwcikgRVhQRUNUX0VRKGtOb0VyciwgKGV4cHIpKQotCi1j
bGFzcyBSYXdGaWxlIGZpbmFsIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IFJhd0ZpbGUoY29uc3Qg
c3RkOjpzdHJpbmcmIGZpbGVuYW1lKTsKLSAgflJhd0ZpbGUoKTsKLQotICB2b2lkIFdyaXRlU2Ft
cGxlcyhjb25zdCBpbnQxNl90KiBzYW1wbGVzLCBzaXplX3QgbnVtX3NhbXBsZXMpOwotICB2b2lk
IFdyaXRlU2FtcGxlcyhjb25zdCBmbG9hdCogc2FtcGxlcywgc2l6ZV90IG51bV9zYW1wbGVzKTsK
LQotIHByaXZhdGU6Ci0gIEZJTEUqIGZpbGVfaGFuZGxlXzsKLQotICBSVENfRElTQUxMT1dfQ09Q
WV9BTkRfQVNTSUdOKFJhd0ZpbGUpOwotfTsKLQotLy8gUmVhZHMgQ2hhbm5lbEJ1ZmZlcnMgZnJv
bSBhIHByb3ZpZGVkIFdhdlJlYWRlci4KLWNsYXNzIENoYW5uZWxCdWZmZXJXYXZSZWFkZXIgZmlu
YWwgewotIHB1YmxpYzoKLSAgZXhwbGljaXQgQ2hhbm5lbEJ1ZmZlcldhdlJlYWRlcihzdGQ6OnVu
aXF1ZV9wdHI8V2F2UmVhZGVyPiBmaWxlKTsKLSAgfkNoYW5uZWxCdWZmZXJXYXZSZWFkZXIoKTsK
LQotICAvLyBSZWFkcyBkYXRhIGZyb20gdGhlIGZpbGUgYWNjb3JkaW5nIHRvIHRoZSB8YnVmZmVy
fCBmb3JtYXQuIFJldHVybnMgZmFsc2UgaWYKLSAgLy8gYSBmdWxsIGJ1ZmZlciBjYW4ndCBiZSBy
ZWFkIGZyb20gdGhlIGZpbGUuCi0gIGJvb2wgUmVhZChDaGFubmVsQnVmZmVyPGZsb2F0PiogYnVm
ZmVyKTsKLQotIHByaXZhdGU6Ci0gIHN0ZDo6dW5pcXVlX3B0cjxXYXZSZWFkZXI+IGZpbGVfOwot
ICBzdGQ6OnZlY3RvcjxmbG9hdD4gaW50ZXJsZWF2ZWRfOwotCi0gIFJUQ19ESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oQ2hhbm5lbEJ1ZmZlcldhdlJlYWRlcik7Ci19OwotCi0vLyBXcml0ZXMgQ2hh
bm5lbEJ1ZmZlcnMgdG8gYSBwcm92aWRlZCBXYXZXcml0ZXIuCi1jbGFzcyBDaGFubmVsQnVmZmVy
V2F2V3JpdGVyIGZpbmFsIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IENoYW5uZWxCdWZmZXJXYXZX
cml0ZXIoc3RkOjp1bmlxdWVfcHRyPFdhdldyaXRlcj4gZmlsZSk7Ci0gIH5DaGFubmVsQnVmZmVy
V2F2V3JpdGVyKCk7Ci0KLSAgdm9pZCBXcml0ZShjb25zdCBDaGFubmVsQnVmZmVyPGZsb2F0PiYg
YnVmZmVyKTsKLQotIHByaXZhdGU6Ci0gIHN0ZDo6dW5pcXVlX3B0cjxXYXZXcml0ZXI+IGZpbGVf
OwotICBzdGQ6OnZlY3RvcjxmbG9hdD4gaW50ZXJsZWF2ZWRfOwotCi0gIFJUQ19ESVNBTExPV19D
T1BZX0FORF9BU1NJR04oQ2hhbm5lbEJ1ZmZlcldhdldyaXRlcik7Ci19OwotCi12b2lkIFdyaXRl
SW50RGF0YShjb25zdCBpbnQxNl90KiBkYXRhLAotICAgICAgICAgICAgICAgICAgc2l6ZV90IGxl
bmd0aCwKLSAgICAgICAgICAgICAgICAgIFdhdldyaXRlciogd2F2X2ZpbGUsCi0gICAgICAgICAg
ICAgICAgICBSYXdGaWxlKiByYXdfZmlsZSk7Ci0KLXZvaWQgV3JpdGVGbG9hdERhdGEoY29uc3Qg
ZmxvYXQqIGNvbnN0KiBkYXRhLAotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2FtcGxlc19w
ZXJfY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bV9jaGFubmVscywKLSAg
ICAgICAgICAgICAgICAgICAgV2F2V3JpdGVyKiB3YXZfZmlsZSwKLSAgICAgICAgICAgICAgICAg
ICAgUmF3RmlsZSogcmF3X2ZpbGUpOwotCi0vLyBFeGl0cyBvbiBmYWlsdXJlOyBkbyBub3QgdXNl
IGluIHVuaXQgdGVzdHMuCi1GSUxFKiBPcGVuRmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5h
bWUsIGNvbnN0IGNoYXIqIG1vZGUpOwotCi1zaXplX3QgU2FtcGxlc0Zyb21SYXRlKGludCByYXRl
KTsKLQotdm9pZCBTZXRGcmFtZVNhbXBsZVJhdGUoQXVkaW9GcmFtZSogZnJhbWUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgc2FtcGxlX3JhdGVfaHopOwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLXZvaWQgU2V0Q29udGFpbmVyRm9ybWF0KGludCBzYW1wbGVfcmF0ZV9oeiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1fY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICBBdWRpb0ZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDaGFubmVsQnVmZmVyPFQ+ID4qIGNiKSB7Ci0gIFNldEZyYW1lU2FtcGxlUmF0
ZShmcmFtZSwgc2FtcGxlX3JhdGVfaHopOwotICBmcmFtZS0+bnVtX2NoYW5uZWxzXyA9IG51bV9j
aGFubmVsczsKLSAgY2ItPnJlc2V0KG5ldyBDaGFubmVsQnVmZmVyPFQ+KGZyYW1lLT5zYW1wbGVz
X3Blcl9jaGFubmVsXywgbnVtX2NoYW5uZWxzKSk7Ci19Ci0KLUF1ZGlvUHJvY2Vzc2luZzo6Q2hh
bm5lbExheW91dCBMYXlvdXRGcm9tQ2hhbm5lbHMoc2l6ZV90IG51bV9jaGFubmVscyk7Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotZmxvYXQgQ29tcHV0ZVNOUihjb25zdCBUKiByZWYsIGNvbnN0
IFQqIHRlc3QsIHNpemVfdCBsZW5ndGgsIGZsb2F0KiB2YXJpYW5jZSkgewotICBmbG9hdCBtc2Ug
PSAwOwotICBmbG9hdCBtZWFuID0gMDsKLSAgKnZhcmlhbmNlID0gMDsKLSAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgIFQgZXJyb3IgPSByZWZbaV0gLSB0ZXN0W2ld
OwotICAgIG1zZSArPSBlcnJvciAqIGVycm9yOwotICAgICp2YXJpYW5jZSArPSByZWZbaV0gKiBy
ZWZbaV07Ci0gICAgbWVhbiArPSByZWZbaV07Ci0gIH0KLSAgbXNlIC89IGxlbmd0aDsKLSAgKnZh
cmlhbmNlIC89IGxlbmd0aDsKLSAgbWVhbiAvPSBsZW5ndGg7Ci0gICp2YXJpYW5jZSAtPSBtZWFu
ICogbWVhbjsKLQotICBmbG9hdCBzbnIgPSAxMDA7ICAvLyBXZSBhc3NpZ24gMTAwIGRCIHRvIHRo
ZSB6ZXJvLWVycm9yIGNhc2UuCi0gIGlmIChtc2UgPiAwKQotICAgIHNuciA9IDEwICogbG9nMTAo
KnZhcmlhbmNlIC8gbXNlKTsKLSAgcmV0dXJuIHNucjsKLX0KLQotLy8gUmV0dXJucyBhIHZlY3Rv
cjxUPiBwYXJzZWQgZnJvbSB3aGl0ZXNwYWNlIGRlbGltaXRlZCB2YWx1ZXMgaW4gdG9fcGFyc2Us
Ci0vLyBvciBhbiBlbXB0eSB2ZWN0b3IgaWYgdGhlIHN0cmluZyBjb3VsZCBub3QgYmUgcGFyc2Vk
LgotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0ZDo6dmVjdG9yPFQ+IFBhcnNlTGlzdChjb25zdCBz
dGQ6OnN0cmluZyYgdG9fcGFyc2UpIHsKLSAgc3RkOjp2ZWN0b3I8VD4gdmFsdWVzOwotCi0gIHN0
ZDo6aXN0cmluZ3N0cmVhbSBzdHIodG9fcGFyc2UpOwotICBzdGQ6OmNvcHkoCi0gICAgICBzdGQ6
OmlzdHJlYW1faXRlcmF0b3I8VD4oc3RyKSwKLSAgICAgIHN0ZDo6aXN0cmVhbV9pdGVyYXRvcjxU
PigpLAotICAgICAgc3RkOjpiYWNrX2luc2VydGVyKHZhbHVlcykpOwotCi0gIHJldHVybiB2YWx1
ZXM7Ci19Ci0KLS8vIFBhcnNlcyB0aGUgYXJyYXkgZ2VvbWV0cnkgZnJvbSB0aGUgY29tbWFuZCBs
aW5lLgotLy8KLS8vIElmIGEgdmVjdG9yIHdpdGggc2l6ZSAhPSBudW1fbWljcyBpcyByZXR1cm5l
ZCwgYW4gZXJyb3IgaGFzIG9jY3VycmVkIGFuZCBhbgotLy8gYXBwcm9wcmlhdGUgZXJyb3IgbWVz
c2FnZSBoYXMgYmVlbiBwcmludGVkIHRvIHN0ZG91dC4KLXN0ZDo6dmVjdG9yPFBvaW50PiBQYXJz
ZUFycmF5R2VvbWV0cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG1pY19wb3NpdGlvbnMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1fbWljcyk7Ci0KLS8vIFNh
bWUgYXMgYWJvdmUsIGJ1dCB3aXRob3V0IHRoZSBudW1fbWljcyBjaGVjayBmb3Igd2hlbiBpdCBp
c24ndCBhdmFpbGFibGUuCi1zdGQ6OnZlY3RvcjxQb2ludD4gUGFyc2VBcnJheUdlb21ldHJ5KGNv
bnN0IHN0ZDo6c3RyaW5nJiBtaWNfcG9zaXRpb25zKTsKLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0
YwotCi0jZW5kaWYgIC8vIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9URVNU
X1VUSUxTX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC91bml0dGVzdC5wcm90bwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX3Byb2Nlc3NpbmcvdGVzdC91bml0dGVzdC5wcm90bwkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19w
cm9jZXNzaW5nL3Rlc3QvdW5pdHRlc3QucHJvdG8JKG5vbmV4aXN0ZW50KQpAQCAtMSw1OCArMCww
IEBACi1zeW50YXggPSAicHJvdG8yIjsKLW9wdGlvbiBvcHRpbWl6ZV9mb3IgPSBMSVRFX1JVTlRJ
TUU7Ci1wYWNrYWdlIHdlYnJ0Yy5hdWRpb3Byb2M7Ci0KLW1lc3NhZ2UgVGVzdCB7Ci0gIG9wdGlv
bmFsIGludDMyIG51bV9yZXZlcnNlX2NoYW5uZWxzID0gMTsKLSAgb3B0aW9uYWwgaW50MzIgbnVt
X2lucHV0X2NoYW5uZWxzID0gMjsKLSAgb3B0aW9uYWwgaW50MzIgbnVtX291dHB1dF9jaGFubmVs
cyA9IDM7Ci0gIG9wdGlvbmFsIGludDMyIHNhbXBsZV9yYXRlID0gNDsKLQotICBtZXNzYWdlIEZy
YW1lIHsKLSAgfQotCi0gIHJlcGVhdGVkIEZyYW1lIGZyYW1lID0gNTsKLQotICBvcHRpb25hbCBp
bnQzMiBhbmFsb2dfbGV2ZWxfYXZlcmFnZSA9IDY7Ci0gIG9wdGlvbmFsIGludDMyIG1heF9vdXRw
dXRfYXZlcmFnZSA9IDc7Ci0KLSAgb3B0aW9uYWwgaW50MzIgaGFzX2VjaG9fY291bnQgPSA4Owot
ICBvcHRpb25hbCBpbnQzMiBoYXNfdm9pY2VfY291bnQgPSA5OwotICBvcHRpb25hbCBpbnQzMiBp
c19zYXR1cmF0ZWRfY291bnQgPSAxMDsKLQotICBtZXNzYWdlIFN0YXRpc3RpYyB7Ci0gICAgb3B0
aW9uYWwgaW50MzIgaW5zdGFudCA9IDE7Ci0gICAgb3B0aW9uYWwgaW50MzIgYXZlcmFnZSA9IDI7
Ci0gICAgb3B0aW9uYWwgaW50MzIgbWF4aW11bSA9IDM7Ci0gICAgb3B0aW9uYWwgaW50MzIgbWlu
aW11bSA9IDQ7Ci0gIH0KLQotICBtZXNzYWdlIEVjaG9NZXRyaWNzIHsKLSAgICBvcHRpb25hbCBT
dGF0aXN0aWMgcmVzaWR1YWxfZWNob19yZXR1cm5fbG9zcyA9IDE7Ci0gICAgb3B0aW9uYWwgU3Rh
dGlzdGljIGVjaG9fcmV0dXJuX2xvc3MgPSAyOwotICAgIG9wdGlvbmFsIFN0YXRpc3RpYyBlY2hv
X3JldHVybl9sb3NzX2VuaGFuY2VtZW50ID0gMzsKLSAgICBvcHRpb25hbCBTdGF0aXN0aWMgYV9u
bHAgPSA0OwotICAgIG9wdGlvbmFsIGZsb2F0IGRpdmVyZ2VudF9maWx0ZXJfZnJhY3Rpb24gPSA1
OwotICB9Ci0KLSAgcmVwZWF0ZWQgRWNob01ldHJpY3MgZWNob19tZXRyaWNzID0gMTE7Ci0KLSAg
bWVzc2FnZSBEZWxheU1ldHJpY3MgewotICAgIG9wdGlvbmFsIGludDMyIG1lZGlhbiA9IDE7Ci0g
ICAgb3B0aW9uYWwgaW50MzIgc3RkID0gMjsKLSAgICBvcHRpb25hbCBmbG9hdCBmcmFjdGlvbl9w
b29yX2RlbGF5cyA9IDM7Ci0gIH0KLQotICByZXBlYXRlZCBEZWxheU1ldHJpY3MgZGVsYXlfbWV0
cmljcyA9IDEyOwotCi0gIHJlcGVhdGVkIGludDMyIHJtc19sZXZlbCA9IDEzOwotCi0gIG9wdGlv
bmFsIGZsb2F0IG5zX3NwZWVjaF9wcm9iYWJpbGl0eV9hdmVyYWdlID0gMTQ7Ci0KLSAgb3B0aW9u
YWwgYm9vbCB1c2VfYWVjX2V4dGVuZGVkX2ZpbHRlciA9IDE1OwotfQotCi1tZXNzYWdlIE91dHB1
dERhdGEgewotICByZXBlYXRlZCBUZXN0IHRlc3QgPSAxOwotfQotCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Npbmcv
dGVzdC91bnBhY2suY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdW5wYWNrLmNjCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC91bnBhY2suY2MJKG5vbmV4aXN0ZW50
KQpAQCAtMSwzMzYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTEgVGhlIFdlYlJU
QyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0
aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdo
dHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250
cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JT
IGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLS8vIENvbW1hbmRs
aW5lIHRvb2wgdG8gdW5wYWNrIGF1ZGlvcHJvYyBkZWJ1ZyBmaWxlcy4KLS8vCi0vLyBUaGUgZGVi
dWcgZmlsZXMgYXJlIGR1bXBlZCBhcyBwcm90b2J1ZiBibG9icy4gRm9yIGFuYWx5c2lzLCBpdCdz
IG5lY2Vzc2FyeQotLy8gdG8gdW5wYWNrIHRoZSBmaWxlIGludG8gaXRzIGNvbXBvbmVudCBwYXJ0
czogYXVkaW8gYW5kIG90aGVyIGRhdGEuCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVk
ZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAiZ2ZsYWdzL2dmbGFncy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9iYXNlL2Zvcm1hdF9tYWNyb3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9pZ25vcmVfd3Vu
ZGVmLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3By
b3RvYnVmX3V0aWxzLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2lu
Zy90ZXN0L3Rlc3RfdXRpbHMuaCIKLSNpbmNsdWRlICJ3ZWJydGMvdHlwZWRlZnMuaCIKLQotUlRD
X1BVU0hfSUdOT1JJTkdfV1VOREVGKCkKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19w
cm9jZXNzaW5nL2RlYnVnLnBiLmgiCi1SVENfUE9QX0lHTk9SSU5HX1dVTkRFRigpCi0KLS8vIFRP
RE8oYW5kcmV3KTogdW5wYWNrIG1vcmUgb2YgdGhlIGRhdGEuCi1ERUZJTkVfc3RyaW5nKGlucHV0
X2ZpbGUsICJpbnB1dCIsICJUaGUgbmFtZSBvZiB0aGUgaW5wdXQgc3RyZWFtIGZpbGUuIik7Ci1E
RUZJTkVfc3RyaW5nKG91dHB1dF9maWxlLCAicmVmX291dCIsCi0gICAgICAgICAgICAgICJUaGUg
bmFtZSBvZiB0aGUgcmVmZXJlbmNlIG91dHB1dCBzdHJlYW0gZmlsZS4iKTsKLURFRklORV9zdHJp
bmcocmV2ZXJzZV9maWxlLCAicmV2ZXJzZSIsCi0gICAgICAgICAgICAgICJUaGUgbmFtZSBvZiB0
aGUgcmV2ZXJzZSBpbnB1dCBzdHJlYW0gZmlsZS4iKTsKLURFRklORV9zdHJpbmcoZGVsYXlfZmls
ZSwgImRlbGF5LmludDMyIiwgIlRoZSBuYW1lIG9mIHRoZSBkZWxheSBmaWxlLiIpOwotREVGSU5F
X3N0cmluZyhkcmlmdF9maWxlLCAiZHJpZnQuaW50MzIiLCAiVGhlIG5hbWUgb2YgdGhlIGRyaWZ0
IGZpbGUuIik7Ci1ERUZJTkVfc3RyaW5nKGxldmVsX2ZpbGUsICJsZXZlbC5pbnQzMiIsICJUaGUg
bmFtZSBvZiB0aGUgbGV2ZWwgZmlsZS4iKTsKLURFRklORV9zdHJpbmcoa2V5cHJlc3NfZmlsZSwg
ImtleXByZXNzLmJvb2wiLCAiVGhlIG5hbWUgb2YgdGhlIGtleXByZXNzIGZpbGUuIik7Ci1ERUZJ
TkVfc3RyaW5nKHNldHRpbmdzX2ZpbGUsICJzZXR0aW5ncy50eHQiLCAiVGhlIG5hbWUgb2YgdGhl
IHNldHRpbmdzIGZpbGUuIik7Ci1ERUZJTkVfYm9vbChmdWxsLCBmYWxzZSwKLSAgICAgICAgICAg
ICJVbnBhY2sgdGhlIGZ1bGwgc2V0IG9mIGZpbGVzIChub3JtYWxseSBub3QgbmVlZGVkKS4iKTsK
LURFRklORV9ib29sKHJhdywgZmFsc2UsICJXcml0ZSByYXcgZGF0YSBpbnN0ZWFkIG9mIGEgV0FW
IGZpbGUuIik7Ci1ERUZJTkVfYm9vbCh0ZXh0LAotICAgICAgICAgICAgZmFsc2UsCi0gICAgICAg
ICAgICAiV3JpdGUgbm9uLWF1ZGlvIGZpbGVzIGFzIHRleHQgZmlsZXMgaW5zdGVhZCBvZiBiaW5h
cnkgZmlsZXMuIik7Ci0KLSNkZWZpbmUgUFJJTlRfQ09ORklHKGZpZWxkX25hbWUpIFwKLSAgaWYg
KG1zZy5oYXNfIyNmaWVsZF9uYW1lKCkpIHsgXAotICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwg
IiAgIiAjZmllbGRfbmFtZSAiOiAlZFxuIiwgbXNnLmZpZWxkX25hbWUoKSk7IFwKLSAgfQotCi1u
YW1lc3BhY2Ugd2VicnRjIHsKLQotdXNpbmcgYXVkaW9wcm9jOjpFdmVudDsKLXVzaW5nIGF1ZGlv
cHJvYzo6UmV2ZXJzZVN0cmVhbTsKLXVzaW5nIGF1ZGlvcHJvYzo6U3RyZWFtOwotdXNpbmcgYXVk
aW9wcm9jOjpJbml0OwotCi12b2lkIFdyaXRlRGF0YShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qg
c2l6ZSwgRklMRSogZmlsZSwKLSAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxl
bmFtZSkgewotICBpZiAoZndyaXRlKGRhdGEsIHNpemUsIDEsIGZpbGUpICE9IDEpIHsKLSAgICBw
cmludGYoIkVycm9yIHdoZW4gd3JpdGluZyB0byAlc1xuIiwgZmlsZW5hbWUuY19zdHIoKSk7Ci0g
ICAgZXhpdCgxKTsKLSAgfQotfQotCi1pbnQgZG9fbWFpbihpbnQgYXJnYywgY2hhciogYXJndltd
KSB7Ci0gIHN0ZDo6c3RyaW5nIHByb2dyYW1fbmFtZSA9IGFyZ3ZbMF07Ci0gIHN0ZDo6c3RyaW5n
IHVzYWdlID0gIkNvbW1hbmRsaW5lIHRvb2wgdG8gdW5wYWNrIGF1ZGlvcHJvYyBkZWJ1ZyBmaWxl
cy5cbiIKLSAgICAiRXhhbXBsZSB1c2FnZTpcbiIgKyBwcm9ncmFtX25hbWUgKyAiIGRlYnVnX2R1
bXAucGJcbiI7Ci0gIGdvb2dsZTo6U2V0VXNhZ2VNZXNzYWdlKHVzYWdlKTsKLSAgZ29vZ2xlOjpQ
YXJzZUNvbW1hbmRMaW5lRmxhZ3MoJmFyZ2MsICZhcmd2LCB0cnVlKTsKLQotICBpZiAoYXJnYyA8
IDIpIHsKLSAgICBwcmludGYoIiVzIiwgZ29vZ2xlOjpQcm9ncmFtVXNhZ2UoKSk7Ci0gICAgcmV0
dXJuIDE7Ci0gIH0KLQotICBGSUxFKiBkZWJ1Z19maWxlID0gT3BlbkZpbGUoYXJndlsxXSwgInJi
Iik7Ci0KLSAgRXZlbnQgZXZlbnRfbXNnOwotICBpbnQgZnJhbWVfY291bnQgPSAwOwotICBzaXpl
X3QgcmV2ZXJzZV9zYW1wbGVzX3Blcl9jaGFubmVsID0gMDsKLSAgc2l6ZV90IGlucHV0X3NhbXBs
ZXNfcGVyX2NoYW5uZWwgPSAwOwotICBzaXplX3Qgb3V0cHV0X3NhbXBsZXNfcGVyX2NoYW5uZWwg
PSAwOwotICBzaXplX3QgbnVtX3JldmVyc2VfY2hhbm5lbHMgPSAwOwotICBzaXplX3QgbnVtX2lu
cHV0X2NoYW5uZWxzID0gMDsKLSAgc2l6ZV90IG51bV9vdXRwdXRfY2hhbm5lbHMgPSAwOwotICBz
dGQ6OnVuaXF1ZV9wdHI8V2F2V3JpdGVyPiByZXZlcnNlX3dhdl9maWxlOwotICBzdGQ6OnVuaXF1
ZV9wdHI8V2F2V3JpdGVyPiBpbnB1dF93YXZfZmlsZTsKLSAgc3RkOjp1bmlxdWVfcHRyPFdhdldy
aXRlcj4gb3V0cHV0X3dhdl9maWxlOwotICBzdGQ6OnVuaXF1ZV9wdHI8UmF3RmlsZT4gcmV2ZXJz
ZV9yYXdfZmlsZTsKLSAgc3RkOjp1bmlxdWVfcHRyPFJhd0ZpbGU+IGlucHV0X3Jhd19maWxlOwot
ICBzdGQ6OnVuaXF1ZV9wdHI8UmF3RmlsZT4gb3V0cHV0X3Jhd19maWxlOwotCi0gIEZJTEUqIHNl
dHRpbmdzX2ZpbGUgPSBPcGVuRmlsZShGTEFHU19zZXR0aW5nc19maWxlLCAid2IiKTsKLQotICB3
aGlsZSAoUmVhZE1lc3NhZ2VGcm9tRmlsZShkZWJ1Z19maWxlLCAmZXZlbnRfbXNnKSkgewotICAg
IGlmIChldmVudF9tc2cudHlwZSgpID09IEV2ZW50OjpSRVZFUlNFX1NUUkVBTSkgewotICAgICAg
aWYgKCFldmVudF9tc2cuaGFzX3JldmVyc2Vfc3RyZWFtKCkpIHsKLSAgICAgICAgcHJpbnRmKCJD
b3JydXB0IGlucHV0IGZpbGU6IFJldmVyc2VTdHJlYW0gbWlzc2luZy5cbiIpOwotICAgICAgICBy
ZXR1cm4gMTsKLSAgICAgIH0KLQotICAgICAgY29uc3QgUmV2ZXJzZVN0cmVhbSBtc2cgPSBldmVu
dF9tc2cucmV2ZXJzZV9zdHJlYW0oKTsKLSAgICAgIGlmIChtc2cuaGFzX2RhdGEoKSkgewotICAg
ICAgICBpZiAoRkxBR1NfcmF3ICYmICFyZXZlcnNlX3Jhd19maWxlKSB7Ci0gICAgICAgICAgcmV2
ZXJzZV9yYXdfZmlsZS5yZXNldChuZXcgUmF3RmlsZShGTEFHU19yZXZlcnNlX2ZpbGUgKyAiLnBj
bSIpKTsKLSAgICAgICAgfQotICAgICAgICAvLyBUT0RPKGFsdWVicyk6IFJlcGxhY2UgIm51bV9y
ZXZlcnNlX2NoYW5uZWxzICoKLSAgICAgICAgLy8gcmV2ZXJzZV9zYW1wbGVzX3Blcl9jaGFubmVs
IiB3aXRoICJtc2cuZGF0YSgpLnNpemUoKSAvCi0gICAgICAgIC8vIHNpemVvZihpbnQxNl90KSIg
YW5kIHNvIG9uIHdoZW4gdGhpcyBmaXggaW4gYXVkaW9fcHJvY2Vzc2luZyBoYXMgbWFkZQotICAg
ICAgICAvLyBpdCBpbnRvIHN0YWJsZTogaHR0cHM6Ly93ZWJydGMtY29kZXJldmlldy5hcHBzcG90
LmNvbS8xNTI5OTAwNC8KLSAgICAgICAgV3JpdGVJbnREYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgaW50MTZfdCo+KG1zZy5kYXRhKCkuZGF0YSgpKSwKLSAgICAgICAgICAgICAgICAgICAgIG51
bV9yZXZlcnNlX2NoYW5uZWxzICogcmV2ZXJzZV9zYW1wbGVzX3Blcl9jaGFubmVsLAotICAgICAg
ICAgICAgICAgICAgICAgcmV2ZXJzZV93YXZfZmlsZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgIHJldmVyc2VfcmF3X2ZpbGUuZ2V0KCkpOwotICAgICAgfSBlbHNlIGlmIChtc2cuY2hhbm5l
bF9zaXplKCkgPiAwKSB7Ci0gICAgICAgIGlmIChGTEFHU19yYXcgJiYgIXJldmVyc2VfcmF3X2Zp
bGUpIHsKLSAgICAgICAgICByZXZlcnNlX3Jhd19maWxlLnJlc2V0KG5ldyBSYXdGaWxlKEZMQUdT
X3JldmVyc2VfZmlsZSArICIuZmxvYXQiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPGNvbnN0IGZsb2F0KiBbXT4gZGF0YSgKLSAgICAgICAgICAgIG5ldyBjb25zdCBmbG9h
dCogW251bV9yZXZlcnNlX2NoYW5uZWxzXSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbnVtX3JldmVyc2VfY2hhbm5lbHM7ICsraSkgewotICAgICAgICAgIGRhdGFbaV0gPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4obXNnLmNoYW5uZWwoaSkuZGF0YSgpKTsKLSAgICAg
ICAgfQotICAgICAgICBXcml0ZUZsb2F0RGF0YShkYXRhLmdldCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICByZXZlcnNlX3NhbXBsZXNfcGVyX2NoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAg
ICAgIG51bV9yZXZlcnNlX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNl
X3dhdl9maWxlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlX3Jhd19maWxl
LmdldCgpKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50X21zZy50eXBlKCkgPT0gRXZl
bnQ6OlNUUkVBTSkgewotICAgICAgZnJhbWVfY291bnQrKzsKLSAgICAgIGlmICghZXZlbnRfbXNn
Lmhhc19zdHJlYW0oKSkgewotICAgICAgICBwcmludGYoIkNvcnJ1cHQgaW5wdXQgZmlsZTogU3Ry
ZWFtIG1pc3NpbmcuXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICB9Ci0KLSAgICAgIGNv
bnN0IFN0cmVhbSBtc2cgPSBldmVudF9tc2cuc3RyZWFtKCk7Ci0gICAgICBpZiAobXNnLmhhc19p
bnB1dF9kYXRhKCkpIHsKLSAgICAgICAgaWYgKEZMQUdTX3JhdyAmJiAhaW5wdXRfcmF3X2ZpbGUp
IHsKLSAgICAgICAgICBpbnB1dF9yYXdfZmlsZS5yZXNldChuZXcgUmF3RmlsZShGTEFHU19pbnB1
dF9maWxlICsgIi5wY20iKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV3JpdGVJbnREYXRhKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50MTZfdCo+KG1zZy5pbnB1dF9kYXRhKCkuZGF0YSgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgIG51bV9pbnB1dF9jaGFubmVscyAqIGlucHV0X3NhbXBsZXNfcGVy
X2NoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICBpbnB1dF93YXZfZmlsZS5nZXQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X3Jhd19maWxlLmdldCgpKTsKLSAgICAgIH0gZWxzZSBp
ZiAobXNnLmlucHV0X2NoYW5uZWxfc2l6ZSgpID4gMCkgewotICAgICAgICBpZiAoRkxBR1NfcmF3
ICYmICFpbnB1dF9yYXdfZmlsZSkgewotICAgICAgICAgIGlucHV0X3Jhd19maWxlLnJlc2V0KG5l
dyBSYXdGaWxlKEZMQUdTX2lucHV0X2ZpbGUgKyAiLmZsb2F0IikpOwotICAgICAgICB9Ci0gICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBmbG9hdCogW10+IGRhdGEoCi0gICAgICAgICAgICBu
ZXcgY29uc3QgZmxvYXQqIFtudW1faW5wdXRfY2hhbm5lbHNdKTsKLSAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1faW5wdXRfY2hhbm5lbHM7ICsraSkgewotICAgICAgICAgIGRhdGFb
aV0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4obXNnLmlucHV0X2NoYW5uZWwoaSku
ZGF0YSgpKTsKLSAgICAgICAgfQotICAgICAgICBXcml0ZUZsb2F0RGF0YShkYXRhLmdldCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zYW1wbGVzX3Blcl9jaGFubmVsLAotICAgICAg
ICAgICAgICAgICAgICAgICBudW1faW5wdXRfY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAg
ICAgIGlucHV0X3dhdl9maWxlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9y
YXdfZmlsZS5nZXQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChtc2cuaGFzX291dHB1dF9kYXRh
KCkpIHsKLSAgICAgICAgaWYgKEZMQUdTX3JhdyAmJiAhb3V0cHV0X3Jhd19maWxlKSB7Ci0gICAg
ICAgICAgb3V0cHV0X3Jhd19maWxlLnJlc2V0KG5ldyBSYXdGaWxlKEZMQUdTX291dHB1dF9maWxl
ICsgIi5wY20iKSk7Ci0gICAgICAgIH0KLSAgICAgICAgV3JpdGVJbnREYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgaW50MTZfdCo+KG1zZy5vdXRwdXRfZGF0YSgpLmRhdGEoKSksCi0gICAgICAg
ICAgICAgICAgICAgICBudW1fb3V0cHV0X2NoYW5uZWxzICogb3V0cHV0X3NhbXBsZXNfcGVyX2No
YW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICBvdXRwdXRfd2F2X2ZpbGUuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRfcmF3X2ZpbGUuZ2V0KCkpOwotICAgICAgfSBlbHNlIGlm
IChtc2cub3V0cHV0X2NoYW5uZWxfc2l6ZSgpID4gMCkgewotICAgICAgICBpZiAoRkxBR1NfcmF3
ICYmICFvdXRwdXRfcmF3X2ZpbGUpIHsKLSAgICAgICAgICBvdXRwdXRfcmF3X2ZpbGUucmVzZXQo
bmV3IFJhd0ZpbGUoRkxBR1Nfb3V0cHV0X2ZpbGUgKyAiLmZsb2F0IikpOwotICAgICAgICB9Ci0g
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBmbG9hdCogW10+IGRhdGEoCi0gICAgICAgICAg
ICBuZXcgY29uc3QgZmxvYXQqIFtudW1fb3V0cHV0X2NoYW5uZWxzXSk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtX291dHB1dF9jaGFubmVsczsgKytpKSB7Ci0gICAgICAgICAg
ZGF0YVtpXSA9Ci0gICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPiht
c2cub3V0cHV0X2NoYW5uZWwoaSkuZGF0YSgpKTsKLSAgICAgICAgfQotICAgICAgICBXcml0ZUZs
b2F0RGF0YShkYXRhLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfc2FtcGxl
c19wZXJfY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgbnVtX291dHB1dF9jaGFubmVs
cywKLSAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X3dhdl9maWxlLmdldCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRfcmF3X2ZpbGUuZ2V0KCkpOwotICAgICAgfQotCi0gICAg
ICBpZiAoRkxBR1NfZnVsbCkgewotICAgICAgICBpZiAobXNnLmhhc19kZWxheSgpKSB7Ci0gICAg
ICAgICAgc3RhdGljIEZJTEUqIGRlbGF5X2ZpbGUgPSBPcGVuRmlsZShGTEFHU19kZWxheV9maWxl
LCAid2IiKTsKLSAgICAgICAgICBpbnQzMl90IGRlbGF5ID0gbXNnLmRlbGF5KCk7Ci0gICAgICAg
ICAgaWYgKEZMQUdTX3RleHQpIHsKLSAgICAgICAgICAgIGZwcmludGYoZGVsYXlfZmlsZSwgIiVk
XG4iLCBkZWxheSk7Ci0gICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFdyaXRlRGF0YSgm
ZGVsYXksIHNpemVvZihkZWxheSksIGRlbGF5X2ZpbGUsIEZMQUdTX2RlbGF5X2ZpbGUpOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtc2cuaGFzX2RyaWZ0KCkpIHsKLSAg
ICAgICAgICBzdGF0aWMgRklMRSogZHJpZnRfZmlsZSA9IE9wZW5GaWxlKEZMQUdTX2RyaWZ0X2Zp
bGUsICJ3YiIpOwotICAgICAgICAgIGludDMyX3QgZHJpZnQgPSBtc2cuZHJpZnQoKTsKLSAgICAg
ICAgICBpZiAoRkxBR1NfdGV4dCkgewotICAgICAgICAgICAgZnByaW50ZihkcmlmdF9maWxlLCAi
JWRcbiIsIGRyaWZ0KTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgV3JpdGVEYXRh
KCZkcmlmdCwgc2l6ZW9mKGRyaWZ0KSwgZHJpZnRfZmlsZSwgRkxBR1NfZHJpZnRfZmlsZSk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG1zZy5oYXNfbGV2ZWwoKSkgewot
ICAgICAgICAgIHN0YXRpYyBGSUxFKiBsZXZlbF9maWxlID0gT3BlbkZpbGUoRkxBR1NfbGV2ZWxf
ZmlsZSwgIndiIik7Ci0gICAgICAgICAgaW50MzJfdCBsZXZlbCA9IG1zZy5sZXZlbCgpOwotICAg
ICAgICAgIGlmIChGTEFHU190ZXh0KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKGxldmVsX2ZpbGUs
ICIlZFxuIiwgbGV2ZWwpOwotICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBXcml0ZURh
dGEoJmxldmVsLCBzaXplb2YobGV2ZWwpLCBsZXZlbF9maWxlLCBGTEFHU19sZXZlbF9maWxlKTsK
LSAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobXNnLmhhc19rZXlwcmVzcygp
KSB7Ci0gICAgICAgICAgc3RhdGljIEZJTEUqIGtleXByZXNzX2ZpbGUgPSBPcGVuRmlsZShGTEFH
U19rZXlwcmVzc19maWxlLCAid2IiKTsKLSAgICAgICAgICBib29sIGtleXByZXNzID0gbXNnLmtl
eXByZXNzKCk7Ci0gICAgICAgICAgaWYgKEZMQUdTX3RleHQpIHsKLSAgICAgICAgICAgIGZwcmlu
dGYoa2V5cHJlc3NfZmlsZSwgIiVkXG4iLCBrZXlwcmVzcyk7Ci0gICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIFdyaXRlRGF0YSgma2V5cHJlc3MsIHNpemVvZihrZXlwcmVzcyksIGtleXBy
ZXNzX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgRkxBR1Nfa2V5cHJlc3NfZmlsZSk7Ci0g
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfSBlbHNlIGlmIChldmVudF9tc2cu
dHlwZSgpID09IEV2ZW50OjpDT05GSUcpIHsKLSAgICAgIGlmICghZXZlbnRfbXNnLmhhc19jb25m
aWcoKSkgewotICAgICAgICBwcmludGYoIkNvcnJ1cHQgaW5wdXQgZmlsZTogQ29uZmlnIG1pc3Np
bmcuXG4iKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgICB9Ci0gICAgICBjb25zdCBhdWRpb3By
b2M6OkNvbmZpZyBtc2cgPSBldmVudF9tc2cuY29uZmlnKCk7Ci0KLSAgICAgIGZwcmludGYoc2V0
dGluZ3NfZmlsZSwgIkFQTSByZS1jb25maWcgYXQgZnJhbWU6ICVkXG4iLCBmcmFtZV9jb3VudCk7
Ci0KLSAgICAgIFBSSU5UX0NPTkZJRyhhZWNfZW5hYmxlZCk7Ci0gICAgICBQUklOVF9DT05GSUco
YWVjX2RlbGF5X2Fnbm9zdGljX2VuYWJsZWQpOwotICAgICAgUFJJTlRfQ09ORklHKGFlY19kcmlm
dF9jb21wZW5zYXRpb25fZW5hYmxlZCk7Ci0gICAgICBQUklOVF9DT05GSUcoYWVjX2V4dGVuZGVk
X2ZpbHRlcl9lbmFibGVkKTsKLSAgICAgIFBSSU5UX0NPTkZJRyhhZWNfc3VwcHJlc3Npb25fbGV2
ZWwpOwotICAgICAgUFJJTlRfQ09ORklHKGFlY21fZW5hYmxlZCk7Ci0gICAgICBQUklOVF9DT05G
SUcoYWVjbV9jb21mb3J0X25vaXNlX2VuYWJsZWQpOwotICAgICAgUFJJTlRfQ09ORklHKGFlY21f
cm91dGluZ19tb2RlKTsKLSAgICAgIFBSSU5UX0NPTkZJRyhhZ2NfZW5hYmxlZCk7Ci0gICAgICBQ
UklOVF9DT05GSUcoYWdjX21vZGUpOwotICAgICAgUFJJTlRfQ09ORklHKGFnY19saW1pdGVyX2Vu
YWJsZWQpOwotICAgICAgUFJJTlRfQ09ORklHKG5vaXNlX3JvYnVzdF9hZ2NfZW5hYmxlZCk7Ci0g
ICAgICBQUklOVF9DT05GSUcoaHBmX2VuYWJsZWQpOwotICAgICAgUFJJTlRfQ09ORklHKG5zX2Vu
YWJsZWQpOwotICAgICAgUFJJTlRfQ09ORklHKG5zX2xldmVsKTsKLSAgICAgIFBSSU5UX0NPTkZJ
Ryh0cmFuc2llbnRfc3VwcHJlc3Npb25fZW5hYmxlZCk7Ci0gICAgICBQUklOVF9DT05GSUcoaW50
ZWxsaWdpYmlsaXR5X2VuaGFuY2VyX2VuYWJsZWQpOwotICAgICAgaWYgKG1zZy5oYXNfZXhwZXJp
bWVudHNfZGVzY3JpcHRpb24oKSkgewotICAgICAgICBmcHJpbnRmKHNldHRpbmdzX2ZpbGUsICIg
IGV4cGVyaW1lbnRzX2Rlc2NyaXB0aW9uOiAlc1xuIiwKLSAgICAgICAgICAgICAgICBtc2cuZXhw
ZXJpbWVudHNfZGVzY3JpcHRpb24oKS5jX3N0cigpKTsKLSAgICAgIH0KLSAgICB9IGVsc2UgaWYg
KGV2ZW50X21zZy50eXBlKCkgPT0gRXZlbnQ6OklOSVQpIHsKLSAgICAgIGlmICghZXZlbnRfbXNn
Lmhhc19pbml0KCkpIHsKLSAgICAgICAgcHJpbnRmKCJDb3JydXB0IGlucHV0IGZpbGU6IEluaXQg
bWlzc2luZy5cbiIpOwotICAgICAgICByZXR1cm4gMTsKLSAgICAgIH0KLQotICAgICAgY29uc3Qg
SW5pdCBtc2cgPSBldmVudF9tc2cuaW5pdCgpOwotICAgICAgLy8gVGhlc2Ugc2hvdWxkIHByaW50
IG91dCB6ZXJvcyBpZiB0aGV5J3JlIG1pc3NpbmcuCi0gICAgICBmcHJpbnRmKHNldHRpbmdzX2Zp
bGUsICJJbml0IGF0IGZyYW1lOiAlZFxuIiwgZnJhbWVfY291bnQpOwotICAgICAgaW50IGlucHV0
X3NhbXBsZV9yYXRlID0gbXNnLnNhbXBsZV9yYXRlKCk7Ci0gICAgICBmcHJpbnRmKHNldHRpbmdz
X2ZpbGUsICIgIElucHV0IHNhbXBsZSByYXRlOiAlZFxuIiwgaW5wdXRfc2FtcGxlX3JhdGUpOwot
ICAgICAgaW50IG91dHB1dF9zYW1wbGVfcmF0ZSA9IG1zZy5vdXRwdXRfc2FtcGxlX3JhdGUoKTsK
LSAgICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwgIiAgT3V0cHV0IHNhbXBsZSByYXRlOiAlZFxu
Iiwgb3V0cHV0X3NhbXBsZV9yYXRlKTsKLSAgICAgIGludCByZXZlcnNlX3NhbXBsZV9yYXRlID0g
bXNnLnJldmVyc2Vfc2FtcGxlX3JhdGUoKTsKLSAgICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwK
LSAgICAgICAgICAgICAgIiAgUmV2ZXJzZSBzYW1wbGUgcmF0ZTogJWRcbiIsCi0gICAgICAgICAg
ICAgIHJldmVyc2Vfc2FtcGxlX3JhdGUpOwotICAgICAgbnVtX2lucHV0X2NoYW5uZWxzID0gbXNn
Lm51bV9pbnB1dF9jaGFubmVscygpOwotICAgICAgZnByaW50ZihzZXR0aW5nc19maWxlLCAiICBJ
bnB1dCBjaGFubmVsczogJSIgUFJJdVMgIlxuIiwKLSAgICAgICAgICAgICAgbnVtX2lucHV0X2No
YW5uZWxzKTsKLSAgICAgIG51bV9vdXRwdXRfY2hhbm5lbHMgPSBtc2cubnVtX291dHB1dF9jaGFu
bmVscygpOwotICAgICAgZnByaW50ZihzZXR0aW5nc19maWxlLCAiICBPdXRwdXQgY2hhbm5lbHM6
ICUiIFBSSXVTICJcbiIsCi0gICAgICAgICAgICAgIG51bV9vdXRwdXRfY2hhbm5lbHMpOwotICAg
ICAgbnVtX3JldmVyc2VfY2hhbm5lbHMgPSBtc2cubnVtX3JldmVyc2VfY2hhbm5lbHMoKTsKLSAg
ICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwgIiAgUmV2ZXJzZSBjaGFubmVsczogJSIgUFJJdVMg
IlxuIiwKLSAgICAgICAgICAgICAgbnVtX3JldmVyc2VfY2hhbm5lbHMpOwotCi0gICAgICBmcHJp
bnRmKHNldHRpbmdzX2ZpbGUsICJcbiIpOwotCi0gICAgICBpZiAocmV2ZXJzZV9zYW1wbGVfcmF0
ZSA9PSAwKSB7Ci0gICAgICAgIHJldmVyc2Vfc2FtcGxlX3JhdGUgPSBpbnB1dF9zYW1wbGVfcmF0
ZTsKLSAgICAgIH0KLSAgICAgIGlmIChvdXRwdXRfc2FtcGxlX3JhdGUgPT0gMCkgewotICAgICAg
ICBvdXRwdXRfc2FtcGxlX3JhdGUgPSBpbnB1dF9zYW1wbGVfcmF0ZTsKLSAgICAgIH0KLQotICAg
ICAgcmV2ZXJzZV9zYW1wbGVzX3Blcl9jaGFubmVsID0KLSAgICAgICAgICBzdGF0aWNfY2FzdDxz
aXplX3Q+KHJldmVyc2Vfc2FtcGxlX3JhdGUgLyAxMDApOwotICAgICAgaW5wdXRfc2FtcGxlc19w
ZXJfY2hhbm5lbCA9Ci0gICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbnB1dF9zYW1wbGVf
cmF0ZSAvIDEwMCk7Ci0gICAgICBvdXRwdXRfc2FtcGxlc19wZXJfY2hhbm5lbCA9Ci0gICAgICAg
ICAgc3RhdGljX2Nhc3Q8c2l6ZV90PihvdXRwdXRfc2FtcGxlX3JhdGUgLyAxMDApOwotCi0gICAg
ICBpZiAoIUZMQUdTX3JhdykgewotICAgICAgICAvLyBUaGUgV0FWIGZpbGVzIG5lZWQgdG8gYmUg
cmVzZXQgZXZlcnkgdGltZSwgYmVjYXVzZSB0aGV5IGNhbnQgY2hhbmdlCi0gICAgICAgIC8vIHRo
ZWlyIHNhbXBsZSByYXRlIG9yIG51bWJlciBvZiBjaGFubmVscy4KLSAgICAgICAgc3RkOjpzdHJp
bmdzdHJlYW0gcmV2ZXJzZV9uYW1lOwotICAgICAgICByZXZlcnNlX25hbWUgPDwgRkxBR1NfcmV2
ZXJzZV9maWxlIDw8IGZyYW1lX2NvdW50IDw8ICIud2F2IjsKLSAgICAgICAgcmV2ZXJzZV93YXZf
ZmlsZS5yZXNldChuZXcgV2F2V3JpdGVyKHJldmVyc2VfbmFtZS5zdHIoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2Vfc2FtcGxlX3JhdGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fcmV2ZXJzZV9j
aGFubmVscykpOwotICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBpbnB1dF9uYW1lOwotICAgICAg
ICBpbnB1dF9uYW1lIDw8IEZMQUdTX2lucHV0X2ZpbGUgPDwgZnJhbWVfY291bnQgPDwgIi53YXYi
OwotICAgICAgICBpbnB1dF93YXZfZmlsZS5yZXNldChuZXcgV2F2V3JpdGVyKGlucHV0X25hbWUu
c3RyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRf
c2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVtX2lucHV0X2NoYW5uZWxzKSk7Ci0gICAgICAgIHN0ZDo6c3RyaW5nc3RyZWFtIG91dHB1dF9u
YW1lOwotICAgICAgICBvdXRwdXRfbmFtZSA8PCBGTEFHU19vdXRwdXRfZmlsZSA8PCBmcmFtZV9j
b3VudCA8PCAiLndhdiI7Ci0gICAgICAgIG91dHB1dF93YXZfZmlsZS5yZXNldChuZXcgV2F2V3Jp
dGVyKG91dHB1dF9uYW1lLnN0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXRfc2FtcGxlX3JhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bV9vdXRwdXRfY2hhbm5lbHMpKTsKLSAgICAgIH0KLSAgICB9
Ci0gIH0KLQotICByZXR1cm4gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi1pbnQg
bWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKSB7Ci0gIHJldHVybiB3ZWJydGM6OmRvX21haW4o
YXJnYywgYXJndik7Ci19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC93YXZfYmFzZWRfc2ltdWxhdG9y
LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3dhdl9iYXNlZF9zaW11bGF0b3IuY2MJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3dhdl9iYXNlZF9zaW11bGF0b3Iu
Y2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNjMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMp
IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3Qvd2F2X2Jh
c2VkX3NpbXVsYXRvci5oIgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY2hlY2tzLmgiCi0jaW5j
bHVkZSAid2VicnRjL3Rlc3QvdGVzdHN1cHBvcnQvdHJhY2VfdG9fc3RkZXJyLmgiCi0KLW5hbWVz
cGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIHRlc3QgewotCi1XYXZCYXNlZFNpbXVsYXRvcjo6V2F2
QmFzZWRTaW11bGF0b3IoY29uc3QgU2ltdWxhdGlvblNldHRpbmdzJiBzZXR0aW5ncykKLSAgICAg
IDogQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yKHNldHRpbmdzKSB7fQotCi1XYXZCYXNlZFNpbXVs
YXRvcjo6fldhdkJhc2VkU2ltdWxhdG9yKCkgPSBkZWZhdWx0OwotCi1zdGQ6OnZlY3RvcjxXYXZC
YXNlZFNpbXVsYXRvcjo6U2ltdWxhdGlvbkV2ZW50VHlwZT4KLVdhdkJhc2VkU2ltdWxhdG9yOjpH
ZXREZWZhdWx0RXZlbnRDaGFpbigpIGNvbnN0IHsKLSAgc3RkOjp2ZWN0b3I8V2F2QmFzZWRTaW11
bGF0b3I6OlNpbXVsYXRpb25FdmVudFR5cGU+IGNhbGxfY2hhaW4oMik7Ci0gIGNhbGxfY2hhaW5b
MF0gPSBTaW11bGF0aW9uRXZlbnRUeXBlOjprUHJvY2Vzc1N0cmVhbTsKLSAgY2FsbF9jaGFpblsx
XSA9IFNpbXVsYXRpb25FdmVudFR5cGU6OmtQcm9jZXNzUmV2ZXJzZVN0cmVhbTsKLSAgcmV0dXJu
IGNhbGxfY2hhaW47Ci19Ci0KLXZvaWQgV2F2QmFzZWRTaW11bGF0b3I6OlByZXBhcmVQcm9jZXNz
U3RyZWFtQ2FsbCgpIHsKLSAgaWYgKHNldHRpbmdzXy5maXhlZF9pbnRlcmZhY2UpIHsKLSAgICBD
b3B5VG9BdWRpb0ZyYW1lKCppbl9idWZfLCAmZndkX2ZyYW1lXyk7Ci0gIH0KLSAgYXBfLT5zZXRf
c3RyZWFtX2tleV9wcmVzc2VkKHNldHRpbmdzXy51c2VfdHMgJiYgKCpzZXR0aW5nc18udXNlX3Rz
KSk7Ci0KLSAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAg
ICAgICAgICBhcF8tPnNldF9zdHJlYW1fZGVsYXlfbXMoCi0gICAgICAgICAgICAgICAgICAgc2V0
dGluZ3NfLnN0cmVhbV9kZWxheSA/ICpzZXR0aW5nc18uc3RyZWFtX2RlbGF5IDogMCkpOwotCi0g
IGFwXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+c2V0X3N0cmVhbV9kcmlmdF9zYW1wbGVzKAotICAg
ICAgc2V0dGluZ3NfLnN0cmVhbV9kcmlmdF9zYW1wbGVzID8gKnNldHRpbmdzXy5zdHJlYW1fZHJp
ZnRfc2FtcGxlcyA6IDApOwotCi0gIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vy
cm9yLAotICAgICAgICAgICAgICAgYXBfLT5nYWluX2NvbnRyb2woKS0+c2V0X3N0cmVhbV9hbmFs
b2dfbGV2ZWwoCi0gICAgICAgICAgICAgICAgICAgbGFzdF9zcGVjaWZpZWRfbWljcm9waG9uZV9s
ZXZlbF8pKTsKLX0KLQotdm9pZCBXYXZCYXNlZFNpbXVsYXRvcjo6UHJlcGFyZVJldmVyc2VQcm9j
ZXNzU3RyZWFtQ2FsbCgpIHsKLSAgaWYgKHNldHRpbmdzXy5maXhlZF9pbnRlcmZhY2UpIHsKLSAg
ICBDb3B5VG9BdWRpb0ZyYW1lKCpyZXZlcnNlX2luX2J1Zl8sICZyZXZfZnJhbWVfKTsKLSAgfQot
fQotCi12b2lkIFdhdkJhc2VkU2ltdWxhdG9yOjpQcm9jZXNzKCkgewotICBzdGQ6OnVuaXF1ZV9w
dHI8dGVzdDo6VHJhY2VUb1N0ZGVycj4gdHJhY2VfdG9fc3RkZXJyOwotICBpZiAoc2V0dGluZ3Nf
LnVzZV92ZXJib3NlX2xvZ2dpbmcpIHsKLSAgICB0cmFjZV90b19zdGRlcnIucmVzZXQobmV3IHRl
c3Q6OlRyYWNlVG9TdGRlcnIodHJ1ZSkpOwotICB9Ci0KLSAgY2FsbF9jaGFpbl8gPSBHZXREZWZh
dWx0RXZlbnRDaGFpbigpOwotICBDcmVhdGVBdWRpb1Byb2Nlc3NvcigpOwotCi0gIEluaXRpYWxp
emUoKTsKLQotICBib29sIHNhbXBsZXNfbGVmdF90b19wcm9jZXNzID0gdHJ1ZTsKLSAgaW50IGNh
bGxfY2hhaW5faW5kZXggPSAwOwotICBpbnQgbnVtX2ZvcndhcmRfY2h1bmtzX3Byb2Nlc3NlZCA9
IDA7Ci0gIGNvbnN0IGludCBrT25lQnlrQ2h1bmtzUGVyU2Vjb25kID0KLSAgICAgIDEuZiAvIEF1
ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcjo6a0NodW5rc1BlclNlY29uZDsKLSAgd2hpbGUgKHNhbXBs
ZXNfbGVmdF90b19wcm9jZXNzKSB7Ci0gICAgc3dpdGNoIChjYWxsX2NoYWluX1tjYWxsX2NoYWlu
X2luZGV4XSkgewotICAgICAgY2FzZSBTaW11bGF0aW9uRXZlbnRUeXBlOjprUHJvY2Vzc1N0cmVh
bToKLSAgICAgICAgc2FtcGxlc19sZWZ0X3RvX3Byb2Nlc3MgPSBIYW5kbGVQcm9jZXNzU3RyZWFt
Q2FsbCgpOwotICAgICAgICArK251bV9mb3J3YXJkX2NodW5rc19wcm9jZXNzZWQ7Ci0gICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBTaW11bGF0aW9uRXZlbnRUeXBlOjprUHJvY2Vzc1JldmVyc2VT
dHJlYW06Ci0gICAgICAgIGlmIChzZXR0aW5nc18ucmV2ZXJzZV9pbnB1dF9maWxlbmFtZSkgewot
ICAgICAgICAgIHNhbXBsZXNfbGVmdF90b19wcm9jZXNzID0gSGFuZGxlUHJvY2Vzc1JldmVyc2VT
dHJlYW1DYWxsKCk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZhdWx0Ogot
ICAgICAgICBSVENfQ0hFQ0soZmFsc2UpOwotICAgIH0KLQotICAgIGNhbGxfY2hhaW5faW5kZXgg
PSAoY2FsbF9jaGFpbl9pbmRleCArIDEpICUgY2FsbF9jaGFpbl8uc2l6ZSgpOwotCi0gICAgaWYg
KHRyYWNlX3RvX3N0ZGVycikgewotICAgICAgdHJhY2VfdG9fc3RkZXJyLT5TZXRUaW1lU2Vjb25k
cyhudW1fZm9yd2FyZF9jaHVua3NfcHJvY2Vzc2VkICoKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga09uZUJ5a0NodW5rc1BlclNlY29uZCk7Ci0gICAgfQotICB9Ci0KLSAg
RGVzdHJveUF1ZGlvUHJvY2Vzc29yKCk7Ci19Ci0KLWJvb2wgV2F2QmFzZWRTaW11bGF0b3I6Okhh
bmRsZVByb2Nlc3NTdHJlYW1DYWxsKCkgewotICBib29sIHNhbXBsZXNfbGVmdF90b19wcm9jZXNz
ID0gYnVmZmVyX3JlYWRlcl8tPlJlYWQoaW5fYnVmXy5nZXQoKSk7Ci0gIGlmIChzYW1wbGVzX2xl
ZnRfdG9fcHJvY2VzcykgewotICAgIFByZXBhcmVQcm9jZXNzU3RyZWFtQ2FsbCgpOwotICAgIFBy
b2Nlc3NTdHJlYW0oc2V0dGluZ3NfLmZpeGVkX2ludGVyZmFjZSk7Ci0gICAgLy8gQ2FsbCBzdHJl
YW0gYW5hbG9nIGxldmVsIHRvIGVuc3VyZSB0aGF0IGFueSBzaWRlLWVmZmVjdHMgYXJlIHRyaWdn
ZXJlZC4KLSAgICAodm9pZClhcF8tPmdhaW5fY29udHJvbCgpLT5zdHJlYW1fYW5hbG9nX2xldmVs
KCk7Ci0gICAgbGFzdF9zcGVjaWZpZWRfbWljcm9waG9uZV9sZXZlbF8gPQotICAgICAgICBhcF8t
PmdhaW5fY29udHJvbCgpLT5zdHJlYW1fYW5hbG9nX2xldmVsKCk7Ci0gIH0KLSAgcmV0dXJuIHNh
bXBsZXNfbGVmdF90b19wcm9jZXNzOwotfQotCi1ib29sIFdhdkJhc2VkU2ltdWxhdG9yOjpIYW5k
bGVQcm9jZXNzUmV2ZXJzZVN0cmVhbUNhbGwoKSB7Ci0gIGJvb2wgc2FtcGxlc19sZWZ0X3RvX3By
b2Nlc3MgPQotICAgICAgcmV2ZXJzZV9idWZmZXJfcmVhZGVyXy0+UmVhZChyZXZlcnNlX2luX2J1
Zl8uZ2V0KCkpOwotICBpZiAoc2FtcGxlc19sZWZ0X3RvX3Byb2Nlc3MpIHsKLSAgICBQcmVwYXJl
UmV2ZXJzZVByb2Nlc3NTdHJlYW1DYWxsKCk7Ci0gICAgUHJvY2Vzc1JldmVyc2VTdHJlYW0oc2V0
dGluZ3NfLmZpeGVkX2ludGVyZmFjZSk7Ci0gIH0KLSAgcmV0dXJuIHNhbXBsZXNfbGVmdF90b19w
cm9jZXNzOwotfQotCi12b2lkIFdhdkJhc2VkU2ltdWxhdG9yOjpJbml0aWFsaXplKCkgewotICBz
dGQ6OnVuaXF1ZV9wdHI8V2F2UmVhZGVyPiBpbl9maWxlKAotICAgICAgbmV3IFdhdlJlYWRlcihz
ZXR0aW5nc18uaW5wdXRfZmlsZW5hbWUtPmNfc3RyKCkpKTsKLSAgaW50IGlucHV0X3NhbXBsZV9y
YXRlX2h6ID0gaW5fZmlsZS0+c2FtcGxlX3JhdGUoKTsKLSAgaW50IGlucHV0X251bV9jaGFubmVs
cyA9IGluX2ZpbGUtPm51bV9jaGFubmVscygpOwotICBidWZmZXJfcmVhZGVyXy5yZXNldChuZXcg
Q2hhbm5lbEJ1ZmZlcldhdlJlYWRlcihzdGQ6Om1vdmUoaW5fZmlsZSkpKTsKLQotICBpbnQgb3V0
cHV0X3NhbXBsZV9yYXRlX2h6ID0gc2V0dGluZ3NfLm91dHB1dF9zYW1wbGVfcmF0ZV9oegotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKnNldHRpbmdzXy5vdXRwdXRfc2FtcGxl
X3JhdGVfaHoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0X3NhbXBs
ZV9yYXRlX2h6OwotICBpbnQgb3V0cHV0X251bV9jaGFubmVscyA9IHNldHRpbmdzXy5vdXRwdXRf
bnVtX2NoYW5uZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKnNldHRpbmdz
Xy5vdXRwdXRfbnVtX2NoYW5uZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog
aW5wdXRfbnVtX2NoYW5uZWxzOwotCi0gIGludCByZXZlcnNlX3NhbXBsZV9yYXRlX2h6ID0gNDgw
MDA7Ci0gIGludCByZXZlcnNlX251bV9jaGFubmVscyA9IDE7Ci0gIGludCByZXZlcnNlX291dHB1
dF9zYW1wbGVfcmF0ZV9oeiA9IDQ4MDAwOwotICBpbnQgcmV2ZXJzZV9vdXRwdXRfbnVtX2NoYW5u
ZWxzID0gMTsKLSAgaWYgKHNldHRpbmdzXy5yZXZlcnNlX2lucHV0X2ZpbGVuYW1lKSB7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFdhdlJlYWRlcj4gcmV2ZXJzZV9pbl9maWxlKAotICAgICAgICBuZXcg
V2F2UmVhZGVyKHNldHRpbmdzXy5yZXZlcnNlX2lucHV0X2ZpbGVuYW1lLT5jX3N0cigpKSk7Ci0g
ICAgcmV2ZXJzZV9zYW1wbGVfcmF0ZV9oeiA9IHJldmVyc2VfaW5fZmlsZS0+c2FtcGxlX3JhdGUo
KTsKLSAgICByZXZlcnNlX251bV9jaGFubmVscyA9IHJldmVyc2VfaW5fZmlsZS0+bnVtX2NoYW5u
ZWxzKCk7Ci0gICAgcmV2ZXJzZV9idWZmZXJfcmVhZGVyXy5yZXNldCgKLSAgICAgICAgbmV3IENo
YW5uZWxCdWZmZXJXYXZSZWFkZXIoc3RkOjptb3ZlKHJldmVyc2VfaW5fZmlsZSkpKTsKLQotICAg
IHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6ID0KLSAgICAgICAgc2V0dGluZ3NfLnJldmVy
c2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6Ci0gICAgICAgICAgICA/ICpzZXR0aW5nc18ucmV2ZXJz
ZV9vdXRwdXRfc2FtcGxlX3JhdGVfaHoKLSAgICAgICAgICAgIDogcmV2ZXJzZV9zYW1wbGVfcmF0
ZV9oejsKLSAgICByZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMgPSBzZXR0aW5nc18ucmV2ZXJz
ZV9vdXRwdXRfbnVtX2NoYW5uZWxzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gKnNldHRpbmdzXy5yZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXZlcnNlX251bV9jaGFubmVsczsKLSAgfQot
Ci0gIFNldHVwQnVmZmVyc0NvbmZpZ3NPdXRwdXRzKAotICAgICAgaW5wdXRfc2FtcGxlX3JhdGVf
aHosIG91dHB1dF9zYW1wbGVfcmF0ZV9oeiwgcmV2ZXJzZV9zYW1wbGVfcmF0ZV9oeiwKLSAgICAg
IHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6LCBpbnB1dF9udW1fY2hhbm5lbHMsIG91dHB1
dF9udW1fY2hhbm5lbHMsCi0gICAgICByZXZlcnNlX251bV9jaGFubmVscywgcmV2ZXJzZV9vdXRw
dXRfbnVtX2NoYW5uZWxzKTsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVz
cGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3dhdl9iYXNlZF9zaW11bGF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC93YXZfYmFzZWRfc2ltdWxhdG9yLmgJKHJldmlz
aW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3dhdl9iYXNlZF9zaW11bGF0b3IuaAkobm9u
ZXhpc3RlbnQpCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2IFRo
ZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
Ci0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBv
ZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVy
dHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBB
bGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUg
QVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZu
ZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9XQVZfQkFTRURfU0lNVUxB
VE9SX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9XQVZf
QkFTRURfU0lNVUxBVE9SX0hfCi0KLSNpbmNsdWRlIDx2ZWN0b3I+Ci0KLSNpbmNsdWRlICJ3ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fcHJvY2Vzc2luZ19zaW11bGF0
b3IuaCIKLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NvbnN0cnVjdG9ybWFnaWMuaCIKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci0KLS8vIFVzZWQgdG8gcGVyZm9ybSBh
biBhdWRpbyBwcm9jZXNzaW5nIHNpbXVsYXRpb24gZnJvbSB3YXYgZmlsZXMuCi1jbGFzcyBXYXZC
YXNlZFNpbXVsYXRvciBmaW5hbCA6IHB1YmxpYyBBdWRpb1Byb2Nlc3NpbmdTaW11bGF0b3Igewot
IHB1YmxpYzoKLSAgZXhwbGljaXQgV2F2QmFzZWRTaW11bGF0b3IoY29uc3QgU2ltdWxhdGlvblNl
dHRpbmdzJiBzZXR0aW5ncyk7Ci0gIH5XYXZCYXNlZFNpbXVsYXRvcigpIG92ZXJyaWRlOwotCi0g
IC8vIFByb2Nlc3NlcyB0aGUgV0FWIGlucHV0LgotICB2b2lkIFByb2Nlc3MoKSBvdmVycmlkZTsK
LQotIHByaXZhdGU6Ci0gIGVudW0gU2ltdWxhdGlvbkV2ZW50VHlwZSB7Ci0gICAga1Byb2Nlc3NT
dHJlYW0sCi0gICAga1Byb2Nlc3NSZXZlcnNlU3RyZWFtLAotICB9OwotCi0gIHZvaWQgSW5pdGlh
bGl6ZSgpOwotICBib29sIEhhbmRsZVByb2Nlc3NTdHJlYW1DYWxsKCk7Ci0gIGJvb2wgSGFuZGxl
UHJvY2Vzc1JldmVyc2VTdHJlYW1DYWxsKCk7Ci0gIHZvaWQgUHJlcGFyZVByb2Nlc3NTdHJlYW1D
YWxsKCk7Ci0gIHZvaWQgUHJlcGFyZVJldmVyc2VQcm9jZXNzU3RyZWFtQ2FsbCgpOwotICBzdGQ6
OnZlY3RvcjxTaW11bGF0aW9uRXZlbnRUeXBlPiBHZXREZWZhdWx0RXZlbnRDaGFpbigpIGNvbnN0
OwotCi0gIHN0ZDo6dmVjdG9yPFNpbXVsYXRpb25FdmVudFR5cGU+IGNhbGxfY2hhaW5fOwotICBp
bnQgbGFzdF9zcGVjaWZpZWRfbWljcm9waG9uZV9sZXZlbF8gPSAxMDA7Ci0KLSAgUlRDX0RJU0FM
TE9XX0lNUExJQ0lUX0NPTlNUUlVDVE9SUyhXYXZCYXNlZFNpbXVsYXRvcik7Ci19OwotCi19ICAv
LyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5kaWYgIC8vIFdF
QlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9XQVZfQkFTRURfU0lNVUxBVE9SX0hf
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9zaW11bGF0b3IuY2MKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxl
cy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYWVjX2R1bXBfYmFzZWRfc2ltdWxhdG9yLmNjCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9zaW11bGF0b3Iu
Y2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw1MzYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMp
IDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0g
KgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxl
IGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVh
bCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFU
RU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5k
IGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICov
Ci0KLSNpbmNsdWRlIDxpb3N0cmVhbT4KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9zaW11bGF0b3IuaCIKLQotI2luY2x1ZGUg
IndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3By
b2Nlc3NpbmcvdGVzdC9wcm90b2J1Zl91dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy90ZXN0L3Rl
c3RzdXBwb3J0L3RyYWNlX3RvX3N0ZGVyci5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSB0ZXN0IHsKLW5hbWVzcGFjZSB7Ci0KLS8vIFZlcmlmeSBvdXRwdXQgYml0ZXhhY3RuZXNz
IGZvciB0aGUgZml4ZWQgaW50ZXJmYWNlLgotLy8gVE9ETyhwZWFoKTogQ2hlY2sgd2hldGhlciBp
dCB3b3VsZCBtYWtlIHNlbnNlIHRvIGFkZCBhIHRocmVzaG9sZAotLy8gdG8gdXNlIGZvciBjaGVj
a2luZyB0aGUgYml0ZXhhY3RuZXNzIGluIGEgc29mdCBtYW5uZXIuCi1ib29sIFZlcmlmeUZpeGVk
Qml0RXhhY3RuZXNzKGNvbnN0IHdlYnJ0Yzo6YXVkaW9wcm9jOjpTdHJlYW0mIG1zZywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXVkaW9GcmFtZSYgZnJhbWUpIHsKLSAgaWYg
KChzaXplb2YoaW50MTZfdCkgKiBmcmFtZS5zYW1wbGVzX3Blcl9jaGFubmVsXyAqIGZyYW1lLm51
bV9jaGFubmVsc18pICE9Ci0gICAgICBtc2cub3V0cHV0X2RhdGEoKS5zaXplKCkpIHsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH0gZWxzZSB7Ci0gICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCBmcmFt
ZS5udW1fY2hhbm5lbHNfICogZnJhbWUuc2FtcGxlc19wZXJfY2hhbm5lbF87Ci0gICAgICAgICAr
K2spIHsKLSAgICAgIGlmIChtc2cub3V0cHV0X2RhdGEoKS5kYXRhKClba10gIT0gZnJhbWUuZGF0
YV9ba10pIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfQotICAgIH0KLSAgfQotICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotLy8gVmVyaWZ5IG91dHB1dCBiaXRleGFjdG5lc3MgZm9yIHRoZSBm
bG9hdCBpbnRlcmZhY2UuCi1ib29sIFZlcmlmeUZsb2F0Qml0RXhhY3RuZXNzKGNvbnN0IHdlYnJ0
Yzo6YXVkaW9wcm9jOjpTdHJlYW0mIG1zZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyZWFtQ29uZmlnJiBvdXRfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBDaGFubmVsQnVmZmVyPGZsb2F0PiYgb3V0X2J1ZikgewotICBpZiAoc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihtc2cub3V0cHV0X2NoYW5uZWxfc2l6ZSgpKSAhPQotICAgICAgICAgIG91
dF9jb25maWcubnVtX2NoYW5uZWxzKCkgfHwKLSAgICAgIG1zZy5vdXRwdXRfY2hhbm5lbCgwKS5z
aXplKCkgIT0gb3V0X2NvbmZpZy5udW1fZnJhbWVzKCkpIHsKLSAgICByZXR1cm4gZmFsc2U7Ci0g
IH0gZWxzZSB7Ci0gICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG1zZy5vdXRwdXRfY2hhbm5lbF9z
aXplKCk7ICsrY2gpIHsKLSAgICAgIGZvciAoc2l6ZV90IHNhbXBsZSA9IDA7IHNhbXBsZSA8IG91
dF9jb25maWcubnVtX2ZyYW1lcygpOyArK3NhbXBsZSkgewotICAgICAgICBpZiAobXNnLm91dHB1
dF9jaGFubmVsKGNoKS5kYXRhKClbc2FtcGxlXSAhPQotICAgICAgICAgICAgb3V0X2J1Zi5jaGFu
bmVscygpW2NoXVtzYW1wbGVdKSB7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIHJldHVybiB0cnVlOwotfQotCi19ICAvLyBuYW1lc3Bh
Y2UKLQotdm9pZCBBZWNEdW1wQmFzZWRTaW11bGF0b3I6OlByZXBhcmVQcm9jZXNzU3RyZWFtQ2Fs
bCgKLSAgICBjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6U3RyZWFtJiBtc2csCi0gICAgYm9vbCog
c2V0X3N0cmVhbV9hbmFsb2dfbGV2ZWxfY2FsbGVkKSB7Ci0gIGlmIChtc2cuaGFzX2lucHV0X2Rh
dGEoKSkgewotICAgIC8vIEZpeGVkIGludGVyZmFjZSBwcm9jZXNzaW5nLgotICAgIC8vIFZlcmlm
eSBpbnRlcmZhY2UgaW52YXJpYW5jZS4KLSAgICBSVENfQ0hFQ0soaW50ZXJmYWNlX3VzZWRfID09
IEludGVyZmFjZVR5cGU6OmtGaXhlZEludGVyZmFjZSB8fAotICAgICAgICAgICAgICBpbnRlcmZh
Y2VfdXNlZF8gPT0gSW50ZXJmYWNlVHlwZTo6a05vdFNwZWNpZmllZCk7Ci0gICAgaW50ZXJmYWNl
X3VzZWRfID0gSW50ZXJmYWNlVHlwZTo6a0ZpeGVkSW50ZXJmYWNlOwotCi0gICAgLy8gUG9wdWxh
dGUgaW5wdXQgYnVmZmVyLgotICAgIFJUQ19DSEVDS19FUShzaXplb2YoZndkX2ZyYW1lXy5kYXRh
X1swXSkgKiBmd2RfZnJhbWVfLnNhbXBsZXNfcGVyX2NoYW5uZWxfICoKLSAgICAgICAgICAgICAg
ICAgICAgIGZ3ZF9mcmFtZV8ubnVtX2NoYW5uZWxzXywKLSAgICAgICAgICAgICAgICAgbXNnLmlu
cHV0X2RhdGEoKS5zaXplKCkpOwotICAgIG1lbWNweShmd2RfZnJhbWVfLmRhdGFfLCBtc2cuaW5w
dXRfZGF0YSgpLmRhdGEoKSwgbXNnLmlucHV0X2RhdGEoKS5zaXplKCkpOwotICB9IGVsc2Ugewot
ICAgIC8vIEZsb2F0IGludGVyZmFjZSBwcm9jZXNzaW5nLgotICAgIC8vIFZlcmlmeSBpbnRlcmZh
Y2UgaW52YXJpYW5jZS4KLSAgICBSVENfQ0hFQ0soaW50ZXJmYWNlX3VzZWRfID09IEludGVyZmFj
ZVR5cGU6OmtGbG9hdEludGVyZmFjZSB8fAotICAgICAgICAgICAgICBpbnRlcmZhY2VfdXNlZF8g
PT0gSW50ZXJmYWNlVHlwZTo6a05vdFNwZWNpZmllZCk7Ci0gICAgaW50ZXJmYWNlX3VzZWRfID0g
SW50ZXJmYWNlVHlwZTo6a0Zsb2F0SW50ZXJmYWNlOwotCi0gICAgUlRDX0NIRUNLX0VRKGluX2J1
Zl8tPm51bV9jaGFubmVscygpLAotICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+
KG1zZy5pbnB1dF9jaGFubmVsX3NpemUoKSkpOwotCi0gICAgLy8gUG9wdWxhdGUgaW5wdXQgYnVm
ZmVyLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXNnLmlucHV0X2NoYW5uZWxfc2l6ZSgpOyAr
K2kpIHsKLSAgICAgIFJUQ19DSEVDS19FUShpbl9idWZfLT5udW1fZnJhbWVzKCkgKiBzaXplb2Yo
KmluX2J1Zl8tPmNoYW5uZWxzKClbaV0pLAotICAgICAgICAgICAgICAgICAgIG1zZy5pbnB1dF9j
aGFubmVsKGkpLnNpemUoKSk7Ci0gICAgICBzdGQ6Om1lbWNweShpbl9idWZfLT5jaGFubmVscygp
W2ldLCBtc2cuaW5wdXRfY2hhbm5lbChpKS5kYXRhKCksCi0gICAgICAgICAgICAgICAgICBtc2cu
aW5wdXRfY2hhbm5lbChpKS5zaXplKCkpOwotICAgIH0KLSAgfQotCi0gIGlmICghc2V0dGluZ3Nf
LnN0cmVhbV9kZWxheSkgewotICAgIGlmIChtc2cuaGFzX2RlbGF5KCkpIHsKLSAgICAgIFJUQ19D
SEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFw
Xy0+c2V0X3N0cmVhbV9kZWxheV9tcyhtc2cuZGVsYXkoKSkpOwotICAgIH0KLSAgfSBlbHNlIHsK
LSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAg
ICAgICAgYXBfLT5zZXRfc3RyZWFtX2RlbGF5X21zKCpzZXR0aW5nc18uc3RyZWFtX2RlbGF5KSk7
Ci0gIH0KLQotICBpZiAoIXNldHRpbmdzXy5zdHJlYW1fZHJpZnRfc2FtcGxlcykgewotICAgIGlm
IChtc2cuaGFzX2RyaWZ0KCkpIHsKLSAgICAgIGFwXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+c2V0
X3N0cmVhbV9kcmlmdF9zYW1wbGVzKG1zZy5kcmlmdCgpKTsKLSAgICB9Ci0gIH0gZWxzZSB7Ci0g
ICAgYXBfLT5lY2hvX2NhbmNlbGxhdGlvbigpLT5zZXRfc3RyZWFtX2RyaWZ0X3NhbXBsZXMoCi0g
ICAgICAgICpzZXR0aW5nc18uc3RyZWFtX2RyaWZ0X3NhbXBsZXMpOwotICB9Ci0KLSAgaWYgKCFz
ZXR0aW5nc18udXNlX3RzKSB7Ci0gICAgaWYgKG1zZy5oYXNfa2V5cHJlc3MoKSkgewotICAgICAg
YXBfLT5zZXRfc3RyZWFtX2tleV9wcmVzc2VkKG1zZy5rZXlwcmVzcygpKTsKLSAgICB9Ci0gIH0g
ZWxzZSB7Ci0gICAgYXBfLT5zZXRfc3RyZWFtX2tleV9wcmVzc2VkKCpzZXR0aW5nc18udXNlX3Rz
KTsKLSAgfQotCi0gIC8vIFRPRE8ocGVhaCk6IEFkZCBzdXBwb3J0IGZvciBjb250cm9sbGluZyB0
aGUgYW5hbG9nIGxldmVsIHZpYSB0aGUKLSAgLy8gY29tbWFuZC1saW5lLgotICBpZiAobXNnLmhh
c19sZXZlbCgpKSB7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3Is
Ci0gICAgICAgICAgICAgICAgIGFwXy0+Z2Fpbl9jb250cm9sKCktPnNldF9zdHJlYW1fYW5hbG9n
X2xldmVsKG1zZy5sZXZlbCgpKSk7Ci0gICAgKnNldF9zdHJlYW1fYW5hbG9nX2xldmVsX2NhbGxl
ZCA9IHRydWU7Ci0gIH0gZWxzZSB7Ci0gICAgKnNldF9zdHJlYW1fYW5hbG9nX2xldmVsX2NhbGxl
ZCA9IGZhbHNlOwotICB9Ci19Ci0KLXZvaWQgQWVjRHVtcEJhc2VkU2ltdWxhdG9yOjpWZXJpZnlQ
cm9jZXNzU3RyZWFtQml0RXhhY3RuZXNzKAotICAgIGNvbnN0IHdlYnJ0Yzo6YXVkaW9wcm9jOjpT
dHJlYW0mIG1zZykgewotICBpZiAoYml0ZXhhY3Rfb3V0cHV0XykgewotICAgIGlmIChpbnRlcmZh
Y2VfdXNlZF8gPT0gSW50ZXJmYWNlVHlwZTo6a0ZpeGVkSW50ZXJmYWNlKSB7Ci0gICAgICBiaXRl
eGFjdF9vdXRwdXRfID0gVmVyaWZ5Rml4ZWRCaXRFeGFjdG5lc3MobXNnLCBmd2RfZnJhbWVfKTsK
LSAgICB9IGVsc2UgewotICAgICAgYml0ZXhhY3Rfb3V0cHV0XyA9IFZlcmlmeUZsb2F0Qml0RXhh
Y3RuZXNzKG1zZywgb3V0X2NvbmZpZ18sICpvdXRfYnVmXyk7Ci0gICAgfQotICB9Ci19Ci0KLXZv
aWQgQWVjRHVtcEJhc2VkU2ltdWxhdG9yOjpQcmVwYXJlUmV2ZXJzZVByb2Nlc3NTdHJlYW1DYWxs
KAotICAgIGNvbnN0IHdlYnJ0Yzo6YXVkaW9wcm9jOjpSZXZlcnNlU3RyZWFtJiBtc2cpIHsKLSAg
aWYgKG1zZy5oYXNfZGF0YSgpKSB7Ci0gICAgLy8gRml4ZWQgaW50ZXJmYWNlIHByb2Nlc3Npbmcu
Ci0gICAgLy8gVmVyaWZ5IGludGVyZmFjZSBpbnZhcmlhbmNlLgotICAgIFJUQ19DSEVDSyhpbnRl
cmZhY2VfdXNlZF8gPT0gSW50ZXJmYWNlVHlwZTo6a0ZpeGVkSW50ZXJmYWNlIHx8Ci0gICAgICAg
ICAgICAgIGludGVyZmFjZV91c2VkXyA9PSBJbnRlcmZhY2VUeXBlOjprTm90U3BlY2lmaWVkKTsK
LSAgICBpbnRlcmZhY2VfdXNlZF8gPSBJbnRlcmZhY2VUeXBlOjprRml4ZWRJbnRlcmZhY2U7Ci0K
LSAgICAvLyBQb3B1bGF0ZSBpbnB1dCBidWZmZXIuCi0gICAgUlRDX0NIRUNLX0VRKHNpemVvZihp
bnQxNl90KSAqIHJldl9mcmFtZV8uc2FtcGxlc19wZXJfY2hhbm5lbF8gKgotICAgICAgICAgICAg
ICAgICAgICAgcmV2X2ZyYW1lXy5udW1fY2hhbm5lbHNfLAotICAgICAgICAgICAgICAgICBtc2cu
ZGF0YSgpLnNpemUoKSk7Ci0gICAgbWVtY3B5KHJldl9mcmFtZV8uZGF0YV8sIG1zZy5kYXRhKCku
ZGF0YSgpLCBtc2cuZGF0YSgpLnNpemUoKSk7Ci0gIH0gZWxzZSB7Ci0gICAgLy8gRmxvYXQgaW50
ZXJmYWNlIHByb2Nlc3NpbmcuCi0gICAgLy8gVmVyaWZ5IGludGVyZmFjZSBpbnZhcmlhbmNlLgot
ICAgIFJUQ19DSEVDSyhpbnRlcmZhY2VfdXNlZF8gPT0gSW50ZXJmYWNlVHlwZTo6a0Zsb2F0SW50
ZXJmYWNlIHx8Ci0gICAgICAgICAgICAgIGludGVyZmFjZV91c2VkXyA9PSBJbnRlcmZhY2VUeXBl
OjprTm90U3BlY2lmaWVkKTsKLSAgICBpbnRlcmZhY2VfdXNlZF8gPSBJbnRlcmZhY2VUeXBlOjpr
RmxvYXRJbnRlcmZhY2U7Ci0KLSAgICBSVENfQ0hFQ0tfRVEocmV2ZXJzZV9pbl9idWZfLT5udW1f
Y2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8c2l6ZV90Pihtc2cuY2hh
bm5lbF9zaXplKCkpKTsKLQotICAgIC8vIFBvcHVsYXRlIGlucHV0IGJ1ZmZlci4KLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG1zZy5jaGFubmVsX3NpemUoKTsgKytpKSB7Ci0gICAgICBSVENfQ0hF
Q0tfRVEocmV2ZXJzZV9pbl9idWZfLT5udW1fZnJhbWVzKCkgKgotICAgICAgICAgICAgICAgICAg
ICAgICBzaXplb2YoKnJldmVyc2VfaW5fYnVmXy0+Y2hhbm5lbHMoKVtpXSksCi0gICAgICAgICAg
ICAgICAgICAgbXNnLmNoYW5uZWwoaSkuc2l6ZSgpKTsKLSAgICAgIHN0ZDo6bWVtY3B5KHJldmVy
c2VfaW5fYnVmXy0+Y2hhbm5lbHMoKVtpXSwgbXNnLmNoYW5uZWwoaSkuZGF0YSgpLAotICAgICAg
ICAgICAgICAgICAgbXNnLmNoYW5uZWwoaSkuc2l6ZSgpKTsKLSAgICB9Ci0gIH0KLX0KLQotdm9p
ZCBBZWNEdW1wQmFzZWRTaW11bGF0b3I6OlByb2Nlc3MoKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx0
ZXN0OjpUcmFjZVRvU3RkZXJyPiB0cmFjZV90b19zdGRlcnI7Ci0gIGlmIChzZXR0aW5nc18udXNl
X3ZlcmJvc2VfbG9nZ2luZykgewotICAgIHRyYWNlX3RvX3N0ZGVyci5yZXNldChuZXcgdGVzdDo6
VHJhY2VUb1N0ZGVycih0cnVlKSk7Ci0gIH0KLQotICBDcmVhdGVBdWRpb1Byb2Nlc3NvcigpOwot
ICBkdW1wX2lucHV0X2ZpbGVfID0gT3BlbkZpbGUoc2V0dGluZ3NfLmFlY19kdW1wX2lucHV0X2Zp
bGVuYW1lLT5jX3N0cigpLCAicmIiKTsKLQotICB3ZWJydGM6OmF1ZGlvcHJvYzo6RXZlbnQgZXZl
bnRfbXNnOwotICBpbnQgbnVtX2ZvcndhcmRfY2h1bmtzX3Byb2Nlc3NlZCA9IDA7Ci0gIGNvbnN0
IGZsb2F0IGtPbmVCeWtDaHVua3NQZXJTZWNvbmQgPQotICAgICAgMS5mIC8gQXVkaW9Qcm9jZXNz
aW5nU2ltdWxhdG9yOjprQ2h1bmtzUGVyU2Vjb25kOwotICB3aGlsZSAoUmVhZE1lc3NhZ2VGcm9t
RmlsZShkdW1wX2lucHV0X2ZpbGVfLCAmZXZlbnRfbXNnKSkgewotICAgIHN3aXRjaCAoZXZlbnRf
bXNnLnR5cGUoKSkgewotICAgICAgY2FzZSB3ZWJydGM6OmF1ZGlvcHJvYzo6RXZlbnQ6OklOSVQ6
Ci0gICAgICAgIFJUQ19DSEVDSyhldmVudF9tc2cuaGFzX2luaXQoKSk7Ci0gICAgICAgIEhhbmRs
ZU1lc3NhZ2UoZXZlbnRfbXNnLmluaXQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSB3
ZWJydGM6OmF1ZGlvcHJvYzo6RXZlbnQ6OlNUUkVBTToKLSAgICAgICAgUlRDX0NIRUNLKGV2ZW50
X21zZy5oYXNfc3RyZWFtKCkpOwotICAgICAgICBIYW5kbGVNZXNzYWdlKGV2ZW50X21zZy5zdHJl
YW0oKSk7Ci0gICAgICAgICsrbnVtX2ZvcndhcmRfY2h1bmtzX3Byb2Nlc3NlZDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgICBjYXNlIHdlYnJ0Yzo6YXVkaW9wcm9jOjpFdmVudDo6UkVWRVJTRV9TVFJF
QU06Ci0gICAgICAgIFJUQ19DSEVDSyhldmVudF9tc2cuaGFzX3JldmVyc2Vfc3RyZWFtKCkpOwot
ICAgICAgICBIYW5kbGVNZXNzYWdlKGV2ZW50X21zZy5yZXZlcnNlX3N0cmVhbSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgICBjYXNlIHdlYnJ0Yzo6YXVkaW9wcm9jOjpFdmVudDo6Q09ORklHOgot
ICAgICAgICBSVENfQ0hFQ0soZXZlbnRfbXNnLmhhc19jb25maWcoKSk7Ci0gICAgICAgIEhhbmRs
ZU1lc3NhZ2UoZXZlbnRfbXNnLmNvbmZpZygpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBkZWZh
dWx0OgotICAgICAgICBSVENfQ0hFQ0soZmFsc2UpOwotICAgIH0KLSAgICBpZiAodHJhY2VfdG9f
c3RkZXJyKSB7Ci0gICAgICB0cmFjZV90b19zdGRlcnItPlNldFRpbWVTZWNvbmRzKG51bV9mb3J3
YXJkX2NodW5rc19wcm9jZXNzZWQgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrT25lQnlrQ2h1bmtzUGVyU2Vjb25kKTsKLSAgICB9Ci0gIH0KLQotICBmY2xvc2UoZHVt
cF9pbnB1dF9maWxlXyk7Ci0KLSAgRGVzdHJveUF1ZGlvUHJvY2Vzc29yKCk7Ci19Ci0KLXZvaWQg
QWVjRHVtcEJhc2VkU2ltdWxhdG9yOjpIYW5kbGVNZXNzYWdlKAotICAgIGNvbnN0IHdlYnJ0Yzo6
YXVkaW9wcm9jOjpDb25maWcmIG1zZykgewotICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xv
Z2dpbmcpIHsKLSAgICBzdGQ6OmNvdXQgPDwgIkNvbmZpZyBhdCBmcmFtZToiIDw8IHN0ZDo6ZW5k
bDsKLSAgICBzdGQ6OmNvdXQgPDwgIiBGb3J3YXJkOiAiIDw8IGdldF9udW1fcHJvY2Vzc19zdHJl
YW1fY2FsbHMoKSA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgUmV2ZXJzZTogIiA8
PCBnZXRfbnVtX3JldmVyc2VfcHJvY2Vzc19zdHJlYW1fY2FsbHMoKQotICAgICAgICAgICAgICA8
PCBzdGQ6OmVuZGw7Ci0gIH0KLQotICBpZiAoIXNldHRpbmdzXy5kaXNjYXJkX2FsbF9zZXR0aW5n
c19pbl9hZWNkdW1wKSB7Ci0gICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7
Ci0gICAgICBzdGQ6OmNvdXQgPDwgIlNldHRpbmcgdXNlZCBpbiBjb25maWc6IiA8PCBzdGQ6OmVu
ZGw7Ci0gICAgfQotICAgIENvbmZpZyBjb25maWc7Ci0gICAgQXVkaW9Qcm9jZXNzaW5nOjpDb25m
aWcgYXBtX2NvbmZpZzsKLQotICAgIGlmIChtc2cuaGFzX2FlY19lbmFibGVkKCkgfHwgc2V0dGlu
Z3NfLnVzZV9hZWMpIHsKLSAgICAgIGJvb2wgZW5hYmxlID0gc2V0dGluZ3NfLnVzZV9hZWMgPyAq
c2V0dGluZ3NfLnVzZV9hZWMgOiBtc2cuYWVjX2VuYWJsZWQoKTsKLSAgICAgIFJUQ19DSEVDS19F
UShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+ZWNo
b19jYW5jZWxsYXRpb24oKS0+RW5hYmxlKGVuYWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51
c2VfdmVyYm9zZV9sb2dnaW5nKSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGFlY19lbmFibGVk
OiAiIDw8IChlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiKQotICAgICAgICAgICAgICAgICAgPDwg
c3RkOjplbmRsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChtc2cuaGFzX2FlY19kZWxheV9h
Z25vc3RpY19lbmFibGVkKCkgfHwgc2V0dGluZ3NfLnVzZV9kZWxheV9hZ25vc3RpYykgewotICAg
ICAgYm9vbCBlbmFibGUgPSBzZXR0aW5nc18udXNlX2RlbGF5X2Fnbm9zdGljCi0gICAgICAgICAg
ICAgICAgICAgICAgICA/ICpzZXR0aW5nc18udXNlX2RlbGF5X2Fnbm9zdGljCi0gICAgICAgICAg
ICAgICAgICAgICAgICA6IG1zZy5hZWNfZGVsYXlfYWdub3N0aWNfZW5hYmxlZCgpOwotICAgICAg
Y29uZmlnLlNldDxEZWxheUFnbm9zdGljPihuZXcgRGVsYXlBZ25vc3RpYyhlbmFibGUpKTsKLSAg
ICAgIGlmIChzZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNv
dXQgPDwgIiBhZWNfZGVsYXlfYWdub3N0aWNfZW5hYmxlZDogIgotICAgICAgICAgICAgICAgICAg
PDwgKGVuYWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAobXNnLmhhc19hZWNfZHJpZnRfY29tcGVuc2F0aW9uX2VuYWJsZWQoKSB8
fAotICAgICAgICBzZXR0aW5nc18udXNlX2RyaWZ0X2NvbXBlbnNhdGlvbikgewotICAgICAgYm9v
bCBlbmFibGUgPSBzZXR0aW5nc18udXNlX2RyaWZ0X2NvbXBlbnNhdGlvbgotICAgICAgICAgICAg
ICAgICAgICAgICAgPyAqc2V0dGluZ3NfLnVzZV9kcmlmdF9jb21wZW5zYXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgICAgIDogbXNnLmFlY19kcmlmdF9jb21wZW5zYXRpb25fZW5hYmxlZCgpOwot
ICAgICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAg
ICAgICAgICAgYXBfLT5lY2hvX2NhbmNlbGxhdGlvbigpLT5lbmFibGVfZHJpZnRfY29tcGVuc2F0
aW9uKGVuYWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7
Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGFlY19kcmlmdF9jb21wZW5zYXRpb25fZW5hYmxlZDog
IgotICAgICAgICAgICAgICAgICAgPDwgKGVuYWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpIDw8IHN0
ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobXNnLmhhc19hZWNfZXh0ZW5kZWRf
ZmlsdGVyX2VuYWJsZWQoKSB8fAotICAgICAgICBzZXR0aW5nc18udXNlX2V4dGVuZGVkX2ZpbHRl
cikgewotICAgICAgYm9vbCBlbmFibGUgPSBzZXR0aW5nc18udXNlX2V4dGVuZGVkX2ZpbHRlcgot
ICAgICAgICAgICAgICAgICAgICAgICAgPyAqc2V0dGluZ3NfLnVzZV9leHRlbmRlZF9maWx0ZXIK
LSAgICAgICAgICAgICAgICAgICAgICAgIDogbXNnLmFlY19leHRlbmRlZF9maWx0ZXJfZW5hYmxl
ZCgpOwotICAgICAgY29uZmlnLlNldDxFeHRlbmRlZEZpbHRlcj4obmV3IEV4dGVuZGVkRmlsdGVy
KGVuYWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7Ci0g
ICAgICAgIHN0ZDo6Y291dCA8PCAiIGFlY19leHRlbmRlZF9maWx0ZXJfZW5hYmxlZDogIgotICAg
ICAgICAgICAgICAgICAgPDwgKGVuYWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpIDw8IHN0ZDo6ZW5k
bDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobXNnLmhhc19hZWNfc3VwcHJlc3Npb25fbGV2
ZWwoKSB8fCBzZXR0aW5nc18uYWVjX3N1cHByZXNzaW9uX2xldmVsKSB7Ci0gICAgICBpbnQgbGV2
ZWwgPSBzZXR0aW5nc18uYWVjX3N1cHByZXNzaW9uX2xldmVsCi0gICAgICAgICAgICAgICAgICAg
ICAgPyAqc2V0dGluZ3NfLmFlY19zdXBwcmVzc2lvbl9sZXZlbAotICAgICAgICAgICAgICAgICAg
ICAgIDogbXNnLmFlY19zdXBwcmVzc2lvbl9sZXZlbCgpOwotICAgICAgUlRDX0NIRUNLX0VRKAot
ICAgICAgICAgIEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgYXBfLT5lY2hv
X2NhbmNlbGxhdGlvbigpLT5zZXRfc3VwcHJlc3Npb25fbGV2ZWwoCi0gICAgICAgICAgICAgIHN0
YXRpY19jYXN0PHdlYnJ0Yzo6RWNob0NhbmNlbGxhdGlvbjo6U3VwcHJlc3Npb25MZXZlbD4obGV2
ZWwpKSk7Ci0gICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dpbmcpIHsKLSAgICAg
ICAgc3RkOjpjb3V0IDw8ICIgYWVjX3N1cHByZXNzaW9uX2xldmVsOiAiIDw8IGxldmVsIDw8IHN0
ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobXNnLmhhc19hZWNtX2VuYWJsZWQo
KSB8fCBzZXR0aW5nc18udXNlX2FlY20pIHsKLSAgICAgIGJvb2wgZW5hYmxlID0KLSAgICAgICAg
ICBzZXR0aW5nc18udXNlX2FlY20gPyAqc2V0dGluZ3NfLnVzZV9hZWNtIDogbXNnLmFlY21fZW5h
YmxlZCgpOwotICAgICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0g
ICAgICAgICAgICAgICAgICAgYXBfLT5lY2hvX2NvbnRyb2xfbW9iaWxlKCktPkVuYWJsZShlbmFi
bGUpKTsKLSAgICAgIGlmIChzZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAg
ICBzdGQ6OmNvdXQgPDwgIiBhZWNtX2VuYWJsZWQ6ICIgPDwgKGVuYWJsZSA/ICJ0cnVlIiA6ICJm
YWxzZSIpCi0gICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1zZy5oYXNfYWVjbV9jb21mb3J0X25vaXNlX2VuYWJsZWQoKSB8fAotICAgICAg
ICBzZXR0aW5nc18udXNlX2FlY21fY29tZm9ydF9ub2lzZSkgewotICAgICAgYm9vbCBlbmFibGUg
PSBzZXR0aW5nc18udXNlX2FlY21fY29tZm9ydF9ub2lzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgPyAqc2V0dGluZ3NfLnVzZV9hZWNtX2NvbWZvcnRfbm9pc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIDogbXNnLmFlY21fY29tZm9ydF9ub2lzZV9lbmFibGVkKCk7Ci0gICAgICBSVENfQ0hF
Q0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgICAgICBhcF8t
PmVjaG9fY29udHJvbF9tb2JpbGUoKS0+ZW5hYmxlX2NvbWZvcnRfbm9pc2UoZW5hYmxlKSk7Ci0g
ICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dpbmcpIHsKLSAgICAgICAgc3RkOjpj
b3V0IDw8ICIgYWVjbV9jb21mb3J0X25vaXNlX2VuYWJsZWQ6ICIKLSAgICAgICAgICAgICAgICAg
IDw8IChlbmFibGUgPyAidHJ1ZSIgOiAiZmFsc2UiKSA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKG1zZy5oYXNfYWVjbV9yb3V0aW5nX21vZGUoKSB8fCBzZXR0aW5nc18u
YWVjbV9yb3V0aW5nX21vZGUpIHsKLSAgICAgIGludCByb3V0aW5nX21vZGUgPSBzZXR0aW5nc18u
YWVjbV9yb3V0aW5nX21vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAqc2V0dGlu
Z3NfLmFlY21fcm91dGluZ19tb2RlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXNn
LmFlY21fcm91dGluZ19tb2RlKCk7Ci0gICAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5n
OjprTm9FcnJvciwKLSAgICAgICAgICAgICAgICAgICBhcF8tPmVjaG9fY29udHJvbF9tb2JpbGUo
KS0+c2V0X3JvdXRpbmdfbW9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
d2VicnRjOjpFY2hvQ29udHJvbE1vYmlsZTo6Um91dGluZ01vZGU+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcm91dGluZ19tb2RlKSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVy
Ym9zZV9sb2dnaW5nKSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGFlY21fcm91dGluZ19tb2Rl
OiAiIDw8IHJvdXRpbmdfbW9kZSA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAg
aWYgKG1zZy5oYXNfYWdjX2VuYWJsZWQoKSB8fCBzZXR0aW5nc18udXNlX2FnYykgewotICAgICAg
Ym9vbCBlbmFibGUgPSBzZXR0aW5nc18udXNlX2FnYyA/ICpzZXR0aW5nc18udXNlX2FnYyA6IG1z
Zy5hZ2NfZW5hYmxlZCgpOwotICAgICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05v
RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgYXBfLT5nYWluX2NvbnRyb2woKS0+RW5hYmxlKGVu
YWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7Ci0gICAg
ICAgIHN0ZDo6Y291dCA8PCAiIGFnY19lbmFibGVkOiAiIDw8IChlbmFibGUgPyAidHJ1ZSIgOiAi
ZmFsc2UiKQotICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwotICAgICAgfQotICAgIH0K
LQotICAgIGlmIChtc2cuaGFzX2FnY19tb2RlKCkgfHwgc2V0dGluZ3NfLmFnY19tb2RlKSB7Ci0g
ICAgICBpbnQgbW9kZSA9IHNldHRpbmdzXy5hZ2NfbW9kZSA/ICpzZXR0aW5nc18uYWdjX21vZGUg
OiBtc2cuYWdjX21vZGUoKTsKLSAgICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtO
b0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+Z2Fpbl9jb250cm9sKCktPnNldF9tb2Rl
KAotICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx3ZWJydGM6OkdhaW5Db250cm9s
OjpNb2RlPihtb2RlKSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5n
KSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGFnY19tb2RlOiAiIDw8IG1vZGUgPDwgc3RkOjpl
bmRsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChtc2cuaGFzX2FnY19saW1pdGVyX2VuYWJs
ZWQoKSB8fCBzZXR0aW5nc18udXNlX2FnY19saW1pdGVyKSB7Ci0gICAgICBib29sIGVuYWJsZSA9
IHNldHRpbmdzXy51c2VfYWdjX2xpbWl0ZXIgPyAqc2V0dGluZ3NfLnVzZV9hZ2NfbGltaXRlcgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbXNnLmFnY19s
aW1pdGVyX2VuYWJsZWQoKTsKLSAgICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtO
b0Vycm9yLAotICAgICAgICAgICAgICAgICAgIGFwXy0+Z2Fpbl9jb250cm9sKCktPmVuYWJsZV9s
aW1pdGVyKGVuYWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5n
KSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIGFnY19saW1pdGVyX2VuYWJsZWQ6ICIgPDwgKGVu
YWJsZSA/ICJ0cnVlIiA6ICJmYWxzZSIpCi0gICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7
Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLy8gVE9ETyhwZWFoKTogQWRkIHN1cHBvcnQgZm9yIGNv
bnRyb2xsaW5nIHRoZSBFeHBlcmltZW50YWwgQUdDIGZyb20gdGhlCi0gICAgLy8gY29tbWFuZCBs
aW5lLgotICAgIGlmIChtc2cuaGFzX25vaXNlX3JvYnVzdF9hZ2NfZW5hYmxlZCgpKSB7Ci0gICAg
ICBjb25maWcuU2V0PEV4cGVyaW1lbnRhbEFnYz4oCi0gICAgICAgICAgbmV3IEV4cGVyaW1lbnRh
bEFnYyhtc2cubm9pc2Vfcm9idXN0X2FnY19lbmFibGVkKCkpKTsKLSAgICAgIGlmIChzZXR0aW5n
c18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiBub2lzZV9y
b2J1c3RfYWdjX2VuYWJsZWQ6ICIKLSAgICAgICAgICAgICAgICAgIDw8IChtc2cubm9pc2Vfcm9i
dXN0X2FnY19lbmFibGVkKCkgPyAidHJ1ZSIgOiAiZmFsc2UiKQotICAgICAgICAgICAgICAgICAg
PDwgc3RkOjplbmRsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChtc2cuaGFzX3RyYW5zaWVu
dF9zdXBwcmVzc2lvbl9lbmFibGVkKCkgfHwgc2V0dGluZ3NfLnVzZV90cykgewotICAgICAgYm9v
bCBlbmFibGUgPSBzZXR0aW5nc18udXNlX3RzID8gKnNldHRpbmdzXy51c2VfdHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1zZy50cmFuc2llbnRfc3VwcHJlc3Npb25f
ZW5hYmxlZCgpOwotICAgICAgY29uZmlnLlNldDxFeHBlcmltZW50YWxOcz4obmV3IEV4cGVyaW1l
bnRhbE5zKGVuYWJsZSkpOwotICAgICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5n
KSB7Ci0gICAgICAgIHN0ZDo6Y291dCA8PCAiIHRyYW5zaWVudF9zdXBwcmVzc2lvbl9lbmFibGVk
OiAiCi0gICAgICAgICAgICAgICAgICA8PCAoZW5hYmxlID8gInRydWUiIDogImZhbHNlIikgPDwg
c3RkOjplbmRsOwotICAgICAgfQotICAgIH0KLQotICAgIGlmIChtc2cuaGFzX2ludGVsbGlnaWJp
bGl0eV9lbmhhbmNlcl9lbmFibGVkKCkgfHwgc2V0dGluZ3NfLnVzZV9pZSkgewotICAgICAgYm9v
bCBlbmFibGUgPSBzZXR0aW5nc18udXNlX2llID8gKnNldHRpbmdzXy51c2VfaWUKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG1zZy5pbnRlbGxpZ2liaWxpdHlfZW5oYW5j
ZXJfZW5hYmxlZCgpOwotICAgICAgY29uZmlnLlNldDxJbnRlbGxpZ2liaWxpdHk+KG5ldyBJbnRl
bGxpZ2liaWxpdHkoZW5hYmxlKSk7Ci0gICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xv
Z2dpbmcpIHsKLSAgICAgICAgc3RkOjpjb3V0IDw8ICIgaW50ZWxsaWdpYmlsaXR5X2VuaGFuY2Vy
X2VuYWJsZWQ6ICIKLSAgICAgICAgICAgICAgICAgIDw8IChlbmFibGUgPyAidHJ1ZSIgOiAiZmFs
c2UiKSA8PCBzdGQ6OmVuZGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1zZy5oYXNfaHBm
X2VuYWJsZWQoKSB8fCBzZXR0aW5nc18udXNlX2hwZikgewotICAgICAgYm9vbCBlbmFibGUgPSBz
ZXR0aW5nc18udXNlX2hwZiA/ICpzZXR0aW5nc18udXNlX2hwZiA6IG1zZy5ocGZfZW5hYmxlZCgp
OwotICAgICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAg
ICAgICAgICAgICAgYXBfLT5oaWdoX3Bhc3NfZmlsdGVyKCktPkVuYWJsZShlbmFibGUpKTsKLSAg
ICAgIGlmIChzZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2luZykgewotICAgICAgICBzdGQ6OmNv
dXQgPDwgIiBocGZfZW5hYmxlZDogIiA8PCAoZW5hYmxlID8gInRydWUiIDogImZhbHNlIikKLSAg
ICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
bXNnLmhhc19uc19lbmFibGVkKCkgfHwgc2V0dGluZ3NfLnVzZV9ucykgewotICAgICAgYm9vbCBl
bmFibGUgPSBzZXR0aW5nc18udXNlX25zID8gKnNldHRpbmdzXy51c2VfbnMgOiBtc2cubnNfZW5h
YmxlZCgpOwotICAgICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0g
ICAgICAgICAgICAgICAgICAgYXBfLT5ub2lzZV9zdXBwcmVzc2lvbigpLT5FbmFibGUoZW5hYmxl
KSk7Ci0gICAgICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dpbmcpIHsKLSAgICAgICAg
c3RkOjpjb3V0IDw8ICIgbnNfZW5hYmxlZDogIiA8PCAoZW5hYmxlID8gInRydWUiIDogImZhbHNl
IikKLSAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobXNnLmhhc19uc19sZXZlbCgpIHx8IHNldHRpbmdzXy5uc19sZXZlbCkgewotICAgICAg
aW50IGxldmVsID0gc2V0dGluZ3NfLm5zX2xldmVsID8gKnNldHRpbmdzXy5uc19sZXZlbCA6IG1z
Zy5uc19sZXZlbCgpOwotICAgICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJy
b3IsCi0gICAgICAgICAgICAgICAgICAgYXBfLT5ub2lzZV9zdXBwcmVzc2lvbigpLT5zZXRfbGV2
ZWwoCi0gICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE5vaXNlU3VwcHJlc3Npb246
OkxldmVsPihsZXZlbCkpKTsKLSAgICAgIGlmIChzZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2lu
ZykgewotICAgICAgICBzdGQ6OmNvdXQgPDwgIiBuc19sZXZlbDogIiA8PCBsZXZlbCA8PCBzdGQ6
OmVuZGw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9s
b2dnaW5nICYmIG1zZy5oYXNfZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKSAmJgotICAgICAgICBt
c2cuZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKS5zaXplKCkgPiAwKSB7Ci0gICAgICBzdGQ6OmNv
dXQgPDwgIiBleHBlcmltZW50cyBub3QgaW5jbHVkZWQgYnkgZGVmYXVsdCBpbiB0aGUgc2ltdWxh
dGlvbjogIgotICAgICAgICAgICAgICAgIDw8IG1zZy5leHBlcmltZW50c19kZXNjcmlwdGlvbigp
IDw8IHN0ZDo6ZW5kbDsKLSAgICB9Ci0KLSAgICBpZiAoc2V0dGluZ3NfLnVzZV9yZWZpbmVkX2Fk
YXB0aXZlX2ZpbHRlcikgewotICAgICAgY29uZmlnLlNldDxSZWZpbmVkQWRhcHRpdmVGaWx0ZXI+
KAotICAgICAgICAgIG5ldyBSZWZpbmVkQWRhcHRpdmVGaWx0ZXIoKnNldHRpbmdzXy51c2VfcmVm
aW5lZF9hZGFwdGl2ZV9maWx0ZXIpKTsKLSAgICB9Ci0KLSAgICBpZiAoc2V0dGluZ3NfLnVzZV9h
ZWMzKSB7Ci0gICAgICBjb25maWcuU2V0PEVjaG9DYW5jZWxsZXIzPihuZXcgRWNob0NhbmNlbGxl
cjMoKnNldHRpbmdzXy51c2VfYWVjMykpOwotICAgIH0KLQotICAgIGlmIChzZXR0aW5nc18udXNl
X2xjKSB7Ci0gICAgICBhcG1fY29uZmlnLmxldmVsX2NvbnRyb2xsZXIuZW5hYmxlZCA9ICpzZXR0
aW5nc18udXNlX2xjOwotICAgIH0KLQotICAgIGlmIChzZXR0aW5nc18udXNlX3JlZCkgewotICAg
ICAgYXBtX2NvbmZpZy5yZXNpZHVhbF9lY2hvX2RldGVjdG9yLmVuYWJsZWQgPSAqc2V0dGluZ3Nf
LnVzZV9yZWQ7Ci0gICAgfQotCi0gICAgYXBfLT5BcHBseUNvbmZpZyhhcG1fY29uZmlnKTsKLSAg
ICBhcF8tPlNldEV4dHJhT3B0aW9ucyhjb25maWcpOwotICB9Ci19Ci0KLXZvaWQgQWVjRHVtcEJh
c2VkU2ltdWxhdG9yOjpIYW5kbGVNZXNzYWdlKGNvbnN0IHdlYnJ0Yzo6YXVkaW9wcm9jOjpJbml0
JiBtc2cpIHsKLSAgUlRDX0NIRUNLKG1zZy5oYXNfc2FtcGxlX3JhdGUoKSk7Ci0gIFJUQ19DSEVD
Syhtc2cuaGFzX251bV9pbnB1dF9jaGFubmVscygpKTsKLSAgUlRDX0NIRUNLKG1zZy5oYXNfbnVt
X3JldmVyc2VfY2hhbm5lbHMoKSk7Ci0gIFJUQ19DSEVDSyhtc2cuaGFzX3JldmVyc2Vfc2FtcGxl
X3JhdGUoKSk7Ci0KLSAgaWYgKHNldHRpbmdzXy51c2VfdmVyYm9zZV9sb2dnaW5nKSB7Ci0gICAg
c3RkOjpjb3V0IDw8ICJJbml0IGF0IGZyYW1lOiIgPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291
dCA8PCAiIEZvcndhcmQ6ICIgPDwgZ2V0X251bV9wcm9jZXNzX3N0cmVhbV9jYWxscygpIDw8IHN0
ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgIiBSZXZlcnNlOiAiIDw8IGdldF9udW1fcmV2ZXJz
ZV9wcm9jZXNzX3N0cmVhbV9jYWxscygpCi0gICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAg
fQotCi0gIGludCBudW1fb3V0cHV0X2NoYW5uZWxzOwotICBpZiAoc2V0dGluZ3NfLm91dHB1dF9u
dW1fY2hhbm5lbHMpIHsKLSAgICBudW1fb3V0cHV0X2NoYW5uZWxzID0gKnNldHRpbmdzXy5vdXRw
dXRfbnVtX2NoYW5uZWxzOwotICB9IGVsc2UgewotICAgIG51bV9vdXRwdXRfY2hhbm5lbHMgPSBt
c2cuaGFzX251bV9vdXRwdXRfY2hhbm5lbHMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPyBtc2cubnVtX291dHB1dF9jaGFubmVscygpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IG1zZy5udW1faW5wdXRfY2hhbm5lbHMoKTsKLSAgfQotCi0gIGludCBvdXRwdXRfc2Ft
cGxlX3JhdGU7Ci0gIGlmIChzZXR0aW5nc18ub3V0cHV0X3NhbXBsZV9yYXRlX2h6KSB7Ci0gICAg
b3V0cHV0X3NhbXBsZV9yYXRlID0gKnNldHRpbmdzXy5vdXRwdXRfc2FtcGxlX3JhdGVfaHo7Ci0g
IH0gZWxzZSB7Ci0gICAgb3V0cHV0X3NhbXBsZV9yYXRlID0gbXNnLmhhc19vdXRwdXRfc2FtcGxl
X3JhdGUoKSA/IG1zZy5vdXRwdXRfc2FtcGxlX3JhdGUoKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBtc2cuc2FtcGxlX3JhdGUoKTsKLSAg
fQotCi0gIGludCBudW1fcmV2ZXJzZV9vdXRwdXRfY2hhbm5lbHM7Ci0gIGlmIChzZXR0aW5nc18u
cmV2ZXJzZV9vdXRwdXRfbnVtX2NoYW5uZWxzKSB7Ci0gICAgbnVtX3JldmVyc2Vfb3V0cHV0X2No
YW5uZWxzID0gKnNldHRpbmdzXy5yZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHM7Ci0gIH0gZWxz
ZSB7Ci0gICAgbnVtX3JldmVyc2Vfb3V0cHV0X2NoYW5uZWxzID0gbXNnLmhhc19udW1fcmV2ZXJz
ZV9vdXRwdXRfY2hhbm5lbHMoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA/IG1zZy5udW1fcmV2ZXJzZV9vdXRwdXRfY2hhbm5lbHMoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IG1zZy5udW1fcmV2ZXJzZV9jaGFubmVscygpOwotICB9Ci0K
LSAgaW50IHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlOwotICBpZiAoc2V0dGluZ3NfLnJldmVy
c2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6KSB7Ci0gICAgcmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3Jh
dGUgPSAqc2V0dGluZ3NfLnJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6OwotICB9IGVsc2Ug
ewotICAgIHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlID0gbXNnLmhhc19yZXZlcnNlX291dHB1
dF9zYW1wbGVfcmF0ZSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBt
c2cucmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3JhdGUoKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogbXNnLnJldmVyc2Vfc2FtcGxlX3JhdGUoKTsKLSAgfQotCi0gIFNldHVw
QnVmZmVyc0NvbmZpZ3NPdXRwdXRzKAotICAgICAgbXNnLnNhbXBsZV9yYXRlKCksIG91dHB1dF9z
YW1wbGVfcmF0ZSwgbXNnLnJldmVyc2Vfc2FtcGxlX3JhdGUoKSwKLSAgICAgIHJldmVyc2Vfb3V0
cHV0X3NhbXBsZV9yYXRlLCBtc2cubnVtX2lucHV0X2NoYW5uZWxzKCksIG51bV9vdXRwdXRfY2hh
bm5lbHMsCi0gICAgICBtc2cubnVtX3JldmVyc2VfY2hhbm5lbHMoKSwgbnVtX3JldmVyc2Vfb3V0
cHV0X2NoYW5uZWxzKTsKLX0KLQotdm9pZCBBZWNEdW1wQmFzZWRTaW11bGF0b3I6OkhhbmRsZU1l
c3NhZ2UoCi0gICAgY29uc3Qgd2VicnRjOjphdWRpb3Byb2M6OlN0cmVhbSYgbXNnKSB7Ci0gIGJv
b2wgc2V0X3N0cmVhbV9hbmFsb2dfbGV2ZWxfY2FsbGVkID0gZmFsc2U7Ci0gIFByZXBhcmVQcm9j
ZXNzU3RyZWFtQ2FsbChtc2csICZzZXRfc3RyZWFtX2FuYWxvZ19sZXZlbF9jYWxsZWQpOwotICBQ
cm9jZXNzU3RyZWFtKGludGVyZmFjZV91c2VkXyA9PSBJbnRlcmZhY2VUeXBlOjprRml4ZWRJbnRl
cmZhY2UpOwotICBpZiAoc2V0X3N0cmVhbV9hbmFsb2dfbGV2ZWxfY2FsbGVkKSB7Ci0gICAgLy8g
Q2FsbCBzdHJlYW0gYW5hbG9nIGxldmVsIHRvIGVuc3VyZSB0aGF0IGFueSBzaWRlLWVmZmVjdHMg
YXJlIHRyaWdnZXJlZC4KLSAgICAodm9pZClhcF8tPmdhaW5fY29udHJvbCgpLT5zdHJlYW1fYW5h
bG9nX2xldmVsKCk7Ci0gIH0KLQotICBWZXJpZnlQcm9jZXNzU3RyZWFtQml0RXhhY3RuZXNzKG1z
Zyk7Ci19Ci0KLXZvaWQgQWVjRHVtcEJhc2VkU2ltdWxhdG9yOjpIYW5kbGVNZXNzYWdlKAotICAg
IGNvbnN0IHdlYnJ0Yzo6YXVkaW9wcm9jOjpSZXZlcnNlU3RyZWFtJiBtc2cpIHsKLSAgUHJlcGFy
ZVJldmVyc2VQcm9jZXNzU3RyZWFtQ2FsbChtc2cpOwotICBQcm9jZXNzUmV2ZXJzZVN0cmVhbShp
bnRlcmZhY2VfdXNlZF8gPT0gSW50ZXJmYWNlVHlwZTo6a0ZpeGVkSW50ZXJmYWNlKTsKLX0KLQot
fSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vz
c2luZy90ZXN0L2FlY19kdW1wX2Jhc2VkX3NpbXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vz
c2luZy90ZXN0L2FlY19kdW1wX2Jhc2VkX3NpbXVsYXRvci5oCShyZXZpc2lvbiAyMTIyNzMpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlv
X3Byb2Nlc3NpbmcvdGVzdC9hZWNfZHVtcF9iYXNlZF9zaW11bGF0b3IuaAkobm9uZXhpc3RlbnQp
CkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMg
cHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhh
dCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRz
IGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJp
YnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBm
aWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJU
Q19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9BRUNfRFVNUF9CQVNFRF9TSU1VTEFUT1Jf
SF8KLSNkZWZpbmUgV0VCUlRDX01PRFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX0FFQ19EVU1Q
X0JBU0VEX1NJTVVMQVRPUl9IXwotCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L2F1ZGlvX3Byb2Nlc3Npbmdfc2ltdWxhdG9yLmgiCi0KLSNpbmNsdWRlICJ3
ZWJydGMvYmFzZS9jb25zdHJ1Y3Rvcm1hZ2ljLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvaWdu
b3JlX3d1bmRlZi5oIgotCi1SVENfUFVTSF9JR05PUklOR19XVU5ERUYoKQotI2lmZGVmIFdFQlJU
Q19BTkRST0lEX1BMQVRGT1JNX0JVSUxECi0jaW5jbHVkZSAiZXh0ZXJuYWwvd2VicnRjL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvZGVidWcucGIuaCIKLSNlbHNlCi0jaW5jbHVkZSAi
d2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy9kZWJ1Zy5wYi5oIgotI2VuZGlmCi1SVENf
UE9QX0lHTk9SSU5HX1dVTkRFRigpCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIHRl
c3QgewotCi0vLyBVc2VkIHRvIHBlcmZvcm0gYW4gYXVkaW8gcHJvY2Vzc2luZyBzaW11bGF0aW9u
IGZyb20gYW4gYWVjIGR1bXAuCi1jbGFzcyBBZWNEdW1wQmFzZWRTaW11bGF0b3IgZmluYWwgOiBw
dWJsaWMgQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yIHsKLSBwdWJsaWM6Ci0gIGV4cGxpY2l0IEFl
Y0R1bXBCYXNlZFNpbXVsYXRvcihjb25zdCBTaW11bGF0aW9uU2V0dGluZ3MmIHNldHRpbmdzKQot
ICAgICAgOiBBdWRpb1Byb2Nlc3NpbmdTaW11bGF0b3Ioc2V0dGluZ3MpIHt9Ci0gIH5BZWNEdW1w
QmFzZWRTaW11bGF0b3IoKSBvdmVycmlkZSB7fQotCi0gIC8vIFByb2Nlc3NlcyB0aGUgbWVzc2Fn
ZXMgaW4gdGhlIGFlY2R1bXAgZmlsZS4KLSAgdm9pZCBQcm9jZXNzKCkgb3ZlcnJpZGU7Ci0KLSBw
cml2YXRlOgotICB2b2lkIEhhbmRsZU1lc3NhZ2UoY29uc3Qgd2VicnRjOjphdWRpb3Byb2M6Oklu
aXQmIG1zZyk7Ci0gIHZvaWQgSGFuZGxlTWVzc2FnZShjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6
U3RyZWFtJiBtc2cpOwotICB2b2lkIEhhbmRsZU1lc3NhZ2UoY29uc3Qgd2VicnRjOjphdWRpb3By
b2M6OlJldmVyc2VTdHJlYW0mIG1zZyk7Ci0gIHZvaWQgSGFuZGxlTWVzc2FnZShjb25zdCB3ZWJy
dGM6OmF1ZGlvcHJvYzo6Q29uZmlnJiBtc2cpOwotICB2b2lkIFByZXBhcmVQcm9jZXNzU3RyZWFt
Q2FsbChjb25zdCB3ZWJydGM6OmF1ZGlvcHJvYzo6U3RyZWFtJiBtc2csCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wqIHNldF9zdHJlYW1fYW5hbG9nX2xldmVsX2NhbGxlZCk7
Ci0gIHZvaWQgUHJlcGFyZVJldmVyc2VQcm9jZXNzU3RyZWFtQ2FsbCgKLSAgICAgIGNvbnN0IHdl
YnJ0Yzo6YXVkaW9wcm9jOjpSZXZlcnNlU3RyZWFtJiBtc2cpOwotICB2b2lkIFZlcmlmeVByb2Nl
c3NTdHJlYW1CaXRFeGFjdG5lc3MoY29uc3Qgd2VicnRjOjphdWRpb3Byb2M6OlN0cmVhbSYgbXNn
KTsKLQotICBlbnVtIEludGVyZmFjZVR5cGUgewotICAgIGtGaXhlZEludGVyZmFjZSwKLSAgICBr
RmxvYXRJbnRlcmZhY2UsCi0gICAga05vdFNwZWNpZmllZCwKLSAgfTsKLQotICBGSUxFKiBkdW1w
X2lucHV0X2ZpbGVfOwotICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZV91c2VkXyA9IEludGVyZmFj
ZVR5cGU6OmtOb3RTcGVjaWZpZWQ7Ci0KLSAgUlRDX0RJU0FMTE9XX0lNUExJQ0lUX0NPTlNUUlVD
VE9SUyhBZWNEdW1wQmFzZWRTaW11bGF0b3IpOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QK
LX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJ
T19QUk9DRVNTSU5HX1RFU1RfQUVDX0RVTVBfQkFTRURfU0lNVUxBVE9SX0hfCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nl
c3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1
ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbAko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L0FuZHJv
aWRNYW5pZmVzdC54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJz
aW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPCEtLSBCRUdJTl9JTkNMVURFKG1hbmlmZXN0
KSAtLT4KLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNv
bS9hcGsvcmVzL2FuZHJvaWQiCi0gICAgICAgIHBhY2thZ2U9ImNvbS5leGFtcGxlLm5hdGl2ZV9h
Y3Rpdml0eSIKLSAgICAgICAgYW5kcm9pZDp2ZXJzaW9uQ29kZT0iMSIKLSAgICAgICAgYW5kcm9p
ZDp2ZXJzaW9uTmFtZT0iMS4wIj4KLQotICAgIDwhLS0gVGhpcyBpcyB0aGUgcGxhdGZvcm0gQVBJ
IHdoZXJlIE5hdGl2ZUFjdGl2aXR5IHdhcyBpbnRyb2R1Y2VkLiAtLT4KLSAgICA8dXNlcy1zZGsg
YW5kcm9pZDptaW5TZGtWZXJzaW9uPSI4IiAvPgotCi0gICAgPCEtLSBUaGlzIC5hcGsgaGFzIG5v
IEphdmEgY29kZSBpdHNlbGYsIHNvIHNldCBoYXNDb2RlIHRvIGZhbHNlLiAtLT4KLSAgICA8YXBw
bGljYXRpb24gYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFtZSIgYW5kcm9pZDpoYXNDb2Rl
PSJmYWxzZSIgYW5kcm9pZDpkZWJ1Z2dhYmxlPSJ0cnVlIj4KLQotICAgICAgICA8IS0tIE91ciBh
Y3Rpdml0eSBpcyB0aGUgYnVpbHQtaW4gTmF0aXZlQWN0aXZpdHkgZnJhbWV3b3JrIGNsYXNzLgot
ICAgICAgICAgICAgIFRoaXMgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZWdyYXRpbmcgd2l0aCBvdXIg
TkRLIGNvZGUuIC0tPgotICAgICAgICA8YWN0aXZpdHkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmFw
cC5OYXRpdmVBY3Rpdml0eSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmxhYmVsPSJAc3RyaW5n
L2FwcF9uYW1lIgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6Y29uZmlnQ2hhbmdlcz0ib3JpZW50
YXRpb258a2V5Ym9hcmRIaWRkZW4iPgotICAgICAgICAgICAgPCEtLSBUZWxsIE5hdGl2ZUFjdGl2
aXR5IHRoZSBuYW1lIG9mIG9yIC5zbyAtLT4KLSAgICAgICAgICAgIDxtZXRhLWRhdGEgYW5kcm9p
ZDpuYW1lPSJhbmRyb2lkLmFwcC5saWJfbmFtZSIKLSAgICAgICAgICAgICAgICAgICAgYW5kcm9p
ZDp2YWx1ZT0iYXBtdGVzdC1hY3Rpdml0eSIgLz4KLSAgICAgICAgICAgIDxpbnRlbnQtZmlsdGVy
PgotICAgICAgICAgICAgICAgIDxhY3Rpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkLmludGVudC5h
Y3Rpb24uTUFJTiIgLz4KLSAgICAgICAgICAgICAgICA8Y2F0ZWdvcnkgYW5kcm9pZDpuYW1lPSJh
bmRyb2lkLmludGVudC5jYXRlZ29yeS5MQVVOQ0hFUiIgLz4KLSAgICAgICAgICAgIDwvaW50ZW50
LWZpbHRlcj4KLSAgICAgICAgPC9hY3Rpdml0eT4KLSAgICA8L2FwcGxpY2F0aW9uPgotCi08L21h
bmlmZXN0PiAKLTwhLS0gRU5EX0lOQ0xVREUobWFuaWZlc3QpIC0tPgpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5n
L3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2RlZmF1bHQucHJvcGVydGllcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3By
b2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvZGVmYXVsdC5wcm9wZXJ0aWVzCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvZGVmYXVsdC5wcm9w
ZXJ0aWVzCShub25leGlzdGVudCkKQEAgLTEsMTEgKzAsMCBAQAotIyBUaGlzIGZpbGUgaXMgYXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgQW5kcm9pZCBUb29scy4KLSMgRG8gbm90IG1vZGlmeSB0
aGlzIGZpbGUgLS0gWU9VUiBDSEFOR0VTIFdJTEwgQkUgRVJBU0VEIQotIyAKLSMgVGhpcyBmaWxl
IG11c3QgYmUgY2hlY2tlZCBpbiBWZXJzaW9uIENvbnRyb2wgU3lzdGVtcy4KLSMgCi0jIFRvIGN1
c3RvbWl6ZSBwcm9wZXJ0aWVzIHVzZWQgYnkgdGhlIEFudCBidWlsZCBzeXN0ZW0gdXNlLAotIyAi
YnVpbGQucHJvcGVydGllcyIsIGFuZCBvdmVycmlkZSB2YWx1ZXMgdG8gYWRhcHQgdGhlIHNjcmlw
dCB0byB5b3VyCi0jIHByb2plY3Qgc3RydWN0dXJlLgotCi0jIFByb2plY3QgdGFyZ2V0LgotdGFy
Z2V0PWFuZHJvaWQtOQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2puaS9t
YWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2puaS9t
YWluLmMJKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVz
dC9qbmkvbWFpbi5jCShub25leGlzdGVudCkKQEAgLTEsMzA3ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExp
Y2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5z
ZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl
IGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv
IGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp
cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVT
IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0g
KiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy
bWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqCi0gKi8K
LQotLy9CRUdJTl9JTkNMVURFKGFsbCkKLSNpbmNsdWRlIDxqbmkuaD4KLSNpbmNsdWRlIDxlcnJu
by5oPgotCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2luY2x1ZGUgPEdMRVMvZ2wuaD4KLQotI2lu
Y2x1ZGUgPGFuZHJvaWQvc2Vuc29yLmg+Ci0jaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KLSNpbmNs
dWRlIDxhbmRyb2lkX25hdGl2ZV9hcHBfZ2x1ZS5oPgotCi0jZGVmaW5lIExPR0koLi4uKSAoKHZv
aWQpX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibmF0aXZlLWFjdGl2aXR5
IiwgX19WQV9BUkdTX18pKQotI2RlZmluZSBMT0dXKC4uLikgKCh2b2lkKV9fYW5kcm9pZF9sb2df
cHJpbnQoQU5EUk9JRF9MT0dfV0FSTiwgIm5hdGl2ZS1hY3Rpdml0eSIsIF9fVkFfQVJHU19fKSkK
LQotLyoqCi0gKiBPdXIgc2F2ZWQgc3RhdGUgZGF0YS4KLSAqLwotc3RydWN0IHNhdmVkX3N0YXRl
IHsKLSAgICBmbG9hdCBhbmdsZTsKLSAgICBpbnQzMl90IHg7Ci0gICAgaW50MzJfdCB5OwotfTsK
LQotLyoqCi0gKiBTaGFyZWQgc3RhdGUgZm9yIG91ciBhcHAuCi0gKi8KLXN0cnVjdCBlbmdpbmUg
ewotICAgIHN0cnVjdCBhbmRyb2lkX2FwcCogYXBwOwotCi0gICAgQVNlbnNvck1hbmFnZXIqIHNl
bnNvck1hbmFnZXI7Ci0gICAgY29uc3QgQVNlbnNvciogYWNjZWxlcm9tZXRlclNlbnNvcjsKLSAg
ICBBU2Vuc29yRXZlbnRRdWV1ZSogc2Vuc29yRXZlbnRRdWV1ZTsKLQotICAgIGludCBhbmltYXRp
bmc7Ci0gICAgRUdMRGlzcGxheSBkaXNwbGF5OwotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZTsKLSAg
ICBFR0xDb250ZXh0IGNvbnRleHQ7Ci0gICAgaW50MzJfdCB3aWR0aDsKLSAgICBpbnQzMl90IGhl
aWdodDsKLSAgICBzdHJ1Y3Qgc2F2ZWRfc3RhdGUgc3RhdGU7Ci19OwotCi0vKioKLSAqIEluaXRp
YWxpemUgYW4gRUdMIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IGRpc3BsYXkuCi0gKi8KLXN0YXRp
YyBpbnQgZW5naW5lX2luaXRfZGlzcGxheShzdHJ1Y3QgZW5naW5lKiBlbmdpbmUpIHsKLSAgICAv
LyBpbml0aWFsaXplIE9wZW5HTCBFUyBhbmQgRUdMCi0KLSAgICAvKgotICAgICAqIEhlcmUgc3Bl
Y2lmeSB0aGUgYXR0cmlidXRlcyBvZiB0aGUgZGVzaXJlZCBjb25maWd1cmF0aW9uLgotICAgICAq
IEJlbG93LCB3ZSBzZWxlY3QgYW4gRUdMQ29uZmlnIHdpdGggYXQgbGVhc3QgOCBiaXRzIHBlciBj
b2xvcgotICAgICAqIGNvbXBvbmVudCBjb21wYXRpYmxlIHdpdGggb24tc2NyZWVuIHdpbmRvd3MK
LSAgICAgKi8KLSAgICBjb25zdCBFR0xpbnQgYXR0cmlic1tdID0gewotICAgICAgICAgICAgRUdM
X1NVUkZBQ0VfVFlQRSwgRUdMX1dJTkRPV19CSVQsCi0gICAgICAgICAgICBFR0xfQkxVRV9TSVpF
LCA4LAotICAgICAgICAgICAgRUdMX0dSRUVOX1NJWkUsIDgsCi0gICAgICAgICAgICBFR0xfUkVE
X1NJWkUsIDgsCi0gICAgICAgICAgICBFR0xfTk9ORQotICAgIH07Ci0gICAgRUdMaW50IHcsIGgs
IGR1bW15LCBmb3JtYXQ7Ci0gICAgRUdMaW50IG51bUNvbmZpZ3M7Ci0gICAgRUdMQ29uZmlnIGNv
bmZpZzsKLSAgICBFR0xTdXJmYWNlIHN1cmZhY2U7Ci0gICAgRUdMQ29udGV4dCBjb250ZXh0Owot
Ci0gICAgRUdMRGlzcGxheSBkaXNwbGF5ID0gZWdsR2V0RGlzcGxheShFR0xfREVGQVVMVF9ESVNQ
TEFZKTsKLQotICAgIGVnbEluaXRpYWxpemUoZGlzcGxheSwgMCwgMCk7Ci0KLSAgICAvKiBIZXJl
LCB0aGUgYXBwbGljYXRpb24gY2hvb3NlcyB0aGUgY29uZmlndXJhdGlvbiBpdCBkZXNpcmVzLiBJ
biB0aGlzCi0gICAgICogc2FtcGxlLCB3ZSBoYXZlIGEgdmVyeSBzaW1wbGlmaWVkIHNlbGVjdGlv
biBwcm9jZXNzLCB3aGVyZSB3ZSBwaWNrCi0gICAgICogdGhlIGZpcnN0IEVHTENvbmZpZyB0aGF0
IG1hdGNoZXMgb3VyIGNyaXRlcmlhICovCi0gICAgZWdsQ2hvb3NlQ29uZmlnKGRpc3BsYXksIGF0
dHJpYnMsICZjb25maWcsIDEsICZudW1Db25maWdzKTsKLQotICAgIC8qIEVHTF9OQVRJVkVfVklT
VUFMX0lEIGlzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgRUdMQ29uZmlnIHRoYXQgaXMKLSAgICAgKiBn
dWFyYW50ZWVkIHRvIGJlIGFjY2VwdGVkIGJ5IEFOYXRpdmVXaW5kb3dfc2V0QnVmZmVyc0dlb21l
dHJ5KCkuCi0gICAgICogQXMgc29vbiBhcyB3ZSBwaWNrZWQgYSBFR0xDb25maWcsIHdlIGNhbiBz
YWZlbHkgcmVjb25maWd1cmUgdGhlCi0gICAgICogQU5hdGl2ZVdpbmRvdyBidWZmZXJzIHRvIG1h
dGNoLCB1c2luZyBFR0xfTkFUSVZFX1ZJU1VBTF9JRC4gKi8KLSAgICBlZ2xHZXRDb25maWdBdHRy
aWIoZGlzcGxheSwgY29uZmlnLCBFR0xfTkFUSVZFX1ZJU1VBTF9JRCwgJmZvcm1hdCk7Ci0KLSAg
ICBBTmF0aXZlV2luZG93X3NldEJ1ZmZlcnNHZW9tZXRyeShlbmdpbmUtPmFwcC0+d2luZG93LCAw
LCAwLCBmb3JtYXQpOwotCi0gICAgc3VyZmFjZSA9IGVnbENyZWF0ZVdpbmRvd1N1cmZhY2UoZGlz
cGxheSwgY29uZmlnLCBlbmdpbmUtPmFwcC0+d2luZG93LCBOVUxMKTsKLSAgICBjb250ZXh0ID0g
ZWdsQ3JlYXRlQ29udGV4dChkaXNwbGF5LCBjb25maWcsIE5VTEwsIE5VTEwpOwotCi0gICAgaWYg
KGVnbE1ha2VDdXJyZW50KGRpc3BsYXksIHN1cmZhY2UsIHN1cmZhY2UsIGNvbnRleHQpID09IEVH
TF9GQUxTRSkgewotICAgICAgICBMT0dXKCJVbmFibGUgdG8gZWdsTWFrZUN1cnJlbnQiKTsKLSAg
ICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGVnbFF1ZXJ5U3VyZmFjZShkaXNwbGF5LCBz
dXJmYWNlLCBFR0xfV0lEVEgsICZ3KTsKLSAgICBlZ2xRdWVyeVN1cmZhY2UoZGlzcGxheSwgc3Vy
ZmFjZSwgRUdMX0hFSUdIVCwgJmgpOwotCi0gICAgZW5naW5lLT5kaXNwbGF5ID0gZGlzcGxheTsK
LSAgICBlbmdpbmUtPmNvbnRleHQgPSBjb250ZXh0OwotICAgIGVuZ2luZS0+c3VyZmFjZSA9IHN1
cmZhY2U7Ci0gICAgZW5naW5lLT53aWR0aCA9IHc7Ci0gICAgZW5naW5lLT5oZWlnaHQgPSBoOwot
ICAgIGVuZ2luZS0+c3RhdGUuYW5nbGUgPSAwOwotCi0gICAgLy8gSW5pdGlhbGl6ZSBHTCBzdGF0
ZS4KLSAgICBnbEhpbnQoR0xfUEVSU1BFQ1RJVkVfQ09SUkVDVElPTl9ISU5ULCBHTF9GQVNURVNU
KTsKLSAgICBnbEVuYWJsZShHTF9DVUxMX0ZBQ0UpOwotICAgIGdsU2hhZGVNb2RlbChHTF9TTU9P
VEgpOwotICAgIGdsRGlzYWJsZShHTF9ERVBUSF9URVNUKTsKLQotICAgIHJldHVybiAwOwotfQot
Ci0vKioKLSAqIEp1c3QgdGhlIGN1cnJlbnQgZnJhbWUgaW4gdGhlIGRpc3BsYXkuCi0gKi8KLXN0
YXRpYyB2b2lkIGVuZ2luZV9kcmF3X2ZyYW1lKHN0cnVjdCBlbmdpbmUqIGVuZ2luZSkgewotICAg
IGlmIChlbmdpbmUtPmRpc3BsYXkgPT0gTlVMTCkgewotICAgICAgICAvLyBObyBkaXNwbGF5Lgot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gSnVzdCBmaWxsIHRoZSBzY3JlZW4gd2l0
aCBhIGNvbG9yLgotICAgIGdsQ2xlYXJDb2xvcigoKGZsb2F0KWVuZ2luZS0+c3RhdGUueCkvZW5n
aW5lLT53aWR0aCwgZW5naW5lLT5zdGF0ZS5hbmdsZSwKLSAgICAgICAgICAgICgoZmxvYXQpZW5n
aW5lLT5zdGF0ZS55KS9lbmdpbmUtPmhlaWdodCwgMSk7Ci0gICAgZ2xDbGVhcihHTF9DT0xPUl9C
VUZGRVJfQklUKTsKLQotICAgIGVnbFN3YXBCdWZmZXJzKGVuZ2luZS0+ZGlzcGxheSwgZW5naW5l
LT5zdXJmYWNlKTsKLX0KLQotLyoqCi0gKiBUZWFyIGRvd24gdGhlIEVHTCBjb250ZXh0IGN1cnJl
bnRseSBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc3BsYXkuCi0gKi8KLXN0YXRpYyB2b2lkIGVuZ2lu
ZV90ZXJtX2Rpc3BsYXkoc3RydWN0IGVuZ2luZSogZW5naW5lKSB7Ci0gICAgaWYgKGVuZ2luZS0+
ZGlzcGxheSAhPSBFR0xfTk9fRElTUExBWSkgewotICAgICAgICBlZ2xNYWtlQ3VycmVudChlbmdp
bmUtPmRpc3BsYXksIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX0NPTlRF
WFQpOwotICAgICAgICBpZiAoZW5naW5lLT5jb250ZXh0ICE9IEVHTF9OT19DT05URVhUKSB7Ci0g
ICAgICAgICAgICBlZ2xEZXN0cm95Q29udGV4dChlbmdpbmUtPmRpc3BsYXksIGVuZ2luZS0+Y29u
dGV4dCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVuZ2luZS0+c3VyZmFjZSAhPSBFR0xfTk9f
U1VSRkFDRSkgewotICAgICAgICAgICAgZWdsRGVzdHJveVN1cmZhY2UoZW5naW5lLT5kaXNwbGF5
LCBlbmdpbmUtPnN1cmZhY2UpOwotICAgICAgICB9Ci0gICAgICAgIGVnbFRlcm1pbmF0ZShlbmdp
bmUtPmRpc3BsYXkpOwotICAgIH0KLSAgICBlbmdpbmUtPmFuaW1hdGluZyA9IDA7Ci0gICAgZW5n
aW5lLT5kaXNwbGF5ID0gRUdMX05PX0RJU1BMQVk7Ci0gICAgZW5naW5lLT5jb250ZXh0ID0gRUdM
X05PX0NPTlRFWFQ7Ci0gICAgZW5naW5lLT5zdXJmYWNlID0gRUdMX05PX1NVUkZBQ0U7Ci19Ci0K
LS8qKgotICogUHJvY2VzcyB0aGUgbmV4dCBpbnB1dCBldmVudC4KLSAqLwotc3RhdGljIGludDMy
X3QgZW5naW5lX2hhbmRsZV9pbnB1dChzdHJ1Y3QgYW5kcm9pZF9hcHAqIGFwcCwgQUlucHV0RXZl
bnQqIGV2ZW50KSB7Ci0gICAgc3RydWN0IGVuZ2luZSogZW5naW5lID0gKHN0cnVjdCBlbmdpbmUq
KWFwcC0+dXNlckRhdGE7Ci0gICAgaWYgKEFJbnB1dEV2ZW50X2dldFR5cGUoZXZlbnQpID09IEFJ
TlBVVF9FVkVOVF9UWVBFX01PVElPTikgewotICAgICAgICBlbmdpbmUtPmFuaW1hdGluZyA9IDE7
Ci0gICAgICAgIGVuZ2luZS0+c3RhdGUueCA9IEFNb3Rpb25FdmVudF9nZXRYKGV2ZW50LCAwKTsK
LSAgICAgICAgZW5naW5lLT5zdGF0ZS55ID0gQU1vdGlvbkV2ZW50X2dldFkoZXZlbnQsIDApOwot
ICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogUHJv
Y2VzcyB0aGUgbmV4dCBtYWluIGNvbW1hbmQuCi0gKi8KLXN0YXRpYyB2b2lkIGVuZ2luZV9oYW5k
bGVfY21kKHN0cnVjdCBhbmRyb2lkX2FwcCogYXBwLCBpbnQzMl90IGNtZCkgewotICAgIHN0cnVj
dCBlbmdpbmUqIGVuZ2luZSA9IChzdHJ1Y3QgZW5naW5lKilhcHAtPnVzZXJEYXRhOwotICAgIHN3
aXRjaCAoY21kKSB7Ci0gICAgICAgIGNhc2UgQVBQX0NNRF9TQVZFX1NUQVRFOgotICAgICAgICAg
ICAgLy8gVGhlIHN5c3RlbSBoYXMgYXNrZWQgdXMgdG8gc2F2ZSBvdXIgY3VycmVudCBzdGF0ZS4g
IERvIHNvLgotICAgICAgICAgICAgZW5naW5lLT5hcHAtPnNhdmVkU3RhdGUgPSBtYWxsb2Moc2l6
ZW9mKHN0cnVjdCBzYXZlZF9zdGF0ZSkpOwotICAgICAgICAgICAgKigoc3RydWN0IHNhdmVkX3N0
YXRlKillbmdpbmUtPmFwcC0+c2F2ZWRTdGF0ZSkgPSBlbmdpbmUtPnN0YXRlOwotICAgICAgICAg
ICAgZW5naW5lLT5hcHAtPnNhdmVkU3RhdGVTaXplID0gc2l6ZW9mKHN0cnVjdCBzYXZlZF9zdGF0
ZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBUFBfQ01EX0lOSVRfV0lORE9X
OgotICAgICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBiZWluZyBzaG93biwgZ2V0IGl0IHJlYWR5
LgotICAgICAgICAgICAgaWYgKGVuZ2luZS0+YXBwLT53aW5kb3cgIT0gTlVMTCkgewotICAgICAg
ICAgICAgICAgIGVuZ2luZV9pbml0X2Rpc3BsYXkoZW5naW5lKTsKLSAgICAgICAgICAgICAgICBl
bmdpbmVfZHJhd19mcmFtZShlbmdpbmUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQVBQX0NNRF9URVJNX1dJTkRPVzoKLSAgICAgICAgICAgIC8vIFRo
ZSB3aW5kb3cgaXMgYmVpbmcgaGlkZGVuIG9yIGNsb3NlZCwgY2xlYW4gaXQgdXAuCi0gICAgICAg
ICAgICBlbmdpbmVfdGVybV9kaXNwbGF5KGVuZ2luZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBUFBfQ01EX0dBSU5FRF9GT0NVUzoKLSAgICAgICAgICAgIC8vIFdoZW4gb3Vy
IGFwcCBnYWlucyBmb2N1cywgd2Ugc3RhcnQgbW9uaXRvcmluZyB0aGUgYWNjZWxlcm9tZXRlci4K
LSAgICAgICAgICAgIGlmIChlbmdpbmUtPmFjY2VsZXJvbWV0ZXJTZW5zb3IgIT0gTlVMTCkgewot
ICAgICAgICAgICAgICAgIEFTZW5zb3JFdmVudFF1ZXVlX2VuYWJsZVNlbnNvcihlbmdpbmUtPnNl
bnNvckV2ZW50UXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUtPmFjY2VsZXJv
bWV0ZXJTZW5zb3IpOwotICAgICAgICAgICAgICAgIC8vIFdlJ2QgbGlrZSB0byBnZXQgNjAgZXZl
bnRzIHBlciBzZWNvbmQgKGluIHVzKS4KLSAgICAgICAgICAgICAgICBBU2Vuc29yRXZlbnRRdWV1
ZV9zZXRFdmVudFJhdGUoZW5naW5lLT5zZW5zb3JFdmVudFF1ZXVlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgZW5naW5lLT5hY2NlbGVyb21ldGVyU2Vuc29yLCAoMTAwMEwvNjApKjEwMDApOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVBQX0NNRF9M
T1NUX0ZPQ1VTOgotICAgICAgICAgICAgLy8gV2hlbiBvdXIgYXBwIGxvc2VzIGZvY3VzLCB3ZSBz
dG9wIG1vbml0b3JpbmcgdGhlIGFjY2VsZXJvbWV0ZXIuCi0gICAgICAgICAgICAvLyBUaGlzIGlz
IHRvIGF2b2lkIGNvbnN1bWluZyBiYXR0ZXJ5IHdoaWxlIG5vdCBiZWluZyB1c2VkLgotICAgICAg
ICAgICAgaWYgKGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNvciAhPSBOVUxMKSB7Ci0gICAgICAg
ICAgICAgICAgQVNlbnNvckV2ZW50UXVldWVfZGlzYWJsZVNlbnNvcihlbmdpbmUtPnNlbnNvckV2
ZW50UXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUtPmFjY2VsZXJvbWV0ZXJT
ZW5zb3IpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gQWxzbyBzdG9wIGFuaW1hdGlu
Zy4KLSAgICAgICAgICAgIGVuZ2luZS0+YW5pbWF0aW5nID0gMDsKLSAgICAgICAgICAgIGVuZ2lu
ZV9kcmF3X2ZyYW1lKGVuZ2luZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLS8q
KgotICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBvZiBhIG5hdGl2ZSBhcHBsaWNhdGlv
biB0aGF0IGlzIHVzaW5nCi0gKiBhbmRyb2lkX25hdGl2ZV9hcHBfZ2x1ZS4gIEl0IHJ1bnMgaW4g
aXRzIG93biB0aHJlYWQsIHdpdGggaXRzIG93bgotICogZXZlbnQgbG9vcCBmb3IgcmVjZWl2aW5n
IGlucHV0IGV2ZW50cyBhbmQgZG9pbmcgb3RoZXIgdGhpbmdzLgotICovCi12b2lkIGFuZHJvaWRf
bWFpbihzdHJ1Y3QgYW5kcm9pZF9hcHAqIHN0YXRlKSB7Ci0gICAgc3RydWN0IGVuZ2luZSBlbmdp
bmU7Ci0KLSAgICAvLyBNYWtlIHN1cmUgZ2x1ZSBpc24ndCBzdHJpcHBlZC4KLSAgICBhcHBfZHVt
bXkoKTsKLQotICAgIG1lbXNldCgmZW5naW5lLCAwLCBzaXplb2YoZW5naW5lKSk7Ci0gICAgc3Rh
dGUtPnVzZXJEYXRhID0gJmVuZ2luZTsKLSAgICBzdGF0ZS0+b25BcHBDbWQgPSBlbmdpbmVfaGFu
ZGxlX2NtZDsKLSAgICBzdGF0ZS0+b25JbnB1dEV2ZW50ID0gZW5naW5lX2hhbmRsZV9pbnB1dDsK
LSAgICBlbmdpbmUuYXBwID0gc3RhdGU7Ci0KLSAgICAvLyBQcmVwYXJlIHRvIG1vbml0b3IgYWNj
ZWxlcm9tZXRlcgotICAgIGVuZ2luZS5zZW5zb3JNYW5hZ2VyID0gQVNlbnNvck1hbmFnZXJfZ2V0
SW5zdGFuY2UoKTsKLSAgICBlbmdpbmUuYWNjZWxlcm9tZXRlclNlbnNvciA9IEFTZW5zb3JNYW5h
Z2VyX2dldERlZmF1bHRTZW5zb3IoZW5naW5lLnNlbnNvck1hbmFnZXIsCi0gICAgICAgICAgICBB
U0VOU09SX1RZUEVfQUNDRUxFUk9NRVRFUik7Ci0gICAgZW5naW5lLnNlbnNvckV2ZW50UXVldWUg
PSBBU2Vuc29yTWFuYWdlcl9jcmVhdGVFdmVudFF1ZXVlKGVuZ2luZS5zZW5zb3JNYW5hZ2VyLAot
ICAgICAgICAgICAgc3RhdGUtPmxvb3BlciwgTE9PUEVSX0lEX1VTRVIsIE5VTEwsIE5VTEwpOwot
Ci0gICAgaWYgKHN0YXRlLT5zYXZlZFN0YXRlICE9IE5VTEwpIHsKLSAgICAgICAgLy8gV2UgYXJl
IHN0YXJ0aW5nIHdpdGggYSBwcmV2aW91cyBzYXZlZCBzdGF0ZTsgcmVzdG9yZSBmcm9tIGl0Lgot
ICAgICAgICBlbmdpbmUuc3RhdGUgPSAqKHN0cnVjdCBzYXZlZF9zdGF0ZSopc3RhdGUtPnNhdmVk
U3RhdGU7Ci0gICAgfQotCi0gICAgLy8gbG9vcCB3YWl0aW5nIGZvciBzdHVmZiB0byBkby4KLQot
ICAgIHdoaWxlICgxKSB7Ci0gICAgICAgIC8vIFJlYWQgYWxsIHBlbmRpbmcgZXZlbnRzLgotICAg
ICAgICBpbnQgaWRlbnQ7Ci0gICAgICAgIGludCBldmVudHM7Ci0gICAgICAgIHN0cnVjdCBhbmRy
b2lkX3BvbGxfc291cmNlKiBzb3VyY2U7Ci0KLSAgICAgICAgLy8gSWYgbm90IGFuaW1hdGluZywg
d2Ugd2lsbCBibG9jayBmb3JldmVyIHdhaXRpbmcgZm9yIGV2ZW50cy4KLSAgICAgICAgLy8gSWYg
YW5pbWF0aW5nLCB3ZSBsb29wIHVudGlsIGFsbCBldmVudHMgYXJlIHJlYWQsIHRoZW4gY29udGlu
dWUKLSAgICAgICAgLy8gdG8gZHJhdyB0aGUgbmV4dCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
ICAgIHdoaWxlICgoaWRlbnQ9QUxvb3Blcl9wb2xsQWxsKGVuZ2luZS5hbmltYXRpbmcgPyAwIDog
LTEsIE5VTEwsICZldmVudHMsCi0gICAgICAgICAgICAgICAgKHZvaWQqKikmc291cmNlKSkgPj0g
MCkgewotCi0gICAgICAgICAgICAvLyBQcm9jZXNzIHRoaXMgZXZlbnQuCi0gICAgICAgICAgICBp
ZiAoc291cmNlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzb3VyY2UtPnByb2Nlc3Moc3Rh
dGUsIHNvdXJjZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIElmIGEgc2Vuc29y
IGhhcyBkYXRhLCBwcm9jZXNzIGl0IG5vdy4KLSAgICAgICAgICAgIGlmIChpZGVudCA9PSBMT09Q
RVJfSURfVVNFUikgewotICAgICAgICAgICAgICAgIGlmIChlbmdpbmUuYWNjZWxlcm9tZXRlclNl
bnNvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTZW5zb3JFdmVudCBldmVudDsK
LSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKEFTZW5zb3JFdmVudFF1ZXVlX2dldEV2ZW50cyhl
bmdpbmUuc2Vuc29yRXZlbnRRdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXZl
bnQsIDEpID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgTE9HSSgiYWNjZWxlcm9tZXRl
cjogeD0lZiB5PSVmIHo9JWYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVu
dC5hY2NlbGVyYXRpb24ueCwgZXZlbnQuYWNjZWxlcmF0aW9uLnksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGV2ZW50LmFjY2VsZXJhdGlvbi56KTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
Q2hlY2sgaWYgd2UgYXJlIGV4aXRpbmcuCi0gICAgICAgICAgICBpZiAoc3RhdGUtPmRlc3Ryb3lS
ZXF1ZXN0ZWQgIT0gMCkgewotICAgICAgICAgICAgICAgIGVuZ2luZV90ZXJtX2Rpc3BsYXkoJmVu
Z2luZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgaWYgKGVuZ2luZS5hbmltYXRpbmcpIHsKLSAgICAgICAgICAgIC8vIERvbmUg
d2l0aCBldmVudHM7IGRyYXcgbmV4dCBhbmltYXRpb24gZnJhbWUuCi0gICAgICAgICAgICBlbmdp
bmUuc3RhdGUuYW5nbGUgKz0gLjAxZjsKLSAgICAgICAgICAgIGlmIChlbmdpbmUuc3RhdGUuYW5n
bGUgPiAxKSB7Ci0gICAgICAgICAgICAgICAgZW5naW5lLnN0YXRlLmFuZ2xlID0gMDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgLy8gRHJhd2luZyBpcyB0aHJvdHRsZWQgdG8gdGhlIHNj
cmVlbiB1cGRhdGUgcmF0ZSwgc28gdGhlcmUKLSAgICAgICAgICAgIC8vIGlzIG5vIG5lZWQgdG8g
ZG8gdGltaW5nIGhlcmUuCi0gICAgICAgICAgICBlbmdpbmVfZHJhd19mcmFtZSgmZW5naW5lKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLS8vRU5EX0lOQ0xVREUoYWxsKQpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5n
L3Rlc3QvYW5kcm9pZC9hcG10ZXN0L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRp
b19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwJ
KHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
d2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9yZXMv
dmFsdWVzL3N0cmluZ3MueG1sCShub25leGlzdGVudCkKQEAgLTEsNCArMCwwIEBACi08P3htbCB2
ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPHJlc291cmNlcz4KLSAgICA8c3RyaW5n
IG5hbWU9ImFwcF9uYW1lIj5hcG10ZXN0PC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L2FwbXRlc3QubQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hcG10
ZXN0Lm0JKHJldmlzaW9uIDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FwbXRlc3QubQkobm9u
ZXhpc3RlbnQpCkBAIC0xLDM1NSArMCwwIEBACi1mdW5jdGlvbiBhcG10ZXN0KHRhc2ssIHRlc3Ru
YW1lLCBmaWxlcGF0aCwgY2FzZW51bWJlciwgbGVnYWN5KQotJUFQTVRFU1QgaXMgYSB0b29sIHRv
IHByb2Nlc3MgQVBNIGZpbGUgc2V0cyBhbmQgZWFzaWx5IGRpc3BsYXkgdGhlIG91dHB1dC4KLSUg
ICBBUE1URVNUKFRBU0ssIFRFU1ROQU1FLCBDQVNFTlVNQkVSKSBwZXJmb3JtcyBvbmUgb2Ygc2V2
ZXJhbCBUQVNLczoKLSUgICAgICd0ZXN0JyAgUHJvY2Vzc2VzIHRoZSBmaWxlcyB0byBwcm9kdWNl
IHRlc3Qgb3V0cHV0LgotJSAgICAgJ2xpc3QnICBQcmludHMgYSBsaXN0IG9mIGNhc2VzIGluIHRo
ZSB0ZXN0IHNldCwgcHJlY2VkZWQgYnkgdGhlaXIKLSUgICAgICAgICAgICAgQ0FTRU5VTUJFUnMu
Ci0lICAgICAnc2hvdycgIFVzZXMgc3BjbGFiIHRvIHNob3cgdGhlIHRlc3QgY2FzZSBzcGVjaWZp
ZWQgYnkgdGhlCi0lICAgICAgICAgICAgIENBU0VOVU1CRVIgcGFyYW1ldGVyLgotJQotJSAgIHVz
aW5nIGEgc2V0IG9mIHRlc3QgZmlsZXMgZGV0ZXJtaW5lZCBieSBURVNUTkFNRToKLSUgICAgICdh
bGwnICAgQWxsIHRlc3RzLgotJSAgICAgJ2FwbScgICBUaGUgc3RhbmRhcmQgQVBNIHRlc3Qgc2V0
IChkZWZhdWx0KS4KLSUgICAgICdhcG1tJyAgVGhlIG1vYmlsZSBBUE0gdGVzdCBzZXQuCi0lICAg
ICAnYWVjJyAgIFRoZSBBRUMgdGVzdCBzZXQuCi0lICAgICAnYWVjbScgIFRoZSBBRUNNIHRlc3Qg
c2V0LgotJSAgICAgJ2FnYycgICBUaGUgQUdDIHRlc3Qgc2V0LgotJSAgICAgJ25zJyAgICBUaGUg
TlMgdGVzdCBzZXQuCi0lICAgICAndmFkJyAgIFRoZSBWQUQgdGVzdCBzZXQuCi0lCi0lICAgRklM
RVBBVEggc3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSB0ZXN0IGRhdGEgZmlsZXMuCi0lCi0lICAg
Q0FTRU5VTUJFUiBjYW4gYmUgdXNlZCB0byBzZWxlY3QgYSBzaW5nbGUgdGVzdCBjYXNlLiBPbWl0
IENBU0VOVU1CRVIsCi0lICAgb3Igc2V0IHRvIHplcm8sIHRvIHVzZSBhbGwgdGVzdCBjYXNlcy4K
LSUKLQotaWYgbmFyZ2luIDwgNSB8fCBpc2VtcHR5KGxlZ2FjeSkKLSAgJSBTZXQgdG8gdHJ1ZSB0
byBydW4gb2xkIFZRRSByZWNvcmRpbmdzLgotICBsZWdhY3kgPSBmYWxzZTsKLWVuZAotCi1pZiBu
YXJnaW4gPCA0IHx8IGlzZW1wdHkoY2FzZW51bWJlcikKLSAgY2FzZW51bWJlciA9IDA7Ci1lbmQK
LQotaWYgbmFyZ2luIDwgMyB8fCBpc2VtcHR5KGZpbGVwYXRoKQotICBmaWxlcGF0aCA9ICdkYXRh
Lyc7Ci1lbmQKLQotaWYgbmFyZ2luIDwgMiB8fCBpc2VtcHR5KHRlc3RuYW1lKQotICB0ZXN0bmFt
ZSA9ICdhbGwnOwotZW5kCi0KLWlmIG5hcmdpbiA8IDEgfHwgaXNlbXB0eSh0YXNrKQotICB0YXNr
ID0gJ3Rlc3QnOwotZW5kCi0KLWlmIH5zdHJjbXAodGFzaywgJ3Rlc3QnKSAmJiB+c3RyY21wKHRh
c2ssICdsaXN0JykgJiYgfnN0cmNtcCh0YXNrLCAnc2hvdycpCi0gIGVycm9yKFsnVEFTSyAnIHRh
c2sgJyBpcyBub3QgcmVjb2duaXplZCddKTsKLWVuZAotCi1pZiBjYXNlbnVtYmVyID09IDAgJiYg
c3RyY21wKHRhc2ssICdzaG93JykKLSAgZXJyb3IoWydDQVNFTlVNQkVSIG11c3QgYmUgc3BlY2lm
aWVkIGZvciBUQVNLICcgdGFza10pOwotZW5kCi0KLWlucGF0aCA9IFtmaWxlcGF0aCAnaW5wdXQv
J107Ci1vdXRwYXRoID0gW2ZpbGVwYXRoICdvdXRwdXQvJ107Ci1yZWZwYXRoID0gW2ZpbGVwYXRo
ICdyZWZlcmVuY2UvJ107Ci0KLWlmIHN0cmNtcCh0ZXN0bmFtZSwgJ2FsbCcpCi0gIHRlc3RzID0g
eydhcG0nLCdhcG1tJywnYWVjJywnYWVjbScsJ2FnYycsJ25zJywndmFkJ307Ci1lbHNlCi0gIHRl
c3RzID0ge3Rlc3RuYW1lfTsKLWVuZAotCi1pZiBsZWdhY3kKLSAgcHJvZ25hbWUgPSAnLi90ZXN0
JzsKLWVsc2UKLSAgcHJvZ25hbWUgPSAnLi9wcm9jZXNzX3Rlc3QnOwotZW5kCi0KLWdsb2JhbCBm
YXJGaWxlOwotZ2xvYmFsIG5lYXJGaWxlOwotZ2xvYmFsIGV2ZW50RmlsZTsKLWdsb2JhbCBkZWxh
eUZpbGU7Ci1nbG9iYWwgZHJpZnRGaWxlOwotCi1pZiBsZWdhY3kKLSAgZmFyRmlsZSA9ICd2cWVG
YXIucGNtJzsKLSAgbmVhckZpbGUgPSAndnFlTmVhci5wY20nOwotICBldmVudEZpbGUgPSAndnFl
RXZlbnQuZGF0JzsKLSAgZGVsYXlGaWxlID0gJ3ZxZUJ1Zi5kYXQnOwotICBkcmlmdEZpbGUgPSAn
dnFlRHJpZnQuZGF0JzsKLWVsc2UKLSAgZmFyRmlsZSA9ICdhcG1fZmFyLnBjbSc7Ci0gIG5lYXJG
aWxlID0gJ2FwbV9uZWFyLnBjbSc7Ci0gIGV2ZW50RmlsZSA9ICdhcG1fZXZlbnQuZGF0JzsKLSAg
ZGVsYXlGaWxlID0gJ2FwbV9kZWxheS5kYXQnOwotICBkcmlmdEZpbGUgPSAnYXBtX2RyaWZ0LmRh
dCc7Ci1lbmQKLQotc2ltdWxhdGVNb2RlID0gZmFsc2U7Ci1uRXJyID0gMDsKLW5DYXNlcyA9IDA7
Ci1mb3IgaT0xOmxlbmd0aCh0ZXN0cykKLSAgc2ltdWxhdGVNb2RlID0gZmFsc2U7Ci0KLSAgaWYg
c3RyY21wKHRlc3Rze2l9LCAnYXBtJykKLSAgICB0ZXN0ZGlyID0gWydhcG0vJ107Ci0gICAgb3V0
ZmlsZSA9IFsnb3V0J107Ci0gICAgaWYgbGVnYWN5Ci0gICAgICBvcHQgPSBbJy1lYyAxIC1hZ2Mg
MiAtbmMgMiAtdmFkIDMnXTsKLSAgICBlbHNlCi0gICAgICBvcHQgPSBbJy0tbm9fcHJvZ3Jlc3Mg
LWhwZicgLi4uCi0gICAgICAgICAgJyAtYWVjIC0tZHJpZnRfY29tcGVuc2F0aW9uIC1hZ2MgLS1m
aXhlZF9kaWdpdGFsJyAuLi4KLSAgICAgICAgICAnIC1ucyAtLW5zX21vZGVyYXRlIC12YWQnXTsK
LSAgICBlbmQKLQotICBlbHNlaWYgc3RyY21wKHRlc3Rze2l9LCAnYXBtLXN3YicpCi0gICAgc2lt
dWxhdGVNb2RlID0gdHJ1ZTsKLSAgICB0ZXN0ZGlyID0gWydhcG0tc3diLyddOwotICAgIG91dGZp
bGUgPSBbJ291dCddOwotICAgIGlmIGxlZ2FjeQotICAgICAgb3B0ID0gWyctZnMgMzIwMDAgLWVj
IDEgLWFnYyAyIC1uYyAyJ107Ci0gICAgZWxzZQotICAgICAgb3B0ID0gWyctLW5vX3Byb2dyZXNz
IC1mcyAzMjAwMCAtaHBmJyAuLi4KLSAgICAgICAgICAnIC1hZWMgLS1kcmlmdF9jb21wZW5zYXRp
b24gLWFnYyAtLWFkYXB0aXZlX2RpZ2l0YWwnIC4uLgotICAgICAgICAgICcgLW5zIC0tbnNfbW9k
ZXJhdGUgLXZhZCddOwotICAgIGVuZAotICBlbHNlaWYgc3RyY21wKHRlc3Rze2l9LCAnYXBtbScp
Ci0gICAgdGVzdGRpciA9IFsnYXBtbS8nXTsKLSAgICBvdXRmaWxlID0gWydvdXQnXTsKLSAgICBv
cHQgPSBbJy1hZWMgLS1kcmlmdF9jb21wZW5zYXRpb24gLWFnYyAtLWZpeGVkX2RpZ2l0YWwgLWhw
ZiAtbnMgJyAuLi4KLSAgICAgICAgJy0tbnNfbW9kZXJhdGUnXTsKLQotICBlbHNlCi0gICAgZXJy
b3IoWydURVNUTkFNRSAnIHRlc3Rze2l9ICcgaXMgbm90IHJlY29nbml6ZWQnXSk7Ci0gIGVuZAot
Ci0gIGlucGF0aHRlc3QgPSBbaW5wYXRoIHRlc3RkaXJdOwotICBvdXRwYXRodGVzdCA9IFtvdXRw
YXRoIHRlc3RkaXJdOwotICByZWZwYXRodGVzdCA9IFtyZWZwYXRoIHRlc3RkaXJdOwotCi0gIGlm
IH5leGlzdChpbnBhdGh0ZXN0LCdkaXInKQotICAgIGVycm9yKFsnSW5wdXQgZGlyZWN0b3J5ICcg
aW5wYXRodGVzdCAnIGRvZXMgbm90IGV4aXN0J10pOwotICBlbmQKLQotICBpZiB+ZXhpc3QocmVm
cGF0aHRlc3QsJ2RpcicpCi0gICAgd2FybmluZyhbJ1JlZmVyZW5jZSBkaXJlY3RvcnkgJyByZWZw
YXRodGVzdCAnIGRvZXMgbm90IGV4aXN0J10pOwotICBlbmQKLQotICBbc3RhdHVzLCBlcnJNc2dd
ID0gbWtkaXIob3V0cGF0aHRlc3QpOwotICBpZiAoc3RhdHVzID09IDApCi0gICAgZXJyb3IoZXJy
TXNnKTsKLSAgZW5kCi0KLSAgW25FcnIsIG5DYXNlc10gPSByZWN1cnNlRGlyKGlucGF0aHRlc3Qs
IG91dHBhdGh0ZXN0LCByZWZwYXRodGVzdCwgb3V0ZmlsZSwgLi4uCi0gICAgICBwcm9nbmFtZSwg
b3B0LCBzaW11bGF0ZU1vZGUsIG5FcnIsIG5DYXNlcywgdGFzaywgY2FzZW51bWJlciwgbGVnYWN5
KTsKLQotICBpZiBzdHJjbXAodGFzaywgJ3Rlc3QnKSB8fCBzdHJjbXAodGFzaywgJ3Nob3cnKQot
ICAgIHN5c3RlbShbJ3JtICcgZmFyRmlsZV0pOwotICAgIHN5c3RlbShbJ3JtICcgbmVhckZpbGVd
KTsKLSAgICBpZiBzaW11bGF0ZU1vZGUgPT0gZmFsc2UKLSAgICAgIHN5c3RlbShbJ3JtICcgZXZl
bnRGaWxlXSk7Ci0gICAgICBzeXN0ZW0oWydybSAnIGRlbGF5RmlsZV0pOwotICAgICAgc3lzdGVt
KFsncm0gJyBkcmlmdEZpbGVdKTsKLSAgICBlbmQKLSAgZW5kCi1lbmQKLQotaWYgfnN0cmNtcCh0
YXNrLCAnbGlzdCcpCi0gIGlmIG5FcnIgPT0gMAotICAgIGZwcmludGYoMSwgJ1xuQWxsIGZpbGVz
IGFyZSBiaXQtZXhhY3QgdG8gcmVmZXJlbmNlXG4nLCBuRXJyKTsKLSAgZWxzZQotICAgIGZwcmlu
dGYoMSwgJ1xuJWQgZmlsZXMgYXJlIE5PVCBiaXQtZXhhY3QgdG8gcmVmZXJlbmNlXG4nLCBuRXJy
KTsKLSAgZW5kCi1lbmQKLQotCi1mdW5jdGlvbiBbbkVyck91dCwgbkNhc2VzXSA9IHJlY3Vyc2VE
aXIoaW5wYXRoLCBvdXRwYXRoLCByZWZwYXRoLCAuLi4KLSAgICBvdXRmaWxlLCBwcm9nbmFtZSwg
b3B0LCBzaW11bGF0ZU1vZGUsIG5FcnIsIG5DYXNlcywgdGFzaywgY2FzZW51bWJlciwgLi4uCi0g
ICAgbGVnYWN5KQotCi1nbG9iYWwgZmFyRmlsZTsKLWdsb2JhbCBuZWFyRmlsZTsKLWdsb2JhbCBl
dmVudEZpbGU7Ci1nbG9iYWwgZGVsYXlGaWxlOwotZ2xvYmFsIGRyaWZ0RmlsZTsKLQotZGlycyA9
IGRpcihpbnBhdGgpOwotbkRpcnMgPSAwOwotbkVyck91dCA9IG5FcnI7Ci1mb3IgaT0zOmxlbmd0
aChkaXJzKSAlIHNraXAgLiBhbmQgLi4KLSAgbkRpcnMgPSBuRGlycyArIGRpcnMoaSkuaXNkaXI7
Ci1lbmQKLQotCi1pZiBuRGlycyA9PSAwCi0gIG5DYXNlcyA9IG5DYXNlcyArIDE7Ci0KLSAgaWYg
Y2FzZW51bWJlciA9PSBuQ2FzZXMgfHwgY2FzZW51bWJlciA9PSAwCi0KLSAgICBpZiBzdHJjbXAo
dGFzaywgJ2xpc3QnKQotICAgICAgZnByaW50ZihbbnVtMnN0cihuQ2FzZXMpICcuICcgb3V0Zmls
ZSAnXG4nXSkKLSAgICBlbHNlCi0gICAgICB2YWRvdXRmaWxlID0gWyd2YWRfJyBvdXRmaWxlICcu
ZGF0J107Ci0gICAgICBvdXRmaWxlID0gW291dGZpbGUgJy5wY20nXTsKLQotICAgICAgJSBDaGVj
ayBmb3IgVkFEIHRlc3QKLSAgICAgIHZhZFRlc3QgPSAwOwotICAgICAgaWYgfmlzZW1wdHkoZmlu
ZHN0cihvcHQsICctdmFkJykpCi0gICAgICAgIHZhZFRlc3QgPSAxOwotICAgICAgICBpZiBsZWdh
Y3kKLSAgICAgICAgICBvcHQgPSBbb3B0ICcgJyBvdXRwYXRoIHZhZG91dGZpbGVdOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgb3B0ID0gW29wdCAnIC0tdmFkX291dF9maWxlICcgb3V0cGF0aCB2
YWRvdXRmaWxlXTsKLSAgICAgICAgZW5kCi0gICAgICBlbmQKLQotICAgICAgaWYgZXhpc3QoW2lu
cGF0aCAndnFlRmFyLnBjbSddKQotICAgICAgICBzeXN0ZW0oWydsbiAtcyAtZiAnIGlucGF0aCAn
dnFlRmFyLnBjbSAnIGZhckZpbGVdKTsKLSAgICAgIGVsc2VpZiBleGlzdChbaW5wYXRoICdhcG1f
ZmFyLnBjbSddKQotICAgICAgICBzeXN0ZW0oWydsbiAtcyAtZiAnIGlucGF0aCAnYXBtX2Zhci5w
Y20gJyBmYXJGaWxlXSk7Ci0gICAgICBlbmQKLQotICAgICAgaWYgZXhpc3QoW2lucGF0aCAndnFl
TmVhci5wY20nXSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMgLWYgJyBpbnBhdGggJ3ZxZU5lYXIu
cGNtICcgbmVhckZpbGVdKTsKLSAgICAgIGVsc2VpZiBleGlzdChbaW5wYXRoICdhcG1fbmVhci5w
Y20nXSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMgLWYgJyBpbnBhdGggJ2FwbV9uZWFyLnBjbSAn
IG5lYXJGaWxlXSk7Ci0gICAgICBlbmQKLQotICAgICAgaWYgZXhpc3QoW2lucGF0aCAndnFlRXZl
bnQuZGF0J10pCi0gICAgICAgIHN5c3RlbShbJ2xuIC1zIC1mICcgaW5wYXRoICd2cWVFdmVudC5k
YXQgJyBldmVudEZpbGVdKTsKLSAgICAgIGVsc2VpZiBleGlzdChbaW5wYXRoICdhcG1fZXZlbnQu
ZGF0J10pCi0gICAgICAgIHN5c3RlbShbJ2xuIC1zIC1mICcgaW5wYXRoICdhcG1fZXZlbnQuZGF0
ICcgZXZlbnRGaWxlXSk7Ci0gICAgICBlbmQKLQotICAgICAgaWYgZXhpc3QoW2lucGF0aCAndnFl
QnVmLmRhdCddKQotICAgICAgICBzeXN0ZW0oWydsbiAtcyAtZiAnIGlucGF0aCAndnFlQnVmLmRh
dCAnIGRlbGF5RmlsZV0pOwotICAgICAgZWxzZWlmIGV4aXN0KFtpbnBhdGggJ2FwbV9kZWxheS5k
YXQnXSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMgLWYgJyBpbnBhdGggJ2FwbV9kZWxheS5kYXQg
JyBkZWxheUZpbGVdKTsKLSAgICAgIGVuZAotCi0gICAgICBpZiBleGlzdChbaW5wYXRoICd2cWVT
a2V3LmRhdCddKQotICAgICAgICBzeXN0ZW0oWydsbiAtcyAtZiAnIGlucGF0aCAndnFlU2tldy5k
YXQgJyBkcmlmdEZpbGVdKTsKLSAgICAgIGVsc2VpZiBleGlzdChbaW5wYXRoICd2cWVEcmlmdC5k
YXQnXSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMgLWYgJyBpbnBhdGggJ3ZxZURyaWZ0LmRhdCAn
IGRyaWZ0RmlsZV0pOwotICAgICAgZWxzZWlmIGV4aXN0KFtpbnBhdGggJ2FwbV9kcmlmdC5kYXQn
XSkKLSAgICAgICAgc3lzdGVtKFsnbG4gLXMgLWYgJyBpbnBhdGggJ2FwbV9kcmlmdC5kYXQgJyBk
cmlmdEZpbGVdKTsKLSAgICAgIGVuZAotCi0gICAgICBpZiBzaW11bGF0ZU1vZGUgPT0gZmFsc2UK
LSAgICAgICAgY29tbWFuZCA9IFtwcm9nbmFtZSAnIC1vICcgb3V0cGF0aCBvdXRmaWxlICcgJyBv
cHRdOwotICAgICAgZWxzZQotICAgICAgICBpZiBsZWdhY3kKLSAgICAgICAgICBpbnB1dENtZCA9
IFsnIC1pbiAnIG5lYXJGaWxlXTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIGlucHV0Q21kID0g
WycgLWkgJyBuZWFyRmlsZV07Ci0gICAgICAgIGVuZAotCi0gICAgICAgIGlmIGV4aXN0KFtmYXJG
aWxlXSkKLSAgICAgICAgICBpZiBsZWdhY3kKLSAgICAgICAgICAgIGlucHV0Q21kID0gWycgLWlm
ICcgZmFyRmlsZSBpbnB1dENtZF07Ci0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5wdXRD
bWQgPSBbJyAtaXIgJyBmYXJGaWxlIGlucHV0Q21kXTsKLSAgICAgICAgICBlbmQKLSAgICAgICAg
ZW5kCi0gICAgICAgIGNvbW1hbmQgPSBbcHJvZ25hbWUgaW5wdXRDbWQgJyAtbyAnIG91dHBhdGgg
b3V0ZmlsZSAnICcgb3B0XTsKLSAgICAgIGVuZAotICAgICAgJSBUaGlzIHByZXZlbnRzIE1BVExB
QiBmcm9tIHVzaW5nIGl0cyBvd24gQyBsaWJyYXJpZXMuCi0gICAgICBzaGVsbGNtZCA9IFsnYmFz
aCAtYyAidW5zZXQgTERfTElCUkFSWV9QQVRIOyddOwotICAgICAgZnByaW50ZihbY29tbWFuZCAn
XG4nXSk7Ci0gICAgICBbc3RhdHVzLCByZXN1bHRdID0gc3lzdGVtKFtzaGVsbGNtZCBjb21tYW5k
ICciJ10pOwotICAgICAgZnByaW50ZihyZXN1bHQpOwotCi0gICAgICBmcHJpbnRmKFsnUmVmZXJl
bmNlIGZpbGU6ICcgcmVmcGF0aCBvdXRmaWxlICdcbiddKTsKLQotICAgICAgaWYgdmFkVGVzdCA9
PSAxCi0gICAgICAgIGVxdWFsX3RvX3JlZiA9IGFyZV9maWxlc19lcXVhbChbb3V0cGF0aCB2YWRv
dXRmaWxlXSwgLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVm
cGF0aCB2YWRvdXRmaWxlXSwgLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnaW50OCcpOwotICAgICAgICBpZiB+ZXF1YWxfdG9fcmVmCi0gICAgICAgICAgbkVyciA9
IG5FcnIgKyAxOwotICAgICAgICBlbmQKLSAgICAgIGVuZAotCi0gICAgICBbZXF1YWxfdG9fcmVm
LCBkaWZmdmVjdG9yXSA9IGFyZV9maWxlc19lcXVhbChbb3V0cGF0aCBvdXRmaWxlXSwgLi4uCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmcGF0
aCBvdXRmaWxlXSwgLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnaW50MTYnKTsKLSAgICAgIGlmIH5lcXVhbF90b19yZWYKLSAgICAgICAgbkVy
ciA9IG5FcnIgKyAxOwotICAgICAgZW5kCi0KLSAgICAgIGlmIHN0cmNtcCh0YXNrLCAnc2hvdycp
Ci0gICAgICAgICUgQXNzdW1lIHRoZSBsYXN0IGluaXQgZ2l2ZXMgdGhlIHNhbXBsZSByYXRlIG9m
IGludGVyZXN0LgotICAgICAgICBzdHJfaWR4ID0gc3RyZmluZChyZXN1bHQsICdTYW1wbGUgcmF0
ZTonKTsKLSAgICAgICAgZnMgPSBzdHIybnVtKHJlc3VsdChzdHJfaWR4KGVuZCkgKyAxMzpzdHJf
aWR4KGVuZCkgKyAxNykpOwotICAgICAgICBmcHJpbnRmKCdVc2luZyAlZCBIelxuJywgZnMpOwot
Ci0gICAgICAgIGlmIGV4aXN0KFtmYXJGaWxlXSkKLSAgICAgICAgICBzcGNsYWIoZnMsIGZhckZp
bGUsIG5lYXJGaWxlLCBbcmVmcGF0aCBvdXRmaWxlXSwgLi4uCi0gICAgICAgICAgICAgIFtvdXRw
YXRoIG91dGZpbGVdLCBkaWZmdmVjdG9yKTsKLSAgICAgICAgICAlc3BjbGFiKGZzLCBkaWZmdmVj
dG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHNwY2xhYihmcywgbmVhckZpbGUsIFtyZWZw
YXRoIG91dGZpbGVdLCBbb3V0cGF0aCBvdXRmaWxlXSwgLi4uCi0gICAgICAgICAgICAgIGRpZmZ2
ZWN0b3IpOwotICAgICAgICAgICVzcGNsYWIoZnMsIGRpZmZ2ZWN0b3IpOwotICAgICAgICBlbmQK
LSAgICAgIGVuZAotICAgIGVuZAotICBlbmQKLWVsc2UKLQotICBmb3IgaT0zOmxlbmd0aChkaXJz
KQotICAgIGlmIGRpcnMoaSkuaXNkaXIKLSAgICAgIFtuRXJyLCBuQ2FzZXNdID0gcmVjdXJzZURp
cihbaW5wYXRoIGRpcnMoaSkubmFtZSAnLyddLCBvdXRwYXRoLCAuLi4KLSAgICAgICAgICByZWZw
YXRoLFtvdXRmaWxlICdfJyBkaXJzKGkpLm5hbWVdLCBwcm9nbmFtZSwgb3B0LCAuLi4KLSAgICAg
ICAgICBzaW11bGF0ZU1vZGUsIG5FcnIsIG5DYXNlcywgdGFzaywgY2FzZW51bWJlciwgbGVnYWN5
KTsKLSAgICBlbmQKLSAgZW5kCi1lbmQKLW5FcnJPdXQgPSBuRXJyOwotCi1mdW5jdGlvbiBbYXJl
X2VxdWFsLCBkaWZmdmVjdG9yXSA9IC4uLgotICAgIGFyZV9maWxlc19lcXVhbChuZXdmaWxlLCBy
ZWZmaWxlLCBwcmVjaXNpb24sIGRpZmZ2ZWN0b3IpCi0KLWFyZV9lcXVhbCA9IGZhbHNlOwotZGlm
ZnZlY3RvciA9IDA7Ci1pZiB+ZXhpc3QobmV3ZmlsZSwnZmlsZScpCi0gIHdhcm5pbmcoWydPdXRw
dXQgZmlsZSAnIG5ld2ZpbGUgJyBkb2VzIG5vdCBleGlzdCddKTsgIAotICByZXR1cm4KLWVuZAot
Ci1pZiB+ZXhpc3QocmVmZmlsZSwnZmlsZScpCi0gIHdhcm5pbmcoWydSZWZlcmVuY2UgZmlsZSAn
IHJlZmZpbGUgJyBkb2VzIG5vdCBleGlzdCddKTsgIAotICByZXR1cm4KLWVuZAotCi1maWQgPSBm
b3BlbihuZXdmaWxlLCdyYicpOwotbmV3ID0gZnJlYWQoZmlkLGluZixwcmVjaXNpb24pOwotZmNs
b3NlKGZpZCk7Ci0KLWZpZCA9IGZvcGVuKHJlZmZpbGUsJ3JiJyk7Ci1yZWYgPSBmcmVhZChmaWQs
aW5mLHByZWNpc2lvbik7Ci1mY2xvc2UoZmlkKTsKLQotaWYgbGVuZ3RoKG5ldykgfj0gbGVuZ3Ro
KHJlZikKLSAgd2FybmluZygnUmVmZXJlbmNlIGlzIG5vdCB0aGUgc2FtZSBsZW5ndGggYXMgb3V0
cHV0Jyk7Ci0gIG1pbmxlbmd0aCA9IG1pbihsZW5ndGgobmV3KSwgbGVuZ3RoKHJlZikpOwotICBu
ZXcgPSBuZXcoMTptaW5sZW5ndGgpOwotICByZWYgPSByZWYoMTptaW5sZW5ndGgpOwotZW5kCi1k
aWZmdmVjdG9yID0gbmV3IC0gcmVmOwotCi1pZiBpc2VxdWFsKG5ldywgcmVmKQotICBmcHJpbnRm
KFtuZXdmaWxlICcgaXMgYml0LWV4YWN0IHRvIHJlZmVyZW5jZVxuJ10pOwotICBhcmVfZXF1YWwg
PSB0cnVlOwotZWxzZQotICBpZiBpc2VtcHR5KG5ldykKLSAgICB3YXJuaW5nKFtuZXdmaWxlICcg
aXMgZW1wdHknXSk7Ci0gICAgcmV0dXJuCi0gIGVuZAotICBzbnIgPSBzbnJzZWcobmV3LHJlZiw4
MCk7Ci0gIGZwcmludGYoJ1xuJyk7Ci0gIGFyZV9lcXVhbCA9IGZhbHNlOwotZW5kCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3By
b2Nlc3NpbmcvdGVzdC9hdWRpb19idWZmZXJfdG9vbHMuY2MKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNz
aW5nL3Rlc3QvYXVkaW9fYnVmZmVyX3Rvb2xzLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nl
c3NpbmcvdGVzdC9hdWRpb19idWZmZXJfdG9vbHMuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSw1NSAr
MCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0
aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZv
dW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRy
ZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4g
YmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9q
ZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUg
cm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRpb19idWZmZXJfdG9vbHMuaCIKLQotI2luY2x1ZGUg
PHN0cmluZy5oPgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotdm9p
ZCBTZXR1cEZyYW1lKGNvbnN0IFN0cmVhbUNvbmZpZyYgc3RyZWFtX2NvbmZpZywKLSAgICAgICAg
ICAgICAgICBzdGQ6OnZlY3RvcjxmbG9hdCo+KiBmcmFtZSwKLSAgICAgICAgICAgICAgICBzdGQ6
OnZlY3RvcjxmbG9hdD4qIGZyYW1lX3NhbXBsZXMpIHsKLSAgZnJhbWVfc2FtcGxlcy0+cmVzaXpl
KHN0cmVhbV9jb25maWcubnVtX2NoYW5uZWxzKCkgKgotICAgICAgICAgICAgICAgICAgICAgICAg
c3RyZWFtX2NvbmZpZy5udW1fZnJhbWVzKCkpOwotICBmcmFtZS0+cmVzaXplKHN0cmVhbV9jb25m
aWcubnVtX2NoYW5uZWxzKCkpOwotICBmb3IgKHNpemVfdCBjaCA9IDA7IGNoIDwgc3RyZWFtX2Nv
bmZpZy5udW1fY2hhbm5lbHMoKTsgKytjaCkgewotICAgICgqZnJhbWUpW2NoXSA9ICYoKmZyYW1l
X3NhbXBsZXMpW2NoICogc3RyZWFtX2NvbmZpZy5udW1fZnJhbWVzKCldOwotICB9Ci19Ci0KLXZv
aWQgQ29weVZlY3RvclRvQXVkaW9CdWZmZXIoY29uc3QgU3RyZWFtQ29uZmlnJiBzdHJlYW1fY29u
ZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGM6OkFycmF5Vmlldzxjb25zdCBm
bG9hdD4gc291cmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb0J1ZmZlciog
ZGVzdGluYXRpb24pIHsKLSAgc3RkOjp2ZWN0b3I8ZmxvYXQqPiBpbnB1dDsKLSAgc3RkOjp2ZWN0
b3I8ZmxvYXQ+IGlucHV0X3NhbXBsZXM7Ci0KLSAgU2V0dXBGcmFtZShzdHJlYW1fY29uZmlnLCAm
aW5wdXQsICZpbnB1dF9zYW1wbGVzKTsKLQotICBSVENfQ0hFQ0tfRVEoaW5wdXRfc2FtcGxlcy5z
aXplKCksIHNvdXJjZS5zaXplKCkpOwotICBtZW1jcHkoaW5wdXRfc2FtcGxlcy5kYXRhKCksIHNv
dXJjZS5kYXRhKCksCi0gICAgICAgICBzb3VyY2Uuc2l6ZSgpICogc2l6ZW9mKHNvdXJjZVswXSkp
OwotCi0gIGRlc3RpbmF0aW9uLT5Db3B5RnJvbSgmaW5wdXRbMF0sIHN0cmVhbV9jb25maWcpOwot
fQotCi12b2lkIEV4dHJhY3RWZWN0b3JGcm9tQXVkaW9CdWZmZXIoY29uc3QgU3RyZWFtQ29uZmln
JiBzdHJlYW1fY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlv
QnVmZmVyKiBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp2
ZWN0b3I8ZmxvYXQ+KiBkZXN0aW5hdGlvbikgewotICBzdGQ6OnZlY3RvcjxmbG9hdCo+IG91dHB1
dDsKLQotICBTZXR1cEZyYW1lKHN0cmVhbV9jb25maWcsICZvdXRwdXQsIGRlc3RpbmF0aW9uKTsK
LQotICBzb3VyY2UtPkNvcHlUbyhzdHJlYW1fY29uZmlnLCAmb3V0cHV0WzBdKTsKLX0KLQotfSAg
Ly8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2lu
Zy90ZXN0L2F1ZGlvX2J1ZmZlcl90b29scy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L2F1ZGlvX2J1ZmZlcl90b29scy5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVz
dC9hdWRpb19idWZmZXJfdG9vbHMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwg
UmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zl
cm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRk
aXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAot
ICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9y
cyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRo
ZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NF
U1NJTkdfVEVTVF9BVURJT19CVUZGRVJfVE9PTFNfSF8KLSNkZWZpbmUgV0VCUlRDX01PRFVMRVNf
QVVESU9fUFJPQ0VTU0lOR19URVNUX0FVRElPX0JVRkZFUl9UT09MU19IXwotCi0jaW5jbHVkZSA8
dmVjdG9yPgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2FycmF5X3ZpZXcuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL2F1ZGlvX2J1ZmZlci5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvaW5jbHVkZS9hdWRpb19wcm9jZXNzaW5n
LmgiCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIHRlc3QgewotCi0vLyBDb3BpZXMg
YSB2ZWN0b3IgaW50byBhbiBhdWRpb2J1ZmZlci4KLXZvaWQgQ29weVZlY3RvclRvQXVkaW9CdWZm
ZXIoY29uc3QgU3RyZWFtQ29uZmlnJiBzdHJlYW1fY29uZmlnLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBydGM6OkFycmF5Vmlldzxjb25zdCBmbG9hdD4gc291cmNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBdWRpb0J1ZmZlciogZGVzdGluYXRpb24pOwotCi0vLyBFeHRy
YWN0cyBhIHZlY3RvciBmcm9tIGFuIGF1ZGlvYnVmZmVyLgotdm9pZCBFeHRyYWN0VmVjdG9yRnJv
bUF1ZGlvQnVmZmVyKGNvbnN0IFN0cmVhbUNvbmZpZyYgc3RyZWFtX2NvbmZpZywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBdWRpb0J1ZmZlciogc291cmNlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGZsb2F0PiogZGVzdGluYXRpb24p
OwotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5k
aWYgIC8vIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9BVURJT19CVUZGRVJf
VE9PTFNfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlvX3Byb2Nlc3Npbmdfc2ltdWxhdG9y
LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2Vi
cnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlvX3Byb2Nlc3Npbmdfc2ltdWxh
dG9yLmNjCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hdWRpb19wcm9jZXNz
aW5nX3NpbXVsYXRvci5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDM5MSArMCwwIEBACi0vKgotICog
IENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9u
YWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBp
biB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5
Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291
cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Np
bmcvdGVzdC9hdWRpb19wcm9jZXNzaW5nX3NpbXVsYXRvci5oIgotCi0jaW5jbHVkZSA8YWxnb3Jp
dGhtPgotI2luY2x1ZGUgPGlvc3RyZWFtPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8
c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNr
cy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3N0cmluZ3V0aWxzLmgiCi0jaW5jbHVkZSAid2Vi
cnRjL2NvbW1vbl9hdWRpby9pbmNsdWRlL2F1ZGlvX3V0aWwuaCIKLSNpbmNsdWRlICJ3ZWJydGMv
bW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL2luY2x1ZGUvYXVkaW9fcHJvY2Vzc2luZy5oIgotCi1u
YW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLW5hbWVzcGFjZSB7Ci0KLXZvaWQg
Q29weUZyb21BdWRpb0ZyYW1lKGNvbnN0IEF1ZGlvRnJhbWUmIHNyYywgQ2hhbm5lbEJ1ZmZlcjxm
bG9hdD4qIGRlc3QpIHsKLSAgUlRDX0NIRUNLX0VRKHNyYy5udW1fY2hhbm5lbHNfLCBkZXN0LT5u
dW1fY2hhbm5lbHMoKSk7Ci0gIFJUQ19DSEVDS19FUShzcmMuc2FtcGxlc19wZXJfY2hhbm5lbF8s
IGRlc3QtPm51bV9mcmFtZXMoKSk7Ci0gIC8vIENvcHkgdGhlIGRhdGEgZnJvbSB0aGUgaW5wdXQg
YnVmZmVyLgotICBzdGQ6OnZlY3RvcjxmbG9hdD4gdG1wKHNyYy5zYW1wbGVzX3Blcl9jaGFubmVs
XyAqIHNyYy5udW1fY2hhbm5lbHNfKTsKLSAgUzE2VG9GbG9hdChzcmMuZGF0YV8sIHRtcC5zaXpl
KCksIHRtcC5kYXRhKCkpOwotICBEZWludGVybGVhdmUodG1wLmRhdGEoKSwgc3JjLnNhbXBsZXNf
cGVyX2NoYW5uZWxfLCBzcmMubnVtX2NoYW5uZWxzXywKLSAgICAgICAgICAgICAgIGRlc3QtPmNo
YW5uZWxzKCkpOwotfQotCi1zdGQ6OnN0cmluZyBHZXRJbmRleGVkT3V0cHV0V2F2RmlsZW5hbWUo
Y29uc3Qgc3RkOjpzdHJpbmcmIHdhdl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBjb3VudGVyKSB7Ci0gIHN0ZDo6c3RyaW5nc3RyZWFtIHNzOwotICBz
cyA8PCB3YXZfbmFtZS5zdWJzdHIoMCwgd2F2X25hbWUuc2l6ZSgpIC0gNCkgPDwgIl8iIDw8IGNv
dW50ZXIKLSAgICAgPDwgd2F2X25hbWUuc3Vic3RyKHdhdl9uYW1lLnNpemUoKSAtIDQpOwotICBy
ZXR1cm4gc3Muc3RyKCk7Ci19Ci0KLXZvaWQgV3JpdGVFY2hvTGlrZWxpaG9vZEdyYXBoRmlsZUhl
YWRlcihzdGQ6Om9mc3RyZWFtKiBvdXRwdXRfZmlsZSkgewotICAoKm91dHB1dF9maWxlKSA8PCAi
aW1wb3J0IG51bXB5IGFzIG5wIiA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgPDwgImlt
cG9ydCBtYXRwbG90bGliLnB5cGxvdCBhcyBwbHQiIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAg
ICAgICA8PCAieSA9IG5wLmFycmF5KFsiOwotfQotCi12b2lkIFdyaXRlRWNob0xpa2VsaWhvb2RH
cmFwaEZpbGVGb290ZXIoc3RkOjpvZnN0cmVhbSogb3V0cHV0X2ZpbGUpIHsKLSAgKCpvdXRwdXRf
ZmlsZSkgPDwgIl0pIiA8PCBzdGQ6OmVuZGwKLSAgICAgICAgICAgICAgICAgPDwgInggPSBucC5h
cmFuZ2UobGVuKHkpKSouMDEiIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICA8PCAicGx0
LnBsb3QoeCwgeSkiIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICA8PCAicGx0LnlsYWJl
bCgnRWNobyBsaWtlbGlob29kJykiIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICA8PCAi
cGx0LnhsYWJlbCgnVGltZSAocyknKSIgPDwgc3RkOjplbmRsCi0gICAgICAgICAgICAgICAgIDw8
ICJwbHQueWxpbShbMCwxXSkiIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICAgICA8PCAicGx0
LnNob3coKSIgPDwgc3RkOjplbmRsOwotfQotCi19ICAvLyBuYW1lc3BhY2UKLQotU2ltdWxhdGlv
blNldHRpbmdzOjpTaW11bGF0aW9uU2V0dGluZ3MoKSA9IGRlZmF1bHQ7Ci1TaW11bGF0aW9uU2V0
dGluZ3M6OlNpbXVsYXRpb25TZXR0aW5ncyhjb25zdCBTaW11bGF0aW9uU2V0dGluZ3MmKSA9IGRl
ZmF1bHQ7Ci1TaW11bGF0aW9uU2V0dGluZ3M6On5TaW11bGF0aW9uU2V0dGluZ3MoKSA9IGRlZmF1
bHQ7Ci0KLXZvaWQgQ29weVRvQXVkaW9GcmFtZShjb25zdCBDaGFubmVsQnVmZmVyPGZsb2F0PiYg
c3JjLCBBdWRpb0ZyYW1lKiBkZXN0KSB7Ci0gIFJUQ19DSEVDS19FUShzcmMubnVtX2NoYW5uZWxz
KCksIGRlc3QtPm51bV9jaGFubmVsc18pOwotICBSVENfQ0hFQ0tfRVEoc3JjLm51bV9mcmFtZXMo
KSwgZGVzdC0+c2FtcGxlc19wZXJfY2hhbm5lbF8pOwotICBmb3IgKHNpemVfdCBjaCA9IDA7IGNo
IDwgZGVzdC0+bnVtX2NoYW5uZWxzXzsgKytjaCkgewotICAgIGZvciAoc2l6ZV90IHNhbXBsZSA9
IDA7IHNhbXBsZSA8IGRlc3QtPnNhbXBsZXNfcGVyX2NoYW5uZWxfOyArK3NhbXBsZSkgewotICAg
ICAgZGVzdC0+ZGF0YV9bc2FtcGxlICogZGVzdC0+bnVtX2NoYW5uZWxzXyArIGNoXSA9Ci0gICAg
ICAgICAgc3JjLmNoYW5uZWxzKClbY2hdW3NhbXBsZV0gKiAzMjc2NzsKLSAgICB9Ci0gIH0KLX0K
LQotQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjpBdWRpb1Byb2Nlc3NpbmdTaW11bGF0b3IoCi0g
ICAgY29uc3QgU2ltdWxhdGlvblNldHRpbmdzJiBzZXR0aW5ncykKLSAgICA6IHNldHRpbmdzXyhz
ZXR0aW5ncykgewotICBpZiAoc2V0dGluZ3NfLnJlZF9ncmFwaF9vdXRwdXRfZmlsZW5hbWUgJiYK
LSAgICAgIHNldHRpbmdzXy5yZWRfZ3JhcGhfb3V0cHV0X2ZpbGVuYW1lLT5zaXplKCkgPiAwKSB7
Ci0gICAgcmVzaWR1YWxfZWNob19saWtlbGlob29kX2dyYXBoX3dyaXRlcl8ub3BlbigKLSAgICAg
ICAgKnNldHRpbmdzXy5yZWRfZ3JhcGhfb3V0cHV0X2ZpbGVuYW1lKTsKLSAgICBSVENfQ0hFQ0so
cmVzaWR1YWxfZWNob19saWtlbGlob29kX2dyYXBoX3dyaXRlcl8uaXNfb3BlbigpKTsKLSAgICBX
cml0ZUVjaG9MaWtlbGlob29kR3JhcGhGaWxlSGVhZGVyKCZyZXNpZHVhbF9lY2hvX2xpa2VsaWhv
b2RfZ3JhcGhfd3JpdGVyXyk7Ci0gIH0KLX0KLQotQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjp+
QXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yKCkgewotICBpZiAocmVzaWR1YWxfZWNob19saWtlbGlo
b29kX2dyYXBoX3dyaXRlcl8uaXNfb3BlbigpKSB7Ci0gICAgV3JpdGVFY2hvTGlrZWxpaG9vZEdy
YXBoRmlsZUZvb3RlcigmcmVzaWR1YWxfZWNob19saWtlbGlob29kX2dyYXBoX3dyaXRlcl8pOwot
ICAgIHJlc2lkdWFsX2VjaG9fbGlrZWxpaG9vZF9ncmFwaF93cml0ZXJfLmNsb3NlKCk7Ci0gIH0K
LX0KLQotQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjpTY29wZWRUaW1lcjo6flNjb3BlZFRpbWVy
KCkgewotICBpbnQ2NF90IGludGVydmFsID0gcnRjOjpUaW1lTmFub3MoKSAtIHN0YXJ0X3RpbWVf
OwotICBwcm9jX3RpbWVfLT5zdW0gKz0gaW50ZXJ2YWw7Ci0gIHByb2NfdGltZV8tPm1heCA9IHN0
ZDo6bWF4KHByb2NfdGltZV8tPm1heCwgaW50ZXJ2YWwpOwotICBwcm9jX3RpbWVfLT5taW4gPSBz
dGQ6Om1pbihwcm9jX3RpbWVfLT5taW4sIGludGVydmFsKTsKLX0KLQotdm9pZCBBdWRpb1Byb2Nl
c3NpbmdTaW11bGF0b3I6OlByb2Nlc3NTdHJlYW0oYm9vbCBmaXhlZF9pbnRlcmZhY2UpIHsKLSAg
aWYgKGZpeGVkX2ludGVyZmFjZSkgewotICAgIHsKLSAgICAgIGNvbnN0IGF1dG8gc3QgPSBTY29w
ZWRUaW1lcihtdXRhYmxlX3Byb2NfdGltZSgpKTsKLSAgICAgIFJUQ19DSEVDS19FUShBdWRpb1By
b2Nlc3Npbmc6OmtOb0Vycm9yLCBhcF8tPlByb2Nlc3NTdHJlYW0oJmZ3ZF9mcmFtZV8pKTsKLSAg
ICB9Ci0gICAgQ29weUZyb21BdWRpb0ZyYW1lKGZ3ZF9mcmFtZV8sIG91dF9idWZfLmdldCgpKTsK
LSAgfSBlbHNlIHsKLSAgICBjb25zdCBhdXRvIHN0ID0gU2NvcGVkVGltZXIobXV0YWJsZV9wcm9j
X3RpbWUoKSk7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0g
ICAgICAgICAgICAgICAgIGFwXy0+UHJvY2Vzc1N0cmVhbShpbl9idWZfLT5jaGFubmVscygpLCBp
bl9jb25maWdfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2NvbmZp
Z18sIG91dF9idWZfLT5jaGFubmVscygpKSk7Ci0gIH0KLQotICBpZiAoYnVmZmVyX3dyaXRlcl8p
IHsKLSAgICBidWZmZXJfd3JpdGVyXy0+V3JpdGUoKm91dF9idWZfKTsKLSAgfQotCi0gIGlmIChy
ZXNpZHVhbF9lY2hvX2xpa2VsaWhvb2RfZ3JhcGhfd3JpdGVyXy5pc19vcGVuKCkpIHsKLSAgICBh
dXRvIHN0YXRzID0gYXBfLT5HZXRTdGF0aXN0aWNzKCk7Ci0gICAgcmVzaWR1YWxfZWNob19saWtl
bGlob29kX2dyYXBoX3dyaXRlcl8gPDwgc3RhdHMucmVzaWR1YWxfZWNob19saWtlbGlob29kCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiwgIjsKLSAgfQot
Ci0gICsrbnVtX3Byb2Nlc3Nfc3RyZWFtX2NhbGxzXzsKLX0KLQotdm9pZCBBdWRpb1Byb2Nlc3Np
bmdTaW11bGF0b3I6OlByb2Nlc3NSZXZlcnNlU3RyZWFtKGJvb2wgZml4ZWRfaW50ZXJmYWNlKSB7
Ci0gIGlmIChmaXhlZF9pbnRlcmZhY2UpIHsKLSAgICBjb25zdCBhdXRvIHN0ID0gU2NvcGVkVGlt
ZXIobXV0YWJsZV9wcm9jX3RpbWUoKSk7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2lu
Zzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+UHJvY2Vzc1JldmVyc2VTdHJlYW0o
JnJldl9mcmFtZV8pKTsKLSAgICBDb3B5RnJvbUF1ZGlvRnJhbWUocmV2X2ZyYW1lXywgcmV2ZXJz
ZV9vdXRfYnVmXy5nZXQoKSk7Ci0KLSAgfSBlbHNlIHsKLSAgICBjb25zdCBhdXRvIHN0ID0gU2Nv
cGVkVGltZXIobXV0YWJsZV9wcm9jX3RpbWUoKSk7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJv
Y2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+UHJvY2Vzc1JldmVyc2VT
dHJlYW0oCi0gICAgICAgICAgICAgICAgICAgICByZXZlcnNlX2luX2J1Zl8tPmNoYW5uZWxzKCks
IHJldmVyc2VfaW5fY29uZmlnXywKLSAgICAgICAgICAgICAgICAgICAgIHJldmVyc2Vfb3V0X2Nv
bmZpZ18sIHJldmVyc2Vfb3V0X2J1Zl8tPmNoYW5uZWxzKCkpKTsKLSAgfQotCi0gIGlmIChyZXZl
cnNlX2J1ZmZlcl93cml0ZXJfKSB7Ci0gICAgcmV2ZXJzZV9idWZmZXJfd3JpdGVyXy0+V3JpdGUo
KnJldmVyc2Vfb3V0X2J1Zl8pOwotICB9Ci0KLSAgKytudW1fcmV2ZXJzZV9wcm9jZXNzX3N0cmVh
bV9jYWxsc187Ci19Ci0KLXZvaWQgQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjpTZXR1cEJ1ZmZl
cnNDb25maWdzT3V0cHV0cygKLSAgICBpbnQgaW5wdXRfc2FtcGxlX3JhdGVfaHosCi0gICAgaW50
IG91dHB1dF9zYW1wbGVfcmF0ZV9oeiwKLSAgICBpbnQgcmV2ZXJzZV9pbnB1dF9zYW1wbGVfcmF0
ZV9oeiwKLSAgICBpbnQgcmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3JhdGVfaHosCi0gICAgaW50IGlu
cHV0X251bV9jaGFubmVscywKLSAgICBpbnQgb3V0cHV0X251bV9jaGFubmVscywKLSAgICBpbnQg
cmV2ZXJzZV9pbnB1dF9udW1fY2hhbm5lbHMsCi0gICAgaW50IHJldmVyc2Vfb3V0cHV0X251bV9j
aGFubmVscykgewotICBpbl9jb25maWdfID0gU3RyZWFtQ29uZmlnKGlucHV0X3NhbXBsZV9yYXRl
X2h6LCBpbnB1dF9udW1fY2hhbm5lbHMpOwotICBpbl9idWZfLnJlc2V0KG5ldyBDaGFubmVsQnVm
ZmVyPGZsb2F0PigKLSAgICAgIHJ0Yzo6Q2hlY2tlZERpdkV4YWN0KGlucHV0X3NhbXBsZV9yYXRl
X2h6LCBrQ2h1bmtzUGVyU2Vjb25kKSwKLSAgICAgIGlucHV0X251bV9jaGFubmVscykpOwotCi0g
IHJldmVyc2VfaW5fY29uZmlnXyA9Ci0gICAgICBTdHJlYW1Db25maWcocmV2ZXJzZV9pbnB1dF9z
YW1wbGVfcmF0ZV9oeiwgcmV2ZXJzZV9pbnB1dF9udW1fY2hhbm5lbHMpOwotICByZXZlcnNlX2lu
X2J1Zl8ucmVzZXQobmV3IENoYW5uZWxCdWZmZXI8ZmxvYXQ+KAotICAgICAgcnRjOjpDaGVja2Vk
RGl2RXhhY3QocmV2ZXJzZV9pbnB1dF9zYW1wbGVfcmF0ZV9oeiwga0NodW5rc1BlclNlY29uZCks
Ci0gICAgICByZXZlcnNlX2lucHV0X251bV9jaGFubmVscykpOwotCi0gIG91dF9jb25maWdfID0g
U3RyZWFtQ29uZmlnKG91dHB1dF9zYW1wbGVfcmF0ZV9oeiwgb3V0cHV0X251bV9jaGFubmVscyk7
Ci0gIG91dF9idWZfLnJlc2V0KG5ldyBDaGFubmVsQnVmZmVyPGZsb2F0PigKLSAgICAgIHJ0Yzo6
Q2hlY2tlZERpdkV4YWN0KG91dHB1dF9zYW1wbGVfcmF0ZV9oeiwga0NodW5rc1BlclNlY29uZCks
Ci0gICAgICBvdXRwdXRfbnVtX2NoYW5uZWxzKSk7Ci0KLSAgcmV2ZXJzZV9vdXRfY29uZmlnXyA9
Ci0gICAgICBTdHJlYW1Db25maWcocmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3JhdGVfaHosIHJldmVy
c2Vfb3V0cHV0X251bV9jaGFubmVscyk7Ci0gIHJldmVyc2Vfb3V0X2J1Zl8ucmVzZXQobmV3IENo
YW5uZWxCdWZmZXI8ZmxvYXQ+KAotICAgICAgcnRjOjpDaGVja2VkRGl2RXhhY3QocmV2ZXJzZV9v
dXRwdXRfc2FtcGxlX3JhdGVfaHosIGtDaHVua3NQZXJTZWNvbmQpLAotICAgICAgcmV2ZXJzZV9v
dXRwdXRfbnVtX2NoYW5uZWxzKSk7Ci0KLSAgZndkX2ZyYW1lXy5zYW1wbGVfcmF0ZV9oel8gPSBp
bnB1dF9zYW1wbGVfcmF0ZV9oejsKLSAgZndkX2ZyYW1lXy5zYW1wbGVzX3Blcl9jaGFubmVsXyA9
Ci0gICAgICBydGM6OkNoZWNrZWREaXZFeGFjdChmd2RfZnJhbWVfLnNhbXBsZV9yYXRlX2h6Xywg
a0NodW5rc1BlclNlY29uZCk7Ci0gIGZ3ZF9mcmFtZV8ubnVtX2NoYW5uZWxzXyA9IGlucHV0X251
bV9jaGFubmVsczsKLQotICByZXZfZnJhbWVfLnNhbXBsZV9yYXRlX2h6XyA9IHJldmVyc2VfaW5w
dXRfc2FtcGxlX3JhdGVfaHo7Ci0gIHJldl9mcmFtZV8uc2FtcGxlc19wZXJfY2hhbm5lbF8gPQot
ICAgICAgcnRjOjpDaGVja2VkRGl2RXhhY3QocmV2X2ZyYW1lXy5zYW1wbGVfcmF0ZV9oel8sIGtD
aHVua3NQZXJTZWNvbmQpOwotICByZXZfZnJhbWVfLm51bV9jaGFubmVsc18gPSByZXZlcnNlX2lu
cHV0X251bV9jaGFubmVsczsKLQotICBpZiAoc2V0dGluZ3NfLnVzZV92ZXJib3NlX2xvZ2dpbmcp
IHsKLSAgICBzdGQ6OmNvdXQgPDwgIlNhbXBsZSByYXRlczoiIDw8IHN0ZDo6ZW5kbDsKLSAgICBz
dGQ6OmNvdXQgPDwgIiBGb3J3YXJkIGlucHV0OiAiIDw8IGlucHV0X3NhbXBsZV9yYXRlX2h6IDw8
IHN0ZDo6ZW5kbDsKLSAgICBzdGQ6OmNvdXQgPDwgIiBGb3J3YXJkIG91dHB1dDogIiA8PCBvdXRw
dXRfc2FtcGxlX3JhdGVfaHogPDwgc3RkOjplbmRsOwotICAgIHN0ZDo6Y291dCA8PCAiIFJldmVy
c2UgaW5wdXQ6ICIgPDwgcmV2ZXJzZV9pbnB1dF9zYW1wbGVfcmF0ZV9oegotICAgICAgICAgICAg
ICA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgUmV2ZXJzZSBvdXRwdXQ6ICIgPDwg
cmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3JhdGVfaHoKLSAgICAgICAgICAgICAgPDwgc3RkOjplbmRs
OwotICAgIHN0ZDo6Y291dCA8PCAiTnVtYmVyIG9mIGNoYW5uZWxzOiAiIDw8IHN0ZDo6ZW5kbDsK
LSAgICBzdGQ6OmNvdXQgPDwgIiBGb3J3YXJkIGlucHV0OiAiIDw8IGlucHV0X251bV9jaGFubmVs
cyA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgRm9yd2FyZCBvdXRwdXQ6ICIgPDwg
b3V0cHV0X251bV9jaGFubmVscyA8PCBzdGQ6OmVuZGw7Ci0gICAgc3RkOjpjb3V0IDw8ICIgUmV2
ZXJzZSBpbnB1dDogIiA8PCByZXZlcnNlX2lucHV0X251bV9jaGFubmVscyA8PCBzdGQ6OmVuZGw7
Ci0gICAgc3RkOjpjb3V0IDw8ICIgUmV2ZXJzZSBvdXRwdXQ6ICIgPDwgcmV2ZXJzZV9vdXRwdXRf
bnVtX2NoYW5uZWxzCi0gICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKLSAgfQotCi0gIFNldHVw
T3V0cHV0KCk7Ci19Ci0KLXZvaWQgQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjpTZXR1cE91dHB1
dCgpIHsKLSAgaWYgKHNldHRpbmdzXy5vdXRwdXRfZmlsZW5hbWUpIHsKLSAgICBzdGQ6OnN0cmlu
ZyBmaWxlbmFtZTsKLSAgICBpZiAoc2V0dGluZ3NfLnN0b3JlX2ludGVybWVkaWF0ZV9vdXRwdXQp
IHsKLSAgICAgIGZpbGVuYW1lID0gR2V0SW5kZXhlZE91dHB1dFdhdkZpbGVuYW1lKCpzZXR0aW5n
c18ub3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0X3Jlc2V0X2NvdW50ZXJfKTsKLSAgICB9IGVsc2UgewotICAgICAgZmls
ZW5hbWUgPSAqc2V0dGluZ3NfLm91dHB1dF9maWxlbmFtZTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2F2V3JpdGVyPiBvdXRfZmlsZSgKLSAgICAgICAgbmV3IFdhdldyaXRlcihmaWxl
bmFtZSwgb3V0X2NvbmZpZ18uc2FtcGxlX3JhdGVfaHooKSwKLSAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxzaXplX3Q+KG91dF9jb25maWdfLm51bV9jaGFubmVscygpKSkpOwotICAg
IGJ1ZmZlcl93cml0ZXJfLnJlc2V0KG5ldyBDaGFubmVsQnVmZmVyV2F2V3JpdGVyKHN0ZDo6bW92
ZShvdXRfZmlsZSkpKTsKLSAgfQotCi0gIGlmIChzZXR0aW5nc18ucmV2ZXJzZV9vdXRwdXRfZmls
ZW5hbWUpIHsKLSAgICBzdGQ6OnN0cmluZyBmaWxlbmFtZTsKLSAgICBpZiAoc2V0dGluZ3NfLnN0
b3JlX2ludGVybWVkaWF0ZV9vdXRwdXQpIHsKLSAgICAgIGZpbGVuYW1lID0gR2V0SW5kZXhlZE91
dHB1dFdhdkZpbGVuYW1lKCpzZXR0aW5nc18ucmV2ZXJzZV9vdXRwdXRfZmlsZW5hbWUsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfcmVzZXRfY291
bnRlcl8pOwotICAgIH0gZWxzZSB7Ci0gICAgICBmaWxlbmFtZSA9ICpzZXR0aW5nc18ucmV2ZXJz
ZV9vdXRwdXRfZmlsZW5hbWU7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdhdldyaXRl
cj4gcmV2ZXJzZV9vdXRfZmlsZSgKLSAgICAgICAgbmV3IFdhdldyaXRlcihmaWxlbmFtZSwgcmV2
ZXJzZV9vdXRfY29uZmlnXy5zYW1wbGVfcmF0ZV9oeigpLAotICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PHNpemVfdD4ocmV2ZXJzZV9vdXRfY29uZmlnXy5udW1fY2hhbm5lbHMoKSkp
KTsKLSAgICByZXZlcnNlX2J1ZmZlcl93cml0ZXJfLnJlc2V0KAotICAgICAgICBuZXcgQ2hhbm5l
bEJ1ZmZlcldhdldyaXRlcihzdGQ6Om1vdmUocmV2ZXJzZV9vdXRfZmlsZSkpKTsKLSAgfQotCi0g
ICsrb3V0cHV0X3Jlc2V0X2NvdW50ZXJfOwotfQotCi12b2lkIEF1ZGlvUHJvY2Vzc2luZ1NpbXVs
YXRvcjo6RGVzdHJveUF1ZGlvUHJvY2Vzc29yKCkgewotICBpZiAoc2V0dGluZ3NfLmFlY19kdW1w
X291dHB1dF9maWxlbmFtZSkgewotICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtO
b0Vycm9yLCBhcF8tPlN0b3BEZWJ1Z1JlY29yZGluZygpKTsKLSAgfQotfQotCi12b2lkIEF1ZGlv
UHJvY2Vzc2luZ1NpbXVsYXRvcjo6Q3JlYXRlQXVkaW9Qcm9jZXNzb3IoKSB7Ci0gIENvbmZpZyBj
b25maWc7Ci0gIEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmlnIGFwbV9jb25maWc7Ci0gIGlmIChzZXR0
aW5nc18udXNlX2JmICYmICpzZXR0aW5nc18udXNlX2JmKSB7Ci0gICAgY29uZmlnLlNldDxCZWFt
Zm9ybWluZz4obmV3IEJlYW1mb3JtaW5nKAotICAgICAgICB0cnVlLCBQYXJzZUFycmF5R2VvbWV0
cnkoKnNldHRpbmdzXy5taWNyb3Bob25lX3Bvc2l0aW9ucyksCi0gICAgICAgIFNwaGVyaWNhbFBv
aW50ZihEZWdyZWVzVG9SYWRpYW5zKHNldHRpbmdzXy50YXJnZXRfYW5nbGVfZGVncmVlcyksIDAu
ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIDEuZikpKTsKLSAgfQotICBpZiAoc2V0dGluZ3Nf
LnVzZV90cykgewotICAgIGNvbmZpZy5TZXQ8RXhwZXJpbWVudGFsTnM+KG5ldyBFeHBlcmltZW50
YWxOcygqc2V0dGluZ3NfLnVzZV90cykpOwotICB9Ci0gIGlmIChzZXR0aW5nc18udXNlX2llKSB7
Ci0gICAgY29uZmlnLlNldDxJbnRlbGxpZ2liaWxpdHk+KG5ldyBJbnRlbGxpZ2liaWxpdHkoKnNl
dHRpbmdzXy51c2VfaWUpKTsKLSAgfQotICBpZiAoc2V0dGluZ3NfLnVzZV9hZWMzKSB7Ci0gICAg
Y29uZmlnLlNldDxFY2hvQ2FuY2VsbGVyMz4obmV3IEVjaG9DYW5jZWxsZXIzKCpzZXR0aW5nc18u
dXNlX2FlYzMpKTsKLSAgfQotICBpZiAoc2V0dGluZ3NfLnVzZV9sYykgewotICAgIGFwbV9jb25m
aWcubGV2ZWxfY29udHJvbGxlci5lbmFibGVkID0gKnNldHRpbmdzXy51c2VfbGM7Ci0gIH0KLSAg
aWYgKHNldHRpbmdzXy51c2VfcmVmaW5lZF9hZGFwdGl2ZV9maWx0ZXIpIHsKLSAgICBjb25maWcu
U2V0PFJlZmluZWRBZGFwdGl2ZUZpbHRlcj4oCi0gICAgICAgIG5ldyBSZWZpbmVkQWRhcHRpdmVG
aWx0ZXIoKnNldHRpbmdzXy51c2VfcmVmaW5lZF9hZGFwdGl2ZV9maWx0ZXIpKTsKLSAgfQotICBj
b25maWcuU2V0PEV4dGVuZGVkRmlsdGVyPihuZXcgRXh0ZW5kZWRGaWx0ZXIoCi0gICAgICAhc2V0
dGluZ3NfLnVzZV9leHRlbmRlZF9maWx0ZXIgfHwgKnNldHRpbmdzXy51c2VfZXh0ZW5kZWRfZmls
dGVyKSk7Ci0gIGNvbmZpZy5TZXQ8RGVsYXlBZ25vc3RpYz4obmV3IERlbGF5QWdub3N0aWMoIXNl
dHRpbmdzXy51c2VfZGVsYXlfYWdub3N0aWMgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqc2V0dGluZ3NfLnVzZV9kZWxheV9hZ25vc3RpYykpOwotICBp
ZiAoc2V0dGluZ3NfLnVzZV9yZWQpIHsKLSAgICBhcG1fY29uZmlnLnJlc2lkdWFsX2VjaG9fZGV0
ZWN0b3IuZW5hYmxlZCA9ICpzZXR0aW5nc18udXNlX3JlZDsKLSAgfQotCi0gIGFwXy5yZXNldChB
dWRpb1Byb2Nlc3Npbmc6OkNyZWF0ZShjb25maWcpKTsKLSAgUlRDX0NIRUNLKGFwXyk7Ci0KLSAg
YXBfLT5BcHBseUNvbmZpZyhhcG1fY29uZmlnKTsKLQotICBpZiAoc2V0dGluZ3NfLnVzZV9hZWMp
IHsKLSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAg
ICAgICAgICAgYXBfLT5lY2hvX2NhbmNlbGxhdGlvbigpLT5FbmFibGUoKnNldHRpbmdzXy51c2Vf
YWVjKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy51c2VfYWVjbSkgewotICAgIFJUQ19DSEVDS19F
UShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8tPmVjaG9f
Y29udHJvbF9tb2JpbGUoKS0+RW5hYmxlKCpzZXR0aW5nc18udXNlX2FlY20pKTsKLSAgfQotICBp
ZiAoc2V0dGluZ3NfLnVzZV9hZ2MpIHsKLSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5n
OjprTm9FcnJvciwKLSAgICAgICAgICAgICAgICAgYXBfLT5nYWluX2NvbnRyb2woKS0+RW5hYmxl
KCpzZXR0aW5nc18udXNlX2FnYykpOwotICB9Ci0gIGlmIChzZXR0aW5nc18udXNlX2hwZikgewot
ICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAg
ICAgICBhcF8tPmhpZ2hfcGFzc19maWx0ZXIoKS0+RW5hYmxlKCpzZXR0aW5nc18udXNlX2hwZikp
OwotICB9Ci0gIGlmIChzZXR0aW5nc18udXNlX25zKSB7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlv
UHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+bm9pc2Vfc3VwcHJl
c3Npb24oKS0+RW5hYmxlKCpzZXR0aW5nc18udXNlX25zKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdz
Xy51c2VfbGUpIHsKLSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwK
LSAgICAgICAgICAgICAgICAgYXBfLT5sZXZlbF9lc3RpbWF0b3IoKS0+RW5hYmxlKCpzZXR0aW5n
c18udXNlX2xlKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy51c2VfdmFkKSB7Ci0gICAgUlRDX0NI
RUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+
dm9pY2VfZGV0ZWN0aW9uKCktPkVuYWJsZSgqc2V0dGluZ3NfLnVzZV92YWQpKTsKLSAgfQotICBp
ZiAoc2V0dGluZ3NfLnVzZV9hZ2NfbGltaXRlcikgewotICAgIFJUQ19DSEVDS19FUShBdWRpb1By
b2Nlc3Npbmc6OmtOb0Vycm9yLCBhcF8tPmdhaW5fY29udHJvbCgpLT5lbmFibGVfbGltaXRlcigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpzZXR0aW5n
c18udXNlX2FnY19saW1pdGVyKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy5hZ2NfdGFyZ2V0X2xl
dmVsKSB7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAg
ICAgICAgICAgICAgIGFwXy0+Z2Fpbl9jb250cm9sKCktPnNldF90YXJnZXRfbGV2ZWxfZGJmcygK
LSAgICAgICAgICAgICAgICAgICAgICpzZXR0aW5nc18uYWdjX3RhcmdldF9sZXZlbCkpOwotICB9
Ci0KLSAgaWYgKHNldHRpbmdzXy5hZ2NfbW9kZSkgewotICAgIFJUQ19DSEVDS19FUSgKLSAgICAg
ICAgQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgYXBfLT5nYWluX2NvbnRyb2wo
KS0+c2V0X21vZGUoCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDx3ZWJydGM6OkdhaW5Db250cm9s
OjpNb2RlPigqc2V0dGluZ3NfLmFnY19tb2RlKSkpOwotICB9Ci0KLSAgaWYgKHNldHRpbmdzXy51
c2VfZHJpZnRfY29tcGVuc2F0aW9uKSB7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2lu
Zzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+
ZW5hYmxlX2RyaWZ0X2NvbXBlbnNhdGlvbigKLSAgICAgICAgICAgICAgICAgICAgICpzZXR0aW5n
c18udXNlX2RyaWZ0X2NvbXBlbnNhdGlvbikpOwotICB9Ci0KLSAgaWYgKHNldHRpbmdzXy5hZWNf
c3VwcHJlc3Npb25fbGV2ZWwpIHsKLSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjpr
Tm9FcnJvciwKLSAgICAgICAgICAgICAgICAgYXBfLT5lY2hvX2NhbmNlbGxhdGlvbigpLT5zZXRf
c3VwcHJlc3Npb25fbGV2ZWwoCi0gICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx3ZWJy
dGM6OkVjaG9DYW5jZWxsYXRpb246OlN1cHByZXNzaW9uTGV2ZWw+KAotICAgICAgICAgICAgICAg
ICAgICAgICAgICpzZXR0aW5nc18uYWVjX3N1cHByZXNzaW9uX2xldmVsKSkpOwotICB9Ci0KLSAg
aWYgKHNldHRpbmdzXy5hZWNtX3JvdXRpbmdfbW9kZSkgewotICAgIFJUQ19DSEVDS19FUShBdWRp
b1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8tPmVjaG9fY29udHJv
bF9tb2JpbGUoKS0+c2V0X3JvdXRpbmdfbW9kZSgKLSAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHdlYnJ0Yzo6RWNob0NvbnRyb2xNb2JpbGU6OlJvdXRpbmdNb2RlPigKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAqc2V0dGluZ3NfLmFlY21fcm91dGluZ19tb2RlKSkpOwotICB9Ci0K
LSAgaWYgKHNldHRpbmdzXy51c2VfYWVjbV9jb21mb3J0X25vaXNlKSB7Ci0gICAgUlRDX0NIRUNL
X0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICAgIGFwXy0+ZWNo
b19jb250cm9sX21vYmlsZSgpLT5lbmFibGVfY29tZm9ydF9ub2lzZSgKLSAgICAgICAgICAgICAg
ICAgICAgICpzZXR0aW5nc18udXNlX2FlY21fY29tZm9ydF9ub2lzZSkpOwotICB9Ci0KLSAgaWYg
KHNldHRpbmdzXy52YWRfbGlrZWxpaG9vZCkgewotICAgIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nl
c3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgICBhcF8tPnZvaWNlX2RldGVjdGlvbigp
LT5zZXRfbGlrZWxpaG9vZCgKLSAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHdlYnJ0
Yzo6Vm9pY2VEZXRlY3Rpb246Okxpa2VsaWhvb2Q+KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICpzZXR0aW5nc18udmFkX2xpa2VsaWhvb2QpKSk7Ci0gIH0KLSAgaWYgKHNldHRpbmdzXy5uc19s
ZXZlbCkgewotICAgIFJUQ19DSEVDS19FUSgKLSAgICAgICAgQXVkaW9Qcm9jZXNzaW5nOjprTm9F
cnJvciwKLSAgICAgICAgYXBfLT5ub2lzZV9zdXBwcmVzc2lvbigpLT5zZXRfbGV2ZWwoCi0gICAg
ICAgICAgICBzdGF0aWNfY2FzdDxOb2lzZVN1cHByZXNzaW9uOjpMZXZlbD4oKnNldHRpbmdzXy5u
c19sZXZlbCkpKTsKLSAgfQotCi0gIGlmIChzZXR0aW5nc18udXNlX3RzKSB7Ci0gICAgYXBfLT5z
ZXRfc3RyZWFtX2tleV9wcmVzc2VkKCpzZXR0aW5nc18udXNlX3RzKTsKLSAgfQotCi0gIGlmIChz
ZXR0aW5nc18uYWVjX2R1bXBfb3V0cHV0X2ZpbGVuYW1lKSB7Ci0gICAgc2l6ZV90IGtNYXhGaWxl
bmFtZVNpemUgPSBBdWRpb1Byb2Nlc3Npbmc6OmtNYXhGaWxlbmFtZVNpemU7Ci0gICAgUlRDX0NI
RUNLX0xFKHNldHRpbmdzXy5hZWNfZHVtcF9vdXRwdXRfZmlsZW5hbWUtPnNpemUoKSwga01heEZp
bGVuYW1lU2l6ZSk7Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3Is
Ci0gICAgICAgICAgICAgICAgIGFwXy0+U3RhcnREZWJ1Z1JlY29yZGluZygKLSAgICAgICAgICAg
ICAgICAgICAgIHNldHRpbmdzXy5hZWNfZHVtcF9vdXRwdXRfZmlsZW5hbWUtPmNfc3RyKCksIC0x
KSk7Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFjZSB3ZWJy
dGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlvX3Byb2Nlc3Npbmdfc2ltdWxhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fcHJvY2Vzc2luZ19zaW11bGF0b3IuaAko
cmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9fcHJvY2Vzc2luZ19zaW11
bGF0b3IuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE4MiArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2lmbmRlZiBXRUJSVENfTU9EVUxFU19BVURJT19QUk9DRVNTSU5HX1RFU1RfQVVE
SU9fUFJPQ0VTU0lOR19TSU1VTEFUT1JfSF8KLSNkZWZpbmUgV0VCUlRDX01PRFVMRVNfQVVESU9f
UFJPQ0VTU0lOR19URVNUX0FVRElPX1BST0NFU1NJTkdfU0lNVUxBVE9SX0hfCi0KLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8ZnN0cmVhbT4KLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNl
L3RpbWV1dGlscy5oIgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NvbnN0cnVjdG9ybWFnaWMuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9vcHRpb25hbC5oIgotI2luY2x1ZGUgIndlYnJ0Yy9jb21t
b25fYXVkaW8vY2hhbm5lbF9idWZmZXIuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRp
b19wcm9jZXNzaW5nL2luY2x1ZGUvYXVkaW9fcHJvY2Vzc2luZy5oIgotI2luY2x1ZGUgIndlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC90ZXN0X3V0aWxzLmgiCi0KLW5hbWVzcGFj
ZSB3ZWJydGMgewotbmFtZXNwYWNlIHRlc3QgewotCi0vLyBIb2xkcyBhbGwgdGhlIHBhcmFtZXRl
cnMgYXZhaWxhYmxlIGZvciBjb250cm9sbGluZyB0aGUgc2ltdWxhdGlvbi4KLXN0cnVjdCBTaW11
bGF0aW9uU2V0dGluZ3MgewotICBTaW11bGF0aW9uU2V0dGluZ3MoKTsKLSAgU2ltdWxhdGlvblNl
dHRpbmdzKGNvbnN0IFNpbXVsYXRpb25TZXR0aW5ncyYpOwotICB+U2ltdWxhdGlvblNldHRpbmdz
KCk7Ci0gIHJ0Yzo6T3B0aW9uYWw8aW50PiBzdHJlYW1fZGVsYXk7Ci0gIHJ0Yzo6T3B0aW9uYWw8
aW50PiBzdHJlYW1fZHJpZnRfc2FtcGxlczsKLSAgcnRjOjpPcHRpb25hbDxpbnQ+IG91dHB1dF9z
YW1wbGVfcmF0ZV9oejsKLSAgcnRjOjpPcHRpb25hbDxpbnQ+IG91dHB1dF9udW1fY2hhbm5lbHM7
Ci0gIHJ0Yzo6T3B0aW9uYWw8aW50PiByZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZV9oejsKLSAg
cnRjOjpPcHRpb25hbDxpbnQ+IHJldmVyc2Vfb3V0cHV0X251bV9jaGFubmVsczsKLSAgcnRjOjpP
cHRpb25hbDxzdGQ6OnN0cmluZz4gbWljcm9waG9uZV9wb3NpdGlvbnM7Ci0gIGludCB0YXJnZXRf
YW5nbGVfZGVncmVlcyA9IDkwOwotICBydGM6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBvdXRwdXRf
ZmlsZW5hbWU7Ci0gIHJ0Yzo6T3B0aW9uYWw8c3RkOjpzdHJpbmc+IHJldmVyc2Vfb3V0cHV0X2Zp
bGVuYW1lOwotICBydGM6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiBpbnB1dF9maWxlbmFtZTsKLSAg
cnRjOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4gcmV2ZXJzZV9pbnB1dF9maWxlbmFtZTsKLSAgcnRj
OjpPcHRpb25hbDxib29sPiB1c2VfYWVjOwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9hZWNt
OwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9yZWQ7ICAvLyBSZXNpZHVhbCBFY2hvIERldGVj
dG9yLgotICBydGM6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiByZWRfZ3JhcGhfb3V0cHV0X2ZpbGVu
YW1lOwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9hZ2M7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9v
bD4gdXNlX2hwZjsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1c2VfbnM7Ci0gIHJ0Yzo6T3B0aW9u
YWw8Ym9vbD4gdXNlX3RzOwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9iZjsKLSAgcnRjOjpP
cHRpb25hbDxib29sPiB1c2VfaWU7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gdXNlX3ZhZDsKLSAg
cnRjOjpPcHRpb25hbDxib29sPiB1c2VfbGU7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gdXNlX2Fs
bDsKLSAgcnRjOjpPcHRpb25hbDxpbnQ+IGFlY19zdXBwcmVzc2lvbl9sZXZlbDsKLSAgcnRjOjpP
cHRpb25hbDxib29sPiB1c2VfZGVsYXlfYWdub3N0aWM7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4g
dXNlX2V4dGVuZGVkX2ZpbHRlcjsKLSAgcnRjOjpPcHRpb25hbDxib29sPiB1c2VfZHJpZnRfY29t
cGVuc2F0aW9uOwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9hZWMzOwotICBydGM6Ok9wdGlv
bmFsPGJvb2w+IHVzZV9sYzsKLSAgcnRjOjpPcHRpb25hbDxpbnQ+IGFlY21fcm91dGluZ19tb2Rl
OwotICBydGM6Ok9wdGlvbmFsPGJvb2w+IHVzZV9hZWNtX2NvbWZvcnRfbm9pc2U7Ci0gIHJ0Yzo6
T3B0aW9uYWw8aW50PiBhZ2NfbW9kZTsKLSAgcnRjOjpPcHRpb25hbDxpbnQ+IGFnY190YXJnZXRf
bGV2ZWw7Ci0gIHJ0Yzo6T3B0aW9uYWw8Ym9vbD4gdXNlX2FnY19saW1pdGVyOwotICBydGM6Ok9w
dGlvbmFsPGludD4gYWdjX2NvbXByZXNzaW9uX2dhaW47Ci0gIHJ0Yzo6T3B0aW9uYWw8aW50PiB2
YWRfbGlrZWxpaG9vZDsKLSAgcnRjOjpPcHRpb25hbDxpbnQ+IG5zX2xldmVsOwotICBydGM6Ok9w
dGlvbmFsPGJvb2w+IHVzZV9yZWZpbmVkX2FkYXB0aXZlX2ZpbHRlcjsKLSAgYm9vbCByZXBvcnRf
cGVyZm9ybWFuY2UgPSBmYWxzZTsKLSAgYm9vbCByZXBvcnRfYml0ZXhhY3RuZXNzID0gZmFsc2U7
Ci0gIGJvb2wgdXNlX3ZlcmJvc2VfbG9nZ2luZyA9IGZhbHNlOwotICBib29sIGRpc2NhcmRfYWxs
X3NldHRpbmdzX2luX2FlY2R1bXAgPSB0cnVlOwotICBydGM6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5n
PiBhZWNfZHVtcF9pbnB1dF9maWxlbmFtZTsKLSAgcnRjOjpPcHRpb25hbDxzdGQ6OnN0cmluZz4g
YWVjX2R1bXBfb3V0cHV0X2ZpbGVuYW1lOwotICBib29sIGZpeGVkX2ludGVyZmFjZSA9IGZhbHNl
OwotICBib29sIHN0b3JlX2ludGVybWVkaWF0ZV9vdXRwdXQgPSBmYWxzZTsKLX07Ci0KLS8vIEhv
bGRzIGEgZmV3IHN0YXRpc3RpY3MgYWJvdXQgYSBzZXJpZXMgb2YgVGlja0ludGVydmFscy4KLXN0
cnVjdCBUaWNrSW50ZXJ2YWxTdGF0cyB7Ci0gIFRpY2tJbnRlcnZhbFN0YXRzKCkgOiBtaW4oc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ2NF90Pjo6bWF4KCkpIHt9Ci0gIGludDY0X3Qgc3VtOwotICBp
bnQ2NF90IG1heDsKLSAgaW50NjRfdCBtaW47Ci19OwotCi0vLyBDb3BpZXMgc2FtcGxlcyBwcmVz
ZW50IGluIGEgQ2hhbm5lbEJ1ZmZlciBpbnRvIGFuIEF1ZGlvRnJhbWUuCi12b2lkIENvcHlUb0F1
ZGlvRnJhbWUoY29uc3QgQ2hhbm5lbEJ1ZmZlcjxmbG9hdD4mIHNyYywgQXVkaW9GcmFtZSogZGVz
dCk7Ci0KLS8vIFByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5IGZvciBwZXJmb3JtaW5nIGF1
ZGlvcHJvY2Vzc2luZyBzaW11bGF0aW9ucy4KLWNsYXNzIEF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRv
ciB7Ci0gcHVibGljOgotICBzdGF0aWMgY29uc3QgaW50IGtDaHVua3NQZXJTZWNvbmQgPSAxMDAw
IC8gQXVkaW9Qcm9jZXNzaW5nOjprQ2h1bmtTaXplTXM7Ci0KLSAgZXhwbGljaXQgQXVkaW9Qcm9j
ZXNzaW5nU2ltdWxhdG9yKGNvbnN0IFNpbXVsYXRpb25TZXR0aW5ncyYgc2V0dGluZ3MpOwotICB2
aXJ0dWFsIH5BdWRpb1Byb2Nlc3NpbmdTaW11bGF0b3IoKTsKLQotICAvLyBQcm9jZXNzZXMgdGhl
IGRhdGEgaW4gdGhlIGlucHV0LgotICB2aXJ0dWFsIHZvaWQgUHJvY2VzcygpID0gMDsKLQotICAv
LyBSZXR1cm5zIHRoZSBleGVjdXRpb24gdGltZSBvZiBhbGwgQXVkaW9Qcm9jZXNzaW5nIGNhbGxz
LgotICBjb25zdCBUaWNrSW50ZXJ2YWxTdGF0cyYgcHJvY190aW1lKCkgY29uc3QgeyByZXR1cm4g
cHJvY190aW1lXzsgfQotCi0gIC8vIFJlcG9ydHMgd2hldGhlciB0aGUgcHJvY2Vzc2VkIHJlY29y
ZGluZyB3YXMgYml0ZXhhY3QuCi0gIGJvb2wgT3V0cHV0V2FzQml0ZXhhY3QoKSB7IHJldHVybiBi
aXRleGFjdF9vdXRwdXRfOyB9Ci0KLSAgc2l6ZV90IGdldF9udW1fcHJvY2Vzc19zdHJlYW1fY2Fs
bHMoKSB7IHJldHVybiBudW1fcHJvY2Vzc19zdHJlYW1fY2FsbHNfOyB9Ci0gIHNpemVfdCBnZXRf
bnVtX3JldmVyc2VfcHJvY2Vzc19zdHJlYW1fY2FsbHMoKSB7Ci0gICAgcmV0dXJuIG51bV9yZXZl
cnNlX3Byb2Nlc3Nfc3RyZWFtX2NhbGxzXzsKLSAgfQotCi0gcHJvdGVjdGVkOgotICAvLyBSQUlJ
IGNsYXNzIGZvciBleGVjdXRpb24gdGltZSBtZWFzdXJlbWVudC4gVXBkYXRlcyB0aGUgcHJvdmlk
ZWQKLSAgLy8gVGlja0ludGVydmFsU3RhdHMgYmFzZWQgb24gdGhlIHRpbWUgYmV0d2VlbiBTY29w
ZWRUaW1lciBjcmVhdGlvbiBhbmQKLSAgLy8gbGVhdmluZyB0aGUgZW5jbG9zaW5nIHNjb3BlLgot
ICBjbGFzcyBTY29wZWRUaW1lciB7Ci0gICBwdWJsaWM6Ci0gICAgZXhwbGljaXQgU2NvcGVkVGlt
ZXIoVGlja0ludGVydmFsU3RhdHMqIHByb2NfdGltZSkKLSAgICAgICAgOiBwcm9jX3RpbWVfKHBy
b2NfdGltZSksIHN0YXJ0X3RpbWVfKHJ0Yzo6VGltZU5hbm9zKCkpIHt9Ci0KLSAgICB+U2NvcGVk
VGltZXIoKTsKLQotICAgcHJpdmF0ZToKLSAgICBUaWNrSW50ZXJ2YWxTdGF0cyogY29uc3QgcHJv
Y190aW1lXzsKLSAgICBpbnQ2NF90IHN0YXJ0X3RpbWVfOwotICB9OwotCi0gIFRpY2tJbnRlcnZh
bFN0YXRzKiBtdXRhYmxlX3Byb2NfdGltZSgpIHsgcmV0dXJuICZwcm9jX3RpbWVfOyB9Ci0gIHZv
aWQgUHJvY2Vzc1N0cmVhbShib29sIGZpeGVkX2ludGVyZmFjZSk7Ci0gIHZvaWQgUHJvY2Vzc1Jl
dmVyc2VTdHJlYW0oYm9vbCBmaXhlZF9pbnRlcmZhY2UpOwotICB2b2lkIENyZWF0ZUF1ZGlvUHJv
Y2Vzc29yKCk7Ci0gIHZvaWQgRGVzdHJveUF1ZGlvUHJvY2Vzc29yKCk7Ci0gIHZvaWQgU2V0dXBC
dWZmZXJzQ29uZmlnc091dHB1dHMoaW50IGlucHV0X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvdXRwdXRfc2FtcGxlX3JhdGVfaHosCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldmVyc2VfaW5wdXRfc2FtcGxlX3Jh
dGVfaHosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldmVyc2Vfb3V0
cHV0X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBpbnB1dF9udW1fY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IG91dHB1dF9udW1fY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHJldmVyc2VfaW5wdXRfbnVtX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCByZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMpOwotCi0gIGNvbnN0
IFNpbXVsYXRpb25TZXR0aW5ncyBzZXR0aW5nc187Ci0gIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1By
b2Nlc3Npbmc+IGFwXzsKLQotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZlcjxmbG9hdD4+
IGluX2J1Zl87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDaGFubmVsQnVmZmVyPGZsb2F0Pj4gb3V0X2J1
Zl87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDaGFubmVsQnVmZmVyPGZsb2F0Pj4gcmV2ZXJzZV9pbl9i
dWZfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZlcjxmbG9hdD4+IHJldmVyc2Vfb3V0
X2J1Zl87Ci0gIFN0cmVhbUNvbmZpZyBpbl9jb25maWdfOwotICBTdHJlYW1Db25maWcgb3V0X2Nv
bmZpZ187Ci0gIFN0cmVhbUNvbmZpZyByZXZlcnNlX2luX2NvbmZpZ187Ci0gIFN0cmVhbUNvbmZp
ZyByZXZlcnNlX291dF9jb25maWdfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZlcldh
dlJlYWRlcj4gYnVmZmVyX3JlYWRlcl87Ci0gIHN0ZDo6dW5pcXVlX3B0cjxDaGFubmVsQnVmZmVy
V2F2UmVhZGVyPiByZXZlcnNlX2J1ZmZlcl9yZWFkZXJfOwotICBBdWRpb0ZyYW1lIHJldl9mcmFt
ZV87Ci0gIEF1ZGlvRnJhbWUgZndkX2ZyYW1lXzsKLSAgYm9vbCBiaXRleGFjdF9vdXRwdXRfID0g
dHJ1ZTsKLQotIHByaXZhdGU6Ci0gIHZvaWQgU2V0dXBPdXRwdXQoKTsKLQotICBzaXplX3QgbnVt
X3Byb2Nlc3Nfc3RyZWFtX2NhbGxzXyA9IDA7Ci0gIHNpemVfdCBudW1fcmV2ZXJzZV9wcm9jZXNz
X3N0cmVhbV9jYWxsc18gPSAwOwotICBzaXplX3Qgb3V0cHV0X3Jlc2V0X2NvdW50ZXJfID0gMDsK
LSAgc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZmZXJXYXZXcml0ZXI+IGJ1ZmZlcl93cml0ZXJf
OwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZlcldhdldyaXRlcj4gcmV2ZXJzZV9idWZm
ZXJfd3JpdGVyXzsKLSAgVGlja0ludGVydmFsU3RhdHMgcHJvY190aW1lXzsKLSAgc3RkOjpvZnN0
cmVhbSByZXNpZHVhbF9lY2hvX2xpa2VsaWhvb2RfZ3JhcGhfd3JpdGVyXzsKLQotICBSVENfRElT
QUxMT1dfSU1QTElDSVRfQ09OU1RSVUNUT1JTKEF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvcik7Ci19
OwotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwotCi0jZW5k
aWYgIC8vIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9BVURJT19QUk9DRVNT
SU5HX1NJTVVMQVRPUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9wcm9jX2Zsb2F0LmNj
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlvcHJvY19mbG9hdC5jYwkocmV2aXNp
b24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMv
bW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYXVkaW9wcm9jX2Zsb2F0LmNjCShub25leGlz
dGVudCkKQEAgLTEsNDQzICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBX
ZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0g
KiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkg
cmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwg
Y29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVU
SE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVk
ZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0K
LSNpbmNsdWRlICJnZmxhZ3MvZ2ZsYWdzLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVk
aW9fcHJvY2Vzc2luZy9pbmNsdWRlL2F1ZGlvX3Byb2Nlc3NpbmcuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYWVjX2R1bXBfYmFzZWRfc2ltdWxhdG9y
LmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2F1ZGlv
X3Byb2Nlc3Npbmdfc2ltdWxhdG9yLmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9f
cHJvY2Vzc2luZy90ZXN0L3dhdl9iYXNlZF9zaW11bGF0b3IuaCIKLQotbmFtZXNwYWNlIHdlYnJ0
YyB7Ci1uYW1lc3BhY2UgdGVzdCB7Ci1uYW1lc3BhY2UgewotCi1jb25zdCBpbnQga1BhcmFtZXRl
ck5vdFNwZWNpZmllZFZhbHVlID0gLTEwMDAwOwotCi1jb25zdCBjaGFyIGtVc2FnZURlc2NyaXB0
aW9uW10gPQotICAgICJVc2FnZTogYXVkaW9wcm9jX2YgW29wdGlvbnNdIC1pIDxpbnB1dC53YXY+
XG4iCi0gICAgIiAgICAgICAgICAgICAgICAgICBvclxuIgotICAgICIgICAgICAgYXVkaW9wcm9j
X2YgW29wdGlvbnNdIC1kdW1wX2lucHV0IDxhZWNfZHVtcD5cbiIKLSAgICAiXG5cbiIKLSAgICAi
Q29tbWFuZC1saW5lIHRvb2wgdG8gc2ltdWxhdGUgYSBjYWxsIHVzaW5nIHRoZSBhdWRpbyAiCi0g
ICAgInByb2Nlc3NpbmcgbW9kdWxlLCBlaXRoZXIgYmFzZWQgb24gd2F2IGZpbGVzIG9yICIKLSAg
ICAicHJvdG9idWYgZGVidWcgZHVtcCByZWNvcmRpbmdzLiI7Ci0KLURFRklORV9zdHJpbmcoZHVt
cF9pbnB1dCwgIiIsICJBZWMgZHVtcCBpbnB1dCBmaWxlbmFtZSIpOwotREVGSU5FX3N0cmluZyhk
dW1wX291dHB1dCwgIiIsICJBZWMgZHVtcCBvdXRwdXQgZmlsZW5hbWUiKTsKLURFRklORV9zdHJp
bmcoaSwgIiIsICJGb3J3YXJkIHN0cmVhbSBpbnB1dCB3YXYgZmlsZW5hbWUiKTsKLURFRklORV9z
dHJpbmcobywgIiIsICJGb3J3YXJkIHN0cmVhbSBvdXRwdXQgd2F2IGZpbGVuYW1lIik7Ci1ERUZJ
TkVfc3RyaW5nKHJpLCAiIiwgIlJldmVyc2Ugc3RyZWFtIGlucHV0IHdhdiBmaWxlbmFtZSIpOwot
REVGSU5FX3N0cmluZyhybywgIiIsICJSZXZlcnNlIHN0cmVhbSBvdXRwdXQgd2F2IGZpbGVuYW1l
Iik7Ci1ERUZJTkVfaW50MzIob3V0cHV0X251bV9jaGFubmVscywKLSAgICAgICAgICAgICBrUGFy
YW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIk51bWJlciBvZiBmb3J3YXJk
IHN0cmVhbSBvdXRwdXQgY2hhbm5lbHMiKTsKLURFRklORV9pbnQzMihyZXZlcnNlX291dHB1dF9u
dW1fY2hhbm5lbHMsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAot
ICAgICAgICAgICAgICJOdW1iZXIgb2YgUmV2ZXJzZSBzdHJlYW0gb3V0cHV0IGNoYW5uZWxzIik7
Ci1ERUZJTkVfaW50MzIob3V0cHV0X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgIGtQYXJh
bWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiRm9yd2FyZCBzdHJlYW0gb3V0
cHV0IHNhbXBsZSByYXRlIGluIEh6Iik7Ci1ERUZJTkVfaW50MzIocmV2ZXJzZV9vdXRwdXRfc2Ft
cGxlX3JhdGVfaHosCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAot
ICAgICAgICAgICAgICJSZXZlcnNlIHN0cmVhbSBvdXRwdXQgc2FtcGxlIHJhdGUgaW4gSHoiKTsK
LURFRklORV9zdHJpbmcobWljX3Bvc2l0aW9ucywKLSAgICAgICAgICAgICAgIiIsCi0gICAgICAg
ICAgICAgICJTcGFjZSBkZWxpbWl0ZWQgY2FydGVzaWFuIGNvb3JkaW5hdGVzIG9mIG1pY3JvcGhv
bmVzIGluICIKLSAgICAgICAgICAgICAgIm1ldGVycy4gVGhlIGNvb3JkaW5hdGVzIG9mIGVhY2gg
cG9pbnQgYXJlIGNvbnRpZ3VvdXMuIEZvciBhICIKLSAgICAgICAgICAgICAgInR3byBlbGVtZW50
IGFycmF5OiBcIngxIHkxIHoxIHgyIHkyIHoyXCIiKTsKLURFRklORV9pbnQzMih0YXJnZXRfYW5n
bGVfZGVncmVlcywKLSAgICAgICAgICAgICA5MCwKLSAgICAgICAgICAgICAiVGhlIGF6aW11dGgg
b2YgdGhlIHRhcmdldCBpbiBkZWdyZWVzICgwLTM1OSkuIE9ubHkgYXBwbGllcyB0byAiCi0gICAg
ICAgICAgICAgImJlYW1mb3JtaW5nLiIpOwotREVGSU5FX2Jvb2woZml4ZWRfaW50ZXJmYWNlLAot
ICAgICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgICAiVXNlIHRoZSBmaXhlZCBpbnRlcmZhY2Ug
d2hlbiBvcGVyYXRpbmcgb24gd2F2IGZpbGVzIik7Ci1ERUZJTkVfaW50MzIoYWVjLAotICAgICAg
ICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZh
dGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIGVjaG8gY2FuY2VsbGVyIik7Ci1ERUZJTkVfaW50
MzIoYWVjbSwKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAg
ICAgICAgICAgIkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSBtb2JpbGUgZWNobyBj
b250cm9sbGVyIik7Ci1ERUZJTkVfaW50MzIocmVkLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJO
b3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZh
dGUgKDApIHRoZSByZXNpZHVhbCBlY2hvIGRldGVjdG9yIik7Ci1ERUZJTkVfc3RyaW5nKHJlZF9n
cmFwaCwgIiIsICJPdXRwdXQgZmlsZW5hbWUgZm9yIGdyYXBoIG9mIGVjaG8gbGlrZWxpaG9vZCIp
OwotREVGSU5FX2ludDMyKGFnYywKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVk
VmFsdWUsCi0gICAgICAgICAgICAgIkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSBB
R0MiKTsKLURFRklORV9pbnQzMihocGYsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNp
ZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkgb3IgZGVhY3RpdmF0ZSgwKSB0
aGUgaGlnaC1wYXNzIGZpbHRlciIpOwotREVGSU5FX2ludDMyKG5zLAotICAgICAgICAgICAgIGtQ
YXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUgKDEpIG9y
IGRlYWN0aXZhdGUoMCkgdGhlIG5vaXNlIHN1cHByZXNzb3IiKTsKLURFRklORV9pbnQzMih0cywK
LSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAg
IkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSB0cmFuc2llbnQgc3VwcHJlc3NvciIp
OwotREVGSU5FX2ludDMyKGJmLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRW
YWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIGJl
YW1mb3JtZXIiKTsKLURFRklORV9pbnQzMihpZSwKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90
U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRl
KDApIHRoZSBpbnRlbGxpZ2liaWxpdHkgZW5oYW5jZXIiKTsKLURFRklORV9pbnQzMih2YWQsCi0g
ICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJB
Y3RpdmF0ZSAoMSkgb3IgZGVhY3RpdmF0ZSgwKSB0aGUgdm9pY2UgYWN0aXZpdHkgZGV0ZWN0b3Ii
KTsKLURFRklORV9pbnQzMihsZSwKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVk
VmFsdWUsCi0gICAgICAgICAgICAgIkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSBs
ZXZlbCBlc3RpbWF0b3IiKTsKLURFRklORV9ib29sKGFsbF9kZWZhdWx0LAotICAgICAgICAgICAg
ZmFsc2UsCi0gICAgICAgICAgICAiQWN0aXZhdGUgYWxsIG9mIHRoZSBkZWZhdWx0IGNvbXBvbmVu
dHMgKHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBhbnkgIgotICAgICAgICAgICAgIm90aGVyIHNldHRp
bmdzKSIpOwotREVGSU5FX2ludDMyKGFlY19zdXBwcmVzc2lvbl9sZXZlbCwKLSAgICAgICAgICAg
ICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAgICAgICAgICAgIlNldCB0aGUgYWVj
IHN1cHByZXNzaW9uIGxldmVsICgwLTIpIik7Ci1ERUZJTkVfaW50MzIoZGVsYXlfYWdub3N0aWMs
Ci0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAg
ICJBY3RpdmF0ZSAoMSkgb3IgZGVhY3RpdmF0ZSgwKSB0aGUgQUVDIGRlbGF5IGFnbm9zdGljIG1v
ZGUiKTsKLURFRklORV9pbnQzMihleHRlbmRlZF9maWx0ZXIsCi0gICAgICAgICAgICAga1BhcmFt
ZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkgb3IgZGVh
Y3RpdmF0ZSgwKSB0aGUgQUVDIGV4dGVuZGVkIGZpbHRlciBtb2RlIik7Ci1ERUZJTkVfaW50MzIo
ZHJpZnRfY29tcGVuc2F0aW9uLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRW
YWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkgdGhlIGRy
aWZ0IGNvbXBlbnNhdGlvbiIpOwotREVGSU5FX2ludDMyKGFlYzMsCi0gICAgICAgICAgICAga1Bh
cmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkgb3Ig
ZGVhY3RpdmF0ZSgwKSB0aGUgZXhwZXJpbWVudGFsIEFFQyBtb2RlIEFFQzMiKTsKLURFRklORV9p
bnQzMihsYywKLSAgICAgICAgICAgICBrUGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUsCi0gICAg
ICAgICAgICAgIkFjdGl2YXRlICgxKSBvciBkZWFjdGl2YXRlKDApIHRoZSBsZXZlbCBjb250cm9s
Iik7Ci1ERUZJTkVfaW50MzIoCi0gICAgcmVmaW5lZF9hZGFwdGl2ZV9maWx0ZXIsCi0gICAga1Bh
cmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICJBY3RpdmF0ZSAoMSkgb3IgZGVhY3RpdmF0
ZSgwKSB0aGUgcmVmaW5lZCBhZGFwdGl2ZSBmaWx0ZXIgZnVuY3Rpb25hbGl0eSIpOwotREVGSU5F
X2ludDMyKGFlY21fcm91dGluZ19tb2RlLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVj
aWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiU3BlY2lmeSB0aGUgQUVDTSByb3V0aW5nIG1vZGUg
KDAtNCkiKTsKLURFRklORV9pbnQzMihhZWNtX2NvbWZvcnRfbm9pc2UsCi0gICAgICAgICAgICAg
a1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJBY3RpdmF0ZSAoMSkg
b3IgZGVhY3RpdmF0ZSgwKSB0aGUgQUVDTSBjb21mb3J0IG5vaXNlIik7Ci1ERUZJTkVfaW50MzIo
YWdjX21vZGUsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAg
ICAgICAgICAgICJTcGVjaWZ5IHRoZSBBR0MgbW9kZSAoMC0yKSIpOwotREVGSU5FX2ludDMyKGFn
Y190YXJnZXRfbGV2ZWwsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVl
LAotICAgICAgICAgICAgICJTcGVjaWZ5IHRoZSBBR0MgdGFyZ2V0IGxldmVsICgwLTMxKSIpOwot
REVGSU5FX2ludDMyKGFnY19saW1pdGVyLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVj
aWZpZWRWYWx1ZSwKLSAgICAgICAgICAgICAiQWN0aXZhdGUgKDEpIG9yIGRlYWN0aXZhdGUoMCkg
dGhlIGxldmVsIGVzdGltYXRvciIpOwotREVGSU5FX2ludDMyKGFnY19jb21wcmVzc2lvbl9nYWlu
LAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZpZWRWYWx1ZSwKLSAgICAgICAgICAg
ICAiU3BlY2lmeSB0aGUgQUdDIGNvbXByZXNzaW9uIGdhaW4gKDAtOTApIik7Ci1ERUZJTkVfaW50
MzIodmFkX2xpa2VsaWhvb2QsCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZh
bHVlLAotICAgICAgICAgICAgICJTcGVjaWZ5IHRoZSBWQUQgbGlrZWxpaG9vZCAoMC0zKSIpOwot
REVGSU5FX2ludDMyKG5zX2xldmVsLAotICAgICAgICAgICAgIGtQYXJhbWV0ZXJOb3RTcGVjaWZp
ZWRWYWx1ZSwKLSAgICAgICAgICAgICAiU3BlY2lmeSB0aGUgTlMgbGV2ZWwgKDAtMykiKTsKLURF
RklORV9pbnQzMihzdHJlYW1fZGVsYXksCi0gICAgICAgICAgICAga1BhcmFtZXRlck5vdFNwZWNp
ZmllZFZhbHVlLAotICAgICAgICAgICAgICJTcGVjaWZ5IHRoZSBzdHJlYW0gZGVsYXkgaW4gbXMg
dG8gdXNlIik7Ci1ERUZJTkVfaW50MzIoc3RyZWFtX2RyaWZ0X3NhbXBsZXMsCi0gICAgICAgICAg
ICAga1BhcmFtZXRlck5vdFNwZWNpZmllZFZhbHVlLAotICAgICAgICAgICAgICJTcGVjaWZ5IHRo
ZSBudW1iZXIgb2Ygc3RyZWFtIGRyaWZ0IHNhbXBsZXMgdG8gdXNlIik7Ci1ERUZJTkVfYm9vbChw
ZXJmb3JtYW5jZV9yZXBvcnQsIGZhbHNlLCAiUmVwb3J0IHRoZSBBUE0gcGVyZm9ybWFuY2UgIik7
Ci1ERUZJTkVfYm9vbCh2ZXJib3NlLCBmYWxzZSwgIlByb2R1Y2UgdmVyYm9zZSBvdXRwdXQiKTsK
LURFRklORV9ib29sKGJpdGV4YWN0bmVzc19yZXBvcnQsCi0gICAgICAgICAgICBmYWxzZSwKLSAg
ICAgICAgICAgICJSZXBvcnQgYml0ZXhhY3RuZXNzIGZvciBhZWMgZHVtcCByZXN1bHQgcmVwcm9k
dWN0aW9uIik7Ci1ERUZJTkVfYm9vbChkaXNjYXJkX3NldHRpbmdzX2luX2FlY2R1bXAsCi0gICAg
ICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICJEaXNjYXJkIGFueSBjb25maWcgc2V0dGluZ3Mg
c3BlY2lmaWVkIGluIHRoZSBhZWMgZHVtcCIpOwotREVGSU5FX2Jvb2woc3RvcmVfaW50ZXJtZWRp
YXRlX291dHB1dCwKLSAgICAgICAgICAgIGZhbHNlLAotICAgICAgICAgICAgIkNyZWF0ZXMgbmV3
IG91dHB1dCBmaWxlcyBhZnRlciBlYWNoIGluaXQiKTsKLQotdm9pZCBTZXRTZXR0aW5nSWZTcGVj
aWZpZWQoY29uc3Qgc3RkOjpzdHJpbmcgdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICBydGM6Ok9wdGlvbmFsPHN0ZDo6c3RyaW5nPiogcGFyYW1ldGVyKSB7Ci0gIGlmICh2YWx1ZS5j
b21wYXJlKCIiKSAhPSAwKSB7Ci0gICAgKnBhcmFtZXRlciA9IHJ0Yzo6T3B0aW9uYWw8c3RkOjpz
dHJpbmc+KHZhbHVlKTsKLSAgfQotfQotCi12b2lkIFNldFNldHRpbmdJZlNwZWNpZmllZChpbnQg
dmFsdWUsIHJ0Yzo6T3B0aW9uYWw8aW50PiogcGFyYW1ldGVyKSB7Ci0gIGlmICh2YWx1ZSAhPSBr
UGFyYW1ldGVyTm90U3BlY2lmaWVkVmFsdWUpIHsKLSAgICAqcGFyYW1ldGVyID0gcnRjOjpPcHRp
b25hbDxpbnQ+KHZhbHVlKTsKLSAgfQotfQotCi12b2lkIFNldFNldHRpbmdJZkZsYWdTZXQoaW50
MzJfdCBmbGFnLCBydGM6Ok9wdGlvbmFsPGJvb2w+KiBwYXJhbWV0ZXIpIHsKLSAgaWYgKGZsYWcg
PT0gMCkgewotICAgICpwYXJhbWV0ZXIgPSBydGM6Ok9wdGlvbmFsPGJvb2w+KGZhbHNlKTsKLSAg
fSBlbHNlIGlmIChmbGFnID09IDEpIHsKLSAgICAqcGFyYW1ldGVyID0gcnRjOjpPcHRpb25hbDxi
b29sPih0cnVlKTsKLSAgfQotfQotCi1TaW11bGF0aW9uU2V0dGluZ3MgQ3JlYXRlU2V0dGluZ3Mo
KSB7Ci0gIFNpbXVsYXRpb25TZXR0aW5ncyBzZXR0aW5nczsKLSAgaWYgKEZMQUdTX2FsbF9kZWZh
dWx0KSB7Ci0gICAgc2V0dGluZ3MudXNlX2xlID0gcnRjOjpPcHRpb25hbDxib29sPih0cnVlKTsK
LSAgICBzZXR0aW5ncy51c2VfdmFkID0gcnRjOjpPcHRpb25hbDxib29sPih0cnVlKTsKLSAgICBz
ZXR0aW5ncy51c2VfaWUgPSBydGM6Ok9wdGlvbmFsPGJvb2w+KGZhbHNlKTsKLSAgICBzZXR0aW5n
cy51c2VfYmYgPSBydGM6Ok9wdGlvbmFsPGJvb2w+KGZhbHNlKTsKLSAgICBzZXR0aW5ncy51c2Vf
dHMgPSBydGM6Ok9wdGlvbmFsPGJvb2w+KHRydWUpOwotICAgIHNldHRpbmdzLnVzZV9ucyA9IHJ0
Yzo6T3B0aW9uYWw8Ym9vbD4odHJ1ZSk7Ci0gICAgc2V0dGluZ3MudXNlX2hwZiA9IHJ0Yzo6T3B0
aW9uYWw8Ym9vbD4odHJ1ZSk7Ci0gICAgc2V0dGluZ3MudXNlX2FnYyA9IHJ0Yzo6T3B0aW9uYWw8
Ym9vbD4odHJ1ZSk7Ci0gICAgc2V0dGluZ3MudXNlX2FlYyA9IHJ0Yzo6T3B0aW9uYWw8Ym9vbD4o
dHJ1ZSk7Ci0gICAgc2V0dGluZ3MudXNlX2FlY20gPSBydGM6Ok9wdGlvbmFsPGJvb2w+KGZhbHNl
KTsKLSAgICBzZXR0aW5ncy51c2VfcmVkID0gcnRjOjpPcHRpb25hbDxib29sPihmYWxzZSk7Ci0g
IH0KLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdTX2R1bXBfaW5wdXQsICZzZXR0aW5ncy5h
ZWNfZHVtcF9pbnB1dF9maWxlbmFtZSk7Ci0gIFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19k
dW1wX291dHB1dCwgJnNldHRpbmdzLmFlY19kdW1wX291dHB1dF9maWxlbmFtZSk7Ci0gIFNldFNl
dHRpbmdJZlNwZWNpZmllZChGTEFHU19pLCAmc2V0dGluZ3MuaW5wdXRfZmlsZW5hbWUpOwotICBT
ZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1NfbywgJnNldHRpbmdzLm91dHB1dF9maWxlbmFtZSk7
Ci0gIFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19yaSwgJnNldHRpbmdzLnJldmVyc2VfaW5w
dXRfZmlsZW5hbWUpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1Nfcm8sICZzZXR0aW5n
cy5yZXZlcnNlX291dHB1dF9maWxlbmFtZSk7Ci0gIFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFH
U19vdXRwdXRfbnVtX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgJnNldHRpbmdz
Lm91dHB1dF9udW1fY2hhbm5lbHMpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1NfcmV2
ZXJzZV9vdXRwdXRfbnVtX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgJnNldHRp
bmdzLnJldmVyc2Vfb3V0cHV0X251bV9jaGFubmVscyk7Ci0gIFNldFNldHRpbmdJZlNwZWNpZmll
ZChGTEFHU19vdXRwdXRfc2FtcGxlX3JhdGVfaHosCi0gICAgICAgICAgICAgICAgICAgICAgICAm
c2V0dGluZ3Mub3V0cHV0X3NhbXBsZV9yYXRlX2h6KTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVk
KEZMQUdTX3JldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgICAgICAg
ICAgICAgJnNldHRpbmdzLnJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6KTsKLSAgU2V0U2V0
dGluZ0lmU3BlY2lmaWVkKEZMQUdTX21pY19wb3NpdGlvbnMsICZzZXR0aW5ncy5taWNyb3Bob25l
X3Bvc2l0aW9ucyk7Ci0gIHNldHRpbmdzLnRhcmdldF9hbmdsZV9kZWdyZWVzID0gRkxBR1NfdGFy
Z2V0X2FuZ2xlX2RlZ3JlZXM7Ci0gIFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1NfYWVjLCAmc2V0
dGluZ3MudXNlX2FlYyk7Ci0gIFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1NfYWVjbSwgJnNldHRp
bmdzLnVzZV9hZWNtKTsKLSAgU2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU19yZWQsICZzZXR0aW5n
cy51c2VfcmVkKTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdTX3JlZF9ncmFwaCwgJnNl
dHRpbmdzLnJlZF9ncmFwaF9vdXRwdXRfZmlsZW5hbWUpOwotICBTZXRTZXR0aW5nSWZGbGFnU2V0
KEZMQUdTX2FnYywgJnNldHRpbmdzLnVzZV9hZ2MpOwotICBTZXRTZXR0aW5nSWZGbGFnU2V0KEZM
QUdTX2hwZiwgJnNldHRpbmdzLnVzZV9ocGYpOwotICBTZXRTZXR0aW5nSWZGbGFnU2V0KEZMQUdT
X25zLCAmc2V0dGluZ3MudXNlX25zKTsKLSAgU2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU190cywg
JnNldHRpbmdzLnVzZV90cyk7Ci0gIFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1NfYmYsICZzZXR0
aW5ncy51c2VfYmYpOwotICBTZXRTZXR0aW5nSWZGbGFnU2V0KEZMQUdTX2llLCAmc2V0dGluZ3Mu
dXNlX2llKTsKLSAgU2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU192YWQsICZzZXR0aW5ncy51c2Vf
dmFkKTsKLSAgU2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU19sZSwgJnNldHRpbmdzLnVzZV9sZSk7
Ci0gIFNldFNldHRpbmdJZlNwZWNpZmllZChGTEFHU19hZWNfc3VwcHJlc3Npb25fbGV2ZWwsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAmc2V0dGluZ3MuYWVjX3N1cHByZXNzaW9uX2xldmVsKTsK
LSAgU2V0U2V0dGluZ0lmRmxhZ1NldChGTEFHU19kZWxheV9hZ25vc3RpYywgJnNldHRpbmdzLnVz
ZV9kZWxheV9hZ25vc3RpYyk7Ci0gIFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1NfZXh0ZW5kZWRf
ZmlsdGVyLCAmc2V0dGluZ3MudXNlX2V4dGVuZGVkX2ZpbHRlcik7Ci0gIFNldFNldHRpbmdJZkZs
YWdTZXQoRkxBR1NfZHJpZnRfY29tcGVuc2F0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICZz
ZXR0aW5ncy51c2VfZHJpZnRfY29tcGVuc2F0aW9uKTsKLSAgU2V0U2V0dGluZ0lmRmxhZ1NldChG
TEFHU19yZWZpbmVkX2FkYXB0aXZlX2ZpbHRlciwKLSAgICAgICAgICAgICAgICAgICAgICAmc2V0
dGluZ3MudXNlX3JlZmluZWRfYWRhcHRpdmVfZmlsdGVyKTsKLQotICBTZXRTZXR0aW5nSWZGbGFn
U2V0KEZMQUdTX2FlYzMsICZzZXR0aW5ncy51c2VfYWVjMyk7Ci0gIFNldFNldHRpbmdJZkZsYWdT
ZXQoRkxBR1NfbGMsICZzZXR0aW5ncy51c2VfbGMpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQo
RkxBR1NfYWVjbV9yb3V0aW5nX21vZGUsICZzZXR0aW5ncy5hZWNtX3JvdXRpbmdfbW9kZSk7Ci0g
IFNldFNldHRpbmdJZkZsYWdTZXQoRkxBR1NfYWVjbV9jb21mb3J0X25vaXNlLAotICAgICAgICAg
ICAgICAgICAgICAgICZzZXR0aW5ncy51c2VfYWVjbV9jb21mb3J0X25vaXNlKTsKLSAgU2V0U2V0
dGluZ0lmU3BlY2lmaWVkKEZMQUdTX2FnY19tb2RlLCAmc2V0dGluZ3MuYWdjX21vZGUpOwotICBT
ZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1NfYWdjX3RhcmdldF9sZXZlbCwgJnNldHRpbmdzLmFn
Y190YXJnZXRfbGV2ZWwpOwotICBTZXRTZXR0aW5nSWZGbGFnU2V0KEZMQUdTX2FnY19saW1pdGVy
LCAmc2V0dGluZ3MudXNlX2FnY19saW1pdGVyKTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZM
QUdTX2FnY19jb21wcmVzc2lvbl9nYWluLAotICAgICAgICAgICAgICAgICAgICAgICAgJnNldHRp
bmdzLmFnY19jb21wcmVzc2lvbl9nYWluKTsKLSAgU2V0U2V0dGluZ0lmU3BlY2lmaWVkKEZMQUdT
X3ZhZF9saWtlbGlob29kLCAmc2V0dGluZ3MudmFkX2xpa2VsaWhvb2QpOwotICBTZXRTZXR0aW5n
SWZTcGVjaWZpZWQoRkxBR1NfbnNfbGV2ZWwsICZzZXR0aW5ncy5uc19sZXZlbCk7Ci0gIFNldFNl
dHRpbmdJZlNwZWNpZmllZChGTEFHU19zdHJlYW1fZGVsYXksICZzZXR0aW5ncy5zdHJlYW1fZGVs
YXkpOwotICBTZXRTZXR0aW5nSWZTcGVjaWZpZWQoRkxBR1Nfc3RyZWFtX2RyaWZ0X3NhbXBsZXMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAmc2V0dGluZ3Muc3RyZWFtX2RyaWZ0X3NhbXBsZXMp
OwotICBzZXR0aW5ncy5yZXBvcnRfcGVyZm9ybWFuY2UgPSBGTEFHU19wZXJmb3JtYW5jZV9yZXBv
cnQ7Ci0gIHNldHRpbmdzLnVzZV92ZXJib3NlX2xvZ2dpbmcgPSBGTEFHU192ZXJib3NlOwotICBz
ZXR0aW5ncy5yZXBvcnRfYml0ZXhhY3RuZXNzID0gRkxBR1NfYml0ZXhhY3RuZXNzX3JlcG9ydDsK
LSAgc2V0dGluZ3MuZGlzY2FyZF9hbGxfc2V0dGluZ3NfaW5fYWVjZHVtcCA9IEZMQUdTX2Rpc2Nh
cmRfc2V0dGluZ3NfaW5fYWVjZHVtcDsKLSAgc2V0dGluZ3MuZml4ZWRfaW50ZXJmYWNlID0gRkxB
R1NfZml4ZWRfaW50ZXJmYWNlOwotICBzZXR0aW5ncy5zdG9yZV9pbnRlcm1lZGlhdGVfb3V0cHV0
ID0gRkxBR1Nfc3RvcmVfaW50ZXJtZWRpYXRlX291dHB1dDsKLQotICByZXR1cm4gc2V0dGluZ3M7
Ci19Ci0KLXZvaWQgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoYm9vbCBjb25kaXRpb24s
IHN0ZDo6c3RyaW5nIG1lc3NhZ2UpIHsKLSAgaWYgKGNvbmRpdGlvbikgewotICAgIHN0ZDo6Y2Vy
ciA8PCBtZXNzYWdlIDw8IHN0ZDo6ZW5kbDsKLSAgICBleGl0KDEpOwotICB9Ci19Ci0KLXZvaWQg
UGVyZm9ybUJhc2ljUGFyYW1ldGVyU2FuaXR5Q2hlY2tzKGNvbnN0IFNpbXVsYXRpb25TZXR0aW5n
cyYgc2V0dGluZ3MpIHsKLSAgaWYgKHNldHRpbmdzLmlucHV0X2ZpbGVuYW1lIHx8IHNldHRpbmdz
LnJldmVyc2VfaW5wdXRfZmlsZW5hbWUpIHsKLSAgICBSZXBvcnRDb25kaXRpb25hbEVycm9yQW5k
RXhpdCghIXNldHRpbmdzLmFlY19kdW1wX2lucHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJFcnJvcjogVGhlIGFlYyBkdW1wIGNhbm5vdCBiZSBzcGVjaWZp
ZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0b2dldGhlciB3aXRoIGlu
cHV0IHdhdiBmaWxlcyFcbiIpOwotCi0gICAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQo
IXNldHRpbmdzLmlucHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJFcnJvcjogV2hlbiBvcGVyYXRpbmcgYXQgd2F2IGZpbGVzLCB0aGUgIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJpbnB1dCB3YXYgZmlsZW5hbWUgbXVzdCBiZSAiCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNpZmllZCFcbiIpOwotCi0gICAg
UmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICAgIHNldHRpbmdzLnJldmVyc2Vf
b3V0cHV0X2ZpbGVuYW1lICYmICFzZXR0aW5ncy5yZXZlcnNlX2lucHV0X2ZpbGVuYW1lLAotICAg
ICAgICAiRXJyb3I6IFdoZW4gb3BlcmF0aW5nIGF0IHdhdiBmaWxlcywgdGhlIHJldmVyc2UgaW5w
dXQgd2F2IGZpbGVuYW1lICIKLSAgICAgICAgIm11c3QgYmUgc3BlY2lmaWVkIGlmIHRoZSByZXZl
cnNlIG91dHB1dCB3YXYgZmlsZW5hbWUgaXMgc3BlY2lmaWVkIVxuIik7Ci0gIH0gZWxzZSB7Ci0g
ICAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoIXNldHRpbmdzLmFlY19kdW1wX2lucHV0
X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvcjogRWl0
aGVyIHRoZSBhZWMgZHVtcCBvciB0aGUgd2F2ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaW5wdXQgZmlsZXMgbXVzdCBiZSBzcGVjaWZpZWQhXG4iKTsKLSAgfQotCi0gIFJl
cG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGluZ3MudXNlX2FlYyAmJiAq
c2V0dGluZ3MudXNlX2FlYyAmJiBzZXR0aW5ncy51c2VfYWVjbSAmJgotICAgICAgICAgICpzZXR0
aW5ncy51c2VfYWVjbSwKLSAgICAgICJFcnJvcjogVGhlIEFFQyBhbmQgdGhlIEFFQ00gY2Fubm90
IGJlIGFjdGl2YXRlZCBhdCB0aGUgc2FtZSB0aW1lIVxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9u
YWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5ncy5vdXRwdXRfc2FtcGxlX3JhdGVfaHogJiYg
KnNldHRpbmdzLm91dHB1dF9zYW1wbGVfcmF0ZV9oeiA8PSAwLAotICAgICAgIkVycm9yOiAtLW91
dHB1dF9zYW1wbGVfcmF0ZV9oeiBtdXN0IGJlIHBvc2l0aXZlIVxuIik7Ci0KLSAgUmVwb3J0Q29u
ZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5ncy5yZXZlcnNlX291dHB1dF9zYW1w
bGVfcmF0ZV9oeiAmJgotICAgICAgICAgIHNldHRpbmdzLm91dHB1dF9zYW1wbGVfcmF0ZV9oeiAm
JgotICAgICAgICAgICpzZXR0aW5ncy5vdXRwdXRfc2FtcGxlX3JhdGVfaHogPD0gMCwKLSAgICAg
ICJFcnJvcjogLS1yZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZV9oeiBtdXN0IGJlIHBvc2l0aXZl
IVxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5n
cy5vdXRwdXRfbnVtX2NoYW5uZWxzICYmICpzZXR0aW5ncy5vdXRwdXRfbnVtX2NoYW5uZWxzIDw9
IDAsCi0gICAgICAiRXJyb3I6IC0tb3V0cHV0X251bV9jaGFubmVscyBtdXN0IGJlIHBvc2l0aXZl
IVxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5n
cy5yZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMgJiYKLSAgICAgICAgICAqc2V0dGluZ3MucmV2
ZXJzZV9vdXRwdXRfbnVtX2NoYW5uZWxzIDw9IDAsCi0gICAgICAiRXJyb3I6IC0tcmV2ZXJzZV9v
dXRwdXRfbnVtX2NoYW5uZWxzIG11c3QgYmUgcG9zaXRpdmUhXG4iKTsKLQotICBSZXBvcnRDb25k
aXRpb25hbEVycm9yQW5kRXhpdCgKLSAgICAgIHNldHRpbmdzLnVzZV9iZiAmJiAqc2V0dGluZ3Mu
dXNlX2JmICYmICFzZXR0aW5ncy5taWNyb3Bob25lX3Bvc2l0aW9ucywKLSAgICAgICJFcnJvcjog
LS1taWNfcG9zaXRpb25zIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gdGhlIGJlYW1mb3JtZXIgaXMg
IgotICAgICAgImFjdGl2YXRlZC5cbiIpOwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRF
eGl0KAotICAgICAgc2V0dGluZ3MudGFyZ2V0X2FuZ2xlX2RlZ3JlZXMgPCAwIHx8IHNldHRpbmdz
LnRhcmdldF9hbmdsZV9kZWdyZWVzID4gMzU5LAotICAgICAgIkVycm9yOiAtdGFyZ2V0X2FuZ2xl
X2RlZ3JlZXMgbXVzdCBiZSBzcGVjaWZpZWQgYmV0d2VlbiAwIGFuZCAzNTkuXG4iKTsKLQotICBS
ZXBvcnRDb25kaXRpb25hbEVycm9yQW5kRXhpdCgKLSAgICAgIHNldHRpbmdzLmFlY19zdXBwcmVz
c2lvbl9sZXZlbCAmJgotICAgICAgICAgICgoKnNldHRpbmdzLmFlY19zdXBwcmVzc2lvbl9sZXZl
bCkgPCAwIHx8Ci0gICAgICAgICAgICgqc2V0dGluZ3MuYWVjX3N1cHByZXNzaW9uX2xldmVsKSA+
IDIpLAotICAgICAgIkVycm9yOiAtLWFlY19zdXBwcmVzc2lvbl9sZXZlbCBtdXN0IGJlIHNwZWNp
ZmllZCBiZXR3ZWVuIDAgYW5kIDIuXG4iKTsKLQotICBSZXBvcnRDb25kaXRpb25hbEVycm9yQW5k
RXhpdCgKLSAgICAgIHNldHRpbmdzLmFlY21fcm91dGluZ19tb2RlICYmICgoKnNldHRpbmdzLmFl
Y21fcm91dGluZ19tb2RlKSA8IDAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoKnNldHRpbmdzLmFlY21fcm91dGluZ19tb2RlKSA+IDQpLAotICAgICAgIkVycm9yOiAt
LWFlY21fcm91dGluZ19tb2RlIG11c3QgYmUgc3BlY2lmaWVkIGJldHdlZW4gMCBhbmQgNC5cbiIp
OwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0KAotICAgICAgc2V0dGluZ3MuYWdj
X3RhcmdldF9sZXZlbCAmJiAoKCpzZXR0aW5ncy5hZ2NfdGFyZ2V0X2xldmVsKSA8IDAgfHwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqc2V0dGluZ3MuYWdjX3RhcmdldF9s
ZXZlbCkgPiAzMSksCi0gICAgICAiRXJyb3I6IC0tYWdjX3RhcmdldF9sZXZlbCBtdXN0IGJlIHNw
ZWNpZmllZCBiZXR3ZWVuIDAgYW5kIDMxLlxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJv
ckFuZEV4aXQoCi0gICAgICBzZXR0aW5ncy5hZ2NfY29tcHJlc3Npb25fZ2FpbiAmJiAoKCpzZXR0
aW5ncy5hZ2NfY29tcHJlc3Npb25fZ2FpbikgPCAwIHx8Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCpzZXR0aW5ncy5hZ2NfY29tcHJlc3Npb25fZ2FpbikgPiA5MCks
Ci0gICAgICAiRXJyb3I6IC0tYWdjX2NvbXByZXNzaW9uX2dhaW4gbXVzdCBiZSBzcGVjaWZpZWQg
YmV0d2VlbiAwIGFuZCA5MC5cbiIpOwotCi0gIFJlcG9ydENvbmRpdGlvbmFsRXJyb3JBbmRFeGl0
KAotICAgICAgc2V0dGluZ3MudmFkX2xpa2VsaWhvb2QgJiYKLSAgICAgICAgICAoKCpzZXR0aW5n
cy52YWRfbGlrZWxpaG9vZCkgPCAwIHx8ICgqc2V0dGluZ3MudmFkX2xpa2VsaWhvb2QpID4gMyks
Ci0gICAgICAiRXJyb3I6IC0tdmFkX2xpa2VsaWhvb2QgbXVzdCBiZSBzcGVjaWZpZWQgYmV0d2Vl
biAwIGFuZCAzLlxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAg
ICBzZXR0aW5ncy5uc19sZXZlbCAmJgotICAgICAgICAgICgoKnNldHRpbmdzLm5zX2xldmVsKSA8
IDAgfHwgKCpzZXR0aW5ncy5uc19sZXZlbCkgPiAzKSwKLSAgICAgICJFcnJvcjogLS1uc19sZXZl
bCBtdXN0IGJlIHNwZWNpZmllZCBiZXR3ZWVuIDAgYW5kIDMuXG4iKTsKLQotICBSZXBvcnRDb25k
aXRpb25hbEVycm9yQW5kRXhpdCgKLSAgICAgIHNldHRpbmdzLnJlcG9ydF9iaXRleGFjdG5lc3Mg
JiYgIXNldHRpbmdzLmFlY19kdW1wX2lucHV0X2ZpbGVuYW1lLAotICAgICAgIkVycm9yOiAtLWJp
dGV4YWN0bmVzc19yZXBvcnQgY2FuIG9ubHkgYmUgdXNlZCB3aGVuIG9wZXJhdGluZyBvbiBhbiAi
Ci0gICAgICAiYWVjZHVtcFxuIik7Ci0KLSAgYXV0byB2YWxpZF93YXZfbmFtZSA9IFtdKGNvbnN0
IHN0ZDo6c3RyaW5nJiB3YXZfZmlsZV9uYW1lKSB7Ci0gICAgaWYgKHdhdl9maWxlX25hbWUuc2l6
ZSgpIDwgNSkgewotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoKHdhdl9maWxl
X25hbWUuY29tcGFyZSh3YXZfZmlsZV9uYW1lLnNpemUoKSAtIDQsIDQsICIud2F2IikgPT0gMCkg
fHwKLSAgICAgICAgKHdhdl9maWxlX25hbWUuY29tcGFyZSh3YXZfZmlsZV9uYW1lLnNpemUoKSAt
IDQsIDQsICIuV0FWIikgPT0gMCkpIHsKLSAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci0gIH07Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0g
ICAgICBzZXR0aW5ncy5pbnB1dF9maWxlbmFtZSAmJiAoIXZhbGlkX3dhdl9uYW1lKCpzZXR0aW5n
cy5pbnB1dF9maWxlbmFtZSkpLAotICAgICAgIkVycm9yOiAtLWkgbXVzdCBiZSBhIHZhbGlkIC53
YXYgZmlsZSBuYW1lLlxuIik7Ci0KLSAgUmVwb3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0g
ICAgICBzZXR0aW5ncy5vdXRwdXRfZmlsZW5hbWUgJiYgKCF2YWxpZF93YXZfbmFtZSgqc2V0dGlu
Z3Mub3V0cHV0X2ZpbGVuYW1lKSksCi0gICAgICAiRXJyb3I6IC0tbyBtdXN0IGJlIGEgdmFsaWQg
LndhdiBmaWxlIG5hbWUuXG4iKTsKLQotICBSZXBvcnRDb25kaXRpb25hbEVycm9yQW5kRXhpdCgK
LSAgICAgIHNldHRpbmdzLnJldmVyc2VfaW5wdXRfZmlsZW5hbWUgJiYKLSAgICAgICAgICAoIXZh
bGlkX3dhdl9uYW1lKCpzZXR0aW5ncy5yZXZlcnNlX2lucHV0X2ZpbGVuYW1lKSksCi0gICAgICAi
RXJyb3I6IC0tcmkgbXVzdCBiZSBhIHZhbGlkIC53YXYgZmlsZSBuYW1lLlxuIik7Ci0KLSAgUmVw
b3J0Q29uZGl0aW9uYWxFcnJvckFuZEV4aXQoCi0gICAgICBzZXR0aW5ncy5yZXZlcnNlX291dHB1
dF9maWxlbmFtZSAmJgotICAgICAgICAgICghdmFsaWRfd2F2X25hbWUoKnNldHRpbmdzLnJldmVy
c2Vfb3V0cHV0X2ZpbGVuYW1lKSksCi0gICAgICAiRXJyb3I6IC0tcm8gbXVzdCBiZSBhIHZhbGlk
IC53YXYgZmlsZSBuYW1lLlxuIik7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZQotCi1pbnQgbWFpbihp
bnQgYXJnYywgY2hhciogYXJndltdKSB7Ci0gIGdvb2dsZTo6U2V0VXNhZ2VNZXNzYWdlKGtVc2Fn
ZURlc2NyaXB0aW9uKTsKLSAgZ29vZ2xlOjpQYXJzZUNvbW1hbmRMaW5lRmxhZ3MoJmFyZ2MsICZh
cmd2LCB0cnVlKTsKLQotICBTaW11bGF0aW9uU2V0dGluZ3Mgc2V0dGluZ3MgPSBDcmVhdGVTZXR0
aW5ncygpOwotICBQZXJmb3JtQmFzaWNQYXJhbWV0ZXJTYW5pdHlDaGVja3Moc2V0dGluZ3MpOwot
ICBzdGQ6OnVuaXF1ZV9wdHI8QXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9yPiBwcm9jZXNzb3I7Ci0K
LSAgaWYgKHNldHRpbmdzLmFlY19kdW1wX2lucHV0X2ZpbGVuYW1lKSB7Ci0gICAgcHJvY2Vzc29y
LnJlc2V0KG5ldyBBZWNEdW1wQmFzZWRTaW11bGF0b3Ioc2V0dGluZ3MpKTsKLSAgfSBlbHNlIHsK
LSAgICBwcm9jZXNzb3IucmVzZXQobmV3IFdhdkJhc2VkU2ltdWxhdG9yKHNldHRpbmdzKSk7Ci0g
IH0KLQotICBwcm9jZXNzb3ItPlByb2Nlc3MoKTsKLQotICBpZiAoc2V0dGluZ3MucmVwb3J0X3Bl
cmZvcm1hbmNlKSB7Ci0gICAgY29uc3QgYXV0byYgcHJvY190aW1lID0gcHJvY2Vzc29yLT5wcm9j
X3RpbWUoKTsKLSAgICBpbnQ2NF90IGV4ZWNfdGltZV91cyA9IHByb2NfdGltZS5zdW0gLyBydGM6
OmtOdW1OYW5vc2Vjc1Blck1pY3Jvc2VjOwotICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmVuZGwKLSAg
ICAgICAgICAgICAgPDwgIkV4ZWN1dGlvbiB0aW1lOiAiIDw8IGV4ZWNfdGltZV91cyAqIDFlLTYg
PDwgIiBzLCBGaWxlIHRpbWU6ICIKLSAgICAgICAgICAgICAgPDwgcHJvY2Vzc29yLT5nZXRfbnVt
X3Byb2Nlc3Nfc3RyZWFtX2NhbGxzKCkgKiAxLmYgLwotICAgICAgICAgICAgICAgICAgICAgQXVk
aW9Qcm9jZXNzaW5nU2ltdWxhdG9yOjprQ2h1bmtzUGVyU2Vjb25kCi0gICAgICAgICAgICAgIDw8
IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICA8PCAiVGltZSBwZXIgZndkIHN0cmVhbSBjaHVuayAo
bWVhbiwgbWF4LCBtaW4pOiAiIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgICAgICA8PCBleGVjX3Rp
bWVfdXMgKiAxLmYgLyBwcm9jZXNzb3ItPmdldF9udW1fcHJvY2Vzc19zdHJlYW1fY2FsbHMoKQot
ICAgICAgICAgICAgICA8PCAiIHVzLCAiIDw8IDEuZiAqIHByb2NfdGltZS5tYXggLyBydGM6OmtO
dW1OYW5vc2Vjc1Blck1pY3Jvc2VjCi0gICAgICAgICAgICAgIDw8ICIgdXMsICIgPDwgMS5mICog
cHJvY190aW1lLm1pbiAvIHJ0Yzo6a051bU5hbm9zZWNzUGVyTWljcm9zZWMKLSAgICAgICAgICAg
ICAgPDwgIiB1cyIgPDwgc3RkOjplbmRsOwotICB9Ci0KLSAgaWYgKHNldHRpbmdzLnJlcG9ydF9i
aXRleGFjdG5lc3MgJiYgc2V0dGluZ3MuYWVjX2R1bXBfaW5wdXRfZmlsZW5hbWUpIHsKLSAgICBp
ZiAocHJvY2Vzc29yLT5PdXRwdXRXYXNCaXRleGFjdCgpKSB7Ci0gICAgICBzdGQ6OmNvdXQgPDwg
IlRoZSBwcm9jZXNzaW5nIHdhcyBiaXRleGFjdC4iOwotICAgIH0gZWxzZSB7Ci0gICAgICBzdGQ6
OmNvdXQgPDwgIlRoZSBwcm9jZXNzaW5nIHdhcyBub3QgYml0ZXhhY3QuIjsKLSAgICB9Ci0gIH0K
LQotICByZXR1cm4gMDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVzcGFj
ZSB3ZWJydGMKLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewotICByZXR1cm4g
d2VicnRjOjp0ZXN0OjptYWluKGFyZ2MsIGFyZ3YpOwotfQpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3Qv
Yml0ZXhhY3RuZXNzX3Rvb2xzLmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2JpdGV4
YWN0bmVzc190b29scy5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYml0
ZXhhY3RuZXNzX3Rvb2xzLmNjCShub25leGlzdGVudCkKQEAgLTEsMTQ2ICswLDAgQEAKLS8qCi0g
KiAgQ29weXJpZ2h0IChjKSAyMDE2IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmln
aHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRp
b25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICog
IGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBt
YXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBz
b3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vz
c2luZy90ZXN0L2JpdGV4YWN0bmVzc190b29scy5oIgotCi0jaW5jbHVkZSA8bWF0aC5oPgotI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgot
Ci0jaW5jbHVkZSAid2VicnRjL2Jhc2UvYXJyYXlfdmlldy5oIgotI2luY2x1ZGUgIndlYnJ0Yy90
ZXN0L3Rlc3RzdXBwb3J0L2ZpbGV1dGlscy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSB0ZXN0IHsKLQotc3RkOjpzdHJpbmcgR2V0QXBtUmVuZGVyVGVzdFZlY3RvckZpbGVOYW1l
KGludCBzYW1wbGVfcmF0ZV9oeikgewotICBzd2l0Y2ggKHNhbXBsZV9yYXRlX2h6KSB7Ci0gICAg
Y2FzZSA4MDAwOgotICAgICAgcmV0dXJuIFJlc291cmNlUGF0aCgiZmFyOF9zdGVyZW8iLCAicGNt
Iik7Ci0gICAgY2FzZSAxNjAwMDoKLSAgICAgIHJldHVybiBSZXNvdXJjZVBhdGgoImZhcjE2X3N0
ZXJlbyIsICJwY20iKTsKLSAgICBjYXNlIDMyMDAwOgotICAgICAgcmV0dXJuIFJlc291cmNlUGF0
aCgiZmFyMzJfc3RlcmVvIiwgInBjbSIpOwotICAgIGNhc2UgNDgwMDA6Ci0gICAgICByZXR1cm4g
UmVzb3VyY2VQYXRoKCJmYXI0OF9zdGVyZW8iLCAicGNtIik7Ci0gICAgZGVmYXVsdDoKLSAgICAg
IFJUQ19EQ0hFQ0soZmFsc2UpOwotICB9Ci0gIHJldHVybiAiIjsKLX0KLQotc3RkOjpzdHJpbmcg
R2V0QXBtQ2FwdHVyZVRlc3RWZWN0b3JGaWxlTmFtZShpbnQgc2FtcGxlX3JhdGVfaHopIHsKLSAg
c3dpdGNoIChzYW1wbGVfcmF0ZV9oeikgewotICAgIGNhc2UgODAwMDoKLSAgICAgIHJldHVybiBS
ZXNvdXJjZVBhdGgoIm5lYXI4X3N0ZXJlbyIsICJwY20iKTsKLSAgICBjYXNlIDE2MDAwOgotICAg
ICAgcmV0dXJuIFJlc291cmNlUGF0aCgibmVhcjE2X3N0ZXJlbyIsICJwY20iKTsKLSAgICBjYXNl
IDMyMDAwOgotICAgICAgcmV0dXJuIFJlc291cmNlUGF0aCgibmVhcjMyX3N0ZXJlbyIsICJwY20i
KTsKLSAgICBjYXNlIDQ4MDAwOgotICAgICAgcmV0dXJuIFJlc291cmNlUGF0aCgibmVhcjQ4X3N0
ZXJlbyIsICJwY20iKTsKLSAgICBkZWZhdWx0OgotICAgICAgUlRDX0RDSEVDSyhmYWxzZSk7Ci0g
IH0KLSAgcmV0dXJuICIiOwotfQotCi12b2lkIFJlYWRGbG9hdFNhbXBsZXNGcm9tU3RlcmVvRmls
ZShzaXplX3Qgc2FtcGxlc19wZXJfY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBudW1fY2hhbm5lbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBJbnB1dEF1ZGlvRmlsZSogc3RlcmVvX3BjbV9maWxlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcnRjOjpBcnJheVZpZXc8ZmxvYXQ+IGRhdGEpIHsKLSAg
UlRDX0RDSEVDS19FUShkYXRhLnNpemUoKSwgc2FtcGxlc19wZXJfY2hhbm5lbCAqIG51bV9jaGFu
bmVscyk7Ci0gIHN0ZDo6dmVjdG9yPGludDE2X3Q+IHJlYWRfc2FtcGxlcyhzYW1wbGVzX3Blcl9j
aGFubmVsICogMik7Ci0gIHN0ZXJlb19wY21fZmlsZS0+UmVhZChzYW1wbGVzX3Blcl9jaGFubmVs
ICogMiwgcmVhZF9zYW1wbGVzLmRhdGEoKSk7Ci0KLSAgLy8gQ29udmVydCBzYW1wbGVzIHRvIGZs
b2F0IGFuZCBkaXNjYXJkIGFueSBjaGFubmVscyBub3QgbmVlZGVkLgotICBmb3IgKHNpemVfdCBz
YW1wbGUgPSAwOyBzYW1wbGUgPCBzYW1wbGVzX3Blcl9jaGFubmVsOyArK3NhbXBsZSkgewotICAg
IGZvciAoc2l6ZV90IGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgbnVtX2NoYW5uZWxzOyArK2NoYW5u
ZWwpIHsKLSAgICAgIGRhdGFbc2FtcGxlICogbnVtX2NoYW5uZWxzICsgY2hhbm5lbF0gPQotICAg
ICAgICAgIHJlYWRfc2FtcGxlc1tzYW1wbGUgKiAyICsgY2hhbm5lbF0gLyAzMjc2OC4wZjsKLSAg
ICB9Ci0gIH0KLX0KLQotOjp0ZXN0aW5nOjpBc3NlcnRpb25SZXN1bHQgVmVyaWZ5RGVpbnRlcmxl
YXZlZEFycmF5KAotICAgIHNpemVfdCBzYW1wbGVzX3Blcl9jaGFubmVsLAotICAgIHNpemVfdCBu
dW1fY2hhbm5lbHMsCi0gICAgcnRjOjpBcnJheVZpZXc8Y29uc3QgZmxvYXQ+IHJlZmVyZW5jZSwK
LSAgICBydGM6OkFycmF5Vmlldzxjb25zdCBmbG9hdD4gb3V0cHV0LAotICAgIGZsb2F0IGVsZW1l
bnRfZXJyb3JfYm91bmQpIHsKLSAgLy8gRm9ybSB2ZWN0b3JzIHRvIGNvbXBhcmUgdGhlIHJlZmVy
ZW5jZSB0by4gT25seSB0aGUgZmlyc3QgdmFsdWVzIG9mIHRoZQotICAvLyBvdXRwdXRzIGFyZSBj
b21wYXJlZCBpbiBvcmRlciBub3QgaGF2aW5nIHRvIHNwZWNpZnkgYWxsIHByZWNlZWRpbmcgZnJh
bWVzCi0gIC8vIGFzIHRlc3R2ZWN0b3JzLgotICBjb25zdCBzaXplX3QgcmVmZXJlbmNlX2ZyYW1l
X2xlbmd0aCA9Ci0gICAgICBydGM6OkNoZWNrZWREaXZFeGFjdChyZWZlcmVuY2Uuc2l6ZSgpLCBu
dW1fY2hhbm5lbHMpOwotCi0gIHN0ZDo6dmVjdG9yPGZsb2F0PiBvdXRwdXRfdG9fdmVyaWZ5Owot
ICBmb3IgKHNpemVfdCBjaGFubmVsX25vID0gMDsgY2hhbm5lbF9ubyA8IG51bV9jaGFubmVsczsg
KytjaGFubmVsX25vKSB7Ci0gICAgb3V0cHV0X3RvX3ZlcmlmeS5pbnNlcnQob3V0cHV0X3RvX3Zl
cmlmeS5lbmQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQuYmVnaW4oKSAr
IGNoYW5uZWxfbm8gKiBzYW1wbGVzX3Blcl9jaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dC5iZWdpbigpICsgY2hhbm5lbF9ubyAqIHNhbXBsZXNfcGVyX2NoYW5uZWwg
KwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VfZnJhbWVfbGVuZ3Ro
KTsKLSAgfQotCi0gIHJldHVybiBWZXJpZnlBcnJheShyZWZlcmVuY2UsIG91dHB1dF90b192ZXJp
ZnksIGVsZW1lbnRfZXJyb3JfYm91bmQpOwotfQotCi06OnRlc3Rpbmc6OkFzc2VydGlvblJlc3Vs
dCBWZXJpZnlBcnJheShydGM6OkFycmF5Vmlldzxjb25zdCBmbG9hdD4gcmVmZXJlbmNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjOjpBcnJheVZpZXc8Y29uc3Qg
ZmxvYXQ+IG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0IGVsZW1lbnRfZXJyb3JfYm91bmQpIHsKLSAgLy8gVGhlIHZlY3RvcnMgYXJlIGRlZW1lZCB0
byBiZSBiaXRleGFjdCBvbmx5IGlmCi0gIC8vIGEpIG91dHB1dCBoYXZlIGEgc2l6ZSBhdCBsZWFz
dCBhcyBsb25nIGFzIHRoZSByZWZlcmVuY2UuCi0gIC8vIGIpIHRoZSBzYW1wbGVzIGluIHRoZSBy
ZWZlcmVuY2UgYXJlIGJpdGV4YWN0IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgc2FtcGxlcwotICAv
LyAgICBpbiB0aGUgb3V0cHV0LgotCi0gIGJvb2wgZXF1YWwgPSB0cnVlOwotICBpZiAob3V0cHV0
LnNpemUoKSA8IHJlZmVyZW5jZS5zaXplKCkpIHsKLSAgICBlcXVhbCA9IGZhbHNlOwotICB9IGVs
c2UgewotICAgIC8vIENvbXBhcmUgdGhlIGZpcnN0IHNhbXBsZXMgaW4gdGhlIHZlY3RvcnMuCi0g
ICAgZm9yIChzaXplX3QgayA9IDA7IGsgPCByZWZlcmVuY2Uuc2l6ZSgpOyArK2spIHsKLSAgICAg
IGlmIChmYWJzKG91dHB1dFtrXSAtIHJlZmVyZW5jZVtrXSkgPiBlbGVtZW50X2Vycm9yX2JvdW5k
KSB7Ci0gICAgICAgIGVxdWFsID0gZmFsc2U7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotICAg
IH0KLSAgfQotCi0gIGlmIChlcXVhbCkgewotICAgIHJldHVybiA6OnRlc3Rpbmc6OkFzc2VydGlv
blN1Y2Nlc3MoKTsKLSAgfQotCi0gIC8vIExhbWJkYSBmdW5jdGlvbiB0aGF0IHByb2R1Y2VzIGEg
Zm9ybWF0dGVkIHN0cmluZyB3aXRoIHRoZSBkYXRhIGluIHRoZQotICAvLyB2ZWN0b3IuCi0gIGF1
dG8gcHJpbnRfdmVjdG9yX2luX2NfZm9ybWF0ID0gW10ocnRjOjpBcnJheVZpZXc8Y29uc3QgZmxv
YXQ+IHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bV92
YWx1ZXNfdG9fcHJpbnQpIHsKLSAgICBzdGQ6OnN0cmluZyBzID0gInsgIjsKLSAgICBmb3IgKHNp
emVfdCBrID0gMDsgayA8IHN0ZDo6bWluKG51bV92YWx1ZXNfdG9fcHJpbnQsIHYuc2l6ZSgpKTsg
KytrKSB7Ci0gICAgICBzICs9IHN0ZDo6dG9fc3RyaW5nKHZba10pICsgImYiOwotICAgICAgcyAr
PSAoayA8IChudW1fdmFsdWVzX3RvX3ByaW50IC0gMSkpID8gIiwgIiA6ICIiOwotICAgIH0KLSAg
ICByZXR1cm4gcyArICIgfSI7Ci0gIH07Ci0KLSAgLy8gSWYgdGhlIHZlY3RvcnMgYXJlIGRlZW1l
ZCBub3QgdG8gYmUgc2ltaWxhciwgcmV0dXJuIGEgcmVwb3J0IG9mIHRoZQotICAvLyBkaWZmZXJl
bmNlLgotICByZXR1cm4gOjp0ZXN0aW5nOjpBc3NlcnRpb25GYWlsdXJlKCkKLSAgICAgICAgIDw8
IHN0ZDo6ZW5kbAotICAgICAgICAgPDwgIiAgICBBY3R1YWwgdmFsdWVzIDogIgotICAgICAgICAg
PDwgcHJpbnRfdmVjdG9yX2luX2NfZm9ybWF0KG91dHB1dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6Om1pbihvdXRwdXQuc2l6ZSgpLCByZWZlcmVuY2Uuc2l6ZSgp
KSkKLSAgICAgICAgIDw8IHN0ZDo6ZW5kbAotICAgICAgICAgPDwgIiAgICBFeHBlY3RlZCB2YWx1
ZXM6ICIKLSAgICAgICAgIDw8IHByaW50X3ZlY3Rvcl9pbl9jX2Zvcm1hdChyZWZlcmVuY2UsIHJl
ZmVyZW5jZS5zaXplKCkpIDw8IHN0ZDo6ZW5kbDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QK
LX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2JpdGV4YWN0bmVz
c190b29scy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2JpdGV4YWN0bmVzc190b29s
cy5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9iaXRleGFjdG5lc3NfdG9v
bHMuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDU2ICswLDAgQEAKLQotLyoKLSAqICBDb3B5cmlnaHQg
KGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
Ci0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGlu
IHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVj
dHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUg
UEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZv
dW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgot
ICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX0JJVEVY
QUNUTkVTU19UT09MU19IXwotI2RlZmluZSBXRUJSVENfTU9EVUxFU19BVURJT19QUk9DRVNTSU5H
X1RFU1RfQklURVhBQ1RORVNTX1RPT0xTX0hfCi0KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNs
dWRlICJ3ZWJydGMvYmFzZS9hcnJheV92aWV3LmgiCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMv
YXVkaW9fY29kaW5nL25ldGVxL3Rvb2xzL2lucHV0X2F1ZGlvX2ZpbGUuaCIKLSNpbmNsdWRlICJ3
ZWJydGMvdGVzdC9ndGVzdC5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSB0ZXN0
IHsKLQotLy8gUmV0dXJucyB0ZXN0IHZlY3RvciB0byB1c2UgZm9yIHRoZSByZW5kZXIgc2lnbmFs
IGluIGFuCi0vLyBBUE0gYml0ZXhhY3RuZXNzIHRlc3QuCi1zdGQ6OnN0cmluZyBHZXRBcG1SZW5k
ZXJUZXN0VmVjdG9yRmlsZU5hbWUoaW50IHNhbXBsZV9yYXRlX2h6KTsKLQotLy8gUmV0dXJucyB0
ZXN0IHZlY3RvciB0byB1c2UgZm9yIHRoZSBjYXB0dXJlIHNpZ25hbCBpbiBhbgotLy8gQVBNIGJp
dGV4YWN0bmVzcyB0ZXN0Lgotc3RkOjpzdHJpbmcgR2V0QXBtQ2FwdHVyZVRlc3RWZWN0b3JGaWxl
TmFtZShpbnQgc2FtcGxlX3JhdGVfaHopOwotCi0vLyBFeHRyYWN0IGZsb2F0IHNhbXBsZXMgZnJv
bSBhIHBjbSBmaWxlLgotdm9pZCBSZWFkRmxvYXRTYW1wbGVzRnJvbVN0ZXJlb0ZpbGUoc2l6ZV90
IHNhbXBsZXNfcGVyX2NoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgbnVtX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSW5wdXRBdWRpb0ZpbGUqIHN0ZXJlb19wY21fZmlsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJ0Yzo6QXJyYXlWaWV3PGZsb2F0PiBkYXRhKTsKLQotLy8gVmVyaWZp
ZXMgYSBmcmFtZSBhZ2FpbnN0IGEgcmVmZXJlbmNlIGFuZCByZXR1cm5zIHRoZSByZXN1bHRzIGFz
IGFuCi0vLyBBc3NlcnRpb25SZXN1bHQuCi06OnRlc3Rpbmc6OkFzc2VydGlvblJlc3VsdCBWZXJp
ZnlEZWludGVybGVhdmVkQXJyYXkoCi0gICAgc2l6ZV90IHNhbXBsZXNfcGVyX2NoYW5uZWwsCi0g
ICAgc2l6ZV90IG51bV9jaGFubmVscywKLSAgICBydGM6OkFycmF5Vmlldzxjb25zdCBmbG9hdD4g
cmVmZXJlbmNlLAotICAgIHJ0Yzo6QXJyYXlWaWV3PGNvbnN0IGZsb2F0PiBvdXRwdXQsCi0gICAg
ZmxvYXQgZWxlbWVudF9lcnJvcl9ib3VuZCk7Ci0KLS8vIFZlcmlmaWVzIGEgdmVjdG9yIGFnYWlu
c3QgYSByZWZlcmVuY2UgYW5kIHJldHVybnMgdGhlIHJlc3VsdHMgYXMgYW4KLS8vIEFzc2VydGlv
blJlc3VsdC4KLTo6dGVzdGluZzo6QXNzZXJ0aW9uUmVzdWx0IFZlcmlmeUFycmF5KHJ0Yzo6QXJy
YXlWaWV3PGNvbnN0IGZsb2F0PiByZWZlcmVuY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBydGM6OkFycmF5Vmlldzxjb25zdCBmbG9hdD4gb3V0cHV0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgZWxlbWVudF9lcnJvcl9ib3Vu
ZCk7Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNl
bmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX0JJVEVYQUNUTkVT
U19UT09MU19IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVidWdfZHVtcF9yZXBsYXllci5jYwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9kZWJ1Z19kdW1wX3JlcGxheWVyLmNjCShyZXZp
c2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9kZWJ1Z19kdW1wX3JlcGxheWVyLmNjCShu
b25leGlzdGVudCkKQEAgLTEsMjcwICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDE2
IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAq
ICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNl
bnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9v
dCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJv
cGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMu
ICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0
aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0j
aW5jbHVkZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2RlYnVnX2R1bXBf
cmVwbGF5ZXIuaCIKLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2NoZWNrcy5oIgotI2luY2x1ZGUg
IndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9wcm90b2J1Zl91dGlscy5oIgot
Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotbmFtZXNwYWNlIHRlc3QgewotCi1uYW1lc3BhY2Ugewot
Ci12b2lkIE1heWJlUmVzZXRCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZmZXI8Zmxv
YXQ+PiogYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmVhbUNvbmZpZyYg
Y29uZmlnKSB7Ci0gIGF1dG8mIGJ1ZmZlcl9yZWYgPSAqYnVmZmVyOwotICBpZiAoIWJ1ZmZlcl9y
ZWYuZ2V0KCkgfHwgYnVmZmVyX3JlZi0+bnVtX2ZyYW1lcygpICE9IGNvbmZpZy5udW1fZnJhbWVz
KCkgfHwKLSAgICAgIGJ1ZmZlcl9yZWYtPm51bV9jaGFubmVscygpICE9IGNvbmZpZy5udW1fY2hh
bm5lbHMoKSkgewotICAgIGJ1ZmZlcl9yZWYucmVzZXQobmV3IENoYW5uZWxCdWZmZXI8ZmxvYXQ+
KGNvbmZpZy5udW1fZnJhbWVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25maWcubnVtX2NoYW5uZWxzKCkpKTsKLSAgfQotfQotCi19ICAvLyBuYW1l
c3BhY2UKLQotRGVidWdEdW1wUmVwbGF5ZXI6OkRlYnVnRHVtcFJlcGxheWVyKCkKLSAgICA6IGlu
cHV0XyhudWxscHRyKSwgIC8vIHdpbGwgYmUgY3JlYXRlZCB1cG9uIHVzYWdlLgotICAgICAgcmV2
ZXJzZV8obnVsbHB0ciksCi0gICAgICBvdXRwdXRfKG51bGxwdHIpLAotICAgICAgYXBtXyhudWxs
cHRyKSwKLSAgICAgIGRlYnVnX2ZpbGVfKG51bGxwdHIpIHt9Ci0KLURlYnVnRHVtcFJlcGxheWVy
Ojp+RGVidWdEdW1wUmVwbGF5ZXIoKSB7Ci0gIGlmIChkZWJ1Z19maWxlXykKLSAgICBmY2xvc2Uo
ZGVidWdfZmlsZV8pOwotfQotCi1ib29sIERlYnVnRHVtcFJlcGxheWVyOjpTZXREdW1wRmlsZShj
b25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpIHsKLSAgZGVidWdfZmlsZV8gPSBmb3BlbihmaWxl
bmFtZS5jX3N0cigpLCAicmIiKTsKLSAgTG9hZE5leHRNZXNzYWdlKCk7Ci0gIHJldHVybiBkZWJ1
Z19maWxlXzsKLX0KLQotLy8gR2V0IG5leHQgZXZlbnQgdGhhdCBoYXMgbm90IHJ1bi4KLXJ0Yzo6
T3B0aW9uYWw8YXVkaW9wcm9jOjpFdmVudD4gRGVidWdEdW1wUmVwbGF5ZXI6OkdldE5leHRFdmVu
dCgpIGNvbnN0IHsKLSAgaWYgKCFoYXNfbmV4dF9ldmVudF8pCi0gICAgcmV0dXJuIHJ0Yzo6T3B0
aW9uYWw8YXVkaW9wcm9jOjpFdmVudD4oKTsKLSAgZWxzZQotICAgIHJldHVybiBydGM6Ok9wdGlv
bmFsPGF1ZGlvcHJvYzo6RXZlbnQ+KG5leHRfZXZlbnRfKTsKLX0KLQotLy8gUnVuIHRoZSBuZXh0
IGV2ZW50LiBSZXR1cm5zIHRoZSBldmVudCB0eXBlLgotYm9vbCBEZWJ1Z0R1bXBSZXBsYXllcjo6
UnVuTmV4dEV2ZW50KCkgewotICBpZiAoIWhhc19uZXh0X2V2ZW50XykKLSAgICByZXR1cm4gZmFs
c2U7Ci0gIHN3aXRjaCAobmV4dF9ldmVudF8udHlwZSgpKSB7Ci0gICAgY2FzZSBhdWRpb3Byb2M6
OkV2ZW50OjpJTklUOgotICAgICAgT25Jbml0RXZlbnQobmV4dF9ldmVudF8uaW5pdCgpKTsKLSAg
ICAgIGJyZWFrOwotICAgIGNhc2UgYXVkaW9wcm9jOjpFdmVudDo6U1RSRUFNOgotICAgICAgT25T
dHJlYW1FdmVudChuZXh0X2V2ZW50Xy5zdHJlYW0oKSk7Ci0gICAgICBicmVhazsKLSAgICBjYXNl
IGF1ZGlvcHJvYzo6RXZlbnQ6OlJFVkVSU0VfU1RSRUFNOgotICAgICAgT25SZXZlcnNlU3RyZWFt
RXZlbnQobmV4dF9ldmVudF8ucmV2ZXJzZV9zdHJlYW0oKSk7Ci0gICAgICBicmVhazsKLSAgICBj
YXNlIGF1ZGlvcHJvYzo6RXZlbnQ6OkNPTkZJRzoKLSAgICAgIE9uQ29uZmlnRXZlbnQobmV4dF9l
dmVudF8uY29uZmlnKCkpOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSBhdWRpb3Byb2M6OkV2ZW50
OjpVTktOT1dOX0VWRU5UOgotICAgICAgLy8gV2UgZG8gbm90IGV4cGVjdCB0byByZWNlaXZlIFVO
S05PV04gZXZlbnQuCi0gICAgICByZXR1cm4gZmFsc2U7Ci0gIH0KLSAgTG9hZE5leHRNZXNzYWdl
KCk7Ci0gIHJldHVybiB0cnVlOwotfQotCi1jb25zdCBDaGFubmVsQnVmZmVyPGZsb2F0PiogRGVi
dWdEdW1wUmVwbGF5ZXI6OkdldE91dHB1dCgpIGNvbnN0IHsKLSAgcmV0dXJuIG91dHB1dF8uZ2V0
KCk7Ci19Ci0KLVN0cmVhbUNvbmZpZyBEZWJ1Z0R1bXBSZXBsYXllcjo6R2V0T3V0cHV0Q29uZmln
KCkgY29uc3QgewotICByZXR1cm4gb3V0cHV0X2NvbmZpZ187Ci19Ci0KLS8vIE9uSW5pdEV2ZW50
IHJlc2V0IHRoZSBpbnB1dC9vdXRwdXQvcmVzZXJ2ZSBjaGFubmVsIGZvcm1hdC4KLXZvaWQgRGVi
dWdEdW1wUmVwbGF5ZXI6Ok9uSW5pdEV2ZW50KGNvbnN0IGF1ZGlvcHJvYzo6SW5pdCYgbXNnKSB7
Ci0gIFJUQ19DSEVDSyhtc2cuaGFzX251bV9pbnB1dF9jaGFubmVscygpKTsKLSAgUlRDX0NIRUNL
KG1zZy5oYXNfb3V0cHV0X3NhbXBsZV9yYXRlKCkpOwotICBSVENfQ0hFQ0sobXNnLmhhc19udW1f
b3V0cHV0X2NoYW5uZWxzKCkpOwotICBSVENfQ0hFQ0sobXNnLmhhc19yZXZlcnNlX3NhbXBsZV9y
YXRlKCkpOwotICBSVENfQ0hFQ0sobXNnLmhhc19udW1fcmV2ZXJzZV9jaGFubmVscygpKTsKLQot
ICBpbnB1dF9jb25maWdfID0gU3RyZWFtQ29uZmlnKG1zZy5zYW1wbGVfcmF0ZSgpLCBtc2cubnVt
X2lucHV0X2NoYW5uZWxzKCkpOwotICBvdXRwdXRfY29uZmlnXyA9Ci0gICAgICBTdHJlYW1Db25m
aWcobXNnLm91dHB1dF9zYW1wbGVfcmF0ZSgpLCBtc2cubnVtX291dHB1dF9jaGFubmVscygpKTsK
LSAgcmV2ZXJzZV9jb25maWdfID0KLSAgICAgIFN0cmVhbUNvbmZpZyhtc2cucmV2ZXJzZV9zYW1w
bGVfcmF0ZSgpLCBtc2cubnVtX3JldmVyc2VfY2hhbm5lbHMoKSk7Ci0KLSAgTWF5YmVSZXNldEJ1
ZmZlcigmaW5wdXRfLCBpbnB1dF9jb25maWdfKTsKLSAgTWF5YmVSZXNldEJ1ZmZlcigmb3V0cHV0
Xywgb3V0cHV0X2NvbmZpZ18pOwotICBNYXliZVJlc2V0QnVmZmVyKCZyZXZlcnNlXywgcmV2ZXJz
ZV9jb25maWdfKTsKLX0KLQotLy8gT25TdHJlYW1FdmVudCByZXBsYXlzIGFuIGlucHV0IHNpZ25h
bCBhbmQgdmVyaWZpZXMgdGhlIG91dHB1dC4KLXZvaWQgRGVidWdEdW1wUmVwbGF5ZXI6Ok9uU3Ry
ZWFtRXZlbnQoY29uc3QgYXVkaW9wcm9jOjpTdHJlYW0mIG1zZykgewotICAvLyBBUE0gc2hvdWxk
IGhhdmUgYmVlbiBjcmVhdGVkLgotICBSVENfQ0hFQ0soYXBtXy5nZXQoKSk7Ci0KLSAgUlRDX0NI
RUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBhcG1fLT5n
YWluX2NvbnRyb2woKS0+c2V0X3N0cmVhbV9hbmFsb2dfbGV2ZWwobXNnLmxldmVsKCkpKTsKLSAg
UlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBh
cG1fLT5zZXRfc3RyZWFtX2RlbGF5X21zKG1zZy5kZWxheSgpKSk7Ci0KLSAgYXBtXy0+ZWNob19j
YW5jZWxsYXRpb24oKS0+c2V0X3N0cmVhbV9kcmlmdF9zYW1wbGVzKG1zZy5kcmlmdCgpKTsKLSAg
aWYgKG1zZy5oYXNfa2V5cHJlc3MoKSkgewotICAgIGFwbV8tPnNldF9zdHJlYW1fa2V5X3ByZXNz
ZWQobXNnLmtleXByZXNzKCkpOwotICB9IGVsc2UgewotICAgIGFwbV8tPnNldF9zdHJlYW1fa2V5
X3ByZXNzZWQodHJ1ZSk7Ci0gIH0KLQotICBSVENfQ0hFQ0tfRVEoaW5wdXRfY29uZmlnXy5udW1f
Y2hhbm5lbHMoKSwKLSAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4obXNnLmlucHV0
X2NoYW5uZWxfc2l6ZSgpKSk7Ci0gIFJUQ19DSEVDS19FUShpbnB1dF9jb25maWdfLm51bV9mcmFt
ZXMoKSAqIHNpemVvZihmbG9hdCksCi0gICAgICAgICAgICAgICBtc2cuaW5wdXRfY2hhbm5lbCgw
KS5zaXplKCkpOwotCi0gIGZvciAoaW50IGkgPSAwOyBpIDwgbXNnLmlucHV0X2NoYW5uZWxfc2l6
ZSgpOyArK2kpIHsKLSAgICBtZW1jcHkoaW5wdXRfLT5jaGFubmVscygpW2ldLCBtc2cuaW5wdXRf
Y2hhbm5lbChpKS5kYXRhKCksCi0gICAgICAgICAgIG1zZy5pbnB1dF9jaGFubmVsKGkpLnNpemUo
KSk7Ci0gIH0KLQotICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAg
ICAgICAgICAgICAgIGFwbV8tPlByb2Nlc3NTdHJlYW0oaW5wdXRfLT5jaGFubmVscygpLCBpbnB1
dF9jb25maWdfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfY29u
ZmlnXywgb3V0cHV0Xy0+Y2hhbm5lbHMoKSkpOwotfQotCi12b2lkIERlYnVnRHVtcFJlcGxheWVy
OjpPblJldmVyc2VTdHJlYW1FdmVudCgKLSAgICBjb25zdCBhdWRpb3Byb2M6OlJldmVyc2VTdHJl
YW0mIG1zZykgewotICAvLyBBUE0gc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkLgotICBSVENfQ0hF
Q0soYXBtXy5nZXQoKSk7Ci0KLSAgUlRDX0NIRUNLX0dUKG1zZy5jaGFubmVsX3NpemUoKSwgMCk7
Ci0gIFJUQ19DSEVDS19FUShyZXZlcnNlX2NvbmZpZ18ubnVtX2NoYW5uZWxzKCksCi0gICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KG1zZy5jaGFubmVsX3NpemUoKSkpOwotICBSVENf
Q0hFQ0tfRVEocmV2ZXJzZV9jb25maWdfLm51bV9mcmFtZXMoKSAqIHNpemVvZihmbG9hdCksCi0g
ICAgICAgICAgICAgICBtc2cuY2hhbm5lbCgwKS5zaXplKCkpOwotCi0gIGZvciAoaW50IGkgPSAw
OyBpIDwgbXNnLmNoYW5uZWxfc2l6ZSgpOyArK2kpIHsKLSAgICBtZW1jcHkocmV2ZXJzZV8tPmNo
YW5uZWxzKClbaV0sIG1zZy5jaGFubmVsKGkpLmRhdGEoKSwKLSAgICAgICAgICAgbXNnLmNoYW5u
ZWwoaSkuc2l6ZSgpKTsKLSAgfQotCi0gIFJUQ19DSEVDS19FUSgKLSAgICAgIEF1ZGlvUHJvY2Vz
c2luZzo6a05vRXJyb3IsCi0gICAgICBhcG1fLT5Qcm9jZXNzUmV2ZXJzZVN0cmVhbShyZXZlcnNl
Xy0+Y2hhbm5lbHMoKSwgcmV2ZXJzZV9jb25maWdfLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmV2ZXJzZV9jb25maWdfLCByZXZlcnNlXy0+Y2hhbm5lbHMoKSkpOwotfQotCi12
b2lkIERlYnVnRHVtcFJlcGxheWVyOjpPbkNvbmZpZ0V2ZW50KGNvbnN0IGF1ZGlvcHJvYzo6Q29u
ZmlnJiBtc2cpIHsKLSAgTWF5YmVSZWNyZWF0ZUFwbShtc2cpOwotICBDb25maWd1cmVBcG0obXNn
KTsKLX0KLQotdm9pZCBEZWJ1Z0R1bXBSZXBsYXllcjo6TWF5YmVSZWNyZWF0ZUFwbShjb25zdCBh
dWRpb3Byb2M6OkNvbmZpZyYgbXNnKSB7Ci0gIC8vIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGNhbm5v
dCBiZSBjaGFuZ2VkIG9uIHRoZSBmbHkuCi0gIENvbmZpZyBjb25maWc7Ci0gIFJUQ19DSEVDSyht
c2cuaGFzX2FlY19kZWxheV9hZ25vc3RpY19lbmFibGVkKCkpOwotICBjb25maWcuU2V0PERlbGF5
QWdub3N0aWM+KAotICAgICAgbmV3IERlbGF5QWdub3N0aWMobXNnLmFlY19kZWxheV9hZ25vc3Rp
Y19lbmFibGVkKCkpKTsKLQotICBSVENfQ0hFQ0sobXNnLmhhc19ub2lzZV9yb2J1c3RfYWdjX2Vu
YWJsZWQoKSk7Ci0gIGNvbmZpZy5TZXQ8RXhwZXJpbWVudGFsQWdjPigKLSAgICAgIG5ldyBFeHBl
cmltZW50YWxBZ2MobXNnLm5vaXNlX3JvYnVzdF9hZ2NfZW5hYmxlZCgpKSk7Ci0KLSAgUlRDX0NI
RUNLKG1zZy5oYXNfdHJhbnNpZW50X3N1cHByZXNzaW9uX2VuYWJsZWQoKSk7Ci0gIGNvbmZpZy5T
ZXQ8RXhwZXJpbWVudGFsTnM+KAotICAgICAgbmV3IEV4cGVyaW1lbnRhbE5zKG1zZy50cmFuc2ll
bnRfc3VwcHJlc3Npb25fZW5hYmxlZCgpKSk7Ci0KLSAgUlRDX0NIRUNLKG1zZy5oYXNfYWVjX2V4
dGVuZGVkX2ZpbHRlcl9lbmFibGVkKCkpOwotICBjb25maWcuU2V0PEV4dGVuZGVkRmlsdGVyPigK
LSAgICAgIG5ldyBFeHRlbmRlZEZpbHRlcihtc2cuYWVjX2V4dGVuZGVkX2ZpbHRlcl9lbmFibGVk
KCkpKTsKLQotICBSVENfQ0hFQ0sobXNnLmhhc19pbnRlbGxpZ2liaWxpdHlfZW5oYW5jZXJfZW5h
YmxlZCgpKTsKLSAgY29uZmlnLlNldDxJbnRlbGxpZ2liaWxpdHk+KAotICAgICAgbmV3IEludGVs
bGlnaWJpbGl0eShtc2cuaW50ZWxsaWdpYmlsaXR5X2VuaGFuY2VyX2VuYWJsZWQoKSkpOwotCi0g
IC8vIFdlIG9ubHkgY3JlYXRlIEFQTSBvbmNlLCBzaW5jZSBjaGFuZ2VzIG9uIHRoZXNlIGZpZWxk
cyBzaG91bGQgbm90Ci0gIC8vIGhhcHBlbiBpbiBjdXJyZW50IGltcGxlbWVudGF0aW9uLgotICBp
ZiAoIWFwbV8uZ2V0KCkpIHsKLSAgICBhcG1fLnJlc2V0KEF1ZGlvUHJvY2Vzc2luZzo6Q3JlYXRl
KGNvbmZpZykpOwotICB9Ci19Ci0KLXZvaWQgRGVidWdEdW1wUmVwbGF5ZXI6OkNvbmZpZ3VyZUFw
bShjb25zdCBhdWRpb3Byb2M6OkNvbmZpZyYgbXNnKSB7Ci0gIC8vIEFFQyBjb25maWdzLgotICBS
VENfQ0hFQ0sobXNnLmhhc19hZWNfZW5hYmxlZCgpKTsKLSAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJv
Y2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBhcG1fLT5lY2hvX2NhbmNlbGxhdGlv
bigpLT5FbmFibGUobXNnLmFlY19lbmFibGVkKCkpKTsKLQotICBSVENfQ0hFQ0sobXNnLmhhc19h
ZWNfZHJpZnRfY29tcGVuc2F0aW9uX2VuYWJsZWQoKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRpb1By
b2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgYXBtXy0+ZWNob19jYW5jZWxsYXRp
b24oKS0+ZW5hYmxlX2RyaWZ0X2NvbXBlbnNhdGlvbigKLSAgICAgICAgICAgICAgICAgICBtc2cu
YWVjX2RyaWZ0X2NvbXBlbnNhdGlvbl9lbmFibGVkKCkpKTsKLQotICBSVENfQ0hFQ0sobXNnLmhh
c19hZWNfc3VwcHJlc3Npb25fbGV2ZWwoKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Np
bmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgYXBtXy0+ZWNob19jYW5jZWxsYXRpb24oKS0+
c2V0X3N1cHByZXNzaW9uX2xldmVsKAotICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEVj
aG9DYW5jZWxsYXRpb246OlN1cHByZXNzaW9uTGV2ZWw+KAotICAgICAgICAgICAgICAgICAgICAg
ICBtc2cuYWVjX3N1cHByZXNzaW9uX2xldmVsKCkpKSk7Ci0KLSAgLy8gQUVDTSBjb25maWdzLgot
ICBSVENfQ0hFQ0sobXNnLmhhc19hZWNtX2VuYWJsZWQoKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRp
b1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgYXBtXy0+ZWNob19jb250cm9s
X21vYmlsZSgpLT5FbmFibGUobXNnLmFlY21fZW5hYmxlZCgpKSk7Ci0KLSAgUlRDX0NIRUNLKG1z
Zy5oYXNfYWVjbV9jb21mb3J0X25vaXNlX2VuYWJsZWQoKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRp
b1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgYXBtXy0+ZWNob19jb250cm9s
X21vYmlsZSgpLT5lbmFibGVfY29tZm9ydF9ub2lzZSgKLSAgICAgICAgICAgICAgICAgICBtc2cu
YWVjbV9jb21mb3J0X25vaXNlX2VuYWJsZWQoKSkpOwotCi0gIFJUQ19DSEVDSyhtc2cuaGFzX2Fl
Y21fcm91dGluZ19tb2RlKCkpOwotICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9F
cnJvciwKLSAgICAgICAgICAgICAgIGFwbV8tPmVjaG9fY29udHJvbF9tb2JpbGUoKS0+c2V0X3Jv
dXRpbmdfbW9kZSgKLSAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxFY2hvQ29udHJvbE1v
YmlsZTo6Um91dGluZ01vZGU+KAotICAgICAgICAgICAgICAgICAgICAgICBtc2cuYWVjbV9yb3V0
aW5nX21vZGUoKSkpKTsKLQotICAvLyBBR0MgY29uZmlncy4KLSAgUlRDX0NIRUNLKG1zZy5oYXNf
YWdjX2VuYWJsZWQoKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9y
LAotICAgICAgICAgICAgICAgYXBtXy0+Z2Fpbl9jb250cm9sKCktPkVuYWJsZShtc2cuYWdjX2Vu
YWJsZWQoKSkpOwotCi0gIFJUQ19DSEVDSyhtc2cuaGFzX2FnY19tb2RlKCkpOwotICBSVENfQ0hF
Q0tfRVEoQXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgIGFwbV8tPmdh
aW5fY29udHJvbCgpLT5zZXRfbW9kZSgKLSAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxH
YWluQ29udHJvbDo6TW9kZT4obXNnLmFnY19tb2RlKCkpKSk7Ci0KLSAgUlRDX0NIRUNLKG1zZy5o
YXNfYWdjX2xpbWl0ZXJfZW5hYmxlZCgpKTsKLSAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2lu
Zzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBhcG1fLT5nYWluX2NvbnRyb2woKS0+ZW5hYmxl
X2xpbWl0ZXIobXNnLmFnY19saW1pdGVyX2VuYWJsZWQoKSkpOwotCi0gIC8vIEhQRiBjb25maWdz
LgotICBSVENfQ0hFQ0sobXNnLmhhc19ocGZfZW5hYmxlZCgpKTsKLSAgUlRDX0NIRUNLX0VRKEF1
ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBhcG1fLT5oaWdoX3Bhc3Nf
ZmlsdGVyKCktPkVuYWJsZShtc2cuaHBmX2VuYWJsZWQoKSkpOwotCi0gIC8vIE5TIGNvbmZpZ3Mu
Ci0gIFJUQ19DSEVDSyhtc2cuaGFzX25zX2VuYWJsZWQoKSk7Ci0gIFJUQ19DSEVDS19FUShBdWRp
b1Byb2Nlc3Npbmc6OmtOb0Vycm9yLAotICAgICAgICAgICAgICAgYXBtXy0+bm9pc2Vfc3VwcHJl
c3Npb24oKS0+RW5hYmxlKG1zZy5uc19lbmFibGVkKCkpKTsKLQotICBSVENfQ0hFQ0sobXNnLmhh
c19uc19sZXZlbCgpKTsKLSAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3Is
Ci0gICAgICAgICAgICAgICBhcG1fLT5ub2lzZV9zdXBwcmVzc2lvbigpLT5zZXRfbGV2ZWwoCi0g
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Tm9pc2VTdXBwcmVzc2lvbjo6TGV2ZWw+KG1z
Zy5uc19sZXZlbCgpKSkpOwotfQotCi12b2lkIERlYnVnRHVtcFJlcGxheWVyOjpMb2FkTmV4dE1l
c3NhZ2UoKSB7Ci0gIGhhc19uZXh0X2V2ZW50XyA9Ci0gICAgICBkZWJ1Z19maWxlXyAmJiBSZWFk
TWVzc2FnZUZyb21GaWxlKGRlYnVnX2ZpbGVfLCAmbmV4dF9ldmVudF8pOwotfQotCi19ICAvLyBu
YW1lc3BhY2UgdGVzdAotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rl
c3QvZGVidWdfZHVtcF9yZXBsYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2Rl
YnVnX2R1bXBfcmVwbGF5ZXIuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3Qv
ZGVidWdfZHVtcF9yZXBsYXllci5oCShub25leGlzdGVudCkKQEAgLTEsNzcgKzAsMCBAQAotLyoK
LSAqICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBS
aWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUg
TElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRp
dGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0g
KiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3Jz
IG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhl
IHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVESU9fUFJPQ0VT
U0lOR19URVNUX0RFQlVHX0RVTVBfUkVQTEFZRVJfSF8KLSNkZWZpbmUgV0VCUlRDX01PRFVMRVNf
QVVESU9fUFJPQ0VTU0lOR19URVNUX0RFQlVHX0RVTVBfUkVQTEFZRVJfSF8KLQotI2luY2x1ZGUg
PG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9pZ25v
cmVfd3VuZGVmLmgiCi0jaW5jbHVkZSAid2VicnRjL2NvbW1vbl9hdWRpby9jaGFubmVsX2J1ZmZl
ci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvaW5jbHVkZS9h
dWRpb19wcm9jZXNzaW5nLmgiCi0KLVJUQ19QVVNIX0lHTk9SSU5HX1dVTkRFRigpCi0jaW5jbHVk
ZSAid2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy9kZWJ1Zy5wYi5oIgotUlRDX1BPUF9J
R05PUklOR19XVU5ERUYoKQotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSB0ZXN0IHsK
LQotY2xhc3MgRGVidWdEdW1wUmVwbGF5ZXIgewotIHB1YmxpYzoKLSAgRGVidWdEdW1wUmVwbGF5
ZXIoKTsKLSAgfkRlYnVnRHVtcFJlcGxheWVyKCk7Ci0KLSAgLy8gU2V0IGR1bXAgZmlsZQotICBi
b29sIFNldER1bXBGaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSk7Ci0KLSAgLy8gUmV0
dXJuIG5leHQgZXZlbnQuCi0gIHJ0Yzo6T3B0aW9uYWw8YXVkaW9wcm9jOjpFdmVudD4gR2V0TmV4
dEV2ZW50KCkgY29uc3Q7Ci0KLSAgLy8gUnVuIHRoZSBuZXh0IGV2ZW50LiBSZXR1cm5zIHRydWUg
aWYgc3VjY2VlZGVkLgotICBib29sIFJ1bk5leHRFdmVudCgpOwotCi0gIGNvbnN0IENoYW5uZWxC
dWZmZXI8ZmxvYXQ+KiBHZXRPdXRwdXQoKSBjb25zdDsKLSAgU3RyZWFtQ29uZmlnIEdldE91dHB1
dENvbmZpZygpIGNvbnN0OwotCi0gcHJpdmF0ZToKLSAgLy8gRm9sbG93aW5nIGZ1bmN0aW9ucyBh
cmUgZmFjaWxpdGllcyBmb3IgcmVwbGF5aW5nIGRlYnVnIGR1bXBzLgotICB2b2lkIE9uSW5pdEV2
ZW50KGNvbnN0IGF1ZGlvcHJvYzo6SW5pdCYgbXNnKTsKLSAgdm9pZCBPblN0cmVhbUV2ZW50KGNv
bnN0IGF1ZGlvcHJvYzo6U3RyZWFtJiBtc2cpOwotICB2b2lkIE9uUmV2ZXJzZVN0cmVhbUV2ZW50
KGNvbnN0IGF1ZGlvcHJvYzo6UmV2ZXJzZVN0cmVhbSYgbXNnKTsKLSAgdm9pZCBPbkNvbmZpZ0V2
ZW50KGNvbnN0IGF1ZGlvcHJvYzo6Q29uZmlnJiBtc2cpOwotCi0gIHZvaWQgTWF5YmVSZWNyZWF0
ZUFwbShjb25zdCBhdWRpb3Byb2M6OkNvbmZpZyYgbXNnKTsKLSAgdm9pZCBDb25maWd1cmVBcG0o
Y29uc3QgYXVkaW9wcm9jOjpDb25maWcmIG1zZyk7Ci0KLSAgdm9pZCBMb2FkTmV4dE1lc3NhZ2Uo
KTsKLQotICAvLyBCdWZmZXIgZm9yIEFQTSBpbnB1dC9vdXRwdXQuCi0gIHN0ZDo6dW5pcXVlX3B0
cjxDaGFubmVsQnVmZmVyPGZsb2F0Pj4gaW5wdXRfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5l
bEJ1ZmZlcjxmbG9hdD4+IHJldmVyc2VfOwotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hhbm5lbEJ1ZmZl
cjxmbG9hdD4+IG91dHB1dF87Ci0KLSAgc3RkOjp1bmlxdWVfcHRyPEF1ZGlvUHJvY2Vzc2luZz4g
YXBtXzsKLQotICBGSUxFKiBkZWJ1Z19maWxlXzsKLQotICBTdHJlYW1Db25maWcgaW5wdXRfY29u
ZmlnXzsKLSAgU3RyZWFtQ29uZmlnIHJldmVyc2VfY29uZmlnXzsKLSAgU3RyZWFtQ29uZmlnIG91
dHB1dF9jb25maWdfOwotCi0gIGJvb2wgaGFzX25leHRfZXZlbnRfOwotICBhdWRpb3Byb2M6OkV2
ZW50IG5leHRfZXZlbnRfOwotfTsKLQotfSAgLy8gbmFtZXNwYWNlIHRlc3QKLX0gIC8vIG5hbWVz
cGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENfTU9EVUxFU19BVURJT19QUk9DRVNTSU5H
X1RFU1RfREVCVUdfRFVNUF9SRVBMQVlFUl9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVidWdf
ZHVtcF90ZXN0LmNjCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2RlYnVnX2R1bXBfdGVz
dC5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVidWdfZHVtcF90ZXN0
LmNjCShub25leGlzdGVudCkKQEAgLTEsNTY0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaW5jbHVkZSA8c3RkZGVmLmg+ICAvLyBzaXplX3QKLQotI2luY2x1ZGUgPG1lbW9yeT4K
LSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5jbHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAid2VicnRj
L21vZHVsZXMvYXVkaW9fY29kaW5nL25ldGVxL3Rvb2xzL3Jlc2FtcGxlX2lucHV0X2F1ZGlvX2Zp
bGUuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvZGVi
dWdfZHVtcF9yZXBsYXllci5oIgotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nl
c3NpbmcvdGVzdC90ZXN0X3V0aWxzLmgiCi0jaW5jbHVkZSAid2VicnRjL3Rlc3QvZ3Rlc3QuaCIK
LSNpbmNsdWRlICJ3ZWJydGMvdGVzdC90ZXN0c3VwcG9ydC9maWxldXRpbHMuaCIKLQotCi1uYW1l
c3BhY2Ugd2VicnRjIHsKLW5hbWVzcGFjZSB0ZXN0IHsKLQotbmFtZXNwYWNlIHsKLQotdm9pZCBN
YXliZVJlc2V0QnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxDaGFubmVsQnVmZmVyPGZsb2F0Pj4qIGJ1
ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJlYW1Db25maWcmIGNvbmZpZykg
ewotICBhdXRvJiBidWZmZXJfcmVmID0gKmJ1ZmZlcjsKLSAgaWYgKCFidWZmZXJfcmVmLmdldCgp
IHx8IGJ1ZmZlcl9yZWYtPm51bV9mcmFtZXMoKSAhPSBjb25maWcubnVtX2ZyYW1lcygpIHx8Ci0g
ICAgICBidWZmZXJfcmVmLT5udW1fY2hhbm5lbHMoKSAhPSBjb25maWcubnVtX2NoYW5uZWxzKCkp
IHsKLSAgICBidWZmZXJfcmVmLnJlc2V0KG5ldyBDaGFubmVsQnVmZmVyPGZsb2F0Pihjb25maWcu
bnVtX2ZyYW1lcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uZmlnLm51bV9jaGFubmVscygpKSk7Ci0gIH0KLX0KLQotY2xhc3MgRGVidWdEdW1wR2Vu
ZXJhdG9yIHsKLSBwdWJsaWM6Ci0gIERlYnVnRHVtcEdlbmVyYXRvcihjb25zdCBzdGQ6OnN0cmlu
ZyYgaW5wdXRfZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgaW50IGlucHV0X2ZpbGVf
cmF0ZV9oeiwKLSAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1dF9jaGFubmVscywKLSAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiByZXZlcnNlX2ZpbGVfbmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgIGludCByZXZlcnNlX2ZpbGVfcmF0ZV9oeiwKLSAgICAgICAgICAg
ICAgICAgICAgIGludCByZXZlcnNlX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ29uZmlnJiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmlu
ZyYgZHVtcF9maWxlX25hbWUpOwotCi0gIC8vIENvbnN0cnVjdG9yIHRoYXQgdXNlcyBkZWZhdWx0
IGlucHV0IGZpbGVzLgotICBleHBsaWNpdCBEZWJ1Z0R1bXBHZW5lcmF0b3IoY29uc3QgQ29uZmln
JiBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdWRpb1Byb2Nl
c3Npbmc6OkNvbmZpZyYgYXBtX2NvbmZpZyk7Ci0KLSAgfkRlYnVnRHVtcEdlbmVyYXRvcigpOwot
Ci0gIC8vIENoYW5nZXMgdGhlIHNhbXBsZSByYXRlIG9mIHRoZSBpbnB1dCBhdWRpbyB0byB0aGUg
QVBNLgotICB2b2lkIFNldElucHV0UmF0ZShpbnQgcmF0ZV9oeik7Ci0KLSAgLy8gU2V0cyBpZiBj
b252ZXJ0cyBzdGVyZW8gaW5wdXQgc2lnbmFsIHRvIG1vbm8gYnkgZGlzY2FyZGluZyBvdGhlciBj
aGFubmVscy4KLSAgdm9pZCBGb3JjZUlucHV0TW9ubyhib29sIG1vbm8pOwotCi0gIC8vIENoYW5n
ZXMgdGhlIHNhbXBsZSByYXRlIG9mIHRoZSByZXZlcnNlIGF1ZGlvIHRvIHRoZSBBUE0uCi0gIHZv
aWQgU2V0UmV2ZXJzZVJhdGUoaW50IHJhdGVfaHopOwotCi0gIC8vIFNldHMgaWYgY29udmVydHMg
c3RlcmVvIHJldmVyc2Ugc2lnbmFsIHRvIG1vbm8gYnkgZGlzY2FyZGluZyBvdGhlcgotICAvLyBj
aGFubmVscy4KLSAgdm9pZCBGb3JjZVJldmVyc2VNb25vKGJvb2wgbW9ubyk7Ci0KLSAgLy8gU2V0
cyB0aGUgcmVxdWlyZWQgc2FtcGxlIHJhdGUgb2YgdGhlIEFQTSBvdXRwdXQuCi0gIHZvaWQgU2V0
T3V0cHV0UmF0ZShpbnQgcmF0ZV9oeik7Ci0KLSAgLy8gU2V0cyB0aGUgcmVxdWlyZWQgY2hhbm5l
bHMgb2YgdGhlIEFQTSBvdXRwdXQuCi0gIHZvaWQgU2V0T3V0cHV0Q2hhbm5lbHMoaW50IGNoYW5u
ZWxzKTsKLQotICBzdGQ6OnN0cmluZyBkdW1wX2ZpbGVfbmFtZSgpIGNvbnN0IHsgcmV0dXJuIGR1
bXBfZmlsZV9uYW1lXzsgfQotCi0gIHZvaWQgU3RhcnRSZWNvcmRpbmcoKTsKLSAgdm9pZCBQcm9j
ZXNzKHNpemVfdCBudW1fYmxvY2tzKTsKLSAgdm9pZCBTdG9wUmVjb3JkaW5nKCk7Ci0gIEF1ZGlv
UHJvY2Vzc2luZyogYXBtKCkgY29uc3QgeyByZXR1cm4gYXBtXy5nZXQoKTsgfQotCi0gcHJpdmF0
ZToKLSAgc3RhdGljIHZvaWQgUmVhZEFuZERlaW50ZXJsZWF2ZShSZXNhbXBsZUlucHV0QXVkaW9G
aWxlKiBhdWRpbywgaW50IGNoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cmVhbUNvbmZpZyYgY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0KiBjb25zdCogYnVmZmVyKTsKLQotICAvLyBBUE0gaW5wdXQvb3V0cHV0
IHNldHRpbmdzLgotICBTdHJlYW1Db25maWcgaW5wdXRfY29uZmlnXzsKLSAgU3RyZWFtQ29uZmln
IHJldmVyc2VfY29uZmlnXzsKLSAgU3RyZWFtQ29uZmlnIG91dHB1dF9jb25maWdfOwotCi0gIC8v
IElucHV0IGZpbGUgZm9ybWF0LgotICBjb25zdCBzdGQ6OnN0cmluZyBpbnB1dF9maWxlX25hbWVf
OwotICBSZXNhbXBsZUlucHV0QXVkaW9GaWxlIGlucHV0X2F1ZGlvXzsKLSAgY29uc3QgaW50IGlu
cHV0X2ZpbGVfY2hhbm5lbHNfOwotCi0gIC8vIFJldmVyc2UgZmlsZSBmb3JtYXQuCi0gIGNvbnN0
IHN0ZDo6c3RyaW5nIHJldmVyc2VfZmlsZV9uYW1lXzsKLSAgUmVzYW1wbGVJbnB1dEF1ZGlvRmls
ZSByZXZlcnNlX2F1ZGlvXzsKLSAgY29uc3QgaW50IHJldmVyc2VfZmlsZV9jaGFubmVsc187Ci0K
LSAgLy8gQnVmZmVyIGZvciBBUE0gaW5wdXQvb3V0cHV0LgotICBzdGQ6OnVuaXF1ZV9wdHI8Q2hh
bm5lbEJ1ZmZlcjxmbG9hdD4+IGlucHV0XzsKLSAgc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZm
ZXI8ZmxvYXQ+PiByZXZlcnNlXzsKLSAgc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZmZXI8Zmxv
YXQ+PiBvdXRwdXRfOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxBdWRpb1Byb2Nlc3Npbmc+IGFwbV87
Ci0KLSAgY29uc3Qgc3RkOjpzdHJpbmcgZHVtcF9maWxlX25hbWVfOwotfTsKLQotRGVidWdEdW1w
R2VuZXJhdG9yOjpEZWJ1Z0R1bXBHZW5lcmF0b3IoY29uc3Qgc3RkOjpzdHJpbmcmIGlucHV0X2Zp
bGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbnB1
dF9yYXRlX2h6LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlu
cHV0X2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcmIHJldmVyc2VfZmlsZV9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IHJldmVyc2VfcmF0ZV9oeiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCByZXZlcnNlX2NoYW5uZWxzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29uZmlnJiBjb25maWcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZHVtcF9m
aWxlX25hbWUpCi0gICAgOiBpbnB1dF9jb25maWdfKGlucHV0X3JhdGVfaHosIGlucHV0X2NoYW5u
ZWxzKSwKLSAgICAgIHJldmVyc2VfY29uZmlnXyhyZXZlcnNlX3JhdGVfaHosIHJldmVyc2VfY2hh
bm5lbHMpLAotICAgICAgb3V0cHV0X2NvbmZpZ18oaW5wdXRfcmF0ZV9oeiwgaW5wdXRfY2hhbm5l
bHMpLAotICAgICAgaW5wdXRfYXVkaW9fKGlucHV0X2ZpbGVfbmFtZSwgaW5wdXRfcmF0ZV9oeiwg
aW5wdXRfcmF0ZV9oeiksCi0gICAgICBpbnB1dF9maWxlX2NoYW5uZWxzXyhpbnB1dF9jaGFubmVs
cyksCi0gICAgICByZXZlcnNlX2F1ZGlvXyhyZXZlcnNlX2ZpbGVfbmFtZSwgcmV2ZXJzZV9yYXRl
X2h6LCByZXZlcnNlX3JhdGVfaHopLAotICAgICAgcmV2ZXJzZV9maWxlX2NoYW5uZWxzXyhyZXZl
cnNlX2NoYW5uZWxzKSwKLSAgICAgIGlucHV0XyhuZXcgQ2hhbm5lbEJ1ZmZlcjxmbG9hdD4oaW5w
dXRfY29uZmlnXy5udW1fZnJhbWVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlucHV0X2NvbmZpZ18ubnVtX2NoYW5uZWxzKCkpKSwKLSAgICAgIHJldmVyc2VfKG5l
dyBDaGFubmVsQnVmZmVyPGZsb2F0PihyZXZlcnNlX2NvbmZpZ18ubnVtX2ZyYW1lcygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2VfY29uZmlnXy5udW1f
Y2hhbm5lbHMoKSkpLAotICAgICAgb3V0cHV0XyhuZXcgQ2hhbm5lbEJ1ZmZlcjxmbG9hdD4ob3V0
cHV0X2NvbmZpZ18ubnVtX2ZyYW1lcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0X2NvbmZpZ18ubnVtX2NoYW5uZWxzKCkpKSwKLSAgICAgIGFwbV8oQXVk
aW9Qcm9jZXNzaW5nOjpDcmVhdGUoY29uZmlnKSksCi0gICAgICBkdW1wX2ZpbGVfbmFtZV8oZHVt
cF9maWxlX25hbWUpIHsKLX0KLQotRGVidWdEdW1wR2VuZXJhdG9yOjpEZWJ1Z0R1bXBHZW5lcmF0
b3IoCi0gICAgY29uc3QgQ29uZmlnJiBjb25maWcsCi0gICAgY29uc3QgQXVkaW9Qcm9jZXNzaW5n
OjpDb25maWcmIGFwbV9jb25maWcpCi0gICAgOiBEZWJ1Z0R1bXBHZW5lcmF0b3IoUmVzb3VyY2VQ
YXRoKCJuZWFyMzJfc3RlcmVvIiwgInBjbSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIDMy
MDAwLAotICAgICAgICAgICAgICAgICAgICAgICAgIDIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgUmVzb3VyY2VQYXRoKCJmYXIzMl9zdGVyZW8iLCAicGNtIiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgMzIwMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgMiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgVGVtcEZpbGVu
YW1lKE91dHB1dFBhdGgoKSwgImRlYnVnX2FlYyIpKSB7Ci0gIGFwbV8tPkFwcGx5Q29uZmlnKGFw
bV9jb25maWcpOwotfQotCi1EZWJ1Z0R1bXBHZW5lcmF0b3I6On5EZWJ1Z0R1bXBHZW5lcmF0b3Io
KSB7Ci0gIHJlbW92ZShkdW1wX2ZpbGVfbmFtZV8uY19zdHIoKSk7Ci19Ci0KLXZvaWQgRGVidWdE
dW1wR2VuZXJhdG9yOjpTZXRJbnB1dFJhdGUoaW50IHJhdGVfaHopIHsKLSAgaW5wdXRfYXVkaW9f
LnNldF9vdXRwdXRfcmF0ZV9oeihyYXRlX2h6KTsKLSAgaW5wdXRfY29uZmlnXy5zZXRfc2FtcGxl
X3JhdGVfaHoocmF0ZV9oeik7Ci0gIE1heWJlUmVzZXRCdWZmZXIoJmlucHV0XywgaW5wdXRfY29u
ZmlnXyk7Ci19Ci0KLXZvaWQgRGVidWdEdW1wR2VuZXJhdG9yOjpGb3JjZUlucHV0TW9ubyhib29s
IG1vbm8pIHsKLSAgY29uc3QgaW50IGNoYW5uZWxzID0gbW9ubyA/IDEgOiBpbnB1dF9maWxlX2No
YW5uZWxzXzsKLSAgaW5wdXRfY29uZmlnXy5zZXRfbnVtX2NoYW5uZWxzKGNoYW5uZWxzKTsKLSAg
TWF5YmVSZXNldEJ1ZmZlcigmaW5wdXRfLCBpbnB1dF9jb25maWdfKTsKLX0KLQotdm9pZCBEZWJ1
Z0R1bXBHZW5lcmF0b3I6OlNldFJldmVyc2VSYXRlKGludCByYXRlX2h6KSB7Ci0gIHJldmVyc2Vf
YXVkaW9fLnNldF9vdXRwdXRfcmF0ZV9oeihyYXRlX2h6KTsKLSAgcmV2ZXJzZV9jb25maWdfLnNl
dF9zYW1wbGVfcmF0ZV9oeihyYXRlX2h6KTsKLSAgTWF5YmVSZXNldEJ1ZmZlcigmcmV2ZXJzZV8s
IHJldmVyc2VfY29uZmlnXyk7Ci19Ci0KLXZvaWQgRGVidWdEdW1wR2VuZXJhdG9yOjpGb3JjZVJl
dmVyc2VNb25vKGJvb2wgbW9ubykgewotICBjb25zdCBpbnQgY2hhbm5lbHMgPSBtb25vID8gMSA6
IHJldmVyc2VfZmlsZV9jaGFubmVsc187Ci0gIHJldmVyc2VfY29uZmlnXy5zZXRfbnVtX2NoYW5u
ZWxzKGNoYW5uZWxzKTsKLSAgTWF5YmVSZXNldEJ1ZmZlcigmcmV2ZXJzZV8sIHJldmVyc2VfY29u
ZmlnXyk7Ci19Ci0KLXZvaWQgRGVidWdEdW1wR2VuZXJhdG9yOjpTZXRPdXRwdXRSYXRlKGludCBy
YXRlX2h6KSB7Ci0gIG91dHB1dF9jb25maWdfLnNldF9zYW1wbGVfcmF0ZV9oeihyYXRlX2h6KTsK
LSAgTWF5YmVSZXNldEJ1ZmZlcigmb3V0cHV0Xywgb3V0cHV0X2NvbmZpZ18pOwotfQotCi12b2lk
IERlYnVnRHVtcEdlbmVyYXRvcjo6U2V0T3V0cHV0Q2hhbm5lbHMoaW50IGNoYW5uZWxzKSB7Ci0g
IG91dHB1dF9jb25maWdfLnNldF9udW1fY2hhbm5lbHMoY2hhbm5lbHMpOwotICBNYXliZVJlc2V0
QnVmZmVyKCZvdXRwdXRfLCBvdXRwdXRfY29uZmlnXyk7Ci19Ci0KLXZvaWQgRGVidWdEdW1wR2Vu
ZXJhdG9yOjpTdGFydFJlY29yZGluZygpIHsKLSAgYXBtXy0+U3RhcnREZWJ1Z1JlY29yZGluZyhk
dW1wX2ZpbGVfbmFtZV8uY19zdHIoKSwgLTEpOwotfQotCi12b2lkIERlYnVnRHVtcEdlbmVyYXRv
cjo6UHJvY2VzcyhzaXplX3QgbnVtX2Jsb2NrcykgewotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bV9ibG9ja3M7ICsraSkgewotICAgIFJlYWRBbmREZWludGVybGVhdmUoJnJldmVyc2VfYXVk
aW9fLCByZXZlcnNlX2ZpbGVfY2hhbm5lbHNfLAotICAgICAgICAgICAgICAgICAgICAgICAgcmV2
ZXJzZV9jb25maWdfLCByZXZlcnNlXy0+Y2hhbm5lbHMoKSk7Ci0gICAgUmVhZEFuZERlaW50ZXJs
ZWF2ZSgmaW5wdXRfYXVkaW9fLCBpbnB1dF9maWxlX2NoYW5uZWxzXywgaW5wdXRfY29uZmlnXywK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Xy0+Y2hhbm5lbHMoKSk7Ci0gICAgUlRDX0NI
RUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsIGFwbV8tPnNldF9zdHJlYW1fZGVsYXlf
bXMoMTAwKSk7Ci0gICAgYXBtXy0+c2V0X3N0cmVhbV9rZXlfcHJlc3NlZChpICUgMTAgPT0gOSk7
Ci0gICAgUlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAg
ICAgICAgIGFwbV8tPlByb2Nlc3NTdHJlYW0oaW5wdXRfLT5jaGFubmVscygpLCBpbnB1dF9jb25m
aWdfLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9jb25maWdf
LCBvdXRwdXRfLT5jaGFubmVscygpKSk7Ci0KLSAgICBSVENfQ0hFQ0tfRVEoQXVkaW9Qcm9jZXNz
aW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgICAgYXBtXy0+UHJvY2Vzc1JldmVyc2VTdHJl
YW0ocmV2ZXJzZV8tPmNoYW5uZWxzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldmVyc2VfY29uZmlnXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV2ZXJzZV9jb25maWdfLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXZlcnNlXy0+Y2hhbm5lbHMoKSkpOwotICB9Ci19Ci0K
LXZvaWQgRGVidWdEdW1wR2VuZXJhdG9yOjpTdG9wUmVjb3JkaW5nKCkgewotICBhcG1fLT5TdG9w
RGVidWdSZWNvcmRpbmcoKTsKLX0KLQotdm9pZCBEZWJ1Z0R1bXBHZW5lcmF0b3I6OlJlYWRBbmRE
ZWludGVybGVhdmUoUmVzYW1wbGVJbnB1dEF1ZGlvRmlsZSogYXVkaW8sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hhbm5lbHMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJlYW1Db25maWcmIGNv
bmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
KiBjb25zdCogYnVmZmVyKSB7Ci0gIGNvbnN0IHNpemVfdCBudW1fZnJhbWVzID0gY29uZmlnLm51
bV9mcmFtZXMoKTsKLSAgY29uc3QgaW50IG91dF9jaGFubmVscyA9IGNvbmZpZy5udW1fY2hhbm5l
bHMoKTsKLQotICBzdGQ6OnZlY3RvcjxpbnQxNl90PiBzaWduYWwoY2hhbm5lbHMgKiBudW1fZnJh
bWVzKTsKLQotICBhdWRpby0+UmVhZChudW1fZnJhbWVzICogY2hhbm5lbHMsICZzaWduYWxbMF0p
OwotCi0gIC8vIFdlIG9ubHkgYWxsb3cgcmVkdWNpbmcgbnVtYmVyIG9mIGNoYW5uZWxzIGJ5IGRp
c2NhcmRpbmcgc29tZSBjaGFubmVscy4KLSAgUlRDX0NIRUNLX0xFKG91dF9jaGFubmVscywgY2hh
bm5lbHMpOwotICBmb3IgKGludCBjaGFubmVsID0gMDsgY2hhbm5lbCA8IG91dF9jaGFubmVsczsg
KytjaGFubmVsKSB7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fZnJhbWVzOyArK2kp
IHsKLSAgICAgIGJ1ZmZlcltjaGFubmVsXVtpXSA9IFMxNlRvRmxvYXQoc2lnbmFsW2kgKiBjaGFu
bmVscyArIGNoYW5uZWxdKTsKLSAgICB9Ci0gIH0KLX0KLQotfSAgLy8gbmFtZXNwYWNlCi0KLWNs
YXNzIERlYnVnRHVtcFRlc3QgOiBwdWJsaWMgOjp0ZXN0aW5nOjpUZXN0IHsKLSBwdWJsaWM6Ci0g
IC8vIFZlcmlmeURlYnVnRHVtcCByZXBsYXlzIGEgZGVidWcgZHVtcCB1c2luZyBBUE0gYW5kIHZl
cmlmaWVzIHRoYXQgdGhlIHJlc3VsdAotICAvLyBpcyBiaXQtZXhhY3QtaWRlbnRpY2FsIHRvIHRo
ZSBvdXRwdXQgY2hhbm5lbCBpbiB0aGUgZHVtcC4gVGhpcyBpcyBvbmx5Ci0gIC8vIGd1YXJhbnRl
ZWQgaWYgdGhlIGRlYnVnIGR1bXAgaXMgc3RhcnRlZCBvbiB0aGUgZmlyc3QgZnJhbWUuCi0gIHZv
aWQgVmVyaWZ5RGVidWdEdW1wKGNvbnN0IHN0ZDo6c3RyaW5nJiBkdW1wX2ZpbGVfbmFtZSk7Ci0K
LSBwcml2YXRlOgotICBEZWJ1Z0R1bXBSZXBsYXllciBkZWJ1Z19kdW1wX3JlcGxheWVyXzsKLX07
Ci0KLXZvaWQgRGVidWdEdW1wVGVzdDo6VmVyaWZ5RGVidWdEdW1wKGNvbnN0IHN0ZDo6c3RyaW5n
JiBpbl9maWxlbmFtZSkgewotICBBU1NFUlRfVFJVRShkZWJ1Z19kdW1wX3JlcGxheWVyXy5TZXRE
dW1wRmlsZShpbl9maWxlbmFtZSkpOwotCi0gIHdoaWxlIChjb25zdCBydGM6Ok9wdGlvbmFsPGF1
ZGlvcHJvYzo6RXZlbnQ+IGV2ZW50ID0KLSAgICAgIGRlYnVnX2R1bXBfcmVwbGF5ZXJfLkdldE5l
eHRFdmVudCgpKSB7Ci0gICAgZGVidWdfZHVtcF9yZXBsYXllcl8uUnVuTmV4dEV2ZW50KCk7Ci0g
ICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gYXVkaW9wcm9jOjpFdmVudDo6U1RSRUFNKSB7Ci0gICAg
ICBjb25zdCBhdWRpb3Byb2M6OlN0cmVhbSogbXNnID0gJmV2ZW50LT5zdHJlYW0oKTsKLSAgICAg
IGNvbnN0IFN0cmVhbUNvbmZpZyBvdXRwdXRfY29uZmlnID0gZGVidWdfZHVtcF9yZXBsYXllcl8u
R2V0T3V0cHV0Q29uZmlnKCk7Ci0gICAgICBjb25zdCBDaGFubmVsQnVmZmVyPGZsb2F0Piogb3V0
cHV0ID0gZGVidWdfZHVtcF9yZXBsYXllcl8uR2V0T3V0cHV0KCk7Ci0gICAgICAvLyBDaGVjayB0
aGF0IG91dHB1dCBvZiBBUE0gaXMgYml0LWV4YWN0IHRvIHRoZSBvdXRwdXQgaW4gdGhlIGR1bXAu
Ci0gICAgICBBU1NFUlRfRVEob3V0cHV0X2NvbmZpZy5udW1fY2hhbm5lbHMoKSwKLSAgICAgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+KG1zZy0+b3V0cHV0X2NoYW5uZWxfc2l6ZSgpKSk7
Ci0gICAgICBBU1NFUlRfRVEob3V0cHV0X2NvbmZpZy5udW1fZnJhbWVzKCkgKiBzaXplb2YoZmxv
YXQpLAotICAgICAgICAgICAgICAgIG1zZy0+b3V0cHV0X2NoYW5uZWwoMCkuc2l6ZSgpKTsKLSAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbXNnLT5vdXRwdXRfY2hhbm5lbF9zaXplKCk7ICsraSkg
ewotICAgICAgICBBU1NFUlRfRVEoMCwgbWVtY21wKG91dHB1dC0+Y2hhbm5lbHMoKVtpXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPm91dHB1dF9jaGFubmVsKGkpLmRhdGEoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPm91dHB1dF9jaGFubmVsKGkpLnNpemUo
KSkpOwotICAgICAgfQotICAgIH0KLSAgfQotfQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgU2lt
cGxlQ2FzZSkgewotICBDb25maWcgY29uZmlnOwotICBEZWJ1Z0R1bXBHZW5lcmF0b3IgZ2VuZXJh
dG9yKGNvbmZpZywgQXVkaW9Qcm9jZXNzaW5nOjpDb25maWcoKSk7Ci0gIGdlbmVyYXRvci5TdGFy
dFJlY29yZGluZygpOwotICBnZW5lcmF0b3IuUHJvY2VzcygxMDApOwotICBnZW5lcmF0b3IuU3Rv
cFJlY29yZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAoZ2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1l
KCkpOwotfQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgQ2hhbmdlSW5wdXRGb3JtYXQpIHsKLSAg
Q29uZmlnIGNvbmZpZzsKLSAgRGVidWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1
ZGlvUHJvY2Vzc2luZzo6Q29uZmlnKCkpOwotCi0gIGdlbmVyYXRvci5TdGFydFJlY29yZGluZygp
OwotICBnZW5lcmF0b3IuUHJvY2VzcygxMDApOwotICBnZW5lcmF0b3IuU2V0SW5wdXRSYXRlKDQ4
MDAwKTsKLQotICBnZW5lcmF0b3IuRm9yY2VJbnB1dE1vbm8odHJ1ZSk7Ci0gIC8vIE51bWJlciBv
ZiBvdXRwdXQgY2hhbm5lbCBzaG91bGQgbm90IGJlIGxhcmdlciB0aGFuIHRoYXQgb2YgaW5wdXQu
IEFQTSB3aWxsCi0gIC8vIGZhaWwgb3RoZXJ3aXNlLgotICBnZW5lcmF0b3IuU2V0T3V0cHV0Q2hh
bm5lbHMoMSk7Ci0KLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2VuZXJhdG9yLlN0b3BS
ZWNvcmRpbmcoKTsKLSAgVmVyaWZ5RGVidWdEdW1wKGdlbmVyYXRvci5kdW1wX2ZpbGVfbmFtZSgp
KTsKLX0KLQotVEVTVF9GKERlYnVnRHVtcFRlc3QsIENoYW5nZVJldmVyc2VGb3JtYXQpIHsKLSAg
Q29uZmlnIGNvbmZpZzsKLSAgRGVidWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1
ZGlvUHJvY2Vzc2luZzo6Q29uZmlnKCkpOwotICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsK
LSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2VuZXJhdG9yLlNldFJldmVyc2VSYXRlKDQ4
MDAwKTsKLSAgZ2VuZXJhdG9yLkZvcmNlUmV2ZXJzZU1vbm8odHJ1ZSk7Ci0gIGdlbmVyYXRvci5Q
cm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5TdG9wUmVjb3JkaW5nKCk7Ci0gIFZlcmlmeURlYnVn
RHVtcChnZW5lcmF0b3IuZHVtcF9maWxlX25hbWUoKSk7Ci19Ci0KLVRFU1RfRihEZWJ1Z0R1bXBU
ZXN0LCBDaGFuZ2VPdXRwdXRGb3JtYXQpIHsKLSAgQ29uZmlnIGNvbmZpZzsKLSAgRGVidWdEdW1w
R2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmlnKCkpOwot
ICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsK
LSAgZ2VuZXJhdG9yLlNldE91dHB1dFJhdGUoNDgwMDApOwotICBnZW5lcmF0b3IuU2V0T3V0cHV0
Q2hhbm5lbHMoMSk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5TdG9w
UmVjb3JkaW5nKCk7Ci0gIFZlcmlmeURlYnVnRHVtcChnZW5lcmF0b3IuZHVtcF9maWxlX25hbWUo
KSk7Ci19Ci0KLVRFU1RfRihEZWJ1Z0R1bXBUZXN0LCBUb2dnbGVBZWMpIHsKLSAgQ29uZmlnIGNv
bmZpZzsKLSAgRGVidWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJvY2Vz
c2luZzo6Q29uZmlnKCkpOwotICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2VuZXJh
dG9yLlByb2Nlc3MoMTAwKTsKLQotICBFY2hvQ2FuY2VsbGF0aW9uKiBhZWMgPSBnZW5lcmF0b3Iu
YXBtKCktPmVjaG9fY2FuY2VsbGF0aW9uKCk7Ci0gIEVYUEVDVF9FUShBdWRpb1Byb2Nlc3Npbmc6
OmtOb0Vycm9yLCBhZWMtPkVuYWJsZSghYWVjLT5pc19lbmFibGVkKCkpKTsKLQotICBnZW5lcmF0
b3IuUHJvY2VzcygxMDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotICBWZXJpZnlE
ZWJ1Z0R1bXAoZ2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpOwotfQotCi1URVNUX0YoRGVidWdE
dW1wVGVzdCwgVG9nZ2xlRGVsYXlBZ25vc3RpY0FlYykgewotICBDb25maWcgY29uZmlnOwotICBj
b25maWcuU2V0PERlbGF5QWdub3N0aWM+KG5ldyBEZWxheUFnbm9zdGljKHRydWUpKTsKLSAgRGVi
dWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmln
KCkpOwotICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2VuZXJhdG9yLlByb2Nlc3Mo
MTAwKTsKLQotICBFY2hvQ2FuY2VsbGF0aW9uKiBhZWMgPSBnZW5lcmF0b3IuYXBtKCktPmVjaG9f
Y2FuY2VsbGF0aW9uKCk7Ci0gIEVYUEVDVF9FUShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLCBh
ZWMtPkVuYWJsZSghYWVjLT5pc19lbmFibGVkKCkpKTsKLQotICBnZW5lcmF0b3IuUHJvY2Vzcygx
MDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAoZ2Vu
ZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpOwotfQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgVmVy
aWZ5UmVmaW5lZEFkYXB0aXZlRmlsdGVyRXhwZXJpbWVudGFsU3RyaW5nKSB7Ci0gIENvbmZpZyBj
b25maWc7Ci0gIGNvbmZpZy5TZXQ8UmVmaW5lZEFkYXB0aXZlRmlsdGVyPihuZXcgUmVmaW5lZEFk
YXB0aXZlRmlsdGVyKHRydWUpKTsKLSAgRGVidWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25m
aWcsIEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmlnKCkpOwotICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRp
bmcoKTsKLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsKLSAgZ2VuZXJhdG9yLlN0b3BSZWNvcmRp
bmcoKTsKLQotICBEZWJ1Z0R1bXBSZXBsYXllciBkZWJ1Z19kdW1wX3JlcGxheWVyXzsKLQotICBB
U1NFUlRfVFJVRShkZWJ1Z19kdW1wX3JlcGxheWVyXy5TZXREdW1wRmlsZShnZW5lcmF0b3IuZHVt
cF9maWxlX25hbWUoKSkpOwotCi0gIHdoaWxlIChjb25zdCBydGM6Ok9wdGlvbmFsPGF1ZGlvcHJv
Yzo6RXZlbnQ+IGV2ZW50ID0KLSAgICAgICAgICAgICBkZWJ1Z19kdW1wX3JlcGxheWVyXy5HZXRO
ZXh0RXZlbnQoKSkgewotICAgIGRlYnVnX2R1bXBfcmVwbGF5ZXJfLlJ1bk5leHRFdmVudCgpOwot
ICAgIGlmIChldmVudC0+dHlwZSgpID09IGF1ZGlvcHJvYzo6RXZlbnQ6OkNPTkZJRykgewotICAg
ICAgY29uc3QgYXVkaW9wcm9jOjpDb25maWcqIG1zZyA9ICZldmVudC0+Y29uZmlnKCk7Ci0gICAg
ICBBU1NFUlRfVFJVRShtc2ctPmhhc19leHBlcmltZW50c19kZXNjcmlwdGlvbigpKTsKLSAgICAg
IEVYUEVDVF9QUkVEX0ZPUk1BVDIodGVzdGluZzo6SXNTdWJzdHJpbmcsICJSZWZpbmVkQWRhcHRp
dmVGaWx0ZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPmV4cGVyaW1lbnRzX2Rl
c2NyaXB0aW9uKCkuY19zdHIoKSk7Ci0gICAgfQotICB9Ci19Ci0KLVRFU1RfRihEZWJ1Z0R1bXBU
ZXN0LCBWZXJpZnlDb21iaW5lZEV4cGVyaW1lbnRhbFN0cmluZ0luY2x1c2l2ZSkgewotICBDb25m
aWcgY29uZmlnOwotICBjb25maWcuU2V0PFJlZmluZWRBZGFwdGl2ZUZpbHRlcj4obmV3IFJlZmlu
ZWRBZGFwdGl2ZUZpbHRlcih0cnVlKSk7Ci0gIGNvbmZpZy5TZXQ8RWNob0NhbmNlbGxlcjM+KG5l
dyBFY2hvQ2FuY2VsbGVyMyh0cnVlKSk7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5lcmF0b3Io
Y29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0UmVj
b3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5TdG9wUmVj
b3JkaW5nKCk7Ci0KLSAgRGVidWdEdW1wUmVwbGF5ZXIgZGVidWdfZHVtcF9yZXBsYXllcl87Ci0K
LSAgQVNTRVJUX1RSVUUoZGVidWdfZHVtcF9yZXBsYXllcl8uU2V0RHVtcEZpbGUoZ2VuZXJhdG9y
LmR1bXBfZmlsZV9uYW1lKCkpKTsKLQotICB3aGlsZSAoY29uc3QgcnRjOjpPcHRpb25hbDxhdWRp
b3Byb2M6OkV2ZW50PiBldmVudCA9Ci0gICAgICAgICAgICAgZGVidWdfZHVtcF9yZXBsYXllcl8u
R2V0TmV4dEV2ZW50KCkpIHsKLSAgICBkZWJ1Z19kdW1wX3JlcGxheWVyXy5SdW5OZXh0RXZlbnQo
KTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBhdWRpb3Byb2M6OkV2ZW50OjpDT05GSUcpIHsK
LSAgICAgIGNvbnN0IGF1ZGlvcHJvYzo6Q29uZmlnKiBtc2cgPSAmZXZlbnQtPmNvbmZpZygpOwot
ICAgICAgQVNTRVJUX1RSVUUobXNnLT5oYXNfZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKSk7Ci0g
ICAgICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vic3RyaW5nLCAiUmVmaW5lZEFk
YXB0aXZlRmlsdGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5leHBlcmltZW50
c19kZXNjcmlwdGlvbigpLmNfc3RyKCkpOwotICAgICAgRVhQRUNUX1BSRURfRk9STUFUMih0ZXN0
aW5nOjpJc1N1YnN0cmluZywgIkFFQzMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ct
PmV4cGVyaW1lbnRzX2Rlc2NyaXB0aW9uKCkuY19zdHIoKSk7Ci0gICAgfQotICB9Ci19Ci0KLVRF
U1RfRihEZWJ1Z0R1bXBUZXN0LCBWZXJpZnlDb21iaW5lZEV4cGVyaW1lbnRhbFN0cmluZ0V4Y2x1
c2l2ZSkgewotICBDb25maWcgY29uZmlnOwotICBjb25maWcuU2V0PFJlZmluZWRBZGFwdGl2ZUZp
bHRlcj4obmV3IFJlZmluZWRBZGFwdGl2ZUZpbHRlcih0cnVlKSk7Ci0gIERlYnVnRHVtcEdlbmVy
YXRvciBnZW5lcmF0b3IoY29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2Vu
ZXJhdG9yLlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdl
bmVyYXRvci5TdG9wUmVjb3JkaW5nKCk7Ci0KLSAgRGVidWdEdW1wUmVwbGF5ZXIgZGVidWdfZHVt
cF9yZXBsYXllcl87Ci0KLSAgQVNTRVJUX1RSVUUoZGVidWdfZHVtcF9yZXBsYXllcl8uU2V0RHVt
cEZpbGUoZ2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpKTsKLQotICB3aGlsZSAoY29uc3QgcnRj
OjpPcHRpb25hbDxhdWRpb3Byb2M6OkV2ZW50PiBldmVudCA9Ci0gICAgICAgICAgICAgZGVidWdf
ZHVtcF9yZXBsYXllcl8uR2V0TmV4dEV2ZW50KCkpIHsKLSAgICBkZWJ1Z19kdW1wX3JlcGxheWVy
Xy5SdW5OZXh0RXZlbnQoKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBhdWRpb3Byb2M6OkV2
ZW50OjpDT05GSUcpIHsKLSAgICAgIGNvbnN0IGF1ZGlvcHJvYzo6Q29uZmlnKiBtc2cgPSAmZXZl
bnQtPmNvbmZpZygpOwotICAgICAgQVNTRVJUX1RSVUUobXNnLT5oYXNfZXhwZXJpbWVudHNfZGVz
Y3JpcHRpb24oKSk7Ci0gICAgICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vic3Ry
aW5nLCAiUmVmaW5lZEFkYXB0aXZlRmlsdGVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
bXNnLT5leHBlcmltZW50c19kZXNjcmlwdGlvbigpLmNfc3RyKCkpOwotICAgICAgRVhQRUNUX1BS
RURfRk9STUFUMih0ZXN0aW5nOjpJc05vdFN1YnN0cmluZywgIkFFQzMiLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBtc2ctPmV4cGVyaW1lbnRzX2Rlc2NyaXB0aW9uKCkuY19zdHIoKSk7Ci0g
ICAgfQotICB9Ci19Ci0KLVRFU1RfRihEZWJ1Z0R1bXBUZXN0LCBWZXJpZnlBZWMzRXhwZXJpbWVu
dGFsU3RyaW5nKSB7Ci0gIENvbmZpZyBjb25maWc7Ci0gIGNvbmZpZy5TZXQ8RWNob0NhbmNlbGxl
cjM+KG5ldyBFY2hvQ2FuY2VsbGVyMyh0cnVlKSk7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5l
cmF0b3IoY29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9yLlN0
YXJ0UmVjb3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5T
dG9wUmVjb3JkaW5nKCk7Ci0KLSAgRGVidWdEdW1wUmVwbGF5ZXIgZGVidWdfZHVtcF9yZXBsYXll
cl87Ci0KLSAgQVNTRVJUX1RSVUUoZGVidWdfZHVtcF9yZXBsYXllcl8uU2V0RHVtcEZpbGUoZ2Vu
ZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpKTsKLQotICB3aGlsZSAoY29uc3QgcnRjOjpPcHRpb25h
bDxhdWRpb3Byb2M6OkV2ZW50PiBldmVudCA9Ci0gICAgICAgICAgICAgZGVidWdfZHVtcF9yZXBs
YXllcl8uR2V0TmV4dEV2ZW50KCkpIHsKLSAgICBkZWJ1Z19kdW1wX3JlcGxheWVyXy5SdW5OZXh0
RXZlbnQoKTsKLSAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBhdWRpb3Byb2M6OkV2ZW50OjpDT05G
SUcpIHsKLSAgICAgIGNvbnN0IGF1ZGlvcHJvYzo6Q29uZmlnKiBtc2cgPSAmZXZlbnQtPmNvbmZp
ZygpOwotICAgICAgQVNTRVJUX1RSVUUobXNnLT5oYXNfZXhwZXJpbWVudHNfZGVzY3JpcHRpb24o
KSk7Ci0gICAgICBFWFBFQ1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vic3RyaW5nLCAiQUVD
MyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+ZXhwZXJpbWVudHNfZGVzY3JpcHRp
b24oKS5jX3N0cigpKTsKLSAgICB9Ci0gIH0KLX0KLQotVEVTVF9GKERlYnVnRHVtcFRlc3QsIFZl
cmlmeUxldmVsQ29udHJvbGxlckV4cGVyaW1lbnRhbFN0cmluZykgewotICBDb25maWcgY29uZmln
OwotICBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZyBhcG1fY29uZmlnOwotICBhcG1fY29uZmlnLmxl
dmVsX2NvbnRyb2xsZXIuZW5hYmxlZCA9IHRydWU7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBnZW5l
cmF0b3IoY29uZmlnLCBhcG1fY29uZmlnKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0UmVjb3JkaW5nKCk7
Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5TdG9wUmVjb3JkaW5nKCk7
Ci0KLSAgRGVidWdEdW1wUmVwbGF5ZXIgZGVidWdfZHVtcF9yZXBsYXllcl87Ci0KLSAgQVNTRVJU
X1RSVUUoZGVidWdfZHVtcF9yZXBsYXllcl8uU2V0RHVtcEZpbGUoZ2VuZXJhdG9yLmR1bXBfZmls
ZV9uYW1lKCkpKTsKLQotICB3aGlsZSAoY29uc3QgcnRjOjpPcHRpb25hbDxhdWRpb3Byb2M6OkV2
ZW50PiBldmVudCA9Ci0gICAgICAgICAgICAgZGVidWdfZHVtcF9yZXBsYXllcl8uR2V0TmV4dEV2
ZW50KCkpIHsKLSAgICBkZWJ1Z19kdW1wX3JlcGxheWVyXy5SdW5OZXh0RXZlbnQoKTsKLSAgICBp
ZiAoZXZlbnQtPnR5cGUoKSA9PSBhdWRpb3Byb2M6OkV2ZW50OjpDT05GSUcpIHsKLSAgICAgIGNv
bnN0IGF1ZGlvcHJvYzo6Q29uZmlnKiBtc2cgPSAmZXZlbnQtPmNvbmZpZygpOwotICAgICAgQVNT
RVJUX1RSVUUobXNnLT5oYXNfZXhwZXJpbWVudHNfZGVzY3JpcHRpb24oKSk7Ci0gICAgICBFWFBF
Q1RfUFJFRF9GT1JNQVQyKHRlc3Rpbmc6OklzU3Vic3RyaW5nLCAiTGV2ZWxDb250cm9sbGVyIiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5leHBlcmltZW50c19kZXNjcmlwdGlvbigp
LmNfc3RyKCkpOwotICAgIH0KLSAgfQotfQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgVmVyaWZ5
RW1wdHlFeHBlcmltZW50YWxTdHJpbmcpIHsKLSAgQ29uZmlnIGNvbmZpZzsKLSAgRGVidWdEdW1w
R2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJvY2Vzc2luZzo6Q29uZmlnKCkpOwot
ICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2VuZXJhdG9yLlByb2Nlc3MoMTAwKTsK
LSAgZ2VuZXJhdG9yLlN0b3BSZWNvcmRpbmcoKTsKLQotICBEZWJ1Z0R1bXBSZXBsYXllciBkZWJ1
Z19kdW1wX3JlcGxheWVyXzsKLQotICBBU1NFUlRfVFJVRShkZWJ1Z19kdW1wX3JlcGxheWVyXy5T
ZXREdW1wRmlsZShnZW5lcmF0b3IuZHVtcF9maWxlX25hbWUoKSkpOwotCi0gIHdoaWxlIChjb25z
dCBydGM6Ok9wdGlvbmFsPGF1ZGlvcHJvYzo6RXZlbnQ+IGV2ZW50ID0KLSAgICAgICAgICAgICBk
ZWJ1Z19kdW1wX3JlcGxheWVyXy5HZXROZXh0RXZlbnQoKSkgewotICAgIGRlYnVnX2R1bXBfcmVw
bGF5ZXJfLlJ1bk5leHRFdmVudCgpOwotICAgIGlmIChldmVudC0+dHlwZSgpID09IGF1ZGlvcHJv
Yzo6RXZlbnQ6OkNPTkZJRykgewotICAgICAgY29uc3QgYXVkaW9wcm9jOjpDb25maWcqIG1zZyA9
ICZldmVudC0+Y29uZmlnKCk7Ci0gICAgICBBU1NFUlRfVFJVRShtc2ctPmhhc19leHBlcmltZW50
c19kZXNjcmlwdGlvbigpKTsKLSAgICAgIEVYUEVDVF9FUSgwdSwgbXNnLT5leHBlcmltZW50c19k
ZXNjcmlwdGlvbigpLnNpemUoKSk7Ci0gICAgfQotICB9Ci19Ci0KLVRFU1RfRihEZWJ1Z0R1bXBU
ZXN0LCBUb2dnbGVBZWNMZXZlbCkgewotICBDb25maWcgY29uZmlnOwotICBEZWJ1Z0R1bXBHZW5l
cmF0b3IgZ2VuZXJhdG9yKGNvbmZpZywgQXVkaW9Qcm9jZXNzaW5nOjpDb25maWcoKSk7Ci0gIEVj
aG9DYW5jZWxsYXRpb24qIGFlYyA9IGdlbmVyYXRvci5hcG0oKS0+ZWNob19jYW5jZWxsYXRpb24o
KTsKLSAgRVhQRUNUX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsIGFlYy0+RW5hYmxlKHRy
dWUpKTsKLSAgRVhQRUNUX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAg
ICBhZWMtPnNldF9zdXBwcmVzc2lvbl9sZXZlbChFY2hvQ2FuY2VsbGF0aW9uOjprTG93U3VwcHJl
c3Npb24pKTsKLSAgZ2VuZXJhdG9yLlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9j
ZXNzKDEwMCk7Ci0KLSAgRVhQRUNUX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAg
ICAgICAgICBhZWMtPnNldF9zdXBwcmVzc2lvbl9sZXZlbChFY2hvQ2FuY2VsbGF0aW9uOjprSGln
aFN1cHByZXNzaW9uKSk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0gIGdlbmVyYXRvci5T
dG9wUmVjb3JkaW5nKCk7Ci0gIFZlcmlmeURlYnVnRHVtcChnZW5lcmF0b3IuZHVtcF9maWxlX25h
bWUoKSk7Ci19Ci0KLS8vIEFHQyBpcyBub3Qgc3VwcG9ydGVkIG9uIEFuZHJvaWQgb3IgaU9TLgot
I2lmIGRlZmluZWQoV0VCUlRDX0FORFJPSUQpIHx8IGRlZmluZWQoV0VCUlRDX0lPUykKLSNkZWZp
bmUgTUFZQkVfVG9nZ2xlQWdjIERJU0FCTEVEX1RvZ2dsZUFnYwotI2Vsc2UKLSNkZWZpbmUgTUFZ
QkVfVG9nZ2xlQWdjIFRvZ2dsZUFnYwotI2VuZGlmCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgTUFZ
QkVfVG9nZ2xlQWdjKSB7Ci0gIENvbmZpZyBjb25maWc7Ci0gIERlYnVnRHVtcEdlbmVyYXRvciBn
ZW5lcmF0b3IoY29uZmlnLCBBdWRpb1Byb2Nlc3Npbmc6OkNvbmZpZygpKTsKLSAgZ2VuZXJhdG9y
LlN0YXJ0UmVjb3JkaW5nKCk7Ci0gIGdlbmVyYXRvci5Qcm9jZXNzKDEwMCk7Ci0KLSAgR2FpbkNv
bnRyb2wqIGFnYyA9IGdlbmVyYXRvci5hcG0oKS0+Z2Fpbl9jb250cm9sKCk7Ci0gIEVYUEVDVF9F
UShBdWRpb1Byb2Nlc3Npbmc6OmtOb0Vycm9yLCBhZ2MtPkVuYWJsZSghYWdjLT5pc19lbmFibGVk
KCkpKTsKLQotICBnZW5lcmF0b3IuUHJvY2VzcygxMDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29y
ZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAoZ2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpOwot
fQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwgVG9nZ2xlTnMpIHsKLSAgQ29uZmlnIGNvbmZpZzsK
LSAgRGVidWdEdW1wR2VuZXJhdG9yIGdlbmVyYXRvcihjb25maWcsIEF1ZGlvUHJvY2Vzc2luZzo6
Q29uZmlnKCkpOwotICBnZW5lcmF0b3IuU3RhcnRSZWNvcmRpbmcoKTsKLSAgZ2VuZXJhdG9yLlBy
b2Nlc3MoMTAwKTsKLQotICBOb2lzZVN1cHByZXNzaW9uKiBucyA9IGdlbmVyYXRvci5hcG0oKS0+
bm9pc2Vfc3VwcHJlc3Npb24oKTsKLSAgRVhQRUNUX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJy
b3IsIG5zLT5FbmFibGUoIW5zLT5pc19lbmFibGVkKCkpKTsKLQotICBnZW5lcmF0b3IuUHJvY2Vz
cygxMDApOwotICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAo
Z2VuZXJhdG9yLmR1bXBfZmlsZV9uYW1lKCkpOwotfQotCi1URVNUX0YoRGVidWdEdW1wVGVzdCwg
VHJhbnNpZW50U3VwcHJlc3Npb25PbikgewotICBDb25maWcgY29uZmlnOwotICBjb25maWcuU2V0
PEV4cGVyaW1lbnRhbE5zPihuZXcgRXhwZXJpbWVudGFsTnModHJ1ZSkpOwotICBEZWJ1Z0R1bXBH
ZW5lcmF0b3IgZ2VuZXJhdG9yKGNvbmZpZywgQXVkaW9Qcm9jZXNzaW5nOjpDb25maWcoKSk7Ci0g
IGdlbmVyYXRvci5TdGFydFJlY29yZGluZygpOwotICBnZW5lcmF0b3IuUHJvY2VzcygxMDApOwot
ICBnZW5lcmF0b3IuU3RvcFJlY29yZGluZygpOwotICBWZXJpZnlEZWJ1Z0R1bXAoZ2VuZXJhdG9y
LmR1bXBfZmlsZV9uYW1lKCkpOwotfQotCi19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZfdXRpbHMuY2MKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZfdXRpbHMuY2MJKHJldmlzaW9uIDIx
MjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVs
ZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3Byb3RvYnVmX3V0aWxzLmNjCShub25leGlzdGVudCkK
QEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBw
cm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0
IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3Vy
Y2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMg
Z3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmli
dXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZp
bGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlICJ3ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZfdXRpbHMuaCIKLSNpbmNs
dWRlICJ3ZWJydGMvdHlwZWRlZnMuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLXNpemVfdCBS
ZWFkTWVzc2FnZUJ5dGVzRnJvbUZpbGUoRklMRSogZmlsZSwgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4
X3RbXT4qIGJ5dGVzKSB7Ci0gIC8vIFRoZSAid2lyZSBmb3JtYXQiIGZvciB0aGUgc2l6ZSBpcyBs
aXR0bGUtZW5kaWFuLiBBc3N1bWUgd2UncmUgcnVubmluZyBvbgotICAvLyBhIGxpdHRsZS1lbmRp
YW4gbWFjaGluZS4KLSNpZm5kZWYgV0VCUlRDX0FSQ0hfTElUVExFX0VORElBTgotI2Vycm9yICJO
ZWVkIHRvIGNvbnZlcnQgbWVzc3NhZ2UgZnJvbSBsaXR0bGUtZW5kaWFuLiIKLSNlbmRpZgotICBp
bnQzMl90IHNpemUgPSAwOwotICBpZiAoZnJlYWQoJnNpemUsIHNpemVvZihzaXplKSwgMSwgZmls
ZSkgIT0gMSkKLSAgICByZXR1cm4gMDsKLSAgaWYgKHNpemUgPD0gMCkKLSAgICByZXR1cm4gMDsK
LQotICBieXRlcy0+cmVzZXQobmV3IHVpbnQ4X3Rbc2l6ZV0pOwotICByZXR1cm4gZnJlYWQoYnl0
ZXMtPmdldCgpLCBzaXplb2YoKCpieXRlcylbMF0pLCBzaXplLCBmaWxlKTsKLX0KLQotLy8gUmV0
dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGVycm9yIG9yIGVuZC1vZi1maWxlLgotYm9v
bCBSZWFkTWVzc2FnZUZyb21GaWxlKEZJTEUqIGZpbGUsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVz
c2FnZUxpdGUqIG1zZykgewotICBzdGQ6OnVuaXF1ZV9wdHI8dWludDhfdFtdPiBieXRlczsKLSAg
c2l6ZV90IHNpemUgPSBSZWFkTWVzc2FnZUJ5dGVzRnJvbUZpbGUoZmlsZSwgJmJ5dGVzKTsKLSAg
aWYgKCFzaXplKQotICAgIHJldHVybiBmYWxzZTsKLQotICBtc2ctPkNsZWFyKCk7Ci0gIHJldHVy
biBtc2ctPlBhcnNlRnJvbUFycmF5KGJ5dGVzLmdldCgpLCBzaXplKTsKLX0KLQotfSAgLy8gbmFt
ZXNwYWNlIHdlYnJ0YwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZfdXRpbHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9wcm90b2J1Zl91dGlscy5oCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9wcm90b2J1Zl91dGlscy5oCShub25leGlzdGVudCkKQEAg
LTEsMzMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9q
ZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNh
biBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UK
LSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3Jh
bnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRp
bmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01P
RFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX1BST1RPQlVGX1VUSUxTX0hfCi0jZGVmaW5lIFdF
QlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9QUk9UT0JVRl9VVElMU19IXwotCi0j
aW5jbHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvaWdub3JlX3d1bmRlZi5o
IgotCi1SVENfUFVTSF9JR05PUklOR19XVU5ERUYoKQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvZGVidWcucGIuaCIKLVJUQ19QT1BfSUdOT1JJTkdfV1VOREVGKCkK
LQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci0KLS8vIEFsbG9jYXRlcyBuZXcgbWVtb3J5IGluIHRoZSB1
bmlxdWVfcHRyIHRvIGZpdCB0aGUgcmF3IG1lc3NhZ2UgYW5kIHJldHVybnMgdGhlCi0vLyBudW1i
ZXIgb2YgYnl0ZXMgcmVhZC4KLXNpemVfdCBSZWFkTWVzc2FnZUJ5dGVzRnJvbUZpbGUoRklMRSog
ZmlsZSwgc3RkOjp1bmlxdWVfcHRyPHVpbnQ4X3RbXT4qIGJ5dGVzKTsKLQotLy8gUmV0dXJucyB0
cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGVycm9yIG9yIGVuZC1vZi1maWxlLgotYm9vbCBSZWFk
TWVzc2FnZUZyb21GaWxlKEZJTEUqIGZpbGUsIDo6Z29vZ2xlOjpwcm90b2J1Zjo6TWVzc2FnZUxp
dGUqIG1zZyk7Ci0KLX0gIC8vIG5hbWVzcGFjZSB3ZWJydGMKLQotI2VuZGlmICAvLyBXRUJSVENf
TU9EVUxFU19BVURJT19QUk9DRVNTSU5HX1RFU1RfUFJPVE9CVUZfVVRJTFNfSF8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L3Rlc3RfdXRpbHMuY2MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3Qv
dGVzdF91dGlscy5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdGVzdF91
dGlscy5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogIENvcHlyaWdo
dCAoYykgMjAxNSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZl
ZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qt
c3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUg
aW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxs
ZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmls
ZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUg
Zm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUu
Ci0gKi8KLQotI2luY2x1ZGUgPHV0aWxpdHk+Ci0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVj
a3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdGVz
dF91dGlscy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotUmF3RmlsZTo6UmF3RmlsZShjb25z
dCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUpCi0gICAgOiBmaWxlX2hhbmRsZV8oZm9wZW4oZmlsZW5h
bWUuY19zdHIoKSwgIndiIikpIHt9Ci0KLVJhd0ZpbGU6On5SYXdGaWxlKCkgewotICBmY2xvc2Uo
ZmlsZV9oYW5kbGVfKTsKLX0KLQotdm9pZCBSYXdGaWxlOjpXcml0ZVNhbXBsZXMoY29uc3QgaW50
MTZfdCogc2FtcGxlcywgc2l6ZV90IG51bV9zYW1wbGVzKSB7Ci0jaWZuZGVmIFdFQlJUQ19BUkNI
X0xJVFRMRV9FTkRJQU4KLSNlcnJvciAiTmVlZCB0byBjb252ZXJ0IHNhbXBsZXMgdG8gbGl0dGxl
LWVuZGlhbiB3aGVuIHdyaXRpbmcgdG8gUENNIGZpbGUiCi0jZW5kaWYKLSAgZndyaXRlKHNhbXBs
ZXMsIHNpemVvZigqc2FtcGxlcyksIG51bV9zYW1wbGVzLCBmaWxlX2hhbmRsZV8pOwotfQotCi12
b2lkIFJhd0ZpbGU6OldyaXRlU2FtcGxlcyhjb25zdCBmbG9hdCogc2FtcGxlcywgc2l6ZV90IG51
bV9zYW1wbGVzKSB7Ci0gIGZ3cml0ZShzYW1wbGVzLCBzaXplb2YoKnNhbXBsZXMpLCBudW1fc2Ft
cGxlcywgZmlsZV9oYW5kbGVfKTsKLX0KLQotQ2hhbm5lbEJ1ZmZlcldhdlJlYWRlcjo6Q2hhbm5l
bEJ1ZmZlcldhdlJlYWRlcihzdGQ6OnVuaXF1ZV9wdHI8V2F2UmVhZGVyPiBmaWxlKQotICAgIDog
ZmlsZV8oc3RkOjptb3ZlKGZpbGUpKSB7fQotCi1DaGFubmVsQnVmZmVyV2F2UmVhZGVyOjp+Q2hh
bm5lbEJ1ZmZlcldhdlJlYWRlcigpID0gZGVmYXVsdDsKLQotYm9vbCBDaGFubmVsQnVmZmVyV2F2
UmVhZGVyOjpSZWFkKENoYW5uZWxCdWZmZXI8ZmxvYXQ+KiBidWZmZXIpIHsKLSAgUlRDX0NIRUNL
X0VRKGZpbGVfLT5udW1fY2hhbm5lbHMoKSwgYnVmZmVyLT5udW1fY2hhbm5lbHMoKSk7Ci0gIGlu
dGVybGVhdmVkXy5yZXNpemUoYnVmZmVyLT5zaXplKCkpOwotICBpZiAoZmlsZV8tPlJlYWRTYW1w
bGVzKGludGVybGVhdmVkXy5zaXplKCksICZpbnRlcmxlYXZlZF9bMF0pICE9Ci0gICAgICBpbnRl
cmxlYXZlZF8uc2l6ZSgpKSB7Ci0gICAgcmV0dXJuIGZhbHNlOwotICB9Ci0KLSAgRmxvYXRTMTZU
b0Zsb2F0KCZpbnRlcmxlYXZlZF9bMF0sIGludGVybGVhdmVkXy5zaXplKCksICZpbnRlcmxlYXZl
ZF9bMF0pOwotICBEZWludGVybGVhdmUoJmludGVybGVhdmVkX1swXSwgYnVmZmVyLT5udW1fZnJh
bWVzKCksIGJ1ZmZlci0+bnVtX2NoYW5uZWxzKCksCi0gICAgICAgICAgICAgICBidWZmZXItPmNo
YW5uZWxzKCkpOwotICByZXR1cm4gdHJ1ZTsKLX0KLQotQ2hhbm5lbEJ1ZmZlcldhdldyaXRlcjo6
Q2hhbm5lbEJ1ZmZlcldhdldyaXRlcihzdGQ6OnVuaXF1ZV9wdHI8V2F2V3JpdGVyPiBmaWxlKQot
ICAgIDogZmlsZV8oc3RkOjptb3ZlKGZpbGUpKSB7fQotCi1DaGFubmVsQnVmZmVyV2F2V3JpdGVy
Ojp+Q2hhbm5lbEJ1ZmZlcldhdldyaXRlcigpID0gZGVmYXVsdDsKLQotdm9pZCBDaGFubmVsQnVm
ZmVyV2F2V3JpdGVyOjpXcml0ZShjb25zdCBDaGFubmVsQnVmZmVyPGZsb2F0PiYgYnVmZmVyKSB7
Ci0gIFJUQ19DSEVDS19FUShmaWxlXy0+bnVtX2NoYW5uZWxzKCksIGJ1ZmZlci5udW1fY2hhbm5l
bHMoKSk7Ci0gIGludGVybGVhdmVkXy5yZXNpemUoYnVmZmVyLnNpemUoKSk7Ci0gIEludGVybGVh
dmUoYnVmZmVyLmNoYW5uZWxzKCksIGJ1ZmZlci5udW1fZnJhbWVzKCksIGJ1ZmZlci5udW1fY2hh
bm5lbHMoKSwKLSAgICAgICAgICAgICAmaW50ZXJsZWF2ZWRfWzBdKTsKLSAgRmxvYXRUb0Zsb2F0
UzE2KCZpbnRlcmxlYXZlZF9bMF0sIGludGVybGVhdmVkXy5zaXplKCksICZpbnRlcmxlYXZlZF9b
MF0pOwotICBmaWxlXy0+V3JpdGVTYW1wbGVzKCZpbnRlcmxlYXZlZF9bMF0sIGludGVybGVhdmVk
Xy5zaXplKCkpOwotfQotCi12b2lkIFdyaXRlSW50RGF0YShjb25zdCBpbnQxNl90KiBkYXRhLAot
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgIFdhdldy
aXRlciogd2F2X2ZpbGUsCi0gICAgICAgICAgICAgICAgICBSYXdGaWxlKiByYXdfZmlsZSkgewot
ICBpZiAod2F2X2ZpbGUpIHsKLSAgICB3YXZfZmlsZS0+V3JpdGVTYW1wbGVzKGRhdGEsIGxlbmd0
aCk7Ci0gIH0KLSAgaWYgKHJhd19maWxlKSB7Ci0gICAgcmF3X2ZpbGUtPldyaXRlU2FtcGxlcyhk
YXRhLCBsZW5ndGgpOwotICB9Ci19Ci0KLXZvaWQgV3JpdGVGbG9hdERhdGEoY29uc3QgZmxvYXQq
IGNvbnN0KiBkYXRhLAotICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2FtcGxlc19wZXJfY2hh
bm5lbCwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bV9jaGFubmVscywKLSAgICAgICAg
ICAgICAgICAgICAgV2F2V3JpdGVyKiB3YXZfZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgUmF3
RmlsZSogcmF3X2ZpbGUpIHsKLSAgc2l6ZV90IGxlbmd0aCA9IG51bV9jaGFubmVscyAqIHNhbXBs
ZXNfcGVyX2NoYW5uZWw7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxmbG9hdFtdPiBidWZmZXIobmV3IGZs
b2F0W2xlbmd0aF0pOwotICBJbnRlcmxlYXZlKGRhdGEsIHNhbXBsZXNfcGVyX2NoYW5uZWwsIG51
bV9jaGFubmVscywgYnVmZmVyLmdldCgpKTsKLSAgaWYgKHJhd19maWxlKSB7Ci0gICAgcmF3X2Zp
bGUtPldyaXRlU2FtcGxlcyhidWZmZXIuZ2V0KCksIGxlbmd0aCk7Ci0gIH0KLSAgLy8gVE9ETyhh
bHVlYnMpOiBVc2UgU2NhbGVUb0ludDE2UmFuZ2UoKSBmcm9tIGF1ZGlvX3V0aWwKLSAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgIGJ1ZmZlcltpXSA9IGJ1ZmZlcltp
XSA+IDAgPwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSAqIHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50MTZfdD46Om1heCgpIDoKLSAgICAgICAgICAgICAgICAtYnVmZmVyW2ldICogc3RkOjpudW1l
cmljX2xpbWl0czxpbnQxNl90Pjo6bWluKCk7Ci0gIH0KLSAgaWYgKHdhdl9maWxlKSB7Ci0gICAg
d2F2X2ZpbGUtPldyaXRlU2FtcGxlcyhidWZmZXIuZ2V0KCksIGxlbmd0aCk7Ci0gIH0KLX0KLQot
RklMRSogT3BlbkZpbGUoY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lLCBjb25zdCBjaGFyKiBt
b2RlKSB7Ci0gIEZJTEUqIGZpbGUgPSBmb3BlbihmaWxlbmFtZS5jX3N0cigpLCBtb2RlKTsKLSAg
aWYgKCFmaWxlKSB7Ci0gICAgcHJpbnRmKCJVbmFibGUgdG8gb3BlbiBmaWxlICVzXG4iLCBmaWxl
bmFtZS5jX3N0cigpKTsKLSAgICBleGl0KDEpOwotICB9Ci0gIHJldHVybiBmaWxlOwotfQotCi1z
aXplX3QgU2FtcGxlc0Zyb21SYXRlKGludCByYXRlKSB7Ci0gIHJldHVybiBzdGF0aWNfY2FzdDxz
aXplX3Q+KEF1ZGlvUHJvY2Vzc2luZzo6a0NodW5rU2l6ZU1zICogcmF0ZSAvIDEwMDApOwotfQot
Ci12b2lkIFNldEZyYW1lU2FtcGxlUmF0ZShBdWRpb0ZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBzYW1wbGVfcmF0ZV9oeikgewotICBmcmFtZS0+c2FtcGxlX3JhdGVf
aHpfID0gc2FtcGxlX3JhdGVfaHo7Ci0gIGZyYW1lLT5zYW1wbGVzX3Blcl9jaGFubmVsXyA9IEF1
ZGlvUHJvY2Vzc2luZzo6a0NodW5rU2l6ZU1zICoKLSAgICAgIHNhbXBsZV9yYXRlX2h6IC8gMTAw
MDsKLX0KLQotQXVkaW9Qcm9jZXNzaW5nOjpDaGFubmVsTGF5b3V0IExheW91dEZyb21DaGFubmVs
cyhzaXplX3QgbnVtX2NoYW5uZWxzKSB7Ci0gIHN3aXRjaCAobnVtX2NoYW5uZWxzKSB7Ci0gICAg
Y2FzZSAxOgotICAgICAgcmV0dXJuIEF1ZGlvUHJvY2Vzc2luZzo6a01vbm87Ci0gICAgY2FzZSAy
OgotICAgICAgcmV0dXJuIEF1ZGlvUHJvY2Vzc2luZzo6a1N0ZXJlbzsKLSAgICBkZWZhdWx0Ogot
ICAgICAgUlRDX0NIRUNLKGZhbHNlKTsKLSAgICAgIHJldHVybiBBdWRpb1Byb2Nlc3Npbmc6OmtN
b25vOwotICB9Ci19Ci0KLXN0ZDo6dmVjdG9yPFBvaW50PiBQYXJzZUFycmF5R2VvbWV0cnkoY29u
c3Qgc3RkOjpzdHJpbmcmIG1pY19wb3NpdGlvbnMpIHsKLSAgY29uc3Qgc3RkOjp2ZWN0b3I8Zmxv
YXQ+IHZhbHVlcyA9IFBhcnNlTGlzdDxmbG9hdD4obWljX3Bvc2l0aW9ucyk7Ci0gIGNvbnN0IHNp
emVfdCBudW1fbWljcyA9Ci0gICAgICBydGM6OkNoZWNrZWREaXZFeGFjdCh2YWx1ZXMuc2l6ZSgp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KDMpKTsKLSAgUlRDX0NIRUNLX0dUKG51bV9taWNzLCAwdSkg
PDwgIm1pY19wb3NpdGlvbnMgaXMgbm90IGxhcmdlIGVub3VnaC4iOwotCi0gIHN0ZDo6dmVjdG9y
PFBvaW50PiByZXN1bHQ7Ci0gIHJlc3VsdC5yZXNlcnZlKG51bV9taWNzKTsKLSAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB2YWx1ZXMuc2l6ZSgpOyBpICs9IDMpIHsKLSAgICByZXN1bHQucHVzaF9i
YWNrKFBvaW50KHZhbHVlc1tpICsgMF0sIHZhbHVlc1tpICsgMV0sIHZhbHVlc1tpICsgMl0pKTsK
LSAgfQotCi0gIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6dmVjdG9yPFBvaW50PiBQYXJzZUFy
cmF5R2VvbWV0cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG1pY19wb3NpdGlvbnMsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW1fbWljcykgewotICBzdGQ6OnZl
Y3RvcjxQb2ludD4gcmVzdWx0ID0gUGFyc2VBcnJheUdlb21ldHJ5KG1pY19wb3NpdGlvbnMpOwot
ICBSVENfQ0hFQ0tfRVEocmVzdWx0LnNpemUoKSwgbnVtX21pY3MpCi0gICAgICA8PCAiQ291bGQg
bm90IHBhcnNlIG1pY19wb3NpdGlvbnMgb3IgaW5jb3JyZWN0IG51bWJlciBvZiBwb2ludHMuIjsK
LSAgcmV0dXJuIHJlc3VsdDsKLX0KLQotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9j
ZXNzaW5nL3Rlc3QvdGVzdF91dGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3Rl
c3RfdXRpbHMuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdGVzdF91dGls
cy5oCShub25leGlzdGVudCkKQEAgLTEsMTU4ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDE0IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0
aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1
YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBB
VEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3Vu
ZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAq
LwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9URVNUX1VU
SUxTX0hfCi0jZGVmaW5lIFdFQlJUQ19NT0RVTEVTX0FVRElPX1BST0NFU1NJTkdfVEVTVF9URVNU
X1VUSUxTX0hfCi0KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8aXRlcmF0b3I+Ci0jaW5j
bHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDxzdHJpbmc+Ci0jaW5j
bHVkZSA8dmVjdG9yPgotCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvY29uc3RydWN0b3JtYWdpYy5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9jb21tb25fYXVkaW8vY2hhbm5lbF9idWZmZXIuaCIKLSNpbmNs
dWRlICJ3ZWJydGMvY29tbW9uX2F1ZGlvL3dhdl9maWxlLmgiCi0jaW5jbHVkZSAid2VicnRjL21v
ZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy9pbmNsdWRlL2F1ZGlvX3Byb2Nlc3NpbmcuaCIKLSNpbmNs
dWRlICJ3ZWJydGMvbW9kdWxlcy9pbmNsdWRlL21vZHVsZV9jb21tb25fdHlwZXMuaCIKLQotbmFt
ZXNwYWNlIHdlYnJ0YyB7Ci0KLXN0YXRpYyBjb25zdCBBdWRpb1Byb2Nlc3Npbmc6OkVycm9yIGtO
b0VyciA9IEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3I7Ci0jZGVmaW5lIEVYUEVDVF9OT0VSUihl
eHByKSBFWFBFQ1RfRVEoa05vRXJyLCAoZXhwcikpCi0KLWNsYXNzIFJhd0ZpbGUgZmluYWwgewot
IHB1YmxpYzoKLSAgZXhwbGljaXQgUmF3RmlsZShjb25zdCBzdGQ6OnN0cmluZyYgZmlsZW5hbWUp
OwotICB+UmF3RmlsZSgpOwotCi0gIHZvaWQgV3JpdGVTYW1wbGVzKGNvbnN0IGludDE2X3QqIHNh
bXBsZXMsIHNpemVfdCBudW1fc2FtcGxlcyk7Ci0gIHZvaWQgV3JpdGVTYW1wbGVzKGNvbnN0IGZs
b2F0KiBzYW1wbGVzLCBzaXplX3QgbnVtX3NhbXBsZXMpOwotCi0gcHJpdmF0ZToKLSAgRklMRSog
ZmlsZV9oYW5kbGVfOwotCi0gIFJUQ19ESVNBTExPV19DT1BZX0FORF9BU1NJR04oUmF3RmlsZSk7
Ci19OwotCi0vLyBSZWFkcyBDaGFubmVsQnVmZmVycyBmcm9tIGEgcHJvdmlkZWQgV2F2UmVhZGVy
LgotY2xhc3MgQ2hhbm5lbEJ1ZmZlcldhdlJlYWRlciBmaW5hbCB7Ci0gcHVibGljOgotICBleHBs
aWNpdCBDaGFubmVsQnVmZmVyV2F2UmVhZGVyKHN0ZDo6dW5pcXVlX3B0cjxXYXZSZWFkZXI+IGZp
bGUpOwotICB+Q2hhbm5lbEJ1ZmZlcldhdlJlYWRlcigpOwotCi0gIC8vIFJlYWRzIGRhdGEgZnJv
bSB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gdGhlIHxidWZmZXJ8IGZvcm1hdC4gUmV0dXJucyBmYWxz
ZSBpZgotICAvLyBhIGZ1bGwgYnVmZmVyIGNhbid0IGJlIHJlYWQgZnJvbSB0aGUgZmlsZS4KLSAg
Ym9vbCBSZWFkKENoYW5uZWxCdWZmZXI8ZmxvYXQ+KiBidWZmZXIpOwotCi0gcHJpdmF0ZToKLSAg
c3RkOjp1bmlxdWVfcHRyPFdhdlJlYWRlcj4gZmlsZV87Ci0gIHN0ZDo6dmVjdG9yPGZsb2F0PiBp
bnRlcmxlYXZlZF87Ci0KLSAgUlRDX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDaGFubmVsQnVm
ZmVyV2F2UmVhZGVyKTsKLX07Ci0KLS8vIFdyaXRlcyBDaGFubmVsQnVmZmVycyB0byBhIHByb3Zp
ZGVkIFdhdldyaXRlci4KLWNsYXNzIENoYW5uZWxCdWZmZXJXYXZXcml0ZXIgZmluYWwgewotIHB1
YmxpYzoKLSAgZXhwbGljaXQgQ2hhbm5lbEJ1ZmZlcldhdldyaXRlcihzdGQ6OnVuaXF1ZV9wdHI8
V2F2V3JpdGVyPiBmaWxlKTsKLSAgfkNoYW5uZWxCdWZmZXJXYXZXcml0ZXIoKTsKLQotICB2b2lk
IFdyaXRlKGNvbnN0IENoYW5uZWxCdWZmZXI8ZmxvYXQ+JiBidWZmZXIpOwotCi0gcHJpdmF0ZToK
LSAgc3RkOjp1bmlxdWVfcHRyPFdhdldyaXRlcj4gZmlsZV87Ci0gIHN0ZDo6dmVjdG9yPGZsb2F0
PiBpbnRlcmxlYXZlZF87Ci0KLSAgUlRDX0RJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihDaGFubmVs
QnVmZmVyV2F2V3JpdGVyKTsKLX07Ci0KLXZvaWQgV3JpdGVJbnREYXRhKGNvbnN0IGludDE2X3Qq
IGRhdGEsCi0gICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAg
ICAgV2F2V3JpdGVyKiB3YXZfZmlsZSwKLSAgICAgICAgICAgICAgICAgIFJhd0ZpbGUqIHJhd19m
aWxlKTsKLQotdm9pZCBXcml0ZUZsb2F0RGF0YShjb25zdCBmbG9hdCogY29uc3QqIGRhdGEsCi0g
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBzYW1wbGVzX3Blcl9jaGFubmVsLAotICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgbnVtX2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAgICBXYXZX
cml0ZXIqIHdhdl9maWxlLAotICAgICAgICAgICAgICAgICAgICBSYXdGaWxlKiByYXdfZmlsZSk7
Ci0KLS8vIEV4aXRzIG9uIGZhaWx1cmU7IGRvIG5vdCB1c2UgaW4gdW5pdCB0ZXN0cy4KLUZJTEUq
IE9wZW5GaWxlKGNvbnN0IHN0ZDo6c3RyaW5nJiBmaWxlbmFtZSwgY29uc3QgY2hhciogbW9kZSk7
Ci0KLXNpemVfdCBTYW1wbGVzRnJvbVJhdGUoaW50IHJhdGUpOwotCi12b2lkIFNldEZyYW1lU2Ft
cGxlUmF0ZShBdWRpb0ZyYW1lKiBmcmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBz
YW1wbGVfcmF0ZV9oeik7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdm9pZCBTZXRDb250YWlu
ZXJGb3JtYXQoaW50IHNhbXBsZV9yYXRlX2h6LAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IG51bV9jaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvRnJhbWUqIGZy
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENoYW5uZWxCdWZm
ZXI8VD4gPiogY2IpIHsKLSAgU2V0RnJhbWVTYW1wbGVSYXRlKGZyYW1lLCBzYW1wbGVfcmF0ZV9o
eik7Ci0gIGZyYW1lLT5udW1fY2hhbm5lbHNfID0gbnVtX2NoYW5uZWxzOwotICBjYi0+cmVzZXQo
bmV3IENoYW5uZWxCdWZmZXI8VD4oZnJhbWUtPnNhbXBsZXNfcGVyX2NoYW5uZWxfLCBudW1fY2hh
bm5lbHMpKTsKLX0KLQotQXVkaW9Qcm9jZXNzaW5nOjpDaGFubmVsTGF5b3V0IExheW91dEZyb21D
aGFubmVscyhzaXplX3QgbnVtX2NoYW5uZWxzKTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1m
bG9hdCBDb21wdXRlU05SKGNvbnN0IFQqIHJlZiwgY29uc3QgVCogdGVzdCwgc2l6ZV90IGxlbmd0
aCwgZmxvYXQqIHZhcmlhbmNlKSB7Ci0gIGZsb2F0IG1zZSA9IDA7Ci0gIGZsb2F0IG1lYW4gPSAw
OwotICAqdmFyaWFuY2UgPSAwOwotICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7Ci0gICAgVCBlcnJvciA9IHJlZltpXSAtIHRlc3RbaV07Ci0gICAgbXNlICs9IGVycm9yICog
ZXJyb3I7Ci0gICAgKnZhcmlhbmNlICs9IHJlZltpXSAqIHJlZltpXTsKLSAgICBtZWFuICs9IHJl
ZltpXTsKLSAgfQotICBtc2UgLz0gbGVuZ3RoOwotICAqdmFyaWFuY2UgLz0gbGVuZ3RoOwotICBt
ZWFuIC89IGxlbmd0aDsKLSAgKnZhcmlhbmNlIC09IG1lYW4gKiBtZWFuOwotCi0gIGZsb2F0IHNu
ciA9IDEwMDsgIC8vIFdlIGFzc2lnbiAxMDAgZEIgdG8gdGhlIHplcm8tZXJyb3IgY2FzZS4KLSAg
aWYgKG1zZSA+IDApCi0gICAgc25yID0gMTAgKiBsb2cxMCgqdmFyaWFuY2UgLyBtc2UpOwotICBy
ZXR1cm4gc25yOwotfQotCi0vLyBSZXR1cm5zIGEgdmVjdG9yPFQ+IHBhcnNlZCBmcm9tIHdoaXRl
c3BhY2UgZGVsaW1pdGVkIHZhbHVlcyBpbiB0b19wYXJzZSwKLS8vIG9yIGFuIGVtcHR5IHZlY3Rv
ciBpZiB0aGUgc3RyaW5nIGNvdWxkIG5vdCBiZSBwYXJzZWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgotc3RkOjp2ZWN0b3I8VD4gUGFyc2VMaXN0KGNvbnN0IHN0ZDo6c3RyaW5nJiB0b19wYXJzZSkg
ewotICBzdGQ6OnZlY3RvcjxUPiB2YWx1ZXM7Ci0KLSAgc3RkOjppc3RyaW5nc3RyZWFtIHN0cih0
b19wYXJzZSk7Ci0gIHN0ZDo6Y29weSgKLSAgICAgIHN0ZDo6aXN0cmVhbV9pdGVyYXRvcjxUPihz
dHIpLAotICAgICAgc3RkOjppc3RyZWFtX2l0ZXJhdG9yPFQ+KCksCi0gICAgICBzdGQ6OmJhY2tf
aW5zZXJ0ZXIodmFsdWVzKSk7Ci0KLSAgcmV0dXJuIHZhbHVlczsKLX0KLQotLy8gUGFyc2VzIHRo
ZSBhcnJheSBnZW9tZXRyeSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuCi0vLwotLy8gSWYgYSB2ZWN0
b3Igd2l0aCBzaXplICE9IG51bV9taWNzIGlzIHJldHVybmVkLCBhbiBlcnJvciBoYXMgb2NjdXJy
ZWQgYW5kIGFuCi0vLyBhcHByb3ByaWF0ZSBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIHByaW50ZWQg
dG8gc3Rkb3V0Lgotc3RkOjp2ZWN0b3I8UG9pbnQ+IFBhcnNlQXJyYXlHZW9tZXRyeShjb25zdCBz
dGQ6OnN0cmluZyYgbWljX3Bvc2l0aW9ucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IG51bV9taWNzKTsKLQotLy8gU2FtZSBhcyBhYm92ZSwgYnV0IHdpdGhv
dXQgdGhlIG51bV9taWNzIGNoZWNrIGZvciB3aGVuIGl0IGlzbid0IGF2YWlsYWJsZS4KLXN0ZDo6
dmVjdG9yPFBvaW50PiBQYXJzZUFycmF5R2VvbWV0cnkoY29uc3Qgc3RkOjpzdHJpbmcmIG1pY19w
b3NpdGlvbnMpOwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRD
X01PRFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX1RFU1RfVVRJTFNfSF8KSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vz
c2luZy90ZXN0L3VuaXR0ZXN0LnByb3RvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3Vu
aXR0ZXN0LnByb3RvCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC91bml0dGVz
dC5wcm90bwkobm9uZXhpc3RlbnQpCkBAIC0xLDU4ICswLDAgQEAKLXN5bnRheCA9ICJwcm90bzIi
Owotb3B0aW9uIG9wdGltaXplX2ZvciA9IExJVEVfUlVOVElNRTsKLXBhY2thZ2Ugd2VicnRjLmF1
ZGlvcHJvYzsKLQotbWVzc2FnZSBUZXN0IHsKLSAgb3B0aW9uYWwgaW50MzIgbnVtX3JldmVyc2Vf
Y2hhbm5lbHMgPSAxOwotICBvcHRpb25hbCBpbnQzMiBudW1faW5wdXRfY2hhbm5lbHMgPSAyOwot
ICBvcHRpb25hbCBpbnQzMiBudW1fb3V0cHV0X2NoYW5uZWxzID0gMzsKLSAgb3B0aW9uYWwgaW50
MzIgc2FtcGxlX3JhdGUgPSA0OwotCi0gIG1lc3NhZ2UgRnJhbWUgewotICB9Ci0KLSAgcmVwZWF0
ZWQgRnJhbWUgZnJhbWUgPSA1OwotCi0gIG9wdGlvbmFsIGludDMyIGFuYWxvZ19sZXZlbF9hdmVy
YWdlID0gNjsKLSAgb3B0aW9uYWwgaW50MzIgbWF4X291dHB1dF9hdmVyYWdlID0gNzsKLQotICBv
cHRpb25hbCBpbnQzMiBoYXNfZWNob19jb3VudCA9IDg7Ci0gIG9wdGlvbmFsIGludDMyIGhhc192
b2ljZV9jb3VudCA9IDk7Ci0gIG9wdGlvbmFsIGludDMyIGlzX3NhdHVyYXRlZF9jb3VudCA9IDEw
OwotCi0gIG1lc3NhZ2UgU3RhdGlzdGljIHsKLSAgICBvcHRpb25hbCBpbnQzMiBpbnN0YW50ID0g
MTsKLSAgICBvcHRpb25hbCBpbnQzMiBhdmVyYWdlID0gMjsKLSAgICBvcHRpb25hbCBpbnQzMiBt
YXhpbXVtID0gMzsKLSAgICBvcHRpb25hbCBpbnQzMiBtaW5pbXVtID0gNDsKLSAgfQotCi0gIG1l
c3NhZ2UgRWNob01ldHJpY3MgewotICAgIG9wdGlvbmFsIFN0YXRpc3RpYyByZXNpZHVhbF9lY2hv
X3JldHVybl9sb3NzID0gMTsKLSAgICBvcHRpb25hbCBTdGF0aXN0aWMgZWNob19yZXR1cm5fbG9z
cyA9IDI7Ci0gICAgb3B0aW9uYWwgU3RhdGlzdGljIGVjaG9fcmV0dXJuX2xvc3NfZW5oYW5jZW1l
bnQgPSAzOwotICAgIG9wdGlvbmFsIFN0YXRpc3RpYyBhX25scCA9IDQ7Ci0gICAgb3B0aW9uYWwg
ZmxvYXQgZGl2ZXJnZW50X2ZpbHRlcl9mcmFjdGlvbiA9IDU7Ci0gIH0KLQotICByZXBlYXRlZCBF
Y2hvTWV0cmljcyBlY2hvX21ldHJpY3MgPSAxMTsKLQotICBtZXNzYWdlIERlbGF5TWV0cmljcyB7
Ci0gICAgb3B0aW9uYWwgaW50MzIgbWVkaWFuID0gMTsKLSAgICBvcHRpb25hbCBpbnQzMiBzdGQg
PSAyOwotICAgIG9wdGlvbmFsIGZsb2F0IGZyYWN0aW9uX3Bvb3JfZGVsYXlzID0gMzsKLSAgfQot
Ci0gIHJlcGVhdGVkIERlbGF5TWV0cmljcyBkZWxheV9tZXRyaWNzID0gMTI7Ci0KLSAgcmVwZWF0
ZWQgaW50MzIgcm1zX2xldmVsID0gMTM7Ci0KLSAgb3B0aW9uYWwgZmxvYXQgbnNfc3BlZWNoX3By
b2JhYmlsaXR5X2F2ZXJhZ2UgPSAxNDsKLQotICBvcHRpb25hbCBib29sIHVzZV9hZWNfZXh0ZW5k
ZWRfZmlsdGVyID0gMTU7Ci19Ci0KLW1lc3NhZ2UgT3V0cHV0RGF0YSB7Ci0gIHJlcGVhdGVkIFRl
c3QgdGVzdCA9IDE7Ci19Ci0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L3VucGFjay5jYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC91bnBhY2suY2MJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L3VucGFjay5jYwkobm9uZXhpc3RlbnQpCkBAIC0xLDMzNiArMCwwIEBACi0v
KgotICogIENvcHlyaWdodCAoYykgMjAxMSBUaGUgV2ViUlRDIHByb2plY3QgYXV0aG9ycy4gQWxs
IFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292
ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRo
ZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQotICogIHRyZWUuIEFuIGFk
ZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFudCBjYW4gYmUgZm91bmQK
LSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGluZyBwcm9qZWN0IGF1dGhv
cnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBpbiB0aGUgcm9vdCBvZiB0
aGUgc291cmNlIHRyZWUuCi0gKi8KLQotLy8gQ29tbWFuZGxpbmUgdG9vbCB0byB1bnBhY2sgYXVk
aW9wcm9jIGRlYnVnIGZpbGVzLgotLy8KLS8vIFRoZSBkZWJ1ZyBmaWxlcyBhcmUgZHVtcGVkIGFz
IHByb3RvYnVmIGJsb2JzLiBGb3IgYW5hbHlzaXMsIGl0J3MgbmVjZXNzYXJ5Ci0vLyB0byB1bnBh
Y2sgdGhlIGZpbGUgaW50byBpdHMgY29tcG9uZW50IHBhcnRzOiBhdWRpbyBhbmQgb3RoZXIgZGF0
YS4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLSNpbmNsdWRl
ICJnZmxhZ3MvZ2ZsYWdzLmgiCi0jaW5jbHVkZSAid2VicnRjL2Jhc2UvZm9ybWF0X21hY3Jvcy5o
IgotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL2lnbm9yZV93dW5kZWYuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvcHJvdG9idWZfdXRpbHMuaCIKLSNpbmNs
dWRlICJ3ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvdGVzdF91dGlscy5oIgot
I2luY2x1ZGUgIndlYnJ0Yy90eXBlZGVmcy5oIgotCi1SVENfUFVTSF9JR05PUklOR19XVU5ERUYo
KQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvZGVidWcucGIuaCIK
LVJUQ19QT1BfSUdOT1JJTkdfV1VOREVGKCkKLQotLy8gVE9ETyhhbmRyZXcpOiB1bnBhY2sgbW9y
ZSBvZiB0aGUgZGF0YS4KLURFRklORV9zdHJpbmcoaW5wdXRfZmlsZSwgImlucHV0IiwgIlRoZSBu
YW1lIG9mIHRoZSBpbnB1dCBzdHJlYW0gZmlsZS4iKTsKLURFRklORV9zdHJpbmcob3V0cHV0X2Zp
bGUsICJyZWZfb3V0IiwKLSAgICAgICAgICAgICAgIlRoZSBuYW1lIG9mIHRoZSByZWZlcmVuY2Ug
b3V0cHV0IHN0cmVhbSBmaWxlLiIpOwotREVGSU5FX3N0cmluZyhyZXZlcnNlX2ZpbGUsICJyZXZl
cnNlIiwKLSAgICAgICAgICAgICAgIlRoZSBuYW1lIG9mIHRoZSByZXZlcnNlIGlucHV0IHN0cmVh
bSBmaWxlLiIpOwotREVGSU5FX3N0cmluZyhkZWxheV9maWxlLCAiZGVsYXkuaW50MzIiLCAiVGhl
IG5hbWUgb2YgdGhlIGRlbGF5IGZpbGUuIik7Ci1ERUZJTkVfc3RyaW5nKGRyaWZ0X2ZpbGUsICJk
cmlmdC5pbnQzMiIsICJUaGUgbmFtZSBvZiB0aGUgZHJpZnQgZmlsZS4iKTsKLURFRklORV9zdHJp
bmcobGV2ZWxfZmlsZSwgImxldmVsLmludDMyIiwgIlRoZSBuYW1lIG9mIHRoZSBsZXZlbCBmaWxl
LiIpOwotREVGSU5FX3N0cmluZyhrZXlwcmVzc19maWxlLCAia2V5cHJlc3MuYm9vbCIsICJUaGUg
bmFtZSBvZiB0aGUga2V5cHJlc3MgZmlsZS4iKTsKLURFRklORV9zdHJpbmcoc2V0dGluZ3NfZmls
ZSwgInNldHRpbmdzLnR4dCIsICJUaGUgbmFtZSBvZiB0aGUgc2V0dGluZ3MgZmlsZS4iKTsKLURF
RklORV9ib29sKGZ1bGwsIGZhbHNlLAotICAgICAgICAgICAgIlVucGFjayB0aGUgZnVsbCBzZXQg
b2YgZmlsZXMgKG5vcm1hbGx5IG5vdCBuZWVkZWQpLiIpOwotREVGSU5FX2Jvb2wocmF3LCBmYWxz
ZSwgIldyaXRlIHJhdyBkYXRhIGluc3RlYWQgb2YgYSBXQVYgZmlsZS4iKTsKLURFRklORV9ib29s
KHRleHQsCi0gICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICJXcml0ZSBub24tYXVkaW8g
ZmlsZXMgYXMgdGV4dCBmaWxlcyBpbnN0ZWFkIG9mIGJpbmFyeSBmaWxlcy4iKTsKLQotI2RlZmlu
ZSBQUklOVF9DT05GSUcoZmllbGRfbmFtZSkgXAotICBpZiAobXNnLmhhc18jI2ZpZWxkX25hbWUo
KSkgeyBcCi0gICAgZnByaW50ZihzZXR0aW5nc19maWxlLCAiICAiICNmaWVsZF9uYW1lICI6ICVk
XG4iLCBtc2cuZmllbGRfbmFtZSgpKTsgXAotICB9Ci0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi11
c2luZyBhdWRpb3Byb2M6OkV2ZW50OwotdXNpbmcgYXVkaW9wcm9jOjpSZXZlcnNlU3RyZWFtOwot
dXNpbmcgYXVkaW9wcm9jOjpTdHJlYW07Ci11c2luZyBhdWRpb3Byb2M6OkluaXQ7Ci0KLXZvaWQg
V3JpdGVEYXRhKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBzaXplLCBGSUxFKiBmaWxlLAotICAg
ICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZpbGVuYW1lKSB7Ci0gIGlmIChmd3JpdGUo
ZGF0YSwgc2l6ZSwgMSwgZmlsZSkgIT0gMSkgewotICAgIHByaW50ZigiRXJyb3Igd2hlbiB3cml0
aW5nIHRvICVzXG4iLCBmaWxlbmFtZS5jX3N0cigpKTsKLSAgICBleGl0KDEpOwotICB9Ci19Ci0K
LWludCBkb19tYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pIHsKLSAgc3RkOjpzdHJpbmcgcHJv
Z3JhbV9uYW1lID0gYXJndlswXTsKLSAgc3RkOjpzdHJpbmcgdXNhZ2UgPSAiQ29tbWFuZGxpbmUg
dG9vbCB0byB1bnBhY2sgYXVkaW9wcm9jIGRlYnVnIGZpbGVzLlxuIgotICAgICJFeGFtcGxlIHVz
YWdlOlxuIiArIHByb2dyYW1fbmFtZSArICIgZGVidWdfZHVtcC5wYlxuIjsKLSAgZ29vZ2xlOjpT
ZXRVc2FnZU1lc3NhZ2UodXNhZ2UpOwotICBnb29nbGU6OlBhcnNlQ29tbWFuZExpbmVGbGFncygm
YXJnYywgJmFyZ3YsIHRydWUpOwotCi0gIGlmIChhcmdjIDwgMikgewotICAgIHByaW50ZigiJXMi
LCBnb29nbGU6OlByb2dyYW1Vc2FnZSgpKTsKLSAgICByZXR1cm4gMTsKLSAgfQotCi0gIEZJTEUq
IGRlYnVnX2ZpbGUgPSBPcGVuRmlsZShhcmd2WzFdLCAicmIiKTsKLQotICBFdmVudCBldmVudF9t
c2c7Ci0gIGludCBmcmFtZV9jb3VudCA9IDA7Ci0gIHNpemVfdCByZXZlcnNlX3NhbXBsZXNfcGVy
X2NoYW5uZWwgPSAwOwotICBzaXplX3QgaW5wdXRfc2FtcGxlc19wZXJfY2hhbm5lbCA9IDA7Ci0g
IHNpemVfdCBvdXRwdXRfc2FtcGxlc19wZXJfY2hhbm5lbCA9IDA7Ci0gIHNpemVfdCBudW1fcmV2
ZXJzZV9jaGFubmVscyA9IDA7Ci0gIHNpemVfdCBudW1faW5wdXRfY2hhbm5lbHMgPSAwOwotICBz
aXplX3QgbnVtX291dHB1dF9jaGFubmVscyA9IDA7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxXYXZXcml0
ZXI+IHJldmVyc2Vfd2F2X2ZpbGU7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxXYXZXcml0ZXI+IGlucHV0
X3dhdl9maWxlOwotICBzdGQ6OnVuaXF1ZV9wdHI8V2F2V3JpdGVyPiBvdXRwdXRfd2F2X2ZpbGU7
Ci0gIHN0ZDo6dW5pcXVlX3B0cjxSYXdGaWxlPiByZXZlcnNlX3Jhd19maWxlOwotICBzdGQ6OnVu
aXF1ZV9wdHI8UmF3RmlsZT4gaW5wdXRfcmF3X2ZpbGU7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxSYXdG
aWxlPiBvdXRwdXRfcmF3X2ZpbGU7Ci0KLSAgRklMRSogc2V0dGluZ3NfZmlsZSA9IE9wZW5GaWxl
KEZMQUdTX3NldHRpbmdzX2ZpbGUsICJ3YiIpOwotCi0gIHdoaWxlIChSZWFkTWVzc2FnZUZyb21G
aWxlKGRlYnVnX2ZpbGUsICZldmVudF9tc2cpKSB7Ci0gICAgaWYgKGV2ZW50X21zZy50eXBlKCkg
PT0gRXZlbnQ6OlJFVkVSU0VfU1RSRUFNKSB7Ci0gICAgICBpZiAoIWV2ZW50X21zZy5oYXNfcmV2
ZXJzZV9zdHJlYW0oKSkgewotICAgICAgICBwcmludGYoIkNvcnJ1cHQgaW5wdXQgZmlsZTogUmV2
ZXJzZVN0cmVhbSBtaXNzaW5nLlxuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgICAgfQotCi0g
ICAgICBjb25zdCBSZXZlcnNlU3RyZWFtIG1zZyA9IGV2ZW50X21zZy5yZXZlcnNlX3N0cmVhbSgp
OwotICAgICAgaWYgKG1zZy5oYXNfZGF0YSgpKSB7Ci0gICAgICAgIGlmIChGTEFHU19yYXcgJiYg
IXJldmVyc2VfcmF3X2ZpbGUpIHsKLSAgICAgICAgICByZXZlcnNlX3Jhd19maWxlLnJlc2V0KG5l
dyBSYXdGaWxlKEZMQUdTX3JldmVyc2VfZmlsZSArICIucGNtIikpOwotICAgICAgICB9Ci0gICAg
ICAgIC8vIFRPRE8oYWx1ZWJzKTogUmVwbGFjZSAibnVtX3JldmVyc2VfY2hhbm5lbHMgKgotICAg
ICAgICAvLyByZXZlcnNlX3NhbXBsZXNfcGVyX2NoYW5uZWwiIHdpdGggIm1zZy5kYXRhKCkuc2l6
ZSgpIC8KLSAgICAgICAgLy8gc2l6ZW9mKGludDE2X3QpIiBhbmQgc28gb24gd2hlbiB0aGlzIGZp
eCBpbiBhdWRpb19wcm9jZXNzaW5nIGhhcyBtYWRlCi0gICAgICAgIC8vIGl0IGludG8gc3RhYmxl
OiBodHRwczovL3dlYnJ0Yy1jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzE1Mjk5MDA0LwotICAgICAg
ICBXcml0ZUludERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQxNl90Kj4obXNnLmRhdGEo
KS5kYXRhKCkpLAotICAgICAgICAgICAgICAgICAgICAgbnVtX3JldmVyc2VfY2hhbm5lbHMgKiBy
ZXZlcnNlX3NhbXBsZXNfcGVyX2NoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICByZXZlcnNl
X3dhdl9maWxlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZV9yYXdfZmlsZS5n
ZXQoKSk7Ci0gICAgICB9IGVsc2UgaWYgKG1zZy5jaGFubmVsX3NpemUoKSA+IDApIHsKLSAgICAg
ICAgaWYgKEZMQUdTX3JhdyAmJiAhcmV2ZXJzZV9yYXdfZmlsZSkgewotICAgICAgICAgIHJldmVy
c2VfcmF3X2ZpbGUucmVzZXQobmV3IFJhd0ZpbGUoRkxBR1NfcmV2ZXJzZV9maWxlICsgIi5mbG9h
dCIpKTsKLSAgICAgICAgfQotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgZmxvYXQqIFtd
PiBkYXRhKAotICAgICAgICAgICAgbmV3IGNvbnN0IGZsb2F0KiBbbnVtX3JldmVyc2VfY2hhbm5l
bHNdKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1fcmV2ZXJzZV9jaGFubmVs
czsgKytpKSB7Ci0gICAgICAgICAgZGF0YVtpXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihtc2cuY2hhbm5lbChpKS5kYXRhKCkpOwotICAgICAgICB9Ci0gICAgICAgIFdyaXRlRmxv
YXREYXRhKGRhdGEuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2Vfc2FtcGxl
c19wZXJfY2hhbm5lbCwKLSAgICAgICAgICAgICAgICAgICAgICAgbnVtX3JldmVyc2VfY2hhbm5l
bHMsCi0gICAgICAgICAgICAgICAgICAgICAgIHJldmVyc2Vfd2F2X2ZpbGUuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgIHJldmVyc2VfcmF3X2ZpbGUuZ2V0KCkpOwotICAgICAgfQotICAg
IH0gZWxzZSBpZiAoZXZlbnRfbXNnLnR5cGUoKSA9PSBFdmVudDo6U1RSRUFNKSB7Ci0gICAgICBm
cmFtZV9jb3VudCsrOwotICAgICAgaWYgKCFldmVudF9tc2cuaGFzX3N0cmVhbSgpKSB7Ci0gICAg
ICAgIHByaW50ZigiQ29ycnVwdCBpbnB1dCBmaWxlOiBTdHJlYW0gbWlzc2luZy5cbiIpOwotICAg
ICAgICByZXR1cm4gMTsKLSAgICAgIH0KLQotICAgICAgY29uc3QgU3RyZWFtIG1zZyA9IGV2ZW50
X21zZy5zdHJlYW0oKTsKLSAgICAgIGlmIChtc2cuaGFzX2lucHV0X2RhdGEoKSkgewotICAgICAg
ICBpZiAoRkxBR1NfcmF3ICYmICFpbnB1dF9yYXdfZmlsZSkgewotICAgICAgICAgIGlucHV0X3Jh
d19maWxlLnJlc2V0KG5ldyBSYXdGaWxlKEZMQUdTX2lucHV0X2ZpbGUgKyAiLnBjbSIpKTsKLSAg
ICAgICAgfQotICAgICAgICBXcml0ZUludERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQx
Nl90Kj4obXNnLmlucHV0X2RhdGEoKS5kYXRhKCkpLAotICAgICAgICAgICAgICAgICAgICAgbnVt
X2lucHV0X2NoYW5uZWxzICogaW5wdXRfc2FtcGxlc19wZXJfY2hhbm5lbCwKLSAgICAgICAgICAg
ICAgICAgICAgIGlucHV0X3dhdl9maWxlLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgaW5w
dXRfcmF3X2ZpbGUuZ2V0KCkpOwotICAgICAgfSBlbHNlIGlmIChtc2cuaW5wdXRfY2hhbm5lbF9z
aXplKCkgPiAwKSB7Ci0gICAgICAgIGlmIChGTEFHU19yYXcgJiYgIWlucHV0X3Jhd19maWxlKSB7
Ci0gICAgICAgICAgaW5wdXRfcmF3X2ZpbGUucmVzZXQobmV3IFJhd0ZpbGUoRkxBR1NfaW5wdXRf
ZmlsZSArICIuZmxvYXQiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGNv
bnN0IGZsb2F0KiBbXT4gZGF0YSgKLSAgICAgICAgICAgIG5ldyBjb25zdCBmbG9hdCogW251bV9p
bnB1dF9jaGFubmVsc10pOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bV9pbnB1
dF9jaGFubmVsczsgKytpKSB7Ci0gICAgICAgICAgZGF0YVtpXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgZmxvYXQqPihtc2cuaW5wdXRfY2hhbm5lbChpKS5kYXRhKCkpOwotICAgICAgICB9Ci0g
ICAgICAgIFdyaXRlRmxvYXREYXRhKGRhdGEuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
IGlucHV0X3NhbXBsZXNfcGVyX2NoYW5uZWwsCi0gICAgICAgICAgICAgICAgICAgICAgIG51bV9p
bnB1dF9jaGFubmVscywKLSAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfd2F2X2ZpbGUuZ2V0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgIGlucHV0X3Jhd19maWxlLmdldCgpKTsKLSAgICAg
IH0KLQotICAgICAgaWYgKG1zZy5oYXNfb3V0cHV0X2RhdGEoKSkgewotICAgICAgICBpZiAoRkxB
R1NfcmF3ICYmICFvdXRwdXRfcmF3X2ZpbGUpIHsKLSAgICAgICAgICBvdXRwdXRfcmF3X2ZpbGUu
cmVzZXQobmV3IFJhd0ZpbGUoRkxBR1Nfb3V0cHV0X2ZpbGUgKyAiLnBjbSIpKTsKLSAgICAgICAg
fQotICAgICAgICBXcml0ZUludERhdGEocmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnQxNl90Kj4o
bXNnLm91dHB1dF9kYXRhKCkuZGF0YSgpKSwKLSAgICAgICAgICAgICAgICAgICAgIG51bV9vdXRw
dXRfY2hhbm5lbHMgKiBvdXRwdXRfc2FtcGxlc19wZXJfY2hhbm5lbCwKLSAgICAgICAgICAgICAg
ICAgICAgIG91dHB1dF93YXZfZmlsZS5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgIG91dHB1
dF9yYXdfZmlsZS5nZXQoKSk7Ci0gICAgICB9IGVsc2UgaWYgKG1zZy5vdXRwdXRfY2hhbm5lbF9z
aXplKCkgPiAwKSB7Ci0gICAgICAgIGlmIChGTEFHU19yYXcgJiYgIW91dHB1dF9yYXdfZmlsZSkg
ewotICAgICAgICAgIG91dHB1dF9yYXdfZmlsZS5yZXNldChuZXcgUmF3RmlsZShGTEFHU19vdXRw
dXRfZmlsZSArICIuZmxvYXQiKSk7Ci0gICAgICAgIH0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PGNvbnN0IGZsb2F0KiBbXT4gZGF0YSgKLSAgICAgICAgICAgIG5ldyBjb25zdCBmbG9hdCogW251
bV9vdXRwdXRfY2hhbm5lbHNdKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1f
b3V0cHV0X2NoYW5uZWxzOyArK2kpIHsKLSAgICAgICAgICBkYXRhW2ldID0KLSAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KG1zZy5vdXRwdXRfY2hhbm5lbChpKS5k
YXRhKCkpOwotICAgICAgICB9Ci0gICAgICAgIFdyaXRlRmxvYXREYXRhKGRhdGEuZ2V0KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zYW1wbGVzX3Blcl9jaGFubmVsLAotICAgICAg
ICAgICAgICAgICAgICAgICBudW1fb3V0cHV0X2NoYW5uZWxzLAotICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwdXRfd2F2X2ZpbGUuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgIG91dHB1
dF9yYXdfZmlsZS5nZXQoKSk7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChGTEFHU19mdWxsKSB7Ci0g
ICAgICAgIGlmIChtc2cuaGFzX2RlbGF5KCkpIHsKLSAgICAgICAgICBzdGF0aWMgRklMRSogZGVs
YXlfZmlsZSA9IE9wZW5GaWxlKEZMQUdTX2RlbGF5X2ZpbGUsICJ3YiIpOwotICAgICAgICAgIGlu
dDMyX3QgZGVsYXkgPSBtc2cuZGVsYXkoKTsKLSAgICAgICAgICBpZiAoRkxBR1NfdGV4dCkgewot
ICAgICAgICAgICAgZnByaW50ZihkZWxheV9maWxlLCAiJWRcbiIsIGRlbGF5KTsKLSAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgV3JpdGVEYXRhKCZkZWxheSwgc2l6ZW9mKGRlbGF5KSwg
ZGVsYXlfZmlsZSwgRkxBR1NfZGVsYXlfZmlsZSk7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1zZy5oYXNfZHJpZnQoKSkgewotICAgICAgICAgIHN0YXRpYyBGSUxFKiBk
cmlmdF9maWxlID0gT3BlbkZpbGUoRkxBR1NfZHJpZnRfZmlsZSwgIndiIik7Ci0gICAgICAgICAg
aW50MzJfdCBkcmlmdCA9IG1zZy5kcmlmdCgpOwotICAgICAgICAgIGlmIChGTEFHU190ZXh0KSB7
Ci0gICAgICAgICAgICBmcHJpbnRmKGRyaWZ0X2ZpbGUsICIlZFxuIiwgZHJpZnQpOwotICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBXcml0ZURhdGEoJmRyaWZ0LCBzaXplb2YoZHJpZnQp
LCBkcmlmdF9maWxlLCBGTEFHU19kcmlmdF9maWxlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAobXNnLmhhc19sZXZlbCgpKSB7Ci0gICAgICAgICAgc3RhdGljIEZJTEUq
IGxldmVsX2ZpbGUgPSBPcGVuRmlsZShGTEFHU19sZXZlbF9maWxlLCAid2IiKTsKLSAgICAgICAg
ICBpbnQzMl90IGxldmVsID0gbXNnLmxldmVsKCk7Ci0gICAgICAgICAgaWYgKEZMQUdTX3RleHQp
IHsKLSAgICAgICAgICAgIGZwcmludGYobGV2ZWxfZmlsZSwgIiVkXG4iLCBsZXZlbCk7Ci0gICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFdyaXRlRGF0YSgmbGV2ZWwsIHNpemVvZihsZXZl
bCksIGxldmVsX2ZpbGUsIEZMQUdTX2xldmVsX2ZpbGUpOwotICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGlmIChtc2cuaGFzX2tleXByZXNzKCkpIHsKLSAgICAgICAgICBzdGF0aWMg
RklMRSoga2V5cHJlc3NfZmlsZSA9IE9wZW5GaWxlKEZMQUdTX2tleXByZXNzX2ZpbGUsICJ3YiIp
OwotICAgICAgICAgIGJvb2wga2V5cHJlc3MgPSBtc2cua2V5cHJlc3MoKTsKLSAgICAgICAgICBp
ZiAoRkxBR1NfdGV4dCkgewotICAgICAgICAgICAgZnByaW50ZihrZXlwcmVzc19maWxlLCAiJWRc
biIsIGtleXByZXNzKTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgV3JpdGVEYXRh
KCZrZXlwcmVzcywgc2l6ZW9mKGtleXByZXNzKSwga2V5cHJlc3NfZmlsZSwKLSAgICAgICAgICAg
ICAgICAgICAgICBGTEFHU19rZXlwcmVzc19maWxlKTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGV2ZW50X21zZy50eXBlKCkgPT0gRXZlbnQ6OkNPTkZJ
RykgewotICAgICAgaWYgKCFldmVudF9tc2cuaGFzX2NvbmZpZygpKSB7Ci0gICAgICAgIHByaW50
ZigiQ29ycnVwdCBpbnB1dCBmaWxlOiBDb25maWcgbWlzc2luZy5cbiIpOwotICAgICAgICByZXR1
cm4gMTsKLSAgICAgIH0KLSAgICAgIGNvbnN0IGF1ZGlvcHJvYzo6Q29uZmlnIG1zZyA9IGV2ZW50
X21zZy5jb25maWcoKTsKLQotICAgICAgZnByaW50ZihzZXR0aW5nc19maWxlLCAiQVBNIHJlLWNv
bmZpZyBhdCBmcmFtZTogJWRcbiIsIGZyYW1lX2NvdW50KTsKLQotICAgICAgUFJJTlRfQ09ORklH
KGFlY19lbmFibGVkKTsKLSAgICAgIFBSSU5UX0NPTkZJRyhhZWNfZGVsYXlfYWdub3N0aWNfZW5h
YmxlZCk7Ci0gICAgICBQUklOVF9DT05GSUcoYWVjX2RyaWZ0X2NvbXBlbnNhdGlvbl9lbmFibGVk
KTsKLSAgICAgIFBSSU5UX0NPTkZJRyhhZWNfZXh0ZW5kZWRfZmlsdGVyX2VuYWJsZWQpOwotICAg
ICAgUFJJTlRfQ09ORklHKGFlY19zdXBwcmVzc2lvbl9sZXZlbCk7Ci0gICAgICBQUklOVF9DT05G
SUcoYWVjbV9lbmFibGVkKTsKLSAgICAgIFBSSU5UX0NPTkZJRyhhZWNtX2NvbWZvcnRfbm9pc2Vf
ZW5hYmxlZCk7Ci0gICAgICBQUklOVF9DT05GSUcoYWVjbV9yb3V0aW5nX21vZGUpOwotICAgICAg
UFJJTlRfQ09ORklHKGFnY19lbmFibGVkKTsKLSAgICAgIFBSSU5UX0NPTkZJRyhhZ2NfbW9kZSk7
Ci0gICAgICBQUklOVF9DT05GSUcoYWdjX2xpbWl0ZXJfZW5hYmxlZCk7Ci0gICAgICBQUklOVF9D
T05GSUcobm9pc2Vfcm9idXN0X2FnY19lbmFibGVkKTsKLSAgICAgIFBSSU5UX0NPTkZJRyhocGZf
ZW5hYmxlZCk7Ci0gICAgICBQUklOVF9DT05GSUcobnNfZW5hYmxlZCk7Ci0gICAgICBQUklOVF9D
T05GSUcobnNfbGV2ZWwpOwotICAgICAgUFJJTlRfQ09ORklHKHRyYW5zaWVudF9zdXBwcmVzc2lv
bl9lbmFibGVkKTsKLSAgICAgIFBSSU5UX0NPTkZJRyhpbnRlbGxpZ2liaWxpdHlfZW5oYW5jZXJf
ZW5hYmxlZCk7Ci0gICAgICBpZiAobXNnLmhhc19leHBlcmltZW50c19kZXNjcmlwdGlvbigpKSB7
Ci0gICAgICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwgIiAgZXhwZXJpbWVudHNfZGVzY3JpcHRp
b246ICVzXG4iLAotICAgICAgICAgICAgICAgIG1zZy5leHBlcmltZW50c19kZXNjcmlwdGlvbigp
LmNfc3RyKCkpOwotICAgICAgfQotICAgIH0gZWxzZSBpZiAoZXZlbnRfbXNnLnR5cGUoKSA9PSBF
dmVudDo6SU5JVCkgewotICAgICAgaWYgKCFldmVudF9tc2cuaGFzX2luaXQoKSkgewotICAgICAg
ICBwcmludGYoIkNvcnJ1cHQgaW5wdXQgZmlsZTogSW5pdCBtaXNzaW5nLlxuIik7Ci0gICAgICAg
IHJldHVybiAxOwotICAgICAgfQotCi0gICAgICBjb25zdCBJbml0IG1zZyA9IGV2ZW50X21zZy5p
bml0KCk7Ci0gICAgICAvLyBUaGVzZSBzaG91bGQgcHJpbnQgb3V0IHplcm9zIGlmIHRoZXkncmUg
bWlzc2luZy4KLSAgICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwgIkluaXQgYXQgZnJhbWU6ICVk
XG4iLCBmcmFtZV9jb3VudCk7Ci0gICAgICBpbnQgaW5wdXRfc2FtcGxlX3JhdGUgPSBtc2cuc2Ft
cGxlX3JhdGUoKTsKLSAgICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwgIiAgSW5wdXQgc2FtcGxl
IHJhdGU6ICVkXG4iLCBpbnB1dF9zYW1wbGVfcmF0ZSk7Ci0gICAgICBpbnQgb3V0cHV0X3NhbXBs
ZV9yYXRlID0gbXNnLm91dHB1dF9zYW1wbGVfcmF0ZSgpOwotICAgICAgZnByaW50ZihzZXR0aW5n
c19maWxlLCAiICBPdXRwdXQgc2FtcGxlIHJhdGU6ICVkXG4iLCBvdXRwdXRfc2FtcGxlX3JhdGUp
OwotICAgICAgaW50IHJldmVyc2Vfc2FtcGxlX3JhdGUgPSBtc2cucmV2ZXJzZV9zYW1wbGVfcmF0
ZSgpOwotICAgICAgZnByaW50ZihzZXR0aW5nc19maWxlLAotICAgICAgICAgICAgICAiICBSZXZl
cnNlIHNhbXBsZSByYXRlOiAlZFxuIiwKLSAgICAgICAgICAgICAgcmV2ZXJzZV9zYW1wbGVfcmF0
ZSk7Ci0gICAgICBudW1faW5wdXRfY2hhbm5lbHMgPSBtc2cubnVtX2lucHV0X2NoYW5uZWxzKCk7
Ci0gICAgICBmcHJpbnRmKHNldHRpbmdzX2ZpbGUsICIgIElucHV0IGNoYW5uZWxzOiAlIiBQUkl1
UyAiXG4iLAotICAgICAgICAgICAgICBudW1faW5wdXRfY2hhbm5lbHMpOwotICAgICAgbnVtX291
dHB1dF9jaGFubmVscyA9IG1zZy5udW1fb3V0cHV0X2NoYW5uZWxzKCk7Ci0gICAgICBmcHJpbnRm
KHNldHRpbmdzX2ZpbGUsICIgIE91dHB1dCBjaGFubmVsczogJSIgUFJJdVMgIlxuIiwKLSAgICAg
ICAgICAgICAgbnVtX291dHB1dF9jaGFubmVscyk7Ci0gICAgICBudW1fcmV2ZXJzZV9jaGFubmVs
cyA9IG1zZy5udW1fcmV2ZXJzZV9jaGFubmVscygpOwotICAgICAgZnByaW50ZihzZXR0aW5nc19m
aWxlLCAiICBSZXZlcnNlIGNoYW5uZWxzOiAlIiBQUkl1UyAiXG4iLAotICAgICAgICAgICAgICBu
dW1fcmV2ZXJzZV9jaGFubmVscyk7Ci0KLSAgICAgIGZwcmludGYoc2V0dGluZ3NfZmlsZSwgIlxu
Iik7Ci0KLSAgICAgIGlmIChyZXZlcnNlX3NhbXBsZV9yYXRlID09IDApIHsKLSAgICAgICAgcmV2
ZXJzZV9zYW1wbGVfcmF0ZSA9IGlucHV0X3NhbXBsZV9yYXRlOwotICAgICAgfQotICAgICAgaWYg
KG91dHB1dF9zYW1wbGVfcmF0ZSA9PSAwKSB7Ci0gICAgICAgIG91dHB1dF9zYW1wbGVfcmF0ZSA9
IGlucHV0X3NhbXBsZV9yYXRlOwotICAgICAgfQotCi0gICAgICByZXZlcnNlX3NhbXBsZXNfcGVy
X2NoYW5uZWwgPQotICAgICAgICAgIHN0YXRpY19jYXN0PHNpemVfdD4ocmV2ZXJzZV9zYW1wbGVf
cmF0ZSAvIDEwMCk7Ci0gICAgICBpbnB1dF9zYW1wbGVzX3Blcl9jaGFubmVsID0KLSAgICAgICAg
ICBzdGF0aWNfY2FzdDxzaXplX3Q+KGlucHV0X3NhbXBsZV9yYXRlIC8gMTAwKTsKLSAgICAgIG91
dHB1dF9zYW1wbGVzX3Blcl9jaGFubmVsID0KLSAgICAgICAgICBzdGF0aWNfY2FzdDxzaXplX3Q+
KG91dHB1dF9zYW1wbGVfcmF0ZSAvIDEwMCk7Ci0KLSAgICAgIGlmICghRkxBR1NfcmF3KSB7Ci0g
ICAgICAgIC8vIFRoZSBXQVYgZmlsZXMgbmVlZCB0byBiZSByZXNldCBldmVyeSB0aW1lLCBiZWNh
dXNlIHRoZXkgY2FudCBjaGFuZ2UKLSAgICAgICAgLy8gdGhlaXIgc2FtcGxlIHJhdGUgb3IgbnVt
YmVyIG9mIGNoYW5uZWxzLgotICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSByZXZlcnNlX25hbWU7
Ci0gICAgICAgIHJldmVyc2VfbmFtZSA8PCBGTEFHU19yZXZlcnNlX2ZpbGUgPDwgZnJhbWVfY291
bnQgPDwgIi53YXYiOwotICAgICAgICByZXZlcnNlX3dhdl9maWxlLnJlc2V0KG5ldyBXYXZXcml0
ZXIocmV2ZXJzZV9uYW1lLnN0cigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmV2ZXJzZV9zYW1wbGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bV9yZXZlcnNlX2NoYW5uZWxzKSk7Ci0gICAgICAgIHN0
ZDo6c3RyaW5nc3RyZWFtIGlucHV0X25hbWU7Ci0gICAgICAgIGlucHV0X25hbWUgPDwgRkxBR1Nf
aW5wdXRfZmlsZSA8PCBmcmFtZV9jb3VudCA8PCAiLndhdiI7Ci0gICAgICAgIGlucHV0X3dhdl9m
aWxlLnJlc2V0KG5ldyBXYXZXcml0ZXIoaW5wdXRfbmFtZS5zdHIoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9zYW1wbGVfcmF0ZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1faW5wdXRfY2hhbm5lbHMpKTsK
LSAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gb3V0cHV0X25hbWU7Ci0gICAgICAgIG91dHB1dF9u
YW1lIDw8IEZMQUdTX291dHB1dF9maWxlIDw8IGZyYW1lX2NvdW50IDw8ICIud2F2IjsKLSAgICAg
ICAgb3V0cHV0X3dhdl9maWxlLnJlc2V0KG5ldyBXYXZXcml0ZXIob3V0cHV0X25hbWUuc3RyKCks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9zYW1w
bGVfcmF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
X291dHB1dF9jaGFubmVscykpOwotICAgICAgfQotICAgIH0KLSAgfQotCi0gIHJldHVybiAwOwot
fQotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLWludCBtYWluKGludCBhcmdjLCBjaGFyKiBh
cmd2W10pIHsKLSAgcmV0dXJuIHdlYnJ0Yzo6ZG9fbWFpbihhcmdjLCBhcmd2KTsKLX0KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9f
cHJvY2Vzc2luZy90ZXN0L3dhdl9iYXNlZF9zaW11bGF0b3IuY2MKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9j
ZXNzaW5nL3Rlc3Qvd2F2X2Jhc2VkX3NpbXVsYXRvci5jYwkocmV2aXNpb24gMjEyMjczKQorKysg
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19w
cm9jZXNzaW5nL3Rlc3Qvd2F2X2Jhc2VkX3NpbXVsYXRvci5jYwkobm9uZXhpc3RlbnQpCkBAIC0x
LDE2MyArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoYykgMjAxNiBUaGUgV2ViUlRDIHByb2pl
Y3QgYXV0aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiAgVXNlIG9mIHRoaXMgc291
cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZQotICogIHRoYXQgY2Fu
IGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZQot
ICogIHRyZWUuIEFuIGFkZGl0aW9uYWwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBncmFu
dCBjYW4gYmUgZm91bmQKLSAqICBpbiB0aGUgZmlsZSBQQVRFTlRTLiAgQWxsIGNvbnRyaWJ1dGlu
ZyBwcm9qZWN0IGF1dGhvcnMgbWF5Ci0gKiAgYmUgZm91bmQgaW4gdGhlIEFVVEhPUlMgZmlsZSBp
biB0aGUgcm9vdCBvZiB0aGUgc291cmNlIHRyZWUuCi0gKi8KLQotI2luY2x1ZGUgIndlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC93YXZfYmFzZWRfc2ltdWxhdG9yLmgiCi0KLSNp
bmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJydGMvdGVzdC90ZXN0
c3VwcG9ydC90cmFjZV90b19zdGRlcnIuaCIKLQotbmFtZXNwYWNlIHdlYnJ0YyB7Ci1uYW1lc3Bh
Y2UgdGVzdCB7Ci0KLVdhdkJhc2VkU2ltdWxhdG9yOjpXYXZCYXNlZFNpbXVsYXRvcihjb25zdCBT
aW11bGF0aW9uU2V0dGluZ3MmIHNldHRpbmdzKQotICAgICAgOiBBdWRpb1Byb2Nlc3NpbmdTaW11
bGF0b3Ioc2V0dGluZ3MpIHt9Ci0KLVdhdkJhc2VkU2ltdWxhdG9yOjp+V2F2QmFzZWRTaW11bGF0
b3IoKSA9IGRlZmF1bHQ7Ci0KLXN0ZDo6dmVjdG9yPFdhdkJhc2VkU2ltdWxhdG9yOjpTaW11bGF0
aW9uRXZlbnRUeXBlPgotV2F2QmFzZWRTaW11bGF0b3I6OkdldERlZmF1bHRFdmVudENoYWluKCkg
Y29uc3QgewotICBzdGQ6OnZlY3RvcjxXYXZCYXNlZFNpbXVsYXRvcjo6U2ltdWxhdGlvbkV2ZW50
VHlwZT4gY2FsbF9jaGFpbigyKTsKLSAgY2FsbF9jaGFpblswXSA9IFNpbXVsYXRpb25FdmVudFR5
cGU6OmtQcm9jZXNzU3RyZWFtOwotICBjYWxsX2NoYWluWzFdID0gU2ltdWxhdGlvbkV2ZW50VHlw
ZTo6a1Byb2Nlc3NSZXZlcnNlU3RyZWFtOwotICByZXR1cm4gY2FsbF9jaGFpbjsKLX0KLQotdm9p
ZCBXYXZCYXNlZFNpbXVsYXRvcjo6UHJlcGFyZVByb2Nlc3NTdHJlYW1DYWxsKCkgewotICBpZiAo
c2V0dGluZ3NfLmZpeGVkX2ludGVyZmFjZSkgewotICAgIENvcHlUb0F1ZGlvRnJhbWUoKmluX2J1
Zl8sICZmd2RfZnJhbWVfKTsKLSAgfQotICBhcF8tPnNldF9zdHJlYW1fa2V5X3ByZXNzZWQoc2V0
dGluZ3NfLnVzZV90cyAmJiAoKnNldHRpbmdzXy51c2VfdHMpKTsKLQotICBSVENfQ0hFQ0tfRVEo
QXVkaW9Qcm9jZXNzaW5nOjprTm9FcnJvciwKLSAgICAgICAgICAgICAgIGFwXy0+c2V0X3N0cmVh
bV9kZWxheV9tcygKLSAgICAgICAgICAgICAgICAgICBzZXR0aW5nc18uc3RyZWFtX2RlbGF5ID8g
KnNldHRpbmdzXy5zdHJlYW1fZGVsYXkgOiAwKSk7Ci0KLSAgYXBfLT5lY2hvX2NhbmNlbGxhdGlv
bigpLT5zZXRfc3RyZWFtX2RyaWZ0X3NhbXBsZXMoCi0gICAgICBzZXR0aW5nc18uc3RyZWFtX2Ry
aWZ0X3NhbXBsZXMgPyAqc2V0dGluZ3NfLnN0cmVhbV9kcmlmdF9zYW1wbGVzIDogMCk7Ci0KLSAg
UlRDX0NIRUNLX0VRKEF1ZGlvUHJvY2Vzc2luZzo6a05vRXJyb3IsCi0gICAgICAgICAgICAgICBh
cF8tPmdhaW5fY29udHJvbCgpLT5zZXRfc3RyZWFtX2FuYWxvZ19sZXZlbCgKLSAgICAgICAgICAg
ICAgICAgICBsYXN0X3NwZWNpZmllZF9taWNyb3Bob25lX2xldmVsXykpOwotfQotCi12b2lkIFdh
dkJhc2VkU2ltdWxhdG9yOjpQcmVwYXJlUmV2ZXJzZVByb2Nlc3NTdHJlYW1DYWxsKCkgewotICBp
ZiAoc2V0dGluZ3NfLmZpeGVkX2ludGVyZmFjZSkgewotICAgIENvcHlUb0F1ZGlvRnJhbWUoKnJl
dmVyc2VfaW5fYnVmXywgJnJldl9mcmFtZV8pOwotICB9Ci19Ci0KLXZvaWQgV2F2QmFzZWRTaW11
bGF0b3I6OlByb2Nlc3MoKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjx0ZXN0OjpUcmFjZVRvU3RkZXJy
PiB0cmFjZV90b19zdGRlcnI7Ci0gIGlmIChzZXR0aW5nc18udXNlX3ZlcmJvc2VfbG9nZ2luZykg
ewotICAgIHRyYWNlX3RvX3N0ZGVyci5yZXNldChuZXcgdGVzdDo6VHJhY2VUb1N0ZGVycih0cnVl
KSk7Ci0gIH0KLQotICBjYWxsX2NoYWluXyA9IEdldERlZmF1bHRFdmVudENoYWluKCk7Ci0gIENy
ZWF0ZUF1ZGlvUHJvY2Vzc29yKCk7Ci0KLSAgSW5pdGlhbGl6ZSgpOwotCi0gIGJvb2wgc2FtcGxl
c19sZWZ0X3RvX3Byb2Nlc3MgPSB0cnVlOwotICBpbnQgY2FsbF9jaGFpbl9pbmRleCA9IDA7Ci0g
IGludCBudW1fZm9yd2FyZF9jaHVua3NfcHJvY2Vzc2VkID0gMDsKLSAgY29uc3QgaW50IGtPbmVC
eWtDaHVua3NQZXJTZWNvbmQgPQotICAgICAgMS5mIC8gQXVkaW9Qcm9jZXNzaW5nU2ltdWxhdG9y
OjprQ2h1bmtzUGVyU2Vjb25kOwotICB3aGlsZSAoc2FtcGxlc19sZWZ0X3RvX3Byb2Nlc3MpIHsK
LSAgICBzd2l0Y2ggKGNhbGxfY2hhaW5fW2NhbGxfY2hhaW5faW5kZXhdKSB7Ci0gICAgICBjYXNl
IFNpbXVsYXRpb25FdmVudFR5cGU6OmtQcm9jZXNzU3RyZWFtOgotICAgICAgICBzYW1wbGVzX2xl
ZnRfdG9fcHJvY2VzcyA9IEhhbmRsZVByb2Nlc3NTdHJlYW1DYWxsKCk7Ci0gICAgICAgICsrbnVt
X2ZvcndhcmRfY2h1bmtzX3Byb2Nlc3NlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIFNp
bXVsYXRpb25FdmVudFR5cGU6OmtQcm9jZXNzUmV2ZXJzZVN0cmVhbToKLSAgICAgICAgaWYgKHNl
dHRpbmdzXy5yZXZlcnNlX2lucHV0X2ZpbGVuYW1lKSB7Ci0gICAgICAgICAgc2FtcGxlc19sZWZ0
X3RvX3Byb2Nlc3MgPSBIYW5kbGVQcm9jZXNzUmV2ZXJzZVN0cmVhbUNhbGwoKTsKLSAgICAgICAg
fQotICAgICAgICBicmVhazsKLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJUQ19DSEVDSyhmYWxz
ZSk7Ci0gICAgfQotCi0gICAgY2FsbF9jaGFpbl9pbmRleCA9IChjYWxsX2NoYWluX2luZGV4ICsg
MSkgJSBjYWxsX2NoYWluXy5zaXplKCk7Ci0KLSAgICBpZiAodHJhY2VfdG9fc3RkZXJyKSB7Ci0g
ICAgICB0cmFjZV90b19zdGRlcnItPlNldFRpbWVTZWNvbmRzKG51bV9mb3J3YXJkX2NodW5rc19w
cm9jZXNzZWQgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrT25lQnlr
Q2h1bmtzUGVyU2Vjb25kKTsKLSAgICB9Ci0gIH0KLQotICBEZXN0cm95QXVkaW9Qcm9jZXNzb3Io
KTsKLX0KLQotYm9vbCBXYXZCYXNlZFNpbXVsYXRvcjo6SGFuZGxlUHJvY2Vzc1N0cmVhbUNhbGwo
KSB7Ci0gIGJvb2wgc2FtcGxlc19sZWZ0X3RvX3Byb2Nlc3MgPSBidWZmZXJfcmVhZGVyXy0+UmVh
ZChpbl9idWZfLmdldCgpKTsKLSAgaWYgKHNhbXBsZXNfbGVmdF90b19wcm9jZXNzKSB7Ci0gICAg
UHJlcGFyZVByb2Nlc3NTdHJlYW1DYWxsKCk7Ci0gICAgUHJvY2Vzc1N0cmVhbShzZXR0aW5nc18u
Zml4ZWRfaW50ZXJmYWNlKTsKLSAgICAvLyBDYWxsIHN0cmVhbSBhbmFsb2cgbGV2ZWwgdG8gZW5z
dXJlIHRoYXQgYW55IHNpZGUtZWZmZWN0cyBhcmUgdHJpZ2dlcmVkLgotICAgICh2b2lkKWFwXy0+
Z2Fpbl9jb250cm9sKCktPnN0cmVhbV9hbmFsb2dfbGV2ZWwoKTsKLSAgICBsYXN0X3NwZWNpZmll
ZF9taWNyb3Bob25lX2xldmVsXyA9Ci0gICAgICAgIGFwXy0+Z2Fpbl9jb250cm9sKCktPnN0cmVh
bV9hbmFsb2dfbGV2ZWwoKTsKLSAgfQotICByZXR1cm4gc2FtcGxlc19sZWZ0X3RvX3Byb2Nlc3M7
Ci19Ci0KLWJvb2wgV2F2QmFzZWRTaW11bGF0b3I6OkhhbmRsZVByb2Nlc3NSZXZlcnNlU3RyZWFt
Q2FsbCgpIHsKLSAgYm9vbCBzYW1wbGVzX2xlZnRfdG9fcHJvY2VzcyA9Ci0gICAgICByZXZlcnNl
X2J1ZmZlcl9yZWFkZXJfLT5SZWFkKHJldmVyc2VfaW5fYnVmXy5nZXQoKSk7Ci0gIGlmIChzYW1w
bGVzX2xlZnRfdG9fcHJvY2VzcykgewotICAgIFByZXBhcmVSZXZlcnNlUHJvY2Vzc1N0cmVhbUNh
bGwoKTsKLSAgICBQcm9jZXNzUmV2ZXJzZVN0cmVhbShzZXR0aW5nc18uZml4ZWRfaW50ZXJmYWNl
KTsKLSAgfQotICByZXR1cm4gc2FtcGxlc19sZWZ0X3RvX3Byb2Nlc3M7Ci19Ci0KLXZvaWQgV2F2
QmFzZWRTaW11bGF0b3I6OkluaXRpYWxpemUoKSB7Ci0gIHN0ZDo6dW5pcXVlX3B0cjxXYXZSZWFk
ZXI+IGluX2ZpbGUoCi0gICAgICBuZXcgV2F2UmVhZGVyKHNldHRpbmdzXy5pbnB1dF9maWxlbmFt
ZS0+Y19zdHIoKSkpOwotICBpbnQgaW5wdXRfc2FtcGxlX3JhdGVfaHogPSBpbl9maWxlLT5zYW1w
bGVfcmF0ZSgpOwotICBpbnQgaW5wdXRfbnVtX2NoYW5uZWxzID0gaW5fZmlsZS0+bnVtX2NoYW5u
ZWxzKCk7Ci0gIGJ1ZmZlcl9yZWFkZXJfLnJlc2V0KG5ldyBDaGFubmVsQnVmZmVyV2F2UmVhZGVy
KHN0ZDo6bW92ZShpbl9maWxlKSkpOwotCi0gIGludCBvdXRwdXRfc2FtcGxlX3JhdGVfaHogPSBz
ZXR0aW5nc18ub3V0cHV0X3NhbXBsZV9yYXRlX2h6Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPyAqc2V0dGluZ3NfLm91dHB1dF9zYW1wbGVfcmF0ZV9oegotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRfc2FtcGxlX3JhdGVfaHo7Ci0gIGludCBvdXRw
dXRfbnVtX2NoYW5uZWxzID0gc2V0dGluZ3NfLm91dHB1dF9udW1fY2hhbm5lbHMKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPyAqc2V0dGluZ3NfLm91dHB1dF9udW1fY2hhbm5lbHMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dF9udW1fY2hhbm5lbHM7Ci0K
LSAgaW50IHJldmVyc2Vfc2FtcGxlX3JhdGVfaHogPSA0ODAwMDsKLSAgaW50IHJldmVyc2VfbnVt
X2NoYW5uZWxzID0gMTsKLSAgaW50IHJldmVyc2Vfb3V0cHV0X3NhbXBsZV9yYXRlX2h6ID0gNDgw
MDA7Ci0gIGludCByZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMgPSAxOwotICBpZiAoc2V0dGlu
Z3NfLnJldmVyc2VfaW5wdXRfZmlsZW5hbWUpIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F2UmVh
ZGVyPiByZXZlcnNlX2luX2ZpbGUoCi0gICAgICAgIG5ldyBXYXZSZWFkZXIoc2V0dGluZ3NfLnJl
dmVyc2VfaW5wdXRfZmlsZW5hbWUtPmNfc3RyKCkpKTsKLSAgICByZXZlcnNlX3NhbXBsZV9yYXRl
X2h6ID0gcmV2ZXJzZV9pbl9maWxlLT5zYW1wbGVfcmF0ZSgpOwotICAgIHJldmVyc2VfbnVtX2No
YW5uZWxzID0gcmV2ZXJzZV9pbl9maWxlLT5udW1fY2hhbm5lbHMoKTsKLSAgICByZXZlcnNlX2J1
ZmZlcl9yZWFkZXJfLnJlc2V0KAotICAgICAgICBuZXcgQ2hhbm5lbEJ1ZmZlcldhdlJlYWRlcihz
dGQ6Om1vdmUocmV2ZXJzZV9pbl9maWxlKSkpOwotCi0gICAgcmV2ZXJzZV9vdXRwdXRfc2FtcGxl
X3JhdGVfaHogPQotICAgICAgICBzZXR0aW5nc18ucmV2ZXJzZV9vdXRwdXRfc2FtcGxlX3JhdGVf
aHoKLSAgICAgICAgICAgID8gKnNldHRpbmdzXy5yZXZlcnNlX291dHB1dF9zYW1wbGVfcmF0ZV9o
egotICAgICAgICAgICAgOiByZXZlcnNlX3NhbXBsZV9yYXRlX2h6OwotICAgIHJldmVyc2Vfb3V0
cHV0X251bV9jaGFubmVscyA9IHNldHRpbmdzXy5yZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAqc2V0dGluZ3NfLnJldmVy
c2Vfb3V0cHV0X251bV9jaGFubmVscwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA6IHJldmVyc2VfbnVtX2NoYW5uZWxzOwotICB9Ci0KLSAgU2V0dXBCdWZmZXJzQ29uZmln
c091dHB1dHMoCi0gICAgICBpbnB1dF9zYW1wbGVfcmF0ZV9oeiwgb3V0cHV0X3NhbXBsZV9yYXRl
X2h6LCByZXZlcnNlX3NhbXBsZV9yYXRlX2h6LAotICAgICAgcmV2ZXJzZV9vdXRwdXRfc2FtcGxl
X3JhdGVfaHosIGlucHV0X251bV9jaGFubmVscywgb3V0cHV0X251bV9jaGFubmVscywKLSAgICAg
IHJldmVyc2VfbnVtX2NoYW5uZWxzLCByZXZlcnNlX291dHB1dF9udW1fY2hhbm5lbHMpOwotfQot
Ci19ICAvLyBuYW1lc3BhY2UgdGVzdAotfSAgLy8gbmFtZXNwYWNlIHdlYnJ0YwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9j
ZXNzaW5nL3Rlc3Qvd2F2X2Jhc2VkX3NpbXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2lu
Zy90ZXN0L3dhdl9iYXNlZF9zaW11bGF0b3IuaAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNz
aW5nL3Rlc3Qvd2F2X2Jhc2VkX3NpbXVsYXRvci5oCShub25leGlzdGVudCkKQEAgLTEsNTQgKzAs
MCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTYgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhv
cnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2Rl
IGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVl
LiBBbiBhZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJl
IGZvdW5kCi0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVj
dCBhdXRob3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJv
b3Qgb2YgdGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpZm5kZWYgV0VCUlRDX01PRFVMRVNfQVVE
SU9fUFJPQ0VTU0lOR19URVNUX1dBVl9CQVNFRF9TSU1VTEFUT1JfSF8KLSNkZWZpbmUgV0VCUlRD
X01PRFVMRVNfQVVESU9fUFJPQ0VTU0lOR19URVNUX1dBVl9CQVNFRF9TSU1VTEFUT1JfSF8KLQot
I2luY2x1ZGUgPHZlY3Rvcj4KLQotI2luY2x1ZGUgIndlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nl
c3NpbmcvdGVzdC9hdWRpb19wcm9jZXNzaW5nX3NpbXVsYXRvci5oIgotCi0jaW5jbHVkZSAid2Vi
cnRjL2Jhc2UvY29uc3RydWN0b3JtYWdpYy5oIgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLW5hbWVz
cGFjZSB0ZXN0IHsKLQotLy8gVXNlZCB0byBwZXJmb3JtIGFuIGF1ZGlvIHByb2Nlc3Npbmcgc2lt
dWxhdGlvbiBmcm9tIHdhdiBmaWxlcy4KLWNsYXNzIFdhdkJhc2VkU2ltdWxhdG9yIGZpbmFsIDog
cHVibGljIEF1ZGlvUHJvY2Vzc2luZ1NpbXVsYXRvciB7Ci0gcHVibGljOgotICBleHBsaWNpdCBX
YXZCYXNlZFNpbXVsYXRvcihjb25zdCBTaW11bGF0aW9uU2V0dGluZ3MmIHNldHRpbmdzKTsKLSAg
fldhdkJhc2VkU2ltdWxhdG9yKCkgb3ZlcnJpZGU7Ci0KLSAgLy8gUHJvY2Vzc2VzIHRoZSBXQVYg
aW5wdXQuCi0gIHZvaWQgUHJvY2VzcygpIG92ZXJyaWRlOwotCi0gcHJpdmF0ZToKLSAgZW51bSBT
aW11bGF0aW9uRXZlbnRUeXBlIHsKLSAgICBrUHJvY2Vzc1N0cmVhbSwKLSAgICBrUHJvY2Vzc1Jl
dmVyc2VTdHJlYW0sCi0gIH07Ci0KLSAgdm9pZCBJbml0aWFsaXplKCk7Ci0gIGJvb2wgSGFuZGxl
UHJvY2Vzc1N0cmVhbUNhbGwoKTsKLSAgYm9vbCBIYW5kbGVQcm9jZXNzUmV2ZXJzZVN0cmVhbUNh
bGwoKTsKLSAgdm9pZCBQcmVwYXJlUHJvY2Vzc1N0cmVhbUNhbGwoKTsKLSAgdm9pZCBQcmVwYXJl
UmV2ZXJzZVByb2Nlc3NTdHJlYW1DYWxsKCk7Ci0gIHN0ZDo6dmVjdG9yPFNpbXVsYXRpb25FdmVu
dFR5cGU+IEdldERlZmF1bHRFdmVudENoYWluKCkgY29uc3Q7Ci0KLSAgc3RkOjp2ZWN0b3I8U2lt
dWxhdGlvbkV2ZW50VHlwZT4gY2FsbF9jaGFpbl87Ci0gIGludCBsYXN0X3NwZWNpZmllZF9taWNy
b3Bob25lX2xldmVsXyA9IDEwMDsKLQotICBSVENfRElTQUxMT1dfSU1QTElDSVRfQ09OU1RSVUNU
T1JTKFdhdkJhc2VkU2ltdWxhdG9yKTsKLX07Ci0KLX0gIC8vIG5hbWVzcGFjZSB0ZXN0Ci19ICAv
LyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfQVVESU9fUFJP
Q0VTU0lOR19URVNUX1dBVl9CQVNFRF9TSU1VTEFUT1JfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0
L2FuZHJvaWQvYXBtdGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vz
c2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCShyZXZpc2lvbiAy
MTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvQW5kcm9pZE1hbmlmZXN0
LnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIg
ZW5jb2Rpbmc9InV0Zi04Ij8+Ci08IS0tIEJFR0lOX0lOQ0xVREUobWFuaWZlc3QpIC0tPgotPG1h
bmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMv
YW5kcm9pZCIKLSAgICAgICAgcGFja2FnZT0iY29tLmV4YW1wbGUubmF0aXZlX2FjdGl2aXR5Igot
ICAgICAgICBhbmRyb2lkOnZlcnNpb25Db2RlPSIxIgotICAgICAgICBhbmRyb2lkOnZlcnNpb25O
YW1lPSIxLjAiPgotCi0gICAgPCEtLSBUaGlzIGlzIHRoZSBwbGF0Zm9ybSBBUEkgd2hlcmUgTmF0
aXZlQWN0aXZpdHkgd2FzIGludHJvZHVjZWQuIC0tPgotICAgIDx1c2VzLXNkayBhbmRyb2lkOm1p
blNka1ZlcnNpb249IjgiIC8+Ci0KLSAgICA8IS0tIFRoaXMgLmFwayBoYXMgbm8gSmF2YSBjb2Rl
IGl0c2VsZiwgc28gc2V0IGhhc0NvZGUgdG8gZmFsc2UuIC0tPgotICAgIDxhcHBsaWNhdGlvbiBh
bmRyb2lkOmxhYmVsPSJAc3RyaW5nL2FwcF9uYW1lIiBhbmRyb2lkOmhhc0NvZGU9ImZhbHNlIiBh
bmRyb2lkOmRlYnVnZ2FibGU9InRydWUiPgotCi0gICAgICAgIDwhLS0gT3VyIGFjdGl2aXR5IGlz
IHRoZSBidWlsdC1pbiBOYXRpdmVBY3Rpdml0eSBmcmFtZXdvcmsgY2xhc3MuCi0gICAgICAgICAg
ICAgVGhpcyB3aWxsIHRha2UgY2FyZSBvZiBpbnRlZ3JhdGluZyB3aXRoIG91ciBOREsgY29kZS4g
LS0+Ci0gICAgICAgIDxhY3Rpdml0eSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuYXBwLk5hdGl2ZUFj
dGl2aXR5IgotICAgICAgICAgICAgICAgIGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUi
Ci0gICAgICAgICAgICAgICAgYW5kcm9pZDpjb25maWdDaGFuZ2VzPSJvcmllbnRhdGlvbnxrZXli
b2FyZEhpZGRlbiI+Ci0gICAgICAgICAgICA8IS0tIFRlbGwgTmF0aXZlQWN0aXZpdHkgdGhlIG5h
bWUgb2Ygb3IgLnNvIC0tPgotICAgICAgICAgICAgPG1ldGEtZGF0YSBhbmRyb2lkOm5hbWU9ImFu
ZHJvaWQuYXBwLmxpYl9uYW1lIgotICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnZhbHVlPSJh
cG10ZXN0LWFjdGl2aXR5IiAvPgotICAgICAgICAgICAgPGludGVudC1maWx0ZXI+Ci0gICAgICAg
ICAgICAgICAgPGFjdGlvbiBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50ZW50LmFjdGlvbi5NQUlO
IiAvPgotICAgICAgICAgICAgICAgIDxjYXRlZ29yeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQuaW50
ZW50LmNhdGVnb3J5LkxBVU5DSEVSIiAvPgotICAgICAgICAgICAgPC9pbnRlbnQtZmlsdGVyPgot
ICAgICAgICA8L2FjdGl2aXR5PgotICAgIDwvYXBwbGljYXRpb24+Ci0KLTwvbWFuaWZlc3Q+IAot
PCEtLSBFTkRfSU5DTFVERShtYW5pZmVzdCkgLS0+CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRy
b2lkL2FwbXRlc3QvZGVmYXVsdC5wcm9wZXJ0aWVzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90
ZXN0L2FuZHJvaWQvYXBtdGVzdC9kZWZhdWx0LnByb3BlcnRpZXMJKHJldmlzaW9uIDIxMjI3MykK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVk
aW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9kZWZhdWx0LnByb3BlcnRpZXMJKG5v
bmV4aXN0ZW50KQpAQCAtMSwxMSArMCwwIEBACi0jIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCBieSBBbmRyb2lkIFRvb2xzLgotIyBEbyBub3QgbW9kaWZ5IHRoaXMgZmlsZSAt
LSBZT1VSIENIQU5HRVMgV0lMTCBCRSBFUkFTRUQhCi0jIAotIyBUaGlzIGZpbGUgbXVzdCBiZSBj
aGVja2VkIGluIFZlcnNpb24gQ29udHJvbCBTeXN0ZW1zLgotIyAKLSMgVG8gY3VzdG9taXplIHBy
b3BlcnRpZXMgdXNlZCBieSB0aGUgQW50IGJ1aWxkIHN5c3RlbSB1c2UsCi0jICJidWlsZC5wcm9w
ZXJ0aWVzIiwgYW5kIG92ZXJyaWRlIHZhbHVlcyB0byBhZGFwdCB0aGUgc2NyaXB0IHRvIHlvdXIK
LSMgcHJvamVjdCBzdHJ1Y3R1cmUuCi0KLSMgUHJvamVjdCB0YXJnZXQuCi10YXJnZXQ9YW5kcm9p
ZC05CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3Qvam5pL21haW4uYwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1
bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3Qvam5pL21haW4uYwkocmV2
aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJy
dGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2puaS9tYWlu
LmMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5k
ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5
b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp
Y2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0g
KiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAq
IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu
Zywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1
dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU
SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUg
TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh
bmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotCi0vL0JFR0lO
X0lOQ0xVREUoYWxsKQotI2luY2x1ZGUgPGpuaS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNp
bmNsdWRlIDxFR0wvZWdsLmg+Ci0jaW5jbHVkZSA8R0xFUy9nbC5oPgotCi0jaW5jbHVkZSA8YW5k
cm9pZC9zZW5zb3IuaD4KLSNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgotI2luY2x1ZGUgPGFuZHJv
aWRfbmF0aXZlX2FwcF9nbHVlLmg+Ci0KLSNkZWZpbmUgTE9HSSguLi4pICgodm9pZClfX2FuZHJv
aWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8sICJuYXRpdmUtYWN0aXZpdHkiLCBfX1ZBX0FS
R1NfXykpCi0jZGVmaW5lIExPR1coLi4uKSAoKHZvaWQpX19hbmRyb2lkX2xvZ19wcmludChBTkRS
T0lEX0xPR19XQVJOLCAibmF0aXZlLWFjdGl2aXR5IiwgX19WQV9BUkdTX18pKQotCi0vKioKLSAq
IE91ciBzYXZlZCBzdGF0ZSBkYXRhLgotICovCi1zdHJ1Y3Qgc2F2ZWRfc3RhdGUgewotICAgIGZs
b2F0IGFuZ2xlOwotICAgIGludDMyX3QgeDsKLSAgICBpbnQzMl90IHk7Ci19OwotCi0vKioKLSAq
IFNoYXJlZCBzdGF0ZSBmb3Igb3VyIGFwcC4KLSAqLwotc3RydWN0IGVuZ2luZSB7Ci0gICAgc3Ry
dWN0IGFuZHJvaWRfYXBwKiBhcHA7Ci0KLSAgICBBU2Vuc29yTWFuYWdlciogc2Vuc29yTWFuYWdl
cjsKLSAgICBjb25zdCBBU2Vuc29yKiBhY2NlbGVyb21ldGVyU2Vuc29yOwotICAgIEFTZW5zb3JF
dmVudFF1ZXVlKiBzZW5zb3JFdmVudFF1ZXVlOwotCi0gICAgaW50IGFuaW1hdGluZzsKLSAgICBF
R0xEaXNwbGF5IGRpc3BsYXk7Ci0gICAgRUdMU3VyZmFjZSBzdXJmYWNlOwotICAgIEVHTENvbnRl
eHQgY29udGV4dDsKLSAgICBpbnQzMl90IHdpZHRoOwotICAgIGludDMyX3QgaGVpZ2h0OwotICAg
IHN0cnVjdCBzYXZlZF9zdGF0ZSBzdGF0ZTsKLX07Ci0KLS8qKgotICogSW5pdGlhbGl6ZSBhbiBF
R0wgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgZGlzcGxheS4KLSAqLwotc3RhdGljIGludCBlbmdp
bmVfaW5pdF9kaXNwbGF5KHN0cnVjdCBlbmdpbmUqIGVuZ2luZSkgewotICAgIC8vIGluaXRpYWxp
emUgT3BlbkdMIEVTIGFuZCBFR0wKLQotICAgIC8qCi0gICAgICogSGVyZSBzcGVjaWZ5IHRoZSBh
dHRyaWJ1dGVzIG9mIHRoZSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24uCi0gICAgICogQmVsb3csIHdl
IHNlbGVjdCBhbiBFR0xDb25maWcgd2l0aCBhdCBsZWFzdCA4IGJpdHMgcGVyIGNvbG9yCi0gICAg
ICogY29tcG9uZW50IGNvbXBhdGlibGUgd2l0aCBvbi1zY3JlZW4gd2luZG93cwotICAgICAqLwot
ICAgIGNvbnN0IEVHTGludCBhdHRyaWJzW10gPSB7Ci0gICAgICAgICAgICBFR0xfU1VSRkFDRV9U
WVBFLCBFR0xfV0lORE9XX0JJVCwKLSAgICAgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAg
ICAgICAgICBFR0xfR1JFRU5fU0laRSwgOCwKLSAgICAgICAgICAgIEVHTF9SRURfU0laRSwgOCwK
LSAgICAgICAgICAgIEVHTF9OT05FCi0gICAgfTsKLSAgICBFR0xpbnQgdywgaCwgZHVtbXksIGZv
cm1hdDsKLSAgICBFR0xpbnQgbnVtQ29uZmlnczsKLSAgICBFR0xDb25maWcgY29uZmlnOwotICAg
IEVHTFN1cmZhY2Ugc3VyZmFjZTsKLSAgICBFR0xDb250ZXh0IGNvbnRleHQ7Ci0KLSAgICBFR0xE
aXNwbGF5IGRpc3BsYXkgPSBlZ2xHZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotCi0g
ICAgZWdsSW5pdGlhbGl6ZShkaXNwbGF5LCAwLCAwKTsKLQotICAgIC8qIEhlcmUsIHRoZSBhcHBs
aWNhdGlvbiBjaG9vc2VzIHRoZSBjb25maWd1cmF0aW9uIGl0IGRlc2lyZXMuIEluIHRoaXMKLSAg
ICAgKiBzYW1wbGUsIHdlIGhhdmUgYSB2ZXJ5IHNpbXBsaWZpZWQgc2VsZWN0aW9uIHByb2Nlc3Ms
IHdoZXJlIHdlIHBpY2sKLSAgICAgKiB0aGUgZmlyc3QgRUdMQ29uZmlnIHRoYXQgbWF0Y2hlcyBv
dXIgY3JpdGVyaWEgKi8KLSAgICBlZ2xDaG9vc2VDb25maWcoZGlzcGxheSwgYXR0cmlicywgJmNv
bmZpZywgMSwgJm51bUNvbmZpZ3MpOwotCi0gICAgLyogRUdMX05BVElWRV9WSVNVQUxfSUQgaXMg
YW4gYXR0cmlidXRlIG9mIHRoZSBFR0xDb25maWcgdGhhdCBpcwotICAgICAqIGd1YXJhbnRlZWQg
dG8gYmUgYWNjZXB0ZWQgYnkgQU5hdGl2ZVdpbmRvd19zZXRCdWZmZXJzR2VvbWV0cnkoKS4KLSAg
ICAgKiBBcyBzb29uIGFzIHdlIHBpY2tlZCBhIEVHTENvbmZpZywgd2UgY2FuIHNhZmVseSByZWNv
bmZpZ3VyZSB0aGUKLSAgICAgKiBBTmF0aXZlV2luZG93IGJ1ZmZlcnMgdG8gbWF0Y2gsIHVzaW5n
IEVHTF9OQVRJVkVfVklTVUFMX0lELiAqLwotICAgIGVnbEdldENvbmZpZ0F0dHJpYihkaXNwbGF5
LCBjb25maWcsIEVHTF9OQVRJVkVfVklTVUFMX0lELCAmZm9ybWF0KTsKLQotICAgIEFOYXRpdmVX
aW5kb3dfc2V0QnVmZmVyc0dlb21ldHJ5KGVuZ2luZS0+YXBwLT53aW5kb3csIDAsIDAsIGZvcm1h
dCk7Ci0KLSAgICBzdXJmYWNlID0gZWdsQ3JlYXRlV2luZG93U3VyZmFjZShkaXNwbGF5LCBjb25m
aWcsIGVuZ2luZS0+YXBwLT53aW5kb3csIE5VTEwpOwotICAgIGNvbnRleHQgPSBlZ2xDcmVhdGVD
b250ZXh0KGRpc3BsYXksIGNvbmZpZywgTlVMTCwgTlVMTCk7Ci0KLSAgICBpZiAoZWdsTWFrZUN1
cnJlbnQoZGlzcGxheSwgc3VyZmFjZSwgc3VyZmFjZSwgY29udGV4dCkgPT0gRUdMX0ZBTFNFKSB7
Ci0gICAgICAgIExPR1coIlVuYWJsZSB0byBlZ2xNYWtlQ3VycmVudCIpOwotICAgICAgICByZXR1
cm4gLTE7Ci0gICAgfQotCi0gICAgZWdsUXVlcnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVH
TF9XSURUSCwgJncpOwotICAgIGVnbFF1ZXJ5U3VyZmFjZShkaXNwbGF5LCBzdXJmYWNlLCBFR0xf
SEVJR0hULCAmaCk7Ci0KLSAgICBlbmdpbmUtPmRpc3BsYXkgPSBkaXNwbGF5OwotICAgIGVuZ2lu
ZS0+Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgZW5naW5lLT5zdXJmYWNlID0gc3VyZmFjZTsKLSAg
ICBlbmdpbmUtPndpZHRoID0gdzsKLSAgICBlbmdpbmUtPmhlaWdodCA9IGg7Ci0gICAgZW5naW5l
LT5zdGF0ZS5hbmdsZSA9IDA7Ci0KLSAgICAvLyBJbml0aWFsaXplIEdMIHN0YXRlLgotICAgIGds
SGludChHTF9QRVJTUEVDVElWRV9DT1JSRUNUSU9OX0hJTlQsIEdMX0ZBU1RFU1QpOwotICAgIGds
RW5hYmxlKEdMX0NVTExfRkFDRSk7Ci0gICAgZ2xTaGFkZU1vZGVsKEdMX1NNT09USCk7Ci0gICAg
Z2xEaXNhYmxlKEdMX0RFUFRIX1RFU1QpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICog
SnVzdCB0aGUgY3VycmVudCBmcmFtZSBpbiB0aGUgZGlzcGxheS4KLSAqLwotc3RhdGljIHZvaWQg
ZW5naW5lX2RyYXdfZnJhbWUoc3RydWN0IGVuZ2luZSogZW5naW5lKSB7Ci0gICAgaWYgKGVuZ2lu
ZS0+ZGlzcGxheSA9PSBOVUxMKSB7Ci0gICAgICAgIC8vIE5vIGRpc3BsYXkuCi0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBKdXN0IGZpbGwgdGhlIHNjcmVlbiB3aXRoIGEgY29sb3Iu
Ci0gICAgZ2xDbGVhckNvbG9yKCgoZmxvYXQpZW5naW5lLT5zdGF0ZS54KS9lbmdpbmUtPndpZHRo
LCBlbmdpbmUtPnN0YXRlLmFuZ2xlLAotICAgICAgICAgICAgKChmbG9hdCllbmdpbmUtPnN0YXRl
LnkpL2VuZ2luZS0+aGVpZ2h0LCAxKTsKLSAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQp
OwotCi0gICAgZWdsU3dhcEJ1ZmZlcnMoZW5naW5lLT5kaXNwbGF5LCBlbmdpbmUtPnN1cmZhY2Up
OwotfQotCi0vKioKLSAqIFRlYXIgZG93biB0aGUgRUdMIGNvbnRleHQgY3VycmVudGx5IGFzc29j
aWF0ZWQgd2l0aCB0aGUgZGlzcGxheS4KLSAqLwotc3RhdGljIHZvaWQgZW5naW5lX3Rlcm1fZGlz
cGxheShzdHJ1Y3QgZW5naW5lKiBlbmdpbmUpIHsKLSAgICBpZiAoZW5naW5lLT5kaXNwbGF5ICE9
IEVHTF9OT19ESVNQTEFZKSB7Ci0gICAgICAgIGVnbE1ha2VDdXJyZW50KGVuZ2luZS0+ZGlzcGxh
eSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAg
ICAgIGlmIChlbmdpbmUtPmNvbnRleHQgIT0gRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgICAgICAg
IGVnbERlc3Ryb3lDb250ZXh0KGVuZ2luZS0+ZGlzcGxheSwgZW5naW5lLT5jb250ZXh0KTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoZW5naW5lLT5zdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKSB7
Ci0gICAgICAgICAgICBlZ2xEZXN0cm95U3VyZmFjZShlbmdpbmUtPmRpc3BsYXksIGVuZ2luZS0+
c3VyZmFjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgZWdsVGVybWluYXRlKGVuZ2luZS0+ZGlzcGxh
eSk7Ci0gICAgfQotICAgIGVuZ2luZS0+YW5pbWF0aW5nID0gMDsKLSAgICBlbmdpbmUtPmRpc3Bs
YXkgPSBFR0xfTk9fRElTUExBWTsKLSAgICBlbmdpbmUtPmNvbnRleHQgPSBFR0xfTk9fQ09OVEVY
VDsKLSAgICBlbmdpbmUtPnN1cmZhY2UgPSBFR0xfTk9fU1VSRkFDRTsKLX0KLQotLyoqCi0gKiBQ
cm9jZXNzIHRoZSBuZXh0IGlucHV0IGV2ZW50LgotICovCi1zdGF0aWMgaW50MzJfdCBlbmdpbmVf
aGFuZGxlX2lucHV0KHN0cnVjdCBhbmRyb2lkX2FwcCogYXBwLCBBSW5wdXRFdmVudCogZXZlbnQp
IHsKLSAgICBzdHJ1Y3QgZW5naW5lKiBlbmdpbmUgPSAoc3RydWN0IGVuZ2luZSopYXBwLT51c2Vy
RGF0YTsKLSAgICBpZiAoQUlucHV0RXZlbnRfZ2V0VHlwZShldmVudCkgPT0gQUlOUFVUX0VWRU5U
X1RZUEVfTU9USU9OKSB7Ci0gICAgICAgIGVuZ2luZS0+YW5pbWF0aW5nID0gMTsKLSAgICAgICAg
ZW5naW5lLT5zdGF0ZS54ID0gQU1vdGlvbkV2ZW50X2dldFgoZXZlbnQsIDApOwotICAgICAgICBl
bmdpbmUtPnN0YXRlLnkgPSBBTW90aW9uRXZlbnRfZ2V0WShldmVudCwgMCk7Ci0gICAgICAgIHJl
dHVybiAxOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBQcm9jZXNzIHRoZSBu
ZXh0IG1haW4gY29tbWFuZC4KLSAqLwotc3RhdGljIHZvaWQgZW5naW5lX2hhbmRsZV9jbWQoc3Ry
dWN0IGFuZHJvaWRfYXBwKiBhcHAsIGludDMyX3QgY21kKSB7Ci0gICAgc3RydWN0IGVuZ2luZSog
ZW5naW5lID0gKHN0cnVjdCBlbmdpbmUqKWFwcC0+dXNlckRhdGE7Ci0gICAgc3dpdGNoIChjbWQp
IHsKLSAgICAgICAgY2FzZSBBUFBfQ01EX1NBVkVfU1RBVEU6Ci0gICAgICAgICAgICAvLyBUaGUg
c3lzdGVtIGhhcyBhc2tlZCB1cyB0byBzYXZlIG91ciBjdXJyZW50IHN0YXRlLiAgRG8gc28uCi0g
ICAgICAgICAgICBlbmdpbmUtPmFwcC0+c2F2ZWRTdGF0ZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0
IHNhdmVkX3N0YXRlKSk7Ci0gICAgICAgICAgICAqKChzdHJ1Y3Qgc2F2ZWRfc3RhdGUqKWVuZ2lu
ZS0+YXBwLT5zYXZlZFN0YXRlKSA9IGVuZ2luZS0+c3RhdGU7Ci0gICAgICAgICAgICBlbmdpbmUt
PmFwcC0+c2F2ZWRTdGF0ZVNpemUgPSBzaXplb2Yoc3RydWN0IHNhdmVkX3N0YXRlKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFQUF9DTURfSU5JVF9XSU5ET1c6Ci0gICAgICAg
ICAgICAvLyBUaGUgd2luZG93IGlzIGJlaW5nIHNob3duLCBnZXQgaXQgcmVhZHkuCi0gICAgICAg
ICAgICBpZiAoZW5naW5lLT5hcHAtPndpbmRvdyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAg
ZW5naW5lX2luaXRfZGlzcGxheShlbmdpbmUpOwotICAgICAgICAgICAgICAgIGVuZ2luZV9kcmF3
X2ZyYW1lKGVuZ2luZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBUFBfQ01EX1RFUk1fV0lORE9XOgotICAgICAgICAgICAgLy8gVGhlIHdpbmRvdyBp
cyBiZWluZyBoaWRkZW4gb3IgY2xvc2VkLCBjbGVhbiBpdCB1cC4KLSAgICAgICAgICAgIGVuZ2lu
ZV90ZXJtX2Rpc3BsYXkoZW5naW5lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFQUF9DTURfR0FJTkVEX0ZPQ1VTOgotICAgICAgICAgICAgLy8gV2hlbiBvdXIgYXBwIGdhaW5z
IGZvY3VzLCB3ZSBzdGFydCBtb25pdG9yaW5nIHRoZSBhY2NlbGVyb21ldGVyLgotICAgICAgICAg
ICAgaWYgKGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNvciAhPSBOVUxMKSB7Ci0gICAgICAgICAg
ICAgICAgQVNlbnNvckV2ZW50UXVldWVfZW5hYmxlU2Vuc29yKGVuZ2luZS0+c2Vuc29yRXZlbnRR
dWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNv
cik7Ci0gICAgICAgICAgICAgICAgLy8gV2UnZCBsaWtlIHRvIGdldCA2MCBldmVudHMgcGVyIHNl
Y29uZCAoaW4gdXMpLgotICAgICAgICAgICAgICAgIEFTZW5zb3JFdmVudFF1ZXVlX3NldEV2ZW50
UmF0ZShlbmdpbmUtPnNlbnNvckV2ZW50UXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBl
bmdpbmUtPmFjY2VsZXJvbWV0ZXJTZW5zb3IsICgxMDAwTC82MCkqMTAwMCk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBUFBfQ01EX0xPU1RfRk9DVVM6
Ci0gICAgICAgICAgICAvLyBXaGVuIG91ciBhcHAgbG9zZXMgZm9jdXMsIHdlIHN0b3AgbW9uaXRv
cmluZyB0aGUgYWNjZWxlcm9tZXRlci4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQg
Y29uc3VtaW5nIGJhdHRlcnkgd2hpbGUgbm90IGJlaW5nIHVzZWQuCi0gICAgICAgICAgICBpZiAo
ZW5naW5lLT5hY2NlbGVyb21ldGVyU2Vuc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBB
U2Vuc29yRXZlbnRRdWV1ZV9kaXNhYmxlU2Vuc29yKGVuZ2luZS0+c2Vuc29yRXZlbnRRdWV1ZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNvcik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBBbHNvIHN0b3AgYW5pbWF0aW5nLgotICAgICAg
ICAgICAgZW5naW5lLT5hbmltYXRpbmcgPSAwOwotICAgICAgICAgICAgZW5naW5lX2RyYXdfZnJh
bWUoZW5naW5lKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotLyoqCi0gKiBUaGlz
IGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IG9mIGEgbmF0aXZlIGFwcGxpY2F0aW9uIHRoYXQgaXMg
dXNpbmcKLSAqIGFuZHJvaWRfbmF0aXZlX2FwcF9nbHVlLiAgSXQgcnVucyBpbiBpdHMgb3duIHRo
cmVhZCwgd2l0aCBpdHMgb3duCi0gKiBldmVudCBsb29wIGZvciByZWNlaXZpbmcgaW5wdXQgZXZl
bnRzIGFuZCBkb2luZyBvdGhlciB0aGluZ3MuCi0gKi8KLXZvaWQgYW5kcm9pZF9tYWluKHN0cnVj
dCBhbmRyb2lkX2FwcCogc3RhdGUpIHsKLSAgICBzdHJ1Y3QgZW5naW5lIGVuZ2luZTsKLQotICAg
IC8vIE1ha2Ugc3VyZSBnbHVlIGlzbid0IHN0cmlwcGVkLgotICAgIGFwcF9kdW1teSgpOwotCi0g
ICAgbWVtc2V0KCZlbmdpbmUsIDAsIHNpemVvZihlbmdpbmUpKTsKLSAgICBzdGF0ZS0+dXNlckRh
dGEgPSAmZW5naW5lOwotICAgIHN0YXRlLT5vbkFwcENtZCA9IGVuZ2luZV9oYW5kbGVfY21kOwot
ICAgIHN0YXRlLT5vbklucHV0RXZlbnQgPSBlbmdpbmVfaGFuZGxlX2lucHV0OwotICAgIGVuZ2lu
ZS5hcHAgPSBzdGF0ZTsKLQotICAgIC8vIFByZXBhcmUgdG8gbW9uaXRvciBhY2NlbGVyb21ldGVy
Ci0gICAgZW5naW5lLnNlbnNvck1hbmFnZXIgPSBBU2Vuc29yTWFuYWdlcl9nZXRJbnN0YW5jZSgp
OwotICAgIGVuZ2luZS5hY2NlbGVyb21ldGVyU2Vuc29yID0gQVNlbnNvck1hbmFnZXJfZ2V0RGVm
YXVsdFNlbnNvcihlbmdpbmUuc2Vuc29yTWFuYWdlciwKLSAgICAgICAgICAgIEFTRU5TT1JfVFlQ
RV9BQ0NFTEVST01FVEVSKTsKLSAgICBlbmdpbmUuc2Vuc29yRXZlbnRRdWV1ZSA9IEFTZW5zb3JN
YW5hZ2VyX2NyZWF0ZUV2ZW50UXVldWUoZW5naW5lLnNlbnNvck1hbmFnZXIsCi0gICAgICAgICAg
ICBzdGF0ZS0+bG9vcGVyLCBMT09QRVJfSURfVVNFUiwgTlVMTCwgTlVMTCk7Ci0KLSAgICBpZiAo
c3RhdGUtPnNhdmVkU3RhdGUgIT0gTlVMTCkgewotICAgICAgICAvLyBXZSBhcmUgc3RhcnRpbmcg
d2l0aCBhIHByZXZpb3VzIHNhdmVkIHN0YXRlOyByZXN0b3JlIGZyb20gaXQuCi0gICAgICAgIGVu
Z2luZS5zdGF0ZSA9ICooc3RydWN0IHNhdmVkX3N0YXRlKilzdGF0ZS0+c2F2ZWRTdGF0ZTsKLSAg
ICB9Ci0KLSAgICAvLyBsb29wIHdhaXRpbmcgZm9yIHN0dWZmIHRvIGRvLgotCi0gICAgd2hpbGUg
KDEpIHsKLSAgICAgICAgLy8gUmVhZCBhbGwgcGVuZGluZyBldmVudHMuCi0gICAgICAgIGludCBp
ZGVudDsKLSAgICAgICAgaW50IGV2ZW50czsKLSAgICAgICAgc3RydWN0IGFuZHJvaWRfcG9sbF9z
b3VyY2UqIHNvdXJjZTsKLQotICAgICAgICAvLyBJZiBub3QgYW5pbWF0aW5nLCB3ZSB3aWxsIGJs
b2NrIGZvcmV2ZXIgd2FpdGluZyBmb3IgZXZlbnRzLgotICAgICAgICAvLyBJZiBhbmltYXRpbmcs
IHdlIGxvb3AgdW50aWwgYWxsIGV2ZW50cyBhcmUgcmVhZCwgdGhlbiBjb250aW51ZQotICAgICAg
ICAvLyB0byBkcmF3IHRoZSBuZXh0IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICAgICAgd2hpbGUg
KChpZGVudD1BTG9vcGVyX3BvbGxBbGwoZW5naW5lLmFuaW1hdGluZyA/IDAgOiAtMSwgTlVMTCwg
JmV2ZW50cywKLSAgICAgICAgICAgICAgICAodm9pZCoqKSZzb3VyY2UpKSA+PSAwKSB7Ci0KLSAg
ICAgICAgICAgIC8vIFByb2Nlc3MgdGhpcyBldmVudC4KLSAgICAgICAgICAgIGlmIChzb3VyY2Ug
IT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNvdXJjZS0+cHJvY2VzcyhzdGF0ZSwgc291cmNl
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWYgYSBzZW5zb3IgaGFzIGRhdGEs
IHByb2Nlc3MgaXQgbm93LgotICAgICAgICAgICAgaWYgKGlkZW50ID09IExPT1BFUl9JRF9VU0VS
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGVuZ2luZS5hY2NlbGVyb21ldGVyU2Vuc29yICE9IE5V
TEwpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNlbnNvckV2ZW50IGV2ZW50OwotICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAoQVNlbnNvckV2ZW50UXVldWVfZ2V0RXZlbnRzKGVuZ2luZS5zZW5z
b3JFdmVudFF1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudCwgMSkgPiAw
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMT0dJKCJhY2NlbGVyb21ldGVyOiB4PSVmIHk9
JWYgej0lZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmFjY2VsZXJh
dGlvbi54LCBldmVudC5hY2NlbGVyYXRpb24ueSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXZlbnQuYWNjZWxlcmF0aW9uLnopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3
ZSBhcmUgZXhpdGluZy4KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+ZGVzdHJveVJlcXVlc3RlZCAh
PSAwKSB7Ci0gICAgICAgICAgICAgICAgZW5naW5lX3Rlcm1fZGlzcGxheSgmZW5naW5lKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAoZW5naW5lLmFuaW1hdGluZykgewotICAgICAgICAgICAgLy8gRG9uZSB3aXRoIGV2ZW50
czsgZHJhdyBuZXh0IGFuaW1hdGlvbiBmcmFtZS4KLSAgICAgICAgICAgIGVuZ2luZS5zdGF0ZS5h
bmdsZSArPSAuMDFmOwotICAgICAgICAgICAgaWYgKGVuZ2luZS5zdGF0ZS5hbmdsZSA+IDEpIHsK
LSAgICAgICAgICAgICAgICBlbmdpbmUuc3RhdGUuYW5nbGUgPSAwOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAvLyBEcmF3aW5nIGlzIHRocm90dGxlZCB0byB0aGUgc2NyZWVuIHVwZGF0
ZSByYXRlLCBzbyB0aGVyZQotICAgICAgICAgICAgLy8gaXMgbm8gbmVlZCB0byBkbyB0aW1pbmcg
aGVyZS4KLSAgICAgICAgICAgIGVuZ2luZV9kcmF3X2ZyYW1lKCZlbmdpbmUpOwotICAgICAgICB9
Ci0gICAgfQotfQotLy9FTkRfSU5DTFVERShhbGwpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRy
b2lkL2FwbXRlc3QvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Np
bmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAkocmV2aXNpb24g
MjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9k
dWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L3Jlcy92YWx1ZXMvc3Ry
aW5ncy54bWwJKG5vbmV4aXN0ZW50KQpAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEu
MCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08cmVzb3VyY2VzPgotICAgIDxzdHJpbmcgbmFtZT0iYXBw
X25hbWUiPmFwbXRlc3Q8L3N0cmluZz4KLTwvcmVzb3VyY2VzPgpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rl
c3QvYW5kcm9pZC9hcG10ZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9j
ZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwJKHJldmlzaW9u
IDIxMjI3MykKKysrIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9BbmRyb2lkTWFuaWZl
c3QueG1sCShub25leGlzdGVudCkKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4w
IiBlbmNvZGluZz0idXRmLTgiPz4KLTwhLS0gQkVHSU5fSU5DTFVERShtYW5pZmVzdCkgLS0+Ci08
bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jl
cy9hbmRyb2lkIgotICAgICAgICBwYWNrYWdlPSJjb20uZXhhbXBsZS5uYXRpdmVfYWN0aXZpdHki
Ci0gICAgICAgIGFuZHJvaWQ6dmVyc2lvbkNvZGU9IjEiCi0gICAgICAgIGFuZHJvaWQ6dmVyc2lv
bk5hbWU9IjEuMCI+Ci0KLSAgICA8IS0tIFRoaXMgaXMgdGhlIHBsYXRmb3JtIEFQSSB3aGVyZSBO
YXRpdmVBY3Rpdml0eSB3YXMgaW50cm9kdWNlZC4gLS0+Ci0gICAgPHVzZXMtc2RrIGFuZHJvaWQ6
bWluU2RrVmVyc2lvbj0iOCIgLz4KLQotICAgIDwhLS0gVGhpcyAuYXBrIGhhcyBubyBKYXZhIGNv
ZGUgaXRzZWxmLCBzbyBzZXQgaGFzQ29kZSB0byBmYWxzZS4gLS0+Ci0gICAgPGFwcGxpY2F0aW9u
IGFuZHJvaWQ6bGFiZWw9IkBzdHJpbmcvYXBwX25hbWUiIGFuZHJvaWQ6aGFzQ29kZT0iZmFsc2Ui
IGFuZHJvaWQ6ZGVidWdnYWJsZT0idHJ1ZSI+Ci0KLSAgICAgICAgPCEtLSBPdXIgYWN0aXZpdHkg
aXMgdGhlIGJ1aWx0LWluIE5hdGl2ZUFjdGl2aXR5IGZyYW1ld29yayBjbGFzcy4KLSAgICAgICAg
ICAgICBUaGlzIHdpbGwgdGFrZSBjYXJlIG9mIGludGVncmF0aW5nIHdpdGggb3VyIE5ESyBjb2Rl
LiAtLT4KLSAgICAgICAgPGFjdGl2aXR5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5hcHAuTmF0aXZl
QWN0aXZpdHkiCi0gICAgICAgICAgICAgICAgYW5kcm9pZDpsYWJlbD0iQHN0cmluZy9hcHBfbmFt
ZSIKLSAgICAgICAgICAgICAgICBhbmRyb2lkOmNvbmZpZ0NoYW5nZXM9Im9yaWVudGF0aW9ufGtl
eWJvYXJkSGlkZGVuIj4KLSAgICAgICAgICAgIDwhLS0gVGVsbCBOYXRpdmVBY3Rpdml0eSB0aGUg
bmFtZSBvZiBvciAuc28gLS0+Ci0gICAgICAgICAgICA8bWV0YS1kYXRhIGFuZHJvaWQ6bmFtZT0i
YW5kcm9pZC5hcHAubGliX25hbWUiCi0gICAgICAgICAgICAgICAgICAgIGFuZHJvaWQ6dmFsdWU9
ImFwbXRlc3QtYWN0aXZpdHkiIC8+Ci0gICAgICAgICAgICA8aW50ZW50LWZpbHRlcj4KLSAgICAg
ICAgICAgICAgICA8YWN0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1B
SU4iIC8+Ci0gICAgICAgICAgICAgICAgPGNhdGVnb3J5IGFuZHJvaWQ6bmFtZT0iYW5kcm9pZC5p
bnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVIiIC8+Ci0gICAgICAgICAgICA8L2ludGVudC1maWx0ZXI+
Ci0gICAgICAgIDwvYWN0aXZpdHk+Ci0gICAgPC9hcHBsaWNhdGlvbj4KLQotPC9tYW5pZmVzdD4g
Ci08IS0tIEVORF9JTkNMVURFKG1hbmlmZXN0KSAtLT4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2Fu
ZHJvaWQvYXBtdGVzdC9kZWZhdWx0LnByb3BlcnRpZXMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5n
L3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2RlZmF1bHQucHJvcGVydGllcwkocmV2aXNpb24gMjEyMjcz
KQorKysgU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9h
dWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2RlZmF1bHQucHJvcGVydGllcwko
bm9uZXhpc3RlbnQpCkBAIC0xLDExICswLDAgQEAKLSMgVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIGJ5IEFuZHJvaWQgVG9vbHMuCi0jIERvIG5vdCBtb2RpZnkgdGhpcyBmaWxl
IC0tIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIEVSQVNFRCEKLSMgCi0jIFRoaXMgZmlsZSBtdXN0IGJl
IGNoZWNrZWQgaW4gVmVyc2lvbiBDb250cm9sIFN5c3RlbXMuCi0jIAotIyBUbyBjdXN0b21pemUg
cHJvcGVydGllcyB1c2VkIGJ5IHRoZSBBbnQgYnVpbGQgc3lzdGVtIHVzZSwKLSMgImJ1aWxkLnBy
b3BlcnRpZXMiLCBhbmQgb3ZlcnJpZGUgdmFsdWVzIHRvIGFkYXB0IHRoZSBzY3JpcHQgdG8geW91
cgotIyBwcm9qZWN0IHN0cnVjdHVyZS4KLQotIyBQcm9qZWN0IHRhcmdldC4KLXRhcmdldD1hbmRy
b2lkLTkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9qbmkvbWFpbi5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9qbmkvbWFpbi5jCShy
ZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dl
YnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3Qvam5pL21h
aW4uYwkobm9uZXhpc3RlbnQpCkBAIC0xLDMwNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSAqCi0gKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSAq
IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUg
TGljZW5zZS4KLSAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoK
LSAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgot
ICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0
aW5nLCBzb2Z0d2FyZQotICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp
YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICogU2VlIHRo
ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25z
IGFuZAotICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0gKgotICovCi0KLS8vQkVH
SU5fSU5DTFVERShhbGwpCi0jaW5jbHVkZSA8am5pLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQot
I2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNpbmNsdWRlIDxHTEVTL2dsLmg+Ci0KLSNpbmNsdWRlIDxh
bmRyb2lkL3NlbnNvci5oPgotI2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+Ci0jaW5jbHVkZSA8YW5k
cm9pZF9uYXRpdmVfYXBwX2dsdWUuaD4KLQotI2RlZmluZSBMT0dJKC4uLikgKCh2b2lkKV9fYW5k
cm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgIm5hdGl2ZS1hY3Rpdml0eSIsIF9fVkFf
QVJHU19fKSkKLSNkZWZpbmUgTE9HVyguLi4pICgodm9pZClfX2FuZHJvaWRfbG9nX3ByaW50KEFO
RFJPSURfTE9HX1dBUk4sICJuYXRpdmUtYWN0aXZpdHkiLCBfX1ZBX0FSR1NfXykpCi0KLS8qKgot
ICogT3VyIHNhdmVkIHN0YXRlIGRhdGEuCi0gKi8KLXN0cnVjdCBzYXZlZF9zdGF0ZSB7Ci0gICAg
ZmxvYXQgYW5nbGU7Ci0gICAgaW50MzJfdCB4OwotICAgIGludDMyX3QgeTsKLX07Ci0KLS8qKgot
ICogU2hhcmVkIHN0YXRlIGZvciBvdXIgYXBwLgotICovCi1zdHJ1Y3QgZW5naW5lIHsKLSAgICBz
dHJ1Y3QgYW5kcm9pZF9hcHAqIGFwcDsKLQotICAgIEFTZW5zb3JNYW5hZ2VyKiBzZW5zb3JNYW5h
Z2VyOwotICAgIGNvbnN0IEFTZW5zb3IqIGFjY2VsZXJvbWV0ZXJTZW5zb3I7Ci0gICAgQVNlbnNv
ckV2ZW50UXVldWUqIHNlbnNvckV2ZW50UXVldWU7Ci0KLSAgICBpbnQgYW5pbWF0aW5nOwotICAg
IEVHTERpc3BsYXkgZGlzcGxheTsKLSAgICBFR0xTdXJmYWNlIHN1cmZhY2U7Ci0gICAgRUdMQ29u
dGV4dCBjb250ZXh0OwotICAgIGludDMyX3Qgd2lkdGg7Ci0gICAgaW50MzJfdCBoZWlnaHQ7Ci0g
ICAgc3RydWN0IHNhdmVkX3N0YXRlIHN0YXRlOwotfTsKLQotLyoqCi0gKiBJbml0aWFsaXplIGFu
IEVHTCBjb250ZXh0IGZvciB0aGUgY3VycmVudCBkaXNwbGF5LgotICovCi1zdGF0aWMgaW50IGVu
Z2luZV9pbml0X2Rpc3BsYXkoc3RydWN0IGVuZ2luZSogZW5naW5lKSB7Ci0gICAgLy8gaW5pdGlh
bGl6ZSBPcGVuR0wgRVMgYW5kIEVHTAotCi0gICAgLyoKLSAgICAgKiBIZXJlIHNwZWNpZnkgdGhl
IGF0dHJpYnV0ZXMgb2YgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbi4KLSAgICAgKiBCZWxvdywg
d2Ugc2VsZWN0IGFuIEVHTENvbmZpZyB3aXRoIGF0IGxlYXN0IDggYml0cyBwZXIgY29sb3IKLSAg
ICAgKiBjb21wb25lbnQgY29tcGF0aWJsZSB3aXRoIG9uLXNjcmVlbiB3aW5kb3dzCi0gICAgICov
Ci0gICAgY29uc3QgRUdMaW50IGF0dHJpYnNbXSA9IHsKLSAgICAgICAgICAgIEVHTF9TVVJGQUNF
X1RZUEUsIEVHTF9XSU5ET1dfQklULAotICAgICAgICAgICAgRUdMX0JMVUVfU0laRSwgOCwKLSAg
ICAgICAgICAgIEVHTF9HUkVFTl9TSVpFLCA4LAotICAgICAgICAgICAgRUdMX1JFRF9TSVpFLCA4
LAotICAgICAgICAgICAgRUdMX05PTkUKLSAgICB9OwotICAgIEVHTGludCB3LCBoLCBkdW1teSwg
Zm9ybWF0OwotICAgIEVHTGludCBudW1Db25maWdzOwotICAgIEVHTENvbmZpZyBjb25maWc7Ci0g
ICAgRUdMU3VyZmFjZSBzdXJmYWNlOwotICAgIEVHTENvbnRleHQgY29udGV4dDsKLQotICAgIEVH
TERpc3BsYXkgZGlzcGxheSA9IGVnbEdldERpc3BsYXkoRUdMX0RFRkFVTFRfRElTUExBWSk7Ci0K
LSAgICBlZ2xJbml0aWFsaXplKGRpc3BsYXksIDAsIDApOwotCi0gICAgLyogSGVyZSwgdGhlIGFw
cGxpY2F0aW9uIGNob29zZXMgdGhlIGNvbmZpZ3VyYXRpb24gaXQgZGVzaXJlcy4gSW4gdGhpcwot
ICAgICAqIHNhbXBsZSwgd2UgaGF2ZSBhIHZlcnkgc2ltcGxpZmllZCBzZWxlY3Rpb24gcHJvY2Vz
cywgd2hlcmUgd2UgcGljawotICAgICAqIHRoZSBmaXJzdCBFR0xDb25maWcgdGhhdCBtYXRjaGVz
IG91ciBjcml0ZXJpYSAqLwotICAgIGVnbENob29zZUNvbmZpZyhkaXNwbGF5LCBhdHRyaWJzLCAm
Y29uZmlnLCAxLCAmbnVtQ29uZmlncyk7Ci0KLSAgICAvKiBFR0xfTkFUSVZFX1ZJU1VBTF9JRCBp
cyBhbiBhdHRyaWJ1dGUgb2YgdGhlIEVHTENvbmZpZyB0aGF0IGlzCi0gICAgICogZ3VhcmFudGVl
ZCB0byBiZSBhY2NlcHRlZCBieSBBTmF0aXZlV2luZG93X3NldEJ1ZmZlcnNHZW9tZXRyeSgpLgot
ICAgICAqIEFzIHNvb24gYXMgd2UgcGlja2VkIGEgRUdMQ29uZmlnLCB3ZSBjYW4gc2FmZWx5IHJl
Y29uZmlndXJlIHRoZQotICAgICAqIEFOYXRpdmVXaW5kb3cgYnVmZmVycyB0byBtYXRjaCwgdXNp
bmcgRUdMX05BVElWRV9WSVNVQUxfSUQuICovCi0gICAgZWdsR2V0Q29uZmlnQXR0cmliKGRpc3Bs
YXksIGNvbmZpZywgRUdMX05BVElWRV9WSVNVQUxfSUQsICZmb3JtYXQpOwotCi0gICAgQU5hdGl2
ZVdpbmRvd19zZXRCdWZmZXJzR2VvbWV0cnkoZW5naW5lLT5hcHAtPndpbmRvdywgMCwgMCwgZm9y
bWF0KTsKLQotICAgIHN1cmZhY2UgPSBlZ2xDcmVhdGVXaW5kb3dTdXJmYWNlKGRpc3BsYXksIGNv
bmZpZywgZW5naW5lLT5hcHAtPndpbmRvdywgTlVMTCk7Ci0gICAgY29udGV4dCA9IGVnbENyZWF0
ZUNvbnRleHQoZGlzcGxheSwgY29uZmlnLCBOVUxMLCBOVUxMKTsKLQotICAgIGlmIChlZ2xNYWtl
Q3VycmVudChkaXNwbGF5LCBzdXJmYWNlLCBzdXJmYWNlLCBjb250ZXh0KSA9PSBFR0xfRkFMU0Up
IHsKLSAgICAgICAgTE9HVygiVW5hYmxlIHRvIGVnbE1ha2VDdXJyZW50Iik7Ci0gICAgICAgIHJl
dHVybiAtMTsKLSAgICB9Ci0KLSAgICBlZ2xRdWVyeVN1cmZhY2UoZGlzcGxheSwgc3VyZmFjZSwg
RUdMX1dJRFRILCAmdyk7Ci0gICAgZWdsUXVlcnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVH
TF9IRUlHSFQsICZoKTsKLQotICAgIGVuZ2luZS0+ZGlzcGxheSA9IGRpc3BsYXk7Ci0gICAgZW5n
aW5lLT5jb250ZXh0ID0gY29udGV4dDsKLSAgICBlbmdpbmUtPnN1cmZhY2UgPSBzdXJmYWNlOwot
ICAgIGVuZ2luZS0+d2lkdGggPSB3OwotICAgIGVuZ2luZS0+aGVpZ2h0ID0gaDsKLSAgICBlbmdp
bmUtPnN0YXRlLmFuZ2xlID0gMDsKLQotICAgIC8vIEluaXRpYWxpemUgR0wgc3RhdGUuCi0gICAg
Z2xIaW50KEdMX1BFUlNQRUNUSVZFX0NPUlJFQ1RJT05fSElOVCwgR0xfRkFTVEVTVCk7Ci0gICAg
Z2xFbmFibGUoR0xfQ1VMTF9GQUNFKTsKLSAgICBnbFNoYWRlTW9kZWwoR0xfU01PT1RIKTsKLSAg
ICBnbERpc2FibGUoR0xfREVQVEhfVEVTVCk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoqCi0g
KiBKdXN0IHRoZSBjdXJyZW50IGZyYW1lIGluIHRoZSBkaXNwbGF5LgotICovCi1zdGF0aWMgdm9p
ZCBlbmdpbmVfZHJhd19mcmFtZShzdHJ1Y3QgZW5naW5lKiBlbmdpbmUpIHsKLSAgICBpZiAoZW5n
aW5lLT5kaXNwbGF5ID09IE5VTEwpIHsKLSAgICAgICAgLy8gTm8gZGlzcGxheS4KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEp1c3QgZmlsbCB0aGUgc2NyZWVuIHdpdGggYSBjb2xv
ci4KLSAgICBnbENsZWFyQ29sb3IoKChmbG9hdCllbmdpbmUtPnN0YXRlLngpL2VuZ2luZS0+d2lk
dGgsIGVuZ2luZS0+c3RhdGUuYW5nbGUsCi0gICAgICAgICAgICAoKGZsb2F0KWVuZ2luZS0+c3Rh
dGUueSkvZW5naW5lLT5oZWlnaHQsIDEpOwotICAgIGdsQ2xlYXIoR0xfQ09MT1JfQlVGRkVSX0JJ
VCk7Ci0KLSAgICBlZ2xTd2FwQnVmZmVycyhlbmdpbmUtPmRpc3BsYXksIGVuZ2luZS0+c3VyZmFj
ZSk7Ci19Ci0KLS8qKgotICogVGVhciBkb3duIHRoZSBFR0wgY29udGV4dCBjdXJyZW50bHkgYXNz
b2NpYXRlZCB3aXRoIHRoZSBkaXNwbGF5LgotICovCi1zdGF0aWMgdm9pZCBlbmdpbmVfdGVybV9k
aXNwbGF5KHN0cnVjdCBlbmdpbmUqIGVuZ2luZSkgewotICAgIGlmIChlbmdpbmUtPmRpc3BsYXkg
IT0gRUdMX05PX0RJU1BMQVkpIHsKLSAgICAgICAgZWdsTWFrZUN1cnJlbnQoZW5naW5lLT5kaXNw
bGF5LCBFR0xfTk9fU1VSRkFDRSwgRUdMX05PX1NVUkZBQ0UsIEVHTF9OT19DT05URVhUKTsKLSAg
ICAgICAgaWYgKGVuZ2luZS0+Y29udGV4dCAhPSBFR0xfTk9fQ09OVEVYVCkgewotICAgICAgICAg
ICAgZWdsRGVzdHJveUNvbnRleHQoZW5naW5lLT5kaXNwbGF5LCBlbmdpbmUtPmNvbnRleHQpOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChlbmdpbmUtPnN1cmZhY2UgIT0gRUdMX05PX1NVUkZBQ0Up
IHsKLSAgICAgICAgICAgIGVnbERlc3Ryb3lTdXJmYWNlKGVuZ2luZS0+ZGlzcGxheSwgZW5naW5l
LT5zdXJmYWNlKTsKLSAgICAgICAgfQotICAgICAgICBlZ2xUZXJtaW5hdGUoZW5naW5lLT5kaXNw
bGF5KTsKLSAgICB9Ci0gICAgZW5naW5lLT5hbmltYXRpbmcgPSAwOwotICAgIGVuZ2luZS0+ZGlz
cGxheSA9IEVHTF9OT19ESVNQTEFZOwotICAgIGVuZ2luZS0+Y29udGV4dCA9IEVHTF9OT19DT05U
RVhUOwotICAgIGVuZ2luZS0+c3VyZmFjZSA9IEVHTF9OT19TVVJGQUNFOwotfQotCi0vKioKLSAq
IFByb2Nlc3MgdGhlIG5leHQgaW5wdXQgZXZlbnQuCi0gKi8KLXN0YXRpYyBpbnQzMl90IGVuZ2lu
ZV9oYW5kbGVfaW5wdXQoc3RydWN0IGFuZHJvaWRfYXBwKiBhcHAsIEFJbnB1dEV2ZW50KiBldmVu
dCkgewotICAgIHN0cnVjdCBlbmdpbmUqIGVuZ2luZSA9IChzdHJ1Y3QgZW5naW5lKilhcHAtPnVz
ZXJEYXRhOwotICAgIGlmIChBSW5wdXRFdmVudF9nZXRUeXBlKGV2ZW50KSA9PSBBSU5QVVRfRVZF
TlRfVFlQRV9NT1RJT04pIHsKLSAgICAgICAgZW5naW5lLT5hbmltYXRpbmcgPSAxOwotICAgICAg
ICBlbmdpbmUtPnN0YXRlLnggPSBBTW90aW9uRXZlbnRfZ2V0WChldmVudCwgMCk7Ci0gICAgICAg
IGVuZ2luZS0+c3RhdGUueSA9IEFNb3Rpb25FdmVudF9nZXRZKGV2ZW50LCAwKTsKLSAgICAgICAg
cmV0dXJuIDE7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKioKLSAqIFByb2Nlc3MgdGhl
IG5leHQgbWFpbiBjb21tYW5kLgotICovCi1zdGF0aWMgdm9pZCBlbmdpbmVfaGFuZGxlX2NtZChz
dHJ1Y3QgYW5kcm9pZF9hcHAqIGFwcCwgaW50MzJfdCBjbWQpIHsKLSAgICBzdHJ1Y3QgZW5naW5l
KiBlbmdpbmUgPSAoc3RydWN0IGVuZ2luZSopYXBwLT51c2VyRGF0YTsKLSAgICBzd2l0Y2ggKGNt
ZCkgewotICAgICAgICBjYXNlIEFQUF9DTURfU0FWRV9TVEFURToKLSAgICAgICAgICAgIC8vIFRo
ZSBzeXN0ZW0gaGFzIGFza2VkIHVzIHRvIHNhdmUgb3VyIGN1cnJlbnQgc3RhdGUuICBEbyBzby4K
LSAgICAgICAgICAgIGVuZ2luZS0+YXBwLT5zYXZlZFN0YXRlID0gbWFsbG9jKHNpemVvZihzdHJ1
Y3Qgc2F2ZWRfc3RhdGUpKTsKLSAgICAgICAgICAgICooKHN0cnVjdCBzYXZlZF9zdGF0ZSopZW5n
aW5lLT5hcHAtPnNhdmVkU3RhdGUpID0gZW5naW5lLT5zdGF0ZTsKLSAgICAgICAgICAgIGVuZ2lu
ZS0+YXBwLT5zYXZlZFN0YXRlU2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2F2ZWRfc3RhdGUpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQVBQX0NNRF9JTklUX1dJTkRPVzoKLSAgICAg
ICAgICAgIC8vIFRoZSB3aW5kb3cgaXMgYmVpbmcgc2hvd24sIGdldCBpdCByZWFkeS4KLSAgICAg
ICAgICAgIGlmIChlbmdpbmUtPmFwcC0+d2luZG93ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAg
ICBlbmdpbmVfaW5pdF9kaXNwbGF5KGVuZ2luZSk7Ci0gICAgICAgICAgICAgICAgZW5naW5lX2Ry
YXdfZnJhbWUoZW5naW5lKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEFQUF9DTURfVEVSTV9XSU5ET1c6Ci0gICAgICAgICAgICAvLyBUaGUgd2luZG93
IGlzIGJlaW5nIGhpZGRlbiBvciBjbG9zZWQsIGNsZWFuIGl0IHVwLgotICAgICAgICAgICAgZW5n
aW5lX3Rlcm1fZGlzcGxheShlbmdpbmUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQVBQX0NNRF9HQUlORURfRk9DVVM6Ci0gICAgICAgICAgICAvLyBXaGVuIG91ciBhcHAgZ2Fp
bnMgZm9jdXMsIHdlIHN0YXJ0IG1vbml0b3JpbmcgdGhlIGFjY2VsZXJvbWV0ZXIuCi0gICAgICAg
ICAgICBpZiAoZW5naW5lLT5hY2NlbGVyb21ldGVyU2Vuc29yICE9IE5VTEwpIHsKLSAgICAgICAg
ICAgICAgICBBU2Vuc29yRXZlbnRRdWV1ZV9lbmFibGVTZW5zb3IoZW5naW5lLT5zZW5zb3JFdmVu
dFF1ZXVlLAotICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lLT5hY2NlbGVyb21ldGVyU2Vu
c29yKTsKLSAgICAgICAgICAgICAgICAvLyBXZSdkIGxpa2UgdG8gZ2V0IDYwIGV2ZW50cyBwZXIg
c2Vjb25kIChpbiB1cykuCi0gICAgICAgICAgICAgICAgQVNlbnNvckV2ZW50UXVldWVfc2V0RXZl
bnRSYXRlKGVuZ2luZS0+c2Vuc29yRXZlbnRRdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
IGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNvciwgKDEwMDBMLzYwKSoxMDAwKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFQUF9DTURfTE9TVF9GT0NV
UzoKLSAgICAgICAgICAgIC8vIFdoZW4gb3VyIGFwcCBsb3NlcyBmb2N1cywgd2Ugc3RvcCBtb25p
dG9yaW5nIHRoZSBhY2NlbGVyb21ldGVyLgotICAgICAgICAgICAgLy8gVGhpcyBpcyB0byBhdm9p
ZCBjb25zdW1pbmcgYmF0dGVyeSB3aGlsZSBub3QgYmVpbmcgdXNlZC4KLSAgICAgICAgICAgIGlm
IChlbmdpbmUtPmFjY2VsZXJvbWV0ZXJTZW5zb3IgIT0gTlVMTCkgewotICAgICAgICAgICAgICAg
IEFTZW5zb3JFdmVudFF1ZXVlX2Rpc2FibGVTZW5zb3IoZW5naW5lLT5zZW5zb3JFdmVudFF1ZXVl
LAotICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lLT5hY2NlbGVyb21ldGVyU2Vuc29yKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIEFsc28gc3RvcCBhbmltYXRpbmcuCi0gICAg
ICAgICAgICBlbmdpbmUtPmFuaW1hdGluZyA9IDA7Ci0gICAgICAgICAgICBlbmdpbmVfZHJhd19m
cmFtZShlbmdpbmUpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi0vKioKLSAqIFRo
aXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgb2YgYSBuYXRpdmUgYXBwbGljYXRpb24gdGhhdCBp
cyB1c2luZwotICogYW5kcm9pZF9uYXRpdmVfYXBwX2dsdWUuICBJdCBydW5zIGluIGl0cyBvd24g
dGhyZWFkLCB3aXRoIGl0cyBvd24KLSAqIGV2ZW50IGxvb3AgZm9yIHJlY2VpdmluZyBpbnB1dCBl
dmVudHMgYW5kIGRvaW5nIG90aGVyIHRoaW5ncy4KLSAqLwotdm9pZCBhbmRyb2lkX21haW4oc3Ry
dWN0IGFuZHJvaWRfYXBwKiBzdGF0ZSkgewotICAgIHN0cnVjdCBlbmdpbmUgZW5naW5lOwotCi0g
ICAgLy8gTWFrZSBzdXJlIGdsdWUgaXNuJ3Qgc3RyaXBwZWQuCi0gICAgYXBwX2R1bW15KCk7Ci0K
LSAgICBtZW1zZXQoJmVuZ2luZSwgMCwgc2l6ZW9mKGVuZ2luZSkpOwotICAgIHN0YXRlLT51c2Vy
RGF0YSA9ICZlbmdpbmU7Ci0gICAgc3RhdGUtPm9uQXBwQ21kID0gZW5naW5lX2hhbmRsZV9jbWQ7
Ci0gICAgc3RhdGUtPm9uSW5wdXRFdmVudCA9IGVuZ2luZV9oYW5kbGVfaW5wdXQ7Ci0gICAgZW5n
aW5lLmFwcCA9IHN0YXRlOwotCi0gICAgLy8gUHJlcGFyZSB0byBtb25pdG9yIGFjY2VsZXJvbWV0
ZXIKLSAgICBlbmdpbmUuc2Vuc29yTWFuYWdlciA9IEFTZW5zb3JNYW5hZ2VyX2dldEluc3RhbmNl
KCk7Ci0gICAgZW5naW5lLmFjY2VsZXJvbWV0ZXJTZW5zb3IgPSBBU2Vuc29yTWFuYWdlcl9nZXRE
ZWZhdWx0U2Vuc29yKGVuZ2luZS5zZW5zb3JNYW5hZ2VyLAotICAgICAgICAgICAgQVNFTlNPUl9U
WVBFX0FDQ0VMRVJPTUVURVIpOwotICAgIGVuZ2luZS5zZW5zb3JFdmVudFF1ZXVlID0gQVNlbnNv
ck1hbmFnZXJfY3JlYXRlRXZlbnRRdWV1ZShlbmdpbmUuc2Vuc29yTWFuYWdlciwKLSAgICAgICAg
ICAgIHN0YXRlLT5sb29wZXIsIExPT1BFUl9JRF9VU0VSLCBOVUxMLCBOVUxMKTsKLQotICAgIGlm
IChzdGF0ZS0+c2F2ZWRTdGF0ZSAhPSBOVUxMKSB7Ci0gICAgICAgIC8vIFdlIGFyZSBzdGFydGlu
ZyB3aXRoIGEgcHJldmlvdXMgc2F2ZWQgc3RhdGU7IHJlc3RvcmUgZnJvbSBpdC4KLSAgICAgICAg
ZW5naW5lLnN0YXRlID0gKihzdHJ1Y3Qgc2F2ZWRfc3RhdGUqKXN0YXRlLT5zYXZlZFN0YXRlOwot
ICAgIH0KLQotICAgIC8vIGxvb3Agd2FpdGluZyBmb3Igc3R1ZmYgdG8gZG8uCi0KLSAgICB3aGls
ZSAoMSkgewotICAgICAgICAvLyBSZWFkIGFsbCBwZW5kaW5nIGV2ZW50cy4KLSAgICAgICAgaW50
IGlkZW50OwotICAgICAgICBpbnQgZXZlbnRzOwotICAgICAgICBzdHJ1Y3QgYW5kcm9pZF9wb2xs
X3NvdXJjZSogc291cmNlOwotCi0gICAgICAgIC8vIElmIG5vdCBhbmltYXRpbmcsIHdlIHdpbGwg
YmxvY2sgZm9yZXZlciB3YWl0aW5nIGZvciBldmVudHMuCi0gICAgICAgIC8vIElmIGFuaW1hdGlu
Zywgd2UgbG9vcCB1bnRpbCBhbGwgZXZlbnRzIGFyZSByZWFkLCB0aGVuIGNvbnRpbnVlCi0gICAg
ICAgIC8vIHRvIGRyYXcgdGhlIG5leHQgZnJhbWUgb2YgYW5pbWF0aW9uLgotICAgICAgICB3aGls
ZSAoKGlkZW50PUFMb29wZXJfcG9sbEFsbChlbmdpbmUuYW5pbWF0aW5nID8gMCA6IC0xLCBOVUxM
LCAmZXZlbnRzLAotICAgICAgICAgICAgICAgICh2b2lkKiopJnNvdXJjZSkpID49IDApIHsKLQot
ICAgICAgICAgICAgLy8gUHJvY2VzcyB0aGlzIGV2ZW50LgotICAgICAgICAgICAgaWYgKHNvdXJj
ZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc291cmNlLT5wcm9jZXNzKHN0YXRlLCBzb3Vy
Y2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZiBhIHNlbnNvciBoYXMgZGF0
YSwgcHJvY2VzcyBpdCBub3cuCi0gICAgICAgICAgICBpZiAoaWRlbnQgPT0gTE9PUEVSX0lEX1VT
RVIpIHsKLSAgICAgICAgICAgICAgICBpZiAoZW5naW5lLmFjY2VsZXJvbWV0ZXJTZW5zb3IgIT0g
TlVMTCkgewotICAgICAgICAgICAgICAgICAgICBBU2Vuc29yRXZlbnQgZXZlbnQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChBU2Vuc29yRXZlbnRRdWV1ZV9nZXRFdmVudHMoZW5naW5lLnNl
bnNvckV2ZW50UXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50LCAxKSA+
IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPR0koImFjY2VsZXJvbWV0ZXI6IHg9JWYg
eT0lZiB6PSVmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuYWNjZWxl
cmF0aW9uLngsIGV2ZW50LmFjY2VsZXJhdGlvbi55LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBldmVudC5hY2NlbGVyYXRpb24ueik7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8vIENoZWNrIGlm
IHdlIGFyZSBleGl0aW5nLgotICAgICAgICAgICAgaWYgKHN0YXRlLT5kZXN0cm95UmVxdWVzdGVk
ICE9IDApIHsKLSAgICAgICAgICAgICAgICBlbmdpbmVfdGVybV9kaXNwbGF5KCZlbmdpbmUpOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChlbmdpbmUuYW5pbWF0aW5nKSB7Ci0gICAgICAgICAgICAvLyBEb25lIHdpdGggZXZl
bnRzOyBkcmF3IG5leHQgYW5pbWF0aW9uIGZyYW1lLgotICAgICAgICAgICAgZW5naW5lLnN0YXRl
LmFuZ2xlICs9IC4wMWY7Ci0gICAgICAgICAgICBpZiAoZW5naW5lLnN0YXRlLmFuZ2xlID4gMSkg
ewotICAgICAgICAgICAgICAgIGVuZ2luZS5zdGF0ZS5hbmdsZSA9IDA7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIC8vIERyYXdpbmcgaXMgdGhyb3R0bGVkIHRvIHRoZSBzY3JlZW4gdXBk
YXRlIHJhdGUsIHNvIHRoZXJlCi0gICAgICAgICAgICAvLyBpcyBubyBuZWVkIHRvIGRvIHRpbWlu
ZyBoZXJlLgotICAgICAgICAgICAgZW5naW5lX2RyYXdfZnJhbWUoJmVuZ2luZSk7Ci0gICAgICAg
IH0KLSAgICB9Ci19Ci0vL0VORF9JTkNMVURFKGFsbCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vzc2luZy90ZXN0L2Fu
ZHJvaWQvYXBtdGVzdC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJvY2Vz
c2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCShyZXZpc2lv
biAyMTIyNzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9t
b2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvcmVzL3ZhbHVlcy9z
dHJpbmdzLnhtbAkobm9uZXhpc3RlbnQpCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxyZXNvdXJjZXM+Ci0gICAgPHN0cmluZyBuYW1lPSJh
cHBfbmFtZSI+YXBtdGVzdDwvc3RyaW5nPgotPC9yZXNvdXJjZXM+CkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Npbmcv
dGVzdC9hbmRyb2lkL2FwbXRlc3Qvam5pL21haW4uYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3Npbmcv
dGVzdC9hbmRyb2lkL2FwbXRlc3Qvam5pL21haW4uYwkocmV2aXNpb24gMjEyMjczKQorKysgU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9j
ZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L2puaS9tYWluLmMJKG5vbmV4aXN0ZW50KQpAQCAt
MSwzMDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBUaGUgQW5kcm9pZCBPcGVu
IFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl
LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm
aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9i
dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBh
Y2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBh
cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3Ry
aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT
SVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0
aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNp
ZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVu
ZGVyIHRoZSBMaWNlbnNlLgotICoKLSAqLwotCi0vL0JFR0lOX0lOQ0xVREUoYWxsKQotI2luY2x1
ZGUgPGpuaS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0j
aW5jbHVkZSA8R0xFUy9nbC5oPgotCi0jaW5jbHVkZSA8YW5kcm9pZC9zZW5zb3IuaD4KLSNpbmNs
dWRlIDxhbmRyb2lkL2xvZy5oPgotI2luY2x1ZGUgPGFuZHJvaWRfbmF0aXZlX2FwcF9nbHVlLmg+
Ci0KLSNkZWZpbmUgTE9HSSguLi4pICgodm9pZClfX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURf
TE9HX0lORk8sICJuYXRpdmUtYWN0aXZpdHkiLCBfX1ZBX0FSR1NfXykpCi0jZGVmaW5lIExPR1co
Li4uKSAoKHZvaWQpX19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19XQVJOLCAibmF0aXZl
LWFjdGl2aXR5IiwgX19WQV9BUkdTX18pKQotCi0vKioKLSAqIE91ciBzYXZlZCBzdGF0ZSBkYXRh
LgotICovCi1zdHJ1Y3Qgc2F2ZWRfc3RhdGUgewotICAgIGZsb2F0IGFuZ2xlOwotICAgIGludDMy
X3QgeDsKLSAgICBpbnQzMl90IHk7Ci19OwotCi0vKioKLSAqIFNoYXJlZCBzdGF0ZSBmb3Igb3Vy
IGFwcC4KLSAqLwotc3RydWN0IGVuZ2luZSB7Ci0gICAgc3RydWN0IGFuZHJvaWRfYXBwKiBhcHA7
Ci0KLSAgICBBU2Vuc29yTWFuYWdlciogc2Vuc29yTWFuYWdlcjsKLSAgICBjb25zdCBBU2Vuc29y
KiBhY2NlbGVyb21ldGVyU2Vuc29yOwotICAgIEFTZW5zb3JFdmVudFF1ZXVlKiBzZW5zb3JFdmVu
dFF1ZXVlOwotCi0gICAgaW50IGFuaW1hdGluZzsKLSAgICBFR0xEaXNwbGF5IGRpc3BsYXk7Ci0g
ICAgRUdMU3VyZmFjZSBzdXJmYWNlOwotICAgIEVHTENvbnRleHQgY29udGV4dDsKLSAgICBpbnQz
Ml90IHdpZHRoOwotICAgIGludDMyX3QgaGVpZ2h0OwotICAgIHN0cnVjdCBzYXZlZF9zdGF0ZSBz
dGF0ZTsKLX07Ci0KLS8qKgotICogSW5pdGlhbGl6ZSBhbiBFR0wgY29udGV4dCBmb3IgdGhlIGN1
cnJlbnQgZGlzcGxheS4KLSAqLwotc3RhdGljIGludCBlbmdpbmVfaW5pdF9kaXNwbGF5KHN0cnVj
dCBlbmdpbmUqIGVuZ2luZSkgewotICAgIC8vIGluaXRpYWxpemUgT3BlbkdMIEVTIGFuZCBFR0wK
LQotICAgIC8qCi0gICAgICogSGVyZSBzcGVjaWZ5IHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBkZXNp
cmVkIGNvbmZpZ3VyYXRpb24uCi0gICAgICogQmVsb3csIHdlIHNlbGVjdCBhbiBFR0xDb25maWcg
d2l0aCBhdCBsZWFzdCA4IGJpdHMgcGVyIGNvbG9yCi0gICAgICogY29tcG9uZW50IGNvbXBhdGli
bGUgd2l0aCBvbi1zY3JlZW4gd2luZG93cwotICAgICAqLwotICAgIGNvbnN0IEVHTGludCBhdHRy
aWJzW10gPSB7Ci0gICAgICAgICAgICBFR0xfU1VSRkFDRV9UWVBFLCBFR0xfV0lORE9XX0JJVCwK
LSAgICAgICAgICAgIEVHTF9CTFVFX1NJWkUsIDgsCi0gICAgICAgICAgICBFR0xfR1JFRU5fU0la
RSwgOCwKLSAgICAgICAgICAgIEVHTF9SRURfU0laRSwgOCwKLSAgICAgICAgICAgIEVHTF9OT05F
Ci0gICAgfTsKLSAgICBFR0xpbnQgdywgaCwgZHVtbXksIGZvcm1hdDsKLSAgICBFR0xpbnQgbnVt
Q29uZmlnczsKLSAgICBFR0xDb25maWcgY29uZmlnOwotICAgIEVHTFN1cmZhY2Ugc3VyZmFjZTsK
LSAgICBFR0xDb250ZXh0IGNvbnRleHQ7Ci0KLSAgICBFR0xEaXNwbGF5IGRpc3BsYXkgPSBlZ2xH
ZXREaXNwbGF5KEVHTF9ERUZBVUxUX0RJU1BMQVkpOwotCi0gICAgZWdsSW5pdGlhbGl6ZShkaXNw
bGF5LCAwLCAwKTsKLQotICAgIC8qIEhlcmUsIHRoZSBhcHBsaWNhdGlvbiBjaG9vc2VzIHRoZSBj
b25maWd1cmF0aW9uIGl0IGRlc2lyZXMuIEluIHRoaXMKLSAgICAgKiBzYW1wbGUsIHdlIGhhdmUg
YSB2ZXJ5IHNpbXBsaWZpZWQgc2VsZWN0aW9uIHByb2Nlc3MsIHdoZXJlIHdlIHBpY2sKLSAgICAg
KiB0aGUgZmlyc3QgRUdMQ29uZmlnIHRoYXQgbWF0Y2hlcyBvdXIgY3JpdGVyaWEgKi8KLSAgICBl
Z2xDaG9vc2VDb25maWcoZGlzcGxheSwgYXR0cmlicywgJmNvbmZpZywgMSwgJm51bUNvbmZpZ3Mp
OwotCi0gICAgLyogRUdMX05BVElWRV9WSVNVQUxfSUQgaXMgYW4gYXR0cmlidXRlIG9mIHRoZSBF
R0xDb25maWcgdGhhdCBpcwotICAgICAqIGd1YXJhbnRlZWQgdG8gYmUgYWNjZXB0ZWQgYnkgQU5h
dGl2ZVdpbmRvd19zZXRCdWZmZXJzR2VvbWV0cnkoKS4KLSAgICAgKiBBcyBzb29uIGFzIHdlIHBp
Y2tlZCBhIEVHTENvbmZpZywgd2UgY2FuIHNhZmVseSByZWNvbmZpZ3VyZSB0aGUKLSAgICAgKiBB
TmF0aXZlV2luZG93IGJ1ZmZlcnMgdG8gbWF0Y2gsIHVzaW5nIEVHTF9OQVRJVkVfVklTVUFMX0lE
LiAqLwotICAgIGVnbEdldENvbmZpZ0F0dHJpYihkaXNwbGF5LCBjb25maWcsIEVHTF9OQVRJVkVf
VklTVUFMX0lELCAmZm9ybWF0KTsKLQotICAgIEFOYXRpdmVXaW5kb3dfc2V0QnVmZmVyc0dlb21l
dHJ5KGVuZ2luZS0+YXBwLT53aW5kb3csIDAsIDAsIGZvcm1hdCk7Ci0KLSAgICBzdXJmYWNlID0g
ZWdsQ3JlYXRlV2luZG93U3VyZmFjZShkaXNwbGF5LCBjb25maWcsIGVuZ2luZS0+YXBwLT53aW5k
b3csIE5VTEwpOwotICAgIGNvbnRleHQgPSBlZ2xDcmVhdGVDb250ZXh0KGRpc3BsYXksIGNvbmZp
ZywgTlVMTCwgTlVMTCk7Ci0KLSAgICBpZiAoZWdsTWFrZUN1cnJlbnQoZGlzcGxheSwgc3VyZmFj
ZSwgc3VyZmFjZSwgY29udGV4dCkgPT0gRUdMX0ZBTFNFKSB7Ci0gICAgICAgIExPR1coIlVuYWJs
ZSB0byBlZ2xNYWtlQ3VycmVudCIpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAg
ZWdsUXVlcnlTdXJmYWNlKGRpc3BsYXksIHN1cmZhY2UsIEVHTF9XSURUSCwgJncpOwotICAgIGVn
bFF1ZXJ5U3VyZmFjZShkaXNwbGF5LCBzdXJmYWNlLCBFR0xfSEVJR0hULCAmaCk7Ci0KLSAgICBl
bmdpbmUtPmRpc3BsYXkgPSBkaXNwbGF5OwotICAgIGVuZ2luZS0+Y29udGV4dCA9IGNvbnRleHQ7
Ci0gICAgZW5naW5lLT5zdXJmYWNlID0gc3VyZmFjZTsKLSAgICBlbmdpbmUtPndpZHRoID0gdzsK
LSAgICBlbmdpbmUtPmhlaWdodCA9IGg7Ci0gICAgZW5naW5lLT5zdGF0ZS5hbmdsZSA9IDA7Ci0K
LSAgICAvLyBJbml0aWFsaXplIEdMIHN0YXRlLgotICAgIGdsSGludChHTF9QRVJTUEVDVElWRV9D
T1JSRUNUSU9OX0hJTlQsIEdMX0ZBU1RFU1QpOwotICAgIGdsRW5hYmxlKEdMX0NVTExfRkFDRSk7
Ci0gICAgZ2xTaGFkZU1vZGVsKEdMX1NNT09USCk7Ci0gICAgZ2xEaXNhYmxlKEdMX0RFUFRIX1RF
U1QpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogSnVzdCB0aGUgY3VycmVudCBmcmFt
ZSBpbiB0aGUgZGlzcGxheS4KLSAqLwotc3RhdGljIHZvaWQgZW5naW5lX2RyYXdfZnJhbWUoc3Ry
dWN0IGVuZ2luZSogZW5naW5lKSB7Ci0gICAgaWYgKGVuZ2luZS0+ZGlzcGxheSA9PSBOVUxMKSB7
Ci0gICAgICAgIC8vIE5vIGRpc3BsYXkuCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBKdXN0IGZpbGwgdGhlIHNjcmVlbiB3aXRoIGEgY29sb3IuCi0gICAgZ2xDbGVhckNvbG9yKCgo
ZmxvYXQpZW5naW5lLT5zdGF0ZS54KS9lbmdpbmUtPndpZHRoLCBlbmdpbmUtPnN0YXRlLmFuZ2xl
LAotICAgICAgICAgICAgKChmbG9hdCllbmdpbmUtPnN0YXRlLnkpL2VuZ2luZS0+aGVpZ2h0LCAx
KTsKLSAgICBnbENsZWFyKEdMX0NPTE9SX0JVRkZFUl9CSVQpOwotCi0gICAgZWdsU3dhcEJ1ZmZl
cnMoZW5naW5lLT5kaXNwbGF5LCBlbmdpbmUtPnN1cmZhY2UpOwotfQotCi0vKioKLSAqIFRlYXIg
ZG93biB0aGUgRUdMIGNvbnRleHQgY3VycmVudGx5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGlzcGxh
eS4KLSAqLwotc3RhdGljIHZvaWQgZW5naW5lX3Rlcm1fZGlzcGxheShzdHJ1Y3QgZW5naW5lKiBl
bmdpbmUpIHsKLSAgICBpZiAoZW5naW5lLT5kaXNwbGF5ICE9IEVHTF9OT19ESVNQTEFZKSB7Ci0g
ICAgICAgIGVnbE1ha2VDdXJyZW50KGVuZ2luZS0+ZGlzcGxheSwgRUdMX05PX1NVUkZBQ0UsIEVH
TF9OT19TVVJGQUNFLCBFR0xfTk9fQ09OVEVYVCk7Ci0gICAgICAgIGlmIChlbmdpbmUtPmNvbnRl
eHQgIT0gRUdMX05PX0NPTlRFWFQpIHsKLSAgICAgICAgICAgIGVnbERlc3Ryb3lDb250ZXh0KGVu
Z2luZS0+ZGlzcGxheSwgZW5naW5lLT5jb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
ZW5naW5lLT5zdXJmYWNlICE9IEVHTF9OT19TVVJGQUNFKSB7Ci0gICAgICAgICAgICBlZ2xEZXN0
cm95U3VyZmFjZShlbmdpbmUtPmRpc3BsYXksIGVuZ2luZS0+c3VyZmFjZSk7Ci0gICAgICAgIH0K
LSAgICAgICAgZWdsVGVybWluYXRlKGVuZ2luZS0+ZGlzcGxheSk7Ci0gICAgfQotICAgIGVuZ2lu
ZS0+YW5pbWF0aW5nID0gMDsKLSAgICBlbmdpbmUtPmRpc3BsYXkgPSBFR0xfTk9fRElTUExBWTsK
LSAgICBlbmdpbmUtPmNvbnRleHQgPSBFR0xfTk9fQ09OVEVYVDsKLSAgICBlbmdpbmUtPnN1cmZh
Y2UgPSBFR0xfTk9fU1VSRkFDRTsKLX0KLQotLyoqCi0gKiBQcm9jZXNzIHRoZSBuZXh0IGlucHV0
IGV2ZW50LgotICovCi1zdGF0aWMgaW50MzJfdCBlbmdpbmVfaGFuZGxlX2lucHV0KHN0cnVjdCBh
bmRyb2lkX2FwcCogYXBwLCBBSW5wdXRFdmVudCogZXZlbnQpIHsKLSAgICBzdHJ1Y3QgZW5naW5l
KiBlbmdpbmUgPSAoc3RydWN0IGVuZ2luZSopYXBwLT51c2VyRGF0YTsKLSAgICBpZiAoQUlucHV0
RXZlbnRfZ2V0VHlwZShldmVudCkgPT0gQUlOUFVUX0VWRU5UX1RZUEVfTU9USU9OKSB7Ci0gICAg
ICAgIGVuZ2luZS0+YW5pbWF0aW5nID0gMTsKLSAgICAgICAgZW5naW5lLT5zdGF0ZS54ID0gQU1v
dGlvbkV2ZW50X2dldFgoZXZlbnQsIDApOwotICAgICAgICBlbmdpbmUtPnN0YXRlLnkgPSBBTW90
aW9uRXZlbnRfZ2V0WShldmVudCwgMCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLSAgICBy
ZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBQcm9jZXNzIHRoZSBuZXh0IG1haW4gY29tbWFuZC4KLSAq
Lwotc3RhdGljIHZvaWQgZW5naW5lX2hhbmRsZV9jbWQoc3RydWN0IGFuZHJvaWRfYXBwKiBhcHAs
IGludDMyX3QgY21kKSB7Ci0gICAgc3RydWN0IGVuZ2luZSogZW5naW5lID0gKHN0cnVjdCBlbmdp
bmUqKWFwcC0+dXNlckRhdGE7Ci0gICAgc3dpdGNoIChjbWQpIHsKLSAgICAgICAgY2FzZSBBUFBf
Q01EX1NBVkVfU1RBVEU6Ci0gICAgICAgICAgICAvLyBUaGUgc3lzdGVtIGhhcyBhc2tlZCB1cyB0
byBzYXZlIG91ciBjdXJyZW50IHN0YXRlLiAgRG8gc28uCi0gICAgICAgICAgICBlbmdpbmUtPmFw
cC0+c2F2ZWRTdGF0ZSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNhdmVkX3N0YXRlKSk7Ci0gICAg
ICAgICAgICAqKChzdHJ1Y3Qgc2F2ZWRfc3RhdGUqKWVuZ2luZS0+YXBwLT5zYXZlZFN0YXRlKSA9
IGVuZ2luZS0+c3RhdGU7Ci0gICAgICAgICAgICBlbmdpbmUtPmFwcC0+c2F2ZWRTdGF0ZVNpemUg
PSBzaXplb2Yoc3RydWN0IHNhdmVkX3N0YXRlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFQUF9DTURfSU5JVF9XSU5ET1c6Ci0gICAgICAgICAgICAvLyBUaGUgd2luZG93IGlz
IGJlaW5nIHNob3duLCBnZXQgaXQgcmVhZHkuCi0gICAgICAgICAgICBpZiAoZW5naW5lLT5hcHAt
PndpbmRvdyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZW5naW5lX2luaXRfZGlzcGxheShl
bmdpbmUpOwotICAgICAgICAgICAgICAgIGVuZ2luZV9kcmF3X2ZyYW1lKGVuZ2luZSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBUFBfQ01EX1RFUk1f
V0lORE9XOgotICAgICAgICAgICAgLy8gVGhlIHdpbmRvdyBpcyBiZWluZyBoaWRkZW4gb3IgY2xv
c2VkLCBjbGVhbiBpdCB1cC4KLSAgICAgICAgICAgIGVuZ2luZV90ZXJtX2Rpc3BsYXkoZW5naW5l
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFQUF9DTURfR0FJTkVEX0ZPQ1VT
OgotICAgICAgICAgICAgLy8gV2hlbiBvdXIgYXBwIGdhaW5zIGZvY3VzLCB3ZSBzdGFydCBtb25p
dG9yaW5nIHRoZSBhY2NlbGVyb21ldGVyLgotICAgICAgICAgICAgaWYgKGVuZ2luZS0+YWNjZWxl
cm9tZXRlclNlbnNvciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgQVNlbnNvckV2ZW50UXVl
dWVfZW5hYmxlU2Vuc29yKGVuZ2luZS0+c2Vuc29yRXZlbnRRdWV1ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNvcik7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UnZCBsaWtlIHRvIGdldCA2MCBldmVudHMgcGVyIHNlY29uZCAoaW4gdXMpLgotICAgICAg
ICAgICAgICAgIEFTZW5zb3JFdmVudFF1ZXVlX3NldEV2ZW50UmF0ZShlbmdpbmUtPnNlbnNvckV2
ZW50UXVldWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBlbmdpbmUtPmFjY2VsZXJvbWV0ZXJT
ZW5zb3IsICgxMDAwTC82MCkqMTAwMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBBUFBfQ01EX0xPU1RfRk9DVVM6Ci0gICAgICAgICAgICAvLyBXaGVu
IG91ciBhcHAgbG9zZXMgZm9jdXMsIHdlIHN0b3AgbW9uaXRvcmluZyB0aGUgYWNjZWxlcm9tZXRl
ci4KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdG8gYXZvaWQgY29uc3VtaW5nIGJhdHRlcnkgd2hp
bGUgbm90IGJlaW5nIHVzZWQuCi0gICAgICAgICAgICBpZiAoZW5naW5lLT5hY2NlbGVyb21ldGVy
U2Vuc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBBU2Vuc29yRXZlbnRRdWV1ZV9kaXNh
YmxlU2Vuc29yKGVuZ2luZS0+c2Vuc29yRXZlbnRRdWV1ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZ2luZS0+YWNjZWxlcm9tZXRlclNlbnNvcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAvLyBBbHNvIHN0b3AgYW5pbWF0aW5nLgotICAgICAgICAgICAgZW5naW5lLT5hbmltYXRp
bmcgPSAwOwotICAgICAgICAgICAgZW5naW5lX2RyYXdfZnJhbWUoZW5naW5lKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgIH0KLX0KLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBtYWluIGVudHJ5IHBv
aW50IG9mIGEgbmF0aXZlIGFwcGxpY2F0aW9uIHRoYXQgaXMgdXNpbmcKLSAqIGFuZHJvaWRfbmF0
aXZlX2FwcF9nbHVlLiAgSXQgcnVucyBpbiBpdHMgb3duIHRocmVhZCwgd2l0aCBpdHMgb3duCi0g
KiBldmVudCBsb29wIGZvciByZWNlaXZpbmcgaW5wdXQgZXZlbnRzIGFuZCBkb2luZyBvdGhlciB0
aGluZ3MuCi0gKi8KLXZvaWQgYW5kcm9pZF9tYWluKHN0cnVjdCBhbmRyb2lkX2FwcCogc3RhdGUp
IHsKLSAgICBzdHJ1Y3QgZW5naW5lIGVuZ2luZTsKLQotICAgIC8vIE1ha2Ugc3VyZSBnbHVlIGlz
bid0IHN0cmlwcGVkLgotICAgIGFwcF9kdW1teSgpOwotCi0gICAgbWVtc2V0KCZlbmdpbmUsIDAs
IHNpemVvZihlbmdpbmUpKTsKLSAgICBzdGF0ZS0+dXNlckRhdGEgPSAmZW5naW5lOwotICAgIHN0
YXRlLT5vbkFwcENtZCA9IGVuZ2luZV9oYW5kbGVfY21kOwotICAgIHN0YXRlLT5vbklucHV0RXZl
bnQgPSBlbmdpbmVfaGFuZGxlX2lucHV0OwotICAgIGVuZ2luZS5hcHAgPSBzdGF0ZTsKLQotICAg
IC8vIFByZXBhcmUgdG8gbW9uaXRvciBhY2NlbGVyb21ldGVyCi0gICAgZW5naW5lLnNlbnNvck1h
bmFnZXIgPSBBU2Vuc29yTWFuYWdlcl9nZXRJbnN0YW5jZSgpOwotICAgIGVuZ2luZS5hY2NlbGVy
b21ldGVyU2Vuc29yID0gQVNlbnNvck1hbmFnZXJfZ2V0RGVmYXVsdFNlbnNvcihlbmdpbmUuc2Vu
c29yTWFuYWdlciwKLSAgICAgICAgICAgIEFTRU5TT1JfVFlQRV9BQ0NFTEVST01FVEVSKTsKLSAg
ICBlbmdpbmUuc2Vuc29yRXZlbnRRdWV1ZSA9IEFTZW5zb3JNYW5hZ2VyX2NyZWF0ZUV2ZW50UXVl
dWUoZW5naW5lLnNlbnNvck1hbmFnZXIsCi0gICAgICAgICAgICBzdGF0ZS0+bG9vcGVyLCBMT09Q
RVJfSURfVVNFUiwgTlVMTCwgTlVMTCk7Ci0KLSAgICBpZiAoc3RhdGUtPnNhdmVkU3RhdGUgIT0g
TlVMTCkgewotICAgICAgICAvLyBXZSBhcmUgc3RhcnRpbmcgd2l0aCBhIHByZXZpb3VzIHNhdmVk
IHN0YXRlOyByZXN0b3JlIGZyb20gaXQuCi0gICAgICAgIGVuZ2luZS5zdGF0ZSA9ICooc3RydWN0
IHNhdmVkX3N0YXRlKilzdGF0ZS0+c2F2ZWRTdGF0ZTsKLSAgICB9Ci0KLSAgICAvLyBsb29wIHdh
aXRpbmcgZm9yIHN0dWZmIHRvIGRvLgotCi0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgLy8gUmVh
ZCBhbGwgcGVuZGluZyBldmVudHMuCi0gICAgICAgIGludCBpZGVudDsKLSAgICAgICAgaW50IGV2
ZW50czsKLSAgICAgICAgc3RydWN0IGFuZHJvaWRfcG9sbF9zb3VyY2UqIHNvdXJjZTsKLQotICAg
ICAgICAvLyBJZiBub3QgYW5pbWF0aW5nLCB3ZSB3aWxsIGJsb2NrIGZvcmV2ZXIgd2FpdGluZyBm
b3IgZXZlbnRzLgotICAgICAgICAvLyBJZiBhbmltYXRpbmcsIHdlIGxvb3AgdW50aWwgYWxsIGV2
ZW50cyBhcmUgcmVhZCwgdGhlbiBjb250aW51ZQotICAgICAgICAvLyB0byBkcmF3IHRoZSBuZXh0
IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICAgICAgd2hpbGUgKChpZGVudD1BTG9vcGVyX3BvbGxB
bGwoZW5naW5lLmFuaW1hdGluZyA/IDAgOiAtMSwgTlVMTCwgJmV2ZW50cywKLSAgICAgICAgICAg
ICAgICAodm9pZCoqKSZzb3VyY2UpKSA+PSAwKSB7Ci0KLSAgICAgICAgICAgIC8vIFByb2Nlc3Mg
dGhpcyBldmVudC4KLSAgICAgICAgICAgIGlmIChzb3VyY2UgIT0gTlVMTCkgewotICAgICAgICAg
ICAgICAgIHNvdXJjZS0+cHJvY2VzcyhzdGF0ZSwgc291cmNlKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgLy8gSWYgYSBzZW5zb3IgaGFzIGRhdGEsIHByb2Nlc3MgaXQgbm93LgotICAg
ICAgICAgICAgaWYgKGlkZW50ID09IExPT1BFUl9JRF9VU0VSKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGVuZ2luZS5hY2NlbGVyb21ldGVyU2Vuc29yICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAg
ICAgICAgQVNlbnNvckV2ZW50IGV2ZW50OwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAoQVNl
bnNvckV2ZW50UXVldWVfZ2V0RXZlbnRzKGVuZ2luZS5zZW5zb3JFdmVudFF1ZXVlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZldmVudCwgMSkgPiAwKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBMT0dJKCJhY2NlbGVyb21ldGVyOiB4PSVmIHk9JWYgej0lZiIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LmFjY2VsZXJhdGlvbi54LCBldmVudC5hY2NlbGVy
YXRpb24ueSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuYWNjZWxlcmF0
aW9uLnopOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAvLyBDaGVjayBpZiB3ZSBhcmUgZXhpdGluZy4KLSAgICAg
ICAgICAgIGlmIChzdGF0ZS0+ZGVzdHJveVJlcXVlc3RlZCAhPSAwKSB7Ci0gICAgICAgICAgICAg
ICAgZW5naW5lX3Rlcm1fZGlzcGxheSgmZW5naW5lKTsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoZW5naW5lLmFuaW1hdGlu
ZykgewotICAgICAgICAgICAgLy8gRG9uZSB3aXRoIGV2ZW50czsgZHJhdyBuZXh0IGFuaW1hdGlv
biBmcmFtZS4KLSAgICAgICAgICAgIGVuZ2luZS5zdGF0ZS5hbmdsZSArPSAuMDFmOwotICAgICAg
ICAgICAgaWYgKGVuZ2luZS5zdGF0ZS5hbmdsZSA+IDEpIHsKLSAgICAgICAgICAgICAgICBlbmdp
bmUuc3RhdGUuYW5nbGUgPSAwOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBEcmF3
aW5nIGlzIHRocm90dGxlZCB0byB0aGUgc2NyZWVuIHVwZGF0ZSByYXRlLCBzbyB0aGVyZQotICAg
ICAgICAgICAgLy8gaXMgbm8gbmVlZCB0byBkbyB0aW1pbmcgaGVyZS4KLSAgICAgICAgICAgIGVu
Z2luZV9kcmF3X2ZyYW1lKCZlbmdpbmUpOwotICAgICAgICB9Ci0gICAgfQotfQotLy9FTkRfSU5D
TFVERShhbGwpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0
Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRlc3QvcmVzL3ZhbHVl
cy9zdHJpbmdzLnhtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3dlYnJ0Yy9tb2R1bGVzL2F1ZGlvX3Byb2Nlc3NpbmcvdGVzdC9hbmRyb2lkL2FwbXRl
c3QvcmVzL3ZhbHVlcy9zdHJpbmdzLnhtbAkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5n
L3Rlc3QvYW5kcm9pZC9hcG10ZXN0L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+
Ci08cmVzb3VyY2VzPgotICAgIDxzdHJpbmcgbmFtZT0iYXBwX25hbWUiPmFwbXRlc3Q8L3N0cmlu
Zz4KLTwvcmVzb3VyY2VzPgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9pZC9hcG10ZXN0L3Jl
cy92YWx1ZXMvc3RyaW5ncy54bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy9hdWRpb19wcm9jZXNzaW5nL3Rlc3QvYW5kcm9p
ZC9hcG10ZXN0L3Jlcy92YWx1ZXMvc3RyaW5ncy54bWwJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvYXVkaW9fcHJv
Y2Vzc2luZy90ZXN0L2FuZHJvaWQvYXBtdGVzdC9yZXMvdmFsdWVzL3N0cmluZ3MueG1sCShub25l
eGlzdGVudCkKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1
dGYtOCI/PgotPHJlc291cmNlcz4KLSAgICA8c3RyaW5nIG5hbWU9ImFwcF9uYW1lIj5hcG10ZXN0
PC9zdHJpbmc+Ci08L3Jlc291cmNlcz4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5kcm9pZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRj
L21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5kcm9pZC5oCShyZXZpc2lvbiAyMTIy
NzMpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVz
L3V0aWxpdHkvaW5jbHVkZS9oZWxwZXJzX2FuZHJvaWQuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDg3
ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEzIFRoZSBXZWJSVEMgcHJvamVjdCBh
dXRob3JzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUg
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAg
dHJlZS4gQW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNh
biBiZSBmb3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHBy
b2plY3QgYXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRo
ZSByb290IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVT
X1VUSUxJVFlfSU5DTFVERV9IRUxQRVJTX0FORFJPSURfSF8KLSNkZWZpbmUgV0VCUlRDX01PRFVM
RVNfVVRJTElUWV9JTkNMVURFX0hFTFBFUlNfQU5EUk9JRF9IXwotCi0jaW5jbHVkZSA8am5pLmg+
Ci0jaW5jbHVkZSA8c3RyaW5nPgotCi0vLyBBYm9ydCB0aGUgcHJvY2VzcyBpZiB8am5pfCBoYXMg
YSBKYXZhIGV4Y2VwdGlvbiBwZW5kaW5nLgotLy8gVE9ETyhoZW5yaWthKTogbWVyZ2Ugd2l0aCBD
SEVDS19KTklfRVhDRVBUSU9OKCkgaW4gam5pX2hlbHBlcnMuaC4KLSNkZWZpbmUgQ0hFQ0tfRVhD
RVBUSU9OKGpuaSkgICAgICAgIFwKLSAgUlRDX0NIRUNLKCFqbmktPkV4Y2VwdGlvbkNoZWNrKCkp
IFwKLSAgICAgIDw8IChqbmktPkV4Y2VwdGlvbkRlc2NyaWJlKCksIGpuaS0+RXhjZXB0aW9uQ2xl
YXIoKSwgIiIpCi0KLW5hbWVzcGFjZSB3ZWJydGMgewotCi0vLyBSZXR1cm4gYSB8Sk5JRW52Knwg
dXNhYmxlIG9uIHRoaXMgdGhyZWFkIG9yIE5VTEwgaWYgdGhpcyB0aHJlYWQgaXMgZGV0YWNoZWQu
Ci1KTklFbnYqIEdldEVudihKYXZhVk0qIGp2bSk7Ci0KLS8vIFJldHVybiBhIHxqbG9uZ3wgdGhh
dCB3aWxsIGNvcnJlY3RseSBjb252ZXJ0IGJhY2sgdG8gfHB0cnwuICBUaGlzIGlzIG5lZWRlZAot
Ly8gYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUgKG9mIHNpbGVudGx5IHBhc3NpbmcgYSAzMi1iaXQg
cG9pbnRlciB0byBhIHZhcmFyZwotLy8gZnVuY3Rpb24gZXhwZWN0aW5nIGEgNjQtYml0IHBhcmFt
KSBwaWNrcyB1cCBnYXJiYWdlIGluIHRoZSBoaWdoIDMyIGJpdHMuCi1qbG9uZyBQb2ludGVyVG9q
bG9uZyh2b2lkKiBwdHIpOwotCi0vLyBKTklFbnYtaGVscGVyIG1ldGhvZHMgdGhhdCB3cmFwcyB0
aGUgQVBJIHdoaWNoIHVzZXMgdGhlIEpOSSBpbnRlcmZhY2UKLS8vIHBvaW50ZXIgKEpOSUVudiop
LiBJdCBhbGxvd3MgdXMgdG8gUlRDX0NIRUNLIHN1Y2Nlc3MgYW5kIHRoYXQgbm8gSmF2YQotLy8g
ZXhjZXB0aW9uIGlzIHRocm93biB3aGlsZSBjYWxsaW5nIHRoZSBtZXRob2QuCi1qbWV0aG9kSUQg
R2V0TWV0aG9kSUQoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBjaGFyKiBzaWduYXR1cmUpOwotCi1qbWV0aG9kSUQgR2V0U3RhdGljTWV0aG9kSUQo
Ci0gICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFy
KiBzaWduYXR1cmUpOwotCi1qY2xhc3MgRmluZENsYXNzKEpOSUVudiogam5pLCBjb25zdCBjaGFy
KiBuYW1lKTsKLQotam9iamVjdCBOZXdHbG9iYWxSZWYoSk5JRW52KiBqbmksIGpvYmplY3Qgbyk7
Ci0KLXZvaWQgRGVsZXRlR2xvYmFsUmVmKEpOSUVudiogam5pLCBqb2JqZWN0IG8pOwotCi0vLyBS
ZXR1cm4gdGhyZWFkIElEIGFzIGEgc3RyaW5nLgotc3RkOjpzdHJpbmcgR2V0VGhyZWFkSWQoKTsK
LQotLy8gUmV0dXJuIHRocmVhZCBJRCBhcyBzdHJpbmcgc3VpdGFibGUgZm9yIGRlYnVnIGxvZ2dp
bmcuCi1zdGQ6OnN0cmluZyBHZXRUaHJlYWRJbmZvKCk7Ci0KLS8vIEF0dGFjaCB0aHJlYWQgdG8g
SlZNIGlmIG5lY2Vzc2FyeSBhbmQgZGV0YWNoIGF0IHNjb3BlIGVuZCBpZiBvcmlnaW5hbGx5Ci0v
LyBhdHRhY2hlZC4KLWNsYXNzIEF0dGFjaFRocmVhZFNjb3BlZCB7Ci0gcHVibGljOgotICBleHBs
aWNpdCBBdHRhY2hUaHJlYWRTY29wZWQoSmF2YVZNKiBqdm0pOwotICB+QXR0YWNoVGhyZWFkU2Nv
cGVkKCk7Ci0gIEpOSUVudiogZW52KCk7Ci0KLSBwcml2YXRlOgotICBib29sIGF0dGFjaGVkXzsK
LSAgSmF2YVZNKiBqdm1fOwotICBKTklFbnYqIGVudl87Ci19OwotCi0vLyBTY29wZWQgaG9sZGVy
IGZvciBnbG9iYWwgSmF2YSByZWZzLgotdGVtcGxhdGU8Y2xhc3MgVD4gIC8vIFQgaXMgamNsYXNz
LCBqb2JqZWN0LCBqaW50QXJyYXksIGV0Yy4KLWNsYXNzIFNjb3BlZEdsb2JhbFJlZiB7Ci0gcHVi
bGljOgotICBTY29wZWRHbG9iYWxSZWYoSk5JRW52KiBqbmksIFQgb2JqKQotICAgICAgOiBqbmlf
KGpuaSksIG9ial8oc3RhdGljX2Nhc3Q8VD4oTmV3R2xvYmFsUmVmKGpuaSwgb2JqKSkpIHt9Ci0g
IH5TY29wZWRHbG9iYWxSZWYoKSB7Ci0gICAgRGVsZXRlR2xvYmFsUmVmKGpuaV8sIG9ial8pOwot
ICB9Ci0gIFQgb3BlcmF0b3IqKCkgY29uc3QgewotICAgIHJldHVybiBvYmpfOwotICB9Ci0gcHJp
dmF0ZToKLSAgSk5JRW52KiBqbmlfOwotICBUIG9ial87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ug
d2VicnRjCi0KLSNlbmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfVVRJTElUWV9JTkNMVURFX0hFTFBF
UlNfQU5EUk9JRF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS93
ZWJydGMvbW9kdWxlcy91dGlsaXR5L2luY2x1ZGUvanZtX2FuZHJvaWQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL3V0aWxp
dHkvaW5jbHVkZS9qdm1fYW5kcm9pZC5oCShyZXZpc2lvbiAyMTIyNzMpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvaW5jbHVkZS9q
dm1fYW5kcm9pZC5oCShub25leGlzdGVudCkKQEAgLTEsMTg3ICswLDAgQEAKLS8qCi0gKiAgQ29w
eXJpZ2h0IChjKSAyMDE1IFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3JzLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4gQW4gYWRkaXRpb25hbCBp
bnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBmb3VuZAotICogIGluIHRo
ZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3QgYXV0aG9ycyBtYXkKLSAq
ICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2Ug
dHJlZS4KLSAqLwotCi0jaWZuZGVmIFdFQlJUQ19NT0RVTEVTX1VUSUxJVFlfSU5DTFVERV9KVk1f
QU5EUk9JRF9IXwotI2RlZmluZSBXRUJSVENfTU9EVUxFU19VVElMSVRZX0lOQ0xVREVfSlZNX0FO
RFJPSURfSF8KLQotI2luY2x1ZGUgPGpuaS5oPgotCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1
ZGUgPHN0cmluZz4KLQotI2luY2x1ZGUgIndlYnJ0Yy9iYXNlL3RocmVhZF9jaGVja2VyLmgiCi0j
aW5jbHVkZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRlL2hlbHBlcnNfYW5kcm9pZC5o
IgotCi1uYW1lc3BhY2Ugd2VicnRjIHsKLQotLy8gVGhlIEpOSSBpbnRlcmZhY2UgcG9pbnRlciAo
Sk5JRW52KSBpcyB2YWxpZCBvbmx5IGluIHRoZSBjdXJyZW50IHRocmVhZC4KLS8vIFNob3VsZCBh
bm90aGVyIHRocmVhZCBuZWVkIHRvIGFjY2VzcyB0aGUgSmF2YSBWTSwgaXQgbXVzdCBmaXJzdCBj
YWxsCi0vLyBBdHRhY2hDdXJyZW50VGhyZWFkKCkgdG8gYXR0YWNoIGl0c2VsZiB0byB0aGUgVk0g
YW5kIG9idGFpbiBhIEpOSSBpbnRlcmZhY2UKLS8vIHBvaW50ZXIuIFRoZSBuYXRpdmUgdGhyZWFk
IHJlbWFpbnMgYXR0YWNoZWQgdG8gdGhlIFZNIHVudGlsIGl0IGNhbGxzCi0vLyBEZXRhY2hDdXJy
ZW50VGhyZWFkKCkgdG8gZGV0YWNoLgotY2xhc3MgQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVk
IHsKLSBwdWJsaWM6Ci0gIEF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpOwotICB+QXR0YWNo
Q3VycmVudFRocmVhZElmTmVlZGVkKCk7Ci0KLSBwcml2YXRlOgotICBydGM6OlRocmVhZENoZWNr
ZXIgdGhyZWFkX2NoZWNrZXJfOwotICBib29sIGF0dGFjaGVkXzsKLX07Ci0KLS8vIFRoaXMgY2xh
c3MgaXMgY3JlYXRlZCBieSB0aGUgTmF0aXZlUmVnaXN0cmF0aW9uIGNsYXNzIGFuZCBpcyB1c2Vk
IHRvIHdyYXAKLS8vIHRoZSBhY3R1YWwgSmF2YSBvYmplY3QgaGFuZGxlIChqb2JqZWN0KSBvbiB3
aGljaCB3ZSBjYW4gY2FsbCBtZXRob2RzIGZyb20KLS8vIEMrKyBpbiB0byBKYXZhLiBTZWUgZXhh
bXBsZSBpbiBKVk0gZm9yIG1vcmUgZGV0YWlscy4KLS8vIFRPRE8oaGVucmlrYSk6IGV4dGVuZCBz
dXBwb3J0IGZvciB0eXBlIG9mIGZ1bmN0aW9uIGNhbGxzLgotY2xhc3MgR2xvYmFsUmVmIHsKLSBw
dWJsaWM6Ci0gIEdsb2JhbFJlZihKTklFbnYqIGpuaSwgam9iamVjdCBvYmplY3QpOwotICB+R2xv
YmFsUmVmKCk7Ci0KLSAgamJvb2xlYW4gQ2FsbEJvb2xlYW5NZXRob2Qoam1ldGhvZElEIG1ldGhv
ZElELCAuLi4pOwotICBqaW50IENhbGxJbnRNZXRob2Qoam1ldGhvZElEIG1ldGhvZElELCAuLi4p
OwotICB2b2lkIENhbGxWb2lkTWV0aG9kKGptZXRob2RJRCBtZXRob2RJRCwgLi4uKTsKLQotIHBy
aXZhdGU6Ci0gIEpOSUVudiogY29uc3Qgam5pXzsKLSAgY29uc3Qgam9iamVjdCBqX29iamVjdF87
Ci19OwotCi0vLyBXcmFwcyB0aGUgamNsYXNzIG9iamVjdCBvbiB3aGljaCB3ZSBjYW4gY2FsbCBH
ZXRNZXRob2RJZCgpIGZ1bmN0aW9ucyB0bwotLy8gcXVlcnkgbWV0aG9kIElEcy4KLWNsYXNzIEph
dmFDbGFzcyB7Ci0gcHVibGljOgotICBKYXZhQ2xhc3MoSk5JRW52KiBqbmksIGpjbGFzcyBjbGF6
eikgOiBqbmlfKGpuaSksIGpfY2xhc3NfKGNsYXp6KSB7fQotICB+SmF2YUNsYXNzKCkge30KLQot
ICBqbWV0aG9kSUQgR2V0TWV0aG9kSWQoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2ln
bmF0dXJlKTsKLSAgam1ldGhvZElEIEdldFN0YXRpY01ldGhvZElkKGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IGNoYXIqIHNpZ25hdHVyZSk7Ci0gIGpvYmplY3QgQ2FsbFN0YXRpY09iamVjdE1ldGhv
ZChqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7Ci0gIGppbnQgQ2FsbFN0YXRpY0ludE1ldGhvZChq
bWV0aG9kSUQgbWV0aG9kSUQsIC4uLik7Ci0KLSBwcm90ZWN0ZWQ6Ci0gIEpOSUVudiogY29uc3Qg
am5pXzsKLSAgamNsYXNzIGNvbnN0IGpfY2xhc3NfOwotfTsKLQotLy8gQWRkcyBzdXBwb3J0IG9m
IHRoZSBOZXdPYmplY3QgZmFjdG9yeSBtZXRob2QgdG8gdGhlIEphdmFDbGFzcyBjbGFzcy4KLS8v
IFNlZSBleGFtcGxlIGluIEpWTSBmb3IgbW9yZSBkZXRhaWxzIG9uIGhvdyB0byB1c2UgaXQuCi1j
bGFzcyBOYXRpdmVSZWdpc3RyYXRpb24gOiBwdWJsaWMgSmF2YUNsYXNzIHsKLSBwdWJsaWM6Ci0g
IE5hdGl2ZVJlZ2lzdHJhdGlvbihKTklFbnYqIGpuaSwgamNsYXNzIGNsYXp6KTsKLSAgfk5hdGl2
ZVJlZ2lzdHJhdGlvbigpOwotCi0gIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+IE5ld09iamVj
dCgKLSAgICAgIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSwgLi4uKTsK
LQotIHByaXZhdGU6Ci0gIEpOSUVudiogY29uc3Qgam5pXzsKLX07Ci0KLS8vIFRoaXMgY2xhc3Mg
aXMgY3JlYXRlZCBieSB0aGUgSlZNIGNsYXNzIGFuZCBpcyB1c2VkIHRvIGV4cG9zZSBtZXRob2Rz
IHRoYXQKLS8vIG5lZWRzIHRoZSBKTkkgaW50ZXJmYWNlIHBvaW50ZXIgYnV0IGl0cyBtYWluIHB1
cnBvc2UgaXMgdG8gY3JlYXRlIGEKLS8vIE5hdGl2ZVJlZ2lzdHJhdGlvbiBvYmplY3QgZ2l2ZW4g
bmFtZSBvZiBhIEphdmEgY2xhc3MgYW5kIGEgbGlzdCBvZiBuYXRpdmUKLS8vIG1ldGhvZHMuIFNl
ZSBleGFtcGxlIGluIEpWTSBmb3IgbW9yZSBkZXRhaWxzLgotY2xhc3MgSk5JRW52aXJvbm1lbnQg
ewotIHB1YmxpYzoKLSAgZXhwbGljaXQgSk5JRW52aXJvbm1lbnQoSk5JRW52KiBqbmkpOwotICB+
Sk5JRW52aXJvbm1lbnQoKTsKLQotICAvLyBSZWdpc3RlcnMgbmF0aXZlIG1ldGhvZHMgd2l0aCB0
aGUgSmF2YSBjbGFzcyBzcGVjaWZpZWQgYnkgfG5hbWV8LgotICAvLyBOb3RlIHRoYXQgdGhlIGNs
YXNzIG5hbWUgbXVzdCBiZSBvbmUgb2YgdGhlIG5hbWVzIGluIHRoZSBzdGF0aWMKLSAgLy8gfGxv
YWRlZF9jbGFzc2VzfCBhcnJheSBkZWZpbmVkIGluIGp2bV9hbmRyb2lkLmNjLgotICAvLyBUaGlz
IG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBvbiB0aGUgY29uc3RydWN0aW9uIHRocmVhZC4KLSAgc3Rk
Ojp1bmlxdWVfcHRyPE5hdGl2ZVJlZ2lzdHJhdGlvbj4gUmVnaXN0ZXJOYXRpdmVzKAotICAgICAg
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgSk5JTmF0aXZlTWV0aG9kICptZXRob2RzLCBpbnQgbnVt
X21ldGhvZHMpOwotCi0gIC8vIENvbnZlcnRzIGZyb20gSmF2YSBzdHJpbmcgdG8gc3RkOjpzdHJp
bmcuCi0gIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIG9uIHRoZSBjb25zdHJ1Y3Rpb24g
dGhyZWFkLgotICBzdGQ6OnN0cmluZyBKYXZhVG9TdGRTdHJpbmcoY29uc3QganN0cmluZyYgal9z
dHJpbmcpOwotCi0gcHJpdmF0ZToKLSAgcnRjOjpUaHJlYWRDaGVja2VyIHRocmVhZF9jaGVja2Vy
XzsKLSAgSk5JRW52KiBjb25zdCBqbmlfOwotfTsKLQotLy8gTWFpbiBjbGFzcyBmb3Igd29ya2lu
ZyB3aXRoIEphdmEgZnJvbSBDKysgdXNpbmcgSk5JIGluIFdlYlJUQy4KLS8vCi0vLyBFeGFtcGxl
IHVzYWdlOgotLy8KLS8vICAgLy8gQXQgaW5pdGlhbGl6YXRpb24gKGUuZy4gaW4gSk5JX09uTG9h
ZCksIGNhbGwgSlZNOjpJbml0aWFsaXplLgotLy8gICBKTklFbnYqIGpuaSA9IDo6YmFzZTo6YW5k
cm9pZDo6QXR0YWNoQ3VycmVudFRocmVhZCgpOwotLy8gICBKYXZhVk0qIGp2bSA9IE5VTEw7Ci0v
LyAgIGpuaS0+R2V0SmF2YVZNKCZqdm0pOwotLy8gICBqb2JqZWN0IGNvbnRleHQgPSA6OmJhc2U6
OmFuZHJvaWQ6OkdldEFwcGxpY2F0aW9uQ29udGV4dCgpOwotLy8gICB3ZWJydGM6OkpWTTo6SW5p
dGlhbGl6ZShqdm0sIGNvbnRleHQpOwotLy8KLS8vICAgLy8gSGVhZGVyICguaCkgZmlsZSBvZiBl
eGFtcGxlIGNsYXNzIGNhbGxlZCBVc2VyLgotLy8gICBzdGQ6OnVuaXF1ZV9wdHI8Sk5JRW52aXJv
bm1lbnQ+IGVudjsKLS8vICAgc3RkOjp1bmlxdWVfcHRyPE5hdGl2ZVJlZ2lzdHJhdGlvbj4gcmVn
OwotLy8gICBzdGQ6OnVuaXF1ZV9wdHI8R2xvYmFsUmVmPiBvYmo7Ci0vLwotLy8gICAvLyBDb25z
dHJ1Y3Rpb24gKGluIC5jYyBmaWxlKSBvZiBVc2VyIGNsYXNzLgotLy8gICBVc2VyOjpVc2VyKCkg
ewotLy8gICAgIC8vIENhbGxpbmcgdGhyZWFkIG11c3QgYmUgYXR0YWNoZWQgdG8gdGhlIEpWTS4K
LS8vICAgICBlbnYgPSBKVk06OkdldEluc3RhbmNlKCktPmVudmlyb25tZW50KCk7Ci0vLyAgICAg
cmVnID0gZW52LT5SZWdpc3Rlck5hdGl2ZXMoIm9yZy93ZWJydGMvV2ViUnRjVGVzdCIsICwpOwot
Ly8gICAgIG9iaiA9IHJlZy0+TmV3T2JqZWN0KCI8aW5pdD4iLCAsKTsKLS8vICAgfQotLy8KLS8v
ICAgLy8gRWFjaCBVc2VyIG1ldGhvZCBjYW4gbm93IHVzZSB8cmVnfCBhbmQgfG9ianwgYW5kIGNh
bGwgSmF2YSBmdW5jdGlvbnMKLS8vICAgLy8gaW4gV2ViUnRjVGVzdC5qYXZhLCBlLmcuIGJvb2xl
YW4gaW5pdCgpIHt9LgotLy8gICBib29sIFVzZXI6OkZvbygpIHsKLS8vICAgICBqbWV0aG9kSUQg
aWQgPSByZWctPkdldE1ldGhvZElkKCJpbml0IiwgIigpWiIpOwotLy8gICAgIHJldHVybiBvYmot
PkNhbGxCb29sZWFuTWV0aG9kKGlkKTsKLS8vICAgfQotLy8KLS8vICAgLy8gQW5kIGZpbmFsbHks
IGUuZy4gaW4gSk5JX09uVW5Mb2FkLCBjYWxsIEpWTTo6VW5pbml0aWFsaXplLgotLy8gICBKVk06
OlVuaW5pdGlhbGl6ZSgpOwotY2xhc3MgSlZNIHsKLSBwdWJsaWM6Ci0gIC8vIFN0b3JlcyBnbG9i
YWwgaGFuZGxlcyB0byB0aGUgSmF2YSBWTSBpbnRlcmZhY2UgYW5kIHRoZSBhcHBsaWNhdGlvbiBj
b250ZXh0LgotICAvLyBTaG91bGQgYmUgY2FsbGVkIG9uY2Ugb24gYSB0aHJlYWQgdGhhdCBpcyBh
dHRhY2hlZCB0byB0aGUgSlZNLgotICBzdGF0aWMgdm9pZCBJbml0aWFsaXplKEphdmFWTSoganZt
LCBqb2JqZWN0IGNvbnRleHQpOwotICAvLyBDbGVhcnMgaGFuZGxlcyBzdG9yZWQgaW4gSW5pdGlh
bGl6ZSgpLiBNdXN0IGJlIGNhbGxlZCBvbiBzYW1lIHRocmVhZCBhcwotICAvLyBJbml0aWFsaXpl
KCkuCi0gIHN0YXRpYyB2b2lkIFVuaW5pdGlhbGl6ZSgpOwotICAvLyBHaXZlcyBhY2Nlc3MgdG8g
dGhlIGdsb2JhbCBKYXZhIFZNIGludGVyZmFjZSBwb2ludGVyLCB3aGljaCB0aGVuIGNhbiBiZQot
ICAvLyB1c2VkIHRvIGNyZWF0ZSBhIHZhbGlkIEpOSUVudmlyb25tZW50IG9iamVjdCBvciB0byBn
ZXQgYSBKYXZhQ2xhc3Mgb2JqZWN0LgotICBzdGF0aWMgSlZNKiBHZXRJbnN0YW5jZSgpOwotCi0g
IC8vIENyZWF0ZXMgYSBKTklFbnZpcm9ubWVudCBvYmplY3QuCi0gIC8vIFRoaXMgbWV0aG9kIHJl
dHVybnMgYSBOVUxMIHBvaW50ZXIgaWYgQXR0YWNoQ3VycmVudFRocmVhZCgpIGhhcyBub3QgYmVl
bgotICAvLyBjYWxsZWQgc3VjY2Vzc2Z1bGx5LiBVc2UgdGhlIEF0dGFjaEN1cnJlbnRUaHJlYWRJ
Zk5lZWRlZCBjbGFzcyBpZiBuZWVkZWQuCi0gIHN0ZDo6dW5pcXVlX3B0cjxKTklFbnZpcm9ubWVu
dD4gZW52aXJvbm1lbnQoKTsKLQotICAvLyBSZXR1cm5zIGEgSmF2YUNsYXNzIG9iamVjdCBnaXZl
biBjbGFzcyB8bmFtZXwuCi0gIC8vIE5vdGUgdGhhdCB0aGUgY2xhc3MgbmFtZSBtdXN0IGJlIG9u
ZSBvZiB0aGUgbmFtZXMgaW4gdGhlIHN0YXRpYwotICAvLyB8bG9hZGVkX2NsYXNzZXN8IGFycmF5
IGRlZmluZWQgaW4ganZtX2FuZHJvaWQuY2MuCi0gIC8vIFRoaXMgbWV0aG9kIG11c3QgYmUgY2Fs
bGVkIG9uIHRoZSBjb25zdHJ1Y3Rpb24gdGhyZWFkLgotICBKYXZhQ2xhc3MgR2V0Q2xhc3MoY29u
c3QgY2hhciogbmFtZSk7Ci0KLSAgLy8gVE9ETyhoZW5yaWthKTogY2FuIHdlIG1ha2UgdGhlc2Ug
cHJpdmF0ZT8KLSAgSmF2YVZNKiBqdm0oKSBjb25zdCB7IHJldHVybiBqdm1fOyB9Ci0gIGpvYmpl
Y3QgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnRleHRfOyB9Ci0KLSBwcm90ZWN0ZWQ6Ci0g
IEpWTShKYXZhVk0qIGp2bSwgam9iamVjdCBjb250ZXh0KTsKLSAgfkpWTSgpOwotCi0gcHJpdmF0
ZToKLSAgSk5JRW52KiBqbmkoKSBjb25zdCB7IHJldHVybiBHZXRFbnYoanZtXyk7IH0KLQotICBy
dGM6OlRocmVhZENoZWNrZXIgdGhyZWFkX2NoZWNrZXJfOwotICBKYXZhVk0qIGNvbnN0IGp2bV87
Ci0gIGpvYmplY3QgY29udGV4dF87Ci19OwotCi19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCi0KLSNl
bmRpZiAgLy8gV0VCUlRDX01PRFVMRVNfVVRJTElUWV9JTkNMVURFX0pWTV9BTkRST0lEX0hfCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL3V0
aWxpdHkvc291cmNlL2hlbHBlcnNfYW5kcm9pZC5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvc291cmNlL2hl
bHBlcnNfYW5kcm9pZC5jYwkocmV2aXNpb24gMjEyMjczKQorKysgU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS93ZWJydGMvbW9kdWxlcy91dGlsaXR5L3NvdXJjZS9oZWxwZXJzX2Fu
ZHJvaWQuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqICBDb3B5cmln
aHQgKGMpIDIwMTMgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFsbCBSaWdodHMgUmVzZXJ2
ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
IGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBhZGRpdGlvbmFsIGludGVs
bGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5kCi0gKiAgaW4gdGhlIGZp
bGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRob3JzIG1heQotICogIGJl
IGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2YgdGhlIHNvdXJjZSB0cmVl
LgotICovCi0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLSNpbmNsdWRlICJ3ZWJy
dGMvbW9kdWxlcy91dGlsaXR5L2luY2x1ZGUvaGVscGVyc19hbmRyb2lkLmgiCi0KLSNpbmNsdWRl
IDxhbmRyb2lkL2xvZy5oPgotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPHB0aHJlYWQu
aD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2RlZmluZSBU
QUcgIkhlbHBlcnNBbmRyb2lkIgotI2RlZmluZSBBTE9HRCguLi4pIF9fYW5kcm9pZF9sb2dfcHJp
bnQoQU5EUk9JRF9MT0dfREVCVUcsIFRBRywgX19WQV9BUkdTX18pCi0KLW5hbWVzcGFjZSB3ZWJy
dGMgewotCi1KTklFbnYqIEdldEVudihKYXZhVk0qIGp2bSkgewotICB2b2lkKiBlbnYgPSBOVUxM
OwotICBqaW50IHN0YXR1cyA9IGp2bS0+R2V0RW52KCZlbnYsIEpOSV9WRVJTSU9OXzFfNik7Ci0g
IFJUQ19DSEVDSygoKGVudiAhPSBOVUxMKSAmJiAoc3RhdHVzID09IEpOSV9PSykpIHx8Ci0gICAg
ICAgICAgICAoKGVudiA9PSBOVUxMKSAmJiAoc3RhdHVzID09IEpOSV9FREVUQUNIRUQpKSkKLSAg
ICAgIDw8ICJVbmV4cGVjdGVkIEdldEVudiByZXR1cm46ICIgPDwgc3RhdHVzIDw8ICI6IiA8PCBl
bnY7Ci0gIHJldHVybiByZWludGVycHJldF9jYXN0PEpOSUVudio+KGVudik7Ci19Ci0KLS8vIFJl
dHVybiBhIHxqbG9uZ3wgdGhhdCB3aWxsIGNvcnJlY3RseSBjb252ZXJ0IGJhY2sgdG8gfHB0cnwu
ICBUaGlzIGlzIG5lZWRlZAotLy8gYmVjYXVzZSB0aGUgYWx0ZXJuYXRpdmUgKG9mIHNpbGVudGx5
IHBhc3NpbmcgYSAzMi1iaXQgcG9pbnRlciB0byBhIHZhcmFyZwotLy8gZnVuY3Rpb24gZXhwZWN0
aW5nIGEgNjQtYml0IHBhcmFtKSBwaWNrcyB1cCBnYXJiYWdlIGluIHRoZSBoaWdoIDMyIGJpdHMu
Ci1qbG9uZyBQb2ludGVyVG9qbG9uZyh2b2lkKiBwdHIpIHsKLSAgc3RhdGljX2Fzc2VydChzaXpl
b2YoaW50cHRyX3QpIDw9IHNpemVvZihqbG9uZyksCi0gICAgICAgICAgICAgICAgIlRpbWUgdG8g
cmV0aGluayB0aGUgdXNlIG9mIGpsb25ncyIpOwotICAvLyBHb2luZyB0aHJvdWdoIGludHB0cl90
IHRvIGJlIG9idmlvdXMgYWJvdXQgdGhlIGRlZmluZWRuZXNzIG9mIHRoZQotICAvLyBjb252ZXJz
aW9uIGZyb20gcG9pbnRlciB0byBpbnRlZ3JhbCB0eXBlLiAgaW50cHRyX3QgdG8gamxvbmcgaXMg
YSBzdGFuZGFyZAotICAvLyB3aWRlbmluZyBieSB0aGUgc3RhdGljX2Fzc2VydCBhYm92ZS4KLSAg
amxvbmcgcmV0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocHRyKTsKLSAgUlRDX0RDSEVD
SyhyZWludGVycHJldF9jYXN0PHZvaWQqPihyZXQpID09IHB0cik7Ci0gIHJldHVybiByZXQ7Ci19
Ci0KLWptZXRob2RJRCBHZXRNZXRob2RJRCAoCi0gICAgSk5JRW52KiBqbmksIGpjbGFzcyBjLCBj
b25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBzaWduYXR1cmUpIHsKLSAgam1ldGhvZElEIG0g
PSBqbmktPkdldE1ldGhvZElEKGMsIG5hbWUsIHNpZ25hdHVyZSk7Ci0gIENIRUNLX0VYQ0VQVElP
TihqbmkpIDw8ICJFcnJvciBkdXJpbmcgR2V0TWV0aG9kSUQ6ICIgPDwgbmFtZSA8PCAiLCAiCi0g
ICAgICAgICAgICAgICAgICAgICAgIDw8IHNpZ25hdHVyZTsKLSAgUlRDX0NIRUNLKG0pIDw8IG5h
bWUgPDwgIiwgIiA8PCBzaWduYXR1cmU7Ci0gIHJldHVybiBtOwotfQotCi1qbWV0aG9kSUQgR2V0
U3RhdGljTWV0aG9kSUQgKAotICAgIEpOSUVudiogam5pLCBqY2xhc3MgYywgY29uc3QgY2hhciog
bmFtZSwgY29uc3QgY2hhciogc2lnbmF0dXJlKSB7Ci0gIGptZXRob2RJRCBtID0gam5pLT5HZXRT
dGF0aWNNZXRob2RJRChjLCBuYW1lLCBzaWduYXR1cmUpOwotICBDSEVDS19FWENFUFRJT04oam5p
KSA8PCAiRXJyb3IgZHVyaW5nIEdldFN0YXRpY01ldGhvZElEOiAiIDw8IG5hbWUgPDwgIiwgIgot
ICAgICAgICAgICAgICAgICAgICAgICA8PCBzaWduYXR1cmU7Ci0gIFJUQ19DSEVDSyhtKSA8PCBu
YW1lIDw8ICIsICIgPDwgc2lnbmF0dXJlOwotICByZXR1cm4gbTsKLX0KLQotamNsYXNzIEZpbmRD
bGFzcyhKTklFbnYqIGpuaSwgY29uc3QgY2hhciogbmFtZSkgewotICBqY2xhc3MgYyA9IGpuaS0+
RmluZENsYXNzKG5hbWUpOwotICBDSEVDS19FWENFUFRJT04oam5pKSA8PCAiRXJyb3IgZHVyaW5n
IEZpbmRDbGFzczogIiA8PCBuYW1lOwotICBSVENfQ0hFQ0soYykgPDwgbmFtZTsKLSAgcmV0dXJu
IGM7Ci19Ci0KLWpvYmplY3QgTmV3R2xvYmFsUmVmKEpOSUVudiogam5pLCBqb2JqZWN0IG8pIHsK
LSAgam9iamVjdCByZXQgPSBqbmktPk5ld0dsb2JhbFJlZihvKTsKLSAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgIkVycm9yIGR1cmluZyBOZXdHbG9iYWxSZWYiOwotICBSVENfQ0hFQ0socmV0KTsK
LSAgcmV0dXJuIHJldDsKLX0KLQotdm9pZCBEZWxldGVHbG9iYWxSZWYoSk5JRW52KiBqbmksIGpv
YmplY3QgbykgewotICBqbmktPkRlbGV0ZUdsb2JhbFJlZihvKTsKLSAgQ0hFQ0tfRVhDRVBUSU9O
KGpuaSkgPDwgIkVycm9yIGR1cmluZyBEZWxldGVHbG9iYWxSZWYiOwotfQotCi1zdGQ6OnN0cmlu
ZyBHZXRUaHJlYWRJZCgpIHsKLSAgY2hhciBidWZbMjFdOyAgLy8gQmlnIGVub3VnaCB0byBob2xk
IGEga3VpbnQ2NG1heCBwbHVzIHRlcm1pbmF0aW5nIE5VTEwuCi0gIGludCB0aHJlYWRfaWQgPSBn
ZXR0aWQoKTsKLSAgUlRDX0NIRUNLX0xUKHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlaSIs
IHRocmVhZF9pZCksCi0gICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihidWYp
KSkKLSAgICAgIDw8ICJUaHJlYWQgaWQgaXMgYmlnZ2VyIHRoYW4gdWludDY0Pz8iOwotICByZXR1
cm4gc3RkOjpzdHJpbmcoYnVmKTsKLX0KLQotc3RkOjpzdHJpbmcgR2V0VGhyZWFkSW5mbygpIHsK
LSAgcmV0dXJuICJAW3RpZD0iICsgR2V0VGhyZWFkSWQoKSArICJdIjsKLX0KLQotQXR0YWNoVGhy
ZWFkU2NvcGVkOjpBdHRhY2hUaHJlYWRTY29wZWQoSmF2YVZNKiBqdm0pCi0gICAgOiBhdHRhY2hl
ZF8oZmFsc2UpLCBqdm1fKGp2bSksIGVudl8oTlVMTCkgewotICBlbnZfID0gR2V0RW52KGp2bSk7
Ci0gIGlmICghZW52XykgewotICAgIC8vIEFkZGluZyBkZWJ1ZyBsb2cgaGVyZSBzbyB3ZSBjYW4g
dHJhY2sgZG93biBwb3RlbnRpYWwgbGVha3MgYW5kIGZpZ3VyZQotICAgIC8vIG91dCB3aHkgd2Ug
c29tZXRpbWVzIHNlZSAiTmF0aXZlIHRocmVhZCBleGl0aW5nIHdpdGhvdXQgaGF2aW5nIGNhbGxl
ZAotICAgIC8vIERldGFjaEN1cnJlbnRUaHJlYWQiIGluIGxvZ2NhdCBvdXRwdXRzLgotICAgIEFM
T0dEKCJBdHRhY2hpbmcgdGhyZWFkIHRvIEpWTSVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkp
OwotICAgIGppbnQgcmVzID0ganZtLT5BdHRhY2hDdXJyZW50VGhyZWFkKCZlbnZfLCBOVUxMKTsK
LSAgICBhdHRhY2hlZF8gPSAocmVzID09IEpOSV9PSyk7Ci0gICAgUlRDX0NIRUNLKGF0dGFjaGVk
XykgPDwgIkF0dGFjaEN1cnJlbnRUaHJlYWQgZmFpbGVkOiAiIDw8IHJlczsKLSAgfQotfQotCi1B
dHRhY2hUaHJlYWRTY29wZWQ6On5BdHRhY2hUaHJlYWRTY29wZWQoKSB7Ci0gIGlmIChhdHRhY2hl
ZF8pIHsKLSAgICBBTE9HRCgiRGV0YWNoaW5nIHRocmVhZCBmcm9tIEpWTSVzIiwgR2V0VGhyZWFk
SW5mbygpLmNfc3RyKCkpOwotICAgIGppbnQgcmVzID0ganZtXy0+RGV0YWNoQ3VycmVudFRocmVh
ZCgpOwotICAgIFJUQ19DSEVDSyhyZXMgPT0gSk5JX09LKSA8PCAiRGV0YWNoQ3VycmVudFRocmVh
ZCBmYWlsZWQ6ICIgPDwgcmVzOwotICAgIFJUQ19DSEVDSyghR2V0RW52KGp2bV8pKTsKLSAgfQot
fQotCi1KTklFbnYqIEF0dGFjaFRocmVhZFNjb3BlZDo6ZW52KCkgeyByZXR1cm4gZW52XzsgfQot
Ci19ICAvLyBuYW1lc3BhY2Ugd2VicnRjCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3dlYnJ0Yy9tb2R1bGVzL3V0aWxpdHkvc291cmNlL2p2bV9hbmRyb2lkLmNjCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21v
ZHVsZXMvdXRpbGl0eS9zb3VyY2UvanZtX2FuZHJvaWQuY2MJKHJldmlzaW9uIDIxMjI3MykKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL21vZHVsZXMvdXRpbGl0
eS9zb3VyY2UvanZtX2FuZHJvaWQuY2MJKG5vbmV4aXN0ZW50KQpAQCAtMSwyNzYgKzAsMCBAQAot
LyoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFdlYlJUQyBwcm9qZWN0IGF1dGhvcnMuIEFs
bCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UKLSAqICB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IG9mIHRoZSBzb3VyY2UKLSAqICB0cmVlLiBBbiBh
ZGRpdGlvbmFsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZ3JhbnQgY2FuIGJlIGZvdW5k
Ci0gKiAgaW4gdGhlIGZpbGUgUEFURU5UUy4gIEFsbCBjb250cmlidXRpbmcgcHJvamVjdCBhdXRo
b3JzIG1heQotICogIGJlIGZvdW5kIGluIHRoZSBBVVRIT1JTIGZpbGUgaW4gdGhlIHJvb3Qgb2Yg
dGhlIHNvdXJjZSB0cmVlLgotICovCi0KLSNpbmNsdWRlIDxhbmRyb2lkL2xvZy5oPgotCi0jaW5j
bHVkZSA8bWVtb3J5PgotCi0jaW5jbHVkZSAid2VicnRjL21vZHVsZXMvdXRpbGl0eS9pbmNsdWRl
L2p2bV9hbmRyb2lkLmgiCi0KLSNpbmNsdWRlICJ3ZWJydGMvYmFzZS9jaGVja3MuaCIKLQotI2Rl
ZmluZSBUQUcgIkpWTSIKLSNkZWZpbmUgQUxPR0QoLi4uKSBfX2FuZHJvaWRfbG9nX3ByaW50KEFO
RFJPSURfTE9HX0RFQlVHLCBUQUcsIF9fVkFfQVJHU19fKQotI2RlZmluZSBBTE9HRSguLi4pIF9f
YW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsIFRBRywgX19WQV9BUkdTX18pCi0K
LW5hbWVzcGFjZSB3ZWJydGMgewotCi1KVk0qIGdfanZtOwotCi0vLyBUT0RPKGhlbnJpa2EpOiBh
ZGQgbW9yZSBjbGFzZXMgaGVyZSBpZiBuZWVkZWQuCi1zdHJ1Y3QgewotICBjb25zdCBjaGFyKiBu
YW1lOwotICBqY2xhc3MgY2xheno7Ci19IGxvYWRlZF9jbGFzc2VzW10gPSB7Ci0gIHsib3JnL3dl
YnJ0Yy92b2ljZWVuZ2luZS9CdWlsZEluZm8iLCBudWxscHRyfSwKLSAgeyJvcmcvd2VicnRjL3Zv
aWNlZW5naW5lL1dlYlJ0Y0F1ZGlvTWFuYWdlciIsIG51bGxwdHJ9LAotICB7Im9yZy93ZWJydGMv
dm9pY2VlbmdpbmUvV2ViUnRjQXVkaW9SZWNvcmQiLCBudWxscHRyfSwKLSAgeyJvcmcvd2VicnRj
L3ZvaWNlZW5naW5lL1dlYlJ0Y0F1ZGlvVHJhY2siLCBudWxscHRyfSwKLX07Ci0KLS8vIEFuZHJv
aWQncyBGaW5kQ2xhc3MoKSBpcyB0cmlja2llciB0aGFuIHVzdWFsIGJlY2F1c2UgdGhlIGFwcC1z
cGVjaWZpYwotLy8gQ2xhc3NMb2FkZXIgaXMgbm90IGNvbnN1bHRlZCB3aGVuIHRoZXJlIGlzIG5v
IGFwcC1zcGVjaWZpYyBmcmFtZSBvbiB0aGUKLS8vIHN0YWNrLiAgQ29uc2VxdWVudGx5LCB3ZSBv
bmx5IGxvb2sgdXAgYWxsIGNsYXNzZXMgb25jZSBpbiBuYXRpdmUgV2ViUlRDLgotLy8gaHR0cDov
L2RldmVsb3Blci5hbmRyb2lkLmNvbS90cmFpbmluZy9hcnRpY2xlcy9wZXJmLWpuaS5odG1sI2Zh
cV9GaW5kQ2xhc3MKLXZvaWQgTG9hZENsYXNzZXMoSk5JRW52KiBqbmkpIHsKLSAgQUxPR0QoIkxv
YWRDbGFzc2VzIik7Ci0gIGZvciAoYXV0byYgYyA6IGxvYWRlZF9jbGFzc2VzKSB7Ci0gICAgamNs
YXNzIGxvY2FsUmVmID0gRmluZENsYXNzKGpuaSwgYy5uYW1lKTsKLSAgICBBTE9HRCgibmFtZTog
JXMiLCBjLm5hbWUpOwotICAgIENIRUNLX0VYQ0VQVElPTihqbmkpIDw8ICJFcnJvciBkdXJpbmcg
RmluZENsYXNzOiAiIDw8IGMubmFtZTsKLSAgICBSVENfQ0hFQ0sobG9jYWxSZWYpIDw8IGMubmFt
ZTsKLSAgICBqY2xhc3MgZ2xvYmFsUmVmID0gcmVpbnRlcnByZXRfY2FzdDxqY2xhc3M+KGpuaS0+
TmV3R2xvYmFsUmVmKGxvY2FsUmVmKSk7Ci0gICAgQ0hFQ0tfRVhDRVBUSU9OKGpuaSkgPDwgIkVy
cm9yIGR1cmluZyBOZXdHbG9iYWxSZWY6ICIgPDwgYy5uYW1lOwotICAgIFJUQ19DSEVDSyhnbG9i
YWxSZWYpIDw8IGMubmFtZTsKLSAgICBjLmNsYXp6ID0gZ2xvYmFsUmVmOwotICB9Ci19Ci0KLXZv
aWQgRnJlZUNsYXNzUmVmZXJlbmNlcyhKTklFbnYqIGpuaSkgewotICBmb3IgKGF1dG8mIGMgOiBs
b2FkZWRfY2xhc3NlcykgewotICAgIGpuaS0+RGVsZXRlR2xvYmFsUmVmKGMuY2xhenopOwotICAg
IGMuY2xhenogPSBudWxscHRyOwotICB9Ci19Ci0KLWpjbGFzcyBMb29rVXBDbGFzcyhjb25zdCBj
aGFyKiBuYW1lKSB7Ci0gIGZvciAoYXV0byYgYyA6IGxvYWRlZF9jbGFzc2VzKSB7Ci0gICAgaWYg
KHN0cmNtcChjLm5hbWUsIG5hbWUpID09IDApCi0gICAgICByZXR1cm4gYy5jbGF6ejsKLSAgfQot
ICBSVENfQ0hFQ0soZmFsc2UpIDw8ICJVbmFibGUgdG8gZmluZCBjbGFzcyBpbiBsb29rdXAgdGFi
bGUiOwotICByZXR1cm4gMDsKLX0KLQotLy8gQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkIGlt
cGxlbWVudGF0aW9uLgotQXR0YWNoQ3VycmVudFRocmVhZElmTmVlZGVkOjpBdHRhY2hDdXJyZW50
VGhyZWFkSWZOZWVkZWQoKQotICAgIDogYXR0YWNoZWRfKGZhbHNlKSB7Ci0gIEFMT0dEKCJBdHRh
Y2hDdXJyZW50VGhyZWFkSWZOZWVkZWQ6OmN0b3IlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigp
KTsKLSAgSmF2YVZNKiBqdm0gPSBKVk06OkdldEluc3RhbmNlKCktPmp2bSgpOwotICBSVENfQ0hF
Q0soanZtKTsKLSAgSk5JRW52KiBqbmkgPSBHZXRFbnYoanZtKTsKLSAgaWYgKCFqbmkpIHsKLSAg
ICBBTE9HRCgiQXR0YWNoaW5nIHRocmVhZCB0byBKVk0iKTsKLSAgICBKTklFbnYqIGVudiA9IG51
bGxwdHI7Ci0gICAgamludCByZXQgPSBqdm0tPkF0dGFjaEN1cnJlbnRUaHJlYWQoJmVudiwgbnVs
bHB0cik7Ci0gICAgYXR0YWNoZWRfID0gKHJldCA9PSBKTklfT0spOwotICB9Ci19Ci0KLUF0dGFj
aEN1cnJlbnRUaHJlYWRJZk5lZWRlZDo6fkF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZCgpIHsK
LSAgQUxPR0QoIkF0dGFjaEN1cnJlbnRUaHJlYWRJZk5lZWRlZDo6ZHRvciVzIiwgR2V0VGhyZWFk
SW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZh
bGlkVGhyZWFkKCkpOwotICBpZiAoYXR0YWNoZWRfKSB7Ci0gICAgQUxPR0QoIkRldGFjaGluZyB0
aHJlYWQgZnJvbSBKVk0iKTsKLSAgICBqaW50IHJlcyA9IEpWTTo6R2V0SW5zdGFuY2UoKS0+anZt
KCktPkRldGFjaEN1cnJlbnRUaHJlYWQoKTsKLSAgICBSVENfQ0hFQ0socmVzID09IEpOSV9PSykg
PDwgIkRldGFjaEN1cnJlbnRUaHJlYWQgZmFpbGVkOiAiIDw8IHJlczsKLSAgfQotfQotCi0vLyBH
bG9iYWxSZWYgaW1wbGVtZW50YXRpb24uCi1HbG9iYWxSZWY6Okdsb2JhbFJlZihKTklFbnYqIGpu
aSwgam9iamVjdCBvYmplY3QpCi0gICAgOiBqbmlfKGpuaSksIGpfb2JqZWN0XyhOZXdHbG9iYWxS
ZWYoam5pLCBvYmplY3QpKSB7Ci0gIEFMT0dEKCJHbG9iYWxSZWY6OmN0b3IlcyIsIEdldFRocmVh
ZEluZm8oKS5jX3N0cigpKTsKLX0KLQotR2xvYmFsUmVmOjp+R2xvYmFsUmVmKCkgewotICBBTE9H
RCgiR2xvYmFsUmVmOjpkdG9yJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIERlbGV0
ZUdsb2JhbFJlZihqbmlfLCBqX29iamVjdF8pOwotfQotCi1qYm9vbGVhbiBHbG9iYWxSZWY6OkNh
bGxCb29sZWFuTWV0aG9kKGptZXRob2RJRCBtZXRob2RJRCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXJn
czsKLSAgdmFfc3RhcnQoYXJncywgbWV0aG9kSUQpOwotICBqYm9vbGVhbiByZXMgPSBqbmlfLT5D
YWxsQm9vbGVhbk1ldGhvZFYoal9vYmplY3RfLCBtZXRob2RJRCwgYXJncyk7Ci0gIENIRUNLX0VY
Q0VQVElPTihqbmlfKSA8PCAiRXJyb3IgZHVyaW5nIENhbGxCb29sZWFuTWV0aG9kIjsKLSAgdmFf
ZW5kKGFyZ3MpOwotICByZXR1cm4gcmVzOwotfQotCi1qaW50IEdsb2JhbFJlZjo6Q2FsbEludE1l
dGhvZChqbWV0aG9kSUQgbWV0aG9kSUQsIC4uLikgewotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX3N0
YXJ0KGFyZ3MsIG1ldGhvZElEKTsKLSAgamludCByZXMgPSBqbmlfLT5DYWxsSW50TWV0aG9kVihq
X29iamVjdF8sIG1ldGhvZElELCBhcmdzKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaV8pIDw8ICJF
cnJvciBkdXJpbmcgQ2FsbEludE1ldGhvZCI7Ci0gIHZhX2VuZChhcmdzKTsKLSAgcmV0dXJuIHJl
czsKLX0KLQotdm9pZCBHbG9iYWxSZWY6OkNhbGxWb2lkTWV0aG9kKGptZXRob2RJRCBtZXRob2RJ
RCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgbWV0aG9kSUQpOwot
ICBqbmlfLT5DYWxsVm9pZE1ldGhvZFYoal9vYmplY3RfLCBtZXRob2RJRCwgYXJncyk7Ci0gIENI
RUNLX0VYQ0VQVElPTihqbmlfKSA8PCAiRXJyb3IgZHVyaW5nIENhbGxWb2lkTWV0aG9kIjsKLSAg
dmFfZW5kKGFyZ3MpOwotfQotCi0vLyBOYXRpdmVSZWdpc3RyYXRpb24gaW1wbGVtZW50YXRpb24u
Ci1OYXRpdmVSZWdpc3RyYXRpb246Ok5hdGl2ZVJlZ2lzdHJhdGlvbihKTklFbnYqIGpuaSwgamNs
YXNzIGNsYXp6KQotICAgIDogSmF2YUNsYXNzKGpuaSwgY2xhenopLCBqbmlfKGpuaSkgewotICBB
TE9HRCgiTmF0aXZlUmVnaXN0cmF0aW9uOjpjdG9yJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIo
KSk7Ci19Ci0KLU5hdGl2ZVJlZ2lzdHJhdGlvbjo6fk5hdGl2ZVJlZ2lzdHJhdGlvbigpIHsKLSAg
QUxPR0QoIk5hdGl2ZVJlZ2lzdHJhdGlvbjo6ZHRvciVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3Ry
KCkpOwotICBqbmlfLT5VbnJlZ2lzdGVyTmF0aXZlcyhqX2NsYXNzXyk7Ci0gIENIRUNLX0VYQ0VQ
VElPTihqbmlfKSA8PCAiRXJyb3IgZHVyaW5nIFVucmVnaXN0ZXJOYXRpdmVzIjsKLX0KLQotc3Rk
Ojp1bmlxdWVfcHRyPEdsb2JhbFJlZj4gTmF0aXZlUmVnaXN0cmF0aW9uOjpOZXdPYmplY3QoCi0g
ICAgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnbmF0dXJlLCAuLi4pIHsKLSAgQUxP
R0QoIk5hdGl2ZVJlZ2lzdHJhdGlvbjo6TmV3T2JqZWN0JXMiLCBHZXRUaHJlYWRJbmZvKCkuY19z
dHIoKSk7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgc2lnbmF0dXJlKTsKLSAg
am9iamVjdCBvYmogPSBqbmlfLT5OZXdPYmplY3RWKGpfY2xhc3NfLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR2V0TWV0aG9kSUQoam5pXywgal9jbGFzc18sIG5hbWUsIHNpZ25h
dHVyZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzKTsKLSAgQ0hFQ0tf
RVhDRVBUSU9OKGpuaV8pIDw8ICJFcnJvciBkdXJpbmcgTmV3T2JqZWN0ViI7Ci0gIHZhX2VuZChh
cmdzKTsKLSAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxHbG9iYWxSZWY+KG5ldyBHbG9iYWxSZWYo
am5pXywgb2JqKSk7Ci19Ci0KLS8vIEphdmFDbGFzcyBpbXBsZW1lbnRhdGlvbi4KLWptZXRob2RJ
RCBKYXZhQ2xhc3M6OkdldE1ldGhvZElkKAotICAgIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNo
YXIqIHNpZ25hdHVyZSkgewotICByZXR1cm4gR2V0TWV0aG9kSUQoam5pXywgal9jbGFzc18sIG5h
bWUsIHNpZ25hdHVyZSk7Ci19Ci0KLWptZXRob2RJRCBKYXZhQ2xhc3M6OkdldFN0YXRpY01ldGhv
ZElkKAotICAgIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSkgewotICBy
ZXR1cm4gR2V0U3RhdGljTWV0aG9kSUQoam5pXywgal9jbGFzc18sIG5hbWUsIHNpZ25hdHVyZSk7
Ci19Ci0KLWpvYmplY3QgSmF2YUNsYXNzOjpDYWxsU3RhdGljT2JqZWN0TWV0aG9kKGptZXRob2RJ
RCBtZXRob2RJRCwgLi4uKSB7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgbWV0
aG9kSUQpOwotICBqb2JqZWN0IHJlcyA9IGpuaV8tPkNhbGxTdGF0aWNPYmplY3RNZXRob2Qoal9j
bGFzc18sIG1ldGhvZElELCBhcmdzKTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaV8pIDw8ICJFcnJv
ciBkdXJpbmcgQ2FsbFN0YXRpY09iamVjdE1ldGhvZCI7Ci0gIHJldHVybiByZXM7Ci19Ci0KLWpp
bnQgSmF2YUNsYXNzOjpDYWxsU3RhdGljSW50TWV0aG9kKGptZXRob2RJRCBtZXRob2RJRCwgLi4u
KSB7Ci0gIHZhX2xpc3QgYXJnczsKLSAgdmFfc3RhcnQoYXJncywgbWV0aG9kSUQpOwotICBqaW50
IHJlcyA9IGpuaV8tPkNhbGxTdGF0aWNJbnRNZXRob2Qoal9jbGFzc18sIG1ldGhvZElELCBhcmdz
KTsKLSAgQ0hFQ0tfRVhDRVBUSU9OKGpuaV8pIDw8ICJFcnJvciBkdXJpbmcgQ2FsbFN0YXRpY0lu
dE1ldGhvZCI7Ci0gIHJldHVybiByZXM7Ci19Ci0KLS8vIEpOSUVudmlyb25tZW50IGltcGxlbWVu
dGF0aW9uLgotSk5JRW52aXJvbm1lbnQ6OkpOSUVudmlyb25tZW50KEpOSUVudiogam5pKSA6IGpu
aV8oam5pKSB7Ci0gIEFMT0dEKCJKTklFbnZpcm9ubWVudDo6Y3RvciVzIiwgR2V0VGhyZWFkSW5m
bygpLmNfc3RyKCkpOwotfQotCi1KTklFbnZpcm9ubWVudDo6fkpOSUVudmlyb25tZW50KCkgewot
ICBBTE9HRCgiSk5JRW52aXJvbm1lbnQ6OmR0b3IlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigp
KTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsK
LX0KLQotc3RkOjp1bmlxdWVfcHRyPE5hdGl2ZVJlZ2lzdHJhdGlvbj4gSk5JRW52aXJvbm1lbnQ6
OlJlZ2lzdGVyTmF0aXZlcygKLSAgICBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBKTklOYXRpdmVN
ZXRob2QgKm1ldGhvZHMsIGludCBudW1fbWV0aG9kcykgewotICBBTE9HRCgiSk5JRW52aXJvbm1l
bnQ6OlJlZ2lzdGVyTmF0aXZlcyglcykiLCBuYW1lKTsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hl
Y2tlcl8uQ2FsbGVkT25WYWxpZFRocmVhZCgpKTsKLSAgamNsYXNzIGNsYXp6ID0gTG9va1VwQ2xh
c3MobmFtZSk7Ci0gIGpuaV8tPlJlZ2lzdGVyTmF0aXZlcyhjbGF6eiwgbWV0aG9kcywgbnVtX21l
dGhvZHMpOwotICBDSEVDS19FWENFUFRJT04oam5pXykgPDwgIkVycm9yIGR1cmluZyBSZWdpc3Rl
ck5hdGl2ZXMiOwotICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPE5hdGl2ZVJlZ2lzdHJhdGlvbj4o
Ci0gICAgICBuZXcgTmF0aXZlUmVnaXN0cmF0aW9uKGpuaV8sIGNsYXp6KSk7Ci19Ci0KLXN0ZDo6
c3RyaW5nIEpOSUVudmlyb25tZW50OjpKYXZhVG9TdGRTdHJpbmcoY29uc3QganN0cmluZyYgal9z
dHJpbmcpIHsKLSAgUlRDX0RDSEVDSyh0aHJlYWRfY2hlY2tlcl8uQ2FsbGVkT25WYWxpZFRocmVh
ZCgpKTsKLSAgY29uc3QgY2hhciogamNoYXJzID0gam5pXy0+R2V0U3RyaW5nVVRGQ2hhcnMoal9z
dHJpbmcsIG51bGxwdHIpOwotICBDSEVDS19FWENFUFRJT04oam5pXyk7Ci0gIGNvbnN0IGludCBz
aXplID0gam5pXy0+R2V0U3RyaW5nVVRGTGVuZ3RoKGpfc3RyaW5nKTsKLSAgQ0hFQ0tfRVhDRVBU
SU9OKGpuaV8pOwotICBzdGQ6OnN0cmluZyByZXQoamNoYXJzLCBzaXplKTsKLSAgam5pXy0+UmVs
ZWFzZVN0cmluZ1VURkNoYXJzKGpfc3RyaW5nLCBqY2hhcnMpOwotICBDSEVDS19FWENFUFRJT04o
am5pXyk7Ci0gIHJldHVybiByZXQ7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBKVk06OkluaXRpYWxp
emUoSmF2YVZNKiBqdm0sIGpvYmplY3QgY29udGV4dCkgewotICBBTE9HRCgiSlZNOjpJbml0aWFs
aXplJXMiLCBHZXRUaHJlYWRJbmZvKCkuY19zdHIoKSk7Ci0gIFJUQ19DSEVDSyghZ19qdm0pOwot
ICBnX2p2bSA9IG5ldyBKVk0oanZtLCBjb250ZXh0KTsKLX0KLQotLy8gc3RhdGljCi12b2lkIEpW
TTo6VW5pbml0aWFsaXplKCkgewotICBBTE9HRCgiSlZNOjpVbmluaXRpYWxpemUlcyIsIEdldFRo
cmVhZEluZm8oKS5jX3N0cigpKTsKLSAgUlRDX0RDSEVDSyhnX2p2bSk7Ci0gIGRlbGV0ZSBnX2p2
bTsKLSAgZ19qdm0gPSBudWxscHRyOwotfQotCi0vLyBzdGF0aWMKLUpWTSogSlZNOjpHZXRJbnN0
YW5jZSgpIHsKLSAgUlRDX0RDSEVDSyhnX2p2bSk7Ci0gIHJldHVybiBnX2p2bTsKLX0KLQotSlZN
OjpKVk0oSmF2YVZNKiBqdm0sIGpvYmplY3QgY29udGV4dCkKLSAgICA6IGp2bV8oanZtKSB7Ci0g
IEFMT0dEKCJKVk06OkpWTSVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfQ0hF
Q0soam5pKCkpIDw8ICJBdHRhY2hDdXJyZW50VGhyZWFkKCkgbXVzdCBiZSBjYWxsZWQgb24gdGhp
cyB0aHJlYWQuIjsKLSAgY29udGV4dF8gPSBOZXdHbG9iYWxSZWYoam5pKCksIGNvbnRleHQpOwot
ICBMb2FkQ2xhc3NlcyhqbmkoKSk7Ci19Ci0KLUpWTTo6fkpWTSgpIHsKLSAgQUxPR0QoIkpWTTo6
fkpWTSVzIiwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENIRUNLKHRocmVhZF9j
aGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICBGcmVlQ2xhc3NSZWZlcmVuY2VzKGpu
aSgpKTsKLSAgRGVsZXRlR2xvYmFsUmVmKGpuaSgpLCBjb250ZXh0Xyk7Ci19Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxKTklFbnZpcm9ubWVudD4gSlZNOjplbnZpcm9ubWVudCgpIHsKLSAgQUxPR0QoIkpW
TTo6ZW52aXJvbm1lbnQlcyIsIEdldFRocmVhZEluZm8oKS5jX3N0cigpKTsKLSAgLy8gVGhlIEpO
SUVudiBpcyB1c2VkIGZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZS4gRm9yIHRoaXMgcmVhc29uLCB3
ZSBjYW5ub3QKLSAgLy8gc2hhcmUgYSBKTklFbnYgYmV0d2VlbiB0aHJlYWRzLiBJZiBhIHBpZWNl
IG9mIGNvZGUgaGFzIG5vIG90aGVyIHdheSB0byBnZXQKLSAgLy8gaXRzIEpOSUVudiwgd2Ugc2hv
dWxkIHNoYXJlIHRoZSBKYXZhVk0sIGFuZCB1c2UgR2V0RW52IHRvIGRpc2NvdmVyIHRoZQotICAv
LyB0aHJlYWQncyBKTklFbnYuIChBc3N1bWluZyBpdCBoYXMgb25lLCBpZiBub3QsIHVzZSBBdHRh
Y2hDdXJyZW50VGhyZWFkKS4KLSAgLy8gU2VlIC8vIGh0dHA6Ly9kZXZlbG9wZXIuYW5kcm9pZC5j
b20vdHJhaW5pbmcvYXJ0aWNsZXMvcGVyZi1qbmkuaHRtbC4KLSAgSk5JRW52KiBqbmkgPSBHZXRF
bnYoanZtXyk7Ci0gIGlmICgham5pKSB7Ci0gICAgQUxPR0UoIkF0dGFjaEN1cnJlbnRUaHJlYWQo
KSBoYXMgbm90IGJlZW4gY2FsbGVkIG9uIHRoaXMgdGhyZWFkLiIpOwotICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8Sk5JRW52aXJvbm1lbnQ+KCk7Ci0gIH0KLSAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxKTklFbnZpcm9ubWVudD4obmV3IEpOSUVudmlyb25tZW50KGpuaSkpOwotfQotCi1KYXZh
Q2xhc3MgSlZNOjpHZXRDbGFzcyhjb25zdCBjaGFyKiBuYW1lKSB7Ci0gIEFMT0dEKCJKVk06Okdl
dENsYXNzKCVzKSVzIiwgbmFtZSwgR2V0VGhyZWFkSW5mbygpLmNfc3RyKCkpOwotICBSVENfRENI
RUNLKHRocmVhZF9jaGVja2VyXy5DYWxsZWRPblZhbGlkVGhyZWFkKCkpOwotICByZXR1cm4gSmF2
YUNsYXNzKGpuaSgpLCBMb29rVXBDbGFzcyhuYW1lKSk7Ci19Ci0KLX0gIC8vIG5hbWVzcGFjZSB3
ZWJydGMKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3N5
c3RlbV93cmFwcGVycy9zb3VyY2UvY3B1X2ZlYXR1cmVzX2FuZHJvaWQuYwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3dlYnJ0Yy9zeXN0ZW1fd3JhcHBl
cnMvc291cmNlL2NwdV9mZWF0dXJlc19hbmRyb2lkLmMJKHJldmlzaW9uIDIxMjI3MykKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uvd2VicnRjL3N5c3RlbV93cmFwcGVycy9z
b3VyY2UvY3B1X2ZlYXR1cmVzX2FuZHJvaWQuYwkobm9uZXhpc3RlbnQpCkBAIC0xLDE1ICswLDAg
QEAKLS8qCi0gKiAgQ29weXJpZ2h0IChjKSAyMDEyIFRoZSBXZWJSVEMgcHJvamVjdCBhdXRob3Jz
LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqICBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlCi0gKiAgdGhhdCBjYW4gYmUgZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBvZiB0aGUgc291cmNlCi0gKiAgdHJlZS4g
QW4gYWRkaXRpb25hbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGdyYW50IGNhbiBiZSBm
b3VuZAotICogIGluIHRoZSBmaWxlIFBBVEVOVFMuICBBbGwgY29udHJpYnV0aW5nIHByb2plY3Qg
YXV0aG9ycyBtYXkKLSAqICBiZSBmb3VuZCBpbiB0aGUgQVVUSE9SUyBmaWxlIGluIHRoZSByb290
IG9mIHRoZSBzb3VyY2UgdHJlZS4KLSAqLwotCi0jaW5jbHVkZSA8Y3B1LWZlYXR1cmVzLmg+Ci0K
LXVpbnQ2NF90IFdlYlJ0Y19HZXRDUFVGZWF0dXJlc0FSTSh2b2lkKSB7Ci0gIHJldHVybiBhbmRy
b2lkX2dldENwdUZlYXR1cmVzKCk7Ci19Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>